/home/lnzliplg/public_html/php.tar
sapi/cli/cli.h000064400000004200151730541050007164 0ustar00/*
  +----------------------------------------------------------------------+
  | Copyright (c) The PHP Group                                          |
  +----------------------------------------------------------------------+
  | This source file is subject to version 3.01 of the PHP license,      |
  | that is bundled with this package in the file LICENSE, and is        |
  | available through the world-wide-web at the following url:           |
  | https://www.php.net/license/3_01.txt                                 |
  | If you did not receive a copy of the PHP license and are unable to   |
  | obtain it through the world-wide-web, please send a note to          |
  | license@php.net so we can mail you a copy immediately.               |
  +----------------------------------------------------------------------+
  | Author: Johannes Schlueter <johannes@php.net>                        |
  +----------------------------------------------------------------------+
*/

#ifndef CLI_H
#define CLI_H

#ifdef PHP_WIN32
#   define PHP_CLI_API __declspec(dllexport)
#elif defined(__GNUC__) && __GNUC__ >= 4
#   define PHP_CLI_API __attribute__ ((visibility("default")))
#else
#   define PHP_CLI_API
#endif


extern PHP_CLI_API ssize_t sapi_cli_single_write(const char *str, size_t str_length);

typedef struct  {
	size_t (*cli_shell_write)(const char *str, size_t str_length);
	size_t (*cli_shell_ub_write)(const char *str, size_t str_length);
	int (*cli_shell_run)(void);
} cli_shell_callbacks_t;

extern PHP_CLI_API cli_shell_callbacks_t *php_cli_get_shell_callbacks(void);

typedef enum php_cli_mode {
	PHP_CLI_MODE_STANDARD = 1,
	PHP_CLI_MODE_HIGHLIGHT = 2,
	PHP_CLI_MODE_LINT = 4,
	PHP_CLI_MODE_STRIP = 5,
	PHP_CLI_MODE_CLI_DIRECT = 6,
	PHP_CLI_MODE_PROCESS_STDIN = 7,
	PHP_CLI_MODE_REFLECTION_FUNCTION = 8,
	PHP_CLI_MODE_REFLECTION_CLASS = 9,
	PHP_CLI_MODE_REFLECTION_EXTENSION = 10,
	PHP_CLI_MODE_REFLECTION_EXT_INFO = 11,
	PHP_CLI_MODE_REFLECTION_ZEND_EXTENSION = 12,
	PHP_CLI_MODE_SHOW_INI_CONFIG = 13,
	PHP_CLI_MODE_SHOW_INI_DIFF = 14,
} php_cli_mode;

typedef struct php_cli_server_context {
	php_cli_mode mode;
} php_cli_server_context;

#endif /* CLI_H */
ext/lexbor/php_lexbor.h000064400000002476151730541050011164 0ustar00/*
   +----------------------------------------------------------------------+
   | Copyright (c) The PHP Group                                          |
   +----------------------------------------------------------------------+
   | This source file is subject to version 3.01 of the PHP license,      |
   | that is bundled with this package in the file LICENSE, and is        |
   | available through the world-wide-web at the following url:           |
   | https://www.php.net/license/3_01.txt                                 |
   | If you did not receive a copy of the PHP license and are unable to   |
   | obtain it through the world-wide-web, please send a note to          |
   | license@php.net so we can mail you a copy immediately.               |
   +----------------------------------------------------------------------+
   | Authors: Niels Dossche <nielsdos@php.net>                            |
   |          Mate Kocsis <kocsismate@php.net>                            |
   +----------------------------------------------------------------------+
*/

#ifndef PHP_LEXBOR_H
#define PHP_LEXBOR_H

#ifdef HAVE_LEXBOR
extern zend_module_entry lexbor_module_entry;
#define phpext_lexbor_ptr &lexbor_module_entry

#if defined(ZTS) && defined(COMPILE_DL_LEXBOR)
ZEND_TSRMLS_CACHE_EXTERN()
#endif

#endif
#endif /* PHP_LEXBOR_H */
ext/imagick/php_imagick_shared.h000064400000003444151730541060012731 0ustar00/*
   +----------------------------------------------------------------------+
   | PHP Version 5 / Imagick	                                          |
   +----------------------------------------------------------------------+
   | Copyright (c) 2006-2013 Mikko Koppanen, Scott MacVicar               |
   | ImageMagick (c) ImageMagick Studio LLC                               |
   +----------------------------------------------------------------------+
   | This source file is subject to version 3.01 of the PHP license,      |
   | that is bundled with this package in the file LICENSE, and is        |
   | available through the world-wide-web at the following url:           |
   | http://www.php.net/license/3_01.txt                                  |
   | If you did not receive a copy of the PHP license and are unable to   |
   | obtain it through the world-wide-web, please send a note to          |
   | license@php.net so we can mail you a copy immediately.               |
   +----------------------------------------------------------------------+
   | Author: Mikko Kopppanen <mkoppanen@php.net>                          |
   |         Scott MacVicar <scottmac@php.net>                            |
   +----------------------------------------------------------------------+
*/

#ifndef _PHP_IMAGICK_SHARED_H_
# define _PHP_IMAGICK_SHARED_H_

/* Should work with ImageMagick 6.x for now */
#include "php.h"

#if defined(PHP_WIN32) && defined(IMAGICK_EXPORTS)
#define PHP_IMAGICK_API __declspec(dllexport)
#else
#define PHP_IMAGICK_API PHPAPI
#endif

/*
	Allow extensions to use the class entries
*/
PHP_IMAGICK_API zend_class_entry *php_imagick_get_class_entry();
PHP_IMAGICK_API zend_class_entry *php_imagickdraw_get_class_entry();
PHP_IMAGICK_API zend_class_entry *php_imagickpixel_get_class_entry();

#endif
ext/psr/psr_simple_cache.h000064400000003151151730541060011623 0ustar00
#ifndef PSR_SIMPLE_CACHE_H
#define PSR_SIMPLE_CACHE_H

#include "php.h"
#include "php_psr.h"

#define PHP_PSR_SIMPLE_CACHE_VERSION "1.0.0"
#define PHP_PSR_SIMPLE_CACHE_VERSION_ID 10000

extern PHP_PSR_API zend_class_entry * PsrSimpleCacheCacheException_ce_ptr;
extern PHP_PSR_API zend_class_entry * PsrSimpleCacheCacheInterface_ce_ptr;
extern PHP_PSR_API zend_class_entry * PsrSimpleCacheInvalidArgumentException_ce_ptr;

extern PHP_MINIT_FUNCTION(psr_simple_cache);

PHP_PSR_BEGIN_ARG_INFO(SimpleCache, CacheInterface, get, 1)
    ZEND_ARG_INFO(0, key)
    ZEND_ARG_INFO(0, default)
PHP_PSR_END_ARG_INFO()

PHP_PSR_BEGIN_ARG_INFO(SimpleCache, CacheInterface, set, 2)
    ZEND_ARG_INFO(0, key)
    ZEND_ARG_INFO(0, value)
    ZEND_ARG_INFO(0, ttl)
PHP_PSR_END_ARG_INFO()

PHP_PSR_BEGIN_ARG_INFO(SimpleCache, CacheInterface, delete, 1)
    ZEND_ARG_INFO(0, key)
PHP_PSR_END_ARG_INFO()

PHP_PSR_BEGIN_ARG_INFO(SimpleCache, CacheInterface, clear, 0)
PHP_PSR_END_ARG_INFO()

PHP_PSR_BEGIN_ARG_INFO(SimpleCache, CacheInterface, getMultiple, 1)
    ZEND_ARG_INFO(0, keys)
    ZEND_ARG_INFO(0, default)
PHP_PSR_END_ARG_INFO()

PHP_PSR_BEGIN_ARG_INFO(SimpleCache, CacheInterface, setMultiple, 1)
    ZEND_ARG_INFO(0, values)
    ZEND_ARG_INFO(0, ttl)
PHP_PSR_END_ARG_INFO()

PHP_PSR_BEGIN_ARG_INFO(SimpleCache, CacheInterface, deleteMultiple, 1)
    ZEND_ARG_INFO(0, keys)
PHP_PSR_END_ARG_INFO()

PHP_PSR_BEGIN_ARG_INFO(SimpleCache, CacheInterface, has, 1)
    ZEND_ARG_INFO(0, key)
PHP_PSR_END_ARG_INFO()

#endif /* PSR_CACHE_H */

/*
 * Local variables:
 * tab-width: 4
 * c-basic-offset: 4
 * End:
 * vim600: fdm=marker
 * vim: et sw=4 ts=4
 */
ext/psr/psr_container.h000064400000001550151730541070011173 0ustar00
#ifndef PSR_CONTAINER_H
#define PSR_CONTAINER_H

#include "php.h"
#include "php_psr.h"

#define PHP_PSR_CONTAINER_VERSION "1.1.1"
#define PHP_PSR_CONTAINER_VERSION_ID 10101

extern PHP_PSR_API zend_class_entry * PsrContainerContainerExceptionInterface_ce_ptr;
extern PHP_PSR_API zend_class_entry * PsrContainerContainerInterface_ce_ptr;
extern PHP_PSR_API zend_class_entry * PsrContainerNotFoundExceptionInterface_ce_ptr;

extern PHP_MINIT_FUNCTION(psr_container);

PHP_PSR_BEGIN_ARG_INFO(Container, ContainerInterface, get, 1)
    ZEND_ARG_TYPE_INFO(0, id, IS_STRING, 0)
PHP_PSR_END_ARG_INFO()

PHP_PSR_BEGIN_ARG_INFO(Container, ContainerInterface, has, 1)
    ZEND_ARG_TYPE_INFO(0, id, IS_STRING, 0)
PHP_PSR_END_ARG_INFO()

#endif /* PSR_CONTAINER_H */

/*
 * Local variables:
 * tab-width: 4
 * c-basic-offset: 4
 * End:
 * vim600: fdm=marker
 * vim: et sw=4 ts=4
 */
ext/psr/php_psr.h000064400000004026151730541070010001 0ustar00
#ifndef PHP_PSR_H
#define PHP_PSR_H

#include "php.h"
#include "php_ini.h"
#include "ext/standard/info.h"

#ifdef ZTS
#include "TSRM.h"
#endif

#ifdef PHP_WIN32
# ifdef PHP_PSR_EXPORTS
#  define PHP_PSR_API __declspec(dllexport)
# else
#  define PHP_PSR_API __declspec(dllimport)
# endif
#elif defined(__GNUC__) && __GNUC__ >= 4
# define PHP_PSR_API __attribute__ ((visibility("default")))
#else
# define PHP_PSR_API
#endif

#define PHP_PSR_NAME "psr"
#define PHP_PSR_VERSION "1.2.0"
#define PHP_PSR_VERSION_ID 10200
#define PHP_PSR_RELEASE "2021-12-11"
#define PHP_PSR_AUTHORS "John Boehr <jbboehr@gmail.com> (lead)"

#define PHP_PSR_ARGINFO(p, c, f) (arginfo_Psr ## p ## c ## _ ## f)
#define PHP_PSR_BEGIN_ARG_INFO(p, c, f, n) ZEND_BEGIN_ARG_INFO_EX(PHP_PSR_ARGINFO(p, c, f), ZEND_SEND_BY_VAL, ZEND_RETURN_VALUE, n)
#define PHP_PSR_END_ARG_INFO ZEND_END_ARG_INFO
#define REGISTER_PSR_CLASS_CONST_STRING(ce, const_name, value) \
        zend_declare_class_constant_stringl(ce, const_name, sizeof(const_name)-1, value, sizeof(value)-1);

#define PHP_PSR_CLASS_NAMESPACE "PsrExt"
#define PHP_PSR_ALIAS_NAMESPACE "Psr"

#ifdef ZEND_BEGIN_ARG_WITH_RETURN_OBJ_INFO_EX
#define PHP_PSR_BEGIN_ARG_WITH_RETURN_OBJ_INFO(p, c, f, n, cn, an) ZEND_BEGIN_ARG_WITH_RETURN_OBJ_INFO_EX(PHP_PSR_ARGINFO(p, c, f), ZEND_RETURN_VALUE, n, cn, an)
#define PHP_PSR_BEGIN_ARG_WITH_RETURN_TYPE_INFO(p, c, f, n, t, an) ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(PHP_PSR_ARGINFO(p, c, f), ZEND_RETURN_VALUE, n, t, an)
#else
#define PHP_PSR_BEGIN_ARG_WITH_RETURN_OBJ_INFO(p, c, f, n, cn, an) ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(PHP_PSR_ARGINFO(p, c, f), ZEND_RETURN_VALUE, n, IS_OBJECT, #cn, an)
#define PHP_PSR_BEGIN_ARG_WITH_RETURN_TYPE_INFO(p, c, f, n, t, an) ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(PHP_PSR_ARGINFO(p, c, f), ZEND_RETURN_VALUE, n, t, NULL, an)
#endif

extern zend_module_entry psr_module_entry;
#define phpext_psr_ptr &psr_module_entry

#endif /* PHP_PSR_H */

/*
 * Local variables:
 * tab-width: 4
 * c-basic-offset: 4
 * End:
 * vim600: fdm=marker
 * vim: et sw=4 ts=4
 */
ext/psr/psr_http_server_middleware.h000064400000001500151730541070013746 0ustar00#ifndef PSR_HTTP_SERVER_MIDDLEWARE_H
#define PSR_HTTP_SERVER_MIDDLEWARE_H

#include "php.h"
#include "php_psr.h"

#define PHP_PSR_HTTP_SERVER_MIDDLEWARE_VERSION "1.0.0"
#define PHP_PSR_HTTP_SERVER_MIDDLEWARE_VERSION_ID 10000

extern PHP_MINIT_FUNCTION(psr_http_server_middleware);

extern PHP_PSR_API zend_class_entry * PsrHttpServerMiddlewareInterface_ce_ptr;

PHP_PSR_BEGIN_ARG_WITH_RETURN_OBJ_INFO(HttpServer, MiddlewareInterface, process, 2, Psr\\Http\\Message\\ResponseInterface, 0)
    ZEND_ARG_OBJ_INFO(0, request, Psr\\Http\\Message\\ServerRequestInterface, 0)
    ZEND_ARG_OBJ_INFO(0, handler, Psr\\Http\\Server\\RequestHandlerInterface, 0)
PHP_PSR_END_ARG_INFO()

#endif /* PSR_HTTP_SERVER_MIDDLEWARE_H */

/*
 * Local variables:
 * tab-width: 4
 * c-basic-offset: 4
 * End:
 * vim600: fdm=marker
 * vim: et sw=4 ts=4
 */
ext/psr/psr_http_client.h000064400000002336151730541070011531 0ustar00
#ifndef PSR_HTTP_CLIENT_H
#define PSR_HTTP_CLIENT_H

#include "php.h"
#include "php_psr.h"

#define PHP_PSR_HTTP_CLIENT_VERSION "1.0.0"
#define PHP_PSR_HTTP_CLIENT_VERSION_ID 10000

extern PHP_PSR_API zend_class_entry * PsrHttpClientClientInterface_ce_ptr;
extern PHP_PSR_API zend_class_entry * PsrHttpClientClientExceptionInterface_ce_ptr;
extern PHP_PSR_API zend_class_entry * PsrHttpClientNetworkExceptionInterface_ce_ptr;
extern PHP_PSR_API zend_class_entry * PsrHttpClientRequestExceptionInterface_ce_ptr;

extern PHP_MINIT_FUNCTION(psr_http_client);

PHP_PSR_BEGIN_ARG_WITH_RETURN_OBJ_INFO(HttpClient, ClientInterface, sendRequest, 1, Psr\\Http\\Message\\ResponseInterface, 0)
    ZEND_ARG_OBJ_INFO(0, request, Psr\\Http\\Message\\RequestInterface, 0)
PHP_PSR_END_ARG_INFO()

PHP_PSR_BEGIN_ARG_WITH_RETURN_OBJ_INFO(HttpClient, NetworkExceptionInterface, getRequest, 0, Psr\\Http\\Message\\RequestInterface, 0)
PHP_PSR_END_ARG_INFO()

PHP_PSR_BEGIN_ARG_WITH_RETURN_OBJ_INFO(HttpClient, RequestExceptionInterface, getRequest, 0, Psr\\Http\\Message\\RequestInterface, 0)
PHP_PSR_END_ARG_INFO()

#endif /* PSR_HTTP_CLIENT_H */

/*
 * Local variables:
 * tab-width: 4
 * c-basic-offset: 4
 * End:
 * vim600: fdm=marker
 * vim: et sw=4 ts=4
 */
ext/psr/psr_http_factory.h000064400000005661151730541070011726 0ustar00
#ifndef PSR_HTTP_FACTORY_H
#define PSR_HTTP_FACTORY_H

#include "php.h"
#include "php_psr.h"

#define PHP_PSR_HTTP_FACTORY_VERSION "1.0.0"
#define PHP_PSR_HTTP_FACTORY_VERSION_ID 10000

extern PHP_PSR_API zend_class_entry * PsrHttpMessageRequestFactoryInterface_ce_ptr;
extern PHP_PSR_API zend_class_entry * PsrHttpMessageResponseFactoryInterface_ce_ptr;
extern PHP_PSR_API zend_class_entry * PsrHttpMessageServerRequestFactoryInterface_ce_ptr;
extern PHP_PSR_API zend_class_entry * PsrHttpMessageStreamFactoryInterface_ce_ptr;
extern PHP_PSR_API zend_class_entry * PsrHttpMessageUploadedFileFactoryInterface_ce_ptr;
extern PHP_PSR_API zend_class_entry * PsrHttpMessageUriFactoryInterface_ce_ptr;

extern PHP_MINIT_FUNCTION(psr_http_factory);

PHP_PSR_BEGIN_ARG_WITH_RETURN_OBJ_INFO(HttpMessage, RequestFactoryInterface, createRequest, 2, Psr\\Http\\Message\\RequestInterface, 0)
    ZEND_ARG_TYPE_INFO(0, method, IS_STRING, 0)
    ZEND_ARG_INFO(0, uri)
PHP_PSR_END_ARG_INFO()

PHP_PSR_BEGIN_ARG_WITH_RETURN_OBJ_INFO(HttpMessage, ResponseFactoryInterface, createResponse, 0, Psr\\Http\\Message\\ResponseInterface, 0)
    ZEND_ARG_TYPE_INFO(0, code, IS_LONG, 0)
    ZEND_ARG_TYPE_INFO(0, reasonPhrase, IS_STRING, 0)
PHP_PSR_END_ARG_INFO()

PHP_PSR_BEGIN_ARG_WITH_RETURN_OBJ_INFO(HttpMessage, ServerRequestFactoryInterface, createServerRequest, 2, Psr\\Http\\Message\\ServerRequestInterface, 0)
    ZEND_ARG_TYPE_INFO(0, method, IS_STRING, 0)
    ZEND_ARG_INFO(0, uri)
    ZEND_ARG_ARRAY_INFO(0, serverParams, 0)
PHP_PSR_END_ARG_INFO()

PHP_PSR_BEGIN_ARG_WITH_RETURN_OBJ_INFO(HttpMessage, StreamFactoryInterface, createStream, 0, Psr\\Http\\Message\\StreamInterface, 0)
    ZEND_ARG_TYPE_INFO(0, content, IS_STRING, 0)
PHP_PSR_END_ARG_INFO()

PHP_PSR_BEGIN_ARG_WITH_RETURN_OBJ_INFO(HttpMessage, StreamFactoryInterface, createStreamFromFile, 1, Psr\\Http\\Message\\StreamInterface, 0)
    ZEND_ARG_TYPE_INFO(0, filename, IS_STRING, 0)
    ZEND_ARG_TYPE_INFO(0, mode, IS_STRING, 0)
PHP_PSR_END_ARG_INFO()

PHP_PSR_BEGIN_ARG_WITH_RETURN_OBJ_INFO(HttpMessage, StreamFactoryInterface, createStreamFromResource, 1, Psr\\Http\\Message\\StreamInterface, 0)
    ZEND_ARG_INFO(0, resouce)
PHP_PSR_END_ARG_INFO()

PHP_PSR_BEGIN_ARG_WITH_RETURN_OBJ_INFO(HttpMessage, UploadedFileFactoryInterface, createUploadedFile, 1, Psr\\Http\\Message\\UploadedFileInterface, 0)
    ZEND_ARG_OBJ_INFO(0, stream, Psr\\Http\\Message\\StreamInterface, 0)
    ZEND_ARG_TYPE_INFO(0, size, IS_LONG, 1)
    ZEND_ARG_TYPE_INFO(0, error, IS_LONG, 0)
    ZEND_ARG_TYPE_INFO(0, clientFilename, IS_STRING, 1)
    ZEND_ARG_TYPE_INFO(0, clientMediaType, IS_STRING, 1)
PHP_PSR_END_ARG_INFO()

PHP_PSR_BEGIN_ARG_WITH_RETURN_OBJ_INFO(HttpMessage, UriFactoryInterface, createUri, 0, Psr\\Http\\Message\\UriInterface, 0)
    ZEND_ARG_TYPE_INFO(0, uri, IS_STRING, 0)
PHP_PSR_END_ARG_INFO()

#endif /* PSR_HTTP_FACTORY_H */

/*
 * Local variables:
 * tab-width: 4
 * c-basic-offset: 4
 * End:
 * vim600: fdm=marker
 * vim: et sw=4 ts=4
 */
ext/psr/psr_http_server_handler.h000064400000001344151730541070013254 0ustar00#ifndef PSR_HTTP_SERVER_HANDLER_H
#define PSR_HTTP_SERVER_HANDLER_H

#include "php.h"
#include "php_psr.h"

#define PHP_PSR_HTTP_SERVER_HANDLER_VERSION "1.0.0"
#define PHP_PSR_HTTP_SERVER_HANDLER_VERSION_ID 10000

extern PHP_MINIT_FUNCTION(psr_http_server_handler);

extern PHP_PSR_API zend_class_entry * PsrHttpServerRequestHandlerInterface_ce_ptr;

PHP_PSR_BEGIN_ARG_WITH_RETURN_OBJ_INFO(HttpServer, RequestHandlerInterface, handle, 1, Psr\\Http\\Message\\ResponseInterface, 0)
    ZEND_ARG_OBJ_INFO(0, request, Psr\\Http\\Message\\ServerRequestInterface, 0)
PHP_PSR_END_ARG_INFO()

#endif /* PSR_HTTP_SERVER_HANDLER_H */

/*
 * Local variables:
 * tab-width: 4
 * c-basic-offset: 4
 * End:
 * vim600: fdm=marker
 * vim: et sw=4 ts=4
 */
ext/psr/psr_log.h000064400000004655151730541070010003 0ustar00
#ifndef PSR_LOG_H
#define PSR_LOG_H

#include "php.h"
#include "php_psr.h"

#define PHP_PSR_LOG_VERSION "1.0.0"
#define PHP_PSR_LOG_VERSION_ID 10000

extern PHP_PSR_API zend_class_entry * PsrLogInvalidArgumentException_ce_ptr;
extern PHP_PSR_API zend_class_entry * PsrLogLogLevel_ce_ptr;
extern PHP_PSR_API zend_class_entry * PsrLogLoggerInterface_ce_ptr;
extern PHP_PSR_API zend_class_entry * PsrLogLoggerAwareInterface_ce_ptr;
extern PHP_PSR_API zend_class_entry * PsrLogAbstractLogger_ce_ptr;
extern PHP_PSR_API zend_class_entry * PsrLogNullLogger_ce_ptr;
extern PHP_PSR_API zend_class_entry * PsrLogLoggerTrait_ce_ptr;
extern PHP_PSR_API zend_class_entry * PsrLogLoggerAwareTrait_ce_ptr;

extern PHP_MINIT_FUNCTION(psr_log);

#if PHP_VERSION_ID < 80000
#define PHP_PSR_CONTEXT_PARAM ZEND_ARG_ARRAY_INFO(0, context, 0)
#else
#define PHP_PSR_CONTEXT_PARAM ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, context, IS_ARRAY, 0, "[]")
#endif

PHP_PSR_BEGIN_ARG_INFO(Log, LoggerInterface, emergency, 1)
    ZEND_ARG_INFO(0, message)
    PHP_PSR_CONTEXT_PARAM
PHP_PSR_END_ARG_INFO()

PHP_PSR_BEGIN_ARG_INFO(Log, LoggerInterface, alert, 1)
    ZEND_ARG_INFO(0, message)
    PHP_PSR_CONTEXT_PARAM
PHP_PSR_END_ARG_INFO()

PHP_PSR_BEGIN_ARG_INFO(Log, LoggerInterface, critical, 1)
    ZEND_ARG_INFO(0, message)
    PHP_PSR_CONTEXT_PARAM
PHP_PSR_END_ARG_INFO()

PHP_PSR_BEGIN_ARG_INFO(Log, LoggerInterface, error, 1)
    ZEND_ARG_INFO(0, message)
    PHP_PSR_CONTEXT_PARAM
PHP_PSR_END_ARG_INFO()

PHP_PSR_BEGIN_ARG_INFO(Log, LoggerInterface, warning, 1)
    ZEND_ARG_INFO(0, message)
    PHP_PSR_CONTEXT_PARAM
PHP_PSR_END_ARG_INFO()

PHP_PSR_BEGIN_ARG_INFO(Log, LoggerInterface, notice, 1)
    ZEND_ARG_INFO(0, message)
    PHP_PSR_CONTEXT_PARAM
PHP_PSR_END_ARG_INFO()

PHP_PSR_BEGIN_ARG_INFO(Log, LoggerInterface, info, 1)
    ZEND_ARG_INFO(0, message)
    PHP_PSR_CONTEXT_PARAM
PHP_PSR_END_ARG_INFO()

PHP_PSR_BEGIN_ARG_INFO(Log, LoggerInterface, debug, 1)
    ZEND_ARG_INFO(0, message)
    PHP_PSR_CONTEXT_PARAM
PHP_PSR_END_ARG_INFO()

PHP_PSR_BEGIN_ARG_INFO(Log, LoggerInterface, log, 2)
    ZEND_ARG_INFO(0, level)
    ZEND_ARG_INFO(0, message)
    PHP_PSR_CONTEXT_PARAM
PHP_PSR_END_ARG_INFO()

PHP_PSR_BEGIN_ARG_INFO(Log, LoggerAwareInterface, setLogger, 1)
    ZEND_ARG_OBJ_INFO(0, logger, Psr\\Log\\LoggerInterface, 0)
PHP_PSR_END_ARG_INFO();

#endif /* PSR_LOG_H */

/*
 * Local variables:
 * tab-width: 4
 * c-basic-offset: 4
 * End:
 * vim600: fdm=marker
 * vim: et sw=4 ts=4
 */
ext/psr/psr_cache.h000064400000004445151730541100010254 0ustar00
#ifndef PSR_CACHE_H
#define PSR_CACHE_H

#include "php.h"
#include "php_psr.h"

#define PHP_PSR_CACHE_VERSION "1.0.0"
#define PHP_PSR_CACHE_VERSION_ID 10000

extern PHP_PSR_API zend_class_entry * PsrCacheCacheItemInterface_ce_ptr;
extern PHP_PSR_API zend_class_entry * PsrCacheCacheItemPoolInterface_ce_ptr;
extern PHP_PSR_API zend_class_entry * PsrCacheInvalidArgumentException_ce_ptr;
extern PHP_PSR_API zend_class_entry * PsrCacheCacheException_ce_ptr;

extern PHP_MINIT_FUNCTION(psr_cache);

PHP_PSR_BEGIN_ARG_INFO(Cache, CacheItemInterface, getKey, 0)
PHP_PSR_END_ARG_INFO()

PHP_PSR_BEGIN_ARG_INFO(Cache, CacheItemInterface, get, 0)
PHP_PSR_END_ARG_INFO()

PHP_PSR_BEGIN_ARG_INFO(Cache, CacheItemInterface, isHit, 0)
PHP_PSR_END_ARG_INFO()

PHP_PSR_BEGIN_ARG_INFO(Cache, CacheItemInterface, set, 1)
    ZEND_ARG_INFO(0, value)
PHP_PSR_END_ARG_INFO()

PHP_PSR_BEGIN_ARG_INFO(Cache, CacheItemInterface, expiresAt, 1)
    ZEND_ARG_INFO(0, expiration)
PHP_PSR_END_ARG_INFO()

PHP_PSR_BEGIN_ARG_INFO(Cache, CacheItemInterface, expiresAfter, 1)
    ZEND_ARG_INFO(0, time)
PHP_PSR_END_ARG_INFO()

PHP_PSR_BEGIN_ARG_INFO(Cache, CacheItemPoolInterface, getItem, 1)
    ZEND_ARG_INFO(0, key)
PHP_PSR_END_ARG_INFO()

PHP_PSR_BEGIN_ARG_INFO(Cache, CacheItemPoolInterface, getItems, 0)
    ZEND_ARG_ARRAY_INFO(0, keys, 0)
PHP_PSR_END_ARG_INFO()

PHP_PSR_BEGIN_ARG_INFO(Cache, CacheItemPoolInterface, hasItem, 1)
    ZEND_ARG_INFO(0, key)
PHP_PSR_END_ARG_INFO()

PHP_PSR_BEGIN_ARG_INFO(Cache, CacheItemPoolInterface, clear, 0)
PHP_PSR_END_ARG_INFO()

PHP_PSR_BEGIN_ARG_INFO(Cache, CacheItemPoolInterface, deleteItem, 1)
    ZEND_ARG_INFO(0, key)
PHP_PSR_END_ARG_INFO()

PHP_PSR_BEGIN_ARG_INFO(Cache, CacheItemPoolInterface, deleteItems, 1)
    ZEND_ARG_ARRAY_INFO(0, keys, 0)
PHP_PSR_END_ARG_INFO()

PHP_PSR_BEGIN_ARG_INFO(Cache, CacheItemPoolInterface, save, 1)
    ZEND_ARG_OBJ_INFO(0, logger, Psr\\Cache\\CacheItemInterface, 0)
PHP_PSR_END_ARG_INFO()

PHP_PSR_BEGIN_ARG_INFO(Cache, CacheItemPoolInterface, saveDeferred, 1)
    ZEND_ARG_OBJ_INFO(0, logger, Psr\\Cache\\CacheItemInterface, 0)
PHP_PSR_END_ARG_INFO()

PHP_PSR_BEGIN_ARG_INFO(Cache, CacheItemPoolInterface, commit, 0)
PHP_PSR_END_ARG_INFO()

#endif /* PSR_CACHE_H */

/*
 * Local variables:
 * tab-width: 4
 * c-basic-offset: 4
 * End:
 * vim600: fdm=marker
 * vim: et sw=4 ts=4
 */
ext/psr/psr_link.h000064400000004121151730541100010135 0ustar00
#ifndef PSR_LINK_H
#define PSR_LINK_H

#include "php.h"
#include "php_psr.h"

#define PHP_PSR_LINK_VERSION "1.0.0"
#define PHP_PSR_LINK_VERSION_ID 10000

extern PHP_PSR_API zend_class_entry * PsrLinkEvolvableLinkInterface_ce_ptr;
extern PHP_PSR_API zend_class_entry * PsrLinkEvolvableLinkProviderInterface_ce_ptr;
extern PHP_PSR_API zend_class_entry * PsrLinkLinkInterface_ce_ptr;
extern PHP_PSR_API zend_class_entry * PsrLinkLinkProviderInterface_ce_ptr;

extern PHP_MINIT_FUNCTION(psr_link);

PHP_PSR_BEGIN_ARG_INFO(Link, EvolvableLinkInterface, withHref, 1)
    ZEND_ARG_INFO(0, href)
PHP_PSR_END_ARG_INFO()

PHP_PSR_BEGIN_ARG_INFO(Link, EvolvableLinkInterface, withRel, 1)
    ZEND_ARG_INFO(0, rel)
PHP_PSR_END_ARG_INFO()

PHP_PSR_BEGIN_ARG_INFO(Link, EvolvableLinkInterface, withoutRel, 1)
    ZEND_ARG_INFO(0, rel)
PHP_PSR_END_ARG_INFO()

PHP_PSR_BEGIN_ARG_INFO(Link, EvolvableLinkInterface, withAttribute, 2)
    ZEND_ARG_INFO(0, attribute)
    ZEND_ARG_INFO(0, value)
PHP_PSR_END_ARG_INFO()

PHP_PSR_BEGIN_ARG_INFO(Link, EvolvableLinkInterface, withoutAttribute, 1)
    ZEND_ARG_INFO(0, attribute)
PHP_PSR_END_ARG_INFO()

PHP_PSR_BEGIN_ARG_INFO(Link, EvolvableLinkProviderInterface, withLink, 1)
    ZEND_ARG_OBJ_INFO(0, link, Psr\\Link\\LinkInterface, 0)
PHP_PSR_END_ARG_INFO()

PHP_PSR_BEGIN_ARG_INFO(Link, EvolvableLinkProviderInterface, withoutLink, 1)
    ZEND_ARG_OBJ_INFO(0, link, Psr\\Link\\LinkInterface, 0)
PHP_PSR_END_ARG_INFO()

PHP_PSR_BEGIN_ARG_INFO(Link, LinkInterface, getHref, 0)
PHP_PSR_END_ARG_INFO()

PHP_PSR_BEGIN_ARG_INFO(Link, LinkInterface, isTemplated, 0)
PHP_PSR_END_ARG_INFO()

PHP_PSR_BEGIN_ARG_INFO(Link, LinkInterface, getRels, 0)
PHP_PSR_END_ARG_INFO()

PHP_PSR_BEGIN_ARG_INFO(Link, LinkInterface, getAttributes, 0)
PHP_PSR_END_ARG_INFO()

PHP_PSR_BEGIN_ARG_INFO(Link, LinkProviderInterface, getLinks, 0)
PHP_PSR_END_ARG_INFO()

PHP_PSR_BEGIN_ARG_INFO(Link, LinkProviderInterface, getLinksByRel, 1)
    ZEND_ARG_INFO(0, rel)
PHP_PSR_END_ARG_INFO()

#endif /* PSR_LINK_H */

/*
 * Local variables:
 * tab-width: 4
 * c-basic-offset: 4
 * End:
 * vim600: fdm=marker
 * vim: et sw=4 ts=4
 */
ext/psr/psr_http_message.h000064400000021511151730541100011665 0ustar00
#ifndef PSR_HTTP_MESSAGE_H
#define PSR_HTTP_MESSAGE_H

#include "php.h"
#include "php_psr.h"

#define PHP_PSR_HTTP_MESSAGE_VERSION "1.0.0"
#define PHP_PSR_HTTP_MESSAGE_VERSION_ID 10000

extern PHP_PSR_API zend_class_entry * PsrHttpMessageMessageInterface_ce_ptr;
extern PHP_PSR_API zend_class_entry * PsrHttpMessageRequestInterface_ce_ptr;
extern PHP_PSR_API zend_class_entry * PsrHttpMessageResponseInterface_ce_ptr;
extern PHP_PSR_API zend_class_entry * PsrHttpMessageServerRequestInterface_ce_ptr;
extern PHP_PSR_API zend_class_entry * PsrHttpMessageStreamInterface_ce_ptr;
extern PHP_PSR_API zend_class_entry * PsrHttpMessageUploadedFileInterface_ce_ptr;
extern PHP_PSR_API zend_class_entry * PsrHttpMessageUriInterface_ce_ptr;

extern PHP_MINIT_FUNCTION(psr_http_message);

PHP_PSR_BEGIN_ARG_INFO(HttpMessage, MessageInterface, getProtocolVersion, 0)
PHP_PSR_END_ARG_INFO()

PHP_PSR_BEGIN_ARG_INFO(HttpMessage, MessageInterface, withProtocolVersion, 1)
    ZEND_ARG_INFO(0, version)
PHP_PSR_END_ARG_INFO()

PHP_PSR_BEGIN_ARG_INFO(HttpMessage, MessageInterface, getHeaders, 0)
PHP_PSR_END_ARG_INFO()

PHP_PSR_BEGIN_ARG_INFO(HttpMessage, MessageInterface, hasHeader, 1)
    ZEND_ARG_INFO(0, name)
PHP_PSR_END_ARG_INFO()

PHP_PSR_BEGIN_ARG_INFO(HttpMessage, MessageInterface, getHeader, 1)
    ZEND_ARG_INFO(0, name)
PHP_PSR_END_ARG_INFO()

PHP_PSR_BEGIN_ARG_INFO(HttpMessage, MessageInterface, getHeaderLine, 1)
    ZEND_ARG_INFO(0, name)
PHP_PSR_END_ARG_INFO()

PHP_PSR_BEGIN_ARG_INFO(HttpMessage, MessageInterface, withHeader, 2)
    ZEND_ARG_INFO(0, name)
    ZEND_ARG_INFO(0, value)
PHP_PSR_END_ARG_INFO()

PHP_PSR_BEGIN_ARG_INFO(HttpMessage, MessageInterface, withAddedHeader, 2)
    ZEND_ARG_INFO(0, name)
    ZEND_ARG_INFO(0, value)
PHP_PSR_END_ARG_INFO()

PHP_PSR_BEGIN_ARG_INFO(HttpMessage, MessageInterface, withoutHeader, 1)
    ZEND_ARG_INFO(0, name)
PHP_PSR_END_ARG_INFO()

PHP_PSR_BEGIN_ARG_INFO(HttpMessage, MessageInterface, getBody, 0)
PHP_PSR_END_ARG_INFO()

PHP_PSR_BEGIN_ARG_INFO(HttpMessage, MessageInterface, withBody, 1)
    ZEND_ARG_OBJ_INFO(0, body, Psr\\Http\\Message\\StreamInterface, 0)
PHP_PSR_END_ARG_INFO()

PHP_PSR_BEGIN_ARG_INFO(HttpMessage, RequestInterface, getRequestTarget, 0)
PHP_PSR_END_ARG_INFO()

PHP_PSR_BEGIN_ARG_INFO(HttpMessage, RequestInterface, withRequestTarget, 1)
    ZEND_ARG_INFO(0, requestTarget)
PHP_PSR_END_ARG_INFO()

PHP_PSR_BEGIN_ARG_INFO(HttpMessage, RequestInterface, getMethod, 0)
PHP_PSR_END_ARG_INFO()

PHP_PSR_BEGIN_ARG_INFO(HttpMessage, RequestInterface, withMethod, 1)
    ZEND_ARG_INFO(0, method)
PHP_PSR_END_ARG_INFO()

PHP_PSR_BEGIN_ARG_INFO(HttpMessage, RequestInterface, getUri, 0)
PHP_PSR_END_ARG_INFO()

PHP_PSR_BEGIN_ARG_INFO(HttpMessage, RequestInterface, withUri, 1)
    ZEND_ARG_OBJ_INFO(0, uri, Psr\\Http\\Message\\UriInterface, 0)
    ZEND_ARG_INFO(0, preserveHost)
PHP_PSR_END_ARG_INFO()

PHP_PSR_BEGIN_ARG_INFO(HttpMessage, ResponseInterface, getStatusCode, 0)
PHP_PSR_END_ARG_INFO()

PHP_PSR_BEGIN_ARG_INFO(HttpMessage, ResponseInterface, withStatus, 1)
    ZEND_ARG_INFO(0, code)
    ZEND_ARG_INFO(0, reasonPhrase)
PHP_PSR_END_ARG_INFO()

PHP_PSR_BEGIN_ARG_INFO(HttpMessage, ResponseInterface, getReasonPhrase, 0)
PHP_PSR_END_ARG_INFO()

PHP_PSR_BEGIN_ARG_INFO(HttpMessage, ServerRequestInterface, getServerParams, 0)
PHP_PSR_END_ARG_INFO()

PHP_PSR_BEGIN_ARG_INFO(HttpMessage, ServerRequestInterface, getCookieParams, 0)
PHP_PSR_END_ARG_INFO()

PHP_PSR_BEGIN_ARG_INFO(HttpMessage, ServerRequestInterface, withCookieParams, 1)
    ZEND_ARG_ARRAY_INFO(0, cookies, 0)
PHP_PSR_END_ARG_INFO()

PHP_PSR_BEGIN_ARG_INFO(HttpMessage, ServerRequestInterface, getQueryParams, 0)
PHP_PSR_END_ARG_INFO()

PHP_PSR_BEGIN_ARG_INFO(HttpMessage, ServerRequestInterface, withQueryParams, 1)
    ZEND_ARG_ARRAY_INFO(0, query, 0)
PHP_PSR_END_ARG_INFO()

PHP_PSR_BEGIN_ARG_INFO(HttpMessage, ServerRequestInterface, getUploadedFiles, 0)
PHP_PSR_END_ARG_INFO()

PHP_PSR_BEGIN_ARG_INFO(HttpMessage, ServerRequestInterface, withUploadedFiles, 1)
    ZEND_ARG_ARRAY_INFO(0, uploadedFiles, 0)
PHP_PSR_END_ARG_INFO()

PHP_PSR_BEGIN_ARG_INFO(HttpMessage, ServerRequestInterface, getParsedBody, 0)
PHP_PSR_END_ARG_INFO()

PHP_PSR_BEGIN_ARG_INFO(HttpMessage, ServerRequestInterface, withParsedBody, 1)
    ZEND_ARG_INFO(0, parsedBody)
PHP_PSR_END_ARG_INFO()

PHP_PSR_BEGIN_ARG_INFO(HttpMessage, ServerRequestInterface, getAttributes, 0)
PHP_PSR_END_ARG_INFO()

PHP_PSR_BEGIN_ARG_INFO(HttpMessage, ServerRequestInterface, getAttribute, 1)
    ZEND_ARG_INFO(0, name)
    ZEND_ARG_INFO(0, default)
PHP_PSR_END_ARG_INFO()

PHP_PSR_BEGIN_ARG_INFO(HttpMessage, ServerRequestInterface, withAttribute, 2)
    ZEND_ARG_INFO(0, name)
    ZEND_ARG_INFO(0, value)
PHP_PSR_END_ARG_INFO()

PHP_PSR_BEGIN_ARG_INFO(HttpMessage, ServerRequestInterface, withoutAttribute, 1)
    ZEND_ARG_INFO(0, name)
PHP_PSR_END_ARG_INFO()

#if PHP_VERSION_ID >= 80000
PHP_PSR_BEGIN_ARG_WITH_RETURN_TYPE_INFO(HttpMessage, StreamInterface, __toString, 0, IS_STRING, 0)
#else
PHP_PSR_BEGIN_ARG_INFO(HttpMessage, StreamInterface, __toString, 0)
#endif
PHP_PSR_END_ARG_INFO()

PHP_PSR_BEGIN_ARG_INFO(HttpMessage, StreamInterface, close, 0)
PHP_PSR_END_ARG_INFO()

PHP_PSR_BEGIN_ARG_INFO(HttpMessage, StreamInterface, detach, 0)
PHP_PSR_END_ARG_INFO()

PHP_PSR_BEGIN_ARG_INFO(HttpMessage, StreamInterface, getSize, 0)
PHP_PSR_END_ARG_INFO()

PHP_PSR_BEGIN_ARG_INFO(HttpMessage, StreamInterface, tell, 0)
PHP_PSR_END_ARG_INFO()

PHP_PSR_BEGIN_ARG_INFO(HttpMessage, StreamInterface, eof, 0)
PHP_PSR_END_ARG_INFO()

PHP_PSR_BEGIN_ARG_INFO(HttpMessage, StreamInterface, isSeekable, 0)
PHP_PSR_END_ARG_INFO()

PHP_PSR_BEGIN_ARG_INFO(HttpMessage, StreamInterface, seek, 1)
    ZEND_ARG_INFO(0, offset)
    ZEND_ARG_INFO(0, whence)
PHP_PSR_END_ARG_INFO()

PHP_PSR_BEGIN_ARG_INFO(HttpMessage, StreamInterface, rewind, 0)
PHP_PSR_END_ARG_INFO()

PHP_PSR_BEGIN_ARG_INFO(HttpMessage, StreamInterface, isWritable, 0)
PHP_PSR_END_ARG_INFO()

PHP_PSR_BEGIN_ARG_INFO(HttpMessage, StreamInterface, write, 1)
    ZEND_ARG_INFO(0, string)
PHP_PSR_END_ARG_INFO()

PHP_PSR_BEGIN_ARG_INFO(HttpMessage, StreamInterface, isReadable, 0)
PHP_PSR_END_ARG_INFO()

PHP_PSR_BEGIN_ARG_INFO(HttpMessage, StreamInterface, read, 1)
    ZEND_ARG_INFO(0, length)
PHP_PSR_END_ARG_INFO()

PHP_PSR_BEGIN_ARG_INFO(HttpMessage, StreamInterface, getContents, 0)
PHP_PSR_END_ARG_INFO()

PHP_PSR_BEGIN_ARG_INFO(HttpMessage, StreamInterface, getMetadata, 0)
    ZEND_ARG_INFO(0, key)
PHP_PSR_END_ARG_INFO()

PHP_PSR_BEGIN_ARG_INFO(HttpMessage, UploadedFileInterface, getStream, 0)
PHP_PSR_END_ARG_INFO()

PHP_PSR_BEGIN_ARG_INFO(HttpMessage, UploadedFileInterface, moveTo, 1)
    ZEND_ARG_INFO(0, targetPath)
PHP_PSR_END_ARG_INFO()

PHP_PSR_BEGIN_ARG_INFO(HttpMessage, UploadedFileInterface, getSize, 0)
PHP_PSR_END_ARG_INFO()

PHP_PSR_BEGIN_ARG_INFO(HttpMessage, UploadedFileInterface, getError, 0)
PHP_PSR_END_ARG_INFO()

PHP_PSR_BEGIN_ARG_INFO(HttpMessage, UploadedFileInterface, getClientFilename, 0)
PHP_PSR_END_ARG_INFO()

PHP_PSR_BEGIN_ARG_INFO(HttpMessage, UploadedFileInterface, getClientMediaType, 0)
PHP_PSR_END_ARG_INFO()

PHP_PSR_BEGIN_ARG_INFO(HttpMessage, UriInterface, getScheme, 0)
PHP_PSR_END_ARG_INFO()

PHP_PSR_BEGIN_ARG_INFO(HttpMessage, UriInterface, getAuthority, 0)
PHP_PSR_END_ARG_INFO()

PHP_PSR_BEGIN_ARG_INFO(HttpMessage, UriInterface, getUserInfo, 0)
PHP_PSR_END_ARG_INFO()

PHP_PSR_BEGIN_ARG_INFO(HttpMessage, UriInterface, getHost, 0)
PHP_PSR_END_ARG_INFO()

PHP_PSR_BEGIN_ARG_INFO(HttpMessage, UriInterface, getPort, 0)
PHP_PSR_END_ARG_INFO()

PHP_PSR_BEGIN_ARG_INFO(HttpMessage, UriInterface, getPath, 0)
PHP_PSR_END_ARG_INFO()

PHP_PSR_BEGIN_ARG_INFO(HttpMessage, UriInterface, getQuery, 0)
PHP_PSR_END_ARG_INFO()

PHP_PSR_BEGIN_ARG_INFO(HttpMessage, UriInterface, getFragment, 0)
PHP_PSR_END_ARG_INFO()

PHP_PSR_BEGIN_ARG_INFO(HttpMessage, UriInterface, withScheme, 1)
    ZEND_ARG_INFO(0, scheme)
PHP_PSR_END_ARG_INFO()

PHP_PSR_BEGIN_ARG_INFO(HttpMessage, UriInterface, withUserInfo, 1)
    ZEND_ARG_INFO(0, user)
    ZEND_ARG_INFO(0, password)
PHP_PSR_END_ARG_INFO()

PHP_PSR_BEGIN_ARG_INFO(HttpMessage, UriInterface, withHost, 1)
    ZEND_ARG_INFO(0, host)
PHP_PSR_END_ARG_INFO()

PHP_PSR_BEGIN_ARG_INFO(HttpMessage, UriInterface, withPort, 1)
    ZEND_ARG_INFO(0, port)
PHP_PSR_END_ARG_INFO()

PHP_PSR_BEGIN_ARG_INFO(HttpMessage, UriInterface, withPath, 1)
    ZEND_ARG_INFO(0, path)
PHP_PSR_END_ARG_INFO()

PHP_PSR_BEGIN_ARG_INFO(HttpMessage, UriInterface, withQuery, 1)
    ZEND_ARG_INFO(0, query)
PHP_PSR_END_ARG_INFO()

PHP_PSR_BEGIN_ARG_INFO(HttpMessage, UriInterface, withFragment, 1)
    ZEND_ARG_INFO(0, fragment)
PHP_PSR_END_ARG_INFO()

#if PHP_VERSION_ID >= 80000
PHP_PSR_BEGIN_ARG_WITH_RETURN_TYPE_INFO(HttpMessage, UriInterface, __toString, 0, IS_STRING, 0)
#else
PHP_PSR_BEGIN_ARG_INFO(HttpMessage, UriInterface, __toString, 0)
#endif
PHP_PSR_END_ARG_INFO()

#endif /* PSR_HTTP_MESSAGE_H */

/*
 * Local variables:
 * tab-width: 4
 * c-basic-offset: 4
 * End:
 * vim600: fdm=marker
 * vim: et sw=4 ts=4
 */
ext/psr/psr_event_dispatcher.h000064400000002256151730541100012536 0ustar00
#ifndef PSR_EVENT_DISPATCHER_H
#define PSR_EVENT_DISPATCHER_H

#include "php.h"
#include "php_psr.h"

#if PHP_VERSION_ID >= 70200
#define PHP_PSR_EVENT_DISPATCHER_VERSION "1.0.0"
#define PHP_PSR_EVENT_DISPATCHER_VERSION_ID 10000

extern PHP_PSR_API zend_class_entry * PsrEventDispatcherEventDispatcherInterface_ce_ptr;
extern PHP_PSR_API zend_class_entry * PsrEventDispatcherListenerProviderInterface_ce_ptr;
extern PHP_PSR_API zend_class_entry * PsrEventDispatcherStoppableEventInterface_ce_ptr;

extern PHP_MINIT_FUNCTION(psr_event_dispatcher);

PHP_PSR_BEGIN_ARG_INFO(EventDispatcher, EventDispatcherInterface, dispatch, 1)
    ZEND_ARG_TYPE_INFO(0, event, IS_OBJECT, 0)
PHP_PSR_END_ARG_INFO()

PHP_PSR_BEGIN_ARG_WITH_RETURN_TYPE_INFO(EventDispatcher, ListenerProviderInterface, getListenersForEvent, 1, IS_ITERABLE, 0)
    ZEND_ARG_TYPE_INFO(0, event, IS_OBJECT, 0)
PHP_PSR_END_ARG_INFO()

PHP_PSR_BEGIN_ARG_WITH_RETURN_TYPE_INFO(EventDispatcher, StoppableEventInterface, isPropagationStopped, 0, _IS_BOOL, 0)
PHP_PSR_END_ARG_INFO()
#endif

#endif /* PSR_EVENT_DISPATCHER_H */

/*
 * Local variables:
 * tab-width: 4
 * c-basic-offset: 4
 * End:
 * vim600: fdm=marker
 * vim: et sw=4 ts=4
 */
ext/pdo/php_pdo.h000064400000007647151730541100007743 0ustar00/*
  +----------------------------------------------------------------------+
  | Copyright (c) The PHP Group                                          |
  +----------------------------------------------------------------------+
  | This source file is subject to version 3.01 of the PHP license,      |
  | that is bundled with this package in the file LICENSE, and is        |
  | available through the world-wide-web at the following url:           |
  | https://www.php.net/license/3_01.txt                                 |
  | If you did not receive a copy of the PHP license and are unable to   |
  | obtain it through the world-wide-web, please send a note to          |
  | license@php.net so we can mail you a copy immediately.               |
  +----------------------------------------------------------------------+
  | Author: Wez Furlong <wez@php.net>                                    |
  +----------------------------------------------------------------------+
*/

#ifndef PHP_PDO_H
#define PHP_PDO_H

#include "zend.h"
#include "Zend/zend_compile.h"
#include "Zend/zend_API.h"
#include "Zend/zend_attributes.h"

PHPAPI extern zend_module_entry pdo_module_entry;
#define phpext_pdo_ptr &pdo_module_entry

PHPAPI extern zend_class_entry *pdo_dbh_ce;
PHPAPI extern zend_object *pdo_dbh_new(zend_class_entry *ce);

#include "php_version.h"
#define PHP_PDO_VERSION PHP_VERSION

#ifdef PHP_WIN32
#	if defined(PDO_EXPORTS) || (!defined(COMPILE_DL_PDO))
#		define PDO_API __declspec(dllexport)
#	elif defined(COMPILE_DL_PDO)
#		define PDO_API __declspec(dllimport)
#	else
#		define PDO_API /* nothing special */
#	endif
#elif defined(__GNUC__) && __GNUC__ >= 4
#	define PDO_API __attribute__ ((visibility("default")))
#else
#	define PDO_API /* nothing special */
#endif

#ifdef ZTS
# include "TSRM.h"
#endif

PHP_MINIT_FUNCTION(pdo);
PHP_MSHUTDOWN_FUNCTION(pdo);
PHP_MINFO_FUNCTION(pdo);

static inline void pdo_declare_deprecated_class_constant_long(
		zend_class_entry *ce, const char *name, zend_long value,
		zend_string *since, const char *message) {

	zval zvalue;
	ZVAL_LONG(&zvalue, value);

	zend_string *name_str = zend_string_init_interned(name, strlen(name), true);

	zend_class_constant *constant = zend_declare_class_constant_ex(
			ce, name_str, &zvalue,
			ZEND_ACC_PUBLIC|ZEND_ACC_DEPRECATED, NULL);

	zend_attribute *attr = zend_add_class_constant_attribute(ce, constant,
			ZSTR_KNOWN(ZEND_STR_DEPRECATED_CAPITALIZED),
			1 + (message != NULL));

	attr->args[0].name = ZSTR_KNOWN(ZEND_STR_SINCE);
	ZVAL_STR(&attr->args[0].value, since);

	if (message) {
		zend_string *message_str = zend_string_init_interned(message, strlen(message), true);

		attr->args[1].name = ZSTR_KNOWN(ZEND_STR_MESSAGE);
		ZVAL_STR(&attr->args[1].value, message_str);
	}
}

/* Declare a constant deprecated in 8.5 */
#define REGISTER_PDO_CLASS_CONST_LONG_DEPRECATED_85(const_name, value) 													\
	pdo_declare_deprecated_class_constant_long(php_pdo_get_dbh_ce(), \
			const_name, (zend_long)value, \
			ZSTR_KNOWN(ZEND_STR_8_DOT_5), NULL)

/* Declare one of the constants deprecated in https://wiki.php.net/rfc/deprecations_php_8_5
 * "Deprecate driver specific PDO constants and methods" */
#define REGISTER_PDO_CLASS_CONST_LONG_DEPRECATED_ALIAS_85(name, old_prefix, new_prefix, value) \
	pdo_declare_deprecated_class_constant_long(php_pdo_get_dbh_ce(), \
			old_prefix name, (zend_long)value, \
			ZSTR_KNOWN(ZEND_STR_8_DOT_5), \
			"use " new_prefix name " instead")

#define LONG_CONST(c) (zend_long) c

#define PDO_CONSTRUCT_CHECK_COND dbh->driver
#define PDO_CONSTRUCT_CHECK_FAIL() \
		{ \
			zend_throw_error(NULL, "%s object is uninitialized", ZSTR_VAL(Z_OBJ(EX(This))->ce->name)); \
		} \

#define PDO_CONSTRUCT_CHECK \
	if (!(PDO_CONSTRUCT_CHECK_COND)) { \
		PDO_CONSTRUCT_CHECK_FAIL(); \
		RETURN_THROWS(); \
	} \


#define PDO_CONSTRUCT_CHECK_WITH_CLEANUP(cleanup) \
	if (!(PDO_CONSTRUCT_CHECK_COND)) { \
		PDO_CONSTRUCT_CHECK_FAIL(); \
		goto cleanup; \
	} \


#endif	/* PHP_PDO_H */
ext/pdo/pdo_sql_parser.h000064400000002745151730541110011322 0ustar00/*
  +----------------------------------------------------------------------+
  | Copyright (c) The PHP Group                                          |
  +----------------------------------------------------------------------+
  | This source file is subject to version 3.01 of the PHP license,      |
  | that is bundled with this package in the file LICENSE, and is        |
  | available through the world-wide-web at the following url:           |
  | https://www.php.net/license/3_01.txt                                 |
  | If you did not receive a copy of the PHP license and are unable to   |
  | obtain it through the world-wide-web, please send a note to          |
  | license@php.net so we can mail you a copy immediately.               |
  +----------------------------------------------------------------------+
  | Author: George Schlossnagle <george@omniti.com>                      |
  +----------------------------------------------------------------------+
*/

#define PDO_PARSER_TEXT 1
#define PDO_PARSER_BIND 2
#define PDO_PARSER_BIND_POS 3
#define PDO_PARSER_ESCAPED_QUESTION 4
#define PDO_PARSER_CUSTOM_QUOTE 5
#define PDO_PARSER_EOI 6

#define PDO_PARSER_BINDNO_ESCAPED_CHAR -1

#define RET(i) {s->cur = cursor; return i; }
#define SKIP_ONE(i) {s->cur = s->tok + 1; return i; }

#define YYCTYPE         unsigned char
#define YYCURSOR        cursor
#define YYLIMIT         s->end
#define YYMARKER        s->ptr
#define YYFILL(n)		{ if (YYLIMIT - 1 <= YYCURSOR) RET(PDO_PARSER_EOI); }
ext/pdo/php_pdo_error.h000064400000003673151730541110011150 0ustar00/*
  +----------------------------------------------------------------------+
  | Copyright (c) The PHP Group                                          |
  +----------------------------------------------------------------------+
  | This source file is subject to version 3.01 of the PHP license,      |
  | that is bundled with this package in the file LICENSE, and is        |
  | available through the world-wide-web at the following url:           |
  | https://www.php.net/license/3_01.txt                                 |
  | If you did not receive a copy of the PHP license and are unable to   |
  | obtain it through the world-wide-web, please send a note to          |
  | license@php.net so we can mail you a copy immediately.               |
  +----------------------------------------------------------------------+
  | Author: Wez Furlong <wez@php.net>                                    |
  +----------------------------------------------------------------------+
*/

#ifndef PHP_PDO_ERROR_H
#define PHP_PDO_ERROR_H

#include "php_pdo_driver.h"

PDO_API void pdo_handle_error(pdo_dbh_t *dbh, pdo_stmt_t *stmt);

#define PDO_DBH_CLEAR_ERR()             do { \
	ZEND_ASSERT(sizeof(dbh->error_code) == sizeof(PDO_ERR_NONE)); \
	memcpy(dbh->error_code, PDO_ERR_NONE, sizeof(PDO_ERR_NONE)); \
	if (dbh->query_stmt) { \
		dbh->query_stmt = NULL; \
		OBJ_RELEASE(dbh->query_stmt_obj); \
		dbh->query_stmt_obj = NULL; \
	} \
} while (0)
#define PDO_STMT_CLEAR_ERR() do { \
	ZEND_ASSERT(sizeof(stmt->error_code) == sizeof(PDO_ERR_NONE)); \
	memcpy(stmt->error_code, PDO_ERR_NONE, sizeof(PDO_ERR_NONE)); \
} while (0)
#define PDO_HANDLE_DBH_ERR()    if (strcmp(dbh->error_code, PDO_ERR_NONE)) { pdo_handle_error(dbh, NULL); }
#define PDO_HANDLE_STMT_ERR_EX(cleanup_instruction)   if (strcmp(stmt->error_code, PDO_ERR_NONE) != 0) {  cleanup_instruction pdo_handle_error(stmt->dbh, stmt); }
#define PDO_HANDLE_STMT_ERR() PDO_HANDLE_STMT_ERR_EX(;)

#endif /* PHP_PDO_ERROR_H */
ext/pdo/php_pdo_driver.h000064400000063606151730541110011314 0ustar00/*
  +----------------------------------------------------------------------+
  | Copyright (c) The PHP Group                                          |
  +----------------------------------------------------------------------+
  | This source file is subject to version 3.01 of the PHP license,      |
  | that is bundled with this package in the file LICENSE, and is        |
  | available through the world-wide-web at the following url:           |
  | https://www.php.net/license/3_01.txt                                 |
  | If you did not receive a copy of the PHP license and are unable to   |
  | obtain it through the world-wide-web, please send a note to          |
  | license@php.net so we can mail you a copy immediately.               |
  +----------------------------------------------------------------------+
  | Author: Wez Furlong <wez@php.net>                                    |
  +----------------------------------------------------------------------+
*/

#ifndef PHP_PDO_DRIVER_H
#define PHP_PDO_DRIVER_H

#include "php_pdo.h"

/* forward declarations */
typedef struct _pdo_dbh_t 		 pdo_dbh_t;
typedef struct _pdo_dbh_object_t pdo_dbh_object_t;
typedef struct _pdo_stmt_t		 pdo_stmt_t;
typedef struct _pdo_row_t		 pdo_row_t;
typedef	struct _pdo_scanner_t	 pdo_scanner_t;
struct pdo_bound_param_data;

#ifndef TRUE
# define TRUE 1
#endif
#ifndef FALSE
# define FALSE 0
#endif

#define PDO_DRIVER_API	20240423

/* Doctrine hardcodes these constants, avoid changing their values. */
enum pdo_param_type {
	PDO_PARAM_NULL = 0,
	PDO_PARAM_BOOL = 5,
	PDO_PARAM_INT = 1,
	PDO_PARAM_STR = 2,
	PDO_PARAM_LOB = 3,

	/* get_col: Not supported (yet?) */
	PDO_PARAM_STMT = 4, /* hierarchical result set */

	/* magic flag to denote a parameter as being input/output */
	PDO_PARAM_INPUT_OUTPUT = 0x80000000,

	/* magic flag to denote a string that uses the national character set
	   see section 4.2.1 of SQL-92: http://www.contrib.andrew.cmu.edu/~shadow/sql/sql1992.txt
	 */
	PDO_PARAM_STR_NATL = 0x40000000,

	/* magic flag to denote a string that uses the regular character set */
	PDO_PARAM_STR_CHAR = 0x20000000,
};

#define PDO_PARAM_FLAGS			0xFFFF0000

#define PDO_PARAM_TYPE(x)		((x) & ~PDO_PARAM_FLAGS)

/* Fetch mode is a bitmask of the fetch type (first 4 bits) with the fetch flags (bit 5 to 9)*/
enum pdo_fetch_type {
	PDO_FETCH_USE_DEFAULT,
	PDO_FETCH_LAZY,
	PDO_FETCH_ASSOC,
	PDO_FETCH_NUM,
	PDO_FETCH_BOTH,
	PDO_FETCH_OBJ,
	PDO_FETCH_BOUND, /* return true/false only; rely on bound columns */
	PDO_FETCH_COLUMN,	/* fetch a numbered column only */
	PDO_FETCH_CLASS,	/* create an instance of named class, call ctor and set properties */
	PDO_FETCH_INTO,		/* fetch row into an existing object */
	PDO_FETCH_FUNC,		/* fetch into function and return its result */
	PDO_FETCH_NAMED,    /* like PDO_FETCH_ASSOC, but can handle duplicate names */
	PDO_FETCH_KEY_PAIR,	/* fetch into an array where the 1st column is a key and all subsequent columns are values */
};

#define PDO_FETCH_FLAGS 0xFFFFFFF0 /* fetch flags mask */
#define PDO_FETCH_GROUP (1u << 5u) /* fetch into groups */
#define PDO_FETCH_UNIQUE (1u << 6u) /* fetch into groups assuming first col is unique */
/* PDO_FETCH_CLASS only flags */
#define PDO_FETCH_CLASSTYPE (1u << 7u) /* fetch class gets its class name from 1st column */
#define PDO_FETCH_PROPS_LATE (1u << 8u) /* fetch props after calling ctor */
#define PDO_FETCH_SERIALIZE (1u << 9u) /* DEPRECATED: fetch class instances by calling serialize */
#define PDO_FIRST_INVALID_FLAG (1u << 10u)


/* fetch orientation for scrollable cursors */
enum pdo_fetch_orientation {
	PDO_FETCH_ORI_NEXT,		/* default: fetch the next available row */
	PDO_FETCH_ORI_PRIOR,	/* scroll back to prior row and fetch that */
	PDO_FETCH_ORI_FIRST,	/* scroll to the first row and fetch that */
	PDO_FETCH_ORI_LAST,		/* scroll to the last row and fetch that */
	PDO_FETCH_ORI_ABS,		/* scroll to an absolute numbered row and fetch that */
	PDO_FETCH_ORI_REL		/* scroll relative to the current row, and fetch that */
};

enum pdo_attribute_type {
	PDO_ATTR_AUTOCOMMIT,	/* use to turn on or off auto-commit mode */
	PDO_ATTR_PREFETCH,		/* configure the prefetch size for drivers that support it. Size is in KB */
	PDO_ATTR_TIMEOUT,		/* connection timeout in seconds */
	PDO_ATTR_ERRMODE,		/* control how errors are handled */
	PDO_ATTR_SERVER_VERSION,	/* database server version */
	PDO_ATTR_CLIENT_VERSION,	/* client library version */
	PDO_ATTR_SERVER_INFO,		/* server information */
	PDO_ATTR_CONNECTION_STATUS,	/* connection status */
	PDO_ATTR_CASE,				/* control case folding for portability */
	PDO_ATTR_CURSOR_NAME,		/* name a cursor for use in "WHERE CURRENT OF <name>" */
	PDO_ATTR_CURSOR,			/* cursor type */
	PDO_ATTR_ORACLE_NULLS,		/* convert empty strings to NULL */
	PDO_ATTR_PERSISTENT,		/* pconnect style connection */
	PDO_ATTR_STATEMENT_CLASS,	/* array(classname, array(ctor_args)) to specify the class of the constructed statement */
	PDO_ATTR_FETCH_TABLE_NAMES, /* include table names in the column names, where available */
	PDO_ATTR_FETCH_CATALOG_NAMES, /* include the catalog/db name names in the column names, where available */
	PDO_ATTR_DRIVER_NAME,		  /* name of the driver (as used in the constructor) */
	PDO_ATTR_STRINGIFY_FETCHES,	/* converts integer/float types to strings during fetch */
	PDO_ATTR_MAX_COLUMN_LEN,	/* make database calculate maximum length of data found in a column */
	PDO_ATTR_DEFAULT_FETCH_MODE, /* Set the default fetch mode */
	PDO_ATTR_EMULATE_PREPARES,  /* use query emulation rather than native */
	PDO_ATTR_DEFAULT_STR_PARAM, /* set the default string parameter type (see the PDO::PARAM_STR_* magic flags) */

	/* this defines the start of the range for driver specific options.
	 * Drivers should define their own attribute constants beginning with this
	 * value. */
	PDO_ATTR_DRIVER_SPECIFIC = 1000
};

enum pdo_cursor_type {
	PDO_CURSOR_FWDONLY,		/* forward only cursor (default) */
	PDO_CURSOR_SCROLL		/* scrollable cursor */
};

/* SQL-92 SQLSTATE error codes.

The character string value returned for an SQLSTATE consists of a two-character
class value followed by a three-character subclass value. A class value of 01
indicates a warning and is accompanied by a return code of
SQL_SUCCESS_WITH_INFO.

Class values other than '01', except for the class 'IM',
indicate an error and are accompanied by a return code of SQL_ERROR. The class
'IM' is specific to warnings and errors that derive from the implementation of
ODBC itself.

The subclass value '000' in any class indicates that there is no
subclass for that SQLSTATE. The assignment of class and subclass values is
defined by SQL-92.
*/

typedef char pdo_error_type[6]; /* SQLSTATE */


#define PDO_ERR_NONE				"00000"

enum pdo_error_mode {
	PDO_ERRMODE_SILENT,		/* just set error codes */
	PDO_ERRMODE_WARNING,	/* raise E_WARNING */
	PDO_ERRMODE_EXCEPTION	/* throw exceptions */
};

enum pdo_case_conversion {
	PDO_CASE_NATURAL,
	PDO_CASE_UPPER,
	PDO_CASE_LOWER
};

/* oracle interop settings */
enum pdo_null_handling {
	PDO_NULL_NATURAL = 0,
	PDO_NULL_EMPTY_STRING = 1,
	PDO_NULL_TO_STRING = 2
};

/* {{{ utils for reading attributes set as driver_options */
static inline zend_long pdo_attr_lval(zval *options, unsigned option_name, zend_long defval)
{
	zval *v;

	if (options && (v = zend_hash_index_find(Z_ARRVAL_P(options), option_name))) {
		return zval_get_long(v);
	}
	return defval;
}
static inline zend_string *pdo_attr_strval(zval *options, unsigned option_name, zend_string *defval)
{
	zval *v;

	if (options && (v = zend_hash_index_find(Z_ARRVAL_P(options), option_name))) {
		return zval_try_get_string(v);
	}
	return defval ? zend_string_copy(defval) : NULL;
}
/* }}} */

/* This structure is registered with PDO when a PDO driver extension is
 * initialized */
typedef struct {
	const char	*driver_name;
	size_t		driver_name_len;
	zend_ulong	api_version; /* needs to be compatible with PDO */

#define PDO_DRIVER_HEADER(name)	\
	#name, sizeof(#name)-1, \
	PDO_DRIVER_API

	/* create driver specific portion of the database handle and stash it into
	 * the dbh.  dbh contains the data source string and flags for this
	 * instance.  You MUST respect dbh->is_persistent and pass that flag to
	 * pemalloc() for all allocations that are stored in the dbh or your instance
	 * data in the db, otherwise you will crash PHP when persistent connections
	 * are used.
	 */
	int (*db_handle_factory)(pdo_dbh_t *dbh, zval *driver_options);

} pdo_driver_t;

/* {{{ methods for a database handle */

/* close or otherwise disconnect the database */
typedef void (*pdo_dbh_close_func)(pdo_dbh_t *dbh);

/* prepare a statement and stash driver specific portion into stmt
 * return true on success, false otherwise */
typedef bool (*pdo_dbh_prepare_func)(pdo_dbh_t *dbh, zend_string *sql, pdo_stmt_t *stmt, zval *driver_options);

/* execute a statement (that does not return a result set)
 * Return -1 on failure, otherwise the number of affected rows */
typedef zend_long (*pdo_dbh_do_func)(pdo_dbh_t *dbh, const zend_string *sql);

/* quote a string */
typedef zend_string* (*pdo_dbh_quote_func)(pdo_dbh_t *dbh, const zend_string *unquoted, enum pdo_param_type paramtype);

/* transaction related (beingTransaction(), commit, rollBack, inTransaction)
 * Return true if currently inside a transaction, false otherwise. */
typedef bool (*pdo_dbh_txn_func)(pdo_dbh_t *dbh);

/* setting of attributes
 * Return true on success and false in case of failure */
typedef bool (*pdo_dbh_set_attr_func)(pdo_dbh_t *dbh, zend_long attr, zval *val);

/* return last insert id.  NULL indicates error condition.
 * name MIGHT be NULL */
typedef zend_string *(*pdo_dbh_last_id_func)(pdo_dbh_t *dbh, const zend_string *name);

/* Fetch error information.
 * If stmt is not null, fetch information pertaining to the statement,
 * otherwise fetch global error information.
 * info is an initialized PHP array, if there are no messages leave it empty.
 * The driver should add the following information to the array "info" in this order:
 * - native error code
 * - string representation of the error code ... any other optional driver
 *   specific data ...
 * PDO takes care of normalizing the array. */
typedef void (*pdo_dbh_fetch_error_func)(pdo_dbh_t *dbh, pdo_stmt_t *stmt, zval *info);

/* fetching of attributes
 * There are 3 return states:
 * * -1 for errors while retrieving a valid attribute
 * * 0 for attempting to retrieve an attribute which is not supported by the driver
 * * any other value for success, *val must be set to the attribute value */
typedef int (*pdo_dbh_get_attr_func)(pdo_dbh_t *dbh, zend_long attr, zval *val);

/* checking/pinging persistent connections; return SUCCESS if the connection
 * is still alive and ready to be used, FAILURE otherwise.
 * You may set this handler to NULL, which is equivalent to returning SUCCESS. */
typedef zend_result (*pdo_dbh_check_liveness_func)(pdo_dbh_t *dbh);

/* called at request end for each persistent dbh; this gives the driver
 * the opportunity to safely release resources that only have per-request
 * scope */
typedef void (*pdo_dbh_request_shutdown)(pdo_dbh_t *dbh);

/* Called when the PDO handle is scanned for GC. Should populate the get_gc buffer
 * with any zvals in the driver_data that would be freed if the handle is destroyed. */
typedef void (*pdo_dbh_get_gc_func)(pdo_dbh_t *dbh, zend_get_gc_buffer *buffer);

/* driver specific re2s sql parser, overrides the default one if present */
typedef int (*pdo_dbh_sql_scanner)(pdo_scanner_t *s);

/* for adding methods to the dbh or stmt objects
pointer to a list of driver specific functions. The convention is
to prefix the function names using the PDO driver name; this will
reduce the chance of collisions with future functionality in the
PDO class or in user code (they can extend the PDO object).
*/
enum {
	PDO_DBH_DRIVER_METHOD_KIND_DBH = 0,
	PDO_DBH_DRIVER_METHOD_KIND_STMT,
	PDO_DBH_DRIVER_METHOD_KIND__MAX
};

typedef const zend_function_entry *(*pdo_dbh_get_driver_methods_func)(pdo_dbh_t *dbh, int kind);

struct pdo_dbh_methods {
	pdo_dbh_close_func		closer;
	pdo_dbh_prepare_func	preparer;
	pdo_dbh_do_func			doer;
	pdo_dbh_quote_func		quoter;
	pdo_dbh_txn_func		begin;
	pdo_dbh_txn_func		commit;
	pdo_dbh_txn_func		rollback;
	pdo_dbh_set_attr_func	set_attribute;
	pdo_dbh_last_id_func		last_id;
	pdo_dbh_fetch_error_func	fetch_err;
	pdo_dbh_get_attr_func   	get_attribute;
	pdo_dbh_check_liveness_func	check_liveness;
	pdo_dbh_get_driver_methods_func get_driver_methods;
	pdo_dbh_request_shutdown	persistent_shutdown;
	/* if defined to NULL, PDO will use its internal transaction tracking state */
	pdo_dbh_txn_func		in_transaction;
	pdo_dbh_get_gc_func		get_gc;
	pdo_dbh_sql_scanner		scanner;
};

/* }}} */

/* {{{ methods for a statement handle */

/* free the statement handle */
typedef int (*pdo_stmt_dtor_func)(pdo_stmt_t *stmt);

/* start the query */
typedef int (*pdo_stmt_execute_func)(pdo_stmt_t *stmt);

/* causes the next row in the set to be fetched; indicates if there are no
 * more rows.  The ori and offset params modify which row should be returned,
 * if the stmt represents a scrollable cursor */
typedef int (*pdo_stmt_fetch_func)(pdo_stmt_t *stmt,
	enum pdo_fetch_orientation ori, zend_long offset);

/* queries information about the type of a column, by index (0 based).
 * Driver should populate stmt->columns[colno] with appropriate info */
typedef int (*pdo_stmt_describe_col_func)(pdo_stmt_t *stmt, int colno);

/* Retrieves zval value of a column. If type is non-NULL, then this specifies the type which
 * the user requested through bindColumn(). The driver does not need to check this argument,
 * as PDO will perform any necessary conversions itself. However, it might be used to fetch
 * a value more efficiently into the final type, or make the behavior dependent on the requested
 * type. */
typedef int (*pdo_stmt_get_col_data_func)(
	pdo_stmt_t *stmt, int colno, zval *result, enum pdo_param_type *type);

/* hook for bound params */
enum pdo_param_event {
	PDO_PARAM_EVT_ALLOC,
	PDO_PARAM_EVT_FREE,
	PDO_PARAM_EVT_EXEC_PRE,
	PDO_PARAM_EVT_EXEC_POST,
	PDO_PARAM_EVT_FETCH_PRE,
	PDO_PARAM_EVT_FETCH_POST,
	PDO_PARAM_EVT_NORMALIZE
};

typedef int (*pdo_stmt_param_hook_func)(pdo_stmt_t *stmt, struct pdo_bound_param_data *param, enum pdo_param_event event_type);

/* setting of attributes */
typedef int (*pdo_stmt_set_attr_func)(pdo_stmt_t *stmt, zend_long attr, zval *val);

/* fetching of attributes */
typedef int (*pdo_stmt_get_attr_func)(pdo_stmt_t *stmt, zend_long attr, zval *val);

/* retrieves meta data for a numbered column.
 * Returns SUCCESS/FAILURE.
 * On SUCCESS, fill in return_value with an array with the following fields.
 * If a particular field is not supported, then the driver simply does not add it to
 * the array, so that scripts can use isset() to check for it.
 *
 * ### this is just a rough first cut, and subject to change ###
 *
 * these are added by PDO itself, based on data from the describe handler:
 *   name => the column name
 *   len => the length/size of the column
 *   precision => precision of the column
 *
 *   pdo_type => an integer, one of the PDO_PARAM_XXX values
 *   scale => the floating point scale
 *   table => the table for that column
 *   type => a string representation of the type, mapped to the PHP equivalent type name
 *   native_type => a string representation of the type, native style, if different from
 *                  the mapped name.
 *   flags => an array of flags including zero or more of the following:
 *            primary_key, not_null, unique_key, multiple_key, unsigned, auto_increment, blob
 *
 * Any driver specific data should be returned using a prefixed key or value.
 * Eg: custom data for the mysql driver would use either
 *   'mysql:foobar' => 'some data' // to add a new key to the array
 * or
 *   'flags' => array('not_null', 'mysql:some_flag'); // to add data to an existing key
 */
typedef int (*pdo_stmt_get_column_meta_func)(pdo_stmt_t *stmt, zend_long colno, zval *return_value);

/* advances the statement to the next rowset of the batch.
 * If it returns 1, PDO will tear down its idea of columns
 * and meta data.  If it returns 0, PDO will indicate an error
 * to the caller. */
typedef int (*pdo_stmt_next_rowset_func)(pdo_stmt_t *stmt);

/* closes the active cursor on a statement, leaving the prepared
 * statement ready for re-execution.  Useful to explicitly state
 * that you are done with a given rowset, without having to explicitly
 * fetch all the rows. */
typedef int (*pdo_stmt_cursor_closer_func)(pdo_stmt_t *stmt);

struct pdo_stmt_methods {
	pdo_stmt_dtor_func			dtor;
	pdo_stmt_execute_func		executer;
	pdo_stmt_fetch_func			fetcher;
	pdo_stmt_describe_col_func	describer;
	pdo_stmt_get_col_data_func	get_col;
	pdo_stmt_param_hook_func	param_hook;
	pdo_stmt_set_attr_func		set_attribute;
	pdo_stmt_get_attr_func		get_attribute;
	pdo_stmt_get_column_meta_func get_column_meta;
	pdo_stmt_next_rowset_func		next_rowset;
	pdo_stmt_cursor_closer_func 	cursor_closer;
};

/* }}} */

enum pdo_placeholder_support {
	PDO_PLACEHOLDER_NONE=0,
	PDO_PLACEHOLDER_NAMED=1,
	PDO_PLACEHOLDER_POSITIONAL=2
};

struct _pdo_dbh_t {
	/* driver specific methods */
	const struct pdo_dbh_methods *methods;
	/* driver specific data */
	void *driver_data;

	/* credentials */
	char *username;
	char *password;

	/* if true, then data stored and pointed at by this handle must all be
	 * persistently allocated */
	bool is_persistent:1;

	/* if true, driver should act as though a COMMIT were executed between
	 * each executed statement; otherwise, COMMIT must be carried out manually
	 * */
	bool auto_commit:1;

	/* if true, the handle has been closed and will not function anymore */
	bool is_closed:1;

	/* if true, the driver requires that memory be allocated explicitly for
	 * the columns that are returned */
	bool alloc_own_columns:1;

	/* if true, commit or rollBack is allowed to be called */
	bool in_txn:1;

	/* when set, convert int/floats to strings */
	bool stringify:1;

	/* bitmap for pdo_param_event(s) to skip in dispatch_param_event */
	uint8_t skip_param_evt;

	/* The PDO Error mode; see enum pdo_error_mode */
	uint8_t error_mode;

	/* oracle compat; see enum pdo_null_handling */
	uint8_t oracle_nulls;

	/* Case conversion; see enum pdo_case_conversion */
	uint8_t native_case;
	uint8_t desired_case;

	/* max length a single character can become after correct quoting */
	uint8_t max_escaped_char_length;

	/* data source string used to open this handle */
	const char *data_source;
	size_t data_source_len;

	/* the global error code. */
	pdo_error_type error_code;
	/* defaults for fetches */
	uint16_t default_fetch_type;

	/* persistent hash key associated with this handle */
	const char *persistent_id;
	size_t persistent_id_len;

	uint32_t refcount;

	/* driver specific "class" methods for the dbh and stmt */
	HashTable *cls_methods[PDO_DBH_DRIVER_METHOD_KIND__MAX];

	pdo_driver_t *driver;

	zend_class_entry *def_stmt_ce;

	zval def_stmt_ctor_args;

	/* when calling PDO::query(), we need to keep the error
	 * context from the statement around until we next clear it.
	 * This will allow us to report the correct error message
	 * when PDO::query() fails */
	pdo_stmt_t *query_stmt;
	zend_object *query_stmt_obj;
};

/* represents a connection to a database */
struct _pdo_dbh_object_t {
	pdo_dbh_t *inner;
	/* these items must appear in this order at the beginning of the
       struct so that this can be cast as a zend_object.  we need this
       to allow the extending class to escape all the custom handlers
	   that PDO declares.
    */
	zend_object std;
};

static inline pdo_dbh_t *php_pdo_dbh_fetch_inner(zend_object *obj) {
	return (pdo_dbh_t *)(((pdo_dbh_object_t *)((char*)(obj) - XtOffsetOf(pdo_dbh_object_t, std)))->inner);
}

static inline pdo_dbh_object_t *php_pdo_dbh_fetch_object(zend_object *obj) {
	return (pdo_dbh_object_t *)((char*)(obj) - XtOffsetOf(pdo_dbh_object_t, std));
}

#define Z_PDO_DBH_P(zv) php_pdo_dbh_fetch_inner(Z_OBJ_P((zv)))
#define Z_PDO_OBJECT_P(zv) php_pdo_dbh_fetch_object(Z_OBJ_P((zv)))

/* describes a column */
struct pdo_column_data {
	zend_string *name;
	size_t maxlen;
	zend_ulong precision;
};

/* describes a bound parameter */
struct pdo_bound_param_data {
	zval parameter;				/* the variable itself */

	zval driver_params;			/* optional parameter(s) for the driver */

	zend_long paramno; /* if -1, then it has a name, and we don't know the index *yet* */
	zend_string *name;

	zend_long max_value_len;	/* as a hint for pre-allocation */

	void *driver_data;

	pdo_stmt_t *stmt;	/* for convenience in dtor */

	enum pdo_param_type param_type; /* desired or suggested variable type */

	int is_param;		/* parameter or column ? */
};

/* represents a prepared statement */
struct _pdo_stmt_t {
	/* driver specifics */
	const struct pdo_stmt_methods *methods;
	void *driver_data;

	/* the cursor specific error code. */
	pdo_error_type error_code;

	/* if true, we've already successfully executed this statement at least
	 * once */
	uint16_t executed:1;

	/* If true we are in a do_fetch() call, and modification to the statement must be prevented */
	uint16_t in_fetch:1;

	/* if true, the statement supports placeholders and can implement
	 * bindParam() for its prepared statements, if false, PDO should
	 * emulate prepare and bind on its behalf */
	uint16_t supports_placeholders:2;
	uint16_t reserved: 12;

	/* keep track of bound input parameters.  Some drivers support
	 * input/output parameters, but you can't rely on that working */
	HashTable *bound_params;
	/* When rewriting from named to positional, this maps positions to names */
	HashTable *bound_param_map;
	/* keep track of PHP variables bound to named (or positional) columns
	 * in the result set */
	HashTable *bound_columns;

	struct pdo_column_data *columns;
	/* the number of columns in the result set; not valid until after
	 * the statement has been executed at least once.  In some cases, might
	 * not be valid until fetch (at the driver level) has been called at least once.
	 * */
	int32_t column_count;

	/* defaults for fetches */
	enum pdo_fetch_type default_fetch_type;

	union {
		int column;
		struct {
			HashTable *ctor_args;
			zend_class_entry *ce;
		} cls;
		struct {
			zend_fcall_info_cache fcc;
		} func;
		zend_object *into;
	} fetch;

	/* for lazy fetches, we always return the same lazy object handle.
	 * Let's keep it here. */
	zend_object *lazy_object_ref;

	pdo_dbh_t *dbh;
	/* we want to keep the dbh alive while we live, so we own a reference */
	zend_object *database_object_handle;

	/* not always meaningful */
	zend_long row_count;

	/* used to hold the statement's current query */
	zend_string *query_string;

	/* the copy of the query with expanded binds ONLY for emulated-prepare drivers */
	zend_string *active_query_string;

	/* used by the query parser for driver specific
	 * parameter naming (see pgsql driver for example) */
	const char *named_rewrite_template;

	/* these items must appear in this order at the beginning of the
       struct so that this can be cast as a zend_object.  we need this
       to allow the extending class to escape all the custom handlers
	   that PDO declares.
    */
	zend_object std;
};



static inline pdo_stmt_t *php_pdo_stmt_fetch_object(zend_object *obj) {
	return (pdo_stmt_t *)((char*)(obj) - XtOffsetOf(pdo_stmt_t, std));
}

#define Z_PDO_STMT_P(zv) php_pdo_stmt_fetch_object(Z_OBJ_P((zv)))

struct _pdo_row_t {
	pdo_stmt_t *stmt;
	zend_object std;
};

static inline pdo_row_t *php_pdo_row_fetch_object(zend_object *obj) {
	return (pdo_row_t *)((char*)(obj) - XtOffsetOf(pdo_row_t, std));
}

struct _pdo_scanner_t {
	const char *ptr, *cur, *tok, *end;
};

/* Call this in MINIT to register the PDO driver.
 * Registering the driver might fail and should be reported accordingly in MINIT. */
PDO_API zend_result php_pdo_register_driver(const pdo_driver_t *driver);
/* call this in MSHUTDOWN to unregister your PDO driver */
PDO_API void php_pdo_unregister_driver(const pdo_driver_t *driver);

/* Call this in MINIT to register the PDO driver specific class entry.
 * Registering the driver specific class entry might fail and should be reported accordingly in MINIT.
 * Unregistering the class entry is not necessary, since php_pdo_unregister_driver() takes care of it. */
PDO_API zend_result php_pdo_register_driver_specific_ce(const pdo_driver_t *driver, zend_class_entry *ce);

/* For the convenience of drivers, this function will parse a data source
 * string, of the form "name=value; name2=value2" and populate variables
 * according to the data you pass in and array of pdo_data_src_parser structures */
struct pdo_data_src_parser {
	const char *optname;
	char *optval;
	int freeme;
};

PDO_API int php_pdo_parse_data_source(const char *data_source,
		zend_ulong data_source_len, struct pdo_data_src_parser *parsed,
		int nparams);

PDO_API zend_class_entry *php_pdo_get_dbh_ce(void);
PDO_API zend_class_entry *php_pdo_get_exception(void);

PDO_API int pdo_parse_params(pdo_stmt_t *stmt, zend_string *inquery, zend_string **outquery);

PDO_API void pdo_raise_impl_error(pdo_dbh_t *dbh, pdo_stmt_t *stmt,
	pdo_error_type sqlstate, const char *supp);

PDO_API void php_pdo_dbh_addref(pdo_dbh_t *dbh);
PDO_API void php_pdo_dbh_delref(pdo_dbh_t *dbh);

PDO_API void php_pdo_free_statement(pdo_stmt_t *stmt);
PDO_API void php_pdo_stmt_set_column_count(pdo_stmt_t *stmt, int new_count);

PDO_API void php_pdo_internal_construct_driver(INTERNAL_FUNCTION_PARAMETERS, zend_object *current_object, zend_class_entry *called_scope, zval *new_zval_object);

/* Normalization for fetching long param for driver attributes */
PDO_API bool pdo_get_long_param(zend_long *lval, const zval *value);
PDO_API bool pdo_get_bool_param(bool *bval, const zval *value);

PDO_API void pdo_throw_exception(unsigned int driver_errcode, char *driver_errmsg, pdo_error_type *pdo_error);

/* When a GC cycle is collected, it's possible that the database object is destroyed prior to destroying
 * the statement. In that case, accessing the database object will cause a UAF.
 * This function checks if the database object is still valid.
 * If it is invalid, the internal driver statement data should have been cleared by the native driver API already. */
PDO_API bool php_pdo_stmt_valid_db_obj_handle(const pdo_stmt_t *stmt);

#endif /* PHP_PDO_DRIVER_H */
ext/sockets/php_sockets.h000064400000022546151730541120011522 0ustar00/*
   +----------------------------------------------------------------------+
   | Copyright (c) The PHP Group                                          |
   +----------------------------------------------------------------------+
   | This source file is subject to version 3.01 of the PHP license,      |
   | that is bundled with this package in the file LICENSE, and is        |
   | available through the world-wide-web at the following url:           |
   | https://www.php.net/license/3_01.txt                                 |
   | If you did not receive a copy of the PHP license and are unable to   |
   | obtain it through the world-wide-web, please send a note to          |
   | license@php.net so we can mail you a copy immediately.               |
   +----------------------------------------------------------------------+
   | Authors: Chris Vandomelen <chrisv@b0rked.dhs.org>                    |
   |          Sterling Hughes  <sterling@php.net>                         |
   |                                                                      |
   | WinSock: Daniel Beulshausen <daniel@php4win.de>                      |
   +----------------------------------------------------------------------+
 */

#ifndef PHP_SOCKETS_H
#define PHP_SOCKETS_H

#ifdef HAVE_CONFIG_H
# include "config.h"
#endif

#ifdef HAVE_SOCKETS

#include <php.h>
#ifdef PHP_WIN32
# include "windows_common.h"
#else
# define IS_INVALID_SOCKET(a) (a->bsd_socket < 0)
#endif

#define PHP_SOCKETS_VERSION PHP_VERSION

extern zend_module_entry sockets_module_entry;
#define phpext_sockets_ptr &sockets_module_entry

#ifdef PHP_WIN32
#include <Winsock2.h>
#else
#ifdef HAVE_SYS_SOCKET_H
#include <sys/socket.h>
#endif
#endif

#ifndef PHP_WIN32
typedef int PHP_SOCKET;
#else
typedef SOCKET PHP_SOCKET;
#endif

#ifdef PHP_WIN32
#	ifdef PHP_SOCKETS_EXPORTS
#		define PHP_SOCKETS_API __declspec(dllexport)
#	else
#		define PHP_SOCKETS_API __declspec(dllimport)
#	endif
#elif defined(__GNUC__) && __GNUC__ >= 4
#	define PHP_SOCKETS_API __attribute__ ((visibility("default")))
#else
#	define PHP_SOCKETS_API
#endif

/* Socket class */

typedef struct {
	PHP_SOCKET	bsd_socket;
	int			type;
	int			error;
	int			blocking;
	zval		zstream;
	zend_object std;
} php_socket;

extern PHP_SOCKETS_API zend_class_entry *socket_ce;

static inline php_socket *socket_from_obj(zend_object *obj) {
	return (php_socket *)((char *)(obj) - XtOffsetOf(php_socket, std));
}

#define Z_SOCKET_P(zv) socket_from_obj(Z_OBJ_P(zv))

#define ENSURE_SOCKET_VALID(php_sock) do { \
	if (IS_INVALID_SOCKET(php_sock)) { \
		zend_argument_error(NULL, 1, "has already been closed"); \
		RETURN_THROWS(); \
	} \
} while (0)

#ifdef PHP_WIN32
struct	sockaddr_un {
	short	sun_family;
	char	sun_path[108];
};
#endif

#define PHP_SOCKET_ERROR(socket, msg, errn) \
		do { \
			int _err = (errn); /* save value to avoid repeated calls to WSAGetLastError() on Windows */ \
			(socket)->error = _err; \
			SOCKETS_G(last_error) = _err; \
			if (_err != EAGAIN && _err != EWOULDBLOCK && _err != EINPROGRESS) { \
				php_error_docref(NULL, E_WARNING, "%s [%d]: %s", msg, _err, sockets_strerror(_err)); \
			} \
		} while (0)

ZEND_BEGIN_MODULE_GLOBALS(sockets)
	int last_error;
	char *strerror_buf;
#ifdef PHP_WIN32
	uint32_t wsa_child_count;
	HashTable wsa_info;
#endif
ZEND_END_MODULE_GLOBALS(sockets)

PHP_SOCKETS_API ZEND_EXTERN_MODULE_GLOBALS(sockets)
#define SOCKETS_G(v) ZEND_MODULE_GLOBALS_ACCESSOR(sockets, v)

enum sockopt_return {
	SOCKOPT_ERROR,
	SOCKOPT_CONTINUE,
	SOCKOPT_SUCCESS
};

PHP_SOCKETS_API char *sockets_strerror(int error);
PHP_SOCKETS_API bool socket_import_file_descriptor(PHP_SOCKET socket, php_socket *retsock);

#else
#define phpext_sockets_ptr NULL
#endif

#if defined(_AIX) && !defined(HAVE_STRUCT_SOCKADDR_STORAGE_SS_FAMILY)
# define ss_family __ss_family
#endif

#ifndef MSG_EOF
#ifdef MSG_FIN
#define MSG_EOF MSG_FIN
#endif
#endif

#ifndef MSG_WAITALL
#ifdef LINUX
#define MSG_WAITALL 0x00000100
#else
#define MSG_WAITALL 0x00000000
#endif
#endif

#define PHP_NORMAL_READ 0x0001
#define PHP_BINARY_READ 0x0002

#ifdef PHP_WIN32
#define PHP_SOCKET_EINTR WSAEINTR
#elif defined(EINTR)
#define PHP_SOCKET_EINTR EINTR
#endif

#ifdef PHP_WIN32
#define PHP_SOCKET_EBADF WSAEBADF
#elif defined(EBADF)
#define PHP_SOCKET_EBADF EBADF
#endif

#ifdef PHP_WIN32
#define PHP_SOCKET_EACCES WSAEACCES
#elif defined(EACCES)
#define PHP_SOCKET_EACCES EACCES
#endif

#ifdef PHP_WIN32
#define PHP_SOCKET_EFAULT WSAEFAULT
#elif defined(EFAULT)
#define PHP_SOCKET_EFAULT EFAULT
#endif

#ifdef PHP_WIN32
#define PHP_SOCKET_EINVAL WSAEINVAL
#elif defined(EINVAL)
#define PHP_SOCKET_EINVAL EINVAL
#endif

#ifdef ENFILE
#define PHP_SOCKET_ENFILE ENFILE
#endif

#ifdef PHP_WIN32
#define PHP_SOCKET_EMFILE WSAEMFILE
#elif defined(EMFILE)
#define PHP_SOCKET_EMFILE EMFILE
#endif

#ifdef PHP_WIN32
#define PHP_SOCKET_EWOULDBLOCK WSAEWOULDBLOCK
#elif defined(EWOULDBLOCK)
#define PHP_SOCKET_EWOULDBLOCK EWOULDBLOCK
#endif

#ifdef PHP_WIN32
#define PHP_SOCKET_EINPROGRESS WSAEINPROGRESS
#elif defined(EINPROGRESS)
#define PHP_SOCKET_EINPROGRESS EINPROGRESS
#endif

#ifdef PHP_WIN32
#define PHP_SOCKET_EALREADY WSAEALREADY
#elif defined(EALREADY)
#define PHP_SOCKET_EALREADY EALREADY
#endif

#ifdef PHP_WIN32
#define PHP_SOCKET_ENOTSOCK WSAENOTSOCK
#elif defined(ENOTSOCK)
#define PHP_SOCKET_ENOTSOCK ENOTSOCK
#endif

#ifdef PHP_WIN32
#define PHP_SOCKET_EDESTADDRREQ WSAEDESTADDRREQ
#elif defined(EDESTADDRREQ)
#define PHP_SOCKET_EDESTADDRREQ EDESTADDRREQ
#endif

#ifdef PHP_WIN32
#define PHP_SOCKET_EMSGSIZE WSAEMSGSIZE
#elif defined(EMSGSIZE)
#define PHP_SOCKET_EMSGSIZE EMSGSIZE
#endif

#ifdef PHP_WIN32
#define PHP_SOCKET_EPROTOTYPE WSAEPROTOTYPE
#elif defined(EPROTOTYPE)
#define PHP_SOCKET_EPROTOTYPE EPROTOTYPE
#endif

#ifdef PHP_WIN32
#define PHP_SOCKET_ENOPROTOOPT WSAENOPROTOOPT
#elif defined(ENOPROTOOPT)
#define PHP_SOCKET_ENOPROTOOPT ENOPROTOOPT
#endif

#ifdef PHP_WIN32
#define PHP_SOCKET_EPROTONOSUPPORT WSAEPROTONOSUPPORT
#elif defined(EPROTONOSUPPORT)
#define PHP_SOCKET_EPROTONOSUPPORT EPROTONOSUPPORT
#endif

#ifdef PHP_WIN32
#define PHP_SOCKET_ESOCKTNOSUPPORT WSAESOCKTNOSUPPORT
#elif defined(ESOCKTNOSUPPORT)
#define PHP_SOCKET_ESOCKTNOSUPPORT ESOCKTNOSUPPORT
#endif

#ifdef PHP_WIN32
#define PHP_SOCKET_EOPNOTSUPP WSAEOPNOTSUPP
#elif defined(EOPNOTSUPP)
#define PHP_SOCKET_EOPNOTSUPP EOPNOTSUPP
#endif

#ifdef PHP_WIN32
#define PHP_SOCKET_EPFNOSUPPORT WSAEPFNOSUPPORT
#elif defined(EPFNOSUPPORT)
#define PHP_SOCKET_EPFNOSUPPORT EPFNOSUPPORT
#endif

#ifdef PHP_WIN32
#define PHP_SOCKET_EAFNOSUPPORT WSAEAFNOSUPPORT
#elif defined(EAFNOSUPPORT)
#define PHP_SOCKET_EAFNOSUPPORT EAFNOSUPPORT
#endif

#ifdef PHP_WIN32
#define PHP_SOCKET_EADDRINUSE WSAEADDRINUSE
#elif defined(EADDRINUSE)
#define PHP_SOCKET_EADDRINUSE EADDRINUSE
#endif

#ifdef PHP_WIN32
#define PHP_SOCKET_EADDRNOTAVAIL WSAEADDRNOTAVAIL
#elif defined(EADDRNOTAVAIL)
#define PHP_SOCKET_EADDRNOTAVAIL EADDRNOTAVAIL
#endif

#ifdef PHP_WIN32
#define PHP_SOCKET_ENETDOWN WSAENETDOWN
#elif defined(ENETDOWN)
#define PHP_SOCKET_ENETDOWN ENETDOWN
#endif

#ifdef PHP_WIN32
#define PHP_SOCKET_ENETUNREACH WSAENETUNREACH
#elif defined(ENETUNREACH)
#define PHP_SOCKET_ENETUNREACH ENETUNREACH
#endif

#ifdef PHP_WIN32
#define PHP_SOCKET_ENETRESET WSAENETRESET
#elif defined(ENETRESET)
#define PHP_SOCKET_ENETRESET ENETRESET
#endif

#ifdef PHP_WIN32
#define PHP_SOCKET_ECONNABORTED WSAECONNABORTED
#elif defined(ECONNABORTED)
#define PHP_SOCKET_ECONNABORTED ECONNABORTED
#endif

#ifdef PHP_WIN32
#define PHP_SOCKET_ECONNRESET WSAECONNRESET
#elif defined(ECONNRESET)
#define PHP_SOCKET_ECONNRESET ECONNRESET
#endif

#ifdef PHP_WIN32
#define PHP_SOCKET_ENOBUFS WSAENOBUFS
#elif defined(ENOBUFS)
#define PHP_SOCKET_ENOBUFS ENOBUFS
#endif

#ifdef PHP_WIN32
#define PHP_SOCKET_EISCONN WSAEISCONN
#elif defined(EISCONN)
#define PHP_SOCKET_EISCONN EISCONN
#endif

#ifdef PHP_WIN32
#define PHP_SOCKET_ENOTCONN WSAENOTCONN
#elif defined(ENOTCONN)
#define PHP_SOCKET_ENOTCONN ENOTCONN
#endif

#ifdef PHP_WIN32
#define PHP_SOCKET_ESHUTDOWN WSAESHUTDOWN
#elif defined(ESHUTDOWN)
#define PHP_SOCKET_ESHUTDOWN ESHUTDOWN
#endif

#ifdef PHP_WIN32
#define PHP_SOCKET_ETOOMANYREFS WSAETOOMANYREFS
#elif defined(ETOOMANYREFS)
#define PHP_SOCKET_ETOOMANYREFS ETOOMANYREFS
#endif

#ifdef PHP_WIN32
#define PHP_SOCKET_ETIMEDOUT WSAETIMEDOUT
#elif defined(ETIMEDOUT)
#define PHP_SOCKET_ETIMEDOUT ETIMEDOUT
#endif

#ifdef PHP_WIN32
#define PHP_SOCKET_ECONNREFUSED WSAECONNREFUSED
#elif defined(ECONNREFUSED)
#define PHP_SOCKET_ECONNREFUSED ECONNREFUSED
#endif

#ifdef PHP_WIN32
#define PHP_SOCKET_ELOOP WSAELOOP
#elif defined(ELOOP)
#define PHP_SOCKET_ELOOP ELOOP
#endif

#ifdef PHP_WIN32
#define PHP_SOCKET_ENAMETOOLONG WSAENAMETOOLONG
#elif defined(ENAMETOOLONG)
#define PHP_SOCKET_ENAMETOOLONG ENAMETOOLONG
#endif

#ifdef PHP_WIN32
#define PHP_SOCKET_EHOSTDOWN WSAEHOSTDOWN
#elif defined(EHOSTDOWN)
#define PHP_SOCKET_EHOSTDOWN EHOSTDOWN
#endif

#ifdef PHP_WIN32
#define PHP_SOCKET_EHOSTUNREACH WSAEHOSTUNREACH
#elif defined(EHOSTUNREACH)
#define PHP_SOCKET_EHOSTUNREACH EHOSTUNREACH
#endif

#ifdef PHP_WIN32
#define PHP_SOCKET_ENOTEMPTY WSAENOTEMPTY
#elif defined(ENOTEMPTY)
#define PHP_SOCKET_ENOTEMPTY ENOTEMPTY
#endif

#ifdef PHP_WIN32
#define PHP_SOCKET_EUSERS WSAEUSERS
#elif defined(EUSERS)
#define PHP_SOCKET_EUSERS EUSERS
#endif

#ifdef PHP_WIN32
#define PHP_SOCKET_EDQUOT WSAEDQUOT
#elif defined(EDQUOT)
#define PHP_SOCKET_EDQUOT EDQUOT
#endif

#ifdef PHP_WIN32
#define PHP_SOCKET_EREMOTE WSAEREMOTE
#elif defined(EREMOTE)
#define PHP_SOCKET_EREMOTE EREMOTE
#endif

#endif
ext/libxml/php_libxml.h000064400000026640151730541120011151 0ustar00/*
   +----------------------------------------------------------------------+
   | Copyright (c) The PHP Group                                          |
   +----------------------------------------------------------------------+
   | This source file is subject to version 3.01 of the PHP license,      |
   | that is bundled with this package in the file LICENSE, and is        |
   | available through the world-wide-web at the following url:           |
   | https://www.php.net/license/3_01.txt                                 |
   | If you did not receive a copy of the PHP license and are unable to   |
   | obtain it through the world-wide-web, please send a note to          |
   | license@php.net so we can mail you a copy immediately.               |
   +----------------------------------------------------------------------+
   | Authors: Shane Caraveo <shane@php.net>                               |
   |          Wez Furlong <wez@thebrainroom.com>                          |
   +----------------------------------------------------------------------+
*/

#ifndef PHP_LIBXML_H
#define PHP_LIBXML_H

#ifdef HAVE_LIBXML
extern zend_module_entry libxml_module_entry;
#define libxml_module_ptr &libxml_module_entry

#include "php_version.h"
#define PHP_LIBXML_VERSION PHP_VERSION

#ifdef PHP_WIN32
#	define PHP_LIBXML_API __declspec(dllexport)
#elif defined(__GNUC__) && __GNUC__ >= 4
#	define PHP_LIBXML_API __attribute__ ((visibility("default")))
#else
#	define PHP_LIBXML_API
#endif

#include "zend_smart_str.h"
#include <libxml/tree.h>
#include <libxml/parser.h>

#define LIBXML_SAVE_NOEMPTYTAG 1<<2

#define LIBXML_NS_TAG_HOOK 1

ZEND_BEGIN_MODULE_GLOBALS(libxml)
	zval stream_context;
	smart_str error_buffer;
	zend_llist *error_list;
	zend_fcall_info_cache entity_loader_callback;
	bool entity_loader_disabled;
ZEND_END_MODULE_GLOBALS(libxml)

typedef struct _libxml_doc_props {
	HashTable *classmap;
	bool formatoutput;
	bool validateonparse;
	bool resolveexternals;
	bool preservewhitespace;
	bool substituteentities;
	bool stricterror;
	bool recover;
} libxml_doc_props;

/* Modification tracking: when the object changes, we increment its counter.
 * When this counter no longer matches the counter at the time of caching,
 * we know that the object has changed and we have to update the cache. */
typedef struct {
	size_t modification_nr;
} php_libxml_cache_tag;

typedef struct php_libxml_private_data_header {
	void (*dtor)(struct php_libxml_private_data_header *);
	void (*ns_hook)(struct php_libxml_private_data_header *, xmlNodePtr);
	/* extra fields */
} php_libxml_private_data_header;

/**
 * It's possible to set custom handlers for certain actions depending on the type of document.
 * For example, there exist multiple ways to serialize an XML document,
 * therefore this structure allows setting up a custom handler.
 */
typedef struct php_libxml_document_handlers {
	zend_string *(*dump_node_to_str)(xmlDocPtr doc, xmlNodePtr node, bool format, const char *encoding);
	zend_string *(*dump_doc_to_str)(xmlDocPtr doc, int options, const char *encoding);
	zend_long (*dump_node_to_file)(const char *filename, xmlDocPtr doc, xmlNodePtr node, bool format, const char *encoding);
	zend_long (*dump_doc_to_file)(const char *filename, xmlDocPtr doc, bool format, const char *encoding);
} php_libxml_document_handlers;

/**
 * Multiple representations are possible of the same underlying node data.
 * This is the case for example when a SimpleXML node is imported into DOM.
 * It must not be possible to obtain both a legacy and a modern representation
 * of the same node, as they have different assumptions. The class_type field
 * allows us to pin the representation to one of the two. If it is unset, no
 * representation has been forced upon the node yet, and thus no assumptions
 * have yet been made. This is the case for example when a SimpleXML node is
 * created by SimpleXML itself and never leaves SimpleXML.
 */
typedef enum _php_libxml_class_type {
	PHP_LIBXML_CLASS_UNSET = 0,
	PHP_LIBXML_CLASS_LEGACY = 1,
	PHP_LIBXML_CLASS_MODERN = 2,
} php_libxml_class_type;

typedef enum php_libxml_quirks_mode {
	PHP_LIBXML_NO_QUIRKS = 0,
	PHP_LIBXML_QUIRKS,
	PHP_LIBXML_LIMITED_QUIRKS,
} php_libxml_quirks_mode;

typedef struct _php_libxml_ref_obj {
	void *ptr;
	libxml_doc_props *doc_props;
	php_libxml_cache_tag cache_tag;
	php_libxml_private_data_header *private_data;
	const php_libxml_document_handlers *handlers;
	unsigned int refcount;
	php_libxml_class_type class_type : 8;
	php_libxml_quirks_mode quirks_mode : 8;
} php_libxml_ref_obj;

typedef struct _php_libxml_node_ptr {
	xmlNodePtr node;
	unsigned int refcount;
	void *_private;
} php_libxml_node_ptr;

typedef struct _php_libxml_node_object {
	php_libxml_node_ptr *node;
	php_libxml_ref_obj *document;
	zend_object  std;
} php_libxml_node_object;


static inline php_libxml_node_object *php_libxml_node_fetch_object(zend_object *obj) {
	return (php_libxml_node_object *)((char*)(obj) - obj->handlers->offset);
}

static zend_always_inline void php_libxml_invalidate_cache_tag(php_libxml_cache_tag *cache_tag)
{
#if SIZEOF_SIZE_T == 8
	/* If one operation happens every nanosecond, then it would still require 584 years to overflow
	 * the counter. So we'll just assume this never happens. */
	cache_tag->modification_nr++;
#else
	size_t new_modification_nr = cache_tag->modification_nr + 1;
	if (EXPECTED(new_modification_nr > 0)) { /* unsigned overflow; checking after addition results in one less instruction */
		cache_tag->modification_nr = new_modification_nr;
	}
#endif
}

static zend_always_inline bool php_libxml_is_cache_tag_stale(const php_libxml_cache_tag *object_tag, const php_libxml_cache_tag *cache_tag)
{
	ZEND_ASSERT(object_tag != NULL);
	ZEND_ASSERT(cache_tag != NULL);
	/* See overflow comment in php_libxml_invalidate_node_list_cache(). */
#if SIZEOF_SIZE_T == 8
	return cache_tag->modification_nr != object_tag->modification_nr;
#else
	return cache_tag->modification_nr != object_tag->modification_nr || UNEXPECTED(object_tag->modification_nr == SIZE_MAX);
#endif
}

static zend_always_inline void php_libxml_invalidate_node_list_cache(php_libxml_ref_obj *doc_ptr)
{
	if (doc_ptr) {
		php_libxml_invalidate_cache_tag(&doc_ptr->cache_tag);
	}
}

static zend_always_inline void php_libxml_invalidate_node_list_cache_from_doc(xmlDocPtr docp)
{
	if (docp && docp->_private) { /* docp is NULL for detached nodes */
		php_libxml_node_ptr *node_private = (php_libxml_node_ptr *) docp->_private;
		php_libxml_node_object *object_private = (php_libxml_node_object *) node_private->_private;
		if (object_private) {
			php_libxml_invalidate_node_list_cache(object_private->document);
		}
	}
}

#define Z_LIBXML_NODE_P(zv) php_libxml_node_fetch_object(Z_OBJ_P((zv)))

typedef void * (*php_libxml_export_node) (zval *object);

typedef enum {
	PHP_LIBXML_ERROR = 0,
	PHP_LIBXML_CTX_ERROR = 1,
	PHP_LIBXML_CTX_WARNING = 2,
} php_libxml_error_level;

PHP_LIBXML_API unsigned int php_libxml_increment_node_ptr(php_libxml_node_object *object, xmlNodePtr node, void *private_data);
PHP_LIBXML_API unsigned int php_libxml_decrement_node_ptr(php_libxml_node_object *object);
PHP_LIBXML_API unsigned int php_libxml_decrement_node_ptr_ref(php_libxml_node_ptr *ptr);
PHP_LIBXML_API unsigned int php_libxml_increment_doc_ref(php_libxml_node_object *object, xmlDocPtr docp);
PHP_LIBXML_API unsigned int php_libxml_decrement_doc_ref_directly(php_libxml_ref_obj *document);
PHP_LIBXML_API unsigned int php_libxml_decrement_doc_ref(php_libxml_node_object *object);
PHP_LIBXML_API xmlNodePtr php_libxml_import_node(zval *object);
PHP_LIBXML_API zval *php_libxml_register_export(const zend_class_entry *ce, php_libxml_export_node export_function);
/* When an explicit freeing of node and children is required */
PHP_LIBXML_API void php_libxml_node_free_list(xmlNodePtr node);
PHP_LIBXML_API void php_libxml_node_free_resource(xmlNodePtr node);
/* When object dtor is called as node may still be referenced */
PHP_LIBXML_API void php_libxml_node_decrement_resource(php_libxml_node_object *object);
PHP_LIBXML_API void php_libxml_error_handler(void *ctx, const char *msg, ...);
PHP_LIBXML_API void php_libxml_ctx_warning(void *ctx, const char *msg, ...);
PHP_LIBXML_API void php_libxml_pretend_ctx_error_ex(const char *file, int line, int column, const char *msg,...);
PHP_LIBXML_API void php_libxml_ctx_error(void *ctx, const char *msg, ...);
PHP_LIBXML_API void php_libxml_error_handler_va(php_libxml_error_level error_type, void *ctx, const char *msg, va_list args);
PHP_LIBXML_API void php_libxml_switch_context(const zval *context, zval *oldcontext);
PHP_LIBXML_API void php_libxml_issue_error(int level, const char *msg);
PHP_LIBXML_API bool php_libxml_disable_entity_loader(bool disable);
PHP_LIBXML_API void php_libxml_set_old_ns(xmlDocPtr doc, xmlNsPtr ns);
PHP_LIBXML_API php_stream_context *php_libxml_get_stream_context(void);
PHP_LIBXML_API bool php_libxml_uses_internal_errors(void);

PHP_LIBXML_API xmlChar *php_libxml_attr_value(const xmlAttr *attr, bool *free);

PHP_LIBXML_API zend_string *php_libxml_sniff_charset_from_string(const char *start, const char *end);
PHP_LIBXML_API zend_string *php_libxml_sniff_charset_from_stream(const php_stream *s);

/* Init/shutdown functions*/
PHP_LIBXML_API void php_libxml_initialize(void);
PHP_LIBXML_API void php_libxml_shutdown(void);

#define LIBXML(v) ZEND_MODULE_GLOBALS_ACCESSOR(libxml, v)

#if defined(ZTS) && defined(COMPILE_DL_LIBXML)
ZEND_TSRMLS_CACHE_EXTERN()
#endif

/* Other extension may override the global state options, these global options
 * are copied initially to ctxt->options. Set the options to a known good value.
 * See libxml2 globals.c and parserInternals.c.
 * The unique_name argument allows multiple sanitizes and restores within the
 * same function, even nested is necessary. */
# define PHP_LIBXML_SANITIZE_GLOBALS(unique_name) \
	ZEND_DIAGNOSTIC_IGNORED_START("-Wdeprecated-declarations") \
	int xml_old_loadsubset_##unique_name = xmlLoadExtDtdDefaultValue; \
	xmlLoadExtDtdDefaultValue = 0; \
	int xml_old_validate_##unique_name = xmlDoValidityCheckingDefaultValue; \
	xmlDoValidityCheckingDefaultValue = 0; \
	int xml_old_pedantic_##unique_name = xmlPedanticParserDefault(0); \
	int xml_old_substitute_##unique_name = xmlSubstituteEntitiesDefault(0); \
	int xml_old_linenrs_##unique_name = xmlLineNumbersDefault(0); \
	int xml_old_blanks_##unique_name = xmlKeepBlanksDefault(1); \
	ZEND_DIAGNOSTIC_IGNORED_END

# define PHP_LIBXML_RESTORE_GLOBALS(unique_name) \
	ZEND_DIAGNOSTIC_IGNORED_START("-Wdeprecated-declarations") \
	xmlLoadExtDtdDefaultValue = xml_old_loadsubset_##unique_name; \
	xmlDoValidityCheckingDefaultValue = xml_old_validate_##unique_name; \
	(void) xmlPedanticParserDefault(xml_old_pedantic_##unique_name); \
	(void) xmlSubstituteEntitiesDefault(xml_old_substitute_##unique_name); \
	(void) xmlLineNumbersDefault(xml_old_linenrs_##unique_name); \
	(void) xmlKeepBlanksDefault(xml_old_blanks_##unique_name); \
	ZEND_DIAGNOSTIC_IGNORED_END

/* Alternative for above, working directly on the context and not setting globals.
 * Generally faster because no locking is involved, and this has the advantage that it sets the options to a known good value. */
static zend_always_inline void php_libxml_sanitize_parse_ctxt_options(xmlParserCtxtPtr ctxt)
{
	ZEND_DIAGNOSTIC_IGNORED_START("-Wdeprecated-declarations") \
	ctxt->loadsubset = 0;
	ctxt->validate = 0;
	ctxt->pedantic = 0;
	ctxt->replaceEntities = 0;
	ctxt->linenumbers = 0;
	ctxt->keepBlanks = 1;
	ctxt->options = 0;
	ZEND_DIAGNOSTIC_IGNORED_END
}
#endif

#define phpext_libxml_ptr libxml_module_ptr

#endif /* PHP_LIBXML_H */
ext/random/php_random.h000064400000021676151730541120011137 0ustar00/*
   +----------------------------------------------------------------------+
   | Copyright (c) The PHP Group                                          |
   +----------------------------------------------------------------------+
   | This source file is subject to version 3.01 of the PHP license,      |
   | that is bundled with this package in the file LICENSE, and is        |
   | available through the world-wide-web at the following url:           |
   | https://www.php.net/license/3_01.txt                                 |
   | If you did not receive a copy of the PHP license and are unable to   |
   | obtain it through the world-wide-web, please send a note to          |
   | license@php.net so we can mail you a copy immediately.               |
   +----------------------------------------------------------------------+
   | Authors: Rasmus Lerdorf <rasmus@php.net>                             |
   |          Zeev Suraski <zeev@php.net>                                 |
   |          Sascha Schumann <sascha@schumann.cx>                        |
   |          Pedro Melo <melo@ip.pt>                                     |
   |          Sterling Hughes <sterling@php.net>                          |
   |          Sammy Kaye Powers <me@sammyk.me>                            |
   |          Go Kudo <zeriyoshi@php.net>                                 |
   |                                                                      |
   | Based on code from: Richard J. Wagner <rjwagner@writeme.com>         |
   |                     Makoto Matsumoto <matumoto@math.keio.ac.jp>      |
   |                     Takuji Nishimura                                 |
   |                     Shawn Cokus <Cokus@math.washington.edu>          |
   |                     David Blackman                                   |
   |                     Sebastiano Vigna <vigna@acm.org>                 |
   |                     Melissa O'Neill <oneill@pcg-random.org>          |
   +----------------------------------------------------------------------+
*/

#ifndef PHP_RANDOM_H
# define PHP_RANDOM_H

# include "php.h"
# include "php_random_csprng.h"
# include "php_random_uint128.h"

PHPAPI double php_combined_lcg(void);

typedef struct _php_random_fallback_seed_state php_random_fallback_seed_state;

PHPAPI uint64_t php_random_generate_fallback_seed(void);
PHPAPI uint64_t php_random_generate_fallback_seed_ex(php_random_fallback_seed_state *state);

static inline zend_long GENERATE_SEED(void)
{
	return (zend_long)php_random_generate_fallback_seed();
}

# define PHP_MT_RAND_MAX ((zend_long) (0x7FFFFFFF)) /* (1<<31) - 1 */

enum php_random_mt19937_mode {
	MT_RAND_MT19937 = 0,
	MT_RAND_PHP = 1,
};

#define PHP_RANDOM_RANGE_ATTEMPTS (50)

PHPAPI void php_mt_srand(uint32_t seed);
PHPAPI uint32_t php_mt_rand(void);
PHPAPI zend_long php_mt_rand_range(zend_long min, zend_long max);
PHPAPI zend_long php_mt_rand_common(zend_long min, zend_long max);

typedef struct _php_random_status_state_mt19937 {
	uint32_t count;
	enum php_random_mt19937_mode mode;
	uint32_t state[624];
} php_random_status_state_mt19937;

typedef struct _php_random_status_state_pcgoneseq128xslrr64 {
	php_random_uint128_t state;
} php_random_status_state_pcgoneseq128xslrr64;

typedef struct _php_random_status_state_xoshiro256starstar {
	uint64_t state[4];
} php_random_status_state_xoshiro256starstar;

typedef struct _php_random_status_state_user {
	zend_object *object;
	zend_function *generate_method;
} php_random_status_state_user;

typedef struct _php_random_result {
	uint64_t result;
	size_t size;
} php_random_result;

typedef struct _php_random_algo {
	const size_t state_size;
	php_random_result (*generate)(void *state);
	zend_long (*range)(void *state, zend_long min, zend_long max);
	bool (*serialize)(void *state, HashTable *data);
	bool (*unserialize)(void *state, HashTable *data);
} php_random_algo;

typedef struct _php_random_algo_with_state {
	const php_random_algo *algo;
	void *state;
} php_random_algo_with_state;

typedef struct _php_random_fallback_seed_state {
	bool initialized;
	unsigned char seed[20];
} php_random_fallback_seed_state;

extern PHPAPI const php_random_algo php_random_algo_mt19937;
extern PHPAPI const php_random_algo php_random_algo_pcgoneseq128xslrr64;
extern PHPAPI const php_random_algo php_random_algo_xoshiro256starstar;
extern PHPAPI const php_random_algo php_random_algo_secure;
extern PHPAPI const php_random_algo php_random_algo_user;

typedef struct _php_random_engine {
	php_random_algo_with_state engine;
	zend_object std;
} php_random_engine;

typedef struct _php_random_randomizer {
	php_random_algo_with_state engine;
	bool is_userland_algo;
	zend_object std;
} php_random_randomizer;

extern PHPAPI zend_class_entry *random_ce_Random_Engine;
extern PHPAPI zend_class_entry *random_ce_Random_CryptoSafeEngine;

extern PHPAPI zend_class_entry *random_ce_Random_RandomError;
extern PHPAPI zend_class_entry *random_ce_Random_BrokenRandomEngineError;
extern PHPAPI zend_class_entry *random_ce_Random_RandomException;

extern PHPAPI zend_class_entry *random_ce_Random_Engine_PcgOneseq128XslRr64;
extern PHPAPI zend_class_entry *random_ce_Random_Engine_Mt19937;
extern PHPAPI zend_class_entry *random_ce_Random_Engine_Xoshiro256StarStar;
extern PHPAPI zend_class_entry *random_ce_Random_Engine_Secure;

extern PHPAPI zend_class_entry *random_ce_Random_Randomizer;

extern PHPAPI zend_class_entry *random_ce_Random_IntervalBoundary;

static inline php_random_engine *php_random_engine_from_obj(zend_object *object) {
	return (php_random_engine *)((char *)(object) - XtOffsetOf(php_random_engine, std));
}

static inline php_random_randomizer *php_random_randomizer_from_obj(zend_object *object) {
	return (php_random_randomizer *)((char *)(object) - XtOffsetOf(php_random_randomizer, std));
}

# define Z_RANDOM_ENGINE_P(zval) php_random_engine_from_obj(Z_OBJ_P(zval))

# define Z_RANDOM_RANDOMIZER_P(zval) php_random_randomizer_from_obj(Z_OBJ_P(zval));

PHPAPI void *php_random_status_alloc(const php_random_algo *algo, const bool persistent);
PHPAPI void *php_random_status_copy(const php_random_algo *algo, void *old_status, void *new_status);
PHPAPI void php_random_status_free(void *status, const bool persistent);
PHPAPI php_random_engine *php_random_engine_common_init(zend_class_entry *ce, const php_random_algo *algo);
PHPAPI void php_random_engine_common_free_object(zend_object *object);
PHPAPI zend_object *php_random_engine_common_clone_object(zend_object *object);
PHPAPI uint32_t php_random_range32(php_random_algo_with_state engine, uint32_t umax);
PHPAPI uint64_t php_random_range64(php_random_algo_with_state engine, uint64_t umax);
PHPAPI zend_long php_random_range(php_random_algo_with_state engine, zend_long min, zend_long max);
PHPAPI const php_random_algo *php_random_default_algo(void);
PHPAPI void *php_random_default_status(void);

static inline php_random_algo_with_state php_random_default_engine(void)
{
	php_random_algo_with_state raws;
	raws.algo = php_random_default_algo();
	raws.state = php_random_default_status();
	return raws;
}

PHPAPI zend_string *php_random_bin2hex_le(const void *ptr, const size_t len);
PHPAPI bool php_random_hex2bin_le(zend_string *hexstr, void *dest);

PHPAPI void php_random_mt19937_seed32(php_random_status_state_mt19937 *state, uint32_t seed);
PHPAPI void php_random_mt19937_seed_default(php_random_status_state_mt19937 *state);

PHPAPI void php_random_pcgoneseq128xslrr64_seed128(php_random_status_state_pcgoneseq128xslrr64 *s, php_random_uint128_t seed);
PHPAPI void php_random_pcgoneseq128xslrr64_advance(php_random_status_state_pcgoneseq128xslrr64 *state, uint64_t advance);

PHPAPI void php_random_xoshiro256starstar_seed64(php_random_status_state_xoshiro256starstar *state, uint64_t seed);
PHPAPI void php_random_xoshiro256starstar_seed256(php_random_status_state_xoshiro256starstar *state, uint64_t s0, uint64_t s1, uint64_t s2, uint64_t s3);
PHPAPI void php_random_xoshiro256starstar_jump(php_random_status_state_xoshiro256starstar *state);
PHPAPI void php_random_xoshiro256starstar_jump_long(php_random_status_state_xoshiro256starstar *state);

PHPAPI double php_random_gammasection_closed_open(php_random_algo_with_state engine, double min, double max);
PHPAPI double php_random_gammasection_closed_closed(php_random_algo_with_state engine, double min, double max);
PHPAPI double php_random_gammasection_open_closed(php_random_algo_with_state engine, double min, double max);
PHPAPI double php_random_gammasection_open_open(php_random_algo_with_state engine, double min, double max);

extern zend_module_entry random_module_entry;
# define phpext_random_ptr &random_module_entry

PHP_MINIT_FUNCTION(random);
PHP_MSHUTDOWN_FUNCTION(random);
PHP_RINIT_FUNCTION(random);

ZEND_BEGIN_MODULE_GLOBALS(random)
	bool combined_lcg_seeded;
	bool mt19937_seeded;
	php_random_fallback_seed_state fallback_seed_state;
	int32_t combined_lcg[2];
	php_random_status_state_mt19937 mt19937;
ZEND_END_MODULE_GLOBALS(random)

PHPAPI ZEND_EXTERN_MODULE_GLOBALS(random)

# define RANDOM_G(v)	ZEND_MODULE_GLOBALS_ACCESSOR(random, v)

#endif	/* PHP_RANDOM_H */
ext/random/php_random_csprng.h000064400000004265151730541130012507 0ustar00/*
   +----------------------------------------------------------------------+
   | Copyright (c) The PHP Group                                          |
   +----------------------------------------------------------------------+
   | This source file is subject to version 3.01 of the PHP license,      |
   | that is bundled with this package in the file LICENSE, and is        |
   | available through the world-wide-web at the following url:           |
   | https://www.php.net/license/3_01.txt                                 |
   | If you did not receive a copy of the PHP license and are unable to   |
   | obtain it through the world-wide-web, please send a note to          |
   | license@php.net so we can mail you a copy immediately.               |
   +----------------------------------------------------------------------+
   | Authors: Tim Düsterhus <timwolla@php.net>                            |
   |          Go Kudo <zeriyoshi@php.net>                                 |
   +----------------------------------------------------------------------+
*/

#ifndef PHP_RANDOM_CSPRNG_H
# define PHP_RANDOM_CSPRNG_H

# include "php.h"

ZEND_ATTRIBUTE_NONNULL PHPAPI zend_result php_random_bytes(void *bytes, size_t size, bool should_throw);
ZEND_ATTRIBUTE_NONNULL PHPAPI zend_result php_random_bytes_ex(void *bytes, size_t size, char *errstr, size_t errstr_size);

ZEND_ATTRIBUTE_NONNULL PHPAPI zend_result php_random_int(zend_long min, zend_long max, zend_long *result, bool should_throw);

ZEND_ATTRIBUTE_NONNULL static inline zend_result php_random_bytes_throw(void *bytes, size_t size)
{
	return php_random_bytes(bytes, size, true);
}

ZEND_ATTRIBUTE_NONNULL static inline zend_result php_random_bytes_silent(void *bytes, size_t size)
{
	return php_random_bytes(bytes, size, false);
}

ZEND_ATTRIBUTE_NONNULL static inline zend_result php_random_int_throw(zend_long min, zend_long max, zend_long *result)
{
	return php_random_int(min, max, result, true);
}

ZEND_ATTRIBUTE_NONNULL static inline zend_result php_random_int_silent(zend_long min, zend_long max, zend_long *result)
{
	return php_random_int(min, max, result, false);
}

PHPAPI void php_random_csprng_shutdown(void);

#endif	/* PHP_RANDOM_CSPRNG_H */
ext/random/php_random_uint128.h000064400000007171151730541130012424 0ustar00/*
   +----------------------------------------------------------------------+
   | Copyright (c) The PHP Group                                          |
   +----------------------------------------------------------------------+
   | This source file is subject to version 3.01 of the PHP license,      |
   | that is bundled with this package in the file LICENSE, and is        |
   | available through the world-wide-web at the following url:           |
   | https://www.php.net/license/3_01.txt                                 |
   | If you did not receive a copy of the PHP license and are unable to   |
   | obtain it through the world-wide-web, please send a note to          |
   | license@php.net so we can mail you a copy immediately.               |
   +----------------------------------------------------------------------+
   | Authors: Tim Düsterhus <timwolla@php.net>                            |
   |          Go Kudo <zeriyoshi@php.net>                                 |
   |                                                                      |
   | Based on code from: Melissa O'Neill <oneill@pcg-random.org>          |
   +----------------------------------------------------------------------+
*/

#ifndef PHP_RANDOM_UINT128_H
# define PHP_RANDOM_UINT128_H

# include <stdint.h>

# if !defined(__SIZEOF_INT128__) || defined(PHP_RANDOM_FORCE_EMULATE_128)
typedef struct _php_random_uint128_t {
	uint64_t hi;
	uint64_t lo;
} php_random_uint128_t;

static inline uint64_t php_random_uint128_hi(php_random_uint128_t num)
{
	return num.hi;
}

static inline uint64_t php_random_uint128_lo(php_random_uint128_t num)
{
	return num.lo;
}

static inline php_random_uint128_t php_random_uint128_constant(uint64_t hi, uint64_t lo)
{
	php_random_uint128_t r;

	r.hi = hi;
	r.lo = lo;

	return r;
}

static inline php_random_uint128_t php_random_uint128_add(php_random_uint128_t num1, php_random_uint128_t num2)
{
	php_random_uint128_t r;

	r.lo = (num1.lo + num2.lo);
	r.hi = (num1.hi + num2.hi + (r.lo < num1.lo));

	return r;
}

static inline php_random_uint128_t php_random_uint128_multiply(php_random_uint128_t num1, php_random_uint128_t num2)
{
	php_random_uint128_t r;
	const uint64_t
		x0 = num1.lo & 0xffffffffULL,
		x1 = num1.lo >> 32,
		y0 = num2.lo & 0xffffffffULL,
		y1 = num2.lo >> 32,
		z0 = (((x1 * y0) + (x0 * y0 >> 32)) & 0xffffffffULL) + x0 * y1;

	r.hi = num1.hi * num2.lo + num1.lo * num2.hi;
	r.lo = num1.lo * num2.lo;
	r.hi += x1 * y1 + ((x1 * y0 + (x0 * y0 >> 32)) >> 32) + (z0 >> 32);

	return r;
}

static inline uint64_t php_random_pcgoneseq128xslrr64_rotr64(php_random_uint128_t num)
{
	const uint64_t
		v = (num.hi ^ num.lo),
		s = num.hi >> 58U;

	return (v >> s) | (v << ((-s) & 63));
}
# else
typedef __uint128_t php_random_uint128_t;

static inline uint64_t php_random_uint128_hi(php_random_uint128_t num)
{
	return (uint64_t) (num >> 64);
}

static inline uint64_t php_random_uint128_lo(php_random_uint128_t num)
{
	return (uint64_t) num;
}

static inline php_random_uint128_t php_random_uint128_constant(uint64_t hi, uint64_t lo)
{
	php_random_uint128_t r;

	r = ((php_random_uint128_t) hi << 64) + lo;

	return r;
}

static inline php_random_uint128_t php_random_uint128_add(php_random_uint128_t num1, php_random_uint128_t num2)
{
	return num1 + num2;
}

static inline php_random_uint128_t php_random_uint128_multiply(php_random_uint128_t num1, php_random_uint128_t num2)
{
	return num1 * num2;
}

static inline uint64_t php_random_pcgoneseq128xslrr64_rotr64(php_random_uint128_t num)
{
	const uint64_t
		v = ((uint64_t) (num >> 64U)) ^ (uint64_t) num,
		s = num >> 122U;

	return (v >> s) | (v << ((-s) & 63));
}
# endif

#endif	/* PHP_RANDOM_UINT128_H */
ext/raphf/php_raphf.h000064400000002417151730541130010570 0ustar00/*
    +--------------------------------------------------------------------+
    | PECL :: raphf                                                      |
    +--------------------------------------------------------------------+
    | Redistribution and use in source and binary forms, with or without |
    | modification, are permitted provided that the conditions mentioned |
    | in the accompanying LICENSE file are met.                          |
    +--------------------------------------------------------------------+
    | Copyright (c) 2013, Michael Wallner <mike@php.net>                 |
    +--------------------------------------------------------------------+
*/

#ifndef PHP_RAPHF_H
#define PHP_RAPHF_H

extern zend_module_entry raphf_module_entry;
#define phpext_raphf_ptr &raphf_module_entry

#define PHP_RAPHF_VERSION "2.0.1"

#ifdef PHP_WIN32
#	define PHP_RAPHF_API __declspec(dllexport)
#elif defined(__GNUC__) && __GNUC__ >= 4
#	define PHP_RAPHF_API extern __attribute__ ((visibility("default")))
#else
#	define PHP_RAPHF_API extern
#endif

#ifdef ZTS
#	include "TSRM.h"
#endif

#include "php_raphf_api.h"

#endif	/* PHP_RAPHF_H */


/*
 * Local variables:
 * tab-width: 4
 * c-basic-offset: 4
 * End:
 * vim600: noet sw=4 ts=4 fdm=marker
 * vim<600: noet sw=4 ts=4
 */
ext/raphf/php_raphf_api.h000064400000031156151730541140011424 0ustar00/*
    +--------------------------------------------------------------------+
    | PECL :: raphf                                                      |
    +--------------------------------------------------------------------+
    | Redistribution and use in source and binary forms, with or without |
    | modification, are permitted provided that the conditions mentioned |
    | in the accompanying LICENSE file are met.                          |
    +--------------------------------------------------------------------+
    | Copyright (c) 2013, Michael Wallner <mike@php.net>                 |
    +--------------------------------------------------------------------+
*/

#ifndef PHP_RAPHF_API_H
#define PHP_RAPHF_API_H

#include "php_raphf.h"

/**
 * A resource constructor.
 *
 * @param opaque is the \a data from php_persistent_handle_provide()
 * @param init_arg is the \a init_arg from php_resource_factory_init()
 * @return the created (persistent) handle
 */
typedef void *(*php_resource_factory_handle_ctor_t)(void *opaque, void *init_arg);

/**
 * The copy constructor of a resource.
 *
 * @param opaque the factory's data
 * @param handle the (persistent) handle to copy
 */
typedef void *(*php_resource_factory_handle_copy_t)(void *opaque, void *handle);

/**
 * The destructor of a resource.
 *
 * @param opaque the factory's data
 * @param handle the handle to destroy
 */
typedef void (*php_resource_factory_handle_dtor_t)(void *opaque, void *handle);

/**
 * The resource ops consisting of a ctor, a copy ctor and a dtor.
 *
 * Define this ops and register them with php_persistent_handle_provide()
 * in MINIT.
 */
typedef struct php_resource_factory_ops {
	/** The resource constructor */
	php_resource_factory_handle_ctor_t ctor;
	/** The resource's copy constructor */
	php_resource_factory_handle_copy_t copy;
	/** The resource's destructor */
	php_resource_factory_handle_dtor_t dtor;
} php_resource_factory_ops_t;

/**
 * The resource factory.
 */
typedef struct php_resource_factory {
	/** The resource ops */
	php_resource_factory_ops_t fops;
	/** Opaque user data */
	void *data;
	/** User data destructor */
	void (*dtor)(void *data);
	/** How often this factory is referenced */
	unsigned refcount;
} php_resource_factory_t;

/**
 * Initialize a resource factory.
 *
 * If you register a \a dtor for a resource factory used with a persistent
 * handle provider, be sure to call php_persistent_handle_cleanup() for your
 * registered provider in MSHUTDOWN, else the dtor will point to no longer
 * available memory if the extension has already been unloaded.
 *
 * @param f the factory to initialize; if NULL allocated on the heap
 * @param fops the resource ops to assign to the factory
 * @param data opaque user data; may be NULL
 * @param dtor a destructor for the data; may be NULL
 * @return \a f or an allocated resource factory
 */
PHP_RAPHF_API php_resource_factory_t *php_resource_factory_init(
		php_resource_factory_t *f, php_resource_factory_ops_t *fops, void *data,
		void (*dtor)(void *data));

/**
 * Increase the refcount of the resource factory.
 *
 * @param rf the resource factory
 * @return the new refcount
 */
PHP_RAPHF_API unsigned php_resource_factory_addref(php_resource_factory_t *rf);

/**
 * Destroy the resource factory.
 *
 * If the factory's refcount reaches 0, the \a dtor for \a data is called.
 *
 * @param f the resource factory
 */
PHP_RAPHF_API void php_resource_factory_dtor(php_resource_factory_t *f);

/**
 * Destroy and free the resource factory.
 *
 * Calls php_resource_factory_dtor() and frees \a f if the factory's refcount
 * reached 0.
 *
 * @param f the resource factory
 */
PHP_RAPHF_API void php_resource_factory_free(php_resource_factory_t **f);

/**
 * Construct a resource by the resource factory \a f
 *
 * @param f the resource factory
 * @param init_arg for the resource constructor
 * @return the new resource
 */
PHP_RAPHF_API void *php_resource_factory_handle_ctor(php_resource_factory_t *f,
		void *init_arg);

/**
 * Create a copy of the resource \a handle
 *
 * @param f the resource factory
 * @param handle the resource to copy
 * @return the copy
 */
PHP_RAPHF_API void *php_resource_factory_handle_copy(php_resource_factory_t *f,
		void *handle);

/**
 * Destroy (and free) the resource
 *
 * @param f the resource factory
 * @param handle the resource to destroy
 */
PHP_RAPHF_API void php_resource_factory_handle_dtor(php_resource_factory_t *f,
		void *handle);

/**
 * Persistent handles storage
 */
typedef struct php_persistent_handle_list {
	/** Storage of free resources */
	HashTable free;
	/** Count of acquired resources */
	unsigned long used;
} php_persistent_handle_list_t;

/**
 * Definition of a persistent handle provider.
 * Holds a resource factory an a persistent handle list.
 */
typedef struct php_persistent_handle_provider {
	 /**
	  * The list of free handles.
	  * Hash of "ident" => array(handles) entries. Persistent handles are
	  * acquired out of this list.
	  */
	php_persistent_handle_list_t list;

	/**
	 * The resource factory.
	 * New handles are created by this factory.
	 */
	php_resource_factory_t rf;
} php_persistent_handle_provider_t;

typedef struct php_persistent_handle_factory php_persistent_handle_factory_t;

/**
 * Wakeup the persistent handle on re-acquisition.
 */
typedef void (*php_persistent_handle_wakeup_t)(
		php_persistent_handle_factory_t *f, void **handle);
/**
 * Retire the persistent handle on release.
 */
typedef void (*php_persistent_handle_retire_t)(
		php_persistent_handle_factory_t *f, void **handle);

/**
 * Definition of a persistent handle factory.
 *
 * php_persistent_handle_concede() will return a pointer to a
 * php_persistent_handle_factory if a provider for the \a name has
 * been registered with php_persistent_handle_provide().
 */
struct php_persistent_handle_factory {
	/** The persistent handle provider */
	php_persistent_handle_provider_t *provider;
	/** The persistent handle wakeup routine; may be NULL */
	php_persistent_handle_wakeup_t wakeup;
	/** The persistent handle retire routine; may be NULL */
	php_persistent_handle_retire_t retire;

	/** The ident for which this factory manages resources */
	zend_string *ident;

	/** Whether it has to be free'd on php_persistent_handle_abandon() */
	unsigned free_on_abandon:1;
};

/**
 * Register a persistent handle provider in MINIT.
 *
 * Registers a factory provider for \a name_str with \a fops resource factory
 * ops. Call this in your MINIT.
 *
 * A php_resource_factory will be created with \a fops, \a data and \a dtor
 * and will be stored together with a php_persistent_handle_list in the global
 * raphf hash.
 *
 * A php_persistent_handle_factory can then be retrieved by
 * php_persistent_handle_concede() at runtime.
 *
 * @param name the provider name, e.g. "http\Client\Curl"
 * @param fops the resource factory ops
 * @param data opaque user data
 * @param dtor \a data destructor
 * @return SUCCESS/FAILURE
 */
PHP_RAPHF_API ZEND_RESULT_CODE php_persistent_handle_provide(
		zend_string *name, php_resource_factory_ops_t *fops,
		void *data, void (*dtor)(void *));

/**
 * Retrieve a persistent handle factory at runtime.
 *
 * If a persistent handle provider has been registered for \a name, a new
 * php_persistent_handle_factory creating resources in the \a ident
 * namespace will be constructed.
 *
 * The wakeup routine \a wakeup and the retire routine \a retire will be
 * assigned to the new php_persistent_handle_factory.
 *
 * @param a pointer to a factory; allocated on the heap if NULL
 * @param name the provider name, e.g. "http\Client\Curl"
 * @param ident the subsidiary namespace, e.g. "php.net:80"
 * @param wakeup any persistent handle wakeup routine
 * @param retire any persistent handle retire routine
 * @return \a a or an allocated persistent handle factory
 */
PHP_RAPHF_API php_persistent_handle_factory_t *php_persistent_handle_concede(
		php_persistent_handle_factory_t *a,
		zend_string *name, zend_string *ident,
		php_persistent_handle_wakeup_t wakeup,
		php_persistent_handle_retire_t retire);

/**
 * Abandon the persistent handle factory.
 *
 * Destroy a php_persistent_handle_factory created by
 * php_persistent_handle_concede(). If the memory for the factory was allocated,
 * it will automatically be free'd.
 *
 * @param a the persistent handle factory to destroy
 */
PHP_RAPHF_API void php_persistent_handle_abandon(
		php_persistent_handle_factory_t *a);

/**
 * Acquire a persistent handle.
 *
 * That is, either re-use a resource from the free list or create a new handle.
 *
 * If a handle is acquired from the free list, the
 * php_persistent_handle_factory::wakeup callback will be executed for that
 * handle.
 *
 * @param a the persistent handle factory
 * @param init_arg the \a init_arg for php_resource_factory_handle_ctor()
 * @return the acquired resource
 */
PHP_RAPHF_API void *php_persistent_handle_acquire(
		php_persistent_handle_factory_t *a, void *init_arg);

/**
 * Release a persistent handle.
 *
 * That is, either put it back into the free list for later re-use or clean it
 * up with php_resource_factory_handle_dtor().
 *
 * If a handle is put back into the free list, the
 * php_persistent_handle_factory::retire callback will be executed for that
 * handle.
 *
 * @param a the persistent handle factory
 * @param handle the handle to release
 */
PHP_RAPHF_API void php_persistent_handle_release(
		php_persistent_handle_factory_t *a, void *handle);

/**
 * Copy a persistent handle.
 *
 * Let the underlying resource factory copy the \a handle.
 *
 * @param a the persistent handle factory
 * @param handle the resource to accrete
 */
PHP_RAPHF_API void *php_persistent_handle_accrete(
		php_persistent_handle_factory_t *a, void *handle);

/**
 * Retrieve persistent handle resource factory ops.
 *
 * These ops can be used to mask a persistent handle factory as
 * resource factory itself, so you can transparently use the
 * resource factory API, both for persistent and non-persistent
 * ressources.
 *
 * Example:
 * \code{.c}
 * php_resource_factory_t *create_my_rf(zend_string *persistent_id)
 * {
 *     php_resource_factory_t *rf;
 *
 *     if (persistent_id) {
 *         php_persistent_handle_factory_t *pf;
 *         php_resource_factory_ops_t *ops;
 *         zend_string *ns = zend_string_init("my", 2, 1);
 *
 *         ops = php_persistent_handle_get_resource_factory_ops();
 *         pf = php_persistent_handle_concede(NULL, ns, persistent_id, NULL, NULL);
 *         rf = php_persistent_handle_resource_factory_init(NULL, pf);
 *         zend_string_release(ns);
 *     } else {
 *         rf = php_resource_factory_init(NULL, &myops, NULL, NULL);
 *     }
 *     return rf;
 * }
 * \endcode
 */
PHP_RAPHF_API php_resource_factory_ops_t *
php_persistent_handle_get_resource_factory_ops(void);

/**
 * Create a resource factory for persistent handles.
 *
 * This will create a resource factory with persistent handle ops, which wraps
 * the provided reource factory \a pf.
 *
 * @param a the persistent handle resource factory to initialize
 * @param pf the resource factory to wrap
 */
PHP_RAPHF_API php_resource_factory_t *
php_persistent_handle_resource_factory_init(php_resource_factory_t *a,
		php_persistent_handle_factory_t *pf);

/**
 * Check whether a resource factory is a persistent handle resource factory.
 *
 * @param a the resource factory to check
 */
PHP_RAPHF_API zend_bool php_resource_factory_is_persistent(
		php_resource_factory_t *a);

/**
 * Clean persistent handles up.
 *
 * Destroy persistent handles of provider \a name and in subsidiary
 * namespace \a ident.
 *
 * If \a name is NULL, all persistent handles of all providers with a
 * matching \a ident will be cleaned up.
 *
 * If \a identr is NULL all persistent handles of the provider will be
 * cleaned up.
 *
 * Ergo, if both, \a name and \a ident are NULL, then all
 * persistent handles will be cleaned up.
 *
 * You must call this in MSHUTDOWN, if your resource factory ops hold a
 * registered php_resource_factory::dtor, else the dtor will point to
 * memory not any more available if the extension has already been unloaded.
 *
 * @param name the provider name; may be NULL
 * @param ident the subsidiary namespace name; may be NULL
 */
PHP_RAPHF_API void php_persistent_handle_cleanup(zend_string *name,
		zend_string *ident);

/**
 * Retrieve statistics about the current process/thread's persistent handles.
 *
 * @return a HashTable like:
 * \code
 *     [
 *         "name" => [
 *             "ident" => [
 *                 "used" => 1,
 *                 "free" => 0,
 *             ]
 *         ]
 *     ]
 * \endcode
 */
PHP_RAPHF_API HashTable *php_persistent_handle_statall(HashTable *ht);

#endif	/* PHP_RAPHF_API_H */


/*
 * Local variables:
 * tab-width: 4
 * c-basic-offset: 4
 * End:
 * vim600: noet sw=4 ts=4 fdm=marker
 * vim<600: noet sw=4 ts=4
 */
ext/xml/expat_compat.h000064400000014237151730541140011011 0ustar00/*
   +----------------------------------------------------------------------+
   | Copyright (c) The PHP Group                                          |
   +----------------------------------------------------------------------+
   | This source file is subject to version 3.01 of the PHP license,      |
   | that is bundled with this package in the file LICENSE, and is        |
   | available through the world-wide-web at the following url:           |
   | https://www.php.net/license/3_01.txt                                 |
   | If you did not receive a copy of the PHP license and are unable to   |
   | obtain it through the world-wide-web, please send a note to          |
   | license@php.net so we can mail you a copy immediately.               |
   +----------------------------------------------------------------------+
   | Authors: Sterling Hughes <sterling@php.net>                          |
   +----------------------------------------------------------------------+
*/

#ifndef PHP_EXPAT_COMPAT_H
#define PHP_EXPAT_COMPAT_H

#ifdef PHP_WIN32
#include "config.w32.h"
#else
#include <php_config.h>
#endif

#ifdef PHP_WIN32
# define PHP_XML_API __declspec(dllexport)
#elif defined(__GNUC__) && __GNUC__ >= 4
# define PHP_XML_API __attribute__ ((visibility("default")))
#else
# define PHP_XML_API
#endif

#if !defined(HAVE_LIBEXPAT) && defined(HAVE_LIBXML)
#define LIBXML_EXPAT_COMPAT 1

#include "php.h"
#include "php_compat.h"

#include <libxml/parser.h>
#include <libxml/parserInternals.h>
#include <libxml/tree.h>
#include <libxml/hash.h>

/* For compatibility with the misspelled version. */
#define _ns_seperator _ns_separator

typedef xmlChar XML_Char;

typedef struct XML_Parser_Struct *XML_Parser;

typedef void (*XML_StartElementHandler)(void *, const XML_Char *, const XML_Char **);
typedef void (*XML_EndElementHandler)(void *, const XML_Char *);
typedef void (*XML_CharacterDataHandler)(void *, const XML_Char *, int);
typedef void (*XML_ProcessingInstructionHandler)(void *, const XML_Char *, const XML_Char *);
typedef void (*XML_CommentHandler)(void *, const XML_Char *);
typedef void (*XML_DefaultHandler)(void *, const XML_Char *, int);
typedef void (*XML_UnparsedEntityDeclHandler)(void *, const XML_Char *, const XML_Char *, const XML_Char *, const XML_Char *, const XML_Char *);
typedef void (*XML_NotationDeclHandler)(void *, const XML_Char *, const XML_Char *, const XML_Char *, const XML_Char *);
typedef int  (*XML_ExternalEntityRefHandler)(XML_Parser, const XML_Char *, const XML_Char *, const XML_Char *, const XML_Char *);
typedef void (*XML_StartNamespaceDeclHandler)(void *, const XML_Char *, const XML_Char *);
typedef void (*XML_EndNamespaceDeclHandler)(void *, const XML_Char *);

typedef struct XML_Memory_Handling_Suite {
  void *(*malloc_fcn)(size_t size);
  void *(*realloc_fcn)(void *ptr, size_t size);
  void (*free_fcn)(void *ptr);
} XML_Memory_Handling_Suite;

struct XML_Parser_Struct {
	int use_namespace;

	xmlChar *_ns_separator;

	void *user;
	xmlParserCtxtPtr parser;

	XML_StartElementHandler          h_start_element;
	XML_EndElementHandler            h_end_element;
	XML_CharacterDataHandler         h_cdata;
	XML_ProcessingInstructionHandler h_pi;
	XML_CommentHandler               h_comment;
	XML_DefaultHandler               h_default;
	XML_UnparsedEntityDeclHandler    h_unparsed_entity_decl;
	XML_NotationDeclHandler          h_notation_decl;
	XML_ExternalEntityRefHandler     h_external_entity_ref;
	XML_StartNamespaceDeclHandler    h_start_ns;
	XML_EndNamespaceDeclHandler      h_end_ns;
};

enum XML_Error {
	XML_ERROR_NONE,
	XML_ERROR_NO_MEMORY,
	XML_ERROR_SYNTAX,
	XML_ERROR_NO_ELEMENTS,
	XML_ERROR_INVALID_TOKEN,
	XML_ERROR_UNCLOSED_TOKEN,
	XML_ERROR_PARTIAL_CHAR,
	XML_ERROR_TAG_MISMATCH,
	XML_ERROR_DUPLICATE_ATTRIBUTE,
	XML_ERROR_JUNK_AFTER_DOC_ELEMENT,
	XML_ERROR_PARAM_ENTITY_REF,
	XML_ERROR_UNDEFINED_ENTITY,
	XML_ERROR_RECURSIVE_ENTITY_REF,
	XML_ERROR_ASYNC_ENTITY,
	XML_ERROR_BAD_CHAR_REF,
	XML_ERROR_BINARY_ENTITY_REF,
	XML_ERROR_ATTRIBUTE_EXTERNAL_ENTITY_REF,
	XML_ERROR_MISPLACED_XML_PI,
	XML_ERROR_UNKNOWN_ENCODING,
	XML_ERROR_INCORRECT_ENCODING,
	XML_ERROR_UNCLOSED_CDATA_SECTION,
	XML_ERROR_EXTERNAL_ENTITY_HANDLING,
	XML_ERROR_NOT_STANDALONE,
	XML_ERROR_UNEXPECTED_STATE,
	XML_ERROR_ENTITY_DECLARED_IN_PE,
	XML_ERROR_FEATURE_REQUIRES_XML_DTD,
	XML_ERROR_CANT_CHANGE_FEATURE_ONCE_PARSING
};

enum XML_Content_Type {
	XML_CTYPE_EMPTY = 1,
	XML_CTYPE_ANY,
	XML_CTYPE_MIXED,
	XML_CTYPE_NAME,
	XML_CTYPE_CHOICE,
	XML_CTYPE_SEQ
};

PHP_XML_API XML_Parser XML_ParserCreate(const XML_Char *);
PHP_XML_API XML_Parser XML_ParserCreateNS(const XML_Char *, XML_Char);
PHP_XML_API XML_Parser XML_ParserCreate_MM(const XML_Char *, const XML_Memory_Handling_Suite *, const XML_Char *);
PHP_XML_API void XML_SetUserData(XML_Parser, void *);
PHP_XML_API void *XML_GetUserData(XML_Parser);
PHP_XML_API void XML_SetElementHandler(XML_Parser, XML_StartElementHandler, XML_EndElementHandler);
PHP_XML_API void XML_SetCharacterDataHandler(XML_Parser, XML_CharacterDataHandler);
PHP_XML_API void XML_SetProcessingInstructionHandler(XML_Parser, XML_ProcessingInstructionHandler);
PHP_XML_API void XML_SetDefaultHandler(XML_Parser, XML_DefaultHandler);
PHP_XML_API void XML_SetUnparsedEntityDeclHandler(XML_Parser, XML_UnparsedEntityDeclHandler);
PHP_XML_API void XML_SetNotationDeclHandler(XML_Parser, XML_NotationDeclHandler);
PHP_XML_API void XML_SetExternalEntityRefHandler(XML_Parser, XML_ExternalEntityRefHandler);
PHP_XML_API void XML_SetStartNamespaceDeclHandler(XML_Parser, XML_StartNamespaceDeclHandler);
PHP_XML_API void XML_SetEndNamespaceDeclHandler(XML_Parser, XML_EndNamespaceDeclHandler);
PHP_XML_API int  XML_Parse(XML_Parser, const XML_Char *, int data_len, int is_final);
PHP_XML_API int  XML_GetErrorCode(XML_Parser);
PHP_XML_API const XML_Char *XML_ErrorString(int);
PHP_XML_API int  XML_GetCurrentLineNumber(XML_Parser);
PHP_XML_API int  XML_GetCurrentColumnNumber(XML_Parser);
PHP_XML_API long XML_GetCurrentByteIndex(XML_Parser);
PHP_XML_API int  XML_GetCurrentByteCount(XML_Parser);
PHP_XML_API const XML_Char *XML_ExpatVersion(void);
PHP_XML_API void XML_ParserFree(XML_Parser);

#elif defined(HAVE_LIBEXPAT)
#include "php.h"
#include <expat.h>
#endif /* HAVE_LIBEXPAT */

#endif /* PHP_EXPAT_COMPAT_H */
ext/xml/php_xml.h000064400000003503151730541150007767 0ustar00/*
   +----------------------------------------------------------------------+
   | Copyright (c) The PHP Group                                          |
   +----------------------------------------------------------------------+
   | This source file is subject to version 3.01 of the PHP license,      |
   | that is bundled with this package in the file LICENSE, and is        |
   | available through the world-wide-web at the following url:           |
   | https://www.php.net/license/3_01.txt                                 |
   | If you did not receive a copy of the PHP license and are unable to   |
   | obtain it through the world-wide-web, please send a note to          |
   | license@php.net so we can mail you a copy immediately.               |
   +----------------------------------------------------------------------+
   | Authors: Stig Sæther Bakken <ssb@php.net>                            |
   |          Thies C. Arntzen <thies@thieso.net>                         |
   |          Sterling Hughes <sterling@php.net>                          |
   +----------------------------------------------------------------------+
*/

#ifndef PHP_XML_H
#define PHP_XML_H

#ifdef HAVE_XML

extern zend_module_entry xml_module_entry;
#define xml_module_ptr &xml_module_entry

#include "php_version.h"
#define PHP_XML_VERSION PHP_VERSION

#include "expat_compat.h"

#ifdef XML_UNICODE
#error "UTF-16 Unicode support not implemented!"
#endif

#else
#define xml_module_ptr NULL
#endif /* HAVE_XML */

#define phpext_xml_ptr xml_module_ptr

enum php_xml_option {
	PHP_XML_OPTION_CASE_FOLDING = 1,
	PHP_XML_OPTION_TARGET_ENCODING,
	PHP_XML_OPTION_SKIP_TAGSTART,
	PHP_XML_OPTION_SKIP_WHITE,
	PHP_XML_OPTION_PARSE_HUGE,
};

#ifdef LIBXML_EXPAT_COMPAT
#define PHP_XML_SAX_IMPL "libxml"
#else
#define PHP_XML_SAX_IMPL "expat"
#endif

#endif /* PHP_XML_H */
ext/gmp/php_gmp_int.h000064400000001603151730541150010606 0ustar00/* interface header; needs to be installed; FIXME rename? */

#ifndef incl_PHP_GMP_INT_H
#define incl_PHP_GMP_INT_H

#ifdef HAVE_CONFIG_H
#include <config.h>
#endif

#include "php.h"
#include <gmp.h>

#ifdef PHP_WIN32
# define PHP_GMP_API __declspec(dllexport)
#elif defined(__GNUC__) && __GNUC__ >= 4
# define PHP_GMP_API __attribute__ ((visibility("default")))
#else
# define PHP_GMP_API
#endif

typedef struct _gmp_object {
	mpz_t num;
	zend_object std;
} gmp_object;

static inline gmp_object *php_gmp_object_from_zend_object(zend_object *zobj) {
	return (gmp_object *)( ((char *)zobj) - XtOffsetOf(gmp_object, std) );
}

PHP_GMP_API zend_class_entry *php_gmp_class_entry(void);

/* GMP and MPIR use different datatypes on different platforms */
#ifdef _WIN64
typedef zend_long gmp_long;
typedef zend_ulong gmp_ulong;
#else
typedef long gmp_long;
typedef unsigned long gmp_ulong;
#endif

#endif
ext/msgpack/php_msgpack.h000064400000006177151730541150011453 0ustar00#ifndef PHP_MSGPACK_H
#define PHP_MSGPACK_H

#include "Zend/zend_smart_str.h" /* for smart_string */

#define PHP_MSGPACK_VERSION "2.2.0"

extern zend_module_entry msgpack_module_entry;
#define phpext_msgpack_ptr &msgpack_module_entry

#ifdef PHP_WIN32
#   define PHP_MSGPACK_API __declspec(dllexport)
#elif defined(__GNUC__) && __GNUC__ >= 4
#   define PHP_MSGPACK_API __attribute__ ((visibility("default")))
#else
#   define PHP_MSGPACK_API
#endif

#ifdef ZTS
#include "TSRM.h"
#endif

ZEND_BEGIN_MODULE_GLOBALS(msgpack)
    zend_bool error_display;
    zend_bool php_only;
    zend_bool illegal_key_insert;
    zend_bool use_str8_serialization;
    struct {
        void *var_hash;
        unsigned level;
    } serialize;
ZEND_END_MODULE_GLOBALS(msgpack)

ZEND_EXTERN_MODULE_GLOBALS(msgpack)

#ifdef ZTS
#define MSGPACK_G(v) TSRMG(msgpack_globals_id, zend_msgpack_globals *, v)
#else
#define MSGPACK_G(v) (msgpack_globals.v)
#endif

PHP_MSGPACK_API void php_msgpack_serialize(
    smart_str *buf, zval *val);
PHP_MSGPACK_API int php_msgpack_unserialize(
    zval *return_value, char *str, size_t str_len);

#ifdef WORDS_BIGENDIAN
# define MSGPACK_ENDIAN_BIG_BYTE 1
# define MSGPACK_ENDIAN_LITTLE_BYTE 0
#else
# define MSGPACK_ENDIAN_LITTLE_BYTE 1
# define MSGPACK_ENDIAN_BIG_BYTE 0
#endif

#if PHP_VERSION_ID < 80000
# define OBJ_FOR_PROP(zv) (zv)
#else
# define OBJ_FOR_PROP(zv) Z_OBJ_P(zv)
#endif

#if PHP_VERSION_ID >= 80000
# define IS_MAGIC_SERIALIZABLE(ce) (ce && ce->__serialize)
# define CALL_MAGIC_SERIALIZE(cep, zop, rvp) zend_call_known_instance_method_with_0_params((cep)->__serialize, zop, rvp)
# define CALL_MAGIC_UNSERIALIZE(cep, zop, rvp, zsdap) zend_call_known_instance_method_with_1_params((cep)->__unserialize, zop, rvp, zsdap)
#elif PHP_VERSION_ID >= 70400
# define IS_MAGIC_SERIALIZABLE(ce) (ce && zend_hash_str_exists(&ce->function_table, ZEND_STRL("__serialize")))
# define CALL_MAGIC_SERIALIZE(cep, zop, rvp) call_magic_serialize_fn(cep, zop, rvp, ZEND_STRL("__serialize"), 0, NULL)
# define CALL_MAGIC_UNSERIALIZE(cep, zop, rvp, zsdap) call_magic_serialize_fn(cep, zop, rvp, ZEND_STRL("__unserialize"), 1, zsdap)
static inline void call_magic_serialize_fn(zend_class_entry *ce, zend_object *object, zval *retval_ptr, const char *fn_str, size_t fn_len, int param_count, zval *params) {
	zval retval;
	zend_fcall_info fci;
	zend_fcall_info_cache fcic;

	fci.size = sizeof(fci);
	fci.object = object;
	fci.retval = retval_ptr ? retval_ptr : &retval;
	fci.param_count = param_count;
	fci.params = params;
	ZVAL_UNDEF(&fci.function_name); /* Unused */

	fcic.function_handler = zend_hash_str_find_ptr(&ce->function_table, fn_str, fn_len);
	fcic.object = object;
	fcic.called_scope = ce;

	int result = zend_call_function(&fci, &fcic);
	if (UNEXPECTED(result == FAILURE)) {
		if (!EG(exception)) {
			zend_error_noreturn(E_CORE_ERROR, "Couldn't execute method %s%s%s",
				fcic.function_handler->common.scope ? ZSTR_VAL(fcic.function_handler->common.scope->name) : "",
				fcic.function_handler->common.scope ? "::" : "", ZSTR_VAL(fcic.function_handler->common.function_name));
		}
	}

	if (!retval_ptr) {
		zval_ptr_dtor(&retval);
    }
}
#endif

#endif  /* PHP_MSGPACK_H */
ext/curl/php_curl.h000064400000003520151730541150010300 0ustar00/*
   +----------------------------------------------------------------------+
   | Copyright (c) The PHP Group                                          |
   +----------------------------------------------------------------------+
   | This source file is subject to version 3.01 of the PHP license,      |
   | that is bundled with this package in the file LICENSE, and is        |
   | available through the world-wide-web at the following url:           |
   | https://www.php.net/license/3_01.txt                                 |
   | If you did not receive a copy of the PHP license and are unable to   |
   | obtain it through the world-wide-web, please send a note to          |
   | license@php.net so we can mail you a copy immediately.               |
   +----------------------------------------------------------------------+
   | Author: Sterling Hughes <sterling@php.net>                           |
   |         Wez Furlong <wez@thebrainroom.com>                           |
   +----------------------------------------------------------------------+
*/

#ifndef _PHP_CURL_H
#define _PHP_CURL_H

#include "php.h"

#ifdef PHP_WIN32
# ifdef PHP_CURL_EXPORTS
#  define PHP_CURL_API __declspec(dllexport)
# else
#  define PHP_CURL_API __declspec(dllimport)
# endif
#elif defined(__GNUC__) && __GNUC__ >= 4
# define PHP_CURL_API __attribute__ ((visibility("default")))
#else
# define PHP_CURL_API
#endif

extern zend_module_entry curl_module_entry;
#define phpext_curl_ptr &curl_module_entry

PHP_CURL_API extern zend_class_entry *curl_ce;
PHP_CURL_API extern zend_class_entry *curl_share_ce;
PHP_CURL_API extern zend_class_entry *curl_share_persistent_ce;
PHP_CURL_API extern zend_class_entry *curl_multi_ce;
PHP_CURL_API extern zend_class_entry *curl_CURLFile_class;
PHP_CURL_API extern zend_class_entry *curl_CURLStringFile_class;

#endif  /* _PHP_CURL_H */
ext/filter/php_filter.h000064400000006224151730541160011145 0ustar00/*
  +----------------------------------------------------------------------+
  | Copyright (c) The PHP Group                                          |
  +----------------------------------------------------------------------+
  | This source file is subject to version 3.01 of the PHP license,      |
  | that is bundled with this package in the file LICENSE, and is        |
  | available through the world-wide-web at the following url:           |
  | https://www.php.net/license/3_01.txt                                 |
  | If you did not receive a copy of the PHP license and are unable to   |
  | obtain it through the world-wide-web, please send a note to          |
  | license@php.net so we can mail you a copy immediately.               |
  +----------------------------------------------------------------------+
  | Authors: Rasmus Lerdorf <rasmus@php.net>                             |
  |          Derick Rethans <derick@php.net>                             |
  +----------------------------------------------------------------------+
*/

#ifndef PHP_FILTER_H
#define PHP_FILTER_H

#include "zend_API.h"
#include "php.h"

extern zend_module_entry filter_module_entry;
#define phpext_filter_ptr &filter_module_entry

#ifdef ZTS
#include "TSRM.h"
#endif

#define PHP_FILTER_VERSION PHP_VERSION

PHP_MINIT_FUNCTION(filter);
PHP_MSHUTDOWN_FUNCTION(filter);
PHP_RINIT_FUNCTION(filter);
PHP_RSHUTDOWN_FUNCTION(filter);
PHP_MINFO_FUNCTION(filter);

ZEND_BEGIN_MODULE_GLOBALS(filter)
	zval post_array;
	zval get_array;
	zval cookie_array;
	zval env_array;
	zval server_array;
	zend_long default_filter;
	zend_long default_filter_flags;
ZEND_END_MODULE_GLOBALS(filter)

#if defined(COMPILE_DL_FILTER) && defined(ZTS)
ZEND_TSRMLS_CACHE_EXTERN()
#endif

#define IF_G(v) ZEND_MODULE_GLOBALS_ACCESSOR(filter, v)

#define PHP_INPUT_FILTER_PARAM_DECL zval *value, zend_long flags, zval *option_array, char *charset
zend_result php_filter_int(PHP_INPUT_FILTER_PARAM_DECL);
zend_result php_filter_boolean(PHP_INPUT_FILTER_PARAM_DECL);
zend_result php_filter_float(PHP_INPUT_FILTER_PARAM_DECL);
zend_result php_filter_validate_regexp(PHP_INPUT_FILTER_PARAM_DECL);
zend_result php_filter_validate_domain(PHP_INPUT_FILTER_PARAM_DECL);
zend_result php_filter_validate_url(PHP_INPUT_FILTER_PARAM_DECL);
zend_result php_filter_validate_email(PHP_INPUT_FILTER_PARAM_DECL);
zend_result php_filter_validate_ip(PHP_INPUT_FILTER_PARAM_DECL);
zend_result php_filter_validate_mac(PHP_INPUT_FILTER_PARAM_DECL);

zend_result php_filter_string(PHP_INPUT_FILTER_PARAM_DECL);
zend_result php_filter_encoded(PHP_INPUT_FILTER_PARAM_DECL);
zend_result php_filter_special_chars(PHP_INPUT_FILTER_PARAM_DECL);
zend_result php_filter_full_special_chars(PHP_INPUT_FILTER_PARAM_DECL);
zend_result php_filter_unsafe_raw(PHP_INPUT_FILTER_PARAM_DECL);
zend_result php_filter_email(PHP_INPUT_FILTER_PARAM_DECL);
zend_result php_filter_url(PHP_INPUT_FILTER_PARAM_DECL);
zend_result php_filter_number_int(PHP_INPUT_FILTER_PARAM_DECL);
zend_result php_filter_number_float(PHP_INPUT_FILTER_PARAM_DECL);
zend_result php_filter_add_slashes(PHP_INPUT_FILTER_PARAM_DECL);

zend_result php_filter_callback(PHP_INPUT_FILTER_PARAM_DECL);

#endif	/* FILTER_H */
ext/simplexml/php_simplexml_exports.h000064400000004051151730541170014200 0ustar00/*
  +----------------------------------------------------------------------+
  | Copyright (c) The PHP Group                                          |
  +----------------------------------------------------------------------+
  | This source file is subject to version 3.01 of the PHP license,      |
  | that is bundled with this package in the file LICENSE, and is        |
  | available through the world-wide-web at the following url:           |
  | https://www.php.net/license/3_01.txt                                 |
  | If you did not receive a copy of the PHP license and are unable to   |
  | obtain it through the world-wide-web, please send a note to          |
  | license@php.net so we can mail you a copy immediately.               |
  +----------------------------------------------------------------------+
  | Author: Sterling Hughes <sterling@php.net>                           |
  |         Marcus Boerger <helly@php.net>                               |
  |         Rob Richards <rrichards@php.net>                             |
  +----------------------------------------------------------------------+
*/

#ifndef PHP_SIMPLEXML_EXPORTS_H
#define PHP_SIMPLEXML_EXPORTS_H

#include "php_simplexml.h"

#define SKIP_TEXT(__p) \
	if ((__p)->type == XML_TEXT_NODE) { \
		goto next_iter; \
	}

#define GET_NODE(__s, __n) { \
	if ((__s)->node && (__s)->node->node) { \
		__n = (__s)->node->node; \
	} else { \
		__n = NULL; \
		zend_throw_error(NULL, "SimpleXMLElement is not properly initialized"); \
	} \
}

PHP_SXE_API zend_object *sxe_object_new(zend_class_entry *ce);

static inline php_sxe_object *php_sxe_fetch_object(zend_object *obj) /* {{{ */ {
	return (php_sxe_object *)((char*)(obj) - XtOffsetOf(php_sxe_object, zo));
}
/* }}} */

#define Z_SXEOBJ_P(zv) php_sxe_fetch_object(Z_OBJ_P((zv)))

typedef struct {
	zend_object_iterator  intern;
	php_sxe_object        *sxe;
} php_sxe_iterator;

PHP_SXE_API void php_sxe_rewind_iterator(php_sxe_object *sxe);
PHP_SXE_API void php_sxe_move_forward_iterator(php_sxe_object *sxe);

#endif /* PHP_SIMPLEXML_EXPORTS_H */
ext/simplexml/php_simplexml.h000064400000004771151730541170012425 0ustar00/*
  +----------------------------------------------------------------------+
  | Copyright (c) The PHP Group                                          |
  +----------------------------------------------------------------------+
  | This source file is subject to version 3.01 of the PHP license,      |
  | that is bundled with this package in the file LICENSE, and is        |
  | available through the world-wide-web at the following url:           |
  | https://www.php.net/license/3_01.txt                                 |
  | If you did not receive a copy of the PHP license and are unable to   |
  | obtain it through the world-wide-web, please send a note to          |
  | license@php.net so we can mail you a copy immediately.               |
  +----------------------------------------------------------------------+
  | Author: Sterling Hughes <sterling@php.net>                           |
  +----------------------------------------------------------------------+
*/

#ifndef PHP_SIMPLEXML_H
#define PHP_SIMPLEXML_H

extern zend_module_entry simplexml_module_entry;
#define phpext_simplexml_ptr &simplexml_module_entry

#include "php_version.h"
#define PHP_SIMPLEXML_VERSION PHP_VERSION

#ifdef ZTS
#include "TSRM.h"
#endif

#include "ext/libxml/php_libxml.h"
#include <libxml/parser.h>
#include <libxml/parserInternals.h>
#include <libxml/tree.h>
#include <libxml/uri.h>
#include <libxml/xmlerror.h>
#include <libxml/xinclude.h>
#include <libxml/xpath.h>
#include <libxml/xpathInternals.h>
#include <libxml/xpointer.h>
#include <libxml/xmlschemas.h>

PHP_MINIT_FUNCTION(simplexml);
PHP_MSHUTDOWN_FUNCTION(simplexml);
PHP_MINFO_FUNCTION(simplexml);

typedef enum {
	SXE_ITER_NONE     = 0,
	SXE_ITER_ELEMENT  = 1,
	SXE_ITER_CHILD    = 2,
	SXE_ITER_ATTRLIST = 3
} SXE_ITER;

typedef struct {
	php_libxml_node_ptr *node;
	php_libxml_ref_obj *document;
	HashTable *properties;
	xmlXPathContextPtr xpath;
	struct {
		zend_string           *name;
		zend_string           *nsprefix;
		int                   isprefix;
		SXE_ITER              type;
		zval                  data;
	} iter;
	zval tmp;
	zend_function *fptr_count;
	zend_object zo;
} php_sxe_object;

#ifdef PHP_WIN32
#	ifdef PHP_SIMPLEXML_EXPORTS
#		define PHP_SXE_API __declspec(dllexport)
#	else
#		define PHP_SXE_API __declspec(dllimport)
#	endif
#else
#	define PHP_SXE_API ZEND_API
#endif

extern PHP_SXE_API zend_class_entry *ce_SimpleXMLIterator;
extern PHP_SXE_API zend_class_entry *ce_SimpleXMLElement;

PHP_SXE_API zend_class_entry *sxe_get_element_class_entry(void);

#endif
ext/http/php_http_env_request.h000064400000001753151730541170012754 0ustar00/*
    +--------------------------------------------------------------------+
    | PECL :: http                                                       |
    +--------------------------------------------------------------------+
    | Redistribution and use in source and binary forms, with or without |
    | modification, are permitted provided that the conditions mentioned |
    | in the accompanying LICENSE file are met.                          |
    +--------------------------------------------------------------------+
    | Copyright (c) 2004-2014, Michael Wallner <mike@php.net>            |
    +--------------------------------------------------------------------+
*/

#ifndef PHP_HTTP_ENV_REQUEST_H
#define PHP_HTTP_ENV_REQUEST_H

PHP_HTTP_API zend_class_entry *php_http_get_env_request_class_entry(void);
PHP_MINIT_FUNCTION(http_env_request);

#endif

/*
 * Local variables:
 * tab-width: 4
 * c-basic-offset: 4
 * End:
 * vim600: noet sw=4 ts=4 fdm=marker
 * vim<600: noet sw=4 ts=4
 */
ext/http/php_http_api.h000064400000010040151730541200011144 0ustar00/*
    +--------------------------------------------------------------------+
    | PECL :: http                                                       |
    +--------------------------------------------------------------------+
    | Redistribution and use in source and binary forms, with or without |
    | modification, are permitted provided that the conditions mentioned |
    | in the accompanying LICENSE file are met.                          |
    +--------------------------------------------------------------------+
    | Copyright (c) 2004-2014, Michael Wallner <mike@php.net>            |
    +--------------------------------------------------------------------+
*/

#ifndef PHP_HTTP_API_H
#define PHP_HTTP_API_H

#ifdef __COVERITY_GCC_VERSION_AT_LEAST
# define _Float128 float
# define _Float64 float
# define _Float32 float
# define _Float64x float
# define _Float32x float
#endif

#ifdef HAVE_CONFIG_H
#include "config.h"
#endif

#ifndef PHP_WIN32
#include "php_config.h"
#endif
#include "php.h"
#include "SAPI.h"

#include "ext/raphf/php_raphf_api.h"
#include "ext/standard/php_string.h"
#include "ext/spl/spl_iterators.h"
#include "ext/date/php_date.h"

#include "zend_interfaces.h"
#include "zend_exceptions.h"


#if PHP_WIN32
# define PHP_HTTP_API __declspec(dllexport)
#elif __GNUC__ >= 4
# define PHP_HTTP_API extern __attribute__ ((visibility("default")))
#else
# define PHP_HTTP_API extern
#endif

#if (HAVE_ICONV || PHP_HTTP_HAVE_EXT_ICONV) && (PHP_HTTP_SHARED_DEPS || !COMPILE_DL_ICONV)
#	define PHP_HTTP_HAVE_ICONV 1
#endif

#if (HAVE_HASH_EXT || PHP_HTTP_HAVE_EXT_HASH) && (PHP_HTTP_SHARED_DEPS || !COMPILE_DL_HASH)
#	define PHP_HTTP_HAVE_HASH 1
#endif

#include <stddef.h>

#if PHP_WIN32
#	define CURL_STATICLIB
#	include <winsock2.h>
#else
#	if HAVE_NETDB_H
#		include <netdb.h>
#	endif
#	if HAVE_UNISTD_H
#		include <unistd.h>
#	endif
#endif

#if HAVE_WCHAR_H && HAVE_WCTYPE_H && HAVE_ISWALNUM && (HAVE_MBRTOWC || HAVE_MBTOWC)
#	define PHP_HTTP_HAVE_WCHAR 1
#endif

#include <ctype.h>
#define PHP_HTTP_IS_CTYPE(type, c) is##type((int) (unsigned char) (c))
#define PHP_HTTP_TO_CTYPE(type, c) to##type((int) (unsigned char) (c))

#include "php_http.h"

#include "php_http_buffer.h"
#include "php_http_misc.h"
#include "php_http_options.h"

#include "php_http.h"
#include "php_http_cookie.h"
#include "php_http_encoding.h"
#include "php_http_encoding_zlib.h"
#include "php_http_encoding_brotli.h"
#include "php_http_info.h"
#include "php_http_message.h"
#include "php_http_env.h"
#include "php_http_env_request.h"
#include "php_http_env_response.h"
#include "php_http_etag.h"
#include "php_http_exception.h"
#include "php_http_filter.h"
#include "php_http_header_parser.h"
#include "php_http_header.h"
#include "php_http_message_body.h"
#include "php_http_message_parser.h"
#include "php_http_negotiate.h"
#include "php_http_object.h"
#include "php_http_params.h"
#include "php_http_querystring.h"
#include "php_http_client.h"
#include "php_http_curl.h"
#include "php_http_client_request.h"
#include "php_http_client_response.h"
#include "php_http_client_curl.h"
#include "php_http_client_curl_event.h"
#include "php_http_client_curl_user.h"
#include "php_http_url.h"
#include "php_http_version.h"

ZEND_BEGIN_MODULE_GLOBALS(php_http)
	struct php_http_env_globals env;
#if PHP_HTTP_HAVE_CLIENT
	struct {
#	if PHP_HTTP_HAVE_LIBCURL
		struct php_http_client_curl_globals curl;
#	endif
	} client;
#endif
ZEND_END_MODULE_GLOBALS(php_http)

ZEND_EXTERN_MODULE_GLOBALS(php_http);

#if ZTS
#	include "TSRM/TSRM.h"
#	define PHP_HTTP_G ((zend_php_http_globals *) (*((void ***) tsrm_get_ls_cache()))[TSRM_UNSHUFFLE_RSRC_ID(php_http_globals_id)])
#	undef TSRMLS_FETCH_FROM_CTX
#	define TSRMLS_FETCH_FROM_CTX(ctx) ERROR
#else
#	define PHP_HTTP_G (&php_http_globals)
#endif

#if PHP_DEBUG
#	define _DPF_STR	0
#	define _DPF_IN	1
#	define _DPF_OUT	2
extern void _dpf(int type, const char *data, size_t length);
#else
#	define _dpf(t,s,l);
#endif

#endif /* PHP_HTTP_API_H */


/*
 * Local variables:
 * tab-width: 4
 * c-basic-offset: 4
 * End:
 * vim600: noet sw=4 ts=4 fdm=marker
 * vim<600: noet sw=4 ts=4
 */
ext/http/php_http_client_response.h000064400000002035151730541210013575 0ustar00/*
    +--------------------------------------------------------------------+
    | PECL :: http                                                       |
    +--------------------------------------------------------------------+
    | Redistribution and use in source and binary forms, with or without |
    | modification, are permitted provided that the conditions mentioned |
    | in the accompanying LICENSE file are met.                          |
    +--------------------------------------------------------------------+
    | Copyright (c) 2004-2014, Michael Wallner <mike@php.net>            |
    +--------------------------------------------------------------------+
*/

#ifndef PHP_HTTP_CLIENT_RESPONSE_H
#define PHP_HTTP_CLIENT_RESPONSE_H

PHP_HTTP_API zend_class_entry *php_http_get_client_response_class_entry(void);
PHP_MINIT_FUNCTION(http_client_response);

#endif /* PHP_HTTP_CLIENT_RESPONSE_H */


/*
 * Local variables:
 * tab-width: 4
 * c-basic-offset: 4
 * End:
 * vim600: noet sw=4 ts=4 fdm=marker
 * vim<600: noet sw=4 ts=4
 */
ext/http/php_http_header_parser.h000064400000005625151730541210013215 0ustar00/*
    +--------------------------------------------------------------------+
    | PECL :: http                                                       |
    +--------------------------------------------------------------------+
    | Redistribution and use in source and binary forms, with or without |
    | modification, are permitted provided that the conditions mentioned |
    | in the accompanying LICENSE file are met.                          |
    +--------------------------------------------------------------------+
    | Copyright (c) 2004-2014, Michael Wallner <mike@php.net>            |
    +--------------------------------------------------------------------+
*/

#ifndef PHP_HTTP_HEADER_PARSER_H
#define PHP_HTTP_HEADER_PARSER_H

#include "php_http_info.h"

typedef enum php_http_header_parser_state {
	PHP_HTTP_HEADER_PARSER_STATE_FAILURE = FAILURE,
	PHP_HTTP_HEADER_PARSER_STATE_START = 0,
	PHP_HTTP_HEADER_PARSER_STATE_KEY,
	PHP_HTTP_HEADER_PARSER_STATE_VALUE,
	PHP_HTTP_HEADER_PARSER_STATE_VALUE_EX,
	PHP_HTTP_HEADER_PARSER_STATE_HEADER_DONE,
	PHP_HTTP_HEADER_PARSER_STATE_DONE
} php_http_header_parser_state_t;

#define PHP_HTTP_HEADER_PARSER_CLEANUP 0x1

typedef struct php_http_header_parser {
	zend_ptr_stack stack;
	php_http_info_t info;
	struct {
		char *str;
		size_t len;
	} _key;
	struct {
		char *str;
		size_t len;
	} _val;
} php_http_header_parser_t;

PHP_HTTP_API php_http_header_parser_t *php_http_header_parser_init(php_http_header_parser_t *parser);
PHP_HTTP_API php_http_header_parser_state_t php_http_header_parser_state_is(php_http_header_parser_t *parser);
PHP_HTTP_API void php_http_header_parser_dtor(php_http_header_parser_t *parser);
PHP_HTTP_API void php_http_header_parser_free(php_http_header_parser_t **parser);
PHP_HTTP_API php_http_header_parser_state_t php_http_header_parser_parse(php_http_header_parser_t *parser, php_http_buffer_t *buffer, unsigned flags, HashTable *headers, php_http_info_callback_t callback_func, void *callback_arg);
PHP_HTTP_API php_http_header_parser_state_t php_http_headerparser_parse_stream(php_http_header_parser_t *parser, php_http_buffer_t *buffer, php_stream *s, unsigned flags, HashTable *headers, php_http_info_callback_t callback_func, void *callback_arg);

typedef struct php_http_header_parser_object {
	php_http_buffer_t *buffer;
	php_http_header_parser_t *parser;
	zend_object zo;
} php_http_header_parser_object_t;

PHP_HTTP_API zend_class_entry *php_http_get_header_parser_class_entry(void);

PHP_MINIT_FUNCTION(http_header_parser);

zend_object *php_http_header_parser_object_new(zend_class_entry *ce);
php_http_header_parser_object_t *php_http_header_parser_object_new_ex(zend_class_entry *ce, php_http_header_parser_t *parser);
void php_http_header_parser_object_free(zend_object *object);

#endif /* PHP_HTTP_HEADER_PARSER_H */

/*
 * Local variables:
 * tab-width: 4
 * c-basic-offset: 4
 * End:
 * vim600: noet sw=4 ts=4 fdm=marker
 * vim<600: noet sw=4 ts=4
 */

ext/http/php_http_cookie.h000064400000007416151730541220011663 0ustar00/*
    +--------------------------------------------------------------------+
    | PECL :: http                                                       |
    +--------------------------------------------------------------------+
    | Redistribution and use in source and binary forms, with or without |
    | modification, are permitted provided that the conditions mentioned |
    | in the accompanying LICENSE file are met.                          |
    +--------------------------------------------------------------------+
    | Copyright (c) 2004-2014, Michael Wallner <mike@php.net>            |
    +--------------------------------------------------------------------+
*/

#ifndef PHP_HTTP_COOKIE_H
#define PHP_HTTP_COOKIE_H

#define PHP_HTTP_COOKIE_SECURE		0x10L
#define PHP_HTTP_COOKIE_HTTPONLY	0x20L

#define PHP_HTTP_COOKIE_PARSE_RAW	0x01L

/*
	generally a netscape cookie compliant struct, recognizing httpOnly attribute, too;
	cookie params like those from rfc2109 and rfc2965 are just put into extras, if
	one specifies them in allowed extras, else they're treated like cookies themself
*/
typedef struct php_http_cookie_list {
	HashTable cookies;
	HashTable extras;
	long flags;
	char *path;
	char *domain;
	time_t expires;
	time_t max_age;
} php_http_cookie_list_t;

PHP_HTTP_API php_http_cookie_list_t *php_http_cookie_list_init(php_http_cookie_list_t *list);
PHP_HTTP_API php_http_cookie_list_t *php_http_cookie_list_parse(php_http_cookie_list_t *list, const char *str, size_t len, long flags, char **allowed_extras);
PHP_HTTP_API php_http_cookie_list_t *php_http_cookie_list_copy(php_http_cookie_list_t *from, php_http_cookie_list_t *to);
PHP_HTTP_API void php_http_cookie_list_dtor(php_http_cookie_list_t *list);
PHP_HTTP_API void php_http_cookie_list_free(php_http_cookie_list_t **list);

#define php_http_cookie_list_has_cookie(list, name, name_len) zend_symtable_str_exists(&(list)->cookies, (name), (name_len))
#define php_http_cookie_list_del_cookie(list, name, name_len) zend_symtable_str_del(&(list)->cookies, (name), (name_len))
PHP_HTTP_API void php_http_cookie_list_add_cookie(php_http_cookie_list_t *list, const char *name, size_t name_len, const char *value, size_t value_len);
PHP_HTTP_API const char *php_http_cookie_list_get_cookie(php_http_cookie_list_t *list, const char *name, size_t name_len, zval *cookie);

#define php_http_cookie_list_has_extra(list, name, name_len) zend_symtable_str_exists(&(list)->extras, (name), (name_len))
#define php_http_cookie_list_del_extra(list, name, name_len) zend_symtable_str_del(&(list)->extras, (name), (name_len))
PHP_HTTP_API void php_http_cookie_list_add_extra(php_http_cookie_list_t *list, const char *name, size_t name_len, const char *value, size_t value_len);
PHP_HTTP_API const char *php_http_cookie_list_get_extra(php_http_cookie_list_t *list, const char *name, size_t name_len, zval *extra);

PHP_HTTP_API void php_http_cookie_list_to_string(php_http_cookie_list_t *list, char **str, size_t *len);
PHP_HTTP_API php_http_cookie_list_t *php_http_cookie_list_from_struct(php_http_cookie_list_t *list, zval *strct);
PHP_HTTP_API void php_http_cookie_list_to_struct(php_http_cookie_list_t *list, zval *strct);

PHP_HTTP_API zend_class_entry *php_http_cookie_get_class_entry(void);

typedef struct php_http_cookie_object {
	php_http_cookie_list_t *list;
	zend_object zo;
} php_http_cookie_object_t;

zend_object *php_http_cookie_object_new(zend_class_entry *ce);
php_http_cookie_object_t *php_http_cookie_object_new_ex(zend_class_entry *ce, php_http_cookie_list_t *list);
zend_object *php_http_cookie_object_clone(zend_object *this_ptr);
void php_http_cookie_object_free(zend_object *object);

PHP_MINIT_FUNCTION(http_cookie);

#endif

/*
 * Local variables:
 * tab-width: 4
 * c-basic-offset: 4
 * End:
 * vim600: noet sw=4 ts=4 fdm=marker
 * vim<600: noet sw=4 ts=4
 */
ext/http/php_http_header.h000064400000003415151730541220011635 0ustar00/*
    +--------------------------------------------------------------------+
    | PECL :: http                                                       |
    +--------------------------------------------------------------------+
    | Redistribution and use in source and binary forms, with or without |
    | modification, are permitted provided that the conditions mentioned |
    | in the accompanying LICENSE file are met.                          |
    +--------------------------------------------------------------------+
    | Copyright (c) 2004-2014, Michael Wallner <mike@php.net>            |
    +--------------------------------------------------------------------+
*/

#ifndef PHP_HTTP_HEADERS_H
#define PHP_HTTP_HEADERS_H

#include "php_http_info.h"

PHP_HTTP_API ZEND_RESULT_CODE php_http_header_parse(const char *header, size_t length, HashTable *headers, php_http_info_callback_t callback_func, void **callback_data);

PHP_HTTP_API void php_http_header_to_callback(HashTable *headers, zend_bool crlf, php_http_pass_format_callback_t cb, void *cb_arg);
PHP_HTTP_API void php_http_header_to_callback_ex(const char *key, zval *val, zend_bool crlf, php_http_pass_format_callback_t cb, void *cb_arg);
PHP_HTTP_API void php_http_header_to_string(php_http_buffer_t *str, HashTable *headers);
PHP_HTTP_API void php_http_header_to_string_ex(php_http_buffer_t *str, const char *key, zval *val);

PHP_HTTP_API zend_string *php_http_header_value_to_string(zval *header);
PHP_HTTP_API zend_string *php_http_header_value_array_to_string(zval *header);

PHP_HTTP_API zend_class_entry *php_http_header_get_class_entry(void);
PHP_MINIT_FUNCTION(http_header);

#endif

/*
 * Local variables:
 * tab-width: 4
 * c-basic-offset: 4
 * End:
 * vim600: noet sw=4 ts=4 fdm=marker
 * vim<600: noet sw=4 ts=4
 */

ext/http/php_http_querystring.h000064400000003525151730541220013003 0ustar00/*
    +--------------------------------------------------------------------+
    | PECL :: http                                                       |
    +--------------------------------------------------------------------+
    | Redistribution and use in source and binary forms, with or without |
    | modification, are permitted provided that the conditions mentioned |
    | in the accompanying LICENSE file are met.                          |
    +--------------------------------------------------------------------+
    | Copyright (c) 2004-2014, Michael Wallner <mike@php.net>            |
    +--------------------------------------------------------------------+
*/

#ifndef PHP_HTTP_QUERYSTRING_H
#define PHP_HTTP_QUERYSTRING_H

#if PHP_HTTP_HAVE_ICONV
PHP_HTTP_API ZEND_RESULT_CODE php_http_querystring_xlate(zval *dst, zval *src, const char *ie, const char *oe);
#endif /* PHP_HTTP_HAVE_ICONV */
PHP_HTTP_API ZEND_RESULT_CODE php_http_querystring_update(zval *qarray, zval *params, zval *qstring);
PHP_HTTP_API ZEND_RESULT_CODE php_http_querystring_ctor(zval *instance, zval *params);

typedef php_http_object_t php_http_querystring_object_t;

#define PHP_HTTP_QUERYSTRING_TYPE_BOOL		_IS_BOOL
#define PHP_HTTP_QUERYSTRING_TYPE_INT		IS_LONG
#define PHP_HTTP_QUERYSTRING_TYPE_FLOAT		IS_DOUBLE
#define PHP_HTTP_QUERYSTRING_TYPE_STRING	IS_STRING
#define PHP_HTTP_QUERYSTRING_TYPE_ARRAY		IS_ARRAY
#define PHP_HTTP_QUERYSTRING_TYPE_OBJECT	IS_OBJECT

PHP_HTTP_API zend_class_entry *php_http_querystring_get_class_entry(void);

PHP_MINIT_FUNCTION(http_querystring);

#define php_http_querystring_object_new php_http_object_new
#define php_http_querystring_object_new_ex php_http_object_new_ex

#endif /* PHP_HTTP_QUERYSTRING_H */

/*
 * Local variables:
 * tab-width: 4
 * c-basic-offset: 4
 * End:
 * vim600: noet sw=4 ts=4 fdm=marker
 * vim<600: noet sw=4 ts=4
 */
ext/http/php_http_misc.h000064400000017604151730541230011346 0ustar00/*
    +--------------------------------------------------------------------+
    | PECL :: http                                                       |
    +--------------------------------------------------------------------+
    | Redistribution and use in source and binary forms, with or without |
    | modification, are permitted provided that the conditions mentioned |
    | in the accompanying LICENSE file are met.                          |
    +--------------------------------------------------------------------+
    | Copyright (c) 2004-2014, Michael Wallner <mike@php.net>            |
    +--------------------------------------------------------------------+
*/

#ifndef PHP_HTTP_MISC_H
#define PHP_HTTP_MISC_H

/* DEFAULTS */

/* DATE FORMAT RFC1123 */
#define PHP_HTTP_DATE_FORMAT "D, d M Y H:i:s \\G\\M\\T"

/* CR LF */
#define PHP_HTTP_CRLF "\r\n"

/* def URL arg separator */
#define PHP_HTTP_URL_ARGSEP "&"

/* send buffer size */
#define PHP_HTTP_SENDBUF_SIZE 40960

/* allowed characters of header field names */
#define PHP_HTTP_HEADER_NAME_CHARS "!#$%&'*+-.^_`|~1234567890abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"

/* SLEEP */

#define PHP_HTTP_DIFFSEC (0.001)
#define PHP_HTTP_MLLISEC (1000)
#define PHP_HTTP_MCROSEC (1000 * 1000)
#define PHP_HTTP_NANOSEC (1000 * 1000 * 1000)
#define PHP_HTTP_MSEC(s) ((long)(s * PHP_HTTP_MLLISEC))
#define PHP_HTTP_USEC(s) ((long)(s * PHP_HTTP_MCROSEC))
#define PHP_HTTP_NSEC(s) ((long)(s * PHP_HTTP_NANOSEC))

PHP_HTTP_API void php_http_sleep(double s);

/* STRING UTILITIES */

#ifndef PTR_SET
#	define PTR_SET(STR, SET) \
	{ \
		PTR_FREE(STR); \
		STR = SET; \
	}
#endif

#define STR_PTR(s) (s?s:"")

#define lenof(S) (sizeof(S) - 1)

#define PHP_HTTP_MATCH_LOOSE	0
#define PHP_HTTP_MATCH_CASE		0x01
#define PHP_HTTP_MATCH_WORD		0x10
#define PHP_HTTP_MATCH_FULL		0x20
#define PHP_HTTP_MATCH_STRICT	(PHP_HTTP_MATCH_CASE|PHP_HTTP_MATCH_FULL)

int php_http_match(const char *haystack, const char *needle, int flags);
char *php_http_pretty_key(register char *key, size_t key_len, zend_bool uctitle, zend_bool xhyphen);
size_t php_http_boundary(char *buf, size_t len);
int php_http_select_str(const char *cmp, int argc, ...);

#define php_http_locate_str(h, h_len, n, n_len) zend_memnstr((h), (n), (n_len), (h)+(h_len))

static inline const char *php_http_locate_eol(const char *line, int *eol_len)
{
	const char *eol = strpbrk(line, "\r\n");

	if (eol_len) {
		*eol_len = eol ? ((eol[0] == '\r' && eol[1] == '\n') ? 2 : 1) : 0;
	}
	return eol;
}

static inline const char *php_http_locate_bin_eol(const char *bin, size_t len, int *eol_len)
{
	register const char *eol = bin;

	while (len--) {
		if (UNEXPECTED(*eol == '\r' || *eol == '\n')) {
			if (EXPECTED(eol_len)) {
				*eol_len = (EXPECTED(eol[0] == '\r' && eol[1] == '\n') ? 2 : 1);
			}
			return eol;
		}
		++eol;
	}
	return NULL;
}

/* ZEND */

#if PHP_DEBUG
#	undef  HASH_OF
#	define HASH_OF(p) ((HashTable*)(Z_TYPE_P(p)==IS_ARRAY ? Z_ARRVAL_P(p) : ((Z_TYPE_P(p)==IS_OBJECT ? Z_OBJ_HT_P(p)->get_properties(Z_OBJ_P(p)) : NULL))))
#endif

#if PHP_VERSION_ID >= 80100
# define php_http_mem_stream_open(type, zstr) php_stream_memory_open((type), (zstr))
#else
# define php_http_mem_stream_open(type, zstr) php_stream_memory_open((type), (zstr)->val, (zstr)->len)
# define ZEND_BEGIN_ARG_WITH_TENTATIVE_RETURN_TYPE_INFO_EX(name, return_reference, required_num_args, type, allow_null) \
		 ZEND_BEGIN_ARG_INFO_EX(name, 0, return_reference, required_num_args)
# define ZEND_BEGIN_ARG_WITH_TENTATIVE_RETURN_OBJ_INFO_EX(name, return_reference, required_num_args, type, allow_null) \
		 ZEND_BEGIN_ARG_INFO_EX(name, 0, return_reference, required_num_args)
#endif

#define HT_IS_RECURSIVE(ht) GC_IS_RECURSIVE(ht)
#define HT_PROTECT_RECURSION(ht) GC_TRY_PROTECT_RECURSION(ht)
#define HT_UNPROTECT_RECURSION(ht) GC_TRY_UNPROTECT_RECURSION(ht)

#ifndef convert_to_explicit_type
# define convert_to_explicit_type(pzv, type) \
	do { \
		switch (type) { \
			case IS_NULL: \
				convert_to_null(pzv); \
				break; \
			case IS_LONG: \
				convert_to_long(pzv); \
				break; \
			case IS_DOUBLE: \
				convert_to_double(pzv); \
				break; \
			case _IS_BOOL: \
				convert_to_boolean(pzv); \
				break; \
			case IS_ARRAY: \
				convert_to_array(pzv); \
				break; \
			case IS_OBJECT: \
				convert_to_object(pzv); \
				break; \
			case IS_STRING: \
				convert_to_string(pzv); \
				break; \
			default: \
				assert(0); \
				break; \
		} \
	} while (0);

#endif
static inline void *PHP_HTTP_OBJ(zend_object *zo, zval *zv)
{
	if (!zo) {
		zo = Z_OBJ_P(zv);
	}
	return (char *) zo - zo->handlers->offset;
}

static inline zend_string *php_http_cs2zs(char *s, size_t l)
{
	zend_string *str = zend_string_init(s, l, 0);
	efree(s);
	return str;
}

static inline ZEND_RESULT_CODE php_http_ini_entry(const char *name_str, size_t name_len, const char **val_str, size_t *val_len, zend_bool orig)
{
	zend_ini_entry *ini_entry;

	if ((ini_entry = zend_hash_str_find_ptr(EG(ini_directives), name_str, name_len))) {
		if (orig && ini_entry->modified) {
			*val_str = ini_entry->orig_value->val;
			*val_len = ini_entry->orig_value->len;
		} else {
			*val_str = ini_entry->value->val;
			*val_len = ini_entry->value->len;
		}
		return SUCCESS;
	}
	return FAILURE;
}

/* return object(values) */
#define ZVAL_OBJECT(z, o, addref) \
	ZVAL_OBJ(z, o); \
	if (addref) { \
		Z_ADDREF_P(z); \
	}
#define RETVAL_OBJECT(o, addref) \
	ZVAL_OBJECT(return_value, o, addref)
#define RETURN_OBJECT(o, addref) \
	RETVAL_OBJECT(o, addref); \
	return

#define EMPTY_FUNCTION_ENTRY {NULL, NULL, NULL, 0, 0}

#define PHP_MINIT_CALL(func) PHP_MINIT(func)(INIT_FUNC_ARGS_PASSTHRU)
#define PHP_RINIT_CALL(func) PHP_RINIT(func)(INIT_FUNC_ARGS_PASSTHRU)
#define PHP_MSHUTDOWN_CALL(func) PHP_MSHUTDOWN(func)(SHUTDOWN_FUNC_ARGS_PASSTHRU)
#define PHP_RSHUTDOWN_CALL(func) PHP_RSHUTDOWN(func)(SHUTDOWN_FUNC_ARGS_PASSTHRU)

/* ARRAYS */

PHP_HTTP_API unsigned php_http_array_list(HashTable *ht, unsigned argc, ...);

typedef struct php_http_arrkey {
	zend_ulong h;
	zend_string *key;
	unsigned allocated:1;
	unsigned stringified:1;
} php_http_arrkey_t;

static inline void *php_http_arrkey_stringify(php_http_arrkey_t *arrkey, zend_hash_key *key)
{
	if (arrkey) {
		arrkey->allocated = 0;
	} else {
		arrkey = emalloc(sizeof(*arrkey));
		arrkey->allocated = 1;
	}

	if (key) {
		memcpy(arrkey, key, sizeof(*key));
	}
	if ((arrkey->stringified = !arrkey->key)) {
		arrkey->key = zend_long_to_str(arrkey->h);
	}
	return arrkey;
}

static inline void php_http_arrkey_dtor(php_http_arrkey_t *arrkey)
{
	if (arrkey->stringified) {
		zend_string_release(arrkey->key);
	}
	if (arrkey->allocated) {
		efree(arrkey);
	}
}

#define array_copy(src, dst) zend_hash_copy(dst, src, (copy_ctor_func_t) zval_add_ref)
#define array_copy_strings(src, dst) zend_hash_copy(dst, src, php_http_array_copy_strings)
#define ARRAY_JOIN_STRONLY   0x01
#define ARRAY_JOIN_PRETTIFY  0x02
#define ARRAY_JOIN_STRINGIFY 0x04
#define array_join(src, dst, append, flags) zend_hash_apply_with_arguments(src, (append)?php_http_array_apply_append_func:php_http_array_apply_merge_func, 2, dst, (int)flags)

void php_http_array_copy_strings(zval *zp);
int php_http_array_apply_append_func(zval *pDest, int num_args, va_list args, zend_hash_key *hash_key);
int php_http_array_apply_merge_func(zval *pDest, int num_args, va_list args, zend_hash_key *hash_key);

/* PASS CALLBACK */

typedef size_t (*php_http_pass_callback_t)(void *cb_arg, const char *str, size_t len);
typedef size_t (*php_http_pass_php_http_buffer_callback_t)(void *cb_arg, php_http_buffer_t *str);
typedef size_t (*php_http_pass_format_callback_t)(void *cb_arg, const char *fmt, ...);

typedef struct php_http_pass_fcall_arg {
	zval fcz;
	zend_fcall_info fci;
	zend_fcall_info_cache fcc;
} php_http_pass_fcall_arg_t;

PHP_HTTP_API size_t php_http_pass_fcall_callback(void *cb_arg, const char *str, size_t len);

#endif

/*
 * Local variables:
 * tab-width: 4
 * c-basic-offset: 4
 * End:
 * vim600: noet sw=4 ts=4 fdm=marker
 * vim<600: noet sw=4 ts=4
 */
ext/http/php_http_negotiate.h000064400000007656151730541230012400 0ustar00/*
    +--------------------------------------------------------------------+
    | PECL :: http                                                       |
    +--------------------------------------------------------------------+
    | Redistribution and use in source and binary forms, with or without |
    | modification, are permitted provided that the conditions mentioned |
    | in the accompanying LICENSE file are met.                          |
    +--------------------------------------------------------------------+
    | Copyright (c) 2004-2014, Michael Wallner <mike@php.net>            |
    +--------------------------------------------------------------------+
*/

#ifndef PHP_HTTP_NEGOTIATE_H
#define PHP_HTTP_NEGOTIATE_H

PHP_HTTP_API HashTable *php_http_negotiate(const char *value_str, size_t value_len, HashTable *supported, const char *primary_sep_str, size_t primary_sep_len);

static inline HashTable *php_http_negotiate_language(HashTable *supported, php_http_message_t *request)
{
	HashTable *result = NULL;
	size_t length;
	char *value = php_http_env_get_request_header(ZEND_STRL("Accept-Language"), &length, request);

	if (value) {
		result = php_http_negotiate(value, length, supported, "-", 1);
	}
	PTR_FREE(value);

	return result;
}

static inline HashTable *php_http_negotiate_encoding(HashTable *supported, php_http_message_t *request)
{
	HashTable *result = NULL;
	size_t length;
	char *value = php_http_env_get_request_header(ZEND_STRL("Accept-Encoding"), &length, request);

	if (value) {
		result = php_http_negotiate(value, length, supported, NULL, 0);
	}
	PTR_FREE(value);

	return result;
}

static inline HashTable *php_http_negotiate_charset(HashTable *supported, php_http_message_t *request)
{
	HashTable *result = NULL;
	size_t length;
	char *value = php_http_env_get_request_header(ZEND_STRL("Accept-Charset"), &length, request);

	if (value) {
		result = php_http_negotiate(value, length, supported, NULL, 0);
	}
	PTR_FREE(value);

	return result;
}

static inline HashTable *php_http_negotiate_content_type(HashTable *supported, php_http_message_t *request)
{
	HashTable *result = NULL;
	size_t length;
	char *value = php_http_env_get_request_header(ZEND_STRL("Accept"), &length, request);

	if (value) {
		result = php_http_negotiate(value, length, supported, "/", 1);
	}
	PTR_FREE(value);

	return result;
}

#define PHP_HTTP_DO_NEGOTIATE_DEFAULT(supported) \
	{ \
		zval *value; \
		HashPosition pos; \
		 \
		zend_hash_internal_pointer_reset_ex((supported), &pos); \
		if ((value = zend_hash_get_current_data_ex((supported), &pos))) { \
			RETVAL_ZVAL(value, 1, 0); \
		} else { \
			RETVAL_NULL(); \
		} \
	}

#define PHP_HTTP_DO_NEGOTIATE_HANDLE_DEFAULT(supported, rs_array) \
	PHP_HTTP_DO_NEGOTIATE_DEFAULT(supported); \
	if (rs_array) { \
		zval *value; \
		 \
		ZEND_HASH_FOREACH_VAL(supported, value) \
		{ \
			zend_string *zs = zval_get_string(value); \
			add_assoc_double_ex(rs_array, zs->val, zs->len, 1.0); \
			zend_string_release(zs); \
		} \
		ZEND_HASH_FOREACH_END(); \
	}

#define PHP_HTTP_DO_NEGOTIATE_HANDLE_RESULT(result, supported, rs_array) \
	{ \
		zend_string *key; \
		zend_ulong idx; \
		 \
		if (zend_hash_num_elements(result) && HASH_KEY_IS_STRING == zend_hash_get_current_key(result, &key, &idx)) { \
			RETVAL_STR_COPY(key); \
		} else { \
			PHP_HTTP_DO_NEGOTIATE_DEFAULT(supported); \
		} \
		\
		if (rs_array) { \
			zend_hash_copy(Z_ARRVAL_P(rs_array), result, (copy_ctor_func_t) zval_add_ref); \
		} \
		\
		zend_hash_destroy(result); \
		FREE_HASHTABLE(result); \
	}

#define PHP_HTTP_DO_NEGOTIATE(type, supported, rs_array) \
	{ \
		HashTable *result; \
		if ((result = php_http_negotiate_ ##type(supported, NULL))) { \
			PHP_HTTP_DO_NEGOTIATE_HANDLE_RESULT(result, supported, rs_array); \
		} else { \
			PHP_HTTP_DO_NEGOTIATE_HANDLE_DEFAULT(supported, rs_array); \
		} \
	}

#endif

/*
 * Local variables:
 * tab-width: 4
 * c-basic-offset: 4
 * End:
 * vim600: noet sw=4 ts=4 fdm=marker
 * vim<600: noet sw=4 ts=4
 */

ext/http/php_http_encoding_zlib.h000064400000004461151730541230013216 0ustar00/*
    +--------------------------------------------------------------------+
    | PECL :: http                                                       |
    +--------------------------------------------------------------------+
    | Redistribution and use in source and binary forms, with or without |
    | modification, are permitted provided that the conditions mentioned |
    | in the accompanying LICENSE file are met.                          |
    +--------------------------------------------------------------------+
    | Copyright (c) 2004-2014, Michael Wallner <mike@php.net>            |
    +--------------------------------------------------------------------+
*/

#ifndef PHP_HTTP_ENCODING_ZLIB_H
#define PHP_HTTP_ENCODING_ZLIB_H

#include "php_http_encoding.h"

#include <zlib.h>

#ifndef Z_FIXED
/* Z_FIXED does not exist prior 1.2.2.2 */
#	define Z_FIXED 0
#endif

extern PHP_MINIT_FUNCTION(http_encoding_zlib);

zend_class_entry *php_http_get_deflate_stream_class_entry(void);
zend_class_entry *php_http_get_inflate_stream_class_entry(void);

PHP_HTTP_API php_http_encoding_stream_ops_t *php_http_encoding_stream_get_deflate_ops(void);
PHP_HTTP_API php_http_encoding_stream_ops_t *php_http_encoding_stream_get_inflate_ops(void);

PHP_HTTP_API ZEND_RESULT_CODE php_http_encoding_deflate(int flags, const char *data, size_t data_len, char **encoded, size_t *encoded_len);
PHP_HTTP_API ZEND_RESULT_CODE php_http_encoding_inflate(const char *data, size_t data_len, char **decoded, size_t *decoded_len);

#define PHP_HTTP_DEFLATE_LEVEL_DEF			0x00000000
#define PHP_HTTP_DEFLATE_LEVEL_MIN			0x00000001
#define PHP_HTTP_DEFLATE_LEVEL_MAX			0x00000009
#define PHP_HTTP_DEFLATE_TYPE_ZLIB			0x00000000
#define PHP_HTTP_DEFLATE_TYPE_GZIP			0x00000010
#define PHP_HTTP_DEFLATE_TYPE_RAW			0x00000020
#define PHP_HTTP_DEFLATE_STRATEGY_DEF		0x00000000
#define PHP_HTTP_DEFLATE_STRATEGY_FILT		0x00000100
#define PHP_HTTP_DEFLATE_STRATEGY_HUFF		0x00000200
#define PHP_HTTP_DEFLATE_STRATEGY_RLE		0x00000300
#define PHP_HTTP_DEFLATE_STRATEGY_FIXED		0x00000400

#define PHP_HTTP_INFLATE_TYPE_ZLIB			0x00000000
#define PHP_HTTP_INFLATE_TYPE_GZIP			0x00000000
#define PHP_HTTP_INFLATE_TYPE_RAW			0x00000001

#endif

/*
 * Local variables:
 * tab-width: 4
 * c-basic-offset: 4
 * End:
 * vim600: noet sw=4 ts=4 fdm=marker
 * vim<600: noet sw=4 ts=4
 */

ext/http/php_http_filter.h000064400000001722151730541230011672 0ustar00/*
    +--------------------------------------------------------------------+
    | PECL :: http                                                       |
    +--------------------------------------------------------------------+
    | Redistribution and use in source and binary forms, with or without |
    | modification, are permitted provided that the conditions mentioned |
    | in the accompanying LICENSE file are met.                          |
    +--------------------------------------------------------------------+
    | Copyright (c) 2004-2014, Michael Wallner <mike@php.net>            |
    +--------------------------------------------------------------------+
*/

#ifndef PHP_HTTP_FILTER_H
#define PHP_HTTP_FILTER_H

PHP_HTTP_API php_stream_filter_factory php_http_filter_factory;
PHP_MINIT_FUNCTION(http_filter);

#endif

/*
 * Local variables:
 * tab-width: 4
 * c-basic-offset: 4
 * End:
 * vim600: noet sw=4 ts=4 fdm=marker
 * vim<600: noet sw=4 ts=4
 */

ext/http/php_http_client_curl.h000064400000005011151730541240012704 0ustar00/*
    +--------------------------------------------------------------------+
    | PECL :: http                                                       |
    +--------------------------------------------------------------------+
    | Redistribution and use in source and binary forms, with or without |
    | modification, are permitted provided that the conditions mentioned |
    | in the accompanying LICENSE file are met.                          |
    +--------------------------------------------------------------------+
    | Copyright (c) 2004-2014, Michael Wallner <mike@php.net>            |
    +--------------------------------------------------------------------+
*/

#ifndef PHP_HTTP_CLIENT_CURL_H
#define PHP_HTTP_CLIENT_CURL_H

#if PHP_HTTP_HAVE_LIBCURL

struct php_http_client_curl_globals {
	php_http_client_driver_t driver;
};

typedef struct php_http_client_curl_handle {
	CURLM *multi;
	CURLSH *share;
} php_http_client_curl_handle_t;

typedef struct php_http_client_curl_ops {
	void *(*init)(php_http_client_t *client, void *user_data);
	void (*dtor)(void **ctx_ptr);
	ZEND_RESULT_CODE (*once)(void *ctx);
	ZEND_RESULT_CODE (*wait)(void *ctx, struct timeval *custom_timeout);
	ZEND_RESULT_CODE (*exec)(void *ctx);
} php_http_client_curl_ops_t;

typedef struct php_http_client_curl {
	php_http_client_curl_handle_t *handle;

	int unfinished;  /* int because of curl_multi_perform() */

	void *ev_ctx;
	php_http_client_curl_ops_t *ev_ops;
} php_http_client_curl_t;

static inline void php_http_client_curl_get_timeout(php_http_client_curl_t *curl, long max_tout, struct timeval *timeout)
{
	timeout->tv_sec = 0;
	timeout->tv_usec = 0;

	/* always returns CURLM_OK, check max_tout instead */
	curl_multi_timeout(curl->handle->multi, &max_tout);

	if (!max_tout) {
		/* immediately */
		return;
	}

	if (max_tout < 0) {
		/* 5ms */
		max_tout = 5;
	} else if (max_tout > 1000) {
		/* 1s */
		max_tout = 1000;
	}

	timeout->tv_sec = max_tout / 1000;
	timeout->tv_usec = (max_tout % 1000) * 1000;
}

PHP_HTTP_API void php_http_client_curl_responsehandler(php_http_client_t *client);
PHP_HTTP_API void php_http_client_curl_loop(php_http_client_t *client, curl_socket_t s, int curl_action);
PHP_HTTP_API php_http_client_ops_t *php_http_client_curl_get_ops(void);

PHP_MINIT_FUNCTION(http_client_curl);
PHP_MSHUTDOWN_FUNCTION(http_client_curl);

#endif /* PHP_HTTP_HAVE_LIBCURL */

#endif /* PHP_HTTP_CLIENT_CURL_H */

/*
 * Local variables:
 * tab-width: 4
 * c-basic-offset: 4
 * End:
 * vim600: noet sw=4 ts=4 fdm=marker
 * vim<600: noet sw=4 ts=4
 */
ext/http/php_http_url.h000064400000011070151730541240011205 0ustar00/*
    +--------------------------------------------------------------------+
    | PECL :: http                                                       |
    +--------------------------------------------------------------------+
    | Redistribution and use in source and binary forms, with or without |
    | modification, are permitted provided that the conditions mentioned |
    | in the accompanying LICENSE file are met.                          |
    +--------------------------------------------------------------------+
    | Copyright (c) 2004-2014, Michael Wallner <mike@php.net>            |
    +--------------------------------------------------------------------+
*/

#ifndef PHP_HTTP_URL_H
#define PHP_HTTP_URL_H

#include "ext/standard/url.h"

/* php_http_url_mod() */
#define PHP_HTTP_URL_REPLACE		0x000
#define PHP_HTTP_URL_JOIN_PATH		0x001
#define PHP_HTTP_URL_JOIN_QUERY		0x002
#define PHP_HTTP_URL_STRIP_USER		0x004
#define PHP_HTTP_URL_STRIP_PASS		0x008
#define PHP_HTTP_URL_STRIP_AUTH		(PHP_HTTP_URL_STRIP_USER|PHP_HTTP_URL_STRIP_PASS)
#define PHP_HTTP_URL_STRIP_PORT		0x020
#define PHP_HTTP_URL_STRIP_PATH		0x040
#define PHP_HTTP_URL_STRIP_QUERY	0x080
#define PHP_HTTP_URL_STRIP_FRAGMENT	0x100
#define PHP_HTTP_URL_STRIP_ALL ( \
	PHP_HTTP_URL_STRIP_AUTH | \
	PHP_HTTP_URL_STRIP_PORT | \
	PHP_HTTP_URL_STRIP_PATH | \
	PHP_HTTP_URL_STRIP_QUERY | \
	PHP_HTTP_URL_STRIP_FRAGMENT \
)
#define PHP_HTTP_URL_FROM_ENV		0x1000
#define PHP_HTTP_URL_SANITIZE_PATH	0x2000

/* parse multibyte according to locale */
#define PHP_HTTP_URL_PARSE_MBLOC	0x10000
/* parse utf8 multibyte sequences */
#define PHP_HTTP_URL_PARSE_MBUTF8	0x20000
/* convert multibyte hostnames to IDNA */
#define PHP_HTTP_URL_PARSE_TOIDN	0x100000
/* percent encode multibyte sequences in userinfo, path, query and fragment */
#define PHP_HTTP_URL_PARSE_TOPCT	0x200000

#if PHP_HTTP_HAVE_IDNA2008
#define PHP_HTTP_URL_PARSE_TOIDN_2008 \
	(PHP_HTTP_URL_PARSE_TOIDN	|	0x400000)
#endif
#if PHP_HTTP_HAVE_IDNA2003
#define PHP_HTTP_URL_PARSE_TOIDN_2003 \
	(PHP_HTTP_URL_PARSE_TOIDN	|	0x800000)
#endif

/* ignore errors */
#define PHP_HTTP_URL_IGNORE_ERRORS	0x10000000
/* do not report errors */
#define PHP_HTTP_URL_SILENT_ERRORS	0x20000000

#define PHP_HTTP_URL_STDFLAGS		0x00332003

typedef struct php_http_url {
	char *scheme;
	char *user;
	char *pass;
	char *host;
	unsigned short port;
	char *path;
	char *query;
	char *fragment;
} php_http_url_t;

PHP_HTTP_API php_http_url_t *php_http_url_parse(const char *str, size_t len, unsigned flags);
PHP_HTTP_API php_http_url_t *php_http_url_parse_authority(const char *str, size_t len, unsigned flags);
PHP_HTTP_API php_http_url_t *php_http_url_mod(const php_http_url_t *old_url, const php_http_url_t *new_url, unsigned flags);
PHP_HTTP_API php_http_url_t *php_http_url_copy(const php_http_url_t *url, zend_bool persistent);
PHP_HTTP_API php_http_url_t *php_http_url_from_struct(HashTable *ht);
PHP_HTTP_API php_http_url_t *php_http_url_from_zval(zval *value, unsigned flags);
PHP_HTTP_API HashTable *php_http_url_to_struct(const php_http_url_t *url, zval *strct);
PHP_HTTP_API char *php_http_url_to_string(const php_http_url_t *url, char **url_str, size_t *url_len, zend_bool persistent);
PHP_HTTP_API char *php_http_url_authority_to_string(const php_http_url_t *url, char **url_str, size_t *url_len);
PHP_HTTP_API void php_http_url_free(php_http_url_t **url);

PHP_HTTP_API ZEND_RESULT_CODE php_http_url_encode_hash(HashTable *hash, const char *pre_encoded_str, size_t pre_encoded_len, char **encoded_str, size_t *encoded_len);
PHP_HTTP_API ZEND_RESULT_CODE php_http_url_encode_hash_ex(HashTable *hash, php_http_buffer_t *qstr, const char *arg_sep_str, size_t arg_sep_len, const char *val_sep_str, size_t val_sep_len, const char *pre_encoded_str, size_t pre_encoded_len);

static inline void php_http_url_argsep(const char **str, size_t *len)
{
	if (SUCCESS != php_http_ini_entry(ZEND_STRL("arg_separator.output"), str, len, 0) || !*len) {
		*str = PHP_HTTP_URL_ARGSEP;
		*len = lenof(PHP_HTTP_URL_ARGSEP);
	}
}

static inline zend_bool php_http_url_is_empty(const php_http_url_t *url) {
	return !(url->scheme || url->pass || url->user || url->host || url->port ||	url->path || url->query || url->fragment);
}

PHP_HTTP_API zend_class_entry *php_http_url_get_class_entry(void);
PHP_HTTP_API zend_class_entry *php_http_get_env_url_class_entry(void);
PHP_MINIT_FUNCTION(http_url);

#define php_http_url_object_new php_http_object_new
#define php_http_url_object_new_ex php_http_object_new_ex

#endif

/*
 * Local variables:
 * tab-width: 4
 * c-basic-offset: 4
 * End:
 * vim600: noet sw=4 ts=4 fdm=marker
 * vim<600: noet sw=4 ts=4
 */

ext/http/php_http_response_codes.h000064400000007041151730541250013422 0ustar00/*
    +--------------------------------------------------------------------+
    | PECL :: http                                                       |
    +--------------------------------------------------------------------+
    | Redistribution and use in source and binary forms, with or without |
    | modification, are permitted provided that the conditions mentioned |
    | in the accompanying LICENSE file are met.                          |
    +--------------------------------------------------------------------+
    | Copyright (c) 2004-2015, Michael Wallner <mike@php.net>            |
    +--------------------------------------------------------------------+
*/

#ifndef PHP_HTTP_RESPONSE_CODE
#	define PHP_HTTP_RESPONSE_CODE(code, status)
#endif

PHP_HTTP_RESPONSE_CODE(100, "Continue")
PHP_HTTP_RESPONSE_CODE(101, "Switching Protocols")
PHP_HTTP_RESPONSE_CODE(102, "Processing")
PHP_HTTP_RESPONSE_CODE(200, "OK")
PHP_HTTP_RESPONSE_CODE(201, "Created")
PHP_HTTP_RESPONSE_CODE(202, "Accepted")
PHP_HTTP_RESPONSE_CODE(203, "Non-Authoritative Information")
PHP_HTTP_RESPONSE_CODE(204, "No Content")
PHP_HTTP_RESPONSE_CODE(205, "Reset Content")
PHP_HTTP_RESPONSE_CODE(206, "Partial Content")
PHP_HTTP_RESPONSE_CODE(207, "Multi-Status")
PHP_HTTP_RESPONSE_CODE(208, "Already Reported")
PHP_HTTP_RESPONSE_CODE(226, "IM Used")
PHP_HTTP_RESPONSE_CODE(300, "Multiple Choices")
PHP_HTTP_RESPONSE_CODE(301, "Moved Permanently")
PHP_HTTP_RESPONSE_CODE(302, "Found")
PHP_HTTP_RESPONSE_CODE(303, "See Other")
PHP_HTTP_RESPONSE_CODE(304, "Not Modified")
PHP_HTTP_RESPONSE_CODE(305, "Use Proxy")
PHP_HTTP_RESPONSE_CODE(307, "Temporary Redirect")
PHP_HTTP_RESPONSE_CODE(308, "Permanent Redirect")
PHP_HTTP_RESPONSE_CODE(400, "Bad Request")
PHP_HTTP_RESPONSE_CODE(401, "Unauthorized")
PHP_HTTP_RESPONSE_CODE(402, "Payment Required")
PHP_HTTP_RESPONSE_CODE(403, "Forbidden")
PHP_HTTP_RESPONSE_CODE(404, "Not Found")
PHP_HTTP_RESPONSE_CODE(405, "Method Not Allowed")
PHP_HTTP_RESPONSE_CODE(406, "Not Acceptable")
PHP_HTTP_RESPONSE_CODE(407, "Proxy Authentication Required")
PHP_HTTP_RESPONSE_CODE(408, "Request Timeout")
PHP_HTTP_RESPONSE_CODE(409, "Conflict")
PHP_HTTP_RESPONSE_CODE(410, "Gone")
PHP_HTTP_RESPONSE_CODE(411, "Length Required")
PHP_HTTP_RESPONSE_CODE(412, "Precondition Failed")
PHP_HTTP_RESPONSE_CODE(413, "Request Entity Too Large")
PHP_HTTP_RESPONSE_CODE(414, "Request URI Too Long")
PHP_HTTP_RESPONSE_CODE(415, "Unsupported Media Type")
PHP_HTTP_RESPONSE_CODE(416, "Requested Range Not Satisfiable")
PHP_HTTP_RESPONSE_CODE(417, "Expectation Failed")
PHP_HTTP_RESPONSE_CODE(422, "Unprocessible Entity")
PHP_HTTP_RESPONSE_CODE(423, "Locked")
PHP_HTTP_RESPONSE_CODE(424, "Failed Dependency")
PHP_HTTP_RESPONSE_CODE(426, "Upgrade Required")
PHP_HTTP_RESPONSE_CODE(428, "Precondition Required")
PHP_HTTP_RESPONSE_CODE(429, "Too Many Requests")
PHP_HTTP_RESPONSE_CODE(431, "Request Header Fields Too Large")
PHP_HTTP_RESPONSE_CODE(500, "Internal Server Error")
PHP_HTTP_RESPONSE_CODE(501, "Not Implemented")
PHP_HTTP_RESPONSE_CODE(502, "Bad Gateway")
PHP_HTTP_RESPONSE_CODE(503, "Service Unavailable")
PHP_HTTP_RESPONSE_CODE(504, "Gateway Timeout")
PHP_HTTP_RESPONSE_CODE(505, "HTTP Version Not Supported")
PHP_HTTP_RESPONSE_CODE(506, "Variant Also Negotiates")
PHP_HTTP_RESPONSE_CODE(507, "Insufficient Storage")
PHP_HTTP_RESPONSE_CODE(508, "Loop Detected")
PHP_HTTP_RESPONSE_CODE(510, "Not Extended")
PHP_HTTP_RESPONSE_CODE(511, "Network Authentication Required")


/*
 * Local variables:
 * tab-width: 4
 * c-basic-offset: 4
 * End:
 * vim600: noet sw=4 ts=4 fdm=marker
 * vim<600: noet sw=4 ts=4
 */
ext/http/php_http_env.h000064400000007414151730541250011203 0ustar00/*
    +--------------------------------------------------------------------+
    | PECL :: http                                                       |
    +--------------------------------------------------------------------+
    | Redistribution and use in source and binary forms, with or without |
    | modification, are permitted provided that the conditions mentioned |
    | in the accompanying LICENSE file are met.                          |
    +--------------------------------------------------------------------+
    | Copyright (c) 2004-2014, Michael Wallner <mike@php.net>            |
    +--------------------------------------------------------------------+
*/

#ifndef PHP_HTTP_ENV_H
#define PHP_HTTP_ENV_H

#include "php_http_message_body.h"
#include "php_http_version.h"

struct php_http_env_globals {
	zval *server_var;
	char *etag_mode;

	struct {
		HashTable *headers;
		php_http_message_body_t *body;
	} request;
};

typedef enum php_http_content_encoding {
	PHP_HTTP_CONTENT_ENCODING_NONE,
	PHP_HTTP_CONTENT_ENCODING_GZIP
} php_http_content_encoding_t;

typedef enum php_http_range_status {
	PHP_HTTP_RANGE_NO,
	PHP_HTTP_RANGE_OK,
	PHP_HTTP_RANGE_ERR
} php_http_range_status_t;

PHP_HTTP_API php_http_range_status_t php_http_env_get_request_ranges(HashTable *ranges, size_t entity_length, php_http_message_t *request);
PHP_HTTP_API void php_http_env_get_request_headers(HashTable *headers);
PHP_HTTP_API char *php_http_env_get_request_header(const char *name_str, size_t name_len, size_t *len, php_http_message_t *request);
PHP_HTTP_API zend_bool php_http_env_got_request_header(const char *name_str, size_t name_len, php_http_message_t *request);
PHP_HTTP_API php_http_message_body_t *php_http_env_get_request_body(void);
PHP_HTTP_API const char *php_http_env_get_request_method(php_http_message_t *request);

typedef enum php_http_content_disposition {
	PHP_HTTP_CONTENT_DISPOSITION_NONE,
	PHP_HTTP_CONTENT_DISPOSITION_INLINE,
	PHP_HTTP_CONTENT_DISPOSITION_ATTACHMENT
} php_http_content_disposition_t;

typedef enum php_http_cache_status {
	PHP_HTTP_CACHE_NO,
	PHP_HTTP_CACHE_HIT,
	PHP_HTTP_CACHE_MISS
} php_http_cache_status_t;

PHP_HTTP_API long php_http_env_get_response_code(void);
PHP_HTTP_API const char *php_http_env_get_response_status_for_code(unsigned code);
PHP_HTTP_API ZEND_RESULT_CODE php_http_env_get_response_headers(HashTable *headers_ht);
PHP_HTTP_API char *php_http_env_get_response_header(const char *name_str, size_t name_len);
PHP_HTTP_API ZEND_RESULT_CODE php_http_env_set_response_code(long http_code);
PHP_HTTP_API ZEND_RESULT_CODE php_http_env_set_response_protocol_version(php_http_version_t *v);
PHP_HTTP_API ZEND_RESULT_CODE php_http_env_set_response_header(long http_code, const char *header_str, size_t header_len, zend_bool replace);
PHP_HTTP_API ZEND_RESULT_CODE php_http_env_set_response_header_value(long http_code, const char *name_str, size_t name_len, zval *value, zend_bool replace);
PHP_HTTP_API ZEND_RESULT_CODE php_http_env_set_response_header_format(long http_code, zend_bool replace, const char *fmt, ...);
PHP_HTTP_API ZEND_RESULT_CODE php_http_env_set_response_header_va(long http_code, zend_bool replace, const char *fmt, va_list argv);

PHP_HTTP_API zval *php_http_env_get_server_var(const char *key_str, size_t key_len, zend_bool check);
PHP_HTTP_API zval *php_http_env_get_superglobal(const char *key, size_t key_len);

static inline zend_bool php_http_env_got_server_var(const char *v)
{
	return NULL != php_http_env_get_server_var(v, strlen(v), 1);
}

PHP_HTTP_API void php_http_env_reset();

PHP_HTTP_API zend_class_entry *php_http_env_get_class_entry(void);
PHP_MINIT_FUNCTION(http_env);
PHP_RSHUTDOWN_FUNCTION(http_env);

#endif

/*
 * Local variables:
 * tab-width: 4
 * c-basic-offset: 4
 * End:
 * vim600: noet sw=4 ts=4 fdm=marker
 * vim<600: noet sw=4 ts=4
 */

ext/http/php_http_message_parser.h000064400000006362151730541260013415 0ustar00/*
    +--------------------------------------------------------------------+
    | PECL :: http                                                       |
    +--------------------------------------------------------------------+
    | Redistribution and use in source and binary forms, with or without |
    | modification, are permitted provided that the conditions mentioned |
    | in the accompanying LICENSE file are met.                          |
    +--------------------------------------------------------------------+
    | Copyright (c) 2004-2014, Michael Wallner <mike@php.net>            |
    +--------------------------------------------------------------------+
*/

#ifndef PHP_HTTP_MESSAGE_PARSER_H
#define PHP_HTTP_MESSAGE_PARSER_H

#include "php_http_header_parser.h"
#include "php_http_encoding.h"
#include "php_http_message.h"

typedef enum php_http_message_parser_state {
	PHP_HTTP_MESSAGE_PARSER_STATE_FAILURE = FAILURE,
	PHP_HTTP_MESSAGE_PARSER_STATE_START = 0,
	PHP_HTTP_MESSAGE_PARSER_STATE_HEADER,
	PHP_HTTP_MESSAGE_PARSER_STATE_HEADER_DONE,
	PHP_HTTP_MESSAGE_PARSER_STATE_BODY,
	PHP_HTTP_MESSAGE_PARSER_STATE_BODY_DUMB,
	PHP_HTTP_MESSAGE_PARSER_STATE_BODY_LENGTH,
	PHP_HTTP_MESSAGE_PARSER_STATE_BODY_CHUNKED,
	PHP_HTTP_MESSAGE_PARSER_STATE_BODY_DONE,
	PHP_HTTP_MESSAGE_PARSER_STATE_UPDATE_CL,
	PHP_HTTP_MESSAGE_PARSER_STATE_DONE
} php_http_message_parser_state_t;

#define PHP_HTTP_MESSAGE_PARSER_CLEANUP			0x1
#define PHP_HTTP_MESSAGE_PARSER_DUMB_BODIES		0x2
#define PHP_HTTP_MESSAGE_PARSER_EMPTY_REDIRECTS	0x4
#define PHP_HTTP_MESSAGE_PARSER_GREEDY			0x8

typedef struct php_http_message_parser {
	php_http_header_parser_t header;
	zend_ptr_stack stack;
	size_t body_length;
	php_http_message_t *message;
	php_http_encoding_stream_t *dechunk;
	php_http_encoding_stream_t *inflate;
} php_http_message_parser_t;

PHP_HTTP_API php_http_message_parser_t *php_http_message_parser_init(php_http_message_parser_t *parser);
PHP_HTTP_API php_http_message_parser_state_t php_http_message_parser_state_is(php_http_message_parser_t *parser);
PHP_HTTP_API void php_http_message_parser_dtor(php_http_message_parser_t *parser);
PHP_HTTP_API void php_http_message_parser_free(php_http_message_parser_t **parser);
PHP_HTTP_API php_http_message_parser_state_t php_http_message_parser_parse(php_http_message_parser_t *parser, php_http_buffer_t *buffer, unsigned flags, php_http_message_t **message);
PHP_HTTP_API php_http_message_parser_state_t php_http_message_parser_parse_stream(php_http_message_parser_t *parser, php_http_buffer_t *buffer, php_stream *s, unsigned flags, php_http_message_t **message);

typedef struct php_http_message_parser_object {
	php_http_buffer_t buffer;
	php_http_message_parser_t *parser;
	zend_object zo;
} php_http_message_parser_object_t;

PHP_HTTP_API zend_class_entry *php_http_get_message_parser_class_entry(void);

PHP_MINIT_FUNCTION(http_message_parser);

zend_object *php_http_message_parser_object_new(zend_class_entry *ce);
php_http_message_parser_object_t *php_http_message_parser_object_new_ex(zend_class_entry *ce, php_http_message_parser_t *parser);
void php_http_message_parser_object_free(zend_object *object);

#endif

/*
 * Local variables:
 * tab-width: 4
 * c-basic-offset: 4
 * End:
 * vim600: noet sw=4 ts=4 fdm=marker
 * vim<600: noet sw=4 ts=4
 */

ext/http/php_http_encoding.h000064400000011202151730541260012170 0ustar00/*
    +--------------------------------------------------------------------+
    | PECL :: http                                                       |
    +--------------------------------------------------------------------+
    | Redistribution and use in source and binary forms, with or without |
    | modification, are permitted provided that the conditions mentioned |
    | in the accompanying LICENSE file are met.                          |
    +--------------------------------------------------------------------+
    | Copyright (c) 2004-2014, Michael Wallner <mike@php.net>            |
    +--------------------------------------------------------------------+
*/

#ifndef PHP_HTTP_ENCODING_H
#define PHP_HTTP_ENCODING_H

extern PHP_MINIT_FUNCTION(http_encoding);

#define PHP_HTTP_ENCODING_STREAM_PERSISTENT	0x01000000
#define PHP_HTTP_ENCODING_STREAM_DIRTY		0x02000000

#define PHP_HTTP_ENCODING_STREAM_FLUSH_NONE	0x00000000
#define PHP_HTTP_ENCODING_STREAM_FLUSH_SYNC 0x00100000
#define PHP_HTTP_ENCODING_STREAM_FLUSH_FULL 0x00200000

#define PHP_HTTP_ENCODING_STREAM_FLUSH_FLAG(flags, full, sync, none) \
	(((flags) & PHP_HTTP_ENCODING_STREAM_FLUSH_FULL) ? (full) : \
	(((flags) & PHP_HTTP_ENCODING_STREAM_FLUSH_SYNC) ? (sync) : (none)))

typedef struct php_http_encoding_stream php_http_encoding_stream_t;

typedef php_http_encoding_stream_t *(*php_http_encoding_stream_init_func_t)(php_http_encoding_stream_t *s);
typedef php_http_encoding_stream_t *(*php_http_encoding_stream_copy_func_t)(php_http_encoding_stream_t *from, php_http_encoding_stream_t *to);
typedef ZEND_RESULT_CODE (*php_http_encoding_stream_update_func_t)(php_http_encoding_stream_t *s, const char *in_str, size_t in_len, char **out_str, size_t *out_len);
typedef ZEND_RESULT_CODE (*php_http_encoding_stream_flush_func_t)(php_http_encoding_stream_t *s, char **out_str, size_t *out_len);
typedef zend_bool (*php_http_encoding_stream_done_func_t)(php_http_encoding_stream_t *s);
typedef ZEND_RESULT_CODE (*php_http_encoding_stream_finish_func_t)(php_http_encoding_stream_t *s, char **out_str, size_t *out_len);
typedef void (*php_http_encoding_stream_dtor_func_t)(php_http_encoding_stream_t *s);

typedef struct php_http_encoding_stream_ops {
	php_http_encoding_stream_init_func_t init;
	php_http_encoding_stream_copy_func_t copy;
	php_http_encoding_stream_update_func_t update;
	php_http_encoding_stream_flush_func_t flush;
	php_http_encoding_stream_done_func_t done;
	php_http_encoding_stream_finish_func_t finish;
	php_http_encoding_stream_dtor_func_t dtor;
} php_http_encoding_stream_ops_t;

struct php_http_encoding_stream {
	unsigned flags;
	void *ctx;
	php_http_encoding_stream_ops_t *ops;
};


PHP_HTTP_API php_http_encoding_stream_t *php_http_encoding_stream_init(php_http_encoding_stream_t *s, php_http_encoding_stream_ops_t *ops, unsigned flags);
PHP_HTTP_API php_http_encoding_stream_t *php_http_encoding_stream_copy(php_http_encoding_stream_t *from, php_http_encoding_stream_t *to);
PHP_HTTP_API ZEND_RESULT_CODE php_http_encoding_stream_reset(php_http_encoding_stream_t **s);
PHP_HTTP_API ZEND_RESULT_CODE php_http_encoding_stream_update(php_http_encoding_stream_t *s, const char *in_str, size_t in_len, char **out_str, size_t *out_len);
PHP_HTTP_API ZEND_RESULT_CODE php_http_encoding_stream_flush(php_http_encoding_stream_t *s, char **out_str, size_t *len);
PHP_HTTP_API zend_bool php_http_encoding_stream_done(php_http_encoding_stream_t *s);
PHP_HTTP_API ZEND_RESULT_CODE php_http_encoding_stream_finish(php_http_encoding_stream_t *s, char **out_str, size_t *len);
PHP_HTTP_API void php_http_encoding_stream_dtor(php_http_encoding_stream_t *s);
PHP_HTTP_API void php_http_encoding_stream_free(php_http_encoding_stream_t **s);

PHP_HTTP_API php_http_encoding_stream_ops_t *php_http_encoding_stream_get_dechunk_ops(void);
PHP_HTTP_API const char *php_http_encoding_dechunk(const char *encoded, size_t encoded_len, char **decoded, size_t *decoded_len);
PHP_HTTP_API zend_class_entry *php_http_get_dechunk_stream_class_entry(void);

typedef struct php_http_encoding_stream_object {
	php_http_encoding_stream_t *stream;
	zend_object zo;
} php_http_encoding_stream_object_t;

PHP_HTTP_API zend_class_entry *php_http_get_encoding_stream_class_entry(void);

zend_object *php_http_encoding_stream_object_new(zend_class_entry *ce);
php_http_encoding_stream_object_t *php_http_encoding_stream_object_new_ex(zend_class_entry *ce, php_http_encoding_stream_t *s);
zend_object *php_http_encoding_stream_object_clone(zend_object *object);
void php_http_encoding_stream_object_free(zend_object *object);

#endif

/*
 * Local variables:
 * tab-width: 4
 * c-basic-offset: 4
 * End:
 * vim600: noet sw=4 ts=4 fdm=marker
 * vim<600: noet sw=4 ts=4
 */
ext/http/php_http_utf8.h000064400000051057151730541270011305 0ustar00/*
    +--------------------------------------------------------------------+
    | PECL :: http                                                       |
    +--------------------------------------------------------------------+
    | Redistribution and use in source and binary forms, with or without |
    | modification, are permitted provided that the conditions mentioned |
    | in the accompanying LICENSE file are met.                          |
    +--------------------------------------------------------------------+
    | Copyright (c) 2004-2014, Michael Wallner <mike@php.net>            |
    +--------------------------------------------------------------------+
*/

#ifndef PHP_HTTP_UTF8_H
#define PHP_HTTP_UTF8_H

static const unsigned char utf8_mblen[256] = {
    1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
    1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
    1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
    1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
    1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
    1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
    1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
    1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
    1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
    1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
    1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
    1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
    2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,
    2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,
    3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,
    4,4,4,4,4,4,4,4,5,5,5,5,6,6,6,6
};

static const unsigned char utf8_mask[] = {
		0, 0x7f, 0x1f, 0x0f, 0x07, 0x03, 0x01
};

typedef struct utf8_range {
	const unsigned int start;
	const unsigned int end;
} utf8_range_t;

/* BEGIN::UTF8TABLE */
static const utf8_range_t utf8_ranges[] = {
	{0x00000041, 0x0000005A}, {0x00000061, 0x0000007A}, {0x000000C0, 0x000000D6},
	{0x000000D8, 0x000000F6}, {0x000000F8, 0x000002C1}, {0x000002C6, 0x000002D1},
	{0x000002E0, 0x000002E4}, {0x00000370, 0x00000374}, {0x00000376, 0x00000377},
	{0x0000037A, 0x0000037D}, {0x00000388, 0x0000038A}, {0x0000038E, 0x000003A1},
	{0x000003A3, 0x000003F5}, {0x000003F7, 0x00000481}, {0x0000048A, 0x0000052F},
	{0x00000531, 0x00000556}, {0x00000561, 0x00000587}, {0x000005B0, 0x000005BD},
	{0x000005C1, 0x000005C2}, {0x000005C4, 0x000005C5}, {0x000005D0, 0x000005EA},
	{0x000005F0, 0x000005F2}, {0x00000610, 0x0000061A}, {0x00000620, 0x00000657},
	{0x00000659, 0x00000669}, {0x0000066E, 0x000006D3}, {0x000006D5, 0x000006DC},
	{0x000006E1, 0x000006E8}, {0x000006ED, 0x000006FC}, {0x00000710, 0x0000073F},
	{0x0000074D, 0x000007B1}, {0x000007C0, 0x000007EA}, {0x000007F4, 0x000007F5},
	{0x00000800, 0x00000817}, {0x0000081A, 0x0000082C}, {0x00000840, 0x00000858},
	{0x00000860, 0x0000086A}, {0x000008A0, 0x000008B4}, {0x000008B6, 0x000008BD},
	{0x000008D4, 0x000008DF}, {0x000008E3, 0x000008E9}, {0x000008F0, 0x0000093B},
	{0x0000093D, 0x0000094C}, {0x0000094E, 0x00000950}, {0x00000955, 0x00000963},
	{0x00000966, 0x0000096F}, {0x00000971, 0x00000983}, {0x00000985, 0x0000098C},
	{0x0000098F, 0x00000990}, {0x00000993, 0x000009A8}, {0x000009AA, 0x000009B0},
	{0x000009B6, 0x000009B9}, {0x000009BD, 0x000009C4}, {0x000009C7, 0x000009C8},
	{0x000009CB, 0x000009CC}, {0x000009DC, 0x000009DD}, {0x000009DF, 0x000009E3},
	{0x000009E6, 0x000009F1}, {0x00000A01, 0x00000A03}, {0x00000A05, 0x00000A0A},
	{0x00000A0F, 0x00000A10}, {0x00000A13, 0x00000A28}, {0x00000A2A, 0x00000A30},
	{0x00000A32, 0x00000A33}, {0x00000A35, 0x00000A36}, {0x00000A38, 0x00000A39},
	{0x00000A3E, 0x00000A42}, {0x00000A47, 0x00000A48}, {0x00000A4B, 0x00000A4C},
	{0x00000A59, 0x00000A5C}, {0x00000A66, 0x00000A75}, {0x00000A81, 0x00000A83},
	{0x00000A85, 0x00000A8D}, {0x00000A8F, 0x00000A91}, {0x00000A93, 0x00000AA8},
	{0x00000AAA, 0x00000AB0}, {0x00000AB2, 0x00000AB3}, {0x00000AB5, 0x00000AB9},
	{0x00000ABD, 0x00000AC5}, {0x00000AC7, 0x00000AC9}, {0x00000ACB, 0x00000ACC},
	{0x00000AE0, 0x00000AE3}, {0x00000AE6, 0x00000AEF}, {0x00000AF9, 0x00000AFC},
	{0x00000B01, 0x00000B03}, {0x00000B05, 0x00000B0C}, {0x00000B0F, 0x00000B10},
	{0x00000B13, 0x00000B28}, {0x00000B2A, 0x00000B30}, {0x00000B32, 0x00000B33},
	{0x00000B35, 0x00000B39}, {0x00000B3D, 0x00000B44}, {0x00000B47, 0x00000B48},
	{0x00000B4B, 0x00000B4C}, {0x00000B56, 0x00000B57}, {0x00000B5C, 0x00000B5D},
	{0x00000B5F, 0x00000B63}, {0x00000B66, 0x00000B6F}, {0x00000B82, 0x00000B83},
	{0x00000B85, 0x00000B8A}, {0x00000B8E, 0x00000B90}, {0x00000B92, 0x00000B95},
	{0x00000B99, 0x00000B9A}, {0x00000B9E, 0x00000B9F}, {0x00000BA3, 0x00000BA4},
	{0x00000BA8, 0x00000BAA}, {0x00000BAE, 0x00000BB9}, {0x00000BBE, 0x00000BC2},
	{0x00000BC6, 0x00000BC8}, {0x00000BCA, 0x00000BCC}, {0x00000BE6, 0x00000BEF},
	{0x00000C00, 0x00000C03}, {0x00000C05, 0x00000C0C}, {0x00000C0E, 0x00000C10},
	{0x00000C12, 0x00000C28}, {0x00000C2A, 0x00000C39}, {0x00000C3D, 0x00000C44},
	{0x00000C46, 0x00000C48}, {0x00000C4A, 0x00000C4C}, {0x00000C55, 0x00000C56},
	{0x00000C58, 0x00000C5A}, {0x00000C60, 0x00000C63}, {0x00000C66, 0x00000C6F},
	{0x00000C80, 0x00000C83}, {0x00000C85, 0x00000C8C}, {0x00000C8E, 0x00000C90},
	{0x00000C92, 0x00000CA8}, {0x00000CAA, 0x00000CB3}, {0x00000CB5, 0x00000CB9},
	{0x00000CBD, 0x00000CC4}, {0x00000CC6, 0x00000CC8}, {0x00000CCA, 0x00000CCC},
	{0x00000CD5, 0x00000CD6}, {0x00000CE0, 0x00000CE3}, {0x00000CE6, 0x00000CEF},
	{0x00000CF1, 0x00000CF2}, {0x00000D00, 0x00000D03}, {0x00000D05, 0x00000D0C},
	{0x00000D0E, 0x00000D10}, {0x00000D12, 0x00000D3A}, {0x00000D3D, 0x00000D44},
	{0x00000D46, 0x00000D48}, {0x00000D4A, 0x00000D4C}, {0x00000D54, 0x00000D57},
	{0x00000D5F, 0x00000D63}, {0x00000D66, 0x00000D6F}, {0x00000D7A, 0x00000D7F},
	{0x00000D82, 0x00000D83}, {0x00000D85, 0x00000D96}, {0x00000D9A, 0x00000DB1},
	{0x00000DB3, 0x00000DBB}, {0x00000DC0, 0x00000DC6}, {0x00000DCF, 0x00000DD4},
	{0x00000DD8, 0x00000DDF}, {0x00000DE6, 0x00000DEF}, {0x00000DF2, 0x00000DF3},
	{0x00000E01, 0x00000E3A}, {0x00000E40, 0x00000E46}, {0x00000E50, 0x00000E59},
	{0x00000E81, 0x00000E82}, {0x00000E87, 0x00000E88}, {0x00000E94, 0x00000E97},
	{0x00000E99, 0x00000E9F}, {0x00000EA1, 0x00000EA3}, {0x00000EAA, 0x00000EAB},
	{0x00000EAD, 0x00000EB9}, {0x00000EBB, 0x00000EBD}, {0x00000EC0, 0x00000EC4},
	{0x00000ED0, 0x00000ED9}, {0x00000EDC, 0x00000EDF}, {0x00000F20, 0x00000F29},
	{0x00000F40, 0x00000F47}, {0x00000F49, 0x00000F6C}, {0x00000F71, 0x00000F81},
	{0x00000F88, 0x00000F97}, {0x00000F99, 0x00000FBC}, {0x00001000, 0x00001036},
	{0x0000103B, 0x00001049}, {0x00001050, 0x00001062}, {0x00001065, 0x00001068},
	{0x0000106E, 0x00001086}, {0x00001090, 0x00001099}, {0x0000109C, 0x0000109D},
	{0x000010A0, 0x000010C5}, {0x000010D0, 0x000010FA}, {0x000010FC, 0x00001248},
	{0x0000124A, 0x0000124D}, {0x00001250, 0x00001256}, {0x0000125A, 0x0000125D},
	{0x00001260, 0x00001288}, {0x0000128A, 0x0000128D}, {0x00001290, 0x000012B0},
	{0x000012B2, 0x000012B5}, {0x000012B8, 0x000012BE}, {0x000012C2, 0x000012C5},
	{0x000012C8, 0x000012D6}, {0x000012D8, 0x00001310}, {0x00001312, 0x00001315},
	{0x00001318, 0x0000135A}, {0x00001380, 0x0000138F}, {0x000013A0, 0x000013F5},
	{0x000013F8, 0x000013FD}, {0x00001401, 0x0000166C}, {0x0000166F, 0x0000167F},
	{0x00001681, 0x0000169A}, {0x000016A0, 0x000016EA}, {0x000016EE, 0x000016F8},
	{0x00001700, 0x0000170C}, {0x0000170E, 0x00001713}, {0x00001720, 0x00001733},
	{0x00001740, 0x00001753}, {0x00001760, 0x0000176C}, {0x0000176E, 0x00001770},
	{0x00001772, 0x00001773}, {0x00001780, 0x000017B3}, {0x000017B6, 0x000017C8},
	{0x000017E0, 0x000017E9}, {0x00001810, 0x00001819}, {0x00001820, 0x00001877},
	{0x00001880, 0x000018AA}, {0x000018B0, 0x000018F5}, {0x00001900, 0x0000191E},
	{0x00001920, 0x0000192B}, {0x00001930, 0x00001938}, {0x00001946, 0x0000196D},
	{0x00001970, 0x00001974}, {0x00001980, 0x000019AB}, {0x000019B0, 0x000019C9},
	{0x000019D0, 0x000019D9}, {0x00001A00, 0x00001A1B}, {0x00001A20, 0x00001A5E},
	{0x00001A61, 0x00001A74}, {0x00001A80, 0x00001A89}, {0x00001A90, 0x00001A99},
	{0x00001B00, 0x00001B33}, {0x00001B35, 0x00001B43}, {0x00001B45, 0x00001B4B},
	{0x00001B50, 0x00001B59}, {0x00001B80, 0x00001BA9}, {0x00001BAC, 0x00001BE5},
	{0x00001BE7, 0x00001BF1}, {0x00001C00, 0x00001C35}, {0x00001C40, 0x00001C49},
	{0x00001C4D, 0x00001C7D}, {0x00001C80, 0x00001C88}, {0x00001CE9, 0x00001CEC},
	{0x00001CEE, 0x00001CF3}, {0x00001CF5, 0x00001CF6}, {0x00001D00, 0x00001DBF},
	{0x00001DE7, 0x00001DF4}, {0x00001E00, 0x00001F15}, {0x00001F18, 0x00001F1D},
	{0x00001F20, 0x00001F45}, {0x00001F48, 0x00001F4D}, {0x00001F50, 0x00001F57},
	{0x00001F5F, 0x00001F7D}, {0x00001F80, 0x00001FB4}, {0x00001FB6, 0x00001FBC},
	{0x00001FC2, 0x00001FC4}, {0x00001FC6, 0x00001FCC}, {0x00001FD0, 0x00001FD3},
	{0x00001FD6, 0x00001FDB}, {0x00001FE0, 0x00001FEC}, {0x00001FF2, 0x00001FF4},
	{0x00001FF6, 0x00001FFC}, {0x00002090, 0x0000209C}, {0x0000210A, 0x00002113},
	{0x00002119, 0x0000211D}, {0x0000212A, 0x0000212D}, {0x0000212F, 0x00002139},
	{0x0000213C, 0x0000213F}, {0x00002145, 0x00002149}, {0x00002160, 0x00002188},
	{0x000024B6, 0x000024E9}, {0x00002C00, 0x00002C2E}, {0x00002C30, 0x00002C5E},
	{0x00002C60, 0x00002CE4}, {0x00002CEB, 0x00002CEE}, {0x00002CF2, 0x00002CF3},
	{0x00002D00, 0x00002D25}, {0x00002D30, 0x00002D67}, {0x00002D80, 0x00002D96},
	{0x00002DA0, 0x00002DA6}, {0x00002DA8, 0x00002DAE}, {0x00002DB0, 0x00002DB6},
	{0x00002DB8, 0x00002DBE}, {0x00002DC0, 0x00002DC6}, {0x00002DC8, 0x00002DCE},
	{0x00002DD0, 0x00002DD6}, {0x00002DD8, 0x00002DDE}, {0x00002DE0, 0x00002DFF},
	{0x00003005, 0x00003007}, {0x00003021, 0x00003029}, {0x00003031, 0x00003035},
	{0x00003038, 0x0000303C}, {0x00003041, 0x00003096}, {0x0000309D, 0x0000309F},
	{0x000030A1, 0x000030FA}, {0x000030FC, 0x000030FF}, {0x00003105, 0x0000312E},
	{0x00003131, 0x0000318E}, {0x000031A0, 0x000031BA}, {0x000031F0, 0x000031FF},
	{0x00003400, 0x00004DB5}, {0x00004E00, 0x00009FEA}, {0x0000A000, 0x0000A48C},
	{0x0000A4D0, 0x0000A4FD}, {0x0000A500, 0x0000A60C}, {0x0000A610, 0x0000A62B},
	{0x0000A640, 0x0000A66E}, {0x0000A674, 0x0000A67B}, {0x0000A67F, 0x0000A6EF},
	{0x0000A717, 0x0000A71F}, {0x0000A722, 0x0000A788}, {0x0000A78B, 0x0000A7AE},
	{0x0000A7B0, 0x0000A7B7}, {0x0000A7F7, 0x0000A801}, {0x0000A803, 0x0000A805},
	{0x0000A807, 0x0000A80A}, {0x0000A80C, 0x0000A827}, {0x0000A840, 0x0000A873},
	{0x0000A880, 0x0000A8C3}, {0x0000A8D0, 0x0000A8D9}, {0x0000A8F2, 0x0000A8F7},
	{0x0000A900, 0x0000A92A}, {0x0000A930, 0x0000A952}, {0x0000A960, 0x0000A97C},
	{0x0000A980, 0x0000A9B2}, {0x0000A9B4, 0x0000A9BF}, {0x0000A9CF, 0x0000A9D9},
	{0x0000A9E0, 0x0000A9E4}, {0x0000A9E6, 0x0000A9FE}, {0x0000AA00, 0x0000AA36},
	{0x0000AA40, 0x0000AA4D}, {0x0000AA50, 0x0000AA59}, {0x0000AA60, 0x0000AA76},
	{0x0000AA7E, 0x0000AABE}, {0x0000AADB, 0x0000AADD}, {0x0000AAE0, 0x0000AAEF},
	{0x0000AAF2, 0x0000AAF5}, {0x0000AB01, 0x0000AB06}, {0x0000AB09, 0x0000AB0E},
	{0x0000AB11, 0x0000AB16}, {0x0000AB20, 0x0000AB26}, {0x0000AB28, 0x0000AB2E},
	{0x0000AB30, 0x0000AB5A}, {0x0000AB5C, 0x0000AB65}, {0x0000AB70, 0x0000ABEA},
	{0x0000ABF0, 0x0000ABF9}, {0x0000AC00, 0x0000D7A3}, {0x0000D7B0, 0x0000D7C6},
	{0x0000D7CB, 0x0000D7FB}, {0x0000F900, 0x0000FA6D}, {0x0000FA70, 0x0000FAD9},
	{0x0000FB00, 0x0000FB06}, {0x0000FB13, 0x0000FB17}, {0x0000FB1D, 0x0000FB28},
	{0x0000FB2A, 0x0000FB36}, {0x0000FB38, 0x0000FB3C}, {0x0000FB40, 0x0000FB41},
	{0x0000FB43, 0x0000FB44}, {0x0000FB46, 0x0000FBB1}, {0x0000FBD3, 0x0000FD3D},
	{0x0000FD50, 0x0000FD8F}, {0x0000FD92, 0x0000FDC7}, {0x0000FDF0, 0x0000FDFB},
	{0x0000FE70, 0x0000FE74}, {0x0000FE76, 0x0000FEFC}, {0x0000FF10, 0x0000FF19},
	{0x0000FF21, 0x0000FF3A}, {0x0000FF41, 0x0000FF5A}, {0x0000FF66, 0x0000FFBE},
	{0x0000FFC2, 0x0000FFC7}, {0x0000FFCA, 0x0000FFCF}, {0x0000FFD2, 0x0000FFD7},
	{0x0000FFDA, 0x0000FFDC}, {0x00010000, 0x0001000B}, {0x0001000D, 0x00010026},
	{0x00010028, 0x0001003A}, {0x0001003C, 0x0001003D}, {0x0001003F, 0x0001004D},
	{0x00010050, 0x0001005D}, {0x00010080, 0x000100FA}, {0x00010140, 0x00010174},
	{0x00010280, 0x0001029C}, {0x000102A0, 0x000102D0}, {0x00010300, 0x0001031F},
	{0x0001032D, 0x0001034A}, {0x00010350, 0x0001037A}, {0x00010380, 0x0001039D},
	{0x000103A0, 0x000103C3}, {0x000103C8, 0x000103CF}, {0x000103D1, 0x000103D5},
	{0x00010400, 0x0001049D}, {0x000104A0, 0x000104A9}, {0x000104B0, 0x000104D3},
	{0x000104D8, 0x000104FB}, {0x00010500, 0x00010527}, {0x00010530, 0x00010563},
	{0x00010600, 0x00010736}, {0x00010740, 0x00010755}, {0x00010760, 0x00010767},
	{0x00010800, 0x00010805}, {0x0001080A, 0x00010835}, {0x00010837, 0x00010838},
	{0x0001083F, 0x00010855}, {0x00010860, 0x00010876}, {0x00010880, 0x0001089E},
	{0x000108E0, 0x000108F2}, {0x000108F4, 0x000108F5}, {0x00010900, 0x00010915},
	{0x00010920, 0x00010939}, {0x00010980, 0x000109B7}, {0x000109BE, 0x000109BF},
	{0x00010A00, 0x00010A03}, {0x00010A05, 0x00010A06}, {0x00010A0C, 0x00010A13},
	{0x00010A15, 0x00010A17}, {0x00010A19, 0x00010A33}, {0x00010A60, 0x00010A7C},
	{0x00010A80, 0x00010A9C}, {0x00010AC0, 0x00010AC7}, {0x00010AC9, 0x00010AE4},
	{0x00010B00, 0x00010B35}, {0x00010B40, 0x00010B55}, {0x00010B60, 0x00010B72},
	{0x00010B80, 0x00010B91}, {0x00010C00, 0x00010C48}, {0x00010C80, 0x00010CB2},
	{0x00010CC0, 0x00010CF2}, {0x00011000, 0x00011045}, {0x00011066, 0x0001106F},
	{0x00011082, 0x000110B8}, {0x000110D0, 0x000110E8}, {0x000110F0, 0x000110F9},
	{0x00011100, 0x00011132}, {0x00011136, 0x0001113F}, {0x00011150, 0x00011172},
	{0x00011180, 0x000111BF}, {0x000111C1, 0x000111C4}, {0x000111D0, 0x000111DA},
	{0x00011200, 0x00011211}, {0x00011213, 0x00011234}, {0x00011280, 0x00011286},
	{0x0001128A, 0x0001128D}, {0x0001128F, 0x0001129D}, {0x0001129F, 0x000112A8},
	{0x000112B0, 0x000112E8}, {0x000112F0, 0x000112F9}, {0x00011300, 0x00011303},
	{0x00011305, 0x0001130C}, {0x0001130F, 0x00011310}, {0x00011313, 0x00011328},
	{0x0001132A, 0x00011330}, {0x00011332, 0x00011333}, {0x00011335, 0x00011339},
	{0x0001133D, 0x00011344}, {0x00011347, 0x00011348}, {0x0001134B, 0x0001134C},
	{0x0001135D, 0x00011363}, {0x00011400, 0x00011441}, {0x00011443, 0x00011445},
	{0x00011447, 0x0001144A}, {0x00011450, 0x00011459}, {0x00011480, 0x000114C1},
	{0x000114C4, 0x000114C5}, {0x000114D0, 0x000114D9}, {0x00011580, 0x000115B5},
	{0x000115B8, 0x000115BE}, {0x000115D8, 0x000115DD}, {0x00011600, 0x0001163E},
	{0x00011650, 0x00011659}, {0x00011680, 0x000116B5}, {0x000116C0, 0x000116C9},
	{0x00011700, 0x00011719}, {0x0001171D, 0x0001172A}, {0x00011730, 0x00011739},
	{0x000118A0, 0x000118E9}, {0x00011A00, 0x00011A32}, {0x00011A35, 0x00011A3E},
	{0x00011A50, 0x00011A83}, {0x00011A86, 0x00011A97}, {0x00011AC0, 0x00011AF8},
	{0x00011C00, 0x00011C08}, {0x00011C0A, 0x00011C36}, {0x00011C38, 0x00011C3E},
	{0x00011C50, 0x00011C59}, {0x00011C72, 0x00011C8F}, {0x00011C92, 0x00011CA7},
	{0x00011CA9, 0x00011CB6}, {0x00011D00, 0x00011D06}, {0x00011D08, 0x00011D09},
	{0x00011D0B, 0x00011D36}, {0x00011D3C, 0x00011D3D}, {0x00011D3F, 0x00011D41},
	{0x00011D46, 0x00011D47}, {0x00011D50, 0x00011D59}, {0x00012000, 0x00012399},
	{0x00012400, 0x0001246E}, {0x00012480, 0x00012543}, {0x00013000, 0x0001342E},
	{0x00014400, 0x00014646}, {0x00016800, 0x00016A38}, {0x00016A40, 0x00016A5E},
	{0x00016A60, 0x00016A69}, {0x00016AD0, 0x00016AED}, {0x00016B00, 0x00016B36},
	{0x00016B40, 0x00016B43}, {0x00016B50, 0x00016B59}, {0x00016B63, 0x00016B77},
	{0x00016B7D, 0x00016B8F}, {0x00016F00, 0x00016F44}, {0x00016F50, 0x00016F7E},
	{0x00016F93, 0x00016F9F}, {0x00016FE0, 0x00016FE1}, {0x00017000, 0x000187EC},
	{0x00018800, 0x00018AF2}, {0x0001B000, 0x0001B11E}, {0x0001B170, 0x0001B2FB},
	{0x0001BC00, 0x0001BC6A}, {0x0001BC70, 0x0001BC7C}, {0x0001BC80, 0x0001BC88},
	{0x0001BC90, 0x0001BC99}, {0x0001D400, 0x0001D454}, {0x0001D456, 0x0001D49C},
	{0x0001D49E, 0x0001D49F}, {0x0001D4A5, 0x0001D4A6}, {0x0001D4A9, 0x0001D4AC},
	{0x0001D4AE, 0x0001D4B9}, {0x0001D4BD, 0x0001D4C3}, {0x0001D4C5, 0x0001D505},
	{0x0001D507, 0x0001D50A}, {0x0001D50D, 0x0001D514}, {0x0001D516, 0x0001D51C},
	{0x0001D51E, 0x0001D539}, {0x0001D53B, 0x0001D53E}, {0x0001D540, 0x0001D544},
	{0x0001D54A, 0x0001D550}, {0x0001D552, 0x0001D6A5}, {0x0001D6A8, 0x0001D6C0},
	{0x0001D6C2, 0x0001D6DA}, {0x0001D6DC, 0x0001D6FA}, {0x0001D6FC, 0x0001D714},
	{0x0001D716, 0x0001D734}, {0x0001D736, 0x0001D74E}, {0x0001D750, 0x0001D76E},
	{0x0001D770, 0x0001D788}, {0x0001D78A, 0x0001D7A8}, {0x0001D7AA, 0x0001D7C2},
	{0x0001D7C4, 0x0001D7CB}, {0x0001D7CE, 0x0001D7FF}, {0x0001E000, 0x0001E006},
	{0x0001E008, 0x0001E018}, {0x0001E01B, 0x0001E021}, {0x0001E023, 0x0001E024},
	{0x0001E026, 0x0001E02A}, {0x0001E800, 0x0001E8C4}, {0x0001E900, 0x0001E943},
	{0x0001E950, 0x0001E959}, {0x0001EE00, 0x0001EE03}, {0x0001EE05, 0x0001EE1F},
	{0x0001EE21, 0x0001EE22}, {0x0001EE29, 0x0001EE32}, {0x0001EE34, 0x0001EE37},
	{0x0001EE4D, 0x0001EE4F}, {0x0001EE51, 0x0001EE52}, {0x0001EE61, 0x0001EE62},
	{0x0001EE67, 0x0001EE6A}, {0x0001EE6C, 0x0001EE72}, {0x0001EE74, 0x0001EE77},
	{0x0001EE79, 0x0001EE7C}, {0x0001EE80, 0x0001EE89}, {0x0001EE8B, 0x0001EE9B},
	{0x0001EEA1, 0x0001EEA3}, {0x0001EEA5, 0x0001EEA9}, {0x0001EEAB, 0x0001EEBB},
	{0x0001F130, 0x0001F149}, {0x0001F150, 0x0001F169}, {0x0001F170, 0x0001F189},
	{0x00020000, 0x0002A6D6}, {0x0002A700, 0x0002B734}, {0x0002B740, 0x0002B81D},
	{0x0002B820, 0x0002CEA1}, {0x0002CEB0, 0x0002EBE0}, {0x0002F800, 0x0002FA1D}
};

static const unsigned utf8_chars[] = {
	0x000000AA, 0x000000B5, 0x000000BA, 0x000002EC, 0x000002EE, 0x00000345,
	0x0000037F, 0x00000386, 0x0000038C, 0x00000559, 0x000005BF, 0x000005C7,
	0x000006FF, 0x000007FA, 0x000009B2, 0x000009CE, 0x000009D7, 0x000009FC,
	0x00000A51, 0x00000A5E, 0x00000AD0, 0x00000B71, 0x00000B9C, 0x00000BD0,
	0x00000BD7, 0x00000CDE, 0x00000D4E, 0x00000DBD, 0x00000DD6, 0x00000E4D,
	0x00000E84, 0x00000E8A, 0x00000E8D, 0x00000EA5, 0x00000EA7, 0x00000EC6,
	0x00000ECD, 0x00000F00, 0x00001038, 0x0000108E, 0x000010C7, 0x000010CD,
	0x00001258, 0x000012C0, 0x0000135F, 0x000017D7, 0x000017DC, 0x00001AA7,
	0x00001F59, 0x00001F5B, 0x00001F5D, 0x00001FBE, 0x00002071, 0x0000207F,
	0x00002102, 0x00002107, 0x00002115, 0x00002124, 0x00002126, 0x00002128,
	0x0000214E, 0x00002D27, 0x00002D2D, 0x00002D6F, 0x00002E2F, 0x0000A8C5,
	0x0000A8FB, 0x0000A8FD, 0x0000AA7A, 0x0000AAC0, 0x0000AAC2, 0x0000FB3E,
	0x00010808, 0x0001083C, 0x00011176, 0x000111DC, 0x00011237, 0x0001123E,
	0x00011288, 0x00011350, 0x00011357, 0x000114C7, 0x00011640, 0x00011644,
	0x000118FF, 0x00011C40, 0x00011D3A, 0x00011D43, 0x0001BC9E, 0x0001D4A2,
	0x0001D4BB, 0x0001D546, 0x0001E947, 0x0001EE24, 0x0001EE27, 0x0001EE39,
	0x0001EE3B, 0x0001EE42, 0x0001EE47, 0x0001EE49, 0x0001EE4B, 0x0001EE54,
	0x0001EE57, 0x0001EE59, 0x0001EE5B, 0x0001EE5D, 0x0001EE5F, 0x0001EE64,
	0x0001EE7E
};

/* END::UTF8TABLE */

static inline size_t utf8towc(unsigned *wc, const unsigned char *uc, size_t len)
{
	unsigned char ub = utf8_mblen[*uc];

	if (!ub || ub > len || ub > 4) {
		return 0;
	}

	*wc = *uc & utf8_mask[ub];

	switch (ub) {
	case 4:
		if ((uc[1] & 0xc0) != 0x80) {
			return 0;
		}
		*wc <<= 6;
		*wc += *++uc & 0x3f;
		/* no break */
	case 3:
		if ((uc[1] & 0xc0) != 0x80) {
			return 0;
		}
		*wc <<= 6;
		*wc += *++uc & 0x3f;
		/* no break */
	case 2:
		if ((uc[1] & 0xc0) != 0x80) {
			return 0;
		}
		*wc <<= 6;
		*wc += *++uc & 0x3f;
		/* no break */
	case 1:
		break;

	default:
		return 0;
	}

	return ub;
}

static inline zend_bool isualpha(unsigned ch)
{
	unsigned hi = sizeof(utf8_ranges)/sizeof(utf8_ranges[0])-1,
			cur = hi/2, lo = 0, prev;

#undef u
#define u (utf8_ranges[cur])

	do {
#if 0
		fprintf(stderr, "=> cur=%u lo=%u hi=%u (%u in %u-%u)\n", cur, lo, hi, ch, u.start, u.end);
#endif
		if (u.start <= ch && u.end >= ch) {
			return 1;
		}

		prev = cur;

		if (u.start > ch) {
			hi = cur;
			cur -= (cur - lo) / 2;
		} else if ((u.end && u.end < ch) || (!u.end && u.start < ch)) {
			lo = cur;
			cur += (hi - cur) / 2;
		} else {
			break;
		}

	} while (cur != prev);

#undef u
#define u (utf8_chars[cur])

	hi = sizeof(utf8_chars)/sizeof(utf8_chars[0]);
	cur = hi/2;
	lo = 0;

	do {
#if 0
		fprintf(stderr, "=> cur=%u lo=%u hi=%u (%u is %u)\n", cur, lo, hi, ch, u);
#endif
		if (u == ch) {
			return 1;
		}

		prev = cur;

		if (u > ch) {
			hi = cur;
			cur -= (cur - lo) / 2;
		} else {
			lo = cur;
			cur += (hi - cur) / 2;
		}
	} while (cur != prev);

#undef u

	return 0;
}

static inline zend_bool isualnum(unsigned ch)
{
	/* digits */
	if (ch >= 0x30 && ch <= 0x39) {
		return 1;
	}
	return isualpha(ch);
}

static inline size_t wctoutf16(unsigned short u16[2], unsigned wc)
{
	if (wc > 0x10ffff || (wc >= 0xd800 && wc <= 0xdfff)) {
		return 0;
	}

	if (wc <= 0xffff) {
		u16[0] = (unsigned short) wc;
		return 1;
	}

	wc -= 0x10000;
	u16[0] = (unsigned short) ((wc >> 10) + 0xd800);
	u16[1] = (unsigned short) ((wc & 0x3ff) + 0xdc00);
	return 2;
}

static inline size_t utf16towc(unsigned *wc, unsigned short *u16_str, size_t u16_len)
{
	if (u16_len < 1) {
		return 0;
	}
	if (u16_str[0] - 0xd800 >= 0x800) {
		*wc = u16_str[0];
		return 1;
	}
	if (u16_len < 2 || (u16_str[0] & 0xfffffc00) != 0xd800 || (u16_str[1] & 0xfffffc00) != 0xdc00) {
		return 0;
	}
	*wc = (u16_str[0] << 10) + u16_str[1] - 0x35fdc00;
	return 2;
}

#endif	/* PHP_HTTP_UTF8_H */

/*
 * Local variables:
 * tab-width: 4
 * c-basic-offset: 4
 * End:
 * vim600: noet sw=4 ts=4 fdm=marker
 * vim<600: noet sw=4 ts=4
 */
ext/http/php_http_client_curl_user.h000064400000005347151730541270013761 0ustar00/*
    +--------------------------------------------------------------------+
    | PECL :: http                                                       |
    +--------------------------------------------------------------------+
    | Redistribution and use in source and binary forms, with or without |
    | modification, are permitted provided that the conditions mentioned |
    | in the accompanying LICENSE file are met.                          |
    +--------------------------------------------------------------------+
    | Copyright (c) 2004-2014, Michael Wallner <mike@php.net>            |
    +--------------------------------------------------------------------+
*/

#ifndef PHP_HTTP_CLIENT_CURL_USER_H
#define PHP_HTTP_CLIENT_CURL_USER_H

#if PHP_HTTP_HAVE_LIBCURL

typedef struct php_http_client_curl_user_context {
	php_http_client_t *client;
	zval user;
	zend_function closure;
	php_http_object_method_t timer;
	php_http_object_method_t socket;
	php_http_object_method_t once;
	php_http_object_method_t wait;
	php_http_object_method_t send;
} php_http_client_curl_user_context_t;

PHP_HTTP_API zend_class_entry *php_http_client_curl_user_get_class_entry();
PHP_HTTP_API php_http_client_curl_ops_t *php_http_client_curl_user_ops_get();
PHP_MINIT_FUNCTION(http_client_curl_user);

#endif

#if 0
<?php

interface http\Client\Curl\User
{
	const POLL_NONE = 0;
	const POLL_IN = 1;
	const POLL_OUT = 2;
	const POLL_INOUT = 3;
	const POLL_REMOVE = 4;

	/**
	 * Initialize the loop
	 *
	 * The callback should be run when:
	 *  - timeout occurs
	 *  - a watched socket needs action
	 *
	 * @param callable $run callback as function(http\Client $client, resource $socket = null, int $action = http\Client\Curl\User::POLL_NONE):int (returns unfinished requests pending)
	 */
	function init(callable $run);

	/**
	 * Register a timeout watcher
	 * @param int $timeout_ms desired timeout with milliseconds resolution
	 */
	function timer(int $timeout_ms);

	/**
	 * (Un-)Register a socket watcher
	 * @param resource $socket the fd to watch
	 * @param int $poll http\Client\Curl\Loop::POLL_* constant
	 */
	function socket($socket, int $poll);

	/**
	 * Run the loop as long as it does not block
	 *
	 * Called by http\Client::once()
	 */
	function once();

	/**
	 * Wait/poll/select (block the loop) until events fire
	 *
	 * Called by http\Client::wait()
	 *
	 * @param int $timeout_ms block for maximal $timeout_ms milliseconds
	 */
	function wait(int $timeout_ms = null);

	/**
	 * Run the loop
	 *
	 * Called by http\Client::send() while there are unfinished requests and
	 * no exception has occurred
	 */
	function send();
}
#endif

#endif

/*
 * Local variables:
 * tab-width: 4
 * c-basic-offset: 4
 * End:
 * vim600: noet sw=4 ts=4 fdm=marker
 * vim<600: noet sw=4 ts=4
 */
ext/http/php_http_curl.h000064400000002317151730541300011351 0ustar00/*
    +--------------------------------------------------------------------+
    | PECL :: http                                                       |
    +--------------------------------------------------------------------+
    | Redistribution and use in source and binary forms, with or without |
    | modification, are permitted provided that the conditions mentioned |
    | in the accompanying LICENSE file are met.                          |
    +--------------------------------------------------------------------+
    | Copyright (c) 2004-2014, Michael Wallner <mike@php.net>            |
    +--------------------------------------------------------------------+
*/

#ifndef PHP_HTTP_CURL_H
#define PHP_HTTP_CURL_H

#if PHP_HTTP_HAVE_LIBCURL

#include <curl/curl.h>
#define PHP_HTTP_CURL_VERSION(x, y, z) (LIBCURL_VERSION_NUM >= (((x)<<16) + ((y)<<8) + (z)))
#define PHP_HTTP_CURL_FEATURE(f) (curl_version_info(CURLVERSION_NOW)->features & (f))

PHP_MINIT_FUNCTION(http_curl);
PHP_MSHUTDOWN_FUNCTION(http_curl);

#endif /* PHP_HTTP_HAVE_LIBCURL */

#endif /* PHP_HTTP_CURL_H */

/*
 * Local variables:
 * tab-width: 4
 * c-basic-offset: 4
 * End:
 * vim600: noet sw=4 ts=4 fdm=marker
 * vim<600: noet sw=4 ts=4
 */

ext/http/php_http_encoding_brotli.h000064400000004076151730541300013551 0ustar00/*
    +--------------------------------------------------------------------+
    | PECL :: http                                                       |
    +--------------------------------------------------------------------+
    | Redistribution and use in source and binary forms, with or without |
    | modification, are permitted provided that the conditions mentioned |
    | in the accompanying LICENSE file are met.                          |
    +--------------------------------------------------------------------+
    | Copyright (c) 2004-2014, Michael Wallner <mike@php.net>            |
    +--------------------------------------------------------------------+
*/

#ifndef PHP_HTTP_ENCODING_BROTLI_H
#define PHP_HTTP_ENCODING_BROTLI_H
#if PHP_HTTP_HAVE_LIBBROTLI

#include <brotli/decode.h>
#include <brotli/encode.h>

extern PHP_MINIT_FUNCTION(http_encoding_brotli);

PHP_HTTP_API zend_class_entry *php_http_get_enbrotli_stream_class_entry(void);
PHP_HTTP_API zend_class_entry *php_http_get_debrotli_stream_class_entry(void);

PHP_HTTP_API php_http_encoding_stream_ops_t *php_http_encoding_stream_get_enbrotli_ops(void);
PHP_HTTP_API php_http_encoding_stream_ops_t *php_http_encoding_stream_get_debrotli_ops(void);

PHP_HTTP_API ZEND_RESULT_CODE php_http_encoding_enbrotli(int flags, const char *data, size_t data_len, char **encoded, size_t *encoded_len);
PHP_HTTP_API ZEND_RESULT_CODE php_http_encoding_debrotli(const char *encoded, size_t encoded_len, char **decoded, size_t *decoded_len);

#define PHP_HTTP_ENBROTLI_LEVEL_MIN			0x00000001
#define PHP_HTTP_ENBROTLI_LEVEL_DEF			0x00000004
#define PHP_HTTP_ENBROTLI_LEVEL_MAX			0x0000000b

#define PHP_HTTP_ENBROTLI_WBITS_MIN			0x000000a0
#define PHP_HTTP_ENBROTLI_WBITS_DEF			0x00000160
#define PHP_HTTP_ENBROTLI_WBITS_MAX			0x00000180

#define PHP_HTTP_ENBROTLI_MODE_GENERIC		0x00000000
#define PHP_HTTP_ENBROTLI_MODE_TEXT			0x00001000
#define PHP_HTTP_ENBROTLI_MODE_FONT			0x00002000

#endif
#endif

/*
 * Local variables:
 * tab-width: 4
 * c-basic-offset: 4
 * End:
 * vim600: noet sw=4 ts=4 fdm=marker
 * vim<600: noet sw=4 ts=4
 */

ext/http/php_http_client.h000064400000016266151730541310011673 0ustar00/*
    +--------------------------------------------------------------------+
    | PECL :: http                                                       |
    +--------------------------------------------------------------------+
    | Redistribution and use in source and binary forms, with or without |
    | modification, are permitted provided that the conditions mentioned |
    | in the accompanying LICENSE file are met.                          |
    +--------------------------------------------------------------------+
    | Copyright (c) 2004-2014, Michael Wallner <mike@php.net>            |
    +--------------------------------------------------------------------+
*/

#ifndef PHP_HTTP_CLIENT_H
#define PHP_HTTP_CLIENT_H

typedef enum php_http_client_setopt_opt {
	PHP_HTTP_CLIENT_OPT_ENABLE_PIPELINING,
	PHP_HTTP_CLIENT_OPT_USE_EVENTS,
	PHP_HTTP_CLIENT_OPT_CONFIGURATION,
} php_http_client_setopt_opt_t;

typedef enum php_http_client_getopt_opt {
	PHP_HTTP_CLIENT_OPT_PROGRESS_INFO,		/* php_http_client_enqueue_t*, php_http_client_progress_state_t** */
	PHP_HTTP_CLIENT_OPT_TRANSFER_INFO,		/* php_http_client_enqueue_t*, HashTable* */
	PHP_HTTP_CLIENT_OPT_AVAILABLE_OPTIONS,		/* NULL, HashTable* */
	PHP_HTTP_CLIENT_OPT_AVAILABLE_CONFIGURATION,/* NULL, HashTable */
} php_http_client_getopt_opt_t;

typedef struct php_http_client_enqueue {
	php_http_message_t *request; /* unique */
	HashTable *options;
	void (*dtor)(struct php_http_client_enqueue *);
	void *opaque;
	struct {
		zend_fcall_info fci;
		zend_fcall_info_cache fcc;
	} closure;
	php_http_message_object_t *request_obj; /* supplemental to request */
} php_http_client_enqueue_t;

typedef struct php_http_client *(*php_http_client_init_func_t)(struct php_http_client *p, void *init_arg);
typedef struct php_http_client *(*php_http_client_copy_func_t)(struct php_http_client *from, struct php_http_client *to);
typedef void (*php_http_client_dtor_func_t)(struct php_http_client *p);
typedef void (*php_http_client_reset_func_t)(struct php_http_client *p);
typedef ZEND_RESULT_CODE (*php_http_client_exec_func_t)(struct php_http_client *p);
typedef int (*php_http_client_once_func_t)(struct php_http_client *p);
typedef ZEND_RESULT_CODE (*php_http_client_wait_func_t)(struct php_http_client *p, struct timeval *custom_timeout);
typedef ZEND_RESULT_CODE (*php_http_client_enqueue_func_t)(struct php_http_client *p, php_http_client_enqueue_t *enqueue);
typedef ZEND_RESULT_CODE (*php_http_client_dequeue_func_t)(struct php_http_client *p, php_http_client_enqueue_t *enqueue);
typedef ZEND_RESULT_CODE (*php_http_client_requeue_func_t)(struct php_http_client *p, php_http_client_enqueue_t *enqueue);
typedef ZEND_RESULT_CODE (*php_http_client_setopt_func_t)(struct php_http_client *p, php_http_client_setopt_opt_t opt, void *arg);
typedef ZEND_RESULT_CODE (*php_http_client_getopt_func_t)(struct php_http_client *h, php_http_client_getopt_opt_t opt, void *arg, void **res);

typedef struct php_http_client_ops {
	php_resource_factory_ops_t *rsrc;
	php_http_client_init_func_t init;
	php_http_client_copy_func_t copy;
	php_http_client_dtor_func_t dtor;
	php_http_client_reset_func_t reset;
	php_http_client_exec_func_t exec;
	php_http_client_wait_func_t wait;
	php_http_client_once_func_t once;
	php_http_client_enqueue_func_t enqueue;
	php_http_client_dequeue_func_t dequeue;
	php_http_client_requeue_func_t requeue;
	php_http_client_setopt_func_t setopt;
	php_http_client_getopt_func_t getopt;
} php_http_client_ops_t;

typedef struct php_http_client_driver {
	zend_string *driver_name;
	zend_string *client_name;
	zend_string *request_name;
	php_http_client_ops_t *client_ops;
} php_http_client_driver_t;

PHP_HTTP_API ZEND_RESULT_CODE php_http_client_driver_add(php_http_client_driver_t *driver);
PHP_HTTP_API php_http_client_driver_t *php_http_client_driver_get(zend_string *name);

typedef struct php_http_client_progress_state {
	struct {
		double now;
		double total;
	} ul;
	struct {
		double now;
		double total;
	} dl;
	const char *info;
	unsigned started:1;
	unsigned finished:1;
} php_http_client_progress_state_t;

typedef ZEND_RESULT_CODE (*php_http_client_response_callback_t)(void *arg, struct php_http_client *client, php_http_client_enqueue_t *e, php_http_message_t **response);
typedef void (*php_http_client_progress_callback_t)(void *arg, struct php_http_client *client, php_http_client_enqueue_t *e, php_http_client_progress_state_t *state);
typedef void (*php_http_client_debug_callback_t)(void *arg, struct php_http_client *client, php_http_client_enqueue_t *e, unsigned type, const char *data, size_t size);

#define PHP_HTTP_CLIENT_DEBUG_INFO		0x00
#define PHP_HTTP_CLIENT_DEBUG_IN		0x01
#define PHP_HTTP_CLIENT_DEBUG_OUT		0x02
#define PHP_HTTP_CLIENT_DEBUG_HEADER	0x10
#define PHP_HTTP_CLIENT_DEBUG_BODY		0x20
#define PHP_HTTP_CLIENT_DEBUG_SSL		0x40

typedef struct php_http_client {
	void *ctx;
	php_resource_factory_t *rf;
	php_http_client_ops_t *ops;

	struct {
		struct {
			php_http_client_response_callback_t func;
			void *arg;
		} response;
		struct {
			php_http_client_progress_callback_t func;
			void *arg;
		} progress;
		struct {
			php_http_client_debug_callback_t func;
			void *arg;
		} debug;
		unsigned depth;
	} callback;

	zend_llist requests;
	zend_llist responses;
} php_http_client_t;

PHP_HTTP_API zend_class_entry *php_http_client_get_class_entry();

typedef struct php_http_client_object {
	php_http_client_t *client;
	php_http_object_method_t *update;
	php_http_object_method_t notify;
	struct {
		zend_fcall_info fci;
		zend_fcall_info_cache fcc;
	} debug;
	long iterator;
	zval *gc;
	zend_object zo;
} php_http_client_object_t;

PHP_HTTP_API php_http_client_t *php_http_client_init(php_http_client_t *h, php_http_client_ops_t *ops, php_resource_factory_t *rf, void *init_arg);
PHP_HTTP_API php_http_client_t *php_http_client_copy(php_http_client_t *from, php_http_client_t *to);
PHP_HTTP_API void php_http_client_dtor(php_http_client_t *h);
PHP_HTTP_API void php_http_client_free(php_http_client_t **h);

PHP_HTTP_API ZEND_RESULT_CODE php_http_client_enqueue(php_http_client_t *h, php_http_client_enqueue_t *enqueue);
PHP_HTTP_API ZEND_RESULT_CODE php_http_client_dequeue(php_http_client_t *h, php_http_message_t *request);

PHP_HTTP_API ZEND_RESULT_CODE php_http_client_wait(php_http_client_t *h, struct timeval *custom_timeout);
PHP_HTTP_API int php_http_client_once(php_http_client_t *h);

PHP_HTTP_API ZEND_RESULT_CODE php_http_client_exec(php_http_client_t *h);
PHP_HTTP_API void php_http_client_reset(php_http_client_t *h);

PHP_HTTP_API ZEND_RESULT_CODE php_http_client_setopt(php_http_client_t *h, php_http_client_setopt_opt_t opt, void *arg);
PHP_HTTP_API ZEND_RESULT_CODE php_http_client_getopt(php_http_client_t *h, php_http_client_getopt_opt_t opt, void *arg, void *res_ptr);

typedef int (*php_http_client_enqueue_cmp_func_t)(php_http_client_enqueue_t *cmp, void *arg);
/* compare with request message pointer if compare_func is NULL */
PHP_HTTP_API php_http_client_enqueue_t *php_http_client_enqueued(php_http_client_t *h, void *compare_arg, php_http_client_enqueue_cmp_func_t compare_func);

PHP_MINIT_FUNCTION(http_client);
PHP_MSHUTDOWN_FUNCTION(http_client);

#endif

/*
 * Local variables:
 * tab-width: 4
 * c-basic-offset: 4
 * End:
 * vim600: noet sw=4 ts=4 fdm=marker
 * vim<600: noet sw=4 ts=4
 */
ext/http/php_http_message_body.h000064400000010133151730541310013041 0ustar00/*
    +--------------------------------------------------------------------+
    | PECL :: http                                                       |
    +--------------------------------------------------------------------+
    | Redistribution and use in source and binary forms, with or without |
    | modification, are permitted provided that the conditions mentioned |
    | in the accompanying LICENSE file are met.                          |
    +--------------------------------------------------------------------+
    | Copyright (c) 2004-2014, Michael Wallner <mike@php.net>            |
    +--------------------------------------------------------------------+
*/

#ifndef PHP_HTTP_MESSAGE_BODY_H
#define PHP_HTTP_MESSAGE_BODY_H

typedef struct php_http_message_body {
	php_stream_statbuf ssb;
	zend_resource *res;
	char *boundary;
	unsigned refcount;
} php_http_message_body_t;

struct php_http_message;

PHP_HTTP_API php_http_message_body_t *php_http_message_body_init(php_http_message_body_t **body, php_stream *stream);
PHP_HTTP_API unsigned php_http_message_body_addref(php_http_message_body_t *body);
PHP_HTTP_API php_http_message_body_t *php_http_message_body_copy(php_http_message_body_t *from, php_http_message_body_t *to);
PHP_HTTP_API ZEND_RESULT_CODE php_http_message_body_add_form(php_http_message_body_t *body, HashTable *fields, HashTable *files);
PHP_HTTP_API ZEND_RESULT_CODE php_http_message_body_add_form_field(php_http_message_body_t *body, const char *name, const char *value_str, size_t value_len);
PHP_HTTP_API ZEND_RESULT_CODE php_http_message_body_add_form_file(php_http_message_body_t *body, const char *name, const char *ctype, const char *file, php_stream *stream);
PHP_HTTP_API void php_http_message_body_add_part(php_http_message_body_t *body, struct php_http_message *part);
PHP_HTTP_API size_t php_http_message_body_append(php_http_message_body_t *body, const char *buf, size_t len);
PHP_HTTP_API size_t php_http_message_body_appendf(php_http_message_body_t *body, const char *fmt, ...);
PHP_HTTP_API zend_string *php_http_message_body_to_string(php_http_message_body_t *body, off_t offset, size_t forlen);
PHP_HTTP_API ZEND_RESULT_CODE php_http_message_body_to_stream(php_http_message_body_t *body, php_stream *s, off_t offset, size_t forlen);
PHP_HTTP_API ZEND_RESULT_CODE php_http_message_body_to_callback(php_http_message_body_t *body, php_http_pass_callback_t cb, void *cb_arg, off_t offset, size_t forlen);
PHP_HTTP_API void php_http_message_body_free(php_http_message_body_t **body);
PHP_HTTP_API const php_stream_statbuf *php_http_message_body_stat(php_http_message_body_t *body);
PHP_HTTP_API char *php_http_message_body_etag(php_http_message_body_t *body);
PHP_HTTP_API const char *php_http_message_body_boundary(php_http_message_body_t *body);
PHP_HTTP_API struct php_http_message *php_http_message_body_split(php_http_message_body_t *body, const char *boundary);

static inline size_t php_http_message_body_size(php_http_message_body_t *b)
{
	return php_http_message_body_stat(b)->sb.st_size;
}

static inline time_t php_http_message_body_mtime(php_http_message_body_t *b)
{
	return php_http_message_body_stat(b)->sb.st_mtime;
}

static inline php_stream *php_http_message_body_stream(php_http_message_body_t *body)
{
	return body && body->res ? body->res->ptr : NULL;
}

static inline zend_resource *php_http_message_body_resource(php_http_message_body_t *body)
{
	return body ? body->res : NULL;
}

typedef struct php_http_message_body_object {
	php_http_message_body_t *body;
	zval *gc;
	zend_object zo;
} php_http_message_body_object_t;

PHP_HTTP_API zend_class_entry *php_http_get_message_body_class_entry(void);
PHP_MINIT_FUNCTION(http_message_body);

zend_object *php_http_message_body_object_new(zend_class_entry *ce);
php_http_message_body_object_t *php_http_message_body_object_new_ex(zend_class_entry *ce, php_http_message_body_t *body);
zend_object *php_http_message_body_object_clone(zend_object *object);
void php_http_message_body_object_free(zend_object *object);

#endif

/*
 * Local variables:
 * tab-width: 4
 * c-basic-offset: 4
 * End:
 * vim600: noet sw=4 ts=4 fdm=marker
 * vim<600: noet sw=4 ts=4
 */

ext/http/php_http_options.h000064400000004304151730541320012077 0ustar00/*
    +--------------------------------------------------------------------+
    | PECL :: http                                                       |
    +--------------------------------------------------------------------+
    | Redistribution and use in source and binary forms, with or without |
    | modification, are permitted provided that the conditions mentioned |
    | in the accompanying LICENSE file are met.                          |
    +--------------------------------------------------------------------+
    | Copyright (c) 2004-2014, Michael Wallner <mike@php.net>            |
    +--------------------------------------------------------------------+
*/

#ifndef PHP_HTTP_OPTIONS_H
#define PHP_HTTP_OPTIONS_H

typedef struct php_http_option php_http_option_t;
typedef struct php_http_options php_http_options_t;

typedef ZEND_RESULT_CODE (*php_http_option_set_callback_t)(php_http_option_t *opt, zval *val, void *userdata);
typedef zval *(*php_http_option_get_callback_t)(php_http_option_t *opt, HashTable *options, void *userdata);

struct php_http_options {
	HashTable options;

	php_http_option_get_callback_t getter;
	php_http_option_set_callback_t setter;

	unsigned persistent:1;
};

struct php_http_option {
	php_http_options_t suboptions;

	zend_string *name;
	unsigned long option;
	zend_uchar type;
	unsigned flags;
	zval defval;

	php_http_option_set_callback_t setter;
	unsigned persistent:1;
};

PHP_HTTP_API php_http_options_t *php_http_options_init(php_http_options_t *registry, zend_bool persistent);
PHP_HTTP_API ZEND_RESULT_CODE php_http_options_apply(php_http_options_t *registry, HashTable *options, void *userdata);
PHP_HTTP_API void php_http_options_dtor(php_http_options_t *registry);
PHP_HTTP_API void php_http_options_free(php_http_options_t **registry);

PHP_HTTP_API php_http_option_t *php_http_option_register(php_http_options_t *registry, const char *name_str, size_t name_len, unsigned long option, zend_uchar type);
PHP_HTTP_API zval *php_http_option_get(php_http_option_t *opt, HashTable *options, void *userdata);

#endif /* PHP_HTTP_OPTIONS_H */

/*
 * Local variables:
 * tab-width: 4
 * c-basic-offset: 4
 * End:
 * vim600: noet sw=4 ts=4 fdm=marker
 * vim<600: noet sw=4 ts=4
 */
ext/http/php_http.h000064400000002035151730541330010324 0ustar00/*
    +--------------------------------------------------------------------+
    | PECL :: http                                                       |
    +--------------------------------------------------------------------+
    | Redistribution and use in source and binary forms, with or without |
    | modification, are permitted provided that the conditions mentioned |
    | in the accompanying LICENSE file are met.                          |
    +--------------------------------------------------------------------+
    | Copyright (c) 2004-2014, Michael Wallner <mike@php.net>            |
    +--------------------------------------------------------------------+
*/

#ifndef PHP_EXT_HTTP_H
#define PHP_EXT_HTTP_H

#define PHP_PECL_HTTP_VERSION "4.3.1"

extern zend_module_entry http_module_entry;
#define phpext_http_ptr &http_module_entry

extern int http_module_number;

#endif /* PHP_EXT_HTTP_H */

/*
 * Local variables:
 * tab-width: 4
 * c-basic-offset: 4
 * End:
 * vim600: noet sw=4 ts=4 fdm=marker
 * vim<600: noet sw=4 ts=4
 */
ext/http/php_http_message.h000064400000011327151730541340012035 0ustar00/*
    +--------------------------------------------------------------------+
    | PECL :: http                                                       |
    +--------------------------------------------------------------------+
    | Redistribution and use in source and binary forms, with or without |
    | modification, are permitted provided that the conditions mentioned |
    | in the accompanying LICENSE file are met.                          |
    +--------------------------------------------------------------------+
    | Copyright (c) 2004-2014, Michael Wallner <mike@php.net>            |
    +--------------------------------------------------------------------+
*/

#ifndef PHP_HTTP_MESSAGE_H
#define PHP_HTTP_MESSAGE_H

#include "php_http_message_body.h"
#include "php_http_header.h"

/* required minimum length of an HTTP message "HTTP/1.1" */
#define PHP_HTTP_MESSAGE_MIN_SIZE 8
#define PHP_HTTP_MESSAGE_TYPE(TYPE, msg) ((msg) && ((msg)->type == PHP_HTTP_ ##TYPE))

typedef php_http_info_type_t php_http_message_type_t;
typedef struct php_http_message php_http_message_t;

struct php_http_message {
	PHP_HTTP_INFO_IMPL(http, type)
	HashTable hdrs;
	php_http_message_body_t *body;
	php_http_message_t *parent;
	void *opaque;
};

PHP_HTTP_API zend_bool php_http_message_info_callback(php_http_message_t **message, HashTable **headers, php_http_info_t *info);

PHP_HTTP_API php_http_message_t *php_http_message_init(php_http_message_t *m, php_http_message_type_t t, php_http_message_body_t *body);
PHP_HTTP_API php_http_message_t *php_http_message_init_env(php_http_message_t *m, php_http_message_type_t t);
PHP_HTTP_API php_http_message_t *php_http_message_copy_ex(php_http_message_t *from, php_http_message_t *to, zend_bool parents);
static inline php_http_message_t *php_http_message_copy(php_http_message_t *from, php_http_message_t *to)
{
	return php_http_message_copy_ex(from, to, 1);
}

PHP_HTTP_API void php_http_message_dtor(php_http_message_t *message);
PHP_HTTP_API void php_http_message_free(php_http_message_t **message);

PHP_HTTP_API void php_http_message_set_type(php_http_message_t *m, php_http_message_type_t t);
PHP_HTTP_API void php_http_message_set_info(php_http_message_t *message, php_http_info_t *info);

PHP_HTTP_API void php_http_message_update_headers(php_http_message_t *msg);

PHP_HTTP_API zval *php_http_message_header(php_http_message_t *msg, const char *key_str, size_t key_len);

static inline zend_string *php_http_message_header_string(php_http_message_t *msg, const char *key_str, size_t key_len)
{
	zval *header;

	if ((header = php_http_message_header(msg, key_str, key_len))) {
		return php_http_header_value_to_string(header);
	}
	return NULL;
}

PHP_HTTP_API zend_bool php_http_message_is_multipart(php_http_message_t *msg, char **boundary);

PHP_HTTP_API void php_http_message_to_string(php_http_message_t *msg, char **string, size_t *length);
PHP_HTTP_API void php_http_message_to_struct(php_http_message_t *msg, zval *strct);
PHP_HTTP_API void php_http_message_to_callback(php_http_message_t *msg, php_http_pass_callback_t cb, void *cb_arg);

PHP_HTTP_API void php_http_message_serialize(php_http_message_t *message, char **string, size_t *length);
PHP_HTTP_API php_http_message_t *php_http_message_reverse(php_http_message_t *msg);
PHP_HTTP_API php_http_message_t *php_http_message_zip(php_http_message_t *one, php_http_message_t *two);

static inline size_t php_http_message_count(php_http_message_t *m)
{
	size_t c = 1;

	while ((m = m->parent)) {
		++c;
	}

	return c;
}

PHP_HTTP_API php_http_message_t *php_http_message_parse(php_http_message_t *msg, const char *str, size_t len, zend_bool greedy);

typedef struct php_http_message_object {
	php_http_message_t *message;
	struct php_http_message_object *parent;
	php_http_message_body_object_t *body;
	zval iterator, *gc;
	zend_object zo;
} php_http_message_object_t;

PHP_HTTP_API zend_class_entry *php_http_message_get_class_entry(void);

PHP_MINIT_FUNCTION(http_message);
PHP_MSHUTDOWN_FUNCTION(http_message);

void php_http_message_object_prepend(zval *this_ptr, zval *prepend, zend_bool top /* = 1 */);
void php_http_message_object_reverse(zval *this_ptr, zval *return_value);
ZEND_RESULT_CODE php_http_message_object_set_body(php_http_message_object_t *obj, zval *zbody);
ZEND_RESULT_CODE php_http_message_object_init_body_object(php_http_message_object_t *obj);

zend_object *php_http_message_object_new(zend_class_entry *ce);
php_http_message_object_t *php_http_message_object_new_ex(zend_class_entry *ce, php_http_message_t *msg);
zend_object *php_http_message_object_clone(zend_object *object);
void php_http_message_object_free(zend_object *object);

#endif

/*
 * Local variables:
 * tab-width: 4
 * c-basic-offset: 4
 * End:
 * vim600: noet sw=4 ts=4 fdm=marker
 * vim<600: noet sw=4 ts=4
 */

ext/http/php_http_etag.h000064400000003066151730541340011332 0ustar00/*
    +--------------------------------------------------------------------+
    | PECL :: http                                                       |
    +--------------------------------------------------------------------+
    | Redistribution and use in source and binary forms, with or without |
    | modification, are permitted provided that the conditions mentioned |
    | in the accompanying LICENSE file are met.                          |
    +--------------------------------------------------------------------+
    | Copyright (c) 2004-2014, Michael Wallner <mike@php.net>            |
    +--------------------------------------------------------------------+
*/

#ifndef PHP_HTTP_ETAG_H
#define PHP_HTTP_ETAG_H

#include "ext/hash/php_hash.h"

typedef struct php_http_etag {
	const php_hash_ops *ops;
	char ctx[1];
} php_http_etag_t;

PHP_HTTP_API php_http_etag_t *php_http_etag_init(const char *mode);
PHP_HTTP_API size_t php_http_etag_update(php_http_etag_t *e, const char *data_ptr, size_t data_len);
PHP_HTTP_API char *php_http_etag_finish(php_http_etag_t *e);

static inline char *php_http_etag_digest(const unsigned char *digest, int len)
{
	static const char hexdigits[17] = "0123456789abcdef";
	int i;
	char *hex = emalloc(len * 2 + 1);
	char *ptr = hex;

	for (i = 0; i < len; ++i) {
		*ptr++ = hexdigits[digest[i] >> 4];
		*ptr++ = hexdigits[digest[i] & 0xF];
	}
	*ptr = '\0';

	return hex;
}

#endif /* PHP_HTTP_ETAG_H */

/*
 * Local variables:
 * tab-width: 4
 * c-basic-offset: 4
 * End:
 * vim600: noet sw=4 ts=4 fdm=marker
 * vim<600: noet sw=4 ts=4
 */

ext/http/php_http_client_request.h000064400000002027151730541350013435 0ustar00/*
    +--------------------------------------------------------------------+
    | PECL :: http                                                       |
    +--------------------------------------------------------------------+
    | Redistribution and use in source and binary forms, with or without |
    | modification, are permitted provided that the conditions mentioned |
    | in the accompanying LICENSE file are met.                          |
    +--------------------------------------------------------------------+
    | Copyright (c) 2004-2014, Michael Wallner <mike@php.net>            |
    +--------------------------------------------------------------------+
*/

#ifndef PHP_HTTP_CLIENT_REQUEST_H
#define PHP_HTTP_CLIENT_REQUEST_H

PHP_HTTP_API zend_class_entry *php_http_get_client_request_class_entry(void);
PHP_MINIT_FUNCTION(http_client_request);

#endif /* PHP_HTTP_CLIENT_REQUEST_H */

/*
 * Local variables:
 * tab-width: 4
 * c-basic-offset: 4
 * End:
 * vim600: noet sw=4 ts=4 fdm=marker
 * vim<600: noet sw=4 ts=4
 */
ext/http/php_http_env_response.h000064400000006340151730541350013117 0ustar00/*
    +--------------------------------------------------------------------+
    | PECL :: http                                                       |
    +--------------------------------------------------------------------+
    | Redistribution and use in source and binary forms, with or without |
    | modification, are permitted provided that the conditions mentioned |
    | in the accompanying LICENSE file are met.                          |
    +--------------------------------------------------------------------+
    | Copyright (c) 2004-2014, Michael Wallner <mike@php.net>            |
    +--------------------------------------------------------------------+
*/

#ifndef PHP_HTTP_ENV_RESPONSE_H
#define PHP_HTTP_ENV_RESPONSE_H

typedef struct php_http_env_response php_http_env_response_t;

typedef struct php_http_env_response_ops {
	ZEND_RESULT_CODE (*init)(php_http_env_response_t *r, void *arg);
	void (*dtor)(php_http_env_response_t *r);
	long (*get_status)(php_http_env_response_t *r);
	ZEND_RESULT_CODE (*set_status)(php_http_env_response_t *r, long http_code);
	ZEND_RESULT_CODE (*set_protocol_version)(php_http_env_response_t *r, php_http_version_t *v);
	ZEND_RESULT_CODE (*set_header)(php_http_env_response_t *r, const char *fmt, ...);
	ZEND_RESULT_CODE (*add_header)(php_http_env_response_t *r, const char *fmt, ...);
	ZEND_RESULT_CODE (*del_header)(php_http_env_response_t *r, const char *header_str, size_t header_len);
	ZEND_RESULT_CODE (*write)(php_http_env_response_t *r, const char *data_str, size_t data_len);
	ZEND_RESULT_CODE (*flush)(php_http_env_response_t *r);
	ZEND_RESULT_CODE (*finish)(php_http_env_response_t *r);
} php_http_env_response_ops_t;

PHP_HTTP_API php_http_env_response_ops_t *php_http_env_response_get_sapi_ops(void);
PHP_HTTP_API php_http_env_response_ops_t *php_http_env_response_get_stream_ops(void);

struct php_http_env_response {
	void *ctx;
	php_http_env_response_ops_t *ops;

	php_http_cookie_list_t *cookies;
	php_http_buffer_t *buffer;
	zval options;

	struct {
		size_t chunk;
		double delay;
	} throttle;

	struct {
		php_http_range_status_t status;
		HashTable values;
		char boundary[32];
	} range;

	struct {
		size_t length;
		char *type;
		char *encoding;

		php_http_encoding_stream_t *encoder;
	} content;

	zend_bool done;
};

PHP_HTTP_API php_http_env_response_t *php_http_env_response_init(php_http_env_response_t *r, zval *options, php_http_env_response_ops_t *ops, void *ops_ctx);
PHP_HTTP_API ZEND_RESULT_CODE php_http_env_response_send(php_http_env_response_t *r);
PHP_HTTP_API void php_http_env_response_dtor(php_http_env_response_t *r);
PHP_HTTP_API void php_http_env_response_free(php_http_env_response_t **r);

PHP_HTTP_API php_http_cache_status_t php_http_env_is_response_cached_by_etag(zval *options, const char *header_str, size_t header_len, php_http_message_t *request);
PHP_HTTP_API php_http_cache_status_t php_http_env_is_response_cached_by_last_modified(zval *options, const char *header_str, size_t header_len, php_http_message_t *request);

PHP_HTTP_API zend_class_entry *php_http_get_env_response_class_entry();
PHP_MINIT_FUNCTION(http_env_response);

#endif

/*
 * Local variables:
 * tab-width: 4
 * c-basic-offset: 4
 * End:
 * vim600: noet sw=4 ts=4 fdm=marker
 * vim<600: noet sw=4 ts=4
 */

ext/http/php_http_buffer.h000064400000024421151730541360011663 0ustar00/*
    +--------------------------------------------------------------------+
    | PECL :: http                                                       |
    +--------------------------------------------------------------------+
    | Redistribution and use in source and binary forms, with or without |
    | modification, are permitted provided that the conditions mentioned |
    | in the accompanying LICENSE file are met.                          |
    +--------------------------------------------------------------------+
    | Copyright (c) 2004-2014, Michael Wallner <mike@php.net>            |
    +--------------------------------------------------------------------+
*/

#ifndef PHP_HTTP_BUFFER_H
#define PHP_HTTP_BUFFER_H

#ifndef PHP_HTTP_BUFFER_DEFAULT_SIZE
#	define PHP_HTTP_BUFFER_DEFAULT_SIZE 256
#endif

#define PHP_HTTP_BUFFER_ERROR ((size_t) -1)
#define PHP_HTTP_BUFFER_NOMEM PHP_HTTP_BUFFER_ERROR
#define PHP_HTTP_BUFFER_PASS0 PHP_HTTP_BUFFER_ERROR

#ifndef PTR_FREE
#	define PTR_FREE(PTR) \
	{ \
		if (EXPECTED(PTR)) { \
			efree(PTR); \
		} \
	}
#endif
#ifndef PTR_SET
#	define PTR_SET(PTR, SET) \
	{ \
		PTR_FREE(PTR); \
		PTR = SET; \
	}
#endif
#ifdef PHP_ATTRIBUTE_FORMAT
#	define PHP_HTTP_BUFFER_ATTRIBUTE_FORMAT(f, a, b) PHP_ATTRIBUTE_FORMAT(f, a, b)
#else
#	define PHP_HTTP_BUFFER_ATTRIBUTE_FORMAT(f, a, b)
#endif
#ifndef pemalloc
#	define pemalloc(s,p)	malloc(s)
#	define pefree(x,p)		free(x)
#	define perealloc(x,s,p)	realloc(x,s)
#	define perealloc_recoverable perealloc
#	define ecalloc calloc
static inline void *estrndup(void *p, size_t s)
{
	char *r = (char *) malloc(s+1);
	if (r) memcpy((void *) r, p, s), r[s] = '\0';
	return (void *) r;
}
#endif

#if defined(PHP_WIN32)
#	if defined(PHP_HTTP_BUFFER_EXPORTS)
#		define PHP_HTTP_BUFFER_API __declspec(dllexport)
#	elif defined(COMPILE_DL_PHP_HTTP_BUFFER)
#		define PHP_HTTP_BUFFER_API __declspec(dllimport)
#	else
#		define PHP_HTTP_BUFFER_API
#	endif
#else
#	define PHP_HTTP_BUFFER_API
#endif

#define PHP_HTTP_BUFFER(p) ((php_http_buffer_t *) (p))

#define FREE_PHP_HTTP_BUFFER_PTR(STR) pefree(STR, STR->pmem)
#define FREE_PHP_HTTP_BUFFER_VAL(STR) php_http_buffer_dtor(STR)
#define FREE_PHP_HTTP_BUFFER_ALL(STR) php_http_buffer_free(&(STR))
#define FREE_PHP_HTTP_BUFFER(free, STR) \
	switch (free) \
	{ \
	case PHP_HTTP_BUFFER_FREE_NOT: \
		break; \
	case PHP_HTTP_BUFFER_FREE_PTR: \
		pefree(STR, STR->pmem); \
		break; \
	case PHP_HTTP_BUFFER_FREE_VAL: \
		php_http_buffer_dtor(STR); \
		break; \
	case PHP_HTTP_BUFFER_FREE_ALL: { \
		php_http_buffer_t *PTR = (STR); \
		php_http_buffer_free(&PTR); \
		break; \
	} \
	default:\
		break; \
	}

#define RETURN_PHP_HTTP_BUFFER_PTR(STR) RETURN_PHP_HTTP_BUFFER((STR), PHP_HTTP_BUFFER_FREE_PTR, 0)
#define RETURN_PHP_HTTP_BUFFER_VAL(STR) RETURN_PHP_HTTP_BUFFER((STR), PHP_HTTP_BUFFER_FREE_NOT, 0)
#define RETURN_PHP_HTTP_BUFFER_DUP(STR) RETURN_PHP_HTTP_BUFFER((STR), PHP_HTTP_BUFFER_FREE_NOT, 1)
#define RETVAL_PHP_HTTP_BUFFER_PTR(STR) RETVAL_PHP_HTTP_BUFFER((STR), PHP_HTTP_BUFFER_FREE_PTR, 0)
#define RETVAL_PHP_HTTP_BUFFER_VAL(STR) RETVAL_PHP_HTTP_BUFFER((STR), PHP_HTTP_BUFFER_FREE_NOT, 0)
#define RETVAL_PHP_HTTP_BUFFER_DUP(STR) RETVAL_PHP_HTTP_BUFFER((STR), PHP_HTTP_BUFFER_FREE_NOT, 1)
/* RETURN_PHP_HTTP_BUFFER(buf, PHP_HTTP_BUFFER_FREE_PTR, 0) */
#define RETURN_PHP_HTTP_BUFFER(STR, free, dup) \
	RETVAL_PHP_HTTP_BUFFER((STR), (free), (dup)); \
	return;

#define RETVAL_PHP_HTTP_BUFFER(STR, free, dup) \
	php_http_buffer_fix(STR); \
	RETVAL_STRINGL((STR)->data, (STR)->used, (dup)); \
	FREE_PHP_HTTP_BUFFER((free), (STR));

typedef struct php_http_buffer {
	char  *data;
	size_t used;
	size_t free;
	size_t size;
	unsigned pmem:1;
	unsigned reserved:31;
} php_http_buffer_t;

typedef enum php_http_buffer_free {
	PHP_HTTP_BUFFER_FREE_NOT = 0,
	PHP_HTTP_BUFFER_FREE_PTR,	/* pefree() */
	PHP_HTTP_BUFFER_FREE_VAL,	/* php_http_buffer_dtor() */
	PHP_HTTP_BUFFER_FREE_ALL	/* php_http_buffer_free() */
} php_http_buffer_free_t;

#define PHP_HTTP_BUFFER_ALL_FREE(STR) PHP_HTTP_BUFFER_FREE_ALL,(STR)
#define PHP_HTTP_BUFFER_PTR_FREE(STR) PHP_HTTP_BUFFER_FREE_PTR,(STR)
#define PHP_HTTP_BUFFER_VAL_FREE(STR) PHP_HTTP_BUFFER_FREE_VAL,(STR)
#define PHP_HTTP_BUFFER_NOT_FREE(STR) PHP_HTTP_BUFFER_FREE_NOT,(STR)

#define PHP_HTTP_BUFFER_INIT_PREALLOC	0x01
#define PHP_HTTP_BUFFER_INIT_PERSISTENT	0x02

/* create a new php_http_buffer_t */
#define php_http_buffer_new() php_http_buffer_init(NULL)
#define php_http_buffer_init(b) php_http_buffer_init_ex(b, PHP_HTTP_BUFFER_DEFAULT_SIZE, 0)
#define php_http_buffer_clone(from, to) php_http_buffer_init_ex((to), (from)->size, (from)->pmem ? PHP_HTTP_BUFFER_INIT_PERSISTENT:0)
PHP_HTTP_BUFFER_API php_http_buffer_t *php_http_buffer_init_ex(php_http_buffer_t *buf, size_t chunk_size, unsigned flags);

/* create a php_http_buffer_t from a zval or c-string */
#define php_http_buffer_from_zval(z) php_http_buffer_from_string(Z_STRVAL(z), Z_STRLEN(z))
#define php_http_buffer_from_zval_ex(b, z) php_http_buffer_from_string_ex(b, Z_STRVAL(z), Z_STRLEN(z))
#define php_http_buffer_from_string(s, l) php_http_buffer_from_string_ex(NULL, (s), (l))
PHP_HTTP_BUFFER_API php_http_buffer_t *php_http_buffer_from_string_ex(php_http_buffer_t *buf, const char *string, size_t length);

/* usually only called from within the internal functions */
#define php_http_buffer_resize(b, s) php_http_buffer_resize_ex((b), (s), 0, 0)
PHP_HTTP_BUFFER_API size_t php_http_buffer_resize_ex(php_http_buffer_t *buf, size_t len, size_t override_size, zend_bool allow_error);

PHP_HTTP_BUFFER_API char *php_http_buffer_account(php_http_buffer_t *buf, size_t to_account);

/* shrink memory chunk to actually used size (+1) */
PHP_HTTP_BUFFER_API size_t php_http_buffer_shrink(php_http_buffer_t *buf);

/* append data to the php_http_buffer_t */
#define php_http_buffer_appends(b, a) php_http_buffer_append((b), (a), sizeof(a)-1)
#define php_http_buffer_appendl(b, a) php_http_buffer_append((b), (a), strlen(a))
#define php_http_buffer_appendz(b, z) php_http_buffer_append((b), (z)->val, (z)->len)
PHP_HTTP_BUFFER_API size_t php_http_buffer_append(php_http_buffer_t *buf, const char *append, size_t append_len);
PHP_HTTP_BUFFER_API size_t php_http_buffer_appendf(php_http_buffer_t *buf, const char *format, ...) PHP_HTTP_BUFFER_ATTRIBUTE_FORMAT(printf, 2, 3);

/* get a zero-terminated string */
PHP_HTTP_BUFFER_API char *php_http_buffer_data(const php_http_buffer_t *buf, char **into, size_t *len);

/* remove a substring */
PHP_HTTP_BUFFER_API size_t php_http_buffer_cut(php_http_buffer_t *buf, size_t offset, size_t length);

/* sets a trailing NUL byte */
PHP_HTTP_BUFFER_API php_http_buffer_t *php_http_buffer_fix(php_http_buffer_t *buf);

/* reset php_http_buffer_t object */
PHP_HTTP_BUFFER_API void php_http_buffer_reset(php_http_buffer_t *buf);

/* free a php_http_buffer_t objects contents */
PHP_HTTP_BUFFER_API void php_http_buffer_dtor(php_http_buffer_t *buf);

/* free a php_http_buffer_t object completely */
PHP_HTTP_BUFFER_API void php_http_buffer_free(php_http_buffer_t **buf);

/* stores data in a php_http_buffer_t until it reaches chunk_size */
PHP_HTTP_BUFFER_API size_t php_http_buffer_chunk_buffer(php_http_buffer_t **s, const char *data, size_t data_len, char **chunk, size_t chunk_size);

typedef size_t (*php_http_buffer_pass_func_t)(void *opaque, char *, size_t);

PHP_HTTP_BUFFER_API ssize_t php_http_buffer_passthru(php_http_buffer_t **s, size_t chunk_size, php_http_buffer_pass_func_t passin, void *passin_arg, php_http_buffer_pass_func_t passon, void *passon_arg);

/* wrapper around php_http_buffer_chunk_buffer, which passes available chunks to passthru() */
PHP_HTTP_BUFFER_API size_t php_http_buffer_chunked_output(php_http_buffer_t **s, const char *data, size_t data_len, size_t chunk_size, php_http_buffer_pass_func_t passout, void *opaque);

/* write chunks directly into php_http_buffer_t buffer */
PHP_HTTP_BUFFER_API size_t php_http_buffer_chunked_input(php_http_buffer_t **s, size_t chunk_size, php_http_buffer_pass_func_t passin, void *opaque);


#	ifdef PHP_HTTP_BUFFER_EXTENDED

/* memcmp for php_http_buffer_t objects */
PHP_HTTP_BUFFER_API int php_http_buffer_cmp(php_http_buffer_t *left, php_http_buffer_t *right);

/* get a complete php_http_buffer_t duplicate */
PHP_HTTP_BUFFER_API php_http_buffer_t *php_http_buffer_copy(const php_http_buffer_t *from, php_http_buffer_t *to);

/* merge several php_http_buffer_t objects
   use like:

	php_http_buffer_t *final = php_http_buffer_merge(3,
		PHP_HTTP_BUFFER_NOT_FREE(&keep),
		PHP_HTTP_BUFFER_ALL_FREE(middle_ptr),
		PHP_HTTP_BUFFER_VAL_FREE(&local);
*/
PHP_HTTP_BUFFER_API php_http_buffer_t *php_http_buffer_merge(unsigned argc, ...);
PHP_HTTP_BUFFER_API php_http_buffer_t *php_http_buffer_merge_ex(php_http_buffer_t *buf, unsigned argc, ...);
PHP_HTTP_BUFFER_API php_http_buffer_t *php_http_buffer_merge_va(php_http_buffer_t *buf, unsigned argc, va_list argv);

/* insert data at a specific position of the php_http_buffer_t */
#define php_http_buffer_inserts(b, i, o) php_http_buffer_insert((b), (i), sizeof(i)-1, (o))
#define php_http_buffer_insertl(b, i, o) php_http_buffer_insert((b), (i), strlen(i), (o))
PHP_HTTP_BUFFER_API size_t php_http_buffer_insert(php_http_buffer_t *buf, const char *insert, size_t insert_len, size_t offset);
PHP_HTTP_BUFFER_API size_t php_http_buffer_insertf(php_http_buffer_t *buf, size_t offset, const char *format, ...) PHP_HTTP_BUFFER_ATTRIBUTE_FORMAT(printf, 3, 4);

/* prepend data */
#define php_http_buffer_prepends(b, p) php_http_buffer_prepend((b), (p), sizeof(p)-1)
#define php_http_buffer_prependl(b, p) php_http_buffer_prepend((b), (p), strlen(p))
PHP_HTTP_BUFFER_API size_t php_http_buffer_prepend(php_http_buffer_t *buf, const char *prepend, size_t prepend_len);
PHP_HTTP_BUFFER_API size_t php_http_buffer_prependf(php_http_buffer_t *buf, const char *format, ...) PHP_HTTP_BUFFER_ATTRIBUTE_FORMAT(printf, 2, 3);

/* get a part of the php_http_buffer_t */
#define php_http_buffer_mid(b, o, l) php_http_buffer_sub((b), (o), (l))
#define php_http_buffer_left(b, l) php_http_buffer_sub((b), 0, (l))
PHP_HTTP_BUFFER_API php_http_buffer_t *php_http_buffer_right(const php_http_buffer_t *buf, size_t length);
PHP_HTTP_BUFFER_API php_http_buffer_t *php_http_buffer_sub(const php_http_buffer_t *buf, size_t offset, size_t len);

#	endif /* PHP_HTTP_BUFFER_EXTENDED */

#endif /* PHP_HTTP_BUFFER_H */


/*
 * Local variables:
 * tab-width: 4
 * c-basic-offset: 4
 * End:
 * vim600: sw=4 ts=4 fdm=marker
 * vim<600: sw=4 ts=4
 */
ext/http/php_http_version.h000064400000002672151730541360012103 0ustar00/*
    +--------------------------------------------------------------------+
    | PECL :: http                                                       |
    +--------------------------------------------------------------------+
    | Redistribution and use in source and binary forms, with or without |
    | modification, are permitted provided that the conditions mentioned |
    | in the accompanying LICENSE file are met.                          |
    +--------------------------------------------------------------------+
    | Copyright (c) 2004-2014, Michael Wallner <mike@php.net>            |
    +--------------------------------------------------------------------+
*/

#ifndef PHP_HTTP_VERSION_H
#define	PHP_HTTP_VERSION_H

typedef struct php_http_version {
	unsigned major;
	unsigned minor;
} php_http_version_t;

PHP_HTTP_API php_http_version_t *php_http_version_init(php_http_version_t *v, unsigned major, unsigned minor);
PHP_HTTP_API php_http_version_t *php_http_version_parse(php_http_version_t *v, const char *str);
PHP_HTTP_API void php_http_version_to_string(php_http_version_t *v, char **str, size_t *len, const char *pre, const char *post);
PHP_HTTP_API void php_http_version_dtor(php_http_version_t *v);
PHP_HTTP_API void php_http_version_free(php_http_version_t **v);

#endif	/* PHP_HTTP_VERSION_H */


/*
 * Local variables:
 * tab-width: 4
 * c-basic-offset: 4
 * End:
 * vim600: noet sw=4 ts=4 fdm=marker
 * vim<600: noet sw=4 ts=4
 */

ext/http/php_http_exception.h000064400000004414151730541360012410 0ustar00/*
    +--------------------------------------------------------------------+
    | PECL :: http                                                       |
    +--------------------------------------------------------------------+
    | Redistribution and use in source and binary forms, with or without |
    | modification, are permitted provided that the conditions mentioned |
    | in the accompanying LICENSE file are met.                          |
    +--------------------------------------------------------------------+
    | Copyright (c) 2004-2014, Michael Wallner <mike@php.net>            |
    +--------------------------------------------------------------------+
*/

#ifndef PHP_HTTP_EXCEPTION_H
#define PHP_HTTP_EXCEPTION_H

/* short hand for zend_throw_exception_ex */
#define php_http_throw(e, ...) \
	zend_throw_exception_ex(php_http_get_exception_ ##e## _class_entry(), 0, __VA_ARGS__)

/* wrap a call with replaced zend_error_handling */
#define php_http_expect(test, e, fail) \
	do { \
		zend_error_handling __zeh; \
		zend_replace_error_handling(EH_THROW, php_http_get_exception_ ##e## _class_entry(), &__zeh); \
		if (UNEXPECTED(!(test))) { \
			zend_restore_error_handling(&__zeh); \
			fail; \
		} \
		zend_restore_error_handling(&__zeh); \
	} while(0)

PHP_HTTP_API zend_class_entry *php_http_get_exception_interface_class_entry(void);
PHP_HTTP_API zend_class_entry *php_http_get_exception_runtime_class_entry(void);
PHP_HTTP_API zend_class_entry *php_http_get_exception_unexpected_val_class_entry(void);
PHP_HTTP_API zend_class_entry *php_http_get_exception_bad_method_call_class_entry(void);
PHP_HTTP_API zend_class_entry *php_http_get_exception_invalid_arg_class_entry(void);
PHP_HTTP_API zend_class_entry *php_http_get_exception_bad_header_class_entry(void);
PHP_HTTP_API zend_class_entry *php_http_get_exception_bad_url_class_entry(void);
PHP_HTTP_API zend_class_entry *php_http_get_exception_bad_message_class_entry(void);
PHP_HTTP_API zend_class_entry *php_http_get_exception_bad_conversion_class_entry(void);
PHP_HTTP_API zend_class_entry *php_http_get_exception_bad_querystring_class_entry(void);

PHP_MINIT_FUNCTION(http_exception);

#endif

/*
 * Local variables:
 * tab-width: 4
 * c-basic-offset: 4
 * End:
 * vim600: noet sw=4 ts=4 fdm=marker
 * vim<600: noet sw=4 ts=4
 */

ext/http/php_http_client_curl_event.h000064400000002015151730541370014112 0ustar00/*
    +--------------------------------------------------------------------+
    | PECL :: http                                                       |
    +--------------------------------------------------------------------+
    | Redistribution and use in source and binary forms, with or without |
    | modification, are permitted provided that the conditions mentioned |
    | in the accompanying LICENSE file are met.                          |
    +--------------------------------------------------------------------+
    | Copyright (c) 2004-2014, Michael Wallner <mike@php.net>            |
    +--------------------------------------------------------------------+
*/

#ifndef PHP_HTTP_CLIENT_CURL_EVENT_H
#define PHP_HTTP_CLIENT_CURL_EVENT_H

#if PHP_HTTP_HAVE_LIBCURL
#if PHP_HTTP_HAVE_LIBEVENT

php_http_client_curl_ops_t *php_http_client_curl_event_ops_get();

#endif
#endif

#endif

/*
 * Local variables:
 * tab-width: 4
 * c-basic-offset: 4
 * End:
 * vim600: noet sw=4 ts=4 fdm=marker
 * vim<600: noet sw=4 ts=4
 */
ext/http/php_http_info.h000064400000004064151730541370011347 0ustar00/*
    +--------------------------------------------------------------------+
    | PECL :: http                                                       |
    +--------------------------------------------------------------------+
    | Redistribution and use in source and binary forms, with or without |
    | modification, are permitted provided that the conditions mentioned |
    | in the accompanying LICENSE file are met.                          |
    +--------------------------------------------------------------------+
    | Copyright (c) 2004-2014, Michael Wallner <mike@php.net>            |
    +--------------------------------------------------------------------+
*/

#ifndef PHP_HTTP_INFO_H
#define PHP_HTTP_INFO_H

#include "php_http_version.h"
#include "php_http_url.h"

typedef struct php_http_info_data {
	union {
		/* GET /foo/bar */
		struct { char *method; php_http_url_t *url; } request;
		/* 200 Ok */
		struct { unsigned code; char *status; } response;
	} info;
	php_http_version_t version;
} php_http_info_data_t;

#undef PHP_HTTP_REQUEST
#undef PHP_HTTP_RESPONSE
typedef enum php_http_info_type {
	PHP_HTTP_NONE = 0,
	PHP_HTTP_REQUEST,
	PHP_HTTP_RESPONSE
} php_http_info_type_t;

#define PHP_HTTP_INFO(ptr) (ptr)->http.info
#define PHP_HTTP_INFO_IMPL(_http, _type) \
	php_http_info_data_t _http; \
	php_http_info_type_t _type;

typedef struct php_http_info {
	PHP_HTTP_INFO_IMPL(http, type)
} php_http_info_t;

typedef zend_bool (*php_http_info_callback_t)(void **callback_data, HashTable **headers, php_http_info_t *info);

PHP_HTTP_API php_http_info_t *php_http_info_init(php_http_info_t *info);
PHP_HTTP_API php_http_info_t *php_http_info_parse(php_http_info_t *info, const char *pre_header);
PHP_HTTP_API void php_http_info_to_string(php_http_info_t *info, char **str, size_t *len, const char *eol);
PHP_HTTP_API void php_http_info_dtor(php_http_info_t *info);
PHP_HTTP_API void php_http_info_free(php_http_info_t **info);

#endif

/*
 * Local variables:
 * tab-width: 4
 * c-basic-offset: 4
 * End:
 * vim600: noet sw=4 ts=4 fdm=marker
 * vim<600: noet sw=4 ts=4
 */

ext/http/php_http_object.h000064400000003477151730541400011663 0ustar00/*
    +--------------------------------------------------------------------+
    | PECL :: http                                                       |
    +--------------------------------------------------------------------+
    | Redistribution and use in source and binary forms, with or without |
    | modification, are permitted provided that the conditions mentioned |
    | in the accompanying LICENSE file are met.                          |
    +--------------------------------------------------------------------+
    | Copyright (c) 2004-2014, Michael Wallner <mike@php.net>            |
    +--------------------------------------------------------------------+
*/

#ifndef PHP_HTTP_OBJECT_H
#define PHP_HTTP_OBJECT_H

typedef struct php_http_object {
	void *intern;
	zend_object zo;
} php_http_object_t;

zend_object *php_http_object_new(zend_class_entry *ce);
php_http_object_t *php_http_object_new_ex(zend_class_entry *ce, void *nothing);

typedef void *(*php_http_new_t)(zend_class_entry *ce, void *);

ZEND_RESULT_CODE php_http_new(void **obj_ptr, zend_class_entry *ce, php_http_new_t create, zend_class_entry *parent_ce, void *intern_ptr);

PHP_MINIT_FUNCTION(http_object);

typedef struct php_http_method {
	zend_fcall_info fci;
	zend_fcall_info_cache fcc;
} php_http_object_method_t;

php_http_object_method_t *php_http_object_method_init(php_http_object_method_t *cb, zval *zobject, const char *method_str, size_t method_len);
ZEND_RESULT_CODE php_http_object_method_call(php_http_object_method_t *cb, zval *zobject, zval *retval, int argc, zval *args);
void php_http_object_method_dtor(php_http_object_method_t *cb);
void php_http_object_method_free(php_http_object_method_t **cb);

#endif


/*
 * Local variables:
 * tab-width: 4
 * c-basic-offset: 4
 * End:
 * vim600: noet sw=4 ts=4 fdm=marker
 * vim<600: noet sw=4 ts=4
 */

ext/http/php_http_params.h000064400000004621151730541400011670 0ustar00/*
    +--------------------------------------------------------------------+
    | PECL :: http                                                       |
    +--------------------------------------------------------------------+
    | Redistribution and use in source and binary forms, with or without |
    | modification, are permitted provided that the conditions mentioned |
    | in the accompanying LICENSE file are met.                          |
    +--------------------------------------------------------------------+
    | Copyright (c) 2004-2014, Michael Wallner <mike@php.net>            |
    +--------------------------------------------------------------------+
*/

#ifndef PHP_HTTP_PARAMS_H
#define PHP_HTTP_PARAMS_H

typedef struct php_http_params_token {
	char *str;
	size_t len;
} php_http_params_token_t;

#define PHP_HTTP_PARAMS_RAW			0x00
#define PHP_HTTP_PARAMS_ESCAPED		0x01
#define PHP_HTTP_PARAMS_URLENCODED	0x04
#define PHP_HTTP_PARAMS_DIMENSION	0x08
#define PHP_HTTP_PARAMS_RFC5987		0x10
#define PHP_HTTP_PARAMS_RFC5988		0x20
#define PHP_HTTP_PARAMS_QUERY		(PHP_HTTP_PARAMS_URLENCODED|PHP_HTTP_PARAMS_DIMENSION)
#define PHP_HTTP_PARAMS_DEFAULT		(PHP_HTTP_PARAMS_ESCAPED|PHP_HTTP_PARAMS_RFC5987)

typedef struct php_http_params_opts {
	php_http_params_token_t input;
	php_http_params_token_t **param;
	php_http_params_token_t **arg;
	php_http_params_token_t **val;
	zval defval;
	unsigned flags;
} php_http_params_opts_t;

PHP_HTTP_API php_http_params_opts_t *php_http_params_opts_default_get(php_http_params_opts_t *opts);
PHP_HTTP_API HashTable *php_http_params_parse(HashTable *params, const php_http_params_opts_t *opts);
PHP_HTTP_API php_http_buffer_t *php_http_params_to_string(php_http_buffer_t *buf, HashTable *params, const char *pss, size_t psl, const char *ass, size_t asl, const char *vss, size_t vsl, unsigned flags);

PHP_HTTP_API php_http_params_token_t **php_http_params_separator_init(zval *zv);
PHP_HTTP_API void php_http_params_separator_free(php_http_params_token_t **separator);

typedef php_http_object_t php_http_params_object_t;

PHP_HTTP_API zend_class_entry *php_http_params_get_class_entry(void);

PHP_MINIT_FUNCTION(http_params);

#define php_http_params_object_new php_http_object_new
#define php_http_params_object_new_ex php_http_object_new_ex

#endif

/*
 * Local variables:
 * tab-width: 4
 * c-basic-offset: 4
 * End:
 * vim600: noet sw=4 ts=4 fdm=marker
 * vim<600: noet sw=4 ts=4
 */

ext/opcache/zend_accelerator_api.h000064400000002332151730541400013254 0ustar00/*
   +----------------------------------------------------------------------+
   | Zend OPcache                                                         |
   +----------------------------------------------------------------------+
   | Copyright (c) The PHP Group                                          |
   +----------------------------------------------------------------------+
   | This source file is subject to version 3.01 of the PHP license,      |
   | that is bundled with this package in the file LICENSE, and is        |
   | available through the world-wide-web at the following url:           |
   | https://www.php.net/license/3_01.txt                                 |
   | If you did not receive a copy of the PHP license and are unable to   |
   | obtain it through the world-wide-web, please send a note to          |
   | license@php.net so we can mail you a copy immediately.               |
   +----------------------------------------------------------------------+
*/

#ifndef ZEND_ACCELERATOR_API_H
#define ZEND_ACCELERATOR_API_H

#include "Zend/zend_portability.h"

BEGIN_EXTERN_C()

/* Returns true during preloading */
ZEND_API bool opcache_preloading(void);

END_EXTERN_C()

#endif /* ZEND_ACCELERATOR_API_H */
ext/mbstring/mbstring.h000064400000011412151730541400011166 0ustar00/*
   +----------------------------------------------------------------------+
   | Copyright (c) The PHP Group                                          |
   +----------------------------------------------------------------------+
   | This source file is subject to version 3.01 of the PHP license,      |
   | that is bundled with this package in the file LICENSE, and is        |
   | available through the world-wide-web at the following url:           |
   | https://www.php.net/license/3_01.txt                                 |
   | If you did not receive a copy of the PHP license and are unable to   |
   | obtain it through the world-wide-web, please send a note to          |
   | license@php.net so we can mail you a copy immediately.               |
   +----------------------------------------------------------------------+
   | Author: Tsukada Takuya <tsukada@fminn.nagano.nagano.jp>              |
   |         Hironori Sato <satoh@jpnnet.com>                             |
   |         Shigeru Kanemoto <sgk@happysize.co.jp>                       |
   +----------------------------------------------------------------------+
 */

#ifndef _MBSTRING_H
#define _MBSTRING_H

#include "php_version.h"
#define PHP_MBSTRING_VERSION PHP_VERSION

#ifdef PHP_WIN32
#	undef MBSTRING_API
#	ifdef MBSTRING_EXPORTS
#		define MBSTRING_API __declspec(dllexport)
#	elif defined(COMPILE_DL_MBSTRING)
#		define MBSTRING_API __declspec(dllimport)
#	else
#		define MBSTRING_API /* nothing special */
#	endif
#elif defined(__GNUC__) && __GNUC__ >= 4
#	undef MBSTRING_API
#	define MBSTRING_API __attribute__ ((visibility("default")))
#else
#	undef MBSTRING_API
#	define MBSTRING_API /* nothing special */
#endif

#include "libmbfl/mbfl/mbfilter.h"
#include "SAPI.h"

#define PHP_MBSTRING_API 20021024

extern zend_module_entry mbstring_module_entry;
#define phpext_mbstring_ptr &mbstring_module_entry

PHP_MINIT_FUNCTION(mbstring);
PHP_MSHUTDOWN_FUNCTION(mbstring);
PHP_RINIT_FUNCTION(mbstring);
PHP_RSHUTDOWN_FUNCTION(mbstring);
PHP_MINFO_FUNCTION(mbstring);

MBSTRING_API char *php_mb_safe_strrchr(const char *s, unsigned int c, size_t nbytes, const mbfl_encoding *enc);

MBSTRING_API zend_string* php_mb_convert_encoding_ex(
		const char *input, size_t length,
		const mbfl_encoding *to_encoding, const mbfl_encoding *from_encoding);
MBSTRING_API zend_string* php_mb_convert_encoding(
		const char *input, size_t length, const mbfl_encoding *to_encoding,
		const mbfl_encoding **from_encodings, size_t num_from_encodings);

MBSTRING_API size_t php_mb_mbchar_bytes(const char *s, const mbfl_encoding *enc);

MBSTRING_API size_t php_mb_stripos(bool mode, zend_string *haystack, zend_string *needle, zend_long offset, const mbfl_encoding *enc);
MBSTRING_API bool php_mb_check_encoding(const char *input, size_t length, const mbfl_encoding *encoding);

MBSTRING_API const mbfl_encoding* mb_guess_encoding_for_strings(const unsigned char **strings, size_t *str_lengths, size_t n, const mbfl_encoding **elist, unsigned int elist_size, bool strict, bool order_significant);

ZEND_BEGIN_MODULE_GLOBALS(mbstring)
	char *internal_encoding_name;
	const mbfl_encoding *internal_encoding;
	const mbfl_encoding *current_internal_encoding;
	const mbfl_encoding *http_output_encoding;
	const mbfl_encoding *current_http_output_encoding;
	const mbfl_encoding *http_input_identify;
	const mbfl_encoding *http_input_identify_get;
	const mbfl_encoding *http_input_identify_post;
	const mbfl_encoding *http_input_identify_cookie;
	const mbfl_encoding *http_input_identify_string;
	const mbfl_encoding **http_input_list;
	size_t http_input_list_size;
	const mbfl_encoding **detect_order_list;
	size_t detect_order_list_size;
	const mbfl_encoding **current_detect_order_list;
	size_t current_detect_order_list_size;
	enum mbfl_no_encoding *default_detect_order_list;
	size_t default_detect_order_list_size;
	HashTable *all_encodings_list;
	int filter_illegal_mode;
	uint32_t filter_illegal_substchar;
	int current_filter_illegal_mode;
	uint32_t current_filter_illegal_substchar;
	enum mbfl_no_language language;
	bool encoding_translation;
	bool strict_detection;
	size_t illegalchars;
	bool outconv_enabled;
	unsigned int outconv_state;
    void *http_output_conv_mimetypes;
#ifdef HAVE_MBREGEX
    struct _zend_mb_regex_globals *mb_regex_globals;
    zend_long regex_stack_limit;
#endif
	zend_string *last_used_encoding_name;
	const mbfl_encoding *last_used_encoding;
	/* Whether an explicit internal_encoding / http_output / http_input encoding was set. */
	bool internal_encoding_set;
	bool http_output_set;
	bool http_input_set;
#ifdef HAVE_MBREGEX
    zend_long regex_retry_limit;
#endif
ZEND_END_MODULE_GLOBALS(mbstring)

#define MBSTRG(v) ZEND_MODULE_GLOBALS_ACCESSOR(mbstring, v)

#if defined(ZTS) && defined(COMPILE_DL_MBSTRING)
ZEND_TSRMLS_CACHE_EXTERN()
#endif

#endif /* _MBSTRING_H */
ext/mbstring/libmbfl/config.h000064400000000030151730541410012210 0ustar00#include "php_config.h"
ext/mbstring/libmbfl/mbfl/mbfilter.h000064400000012730151730541410013501 0ustar00/*
 * "streamable kanji code filter and converter"
 *
 * Copyright (c) 1998,1999,2000,2001 HappySize, Inc. All rights reserved.
 *
 * This software is released under the GNU Lesser General Public License.
 * (Version 2.1, February 1999)
 * Please read the following detail of the licence (in japanese).
 *
 * ◆使用許諾条件◆
 *
 * このソフトウェアは株式会社ハッピーサイズによって開発されました。株式会社ハッ
 * ピーサイズは、著作権法および万国著作権条約の定めにより、このソフトウェアに関
 * するすべての権利を留保する権利を持ち、ここに行使します。株式会社ハッピーサイ
 * ズは以下に明記した条件に従って、このソフトウェアを使用する排他的ではない権利
 * をお客様に許諾します。何人たりとも、以下の条件に反してこのソフトウェアを使用
 * することはできません。
 *
 * このソフトウェアを「GNU Lesser General Public License (Version 2.1, February
 * 1999)」に示された条件で使用することを、全ての方に許諾します。「GNU Lesser
 * General Public License」を満たさない使用には、株式会社ハッピーサイズから書面
 * による許諾を得る必要があります。
 *
 * 「GNU Lesser General Public License」の全文は以下のウェブページから取得でき
 * ます。「GNU Lesser General Public License」とは、これまでLibrary General
 * Public Licenseと呼ばれていたものです。
 *     http://www.gnu.org/ --- GNUウェブサイト
 *     http://www.gnu.org/copyleft/lesser.html --- ライセンス文面
 * このライセンスの内容がわからない方、守れない方には使用を許諾しません。
 *
 * しかしながら、当社とGNUプロジェクトとの特定の関係を示唆または主張するもので
 * はありません。
 *
 * ◆保証内容◆
 *
 * このソフトウェアは、期待された動作・機能・性能を持つことを目標として設計され
 * 開発されていますが、これを保証するものではありません。このソフトウェアは「こ
 * のまま」の状態で提供されており、たとえばこのソフトウェアの有用性ないし特定の
 * 目的に合致することといった、何らかの保証内容が、明示されたり暗黙に示されてい
 * る場合であっても、その保証は無効です。このソフトウェアを使用した結果ないし使
 * 用しなかった結果によって、直接あるいは間接に受けた身体的な傷害、財産上の損害
 * 、データの損失あるいはその他の全ての損害については、その損害の可能性が使用者
 * 、当社あるいは第三者によって警告されていた場合であっても、当社はその損害の賠
 * 償および補填を行いません。この規定は他の全ての、書面上または書面に無い保証・
 * 契約・規定に優先します。
 *
 * ◆著作権者の連絡先および使用条件についての問い合わせ先◆
 *
 * 〒102-0073
 * 東京都千代田区九段北1-13-5日本地所第一ビル4F
 * 株式会社ハッピーサイズ
 * Phone: 03-3512-3655, Fax: 03-3512-3656
 * Email: sales@happysize.co.jp
 * Web: http://happysize.com/
 *
 * ◆著者◆
 *
 * 金本 茂 <sgk@happysize.co.jp>
 *
 * ◆履歴◆
 *
 * 1998/11/10 sgk implementation in C++
 * 1999/4/25  sgk Cで書きなおし。
 * 1999/4/26  sgk 入力フィルタを実装。漢字コードを推定しながらフィルタを追加。
 * 1999/6/??      Unicodeサポート。
 * 1999/6/22  sgk ライセンスをLGPLに変更。
 *
 */

/*
 * Unicode support
 *
 * Portions copyright (c) 1999,2000,2001 by the PHP3 internationalization team.
 * All rights reserved.
 *
 */

/*
 *
 * streamable kanji code filter and converter
 *    mbfl : Multi Byte FiLter Liblary
 *
 */

#ifndef MBFL_MBFILTER_H
#define MBFL_MBFILTER_H

#include "zend.h"

#include "mbfl_defs.h"
#include "mbfl_consts.h"
#include "mbfl_encoding.h"
#include "mbfl_language.h"
#include "mbfl_string.h"
#include "mbfl_convert.h"

/* Prefer local fix, otherwise need to include too much. */
#ifndef ssize_t
#if defined(_WIN64)
#define ssize_t __int64
#elif defined(_WIN32)
#define ssize_t __int32
#elif defined(__GNUC__) && __GNUC__ >= 4
#define ssize_t long
#endif
#endif

/*
 * version information
 */
#define MBFL_VERSION_MAJOR 1
#define MBFL_VERSION_MINOR 3
#define MBFL_VERSION_TEENY 2

#define MBFL_OUTPUTFILTER_ILLEGAL_MODE_NONE 0
#define MBFL_OUTPUTFILTER_ILLEGAL_MODE_CHAR 1
#define MBFL_OUTPUTFILTER_ILLEGAL_MODE_LONG 2
#define MBFL_OUTPUTFILTER_ILLEGAL_MODE_ENTITY 3
#define MBFL_OUTPUTFILTER_ILLEGAL_MODE_BADUTF8 4 /* For internal use only; deliberately uses invalid UTF-8 byte sequence as error marker */

/*
 * convenience macros
 */
#ifndef MIN
#define MIN(a,b) ((a)<(b)?(a):(b))
#endif

/* Lengths -1 through -16 are reserved for error return values */
static inline int mbfl_is_error(size_t len) {
	return len >= (size_t) -16;
}

#define MBFL_ERROR_NOT_FOUND ((size_t) -1)
#define MBFL_ERROR_ENCODING ((size_t) -4)
#define MBFL_ERROR_EMPTY ((size_t) -8)
#define MBFL_ERROR_OFFSET ((size_t) -16)

/*
 * If specified as length, the substr until the end of the string is taken.
 */
#define MBFL_SUBSTR_UNTIL_END ((size_t) -1)

/*
 * strcut
 */
MBFLAPI extern mbfl_string *
mbfl_strcut(mbfl_string *string, mbfl_string *result, size_t from, size_t length);

#endif	/* MBFL_MBFILTER_H */
ext/mbstring/libmbfl/mbfl/mbfilter_pass.h000064400000002530151730541420014525 0ustar00/*
 * "streamable kanji code filter and converter"
 * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved.
 *
 * LICENSE NOTICES
 *
 * This file is part of "streamable kanji code filter and converter",
 * which is distributed under the terms of GNU Lesser General Public
 * License (version 2) as published by the Free Software Foundation.
 *
 * This software is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU Lesser General Public License for more details.
 *
 * You should have received a copy of the GNU Lesser General Public
 * License along with "streamable kanji code filter and converter";
 * if not, write to the Free Software Foundation, Inc., 59 Temple Place,
 * Suite 330, Boston, MA  02111-1307  USA
 *
 * The author of this file:
 *
 */
/*
 * The source code included in this files was separated from mbfilter.c
 * by moriyoshi koizumi <moriyoshi@php.net> on 4 dec 2002.
 *
 */

#ifndef MBFL_MBFILTER_PASS_H
#define MBFL_MBFILTER_PASS_H

#include "mbfl_defs.h"
#include "mbfilter.h"

MBFLAPI extern const mbfl_encoding mbfl_encoding_pass;
MBFLAPI extern const struct mbfl_convert_vtbl vtbl_pass;

MBFLAPI extern int mbfl_filt_conv_pass(int c, mbfl_convert_filter *filter);

#endif /* MBFL_MBFILTER_PASS_H */
ext/mbstring/libmbfl/mbfl/eaw_table.h000064400000006643151730541420013627 0ustar00/* This file was generated by ext/mbstring/ucgendat/ucgendat.php.
 *
 *                     DO NOT EDIT THIS FILE!
 *
 * East Asian Width table
 *
 * Some characters in East Asian languages are intended to be displayed in a space
 * which is roughly square. (This contrasts with others such as the Latin alphabet,
 * which are taller than they are wide.) To display these East Asian characters
 * properly, twice the horizontal space is used. This must be taken into account
 * when doing things like wrapping text to a specific width.
 *
 * Each pair of numbers in the below table is a range of Unicode codepoints
 * which should be displayed as double-width.
 */

#define FIRST_DOUBLEWIDTH_CODEPOINT 0x1100

static const struct {
	int begin;
	int end;
} mbfl_eaw_table[] = {
	{ 0x1100, 0x115f },
	{ 0x231a, 0x231b },
	{ 0x2329, 0x232a },
	{ 0x23e9, 0x23ec },
	{ 0x23f0, 0x23f0 },
	{ 0x23f3, 0x23f3 },
	{ 0x25fd, 0x25fe },
	{ 0x2614, 0x2615 },
	{ 0x2630, 0x2637 },
	{ 0x2648, 0x2653 },
	{ 0x267f, 0x267f },
	{ 0x268a, 0x268f },
	{ 0x2693, 0x2693 },
	{ 0x26a1, 0x26a1 },
	{ 0x26aa, 0x26ab },
	{ 0x26bd, 0x26be },
	{ 0x26c4, 0x26c5 },
	{ 0x26ce, 0x26ce },
	{ 0x26d4, 0x26d4 },
	{ 0x26ea, 0x26ea },
	{ 0x26f2, 0x26f3 },
	{ 0x26f5, 0x26f5 },
	{ 0x26fa, 0x26fa },
	{ 0x26fd, 0x26fd },
	{ 0x2705, 0x2705 },
	{ 0x270a, 0x270b },
	{ 0x2728, 0x2728 },
	{ 0x274c, 0x274c },
	{ 0x274e, 0x274e },
	{ 0x2753, 0x2755 },
	{ 0x2757, 0x2757 },
	{ 0x2795, 0x2797 },
	{ 0x27b0, 0x27b0 },
	{ 0x27bf, 0x27bf },
	{ 0x2b1b, 0x2b1c },
	{ 0x2b50, 0x2b50 },
	{ 0x2b55, 0x2b55 },
	{ 0x2e80, 0x2e99 },
	{ 0x2e9b, 0x2ef3 },
	{ 0x2f00, 0x2fd5 },
	{ 0x2ff0, 0x303e },
	{ 0x3041, 0x3096 },
	{ 0x3099, 0x30ff },
	{ 0x3105, 0x312f },
	{ 0x3131, 0x318e },
	{ 0x3190, 0x31e5 },
	{ 0x31ef, 0x321e },
	{ 0x3220, 0x3247 },
	{ 0x3250, 0xa48c },
	{ 0xa490, 0xa4c6 },
	{ 0xa960, 0xa97c },
	{ 0xac00, 0xd7a3 },
	{ 0xf900, 0xfaff },
	{ 0xfe10, 0xfe19 },
	{ 0xfe30, 0xfe52 },
	{ 0xfe54, 0xfe66 },
	{ 0xfe68, 0xfe6b },
	{ 0xff01, 0xff60 },
	{ 0xffe0, 0xffe6 },
	{ 0x16fe0, 0x16fe4 },
	{ 0x16ff0, 0x16ff6 },
	{ 0x17000, 0x18cd5 },
	{ 0x18cff, 0x18d1e },
	{ 0x18d80, 0x18df2 },
	{ 0x1aff0, 0x1aff3 },
	{ 0x1aff5, 0x1affb },
	{ 0x1affd, 0x1affe },
	{ 0x1b000, 0x1b122 },
	{ 0x1b132, 0x1b132 },
	{ 0x1b150, 0x1b152 },
	{ 0x1b155, 0x1b155 },
	{ 0x1b164, 0x1b167 },
	{ 0x1b170, 0x1b2fb },
	{ 0x1d300, 0x1d356 },
	{ 0x1d360, 0x1d376 },
	{ 0x1f004, 0x1f004 },
	{ 0x1f0cf, 0x1f0cf },
	{ 0x1f18e, 0x1f18e },
	{ 0x1f191, 0x1f19a },
	{ 0x1f200, 0x1f202 },
	{ 0x1f210, 0x1f23b },
	{ 0x1f240, 0x1f248 },
	{ 0x1f250, 0x1f251 },
	{ 0x1f260, 0x1f265 },
	{ 0x1f300, 0x1f320 },
	{ 0x1f32d, 0x1f335 },
	{ 0x1f337, 0x1f37c },
	{ 0x1f37e, 0x1f393 },
	{ 0x1f3a0, 0x1f3ca },
	{ 0x1f3cf, 0x1f3d3 },
	{ 0x1f3e0, 0x1f3f0 },
	{ 0x1f3f4, 0x1f3f4 },
	{ 0x1f3f8, 0x1f43e },
	{ 0x1f440, 0x1f440 },
	{ 0x1f442, 0x1f4fc },
	{ 0x1f4ff, 0x1f53d },
	{ 0x1f54b, 0x1f54e },
	{ 0x1f550, 0x1f567 },
	{ 0x1f57a, 0x1f57a },
	{ 0x1f595, 0x1f596 },
	{ 0x1f5a4, 0x1f5a4 },
	{ 0x1f5fb, 0x1f64f },
	{ 0x1f680, 0x1f6c5 },
	{ 0x1f6cc, 0x1f6cc },
	{ 0x1f6d0, 0x1f6d2 },
	{ 0x1f6d5, 0x1f6d8 },
	{ 0x1f6dc, 0x1f6df },
	{ 0x1f6eb, 0x1f6ec },
	{ 0x1f6f4, 0x1f6fc },
	{ 0x1f7e0, 0x1f7eb },
	{ 0x1f7f0, 0x1f7f0 },
	{ 0x1f90c, 0x1f93a },
	{ 0x1f93c, 0x1f945 },
	{ 0x1f947, 0x1f9ff },
	{ 0x1fa70, 0x1fa7c },
	{ 0x1fa80, 0x1fa8a },
	{ 0x1fa8e, 0x1fac6 },
	{ 0x1fac8, 0x1fac8 },
	{ 0x1facd, 0x1fadc },
	{ 0x1fadf, 0x1faea },
	{ 0x1faef, 0x1faf8 },
	{ 0x20000, 0x2fffd },
	{ 0x30000, 0x3fffd },
};
ext/mbstring/libmbfl/mbfl/mbfl_defs.h000064400000002732151730541420013620 0ustar00/*
 * "streamable kanji code filter and converter"
 * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved.
 *
 * LICENSE NOTICES
 *
 * This file is part of "streamable kanji code filter and converter",
 * which is distributed under the terms of GNU Lesser General Public
 * License (version 2) as published by the Free Software Foundation.
 *
 * This software is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU Lesser General Public License for more details.
 *
 * You should have received a copy of the GNU Lesser General Public
 * License along with "streamable kanji code filter and converter";
 * if not, write to the Free Software Foundation, Inc., 59 Temple Place,
 * Suite 330, Boston, MA  02111-1307  USA
 *
 * The author of this file:
 *
 */
/*
 * The source code included in this files was separated from mbfilter.h
 * by Moriyoshi Koizumi <moriyoshi@php.net> on 20 Dec 2002. The file
 * mbfilter.h is included in this package .
 *
 */

#ifndef MBFL_DEFS_H
#define MBFL_DEFS_H

#ifdef _WIN32
#ifdef MBFL_DLL_EXPORT
#define MBFLAPI __declspec(dllexport)
#else
#define MBFLAPI __declspec(dllimport)
#endif /* MBFL_DLL_EXPORT */
#else
#if defined(__GNUC__) && __GNUC__ >= 4
#define MBFLAPI __attribute__((visibility("default")))
#else
#define MBFLAPI
#endif /* defined(__GNUC__) && __GNUC__ >= 4 */
#endif /* _WIN32 */

#endif /* MBFL_DEFS_H */
ext/mbstring/libmbfl/mbfl/mbfl_language.h000064400000005464151730541430014470 0ustar00/*
 * "streamable kanji code filter and converter"
 * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved.
 *
 * LICENSE NOTICES
 *
 * This file is part of "streamable kanji code filter and converter",
 * which is distributed under the terms of GNU Lesser General Public
 * License (version 2) as published by the Free Software Foundation.
 *
 * This software is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU Lesser General Public License for more details.
 *
 * You should have received a copy of the GNU Lesser General Public
 * License along with "streamable kanji code filter and converter";
 * if not, write to the Free Software Foundation, Inc., 59 Temple Place,
 * Suite 330, Boston, MA  02111-1307  USA
 *
 * The author of this file:
 *
 */
/*
 * The source code included in this files was separated from mbfilter.h
 * by Moriyoshi Koizumi <moriyoshi@php.net> on 20 Dec 2002. The file
 * mbfilter.h is included in this package .
 *
 */

#ifndef MBFL_LANGUAGE_H
#define MBFL_LANGUAGE_H

#include "mbfl_defs.h"
#include "mbfl_encoding.h"

enum mbfl_no_language {
	mbfl_no_language_invalid = -1,
	mbfl_no_language_neutral,
	mbfl_no_language_uni,
	mbfl_no_language_min,
	mbfl_no_language_catalan,		/* ca */
	mbfl_no_language_danish,		/* da */
	mbfl_no_language_german,		/* de */
	mbfl_no_language_english,		/* en */
	mbfl_no_language_estonian,		/* et */
	mbfl_no_language_greek,			/* el */
	mbfl_no_language_spanish,		/* es */
	mbfl_no_language_french,		/* fr */
	mbfl_no_language_italian,		/* it */
	mbfl_no_language_japanese,		/* ja */
	mbfl_no_language_korean,		/* ko */
	mbfl_no_language_dutch,			/* nl */
	mbfl_no_language_polish,		/* pl */
	mbfl_no_language_portuguese,	        /* pt */
	mbfl_no_language_swedish,		/* sv */
	mbfl_no_language_simplified_chinese,		/* zh-cn */
	mbfl_no_language_traditional_chinese,		/* zh-tw */
	mbfl_no_language_russian,		/* ru */
	mbfl_no_language_ukrainian,		/* ua */
	mbfl_no_language_armenian,		/* hy */
	mbfl_no_language_turkish,		/* tr */
	mbfl_no_language_max
};

typedef enum mbfl_no_language mbfl_language_id;

/*
 * language
 */
typedef struct _mbfl_language {
	enum mbfl_no_language no_language;
	const char *name;
	const char *short_name;
	const char **aliases;
	enum mbfl_no_encoding mail_charset;
	enum mbfl_no_encoding mail_header_encoding;
	enum mbfl_no_encoding mail_body_encoding;
} mbfl_language;

MBFLAPI extern const mbfl_language * mbfl_name2language(const char *name);
MBFLAPI extern const mbfl_language * mbfl_no2language(enum mbfl_no_language no_language);
MBFLAPI extern enum mbfl_no_language mbfl_name2no_language(const char *name);
MBFLAPI extern const char * mbfl_no_language2name(enum mbfl_no_language no_language);


#endif /* MBFL_LANGUAGE_H */
ext/mbstring/libmbfl/mbfl/mbfl_string.h000064400000003115151730541430014202 0ustar00/*
 * "streamable kanji code filter and converter"
 * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved.
 *
 * LICENSE NOTICES
 *
 * This file is part of "streamable kanji code filter and converter",
 * which is distributed under the terms of GNU Lesser General Public
 * License (version 2) as published by the Free Software Foundation.
 *
 * This software is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU Lesser General Public License for more details.
 *
 * You should have received a copy of the GNU Lesser General Public
 * License along with "streamable kanji code filter and converter";
 * if not, write to the Free Software Foundation, Inc., 59 Temple Place,
 * Suite 330, Boston, MA  02111-1307  USA
 *
 * The author of this file:
 *
 */
/*
 * The source code included in this files was separated from mbfilter.h
 * by Moriyoshi Koizumi <moriyoshi@php.net> on 20 Dec 2002. The file
 * mbfilter.h is included in this package .
 *
 */

#ifndef MBFL_STRING_H
#define MBFL_STRING_H

#include <stddef.h>
#include "mbfl_defs.h"
#include "mbfl_encoding.h"
#include "mbfl_language.h"

/*
 * string object
 */
typedef struct _mbfl_string {
	const mbfl_encoding *encoding;
	unsigned char *val;
	size_t len;
} mbfl_string;

MBFLAPI extern void mbfl_string_init(mbfl_string *string);
MBFLAPI extern void mbfl_string_init_set(mbfl_string *string, const mbfl_encoding *encoding);
MBFLAPI extern void mbfl_string_clear(mbfl_string *string);

#endif /* MBFL_STRING_H */
ext/mbstring/libmbfl/mbfl/mbfl_memory_device.h000064400000005134151730541430015526 0ustar00/*
 * "streamable kanji code filter and converter"
 * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved.
 *
 * LICENSE NOTICES
 *
 * This file is part of "streamable kanji code filter and converter",
 * which is distributed under the terms of GNU Lesser General Public
 * License (version 2) as published by the Free Software Foundation.
 *
 * This software is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU Lesser General Public License for more details.
 *
 * You should have received a copy of the GNU Lesser General Public
 * License along with "streamable kanji code filter and converter";
 * if not, write to the Free Software Foundation, Inc., 59 Temple Place,
 * Suite 330, Boston, MA  02111-1307  USA
 *
 * The author of this file:
 *
 */
/*
 * The source code included in this files was separated from mbfilter.h
 * by Moriyoshi Koizumi <moriyoshi@php.net> on 20 Dec 2002. The file
 * mbfilter.h is included in this package .
 *
 */

#ifndef MBFL_MEMORY_DEVICE_H
#define MBFL_MEMORY_DEVICE_H

#include "mbfl_defs.h"
#include "mbfl_string.h"

#define MBFL_MEMORY_DEVICE_ALLOC_SIZE	64

typedef struct _mbfl_memory_device {
	unsigned char *buffer;
	size_t length;
	size_t pos;
	size_t allocsz;
} mbfl_memory_device;

typedef struct _mbfl_wchar_device {
	unsigned int *buffer;
	size_t length;
	size_t pos;
	size_t allocsz;
} mbfl_wchar_device;

MBFLAPI extern void mbfl_memory_device_init(
		mbfl_memory_device *device, size_t initsz, size_t allocsz);
MBFLAPI extern void mbfl_memory_device_realloc(
		mbfl_memory_device *device, size_t initsz, size_t allocsz);
MBFLAPI extern void mbfl_memory_device_clear(mbfl_memory_device *device);
MBFLAPI extern void mbfl_memory_device_reset(mbfl_memory_device *device);
MBFLAPI extern mbfl_string * mbfl_memory_device_result(
		mbfl_memory_device *device, mbfl_string *result);
MBFLAPI extern void mbfl_memory_device_unput(mbfl_memory_device *device);
MBFLAPI extern int mbfl_memory_device_output(int c, void *data);
MBFLAPI extern int mbfl_memory_device_strcat(mbfl_memory_device *device, const char *psrc);
MBFLAPI extern int mbfl_memory_device_strncat(
		mbfl_memory_device *device, const char *psrc, size_t len);
MBFLAPI extern int mbfl_memory_device_devcat(mbfl_memory_device *dest, mbfl_memory_device *src);

MBFLAPI extern void mbfl_wchar_device_init(mbfl_wchar_device *device);
MBFLAPI extern int mbfl_wchar_device_output(int c, void *data);
MBFLAPI extern void mbfl_wchar_device_clear(mbfl_wchar_device *device);

#endif /* MBFL_MEMORY_DEVICE_H */
ext/mbstring/libmbfl/mbfl/mbfl_consts.h000064400000003667151730541440014222 0ustar00/*
 * "streamable kanji code filter and converter"
 * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved.
 *
 * LICENSE NOTICES
 *
 * This file is part of "streamable kanji code filter and converter",
 * which is distributed under the terms of GNU Lesser General Public
 * License (version 2) as published by the Free Software Foundation.
 *
 * This software is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU Lesser General Public License for more details.
 *
 * You should have received a copy of the GNU Lesser General Public
 * License along with "streamable kanji code filter and converter";
 * if not, write to the Free Software Foundation, Inc., 59 Temple Place,
 * Suite 330, Boston, MA  02111-1307  USA
 *
 * The author of this file:
 *
 */
/*
 * The source code included in this files was separated from mbfilter.h
 * by Moriyoshi Koizumi <moriyoshi@php.net> on 20 Dec 2002. The file
 * mbfilter.h is included in this package .
 *
 */

#ifndef MBFL_CONSTS_H
#define MBFL_CONSTS_H

#define MBFL_ENCTYPE_SBCS		0x00000001 /* single-byte encoding */
#define MBFL_ENCTYPE_WCS2		0x00000002 /* 2 bytes/char */
#define MBFL_ENCTYPE_WCS4		0x00000004 /* 4 bytes/char */
#define MBFL_ENCTYPE_GL_UNSAFE	0x00004000

#define MBFL_WCSPLANE_UCS2MAX		0x00010000
#define MBFL_WCSPLANE_UTF32MAX		0x00110000
#define MBFL_WCSPLANE_SUPMIN		0x00010000
#define MBFL_WCSPLANE_SUPMAX		0x00200000

/* Marker for an erroneous input byte (or sequence of bytes) */
#define MBFL_BAD_INPUT (-1)

#define MBFL_OUTPUTFILTER_ILLEGAL_MODE_NONE 0
#define MBFL_OUTPUTFILTER_ILLEGAL_MODE_CHAR 1
#define MBFL_OUTPUTFILTER_ILLEGAL_MODE_LONG 2
#define MBFL_OUTPUTFILTER_ILLEGAL_MODE_ENTITY 3
#define MBFL_OUTPUTFILTER_ILLEGAL_MODE_BADUTF8 4 /* For internal use only; deliberately uses invalid UTF-8 byte sequence as error marker */

#endif /* MBFL_CONSTS_H */
ext/mbstring/libmbfl/mbfl/mbfl_encoding.h000064400000021351151730541440014465 0ustar00/*
 * "streamable kanji code filter and converter"
 * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved.
 *
 * LICENSE NOTICES
 *
 * This file is part of "streamable kanji code filter and converter",
 * which is distributed under the terms of GNU Lesser General Public
 * License (version 2) as published by the Free Software Foundation.
 *
 * This software is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU Lesser General Public License for more details.
 *
 * You should have received a copy of the GNU Lesser General Public
 * License along with "streamable kanji code filter and converter";
 * if not, write to the Free Software Foundation, Inc., 59 Temple Place,
 * Suite 330, Boston, MA  02111-1307  USA
 *
 * The author of this file:
 *
 */
/*
 * The source code included in this files was separated from mbfilter.h
 * by Moriyoshi Koizumi <moriyoshi@php.net> on 20 Dec 2002. The file
 * mbfilter.h is included in this package .
 *
 */

#ifndef MBFL_ENCODING_H
#define MBFL_ENCODING_H

#include "zend.h"
#include "mbfl_defs.h"
#include "mbfl_consts.h"

enum mbfl_no_encoding {
	mbfl_no_encoding_invalid = -1,
	mbfl_no_encoding_pass,
	mbfl_no_encoding_wchar,
	mbfl_no_encoding_base64,
	mbfl_no_encoding_uuencode,
	mbfl_no_encoding_html_ent,
	mbfl_no_encoding_qprint,
	mbfl_no_encoding_7bit,
	mbfl_no_encoding_8bit,
	mbfl_no_encoding_charset_min,
	mbfl_no_encoding_ucs4,
	mbfl_no_encoding_ucs4be,
	mbfl_no_encoding_ucs4le,
	mbfl_no_encoding_ucs2,
	mbfl_no_encoding_ucs2be,
	mbfl_no_encoding_ucs2le,
	mbfl_no_encoding_utf32,
	mbfl_no_encoding_utf32be,
	mbfl_no_encoding_utf32le,
	mbfl_no_encoding_utf16,
	mbfl_no_encoding_utf16be,
	mbfl_no_encoding_utf16le,
	mbfl_no_encoding_utf8,
	mbfl_no_encoding_utf8_docomo,
	mbfl_no_encoding_utf8_kddi_a,
	mbfl_no_encoding_utf8_kddi_b,
	mbfl_no_encoding_utf8_sb,
	mbfl_no_encoding_utf7,
	mbfl_no_encoding_utf7imap,
	mbfl_no_encoding_ascii,
	mbfl_no_encoding_euc_jp,
	mbfl_no_encoding_eucjp2004,
	mbfl_no_encoding_sjis,
	mbfl_no_encoding_eucjp_win,
 	mbfl_no_encoding_sjis_docomo,
 	mbfl_no_encoding_sjis_kddi,
 	mbfl_no_encoding_sjis_sb,
 	mbfl_no_encoding_sjis_mac,
	mbfl_no_encoding_sjis2004,
	mbfl_no_encoding_cp932,
	mbfl_no_encoding_sjiswin,
	mbfl_no_encoding_cp51932,
	mbfl_no_encoding_jis,
	mbfl_no_encoding_2022jp,
	mbfl_no_encoding_2022jp_2004,
	mbfl_no_encoding_2022jp_kddi,
	mbfl_no_encoding_2022jpms,
	mbfl_no_encoding_gb18030,
	mbfl_no_encoding_gb18030_2022,
	mbfl_no_encoding_cp1252,
	mbfl_no_encoding_cp1254,
	mbfl_no_encoding_8859_1,
	mbfl_no_encoding_8859_2,
	mbfl_no_encoding_8859_3,
	mbfl_no_encoding_8859_4,
	mbfl_no_encoding_8859_5,
	mbfl_no_encoding_8859_6,
	mbfl_no_encoding_8859_7,
	mbfl_no_encoding_8859_8,
	mbfl_no_encoding_8859_9,
	mbfl_no_encoding_8859_10,
	mbfl_no_encoding_8859_13,
	mbfl_no_encoding_8859_14,
	mbfl_no_encoding_8859_15,
	mbfl_no_encoding_euc_cn,
	mbfl_no_encoding_cp936,
	mbfl_no_encoding_euc_tw,
	mbfl_no_encoding_big5,
	mbfl_no_encoding_cp950,
	mbfl_no_encoding_euc_kr,
	mbfl_no_encoding_2022kr,
	mbfl_no_encoding_uhc,
	mbfl_no_encoding_hz,
	mbfl_no_encoding_cp1251,
	mbfl_no_encoding_cp866,
	mbfl_no_encoding_koi8r,
	mbfl_no_encoding_koi8u,
	mbfl_no_encoding_8859_16,
	mbfl_no_encoding_armscii8,
	mbfl_no_encoding_cp850,
	mbfl_no_encoding_cp50220,
	mbfl_no_encoding_cp50221,
	mbfl_no_encoding_cp50222,
	mbfl_no_encoding_charset_max
};

struct _mbfl_convert_filter;
struct mbfl_convert_vtbl {
	enum mbfl_no_encoding from;
	enum mbfl_no_encoding to;
	void (*filter_ctor)(struct _mbfl_convert_filter *filter);
	void (*filter_dtor)(struct _mbfl_convert_filter *filter);
	int (*filter_function)(int c, struct _mbfl_convert_filter *filter);
	int (*filter_flush)(struct _mbfl_convert_filter *filter);
	void (*filter_copy)(struct _mbfl_convert_filter *src, struct _mbfl_convert_filter *dest);
};

typedef struct {
	unsigned char *out;
	unsigned char *limit;
	uint32_t state;
	uint32_t errors;
	uint32_t replacement_char;
	unsigned int error_mode;
	zend_string *str;
} mb_convert_buf;

typedef size_t (*mb_to_wchar_fn)(unsigned char **in, size_t *in_len, uint32_t *out, size_t out_len, unsigned int *state);
typedef void (*mb_from_wchar_fn)(uint32_t *in, size_t in_len, mb_convert_buf *out, bool end);
typedef bool (*mb_check_fn)(unsigned char *in, size_t in_len);
typedef zend_string* (*mb_cut_fn)(unsigned char *str, size_t from, size_t len, unsigned char *end);

/* When converting encoded text to a buffer of wchars (Unicode codepoints) using `mb_to_wchar_fn`,
 * the buffer must be at least this size (to work with all supported text encodings) */
#define MBSTRING_MIN_WCHAR_BUFSIZE 5

static inline void mb_convert_buf_init(mb_convert_buf *buf, size_t initsize, uint32_t repl_char, unsigned int err_mode)
{
	buf->state = buf->errors = 0;
	buf->str = emalloc(_ZSTR_STRUCT_SIZE(initsize));
	buf->out = (unsigned char*)ZSTR_VAL(buf->str);
	buf->limit = buf->out + initsize;
	buf->replacement_char = repl_char;
	buf->error_mode = err_mode;
}

#define MB_CONVERT_BUF_ENSURE(buf, out, limit, needed) \
	ZEND_ASSERT(out <= limit); \
	if ((size_t)(limit - out) < (needed)) { \
		size_t oldsize = limit - (unsigned char*)ZSTR_VAL((buf)->str); \
		size_t newsize = oldsize + MAX(oldsize >> 1, needed); \
		zend_string *newstr = erealloc((buf)->str, _ZSTR_STRUCT_SIZE(newsize)); \
		out = (unsigned char*)ZSTR_VAL(newstr) + (out - (unsigned char*)ZSTR_VAL((buf)->str)); \
		limit = (unsigned char*)ZSTR_VAL(newstr) + newsize; \
		(buf)->str = newstr; \
	}

#define MB_CONVERT_BUF_STORE(buf, _out, _limit) (buf)->out = _out; (buf)->limit = _limit

#define MB_CONVERT_BUF_LOAD(buf, _out, _limit) _out = (buf)->out; _limit = (buf)->limit

#define MB_CONVERT_ERROR(buf, out, limit, bad_cp, conv_fn) \
	MB_CONVERT_BUF_STORE(buf, out, limit); \
	mb_illegal_output(bad_cp, conv_fn, buf); \
	MB_CONVERT_BUF_LOAD(buf, out, limit)

static inline unsigned char* mb_convert_buf_add(unsigned char *out, char c)
{
	*out++ = c;
	return out;
}

static inline unsigned char* mb_convert_buf_add2(unsigned char *out, char c1, char c2)
{
	*out++ = c1;
	*out++ = c2;
	return out;
}

static inline unsigned char* mb_convert_buf_add3(unsigned char *out, char c1, char c2, char c3)
{
	*out++ = c1;
	*out++ = c2;
	*out++ = c3;
	return out;
}

static inline unsigned char* mb_convert_buf_add4(unsigned char *out, char c1, char c2, char c3, char c4)
{
	*out++ = c1;
	*out++ = c2;
	*out++ = c3;
	*out++ = c4;
	return out;
}

static inline unsigned char* mb_convert_buf_appends(unsigned char *out, const char *s)
{
	while (*s) {
		*out++ = *s++;
	}
	return out;
}

static inline unsigned char* mb_convert_buf_appendn(unsigned char *out, const char *s, size_t n)
{
	while (n--) {
		*out++ = *s++;
	}
	return out;
}

static inline zend_string* mb_convert_buf_result_raw(mb_convert_buf *buf)
{
	ZEND_ASSERT(buf->out <= buf->limit);
	zend_string *ret = buf->str;
	/* See `zend_string_alloc` in zend_string.h */
	GC_SET_REFCOUNT(ret, 1);
	GC_TYPE_INFO(ret) = GC_STRING;
	ZSTR_H(ret) = 0;
	ZSTR_LEN(ret) = buf->out - (unsigned char*)ZSTR_VAL(ret);
	*(buf->out) = '\0';
	return ret;
}

typedef struct {
	enum mbfl_no_encoding no_encoding;
	const char *name;
	const char *mime_name;
	const char **aliases;
	const unsigned char *mblen_table;
	unsigned int flag;
	const struct mbfl_convert_vtbl *input_filter;
	const struct mbfl_convert_vtbl *output_filter;
	mb_to_wchar_fn to_wchar;
	mb_from_wchar_fn from_wchar;
	mb_check_fn check;
	mb_cut_fn cut;
} mbfl_encoding;

extern const mbfl_encoding mbfl_encoding_utf8;

static inline zend_string* mb_convert_buf_result(mb_convert_buf *buf, const mbfl_encoding *enc)
{
	zend_string *ret = mb_convert_buf_result_raw(buf);
	if (enc == &mbfl_encoding_utf8 && buf->error_mode != MBFL_OUTPUTFILTER_ILLEGAL_MODE_BADUTF8) {
		GC_ADD_FLAGS(ret, IS_STR_VALID_UTF8);
	}
	return ret;
}

/* Used if we initialize an `mb_convert_buf` but then discover we don't actually
 * want to return `zend_string` */
static inline void mb_convert_buf_free(mb_convert_buf *buf)
{
	efree(buf->str);
}

static inline size_t mb_convert_buf_len(mb_convert_buf *buf)
{
	return buf->out - (unsigned char*)ZSTR_VAL(buf->str);
}

static inline void mb_convert_buf_reset(mb_convert_buf *buf, size_t len)
{
	buf->out = (unsigned char*)ZSTR_VAL(buf->str) + len;
	ZEND_ASSERT(buf->out <= buf->limit);
}

MBFLAPI extern const mbfl_encoding *mbfl_name2encoding(const char *name);
MBFLAPI extern const mbfl_encoding *mbfl_name2encoding_ex(const char *name, size_t name_len);
MBFLAPI extern const mbfl_encoding *mbfl_no2encoding(enum mbfl_no_encoding no_encoding);
MBFLAPI extern const mbfl_encoding **mbfl_get_supported_encodings(void);
MBFLAPI extern const char *mbfl_no_encoding2name(enum mbfl_no_encoding no_encoding);
MBFLAPI extern const char *mbfl_encoding_preferred_mime_name(const mbfl_encoding *encoding);

#endif /* MBFL_ENCODING_H */
ext/mbstring/libmbfl/mbfl/mbfilter_8bit.h000064400000002410151730541440014424 0ustar00/*
 * "streamable kanji code filter and converter"
 * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved.
 *
 * LICENSE NOTICES
 *
 * This file is part of "streamable kanji code filter and converter",
 * which is distributed under the terms of GNU Lesser General Public
 * License (version 2) as published by the Free Software Foundation.
 *
 * This software is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU Lesser General Public License for more details.
 *
 * You should have received a copy of the GNU Lesser General Public
 * License along with "streamable kanji code filter and converter";
 * if not, write to the Free Software Foundation, Inc., 59 Temple Place,
 * Suite 330, Boston, MA  02111-1307  USA
 *
 * The author of this file:
 *
 */
/*
 * The source code included in this files was separated from mbfilter.c
 * by Moriyoshi Koizumi <moriyoshi@php.net> on 20 Dec 2002. The file
 * mbfilter.c is included in this package .
 *
 */

#ifndef MBFL_MBFILTER_8BIT_H
#define MBFL_MBFILTER_8BIT_H

#include "mbfl_defs.h"
#include "mbfilter.h"

MBFLAPI extern const mbfl_encoding mbfl_encoding_8bit;

#endif /* MBFL_MBFILTER_8BIT_H */
ext/mbstring/libmbfl/mbfl/mbfl_convert.h000064400000007425151730541440014365 0ustar00/*
 * "streamable kanji code filter and converter"
 * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved.
 *
 * LICENSE NOTICES
 *
 * This file is part of "streamable kanji code filter and converter",
 * which is distributed under the terms of GNU Lesser General Public
 * License (version 2) as published by the Free Software Foundation.
 *
 * This software is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU Lesser General Public License for more details.
 *
 * You should have received a copy of the GNU Lesser General Public
 * License along with "streamable kanji code filter and converter";
 * if not, write to the Free Software Foundation, Inc., 59 Temple Place,
 * Suite 330, Boston, MA  02111-1307  USA
 *
 * The author of this file:
 *
 */
/*
 * The source code included in this files was separated from mbfilter.h
 * by Moriyoshi Koizumi <moriyoshi@php.net> on 20 Dec 2002. The file
 * mbfilter.h is included in this package .
 *
 */

#ifndef MBFL_CONVERT_H
#define MBFL_CONVERT_H

#include "mbfl_defs.h"
#include "mbfl_encoding.h"
#include "mbfl_memory_device.h"

typedef struct _mbfl_convert_filter mbfl_convert_filter;

/* internal */
typedef int (*filter_flush_t)(mbfl_convert_filter*);

/* defined by mbfl_convert_filter_{new,new2,init} */
typedef int (*output_function_t)(int, void*);
typedef int (*flush_function_t)(void *);

struct _mbfl_convert_filter {
	void (*filter_dtor)(mbfl_convert_filter *filter);
	void (*filter_copy)(mbfl_convert_filter *src, mbfl_convert_filter *dest);
	int (*filter_function)(int c, mbfl_convert_filter *filter);
	filter_flush_t  filter_flush;
	output_function_t output_function;
	flush_function_t flush_function;
	void *data;
	int status;
	int cache;
	const mbfl_encoding *from;
	const mbfl_encoding *to;
	int illegal_mode;
	uint32_t illegal_substchar;
	size_t num_illegalchar;
	void *opaque;
};

MBFLAPI extern mbfl_convert_filter *mbfl_convert_filter_new(const mbfl_encoding *from, const mbfl_encoding *to, output_function_t output_function,
	flush_function_t flush_function, void *data);
MBFLAPI extern mbfl_convert_filter *mbfl_convert_filter_new2(const struct mbfl_convert_vtbl *vtbl, output_function_t output_function,
	flush_function_t flush_function, void *data);
MBFLAPI extern void mbfl_convert_filter_delete(mbfl_convert_filter *filter);
MBFLAPI extern int mbfl_convert_filter_feed(int c, mbfl_convert_filter *filter);
MBFLAPI extern unsigned char* mbfl_convert_filter_feed_string(mbfl_convert_filter *filter, unsigned char *p, size_t len);
MBFLAPI extern int mbfl_convert_filter_flush(mbfl_convert_filter *filter);
MBFLAPI extern void mbfl_convert_filter_reset(mbfl_convert_filter *filter, const mbfl_encoding *from, const mbfl_encoding *to);
MBFLAPI extern void mbfl_convert_filter_copy(mbfl_convert_filter *src, mbfl_convert_filter *dist);
MBFLAPI extern int mbfl_filt_conv_illegal_output(int c, mbfl_convert_filter *filter);
MBFLAPI extern const struct mbfl_convert_vtbl * mbfl_convert_filter_get_vtbl(const mbfl_encoding *from, const mbfl_encoding *to);

MBFLAPI extern void mbfl_filt_conv_common_ctor(mbfl_convert_filter *filter);
MBFLAPI extern int mbfl_filt_conv_common_flush(mbfl_convert_filter *filter);

MBFLAPI extern void mbfl_convert_filter_devcat(mbfl_convert_filter *filter, mbfl_memory_device *src);
MBFLAPI extern int mbfl_convert_filter_strcat(mbfl_convert_filter *filter, const unsigned char *p);

MBFLAPI extern zend_string* mb_fast_convert(unsigned char *in, size_t in_len, const mbfl_encoding *from, const mbfl_encoding *to, uint32_t replacement_char, unsigned int error_mode, unsigned int *num_errors);
MBFLAPI extern void mb_illegal_output(uint32_t bad_cp, mb_from_wchar_fn fn, mb_convert_buf* buf);

#endif /* MBFL_CONVERT_H */
ext/mbstring/libmbfl/mbfl/mbfilter_wchar.h000064400000002414151730541440014666 0ustar00/*
 * "streamable kanji code filter and converter"
 * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved.
 *
 * LICENSE NOTICES
 *
 * This file is part of "streamable kanji code filter and converter",
 * which is distributed under the terms of GNU Lesser General Public
 * License (version 2) as published by the Free Software Foundation.
 *
 * This software is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU Lesser General Public License for more details.
 *
 * You should have received a copy of the GNU Lesser General Public
 * License along with "streamable kanji code filter and converter";
 * if not, write to the Free Software Foundation, Inc., 59 Temple Place,
 * Suite 330, Boston, MA  02111-1307  USA
 *
 * The author of this file:
 *
 */
/*
 * The source code included in this files was separated from mbfilter.c
 * by Moriyoshi Koizumi <moriyoshi@php.net> on 20 Dec 2002. The file
 * mbfilter.c is included in this package .
 *
 */

#ifndef MBFL_MBFILTER_WCHAR_H
#define MBFL_MBFILTER_WCHAR_H

#include "mbfl_defs.h"
#include "mbfilter.h"

MBFLAPI extern const mbfl_encoding mbfl_encoding_wchar;

#endif /* MBFL_MBFILTER_WCHAR_H */
ext/mbstring/libmbfl/mbfl/mbfl_filter_output.h000064400000002441151730541440015603 0ustar00/*
 * "streamable kanji code filter and converter"
 * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved.
 *
 * LICENSE NOTICES
 *
 * This file is part of "streamable kanji code filter and converter",
 * which is distributed under the terms of GNU Lesser General Public
 * License (version 2) as published by the Free Software Foundation.
 *
 * This software is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU Lesser General Public License for more details.
 *
 * You should have received a copy of the GNU Lesser General Public
 * License along with "streamable kanji code filter and converter";
 * if not, write to the Free Software Foundation, Inc., 59 Temple Place,
 * Suite 330, Boston, MA  02111-1307  USA
 *
 * The author of this file:
 *
 */
/*
 * The source code included in this files was separated from mbfilter.h
 * by Moriyoshi Koizumi <moriyoshi@php.net> on 20 Dec 2002. The file
 * mbfilter.h is included in this package .
 *
 */

#ifndef MBFL_FILTER_OUTPUT_H
#define MBFL_FILTER_OUTPUT_H

MBFLAPI extern int mbfl_filter_output_pipe(int c, void* data);
MBFLAPI extern int mbfl_filter_output_null(int c, void* data);

#endif /* MBFL_FILTER_OUTPUT_H */
ext/mbstring/php_onig_compat.h000064400000000652151730541440012517 0ustar00#ifndef _PHP_ONIG_COMPAT_H
#define _PHP_ONIG_COMPAT_H

#define re_pattern_buffer           php_mb_re_pattern_buffer
#define regex_t                     php_mb_regex_t
#define re_registers                php_mb_re_registers

/* Required for some distros that conditionally override PV_.
 * As we're in C99 this header is always available. */
#ifndef HAVE_STDARG_H
# define HAVE_STDARG_H
#endif

#endif /* _PHP_ONIG_COMPAT_H */
ext/mbstring/php_mbregex.h000064400000003362151730541440011652 0ustar00/*
   +----------------------------------------------------------------------+
   | Copyright (c) The PHP Group                                          |
   +----------------------------------------------------------------------+
   | This source file is subject to version 3.01 of the PHP license,      |
   | that is bundled with this package in the file LICENSE, and is        |
   | available through the world-wide-web at the following url:           |
   | https://www.php.net/license/3_01.txt                                 |
   | If you did not receive a copy of the PHP license and are unable to   |
   | obtain it through the world-wide-web, please send a note to          |
   | license@php.net so we can mail you a copy immediately.               |
   +----------------------------------------------------------------------+
   | Author: Moriyoshi Koizumi <moriyoshi@php.net>                        |
   +----------------------------------------------------------------------+
 */

#ifndef _PHP_MBREGEX_H
#define _PHP_MBREGEX_H

#ifdef HAVE_MBREGEX

#include "php.h"
#include "zend.h"

#define PHP_MBREGEX_MAXCACHE 50

PHP_MINIT_FUNCTION(mb_regex);
PHP_MSHUTDOWN_FUNCTION(mb_regex);
PHP_RINIT_FUNCTION(mb_regex);
PHP_RSHUTDOWN_FUNCTION(mb_regex);
PHP_MINFO_FUNCTION(mb_regex);

extern char php_mb_oniguruma_version[256];

typedef struct _zend_mb_regex_globals zend_mb_regex_globals;

zend_mb_regex_globals *php_mb_regex_globals_alloc(void);
void php_mb_regex_globals_free(zend_mb_regex_globals *pglobals);
int php_mb_regex_set_mbctype(const char *enc);
int php_mb_regex_set_default_mbctype(const char *encname);
const char *php_mb_regex_get_mbctype(void);
const char *php_mb_regex_get_default_mbctype(void);

#endif /* HAVE_MBREGEX */

#endif /* _PHP_MBREGEX_H */
ext/json/php_json.h000064400000010037151730541450010314 0ustar00/*
  +----------------------------------------------------------------------+
  | Copyright (c) The PHP Group                                          |
  +----------------------------------------------------------------------+
  | This source file is subject to version 3.01 of the PHP license,      |
  | that is bundled with this package in the file LICENSE, and is        |
  | available through the world-wide-web at the following url:           |
  | https://www.php.net/license/3_01.txt                                 |
  | If you did not receive a copy of the PHP license and are unable to   |
  | obtain it through the world-wide-web, please send a note to          |
  | license@php.net so we can mail you a copy immediately.               |
  +----------------------------------------------------------------------+
  | Author: Omar Kilani <omar@php.net>                                   |
  |         Jakub Zelenka <bukka@php.net>                                |
  +----------------------------------------------------------------------+
*/

#ifndef PHP_JSON_H
#define PHP_JSON_H

#include "php_version.h"
#include "zend_smart_str_public.h"

#define PHP_JSON_VERSION PHP_VERSION

extern zend_module_entry json_module_entry;
#define phpext_json_ptr &json_module_entry

#if defined(PHP_WIN32) && defined(JSON_EXPORTS)
#define PHP_JSON_API __declspec(dllexport)
#else
#define PHP_JSON_API PHPAPI
#endif

#ifdef ZTS
#include "TSRM.h"
#endif

extern PHP_JSON_API zend_class_entry *php_json_serializable_ce;

/* error codes */
typedef enum {
	PHP_JSON_ERROR_NONE = 0,
	PHP_JSON_ERROR_DEPTH,
	PHP_JSON_ERROR_STATE_MISMATCH,
	PHP_JSON_ERROR_CTRL_CHAR,
	PHP_JSON_ERROR_SYNTAX,
	PHP_JSON_ERROR_UTF8,
	PHP_JSON_ERROR_RECURSION,
	PHP_JSON_ERROR_INF_OR_NAN,
	PHP_JSON_ERROR_UNSUPPORTED_TYPE,
	PHP_JSON_ERROR_INVALID_PROPERTY_NAME,
	PHP_JSON_ERROR_UTF16,
	PHP_JSON_ERROR_NON_BACKED_ENUM,
} php_json_error_code;

/* json_decode() options */
#define PHP_JSON_OBJECT_AS_ARRAY            (1<<0)
#define PHP_JSON_BIGINT_AS_STRING           (1<<1)

/* json_encode() options */
#define PHP_JSON_HEX_TAG                    (1<<0)
#define PHP_JSON_HEX_AMP                    (1<<1)
#define PHP_JSON_HEX_APOS                   (1<<2)
#define PHP_JSON_HEX_QUOT                   (1<<3)
#define PHP_JSON_FORCE_OBJECT               (1<<4)
#define PHP_JSON_NUMERIC_CHECK              (1<<5)
#define PHP_JSON_UNESCAPED_SLASHES          (1<<6)
#define PHP_JSON_PRETTY_PRINT               (1<<7)
#define PHP_JSON_UNESCAPED_UNICODE          (1<<8)
#define PHP_JSON_PARTIAL_OUTPUT_ON_ERROR    (1<<9)
#define PHP_JSON_PRESERVE_ZERO_FRACTION     (1<<10)
#define PHP_JSON_UNESCAPED_LINE_TERMINATORS (1<<11)

/* json_validate(), json_decode() and json_encode() common options */
#define PHP_JSON_INVALID_UTF8_IGNORE        (1<<20)

/* json_decode() and json_encode() common options */
#define PHP_JSON_INVALID_UTF8_SUBSTITUTE    (1<<21)
#define PHP_JSON_THROW_ON_ERROR             (1<<22)

/* default depth */
#define PHP_JSON_PARSER_DEFAULT_DEPTH 512

ZEND_BEGIN_MODULE_GLOBALS(json)
	int encoder_depth;
	int encode_max_depth;
	php_json_error_code error_code;
ZEND_END_MODULE_GLOBALS(json)

PHP_JSON_API ZEND_EXTERN_MODULE_GLOBALS(json)
#define JSON_G(v) ZEND_MODULE_GLOBALS_ACCESSOR(json, v)

#if defined(ZTS) && defined(COMPILE_DL_JSON)
ZEND_TSRMLS_CACHE_EXTERN()
#endif

PHP_JSON_API zend_string *php_json_encode_string(const char *s, size_t len, int options);

PHP_JSON_API zend_result php_json_encode_ex(smart_str *buf, zval *val, int options, zend_long depth);
PHP_JSON_API zend_result php_json_encode(smart_str *buf, zval *val, int options);
PHP_JSON_API zend_result php_json_decode_ex(zval *return_value, const char *str, size_t str_len, zend_long options, zend_long depth);
PHP_JSON_API bool php_json_validate_ex(const char *str, size_t str_len, zend_long options, zend_long depth);

static inline zend_result php_json_decode(zval *return_value, const char *str, size_t str_len, bool assoc, zend_long depth)
{
	return php_json_decode_ex(return_value, str, str_len, assoc ? PHP_JSON_OBJECT_AS_ARRAY : 0, depth);
}

#endif  /* PHP_JSON_H */
ext/json/php_json_scanner.h000064400000004337151730541450012033 0ustar00/*
  +----------------------------------------------------------------------+
  | Copyright (c) The PHP Group                                          |
  +----------------------------------------------------------------------+
  | This source file is subject to version 3.01 of the PHP license,      |
  | that is bundled with this package in the file LICENSE, and is        |
  | available through the world-wide-web at the following url:           |
  | https://www.php.net/license/3_01.txt                                 |
  | If you did not receive a copy of the PHP license and are unable to   |
  | obtain it through the world-wide-web, please send a note to          |
  | license@php.net so we can mail you a copy immediately.               |
  +----------------------------------------------------------------------+
  | Author: Jakub Zelenka <bukka@php.net>                                |
  +----------------------------------------------------------------------+
*/

#ifndef PHP_JSON_SCANNER_H
#define	PHP_JSON_SCANNER_H

#include "php.h"
#include "php_json.h"

typedef unsigned char php_json_ctype;

typedef struct _php_json_scanner {
	php_json_ctype *cursor;         /* cursor position */
	php_json_ctype *token;          /* token position */
	php_json_ctype *limit;          /* the last read character + 1 position */
	php_json_ctype *marker;         /* marker position for backtracking */
	php_json_ctype *ctxmarker;      /* marker position for context backtracking */
	php_json_ctype *str_start;      /* start position of the string */
	php_json_ctype *pstr;           /* string pointer for escapes conversion */
	zval value;                     /* value */
	int str_esc;                    /* number of extra characters for escaping */
	int state;                      /* condition state */
	int options;                    /* options */
	php_json_error_code errcode;    /* error type if there is an error */
	int utf8_invalid;               /* whether utf8 is invalid */
	int utf8_invalid_count;         /* number of extra character for invalid utf8 */
} php_json_scanner;


void php_json_scanner_init(php_json_scanner *scanner, const char *str, size_t str_len, int options);
int php_json_scan(php_json_scanner *s);

#endif	/* PHP_JSON_SCANNER_H */
ext/json/php_json_parser.h000064400000006145151730541450011675 0ustar00/*
  +----------------------------------------------------------------------+
  | Copyright (c) The PHP Group                                          |
  +----------------------------------------------------------------------+
  | This source file is subject to version 3.01 of the PHP license,      |
  | that is bundled with this package in the file LICENSE, and is        |
  | available through the world-wide-web at the following url:           |
  | https://www.php.net/license/3_01.txt                                 |
  | If you did not receive a copy of the PHP license and are unable to   |
  | obtain it through the world-wide-web, please send a note to          |
  | license@php.net so we can mail you a copy immediately.               |
  +----------------------------------------------------------------------+
  | Author: Jakub Zelenka <bukka@php.net>                                |
  +----------------------------------------------------------------------+
*/

#ifndef PHP_JSON_PARSER_H
#define	PHP_JSON_PARSER_H

#include "php.h"
#include "php_json_scanner.h"

typedef struct _php_json_parser php_json_parser;

typedef int (*php_json_parser_func_array_create_t)(
		php_json_parser *parser, zval *array);
typedef int (*php_json_parser_func_array_append_t)(
		php_json_parser *parser, zval *array, zval *zvalue);
typedef int (*php_json_parser_func_array_start_t)(
		php_json_parser *parser);
typedef int (*php_json_parser_func_array_end_t)(
		php_json_parser *parser, zval *object);
typedef int (*php_json_parser_func_object_create_t)(
		php_json_parser *parser, zval *object);
typedef int (*php_json_parser_func_object_update_t)(
		php_json_parser *parser, zval *object, zend_string *key, zval *zvalue);
typedef int (*php_json_parser_func_object_start_t)(
		php_json_parser *parser);
typedef int (*php_json_parser_func_object_end_t)(
		php_json_parser *parser, zval *object);

typedef struct _php_json_parser_methods {
	php_json_parser_func_array_create_t array_create;
	php_json_parser_func_array_append_t array_append;
	php_json_parser_func_array_start_t array_start;
	php_json_parser_func_array_end_t array_end;
	php_json_parser_func_object_create_t object_create;
	php_json_parser_func_object_update_t object_update;
	php_json_parser_func_object_start_t object_start;
	php_json_parser_func_object_end_t object_end;
} php_json_parser_methods;

struct _php_json_parser {
	php_json_scanner scanner;
	zval *return_value;
	int depth;
	int max_depth;
	php_json_parser_methods methods;
};

PHP_JSON_API void php_json_parser_init_ex(
		php_json_parser *parser,
		zval *return_value,
		const char *str,
		size_t str_len,
		int options,
		int max_depth,
		const php_json_parser_methods *methods);

PHP_JSON_API void php_json_parser_init(
		php_json_parser *parser,
		zval *return_value,
		const char *str,
		size_t str_len,
		int options,
		int max_depth);

PHP_JSON_API php_json_error_code php_json_parser_error_code(const php_json_parser *parser);

PHP_JSON_API int php_json_parse(php_json_parser *parser);

int php_json_yyparse(php_json_parser *parser);

const php_json_parser_methods* php_json_get_validate_methods(void);

#endif	/* PHP_JSON_PARSER_H */
ext/iconv/php_iconv.h000064400000005612151730541460010632 0ustar00/*
   +----------------------------------------------------------------------+
   | Copyright (c) The PHP Group                                          |
   +----------------------------------------------------------------------+
   | This source file is subject to version 3.01 of the PHP license,      |
   | that is bundled with this package in the file LICENSE, and is        |
   | available through the world-wide-web at the following url:           |
   | https://www.php.net/license/3_01.txt                                 |
   | If you did not receive a copy of the PHP license and are unable to   |
   | obtain it through the world-wide-web, please send a note to          |
   | license@php.net so we can mail you a copy immediately.               |
   +----------------------------------------------------------------------+
   | Authors: Rui Hirokawa <rui_hirokawa@ybb.ne.jp>                       |
   |          Stig Bakken <ssb@php.net>                                   |
   +----------------------------------------------------------------------+
 */

#ifndef PHP_ICONV_H
#define PHP_ICONV_H

#ifdef PHP_WIN32
# ifdef PHP_ICONV_EXPORTS
#  define PHP_ICONV_API __declspec(dllexport)
# else
#  define PHP_ICONV_API __declspec(dllimport)
# endif
#elif defined(__GNUC__) && __GNUC__ >= 4
# define PHP_ICONV_API __attribute__ ((visibility("default")))
#else
# define PHP_ICONV_API
#endif

#include "php_version.h"
#define PHP_ICONV_VERSION PHP_VERSION

#ifdef HAVE_ICONV
extern zend_module_entry iconv_module_entry;
#define iconv_module_ptr &iconv_module_entry

PHP_MINIT_FUNCTION(miconv);
PHP_MSHUTDOWN_FUNCTION(miconv);
PHP_MINFO_FUNCTION(miconv);

ZEND_BEGIN_MODULE_GLOBALS(iconv)
	char *input_encoding;
	char *internal_encoding;
	char *output_encoding;
ZEND_END_MODULE_GLOBALS(iconv)

#define ICONVG(v) ZEND_MODULE_GLOBALS_ACCESSOR(iconv, v)

#if defined(ZTS) && defined(COMPILE_DL_ICONV)
ZEND_TSRMLS_CACHE_EXTERN()
#endif

#ifdef HAVE_IBM_ICONV
# define ICONV_ASCII_ENCODING "IBM-850"
# define ICONV_UCS4_ENCODING "UCS-4"
#else
# define ICONV_ASCII_ENCODING "ASCII"
# define ICONV_UCS4_ENCODING "UCS-4LE"
#endif

#ifndef ICONV_CSNMAXLEN
#define ICONV_CSNMAXLEN 64
#endif

/* {{{ typedef enum php_iconv_err_t */
typedef enum _php_iconv_err_t {
	PHP_ICONV_ERR_SUCCESS           = 0,
	PHP_ICONV_ERR_CONVERTER         = 1,
	PHP_ICONV_ERR_WRONG_CHARSET     = 2,
	PHP_ICONV_ERR_TOO_BIG           = 3,
	PHP_ICONV_ERR_ILLEGAL_SEQ       = 4,
	PHP_ICONV_ERR_ILLEGAL_CHAR      = 5,
	PHP_ICONV_ERR_UNKNOWN           = 6,
	PHP_ICONV_ERR_MALFORMED         = 7,
	PHP_ICONV_ERR_ALLOC             = 8,
	PHP_ICONV_ERR_OUT_BY_BOUNDS     = 9
} php_iconv_err_t;
/* }}} */

PHP_ICONV_API php_iconv_err_t php_iconv_string(const char * in_p, size_t in_len, zend_string **out, const char *out_charset, const char *in_charset);

#else

#define iconv_module_ptr NULL

#endif /* HAVE_ICONV */

#define phpext_iconv_ptr iconv_module_ptr

#endif	/* PHP_ICONV_H */
ext/spl/spl_exceptions.h000064400000003565151730541460011371 0ustar00/*
   +----------------------------------------------------------------------+
   | Copyright (c) The PHP Group                                          |
   +----------------------------------------------------------------------+
   | This source file is subject to version 3.01 of the PHP license,      |
   | that is bundled with this package in the file LICENSE, and is        |
   | available through the world-wide-web at the following url:           |
   | https://www.php.net/license/3_01.txt                                 |
   | If you did not receive a copy of the PHP license and are unable to   |
   | obtain it through the world-wide-web, please send a note to          |
   | license@php.net so we can mail you a copy immediately.               |
   +----------------------------------------------------------------------+
   | Authors: Marcus Boerger <helly@php.net>                              |
   +----------------------------------------------------------------------+
 */

#ifndef SPL_EXCEPTIONS_H
#define SPL_EXCEPTIONS_H

#include "php.h"

extern PHPAPI zend_class_entry *spl_ce_LogicException;
extern PHPAPI zend_class_entry *spl_ce_BadFunctionCallException;
extern PHPAPI zend_class_entry *spl_ce_BadMethodCallException;
extern PHPAPI zend_class_entry *spl_ce_DomainException;
extern PHPAPI zend_class_entry *spl_ce_InvalidArgumentException;
extern PHPAPI zend_class_entry *spl_ce_LengthException;
extern PHPAPI zend_class_entry *spl_ce_OutOfRangeException;

extern PHPAPI zend_class_entry *spl_ce_RuntimeException;
extern PHPAPI zend_class_entry *spl_ce_OutOfBoundsException;
extern PHPAPI zend_class_entry *spl_ce_OverflowException;
extern PHPAPI zend_class_entry *spl_ce_RangeException;
extern PHPAPI zend_class_entry *spl_ce_UnderflowException;
extern PHPAPI zend_class_entry *spl_ce_UnexpectedValueException;

PHP_MINIT_FUNCTION(spl_exceptions);

#endif /* SPL_EXCEPTIONS_H */
ext/spl/spl_array.h000064400000003343151730541470010321 0ustar00/*
   +----------------------------------------------------------------------+
   | Copyright (c) The PHP Group                                          |
   +----------------------------------------------------------------------+
   | This source file is subject to version 3.01 of the PHP license,      |
   | that is bundled with this package in the file LICENSE, and is        |
   | available through the world-wide-web at the following url:           |
   | https://www.php.net/license/3_01.txt                                 |
   | If you did not receive a copy of the PHP license and are unable to   |
   | obtain it through the world-wide-web, please send a note to          |
   | license@php.net so we can mail you a copy immediately.               |
   +----------------------------------------------------------------------+
   | Authors: Marcus Boerger <helly@php.net>                              |
   +----------------------------------------------------------------------+
 */

#ifndef SPL_ARRAY_H
#define SPL_ARRAY_H

#include "php.h"

#define SPL_ARRAY_STD_PROP_LIST      0x00000001
#define SPL_ARRAY_ARRAY_AS_PROPS     0x00000002
#define SPL_ARRAY_CHILD_ARRAYS_ONLY  0x00000004
#define SPL_ARRAY_IS_SELF            0x01000000
#define SPL_ARRAY_USE_OTHER          0x02000000
#define SPL_ARRAY_INT_MASK           0xFFFF0000
#define SPL_ARRAY_CLONE_MASK         0x0100FFFF

extern PHPAPI zend_class_entry *spl_ce_ArrayObject;
extern PHPAPI zend_class_entry *spl_ce_ArrayIterator;
extern PHPAPI zend_class_entry *spl_ce_RecursiveArrayIterator;

PHP_MINIT_FUNCTION(spl_array);

extern void spl_array_iterator_append(zval *object, zval *append_value);
extern void spl_array_iterator_key(zval *object, zval *return_value);

#endif /* SPL_ARRAY_H */
ext/spl/spl_functions.h000064400000003407151730541500011206 0ustar00/*
   +----------------------------------------------------------------------+
   | Copyright (c) The PHP Group                                          |
   +----------------------------------------------------------------------+
   | This source file is subject to version 3.01 of the PHP license,      |
   | that is bundled with this package in the file LICENSE, and is        |
   | available through the world-wide-web at the following url:           |
   | https://www.php.net/license/3_01.txt                                 |
   | If you did not receive a copy of the PHP license and are unable to   |
   | obtain it through the world-wide-web, please send a note to          |
   | license@php.net so we can mail you a copy immediately.               |
   +----------------------------------------------------------------------+
   | Authors: Marcus Boerger <helly@php.net>                              |
   +----------------------------------------------------------------------+
 */

#ifndef PHP_FUNCTIONS_H
#define PHP_FUNCTIONS_H

#include "php.h"

/* sub: whether to allow subclasses/interfaces
   allow = 0: allow all classes and interfaces
   allow > 0: allow all that match and mask ce_flags
   allow < 0: disallow all that match and mask ce_flags
 */
void spl_add_class_name(zval * list, zend_class_entry * pce, int allow, int ce_flags);
void spl_add_interfaces(zval * list, zend_class_entry * pce, int allow, int ce_flags);
void spl_add_traits(zval * list, zend_class_entry * pce, int allow, int ce_flags);
void spl_add_classes(zend_class_entry *pce, zval *list, bool sub, int allow, int ce_flags);

void spl_set_private_debug_info_property(const zend_class_entry *ce, const char *property, size_t property_len, HashTable *debug_info, zval *value);

#endif /* PHP_FUNCTIONS_H */
ext/spl/spl_directory.h000064400000011774151730541500011210 0ustar00/*
   +----------------------------------------------------------------------+
   | Copyright (c) The PHP Group                                          |
   +----------------------------------------------------------------------+
   | This source file is subject to version 3.01 of the PHP license,      |
   | that is bundled with this package in the file LICENSE, and is        |
   | available through the world-wide-web at the following url:           |
   | https://www.php.net/license/3_01.txt                                 |
   | If you did not receive a copy of the PHP license and are unable to   |
   | obtain it through the world-wide-web, please send a note to          |
   | license@php.net so we can mail you a copy immediately.               |
   +----------------------------------------------------------------------+
   | Authors: Marcus Boerger <helly@php.net>                              |
   +----------------------------------------------------------------------+
 */

#ifndef SPL_DIRECTORY_H
#define SPL_DIRECTORY_H

#include "php.h"

extern PHPAPI zend_class_entry *spl_ce_SplFileInfo;
extern PHPAPI zend_class_entry *spl_ce_DirectoryIterator;
extern PHPAPI zend_class_entry *spl_ce_FilesystemIterator;
extern PHPAPI zend_class_entry *spl_ce_RecursiveDirectoryIterator;
extern PHPAPI zend_class_entry *spl_ce_GlobIterator;
extern PHPAPI zend_class_entry *spl_ce_SplFileObject;
extern PHPAPI zend_class_entry *spl_ce_SplTempFileObject;

PHP_MINIT_FUNCTION(spl_directory);

/* Internal objecte structure and helpers for Directory and File SPL objects */
typedef struct _spl_filesystem_object  spl_filesystem_object;

typedef void (*spl_foreign_dtor_t)(spl_filesystem_object *object);
typedef void (*spl_foreign_clone_t)(spl_filesystem_object *src, spl_filesystem_object *dst);

PHPAPI zend_string *spl_filesystem_object_get_path(const spl_filesystem_object *intern);

typedef struct _spl_other_handler {
	spl_foreign_dtor_t     dtor;
	spl_foreign_clone_t    clone;
} spl_other_handler;

typedef enum {
	SPL_FS_INFO, /* must be 0 */
	SPL_FS_DIR,
	SPL_FS_FILE
} SPL_FS_OBJ_TYPE;

struct _spl_filesystem_object {
	void               *oth;
	const spl_other_handler  *oth_handler;
	zend_string        *path;
	zend_string        *orig_path;
	zend_string        *file_name;
	SPL_FS_OBJ_TYPE    type;
	zend_long               flags;
	zend_class_entry   *file_class;
	zend_class_entry   *info_class;
	union {
		struct {
			php_stream         *dirp;
			zend_string        *sub_path;
			int                index;
			zend_function      *func_rewind;
			zend_function      *func_next;
			zend_function      *func_valid;
			php_stream_dirent  entry;
		} dir;
		struct {
			php_stream         *stream;
			php_stream_context *context;
			zval               *zcontext;
			zend_string        *open_mode;
			zval               current_zval;
			zend_string       *current_line;
			size_t             max_line_len;
			zend_long               current_line_num;
			zval               zresource;
			zend_function      *func_getCurr;
			char               delimiter;
			char               enclosure;
			int                escape;
			bool               is_escape_default;
		} file;
	} u;
	zend_object        std;
};

#define SPL_FILE_OBJECT_DROP_NEW_LINE      0x00000001 /* drop new lines */
#define SPL_FILE_OBJECT_READ_AHEAD         0x00000002 /* read on rewind/next */
#define SPL_FILE_OBJECT_SKIP_EMPTY         0x00000004 /* skip empty lines */
#define SPL_FILE_OBJECT_READ_CSV           0x00000008 /* read via fgetcsv */
#define SPL_FILE_OBJECT_MASK               0x0000000F /* read via fgetcsv */

#define SPL_FILE_DIR_CURRENT_AS_FILEINFO   0x00000000 /* make RecursiveDirectoryTree::current() return SplFileInfo */
#define SPL_FILE_DIR_CURRENT_AS_SELF       0x00000010 /* make RecursiveDirectoryTree::current() return getSelf() */
#define SPL_FILE_DIR_CURRENT_AS_PATHNAME   0x00000020 /* make RecursiveDirectoryTree::current() return getPathname() */
#define SPL_FILE_DIR_CURRENT_MODE_MASK     0x000000F0 /* mask RecursiveDirectoryTree::current() */
#define SPL_FILE_DIR_CURRENT(intern,mode)  ((intern->flags&SPL_FILE_DIR_CURRENT_MODE_MASK)==mode)

#define SPL_FILE_DIR_KEY_AS_PATHNAME       0x00000000 /* make RecursiveDirectoryTree::key() return getPathname() */
#define SPL_FILE_DIR_KEY_AS_FILENAME       0x00000100 /* make RecursiveDirectoryTree::key() return getFilename() */
#define SPL_FILE_DIR_KEY_MODE_MASK         0x00000F00 /* mask RecursiveDirectoryTree::key() */
#define SPL_FILE_NEW_CURRENT_AND_KEY       SPL_FILE_DIR_KEY_AS_FILENAME|SPL_FILE_DIR_CURRENT_AS_FILEINFO
#define SPL_FILE_DIR_KEY(intern,mode)      ((intern->flags&SPL_FILE_DIR_KEY_MODE_MASK)==mode)

#define SPL_FILE_DIR_SKIPDOTS              0x00001000 /* Tells whether it should skip dots or not */
#define SPL_FILE_DIR_UNIXPATHS             0x00002000 /* Whether to unixify path separators */
#define SPL_FILE_DIR_FOLLOW_SYMLINKS       0x00004000 /* make RecursiveDirectoryTree::hasChildren() follow symlinks */
#define SPL_FILE_DIR_OTHERS_MASK           0x00007000 /* mask used for get/setFlags */

#endif /* SPL_DIRECTORY_H */
ext/spl/spl_iterators.h000064400000007654151730541510011223 0ustar00/*
   +----------------------------------------------------------------------+
   | Copyright (c) The PHP Group                                          |
   +----------------------------------------------------------------------+
   | This source file is subject to version 3.01 of the PHP license,      |
   | that is bundled with this package in the file LICENSE, and is        |
   | available through the world-wide-web at the following url:           |
   | https://www.php.net/license/3_01.txt                                 |
   | If you did not receive a copy of the PHP license and are unable to   |
   | obtain it through the world-wide-web, please send a note to          |
   | license@php.net so we can mail you a copy immediately.               |
   +----------------------------------------------------------------------+
   | Authors: Marcus Boerger <helly@php.net>                              |
   +----------------------------------------------------------------------+
 */

#ifndef SPL_ITERATORS_H
#define SPL_ITERATORS_H

#include "php.h"

extern PHPAPI zend_class_entry *spl_ce_AppendIterator;
extern PHPAPI zend_class_entry *spl_ce_CachingIterator;
extern PHPAPI zend_class_entry *spl_ce_CallbackFilterIterator;
extern PHPAPI zend_class_entry *spl_ce_EmptyIterator;
extern PHPAPI zend_class_entry *spl_ce_FilterIterator;
extern PHPAPI zend_class_entry *spl_ce_InfiniteIterator;
extern PHPAPI zend_class_entry *spl_ce_IteratorIterator;
extern PHPAPI zend_class_entry *spl_ce_LimitIterator;
extern PHPAPI zend_class_entry *spl_ce_NoRewindIterator;
extern PHPAPI zend_class_entry *spl_ce_OuterIterator;
extern PHPAPI zend_class_entry *spl_ce_ParentIterator;
extern PHPAPI zend_class_entry *spl_ce_RecursiveCachingIterator;
extern PHPAPI zend_class_entry *spl_ce_RecursiveCallbackFilterIterator;
extern PHPAPI zend_class_entry *spl_ce_RecursiveFilterIterator;
extern PHPAPI zend_class_entry *spl_ce_RecursiveIterator;
extern PHPAPI zend_class_entry *spl_ce_RecursiveIteratorIterator;
extern PHPAPI zend_class_entry *spl_ce_RecursiveRegexIterator;
extern PHPAPI zend_class_entry *spl_ce_RecursiveTreeIterator;
extern PHPAPI zend_class_entry *spl_ce_RegexIterator;
extern PHPAPI zend_class_entry *spl_ce_SeekableIterator;

PHP_MINIT_FUNCTION(spl_iterators);


typedef enum {
	RIT_LEAVES_ONLY = 0,
	RIT_SELF_FIRST  = 1,
	RIT_CHILD_FIRST = 2
} RecursiveIteratorMode;

#define RIT_CATCH_GET_CHILD CIT_CATCH_GET_CHILD

typedef enum {
	RTIT_BYPASS_CURRENT = 4,
	RTIT_BYPASS_KEY	    = 8
} RecursiveTreeIteratorFlags;

typedef enum {
	DIT_Default = 0,
	DIT_FilterIterator = DIT_Default,
	DIT_RecursiveFilterIterator = DIT_Default,
	DIT_ParentIterator = DIT_Default,
	DIT_LimitIterator,
	DIT_CachingIterator,
	DIT_RecursiveCachingIterator,
	DIT_IteratorIterator,
	DIT_NoRewindIterator,
	DIT_InfiniteIterator,
	DIT_AppendIterator,
	DIT_RegexIterator,
	DIT_RecursiveRegexIterator,
	DIT_CallbackFilterIterator,
	DIT_RecursiveCallbackFilterIterator,
	DIT_Unknown = ~0
} dual_it_type;

typedef enum {
	RIT_Default = 0,
	RIT_RecursiveIteratorIterator = RIT_Default,
	RIT_RecursiveTreeIterator,
	RIT_Unknow = ~0
} recursive_it_it_type;

enum {
	/* public */
	CIT_CALL_TOSTRING        = 0x00000001,
	CIT_TOSTRING_USE_KEY     = 0x00000002,
	CIT_TOSTRING_USE_CURRENT = 0x00000004,
	CIT_TOSTRING_USE_INNER   = 0x00000008,
	CIT_CATCH_GET_CHILD      = 0x00000010,
	CIT_FULL_CACHE           = 0x00000100,
	CIT_PUBLIC               = 0x0000FFFF,
	/* private */
	CIT_VALID                = 0x00010000,
	CIT_HAS_CHILDREN         = 0x00020000
};

enum {
	/* public */
	REGIT_USE_KEY            = 0x00000001,
	REGIT_INVERTED           = 0x00000002
};

typedef enum {
	REGIT_MODE_MATCH,
	REGIT_MODE_GET_MATCH,
	REGIT_MODE_ALL_MATCHES,
	REGIT_MODE_SPLIT,
	REGIT_MODE_REPLACE,
	REGIT_MODE_MAX
} regex_mode;

typedef int (*spl_iterator_apply_func_t)(zend_object_iterator *iter, void *puser);

PHPAPI zend_result spl_iterator_apply(zval *obj, spl_iterator_apply_func_t apply_func, void *puser);

#endif /* SPL_ITERATORS_H */
ext/spl/php_spl.h000064400000002556151730541520007773 0ustar00/*
   +----------------------------------------------------------------------+
   | Copyright (c) The PHP Group                                          |
   +----------------------------------------------------------------------+
   | This source file is subject to version 3.01 of the PHP license,      |
   | that is bundled with this package in the file LICENSE, and is        |
   | available through the world-wide-web at the following url:           |
   | https://www.php.net/license/3_01.txt                                 |
   | If you did not receive a copy of the PHP license and are unable to   |
   | obtain it through the world-wide-web, please send a note to          |
   | license@php.net so we can mail you a copy immediately.               |
   +----------------------------------------------------------------------+
   | Authors: Marcus Boerger <helly@php.net>                              |
   +----------------------------------------------------------------------+
 */

#ifndef PHP_SPL_H
#define PHP_SPL_H

#include "php.h"

#define PHP_SPL_VERSION PHP_VERSION

extern zend_module_entry spl_module_entry;
#define phpext_spl_ptr &spl_module_entry

PHP_MINIT_FUNCTION(spl);
PHP_MSHUTDOWN_FUNCTION(spl);
PHP_RINIT_FUNCTION(spl);
PHP_RSHUTDOWN_FUNCTION(spl);
PHP_MINFO_FUNCTION(spl);

PHPAPI zend_string *php_spl_object_hash(zend_object *obj);

#endif /* PHP_SPL_H */
ext/spl/spl_dllist.h000064400000003446151730541520010476 0ustar00/*
   +----------------------------------------------------------------------+
   | Copyright (c) The PHP Group                                          |
   +----------------------------------------------------------------------+
   | This source file is subject to version 3.01 of the PHP license,      |
   | that is bundled with this package in the file LICENSE, and is        |
   | available through the world-wide-web at the following url:           |
   | https://www.php.net/license/3_01.txt                                 |
   | If you did not receive a copy of the PHP license and are unable to   |
   | obtain it through the world-wide-web, please send a note to          |
   | license@php.net so we can mail you a copy immediately.               |
   +----------------------------------------------------------------------+
   | Authors: Etienne Kneuss <colder@php.net>                             |
   +----------------------------------------------------------------------+
 */

#ifndef SPL_DLLIST_H
#define SPL_DLLIST_H

#include "php.h"

#define SPL_DLLIST_IT_KEEP   0x00000000
#define SPL_DLLIST_IT_FIFO   0x00000000 /* FIFO flag makes the iterator traverse the structure as a FirstInFirstOut */
#define SPL_DLLIST_IT_DELETE 0x00000001 /* Delete flag makes the iterator delete the current element on next */
#define SPL_DLLIST_IT_LIFO   0x00000002 /* LIFO flag makes the iterator traverse the structure as a LastInFirstOut */
#define SPL_DLLIST_IT_MASK   0x00000003 /* Mask to isolate flags related to iterators */
#define SPL_DLLIST_IT_FIX    0x00000004 /* Backward/Forward bit is fixed */

extern PHPAPI zend_class_entry *spl_ce_SplDoublyLinkedList;
extern PHPAPI zend_class_entry *spl_ce_SplQueue;
extern PHPAPI zend_class_entry *spl_ce_SplStack;

PHP_MINIT_FUNCTION(spl_dllist);

#endif /* SPL_DLLIST_H */
ext/spl/spl_observer.h000064400000002702151730541530011025 0ustar00/*
   +----------------------------------------------------------------------+
   | Copyright (c) The PHP Group                                          |
   +----------------------------------------------------------------------+
   | This source file is subject to version 3.01 of the PHP license,      |
   | that is bundled with this package in the file LICENSE, and is        |
   | available through the world-wide-web at the following url:           |
   | https://www.php.net/license/3_01.txt                                 |
   | If you did not receive a copy of the PHP license and are unable to   |
   | obtain it through the world-wide-web, please send a note to          |
   | license@php.net so we can mail you a copy immediately.               |
   +----------------------------------------------------------------------+
   | Authors: Marcus Boerger <helly@php.net>                              |
   +----------------------------------------------------------------------+
 */

#ifndef SPL_OBSERVER_H
#define SPL_OBSERVER_H

#include "php.h"

typedef enum {
	MIT_NEED_ANY     = 0,
	MIT_NEED_ALL     = 1,
	MIT_KEYS_NUMERIC = 0,
	MIT_KEYS_ASSOC   = 2
} MultipleIteratorFlags;

extern PHPAPI zend_class_entry *spl_ce_SplObserver;
extern PHPAPI zend_class_entry *spl_ce_SplSubject;
extern PHPAPI zend_class_entry *spl_ce_SplObjectStorage;
extern PHPAPI zend_class_entry *spl_ce_MultipleIterator;

PHP_MINIT_FUNCTION(spl_observer);

#endif /* SPL_OBSERVER_H */
ext/spl/spl_fixedarray.h000064400000002316151730541540011336 0ustar00/*
  +----------------------------------------------------------------------+
  | Copyright (c) The PHP Group                                          |
  +----------------------------------------------------------------------+
  | This source file is subject to version 3.01 of the PHP license,      |
  | that is bundled with this package in the file LICENSE, and is        |
  | available through the world-wide-web at the following url:           |
  | https://www.php.net/license/3_01.txt                                 |
  | If you did not receive a copy of the PHP license and are unable to   |
  | obtain it through the world-wide-web, please send a note to          |
  | license@php.net so we can mail you a copy immediately.               |
  +----------------------------------------------------------------------+
  | Author: Antony Dovgal <tony@daylessday.org>                          |
  |         Etienne Kneuss <colder@php.net>                              |
  +----------------------------------------------------------------------+
*/

#ifndef SPL_FIXEDARRAY_H
#define SPL_FIXEDARRAY_H

extern PHPAPI zend_class_entry *spl_ce_SplFixedArray;

PHP_MINIT_FUNCTION(spl_fixedarray);

#endif	/* SPL_FIXEDARRAY_H */
ext/spl/spl_heap.h000064400000002726151730541540010122 0ustar00/*
   +----------------------------------------------------------------------+
   | Copyright (c) The PHP Group                                          |
   +----------------------------------------------------------------------+
   | This source file is subject to version 3.01 of the PHP license,      |
   | that is bundled with this package in the file LICENSE, and is        |
   | available through the world-wide-web at the following url:           |
   | https://www.php.net/license/3_01.txt                                 |
   | If you did not receive a copy of the PHP license and are unable to   |
   | obtain it through the world-wide-web, please send a note to          |
   | license@php.net so we can mail you a copy immediately.               |
   +----------------------------------------------------------------------+
   | Authors: Etienne Kneuss <colder@php.net>                             |
   +----------------------------------------------------------------------+
 */

#ifndef SPL_HEAP_H
#define SPL_HEAP_H

#include "php.h"

#define SPL_PQUEUE_EXTR_MASK     0x00000003
#define SPL_PQUEUE_EXTR_BOTH     0x00000003
#define SPL_PQUEUE_EXTR_DATA     0x00000001
#define SPL_PQUEUE_EXTR_PRIORITY 0x00000002

extern PHPAPI zend_class_entry *spl_ce_SplHeap;
extern PHPAPI zend_class_entry *spl_ce_SplMinHeap;
extern PHPAPI zend_class_entry *spl_ce_SplMaxHeap;

extern PHPAPI zend_class_entry *spl_ce_SplPriorityQueue;

PHP_MINIT_FUNCTION(spl_heap);

#endif /* SPL_HEAP_H */
ext/pcre/php_pcre.h000064400000007312151730541550010257 0ustar00/*
   +----------------------------------------------------------------------+
   | Copyright (c) The PHP Group                                          |
   +----------------------------------------------------------------------+
   | This source file is subject to version 3.01 of the PHP license,      |
   | that is bundled with this package in the file LICENSE, and is        |
   | available through the world-wide-web at the following url:           |
   | https://www.php.net/license/3_01.txt                                 |
   | If you did not receive a copy of the PHP license and are unable to   |
   | obtain it through the world-wide-web, please send a note to          |
   | license@php.net so we can mail you a copy immediately.               |
   +----------------------------------------------------------------------+
   | Author: Andrei Zmievski <andrei@php.net>                             |
   +----------------------------------------------------------------------+
 */

#ifndef PHP_PCRE_H
#define PHP_PCRE_H

#ifdef HAVE_BUNDLED_PCRE
#include "pcre2lib/pcre2.h"
#else
#include "pcre2.h"
#endif

#include <locale.h>

PHPAPI zend_string *php_pcre_replace(zend_string *regex, zend_string *subject_str, const char *subject, size_t subject_len, zend_string *replace_str, size_t limit, size_t *replace_count);
PHPAPI pcre2_code* pcre_get_compiled_regex(zend_string *regex, uint32_t *capture_count);

extern zend_module_entry pcre_module_entry;
#define pcre_module_ptr &pcre_module_entry

#include "php_version.h"
#define PHP_PCRE_VERSION PHP_VERSION

typedef struct _pcre_cache_entry pcre_cache_entry;

typedef enum {
    PHP_PCRE_NO_ERROR = 0,
    PHP_PCRE_INTERNAL_ERROR,
    PHP_PCRE_BACKTRACK_LIMIT_ERROR,
    PHP_PCRE_RECURSION_LIMIT_ERROR,
    PHP_PCRE_BAD_UTF8_ERROR,
    PHP_PCRE_BAD_UTF8_OFFSET_ERROR,
    PHP_PCRE_JIT_STACKLIMIT_ERROR
} php_pcre_error_code;

PHPAPI pcre_cache_entry* pcre_get_compiled_regex_cache(zend_string *regex);
PHPAPI pcre_cache_entry* pcre_get_compiled_regex_cache_ex(zend_string *regex, bool locale_aware);

PHPAPI void  php_pcre_match_impl(pcre_cache_entry *pce, zend_string *subject_str, zval *return_value,
	zval *subpats, bool global, zend_long flags, zend_off_t start_offset);

PHPAPI zend_string *php_pcre_replace_impl(pcre_cache_entry *pce, zend_string *subject_str, const char *subject, size_t subject_len, zend_string *replace_str,
	size_t limit, size_t *replace_count);

PHPAPI void  php_pcre_split_impl(  pcre_cache_entry *pce, zend_string *subject_str, zval *return_value,
	zend_long limit_val, zend_long flags);

PHPAPI void  php_pcre_grep_impl(   pcre_cache_entry *pce, zval *input, zval *return_value,
	zend_long flags);

PHPAPI pcre2_match_context *php_pcre_mctx(void);
PHPAPI pcre2_general_context *php_pcre_gctx(void);
PHPAPI pcre2_compile_context *php_pcre_cctx(void);
PHPAPI void php_pcre_pce_incref(pcre_cache_entry *);
PHPAPI void php_pcre_pce_decref(pcre_cache_entry *);
PHPAPI pcre2_code *php_pcre_pce_re(pcre_cache_entry *);
/* capture_count can be ignored, re is required. */
PHPAPI pcre2_match_data *php_pcre_create_match_data(uint32_t, pcre2_code *);
PHPAPI void php_pcre_free_match_data(pcre2_match_data *);

ZEND_BEGIN_MODULE_GLOBALS(pcre)
	HashTable pcre_cache;
	zend_long backtrack_limit;
	zend_long recursion_limit;
#ifdef HAVE_PCRE_JIT_SUPPORT
	bool jit;
#endif
	php_pcre_error_code error_code;
	/* Used for unmatched subpatterns in OFFSET_CAPTURE mode */
	zval unmatched_null_pair;
	zval unmatched_empty_pair;
	/* General context using per-request allocator (ZMM). */
	pcre2_general_context *gctx_zmm;
ZEND_END_MODULE_GLOBALS(pcre)

PHPAPI ZEND_EXTERN_MODULE_GLOBALS(pcre)
#define PCRE_G(v) ZEND_MODULE_GLOBALS_ACCESSOR(pcre, v)

#define phpext_pcre_ptr pcre_module_ptr

#endif /* PHP_PCRE_H */
ext/pcre/pcre2lib/pcre2_internal.h000064400000272360151730541550013077 0ustar00/*************************************************
*      Perl-Compatible Regular Expressions       *
*************************************************/

/* PCRE2 is a library of functions to support regular expressions whose syntax
and semantics are as close as possible to those of the Perl 5 language.

                       Written by Philip Hazel
     Original API code Copyright (c) 1997-2012 University of Cambridge
          New API code Copyright (c) 2016-2023 University of Cambridge

-----------------------------------------------------------------------------
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:

    * Redistributions of source code must retain the above copyright notice,
      this list of conditions and the following disclaimer.

    * Redistributions in binary form must reproduce the above copyright
      notice, this list of conditions and the following disclaimer in the
      documentation and/or other materials provided with the distribution.

    * Neither the name of the University of Cambridge nor the names of its
      contributors may be used to endorse or promote products derived from
      this software without specific prior written permission.

THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
POSSIBILITY OF SUCH DAMAGE.
-----------------------------------------------------------------------------
*/

#ifndef PCRE2_INTERNAL_H_IDEMPOTENT_GUARD
#define PCRE2_INTERNAL_H_IDEMPOTENT_GUARD

/* We do not support both EBCDIC and Unicode at the same time. The "configure"
script prevents both being selected, but not everybody uses "configure". EBCDIC
is only supported for the 8-bit library, but the check for this has to be later
in this file, because the first part is not width-dependent, and is included by
pcre2test.c with CODE_UNIT_WIDTH == 0. */

#if defined EBCDIC && defined SUPPORT_UNICODE
#error The use of both EBCDIC and SUPPORT_UNICODE is not supported.
#endif

/* When compiling one of the libraries, the value of PCRE2_CODE_UNIT_WIDTH must
be 8, 16, or 32. AutoTools and CMake ensure that this is always the case, but
other other building methods may not, so here is a check. It is cut out when
building pcre2test, bcause that sets the value to zero. No other source should
be including this file. There is no explicit way of forcing a compile to be
abandoned, but trying to include a non-existent file seems cleanest. Otherwise
there will be many irrelevant consequential errors. */

#if (!defined PCRE2_BUILDING_PCRE2TEST && !defined PCRE2_DFTABLES) && \
  (!defined PCRE2_CODE_UNIT_WIDTH ||     \
    (PCRE2_CODE_UNIT_WIDTH != 8 &&       \
     PCRE2_CODE_UNIT_WIDTH != 16 &&      \
     PCRE2_CODE_UNIT_WIDTH != 32))
#error PCRE2_CODE_UNIT_WIDTH must be defined as 8, 16, or 32.
#include <AbandonCompile>
#endif


/* Standard C headers */

#include <ctype.h>
#include <limits.h>
#include <stddef.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

/* Macros to make boolean values more obvious. The #ifndef is to pacify
compiler warnings in environments where these macros are defined elsewhere.
Unfortunately, there is no way to do the same for the typedef. */

typedef int BOOL;
#ifndef FALSE
#define FALSE   0
#define TRUE    1
#endif

/* Valgrind (memcheck) support */

#ifdef SUPPORT_VALGRIND
#include <valgrind/memcheck.h>
#endif

/* -ftrivial-auto-var-init support supports initializing all local variables
to avoid some classes of bug, but this can cause an unacceptable slowdown
for large on-stack arrays in hot functions. This macro lets us annotate
such arrays. */

#ifdef HAVE_ATTRIBUTE_UNINITIALIZED
#define PCRE2_KEEP_UNINITIALIZED __attribute__((uninitialized))
#else
#define PCRE2_KEEP_UNINITIALIZED
#endif

/* Older versions of MSVC lack snprintf(). This define allows for
warning/error-free compilation and testing with MSVC compilers back to at least
MSVC 10/2010. Except for VC6 (which is missing some fundamentals and fails). */

#if defined(_MSC_VER) && (_MSC_VER < 1900)
#define snprintf _snprintf
#endif

/* When compiling a DLL for Windows, the exported symbols have to be declared
using some MS magic. I found some useful information on this web page:
http://msdn2.microsoft.com/en-us/library/y4h7bcy6(VS.80).aspx. According to the
information there, using __declspec(dllexport) without "extern" we have a
definition; with "extern" we have a declaration. The settings here override the
setting in pcre2.h (which is included below); it defines only PCRE2_EXP_DECL,
which is all that is needed for applications (they just import the symbols). We
use:

  PCRE2_EXP_DECL    for declarations
  PCRE2_EXP_DEFN    for definitions

The reason for wrapping this in #ifndef PCRE2_EXP_DECL is so that pcre2test,
which is an application, but needs to import this file in order to "peek" at
internals, can #include pcre2.h first to get an application's-eye view.

In principle, people compiling for non-Windows, non-Unix-like (i.e. uncommon,
special-purpose environments) might want to stick other stuff in front of
exported symbols. That's why, in the non-Windows case, we set PCRE2_EXP_DEFN
only if it is not already set. */

#ifndef PCRE2_EXP_DECL
#  ifdef _WIN32
#    ifndef PCRE2_STATIC
#      define PCRE2_EXP_DECL		extern __declspec(dllexport)
#      define PCRE2_EXP_DEFN		__declspec(dllexport)
#    else
#      define PCRE2_EXP_DECL		extern PCRE2_EXPORT
#      define PCRE2_EXP_DEFN
#    endif
#  else
#    ifdef __cplusplus
#      define PCRE2_EXP_DECL		extern "C" PCRE2_EXPORT
#    else
#      define PCRE2_EXP_DECL		extern PCRE2_EXPORT
#    endif
#    ifndef PCRE2_EXP_DEFN
#      define PCRE2_EXP_DEFN		PCRE2_EXP_DECL
#    endif
#  endif
#endif

/* Include the public PCRE2 header and the definitions of UCP character
property values. This must follow the setting of PCRE2_EXP_DECL above. */

#include "pcre2.h"
#include "pcre2_ucp.h"

/* When PCRE2 is compiled as a C++ library, the subject pointer can be replaced
with a custom type. This makes it possible, for example, to allow pcre2_match()
to process subject strings that are discontinuous by using a smart pointer
class. It must always be possible to inspect all of the subject string in
pcre2_match() because of the way it backtracks. */

/* WARNING: This is as yet untested for PCRE2. */

#ifdef CUSTOM_SUBJECT_PTR
#undef PCRE2_SPTR
#define PCRE2_SPTR CUSTOM_SUBJECT_PTR
#endif

/* When checking for integer overflow, we need to handle large integers.
If a 64-bit integer type is available, we can use that.
Otherwise we have to cast to double, which of course requires floating point
arithmetic. Handle this by defining a macro for the appropriate type. */

#if defined INT64_MAX || defined int64_t
#define INT64_OR_DOUBLE int64_t
#else
#define INT64_OR_DOUBLE double
#endif

/* External (in the C sense) functions and tables that are private to the
libraries are always referenced using the PRIV macro. This makes it possible
for pcre2test.c to include some of the source files from the libraries using a
different PRIV definition to avoid name clashes. It also makes it clear in the
code that a non-static object is being referenced. */

#ifndef PRIV
#define PRIV(name) _pcre2_##name
#endif

/* When compiling for use with the Virtual Pascal compiler, these functions
need to have their names changed. PCRE2 must be compiled with the -DVPCOMPAT
option on the command line. */

#ifdef VPCOMPAT
#define strlen(s)        _strlen(s)
#define strncmp(s1,s2,m) _strncmp(s1,s2,m)
#define memcmp(s,c,n)    _memcmp(s,c,n)
#define memcpy(d,s,n)    _memcpy(d,s,n)
#define memmove(d,s,n)   _memmove(d,s,n)
#define memset(s,c,n)    _memset(s,c,n)
#else  /* VPCOMPAT */

/* Otherwise, to cope with SunOS4 and other systems that lack memmove(), define
a macro that calls an emulating function. */

#ifndef HAVE_MEMMOVE
#undef  memmove          /* Some systems may have a macro */
#define memmove(a, b, c) PRIV(memmove)(a, b, c)
#endif   /* not HAVE_MEMMOVE */
#endif   /* not VPCOMPAT */

/* This is an unsigned int value that no UTF character can ever have, as
Unicode doesn't go beyond 0x0010ffff. */

#define NOTACHAR 0xffffffff

/* This is the largest valid UTF/Unicode code point. */

#define MAX_UTF_CODE_POINT 0x10ffff

/* Compile-time positive error numbers (all except UTF errors, which are
negative) start at this value. It should probably never be changed, in case
some application is checking for specific numbers. There is a copy of this
#define in pcre2posix.c (which now no longer includes this file). Ideally, a
way of having a single definition should be found, but as the number is
unlikely to change, this is not a pressing issue. The original reason for
having a base other than 0 was to keep the absolute values of compile-time and
run-time error numbers numerically different, but in the event the code does
not rely on this. */

#define COMPILE_ERROR_BASE 100

/* The initial frames vector for remembering pcre2_match() backtracking points
is allocated on the heap, of this size (bytes) or ten times the frame size if
larger, unless the heap limit is smaller. Typical frame sizes are a few hundred
bytes (it depends on the number of capturing parentheses) so 20KiB handles
quite a few frames. A larger vector on the heap is obtained for matches that
need more frames, subject to the heap limit. */

#define START_FRAMES_SIZE 20480

/* For DFA matching, an initial internal workspace vector is allocated on the
stack. The heap is used only if this turns out to be too small. */

#define DFA_START_RWS_SIZE 30720

/* Define the default BSR convention. */

#ifdef BSR_ANYCRLF
#define BSR_DEFAULT PCRE2_BSR_ANYCRLF
#else
#define BSR_DEFAULT PCRE2_BSR_UNICODE
#endif


/* ---------------- Basic UTF-8 macros ---------------- */

/* These UTF-8 macros are always defined because they are used in pcre2test for
handling wide characters in 16-bit and 32-bit modes, even if an 8-bit library
is not supported. */

/* Tests whether a UTF-8 code point needs extra bytes to decode. */

#define HASUTF8EXTRALEN(c) ((c) >= 0xc0)

/* The following macros were originally written in the form of loops that used
data from the tables whose names start with PRIV(utf8_table). They were
rewritten by a user so as not to use loops, because in some environments this
gives a significant performance advantage, and it seems never to do any harm.
*/

/* Base macro to pick up the remaining bytes of a UTF-8 character, not
advancing the pointer. */

#define GETUTF8(c, eptr) \
    { \
    if ((c & 0x20u) == 0) \
      c = ((c & 0x1fu) << 6) | (eptr[1] & 0x3fu); \
    else if ((c & 0x10u) == 0) \
      c = ((c & 0x0fu) << 12) | ((eptr[1] & 0x3fu) << 6) | (eptr[2] & 0x3fu); \
    else if ((c & 0x08u) == 0) \
      c = ((c & 0x07u) << 18) | ((eptr[1] & 0x3fu) << 12) | \
      ((eptr[2] & 0x3fu) << 6) | (eptr[3] & 0x3fu); \
    else if ((c & 0x04u) == 0) \
      c = ((c & 0x03u) << 24) | ((eptr[1] & 0x3fu) << 18) | \
          ((eptr[2] & 0x3fu) << 12) | ((eptr[3] & 0x3fu) << 6) | \
          (eptr[4] & 0x3fu); \
    else \
      c = ((c & 0x01u) << 30) | ((eptr[1] & 0x3fu) << 24) | \
          ((eptr[2] & 0x3fu) << 18) | ((eptr[3] & 0x3fu) << 12) | \
          ((eptr[4] & 0x3fu) << 6) | (eptr[5] & 0x3fu); \
    }

/* Base macro to pick up the remaining bytes of a UTF-8 character, advancing
the pointer. */

#define GETUTF8INC(c, eptr) \
    { \
    if ((c & 0x20u) == 0) \
      c = ((c & 0x1fu) << 6) | (*eptr++ & 0x3fu); \
    else if ((c & 0x10u) == 0) \
      { \
      c = ((c & 0x0fu) << 12) | ((*eptr & 0x3fu) << 6) | (eptr[1] & 0x3fu); \
      eptr += 2; \
      } \
    else if ((c & 0x08u) == 0) \
      { \
      c = ((c & 0x07u) << 18) | ((*eptr & 0x3fu) << 12) | \
          ((eptr[1] & 0x3fu) << 6) | (eptr[2] & 0x3fu); \
      eptr += 3; \
      } \
    else if ((c & 0x04u) == 0) \
      { \
      c = ((c & 0x03u) << 24) | ((*eptr & 0x3fu) << 18) | \
          ((eptr[1] & 0x3fu) << 12) | ((eptr[2] & 0x3fu) << 6) | \
          (eptr[3] & 0x3fu); \
      eptr += 4; \
      } \
    else \
      { \
      c = ((c & 0x01u) << 30) | ((*eptr & 0x3fu) << 24) | \
          ((eptr[1] & 0x3fu) << 18) | ((eptr[2] & 0x3fu) << 12) | \
          ((eptr[3] & 0x3fu) << 6) | (eptr[4] & 0x3fu); \
      eptr += 5; \
      } \
    }

/* Base macro to pick up the remaining bytes of a UTF-8 character, not
advancing the pointer, incrementing the length. */

#define GETUTF8LEN(c, eptr, len) \
    { \
    if ((c & 0x20u) == 0) \
      { \
      c = ((c & 0x1fu) << 6) | (eptr[1] & 0x3fu); \
      len++; \
      } \
    else if ((c & 0x10u)  == 0) \
      { \
      c = ((c & 0x0fu) << 12) | ((eptr[1] & 0x3fu) << 6) | (eptr[2] & 0x3fu); \
      len += 2; \
      } \
    else if ((c & 0x08u)  == 0) \
      {\
      c = ((c & 0x07u) << 18) | ((eptr[1] & 0x3fu) << 12) | \
          ((eptr[2] & 0x3fu) << 6) | (eptr[3] & 0x3fu); \
      len += 3; \
      } \
    else if ((c & 0x04u)  == 0) \
      { \
      c = ((c & 0x03u) << 24) | ((eptr[1] & 0x3fu) << 18) | \
          ((eptr[2] & 0x3fu) << 12) | ((eptr[3] & 0x3fu) << 6) | \
          (eptr[4] & 0x3fu); \
      len += 4; \
      } \
    else \
      {\
      c = ((c & 0x01u) << 30) | ((eptr[1] & 0x3fu) << 24) | \
          ((eptr[2] & 0x3fu) << 18) | ((eptr[3] & 0x3fu) << 12) | \
          ((eptr[4] & 0x3fu) << 6) | (eptr[5] & 0x3fu); \
      len += 5; \
      } \
    }

/* --------------- Whitespace macros ---------------- */

/* Tests for Unicode horizontal and vertical whitespace characters must check a
number of different values. Using a switch statement for this generates the
fastest code (no loop, no memory access), and there are several places in the
interpreter code where this happens. In order to ensure that all the case lists
remain in step, we use macros so that there is only one place where the lists
are defined.

These values are also required as lists in pcre2_compile.c when processing \h,
\H, \v and \V in a character class. The lists are defined in pcre2_tables.c,
but macros that define the values are here so that all the definitions are
together. The lists must be in ascending character order, terminated by
NOTACHAR (which is 0xffffffff).

Any changes should ensure that the various macros are kept in step with each
other. NOTE: The values also appear in pcre2_jit_compile.c. */

/* -------------- ASCII/Unicode environments -------------- */

#ifndef EBCDIC

/* Character U+180E (Mongolian Vowel Separator) is not included in the list of
spaces in the Unicode file PropList.txt, and Perl does not recognize it as a
space. However, in many other sources it is listed as a space and has been in
PCRE (both APIs) for a long time. */

#define HSPACE_LIST \
  CHAR_HT, CHAR_SPACE, CHAR_NBSP, \
  0x1680, 0x180e, 0x2000, 0x2001, 0x2002, 0x2003, 0x2004, 0x2005, \
  0x2006, 0x2007, 0x2008, 0x2009, 0x200A, 0x202f, 0x205f, 0x3000, \
  NOTACHAR

#define HSPACE_MULTIBYTE_CASES \
  case 0x1680:  /* OGHAM SPACE MARK */ \
  case 0x180e:  /* MONGOLIAN VOWEL SEPARATOR */ \
  case 0x2000:  /* EN QUAD */ \
  case 0x2001:  /* EM QUAD */ \
  case 0x2002:  /* EN SPACE */ \
  case 0x2003:  /* EM SPACE */ \
  case 0x2004:  /* THREE-PER-EM SPACE */ \
  case 0x2005:  /* FOUR-PER-EM SPACE */ \
  case 0x2006:  /* SIX-PER-EM SPACE */ \
  case 0x2007:  /* FIGURE SPACE */ \
  case 0x2008:  /* PUNCTUATION SPACE */ \
  case 0x2009:  /* THIN SPACE */ \
  case 0x200A:  /* HAIR SPACE */ \
  case 0x202f:  /* NARROW NO-BREAK SPACE */ \
  case 0x205f:  /* MEDIUM MATHEMATICAL SPACE */ \
  case 0x3000   /* IDEOGRAPHIC SPACE */

#define HSPACE_BYTE_CASES \
  case CHAR_HT: \
  case CHAR_SPACE: \
  case CHAR_NBSP

#define HSPACE_CASES \
  HSPACE_BYTE_CASES: \
  HSPACE_MULTIBYTE_CASES

#define VSPACE_LIST \
  CHAR_LF, CHAR_VT, CHAR_FF, CHAR_CR, CHAR_NEL, 0x2028, 0x2029, NOTACHAR

#define VSPACE_MULTIBYTE_CASES \
  case 0x2028:    /* LINE SEPARATOR */ \
  case 0x2029     /* PARAGRAPH SEPARATOR */

#define VSPACE_BYTE_CASES \
  case CHAR_LF: \
  case CHAR_VT: \
  case CHAR_FF: \
  case CHAR_CR: \
  case CHAR_NEL

#define VSPACE_CASES \
  VSPACE_BYTE_CASES: \
  VSPACE_MULTIBYTE_CASES

/* -------------- EBCDIC environments -------------- */

#else
#define HSPACE_LIST CHAR_HT, CHAR_SPACE, CHAR_NBSP, NOTACHAR

#define HSPACE_BYTE_CASES \
  case CHAR_HT: \
  case CHAR_SPACE: \
  case CHAR_NBSP

#define HSPACE_CASES HSPACE_BYTE_CASES

#ifdef EBCDIC_NL25
#define VSPACE_LIST \
  CHAR_VT, CHAR_FF, CHAR_CR, CHAR_NEL, CHAR_LF, NOTACHAR
#else
#define VSPACE_LIST \
  CHAR_VT, CHAR_FF, CHAR_CR, CHAR_LF, CHAR_NEL, NOTACHAR
#endif

#define VSPACE_BYTE_CASES \
  case CHAR_LF: \
  case CHAR_VT: \
  case CHAR_FF: \
  case CHAR_CR: \
  case CHAR_NEL

#define VSPACE_CASES VSPACE_BYTE_CASES
#endif  /* EBCDIC */

/* -------------- End of whitespace macros -------------- */


/* PCRE2 is able to support several different kinds of newline (CR, LF, CRLF,
"any" and "anycrlf" at present). The following macros are used to package up
testing for newlines. NLBLOCK, PSSTART, and PSEND are defined in the various
modules to indicate in which datablock the parameters exist, and what the
start/end of string field names are. */

#define NLTYPE_FIXED    0     /* Newline is a fixed length string */
#define NLTYPE_ANY      1     /* Newline is any Unicode line ending */
#define NLTYPE_ANYCRLF  2     /* Newline is CR, LF, or CRLF */

/* This macro checks for a newline at the given position */

#define IS_NEWLINE(p) \
  ((NLBLOCK->nltype != NLTYPE_FIXED)? \
    ((p) < NLBLOCK->PSEND && \
     PRIV(is_newline)((p), NLBLOCK->nltype, NLBLOCK->PSEND, \
       &(NLBLOCK->nllen), utf)) \
    : \
    ((p) <= NLBLOCK->PSEND - NLBLOCK->nllen && \
     UCHAR21TEST(p) == NLBLOCK->nl[0] && \
     (NLBLOCK->nllen == 1 || UCHAR21TEST(p+1) == NLBLOCK->nl[1])       \
    ) \
  )

/* This macro checks for a newline immediately preceding the given position */

#define WAS_NEWLINE(p) \
  ((NLBLOCK->nltype != NLTYPE_FIXED)? \
    ((p) > NLBLOCK->PSSTART && \
     PRIV(was_newline)((p), NLBLOCK->nltype, NLBLOCK->PSSTART, \
       &(NLBLOCK->nllen), utf)) \
    : \
    ((p) >= NLBLOCK->PSSTART + NLBLOCK->nllen && \
     UCHAR21TEST(p - NLBLOCK->nllen) == NLBLOCK->nl[0] &&              \
     (NLBLOCK->nllen == 1 || UCHAR21TEST(p - NLBLOCK->nllen + 1) == NLBLOCK->nl[1]) \
    ) \
  )

/* Private flags containing information about the compiled pattern. The first
three must not be changed, because whichever is set is actually the number of
bytes in a code unit in that mode. */

#define PCRE2_MODE8         0x00000001  /* compiled in 8 bit mode */
#define PCRE2_MODE16        0x00000002  /* compiled in 16 bit mode */
#define PCRE2_MODE32        0x00000004  /* compiled in 32 bit mode */
#define PCRE2_FIRSTSET      0x00000010  /* first_code unit is set */
#define PCRE2_FIRSTCASELESS 0x00000020  /* caseless first code unit */
#define PCRE2_FIRSTMAPSET   0x00000040  /* bitmap of first code units is set */
#define PCRE2_LASTSET       0x00000080  /* last code unit is set */
#define PCRE2_LASTCASELESS  0x00000100  /* caseless last code unit */
#define PCRE2_STARTLINE     0x00000200  /* start after \n for multiline */
#define PCRE2_JCHANGED      0x00000400  /* j option used in pattern */
#define PCRE2_HASCRORLF     0x00000800  /* explicit \r or \n in pattern */
#define PCRE2_HASTHEN       0x00001000  /* pattern contains (*THEN) */
#define PCRE2_MATCH_EMPTY   0x00002000  /* pattern can match empty string */
#define PCRE2_BSR_SET       0x00004000  /* BSR was set in the pattern */
#define PCRE2_NL_SET        0x00008000  /* newline was set in the pattern */
#define PCRE2_NOTEMPTY_SET  0x00010000  /* (*NOTEMPTY) used        ) keep */
#define PCRE2_NE_ATST_SET   0x00020000  /* (*NOTEMPTY_ATSTART) used) together */
#define PCRE2_DEREF_TABLES  0x00040000  /* release character tables */
#define PCRE2_NOJIT         0x00080000  /* (*NOJIT) used */
#define PCRE2_HASBKPORX     0x00100000  /* contains \P, \p, or \X */
#define PCRE2_DUPCAPUSED    0x00200000  /* contains (?| */
#define PCRE2_HASBKC        0x00400000  /* contains \C */
#define PCRE2_HASACCEPT     0x00800000  /* contains (*ACCEPT) */

#define PCRE2_MODE_MASK     (PCRE2_MODE8 | PCRE2_MODE16 | PCRE2_MODE32)

/* Values for the matchedby field in a match data block. */

enum { PCRE2_MATCHEDBY_INTERPRETER,     /* pcre2_match() */
       PCRE2_MATCHEDBY_DFA_INTERPRETER, /* pcre2_dfa_match() */
       PCRE2_MATCHEDBY_JIT };           /* pcre2_jit_match() */

/* Values for the flags field in a match data block. */

#define PCRE2_MD_COPIED_SUBJECT  0x01u

/* Magic number to provide a small check against being handed junk. */

#define MAGIC_NUMBER  0x50435245UL   /* 'PCRE' */

/* The maximum remaining length of subject we are prepared to search for a
req_unit match from an anchored pattern. In 8-bit mode, memchr() is used and is
much faster than the search loop that has to be used in 16-bit and 32-bit
modes. */

#if PCRE2_CODE_UNIT_WIDTH == 8
#define REQ_CU_MAX       5000
#else
#define REQ_CU_MAX       2000
#endif

/* Offsets for the bitmap tables in the cbits set of tables. Each table
contains a set of bits for a class map. Some classes are built by combining
these tables. */

#define cbit_space     0      /* [:space:] or \s */
#define cbit_xdigit   32      /* [:xdigit:] */
#define cbit_digit    64      /* [:digit:] or \d */
#define cbit_upper    96      /* [:upper:] */
#define cbit_lower   128      /* [:lower:] */
#define cbit_word    160      /* [:word:] or \w */
#define cbit_graph   192      /* [:graph:] */
#define cbit_print   224      /* [:print:] */
#define cbit_punct   256      /* [:punct:] */
#define cbit_cntrl   288      /* [:cntrl:] */
#define cbit_length  320      /* Length of the cbits table */

/* Bit definitions for entries in the ctypes table. Do not change these values
without checking pcre2_jit_compile.c, which has an assertion to ensure that
ctype_word has the value 16. */

#define ctype_space    0x01
#define ctype_letter   0x02
#define ctype_lcletter 0x04
#define ctype_digit    0x08
#define ctype_word     0x10    /* alphanumeric or '_' */

/* Offsets of the various tables from the base tables pointer, and
total length of the tables. */

#define lcc_offset      0                           /* Lower case */
#define fcc_offset    256                           /* Flip case */
#define cbits_offset  512                           /* Character classes */
#define ctypes_offset (cbits_offset + cbit_length)  /* Character types */
#define TABLES_LENGTH (ctypes_offset + 256)


/* -------------------- Character and string names ------------------------ */

/* If PCRE2 is to support UTF-8 on EBCDIC platforms, we cannot use normal
character constants like '*' because the compiler would emit their EBCDIC code,
which is different from their ASCII/UTF-8 code. Instead we define macros for
the characters so that they always use the ASCII/UTF-8 code when UTF-8 support
is enabled. When UTF-8 support is not enabled, the definitions use character
literals. Both character and string versions of each character are needed, and
there are some longer strings as well.

This means that, on EBCDIC platforms, the PCRE2 library can handle either
EBCDIC, or UTF-8, but not both. To support both in the same compiled library
would need different lookups depending on whether PCRE2_UTF was set or not.
This would make it impossible to use characters in switch/case statements,
which would reduce performance. For a theoretical use (which nobody has asked
for) in a minority area (EBCDIC platforms), this is not sensible. Any
application that did need both could compile two versions of the library, using
macros to give the functions distinct names. */

#ifndef SUPPORT_UNICODE

/* UTF-8 support is not enabled; use the platform-dependent character literals
so that PCRE2 works in both ASCII and EBCDIC environments, but only in non-UTF
mode. Newline characters are problematic in EBCDIC. Though it has CR and LF
characters, a common practice has been to use its NL (0x15) character as the
line terminator in C-like processing environments. However, sometimes the LF
(0x25) character is used instead, according to this Unicode document:

http://unicode.org/standard/reports/tr13/tr13-5.html

PCRE2 defaults EBCDIC NL to 0x15, but has a build-time option to select 0x25
instead. Whichever is *not* chosen is defined as NEL.

In both ASCII and EBCDIC environments, CHAR_NL and CHAR_LF are synonyms for the
same code point. */

#ifdef EBCDIC

#ifndef EBCDIC_NL25
#define CHAR_NL                     '\x15'
#define CHAR_NEL                    '\x25'
#define STR_NL                      "\x15"
#define STR_NEL                     "\x25"
#else
#define CHAR_NL                     '\x25'
#define CHAR_NEL                    '\x15'
#define STR_NL                      "\x25"
#define STR_NEL                     "\x15"
#endif

#define CHAR_LF                     CHAR_NL
#define STR_LF                      STR_NL

#define CHAR_ESC                    '\047'
#define CHAR_DEL                    '\007'
#define CHAR_NBSP                   ((unsigned char)'\x41')
#define STR_ESC                     "\047"
#define STR_DEL                     "\007"

#else  /* Not EBCDIC */

/* In ASCII/Unicode, linefeed is '\n' and we equate this to NL for
compatibility. NEL is the Unicode newline character; make sure it is
a positive value. */

#define CHAR_LF                     '\n'
#define CHAR_NL                     CHAR_LF
#define CHAR_NEL                    ((unsigned char)'\x85')
#define CHAR_ESC                    '\033'
#define CHAR_DEL                    '\177'
#define CHAR_NBSP                   ((unsigned char)'\xa0')

#define STR_LF                      "\n"
#define STR_NL                      STR_LF
#define STR_NEL                     "\x85"
#define STR_ESC                     "\033"
#define STR_DEL                     "\177"

#endif  /* EBCDIC */

/* The remaining definitions work in both environments. */

#define CHAR_NUL                    '\0'
#define CHAR_HT                     '\t'
#define CHAR_VT                     '\v'
#define CHAR_FF                     '\f'
#define CHAR_CR                     '\r'
#define CHAR_BS                     '\b'
#define CHAR_BEL                    '\a'

#define CHAR_SPACE                  ' '
#define CHAR_EXCLAMATION_MARK       '!'
#define CHAR_QUOTATION_MARK         '"'
#define CHAR_NUMBER_SIGN            '#'
#define CHAR_DOLLAR_SIGN            '$'
#define CHAR_PERCENT_SIGN           '%'
#define CHAR_AMPERSAND              '&'
#define CHAR_APOSTROPHE             '\''
#define CHAR_LEFT_PARENTHESIS       '('
#define CHAR_RIGHT_PARENTHESIS      ')'
#define CHAR_ASTERISK               '*'
#define CHAR_PLUS                   '+'
#define CHAR_COMMA                  ','
#define CHAR_MINUS                  '-'
#define CHAR_DOT                    '.'
#define CHAR_SLASH                  '/'
#define CHAR_0                      '0'
#define CHAR_1                      '1'
#define CHAR_2                      '2'
#define CHAR_3                      '3'
#define CHAR_4                      '4'
#define CHAR_5                      '5'
#define CHAR_6                      '6'
#define CHAR_7                      '7'
#define CHAR_8                      '8'
#define CHAR_9                      '9'
#define CHAR_COLON                  ':'
#define CHAR_SEMICOLON              ';'
#define CHAR_LESS_THAN_SIGN         '<'
#define CHAR_EQUALS_SIGN            '='
#define CHAR_GREATER_THAN_SIGN      '>'
#define CHAR_QUESTION_MARK          '?'
#define CHAR_COMMERCIAL_AT          '@'
#define CHAR_A                      'A'
#define CHAR_B                      'B'
#define CHAR_C                      'C'
#define CHAR_D                      'D'
#define CHAR_E                      'E'
#define CHAR_F                      'F'
#define CHAR_G                      'G'
#define CHAR_H                      'H'
#define CHAR_I                      'I'
#define CHAR_J                      'J'
#define CHAR_K                      'K'
#define CHAR_L                      'L'
#define CHAR_M                      'M'
#define CHAR_N                      'N'
#define CHAR_O                      'O'
#define CHAR_P                      'P'
#define CHAR_Q                      'Q'
#define CHAR_R                      'R'
#define CHAR_S                      'S'
#define CHAR_T                      'T'
#define CHAR_U                      'U'
#define CHAR_V                      'V'
#define CHAR_W                      'W'
#define CHAR_X                      'X'
#define CHAR_Y                      'Y'
#define CHAR_Z                      'Z'
#define CHAR_LEFT_SQUARE_BRACKET    '['
#define CHAR_BACKSLASH              '\\'
#define CHAR_RIGHT_SQUARE_BRACKET   ']'
#define CHAR_CIRCUMFLEX_ACCENT      '^'
#define CHAR_UNDERSCORE             '_'
#define CHAR_GRAVE_ACCENT           '`'
#define CHAR_a                      'a'
#define CHAR_b                      'b'
#define CHAR_c                      'c'
#define CHAR_d                      'd'
#define CHAR_e                      'e'
#define CHAR_f                      'f'
#define CHAR_g                      'g'
#define CHAR_h                      'h'
#define CHAR_i                      'i'
#define CHAR_j                      'j'
#define CHAR_k                      'k'
#define CHAR_l                      'l'
#define CHAR_m                      'm'
#define CHAR_n                      'n'
#define CHAR_o                      'o'
#define CHAR_p                      'p'
#define CHAR_q                      'q'
#define CHAR_r                      'r'
#define CHAR_s                      's'
#define CHAR_t                      't'
#define CHAR_u                      'u'
#define CHAR_v                      'v'
#define CHAR_w                      'w'
#define CHAR_x                      'x'
#define CHAR_y                      'y'
#define CHAR_z                      'z'
#define CHAR_LEFT_CURLY_BRACKET     '{'
#define CHAR_VERTICAL_LINE          '|'
#define CHAR_RIGHT_CURLY_BRACKET    '}'
#define CHAR_TILDE                  '~'

#define STR_HT                      "\t"
#define STR_VT                      "\v"
#define STR_FF                      "\f"
#define STR_CR                      "\r"
#define STR_BS                      "\b"
#define STR_BEL                     "\a"

#define STR_SPACE                   " "
#define STR_EXCLAMATION_MARK        "!"
#define STR_QUOTATION_MARK          "\""
#define STR_NUMBER_SIGN             "#"
#define STR_DOLLAR_SIGN             "$"
#define STR_PERCENT_SIGN            "%"
#define STR_AMPERSAND               "&"
#define STR_APOSTROPHE              "'"
#define STR_LEFT_PARENTHESIS        "("
#define STR_RIGHT_PARENTHESIS       ")"
#define STR_ASTERISK                "*"
#define STR_PLUS                    "+"
#define STR_COMMA                   ","
#define STR_MINUS                   "-"
#define STR_DOT                     "."
#define STR_SLASH                   "/"
#define STR_0                       "0"
#define STR_1                       "1"
#define STR_2                       "2"
#define STR_3                       "3"
#define STR_4                       "4"
#define STR_5                       "5"
#define STR_6                       "6"
#define STR_7                       "7"
#define STR_8                       "8"
#define STR_9                       "9"
#define STR_COLON                   ":"
#define STR_SEMICOLON               ";"
#define STR_LESS_THAN_SIGN          "<"
#define STR_EQUALS_SIGN             "="
#define STR_GREATER_THAN_SIGN       ">"
#define STR_QUESTION_MARK           "?"
#define STR_COMMERCIAL_AT           "@"
#define STR_A                       "A"
#define STR_B                       "B"
#define STR_C                       "C"
#define STR_D                       "D"
#define STR_E                       "E"
#define STR_F                       "F"
#define STR_G                       "G"
#define STR_H                       "H"
#define STR_I                       "I"
#define STR_J                       "J"
#define STR_K                       "K"
#define STR_L                       "L"
#define STR_M                       "M"
#define STR_N                       "N"
#define STR_O                       "O"
#define STR_P                       "P"
#define STR_Q                       "Q"
#define STR_R                       "R"
#define STR_S                       "S"
#define STR_T                       "T"
#define STR_U                       "U"
#define STR_V                       "V"
#define STR_W                       "W"
#define STR_X                       "X"
#define STR_Y                       "Y"
#define STR_Z                       "Z"
#define STR_LEFT_SQUARE_BRACKET     "["
#define STR_BACKSLASH               "\\"
#define STR_RIGHT_SQUARE_BRACKET    "]"
#define STR_CIRCUMFLEX_ACCENT       "^"
#define STR_UNDERSCORE              "_"
#define STR_GRAVE_ACCENT            "`"
#define STR_a                       "a"
#define STR_b                       "b"
#define STR_c                       "c"
#define STR_d                       "d"
#define STR_e                       "e"
#define STR_f                       "f"
#define STR_g                       "g"
#define STR_h                       "h"
#define STR_i                       "i"
#define STR_j                       "j"
#define STR_k                       "k"
#define STR_l                       "l"
#define STR_m                       "m"
#define STR_n                       "n"
#define STR_o                       "o"
#define STR_p                       "p"
#define STR_q                       "q"
#define STR_r                       "r"
#define STR_s                       "s"
#define STR_t                       "t"
#define STR_u                       "u"
#define STR_v                       "v"
#define STR_w                       "w"
#define STR_x                       "x"
#define STR_y                       "y"
#define STR_z                       "z"
#define STR_LEFT_CURLY_BRACKET      "{"
#define STR_VERTICAL_LINE           "|"
#define STR_RIGHT_CURLY_BRACKET     "}"
#define STR_TILDE                   "~"

#define STRING_ACCEPT0               "ACCEPT\0"
#define STRING_COMMIT0               "COMMIT\0"
#define STRING_F0                    "F\0"
#define STRING_FAIL0                 "FAIL\0"
#define STRING_MARK0                 "MARK\0"
#define STRING_PRUNE0                "PRUNE\0"
#define STRING_SKIP0                 "SKIP\0"
#define STRING_THEN                  "THEN"

#define STRING_atomic0               "atomic\0"
#define STRING_pla0                  "pla\0"
#define STRING_plb0                  "plb\0"
#define STRING_napla0                "napla\0"
#define STRING_naplb0                "naplb\0"
#define STRING_nla0                  "nla\0"
#define STRING_nlb0                  "nlb\0"
#define STRING_sr0                   "sr\0"
#define STRING_asr0                  "asr\0"
#define STRING_positive_lookahead0   "positive_lookahead\0"
#define STRING_positive_lookbehind0  "positive_lookbehind\0"
#define STRING_non_atomic_positive_lookahead0   "non_atomic_positive_lookahead\0"
#define STRING_non_atomic_positive_lookbehind0  "non_atomic_positive_lookbehind\0"
#define STRING_negative_lookahead0   "negative_lookahead\0"
#define STRING_negative_lookbehind0  "negative_lookbehind\0"
#define STRING_script_run0           "script_run\0"
#define STRING_atomic_script_run     "atomic_script_run"

#define STRING_alpha0                "alpha\0"
#define STRING_lower0                "lower\0"
#define STRING_upper0                "upper\0"
#define STRING_alnum0                "alnum\0"
#define STRING_ascii0                "ascii\0"
#define STRING_blank0                "blank\0"
#define STRING_cntrl0                "cntrl\0"
#define STRING_digit0                "digit\0"
#define STRING_graph0                "graph\0"
#define STRING_print0                "print\0"
#define STRING_punct0                "punct\0"
#define STRING_space0                "space\0"
#define STRING_word0                 "word\0"
#define STRING_xdigit                "xdigit"

#define STRING_DEFINE                "DEFINE"
#define STRING_VERSION               "VERSION"
#define STRING_WEIRD_STARTWORD       "[:<:]]"
#define STRING_WEIRD_ENDWORD         "[:>:]]"

#define STRING_CR_RIGHTPAR                "CR)"
#define STRING_LF_RIGHTPAR                "LF)"
#define STRING_CRLF_RIGHTPAR              "CRLF)"
#define STRING_ANY_RIGHTPAR               "ANY)"
#define STRING_ANYCRLF_RIGHTPAR           "ANYCRLF)"
#define STRING_NUL_RIGHTPAR               "NUL)"
#define STRING_BSR_ANYCRLF_RIGHTPAR       "BSR_ANYCRLF)"
#define STRING_BSR_UNICODE_RIGHTPAR       "BSR_UNICODE)"
#define STRING_UTF8_RIGHTPAR              "UTF8)"
#define STRING_UTF16_RIGHTPAR             "UTF16)"
#define STRING_UTF32_RIGHTPAR             "UTF32)"
#define STRING_UTF_RIGHTPAR               "UTF)"
#define STRING_UCP_RIGHTPAR               "UCP)"
#define STRING_NO_AUTO_POSSESS_RIGHTPAR   "NO_AUTO_POSSESS)"
#define STRING_NO_DOTSTAR_ANCHOR_RIGHTPAR "NO_DOTSTAR_ANCHOR)"
#define STRING_NO_JIT_RIGHTPAR            "NO_JIT)"
#define STRING_NO_START_OPT_RIGHTPAR      "NO_START_OPT)"
#define STRING_NOTEMPTY_RIGHTPAR          "NOTEMPTY)"
#define STRING_NOTEMPTY_ATSTART_RIGHTPAR  "NOTEMPTY_ATSTART)"
#define STRING_LIMIT_HEAP_EQ              "LIMIT_HEAP="
#define STRING_LIMIT_MATCH_EQ             "LIMIT_MATCH="
#define STRING_LIMIT_DEPTH_EQ             "LIMIT_DEPTH="
#define STRING_LIMIT_RECURSION_EQ         "LIMIT_RECURSION="
#define STRING_MARK                       "MARK"

#define STRING_bc                         "bc"
#define STRING_bidiclass                  "bidiclass"
#define STRING_sc                         "sc"
#define STRING_script                     "script"
#define STRING_scriptextensions           "scriptextensions"
#define STRING_scx                        "scx"

#else  /* SUPPORT_UNICODE */

/* UTF-8 support is enabled; always use UTF-8 (=ASCII) character codes. This
works in both modes non-EBCDIC platforms, and on EBCDIC platforms in UTF-8 mode
only. */

#define CHAR_HT                     '\011'
#define CHAR_VT                     '\013'
#define CHAR_FF                     '\014'
#define CHAR_CR                     '\015'
#define CHAR_LF                     '\012'
#define CHAR_NL                     CHAR_LF
#define CHAR_NEL                    ((unsigned char)'\x85')
#define CHAR_BS                     '\010'
#define CHAR_BEL                    '\007'
#define CHAR_ESC                    '\033'
#define CHAR_DEL                    '\177'

#define CHAR_NUL                    '\0'
#define CHAR_SPACE                  '\040'
#define CHAR_EXCLAMATION_MARK       '\041'
#define CHAR_QUOTATION_MARK         '\042'
#define CHAR_NUMBER_SIGN            '\043'
#define CHAR_DOLLAR_SIGN            '\044'
#define CHAR_PERCENT_SIGN           '\045'
#define CHAR_AMPERSAND              '\046'
#define CHAR_APOSTROPHE             '\047'
#define CHAR_LEFT_PARENTHESIS       '\050'
#define CHAR_RIGHT_PARENTHESIS      '\051'
#define CHAR_ASTERISK               '\052'
#define CHAR_PLUS                   '\053'
#define CHAR_COMMA                  '\054'
#define CHAR_MINUS                  '\055'
#define CHAR_DOT                    '\056'
#define CHAR_SLASH                  '\057'
#define CHAR_0                      '\060'
#define CHAR_1                      '\061'
#define CHAR_2                      '\062'
#define CHAR_3                      '\063'
#define CHAR_4                      '\064'
#define CHAR_5                      '\065'
#define CHAR_6                      '\066'
#define CHAR_7                      '\067'
#define CHAR_8                      '\070'
#define CHAR_9                      '\071'
#define CHAR_COLON                  '\072'
#define CHAR_SEMICOLON              '\073'
#define CHAR_LESS_THAN_SIGN         '\074'
#define CHAR_EQUALS_SIGN            '\075'
#define CHAR_GREATER_THAN_SIGN      '\076'
#define CHAR_QUESTION_MARK          '\077'
#define CHAR_COMMERCIAL_AT          '\100'
#define CHAR_A                      '\101'
#define CHAR_B                      '\102'
#define CHAR_C                      '\103'
#define CHAR_D                      '\104'
#define CHAR_E                      '\105'
#define CHAR_F                      '\106'
#define CHAR_G                      '\107'
#define CHAR_H                      '\110'
#define CHAR_I                      '\111'
#define CHAR_J                      '\112'
#define CHAR_K                      '\113'
#define CHAR_L                      '\114'
#define CHAR_M                      '\115'
#define CHAR_N                      '\116'
#define CHAR_O                      '\117'
#define CHAR_P                      '\120'
#define CHAR_Q                      '\121'
#define CHAR_R                      '\122'
#define CHAR_S                      '\123'
#define CHAR_T                      '\124'
#define CHAR_U                      '\125'
#define CHAR_V                      '\126'
#define CHAR_W                      '\127'
#define CHAR_X                      '\130'
#define CHAR_Y                      '\131'
#define CHAR_Z                      '\132'
#define CHAR_LEFT_SQUARE_BRACKET    '\133'
#define CHAR_BACKSLASH              '\134'
#define CHAR_RIGHT_SQUARE_BRACKET   '\135'
#define CHAR_CIRCUMFLEX_ACCENT      '\136'
#define CHAR_UNDERSCORE             '\137'
#define CHAR_GRAVE_ACCENT           '\140'
#define CHAR_a                      '\141'
#define CHAR_b                      '\142'
#define CHAR_c                      '\143'
#define CHAR_d                      '\144'
#define CHAR_e                      '\145'
#define CHAR_f                      '\146'
#define CHAR_g                      '\147'
#define CHAR_h                      '\150'
#define CHAR_i                      '\151'
#define CHAR_j                      '\152'
#define CHAR_k                      '\153'
#define CHAR_l                      '\154'
#define CHAR_m                      '\155'
#define CHAR_n                      '\156'
#define CHAR_o                      '\157'
#define CHAR_p                      '\160'
#define CHAR_q                      '\161'
#define CHAR_r                      '\162'
#define CHAR_s                      '\163'
#define CHAR_t                      '\164'
#define CHAR_u                      '\165'
#define CHAR_v                      '\166'
#define CHAR_w                      '\167'
#define CHAR_x                      '\170'
#define CHAR_y                      '\171'
#define CHAR_z                      '\172'
#define CHAR_LEFT_CURLY_BRACKET     '\173'
#define CHAR_VERTICAL_LINE          '\174'
#define CHAR_RIGHT_CURLY_BRACKET    '\175'
#define CHAR_TILDE                  '\176'
#define CHAR_NBSP                   ((unsigned char)'\xa0')

#define STR_HT                      "\011"
#define STR_VT                      "\013"
#define STR_FF                      "\014"
#define STR_CR                      "\015"
#define STR_NL                      "\012"
#define STR_BS                      "\010"
#define STR_BEL                     "\007"
#define STR_ESC                     "\033"
#define STR_DEL                     "\177"

#define STR_SPACE                   "\040"
#define STR_EXCLAMATION_MARK        "\041"
#define STR_QUOTATION_MARK          "\042"
#define STR_NUMBER_SIGN             "\043"
#define STR_DOLLAR_SIGN             "\044"
#define STR_PERCENT_SIGN            "\045"
#define STR_AMPERSAND               "\046"
#define STR_APOSTROPHE              "\047"
#define STR_LEFT_PARENTHESIS        "\050"
#define STR_RIGHT_PARENTHESIS       "\051"
#define STR_ASTERISK                "\052"
#define STR_PLUS                    "\053"
#define STR_COMMA                   "\054"
#define STR_MINUS                   "\055"
#define STR_DOT                     "\056"
#define STR_SLASH                   "\057"
#define STR_0                       "\060"
#define STR_1                       "\061"
#define STR_2                       "\062"
#define STR_3                       "\063"
#define STR_4                       "\064"
#define STR_5                       "\065"
#define STR_6                       "\066"
#define STR_7                       "\067"
#define STR_8                       "\070"
#define STR_9                       "\071"
#define STR_COLON                   "\072"
#define STR_SEMICOLON               "\073"
#define STR_LESS_THAN_SIGN          "\074"
#define STR_EQUALS_SIGN             "\075"
#define STR_GREATER_THAN_SIGN       "\076"
#define STR_QUESTION_MARK           "\077"
#define STR_COMMERCIAL_AT           "\100"
#define STR_A                       "\101"
#define STR_B                       "\102"
#define STR_C                       "\103"
#define STR_D                       "\104"
#define STR_E                       "\105"
#define STR_F                       "\106"
#define STR_G                       "\107"
#define STR_H                       "\110"
#define STR_I                       "\111"
#define STR_J                       "\112"
#define STR_K                       "\113"
#define STR_L                       "\114"
#define STR_M                       "\115"
#define STR_N                       "\116"
#define STR_O                       "\117"
#define STR_P                       "\120"
#define STR_Q                       "\121"
#define STR_R                       "\122"
#define STR_S                       "\123"
#define STR_T                       "\124"
#define STR_U                       "\125"
#define STR_V                       "\126"
#define STR_W                       "\127"
#define STR_X                       "\130"
#define STR_Y                       "\131"
#define STR_Z                       "\132"
#define STR_LEFT_SQUARE_BRACKET     "\133"
#define STR_BACKSLASH               "\134"
#define STR_RIGHT_SQUARE_BRACKET    "\135"
#define STR_CIRCUMFLEX_ACCENT       "\136"
#define STR_UNDERSCORE              "\137"
#define STR_GRAVE_ACCENT            "\140"
#define STR_a                       "\141"
#define STR_b                       "\142"
#define STR_c                       "\143"
#define STR_d                       "\144"
#define STR_e                       "\145"
#define STR_f                       "\146"
#define STR_g                       "\147"
#define STR_h                       "\150"
#define STR_i                       "\151"
#define STR_j                       "\152"
#define STR_k                       "\153"
#define STR_l                       "\154"
#define STR_m                       "\155"
#define STR_n                       "\156"
#define STR_o                       "\157"
#define STR_p                       "\160"
#define STR_q                       "\161"
#define STR_r                       "\162"
#define STR_s                       "\163"
#define STR_t                       "\164"
#define STR_u                       "\165"
#define STR_v                       "\166"
#define STR_w                       "\167"
#define STR_x                       "\170"
#define STR_y                       "\171"
#define STR_z                       "\172"
#define STR_LEFT_CURLY_BRACKET      "\173"
#define STR_VERTICAL_LINE           "\174"
#define STR_RIGHT_CURLY_BRACKET     "\175"
#define STR_TILDE                   "\176"

#define STRING_ACCEPT0               STR_A STR_C STR_C STR_E STR_P STR_T "\0"
#define STRING_COMMIT0               STR_C STR_O STR_M STR_M STR_I STR_T "\0"
#define STRING_F0                    STR_F "\0"
#define STRING_FAIL0                 STR_F STR_A STR_I STR_L "\0"
#define STRING_MARK0                 STR_M STR_A STR_R STR_K "\0"
#define STRING_PRUNE0                STR_P STR_R STR_U STR_N STR_E "\0"
#define STRING_SKIP0                 STR_S STR_K STR_I STR_P "\0"
#define STRING_THEN                  STR_T STR_H STR_E STR_N

#define STRING_atomic0               STR_a STR_t STR_o STR_m STR_i STR_c "\0"
#define STRING_pla0                  STR_p STR_l STR_a "\0"
#define STRING_plb0                  STR_p STR_l STR_b "\0"
#define STRING_napla0                STR_n STR_a STR_p STR_l STR_a "\0"
#define STRING_naplb0                STR_n STR_a STR_p STR_l STR_b "\0"
#define STRING_nla0                  STR_n STR_l STR_a "\0"
#define STRING_nlb0                  STR_n STR_l STR_b "\0"
#define STRING_sr0                   STR_s STR_r "\0"
#define STRING_asr0                  STR_a STR_s STR_r "\0"
#define STRING_positive_lookahead0   STR_p STR_o STR_s STR_i STR_t STR_i STR_v STR_e STR_UNDERSCORE STR_l STR_o STR_o STR_k STR_a STR_h STR_e STR_a STR_d "\0"
#define STRING_positive_lookbehind0  STR_p STR_o STR_s STR_i STR_t STR_i STR_v STR_e STR_UNDERSCORE STR_l STR_o STR_o STR_k STR_b STR_e STR_h STR_i STR_n STR_d "\0"
#define STRING_non_atomic_positive_lookahead0   STR_n STR_o STR_n STR_UNDERSCORE STR_a STR_t STR_o STR_m STR_i STR_c STR_UNDERSCORE STR_p STR_o STR_s STR_i STR_t STR_i STR_v STR_e STR_UNDERSCORE STR_l STR_o STR_o STR_k STR_a STR_h STR_e STR_a STR_d "\0"
#define STRING_non_atomic_positive_lookbehind0  STR_n STR_o STR_n STR_UNDERSCORE STR_a STR_t STR_o STR_m STR_i STR_c STR_UNDERSCORE STR_p STR_o STR_s STR_i STR_t STR_i STR_v STR_e STR_UNDERSCORE STR_l STR_o STR_o STR_k STR_b STR_e STR_h STR_i STR_n STR_d "\0"
#define STRING_negative_lookahead0   STR_n STR_e STR_g STR_a STR_t STR_i STR_v STR_e STR_UNDERSCORE STR_l STR_o STR_o STR_k STR_a STR_h STR_e STR_a STR_d "\0"
#define STRING_negative_lookbehind0  STR_n STR_e STR_g STR_a STR_t STR_i STR_v STR_e STR_UNDERSCORE STR_l STR_o STR_o STR_k STR_b STR_e STR_h STR_i STR_n STR_d "\0"
#define STRING_script_run0           STR_s STR_c STR_r STR_i STR_p STR_t STR_UNDERSCORE STR_r STR_u STR_n "\0"
#define STRING_atomic_script_run     STR_a STR_t STR_o STR_m STR_i STR_c STR_UNDERSCORE STR_s STR_c STR_r STR_i STR_p STR_t STR_UNDERSCORE STR_r STR_u STR_n

#define STRING_alpha0                STR_a STR_l STR_p STR_h STR_a "\0"
#define STRING_lower0                STR_l STR_o STR_w STR_e STR_r "\0"
#define STRING_upper0                STR_u STR_p STR_p STR_e STR_r "\0"
#define STRING_alnum0                STR_a STR_l STR_n STR_u STR_m "\0"
#define STRING_ascii0                STR_a STR_s STR_c STR_i STR_i "\0"
#define STRING_blank0                STR_b STR_l STR_a STR_n STR_k "\0"
#define STRING_cntrl0                STR_c STR_n STR_t STR_r STR_l "\0"
#define STRING_digit0                STR_d STR_i STR_g STR_i STR_t "\0"
#define STRING_graph0                STR_g STR_r STR_a STR_p STR_h "\0"
#define STRING_print0                STR_p STR_r STR_i STR_n STR_t "\0"
#define STRING_punct0                STR_p STR_u STR_n STR_c STR_t "\0"
#define STRING_space0                STR_s STR_p STR_a STR_c STR_e "\0"
#define STRING_word0                 STR_w STR_o STR_r STR_d       "\0"
#define STRING_xdigit                STR_x STR_d STR_i STR_g STR_i STR_t

#define STRING_DEFINE                STR_D STR_E STR_F STR_I STR_N STR_E
#define STRING_VERSION               STR_V STR_E STR_R STR_S STR_I STR_O STR_N
#define STRING_WEIRD_STARTWORD       STR_LEFT_SQUARE_BRACKET STR_COLON STR_LESS_THAN_SIGN STR_COLON STR_RIGHT_SQUARE_BRACKET STR_RIGHT_SQUARE_BRACKET
#define STRING_WEIRD_ENDWORD         STR_LEFT_SQUARE_BRACKET STR_COLON STR_GREATER_THAN_SIGN STR_COLON STR_RIGHT_SQUARE_BRACKET STR_RIGHT_SQUARE_BRACKET

#define STRING_CR_RIGHTPAR                STR_C STR_R STR_RIGHT_PARENTHESIS
#define STRING_LF_RIGHTPAR                STR_L STR_F STR_RIGHT_PARENTHESIS
#define STRING_CRLF_RIGHTPAR              STR_C STR_R STR_L STR_F STR_RIGHT_PARENTHESIS
#define STRING_ANY_RIGHTPAR               STR_A STR_N STR_Y STR_RIGHT_PARENTHESIS
#define STRING_ANYCRLF_RIGHTPAR           STR_A STR_N STR_Y STR_C STR_R STR_L STR_F STR_RIGHT_PARENTHESIS
#define STRING_NUL_RIGHTPAR               STR_N STR_U STR_L STR_RIGHT_PARENTHESIS
#define STRING_BSR_ANYCRLF_RIGHTPAR       STR_B STR_S STR_R STR_UNDERSCORE STR_A STR_N STR_Y STR_C STR_R STR_L STR_F STR_RIGHT_PARENTHESIS
#define STRING_BSR_UNICODE_RIGHTPAR       STR_B STR_S STR_R STR_UNDERSCORE STR_U STR_N STR_I STR_C STR_O STR_D STR_E STR_RIGHT_PARENTHESIS
#define STRING_UTF8_RIGHTPAR              STR_U STR_T STR_F STR_8 STR_RIGHT_PARENTHESIS
#define STRING_UTF16_RIGHTPAR             STR_U STR_T STR_F STR_1 STR_6 STR_RIGHT_PARENTHESIS
#define STRING_UTF32_RIGHTPAR             STR_U STR_T STR_F STR_3 STR_2 STR_RIGHT_PARENTHESIS
#define STRING_UTF_RIGHTPAR               STR_U STR_T STR_F STR_RIGHT_PARENTHESIS
#define STRING_UCP_RIGHTPAR               STR_U STR_C STR_P STR_RIGHT_PARENTHESIS
#define STRING_NO_AUTO_POSSESS_RIGHTPAR   STR_N STR_O STR_UNDERSCORE STR_A STR_U STR_T STR_O STR_UNDERSCORE STR_P STR_O STR_S STR_S STR_E STR_S STR_S STR_RIGHT_PARENTHESIS
#define STRING_NO_DOTSTAR_ANCHOR_RIGHTPAR STR_N STR_O STR_UNDERSCORE STR_D STR_O STR_T STR_S STR_T STR_A STR_R STR_UNDERSCORE STR_A STR_N STR_C STR_H STR_O STR_R STR_RIGHT_PARENTHESIS
#define STRING_NO_JIT_RIGHTPAR            STR_N STR_O STR_UNDERSCORE STR_J STR_I STR_T STR_RIGHT_PARENTHESIS
#define STRING_NO_START_OPT_RIGHTPAR      STR_N STR_O STR_UNDERSCORE STR_S STR_T STR_A STR_R STR_T STR_UNDERSCORE STR_O STR_P STR_T STR_RIGHT_PARENTHESIS
#define STRING_NOTEMPTY_RIGHTPAR          STR_N STR_O STR_T STR_E STR_M STR_P STR_T STR_Y STR_RIGHT_PARENTHESIS
#define STRING_NOTEMPTY_ATSTART_RIGHTPAR  STR_N STR_O STR_T STR_E STR_M STR_P STR_T STR_Y STR_UNDERSCORE STR_A STR_T STR_S STR_T STR_A STR_R STR_T STR_RIGHT_PARENTHESIS
#define STRING_LIMIT_HEAP_EQ              STR_L STR_I STR_M STR_I STR_T STR_UNDERSCORE STR_H STR_E STR_A STR_P STR_EQUALS_SIGN
#define STRING_LIMIT_MATCH_EQ             STR_L STR_I STR_M STR_I STR_T STR_UNDERSCORE STR_M STR_A STR_T STR_C STR_H STR_EQUALS_SIGN
#define STRING_LIMIT_DEPTH_EQ             STR_L STR_I STR_M STR_I STR_T STR_UNDERSCORE STR_D STR_E STR_P STR_T STR_H STR_EQUALS_SIGN
#define STRING_LIMIT_RECURSION_EQ         STR_L STR_I STR_M STR_I STR_T STR_UNDERSCORE STR_R STR_E STR_C STR_U STR_R STR_S STR_I STR_O STR_N STR_EQUALS_SIGN
#define STRING_MARK                       STR_M STR_A STR_R STR_K

#define STRING_bc                         STR_b STR_c
#define STRING_bidiclass                  STR_b STR_i STR_d STR_i STR_c STR_l STR_a STR_s STR_s
#define STRING_sc                         STR_s STR_c
#define STRING_script                     STR_s STR_c STR_r STR_i STR_p STR_t
#define STRING_scriptextensions           STR_s STR_c STR_r STR_i STR_p STR_t STR_e STR_x STR_t STR_e STR_n STR_s STR_i STR_o STR_n STR_s
#define STRING_scx                        STR_s STR_c STR_x


#endif  /* SUPPORT_UNICODE */

/* -------------------- End of character and string names -------------------*/

/* -------------------- Definitions for compiled patterns -------------------*/

/* Codes for different types of Unicode property. If these definitions are
changed, the autopossessifying table in pcre2_auto_possess.c must be updated to
match. */

#define PT_ANY        0    /* Any property - matches all chars */
#define PT_LAMP       1    /* L& - the union of Lu, Ll, Lt */
#define PT_GC         2    /* Specified general characteristic (e.g. L) */
#define PT_PC         3    /* Specified particular characteristic (e.g. Lu) */
#define PT_SC         4    /* Script only (e.g. Han) */
#define PT_SCX        5    /* Script extensions (includes SC) */
#define PT_ALNUM      6    /* Alphanumeric - the union of L and N */
#define PT_SPACE      7    /* Perl space - general category Z plus 9,10,12,13 */
#define PT_PXSPACE    8    /* POSIX space - Z plus 9,10,11,12,13 */
#define PT_WORD       9    /* Word - L, N, Mn, or Pc */
#define PT_CLIST     10    /* Pseudo-property: match character list */
#define PT_UCNC      11    /* Universal Character nameable character */
#define PT_BIDICL    12    /* Specified bidi class */
#define PT_BOOL      13    /* Boolean property */
#define PT_TABSIZE   14    /* Size of square table for autopossessify tests */

/* The following special properties are used only in XCLASS items, when POSIX
classes are specified and PCRE2_UCP is set - in other words, for Unicode
handling of these classes. They are not available via the \p or \P escapes like
those in the above list, and so they do not take part in the autopossessifying
table. */

#define PT_PXGRAPH   14    /* [:graph:] - characters that mark the paper */
#define PT_PXPRINT   15    /* [:print:] - [:graph:] plus non-control spaces */
#define PT_PXPUNCT   16    /* [:punct:] - punctuation characters */
#define PT_PXXDIGIT  17    /* [:xdigit:] - hex digits */

/* This value is used when parsing \p and \P escapes to indicate that neither
\p{script:...} nor \p{scx:...} has been encountered. */

#define PT_NOTSCRIPT 255

/* Flag bits and data types for the extended class (OP_XCLASS) for classes that
contain characters with values greater than 255. */

#define XCL_NOT      0x01  /* Flag: this is a negative class */
#define XCL_MAP      0x02  /* Flag: a 32-byte map is present */
#define XCL_HASPROP  0x04  /* Flag: property checks are present. */

#define XCL_END      0     /* Marks end of individual items */
#define XCL_SINGLE   1     /* Single item (one multibyte char) follows */
#define XCL_RANGE    2     /* A range (two multibyte chars) follows */
#define XCL_PROP     3     /* Unicode property (2-byte property code follows) */
#define XCL_NOTPROP  4     /* Unicode inverted property (ditto) */

/* These are escaped items that aren't just an encoding of a particular data
value such as \n. They must have non-zero values, as check_escape() returns 0
for a data character. In the escapes[] table in pcre2_compile.c their values
are negated in order to distinguish them from data values.

They must appear here in the same order as in the opcode definitions below, up
to ESC_z. There's a dummy for OP_ALLANY because it corresponds to "." in DOTALL
mode rather than an escape sequence. It is also used for [^] in JavaScript
compatibility mode, and for \C in non-utf mode. In non-DOTALL mode, "." behaves
like \N.

ESC_ub is a special return from check_escape() when, in BSUX mode, \u{ is not
followed by hex digits and }, in which case it should mean a literal "u"
followed by a literal "{". This hack is necessary for cases like \u{ 12}
because without it, this is interpreted as u{12} now that spaces are allowed in
quantifiers.

Negative numbers are used to encode a backreference (\1, \2, \3, etc.) in
check_escape(). There are tests in the code for an escape greater than ESC_b
and less than ESC_Z to detect the types that may be repeated. These are the
types that consume characters. If any new escapes are put in between that don't
consume a character, that code will have to change. */

enum { ESC_A = 1, ESC_G, ESC_K, ESC_B, ESC_b, ESC_D, ESC_d, ESC_S, ESC_s,
       ESC_W, ESC_w, ESC_N, ESC_dum, ESC_C, ESC_P, ESC_p, ESC_R, ESC_H,
       ESC_h, ESC_V, ESC_v, ESC_X, ESC_Z, ESC_z,
       ESC_E, ESC_Q, ESC_g, ESC_k, ESC_ub };


/********************** Opcode definitions ******************/

/****** NOTE NOTE NOTE ******

Starting from 1 (i.e. after OP_END), the values up to OP_EOD must correspond in
order to the list of escapes immediately above. Furthermore, values up to
OP_DOLLM must not be changed without adjusting the table called autoposstab in
pcre2_auto_possess.c.

Whenever this list is updated, the two macro definitions that follow must be
updated to match. The possessification table called "opcode_possessify" in
pcre2_compile.c must also be updated, and also the tables called "coptable"
and "poptable" in pcre2_dfa_match.c.

****** NOTE NOTE NOTE ******/


/* The values between FIRST_AUTOTAB_OP and LAST_AUTOTAB_RIGHT_OP, inclusive,
are used in a table for deciding whether a repeated character type can be
auto-possessified. */

#define FIRST_AUTOTAB_OP       OP_NOT_DIGIT
#define LAST_AUTOTAB_LEFT_OP   OP_EXTUNI
#define LAST_AUTOTAB_RIGHT_OP  OP_DOLLM

enum {
  OP_END,            /* 0 End of pattern */

  /* Values corresponding to backslashed metacharacters */

  OP_SOD,            /* 1 Start of data: \A */
  OP_SOM,            /* 2 Start of match (subject + offset): \G */
  OP_SET_SOM,        /* 3 Set start of match (\K) */
  OP_NOT_WORD_BOUNDARY,  /*  4 \B -- see also OP_NOT_UCP_WORD_BOUNDARY */
  OP_WORD_BOUNDARY,      /*  5 \b -- see also OP_UCP_WORD_BOUNDARY */
  OP_NOT_DIGIT,          /*  6 \D */
  OP_DIGIT,              /*  7 \d */
  OP_NOT_WHITESPACE,     /*  8 \S */
  OP_WHITESPACE,         /*  9 \s */
  OP_NOT_WORDCHAR,       /* 10 \W */
  OP_WORDCHAR,           /* 11 \w */

  OP_ANY,            /* 12 Match any character except newline (\N) */
  OP_ALLANY,         /* 13 Match any character */
  OP_ANYBYTE,        /* 14 Match any byte (\C); different to OP_ANY for UTF-8 */
  OP_NOTPROP,        /* 15 \P (not Unicode property) */
  OP_PROP,           /* 16 \p (Unicode property) */
  OP_ANYNL,          /* 17 \R (any newline sequence) */
  OP_NOT_HSPACE,     /* 18 \H (not horizontal whitespace) */
  OP_HSPACE,         /* 19 \h (horizontal whitespace) */
  OP_NOT_VSPACE,     /* 20 \V (not vertical whitespace) */
  OP_VSPACE,         /* 21 \v (vertical whitespace) */
  OP_EXTUNI,         /* 22 \X (extended Unicode sequence */
  OP_EODN,           /* 23 End of data or \n at end of data (\Z) */
  OP_EOD,            /* 24 End of data (\z) */

  /* Line end assertions */

  OP_DOLL,           /* 25 End of line - not multiline */
  OP_DOLLM,          /* 26 End of line - multiline */
  OP_CIRC,           /* 27 Start of line - not multiline */
  OP_CIRCM,          /* 28 Start of line - multiline */

  /* Single characters; caseful must precede the caseless ones, and these
  must remain in this order, and adjacent. */

  OP_CHAR,           /* 29 Match one character, casefully */
  OP_CHARI,          /* 30 Match one character, caselessly */
  OP_NOT,            /* 31 Match one character, not the given one, casefully */
  OP_NOTI,           /* 32 Match one character, not the given one, caselessly */

  /* The following sets of 13 opcodes must always be kept in step because
  the offset from the first one is used to generate the others. */

  /* Repeated characters; caseful must precede the caseless ones */

  OP_STAR,           /* 33 The maximizing and minimizing versions of */
  OP_MINSTAR,        /* 34 these six opcodes must come in pairs, with */
  OP_PLUS,           /* 35 the minimizing one second. */
  OP_MINPLUS,        /* 36 */
  OP_QUERY,          /* 37 */
  OP_MINQUERY,       /* 38 */

  OP_UPTO,           /* 39 From 0 to n matches of one character, caseful*/
  OP_MINUPTO,        /* 40 */
  OP_EXACT,          /* 41 Exactly n matches */

  OP_POSSTAR,        /* 42 Possessified star, caseful */
  OP_POSPLUS,        /* 43 Possessified plus, caseful */
  OP_POSQUERY,       /* 44 Posesssified query, caseful */
  OP_POSUPTO,        /* 45 Possessified upto, caseful */

  /* Repeated characters; caseless must follow the caseful ones */

  OP_STARI,          /* 46 */
  OP_MINSTARI,       /* 47 */
  OP_PLUSI,          /* 48 */
  OP_MINPLUSI,       /* 49 */
  OP_QUERYI,         /* 50 */
  OP_MINQUERYI,      /* 51 */

  OP_UPTOI,          /* 52 From 0 to n matches of one character, caseless */
  OP_MINUPTOI,       /* 53 */
  OP_EXACTI,         /* 54 */

  OP_POSSTARI,       /* 55 Possessified star, caseless */
  OP_POSPLUSI,       /* 56 Possessified plus, caseless */
  OP_POSQUERYI,      /* 57 Posesssified query, caseless */
  OP_POSUPTOI,       /* 58 Possessified upto, caseless */

  /* The negated ones must follow the non-negated ones, and match them */
  /* Negated repeated character, caseful; must precede the caseless ones */

  OP_NOTSTAR,        /* 59 The maximizing and minimizing versions of */
  OP_NOTMINSTAR,     /* 60 these six opcodes must come in pairs, with */
  OP_NOTPLUS,        /* 61 the minimizing one second. They must be in */
  OP_NOTMINPLUS,     /* 62 exactly the same order as those above. */
  OP_NOTQUERY,       /* 63 */
  OP_NOTMINQUERY,    /* 64 */

  OP_NOTUPTO,        /* 65 From 0 to n matches, caseful */
  OP_NOTMINUPTO,     /* 66 */
  OP_NOTEXACT,       /* 67 Exactly n matches */

  OP_NOTPOSSTAR,     /* 68 Possessified versions, caseful */
  OP_NOTPOSPLUS,     /* 69 */
  OP_NOTPOSQUERY,    /* 70 */
  OP_NOTPOSUPTO,     /* 71 */

  /* Negated repeated character, caseless; must follow the caseful ones */

  OP_NOTSTARI,       /* 72 */
  OP_NOTMINSTARI,    /* 73 */
  OP_NOTPLUSI,       /* 74 */
  OP_NOTMINPLUSI,    /* 75 */
  OP_NOTQUERYI,      /* 76 */
  OP_NOTMINQUERYI,   /* 77 */

  OP_NOTUPTOI,       /* 78 From 0 to n matches, caseless */
  OP_NOTMINUPTOI,    /* 79 */
  OP_NOTEXACTI,      /* 80 Exactly n matches */

  OP_NOTPOSSTARI,    /* 81 Possessified versions, caseless */
  OP_NOTPOSPLUSI,    /* 82 */
  OP_NOTPOSQUERYI,   /* 83 */
  OP_NOTPOSUPTOI,    /* 84 */

  /* Character types */

  OP_TYPESTAR,       /* 85 The maximizing and minimizing versions of */
  OP_TYPEMINSTAR,    /* 86 these six opcodes must come in pairs, with */
  OP_TYPEPLUS,       /* 87 the minimizing one second. These codes must */
  OP_TYPEMINPLUS,    /* 88 be in exactly the same order as those above. */
  OP_TYPEQUERY,      /* 89 */
  OP_TYPEMINQUERY,   /* 90 */

  OP_TYPEUPTO,       /* 91 From 0 to n matches */
  OP_TYPEMINUPTO,    /* 92 */
  OP_TYPEEXACT,      /* 93 Exactly n matches */

  OP_TYPEPOSSTAR,    /* 94 Possessified versions */
  OP_TYPEPOSPLUS,    /* 95 */
  OP_TYPEPOSQUERY,   /* 96 */
  OP_TYPEPOSUPTO,    /* 97 */

  /* These are used for character classes and back references; only the
  first six are the same as the sets above. */

  OP_CRSTAR,         /* 98 The maximizing and minimizing versions of */
  OP_CRMINSTAR,      /* 99 all these opcodes must come in pairs, with */
  OP_CRPLUS,         /* 100 the minimizing one second. These codes must */
  OP_CRMINPLUS,      /* 101 be in exactly the same order as those above. */
  OP_CRQUERY,        /* 102 */
  OP_CRMINQUERY,     /* 103 */

  OP_CRRANGE,        /* 104 These are different to the three sets above. */
  OP_CRMINRANGE,     /* 105 */

  OP_CRPOSSTAR,      /* 106 Possessified versions */
  OP_CRPOSPLUS,      /* 107 */
  OP_CRPOSQUERY,     /* 108 */
  OP_CRPOSRANGE,     /* 109 */

  /* End of quantifier opcodes */

  OP_CLASS,          /* 110 Match a character class, chars < 256 only */
  OP_NCLASS,         /* 111 Same, but the bitmap was created from a negative
                              class - the difference is relevant only when a
                              character > 255 is encountered. */
  OP_XCLASS,         /* 112 Extended class for handling > 255 chars within the
                              class. This does both positive and negative. */
  OP_REF,            /* 113 Match a back reference, casefully */
  OP_REFI,           /* 114 Match a back reference, caselessly */
  OP_DNREF,          /* 115 Match a duplicate name backref, casefully */
  OP_DNREFI,         /* 116 Match a duplicate name backref, caselessly */
  OP_RECURSE,        /* 117 Match a numbered subpattern (possibly recursive) */
  OP_CALLOUT,        /* 118 Call out to external function if provided */
  OP_CALLOUT_STR,    /* 119 Call out with string argument */

  OP_ALT,            /* 120 Start of alternation */
  OP_KET,            /* 121 End of group that doesn't have an unbounded repeat */
  OP_KETRMAX,        /* 122 These two must remain together and in this */
  OP_KETRMIN,        /* 123 order. They are for groups the repeat for ever. */
  OP_KETRPOS,        /* 124 Possessive unlimited repeat. */

  /* The assertions must come before BRA, CBRA, ONCE, and COND. */

  OP_REVERSE,        /* 125 Move pointer back - used in lookbehind assertions */
  OP_VREVERSE,       /* 126 Move pointer back - variable */
  OP_ASSERT,         /* 127 Positive lookahead */
  OP_ASSERT_NOT,     /* 128 Negative lookahead */
  OP_ASSERTBACK,     /* 129 Positive lookbehind */
  OP_ASSERTBACK_NOT, /* 130 Negative lookbehind */
  OP_ASSERT_NA,      /* 131 Positive non-atomic lookahead */
  OP_ASSERTBACK_NA,  /* 132 Positive non-atomic lookbehind */

  /* ONCE, SCRIPT_RUN, BRA, BRAPOS, CBRA, CBRAPOS, and COND must come
  immediately after the assertions, with ONCE first, as there's a test for >=
  ONCE for a subpattern that isn't an assertion. The POS versions must
  immediately follow the non-POS versions in each case. */

  OP_ONCE,           /* 133 Atomic group, contains captures */
  OP_SCRIPT_RUN,     /* 134 Non-capture, but check characters' scripts */
  OP_BRA,            /* 135 Start of non-capturing bracket */
  OP_BRAPOS,         /* 136 Ditto, with unlimited, possessive repeat */
  OP_CBRA,           /* 137 Start of capturing bracket */
  OP_CBRAPOS,        /* 138 Ditto, with unlimited, possessive repeat */
  OP_COND,           /* 139 Conditional group */

  /* These five must follow the previous five, in the same order. There's a
  check for >= SBRA to distinguish the two sets. */

  OP_SBRA,           /* 140 Start of non-capturing bracket, check empty  */
  OP_SBRAPOS,        /* 141 Ditto, with unlimited, possessive repeat */
  OP_SCBRA,          /* 142 Start of capturing bracket, check empty */
  OP_SCBRAPOS,       /* 143 Ditto, with unlimited, possessive repeat */
  OP_SCOND,          /* 144 Conditional group, check empty */

  /* The next two pairs must (respectively) be kept together. */

  OP_CREF,           /* 145 Used to hold a capture number as condition */
  OP_DNCREF,         /* 146 Used to point to duplicate names as a condition */
  OP_RREF,           /* 147 Used to hold a recursion number as condition */
  OP_DNRREF,         /* 148 Used to point to duplicate names as a condition */
  OP_FALSE,          /* 149 Always false (used by DEFINE and VERSION) */
  OP_TRUE,           /* 150 Always true (used by VERSION) */

  OP_BRAZERO,        /* 151 These two must remain together and in this */
  OP_BRAMINZERO,     /* 152 order. */
  OP_BRAPOSZERO,     /* 153 */

  /* These are backtracking control verbs */

  OP_MARK,           /* 154 always has an argument */
  OP_PRUNE,          /* 155 */
  OP_PRUNE_ARG,      /* 156 same, but with argument */
  OP_SKIP,           /* 157 */
  OP_SKIP_ARG,       /* 158 same, but with argument */
  OP_THEN,           /* 159 */
  OP_THEN_ARG,       /* 160 same, but with argument */
  OP_COMMIT,         /* 161 */
  OP_COMMIT_ARG,     /* 162 same, but with argument */

  /* These are forced failure and success verbs. FAIL and ACCEPT do accept an
  argument, but these cases can be compiled as, for example, (*MARK:X)(*FAIL)
  without the need for a special opcode. */

  OP_FAIL,           /* 163 */
  OP_ACCEPT,         /* 164 */
  OP_ASSERT_ACCEPT,  /* 165 Used inside assertions */
  OP_CLOSE,          /* 166 Used before OP_ACCEPT to close open captures */

  /* This is used to skip a subpattern with a {0} quantifier */

  OP_SKIPZERO,       /* 167 */

  /* This is used to identify a DEFINE group during compilation so that it can
  be checked for having only one branch. It is changed to OP_FALSE before
  compilation finishes. */

  OP_DEFINE,         /* 168 */

  /* These opcodes replace their normal counterparts in UCP mode when
  PCRE2_EXTRA_ASCII_BSW is not set. */

  OP_NOT_UCP_WORD_BOUNDARY, /* 169 */
  OP_UCP_WORD_BOUNDARY,     /* 170 */

  /* This is not an opcode, but is used to check that tables indexed by opcode
  are the correct length, in order to catch updating errors - there have been
  some in the past. */

  OP_TABLE_LENGTH

};

/* *** NOTE NOTE NOTE *** Whenever the list above is updated, the two macro
definitions that follow must also be updated to match. There are also tables
called "opcode_possessify" in pcre2_compile.c and "coptable" and "poptable" in
pcre2_dfa_match.c that must be updated. */


/* This macro defines textual names for all the opcodes. These are used only
for debugging, and some of them are only partial names. The macro is referenced
only in pcre2_printint.c, which fills out the full names in many cases (and in
some cases doesn't actually use these names at all). */

#define OP_NAME_LIST \
  "End", "\\A", "\\G", "\\K", "\\B", "\\b", "\\D", "\\d",         \
  "\\S", "\\s", "\\W", "\\w", "Any", "AllAny", "Anybyte",         \
  "notprop", "prop", "\\R", "\\H", "\\h", "\\V", "\\v",           \
  "extuni",  "\\Z", "\\z",                                        \
  "$", "$", "^", "^", "char", "chari", "not", "noti",             \
  "*", "*?", "+", "+?", "?", "??",                                \
  "{", "{", "{",                                                  \
  "*+","++", "?+", "{",                                           \
  "*", "*?", "+", "+?", "?", "??",                                \
  "{", "{", "{",                                                  \
  "*+","++", "?+", "{",                                           \
  "*", "*?", "+", "+?", "?", "??",                                \
  "{", "{", "{",                                                  \
  "*+","++", "?+", "{",                                           \
  "*", "*?", "+", "+?", "?", "??",                                \
  "{", "{", "{",                                                  \
  "*+","++", "?+", "{",                                           \
  "*", "*?", "+", "+?", "?", "??", "{", "{", "{",                 \
  "*+","++", "?+", "{",                                           \
  "*", "*?", "+", "+?", "?", "??", "{", "{",                      \
  "*+","++", "?+", "{",                                           \
  "class", "nclass", "xclass", "Ref", "Refi", "DnRef", "DnRefi",  \
  "Recurse", "Callout", "CalloutStr",                             \
  "Alt", "Ket", "KetRmax", "KetRmin", "KetRpos",                  \
  "Reverse", "VReverse", "Assert", "Assert not",                  \
  "Assert back", "Assert back not",                               \
  "Non-atomic assert", "Non-atomic assert back",                  \
  "Once",                                                         \
  "Script run",                                                   \
  "Bra", "BraPos", "CBra", "CBraPos",                             \
  "Cond",                                                         \
  "SBra", "SBraPos", "SCBra", "SCBraPos",                         \
  "SCond",                                                        \
  "Cond ref", "Cond dnref", "Cond rec", "Cond dnrec",             \
  "Cond false", "Cond true",                                      \
  "Brazero", "Braminzero", "Braposzero",                          \
  "*MARK", "*PRUNE", "*PRUNE", "*SKIP", "*SKIP",                  \
  "*THEN", "*THEN", "*COMMIT", "*COMMIT", "*FAIL",                \
  "*ACCEPT", "*ASSERT_ACCEPT",                                    \
  "Close", "Skip zero", "Define", "\\B (ucp)", "\\b (ucp)"


/* This macro defines the length of fixed length operations in the compiled
regex. The lengths are used when searching for specific things, and also in the
debugging printing of a compiled regex. We use a macro so that it can be
defined close to the definitions of the opcodes themselves.

As things have been extended, some of these are no longer fixed lenths, but are
minima instead. For example, the length of a single-character repeat may vary
in UTF-8 mode. The code that uses this table must know about such things. */

#define OP_LENGTHS \
  1,                             /* End                                    */ \
  1, 1, 1, 1, 1,                 /* \A, \G, \K, \B, \b                     */ \
  1, 1, 1, 1, 1, 1,              /* \D, \d, \S, \s, \W, \w                 */ \
  1, 1, 1,                       /* Any, AllAny, Anybyte                   */ \
  3, 3,                          /* \P, \p                                 */ \
  1, 1, 1, 1, 1,                 /* \R, \H, \h, \V, \v                     */ \
  1,                             /* \X                                     */ \
  1, 1, 1, 1, 1, 1,              /* \Z, \z, $, $M ^, ^M                    */ \
  2,                             /* Char  - the minimum length             */ \
  2,                             /* Chari  - the minimum length            */ \
  2,                             /* not                                    */ \
  2,                             /* noti                                   */ \
  /* Positive single-char repeats                             ** These are */ \
  2, 2, 2, 2, 2, 2,              /* *, *?, +, +?, ?, ??       ** minima in */ \
  2+IMM2_SIZE, 2+IMM2_SIZE,      /* upto, minupto             ** mode      */ \
  2+IMM2_SIZE,                   /* exact                                  */ \
  2, 2, 2, 2+IMM2_SIZE,          /* *+, ++, ?+, upto+                      */ \
  2, 2, 2, 2, 2, 2,              /* *I, *?I, +I, +?I, ?I, ??I ** UTF-8     */ \
  2+IMM2_SIZE, 2+IMM2_SIZE,      /* upto I, minupto I                      */ \
  2+IMM2_SIZE,                   /* exact I                                */ \
  2, 2, 2, 2+IMM2_SIZE,          /* *+I, ++I, ?+I, upto+I                  */ \
  /* Negative single-char repeats - only for chars < 256                   */ \
  2, 2, 2, 2, 2, 2,              /* NOT *, *?, +, +?, ?, ??                */ \
  2+IMM2_SIZE, 2+IMM2_SIZE,      /* NOT upto, minupto                      */ \
  2+IMM2_SIZE,                   /* NOT exact                              */ \
  2, 2, 2, 2+IMM2_SIZE,          /* Possessive NOT *, +, ?, upto           */ \
  2, 2, 2, 2, 2, 2,              /* NOT *I, *?I, +I, +?I, ?I, ??I          */ \
  2+IMM2_SIZE, 2+IMM2_SIZE,      /* NOT upto I, minupto I                  */ \
  2+IMM2_SIZE,                   /* NOT exact I                            */ \
  2, 2, 2, 2+IMM2_SIZE,          /* Possessive NOT *I, +I, ?I, upto I      */ \
  /* Positive type repeats                                                 */ \
  2, 2, 2, 2, 2, 2,              /* Type *, *?, +, +?, ?, ??               */ \
  2+IMM2_SIZE, 2+IMM2_SIZE,      /* Type upto, minupto                     */ \
  2+IMM2_SIZE,                   /* Type exact                             */ \
  2, 2, 2, 2+IMM2_SIZE,          /* Possessive *+, ++, ?+, upto+           */ \
  /* Character class & ref repeats                                         */ \
  1, 1, 1, 1, 1, 1,              /* *, *?, +, +?, ?, ??                    */ \
  1+2*IMM2_SIZE, 1+2*IMM2_SIZE,  /* CRRANGE, CRMINRANGE                    */ \
  1, 1, 1, 1+2*IMM2_SIZE,        /* Possessive *+, ++, ?+, CRPOSRANGE      */ \
  1+(32/sizeof(PCRE2_UCHAR)),    /* CLASS                                  */ \
  1+(32/sizeof(PCRE2_UCHAR)),    /* NCLASS                                 */ \
  0,                             /* XCLASS - variable length               */ \
  1+IMM2_SIZE,                   /* REF                                    */ \
  1+IMM2_SIZE,                   /* REFI                                   */ \
  1+2*IMM2_SIZE,                 /* DNREF                                  */ \
  1+2*IMM2_SIZE,                 /* DNREFI                                 */ \
  1+LINK_SIZE,                   /* RECURSE                                */ \
  1+2*LINK_SIZE+1,               /* CALLOUT                                */ \
  0,                             /* CALLOUT_STR - variable length          */ \
  1+LINK_SIZE,                   /* Alt                                    */ \
  1+LINK_SIZE,                   /* Ket                                    */ \
  1+LINK_SIZE,                   /* KetRmax                                */ \
  1+LINK_SIZE,                   /* KetRmin                                */ \
  1+LINK_SIZE,                   /* KetRpos                                */ \
  1+IMM2_SIZE,                   /* Reverse                                */ \
  1+2*IMM2_SIZE,                 /* VReverse                               */ \
  1+LINK_SIZE,                   /* Assert                                 */ \
  1+LINK_SIZE,                   /* Assert not                             */ \
  1+LINK_SIZE,                   /* Assert behind                          */ \
  1+LINK_SIZE,                   /* Assert behind not                      */ \
  1+LINK_SIZE,                   /* NA Assert                              */ \
  1+LINK_SIZE,                   /* NA Assert behind                       */ \
  1+LINK_SIZE,                   /* ONCE                                   */ \
  1+LINK_SIZE,                   /* SCRIPT_RUN                             */ \
  1+LINK_SIZE,                   /* BRA                                    */ \
  1+LINK_SIZE,                   /* BRAPOS                                 */ \
  1+LINK_SIZE+IMM2_SIZE,         /* CBRA                                   */ \
  1+LINK_SIZE+IMM2_SIZE,         /* CBRAPOS                                */ \
  1+LINK_SIZE,                   /* COND                                   */ \
  1+LINK_SIZE,                   /* SBRA                                   */ \
  1+LINK_SIZE,                   /* SBRAPOS                                */ \
  1+LINK_SIZE+IMM2_SIZE,         /* SCBRA                                  */ \
  1+LINK_SIZE+IMM2_SIZE,         /* SCBRAPOS                               */ \
  1+LINK_SIZE,                   /* SCOND                                  */ \
  1+IMM2_SIZE, 1+2*IMM2_SIZE,    /* CREF, DNCREF                           */ \
  1+IMM2_SIZE, 1+2*IMM2_SIZE,    /* RREF, DNRREF                           */ \
  1, 1,                          /* FALSE, TRUE                            */ \
  1, 1, 1,                       /* BRAZERO, BRAMINZERO, BRAPOSZERO        */ \
  3, 1, 3,                       /* MARK, PRUNE, PRUNE_ARG                 */ \
  1, 3,                          /* SKIP, SKIP_ARG                         */ \
  1, 3,                          /* THEN, THEN_ARG                         */ \
  1, 3,                          /* COMMIT, COMMIT_ARG                     */ \
  1, 1, 1,                       /* FAIL, ACCEPT, ASSERT_ACCEPT            */ \
  1+IMM2_SIZE, 1,                /* CLOSE, SKIPZERO                        */ \
  1,                             /* DEFINE                                 */ \
  1, 1                           /* \B and \b in UCP mode                  */

/* A magic value for OP_RREF to indicate the "any recursion" condition. */

#define RREF_ANY  0xffff


/* ---------- Private structures that are mode-independent. ---------- */

/* Structure to hold data for custom memory management. */

typedef struct pcre2_memctl {
  void *    (*malloc)(size_t, void *);
  void      (*free)(void *, void *);
  void      *memory_data;
} pcre2_memctl;

/* Structure for building a chain of open capturing subpatterns during
compiling, so that instructions to close them can be compiled when (*ACCEPT) is
encountered. */

typedef struct open_capitem {
  struct open_capitem *next;    /* Chain link */
  uint16_t number;              /* Capture number */
  uint16_t assert_depth;        /* Assertion depth when opened */
} open_capitem;

/* Layout of the UCP type table that translates property names into types and
codes. Each entry used to point directly to a name, but to reduce the number of
relocations in shared libraries, it now has an offset into a single string
instead. */

typedef struct {
  uint16_t name_offset;
  uint16_t type;
  uint16_t value;
} ucp_type_table;

/* Unicode character database (UCD) record format */

typedef struct {
  uint8_t script;     /* ucp_Arabic, etc. */
  uint8_t chartype;   /* ucp_Cc, etc. (general categories) */
  uint8_t gbprop;     /* ucp_gbControl, etc. (grapheme break property) */
  uint8_t caseset;    /* offset to multichar other cases or zero */
  int32_t other_case; /* offset to other case, or zero if none */
  uint16_t scriptx_bidiclass; /* script extension (11 bit) and bidi class (5 bit) values */
  uint16_t bprops;    /* binary properties offset */
} ucd_record;

/* UCD access macros */

#define UCD_BLOCK_SIZE 128
#define REAL_GET_UCD(ch) (PRIV(ucd_records) + \
        PRIV(ucd_stage2)[PRIV(ucd_stage1)[(int)(ch) / UCD_BLOCK_SIZE] * \
        UCD_BLOCK_SIZE + (int)(ch) % UCD_BLOCK_SIZE])

#if PCRE2_CODE_UNIT_WIDTH == 32
#define GET_UCD(ch) ((ch > MAX_UTF_CODE_POINT)? \
  PRIV(dummy_ucd_record) : REAL_GET_UCD(ch))
#else
#define GET_UCD(ch) REAL_GET_UCD(ch)
#endif

#define UCD_SCRIPTX_MASK 0x3ff
#define UCD_BIDICLASS_SHIFT 11
#define UCD_BPROPS_MASK 0xfff

#define UCD_SCRIPTX_PROP(prop) ((prop)->scriptx_bidiclass & UCD_SCRIPTX_MASK)
#define UCD_BIDICLASS_PROP(prop) ((prop)->scriptx_bidiclass >> UCD_BIDICLASS_SHIFT)
#define UCD_BPROPS_PROP(prop) ((prop)->bprops & UCD_BPROPS_MASK)

#define UCD_CHARTYPE(ch)    GET_UCD(ch)->chartype
#define UCD_SCRIPT(ch)      GET_UCD(ch)->script
#define UCD_CATEGORY(ch)    PRIV(ucp_gentype)[UCD_CHARTYPE(ch)]
#define UCD_GRAPHBREAK(ch)  GET_UCD(ch)->gbprop
#define UCD_CASESET(ch)     GET_UCD(ch)->caseset
#define UCD_OTHERCASE(ch)   ((uint32_t)((int)ch + (int)(GET_UCD(ch)->other_case)))
#define UCD_SCRIPTX(ch)     UCD_SCRIPTX_PROP(GET_UCD(ch))
#define UCD_BPROPS(ch)      UCD_BPROPS_PROP(GET_UCD(ch))
#define UCD_BIDICLASS(ch)   UCD_BIDICLASS_PROP(GET_UCD(ch))

/* The "scriptx" and bprops fields contain offsets into vectors of 32-bit words
that form a bitmap representing a list of scripts or boolean properties. These
macros test or set a bit in the map by number. */

#define MAPBIT(map,n) ((map)[(n)/32]&(1u<<((n)%32)))
#define MAPSET(map,n) ((map)[(n)/32]|=(1u<<((n)%32)))

/* Header for serialized pcre2 codes. */

typedef struct pcre2_serialized_data {
  uint32_t magic;
  uint32_t version;
  uint32_t config;
  int32_t  number_of_codes;
} pcre2_serialized_data;



/* ----------------- Items that need PCRE2_CODE_UNIT_WIDTH ----------------- */

/* When this file is included by pcre2test, PCRE2_CODE_UNIT_WIDTH is defined as
0, so the following items are omitted. */

#if defined PCRE2_CODE_UNIT_WIDTH && PCRE2_CODE_UNIT_WIDTH != 0

/* EBCDIC is supported only for the 8-bit library. */

#if defined EBCDIC && PCRE2_CODE_UNIT_WIDTH != 8
#error EBCDIC is not supported for the 16-bit or 32-bit libraries
#endif

/* This is the largest non-UTF code point. */

#define MAX_NON_UTF_CHAR (0xffffffffU >> (32 - PCRE2_CODE_UNIT_WIDTH))

/* Internal shared data tables and variables. These are used by more than one
of the exported public functions. They have to be "external" in the C sense,
but are not part of the PCRE2 public API. Although the data for some of them is
identical in all libraries, they must have different names so that multiple
libraries can be simultaneously linked to a single application. However, UTF-8
tables are needed only when compiling the 8-bit library. */

#if PCRE2_CODE_UNIT_WIDTH == 8
extern const int              PRIV(utf8_table1)[];
extern const int              PRIV(utf8_table1_size);
extern const int              PRIV(utf8_table2)[];
extern const int              PRIV(utf8_table3)[];
extern const uint8_t          PRIV(utf8_table4)[];
#endif

#define _pcre2_OP_lengths              PCRE2_SUFFIX(_pcre2_OP_lengths_)
#define _pcre2_callout_end_delims      PCRE2_SUFFIX(_pcre2_callout_end_delims_)
#define _pcre2_callout_start_delims    PCRE2_SUFFIX(_pcre2_callout_start_delims_)
#define _pcre2_default_compile_context PCRE2_SUFFIX(_pcre2_default_compile_context_)
#define _pcre2_default_convert_context PCRE2_SUFFIX(_pcre2_default_convert_context_)
#define _pcre2_default_match_context   PCRE2_SUFFIX(_pcre2_default_match_context_)
#define _pcre2_default_tables          PCRE2_SUFFIX(_pcre2_default_tables_)
#if PCRE2_CODE_UNIT_WIDTH == 32
#define _pcre2_dummy_ucd_record        PCRE2_SUFFIX(_pcre2_dummy_ucd_record_)
#endif
#define _pcre2_hspace_list             PCRE2_SUFFIX(_pcre2_hspace_list_)
#define _pcre2_vspace_list             PCRE2_SUFFIX(_pcre2_vspace_list_)
#define _pcre2_ucd_boolprop_sets       PCRE2_SUFFIX(_pcre2_ucd_boolprop_sets_)
#define _pcre2_ucd_caseless_sets       PCRE2_SUFFIX(_pcre2_ucd_caseless_sets_)
#define _pcre2_ucd_digit_sets          PCRE2_SUFFIX(_pcre2_ucd_digit_sets_)
#define _pcre2_ucd_script_sets         PCRE2_SUFFIX(_pcre2_ucd_script_sets_)
#define _pcre2_ucd_records             PCRE2_SUFFIX(_pcre2_ucd_records_)
#define _pcre2_ucd_stage1              PCRE2_SUFFIX(_pcre2_ucd_stage1_)
#define _pcre2_ucd_stage2              PCRE2_SUFFIX(_pcre2_ucd_stage2_)
#define _pcre2_ucp_gbtable             PCRE2_SUFFIX(_pcre2_ucp_gbtable_)
#define _pcre2_ucp_gentype             PCRE2_SUFFIX(_pcre2_ucp_gentype_)
#define _pcre2_ucp_typerange           PCRE2_SUFFIX(_pcre2_ucp_typerange_)
#define _pcre2_unicode_version         PCRE2_SUFFIX(_pcre2_unicode_version_)
#define _pcre2_utt                     PCRE2_SUFFIX(_pcre2_utt_)
#define _pcre2_utt_names               PCRE2_SUFFIX(_pcre2_utt_names_)
#define _pcre2_utt_size                PCRE2_SUFFIX(_pcre2_utt_size_)

extern const uint8_t                   PRIV(OP_lengths)[];
extern const uint32_t                  PRIV(callout_end_delims)[];
extern const uint32_t                  PRIV(callout_start_delims)[];
extern const pcre2_compile_context     PRIV(default_compile_context);
extern const pcre2_convert_context     PRIV(default_convert_context);
extern const pcre2_match_context       PRIV(default_match_context);
extern const uint8_t                   PRIV(default_tables)[];
extern const uint32_t                  PRIV(hspace_list)[];
extern const uint32_t                  PRIV(vspace_list)[];
extern const uint32_t                  PRIV(ucd_boolprop_sets)[];
extern const uint32_t                  PRIV(ucd_caseless_sets)[];
extern const uint32_t                  PRIV(ucd_digit_sets)[];
extern const uint32_t                  PRIV(ucd_script_sets)[];
extern const ucd_record                PRIV(ucd_records)[];
#if PCRE2_CODE_UNIT_WIDTH == 32
extern const ucd_record                PRIV(dummy_ucd_record)[];
#endif
extern const uint16_t                  PRIV(ucd_stage1)[];
extern const uint16_t                  PRIV(ucd_stage2)[];
extern const uint32_t                  PRIV(ucp_gbtable)[];
extern const uint32_t                  PRIV(ucp_gentype)[];
#ifdef SUPPORT_JIT
extern const int                       PRIV(ucp_typerange)[];
#endif
extern const char                     *PRIV(unicode_version);
extern const ucp_type_table            PRIV(utt)[];
extern const char                      PRIV(utt_names)[];
extern const size_t                    PRIV(utt_size);

/* Mode-dependent macros and hidden and private structures are defined in a
separate file so that pcre2test can include them at all supported widths. When
compiling the library, PCRE2_CODE_UNIT_WIDTH will be defined, and we can
include them at the appropriate width, after setting up suffix macros for the
private structures. */

#define branch_chain                 PCRE2_SUFFIX(branch_chain_)
#define compile_block                PCRE2_SUFFIX(compile_block_)
#define dfa_match_block              PCRE2_SUFFIX(dfa_match_block_)
#define match_block                  PCRE2_SUFFIX(match_block_)
#define named_group                  PCRE2_SUFFIX(named_group_)

#include "pcre2_intmodedep.h"

/* Private "external" functions. These are internal functions that are called
from modules other than the one in which they are defined. They have to be
"external" in the C sense, but are not part of the PCRE2 public API. They are
not referenced from pcre2test, and must not be defined when no code unit width
is available. */

#define _pcre2_auto_possessify       PCRE2_SUFFIX(_pcre2_auto_possessify_)
#define _pcre2_check_escape          PCRE2_SUFFIX(_pcre2_check_escape_)
#define _pcre2_extuni                PCRE2_SUFFIX(_pcre2_extuni_)
#define _pcre2_find_bracket          PCRE2_SUFFIX(_pcre2_find_bracket_)
#define _pcre2_is_newline            PCRE2_SUFFIX(_pcre2_is_newline_)
#define _pcre2_jit_free_rodata       PCRE2_SUFFIX(_pcre2_jit_free_rodata_)
#define _pcre2_jit_free              PCRE2_SUFFIX(_pcre2_jit_free_)
#define _pcre2_jit_get_size          PCRE2_SUFFIX(_pcre2_jit_get_size_)
#define _pcre2_jit_get_target        PCRE2_SUFFIX(_pcre2_jit_get_target_)
#define _pcre2_memctl_malloc         PCRE2_SUFFIX(_pcre2_memctl_malloc_)
#define _pcre2_ord2utf               PCRE2_SUFFIX(_pcre2_ord2utf_)
#define _pcre2_script_run            PCRE2_SUFFIX(_pcre2_script_run_)
#define _pcre2_strcmp                PCRE2_SUFFIX(_pcre2_strcmp_)
#define _pcre2_strcmp_c8             PCRE2_SUFFIX(_pcre2_strcmp_c8_)
#define _pcre2_strcpy_c8             PCRE2_SUFFIX(_pcre2_strcpy_c8_)
#define _pcre2_strlen                PCRE2_SUFFIX(_pcre2_strlen_)
#define _pcre2_strncmp               PCRE2_SUFFIX(_pcre2_strncmp_)
#define _pcre2_strncmp_c8            PCRE2_SUFFIX(_pcre2_strncmp_c8_)
#define _pcre2_study                 PCRE2_SUFFIX(_pcre2_study_)
#define _pcre2_valid_utf             PCRE2_SUFFIX(_pcre2_valid_utf_)
#define _pcre2_was_newline           PCRE2_SUFFIX(_pcre2_was_newline_)
#define _pcre2_xclass                PCRE2_SUFFIX(_pcre2_xclass_)

extern int          _pcre2_auto_possessify(PCRE2_UCHAR *,
                      const compile_block *);
extern int          _pcre2_check_escape(PCRE2_SPTR *, PCRE2_SPTR, uint32_t *,
                      int *, uint32_t, uint32_t, BOOL, compile_block *);
extern PCRE2_SPTR   _pcre2_extuni(uint32_t, PCRE2_SPTR, PCRE2_SPTR, PCRE2_SPTR,
                      BOOL, int *);
extern PCRE2_SPTR   _pcre2_find_bracket(PCRE2_SPTR, BOOL, int);
extern BOOL         _pcre2_is_newline(PCRE2_SPTR, uint32_t, PCRE2_SPTR,
                      uint32_t *, BOOL);
extern void         _pcre2_jit_free_rodata(void *, void *);
extern void         _pcre2_jit_free(void *, pcre2_memctl *);
extern size_t       _pcre2_jit_get_size(void *);
const char *        _pcre2_jit_get_target(void);
extern void *       _pcre2_memctl_malloc(size_t, pcre2_memctl *);
extern unsigned int _pcre2_ord2utf(uint32_t, PCRE2_UCHAR *);
extern BOOL         _pcre2_script_run(PCRE2_SPTR, PCRE2_SPTR, BOOL);
extern int          _pcre2_strcmp(PCRE2_SPTR, PCRE2_SPTR);
extern int          _pcre2_strcmp_c8(PCRE2_SPTR, const char *);
extern PCRE2_SIZE   _pcre2_strcpy_c8(PCRE2_UCHAR *, const char *);
extern PCRE2_SIZE   _pcre2_strlen(PCRE2_SPTR);
extern int          _pcre2_strncmp(PCRE2_SPTR, PCRE2_SPTR, size_t);
extern int          _pcre2_strncmp_c8(PCRE2_SPTR, const char *, size_t);
extern int          _pcre2_study(pcre2_real_code *);
extern int          _pcre2_valid_utf(PCRE2_SPTR, PCRE2_SIZE, PCRE2_SIZE *);
extern BOOL         _pcre2_was_newline(PCRE2_SPTR, uint32_t, PCRE2_SPTR,
                      uint32_t *, BOOL);
extern BOOL         _pcre2_xclass(uint32_t, PCRE2_SPTR, BOOL);

/* This function is needed only when memmove() is not available. */

#if !defined(VPCOMPAT) && !defined(HAVE_MEMMOVE)
#define _pcre2_memmove               PCRE2_SUFFIX(_pcre2_memmove)
extern void *       _pcre2_memmove(void *, const void *, size_t);
#endif

#endif  /* PCRE2_CODE_UNIT_WIDTH */

extern BOOL         PRIV(ckd_smul)(PCRE2_SIZE *, int, int);

#endif  /* PCRE2_INTERNAL_H_IDEMPOTENT_GUARD */

/* End of pcre2_internal.h */
ext/pcre/pcre2lib/pcre2_jit_simd_inc.h000064400000220364151730541560013714 0ustar00/*************************************************
*      Perl-Compatible Regular Expressions       *
*************************************************/

/* PCRE is a library of functions to support regular expressions whose syntax
and semantics are as close as possible to those of the Perl 5 language.

                       Written by Philip Hazel
                    This module by Zoltan Herczeg
     Original API code Copyright (c) 1997-2012 University of Cambridge
          New API code Copyright (c) 2016-2019 University of Cambridge

-----------------------------------------------------------------------------
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:

    * Redistributions of source code must retain the above copyright notice,
      this list of conditions and the following disclaimer.

    * Redistributions in binary form must reproduce the above copyright
      notice, this list of conditions and the following disclaimer in the
      documentation and/or other materials provided with the distribution.

    * Neither the name of the University of Cambridge nor the names of its
      contributors may be used to endorse or promote products derived from
      this software without specific prior written permission.

THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
POSSIBILITY OF SUCH DAMAGE.
-----------------------------------------------------------------------------
*/

#if !(defined SUPPORT_VALGRIND)

#if ((defined SLJIT_CONFIG_X86 && SLJIT_CONFIG_X86) \
     || (defined SLJIT_CONFIG_S390X && SLJIT_CONFIG_S390X) \
     || (defined SLJIT_CONFIG_LOONGARCH_64 && SLJIT_CONFIG_LOONGARCH_64))

typedef enum {
  vector_compare_match1,
  vector_compare_match1i,
  vector_compare_match2,
} vector_compare_type;

#if (defined SLJIT_CONFIG_X86 && SLJIT_CONFIG_X86)
static SLJIT_INLINE sljit_s32 max_fast_forward_char_pair_offset(void)
{
#if PCRE2_CODE_UNIT_WIDTH == 8
/* The AVX2 code path is currently disabled. */
/* return sljit_has_cpu_feature(SLJIT_HAS_AVX2) ? 31 : 15; */
return 15;
#elif PCRE2_CODE_UNIT_WIDTH == 16
/* The AVX2 code path is currently disabled. */
/* return sljit_has_cpu_feature(SLJIT_HAS_AVX2) ? 15 : 7; */
return 7;
#elif PCRE2_CODE_UNIT_WIDTH == 32
/* The AVX2 code path is currently disabled. */
/* return sljit_has_cpu_feature(SLJIT_HAS_AVX2) ? 7 : 3; */
return 3;
#else
#error "Unsupported unit width"
#endif
}
#else /* !SLJIT_CONFIG_X86 */
static SLJIT_INLINE sljit_s32 max_fast_forward_char_pair_offset(void)
{
#if PCRE2_CODE_UNIT_WIDTH == 8
return 15;
#elif PCRE2_CODE_UNIT_WIDTH == 16
return 7;
#elif PCRE2_CODE_UNIT_WIDTH == 32
return 3;
#else
#error "Unsupported unit width"
#endif
}
#endif /* SLJIT_CONFIG_X86 */

#if defined SUPPORT_UNICODE && PCRE2_CODE_UNIT_WIDTH != 32
static struct sljit_jump *jump_if_utf_char_start(struct sljit_compiler *compiler, sljit_s32 reg)
{
#if PCRE2_CODE_UNIT_WIDTH == 8
OP2(SLJIT_AND, reg, 0, reg, 0, SLJIT_IMM, 0xc0);
return CMP(SLJIT_NOT_EQUAL, reg, 0, SLJIT_IMM, 0x80);
#elif PCRE2_CODE_UNIT_WIDTH == 16
OP2(SLJIT_AND, reg, 0, reg, 0, SLJIT_IMM, 0xfc00);
return CMP(SLJIT_NOT_EQUAL, reg, 0, SLJIT_IMM, 0xdc00);
#else
#error "Unknown code width"
#endif
}
#endif

#endif /* SLJIT_CONFIG_X86 || SLJIT_CONFIG_S390X */

#if (defined SLJIT_CONFIG_X86 && SLJIT_CONFIG_X86)

static sljit_s32 character_to_int32(PCRE2_UCHAR chr)
{
sljit_u32 value = chr;
#if PCRE2_CODE_UNIT_WIDTH == 8
#define SIMD_COMPARE_TYPE_INDEX 0
return (sljit_s32)((value << 24) | (value << 16) | (value << 8) | value);
#elif PCRE2_CODE_UNIT_WIDTH == 16
#define SIMD_COMPARE_TYPE_INDEX 1
return (sljit_s32)((value << 16) | value);
#elif PCRE2_CODE_UNIT_WIDTH == 32
#define SIMD_COMPARE_TYPE_INDEX 2
return (sljit_s32)(value);
#else
#error "Unsupported unit width"
#endif
}

static void fast_forward_char_pair_sse2_compare(struct sljit_compiler *compiler, vector_compare_type compare_type,
  sljit_s32 reg_type, int step, sljit_s32 dst_ind, sljit_s32 cmp1_ind, sljit_s32 cmp2_ind, sljit_s32 tmp_ind)
{
sljit_u8 instruction[4];

if (reg_type == SLJIT_SIMD_REG_128)
  {
  instruction[0] = 0x66;
  instruction[1] = 0x0f;
  }
else
  {
  /* Two byte VEX prefix. */
  instruction[0] = 0xc5;
  instruction[1] = 0xfd;
  }

SLJIT_ASSERT(step >= 0 && step <= 3);

if (compare_type != vector_compare_match2)
  {
  if (step == 0)
    {
    if (compare_type == vector_compare_match1i)
      {
      /* POR xmm1, xmm2/m128 */
      if (reg_type == SLJIT_SIMD_REG_256)
        instruction[1] ^= (dst_ind << 3);

      /* Prefix is filled. */
      instruction[2] = 0xeb;
      instruction[3] = 0xc0 | (dst_ind << 3) | cmp2_ind;
      sljit_emit_op_custom(compiler, instruction, 4);
      }
    return;
    }

  if (step != 2)
    return;

  /* PCMPEQB/W/D xmm1, xmm2/m128 */
  if (reg_type == SLJIT_SIMD_REG_256)
    instruction[1] ^= (dst_ind << 3);

  /* Prefix is filled. */
  instruction[2] = 0x74 + SIMD_COMPARE_TYPE_INDEX;
  instruction[3] = 0xc0 | (dst_ind << 3) | cmp1_ind;
  sljit_emit_op_custom(compiler, instruction, 4);
  return;
  }

if (reg_type == SLJIT_SIMD_REG_256)
  {
  if (step == 2)
    return;

  if (step == 0)
    {
    step = 2;
    instruction[1] ^= (dst_ind << 3);
    }
  }

switch (step)
  {
  case 0:
  SLJIT_ASSERT(reg_type == SLJIT_SIMD_REG_128);

  /* MOVDQA xmm1, xmm2/m128 */
  /* Prefix is filled. */
  instruction[2] = 0x6f;
  instruction[3] = 0xc0 | (tmp_ind << 3) | dst_ind;
  sljit_emit_op_custom(compiler, instruction, 4);
  return;

  case 1:
  /* PCMPEQB/W/D xmm1, xmm2/m128 */
  if (reg_type == SLJIT_SIMD_REG_256)
    instruction[1] ^= (dst_ind << 3);

  /* Prefix is filled. */
  instruction[2] = 0x74 + SIMD_COMPARE_TYPE_INDEX;
  instruction[3] = 0xc0 | (dst_ind << 3) | cmp1_ind;
  sljit_emit_op_custom(compiler, instruction, 4);
  return;

  case 2:
  /* PCMPEQB/W/D xmm1, xmm2/m128 */
  /* Prefix is filled. */
  instruction[2] = 0x74 + SIMD_COMPARE_TYPE_INDEX;
  instruction[3] = 0xc0 | (tmp_ind << 3) | cmp2_ind;
  sljit_emit_op_custom(compiler, instruction, 4);
  return;

  case 3:
  /* POR xmm1, xmm2/m128 */
  if (reg_type == SLJIT_SIMD_REG_256)
    instruction[1] ^= (dst_ind << 3);

  /* Prefix is filled. */
  instruction[2] = 0xeb;
  instruction[3] = 0xc0 | (dst_ind << 3) | tmp_ind;
  sljit_emit_op_custom(compiler, instruction, 4);
  return;
  }
}

#define JIT_HAS_FAST_FORWARD_CHAR_SIMD (sljit_has_cpu_feature(SLJIT_HAS_SIMD))

static void fast_forward_char_simd(compiler_common *common, PCRE2_UCHAR char1, PCRE2_UCHAR char2, sljit_s32 offset)
{
DEFINE_COMPILER;
sljit_u8 instruction[8];
/* The AVX2 code path is currently disabled. */
/* sljit_s32 reg_type = sljit_has_cpu_feature(SLJIT_HAS_AVX2) ? SLJIT_SIMD_REG_256 : SLJIT_SIMD_REG_128; */
sljit_s32 reg_type = SLJIT_SIMD_REG_128;
sljit_s32 value;
struct sljit_label *start;
#if defined SUPPORT_UNICODE && PCRE2_CODE_UNIT_WIDTH != 32
struct sljit_label *restart;
#endif
struct sljit_jump *quit;
struct sljit_jump *partial_quit[2];
vector_compare_type compare_type = vector_compare_match1;
sljit_s32 tmp1_reg_ind = sljit_get_register_index(SLJIT_GP_REGISTER, TMP1);
sljit_s32 data_ind = sljit_get_register_index(SLJIT_FLOAT_REGISTER, SLJIT_FR0);
sljit_s32 cmp1_ind = sljit_get_register_index(SLJIT_FLOAT_REGISTER, SLJIT_FR1);
sljit_s32 cmp2_ind = sljit_get_register_index(SLJIT_FLOAT_REGISTER, SLJIT_FR2);
sljit_s32 tmp_ind = sljit_get_register_index(SLJIT_FLOAT_REGISTER, SLJIT_FR3);
sljit_u32 bit = 0;
int i;

SLJIT_UNUSED_ARG(offset);

if (char1 != char2)
  {
  bit = char1 ^ char2;
  compare_type = vector_compare_match1i;

  if (!is_powerof2(bit))
    {
    bit = 0;
    compare_type = vector_compare_match2;
    }
  }

partial_quit[0] = CMP(SLJIT_GREATER_EQUAL, STR_PTR, 0, STR_END, 0);
if (common->mode == PCRE2_JIT_COMPLETE)
  add_jump(compiler, &common->failed_match, partial_quit[0]);

/* First part (unaligned start) */
value = SLJIT_SIMD_REG_128 | SLJIT_SIMD_ELEM_32 | SLJIT_SIMD_LANE_ZERO;
sljit_emit_simd_lane_mov(compiler, value, SLJIT_FR1, 0, SLJIT_IMM, character_to_int32(char1 | bit));

if (char1 != char2)
  sljit_emit_simd_lane_mov(compiler, value, SLJIT_FR2, 0, SLJIT_IMM, character_to_int32(bit != 0 ? bit : char2));

OP1(SLJIT_MOV, TMP2, 0, STR_PTR, 0);

sljit_emit_simd_lane_replicate(compiler, reg_type | SLJIT_SIMD_ELEM_32, SLJIT_FR1, SLJIT_FR1, 0);

if (char1 != char2)
  sljit_emit_simd_lane_replicate(compiler, reg_type | SLJIT_SIMD_ELEM_32, SLJIT_FR2, SLJIT_FR2, 0);

#if defined SUPPORT_UNICODE && PCRE2_CODE_UNIT_WIDTH != 32
restart = LABEL();
#endif

value = (reg_type == SLJIT_SIMD_REG_256) ? 0x1f : 0xf;
OP2(SLJIT_AND, STR_PTR, 0, STR_PTR, 0, SLJIT_IMM, ~value);
OP2(SLJIT_AND, TMP2, 0, TMP2, 0, SLJIT_IMM, value);

value = (reg_type == SLJIT_SIMD_REG_256) ? SLJIT_SIMD_MEM_ALIGNED_256 : SLJIT_SIMD_MEM_ALIGNED_128;
sljit_emit_simd_mov(compiler, reg_type | value, SLJIT_FR0, SLJIT_MEM1(STR_PTR), 0);

for (i = 0; i < 4; i++)
  fast_forward_char_pair_sse2_compare(compiler, compare_type, reg_type, i, data_ind, cmp1_ind, cmp2_ind, tmp_ind);

sljit_emit_simd_sign(compiler, SLJIT_SIMD_STORE | reg_type | SLJIT_SIMD_ELEM_8, SLJIT_FR0, TMP1, 0);
OP2(SLJIT_ADD, STR_PTR, 0, STR_PTR, 0, TMP2, 0);
OP2(SLJIT_LSHR, TMP1, 0, TMP1, 0, TMP2, 0);

quit = CMP(SLJIT_NOT_ZERO, TMP1, 0, SLJIT_IMM, 0);

OP2(SLJIT_SUB, STR_PTR, 0, STR_PTR, 0, TMP2, 0);

/* Second part (aligned) */
start = LABEL();

value = (reg_type == SLJIT_SIMD_REG_256) ? 32 : 16;
OP2(SLJIT_ADD, STR_PTR, 0, STR_PTR, 0, SLJIT_IMM, value);

partial_quit[1] = CMP(SLJIT_GREATER_EQUAL, STR_PTR, 0, STR_END, 0);
if (common->mode == PCRE2_JIT_COMPLETE)
  add_jump(compiler, &common->failed_match, partial_quit[1]);

value = (reg_type == SLJIT_SIMD_REG_256) ? SLJIT_SIMD_MEM_ALIGNED_256 : SLJIT_SIMD_MEM_ALIGNED_128;
sljit_emit_simd_mov(compiler, reg_type | value, SLJIT_FR0, SLJIT_MEM1(STR_PTR), 0);
for (i = 0; i < 4; i++)
  fast_forward_char_pair_sse2_compare(compiler, compare_type, reg_type, i, data_ind, cmp1_ind, cmp2_ind, tmp_ind);

sljit_emit_simd_sign(compiler, SLJIT_SIMD_STORE | reg_type | SLJIT_SIMD_ELEM_8, SLJIT_FR0, TMP1, 0);
CMPTO(SLJIT_ZERO, TMP1, 0, SLJIT_IMM, 0, start);

JUMPHERE(quit);

SLJIT_ASSERT(tmp1_reg_ind < 8);
/* BSF r32, r/m32 */
instruction[0] = 0x0f;
instruction[1] = 0xbc;
instruction[2] = 0xc0 | (tmp1_reg_ind << 3) | tmp1_reg_ind;
sljit_emit_op_custom(compiler, instruction, 3);

OP2(SLJIT_ADD, STR_PTR, 0, STR_PTR, 0, TMP1, 0);

if (common->mode != PCRE2_JIT_COMPLETE)
  {
  JUMPHERE(partial_quit[0]);
  JUMPHERE(partial_quit[1]);
  OP2U(SLJIT_SUB | SLJIT_SET_GREATER, STR_PTR, 0, STR_END, 0);
  SELECT(SLJIT_GREATER, STR_PTR, STR_END, 0, STR_PTR);
  }
else
  add_jump(compiler, &common->failed_match, CMP(SLJIT_GREATER_EQUAL, STR_PTR, 0, STR_END, 0));

#if defined SUPPORT_UNICODE && PCRE2_CODE_UNIT_WIDTH != 32
if (common->utf && offset > 0)
  {
  SLJIT_ASSERT(common->mode == PCRE2_JIT_COMPLETE);

  OP1(MOV_UCHAR, TMP1, 0, SLJIT_MEM1(STR_PTR), IN_UCHARS(-offset));

  quit = jump_if_utf_char_start(compiler, TMP1);

  OP2(SLJIT_ADD, STR_PTR, 0, STR_PTR, 0, SLJIT_IMM, IN_UCHARS(1));
  add_jump(compiler, &common->failed_match, CMP(SLJIT_GREATER_EQUAL, STR_PTR, 0, STR_END, 0));
  OP1(SLJIT_MOV, TMP2, 0, STR_PTR, 0);
  JUMPTO(SLJIT_JUMP, restart);

  JUMPHERE(quit);
  }
#endif
}

#define JIT_HAS_FAST_REQUESTED_CHAR_SIMD (sljit_has_cpu_feature(SLJIT_HAS_SIMD))

static jump_list *fast_requested_char_simd(compiler_common *common, PCRE2_UCHAR char1, PCRE2_UCHAR char2)
{
DEFINE_COMPILER;
sljit_u8 instruction[8];
/* The AVX2 code path is currently disabled. */
/* sljit_s32 reg_type = sljit_has_cpu_feature(SLJIT_HAS_AVX2) ? SLJIT_SIMD_REG_256 : SLJIT_SIMD_REG_128; */
sljit_s32 reg_type = SLJIT_SIMD_REG_128;
sljit_s32 value;
struct sljit_label *start;
struct sljit_jump *quit;
jump_list *not_found = NULL;
vector_compare_type compare_type = vector_compare_match1;
sljit_s32 tmp1_reg_ind = sljit_get_register_index(SLJIT_GP_REGISTER, TMP1);
sljit_s32 data_ind = sljit_get_register_index(SLJIT_FLOAT_REGISTER, SLJIT_FR0);
sljit_s32 cmp1_ind = sljit_get_register_index(SLJIT_FLOAT_REGISTER, SLJIT_FR1);
sljit_s32 cmp2_ind = sljit_get_register_index(SLJIT_FLOAT_REGISTER, SLJIT_FR2);
sljit_s32 tmp_ind = sljit_get_register_index(SLJIT_FLOAT_REGISTER, SLJIT_FR3);
sljit_u32 bit = 0;
int i;

if (char1 != char2)
  {
  bit = char1 ^ char2;
  compare_type = vector_compare_match1i;

  if (!is_powerof2(bit))
    {
    bit = 0;
    compare_type = vector_compare_match2;
    }
  }

add_jump(compiler, &not_found, CMP(SLJIT_GREATER_EQUAL, TMP1, 0, STR_END, 0));
OP1(SLJIT_MOV, TMP2, 0, TMP1, 0);
OP1(SLJIT_MOV, TMP3, 0, STR_PTR, 0);

/* First part (unaligned start) */

value = SLJIT_SIMD_REG_128 | SLJIT_SIMD_ELEM_32 | SLJIT_SIMD_LANE_ZERO;
sljit_emit_simd_lane_mov(compiler, value, SLJIT_FR1, 0, SLJIT_IMM, character_to_int32(char1 | bit));

if (char1 != char2)
  sljit_emit_simd_lane_mov(compiler, value, SLJIT_FR2, 0, SLJIT_IMM, character_to_int32(bit != 0 ? bit : char2));

OP1(SLJIT_MOV, STR_PTR, 0, TMP2, 0);

sljit_emit_simd_lane_replicate(compiler, reg_type | SLJIT_SIMD_ELEM_32, SLJIT_FR1, SLJIT_FR1, 0);

if (char1 != char2)
  sljit_emit_simd_lane_replicate(compiler, reg_type | SLJIT_SIMD_ELEM_32, SLJIT_FR2, SLJIT_FR2, 0);

value = (reg_type == SLJIT_SIMD_REG_256) ? 0x1f : 0xf;
OP2(SLJIT_AND, STR_PTR, 0, STR_PTR, 0, SLJIT_IMM, ~value);
OP2(SLJIT_AND, TMP2, 0, TMP2, 0, SLJIT_IMM, value);

value = (reg_type == SLJIT_SIMD_REG_256) ? SLJIT_SIMD_MEM_ALIGNED_256 : SLJIT_SIMD_MEM_ALIGNED_128;
sljit_emit_simd_mov(compiler, reg_type | value, SLJIT_FR0, SLJIT_MEM1(STR_PTR), 0);

for (i = 0; i < 4; i++)
  fast_forward_char_pair_sse2_compare(compiler, compare_type, reg_type, i, data_ind, cmp1_ind, cmp2_ind, tmp_ind);

sljit_emit_simd_sign(compiler, SLJIT_SIMD_STORE | reg_type | SLJIT_SIMD_ELEM_8, SLJIT_FR0, TMP1, 0);
OP2(SLJIT_ADD, STR_PTR, 0, STR_PTR, 0, TMP2, 0);
OP2(SLJIT_LSHR, TMP1, 0, TMP1, 0, TMP2, 0);

quit = CMP(SLJIT_NOT_ZERO, TMP1, 0, SLJIT_IMM, 0);

OP2(SLJIT_SUB, STR_PTR, 0, STR_PTR, 0, TMP2, 0);

/* Second part (aligned) */
start = LABEL();

value = (reg_type == SLJIT_SIMD_REG_256) ? 32 : 16;
OP2(SLJIT_ADD, STR_PTR, 0, STR_PTR, 0, SLJIT_IMM, value);

add_jump(compiler, &not_found, CMP(SLJIT_GREATER_EQUAL, STR_PTR, 0, STR_END, 0));

value = (reg_type == SLJIT_SIMD_REG_256) ? SLJIT_SIMD_MEM_ALIGNED_256 : SLJIT_SIMD_MEM_ALIGNED_128;
sljit_emit_simd_mov(compiler, reg_type | value, SLJIT_FR0, SLJIT_MEM1(STR_PTR), 0);

for (i = 0; i < 4; i++)
  fast_forward_char_pair_sse2_compare(compiler, compare_type, reg_type, i, data_ind, cmp1_ind, cmp2_ind, tmp_ind);

sljit_emit_simd_sign(compiler, SLJIT_SIMD_STORE | reg_type | SLJIT_SIMD_ELEM_8, SLJIT_FR0, TMP1, 0);
CMPTO(SLJIT_ZERO, TMP1, 0, SLJIT_IMM, 0, start);

JUMPHERE(quit);

SLJIT_ASSERT(tmp1_reg_ind < 8);
/* BSF r32, r/m32 */
instruction[0] = 0x0f;
instruction[1] = 0xbc;
instruction[2] = 0xc0 | (tmp1_reg_ind << 3) | tmp1_reg_ind;
sljit_emit_op_custom(compiler, instruction, 3);

OP2(SLJIT_ADD, TMP1, 0, TMP1, 0, STR_PTR, 0);
add_jump(compiler, &not_found, CMP(SLJIT_GREATER_EQUAL, TMP1, 0, STR_END, 0));

OP1(SLJIT_MOV, STR_PTR, 0, TMP3, 0);
return not_found;
}

#ifndef _WIN64

#define JIT_HAS_FAST_FORWARD_CHAR_PAIR_SIMD (sljit_has_cpu_feature(SLJIT_HAS_SIMD))

static void fast_forward_char_pair_simd(compiler_common *common, sljit_s32 offs1,
  PCRE2_UCHAR char1a, PCRE2_UCHAR char1b, sljit_s32 offs2, PCRE2_UCHAR char2a, PCRE2_UCHAR char2b)
{
DEFINE_COMPILER;
sljit_u8 instruction[8];
/* The AVX2 code path is currently disabled. */
/* sljit_s32 reg_type = sljit_has_cpu_feature(SLJIT_HAS_AVX2) ? SLJIT_SIMD_REG_256 : SLJIT_SIMD_REG_128; */
sljit_s32 reg_type = SLJIT_SIMD_REG_128;
sljit_s32 value;
vector_compare_type compare1_type = vector_compare_match1;
vector_compare_type compare2_type = vector_compare_match1;
sljit_u32 bit1 = 0;
sljit_u32 bit2 = 0;
sljit_u32 diff = IN_UCHARS(offs1 - offs2);
sljit_s32 tmp1_reg_ind = sljit_get_register_index(SLJIT_GP_REGISTER, TMP1);
sljit_s32 data1_ind = sljit_get_register_index(SLJIT_FLOAT_REGISTER, SLJIT_FR0);
sljit_s32 data2_ind = sljit_get_register_index(SLJIT_FLOAT_REGISTER, SLJIT_FR1);
sljit_s32 cmp1a_ind = sljit_get_register_index(SLJIT_FLOAT_REGISTER, SLJIT_FR2);
sljit_s32 cmp2a_ind = sljit_get_register_index(SLJIT_FLOAT_REGISTER, SLJIT_FR3);
sljit_s32 cmp1b_ind = sljit_get_register_index(SLJIT_FLOAT_REGISTER, SLJIT_FR4);
sljit_s32 cmp2b_ind = sljit_get_register_index(SLJIT_FLOAT_REGISTER, SLJIT_FR5);
sljit_s32 tmp1_ind = sljit_get_register_index(SLJIT_FLOAT_REGISTER, SLJIT_FR6);
sljit_s32 tmp2_ind = sljit_get_register_index(SLJIT_FLOAT_REGISTER, SLJIT_TMP_FR0);
struct sljit_label *start;
#if defined SUPPORT_UNICODE && PCRE2_CODE_UNIT_WIDTH != 32
struct sljit_label *restart;
#endif
struct sljit_jump *jump[2];
int i;

SLJIT_ASSERT(common->mode == PCRE2_JIT_COMPLETE && offs1 > offs2 && offs2 >= 0);
SLJIT_ASSERT(diff <= (unsigned)IN_UCHARS(max_fast_forward_char_pair_offset()));

/* Initialize. */
if (common->match_end_ptr != 0)
  {
  OP1(SLJIT_MOV, TMP1, 0, SLJIT_MEM1(SLJIT_SP), common->match_end_ptr);
  OP1(SLJIT_MOV, TMP3, 0, STR_END, 0);
  OP2(SLJIT_ADD, TMP1, 0, TMP1, 0, SLJIT_IMM, IN_UCHARS(offs1 + 1));

  OP2U(SLJIT_SUB | SLJIT_SET_LESS, TMP1, 0, STR_END, 0);
  SELECT(SLJIT_LESS, STR_END, TMP1, 0, STR_END);
  }

OP2(SLJIT_ADD, STR_PTR, 0, STR_PTR, 0, SLJIT_IMM, IN_UCHARS(offs1));
add_jump(compiler, &common->failed_match, CMP(SLJIT_GREATER_EQUAL, STR_PTR, 0, STR_END, 0));

if (char1a == char1b)
  OP1(SLJIT_MOV, TMP1, 0, SLJIT_IMM, character_to_int32(char1a));
else
  {
  bit1 = char1a ^ char1b;
  if (is_powerof2(bit1))
    {
    compare1_type = vector_compare_match1i;
    OP1(SLJIT_MOV, TMP1, 0, SLJIT_IMM, character_to_int32(char1a | bit1));
    OP1(SLJIT_MOV, TMP2, 0, SLJIT_IMM, character_to_int32(bit1));
    }
  else
    {
    compare1_type = vector_compare_match2;
    bit1 = 0;
    OP1(SLJIT_MOV, TMP1, 0, SLJIT_IMM, character_to_int32(char1a));
    OP1(SLJIT_MOV, TMP2, 0, SLJIT_IMM, character_to_int32(char1b));
    }
  }

value = SLJIT_SIMD_REG_128 | SLJIT_SIMD_ELEM_32 | SLJIT_SIMD_LANE_ZERO;
sljit_emit_simd_lane_mov(compiler, value, SLJIT_FR2, 0, TMP1, 0);

if (char1a != char1b)
  sljit_emit_simd_lane_mov(compiler, value, SLJIT_FR4, 0, TMP2, 0);

if (char2a == char2b)
  OP1(SLJIT_MOV, TMP1, 0, SLJIT_IMM, character_to_int32(char2a));
else
  {
  bit2 = char2a ^ char2b;
  if (is_powerof2(bit2))
    {
    compare2_type = vector_compare_match1i;
    OP1(SLJIT_MOV, TMP1, 0, SLJIT_IMM, character_to_int32(char2a | bit2));
    OP1(SLJIT_MOV, TMP2, 0, SLJIT_IMM, character_to_int32(bit2));
    }
  else
    {
    compare2_type = vector_compare_match2;
    bit2 = 0;
    OP1(SLJIT_MOV, TMP1, 0, SLJIT_IMM, character_to_int32(char2a));
    OP1(SLJIT_MOV, TMP2, 0, SLJIT_IMM, character_to_int32(char2b));
    }
  }

sljit_emit_simd_lane_mov(compiler, value, SLJIT_FR3, 0, TMP1, 0);

if (char2a != char2b)
  sljit_emit_simd_lane_mov(compiler, value, SLJIT_FR5, 0, TMP2, 0);

sljit_emit_simd_lane_replicate(compiler, reg_type | SLJIT_SIMD_ELEM_32, SLJIT_FR2, SLJIT_FR2, 0);
if (char1a != char1b)
  sljit_emit_simd_lane_replicate(compiler, reg_type | SLJIT_SIMD_ELEM_32, SLJIT_FR4, SLJIT_FR4, 0);

sljit_emit_simd_lane_replicate(compiler, reg_type | SLJIT_SIMD_ELEM_32, SLJIT_FR3, SLJIT_FR3, 0);
if (char2a != char2b)
  sljit_emit_simd_lane_replicate(compiler, reg_type | SLJIT_SIMD_ELEM_32, SLJIT_FR5, SLJIT_FR5, 0);

#if defined SUPPORT_UNICODE && PCRE2_CODE_UNIT_WIDTH != 32
restart = LABEL();
#endif

OP2(SLJIT_SUB, TMP1, 0, STR_PTR, 0, SLJIT_IMM, diff);
OP1(SLJIT_MOV, TMP2, 0, STR_PTR, 0);
value = (reg_type == SLJIT_SIMD_REG_256) ? ~0x1f : ~0xf;
OP2(SLJIT_AND, STR_PTR, 0, STR_PTR, 0, SLJIT_IMM, value);

value = (reg_type == SLJIT_SIMD_REG_256) ? SLJIT_SIMD_MEM_ALIGNED_256 : SLJIT_SIMD_MEM_ALIGNED_128;
sljit_emit_simd_mov(compiler, reg_type | value, SLJIT_FR0, SLJIT_MEM1(STR_PTR), 0);

jump[0] = CMP(SLJIT_GREATER_EQUAL, TMP1, 0, STR_PTR, 0);

sljit_emit_simd_mov(compiler, reg_type, SLJIT_FR1, SLJIT_MEM1(STR_PTR), -(sljit_sw)diff);
jump[1] = JUMP(SLJIT_JUMP);

JUMPHERE(jump[0]);

if (reg_type == SLJIT_SIMD_REG_256)
  {
  if (diff != 16)
    {
    /* PSLLDQ ymm1, ymm2, imm8 */
    instruction[0] = 0xc5;
    instruction[1] = (sljit_u8)(0xf9 ^ (data2_ind << 3));
    instruction[2] = 0x73;
    instruction[3] = 0xc0 | (7 << 3) | data1_ind;
    instruction[4] = diff & 0xf;
    sljit_emit_op_custom(compiler, instruction, 5);
    }

  instruction[0] = 0xc4;
  instruction[1] = 0xe3;
  if (diff < 16)
    {
    /* VINSERTI128 xmm1, xmm2, xmm3/m128 */
    /* instruction[0] = 0xc4; */
    /* instruction[1] = 0xe3; */
    instruction[2] = (sljit_u8)(0x7d ^ (data2_ind << 3));
    instruction[3] = 0x38;
    SLJIT_ASSERT(sljit_get_register_index(SLJIT_GP_REGISTER, STR_PTR) <= 7);
    instruction[4] = 0x40 | (data2_ind << 3) | sljit_get_register_index(SLJIT_GP_REGISTER, STR_PTR);
    instruction[5] = (sljit_u8)(16 - diff);
    instruction[6] = 1;
    sljit_emit_op_custom(compiler, instruction, 7);
    }
  else
    {
    /* VPERM2I128 xmm1, xmm2, xmm3/m128 */
    /* instruction[0] = 0xc4; */
    /* instruction[1] = 0xe3; */
    value = (diff == 16) ? data1_ind : data2_ind;
    instruction[2] = (sljit_u8)(0x7d ^ (value << 3));
    instruction[3] = 0x46;
    instruction[4] = 0xc0 | (data2_ind << 3) | value;
    instruction[5] = 0x08;
    sljit_emit_op_custom(compiler, instruction, 6);
    }
  }
else
  {
  /* MOVDQA xmm1, xmm2/m128 */
  instruction[0] = 0x66;
  instruction[1] = 0x0f;
  instruction[2] = 0x6f;
  instruction[3] = 0xc0 | (data2_ind << 3) | data1_ind;
  sljit_emit_op_custom(compiler, instruction, 4);

  /* PSLLDQ xmm1, imm8 */
  /* instruction[0] = 0x66; */
  /* instruction[1] = 0x0f; */
  instruction[2] = 0x73;
  instruction[3] = 0xc0 | (7 << 3) | data2_ind;
  instruction[4] = diff;
  sljit_emit_op_custom(compiler, instruction, 5);
  }

JUMPHERE(jump[1]);

value = (reg_type == SLJIT_SIMD_REG_256) ? 0x1f : 0xf;
OP2(SLJIT_AND, TMP2, 0, TMP2, 0, SLJIT_IMM, value);

for (i = 0; i < 4; i++)
  {
  fast_forward_char_pair_sse2_compare(compiler, compare2_type, reg_type, i, data2_ind, cmp2a_ind, cmp2b_ind, tmp2_ind);
  fast_forward_char_pair_sse2_compare(compiler, compare1_type, reg_type, i, data1_ind, cmp1a_ind, cmp1b_ind, tmp1_ind);
  }

sljit_emit_simd_op2(compiler, SLJIT_SIMD_OP2_AND | reg_type, SLJIT_FR0, SLJIT_FR0, SLJIT_FR1);
sljit_emit_simd_sign(compiler, SLJIT_SIMD_STORE | reg_type | SLJIT_SIMD_ELEM_8, SLJIT_FR0, TMP1, 0);

/* Ignore matches before the first STR_PTR. */
OP2(SLJIT_ADD, STR_PTR, 0, STR_PTR, 0, TMP2, 0);
OP2(SLJIT_LSHR, TMP1, 0, TMP1, 0, TMP2, 0);

jump[0] = CMP(SLJIT_NOT_ZERO, TMP1, 0, SLJIT_IMM, 0);

OP2(SLJIT_SUB, STR_PTR, 0, STR_PTR, 0, TMP2, 0);

/* Main loop. */
start = LABEL();

value = (reg_type == SLJIT_SIMD_REG_256) ? 32 : 16;
OP2(SLJIT_ADD, STR_PTR, 0, STR_PTR, 0, SLJIT_IMM, value);
add_jump(compiler, &common->failed_match, CMP(SLJIT_GREATER_EQUAL, STR_PTR, 0, STR_END, 0));

value = (reg_type == SLJIT_SIMD_REG_256) ? SLJIT_SIMD_MEM_ALIGNED_256 : SLJIT_SIMD_MEM_ALIGNED_128;
sljit_emit_simd_mov(compiler, reg_type | value, SLJIT_FR0, SLJIT_MEM1(STR_PTR), 0);
sljit_emit_simd_mov(compiler, reg_type, SLJIT_FR1, SLJIT_MEM1(STR_PTR), -(sljit_sw)diff);

for (i = 0; i < 4; i++)
  {
  fast_forward_char_pair_sse2_compare(compiler, compare1_type, reg_type, i, data1_ind, cmp1a_ind, cmp1b_ind, tmp2_ind);
  fast_forward_char_pair_sse2_compare(compiler, compare2_type, reg_type, i, data2_ind, cmp2a_ind, cmp2b_ind, tmp1_ind);
  }

sljit_emit_simd_op2(compiler, SLJIT_SIMD_OP2_AND | reg_type, SLJIT_FR0, SLJIT_FR0, SLJIT_FR1);
sljit_emit_simd_sign(compiler, SLJIT_SIMD_STORE | reg_type | SLJIT_SIMD_ELEM_8, SLJIT_FR0, TMP1, 0);

CMPTO(SLJIT_ZERO, TMP1, 0, SLJIT_IMM, 0, start);

JUMPHERE(jump[0]);

SLJIT_ASSERT(tmp1_reg_ind < 8);
/* BSF r32, r/m32 */
instruction[0] = 0x0f;
instruction[1] = 0xbc;
instruction[2] = 0xc0 | (tmp1_reg_ind << 3) | tmp1_reg_ind;
sljit_emit_op_custom(compiler, instruction, 3);

OP2(SLJIT_ADD, STR_PTR, 0, STR_PTR, 0, TMP1, 0);

add_jump(compiler, &common->failed_match, CMP(SLJIT_GREATER_EQUAL, STR_PTR, 0, STR_END, 0));

#if defined SUPPORT_UNICODE && PCRE2_CODE_UNIT_WIDTH != 32
if (common->utf)
  {
  OP1(MOV_UCHAR, TMP1, 0, SLJIT_MEM1(STR_PTR), IN_UCHARS(-offs1));

  jump[0] = jump_if_utf_char_start(compiler, TMP1);

  OP2(SLJIT_ADD, STR_PTR, 0, STR_PTR, 0, SLJIT_IMM, IN_UCHARS(1));
  CMPTO(SLJIT_LESS, STR_PTR, 0, STR_END, 0, restart);

  add_jump(compiler, &common->failed_match, JUMP(SLJIT_JUMP));

  JUMPHERE(jump[0]);
  }
#endif

OP2(SLJIT_SUB, STR_PTR, 0, STR_PTR, 0, SLJIT_IMM, IN_UCHARS(offs1));

if (common->match_end_ptr != 0)
  OP1(SLJIT_MOV, STR_END, 0, TMP3, 0);
}

#endif /* !_WIN64 */

#undef SIMD_COMPARE_TYPE_INDEX

#endif /* SLJIT_CONFIG_X86 */

#if (defined SLJIT_CONFIG_ARM_64 && SLJIT_CONFIG_ARM_64 && (defined __ARM_NEON || defined __ARM_NEON__))

#include <arm_neon.h>

typedef union {
  unsigned int x;
  struct { unsigned char c1, c2, c3, c4; } c;
} int_char;

#if defined SUPPORT_UNICODE && PCRE2_CODE_UNIT_WIDTH != 32
static SLJIT_INLINE int utf_continue(PCRE2_SPTR s)
{
#if PCRE2_CODE_UNIT_WIDTH == 8
return (*s & 0xc0) == 0x80;
#elif PCRE2_CODE_UNIT_WIDTH == 16
return (*s & 0xfc00) == 0xdc00;
#else
#error "Unknown code width"
#endif
}
#endif /* SUPPORT_UNICODE && PCRE2_CODE_UNIT_WIDTH != 32 */

#if PCRE2_CODE_UNIT_WIDTH == 8
# define VECTOR_FACTOR 16
# define vect_t uint8x16_t
# define VLD1Q(X) vld1q_u8((sljit_u8 *)(X))
# define VCEQQ vceqq_u8
# define VORRQ vorrq_u8
# define VST1Q vst1q_u8
# define VDUPQ vdupq_n_u8
# define VEXTQ vextq_u8
# define VANDQ vandq_u8
typedef union {
       uint8_t mem[16];
       uint64_t dw[2];
} quad_word;
#elif PCRE2_CODE_UNIT_WIDTH == 16
# define VECTOR_FACTOR 8
# define vect_t uint16x8_t
# define VLD1Q(X) vld1q_u16((sljit_u16 *)(X))
# define VCEQQ vceqq_u16
# define VORRQ vorrq_u16
# define VST1Q vst1q_u16
# define VDUPQ vdupq_n_u16
# define VEXTQ vextq_u16
# define VANDQ vandq_u16
typedef union {
       uint16_t mem[8];
       uint64_t dw[2];
} quad_word;
#else
# define VECTOR_FACTOR 4
# define vect_t uint32x4_t
# define VLD1Q(X) vld1q_u32((sljit_u32 *)(X))
# define VCEQQ vceqq_u32
# define VORRQ vorrq_u32
# define VST1Q vst1q_u32
# define VDUPQ vdupq_n_u32
# define VEXTQ vextq_u32
# define VANDQ vandq_u32
typedef union {
       uint32_t mem[4];
       uint64_t dw[2];
} quad_word;
#endif

#define FFCS
#include "pcre2_jit_neon_inc.h"
#if defined SUPPORT_UNICODE && PCRE2_CODE_UNIT_WIDTH != 32
# define FF_UTF
# include "pcre2_jit_neon_inc.h"
# undef FF_UTF
#endif
#undef FFCS

#define FFCS_2
#include "pcre2_jit_neon_inc.h"
#if defined SUPPORT_UNICODE && PCRE2_CODE_UNIT_WIDTH != 32
# define FF_UTF
# include "pcre2_jit_neon_inc.h"
# undef FF_UTF
#endif
#undef FFCS_2

#define FFCS_MASK
#include "pcre2_jit_neon_inc.h"
#if defined SUPPORT_UNICODE && PCRE2_CODE_UNIT_WIDTH != 32
# define FF_UTF
# include "pcre2_jit_neon_inc.h"
# undef FF_UTF
#endif
#undef FFCS_MASK

#define JIT_HAS_FAST_FORWARD_CHAR_SIMD 1

static void fast_forward_char_simd(compiler_common *common, PCRE2_UCHAR char1, PCRE2_UCHAR char2, sljit_s32 offset)
{
DEFINE_COMPILER;
int_char ic;
struct sljit_jump *partial_quit, *quit;
/* Save temporary registers. */
OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SP), LOCALS0, STR_PTR, 0);
OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SP), LOCALS1, TMP3, 0);

/* Prepare function arguments */
OP1(SLJIT_MOV, SLJIT_R0, 0, STR_END, 0);
GET_LOCAL_BASE(SLJIT_R1, 0, LOCALS0);
OP1(SLJIT_MOV, SLJIT_R2, 0, SLJIT_IMM, offset);

if (char1 == char2)
  {
    ic.c.c1 = char1;
    ic.c.c2 = char2;
    OP1(SLJIT_MOV, SLJIT_R4, 0, SLJIT_IMM, ic.x);

#if defined SUPPORT_UNICODE && PCRE2_CODE_UNIT_WIDTH != 32
  if (common->utf && offset > 0)
    sljit_emit_icall(compiler, SLJIT_CALL, SLJIT_ARGS4(W, W, W, W, W),
                     SLJIT_IMM, SLJIT_FUNC_ADDR(ffcs_utf));
  else
    sljit_emit_icall(compiler, SLJIT_CALL, SLJIT_ARGS4(W, W, W, W, W),
                     SLJIT_IMM, SLJIT_FUNC_ADDR(ffcs));
#else
  sljit_emit_icall(compiler, SLJIT_CALL, SLJIT_ARGS4(W, W, W, W, W),
                   SLJIT_IMM, SLJIT_FUNC_ADDR(ffcs));
#endif
  }
else
  {
  PCRE2_UCHAR mask = char1 ^ char2;
  if (is_powerof2(mask))
    {
    ic.c.c1 = char1 | mask;
    ic.c.c2 = mask;
    OP1(SLJIT_MOV, SLJIT_R4, 0, SLJIT_IMM, ic.x);

#if defined SUPPORT_UNICODE && PCRE2_CODE_UNIT_WIDTH != 32
    if (common->utf && offset > 0)
      sljit_emit_icall(compiler, SLJIT_CALL, SLJIT_ARGS4(W, W, W, W, W),
                       SLJIT_IMM, SLJIT_FUNC_ADDR(ffcs_mask_utf));
    else
      sljit_emit_icall(compiler, SLJIT_CALL, SLJIT_ARGS4(W, W, W, W, W),
                       SLJIT_IMM, SLJIT_FUNC_ADDR(ffcs_mask));
#else
    sljit_emit_icall(compiler, SLJIT_CALL, SLJIT_ARGS4(W, W, W, W, W),
                     SLJIT_IMM, SLJIT_FUNC_ADDR(ffcs_mask));
#endif
    }
  else
    {
      ic.c.c1 = char1;
      ic.c.c2 = char2;
      OP1(SLJIT_MOV, SLJIT_R4, 0, SLJIT_IMM, ic.x);

#if defined SUPPORT_UNICODE && PCRE2_CODE_UNIT_WIDTH != 32
    if (common->utf && offset > 0)
      sljit_emit_icall(compiler, SLJIT_CALL, SLJIT_ARGS4(W, W, W, W, W),
                       SLJIT_IMM, SLJIT_FUNC_ADDR(ffcs_2_utf));
    else
      sljit_emit_icall(compiler, SLJIT_CALL, SLJIT_ARGS4(W, W, W, W, W),
                       SLJIT_IMM, SLJIT_FUNC_ADDR(ffcs_2));
#else
    sljit_emit_icall(compiler, SLJIT_CALL, SLJIT_ARGS4(W, W, W, W, W),
                     SLJIT_IMM, SLJIT_FUNC_ADDR(ffcs_2));
#endif
    }
  }
/* Restore registers. */
OP1(SLJIT_MOV, STR_PTR, 0, SLJIT_MEM1(SLJIT_SP), LOCALS0);
OP1(SLJIT_MOV, TMP3, 0, SLJIT_MEM1(SLJIT_SP), LOCALS1);

/* Check return value. */
partial_quit = CMP(SLJIT_EQUAL, SLJIT_RETURN_REG, 0, SLJIT_IMM, 0);
if (common->mode == PCRE2_JIT_COMPLETE)
  add_jump(compiler, &common->failed_match, partial_quit);

/* Fast forward STR_PTR to the result of memchr. */
OP1(SLJIT_MOV, STR_PTR, 0, SLJIT_RETURN_REG, 0);
if (common->mode != PCRE2_JIT_COMPLETE)
  {
  quit = CMP(SLJIT_NOT_ZERO, SLJIT_RETURN_REG, 0, SLJIT_IMM, 0);
  JUMPHERE(partial_quit);
  OP2U(SLJIT_SUB | SLJIT_SET_GREATER, STR_PTR, 0, STR_END, 0);
  SELECT(SLJIT_GREATER, STR_PTR, STR_END, 0, STR_PTR);
  JUMPHERE(quit);
  }
}

typedef enum {
  compare_match1,
  compare_match1i,
  compare_match2,
} compare_type;

static inline vect_t fast_forward_char_pair_compare(compare_type ctype, vect_t dst, vect_t cmp1, vect_t cmp2)
{
if (ctype == compare_match2)
  {
  vect_t tmp = dst;
  dst = VCEQQ(dst, cmp1);
  tmp = VCEQQ(tmp, cmp2);
  dst = VORRQ(dst, tmp);
  return dst;
  }

if (ctype == compare_match1i)
  dst = VORRQ(dst, cmp2);
dst = VCEQQ(dst, cmp1);
return dst;
}

static SLJIT_INLINE sljit_u32 max_fast_forward_char_pair_offset(void)
{
#if PCRE2_CODE_UNIT_WIDTH == 8
return 15;
#elif PCRE2_CODE_UNIT_WIDTH == 16
return 7;
#elif PCRE2_CODE_UNIT_WIDTH == 32
return 3;
#else
#error "Unsupported unit width"
#endif
}

/* ARM doesn't have a shift left across lanes. */
static SLJIT_INLINE vect_t shift_left_n_lanes(vect_t a, sljit_u8 n)
{
vect_t zero = VDUPQ(0);
SLJIT_ASSERT(0 < n && n < VECTOR_FACTOR);
/* VEXTQ takes an immediate as last argument. */
#define C(X) case X: return VEXTQ(zero, a, VECTOR_FACTOR - X);
switch (n)
  {
  C(1); C(2); C(3);
#if PCRE2_CODE_UNIT_WIDTH != 32
  C(4); C(5); C(6); C(7);
# if PCRE2_CODE_UNIT_WIDTH != 16
  C(8); C(9); C(10); C(11); C(12); C(13); C(14); C(15);
# endif
#endif
  default:
    /* Based on the ASSERT(0 < n && n < VECTOR_FACTOR) above, this won't
       happen. The return is still here for compilers to not warn. */
    return a;
  }
}

#define FFCPS
#define FFCPS_DIFF1
#define FFCPS_CHAR1A2A

#define FFCPS_0
#include "pcre2_jit_neon_inc.h"
#if defined SUPPORT_UNICODE && PCRE2_CODE_UNIT_WIDTH != 32
# define FF_UTF
# include "pcre2_jit_neon_inc.h"
# undef FF_UTF
#endif
#undef FFCPS_0

#undef FFCPS_CHAR1A2A

#define FFCPS_1
#include "pcre2_jit_neon_inc.h"
#if defined SUPPORT_UNICODE && PCRE2_CODE_UNIT_WIDTH != 32
# define FF_UTF
# include "pcre2_jit_neon_inc.h"
# undef FF_UTF
#endif
#undef FFCPS_1

#undef FFCPS_DIFF1

#define FFCPS_DEFAULT
#include "pcre2_jit_neon_inc.h"
#if defined SUPPORT_UNICODE && PCRE2_CODE_UNIT_WIDTH != 32
# define FF_UTF
# include "pcre2_jit_neon_inc.h"
# undef FF_UTF
#endif
#undef FFCPS

#define JIT_HAS_FAST_FORWARD_CHAR_PAIR_SIMD 1

static void fast_forward_char_pair_simd(compiler_common *common, sljit_s32 offs1,
  PCRE2_UCHAR char1a, PCRE2_UCHAR char1b, sljit_s32 offs2, PCRE2_UCHAR char2a, PCRE2_UCHAR char2b)
{
DEFINE_COMPILER;
sljit_u32 diff = IN_UCHARS(offs1 - offs2);
struct sljit_jump *partial_quit;
int_char ic;
SLJIT_ASSERT(common->mode == PCRE2_JIT_COMPLETE && offs1 > offs2);
SLJIT_ASSERT(diff <= IN_UCHARS(max_fast_forward_char_pair_offset()));
SLJIT_ASSERT(compiler->scratches == 5);

/* Save temporary register STR_PTR. */
OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SP), LOCALS0, STR_PTR, 0);

/* Prepare arguments for the function call. */
if (common->match_end_ptr == 0)
   OP1(SLJIT_MOV, SLJIT_R0, 0, STR_END, 0);
else
  {
  OP1(SLJIT_MOV, SLJIT_R0, 0, SLJIT_MEM1(SLJIT_SP), common->match_end_ptr);
  OP2(SLJIT_ADD, SLJIT_R0, 0, SLJIT_R0, 0, SLJIT_IMM, IN_UCHARS(offs1 + 1));

  OP2U(SLJIT_SUB | SLJIT_SET_LESS, STR_END, 0, SLJIT_R0, 0);
  SELECT(SLJIT_LESS, SLJIT_R0, STR_END, 0, SLJIT_R0);
  }

GET_LOCAL_BASE(SLJIT_R1, 0, LOCALS0);
OP1(SLJIT_MOV_S32, SLJIT_R2, 0, SLJIT_IMM, offs1);
OP1(SLJIT_MOV_S32, SLJIT_R3, 0, SLJIT_IMM, offs2);
ic.c.c1 = char1a;
ic.c.c2 = char1b;
ic.c.c3 = char2a;
ic.c.c4 = char2b;
OP1(SLJIT_MOV_U32, SLJIT_R4, 0, SLJIT_IMM, ic.x);

if (diff == 1) {
  if (char1a == char1b && char2a == char2b) {
#if defined SUPPORT_UNICODE && PCRE2_CODE_UNIT_WIDTH != 32
    if (common->utf)
      sljit_emit_icall(compiler, SLJIT_CALL, SLJIT_ARGS4(W, W, W, W, W),
                       SLJIT_IMM, SLJIT_FUNC_ADDR(ffcps_0_utf));
    else
#endif
      sljit_emit_icall(compiler, SLJIT_CALL, SLJIT_ARGS4(W, W, W, W, W),
                       SLJIT_IMM, SLJIT_FUNC_ADDR(ffcps_0));
  } else {
#if defined SUPPORT_UNICODE && PCRE2_CODE_UNIT_WIDTH != 32
    if (common->utf)
      sljit_emit_icall(compiler, SLJIT_CALL, SLJIT_ARGS4(W, W, W, W, W),
                       SLJIT_IMM, SLJIT_FUNC_ADDR(ffcps_1_utf));
    else
#endif
      sljit_emit_icall(compiler, SLJIT_CALL, SLJIT_ARGS4(W, W, W, W, W),
                       SLJIT_IMM, SLJIT_FUNC_ADDR(ffcps_1));
  }
} else {
#if defined SUPPORT_UNICODE && PCRE2_CODE_UNIT_WIDTH != 32
  if (common->utf)
    sljit_emit_icall(compiler, SLJIT_CALL, SLJIT_ARGS4(W, W, W, W, W),
                     SLJIT_IMM, SLJIT_FUNC_ADDR(ffcps_default_utf));
  else
#endif
    sljit_emit_icall(compiler, SLJIT_CALL, SLJIT_ARGS4(W, W, W, W, W),
                     SLJIT_IMM, SLJIT_FUNC_ADDR(ffcps_default));
}

/* Restore STR_PTR register. */
OP1(SLJIT_MOV, STR_PTR, 0, SLJIT_MEM1(SLJIT_SP), LOCALS0);

/* Check return value. */
partial_quit = CMP(SLJIT_EQUAL, SLJIT_RETURN_REG, 0, SLJIT_IMM, 0);
add_jump(compiler, &common->failed_match, partial_quit);

/* Fast forward STR_PTR to the result of memchr. */
OP1(SLJIT_MOV, STR_PTR, 0, SLJIT_RETURN_REG, 0);

JUMPHERE(partial_quit);
}

#endif /* SLJIT_CONFIG_ARM_64 && SLJIT_CONFIG_ARM_64 */

#if (defined SLJIT_CONFIG_S390X && SLJIT_CONFIG_S390X)

#if PCRE2_CODE_UNIT_WIDTH == 8
#define VECTOR_ELEMENT_SIZE 0
#elif PCRE2_CODE_UNIT_WIDTH == 16
#define VECTOR_ELEMENT_SIZE 1
#elif PCRE2_CODE_UNIT_WIDTH == 32
#define VECTOR_ELEMENT_SIZE 2
#else
#error "Unsupported unit width"
#endif

static void load_from_mem_vector(struct sljit_compiler *compiler, BOOL vlbb, sljit_s32 dst_vreg,
  sljit_s32 base_reg, sljit_s32 index_reg)
{
sljit_u16 instruction[3];

instruction[0] = (sljit_u16)(0xe700 | (dst_vreg << 4) | index_reg);
instruction[1] = (sljit_u16)(base_reg << 12);
instruction[2] = (sljit_u16)((0x8 << 8) | (vlbb ? 0x07 : 0x06));

sljit_emit_op_custom(compiler, instruction, 6);
}

#if PCRE2_CODE_UNIT_WIDTH == 32

static void replicate_imm_vector(struct sljit_compiler *compiler, int step, sljit_s32 dst_vreg,
  PCRE2_UCHAR chr, sljit_s32 tmp_general_reg)
{
sljit_u16 instruction[3];

SLJIT_ASSERT(step >= 0 && step <= 1);

if (chr < 0x7fff)
  {
  if (step == 1)
    return;

  /* VREPI */
  instruction[0] = (sljit_u16)(0xe700 | (dst_vreg << 4));
  instruction[1] = (sljit_u16)chr;
  instruction[2] = (sljit_u16)((VECTOR_ELEMENT_SIZE << 12) | (0x8 << 8) | 0x45);
  sljit_emit_op_custom(compiler, instruction, 6);
  return;
  }

if (step == 0)
  {
  OP1(SLJIT_MOV, tmp_general_reg, 0, SLJIT_IMM, chr);

  /* VLVG */
  instruction[0] = (sljit_u16)(0xe700 | (dst_vreg << 4) | sljit_get_register_index(SLJIT_GP_REGISTER, tmp_general_reg));
  instruction[1] = 0;
  instruction[2] = (sljit_u16)((VECTOR_ELEMENT_SIZE << 12) | (0x8 << 8) | 0x22);
  sljit_emit_op_custom(compiler, instruction, 6);
  return;
  }

/* VREP */
instruction[0] = (sljit_u16)(0xe700 | (dst_vreg << 4) | dst_vreg);
instruction[1] = 0;
instruction[2] = (sljit_u16)((VECTOR_ELEMENT_SIZE << 12) | (0xc << 8) | 0x4d);
sljit_emit_op_custom(compiler, instruction, 6);
}

#endif

static void fast_forward_char_pair_sse2_compare(struct sljit_compiler *compiler, vector_compare_type compare_type,
  int step, sljit_s32 dst_ind, sljit_s32 cmp1_ind, sljit_s32 cmp2_ind, sljit_s32 tmp_ind)
{
sljit_u16 instruction[3];

SLJIT_ASSERT(step >= 0 && step <= 2);

if (step == 1)
  {
  /* VCEQ */
  instruction[0] = (sljit_u16)(0xe700 | (dst_ind << 4) | dst_ind);
  instruction[1] = (sljit_u16)(cmp1_ind << 12);
  instruction[2] = (sljit_u16)((VECTOR_ELEMENT_SIZE << 12) | (0xe << 8) | 0xf8);
  sljit_emit_op_custom(compiler, instruction, 6);
  return;
  }

if (compare_type != vector_compare_match2)
  {
  if (step == 0 && compare_type == vector_compare_match1i)
    {
    /* VO */
    instruction[0] = (sljit_u16)(0xe700 | (dst_ind << 4) | dst_ind);
    instruction[1] = (sljit_u16)(cmp2_ind << 12);
    instruction[2] = (sljit_u16)((0xe << 8) | 0x6a);
    sljit_emit_op_custom(compiler, instruction, 6);
    }
  return;
  }

switch (step)
  {
  case 0:
  /* VCEQ */
  instruction[0] = (sljit_u16)(0xe700 | (tmp_ind << 4) | dst_ind);
  instruction[1] = (sljit_u16)(cmp2_ind << 12);
  instruction[2] = (sljit_u16)((VECTOR_ELEMENT_SIZE << 12) | (0xe << 8) | 0xf8);
  sljit_emit_op_custom(compiler, instruction, 6);
  return;

  case 2:
  /* VO */
  instruction[0] = (sljit_u16)(0xe700 | (dst_ind << 4) | dst_ind);
  instruction[1] = (sljit_u16)(tmp_ind << 12);
  instruction[2] = (sljit_u16)((0xe << 8) | 0x6a);
  sljit_emit_op_custom(compiler, instruction, 6);
  return;
  }
}

#define JIT_HAS_FAST_FORWARD_CHAR_SIMD 1

static void fast_forward_char_simd(compiler_common *common, PCRE2_UCHAR char1, PCRE2_UCHAR char2, sljit_s32 offset)
{
DEFINE_COMPILER;
sljit_u16 instruction[3];
struct sljit_label *start;
#if defined SUPPORT_UNICODE && PCRE2_CODE_UNIT_WIDTH != 32
struct sljit_label *restart;
#endif
struct sljit_jump *quit;
struct sljit_jump *partial_quit[2];
vector_compare_type compare_type = vector_compare_match1;
sljit_s32 tmp1_reg_ind = sljit_get_register_index(SLJIT_GP_REGISTER, TMP1);
sljit_s32 str_ptr_reg_ind = sljit_get_register_index(SLJIT_GP_REGISTER, STR_PTR);
sljit_s32 data_ind = 0;
sljit_s32 tmp_ind = 1;
sljit_s32 cmp1_ind = 2;
sljit_s32 cmp2_ind = 3;
sljit_s32 zero_ind = 4;
sljit_u32 bit = 0;
int i;

SLJIT_UNUSED_ARG(offset);

if (char1 != char2)
  {
  bit = char1 ^ char2;
  compare_type = vector_compare_match1i;

  if (!is_powerof2(bit))
    {
    bit = 0;
    compare_type = vector_compare_match2;
    }
  }

partial_quit[0] = CMP(SLJIT_GREATER_EQUAL, STR_PTR, 0, STR_END, 0);
if (common->mode == PCRE2_JIT_COMPLETE)
  add_jump(compiler, &common->failed_match, partial_quit[0]);

/* First part (unaligned start) */

OP2(SLJIT_ADD, TMP2, 0, STR_PTR, 0, SLJIT_IMM, 16);

#if PCRE2_CODE_UNIT_WIDTH != 32

/* VREPI */
instruction[0] = (sljit_u16)(0xe700 | (cmp1_ind << 4));
instruction[1] = (sljit_u16)(char1 | bit);
instruction[2] = (sljit_u16)((VECTOR_ELEMENT_SIZE << 12) | (0x8 << 8) | 0x45);
sljit_emit_op_custom(compiler, instruction, 6);

if (char1 != char2)
  {
  /* VREPI */
  instruction[0] = (sljit_u16)(0xe700 | (cmp2_ind << 4));
  instruction[1] = (sljit_u16)(bit != 0 ? bit : char2);
  /* instruction[2] = (sljit_u16)((VECTOR_ELEMENT_SIZE << 12) | (0x8 << 8) | 0x45); */
  sljit_emit_op_custom(compiler, instruction, 6);
  }

#else /* PCRE2_CODE_UNIT_WIDTH == 32 */

for (int i = 0; i < 2; i++)
  {
  replicate_imm_vector(compiler, i, cmp1_ind, char1 | bit, TMP1);

  if (char1 != char2)
    replicate_imm_vector(compiler, i, cmp2_ind, bit != 0 ? bit : char2, TMP1);
  }

#endif /* PCRE2_CODE_UNIT_WIDTH != 32 */

if (compare_type == vector_compare_match2)
  {
  /* VREPI */
  instruction[0] = (sljit_u16)(0xe700 | (zero_ind << 4));
  instruction[1] = 0;
  instruction[2] = (sljit_u16)((0x8 << 8) | 0x45);
  sljit_emit_op_custom(compiler, instruction, 6);
  }

#if defined SUPPORT_UNICODE && PCRE2_CODE_UNIT_WIDTH != 32
restart = LABEL();
#endif

load_from_mem_vector(compiler, TRUE, data_ind, str_ptr_reg_ind, 0);
OP2(SLJIT_AND, TMP2, 0, TMP2, 0, SLJIT_IMM, ~15);

if (compare_type != vector_compare_match2)
  {
  if (compare_type == vector_compare_match1i)
    fast_forward_char_pair_sse2_compare(compiler, compare_type, 0, data_ind, cmp1_ind, cmp2_ind, tmp_ind);

  /* VFEE */
  instruction[0] = (sljit_u16)(0xe700 | (data_ind << 4) | data_ind);
  instruction[1] = (sljit_u16)((cmp1_ind << 12) | (1 << 4));
  instruction[2] = (sljit_u16)((VECTOR_ELEMENT_SIZE << 12) | (0xe << 8) | 0x80);
  sljit_emit_op_custom(compiler, instruction, 6);
  }
else
  {
  for (i = 0; i < 3; i++)
    fast_forward_char_pair_sse2_compare(compiler, compare_type, i, data_ind, cmp1_ind, cmp2_ind, tmp_ind);

  /* VFENE */
  instruction[0] = (sljit_u16)(0xe700 | (data_ind << 4) | data_ind);
  instruction[1] = (sljit_u16)((zero_ind << 12) | (1 << 4));
  instruction[2] = (sljit_u16)((0xe << 8) | 0x81);
  sljit_emit_op_custom(compiler, instruction, 6);
  }

/* VLGVB */
instruction[0] = (sljit_u16)(0xe700 | (tmp1_reg_ind << 4) | data_ind);
instruction[1] = 7;
instruction[2] = (sljit_u16)((0x4 << 8) | 0x21);
sljit_emit_op_custom(compiler, instruction, 6);

OP2(SLJIT_ADD, STR_PTR, 0, STR_PTR, 0, TMP1, 0);
quit = CMP(SLJIT_LESS, STR_PTR, 0, TMP2, 0);

OP2(SLJIT_SUB, STR_PTR, 0, TMP2, 0, SLJIT_IMM, 16);

/* Second part (aligned) */
start = LABEL();

OP2(SLJIT_ADD, STR_PTR, 0, STR_PTR, 0, SLJIT_IMM, 16);

partial_quit[1] = CMP(SLJIT_GREATER_EQUAL, STR_PTR, 0, STR_END, 0);
if (common->mode == PCRE2_JIT_COMPLETE)
  add_jump(compiler, &common->failed_match, partial_quit[1]);

load_from_mem_vector(compiler, TRUE, data_ind, str_ptr_reg_ind, 0);

if (compare_type != vector_compare_match2)
  {
  if (compare_type == vector_compare_match1i)
    fast_forward_char_pair_sse2_compare(compiler, compare_type, 0, data_ind, cmp1_ind, cmp2_ind, tmp_ind);

  /* VFEE */
  instruction[0] = (sljit_u16)(0xe700 | (data_ind << 4) | data_ind);
  instruction[1] = (sljit_u16)((cmp1_ind << 12) | (1 << 4));
  instruction[2] = (sljit_u16)((VECTOR_ELEMENT_SIZE << 12) | (0xe << 8) | 0x80);
  sljit_emit_op_custom(compiler, instruction, 6);
  }
else
  {
  for (i = 0; i < 3; i++)
    fast_forward_char_pair_sse2_compare(compiler, compare_type, i, data_ind, cmp1_ind, cmp2_ind, tmp_ind);

  /* VFENE */
  instruction[0] = (sljit_u16)(0xe700 | (data_ind << 4) | data_ind);
  instruction[1] = (sljit_u16)((zero_ind << 12) | (1 << 4));
  instruction[2] = (sljit_u16)((0xe << 8) | 0x81);
  sljit_emit_op_custom(compiler, instruction, 6);
  }

sljit_set_current_flags(compiler, SLJIT_SET_OVERFLOW);
JUMPTO(SLJIT_OVERFLOW, start);

/* VLGVB */
instruction[0] = (sljit_u16)(0xe700 | (tmp1_reg_ind << 4) | data_ind);
instruction[1] = 7;
instruction[2] = (sljit_u16)((0x4 << 8) | 0x21);
sljit_emit_op_custom(compiler, instruction, 6);

OP2(SLJIT_ADD, STR_PTR, 0, STR_PTR, 0, TMP1, 0);

JUMPHERE(quit);

if (common->mode != PCRE2_JIT_COMPLETE)
  {
  JUMPHERE(partial_quit[0]);
  JUMPHERE(partial_quit[1]);
  OP2U(SLJIT_SUB | SLJIT_SET_GREATER, STR_PTR, 0, STR_END, 0);
  SELECT(SLJIT_GREATER, STR_PTR, STR_END, 0, STR_PTR);
  }
else
  add_jump(compiler, &common->failed_match, CMP(SLJIT_GREATER_EQUAL, STR_PTR, 0, STR_END, 0));

#if defined SUPPORT_UNICODE && PCRE2_CODE_UNIT_WIDTH != 32
if (common->utf && offset > 0)
  {
  SLJIT_ASSERT(common->mode == PCRE2_JIT_COMPLETE);

  OP1(MOV_UCHAR, TMP1, 0, SLJIT_MEM1(STR_PTR), IN_UCHARS(-offset));

  quit = jump_if_utf_char_start(compiler, TMP1);

  OP2(SLJIT_ADD, STR_PTR, 0, STR_PTR, 0, SLJIT_IMM, IN_UCHARS(1));
  add_jump(compiler, &common->failed_match, CMP(SLJIT_GREATER_EQUAL, STR_PTR, 0, STR_END, 0));

  OP2(SLJIT_ADD, TMP2, 0, STR_PTR, 0, SLJIT_IMM, 16);
  JUMPTO(SLJIT_JUMP, restart);

  JUMPHERE(quit);
  }
#endif
}

#define JIT_HAS_FAST_REQUESTED_CHAR_SIMD 1

static jump_list *fast_requested_char_simd(compiler_common *common, PCRE2_UCHAR char1, PCRE2_UCHAR char2)
{
DEFINE_COMPILER;
sljit_u16 instruction[3];
struct sljit_label *start;
struct sljit_jump *quit;
jump_list *not_found = NULL;
vector_compare_type compare_type = vector_compare_match1;
sljit_s32 tmp1_reg_ind = sljit_get_register_index(SLJIT_GP_REGISTER, TMP1);
sljit_s32 tmp3_reg_ind = sljit_get_register_index(SLJIT_GP_REGISTER, TMP3);
sljit_s32 data_ind = 0;
sljit_s32 tmp_ind = 1;
sljit_s32 cmp1_ind = 2;
sljit_s32 cmp2_ind = 3;
sljit_s32 zero_ind = 4;
sljit_u32 bit = 0;
int i;

if (char1 != char2)
  {
  bit = char1 ^ char2;
  compare_type = vector_compare_match1i;

  if (!is_powerof2(bit))
    {
    bit = 0;
    compare_type = vector_compare_match2;
    }
  }

add_jump(compiler, &not_found, CMP(SLJIT_GREATER_EQUAL, TMP1, 0, STR_END, 0));

/* First part (unaligned start) */

OP2(SLJIT_ADD, TMP2, 0, TMP1, 0, SLJIT_IMM, 16);

#if PCRE2_CODE_UNIT_WIDTH != 32

/* VREPI */
instruction[0] = (sljit_u16)(0xe700 | (cmp1_ind << 4));
instruction[1] = (sljit_u16)(char1 | bit);
instruction[2] = (sljit_u16)((VECTOR_ELEMENT_SIZE << 12) | (0x8 << 8) | 0x45);
sljit_emit_op_custom(compiler, instruction, 6);

if (char1 != char2)
  {
  /* VREPI */
  instruction[0] = (sljit_u16)(0xe700 | (cmp2_ind << 4));
  instruction[1] = (sljit_u16)(bit != 0 ? bit : char2);
  /* instruction[2] = (sljit_u16)((VECTOR_ELEMENT_SIZE << 12) | (0x8 << 8) | 0x45); */
  sljit_emit_op_custom(compiler, instruction, 6);
  }

#else /* PCRE2_CODE_UNIT_WIDTH == 32 */

for (int i = 0; i < 2; i++)
  {
  replicate_imm_vector(compiler, i, cmp1_ind, char1 | bit, TMP3);

  if (char1 != char2)
    replicate_imm_vector(compiler, i, cmp2_ind, bit != 0 ? bit : char2, TMP3);
  }

#endif /* PCRE2_CODE_UNIT_WIDTH != 32 */

if (compare_type == vector_compare_match2)
  {
  /* VREPI */
  instruction[0] = (sljit_u16)(0xe700 | (zero_ind << 4));
  instruction[1] = 0;
  instruction[2] = (sljit_u16)((0x8 << 8) | 0x45);
  sljit_emit_op_custom(compiler, instruction, 6);
  }

load_from_mem_vector(compiler, TRUE, data_ind, tmp1_reg_ind, 0);
OP2(SLJIT_AND, TMP2, 0, TMP2, 0, SLJIT_IMM, ~15);

if (compare_type != vector_compare_match2)
  {
  if (compare_type == vector_compare_match1i)
    fast_forward_char_pair_sse2_compare(compiler, compare_type, 0, data_ind, cmp1_ind, cmp2_ind, tmp_ind);

  /* VFEE */
  instruction[0] = (sljit_u16)(0xe700 | (data_ind << 4) | data_ind);
  instruction[1] = (sljit_u16)((cmp1_ind << 12) | (1 << 4));
  instruction[2] = (sljit_u16)((VECTOR_ELEMENT_SIZE << 12) | (0xe << 8) | 0x80);
  sljit_emit_op_custom(compiler, instruction, 6);
  }
else
  {
  for (i = 0; i < 3; i++)
    fast_forward_char_pair_sse2_compare(compiler, compare_type, i, data_ind, cmp1_ind, cmp2_ind, tmp_ind);

  /* VFENE */
  instruction[0] = (sljit_u16)(0xe700 | (data_ind << 4) | data_ind);
  instruction[1] = (sljit_u16)((zero_ind << 12) | (1 << 4));
  instruction[2] = (sljit_u16)((0xe << 8) | 0x81);
  sljit_emit_op_custom(compiler, instruction, 6);
  }

/* VLGVB */
instruction[0] = (sljit_u16)(0xe700 | (tmp3_reg_ind << 4) | data_ind);
instruction[1] = 7;
instruction[2] = (sljit_u16)((0x4 << 8) | 0x21);
sljit_emit_op_custom(compiler, instruction, 6);

OP2(SLJIT_ADD, TMP1, 0, TMP1, 0, TMP3, 0);
quit = CMP(SLJIT_LESS, TMP1, 0, TMP2, 0);

OP2(SLJIT_SUB, TMP1, 0, TMP2, 0, SLJIT_IMM, 16);

/* Second part (aligned) */
start = LABEL();

OP2(SLJIT_ADD, TMP1, 0, TMP1, 0, SLJIT_IMM, 16);

add_jump(compiler, &not_found, CMP(SLJIT_GREATER_EQUAL, TMP1, 0, STR_END, 0));

load_from_mem_vector(compiler, TRUE, data_ind, tmp1_reg_ind, 0);

if (compare_type != vector_compare_match2)
  {
  if (compare_type == vector_compare_match1i)
    fast_forward_char_pair_sse2_compare(compiler, compare_type, 0, data_ind, cmp1_ind, cmp2_ind, tmp_ind);

  /* VFEE */
  instruction[0] = (sljit_u16)(0xe700 | (data_ind << 4) | data_ind);
  instruction[1] = (sljit_u16)((cmp1_ind << 12) | (1 << 4));
  instruction[2] = (sljit_u16)((VECTOR_ELEMENT_SIZE << 12) | (0xe << 8) | 0x80);
  sljit_emit_op_custom(compiler, instruction, 6);
  }
else
  {
  for (i = 0; i < 3; i++)
    fast_forward_char_pair_sse2_compare(compiler, compare_type, i, data_ind, cmp1_ind, cmp2_ind, tmp_ind);

  /* VFENE */
  instruction[0] = (sljit_u16)(0xe700 | (data_ind << 4) | data_ind);
  instruction[1] = (sljit_u16)((zero_ind << 12) | (1 << 4));
  instruction[2] = (sljit_u16)((0xe << 8) | 0x81);
  sljit_emit_op_custom(compiler, instruction, 6);
  }

sljit_set_current_flags(compiler, SLJIT_SET_OVERFLOW);
JUMPTO(SLJIT_OVERFLOW, start);

/* VLGVB */
instruction[0] = (sljit_u16)(0xe700 | (tmp3_reg_ind << 4) | data_ind);
instruction[1] = 7;
instruction[2] = (sljit_u16)((0x4 << 8) | 0x21);
sljit_emit_op_custom(compiler, instruction, 6);

OP2(SLJIT_ADD, TMP1, 0, TMP1, 0, TMP3, 0);

JUMPHERE(quit);
add_jump(compiler, &not_found, CMP(SLJIT_GREATER_EQUAL, TMP1, 0, STR_END, 0));

return not_found;
}

#define JIT_HAS_FAST_FORWARD_CHAR_PAIR_SIMD 1

static void fast_forward_char_pair_simd(compiler_common *common, sljit_s32 offs1,
  PCRE2_UCHAR char1a, PCRE2_UCHAR char1b, sljit_s32 offs2, PCRE2_UCHAR char2a, PCRE2_UCHAR char2b)
{
DEFINE_COMPILER;
sljit_u16 instruction[3];
struct sljit_label *start;
#if defined SUPPORT_UNICODE && PCRE2_CODE_UNIT_WIDTH != 32
struct sljit_label *restart;
#endif
struct sljit_jump *quit;
struct sljit_jump *jump[2];
vector_compare_type compare1_type = vector_compare_match1;
vector_compare_type compare2_type = vector_compare_match1;
sljit_u32 bit1 = 0;
sljit_u32 bit2 = 0;
sljit_s32 diff = IN_UCHARS(offs2 - offs1);
sljit_s32 tmp1_reg_ind = sljit_get_register_index(SLJIT_GP_REGISTER, TMP1);
sljit_s32 tmp2_reg_ind = sljit_get_register_index(SLJIT_GP_REGISTER, TMP2);
sljit_s32 str_ptr_reg_ind = sljit_get_register_index(SLJIT_GP_REGISTER, STR_PTR);
sljit_s32 data1_ind = 0;
sljit_s32 data2_ind = 1;
sljit_s32 tmp1_ind = 2;
sljit_s32 tmp2_ind = 3;
sljit_s32 cmp1a_ind = 4;
sljit_s32 cmp1b_ind = 5;
sljit_s32 cmp2a_ind = 6;
sljit_s32 cmp2b_ind = 7;
sljit_s32 zero_ind = 8;
int i;

SLJIT_ASSERT(common->mode == PCRE2_JIT_COMPLETE && offs1 > offs2);
SLJIT_ASSERT(-diff <= (sljit_s32)IN_UCHARS(max_fast_forward_char_pair_offset()));
SLJIT_ASSERT(tmp1_reg_ind != 0 && tmp2_reg_ind != 0);

if (char1a != char1b)
  {
  bit1 = char1a ^ char1b;
  compare1_type = vector_compare_match1i;

  if (!is_powerof2(bit1))
    {
    bit1 = 0;
    compare1_type = vector_compare_match2;
    }
  }

if (char2a != char2b)
  {
  bit2 = char2a ^ char2b;
  compare2_type = vector_compare_match1i;

  if (!is_powerof2(bit2))
    {
    bit2 = 0;
    compare2_type = vector_compare_match2;
    }
  }

/* Initialize. */
if (common->match_end_ptr != 0)
  {
  OP1(SLJIT_MOV, TMP1, 0, SLJIT_MEM1(SLJIT_SP), common->match_end_ptr);
  OP1(SLJIT_MOV, TMP3, 0, STR_END, 0);
  OP2(SLJIT_ADD, TMP1, 0, TMP1, 0, SLJIT_IMM, IN_UCHARS(offs1 + 1));

  OP2U(SLJIT_SUB | SLJIT_SET_LESS, TMP1, 0, STR_END, 0);
  SELECT(SLJIT_LESS, STR_END, TMP1, 0, STR_END);
  }

OP2(SLJIT_ADD, STR_PTR, 0, STR_PTR, 0, SLJIT_IMM, IN_UCHARS(offs1));
add_jump(compiler, &common->failed_match, CMP(SLJIT_GREATER_EQUAL, STR_PTR, 0, STR_END, 0));
OP2(SLJIT_AND, TMP2, 0, STR_PTR, 0, SLJIT_IMM, ~15);

#if PCRE2_CODE_UNIT_WIDTH != 32

OP2(SLJIT_SUB, TMP1, 0, STR_PTR, 0, SLJIT_IMM, -diff);

/* VREPI */
instruction[0] = (sljit_u16)(0xe700 | (cmp1a_ind << 4));
instruction[1] = (sljit_u16)(char1a | bit1);
instruction[2] = (sljit_u16)((VECTOR_ELEMENT_SIZE << 12) | (0x8 << 8) | 0x45);
sljit_emit_op_custom(compiler, instruction, 6);

if (char1a != char1b)
  {
  /* VREPI */
  instruction[0] = (sljit_u16)(0xe700 | (cmp1b_ind << 4));
  instruction[1] = (sljit_u16)(bit1 != 0 ? bit1 : char1b);
  /* instruction[2] = (sljit_u16)((VECTOR_ELEMENT_SIZE << 12) | (0x8 << 8) | 0x45); */
  sljit_emit_op_custom(compiler, instruction, 6);
  }

/* VREPI */
instruction[0] = (sljit_u16)(0xe700 | (cmp2a_ind << 4));
instruction[1] = (sljit_u16)(char2a | bit2);
/* instruction[2] = (sljit_u16)((VECTOR_ELEMENT_SIZE << 12) | (0x8 << 8) | 0x45); */
sljit_emit_op_custom(compiler, instruction, 6);

if (char2a != char2b)
  {
  /* VREPI */
  instruction[0] = (sljit_u16)(0xe700 | (cmp2b_ind << 4));
  instruction[1] = (sljit_u16)(bit2 != 0 ? bit2 : char2b);
  /* instruction[2] = (sljit_u16)((VECTOR_ELEMENT_SIZE << 12) | (0x8 << 8) | 0x45); */
  sljit_emit_op_custom(compiler, instruction, 6);
  }

#else /* PCRE2_CODE_UNIT_WIDTH == 32 */

for (int i = 0; i < 2; i++)
  {
  replicate_imm_vector(compiler, i, cmp1a_ind, char1a | bit1, TMP1);

  if (char1a != char1b)
    replicate_imm_vector(compiler, i, cmp1b_ind, bit1 != 0 ? bit1 : char1b, TMP1);

  replicate_imm_vector(compiler, i, cmp2a_ind, char2a | bit2, TMP1);

  if (char2a != char2b)
    replicate_imm_vector(compiler, i, cmp2b_ind, bit2 != 0 ? bit2 : char2b, TMP1);
  }

OP2(SLJIT_SUB, TMP1, 0, STR_PTR, 0, SLJIT_IMM, -diff);

#endif /* PCRE2_CODE_UNIT_WIDTH != 32 */

/* VREPI */
instruction[0] = (sljit_u16)(0xe700 | (zero_ind << 4));
instruction[1] = 0;
instruction[2] = (sljit_u16)((0x8 << 8) | 0x45);
sljit_emit_op_custom(compiler, instruction, 6);

#if defined SUPPORT_UNICODE && PCRE2_CODE_UNIT_WIDTH != 32
restart = LABEL();
#endif

jump[0] = CMP(SLJIT_LESS, TMP1, 0, TMP2, 0);
load_from_mem_vector(compiler, TRUE, data2_ind, tmp1_reg_ind, 0);
jump[1] = JUMP(SLJIT_JUMP);
JUMPHERE(jump[0]);
load_from_mem_vector(compiler, FALSE, data2_ind, tmp1_reg_ind, 0);
JUMPHERE(jump[1]);

load_from_mem_vector(compiler, TRUE, data1_ind, str_ptr_reg_ind, 0);
OP2(SLJIT_ADD, TMP2, 0, TMP2, 0, SLJIT_IMM, 16);

for (i = 0; i < 3; i++)
  {
  fast_forward_char_pair_sse2_compare(compiler, compare1_type, i, data1_ind, cmp1a_ind, cmp1b_ind, tmp1_ind);
  fast_forward_char_pair_sse2_compare(compiler, compare2_type, i, data2_ind, cmp2a_ind, cmp2b_ind, tmp2_ind);
  }

/* VN */
instruction[0] = (sljit_u16)(0xe700 | (data1_ind << 4) | data1_ind);
instruction[1] = (sljit_u16)(data2_ind << 12);
instruction[2] = (sljit_u16)((0xe << 8) | 0x68);
sljit_emit_op_custom(compiler, instruction, 6);

/* VFENE */
instruction[0] = (sljit_u16)(0xe700 | (data1_ind << 4) | data1_ind);
instruction[1] = (sljit_u16)((zero_ind << 12) | (1 << 4));
instruction[2] = (sljit_u16)((0xe << 8) | 0x81);
sljit_emit_op_custom(compiler, instruction, 6);

/* VLGVB */
instruction[0] = (sljit_u16)(0xe700 | (tmp1_reg_ind << 4) | data1_ind);
instruction[1] = 7;
instruction[2] = (sljit_u16)((0x4 << 8) | 0x21);
sljit_emit_op_custom(compiler, instruction, 6);

OP2(SLJIT_ADD, STR_PTR, 0, STR_PTR, 0, TMP1, 0);
quit = CMP(SLJIT_LESS, STR_PTR, 0, TMP2, 0);

OP2(SLJIT_SUB, STR_PTR, 0, TMP2, 0, SLJIT_IMM, 16);
OP1(SLJIT_MOV, TMP1, 0, SLJIT_IMM, diff);

/* Main loop. */
start = LABEL();

OP2(SLJIT_ADD, STR_PTR, 0, STR_PTR, 0, SLJIT_IMM, 16);
add_jump(compiler, &common->failed_match, CMP(SLJIT_GREATER_EQUAL, STR_PTR, 0, STR_END, 0));

load_from_mem_vector(compiler, FALSE, data1_ind, str_ptr_reg_ind, 0);
load_from_mem_vector(compiler, FALSE, data2_ind, str_ptr_reg_ind, tmp1_reg_ind);

for (i = 0; i < 3; i++)
  {
  fast_forward_char_pair_sse2_compare(compiler, compare1_type, i, data1_ind, cmp1a_ind, cmp1b_ind, tmp1_ind);
  fast_forward_char_pair_sse2_compare(compiler, compare2_type, i, data2_ind, cmp2a_ind, cmp2b_ind, tmp2_ind);
  }

/* VN */
instruction[0] = (sljit_u16)(0xe700 | (data1_ind << 4) | data1_ind);
instruction[1] = (sljit_u16)(data2_ind << 12);
instruction[2] = (sljit_u16)((0xe << 8) | 0x68);
sljit_emit_op_custom(compiler, instruction, 6);

/* VFENE */
instruction[0] = (sljit_u16)(0xe700 | (data1_ind << 4) | data1_ind);
instruction[1] = (sljit_u16)((zero_ind << 12) | (1 << 4));
instruction[2] = (sljit_u16)((0xe << 8) | 0x81);
sljit_emit_op_custom(compiler, instruction, 6);

sljit_set_current_flags(compiler, SLJIT_SET_OVERFLOW);
JUMPTO(SLJIT_OVERFLOW, start);

/* VLGVB */
instruction[0] = (sljit_u16)(0xe700 | (tmp2_reg_ind << 4) | data1_ind);
instruction[1] = 7;
instruction[2] = (sljit_u16)((0x4 << 8) | 0x21);
sljit_emit_op_custom(compiler, instruction, 6);

OP2(SLJIT_ADD, STR_PTR, 0, STR_PTR, 0, TMP2, 0);

JUMPHERE(quit);

add_jump(compiler, &common->failed_match, CMP(SLJIT_GREATER_EQUAL, STR_PTR, 0, STR_END, 0));

#if defined SUPPORT_UNICODE && PCRE2_CODE_UNIT_WIDTH != 32
if (common->utf)
  {
  SLJIT_ASSERT(common->mode == PCRE2_JIT_COMPLETE);

  OP1(MOV_UCHAR, TMP1, 0, SLJIT_MEM1(STR_PTR), IN_UCHARS(-offs1));

  quit = jump_if_utf_char_start(compiler, TMP1);

  OP2(SLJIT_ADD, STR_PTR, 0, STR_PTR, 0, SLJIT_IMM, IN_UCHARS(1));
  add_jump(compiler, &common->failed_match, CMP(SLJIT_GREATER_EQUAL, STR_PTR, 0, STR_END, 0));

  /* TMP1 contains diff. */
  OP2(SLJIT_AND, TMP2, 0, STR_PTR, 0, SLJIT_IMM, ~15);
  OP2(SLJIT_SUB, TMP1, 0, STR_PTR, 0, SLJIT_IMM, -diff);
  JUMPTO(SLJIT_JUMP, restart);

  JUMPHERE(quit);
  }
#endif

OP2(SLJIT_SUB, STR_PTR, 0, STR_PTR, 0, SLJIT_IMM, IN_UCHARS(offs1));

if (common->match_end_ptr != 0)
  OP1(SLJIT_MOV, STR_END, 0, TMP3, 0);
}

#endif /* SLJIT_CONFIG_S390X */

#if (defined SLJIT_CONFIG_LOONGARCH_64 && SLJIT_CONFIG_LOONGARCH_64)

#ifdef __linux__
/* Using getauxval(AT_HWCAP) under Linux for detecting whether LSX is available */
#include <sys/auxv.h>
#define LOONGARCH_HWCAP_LSX  (1 << 4)
#define HAS_LSX_SUPPORT ((getauxval(AT_HWCAP) & LOONGARCH_HWCAP_LSX) != 0)
#else
#define HAS_LSX_SUPPORT 0
#endif

typedef sljit_ins sljit_u32;

#define SI12_IMM_MASK   0x003ffc00
#define UI5_IMM_MASK    0x00007c00
#define UI2_IMM_MASK    0x00000c00

#define VD(vd)      ((sljit_ins)vd << 0)
#define VJ(vj)      ((sljit_ins)vj << 5)
#define VK(vk)      ((sljit_ins)vk << 10)
#define RD_V(rd)    ((sljit_ins)rd << 0)
#define RJ_V(rj)    ((sljit_ins)rj << 5)

#define IMM_SI12(imm)   (((sljit_ins)(imm) << 10) & SI12_IMM_MASK)
#define IMM_UI5(imm)    (((sljit_ins)(imm) << 10) & UI5_IMM_MASK)
#define IMM_UI2(imm)    (((sljit_ins)(imm) << 10) & UI2_IMM_MASK)

// LSX OPCODES:
#define VLD           0x2c000000
#define VOR_V         0x71268000
#define VAND_V        0x71260000
#define VBSLL_V       0x728e0000
#define VMSKLTZ_B     0x729c4000
#define VPICKVE2GR_WU 0x72f3e000

#if PCRE2_CODE_UNIT_WIDTH == 8
#define VREPLGR2VR  0x729f0000
#define VSEQ        0x70000000
#elif PCRE2_CODE_UNIT_WIDTH == 16
#define VREPLGR2VR  0x729f0400
#define VSEQ        0x70008000
#else
#define VREPLGR2VR  0x729f0800
#define VSEQ        0x70010000
#endif

static void fast_forward_char_pair_lsx_compare(struct sljit_compiler *compiler, vector_compare_type compare_type,
  sljit_s32 dst_ind, sljit_s32 cmp1_ind, sljit_s32 cmp2_ind, sljit_s32 tmp_ind)
{
if (compare_type != vector_compare_match2)
  {
  if (compare_type == vector_compare_match1i)
    {
    /* VOR.V vd, vj, vk */
    push_inst(compiler, VOR_V | VD(dst_ind) | VJ(cmp2_ind) | VK(dst_ind));
    }

  /* VSEQ.B/H/W vd, vj, vk */
  push_inst(compiler, VSEQ | VD(dst_ind) | VJ(dst_ind) | VK(cmp1_ind));
  return;
  }

/* VBSLL.V vd, vj, ui5 */
push_inst(compiler, VBSLL_V | VD(tmp_ind) | VJ(dst_ind) | IMM_UI5(0));

/* VSEQ.B/H/W vd, vj, vk */
push_inst(compiler, VSEQ | VD(dst_ind) | VJ(dst_ind) | VK(cmp1_ind));

/* VSEQ.B/H/W vd, vj, vk */
push_inst(compiler, VSEQ | VD(tmp_ind) | VJ(tmp_ind) | VK(cmp2_ind));

/* VOR vd, vj, vk */
push_inst(compiler, VOR_V | VD(dst_ind) | VJ(tmp_ind) | VK(dst_ind));
return;
}

#define JIT_HAS_FAST_FORWARD_CHAR_SIMD HAS_LSX_SUPPORT

static void fast_forward_char_simd(compiler_common *common, PCRE2_UCHAR char1, PCRE2_UCHAR char2, sljit_s32 offset)
{
DEFINE_COMPILER;
struct sljit_label *start;
#if defined SUPPORT_UNICODE && PCRE2_CODE_UNIT_WIDTH != 32
struct sljit_label *restart;
#endif
struct sljit_jump *quit;
struct sljit_jump *partial_quit[2];
vector_compare_type compare_type = vector_compare_match1;
sljit_s32 tmp1_reg_ind = sljit_get_register_index(SLJIT_GP_REGISTER, TMP1);
sljit_s32 str_ptr_reg_ind = sljit_get_register_index(SLJIT_GP_REGISTER, STR_PTR);
sljit_s32 data_ind = 0;
sljit_s32 tmp_ind = 1;
sljit_s32 cmp1_ind = 2;
sljit_s32 cmp2_ind = 3;
sljit_u32 bit = 0;

SLJIT_UNUSED_ARG(offset);

if (char1 != char2)
  {
  bit = char1 ^ char2;
  compare_type = vector_compare_match1i;

  if (!is_powerof2(bit))
    {
    bit = 0;
    compare_type = vector_compare_match2;
    }
  }

partial_quit[0] = CMP(SLJIT_GREATER_EQUAL, STR_PTR, 0, STR_END, 0);
if (common->mode == PCRE2_JIT_COMPLETE)
  add_jump(compiler, &common->failed_match, partial_quit[0]);

/* First part (unaligned start) */

OP1(SLJIT_MOV, TMP1, 0, SLJIT_IMM, char1 | bit);

/* VREPLGR2VR.B/H/W vd, rj */
push_inst(compiler, VREPLGR2VR | VD(cmp1_ind) | RJ_V(tmp1_reg_ind));

if (char1 != char2)
  {
  OP1(SLJIT_MOV, TMP1, 0, SLJIT_IMM, bit != 0 ? bit : char2);

  /* VREPLGR2VR.B/H/W vd, rj */
  push_inst(compiler, VREPLGR2VR | VD(cmp2_ind) | RJ_V(tmp1_reg_ind));
  }

OP1(SLJIT_MOV, TMP2, 0, STR_PTR, 0);

#if defined SUPPORT_UNICODE && PCRE2_CODE_UNIT_WIDTH != 32
restart = LABEL();
#endif

OP2(SLJIT_AND, TMP2, 0, TMP2, 0, SLJIT_IMM, 0xf);
OP2(SLJIT_SUB, STR_PTR, 0, STR_PTR, 0, TMP2, 0);

/* VLD vd, rj, si12 */
push_inst(compiler, VLD | VD(data_ind) | RJ_V(str_ptr_reg_ind) | IMM_SI12(0));
fast_forward_char_pair_lsx_compare(compiler, compare_type, data_ind, cmp1_ind, cmp2_ind, tmp_ind);

/* VMSKLTZ.B vd, vj */
push_inst(compiler, VMSKLTZ_B | VD(tmp_ind) | VJ(data_ind));

/* VPICKVE2GR.WU rd, vj, ui2 */
push_inst(compiler, VPICKVE2GR_WU | RD_V(tmp1_reg_ind) | VJ(tmp_ind) | IMM_UI2(0));

OP2(SLJIT_ADD, STR_PTR, 0, STR_PTR, 0, TMP2, 0);
OP2(SLJIT_LSHR, TMP1, 0, TMP1, 0, TMP2, 0);

quit = CMP(SLJIT_NOT_ZERO, TMP1, 0, SLJIT_IMM, 0);

OP2(SLJIT_SUB, STR_PTR, 0, STR_PTR, 0, TMP2, 0);

/* Second part (aligned) */
start = LABEL();

OP2(SLJIT_ADD, STR_PTR, 0, STR_PTR, 0, SLJIT_IMM, 16);

partial_quit[1] = CMP(SLJIT_GREATER_EQUAL, STR_PTR, 0, STR_END, 0);
if (common->mode == PCRE2_JIT_COMPLETE)
  add_jump(compiler, &common->failed_match, partial_quit[1]);

/* VLD vd, rj, si12 */
push_inst(compiler, VLD | VD(data_ind) | RJ_V(str_ptr_reg_ind) | IMM_SI12(0));
fast_forward_char_pair_lsx_compare(compiler, compare_type, data_ind, cmp1_ind, cmp2_ind, tmp_ind);

/* VMSKLTZ.B vd, vj */
push_inst(compiler, VMSKLTZ_B | VD(tmp_ind) | VJ(data_ind));

/* VPICKVE2GR.WU rd, vj, ui2 */
push_inst(compiler, VPICKVE2GR_WU | RD_V(tmp1_reg_ind) | VJ(tmp_ind) | IMM_UI2(0));

CMPTO(SLJIT_ZERO, TMP1, 0, SLJIT_IMM, 0, start);

JUMPHERE(quit);

/* CTZ.W rd, rj */
push_inst(compiler, CTZ_W | RD_V(tmp1_reg_ind) | RJ_V(tmp1_reg_ind));

OP2(SLJIT_ADD, STR_PTR, 0, STR_PTR, 0, TMP1, 0);

if (common->mode != PCRE2_JIT_COMPLETE)
  {
  JUMPHERE(partial_quit[0]);
  JUMPHERE(partial_quit[1]);
  OP2U(SLJIT_SUB | SLJIT_SET_GREATER, STR_PTR, 0, STR_END, 0);
  SELECT(SLJIT_GREATER, STR_PTR, STR_END, 0, STR_PTR);
  }
else
  add_jump(compiler, &common->failed_match, CMP(SLJIT_GREATER_EQUAL, STR_PTR, 0, STR_END, 0));

#if defined SUPPORT_UNICODE && PCRE2_CODE_UNIT_WIDTH != 32
if (common->utf && offset > 0)
  {
  SLJIT_ASSERT(common->mode == PCRE2_JIT_COMPLETE);

  OP1(MOV_UCHAR, TMP1, 0, SLJIT_MEM1(STR_PTR), IN_UCHARS(-offset));

  quit = jump_if_utf_char_start(compiler, TMP1);

  OP2(SLJIT_ADD, STR_PTR, 0, STR_PTR, 0, SLJIT_IMM, IN_UCHARS(1));
  add_jump(compiler, &common->failed_match, CMP(SLJIT_GREATER_EQUAL, STR_PTR, 0, STR_END, 0));
  OP1(SLJIT_MOV, TMP2, 0, STR_PTR, 0);
  JUMPTO(SLJIT_JUMP, restart);

  JUMPHERE(quit);
  }
#endif
}

#define JIT_HAS_FAST_REQUESTED_CHAR_SIMD HAS_LSX_SUPPORT

static jump_list *fast_requested_char_simd(compiler_common *common, PCRE2_UCHAR char1, PCRE2_UCHAR char2)
{
DEFINE_COMPILER;
struct sljit_label *start;
struct sljit_jump *quit;
jump_list *not_found = NULL;
vector_compare_type compare_type = vector_compare_match1;
sljit_s32 tmp1_reg_ind = sljit_get_register_index(SLJIT_GP_REGISTER, TMP1);
sljit_s32 str_ptr_reg_ind = sljit_get_register_index(SLJIT_GP_REGISTER, STR_PTR);
sljit_s32 data_ind = 0;
sljit_s32 tmp_ind = 1;
sljit_s32 cmp1_ind = 2;
sljit_s32 cmp2_ind = 3;
sljit_u32 bit = 0;

if (char1 != char2)
  {
  bit = char1 ^ char2;
  compare_type = vector_compare_match1i;

  if (!is_powerof2(bit))
    {
    bit = 0;
    compare_type = vector_compare_match2;
    }
  }

add_jump(compiler, &not_found, CMP(SLJIT_GREATER_EQUAL, TMP1, 0, STR_END, 0));
OP1(SLJIT_MOV, TMP2, 0, TMP1, 0);
OP1(SLJIT_MOV, TMP3, 0, STR_PTR, 0);

/* First part (unaligned start) */

OP1(SLJIT_MOV, TMP1, 0, SLJIT_IMM, char1 | bit);

/* VREPLGR2VR vd, rj */
push_inst(compiler, VREPLGR2VR | VD(cmp1_ind) | RJ_V(tmp1_reg_ind));

if (char1 != char2)
  {
  OP1(SLJIT_MOV, TMP1, 0, SLJIT_IMM, bit != 0 ? bit : char2);
  /* VREPLGR2VR vd, rj */
  push_inst(compiler, VREPLGR2VR | VD(cmp2_ind) | RJ_V(tmp1_reg_ind));
  }

OP1(SLJIT_MOV, STR_PTR, 0, TMP2, 0);
OP2(SLJIT_AND, TMP2, 0, TMP2, 0, SLJIT_IMM, 0xf);
OP2(SLJIT_SUB, STR_PTR, 0, STR_PTR, 0, TMP2, 0);

/* VLD vd, rj, si12 */
push_inst(compiler, VLD | VD(data_ind) | RJ_V(str_ptr_reg_ind) | IMM_SI12(0));
fast_forward_char_pair_lsx_compare(compiler, compare_type, data_ind, cmp1_ind, cmp2_ind, tmp_ind);

/* VMSKLTZ.B vd, vj */
push_inst(compiler, VMSKLTZ_B | VD(tmp_ind) | VJ(data_ind));

/* VPICKVE2GR.WU rd, vj, ui2 */
push_inst(compiler, VPICKVE2GR_WU | RD_V(tmp1_reg_ind) | VJ(tmp_ind) | IMM_UI2(0));

OP2(SLJIT_ADD, STR_PTR, 0, STR_PTR, 0, TMP2, 0);
OP2(SLJIT_LSHR, TMP1, 0, TMP1, 0, TMP2, 0);

quit = CMP(SLJIT_NOT_ZERO, TMP1, 0, SLJIT_IMM, 0);

OP2(SLJIT_SUB, STR_PTR, 0, STR_PTR, 0, TMP2, 0);

/* Second part (aligned) */
start = LABEL();

OP2(SLJIT_ADD, STR_PTR, 0, STR_PTR, 0, SLJIT_IMM, 16);

add_jump(compiler, &not_found, CMP(SLJIT_GREATER_EQUAL, STR_PTR, 0, STR_END, 0));

/* VLD vd, rj, si12 */
push_inst(compiler, VLD | VD(data_ind) | RJ_V(str_ptr_reg_ind) | IMM_SI12(0));
fast_forward_char_pair_lsx_compare(compiler, compare_type, data_ind, cmp1_ind, cmp2_ind, tmp_ind);

/* VMSKLTZ.B vd, vj */
push_inst(compiler, VMSKLTZ_B | VD(tmp_ind) | VJ(data_ind));

/* VPICKVE2GR.WU rd, vj, ui2 */
push_inst(compiler, VPICKVE2GR_WU | RD_V(tmp1_reg_ind) | VJ(tmp_ind) | IMM_UI2(0));

CMPTO(SLJIT_ZERO, TMP1, 0, SLJIT_IMM, 0, start);

JUMPHERE(quit);

/* CTZ.W rd, rj */
push_inst(compiler, CTZ_W | RD_V(tmp1_reg_ind) | RJ_V(tmp1_reg_ind));

OP2(SLJIT_ADD, TMP1, 0, TMP1, 0, STR_PTR, 0);
add_jump(compiler, &not_found, CMP(SLJIT_GREATER_EQUAL, TMP1, 0, STR_END, 0));

OP1(SLJIT_MOV, STR_PTR, 0, TMP3, 0);
return not_found;
}

#define JIT_HAS_FAST_FORWARD_CHAR_PAIR_SIMD HAS_LSX_SUPPORT

static void fast_forward_char_pair_simd(compiler_common *common, sljit_s32 offs1,
  PCRE2_UCHAR char1a, PCRE2_UCHAR char1b, sljit_s32 offs2, PCRE2_UCHAR char2a, PCRE2_UCHAR char2b)
{
DEFINE_COMPILER;
vector_compare_type compare1_type = vector_compare_match1;
vector_compare_type compare2_type = vector_compare_match1;
sljit_u32 bit1 = 0;
sljit_u32 bit2 = 0;
sljit_u32 diff = IN_UCHARS(offs1 - offs2);
sljit_s32 tmp1_reg_ind = sljit_get_register_index(SLJIT_GP_REGISTER, TMP1);
sljit_s32 tmp2_reg_ind = sljit_get_register_index(SLJIT_GP_REGISTER, TMP2);
sljit_s32 str_ptr_reg_ind = sljit_get_register_index(SLJIT_GP_REGISTER, STR_PTR);
sljit_s32 data1_ind = 0;
sljit_s32 data2_ind = 1;
sljit_s32 tmp1_ind = 2;
sljit_s32 tmp2_ind = 3;
sljit_s32 cmp1a_ind = 4;
sljit_s32 cmp1b_ind = 5;
sljit_s32 cmp2a_ind = 6;
sljit_s32 cmp2b_ind = 7;
struct sljit_label *start;
#if defined SUPPORT_UNICODE && PCRE2_CODE_UNIT_WIDTH != 32
struct sljit_label *restart;
#endif
struct sljit_jump *jump[2];

SLJIT_ASSERT(common->mode == PCRE2_JIT_COMPLETE && offs1 > offs2);
SLJIT_ASSERT(diff <= (unsigned)IN_UCHARS(max_fast_forward_char_pair_offset()));

/* Initialize. */
if (common->match_end_ptr != 0)
  {
  OP1(SLJIT_MOV, TMP1, 0, SLJIT_MEM1(SLJIT_SP), common->match_end_ptr);
  OP2(SLJIT_ADD, TMP1, 0, TMP1, 0, SLJIT_IMM, IN_UCHARS(offs1 + 1));
  OP1(SLJIT_MOV, TMP3, 0, STR_END, 0);

  OP2U(SLJIT_SUB | SLJIT_SET_LESS, TMP1, 0, STR_END, 0);
  SELECT(SLJIT_LESS, STR_END, TMP1, 0, STR_END);
  }

OP2(SLJIT_ADD, STR_PTR, 0, STR_PTR, 0, SLJIT_IMM, IN_UCHARS(offs1));
add_jump(compiler, &common->failed_match, CMP(SLJIT_GREATER_EQUAL, STR_PTR, 0, STR_END, 0));

if (char1a == char1b)
  OP1(SLJIT_MOV, TMP1, 0, SLJIT_IMM, char1a);
else
  {
  bit1 = char1a ^ char1b;
  if (is_powerof2(bit1))
    {
    compare1_type = vector_compare_match1i;
    OP1(SLJIT_MOV, TMP1, 0, SLJIT_IMM, char1a | bit1);
    OP1(SLJIT_MOV, TMP2, 0, SLJIT_IMM, bit1);
    }
  else
    {
    compare1_type = vector_compare_match2;
    bit1 = 0;
    OP1(SLJIT_MOV, TMP1, 0, SLJIT_IMM, char1a);
    OP1(SLJIT_MOV, TMP2, 0, SLJIT_IMM, char1b);
    }
  }

/* VREPLGR2VR vd, rj */
push_inst(compiler, VREPLGR2VR | VD(cmp1a_ind) | RJ_V(tmp1_reg_ind));

if (char1a != char1b)
  {
  /* VREPLGR2VR vd, rj */
  push_inst(compiler, VREPLGR2VR | VD(cmp1b_ind) | RJ_V(tmp2_reg_ind));
  }

if (char2a == char2b)
  OP1(SLJIT_MOV, TMP1, 0, SLJIT_IMM, char2a);
else
  {
  bit2 = char2a ^ char2b;
  if (is_powerof2(bit2))
    {
    compare2_type = vector_compare_match1i;
    OP1(SLJIT_MOV, TMP1, 0, SLJIT_IMM, char2a | bit2);
    OP1(SLJIT_MOV, TMP2, 0, SLJIT_IMM, bit2);
    }
  else
    {
    compare2_type = vector_compare_match2;
    bit2 = 0;
    OP1(SLJIT_MOV, TMP1, 0, SLJIT_IMM, char2a);
    OP1(SLJIT_MOV, TMP2, 0, SLJIT_IMM, char2b);
    }
  }

/* VREPLGR2VR vd, rj */
push_inst(compiler, VREPLGR2VR | VD(cmp2a_ind) | RJ_V(tmp1_reg_ind));

if (char2a != char2b)
  {
  /* VREPLGR2VR vd, rj */
  push_inst(compiler, VREPLGR2VR | VD(cmp2b_ind) | RJ_V(tmp2_reg_ind));
  }

#if defined SUPPORT_UNICODE && PCRE2_CODE_UNIT_WIDTH != 32
restart = LABEL();
#endif

OP2(SLJIT_SUB, TMP1, 0, STR_PTR, 0, SLJIT_IMM, diff);
OP1(SLJIT_MOV, TMP2, 0, STR_PTR, 0);
OP2(SLJIT_AND, TMP2, 0, TMP2, 0, SLJIT_IMM, 0xf);
OP2(SLJIT_SUB, STR_PTR, 0, STR_PTR, 0, TMP2, 0);

/* VLD vd, rj, si12 */
push_inst(compiler, VLD | VD(data1_ind) | RJ_V(str_ptr_reg_ind) | IMM_SI12(0));

jump[0] = CMP(SLJIT_GREATER_EQUAL, TMP1, 0, STR_PTR, 0);

/* VLD vd, rj, si12 */
push_inst(compiler, VLD | VD(data2_ind) | RJ_V(str_ptr_reg_ind) | IMM_SI12(-(sljit_s8)diff));
jump[1] = JUMP(SLJIT_JUMP);

JUMPHERE(jump[0]);

/* VBSLL.V vd, vj, ui5 */
push_inst(compiler, VBSLL_V | VD(data2_ind) | VJ(data1_ind) | IMM_UI5(diff));

JUMPHERE(jump[1]);

fast_forward_char_pair_lsx_compare(compiler, compare2_type, data2_ind, cmp2a_ind, cmp2b_ind, tmp2_ind);
fast_forward_char_pair_lsx_compare(compiler, compare1_type, data1_ind, cmp1a_ind, cmp1b_ind, tmp1_ind);

/* VAND vd, vj, vk */
push_inst(compiler, VOR_V | VD(data1_ind) | VJ(data1_ind) | VK(data2_ind));

/* VMSKLTZ.B vd, vj */
push_inst(compiler, VMSKLTZ_B | VD(tmp1_ind) | VJ(data1_ind));

/* VPICKVE2GR.WU rd, vj, ui2 */
push_inst(compiler, VPICKVE2GR_WU | RD_V(tmp1_reg_ind) | VJ(tmp1_ind) | IMM_UI2(0));

/* Ignore matches before the first STR_PTR. */
OP2(SLJIT_ADD, STR_PTR, 0, STR_PTR, 0, TMP2, 0);
OP2(SLJIT_LSHR, TMP1, 0, TMP1, 0, TMP2, 0);

jump[0] = CMP(SLJIT_NOT_ZERO, TMP1, 0, SLJIT_IMM, 0);

OP2(SLJIT_SUB, STR_PTR, 0, STR_PTR, 0, TMP2, 0);

/* Main loop. */
start = LABEL();

OP2(SLJIT_ADD, STR_PTR, 0, STR_PTR, 0, SLJIT_IMM, 16);
add_jump(compiler, &common->failed_match, CMP(SLJIT_GREATER_EQUAL, STR_PTR, 0, STR_END, 0));

/* VLD vd, rj, si12 */
push_inst(compiler, VLD | VD(data1_ind) | RJ_V(str_ptr_reg_ind) | IMM_SI12(0));
push_inst(compiler, VLD | VD(data2_ind) | RJ_V(str_ptr_reg_ind) | IMM_SI12(-(sljit_s8)diff));

fast_forward_char_pair_lsx_compare(compiler, compare1_type, data1_ind, cmp1a_ind, cmp1b_ind, tmp2_ind);
fast_forward_char_pair_lsx_compare(compiler, compare2_type, data2_ind, cmp2a_ind, cmp2b_ind, tmp1_ind);

/* VAND.V vd, vj, vk */
push_inst(compiler, VAND_V | VD(data1_ind) | VJ(data1_ind) | VK(data2_ind));

/* VMSKLTZ.B vd, vj */
push_inst(compiler, VMSKLTZ_B | VD(tmp1_ind) | VJ(data1_ind));

/* VPICKVE2GR.WU rd, vj, ui2 */
push_inst(compiler, VPICKVE2GR_WU | RD_V(tmp1_reg_ind) | VJ(tmp1_ind) | IMM_UI2(0));

CMPTO(SLJIT_ZERO, TMP1, 0, SLJIT_IMM, 0, start);

JUMPHERE(jump[0]);

/* CTZ.W rd, rj */
push_inst(compiler, CTZ_W | RD_V(tmp1_reg_ind) | RJ_V(tmp1_reg_ind));

OP2(SLJIT_ADD, STR_PTR, 0, STR_PTR, 0, TMP1, 0);

add_jump(compiler, &common->failed_match, CMP(SLJIT_GREATER_EQUAL, STR_PTR, 0, STR_END, 0));

#if defined SUPPORT_UNICODE && PCRE2_CODE_UNIT_WIDTH != 32
if (common->utf)
  {
  OP1(MOV_UCHAR, TMP1, 0, SLJIT_MEM1(STR_PTR), IN_UCHARS(-offs1));

  jump[0] = jump_if_utf_char_start(compiler, TMP1);

  OP2(SLJIT_ADD, STR_PTR, 0, STR_PTR, 0, SLJIT_IMM, IN_UCHARS(1));
  CMPTO(SLJIT_LESS, STR_PTR, 0, STR_END, 0, restart);

  add_jump(compiler, &common->failed_match, JUMP(SLJIT_JUMP));

  JUMPHERE(jump[0]);
  }
#endif

OP2(SLJIT_SUB, STR_PTR, 0, STR_PTR, 0, SLJIT_IMM, IN_UCHARS(offs1));

if (common->match_end_ptr != 0)
  OP1(SLJIT_MOV, STR_END, 0, TMP3, 0);
}

#endif /* SLJIT_CONFIG_LOONGARCH_64 */

#endif /* !SUPPORT_VALGRIND */
ext/pcre/pcre2lib/pcre2_ucp.h000064400000024004151730541570012042 0ustar00/*************************************************
*      Perl-Compatible Regular Expressions       *
*************************************************/

/* PCRE is a library of functions to support regular expressions whose syntax
and semantics are as close as possible to those of the Perl 5 language.

                       Written by Philip Hazel
     Original API code Copyright (c) 1997-2012 University of Cambridge
          New API code Copyright (c) 2016-2022 University of Cambridge

This module is auto-generated from Unicode data files. DO NOT EDIT MANUALLY!
Instead, modify the maint/GenerateUcpHeader.py script and run it to generate
a new version of this code.

-----------------------------------------------------------------------------
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:

    * Redistributions of source code must retain the above copyright notice,
      this list of conditions and the following disclaimer.

    * Redistributions in binary form must reproduce the above copyright
      notice, this list of conditions and the following disclaimer in the
      documentation and/or other materials provided with the distribution.

    * Neither the name of the University of Cambridge nor the names of its
      contributors may be used to endorse or promote products derived from
      this software without specific prior written permission.

THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
POSSIBILITY OF SUCH DAMAGE.
-----------------------------------------------------------------------------
*/

#ifndef PCRE2_UCP_H_IDEMPOTENT_GUARD
#define PCRE2_UCP_H_IDEMPOTENT_GUARD

/* This file contains definitions of the Unicode property values that are
returned by the UCD access macros and used throughout PCRE2.

IMPORTANT: The specific values of the first two enums (general and particular
character categories) are assumed by the table called catposstab in the file
pcre2_auto_possess.c. They are unlikely to change, but should be checked after
an update. */

/* These are the general character categories. */

enum {
  ucp_C,
  ucp_L,
  ucp_M,
  ucp_N,
  ucp_P,
  ucp_S,
  ucp_Z,
};

/* These are the particular character categories. */

enum {
  ucp_Cc,    /* Control */
  ucp_Cf,    /* Format */
  ucp_Cn,    /* Unassigned */
  ucp_Co,    /* Private use */
  ucp_Cs,    /* Surrogate */
  ucp_Ll,    /* Lower case letter */
  ucp_Lm,    /* Modifier letter */
  ucp_Lo,    /* Other letter */
  ucp_Lt,    /* Title case letter */
  ucp_Lu,    /* Upper case letter */
  ucp_Mc,    /* Spacing mark */
  ucp_Me,    /* Enclosing mark */
  ucp_Mn,    /* Non-spacing mark */
  ucp_Nd,    /* Decimal number */
  ucp_Nl,    /* Letter number */
  ucp_No,    /* Other number */
  ucp_Pc,    /* Connector punctuation */
  ucp_Pd,    /* Dash punctuation */
  ucp_Pe,    /* Close punctuation */
  ucp_Pf,    /* Final punctuation */
  ucp_Pi,    /* Initial punctuation */
  ucp_Po,    /* Other punctuation */
  ucp_Ps,    /* Open punctuation */
  ucp_Sc,    /* Currency symbol */
  ucp_Sk,    /* Modifier symbol */
  ucp_Sm,    /* Mathematical symbol */
  ucp_So,    /* Other symbol */
  ucp_Zl,    /* Line separator */
  ucp_Zp,    /* Paragraph separator */
  ucp_Zs,    /* Space separator */
};

/* These are Boolean properties. */

enum {
  ucp_ASCII,
  ucp_ASCII_Hex_Digit,
  ucp_Alphabetic,
  ucp_Bidi_Control,
  ucp_Bidi_Mirrored,
  ucp_Case_Ignorable,
  ucp_Cased,
  ucp_Changes_When_Casefolded,
  ucp_Changes_When_Casemapped,
  ucp_Changes_When_Lowercased,
  ucp_Changes_When_Titlecased,
  ucp_Changes_When_Uppercased,
  ucp_Dash,
  ucp_Default_Ignorable_Code_Point,
  ucp_Deprecated,
  ucp_Diacritic,
  ucp_Emoji,
  ucp_Emoji_Component,
  ucp_Emoji_Modifier,
  ucp_Emoji_Modifier_Base,
  ucp_Emoji_Presentation,
  ucp_Extended_Pictographic,
  ucp_Extender,
  ucp_Grapheme_Base,
  ucp_Grapheme_Extend,
  ucp_Grapheme_Link,
  ucp_Hex_Digit,
  ucp_IDS_Binary_Operator,
  ucp_IDS_Trinary_Operator,
  ucp_ID_Continue,
  ucp_ID_Start,
  ucp_Ideographic,
  ucp_Join_Control,
  ucp_Logical_Order_Exception,
  ucp_Lowercase,
  ucp_Math,
  ucp_Noncharacter_Code_Point,
  ucp_Pattern_Syntax,
  ucp_Pattern_White_Space,
  ucp_Prepended_Concatenation_Mark,
  ucp_Quotation_Mark,
  ucp_Radical,
  ucp_Regional_Indicator,
  ucp_Sentence_Terminal,
  ucp_Soft_Dotted,
  ucp_Terminal_Punctuation,
  ucp_Unified_Ideograph,
  ucp_Uppercase,
  ucp_Variation_Selector,
  ucp_White_Space,
  ucp_XID_Continue,
  ucp_XID_Start,
  /* This must be last */
  ucp_Bprop_Count
};

/* Size of entries in ucd_boolprop_sets[] */

#define ucd_boolprop_sets_item_size 2

/* These are the bidi class values. */

enum {
  ucp_bidiAL,   /* Arabic_Letter */
  ucp_bidiAN,   /* Arabic_Number */
  ucp_bidiB,    /* Paragraph_Separator */
  ucp_bidiBN,   /* Boundary_Neutral */
  ucp_bidiCS,   /* Common_Separator */
  ucp_bidiEN,   /* European_Number */
  ucp_bidiES,   /* European_Separator */
  ucp_bidiET,   /* European_Terminator */
  ucp_bidiFSI,  /* First_Strong_Isolate */
  ucp_bidiL,    /* Left_To_Right */
  ucp_bidiLRE,  /* Left_To_Right_Embedding */
  ucp_bidiLRI,  /* Left_To_Right_Isolate */
  ucp_bidiLRO,  /* Left_To_Right_Override */
  ucp_bidiNSM,  /* Nonspacing_Mark */
  ucp_bidiON,   /* Other_Neutral */
  ucp_bidiPDF,  /* Pop_Directional_Format */
  ucp_bidiPDI,  /* Pop_Directional_Isolate */
  ucp_bidiR,    /* Right_To_Left */
  ucp_bidiRLE,  /* Right_To_Left_Embedding */
  ucp_bidiRLI,  /* Right_To_Left_Isolate */
  ucp_bidiRLO,  /* Right_To_Left_Override */
  ucp_bidiS,    /* Segment_Separator */
  ucp_bidiWS,   /* White_Space */
};

/* These are grapheme break properties. The Extended Pictographic property
comes from the emoji-data.txt file. */

enum {
  ucp_gbCR,                    /*  0 */
  ucp_gbLF,                    /*  1 */
  ucp_gbControl,               /*  2 */
  ucp_gbExtend,                /*  3 */
  ucp_gbPrepend,               /*  4 */
  ucp_gbSpacingMark,           /*  5 */
  ucp_gbL,                     /*  6 Hangul syllable type L */
  ucp_gbV,                     /*  7 Hangul syllable type V */
  ucp_gbT,                     /*  8 Hangul syllable type T */
  ucp_gbLV,                    /*  9 Hangul syllable type LV */
  ucp_gbLVT,                   /* 10 Hangul syllable type LVT */
  ucp_gbRegional_Indicator,    /* 11 */
  ucp_gbOther,                 /* 12 */
  ucp_gbZWJ,                   /* 13 */
  ucp_gbExtended_Pictographic, /* 14 */
};

/* These are the script identifications. */

enum {
  /* Scripts which has characters in other scripts. */
  ucp_Latin,
  ucp_Greek,
  ucp_Cyrillic,
  ucp_Arabic,
  ucp_Syriac,
  ucp_Thaana,
  ucp_Devanagari,
  ucp_Bengali,
  ucp_Gurmukhi,
  ucp_Gujarati,
  ucp_Oriya,
  ucp_Tamil,
  ucp_Telugu,
  ucp_Kannada,
  ucp_Malayalam,
  ucp_Sinhala,
  ucp_Myanmar,
  ucp_Georgian,
  ucp_Hangul,
  ucp_Mongolian,
  ucp_Hiragana,
  ucp_Katakana,
  ucp_Bopomofo,
  ucp_Han,
  ucp_Yi,
  ucp_Tagalog,
  ucp_Hanunoo,
  ucp_Buhid,
  ucp_Tagbanwa,
  ucp_Limbu,
  ucp_Tai_Le,
  ucp_Linear_B,
  ucp_Cypriot,
  ucp_Buginese,
  ucp_Coptic,
  ucp_Glagolitic,
  ucp_Syloti_Nagri,
  ucp_Phags_Pa,
  ucp_Nko,
  ucp_Kayah_Li,
  ucp_Javanese,
  ucp_Kaithi,
  ucp_Mandaic,
  ucp_Chakma,
  ucp_Sharada,
  ucp_Takri,
  ucp_Duployan,
  ucp_Grantha,
  ucp_Khojki,
  ucp_Linear_A,
  ucp_Mahajani,
  ucp_Manichaean,
  ucp_Modi,
  ucp_Old_Permic,
  ucp_Psalter_Pahlavi,
  ucp_Khudawadi,
  ucp_Tirhuta,
  ucp_Multani,
  ucp_Adlam,
  ucp_Masaram_Gondi,
  ucp_Dogra,
  ucp_Gunjala_Gondi,
  ucp_Hanifi_Rohingya,
  ucp_Sogdian,
  ucp_Nandinagari,
  ucp_Yezidi,
  ucp_Cypro_Minoan,
  ucp_Old_Uyghur,

  /* Scripts which has no characters in other scripts. */
  ucp_Unknown,
  ucp_Common,
  ucp_Armenian,
  ucp_Hebrew,
  ucp_Thai,
  ucp_Lao,
  ucp_Tibetan,
  ucp_Ethiopic,
  ucp_Cherokee,
  ucp_Canadian_Aboriginal,
  ucp_Ogham,
  ucp_Runic,
  ucp_Khmer,
  ucp_Old_Italic,
  ucp_Gothic,
  ucp_Deseret,
  ucp_Inherited,
  ucp_Ugaritic,
  ucp_Shavian,
  ucp_Osmanya,
  ucp_Braille,
  ucp_New_Tai_Lue,
  ucp_Tifinagh,
  ucp_Old_Persian,
  ucp_Kharoshthi,
  ucp_Balinese,
  ucp_Cuneiform,
  ucp_Phoenician,
  ucp_Sundanese,
  ucp_Lepcha,
  ucp_Ol_Chiki,
  ucp_Vai,
  ucp_Saurashtra,
  ucp_Rejang,
  ucp_Lycian,
  ucp_Carian,
  ucp_Lydian,
  ucp_Cham,
  ucp_Tai_Tham,
  ucp_Tai_Viet,
  ucp_Avestan,
  ucp_Egyptian_Hieroglyphs,
  ucp_Samaritan,
  ucp_Lisu,
  ucp_Bamum,
  ucp_Meetei_Mayek,
  ucp_Imperial_Aramaic,
  ucp_Old_South_Arabian,
  ucp_Inscriptional_Parthian,
  ucp_Inscriptional_Pahlavi,
  ucp_Old_Turkic,
  ucp_Batak,
  ucp_Brahmi,
  ucp_Meroitic_Cursive,
  ucp_Meroitic_Hieroglyphs,
  ucp_Miao,
  ucp_Sora_Sompeng,
  ucp_Caucasian_Albanian,
  ucp_Bassa_Vah,
  ucp_Elbasan,
  ucp_Pahawh_Hmong,
  ucp_Mende_Kikakui,
  ucp_Mro,
  ucp_Old_North_Arabian,
  ucp_Nabataean,
  ucp_Palmyrene,
  ucp_Pau_Cin_Hau,
  ucp_Siddham,
  ucp_Warang_Citi,
  ucp_Ahom,
  ucp_Anatolian_Hieroglyphs,
  ucp_Hatran,
  ucp_Old_Hungarian,
  ucp_SignWriting,
  ucp_Bhaiksuki,
  ucp_Marchen,
  ucp_Newa,
  ucp_Osage,
  ucp_Tangut,
  ucp_Nushu,
  ucp_Soyombo,
  ucp_Zanabazar_Square,
  ucp_Makasar,
  ucp_Medefaidrin,
  ucp_Old_Sogdian,
  ucp_Elymaic,
  ucp_Nyiakeng_Puachue_Hmong,
  ucp_Wancho,
  ucp_Chorasmian,
  ucp_Dives_Akuru,
  ucp_Khitan_Small_Script,
  ucp_Tangsa,
  ucp_Toto,
  ucp_Vithkuqi,
  ucp_Kawi,
  ucp_Nag_Mundari,

  /* This must be last */
  ucp_Script_Count
};

/* Size of entries in ucd_script_sets[] */

#define ucd_script_sets_item_size 3

#endif  /* PCRE2_UCP_H_IDEMPOTENT_GUARD */

/* End of pcre2_ucp.h */
ext/pcre/pcre2lib/config.h000064400000007517151730541570011437 0ustar00
#include <php_compat.h>

#ifdef PHP_WIN32
# include <config.w32.h>
#else
# include <php_config.h>
#endif

#define SUPPORT_UNICODE 1
#define SUPPORT_PCRE2_8 1

#if defined(__GNUC__) && __GNUC__ >= 4
# ifdef __cplusplus
#  define PCRE2_EXP_DECL		extern "C" __attribute__ ((visibility("default")))
# else
#  define PCRE2_EXP_DECL		extern __attribute__ ((visibility("default")))
# endif
# define PCRE2_EXP_DEFN		__attribute__ ((visibility("default")))
#endif

/* Define to any value for valgrind support to find invalid memory reads. */
#ifdef HAVE_PCRE_VALGRIND_SUPPORT
#define SUPPORT_VALGRIND 1
#endif

/* Define to any value to enable support for Just-In-Time compiling. */
#ifdef HAVE_PCRE_JIT_SUPPORT
#define SUPPORT_JIT 1
#endif

/* This limits the amount of memory that pcre2_match() may use while matching
   a pattern. The value is in kilobytes. */
#ifndef HEAP_LIMIT
#define HEAP_LIMIT 20000000
#endif

/* The value of PARENS_NEST_LIMIT specifies the maximum depth of nested
   parentheses (of any kind) in a pattern. This limits the amount of system
   stack that is used while compiling a pattern. */
#ifndef PARENS_NEST_LIMIT
#define PARENS_NEST_LIMIT 250
#endif

/* The value of MATCH_LIMIT determines the default number of times the
   pcre2_match() function can record a backtrack position during a single
   matching attempt. There is a runtime interface for setting a different
   limit. The limit exists in order to catch runaway regular expressions that
   take for ever to determine that they do not match. The default is set very
   large so that it does not accidentally catch legitimate cases. */
#ifndef MATCH_LIMIT
#define MATCH_LIMIT 10000000
#endif

/* The above limit applies to all backtracks, whether or not they are nested.
   In some environments it is desirable to limit the nesting of backtracking
   (that is, the depth of tree that is searched) more strictly, in order to
   restrict the maximum amount of heap memory that is used. The value of
   MATCH_LIMIT_DEPTH provides this facility. To have any useful effect, it
   must be less than the value of MATCH_LIMIT. The default is to use the same
   value as MATCH_LIMIT. There is a runtime method for setting a different
   limit. */
#ifndef MATCH_LIMIT_DEPTH
#define MATCH_LIMIT_DEPTH MATCH_LIMIT
#endif

/* This limit is parameterized just in case anybody ever wants to change it.
   Care must be taken if it is increased, because it guards against integer
   overflow caused by enormously large patterns. */
#ifndef MAX_NAME_COUNT
#define MAX_NAME_COUNT 10000
#endif

/* This limit is parameterized just in case anybody ever wants to change it.
   Care must be taken if it is increased, because it guards against integer
   overflow caused by enormously large patterns. */
#ifndef MAX_NAME_SIZE
#define MAX_NAME_SIZE 128
#endif

/* Defining NEVER_BACKSLASH_C locks out the use of \C in all patterns. */
/* #undef NEVER_BACKSLASH_C */

/* The value of NEWLINE_DEFAULT determines the default newline character
   sequence. PCRE2 client programs can override this by selecting other values
   at run time. The valid values are 1 (CR), 2 (LF), 3 (CRLF), 4 (ANY), 5
   (ANYCRLF), and 6 (NUL). */
#ifndef NEWLINE_DEFAULT
#define NEWLINE_DEFAULT 2
#endif

/* The value of LINK_SIZE determines the number of bytes used to store links
   as offsets within the compiled regex. The default is 2, which allows for
   compiled patterns up to 64K long. This covers the vast majority of cases.
   However, PCRE2 can also be compiled to use 3 or 4 bytes instead. This
   allows for longer patterns in extreme cases. */
#ifndef LINK_SIZE
#define LINK_SIZE 2
#endif

/* The value of MAX_VARLOOKBEHIND specifies the default maximum length, in
  characters, for a variable-length lookbehind assertion. */
#ifndef MAX_VARLOOKBEHIND
#define MAX_VARLOOKBEHIND 255
#endif

/* to make a symbol visible */
#ifndef PCRE2_EXPORT
#define PCRE2_EXPORT
#endif
ext/pcre/pcre2lib/pcre2_intmodedep.h000064400000112276151730541600013406 0ustar00/*************************************************
*      Perl-Compatible Regular Expressions       *
*************************************************/

/* PCRE is a library of functions to support regular expressions whose syntax
and semantics are as close as possible to those of the Perl 5 language.

                       Written by Philip Hazel
     Original API code Copyright (c) 1997-2012 University of Cambridge
          New API code Copyright (c) 2016-2024 University of Cambridge

-----------------------------------------------------------------------------
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:

    * Redistributions of source code must retain the above copyright notice,
      this list of conditions and the following disclaimer.

    * Redistributions in binary form must reproduce the above copyright
      notice, this list of conditions and the following disclaimer in the
      documentation and/or other materials provided with the distribution.

    * Neither the name of the University of Cambridge nor the names of its
      contributors may be used to endorse or promote products derived from
      this software without specific prior written permission.

THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
POSSIBILITY OF SUCH DAMAGE.
-----------------------------------------------------------------------------
*/


/* This module contains mode-dependent macro and structure definitions. The
file is #included by pcre2_internal.h if PCRE2_CODE_UNIT_WIDTH is defined.
These mode-dependent items are kept in a separate file so that they can also be
#included multiple times for different code unit widths by pcre2test in order
to have access to the hidden structures at all supported widths.

Some of the mode-dependent macros are required at different widths for
different parts of the pcre2test code (in particular, the included
pcre_printint.c file). We undefine them here so that they can be re-defined for
multiple inclusions. Not all of these are used in pcre2test, but it's easier
just to undefine them all. */

#undef ACROSSCHAR
#undef BACKCHAR
#undef BYTES2CU
#undef CHMAX_255
#undef CU2BYTES
#undef FORWARDCHAR
#undef FORWARDCHARTEST
#undef GET
#undef GET2
#undef GETCHAR
#undef GETCHARINC
#undef GETCHARINCTEST
#undef GETCHARLEN
#undef GETCHARLENTEST
#undef GETCHARTEST
#undef GET_EXTRALEN
#undef HAS_EXTRALEN
#undef IMM2_SIZE
#undef MAX_255
#undef MAX_MARK
#undef MAX_PATTERN_SIZE
#undef MAX_UTF_SINGLE_CU
#undef NOT_FIRSTCU
#undef PUT
#undef PUT2
#undef PUT2INC
#undef PUTCHAR
#undef PUTINC
#undef TABLE_GET



/* -------------------------- MACROS ----------------------------- */

/* PCRE keeps offsets in its compiled code as at least 16-bit quantities
(always stored in big-endian order in 8-bit mode) by default. These are used,
for example, to link from the start of a subpattern to its alternatives and its
end. The use of 16 bits per offset limits the size of an 8-bit compiled regex
to around 64K, which is big enough for almost everybody. However, I received a
request for an even bigger limit. For this reason, and also to make the code
easier to maintain, the storing and loading of offsets from the compiled code
unit string is now handled by the macros that are defined here.

The macros are controlled by the value of LINK_SIZE. This defaults to 2, but
values of 3 or 4 are also supported. */

/* ------------------- 8-bit support  ------------------ */

#if PCRE2_CODE_UNIT_WIDTH == 8

#if LINK_SIZE == 2
#define PUT(a,n,d)   \
  (a[n] = (PCRE2_UCHAR)((d) >> 8)), \
  (a[(n)+1] = (PCRE2_UCHAR)((d) & 255))
#define GET(a,n) \
  (unsigned int)(((a)[n] << 8) | (a)[(n)+1])
#define MAX_PATTERN_SIZE (1 << 16)

#elif LINK_SIZE == 3
#define PUT(a,n,d)       \
  (a[n] = (PCRE2_UCHAR)((d) >> 16)),    \
  (a[(n)+1] = (PCRE2_UCHAR)((d) >> 8)), \
  (a[(n)+2] = (PCRE2_UCHAR)((d) & 255))
#define GET(a,n) \
  (unsigned int)(((a)[n] << 16) | ((a)[(n)+1] << 8) | (a)[(n)+2])
#define MAX_PATTERN_SIZE (1 << 24)

#elif LINK_SIZE == 4
#define PUT(a,n,d)        \
  (a[n] = (PCRE2_UCHAR)((d) >> 24)),     \
  (a[(n)+1] = (PCRE2_UCHAR)((d) >> 16)), \
  (a[(n)+2] = (PCRE2_UCHAR)((d) >> 8)),  \
  (a[(n)+3] = (PCRE2_UCHAR)((d) & 255))
#define GET(a,n) \
  (unsigned int)(((a)[n] << 24) | ((a)[(n)+1] << 16) | ((a)[(n)+2] << 8) | (a)[(n)+3])
#define MAX_PATTERN_SIZE (1 << 30)   /* Keep it positive */

#else
#error LINK_SIZE must be 2, 3, or 4
#endif


/* ------------------- 16-bit support  ------------------ */

#elif PCRE2_CODE_UNIT_WIDTH == 16

#if LINK_SIZE == 2
#undef LINK_SIZE
#define LINK_SIZE 1
#define PUT(a,n,d)   \
  (a[n] = (PCRE2_UCHAR)(d))
#define GET(a,n) \
  (a[n])
#define MAX_PATTERN_SIZE (1 << 16)

#elif LINK_SIZE == 3 || LINK_SIZE == 4
#undef LINK_SIZE
#define LINK_SIZE 2
#define PUT(a,n,d)   \
  (a[n] = (PCRE2_UCHAR)((d) >> 16)), \
  (a[(n)+1] = (PCRE2_UCHAR)((d) & 65535))
#define GET(a,n) \
  (unsigned int)(((a)[n] << 16) | (a)[(n)+1])
#define MAX_PATTERN_SIZE (1 << 30)  /* Keep it positive */

#else
#error LINK_SIZE must be 2, 3, or 4
#endif


/* ------------------- 32-bit support  ------------------ */

#elif PCRE2_CODE_UNIT_WIDTH == 32
#undef LINK_SIZE
#define LINK_SIZE 1
#define PUT(a,n,d)   \
  (a[n] = (d))
#define GET(a,n) \
  (a[n])
#define MAX_PATTERN_SIZE (1 << 30)  /* Keep it positive */

#else
#error Unsupported compiling mode
#endif


/* --------------- Other mode-specific macros ----------------- */

/* PCRE uses some other (at least) 16-bit quantities that do not change when
the size of offsets changes. There are used for repeat counts and for other
things such as capturing parenthesis numbers in back references.

Define the number of code units required to hold a 16-bit count/offset, and
macros to load and store such a value. For reasons that I do not understand,
the expression in the 8-bit GET2 macro is treated by gcc as a signed
expression, even when a is declared as unsigned. It seems that any kind of
arithmetic results in a signed value. Hence the cast. */

#if PCRE2_CODE_UNIT_WIDTH == 8
#define IMM2_SIZE 2
#define GET2(a,n) (unsigned int)(((a)[n] << 8) | (a)[(n)+1])
#define PUT2(a,n,d) a[n] = (d) >> 8, a[(n)+1] = (d) & 255

#else  /* Code units are 16 or 32 bits */
#define IMM2_SIZE 1
#define GET2(a,n) a[n]
#define PUT2(a,n,d) a[n] = d
#endif

/* Other macros that are different for 8-bit mode. The MAX_255 macro checks
whether its argument, which is assumed to be one code unit, is less than 256.
The CHMAX_255 macro does not assume one code unit. The maximum length of a MARK
name must fit in one code unit; currently it is set to 255 or 65535. The
TABLE_GET macro is used to access elements of tables containing exactly 256
items. Its argument is a code unit. When code points can be greater than 255, a
check is needed before accessing these tables. */

#if PCRE2_CODE_UNIT_WIDTH == 8
#define MAX_255(c) TRUE
#define MAX_MARK ((1u << 8) - 1)
#define TABLE_GET(c, table, default) ((table)[c])
#ifdef SUPPORT_UNICODE
#define SUPPORT_WIDE_CHARS
#define CHMAX_255(c) ((c) <= 255u)
#else
#define CHMAX_255(c) TRUE
#endif  /* SUPPORT_UNICODE */

#else  /* Code units are 16 or 32 bits */
#define CHMAX_255(c) ((c) <= 255u)
#define MAX_255(c) ((c) <= 255u)
#define MAX_MARK ((1u << 16) - 1)
#define SUPPORT_WIDE_CHARS
#define TABLE_GET(c, table, default) (MAX_255(c)? ((table)[c]):(default))
#endif


/* ----------------- Character-handling macros ----------------- */

/* There is a proposed future special "UTF-21" mode, in which only the lowest
21 bits of a 32-bit character are interpreted as UTF, with the remaining 11
high-order bits available to the application for other uses. In preparation for
the future implementation of this mode, there are macros that load a data item
and, if in this special mode, mask it to 21 bits. These macros all have names
starting with UCHAR21. In all other modes, including the normal 32-bit
library, the macros all have the same simple definitions. When the new mode is
implemented, it is expected that these definitions will be varied appropriately
using #ifdef when compiling the library that supports the special mode. */

#define UCHAR21(eptr)        (*(eptr))
#define UCHAR21TEST(eptr)    (*(eptr))
#define UCHAR21INC(eptr)     (*(eptr)++)
#define UCHAR21INCTEST(eptr) (*(eptr)++)

/* When UTF encoding is being used, a character is no longer just a single
byte in 8-bit mode or a single short in 16-bit mode. The macros for character
handling generate simple sequences when used in the basic mode, and more
complicated ones for UTF characters. GETCHARLENTEST and other macros are not
used when UTF is not supported. To make sure they can never even appear when
UTF support is omitted, we don't even define them. */

#ifndef SUPPORT_UNICODE

/* #define MAX_UTF_SINGLE_CU */
/* #define HAS_EXTRALEN(c) */
/* #define GET_EXTRALEN(c) */
/* #define NOT_FIRSTCU(c) */
#define GETCHAR(c, eptr) c = *eptr;
#define GETCHARTEST(c, eptr) c = *eptr;
#define GETCHARINC(c, eptr) c = *eptr++;
#define GETCHARINCTEST(c, eptr) c = *eptr++;
#define GETCHARLEN(c, eptr, len) c = *eptr;
#define PUTCHAR(c, p) (*p = c, 1)
/* #define GETCHARLENTEST(c, eptr, len) */
/* #define BACKCHAR(eptr) */
/* #define FORWARDCHAR(eptr) */
/* #define FORWARCCHARTEST(eptr,end) */
/* #define ACROSSCHAR(condition, eptr, action) */

#else   /* SUPPORT_UNICODE */

/* ------------------- 8-bit support  ------------------ */

#if PCRE2_CODE_UNIT_WIDTH == 8
#define MAYBE_UTF_MULTI          /* UTF chars may use multiple code units */

/* The largest UTF code point that can be encoded as a single code unit. */

#define MAX_UTF_SINGLE_CU 127

/* Tests whether the code point needs extra characters to decode. */

#define HAS_EXTRALEN(c) HASUTF8EXTRALEN(c)

/* Returns with the additional number of characters if IS_MULTICHAR(c) is TRUE.
Otherwise it has an undefined behaviour. */

#define GET_EXTRALEN(c) (PRIV(utf8_table4)[(c) & 0x3fu])

/* Returns TRUE, if the given value is not the first code unit of a UTF
sequence. */

#define NOT_FIRSTCU(c) (((c) & 0xc0u) == 0x80u)

/* Get the next UTF-8 character, not advancing the pointer. This is called when
we know we are in UTF-8 mode. */

#define GETCHAR(c, eptr) \
  c = *eptr; \
  if (c >= 0xc0u) GETUTF8(c, eptr);

/* Get the next UTF-8 character, testing for UTF-8 mode, and not advancing the
pointer. */

#define GETCHARTEST(c, eptr) \
  c = *eptr; \
  if (utf && c >= 0xc0u) GETUTF8(c, eptr);

/* Get the next UTF-8 character, advancing the pointer. This is called when we
know we are in UTF-8 mode. */

#define GETCHARINC(c, eptr) \
  c = *eptr++; \
  if (c >= 0xc0u) GETUTF8INC(c, eptr);

/* Get the next character, testing for UTF-8 mode, and advancing the pointer.
This is called when we don't know if we are in UTF-8 mode. */

#define GETCHARINCTEST(c, eptr) \
  c = *eptr++; \
  if (utf && c >= 0xc0u) GETUTF8INC(c, eptr);

/* Get the next UTF-8 character, not advancing the pointer, incrementing length
if there are extra bytes. This is called when we know we are in UTF-8 mode. */

#define GETCHARLEN(c, eptr, len) \
  c = *eptr; \
  if (c >= 0xc0u) GETUTF8LEN(c, eptr, len);

/* Get the next UTF-8 character, testing for UTF-8 mode, not advancing the
pointer, incrementing length if there are extra bytes. This is called when we
do not know if we are in UTF-8 mode. */

#define GETCHARLENTEST(c, eptr, len) \
  c = *eptr; \
  if (utf && c >= 0xc0u) GETUTF8LEN(c, eptr, len);

/* If the pointer is not at the start of a character, move it back until
it is. This is called only in UTF-8 mode - we don't put a test within the macro
because almost all calls are already within a block of UTF-8 only code. */

#define BACKCHAR(eptr) while((*eptr & 0xc0u) == 0x80u) eptr--

/* Same as above, just in the other direction. */
#define FORWARDCHAR(eptr) while((*eptr & 0xc0u) == 0x80u) eptr++
#define FORWARDCHARTEST(eptr,end) while(eptr < end && (*eptr & 0xc0u) == 0x80u) eptr++

/* Same as above, but it allows a fully customizable form. */
#define ACROSSCHAR(condition, eptr, action) \
  while((condition) && ((*eptr) & 0xc0u) == 0x80u) action

/* Deposit a character into memory, returning the number of code units. */

#define PUTCHAR(c, p) ((utf && c > MAX_UTF_SINGLE_CU)? \
  PRIV(ord2utf)(c,p) : (*p = c, 1))


/* ------------------- 16-bit support  ------------------ */

#elif PCRE2_CODE_UNIT_WIDTH == 16
#define MAYBE_UTF_MULTI          /* UTF chars may use multiple code units */

/* The largest UTF code point that can be encoded as a single code unit. */

#define MAX_UTF_SINGLE_CU 65535

/* Tests whether the code point needs extra characters to decode. */

#define HAS_EXTRALEN(c) (((c) & 0xfc00u) == 0xd800u)

/* Returns with the additional number of characters if IS_MULTICHAR(c) is TRUE.
Otherwise it has an undefined behaviour. */

#define GET_EXTRALEN(c) 1

/* Returns TRUE, if the given value is not the first code unit of a UTF
sequence. */

#define NOT_FIRSTCU(c) (((c) & 0xfc00u) == 0xdc00u)

/* Base macro to pick up the low surrogate of a UTF-16 character, not
advancing the pointer. */

#define GETUTF16(c, eptr) \
   { c = (((c & 0x3ffu) << 10) | (eptr[1] & 0x3ffu)) + 0x10000u; }

/* Get the next UTF-16 character, not advancing the pointer. This is called when
we know we are in UTF-16 mode. */

#define GETCHAR(c, eptr) \
  c = *eptr; \
  if ((c & 0xfc00u) == 0xd800u) GETUTF16(c, eptr);

/* Get the next UTF-16 character, testing for UTF-16 mode, and not advancing the
pointer. */

#define GETCHARTEST(c, eptr) \
  c = *eptr; \
  if (utf && (c & 0xfc00u) == 0xd800u) GETUTF16(c, eptr);

/* Base macro to pick up the low surrogate of a UTF-16 character, advancing
the pointer. */

#define GETUTF16INC(c, eptr) \
   { c = (((c & 0x3ffu) << 10) | (*eptr++ & 0x3ffu)) + 0x10000u; }

/* Get the next UTF-16 character, advancing the pointer. This is called when we
know we are in UTF-16 mode. */

#define GETCHARINC(c, eptr) \
  c = *eptr++; \
  if ((c & 0xfc00u) == 0xd800u) GETUTF16INC(c, eptr);

/* Get the next character, testing for UTF-16 mode, and advancing the pointer.
This is called when we don't know if we are in UTF-16 mode. */

#define GETCHARINCTEST(c, eptr) \
  c = *eptr++; \
  if (utf && (c & 0xfc00u) == 0xd800u) GETUTF16INC(c, eptr);

/* Base macro to pick up the low surrogate of a UTF-16 character, not
advancing the pointer, incrementing the length. */

#define GETUTF16LEN(c, eptr, len) \
   { c = (((c & 0x3ffu) << 10) | (eptr[1] & 0x3ffu)) + 0x10000u; len++; }

/* Get the next UTF-16 character, not advancing the pointer, incrementing
length if there is a low surrogate. This is called when we know we are in
UTF-16 mode. */

#define GETCHARLEN(c, eptr, len) \
  c = *eptr; \
  if ((c & 0xfc00u) == 0xd800u) GETUTF16LEN(c, eptr, len);

/* Get the next UTF-816character, testing for UTF-16 mode, not advancing the
pointer, incrementing length if there is a low surrogate. This is called when
we do not know if we are in UTF-16 mode. */

#define GETCHARLENTEST(c, eptr, len) \
  c = *eptr; \
  if (utf && (c & 0xfc00u) == 0xd800u) GETUTF16LEN(c, eptr, len);

/* If the pointer is not at the start of a character, move it back until
it is. This is called only in UTF-16 mode - we don't put a test within the
macro because almost all calls are already within a block of UTF-16 only
code. */

#define BACKCHAR(eptr) if ((*eptr & 0xfc00u) == 0xdc00u) eptr--

/* Same as above, just in the other direction. */
#define FORWARDCHAR(eptr) if ((*eptr & 0xfc00u) == 0xdc00u) eptr++
#define FORWARDCHARTEST(eptr,end) if (eptr < end && (*eptr & 0xfc00u) == 0xdc00u) eptr++

/* Same as above, but it allows a fully customizable form. */
#define ACROSSCHAR(condition, eptr, action) \
  if ((condition) && ((*eptr) & 0xfc00u) == 0xdc00u) action

/* Deposit a character into memory, returning the number of code units. */

#define PUTCHAR(c, p) ((utf && c > MAX_UTF_SINGLE_CU)? \
  PRIV(ord2utf)(c,p) : (*p = c, 1))


/* ------------------- 32-bit support  ------------------ */

#else

/* These are trivial for the 32-bit library, since all UTF-32 characters fit
into one PCRE2_UCHAR unit. */

#define MAX_UTF_SINGLE_CU (0x10ffffu)
#define HAS_EXTRALEN(c) (0)
#define GET_EXTRALEN(c) (0)
#define NOT_FIRSTCU(c) (0)

/* Get the next UTF-32 character, not advancing the pointer. This is called when
we know we are in UTF-32 mode. */

#define GETCHAR(c, eptr) \
  c = *(eptr);

/* Get the next UTF-32 character, testing for UTF-32 mode, and not advancing the
pointer. */

#define GETCHARTEST(c, eptr) \
  c = *(eptr);

/* Get the next UTF-32 character, advancing the pointer. This is called when we
know we are in UTF-32 mode. */

#define GETCHARINC(c, eptr) \
  c = *((eptr)++);

/* Get the next character, testing for UTF-32 mode, and advancing the pointer.
This is called when we don't know if we are in UTF-32 mode. */

#define GETCHARINCTEST(c, eptr) \
  c = *((eptr)++);

/* Get the next UTF-32 character, not advancing the pointer, not incrementing
length (since all UTF-32 is of length 1). This is called when we know we are in
UTF-32 mode. */

#define GETCHARLEN(c, eptr, len) \
  GETCHAR(c, eptr)

/* Get the next UTF-32character, testing for UTF-32 mode, not advancing the
pointer, not incrementing the length (since all UTF-32 is of length 1).
This is called when we do not know if we are in UTF-32 mode. */

#define GETCHARLENTEST(c, eptr, len) \
  GETCHARTEST(c, eptr)

/* If the pointer is not at the start of a character, move it back until
it is. This is called only in UTF-32 mode - we don't put a test within the
macro because almost all calls are already within a block of UTF-32 only
code.

These are all no-ops since all UTF-32 characters fit into one PCRE2_UCHAR. */

#define BACKCHAR(eptr) do { } while (0)

/* Same as above, just in the other direction. */

#define FORWARDCHAR(eptr) do { } while (0)
#define FORWARDCHARTEST(eptr,end) do { } while (0)

/* Same as above, but it allows a fully customizable form. */

#define ACROSSCHAR(condition, eptr, action) do { } while (0)

/* Deposit a character into memory, returning the number of code units. */

#define PUTCHAR(c, p) (*p = c, 1)

#endif  /* UTF-32 character handling */
#endif  /* SUPPORT_UNICODE */


/* Mode-dependent macros that have the same definition in all modes. */

#define CU2BYTES(x)     ((x)*((PCRE2_CODE_UNIT_WIDTH/8)))
#define BYTES2CU(x)     ((x)/((PCRE2_CODE_UNIT_WIDTH/8)))
#define PUTINC(a,n,d)   PUT(a,n,d), a += LINK_SIZE
#define PUT2INC(a,n,d)  PUT2(a,n,d), a += IMM2_SIZE


/* ----------------------- HIDDEN STRUCTURES ----------------------------- */

/* NOTE: All these structures *must* start with a pcre2_memctl structure. The
code that uses them is simpler because it assumes this. */

/* The real general context structure. At present it holds only data for custom
memory control. */

typedef struct pcre2_real_general_context {
  pcre2_memctl memctl;
} pcre2_real_general_context;

/* The real compile context structure */

typedef struct pcre2_real_compile_context {
  pcre2_memctl memctl;
  int (*stack_guard)(uint32_t, void *);
  void *stack_guard_data;
  const uint8_t *tables;
  PCRE2_SIZE max_pattern_length;
  PCRE2_SIZE max_pattern_compiled_length;
  uint16_t bsr_convention;
  uint16_t newline_convention;
  uint32_t parens_nest_limit;
  uint32_t extra_options;
  uint32_t max_varlookbehind;
} pcre2_real_compile_context;

/* The real match context structure. */

typedef struct pcre2_real_match_context {
  pcre2_memctl memctl;
#ifdef SUPPORT_JIT
  pcre2_jit_callback jit_callback;
  void *jit_callback_data;
#endif
  int    (*callout)(pcre2_callout_block *, void *);
  void    *callout_data;
  int    (*substitute_callout)(pcre2_substitute_callout_block *, void *);
  void    *substitute_callout_data;
  PCRE2_SIZE offset_limit;
  uint32_t heap_limit;
  uint32_t match_limit;
  uint32_t depth_limit;
} pcre2_real_match_context;

/* The real convert context structure. */

typedef struct pcre2_real_convert_context {
  pcre2_memctl memctl;
  uint32_t glob_separator;
  uint32_t glob_escape;
} pcre2_real_convert_context;

/* The real compiled code structure. The type for the blocksize field is
defined specially because it is required in pcre2_serialize_decode() when
copying the size from possibly unaligned memory into a variable of the same
type. Use a macro rather than a typedef to avoid compiler warnings when this
file is included multiple times by pcre2test. LOOKBEHIND_MAX specifies the
largest lookbehind that is supported. (OP_REVERSE and OP_VREVERSE in a pattern
have 16-bit arguments in 8-bit and 16-bit modes, so we need no more than a
16-bit field here.) */

#undef  CODE_BLOCKSIZE_TYPE
#define CODE_BLOCKSIZE_TYPE PCRE2_SIZE

#undef  LOOKBEHIND_MAX
#define LOOKBEHIND_MAX UINT16_MAX

typedef struct pcre2_real_code {
  pcre2_memctl memctl;            /* Memory control fields */
  const uint8_t *tables;          /* The character tables */
  void    *executable_jit;        /* Pointer to JIT code */
  uint8_t  start_bitmap[32];      /* Bitmap for starting code unit < 256 */
  CODE_BLOCKSIZE_TYPE blocksize;  /* Total (bytes) that was malloc-ed */
  uint32_t magic_number;          /* Paranoid and endianness check */
  uint32_t compile_options;       /* Options passed to pcre2_compile() */
  uint32_t overall_options;       /* Options after processing the pattern */
  uint32_t extra_options;         /* Taken from compile_context */
  uint32_t flags;                 /* Various state flags */
  uint32_t limit_heap;            /* Limit set in the pattern */
  uint32_t limit_match;           /* Limit set in the pattern */
  uint32_t limit_depth;           /* Limit set in the pattern */
  uint32_t first_codeunit;        /* Starting code unit */
  uint32_t last_codeunit;         /* This codeunit must be seen */
  uint16_t bsr_convention;        /* What \R matches */
  uint16_t newline_convention;    /* What is a newline? */
  uint16_t max_lookbehind;        /* Longest lookbehind (characters) */
  uint16_t minlength;             /* Minimum length of match */
  uint16_t top_bracket;           /* Highest numbered group */
  uint16_t top_backref;           /* Highest numbered back reference */
  uint16_t name_entry_size;       /* Size (code units) of table entries */
  uint16_t name_count;            /* Number of name entries in the table */
} pcre2_real_code;

/* The real match data structure. Define ovector as large as it can ever
actually be so that array bound checkers don't grumble. Memory for this
structure is obtained by calling pcre2_match_data_create(), which sets the size
as the offset of ovector plus a pair of elements for each capturable string, so
the size varies from call to call. As the maximum number of capturing
subpatterns is 65535 we must allow for 65536 strings to include the overall
match. (See also the heapframe structure below.) */

struct heapframe;  /* Forward reference */

typedef struct pcre2_real_match_data {
  pcre2_memctl     memctl;           /* Memory control fields */
  const pcre2_real_code *code;       /* The pattern used for the match */
  PCRE2_SPTR       subject;          /* The subject that was matched */
  PCRE2_SPTR       mark;             /* Pointer to last mark */
  struct heapframe *heapframes;      /* Backtracking frames heap memory */
  PCRE2_SIZE       heapframes_size;  /* Malloc-ed size */
  PCRE2_SIZE       subject_length;   /* Subject length */
  PCRE2_SIZE       leftchar;         /* Offset to leftmost code unit */
  PCRE2_SIZE       rightchar;        /* Offset to rightmost code unit */
  PCRE2_SIZE       startchar;        /* Offset to starting code unit */
  uint8_t          matchedby;        /* Type of match (normal, JIT, DFA) */
  uint8_t          flags;            /* Various flags */
  uint16_t         oveccount;        /* Number of pairs */
  int              rc;               /* The return code from the match */
  PCRE2_SIZE       ovector[131072];  /* Must be last in the structure */
} pcre2_real_match_data;


/* ----------------------- PRIVATE STRUCTURES ----------------------------- */

/* These structures are not needed for pcre2test. */

#ifndef PCRE2_PCRE2TEST

/* Structures for checking for mutual function recursion when scanning compiled
or parsed code. */

typedef struct recurse_check {
  struct recurse_check *prev;
  PCRE2_SPTR group;
} recurse_check;

typedef struct parsed_recurse_check {
  struct parsed_recurse_check *prev;
  uint32_t *groupptr;
} parsed_recurse_check;

/* Structure for building a cache when filling in pattern recursion offsets. */

typedef struct recurse_cache {
  PCRE2_SPTR group;
  int groupnumber;
} recurse_cache;

/* Structure for maintaining a chain of pointers to the currently incomplete
branches, for testing for left recursion while compiling. */

typedef struct branch_chain {
  struct branch_chain *outer;
  PCRE2_UCHAR *current_branch;
} branch_chain;

/* Structure for building a list of named groups during the first pass of
compiling. */

typedef struct named_group {
  PCRE2_SPTR   name;          /* Points to the name in the pattern */
  uint32_t     number;        /* Group number */
  uint16_t     length;        /* Length of the name */
  uint16_t     isdup;         /* TRUE if a duplicate */
} named_group;

/* Structure for passing "static" information around between the functions
doing the compiling, so that they are thread-safe. */

typedef struct compile_block {
  pcre2_real_compile_context *cx;  /* Points to the compile context */
  const uint8_t *lcc;              /* Points to lower casing table */
  const uint8_t *fcc;              /* Points to case-flipping table */
  const uint8_t *cbits;            /* Points to character type table */
  const uint8_t *ctypes;           /* Points to table of type maps */
  PCRE2_SPTR start_workspace;      /* The start of working space */
  PCRE2_SPTR start_code;           /* The start of the compiled code */
  PCRE2_SPTR start_pattern;        /* The start of the pattern */
  PCRE2_SPTR end_pattern;          /* The end of the pattern */
  PCRE2_UCHAR *name_table;         /* The name/number table */
  PCRE2_SIZE workspace_size;       /* Size of workspace */
  PCRE2_SIZE small_ref_offset[10]; /* Offsets for \1 to \9 */
  PCRE2_SIZE erroroffset;          /* Offset of error in pattern */
  uint16_t names_found;            /* Number of entries so far */
  uint16_t name_entry_size;        /* Size of each entry */
  uint16_t parens_depth;           /* Depth of nested parentheses */
  uint16_t assert_depth;           /* Depth of nested assertions */
  named_group *named_groups;       /* Points to vector in pre-compile */
  uint32_t named_group_list_size;  /* Number of entries in the list */
  uint32_t external_options;       /* External (initial) options */
  uint32_t external_flags;         /* External flag bits to be set */
  uint32_t bracount;               /* Count of capturing parentheses */
  uint32_t lastcapture;            /* Last capture encountered */
  uint32_t *parsed_pattern;        /* Parsed pattern buffer */
  uint32_t *parsed_pattern_end;    /* Parsed pattern should not get here */
  uint32_t *groupinfo;             /* Group info vector */
  uint32_t top_backref;            /* Maximum back reference */
  uint32_t backref_map;            /* Bitmap of low back refs */
  uint32_t nltype;                 /* Newline type */
  uint32_t nllen;                  /* Newline string length */
  uint32_t class_range_start;      /* Overall class range start */
  uint32_t class_range_end;        /* Overall class range end */
  PCRE2_UCHAR nl[4];               /* Newline string when fixed length */
  uint32_t req_varyopt;            /* "After variable item" flag for reqbyte */
  uint32_t max_varlookbehind;      /* Limit for variable lookbehinds */
  int  max_lookbehind;             /* Maximum lookbehind encountered (characters) */
  BOOL had_accept;                 /* (*ACCEPT) encountered */
  BOOL had_pruneorskip;            /* (*PRUNE) or (*SKIP) encountered */
  BOOL had_recurse;                /* Had a pattern recursion or subroutine call */
  BOOL dupnames;                   /* Duplicate names exist */
} compile_block;

/* Structure for keeping the properties of the in-memory stack used
by the JIT matcher. */

typedef struct pcre2_real_jit_stack {
  pcre2_memctl memctl;
  void* stack;
} pcre2_real_jit_stack;

/* Structure for items in a linked list that represents an explicit recursive
call within the pattern when running pcre2_dfa_match(). */

typedef struct dfa_recursion_info {
  struct dfa_recursion_info *prevrec;
  PCRE2_SPTR subject_position;
  PCRE2_SPTR last_used_ptr;
  uint32_t group_num;
} dfa_recursion_info;

/* Structure for "stack" frames that are used for remembering backtracking
positions during matching. As these are used in a vector, with the ovector item
being extended, the size of the structure must be a multiple of PCRE2_SIZE. The
only way to check this at compile time is to force an error by generating an
array with a negative size. By putting this in a typedef (which is never used),
we don't generate any code when all is well. */

typedef struct heapframe {

  /* The first set of fields are variables that have to be preserved over calls
  to RRMATCH(), but which do not need to be copied to new frames. */

  PCRE2_SPTR ecode;          /* The current position in the pattern */
  PCRE2_SPTR temp_sptr[2];   /* Used for short-term PCRE_SPTR values */
  PCRE2_SIZE length;         /* Used for character, string, or code lengths */
  PCRE2_SIZE back_frame;     /* Amount to subtract on RRETURN */
  PCRE2_SIZE temp_size;      /* Used for short-term PCRE2_SIZE values */
  uint32_t rdepth;           /* Function "recursion" depth within pcre2_match() */
  uint32_t group_frame_type; /* Type information for group frames */
  uint32_t temp_32[4];       /* Used for short-term 32-bit or BOOL values */
  uint8_t return_id;         /* Where to go on in internal "return" */
  uint8_t op;                /* Processing opcode */

  /* At this point, the structure is 16-bit aligned. On most architectures
  the alignment requirement for a pointer will ensure that the eptr field below
  is 32-bit or 64-bit aligned. However, on m68k it is fine to have a pointer
  that is 16-bit aligned. We must therefore ensure that what comes between here
  and eptr is an odd multiple of 16 bits so as to get back into 32-bit
  alignment. This happens naturally when PCRE2_UCHAR is 8 bits wide, but needs
  fudges in the other cases. In the 32-bit case the padding comes first so that
  the occu field itself is 32-bit aligned. Without the padding, this structure
  is no longer a multiple of PCRE2_SIZE on m68k, and the check below fails. */

#if PCRE2_CODE_UNIT_WIDTH == 8
  PCRE2_UCHAR occu[6];       /* Used for other case code units */
#elif PCRE2_CODE_UNIT_WIDTH == 16
  PCRE2_UCHAR occu[2];       /* Used for other case code units */
  uint8_t unused[2];         /* Ensure 32-bit alignment (see above) */
#else
  uint8_t unused[2];         /* Ensure 32-bit alignment (see above) */
  PCRE2_UCHAR occu[1];       /* Used for other case code units */
#endif

  /* The rest have to be copied from the previous frame whenever a new frame
  becomes current. The final field is specified as a large vector so that
  runtime array bound checks don't catch references to it. However, for any
  specific call to pcre2_match() the memory allocated for each frame structure
  allows for exactly the right size ovector for the number of capturing
  parentheses. (See also the comment for pcre2_real_match_data above.) */

  PCRE2_SPTR eptr;              /* MUST BE FIRST */
  PCRE2_SPTR start_match;       /* Can be adjusted by \K */
  PCRE2_SPTR mark;              /* Most recent mark on the success path */
  PCRE2_SPTR recurse_last_used; /* Last character used at time of pattern recursion */
  uint32_t current_recurse;     /* Group number of current (deepest) pattern recursion */
  uint32_t capture_last;        /* Most recent capture */
  PCRE2_SIZE last_group_offset; /* Saved offset to most recent group frame */
  PCRE2_SIZE offset_top;        /* Offset after highest capture */
  PCRE2_SIZE ovector[131072];   /* Must be last in the structure */
} heapframe;

/* This typedef is a check that the size of the heapframe structure is a
multiple of PCRE2_SIZE. See various comments above. */

typedef char check_heapframe_size[
  ((sizeof(heapframe) % sizeof(PCRE2_SIZE)) == 0)? (+1):(-1)];

/* Structure for computing the alignment of heapframe. */

typedef struct heapframe_align {
  char unalign;    /* Completely unalign the current offset */
  heapframe frame; /* Offset is its alignment */
} heapframe_align;

/* This define is the minimum alignment required for a heapframe, in bytes. */

#define HEAPFRAME_ALIGNMENT offsetof(heapframe_align, frame)

/* Structure for passing "static" information around between the functions
doing traditional NFA matching (pcre2_match() and friends). */

typedef struct match_block {
  pcre2_memctl memctl;            /* For general use */
  uint32_t heap_limit;            /* As it says */
  uint32_t match_limit;           /* As it says */
  uint32_t match_limit_depth;     /* As it says */
  uint32_t match_call_count;      /* Number of times a new frame is created */
  BOOL hitend;                    /* Hit the end of the subject at some point */
  BOOL hasthen;                   /* Pattern contains (*THEN) */
  BOOL allowemptypartial;         /* Allow empty hard partial */
  const uint8_t *lcc;             /* Points to lower casing table */
  const uint8_t *fcc;             /* Points to case-flipping table */
  const uint8_t *ctypes;          /* Points to table of type maps */
  PCRE2_SIZE start_offset;        /* The start offset value */
  PCRE2_SIZE end_offset_top;      /* Highwater mark at end of match */
  uint16_t partial;               /* PARTIAL options */
  uint16_t bsr_convention;        /* \R interpretation */
  uint16_t name_count;            /* Number of names in name table */
  uint16_t name_entry_size;       /* Size of entry in names table */
  PCRE2_SPTR name_table;          /* Table of group names */
  PCRE2_SPTR start_code;          /* For use in pattern recursion */
  PCRE2_SPTR start_subject;       /* Start of the subject string */
  PCRE2_SPTR check_subject;       /* Where UTF-checked from */
  PCRE2_SPTR end_subject;         /* Usable end of the subject string */
  PCRE2_SPTR true_end_subject;    /* Actual end of the subject string */
  PCRE2_SPTR end_match_ptr;       /* Subject position at end match */
  PCRE2_SPTR start_used_ptr;      /* Earliest consulted character */
  PCRE2_SPTR last_used_ptr;       /* Latest consulted character */
  PCRE2_SPTR mark;                /* Mark pointer to pass back on success */
  PCRE2_SPTR nomatch_mark;        /* Mark pointer to pass back on failure */
  PCRE2_SPTR verb_ecode_ptr;      /* For passing back info */
  PCRE2_SPTR verb_skip_ptr;       /* For passing back a (*SKIP) name */
  uint32_t verb_current_recurse;  /* Current recursion group when (*VERB) happens */
  uint32_t moptions;              /* Match options */
  uint32_t poptions;              /* Pattern options */
  uint32_t skip_arg_count;        /* For counting SKIP_ARGs */
  uint32_t ignore_skip_arg;       /* For re-run when SKIP arg name not found */
  uint32_t nltype;                /* Newline type */
  uint32_t nllen;                 /* Newline string length */
  PCRE2_UCHAR nl[4];              /* Newline string when fixed */
  pcre2_callout_block *cb;        /* Points to a callout block */
  void  *callout_data;            /* To pass back to callouts */
  int (*callout)(pcre2_callout_block *,void *);  /* Callout function or NULL */
} match_block;

/* A similar structure is used for the same purpose by the DFA matching
functions. */

typedef struct dfa_match_block {
  pcre2_memctl memctl;            /* For general use */
  PCRE2_SPTR start_code;          /* Start of the compiled pattern */
  PCRE2_SPTR start_subject ;      /* Start of the subject string */
  PCRE2_SPTR end_subject;         /* End of subject string */
  PCRE2_SPTR start_used_ptr;      /* Earliest consulted character */
  PCRE2_SPTR last_used_ptr;       /* Latest consulted character */
  const uint8_t *tables;          /* Character tables */
  PCRE2_SIZE start_offset;        /* The start offset value */
  uint32_t heap_limit;            /* As it says */
  PCRE2_SIZE heap_used;           /* As it says */
  uint32_t match_limit;           /* As it says */
  uint32_t match_limit_depth;     /* As it says */
  uint32_t match_call_count;      /* Number of calls of internal function */
  uint32_t moptions;              /* Match options */
  uint32_t poptions;              /* Pattern options */
  uint32_t nltype;                /* Newline type */
  uint32_t nllen;                 /* Newline string length */
  BOOL allowemptypartial;         /* Allow empty hard partial */
  PCRE2_UCHAR nl[4];              /* Newline string when fixed */
  uint16_t bsr_convention;        /* \R interpretation */
  pcre2_callout_block *cb;        /* Points to a callout block */
  void *callout_data;             /* To pass back to callouts */
  int (*callout)(pcre2_callout_block *,void *);  /* Callout function or NULL */
  dfa_recursion_info *recursive;  /* Linked list of pattern recursion data */
} dfa_match_block;

#endif  /* PCRE2_PCRE2TEST */

/* End of pcre2_intmodedep.h */
ext/pcre/pcre2lib/pcre2.h000064400000136447151730541600011204 0ustar00/*************************************************
*       Perl-Compatible Regular Expressions      *
*************************************************/

/* This is the public header file for the PCRE library, second API, to be
#included by applications that call PCRE2 functions.

           Copyright (c) 2016-2024 University of Cambridge

-----------------------------------------------------------------------------
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:

    * Redistributions of source code must retain the above copyright notice,
      this list of conditions and the following disclaimer.

    * Redistributions in binary form must reproduce the above copyright
      notice, this list of conditions and the following disclaimer in the
      documentation and/or other materials provided with the distribution.

    * Neither the name of the University of Cambridge nor the names of its
      contributors may be used to endorse or promote products derived from
      this software without specific prior written permission.

THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
POSSIBILITY OF SUCH DAMAGE.
-----------------------------------------------------------------------------
*/

#ifndef PCRE2_H_IDEMPOTENT_GUARD
#define PCRE2_H_IDEMPOTENT_GUARD

/* The current PCRE version information. */

#define PCRE2_MAJOR           10
#define PCRE2_MINOR           44
#define PCRE2_PRERELEASE      
#define PCRE2_DATE            2024-06-07

/* When an application links to a PCRE DLL in Windows, the symbols that are
imported have to be identified as such. When building PCRE2, the appropriate
export setting is defined in pcre2_internal.h, which includes this file. So we
don't change existing definitions of PCRE2_EXP_DECL. */

#if defined(_WIN32) && !defined(PCRE2_STATIC)
#  ifndef PCRE2_EXP_DECL
#    define PCRE2_EXP_DECL  extern __declspec(dllimport)
#  endif
#endif

/* By default, we use the standard "extern" declarations. */

#ifndef PCRE2_EXP_DECL
#  ifdef __cplusplus
#    define PCRE2_EXP_DECL  extern "C"
#  else
#    define PCRE2_EXP_DECL  extern
#  endif
#endif

/* When compiling with the MSVC compiler, it is sometimes necessary to include
a "calling convention" before exported function names. (This is secondhand
information; I know nothing about MSVC myself). For example, something like

  void __cdecl function(....)

might be needed. In order so make this easy, all the exported functions have
PCRE2_CALL_CONVENTION just before their names. It is rarely needed; if not
set, we ensure here that it has no effect. */

#ifndef PCRE2_CALL_CONVENTION
#define PCRE2_CALL_CONVENTION
#endif

/* Have to include limits.h, stdlib.h, and inttypes.h to ensure that size_t and
uint8_t, UCHAR_MAX, etc are defined. Some systems that do have inttypes.h do
not have stdint.h, which is why we use inttypes.h, which according to the C
standard is a superset of stdint.h. If inttypes.h is not available the build
will break and the relevant values must be provided by some other means. */

#include <limits.h>
#include <stdlib.h>
#include <inttypes.h>

/* Allow for C++ users compiling this directly. */

#ifdef __cplusplus
extern "C" {
#endif

/* The following option bits can be passed to pcre2_compile(), pcre2_match(),
or pcre2_dfa_match(). PCRE2_NO_UTF_CHECK affects only the function to which it
is passed. Put these bits at the most significant end of the options word so
others can be added next to them */

#define PCRE2_ANCHORED            0x80000000u
#define PCRE2_NO_UTF_CHECK        0x40000000u
#define PCRE2_ENDANCHORED         0x20000000u

/* The following option bits can be passed only to pcre2_compile(). However,
they may affect compilation, JIT compilation, and/or interpretive execution.
The following tags indicate which:

C   alters what is compiled by pcre2_compile()
J   alters what is compiled by pcre2_jit_compile()
M   is inspected during pcre2_match() execution
D   is inspected during pcre2_dfa_match() execution
*/

#define PCRE2_ALLOW_EMPTY_CLASS   0x00000001u  /* C       */
#define PCRE2_ALT_BSUX            0x00000002u  /* C       */
#define PCRE2_AUTO_CALLOUT        0x00000004u  /* C       */
#define PCRE2_CASELESS            0x00000008u  /* C       */
#define PCRE2_DOLLAR_ENDONLY      0x00000010u  /*   J M D */
#define PCRE2_DOTALL              0x00000020u  /* C       */
#define PCRE2_DUPNAMES            0x00000040u  /* C       */
#define PCRE2_EXTENDED            0x00000080u  /* C       */
#define PCRE2_FIRSTLINE           0x00000100u  /*   J M D */
#define PCRE2_MATCH_UNSET_BACKREF 0x00000200u  /* C J M   */
#define PCRE2_MULTILINE           0x00000400u  /* C       */
#define PCRE2_NEVER_UCP           0x00000800u  /* C       */
#define PCRE2_NEVER_UTF           0x00001000u  /* C       */
#define PCRE2_NO_AUTO_CAPTURE     0x00002000u  /* C       */
#define PCRE2_NO_AUTO_POSSESS     0x00004000u  /* C       */
#define PCRE2_NO_DOTSTAR_ANCHOR   0x00008000u  /* C       */
#define PCRE2_NO_START_OPTIMIZE   0x00010000u  /*   J M D */
#define PCRE2_UCP                 0x00020000u  /* C J M D */
#define PCRE2_UNGREEDY            0x00040000u  /* C       */
#define PCRE2_UTF                 0x00080000u  /* C J M D */
#define PCRE2_NEVER_BACKSLASH_C   0x00100000u  /* C       */
#define PCRE2_ALT_CIRCUMFLEX      0x00200000u  /*   J M D */
#define PCRE2_ALT_VERBNAMES       0x00400000u  /* C       */
#define PCRE2_USE_OFFSET_LIMIT    0x00800000u  /*   J M D */
#define PCRE2_EXTENDED_MORE       0x01000000u  /* C       */
#define PCRE2_LITERAL             0x02000000u  /* C       */
#define PCRE2_MATCH_INVALID_UTF   0x04000000u  /*   J M D */

/* An additional compile options word is available in the compile context. */

#define PCRE2_EXTRA_ALLOW_SURROGATE_ESCAPES  0x00000001u  /* C */
#define PCRE2_EXTRA_BAD_ESCAPE_IS_LITERAL    0x00000002u  /* C */
#define PCRE2_EXTRA_MATCH_WORD               0x00000004u  /* C */
#define PCRE2_EXTRA_MATCH_LINE               0x00000008u  /* C */
#define PCRE2_EXTRA_ESCAPED_CR_IS_LF         0x00000010u  /* C */
#define PCRE2_EXTRA_ALT_BSUX                 0x00000020u  /* C */
#define PCRE2_EXTRA_ALLOW_LOOKAROUND_BSK     0x00000040u  /* C */
#define PCRE2_EXTRA_CASELESS_RESTRICT        0x00000080u  /* C */
#define PCRE2_EXTRA_ASCII_BSD                0x00000100u  /* C */
#define PCRE2_EXTRA_ASCII_BSS                0x00000200u  /* C */
#define PCRE2_EXTRA_ASCII_BSW                0x00000400u  /* C */
#define PCRE2_EXTRA_ASCII_POSIX              0x00000800u  /* C */
#define PCRE2_EXTRA_ASCII_DIGIT              0x00001000u  /* C */

/* These are for pcre2_jit_compile(). */

#define PCRE2_JIT_COMPLETE        0x00000001u  /* For full matching */
#define PCRE2_JIT_PARTIAL_SOFT    0x00000002u
#define PCRE2_JIT_PARTIAL_HARD    0x00000004u
#define PCRE2_JIT_INVALID_UTF     0x00000100u

/* These are for pcre2_match(), pcre2_dfa_match(), pcre2_jit_match(), and
pcre2_substitute(). Some are allowed only for one of the functions, and in
these cases it is noted below. Note that PCRE2_ANCHORED, PCRE2_ENDANCHORED and
PCRE2_NO_UTF_CHECK can also be passed to these functions (though
pcre2_jit_match() ignores the latter since it bypasses all sanity checks). */

#define PCRE2_NOTBOL                      0x00000001u
#define PCRE2_NOTEOL                      0x00000002u
#define PCRE2_NOTEMPTY                    0x00000004u  /* ) These two must be kept */
#define PCRE2_NOTEMPTY_ATSTART            0x00000008u  /* ) adjacent to each other. */
#define PCRE2_PARTIAL_SOFT                0x00000010u
#define PCRE2_PARTIAL_HARD                0x00000020u
#define PCRE2_DFA_RESTART                 0x00000040u  /* pcre2_dfa_match() only */
#define PCRE2_DFA_SHORTEST                0x00000080u  /* pcre2_dfa_match() only */
#define PCRE2_SUBSTITUTE_GLOBAL           0x00000100u  /* pcre2_substitute() only */
#define PCRE2_SUBSTITUTE_EXTENDED         0x00000200u  /* pcre2_substitute() only */
#define PCRE2_SUBSTITUTE_UNSET_EMPTY      0x00000400u  /* pcre2_substitute() only */
#define PCRE2_SUBSTITUTE_UNKNOWN_UNSET    0x00000800u  /* pcre2_substitute() only */
#define PCRE2_SUBSTITUTE_OVERFLOW_LENGTH  0x00001000u  /* pcre2_substitute() only */
#define PCRE2_NO_JIT                      0x00002000u  /* not for pcre2_dfa_match() */
#define PCRE2_COPY_MATCHED_SUBJECT        0x00004000u
#define PCRE2_SUBSTITUTE_LITERAL          0x00008000u  /* pcre2_substitute() only */
#define PCRE2_SUBSTITUTE_MATCHED          0x00010000u  /* pcre2_substitute() only */
#define PCRE2_SUBSTITUTE_REPLACEMENT_ONLY 0x00020000u  /* pcre2_substitute() only */
#define PCRE2_DISABLE_RECURSELOOP_CHECK   0x00040000u  /* not for pcre2_dfa_match() or pcre2_jit_match() */

/* Options for pcre2_pattern_convert(). */

#define PCRE2_CONVERT_UTF                    0x00000001u
#define PCRE2_CONVERT_NO_UTF_CHECK           0x00000002u
#define PCRE2_CONVERT_POSIX_BASIC            0x00000004u
#define PCRE2_CONVERT_POSIX_EXTENDED         0x00000008u
#define PCRE2_CONVERT_GLOB                   0x00000010u
#define PCRE2_CONVERT_GLOB_NO_WILD_SEPARATOR 0x00000030u
#define PCRE2_CONVERT_GLOB_NO_STARSTAR       0x00000050u

/* Newline and \R settings, for use in compile contexts. The newline values
must be kept in step with values set in config.h and both sets must all be
greater than zero. */

#define PCRE2_NEWLINE_CR          1
#define PCRE2_NEWLINE_LF          2
#define PCRE2_NEWLINE_CRLF        3
#define PCRE2_NEWLINE_ANY         4
#define PCRE2_NEWLINE_ANYCRLF     5
#define PCRE2_NEWLINE_NUL         6

#define PCRE2_BSR_UNICODE         1
#define PCRE2_BSR_ANYCRLF         2

/* Error codes for pcre2_compile(). Some of these are also used by
pcre2_pattern_convert(). */

#define PCRE2_ERROR_END_BACKSLASH                  101
#define PCRE2_ERROR_END_BACKSLASH_C                102
#define PCRE2_ERROR_UNKNOWN_ESCAPE                 103
#define PCRE2_ERROR_QUANTIFIER_OUT_OF_ORDER        104
#define PCRE2_ERROR_QUANTIFIER_TOO_BIG             105
#define PCRE2_ERROR_MISSING_SQUARE_BRACKET         106
#define PCRE2_ERROR_ESCAPE_INVALID_IN_CLASS        107
#define PCRE2_ERROR_CLASS_RANGE_ORDER              108
#define PCRE2_ERROR_QUANTIFIER_INVALID             109
#define PCRE2_ERROR_INTERNAL_UNEXPECTED_REPEAT     110
#define PCRE2_ERROR_INVALID_AFTER_PARENS_QUERY     111
#define PCRE2_ERROR_POSIX_CLASS_NOT_IN_CLASS       112
#define PCRE2_ERROR_POSIX_NO_SUPPORT_COLLATING     113
#define PCRE2_ERROR_MISSING_CLOSING_PARENTHESIS    114
#define PCRE2_ERROR_BAD_SUBPATTERN_REFERENCE       115
#define PCRE2_ERROR_NULL_PATTERN                   116
#define PCRE2_ERROR_BAD_OPTIONS                    117
#define PCRE2_ERROR_MISSING_COMMENT_CLOSING        118
#define PCRE2_ERROR_PARENTHESES_NEST_TOO_DEEP      119
#define PCRE2_ERROR_PATTERN_TOO_LARGE              120
#define PCRE2_ERROR_HEAP_FAILED                    121
#define PCRE2_ERROR_UNMATCHED_CLOSING_PARENTHESIS  122
#define PCRE2_ERROR_INTERNAL_CODE_OVERFLOW         123
#define PCRE2_ERROR_MISSING_CONDITION_CLOSING      124
#define PCRE2_ERROR_LOOKBEHIND_NOT_FIXED_LENGTH    125
#define PCRE2_ERROR_ZERO_RELATIVE_REFERENCE        126
#define PCRE2_ERROR_TOO_MANY_CONDITION_BRANCHES    127
#define PCRE2_ERROR_CONDITION_ASSERTION_EXPECTED   128
#define PCRE2_ERROR_BAD_RELATIVE_REFERENCE         129
#define PCRE2_ERROR_UNKNOWN_POSIX_CLASS            130
#define PCRE2_ERROR_INTERNAL_STUDY_ERROR           131
#define PCRE2_ERROR_UNICODE_NOT_SUPPORTED          132
#define PCRE2_ERROR_PARENTHESES_STACK_CHECK        133
#define PCRE2_ERROR_CODE_POINT_TOO_BIG             134
#define PCRE2_ERROR_LOOKBEHIND_TOO_COMPLICATED     135
#define PCRE2_ERROR_LOOKBEHIND_INVALID_BACKSLASH_C 136
#define PCRE2_ERROR_UNSUPPORTED_ESCAPE_SEQUENCE    137
#define PCRE2_ERROR_CALLOUT_NUMBER_TOO_BIG         138
#define PCRE2_ERROR_MISSING_CALLOUT_CLOSING        139
#define PCRE2_ERROR_ESCAPE_INVALID_IN_VERB         140
#define PCRE2_ERROR_UNRECOGNIZED_AFTER_QUERY_P     141
#define PCRE2_ERROR_MISSING_NAME_TERMINATOR        142
#define PCRE2_ERROR_DUPLICATE_SUBPATTERN_NAME      143
#define PCRE2_ERROR_INVALID_SUBPATTERN_NAME        144
#define PCRE2_ERROR_UNICODE_PROPERTIES_UNAVAILABLE 145
#define PCRE2_ERROR_MALFORMED_UNICODE_PROPERTY     146
#define PCRE2_ERROR_UNKNOWN_UNICODE_PROPERTY       147
#define PCRE2_ERROR_SUBPATTERN_NAME_TOO_LONG       148
#define PCRE2_ERROR_TOO_MANY_NAMED_SUBPATTERNS     149
#define PCRE2_ERROR_CLASS_INVALID_RANGE            150
#define PCRE2_ERROR_OCTAL_BYTE_TOO_BIG             151
#define PCRE2_ERROR_INTERNAL_OVERRAN_WORKSPACE     152
#define PCRE2_ERROR_INTERNAL_MISSING_SUBPATTERN    153
#define PCRE2_ERROR_DEFINE_TOO_MANY_BRANCHES       154
#define PCRE2_ERROR_BACKSLASH_O_MISSING_BRACE      155
#define PCRE2_ERROR_INTERNAL_UNKNOWN_NEWLINE       156
#define PCRE2_ERROR_BACKSLASH_G_SYNTAX             157
#define PCRE2_ERROR_PARENS_QUERY_R_MISSING_CLOSING 158
/* Error 159 is obsolete and should now never occur */
#define PCRE2_ERROR_VERB_ARGUMENT_NOT_ALLOWED      159
#define PCRE2_ERROR_VERB_UNKNOWN                   160
#define PCRE2_ERROR_SUBPATTERN_NUMBER_TOO_BIG      161
#define PCRE2_ERROR_SUBPATTERN_NAME_EXPECTED       162
#define PCRE2_ERROR_INTERNAL_PARSED_OVERFLOW       163
#define PCRE2_ERROR_INVALID_OCTAL                  164
#define PCRE2_ERROR_SUBPATTERN_NAMES_MISMATCH      165
#define PCRE2_ERROR_MARK_MISSING_ARGUMENT          166
#define PCRE2_ERROR_INVALID_HEXADECIMAL            167
#define PCRE2_ERROR_BACKSLASH_C_SYNTAX             168
#define PCRE2_ERROR_BACKSLASH_K_SYNTAX             169
#define PCRE2_ERROR_INTERNAL_BAD_CODE_LOOKBEHINDS  170
#define PCRE2_ERROR_BACKSLASH_N_IN_CLASS           171
#define PCRE2_ERROR_CALLOUT_STRING_TOO_LONG        172
#define PCRE2_ERROR_UNICODE_DISALLOWED_CODE_POINT  173
#define PCRE2_ERROR_UTF_IS_DISABLED                174
#define PCRE2_ERROR_UCP_IS_DISABLED                175
#define PCRE2_ERROR_VERB_NAME_TOO_LONG             176
#define PCRE2_ERROR_BACKSLASH_U_CODE_POINT_TOO_BIG 177
#define PCRE2_ERROR_MISSING_OCTAL_OR_HEX_DIGITS    178
#define PCRE2_ERROR_VERSION_CONDITION_SYNTAX       179
#define PCRE2_ERROR_INTERNAL_BAD_CODE_AUTO_POSSESS 180
#define PCRE2_ERROR_CALLOUT_NO_STRING_DELIMITER    181
#define PCRE2_ERROR_CALLOUT_BAD_STRING_DELIMITER   182
#define PCRE2_ERROR_BACKSLASH_C_CALLER_DISABLED    183
#define PCRE2_ERROR_QUERY_BARJX_NEST_TOO_DEEP      184
#define PCRE2_ERROR_BACKSLASH_C_LIBRARY_DISABLED   185
#define PCRE2_ERROR_PATTERN_TOO_COMPLICATED        186
#define PCRE2_ERROR_LOOKBEHIND_TOO_LONG            187
#define PCRE2_ERROR_PATTERN_STRING_TOO_LONG        188
#define PCRE2_ERROR_INTERNAL_BAD_CODE              189
#define PCRE2_ERROR_INTERNAL_BAD_CODE_IN_SKIP      190
#define PCRE2_ERROR_NO_SURROGATES_IN_UTF16         191
#define PCRE2_ERROR_BAD_LITERAL_OPTIONS            192
#define PCRE2_ERROR_SUPPORTED_ONLY_IN_UNICODE      193
#define PCRE2_ERROR_INVALID_HYPHEN_IN_OPTIONS      194
#define PCRE2_ERROR_ALPHA_ASSERTION_UNKNOWN        195
#define PCRE2_ERROR_SCRIPT_RUN_NOT_AVAILABLE       196
#define PCRE2_ERROR_TOO_MANY_CAPTURES              197
#define PCRE2_ERROR_CONDITION_ATOMIC_ASSERTION_EXPECTED  198
#define PCRE2_ERROR_BACKSLASH_K_IN_LOOKAROUND      199


/* "Expected" matching error codes: no match and partial match. */

#define PCRE2_ERROR_NOMATCH          (-1)
#define PCRE2_ERROR_PARTIAL          (-2)

/* Error codes for UTF-8 validity checks */

#define PCRE2_ERROR_UTF8_ERR1        (-3)
#define PCRE2_ERROR_UTF8_ERR2        (-4)
#define PCRE2_ERROR_UTF8_ERR3        (-5)
#define PCRE2_ERROR_UTF8_ERR4        (-6)
#define PCRE2_ERROR_UTF8_ERR5        (-7)
#define PCRE2_ERROR_UTF8_ERR6        (-8)
#define PCRE2_ERROR_UTF8_ERR7        (-9)
#define PCRE2_ERROR_UTF8_ERR8       (-10)
#define PCRE2_ERROR_UTF8_ERR9       (-11)
#define PCRE2_ERROR_UTF8_ERR10      (-12)
#define PCRE2_ERROR_UTF8_ERR11      (-13)
#define PCRE2_ERROR_UTF8_ERR12      (-14)
#define PCRE2_ERROR_UTF8_ERR13      (-15)
#define PCRE2_ERROR_UTF8_ERR14      (-16)
#define PCRE2_ERROR_UTF8_ERR15      (-17)
#define PCRE2_ERROR_UTF8_ERR16      (-18)
#define PCRE2_ERROR_UTF8_ERR17      (-19)
#define PCRE2_ERROR_UTF8_ERR18      (-20)
#define PCRE2_ERROR_UTF8_ERR19      (-21)
#define PCRE2_ERROR_UTF8_ERR20      (-22)
#define PCRE2_ERROR_UTF8_ERR21      (-23)

/* Error codes for UTF-16 validity checks */

#define PCRE2_ERROR_UTF16_ERR1      (-24)
#define PCRE2_ERROR_UTF16_ERR2      (-25)
#define PCRE2_ERROR_UTF16_ERR3      (-26)

/* Error codes for UTF-32 validity checks */

#define PCRE2_ERROR_UTF32_ERR1      (-27)
#define PCRE2_ERROR_UTF32_ERR2      (-28)

/* Miscellaneous error codes for pcre2[_dfa]_match(), substring extraction
functions, context functions, and serializing functions. They are in numerical
order. Originally they were in alphabetical order too, but now that PCRE2 is
released, the numbers must not be changed. */

#define PCRE2_ERROR_BADDATA           (-29)
#define PCRE2_ERROR_MIXEDTABLES       (-30)  /* Name was changed */
#define PCRE2_ERROR_BADMAGIC          (-31)
#define PCRE2_ERROR_BADMODE           (-32)
#define PCRE2_ERROR_BADOFFSET         (-33)
#define PCRE2_ERROR_BADOPTION         (-34)
#define PCRE2_ERROR_BADREPLACEMENT    (-35)
#define PCRE2_ERROR_BADUTFOFFSET      (-36)
#define PCRE2_ERROR_CALLOUT           (-37)  /* Never used by PCRE2 itself */
#define PCRE2_ERROR_DFA_BADRESTART    (-38)
#define PCRE2_ERROR_DFA_RECURSE       (-39)
#define PCRE2_ERROR_DFA_UCOND         (-40)
#define PCRE2_ERROR_DFA_UFUNC         (-41)
#define PCRE2_ERROR_DFA_UITEM         (-42)
#define PCRE2_ERROR_DFA_WSSIZE        (-43)
#define PCRE2_ERROR_INTERNAL          (-44)
#define PCRE2_ERROR_JIT_BADOPTION     (-45)
#define PCRE2_ERROR_JIT_STACKLIMIT    (-46)
#define PCRE2_ERROR_MATCHLIMIT        (-47)
#define PCRE2_ERROR_NOMEMORY          (-48)
#define PCRE2_ERROR_NOSUBSTRING       (-49)
#define PCRE2_ERROR_NOUNIQUESUBSTRING (-50)
#define PCRE2_ERROR_NULL              (-51)
#define PCRE2_ERROR_RECURSELOOP       (-52)
#define PCRE2_ERROR_DEPTHLIMIT        (-53)
#define PCRE2_ERROR_RECURSIONLIMIT    (-53)  /* Obsolete synonym */
#define PCRE2_ERROR_UNAVAILABLE       (-54)
#define PCRE2_ERROR_UNSET             (-55)
#define PCRE2_ERROR_BADOFFSETLIMIT    (-56)
#define PCRE2_ERROR_BADREPESCAPE      (-57)
#define PCRE2_ERROR_REPMISSINGBRACE   (-58)
#define PCRE2_ERROR_BADSUBSTITUTION   (-59)
#define PCRE2_ERROR_BADSUBSPATTERN    (-60)
#define PCRE2_ERROR_TOOMANYREPLACE    (-61)
#define PCRE2_ERROR_BADSERIALIZEDDATA (-62)
#define PCRE2_ERROR_HEAPLIMIT         (-63)
#define PCRE2_ERROR_CONVERT_SYNTAX    (-64)
#define PCRE2_ERROR_INTERNAL_DUPMATCH (-65)
#define PCRE2_ERROR_DFA_UINVALID_UTF  (-66)
#define PCRE2_ERROR_INVALIDOFFSET     (-67)


/* Request types for pcre2_pattern_info() */

#define PCRE2_INFO_ALLOPTIONS            0
#define PCRE2_INFO_ARGOPTIONS            1
#define PCRE2_INFO_BACKREFMAX            2
#define PCRE2_INFO_BSR                   3
#define PCRE2_INFO_CAPTURECOUNT          4
#define PCRE2_INFO_FIRSTCODEUNIT         5
#define PCRE2_INFO_FIRSTCODETYPE         6
#define PCRE2_INFO_FIRSTBITMAP           7
#define PCRE2_INFO_HASCRORLF             8
#define PCRE2_INFO_JCHANGED              9
#define PCRE2_INFO_JITSIZE              10
#define PCRE2_INFO_LASTCODEUNIT         11
#define PCRE2_INFO_LASTCODETYPE         12
#define PCRE2_INFO_MATCHEMPTY           13
#define PCRE2_INFO_MATCHLIMIT           14
#define PCRE2_INFO_MAXLOOKBEHIND        15
#define PCRE2_INFO_MINLENGTH            16
#define PCRE2_INFO_NAMECOUNT            17
#define PCRE2_INFO_NAMEENTRYSIZE        18
#define PCRE2_INFO_NAMETABLE            19
#define PCRE2_INFO_NEWLINE              20
#define PCRE2_INFO_DEPTHLIMIT           21
#define PCRE2_INFO_RECURSIONLIMIT       21  /* Obsolete synonym */
#define PCRE2_INFO_SIZE                 22
#define PCRE2_INFO_HASBACKSLASHC        23
#define PCRE2_INFO_FRAMESIZE            24
#define PCRE2_INFO_HEAPLIMIT            25
#define PCRE2_INFO_EXTRAOPTIONS         26

/* Request types for pcre2_config(). */

#define PCRE2_CONFIG_BSR                     0
#define PCRE2_CONFIG_JIT                     1
#define PCRE2_CONFIG_JITTARGET               2
#define PCRE2_CONFIG_LINKSIZE                3
#define PCRE2_CONFIG_MATCHLIMIT              4
#define PCRE2_CONFIG_NEWLINE                 5
#define PCRE2_CONFIG_PARENSLIMIT             6
#define PCRE2_CONFIG_DEPTHLIMIT              7
#define PCRE2_CONFIG_RECURSIONLIMIT          7  /* Obsolete synonym */
#define PCRE2_CONFIG_STACKRECURSE            8  /* Obsolete */
#define PCRE2_CONFIG_UNICODE                 9
#define PCRE2_CONFIG_UNICODE_VERSION        10
#define PCRE2_CONFIG_VERSION                11
#define PCRE2_CONFIG_HEAPLIMIT              12
#define PCRE2_CONFIG_NEVER_BACKSLASH_C      13
#define PCRE2_CONFIG_COMPILED_WIDTHS        14
#define PCRE2_CONFIG_TABLES_LENGTH          15


/* Types for code units in patterns and subject strings. */

typedef uint8_t  PCRE2_UCHAR8;
typedef uint16_t PCRE2_UCHAR16;
typedef uint32_t PCRE2_UCHAR32;

typedef const PCRE2_UCHAR8  *PCRE2_SPTR8;
typedef const PCRE2_UCHAR16 *PCRE2_SPTR16;
typedef const PCRE2_UCHAR32 *PCRE2_SPTR32;

/* The PCRE2_SIZE type is used for all string lengths and offsets in PCRE2,
including pattern offsets for errors and subject offsets after a match. We
define special values to indicate zero-terminated strings and unset offsets in
the offset vector (ovector). */

#define PCRE2_SIZE            size_t
#define PCRE2_SIZE_MAX        SIZE_MAX
#define PCRE2_ZERO_TERMINATED (~(PCRE2_SIZE)0)
#define PCRE2_UNSET           (~(PCRE2_SIZE)0)

/* Generic types for opaque structures and JIT callback functions. These
declarations are defined in a macro that is expanded for each width later. */

#define PCRE2_TYPES_LIST \
struct pcre2_real_general_context; \
typedef struct pcre2_real_general_context pcre2_general_context; \
\
struct pcre2_real_compile_context; \
typedef struct pcre2_real_compile_context pcre2_compile_context; \
\
struct pcre2_real_match_context; \
typedef struct pcre2_real_match_context pcre2_match_context; \
\
struct pcre2_real_convert_context; \
typedef struct pcre2_real_convert_context pcre2_convert_context; \
\
struct pcre2_real_code; \
typedef struct pcre2_real_code pcre2_code; \
\
struct pcre2_real_match_data; \
typedef struct pcre2_real_match_data pcre2_match_data; \
\
struct pcre2_real_jit_stack; \
typedef struct pcre2_real_jit_stack pcre2_jit_stack; \
\
typedef pcre2_jit_stack *(*pcre2_jit_callback)(void *);


/* The structures for passing out data via callout functions. We use structures
so that new fields can be added on the end in future versions, without changing
the API of the function, thereby allowing old clients to work without
modification. Define the generic versions in a macro; the width-specific
versions are generated from this macro below. */

/* Flags for the callout_flags field. These are cleared after a callout. */

#define PCRE2_CALLOUT_STARTMATCH    0x00000001u  /* Set for each bumpalong */
#define PCRE2_CALLOUT_BACKTRACK     0x00000002u  /* Set after a backtrack */

#define PCRE2_STRUCTURE_LIST \
typedef struct pcre2_callout_block { \
  uint32_t      version;           /* Identifies version of block */ \
  /* ------------------------ Version 0 ------------------------------- */ \
  uint32_t      callout_number;    /* Number compiled into pattern */ \
  uint32_t      capture_top;       /* Max current capture */ \
  uint32_t      capture_last;      /* Most recently closed capture */ \
  PCRE2_SIZE   *offset_vector;     /* The offset vector */ \
  PCRE2_SPTR    mark;              /* Pointer to current mark or NULL */ \
  PCRE2_SPTR    subject;           /* The subject being matched */ \
  PCRE2_SIZE    subject_length;    /* The length of the subject */ \
  PCRE2_SIZE    start_match;       /* Offset to start of this match attempt */ \
  PCRE2_SIZE    current_position;  /* Where we currently are in the subject */ \
  PCRE2_SIZE    pattern_position;  /* Offset to next item in the pattern */ \
  PCRE2_SIZE    next_item_length;  /* Length of next item in the pattern */ \
  /* ------------------- Added for Version 1 -------------------------- */ \
  PCRE2_SIZE    callout_string_offset; /* Offset to string within pattern */ \
  PCRE2_SIZE    callout_string_length; /* Length of string compiled into pattern */ \
  PCRE2_SPTR    callout_string;    /* String compiled into pattern */ \
  /* ------------------- Added for Version 2 -------------------------- */ \
  uint32_t      callout_flags;     /* See above for list */ \
  /* ------------------------------------------------------------------ */ \
} pcre2_callout_block; \
\
typedef struct pcre2_callout_enumerate_block { \
  uint32_t      version;           /* Identifies version of block */ \
  /* ------------------------ Version 0 ------------------------------- */ \
  PCRE2_SIZE    pattern_position;  /* Offset to next item in the pattern */ \
  PCRE2_SIZE    next_item_length;  /* Length of next item in the pattern */ \
  uint32_t      callout_number;    /* Number compiled into pattern */ \
  PCRE2_SIZE    callout_string_offset; /* Offset to string within pattern */ \
  PCRE2_SIZE    callout_string_length; /* Length of string compiled into pattern */ \
  PCRE2_SPTR    callout_string;    /* String compiled into pattern */ \
  /* ------------------------------------------------------------------ */ \
} pcre2_callout_enumerate_block; \
\
typedef struct pcre2_substitute_callout_block { \
  uint32_t      version;           /* Identifies version of block */ \
  /* ------------------------ Version 0 ------------------------------- */ \
  PCRE2_SPTR    input;             /* Pointer to input subject string */ \
  PCRE2_SPTR    output;            /* Pointer to output buffer */ \
  PCRE2_SIZE    output_offsets[2]; /* Changed portion of the output */ \
  PCRE2_SIZE   *ovector;           /* Pointer to current ovector */ \
  uint32_t      oveccount;         /* Count of pairs set in ovector */ \
  uint32_t      subscount;         /* Substitution number */ \
  /* ------------------------------------------------------------------ */ \
} pcre2_substitute_callout_block;


/* List the generic forms of all other functions in macros, which will be
expanded for each width below. Start with functions that give general
information. */

#define PCRE2_GENERAL_INFO_FUNCTIONS \
PCRE2_EXP_DECL int PCRE2_CALL_CONVENTION pcre2_config(uint32_t, void *);


/* Functions for manipulating contexts. */

#define PCRE2_GENERAL_CONTEXT_FUNCTIONS \
PCRE2_EXP_DECL pcre2_general_context *PCRE2_CALL_CONVENTION \
  pcre2_general_context_copy(pcre2_general_context *); \
PCRE2_EXP_DECL pcre2_general_context *PCRE2_CALL_CONVENTION \
  pcre2_general_context_create(void *(*)(size_t, void *), \
    void (*)(void *, void *), void *); \
PCRE2_EXP_DECL void PCRE2_CALL_CONVENTION \
  pcre2_general_context_free(pcre2_general_context *);

#define PCRE2_COMPILE_CONTEXT_FUNCTIONS \
PCRE2_EXP_DECL pcre2_compile_context *PCRE2_CALL_CONVENTION \
  pcre2_compile_context_copy(pcre2_compile_context *); \
PCRE2_EXP_DECL pcre2_compile_context *PCRE2_CALL_CONVENTION \
  pcre2_compile_context_create(pcre2_general_context *);\
PCRE2_EXP_DECL void PCRE2_CALL_CONVENTION \
  pcre2_compile_context_free(pcre2_compile_context *); \
PCRE2_EXP_DECL int PCRE2_CALL_CONVENTION \
  pcre2_set_bsr(pcre2_compile_context *, uint32_t); \
PCRE2_EXP_DECL int PCRE2_CALL_CONVENTION \
  pcre2_set_character_tables(pcre2_compile_context *, const uint8_t *); \
PCRE2_EXP_DECL int PCRE2_CALL_CONVENTION \
  pcre2_set_compile_extra_options(pcre2_compile_context *, uint32_t); \
PCRE2_EXP_DECL int PCRE2_CALL_CONVENTION \
  pcre2_set_max_pattern_length(pcre2_compile_context *, PCRE2_SIZE); \
PCRE2_EXP_DECL int PCRE2_CALL_CONVENTION \
  pcre2_set_max_pattern_compiled_length(pcre2_compile_context *, PCRE2_SIZE); \
PCRE2_EXP_DECL int PCRE2_CALL_CONVENTION \
  pcre2_set_max_varlookbehind(pcre2_compile_context *, uint32_t); \
PCRE2_EXP_DECL int PCRE2_CALL_CONVENTION \
  pcre2_set_newline(pcre2_compile_context *, uint32_t); \
PCRE2_EXP_DECL int PCRE2_CALL_CONVENTION \
  pcre2_set_parens_nest_limit(pcre2_compile_context *, uint32_t); \
PCRE2_EXP_DECL int PCRE2_CALL_CONVENTION \
  pcre2_set_compile_recursion_guard(pcre2_compile_context *, \
    int (*)(uint32_t, void *), void *);

#define PCRE2_MATCH_CONTEXT_FUNCTIONS \
PCRE2_EXP_DECL pcre2_match_context *PCRE2_CALL_CONVENTION \
  pcre2_match_context_copy(pcre2_match_context *); \
PCRE2_EXP_DECL pcre2_match_context *PCRE2_CALL_CONVENTION \
  pcre2_match_context_create(pcre2_general_context *); \
PCRE2_EXP_DECL void PCRE2_CALL_CONVENTION \
  pcre2_match_context_free(pcre2_match_context *); \
PCRE2_EXP_DECL int PCRE2_CALL_CONVENTION \
  pcre2_set_callout(pcre2_match_context *, \
    int (*)(pcre2_callout_block *, void *), void *); \
PCRE2_EXP_DECL int PCRE2_CALL_CONVENTION \
  pcre2_set_substitute_callout(pcre2_match_context *, \
    int (*)(pcre2_substitute_callout_block *, void *), void *); \
PCRE2_EXP_DECL int PCRE2_CALL_CONVENTION \
  pcre2_set_depth_limit(pcre2_match_context *, uint32_t); \
PCRE2_EXP_DECL int PCRE2_CALL_CONVENTION \
  pcre2_set_heap_limit(pcre2_match_context *, uint32_t); \
PCRE2_EXP_DECL int PCRE2_CALL_CONVENTION \
  pcre2_set_match_limit(pcre2_match_context *, uint32_t); \
PCRE2_EXP_DECL int PCRE2_CALL_CONVENTION \
  pcre2_set_offset_limit(pcre2_match_context *, PCRE2_SIZE); \
PCRE2_EXP_DECL int PCRE2_CALL_CONVENTION \
  pcre2_set_recursion_limit(pcre2_match_context *, uint32_t); \
PCRE2_EXP_DECL int PCRE2_CALL_CONVENTION \
  pcre2_set_recursion_memory_management(pcre2_match_context *, \
    void *(*)(size_t, void *), void (*)(void *, void *), void *);

#define PCRE2_CONVERT_CONTEXT_FUNCTIONS \
PCRE2_EXP_DECL pcre2_convert_context *PCRE2_CALL_CONVENTION \
  pcre2_convert_context_copy(pcre2_convert_context *); \
PCRE2_EXP_DECL pcre2_convert_context *PCRE2_CALL_CONVENTION \
  pcre2_convert_context_create(pcre2_general_context *); \
PCRE2_EXP_DECL void PCRE2_CALL_CONVENTION \
  pcre2_convert_context_free(pcre2_convert_context *); \
PCRE2_EXP_DECL int PCRE2_CALL_CONVENTION \
  pcre2_set_glob_escape(pcre2_convert_context *, uint32_t); \
PCRE2_EXP_DECL int PCRE2_CALL_CONVENTION \
  pcre2_set_glob_separator(pcre2_convert_context *, uint32_t);


/* Functions concerned with compiling a pattern to PCRE internal code. */

#define PCRE2_COMPILE_FUNCTIONS \
PCRE2_EXP_DECL pcre2_code *PCRE2_CALL_CONVENTION \
  pcre2_compile(PCRE2_SPTR, PCRE2_SIZE, uint32_t, int *, PCRE2_SIZE *, \
    pcre2_compile_context *); \
PCRE2_EXP_DECL void PCRE2_CALL_CONVENTION \
  pcre2_code_free(pcre2_code *); \
PCRE2_EXP_DECL pcre2_code *PCRE2_CALL_CONVENTION \
  pcre2_code_copy(const pcre2_code *); \
PCRE2_EXP_DECL pcre2_code *PCRE2_CALL_CONVENTION \
  pcre2_code_copy_with_tables(const pcre2_code *);


/* Functions that give information about a compiled pattern. */

#define PCRE2_PATTERN_INFO_FUNCTIONS \
PCRE2_EXP_DECL int PCRE2_CALL_CONVENTION \
  pcre2_pattern_info(const pcre2_code *, uint32_t, void *); \
PCRE2_EXP_DECL int PCRE2_CALL_CONVENTION \
  pcre2_callout_enumerate(const pcre2_code *, \
    int (*)(pcre2_callout_enumerate_block *, void *), void *);


/* Functions for running a match and inspecting the result. */

#define PCRE2_MATCH_FUNCTIONS \
PCRE2_EXP_DECL pcre2_match_data *PCRE2_CALL_CONVENTION \
  pcre2_match_data_create(uint32_t, pcre2_general_context *); \
PCRE2_EXP_DECL pcre2_match_data *PCRE2_CALL_CONVENTION \
  pcre2_match_data_create_from_pattern(const pcre2_code *, \
    pcre2_general_context *); \
PCRE2_EXP_DECL int PCRE2_CALL_CONVENTION \
  pcre2_dfa_match(const pcre2_code *, PCRE2_SPTR, PCRE2_SIZE, PCRE2_SIZE, \
    uint32_t, pcre2_match_data *, pcre2_match_context *, int *, PCRE2_SIZE); \
PCRE2_EXP_DECL int PCRE2_CALL_CONVENTION \
  pcre2_match(const pcre2_code *, PCRE2_SPTR, PCRE2_SIZE, PCRE2_SIZE, \
    uint32_t, pcre2_match_data *, pcre2_match_context *); \
PCRE2_EXP_DECL void PCRE2_CALL_CONVENTION \
  pcre2_match_data_free(pcre2_match_data *); \
PCRE2_EXP_DECL PCRE2_SPTR PCRE2_CALL_CONVENTION \
  pcre2_get_mark(pcre2_match_data *); \
PCRE2_EXP_DECL PCRE2_SIZE PCRE2_CALL_CONVENTION \
  pcre2_get_match_data_size(pcre2_match_data *); \
PCRE2_EXP_DECL PCRE2_SIZE PCRE2_CALL_CONVENTION \
  pcre2_get_match_data_heapframes_size(pcre2_match_data *); \
PCRE2_EXP_DECL uint32_t PCRE2_CALL_CONVENTION \
  pcre2_get_ovector_count(pcre2_match_data *); \
PCRE2_EXP_DECL PCRE2_SIZE *PCRE2_CALL_CONVENTION \
  pcre2_get_ovector_pointer(pcre2_match_data *); \
PCRE2_EXP_DECL PCRE2_SIZE PCRE2_CALL_CONVENTION \
  pcre2_get_startchar(pcre2_match_data *);


/* Convenience functions for handling matched substrings. */

#define PCRE2_SUBSTRING_FUNCTIONS \
PCRE2_EXP_DECL int PCRE2_CALL_CONVENTION \
  pcre2_substring_copy_byname(pcre2_match_data *, PCRE2_SPTR, PCRE2_UCHAR *, \
    PCRE2_SIZE *); \
PCRE2_EXP_DECL int PCRE2_CALL_CONVENTION \
  pcre2_substring_copy_bynumber(pcre2_match_data *, uint32_t, PCRE2_UCHAR *, \
    PCRE2_SIZE *); \
PCRE2_EXP_DECL void PCRE2_CALL_CONVENTION \
  pcre2_substring_free(PCRE2_UCHAR *); \
PCRE2_EXP_DECL int PCRE2_CALL_CONVENTION \
  pcre2_substring_get_byname(pcre2_match_data *, PCRE2_SPTR, PCRE2_UCHAR **, \
    PCRE2_SIZE *); \
PCRE2_EXP_DECL int PCRE2_CALL_CONVENTION \
  pcre2_substring_get_bynumber(pcre2_match_data *, uint32_t, PCRE2_UCHAR **, \
    PCRE2_SIZE *); \
PCRE2_EXP_DECL int PCRE2_CALL_CONVENTION \
  pcre2_substring_length_byname(pcre2_match_data *, PCRE2_SPTR, PCRE2_SIZE *); \
PCRE2_EXP_DECL int PCRE2_CALL_CONVENTION \
  pcre2_substring_length_bynumber(pcre2_match_data *, uint32_t, PCRE2_SIZE *); \
PCRE2_EXP_DECL int PCRE2_CALL_CONVENTION \
  pcre2_substring_nametable_scan(const pcre2_code *, PCRE2_SPTR, PCRE2_SPTR *, \
    PCRE2_SPTR *); \
PCRE2_EXP_DECL int PCRE2_CALL_CONVENTION \
  pcre2_substring_number_from_name(const pcre2_code *, PCRE2_SPTR); \
PCRE2_EXP_DECL void PCRE2_CALL_CONVENTION \
  pcre2_substring_list_free(PCRE2_UCHAR **); \
PCRE2_EXP_DECL int PCRE2_CALL_CONVENTION \
  pcre2_substring_list_get(pcre2_match_data *, PCRE2_UCHAR ***, PCRE2_SIZE **);

/* Functions for serializing / deserializing compiled patterns. */

#define PCRE2_SERIALIZE_FUNCTIONS \
PCRE2_EXP_DECL int32_t PCRE2_CALL_CONVENTION \
  pcre2_serialize_encode(const pcre2_code **, int32_t, uint8_t **, \
    PCRE2_SIZE *, pcre2_general_context *); \
PCRE2_EXP_DECL int32_t PCRE2_CALL_CONVENTION \
  pcre2_serialize_decode(pcre2_code **, int32_t, const uint8_t *, \
    pcre2_general_context *); \
PCRE2_EXP_DECL int32_t PCRE2_CALL_CONVENTION \
  pcre2_serialize_get_number_of_codes(const uint8_t *); \
PCRE2_EXP_DECL void PCRE2_CALL_CONVENTION \
  pcre2_serialize_free(uint8_t *);


/* Convenience function for match + substitute. */

#define PCRE2_SUBSTITUTE_FUNCTION \
PCRE2_EXP_DECL int PCRE2_CALL_CONVENTION \
  pcre2_substitute(const pcre2_code *, PCRE2_SPTR, PCRE2_SIZE, PCRE2_SIZE, \
    uint32_t, pcre2_match_data *, pcre2_match_context *, PCRE2_SPTR, \
    PCRE2_SIZE, PCRE2_UCHAR *, PCRE2_SIZE *);


/* Functions for converting pattern source strings. */

#define PCRE2_CONVERT_FUNCTIONS \
PCRE2_EXP_DECL int PCRE2_CALL_CONVENTION \
  pcre2_pattern_convert(PCRE2_SPTR, PCRE2_SIZE, uint32_t, PCRE2_UCHAR **, \
    PCRE2_SIZE *, pcre2_convert_context *); \
PCRE2_EXP_DECL void PCRE2_CALL_CONVENTION \
  pcre2_converted_pattern_free(PCRE2_UCHAR *);


/* Functions for JIT processing */

#define PCRE2_JIT_FUNCTIONS \
PCRE2_EXP_DECL int PCRE2_CALL_CONVENTION \
  pcre2_jit_compile(pcre2_code *, uint32_t); \
PCRE2_EXP_DECL int PCRE2_CALL_CONVENTION \
  pcre2_jit_match(const pcre2_code *, PCRE2_SPTR, PCRE2_SIZE, PCRE2_SIZE, \
    uint32_t, pcre2_match_data *, pcre2_match_context *); \
PCRE2_EXP_DECL void PCRE2_CALL_CONVENTION \
  pcre2_jit_free_unused_memory(pcre2_general_context *); \
PCRE2_EXP_DECL pcre2_jit_stack *PCRE2_CALL_CONVENTION \
  pcre2_jit_stack_create(size_t, size_t, pcre2_general_context *); \
PCRE2_EXP_DECL void PCRE2_CALL_CONVENTION \
  pcre2_jit_stack_assign(pcre2_match_context *, pcre2_jit_callback, void *); \
PCRE2_EXP_DECL void PCRE2_CALL_CONVENTION \
  pcre2_jit_stack_free(pcre2_jit_stack *);


/* Other miscellaneous functions. */

#define PCRE2_OTHER_FUNCTIONS \
PCRE2_EXP_DECL int PCRE2_CALL_CONVENTION \
  pcre2_get_error_message(int, PCRE2_UCHAR *, PCRE2_SIZE); \
PCRE2_EXP_DECL const uint8_t *PCRE2_CALL_CONVENTION \
  pcre2_maketables(pcre2_general_context *); \
PCRE2_EXP_DECL void PCRE2_CALL_CONVENTION \
  pcre2_maketables_free(pcre2_general_context *, const uint8_t *);

/* Define macros that generate width-specific names from generic versions. The
three-level macro scheme is necessary to get the macros expanded when we want
them to be. First we get the width from PCRE2_LOCAL_WIDTH, which is used for
generating three versions of everything below. After that, PCRE2_SUFFIX will be
re-defined to use PCRE2_CODE_UNIT_WIDTH, for use when macros such as
pcre2_compile are called by application code. */

#define PCRE2_JOIN(a,b) a ## b
#define PCRE2_GLUE(a,b) PCRE2_JOIN(a,b)
#define PCRE2_SUFFIX(a) PCRE2_GLUE(a,PCRE2_LOCAL_WIDTH)


/* Data types */

#define PCRE2_UCHAR                 PCRE2_SUFFIX(PCRE2_UCHAR)
#define PCRE2_SPTR                  PCRE2_SUFFIX(PCRE2_SPTR)

#define pcre2_code                  PCRE2_SUFFIX(pcre2_code_)
#define pcre2_jit_callback          PCRE2_SUFFIX(pcre2_jit_callback_)
#define pcre2_jit_stack             PCRE2_SUFFIX(pcre2_jit_stack_)

#define pcre2_real_code             PCRE2_SUFFIX(pcre2_real_code_)
#define pcre2_real_general_context  PCRE2_SUFFIX(pcre2_real_general_context_)
#define pcre2_real_compile_context  PCRE2_SUFFIX(pcre2_real_compile_context_)
#define pcre2_real_convert_context  PCRE2_SUFFIX(pcre2_real_convert_context_)
#define pcre2_real_match_context    PCRE2_SUFFIX(pcre2_real_match_context_)
#define pcre2_real_jit_stack        PCRE2_SUFFIX(pcre2_real_jit_stack_)
#define pcre2_real_match_data       PCRE2_SUFFIX(pcre2_real_match_data_)


/* Data blocks */

#define pcre2_callout_block            PCRE2_SUFFIX(pcre2_callout_block_)
#define pcre2_callout_enumerate_block  PCRE2_SUFFIX(pcre2_callout_enumerate_block_)
#define pcre2_substitute_callout_block PCRE2_SUFFIX(pcre2_substitute_callout_block_)
#define pcre2_general_context          PCRE2_SUFFIX(pcre2_general_context_)
#define pcre2_compile_context          PCRE2_SUFFIX(pcre2_compile_context_)
#define pcre2_convert_context          PCRE2_SUFFIX(pcre2_convert_context_)
#define pcre2_match_context            PCRE2_SUFFIX(pcre2_match_context_)
#define pcre2_match_data               PCRE2_SUFFIX(pcre2_match_data_)


/* Functions: the complete list in alphabetical order */

#define pcre2_callout_enumerate               PCRE2_SUFFIX(pcre2_callout_enumerate_)
#define pcre2_code_copy                       PCRE2_SUFFIX(pcre2_code_copy_)
#define pcre2_code_copy_with_tables           PCRE2_SUFFIX(pcre2_code_copy_with_tables_)
#define pcre2_code_free                       PCRE2_SUFFIX(pcre2_code_free_)
#define pcre2_compile                         PCRE2_SUFFIX(pcre2_compile_)
#define pcre2_compile_context_copy            PCRE2_SUFFIX(pcre2_compile_context_copy_)
#define pcre2_compile_context_create          PCRE2_SUFFIX(pcre2_compile_context_create_)
#define pcre2_compile_context_free            PCRE2_SUFFIX(pcre2_compile_context_free_)
#define pcre2_config                          PCRE2_SUFFIX(pcre2_config_)
#define pcre2_convert_context_copy            PCRE2_SUFFIX(pcre2_convert_context_copy_)
#define pcre2_convert_context_create          PCRE2_SUFFIX(pcre2_convert_context_create_)
#define pcre2_convert_context_free            PCRE2_SUFFIX(pcre2_convert_context_free_)
#define pcre2_converted_pattern_free          PCRE2_SUFFIX(pcre2_converted_pattern_free_)
#define pcre2_dfa_match                       PCRE2_SUFFIX(pcre2_dfa_match_)
#define pcre2_general_context_copy            PCRE2_SUFFIX(pcre2_general_context_copy_)
#define pcre2_general_context_create          PCRE2_SUFFIX(pcre2_general_context_create_)
#define pcre2_general_context_free            PCRE2_SUFFIX(pcre2_general_context_free_)
#define pcre2_get_error_message               PCRE2_SUFFIX(pcre2_get_error_message_)
#define pcre2_get_mark                        PCRE2_SUFFIX(pcre2_get_mark_)
#define pcre2_get_match_data_heapframes_size  PCRE2_SUFFIX(pcre2_get_match_data_heapframes_size_)
#define pcre2_get_match_data_size             PCRE2_SUFFIX(pcre2_get_match_data_size_)
#define pcre2_get_ovector_pointer             PCRE2_SUFFIX(pcre2_get_ovector_pointer_)
#define pcre2_get_ovector_count               PCRE2_SUFFIX(pcre2_get_ovector_count_)
#define pcre2_get_startchar                   PCRE2_SUFFIX(pcre2_get_startchar_)
#define pcre2_jit_compile                     PCRE2_SUFFIX(pcre2_jit_compile_)
#define pcre2_jit_match                       PCRE2_SUFFIX(pcre2_jit_match_)
#define pcre2_jit_free_unused_memory          PCRE2_SUFFIX(pcre2_jit_free_unused_memory_)
#define pcre2_jit_stack_assign                PCRE2_SUFFIX(pcre2_jit_stack_assign_)
#define pcre2_jit_stack_create                PCRE2_SUFFIX(pcre2_jit_stack_create_)
#define pcre2_jit_stack_free                  PCRE2_SUFFIX(pcre2_jit_stack_free_)
#define pcre2_maketables                      PCRE2_SUFFIX(pcre2_maketables_)
#define pcre2_maketables_free                 PCRE2_SUFFIX(pcre2_maketables_free_)
#define pcre2_match                           PCRE2_SUFFIX(pcre2_match_)
#define pcre2_match_context_copy              PCRE2_SUFFIX(pcre2_match_context_copy_)
#define pcre2_match_context_create            PCRE2_SUFFIX(pcre2_match_context_create_)
#define pcre2_match_context_free              PCRE2_SUFFIX(pcre2_match_context_free_)
#define pcre2_match_data_create               PCRE2_SUFFIX(pcre2_match_data_create_)
#define pcre2_match_data_create_from_pattern  PCRE2_SUFFIX(pcre2_match_data_create_from_pattern_)
#define pcre2_match_data_free                 PCRE2_SUFFIX(pcre2_match_data_free_)
#define pcre2_pattern_convert                 PCRE2_SUFFIX(pcre2_pattern_convert_)
#define pcre2_pattern_info                    PCRE2_SUFFIX(pcre2_pattern_info_)
#define pcre2_serialize_decode                PCRE2_SUFFIX(pcre2_serialize_decode_)
#define pcre2_serialize_encode                PCRE2_SUFFIX(pcre2_serialize_encode_)
#define pcre2_serialize_free                  PCRE2_SUFFIX(pcre2_serialize_free_)
#define pcre2_serialize_get_number_of_codes   PCRE2_SUFFIX(pcre2_serialize_get_number_of_codes_)
#define pcre2_set_bsr                         PCRE2_SUFFIX(pcre2_set_bsr_)
#define pcre2_set_callout                     PCRE2_SUFFIX(pcre2_set_callout_)
#define pcre2_set_character_tables            PCRE2_SUFFIX(pcre2_set_character_tables_)
#define pcre2_set_compile_extra_options       PCRE2_SUFFIX(pcre2_set_compile_extra_options_)
#define pcre2_set_compile_recursion_guard     PCRE2_SUFFIX(pcre2_set_compile_recursion_guard_)
#define pcre2_set_depth_limit                 PCRE2_SUFFIX(pcre2_set_depth_limit_)
#define pcre2_set_glob_escape                 PCRE2_SUFFIX(pcre2_set_glob_escape_)
#define pcre2_set_glob_separator              PCRE2_SUFFIX(pcre2_set_glob_separator_)
#define pcre2_set_heap_limit                  PCRE2_SUFFIX(pcre2_set_heap_limit_)
#define pcre2_set_match_limit                 PCRE2_SUFFIX(pcre2_set_match_limit_)
#define pcre2_set_max_varlookbehind           PCRE2_SUFFIX(pcre2_set_max_varlookbehind_)
#define pcre2_set_max_pattern_length          PCRE2_SUFFIX(pcre2_set_max_pattern_length_)
#define pcre2_set_max_pattern_compiled_length PCRE2_SUFFIX(pcre2_set_max_pattern_compiled_length_)
#define pcre2_set_newline                     PCRE2_SUFFIX(pcre2_set_newline_)
#define pcre2_set_parens_nest_limit           PCRE2_SUFFIX(pcre2_set_parens_nest_limit_)
#define pcre2_set_offset_limit                PCRE2_SUFFIX(pcre2_set_offset_limit_)
#define pcre2_set_substitute_callout          PCRE2_SUFFIX(pcre2_set_substitute_callout_)
#define pcre2_substitute                      PCRE2_SUFFIX(pcre2_substitute_)
#define pcre2_substring_copy_byname           PCRE2_SUFFIX(pcre2_substring_copy_byname_)
#define pcre2_substring_copy_bynumber         PCRE2_SUFFIX(pcre2_substring_copy_bynumber_)
#define pcre2_substring_free                  PCRE2_SUFFIX(pcre2_substring_free_)
#define pcre2_substring_get_byname            PCRE2_SUFFIX(pcre2_substring_get_byname_)
#define pcre2_substring_get_bynumber          PCRE2_SUFFIX(pcre2_substring_get_bynumber_)
#define pcre2_substring_length_byname         PCRE2_SUFFIX(pcre2_substring_length_byname_)
#define pcre2_substring_length_bynumber       PCRE2_SUFFIX(pcre2_substring_length_bynumber_)
#define pcre2_substring_list_get              PCRE2_SUFFIX(pcre2_substring_list_get_)
#define pcre2_substring_list_free             PCRE2_SUFFIX(pcre2_substring_list_free_)
#define pcre2_substring_nametable_scan        PCRE2_SUFFIX(pcre2_substring_nametable_scan_)
#define pcre2_substring_number_from_name      PCRE2_SUFFIX(pcre2_substring_number_from_name_)

/* Keep this old function name for backwards compatibility */
#define pcre2_set_recursion_limit PCRE2_SUFFIX(pcre2_set_recursion_limit_)

/* Keep this obsolete function for backwards compatibility: it is now a noop. */
#define pcre2_set_recursion_memory_management PCRE2_SUFFIX(pcre2_set_recursion_memory_management_)

/* Now generate all three sets of width-specific structures and function
prototypes. */

#define PCRE2_TYPES_STRUCTURES_AND_FUNCTIONS \
PCRE2_TYPES_LIST \
PCRE2_STRUCTURE_LIST \
PCRE2_GENERAL_INFO_FUNCTIONS \
PCRE2_GENERAL_CONTEXT_FUNCTIONS \
PCRE2_COMPILE_CONTEXT_FUNCTIONS \
PCRE2_CONVERT_CONTEXT_FUNCTIONS \
PCRE2_CONVERT_FUNCTIONS \
PCRE2_MATCH_CONTEXT_FUNCTIONS \
PCRE2_COMPILE_FUNCTIONS \
PCRE2_PATTERN_INFO_FUNCTIONS \
PCRE2_MATCH_FUNCTIONS \
PCRE2_SUBSTRING_FUNCTIONS \
PCRE2_SERIALIZE_FUNCTIONS \
PCRE2_SUBSTITUTE_FUNCTION \
PCRE2_JIT_FUNCTIONS \
PCRE2_OTHER_FUNCTIONS

#define PCRE2_LOCAL_WIDTH 8
PCRE2_TYPES_STRUCTURES_AND_FUNCTIONS
#undef PCRE2_LOCAL_WIDTH

#define PCRE2_LOCAL_WIDTH 16
PCRE2_TYPES_STRUCTURES_AND_FUNCTIONS
#undef PCRE2_LOCAL_WIDTH

#define PCRE2_LOCAL_WIDTH 32
PCRE2_TYPES_STRUCTURES_AND_FUNCTIONS
#undef PCRE2_LOCAL_WIDTH

/* Undefine the list macros; they are no longer needed. */

#undef PCRE2_TYPES_LIST
#undef PCRE2_STRUCTURE_LIST
#undef PCRE2_GENERAL_INFO_FUNCTIONS
#undef PCRE2_GENERAL_CONTEXT_FUNCTIONS
#undef PCRE2_COMPILE_CONTEXT_FUNCTIONS
#undef PCRE2_CONVERT_CONTEXT_FUNCTIONS
#undef PCRE2_MATCH_CONTEXT_FUNCTIONS
#undef PCRE2_COMPILE_FUNCTIONS
#undef PCRE2_PATTERN_INFO_FUNCTIONS
#undef PCRE2_MATCH_FUNCTIONS
#undef PCRE2_SUBSTRING_FUNCTIONS
#undef PCRE2_SERIALIZE_FUNCTIONS
#undef PCRE2_SUBSTITUTE_FUNCTION
#undef PCRE2_JIT_FUNCTIONS
#undef PCRE2_OTHER_FUNCTIONS
#undef PCRE2_TYPES_STRUCTURES_AND_FUNCTIONS

/* PCRE2_CODE_UNIT_WIDTH must be defined. If it is 8, 16, or 32, redefine
PCRE2_SUFFIX to use it. If it is 0, undefine the other macros and make
PCRE2_SUFFIX a no-op. Otherwise, generate an error. */

#undef PCRE2_SUFFIX
#ifndef PCRE2_CODE_UNIT_WIDTH
#error PCRE2_CODE_UNIT_WIDTH must be defined before including pcre2.h.
#error Use 8, 16, or 32; or 0 for a multi-width application.
#else  /* PCRE2_CODE_UNIT_WIDTH is defined */
#if PCRE2_CODE_UNIT_WIDTH == 8 || \
    PCRE2_CODE_UNIT_WIDTH == 16 || \
    PCRE2_CODE_UNIT_WIDTH == 32
#define PCRE2_SUFFIX(a) PCRE2_GLUE(a, PCRE2_CODE_UNIT_WIDTH)
#elif PCRE2_CODE_UNIT_WIDTH == 0
#undef PCRE2_JOIN
#undef PCRE2_GLUE
#define PCRE2_SUFFIX(a) a
#else
#error PCRE2_CODE_UNIT_WIDTH must be 0, 8, 16, or 32.
#endif
#endif  /* PCRE2_CODE_UNIT_WIDTH is defined */

#ifdef __cplusplus
}  /* extern "C" */
#endif

#endif  /* PCRE2_H_IDEMPOTENT_GUARD */

/* End of pcre2.h */
ext/pcre/pcre2lib/pcre2_jit_neon_inc.h000064400000020727151730541610013714 0ustar00/*************************************************
*      Perl-Compatible Regular Expressions       *
*************************************************/

/* PCRE is a library of functions to support regular expressions whose syntax
and semantics are as close as possible to those of the Perl 5 language.

                       Written by Philip Hazel
            This module by Zoltan Herczeg and Sebastian Pop
     Original API code Copyright (c) 1997-2012 University of Cambridge
          New API code Copyright (c) 2016-2019 University of Cambridge

-----------------------------------------------------------------------------
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:

    * Redistributions of source code must retain the above copyright notice,
      this list of conditions and the following disclaimer.

    * Redistributions in binary form must reproduce the above copyright
      notice, this list of conditions and the following disclaimer in the
      documentation and/or other materials provided with the distribution.

    * Neither the name of the University of Cambridge nor the names of its
      contributors may be used to endorse or promote products derived from
      this software without specific prior written permission.

THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
POSSIBILITY OF SUCH DAMAGE.
-----------------------------------------------------------------------------
*/

# if defined(FFCS)
#  if defined(FF_UTF)
#   define FF_FUN ffcs_utf
#  else
#   define FF_FUN ffcs
#  endif

# elif defined(FFCS_2)
#  if defined(FF_UTF)
#   define FF_FUN ffcs_2_utf
#  else
#   define FF_FUN ffcs_2
#  endif

# elif defined(FFCS_MASK)
#  if defined(FF_UTF)
#   define FF_FUN ffcs_mask_utf
#  else
#   define FF_FUN ffcs_mask
#  endif

# elif defined(FFCPS_0)
#  if defined (FF_UTF)
#   define FF_FUN ffcps_0_utf
#  else
#   define FF_FUN ffcps_0
#  endif

# elif defined (FFCPS_1)
#  if defined (FF_UTF)
#   define FF_FUN ffcps_1_utf
#  else
#   define FF_FUN ffcps_1
#  endif

# elif defined (FFCPS_DEFAULT)
#  if defined (FF_UTF)
#   define FF_FUN ffcps_default_utf
#  else
#   define FF_FUN ffcps_default
#  endif
# endif

#if (defined(__GNUC__) && __SANITIZE_ADDRESS__) \
	|| (defined(__clang__) \
	&& ((__clang_major__ == 3 && __clang_minor__ >= 3) || (__clang_major__ > 3)))
__attribute__((no_sanitize_address))
#endif
static sljit_u8* SLJIT_FUNC FF_FUN(sljit_u8 *str_end, sljit_u8 **str_ptr, sljit_uw offs1, sljit_uw offs2, sljit_uw chars)
#undef FF_FUN
{
quad_word qw;
int_char ic;

SLJIT_UNUSED_ARG(offs1);
SLJIT_UNUSED_ARG(offs2);

ic.x = chars;

#if defined(FFCS)
sljit_u8 c1 = ic.c.c1;
vect_t vc1 = VDUPQ(c1);

#elif defined(FFCS_2)
sljit_u8 c1 = ic.c.c1;
vect_t vc1 = VDUPQ(c1);
sljit_u8 c2 = ic.c.c2;
vect_t vc2 = VDUPQ(c2);

#elif defined(FFCS_MASK)
sljit_u8 c1 = ic.c.c1;
vect_t vc1 = VDUPQ(c1);
sljit_u8 mask = ic.c.c2;
vect_t vmask = VDUPQ(mask);
#endif

#if defined(FFCPS)
compare_type compare1_type = compare_match1;
compare_type compare2_type = compare_match1;
vect_t cmp1a, cmp1b, cmp2a, cmp2b;
const sljit_u32 diff = IN_UCHARS(offs1 - offs2);
PCRE2_UCHAR char1a = ic.c.c1;
PCRE2_UCHAR char2a = ic.c.c3;

# ifdef FFCPS_CHAR1A2A
cmp1a = VDUPQ(char1a);
cmp2a = VDUPQ(char2a);
cmp1b = VDUPQ(0); /* to avoid errors on older compilers -Werror=maybe-uninitialized */
cmp2b = VDUPQ(0); /* to avoid errors on older compilers -Werror=maybe-uninitialized */
# else
PCRE2_UCHAR char1b = ic.c.c2;
PCRE2_UCHAR char2b = ic.c.c4;
if (char1a == char1b)
  {
  cmp1a = VDUPQ(char1a);
  cmp1b = VDUPQ(0); /* to avoid errors on older compilers -Werror=maybe-uninitialized */
  }
else
  {
  sljit_u32 bit1 = char1a ^ char1b;
  if (is_powerof2(bit1))
    {
    compare1_type = compare_match1i;
    cmp1a = VDUPQ(char1a | bit1);
    cmp1b = VDUPQ(bit1);
    }
  else
    {
    compare1_type = compare_match2;
    cmp1a = VDUPQ(char1a);
    cmp1b = VDUPQ(char1b);
    }
  }

if (char2a == char2b)
  {
  cmp2a = VDUPQ(char2a);
  cmp2b = VDUPQ(0); /* to avoid errors on older compilers -Werror=maybe-uninitialized */
  }
else
  {
  sljit_u32 bit2 = char2a ^ char2b;
  if (is_powerof2(bit2))
    {
    compare2_type = compare_match1i;
    cmp2a = VDUPQ(char2a | bit2);
    cmp2b = VDUPQ(bit2);
    }
  else
    {
    compare2_type = compare_match2;
    cmp2a = VDUPQ(char2a);
    cmp2b = VDUPQ(char2b);
    }
  }
# endif

*str_ptr += IN_UCHARS(offs1);
#endif

#if PCRE2_CODE_UNIT_WIDTH != 8
vect_t char_mask = VDUPQ(0xff);
#endif

#if defined(FF_UTF)
restart:;
#endif

#if defined(FFCPS)
if (*str_ptr >= str_end)
  return NULL;
sljit_u8 *p1 = *str_ptr - diff;
#endif
sljit_s32 align_offset = ((uint64_t)*str_ptr & 0xf);
*str_ptr = (sljit_u8 *) ((uint64_t)*str_ptr & ~0xf);
vect_t data = VLD1Q(*str_ptr);
#if PCRE2_CODE_UNIT_WIDTH != 8
data = VANDQ(data, char_mask);
#endif
 
#if defined(FFCS)
vect_t eq = VCEQQ(data, vc1);

#elif defined(FFCS_2)
vect_t eq1 = VCEQQ(data, vc1);
vect_t eq2 = VCEQQ(data, vc2);
vect_t eq = VORRQ(eq1, eq2);    

#elif defined(FFCS_MASK)
vect_t eq = VORRQ(data, vmask);
eq = VCEQQ(eq, vc1);

#elif defined(FFCPS)
# if defined(FFCPS_DIFF1)
vect_t prev_data = data;
# endif

vect_t data2;
if (p1 < *str_ptr)
  {
  data2 = VLD1Q(*str_ptr - diff);
#if PCRE2_CODE_UNIT_WIDTH != 8
  data2 = VANDQ(data2, char_mask);
#endif
  }
else
  data2 = shift_left_n_lanes(data, offs1 - offs2);
 
if (compare1_type == compare_match1)
  data = VCEQQ(data, cmp1a);
else
  data = fast_forward_char_pair_compare(compare1_type, data, cmp1a, cmp1b);

if (compare2_type == compare_match1)
  data2 = VCEQQ(data2, cmp2a);
else
  data2 = fast_forward_char_pair_compare(compare2_type, data2, cmp2a, cmp2b);

vect_t eq = VANDQ(data, data2);
#endif

VST1Q(qw.mem, eq);
/* Ignore matches before the first STR_PTR. */
if (align_offset < 8)
  {
  qw.dw[0] >>= align_offset * 8;
  if (qw.dw[0])
    {
    *str_ptr += align_offset + __builtin_ctzll(qw.dw[0]) / 8;
    goto match;
    }
  if (qw.dw[1])
    {
    *str_ptr += 8 + __builtin_ctzll(qw.dw[1]) / 8;
    goto match;
    }
  }
else
  {
  qw.dw[1] >>= (align_offset - 8) * 8;
  if (qw.dw[1])
    {
    *str_ptr += align_offset + __builtin_ctzll(qw.dw[1]) / 8;
    goto match;
    }
  }
*str_ptr += 16;

while (*str_ptr < str_end)
  {
  vect_t orig_data = VLD1Q(*str_ptr);
#if PCRE2_CODE_UNIT_WIDTH != 8
  orig_data = VANDQ(orig_data, char_mask);
#endif
  data = orig_data;

#if defined(FFCS)
  eq = VCEQQ(data, vc1);

#elif defined(FFCS_2)
  eq1 = VCEQQ(data, vc1);
  eq2 = VCEQQ(data, vc2);
  eq = VORRQ(eq1, eq2);    

#elif defined(FFCS_MASK)
  eq = VORRQ(data, vmask);
  eq = VCEQQ(eq, vc1);
#endif

#if defined(FFCPS)
# if defined (FFCPS_DIFF1)
  data2 = VEXTQ(prev_data, data, VECTOR_FACTOR - 1);
# else
  data2 = VLD1Q(*str_ptr - diff);
#  if PCRE2_CODE_UNIT_WIDTH != 8
  data2 = VANDQ(data2, char_mask);
#  endif
# endif

# ifdef FFCPS_CHAR1A2A
  data = VCEQQ(data, cmp1a);
  data2 = VCEQQ(data2, cmp2a);
# else
  if (compare1_type == compare_match1)
    data = VCEQQ(data, cmp1a);
  else
    data = fast_forward_char_pair_compare(compare1_type, data, cmp1a, cmp1b);
  if (compare2_type == compare_match1)
    data2 = VCEQQ(data2, cmp2a);
  else
    data2 = fast_forward_char_pair_compare(compare2_type, data2, cmp2a, cmp2b);
# endif

  eq = VANDQ(data, data2);
#endif

  VST1Q(qw.mem, eq);
  if (qw.dw[0])
    *str_ptr += __builtin_ctzll(qw.dw[0]) / 8;
  else if (qw.dw[1])
    *str_ptr += 8 + __builtin_ctzll(qw.dw[1]) / 8;
  else {
    *str_ptr += 16;
#if defined (FFCPS_DIFF1)
    prev_data = orig_data;
#endif
    continue;
  }

match:;
  if (*str_ptr >= str_end)
    /* Failed match. */
    return NULL;

#if defined(FF_UTF)
  if (utf_continue((PCRE2_SPTR)*str_ptr - offs1))
    {
    /* Not a match. */
    *str_ptr += IN_UCHARS(1);
    goto restart;
    }
#endif

  /* Match. */
#if defined (FFCPS)
  *str_ptr -= IN_UCHARS(offs1);
#endif
  return *str_ptr;
  }

/* Failed match. */
return NULL;
}
ext/swoole/php_swoole.h000064400000004475151730541620011222 0ustar00/*
  +----------------------------------------------------------------------+
  | Swoole                                                               |
  +----------------------------------------------------------------------+
  | This source file is subject to version 2.0 of the Apache license,    |
  | that is bundled with this package in the file LICENSE, and is        |
  | available through the world-wide-web at the following url:           |
  | http://www.apache.org/licenses/LICENSE-2.0.html                      |
  | If you did not receive a copy of the Apache2.0 license and are unable|
  | to obtain it through the world-wide-web, please send a note to       |
  | license@swoole.com so we can mail you a copy immediately.            |
  +----------------------------------------------------------------------+
  | Author: Tianfeng Han  <rango@swoole.com>                             |
  +----------------------------------------------------------------------+
*/

#ifndef PHP_SWOOLE_H
#define PHP_SWOOLE_H

#ifdef __cplusplus
extern "C" {
#endif

#include "php.h"
#include "php_ini.h"
#include "php_globals.h"
#include "php_main.h"

#include "php_streams.h"
#include "php_network.h"

#include "zend_variables.h"
#include "zend_interfaces.h"
#include "zend_closures.h"
#include "zend_exceptions.h"
#include "zend_attributes.h"

#ifdef HAVE_CONFIG_H
#include "config.h"
#endif

#ifdef __cplusplus
}
#endif

extern zend_module_entry swoole_module_entry;
#define phpext_swoole_ptr &swoole_module_entry

PHP_MINIT_FUNCTION(swoole);
PHP_MSHUTDOWN_FUNCTION(swoole);
PHP_RINIT_FUNCTION(swoole);
PHP_RSHUTDOWN_FUNCTION(swoole);
PHP_MINFO_FUNCTION(swoole);

// clang-format off
ZEND_BEGIN_MODULE_GLOBALS(swoole)
    zend_bool display_errors;
    zend_bool cli;
    zend_bool use_shortname;
    zend_bool enable_preemptive_scheduler;
    zend_bool enable_library;
    zend_bool enable_fiber_mock;
    zend_bool blocking_detection;
    zend_long blocking_threshold;
    zend_bool profile;
    zend_bool leak_detection;
    zend_long socket_buffer_size;
    int req_status;
    HashTable *in_autoload;
ZEND_END_MODULE_GLOBALS(swoole)
// clang-format on

extern ZEND_DECLARE_MODULE_GLOBALS(swoole);

#ifdef ZTS
#define SWOOLE_G(v) TSRMG(swoole_globals_id, zend_swoole_globals *, v)
#else
#define SWOOLE_G(v) (swoole_globals.v)
#endif

#endif /* PHP_SWOOLE_H */
ext/swoole/thirdparty/multipart_parser.h000064400000006273151730541620014630 0ustar00/* Based on node-formidable by Felix Geisendörfer
 * Igor Afonov - afonov@gmail.com - 2012
 * MIT License - http://www.opensource.org/licenses/mit-license.php
 * @link https://github.com/libcat/libcat/blob/develop/deps/multipart_parser
 */

#ifndef _multipart_parser_h
#define _multipart_parser_h

#ifdef __cplusplus
extern "C" {
#endif

#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>

typedef struct multipart_parser multipart_parser;
typedef struct multipart_parser_settings multipart_parser_settings;
typedef struct multipart_parser_state multipart_parser_state;

typedef int (*multipart_data_cb)(multipart_parser *, const char *at, size_t length);
typedef int (*multipart_notify_cb)(multipart_parser *);

enum multipart_error {
    MPPE_OK = 0,
    MPPE_PAUSED,
    MPPE_UNKNOWN,
    MPPE_BOUNDARY_END_NO_CRLF,
    MPPE_BAD_START_BOUNDARY,
    MPPE_INVALID_HEADER_FIELD_CHAR,
    MPPE_INVALID_HEADER_VALUE_CHAR,
    MPPE_BAD_PART_END,
    MPPE_END_BOUNDARY_NO_DASH,
    MPPE_HEADER_VALUE_INCOMPLETE,
};

#define MPPE_ERROR -1

// from RFC2046
#define BOUNDARY_MAX_LEN 70

struct multipart_parser {
    /* private holder for callbacks */
    const multipart_parser_settings *settings;
    /* private internal index for matching boundary */
    size_t index;
    /* public error unexpected char index */
    size_t error_i;
    /* private boundary length + 2 ("--") */
    unsigned char boundary_length;
    FILE *fp;
    void *data;
    /* private FSM state */
    unsigned char state;
    /* public error reason */
    unsigned char error_reason;
    /* private boundary storage: "--" + boundary */
    char boundary[(2 + BOUNDARY_MAX_LEN) * 2 + 9];
    /* public error expected char */
    char error_expected;
    /* public error unexpected char */
    char error_unexpected;
};

struct multipart_parser_settings {
    /*
     * data callback called on header field coming
     * for example data is "Content-Type" with length 12
     */
    multipart_data_cb on_header_field;
    /*
     * data callback called on header value coming
     * for example data is "plain/text" with length 10
     */
    multipart_data_cb on_header_value;
    /*
     * data callback called on body data coming,
     * will be called repeatedly until data end
     */
    multipart_data_cb on_part_data;
    /*
     * before "--" boundary
     */
    multipart_notify_cb on_part_data_begin;
    /*
     * after all headers line "\r\n", before body
     */
    multipart_notify_cb on_headers_complete;
    /*
     * after body, before next "--" boundary
     */
    multipart_notify_cb on_part_data_end;
    /*
     * after last "--" boundary "--"
     */
    multipart_notify_cb on_body_end;
};

multipart_parser *multipart_parser_init(const char *boundary,
                                        size_t boundary_length,
                                        const multipart_parser_settings *settings);
void multipart_parser_free(multipart_parser *p);

/**
 * The multipart header must be complete, otherwise it will be parsed incorrectly
 */
ssize_t multipart_parser_execute(multipart_parser *p, const char *buf, size_t len);
int multipart_parser_error_msg(multipart_parser *p, char *buf, size_t len);

#ifdef __cplusplus
} /* extern "C" */
#endif

#endif
ext/swoole/thirdparty/nghttp2/nghttp2.h000064400000750550151730541620014213 0ustar00/*
 * nghttp2 - HTTP/2 C Library
 *
 * Copyright (c) 2013, 2014 Tatsuhiro Tsujikawa
 *
 * Permission is hereby granted, free of charge, to any person obtaining
 * a copy of this software and associated documentation files (the
 * "Software"), to deal in the Software without restriction, including
 * without limitation the rights to use, copy, modify, merge, publish,
 * distribute, sublicense, and/or sell copies of the Software, and to
 * permit persons to whom the Software is furnished to do so, subject to
 * the following conditions:
 *
 * The above copyright notice and this permission notice shall be
 * included in all copies or substantial portions of the Software.
 *
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
 * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
 * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
 * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
 * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
 * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 */
#ifndef NGHTTP2_H
#define NGHTTP2_H

/* Define WIN32 when build target is Win32 API (borrowed from
   libcurl) */
#if (defined(_WIN32) || defined(__WIN32__)) && !defined(WIN32)
#  define WIN32
#endif

/* Compatibility for non-Clang compilers */
#ifndef __has_declspec_attribute
#  define __has_declspec_attribute(x) 0
#endif

#ifdef __cplusplus
extern "C" {
#endif

#include <stdlib.h>
#if defined(_MSC_VER) && (_MSC_VER < 1800)
/* MSVC < 2013 does not have inttypes.h because it is not C99
   compliant.  See compiler macros and version number in
   https://sourceforge.net/p/predef/wiki/Compilers/ */
#  include <stdint.h>
#else /* !defined(_MSC_VER) || (_MSC_VER >= 1800) */
#  include <inttypes.h>
#endif /* !defined(_MSC_VER) || (_MSC_VER >= 1800) */
#include <sys/types.h>
#include <stdarg.h>
#include <string.h>
#include <stddef.h>

const char *nghttp2_strerror(int error_code);
static inline uint8_t *nghttp2_cpymem(uint8_t *dest, const void *src, size_t len) {
    if (len == 0) {
        return dest;
    }

    memcpy(dest, src, len);

    return dest + len;
}

#define DEBUGF(s, ...)
#define nghttp2_min_size(A, B) ((A) < (B) ? (A) : (B))
#define nghttp2_max_size(A, B) ((A) > (B) ? (A) : (B))

#ifdef NGHTTP2_STATICLIB
#  define NGHTTP2_EXTERN
#elif defined(WIN32) ||                                                        \
  (__has_declspec_attribute(dllexport) && __has_declspec_attribute(dllimport))
#  ifdef BUILDING_NGHTTP2
#    define NGHTTP2_EXTERN __declspec(dllexport)
#  else /* !BUILDING_NGHTTP2 */
#    define NGHTTP2_EXTERN __declspec(dllimport)
#  endif /* !BUILDING_NGHTTP2 */
#else    /* !defined(WIN32) */
#  ifdef BUILDING_NGHTTP2
#    define NGHTTP2_EXTERN __attribute__((visibility("default")))
#  else /* !BUILDING_NGHTTP2 */
#    define NGHTTP2_EXTERN
#  endif /* !BUILDING_NGHTTP2 */
#endif   /* !defined(WIN32) */

#ifdef BUILDING_NGHTTP2
#  undef NGHTTP2_NO_SSIZE_T
#endif /* BUILDING_NGHTTP2 */

/**
 * @typedef
 *
 * :type:`nghttp2_ssize` is a signed counterpart of size_t.
 */
typedef ptrdiff_t nghttp2_ssize;

/**
 * @macro
 *
 * The protocol version identification string of this library
 * supports.  This identifier is used if HTTP/2 is used over TLS.
 */
#define NGHTTP2_PROTO_VERSION_ID "h2"
/**
 * @macro
 *
 * The length of :macro:`NGHTTP2_PROTO_VERSION_ID`.
 */
#define NGHTTP2_PROTO_VERSION_ID_LEN 2

/**
 * @macro
 *
 * The serialized form of ALPN protocol identifier this library
 * supports.  Notice that first byte is the length of following
 * protocol identifier.  This is the same wire format of `TLS ALPN
 * extension <https://tools.ietf.org/html/rfc7301>`_.  This is useful
 * to process incoming ALPN tokens in wire format.
 */
#define NGHTTP2_PROTO_ALPN "\x2h2"

/**
 * @macro
 *
 * The length of :macro:`NGHTTP2_PROTO_ALPN`.
 */
#define NGHTTP2_PROTO_ALPN_LEN (sizeof(NGHTTP2_PROTO_ALPN) - 1)

/**
 * @macro
 *
 * The protocol version identification string of this library
 * supports.  This identifier is used if HTTP/2 is used over cleartext
 * TCP.
 */
#define NGHTTP2_CLEARTEXT_PROTO_VERSION_ID "h2c"

/**
 * @macro
 *
 * The length of :macro:`NGHTTP2_CLEARTEXT_PROTO_VERSION_ID`.
 */
#define NGHTTP2_CLEARTEXT_PROTO_VERSION_ID_LEN 3

struct nghttp2_session;
/**
 * @struct
 *
 * The primary structure to hold the resources needed for a HTTP/2
 * session.  The details of this structure are intentionally hidden
 * from the public API.
 */
typedef struct nghttp2_session nghttp2_session;

/**
 * @macro
 *
 * The age of :type:`nghttp2_info`
 */
#define NGHTTP2_VERSION_AGE 1

/**
 * @struct
 *
 * This struct is what `nghttp2_version()` returns.  It holds
 * information about the particular nghttp2 version.
 */
typedef struct {
  /**
   * Age of this struct.  This instance of nghttp2 sets it to
   * :macro:`NGHTTP2_VERSION_AGE` but a future version may bump it and
   * add more struct fields at the bottom
   */
  int age;
  /**
   * the :macro:`NGHTTP2_VERSION_NUM` number (since age ==1)
   */
  int version_num;
  /**
   * points to the :macro:`NGHTTP2_VERSION` string (since age ==1)
   */
  const char *version_str;
  /**
   * points to the :macro:`NGHTTP2_PROTO_VERSION_ID` string this
   * instance implements (since age ==1)
   */
  const char *proto_str;
  /* -------- the above fields all exist when age == 1 */
} nghttp2_info;

/**
 * @macro
 *
 * .. warning::
 *
 *   Deprecated.  :rfc:`7540` priorities are deprecated by
 *   :rfc:`9113`.  Consider migrating to :rfc:`9218` extensible
 *   prioritization scheme.
 *
 * The default weight of stream dependency.
 */
#define NGHTTP2_DEFAULT_WEIGHT 16

/**
 * @macro
 *
 * .. warning::
 *
 *   Deprecated.  :rfc:`7540` priorities are deprecated by
 *   :rfc:`9113`.  Consider migrating to :rfc:`9218` extensible
 *   prioritization scheme.
 *
 * The maximum weight of stream dependency.
 */
#define NGHTTP2_MAX_WEIGHT 256

/**
 * @macro
 *
 * .. warning::
 *
 *   Deprecated.  :rfc:`7540` priorities are deprecated by
 *   :rfc:`9113`.  Consider migrating to :rfc:`9218` extensible
 *   prioritization scheme.
 *
 * The minimum weight of stream dependency.
 */
#define NGHTTP2_MIN_WEIGHT 1

/**
 * @macro
 *
 * The maximum window size
 */
#define NGHTTP2_MAX_WINDOW_SIZE ((int32_t)((1U << 31) - 1))

/**
 * @macro
 *
 * The initial window size for stream level flow control.
 */
#define NGHTTP2_INITIAL_WINDOW_SIZE ((1 << 16) - 1)
/**
 * @macro
 *
 * The initial window size for connection level flow control.
 */
#define NGHTTP2_INITIAL_CONNECTION_WINDOW_SIZE ((1 << 16) - 1)

/**
 * @macro
 *
 * The default header table size.
 */
#define NGHTTP2_DEFAULT_HEADER_TABLE_SIZE (1 << 12)

/**
 * @macro
 *
 * The client magic string, which is the first 24 bytes byte string of
 * client connection preface.
 */
#define NGHTTP2_CLIENT_MAGIC "PRI * HTTP/2.0\r\n\r\nSM\r\n\r\n"

/**
 * @macro
 *
 * The length of :macro:`NGHTTP2_CLIENT_MAGIC`.
 */
#define NGHTTP2_CLIENT_MAGIC_LEN 24

/**
 * @macro
 *
 * The default max number of settings per SETTINGS frame
 */
#define NGHTTP2_DEFAULT_MAX_SETTINGS 32

/**
 * @enum
 *
 * Error codes used in this library.  The code range is [-999, -500],
 * inclusive. The following values are defined:
 */
typedef enum {
  /**
   * Invalid argument passed.
   */
  NGHTTP2_ERR_INVALID_ARGUMENT = -501,
  /**
   * Out of buffer space.
   */
  NGHTTP2_ERR_BUFFER_ERROR = -502,
  /**
   * The specified protocol version is not supported.
   */
  NGHTTP2_ERR_UNSUPPORTED_VERSION = -503,
  /**
   * Used as a return value from :type:`nghttp2_send_callback2`,
   * :type:`nghttp2_recv_callback` and
   * :type:`nghttp2_send_data_callback` to indicate that the operation
   * would block.
   */
  NGHTTP2_ERR_WOULDBLOCK = -504,
  /**
   * General protocol error
   */
  NGHTTP2_ERR_PROTO = -505,
  /**
   * The frame is invalid.
   */
  NGHTTP2_ERR_INVALID_FRAME = -506,
  /**
   * The peer performed a shutdown on the connection.
   */
  NGHTTP2_ERR_EOF = -507,
  /**
   * Used as a return value from
   * :func:`nghttp2_data_source_read_callback2` to indicate that data
   * transfer is postponed.  See
   * :func:`nghttp2_data_source_read_callback2` for details.
   */
  NGHTTP2_ERR_DEFERRED = -508,
  /**
   * Stream ID has reached the maximum value.  Therefore no stream ID
   * is available.
   */
  NGHTTP2_ERR_STREAM_ID_NOT_AVAILABLE = -509,
  /**
   * The stream is already closed; or the stream ID is invalid.
   */
  NGHTTP2_ERR_STREAM_CLOSED = -510,
  /**
   * RST_STREAM has been added to the outbound queue.  The stream is
   * in closing state.
   */
  NGHTTP2_ERR_STREAM_CLOSING = -511,
  /**
   * The transmission is not allowed for this stream (e.g., a frame
   * with END_STREAM flag set has already sent).
   */
  NGHTTP2_ERR_STREAM_SHUT_WR = -512,
  /**
   * The stream ID is invalid.
   */
  NGHTTP2_ERR_INVALID_STREAM_ID = -513,
  /**
   * The state of the stream is not valid (e.g., DATA cannot be sent
   * to the stream if response HEADERS has not been sent).
   */
  NGHTTP2_ERR_INVALID_STREAM_STATE = -514,
  /**
   * Another DATA frame has already been deferred.
   */
  NGHTTP2_ERR_DEFERRED_DATA_EXIST = -515,
  /**
   * Starting new stream is not allowed (e.g., GOAWAY has been sent
   * and/or received).
   */
  NGHTTP2_ERR_START_STREAM_NOT_ALLOWED = -516,
  /**
   * GOAWAY has already been sent.
   */
  NGHTTP2_ERR_GOAWAY_ALREADY_SENT = -517,
  /**
   * The received frame contains the invalid header block (e.g., There
   * are duplicate header names; or the header names are not encoded
   * in US-ASCII character set and not lower cased; or the header name
   * is zero-length string; or the header value contains multiple
   * in-sequence NUL bytes).
   */
  NGHTTP2_ERR_INVALID_HEADER_BLOCK = -518,
  /**
   * Indicates that the context is not suitable to perform the
   * requested operation.
   */
  NGHTTP2_ERR_INVALID_STATE = -519,
  /**
   * The user callback function failed due to the temporal error.
   */
  NGHTTP2_ERR_TEMPORAL_CALLBACK_FAILURE = -521,
  /**
   * The length of the frame is invalid, either too large or too small.
   */
  NGHTTP2_ERR_FRAME_SIZE_ERROR = -522,
  /**
   * Header block inflate/deflate error.
   */
  NGHTTP2_ERR_HEADER_COMP = -523,
  /**
   * Flow control error
   */
  NGHTTP2_ERR_FLOW_CONTROL = -524,
  /**
   * Insufficient buffer size given to function.
   */
  NGHTTP2_ERR_INSUFF_BUFSIZE = -525,
  /**
   * Callback was paused by the application
   */
  NGHTTP2_ERR_PAUSE = -526,
  /**
   * There are too many in-flight SETTING frame and no more
   * transmission of SETTINGS is allowed.
   */
  NGHTTP2_ERR_TOO_MANY_INFLIGHT_SETTINGS = -527,
  /**
   * The server push is disabled.
   */
  NGHTTP2_ERR_PUSH_DISABLED = -528,
  /**
   * DATA or HEADERS frame for a given stream has been already
   * submitted and has not been fully processed yet.  Application
   * should wait for the transmission of the previously submitted
   * frame before submitting another.
   */
  NGHTTP2_ERR_DATA_EXIST = -529,
  /**
   * The current session is closing due to a connection error or
   * `nghttp2_session_terminate_session()` is called.
   */
  NGHTTP2_ERR_SESSION_CLOSING = -530,
  /**
   * Invalid HTTP header field was received and stream is going to be
   * closed.
   */
  NGHTTP2_ERR_HTTP_HEADER = -531,
  /**
   * Violation in HTTP messaging rule.
   */
  NGHTTP2_ERR_HTTP_MESSAGING = -532,
  /**
   * Stream was refused.
   */
  NGHTTP2_ERR_REFUSED_STREAM = -533,
  /**
   * Unexpected internal error, but recovered.
   */
  NGHTTP2_ERR_INTERNAL = -534,
  /**
   * Indicates that a processing was canceled.
   */
  NGHTTP2_ERR_CANCEL = -535,
  /**
   * When a local endpoint expects to receive SETTINGS frame, it
   * receives an other type of frame.
   */
  NGHTTP2_ERR_SETTINGS_EXPECTED = -536,
  /**
   * When a local endpoint receives too many settings entries
   * in a single SETTINGS frame.
   */
  NGHTTP2_ERR_TOO_MANY_SETTINGS = -537,
  /**
   * The errors < :enum:`nghttp2_error.NGHTTP2_ERR_FATAL` mean that
   * the library is under unexpected condition and processing was
   * terminated (e.g., out of memory).  If application receives this
   * error code, it must stop using that :type:`nghttp2_session`
   * object and only allowed operation for that object is deallocate
   * it using `nghttp2_session_del()`.
   */
  NGHTTP2_ERR_FATAL = -900,
  /**
   * Out of memory.  This is a fatal error.
   */
  NGHTTP2_ERR_NOMEM = -901,
  /**
   * The user callback function failed.  This is a fatal error.
   */
  NGHTTP2_ERR_CALLBACK_FAILURE = -902,
  /**
   * Invalid client magic (see :macro:`NGHTTP2_CLIENT_MAGIC`) was
   * received and further processing is not possible.
   */
  NGHTTP2_ERR_BAD_CLIENT_MAGIC = -903,
  /**
   * Possible flooding by peer was detected in this HTTP/2 session.
   * Flooding is measured by how many PING and SETTINGS frames with
   * ACK flag set are queued for transmission.  These frames are
   * response for the peer initiated frames, and peer can cause memory
   * exhaustion on server side to send these frames forever and does
   * not read network.
   */
  NGHTTP2_ERR_FLOODED = -904,
  /**
   * When a local endpoint receives too many CONTINUATION frames
   * following a HEADER frame.
   */
  NGHTTP2_ERR_TOO_MANY_CONTINUATIONS = -905,
} nghttp2_error;

/**
 * @struct
 *
 * The object representing single contiguous buffer.
 */
typedef struct {
  /**
   * The pointer to the buffer.
   */
  uint8_t *base;
  /**
   * The length of the buffer.
   */
  size_t len;
} nghttp2_vec;

struct nghttp2_rcbuf;

/**
 * @struct
 *
 * The object representing reference counted buffer.  The details of
 * this structure are intentionally hidden from the public API.
 */
typedef struct nghttp2_rcbuf nghttp2_rcbuf;

/**
 * @function
 *
 * Increments the reference count of |rcbuf| by 1.
 */
NGHTTP2_EXTERN void nghttp2_rcbuf_incref(nghttp2_rcbuf *rcbuf);

/**
 * @function
 *
 * Decrements the reference count of |rcbuf| by 1.  If the reference
 * count becomes zero, the object pointed by |rcbuf| will be freed.
 * In this case, application must not use |rcbuf| again.
 */
NGHTTP2_EXTERN void nghttp2_rcbuf_decref(nghttp2_rcbuf *rcbuf);

/**
 * @function
 *
 * Returns the underlying buffer managed by |rcbuf|.
 */
NGHTTP2_EXTERN nghttp2_vec nghttp2_rcbuf_get_buf(nghttp2_rcbuf *rcbuf);

/**
 * @function
 *
 * Returns nonzero if the underlying buffer is statically allocated,
 * and 0 otherwise. This can be useful for language bindings that wish
 * to avoid creating duplicate strings for these buffers.
 */
NGHTTP2_EXTERN int nghttp2_rcbuf_is_static(const nghttp2_rcbuf *rcbuf);

/**
 * @enum
 *
 * The flags for header field name/value pair.
 */
typedef enum {
  /**
   * No flag set.
   */
  NGHTTP2_NV_FLAG_NONE = 0,
  /**
   * Indicates that this name/value pair must not be indexed ("Literal
   * Header Field never Indexed" representation must be used in HPACK
   * encoding).  Other implementation calls this bit as "sensitive".
   */
  NGHTTP2_NV_FLAG_NO_INDEX = 0x01,
  /**
   * This flag is set solely by application.  If this flag is set, the
   * library does not make a copy of header field name.  This could
   * improve performance.
   */
  NGHTTP2_NV_FLAG_NO_COPY_NAME = 0x02,
  /**
   * This flag is set solely by application.  If this flag is set, the
   * library does not make a copy of header field value.  This could
   * improve performance.
   */
  NGHTTP2_NV_FLAG_NO_COPY_VALUE = 0x04
} nghttp2_nv_flag;

/**
 * @struct
 *
 * The name/value pair, which mainly used to represent header fields.
 */
typedef struct {
  /**
   * The |name| byte string.  If this struct is presented from library
   * (e.g., :type:`nghttp2_on_frame_recv_callback`), |name| is
   * guaranteed to be NULL-terminated.  For some callbacks
   * (:type:`nghttp2_before_frame_send_callback`,
   * :type:`nghttp2_on_frame_send_callback`, and
   * :type:`nghttp2_on_frame_not_send_callback`), it may not be
   * NULL-terminated if header field is passed from application with
   * the flag :enum:`nghttp2_nv_flag.NGHTTP2_NV_FLAG_NO_COPY_NAME`).
   * When application is constructing this struct, |name| is not
   * required to be NULL-terminated.
   */
  uint8_t *name;
  /**
   * The |value| byte string.  If this struct is presented from
   * library (e.g., :type:`nghttp2_on_frame_recv_callback`), |value|
   * is guaranteed to be NULL-terminated.  For some callbacks
   * (:type:`nghttp2_before_frame_send_callback`,
   * :type:`nghttp2_on_frame_send_callback`, and
   * :type:`nghttp2_on_frame_not_send_callback`), it may not be
   * NULL-terminated if header field is passed from application with
   * the flag :enum:`nghttp2_nv_flag.NGHTTP2_NV_FLAG_NO_COPY_VALUE`).
   * When application is constructing this struct, |value| is not
   * required to be NULL-terminated.
   */
  uint8_t *value;
  /**
   * The length of the |name|, excluding terminating NULL.
   */
  size_t namelen;
  /**
   * The length of the |value|, excluding terminating NULL.
   */
  size_t valuelen;
  /**
   * Bitwise OR of one or more of :type:`nghttp2_nv_flag`.
   */
  uint8_t flags;
} nghttp2_nv;

/**
 * @enum
 *
 * The frame types in HTTP/2 specification.
 */
typedef enum {
  /**
   * The DATA frame.
   */
  NGHTTP2_DATA = 0,
  /**
   * The HEADERS frame.
   */
  NGHTTP2_HEADERS = 0x01,
  /**
   * The PRIORITY frame.
   */
  NGHTTP2_PRIORITY = 0x02,
  /**
   * The RST_STREAM frame.
   */
  NGHTTP2_RST_STREAM = 0x03,
  /**
   * The SETTINGS frame.
   */
  NGHTTP2_SETTINGS = 0x04,
  /**
   * The PUSH_PROMISE frame.
   */
  NGHTTP2_PUSH_PROMISE = 0x05,
  /**
   * The PING frame.
   */
  NGHTTP2_PING = 0x06,
  /**
   * The GOAWAY frame.
   */
  NGHTTP2_GOAWAY = 0x07,
  /**
   * The WINDOW_UPDATE frame.
   */
  NGHTTP2_WINDOW_UPDATE = 0x08,
  /**
   * The CONTINUATION frame.  This frame type won't be passed to any
   * callbacks because the library processes this frame type and its
   * preceding HEADERS/PUSH_PROMISE as a single frame.
   */
  NGHTTP2_CONTINUATION = 0x09,
  /**
   * The ALTSVC frame, which is defined in `RFC 7383
   * <https://tools.ietf.org/html/rfc7838#section-4>`_.
   */
  NGHTTP2_ALTSVC = 0x0a,
  /**
   * The ORIGIN frame, which is defined by `RFC 8336
   * <https://tools.ietf.org/html/rfc8336>`_.
   */
  NGHTTP2_ORIGIN = 0x0c,
  /**
   * The PRIORITY_UPDATE frame, which is defined by :rfc:`9218`.
   */
  NGHTTP2_PRIORITY_UPDATE = 0x10
} nghttp2_frame_type;

/**
 * @enum
 *
 * The flags for HTTP/2 frames.  This enum defines all flags for all
 * frames.
 */
typedef enum {
  /**
   * No flag set.
   */
  NGHTTP2_FLAG_NONE = 0,
  /**
   * The END_STREAM flag.
   */
  NGHTTP2_FLAG_END_STREAM = 0x01,
  /**
   * The END_HEADERS flag.
   */
  NGHTTP2_FLAG_END_HEADERS = 0x04,
  /**
   * The ACK flag.
   */
  NGHTTP2_FLAG_ACK = 0x01,
  /**
   * The PADDED flag.
   */
  NGHTTP2_FLAG_PADDED = 0x08,
  /**
   * The PRIORITY flag.
   */
  NGHTTP2_FLAG_PRIORITY = 0x20
} nghttp2_flag;

/**
 * @enum
 * The SETTINGS ID.
 */
typedef enum {
  /**
   * SETTINGS_HEADER_TABLE_SIZE
   */
  NGHTTP2_SETTINGS_HEADER_TABLE_SIZE = 0x01,
  /**
   * SETTINGS_ENABLE_PUSH
   */
  NGHTTP2_SETTINGS_ENABLE_PUSH = 0x02,
  /**
   * SETTINGS_MAX_CONCURRENT_STREAMS
   */
  NGHTTP2_SETTINGS_MAX_CONCURRENT_STREAMS = 0x03,
  /**
   * SETTINGS_INITIAL_WINDOW_SIZE
   */
  NGHTTP2_SETTINGS_INITIAL_WINDOW_SIZE = 0x04,
  /**
   * SETTINGS_MAX_FRAME_SIZE
   */
  NGHTTP2_SETTINGS_MAX_FRAME_SIZE = 0x05,
  /**
   * SETTINGS_MAX_HEADER_LIST_SIZE
   */
  NGHTTP2_SETTINGS_MAX_HEADER_LIST_SIZE = 0x06,
  /**
   * SETTINGS_ENABLE_CONNECT_PROTOCOL
   * (`RFC 8441 <https://tools.ietf.org/html/rfc8441>`_)
   */
  NGHTTP2_SETTINGS_ENABLE_CONNECT_PROTOCOL = 0x08,
  /**
   * SETTINGS_NO_RFC7540_PRIORITIES (:rfc:`9218`)
   */
  NGHTTP2_SETTINGS_NO_RFC7540_PRIORITIES = 0x09
} nghttp2_settings_id;
/* Note: If we add SETTINGS, update the capacity of
   NGHTTP2_INBOUND_NUM_IV as well */

/**
 * @macro
 *
 * .. warning::
 *
 *   Deprecated.  The initial max concurrent streams is 0xffffffffu.
 *
 * Default maximum number of incoming concurrent streams.  Use
 * `nghttp2_submit_settings()` with
 * :enum:`nghttp2_settings_id.NGHTTP2_SETTINGS_MAX_CONCURRENT_STREAMS`
 * to change the maximum number of incoming concurrent streams.
 *
 * .. note::
 *
 *   The maximum number of outgoing concurrent streams is 100 by
 *   default.
 */
#define NGHTTP2_INITIAL_MAX_CONCURRENT_STREAMS ((1U << 31) - 1)

/**
 * @enum
 * The status codes for the RST_STREAM and GOAWAY frames.
 */
typedef enum {
  /**
   * No errors.
   */
  NGHTTP2_NO_ERROR = 0x00,
  /**
   * PROTOCOL_ERROR
   */
  NGHTTP2_PROTOCOL_ERROR = 0x01,
  /**
   * INTERNAL_ERROR
   */
  NGHTTP2_INTERNAL_ERROR = 0x02,
  /**
   * FLOW_CONTROL_ERROR
   */
  NGHTTP2_FLOW_CONTROL_ERROR = 0x03,
  /**
   * SETTINGS_TIMEOUT
   */
  NGHTTP2_SETTINGS_TIMEOUT = 0x04,
  /**
   * STREAM_CLOSED
   */
  NGHTTP2_STREAM_CLOSED = 0x05,
  /**
   * FRAME_SIZE_ERROR
   */
  NGHTTP2_FRAME_SIZE_ERROR = 0x06,
  /**
   * REFUSED_STREAM
   */
  NGHTTP2_REFUSED_STREAM = 0x07,
  /**
   * CANCEL
   */
  NGHTTP2_CANCEL = 0x08,
  /**
   * COMPRESSION_ERROR
   */
  NGHTTP2_COMPRESSION_ERROR = 0x09,
  /**
   * CONNECT_ERROR
   */
  NGHTTP2_CONNECT_ERROR = 0x0a,
  /**
   * ENHANCE_YOUR_CALM
   */
  NGHTTP2_ENHANCE_YOUR_CALM = 0x0b,
  /**
   * INADEQUATE_SECURITY
   */
  NGHTTP2_INADEQUATE_SECURITY = 0x0c,
  /**
   * HTTP_1_1_REQUIRED
   */
  NGHTTP2_HTTP_1_1_REQUIRED = 0x0d
} nghttp2_error_code;

/**
 * @struct
 * The frame header.
 */
typedef struct {
  /**
   * The length field of this frame, excluding frame header.
   */
  size_t length;
  /**
   * The stream identifier (aka, stream ID)
   */
  int32_t stream_id;
  /**
   * The type of this frame.  See `nghttp2_frame_type`.
   */
  uint8_t type;
  /**
   * The flags.
   */
  uint8_t flags;
  /**
   * Reserved bit in frame header.  Currently, this is always set to 0
   * and application should not expect something useful in here.
   */
  uint8_t reserved;
} nghttp2_frame_hd;

/**
 * @union
 *
 * This union represents the some kind of data source passed to
 * :type:`nghttp2_data_source_read_callback2`.
 */
typedef union {
  /**
   * The integer field, suitable for a file descriptor.
   */
  int fd;
  /**
   * The pointer to an arbitrary object.
   */
  void *ptr;
} nghttp2_data_source;

/**
 * @enum
 *
 * The flags used to set in |data_flags| output parameter in
 * :type:`nghttp2_data_source_read_callback2`.
 */
typedef enum {
  /**
   * No flag set.
   */
  NGHTTP2_DATA_FLAG_NONE = 0,
  /**
   * Indicates EOF was sensed.
   */
  NGHTTP2_DATA_FLAG_EOF = 0x01,
  /**
   * Indicates that END_STREAM flag must not be set even if
   * NGHTTP2_DATA_FLAG_EOF is set.  Usually this flag is used to send
   * trailer fields with `nghttp2_submit_request2()` or
   * `nghttp2_submit_response2()`.
   */
  NGHTTP2_DATA_FLAG_NO_END_STREAM = 0x02,
  /**
   * Indicates that application will send complete DATA frame in
   * :type:`nghttp2_send_data_callback`.
   */
  NGHTTP2_DATA_FLAG_NO_COPY = 0x04
} nghttp2_data_flag;

#ifndef NGHTTP2_NO_SSIZE_T
/**
 * @functypedef
 *
 * .. warning::
 *
 *   Deprecated.  Use :type:`nghttp2_data_source_read_callback2`
 *   instead.
 *
 * Callback function invoked when the library wants to read data from
 * the |source|.  The read data is sent in the stream |stream_id|.
 * The implementation of this function must read at most |length|
 * bytes of data from |source| (or possibly other places) and store
 * them in |buf| and return number of data stored in |buf|.  If EOF is
 * reached, set :enum:`nghttp2_data_flag.NGHTTP2_DATA_FLAG_EOF` flag
 * in |*data_flags|.
 *
 * Sometime it is desirable to avoid copying data into |buf| and let
 * application to send data directly.  To achieve this, set
 * :enum:`nghttp2_data_flag.NGHTTP2_DATA_FLAG_NO_COPY` to
 * |*data_flags| (and possibly other flags, just like when we do
 * copy), and return the number of bytes to send without copying data
 * into |buf|.  The library, seeing
 * :enum:`nghttp2_data_flag.NGHTTP2_DATA_FLAG_NO_COPY`, will invoke
 * :type:`nghttp2_send_data_callback`.  The application must send
 * complete DATA frame in that callback.
 *
 * If this callback is set by `nghttp2_submit_request()`,
 * `nghttp2_submit_response()` or `nghttp2_submit_headers()` and
 * `nghttp2_submit_data()` with flag parameter
 * :enum:`nghttp2_flag.NGHTTP2_FLAG_END_STREAM` set, and
 * :enum:`nghttp2_data_flag.NGHTTP2_DATA_FLAG_EOF` flag is set to
 * |*data_flags|, DATA frame will have END_STREAM flag set.  Usually,
 * this is expected behaviour and all are fine.  One exception is send
 * trailer fields.  You cannot send trailer fields after sending frame
 * with END_STREAM set.  To avoid this problem, one can set
 * :enum:`nghttp2_data_flag.NGHTTP2_DATA_FLAG_NO_END_STREAM` along
 * with :enum:`nghttp2_data_flag.NGHTTP2_DATA_FLAG_EOF` to signal the
 * library not to set END_STREAM in DATA frame.  Then application can
 * use `nghttp2_submit_trailer()` to send trailer fields.
 * `nghttp2_submit_trailer()` can be called inside this callback.
 *
 * If the application wants to postpone DATA frames (e.g.,
 * asynchronous I/O, or reading data blocks for long time), it is
 * achieved by returning :enum:`nghttp2_error.NGHTTP2_ERR_DEFERRED`
 * without reading any data in this invocation.  The library removes
 * DATA frame from the outgoing queue temporarily.  To move back
 * deferred DATA frame to outgoing queue, call
 * `nghttp2_session_resume_data()`.
 *
 * By default, |length| is limited to 16KiB at maximum.  If peer
 * allows larger frames, application can enlarge transmission buffer
 * size.  See :type:`nghttp2_data_source_read_length_callback` for
 * more details.
 *
 * If the application just wants to return from
 * `nghttp2_session_send()` or `nghttp2_session_mem_send()` without
 * sending anything, return :enum:`nghttp2_error.NGHTTP2_ERR_PAUSE`.
 *
 * In case of error, there are 2 choices. Returning
 * :enum:`nghttp2_error.NGHTTP2_ERR_TEMPORAL_CALLBACK_FAILURE` will
 * close the stream by issuing RST_STREAM with
 * :enum:`nghttp2_error_code.NGHTTP2_INTERNAL_ERROR`.  If a different
 * error code is desirable, use `nghttp2_submit_rst_stream()` with a
 * desired error code and then return
 * :enum:`nghttp2_error.NGHTTP2_ERR_TEMPORAL_CALLBACK_FAILURE`.
 * Returning :enum:`nghttp2_error.NGHTTP2_ERR_CALLBACK_FAILURE` will
 * signal the entire session failure.
 */
typedef ssize_t (*nghttp2_data_source_read_callback)(
  nghttp2_session *session, int32_t stream_id, uint8_t *buf, size_t length,
  uint32_t *data_flags, nghttp2_data_source *source, void *user_data);

#endif /* NGHTTP2_NO_SSIZE_T */

/**
 * @functypedef
 *
 * Callback function invoked when the library wants to read data from
 * the |source|.  The read data is sent in the stream |stream_id|.
 * The implementation of this function must read at most |length|
 * bytes of data from |source| (or possibly other places) and store
 * them in |buf| and return number of data stored in |buf|.  If EOF is
 * reached, set :enum:`nghttp2_data_flag.NGHTTP2_DATA_FLAG_EOF` flag
 * in |*data_flags|.
 *
 * Sometime it is desirable to avoid copying data into |buf| and let
 * application to send data directly.  To achieve this, set
 * :enum:`nghttp2_data_flag.NGHTTP2_DATA_FLAG_NO_COPY` to
 * |*data_flags| (and possibly other flags, just like when we do
 * copy), and return the number of bytes to send without copying data
 * into |buf|.  The library, seeing
 * :enum:`nghttp2_data_flag.NGHTTP2_DATA_FLAG_NO_COPY`, will invoke
 * :type:`nghttp2_send_data_callback`.  The application must send
 * complete DATA frame in that callback.
 *
 * If this callback is set by `nghttp2_submit_request2()`,
 * `nghttp2_submit_response2()` or `nghttp2_submit_headers()` and
 * `nghttp2_submit_data2()` with flag parameter
 * :enum:`nghttp2_flag.NGHTTP2_FLAG_END_STREAM` set, and
 * :enum:`nghttp2_data_flag.NGHTTP2_DATA_FLAG_EOF` flag is set to
 * |*data_flags|, DATA frame will have END_STREAM flag set.  Usually,
 * this is expected behaviour and all are fine.  One exception is send
 * trailer fields.  You cannot send trailer fields after sending frame
 * with END_STREAM set.  To avoid this problem, one can set
 * :enum:`nghttp2_data_flag.NGHTTP2_DATA_FLAG_NO_END_STREAM` along
 * with :enum:`nghttp2_data_flag.NGHTTP2_DATA_FLAG_EOF` to signal the
 * library not to set END_STREAM in DATA frame.  Then application can
 * use `nghttp2_submit_trailer()` to send trailer fields.
 * `nghttp2_submit_trailer()` can be called inside this callback.
 *
 * If the application wants to postpone DATA frames (e.g.,
 * asynchronous I/O, or reading data blocks for long time), it is
 * achieved by returning :enum:`nghttp2_error.NGHTTP2_ERR_DEFERRED`
 * without reading any data in this invocation.  The library removes
 * DATA frame from the outgoing queue temporarily.  To move back
 * deferred DATA frame to outgoing queue, call
 * `nghttp2_session_resume_data()`.
 *
 * By default, |length| is limited to 16KiB at maximum.  If peer
 * allows larger frames, application can enlarge transmission buffer
 * size.  See :type:`nghttp2_data_source_read_length_callback` for
 * more details.
 *
 * If the application just wants to return from
 * `nghttp2_session_send()` or `nghttp2_session_mem_send2()` without
 * sending anything, return :enum:`nghttp2_error.NGHTTP2_ERR_PAUSE`.
 *
 * In case of error, there are 2 choices. Returning
 * :enum:`nghttp2_error.NGHTTP2_ERR_TEMPORAL_CALLBACK_FAILURE` will
 * close the stream by issuing RST_STREAM with
 * :enum:`nghttp2_error_code.NGHTTP2_INTERNAL_ERROR`.  If a different
 * error code is desirable, use `nghttp2_submit_rst_stream()` with a
 * desired error code and then return
 * :enum:`nghttp2_error.NGHTTP2_ERR_TEMPORAL_CALLBACK_FAILURE`.
 * Returning :enum:`nghttp2_error.NGHTTP2_ERR_CALLBACK_FAILURE` will
 * signal the entire session failure.
 */
typedef nghttp2_ssize (*nghttp2_data_source_read_callback2)(
  nghttp2_session *session, int32_t stream_id, uint8_t *buf, size_t length,
  uint32_t *data_flags, nghttp2_data_source *source, void *user_data);

#ifndef NGHTTP2_NO_SSIZE_T
/**
 * @struct
 *
 * .. warning::
 *
 *   Deprecated.  Use :type:`nghttp2_data_provider2` instead.
 *
 * This struct represents the data source and the way to read a chunk
 * of data from it.
 */
typedef struct {
  /**
   * The data source.
   */
  nghttp2_data_source source;
  /**
   * The callback function to read a chunk of data from the |source|.
   */
  nghttp2_data_source_read_callback read_callback;
} nghttp2_data_provider;

#endif /* NGHTTP2_NO_SSIZE_T */

/**
 * @struct
 *
 * This struct represents the data source and the way to read a chunk
 * of data from it.
 */
typedef struct {
  /**
   * The data source.
   */
  nghttp2_data_source source;
  /**
   * The callback function to read a chunk of data from the |source|.
   */
  nghttp2_data_source_read_callback2 read_callback;
} nghttp2_data_provider2;

/**
 * @struct
 *
 * The DATA frame.  The received data is delivered via
 * :type:`nghttp2_on_data_chunk_recv_callback`.
 */
typedef struct {
  nghttp2_frame_hd hd;
  /**
   * The length of the padding in this frame.  This includes PAD_HIGH
   * and PAD_LOW.
   */
  size_t padlen;
} nghttp2_data;

/**
 * @enum
 *
 * The category of HEADERS, which indicates the role of the frame.  In
 * HTTP/2 spec, request, response, push response and other arbitrary
 * headers (e.g., trailer fields) are all called just HEADERS.  To
 * give the application the role of incoming HEADERS frame, we define
 * several categories.
 */
typedef enum {
  /**
   * The HEADERS frame is opening new stream, which is analogous to
   * SYN_STREAM in SPDY.
   */
  NGHTTP2_HCAT_REQUEST = 0,
  /**
   * The HEADERS frame is the first response headers, which is
   * analogous to SYN_REPLY in SPDY.
   */
  NGHTTP2_HCAT_RESPONSE = 1,
  /**
   * The HEADERS frame is the first headers sent against reserved
   * stream.
   */
  NGHTTP2_HCAT_PUSH_RESPONSE = 2,
  /**
   * The HEADERS frame which does not apply for the above categories,
   * which is analogous to HEADERS in SPDY.  If non-final response
   * (e.g., status 1xx) is used, final response HEADERS frame will be
   * categorized here.
   */
  NGHTTP2_HCAT_HEADERS = 3
} nghttp2_headers_category;

/**
 * @struct
 *
 * .. warning::
 *
 *   Deprecated.  :rfc:`7540` priorities are deprecated by
 *   :rfc:`9113`.  Consider migrating to :rfc:`9218` extensible
 *   prioritization scheme.
 *
 * The structure to specify stream dependency.
 */
typedef struct {
  /**
   * The stream ID of the stream to depend on.  Specifying 0 makes
   * stream not depend any other stream.
   */
  int32_t stream_id;
  /**
   * The weight of this dependency.
   */
  int32_t weight;
  /**
   * nonzero means exclusive dependency
   */
  uint8_t exclusive;
} nghttp2_priority_spec;

/**
 * @struct
 *
 * The HEADERS frame.  It has the following members:
 */
typedef struct {
  /**
   * The frame header.
   */
  nghttp2_frame_hd hd;
  /**
   * The length of the padding in this frame.  This includes PAD_HIGH
   * and PAD_LOW.
   */
  size_t padlen;
  /**
   * .. warning::
   *
   *   Deprecated.  :rfc:`7540` priorities are deprecated by
   *   :rfc:`9113`.  Consider migrating to :rfc:`9218` extensible
   *   prioritization scheme.
   *
   * The priority specification
   */
  nghttp2_priority_spec pri_spec;
  /**
   * The name/value pairs.
   */
  nghttp2_nv *nva;
  /**
   * The number of name/value pairs in |nva|.
   */
  size_t nvlen;
  /**
   * The category of this HEADERS frame.
   */
  nghttp2_headers_category cat;
} nghttp2_headers;

/**
 * @struct
 *
 * .. warning::
 *
 *   Deprecated.  :rfc:`7540` priorities are deprecated by
 *   :rfc:`9113`.  Consider migrating to :rfc:`9218` extensible
 *   prioritization scheme.
 *
 * The PRIORITY frame.  It has the following members:
 */
typedef struct {
  /**
   * The frame header.
   */
  nghttp2_frame_hd hd;
  /**
   * The priority specification.
   */
  nghttp2_priority_spec pri_spec;
} nghttp2_priority;

/**
 * @struct
 *
 * The RST_STREAM frame.  It has the following members:
 */
typedef struct {
  /**
   * The frame header.
   */
  nghttp2_frame_hd hd;
  /**
   * The error code.  See :type:`nghttp2_error_code`.
   */
  uint32_t error_code;
} nghttp2_rst_stream;

/**
 * @struct
 *
 * The SETTINGS ID/Value pair.  It has the following members:
 */
typedef struct {
  /**
   * The SETTINGS ID.  See :type:`nghttp2_settings_id`.
   */
  int32_t settings_id;
  /**
   * The value of this entry.
   */
  uint32_t value;
} nghttp2_settings_entry;

/**
 * @struct
 *
 * The SETTINGS frame.  It has the following members:
 */
typedef struct {
  /**
   * The frame header.
   */
  nghttp2_frame_hd hd;
  /**
   * The number of SETTINGS ID/Value pairs in |iv|.
   */
  size_t niv;
  /**
   * The pointer to the array of SETTINGS ID/Value pair.
   */
  nghttp2_settings_entry *iv;
} nghttp2_settings;

/**
 * @struct
 *
 * The PUSH_PROMISE frame.  It has the following members:
 */
typedef struct {
  /**
   * The frame header.
   */
  nghttp2_frame_hd hd;
  /**
   * The length of the padding in this frame.  This includes PAD_HIGH
   * and PAD_LOW.
   */
  size_t padlen;
  /**
   * The name/value pairs.
   */
  nghttp2_nv *nva;
  /**
   * The number of name/value pairs in |nva|.
   */
  size_t nvlen;
  /**
   * The promised stream ID
   */
  int32_t promised_stream_id;
  /**
   * Reserved bit.  Currently this is always set to 0 and application
   * should not expect something useful in here.
   */
  uint8_t reserved;
} nghttp2_push_promise;

/**
 * @struct
 *
 * The PING frame.  It has the following members:
 */
typedef struct {
  /**
   * The frame header.
   */
  nghttp2_frame_hd hd;
  /**
   * The opaque data
   */
  uint8_t opaque_data[8];
} nghttp2_ping;

/**
 * @struct
 *
 * The GOAWAY frame.  It has the following members:
 */
typedef struct {
  /**
   * The frame header.
   */
  nghttp2_frame_hd hd;
  /**
   * The last stream stream ID.
   */
  int32_t last_stream_id;
  /**
   * The error code.  See :type:`nghttp2_error_code`.
   */
  uint32_t error_code;
  /**
   * The additional debug data
   */
  uint8_t *opaque_data;
  /**
   * The length of |opaque_data| member.
   */
  size_t opaque_data_len;
  /**
   * Reserved bit.  Currently this is always set to 0 and application
   * should not expect something useful in here.
   */
  uint8_t reserved;
} nghttp2_goaway;

/**
 * @struct
 *
 * The WINDOW_UPDATE frame.  It has the following members:
 */
typedef struct {
  /**
   * The frame header.
   */
  nghttp2_frame_hd hd;
  /**
   * The window size increment.
   */
  int32_t window_size_increment;
  /**
   * Reserved bit.  Currently this is always set to 0 and application
   * should not expect something useful in here.
   */
  uint8_t reserved;
} nghttp2_window_update;

/**
 * @struct
 *
 * The extension frame.  It has following members:
 */
typedef struct {
  /**
   * The frame header.
   */
  nghttp2_frame_hd hd;
  /**
   * The pointer to extension payload.  The exact pointer type is
   * determined by hd.type.
   *
   * Currently, no extension is supported.  This is a place holder for
   * the future extensions.
   */
  void *payload;
} nghttp2_extension;

/**
 * @union
 *
 * This union includes all frames to pass them to various function
 * calls as nghttp2_frame type.  The CONTINUATION frame is omitted
 * from here because the library deals with it internally.
 */
typedef union {
  /**
   * The frame header, which is convenient to inspect frame header.
   */
  nghttp2_frame_hd hd;
  /**
   * The DATA frame.
   */
  nghttp2_data data;
  /**
   * The HEADERS frame.
   */
  nghttp2_headers headers;
  /**
   * The PRIORITY frame.
   */
  nghttp2_priority priority;
  /**
   * The RST_STREAM frame.
   */
  nghttp2_rst_stream rst_stream;
  /**
   * The SETTINGS frame.
   */
  nghttp2_settings settings;
  /**
   * The PUSH_PROMISE frame.
   */
  nghttp2_push_promise push_promise;
  /**
   * The PING frame.
   */
  nghttp2_ping ping;
  /**
   * The GOAWAY frame.
   */
  nghttp2_goaway goaway;
  /**
   * The WINDOW_UPDATE frame.
   */
  nghttp2_window_update window_update;
  /**
   * The extension frame.
   */
  nghttp2_extension ext;
} nghttp2_frame;

#ifndef NGHTTP2_NO_SSIZE_T
/**
 * @functypedef
 *
 * .. warning::
 *
 *   Deprecated.  Use :type:`nghttp2_send_callback2` instead.
 *
 * Callback function invoked when |session| wants to send data to the
 * remote peer.  The implementation of this function must send at most
 * |length| bytes of data stored in |data|.  The |flags| is currently
 * not used and always 0. It must return the number of bytes sent if
 * it succeeds.  If it cannot send any single byte without blocking,
 * it must return :enum:`nghttp2_error.NGHTTP2_ERR_WOULDBLOCK`.  For
 * other errors, it must return
 * :enum:`nghttp2_error.NGHTTP2_ERR_CALLBACK_FAILURE`.  The
 * |user_data| pointer is the third argument passed in to the call to
 * `nghttp2_session_client_new()` or `nghttp2_session_server_new()`.
 *
 * This callback is required if the application uses
 * `nghttp2_session_send()` to send data to the remote endpoint.  If
 * the application uses solely `nghttp2_session_mem_send()` instead,
 * this callback function is unnecessary.
 *
 * To set this callback to :type:`nghttp2_session_callbacks`, use
 * `nghttp2_session_callbacks_set_send_callback()`.
 *
 * .. note::
 *
 *   The |length| may be very small.  If that is the case, and
 *   application disables Nagle algorithm (``TCP_NODELAY``), then just
 *   writing |data| to the network stack leads to very small packet,
 *   and it is very inefficient.  An application should be responsible
 *   to buffer up small chunks of data as necessary to avoid this
 *   situation.
 */
typedef ssize_t (*nghttp2_send_callback)(nghttp2_session *session,
                                         const uint8_t *data, size_t length,
                                         int flags, void *user_data);

#endif /* NGHTTP2_NO_SSIZE_T */

/**
 * @functypedef
 *
 * Callback function invoked when |session| wants to send data to the
 * remote peer.  The implementation of this function must send at most
 * |length| bytes of data stored in |data|.  The |flags| is currently
 * not used and always 0. It must return the number of bytes sent if
 * it succeeds.  If it cannot send any single byte without blocking,
 * it must return :enum:`nghttp2_error.NGHTTP2_ERR_WOULDBLOCK`.  For
 * other errors, it must return
 * :enum:`nghttp2_error.NGHTTP2_ERR_CALLBACK_FAILURE`.  The
 * |user_data| pointer is the third argument passed in to the call to
 * `nghttp2_session_client_new()` or `nghttp2_session_server_new()`.
 *
 * This callback is required if the application uses
 * `nghttp2_session_send()` to send data to the remote endpoint.  If
 * the application uses solely `nghttp2_session_mem_send2()` instead,
 * this callback function is unnecessary.
 *
 * To set this callback to :type:`nghttp2_session_callbacks`, use
 * `nghttp2_session_callbacks_set_send_callback2()`.
 *
 * .. note::
 *
 *   The |length| may be very small.  If that is the case, and
 *   application disables Nagle algorithm (``TCP_NODELAY``), then just
 *   writing |data| to the network stack leads to very small packet,
 *   and it is very inefficient.  An application should be responsible
 *   to buffer up small chunks of data as necessary to avoid this
 *   situation.
 */
typedef nghttp2_ssize (*nghttp2_send_callback2)(nghttp2_session *session,
                                                const uint8_t *data,
                                                size_t length, int flags,
                                                void *user_data);

/**
 * @functypedef
 *
 * Callback function invoked when
 * :enum:`nghttp2_data_flag.NGHTTP2_DATA_FLAG_NO_COPY` is used in
 * :type:`nghttp2_data_source_read_callback` to send complete DATA
 * frame.
 *
 * The |frame| is a DATA frame to send.  The |framehd| is the
 * serialized frame header (9 bytes). The |length| is the length of
 * application data to send (this does not include padding).  The
 * |source| is the same pointer passed to
 * :type:`nghttp2_data_source_read_callback`.
 *
 * The application first must send frame header |framehd| of length 9
 * bytes.  If ``frame->data.padlen > 0``, send 1 byte of value
 * ``frame->data.padlen - 1``.  Then send exactly |length| bytes of
 * application data.  Finally, if ``frame->data.padlen > 1``, send
 * ``frame->data.padlen - 1`` bytes of zero as padding.
 *
 * The application has to send complete DATA frame in this callback.
 * If all data were written successfully, return 0.
 *
 * If it cannot send any data at all, just return
 * :enum:`nghttp2_error.NGHTTP2_ERR_WOULDBLOCK`; the library will call
 * this callback with the same parameters later (It is recommended to
 * send complete DATA frame at once in this function to deal with
 * error; if partial frame data has already sent, it is impossible to
 * send another data in that state, and all we can do is tear down
 * connection).  When data is fully processed, but application wants
 * to make `nghttp2_session_mem_send2()` or `nghttp2_session_send()`
 * return immediately without processing next frames, return
 * :enum:`nghttp2_error.NGHTTP2_ERR_PAUSE`.  If application decided to
 * reset this stream, return
 * :enum:`nghttp2_error.NGHTTP2_ERR_TEMPORAL_CALLBACK_FAILURE`, then
 * the library will send RST_STREAM with INTERNAL_ERROR as error code.
 * The application can also return
 * :enum:`nghttp2_error.NGHTTP2_ERR_CALLBACK_FAILURE`, which will
 * result in connection closure.  Returning any other value is treated
 * as :enum:`nghttp2_error.NGHTTP2_ERR_CALLBACK_FAILURE` is returned.
 */
typedef int (*nghttp2_send_data_callback)(nghttp2_session *session,
                                          nghttp2_frame *frame,
                                          const uint8_t *framehd, size_t length,
                                          nghttp2_data_source *source,
                                          void *user_data);

#ifndef NGHTTP2_NO_SSIZE_T
/**
 * @functypedef
 *
 * .. warning::
 *
 *   Deprecated.  Use :type:`nghttp2_recv_callback2` instead.
 *
 * Callback function invoked when |session| wants to receive data from
 * the remote peer.  The implementation of this function must read at
 * most |length| bytes of data and store it in |buf|.  The |flags| is
 * currently not used and always 0.  It must return the number of
 * bytes written in |buf| if it succeeds.  If it cannot read any
 * single byte without blocking, it must return
 * :enum:`nghttp2_error.NGHTTP2_ERR_WOULDBLOCK`.  If it gets EOF
 * before it reads any single byte, it must return
 * :enum:`nghttp2_error.NGHTTP2_ERR_EOF`.  For other errors, it must
 * return :enum:`nghttp2_error.NGHTTP2_ERR_CALLBACK_FAILURE`.
 * Returning 0 is treated as
 * :enum:`nghttp2_error.NGHTTP2_ERR_WOULDBLOCK`.  The |user_data|
 * pointer is the third argument passed in to the call to
 * `nghttp2_session_client_new()` or `nghttp2_session_server_new()`.
 *
 * This callback is required if the application uses
 * `nghttp2_session_recv()` to receive data from the remote endpoint.
 * If the application uses solely `nghttp2_session_mem_recv()`
 * instead, this callback function is unnecessary.
 *
 * To set this callback to :type:`nghttp2_session_callbacks`, use
 * `nghttp2_session_callbacks_set_recv_callback()`.
 */
typedef ssize_t (*nghttp2_recv_callback)(nghttp2_session *session, uint8_t *buf,
                                         size_t length, int flags,
                                         void *user_data);

#endif /* NGHTTP2_NO_SSIZE_T */

/**
 * @functypedef
 *
 * Callback function invoked when |session| wants to receive data from
 * the remote peer.  The implementation of this function must read at
 * most |length| bytes of data and store it in |buf|.  The |flags| is
 * currently not used and always 0.  It must return the number of
 * bytes written in |buf| if it succeeds.  If it cannot read any
 * single byte without blocking, it must return
 * :enum:`nghttp2_error.NGHTTP2_ERR_WOULDBLOCK`.  If it gets EOF
 * before it reads any single byte, it must return
 * :enum:`nghttp2_error.NGHTTP2_ERR_EOF`.  For other errors, it must
 * return :enum:`nghttp2_error.NGHTTP2_ERR_CALLBACK_FAILURE`.
 * Returning 0 is treated as
 * :enum:`nghttp2_error.NGHTTP2_ERR_WOULDBLOCK`.  The |user_data|
 * pointer is the third argument passed in to the call to
 * `nghttp2_session_client_new()` or `nghttp2_session_server_new()`.
 *
 * This callback is required if the application uses
 * `nghttp2_session_recv()` to receive data from the remote endpoint.
 * If the application uses solely `nghttp2_session_mem_recv2()`
 * instead, this callback function is unnecessary.
 *
 * To set this callback to :type:`nghttp2_session_callbacks`, use
 * `nghttp2_session_callbacks_set_recv_callback2()`.
 */
typedef nghttp2_ssize (*nghttp2_recv_callback2)(nghttp2_session *session,
                                                uint8_t *buf, size_t length,
                                                int flags, void *user_data);

/**
 * @functypedef
 *
 * Callback function invoked by `nghttp2_session_recv()` and
 * `nghttp2_session_mem_recv2()` when a frame is received.  The
 * |user_data| pointer is the third argument passed in to the call to
 * `nghttp2_session_client_new()` or `nghttp2_session_server_new()`.
 *
 * If frame is HEADERS or PUSH_PROMISE, the ``nva`` and ``nvlen``
 * member of their data structure are always ``NULL`` and 0
 * respectively.  The header name/value pairs are emitted via
 * :type:`nghttp2_on_header_callback`.
 *
 * Only HEADERS and DATA frame can signal the end of incoming data.
 * If ``frame->hd.flags & NGHTTP2_FLAG_END_STREAM`` is nonzero, the
 * |frame| is the last frame from the remote peer in this stream.
 *
 * This callback won't be called for CONTINUATION frames.
 * HEADERS/PUSH_PROMISE + CONTINUATIONs are treated as single frame.
 *
 * The implementation of this function must return 0 if it succeeds.
 * If nonzero value is returned, it is treated as fatal error and
 * `nghttp2_session_recv()` and `nghttp2_session_mem_recv2()`
 * functions immediately return
 * :enum:`nghttp2_error.NGHTTP2_ERR_CALLBACK_FAILURE`.
 *
 * To set this callback to :type:`nghttp2_session_callbacks`, use
 * `nghttp2_session_callbacks_set_on_frame_recv_callback()`.
 */
typedef int (*nghttp2_on_frame_recv_callback)(nghttp2_session *session,
                                              const nghttp2_frame *frame,
                                              void *user_data);

/**
 * @functypedef
 *
 * Callback function invoked by `nghttp2_session_recv()` and
 * `nghttp2_session_mem_recv2()` when an invalid non-DATA frame is
 * received.  The error is indicated by the |lib_error_code|, which is
 * one of the values defined in :type:`nghttp2_error`.  When this
 * callback function is invoked, the library automatically submits
 * either RST_STREAM or GOAWAY frame.  The |user_data| pointer is the
 * third argument passed in to the call to
 * `nghttp2_session_client_new()` or `nghttp2_session_server_new()`.
 *
 * If frame is HEADERS or PUSH_PROMISE, the ``nva`` and ``nvlen``
 * member of their data structure are always ``NULL`` and 0
 * respectively.
 *
 * The implementation of this function must return 0 if it succeeds.
 * If nonzero is returned, it is treated as fatal error and
 * `nghttp2_session_recv()` and `nghttp2_session_mem_recv2()`
 * functions immediately return
 * :enum:`nghttp2_error.NGHTTP2_ERR_CALLBACK_FAILURE`.
 *
 * To set this callback to :type:`nghttp2_session_callbacks`, use
 * `nghttp2_session_callbacks_set_on_invalid_frame_recv_callback()`.
 */
typedef int (*nghttp2_on_invalid_frame_recv_callback)(
  nghttp2_session *session, const nghttp2_frame *frame, int lib_error_code,
  void *user_data);

/**
 * @functypedef
 *
 * Callback function invoked when a chunk of data in DATA frame is
 * received.  The |stream_id| is the stream ID this DATA frame belongs
 * to.  The |flags| is the flags of DATA frame which this data chunk
 * is contained.  ``(flags & NGHTTP2_FLAG_END_STREAM) != 0`` does not
 * necessarily mean this chunk of data is the last one in the stream.
 * You should use :type:`nghttp2_on_frame_recv_callback` to know all
 * data frames are received.  The |user_data| pointer is the third
 * argument passed in to the call to `nghttp2_session_client_new()` or
 * `nghttp2_session_server_new()`.
 *
 * If the application uses `nghttp2_session_mem_recv2()`, it can
 * return :enum:`nghttp2_error.NGHTTP2_ERR_PAUSE` to make
 * `nghttp2_session_mem_recv2()` return without processing further
 * input bytes.  The memory by pointed by the |data| is retained until
 * `nghttp2_session_mem_recv2()` or `nghttp2_session_recv()` is
 * called.  The application must retain the input bytes which was used
 * to produce the |data| parameter, because it may refer to the memory
 * region included in the input bytes.
 *
 * The implementation of this function must return 0 if it succeeds.
 * If nonzero is returned, it is treated as fatal error, and
 * `nghttp2_session_recv()` and `nghttp2_session_mem_recv2()`
 * functions immediately return
 * :enum:`nghttp2_error.NGHTTP2_ERR_CALLBACK_FAILURE`.
 *
 * To set this callback to :type:`nghttp2_session_callbacks`, use
 * `nghttp2_session_callbacks_set_on_data_chunk_recv_callback()`.
 */
typedef int (*nghttp2_on_data_chunk_recv_callback)(nghttp2_session *session,
                                                   uint8_t flags,
                                                   int32_t stream_id,
                                                   const uint8_t *data,
                                                   size_t len, void *user_data);

/**
 * @functypedef
 *
 * Callback function invoked just before the non-DATA frame |frame| is
 * sent.  The |user_data| pointer is the third argument passed in to
 * the call to `nghttp2_session_client_new()` or
 * `nghttp2_session_server_new()`.
 *
 * The implementation of this function must return 0 if it succeeds.
 * It can also return :enum:`nghttp2_error.NGHTTP2_ERR_CANCEL` to
 * cancel the transmission of the given frame.
 *
 * If there is a fatal error while executing this callback, the
 * implementation should return
 * :enum:`nghttp2_error.NGHTTP2_ERR_CALLBACK_FAILURE`, which makes
 * `nghttp2_session_send()` and `nghttp2_session_mem_send2()`
 * functions immediately return
 * :enum:`nghttp2_error.NGHTTP2_ERR_CALLBACK_FAILURE`.
 *
 * If the other value is returned, it is treated as if
 * :enum:`nghttp2_error.NGHTTP2_ERR_CALLBACK_FAILURE` is returned.
 * But the implementation should not rely on this since the library
 * may define new return value to extend its capability.
 *
 * To set this callback to :type:`nghttp2_session_callbacks`, use
 * `nghttp2_session_callbacks_set_before_frame_send_callback()`.
 */
typedef int (*nghttp2_before_frame_send_callback)(nghttp2_session *session,
                                                  const nghttp2_frame *frame,
                                                  void *user_data);

/**
 * @functypedef
 *
 * Callback function invoked after the frame |frame| is sent.  The
 * |user_data| pointer is the third argument passed in to the call to
 * `nghttp2_session_client_new()` or `nghttp2_session_server_new()`.
 *
 * The implementation of this function must return 0 if it succeeds.
 * If nonzero is returned, it is treated as fatal error and
 * `nghttp2_session_send()` and `nghttp2_session_mem_send2()`
 * functions immediately return
 * :enum:`nghttp2_error.NGHTTP2_ERR_CALLBACK_FAILURE`.
 *
 * To set this callback to :type:`nghttp2_session_callbacks`, use
 * `nghttp2_session_callbacks_set_on_frame_send_callback()`.
 */
typedef int (*nghttp2_on_frame_send_callback)(nghttp2_session *session,
                                              const nghttp2_frame *frame,
                                              void *user_data);

/**
 * @functypedef
 *
 * Callback function invoked after the non-DATA frame |frame| is not
 * sent because of the error.  The error is indicated by the
 * |lib_error_code|, which is one of the values defined in
 * :type:`nghttp2_error`.  The |user_data| pointer is the third
 * argument passed in to the call to `nghttp2_session_client_new()` or
 * `nghttp2_session_server_new()`.
 *
 * The implementation of this function must return 0 if it succeeds.
 * If nonzero is returned, it is treated as fatal error and
 * `nghttp2_session_send()` and `nghttp2_session_mem_send2()`
 * functions immediately return
 * :enum:`nghttp2_error.NGHTTP2_ERR_CALLBACK_FAILURE`.
 *
 * `nghttp2_session_get_stream_user_data()` can be used to get
 * associated data.
 *
 * To set this callback to :type:`nghttp2_session_callbacks`, use
 * `nghttp2_session_callbacks_set_on_frame_not_send_callback()`.
 */
typedef int (*nghttp2_on_frame_not_send_callback)(nghttp2_session *session,
                                                  const nghttp2_frame *frame,
                                                  int lib_error_code,
                                                  void *user_data);

/**
 * @functypedef
 *
 * Callback function invoked when the stream |stream_id| is closed.
 * The reason of closure is indicated by the |error_code|.  The
 * |error_code| is usually one of :enum:`nghttp2_error_code`, but that
 * is not guaranteed.  The stream_user_data, which was specified in
 * `nghttp2_submit_request2()` or `nghttp2_submit_headers()`, is still
 * available in this function.  The |user_data| pointer is the third
 * argument passed in to the call to `nghttp2_session_client_new()` or
 * `nghttp2_session_server_new()`.
 *
 * This function is also called for a stream in reserved state.
 *
 * The implementation of this function must return 0 if it succeeds.
 * If nonzero is returned, it is treated as fatal error and
 * `nghttp2_session_recv()`, `nghttp2_session_mem_recv2()`,
 * `nghttp2_session_send()`, and `nghttp2_session_mem_send2()`
 * functions immediately return
 * :enum:`nghttp2_error.NGHTTP2_ERR_CALLBACK_FAILURE`.
 *
 * To set this callback to :type:`nghttp2_session_callbacks`, use
 * `nghttp2_session_callbacks_set_on_stream_close_callback()`.
 */
typedef int (*nghttp2_on_stream_close_callback)(nghttp2_session *session,
                                                int32_t stream_id,
                                                uint32_t error_code,
                                                void *user_data);

/**
 * @functypedef
 *
 * Callback function invoked when the reception of header block in
 * HEADERS or PUSH_PROMISE is started.  Each header name/value pair
 * will be emitted by :type:`nghttp2_on_header_callback`.
 *
 * The ``frame->hd.flags`` may not have
 * :enum:`nghttp2_flag.NGHTTP2_FLAG_END_HEADERS` flag set, which
 * indicates that one or more CONTINUATION frames are involved.  But
 * the application does not need to care about that because the header
 * name/value pairs are emitted transparently regardless of
 * CONTINUATION frames.
 *
 * The server applications probably create an object to store
 * information about new stream if ``frame->hd.type ==
 * NGHTTP2_HEADERS`` and ``frame->headers.cat ==
 * NGHTTP2_HCAT_REQUEST``.  If |session| is configured as server side,
 * ``frame->headers.cat`` is either ``NGHTTP2_HCAT_REQUEST``
 * containing request headers or ``NGHTTP2_HCAT_HEADERS`` containing
 * trailer fields and never get PUSH_PROMISE in this callback.
 *
 * For the client applications, ``frame->hd.type`` is either
 * ``NGHTTP2_HEADERS`` or ``NGHTTP2_PUSH_PROMISE``.  In case of
 * ``NGHTTP2_HEADERS``, ``frame->headers.cat ==
 * NGHTTP2_HCAT_RESPONSE`` means that it is the first response
 * headers, but it may be non-final response which is indicated by 1xx
 * status code.  In this case, there may be zero or more HEADERS frame
 * with ``frame->headers.cat == NGHTTP2_HCAT_HEADERS`` which has
 * non-final response code and finally client gets exactly one HEADERS
 * frame with ``frame->headers.cat == NGHTTP2_HCAT_HEADERS``
 * containing final response headers (non-1xx status code).  The
 * trailer fields also has ``frame->headers.cat ==
 * NGHTTP2_HCAT_HEADERS`` which does not contain any status code.
 *
 * Returning
 * :enum:`nghttp2_error.NGHTTP2_ERR_TEMPORAL_CALLBACK_FAILURE` will
 * close the stream (promised stream if frame is PUSH_PROMISE) by
 * issuing RST_STREAM with
 * :enum:`nghttp2_error_code.NGHTTP2_INTERNAL_ERROR`.  In this case,
 * :type:`nghttp2_on_header_callback` and
 * :type:`nghttp2_on_frame_recv_callback` will not be invoked.  If a
 * different error code is desirable, use
 * `nghttp2_submit_rst_stream()` with a desired error code and then
 * return :enum:`nghttp2_error.NGHTTP2_ERR_TEMPORAL_CALLBACK_FAILURE`.
 * Again, use ``frame->push_promise.promised_stream_id`` as stream_id
 * parameter in `nghttp2_submit_rst_stream()` if frame is
 * PUSH_PROMISE.
 *
 * The implementation of this function must return 0 if it succeeds.
 * It can return
 * :enum:`nghttp2_error.NGHTTP2_ERR_TEMPORAL_CALLBACK_FAILURE` to
 * reset the stream (promised stream if frame is PUSH_PROMISE).  For
 * critical errors, it must return
 * :enum:`nghttp2_error.NGHTTP2_ERR_CALLBACK_FAILURE`.  If the other
 * value is returned, it is treated as if
 * :enum:`nghttp2_error.NGHTTP2_ERR_CALLBACK_FAILURE` is returned.  If
 * :enum:`nghttp2_error.NGHTTP2_ERR_CALLBACK_FAILURE` is returned,
 * `nghttp2_session_mem_recv2()` function will immediately return
 * :enum:`nghttp2_error.NGHTTP2_ERR_CALLBACK_FAILURE`.
 *
 * To set this callback to :type:`nghttp2_session_callbacks`, use
 * `nghttp2_session_callbacks_set_on_begin_headers_callback()`.
 */
typedef int (*nghttp2_on_begin_headers_callback)(nghttp2_session *session,
                                                 const nghttp2_frame *frame,
                                                 void *user_data);

/**
 * @functypedef
 *
 * Callback function invoked when a header name/value pair is received
 * for the |frame|.  The |name| of length |namelen| is header name.
 * The |value| of length |valuelen| is header value.  The |flags| is
 * bitwise OR of one or more of :type:`nghttp2_nv_flag`.
 *
 * If :enum:`nghttp2_nv_flag.NGHTTP2_NV_FLAG_NO_INDEX` is set in
 * |flags|, the receiver must not index this name/value pair when
 * forwarding it to the next hop.  More specifically, "Literal Header
 * Field never Indexed" representation must be used in HPACK encoding.
 *
 * When this callback is invoked, ``frame->hd.type`` is either
 * :enum:`nghttp2_frame_type.NGHTTP2_HEADERS` or
 * :enum:`nghttp2_frame_type.NGHTTP2_PUSH_PROMISE`.  After all header
 * name/value pairs are processed with this callback, and no error has
 * been detected, :type:`nghttp2_on_frame_recv_callback` will be
 * invoked.  If there is an error in decompression,
 * :type:`nghttp2_on_frame_recv_callback` for the |frame| will not be
 * invoked.
 *
 * Both |name| and |value| are guaranteed to be NULL-terminated.  The
 * |namelen| and |valuelen| do not include terminal NULL.  If
 * `nghttp2_option_set_no_http_messaging()` is used with nonzero
 * value, NULL character may be included in |name| or |value| before
 * terminating NULL.
 *
 * Please note that unless `nghttp2_option_set_no_http_messaging()` is
 * used, nghttp2 library does perform validation against the |name|
 * and the |value| using `nghttp2_check_header_name()` and
 * `nghttp2_check_header_value()`.  In addition to this, nghttp2
 * performs validation based on HTTP Messaging rule, which is briefly
 * explained in :ref:`http-messaging` section.
 *
 * If the application uses `nghttp2_session_mem_recv2()`, it can
 * return :enum:`nghttp2_error.NGHTTP2_ERR_PAUSE` to make
 * `nghttp2_session_mem_recv2()` return without processing further
 * input bytes.  The memory pointed by |frame|, |name| and |value|
 * parameters are retained until `nghttp2_session_mem_recv2()` or
 * `nghttp2_session_recv()` is called.  The application must retain
 * the input bytes which was used to produce these parameters, because
 * it may refer to the memory region included in the input bytes.
 *
 * Returning
 * :enum:`nghttp2_error.NGHTTP2_ERR_TEMPORAL_CALLBACK_FAILURE` will
 * close the stream (promised stream if frame is PUSH_PROMISE) by
 * issuing RST_STREAM with
 * :enum:`nghttp2_error_code.NGHTTP2_INTERNAL_ERROR`.  In this case,
 * :type:`nghttp2_on_header_callback` and
 * :type:`nghttp2_on_frame_recv_callback` will not be invoked.  If a
 * different error code is desirable, use
 * `nghttp2_submit_rst_stream()` with a desired error code and then
 * return :enum:`nghttp2_error.NGHTTP2_ERR_TEMPORAL_CALLBACK_FAILURE`.
 * Again, use ``frame->push_promise.promised_stream_id`` as stream_id
 * parameter in `nghttp2_submit_rst_stream()` if frame is
 * PUSH_PROMISE.
 *
 * The implementation of this function must return 0 if it succeeds.
 * It may return :enum:`nghttp2_error.NGHTTP2_ERR_PAUSE` or
 * :enum:`nghttp2_error.NGHTTP2_ERR_TEMPORAL_CALLBACK_FAILURE`.  For
 * other critical failures, it must return
 * :enum:`nghttp2_error.NGHTTP2_ERR_CALLBACK_FAILURE`.  If the other
 * nonzero value is returned, it is treated as
 * :enum:`nghttp2_error.NGHTTP2_ERR_CALLBACK_FAILURE`.  If
 * :enum:`nghttp2_error.NGHTTP2_ERR_CALLBACK_FAILURE` is returned,
 * `nghttp2_session_recv()` and `nghttp2_session_mem_recv2()`
 * functions immediately return
 * :enum:`nghttp2_error.NGHTTP2_ERR_CALLBACK_FAILURE`.
 *
 * To set this callback to :type:`nghttp2_session_callbacks`, use
 * `nghttp2_session_callbacks_set_on_header_callback()`.
 *
 * .. warning::
 *
 *   Application should properly limit the total buffer size to store
 *   incoming header fields.  Without it, peer may send large number
 *   of header fields or large header fields to cause out of memory in
 *   local endpoint.  Due to how HPACK works, peer can do this
 *   effectively without using much memory on their own.
 */
typedef int (*nghttp2_on_header_callback)(nghttp2_session *session,
                                          const nghttp2_frame *frame,
                                          const uint8_t *name, size_t namelen,
                                          const uint8_t *value, size_t valuelen,
                                          uint8_t flags, void *user_data);

/**
 * @functypedef
 *
 * Callback function invoked when a header name/value pair is received
 * for the |frame|.  The |name| is header name.  The |value| is header
 * value.  The |flags| is bitwise OR of one or more of
 * :type:`nghttp2_nv_flag`.
 *
 * This callback behaves like :type:`nghttp2_on_header_callback`,
 * except that |name| and |value| are stored in reference counted
 * buffer.  If application wishes to keep these references without
 * copying them, use `nghttp2_rcbuf_incref()` to increment their
 * reference count.  It is the application's responsibility to call
 * `nghttp2_rcbuf_decref()` if they called `nghttp2_rcbuf_incref()` so
 * as not to leak memory.  If the |session| is created by
 * `nghttp2_session_server_new3()` or `nghttp2_session_client_new3()`,
 * the function to free memory is the one belongs to the mem
 * parameter.  As long as this free function alives, |name| and
 * |value| can live after |session| was destroyed.
 */
typedef int (*nghttp2_on_header_callback2)(nghttp2_session *session,
                                           const nghttp2_frame *frame,
                                           nghttp2_rcbuf *name,
                                           nghttp2_rcbuf *value, uint8_t flags,
                                           void *user_data);

/**
 * @functypedef
 *
 * Callback function invoked when a invalid header name/value pair is
 * received for the |frame|.
 *
 * The parameter and behaviour are similar to
 * :type:`nghttp2_on_header_callback`.  The difference is that this
 * callback is only invoked when a invalid header name/value pair is
 * received which is treated as stream error if this callback is not
 * set.  Only invalid regular header field are passed to this
 * callback.  In other words, invalid pseudo header field is not
 * passed to this callback.  Also header fields which includes upper
 * cased latter are also treated as error without passing them to this
 * callback.
 *
 * This callback is only considered if HTTP messaging validation is
 * turned on (which is on by default, see
 * `nghttp2_option_set_no_http_messaging()`).
 *
 * With this callback, application inspects the incoming invalid
 * field, and it also can reset stream from this callback by returning
 * :enum:`nghttp2_error.NGHTTP2_ERR_TEMPORAL_CALLBACK_FAILURE`.  By
 * default, the error code is
 * :enum:`nghttp2_error_code.NGHTTP2_PROTOCOL_ERROR`.  To change the
 * error code, call `nghttp2_submit_rst_stream()` with the error code
 * of choice in addition to returning
 * :enum:`nghttp2_error.NGHTTP2_ERR_TEMPORAL_CALLBACK_FAILURE`.
 *
 * If 0 is returned, the header field is ignored, and the stream is
 * not reset.
 */
typedef int (*nghttp2_on_invalid_header_callback)(
  nghttp2_session *session, const nghttp2_frame *frame, const uint8_t *name,
  size_t namelen, const uint8_t *value, size_t valuelen, uint8_t flags,
  void *user_data);

/**
 * @functypedef
 *
 * Callback function invoked when a invalid header name/value pair is
 * received for the |frame|.
 *
 * The parameter and behaviour are similar to
 * :type:`nghttp2_on_header_callback2`.  The difference is that this
 * callback is only invoked when a invalid header name/value pair is
 * received which is silently ignored if this callback is not set.
 * Only invalid regular header field are passed to this callback.  In
 * other words, invalid pseudo header field is not passed to this
 * callback.  Also header fields which includes upper cased latter are
 * also treated as error without passing them to this callback.
 *
 * This callback is only considered if HTTP messaging validation is
 * turned on (which is on by default, see
 * `nghttp2_option_set_no_http_messaging()`).
 *
 * With this callback, application inspects the incoming invalid
 * field, and it also can reset stream from this callback by returning
 * :enum:`nghttp2_error.NGHTTP2_ERR_TEMPORAL_CALLBACK_FAILURE`.  By
 * default, the error code is
 * :enum:`nghttp2_error_code.NGHTTP2_INTERNAL_ERROR`.  To change the
 * error code, call `nghttp2_submit_rst_stream()` with the error code
 * of choice in addition to returning
 * :enum:`nghttp2_error.NGHTTP2_ERR_TEMPORAL_CALLBACK_FAILURE`.
 */
typedef int (*nghttp2_on_invalid_header_callback2)(
  nghttp2_session *session, const nghttp2_frame *frame, nghttp2_rcbuf *name,
  nghttp2_rcbuf *value, uint8_t flags, void *user_data);

#ifndef NGHTTP2_NO_SSIZE_T
/**
 * @functypedef
 *
 * .. warning::
 *
 *   Deprecated.  Use :type:`nghttp2_select_padding_callback2`
 *   instead.
 *
 * Callback function invoked when the library asks application how
 * many padding bytes are required for the transmission of the
 * |frame|.  The application must choose the total length of payload
 * including padded bytes in range [frame->hd.length, max_payloadlen],
 * inclusive.  Choosing number not in this range will be treated as
 * :enum:`nghttp2_error.NGHTTP2_ERR_CALLBACK_FAILURE`.  Returning
 * ``frame->hd.length`` means no padding is added.  Returning
 * :enum:`nghttp2_error.NGHTTP2_ERR_CALLBACK_FAILURE` will make
 * `nghttp2_session_send()` and `nghttp2_session_mem_send()` functions
 * immediately return
 * :enum:`nghttp2_error.NGHTTP2_ERR_CALLBACK_FAILURE`.
 *
 * To set this callback to :type:`nghttp2_session_callbacks`, use
 * `nghttp2_session_callbacks_set_select_padding_callback()`.
 */
typedef ssize_t (*nghttp2_select_padding_callback)(nghttp2_session *session,
                                                   const nghttp2_frame *frame,
                                                   size_t max_payloadlen,
                                                   void *user_data);

#endif /* NGHTTP2_NO_SSIZE_T */

/**
 * @functypedef
 *
 * Callback function invoked when the library asks application how
 * many padding bytes are required for the transmission of the
 * |frame|.  The application must choose the total length of payload
 * including padded bytes in range [frame->hd.length, max_payloadlen],
 * inclusive.  Choosing number not in this range will be treated as
 * :enum:`nghttp2_error.NGHTTP2_ERR_CALLBACK_FAILURE`.  Returning
 * ``frame->hd.length`` means no padding is added.  Returning
 * :enum:`nghttp2_error.NGHTTP2_ERR_CALLBACK_FAILURE` will make
 * `nghttp2_session_send()` and `nghttp2_session_mem_send2()`
 * functions immediately return
 * :enum:`nghttp2_error.NGHTTP2_ERR_CALLBACK_FAILURE`.
 *
 * To set this callback to :type:`nghttp2_session_callbacks`, use
 * `nghttp2_session_callbacks_set_select_padding_callback2()`.
 */
typedef nghttp2_ssize (*nghttp2_select_padding_callback2)(
  nghttp2_session *session, const nghttp2_frame *frame, size_t max_payloadlen,
  void *user_data);

#ifndef NGHTTP2_NO_SSIZE_T
/**
 * @functypedef
 *
 * .. warning::
 *
 *   Deprecated.  Use
 *   :type:`nghttp2_data_source_read_length_callback2` instead.
 *
 * Callback function invoked when library wants to get max length of
 * data to send data to the remote peer.  The implementation of this
 * function should return a value in the following range.  [1,
 * min(|session_remote_window_size|, |stream_remote_window_size|,
 * |remote_max_frame_size|)].  If a value greater than this range is
 * returned than the max allow value will be used.  Returning a value
 * smaller than this range is treated as
 * :enum:`nghttp2_error.NGHTTP2_ERR_CALLBACK_FAILURE`.  The
 * |frame_type| is provided for future extensibility and identifies
 * the type of frame (see :type:`nghttp2_frame_type`) for which to get
 * the length for.  Currently supported frame types are:
 * :enum:`nghttp2_frame_type.NGHTTP2_DATA`.
 *
 * This callback can be used to control the length in bytes for which
 * :type:`nghttp2_data_source_read_callback` is allowed to send to the
 * remote endpoint.  This callback is optional.  Returning
 * :enum:`nghttp2_error.NGHTTP2_ERR_CALLBACK_FAILURE` will signal the
 * entire session failure.
 *
 * To set this callback to :type:`nghttp2_session_callbacks`, use
 * `nghttp2_session_callbacks_set_data_source_read_length_callback()`.
 */
typedef ssize_t (*nghttp2_data_source_read_length_callback)(
  nghttp2_session *session, uint8_t frame_type, int32_t stream_id,
  int32_t session_remote_window_size, int32_t stream_remote_window_size,
  uint32_t remote_max_frame_size, void *user_data);

#endif /* NGHTTP2_NO_SSIZE_T */

/**
 * @functypedef
 *
 * Callback function invoked when library wants to get max length of
 * data to send data to the remote peer.  The implementation of this
 * function should return a value in the following range.  [1,
 * min(|session_remote_window_size|, |stream_remote_window_size|,
 * |remote_max_frame_size|)].  If a value greater than this range is
 * returned than the max allow value will be used.  Returning a value
 * smaller than this range is treated as
 * :enum:`nghttp2_error.NGHTTP2_ERR_CALLBACK_FAILURE`.  The
 * |frame_type| is provided for future extensibility and identifies
 * the type of frame (see :type:`nghttp2_frame_type`) for which to get
 * the length for.  Currently supported frame types are:
 * :enum:`nghttp2_frame_type.NGHTTP2_DATA`.
 *
 * This callback can be used to control the length in bytes for which
 * :type:`nghttp2_data_source_read_callback` is allowed to send to the
 * remote endpoint.  This callback is optional.  Returning
 * :enum:`nghttp2_error.NGHTTP2_ERR_CALLBACK_FAILURE` will signal the
 * entire session failure.
 *
 * To set this callback to :type:`nghttp2_session_callbacks`, use
 * `nghttp2_session_callbacks_set_data_source_read_length_callback2()`.
 */
typedef nghttp2_ssize (*nghttp2_data_source_read_length_callback2)(
  nghttp2_session *session, uint8_t frame_type, int32_t stream_id,
  int32_t session_remote_window_size, int32_t stream_remote_window_size,
  uint32_t remote_max_frame_size, void *user_data);

/**
 * @functypedef
 *
 * Callback function invoked when a frame header is received.  The
 * |hd| points to received frame header.
 *
 * Unlike :type:`nghttp2_on_frame_recv_callback`, this callback will
 * also be called when frame header of CONTINUATION frame is received.
 *
 * If both :type:`nghttp2_on_begin_frame_callback` and
 * :type:`nghttp2_on_begin_headers_callback` are set and HEADERS or
 * PUSH_PROMISE is received, :type:`nghttp2_on_begin_frame_callback`
 * will be called first.
 *
 * The implementation of this function must return 0 if it succeeds.
 * If nonzero value is returned, it is treated as fatal error and
 * `nghttp2_session_recv()` and `nghttp2_session_mem_recv2()`
 * functions immediately return
 * :enum:`nghttp2_error.NGHTTP2_ERR_CALLBACK_FAILURE`.
 *
 * To set this callback to :type:`nghttp2_session_callbacks`, use
 * `nghttp2_session_callbacks_set_on_begin_frame_callback()`.
 */
typedef int (*nghttp2_on_begin_frame_callback)(nghttp2_session *session,
                                               const nghttp2_frame_hd *hd,
                                               void *user_data);

/**
 * @functypedef
 *
 * Callback function invoked when chunk of extension frame payload is
 * received.  The |hd| points to frame header.  The received
 * chunk is |data| of length |len|.
 *
 * The implementation of this function must return 0 if it succeeds.
 *
 * To abort processing this extension frame, return
 * :enum:`nghttp2_error.NGHTTP2_ERR_CANCEL`.
 *
 * If fatal error occurred, application should return
 * :enum:`nghttp2_error.NGHTTP2_ERR_CALLBACK_FAILURE`.  In this case,
 * `nghttp2_session_recv()` and `nghttp2_session_mem_recv2()`
 * functions immediately return
 * :enum:`nghttp2_error.NGHTTP2_ERR_CALLBACK_FAILURE`.  If the other
 * values are returned, currently they are treated as
 * :enum:`nghttp2_error.NGHTTP2_ERR_CALLBACK_FAILURE`.
 */
typedef int (*nghttp2_on_extension_chunk_recv_callback)(
  nghttp2_session *session, const nghttp2_frame_hd *hd, const uint8_t *data,
  size_t len, void *user_data);

/**
 * @functypedef
 *
 * Callback function invoked when library asks the application to
 * unpack extension payload from its wire format.  The extension
 * payload has been passed to the application using
 * :type:`nghttp2_on_extension_chunk_recv_callback`.  The frame header
 * is already unpacked by the library and provided as |hd|.
 *
 * To receive extension frames, the application must tell desired
 * extension frame type to the library using
 * `nghttp2_option_set_user_recv_extension_type()`.
 *
 * The implementation of this function may store the pointer to the
 * created object as a result of unpacking in |*payload|, and returns
 * 0.  The pointer stored in |*payload| is opaque to the library, and
 * the library does not own its pointer.  |*payload| is initialized as
 * ``NULL``.  The |*payload| is available as ``frame->ext.payload`` in
 * :type:`nghttp2_on_frame_recv_callback`.  Therefore if application
 * can free that memory inside :type:`nghttp2_on_frame_recv_callback`
 * callback.  Of course, application has a liberty not to use
 * |*payload|, and do its own mechanism to process extension frames.
 *
 * To abort processing this extension frame, return
 * :enum:`nghttp2_error.NGHTTP2_ERR_CANCEL`.
 *
 * If fatal error occurred, application should return
 * :enum:`nghttp2_error.NGHTTP2_ERR_CALLBACK_FAILURE`.  In this case,
 * `nghttp2_session_recv()` and `nghttp2_session_mem_recv2()`
 * functions immediately return
 * :enum:`nghttp2_error.NGHTTP2_ERR_CALLBACK_FAILURE`.  If the other
 * values are returned, currently they are treated as
 * :enum:`nghttp2_error.NGHTTP2_ERR_CALLBACK_FAILURE`.
 */
typedef int (*nghttp2_unpack_extension_callback)(nghttp2_session *session,
                                                 void **payload,
                                                 const nghttp2_frame_hd *hd,
                                                 void *user_data);

#ifndef NGHTTP2_NO_SSIZE_T
/**
 * @functypedef
 *
 * .. warning::
 *
 *   Deprecated.  Use :type:`nghttp2_pack_extension_callback2`
 *   instead.
 *
 * Callback function invoked when library asks the application to pack
 * extension payload in its wire format.  The frame header will be
 * packed by library.  Application must pack payload only.
 * ``frame->ext.payload`` is the object passed to
 * `nghttp2_submit_extension()` as payload parameter.  Application
 * must pack extension payload to the |buf| of its capacity |len|
 * bytes.  The |len| is at least 16KiB.
 *
 * The implementation of this function should return the number of
 * bytes written into |buf| when it succeeds.
 *
 * To abort processing this extension frame, return
 * :enum:`nghttp2_error.NGHTTP2_ERR_CANCEL`, and
 * :type:`nghttp2_on_frame_not_send_callback` will be invoked.
 *
 * If fatal error occurred, application should return
 * :enum:`nghttp2_error.NGHTTP2_ERR_CALLBACK_FAILURE`.  In this case,
 * `nghttp2_session_send()` and `nghttp2_session_mem_send()` functions
 * immediately return
 * :enum:`nghttp2_error.NGHTTP2_ERR_CALLBACK_FAILURE`.  If the other
 * values are returned, currently they are treated as
 * :enum:`nghttp2_error.NGHTTP2_ERR_CALLBACK_FAILURE`.  If the return
 * value is strictly larger than |len|, it is treated as
 * :enum:`nghttp2_error.NGHTTP2_ERR_CALLBACK_FAILURE`.
 */
typedef ssize_t (*nghttp2_pack_extension_callback)(nghttp2_session *session,
                                                   uint8_t *buf, size_t len,
                                                   const nghttp2_frame *frame,
                                                   void *user_data);

#endif /* NGHTTP2_NO_SSIZE_T */

/**
 * @functypedef
 *
 * Callback function invoked when library asks the application to pack
 * extension payload in its wire format.  The frame header will be
 * packed by library.  Application must pack payload only.
 * ``frame->ext.payload`` is the object passed to
 * `nghttp2_submit_extension()` as payload parameter.  Application
 * must pack extension payload to the |buf| of its capacity |len|
 * bytes.  The |len| is at least 16KiB.
 *
 * The implementation of this function should return the number of
 * bytes written into |buf| when it succeeds.
 *
 * To abort processing this extension frame, return
 * :enum:`nghttp2_error.NGHTTP2_ERR_CANCEL`, and
 * :type:`nghttp2_on_frame_not_send_callback` will be invoked.
 *
 * If fatal error occurred, application should return
 * :enum:`nghttp2_error.NGHTTP2_ERR_CALLBACK_FAILURE`.  In this case,
 * `nghttp2_session_send()` and `nghttp2_session_mem_send2()`
 * functions immediately return
 * :enum:`nghttp2_error.NGHTTP2_ERR_CALLBACK_FAILURE`.  If the other
 * values are returned, currently they are treated as
 * :enum:`nghttp2_error.NGHTTP2_ERR_CALLBACK_FAILURE`.  If the return
 * value is strictly larger than |len|, it is treated as
 * :enum:`nghttp2_error.NGHTTP2_ERR_CALLBACK_FAILURE`.
 */
typedef nghttp2_ssize (*nghttp2_pack_extension_callback2)(
  nghttp2_session *session, uint8_t *buf, size_t len,
  const nghttp2_frame *frame, void *user_data);

/**
 * @functypedef
 *
 * .. warning::
 *
 *   Deprecated.  Use :type:`nghttp2_error_callback2` instead.
 *
 * Callback function invoked when library provides the error message
 * intended for human consumption.  This callback is solely for
 * debugging purpose.  The |msg| is typically NULL-terminated string
 * of length |len|.  |len| does not include the sentinel NULL
 * character.
 *
 * The format of error message may change between nghttp2 library
 * versions.  The application should not depend on the particular
 * format.
 *
 * Normally, application should return 0 from this callback.  If fatal
 * error occurred while doing something in this callback, application
 * should return :enum:`nghttp2_error.NGHTTP2_ERR_CALLBACK_FAILURE`.
 * In this case, library will return immediately with return value
 * :enum:`nghttp2_error.NGHTTP2_ERR_CALLBACK_FAILURE`.  Currently, if
 * nonzero value is returned from this callback, they are treated as
 * :enum:`nghttp2_error.NGHTTP2_ERR_CALLBACK_FAILURE`, but application
 * should not rely on this details.
 */
typedef int (*nghttp2_error_callback)(nghttp2_session *session, const char *msg,
                                      size_t len, void *user_data);

/**
 * @functypedef
 *
 * Callback function invoked when library provides the error code, and
 * message.  This callback is solely for debugging purpose.
 * |lib_error_code| is one of error code defined in
 * :enum:`nghttp2_error`.  The |msg| is typically NULL-terminated
 * string of length |len|, and intended for human consumption.  |len|
 * does not include the sentinel NULL character.
 *
 * The format of error message may change between nghttp2 library
 * versions.  The application should not depend on the particular
 * format.
 *
 * Normally, application should return 0 from this callback.  If fatal
 * error occurred while doing something in this callback, application
 * should return :enum:`nghttp2_error.NGHTTP2_ERR_CALLBACK_FAILURE`.
 * In this case, library will return immediately with return value
 * :enum:`nghttp2_error.NGHTTP2_ERR_CALLBACK_FAILURE`.  Currently, if
 * nonzero value is returned from this callback, they are treated as
 * :enum:`nghttp2_error.NGHTTP2_ERR_CALLBACK_FAILURE`, but application
 * should not rely on this details.
 */
typedef int (*nghttp2_error_callback2)(nghttp2_session *session,
                                       int lib_error_code, const char *msg,
                                       size_t len, void *user_data);

struct nghttp2_session_callbacks;

/**
 * @struct
 *
 * Callback functions for :type:`nghttp2_session`.  The details of
 * this structure are intentionally hidden from the public API.
 */
typedef struct nghttp2_session_callbacks nghttp2_session_callbacks;

/**
 * @function
 *
 * Initializes |*callbacks_ptr| with NULL values.
 *
 * The initialized object can be used when initializing multiple
 * :type:`nghttp2_session` objects.
 *
 * When the application finished using this object, it can use
 * `nghttp2_session_callbacks_del()` to free its memory.
 *
 * This function returns 0 if it succeeds, or one of the following
 * negative error codes:
 *
 * :enum:`nghttp2_error.NGHTTP2_ERR_NOMEM`
 *     Out of memory.
 */
NGHTTP2_EXTERN int
nghttp2_session_callbacks_new(nghttp2_session_callbacks **callbacks_ptr);

/**
 * @function
 *
 * Frees any resources allocated for |callbacks|.  If |callbacks| is
 * ``NULL``, this function does nothing.
 */
NGHTTP2_EXTERN void
nghttp2_session_callbacks_del(nghttp2_session_callbacks *callbacks);

#ifndef NGHTTP2_NO_SSIZE_T
/**
 * @function
 *
 * .. warning::
 *
 *   Deprecated.  Use `nghttp2_session_callbacks_set_send_callback2()`
 *   with :type:`nghttp2_send_callback2` instead.
 *
 * Sets callback function invoked when a session wants to send data to
 * the remote peer.  This callback is not necessary if the application
 * uses solely `nghttp2_session_mem_send()` to serialize data to
 * transmit.
 */
NGHTTP2_EXTERN void nghttp2_session_callbacks_set_send_callback(
  nghttp2_session_callbacks *cbs, nghttp2_send_callback send_callback);

#endif /* NGHTTP2_NO_SSIZE_T */

/**
 * @function
 *
 * Sets callback function invoked when a session wants to send data to
 * the remote peer.  This callback is not necessary if the application
 * uses solely `nghttp2_session_mem_send2()` to serialize data to
 * transmit.
 */
NGHTTP2_EXTERN void nghttp2_session_callbacks_set_send_callback2(
  nghttp2_session_callbacks *cbs, nghttp2_send_callback2 send_callback);

#ifndef NGHTTP2_NO_SSIZE_T
/**
 * @function
 *
 * .. warning::
 *
 *   Deprecated.  Use `nghttp2_session_callbacks_set_recv_callback2()`
 *   with :type:`nghttp2_recv_callback2` instead.
 *
 * Sets callback function invoked when the a session wants to receive
 * data from the remote peer.  This callback is not necessary if the
 * application uses solely `nghttp2_session_mem_recv()` to process
 * received data.
 */
NGHTTP2_EXTERN void nghttp2_session_callbacks_set_recv_callback(
  nghttp2_session_callbacks *cbs, nghttp2_recv_callback recv_callback);

#endif /* NGHTTP2_NO_SSIZE_T */

/**
 * @function
 *
 * Sets callback function invoked when the a session wants to receive
 * data from the remote peer.  This callback is not necessary if the
 * application uses solely `nghttp2_session_mem_recv2()` to process
 * received data.
 */
NGHTTP2_EXTERN void nghttp2_session_callbacks_set_recv_callback2(
  nghttp2_session_callbacks *cbs, nghttp2_recv_callback2 recv_callback);

/**
 * @function
 *
 * Sets callback function invoked by `nghttp2_session_recv()` and
 * `nghttp2_session_mem_recv2()` when a frame is received.
 */
NGHTTP2_EXTERN void nghttp2_session_callbacks_set_on_frame_recv_callback(
  nghttp2_session_callbacks *cbs,
  nghttp2_on_frame_recv_callback on_frame_recv_callback);

/**
 * @function
 *
 * Sets callback function invoked by `nghttp2_session_recv()` and
 * `nghttp2_session_mem_recv2()` when an invalid non-DATA frame is
 * received.
 */
NGHTTP2_EXTERN void
nghttp2_session_callbacks_set_on_invalid_frame_recv_callback(
  nghttp2_session_callbacks *cbs,
  nghttp2_on_invalid_frame_recv_callback on_invalid_frame_recv_callback);

/**
 * @function
 *
 * Sets callback function invoked when a chunk of data in DATA frame
 * is received.
 */
NGHTTP2_EXTERN void nghttp2_session_callbacks_set_on_data_chunk_recv_callback(
  nghttp2_session_callbacks *cbs,
  nghttp2_on_data_chunk_recv_callback on_data_chunk_recv_callback);

/**
 * @function
 *
 * Sets callback function invoked before a non-DATA frame is sent.
 */
NGHTTP2_EXTERN void nghttp2_session_callbacks_set_before_frame_send_callback(
  nghttp2_session_callbacks *cbs,
  nghttp2_before_frame_send_callback before_frame_send_callback);

/**
 * @function
 *
 * Sets callback function invoked after a frame is sent.
 */
NGHTTP2_EXTERN void nghttp2_session_callbacks_set_on_frame_send_callback(
  nghttp2_session_callbacks *cbs,
  nghttp2_on_frame_send_callback on_frame_send_callback);

/**
 * @function
 *
 * Sets callback function invoked when a non-DATA frame is not sent
 * because of an error.
 */
NGHTTP2_EXTERN void nghttp2_session_callbacks_set_on_frame_not_send_callback(
  nghttp2_session_callbacks *cbs,
  nghttp2_on_frame_not_send_callback on_frame_not_send_callback);

/**
 * @function
 *
 * Sets callback function invoked when the stream is closed.
 */
NGHTTP2_EXTERN void nghttp2_session_callbacks_set_on_stream_close_callback(
  nghttp2_session_callbacks *cbs,
  nghttp2_on_stream_close_callback on_stream_close_callback);

/**
 * @function
 *
 * Sets callback function invoked when the reception of header block
 * in HEADERS or PUSH_PROMISE is started.
 */
NGHTTP2_EXTERN void nghttp2_session_callbacks_set_on_begin_headers_callback(
  nghttp2_session_callbacks *cbs,
  nghttp2_on_begin_headers_callback on_begin_headers_callback);

/**
 * @function
 *
 * Sets callback function invoked when a header name/value pair is
 * received.  If both
 * `nghttp2_session_callbacks_set_on_header_callback()` and
 * `nghttp2_session_callbacks_set_on_header_callback2()` are used to
 * set callbacks, the latter has the precedence.
 */
NGHTTP2_EXTERN void nghttp2_session_callbacks_set_on_header_callback(
  nghttp2_session_callbacks *cbs,
  nghttp2_on_header_callback on_header_callback);

/**
 * @function
 *
 * Sets callback function invoked when a header name/value pair is
 * received.
 */
NGHTTP2_EXTERN void nghttp2_session_callbacks_set_on_header_callback2(
  nghttp2_session_callbacks *cbs,
  nghttp2_on_header_callback2 on_header_callback2);

/**
 * @function
 *
 * Sets callback function invoked when a invalid header name/value
 * pair is received.  If both
 * `nghttp2_session_callbacks_set_on_invalid_header_callback()` and
 * `nghttp2_session_callbacks_set_on_invalid_header_callback2()` are
 * used to set callbacks, the latter takes the precedence.
 */
NGHTTP2_EXTERN void nghttp2_session_callbacks_set_on_invalid_header_callback(
  nghttp2_session_callbacks *cbs,
  nghttp2_on_invalid_header_callback on_invalid_header_callback);

/**
 * @function
 *
 * Sets callback function invoked when a invalid header name/value
 * pair is received.
 */
NGHTTP2_EXTERN void nghttp2_session_callbacks_set_on_invalid_header_callback2(
  nghttp2_session_callbacks *cbs,
  nghttp2_on_invalid_header_callback2 on_invalid_header_callback2);

#ifndef NGHTTP2_NO_SSIZE_T
/**
 * @function
 *
 * .. warning::
 *
 *   Deprecated.  Use
 *   `nghttp2_session_callbacks_set_select_padding_callback2()` with
 *   :type:`nghttp2_select_padding_callback2` instead.
 *
 * Sets callback function invoked when the library asks application
 * how many padding bytes are required for the transmission of the
 * given frame.
 */
NGHTTP2_EXTERN void nghttp2_session_callbacks_set_select_padding_callback(
  nghttp2_session_callbacks *cbs,
  nghttp2_select_padding_callback select_padding_callback);

#endif /* NGHTTP2_NO_SSIZE_T */

/**
 * @function
 *
 * Sets callback function invoked when the library asks application
 * how many padding bytes are required for the transmission of the
 * given frame.
 */
NGHTTP2_EXTERN void nghttp2_session_callbacks_set_select_padding_callback2(
  nghttp2_session_callbacks *cbs,
  nghttp2_select_padding_callback2 select_padding_callback);

#ifndef NGHTTP2_NO_SSIZE_T
/**
 * @function
 *
 * .. warning::
 *
 *   Deprecated.  Use
 *   `nghttp2_session_callbacks_set_data_source_read_length_callback2()`
 *   with :type:`nghttp2_data_source_read_length_callback2` instead.
 *
 * Sets callback function determine the length allowed in
 * :type:`nghttp2_data_source_read_callback`.
 */
NGHTTP2_EXTERN void
nghttp2_session_callbacks_set_data_source_read_length_callback(
  nghttp2_session_callbacks *cbs,
  nghttp2_data_source_read_length_callback data_source_read_length_callback);

#endif /* NGHTTP2_NO_SSIZE_T */

/**
 * @function
 *
 * Sets callback function determine the length allowed in
 * :type:`nghttp2_data_source_read_callback2`.
 */
NGHTTP2_EXTERN void
nghttp2_session_callbacks_set_data_source_read_length_callback2(
  nghttp2_session_callbacks *cbs,
  nghttp2_data_source_read_length_callback2 data_source_read_length_callback);

/**
 * @function
 *
 * Sets callback function invoked when a frame header is received.
 */
NGHTTP2_EXTERN void nghttp2_session_callbacks_set_on_begin_frame_callback(
  nghttp2_session_callbacks *cbs,
  nghttp2_on_begin_frame_callback on_begin_frame_callback);

/**
 * @function
 *
 * Sets callback function invoked when
 * :enum:`nghttp2_data_flag.NGHTTP2_DATA_FLAG_NO_COPY` is used in
 * :type:`nghttp2_data_source_read_callback2` to avoid data copy.
 */
NGHTTP2_EXTERN void nghttp2_session_callbacks_set_send_data_callback(
  nghttp2_session_callbacks *cbs,
  nghttp2_send_data_callback send_data_callback);

#ifndef NGHTTP2_NO_SSIZE_T
/**
 * @function
 *
 * .. warning::
 *
 *   Deprecated.  Use
 *   `nghttp2_session_callbacks_set_pack_extension_callback2()` with
 *   :type:`nghttp2_pack_extension_callback2` instead.
 *
 * Sets callback function invoked when the library asks the
 * application to pack extension frame payload in wire format.
 */
NGHTTP2_EXTERN void nghttp2_session_callbacks_set_pack_extension_callback(
  nghttp2_session_callbacks *cbs,
  nghttp2_pack_extension_callback pack_extension_callback);

#endif /* NGHTTP2_NO_SSIZE_T */

/**
 * @function
 *
 * Sets callback function invoked when the library asks the
 * application to pack extension frame payload in wire format.
 */
NGHTTP2_EXTERN void nghttp2_session_callbacks_set_pack_extension_callback2(
  nghttp2_session_callbacks *cbs,
  nghttp2_pack_extension_callback2 pack_extension_callback);

/**
 * @function
 *
 * Sets callback function invoked when the library asks the
 * application to unpack extension frame payload from wire format.
 */
NGHTTP2_EXTERN void nghttp2_session_callbacks_set_unpack_extension_callback(
  nghttp2_session_callbacks *cbs,
  nghttp2_unpack_extension_callback unpack_extension_callback);

/**
 * @function
 *
 * Sets callback function invoked when chunk of extension frame
 * payload is received.
 */
NGHTTP2_EXTERN void
nghttp2_session_callbacks_set_on_extension_chunk_recv_callback(
  nghttp2_session_callbacks *cbs,
  nghttp2_on_extension_chunk_recv_callback on_extension_chunk_recv_callback);

/**
 * @function
 *
 * .. warning::
 *
 *   Deprecated.  Use
 *   `nghttp2_session_callbacks_set_error_callback2()` with
 *   :type:`nghttp2_error_callback2` instead.
 *
 * Sets callback function invoked when library tells error message to
 * the application.
 *
 * If both :type:`nghttp2_error_callback` and
 * :type:`nghttp2_error_callback2` are set, the latter takes
 * precedence.
 */
NGHTTP2_EXTERN void nghttp2_session_callbacks_set_error_callback(
  nghttp2_session_callbacks *cbs, nghttp2_error_callback error_callback);

/**
 * @function
 *
 * Sets callback function invoked when library tells error code, and
 * message to the application.
 *
 * If both :type:`nghttp2_error_callback` and
 * :type:`nghttp2_error_callback2` are set, the latter takes
 * precedence.
 */
NGHTTP2_EXTERN void nghttp2_session_callbacks_set_error_callback2(
  nghttp2_session_callbacks *cbs, nghttp2_error_callback2 error_callback2);

/**
 * @functypedef
 *
 * Custom memory allocator to replace malloc().  The |mem_user_data|
 * is the mem_user_data member of :type:`nghttp2_mem` structure.
 */
typedef void *(*nghttp2_malloc)(size_t size, void *mem_user_data);

/**
 * @functypedef
 *
 * Custom memory allocator to replace free().  The |mem_user_data| is
 * the mem_user_data member of :type:`nghttp2_mem` structure.
 */
typedef void (*nghttp2_free)(void *ptr, void *mem_user_data);

/**
 * @functypedef
 *
 * Custom memory allocator to replace calloc().  The |mem_user_data|
 * is the mem_user_data member of :type:`nghttp2_mem` structure.
 */
typedef void *(*nghttp2_calloc)(size_t nmemb, size_t size, void *mem_user_data);

/**
 * @functypedef
 *
 * Custom memory allocator to replace realloc().  The |mem_user_data|
 * is the mem_user_data member of :type:`nghttp2_mem` structure.
 */
typedef void *(*nghttp2_realloc)(void *ptr, size_t size, void *mem_user_data);

/**
 * @struct
 *
 * Custom memory allocator functions and user defined pointer.  The
 * |mem_user_data| member is passed to each allocator function.  This
 * can be used, for example, to achieve per-session memory pool.
 *
 * In the following example code, ``my_malloc``, ``my_free``,
 * ``my_calloc`` and ``my_realloc`` are the replacement of the
 * standard allocators ``malloc``, ``free``, ``calloc`` and
 * ``realloc`` respectively::
 *
 *     void *my_malloc_cb(size_t size, void *mem_user_data) {
 *       return my_malloc(size);
 *     }
 *
 *     void my_free_cb(void *ptr, void *mem_user_data) { my_free(ptr); }
 *
 *     void *my_calloc_cb(size_t nmemb, size_t size, void *mem_user_data) {
 *       return my_calloc(nmemb, size);
 *     }
 *
 *     void *my_realloc_cb(void *ptr, size_t size, void *mem_user_data) {
 *       return my_realloc(ptr, size);
 *     }
 *
 *     void session_new() {
 *       nghttp2_session *session;
 *       nghttp2_session_callbacks *callbacks;
 *       nghttp2_mem mem = {NULL, my_malloc_cb, my_free_cb, my_calloc_cb,
 *                          my_realloc_cb};
 *
 *       ...
 *
 *       nghttp2_session_client_new3(&session, callbacks, NULL, NULL, &mem);
 *
 *       ...
 *     }
 */
typedef struct {
  /**
   * An arbitrary user supplied data.  This is passed to each
   * allocator function.
   */
  void *mem_user_data;
  /**
   * Custom allocator function to replace malloc().
   */
  nghttp2_malloc malloc;
  /**
   * Custom allocator function to replace free().
   */
  nghttp2_free free;
  /**
   * Custom allocator function to replace calloc().
   */
  nghttp2_calloc calloc;
  /**
   * Custom allocator function to replace realloc().
   */
  nghttp2_realloc realloc;
} nghttp2_mem;

struct nghttp2_option;

/**
 * @struct
 *
 * Configuration options for :type:`nghttp2_session`.  The details of
 * this structure are intentionally hidden from the public API.
 */
typedef struct nghttp2_option nghttp2_option;

/**
 * @function
 *
 * Initializes |*option_ptr| with default values.
 *
 * When the application finished using this object, it can use
 * `nghttp2_option_del()` to free its memory.
 *
 * This function returns 0 if it succeeds, or one of the following
 * negative error codes:
 *
 * :enum:`nghttp2_error.NGHTTP2_ERR_NOMEM`
 *     Out of memory.
 */
NGHTTP2_EXTERN int nghttp2_option_new(nghttp2_option **option_ptr);

/**
 * @function
 *
 * Frees any resources allocated for |option|.  If |option| is
 * ``NULL``, this function does nothing.
 */
NGHTTP2_EXTERN void nghttp2_option_del(nghttp2_option *option);

/**
 * @function
 *
 * This option prevents the library from sending WINDOW_UPDATE for a
 * connection automatically.  If this option is set to nonzero, the
 * library won't send WINDOW_UPDATE for DATA until application calls
 * `nghttp2_session_consume()` to indicate the consumed amount of
 * data.  Don't use `nghttp2_submit_window_update()` for this purpose.
 * By default, this option is set to zero.
 */
NGHTTP2_EXTERN void
nghttp2_option_set_no_auto_window_update(nghttp2_option *option, int val);

/**
 * @function
 *
 * This option sets the SETTINGS_MAX_CONCURRENT_STREAMS value of
 * remote endpoint as if it is received in SETTINGS frame.  Without
 * specifying this option, the maximum number of outgoing concurrent
 * streams is initially limited to 100 to avoid issues when the local
 * endpoint submits lots of requests before receiving initial SETTINGS
 * frame from the remote endpoint, since sending them at once to the
 * remote endpoint could lead to rejection of some of the requests.
 * This value will be overwritten when the local endpoint receives
 * initial SETTINGS frame from the remote endpoint, either to the
 * value advertised in SETTINGS_MAX_CONCURRENT_STREAMS or to the
 * default value (unlimited) if none was advertised.
 */
NGHTTP2_EXTERN void
nghttp2_option_set_peer_max_concurrent_streams(nghttp2_option *option,
                                               uint32_t val);

/**
 * @function
 *
 * By default, nghttp2 library, if configured as server, requires
 * first 24 bytes of client magic byte string (MAGIC).  In most cases,
 * this will simplify the implementation of server.  But sometimes
 * server may want to detect the application protocol based on first
 * few bytes on clear text communication.
 *
 * If this option is used with nonzero |val|, nghttp2 library does not
 * handle MAGIC.  It still checks following SETTINGS frame.  This
 * means that applications should deal with MAGIC by themselves.
 *
 * If this option is not used or used with zero value, if MAGIC does
 * not match :macro:`NGHTTP2_CLIENT_MAGIC`, `nghttp2_session_recv()`
 * and `nghttp2_session_mem_recv2()` will return error
 * :enum:`nghttp2_error.NGHTTP2_ERR_BAD_CLIENT_MAGIC`, which is fatal
 * error.
 */
NGHTTP2_EXTERN void
nghttp2_option_set_no_recv_client_magic(nghttp2_option *option, int val);

/**
 * @function
 *
 * By default, nghttp2 library enforces subset of HTTP Messaging rules
 * described in `HTTP/2 specification, section 8
 * <https://tools.ietf.org/html/rfc7540#section-8>`_.  See
 * :ref:`http-messaging` section for details.  For those applications
 * who use nghttp2 library as non-HTTP use, give nonzero to |val| to
 * disable this enforcement.  Please note that disabling this feature
 * does not change the fundamental client and server model of HTTP.
 * That is, even if the validation is disabled, only client can send
 * requests.
 */
NGHTTP2_EXTERN void nghttp2_option_set_no_http_messaging(nghttp2_option *option,
                                                         int val);

/**
 * @function
 *
 * RFC 7540 does not enforce any limit on the number of incoming
 * reserved streams (in RFC 7540 terms, streams in reserved (remote)
 * state).  This only affects client side, since only server can push
 * streams.  Malicious server can push arbitrary number of streams,
 * and make client's memory exhausted.  This option can set the
 * maximum number of such incoming streams to avoid possible memory
 * exhaustion.  If this option is set, and pushed streams are
 * automatically closed on reception, without calling user provided
 * callback, if they exceed the given limit.  The default value is
 * 200.  If session is configured as server side, this option has no
 * effect.  Server can control the number of streams to push.
 */
NGHTTP2_EXTERN void
nghttp2_option_set_max_reserved_remote_streams(nghttp2_option *option,
                                               uint32_t val);

/**
 * @function
 *
 * Sets extension frame type the application is willing to handle with
 * user defined callbacks (see
 * :type:`nghttp2_on_extension_chunk_recv_callback` and
 * :type:`nghttp2_unpack_extension_callback`).  The |type| is
 * extension frame type, and must be strictly greater than 0x9.
 * Otherwise, this function does nothing.  The application can call
 * this function multiple times to set more than one frame type to
 * receive.  The application does not have to call this function if it
 * just sends extension frames.
 */
NGHTTP2_EXTERN void
nghttp2_option_set_user_recv_extension_type(nghttp2_option *option,
                                            uint8_t type);

/**
 * @function
 *
 * Sets extension frame type the application is willing to receive
 * using builtin handler.  The |type| is the extension frame type to
 * receive, and must be strictly greater than 0x9.  Otherwise, this
 * function does nothing.  The application can call this function
 * multiple times to set more than one frame type to receive.  The
 * application does not have to call this function if it just sends
 * extension frames.
 *
 * If same frame type is passed to both
 * `nghttp2_option_set_builtin_recv_extension_type()` and
 * `nghttp2_option_set_user_recv_extension_type()`, the latter takes
 * precedence.
 */
NGHTTP2_EXTERN void
nghttp2_option_set_builtin_recv_extension_type(nghttp2_option *option,
                                               uint8_t type);

/**
 * @function
 *
 * This option prevents the library from sending PING frame with ACK
 * flag set automatically when PING frame without ACK flag set is
 * received.  If this option is set to nonzero, the library won't send
 * PING frame with ACK flag set in the response for incoming PING
 * frame.  The application can send PING frame with ACK flag set using
 * `nghttp2_submit_ping()` with :enum:`nghttp2_flag.NGHTTP2_FLAG_ACK`
 * as flags parameter.
 */
NGHTTP2_EXTERN void nghttp2_option_set_no_auto_ping_ack(nghttp2_option *option,
                                                        int val);

/**
 * @function
 *
 * This option sets the maximum length of header block (a set of
 * header fields per one HEADERS frame) to send.  The length of a
 * given set of header fields is calculated using
 * `nghttp2_hd_deflate_bound()`.  The default value is 64KiB.  If
 * application attempts to send header fields larger than this limit,
 * the transmission of the frame fails with error code
 * :enum:`nghttp2_error.NGHTTP2_ERR_FRAME_SIZE_ERROR`.
 */
NGHTTP2_EXTERN void
nghttp2_option_set_max_send_header_block_length(nghttp2_option *option,
                                                size_t val);

/**
 * @function
 *
 * This option sets the maximum dynamic table size for deflating
 * header fields.  The default value is 4KiB.  In HTTP/2, receiver of
 * deflated header block can specify maximum dynamic table size.  The
 * actual maximum size is the minimum of the size receiver specified
 * and this option value.
 */
NGHTTP2_EXTERN void
nghttp2_option_set_max_deflate_dynamic_table_size(nghttp2_option *option,
                                                  size_t val);

/**
 * @function
 *
 * This option prevents the library from retaining closed streams to
 * maintain the priority tree.  If this option is set to nonzero,
 * applications can discard closed stream completely to save memory.
 *
 * If
 * :enum:`nghttp2_settings_id.NGHTTP2_SETTINGS_NO_RFC7540_PRIORITIES`
 * of value of 1 is submitted via `nghttp2_submit_settings()`, any
 * closed streams are not retained regardless of this option.
 */
NGHTTP2_EXTERN void nghttp2_option_set_no_closed_streams(nghttp2_option *option,
                                                         int val);

/**
 * @function
 *
 * This function sets the maximum number of outgoing SETTINGS ACK and
 * PING ACK frames retained in :type:`nghttp2_session` object.  If
 * more than those frames are retained, the peer is considered to be
 * misbehaving and session will be closed.  The default value is 1000.
 */
NGHTTP2_EXTERN void nghttp2_option_set_max_outbound_ack(nghttp2_option *option,
                                                        size_t val);

/**
 * @function
 *
 * This function sets the maximum number of SETTINGS entries per
 * SETTINGS frame that will be accepted. If more than those entries
 * are received, the peer is considered to be misbehaving and session
 * will be closed. The default value is 32.
 */
NGHTTP2_EXTERN void nghttp2_option_set_max_settings(nghttp2_option *option,
                                                    size_t val);

/**
 * @function
 *
 * This option, if set to nonzero, allows server to fallback to
 * :rfc:`7540` priorities if SETTINGS_NO_RFC7540_PRIORITIES was not
 * received from client, and server submitted
 * :enum:`nghttp2_settings_id.NGHTTP2_SETTINGS_NO_RFC7540_PRIORITIES`
 * = 1 via `nghttp2_submit_settings()`.  Most of the advanced
 * functionality for RFC 7540 priorities are still disabled.  This
 * fallback only enables the minimal feature set of RFC 7540
 * priorities to deal with priority signaling from client.
 *
 * Client session ignores this option.
 */
NGHTTP2_EXTERN void
nghttp2_option_set_server_fallback_rfc7540_priorities(nghttp2_option *option,
                                                      int val);

/**
 * @function
 *
 * This option, if set to nonzero, turns off RFC 9113 leading and
 * trailing white spaces validation against HTTP field value.  Some
 * important fields, such as HTTP/2 pseudo header fields, are
 * validated more strictly and this option does not apply to them.
 */
NGHTTP2_EXTERN void
nghttp2_option_set_no_rfc9113_leading_and_trailing_ws_validation(
  nghttp2_option *option, int val);

/**
 * @function
 *
 * This function sets the rate limit for the incoming stream reset
 * (RST_STREAM frame).  It is server use only.  It is a token-bucket
 * based rate limiter.  |burst| specifies the number of tokens that is
 * initially available.  The maximum number of tokens is capped to
 * this value.  |rate| specifies the number of tokens that are
 * regenerated per second.  An incoming RST_STREAM consumes one token.
 * If there is no token available, GOAWAY is sent to tear down the
 * connection.  |burst| and |rate| default to 1000 and 33
 * respectively.
 */
NGHTTP2_EXTERN void
nghttp2_option_set_stream_reset_rate_limit(nghttp2_option *option,
                                           uint64_t burst, uint64_t rate);

/**
 * @function
 *
 * This function sets the maximum number of CONTINUATION frames
 * following an incoming HEADER frame.  If more than those frames are
 * received, the remote endpoint is considered to be misbehaving and
 * session will be closed.  The default value is 8.
 */
NGHTTP2_EXTERN void nghttp2_option_set_max_continuations(nghttp2_option *option,
                                                         size_t val);

/**
 * @function
 *
 * Initializes |*session_ptr| for client use.  The all members of
 * |callbacks| are copied to |*session_ptr|.  Therefore |*session_ptr|
 * does not store |callbacks|.  The |user_data| is an arbitrary user
 * supplied data, which will be passed to the callback functions.
 *
 * The :type:`nghttp2_send_callback2` must be specified.  If the
 * application code uses `nghttp2_session_recv()`, the
 * :type:`nghttp2_recv_callback` must be specified.  The other members
 * of |callbacks| can be ``NULL``.
 *
 * If this function fails, |*session_ptr| is left untouched.
 *
 * This function returns 0 if it succeeds, or one of the following
 * negative error codes:
 *
 * :enum:`nghttp2_error.NGHTTP2_ERR_NOMEM`
 *     Out of memory.
 */
NGHTTP2_EXTERN int
nghttp2_session_client_new(nghttp2_session **session_ptr,
                           const nghttp2_session_callbacks *callbacks,
                           void *user_data);

/**
 * @function
 *
 * Initializes |*session_ptr| for server use.  The all members of
 * |callbacks| are copied to |*session_ptr|. Therefore |*session_ptr|
 * does not store |callbacks|.  The |user_data| is an arbitrary user
 * supplied data, which will be passed to the callback functions.
 *
 * The :type:`nghttp2_send_callback2` must be specified.  If the
 * application code uses `nghttp2_session_recv()`, the
 * :type:`nghttp2_recv_callback` must be specified.  The other members
 * of |callbacks| can be ``NULL``.
 *
 * If this function fails, |*session_ptr| is left untouched.
 *
 * This function returns 0 if it succeeds, or one of the following
 * negative error codes:
 *
 * :enum:`nghttp2_error.NGHTTP2_ERR_NOMEM`
 *     Out of memory.
 */
NGHTTP2_EXTERN int
nghttp2_session_server_new(nghttp2_session **session_ptr,
                           const nghttp2_session_callbacks *callbacks,
                           void *user_data);

/**
 * @function
 *
 * Like `nghttp2_session_client_new()`, but with additional options
 * specified in the |option|.
 *
 * The |option| can be ``NULL`` and the call is equivalent to
 * `nghttp2_session_client_new()`.
 *
 * This function does not take ownership |option|.  The application is
 * responsible for freeing |option| if it finishes using the object.
 *
 * The library code does not refer to |option| after this function
 * returns.
 *
 * This function returns 0 if it succeeds, or one of the following
 * negative error codes:
 *
 * :enum:`nghttp2_error.NGHTTP2_ERR_NOMEM`
 *     Out of memory.
 */
NGHTTP2_EXTERN int
nghttp2_session_client_new2(nghttp2_session **session_ptr,
                            const nghttp2_session_callbacks *callbacks,
                            void *user_data, const nghttp2_option *option);

/**
 * @function
 *
 * Like `nghttp2_session_server_new()`, but with additional options
 * specified in the |option|.
 *
 * The |option| can be ``NULL`` and the call is equivalent to
 * `nghttp2_session_server_new()`.
 *
 * This function does not take ownership |option|.  The application is
 * responsible for freeing |option| if it finishes using the object.
 *
 * The library code does not refer to |option| after this function
 * returns.
 *
 * This function returns 0 if it succeeds, or one of the following
 * negative error codes:
 *
 * :enum:`nghttp2_error.NGHTTP2_ERR_NOMEM`
 *     Out of memory.
 */
NGHTTP2_EXTERN int
nghttp2_session_server_new2(nghttp2_session **session_ptr,
                            const nghttp2_session_callbacks *callbacks,
                            void *user_data, const nghttp2_option *option);

/**
 * @function
 *
 * Like `nghttp2_session_client_new2()`, but with additional custom
 * memory allocator specified in the |mem|.
 *
 * The |mem| can be ``NULL`` and the call is equivalent to
 * `nghttp2_session_client_new2()`.
 *
 * This function does not take ownership |mem|.  The application is
 * responsible for freeing |mem|.
 *
 * The library code does not refer to |mem| pointer after this
 * function returns, so the application can safely free it.
 *
 * This function returns 0 if it succeeds, or one of the following
 * negative error codes:
 *
 * :enum:`nghttp2_error.NGHTTP2_ERR_NOMEM`
 *     Out of memory.
 */
NGHTTP2_EXTERN int nghttp2_session_client_new3(
  nghttp2_session **session_ptr, const nghttp2_session_callbacks *callbacks,
  void *user_data, const nghttp2_option *option, nghttp2_mem *mem);

/**
 * @function
 *
 * Like `nghttp2_session_server_new2()`, but with additional custom
 * memory allocator specified in the |mem|.
 *
 * The |mem| can be ``NULL`` and the call is equivalent to
 * `nghttp2_session_server_new2()`.
 *
 * This function does not take ownership |mem|.  The application is
 * responsible for freeing |mem|.
 *
 * The library code does not refer to |mem| pointer after this
 * function returns, so the application can safely free it.
 *
 * This function returns 0 if it succeeds, or one of the following
 * negative error codes:
 *
 * :enum:`nghttp2_error.NGHTTP2_ERR_NOMEM`
 *     Out of memory.
 */
NGHTTP2_EXTERN int nghttp2_session_server_new3(
  nghttp2_session **session_ptr, const nghttp2_session_callbacks *callbacks,
  void *user_data, const nghttp2_option *option, nghttp2_mem *mem);

/**
 * @function
 *
 * Frees any resources allocated for |session|.  If |session| is
 * ``NULL``, this function does nothing.
 */
NGHTTP2_EXTERN void nghttp2_session_del(nghttp2_session *session);

/**
 * @function
 *
 * Sends pending frames to the remote peer.
 *
 * This function retrieves the highest prioritized frame from the
 * outbound queue and sends it to the remote peer.  It does this as
 * many times as possible until the user callback
 * :type:`nghttp2_send_callback2` returns
 * :enum:`nghttp2_error.NGHTTP2_ERR_WOULDBLOCK`, the outbound queue
 * becomes empty or flow control is triggered (remote window size
 * becomes depleted or maximum number of concurrent streams is
 * reached).  This function calls several callback functions which are
 * passed when initializing the |session|.  Here is the simple time
 * chart which tells when each callback is invoked:
 *
 * 1. Get the next frame to send from outbound queue.
 *
 * 2. Prepare transmission of the frame.
 *
 * 3. If the control frame cannot be sent because some preconditions
 *    are not met (e.g., request HEADERS cannot be sent after GOAWAY),
 *    :type:`nghttp2_on_frame_not_send_callback` is invoked.  Abort
 *    the following steps.
 *
 * 4. If the frame is HEADERS, PUSH_PROMISE or DATA,
 *    :type:`nghttp2_select_padding_callback` is invoked.
 *
 * 5. If the frame is request HEADERS, the stream is opened here.
 *
 * 6. :type:`nghttp2_before_frame_send_callback` is invoked.
 *
 * 7. If :enum:`nghttp2_error.NGHTTP2_ERR_CANCEL` is returned from
 *    :type:`nghttp2_before_frame_send_callback`, the current frame
 *    transmission is canceled, and
 *    :type:`nghttp2_on_frame_not_send_callback` is invoked.  Abort
 *    the following steps.
 *
 * 8. :type:`nghttp2_send_callback2` is invoked one or more times to
 *    send the frame.
 *
 * 9. :type:`nghttp2_on_frame_send_callback` is invoked.
 *
 * 10. If the transmission of the frame triggers closure of the
 *     stream, the stream is closed and
 *     :type:`nghttp2_on_stream_close_callback` is invoked.
 *
 * This function returns 0 if it succeeds, or one of the following
 * negative error codes:
 *
 * :enum:`nghttp2_error.NGHTTP2_ERR_NOMEM`
 *     Out of memory.
 * :enum:`nghttp2_error.NGHTTP2_ERR_CALLBACK_FAILURE`
 *     The callback function failed.
 */
NGHTTP2_EXTERN int nghttp2_session_send(nghttp2_session *session);

#ifndef NGHTTP2_NO_SSIZE_T
/**
 * @function
 *
 * .. warning::
 *
 *   Deprecated.  Use `nghttp2_session_mem_send2()` instead.
 *
 * Returns the serialized data to send.
 *
 * This function behaves like `nghttp2_session_send()` except that it
 * does not use :type:`nghttp2_send_callback` to transmit data.
 * Instead, it assigns the pointer to the serialized data to the
 * |*data_ptr| and returns its length.  The other callbacks are called
 * in the same way as they are in `nghttp2_session_send()`.
 *
 * If no data is available to send, this function returns 0.
 *
 * This function may not return all serialized data in one invocation.
 * To get all data, call this function repeatedly until it returns 0
 * or one of negative error codes.
 *
 * The assigned |*data_ptr| is valid until the next call of
 * `nghttp2_session_mem_send()` or `nghttp2_session_send()`.
 *
 * The caller must send all data before sending the next chunk of
 * data.
 *
 * This function returns the length of the data pointed by the
 * |*data_ptr| if it succeeds, or one of the following negative error
 * codes:
 *
 * :enum:`nghttp2_error.NGHTTP2_ERR_NOMEM`
 *     Out of memory.
 *
 * .. note::
 *
 *   This function may produce very small byte string.  If that is the
 *   case, and application disables Nagle algorithm (``TCP_NODELAY``),
 *   then writing this small chunk leads to very small packet, and it
 *   is very inefficient.  An application should be responsible to
 *   buffer up small chunks of data as necessary to avoid this
 *   situation.
 */
NGHTTP2_EXTERN ssize_t nghttp2_session_mem_send(nghttp2_session *session,
                                                const uint8_t **data_ptr);

#endif /* NGHTTP2_NO_SSIZE_T */

/**
 * @function
 *
 * Returns the serialized data to send.
 *
 * This function behaves like `nghttp2_session_send()` except that it
 * does not use :type:`nghttp2_send_callback2` to transmit data.
 * Instead, it assigns the pointer to the serialized data to the
 * |*data_ptr| and returns its length.  The other callbacks are called
 * in the same way as they are in `nghttp2_session_send()`.
 *
 * If no data is available to send, this function returns 0.
 *
 * This function may not return all serialized data in one invocation.
 * To get all data, call this function repeatedly until it returns 0
 * or one of negative error codes.
 *
 * The assigned |*data_ptr| is valid until the next call of
 * `nghttp2_session_mem_send2()` or `nghttp2_session_send()`.
 *
 * The caller must send all data before sending the next chunk of
 * data.
 *
 * This function returns the length of the data pointed by the
 * |*data_ptr| if it succeeds, or one of the following negative error
 * codes:
 *
 * :enum:`nghttp2_error.NGHTTP2_ERR_NOMEM`
 *     Out of memory.
 *
 * .. note::
 *
 *   This function may produce very small byte string.  If that is the
 *   case, and application disables Nagle algorithm (``TCP_NODELAY``),
 *   then writing this small chunk leads to very small packet, and it
 *   is very inefficient.  An application should be responsible to
 *   buffer up small chunks of data as necessary to avoid this
 *   situation.
 */
NGHTTP2_EXTERN nghttp2_ssize
nghttp2_session_mem_send2(nghttp2_session *session, const uint8_t **data_ptr);

/**
 * @function
 *
 * Receives frames from the remote peer.
 *
 * This function receives as many frames as possible until the user
 * callback :type:`nghttp2_recv_callback` returns
 * :enum:`nghttp2_error.NGHTTP2_ERR_WOULDBLOCK`.  This function calls
 * several callback functions which are passed when initializing the
 * |session|.  Here is the simple time chart which tells when each
 * callback is invoked:
 *
 * 1. :type:`nghttp2_recv_callback` is invoked one or more times to
 *    receive frame header.
 *
 * 2. When frame header is received,
 *    :type:`nghttp2_on_begin_frame_callback` is invoked.
 *
 * 3. If the frame is DATA frame:
 *
 *    1. :type:`nghttp2_recv_callback` is invoked to receive DATA
 *       payload. For each chunk of data,
 *       :type:`nghttp2_on_data_chunk_recv_callback` is invoked.
 *
 *    2. If one DATA frame is completely received,
 *       :type:`nghttp2_on_frame_recv_callback` is invoked.  If the
 *       reception of the frame triggers the closure of the stream,
 *       :type:`nghttp2_on_stream_close_callback` is invoked.
 *
 * 4. If the frame is the control frame:
 *
 *    1. :type:`nghttp2_recv_callback` is invoked one or more times to
 *       receive whole frame.
 *
 *    2. If the received frame is valid, then following actions are
 *       taken.  If the frame is either HEADERS or PUSH_PROMISE,
 *       :type:`nghttp2_on_begin_headers_callback` is invoked.  Then
 *       :type:`nghttp2_on_header_callback` is invoked for each header
 *       name/value pair.  For invalid header field,
 *       :type:`nghttp2_on_invalid_header_callback` is called.  After
 *       all name/value pairs are emitted successfully,
 *       :type:`nghttp2_on_frame_recv_callback` is invoked.  For other
 *       frames, :type:`nghttp2_on_frame_recv_callback` is invoked.
 *       If the reception of the frame triggers the closure of the
 *       stream, :type:`nghttp2_on_stream_close_callback` is invoked.
 *
 *    3. If the received frame is unpacked but is interpreted as
 *       invalid, :type:`nghttp2_on_invalid_frame_recv_callback` is
 *       invoked.
 *
 * This function returns 0 if it succeeds, or one of the following
 * negative error codes:
 *
 * :enum:`nghttp2_error.NGHTTP2_ERR_EOF`
 *     The remote peer did shutdown on the connection.
 * :enum:`nghttp2_error.NGHTTP2_ERR_NOMEM`
 *     Out of memory.
 * :enum:`nghttp2_error.NGHTTP2_ERR_CALLBACK_FAILURE`
 *     The callback function failed.
 * :enum:`nghttp2_error.NGHTTP2_ERR_BAD_CLIENT_MAGIC`
 *     Invalid client magic was detected.  This error only returns
 *     when |session| was configured as server and
 *     `nghttp2_option_set_no_recv_client_magic()` is not used with
 *     nonzero value.
 * :enum:`nghttp2_error.NGHTTP2_ERR_FLOODED`
 *     Flooding was detected in this HTTP/2 session, and it must be
 *     closed.  This is most likely caused by misbehaviour of peer.
 */
NGHTTP2_EXTERN int nghttp2_session_recv(nghttp2_session *session);

#ifndef NGHTTP2_NO_SSIZE_T
/**
 * @function
 *
 * .. warning::
 *
 *   Deprecated.  Use `nghttp2_session_mem_recv2()` instead.
 *
 * Processes data |in| as an input from the remote endpoint.  The
 * |inlen| indicates the number of bytes to receive in the |in|.
 *
 * This function behaves like `nghttp2_session_recv()` except that it
 * does not use :type:`nghttp2_recv_callback` to receive data; the
 * |in| is the only data for the invocation of this function.  If all
 * bytes are processed, this function returns.  The other callbacks
 * are called in the same way as they are in `nghttp2_session_recv()`.
 *
 * In the current implementation, this function always tries to
 * processes |inlen| bytes of input data unless either an error occurs or
 * :enum:`nghttp2_error.NGHTTP2_ERR_PAUSE` is returned from
 * :type:`nghttp2_on_header_callback` or
 * :type:`nghttp2_on_data_chunk_recv_callback`.  If
 * :enum:`nghttp2_error.NGHTTP2_ERR_PAUSE` is used, the return value
 * includes the number of bytes which was used to produce the data or
 * frame for the callback.
 *
 * This function returns the number of processed bytes, or one of the
 * following negative error codes:
 *
 * :enum:`nghttp2_error.NGHTTP2_ERR_NOMEM`
 *     Out of memory.
 * :enum:`nghttp2_error.NGHTTP2_ERR_CALLBACK_FAILURE`
 *     The callback function failed.
 * :enum:`nghttp2_error.NGHTTP2_ERR_BAD_CLIENT_MAGIC`
 *     Invalid client magic was detected.  This error only returns
 *     when |session| was configured as server and
 *     `nghttp2_option_set_no_recv_client_magic()` is not used with
 *     nonzero value.
 * :enum:`nghttp2_error.NGHTTP2_ERR_FLOODED`
 *     Flooding was detected in this HTTP/2 session, and it must be
 *     closed.  This is most likely caused by misbehaviour of peer.
 */
NGHTTP2_EXTERN ssize_t nghttp2_session_mem_recv(nghttp2_session *session,
                                                const uint8_t *in,
                                                size_t inlen);

#endif /* NGHTTP2_NO_SSIZE_T */

/**
 * @function
 *
 * Processes data |in| as an input from the remote endpoint.  The
 * |inlen| indicates the number of bytes to receive in the |in|.
 *
 * This function behaves like `nghttp2_session_recv()` except that it
 * does not use :type:`nghttp2_recv_callback` to receive data; the
 * |in| is the only data for the invocation of this function.  If all
 * bytes are processed, this function returns.  The other callbacks
 * are called in the same way as they are in `nghttp2_session_recv()`.
 *
 * In the current implementation, this function always tries to
 * processes |inlen| bytes of input data unless either an error occurs or
 * :enum:`nghttp2_error.NGHTTP2_ERR_PAUSE` is returned from
 * :type:`nghttp2_on_header_callback` or
 * :type:`nghttp2_on_data_chunk_recv_callback`.  If
 * :enum:`nghttp2_error.NGHTTP2_ERR_PAUSE` is used, the return value
 * includes the number of bytes which was used to produce the data or
 * frame for the callback.
 *
 * This function returns the number of processed bytes, or one of the
 * following negative error codes:
 *
 * :enum:`nghttp2_error.NGHTTP2_ERR_NOMEM`
 *     Out of memory.
 * :enum:`nghttp2_error.NGHTTP2_ERR_CALLBACK_FAILURE`
 *     The callback function failed.
 * :enum:`nghttp2_error.NGHTTP2_ERR_BAD_CLIENT_MAGIC`
 *     Invalid client magic was detected.  This error only returns
 *     when |session| was configured as server and
 *     `nghttp2_option_set_no_recv_client_magic()` is not used with
 *     nonzero value.
 * :enum:`nghttp2_error.NGHTTP2_ERR_FLOODED`
 *     Flooding was detected in this HTTP/2 session, and it must be
 *     closed.  This is most likely caused by misbehaviour of peer.
 */
NGHTTP2_EXTERN nghttp2_ssize nghttp2_session_mem_recv2(nghttp2_session *session,
                                                       const uint8_t *in,
                                                       size_t inlen);

/**
 * @function
 *
 * Puts back previously deferred DATA frame in the stream |stream_id|
 * to the outbound queue.
 *
 * This function returns 0 if it succeeds, or one of the following
 * negative error codes:
 *
 * :enum:`nghttp2_error.NGHTTP2_ERR_INVALID_ARGUMENT`
 *     The stream does not exist; or no deferred data exist.
 * :enum:`nghttp2_error.NGHTTP2_ERR_NOMEM`
 *     Out of memory.
 */
NGHTTP2_EXTERN int nghttp2_session_resume_data(nghttp2_session *session,
                                               int32_t stream_id);

/**
 * @function
 *
 * Returns nonzero value if |session| wants to receive data from the
 * remote peer.
 *
 * If both `nghttp2_session_want_read()` and
 * `nghttp2_session_want_write()` return 0, the application should
 * drop the connection.
 */
NGHTTP2_EXTERN int nghttp2_session_want_read(nghttp2_session *session);

/**
 * @function
 *
 * Returns nonzero value if |session| wants to send data to the remote
 * peer.
 *
 * If both `nghttp2_session_want_read()` and
 * `nghttp2_session_want_write()` return 0, the application should
 * drop the connection.
 */
NGHTTP2_EXTERN int nghttp2_session_want_write(nghttp2_session *session);

/**
 * @function
 *
 * Returns stream_user_data for the stream |stream_id|.  The
 * stream_user_data is provided by `nghttp2_submit_request2()`,
 * `nghttp2_submit_headers()` or
 * `nghttp2_session_set_stream_user_data()`.  Unless it is set using
 * `nghttp2_session_set_stream_user_data()`, if the stream is
 * initiated by the remote endpoint, stream_user_data is always
 * ``NULL``.  If the stream does not exist, this function returns
 * ``NULL``.
 */
NGHTTP2_EXTERN void *
nghttp2_session_get_stream_user_data(nghttp2_session *session,
                                     int32_t stream_id);

/**
 * @function
 *
 * Sets the |stream_user_data| to the stream denoted by the
 * |stream_id|.  If a stream user data is already set to the stream,
 * it is replaced with the |stream_user_data|.  It is valid to specify
 * ``NULL`` in the |stream_user_data|, which nullifies the associated
 * data pointer.
 *
 * It is valid to set the |stream_user_data| to the stream reserved by
 * PUSH_PROMISE frame.
 *
 * This function returns 0 if it succeeds, or one of following
 * negative error codes:
 *
 * :enum:`nghttp2_error.NGHTTP2_ERR_INVALID_ARGUMENT`
 *     The stream does not exist
 */
NGHTTP2_EXTERN int
nghttp2_session_set_stream_user_data(nghttp2_session *session,
                                     int32_t stream_id, void *stream_user_data);

/**
 * @function
 *
 * Sets |user_data| to |session|, overwriting the existing user data
 * specified in `nghttp2_session_client_new()`, or
 * `nghttp2_session_server_new()`.
 */
NGHTTP2_EXTERN void nghttp2_session_set_user_data(nghttp2_session *session,
                                                  void *user_data);

/**
 * @function
 *
 * Returns the number of frames in the outbound queue.  This does not
 * include the deferred DATA frames.
 */
NGHTTP2_EXTERN size_t
nghttp2_session_get_outbound_queue_size(nghttp2_session *session);

/**
 * @function
 *
 * Returns the number of DATA payload in bytes received without
 * WINDOW_UPDATE transmission for the stream |stream_id|.  The local
 * (receive) window size can be adjusted by
 * `nghttp2_submit_window_update()`.  This function takes into account
 * that and returns effective data length.  In particular, if the
 * local window size is reduced by submitting negative
 * window_size_increment with `nghttp2_submit_window_update()`, this
 * function returns the number of bytes less than actually received.
 *
 * This function returns -1 if it fails.
 */
NGHTTP2_EXTERN int32_t nghttp2_session_get_stream_effective_recv_data_length(
  nghttp2_session *session, int32_t stream_id);

/**
 * @function
 *
 * Returns the local (receive) window size for the stream |stream_id|.
 * The local window size can be adjusted by
 * `nghttp2_submit_window_update()`.  This function takes into account
 * that and returns effective window size.
 *
 * This function does not take into account the amount of received
 * data from the remote endpoint.  Use
 * `nghttp2_session_get_stream_local_window_size()` to know the amount
 * of data the remote endpoint can send without receiving stream level
 * WINDOW_UPDATE frame.  Note that each stream is still subject to the
 * connection level flow control.
 *
 * This function returns -1 if it fails.
 */
NGHTTP2_EXTERN int32_t nghttp2_session_get_stream_effective_local_window_size(
  nghttp2_session *session, int32_t stream_id);

/**
 * @function
 *
 * Returns the amount of flow-controlled payload (e.g., DATA) that the
 * remote endpoint can send without receiving stream level
 * WINDOW_UPDATE frame.  It is also subject to the connection level
 * flow control.  So the actual amount of data to send is
 * min(`nghttp2_session_get_stream_local_window_size()`,
 * `nghttp2_session_get_local_window_size()`).
 *
 * This function returns -1 if it fails.
 */
NGHTTP2_EXTERN int32_t nghttp2_session_get_stream_local_window_size(
  nghttp2_session *session, int32_t stream_id);

/**
 * @function
 *
 * Returns the number of DATA payload in bytes received without
 * WINDOW_UPDATE transmission for a connection.  The local (receive)
 * window size can be adjusted by `nghttp2_submit_window_update()`.
 * This function takes into account that and returns effective data
 * length.  In particular, if the local window size is reduced by
 * submitting negative window_size_increment with
 * `nghttp2_submit_window_update()`, this function returns the number
 * of bytes less than actually received.
 *
 * This function returns -1 if it fails.
 */
NGHTTP2_EXTERN int32_t
nghttp2_session_get_effective_recv_data_length(nghttp2_session *session);

/**
 * @function
 *
 * Returns the local (receive) window size for a connection.  The
 * local window size can be adjusted by
 * `nghttp2_submit_window_update()`.  This function takes into account
 * that and returns effective window size.
 *
 * This function does not take into account the amount of received
 * data from the remote endpoint.  Use
 * `nghttp2_session_get_local_window_size()` to know the amount of
 * data the remote endpoint can send without receiving
 * connection-level WINDOW_UPDATE frame.  Note that each stream is
 * still subject to the stream level flow control.
 *
 * This function returns -1 if it fails.
 */
NGHTTP2_EXTERN int32_t
nghttp2_session_get_effective_local_window_size(nghttp2_session *session);

/**
 * @function
 *
 * Returns the amount of flow-controlled payload (e.g., DATA) that the
 * remote endpoint can send without receiving connection level
 * WINDOW_UPDATE frame.  Note that each stream is still subject to the
 * stream level flow control (see
 * `nghttp2_session_get_stream_local_window_size()`).
 *
 * This function returns -1 if it fails.
 */
NGHTTP2_EXTERN int32_t
nghttp2_session_get_local_window_size(nghttp2_session *session);

/**
 * @function
 *
 * Returns the remote window size for a given stream |stream_id|.
 *
 * This is the amount of flow-controlled payload (e.g., DATA) that the
 * local endpoint can send without stream level WINDOW_UPDATE.  There
 * is also connection level flow control, so the effective size of
 * payload that the local endpoint can actually send is
 * min(`nghttp2_session_get_stream_remote_window_size()`,
 * `nghttp2_session_get_remote_window_size()`).
 *
 * This function returns -1 if it fails.
 */
NGHTTP2_EXTERN int32_t nghttp2_session_get_stream_remote_window_size(
  nghttp2_session *session, int32_t stream_id);

/**
 * @function
 *
 * Returns the remote window size for a connection.
 *
 * This function always succeeds.
 */
NGHTTP2_EXTERN int32_t
nghttp2_session_get_remote_window_size(nghttp2_session *session);

/**
 * @function
 *
 * Returns 1 if local peer half closed the given stream |stream_id|.
 * Returns 0 if it did not.  Returns -1 if no such stream exists.
 */
NGHTTP2_EXTERN int
nghttp2_session_get_stream_local_close(nghttp2_session *session,
                                       int32_t stream_id);

/**
 * @function
 *
 * Returns 1 if remote peer half closed the given stream |stream_id|.
 * Returns 0 if it did not.  Returns -1 if no such stream exists.
 */
NGHTTP2_EXTERN int
nghttp2_session_get_stream_remote_close(nghttp2_session *session,
                                        int32_t stream_id);

/**
 * @function
 *
 * Returns the current dynamic table size of HPACK inflater, including
 * the overhead 32 bytes per entry described in RFC 7541.
 */
NGHTTP2_EXTERN size_t
nghttp2_session_get_hd_inflate_dynamic_table_size(nghttp2_session *session);

/**
 * @function
 *
 * Returns the current dynamic table size of HPACK deflater including
 * the overhead 32 bytes per entry described in RFC 7541.
 */
NGHTTP2_EXTERN size_t
nghttp2_session_get_hd_deflate_dynamic_table_size(nghttp2_session *session);

/**
 * @function
 *
 * Signals the session so that the connection should be terminated.
 *
 * The last stream ID is the minimum value between the stream ID of a
 * stream for which :type:`nghttp2_on_frame_recv_callback` was called
 * most recently and the last stream ID we have sent to the peer
 * previously.
 *
 * The |error_code| is the error code of this GOAWAY frame.  The
 * pre-defined error code is one of :enum:`nghttp2_error_code`.
 *
 * After the transmission, both `nghttp2_session_want_read()` and
 * `nghttp2_session_want_write()` return 0.
 *
 * This function should be called when the connection should be
 * terminated after sending GOAWAY.  If the remaining streams should
 * be processed after GOAWAY, use `nghttp2_submit_goaway()` instead.
 *
 * This function returns 0 if it succeeds, or one of the following
 * negative error codes:
 *
 * :enum:`nghttp2_error.NGHTTP2_ERR_NOMEM`
 *     Out of memory.
 */
NGHTTP2_EXTERN int nghttp2_session_terminate_session(nghttp2_session *session,
                                                     uint32_t error_code);

/**
 * @function
 *
 * Signals the session so that the connection should be terminated.
 *
 * This function behaves like `nghttp2_session_terminate_session()`,
 * but the last stream ID can be specified by the application for fine
 * grained control of stream.  The HTTP/2 specification does not allow
 * last_stream_id to be increased.  So the actual value sent as
 * last_stream_id is the minimum value between the given
 * |last_stream_id| and the last_stream_id we have previously sent to
 * the peer.
 *
 * The |last_stream_id| is peer's stream ID or 0.  So if |session| is
 * initialized as client, |last_stream_id| must be even or 0.  If
 * |session| is initialized as server, |last_stream_id| must be odd or
 * 0.
 *
 * This function returns 0 if it succeeds, or one of the following
 * negative error codes:
 *
 * :enum:`nghttp2_error.NGHTTP2_ERR_NOMEM`
 *     Out of memory.
 * :enum:`nghttp2_error.NGHTTP2_ERR_INVALID_ARGUMENT`
 *     The |last_stream_id| is invalid.
 */
NGHTTP2_EXTERN int nghttp2_session_terminate_session2(nghttp2_session *session,
                                                      int32_t last_stream_id,
                                                      uint32_t error_code);

/**
 * @function
 *
 * Signals to the client that the server started graceful shutdown
 * procedure.
 *
 * This function is only usable for server.  If this function is
 * called with client side session, this function returns
 * :enum:`nghttp2_error.NGHTTP2_ERR_INVALID_STATE`.
 *
 * To gracefully shutdown HTTP/2 session, server should call this
 * function to send GOAWAY with last_stream_id (1u << 31) - 1.  And
 * after some delay (e.g., 1 RTT), send another GOAWAY with the stream
 * ID that the server has some processing using
 * `nghttp2_submit_goaway()`.  See also
 * `nghttp2_session_get_last_proc_stream_id()`.
 *
 * Unlike `nghttp2_submit_goaway()`, this function just sends GOAWAY
 * and does nothing more.  This is a mere indication to the client
 * that session shutdown is imminent.  The application should call
 * `nghttp2_submit_goaway()` with appropriate last_stream_id after
 * this call.
 *
 * If one or more GOAWAY frame have been already sent by either
 * `nghttp2_submit_goaway()` or `nghttp2_session_terminate_session()`,
 * this function has no effect.
 *
 * This function returns 0 if it succeeds, or one of the following
 * negative error codes:
 *
 * :enum:`nghttp2_error.NGHTTP2_ERR_NOMEM`
 *     Out of memory.
 * :enum:`nghttp2_error.NGHTTP2_ERR_INVALID_STATE`
 *     The |session| is initialized as client.
 */
NGHTTP2_EXTERN int nghttp2_submit_shutdown_notice(nghttp2_session *session);

/**
 * @function
 *
 * Returns the value of SETTINGS |id| notified by a remote endpoint.
 * The |id| must be one of values defined in
 * :enum:`nghttp2_settings_id`.
 */
NGHTTP2_EXTERN uint32_t nghttp2_session_get_remote_settings(
  nghttp2_session *session, nghttp2_settings_id id);

/**
 * @function
 *
 * Returns the value of SETTINGS |id| of local endpoint acknowledged
 * by the remote endpoint.  The |id| must be one of the values defined
 * in :enum:`nghttp2_settings_id`.
 */
NGHTTP2_EXTERN uint32_t nghttp2_session_get_local_settings(
  nghttp2_session *session, nghttp2_settings_id id);

/**
 * @function
 *
 * Tells the |session| that next stream ID is |next_stream_id|.  The
 * |next_stream_id| must be equal or greater than the value returned
 * by `nghttp2_session_get_next_stream_id()`.
 *
 * This function returns 0 if it succeeds, or one of the following
 * negative error codes:
 *
 * :enum:`nghttp2_error.NGHTTP2_ERR_INVALID_ARGUMENT`
 *     The |next_stream_id| is strictly less than the value
 *     `nghttp2_session_get_next_stream_id()` returns; or
 *     |next_stream_id| is invalid (e.g., even integer for client, or
 *     odd integer for server).
 */
NGHTTP2_EXTERN int nghttp2_session_set_next_stream_id(nghttp2_session *session,
                                                      int32_t next_stream_id);

/**
 * @function
 *
 * Returns the next outgoing stream ID.  Notice that return type is
 * uint32_t.  If we run out of stream ID for this session, this
 * function returns 1 << 31.
 */
NGHTTP2_EXTERN uint32_t
nghttp2_session_get_next_stream_id(nghttp2_session *session);

/**
 * @function
 *
 * Tells the |session| that |size| bytes for a stream denoted by
 * |stream_id| were consumed by application and are ready to
 * WINDOW_UPDATE.  The consumed bytes are counted towards both
 * connection and stream level WINDOW_UPDATE (see
 * `nghttp2_session_consume_connection()` and
 * `nghttp2_session_consume_stream()` to update consumption
 * independently).  This function is intended to be used without
 * automatic window update (see
 * `nghttp2_option_set_no_auto_window_update()`).
 *
 * This function returns 0 if it succeeds, or one of the following
 * negative error codes:
 *
 * :enum:`nghttp2_error.NGHTTP2_ERR_NOMEM`
 *     Out of memory.
 * :enum:`nghttp2_error.NGHTTP2_ERR_INVALID_ARGUMENT`
 *     The |stream_id| is 0.
 * :enum:`nghttp2_error.NGHTTP2_ERR_INVALID_STATE`
 *     Automatic WINDOW_UPDATE is not disabled.
 */
NGHTTP2_EXTERN int nghttp2_session_consume(nghttp2_session *session,
                                           int32_t stream_id, size_t size);

/**
 * @function
 *
 * Like `nghttp2_session_consume()`, but this only tells library that
 * |size| bytes were consumed only for connection level.  Note that
 * HTTP/2 maintains connection and stream level flow control windows
 * independently.
 *
 * This function returns 0 if it succeeds, or one of the following
 * negative error codes:
 *
 * :enum:`nghttp2_error.NGHTTP2_ERR_NOMEM`
 *     Out of memory.
 * :enum:`nghttp2_error.NGHTTP2_ERR_INVALID_STATE`
 *     Automatic WINDOW_UPDATE is not disabled.
 */
NGHTTP2_EXTERN int nghttp2_session_consume_connection(nghttp2_session *session,
                                                      size_t size);

/**
 * @function
 *
 * Like `nghttp2_session_consume()`, but this only tells library that
 * |size| bytes were consumed only for stream denoted by |stream_id|.
 * Note that HTTP/2 maintains connection and stream level flow control
 * windows independently.
 *
 * This function returns 0 if it succeeds, or one of the following
 * negative error codes:
 *
 * :enum:`nghttp2_error.NGHTTP2_ERR_NOMEM`
 *     Out of memory.
 * :enum:`nghttp2_error.NGHTTP2_ERR_INVALID_ARGUMENT`
 *     The |stream_id| is 0.
 * :enum:`nghttp2_error.NGHTTP2_ERR_INVALID_STATE`
 *     Automatic WINDOW_UPDATE is not disabled.
 */
NGHTTP2_EXTERN int nghttp2_session_consume_stream(nghttp2_session *session,
                                                  int32_t stream_id,
                                                  size_t size);

/**
 * @function
 *
 * .. warning::
 *
 *   Deprecated.  :rfc:`7540` priorities are deprecated by
 *   :rfc:`9113`.  Consider migrating to :rfc:`9218` extensible
 *   prioritization scheme.  In the future release after the end of
 *   2024, this function will always return 0 without doing anything.
 *
 * Changes priority of existing stream denoted by |stream_id|.  The
 * new priority specification is |pri_spec|.
 *
 * The priority is changed silently and instantly, and no PRIORITY
 * frame will be sent to notify the peer of this change.  This
 * function may be useful for server to change the priority of pushed
 * stream.
 *
 * If |session| is initialized as server, and ``pri_spec->stream_id``
 * points to the idle stream, the idle stream is created if it does
 * not exist.  The created idle stream will depend on root stream
 * (stream 0) with weight 16.
 *
 * Otherwise, if stream denoted by ``pri_spec->stream_id`` is not
 * found, we use default priority instead of given |pri_spec|.  That
 * is make stream depend on root stream with weight 16.
 *
 * If
 * :enum:`nghttp2_settings_id.NGHTTP2_SETTINGS_NO_RFC7540_PRIORITIES`
 * of value of 1 is submitted via `nghttp2_submit_settings()`, this
 * function does nothing and returns 0.
 *
 * This function returns 0 if it succeeds, or one of the following
 * negative error codes:
 *
 * :enum:`nghttp2_error.NGHTTP2_ERR_NOMEM`
 *     Out of memory.
 * :enum:`nghttp2_error.NGHTTP2_ERR_INVALID_ARGUMENT`
 *     Attempted to depend on itself; or no stream exist for the given
 *     |stream_id|; or |stream_id| is 0
 */
NGHTTP2_EXTERN int
nghttp2_session_change_stream_priority(nghttp2_session *session,
                                       int32_t stream_id,
                                       const nghttp2_priority_spec *pri_spec);

/**
 * @function
 *
 * .. warning::
 *
 *   Deprecated.  :rfc:`7540` priorities are deprecated by
 *   :rfc:`9113`.  Consider migrating to :rfc:`9218` extensible
 *   prioritization scheme.  In the future release after the end of
 *   2024, this function will always return 0 without doing anything.
 *
 * Creates idle stream with the given |stream_id|, and priority
 * |pri_spec|.
 *
 * The stream creation is done without sending PRIORITY frame, which
 * means that peer does not know about the existence of this idle
 * stream in the local endpoint.
 *
 * RFC 7540 does not disallow the use of creation of idle stream with
 * odd or even stream ID regardless of client or server.  So this
 * function can create odd or even stream ID regardless of client or
 * server.  But probably it is a bit safer to use the stream ID the
 * local endpoint can initiate (in other words, use odd stream ID for
 * client, and even stream ID for server), to avoid potential
 * collision from peer's instruction.  Also we can use
 * `nghttp2_session_set_next_stream_id()` to avoid to open created
 * idle streams accidentally if we follow this recommendation.
 *
 * If |session| is initialized as server, and ``pri_spec->stream_id``
 * points to the idle stream, the idle stream is created if it does
 * not exist.  The created idle stream will depend on root stream
 * (stream 0) with weight 16.
 *
 * Otherwise, if stream denoted by ``pri_spec->stream_id`` is not
 * found, we use default priority instead of given |pri_spec|.  That
 * is make stream depend on root stream with weight 16.
 *
 * If
 * :enum:`nghttp2_settings_id.NGHTTP2_SETTINGS_NO_RFC7540_PRIORITIES`
 * of value of 1 is submitted via `nghttp2_submit_settings()`, this
 * function does nothing and returns 0.
 *
 * This function returns 0 if it succeeds, or one of the following
 * negative error codes:
 *
 * :enum:`nghttp2_error.NGHTTP2_ERR_NOMEM`
 *     Out of memory.
 * :enum:`nghttp2_error.NGHTTP2_ERR_INVALID_ARGUMENT`
 *     Attempted to depend on itself; or stream denoted by |stream_id|
 *     already exists; or |stream_id| cannot be used to create idle
 *     stream (in other words, local endpoint has already opened
 *     stream ID greater than or equal to the given stream ID; or
 *     |stream_id| is 0
 */
NGHTTP2_EXTERN int
nghttp2_session_create_idle_stream(nghttp2_session *session, int32_t stream_id,
                                   const nghttp2_priority_spec *pri_spec);

/**
 * @function
 *
 * .. warning::
 *
 *   This function is deprecated in favor of
 *   `nghttp2_session_upgrade2()`, because this function lacks the
 *   parameter to tell the library the request method used in the
 *   original HTTP request.  This information is required for client
 *   to validate actual response body length against content-length
 *   header field (see `nghttp2_option_set_no_http_messaging()`).  If
 *   HEAD is used in request, the length of response body must be 0
 *   regardless of value included in content-length header field.
 *
 * Performs post-process of HTTP Upgrade request.  This function can
 * be called from both client and server, but the behavior is very
 * different in each other.
 *
 * If called from client side, the |settings_payload| must be the
 * value sent in ``HTTP2-Settings`` header field and must be decoded
 * by base64url decoder.  The |settings_payloadlen| is the length of
 * |settings_payload|.  The |settings_payload| is unpacked and its
 * setting values will be submitted using `nghttp2_submit_settings()`.
 * This means that the client application code does not need to submit
 * SETTINGS by itself.  The stream with stream ID=1 is opened and the
 * |stream_user_data| is used for its stream_user_data.  The opened
 * stream becomes half-closed (local) state.
 *
 * If called from server side, the |settings_payload| must be the
 * value received in ``HTTP2-Settings`` header field and must be
 * decoded by base64url decoder.  The |settings_payloadlen| is the
 * length of |settings_payload|.  It is treated as if the SETTINGS
 * frame with that payload is received.  Thus, callback functions for
 * the reception of SETTINGS frame will be invoked.  The stream with
 * stream ID=1 is opened.  The |stream_user_data| is ignored.  The
 * opened stream becomes half-closed (remote).
 *
 * This function returns 0 if it succeeds, or one of the following
 * negative error codes:
 *
 * :enum:`nghttp2_error.NGHTTP2_ERR_NOMEM`
 *     Out of memory.
 * :enum:`nghttp2_error.NGHTTP2_ERR_INVALID_ARGUMENT`
 *     The |settings_payload| is badly formed.
 * :enum:`nghttp2_error.NGHTTP2_ERR_PROTO`
 *     The stream ID 1 is already used or closed; or is not available.
 */
NGHTTP2_EXTERN int nghttp2_session_upgrade(nghttp2_session *session,
                                           const uint8_t *settings_payload,
                                           size_t settings_payloadlen,
                                           void *stream_user_data);

/**
 * @function
 *
 * Performs post-process of HTTP Upgrade request.  This function can
 * be called from both client and server, but the behavior is very
 * different in each other.
 *
 * If called from client side, the |settings_payload| must be the
 * value sent in ``HTTP2-Settings`` header field and must be decoded
 * by base64url decoder.  The |settings_payloadlen| is the length of
 * |settings_payload|.  The |settings_payload| is unpacked and its
 * setting values will be submitted using `nghttp2_submit_settings()`.
 * This means that the client application code does not need to submit
 * SETTINGS by itself.  The stream with stream ID=1 is opened and the
 * |stream_user_data| is used for its stream_user_data.  The opened
 * stream becomes half-closed (local) state.
 *
 * If called from server side, the |settings_payload| must be the
 * value received in ``HTTP2-Settings`` header field and must be
 * decoded by base64url decoder.  The |settings_payloadlen| is the
 * length of |settings_payload|.  It is treated as if the SETTINGS
 * frame with that payload is received.  Thus, callback functions for
 * the reception of SETTINGS frame will be invoked.  The stream with
 * stream ID=1 is opened.  The |stream_user_data| is ignored.  The
 * opened stream becomes half-closed (remote).
 *
 * If the request method is HEAD, pass nonzero value to
 * |head_request|.  Otherwise, pass 0.
 *
 * This function returns 0 if it succeeds, or one of the following
 * negative error codes:
 *
 * :enum:`nghttp2_error.NGHTTP2_ERR_NOMEM`
 *     Out of memory.
 * :enum:`nghttp2_error.NGHTTP2_ERR_INVALID_ARGUMENT`
 *     The |settings_payload| is badly formed.
 * :enum:`nghttp2_error.NGHTTP2_ERR_PROTO`
 *     The stream ID 1 is already used or closed; or is not available.
 */
NGHTTP2_EXTERN int nghttp2_session_upgrade2(nghttp2_session *session,
                                            const uint8_t *settings_payload,
                                            size_t settings_payloadlen,
                                            int head_request,
                                            void *stream_user_data);

#ifndef NGHTTP2_NO_SSIZE_T
/**
 * @function
 *
 * .. warning::
 *
 *   Deprecated.  Use `nghttp2_pack_settings_payload2()` instead.
 *
 * Serializes the SETTINGS values |iv| in the |buf|.  The size of the
 * |buf| is specified by |buflen|.  The number of entries in the |iv|
 * array is given by |niv|.  The required space in |buf| for the |niv|
 * entries is ``6*niv`` bytes and if the given buffer is too small, an
 * error is returned.  This function is used mainly for creating a
 * SETTINGS payload to be sent with the ``HTTP2-Settings`` header
 * field in an HTTP Upgrade request.  The data written in |buf| is NOT
 * base64url encoded and the application is responsible for encoding.
 *
 * This function returns the number of bytes written in |buf|, or one
 * of the following negative error codes:
 *
 * :enum:`nghttp2_error.NGHTTP2_ERR_INVALID_ARGUMENT`
 *     The |iv| contains duplicate settings ID or invalid value.
 *
 * :enum:`nghttp2_error.NGHTTP2_ERR_INSUFF_BUFSIZE`
 *     The provided |buflen| size is too small to hold the output.
 */
NGHTTP2_EXTERN ssize_t nghttp2_pack_settings_payload(
  uint8_t *buf, size_t buflen, const nghttp2_settings_entry *iv, size_t niv);

#endif /* NGHTTP2_NO_SSIZE_T */

/**
 * @function
 *
 * Serializes the SETTINGS values |iv| in the |buf|.  The size of the
 * |buf| is specified by |buflen|.  The number of entries in the |iv|
 * array is given by |niv|.  The required space in |buf| for the |niv|
 * entries is ``6*niv`` bytes and if the given buffer is too small, an
 * error is returned.  This function is used mainly for creating a
 * SETTINGS payload to be sent with the ``HTTP2-Settings`` header
 * field in an HTTP Upgrade request.  The data written in |buf| is NOT
 * base64url encoded and the application is responsible for encoding.
 *
 * This function returns the number of bytes written in |buf|, or one
 * of the following negative error codes:
 *
 * :enum:`nghttp2_error.NGHTTP2_ERR_INVALID_ARGUMENT`
 *     The |iv| contains duplicate settings ID or invalid value.
 *
 * :enum:`nghttp2_error.NGHTTP2_ERR_INSUFF_BUFSIZE`
 *     The provided |buflen| size is too small to hold the output.
 */
NGHTTP2_EXTERN nghttp2_ssize nghttp2_pack_settings_payload2(
  uint8_t *buf, size_t buflen, const nghttp2_settings_entry *iv, size_t niv);

/**
 * @function
 *
 * Returns string describing the |lib_error_code|.  The
 * |lib_error_code| must be one of the :enum:`nghttp2_error`.
 */
NGHTTP2_EXTERN const char *nghttp2_strerror(int lib_error_code);

/**
 * @function
 *
 * Returns string representation of HTTP/2 error code |error_code|
 * (e.g., ``PROTOCOL_ERROR`` is returned if ``error_code ==
 * NGHTTP2_PROTOCOL_ERROR``).  If string representation is unknown for
 * given |error_code|, this function returns string ``unknown``.
 */
NGHTTP2_EXTERN const char *nghttp2_http2_strerror(uint32_t error_code);

/**
 * @function
 *
 * .. warning::
 *
 *   Deprecated.  :rfc:`7540` priorities are deprecated by
 *   :rfc:`9113`.  Consider migrating to :rfc:`9218` extensible
 *   prioritization scheme.
 *
 * Initializes |pri_spec| with the |stream_id| of the stream to depend
 * on with |weight| and its exclusive flag.  If |exclusive| is
 * nonzero, exclusive flag is set.
 *
 * The |weight| must be in [:macro:`NGHTTP2_MIN_WEIGHT`,
 * :macro:`NGHTTP2_MAX_WEIGHT`], inclusive.
 */
NGHTTP2_EXTERN void nghttp2_priority_spec_init(nghttp2_priority_spec *pri_spec,
                                               int32_t stream_id,
                                               int32_t weight, int exclusive);

/**
 * @function
 *
 * .. warning::
 *
 *   Deprecated.  :rfc:`7540` priorities are deprecated by
 *   :rfc:`9113`.  Consider migrating to :rfc:`9218` extensible
 *   prioritization scheme.
 *
 * Initializes |pri_spec| with the default values.  The default values
 * are: stream_id = 0, weight = :macro:`NGHTTP2_DEFAULT_WEIGHT` and
 * exclusive = 0.
 */
NGHTTP2_EXTERN void
nghttp2_priority_spec_default_init(nghttp2_priority_spec *pri_spec);

/**
 * @function
 *
 * .. warning::
 *
 *   Deprecated.  :rfc:`7540` priorities are deprecated by
 *   :rfc:`9113`.  Consider migrating to :rfc:`9218` extensible
 *   prioritization scheme.
 *
 * Returns nonzero if the |pri_spec| is filled with default values.
 */
NGHTTP2_EXTERN int
nghttp2_priority_spec_check_default(const nghttp2_priority_spec *pri_spec);

#ifndef NGHTTP2_NO_SSIZE_T
/**
 * @function
 *
 * .. warning::
 *
 *   Deprecated.  Use `nghttp2_submit_request2()` instead.
 *
 * Submits HEADERS frame and optionally one or more DATA frames.
 *
 * The |pri_spec| is a deprecated priority specification of this
 * request.  ``NULL`` means the default priority (see
 * `nghttp2_priority_spec_default_init()`).  To specify the priority,
 * use `nghttp2_priority_spec_init()`.  If |pri_spec| is not ``NULL``,
 * this function will copy its data members.
 *
 * The ``pri_spec->weight`` must be in [:macro:`NGHTTP2_MIN_WEIGHT`,
 * :macro:`NGHTTP2_MAX_WEIGHT`], inclusive.  If ``pri_spec->weight``
 * is strictly less than :macro:`NGHTTP2_MIN_WEIGHT`, it becomes
 * :macro:`NGHTTP2_MIN_WEIGHT`.  If it is strictly greater than
 * :macro:`NGHTTP2_MAX_WEIGHT`, it becomes
 * :macro:`NGHTTP2_MAX_WEIGHT`.
 *
 * If
 * :enum:`nghttp2_settings_id.NGHTTP2_SETTINGS_NO_RFC7540_PRIORITIES`
 * of value of 1 is received by a remote endpoint, |pri_spec| is
 * ignored, and treated as if ``NULL`` is specified.
 *
 * The |nva| is an array of name/value pair :type:`nghttp2_nv` with
 * |nvlen| elements.  The application is responsible to include
 * required pseudo-header fields (header field whose name starts with
 * ":") in |nva| and must place pseudo-headers before regular header
 * fields.
 *
 * This function creates copies of all name/value pairs in |nva|.  It
 * also lower-cases all names in |nva|.  The order of elements in
 * |nva| is preserved.  For header fields with
 * :enum:`nghttp2_nv_flag.NGHTTP2_NV_FLAG_NO_COPY_NAME` and
 * :enum:`nghttp2_nv_flag.NGHTTP2_NV_FLAG_NO_COPY_VALUE` are set,
 * header field name and value are not copied respectively.  With
 * :enum:`nghttp2_nv_flag.NGHTTP2_NV_FLAG_NO_COPY_NAME`, application
 * is responsible to pass header field name in lowercase.  The
 * application should maintain the references to them until
 * :type:`nghttp2_on_frame_send_callback` or
 * :type:`nghttp2_on_frame_not_send_callback` is called.
 *
 * HTTP/2 specification has requirement about header fields in the
 * request HEADERS.  See the specification for more details.
 *
 * If |data_prd| is not ``NULL``, it provides data which will be sent
 * in subsequent DATA frames.  In this case, a method that allows
 * request message bodies
 * (https://tools.ietf.org/html/rfc7231#section-4) must be specified
 * with ``:method`` key in |nva| (e.g. ``POST``).  This function does
 * not take ownership of the |data_prd|.  The function copies the
 * members of the |data_prd|.  If |data_prd| is ``NULL``, HEADERS have
 * END_STREAM set.  The |stream_user_data| is data associated to the
 * stream opened by this request and can be an arbitrary pointer,
 * which can be retrieved later by
 * `nghttp2_session_get_stream_user_data()`.
 *
 * This function returns assigned stream ID if it succeeds, or one of
 * the following negative error codes:
 *
 * :enum:`nghttp2_error.NGHTTP2_ERR_NOMEM`
 *     Out of memory.
 * :enum:`nghttp2_error.NGHTTP2_ERR_STREAM_ID_NOT_AVAILABLE`
 *     No stream ID is available because maximum stream ID was
 *     reached.
 * :enum:`nghttp2_error.NGHTTP2_ERR_INVALID_ARGUMENT`
 *     Trying to depend on itself (new stream ID equals
 *     ``pri_spec->stream_id``).
 * :enum:`nghttp2_error.NGHTTP2_ERR_PROTO`
 *     The |session| is server session.
 *
 * .. warning::
 *
 *   This function returns assigned stream ID if it succeeds.  But
 *   that stream is not created yet.  The application must not submit
 *   frame to that stream ID before
 *   :type:`nghttp2_before_frame_send_callback` is called for this
 *   frame.  This means `nghttp2_session_get_stream_user_data()` does
 *   not work before the callback.  But
 *   `nghttp2_session_set_stream_user_data()` handles this situation
 *   specially, and it can set data to a stream during this period.
 *
 */
NGHTTP2_EXTERN int32_t nghttp2_submit_request(
  nghttp2_session *session, const nghttp2_priority_spec *pri_spec,
  const nghttp2_nv *nva, size_t nvlen, const nghttp2_data_provider *data_prd,
  void *stream_user_data);

#endif /* NGHTTP2_NO_SSIZE_T */

/**
 * @function
 *
 * Submits HEADERS frame and optionally one or more DATA frames.
 *
 * The |pri_spec| is a deprecated priority specification of this
 * request.  ``NULL`` means the default priority (see
 * `nghttp2_priority_spec_default_init()`).  To specify the priority,
 * use `nghttp2_priority_spec_init()`.  If |pri_spec| is not ``NULL``,
 * this function will copy its data members.  In the future release
 * after the end of 2024, this function will ignore |pri_spec| and
 * behave as if ``NULL`` is given.
 *
 * The ``pri_spec->weight`` must be in [:macro:`NGHTTP2_MIN_WEIGHT`,
 * :macro:`NGHTTP2_MAX_WEIGHT`], inclusive.  If ``pri_spec->weight``
 * is strictly less than :macro:`NGHTTP2_MIN_WEIGHT`, it becomes
 * :macro:`NGHTTP2_MIN_WEIGHT`.  If it is strictly greater than
 * :macro:`NGHTTP2_MAX_WEIGHT`, it becomes
 * :macro:`NGHTTP2_MAX_WEIGHT`.
 *
 * If
 * :enum:`nghttp2_settings_id.NGHTTP2_SETTINGS_NO_RFC7540_PRIORITIES`
 * of value of 1 is received by a remote endpoint, |pri_spec| is
 * ignored, and treated as if ``NULL`` is specified.
 *
 * The |nva| is an array of name/value pair :type:`nghttp2_nv` with
 * |nvlen| elements.  The application is responsible to include
 * required pseudo-header fields (header field whose name starts with
 * ":") in |nva| and must place pseudo-headers before regular header
 * fields.
 *
 * This function creates copies of all name/value pairs in |nva|.  It
 * also lower-cases all names in |nva|.  The order of elements in
 * |nva| is preserved.  For header fields with
 * :enum:`nghttp2_nv_flag.NGHTTP2_NV_FLAG_NO_COPY_NAME` and
 * :enum:`nghttp2_nv_flag.NGHTTP2_NV_FLAG_NO_COPY_VALUE` are set,
 * header field name and value are not copied respectively.  With
 * :enum:`nghttp2_nv_flag.NGHTTP2_NV_FLAG_NO_COPY_NAME`, application
 * is responsible to pass header field name in lowercase.  The
 * application should maintain the references to them until
 * :type:`nghttp2_on_frame_send_callback` or
 * :type:`nghttp2_on_frame_not_send_callback` is called.
 *
 * HTTP/2 specification has requirement about header fields in the
 * request HEADERS.  See the specification for more details.
 *
 * If |data_prd| is not ``NULL``, it provides data which will be sent
 * in subsequent DATA frames.  In this case, a method that allows
 * request message bodies
 * (https://tools.ietf.org/html/rfc7231#section-4) must be specified
 * with ``:method`` key in |nva| (e.g. ``POST``).  This function does
 * not take ownership of the |data_prd|.  The function copies the
 * members of the |data_prd|.  If |data_prd| is ``NULL``, HEADERS have
 * END_STREAM set.  The |stream_user_data| is data associated to the
 * stream opened by this request and can be an arbitrary pointer,
 * which can be retrieved later by
 * `nghttp2_session_get_stream_user_data()`.
 *
 * This function returns assigned stream ID if it succeeds, or one of
 * the following negative error codes:
 *
 * :enum:`nghttp2_error.NGHTTP2_ERR_NOMEM`
 *     Out of memory.
 * :enum:`nghttp2_error.NGHTTP2_ERR_STREAM_ID_NOT_AVAILABLE`
 *     No stream ID is available because maximum stream ID was
 *     reached.
 * :enum:`nghttp2_error.NGHTTP2_ERR_INVALID_ARGUMENT`
 *     Trying to depend on itself (new stream ID equals
 *     ``pri_spec->stream_id``).
 * :enum:`nghttp2_error.NGHTTP2_ERR_PROTO`
 *     The |session| is server session.
 *
 * .. warning::
 *
 *   This function returns assigned stream ID if it succeeds.  But
 *   that stream is not created yet.  The application must not submit
 *   frame to that stream ID before
 *   :type:`nghttp2_before_frame_send_callback` is called for this
 *   frame.  This means `nghttp2_session_get_stream_user_data()` does
 *   not work before the callback.  But
 *   `nghttp2_session_set_stream_user_data()` handles this situation
 *   specially, and it can set data to a stream during this period.
 *
 */
NGHTTP2_EXTERN int32_t nghttp2_submit_request2(
  nghttp2_session *session, const nghttp2_priority_spec *pri_spec,
  const nghttp2_nv *nva, size_t nvlen, const nghttp2_data_provider2 *data_prd,
  void *stream_user_data);

#ifndef NGHTTP2_NO_SSIZE_T
/**
 * @function
 *
 * .. warning::
 *
 *   Deprecated.  Use `nghttp2_submit_response2()` instead.
 *
 * Submits response HEADERS frame and optionally one or more DATA
 * frames against the stream |stream_id|.
 *
 * The |nva| is an array of name/value pair :type:`nghttp2_nv` with
 * |nvlen| elements.  The application is responsible to include
 * required pseudo-header fields (header field whose name starts with
 * ":") in |nva| and must place pseudo-headers before regular header
 * fields.
 *
 * This function creates copies of all name/value pairs in |nva|.  It
 * also lower-cases all names in |nva|.  The order of elements in
 * |nva| is preserved.  For header fields with
 * :enum:`nghttp2_nv_flag.NGHTTP2_NV_FLAG_NO_COPY_NAME` and
 * :enum:`nghttp2_nv_flag.NGHTTP2_NV_FLAG_NO_COPY_VALUE` are set,
 * header field name and value are not copied respectively.  With
 * :enum:`nghttp2_nv_flag.NGHTTP2_NV_FLAG_NO_COPY_NAME`, application
 * is responsible to pass header field name in lowercase.  The
 * application should maintain the references to them until
 * :type:`nghttp2_on_frame_send_callback` or
 * :type:`nghttp2_on_frame_not_send_callback` is called.
 *
 * HTTP/2 specification has requirement about header fields in the
 * response HEADERS.  See the specification for more details.
 *
 * If |data_prd| is not ``NULL``, it provides data which will be sent
 * in subsequent DATA frames.  This function does not take ownership
 * of the |data_prd|.  The function copies the members of the
 * |data_prd|.  If |data_prd| is ``NULL``, HEADERS will have
 * END_STREAM flag set.
 *
 * This method can be used as normal HTTP response and push response.
 * When pushing a resource using this function, the |session| must be
 * configured using `nghttp2_session_server_new()` or its variants and
 * the target stream denoted by the |stream_id| must be reserved using
 * `nghttp2_submit_push_promise()`.
 *
 * To send non-final response headers (e.g., HTTP status 101), don't
 * use this function because this function half-closes the outbound
 * stream.  Instead, use `nghttp2_submit_headers()` for this purpose.
 *
 * This function returns 0 if it succeeds, or one of the following
 * negative error codes:
 *
 * :enum:`nghttp2_error.NGHTTP2_ERR_NOMEM`
 *     Out of memory.
 * :enum:`nghttp2_error.NGHTTP2_ERR_INVALID_ARGUMENT`
 *     The |stream_id| is 0.
 * :enum:`nghttp2_error.NGHTTP2_ERR_DATA_EXIST`
 *     DATA or HEADERS has been already submitted and not fully
 *     processed yet.  Normally, this does not happen, but when
 *     application wrongly calls `nghttp2_submit_response()` twice,
 *     this may happen.
 * :enum:`nghttp2_error.NGHTTP2_ERR_PROTO`
 *     The |session| is client session.
 *
 * .. warning::
 *
 *   Calling this function twice for the same stream ID may lead to
 *   program crash.  It is generally considered to a programming error
 *   to commit response twice.
 */
NGHTTP2_EXTERN int
nghttp2_submit_response(nghttp2_session *session, int32_t stream_id,
                        const nghttp2_nv *nva, size_t nvlen,
                        const nghttp2_data_provider *data_prd);

#endif /* NGHTTP2_NO_SSIZE_T */

/**
 * @function
 *
 * Submits response HEADERS frame and optionally one or more DATA
 * frames against the stream |stream_id|.
 *
 * The |nva| is an array of name/value pair :type:`nghttp2_nv` with
 * |nvlen| elements.  The application is responsible to include
 * required pseudo-header fields (header field whose name starts with
 * ":") in |nva| and must place pseudo-headers before regular header
 * fields.
 *
 * This function creates copies of all name/value pairs in |nva|.  It
 * also lower-cases all names in |nva|.  The order of elements in
 * |nva| is preserved.  For header fields with
 * :enum:`nghttp2_nv_flag.NGHTTP2_NV_FLAG_NO_COPY_NAME` and
 * :enum:`nghttp2_nv_flag.NGHTTP2_NV_FLAG_NO_COPY_VALUE` are set,
 * header field name and value are not copied respectively.  With
 * :enum:`nghttp2_nv_flag.NGHTTP2_NV_FLAG_NO_COPY_NAME`, application
 * is responsible to pass header field name in lowercase.  The
 * application should maintain the references to them until
 * :type:`nghttp2_on_frame_send_callback` or
 * :type:`nghttp2_on_frame_not_send_callback` is called.
 *
 * HTTP/2 specification has requirement about header fields in the
 * response HEADERS.  See the specification for more details.
 *
 * If |data_prd| is not ``NULL``, it provides data which will be sent
 * in subsequent DATA frames.  This function does not take ownership
 * of the |data_prd|.  The function copies the members of the
 * |data_prd|.  If |data_prd| is ``NULL``, HEADERS will have
 * END_STREAM flag set.
 *
 * This method can be used as normal HTTP response and push response.
 * When pushing a resource using this function, the |session| must be
 * configured using `nghttp2_session_server_new()` or its variants and
 * the target stream denoted by the |stream_id| must be reserved using
 * `nghttp2_submit_push_promise()`.
 *
 * To send non-final response headers (e.g., HTTP status 101), don't
 * use this function because this function half-closes the outbound
 * stream.  Instead, use `nghttp2_submit_headers()` for this purpose.
 *
 * This function returns 0 if it succeeds, or one of the following
 * negative error codes:
 *
 * :enum:`nghttp2_error.NGHTTP2_ERR_NOMEM`
 *     Out of memory.
 * :enum:`nghttp2_error.NGHTTP2_ERR_INVALID_ARGUMENT`
 *     The |stream_id| is 0.
 * :enum:`nghttp2_error.NGHTTP2_ERR_DATA_EXIST`
 *     DATA or HEADERS has been already submitted and not fully
 *     processed yet.  Normally, this does not happen, but when
 *     application wrongly calls `nghttp2_submit_response2()` twice,
 *     this may happen.
 * :enum:`nghttp2_error.NGHTTP2_ERR_PROTO`
 *     The |session| is client session.
 *
 * .. warning::
 *
 *   Calling this function twice for the same stream ID may lead to
 *   program crash.  It is generally considered to a programming error
 *   to commit response twice.
 */
NGHTTP2_EXTERN int
nghttp2_submit_response2(nghttp2_session *session, int32_t stream_id,
                         const nghttp2_nv *nva, size_t nvlen,
                         const nghttp2_data_provider2 *data_prd);

/**
 * @function
 *
 * Submits trailer fields HEADERS against the stream |stream_id|.
 *
 * The |nva| is an array of name/value pair :type:`nghttp2_nv` with
 * |nvlen| elements.  The application must not include pseudo-header
 * fields (headers whose names starts with ":") in |nva|.
 *
 * This function creates copies of all name/value pairs in |nva|.  It
 * also lower-cases all names in |nva|.  The order of elements in
 * |nva| is preserved.  For header fields with
 * :enum:`nghttp2_nv_flag.NGHTTP2_NV_FLAG_NO_COPY_NAME` and
 * :enum:`nghttp2_nv_flag.NGHTTP2_NV_FLAG_NO_COPY_VALUE` are set,
 * header field name and value are not copied respectively.  With
 * :enum:`nghttp2_nv_flag.NGHTTP2_NV_FLAG_NO_COPY_NAME`, application
 * is responsible to pass header field name in lowercase.  The
 * application should maintain the references to them until
 * :type:`nghttp2_on_frame_send_callback` or
 * :type:`nghttp2_on_frame_not_send_callback` is called.
 *
 * For server, trailer fields must follow response HEADERS or response
 * DATA without END_STREAM flat set.  The library does not enforce
 * this requirement, and applications should do this for themselves.
 * If `nghttp2_submit_trailer()` is called before any response HEADERS
 * submission (usually by `nghttp2_submit_response2()`), the content
 * of |nva| will be sent as response headers, which will result in
 * error.
 *
 * This function has the same effect with `nghttp2_submit_headers()`,
 * with flags = :enum:`nghttp2_flag.NGHTTP2_FLAG_END_STREAM` and both
 * pri_spec and stream_user_data to NULL.
 *
 * To submit trailer fields after `nghttp2_submit_response2()` is
 * called, the application has to specify
 * :type:`nghttp2_data_provider2` to `nghttp2_submit_response2()`.
 * Inside of :type:`nghttp2_data_source_read_callback2`, when setting
 * :enum:`nghttp2_data_flag.NGHTTP2_DATA_FLAG_EOF`, also set
 * :enum:`nghttp2_data_flag.NGHTTP2_DATA_FLAG_NO_END_STREAM`.  After
 * that, the application can send trailer fields using
 * `nghttp2_submit_trailer()`.  `nghttp2_submit_trailer()` can be used
 * inside :type:`nghttp2_data_source_read_callback2`.
 *
 * This function returns 0 if it succeeds and |stream_id| is -1.
 * Otherwise, this function returns 0 if it succeeds, or one of the
 * following negative error codes:
 *
 * :enum:`nghttp2_error.NGHTTP2_ERR_NOMEM`
 *     Out of memory.
 * :enum:`nghttp2_error.NGHTTP2_ERR_INVALID_ARGUMENT`
 *     The |stream_id| is 0.
 */
NGHTTP2_EXTERN int nghttp2_submit_trailer(nghttp2_session *session,
                                          int32_t stream_id,
                                          const nghttp2_nv *nva, size_t nvlen);

/**
 * @function
 *
 * Submits HEADERS frame. The |flags| is bitwise OR of the
 * following values:
 *
 * * :enum:`nghttp2_flag.NGHTTP2_FLAG_END_STREAM`
 *
 * If |flags| includes :enum:`nghttp2_flag.NGHTTP2_FLAG_END_STREAM`,
 * this frame has END_STREAM flag set.
 *
 * The library handles the CONTINUATION frame internally and it
 * correctly sets END_HEADERS to the last sequence of the PUSH_PROMISE
 * or CONTINUATION frame.
 *
 * If the |stream_id| is -1, this frame is assumed as request (i.e.,
 * request HEADERS frame which opens new stream).  In this case, the
 * assigned stream ID will be returned.  Otherwise, specify stream ID
 * in |stream_id|.
 *
 * The |pri_spec| is a deprecated priority specification of this
 * request.  ``NULL`` means the default priority (see
 * `nghttp2_priority_spec_default_init()`).  To specify the priority,
 * use `nghttp2_priority_spec_init()`.  If |pri_spec| is not ``NULL``,
 * this function will copy its data members.  In the future release
 * after the end of 2024, this function will ignore |pri_spec| and
 * behave as if ``NULL`` is given.
 *
 * The ``pri_spec->weight`` must be in [:macro:`NGHTTP2_MIN_WEIGHT`,
 * :macro:`NGHTTP2_MAX_WEIGHT`], inclusive.  If ``pri_spec->weight``
 * is strictly less than :macro:`NGHTTP2_MIN_WEIGHT`, it becomes
 * :macro:`NGHTTP2_MIN_WEIGHT`.  If it is strictly greater than
 * :macro:`NGHTTP2_MAX_WEIGHT`, it becomes :macro:`NGHTTP2_MAX_WEIGHT`.
 *
 * If
 * :enum:`nghttp2_settings_id.NGHTTP2_SETTINGS_NO_RFC7540_PRIORITIES`
 * of value of 1 is received by a remote endpoint, |pri_spec| is
 * ignored, and treated as if ``NULL`` is specified.
 *
 * The |nva| is an array of name/value pair :type:`nghttp2_nv` with
 * |nvlen| elements.  The application is responsible to include
 * required pseudo-header fields (header field whose name starts with
 * ":") in |nva| and must place pseudo-headers before regular header
 * fields.
 *
 * This function creates copies of all name/value pairs in |nva|.  It
 * also lower-cases all names in |nva|.  The order of elements in
 * |nva| is preserved.  For header fields with
 * :enum:`nghttp2_nv_flag.NGHTTP2_NV_FLAG_NO_COPY_NAME` and
 * :enum:`nghttp2_nv_flag.NGHTTP2_NV_FLAG_NO_COPY_VALUE` are set,
 * header field name and value are not copied respectively.  With
 * :enum:`nghttp2_nv_flag.NGHTTP2_NV_FLAG_NO_COPY_NAME`, application
 * is responsible to pass header field name in lowercase.  The
 * application should maintain the references to them until
 * :type:`nghttp2_on_frame_send_callback` or
 * :type:`nghttp2_on_frame_not_send_callback` is called.
 *
 * The |stream_user_data| is a pointer to an arbitrary data which is
 * associated to the stream this frame will open.  Therefore it is
 * only used if this frame opens streams, in other words, it changes
 * stream state from idle or reserved to open.
 *
 * This function is low-level in a sense that the application code can
 * specify flags directly.  For usual HTTP request,
 * `nghttp2_submit_request2()` is useful.  Likewise, for HTTP
 * response, prefer `nghttp2_submit_response2()`.
 *
 * This function returns newly assigned stream ID if it succeeds and
 * |stream_id| is -1.  Otherwise, this function returns 0 if it
 * succeeds, or one of the following negative error codes:
 *
 * :enum:`nghttp2_error.NGHTTP2_ERR_NOMEM`
 *     Out of memory.
 * :enum:`nghttp2_error.NGHTTP2_ERR_STREAM_ID_NOT_AVAILABLE`
 *     No stream ID is available because maximum stream ID was
 *     reached.
 * :enum:`nghttp2_error.NGHTTP2_ERR_INVALID_ARGUMENT`
 *     The |stream_id| is 0; or trying to depend on itself (stream ID
 *     equals ``pri_spec->stream_id``).
 * :enum:`nghttp2_error.NGHTTP2_ERR_DATA_EXIST`
 *     DATA or HEADERS has been already submitted and not fully
 *     processed yet.  This happens if stream denoted by |stream_id|
 *     is in reserved state.
 * :enum:`nghttp2_error.NGHTTP2_ERR_PROTO`
 *     The |stream_id| is -1, and |session| is server session.
 *
 * .. warning::
 *
 *   This function returns assigned stream ID if it succeeds and
 *   |stream_id| is -1.  But that stream is not opened yet.  The
 *   application must not submit frame to that stream ID before
 *   :type:`nghttp2_before_frame_send_callback` is called for this
 *   frame.
 *
 */
NGHTTP2_EXTERN int32_t nghttp2_submit_headers(
  nghttp2_session *session, uint8_t flags, int32_t stream_id,
  const nghttp2_priority_spec *pri_spec, const nghttp2_nv *nva, size_t nvlen,
  void *stream_user_data);

#ifndef NGHTTP2_NO_SSIZE_T
/**
 * @function
 *
 * .. warning::
 *
 *   Deprecated.  Use `nghttp2_submit_data2()` instead.
 *
 * Submits one or more DATA frames to the stream |stream_id|.  The
 * data to be sent are provided by |data_prd|.  If |flags| contains
 * :enum:`nghttp2_flag.NGHTTP2_FLAG_END_STREAM`, the last DATA frame
 * has END_STREAM flag set.
 *
 * This function does not take ownership of the |data_prd|.  The
 * function copies the members of the |data_prd|.
 *
 * This function returns 0 if it succeeds, or one of the following
 * negative error codes:
 *
 * :enum:`nghttp2_error.NGHTTP2_ERR_NOMEM`
 *     Out of memory.
 * :enum:`nghttp2_error.NGHTTP2_ERR_DATA_EXIST`
 *     DATA or HEADERS has been already submitted and not fully
 *     processed yet.
 * :enum:`nghttp2_error.NGHTTP2_ERR_INVALID_ARGUMENT`
 *     The |stream_id| is 0.
 * :enum:`nghttp2_error.NGHTTP2_ERR_STREAM_CLOSED`
 *     The stream was already closed; or the |stream_id| is invalid.
 *
 * .. note::
 *
 *   Currently, only one DATA or HEADERS is allowed for a stream at a
 *   time.  Submitting these frames more than once before first DATA
 *   or HEADERS is finished results in
 *   :enum:`nghttp2_error.NGHTTP2_ERR_DATA_EXIST` error code.  The
 *   earliest callback which tells that previous frame is done is
 *   :type:`nghttp2_on_frame_send_callback`.  In side that callback,
 *   new data can be submitted using `nghttp2_submit_data()`.  Of
 *   course, all data except for last one must not have
 *   :enum:`nghttp2_flag.NGHTTP2_FLAG_END_STREAM` flag set in |flags|.
 *   This sounds a bit complicated, and we recommend to use
 *   `nghttp2_submit_request()` and `nghttp2_submit_response()` to
 *   avoid this cascading issue.  The experience shows that for HTTP
 *   use, these two functions are enough to implement both client and
 *   server.
 */
NGHTTP2_EXTERN int nghttp2_submit_data(nghttp2_session *session, uint8_t flags,
                                       int32_t stream_id,
                                       const nghttp2_data_provider *data_prd);

#endif /* NGHTTP2_NO_SSIZE_T */

/**
 * @function
 *
 * Submits one or more DATA frames to the stream |stream_id|.  The
 * data to be sent are provided by |data_prd|.  If |flags| contains
 * :enum:`nghttp2_flag.NGHTTP2_FLAG_END_STREAM`, the last DATA frame
 * has END_STREAM flag set.
 *
 * This function does not take ownership of the |data_prd|.  The
 * function copies the members of the |data_prd|.
 *
 * This function returns 0 if it succeeds, or one of the following
 * negative error codes:
 *
 * :enum:`nghttp2_error.NGHTTP2_ERR_NOMEM`
 *     Out of memory.
 * :enum:`nghttp2_error.NGHTTP2_ERR_DATA_EXIST`
 *     DATA or HEADERS has been already submitted and not fully
 *     processed yet.
 * :enum:`nghttp2_error.NGHTTP2_ERR_INVALID_ARGUMENT`
 *     The |stream_id| is 0.
 * :enum:`nghttp2_error.NGHTTP2_ERR_STREAM_CLOSED`
 *     The stream was already closed; or the |stream_id| is invalid.
 *
 * .. note::
 *
 *   Currently, only one DATA or HEADERS is allowed for a stream at a
 *   time.  Submitting these frames more than once before first DATA
 *   or HEADERS is finished results in
 *   :enum:`nghttp2_error.NGHTTP2_ERR_DATA_EXIST` error code.  The
 *   earliest callback which tells that previous frame is done is
 *   :type:`nghttp2_on_frame_send_callback`.  In side that callback,
 *   new data can be submitted using `nghttp2_submit_data2()`.  Of
 *   course, all data except for last one must not have
 *   :enum:`nghttp2_flag.NGHTTP2_FLAG_END_STREAM` flag set in |flags|.
 *   This sounds a bit complicated, and we recommend to use
 *   `nghttp2_submit_request2()` and `nghttp2_submit_response2()` to
 *   avoid this cascading issue.  The experience shows that for HTTP
 *   use, these two functions are enough to implement both client and
 *   server.
 */
NGHTTP2_EXTERN int nghttp2_submit_data2(nghttp2_session *session, uint8_t flags,
                                        int32_t stream_id,
                                        const nghttp2_data_provider2 *data_prd);

/**
 * @function
 *
 * .. warning::
 *
 *   Deprecated.  :rfc:`7540` priorities are deprecated by
 *   :rfc:`9113`.  Consider migrating to :rfc:`9218` extensible
 *   prioritization scheme.  In the future release after the end of
 *   2024, this function will always return 0 without doing anything.
 *
 * Submits PRIORITY frame to change the priority of stream |stream_id|
 * to the priority specification |pri_spec|.
 *
 * The |flags| is currently ignored and should be
 * :enum:`nghttp2_flag.NGHTTP2_FLAG_NONE`.
 *
 * The |pri_spec| is a deprecated priority specification of this
 * request.  ``NULL`` is not allowed for this function. To specify the
 * priority, use `nghttp2_priority_spec_init()`.  This function will
 * copy its data members.
 *
 * The ``pri_spec->weight`` must be in [:macro:`NGHTTP2_MIN_WEIGHT`,
 * :macro:`NGHTTP2_MAX_WEIGHT`], inclusive.  If ``pri_spec->weight``
 * is strictly less than :macro:`NGHTTP2_MIN_WEIGHT`, it becomes
 * :macro:`NGHTTP2_MIN_WEIGHT`.  If it is strictly greater than
 * :macro:`NGHTTP2_MAX_WEIGHT`, it becomes
 * :macro:`NGHTTP2_MAX_WEIGHT`.
 *
 * If
 * :enum:`nghttp2_settings_id.NGHTTP2_SETTINGS_NO_RFC7540_PRIORITIES`
 * of value of 1 is received by a remote endpoint, this function does
 * nothing and returns 0.
 *
 * This function returns 0 if it succeeds, or one of the following
 * negative error codes:
 *
 * :enum:`nghttp2_error.NGHTTP2_ERR_NOMEM`
 *     Out of memory.
 * :enum:`nghttp2_error.NGHTTP2_ERR_INVALID_ARGUMENT`
 *     The |stream_id| is 0; or the |pri_spec| is NULL; or trying to
 *     depend on itself.
 */
NGHTTP2_EXTERN int
nghttp2_submit_priority(nghttp2_session *session, uint8_t flags,
                        int32_t stream_id,
                        const nghttp2_priority_spec *pri_spec);

/**
 * @macro
 *
 * :macro:`NGHTTP2_EXTPRI_DEFAULT_URGENCY` is the default urgency
 * level for :rfc:`9218` extensible priorities.
 */
#define NGHTTP2_EXTPRI_DEFAULT_URGENCY 3

/**
 * @macro
 *
 * :macro:`NGHTTP2_EXTPRI_URGENCY_HIGH` is the highest urgency level
 * for :rfc:`9218` extensible priorities.
 */
#define NGHTTP2_EXTPRI_URGENCY_HIGH 0

/**
 * @macro
 *
 * :macro:`NGHTTP2_EXTPRI_URGENCY_LOW` is the lowest urgency level for
 * :rfc:`9218` extensible priorities.
 */
#define NGHTTP2_EXTPRI_URGENCY_LOW 7

/**
 * @macro
 *
 * :macro:`NGHTTP2_EXTPRI_URGENCY_LEVELS` is the number of urgency
 * levels for :rfc:`9218` extensible priorities.
 */
#define NGHTTP2_EXTPRI_URGENCY_LEVELS (NGHTTP2_EXTPRI_URGENCY_LOW + 1)

/**
 * @struct
 *
 * :type:`nghttp2_extpri` is :rfc:`9218` extensible priorities
 * specification for a stream.
 */
typedef struct nghttp2_extpri {
  /**
   * :member:`urgency` is the urgency of a stream, it must be in
   * [:macro:`NGHTTP2_EXTPRI_URGENCY_HIGH`,
   * :macro:`NGHTTP2_EXTPRI_URGENCY_LOW`], inclusive, and 0 is the
   * highest urgency.
   */
  uint32_t urgency;
  /**
   * :member:`inc` indicates that a content can be processed
   * incrementally or not.  If inc is 0, it cannot be processed
   * incrementally.  If inc is 1, it can be processed incrementally.
   * Other value is not permitted.
   */
  int inc;
} nghttp2_extpri;

/**
 * @function
 *
 * Submits RST_STREAM frame to cancel/reject the stream |stream_id|
 * with the error code |error_code|.
 *
 * The pre-defined error code is one of :enum:`nghttp2_error_code`.
 *
 * The |flags| is currently ignored and should be
 * :enum:`nghttp2_flag.NGHTTP2_FLAG_NONE`.
 *
 * This function returns 0 if it succeeds, or one of the following
 * negative error codes:
 *
 * :enum:`nghttp2_error.NGHTTP2_ERR_NOMEM`
 *     Out of memory.
 * :enum:`nghttp2_error.NGHTTP2_ERR_INVALID_ARGUMENT`
 *     The |stream_id| is 0.
 */
NGHTTP2_EXTERN int nghttp2_submit_rst_stream(nghttp2_session *session,
                                             uint8_t flags, int32_t stream_id,
                                             uint32_t error_code);

/**
 * @function
 *
 * Stores local settings and submits SETTINGS frame.  The |iv| is the
 * pointer to the array of :type:`nghttp2_settings_entry`.  The |niv|
 * indicates the number of :type:`nghttp2_settings_entry`.
 *
 * The |flags| is currently ignored and should be
 * :enum:`nghttp2_flag.NGHTTP2_FLAG_NONE`.
 *
 * This function does not take ownership of the |iv|.  This function
 * copies all the elements in the |iv|.
 *
 * While updating individual stream's local window size, if the window
 * size becomes strictly larger than NGHTTP2_MAX_WINDOW_SIZE,
 * RST_STREAM is issued against such a stream.
 *
 * SETTINGS with :enum:`nghttp2_flag.NGHTTP2_FLAG_ACK` is
 * automatically submitted by the library and application could not
 * send it at its will.
 *
 * This function returns 0 if it succeeds, or one of the following
 * negative error codes:
 *
 * :enum:`nghttp2_error.NGHTTP2_ERR_INVALID_ARGUMENT`
 *     The |iv| contains invalid value (e.g., initial window size
 *     strictly greater than (1 << 31) - 1.
 * :enum:`nghttp2_error.NGHTTP2_ERR_NOMEM`
 *     Out of memory.
 */
NGHTTP2_EXTERN int nghttp2_submit_settings(nghttp2_session *session,
                                           uint8_t flags,
                                           const nghttp2_settings_entry *iv,
                                           size_t niv);

/**
 * @function
 *
 * Submits PUSH_PROMISE frame.
 *
 * The |flags| is currently ignored.  The library handles the
 * CONTINUATION frame internally and it correctly sets END_HEADERS to
 * the last sequence of the PUSH_PROMISE or CONTINUATION frame.
 *
 * The |stream_id| must be client initiated stream ID.
 *
 * The |nva| is an array of name/value pair :type:`nghttp2_nv` with
 * |nvlen| elements.  The application is responsible to include
 * required pseudo-header fields (header field whose name starts with
 * ":") in |nva| and must place pseudo-headers before regular header
 * fields.
 *
 * This function creates copies of all name/value pairs in |nva|.  It
 * also lower-cases all names in |nva|.  The order of elements in
 * |nva| is preserved.  For header fields with
 * :enum:`nghttp2_nv_flag.NGHTTP2_NV_FLAG_NO_COPY_NAME` and
 * :enum:`nghttp2_nv_flag.NGHTTP2_NV_FLAG_NO_COPY_VALUE` are set,
 * header field name and value are not copied respectively.  With
 * :enum:`nghttp2_nv_flag.NGHTTP2_NV_FLAG_NO_COPY_NAME`, application
 * is responsible to pass header field name in lowercase.  The
 * application should maintain the references to them until
 * :type:`nghttp2_on_frame_send_callback` or
 * :type:`nghttp2_on_frame_not_send_callback` is called.
 *
 * The |promised_stream_user_data| is a pointer to an arbitrary data
 * which is associated to the promised stream this frame will open and
 * make it in reserved state.  It is available using
 * `nghttp2_session_get_stream_user_data()`.  The application can
 * access it in :type:`nghttp2_before_frame_send_callback` and
 * :type:`nghttp2_on_frame_send_callback` of this frame.
 *
 * The client side is not allowed to use this function.
 *
 * To submit response headers and data, use
 * `nghttp2_submit_response2()`.
 *
 * This function returns assigned promised stream ID if it succeeds,
 * or one of the following negative error codes:
 *
 * :enum:`nghttp2_error.NGHTTP2_ERR_NOMEM`
 *     Out of memory.
 * :enum:`nghttp2_error.NGHTTP2_ERR_PROTO`
 *     This function was invoked when |session| is initialized as
 *     client.
 * :enum:`nghttp2_error.NGHTTP2_ERR_STREAM_ID_NOT_AVAILABLE`
 *     No stream ID is available because maximum stream ID was
 *     reached.
 * :enum:`nghttp2_error.NGHTTP2_ERR_INVALID_ARGUMENT`
 *     The |stream_id| is 0; The |stream_id| does not designate stream
 *     that peer initiated.
 * :enum:`nghttp2_error.NGHTTP2_ERR_STREAM_CLOSED`
 *     The stream was already closed; or the |stream_id| is invalid.
 *
 * .. warning::
 *
 *   This function returns assigned promised stream ID if it succeeds.
 *   As of 1.16.0, stream object for pushed resource is created when
 *   this function succeeds.  In that case, the application can submit
 *   push response for the promised frame.
 *
 *   In 1.15.0 or prior versions, pushed stream is not opened yet when
 *   this function succeeds.  The application must not submit frame to
 *   that stream ID before :type:`nghttp2_before_frame_send_callback`
 *   is called for this frame.
 *
 */
NGHTTP2_EXTERN int32_t nghttp2_submit_push_promise(
  nghttp2_session *session, uint8_t flags, int32_t stream_id,
  const nghttp2_nv *nva, size_t nvlen, void *promised_stream_user_data);

/**
 * @function
 *
 * Submits PING frame.  You don't have to send PING back when you
 * received PING frame.  The library automatically submits PING frame
 * in this case.
 *
 * The |flags| is bitwise OR of 0 or more of the following value.
 *
 * * :enum:`nghttp2_flag.NGHTTP2_FLAG_ACK`
 *
 * Unless `nghttp2_option_set_no_auto_ping_ack()` is used, the |flags|
 * should be :enum:`nghttp2_flag.NGHTTP2_FLAG_NONE`.
 *
 * If the |opaque_data| is non ``NULL``, then it should point to the 8
 * bytes array of memory to specify opaque data to send with PING
 * frame.  If the |opaque_data| is ``NULL``, zero-cleared 8 bytes will
 * be sent as opaque data.
 *
 * This function returns 0 if it succeeds, or one of the following
 * negative error codes:
 *
 * :enum:`nghttp2_error.NGHTTP2_ERR_NOMEM`
 *     Out of memory.
 */
NGHTTP2_EXTERN int nghttp2_submit_ping(nghttp2_session *session, uint8_t flags,
                                       const uint8_t *opaque_data);

/**
 * @function
 *
 * Submits GOAWAY frame with the last stream ID |last_stream_id| and
 * the error code |error_code|.
 *
 * The pre-defined error code is one of :enum:`nghttp2_error_code`.
 *
 * The |flags| is currently ignored and should be
 * :enum:`nghttp2_flag.NGHTTP2_FLAG_NONE`.
 *
 * The |last_stream_id| is peer's stream ID or 0.  So if |session| is
 * initialized as client, |last_stream_id| must be even or 0.  If
 * |session| is initialized as server, |last_stream_id| must be odd or
 * 0.
 *
 * The HTTP/2 specification says last_stream_id must not be increased
 * from the value previously sent.  So the actual value sent as
 * last_stream_id is the minimum value between the given
 * |last_stream_id| and the last_stream_id previously sent to the
 * peer.
 *
 * If the |opaque_data| is not ``NULL`` and |opaque_data_len| is not
 * zero, those data will be sent as additional debug data.  The
 * library makes a copy of the memory region pointed by |opaque_data|
 * with the length |opaque_data_len|, so the caller does not need to
 * keep this memory after the return of this function.  If the
 * |opaque_data_len| is 0, the |opaque_data| could be ``NULL``.
 *
 * After successful transmission of GOAWAY, following things happen.
 * All incoming streams having strictly more than |last_stream_id| are
 * closed.  All incoming HEADERS which starts new stream are simply
 * ignored.  After all active streams are handled, both
 * `nghttp2_session_want_read()` and `nghttp2_session_want_write()`
 * return 0 and the application can close session.
 *
 * This function returns 0 if it succeeds, or one of the following
 * negative error codes:
 *
 * :enum:`nghttp2_error.NGHTTP2_ERR_NOMEM`
 *     Out of memory.
 * :enum:`nghttp2_error.NGHTTP2_ERR_INVALID_ARGUMENT`
 *     The |opaque_data_len| is too large; the |last_stream_id| is
 *     invalid.
 */
NGHTTP2_EXTERN int nghttp2_submit_goaway(nghttp2_session *session,
                                         uint8_t flags, int32_t last_stream_id,
                                         uint32_t error_code,
                                         const uint8_t *opaque_data,
                                         size_t opaque_data_len);

/**
 * @function
 *
 * Returns the last stream ID of a stream for which
 * :type:`nghttp2_on_frame_recv_callback` was invoked most recently.
 * The returned value can be used as last_stream_id parameter for
 * `nghttp2_submit_goaway()` and
 * `nghttp2_session_terminate_session2()`.
 *
 * This function always succeeds.
 */
NGHTTP2_EXTERN int32_t
nghttp2_session_get_last_proc_stream_id(nghttp2_session *session);

/**
 * @function
 *
 * Returns nonzero if new request can be sent from local endpoint.
 *
 * This function return 0 if request is not allowed for this session.
 * There are several reasons why request is not allowed.  Some of the
 * reasons are: session is server; stream ID has been spent; GOAWAY
 * has been sent or received.
 *
 * The application can call `nghttp2_submit_request2()` without
 * consulting this function.  In that case,
 * `nghttp2_submit_request2()` may return error.  Or, request is
 * failed to sent, and :type:`nghttp2_on_stream_close_callback` is
 * called.
 */
NGHTTP2_EXTERN int
nghttp2_session_check_request_allowed(nghttp2_session *session);

/**
 * @function
 *
 * Returns nonzero if |session| is initialized as server side session.
 */
NGHTTP2_EXTERN int
nghttp2_session_check_server_session(nghttp2_session *session);

/**
 * @function
 *
 * Submits WINDOW_UPDATE frame.
 *
 * The |flags| is currently ignored and should be
 * :enum:`nghttp2_flag.NGHTTP2_FLAG_NONE`.
 *
 * The |stream_id| is the stream ID to send this WINDOW_UPDATE.  To
 * send connection level WINDOW_UPDATE, specify 0 to |stream_id|.
 *
 * If the |window_size_increment| is positive, the WINDOW_UPDATE with
 * that value as window_size_increment is queued.  If the
 * |window_size_increment| is larger than the received bytes from the
 * remote endpoint, the local window size is increased by that
 * difference.  If the sole purpose is to increase the local window
 * size, consider to use `nghttp2_session_set_local_window_size()`.
 *
 * If the |window_size_increment| is negative, the local window size
 * is decreased by -|window_size_increment|.  If automatic
 * WINDOW_UPDATE is enabled
 * (`nghttp2_option_set_no_auto_window_update()`), and the library
 * decided that the WINDOW_UPDATE should be submitted, then
 * WINDOW_UPDATE is queued with the current received bytes count.  If
 * the sole purpose is to decrease the local window size, consider to
 * use `nghttp2_session_set_local_window_size()`.
 *
 * If the |window_size_increment| is 0, the function does nothing and
 * returns 0.
 *
 * This function returns 0 if it succeeds, or one of the following
 * negative error codes:
 *
 * :enum:`nghttp2_error.NGHTTP2_ERR_FLOW_CONTROL`
 *     The local window size overflow or gets negative.
 * :enum:`nghttp2_error.NGHTTP2_ERR_NOMEM`
 *     Out of memory.
 */
NGHTTP2_EXTERN int nghttp2_submit_window_update(nghttp2_session *session,
                                                uint8_t flags,
                                                int32_t stream_id,
                                                int32_t window_size_increment);

/**
 * @function
 *
 * Set local window size (local endpoints's window size) to the given
 * |window_size| for the given stream denoted by |stream_id|.  To
 * change connection level window size, specify 0 to |stream_id|.  To
 * increase window size, this function may submit WINDOW_UPDATE frame
 * to transmission queue.
 *
 * The |flags| is currently ignored and should be
 * :enum:`nghttp2_flag.NGHTTP2_FLAG_NONE`.
 *
 * This sounds similar to `nghttp2_submit_window_update()`, but there
 * are 2 differences.  The first difference is that this function
 * takes the absolute value of window size to set, rather than the
 * delta.  To change the window size, this may be easier to use since
 * the application just declares the intended window size, rather than
 * calculating delta.  The second difference is that
 * `nghttp2_submit_window_update()` affects the received bytes count
 * which has not acked yet.  By the specification of
 * `nghttp2_submit_window_update()`, to strictly increase the local
 * window size, we have to submit delta including all received bytes
 * count, which might not be desirable in some cases.  On the other
 * hand, this function does not affect the received bytes count.  It
 * just sets the local window size to the given value.
 *
 * This function returns 0 if it succeeds, or one of the following
 * negative error codes:
 *
 * :enum:`nghttp2_error.NGHTTP2_ERR_INVALID_ARGUMENT`
 *     The |stream_id| is negative.
 * :enum:`nghttp2_error.NGHTTP2_ERR_NOMEM`
 *     Out of memory.
 */
NGHTTP2_EXTERN int
nghttp2_session_set_local_window_size(nghttp2_session *session, uint8_t flags,
                                      int32_t stream_id, int32_t window_size);

/**
 * @function
 *
 * Submits extension frame.
 *
 * Application can pass arbitrary frame flags and stream ID in |flags|
 * and |stream_id| respectively.  The |payload| is opaque pointer, and
 * it can be accessible though ``frame->ext.payload`` in
 * :type:`nghttp2_pack_extension_callback2`.  The library will not own
 * passed |payload| pointer.
 *
 * The application must set :type:`nghttp2_pack_extension_callback2`
 * using `nghttp2_session_callbacks_set_pack_extension_callback2()`.
 *
 * The application should retain the memory pointed by |payload| until
 * the transmission of extension frame is done (which is indicated by
 * :type:`nghttp2_on_frame_send_callback`), or transmission fails
 * (which is indicated by :type:`nghttp2_on_frame_not_send_callback`).
 * If application does not touch this memory region after packing it
 * into a wire format, application can free it inside
 * :type:`nghttp2_pack_extension_callback2`.
 *
 * The standard HTTP/2 frame cannot be sent with this function, so
 * |type| must be strictly grater than 0x9.  Otherwise, this function
 * will fail with error code
 * :enum:`nghttp2_error.NGHTTP2_ERR_INVALID_ARGUMENT`.
 *
 * This function returns 0 if it succeeds, or one of the following
 * negative error codes:
 *
 * :enum:`nghttp2_error.NGHTTP2_ERR_INVALID_STATE`
 *     If :type:`nghttp2_pack_extension_callback2` is not set.
 * :enum:`nghttp2_error.NGHTTP2_ERR_INVALID_ARGUMENT`
 *     If  |type| specifies  standard  HTTP/2 frame  type.  The  frame
 *     types  in the  rage [0x0,  0x9], both  inclusive, are  standard
 *     HTTP/2 frame type, and cannot be sent using this function.
 * :enum:`nghttp2_error.NGHTTP2_ERR_NOMEM`
 *     Out of memory
 */
NGHTTP2_EXTERN int nghttp2_submit_extension(nghttp2_session *session,
                                            uint8_t type, uint8_t flags,
                                            int32_t stream_id, void *payload);

/**
 * @struct
 *
 * The payload of ALTSVC frame.  ALTSVC frame is a non-critical
 * extension to HTTP/2.  If this frame is received, and
 * `nghttp2_option_set_user_recv_extension_type()` is not set, and
 * `nghttp2_option_set_builtin_recv_extension_type()` is set for
 * :enum:`nghttp2_frame_type.NGHTTP2_ALTSVC`,
 * ``nghttp2_extension.payload`` will point to this struct.
 *
 * It has the following members:
 */
typedef struct {
  /**
   * The pointer to origin which this alternative service is
   * associated with.  This is not necessarily NULL-terminated.
   */
  uint8_t *origin;
  /**
   * The length of the |origin|.
   */
  size_t origin_len;
  /**
   * The pointer to Alt-Svc field value contained in ALTSVC frame.
   * This is not necessarily NULL-terminated.
   */
  uint8_t *field_value;
  /**
   * The length of the |field_value|.
   */
  size_t field_value_len;
} nghttp2_ext_altsvc;

/**
 * @function
 *
 * Submits ALTSVC frame.
 *
 * ALTSVC frame is a non-critical extension to HTTP/2, and defined in
 * `RFC 7383 <https://tools.ietf.org/html/rfc7838#section-4>`_.
 *
 * The |flags| is currently ignored and should be
 * :enum:`nghttp2_flag.NGHTTP2_FLAG_NONE`.
 *
 * The |origin| points to the origin this alternative service is
 * associated with.  The |origin_len| is the length of the origin.  If
 * |stream_id| is 0, the origin must be specified.  If |stream_id| is
 * not zero, the origin must be empty (in other words, |origin_len|
 * must be 0).
 *
 * The ALTSVC frame is only usable from server side.  If this function
 * is invoked with client side session, this function returns
 * :enum:`nghttp2_error.NGHTTP2_ERR_INVALID_STATE`.
 *
 * This function returns 0 if it succeeds, or one of the following
 * negative error codes:
 *
 * :enum:`nghttp2_error.NGHTTP2_ERR_NOMEM`
 *     Out of memory
 * :enum:`nghttp2_error.NGHTTP2_ERR_INVALID_STATE`
 *     The function is called from client side session
 * :enum:`nghttp2_error.NGHTTP2_ERR_INVALID_ARGUMENT`
 *     The sum of |origin_len| and |field_value_len| is larger than
 *     16382; or |origin_len| is 0 while |stream_id| is 0; or
 *     |origin_len| is not 0 while |stream_id| is not 0.
 */
NGHTTP2_EXTERN int nghttp2_submit_altsvc(nghttp2_session *session,
                                         uint8_t flags, int32_t stream_id,
                                         const uint8_t *origin,
                                         size_t origin_len,
                                         const uint8_t *field_value,
                                         size_t field_value_len);

/**
 * @struct
 *
 * The single entry of an origin.
 */
typedef struct {
  /**
   * The pointer to origin.  No validation is made against this field
   * by the library.  This is not necessarily NULL-terminated.
   */
  uint8_t *origin;
  /**
   * The length of the |origin|.
   */
  size_t origin_len;
} nghttp2_origin_entry;

/**
 * @struct
 *
 * The payload of ORIGIN frame.  ORIGIN frame is a non-critical
 * extension to HTTP/2 and defined by `RFC 8336
 * <https://tools.ietf.org/html/rfc8336>`_.
 *
 * If this frame is received, and
 * `nghttp2_option_set_user_recv_extension_type()` is not set, and
 * `nghttp2_option_set_builtin_recv_extension_type()` is set for
 * :enum:`nghttp2_frame_type.NGHTTP2_ORIGIN`,
 * ``nghttp2_extension.payload`` will point to this struct.
 *
 * It has the following members:
 */
typedef struct {
  /**
   * The number of origins contained in |ov|.
   */
  size_t nov;
  /**
   * The pointer to the array of origins contained in ORIGIN frame.
   */
  nghttp2_origin_entry *ov;
} nghttp2_ext_origin;

/**
 * @function
 *
 * Submits ORIGIN frame.
 *
 * ORIGIN frame is a non-critical extension to HTTP/2 and defined by
 * `RFC 8336 <https://tools.ietf.org/html/rfc8336>`_.
 *
 * The |flags| is currently ignored and should be
 * :enum:`nghttp2_flag.NGHTTP2_FLAG_NONE`.
 *
 * The |ov| points to the array of origins.  The |nov| specifies the
 * number of origins included in |ov|.  This function creates copies
 * of all elements in |ov|.
 *
 * The ORIGIN frame is only usable by a server.  If this function is
 * invoked with client side session, this function returns
 * :enum:`nghttp2_error.NGHTTP2_ERR_INVALID_STATE`.
 *
 * :enum:`nghttp2_error.NGHTTP2_ERR_NOMEM`
 *     Out of memory
 * :enum:`nghttp2_error.NGHTTP2_ERR_INVALID_STATE`
 *     The function is called from client side session.
 * :enum:`nghttp2_error.NGHTTP2_ERR_INVALID_ARGUMENT`
 *     There are too many origins, or an origin is too large to fit
 *     into a default frame payload.
 */
NGHTTP2_EXTERN int nghttp2_submit_origin(nghttp2_session *session,
                                         uint8_t flags,
                                         const nghttp2_origin_entry *ov,
                                         size_t nov);

/**
 * @struct
 *
 * The payload of PRIORITY_UPDATE frame.  PRIORITY_UPDATE frame is a
 * non-critical extension to HTTP/2.  If this frame is received, and
 * `nghttp2_option_set_user_recv_extension_type()` is not set, and
 * `nghttp2_option_set_builtin_recv_extension_type()` is set for
 * :enum:`nghttp2_frame_type.NGHTTP2_PRIORITY_UPDATE`,
 * ``nghttp2_extension.payload`` will point to this struct.
 *
 * It has the following members:
 */
typedef struct {
  /**
   * The stream ID of the stream whose priority is updated.
   */
  int32_t stream_id;
  /**
   * The pointer to Priority field value.  It is not necessarily
   * NULL-terminated.
   */
  uint8_t *field_value;
  /**
   * The length of the :member:`field_value`.
   */
  size_t field_value_len;
} nghttp2_ext_priority_update;

/**
 * @function
 *
 * Submits PRIORITY_UPDATE frame.
 *
 * PRIORITY_UPDATE frame is a non-critical extension to HTTP/2, and
 * defined in :rfc:`9218#section-7.1`.
 *
 * The |flags| is currently ignored and should be
 * :enum:`nghttp2_flag.NGHTTP2_FLAG_NONE`.
 *
 * The |stream_id| is the ID of stream which is prioritized.  The
 * |field_value| points to the Priority field value.  The
 * |field_value_len| is the length of the Priority field value.
 *
 * If this function is called by server,
 * :enum:`nghttp2_error.NGHTTP2_ERR_INVALID_STATE` is returned.
 *
 * If
 * :enum:`nghttp2_settings_id.NGHTTP2_SETTINGS_NO_RFC7540_PRIORITIES`
 * of value of 0 is received by a remote endpoint (or it is omitted),
 * this function does nothing and returns 0.
 *
 * This function returns 0 if it succeeds, or one of the following
 * negative error codes:
 *
 * :enum:`nghttp2_error.NGHTTP2_ERR_NOMEM`
 *     Out of memory
 * :enum:`nghttp2_error.NGHTTP2_ERR_INVALID_STATE`
 *     The function is called from server side session
 * :enum:`nghttp2_error.NGHTTP2_ERR_INVALID_ARGUMENT`
 *     The |field_value_len| is larger than 16380; or |stream_id| is
 *     0.
 */
NGHTTP2_EXTERN int nghttp2_submit_priority_update(nghttp2_session *session,
                                                  uint8_t flags,
                                                  int32_t stream_id,
                                                  const uint8_t *field_value,
                                                  size_t field_value_len);

/**
 * @function
 *
 * Changes the priority of the existing stream denoted by |stream_id|.
 * The new priority is |extpri|.  This function is meant to be used by
 * server for :rfc:`9218` extensible prioritization scheme.
 *
 * If |session| is initialized as client, this function returns
 * :enum:`nghttp2_error.NGHTTP2_ERR_INVALID_STATE`.  For client, use
 * `nghttp2_submit_priority_update()` instead.
 *
 * If :member:`extpri->urgency <nghttp2_extpri.urgency>` is out of
 * bound, it is set to :macro:`NGHTTP2_EXTPRI_URGENCY_LOW`.
 *
 * If |ignore_client_signal| is nonzero, server starts to ignore
 * client priority signals for this stream.
 *
 * If
 * :enum:`nghttp2_settings_id.NGHTTP2_SETTINGS_NO_RFC7540_PRIORITIES`
 * of value of 1 is not submitted via `nghttp2_submit_settings()`,
 * this function does nothing and returns 0.
 *
 * :enum:`nghttp2_error.NGHTTP2_ERR_NOMEM`
 *     Out of memory.
 * :enum:`nghttp2_error.NGHTTP2_ERR_INVALID_STATE`
 *     The |session| is initialized as client.
 * :enum:`nghttp2_error.NGHTTP2_ERR_INVALID_ARGUMENT`
 *     |stream_id| is zero; or a stream denoted by |stream_id| is not
 *     found.
 */
NGHTTP2_EXTERN int nghttp2_session_change_extpri_stream_priority(
  nghttp2_session *session, int32_t stream_id, const nghttp2_extpri *extpri,
  int ignore_client_signal);

/**
 * @function
 *
 * Stores the stream priority of the existing stream denoted by
 * |stream_id| in the object pointed by |extpri|.  This function is
 * meant to be used by server for :rfc:`9218` extensible
 * prioritization scheme.
 *
 * If |session| is initialized as client, this function returns
 * :enum:`nghttp2_error.NGHTTP2_ERR_INVALID_STATE`.
 *
 * If
 * :enum:`nghttp2_settings_id.NGHTTP2_SETTINGS_NO_RFC7540_PRIORITIES`
 * of value of 1 is not submitted via `nghttp2_submit_settings()`,
 * this function does nothing and returns 0.
 *
 * This function returns 0 if it succeeds, or one of the following
 * negative error codes:
 *
 * :enum:`nghttp2_error.NGHTTP2_ERR_INVALID_STATE`
 *     The |session| is initialized as client.
 * :enum:`nghttp2_error.NGHTTP2_ERR_INVALID_ARGUMENT`
 *     |stream_id| is zero; or a stream denoted by |stream_id| is not
 *     found.
 */
NGHTTP2_EXTERN int nghttp2_session_get_extpri_stream_priority(
  nghttp2_session *session, nghttp2_extpri *extpri, int32_t stream_id);

/**
 * @function
 *
 * Parses Priority header field value pointed by |value| of length
 * |len|, and stores the result in the object pointed by |extpri|.
 * Priority header field is defined in :rfc:`9218`.
 *
 * This function does not initialize the object pointed by |extpri|
 * before storing the result.  It only assigns the values that the
 * parser correctly extracted to fields.
 *
 * This function returns 0 if it succeeds, or one of the following
 * negative error codes:
 *
 * :enum:`nghttp2_error.NGHTTP2_ERR_INVALID_ARGUMENT`
 *     Failed to parse the header field value.
 */
NGHTTP2_EXTERN int nghttp2_extpri_parse_priority(nghttp2_extpri *extpri,
                                                 const uint8_t *value,
                                                 size_t len);

/**
 * @function
 *
 * Compares ``lhs->name`` of length ``lhs->namelen`` bytes and
 * ``rhs->name`` of length ``rhs->namelen`` bytes.  Returns negative
 * integer if ``lhs->name`` is found to be less than ``rhs->name``; or
 * returns positive integer if ``lhs->name`` is found to be greater
 * than ``rhs->name``; or returns 0 otherwise.
 */
NGHTTP2_EXTERN int nghttp2_nv_compare_name(const nghttp2_nv *lhs,
                                           const nghttp2_nv *rhs);

/**
 * @function
 *
 * .. warning::
 *
 *   Deprecated.  Use `nghttp2_select_alpn` instead.
 *
 * A helper function for dealing with ALPN in server side.  The |in|
 * contains peer's protocol list in preferable order.  The format of
 * |in| is length-prefixed and not null-terminated.  For example,
 * ``h2`` and ``http/1.1`` stored in |in| like this::
 *
 *     in[0] = 2
 *     in[1..2] = "h2"
 *     in[3] = 8
 *     in[4..11] = "http/1.1"
 *     inlen = 12
 *
 * The selection algorithm is as follows:
 *
 * 1. If peer's list contains HTTP/2 protocol the library supports,
 *    it is selected and returns 1. The following step is not taken.
 *
 * 2. If peer's list contains ``http/1.1``, this function selects
 *    ``http/1.1`` and returns 0.  The following step is not taken.
 *
 * 3. This function selects nothing and returns -1 (So called
 *    non-overlap case).  In this case, |out| and |outlen| are left
 *    untouched.
 *
 * Selecting ``h2`` means that ``h2`` is written into |*out| and its
 * length (which is 2) is assigned to |*outlen|.
 *
 * For ALPN, refer to https://tools.ietf.org/html/rfc7301
 *
 * To use this method you should do something like::
 *
 *     static int alpn_select_proto_cb(SSL* ssl,
 *                                     const unsigned char **out,
 *                                     unsigned char *outlen,
 *                                     const unsigned char *in,
 *                                     unsigned int inlen,
 *                                     void *arg)
 *     {
 *         int rv;
 *         rv = nghttp2_select_next_protocol((unsigned char**)out, outlen,
 *                                           in, inlen);
 *         if (rv == -1) {
 *             return SSL_TLSEXT_ERR_NOACK;
 *         }
 *         if (rv == 1) {
 *             ((MyType*)arg)->http2_selected = 1;
 *         }
 *         return SSL_TLSEXT_ERR_OK;
 *     }
 *     ...
 *     SSL_CTX_set_alpn_select_cb(ssl_ctx, alpn_select_proto_cb, my_obj);
 *
 */
NGHTTP2_EXTERN int nghttp2_select_next_protocol(unsigned char **out,
                                                unsigned char *outlen,
                                                const unsigned char *in,
                                                unsigned int inlen);

/**
 * @function
 *
 * A helper function for dealing with ALPN in server side.  The |in|
 * contains peer's protocol list in preferable order.  The format of
 * |in| is length-prefixed and not null-terminated.  For example,
 * ``h2`` and ``http/1.1`` stored in |in| like this::
 *
 *     in[0] = 2
 *     in[1..2] = "h2"
 *     in[3] = 8
 *     in[4..11] = "http/1.1"
 *     inlen = 12
 *
 * The selection algorithm is as follows:
 *
 * 1. If peer's list contains HTTP/2 protocol the library supports,
 *    it is selected and returns 1. The following step is not taken.
 *
 * 2. If peer's list contains ``http/1.1``, this function selects
 *    ``http/1.1`` and returns 0.  The following step is not taken.
 *
 * 3. This function selects nothing and returns -1 (So called
 *    non-overlap case).  In this case, |out| and |outlen| are left
 *    untouched.
 *
 * Selecting ``h2`` means that ``h2`` is written into |*out| and its
 * length (which is 2) is assigned to |*outlen|.
 *
 * For ALPN, refer to https://tools.ietf.org/html/rfc7301
 *
 * To use this method you should do something like::
 *
 *     static int alpn_select_proto_cb(SSL* ssl,
 *                                     const unsigned char **out,
 *                                     unsigned char *outlen,
 *                                     const unsigned char *in,
 *                                     unsigned int inlen,
 *                                     void *arg)
 *     {
 *         int rv;
 *         rv = nghttp2_select_alpn(out, outlen, in, inlen);
 *         if (rv == -1) {
 *             return SSL_TLSEXT_ERR_NOACK;
 *         }
 *         if (rv == 1) {
 *             ((MyType*)arg)->http2_selected = 1;
 *         }
 *         return SSL_TLSEXT_ERR_OK;
 *     }
 *     ...
 *     SSL_CTX_set_alpn_select_cb(ssl_ctx, alpn_select_proto_cb, my_obj);
 *
 */
NGHTTP2_EXTERN int nghttp2_select_alpn(const unsigned char **out,
                                       unsigned char *outlen,
                                       const unsigned char *in,
                                       unsigned int inlen);

/**
 * @function
 *
 * Returns a pointer to a nghttp2_info struct with version information
 * about the run-time library in use.  The |least_version| argument
 * can be set to a 24 bit numerical value for the least accepted
 * version number and if the condition is not met, this function will
 * return a ``NULL``.  Pass in 0 to skip the version checking.
 */
NGHTTP2_EXTERN nghttp2_info *nghttp2_version(int least_version);

/**
 * @function
 *
 * Returns nonzero if the :type:`nghttp2_error` library error code
 * |lib_error| is fatal.
 */
NGHTTP2_EXTERN int nghttp2_is_fatal(int lib_error_code);

/**
 * @function
 *
 * Returns nonzero if HTTP header field name |name| of length |len| is
 * valid according to http://tools.ietf.org/html/rfc7230#section-3.2
 *
 * Because this is a header field name in HTTP2, the upper cased alphabet
 * is treated as error.
 */
NGHTTP2_EXTERN int nghttp2_check_header_name(const uint8_t *name, size_t len);

/**
 * @function
 *
 * Returns nonzero if HTTP header field value |value| of length |len|
 * is valid according to
 * http://tools.ietf.org/html/rfc7230#section-3.2
 *
 * This function is considered obsolete, and application should
 * consider to use `nghttp2_check_header_value_rfc9113()` instead.
 */
NGHTTP2_EXTERN int nghttp2_check_header_value(const uint8_t *value, size_t len);

/**
 * @function
 *
 * Returns nonzero if HTTP header field value |value| of length |len|
 * is valid according to
 * http://tools.ietf.org/html/rfc7230#section-3.2, plus
 * https://datatracker.ietf.org/doc/html/rfc9113#section-8.2.1
 */
NGHTTP2_EXTERN int nghttp2_check_header_value_rfc9113(const uint8_t *value,
                                                      size_t len);

/**
 * @function
 *
 * Returns nonzero if the |value| which is supposed to be the value of
 * the :method header field is valid according to
 * https://datatracker.ietf.org/doc/html/rfc7231#section-4 and
 * https://datatracker.ietf.org/doc/html/rfc7230#section-3.2.6
 */
NGHTTP2_EXTERN int nghttp2_check_method(const uint8_t *value, size_t len);

/**
 * @function
 *
 * Returns nonzero if the |value| which is supposed to be the value of
 * the :path header field is valid according to
 * https://datatracker.ietf.org/doc/html/rfc7540#section-8.1.2.3
 *
 * |value| is valid if it merely consists of the allowed characters.
 * In particular, it does not check whether |value| follows the syntax
 * of path.  The allowed characters are all characters valid by
 * `nghttp2_check_header_value` minus SPC and HT.
 */
NGHTTP2_EXTERN int nghttp2_check_path(const uint8_t *value, size_t len);

/**
 * @function
 *
 * Returns nonzero if the |value| which is supposed to be the value of the
 * :authority or host header field is valid according to
 * https://tools.ietf.org/html/rfc3986#section-3.2
 *
 * Note that :authority and host field values are not authority.  They
 * do not include userinfo in RFC 3986, see
 * https://datatracker.ietf.org/doc/html/rfc3986#section-3.2.2, that
 * is, it does not include '@'.  This function treats '@' as a valid
 * character.
 *
 * |value| is valid if it merely consists of the allowed characters.
 * In particular, it does not check whether |value| follows the syntax
 * of authority.
 */
NGHTTP2_EXTERN int nghttp2_check_authority(const uint8_t *value, size_t len);

/* HPACK API */

struct nghttp2_hd_deflater;

/**
 * @struct
 *
 * HPACK deflater object.
 */
typedef struct nghttp2_hd_deflater nghttp2_hd_deflater;

/**
 * @function
 *
 * Initializes |*deflater_ptr| for deflating name/values pairs.
 *
 * The |max_deflate_dynamic_table_size| is the upper bound of header
 * table size the deflater will use.
 *
 * If this function fails, |*deflater_ptr| is left untouched.
 *
 * This function returns 0 if it succeeds, or one of the following
 * negative error codes:
 *
 * :enum:`nghttp2_error.NGHTTP2_ERR_NOMEM`
 *     Out of memory.
 */
NGHTTP2_EXTERN int
nghttp2_hd_deflate_new(nghttp2_hd_deflater **deflater_ptr,
                       size_t max_deflate_dynamic_table_size);

/**
 * @function
 *
 * Like `nghttp2_hd_deflate_new()`, but with additional custom memory
 * allocator specified in the |mem|.
 *
 * The |mem| can be ``NULL`` and the call is equivalent to
 * `nghttp2_hd_deflate_new()`.
 *
 * This function does not take ownership |mem|.  The application is
 * responsible for freeing |mem|.
 *
 * The library code does not refer to |mem| pointer after this
 * function returns, so the application can safely free it.
 */
NGHTTP2_EXTERN int
nghttp2_hd_deflate_new2(nghttp2_hd_deflater **deflater_ptr,
                        size_t max_deflate_dynamic_table_size,
                        nghttp2_mem *mem);

/**
 * @function
 *
 * Deallocates any resources allocated for |deflater|.
 */
NGHTTP2_EXTERN void nghttp2_hd_deflate_del(nghttp2_hd_deflater *deflater);

/**
 * @function
 *
 * Changes header table size of the |deflater| to
 * |settings_max_dynamic_table_size| bytes.  This may trigger eviction
 * in the dynamic table.
 *
 * The |settings_max_dynamic_table_size| should be the value received
 * in SETTINGS_HEADER_TABLE_SIZE.
 *
 * The deflater never uses more memory than
 * ``max_deflate_dynamic_table_size`` bytes specified in
 * `nghttp2_hd_deflate_new()`.  Therefore, if
 * |settings_max_dynamic_table_size| >
 * ``max_deflate_dynamic_table_size``, resulting maximum table size
 * becomes ``max_deflate_dynamic_table_size``.
 *
 * This function returns 0 if it succeeds, or one of the following
 * negative error codes:
 *
 * :enum:`nghttp2_error.NGHTTP2_ERR_NOMEM`
 *     Out of memory.
 */
NGHTTP2_EXTERN int
nghttp2_hd_deflate_change_table_size(nghttp2_hd_deflater *deflater,
                                     size_t settings_max_dynamic_table_size);

#ifndef NGHTTP2_NO_SSIZE_T
/**
 * @function
 *
 * .. warning::
 *
 *   Deprecated.  Use `nghttp2_hd_deflate_hd2()` instead.
 *
 * Deflates the |nva|, which has the |nvlen| name/value pairs, into
 * the |buf| of length |buflen|.
 *
 * If |buf| is not large enough to store the deflated header block,
 * this function fails with
 * :enum:`nghttp2_error.NGHTTP2_ERR_INSUFF_BUFSIZE`.  The caller
 * should use `nghttp2_hd_deflate_bound()` to know the upper bound of
 * buffer size required to deflate given header name/value pairs.
 *
 * Once this function fails, subsequent call of this function always
 * returns :enum:`nghttp2_error.NGHTTP2_ERR_HEADER_COMP`.
 *
 * After this function returns, it is safe to delete the |nva|.
 *
 * This function returns the number of bytes written to |buf| if it
 * succeeds, or one of the following negative error codes:
 *
 * :enum:`nghttp2_error.NGHTTP2_ERR_NOMEM`
 *     Out of memory.
 * :enum:`nghttp2_error.NGHTTP2_ERR_HEADER_COMP`
 *     Deflation process has failed.
 * :enum:`nghttp2_error.NGHTTP2_ERR_INSUFF_BUFSIZE`
 *     The provided |buflen| size is too small to hold the output.
 */
NGHTTP2_EXTERN ssize_t nghttp2_hd_deflate_hd(nghttp2_hd_deflater *deflater,
                                             uint8_t *buf, size_t buflen,
                                             const nghttp2_nv *nva,
                                             size_t nvlen);

#endif /* NGHTTP2_NO_SSIZE_T */

/**
 * @function
 *
 * Deflates the |nva|, which has the |nvlen| name/value pairs, into
 * the |buf| of length |buflen|.
 *
 * If |buf| is not large enough to store the deflated header block,
 * this function fails with
 * :enum:`nghttp2_error.NGHTTP2_ERR_INSUFF_BUFSIZE`.  The caller
 * should use `nghttp2_hd_deflate_bound()` to know the upper bound of
 * buffer size required to deflate given header name/value pairs.
 *
 * Once this function fails, subsequent call of this function always
 * returns :enum:`nghttp2_error.NGHTTP2_ERR_HEADER_COMP`.
 *
 * After this function returns, it is safe to delete the |nva|.
 *
 * This function returns the number of bytes written to |buf| if it
 * succeeds, or one of the following negative error codes:
 *
 * :enum:`nghttp2_error.NGHTTP2_ERR_NOMEM`
 *     Out of memory.
 * :enum:`nghttp2_error.NGHTTP2_ERR_HEADER_COMP`
 *     Deflation process has failed.
 * :enum:`nghttp2_error.NGHTTP2_ERR_INSUFF_BUFSIZE`
 *     The provided |buflen| size is too small to hold the output.
 */
NGHTTP2_EXTERN nghttp2_ssize
nghttp2_hd_deflate_hd2(nghttp2_hd_deflater *deflater, uint8_t *buf,
                       size_t buflen, const nghttp2_nv *nva, size_t nvlen);

#ifndef NGHTTP2_NO_SSIZE_T
/**
 * @function
 *
 * .. warning::
 *
 *   Deprecated.  Use `nghttp2_hd_deflate_hd_vec2()` instead.
 *
 * Deflates the |nva|, which has the |nvlen| name/value pairs, into
 * the |veclen| size of buf vector |vec|.  The each size of buffer
 * must be set in len field of :type:`nghttp2_vec`.  If and only if
 * one chunk is filled up completely, next chunk will be used.  If
 * |vec| is not large enough to store the deflated header block, this
 * function fails with
 * :enum:`nghttp2_error.NGHTTP2_ERR_INSUFF_BUFSIZE`.  The caller
 * should use `nghttp2_hd_deflate_bound()` to know the upper bound of
 * buffer size required to deflate given header name/value pairs.
 *
 * Once this function fails, subsequent call of this function always
 * returns :enum:`nghttp2_error.NGHTTP2_ERR_HEADER_COMP`.
 *
 * After this function returns, it is safe to delete the |nva|.
 *
 * This function returns the number of bytes written to |vec| if it
 * succeeds, or one of the following negative error codes:
 *
 * :enum:`nghttp2_error.NGHTTP2_ERR_NOMEM`
 *     Out of memory.
 * :enum:`nghttp2_error.NGHTTP2_ERR_HEADER_COMP`
 *     Deflation process has failed.
 * :enum:`nghttp2_error.NGHTTP2_ERR_INSUFF_BUFSIZE`
 *     The provided |buflen| size is too small to hold the output.
 */
NGHTTP2_EXTERN ssize_t nghttp2_hd_deflate_hd_vec(nghttp2_hd_deflater *deflater,
                                                 const nghttp2_vec *vec,
                                                 size_t veclen,
                                                 const nghttp2_nv *nva,
                                                 size_t nvlen);

#endif /* NGHTTP2_NO_SSIZE_T */

/**
 * @function
 *
 * Deflates the |nva|, which has the |nvlen| name/value pairs, into
 * the |veclen| size of buf vector |vec|.  The each size of buffer
 * must be set in len field of :type:`nghttp2_vec`.  If and only if
 * one chunk is filled up completely, next chunk will be used.  If
 * |vec| is not large enough to store the deflated header block, this
 * function fails with
 * :enum:`nghttp2_error.NGHTTP2_ERR_INSUFF_BUFSIZE`.  The caller
 * should use `nghttp2_hd_deflate_bound()` to know the upper bound of
 * buffer size required to deflate given header name/value pairs.
 *
 * Once this function fails, subsequent call of this function always
 * returns :enum:`nghttp2_error.NGHTTP2_ERR_HEADER_COMP`.
 *
 * After this function returns, it is safe to delete the |nva|.
 *
 * This function returns the number of bytes written to |vec| if it
 * succeeds, or one of the following negative error codes:
 *
 * :enum:`nghttp2_error.NGHTTP2_ERR_NOMEM`
 *     Out of memory.
 * :enum:`nghttp2_error.NGHTTP2_ERR_HEADER_COMP`
 *     Deflation process has failed.
 * :enum:`nghttp2_error.NGHTTP2_ERR_INSUFF_BUFSIZE`
 *     The provided |buflen| size is too small to hold the output.
 */
NGHTTP2_EXTERN nghttp2_ssize nghttp2_hd_deflate_hd_vec2(
  nghttp2_hd_deflater *deflater, const nghttp2_vec *vec, size_t veclen,
  const nghttp2_nv *nva, size_t nvlen);

/**
 * @function
 *
 * Returns an upper bound on the compressed size after deflation of
 * |nva| of length |nvlen|.
 */
NGHTTP2_EXTERN size_t nghttp2_hd_deflate_bound(nghttp2_hd_deflater *deflater,
                                               const nghttp2_nv *nva,
                                               size_t nvlen);

/**
 * @function
 *
 * Returns the number of entries that header table of |deflater|
 * contains.  This is the sum of the number of static table and
 * dynamic table, so the return value is at least 61.
 */
NGHTTP2_EXTERN
size_t nghttp2_hd_deflate_get_num_table_entries(nghttp2_hd_deflater *deflater);

/**
 * @function
 *
 * Returns the table entry denoted by |idx| from header table of
 * |deflater|.  The |idx| is 1-based, and idx=1 returns first entry of
 * static table.  idx=62 returns first entry of dynamic table if it
 * exists.  Specifying idx=0 is error, and this function returns NULL.
 * If |idx| is strictly greater than the number of entries the tables
 * contain, this function returns NULL.
 */
NGHTTP2_EXTERN
const nghttp2_nv *
nghttp2_hd_deflate_get_table_entry(nghttp2_hd_deflater *deflater, size_t idx);

/**
 * @function
 *
 * Returns the used dynamic table size, including the overhead 32
 * bytes per entry described in RFC 7541.
 */
NGHTTP2_EXTERN
size_t nghttp2_hd_deflate_get_dynamic_table_size(nghttp2_hd_deflater *deflater);

/**
 * @function
 *
 * Returns the maximum dynamic table size.
 */
NGHTTP2_EXTERN
size_t
nghttp2_hd_deflate_get_max_dynamic_table_size(nghttp2_hd_deflater *deflater);

struct nghttp2_hd_inflater;

/**
 * @struct
 *
 * HPACK inflater object.
 */
typedef struct nghttp2_hd_inflater nghttp2_hd_inflater;

/**
 * @function
 *
 * Initializes |*inflater_ptr| for inflating name/values pairs.
 *
 * If this function fails, |*inflater_ptr| is left untouched.
 *
 * This function returns 0 if it succeeds, or one of the following
 * negative error codes:
 *
 * :enum:`nghttp2_error.NGHTTP2_ERR_NOMEM`
 *     Out of memory.
 */
NGHTTP2_EXTERN int nghttp2_hd_inflate_new(nghttp2_hd_inflater **inflater_ptr);

/**
 * @function
 *
 * Like `nghttp2_hd_inflate_new()`, but with additional custom memory
 * allocator specified in the |mem|.
 *
 * The |mem| can be ``NULL`` and the call is equivalent to
 * `nghttp2_hd_inflate_new()`.
 *
 * This function does not take ownership |mem|.  The application is
 * responsible for freeing |mem|.
 *
 * The library code does not refer to |mem| pointer after this
 * function returns, so the application can safely free it.
 */
NGHTTP2_EXTERN int nghttp2_hd_inflate_new2(nghttp2_hd_inflater **inflater_ptr,
                                           nghttp2_mem *mem);

/**
 * @function
 *
 * Deallocates any resources allocated for |inflater|.
 */
NGHTTP2_EXTERN void nghttp2_hd_inflate_del(nghttp2_hd_inflater *inflater);

/**
 * @function
 *
 * Changes header table size in the |inflater|.  This may trigger
 * eviction in the dynamic table.
 *
 * The |settings_max_dynamic_table_size| should be the value
 * transmitted in SETTINGS_HEADER_TABLE_SIZE.
 *
 * This function must not be called while header block is being
 * inflated.  In other words, this function must be called after
 * initialization of |inflater|, but before calling
 * `nghttp2_hd_inflate_hd3()`, or after
 * `nghttp2_hd_inflate_end_headers()`.  Otherwise,
 * `NGHTTP2_ERR_INVALID_STATE` was returned.
 *
 * This function returns 0 if it succeeds, or one of the following
 * negative error codes:
 *
 * :enum:`nghttp2_error.NGHTTP2_ERR_NOMEM`
 *     Out of memory.
 * :enum:`nghttp2_error.NGHTTP2_ERR_INVALID_STATE`
 *     The function is called while header block is being inflated.
 *     Probably, application missed to call
 *     `nghttp2_hd_inflate_end_headers()`.
 */
NGHTTP2_EXTERN int
nghttp2_hd_inflate_change_table_size(nghttp2_hd_inflater *inflater,
                                     size_t settings_max_dynamic_table_size);

/**
 * @enum
 *
 * The flags for header inflation.
 */
typedef enum {
  /**
   * No flag set.
   */
  NGHTTP2_HD_INFLATE_NONE = 0,
  /**
   * Indicates all headers were inflated.
   */
  NGHTTP2_HD_INFLATE_FINAL = 0x01,
  /**
   * Indicates a header was emitted.
   */
  NGHTTP2_HD_INFLATE_EMIT = 0x02
} nghttp2_hd_inflate_flag;

#ifndef NGHTTP2_NO_SSIZE_T
/**
 * @function
 *
 * .. warning::
 *
 *   Deprecated.  Use `nghttp2_hd_inflate_hd2()` instead.
 *
 * Inflates name/value block stored in |in| with length |inlen|.  This
 * function performs decompression.  For each successful emission of
 * header name/value pair,
 * :enum:`nghttp2_hd_inflate_flag.NGHTTP2_HD_INFLATE_EMIT` is set in
 * |*inflate_flags| and name/value pair is assigned to the |nv_out|
 * and the function returns.  The caller must not free the members of
 * |nv_out|.
 *
 * The |nv_out| may include pointers to the memory region in the |in|.
 * The caller must retain the |in| while the |nv_out| is used.
 *
 * The application should call this function repeatedly until the
 * ``(*inflate_flags) & NGHTTP2_HD_INFLATE_FINAL`` is nonzero and
 * return value is non-negative.  This means the all input values are
 * processed successfully.  Then the application must call
 * `nghttp2_hd_inflate_end_headers()` to prepare for the next header
 * block input.
 *
 * The caller can feed complete compressed header block.  It also can
 * feed it in several chunks.  The caller must set |in_final| to
 * nonzero if the given input is the last block of the compressed
 * header.
 *
 * This function returns the number of bytes processed if it succeeds,
 * or one of the following negative error codes:
 *
 * :enum:`nghttp2_error.NGHTTP2_ERR_NOMEM`
 *     Out of memory.
 * :enum:`nghttp2_error.NGHTTP2_ERR_HEADER_COMP`
 *     Inflation process has failed.
 * :enum:`nghttp2_error.NGHTTP2_ERR_BUFFER_ERROR`
 *     The header field name or value is too large.
 *
 * Example follows::
 *
 *     int inflate_header_block(nghttp2_hd_inflater *hd_inflater,
 *                              uint8_t *in, size_t inlen, int final)
 *     {
 *         ssize_t rv;
 *
 *         for(;;) {
 *             nghttp2_nv nv;
 *             int inflate_flags = 0;
 *
 *             rv = nghttp2_hd_inflate_hd(hd_inflater, &nv, &inflate_flags,
 *                                        in, inlen, final);
 *
 *             if(rv < 0) {
 *                 fprintf(stderr, "inflate failed with error code %zd", rv);
 *                 return -1;
 *             }
 *
 *             in += rv;
 *             inlen -= rv;
 *
 *             if(inflate_flags & NGHTTP2_HD_INFLATE_EMIT) {
 *                 fwrite(nv.name, nv.namelen, 1, stderr);
 *                 fprintf(stderr, ": ");
 *                 fwrite(nv.value, nv.valuelen, 1, stderr);
 *                 fprintf(stderr, "\n");
 *             }
 *             if(inflate_flags & NGHTTP2_HD_INFLATE_FINAL) {
 *                 nghttp2_hd_inflate_end_headers(hd_inflater);
 *                 break;
 *             }
 *             if((inflate_flags & NGHTTP2_HD_INFLATE_EMIT) == 0 &&
 *                inlen == 0) {
 *                break;
 *             }
 *         }
 *
 *         return 0;
 *     }
 *
 */
NGHTTP2_EXTERN ssize_t nghttp2_hd_inflate_hd(nghttp2_hd_inflater *inflater,
                                             nghttp2_nv *nv_out,
                                             int *inflate_flags, uint8_t *in,
                                             size_t inlen, int in_final);

#endif /* NGHTTP2_NO_SSIZE_T */

#ifndef NGHTTP2_NO_SSIZE_T
/**
 * @function
 *
 * .. warning::
 *
 *   Deprecated.  Use `nghttp2_hd_inflate_hd3()` instead.
 *
 * Inflates name/value block stored in |in| with length |inlen|.  This
 * function performs decompression.  For each successful emission of
 * header name/value pair,
 * :enum:`nghttp2_hd_inflate_flag.NGHTTP2_HD_INFLATE_EMIT` is set in
 * |*inflate_flags| and name/value pair is assigned to the |nv_out|
 * and the function returns.  The caller must not free the members of
 * |nv_out|.
 *
 * The |nv_out| may include pointers to the memory region in the |in|.
 * The caller must retain the |in| while the |nv_out| is used.
 *
 * The application should call this function repeatedly until the
 * ``(*inflate_flags) & NGHTTP2_HD_INFLATE_FINAL`` is nonzero and
 * return value is non-negative.  If that happens, all given input
 * data (|inlen| bytes) are processed successfully.  Then the
 * application must call `nghttp2_hd_inflate_end_headers()` to prepare
 * for the next header block input.
 *
 * In other words, if |in_final| is nonzero, and this function returns
 * |inlen|, you can assert that
 * :enum:`nghttp2_hd_inflate_final.NGHTTP2_HD_INFLATE_FINAL` is set in
 * |*inflate_flags|.
 *
 * The caller can feed complete compressed header block.  It also can
 * feed it in several chunks.  The caller must set |in_final| to
 * nonzero if the given input is the last block of the compressed
 * header.
 *
 * This function returns the number of bytes processed if it succeeds,
 * or one of the following negative error codes:
 *
 * :enum:`nghttp2_error.NGHTTP2_ERR_NOMEM`
 *     Out of memory.
 * :enum:`nghttp2_error.NGHTTP2_ERR_HEADER_COMP`
 *     Inflation process has failed.
 * :enum:`nghttp2_error.NGHTTP2_ERR_BUFFER_ERROR`
 *     The header field name or value is too large.
 *
 * Example follows::
 *
 *     int inflate_header_block(nghttp2_hd_inflater *hd_inflater,
 *                              uint8_t *in, size_t inlen, int final)
 *     {
 *         ssize_t rv;
 *
 *         for(;;) {
 *             nghttp2_nv nv;
 *             int inflate_flags = 0;
 *
 *             rv = nghttp2_hd_inflate_hd2(hd_inflater, &nv, &inflate_flags,
 *                                         in, inlen, final);
 *
 *             if(rv < 0) {
 *                 fprintf(stderr, "inflate failed with error code %zd", rv);
 *                 return -1;
 *             }
 *
 *             in += rv;
 *             inlen -= rv;
 *
 *             if(inflate_flags & NGHTTP2_HD_INFLATE_EMIT) {
 *                 fwrite(nv.name, nv.namelen, 1, stderr);
 *                 fprintf(stderr, ": ");
 *                 fwrite(nv.value, nv.valuelen, 1, stderr);
 *                 fprintf(stderr, "\n");
 *             }
 *             if(inflate_flags & NGHTTP2_HD_INFLATE_FINAL) {
 *                 nghttp2_hd_inflate_end_headers(hd_inflater);
 *                 break;
 *             }
 *             if((inflate_flags & NGHTTP2_HD_INFLATE_EMIT) == 0 &&
 *                inlen == 0) {
 *                break;
 *             }
 *         }
 *
 *         return 0;
 *     }
 *
 */
NGHTTP2_EXTERN ssize_t nghttp2_hd_inflate_hd2(nghttp2_hd_inflater *inflater,
                                              nghttp2_nv *nv_out,
                                              int *inflate_flags,
                                              const uint8_t *in, size_t inlen,
                                              int in_final);

#endif /* NGHTTP2_NO_SSIZE_T */

/**
 * @function
 *
 * Inflates name/value block stored in |in| with length |inlen|.  This
 * function performs decompression.  For each successful emission of
 * header name/value pair,
 * :enum:`nghttp2_hd_inflate_flag.NGHTTP2_HD_INFLATE_EMIT` is set in
 * |*inflate_flags| and name/value pair is assigned to the |nv_out|
 * and the function returns.  The caller must not free the members of
 * |nv_out|.
 *
 * The |nv_out| may include pointers to the memory region in the |in|.
 * The caller must retain the |in| while the |nv_out| is used.
 *
 * The application should call this function repeatedly until the
 * ``(*inflate_flags) & NGHTTP2_HD_INFLATE_FINAL`` is nonzero and
 * return value is non-negative.  If that happens, all given input
 * data (|inlen| bytes) are processed successfully.  Then the
 * application must call `nghttp2_hd_inflate_end_headers()` to prepare
 * for the next header block input.
 *
 * In other words, if |in_final| is nonzero, and this function returns
 * |inlen|, you can assert that
 * :enum:`nghttp2_hd_inflate_final.NGHTTP2_HD_INFLATE_FINAL` is set in
 * |*inflate_flags|.
 *
 * The caller can feed complete compressed header block.  It also can
 * feed it in several chunks.  The caller must set |in_final| to
 * nonzero if the given input is the last block of the compressed
 * header.
 *
 * This function returns the number of bytes processed if it succeeds,
 * or one of the following negative error codes:
 *
 * :enum:`nghttp2_error.NGHTTP2_ERR_NOMEM`
 *     Out of memory.
 * :enum:`nghttp2_error.NGHTTP2_ERR_HEADER_COMP`
 *     Inflation process has failed.
 * :enum:`nghttp2_error.NGHTTP2_ERR_BUFFER_ERROR`
 *     The header field name or value is too large.
 *
 * Example follows::
 *
 *     int inflate_header_block(nghttp2_hd_inflater *hd_inflater,
 *                              uint8_t *in, size_t inlen, int final)
 *     {
 *         nghttp2_ssize rv;
 *
 *         for(;;) {
 *             nghttp2_nv nv;
 *             int inflate_flags = 0;
 *
 *             rv = nghttp2_hd_inflate_hd3(hd_inflater, &nv, &inflate_flags,
 *                                         in, inlen, final);
 *
 *             if(rv < 0) {
 *                 fprintf(stderr, "inflate failed with error code %td", rv);
 *                 return -1;
 *             }
 *
 *             in += rv;
 *             inlen -= rv;
 *
 *             if(inflate_flags & NGHTTP2_HD_INFLATE_EMIT) {
 *                 fwrite(nv.name, nv.namelen, 1, stderr);
 *                 fprintf(stderr, ": ");
 *                 fwrite(nv.value, nv.valuelen, 1, stderr);
 *                 fprintf(stderr, "\n");
 *             }
 *             if(inflate_flags & NGHTTP2_HD_INFLATE_FINAL) {
 *                 nghttp2_hd_inflate_end_headers(hd_inflater);
 *                 break;
 *             }
 *             if((inflate_flags & NGHTTP2_HD_INFLATE_EMIT) == 0 &&
 *                inlen == 0) {
 *                break;
 *             }
 *         }
 *
 *         return 0;
 *     }
 *
 */
NGHTTP2_EXTERN nghttp2_ssize nghttp2_hd_inflate_hd3(
  nghttp2_hd_inflater *inflater, nghttp2_nv *nv_out, int *inflate_flags,
  const uint8_t *in, size_t inlen, int in_final);

/**
 * @function
 *
 * Signals the end of decompression for one header block.
 *
 * This function returns 0 if it succeeds. Currently this function
 * always succeeds.
 */
NGHTTP2_EXTERN int
nghttp2_hd_inflate_end_headers(nghttp2_hd_inflater *inflater);

/**
 * @function
 *
 * Returns the number of entries that header table of |inflater|
 * contains.  This is the sum of the number of static table and
 * dynamic table, so the return value is at least 61.
 */
NGHTTP2_EXTERN
size_t nghttp2_hd_inflate_get_num_table_entries(nghttp2_hd_inflater *inflater);

/**
 * @function
 *
 * Returns the table entry denoted by |idx| from header table of
 * |inflater|.  The |idx| is 1-based, and idx=1 returns first entry of
 * static table.  idx=62 returns first entry of dynamic table if it
 * exists.  Specifying idx=0 is error, and this function returns NULL.
 * If |idx| is strictly greater than the number of entries the tables
 * contain, this function returns NULL.
 */
NGHTTP2_EXTERN
const nghttp2_nv *
nghttp2_hd_inflate_get_table_entry(nghttp2_hd_inflater *inflater, size_t idx);

/**
 * @function
 *
 * Returns the used dynamic table size, including the overhead 32
 * bytes per entry described in RFC 7541.
 */
NGHTTP2_EXTERN
size_t nghttp2_hd_inflate_get_dynamic_table_size(nghttp2_hd_inflater *inflater);

/**
 * @function
 *
 * Returns the maximum dynamic table size.
 */
NGHTTP2_EXTERN
size_t
nghttp2_hd_inflate_get_max_dynamic_table_size(nghttp2_hd_inflater *inflater);

struct nghttp2_stream;

/**
 * @struct
 *
 * The structure to represent HTTP/2 stream.  The details of this
 * structure are intentionally hidden from the public API.
 */
typedef struct nghttp2_stream nghttp2_stream;

/**
 * @function
 *
 * Returns pointer to :type:`nghttp2_stream` object denoted by
 * |stream_id|.  If stream was not found, returns NULL.
 *
 * Returns imaginary root stream (see
 * `nghttp2_session_get_root_stream()`) if 0 is given in |stream_id|.
 *
 * Unless |stream_id| == 0, the returned pointer is valid until next
 * call of `nghttp2_session_send()`, `nghttp2_session_mem_send2()`,
 * `nghttp2_session_recv()`, and `nghttp2_session_mem_recv2()`.
 */
NGHTTP2_EXTERN nghttp2_stream *
nghttp2_session_find_stream(nghttp2_session *session, int32_t stream_id);

/**
 * @enum
 *
 * State of stream as described in RFC 7540.
 */
typedef enum {
  /**
   * idle state.
   */
  NGHTTP2_STREAM_STATE_IDLE = 1,
  /**
   * open state.
   */
  NGHTTP2_STREAM_STATE_OPEN,
  /**
   * reserved (local) state.
   */
  NGHTTP2_STREAM_STATE_RESERVED_LOCAL,
  /**
   * reserved (remote) state.
   */
  NGHTTP2_STREAM_STATE_RESERVED_REMOTE,
  /**
   * half closed (local) state.
   */
  NGHTTP2_STREAM_STATE_HALF_CLOSED_LOCAL,
  /**
   * half closed (remote) state.
   */
  NGHTTP2_STREAM_STATE_HALF_CLOSED_REMOTE,
  /**
   * closed state.
   */
  NGHTTP2_STREAM_STATE_CLOSED
} nghttp2_stream_proto_state;

/**
 * @function
 *
 * Returns state of |stream|.  The root stream retrieved by
 * `nghttp2_session_get_root_stream()` will have stream state
 * :enum:`nghttp2_stream_proto_state.NGHTTP2_STREAM_STATE_IDLE`.
 */
NGHTTP2_EXTERN nghttp2_stream_proto_state
nghttp2_stream_get_state(nghttp2_stream *stream);

/**
 * @function
 *
 * .. warning::
 *
 *   Deprecated.  :rfc:`7540` priorities are deprecated by
 *   :rfc:`9113`.  Consider migrating to :rfc:`9218` extensible
 *   prioritization scheme.
 *
 * Returns root of dependency tree, which is imaginary stream with
 * stream ID 0.  The returned pointer is valid until |session| is
 * freed by `nghttp2_session_del()`.
 */
NGHTTP2_EXTERN nghttp2_stream *
nghttp2_session_get_root_stream(nghttp2_session *session);

/**
 * @function
 *
 * .. warning::
 *
 *   Deprecated.  :rfc:`7540` priorities are deprecated by
 *   :rfc:`9113`.  Consider migrating to :rfc:`9218` extensible
 *   prioritization scheme.  In the future release after the end of
 *   2024, this function will always return NULL.
 *
 * Returns the parent stream of |stream| in dependency tree.  Returns
 * NULL if there is no such stream.
 */
NGHTTP2_EXTERN nghttp2_stream *
nghttp2_stream_get_parent(nghttp2_stream *stream);

NGHTTP2_EXTERN int32_t nghttp2_stream_get_stream_id(nghttp2_stream *stream);

/**
 * @function
 *
 * .. warning::
 *
 *   Deprecated.  :rfc:`7540` priorities are deprecated by
 *   :rfc:`9113`.  Consider migrating to :rfc:`9218` extensible
 *   prioritization scheme.  In the future release after the end of
 *   2024, this function will always return NULL.
 *
 * Returns the next sibling stream of |stream| in dependency tree.
 * Returns NULL if there is no such stream.
 */
NGHTTP2_EXTERN nghttp2_stream *
nghttp2_stream_get_next_sibling(nghttp2_stream *stream);

/**
 * @function
 *
 * .. warning::
 *
 *   Deprecated.  :rfc:`7540` priorities are deprecated by
 *   :rfc:`9113`.  Consider migrating to :rfc:`9218` extensible
 *   prioritization scheme.  In the future release after the end of
 *   2024, this function will always return NULL.
 *
 * Returns the previous sibling stream of |stream| in dependency tree.
 * Returns NULL if there is no such stream.
 */
NGHTTP2_EXTERN nghttp2_stream *
nghttp2_stream_get_previous_sibling(nghttp2_stream *stream);

/**
 * @function
 *
 * .. warning::
 *
 *   Deprecated.  :rfc:`7540` priorities are deprecated by
 *   :rfc:`9113`.  Consider migrating to :rfc:`9218` extensible
 *   prioritization scheme.  In the future release after the end of
 *   2024, this function will always return NULL.
 *
 * Returns the first child stream of |stream| in dependency tree.
 * Returns NULL if there is no such stream.
 */
NGHTTP2_EXTERN nghttp2_stream *
nghttp2_stream_get_first_child(nghttp2_stream *stream);

/**
 * @function
 *
 * .. warning::
 *
 *   Deprecated.  :rfc:`7540` priorities are deprecated by
 *   :rfc:`9113`.  Consider migrating to :rfc:`9218` extensible
 *   prioritization scheme.  In the future release after the end of
 *   2024, this function will always return
 *   :macro:`NGHTTP2_DEFAULT_WEIGHT`.
 *
 * Returns dependency weight to the parent stream of |stream|.
 */
NGHTTP2_EXTERN int32_t nghttp2_stream_get_weight(nghttp2_stream *stream);

/**
 * @function
 *
 * .. warning::
 *
 *   Deprecated.  :rfc:`7540` priorities are deprecated by
 *   :rfc:`9113`.  Consider migrating to :rfc:`9218` extensible
 *   prioritization scheme.  In the future release after the end of
 *   2024, this function will always return 0.
 *
 * Returns the sum of the weight for |stream|'s children.
 */
NGHTTP2_EXTERN int32_t
nghttp2_stream_get_sum_dependency_weight(nghttp2_stream *stream);

/**
 * @functypedef
 *
 * Callback function invoked when the library outputs debug logging.
 * The function is called with arguments suitable for ``vfprintf(3)``
 *
 * The debug output is only enabled if the library is built with
 * ``DEBUGBUILD`` macro defined.
 */
typedef void (*nghttp2_debug_vprintf_callback)(const char *format,
                                               va_list args);

/**
 * @function
 *
 * Sets a debug output callback called by the library when built with
 * ``DEBUGBUILD`` macro defined.  If this option is not used, debug
 * log is written into standard error output.
 *
 * For builds without ``DEBUGBUILD`` macro defined, this function is
 * noop.
 *
 * Note that building with ``DEBUGBUILD`` may cause significant
 * performance penalty to libnghttp2 because of extra processing.  It
 * should be used for debugging purpose only.
 *
 * .. Warning::
 *
 *   Building with ``DEBUGBUILD`` may cause significant performance
 *   penalty to libnghttp2 because of extra processing.  It should be
 *   used for debugging purpose only.  We write this two times because
 *   this is important.
 */
NGHTTP2_EXTERN void nghttp2_set_debug_vprintf_callback(
  nghttp2_debug_vprintf_callback debug_vprintf_callback);

#ifdef __cplusplus
}
#endif

#endif /* NGHTTP2_H */
ext/swoole/thirdparty/nghttp2/nghttp2_buf.h000064400000032756151730541630015051 0ustar00/*
 * nghttp2 - HTTP/2 C Library
 *
 * Copyright (c) 2014 Tatsuhiro Tsujikawa
 *
 * Permission is hereby granted, free of charge, to any person obtaining
 * a copy of this software and associated documentation files (the
 * "Software"), to deal in the Software without restriction, including
 * without limitation the rights to use, copy, modify, merge, publish,
 * distribute, sublicense, and/or sell copies of the Software, and to
 * permit persons to whom the Software is furnished to do so, subject to
 * the following conditions:
 *
 * The above copyright notice and this permission notice shall be
 * included in all copies or substantial portions of the Software.
 *
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
 * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
 * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
 * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
 * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
 * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 */
#ifndef NGHTTP2_BUF_H
#define NGHTTP2_BUF_H

#include "nghttp2.h"

#include "nghttp2_mem.h"

typedef struct {
  /* This points to the beginning of the buffer. The effective range
     of buffer is [begin, end). */
  uint8_t *begin;
  /* This points to the memory one byte beyond the end of the
     buffer. */
  uint8_t *end;
  /* The position indicator for effective start of the buffer. pos <=
     last must be hold. */
  uint8_t *pos;
  /* The position indicator for effective one beyond of the end of the
     buffer. last <= end must be hold. */
  uint8_t *last;
  /* Mark arbitrary position in buffer [begin, end) */
  uint8_t *mark;
} nghttp2_buf;

#define nghttp2_buf_len(BUF) ((size_t)((BUF)->last - (BUF)->pos))
#define nghttp2_buf_avail(BUF) ((size_t)((BUF)->end - (BUF)->last))
#define nghttp2_buf_mark_avail(BUF) ((size_t)((BUF)->mark - (BUF)->last))
#define nghttp2_buf_cap(BUF) ((size_t)((BUF)->end - (BUF)->begin))

#define nghttp2_buf_pos_offset(BUF) ((size_t)((BUF)->pos - (BUF)->begin))
#define nghttp2_buf_last_offset(BUF) ((size_t)((BUF)->last - (BUF)->begin))

#define nghttp2_buf_shift_right(BUF, AMT)                                      \
  do {                                                                         \
    (BUF)->pos += AMT;                                                         \
    (BUF)->last += AMT;                                                        \
  } while (0)

#define nghttp2_buf_shift_left(BUF, AMT)                                       \
  do {                                                                         \
    (BUF)->pos -= AMT;                                                         \
    (BUF)->last -= AMT;                                                        \
  } while (0)

/*
 * Initializes the |buf|. No memory is allocated in this function. Use
 * nghttp2_buf_reserve() to allocate memory.
 */
void nghttp2_buf_init(nghttp2_buf *buf);

/*
 * Initializes the |buf| and allocates at least |initial| bytes of
 * memory.
 *
 * This function returns 0 if it succeeds, or one of the following
 * negative error codes:
 *
 * NGHTTP2_ERR_NOMEM
 *     Out of memory
 */
int nghttp2_buf_init2(nghttp2_buf *buf, size_t initial, nghttp2_mem *mem);

/*
 * Frees buffer in |buf|.
 */
void nghttp2_buf_free(nghttp2_buf *buf, nghttp2_mem *mem);

/*
 * Extends buffer so that nghttp2_buf_cap() returns at least
 * |new_cap|. If extensions took place, buffer pointers in |buf| will
 * change.
 *
 * This function returns 0 if it succeeds, or one of the following
 * negative error codes:
 *
 * NGHTTP2_ERR_NOMEM
 *     Out of memory
 */
int nghttp2_buf_reserve(nghttp2_buf *buf, size_t new_cap, nghttp2_mem *mem);

/*
 * Resets pos, last, mark member of |buf| to buf->begin.
 */
void nghttp2_buf_reset(nghttp2_buf *buf);

/*
 * Initializes |buf| using supplied buffer |begin| of length
 * |len|. Semantically, the application should not call *_reserve() or
 * nghttp2_free() functions for |buf|.
 */
void nghttp2_buf_wrap_init(nghttp2_buf *buf, uint8_t *begin, size_t len);

struct nghttp2_buf_chain;

typedef struct nghttp2_buf_chain nghttp2_buf_chain;

/* Chains 2 buffers */
struct nghttp2_buf_chain {
  /* Points to the subsequent buffer. NULL if there is no such
     buffer. */
  nghttp2_buf_chain *next;
  nghttp2_buf buf;
};

typedef struct {
  /* Points to the first buffer */
  nghttp2_buf_chain *head;
  /* Buffer pointer where write occurs. */
  nghttp2_buf_chain *cur;
  /* Memory allocator */
  nghttp2_mem *mem;
  /* The buffer capacity of each buf.  This field may be 0 if
     nghttp2_bufs is initialized by nghttp2_bufs_wrap_init* family
     functions. */
  size_t chunk_length;
  /* The maximum number of nghttp2_buf_chain */
  size_t max_chunk;
  /* The number of nghttp2_buf_chain allocated */
  size_t chunk_used;
  /* The number of nghttp2_buf_chain to keep on reset */
  size_t chunk_keep;
  /* pos offset from begin in each buffers. On initialization and
     reset, buf->pos and buf->last are positioned at buf->begin +
     offset. */
  size_t offset;
} nghttp2_bufs;

/*
 * This is the same as calling nghttp2_bufs_init2 with the given
 * arguments and offset = 0.
 */
int nghttp2_bufs_init(nghttp2_bufs *bufs, size_t chunk_length, size_t max_chunk,
                      nghttp2_mem *mem);

/*
 * This is the same as calling nghttp2_bufs_init3 with the given
 * arguments and chunk_keep = max_chunk.
 */
int nghttp2_bufs_init2(nghttp2_bufs *bufs, size_t chunk_length,
                       size_t max_chunk, size_t offset, nghttp2_mem *mem);

/*
 * Initializes |bufs|. Each buffer size is given in the
 * |chunk_length|.  The maximum number of buffers is given in the
 * |max_chunk|.  On reset, first |chunk_keep| buffers are kept and
 * remaining buffers are deleted.  Each buffer will have bufs->pos and
 * bufs->last shifted to left by |offset| bytes on creation and reset.
 *
 * This function allocates first buffer.  bufs->head and bufs->cur
 * will point to the first buffer after this call.
 *
 * This function returns 0 if it succeeds, or one of the following
 * negative error codes:
 *
 * NGHTTP2_ERR_NOMEM
 *     Out of memory.
 * NGHTTP2_ERR_INVALID_ARGUMENT
 *     chunk_keep is 0; or max_chunk < chunk_keep; or offset is too
 *     long.
 */
int nghttp2_bufs_init3(nghttp2_bufs *bufs, size_t chunk_length,
                       size_t max_chunk, size_t chunk_keep, size_t offset,
                       nghttp2_mem *mem);

/*
 * Frees any related resources to the |bufs|.
 */
void nghttp2_bufs_free(nghttp2_bufs *bufs);

/*
 * Initializes |bufs| using supplied buffer |begin| of length |len|.
 * The first buffer bufs->head uses buffer |begin|.  The buffer size
 * is fixed and no extra chunk buffer is allocated.  In other
 * words, max_chunk = chunk_keep = 1.  To free the resource allocated
 * for |bufs|, use nghttp2_bufs_wrap_free().
 *
 * Don't use the function which performs allocation, such as
 * nghttp2_bufs_realloc().
 *
 * This function returns 0 if it succeeds, or one of the following
 * negative error codes:
 *
 * NGHTTP2_ERR_NOMEM
 *     Out of memory.
 */
int nghttp2_bufs_wrap_init(nghttp2_bufs *bufs, uint8_t *begin, size_t len,
                           nghttp2_mem *mem);

/*
 * Initializes |bufs| using supplied |veclen| size of buf vector
 * |vec|.  The number of buffers is fixed and no extra chunk buffer is
 * allocated.  In other words, max_chunk = chunk_keep = |in_len|.  To
 * free the resource allocated for |bufs|, use
 * nghttp2_bufs_wrap_free().
 *
 * Don't use the function which performs allocation, such as
 * nghttp2_bufs_realloc().
 *
 * This function returns 0 if it succeeds, or one of the following
 * negative error codes:
 *
 * NGHTTP2_ERR_NOMEM
 *     Out of memory.
 */
int nghttp2_bufs_wrap_init2(nghttp2_bufs *bufs, const nghttp2_vec *vec,
                            size_t veclen, nghttp2_mem *mem);

/*
 * Frees any related resource to the |bufs|.  This function does not
 * free supplied buffer provided in nghttp2_bufs_wrap_init().
 */
void nghttp2_bufs_wrap_free(nghttp2_bufs *bufs);

/*
 * Reallocates internal buffer using |chunk_length|.  The max_chunk,
 * chunk_keep and offset do not change.  After successful allocation
 * of new buffer, previous buffers are deallocated without copying
 * anything into new buffers.  chunk_used is reset to 1.
 *
 * This function returns 0 if it succeeds, or one of the following
 * negative error codes:
 *
 * NGHTTP2_ERR_NOMEM
 *     Out of memory.
 * NGHTTP2_ERR_INVALID_ARGUMENT
 *     chunk_length < offset
 */
int nghttp2_bufs_realloc(nghttp2_bufs *bufs, size_t chunk_length);

/*
 * Appends the |data| of length |len| to the |bufs|. The write starts
 * at bufs->cur->buf.last. A new buffers will be allocated to store
 * all data.
 *
 * This function returns 0 if it succeeds, or one of the following
 * negative error codes:
 *
 * NGHTTP2_ERR_NOMEM
 *     Out of memory.
 * NGHTTP2_ERR_BUFFER_ERROR
 *     Out of buffer space.
 */
int nghttp2_bufs_add(nghttp2_bufs *bufs, const void *data, size_t len);

/*
 * Appends a single byte |b| to the |bufs|. The write starts at
 * bufs->cur->buf.last. A new buffers will be allocated to store all
 * data.
 *
 * This function returns 0 if it succeeds, or one of the following
 * negative error codes:
 *
 * NGHTTP2_ERR_NOMEM
 *     Out of memory.
 * NGHTTP2_ERR_BUFFER_ERROR
 *     Out of buffer space.
 */
int nghttp2_bufs_addb(nghttp2_bufs *bufs, uint8_t b);

/*
 * Behaves like nghttp2_bufs_addb(), but this does not update
 * buf->last pointer.
 */
int nghttp2_bufs_addb_hold(nghttp2_bufs *bufs, uint8_t b);

#define nghttp2_bufs_fast_addb(BUFS, B)                                        \
  do {                                                                         \
    *(BUFS)->cur->buf.last++ = B;                                              \
  } while (0)

#define nghttp2_bufs_fast_addb_hold(BUFS, B)                                   \
  do {                                                                         \
    *(BUFS)->cur->buf.last = B;                                                \
  } while (0)

/*
 * Performs bitwise-OR of |b| at bufs->cur->buf.last. A new buffers
 * will be allocated if necessary.
 *
 * This function returns 0 if it succeeds, or one of the following
 * negative error codes:
 *
 * NGHTTP2_ERR_NOMEM
 *     Out of memory.
 * NGHTTP2_ERR_BUFFER_ERROR
 *     Out of buffer space.
 */
int nghttp2_bufs_orb(nghttp2_bufs *bufs, uint8_t b);

/*
 * Behaves like nghttp2_bufs_orb(), but does not update buf->last
 * pointer.
 */
int nghttp2_bufs_orb_hold(nghttp2_bufs *bufs, uint8_t b);

#define nghttp2_bufs_fast_orb(BUFS, B)                                         \
  do {                                                                         \
    uint8_t **p = &(BUFS)->cur->buf.last;                                      \
    **p = (uint8_t)(**p | (B));                                                \
    ++(*p);                                                                    \
  } while (0)

#define nghttp2_bufs_fast_orb_hold(BUFS, B)                                    \
  do {                                                                         \
    uint8_t *p = (BUFS)->cur->buf.last;                                        \
    *p = (uint8_t)(*p | (B));                                                  \
  } while (0)

/*
 * Copies all data stored in |bufs| to the contiguous buffer.  This
 * function allocates the contiguous memory to store all data in
 * |bufs| and assigns it to |*out|.
 *
 * The contents of |bufs| is left unchanged.
 *
 * This function returns the length of copied data and assigns the
 * pointer to copied data to |*out| if it succeeds, or one of the
 * following negative error codes:
 *
 * NGHTTP2_ERR_NOMEM
 *     Out of memory
 */
nghttp2_ssize nghttp2_bufs_remove(nghttp2_bufs *bufs, uint8_t **out);

/*
 * Copies all data stored in |bufs| to |out|.  This function assumes
 * that the buffer space pointed by |out| has at least
 * nghttp2_bufs(bufs) bytes.
 *
 * The contents of |bufs| is left unchanged.
 *
 * This function returns the length of copied data.
 */
size_t nghttp2_bufs_remove_copy(nghttp2_bufs *bufs, uint8_t *out);

/*
 * Resets |bufs| and makes the buffers empty.
 */
void nghttp2_bufs_reset(nghttp2_bufs *bufs);

/*
 * Moves bufs->cur to bufs->cur->next.  If resulting bufs->cur is
 * NULL, this function allocates new buffers and bufs->cur points to
 * it.
 *
 * This function returns 0 if it succeeds, or one of the following
 * negative error codes:
 *
 * NGHTTP2_ERR_NOMEM
 *     Out of memory
 * NGHTTP2_ERR_BUFFER_ERROR
 *     Out of buffer space.
 */
int nghttp2_bufs_advance(nghttp2_bufs *bufs);

/* Sets bufs->cur to bufs->head */
#define nghttp2_bufs_rewind(BUFS)                                              \
  do {                                                                         \
    (BUFS)->cur = (BUFS)->head;                                                \
  } while (0)

/*
 * Move bufs->cur, from the current position, using next member, to
 * the last buf which has nghttp2_buf_len(buf) > 0 without seeing buf
 * which satisfies nghttp2_buf_len(buf) == 0.  If
 * nghttp2_buf_len(&bufs->cur->buf) == 0 or bufs->cur->next is NULL,
 * bufs->cur is unchanged.
 */
void nghttp2_bufs_seek_last_present(nghttp2_bufs *bufs);

/*
 * Returns nonzero if bufs->cur->next is not empty.
 */
int nghttp2_bufs_next_present(nghttp2_bufs *bufs);

#define nghttp2_bufs_cur_avail(BUFS) nghttp2_buf_avail(&(BUFS)->cur->buf)

/*
 * Returns the total buffer length of |bufs|.
 */
size_t nghttp2_bufs_len(nghttp2_bufs *bufs);

#endif /* NGHTTP2_BUF_H */
ext/swoole/thirdparty/nghttp2/nghttp2_hd_huffman.h000064400000004660151730541630016365 0ustar00/*
 * nghttp2 - HTTP/2 C Library
 *
 * Copyright (c) 2013 Tatsuhiro Tsujikawa
 *
 * Permission is hereby granted, free of charge, to any person obtaining
 * a copy of this software and associated documentation files (the
 * "Software"), to deal in the Software without restriction, including
 * without limitation the rights to use, copy, modify, merge, publish,
 * distribute, sublicense, and/or sell copies of the Software, and to
 * permit persons to whom the Software is furnished to do so, subject to
 * the following conditions:
 *
 * The above copyright notice and this permission notice shall be
 * included in all copies or substantial portions of the Software.
 *
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
 * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
 * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
 * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
 * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
 * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 */
#ifndef NGHTTP2_HD_HUFFMAN_H
#define NGHTTP2_HD_HUFFMAN_H

#include <stdint.h>
#include <arpa/inet.h>

typedef enum {
  /* FSA accepts this state as the end of huffman encoding
     sequence. */
  NGHTTP2_HUFF_ACCEPTED = 1 << 14,
  /* This state emits symbol */
  NGHTTP2_HUFF_SYM = 1 << 15,
} nghttp2_huff_decode_flag;

typedef struct {
  /* fstate is the current huffman decoding state, which is actually
     the node ID of internal huffman tree with
     nghttp2_huff_decode_flag OR-ed.  We have 257 leaf nodes, but they
     are identical to root node other than emitting a symbol, so we
     have 256 internal nodes [1..255], inclusive.  The node ID 256 is
     a special node and it is a terminal state that means decoding
     failed. */
  uint16_t fstate;
  /* symbol if NGHTTP2_HUFF_SYM flag set */
  uint8_t sym;
} nghttp2_huff_decode;

typedef nghttp2_huff_decode huff_decode_table_type[16];

typedef struct {
  /* fstate is the current huffman decoding state. */
  uint16_t fstate;
} nghttp2_hd_huff_decode_context;

typedef struct {
  /* The number of bits in this code */
  uint32_t nbits;
  /* Huffman code aligned to LSB */
  uint32_t code;
} nghttp2_huff_sym;

extern const nghttp2_huff_sym huff_sym_table[];
extern const nghttp2_huff_decode huff_decode_table[][16];

#endif /* NGHTTP2_HD_HUFFMAN_H */
ext/swoole/thirdparty/nghttp2/nghttp2_rcbuf.h000064400000005077151730541640015373 0ustar00/*
 * nghttp2 - HTTP/2 C Library
 *
 * Copyright (c) 2016 Tatsuhiro Tsujikawa
 *
 * Permission is hereby granted, free of charge, to any person obtaining
 * a copy of this software and associated documentation files (the
 * "Software"), to deal in the Software without restriction, including
 * without limitation the rights to use, copy, modify, merge, publish,
 * distribute, sublicense, and/or sell copies of the Software, and to
 * permit persons to whom the Software is furnished to do so, subject to
 * the following conditions:
 *
 * The above copyright notice and this permission notice shall be
 * included in all copies or substantial portions of the Software.
 *
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
 * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
 * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
 * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
 * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
 * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 */
#ifndef NGHTTP2_RCBUF_H
#define NGHTTP2_RCBUF_H

#include "nghttp2.h"

struct nghttp2_rcbuf {
  /* custom memory allocator belongs to the mem parameter when
     creating this object. */
  void *mem_user_data;
  nghttp2_free free;
  /* The pointer to the underlying buffer */
  uint8_t *base;
  /* Size of buffer pointed by |base|. */
  size_t len;
  /* Reference count */
  int32_t ref;
};

/*
 * Allocates nghttp2_rcbuf object with |size| as initial buffer size.
 * When the function succeeds, the reference count becomes 1.
 *
 * This function returns 0 if it succeeds, or one of the following
 * negative error codes:
 *
 * NGHTTP2_ERR_NOMEM:
 *     Out of memory.
 */
int nghttp2_rcbuf_new(nghttp2_rcbuf **rcbuf_ptr, size_t size, nghttp2_mem *mem);

/*
 * Like nghttp2_rcbuf_new(), but initializes the buffer with |src| of
 * length |srclen|.  This function allocates additional byte at the
 * end and puts '\0' into it, so that the resulting buffer could be
 * used as NULL-terminated string.  Still (*rcbuf_ptr)->len equals to
 * |srclen|.
 *
 * This function returns 0 if it succeeds, or one of the following
 * negative error codes:
 *
 * NGHTTP2_ERR_NOMEM:
 *     Out of memory.
 */
int nghttp2_rcbuf_new2(nghttp2_rcbuf **rcbuf_ptr, const uint8_t *src,
                       size_t srclen, nghttp2_mem *mem);

/*
 * Frees |rcbuf| itself, regardless of its reference cout.
 */
void nghttp2_rcbuf_del(nghttp2_rcbuf *rcbuf);

#endif /* NGHTTP2_RCBUF_H */
ext/swoole/thirdparty/nghttp2/nghttp2ver.h000064400000003105151730541640014715 0ustar00/*
 * nghttp2 - HTTP/2 C Library
 *
 * Copyright (c) 2012, 2013 Tatsuhiro Tsujikawa
 *
 * Permission is hereby granted, free of charge, to any person obtaining
 * a copy of this software and associated documentation files (the
 * "Software"), to deal in the Software without restriction, including
 * without limitation the rights to use, copy, modify, merge, publish,
 * distribute, sublicense, and/or sell copies of the Software, and to
 * permit persons to whom the Software is furnished to do so, subject to
 * the following conditions:
 *
 * The above copyright notice and this permission notice shall be
 * included in all copies or substantial portions of the Software.
 *
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
 * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
 * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
 * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
 * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
 * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 */
#ifndef NGHTTP2VER_H
#define NGHTTP2VER_H

/**
 * @macro
 * Version number of the nghttp2 library release
 */
#define NGHTTP2_VERSION "1.64.0"

/**
 * @macro
 * Numerical representation of the version number of the nghttp2 library
 * release. This is a 24 bit number with 8 bits for major number, 8 bits
 * for minor and 8 bits for patch. Version 1.2.3 becomes 0x010203.
 */
#define NGHTTP2_VERSION_NUM 0x014000

#endif /* NGHTTP2VER_H */
ext/swoole/thirdparty/nghttp2/nghttp2_hd.h000064400000034241151730541640014660 0ustar00/*
 * nghttp2 - HTTP/2 C Library
 *
 * Copyright (c) 2013 Tatsuhiro Tsujikawa
 *
 * Permission is hereby granted, free of charge, to any person obtaining
 * a copy of this software and associated documentation files (the
 * "Software"), to deal in the Software without restriction, including
 * without limitation the rights to use, copy, modify, merge, publish,
 * distribute, sublicense, and/or sell copies of the Software, and to
 * permit persons to whom the Software is furnished to do so, subject to
 * the following conditions:
 *
 * The above copyright notice and this permission notice shall be
 * included in all copies or substantial portions of the Software.
 *
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
 * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
 * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
 * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
 * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
 * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 */
#ifndef NGHTTP2_HD_H
#define NGHTTP2_HD_H

#include "nghttp2.h"

#include "nghttp2_hd_huffman.h"
#include "nghttp2_buf.h"
#include "nghttp2_rcbuf.h"

#define NGHTTP2_HD_DEFAULT_MAX_BUFFER_SIZE NGHTTP2_DEFAULT_HEADER_TABLE_SIZE
#define NGHTTP2_HD_ENTRY_OVERHEAD 32

/* The maximum length of one name/value pair.  This is the sum of the
   length of name and value.  This is not specified by the spec. We
   just chose the arbitrary size */
#define NGHTTP2_HD_MAX_NV 65536

/* Default size of maximum table buffer size for encoder. Even if
   remote decoder notifies larger buffer size for its decoding,
   encoder only uses the memory up to this value. */
#define NGHTTP2_HD_DEFAULT_MAX_DEFLATE_BUFFER_SIZE (1 << 12)

/* Exported for unit test */
#define NGHTTP2_STATIC_TABLE_LENGTH 61

/* Generated by genlibtokenlookup.py */
typedef enum {
  NGHTTP2_TOKEN__AUTHORITY = 0,
  NGHTTP2_TOKEN__METHOD = 1,
  NGHTTP2_TOKEN__PATH = 3,
  NGHTTP2_TOKEN__SCHEME = 5,
  NGHTTP2_TOKEN__STATUS = 7,
  NGHTTP2_TOKEN_ACCEPT_CHARSET = 14,
  NGHTTP2_TOKEN_ACCEPT_ENCODING = 15,
  NGHTTP2_TOKEN_ACCEPT_LANGUAGE = 16,
  NGHTTP2_TOKEN_ACCEPT_RANGES = 17,
  NGHTTP2_TOKEN_ACCEPT = 18,
  NGHTTP2_TOKEN_ACCESS_CONTROL_ALLOW_ORIGIN = 19,
  NGHTTP2_TOKEN_AGE = 20,
  NGHTTP2_TOKEN_ALLOW = 21,
  NGHTTP2_TOKEN_AUTHORIZATION = 22,
  NGHTTP2_TOKEN_CACHE_CONTROL = 23,
  NGHTTP2_TOKEN_CONTENT_DISPOSITION = 24,
  NGHTTP2_TOKEN_CONTENT_ENCODING = 25,
  NGHTTP2_TOKEN_CONTENT_LANGUAGE = 26,
  NGHTTP2_TOKEN_CONTENT_LENGTH = 27,
  NGHTTP2_TOKEN_CONTENT_LOCATION = 28,
  NGHTTP2_TOKEN_CONTENT_RANGE = 29,
  NGHTTP2_TOKEN_CONTENT_TYPE = 30,
  NGHTTP2_TOKEN_COOKIE = 31,
  NGHTTP2_TOKEN_DATE = 32,
  NGHTTP2_TOKEN_ETAG = 33,
  NGHTTP2_TOKEN_EXPECT = 34,
  NGHTTP2_TOKEN_EXPIRES = 35,
  NGHTTP2_TOKEN_FROM = 36,
  NGHTTP2_TOKEN_HOST = 37,
  NGHTTP2_TOKEN_IF_MATCH = 38,
  NGHTTP2_TOKEN_IF_MODIFIED_SINCE = 39,
  NGHTTP2_TOKEN_IF_NONE_MATCH = 40,
  NGHTTP2_TOKEN_IF_RANGE = 41,
  NGHTTP2_TOKEN_IF_UNMODIFIED_SINCE = 42,
  NGHTTP2_TOKEN_LAST_MODIFIED = 43,
  NGHTTP2_TOKEN_LINK = 44,
  NGHTTP2_TOKEN_LOCATION = 45,
  NGHTTP2_TOKEN_MAX_FORWARDS = 46,
  NGHTTP2_TOKEN_PROXY_AUTHENTICATE = 47,
  NGHTTP2_TOKEN_PROXY_AUTHORIZATION = 48,
  NGHTTP2_TOKEN_RANGE = 49,
  NGHTTP2_TOKEN_REFERER = 50,
  NGHTTP2_TOKEN_REFRESH = 51,
  NGHTTP2_TOKEN_RETRY_AFTER = 52,
  NGHTTP2_TOKEN_SERVER = 53,
  NGHTTP2_TOKEN_SET_COOKIE = 54,
  NGHTTP2_TOKEN_STRICT_TRANSPORT_SECURITY = 55,
  NGHTTP2_TOKEN_TRANSFER_ENCODING = 56,
  NGHTTP2_TOKEN_USER_AGENT = 57,
  NGHTTP2_TOKEN_VARY = 58,
  NGHTTP2_TOKEN_VIA = 59,
  NGHTTP2_TOKEN_WWW_AUTHENTICATE = 60,
  NGHTTP2_TOKEN_TE,
  NGHTTP2_TOKEN_CONNECTION,
  NGHTTP2_TOKEN_KEEP_ALIVE,
  NGHTTP2_TOKEN_PROXY_CONNECTION,
  NGHTTP2_TOKEN_UPGRADE,
  NGHTTP2_TOKEN__PROTOCOL,
  NGHTTP2_TOKEN_PRIORITY,
} nghttp2_token;

struct nghttp2_hd_entry;
typedef struct nghttp2_hd_entry nghttp2_hd_entry;

typedef struct {
  /* The buffer containing header field name.  NULL-termination is
     guaranteed. */
  nghttp2_rcbuf *name;
  /* The buffer containing header field value.  NULL-termination is
     guaranteed. */
  nghttp2_rcbuf *value;
  /* nghttp2_token value for name.  It could be -1 if we have no token
     for that header field name. */
  int32_t token;
  /* Bitwise OR of one or more of nghttp2_nv_flag. */
  uint8_t flags;
} nghttp2_hd_nv;

struct nghttp2_hd_entry {
  /* The header field name/value pair */
  nghttp2_hd_nv nv;
  /* This is solely for nghttp2_hd_{deflate,inflate}_get_table_entry
     APIs to keep backward compatibility. */
  nghttp2_nv cnv;
  /* The next entry which shares same bucket in hash table. */
  nghttp2_hd_entry *next;
  /* The sequence number.  We will increment it by one whenever we
     store nghttp2_hd_entry to dynamic header table. */
  uint32_t seq;
  /* The hash value for header name (nv.name). */
  uint32_t hash;
};

/* The entry used for static header table. */
typedef struct {
  nghttp2_rcbuf name;
  nghttp2_rcbuf value;
  nghttp2_nv cnv;
  int32_t token;
  uint32_t hash;
} nghttp2_hd_static_entry;

typedef struct {
  nghttp2_hd_entry **buffer;
  size_t mask;
  size_t first;
  size_t len;
} nghttp2_hd_ringbuf;

typedef enum {
  NGHTTP2_HD_OPCODE_NONE,
  NGHTTP2_HD_OPCODE_INDEXED,
  NGHTTP2_HD_OPCODE_NEWNAME,
  NGHTTP2_HD_OPCODE_INDNAME
} nghttp2_hd_opcode;

typedef enum {
  NGHTTP2_HD_STATE_EXPECT_TABLE_SIZE,
  NGHTTP2_HD_STATE_INFLATE_START,
  NGHTTP2_HD_STATE_OPCODE,
  NGHTTP2_HD_STATE_READ_TABLE_SIZE,
  NGHTTP2_HD_STATE_READ_INDEX,
  NGHTTP2_HD_STATE_NEWNAME_CHECK_NAMELEN,
  NGHTTP2_HD_STATE_NEWNAME_READ_NAMELEN,
  NGHTTP2_HD_STATE_NEWNAME_READ_NAMEHUFF,
  NGHTTP2_HD_STATE_NEWNAME_READ_NAME,
  NGHTTP2_HD_STATE_CHECK_VALUELEN,
  NGHTTP2_HD_STATE_READ_VALUELEN,
  NGHTTP2_HD_STATE_READ_VALUEHUFF,
  NGHTTP2_HD_STATE_READ_VALUE
} nghttp2_hd_inflate_state;

typedef enum {
  NGHTTP2_HD_WITH_INDEXING,
  NGHTTP2_HD_WITHOUT_INDEXING,
  NGHTTP2_HD_NEVER_INDEXING
} nghttp2_hd_indexing_mode;

typedef struct {
  /* dynamic header table */
  nghttp2_hd_ringbuf hd_table;
  /* Memory allocator */
  nghttp2_mem *mem;
  /* Abstract buffer size of hd_table as described in the spec. This
     is the sum of length of name/value in hd_table +
     NGHTTP2_HD_ENTRY_OVERHEAD bytes overhead per each entry. */
  size_t hd_table_bufsize;
  /* The effective header table size. */
  size_t hd_table_bufsize_max;
  /* Next sequence number for nghttp2_hd_entry */
  uint32_t next_seq;
  /* If inflate/deflate error occurred, this value is set to 1 and
     further invocation of inflate/deflate will fail with
     NGHTTP2_ERR_HEADER_COMP. */
  uint8_t bad;
} nghttp2_hd_context;

#define HD_MAP_SIZE 128

typedef struct {
  nghttp2_hd_entry *table[HD_MAP_SIZE];
} nghttp2_hd_map;

struct nghttp2_hd_deflater {
  nghttp2_hd_context ctx;
  nghttp2_hd_map map;
  /* The upper limit of the header table size the deflater accepts. */
  size_t deflate_hd_table_bufsize_max;
  /* Minimum header table size notified in the next context update */
  size_t min_hd_table_bufsize_max;
  /* If nonzero, send header table size using encoding context update
     in the next deflate process */
  uint8_t notify_table_size_change;
};

struct nghttp2_hd_inflater {
  nghttp2_hd_context ctx;
  /* Stores current state of huffman decoding */
  nghttp2_hd_huff_decode_context huff_decode_ctx;
  /* header buffer */
  nghttp2_buf namebuf, valuebuf;
  nghttp2_rcbuf *namercbuf, *valuercbuf;
  /* Pointer to the name/value pair which are used in the current
     header emission. */
  nghttp2_rcbuf *nv_name_keep, *nv_value_keep;
  /* The number of bytes to read */
  size_t left;
  /* The index in indexed repr or indexed name */
  size_t index;
  /* The maximum header table size the inflater supports. This is the
     same value transmitted in SETTINGS_HEADER_TABLE_SIZE */
  size_t settings_hd_table_bufsize_max;
  /* Minimum header table size set by nghttp2_hd_inflate_change_table_size */
  size_t min_hd_table_bufsize_max;
  /* The number of next shift to decode integer */
  size_t shift;
  nghttp2_hd_opcode opcode;
  nghttp2_hd_inflate_state state;
  /* nonzero if string is huffman encoded */
  uint8_t huffman_encoded;
  /* nonzero if deflater requires that current entry is indexed */
  uint8_t index_required;
  /* nonzero if deflater requires that current entry must not be
     indexed */
  uint8_t no_index;
};

/*
 * Initializes the |ent| members.  The reference counts of nv->name
 * and nv->value are increased by one for each.
 */
void nghttp2_hd_entry_init(nghttp2_hd_entry *ent, nghttp2_hd_nv *nv);

/*
 * This function decreases the reference counts of nv->name and
 * nv->value.
 */
void nghttp2_hd_entry_free(nghttp2_hd_entry *ent);

/*
 * Initializes |deflater| for deflating name/values pairs.
 *
 * The encoder only uses up to
 * NGHTTP2_HD_DEFAULT_MAX_DEFLATE_BUFFER_SIZE bytes for header table
 * even if the larger value is specified later in
 * nghttp2_hd_change_table_size().
 *
 * This function returns 0 if it succeeds, or one of the following
 * negative error codes:
 *
 * NGHTTP2_ERR_NOMEM
 *     Out of memory.
 */
int nghttp2_hd_deflate_init(nghttp2_hd_deflater *deflater, nghttp2_mem *mem);

/*
 * Initializes |deflater| for deflating name/values pairs.
 *
 * The encoder only uses up to |max_deflate_dynamic_table_size| bytes
 * for header table even if the larger value is specified later in
 * nghttp2_hd_change_table_size().
 *
 * This function returns 0 if it succeeds, or one of the following
 * negative error codes:
 *
 * NGHTTP2_ERR_NOMEM
 *     Out of memory.
 */
int nghttp2_hd_deflate_init2(nghttp2_hd_deflater *deflater,
                             size_t max_deflate_dynamic_table_size,
                             nghttp2_mem *mem);

/*
 * Deallocates any resources allocated for |deflater|.
 */
void nghttp2_hd_deflate_free(nghttp2_hd_deflater *deflater);

/*
 * Deflates the |nva|, which has the |nvlen| name/value pairs, into
 * the |bufs|.
 *
 * This function expands |bufs| as necessary to store the result. If
 * buffers is full and the process still requires more space, this
 * function fails and returns NGHTTP2_ERR_HEADER_COMP.
 *
 * After this function returns, it is safe to delete the |nva|.
 *
 * This function returns 0 if it succeeds, or one of the following
 * negative error codes:
 *
 * NGHTTP2_ERR_NOMEM
 *     Out of memory.
 * NGHTTP2_ERR_HEADER_COMP
 *     Deflation process has failed.
 * NGHTTP2_ERR_BUFFER_ERROR
 *     Out of buffer space.
 */
int nghttp2_hd_deflate_hd_bufs(nghttp2_hd_deflater *deflater,
                               nghttp2_bufs *bufs, const nghttp2_nv *nva,
                               size_t nvlen);

/*
 * Initializes |inflater| for inflating name/values pairs.
 *
 * This function returns 0 if it succeeds, or one of the following
 * negative error codes:
 *
 * :enum:`NGHTTP2_ERR_NOMEM`
 *     Out of memory.
 */
int nghttp2_hd_inflate_init(nghttp2_hd_inflater *inflater, nghttp2_mem *mem);

/*
 * Deallocates any resources allocated for |inflater|.
 */
void nghttp2_hd_inflate_free(nghttp2_hd_inflater *inflater);

/*
 * Similar to nghttp2_hd_inflate_hd(), but this takes nghttp2_hd_nv
 * instead of nghttp2_nv as output parameter |nv_out|.  Other than
 * that return values and semantics are the same as
 * nghttp2_hd_inflate_hd().
 */
nghttp2_ssize nghttp2_hd_inflate_hd_nv(nghttp2_hd_inflater *inflater,
                                       nghttp2_hd_nv *nv_out,
                                       int *inflate_flags, const uint8_t *in,
                                       size_t inlen, int in_final);

/* For unittesting purpose */
int nghttp2_hd_emit_indname_block(nghttp2_bufs *bufs, size_t index,
                                  nghttp2_nv *nv, int indexing_mode);

/* For unittesting purpose */
int nghttp2_hd_emit_newname_block(nghttp2_bufs *bufs, nghttp2_nv *nv,
                                  int indexing_mode);

/* For unittesting purpose */
int nghttp2_hd_emit_table_size(nghttp2_bufs *bufs, size_t table_size);

/* For unittesting purpose */
nghttp2_hd_nv nghttp2_hd_table_get(nghttp2_hd_context *context, size_t index);

/* For unittesting purpose */
nghttp2_ssize nghttp2_hd_decode_length(uint32_t *res, size_t *shift_ptr,
                                       int *fin, uint32_t initial, size_t shift,
                                       uint8_t *in, uint8_t *last,
                                       size_t prefix);

/* Huffman encoding/decoding functions */

/*
 * Counts the required bytes to encode |src| with length |len|.
 *
 * This function returns the number of required bytes to encode given
 * data, including padding of prefix of terminal symbol code. This
 * function always succeeds.
 */
size_t nghttp2_hd_huff_encode_count(const uint8_t *src, size_t len);

/*
 * Encodes the given data |src| with length |srclen| to the |bufs|.
 * This function expands extra buffers in |bufs| if necessary.
 *
 * This function returns 0 if it succeeds, or one of the following
 * negative error codes:
 *
 * NGHTTP2_ERR_NOMEM
 *     Out of memory.
 * NGHTTP2_ERR_BUFFER_ERROR
 *     Out of buffer space.
 */
int nghttp2_hd_huff_encode(nghttp2_bufs *bufs, const uint8_t *src,
                           size_t srclen);

void nghttp2_hd_huff_decode_context_init(nghttp2_hd_huff_decode_context *ctx);

/*
 * Decodes the given data |src| with length |srclen|.  The |ctx| must
 * be initialized by nghttp2_hd_huff_decode_context_init(). The result
 * will be written to |buf|.  This function assumes that |buf| has the
 * enough room to store the decoded byte string.
 *
 * The caller must set the |fin| to nonzero if the given input is the
 * final block.
 *
 * This function returns the number of read bytes from the |in|.
 *
 * If this function fails, it returns one of the following negative
 * return codes:
 *
 * NGHTTP2_ERR_NOMEM
 *     Out of memory.
 * NGHTTP2_ERR_HEADER_COMP
 *     Decoding process has failed.
 */
nghttp2_ssize nghttp2_hd_huff_decode(nghttp2_hd_huff_decode_context *ctx,
                                     nghttp2_buf *buf, const uint8_t *src,
                                     size_t srclen, int fin);

/*
 * nghttp2_hd_huff_decode_failure_state returns nonzero if |ctx|
 * indicates that huffman decoding context is in failure state.
 */
int nghttp2_hd_huff_decode_failure_state(nghttp2_hd_huff_decode_context *ctx);

#endif /* NGHTTP2_HD_H */
ext/swoole/thirdparty/nghttp2/nghttp2_mem.h000064400000003330151730541650015037 0ustar00/*
 * nghttp2 - HTTP/2 C Library
 *
 * Copyright (c) 2014 Tatsuhiro Tsujikawa
 *
 * Permission is hereby granted, free of charge, to any person obtaining
 * a copy of this software and associated documentation files (the
 * "Software"), to deal in the Software without restriction, including
 * without limitation the rights to use, copy, modify, merge, publish,
 * distribute, sublicense, and/or sell copies of the Software, and to
 * permit persons to whom the Software is furnished to do so, subject to
 * the following conditions:
 *
 * The above copyright notice and this permission notice shall be
 * included in all copies or substantial portions of the Software.
 *
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
 * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
 * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
 * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
 * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
 * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 */
#ifndef NGHTTP2_MEM_H
#define NGHTTP2_MEM_H

#include "nghttp2.h"

/* The default, system standard memory allocator */
nghttp2_mem *nghttp2_mem_default(void);

/* Convenient wrapper functions to call allocator function in
   |mem|. */
void *nghttp2_mem_malloc(nghttp2_mem *mem, size_t size);
void nghttp2_mem_free(nghttp2_mem *mem, void *ptr);
void nghttp2_mem_free2(nghttp2_free free_func, void *ptr, void *mem_user_data);
void *nghttp2_mem_calloc(nghttp2_mem *mem, size_t nmemb, size_t size);
void *nghttp2_mem_realloc(nghttp2_mem *mem, void *ptr, size_t size);

#endif /* NGHTTP2_MEM_H */
ext/swoole/thirdparty/llhttp/llhttp.h000064400000073672151730541650014063 0ustar00
#ifndef INCLUDE_LLHTTP_H_
#define INCLUDE_LLHTTP_H_

#define LLHTTP_VERSION_MAJOR 9
#define LLHTTP_VERSION_MINOR 3
#define LLHTTP_VERSION_PATCH 0

#ifndef INCLUDE_LLHTTP_ITSELF_H_
#define INCLUDE_LLHTTP_ITSELF_H_
#ifdef __cplusplus
extern "C" {
#endif

#include <stdint.h>

typedef struct llhttp__internal_s llhttp__internal_t;
struct llhttp__internal_s {
  int32_t _index;
  void* _span_pos0;
  void* _span_cb0;
  int32_t error;
  const char* reason;
  const char* error_pos;
  void* data;
  void* _current;
  uint64_t content_length;
  uint8_t type;
  uint8_t method;
  uint8_t http_major;
  uint8_t http_minor;
  uint8_t header_state;
  uint16_t lenient_flags;
  uint8_t upgrade;
  uint8_t finish;
  uint16_t flags;
  uint16_t status_code;
  uint8_t initial_message_completed;
  void* settings;
};

int llhttp__internal_init(llhttp__internal_t* s);
int llhttp__internal_execute(llhttp__internal_t* s, const char* p, const char* endp);

#ifdef __cplusplus
}  /* extern "C" */
#endif
#endif  /* INCLUDE_LLHTTP_ITSELF_H_ */


#ifndef LLLLHTTP_C_HEADERS_
#define LLLLHTTP_C_HEADERS_
#ifdef __cplusplus
extern "C" {
#endif

enum llhttp_errno {
  HPE_OK = 0,
  HPE_INTERNAL = 1,
  HPE_STRICT = 2,
  HPE_CR_EXPECTED = 25,
  HPE_LF_EXPECTED = 3,
  HPE_UNEXPECTED_CONTENT_LENGTH = 4,
  HPE_UNEXPECTED_SPACE = 30,
  HPE_CLOSED_CONNECTION = 5,
  HPE_INVALID_METHOD = 6,
  HPE_INVALID_URL = 7,
  HPE_INVALID_CONSTANT = 8,
  HPE_INVALID_VERSION = 9,
  HPE_INVALID_HEADER_TOKEN = 10,
  HPE_INVALID_CONTENT_LENGTH = 11,
  HPE_INVALID_CHUNK_SIZE = 12,
  HPE_INVALID_STATUS = 13,
  HPE_INVALID_EOF_STATE = 14,
  HPE_INVALID_TRANSFER_ENCODING = 15,
  HPE_CB_MESSAGE_BEGIN = 16,
  HPE_CB_HEADERS_COMPLETE = 17,
  HPE_CB_MESSAGE_COMPLETE = 18,
  HPE_CB_CHUNK_HEADER = 19,
  HPE_CB_CHUNK_COMPLETE = 20,
  HPE_PAUSED = 21,
  HPE_PAUSED_UPGRADE = 22,
  HPE_PAUSED_H2_UPGRADE = 23,
  HPE_USER = 24,
  HPE_CB_URL_COMPLETE = 26,
  HPE_CB_STATUS_COMPLETE = 27,
  HPE_CB_METHOD_COMPLETE = 32,
  HPE_CB_VERSION_COMPLETE = 33,
  HPE_CB_HEADER_FIELD_COMPLETE = 28,
  HPE_CB_HEADER_VALUE_COMPLETE = 29,
  HPE_CB_CHUNK_EXTENSION_NAME_COMPLETE = 34,
  HPE_CB_CHUNK_EXTENSION_VALUE_COMPLETE = 35,
  HPE_CB_RESET = 31,
  HPE_CB_PROTOCOL_COMPLETE = 38
};
typedef enum llhttp_errno llhttp_errno_t;

enum llhttp_flags {
  F_CONNECTION_KEEP_ALIVE = 0x1,
  F_CONNECTION_CLOSE = 0x2,
  F_CONNECTION_UPGRADE = 0x4,
  F_CHUNKED = 0x8,
  F_UPGRADE = 0x10,
  F_CONTENT_LENGTH = 0x20,
  F_SKIPBODY = 0x40,
  F_TRAILING = 0x80,
  F_TRANSFER_ENCODING = 0x200
};
typedef enum llhttp_flags llhttp_flags_t;

enum llhttp_lenient_flags {
  LENIENT_HEADERS = 0x1,
  LENIENT_CHUNKED_LENGTH = 0x2,
  LENIENT_KEEP_ALIVE = 0x4,
  LENIENT_TRANSFER_ENCODING = 0x8,
  LENIENT_VERSION = 0x10,
  LENIENT_DATA_AFTER_CLOSE = 0x20,
  LENIENT_OPTIONAL_LF_AFTER_CR = 0x40,
  LENIENT_OPTIONAL_CRLF_AFTER_CHUNK = 0x80,
  LENIENT_OPTIONAL_CR_BEFORE_LF = 0x100,
  LENIENT_SPACES_AFTER_CHUNK_SIZE = 0x200
};
typedef enum llhttp_lenient_flags llhttp_lenient_flags_t;

enum llhttp_type {
  HTTP_BOTH = 0,
  HTTP_REQUEST = 1,
  HTTP_RESPONSE = 2
};
typedef enum llhttp_type llhttp_type_t;

enum llhttp_finish {
  HTTP_FINISH_SAFE = 0,
  HTTP_FINISH_SAFE_WITH_CB = 1,
  HTTP_FINISH_UNSAFE = 2
};
typedef enum llhttp_finish llhttp_finish_t;

enum llhttp_method {
  HTTP_DELETE = 0,
  HTTP_GET = 1,
  HTTP_HEAD = 2,
  HTTP_POST = 3,
  HTTP_PUT = 4,
  HTTP_CONNECT = 5,
  HTTP_OPTIONS = 6,
  HTTP_TRACE = 7,
  HTTP_COPY = 8,
  HTTP_LOCK = 9,
  HTTP_MKCOL = 10,
  HTTP_MOVE = 11,
  HTTP_PROPFIND = 12,
  HTTP_PROPPATCH = 13,
  HTTP_SEARCH = 14,
  HTTP_UNLOCK = 15,
  HTTP_BIND = 16,
  HTTP_REBIND = 17,
  HTTP_UNBIND = 18,
  HTTP_ACL = 19,
  HTTP_REPORT = 20,
  HTTP_MKACTIVITY = 21,
  HTTP_CHECKOUT = 22,
  HTTP_MERGE = 23,
  HTTP_MSEARCH = 24,
  HTTP_NOTIFY = 25,
  HTTP_SUBSCRIBE = 26,
  HTTP_UNSUBSCRIBE = 27,
  HTTP_PATCH = 28,
  HTTP_PURGE = 29,
  HTTP_MKCALENDAR = 30,
  HTTP_LINK = 31,
  HTTP_UNLINK = 32,
  HTTP_SOURCE = 33,
  HTTP_PRI = 34,
  HTTP_DESCRIBE = 35,
  HTTP_ANNOUNCE = 36,
  HTTP_SETUP = 37,
  HTTP_PLAY = 38,
  HTTP_PAUSE = 39,
  HTTP_TEARDOWN = 40,
  HTTP_GET_PARAMETER = 41,
  HTTP_SET_PARAMETER = 42,
  HTTP_REDIRECT = 43,
  HTTP_RECORD = 44,
  HTTP_FLUSH = 45,
  HTTP_QUERY = 46
};
typedef enum llhttp_method llhttp_method_t;

enum llhttp_status {
  HTTP_STATUS_CONTINUE = 100,
  HTTP_STATUS_SWITCHING_PROTOCOLS = 101,
  HTTP_STATUS_PROCESSING = 102,
  HTTP_STATUS_EARLY_HINTS = 103,
  HTTP_STATUS_RESPONSE_IS_STALE = 110,
  HTTP_STATUS_REVALIDATION_FAILED = 111,
  HTTP_STATUS_DISCONNECTED_OPERATION = 112,
  HTTP_STATUS_HEURISTIC_EXPIRATION = 113,
  HTTP_STATUS_MISCELLANEOUS_WARNING = 199,
  HTTP_STATUS_OK = 200,
  HTTP_STATUS_CREATED = 201,
  HTTP_STATUS_ACCEPTED = 202,
  HTTP_STATUS_NON_AUTHORITATIVE_INFORMATION = 203,
  HTTP_STATUS_NO_CONTENT = 204,
  HTTP_STATUS_RESET_CONTENT = 205,
  HTTP_STATUS_PARTIAL_CONTENT = 206,
  HTTP_STATUS_MULTI_STATUS = 207,
  HTTP_STATUS_ALREADY_REPORTED = 208,
  HTTP_STATUS_TRANSFORMATION_APPLIED = 214,
  HTTP_STATUS_IM_USED = 226,
  HTTP_STATUS_MISCELLANEOUS_PERSISTENT_WARNING = 299,
  HTTP_STATUS_MULTIPLE_CHOICES = 300,
  HTTP_STATUS_MOVED_PERMANENTLY = 301,
  HTTP_STATUS_FOUND = 302,
  HTTP_STATUS_SEE_OTHER = 303,
  HTTP_STATUS_NOT_MODIFIED = 304,
  HTTP_STATUS_USE_PROXY = 305,
  HTTP_STATUS_SWITCH_PROXY = 306,
  HTTP_STATUS_TEMPORARY_REDIRECT = 307,
  HTTP_STATUS_PERMANENT_REDIRECT = 308,
  HTTP_STATUS_BAD_REQUEST = 400,
  HTTP_STATUS_UNAUTHORIZED = 401,
  HTTP_STATUS_PAYMENT_REQUIRED = 402,
  HTTP_STATUS_FORBIDDEN = 403,
  HTTP_STATUS_NOT_FOUND = 404,
  HTTP_STATUS_METHOD_NOT_ALLOWED = 405,
  HTTP_STATUS_NOT_ACCEPTABLE = 406,
  HTTP_STATUS_PROXY_AUTHENTICATION_REQUIRED = 407,
  HTTP_STATUS_REQUEST_TIMEOUT = 408,
  HTTP_STATUS_CONFLICT = 409,
  HTTP_STATUS_GONE = 410,
  HTTP_STATUS_LENGTH_REQUIRED = 411,
  HTTP_STATUS_PRECONDITION_FAILED = 412,
  HTTP_STATUS_PAYLOAD_TOO_LARGE = 413,
  HTTP_STATUS_URI_TOO_LONG = 414,
  HTTP_STATUS_UNSUPPORTED_MEDIA_TYPE = 415,
  HTTP_STATUS_RANGE_NOT_SATISFIABLE = 416,
  HTTP_STATUS_EXPECTATION_FAILED = 417,
  HTTP_STATUS_IM_A_TEAPOT = 418,
  HTTP_STATUS_PAGE_EXPIRED = 419,
  HTTP_STATUS_ENHANCE_YOUR_CALM = 420,
  HTTP_STATUS_MISDIRECTED_REQUEST = 421,
  HTTP_STATUS_UNPROCESSABLE_ENTITY = 422,
  HTTP_STATUS_LOCKED = 423,
  HTTP_STATUS_FAILED_DEPENDENCY = 424,
  HTTP_STATUS_TOO_EARLY = 425,
  HTTP_STATUS_UPGRADE_REQUIRED = 426,
  HTTP_STATUS_PRECONDITION_REQUIRED = 428,
  HTTP_STATUS_TOO_MANY_REQUESTS = 429,
  HTTP_STATUS_REQUEST_HEADER_FIELDS_TOO_LARGE_UNOFFICIAL = 430,
  HTTP_STATUS_REQUEST_HEADER_FIELDS_TOO_LARGE = 431,
  HTTP_STATUS_LOGIN_TIMEOUT = 440,
  HTTP_STATUS_NO_RESPONSE = 444,
  HTTP_STATUS_RETRY_WITH = 449,
  HTTP_STATUS_BLOCKED_BY_PARENTAL_CONTROL = 450,
  HTTP_STATUS_UNAVAILABLE_FOR_LEGAL_REASONS = 451,
  HTTP_STATUS_CLIENT_CLOSED_LOAD_BALANCED_REQUEST = 460,
  HTTP_STATUS_INVALID_X_FORWARDED_FOR = 463,
  HTTP_STATUS_REQUEST_HEADER_TOO_LARGE = 494,
  HTTP_STATUS_SSL_CERTIFICATE_ERROR = 495,
  HTTP_STATUS_SSL_CERTIFICATE_REQUIRED = 496,
  HTTP_STATUS_HTTP_REQUEST_SENT_TO_HTTPS_PORT = 497,
  HTTP_STATUS_INVALID_TOKEN = 498,
  HTTP_STATUS_CLIENT_CLOSED_REQUEST = 499,
  HTTP_STATUS_INTERNAL_SERVER_ERROR = 500,
  HTTP_STATUS_NOT_IMPLEMENTED = 501,
  HTTP_STATUS_BAD_GATEWAY = 502,
  HTTP_STATUS_SERVICE_UNAVAILABLE = 503,
  HTTP_STATUS_GATEWAY_TIMEOUT = 504,
  HTTP_STATUS_HTTP_VERSION_NOT_SUPPORTED = 505,
  HTTP_STATUS_VARIANT_ALSO_NEGOTIATES = 506,
  HTTP_STATUS_INSUFFICIENT_STORAGE = 507,
  HTTP_STATUS_LOOP_DETECTED = 508,
  HTTP_STATUS_BANDWIDTH_LIMIT_EXCEEDED = 509,
  HTTP_STATUS_NOT_EXTENDED = 510,
  HTTP_STATUS_NETWORK_AUTHENTICATION_REQUIRED = 511,
  HTTP_STATUS_WEB_SERVER_UNKNOWN_ERROR = 520,
  HTTP_STATUS_WEB_SERVER_IS_DOWN = 521,
  HTTP_STATUS_CONNECTION_TIMEOUT = 522,
  HTTP_STATUS_ORIGIN_IS_UNREACHABLE = 523,
  HTTP_STATUS_TIMEOUT_OCCURED = 524,
  HTTP_STATUS_SSL_HANDSHAKE_FAILED = 525,
  HTTP_STATUS_INVALID_SSL_CERTIFICATE = 526,
  HTTP_STATUS_RAILGUN_ERROR = 527,
  HTTP_STATUS_SITE_IS_OVERLOADED = 529,
  HTTP_STATUS_SITE_IS_FROZEN = 530,
  HTTP_STATUS_IDENTITY_PROVIDER_AUTHENTICATION_ERROR = 561,
  HTTP_STATUS_NETWORK_READ_TIMEOUT = 598,
  HTTP_STATUS_NETWORK_CONNECT_TIMEOUT = 599
};
typedef enum llhttp_status llhttp_status_t;

#define HTTP_ERRNO_MAP(XX) \
  XX(0, OK, OK) \
  XX(1, INTERNAL, INTERNAL) \
  XX(2, STRICT, STRICT) \
  XX(25, CR_EXPECTED, CR_EXPECTED) \
  XX(3, LF_EXPECTED, LF_EXPECTED) \
  XX(4, UNEXPECTED_CONTENT_LENGTH, UNEXPECTED_CONTENT_LENGTH) \
  XX(30, UNEXPECTED_SPACE, UNEXPECTED_SPACE) \
  XX(5, CLOSED_CONNECTION, CLOSED_CONNECTION) \
  XX(6, INVALID_METHOD, INVALID_METHOD) \
  XX(7, INVALID_URL, INVALID_URL) \
  XX(8, INVALID_CONSTANT, INVALID_CONSTANT) \
  XX(9, INVALID_VERSION, INVALID_VERSION) \
  XX(10, INVALID_HEADER_TOKEN, INVALID_HEADER_TOKEN) \
  XX(11, INVALID_CONTENT_LENGTH, INVALID_CONTENT_LENGTH) \
  XX(12, INVALID_CHUNK_SIZE, INVALID_CHUNK_SIZE) \
  XX(13, INVALID_STATUS, INVALID_STATUS) \
  XX(14, INVALID_EOF_STATE, INVALID_EOF_STATE) \
  XX(15, INVALID_TRANSFER_ENCODING, INVALID_TRANSFER_ENCODING) \
  XX(16, CB_MESSAGE_BEGIN, CB_MESSAGE_BEGIN) \
  XX(17, CB_HEADERS_COMPLETE, CB_HEADERS_COMPLETE) \
  XX(18, CB_MESSAGE_COMPLETE, CB_MESSAGE_COMPLETE) \
  XX(19, CB_CHUNK_HEADER, CB_CHUNK_HEADER) \
  XX(20, CB_CHUNK_COMPLETE, CB_CHUNK_COMPLETE) \
  XX(21, PAUSED, PAUSED) \
  XX(22, PAUSED_UPGRADE, PAUSED_UPGRADE) \
  XX(23, PAUSED_H2_UPGRADE, PAUSED_H2_UPGRADE) \
  XX(24, USER, USER) \
  XX(26, CB_URL_COMPLETE, CB_URL_COMPLETE) \
  XX(27, CB_STATUS_COMPLETE, CB_STATUS_COMPLETE) \
  XX(32, CB_METHOD_COMPLETE, CB_METHOD_COMPLETE) \
  XX(33, CB_VERSION_COMPLETE, CB_VERSION_COMPLETE) \
  XX(28, CB_HEADER_FIELD_COMPLETE, CB_HEADER_FIELD_COMPLETE) \
  XX(29, CB_HEADER_VALUE_COMPLETE, CB_HEADER_VALUE_COMPLETE) \
  XX(34, CB_CHUNK_EXTENSION_NAME_COMPLETE, CB_CHUNK_EXTENSION_NAME_COMPLETE) \
  XX(35, CB_CHUNK_EXTENSION_VALUE_COMPLETE, CB_CHUNK_EXTENSION_VALUE_COMPLETE) \
  XX(31, CB_RESET, CB_RESET) \
  XX(38, CB_PROTOCOL_COMPLETE, CB_PROTOCOL_COMPLETE) \


#define HTTP_METHOD_MAP(XX) \
  XX(0, DELETE, DELETE) \
  XX(1, GET, GET) \
  XX(2, HEAD, HEAD) \
  XX(3, POST, POST) \
  XX(4, PUT, PUT) \
  XX(5, CONNECT, CONNECT) \
  XX(6, OPTIONS, OPTIONS) \
  XX(7, TRACE, TRACE) \
  XX(8, COPY, COPY) \
  XX(9, LOCK, LOCK) \
  XX(10, MKCOL, MKCOL) \
  XX(11, MOVE, MOVE) \
  XX(12, PROPFIND, PROPFIND) \
  XX(13, PROPPATCH, PROPPATCH) \
  XX(14, SEARCH, SEARCH) \
  XX(15, UNLOCK, UNLOCK) \
  XX(16, BIND, BIND) \
  XX(17, REBIND, REBIND) \
  XX(18, UNBIND, UNBIND) \
  XX(19, ACL, ACL) \
  XX(20, REPORT, REPORT) \
  XX(21, MKACTIVITY, MKACTIVITY) \
  XX(22, CHECKOUT, CHECKOUT) \
  XX(23, MERGE, MERGE) \
  XX(24, MSEARCH, M-SEARCH) \
  XX(25, NOTIFY, NOTIFY) \
  XX(26, SUBSCRIBE, SUBSCRIBE) \
  XX(27, UNSUBSCRIBE, UNSUBSCRIBE) \
  XX(28, PATCH, PATCH) \
  XX(29, PURGE, PURGE) \
  XX(30, MKCALENDAR, MKCALENDAR) \
  XX(31, LINK, LINK) \
  XX(32, UNLINK, UNLINK) \
  XX(33, SOURCE, SOURCE) \
  XX(46, QUERY, QUERY) \


#define RTSP_METHOD_MAP(XX) \
  XX(1, GET, GET) \
  XX(3, POST, POST) \
  XX(6, OPTIONS, OPTIONS) \
  XX(35, DESCRIBE, DESCRIBE) \
  XX(36, ANNOUNCE, ANNOUNCE) \
  XX(37, SETUP, SETUP) \
  XX(38, PLAY, PLAY) \
  XX(39, PAUSE, PAUSE) \
  XX(40, TEARDOWN, TEARDOWN) \
  XX(41, GET_PARAMETER, GET_PARAMETER) \
  XX(42, SET_PARAMETER, SET_PARAMETER) \
  XX(43, REDIRECT, REDIRECT) \
  XX(44, RECORD, RECORD) \
  XX(45, FLUSH, FLUSH) \


#define HTTP_ALL_METHOD_MAP(XX) \
  XX(0, DELETE, DELETE) \
  XX(1, GET, GET) \
  XX(2, HEAD, HEAD) \
  XX(3, POST, POST) \
  XX(4, PUT, PUT) \
  XX(5, CONNECT, CONNECT) \
  XX(6, OPTIONS, OPTIONS) \
  XX(7, TRACE, TRACE) \
  XX(8, COPY, COPY) \
  XX(9, LOCK, LOCK) \
  XX(10, MKCOL, MKCOL) \
  XX(11, MOVE, MOVE) \
  XX(12, PROPFIND, PROPFIND) \
  XX(13, PROPPATCH, PROPPATCH) \
  XX(14, SEARCH, SEARCH) \
  XX(15, UNLOCK, UNLOCK) \
  XX(16, BIND, BIND) \
  XX(17, REBIND, REBIND) \
  XX(18, UNBIND, UNBIND) \
  XX(19, ACL, ACL) \
  XX(20, REPORT, REPORT) \
  XX(21, MKACTIVITY, MKACTIVITY) \
  XX(22, CHECKOUT, CHECKOUT) \
  XX(23, MERGE, MERGE) \
  XX(24, MSEARCH, M-SEARCH) \
  XX(25, NOTIFY, NOTIFY) \
  XX(26, SUBSCRIBE, SUBSCRIBE) \
  XX(27, UNSUBSCRIBE, UNSUBSCRIBE) \
  XX(28, PATCH, PATCH) \
  XX(29, PURGE, PURGE) \
  XX(30, MKCALENDAR, MKCALENDAR) \
  XX(31, LINK, LINK) \
  XX(32, UNLINK, UNLINK) \
  XX(33, SOURCE, SOURCE) \
  XX(34, PRI, PRI) \
  XX(35, DESCRIBE, DESCRIBE) \
  XX(36, ANNOUNCE, ANNOUNCE) \
  XX(37, SETUP, SETUP) \
  XX(38, PLAY, PLAY) \
  XX(39, PAUSE, PAUSE) \
  XX(40, TEARDOWN, TEARDOWN) \
  XX(41, GET_PARAMETER, GET_PARAMETER) \
  XX(42, SET_PARAMETER, SET_PARAMETER) \
  XX(43, REDIRECT, REDIRECT) \
  XX(44, RECORD, RECORD) \
  XX(45, FLUSH, FLUSH) \
  XX(46, QUERY, QUERY) \


#define HTTP_STATUS_MAP(XX) \
  XX(100, CONTINUE, CONTINUE) \
  XX(101, SWITCHING_PROTOCOLS, SWITCHING_PROTOCOLS) \
  XX(102, PROCESSING, PROCESSING) \
  XX(103, EARLY_HINTS, EARLY_HINTS) \
  XX(110, RESPONSE_IS_STALE, RESPONSE_IS_STALE) \
  XX(111, REVALIDATION_FAILED, REVALIDATION_FAILED) \
  XX(112, DISCONNECTED_OPERATION, DISCONNECTED_OPERATION) \
  XX(113, HEURISTIC_EXPIRATION, HEURISTIC_EXPIRATION) \
  XX(199, MISCELLANEOUS_WARNING, MISCELLANEOUS_WARNING) \
  XX(200, OK, OK) \
  XX(201, CREATED, CREATED) \
  XX(202, ACCEPTED, ACCEPTED) \
  XX(203, NON_AUTHORITATIVE_INFORMATION, NON_AUTHORITATIVE_INFORMATION) \
  XX(204, NO_CONTENT, NO_CONTENT) \
  XX(205, RESET_CONTENT, RESET_CONTENT) \
  XX(206, PARTIAL_CONTENT, PARTIAL_CONTENT) \
  XX(207, MULTI_STATUS, MULTI_STATUS) \
  XX(208, ALREADY_REPORTED, ALREADY_REPORTED) \
  XX(214, TRANSFORMATION_APPLIED, TRANSFORMATION_APPLIED) \
  XX(226, IM_USED, IM_USED) \
  XX(299, MISCELLANEOUS_PERSISTENT_WARNING, MISCELLANEOUS_PERSISTENT_WARNING) \
  XX(300, MULTIPLE_CHOICES, MULTIPLE_CHOICES) \
  XX(301, MOVED_PERMANENTLY, MOVED_PERMANENTLY) \
  XX(302, FOUND, FOUND) \
  XX(303, SEE_OTHER, SEE_OTHER) \
  XX(304, NOT_MODIFIED, NOT_MODIFIED) \
  XX(305, USE_PROXY, USE_PROXY) \
  XX(306, SWITCH_PROXY, SWITCH_PROXY) \
  XX(307, TEMPORARY_REDIRECT, TEMPORARY_REDIRECT) \
  XX(308, PERMANENT_REDIRECT, PERMANENT_REDIRECT) \
  XX(400, BAD_REQUEST, BAD_REQUEST) \
  XX(401, UNAUTHORIZED, UNAUTHORIZED) \
  XX(402, PAYMENT_REQUIRED, PAYMENT_REQUIRED) \
  XX(403, FORBIDDEN, FORBIDDEN) \
  XX(404, NOT_FOUND, NOT_FOUND) \
  XX(405, METHOD_NOT_ALLOWED, METHOD_NOT_ALLOWED) \
  XX(406, NOT_ACCEPTABLE, NOT_ACCEPTABLE) \
  XX(407, PROXY_AUTHENTICATION_REQUIRED, PROXY_AUTHENTICATION_REQUIRED) \
  XX(408, REQUEST_TIMEOUT, REQUEST_TIMEOUT) \
  XX(409, CONFLICT, CONFLICT) \
  XX(410, GONE, GONE) \
  XX(411, LENGTH_REQUIRED, LENGTH_REQUIRED) \
  XX(412, PRECONDITION_FAILED, PRECONDITION_FAILED) \
  XX(413, PAYLOAD_TOO_LARGE, PAYLOAD_TOO_LARGE) \
  XX(414, URI_TOO_LONG, URI_TOO_LONG) \
  XX(415, UNSUPPORTED_MEDIA_TYPE, UNSUPPORTED_MEDIA_TYPE) \
  XX(416, RANGE_NOT_SATISFIABLE, RANGE_NOT_SATISFIABLE) \
  XX(417, EXPECTATION_FAILED, EXPECTATION_FAILED) \
  XX(418, IM_A_TEAPOT, IM_A_TEAPOT) \
  XX(419, PAGE_EXPIRED, PAGE_EXPIRED) \
  XX(420, ENHANCE_YOUR_CALM, ENHANCE_YOUR_CALM) \
  XX(421, MISDIRECTED_REQUEST, MISDIRECTED_REQUEST) \
  XX(422, UNPROCESSABLE_ENTITY, UNPROCESSABLE_ENTITY) \
  XX(423, LOCKED, LOCKED) \
  XX(424, FAILED_DEPENDENCY, FAILED_DEPENDENCY) \
  XX(425, TOO_EARLY, TOO_EARLY) \
  XX(426, UPGRADE_REQUIRED, UPGRADE_REQUIRED) \
  XX(428, PRECONDITION_REQUIRED, PRECONDITION_REQUIRED) \
  XX(429, TOO_MANY_REQUESTS, TOO_MANY_REQUESTS) \
  XX(430, REQUEST_HEADER_FIELDS_TOO_LARGE_UNOFFICIAL, REQUEST_HEADER_FIELDS_TOO_LARGE_UNOFFICIAL) \
  XX(431, REQUEST_HEADER_FIELDS_TOO_LARGE, REQUEST_HEADER_FIELDS_TOO_LARGE) \
  XX(440, LOGIN_TIMEOUT, LOGIN_TIMEOUT) \
  XX(444, NO_RESPONSE, NO_RESPONSE) \
  XX(449, RETRY_WITH, RETRY_WITH) \
  XX(450, BLOCKED_BY_PARENTAL_CONTROL, BLOCKED_BY_PARENTAL_CONTROL) \
  XX(451, UNAVAILABLE_FOR_LEGAL_REASONS, UNAVAILABLE_FOR_LEGAL_REASONS) \
  XX(460, CLIENT_CLOSED_LOAD_BALANCED_REQUEST, CLIENT_CLOSED_LOAD_BALANCED_REQUEST) \
  XX(463, INVALID_X_FORWARDED_FOR, INVALID_X_FORWARDED_FOR) \
  XX(494, REQUEST_HEADER_TOO_LARGE, REQUEST_HEADER_TOO_LARGE) \
  XX(495, SSL_CERTIFICATE_ERROR, SSL_CERTIFICATE_ERROR) \
  XX(496, SSL_CERTIFICATE_REQUIRED, SSL_CERTIFICATE_REQUIRED) \
  XX(497, HTTP_REQUEST_SENT_TO_HTTPS_PORT, HTTP_REQUEST_SENT_TO_HTTPS_PORT) \
  XX(498, INVALID_TOKEN, INVALID_TOKEN) \
  XX(499, CLIENT_CLOSED_REQUEST, CLIENT_CLOSED_REQUEST) \
  XX(500, INTERNAL_SERVER_ERROR, INTERNAL_SERVER_ERROR) \
  XX(501, NOT_IMPLEMENTED, NOT_IMPLEMENTED) \
  XX(502, BAD_GATEWAY, BAD_GATEWAY) \
  XX(503, SERVICE_UNAVAILABLE, SERVICE_UNAVAILABLE) \
  XX(504, GATEWAY_TIMEOUT, GATEWAY_TIMEOUT) \
  XX(505, HTTP_VERSION_NOT_SUPPORTED, HTTP_VERSION_NOT_SUPPORTED) \
  XX(506, VARIANT_ALSO_NEGOTIATES, VARIANT_ALSO_NEGOTIATES) \
  XX(507, INSUFFICIENT_STORAGE, INSUFFICIENT_STORAGE) \
  XX(508, LOOP_DETECTED, LOOP_DETECTED) \
  XX(509, BANDWIDTH_LIMIT_EXCEEDED, BANDWIDTH_LIMIT_EXCEEDED) \
  XX(510, NOT_EXTENDED, NOT_EXTENDED) \
  XX(511, NETWORK_AUTHENTICATION_REQUIRED, NETWORK_AUTHENTICATION_REQUIRED) \
  XX(520, WEB_SERVER_UNKNOWN_ERROR, WEB_SERVER_UNKNOWN_ERROR) \
  XX(521, WEB_SERVER_IS_DOWN, WEB_SERVER_IS_DOWN) \
  XX(522, CONNECTION_TIMEOUT, CONNECTION_TIMEOUT) \
  XX(523, ORIGIN_IS_UNREACHABLE, ORIGIN_IS_UNREACHABLE) \
  XX(524, TIMEOUT_OCCURED, TIMEOUT_OCCURED) \
  XX(525, SSL_HANDSHAKE_FAILED, SSL_HANDSHAKE_FAILED) \
  XX(526, INVALID_SSL_CERTIFICATE, INVALID_SSL_CERTIFICATE) \
  XX(527, RAILGUN_ERROR, RAILGUN_ERROR) \
  XX(529, SITE_IS_OVERLOADED, SITE_IS_OVERLOADED) \
  XX(530, SITE_IS_FROZEN, SITE_IS_FROZEN) \
  XX(561, IDENTITY_PROVIDER_AUTHENTICATION_ERROR, IDENTITY_PROVIDER_AUTHENTICATION_ERROR) \
  XX(598, NETWORK_READ_TIMEOUT, NETWORK_READ_TIMEOUT) \
  XX(599, NETWORK_CONNECT_TIMEOUT, NETWORK_CONNECT_TIMEOUT) \


#ifdef __cplusplus
}  /* extern "C" */
#endif
#endif  /* LLLLHTTP_C_HEADERS_ */


#ifndef INCLUDE_LLHTTP_API_H_
#define INCLUDE_LLHTTP_API_H_
#ifdef __cplusplus
extern "C" {
#endif
#include <stddef.h>

#if defined(__wasm__)
#define LLHTTP_EXPORT __attribute__((visibility("default")))
#elif defined(_WIN32)
#define LLHTTP_EXPORT __declspec(dllexport)
#else
#define LLHTTP_EXPORT
#endif

typedef llhttp__internal_t llhttp_t;
typedef struct llhttp_settings_s llhttp_settings_t;

typedef int (*llhttp_data_cb)(llhttp_t*, const char *at, size_t length);
typedef int (*llhttp_cb)(llhttp_t*);

struct llhttp_settings_s {
  /* Possible return values 0, -1, `HPE_PAUSED` */
  llhttp_cb      on_message_begin;

  /* Possible return values 0, -1, HPE_USER */
  llhttp_data_cb on_protocol;
  llhttp_data_cb on_url;
  llhttp_data_cb on_status;
  llhttp_data_cb on_method;
  llhttp_data_cb on_version;
  llhttp_data_cb on_header_field;
  llhttp_data_cb on_header_value;
  llhttp_data_cb      on_chunk_extension_name;
  llhttp_data_cb      on_chunk_extension_value;

  /* Possible return values:
   * 0  - Proceed normally
   * 1  - Assume that request/response has no body, and proceed to parsing the
   *      next message
   * 2  - Assume absence of body (as above) and make `llhttp_execute()` return
   *      `HPE_PAUSED_UPGRADE`
   * -1 - Error
   * `HPE_PAUSED`
   */
  llhttp_cb      on_headers_complete;

  /* Possible return values 0, -1, HPE_USER */
  llhttp_data_cb on_body;

  /* Possible return values 0, -1, `HPE_PAUSED` */
  llhttp_cb      on_message_complete;
  llhttp_cb      on_protocol_complete;
  llhttp_cb      on_url_complete;
  llhttp_cb      on_status_complete;
  llhttp_cb      on_method_complete;
  llhttp_cb      on_version_complete;
  llhttp_cb      on_header_field_complete;
  llhttp_cb      on_header_value_complete;
  llhttp_cb      on_chunk_extension_name_complete;
  llhttp_cb      on_chunk_extension_value_complete;

  /* When on_chunk_header is called, the current chunk length is stored
   * in parser->content_length.
   * Possible return values 0, -1, `HPE_PAUSED`
   */
  llhttp_cb      on_chunk_header;
  llhttp_cb      on_chunk_complete;
  llhttp_cb      on_reset;
};

/* Initialize the parser with specific type and user settings.
 *
 * NOTE: lifetime of `settings` has to be at least the same as the lifetime of
 * the `parser` here. In practice, `settings` has to be either a static
 * variable or be allocated with `malloc`, `new`, etc.
 */
LLHTTP_EXPORT
void llhttp_init(llhttp_t* parser, llhttp_type_t type,
                 const llhttp_settings_t* settings);

LLHTTP_EXPORT
llhttp_t* llhttp_alloc(llhttp_type_t type);

LLHTTP_EXPORT
void llhttp_free(llhttp_t* parser);

LLHTTP_EXPORT
uint8_t llhttp_get_type(llhttp_t* parser);

LLHTTP_EXPORT
uint8_t llhttp_get_http_major(llhttp_t* parser);

LLHTTP_EXPORT
uint8_t llhttp_get_http_minor(llhttp_t* parser);

LLHTTP_EXPORT
uint8_t llhttp_get_method(llhttp_t* parser);

LLHTTP_EXPORT
int llhttp_get_status_code(llhttp_t* parser);

LLHTTP_EXPORT
uint8_t llhttp_get_upgrade(llhttp_t* parser);

/* Reset an already initialized parser back to the start state, preserving the
 * existing parser type, callback settings, user data, and lenient flags.
 */
LLHTTP_EXPORT
void llhttp_reset(llhttp_t* parser);

/* Initialize the settings object */
LLHTTP_EXPORT
void llhttp_settings_init(llhttp_settings_t* settings);

/* Parse full or partial request/response, invoking user callbacks along the
 * way.
 *
 * If any of `llhttp_data_cb` returns errno not equal to `HPE_OK` - the parsing
 * interrupts, and such errno is returned from `llhttp_execute()`. If
 * `HPE_PAUSED` was used as a errno, the execution can be resumed with
 * `llhttp_resume()` call.
 *
 * In a special case of CONNECT/Upgrade request/response `HPE_PAUSED_UPGRADE`
 * is returned after fully parsing the request/response. If the user wishes to
 * continue parsing, they need to invoke `llhttp_resume_after_upgrade()`.
 *
 * NOTE: if this function ever returns a non-pause type error, it will continue
 * to return the same error upon each successive call up until `llhttp_init()`
 * is called.
 */
LLHTTP_EXPORT
llhttp_errno_t llhttp_execute(llhttp_t* parser, const char* data, size_t len);

/* This method should be called when the other side has no further bytes to
 * send (e.g. shutdown of readable side of the TCP connection.)
 *
 * Requests without `Content-Length` and other messages might require treating
 * all incoming bytes as the part of the body, up to the last byte of the
 * connection. This method will invoke `on_message_complete()` callback if the
 * request was terminated safely. Otherwise a error code would be returned.
 */
LLHTTP_EXPORT
llhttp_errno_t llhttp_finish(llhttp_t* parser);

/* Returns `1` if the incoming message is parsed until the last byte, and has
 * to be completed by calling `llhttp_finish()` on EOF
 */
LLHTTP_EXPORT
int llhttp_message_needs_eof(const llhttp_t* parser);

/* Returns `1` if there might be any other messages following the last that was
 * successfully parsed.
 */
LLHTTP_EXPORT
int llhttp_should_keep_alive(const llhttp_t* parser);

/* Make further calls of `llhttp_execute()` return `HPE_PAUSED` and set
 * appropriate error reason.
 *
 * Important: do not call this from user callbacks! User callbacks must return
 * `HPE_PAUSED` if pausing is required.
 */
LLHTTP_EXPORT
void llhttp_pause(llhttp_t* parser);

/* Might be called to resume the execution after the pause in user's callback.
 * See `llhttp_execute()` above for details.
 *
 * Call this only if `llhttp_execute()` returns `HPE_PAUSED`.
 */
LLHTTP_EXPORT
void llhttp_resume(llhttp_t* parser);

/* Might be called to resume the execution after the pause in user's callback.
 * See `llhttp_execute()` above for details.
 *
 * Call this only if `llhttp_execute()` returns `HPE_PAUSED_UPGRADE`
 */
LLHTTP_EXPORT
void llhttp_resume_after_upgrade(llhttp_t* parser);

/* Returns the latest return error */
LLHTTP_EXPORT
llhttp_errno_t llhttp_get_errno(const llhttp_t* parser);

/* Returns the verbal explanation of the latest returned error.
 *
 * Note: User callback should set error reason when returning the error. See
 * `llhttp_set_error_reason()` for details.
 */
LLHTTP_EXPORT
const char* llhttp_get_error_reason(const llhttp_t* parser);

/* Assign verbal description to the returned error. Must be called in user
 * callbacks right before returning the errno.
 *
 * Note: `HPE_USER` error code might be useful in user callbacks.
 */
LLHTTP_EXPORT
void llhttp_set_error_reason(llhttp_t* parser, const char* reason);

/* Returns the pointer to the last parsed byte before the returned error. The
 * pointer is relative to the `data` argument of `llhttp_execute()`.
 *
 * Note: this method might be useful for counting the number of parsed bytes.
 */
LLHTTP_EXPORT
const char* llhttp_get_error_pos(const llhttp_t* parser);

/* Returns textual name of error code */
LLHTTP_EXPORT
const char* llhttp_errno_name(llhttp_errno_t err);

/* Returns textual name of HTTP method */
LLHTTP_EXPORT
const char* llhttp_method_name(llhttp_method_t method);

/* Returns textual name of HTTP status */
LLHTTP_EXPORT
const char* llhttp_status_name(llhttp_status_t status);

/* Enables/disables lenient header value parsing (disabled by default).
 *
 * Lenient parsing disables header value token checks, extending llhttp's
 * protocol support to highly non-compliant clients/server. No
 * `HPE_INVALID_HEADER_TOKEN` will be raised for incorrect header values when
 * lenient parsing is "on".
 *
 * **Enabling this flag can pose a security issue since you will be exposed to
 * request smuggling attacks. USE WITH CAUTION!**
 */
LLHTTP_EXPORT
void llhttp_set_lenient_headers(llhttp_t* parser, int enabled);


/* Enables/disables lenient handling of conflicting `Transfer-Encoding` and
 * `Content-Length` headers (disabled by default).
 *
 * Normally `llhttp` would error when `Transfer-Encoding` is present in
 * conjunction with `Content-Length`. This error is important to prevent HTTP
 * request smuggling, but may be less desirable for small number of cases
 * involving legacy servers.
 *
 * **Enabling this flag can pose a security issue since you will be exposed to
 * request smuggling attacks. USE WITH CAUTION!**
 */
LLHTTP_EXPORT
void llhttp_set_lenient_chunked_length(llhttp_t* parser, int enabled);


/* Enables/disables lenient handling of `Connection: close` and HTTP/1.0
 * requests responses.
 *
 * Normally `llhttp` would error on (in strict mode) or discard (in loose mode)
 * the HTTP request/response after the request/response with `Connection: close`
 * and `Content-Length`. This is important to prevent cache poisoning attacks,
 * but might interact badly with outdated and insecure clients. With this flag
 * the extra request/response will be parsed normally.
 *
 * **Enabling this flag can pose a security issue since you will be exposed to
 * poisoning attacks. USE WITH CAUTION!**
 */
LLHTTP_EXPORT
void llhttp_set_lenient_keep_alive(llhttp_t* parser, int enabled);

/* Enables/disables lenient handling of `Transfer-Encoding` header.
 *
 * Normally `llhttp` would error when a `Transfer-Encoding` has `chunked` value
 * and another value after it (either in a single header or in multiple
 * headers whose value are internally joined using `, `).
 * This is mandated by the spec to reliably determine request body size and thus
 * avoid request smuggling.
 * With this flag the extra value will be parsed normally.
 *
 * **Enabling this flag can pose a security issue since you will be exposed to
 * request smuggling attacks. USE WITH CAUTION!**
 */
LLHTTP_EXPORT
void llhttp_set_lenient_transfer_encoding(llhttp_t* parser, int enabled);

/* Enables/disables lenient handling of HTTP version.
 *
 * Normally `llhttp` would error when the HTTP version in the request or status line
 * is not `0.9`, `1.0`, `1.1` or `2.0`.
 * With this flag the invalid value will be parsed normally.
 *
 * **Enabling this flag can pose a security issue since you will allow unsupported
 * HTTP versions. USE WITH CAUTION!**
 */
LLHTTP_EXPORT
void llhttp_set_lenient_version(llhttp_t* parser, int enabled);

/* Enables/disables lenient handling of additional data received after a message ends
 * and keep-alive is disabled.
 *
 * Normally `llhttp` would error when additional unexpected data is received if the message
 * contains the `Connection` header with `close` value.
 * With this flag the extra data will discarded without throwing an error.
 *
 * **Enabling this flag can pose a security issue since you will be exposed to
 * poisoning attacks. USE WITH CAUTION!**
 */
LLHTTP_EXPORT
void llhttp_set_lenient_data_after_close(llhttp_t* parser, int enabled);

/* Enables/disables lenient handling of incomplete CRLF sequences.
 *
 * Normally `llhttp` would error when a CR is not followed by LF when terminating the
 * request line, the status line, the headers or a chunk header.
 * With this flag only a CR is required to terminate such sections.
 *
 * **Enabling this flag can pose a security issue since you will be exposed to
 * request smuggling attacks. USE WITH CAUTION!**
 */
LLHTTP_EXPORT
void llhttp_set_lenient_optional_lf_after_cr(llhttp_t* parser, int enabled);

/*
 * Enables/disables lenient handling of line separators.
 *
 * Normally `llhttp` would error when a LF is not preceded by CR when terminating the
 * request line, the status line, the headers, a chunk header or a chunk data.
 * With this flag only a LF is required to terminate such sections.
 *
 * **Enabling this flag can pose a security issue since you will be exposed to
 * request smuggling attacks. USE WITH CAUTION!**
 */
LLHTTP_EXPORT
void llhttp_set_lenient_optional_cr_before_lf(llhttp_t* parser, int enabled);

/* Enables/disables lenient handling of chunks not separated via CRLF.
 *
 * Normally `llhttp` would error when after a chunk data a CRLF is missing before
 * starting a new chunk.
 * With this flag the new chunk can start immediately after the previous one.
 *
 * **Enabling this flag can pose a security issue since you will be exposed to
 * request smuggling attacks. USE WITH CAUTION!**
 */
LLHTTP_EXPORT
void llhttp_set_lenient_optional_crlf_after_chunk(llhttp_t* parser, int enabled);

/* Enables/disables lenient handling of spaces after chunk size.
 *
 * Normally `llhttp` would error when after a chunk size is followed by one or more
 * spaces are present instead of a CRLF or `;`.
 * With this flag this check is disabled.
 *
 * **Enabling this flag can pose a security issue since you will be exposed to
 * request smuggling attacks. USE WITH CAUTION!**
 */
LLHTTP_EXPORT
void llhttp_set_lenient_spaces_after_chunk_size(llhttp_t* parser, int enabled);

#ifdef __cplusplus
}  /* extern "C" */
#endif
#endif  /* INCLUDE_LLHTTP_API_H_ */


#endif  /* INCLUDE_LLHTTP_H_ */
ext/swoole/config.h000064400000020561151730541660010306 0ustar00/* config.h.  Generated from config.h.in by configure.  */
/* config.h.in.  Generated from configure.ac by autoheader.  */

/* Define to 1 if the PHP extension 'swoole' is built as a dynamic module. */
#define COMPILE_DL_SWOOLE 1

/* have accept4 */
#define HAVE_ACCEPT4 1

/* Whether you have AI_ALL */
#define HAVE_AI_ALL 1

/* Whether you have AI_IDN */
/* #undef HAVE_AI_IDN */

/* Whether you have AI_V4MAPPED */
#define HAVE_AI_V4MAPPED 1

/* have arc4random */
/* #undef HAVE_ARC4RANDOM */

/* have boost-stacktrace? */
/* #undef HAVE_BOOST_STACKTRACE */

/* have c-ares */
/* #undef HAVE_CARES */

/* have_ccrandomgeneratebytes */
/* #undef HAVE_CCRANDOMGENERATEBYTES */

/* Define to 1 if you have the <cli0cli.h> header file. */
/* #undef HAVE_CLI0CLI_H */

/* Define to 1 if you have the <cli0core.h> header file. */
/* #undef HAVE_CLI0CORE_H */

/* Define to 1 if you have the <cli0defs.h> header file. */
/* #undef HAVE_CLI0DEFS_H */

/* Define to 1 if you have the <cli0env.h> header file. */
/* #undef HAVE_CLI0ENV_H */

/* Define to 1 if you have the <cli0ext.h> header file. */
/* #undef HAVE_CLI0EXT_H */

/* cpu affinity? */
#define HAVE_CPU_AFFINITY 1

/* have daemon */
#define HAVE_DAEMON 1

/* Define to 1 if you have the <dlfcn.h> header file. */
#define HAVE_DLFCN_H 1

/* have epoll */
#define HAVE_EPOLL 1

/* have eventfd */
#define HAVE_EVENTFD 1

/* have execinfo */
#define HAVE_EXECINFO 1

/* have FUTEX? */
#define HAVE_FUTEX 1

/* have gethostbyname2_r */
#define HAVE_GETHOSTBYNAME2_R 1

/* have getrandom */
#define HAVE_GETRANDOM 1

/* Define to 1 if you have the `hstrerror' function. */
#define HAVE_HSTRERROR 1

/* Define to 1 if you have the `if_indextoname' function. */
#define HAVE_IF_INDEXTONAME 1

/* Define to 1 if you have the `if_nametoindex' function. */
#define HAVE_IF_NAMETOINDEX 1

/* have inotify */
#define HAVE_INOTIFY 1

/* have inotify_init1 */
#define HAVE_INOTIFY_INIT1 1

/* Define to 1 if you have the <inttypes.h> header file. */
/* #undef HAVE_INTTYPES_H */

/* Define to 1 if you have the <iodbc.h> header file. */
/* #undef HAVE_IODBC_H */

/* have io_uring ftruncate? */
/* #undef HAVE_IOURING_FTRUNCATE */

/* have io_uring futex? */
/* #undef HAVE_IOURING_FUTEX */

/* have io_uring statx? */
/* #undef HAVE_IOURING_STATX */

/* Define to 1 if you have the <isqlext.h> header file. */
/* #undef HAVE_ISQLEXT_H */

/* Define to 1 if you have the <isql.h> header file. */
/* #undef HAVE_ISQL_H */

/* have kqueue */
/* #undef HAVE_KQUEUE */

/* Define to 1 if you have the <LibraryManager.h> header file. */
/* #undef HAVE_LIBRARYMANAGER_H */

/* Define to 1 if you have the `rt' library (-lrt). */
/* #undef HAVE_LIBRT */

/* have malloc_trim */
#define HAVE_MALLOC_TRIM 1

/* Define to 1 if you have the <memory.h> header file. */
/* #undef HAVE_MEMORY_H */

/* have mkostemp */
#define HAVE_MKOSTEMP 1

/* have sysv message queue? */
#define HAVE_MSGQUEUE 1

/* have pthread_mutex_timedlock */
#define HAVE_MUTEX_TIMEDLOCK 1

/* Define to 1 if you have the <netdb.h> header file. */
#define HAVE_NETDB_H 1

/* Define to 1 if you have the <netinet/tcp.h> header file. */
#define HAVE_NETINET_TCP_H 1

/* */
/* #undef HAVE_OCIENVCREATE */

/* */
/* #undef HAVE_OCIENVNLSCREATE */

/* */
/* #undef HAVE_OCILOBREAD2 */

/* */
/* #undef HAVE_OCISTMTFETCH2 */

/* Define to 1 if you have the <odbcsdk.h> header file. */
/* #undef HAVE_ODBCSDK_H */

/* Define to 1 if you have the <odbc.h> header file. */
/* #undef HAVE_ODBC_H */

/* have pthread_barrier_init */
#define HAVE_PTHREAD_BARRIER 1

/* have pthread_mutexattr_setpshared */
#define HAVE_PTHREAD_MUTEXATTR_SETPSHARED 1

/* have pthread_mutexattr_setrobust */
#define HAVE_PTHREAD_MUTEXATTR_SETROBUST 1

/* have pthread_mutex_consistent */
#define HAVE_PTHREAD_MUTEX_CONSISTENT 1

/* have ptrace */
#define HAVE_PTRACE 1

/* have SO_REUSEPORT? */
#define HAVE_REUSEPORT 1

/* have pthread_rwlock_init */
#define HAVE_RWLOCK 1

/* have pthread_rwlock_timedrdlock */
#define HAVE_RWLOCK_TIMEDRDLOCK 1

/* have pthread_rwlock_timedwrlock */
#define HAVE_RWLOCK_TIMEDWRLOCK 1

/* have sendfile */
#define HAVE_SENDFILE 1

/* have signalfd */
#define HAVE_SIGNALFD 1

/* Define to 1 if you have the `socketpair' function. */
#define HAVE_SOCKETPAIR 1

/* */
#define HAVE_SOCKETS 1

/* have pthread_spin_lock */
#define HAVE_SPINLOCK 1

/* Define to 1 if you have the <sqlcli1.h> header file. */
/* #undef HAVE_SQLCLI1_H */

/* Define to 1 if you have the <sqlext.h> header file. */
/* #undef HAVE_SQLEXT_H */

/* Define to 1 if you have the <sqltypes.h> header file. */
/* #undef HAVE_SQLTYPES_H */

/* Define to 1 if you have the <sqlucode.h> header file. */
/* #undef HAVE_SQLUCODE_H */

/* Define to 1 if you have the <sqlunix.h> header file. */
/* #undef HAVE_SQLUNIX_H */

/* Define to 1 if you have the <sql.h> header file. */
/* #undef HAVE_SQL_H */

/* Define to 1 if you have the <stdint.h> header file. */
/* #undef HAVE_STDINT_H */

/* Define to 1 if you have the <stdlib.h> header file. */
/* #undef HAVE_STDLIB_H */

/* Define to 1 if you have the <strings.h> header file. */
/* #undef HAVE_STRINGS_H */

/* Define to 1 if you have the <string.h> header file. */
/* #undef HAVE_STRING_H */

/* Define to 1 if you have the pdo_sqlite extension enabled. */
/* #undef HAVE_SW_PDO_SQLITELIB */

/* have sqlite3_close_v2 */
/* #undef HAVE_SW_SQLITE3_CLOSE_V2 */

/* have sqlite3_column_table_name */
/* #undef HAVE_SW_SQLITE3_COLUMN_TABLE_NAME */

/* Define to 1 if you have the <sys/sockio.h> header file. */
/* #undef HAVE_SYS_SOCKIO_H */

/* Define to 1 if you have the <sys/stat.h> header file. */
/* #undef HAVE_SYS_STAT_H */

/* Define to 1 if you have the <sys/types.h> header file. */
/* #undef HAVE_SYS_TYPES_H */

/* Define to 1 if you have the <sys/un.h> header file. */
#define HAVE_SYS_UN_H 1

/* have ucontext? */
#define HAVE_UCONTEXT 1

/* Define to 1 if you have the <udbcext.h> header file. */
/* #undef HAVE_UDBCEXT_H */

/* Define to 1 if you have the <unistd.h> header file. */
/* #undef HAVE_UNISTD_H */

/* have valgrind? */
/* #undef HAVE_VALGRIND */

/* Define to the sub-directory where libtool stores uninstalled libraries. */
#define LT_OBJDIR ".libs/"

/* Define to the address where bug reports for this package should be sent. */
/* #undef PACKAGE_BUGREPORT */

/* Define to the full name of this package. */
/* #undef PACKAGE_NAME */

/* Define to the full name and version of this package. */
/* #undef PACKAGE_STRING */

/* Define to the one symbol short name of this package. */
/* #undef PACKAGE_TARNAME */

/* Define to the home page for this package. */
/* #undef PACKAGE_URL */

/* Define to the version of this package. */
/* #undef PACKAGE_VERSION */

/* Have libssh2 with ssh-agent support */
/* #undef PHP_SSH2_AGENT_AUTH */

/* Have libssh2 with session timeout support */
/* #undef PHP_SSH2_SESSION_TIMEOUT */

/* The size of `long', as computed by sizeof. */
/* #undef SIZEOF_LONG */

/* Define to 1 if you have the ANSI C header files. */
/* #undef STDC_HEADERS */

/* */
/* #undef SWOOLE_PDO_OCI_CLIENT_VERSION */

/* do we enable to calculate coroutine execution time */
/* #undef SW_CORO_TIME */

/* do we enable swoole debug */
/* #undef SW_DEBUG */

/* have brotli */
#define SW_HAVE_BROTLI 1

/* have swoole-ftp */
/* #undef SW_HAVE_FTP */

/* have swoole-ftp with SSL */
/* #undef SW_HAVE_FTP_SSL */

/* Have libssh2 */
/* #undef SW_HAVE_SSH2LIB */

/* have zlib */
#define SW_HAVE_ZLIB 1

/* have zstd */
/* #undef SW_HAVE_ZSTD */

/* enable trace log */
/* #undef SW_LOG_TRACE_OPEN */

/* enable sockets support */
/* #undef SW_SOCKETS */

/* enable swoole stdext support */
/* #undef SW_STDEXT */

/* enable swoole thread support */
/* #undef SW_THREAD */

/* use boost asm context */
#define SW_USE_ASM_CONTEXT 1

/* do we enable c-ares support */
/* #undef SW_USE_CARES */

/* do we enable cURL native client */
/* #undef SW_USE_CURL */

/* do we enable firebird coro support */
/* #undef SW_USE_FIREBIRD */

/* have io_uring */
/* #undef SW_USE_IOURING */

/* use mysqlnd */
/* #undef SW_USE_MYSQLND */

/* do we enable swoole-odbc coro support */
/* #undef SW_USE_ODBC */

/* do we enable oracle coro support */
/* #undef SW_USE_ORACLE */

/* do we enable postgresql coro support */
/* #undef SW_USE_PGSQL */

/* do we enable sqlite coro support */
/* #undef SW_USE_SQLITE */

/* enable thread support */
/* #undef SW_USE_THREAD */

/* do we enable thread context */
/* #undef SW_USE_THREAD_CONTEXT */

/* enable io_uring socket support */
/* #undef SW_USE_URING_SOCKET */
ext/swoole/include/swoole_coroutine.h000064400000021657151730541660014072 0ustar00/*
  +----------------------------------------------------------------------+
  | Swoole                                                               |
  +----------------------------------------------------------------------+
  | This source file is subject to version 2.0 of the Apache license,    |
  | that is bundled with this package in the file LICENSE, and is        |
  | available through the world-wide-web at the following url:           |
  | http://www.apache.org/licenses/LICENSE-2.0.html                      |
  | If you did not receive a copy of the Apache2.0 license and are unable|
  | to obtain it through the world-wide-web, please send a note to       |
  | license@swoole.com so we can mail you a copy immediately.            |
  +----------------------------------------------------------------------+
  | Author: Tianfeng Han  <rango@swoole.com>                             |
  |         Twosee  <twose@qq.com>                                       |
  +----------------------------------------------------------------------+
*/

#pragma once

#include "swoole_string.h"
#include "swoole_socket.h"
#include "swoole_reactor.h"
#include "swoole_timer.h"
#include "swoole_async.h"
#include "swoole_util.h"

#include "swoole_coroutine_context.h"

#include <climits>

#include <functional>
#include <string>
#include <unordered_map>
#ifdef SW_USE_THREAD_CONTEXT
#include <system_error>
#endif

typedef std::chrono::microseconds seconds_type;

#ifdef SW_CORO_TIME
#define CALC_EXECUTE_USEC(yield_coroutine, resume_coroutine) calc_execute_usec(yield_coroutine, resume_coroutine)
#else
#define CALC_EXECUTE_USEC(yield_coroutine, resume_coroutine)
#endif

namespace swoole {
class Coroutine {
  public:
    constexpr static int STACK_ALIGNED_SIZE = (4 * 1024);
    constexpr static int MIN_STACK_SIZE = (64 * 1024);
    constexpr static int MAX_STACK_SIZE = (16 * 1024 * 1024);
    constexpr static long MAX_NUM_LIMIT = LONG_MAX;

    enum State {
        STATE_INIT = 0,
        STATE_WAITING,
        STATE_RUNNING,
        STATE_END,
    };

    enum Error {
        ERR_END = 0,
        ERR_LIMIT = -1,
        ERR_INVALID = -2,
    };

    enum ResumeCode {
        RC_OK = 0,
        RC_TIMEDOUT = -1,
        RC_CANCELED = -2,
    };

    typedef void (*SwapCallback)(void *);
    typedef std::function<void(void)> BailoutCallback;
    typedef std::function<bool(swoole::Coroutine *)> CancelFunc;

    void resume();
    void yield();
    void yield(CancelFunc *cancel_fn);
    bool cancel();

    bool yield_ex(double timeout = -1);

    enum State get_state() const {
        return state;
    }

    long get_init_msec() const {
        return init_msec;
    }

    long get_cid() const {
        return cid;
    }

    Coroutine *get_origin() const {
        return origin;
    }

    long get_origin_cid() const {
        return sw_likely(origin) ? origin->get_cid() : -1;
    }

    void *get_task() const {
        return task;
    }

    bool is_end() const {
        return ctx.is_end();
    }

    bool is_canceled() const {
        return resume_code_ == RC_CANCELED;
    }

    bool is_timedout() const {
        return resume_code_ == RC_TIMEDOUT;
    }

    bool is_suspending() const {
        return state == STATE_WAITING;
    }

    void set_task(void *_task) {
        task = _task;
    }

    void set_cancel_fn(CancelFunc *cancel_fn) {
        cancel_fn_ = cancel_fn;
    }

    long get_execute_usec() const {
        return time<seconds_type>(true) - switch_usec + execute_usec;
    }

    coroutine::Context &get_ctx() {
        return ctx;
    }

    static SW_THREAD_LOCAL std::unordered_map<long, Coroutine *> coroutines;

    static void set_on_yield(SwapCallback func);
    static void set_on_resume(SwapCallback func);
    static void set_on_close(SwapCallback func);
    static void bailout(const BailoutCallback &func);

    static long create(const CoroutineFunc &fn, void *args = nullptr) {
#ifdef SW_USE_THREAD_CONTEXT
        try {
            return (new Coroutine(fn, args))->run();
        } catch (const std::system_error &e) {
            swoole_set_last_error(e.code().value());
            swoole_warning("failed to create coroutine, Error: %s[%d]", e.what(), swoole_get_last_error());
            return -1;
        }
#else
        return (new Coroutine(fn, args))->run();
#endif
    }

    static void activate();
    static void deactivate();

    static Coroutine *get_current() {
        return current;
    }

    static Coroutine *get_current_safe() {
        if (sw_unlikely(!current)) {
            swoole_fatal_error(SW_ERROR_CO_OUT_OF_COROUTINE, "API must be called in the coroutine");
        }
        return current;
    }

    static void *get_current_task() {
        return sw_likely(current) ? current->get_task() : nullptr;
    }

    static long get_current_cid() {
        return sw_likely(current) ? current->get_cid() : -1;
    }

    static Coroutine *get_by_cid(long cid) {
        auto i = coroutines.find(cid);
        return sw_likely(i != coroutines.end()) ? i->second : nullptr;
    }

    static void *get_task_by_cid(long cid) {
        Coroutine *co = get_by_cid(cid);
        return sw_likely(co) ? co->get_task() : nullptr;
    }

    static size_t get_stack_size() {
        return stack_size;
    }

    static void set_stack_size(size_t size) {
        stack_size = SW_MEM_ALIGNED_SIZE_EX(SW_MAX(MIN_STACK_SIZE, SW_MIN(size, MAX_STACK_SIZE)), STACK_ALIGNED_SIZE);
    }

    static void set_socket_bound_cid(long cid) {
        socket_bound_cid = cid;
    }

    static long get_last_cid() {
        return last_cid;
    }

    static long get_socket_bound_cid() {
        return socket_bound_cid;
    }

    static size_t count() {
        return coroutines.size();
    }

    static uint64_t get_peak_num() {
        return peak_num;
    }

    static long get_elapsed(long cid) {
        Coroutine *co = cid == 0 ? get_current() : get_by_cid(cid);
        return sw_likely(co) ? Timer::get_absolute_msec() - co->get_init_msec() : -1;
    }

    static long get_execute_time(long cid) {
        Coroutine *co = cid == 0 ? get_current() : get_by_cid(cid);
        return sw_likely(co) ? co->get_execute_usec() : -1;
    }

#ifdef SW_CORO_TIME
    static void calc_execute_usec(Coroutine *yield_coroutine, Coroutine *resume_coroutine);
#endif
    static void print_list();
    static void print_socket_bound_error(int sock_fd, const char *event_str, long bound_cid);

  protected:
    static SW_THREAD_LOCAL Coroutine *current;
    static SW_THREAD_LOCAL long last_cid;
    static SW_THREAD_LOCAL long socket_bound_cid;
    static SW_THREAD_LOCAL uint64_t peak_num;
    static SW_THREAD_LOCAL size_t stack_size;
    static SW_THREAD_LOCAL SwapCallback on_yield;      /* before yield */
    static SW_THREAD_LOCAL SwapCallback on_resume;     /* before resume */
    static SW_THREAD_LOCAL SwapCallback on_close;      /* before close */
    static SW_THREAD_LOCAL BailoutCallback on_bailout; /* when bailout */
    static SW_THREAD_LOCAL bool activated;

    enum State state = STATE_INIT;
    enum ResumeCode resume_code_ = RC_OK;
    long cid;
    long init_msec = Timer::get_absolute_msec();
    long switch_usec = time<seconds_type>(true);
    long execute_usec = 0;
    void *task = nullptr;
    coroutine::Context ctx;
    Coroutine *origin = nullptr;
    CancelFunc *cancel_fn_ = nullptr;

    Coroutine(const CoroutineFunc &fn, void *private_data);
    long run();
    void check_end();
    void close();
};
//-------------------------------------------------------------------------------
namespace coroutine {
/**
 * Support for timeouts and cancellations requires the caller to store the memory pointers of
 * the input and output parameter objects in the `data` pointer of the `AsyncEvent` object.
 * This field is a `shared_ptr`, which increments the reference count when dispatched to the AIO thread,
 * collectively managing the `data` pointer.
 * When the async task is completed, the caller receives the results or cancels or timeouts,
 * the reference count will reach zero, and the memory will be released.
 */
bool async(async::Handler handler, AsyncEvent &event, double timeout = -1);
/**
 * This function should be used for asynchronous operations that do not support cancellation and timeouts.
 * For example, in write/read operations,
 * asynchronous tasks cannot transfer the memory ownership of wbuf/rbuf to the AIO thread.
 * In the event of a timeout or cancellation, the memory of wbuf/rbuf will be released by the caller,
 * which may lead the AIO thread to read from an erroneous memory pointer and consequently crash.
 */
bool async(const std::function<void()> &fn);
bool run(const CoroutineFunc &fn, void *arg = nullptr);
bool wait_for(const std::function<bool()> &fn);
}  // namespace coroutine
//-------------------------------------------------------------------------------
}  // namespace swoole

/**
 * for gdb
 */
swoole::Coroutine *swoole_coroutine_iterator_each();
void swoole_coroutine_iterator_reset();
swoole::Coroutine *swoole_coroutine_get(long cid);
size_t swoole_coroutine_count();
ext/swoole/include/swoole_coroutine_context.h000064400000005374151730541660015634 0ustar00/*
  +----------------------------------------------------------------------+
  | Swoole                                                               |
  +----------------------------------------------------------------------+
  | This source file is subject to version 2.0 of the Apache license,    |
  | that is bundled with this package in the file LICENSE, and is        |
  | available through the world-wide-web at the following url:           |
  | http://www.apache.org/licenses/LICENSE-2.0.html                      |
  | If you did not receive a copy of the Apache2.0 license and are unable|
  | to obtain it through the world-wide-web, please send a note to       |
  | license@swoole.com so we can mail you a copy immediately.            |
  +----------------------------------------------------------------------+
  | Author: Tianfeng Han  <rango@swoole.com>                             |
  |         Twosee  <twose@qq.com>                                       |
  +----------------------------------------------------------------------+
*/

#pragma once

#include "swoole.h"

#ifdef SW_USE_THREAD_CONTEXT
#include <thread>
#include <mutex>
#elif !defined(SW_USE_ASM_CONTEXT)
#define USE_UCONTEXT 1
#ifndef _XOPEN_SOURCE
#define _XOPEN_SOURCE
#endif
#include <ucontext.h>
#else
#define USE_ASM_CONTEXT 1
#include "swoole_asm_context.h"
#endif

#if defined(HAVE_VALGRIND) && !defined(HAVE_KQUEUE)
#define USE_VALGRIND 1
#include <valgrind/valgrind.h>
#endif

#ifdef USE_UCONTEXT
typedef ucontext_t coroutine_context_t;
#elif defined(USE_ASM_CONTEXT)
typedef fcontext_t coroutine_context_t;
typedef transfer_t coroutine_transfer_t;
#endif

#if defined(USE_UCONTEXT) || defined(SW_USE_THREAD_CONTEXT)
typedef void *coroutine_transfer_t;
#endif

typedef std::function<void(void *)> CoroutineFunc;

namespace swoole {
namespace coroutine {

class Context {
  public:
    Context(size_t stack_size, CoroutineFunc fn, void *private_data);
    ~Context();
    bool swap_in();
    bool swap_out();
#if !defined(SW_USE_THREAD_CONTEXT) && defined(SW_CONTEXT_DETECT_STACK_USAGE)
    ssize_t get_stack_usage();
#endif
#ifndef SW_USE_THREAD_CONTEXT
    char *get_stack() const {
        return stack_;
    }

    size_t get_stack_size() const {
        return stack_size_;
    }
#endif
    bool is_end() const {
        return end_;
    }

  protected:
    CoroutineFunc fn_;
#ifdef SW_USE_THREAD_CONTEXT
    std::thread thread_;
    std::mutex lock_;
    std::mutex *swap_lock_;
#else
    coroutine_context_t ctx_;
    coroutine_context_t swap_ctx_;
    char *stack_;
    uint32_t stack_size_;
#endif
#ifdef USE_VALGRIND
    uint32_t valgrind_stack_id;
#endif
    void *private_data_;
    bool end_;

    static void context_func(coroutine_transfer_t arg);
};

}  // namespace coroutine
}  // namespace swoole
ext/swoole/include/swoole_signal.h000064400000005766151730541670013344 0ustar00/*
  +----------------------------------------------------------------------+
  | Swoole                                                               |
  +----------------------------------------------------------------------+
  | This source file is subject to version 2.0 of the Apache license,    |
  | that is bundled with this package in the file LICENSE, and is        |
  | available through the world-wide-web at the following url:           |
  | http://www.apache.org/licenses/LICENSE-2.0.html                      |
  | If you did not receive a copy of the Apache2.0 license and are unable|
  | to obtain it through the world-wide-web, please send a note to       |
  | license@swoole.com so we can mail you a copy immediately.            |
  +----------------------------------------------------------------------+
  | Author: Tianfeng Han  <rango@swoole.com>                             |
  +----------------------------------------------------------------------+
*/

#pragma once

#include "swoole.h"

#include <csignal>

namespace swoole {
typedef void (*SignalHandler)(int);

struct Signal {
    SignalHandler handler;
    uint16_t signo;
    bool activated;
};
}  // namespace swoole

typedef swoole::SignalHandler swSignalHandler;

#ifdef HAVE_SIGNALFD
void swoole_signalfd_init();
#endif

/**
 * The synchronous blocking IO mode is unsafe for executing PHP code within signal callback functions,
 * such as in the Server's Task worker process or the Manager process.
 * If a new signal is triggered during the execution of a signal function,
 * the recursive execution of the signal function can lead to a crash of the ZendVM.
 * When using `Swoole\Process::signal()` to register a PHP function as a signal handler,
 * it is crucial to set the third parameter to true;
 * this way, the underlying layer will not execute directly but will call
 * `swoole_signal_dispatch()` in a safe manner to execute the PHP signal callback function.
 */
SW_API swSignalHandler swoole_signal_set(int signo, swSignalHandler func, bool safety = false);
SW_API bool swoole_signal_isset(int signo);
SW_API swSignalHandler swoole_signal_set(int signo, swSignalHandler func, int restart, int mask);
SW_API swSignalHandler swoole_signal_get_handler(int signo);
SW_API uint32_t swoole_signal_get_listener_num();

SW_API void swoole_signal_clear();
SW_API void swoole_signal_block_all();
SW_API void swoole_signal_unblock_all();
SW_API char *swoole_signal_to_str(int sig);
SW_API void swoole_signal_callback(int signo);

/**
 * Only for synchronously blocked processes.
 * Due to the unreliability of signals,
 * executing complex logic directly within the signal handler function may pose security risks.
 * Therefore, the lower layer only marks memory in the signal handler
 * without directly invoking the application's set signal callback function.
 * Executing `swoole_signal_dispatch` in a safe context will actually call the signal callback function,
 * allowing for the execution of complex code within the callback.
 */
SW_API void swoole_signal_dispatch();
ext/swoole/include/swoole_reactor.h000064400000030633151730541670013515 0ustar00/*
  +----------------------------------------------------------------------+
  | Swoole                                                               |
  +----------------------------------------------------------------------+
  | This source file is subject to version 2.0 of the Apache license,    |
  | that is bundled with this package in the file LICENSE, and is        |
  | available through the world-wide-web at the following url:           |
  | http://www.apache.org/licenses/LICENSE-2.0.html                      |
  | If you did not receive a copy of the Apache2.0 license and are unable|
  | to obtain it through the world-wide-web, please send a note to       |
  | license@swoole.com so we can mail you a copy immediately.            |
  +----------------------------------------------------------------------+
  | Author: Tianfeng Han  <rango@swoole.com>                             |
  |         Twosee  <twose@qq.com>                                       |
  +----------------------------------------------------------------------+
*/

#pragma once

#include "swoole_socket.h"

#include <list>
#include <map>
#include <unordered_map>

namespace swoole {

struct DeferCallback {
    Callback callback;
    void *data;
};

class Reactor;

class ReactorImpl {
  protected:
    Reactor *reactor_;

  public:
    explicit ReactorImpl(Reactor *_reactor) {
        reactor_ = _reactor;
    }
    void after_removal_failure(const network::Socket *_socket) const;
    virtual ~ReactorImpl() = default;
    virtual bool ready() = 0;
    virtual int add(network::Socket *socket, int events) = 0;
    virtual int set(network::Socket *socket, int events) = 0;
    virtual int del(network::Socket *socket) = 0;
    virtual int wait() = 0;
};

class CallbackManager {
  public:
    typedef std::list<std::pair<Callback, void *>> TaskList;
    void append(const Callback &fn, void *private_data) {
        list_.emplace_back(fn, private_data);
    }
    void prepend(const Callback &fn, void *private_data) {
        list_.emplace_front(fn, private_data);
        auto t = list_.back();
    }
    void remove(const TaskList::iterator iter) {
        list_.erase(iter);
    }
    void execute() {
        while (!list_.empty()) {
            std::pair<Callback, void *> task = list_.front();
            list_.pop_front();
            task.first(task.second);
        }
    }

  protected:
    TaskList list_;
};

class Reactor {
  public:
    enum Type {
        TYPE_AUTO,
        TYPE_EPOLL,
        TYPE_KQUEUE,
        TYPE_POLL,
    };

    enum EndCallback {
        PRIORITY_TIMER = 0,
        PRIORITY_DEFER_TASK,
        PRIORITY_IDLE_TASK,
        PRIORITY_SIGNAL_CALLBACK,
        PRIORITY_TRY_EXIT,
        PRIORITY_MALLOC_TRIM,
        PRIORITY_WORKER_CALLBACK,
        /**
         * PRIORITY_IOURING_SUBMIT must be the last one, as other callback functions might allocate new SQEs.
         * It is essential to ensure that the SQE is submitted before the next event loop iteration and before the
         * epoll_wait() call.
         */
        PRIORITY_IOURING_SUBMIT,
    };

    enum ExitCondition {
        EXIT_CONDITION_TIMER = 0,
        EXIT_CONDITION_DEFER_TASK,
        EXIT_CONDITION_WAIT_PID,
        EXIT_CONDITION_CO_SIGNAL_LISTENER,
        EXIT_CONDITION_SIGNAL_LISTENER,
        EXIT_CONDITION_AIO_TASK,
        EXIT_CONDITION_SIGNALFD,
        EXIT_CONDITION_USER_BEFORE_DEFAULT,
        EXIT_CONDITION_FORCED_TERMINATION,
        EXIT_CONDITION_IOURING,
        EXIT_CONDITION_DEFAULT = 999,
        EXIT_CONDITION_USER_AFTER_DEFAULT,
    };

    Type type_;
    void *ptr = nullptr;
    int native_handle = -1;
    uint32_t max_event_num = 0;

    bool ready_ = false;
    bool running = false;
    bool start = false;
    bool once = false;
    bool wait_exit = false;
    bool destroyed = false;
    bool bailout = false;
    bool timed_out = false;

    /**
     * reactor->wait timeout (millisecond) or -1
     */
    int32_t timeout_msec = 0;

    uint16_t id = 0;

    uint32_t max_socket = 0;

#ifdef SW_USE_MALLOC_TRIM
    time_t last_malloc_trim_time = 0;
#endif

    ReactorHandler read_handler[SW_MAX_FDTYPE] = {};
    ReactorHandler write_handler[SW_MAX_FDTYPE] = {};
    ReactorHandler error_handler[SW_MAX_FDTYPE] = {};

    ReactorHandler default_write_handler = nullptr;
    ReactorHandler default_error_handler = nullptr;

    int add(network::Socket *socket, int events) const {
        return impl->add(socket, events);
    }

    int set(network::Socket *socket, int events) const {
        return impl->set(socket, events);
    }

    int del(network::Socket *socket) const {
        return impl->del(socket);
    }

    int wait() const {
        return impl->wait();
    }

    CallbackManager *defer_tasks = nullptr;
    CallbackManager destroy_callbacks;

    DeferCallback idle_task;
    DeferCallback future_task;

#ifdef SW_USE_IOURING
    std::function<void(Reactor *)> iouring_interrupt_handler;
#endif

    ssize_t (*write)(Reactor *reactor, network::Socket *socket, const void *buf, size_t n) = nullptr;
    ssize_t (*writev)(Reactor *reactor, network::Socket *socket, const iovec *iov, size_t iovcnt) = nullptr;
    int (*close)(Reactor *reactor, network::Socket *socket) = nullptr;

  private:
    ReactorImpl *impl;
    std::map<int, std::function<void(Reactor *)>> end_callbacks;
    std::map<int, std::function<bool(Reactor *, size_t &)>> exit_conditions;
    std::unordered_map<int, network::Socket *> sockets_;

  public:
    explicit Reactor(int max_event = SW_REACTOR_MAXEVENTS, Type _type = TYPE_AUTO);
    ~Reactor();
    bool if_exit();
    void defer(const Callback &cb, void *data = nullptr);
    void set_end_callback(EndCallback _id, const std::function<void(Reactor *)> &fn);
    void erase_end_callback(EndCallback _id);
    void set_exit_condition(ExitCondition _id, const std::function<bool(Reactor *, size_t &)> &fn);
    void set_handler(int fd_type, int event, ReactorHandler handler);
    bool isset_handler(int fd_type, int event) const;
    void add_destroy_callback(const Callback &cb, void *data = nullptr);
    void execute_begin_callback() const;
    void execute_end_callbacks(bool _timed_out = false);
    void drain_write_buffer(network::Socket *socket);

    bool ready() const {
        return ready_;
    }

    bool is_running() const {
        return running;
    }

    size_t remove_exit_condition(const ExitCondition _id) {
        return exit_conditions.erase(_id);
    }

    bool isset_exit_condition(const ExitCondition _id) {
        return exit_conditions.find(_id) != exit_conditions.end();
    }

    int add_event(network::Socket *_socket, EventType event_type) const {
        if (!(_socket->events & event_type)) {
            return set(_socket, _socket->events | event_type);
        }
        return SW_OK;
    }

    int del_event(network::Socket *_socket, EventType event_type) const {
        if (_socket->events & event_type) {
            return set(_socket, _socket->events & (~event_type));
        }
        return SW_OK;
    }

    int remove_read_event(network::Socket *_socket) const {
        if (_socket->events & SW_EVENT_WRITE) {
            _socket->events &= (~SW_EVENT_READ);
            return set(_socket, _socket->events);
        } else {
            return del(_socket);
        }
    }

    int remove_write_event(network::Socket *_socket) const {
        if (_socket->events & SW_EVENT_READ) {
            _socket->events &= (~SW_EVENT_WRITE);
            return set(_socket, _socket->events);
        } else {
            return del(_socket);
        }
    }

    int add_read_event(network::Socket *_socket) const {
        if (_socket->events & SW_EVENT_WRITE) {
            _socket->events |= SW_EVENT_READ;
            return set(_socket, _socket->events);
        } else {
            return add(_socket, SW_EVENT_READ);
        }
    }

    int add_write_event(network::Socket *_socket) const {
        if (_socket->events & SW_EVENT_READ) {
            _socket->events |= SW_EVENT_WRITE;
            return set(_socket, _socket->events);
        } else {
            return add(_socket, SW_EVENT_WRITE);
        }
    }

    bool exists(const network::Socket *_socket) const {
        return !_socket->removed && _socket->events;
    }

    bool exists(const int fd) const {
        return sockets_.find(fd) != sockets_.end();
    }

    int get_timeout_msec() const {
        return defer_tasks == nullptr ? timeout_msec : 0;
    }

    void set_timeout_msec(int mesc) {
        timeout_msec = mesc;
    }

    size_t get_event_num() const {
        return sockets_.size();
    }

    const std::unordered_map<int, network::Socket *> &get_sockets() {
        return sockets_;
    }

    network::Socket *get_socket(const int fd) {
        return sockets_[fd];
    }

    void foreach_socket(const std::function<void(int, network::Socket *)> &callback) const {
        for (auto &kv : sockets_) {
            callback(kv.first, kv.second);
        }
    }

    ReactorHandler get_handler(const FdType fd_type, const EventType event) const {
        switch (event) {
        case SW_EVENT_READ:
            return read_handler[fd_type];
        case SW_EVENT_WRITE:
            return write_handler[fd_type] ? write_handler[fd_type] : default_write_handler;
        case SW_EVENT_ERROR:
            return error_handler[fd_type] ? error_handler[fd_type] : default_error_handler;
        default:
            abort();
        }
    }

    ReactorHandler get_error_handler(const FdType fd_type) const {
        ReactorHandler handler = get_handler(fd_type, SW_EVENT_ERROR);
        // error callback is not set, try to use readable or writable callback
        if (handler == nullptr) {
            handler = get_handler(fd_type, SW_EVENT_READ);
            if (handler == nullptr) {
                handler = get_handler(fd_type, SW_EVENT_WRITE);
            }
        }
        return handler;
    }

    void before_wait() {
        start = running = true;
        if (timeout_msec == 0) {
            timeout_msec = -1;
        }
    }

    int trigger_close_event(Event *event) {
        return default_error_handler(this, event);
    }

    void set_wait_exit(const bool enable) {
        wait_exit = enable;
    }

    void _add(network::Socket *_socket, const int events) {
        _socket->events = events;
        _socket->removed = 0;
        sockets_[_socket->fd] = _socket;
    }

    void _set(network::Socket *_socket, const int events) {
        _socket->events = events;
    }

    bool _exists(const network::Socket *_socket) {
        return sockets_.find(_socket->fd) != sockets_.end();
    }

    void _del(network::Socket *_socket) {
        _socket->events = 0;
        _socket->removed = 1;
        sockets_.erase(_socket->fd);
    }

    bool catch_error() const {
        switch (errno) {
        case EINTR:
            return true;
        default:
            break;
        }
        return false;
    }

    static ssize_t _write(Reactor *reactor, network::Socket *socket, const void *buf, size_t n);
    static ssize_t _writev(Reactor *reactor, network::Socket *socket, const iovec *iov, size_t iovcnt);
    static int _close(Reactor *reactor, network::Socket *socket);
    static int _writable_callback(Reactor *reactor, Event *ev);
    static ssize_t write_func(const Reactor *reactor,
                              network::Socket *socket,
                              size_t _len,
                              const std::function<ssize_t()> &send_fn,
                              const std::function<void(Buffer *buffer)> &append_fn);

    static bool isset_read_event(const int events) {
        return (events < SW_EVENT_DEAULT) || (events & SW_EVENT_READ);
    }

    static bool isset_write_event(const int events) {
        return events & SW_EVENT_WRITE;
    }

    static bool isset_error_event(const int events) {
        return events & SW_EVENT_ERROR;
    }
};

int16_t translate_events_to_poll(int events);
int translate_events_from_poll(int16_t events);
}  // namespace swoole

#define SW_REACTOR_CONTINUE                                                                                            \
    if (reactor_->once) {                                                                                              \
        break;                                                                                                         \
    } else {                                                                                                           \
        continue;                                                                                                      \
    }
ext/swoole/include/swoole_llhttp.h000064400000004024151730541700013352 0ustar00/*
  +----------------------------------------------------------------------+
  | Swoole                                                               |
  +----------------------------------------------------------------------+
  | This source file is subject to version 2.0 of the Apache license,    |
  | that is bundled with this package in the file LICENSE, and is        |
  | available through the world-wide-web at the following url:           |
  | http://www.apache.org/licenses/LICENSE-2.0.html                      |
  | If you did not receive a copy of the Apache2.0 license and are unable|
  | to obtain it through the world-wide-web, please send a note to       |
  | license@swoole.com so we can mail you a copy immediately.            |
  +----------------------------------------------------------------------+
  | Author: NathanFreeman  <mariasocute@163.com>                         |
  +----------------------------------------------------------------------+
*/

#ifndef SWOOLE_LLHTTP_H
#define SWOOLE_LLHTTP_H

#include "swoole.h"
#include "thirdparty/llhttp/llhttp.h"

static sw_inline void swoole_llhttp_parser_init(llhttp_t *parser, llhttp_type_t type, void *ctx) {
    llhttp_init(parser, type, nullptr);
    parser->data = ctx;
}

static sw_inline size_t swoole_llhttp_parser_execute(llhttp_t *parser,
                                                     const llhttp_settings_t *settings,
                                                     const char *data,
                                                     size_t length) {
    parser->settings = (void *) settings;
    const llhttp_errno_t result = llhttp_execute(parser, data, length);

    if (result == HPE_OK) {
        return length;
    }

    const size_t parsed_length = llhttp_get_error_pos(parser) - data;
    switch (result) {
    case HPE_PAUSED:
        llhttp_resume(parser);
        break;
    case HPE_PAUSED_UPGRADE:
        llhttp_resume_after_upgrade(parser);
        break;
    default:
        break;
    }

    return parsed_length;
}

#endif  // SWOOLE_LLHTTP_H
ext/swoole/include/swoole_uring_socket.h000064400000007531151730541700014545 0ustar00/*
  +----------------------------------------------------------------------+
  | Swoole                                                               |
  +----------------------------------------------------------------------+
  | This source file is subject to version 2.0 of the Apache license,    |
  | that is bundled with this package in the file LICENSE, and is        |
  | available through the world-wide-web at the following url:           |
  | http://www.apache.org/licenses/LICENSE-2.0.html                      |
  | If you did not receive a copy of the Apache2.0 license and are unable|
  | to obtain it through the world-wide-web, please send a note to       |
  | license@swoole.com so we can mail you a copy immediately.            |
  +----------------------------------------------------------------------+
  | Author: Tianfeng Han  <rango@swoole.com>                             |
  |         Twosee  <twose@qq.com>                                       |
  +----------------------------------------------------------------------+
*/

#pragma once

#include "swoole_coroutine_socket.h"

namespace swoole {
namespace coroutine {
class UringSocket : public Socket {
    BIO *rbio = nullptr;
    BIO *wbio = nullptr;

    bool ssl_bio_write();
    bool ssl_bio_read();
    bool ssl_bio_prepare();
    bool ssl_bio_perform(int rc, const char *fn);
    ssize_t ssl_recv(void *_buf, size_t _n);
    ssize_t ssl_send(const void *_buf, size_t _n);
    ssize_t ssl_readv(network::IOVector *io_vector);
    ssize_t ssl_writev(network::IOVector *io_vector);
    ssize_t ssl_sendfile(const File &file, off_t *offset, size_t size);

    ssize_t uring_send(const void *_buf, size_t _n);
    ssize_t uring_recv(void *_buf, size_t _n);
    ssize_t uring_readv(const struct iovec *iovec, int count);
    ssize_t uring_writev(const struct iovec *iovec, int count);
    ssize_t uring_sendfile(const File &file, off_t *offset, size_t size);
    network::Socket *uring_accept(double timeout);

    bool is_ssl() {
        return !!socket->ssl;
    }

  public:
    UringSocket(SocketType sock_type) : Socket(sock_type) {}
    UringSocket(int domain, int type, int protocol) : Socket(domain, type, protocol) {}
    UringSocket(int _fd, int _domain, int _type, int _protocol) : Socket(_fd, _domain, _type, _protocol) {}
    UringSocket(int _fd, SocketType _type) : Socket(_fd, _type) {}
    UringSocket(network::Socket *sock, const UringSocket *server_sock) : Socket(sock, server_sock) {}

    bool connect(const std::string &_host, int _port = 0, int flags = 0) {
        return Socket::connect(_host, _port, flags);
    }

    ssize_t recvfrom(void *_buf, size_t _n) {
        return Socket::recvfrom(_buf, _n);
    }

    bool connect(const sockaddr *addr, socklen_t addrlen) override;
    UringSocket *accept(double timeout = 0);

    ssize_t read(void *_buf, size_t _n) override;
    ssize_t write(const void *_buf, size_t _n) override;
    ssize_t recvmsg(msghdr *msg, int flags) override;
    ssize_t sendmsg(const msghdr *msg, int flags) override;
    ssize_t recvfrom(void *_buf, size_t _n, sockaddr *_addr, socklen_t *_socklen) override;
    ssize_t sendto(const std::string &host, int port, const void *_buf, size_t _n) override;
    ssize_t recv(void *_buf, size_t _n) override;
    ssize_t send(const void *_buf, size_t _n) override;
    ssize_t recv_all(void *_buf, size_t _n) override;
    ssize_t send_all(const void *_buf, size_t _n) override;
    bool sendfile(const char *filename, off_t offset, size_t length) override;
    ssize_t readv(network::IOVector *io_vector) override;
    ssize_t readv_all(network::IOVector *io_vector) override;
    ssize_t writev(network::IOVector *io_vector) override;
    ssize_t writev_all(network::IOVector *io_vector) override;
    bool poll(EventType _type, double timeout = 0) override;
    bool ssl_handshake() override;
};
}  // namespace coroutine
}  // namespace swoole
ext/swoole/include/swoole_http.h000064400000016370151730541700013031 0ustar00/*
 +----------------------------------------------------------------------+
 | Swoole                                                               |
 +----------------------------------------------------------------------+
 | This source file is subject to version 2.0 of the Apache license,    |
 | that is bundled with this package in the file LICENSE, and is        |
 | available through the world-wide-web at the following url:           |
 | http://www.apache.org/licenses/LICENSE-2.0.html                      |
 | If you did not receive a copy of the Apache2.0 license and are unable|
 | to obtain it through the world-wide-web, please send a note to       |
 | license@php.net so we can mail you a copy immediately.               |
 +----------------------------------------------------------------------+
 | Author: Tianfeng Han  <rango@swoole.com>                             |
 +----------------------------------------------------------------------+
 */
#pragma once

#include "swoole_protocol.h"

#include <unordered_map>

enum swHttpVersion {
    SW_HTTP_VERSION_10 = 1,
    SW_HTTP_VERSION_11,
    SW_HTTP_VERSION_2,
    SW_HTTP_VERSION_3,
};

enum swHttpMethod {
    SW_HTTP_DELETE = 1,
    SW_HTTP_GET,
    SW_HTTP_HEAD,
    SW_HTTP_POST,
    SW_HTTP_PUT,
    SW_HTTP_PATCH,
    /* pathological */
    SW_HTTP_CONNECT,
    SW_HTTP_OPTIONS,
    SW_HTTP_TRACE,
    /* webdav */
    SW_HTTP_COPY,
    SW_HTTP_LOCK,
    SW_HTTP_MKCOL,
    SW_HTTP_MOVE,
    SW_HTTP_PROPFIND,
    SW_HTTP_PROPPATCH,
    SW_HTTP_UNLOCK,
    /* subversion */
    SW_HTTP_REPORT,
    SW_HTTP_MKACTIVITY,
    SW_HTTP_CHECKOUT,
    SW_HTTP_MERGE,
    /* upnp */
    SW_HTTP_MSEARCH,
    SW_HTTP_NOTIFY,
    SW_HTTP_SUBSCRIBE,
    SW_HTTP_UNSUBSCRIBE,
    /* proxy */
    SW_HTTP_PURGE,
    /* Http2 */
    SW_HTTP_PRI,
};

enum swHttpStatusCode {
    SW_HTTP_CONTINUE = 100,
    SW_HTTP_SWITCHING_PROTOCOLS = 101,
    SW_HTTP_PROCESSING = 102,

    SW_HTTP_OK = 200,
    SW_HTTP_CREATED = 201,
    SW_HTTP_ACCEPTED = 202,
    SW_HTTP_NO_CONTENT = 204,
    SW_HTTP_PARTIAL_CONTENT = 206,

    SW_HTTP_SPECIAL_RESPONSE = 300,
    SW_HTTP_MOVED_PERMANENTLY = 301,
    SW_HTTP_MOVED_TEMPORARILY = 302,
    SW_HTTP_SEE_OTHER = 303,
    SW_HTTP_NOT_MODIFIED = 304,
    SW_HTTP_TEMPORARY_REDIRECT = 307,
    SW_HTTP_PERMANENT_REDIRECT = 308,

    SW_HTTP_BAD_REQUEST = 400,
    SW_HTTP_UNAUTHORIZED = 401,
    SW_HTTP_FORBIDDEN = 403,
    SW_HTTP_NOT_FOUND = 404,
    SW_HTTP_NOT_ALLOWED = 405,
    SW_HTTP_REQUEST_TIME_OUT = 408,
    SW_HTTP_CONFLICT = 409,
    SW_HTTP_LENGTH_REQUIRED = 411,
    SW_HTTP_PRECONDITION_FAILED = 412,
    SW_HTTP_REQUEST_ENTITY_TOO_LARGE = 413,
    SW_HTTP_REQUEST_URI_TOO_LARGE = 414,
    SW_HTTP_UNSUPPORTED_MEDIA_TYPE = 415,
    SW_HTTP_RANGE_NOT_SATISFIABLE = 416,
    SW_HTTP_MISDIRECTED_REQUEST = 421,
    SW_HTTP_TOO_MANY_REQUESTS = 429,
    SW_HTTP_UNAVAILABLE_FOR_LEGAL_REASONS = 451,

    SW_HTTP_INTERNAL_SERVER_ERROR = 500,
    SW_HTTP_NOT_IMPLEMENTED = 501,
    SW_HTTP_BAD_GATEWAY = 502,
    SW_HTTP_SERVICE_UNAVAILABLE = 503,
    SW_HTTP_GATEWAY_TIME_OUT = 504,
    SW_HTTP_VERSION_NOT_SUPPORTED = 505,
    SW_HTTP_INSUFFICIENT_STORAGE = 507
};

struct multipart_parser;

namespace swoole {
class Server;
namespace http_server {
//-----------------------------------------------------------------
struct FormData {
    const char *multipart_boundary_buf;
    uint32_t multipart_boundary_len;
    multipart_parser *multipart_parser_;
    String *multipart_buffer_;
    String *upload_tmpfile;
    std::string upload_tmpfile_fmt_;
    const char *current_header_name;
    size_t current_header_name_len;
    size_t upload_filesize;
    size_t upload_max_filesize;
};

struct Request {
    uint8_t method;
    uint8_t version;
    uchar excepted : 1;
    uchar too_large : 1;
    uchar unavailable : 1;

    uchar header_parsed : 1;
    uchar tried_to_dispatch : 1;
    uchar multipart_header_parsed : 1;

    uchar known_length : 1;
    uchar keep_alive : 1;
    uchar chunked : 1;
    uchar nobody_chunked : 1;

    uint32_t url_offset_;
    uint32_t url_length_;

    uint32_t max_length_;
    uint32_t request_line_length_; /* without \r\n  */
    uint32_t header_length_;       /* include request_line_length + \r\n */
    uint64_t content_length_;

    FormData *form_data_;
    String *buffer_;

    Request() {
        clean();
        form_data_ = nullptr;
        buffer_ = nullptr;
    }
    ~Request();
    void clean() {
        memset(&method, 0, offsetof(Request, form_data_));
    }
    int get_protocol();
    int get_header_length();
    int get_chunked_body_length();
    void parse_header_info();
    bool parse_multipart_data(String *buffer);
    bool init_multipart_parser(const Server *server);
    void destroy_multipart_parser();
    std::string get_header(const char *name) const;
    bool has_expect_header() const;
};

typedef std::function<bool(char *key, size_t key_len, char *value, size_t value_len)> ParseCookieCallback;

int get_method(const char *method_str, size_t method_len);
const char *get_method_string(int method);
const char *get_status_message(int code);
extern int list_of_status_code[128];
/**
 * This function will directly modify the data in the input buffer.
 */
size_t url_decode(char *str, size_t len);
/**
 * Returns a new memory address, and the pointer at this address needs to be manually released in the calling layer.
 */
char *url_encode(char const *str, size_t len);
int dispatch_request(Server *serv, const Protocol *proto, network::Socket *socket, const RecvData *rdata);
bool parse_multipart_boundary(
    const char *at, size_t length, size_t offset, char **out_boundary_str, int *out_boundary_len);
void parse_cookie(const char *at, size_t length, const ParseCookieCallback &cb);

ssize_t get_package_length(const Protocol *protocol, network::Socket *conn, PacketLength *pl);
uint8_t get_package_length_size(network::Socket *conn);
int dispatch_frame(const Protocol *protocol, network::Socket *conn, const RecvData *rdata);

struct ContextImpl;

class Context {
  public:
    Context(Server *server, SessionId session_id, ContextImpl *_impl) {
        server_ = server;
        session_id_ = session_id;
        impl = _impl;
    }
    ~Context();
    bool end(const std::string &data) {
        return end(data.c_str(), data.length());
    }
    bool end(const char *data, size_t length);
    void setHeader(const std::string &key, const std::string &value) {
        response.headers[key] = value;
    }
    void setStatusCode(int code) {
        response.code = code;
    }
    // Request
    int version = 0;
    bool keepalive = false;
    bool post_form_urlencoded = false;
    std::string request_path;
    std::string query_string;
    std::string server_protocol;
    std::unordered_map<std::string, std::string> headers;
    std::unordered_map<std::string, std::string> files;
    std::unordered_map<std::string, std::string> form_data;
    std::string body;
    // Response
    struct {
        int code = 200;
        std::unordered_map<std::string, std::string> headers;
    } response;
    // Impl
    Server *server_;
    SessionId session_id_;
    ContextImpl *impl;
};

std::shared_ptr<Server> listen(const std::string &addr, const std::function<void(Context &ctx)> &cb, int mode = 1);
//-----------------------------------------------------------------
}  // namespace http_server
}  // namespace swoole
ext/swoole/include/swoole_table.h000064400000015000151730541710013127 0ustar00/*
  +----------------------------------------------------------------------+
  | Swoole                                                               |
  +----------------------------------------------------------------------+
  | This source file is subject to version 2.0 of the Apache license,    |
  | that is bundled with this package in the file LICENSE, and is        |
  | available through the world-wide-web at the following url:           |
  | http://www.apache.org/licenses/LICENSE-2.0.html                      |
  | If you did not receive a copy of the Apache2.0 license and are unable|
  | to obtain it through the world-wide-web, please send a note to       |
  | license@swoole.com so we can mail you a copy immediately.            |
  +----------------------------------------------------------------------+
  | Author: Tianfeng Han  <rango@swoole.com>                             |
  +----------------------------------------------------------------------+
*/

#pragma once

#include "swoole_memory.h"
#include "swoole_lock.h"

#include <csignal>

#include <vector>
#include <unordered_map>

//#define SW_TABLE_DEBUG   0
#define SW_TABLE_FORCE_UNLOCK_TIME 2000  // milliseconds
#define SW_TABLE_USE_PHP_HASH
#define SW_TABLE_MAX_ROW_SIZE 0x80000000

namespace swoole {
typedef uint32_t TableStringLength;
typedef uint64_t (*HashFunc)(const char *key, size_t len);

struct TableColumn;

struct TableRow {
    sw_atomic_t lock_;
    pid_t lock_pid;
    /**
     * 1:used, 0:empty
     */
    uint8_t active;
    uint8_t key_len;
    /**
     * next slot
     */
    TableRow *next;
    /**
     * Hash Key
     */
    char key[SW_TABLE_KEY_SIZE];
    char data[0];

    void lock();

    void unlock() {
        sw_spinlock_release(&lock_);
    }

    void clear() {
        sw_memset_zero((char *) &lock_pid, sizeof(TableRow) - offsetof(TableRow, lock_pid));
    }

    void set_value(const TableColumn *col, const void *value, size_t vlen);
    void get_value(const TableColumn *col, double *dval) const;
    void get_value(const TableColumn *col, long *lval) const;
    void get_value(const TableColumn *col, char **strval, TableStringLength *strlen);
};

struct TableIterator {
    size_t row_memory_size_;
    uint32_t absolute_index = 0;
    uint32_t collision_index = 0;
    TableRow *current_;
    Mutex *mutex_;

    explicit TableIterator(size_t row_size);
    ~TableIterator();

    void reset();

    void lock() const {
        mutex_->lock();
    }

    void unlock() const {
        mutex_->unlock();
    }
};

enum TableFlag {
    SW_TABLE_FLAG_NEW_ROW = 1,
    SW_TABLE_FLAG_CONFLICT = 1u << 1,
};

struct TableColumn {
    enum Type {
        TYPE_INT = 1,
        TYPE_FLOAT,
        TYPE_STRING,
    };

    Type type;
    uint32_t size;
    std::string name;
    size_t index;

    TableColumn(const std::string &_name, Type _type, size_t _size);

    void clear(TableRow *row) const;
};

class Table {
    std::unordered_map<std::string, TableColumn *> *column_map;
    Mutex *mutex;
    size_t size;
    size_t mask;
    size_t item_size;
    size_t memory_size;
    float conflict_proportion;

    /**
     * total rows that in active state(shm)
     */
    sw_atomic_t row_num;

    TableRow **rows;
    FixedPool *pool;

    TableIterator *iterator;
    HashFunc hash_func;
    bool created;

    void *memory;

  public:
    std::vector<TableColumn *> *column_list;

    size_t conflict_count;
    sw_atomic_long_t insert_count;
    sw_atomic_long_t delete_count;
    sw_atomic_long_t update_count;
    uint32_t conflict_max_level;

    Table() = delete;
    ~Table() = delete;

    static Table *make(uint32_t rows_size, float conflict_proportion);
    size_t calc_memory_size() const;
    size_t get_memory_size() const;
    uint32_t get_available_slice_num() const;
    uint32_t get_total_slice_num() const;
    bool create();
    bool add_column(const std::string &name, enum TableColumn::Type type, size_t size);
    TableColumn *get_column(const std::string &key) const;
    TableRow *set(const char *key, uint16_t keylen, TableRow **rowlock, int *out_flags);
    TableRow *get(const char *key, uint16_t keylen, TableRow **rowlock) const;
    bool exists(const char *key, uint16_t keylen) const;
    bool del(const char *key, uint16_t keylen);
    void forward() const;
    // release shared memory
    void destroy();

    bool is_created() const {
        return created;
    }

    bool ready() const {
        return memory != nullptr;
    }

    void set_hash_func(HashFunc _fn) {
        hash_func = _fn;
    }

    size_t get_size() const {
        return size;
    }

    float get_conflict_proportion() const {
        return conflict_proportion;
    }

    size_t get_column_size() const {
        return column_map->size();
    }

    TableRow *get_by_index(uint32_t index) const {
        TableRow *row = rows[index];
        return row->active ? row : nullptr;
    }

    size_t count() const {
        return row_num;
    }

    bool exists(const std::string &key) const {
        return exists(key.c_str(), key.length());
    }

    TableRow *current() const {
        return iterator->current_;
    }

    void rewind() const {
        iterator->lock();
        iterator->reset();
        iterator->unlock();
    }

    void clear_row(TableRow *row) const {
        for (auto &i : *column_list) {
            i->clear(row);
        }
    }

  private:
    TableRow *hash(const char *key, int keylen) const {
        uint64_t hashv = hash_func(key, keylen);
        uint64_t index = hashv & mask;
        assert(index < size);
        return rows[index];
    }

    TableRow *alloc_row() const {
        lock();
        const auto new_row = static_cast<TableRow *>(pool->alloc(0));
        unlock();
        return new_row;
    }

    void free_row(TableRow *tmp) const {
        lock();
        tmp->clear();
        pool->free(tmp);
        unlock();
    }

    static void check_key_length(uint16_t *keylen) {
        if (*keylen >= SW_TABLE_KEY_SIZE) {
            *keylen = SW_TABLE_KEY_SIZE - 1;
        }
    }

    void init_row(TableRow *new_row, const char *key, int keylen) {
        sw_memset_zero(reinterpret_cast<char *>(new_row) + offsetof(TableRow, active),
                       sizeof(TableRow) - offsetof(TableRow, active));
        memcpy(new_row->key, key, keylen);
        new_row->key[keylen] = '\0';
        new_row->key_len = keylen;
        new_row->active = 1;
        sw_atomic_fetch_add(&(row_num), 1);
    }

    int lock() const {
        return mutex->lock();
    }

    int unlock() const {
        return mutex->unlock();
    }
};
}  // namespace swoole
ext/swoole/include/swoole_dtls.h000064400000004662151730541710013022 0ustar00/*
  +----------------------------------------------------------------------+
  | Swoole                                                               |
  +----------------------------------------------------------------------+
  | This source file is subject to version 2.0 of the Apache license,    |
  | that is bundled with this package in the file LICENSE, and is        |
  | available through the world-wide-web at the following url:           |
  | http://www.apache.org/licenses/LICENSE-2.0.html                      |
  | If you did not receive a copy of the Apache2.0 license and are unable|
  | to obtain it through the world-wide-web, please send a note to       |
  | license@swoole.com so we can mail you a copy immediately.            |
  +----------------------------------------------------------------------+
  | Author: Tianfeng Han  <rango@swoole.com>                             |
  +----------------------------------------------------------------------+
*/

#pragma once

#include "swoole_ssl.h"

#ifdef SW_SUPPORT_DTLS
#include <deque>

namespace swoole {
namespace dtls {
//-------------------------------------------------------------------------------
using Socket = network::Socket;

int BIO_write(BIO *b, const char *data, int dlen);
int BIO_read(BIO *b, char *data, int dlen);
long BIO_ctrl(BIO *b, int cmd, long larg, void *pargs);
int BIO_create(BIO *b);
int BIO_destroy(BIO *b);
BIO_METHOD *BIO_get_methods();
void BIO_meth_free();

struct Buffer {
    uint16_t length;
    uchar data[0];
};

struct Session {
    std::shared_ptr<SSLContext> ctx;
    bool listened = false;
    Socket *socket;
    std::deque<Buffer *> rxqueue;
    bool peek_mode = false;

    Session(Socket *_sock, const std::shared_ptr<SSLContext> &_ctx) {
        socket = _sock;
        ctx = _ctx;
    }

    ~Session() {
        while (!rxqueue.empty()) {
            Buffer *buffer = rxqueue.front();
            rxqueue.pop_front();
            sw_free(buffer);
        }
    }

    bool init();
    bool listen();

    void append(const char *data, ssize_t len);

    void append(Buffer *buffer) {
        rxqueue.push_back(buffer);
    }

    size_t get_buffer_length() const {
        size_t total_length = 0;
        for (const auto i : rxqueue) {
            total_length += i->length;
        }
        return total_length;
    }
};
//-------------------------------------------------------------------------------
}  // namespace dtls
}  // namespace swoole
#endif
ext/swoole/include/swoole_ssl.h000064400000012335151730541720012652 0ustar00/*
  +----------------------------------------------------------------------+
  | Swoole                                                               |
  +----------------------------------------------------------------------+
  | This source file is subject to version 2.0 of the Apache license,    |
  | that is bundled with this package in the file LICENSE, and is        |
  | available through the world-wide-web at the following url:           |
  | http://www.apache.org/licenses/LICENSE-2.0.html                      |
  | If you did not receive a copy of the Apache2.0 license and are unable|
  | to obtain it through the world-wide-web, please send a note to       |
  | license@php.net so we can mail you a copy immediately.               |
  +----------------------------------------------------------------------+
  | Author: Tianfeng Han  <rango@swoole.com>                             |
  +----------------------------------------------------------------------+
*/

#pragma once

#include "swoole.h"

#include <unordered_map>
#include <string>

#include <openssl/ssl.h>
#include <openssl/bio.h>
#include <openssl/err.h>
#include <openssl/crypto.h>
#include <openssl/x509.h>
#include <openssl/x509v3.h>
#include <openssl/rand.h>
#include <openssl/conf.h>
#include <openssl/opensslv.h>

#if OPENSSL_VERSION_NUMBER >= 0x10100000L
#define SW_SUPPORT_DTLS
#endif

#if defined(LIBRESSL_VERSION_NUMBER) && LIBRESSL_VERSION_NUMBER < 0x3000000fL
#undef SW_SUPPORT_DTLS
#endif

#ifdef OPENSSL_IS_BORINGSSL
#define BIO_CTRL_DGRAM_SET_CONNECTED 32
#define BIO_CTRL_DGRAM_SET_PEER 44
#define BIO_CTRL_DGRAM_SET_NEXT_TIMEOUT 45
#define BIO_dgram_get_peer(b, peer) (int) BIO_ctrl(b, BIO_CTRL_DGRAM_GET_PEER, 0, (char *) (peer))
#define OPENSSL_assert(x) assert(x)
#endif

enum swSSLCreateFlag {
    SW_SSL_SERVER = 1,
    SW_SSL_CLIENT = 2,
};

enum swSSLState {
    SW_SSL_STATE_HANDSHAKE = 0,
    SW_SSL_STATE_READY = 1,
    SW_SSL_STATE_WAIT_STREAM = 2,
};

enum swSSLVersion {
    SW_SSL_SSLv2 = 1u << 1,
    SW_SSL_SSLv3 = 1u << 2,
    SW_SSL_TLSv1 = 1u << 3,
    SW_SSL_TLSv1_1 = 1u << 4,
    SW_SSL_TLSv1_2 = 1u << 5,
    SW_SSL_TLSv1_3 = 1u << 6,
    SW_SSL_DTLS = 1u << 7,
};

#define SW_SSL_ALL (SW_SSL_SSLv2 | SW_SSL_SSLv3 | SW_SSL_TLSv1 | SW_SSL_TLSv1_1 | SW_SSL_TLSv1_2 | SW_SSL_TLSv1_3)

enum swSSLMethod {
    SW_SSLv23_METHOD = 0,
    SW_SSLv3_METHOD,
    SW_SSLv3_SERVER_METHOD,
    SW_SSLv3_CLIENT_METHOD,
    SW_SSLv23_SERVER_METHOD,
    SW_SSLv23_CLIENT_METHOD,
    SW_TLSv1_METHOD,
    SW_TLSv1_SERVER_METHOD,
    SW_TLSv1_CLIENT_METHOD,
#ifdef TLS1_1_VERSION
    SW_TLSv1_1_METHOD,
    SW_TLSv1_1_SERVER_METHOD,
    SW_TLSv1_1_CLIENT_METHOD,
#endif
#ifdef TLS1_2_VERSION
    SW_TLSv1_2_METHOD,
    SW_TLSv1_2_SERVER_METHOD,
    SW_TLSv1_2_CLIENT_METHOD,
#endif
#ifdef SW_SUPPORT_DTLS
    SW_DTLS_CLIENT_METHOD,
    SW_DTLS_SERVER_METHOD,
#endif
};

namespace swoole {

struct SSLContext {
    uchar http : 1;
    uchar http_v2 : 1;
    uchar prefer_server_ciphers : 1;
    uchar session_tickets : 1;
    uchar stapling : 1;
    uchar stapling_verify : 1;
    std::string ciphers;
    std::string ecdh_curve;
    std::string session_cache;
    std::string dhparam;
    std::string cert_file;
    std::string key_file;
    std::string passphrase;
    std::string client_cert_file;
#ifdef SSL_CTRL_SET_TLSEXT_HOSTNAME
    uchar disable_tls_host_name : 1;
    std::string tls_host_name;
#endif

#ifdef OPENSSL_IS_BORINGSSL
    uint8_t grease;
#endif

    std::string cafile;
    std::string capath;
    uint8_t verify_depth;
    uchar disable_compress : 1;
    uchar verify_peer : 1;
    uchar allow_self_signed : 1;
    uint32_t protocols;
    uint8_t create_flag;
    SSL_CTX *context;

    SSL_CTX *get_context() const {
        return context;
    }

    bool ready() const {
        return context != nullptr;
    }

    void set_protocols(uint32_t _protocols) {
        protocols = _protocols;
    }

    bool set_cert_file(const std::string &_cert_file) {
        if (access(_cert_file.c_str(), R_OK) < 0) {
            swoole_warning("ssl cert file[%s] not found", _cert_file.c_str());
            return false;
        }
        cert_file = _cert_file;
        return true;
    }

    bool set_key_file(const std::string &_key_file) {
        if (access(_key_file.c_str(), R_OK) < 0) {
            swoole_warning("ssl key file[%s] not found", _key_file.c_str());
            return false;
        }
        key_file = _key_file;
        return true;
    }

    bool set_client_cert_file(const std::string &file) {
        if (access(file.c_str(), R_OK) < 0) {
            swoole_warning("ssl client cert file[%s] not found", file.c_str());
            return false;
        }
        client_cert_file = file;
        return true;
    }

    bool create();
    bool set_capath() const;
    bool set_ciphers() const;
    bool set_client_certificate() const;
    bool set_ecdh_curve() const;
    bool set_dhparam() const;
    ~SSLContext();
};
}  // namespace swoole

void swoole_ssl_init();
void swoole_ssl_destroy();
void swoole_ssl_lock_callback(int mode, int type, const char *file, int line);
void swoole_ssl_server_http_advise(swoole::SSLContext &);
const char *swoole_ssl_get_error();
int swoole_ssl_get_ex_connection_index();
int swoole_ssl_get_ex_port_index();
std::string swoole_ssl_get_version_message();
ext/swoole/include/swoole_file.h000064400000011607151730541730012772 0ustar00/*
  +----------------------------------------------------------------------+
  | Swoole                                                               |
  +----------------------------------------------------------------------+
  | This source file is subject to version 2.0 of the Apache license,    |
  | that is bundled with this package in the file LICENSE, and is        |
  | available through the world-wide-web at the following url:           |
  | http://www.apache.org/licenses/LICENSE-2.0.html                      |
  | If you did not receive a copy of the Apache2.0 license and are unable|
  | to obtain it through the world-wide-web, please send a note to       |
  | license@swoole.com so we can mail you a copy immediately.            |
  +----------------------------------------------------------------------+
  | Author: Tianfeng Han  <rango@swoole.com>                             |
  +----------------------------------------------------------------------+
*/

#pragma once

#include "swoole_string.h"

#include <sys/file.h>
#include <sys/stat.h>
#include <fcntl.h>

namespace swoole {

ssize_t file_get_size(FILE *fp);
ssize_t file_get_size(int fd);
ssize_t file_get_size(const std::string &filename);
std::shared_ptr<String> file_get_contents(const std::string &filename);
bool file_put_contents(const std::string &filename, const char *content, size_t length);
bool file_exists(const std::string &filename);

typedef struct stat FileStatus;

class File {
    int fd_;
    int flags_;
    std::string path_;

  public:
    enum Flag {
        READ = O_RDONLY,
        WRITE = O_WRONLY,
        RW = O_RDWR,
        CREATE = O_CREAT,
        EXCL = O_EXCL,
        APPEND = O_APPEND,
    };

    explicit File(const int fd) {
        fd_ = fd;
        flags_ = 0;
    }

    File(int fd, const std::string &path) {
        fd_ = fd;
        path_ = path;
        flags_ = 0;
    }

    File(const std::string &path, int oflags);
    File(const std::string &path, int oflags, int mode);
    ~File();

    bool open(const std::string &path, int oflags, int mode = 0);
    bool close();
    bool stat(FileStatus *_stat) const;

    bool ready() const {
        return fd_ != -1;
    }

    ssize_t write(const void *_buf, size_t _n) const {
        return ::write(fd_, _buf, _n);
    }

    ssize_t write(const std::string &str) const {
        return ::write(fd_, str.c_str(), str.length());
    }

    ssize_t read(void *_buf, const size_t _n) const {
        return ::read(fd_, _buf, _n);
    }

    ssize_t pwrite(const void *_buf, size_t _n, off_t _offset) const {
        return ::pwrite(fd_, _buf, _n, _offset);
    }

    ssize_t pread(void *_buf, const size_t _n, off_t _offset) const {
        return ::pread(fd_, _buf, _n, _offset);
    }

    size_t write_all(const void *data, size_t len) const;
    size_t read_all(void *buf, size_t len) const;
    /**
     * Read one line of file, reading ends when __n - 1 bytes have been read,
     * or a newline (which is included in the return value),
     * or an EOF (read bytes less than __n)
     * Returns length of line on success, -1 otherwise.
     * NOTE: `buf` must be ended with zero.
     */
    ssize_t read_line(void *_buf, size_t _n) const;

    std::shared_ptr<String> read_content() const;

    bool sync() const {
        return ::fsync(fd_) == 0;
    }

    bool truncate(off_t length) const {
        return ::ftruncate(fd_, length) == 0;
    }

    off_t set_offset(off_t offset) const {
        return lseek(fd_, offset, SEEK_SET);
    }

    off_t get_offset() const {
        return lseek(fd_, 0, SEEK_CUR);
    }

    bool lock(int operation) const {
        return ::flock(fd_, operation) == 0;
    }

    bool unlock() const {
        return ::flock(fd_, LOCK_UN) == 0;
    }

    ssize_t get_size() const {
        return file_get_size(fd_);
    }

    void release() {
        fd_ = -1;
    }

    int get_fd() const {
        return fd_;
    }

    const std::string &get_path() const {
        return path_;
    }

    static bool exists(const std::string &file) {
        return ::access(file.c_str(), R_OK) == 0;
    }

    static bool remove(const std::string &file) {
        return ::remove(file.c_str()) == 0;
    }
};

File make_tmpfile();

class AsyncFile {
  private:
    int fd = -1;
    int flags_ = 0;
    mode_t mode_ = 0;
    std::string path_;

  public:
    AsyncFile(const std::string &path, int flags, int mode);
    ~AsyncFile();

    bool open(const std::string &path, int flags, mode_t mode);
    bool close() const;

    ssize_t read(void *buf, size_t count) const;
    ssize_t write(const void *buf, size_t count) const;
    ssize_t write(const String *buf) const {
        return write(SW_STRINGL(buf));
    }

    bool sync() const;
    bool truncate(off_t length) const;
    bool stat(FileStatus *statbuf) const;

    off_t get_offset() const;
    off_t set_offset(off_t offset) const;

    bool ready() const {
        return fd != -1;
    }
};
}  // namespace swoole
ext/swoole/include/swoole_coroutine_channel.h000064400000010262151730541730015546 0ustar00/*
  +----------------------------------------------------------------------+
  | Swoole                                                               |
  +----------------------------------------------------------------------+
  | This source file is subject to version 2.0 of the Apache license,    |
  | that is bundled with this package in the file LICENSE, and is        |
  | available through the world-wide-web at the following url:           |
  | http://www.apache.org/licenses/LICENSE-2.0.html                      |
  | If you did not receive a copy of the Apache2.0 license and are unable|
  | to obtain it through the world-wide-web, please send a note to       |
  | license@swoole.com so we can mail you a copy immediately.            |
  +----------------------------------------------------------------------+
  | Author: Tianfeng Han  <rango@swoole.com>                             |
  |         Twosee  <twose@qq.com>                                       |
  +----------------------------------------------------------------------+
*/

#pragma once

#include "swoole_coroutine.h"

#include <iostream>
#include <string>
#include <list>
#include <queue>

namespace swoole {
namespace coroutine {
//-------------------------------------------------------------------------------
class Channel {
  public:
    enum Opcode {
        PRODUCER = 1,
        CONSUMER = 2,
    };

    enum ErrorCode {
        ERROR_OK = 0,
        ERROR_TIMEOUT = -1,
        ERROR_CLOSED = -2,
        ERROR_CANCELED = -3,
    };

    struct TimeoutMessage {
        Channel *chan;
        Opcode type;
        Coroutine *co;
        bool error;
        TimerNode *timer;
    };

    void *pop(double timeout = -1);
    bool push(void *data, double timeout = -1);
    bool close();

    explicit Channel(size_t _capacity = 1) : capacity(_capacity) {}

    ~Channel() {
        if (!producer_queue.empty()) {
            swoole_error_log(SW_LOG_WARNING,
                             SW_ERROR_CO_HAS_BEEN_DISCARDED,
                             "channel is destroyed, %zu producers will be discarded",
                             producer_queue.size());
        }
        if (!consumer_queue.empty()) {
            swoole_error_log(SW_LOG_WARNING,
                             SW_ERROR_CO_HAS_BEEN_DISCARDED,
                             "channel is destroyed, %zu consumers will be discarded",
                             consumer_queue.size());
        }
    }

    bool is_closed() const {
        return closed;
    }

    bool is_empty() const {
        return data_queue.empty();
    }

    bool is_full() const {
        return data_queue.size() == capacity;
    }

    size_t length() const {
        return data_queue.size();
    }

    size_t consumer_num() const {
        return consumer_queue.size();
    }

    size_t producer_num() const {
        return producer_queue.size();
    }

    void *pop_data() {
        if (data_queue.empty()) {
            return nullptr;
        }
        void *data = data_queue.front();
        data_queue.pop();
        return data;
    }

    int get_error() const {
        return error_;
    }

  protected:
    size_t capacity = 1;
    bool closed = false;
    int error_ = 0;
    std::list<Coroutine *> producer_queue;
    std::list<Coroutine *> consumer_queue;
    std::queue<void *> data_queue;

    static void timer_callback(Timer *timer, TimerNode *tnode);

    void yield(Opcode type);

    void consumer_remove(Coroutine *co) {
        consumer_queue.remove(co);
    }

    void producer_remove(Coroutine *co) {
        producer_queue.remove(co);
    }

    Coroutine *pop_coroutine(Opcode type) {
        Coroutine *co;
        if (type == PRODUCER) {
            co = producer_queue.front();
            producer_queue.pop_front();
            swoole_trace_log(SW_TRACE_CHANNEL, "resume producer cid=%ld", co->get_cid());
        } else  // if (type == CONSUMER)
        {
            co = consumer_queue.front();
            consumer_queue.pop_front();
            swoole_trace_log(SW_TRACE_CHANNEL, "resume consumer cid=%ld", co->get_cid());
        }
        return co;
    }
};
//-------------------------------------------------------------------------------
}  // namespace coroutine
}  // namespace swoole
ext/swoole/include/swoole_iouring.h000064400000013020151730541740013517 0ustar00/*
  +----------------------------------------------------------------------+
  | Swoole                                                               |
  +----------------------------------------------------------------------+
  | This source file is subject to version 2.0 of the Apache license,    |
  | that is bundled with this package in the file LICENSE, and is        |
  | available through the world-wide-web at the following url:           |
  | http://www.apache.org/licenses/LICENSE-2.0.html                      |
  | If you did not receive a copy of the Apache2.0 license and are unable|
  | to obtain it through the world-wide-web, please send a note to       |
  | license@swoole.com so we can mail you a copy immediately.            |
  +----------------------------------------------------------------------+
  | Author: NathanFreeman  <mariasocute@163.com>                         |
  +----------------------------------------------------------------------+
*/

#pragma once

#include "swoole_coroutine.h"

#ifdef SW_USE_IOURING
#include <liburing.h>

using swoole::Coroutine;

enum swIouringFlag {
    SW_IOURING_DEFAULT = 0,
    SW_IOURING_SQPOLL = IORING_SETUP_SQPOLL,
};

namespace swoole {

struct IouringEvent;

struct IouringTimeout {
    int64_t tv_sec;
    int64_t tv_nsec;
};

class Iouring {
    uint32_t task_num = 0;
    uint32_t entries = SW_IOURING_QUEUE_SIZE;
    io_uring ring;
    std::queue<IouringEvent *> waiting_tasks;
    network::Socket *ring_socket = nullptr;
    Reactor *reactor = nullptr;

    IouringEvent *ready_events[SW_IOURING_QUEUE_SIZE];
    io_uring_cqe *cqes[SW_IOURING_QUEUE_SIZE];

    explicit Iouring(Reactor *reactor_);
    bool ready() const;
    void yield(IouringEvent *event);
    void resume(IouringEvent *event);
    bool cancel(IouringEvent *prev_event);
    void dispatch(IouringEvent *event);
    void submit(bool immediately);
    bool wakeup();

    io_uring_sqe *alloc_sqe() {
        return io_uring_get_sqe(&ring);
    }

    static Iouring *get_instance();
    static ssize_t execute(IouringEvent *event);
    static const char *get_opcode_name(enum io_uring_op opcode);

  public:
    ~Iouring();

    bool is_empty_waiting_tasks() const {
        return waiting_tasks.empty();
    }

    uint64_t get_task_num() const {
        return task_num;
    }

    uint32_t get_sq_space_left() const {
        return io_uring_sq_space_left(&ring);
    }

    uint32_t get_sq_capacity() const {
        return ring.sq.ring_entries;
    }

    uint32_t get_sq_used() const {
        return get_sq_capacity() - get_sq_space_left();
    }

    size_t get_waiting_task_num() const {
        return waiting_tasks.size();
    }

    float get_sq_usage_percent() const {
        return (float) get_sq_used() / get_sq_capacity() * 100.0f;
    }

    static int socket(int domain, int type, int protocol = 0, int flags = 0);
    static int open(const char *pathname, int flags, mode_t mode);
    static int connect(int fd, const struct sockaddr *addr, socklen_t len, double timeout = -1);
    static int accept(int fd, struct sockaddr *addr, socklen_t *len, int flags = 0, double timeout = -1);
    static int bind(int fd, const struct sockaddr *addr, socklen_t len);
    static int listen(int fd, int backlog);
    static int sleep(int tv_sec, int tv_nsec, int flags = 0);
    static int sleep(double seconds);
    static ssize_t recv(int fd, void *buf, size_t len, int flags, double timeout = -1);
    static ssize_t send(int fd, const void *buf, size_t len, int flags, double timeout = -1);
    static ssize_t recvmsg(int fd, struct msghdr *message, int flags, double timeout = -1);
    static ssize_t sendmsg(int fd, const struct msghdr *message, int flags, double timeout = -1);
    static ssize_t sendto(
        int fd, const void *buf, size_t n, int flags, const struct sockaddr *addr, socklen_t len, double timeout = -1);
    static ssize_t sendfile(int out_fd, int in_fd, off_t *offset, size_t size, double timeout = -1);
    static ssize_t recvfrom(int fd, void *_buf, size_t _n, sockaddr *_addr, socklen_t *_socklen, double timeout = -1);
    static ssize_t readv(int fd, const struct iovec *iovec, int count, double timeout = -1);
    static ssize_t writev(int fd, const struct iovec *iovec, int count, double timeout = -1);
    static int shutdown(int fd, int how);
    static int close(int fd);
    static ssize_t read(int fd, void *buf, size_t size, double timeout = -1);
    static ssize_t write(int fd, const void *buf, size_t size, double timeout = -1);
    static int rename(const char *oldpath, const char *newpath);
    static int mkdir(const char *pathname, mode_t mode);
    static int unlink(const char *pathname);
#ifdef HAVE_IOURING_STATX
    static int fstat(int fd, struct stat *statbuf);
    static int stat(const char *path, struct stat *statbuf);
#endif
    static int rmdir(const char *pathname);
    static int fsync(int fd);
    static int fdatasync(int fd);
    static pid_t wait(int *stat_loc, double timeout = -1);
    static pid_t waitpid(pid_t pid, int *stat_loc, int options, double timeout = -1);
    /**
     * Only supports listening to the readable and writable events of a single fd; nfds must be 1.
     */
    static int poll(struct pollfd *fds, nfds_t nfds, int timeout);
#ifdef HAVE_IOURING_FUTEX
    static int futex_wait(uint32_t *futex);
    static int futex_wakeup(uint32_t *futex);
#endif
#ifdef HAVE_IOURING_FTRUNCATE
    static int ftruncate(int fd, off_t length);
#endif

    static std::unordered_map<std::string, int> list_all_opcode();
    static int callback(Reactor *reactor, Event *event);
};
};  // namespace swoole
#endif
ext/swoole/include/swoole_pipe.h000064400000005150151730541740013005 0ustar00/*
  +----------------------------------------------------------------------+
  | Swoole                                                               |
  +----------------------------------------------------------------------+
  | This source file is subject to version 2.0 of the Apache license,    |
  | that is bundled with this package in the file LICENSE, and is        |
  | available through the world-wide-web at the following url:           |
  | http://www.apache.org/licenses/LICENSE-2.0.html                      |
  | If you did not receive a copy of the Apache2.0 license and are unable|
  | to obtain it through the world-wide-web, please send a note to       |
  | license@swoole.com so we can mail you a copy immediately.            |
  +----------------------------------------------------------------------+
  | Author: Tianfeng Han  <rango@swoole.com>                             |
  |         Twosee  <twose@qq.com>                                       |
  +----------------------------------------------------------------------+
*/

#pragma once

#include "swoole_socket.h"

enum swPipe_close_which {
    SW_PIPE_CLOSE_MASTER = 1,
    SW_PIPE_CLOSE_WORKER = 2,
    SW_PIPE_CLOSE_READ = 3,
    SW_PIPE_CLOSE_WRITE = 4,
    SW_PIPE_CLOSE_BOTH = 0,
};

namespace swoole {
class SocketPair {
  protected:
    bool blocking;
    double timeout;

    /**
     * master : socks[1], for write operation
     * worker : socks[0], for read operation
     */
    int socks[2]{};

    network::Socket *master_socket = nullptr;
    network::Socket *worker_socket = nullptr;

    void init_socket(int master_fd, int worker_fd);

  public:
    explicit SocketPair(bool _blocking) {
        blocking = _blocking;
        timeout = network::Socket::default_read_timeout;
    }
    ~SocketPair();

    ssize_t read(void *_buf, size_t length) const;
    ssize_t write(const void *_buf, size_t length) const;
    void clean() const;
    bool close(int which = 0);

    network::Socket *get_socket(bool _master) const {
        return _master ? master_socket : worker_socket;
    }

    bool ready() const {
        return master_socket != nullptr && worker_socket != nullptr;
    }

    void set_timeout(double _timeout) {
        timeout = _timeout;
        master_socket->set_timeout(timeout);
        worker_socket->set_timeout(timeout);
    }

    void set_blocking(bool _blocking);
};

class Pipe : public SocketPair {
  public:
    explicit Pipe(bool blocking);
};

class UnixSocket : public SocketPair {
    int protocol_;

  public:
    UnixSocket(bool blocking, int _protocol);
    bool set_buffer_size(size_t _size) const;
};

}  // namespace swoole
ext/swoole/include/swoole_server.h000064400000143341151730541750013364 0ustar00/*
  +----------------------------------------------------------------------+
  | Swoole                                                               |
  +----------------------------------------------------------------------+
  | This source file is subject to version 2.0 of the Apache license,    |
  | that is bundled with this package in the file LICENSE, and is        |
  | available through the world-wide-web at the following url:           |
  | http://www.apache.org/licenses/LICENSE-2.0.html                      |
  | If you did not receive a copy of the Apache2.0 license and are unable|
  | to obtain it through the world-wide-web, please send a note to       |
  | license@php.net so we can mail you a copy immediately.               |
  +----------------------------------------------------------------------+
  | Author: Tianfeng Han  <rango@swoole.com>                             |
  +----------------------------------------------------------------------+
*/

#pragma once

#include "swoole_string.h"
#include "swoole_socket.h"
#include "swoole_timer.h"
#include "swoole_reactor.h"
#include "swoole_signal.h"
#include "swoole_protocol.h"
#include "swoole_process_pool.h"
#include "swoole_pipe.h"
#include "swoole_channel.h"
#include "swoole_message_bus.h"

#ifdef SW_SUPPORT_DTLS
#include "swoole_dtls.h"
#endif

#ifdef __MACH__
#include <sys/syslimits.h>
#endif

#include <string>
#include <queue>
#include <thread>
#include <mutex>
#include <atomic>
#include <unordered_map>
#include <unordered_set>
#include <condition_variable>

//------------------------------------Server-------------------------------------------
namespace swoole {

namespace http_server {
struct Request;
struct RewriteRule;
class StaticHandler;
}  // namespace http_server

class Server;
struct Manager;
class Thread;

typedef std::function<void(void)> WorkerFn;

struct Session {
    SessionId id;
    int fd;
    uint32_t reactor_id : 8;
    uint32_t reserve_ : 24;
};

struct Connection {
    /**
     * It must be in the header. When set to 0, it means that connection does not exist.
     * One-write and multiple-read operation is thread-safe
     * system fd must be 0. en: signalfd, listen socket
     */
    uint8_t active;
    SocketType socket_type;
    int fd;
    int worker_id;
    SessionId session_id;
    //--------------------------------------------------------------
    uint8_t ssl;
    uint8_t ssl_ready;
    uint8_t overflow;
    uint8_t high_watermark;
    uint8_t http_upgrade;
    uint8_t http2_stream;
    uint8_t websocket_compression;
    // If it is equal to 1, it means server actively closed the connection
    uint8_t close_actively;
    uint8_t closed;
    uint8_t close_queued;
    uint8_t closing;
    uint8_t close_reset;
    uint8_t peer_closed;
    // protected connection, do not close connection when receiving/sending timeout
    uint8_t protect;
    uint8_t close_notify;
    uint8_t close_force;
    ReactorId reactor_id;
    uint16_t close_errno;
    int server_fd;
    sw_atomic_t recv_queued_bytes;
    uint32_t send_queued_bytes;
    uint16_t waiting_time;
    uint16_t local_port;
    uint16_t local_addr_index;
    TimerNode *timer;
    /**
     * socket address
     */
    network::Address info;
    /**
     * link anything, for kernel, do not use with application.
     */
    void *object;
    /**
     * socket, only operated in the main process
     */
    network::Socket *socket;
    /**
     * connect/recv/send/close time
     */
    double connect_time;
    double last_recv_time;
    double last_send_time;
    double last_dispatch_time;
    /**
     * bind uid
     */
    uint32_t uid;
    /**
     * upgrade websocket
     */
    uint8_t websocket_status;
    /**
     * unfinished data frame
     */
    String *websocket_buffer;

    String *ssl_client_cert;
    pid_t ssl_client_cert_pid;
    sw_atomic_t lock;
};

//------------------------------------ReactorThread-------------------------------------------
struct ReactorThread {
    int id;
    std::thread thread;
    network::Socket *notify_pipe = nullptr;
    uint64_t dispatch_count = 0;
    network::Socket *pipe_command = nullptr;
    TimerNode *heartbeat_timer = nullptr;
    MessageBus message_bus;

    int init(Server *serv, Reactor *reactor, uint16_t reactor_id);
    void shutdown(Reactor *reactor);
    int close_connection(Reactor *reactor, SessionId session_id);
    void clean();
};

struct ServerPortGS {
    sw_atomic_t connection_num;
    sw_atomic_t *connection_nums = nullptr;
    sw_atomic_long_t abort_count;
    sw_atomic_long_t accept_count;
    sw_atomic_long_t close_count;
    sw_atomic_long_t dispatch_count;
    sw_atomic_long_t request_count;
    sw_atomic_long_t response_count;
    sw_atomic_long_t total_recv_bytes;
    sw_atomic_long_t total_send_bytes;
};

struct ListenPort {
    uint16_t object_id;
    /**
     * tcp socket listen backlog
     */
    uint16_t backlog = SW_BACKLOG;
    bool listening = false;
    /**
     * open tcp_defer_accept option
     */
    int tcp_defer_accept = 0;
    /**
     * TCP_FASTOPEN
     */
    int tcp_fastopen = 0;
    /**
     * TCP KeepAlive
     */
    int tcp_keepidle = SW_TCP_KEEPIDLE;
    int tcp_keepinterval = SW_TCP_KEEPINTERVAL;
    int tcp_keepcount = SW_TCP_KEEPCOUNT;

    int tcp_user_timeout = 0;

    double max_idle_time = 0;

    int socket_buffer_size = network::Socket::default_buffer_size;
    uint32_t buffer_high_watermark = 0;
    uint32_t buffer_low_watermark = 0;

    SocketType type = SW_SOCK_TCP;
    uint8_t ssl = 0;
    std::string host;
    int port = 0;
    network::Socket *socket = nullptr;
    pthread_t thread_id = 0;

    uint16_t heartbeat_idle_time = 0;

    /**
     * check data eof
     */
    bool open_eof_check = false;
    /**
     * built-in http protocol
     */
    bool open_http_protocol = false;
    /**
     * built-in http2.0 protocol
     */
    bool open_http2_protocol = false;
    /**
     * built-in websocket protocol
     */
    bool open_websocket_protocol = false;
    /**
     * Relevant settings of websocket server
     */
    WebSocketSettings websocket_settings = {};
    /**
     *  one package: length check
     */
    bool open_length_check = false;
    /**
     * for mqtt protocol
     */
    bool open_mqtt_protocol = false;
    /**
     *  redis protocol
     */
    bool open_redis_protocol = false;
    /**
     * open tcp nodelay option
     */
    bool open_tcp_nodelay = false;
    /**
     * open tcp nopush option(for sendfile)
     */
    bool open_tcp_nopush = true;
    /**
     * open tcp keepalive
     */
    bool open_tcp_keepalive = false;
    /**
     * set socket option
     */
    int kernel_socket_recv_buffer_size = 0;
    int kernel_socket_send_buffer_size = 0;

    std::shared_ptr<SSLContext> ssl_context = nullptr;
    std::unordered_map<std::string, std::shared_ptr<SSLContext>> sni_contexts;

#ifdef SW_SUPPORT_DTLS
    std::unordered_map<int, dtls::Session *> *dtls_sessions = nullptr;
    dtls::Session *create_dtls_session(network::Socket *sock) const;
#endif

    bool ssl_is_enable() const {
        return get_ssl_context() != nullptr;
    }

    SSLContext *get_ssl_context() const {
        return ssl_context.get();
    }

    std::shared_ptr<SSLContext> dup_ssl_context() const {
        auto new_ctx = std::make_shared<SSLContext>();
        *new_ctx = *ssl_context;
        return new_ctx;
    }

    ServerPortGS *gs = nullptr;

    Protocol protocol = {};
    void *ptr = nullptr;

    int (*onRead)(Reactor *reactor, ListenPort *port, Event *event) = nullptr;

    bool is_dgram() const {
        return network::Socket::is_dgram(type);
    }

    bool is_dtls() const {
#ifdef SW_SUPPORT_DTLS
        return ssl_context && (ssl_context->protocols & SW_SSL_DTLS);
#else
        return false;
#endif
    }

    bool is_stream() const {
        return network::Socket::is_stream(type);
    }

    void set_eof_protocol(const std::string &eof, bool find_from_right = false);
    void set_length_protocol(uint32_t length_offset, char length_type, uint32_t body_offset);
    void set_stream_protocol();

    void set_package_max_length(uint32_t max_length) {
        protocol.package_max_length = max_length;
    }

    explicit ListenPort(Server *server);
    ~ListenPort() = default;
    int listen();
    void close();
    bool import(int sock);
    void init_protocol();
    const char *get_protocols() const;
    int create_socket();
    void close_socket();
    void destroy_http_request(Connection *conn);

    static int readable_callback_raw(Reactor *reactor, ListenPort *lp, Event *event);
    static int readable_callback_length(Reactor *reactor, ListenPort *lp, Event *event);
    static int readable_callback_eof(Reactor *reactor, ListenPort *lp, Event *event);
    static int readable_callback_http(Reactor *reactor, ListenPort *lp, Event *event);
    static int readable_callback_redis(Reactor *reactor, ListenPort *lp, Event *event);

    bool ssl_context_init();
    bool ssl_context_create(SSLContext *context) const;
    bool ssl_create(network::Socket *sock);
    bool ssl_add_sni_cert(const std::string &name, const std::shared_ptr<SSLContext> &ctx);
    static bool ssl_matches_wildcard_name(const char *subject_name, const char *cert_name);
    bool ssl_init() const;

    bool set_ssl_key_file(const std::string &file) const {
        return ssl_context->set_key_file(file);
    }

    bool set_ssl_cert_file(const std::string &file) const {
        return ssl_context->set_cert_file(file);
    }

    void set_ssl_cafile(const std::string &file) const {
        ssl_context->cafile = file;
    }

    bool set_ssl_client_cert_file(const std::string &file) const {
        return ssl_context->set_client_cert_file(file);
    }

    void set_ssl_capath(const std::string &path) const {
        ssl_context->capath = path;
    }

    void set_ssl_passphrase(const std::string &str) const {
        ssl_context->passphrase = str;
    }

#ifdef SSL_CTRL_SET_TLSEXT_HOSTNAME
    void set_tls_host_name(const std::string &str) const {
        ssl_context->tls_host_name = str;
        // if user set empty ssl_host_name, disable it, otherwise the underlying may set it automatically
        ssl_context->disable_tls_host_name = ssl_context->tls_host_name.empty();
    }
#endif

    void set_ssl_dhparam(const std::string &file) const {
        ssl_context->dhparam = file;
    }

    void set_ssl_ecdh_curve(const std::string &str) const {
        ssl_context->ecdh_curve = str;
    }

    void set_ssl_protocols(long protocols) const {
        if (protocols & SW_SSL_DTLS) {
#ifndef SW_SUPPORT_DTLS
            protocols ^= SW_SSL_DTLS;
#else
            if (is_dgram()) {
                protocols ^= SW_SSL_DTLS;
            }
#endif
        }
        ssl_context->protocols = protocols;
    }

    void set_ssl_disable_compress(bool value) const {
        ssl_context->disable_compress = value;
    }

    void set_ssl_verify_peer(bool value) const {
        ssl_context->verify_peer = value;
    }

    void set_ssl_allow_self_signed(bool value) const {
        ssl_context->allow_self_signed = value;
    }

    void set_ssl_verify_depth(uint8_t value) const {
        ssl_context->verify_depth = value;
    }

    void set_ssl_ciphers(const std::string &str) const {
        ssl_context->ciphers = str;
    }

    void set_ssl_prefer_server_ciphers(bool value) const {
        ssl_context->prefer_server_ciphers = value;
    }

#ifdef OPENSSL_IS_BORINGSSL
    void set_ssl_grease(uint8_t value) {
        ssl_context->grease = value;
    }
#endif

    const std::string &get_ssl_cert_file() const {
        return ssl_context->cert_file;
    }

    const std::string &get_ssl_key_file() const {
        return ssl_context->key_file;
    }

    const std::string &get_ssl_client_cert_file() const {
        return ssl_context->client_cert_file;
    }

    const std::string &get_ssl_capath() const {
        return ssl_context->capath;
    }

    const std::string &get_ssl_cafile() const {
        return ssl_context->cafile;
    }

    bool get_ssl_verify_peer() const {
        return ssl_context->verify_peer;
    }

    bool get_ssl_allow_self_signed() const {
        return ssl_context->allow_self_signed;
    }

    uint32_t get_ssl_protocols() const {
        return ssl_context->protocols;
    }

    bool has_sni_contexts() const {
        return !sni_contexts.empty();
    }

    static int ssl_server_sni_callback(SSL *ssl, int *al, void *arg);
    void clear_protocol();

    network::Socket *get_socket() const {
        return socket;
    }

    int get_port() const {
        return port;
    }

    const char *get_host() const {
        return host.c_str();
    }

    SocketType get_type() const {
        return type;
    }

    int get_fd() const {
        return socket ? socket->fd : -1;
    }

    size_t get_connection_num() const;
};

struct ServerGS {
    pid_t master_pid;
    pid_t manager_pid;

    SessionId session_round;
    sw_atomic_t start;
    sw_atomic_t shutdown;

    int max_fd;
    int min_fd;

    bool onstart_called;
    time_t start_time;
    sw_atomic_t connection_num;
    sw_atomic_t *connection_nums = nullptr;
    sw_atomic_t tasking_num;
    uint32_t max_concurrency;
    sw_atomic_t concurrency;
    sw_atomic_long_t abort_count;
    sw_atomic_long_t accept_count;
    sw_atomic_long_t close_count;
    sw_atomic_long_t dispatch_count;
    sw_atomic_long_t request_count;
    sw_atomic_long_t response_count;
    sw_atomic_long_t total_recv_bytes;
    sw_atomic_long_t total_send_bytes;
    sw_atomic_long_t pipe_packet_msg_id;
    sw_atomic_long_t task_count;

    sw_atomic_t spinlock;

    Barrier manager_barrier;

    ProcessPool task_workers;
    ProcessPool event_workers;
};

class Factory {
  protected:
    Server *server_;

  public:
    explicit Factory(Server *_server) {
        server_ = _server;
    }
    pid_t spawn_event_worker(Worker *worker) const;
    pid_t spawn_user_worker(Worker *worker) const;
    pid_t spawn_task_worker(Worker *worker) const;
    void kill_user_workers() const;
    void kill_event_workers() const;
    void kill_task_workers() const;
    void check_worker_exit_status(Worker *worker, const ExitStatus &exit_status) const;
    virtual ~Factory() = default;
    virtual bool start() = 0;
    virtual bool shutdown() = 0;
    virtual bool dispatch(SendData *) = 0;
    virtual bool finish(SendData *) = 0;
    virtual bool notify(DataHead *) = 0;
    virtual bool end(SessionId session_id, int flags) = 0;
};

class BaseFactory : public Factory {
  public:
    explicit BaseFactory(Server *server);
    ~BaseFactory() override;
    bool start() override;
    bool shutdown() override;
    bool dispatch(SendData *) override;
    bool finish(SendData *) override;
    bool notify(DataHead *) override;
    bool end(SessionId session_id, int flags) override;
    bool forward_message(const Session *session, SendData *data) const;
};

class ProcessFactory : public Factory {
  public:
    explicit ProcessFactory(Server *server);
    ~ProcessFactory() override;
    bool start() override;
    bool shutdown() override;
    bool dispatch(SendData *) override;
    bool finish(SendData *) override;
    bool notify(DataHead *) override;
    bool end(SessionId session_id, int flags) override;
};

struct ThreadReloadTask {
    Server *server_;
    uint16_t worker_num;
    uint16_t reloaded_num;

    bool is_completed() const {
        return reloaded_num == worker_num;
    }

    ThreadReloadTask(Server *_server, bool _reload_all_workers);
    ~ThreadReloadTask() = default;
};

class ThreadFactory : public BaseFactory {
    std::vector<std::shared_ptr<Thread>> threads_;
    std::mutex lock_;
    std::condition_variable cv_;
    std::queue<Worker *> queue_;
    bool reload_all_workers = false;
    sw_atomic_t reloading = 0;
    std::shared_ptr<ThreadReloadTask> reload_task;
    void at_thread_enter(WorkerId id, int process_type);
    void at_thread_exit(Worker *worker);
    void create_message_bus() const;
    void destroy_message_bus();
    void do_reload();
    void push_to_wait_queue(Worker *worker);

  public:
    explicit ThreadFactory(Server *server);
    ~ThreadFactory() override;
    WorkerId get_manager_thread_id() const;
    WorkerId get_master_thread_id() const;
    void spawn_event_worker(WorkerId i);
    void spawn_task_worker(WorkerId i);
    void spawn_user_worker(WorkerId i);
    void spawn_manager_thread(WorkerId i);
    void terminate_manager_thread();
    void wait();
    bool reload(bool reload_all_workers);
    bool start() override;
    bool shutdown() override;
};

enum ServerEventType {
    // recv data payload
    SW_SERVER_EVENT_RECV_DATA,
    SW_SERVER_EVENT_RECV_DGRAM,
    // send data
    SW_SERVER_EVENT_SEND_DATA,
    SW_SERVER_EVENT_SEND_FILE,
    // connection event
    SW_SERVER_EVENT_CLOSE,
    SW_SERVER_EVENT_CONNECT,
    SW_SERVER_EVENT_CLOSE_FORCE,
    SW_SERVER_EVENT_CLOSE_FORWARD,
    // task
    SW_SERVER_EVENT_TASK,
    SW_SERVER_EVENT_FINISH,
    // pipe
    SW_SERVER_EVENT_PIPE_MESSAGE,
    // event operate
    SW_SERVER_EVENT_PAUSE_RECV,
    SW_SERVER_EVENT_RESUME_RECV,
    // buffer event
    SW_SERVER_EVENT_BUFFER_FULL,
    SW_SERVER_EVENT_BUFFER_EMPTY,
    // process message
    SW_SERVER_EVENT_INCOMING,
    SW_SERVER_EVENT_SHUTDOWN,
    SW_SERVER_EVENT_COMMAND_REQUEST,
    SW_SERVER_EVENT_COMMAND_RESPONSE,
    SW_SERVER_EVENT_SHUTDOWN_SIGNAL,
};

class Server {
  public:
    typedef int (*DispatchFunction)(Server *, Connection *, SendData *);

    struct Command {
        typedef std::function<void(Server *, const std::string &msg)> Callback;
        typedef std::function<std::string(Server *, const std::string &msg)> Handler;
        enum ProcessType {
            MASTER = 1u << 1,
            REACTOR_THREAD = 1u << 2,
            EVENT_WORKER = 1u << 3,
            TASK_WORKER = 1u << 4,
            MANAGER = 1u << 5,
            ALL_PROCESS = MASTER | REACTOR_THREAD | EVENT_WORKER | TASK_WORKER | MANAGER,
        };
        int id;
        int accepted_process_types;
        std::string name;
    };

    struct MultiTask {
        uint16_t count;
        std::unordered_map<TaskId, uint16_t> map;

        std::function<TaskId(uint16_t index, EventData *buf)> pack;
        std::function<void(uint16_t index, EventData *result)> unpack;
        std::function<void(uint16_t index)> fail;

        explicit MultiTask(uint16_t n) {
            count = n;
        }

        int find(TaskId task_id);
    };

    enum Mode {
        MODE_BASE = 1,
        MODE_PROCESS = 2,
        MODE_THREAD = 3,
    };

    enum TaskIpcMode {
        TASK_IPC_UNIXSOCK = 1,
        TASK_IPC_MSGQUEUE = 2,
        TASK_IPC_PREEMPTIVE = 3,
        TASK_IPC_STREAM = 4,
    };

    enum ThreadType {
        THREAD_NORMAL = 0,
        THREAD_MASTER = 1,
        THREAD_REACTOR = 2,
        THREAD_HEARTBEAT = 3,
        THREAD_WORKER = 4,
    };

    enum DispatchMode {
        DISPATCH_ROUND = 1,
        DISPATCH_FDMOD = 2,
        DISPATCH_IDLE_WORKER = 3,
        DISPATCH_IPMOD = 4,
        DISPATCH_UIDMOD = 5,
        DISPATCH_USERFUNC = 6,
        DISPATCH_CO_CONN_LB = 8,
        DISPATCH_CO_REQ_LB = 9,
        DISPATCH_CONCURRENT_LB = 10,
    };

    enum FactoryDispatchResult {
        DISPATCH_RESULT_DISCARD_PACKET = -1,
        DISPATCH_RESULT_CLOSE_CONNECTION = -2,
        DISPATCH_RESULT_USERFUNC_FALLBACK = -3,
    };

    // deprecated, will be removed in the next minor version
    enum HookType {
        HOOK_MASTER_START,
        HOOK_MASTER_TIMER,
        HOOK_REACTOR_START,
        HOOK_WORKER_START,
        HOOK_TASK_WORKER_START,
        HOOK_MASTER_CONNECT,
        HOOK_REACTOR_CONNECT,
        HOOK_WORKER_CONNECT,
        HOOK_REACTOR_RECEIVE,
        HOOK_WORKER_RECEIVE,
        HOOK_REACTOR_CLOSE,
        HOOK_WORKER_CLOSE,
        HOOK_MANAGER_START,
        HOOK_MANAGER_TIMER,
        HOOK_PROCESS_TIMER,
        HOOK_END = SW_MAX_HOOK_TYPE - 1,
    };

    enum CloseFlag {
        CLOSE_RESET = 1u << 1,
        CLOSE_ACTIVELY = 1u << 2,
    };

    /**
     * reactor thread/process num
     */
    uint16_t reactor_num = 0;
    /**
     * worker process num
     */
    uint32_t worker_num = 0;

    uint8_t dgram_port_num = 0;

    /**
     * package dispatch mode
     */
    uint8_t dispatch_mode = DISPATCH_FDMOD;

    /**
     * No idle work process is available.
     */
    bool scheduler_warning = false;

    int worker_uid = 0;
    int worker_groupid = 0;

    /**
     * worker process max request
     */
    uint32_t max_request = 0;
    uint32_t max_request_grace = 0;

    network::Socket *udp_socket_ipv4 = nullptr;
    network::Socket *udp_socket_ipv6 = nullptr;
    network::Socket *dgram_socket = nullptr;

    uint32_t max_wait_time = SW_WORKER_MAX_WAIT_TIME;
    uint32_t worker_max_concurrency = UINT_MAX;

    /*----------------------------Reactor schedule--------------------------------*/
    sw_atomic_t worker_round_id = 0;

    /**
     * worker(worker and task_worker) process chroot / user / group
     */
    std::string chroot_;
    std::string user_;
    std::string group_;

    /**
     * run as a daemon process
     */
    bool daemonize = false;
    /**
     * have dgram socket
     */
    bool have_dgram_sock = false;
    /**
     * have stream socket
     */
    bool have_stream_sock = false;
    /**
     * open cpu affinity setting
     */
    bool open_cpu_affinity = false;
    /**
     * disable notice when use SW_DISPATCH_ROUND and SW_DISPATCH_QUEUE
     */
    bool disable_notify = false;
    /**
     * discard the timeout request
     */
    bool discard_timeout_request = false;
    /**
     * parse cookie header
     */
    bool http_parse_cookie = true;
    /**
     * parse x-www-form-urlencoded data
     */
    bool http_parse_post = true;
    /**
     * parse multipart/form-data files to match $_FILES
     */
    bool http_parse_files = false;
    /**
     * http content compression
     */
    bool http_compression = false;
    /**
     * RFC-7692
     */
    bool websocket_compression = false;
    /**
     * handle static files
     */
    bool enable_static_handler = false;
    /**
     * show file list in the current directory
     */
    bool http_autoindex = false;
    /**
     * enable onConnect/onClose event when use dispatch_mode=1/3
     */
    bool enable_unsafe_event = false;
    /**
     * waiting for worker onConnect callback function to return
     */
    bool enable_delay_receive = false;
    /**
     * reuse port
     */
    bool enable_reuse_port = false;
    /**
     * asynchronous reloading
     */
    bool reload_async = true;
    /**
     * use event object
     */
    bool event_object = false;
    /**
     * use task object
     */
    bool task_object = false;
    /**
     * enable coroutine in task worker
     */
    bool task_enable_coroutine = false;
    /**
     * yield coroutine when the output buffer is full
     */
    bool send_yield = true;
    /**
     * enable coroutine
     */
    bool enable_coroutine = true;
    /**
     * disable multi-threads
     */
    bool single_thread = false;
    /**
     * server status
     */
    bool running = true;

    int *cpu_affinity_available = nullptr;
    int cpu_affinity_available_num = 0;

    UnixSocket *pipe_command = nullptr;
    MessageBus message_bus;

    double send_timeout = 0;

    uint16_t heartbeat_check_interval = 0;

    time_t reload_time = 0;
    time_t warning_time = 0;
    long timezone_ = 0;
    TimerNode *master_timer = nullptr;
    TimerNode *heartbeat_timer = nullptr;

    /* buffer output/input setting*/
    uint32_t output_buffer_size = UINT_MAX;
    uint32_t input_buffer_size = SW_INPUT_BUFFER_SIZE;
    uint32_t max_queued_bytes = 0;

    /**
     * the master process and worker process communicate using unix socket dgram.
     * ipc_max_size represents the maximum size of each datagram,
     * which is obtained from the kernel send buffer of unix socket in swServer_set_ipc_max_size function.
     */
    uint32_t ipc_max_size = SW_IPC_MAX_SIZE;

    void *private_data_1 = nullptr;
    void *private_data_2 = nullptr;
    void *private_data_3 = nullptr;
    void *private_data_4 = nullptr;

    Factory *factory_ = nullptr;
    Manager *manager_ = nullptr;

    std::vector<ListenPort *> ports;
    std::vector<std::shared_ptr<UnixSocket>> worker_pipes;

    ListenPort *get_primary_port() const {
        return ports.front();
    }

    Mode get_mode() const {
        return mode_;
    };

    /**
     * This method can only be used for INET ports and cannot obtain Unix socket ports.
     */
    ListenPort *get_port(int _port) const {
        for (auto port : ports) {
            if (port->port == _port || _port == 0) {
                return port;
            }
        }
        return nullptr;
    }

    ListenPort *get_port(SocketType type, const char *host, int _port) const {
        for (auto port : ports) {
            if (port->port == _port && port->type == type && strcmp(host, port->host.c_str()) == 0) {
                return port;
            }
        }
        return nullptr;
    }

    ListenPort *get_port_by_server_fd(const int server_fd) const {
        return static_cast<ListenPort *>(connection_list[server_fd].object);
    }

    ListenPort *get_port_by_fd(int fd) const {
        return get_port_by_server_fd(connection_list[fd].server_fd);
    }

    ListenPort *get_port_by_session_id(SessionId session_id) const {
        const Connection *conn = get_connection_by_session_id(session_id);
        if (!conn) {
            return nullptr;
        }
        return get_port_by_fd(conn->fd);
    }

    uint32_t get_package_max_length(Connection *conn) {
        return get_port_by_fd(conn->fd)->protocol.package_max_length;
    }

    network::Socket *get_server_socket(int fd) const {
        return connection_list[fd].socket;
    }

    network::Socket *get_command_reply_socket() const {
        return is_base_mode() ? get_worker(0)->pipe_master : pipe_command->get_socket(false);
    }

    network::Socket *get_worker_pipe_master(WorkerId id) const {
        return get_worker(id)->pipe_master;
    }

    network::Socket *get_worker_pipe_worker(WorkerId id) const {
        return get_worker(id)->pipe_worker;
    }

    network::Socket *get_pipe_socket_in_message_bus(network::Socket *_socket) {
        if (is_thread_mode()) {
            return get_worker_message_bus()->get_pipe_socket(_socket);
        } else {
            return _socket;
        }
    }

    network::Socket *get_worker_pipe_master_in_message_bus(const Worker *worker) {
        return get_pipe_socket_in_message_bus(worker->pipe_master);
    }

    network::Socket *get_worker_pipe_worker_in_message_bus(const Worker *worker) {
        return get_pipe_socket_in_message_bus(worker->pipe_worker);
    }

    network::Socket *get_worker_pipe_master_in_message_bus(WorkerId id) {
        return get_worker_pipe_master_in_message_bus(get_worker(id));
    }

    network::Socket *get_worker_pipe_worker_in_message_bus(WorkerId id) {
        return get_worker_pipe_worker_in_message_bus(get_worker(id));
    }

    /**
     * [Worker|Master]
     */
    network::Socket *get_reactor_pipe_socket(const SessionId session_id, int reactor_id) const {
        const int pipe_index = session_id % reactor_pipe_num;
        /**
         * pipe_worker_id: The pipe in which worker.
         */
        int pipe_worker_id = reactor_id + (pipe_index * reactor_num);
        Worker *worker = get_worker(pipe_worker_id);
        return worker->pipe_worker;
    }

    /**
     *  task process
     */
    uint32_t task_worker_num = 0;
    uint8_t task_ipc_mode = TASK_IPC_UNIXSOCK;
    uint32_t task_max_request = 0;
    uint32_t task_max_request_grace = 0;
    std::vector<std::shared_ptr<Pipe>> task_notify_pipes;
    EventData *task_results = nullptr;

    /**
     * Used for process management, saving the mapping relationship between PID and worker pointers
     */
    std::unordered_map<pid_t, Worker *> user_worker_map;
    /**
     * Shared memory, sharing state between processes
     */
    Worker *user_workers = nullptr;

    std::unordered_map<std::string, Command> commands;
    std::unordered_map<int, Command::Handler> command_handlers;
    std::unordered_map<int64_t, Command::Callback> command_callbacks;
    int command_current_id = 1;
    int64_t command_current_request_id = 1;

    Worker *workers = nullptr;
    ServerGS *gs = nullptr;

    std::shared_ptr<std::unordered_set<std::string>> locations = nullptr;
    std::shared_ptr<std::vector<std::string>> http_index_files = nullptr;
    std::shared_ptr<std::unordered_set<std::string>> http_compression_types = nullptr;

    Barrier reactor_thread_barrier = {};

    /**
     * temporary directory for HTTP uploaded file.
     */
    std::string upload_tmp_dir = "/tmp";
    /**
     * Write the uploaded file in form-data to disk file
     */
    size_t upload_max_filesize = 0;
    /**
     * http compression level for gzip/br
     */
    uint8_t http_compression_level = 0;
    uint32_t compression_min_length;
    /**
     * master process pid
     */
    std::string pid_file;

    std::queue<String *> *buffer_pool = nullptr;

    const Allocator *recv_buffer_allocator = &SwooleG.std_allocator;
    size_t recv_buffer_size = SW_BUFFER_SIZE_BIG;

    int manager_alarm = 0;

    /**
     * message queue key
     */
    uint64_t message_queue_key = 0;

    void *hooks[SW_MAX_HOOK_TYPE] = {};

    /*----------------------------Event Callback--------------------------------*/
    /**
     * Master Process
     */
    std::function<void(Server *)> onStart;
    std::function<void(Server *)> onBeforeShutdown;
    std::function<void(Server *)> onShutdown;
    /**
     * Manager Process
     */
    std::function<void(Server *)> onManagerStart;
    std::function<void(Server *)> onManagerStop;
    std::function<void(Server *, Worker *, const ExitStatus &)> onWorkerError;
    std::function<void(Server *)> onBeforeReload;
    std::function<void(Server *)> onAfterReload;
    /**
     * Worker Process
     */
    std::function<void(Server *, EventData *)> onPipeMessage;
    std::function<void(Server *, Worker *)> onWorkerStart;
    std::function<void(Server *, Worker *)> onWorkerStop;
    std::function<void(Server *, Worker *)> onWorkerExit;
    std::function<void(Server *, Worker *)> onUserWorkerStart;
    /**
     * Connection
     */
    std::function<int(Server *, RecvData *)> onReceive;
    std::function<int(Server *, RecvData *)> onPacket;
    std::function<void(Server *, DataHead *)> onClose;
    std::function<void(Server *, DataHead *)> onConnect;
    std::function<void(Server *, DataHead *)> onBufferFull;
    std::function<void(Server *, DataHead *)> onBufferEmpty;
    /**
     * Task Worker
     */
    std::function<int(Server *, EventData *)> onTask;
    std::function<int(Server *, EventData *)> onFinish;
    /**
     * for MessageBus
     */
    std::function<uint64_t(void)> msg_id_generator;
    /**
     * Hook
     */
    int (*dispatch_func)(Server *, Connection *, SendData *) = nullptr;

    explicit Server(Mode _mode = MODE_BASE);
    ~Server();

    bool set_document_root(const std::string &path);
    void add_static_handler_location(const std::string &);
    void add_static_handler_index_files(const std::string &);
    bool select_static_handler(const http_server::Request *request, const Connection *conn);
    bool apply_rewrite_rules(http_server::StaticHandler *handler);
    void add_http_compression_type(const std::string &type);
    void add_rewrite_rule(const std::string &pattern, const std::string &replacement);

    int create();
    bool create_worker_pipes();

    int start();
    void destroy();
    bool reload(bool reload_all_workers) const;
    bool shutdown();

    int add_worker(Worker *worker);
    ListenPort *add_port(SocketType type, const char *host, int port);
    int add_systemd_socket();
    void add_hook(enum HookType type, const Callback &func, int push_back);
    bool add_command(const std::string &command, int accepted_process_types, const Command::Handler &func);
    Connection *add_connection(const ListenPort *ls, network::Socket *_socket, int server_fd);
    const char *get_local_addr(Connection *conn);
    const char *get_remote_addr(Connection *conn);
    void abort_connection(Reactor *reactor, const ListenPort *ls, network::Socket *_socket) const;
    void abort_worker(Worker *worker) const;
    void reset_worker_counter(Worker *worker) const;
    int connection_incoming(Reactor *reactor, Connection *conn) const;

    uint32_t get_idle_worker_num() const;
    int get_idle_task_worker_num() const;
    int get_tasking_num() const;

    TaskId get_task_id(const EventData *task) const {
        return get_task_worker_pool()->get_task_id(task);
    }

    static uint16_t get_command_id(const EventData *cmd) {
        return cmd->info.server_fd;
    }

    EventData *get_task_result() const {
        return &(task_results[swoole_get_worker_id()]);
    }

    WorkerId get_task_src_worker_id(const EventData *task) const {
        return get_task_worker_pool()->get_task_src_worker_id(task);
    }

    int get_minfd() const {
        return gs->min_fd;
    }

    int get_maxfd() const {
        return gs->max_fd;
    }

    void set_maxfd(int maxfd) const {
        gs->max_fd = maxfd;
    }

    void set_minfd(int minfd) const {
        gs->min_fd = minfd;
    }

    pid_t get_master_pid() const {
        return gs->master_pid;
    }

    pid_t get_manager_pid() const {
        return gs->manager_pid;
    }

    pid_t get_worker_pid(WorkerId worker_id) const {
        return get_worker(worker_id)->pid;
    }

    const std::string &get_document_root() {
        return document_root;
    }

    String *get_recv_buffer(network::Socket *_socket) const {
        String *buffer = _socket->recv_buffer;
        if (buffer == nullptr) {
            buffer = new String(SW_BUFFER_SIZE_BIG, recv_buffer_allocator);
            _socket->recv_buffer = buffer;
        }

        return buffer;
    }

    MessageBus *get_worker_message_bus() {
#ifdef SW_THREAD
        return sw_likely(is_thread_mode()) ? SwooleTG.message_bus : &message_bus;
#else
        return &message_bus;
#endif
    }

    uint32_t get_worker_buffer_num() const {
        return is_base_mode() ? 1 : reactor_num + dgram_port_num;
    }

    ProcessPool *get_task_worker_pool() const {
        return &gs->task_workers;
    }

    ProcessPool *get_event_worker_pool() const {
        return &gs->event_workers;
    }

    bool is_support_unsafe_events() const {
        if (is_hash_dispatch_mode()) {
            return true;
        } else {
            return enable_unsafe_event;
        }
    }

    bool is_process_mode() const {
        return mode_ == MODE_PROCESS;
    }

    bool is_base_mode() const {
        return mode_ == MODE_BASE;
    }

    bool is_thread_mode() const {
        return mode_ == MODE_THREAD;
    }

    bool is_enable_coroutine() const {
        if (is_task_worker()) {
            return task_enable_coroutine;
        } else if (is_manager()) {
            return false;
        } else {
            return enable_coroutine;
        }
    }

    bool is_master_thread() const {
        return swoole_get_thread_type() == THREAD_MASTER;
    }

    bool is_hash_dispatch_mode() const {
        return dispatch_mode == DISPATCH_FDMOD || dispatch_mode == DISPATCH_IPMOD ||
               dispatch_mode == DISPATCH_CO_CONN_LB;
    }

    bool is_support_send_yield() const {
        return is_hash_dispatch_mode();
    }

    bool if_require_packet_callback(const ListenPort *port, bool isset) const {
        return (port->is_dgram() && !port->ssl && !isset);
    }

    bool if_require_receive_callback(const ListenPort *port, bool isset) const {
        return (((port->is_dgram() && port->ssl) || port->is_stream()) && !isset);
    }

    bool if_forward_message(const Session *session) const {
        return session->reactor_id != swoole_get_worker_id();
    }

    Worker *get_worker(uint16_t worker_id) const;
    bool kill_worker(int worker_id);
    void stop_async_worker(Worker *worker);

    Pipe *get_pipe_object(int pipe_fd) const {
        return static_cast<Pipe *>(connection_list[pipe_fd].object);
    }

    size_t get_all_worker_num() const {
        return get_core_worker_num() + get_user_worker_num();
    }

    size_t get_user_worker_num() const {
        return user_worker_list.size();
    }

    size_t get_core_worker_num() const {
        return worker_num + task_worker_num;
    }

    ReactorThread *get_thread(int reactor_id) const {
        return &reactor_threads[reactor_id];
    }

    bool is_started() const {
        return gs->start;
    }

    bool is_created() const {
        return factory_ != nullptr;
    }

    bool is_running() const {
        return running;
    }

    bool is_master() const {
        return swoole_get_worker_type() == SW_MASTER;
    }

    bool is_worker() const {
        return swoole_get_worker_type() == SW_EVENT_WORKER;
    }

    bool is_event_worker() const {
        return is_worker();
    }

    bool is_task_worker() const {
        return swoole_get_worker_type() == SW_TASK_WORKER;
    }

    bool is_manager() const {
        return swoole_get_worker_type() == SW_MANAGER;
    }

    bool is_user_worker() const {
        return swoole_get_worker_type() == SW_USER_WORKER;
    }

    bool is_worker_thread() const {
        return is_thread_mode() && swoole_get_thread_type() == THREAD_WORKER;
    }

    bool is_worker_process() const {
        return !is_thread_mode() && (is_worker() || is_task_worker());
    }

    bool is_reactor_thread() {
        return swoole_get_thread_type() == THREAD_REACTOR;
    }

    bool is_single_worker() const {
        return (worker_num == 1 && task_worker_num == 0 && max_request == 0 && get_user_worker_num() == 0);
    }

    bool isset_hook(HookType type) const {
        assert(type <= HOOK_END);
        return hooks[type];
    }

    bool is_sync_process() const {
        if (is_manager()) {
            return true;
        }
        if (is_task_worker() && !task_enable_coroutine) {
            return true;
        }
        return false;
    }

    bool is_shutdown() const {
        return gs->shutdown;
    }

    // can only be used in the main process
    static bool is_valid_connection(const Connection *conn) {
        return (conn && conn->socket && conn->active && conn->socket->fd_type == SW_FD_SESSION);
    }

    bool is_healthy_connection(double now, const Connection *conn) const;

    static bool is_dgram_event(uint8_t type) {
        return type == SW_SERVER_EVENT_RECV_DGRAM;
    }

    static bool is_stream_event(uint8_t type) {
        switch (type) {
        case SW_SERVER_EVENT_RECV_DATA:
        case SW_SERVER_EVENT_SEND_DATA:
        case SW_SERVER_EVENT_SEND_FILE:
        case SW_SERVER_EVENT_CONNECT:
        case SW_SERVER_EVENT_CLOSE:
        case SW_SERVER_EVENT_PAUSE_RECV:
        case SW_SERVER_EVENT_RESUME_RECV:
        case SW_SERVER_EVENT_BUFFER_FULL:
        case SW_SERVER_EVENT_BUFFER_EMPTY:
            return true;
        default:
            return false;
        }
    }

    int get_connection_fd(SessionId session_id) const {
        return session_list[session_id % SW_SESSION_LIST_SIZE].fd;
    }

    Connection *get_connection_verify_no_ssl(SessionId session_id) const {
        Session *session = get_session(session_id);
        int fd = session->fd;
        Connection *conn = get_connection(fd);
        if (!conn || conn->active == 0) {
            return nullptr;
        }
        if (session->id != session_id || conn->session_id != session_id) {
            return nullptr;
        }
        return conn;
    }

    Connection *get_connection_verify(SessionId session_id) const {
        Connection *conn = get_connection_verify_no_ssl(session_id);
        if (conn && conn->ssl && !conn->ssl_ready) {
            return nullptr;
        }
        return conn;
    }

    Connection *get_connection(const int fd) const {
        if (static_cast<uint32_t>(fd) > max_connection) {
            return nullptr;
        }
        return &connection_list[fd];
    }

    Connection *get_connection_for_iterator(int fd) const {
        Connection *conn = get_connection(fd);
        if (conn && conn->active && !conn->closed) {
            if (conn->ssl && !conn->ssl_ready) {
                return nullptr;
            }
            return conn;
        }
        return nullptr;
    }

    Connection *get_connection_by_session_id(SessionId session_id) const {
        return get_connection(get_connection_fd(session_id));
    }

    Session *get_session(SessionId session_id) const {
        return &session_list[session_id % SW_SESSION_LIST_SIZE];
    }

    void clear_timer();
    static void timer_callback(Timer *timer, TimerNode *tnode);

    bool create_event_workers();
    bool create_task_workers();
    bool create_user_workers();
    int start_manager_process();

    void call_hook(enum HookType type, void *arg);
    void call_worker_start_callback(Worker *worker);
    void call_worker_stop_callback(Worker *worker);
    void call_worker_error_callback(Worker *worker, const ExitStatus &status);
    void call_command_handler(MessageBus &mb, uint16_t worker_id, network::Socket *sock);
    std::string call_command_handler_in_master(int command_id, const std::string &msg);
    void call_command_callback(int64_t request_id, const std::string &result);
    void foreach_connection(const std::function<void(Connection *)> &callback) const;
    static int accept_connection(Reactor *reactor, Event *event);
#ifdef SW_SUPPORT_DTLS
    dtls::Session *accept_dtls_connection(const ListenPort *ls, const network::Address *sa);
#endif
    static int accept_command_result(Reactor *reactor, Event *event);
    static int close_connection(Reactor *reactor, network::Socket *_socket);
    static int dispatch_task(const Protocol *proto, network::Socket *_socket, const RecvData *rdata);

    int send_to_connection(const SendData *) const;
    ssize_t send_to_worker_from_worker(const Worker *dst_worker, const void *buf, size_t len, int flags);
    bool has_kernel_nobufs_error(SessionId session_id) const;

    ssize_t send_to_worker_from_worker(WorkerId id, const EventData *data, int flags) {
        return send_to_worker_from_worker(get_worker(id), data, data->size(), flags);
    }

    ssize_t send_to_reactor_thread(const EventData *ev_data, size_t sendn, SessionId session_id) const;

    /**
     * Send data to session.
     * This function is used for sending data to the client in the server.
     * @return true on success, false on failure.
     */
    bool send(SessionId session_id, const void *data, uint32_t length) const;
    /**
     * Send file to session.
     * This function is used for sending files in the HTTP server.
     * It will read the file from disk and send it to the client.
     */
    bool sendfile(SessionId session_id, const char *file, uint32_t l_file, off_t offset, size_t length) const;
    bool sendwait(SessionId session_id, const void *data, uint32_t length) const;
    bool close(SessionId session_id, bool reset = false) const;

    bool notify(Connection *conn, ServerEventType event) const;
    bool feedback(Connection *conn, ServerEventType event);
    bool command(WorkerId process_id,
                 Command::ProcessType process_type,
                 const std::string &name,
                 const std::string &msg,
                 const Command::Callback &fn);

    bool task(EventData *_task, int *dst_worker_id, bool blocking = false);
    bool finish(const char *data, size_t data_len, int flags = 0, const EventData *current_task = nullptr);
    bool task_sync(EventData *task, int *dst_worker_id, double timeout = -1);
    bool task_sync(MultiTask &mtask, double timeout = -1);
    bool send_pipe_message(WorkerId worker_id, EventData *msg);
    bool send_pipe_message(WorkerId worker_id, const char *data, size_t len);

    void init_reactor(Reactor *reactor);
    void init_event_worker(Worker *worker) const;
    bool init_task_workers();
    void init_signal_handler() const;
    void init_ipc_max_size();
    void init_pipe_sockets(MessageBus *mb) const;

    void set_max_connection(uint32_t _max_connection);

    void set_max_concurrency(uint32_t _max_concurrency) const {
        if (_max_concurrency == 0) {
            _max_concurrency = UINT_MAX;
        }
        gs->max_concurrency = _max_concurrency;
    }

    void set_worker_max_concurrency(uint32_t _max_concurrency) {
        if (_max_concurrency == 0) {
            _max_concurrency = UINT_MAX;
        }
        worker_max_concurrency = _max_concurrency;
    }

    uint32_t get_max_connection() const {
        return max_connection;
    }

    uint32_t get_max_concurrency() const {
        return gs->max_concurrency;
    }

    uint32_t get_concurrency() const {
        return gs->concurrency;
    }

    bool is_unavailable() const {
        return get_concurrency() >= get_max_concurrency();
    }

    uint32_t get_worker_max_concurrency() const {
        return worker_max_concurrency;
    }

    void set_start_session_id(SessionId value) const {
        if (value > UINT_MAX) {
            value = UINT_MAX;
        }
        gs->session_round = value;
    }

    void disable_accept();
    int schedule_worker(int fd, SendData *data);

    size_t get_connection_num() const {
        if (gs->connection_nums) {
            size_t num = 0;
            for (uint32_t i = 0; i < worker_num; i++) {
                num += gs->connection_nums[i];
            }
            return num;
        } else {
            return gs->connection_num;
        }
    }

    static int wait_other_worker(ProcessPool *pool, const ExitStatus &exit_status);
    static void read_worker_message(ProcessPool *pool, EventData *msg);

    void drain_worker_pipe() const;
    void clean_worker_connections(Worker *worker);

    /**
     * [Worker]
     */
    void worker_start_callback(Worker *worker);
    void worker_stop_callback(Worker *worker);
    void worker_accept_event(DataHead *info);
    void worker_signal_init() const;

    std::function<void(std::shared_ptr<Thread>, const WorkerFn &fn)> worker_thread_start;

    /**
     * [Master]
     */
    bool signal_handler_shutdown();
    bool signal_handler_child_exit() const;
    bool signal_handler_reload(bool reload_all_workers) const;
    bool signal_handler_read_message() const;
    bool signal_handler_reopen_logger() const;

    static void worker_signal_handler(int signo);
    static int reactor_process_main_loop(ProcessPool *pool, Worker *worker);
    static void reactor_thread_main_loop(Server *serv, int reactor_id);
    static bool task_pack(EventData *task, const void *data, size_t data_len);
    static void task_dump(EventData *task);
    static bool task_unpack(EventData *task, String *buffer, PacketPtr *packet);
    static void master_signal_handler(int signo);
    static void heartbeat_check(Timer *timer, TimerNode *tnode);

    int start_event_worker(Worker *worker);

    const char *get_startup_error_message() const;

  private:
    enum Mode mode_;
    Connection *connection_list = nullptr;
    Session *session_list = nullptr;
    ServerPortGS *port_gs_list = nullptr;
    /**
     * http static file directory
     */
    std::string document_root;

    std::shared_ptr<std::vector<http_server::RewriteRule>> rewrite_rules;
    std::mutex lock_;
    uint32_t max_connection = 0;
    TimerNode *enable_accept_timer = nullptr;
    std::thread heartbeat_thread;
    /**
     * The number of pipe per reactor maintenance
     */
    uint16_t reactor_pipe_num = 0;
    ReactorThread *reactor_threads = nullptr;
    /**
     * Only used for temporarily saving pointers in add_worker()
     */
    std::vector<Worker *> user_worker_list;
    std::unordered_map<uint16_t, network::Address> local_addr_v4_map;
    std::unordered_map<uint16_t, network::Address> local_addr_v6_map;

    int create_pipe_buffers();
    void release_pipe_buffers();
    void create_worker(Worker *worker);
    Factory *create_base_factory();
    Factory *create_thread_factory();
    Factory *create_process_factory();
    int start_check();
    void check_port_type(const ListenPort *ls);
    void store_listen_socket();
    void store_pipe_fd(UnixSocket *p);
    void destroy_base_factory() const;
    void destroy_thread_factory() const;
    void destroy_process_factory();
    void destroy_worker(Worker *worker);
    void destroy_task_workers() const;
    int start_reactor_threads();
    int start_reactor_processes();
    int start_worker_threads();
    int start_master_thread(Reactor *reactor);
    void start_heartbeat_thread();
    void stop_worker_threads();
    bool reload_worker_threads(bool reload_all_workers) const;
    void join_reactor_thread();
    void stop_master_thread();
    void join_heartbeat_thread();
    TimerCallback get_timeout_callback(ListenPort *port, Reactor *reactor, Connection *conn) const;
    bool init_network_interface_addr_map();
    uint16_t get_local_addr_index(network::Address *addr);

    int get_lowest_load_worker_id() const {
        uint32_t lowest_load_worker_id = 0;
        size_t min_coroutine = workers[0].coroutine_num;
        for (uint32_t i = 1; i < worker_num; i++) {
            if (workers[i].coroutine_num < min_coroutine) {
                min_coroutine = workers[i].coroutine_num;
                lowest_load_worker_id = i;
            }
        }
        return lowest_load_worker_id;
    }

    int get_lowest_concurrent_worker_id() const {
        uint32_t lowest_concurrent_worker_id = 0;
        size_t min_concurrency = workers[0].concurrency;
        for (uint32_t i = 1; i < worker_num; i++) {
            if (workers[i].concurrency < min_concurrency) {
                min_concurrency = workers[i].concurrency;
                lowest_concurrent_worker_id = i;
            }
        }
        return lowest_concurrent_worker_id;
    }

    int get_idle_worker_id() {
        bool found = false;
        uint32_t key = 0;
        SW_LOOP_N(worker_num + 1) {
            key = sw_atomic_fetch_add(&worker_round_id, 1) % worker_num;
            if (workers[key].is_idle()) {
                found = true;
                break;
            }
        }
        if (sw_unlikely(!found)) {
            scheduler_warning = true;
        }
        swoole_trace_log(SW_TRACE_SERVER, "schedule=%d, round=%d", key, worker_round_id);
        return key;
    }

    void lock() {
        lock_.lock();
    }

    void unlock() {
        lock_.unlock();
    }
};

}  // namespace swoole

typedef swoole::Server swServer;

static inline swoole::Server *sw_server() {
    return SwooleG.server;
}
ext/swoole/include/swoole_error.h000064400000014725151730541760013213 0ustar00/*
  +----------------------------------------------------------------------+
  | Swoole                                                               |
  +----------------------------------------------------------------------+
  | This source file is subject to version 2.0 of the Apache license,    |
  | that is bundled with this package in the file LICENSE, and is        |
  | available through the world-wide-web at the following url:           |
  | http://www.apache.org/licenses/LICENSE-2.0.html                      |
  | If you did not receive a copy of the Apache2.0 license and are unable|
  | to obtain it through the world-wide-web, please send a note to       |
  | license@swoole.com so we can mail you a copy immediately.            |
  +----------------------------------------------------------------------+
  | Author: Tianfeng Han  <rango@swoole.com>                             |
  +----------------------------------------------------------------------+
*/

#pragma once

enum swErrorCode {
    /**
     * Prevent repetition with errno [syscall error]
     */
    SW_ERROR_BEGIN = 500,

    /**
     * common error
     */
    SW_ERROR_MALLOC_FAIL = 501,
    SW_ERROR_SYSTEM_CALL_FAIL,
    SW_ERROR_PHP_FATAL_ERROR,
    SW_ERROR_NAME_TOO_LONG,
    SW_ERROR_INVALID_PARAMS,
    SW_ERROR_QUEUE_FULL,
    SW_ERROR_OPERATION_NOT_SUPPORT,
    SW_ERROR_PROTOCOL_ERROR,
    SW_ERROR_WRONG_OPERATION,
    SW_ERROR_PHP_RUNTIME_NOTICE,  // Non-fatal errors, just runtime warnings
    SW_ERROR_FOR_TEST,

    SW_ERROR_NO_PAYLOAD = 550,

    SW_ERROR_UNDEFINED_BEHAVIOR = 600,
    SW_ERROR_NOT_THREAD_SAFETY,

    SW_ERROR_FILE_NOT_EXIST = 700,
    SW_ERROR_FILE_TOO_LARGE,
    SW_ERROR_FILE_EMPTY,
    SW_ERROR_DIR_NOT_EXIST,

    SW_ERROR_DNSLOOKUP_DUPLICATE_REQUEST = 710,
    SW_ERROR_DNSLOOKUP_RESOLVE_FAILED,
    SW_ERROR_DNSLOOKUP_RESOLVE_TIMEOUT,
    SW_ERROR_DNSLOOKUP_UNSUPPORTED,
    SW_ERROR_DNSLOOKUP_NO_SERVER,

    SW_ERROR_BAD_IPV6_ADDRESS = 720,
    SW_ERROR_UNREGISTERED_SIGNAL,
    SW_ERROR_BAD_HOST_ADDR,
    SW_ERROR_BAD_PORT,
    SW_ERROR_BAD_SOCKET_TYPE,

    // EventLoop
    SW_ERROR_EVENT_REMOVE_FAILED = 800,
    SW_ERROR_EVENT_ADD_FAILED,
    SW_ERROR_EVENT_UPDATE_FAILED,
    SW_ERROR_EVENT_UNKNOWN_DATA,

    /**
     * connection error
     */
    SW_ERROR_SESSION_CLOSED_BY_SERVER = 1001,
    SW_ERROR_SESSION_CLOSED_BY_CLIENT,
    SW_ERROR_SESSION_CLOSING,
    SW_ERROR_SESSION_CLOSED,
    SW_ERROR_SESSION_NOT_EXIST,
    SW_ERROR_SESSION_INVALID_ID,
    SW_ERROR_SESSION_DISCARD_TIMEOUT_DATA,
    SW_ERROR_SESSION_DISCARD_DATA,
    SW_ERROR_OUTPUT_BUFFER_OVERFLOW,
    SW_ERROR_OUTPUT_SEND_YIELD,
    SW_ERROR_SSL_NOT_READY,
    SW_ERROR_SSL_CANNOT_USE_SENFILE,
    SW_ERROR_SSL_EMPTY_PEER_CERTIFICATE,
    SW_ERROR_SSL_VERIFY_FAILED,
    SW_ERROR_SSL_BAD_CLIENT,
    SW_ERROR_SSL_BAD_PROTOCOL,
    SW_ERROR_SSL_RESET,
    SW_ERROR_SSL_HANDSHAKE_FAILED,
    SW_ERROR_SSL_CREATE_CONTEXT_FAILED,
    SW_ERROR_SSL_CREATE_SESSION_FAILED,

    SW_ERROR_PACKAGE_LENGTH_TOO_LARGE = 1201,
    SW_ERROR_PACKAGE_LENGTH_NOT_FOUND,
    SW_ERROR_DATA_LENGTH_TOO_LARGE,
    SW_ERROR_PACKAGE_MALFORMED_DATA,

    /**
     * task error
     */
    SW_ERROR_TASK_PACKAGE_TOO_BIG = 2001,
    SW_ERROR_TASK_DISPATCH_FAIL,
    SW_ERROR_TASK_TIMEOUT,

    /**
     * http2 protocol error
     */
    SW_ERROR_HTTP2_STREAM_ID_TOO_BIG = 3001,
    SW_ERROR_HTTP2_STREAM_NO_HEADER,
    SW_ERROR_HTTP2_STREAM_NOT_FOUND,
    SW_ERROR_HTTP2_STREAM_IGNORE,
    SW_ERROR_HTTP2_SEND_CONTROL_FRAME_FAILED,
    SW_ERROR_HTTP2_INTERNAL_ERROR,

    /**
     * AIO
     */
    SW_ERROR_AIO_BAD_REQUEST = 4001,
    SW_ERROR_AIO_CANCELED,
    SW_ERROR_AIO_TIMEOUT,

    /**
     * Client
     */
    SW_ERROR_CLIENT_NO_CONNECTION = 5001,

    /**
     * Socket
     */
    SW_ERROR_SOCKET_CLOSED = 6001,
    SW_ERROR_SOCKET_POLL_TIMEOUT,
    SW_ERROR_SOCKET_NOT_EXISTS,

    /**
     * Proxy
     */
    SW_ERROR_SOCKS5_UNSUPPORT_VERSION = 7001,
    SW_ERROR_SOCKS5_UNSUPPORT_METHOD,
    SW_ERROR_SOCKS5_AUTH_FAILED,
    SW_ERROR_SOCKS5_SERVER_ERROR,
    SW_ERROR_SOCKS5_HANDSHAKE_FAILED,
    SW_ERROR_SOCKS5_CONNECT_FAILED,

    SW_ERROR_HTTP_PROXY_HANDSHAKE_ERROR = 7101,
    SW_ERROR_HTTP_INVALID_PROTOCOL,
    SW_ERROR_HTTP_PROXY_HANDSHAKE_FAILED,
    SW_ERROR_HTTP_PROXY_BAD_RESPONSE,
    SW_ERROR_HTTP_CONFLICT_HEADER,
    SW_ERROR_HTTP_CONTEXT_UNAVAILABLE,
    SW_ERROR_HTTP_COOKIE_UNAVAILABLE,

    SW_ERROR_WEBSOCKET_BAD_CLIENT = 8501,
    SW_ERROR_WEBSOCKET_BAD_OPCODE,
    SW_ERROR_WEBSOCKET_UNCONNECTED,
    SW_ERROR_WEBSOCKET_HANDSHAKE_FAILED,
    SW_ERROR_WEBSOCKET_PACK_FAILED,
    SW_ERROR_WEBSOCKET_UNPACK_FAILED,
    SW_ERROR_WEBSOCKET_INCOMPLETE_PACKET,

    /**
     * server global error
     */
    SW_ERROR_SERVER_MUST_CREATED_BEFORE_CLIENT = 9001,
    SW_ERROR_SERVER_TOO_MANY_SOCKET,
    SW_ERROR_SERVER_WORKER_TERMINATED,
    SW_ERROR_SERVER_INVALID_LISTEN_PORT,
    SW_ERROR_SERVER_TOO_MANY_LISTEN_PORT,
    SW_ERROR_SERVER_PIPE_BUFFER_FULL,
    SW_ERROR_SERVER_NO_IDLE_WORKER,
    SW_ERROR_SERVER_ONLY_START_ONE,
    SW_ERROR_SERVER_SEND_IN_MASTER,
    SW_ERROR_SERVER_INVALID_REQUEST,
    SW_ERROR_SERVER_CONNECT_FAIL,
    SW_ERROR_SERVER_INVALID_COMMAND,
    SW_ERROR_SERVER_IS_NOT_REGULAR_FILE,
    SW_ERROR_SERVER_SEND_TO_WOKER_TIMEOUT,
    SW_ERROR_SERVER_INVALID_CALLBACK,
    SW_ERROR_SERVER_UNRELATED_THREAD,

    /**
     * Process exit timeout, forced to end.
     */
    SW_ERROR_SERVER_WORKER_EXIT_TIMEOUT = 9101,
    SW_ERROR_SERVER_WORKER_ABNORMAL_PIPE_DATA,
    SW_ERROR_SERVER_WORKER_UNPROCESSED_DATA,

    /**
     * Coroutine
     */
    SW_ERROR_CO_OUT_OF_COROUTINE = 10001,
    SW_ERROR_CO_HAS_BEEN_BOUND,
    SW_ERROR_CO_HAS_BEEN_DISCARDED,

    SW_ERROR_CO_MUTEX_DOUBLE_UNLOCK,
    SW_ERROR_CO_BLOCK_OBJECT_LOCKED,
    SW_ERROR_CO_BLOCK_OBJECT_WAITING,
    SW_ERROR_CO_YIELD_FAILED,
    SW_ERROR_CO_GETCONTEXT_FAILED,
    SW_ERROR_CO_SWAPCONTEXT_FAILED,
    SW_ERROR_CO_MAKECONTEXT_FAILED,

    SW_ERROR_CO_IOCPINIT_FAILED,
    SW_ERROR_CO_PROTECT_STACK_FAILED,
    SW_ERROR_CO_STD_THREAD_LINK_ERROR,
    SW_ERROR_CO_DISABLED_MULTI_THREAD,

    SW_ERROR_CO_CANNOT_CANCEL,
    SW_ERROR_CO_NOT_EXISTS,
    SW_ERROR_CO_CANCELED,
    SW_ERROR_CO_TIMEDOUT,

    // close failed, there are currently other coroutines holding this socket,
    // need to wait for the bound coroutine to return from the socket wait_event operation
    SW_ERROR_CO_SOCKET_CLOSE_WAIT,

    SW_ERROR_END
};

namespace swoole {
class Exception final : std::exception {
  public:
    int code;
    const char *msg;

    explicit Exception(int code) noexcept;
};
}  // namespace swoole
ext/swoole/include/swoole_util.h000064400000016761151730541760013041 0ustar00/*
  +----------------------------------------------------------------------+
  | Swoole                                                               |
  +----------------------------------------------------------------------+
  | This source file is subject to version 2.0 of the Apache license,    |
  | that is bundled with this package in the file LICENSE, and is        |
  | available through the world-wide-web at the following url:           |
  | http://www.apache.org/licenses/LICENSE-2.0.html                      |
  | If you did not receive a copy of the Apache2.0 license and are unable|
  | to obtain it through the world-wide-web, please send a note to       |
  | license@swoole.com so we can mail you a copy immediately.            |
  +----------------------------------------------------------------------+
  | Author: Tianfeng Han  <rango@swoole.com>                             |
  |         Twosee  <twose@qq.com>                                       |
  +----------------------------------------------------------------------+
*/

#pragma once

#include <cstdio>
#include <cstdarg>
#include <cassert>
#include <ctime>

#include <string>
#include <memory>
#include <chrono>
#include <set>
#include <vector>
#include <stack>
#include <thread>
#include <type_traits>
#include <algorithm>

#define SW_STRUCT_MEMBER_SIZE(_s, _m) sizeof(std::declval<struct _s>()._m)

namespace swoole {
template <typename T>
bool in_range(T value, std::initializer_list<T> allowed_values) {
    return std::find(allowed_values.begin(), allowed_values.end(), value) != allowed_values.end();
}

namespace std_string {
template <typename... Args>
inline std::string format(const char *format, Args... args) {
    size_t size = snprintf(nullptr, 0, format, args...) + 1;  // Extra space for '\0'
    std::unique_ptr<char[]> buf(new char[size]);
    snprintf(buf.get(), size, format, args...);
    return {buf.get(), buf.get() + size - 1};  // We don't want the '\0' inside
}

inline std::string vformat(const char *format, va_list args) {
    va_list _args;
    va_copy(_args, args);
    size_t size = vsnprintf(nullptr, 0, format, _args) + 1;  // Extra space for '\0'
    va_end(_args);
    std::unique_ptr<char[]> buf(new char[size]);
    vsnprintf(buf.get(), size, format, args);
    return {buf.get(), buf.get() + size - 1};  // We don't want the '\0' inside
}
}  // namespace std_string

// Keep parameter 'steady' as false for backward compatibility.
template <typename T>
static inline long time(bool steady = false) {
    if (sw_likely(steady)) {
        auto now = std::chrono::steady_clock::now();
        return std::chrono::duration_cast<T>(now.time_since_epoch()).count();
    } else {
        auto now = std::chrono::system_clock::now();
        return std::chrono::duration_cast<T>(now.time_since_epoch()).count();
    }
}

static inline long get_timezone() {
    using namespace std::chrono;
    auto now_time_t = system_clock::to_time_t(system_clock::now());
    std::tm local_tm{};
    localtime_r(&now_time_t, &local_tm);
    return local_tm.tm_gmtoff;
}

class DeferTask {
    std::stack<Callback> list_;

  public:
    void add(const Callback &fn) {
        list_.push(fn);
    }

    ~DeferTask() {
        while (!list_.empty()) {
            auto fn = list_.top();
            fn(nullptr);
            list_.pop();
        }
    }
};

template <typename Fun>
class ScopeGuard {
  public:
    explicit ScopeGuard(Fun &&f) : _fun(std::forward<Fun>(f)), _active(true) {}

    ~ScopeGuard() {
        if (_active) {
            _fun();
        }
    }

    void dismiss() {
        _active = false;
    }

    ScopeGuard() = delete;
    ScopeGuard(const ScopeGuard &) = delete;
    ScopeGuard &operator=(const ScopeGuard &) = delete;

    ScopeGuard(ScopeGuard &&rhs) noexcept : _fun(std::move(rhs._fun)), _active(rhs._active) {
        rhs.dismiss();
    }

  private:
    Fun _fun;
    bool _active;
};

class BitMap {
    uint64_t *array_;
    size_t n_bits_;

    static size_t get_array_size(size_t n_bits) {
        return (((n_bits) + 63) / 64 * 8);
    }

    size_t get_offset(size_t i) const {
        assert(i < n_bits_);
        /* (i / 64) */
        return i >> 6;
    }

    static uint64_t to_int(const size_t i, const size_t offset) {
        return static_cast<uint64_t>(1) << (i - (offset << 6));
    }

  public:
    explicit BitMap(const size_t n_bits) {
        assert(n_bits > 0);
        array_ = new uint64_t[get_array_size(n_bits)];
        n_bits_ = n_bits;
    }

    ~BitMap() {
        delete[] array_;
    }

    void clear() const {
        memset(array_, 0, sizeof(uint64_t) * get_array_size(n_bits_));
    }

    void set(const size_t i) const {
        const size_t off = get_offset(i);
        array_[off] |= to_int(i, off);
    }

    void unset(const size_t i) const {
        const size_t off = get_offset(i);
        array_[off] &= ~to_int(i, off);
    }

    bool get(const size_t i) const {
        const size_t off = get_offset(i);
        return array_[off] & to_int(i, off);
    }
};

namespace detail {
enum class ScopeGuardOnExit {};

template <typename Fun>
inline ScopeGuard<Fun> operator+(ScopeGuardOnExit, Fun &&fn) {
    return ScopeGuard<Fun>(std::forward<Fun>(fn));
}
}  // namespace detail

#define __SCOPE_GUARD_CONCATENATE_IMPL(s1, s2) s1##s2
#define __SCOPE_GUARD_CONCATENATE(s1, s2) __SCOPE_GUARD_CONCATENATE_IMPL(s1, s2)

/**
 * Call the specified function when exiting the scope, similar to Golang's defer function.
 * After using this helper macro,
 * it is not necessary to manually release resources before the return statement of the failed branch.
 */
#define ON_SCOPE_EXIT                                                                                                  \
    auto __SCOPE_GUARD_CONCATENATE(ext_exitBlock_, __LINE__) = swoole::detail::ScopeGuardOnExit() + [&]()

std::string intersection(const std::vector<std::string> &vec1, std::set<std::string> &vec2);

static inline size_t ltrim(char **str, size_t len) {
    size_t i;
    for (i = 0; i < len; ++i) {
        if ('\0' != **str && isspace(**str)) {
            ++*str;
        } else {
            break;
        }
    }
    return len - i;
}

static inline size_t rtrim(char *str, size_t len) {
    for (size_t i = len; i > 0;) {
        if (isspace(str[--i])) {
            str[i] = 0;
            len--;
        } else {
            break;
        }
    }
    return len;
}

static inline size_t rtrim(const char *str, size_t len) {
    for (size_t i = len; i > 0;) {
        if (isspace(str[--i])) {
            len--;
        } else {
            break;
        }
    }
    return len;
}

static inline ssize_t substr_len(const char *str, size_t len, char separator, bool before = false) {
    const auto substr = static_cast<const char *>(memchr(str, separator, len));
    if (substr == nullptr) {
        return -1;
    }
    return before ? substr - str : str + len - substr - 1;
}

static inline bool starts_with(const char *haystack, size_t l_haystack, const char *needle, size_t l_needle) {
    if (l_needle > l_haystack) {
        return false;
    }
    return memcmp(haystack, needle, l_needle) == 0;
}

static inline bool starts_with(const std::string &str, const std::string &prefix) {
    if (prefix.size() > str.size()) {
        return false;
    }
    return std::equal(prefix.begin(), prefix.end(), str.begin());
}

static inline bool ends_with(const char *haystack, size_t l_haystack, const char *needle, size_t l_needle) {
    if (l_needle > l_haystack) {
        return false;
    }
    return memcmp(haystack + l_haystack - l_needle, needle, l_needle) == 0;
}
}  // namespace swoole
ext/swoole/include/swoole_base64.h000064400000002467151730541770013147 0ustar00/*
  +----------------------------------------------------------------------+
  | Swoole                                                               |
  +----------------------------------------------------------------------+
  | This source file is subject to version 2.0 of the Apache license,    |
  | that is bundled with this package in the file LICENSE, and is        |
  | available through the world-wide-web at the following url:           |
  | http://www.apache.org/licenses/LICENSE-2.0.html                      |
  | If you did not receive a copy of the Apache2.0 license and are unable|
  | to obtain it through the world-wide-web, please send a note to       |
  | license@swoole.com so we can mail you a copy immediately.            |
  +----------------------------------------------------------------------+
  | Author: Tianfeng Han  <rango@swoole.com>                             |
  +----------------------------------------------------------------------+
*/

#pragma once

#include <cstdint>
#include <cstdio>
#include <cstring>

#define BASE64_ENCODE_OUT_SIZE(s) (((s) + 2) / 3 * 4)
#define BASE64_DECODE_OUT_SIZE(s) (((s)) / 4 * 3)

namespace swoole {
size_t base64_encode(const unsigned char *in, size_t inlen, char *out);
size_t base64_decode(const char *in, size_t inlen, char *out);
}  // namespace swoole
ext/swoole/include/swoole_msg_queue.h000064400000003734151730542000014036 0ustar00/*
  +----------------------------------------------------------------------+
  | Swoole                                                               |
  +----------------------------------------------------------------------+
  | This source file is subject to version 2.0 of the Apache license,    |
  | that is bundled with this package in the file LICENSE, and is        |
  | available through the world-wide-web at the following url:           |
  | http://www.apache.org/licenses/LICENSE-2.0.html                      |
  | If you did not receive a copy of the Apache2.0 license and are unable|
  | to obtain it through the world-wide-web, please send a note to       |
  | license@swoole.com so we can mail you a copy immediately.            |
  +----------------------------------------------------------------------+
  | Author: Tianfeng Han  <rango@swoole.com>                             |
  |         Twosee  <twose@qq.com>                                       |
  +----------------------------------------------------------------------+
*/

#pragma once

#include "swoole.h"

#include <sys/types.h>

namespace swoole {

enum {
    SW_MSGQUEUE_ORIENT = 1,
    SW_MSGQUEUE_BALANCE = 2,
};

struct QueueNode {
    long mtype;                    /* type of received/sent message */
    char mdata[sizeof(EventData)]; /* text of the message */
};

class MsgQueue {
  private:
    bool blocking_;
    int msg_id_;
    key_t msg_key_;
    int flags_;
    int perms_;

  public:
    explicit MsgQueue(key_t msg_key, bool blocking = true, int perms = 0);
    ~MsgQueue();

    bool ready() const {
        return msg_id_ >= 0;
    }

    int get_id() const {
        return msg_id_;
    }

    void set_blocking(bool blocking);
    bool set_capacity(size_t queue_bytes) const;
    bool push(const QueueNode *in, size_t mdata_length) const;
    ssize_t pop(QueueNode *out, size_t mdata_size) const;
    bool stat(size_t *queue_num, size_t *queue_bytes) const;
    bool destroy();
};
}  // namespace swoole
ext/swoole/include/swoole_socket.h000064400000045012151730542000013327 0ustar00/*
  +----------------------------------------------------------------------+
  | Swoole                                                               |
  +----------------------------------------------------------------------+
  | This source file is subject to version 2.0 of the Apache license,    |
  | that is bundled with this package in the file LICENSE, and is        |
  | available through the world-wide-web at the following url:           |
  | http://www.apache.org/licenses/LICENSE-2.0.html                      |
  | If you did not receive a copy of the Apache2.0 license and are unable|
  | to obtain it through the world-wide-web, please send a note to       |
  | license@swoole.com so we can mail you a copy immediately.            |
  +----------------------------------------------------------------------+
  | Author: Tianfeng Han  <rango@swoole.com>                             |
  |         Twosee  <twose@qq.com>                                       |
  +----------------------------------------------------------------------+
*/

#pragma once

#include "swoole.h"
#include "swoole_ssl.h"
#include "swoole_buffer.h"
#include "swoole_file.h"

#include <poll.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <sys/un.h>
#include <sys/uio.h>

#include <netinet/in.h>
#include <netinet/ip6.h>
#include <netinet/tcp.h>
#include <netinet/udp.h>
#include <arpa/inet.h>

#include <string>
#include <vector>

#ifndef SOCK_NONBLOCK
#define SOCK_NONBLOCK O_NONBLOCK
#endif

#ifdef __sun
#define s6_addr8 _S6_un._S6_u8
#define s6_addr16 _S6_un._S6_u16
#define s6_addr32 _S6_un._S6_u32
#endif

ssize_t swoole_sendfile(int out_fd, int in_fd, off_t *offset, size_t size);

enum {
    SW_BAD_SOCKET = -1,
};

namespace swoole {
struct GethostbynameRequest;
struct GetaddrinfoRequest;

namespace network {
struct SendfileTask {
    off_t offset;
    size_t length;
    char filename[0];
};

struct SendfileRequest {
    File file;
    int8_t corked;
    off_t begin;
    off_t end;

  public:
    SendfileRequest(const char *filename, off_t _offset) : file(filename, O_RDONLY) {
        begin = _offset;
        end = 0;
        corked = 0;
    }

    const char *get_filename() const {
        return file.get_path().c_str();
    }
};

struct Address {
    union {
        sockaddr ss;
        sockaddr_in inet_v4;
        sockaddr_in6 inet_v6;
        sockaddr_un un;
    } addr;
    socklen_t len;
    SocketType type;

    /**
     * Assign an address based on the socket type and host/port.
     * For IPv4, the host can be an IP address like "192.168.1.100"
     * or a domain name like "www.example.com".
     * For IPv6, the host can be an IP address like "2001:0db8:85a3:0000:0000:8a2e:0370:7334"
     * or a domain name like "ipv6.example.com".
     * For UNIX socket, the host is the path to the socket file.
     * If _port is 0, it will not set the port.
     * If _resolve_name is false, it will not resolve the domain name.
     *
     * Returns true on success, false on failure.
     */
    bool assign(SocketType _type, const std::string &_host, int _port = 0, bool _resolve_name = true);
    /**
     * Assign an address based on a URL string.
     * The format of the URL can be:
     * - tcp://hostname:port
     * - udp://hostname:port
     * - tcp://[IPv6_address]:port
     * - udp://[IPv6_address]:port
     * - unix:///path/to/socket
     * - udg:///path/to/socket
     *
     * Returns true on success, false on failure.
     */
    bool assign(const std::string &url);

    int get_port() const;
    void set_port(int _port);
    const char *get_addr() const;
    bool is_loopback_addr() const;
    bool empty() const;

    in_addr *addr_v4() {
        return &addr.inet_v4.sin_addr;
    }

    in6_addr *addr_v6() {
        return &addr.inet_v6.sin6_addr;
    }

    /**
     * Get the string representation of the address
     */
    static const char *type_str(SocketType type);
    /**
     * Convert the address to a string representation.
     * For IPv4, it will be in the format "192.168.1.100"
     * For IPv6, it will be in the format "2001:0db8:85a3:0000:0000:8a2e:0370:7334"
     * For UNIX socket, it will be the path of the socket file.
     * The returned pointer is a static buffer, so it should not be freed.
     */
    static const char *addr_str(int family, const void *addr);
    /**
     * Verify if the input string is an IP address,
     * where AF_INET indicates an IPv4 address, such as 192.168.1.100,
     * and AF_INET6 indicates an IPv6 address, for example, 2001:0000:130F:0000:0000:09C0:876A:130B.
     */
    static bool verify_ip(int family, const std::string &str);
    static bool verify_port(int port, bool for_connect = false);
};

struct IOVector {
    // we should modify iov_iterator instead of iov, iov is readonly
    iovec *iov = nullptr;
    iovec *iov_iterator = nullptr;
    int count = 0;
    int remain_count = 0;
    int index = 0;
    size_t offset_bytes = 0;

    IOVector(const iovec *_iov, int _iovcnt);
    ~IOVector();

    void update_iterator(ssize_t _n);

    iovec *get_iterator() const {
        return iov_iterator;
    }

    size_t length() {
        size_t len = 0;
        SW_LOOP_N(count) {
            len += iov[i].iov_len;
        }
        return len;
    }

    int get_remain_count() const {
        return remain_count;
    }

    int get_index() const {
        return index;
    }

    size_t get_offset_bytes() const {
        return offset_bytes;
    }
};

struct Socket {
    static double default_dns_timeout;
    static double default_connect_timeout;
    static double default_read_timeout;
    static double default_write_timeout;
    static uint32_t default_buffer_size;

    int fd;
    FdType fd_type;
    SocketType socket_type;
    int events;
    bool enable_tcp_nodelay;
    bool kernel_nobufs;

    uchar removed : 1;
    uchar silent_remove : 1;
    uchar nonblock : 1;
    uchar cloexec : 1;
    uchar direct_send : 1;
    uchar bound : 1;
    uchar listened : 1;
    uchar ssl_send_ : 1;
    uchar ssl_want_read : 1;
    uchar ssl_want_write : 1;
    uchar ssl_renegotiation : 1;
    uchar ssl_handshake_buffer_set : 1;
    uchar ssl_quiet_shutdown : 1;
    uchar ssl_closed_ : 1;
#ifdef SW_SUPPORT_DTLS
    uchar dtls : 1;
#endif
    uchar close_wait : 1;
    uchar send_wait : 1;
    uchar tcp_nopush : 1;
    uchar tcp_nodelay : 1;
    uchar skip_recv : 1;
    uchar recv_wait : 1;
    uchar event_hup : 1;
    /**
     * The default setting is false, meaning that system calls interrupted by signals will be automatically retried. If
     * set to true, the call will not be retried but will immediately return -1, setting errno to EINTR. In this case,
     * the caller must explicitly handle this error.
     */
    uchar dont_restart : 1;

    // memory buffer size [user space]
    uint32_t buffer_size;
    uint32_t chunk_size;

    void *object;

    SSL *ssl;
    uint32_t ssl_state;

    /**
     * Only used for getsockname, written by the OS, not user. This is the exact actual address.
     */
    Address info;
    double dns_timeout = default_dns_timeout;
    double connect_timeout = default_connect_timeout;
    double read_timeout = default_read_timeout;
    double write_timeout = default_write_timeout;

    double last_received_time;
    double last_sent_time;

    Buffer *out_buffer;
    Buffer *in_buffer;
    String *recv_buffer;

    TimerNode *recv_timer;
    TimerNode *send_timer;

    size_t total_recv_bytes;
    size_t total_send_bytes;

    // for reactor
    int handle_send();
    int handle_sendfile();
    // user space memory buffer
    void set_memory_buffer_size(uint32_t _buffer_size) {
        buffer_size = _buffer_size;
    }
    // socket option [kernel space]
    bool set_buffer_size(uint32_t _buffer_size) const;
    bool set_recv_buffer_size(uint32_t _buffer_size) const;
    bool set_send_buffer_size(uint32_t _buffer_size) const;
    bool set_kernel_read_timeout(double timeout);
    bool set_kernel_write_timeout(double timeout);

    bool set_kernel_timeout(double timeout) {
        return set_kernel_read_timeout(timeout) && set_kernel_write_timeout(timeout);
    }

    // socket option [user space]
    void set_timeout(double timeout, int type = SW_TIMEOUT_ALL);
    double get_timeout(TimeoutType type) const;
    bool has_timedout() const;
    bool has_kernel_nobufs();

    bool set_nonblock() {
        return set_fd_option(1, -1);
    }

    bool set_block() {
        return set_fd_option(0, -1);
    }

    bool set_fd_option(int _nonblock, int _cloexec);

    int set_option(int level, int optname, int optval) const {
        return setsockopt(fd, level, optname, &optval, sizeof(optval));
    }

    int set_option(int level, int optname, const void *optval, socklen_t optlen) const {
        return setsockopt(fd, level, optname, optval, optlen);
    }

    int get_option(int level, int optname, void *optval, socklen_t *optlen) const {
        return getsockopt(fd, level, optname, optval, optlen);
    }

    int get_option(int level, int optname, int *optval) const {
        socklen_t optlen = sizeof(*optval);
        return get_option(level, optname, optval, &optlen);
    }

    int get_fd() const {
        return fd;
    }

    const char *get_addr() const {
        return info.get_addr();
    }

    int get_port() const {
        return info.get_port();
    }

    uint32_t get_out_buffer_length() const {
        return out_buffer ? out_buffer->length() : 0;
    }

    int move_fd() {
        int sock_fd = fd;
        fd = SW_BAD_SOCKET;
        return sock_fd;
    }

    int get_name();
    int get_peer_name(Address *sa) const;
    int set_tcp_nopush(int nopush);

    int set_reuse_addr(int enable = 1) const {
        return set_option(SOL_SOCKET, SO_REUSEADDR, enable);
    }

    int set_reuse_port(int enable = 1) const {
#ifdef SO_REUSEPORT
        return set_option(SOL_SOCKET, SO_REUSEPORT, enable);
#endif
        return -1;
    }

    bool set_tcp_nodelay(int nodelay = 1);
    bool check_liveness();

    int sendfile_async(const char *filename, off_t offset, size_t length);
    int sendfile_sync(const char *filename, off_t offset, size_t length);
    ssize_t sendfile(const File &fp, off_t *offset, size_t length);

    ssize_t recv(void *_buf, size_t _n, int _flags);
    ssize_t send(const void *_buf, size_t _n, int _flags);
    ssize_t peek(void *_buf, size_t _n, int _flags) const;
    Socket *accept();
    Socket *dup() const;

    ssize_t readv(IOVector *io_vector);
    ssize_t writev(IOVector *io_vector);

    ssize_t writev(const iovec *iov, size_t iovcnt) const {
        return ::writev(fd, iov, iovcnt);
    }

    /**
     * If the port is 0, the system will automatically allocate an available port.
     */
    int bind(const std::string &_host, int port = 0);

    int bind(const Address &addr) {
        return bind(&addr.addr.ss, addr.len);
    }

    int bind(const struct sockaddr *sa, socklen_t len);
    int listen(int backlog = 0);

    void clean() const;
    ssize_t send_sync(const void *_data, size_t _len, int flags = 0);
    ssize_t send_async(const void *_data, size_t _len);
    ssize_t recv_sync(void *_data, size_t _len, int flags = 0);
    ssize_t writev_sync(const iovec *iov, size_t iovcnt);

    int connect(const Address &sa) const {
        return ::connect(fd, &sa.addr.ss, sa.len);
    }

    int connect(const Address *sa) const {
        return ::connect(fd, &sa->addr.ss, sa->len);
    }

    int connect(const std::string &host, int port) const {
        Address addr;
        addr.assign(socket_type, host, port);
        return connect(addr);
    }

    int connect_sync(const Address &sa);
    ReturnCode connect_async(const Address &sa);

    void ssl_clear_error() {
        ERR_clear_error();
        ssl_want_read = 0;
        ssl_want_write = 0;
    }
    /**
     * This function does not set the last error; to obtain internal SSL error information, you should call
     * ERR_get_error().
     */
    int ssl_create(SSLContext *_ssl_context, int _flags);
    int ssl_connect();
    ReturnCode ssl_accept();
    ssize_t ssl_recv(void *_buf, size_t _n);
    ssize_t ssl_send(const void *_buf, size_t _n);
    ssize_t ssl_readv(IOVector *io_vector);
    ssize_t ssl_writev(IOVector *io_vector);
    ssize_t ssl_sendfile(const File &fp, off_t *offset, size_t size);
    STACK_OF(X509) * ssl_get_peer_cert_chain() const;
    std::vector<std::string> ssl_get_peer_cert_chain(int limit) const;
    X509 *ssl_get_peer_certificate() const;
    int ssl_get_peer_certificate(char *buf, size_t n) const;
    bool ssl_get_peer_certificate(String *buf) const;
    bool ssl_verify(bool allow_self_signed) const;
    bool ssl_check_host(const char *tls_host_name) const;
    void ssl_catch_error() const;
    bool ssl_shutdown();
    void ssl_close();
    static const char *ssl_get_error_reason(int *reason);

    ssize_t recvfrom(char *_buf, size_t _len, int flags, Address *sa) const {
        sa->len = sizeof(sa->addr);
        return recvfrom(_buf, _len, flags, &sa->addr.ss, &sa->len);
    }

    ssize_t recvfrom(char *buf, size_t len, int flags, sockaddr *addr, socklen_t *addr_len) const;
    ssize_t recvfrom_sync(char *_buf, size_t _len, int flags, Address *sa);
    ssize_t recvfrom_sync(char *_buf, size_t _len, int flags, sockaddr *addr, socklen_t *addr_len);

    bool cork();
    bool uncork();

    bool isset_readable_event() const {
        return events & SW_EVENT_READ;
    }

    bool isset_writable_event() const {
        return events & SW_EVENT_WRITE;
    }

    int wait_event(int timeout_ms, int _events) const;
    bool wait_for(const std::function<ReturnCode()> &fn, int event, int timeout_msec = -1);
    int what_event_want(int default_event) const;
    void free();

    static inline bool is_dgram(SocketType type) {
        return type == SW_SOCK_UDP || type == SW_SOCK_UDP6 || type == SW_SOCK_UNIX_DGRAM;
    }

    static inline bool is_stream(SocketType type) {
        return type == SW_SOCK_TCP || type == SW_SOCK_TCP6 || type == SW_SOCK_UNIX_STREAM;
    }

    static inline bool is_inet4(SocketType type) {
        return type == SW_SOCK_TCP || type == SW_SOCK_UDP || type == SW_SOCK_RAW;
    }

    static inline bool is_inet6(SocketType type) {
        return type == SW_SOCK_TCP6 || type == SW_SOCK_UDP6 || type == SW_SOCK_RAW6;
    }

    static inline bool is_tcp(SocketType type) {
        return type == SW_SOCK_TCP || type == SW_SOCK_TCP6;
    }

    static inline bool is_udp(SocketType type) {
        return type == SW_SOCK_UDP || type == SW_SOCK_UDP6;
    }

    static inline bool is_local(SocketType type) {
        return type == SW_SOCK_UNIX_STREAM || type == SW_SOCK_UNIX_DGRAM;
    }

    static inline bool is_raw(SocketType type) {
        return type == SW_SOCK_RAW || type == SW_SOCK_RAW6;
    }

    bool is_stream() const {
        return is_stream(socket_type);
    }

    bool is_tcp() const {
        return is_tcp(socket_type);
    }

    bool is_udp() const {
        return is_udp(socket_type);
    }

    bool is_dgram() const {
        return is_dgram(socket_type);
    }

    bool is_inet4() const {
        return is_inet4(socket_type);
    }

    bool is_inet6() const {
        return is_inet6(socket_type);
    }

    bool is_inet() const {
        return is_inet4() || is_inet6();
    }

    bool is_local() const {
        return is_local(socket_type);
    }

    bool is_raw() const {
        return is_raw(socket_type);
    }

    ssize_t write(const void *_buf, size_t _len) const {
        return ::write(fd, _buf, _len);
    }

    ssize_t read(void *_buf, size_t _len) const {
        return ::read(fd, _buf, _len);
    }

    /**
     * Read data from the socket synchronously without setting non-blocking or blocking IO,
     * and allow interruptions by signals.
     */
    ssize_t read_sync(void *_buf, size_t _len);

    /**
     * Write data to the socket synchronously without setting non-blocking or blocking IO,
     * and allow interruptions by signals.
     */
    ssize_t write_sync(const void *_buf, size_t _len);

    int shutdown(int _how) const {
        return ::shutdown(fd, _how);
    }

    ssize_t sendto_sync(const Address &dst_addr, const void *_buf, size_t _n, int flags = 0);

    ssize_t sendto(const char *dst_host, int dst_port, const void *data, size_t len, int flags = 0) const {
        Address addr;
        if (!addr.assign(socket_type, dst_host, dst_port)) {
            return SW_ERR;
        }
        return sendto(addr, data, len, flags);
    }

    ssize_t sendto(const Address &dst_addr, const void *data, size_t len, int flags = 0) const {
        return ::sendto(fd, data, len, flags, &dst_addr.addr.ss, dst_addr.len);
    }

    int catch_error(int err);

    int catch_write_error(const int err) {
        return catch_error(err);
    }

    int catch_write_pipe_error(const int err) {
        switch (err) {
        case ENOBUFS:
#ifdef __linux__
            kernel_nobufs = true;
            return SW_REDUCE_SIZE;
#else
            return catch_error(err);
#endif
        case EMSGSIZE:
            return SW_REDUCE_SIZE;
        default:
            return catch_error(err);
        }
    }

    int catch_read_error(const int err) {
        return catch_error(err);
    }

    static SocketType convert_to_type(int domain, int type);
    static SocketType convert_to_type(std::string &host);
    static int get_domain_and_type(SocketType type, int *sock_domain, int *sock_type);
};

std::string gethostbyname(int type, const std::string &name);
int gethostbyname(int type, const char *name, char *addr);
int gethostbyname(GethostbynameRequest *req);
int getaddrinfo(GetaddrinfoRequest *req);

}  // namespace network

/**
 * This function will never return NULL; if memory allocation fails, a C++ exception will be thrown.
 * Must use the `socket->free()` function to release the object pointer instead of the `delete` operator.
 * When the socket is released, it will close the file descriptor (fd).
 * If you do not want the fd to be closed, use `socket->move_fd()` to relinquish ownership of the fd.
 */
network::Socket *make_socket(int fd, FdType fd_type);
/**
 * The following three functions will return a null pointer if the socket creation fails.
 * It is essential to check the return value;
 * if it is nullptr, you should inspect errno to determine the cause of the error.
 */
network::Socket *make_socket(SocketType socket_type, FdType fd_type, int flags);
network::Socket *make_socket(
    SocketType type, FdType fd_type, int sock_domain, int sock_type, int socket_protocol, int flags);
int socket(int sock_domain, int sock_type, int socket_protocol, int flags);
network::Socket *make_server_socket(SocketType socket_type,
                                    const char *address,
                                    int port = 0,
                                    int backlog = SW_BACKLOG);
}  // namespace swoole
ext/swoole/include/swoole_channel.h000064400000004570151730542010013454 0ustar00/*
  +----------------------------------------------------------------------+
  | Swoole                                                               |
  +----------------------------------------------------------------------+
  | This source file is subject to version 2.0 of the Apache license,    |
  | that is bundled with this package in the file LICENSE, and is        |
  | available through the world-wide-web at the following url:           |
  | http://www.apache.org/licenses/LICENSE-2.0.html                      |
  | If you did not receive a copy of the Apache2.0 license and are unable|
  | to obtain it through the world-wide-web, please send a note to       |
  | license@swoole.com so we can mail you a copy immediately.            |
  +----------------------------------------------------------------------+
  | Author: Xinyu Zhu  <xyzhu1120@gmail.com>                             |
  |         shiguangqi <shiguangqi2008@gmail.com>                        |
  |         Twosee  <twose@qq.com>                                       |
  |         Tianfeng Han  <rango@swoole.com>                             |
  +----------------------------------------------------------------------+
 */

#pragma once

#include "swoole_lock.h"

namespace swoole {

enum ChannelFlag {
    SW_CHAN_LOCK = 1u << 1,
    SW_CHAN_NOTIFY = 1u << 2,
    SW_CHAN_SHM = 1u << 3,
};

struct Channel {
    off_t head;
    off_t tail;
    size_t size;
    char head_tag;
    char tail_tag;
    int num;
    int max_num;
    /**
     * Data length, excluding structure
     */
    size_t bytes;
    int flags;
    int maxlen;
    /**
     * memory point
     */
    void *mem;
    Lock *lock;
    Pipe *notify_pipe;

    bool empty() const {
        return num == 0;
    }
    bool full() const {
        return ((head == tail && tail_tag != head_tag) || (bytes + sizeof(int) * num == size));
    }
    int pop(void *out_buf, int buffer_length);
    int push(const void *in_data, int data_length);
    int out(void *out_buf, int buffer_length);
    int in(const void *in_data, int data_length);
    int peek(void *out, int buffer_length) const;
    int wait() const;
    int notify() const;
    void destroy();
    void print() const;
    int count() const {
        return num;
    }
    size_t get_bytes() const {
        return bytes;
    }
    static Channel *make(size_t size, size_t maxlen, int flags);
};
}  // namespace swoole
ext/swoole/include/swoole.h000064400000065731151730542010011772 0ustar00/*
  +----------------------------------------------------------------------+
  | Swoole                                                               |
  +----------------------------------------------------------------------+
  | This source file is subject to version 2.0 of the Apache license,    |
  | that is bundled with this package in the file LICENSE, and is        |
  | available through the world-wide-web at the following url:           |
  | http://www.apache.org/licenses/LICENSE-2.0.html                      |
  | If you did not receive a copy of the Apache2.0 license and are unable|
  | to obtain it through the world-wide-web, please send a note to       |
  | license@swoole.com so we can mail you a copy immediately.            |
  +----------------------------------------------------------------------+
  | Author: Tianfeng Han  <rango@swoole.com>                             |
  |         Twosee  <twose@qq.com>                                       |
  +----------------------------------------------------------------------+
*/

#pragma once

#ifdef HAVE_CONFIG_H
#include "config.h"
#elif defined(ENABLE_PHP_SWOOLE)
#include "php_config.h"
#endif

#ifdef __cplusplus
#define SW_EXTERN_C_BEGIN extern "C" {
#define SW_EXTERN_C_END }
#else
#define SW_EXTERN_C_BEGIN
#define SW_EXTERN_C_END
#endif

#ifndef _GNU_SOURCE
#define _GNU_SOURCE
#endif

#ifndef _PTHREAD_PSHARED
#define _PTHREAD_PSHARED
#endif

/*--- C standard library ---*/
#include <cassert>
#include <cctype>
#include <cstdarg>
#include <cstddef>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <climits>
#include <unistd.h>
#include <pthread.h>
#include <inttypes.h>

#include <sys/uio.h>
#include <sys/utsname.h>

#include <string>
#include <memory>
#include <list>
#include <functional>
#include <mutex>

typedef unsigned long ulong_t;

#if defined(__GNUC__)
#if __GNUC__ >= 3
#define sw_inline inline __attribute__((always_inline))
#else
#define sw_inline inline
#endif
#elif defined(_MSC_VER)
#define sw_inline __forceinline
#else
#define sw_inline inline
#endif

#if defined(__GNUC__) && __GNUC__ >= 4
#define SW_API __attribute__((visibility("default")))
#else
#define SW_API
#endif

#if !defined(__GNUC__) || __GNUC__ < 3
#define __builtin_expect(x, expected_value) (x)
#endif

#define sw_likely(x) __builtin_expect(!!(x), 1)
#define sw_unlikely(x) __builtin_expect(!!(x), 0)

#define SW_START_LINE "-------------------------START----------------------------"
#define SW_END_LINE "--------------------------END-----------------------------"
#define SW_ECHO_RED "\e[31m%s\e[0m"
#define SW_ECHO_GREEN "\e[32m%s\e[0m"
#define SW_ECHO_YELLOW "\e[33m%s\e[0m"
#define SW_ECHO_BLUE "\e[34m%s\e[0m"
#define SW_ECHO_MAGENTA "\e[35m%s\e[0m"
#define SW_ECHO_CYAN "\e[36m%s\e[0m"
#define SW_ECHO_WHITE "\e[37m%s\e[0m"

#define SW_ECHO_LEN_RED "\e[31m%.*s\e[0m"
#define SW_ECHO_LEN_GREEN "\e[32m%.*s\e[0m"
#define SW_ECHO_LEN_YELLOW "\e[33m%.*s\e[0m"
#define SW_ECHO_LEN_BLUE "\e[34m%.*s\e[0m"
#define SW_ECHO_LEN_MAGENTA "\e[35m%.*s\e[0m"
#define SW_ECHO_LEN_CYAN "\e[36m%.*s\e[0m"
#define SW_ECHO_LEN_WHITE "\e[37m%.*s\e[0m"

#define SW_ECHO_RED_BG "\e[41m%s\e[0m"
#define SW_ECHO_GREEN_BG "\e[42m%s\e[0m"

#define SW_COLOR_RED 1
#define SW_COLOR_GREEN 2
#define SW_COLOR_YELLOW 3
#define SW_COLOR_BLUE 4
#define SW_COLOR_MAGENTA 5
#define SW_COLOR_CYAN 6
#define SW_COLOR_WHITE 7

#define SW_SPACE ' '
#define SW_CRLF "\r\n"
#define SW_CRLF_LEN 2
#define SW_ASCII_CODE_0 64
#define SW_ASCII_CODE_Z 106
/*----------------------------------------------------------------------------*/

#include "swoole_config.h"
#include "swoole_version.h"
#include "swoole_log.h"
#include "swoole_atomic.h"
#include "swoole_error.h"

#define SW_MAX(A, B) ((A) > (B) ? (A) : (B))
#define SW_MIN(A, B) ((A) < (B) ? (A) : (B))
#define SW_LOOP_N(n) for (decltype(n) i = 0; i < n; i++)
#define SW_LOOP for (;;)

#ifndef MAYBE_UNUSED
#ifdef __GNUC__
#define MAYBE_UNUSED __attribute__((used))
#else
#define MAYBE_UNUSED
#endif
#endif

#ifndef MAX
#define MAX(A, B) SW_MAX(A, B)
#endif
#ifndef MIN
#define MIN(A, B) SW_MIN(A, B)
#endif

#define SW_NUM_BILLION (1000 * 1000 * 1000)
#define SW_NUM_MILLION (1000 * 1000)

#ifdef SW_DEBUG
#define SW_ASSERT(e) assert(e)
#define SW_ASSERT_1BYTE(v)                                                                                             \
    do {                                                                                                               \
        size_t i = 0, n = 0;                                                                                           \
        for (; i < sizeof(v); i++) {                                                                                   \
            n += ((v >> i) & 1) ? 1 : 0;                                                                               \
        }                                                                                                              \
        assert(n == 1);                                                                                                \
    } while (0)
#else
#define SW_ASSERT(e)
#define SW_ASSERT_1BYTE(v)
#endif
#define SW_START_SLEEP usleep(100000)  // sleep 0.1s, wait fork and pthread_create

#ifdef SW_THREAD
#define SW_THREAD_LOCAL thread_local
extern std::mutex sw_thread_lock;
#else
#define SW_THREAD_LOCAL
#endif

/**
 * API naming rules
 * -----------------------------------
 * - starts with swoole_, means it is ready or has been used as an external API
 * - starts with sw_, internal use only
 */

/*-----------------------------------Memory------------------------------------*/
void *sw_malloc(size_t size);
void sw_free(void *ptr);
void *sw_calloc(size_t nmemb, size_t size);
void *sw_realloc(void *ptr, size_t size);

// Evaluates to the number of elements in 'array'
#define SW_ARRAY_SIZE(array) (sizeof(array) / sizeof(array[0]))

#define SW_DEFAULT_ALIGNMENT sizeof(unsigned long)
#define SW_MEM_ALIGNED_SIZE(size) SW_MEM_ALIGNED_SIZE_EX(size, SW_DEFAULT_ALIGNMENT)
#define SW_MEM_ALIGNED_SIZE_EX(size, alignment) (((size) + ((alignment) -1LL)) & ~((alignment) -1LL))

/*-------------------------------Declare Struct--------------------------------*/
namespace swoole {
class MemoryPool;
class Reactor;
class String;
class Timer;
struct TimerNode;
struct Event;
class Pipe;
class MessageBus;
class Server;
namespace network {
struct Socket;
struct Address;
}  // namespace network
class AsyncThreads;
#ifdef SW_USE_IOURING
class Iouring;
#endif
namespace async {
class ThreadPool;
}
struct Protocol;
struct EventData;
struct DataHead;
typedef int (*ReactorHandler)(Reactor *reactor, Event *event);
typedef std::function<void(void *)> Callback;
typedef std::function<void(Timer *, TimerNode *)> TimerCallback;
}  // namespace swoole

typedef swoole::DataHead swDataHead;

/*----------------------------------String-------------------------------------*/

#define SW_STRS(s) s, sizeof(s)
#define SW_STRL(s) s, sizeof(s) - 1

#define SW_STREQ(str, len, const_str) swoole_streq(str, len, SW_STRL(const_str))
#define SW_STRCASEEQ(str, len, const_str) swoole_strcaseeq(str, len, SW_STRL(const_str))

#define SW_STR_STARTS_WITH(str, len, const_sub_str) swoole_str_starts_with(str, len, SW_STRL(const_sub_str))
#define SW_STR_ISTARTS_WITH(str, len, const_sub_str) swoole_str_istarts_with(str, len, SW_STRL(const_sub_str))

#if defined(SW_USE_JEMALLOC) || defined(SW_USE_TCMALLOC)
#define sw_strdup swoole_strdup
#define sw_strndup swoole_strndup
#else
#define sw_strdup strdup
#define sw_strndup strndup
#endif

/** always return less than size, zero termination  */
size_t sw_snprintf(char *buf, size_t size, const char *format, ...) __attribute__((format(printf, 3, 4)));
size_t sw_vsnprintf(char *buf, size_t size, const char *format, va_list args);
int sw_printf(const char *format, ...);
bool sw_wait_for(const std::function<bool()> &fn, int timeout_ms);

static inline long sw_atol(const char *str) {
    return std::strtol(str, nullptr, 10);
}

static inline int sw_atoi(const char *str) {
    return static_cast<int>(sw_atol(str));
}

static inline void sw_memset_zero(void *s, size_t n) {
    memset(s, '\0', n);
}

#define sw_unset_bit(val, bit) val &= ~bit
#define sw_set_bit(val, bit) val |= bit

static inline int sw_mem_equal(const void *v1, size_t s1, const void *v2, size_t s2) {
    return s1 == s2 && memcmp(v1, v2, s2) == 0;
}

static inline size_t swoole_strlcpy(char *dest, const char *src, size_t size) {
    const size_t len = strlen(src);
    if (size != 0) {
        const size_t n = std::min(len, size - 1);
        memcpy(dest, src, n);
        dest[n] = '\0';
    }
    return len;
}

static inline char *swoole_strdup(const char *s) {
    size_t l = strlen(s) + 1;
    char *p = static_cast<char *>(sw_malloc(l));
    if (sw_likely(p)) {
        memcpy(p, s, l);
    }
    return p;
}

static inline char *swoole_strndup(const char *s, const size_t n) {
    char *p = static_cast<char *>(sw_malloc(n + 1));
    if (sw_likely(p)) {
        strncpy(p, s, n)[n] = '\0';
    }
    return p;
}

/* string equal */
static inline unsigned int swoole_streq(const char *str1, size_t len1, const char *str2, size_t len2) {
    return (len1 == len2) && (strncmp(str1, str2, len1) == 0);
}

static inline unsigned int swoole_strcaseeq(const char *str1, size_t len1, const char *str2, size_t len2) {
    return (len1 == len2) && (strncasecmp(str1, str2, len1) == 0);
}

static inline unsigned int swoole_str_starts_with(const char *pstr, size_t plen, const char *sstr, size_t slen) {
    return (plen >= slen) && (strncmp(pstr, sstr, slen) == 0);
}

static inline unsigned int swoole_str_istarts_with(const char *pstr, size_t plen, const char *sstr, size_t slen) {
    return (plen >= slen) && (strncasecmp(pstr, sstr, slen) == 0);
}

static inline const char *swoole_strnstr(const char *haystack,
                                         uint32_t haystack_length,
                                         const char *needle,
                                         uint32_t needle_length) {
    assert(needle_length > 0);

    if (sw_likely(needle_length <= haystack_length)) {
        for (uint32_t i = 0; i < haystack_length - needle_length + 1; i++) {
            if ((haystack[0] == needle[0]) && (0 == memcmp(haystack, needle, needle_length))) {
                return haystack;
            }
            haystack++;
        }
    }

    return nullptr;
}

static inline const char *swoole_strncasestr(const char *haystack,
                                             uint32_t haystack_length,
                                             const char *needle,
                                             uint32_t needle_length) {
    assert(needle_length > 0);

    if (sw_likely(needle_length <= haystack_length)) {
        for (uint32_t i = 0; i < haystack_length - needle_length + 1; i++) {
            if ((haystack[0] == needle[0]) && (0 == strncasecmp(haystack, needle, needle_length))) {
                return haystack;
            }
            haystack++;
        }
    }

    return nullptr;
}

static inline ssize_t swoole_strnpos(const char *haystack,
                                     uint32_t haystack_length,
                                     const char *needle,
                                     uint32_t needle_length) {
    assert(needle_length > 0);

    const char *pos = swoole_strnstr(haystack, haystack_length, needle, needle_length);
    return pos == nullptr ? -1 : pos - haystack;
}

static inline ssize_t swoole_strrnpos(const char *haystack, const char *needle, uint32_t length) {
    uint32_t needle_length = strlen(needle);
    assert(needle_length > 0);
    haystack += (length - needle_length);

    for (uint32_t i = length - needle_length; i > 0; i--) {
        if ((haystack[0] == needle[0]) && (0 == memcmp(haystack, needle, needle_length))) {
            return i;
        }
        haystack--;
    }

    return -1;
}

static inline void swoole_strtolower(char *str, const int length) {
    char *c = str;
    const char *e = c + length;

    while (c < e) {
        *c = static_cast<char>(tolower(*c));
        c++;
    }
}

/*--------------------------------Constants------------------------------------*/
enum swResultCode {
    SW_OK = 0,
    SW_ERR = -1,
};

enum swReturnCode {
    SW_SUCCESS = 0,
    SW_CONTINUE = 1,
    SW_WAIT = 2,
    SW_CLOSE = 3,
    SW_ERROR = 4,
    SW_READY = 5,
    SW_INVALID = 6,
    SW_REDUCE_SIZE = 7,
};

enum swFdType {
    SW_FD_SESSION,        // server stream session
    SW_FD_STREAM_SERVER,  // server stream port
    SW_FD_DGRAM_SERVER,   // server dgram port
    SW_FD_PIPE,
    SW_FD_STREAM,
    SW_FD_AIO,
    /**
     * Coroutine Socket
     */
    SW_FD_CO_SOCKET,
    /**
     * socket poll fd [coroutine::socket_poll]
     */
    SW_FD_CO_POLL,
    /**
     * event waiter
     */
    SW_FD_CO_EVENT,
    /**
     * signalfd
     */
    SW_FD_SIGNAL,
    SW_FD_DNS_RESOLVER,
    SW_FD_CARES,
    /**
     * io_uring
     */
    SW_FD_IOURING,
    /**
     * SW_FD_USER or SW_FD_USER+n: for custom event
     */
    SW_FD_USER = 16,
    SW_FD_STREAM_CLIENT,
    SW_FD_DGRAM_CLIENT,
};

enum swSocketFlag {
    SW_SOCK_NONBLOCK = 1 << 2,
    SW_SOCK_CLOEXEC = 1 << 3,
    SW_SOCK_SSL = (1u << 9),
};

enum swSocketType {
    SW_SOCK_TCP = 1,
    SW_SOCK_UDP = 2,
    SW_SOCK_TCP6 = 3,
    SW_SOCK_UDP6 = 4,
    SW_SOCK_UNIX_STREAM = 5,  // unix sock stream
    SW_SOCK_UNIX_DGRAM = 6,   // unix sock dgram
    SW_SOCK_RAW = 7,
    SW_SOCK_RAW6 = 8,
};

enum swTimeoutType {
    SW_TIMEOUT_DNS = 1 << 0,
    SW_TIMEOUT_CONNECT = 1 << 1,
    SW_TIMEOUT_READ = 1 << 2,
    SW_TIMEOUT_WRITE = 1 << 3,
    SW_TIMEOUT_RDWR = SW_TIMEOUT_READ | SW_TIMEOUT_WRITE,
    SW_TIMEOUT_ALL = SW_TIMEOUT_DNS | SW_TIMEOUT_CONNECT | SW_TIMEOUT_RDWR,
};

enum swEventType {
    SW_EVENT_NULL = 0,
    SW_EVENT_DEAULT = 1u << 8,
    SW_EVENT_READ = 1u << 9,
    SW_EVENT_WRITE = 1u << 10,
    SW_EVENT_RDWR = SW_EVENT_READ | SW_EVENT_WRITE,
    SW_EVENT_ERROR = 1u << 11,
    SW_EVENT_ONCE = 1u << 12,
};

enum swForkType {
    SW_FORK_SPAWN = 0,
    SW_FORK_EXEC = 1 << 1,
    SW_FORK_DAEMON = 1 << 2,
    SW_FORK_PRECHECK = 1 << 3,
};

enum swTraverseOperation {
    SW_TRAVERSE_KEEP = 0,
    SW_TRAVERSE_REMOVE = 1,
    SW_TRAVERSE_STOP = 2,
};

//------------------------------Base--------------------------------
#ifndef uchar
typedef unsigned char uchar;
#endif

#define swoole_tolower(c) (uchar)((c >= 'A' && c <= 'Z') ? (c | 0x20) : c)
#define swoole_toupper(c) (uchar)((c >= 'a' && c <= 'z') ? (c & ~0x20) : c)

/**
 * This function appends a '\0' at the end of the string,
 * so the allocated memory buffer must be len + 1.
 */
void swoole_random_string(char *buf, size_t len);
void swoole_random_string(std::string &str, size_t len);
uint64_t swoole_random_int();
size_t swoole_random_bytes(char *buf, size_t size);

static inline char *swoole_strlchr(char *p, const char *last, char c) {
    while (p < last) {
        if (*p == c) {
            return p;
        }
        p++;
    }
    return nullptr;
}

static inline size_t swoole_size_align(size_t size, int pagesize) {
    return size + (pagesize - (size % pagesize));
}

//------------------------------Base--------------------------------
enum swEventDataFlag {
    SW_EVENT_DATA_NORMAL,
    SW_EVENT_DATA_PTR = 1u << 1,
    SW_EVENT_DATA_CHUNK = 1u << 2,
    SW_EVENT_DATA_BEGIN = 1u << 3,
    SW_EVENT_DATA_END = 1u << 4,
    SW_EVENT_DATA_OBJ_PTR = 1u << 5,
    SW_EVENT_DATA_POP_PTR = 1u << 6,
};

enum swTaskFlag {
    SW_TASK_TMPFILE = 1,
    SW_TASK_SERIALIZE = 1u << 1,
    SW_TASK_NONBLOCK = 1u << 2,
    SW_TASK_CALLBACK = 1u << 3,
    SW_TASK_WAITALL = 1u << 4,
    SW_TASK_COROUTINE = 1u << 5,
    SW_TASK_PEEK = 1u << 6,
    SW_TASK_NOREPLY = 1u << 7,
};

enum swDNSLookupFlag {
    SW_DNS_LOOKUP_RANDOM = (1u << 11),
};

extern thread_local char sw_error[SW_ERROR_MSG_SIZE];

enum swPipeType {
    SW_PIPE_WORKER = 0,
    SW_PIPE_MASTER = 1,
    SW_PIPE_READ = 0,
    SW_PIPE_WRITE = 1,
    SW_PIPE_NONBLOCK = 2,
};

//----------------------Tool Function---------------------
uint32_t swoole_common_multiple(uint32_t u, uint32_t v);
uint32_t swoole_common_divisor(uint32_t u, uint32_t v);

int swoole_itoa(char *buf, long value);
bool swoole_mkdir_recursive(const std::string &dir);

int swoole_rand();
int swoole_rand(int min, int max);
int swoole_system_random(int min, int max);

int swoole_version_compare(const char *version1, const char *version2);
void swoole_print_backtrace();
void swoole_print_backtrace_on_error();
char *swoole_string_format(size_t n, const char *format, ...);
bool swoole_get_env(const char *name, int *value);
int swoole_get_systemd_listen_fds();

void swoole_init();
void swoole_clean();
void swoole_exit(int _status);
pid_t swoole_fork(int flags);
pid_t swoole_fork_exec(const std::function<void()> &child_fn);
pid_t swoole_waitpid(pid_t _pid, int *_stat_loc, int _options);
void swoole_thread_init(bool main_thread = false);
void swoole_thread_clean(bool main_thread = false);
void swoole_redirect_stdout(int new_fd);
void swoole_redirect_stdout(const char *file);
int swoole_shell_exec(const char *command, pid_t *pid, bool get_error_stream);
int swoole_daemon(int nochdir, int noclose);
bool swoole_is_root_user();
void swoole_set_isolation(const std::string &group_, const std::string &user_, const std::string &chroot_);
bool swoole_set_task_tmpdir(const std::string &dir);
void swoole_set_process_death_signal(int signal);
const std::string &swoole_get_task_tmpdir();
int swoole_tmpfile(char *filename);

#ifdef HAVE_CPU_AFFINITY
#ifdef __FreeBSD__
#include <sys/types.h>
#include <sys/cpuset.h>
#include <pthread_np.h>
typedef cpuset_t cpu_set_t;
#endif
int swoole_set_cpu_affinity(cpu_set_t *set);
int swoole_get_cpu_affinity(cpu_set_t *set);
#endif

namespace swoole {
typedef long SessionId;
typedef long TaskId;
typedef uint8_t ReactorId;
typedef uint32_t WorkerId;
typedef swEventType EventType;
typedef swSocketType SocketType;
typedef swTimeoutType TimeoutType;
typedef swFdType FdType;
typedef swReturnCode ReturnCode;
typedef swResultCode ResultCode;

struct Event {
    int fd;
    int16_t reactor_id;
    FdType type;
    network::Socket *socket;
};

struct DataHead {
    SessionId fd;
    uint64_t msg_id;
    uint32_t len;
    int16_t reactor_id;
    uint8_t type;
    uint8_t flags;
    uint16_t server_fd;
    uint16_t ext_flags;
    uint32_t reserved;
    double time;
    size_t dump(char *buf, size_t len);
    void print();
};

struct EventData {
    DataHead info;
    char data[SW_IPC_BUFFER_SIZE];

    uint32_t size() const {
        return sizeof(info) + len();
    }

    uint32_t len() const {
        return info.len;
    }
};

struct ThreadGlobal {
    uint16_t id;
    uint8_t type;
    bool main_thread;
    int32_t error;
    String *buffer_stack;
    Reactor *reactor;
    Timer *timer;
    MessageBus *message_bus;
    AsyncThreads *async_threads;
#ifdef SW_USE_IOURING
    Iouring *iouring;
#endif
    bool signal_blocking_all;
};

struct Allocator {
    void *(*malloc)(size_t size);
    void *(*calloc)(size_t nmemb, size_t size);
    void *(*realloc)(void *ptr, size_t size);
    void (*free)(void *ptr);
};

struct NameResolver {
    enum Type {
        TYPE_KERNEL,
        TYPE_PHP,
        TYPE_USER,
    };
    struct Context {
        int type;
        double timeout;
        void *private_data;
        bool with_port;
        bool cluster_;
        bool final_;
        std::function<void(Context *ctx)> dtor;

        ~Context() {
            if (private_data && dtor) {
                dtor(this);
            }
        }
    };
    std::function<std::string(const std::string &, Context *, void *)> resolve;
    void *private_data;
    Type type;
};

struct DnsServer {
    std::string host;
    int port;
};

struct Global {
    uchar init : 1;
    uchar running : 1;
    uchar wait_signal : 1;
    uchar enable_signalfd : 1;
    /**
     * Under macOS or FreeBSD, kqueue does not support listening for writable events on pipes. When a large amount of
     * data is written to a pipe in process A, and the buffer becomes full, listening for writable events will not work.
     * In process B, even after consuming the data from the pipe, the writable event in process A cannot be triggered.
     * As a result, the functionality of Task and Process Server cannot be supported, making all scenarios relying on
     * pipes for inter-process communication unable to function properly.
     */
    uchar enable_kqueue : 1;
    uchar dns_lookup_random : 1;
    uchar use_async_resolver : 1;
    uchar use_name_resolver : 1;
    uchar enable_coroutine : 1;
    uchar print_backtrace_on_error : 1;

    TaskId current_task_id;

    int signal_fd;
    bool signal_alarm;
    bool signal_dispatch;
    uint32_t signal_listener_num;
    uint32_t signal_async_listener_num;

    long trace_flags;

    void (*fatal_error)(int code, const char *str, ...);
    void (*print_backtrace)();

    //-----------------------[System]--------------------------
    uint16_t cpu_num;
    uint32_t pagesize;
    struct utsname uname;
    uint32_t max_sockets;
    uint32_t max_file_content;
    //-----------------------[Memory]--------------------------
    MemoryPool *memory_pool;
    Allocator std_allocator;
    std::string task_tmpfile;
    //------------------[Single Instance]----------------------
    Logger *logger;
    Server *server;
    FILE *stdout_;
    //-----------------------[DNS]-----------------------------
    DnsServer dns_server;
    double dns_cache_refresh_time;
    int dns_tries;
    std::string dns_resolvconf_path;
    std::string dns_hosts_path;
    std::list<NameResolver> name_resolvers;
    //-----------------------[AIO]----------------------------
    uint32_t aio_core_worker_num;
    uint32_t aio_worker_num;
#ifdef SW_USE_IOURING
    uint32_t iouring_entries = 0;
    uint32_t iouring_workers = 0;
    uint32_t iouring_flag = 0;
#endif
    double aio_max_wait_time;
    double aio_max_idle_time;
    network::Socket *aio_default_socket;
    //-----------------------[Hook]--------------------------
    void *hooks[SW_MAX_HOOK_TYPE];
    std::function<bool(Reactor *reactor, size_t &event_num)> user_exit_condition;
    // bug report message
    std::string bug_report_message;
};

std::string dirname(const std::string &file);
void hook_add(void **hooks, int type, const Callback &func, int push_back);
void hook_call(void **hooks, int type, void *arg);
double microtime();
void realtime_get(timespec *time);
void realtime_add(timespec *time, int64_t add_msec);
}  // namespace swoole

extern swoole::Global SwooleG;                      // Local Global Variable
extern thread_local swoole::ThreadGlobal SwooleTG;  // Thread Global Variable

#define SW_CPU_NUM (SwooleG.cpu_num)

static inline void swoole_set_last_error(int error) {
    SwooleTG.error = error;
}

static inline int swoole_get_last_error() {
    return SwooleTG.error;
}

static inline void swoole_clear_last_error() {
    SwooleTG.error = 0;
}

void swoole_clear_last_error_msg();
const char *swoole_get_last_error_msg();

static inline int swoole_get_thread_id() {
    return SwooleTG.id;
}

static inline int swoole_get_thread_type() {
    return SwooleTG.type;
}

static inline void swoole_set_thread_id(uint16_t id) {
    SwooleTG.id = id;
}

static inline void swoole_set_thread_type(uint8_t type) {
    SwooleTG.type = type;
}

static inline uint32_t swoole_pagesize() {
    return SwooleG.pagesize;
}

SW_API const char *swoole_strerror(int code);
SW_API void swoole_throw_error(int code);
SW_API void swoole_ignore_error(int code);
SW_API bool swoole_is_ignored_error(int code);
SW_API bool swoole_is_main_thread();
SW_API void swoole_set_log_level(int level);
SW_API void swoole_set_log_file(const char *file);
SW_API void swoole_set_trace_flags(long flags);
SW_API void swoole_set_print_backtrace_on_error(bool enable = true);
SW_API void swoole_set_stdout_stream(FILE *fp);
SW_API void swoole_set_dns_server(const std::string &server);
SW_API void swoole_set_hosts_path(const std::string &hosts_file);
SW_API swoole::DnsServer swoole_get_dns_server();
SW_API bool swoole_load_resolv_conf();
SW_API void swoole_name_resolver_add(const swoole::NameResolver &resolver, bool append = true);
SW_API void swoole_name_resolver_each(
    const std::function<enum swTraverseOperation(const std::list<swoole::NameResolver>::iterator &iter)> &fn);
SW_API std::string swoole_name_resolver_lookup(const std::string &host_name, swoole::NameResolver::Context *ctx);
SW_API int swoole_get_log_level();
SW_API FILE *swoole_get_stdout_stream();

enum swEventInitFlag {
    SW_EVENTLOOP_WAIT_EXIT = 1,
};

/**
 * manually_trigger:
 * Once enabled, the timer will no longer be triggered by event polling or the operating system's timer;
 * instead, it will be managed directly at the user space.
 */
SW_API swoole::Timer *swoole_timer_create(bool manually_trigger = false);
SW_API long swoole_timer_after(long ms, const swoole::TimerCallback &callback, void *private_data = nullptr);
SW_API long swoole_timer_tick(long ms, const swoole::TimerCallback &callback, void *private_data = nullptr);
SW_API swoole::TimerNode *swoole_timer_add(double ms,
                                           bool persistent,
                                           const swoole::TimerCallback &callback,
                                           void *private_data = nullptr);
SW_API swoole::TimerNode *swoole_timer_add(long ms,
                                           bool persistent,
                                           const swoole::TimerCallback &callback,
                                           void *private_data = nullptr);
SW_API bool swoole_timer_del(swoole::TimerNode *tnode);
SW_API bool swoole_timer_exists(long timer_id);
SW_API void swoole_timer_delay(swoole::TimerNode *tnode, long delay_ms);
SW_API swoole::TimerNode *swoole_timer_get(long timer_id);
SW_API bool swoole_timer_clear(long timer_id);
SW_API void swoole_timer_free();
SW_API void swoole_timer_select();
SW_API int64_t swoole_timer_get_next_msec();
SW_API bool swoole_timer_is_available();

SW_API int swoole_event_init(int flags);
SW_API int swoole_event_add(swoole::network::Socket *socket, int events);
SW_API int swoole_event_set(swoole::network::Socket *socket, int events);
SW_API int swoole_event_add_or_update(swoole::network::Socket *socket, int event);
SW_API int swoole_event_del(swoole::network::Socket *socket);
SW_API void swoole_event_defer(const swoole::Callback &cb, void *private_data);
SW_API ssize_t swoole_event_write(swoole::network::Socket *socket, const void *data, size_t len);
SW_API ssize_t swoole_event_writev(swoole::network::Socket *socket, const iovec *iov, size_t iovcnt);
SW_API swoole::network::Socket *swoole_event_get_socket(int fd);
SW_API int swoole_event_wait();
SW_API int swoole_event_free();
SW_API void swoole_event_set_handler(int fd_type, int event, swoole::ReactorHandler handler);
SW_API bool swoole_event_isset_handler(int fd_type, int event);
SW_API bool swoole_event_is_available();
SW_API bool swoole_event_is_running();

static sw_inline swoole::String *sw_tg_buffer() {
    return SwooleTG.buffer_stack;
}

static sw_inline swoole::MemoryPool *sw_mem_pool() {
    return SwooleG.memory_pool;
}

static sw_inline const swoole::Allocator *sw_std_allocator() {
    return &SwooleG.std_allocator;
}

static sw_inline swoole::Reactor *sw_reactor() {
    return SwooleTG.reactor;
}

static sw_inline swoole::Timer *sw_timer() {
    return SwooleTG.timer;
}
ext/swoole/include/swoole_timer.h000064400000010570151730542010013161 0ustar00/*
  +----------------------------------------------------------------------+
  | Swoole                                                               |
  +----------------------------------------------------------------------+
  | This source file is subject to version 2.0 of the Apache license,    |
  | that is bundled with this package in the file LICENSE, and is        |
  | available through the world-wide-web at the following url:           |
  | http://www.apache.org/licenses/LICENSE-2.0.html                      |
  | If you did not receive a copy of the Apache2.0 license and are unable|
  | to obtain it through the world-wide-web, please send a note to       |
  | license@swoole.com so we can mail you a copy immediately.            |
  +----------------------------------------------------------------------+
  | Author: Tianfeng Han  <rango@swoole.com>                             |
  |         Twosee  <twose@qq.com>                                       |
  +----------------------------------------------------------------------+
*/

#pragma once

#include "swoole_heap.h"
#include "swoole_reactor.h"
#include "swoole_util.h"

#include <unordered_map>

#define SW_TIMER_MIN_MS 1
#define SW_TIMER_MIN_SEC 0.001
#define SW_TIMER_MAX_MS LONG_MAX
#define SW_TIMER_MAX_SEC ((double) LONG_MAX / 1000)

namespace swoole {
typedef std::function<void(TimerNode *)> TimerDestructor;

struct TimerNode {
    enum Type {
        TYPE_KERNEL,
        TYPE_PHP,
    };
    long id;
    Type type;
    int64_t exec_msec;
    int64_t interval;
    uint64_t exec_count;
    uint64_t round;
    bool removed;
    HeapNode *heap_node;
    TimerCallback callback;
    void *data;
    TimerDestructor destructor;
};

class Timer {
    /*--------------signal timer--------------*/
    Reactor *reactor_ = nullptr;
    Heap heap;
    std::unordered_map<long, TimerNode *> map;
    uint64_t round;
    long _next_id;
    long _current_id;
    /*---------------event timer--------------*/
    int64_t base_time;
    /**
     * The time when the next timer will trigger, in milliseconds.
     * This event will serve as the timeout for the event loop's epoll/poll/kqueue,
     * or be set as the trigger time for the system clock.
     */
    int64_t next_msec_;
    /*----------------------------------------*/
    std::function<int(Timer *timer, long exec_msec)> set;
    std::function<void(Timer *timer)> close;

    void init(bool manually_trigger);
    void init_with_reactor(Reactor *reactor);
    void init_with_system_timer();
    void release_node(TimerNode *tnode);

  public:
    explicit Timer(bool manually_trigger);
    ~Timer();

    int64_t get_relative_msec() const {
        return get_absolute_msec() - base_time;
    }

    int64_t get_next_msec() const {
        return next_msec_;
    }

    static int64_t get_absolute_msec() {
        return time<std::chrono::milliseconds>(true);
    }

    Reactor *get_reactor() const {
        return reactor_;
    }

    TimerNode *add(long _msec, bool persistent, void *data, const TimerCallback &callback);
    bool remove(TimerNode *tnode);
    void update(const TimerNode *tnode) const {
        heap.change_priority(tnode->exec_msec, tnode->heap_node);
    }
    void delay(TimerNode *tnode, long delay_ms) const {
        long now_ms = get_relative_msec();
        tnode->exec_msec = (now_ms < 0 ? tnode->exec_msec : now_ms) + delay_ms;
        update(tnode);
    }
    void reinit(bool manually_trigger = false);
    void select();

    TimerNode *get(long id) {
        const auto it = map.find(id);
        if (it == map.end()) {
            return nullptr;
        }
        return it->second;
    }

    TimerNode *get(long id, const TimerNode::Type type) {
        TimerNode *tnode = get(id);
        return (tnode && tnode->type == type) ? tnode : nullptr;
    }

    size_t count() const {
        return map.size();
    }

    uint64_t get_round() const {
        return round;
    }

    bool remove(long id) {
        return remove(get(id));
    }

    const std::unordered_map<long, TimerNode *> &get_map() {
        return map;
    }
};

static inline long sec2msec(const long sec) {
    return sec * 1000;
}

static inline long sec2msec(const int sec) {
    return sec * 1000;
}

static inline long sec2msec(const double sec) {
    return static_cast<long>(sec * 1000);
}

static inline double msec2sec(const int msec) {
    return static_cast<double>(msec) / 1000.0;
}
}  // namespace swoole
ext/swoole/include/swoole_redis.h000064400000003521151730542020013146 0ustar00/*
  +----------------------------------------------------------------------+
  | Swoole                                                               |
  +----------------------------------------------------------------------+
  | This source file is subject to version 2.0 of the Apache license,    |
  | that is bundled with this package in the file LICENSE, and is        |
  | available through the world-wide-web at the following url:           |
  | http://www.apache.org/licenses/LICENSE-2.0.html                      |
  | If you did not receive a copy of the Apache2.0 license and are unable|
  | to obtain it through the world-wide-web, please send a note to       |
  | license@php.net so we can mail you a copy immediately.               |
  +----------------------------------------------------------------------+
  | Author: Tianfeng Han  <rango@swoole.com>                             |
  +----------------------------------------------------------------------+
*/

#pragma once

#include "swoole_server.h"

#include <vector>
#include <string>

#define SW_REDIS_RETURN_NIL "$-1\r\n"

#define SW_REDIS_MAX_COMMAND_SIZE 64
#define SW_REDIS_MAX_LINES 128
#define SW_REDIS_MAX_STRING_SIZE 536870912  // 512M

namespace swoole {
namespace redis {

enum State {
    STATE_RECEIVE_TOTAL_LINE,
    STATE_RECEIVE_LENGTH,
    STATE_RECEIVE_STRING,
};

enum ReplyType {
    REPLY_ERROR,
    REPLY_NIL,
    REPLY_STATUS,
    REPLY_INT,
    REPLY_STRING,
    REPLY_SET,
    REPLY_MAP,
};

const char *get_number(const char *p, int *_ret);
int recv_packet(Protocol *protocol, Connection *conn, String *buffer);
std::vector<std::string> parse(const char *data, size_t len);
void format_nil(String *buf);
void format(String *buf, ReplyType type, const std::string &value);
void format(String *buf, ReplyType type, long value);

}  // namespace redis
}  // namespace swoole
ext/swoole/include/swoole_process_pool.h000064400000032255151730542020014555 0ustar00/*
  +----------------------------------------------------------------------+
  | Swoole                                                               |
  +----------------------------------------------------------------------+
  | This source file is subject to version 2.0 of the Apache license,    |
  | that is bundled with this package in the file LICENSE, and is        |
  | available through the world-wide-web at the following url:           |
  | http://www.apache.org/licenses/LICENSE-2.0.html                      |
  | If you did not receive a copy of the Apache2.0 license and are unable|
  | to obtain it through the world-wide-web, please send a note to       |
  | license@swoole.com so we can mail you a copy immediately.            |
  +----------------------------------------------------------------------+
  | Author: Tianfeng Han  <rango@swoole.com>                             |
  |         Twosee  <twose@qq.com>                                       |
  +----------------------------------------------------------------------+
*/

#pragma once

#include "swoole_signal.h"
#include "swoole_lock.h"
#include "swoole_pipe.h"
#include "swoole_channel.h"
#include "swoole_msg_queue.h"
#include "swoole_message_bus.h"

#include <sys/wait.h>

#include <csignal>
#include <unordered_map>
#include <unordered_set>
#include <queue>

enum swWorkerStatus {
    SW_WORKER_BUSY = 1,
    SW_WORKER_IDLE = 2,
    SW_WORKER_EXIT = 3,
};

enum swWorkerType {
    SW_MASTER = 1,
    SW_WORKER = 2,
    SW_MANAGER = 3,
    SW_EVENT_WORKER = 2,
    SW_TASK_WORKER = 4,
    SW_USER_WORKER = 5,
};

enum swIPCMode {
    SW_IPC_NONE = 0,
    SW_IPC_UNIXSOCK = 1,
    SW_IPC_MSGQUEUE = 2,
    SW_IPC_SOCKET = 3,
};

SW_API swoole::WorkerId swoole_get_worker_id();
SW_API pid_t swoole_get_worker_pid();
SW_API int swoole_get_worker_type();
SW_API void swoole_set_worker_pid(pid_t pid);
SW_API void swoole_set_worker_id(swoole::WorkerId worker_id);
SW_API void swoole_set_worker_type(int type);
SW_API char swoole_get_worker_symbol();

namespace swoole {
enum WorkerMessageType {
    SW_WORKER_MESSAGE_STOP = 1,
};

enum ProtocolType {
    SW_PROTOCOL_TASK = 1,
    SW_PROTOCOL_STREAM,
    SW_PROTOCOL_MESSAGE,
};

struct WorkerStopMessage {
    pid_t pid;
    uint16_t worker_id;
};

class ExitStatus {
    pid_t pid_;
    int status_;

  public:
    ExitStatus(pid_t _pid, int _status) : pid_(_pid), status_(_status) {}

    pid_t get_pid() const {
        return pid_;
    }

    int get_status() const {
        return status_;
    }

    int get_code() const {
        return WEXITSTATUS(status_);
    }

    int get_signal() const {
        return WTERMSIG(status_);
    }

    bool is_normal_exit() const {
        return WIFEXITED(status_);
    }
};

static inline ExitStatus wait_process() {
    int status = 0;
    pid_t pid = ::wait(&status);
    return {pid, status};
}

static inline ExitStatus wait_process(pid_t _pid, int options) {
    int status = 0;
    pid_t pid = ::waitpid(_pid, &status, options);
    return {pid, status};
}

struct ProcessPool;
struct Worker;

struct WorkerGlobal {
    WorkerId id;
    uint8_t type;
    pid_t pid;
    bool shutdown;
    bool running;
    uint32_t max_request;
    /**
     * worker is shared memory, visible in other work processes.
     * When a worker process restarts, it may be held by both the old and new processes simultaneously,
     * necessitating careful handling of the state.
     */
    Worker *worker;
    /**
     *  worker_copy is a copy of worker,
     *  but it must be local memory and only used within the current process or thread.
     *  It is not visible to other worker processes.
     */
    Worker *worker_copy;
    time_t exit_time;
};

struct Worker {
    pid_t pid;
    WorkerId id;
    ProcessPool *pool;
    MsgQueue *queue;
    bool shared;

    bool redirect_stdout;
    bool redirect_stdin;
    bool redirect_stderr;

    /**
     * worker status, IDLE or BUSY
     */
    uint8_t status;
    uint8_t type;
    uint8_t msgqueue_mode;
    uint8_t child_process;

    uint32_t concurrency;
    time_t start_time;

    sw_atomic_long_t dispatch_count;
    sw_atomic_long_t request_count;
    sw_atomic_long_t response_count;
    size_t coroutine_num;

    Mutex *lock;
    UnixSocket *pipe_object;

    network::Socket *pipe_master;
    network::Socket *pipe_worker;
    network::Socket *pipe_current;

    void *ptr;

    ssize_t send_pipe_message(const void *buf, size_t n, int flags) const;
    bool has_exceeded_max_request() const;
    void set_max_request(uint32_t max_request, uint32_t max_request_grace);
    void report_error(const ExitStatus &exit_status) const;
    /**
     * Init global state for worker process.
     * Must be called after the process is spawned and before the main loop is executed.
     */
    void init();
    void shutdown();
    bool is_shutdown();
    static bool is_running();

    void set_status(swWorkerStatus _status) {
        status = _status;
    }

    void set_status_to_idle() {
        set_status(SW_WORKER_IDLE);
    }

    void set_status_to_busy() {
        set_status(SW_WORKER_BUSY);
    }

    void add_request_count() {
        request_count++;
    }

    bool is_busy() const {
        return status == SW_WORKER_BUSY;
    }

    bool is_idle() const {
        return status == SW_WORKER_IDLE;
    }
};

struct StreamInfo {
    network::Socket *socket;
    network::Socket *last_connection;
    char *socket_file;
    int socket_port;
    String *response_buffer;
};

struct ReloadTask {
    std::unordered_map<pid_t, Worker *> workers;
    std::queue<pid_t> kill_queue;
    TimerNode *timer = nullptr;

    size_t count() const {
        return workers.size();
    }

    bool is_completed() const {
        return workers.empty();
    }

    bool exists(pid_t pid) {
        return workers.find(pid) != workers.end();
    }

    ReloadTask() = default;
    ~ReloadTask();
    void kill_one(int signal_number = SIGTERM);
    void kill_all(int signal_number = SIGKILL);
    void add_workers(Worker *list, size_t n);
    void add_timeout_killer(int timeout);
    bool remove(pid_t pid);
    void clear_queue();
};

struct ProcessPool {
    bool running;
    bool reload_init;
    bool read_message;
    bool started;
    bool schedule_by_sysvmsg;
    bool async;

    uint8_t ipc_mode;
    ProtocolType protocol_type_;
    pid_t master_pid;
    uint32_t max_wait_time;
    uint64_t reload_count;
    time_t reload_last_time;

    /**
     * process type
     */
    uint8_t type;

    /**
     * worker->id = start_id + i
     */
    uint16_t start_id;

    /**
     * use message queue IPC
     */
    uint8_t use_msgqueue;

    /**
     * use stream socket IPC
     */
    uint8_t use_socket;

    char *packet_buffer;
    uint32_t max_packet_size_;

    /**
     * message queue key
     */
    key_t msgqueue_key;

    uint32_t worker_num;
    uint32_t max_request;
    uint32_t max_request_grace;

    /**
     * No idle task work process is available.
     */
    uint8_t scheduler_warning;
    time_t warning_time;

    void (*onStart)(ProcessPool *pool);
    void (*onShutdown)(ProcessPool *pool);
    void (*onBeforeReload)(ProcessPool *pool);
    void (*onAfterReload)(ProcessPool *pool);
    int (*onTask)(ProcessPool *pool, Worker *worker, EventData *task);
    void (*onWorkerStart)(ProcessPool *pool, Worker *worker);
    void (*onMessage)(ProcessPool *pool, RecvData *msg);
    void (*onWorkerExit)(ProcessPool *pool, Worker *worker);
    void (*onWorkerStop)(ProcessPool *pool, Worker *worker);
    void (*onWorkerError)(ProcessPool *pool, Worker *worker, const ExitStatus &exit_status);
    void (*onWorkerMessage)(ProcessPool *pool, EventData *msg);
    int (*onWorkerNotFound)(ProcessPool *pool, const ExitStatus &exit_status);
    int (*main_loop)(ProcessPool *pool, Worker *worker);

    sw_atomic_t round_id;

    Worker *workers;
    std::vector<std::shared_ptr<UnixSocket>> *pipes;
    std::unordered_map<pid_t, Worker *> *map_;
    MsgQueue *queue;
    StreamInfo *stream_info_;
    Channel *message_box = nullptr;
    MessageBus *message_bus = nullptr;
    ReloadTask *reload_task = nullptr;

    void *ptr;

    Worker *get_worker(WorkerId worker_id) const {
        return &(workers[worker_id - start_id]);
    }

    static TaskId get_task_id(const EventData *task) {
        return task->info.fd;
    }

    static WorkerId get_task_src_worker_id(const EventData *task) {
        return task->info.reactor_id;
    }

    void set_max_packet_size(uint32_t _max_packet_size) {
        max_packet_size_ = _max_packet_size;
    }

    bool is_master() const {
        return swoole_get_worker_type() == SW_MASTER;
    }

    bool is_worker() const {
        return swoole_get_worker_type() == SW_WORKER;
    }

    /**
     * SW_PROTOCOL_TASK
     * ==================================================================
     * The `EventData` structure must be sent as a single message and cannot be split into multiple transmissions.
     * If the length of the message content exceeds the size limit of the data field in EventData,
     * it should be written to a temporary file.
     * In this case, set the SW_TASK_TMPFILE flag in info.ext_flags.
     * Only the path to the temporary file will be transmitted,
     * and the receiving end should retrieve the actual message content from this temporary file.
     * Reference: Server::task_pack()
     *
     * SW_PROTOCOL_MESSAGE
     * ==================================================================
     * When sending the `EventData` structure, the message can be split into multiple transmissions.
     * When sending data in multiple parts, you must set a unique `info.msg_id`.
     * For the first slice, set the `info.flags` with the SW_EVENT_DATA_CHUNK | SW_EVENT_DATA_BEGIN flag,
     * and for the last slice, set the `info.flags` with the SW_EVENT_DATA_CHUNK | SW_EVENT_DATA_END flag.
     * The receiving end will place the data into a memory cache table, merge the data,
     * and only execute the onMessage callback once the complete message has been received.
     *
     * Reference: MessageBus::write() and MessageBus::read()
     *
     * SW_PROTOCOL_STREAM
     * ==================================================================
     *  +-------------------------------+-------------------------------+
     *  | Payload Length     ( 4 byte, network byte order)              |
     *  | Payload Data ...   ( Payload Length byte )                    |
     *  +-------------------------------- - - - - - - - - - - - - - - - +
     *
     *  The packet consists of a 4 byte length header followed by the data payload.
     *  The receiving end should first use `socket.recv(&payload_len, 4)` to obtain the length of the data payload.
     *  Then, execute `socket.recv(payload, payload_len)` to receive the complete data.
     *  Please note that sufficient memory space must be allocated for the payload,
     *  for example, `payload = malloc(payload_len)`.
     */
    void set_protocol(ProtocolType _protocol_type);
    void set_type(int _type);
    void set_start_id(int _start_id);
    void set_max_request(uint32_t _max_request, uint32_t _max_request_grace);
    bool detach();
    int wait();
    int start_check();
    int start();
    bool shutdown();
    bool reload();
    void reopen_logger();

    void trigger_read_message_event() {
        read_message = true;
    }

    pid_t spawn(Worker *worker);
    void stop(Worker *worker);
    void kill_all_workers(int signo = SIGKILL);
    swResultCode dispatch(EventData *data, int *worker_id);
    int response(const char *data, uint32_t length) const;
    swResultCode dispatch_sync(EventData *data, int *dst_worker_id);
    swResultCode dispatch_sync(const char *data, uint32_t len) const;
    void add_worker(Worker *worker) const;
    bool del_worker(const Worker *worker) const;
    Worker *get_worker_by_pid(pid_t pid) const;
    void destroy();
    int create(uint32_t worker_num, key_t msgqueue_key = 0, swIPCMode ipc_mode = SW_IPC_NONE);
    int create_message_box(size_t memory_size);
    int create_message_bus();
    int push_message(uint8_t _type, const void *data, size_t length) const;
    int push_message(const EventData *msg) const;
    bool send_message(WorkerId worker_id, const char *message, size_t l_message) const;
    int pop_message(void *data, size_t size) const;
    int listen(const char *socket_file, int backlog) const;
    int listen(const char *host, int port, int backlog) const;
    int schedule();
    bool is_worker_running(Worker *worker) const;

  private:
    static int recv_packet(Reactor *reactor, Event *event);
    static int recv_message(Reactor *reactor, Event *event);
    static int run_with_task_protocol(ProcessPool *pool, Worker *worker);
    static int run_with_stream_protocol(ProcessPool *pool, Worker *worker);
    static int run_with_message_protocol(ProcessPool *pool, Worker *worker);
    static int run_async(ProcessPool *pool, Worker *worker);
    void at_worker_enter(Worker *worker) const;
    void at_worker_exit(Worker *worker);

    bool wait_detached_worker(std::unordered_set<pid_t> &detached_workers, pid_t pid);
};
};  // namespace swoole

static sw_inline int swoole_kill(pid_t _pid, int _sig) {
    return kill(_pid, _sig);
}

typedef swoole::ProtocolType swProtocolType;

extern SW_THREAD_LOCAL swoole::WorkerGlobal SwooleWG;

static inline swoole::Worker *sw_worker() {
    return SwooleWG.worker;
}
ext/swoole/include/swoole_hash.h000064400000002363151730542020012766 0ustar00/*
  +----------------------------------------------------------------------+
  | Swoole                                                               |
  +----------------------------------------------------------------------+
  | This source file is subject to version 2.0 of the Apache license,    |
  | that is bundled with this package in the file LICENSE, and is        |
  | available through the world-wide-web at the following url:           |
  | http://www.apache.org/licenses/LICENSE-2.0.html                      |
  | If you did not receive a copy of the Apache2.0 license and are unable|
  | to obtain it through the world-wide-web, please send a note to       |
  | license@php.net so we can mail you a copy immediately.               |
  +----------------------------------------------------------------------+
  | Author: Tianfeng Han  <rango@swoole.com>                             |
  +----------------------------------------------------------------------+
*/

#pragma once

#include <cstddef>
#include <cstdint>

uint64_t swoole_hash_jenkins(const char *key, size_t keylen);
uint64_t swoole_hash_php(const char *key, size_t len);
uint64_t swoole_hash_austin(const char *key, size_t keylen);
uint32_t swoole_crc32(const char *data, size_t size);
ext/swoole/include/swoole_coroutine_system.h000064400000007435151730542020015463 0ustar00/*
  +----------------------------------------------------------------------+
  | Swoole                                                               |
  +----------------------------------------------------------------------+
  | This source file is subject to version 2.0 of the Apache license,    |
  | that is bundled with this package in the file LICENSE, and is        |
  | available through the world-wide-web at the following url:           |
  | http://www.apache.org/licenses/LICENSE-2.0.html                      |
  | If you did not receive a copy of the Apache2.0 license and are unable|
  | to obtain it through the world-wide-web, please send a note to       |
  | license@swoole.com so we can mail you a copy immediately.            |
  +----------------------------------------------------------------------+
  | Author: Tianfeng Han  <rango@swoole.com>                             |
  |         Twosee  <twose@qq.com>                                       |
  +----------------------------------------------------------------------+
*/

#pragma once

#include "swoole_coroutine.h"

#include <vector>

namespace swoole {
namespace coroutine {
//-------------------------------------------------------------------------------
struct PollSocket {
    int events;
    int16_t revents;
    void *ptr;
    network::Socket *socket;

    PollSocket(int _event, void *_ptr) {
        events = _event;
        ptr = _ptr;
        revents = 0;
        socket = nullptr;
    }
};

class System {
  public:
    static void init_reactor(Reactor *reactor);
    /* sleep */
    static int sleep(double sec);
    /* file */
    static std::shared_ptr<String> read_file(const char *file, bool lock = false);
    static ssize_t write_file(const char *file, const char *buf, size_t length, bool lock = false, int flags = 0);
    /* dns */
    static std::string gethostbyname(const std::string &hostname, int domain, double timeout = -1);
    static std::vector<std::string> getaddrinfo(const std::string &hostname,
                                                int family = AF_INET,
                                                int socktype = SOCK_STREAM,
                                                int protocol = IPPROTO_TCP,
                                                const std::string &service = "",
                                                double timeout = -1);
    static void set_dns_cache_expire(time_t expire);
    static void set_dns_cache_capacity(size_t capacity);
    static void clear_dns_cache();
    static float get_dns_cache_hit_ratio();
    /* multiplexing */
    static bool socket_poll(std::unordered_map<int, PollSocket> &fds, double timeout);
    /* wait */
    static pid_t wait(int *_stat_loc, double timeout = -1);
    static pid_t waitpid(pid_t _pid, int *_stat_loc, int _options, double timeout = -1);
    /**
     * waitpid_safe() does not deps on the signal
     * and can be safely used in a multithreaded environment.
     */
    static pid_t waitpid_safe(pid_t _pid, int *_stat_loc, int _options);
    /* signal */
    static int wait_signal(int signal, double timeout = -1);
    static int wait_signal(const std::vector<int> &signals, double timeout = -1);
    /* event */

    /**
     * On failure, it returns -1, and you can use swoole_get_last_error() or errno to determine the cause of the
     * failure. If successful, it returns the event set, such as SW_EVENT_READ | SW_EVENT_WRITE.
     */
    static int wait_event(int fd, int events, double timeout);
    static bool exec(const char *command, bool get_error_stream, std::shared_ptr<String> buffer, int *status);
};
std::string gethostbyname_impl_with_async(const std::string &hostname, int domain, double timeout = -1);
//-------------------------------------------------------------------------------
}  // namespace coroutine
}  // namespace swoole
ext/swoole/include/swoole_protocol.h000064400000012036151730542030013703 0ustar00/*
  +----------------------------------------------------------------------+
  | Swoole                                                               |
  +----------------------------------------------------------------------+
  | This source file is subject to version 2.0 of the Apache license,    |
  | that is bundled with this package in the file LICENSE, and is        |
  | available through the world-wide-web at the following url:           |
  | http://www.apache.org/licenses/LICENSE-2.0.html                      |
  | If you did not receive a copy of the Apache2.0 license and are unable|
  | to obtain it through the world-wide-web, please send a note to       |
  | license@swoole.com so we can mail you a copy immediately.            |
  +----------------------------------------------------------------------+
  | Author: Tianfeng Han  <rango@swoole.com>                             |
  |         Twosee  <twose@qq.com>                                       |
  +----------------------------------------------------------------------+
*/

#pragma once

#include "swoole_socket.h"

#include <netdb.h>

namespace swoole {
struct SendData {
    DataHead info;
    const char *data;
};

struct RecvData {
    DataHead info;
    const char *data;

    SessionId session_id() const {
        return info.fd;
    }

    uint32_t length() const {
        return info.len;
    }
};

struct PacketLength {
    const char *buf;
    uint32_t buf_size;
    uint32_t header_len;
};

struct WebSocketSettings {
    std::string protocol;           // with `Sec-WebSocket-Protocol` HTTP Header
    bool in_server;                 // server or client
    bool mask = true;               // enable websocket mask
    bool open_ping_frame = false;   // handle websocket ping frame by user
    bool open_pong_frame = false;   // handle websocket pong frame by user
    bool open_close_frame = false;  // handle websocket close frame by user
    /**
     * The default value is false, which means that websocket frame data compression is not enabled.
     * If supported by `zlib` or other compression libraries, the client can accept compressed data
     * (depending on whether the `Sec-Websocket-Extensions` header contains `permessage-deflate`)
     */
    bool compression = false;
};

struct Protocol {
    typedef ssize_t (*LengthFunc)(const Protocol *, network::Socket *, PacketLength *pl);
    /* one package: eof check */
    bool split_by_eof;

    char package_eof[SW_DATA_EOF_MAXLEN];
    uint8_t package_eof_len;

    char package_length_type;
    uint8_t package_length_size;
    uint16_t package_length_offset;
    uint16_t package_body_offset;
    uint32_t package_max_length;

    void *private_data_1;
    void *private_data_2;

    /**
     * callback this function when a complete data packet is received
     */
    int (*onPackage)(const Protocol *, network::Socket *, const RecvData *);
    /**
     * parse the length value in the received data
     * @return 0: more data needs to be received
     * @return -1: abnormal value, connection should be closed
     * @return >0: the length of the data packet
     */
    LengthFunc get_package_length;
    uint8_t (*get_package_length_size)(network::Socket *);

    int recv_with_eof_protocol(network::Socket *socket, String *buffer) const;
    int recv_with_length_protocol(network::Socket *socket, String *buffer) const;
    int recv_split_by_eof(network::Socket *socket, String *buffer) const;

    static ssize_t default_length_func(const Protocol *protocol, network::Socket *socket, PacketLength *pl);
};
}  // namespace swoole

#ifdef __BYTE_ORDER
#define SW_BYTE_ORDER __BYTE_ORDER
#elif defined(_BYTE_ORDER)
#define SW_BYTE_ORDER _BYTE_ORDER
#elif defined(BYTE_ORDER)
#define SW_BYTE_ORDER BYTE_ORDER
#else
#error "Unable to determine machine byte order"
#endif

#ifdef __LITTLE_ENDIAN
#define SW_LITTLE_ENDIAN __LITTLE_ENDIAN
#elif defined(_LITTLE_ENDIAN)
#define SW_LITTLE_ENDIAN _LITTLE_ENDIAN
#elif defined(LITTLE_ENDIAN)
#define SW_LITTLE_ENDIAN LITTLE_ENDIAN
#else
#error "No LITTLE_ENDIAN macro"
#endif

static sw_inline uint16_t swoole_swap_endian16(uint16_t x) {
    return (((x & 0xff) << 8) | ((x & 0xff00) >> 8));
}

static sw_inline uint32_t swoole_swap_endian32(uint32_t x) {
    return (((x & 0xff) << 24) | ((x & 0xff00) << 8) | ((x & 0xff0000) >> 8) | ((x & 0xff000000) >> 24));
}

static sw_inline uint64_t swoole_swap_endian64(uint64_t x) {
    return (((x & 0xff) << 56) | ((x & 0xff00) << 40) | ((x & 0xff0000) << 24) | ((x & 0xff000000) << 8) |
            ((x & 0xff00000000) >> 8) | ((x & 0xff0000000000) >> 24) | ((x & 0xff000000000000) >> 40) |
            ((x & 0xff00000000000000) >> 56));
}

int64_t swoole_unpack(char type, const void *data);
uint64_t swoole_hton64(uint64_t value);
uint64_t swoole_ntoh64(uint64_t value);

void swoole_dump_ascii(const char *data, size_t size);
void swoole_dump_bin(const uchar *data, char type, size_t size);
void swoole_dump_hex(const uchar *data, size_t outlen);

char *swoole_dec2hex(ulong_t value, int base);
ulong_t swoole_hex2dec(const char *hex, size_t *parsed_bytes);
int swoole_type_size(char type);
ext/swoole/include/swoole_memory.h000064400000005526151730542030013360 0ustar00/*
  +----------------------------------------------------------------------+
  | Swoole                                                               |
  +----------------------------------------------------------------------+
  | This source file is subject to version 2.0 of the Apache license,    |
  | that is bundled with this package in the file LICENSE, and is        |
  | available through the world-wide-web at the following url:           |
  | http://www.apache.org/licenses/LICENSE-2.0.html                      |
  | If you did not receive a copy of the Apache2.0 license and are unable|
  | to obtain it through the world-wide-web, please send a note to       |
  | license@swoole.com so we can mail you a copy immediately.            |
  +----------------------------------------------------------------------+
  | Author: Tianfeng Han  <rango@swoole.com>                             |
  |         Twosee  <twose@qq.com>                                       |
  +----------------------------------------------------------------------+
*/

#pragma once

#include "swoole.h"

//-------------------memory manager-------------------------
namespace swoole {

class MemoryPool {
  public:
    virtual ~MemoryPool() = default;
    virtual void *alloc(uint32_t size) = 0;
    virtual void free(void *ptr) = 0;

  protected:
    MemoryPool(){};
};

struct FixedPoolImpl;

class FixedPool final : public MemoryPool {
    FixedPoolImpl *impl;

  public:
    FixedPool(uint32_t slice_num, uint32_t slice_size, bool shared);
    FixedPool(uint32_t slice_size, void *memory, size_t size, bool shared);
    ~FixedPool() override;
    void *alloc(uint32_t size) override;
    void free(void *ptr) override;
    void debug(int max_lines = 100) const;
    uint32_t get_number_of_spare_slice() const;
    uint32_t get_number_of_total_slice() const;
    uint32_t get_slice_size() const;
    static size_t sizeof_struct_slice();
    static size_t sizeof_struct_impl();
};

struct RingBufferImpl;

// RingBuffer, In order for malloc / free
class RingBuffer : public MemoryPool {
    RingBufferImpl *impl;

  public:
    RingBuffer(uint32_t size, bool shared);
    ~RingBuffer() override;
    void *alloc(uint32_t size) override;
    void free(void *ptr) override;
};

struct GlobalMemoryImpl;

// Global memory, the program life cycle only malloc / free one time
class GlobalMemory : public MemoryPool {
  private:
    GlobalMemoryImpl *impl;

  public:
    GlobalMemory(uint32_t page_size, bool shared);
    ~GlobalMemory() override;
    void *alloc(uint32_t size) override;
    void free(void *ptr) override;
    size_t capacity() const;
    size_t get_memory_size() const;
};
}  // namespace swoole

void *sw_shm_malloc(size_t size);
void sw_shm_free(void *ptr);
void *sw_shm_calloc(size_t num, size_t _size);
int sw_shm_protect(void *ptr, int flags);
void *sw_shm_realloc(void *ptr, size_t new_size);
ext/swoole/include/swoole_socket_impl.h000064400000002675151730542030014363 0ustar00/*
  +----------------------------------------------------------------------+
  | Swoole                                                               |
  +----------------------------------------------------------------------+
  | This source file is subject to version 2.0 of the Apache license,    |
  | that is bundled with this package in the file LICENSE, and is        |
  | available through the world-wide-web at the following url:           |
  | http://www.apache.org/licenses/LICENSE-2.0.html                      |
  | If you did not receive a copy of the Apache2.0 license and are unable|
  | to obtain it through the world-wide-web, please send a note to       |
  | license@swoole.com so we can mail you a copy immediately.            |
  +----------------------------------------------------------------------+
  | Author: Tianfeng Han  <rango@swoole.com>                             |
  +----------------------------------------------------------------------+
*/

#pragma once

#include "swoole_coroutine_socket.h"

#include <memory>

using CoSocket = swoole::coroutine::Socket;
using NetSocket = swoole::network::Socket;

#ifdef SW_USE_URING_SOCKET
#include "swoole_uring_socket.h"
using swoole::coroutine::UringSocket;
using SocketImpl = UringSocket;
#else
using SocketImpl = CoSocket;
#endif

std::shared_ptr<SocketImpl> swoole_coroutine_get_socket_object(int sockfd);
std::shared_ptr<SocketImpl> swoole_coroutine_get_socket_object_ex(int sockfd);
ext/swoole/include/swoole_async.h000064400000006446151730542030013167 0ustar00/*
 +----------------------------------------------------------------------+
 | Swoole                                                               |
 +----------------------------------------------------------------------+
 | Copyright (c) 2012-2018 The Swoole Group                             |
 +----------------------------------------------------------------------+
 | This source file is subject to version 2.0 of the Apache license,    |
 | that is bundled with this package in the file LICENSE, and is        |
 | available through the world-wide-web at the following url:           |
 | http://www.apache.org/licenses/LICENSE-2.0.html                      |
 | If you did not receive a copy of the Apache2.0 license and are unable|
 | to obtain it through the world-wide-web, please send a note to       |
 | license@swoole.com so we can mail you a copy immediately.            |
 +----------------------------------------------------------------------+
 | Author: Tianfeng Han  <rango@swoole.com>                             |
 +----------------------------------------------------------------------+
 */

#pragma once

#include "swoole_socket.h"

#include <vector>

#ifndef O_DIRECT
#define O_DIRECT 040000
#endif

namespace swoole {

enum AsyncFlag {
    SW_AIO_WRITE_FSYNC = 1u << 1,
    SW_AIO_EOF = 1u << 2,
};

struct AsyncRequest {
    virtual ~AsyncRequest() = default;
};

struct AsyncEvent {
    size_t task_id;
    uint8_t canceled;
    int error;
    /**
     * input & output
     */
    std::shared_ptr<AsyncRequest> data;
    /**
     * output
     */
    ssize_t retval;
    /**
     * internal use only
     */
    network::Socket *pipe_socket;
    double timestamp;
    void *object;
    void (*handler)(AsyncEvent *event);
    void (*callback)(AsyncEvent *event);

    bool catch_error() const {
        return (error == SW_ERROR_AIO_TIMEOUT || error == SW_ERROR_AIO_CANCELED);
    }
};

struct GethostbynameRequest : AsyncRequest {
    std::string name;
    int family;
    std::string addr;

    GethostbynameRequest(std::string _name, int _family);
    ~GethostbynameRequest() override = default;
};

struct GetaddrinfoRequest : public AsyncRequest {
    std::string hostname;
    std::string service;
    int family;
    int socktype;
    int protocol;
    int error;
    std::vector<sockaddr_in6> results;
    int count;

    void parse_result(std::vector<std::string> &retval) const;

    GetaddrinfoRequest(std::string _hostname, int _family, int _socktype, int _protocol, std::string _service);
    ~GetaddrinfoRequest() override = default;
};

class AsyncThreads {
  public:
    size_t task_num = 0;
    Pipe *pipe = nullptr;
    std::shared_ptr<async::ThreadPool> pool;
    network::Socket *read_socket = nullptr;
    network::Socket *write_socket = nullptr;

    AsyncThreads();
    ~AsyncThreads();

    size_t get_task_num() const {
        return task_num;
    }

    size_t get_queue_size() const;
    size_t get_worker_num() const;
    void notify_one() const;

    static int callback(Reactor *reactor, Event *event);
};

namespace async {

typedef void (*Handler)(AsyncEvent *event);

AsyncEvent *dispatch(const AsyncEvent *request);

void handler_gethostbyname(AsyncEvent *event);
void handler_getaddrinfo(AsyncEvent *event);

}  // namespace async
};  // namespace swoole

swoole::AsyncThreads *sw_async_threads();
ext/swoole/include/swoole_file_hook.h000064400000005417151730542030014006 0ustar00/*
  +----------------------------------------------------------------------+
  | Swoole                                                               |
  +----------------------------------------------------------------------+
  | This source file is subject to version 2.0 of the Apache license,    |
  | that is bundled with this package in the file LICENSE, and is        |
  | available through the world-wide-web at the following url:           |
  | http://www.apache.org/licenses/LICENSE-2.0.html                      |
  | If you did not receive a copy of the Apache2.0 license and are unable|
  | to obtain it through the world-wide-web, please send a note to       |
  | license@swoole.com so we can mail you a copy immediately.            |
  +----------------------------------------------------------------------+
  | Author: Tianfeng Han  <rango@swoole.com>                             |
  +----------------------------------------------------------------------+
*/

#ifndef SW_FILE_HOOK_H_
#define SW_FILE_HOOK_H_

#include "swoole_coroutine_api.h"

#define open(pathname, flags, mode) swoole_coroutine_open(pathname, flags, mode)
#define close(fd) swoole_coroutine_close(fd)
#define read(fd, buf, count) swoole_coroutine_read(fd, buf, count)
#define write(fd, buf, count) swoole_coroutine_write(fd, buf, count)
#define lseek(fd, offset, whence) swoole_coroutine_lseek(fd, offset, whence)
#define readlink(fd, buf, size) swoole_coroutine_readlink(fd, buf, size)
#define unlink(pathname) swoole_coroutine_unlink(pathname)
#define mkdir(pathname, mode) swoole_coroutine_mkdir(pathname, mode)
#define rmdir(pathname) swoole_coroutine_rmdir(pathname)
#define rename(oldpath, newpath) swoole_coroutine_rename(oldpath, newpath)
#define fsync(fd) swoole_coroutine_fsync(fd)
#define fdatasync(fd) swoole_coroutine_fdatasync(fd)
#define ftruncate(fd, length) swoole_coroutine_ftruncate(fd, length)

#define access(pathname, mode) swoole_coroutine_access(pathname, mode)
#define fopen(pathname, mode) swoole_coroutine_fopen(pathname, mode)
#define fdopen(fd, mode) swoole_coroutine_fdopen(fd, mode)
#define freopen(pathname, mode, stream) swoole_coroutine_freopen(pathname, mode, stream)
#define fread(ptr, size, nmemb, stream) swoole_coroutine_fread(ptr, size, nmemb, stream)
#define fwrite(ptr, size, nmemb, stream) swoole_coroutine_fwrite(ptr, size, nmemb, stream)
#define fgets(s, size, stream) swoole_coroutine_fgets(s, size, stream)
#define fputs(s, stream) swoole_coroutine_fputs(s, stream)
#define feof(stream) swoole_coroutine_feof(stream)
#define fflush(stream) swoole_coroutine_fflush(stream)
#define fclose(stream) swoole_coroutine_fclose(stream)

#define opendir(name) swoole_coroutine_opendir(name)
#define readdir(dir) swoole_coroutine_readdir(dir)
#define closedir(dir) swoole_coroutine_closedir(dir)

#endif
ext/swoole/include/swoole_coroutine_api.h000064400000012176151730542030014707 0ustar00/*
  +----------------------------------------------------------------------+
  | Swoole                                                               |
  +----------------------------------------------------------------------+
  | This source file is subject to version 2.0 of the Apache license,    |
  | that is bundled with this package in the file LICENSE, and is        |
  | available through the world-wide-web at the following url:           |
  | http://www.apache.org/licenses/LICENSE-2.0.html                      |
  | If you did not receive a copy of the Apache2.0 license and are unable|
  | to obtain it through the world-wide-web, please send a note to       |
  | license@swoole.com so we can mail you a copy immediately.            |
  +----------------------------------------------------------------------+
  | Author: Tianfeng Han  <rango@swoole.com>                             |
  +----------------------------------------------------------------------+
*/

#ifndef SW_COROUTINE_API_H_
#define SW_COROUTINE_API_H_

#ifdef __cplusplus
extern "C" {
#endif

#include <sys/stat.h>
#include <sys/socket.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <sys/statvfs.h>
#include <stdint.h>
#include <stdio.h>
#include <netdb.h>
#include <poll.h>
#include <dirent.h>

/**
 * basic API
 */
long swoole_coroutine_create(void (*routine)(void *), void *arg);
uint8_t swoole_coroutine_is_in(void);
long swoole_coroutine_get_id(void);
void swoole_coroutine_sleep(int sec);
void swoole_coroutine_usleep(int usec);

/**
 * file
 */
int swoole_coroutine_access(const char *pathname, int mode);
int swoole_coroutine_open(const char *pathname, int flags, mode_t mode);
ssize_t swoole_coroutine_read(int fd, void *buf, size_t count);
ssize_t swoole_coroutine_write(int fd, const void *buf, size_t count);
off_t swoole_coroutine_lseek(int fd, off_t offset, int whence);
int swoole_coroutine_fstat(int fd, struct stat *statbuf);
int swoole_coroutine_stat(const char *path, struct stat *statbuf);
int swoole_coroutine_lstat(const char *path, struct stat *statbuf);
ssize_t swoole_coroutine_readlink(const char *pathname, char *buf, size_t len);
int swoole_coroutine_unlink(const char *pathname);
int swoole_coroutine_mkdir(const char *pathname, mode_t mode);
int swoole_coroutine_rmdir(const char *pathname);
int swoole_coroutine_rename(const char *oldpath, const char *newpath);
int swoole_coroutine_flock(int fd, int operation);
int swoole_coroutine_statvfs(const char *path, struct statvfs *buf);
int swoole_coroutine_close(int fd);
int swoole_coroutine_fsync(int fd);
int swoole_coroutine_fdatasync(int fd);
int swoole_coroutine_ftruncate(int fd, off_t length);

/**
 * stdio
 */
FILE *swoole_coroutine_fopen(const char *pathname, const char *mode);
FILE *swoole_coroutine_fdopen(int fd, const char *mode);
FILE *swoole_coroutine_freopen(const char *pathname, const char *mode, FILE *stream);
size_t swoole_coroutine_fread(void *ptr, size_t size, size_t nmemb, FILE *stream);
size_t swoole_coroutine_fwrite(const void *ptr, size_t size, size_t nmemb, FILE *stream);
char *swoole_coroutine_fgets(char *s, int size, FILE *stream);
int swoole_coroutine_fputs(const char *s, FILE *stream);
int swoole_coroutine_fflush(FILE *stream);
int swoole_coroutine_feof(FILE *stream);
int swoole_coroutine_fclose(FILE *stream);

/**
 * dir
 */
DIR *swoole_coroutine_opendir(const char *name);
struct dirent *swoole_coroutine_readdir(DIR *dirp);
int swoole_coroutine_closedir(DIR *dirp);

/**
 * socket API
 * The `bind()` and `listen()` functions do not block IO waiting,
 * so the original functions can be used directly without the need for hooks.
 */
int swoole_coroutine_socket(int domain, int type, int protocol);
int swoole_coroutine_socket_create(int fd);
int swoole_coroutine_socket_unwrap(int fd);
uint8_t swoole_coroutine_socket_exists(int fd);
ssize_t swoole_coroutine_send(int sockfd, const void *buf, size_t len, int flags);
ssize_t swoole_coroutine_sendmsg(int sockfd, const struct msghdr *msg, int flags);
ssize_t swoole_coroutine_recv(int sockfd, void *buf, size_t len, int flags);
ssize_t swoole_coroutine_recvmsg(int sockfd, struct msghdr *msg, int flags);
int swoole_coroutine_connect(int sockfd, const struct sockaddr *addr, socklen_t addrlen);
int swoole_coroutine_accept(int sockfd, struct sockaddr *addr, socklen_t *addrlen);
int swoole_coroutine_poll(struct pollfd *fds, nfds_t nfds, int timeout);
int swoole_coroutine_poll_fake(struct pollfd *fds, nfds_t nfds, int timeout);
int swoole_coroutine_socket_set_timeout(int fd, int which, double timeout);
int swoole_coroutine_socket_set_connect_timeout(int fd, double timeout);
int swoole_coroutine_socket_wait_event(int fd, int event, double timeout);
int swoole_coroutine_getaddrinfo(const char *name,
                                 const char *service,
                                 const struct addrinfo *req,
                                 struct addrinfo **pai);
struct hostent *swoole_coroutine_gethostbyname(const char *name);

/**
 * wait
 */
size_t swoole_coroutine_wait_count(void);
pid_t swoole_coroutine_waitpid(pid_t _pid, int *_stat_loc, int _options);
pid_t swoole_coroutine_wait(int *_stat_loc);

#ifdef __cplusplus
} /* end extern "C" */
#endif
#endif
ext/swoole/include/swoole_proxy.h000064400000006467151730542030013236 0ustar00/*
  +----------------------------------------------------------------------+
  | Swoole                                                               |
  +----------------------------------------------------------------------+
  | This source file is subject to version 2.0 of the Apache license,    |
  | that is bundled with this package in the file LICENSE, and is        |
  | available through the world-wide-web at the following url:           |
  | http://www.apache.org/licenses/LICENSE-2.0.html                      |
  | If you did not receive a copy of the Apache2.0 license and are unable|
  | to obtain it through the world-wide-web, please send a note to       |
  | license@swoole.com so we can mail you a copy immediately.            |
  +----------------------------------------------------------------------+
  | Author: Tianfeng Han  <rango@swoole.com>                             |
  +----------------------------------------------------------------------+
*/

#pragma once

#include <string>
#include <cstdint>
#include <functional>

#define SW_SOCKS5_VERSION_CODE 0x05
#define SW_HTTP_PROXY_CHECK_MESSAGE 0
#define SW_HTTP_PROXY_HANDSHAKE_RESPONSE "HTTP/1.1 200 Connection established\r\n"

#define SW_HTTP_PROXY_FMT                                                                                              \
    "CONNECT %.*s:%d HTTP/1.1\r\n"                                                                                     \
    "Host: %.*s:%d\r\n"                                                                                                \
    "User-Agent: Swoole/" SWOOLE_VERSION "\r\n"                                                                        \
    "Proxy-Connection: Keep-Alive\r\n"

enum swHttpProxyState {
    SW_HTTP_PROXY_STATE_WAIT = 0,
    SW_HTTP_PROXY_STATE_HANDSHAKE,
    SW_HTTP_PROXY_STATE_READY,
};

enum swSocks5State {
    SW_SOCKS5_STATE_WAIT = 0,
    SW_SOCKS5_STATE_HANDSHAKE,
    SW_SOCKS5_STATE_AUTH,
    SW_SOCKS5_STATE_CONNECT,
    SW_SOCKS5_STATE_READY,
};

enum swSocks5Method {
    SW_SOCKS5_METHOD_NO_AUTH = 0x00,
    SW_SOCKS5_METHOD_AUTH = 0x02,
};

namespace swoole {
class String;

struct HttpProxy {
    uint8_t state;
    uint8_t dont_handshake;
    int port;
    std::string host;
    std::string username;
    std::string password;
    std::string target_host;
    int target_port;

    std::string get_auth_str() const;
    size_t pack(const String *send_buffer, const std::string &host_name) const;
    static bool handshake(const String *recv_buffer);

    static HttpProxy *create(const std::string &host, int port, const std::string &user, const std::string &pwd);
};

struct Socks5Proxy {
    std::string host;
    int port;
    uint8_t state;
    uint8_t version;
    uint8_t method;
    uint8_t dns_tunnel;
    std::string username;
    std::string password;
    std::string target_host;
    int target_port;
    int socket_type;
    char buf[512];

    ssize_t pack_negotiate_request();
    ssize_t pack_auth_request();
    ssize_t pack_connect_request();
    bool handshake(const char *rbuf, size_t rlen, const std::function<ssize_t(const char *buf, size_t len)> &send_fn);

    static const char *strerror(int code);
    static Socks5Proxy *create(
        int socket_type, const std::string &host, int port, const std::string &user, const std::string &pwd);
};
}  // namespace swoole
ext/swoole/include/swoole_heap.h000064400000003627151730542040012766 0ustar00/*
 +----------------------------------------------------------------------+
 | Swoole                                                               |
 +----------------------------------------------------------------------+
 | This source file is subject to version 2.0 of the Apache license,    |
 | that is bundled with this package in the file LICENSE, and is        |
 | available through the world-wide-web at the following url:           |
 | http://www.apache.org/licenses/LICENSE-2.0.html                      |
 | If you did not receive a copy of the Apache2.0 license and are unable|
 | to obtain it through the world-wide-web, please send a note to       |
 | license@php.net so we can mail you a copy immediately.               |
 +----------------------------------------------------------------------+
 | Author: Tianfeng Han  <rango@swoole.com>                             |
 +----------------------------------------------------------------------+
 */

#pragma once

#include <cstddef>
#include <cstdint>

namespace swoole {

struct HeapNode {
    uint64_t priority;
    uint32_t position;
    void *data;
};

class Heap {
  public:
    enum Type {
        MIN_HEAP,
        MAX_HEAP,
    };

    Heap(size_t _n, Type _type);
    ~Heap();

    size_t count() const {
        return num - 1;
    }

    HeapNode *push(uint64_t priority, void *data);
    void *pop();
    void change_priority(uint64_t new_priority, HeapNode *ptr) const;
    void remove(HeapNode *node);
    void *peek() const;
    void print() const;
    int compare(uint64_t a, uint64_t b) const;

    HeapNode *top() const {
        if (num == 1) {
            return nullptr;
        }
        return nodes[1];
    }

  private:
    uint32_t num;
    uint32_t size;
    enum Type type;
    HeapNode **nodes;

    void bubble_up(uint32_t i) const;
    uint32_t maxchild(uint32_t i) const;
    void percolate_down(uint32_t i) const;
};
}  // namespace swoole
ext/swoole/include/swoole_static_handler.h000064400000012324151730542040015027 0ustar00/*
  +----------------------------------------------------------------------+
  | Swoole                                                               |
  +----------------------------------------------------------------------+
  | This source file is subject to version 2.0 of the Apache license,    |
  | that is bundled with this package in the file LICENSE, and is        |
  | available through the world-wide-web at the following url:           |
  | http://www.apache.org/licenses/LICENSE-2.0.html                      |
  | If you did not receive a copy of the Apache2.0 license and are unable|
  | to obtain it through the world-wide-web, please send a note to       |
  | license@swoole.com so we can mail you a copy immediately.            |
  +----------------------------------------------------------------------+
  | Author: Tianfeng Han  <rango@swoole.com>                             |
  +----------------------------------------------------------------------+
*/

#pragma once

#include "swoole_server.h"
#include "swoole_http.h"
#include "swoole_mime_type.h"

#include <string>
#include <set>

namespace swoole {
namespace http_server {

struct RewriteRule {
    std::string pattern;
    std::string replacement;
    bool is_regex;
};

class StaticHandler {
  private:
    Server *serv;
    std::string request_url;
    std::string original_url;
    std::string dir_path;
    std::set<std::string> dir_files;
    std::string index_file;
    typedef struct {
        off_t offset;
        size_t length;
        char part_header[SW_HTTP_SERVER_PART_HEADER];
    } task_t;
    std::vector<task_t> tasks;

    size_t l_filename = 0;
    char filename[PATH_MAX];
    struct stat file_stat;
    bool last = false;
    std::string content_type;
    std::string boundary;
    std::string end_part;
    size_t content_length = 0;

  public:
    int status_code = SW_HTTP_OK;
    StaticHandler(Server *_server, const char *url, size_t url_length)
        : request_url(url, url_length), original_url(url, url_length) {
        serv = _server;
    }

    /**
     * @return true: continue to execute backwards
     * @return false: break static handler
     */
    bool try_serve();
    bool try_serve_index_file();

    bool is_modified(const std::string &date_if_modified_since) const;
    bool is_modified_range(const std::string &date_range) const;
    size_t make_index_page(String *buffer);
    bool get_dir_files();
    bool set_filename(const std::string &filename);

    bool catch_error() {
        if (last) {
            status_code = SW_HTTP_NOT_FOUND;
            return true;
        } else {
            return false;
        }
    }

    bool has_index_file() const {
        return !index_file.empty();
    }

    bool is_enabled_auto_index() const {
        return serv->http_autoindex;
    }

    static std::string get_date();

    time_t get_file_mtime() const {
#ifdef __MACH__
        return file_stat.st_mtimespec.tv_sec;
#else
        return file_stat.st_mtim.tv_sec;
#endif
    }

    std::string get_date_last_modified() const;

    const char *get_filename() const {
        return filename;
    }

    const std::string &get_request_url() const {
        return request_url;
    }

    void set_request_url(const std::string &rewritten_url) {
        request_url = rewritten_url;
    }

    const std::string &get_boundary() {
        if (boundary.empty()) {
            boundary = std::string(SW_HTTP_SERVER_BOUNDARY_PREKEY);
            swoole_random_string(boundary, SW_HTTP_SERVER_BOUNDARY_TOTAL_SIZE - sizeof(SW_HTTP_SERVER_BOUNDARY_PREKEY));
        }
        return boundary;
    }

    const std::string &get_content_type() {
        if (tasks.size() > 1) {
            content_type = std::string("multipart/byteranges; boundary=") + get_boundary();
            return content_type;
        } else {
            return get_mimetype();
        }
    }

    const std::string &get_mimetype() const {
        return mime_type::get(get_filename());
    }

    std::string get_filename_std_string() {
        return {filename, l_filename};
    }

    bool get_absolute_path();

    const std::string &get_original_url() const {
        return original_url;
    }

    size_t get_filesize() const {
        return file_stat.st_size;
    }

    const std::vector<task_t> &get_tasks() {
        return tasks;
    }

    bool is_dir() const {
        return S_ISDIR(file_stat.st_mode);
    }

    bool is_link() const {
        return S_ISLNK(file_stat.st_mode);
    }

    bool is_file() const {
        return S_ISREG(file_stat.st_mode);
    }

    bool is_absolute_path() {
        return swoole_strnpos(filename, l_filename, SW_STRL("..")) == -1;
    }

    bool is_located_in_document_root() {
        const std::string &document_root = serv->get_document_root();
        const size_t l_document_root = document_root.length();

        return l_filename > l_document_root && filename[l_document_root] == '/' &&
               swoole_str_starts_with(filename, l_filename, document_root.c_str(), l_document_root);
    }

    size_t get_content_length() const {
        return content_length;
    }

    const std::string &get_end_part() {
        return end_part;
    }

    void parse_range(const char *range, const char *if_range);
};

};  // namespace http_server
};  // namespace swoole
ext/swoole/include/swoole_socket_hook.h000064400000004477151730542040014365 0ustar00/*
  +----------------------------------------------------------------------+
  | Swoole                                                               |
  +----------------------------------------------------------------------+
  | This source file is subject to version 2.0 of the Apache license,    |
  | that is bundled with this package in the file LICENSE, and is        |
  | available through the world-wide-web at the following url:           |
  | http://www.apache.org/licenses/LICENSE-2.0.html                      |
  | If you did not receive a copy of the Apache2.0 license and are unable|
  | to obtain it through the world-wide-web, please send a note to       |
  | license@swoole.com so we can mail you a copy immediately.            |
  +----------------------------------------------------------------------+
  | Author: Tianfeng Han  <rango@swoole.com>                             |
  +----------------------------------------------------------------------+
*/

#ifndef SW_SOCKET_HOOK_H_
#define SW_SOCKET_HOOK_H_

#include <stdlib.h>
#include <unistd.h>
#include <sys/socket.h>
#include <poll.h>

#ifdef __cplusplus
extern "C" {
#endif

#include "swoole_coroutine_api.h"

#define socket(domain, type, protocol) swoole_coroutine_socket(domain, type, protocol)
#define send(sockfd, buf, len, flags) swoole_coroutine_send(sockfd, buf, len, flags)
#define read(sockfd, buf, len) swoole_coroutine_read(sockfd, buf, len)
#define write(sockfd, buf, len) swoole_coroutine_write(sockfd, buf, len)
#define recv(sockfd, buf, len, flags) swoole_coroutine_recv(sockfd, buf, len, flags)
#define close(fd) swoole_coroutine_close(fd)
#define connect(sockfd, addr, addrlen) swoole_coroutine_connect(sockfd, addr, addrlen)
#define accept(sockfd, addr, addrlen) swoole_coroutine_accept(sockfd, addr, addrlen)
#ifdef SW_HOOK_POLL_FAKE
#define poll(fds, nfds, timeout) swoole_coroutine_poll_fake(fds, nfds, timeout)
#else
#define poll(fds, nfds, timeout) swoole_coroutine_poll(fds, nfds, timeout)
#endif
#define sendmsg(sockfd, msg, flags) swoole_coroutine_sendmsg(sockfd, msg, flags)
#define recvmsg(sockfd, msg, flags) swoole_coroutine_recvmsg(sockfd, msg, flags)
#define getaddrinfo(name, service, req, pai) swoole_coroutine_getaddrinfo(name, service, req, pai)
#define gethostbyname(name) swoole_coroutine_gethostbyname(name)

#ifdef __cplusplus
}
#endif

#endif
ext/swoole/include/swoole_http2.h000064400000021066151730542040013107 0ustar00/*
  +----------------------------------------------------------------------+
  | Swoole                                                               |
  +----------------------------------------------------------------------+
  | This source file is subject to version 2.0 of the Apache license,    |
  | that is bundled with this package in the file LICENSE, and is        |
  | available through the world-wide-web at the following url:           |
  | http://www.apache.org/licenses/LICENSE-2.0.html                      |
  | If you did not receive a copy of the Apache2.0 license and are unable|
  | to obtain it through the world-wide-web, please send a note to       |
  | license@php.net so we can mail you a copy immediately.               |
  +----------------------------------------------------------------------+
  | Author: Tianfeng Han  <rango@swoole.com>                             |
  |         Twosee  <twose@qq.com>                                       |
  +----------------------------------------------------------------------+
*/

#pragma once

#include "swoole_protocol.h"

#define SW_HTTP2_PRI_STRING "PRI * HTTP/2.0\r\n\r\nSM\r\n\r\n"

enum swHttp2ErrorCode {
    SW_HTTP2_ERROR_NO_ERROR = 0x0,
    SW_HTTP2_ERROR_PROTOCOL_ERROR = 0x1,
    SW_HTTP2_ERROR_INTERNAL_ERROR = 0x2,
    SW_HTTP2_ERROR_FLOW_CONTROL_ERROR = 0x3,
    SW_HTTP2_ERROR_SETTINGS_TIMEOUT = 0x4,
    SW_HTTP2_ERROR_STREAM_CLOSED = 0x5,
    SW_HTTP2_ERROR_FRAME_SIZE_ERROR = 0x6,
    SW_HTTP2_ERROR_REFUSED_STREAM = 0x7,
    SW_HTTP2_ERROR_CANCEL = 0x8,
    SW_HTTP2_ERROR_COMPRESSION_ERROR = 0x9,
    SW_HTTP2_ERROR_CONNECT_ERROR = 0xa,
    SW_HTTP2_ERROR_ENHANCE_YOUR_CALM = 0xb,
    SW_HTTP2_ERROR_INADEQUATE_SECURITY = 0xc,
    SW_HTTP2_ERROR_HTTP_1_1_REQUIRED = 0xd,
};

enum swHttp2FrameType {
    SW_HTTP2_TYPE_DATA = 0,
    SW_HTTP2_TYPE_HEADERS = 1,
    SW_HTTP2_TYPE_PRIORITY = 2,
    SW_HTTP2_TYPE_RST_STREAM = 3,
    SW_HTTP2_TYPE_SETTINGS = 4,
    SW_HTTP2_TYPE_PUSH_PROMISE = 5,
    SW_HTTP2_TYPE_PING = 6,
    SW_HTTP2_TYPE_GOAWAY = 7,
    SW_HTTP2_TYPE_WINDOW_UPDATE = 8,
    SW_HTTP2_TYPE_CONTINUATION = 9,
};

enum swHttp2FrameFlag {
    SW_HTTP2_FLAG_NONE = 0x00,
    SW_HTTP2_FLAG_ACK = 0x01,
    SW_HTTP2_FLAG_END_STREAM = 0x01,
    SW_HTTP2_FLAG_END_HEADERS = 0x04,
    SW_HTTP2_FLAG_PADDED = 0x08,
    SW_HTTP2_FLAG_PRIORITY = 0x20,
};

enum swHttp2SettingId {
    SW_HTTP2_SETTING_HEADER_TABLE_SIZE = 0x1,
    SW_HTTP2_SETTINGS_ENABLE_PUSH = 0x2,
    SW_HTTP2_SETTINGS_MAX_CONCURRENT_STREAMS = 0x3,
    SW_HTTP2_SETTINGS_INIT_WINDOW_SIZE = 0x4,
    SW_HTTP2_SETTINGS_MAX_FRAME_SIZE = 0x5,
    SW_HTTP2_SETTINGS_MAX_HEADER_LIST_SIZE = 0x6,
};

enum swHttp2StreamFlag {
    SW_HTTP2_STREAM_NORMAL = 0,
    SW_HTTP2_STREAM_REQUEST_END = 1 << 0,
    SW_HTTP2_STREAM_PIPELINE_REQUEST = 1 << 1,
    SW_HTTP2_STREAM_PIPELINE_RESPONSE = 1 << 2,
    SW_HTTP2_STREAM_USE_PIPELINE_READ = 1 << 3,
};

#define SW_HTTP2_FRAME_HEADER_SIZE 9
#define SW_HTTP2_SETTING_OPTION_SIZE 6
#define SW_HTTP2_SETTING_FRAME_SIZE (SW_HTTP2_FRAME_HEADER_SIZE + SW_HTTP2_SETTING_OPTION_SIZE * 6)
#define SW_HTTP2_FRAME_PING_PAYLOAD_SIZE 8

#define SW_HTTP2_RST_STREAM_SIZE 4
#define SW_HTTP2_PRIORITY_SIZE 5
#define SW_HTTP2_PING_SIZE 8
#define SW_HTTP2_RST_STREAM_SIZE 4
#define SW_HTTP2_GOAWAY_SIZE 8
#define SW_HTTP2_WINDOW_UPDATE_SIZE 4
#define SW_HTTP2_STREAM_ID_SIZE 4
#define SW_HTTP2_SETTINGS_PARAM_SIZE 6

#define swoole_http2_frame_trace_log(_trace_str, ...)                                                                  \
    swoole_trace_log(SW_TRACE_HTTP2,                                                                                   \
                     SW_ECHO_RED_BG " [" SW_ECHO_GREEN "] "                                                            \
                                    "<length=%jd, flags=(%s), stream_id=%d> " _trace_str,                              \
                     " RECV ",                                                                                         \
                     swoole::http2::get_type(type),                                                                    \
                     length,                                                                                           \
                     swoole::http2::get_flag_string(flags).c_str(),                                                    \
                     stream_id,                                                                                        \
                     ##__VA_ARGS__)

#define swoole_http2_send_trace_log(_trace_str, ...)                                                                   \
    swoole_trace_log(SW_TRACE_HTTP2, SW_ECHO_GREEN_BG " " _trace_str, " SEND ", ##__VA_ARGS__)

#define swoole_http2_recv_trace_log(_trace_str, ...)                                                                   \
    swoole_trace_log(SW_TRACE_HTTP2, SW_ECHO_RED_BG " " _trace_str, " RECV ", ##__VA_ARGS__)

namespace swoole {
namespace http2 {

struct Settings {
    uint32_t header_table_size;
    uint32_t enable_push;
    uint32_t max_concurrent_streams;
    uint32_t init_window_size;
    uint32_t max_frame_size;
    uint32_t max_header_list_size;
};

/**
 +-----------------------------------------------+
 |                 Length (24)                   |
 +---------------+---------------+---------------+
 |   Type (8)    |   Flags (8)   |
 +-+-------------+---------------+-------------------------------+
 |R|                 Stream Identifier (31)                      |
 +=+=============================================================+
 |                   Frame Payload (0...)                      ...
 +---------------------------------------------------------------+
 */
struct Frame {
    uint32_t length : 24;
    uint32_t type : 8;
    uint32_t flags : 8;
    uint32_t rsv1 : 1;
    uint32_t identifier : 31;
    char data[0];
};

static sw_inline ssize_t get_length(const char *buf) {
    return (((uint8_t) buf[0]) << 16) + (((uint8_t) buf[1]) << 8) + (uint8_t) buf[2];
}

void put_default_setting(enum swHttp2SettingId id, uint32_t value);
uint32_t get_default_setting(enum swHttp2SettingId id);
size_t pack_setting_frame(char *buf, const Settings &settings, bool server_side);
ReturnCode unpack_setting_data(const char *buf,
                               ssize_t length,
                               const std::function<ReturnCode(uint16_t, uint32_t)> &cb);
ssize_t get_frame_length(const Protocol *protocol, network::Socket *conn, PacketLength *pl);
int send_setting_frame(Protocol *protocol, network::Socket *conn);
const char *get_type(int type);
int get_type_color(int type);

static sw_inline void init_settings(Settings *settings) {
    settings->header_table_size = get_default_setting(SW_HTTP2_SETTING_HEADER_TABLE_SIZE);
    settings->enable_push = get_default_setting(SW_HTTP2_SETTINGS_ENABLE_PUSH);
    settings->max_concurrent_streams = get_default_setting(SW_HTTP2_SETTINGS_MAX_CONCURRENT_STREAMS);
    settings->init_window_size = get_default_setting(SW_HTTP2_SETTINGS_INIT_WINDOW_SIZE);
    settings->max_frame_size = get_default_setting(SW_HTTP2_SETTINGS_MAX_FRAME_SIZE);
    settings->max_header_list_size = get_default_setting(SW_HTTP2_SETTINGS_MAX_HEADER_LIST_SIZE);
}

static inline std::string get_flag_string(int _flags) {
    std::string str;
    if (_flags & SW_HTTP2_FLAG_ACK) {
        str.append("ACK|");
    }
    if (_flags & SW_HTTP2_FLAG_END_STREAM) {
        str.append("END_STREAM|");
    }
    if (_flags & SW_HTTP2_FLAG_END_HEADERS) {
        str.append("END_HEADERS|");
    }
    if (_flags & SW_HTTP2_FLAG_PADDED) {
        str.append("PADDED|");
    }
    if (_flags & SW_HTTP2_FLAG_PRIORITY) {
        str.append("PRIORITY|");
    }
    if (str.back() == '|') {
        return str.substr(0, str.length() - 1);
    } else {
        return {"none"};
    }
}

/**
 +-----------------------------------------------+
 |                 Length (24)                   |
 +---------------+---------------+---------------+
 |   Type (8)    |   Flags (8)   |
 +-+-------------+---------------+-------------------------------+
 |R|                 Stream Identifier (31)                      |
 +=+=============================================================+
 |                   Frame Payload (0...)                      ...
 +---------------------------------------------------------------+
 */
static sw_inline void set_frame_header(char *buffer, uint8_t type, uint32_t length, uint8_t flags, uint32_t stream_id) {
    buffer[0] = length >> 16;
    buffer[1] = length >> 8;
    buffer[2] = length;
    buffer[3] = type;
    buffer[4] = flags;
    *(uint32_t *) (buffer + 5) = htonl(stream_id);
}

}  // namespace http2
}  // namespace swoole
ext/swoole/include/swoole_lru_cache.h000064400000006267151730542040014001 0ustar00/*
  +----------------------------------------------------------------------+
  | Swoole                                                               |
  +----------------------------------------------------------------------+
  | This source file is subject to version 2.0 of the Apache license,    |
  | that is bundled with this package in the file LICENSE, and is        |
  | available through the world-wide-web at the following url:           |
  | http://www.apache.org/licenses/LICENSE-2.0.html                      |
  | If you did not receive a copy of the Apache2.0 license and are unable|
  | to obtain it through the world-wide-web, please send a note to       |
  | license@swoole.com so we can mail you a copy immediately.            |
  +----------------------------------------------------------------------+
  | Author: Tianfeng Han  <rango@swoole.com>                             |
  +----------------------------------------------------------------------+
*/

#pragma once

#include <unordered_map>
#include <list>
#include <utility>
#include <memory>
#include <ctime>

namespace swoole {
/**
 * This cache isn't thread safe
 */
template <typename T>
class LRUCache {
    typedef std::pair<time_t, std::shared_ptr<T>> cache_node_t;
    typedef std::list<std::pair<std::string, cache_node_t>> cache_list_t;

    std::unordered_map<std::string, typename cache_list_t::iterator> cache_map;
    cache_list_t cache_list;
    size_t cache_capacity;

  public:
    explicit LRUCache(size_t capacity) {
        cache_capacity = capacity;
    }

    std::shared_ptr<T> get(const std::string &key) {
        auto iter = cache_map.find(key);
        if (iter == cache_map.end()) {
            return nullptr;
        }

        if (iter->second->second.first < ::time(nullptr) && iter->second->second.first > 0) {
            return nullptr;
        }

        cache_list.splice(cache_list.begin(), cache_list, iter->second);
        return iter->second->second.second;  // iter -> list::iter -> cache_node_t -> value
    }

    void set(const std::string &key, const std::shared_ptr<T> &val, time_t expire = 0) {
        time_t expire_time;

        if (expire <= 0) {
            expire_time = 0;
        } else {
            expire_time = ::time(nullptr) + expire;
        }

        auto iter = cache_map.find(key);
        if (iter != cache_map.end()) {
            iter->second->second.first = expire_time;
            iter->second->second.second = val;
            cache_list.splice(cache_list.begin(), cache_list, iter->second);
            return;
        }

        size_t size = cache_list.size();
        if (size == cache_capacity && size > 0) {
            auto del = cache_list.back();
            cache_map.erase(del.first);
            cache_list.pop_back();
        }

        cache_list.emplace_front(key, cache_node_t{expire_time, val});
        cache_map[key] = cache_list.begin();
    }

    void del(const std::string &key) {
        auto iter = cache_map.find(key);
        if (iter == cache_map.end()) {
            return;
        }

        cache_list.erase(iter->second);
        cache_map.erase(iter);
    }

    void clear() {
        cache_list.clear();
        cache_map.clear();
    }
};
}  // namespace swoole
ext/swoole/include/swoole_atomic.h000064400000004462151730542040013323 0ustar00/*
  +----------------------------------------------------------------------+
  | Swoole                                                               |
  +----------------------------------------------------------------------+
  | This source file is subject to version 2.0 of the Apache license,    |
  | that is bundled with this package in the file LICENSE, and is        |
  | available through the world-wide-web at the following url:           |
  | http://www.apache.org/licenses/LICENSE-2.0.html                      |
  | If you did not receive a copy of the Apache2.0 license and are unable|
  | to obtain it through the world-wide-web, please send a note to       |
  | license@swoole.com so we can mail you a copy immediately.            |
  +----------------------------------------------------------------------+
  | Author: Tianfeng Han  <rango@swoole.com>                             |
  |         Twosee  <twose@qq.com>                                       |
  +----------------------------------------------------------------------+
*/

#pragma once

typedef volatile int32_t sw_atomic_int32_t;
typedef volatile uint32_t sw_atomic_uint32_t;
typedef volatile int64_t sw_atomic_int64_t;
typedef volatile uint64_t sw_atomic_uint64_t;

typedef sw_atomic_int64_t sw_atomic_long_t;
typedef sw_atomic_uint64_t sw_atomic_ulong_t;
typedef sw_atomic_uint32_t sw_atomic_t;

#define sw_atomic_cmp_set(lock, old, set) __sync_bool_compare_and_swap(lock, old, set)
#define sw_atomic_value_cmp_set(value, expected, set) __sync_val_compare_and_swap(value, expected, set)
#define sw_atomic_fetch_add(value, add) __sync_fetch_and_add(value, add)
#define sw_atomic_fetch_sub(value, sub) __sync_fetch_and_sub(value, sub)
#define sw_atomic_memory_barrier() __sync_synchronize()
#define sw_atomic_add_fetch(value, add) __sync_add_and_fetch(value, add)
#define sw_atomic_sub_fetch(value, sub) __sync_sub_and_fetch(value, sub)

#if defined(__x86_64__)
#define sw_atomic_cpu_pause() __asm__ __volatile__("pause")
#elif defined(__aarch64__)
#define sw_atomic_cpu_pause() __asm__ __volatile__("yield")
#else
#define sw_atomic_cpu_pause()
#endif

void sw_spinlock(sw_atomic_t *lock);
#define sw_spinlock_release(lock) __sync_lock_release(lock)
int sw_atomic_futex_wait(sw_atomic_t *atomic, double timeout);
int sw_atomic_futex_wakeup(sw_atomic_t *atomic, int n);
ext/swoole/include/swoole_asm_context.h000064400000004477151730542040014401 0ustar00/*
 +----------------------------------------------------------------------+
 | Swoole                                                               |
 +----------------------------------------------------------------------+
 | Copyright (c) 2012-2018 The Swoole Group                             |
 +----------------------------------------------------------------------+
 | This source file is subject to version 2.0 of the Apache license,    |
 | that is bundled with this package in the file LICENSE, and is        |
 | available through the world-wide-web at the following url:           |
 | http://www.apache.org/licenses/LICENSE-2.0.html                      |
 | If you did not receive a copy of the Apache2.0 license and are unable|
 | to obtain it through the world-wide-web, please send a note to       |
 | license@swoole.com so we can mail you a copy immediately.            |
 +----------------------------------------------------------------------+
 | Author: Tianfeng Han  <rango@swoole.com>                             |
 +----------------------------------------------------------------------+
 */

#ifndef _SW_ASM_CONTEXT_H_
#define _SW_ASM_CONTEXT_H_

#ifdef SW_USE_ASM_CONTEXT

SW_EXTERN_C_BEGIN

#include <stdint.h>
#include <stdio.h>
#include <stddef.h>

typedef void *fcontext_t;

struct transfer_t {
    fcontext_t fctx;
    void *data;
};

#ifdef __GNUC__
#define SW_GCC_VERSION (__GNUC__ * 1000 + __GNUC_MINOR__)
#else
#define SW_GCC_VERSION 0
#endif

#if defined(__GNUC__) && SW_GCC_VERSION >= 9000
#define SW_INDIRECT_RETURN __attribute__((__indirect_return__))
#else
#define SW_INDIRECT_RETURN
#endif

#undef SWOOLE_CONTEXT_CALLDECL
#if (defined(i386) || defined(__i386__) || defined(__i386) || defined(__i486__) || defined(__i586__) ||                \
     defined(__i686__) || defined(__X86__) || defined(_X86_) || defined(__THW_INTEL__) || defined(__I86__) ||          \
     defined(__INTEL__) || defined(__IA32__) || defined(_M_IX86) || defined(_I86_)) &&                                 \
    defined(BOOST_WINDOWS)
#define SWOOLE_CONTEXT_CALLDECL __cdecl
#else
#define SWOOLE_CONTEXT_CALLDECL
#endif

transfer_t SWOOLE_CONTEXT_CALLDECL swoole_jump_fcontext(fcontext_t to, void *vp);
fcontext_t SWOOLE_CONTEXT_CALLDECL swoole_make_fcontext(void *stack, size_t stack_size, void (*fn)(transfer_t));

SW_EXTERN_C_END

#endif
#endif
ext/swoole/include/swoole_string.h000064400000016510151730542040013352 0ustar00/*
  +----------------------------------------------------------------------+
  | Swoole                                                               |
  +----------------------------------------------------------------------+
  | This source file is subject to version 2.0 of the Apache license,    |
  | that is bundled with this package in the file LICENSE, and is        |
  | available through the world-wide-web at the following url:           |
  | http://www.apache.org/licenses/LICENSE-2.0.html                      |
  | If you did not receive a copy of the Apache2.0 license and are unable|
  | to obtain it through the world-wide-web, please send a note to       |
  | license@swoole.com so we can mail you a copy immediately.            |
  +----------------------------------------------------------------------+
  | Author: Tianfeng Han  <rango@swoole.com>                             |
  |         Twosee  <twose@qq.com>                                       |
  +----------------------------------------------------------------------+
*/

#pragma once

#include "swoole.h"

#include <string>

#define SW_STRINGL(s) s->str, s->length
#define SW_STRINGS(s) s->str, s->size
// copy value
#define SW_STRINGCVL(s) s->str + s->offset, s->length - s->offset
// append value
#define SW_STRINGAVL(s) s->str + s->length, s->size - s->length

namespace swoole {
typedef std::function<bool(const char *, size_t)> StringExplodeHandler;

class String {
  private:
    void alloc(size_t _size, const Allocator *_allocator);
    void move(String &&src);
    void copy(const String &src);

  public:
    size_t length;
    size_t size;
    off_t offset;
    char *str;
    const Allocator *allocator;

    String() {
        length = size = offset = 0;
        str = nullptr;
        allocator = nullptr;
    }

    explicit String(size_t _size, const Allocator *_allocator = nullptr) {
        alloc(_size, _allocator);
    }

    String(const char *_str, size_t _length) {
        alloc(_length + 1, nullptr);
        memcpy(str, _str, _length);
        str[_length] = '\0';
        length = _length;
    }

    explicit String(const std::string &_str) : String(_str.c_str(), _str.length()) {}

    String(const String &src) {
        copy(src);
    }

    String(String &&src) noexcept {
        move(std::move(src));
    }

    String &operator=(const String &src) noexcept;
    String &operator=(String &&src) noexcept;

    ~String() {
        if (allocator && str) {
            allocator->free(str);
        }
    }

    char *value() const {
        return str;
    }

    size_t get_length() const {
        return length;
    }

    size_t capacity() const {
        return size;
    }

    std::string to_std_string() const {
        return {str, length};
    }

    bool contains(const char *needle, size_t l_needle) const {
        return swoole_strnstr(str, length, needle, l_needle) != nullptr;
    }

    bool contains(const std::string &needle) const {
        return contains(needle.c_str(), needle.size());
    }

    bool starts_with(const char *needle, size_t l_needle) const {
        if (length < l_needle) {
            return false;
        }
        return memcmp(str, needle, l_needle) == 0;
    }

    bool starts_with(const std::string &needle) const {
        return starts_with(needle.c_str(), needle.length());
    }

    bool ends_with(const char *needle, size_t l_needle) const {
        if (length < l_needle) {
            return false;
        }
        return memcmp(str + length - l_needle, needle, l_needle) == 0;
    }

    bool ends_with(const std::string &needle) const {
        return ends_with(needle.c_str(), needle.length());
    }

    bool equals(const char *data, size_t len) const {
        if (length != len) {
            return false;
        }
        return memcmp(str, data, len) == 0;
    }

    bool equals(const std::string &data) const {
        if (length != data.size()) {
            return false;
        }
        return memcmp(str, data.c_str(), length) == 0;
    }

    void grow(size_t incr_value);
    String substr(size_t offset, size_t len) const;

    bool empty() const {
        return str == nullptr || length == 0;
    }

    void clear() {
        length = 0;
        offset = 0;
    }

    void extend() {
        extend(size * 2);
    }

    void extend(size_t new_size) {
        assert(new_size > size);
        reserve(new_size);
    }

    void extend_align(size_t _new_size) {
        size_t align_size = SW_MEM_ALIGNED_SIZE(size * 2);
        while (align_size < _new_size) {
            align_size *= 2;
        }
        reserve(align_size);
    }

    void reserve(size_t new_size);
    /**
     * Transfer ownership of the string content pointer to the caller, who will capture this memory.
     * The caller must manage and free this memory; it will not free when the string is destructed.
     */
    char *release();
    void repeat(const char *data, size_t len, size_t n);
    void append(const char *append_str, size_t length);

    void append(const std::string &append_str) {
        append(append_str.c_str(), append_str.length());
    }

    void append(const char c) {
        append(&c, sizeof(c));
    }

    void append(int value);
    void append(const String &append_str);
    bool append_random_bytes(size_t length, bool base64 = false);

    void write(off_t _offset, const String &write_str);
    void write(off_t _offset, const char *write_str, size_t _length);

    void set_null_terminated() {
        if (length == size) {
            extend(length + 1);
        }
        str[length] = '\0';
    }

    ssize_t split(const char *delimiter, size_t delimiter_length, const StringExplodeHandler &handler);
    void print(bool print_value = true) const;

    enum FormatFlag {
        FORMAT_APPEND = 1 << 0,
        FORMAT_GROW = 1 << 1,
    };

    template <typename... Args>
    size_t format_impl(int flags, const char *format, Args... args) {
        size_t _size = sw_snprintf(nullptr, 0, format, args...);
        if (_size == 0) {
            return 0;
        }
        // store \0 terminator
        ++_size;

        size_t new_size = (flags & FORMAT_APPEND) ? length + _size : _size;
        if (flags & FORMAT_GROW) {
            size_t align_size = SW_MEM_ALIGNED_SIZE(size * 2);
            while (align_size < new_size) {
                align_size *= 2;
            }
            new_size = align_size;
        }

        size_t n;
        if (flags & FORMAT_APPEND) {
            if (_size > size - length) {
                reserve(new_size);
            }
            n = sw_snprintf(str + length, size - length, format, args...);
            length += n;
        } else {
            if (_size > size) {
                reserve(new_size);
            }
            n = sw_snprintf(str, size, format, args...);
            length = n;
        }

        return n;
    }

    // This function replaces the entire string instead of appending content.
    template <typename... Args>
    size_t format(const char *format, Args... args) {
        return format_impl(0, format, args...);
    }

    template <typename... Args>
    size_t append_format(const char *format, Args... args) {
        return format_impl(FORMAT_APPEND, format, args...);
    }

    char *pop(size_t init_size);
    void reduce(off_t offset);
};

inline String *make_string(size_t size, const Allocator *allocator = nullptr) {
    return new String(size, allocator);
}
}  // namespace swoole
ext/swoole/include/swoole_message_bus.h000064400000012265151730542040014344 0ustar00/*
  +----------------------------------------------------------------------+
  | Swoole                                                               |
  +----------------------------------------------------------------------+
  | This source file is subject to version 2.0 of the Apache license,    |
  | that is bundled with this package in the file LICENSE, and is        |
  | available through the world-wide-web at the following url:           |
  | http://www.apache.org/licenses/LICENSE-2.0.html                      |
  | If you did not receive a copy of the Apache2.0 license and are unable|
  | to obtain it through the world-wide-web, please send a note to       |
  | license@swoole.com so we can mail you a copy immediately.            |
  +----------------------------------------------------------------------+
  | Author: Tianfeng Han  <rango@swoole.com>                             |
  +----------------------------------------------------------------------+
*/

#pragma once

#include "swoole_string.h"
#include "swoole_socket.h"
#include "swoole_protocol.h"

#include <unordered_map>

namespace swoole {
struct PipeBuffer {
    DataHead info;
    char data[0];

    bool is_begin() const {
        return info.flags & SW_EVENT_DATA_BEGIN;
    }

    bool is_chunked() const {
        return info.flags & SW_EVENT_DATA_CHUNK;
    }

    bool is_end() const {
        return info.flags & SW_EVENT_DATA_END;
    }
};

struct PacketPtr {
    size_t length;
    char *data;
};

struct DgramPacket {
    SocketType socket_type;
    network::Address socket_addr;
    uint32_t length;
    char data[0];
};

struct PacketTask {
    size_t length;
    char tmpfile[SW_TASK_TMP_PATH_SIZE];
};

class MessageBus {
  private:
    const Allocator *allocator_;
    std::unordered_map<uint64_t, std::shared_ptr<String>> packet_pool_;
    std::vector<network::Socket *> pipe_sockets_;
    std::function<uint64_t(void)> id_generator_;
    size_t buffer_size_;
    PipeBuffer *buffer_ = nullptr;
    bool always_chunked_transfer_ = false;

    String *get_packet_buffer();
    ReturnCode prepare_packet(uint16_t &recv_chunk_count, String *packet_buffer);

  public:
    MessageBus() {
        allocator_ = sw_std_allocator();
        buffer_size_ = SW_BUFFER_SIZE_STD;
    }

    ~MessageBus();

    bool empty() const {
        return packet_pool_.empty();
    }

    size_t count() const {
        return packet_pool_.size();
    }

    void clear() {
        packet_pool_.clear();
    }

    void set_allocator(const Allocator *allocator) {
        allocator_ = allocator;
    }

    void set_id_generator(const std::function<uint64_t(void)> &id_generator) {
        id_generator_ = id_generator;
    }

    void set_buffer_size(size_t buffer_size) {
        buffer_size_ = buffer_size;
    }

    void set_always_chunked_transfer() {
        always_chunked_transfer_ = true;
    }

    size_t get_buffer_size() const {
        return buffer_size_;
    }

    size_t get_memory_size() const;
    bool alloc_buffer();

    /**
     * If use the zend_string_allocator, must manually call this function to release the memory,
     * otherwise coredump will occur when php shutdown, because zend_string has been released
     */
    void free_buffer() {
        allocator_->free(buffer_);
        buffer_ = nullptr;
    }

    void pass(const SendData *task) const;

    /**
     * Send data to socket. If the data sent is larger than Server::ipc_max_size, then it is sent in chunks.
     * Otherwise, send it directly.
     * When sending data in multi-thread environment, must use get_pipe_socket() to separate socket memory.
     * @return: send success returns true, send failure returns false.
     */
    bool write(network::Socket *sock, SendData *packet) const;
    /**
     * Receive data from socket, if only one chunk is received, packet will be saved in packet_pool.
     * Then continue to listen to readable events, waiting for more chunks.
     * @return: >0: receive a complete packet, 0: continue to wait for data, -1: an error occurred
     */
    ssize_t read(network::Socket *sock);
    /**
     * Receive data from pipeline, and store data to buffer
     * @return: >0: receive a complete packet, 0: continue to wait for data, -1: an error occurred
     */
    ssize_t read_with_buffer(network::Socket *sock);
    /**
     * The last chunk of data has been received, return address and length, start processing this packet.
     */
    PacketPtr get_packet() const;
    PipeBuffer *get_buffer() const {
        return buffer_;
    }
    /**
     * Pop the data memory address to the outer layer, no longer managed by MessageBus
     */
    char *move_packet();
    /**
     * The processing of this data packet has been completed, and the relevant memory has been released
     */
    void pop() {
        if (buffer_->is_end()) {
            packet_pool_.erase(buffer_->info.msg_id);
        }
    }
    /**
     * It is possible to operate the same pipe in multiple threads.
     * Each thread must have a unique buffer and the socket memory must be separated.
     */
    network::Socket *get_pipe_socket(const network::Socket *sock) const {
        return pipe_sockets_[sock->get_fd()];
    }
    void init_pipe_socket(const network::Socket *sock);
};
}  // namespace swoole
ext/swoole/include/swoole_mqtt.h000064400000004240151730542040013026 0ustar00/*
 +----------------------------------------------------------------------+
 | Swoole                                                               |
 +----------------------------------------------------------------------+
 | Copyright (c) 2012-2015 The Swoole Group                             |
 +----------------------------------------------------------------------+
 | This source file is subject to version 2.0 of the Apache license,    |
 | that is bundled with this package in the file LICENSE, and is        |
 | available through the world-wide-web at the following url:           |
 | http://www.apache.org/licenses/LICENSE-2.0.html                      |
 | If you did not receive a copy of the Apache2.0 license and are unable|
 | to obtain it through the world-wide-web, please send a note to       |
 | license@swoole.com so we can mail you a copy immediately.            |
 +----------------------------------------------------------------------+
 | Author: Tianfeng Han  <rango@swoole.com>                             |
 +----------------------------------------------------------------------+
 */
#pragma once

#include "swoole_protocol.h"

#define SW_MQTT_MIN_LENGTH_SIZE 1
#define SW_MQTT_MAX_LENGTH_SIZE 4
#define SW_MQTT_MAX_PAYLOAD_SIZE 268435455

#define SW_MQTT_SETRETAIN(HDR, R) (HDR | (R))
#define SW_MQTT_SETQOS(HDR, Q) (HDR | ((Q) << 1))
#define SW_MQTT_SETDUP(HDR, D) (HDR | ((D) << 3))

namespace swoole {
namespace mqtt {

enum Opcode {
    SW_MQTT_CONNECT = 0x10,
    SW_MQTT_CONNACK = 0x20,
    SW_MQTT_PUBLISH = 0x30,
    SW_MQTT_PUBACK = 0x40,
    SW_MQTT_PUBREC = 0x50,
    SW_MQTT_PUBREL = 0x60,
    SW_MQTT_PUBCOMP = 0x70,
    SW_MQTT_SUBSCRIBE = 0x80,
    SW_MQTT_SUBACK = 0x90,
    SW_MQTT_UNSUBSCRIBE = 0xA0,
    SW_MQTT_UNSUBACK = 0xB0,
    SW_MQTT_PINGREQ = 0xC0,
    SW_MQTT_PINGRESP = 0xD0,
    SW_MQTT_DISCONNECT = 0xE0,
};

struct Packet {
    uint8_t type : 4;
    uint8_t dup : 1;
    uint8_t qos : 2;
    uint8_t retain : 1;
    uint32_t length;
    char protocol_name[8];
};

ssize_t get_package_length(const Protocol *protocol, network::Socket *conn, PacketLength *pl);
void set_protocol(Protocol *protocol);
}  // namespace mqtt
}  // namespace swoole
ext/swoole/include/swoole_buffer.h000064400000004361151730542040013316 0ustar00/*
  +----------------------------------------------------------------------+
  | Swoole                                                               |
  +----------------------------------------------------------------------+
  | This source file is subject to version 2.0 of the Apache license,    |
  | that is bundled with this package in the file LICENSE, and is        |
  | available through the world-wide-web at the following url:           |
  | http://www.apache.org/licenses/LICENSE-2.0.html                      |
  | If you did not receive a copy of the Apache2.0 license and are unable|
  | to obtain it through the world-wide-web, please send a note to       |
  | license@php.net so we can mail you a copy immediately.               |
  +----------------------------------------------------------------------+
  | Author: Tianfeng Han  <rango@swoole.com>                             |
  +----------------------------------------------------------------------+
*/

#pragma once

#include <queue>
#include <sys/uio.h>

namespace swoole {

struct BufferChunk {
    enum Type {
        TYPE_DATA,
        TYPE_SENDFILE,
        TYPE_CLOSE,
    };

    Type type;
    uint32_t length = 0;
    uint32_t offset = 0;
    union {
        char *str;
        void *ptr;
        uint32_t u32;
        uint64_t u64;
    } value{};
    uint32_t size = 0;

    BufferChunk(Type type, uint32_t size);
    ~BufferChunk();

    void (*destroy)(BufferChunk *chunk) = nullptr;
};

class Buffer {
    // 0: don't use chunk
    uint32_t chunk_size;
    uint32_t total_length = 0;
    std::queue<BufferChunk *> queue_;

  public:
    explicit Buffer(uint32_t _chunk_size);
    ~Buffer();

    BufferChunk *alloc(BufferChunk::Type type, uint32_t size);

    BufferChunk *front() const {
        return queue_.front();
    }

    void pop();
    void append(const char *data, uint32_t size);
    void append(const struct iovec *iov, size_t iovcnt, off_t offset);

    uint32_t length() const {
        return total_length;
    }

    size_t count() const {
        return queue_.size();
    }

    bool empty() const {
        return queue_.empty();
    }

    static bool empty(const Buffer *buffer) {
        return buffer == nullptr || buffer->queue_.empty();
    }
};

}  // namespace swoole
ext/swoole/include/swoole_coroutine_socket.h000064400000043224151730542040015425 0ustar00/*
  +----------------------------------------------------------------------+
  | Swoole                                                               |
  +----------------------------------------------------------------------+
  | This source file is subject to version 2.0 of the Apache license,    |
  | that is bundled with this package in the file LICENSE, and is        |
  | available through the world-wide-web at the following url:           |
  | http://www.apache.org/licenses/LICENSE-2.0.html                      |
  | If you did not receive a copy of the Apache2.0 license and are unable|
  | to obtain it through the world-wide-web, please send a note to       |
  | license@swoole.com so we can mail you a copy immediately.            |
  +----------------------------------------------------------------------+
  | Author: Tianfeng Han  <rango@swoole.com>                             |
  |         Twosee  <twose@qq.com>                                       |
  +----------------------------------------------------------------------+
*/

#pragma once

#include "swoole_socket.h"
#include "swoole_coroutine.h"
#include "swoole_protocol.h"
#include "swoole_proxy.h"

#include <vector>

namespace swoole {
namespace coroutine {
//-------------------------------------------------------------------------------
/**
 * @return true: continue to wait for events
 * @return false: stop event waiting and resume coroutine
 */
using EventBarrier = std::function<bool()>;

class Socket {
  public:
    int errCode = 0;
    const char *errMsg = "";
    std::string errString;

    bool open_length_check = false;
    bool open_eof_check = false;
    bool http2 = false;

    Protocol protocol = {};
    std::unique_ptr<Socks5Proxy> socks5_proxy = nullptr;
    std::unique_ptr<HttpProxy> http_proxy = nullptr;

    static TimeoutType timeout_type_list[4];

    Socket(int domain, int type, int protocol);
    Socket(int _fd, int _domain, int _type, int _protocol);
    explicit Socket(SocketType type = SW_SOCK_TCP);
    Socket(int _fd, SocketType _type);
    virtual ~Socket();
    /**
     * If SSL is enabled, an SSL handshake will automatically take place during the connect() method.
     * When connect() returns true, it indicates that the TCP connection has been successfully
     * established and the SSL handshake has also succeeded.
     */
    bool connect(const std::string &host, int port = 0, int flags = 0);
    virtual bool connect(const sockaddr *addr, socklen_t addrlen);
    bool shutdown(int how = SHUT_RDWR);
    bool cancel(EventType event);
    bool close();

    bool is_connected() const {
        return connected && !is_closed();
    }

    bool is_closed() const {
        return sock_fd == SW_BAD_SOCKET;
    }

    bool is_port_required() const {
        return type <= SW_SOCK_UDP6;
    }

    bool check_liveness();
    ssize_t peek(void *_buf, size_t _n);
    virtual ssize_t recv(void *_buf, size_t _n);
    virtual ssize_t send(const void *_buf, size_t _n);

    ssize_t send(const std::string &buf) {
        return send(buf.c_str(), buf.length());
    }

    /**
     * The read()/write()/recvmsg()/sendmsg() functions currently does not support SSL
     */
    virtual ssize_t read(void *_buf, size_t _n);
    virtual ssize_t write(const void *_buf, size_t _n);
    virtual ssize_t recvmsg(msghdr *msg, int flags);
    virtual ssize_t sendmsg(const msghdr *msg, int flags);

    virtual ssize_t readv(network::IOVector *io_vector);
    virtual ssize_t readv_all(network::IOVector *io_vector);
    virtual ssize_t writev(network::IOVector *io_vector);
    virtual ssize_t writev_all(network::IOVector *io_vector);
    virtual ssize_t recv_all(void *_buf, size_t _n);
    virtual ssize_t send_all(const void *_buf, size_t _n);
    ssize_t recv_packet(double timeout = 0);
    ssize_t recv_line(void *_buf, size_t maxlen);
    ssize_t recv_with_buffer(void *_buf, size_t _n);

    char *pop_packet() const {
        if (read_buffer->offset == 0) {
            return nullptr;
        } else {
            return read_buffer->pop(buffer_init_size);
        }
    }

    virtual bool poll(EventType _type, double timeout = 0);
    /**
     * If the server has SSL enabled, you must explicitly call `ssl_handshake()`,
     * as it will not be automatically executed within the `accept()` function.
     * This behavior is inconsistent with `connect()`, which internally executes `ssl_handshake()` automatically,
     * thus not requiring an explicit call at the application level.
     * The reason for this design is that `ssl_handshake()` can typically be performed concurrently within a separate
     * client coroutine. If `ssl_handshake()` were to be automatically executed inside the `accept()` function,
     * it would block the server's listening coroutine,
     * causing the `ssl_handshake()` processes to execute sequentially rather than in parallel.
     */
    Socket *accept(double timeout = 0);
    bool bind(const std::string &address, int port = 0);
    bool bind(const sockaddr *sa, socklen_t len);
    bool listen(int backlog = 0);
    virtual bool sendfile(const char *filename, off_t offset, size_t length);
    virtual ssize_t sendto(const std::string &host, int port, const void *_buf, size_t _n);
    ssize_t recvfrom(void *_buf, size_t _n);
    virtual ssize_t recvfrom(void *_buf, size_t _n, sockaddr *_addr, socklen_t *_socklen);

    /**
     * Operation sequence:
     * 1. enable_ssl_encrypt()
     * 2. Set SSL parameters, such as certificate file, key file
     * 3. ssl_handshake(), to be executed after connect or accept
     */
    bool enable_ssl_encrypt() {
        if (ssl_context.get()) {
            return false;
        }
        ssl_context = std::make_shared<SSLContext>();
        return true;
    }

    bool ssl_is_enable() const {
        return get_ssl_context() != nullptr;
    }

    SSLContext *get_ssl_context() const {
        return ssl_context.get();
    }

    virtual bool ssl_handshake();
    bool ssl_verify(bool allow_self_signed);
    std::string ssl_get_peer_cert();

    bool set_ssl_key_file(const std::string &file) const {
        return ssl_context->set_key_file(file);
    }

    bool set_ssl_cert_file(const std::string &file) const {
        return ssl_context->set_cert_file(file);
    }

    void set_ssl_cafile(const std::string &file) const {
        ssl_context->cafile = file;
    }

    void set_ssl_capath(const std::string &path) const {
        ssl_context->capath = path;
    }

    void set_ssl_passphrase(const std::string &str) const {
        ssl_context->passphrase = str;
    }

#ifdef SSL_CTRL_SET_TLSEXT_HOSTNAME
    void set_tls_host_name(const std::string &str) const {
        ssl_context->tls_host_name = str;
        // if user set empty ssl_host_name, disable it, otherwise the underlying may set it automatically
        ssl_context->disable_tls_host_name = ssl_context->tls_host_name.empty();
    }
#endif

    void set_ssl_dhparam(const std::string &file) const {
        ssl_context->dhparam = file;
    }

    void set_ssl_ecdh_curve(const std::string &str) const {
        ssl_context->ecdh_curve = str;
    }

    void set_ssl_protocols(long protocols) const {
        ssl_context->protocols = protocols;
    }

    void set_ssl_disable_compress(bool value) const {
        ssl_context->disable_compress = value;
    }

    void set_ssl_verify_peer(bool value) const {
        ssl_context->verify_peer = value;
    }

    void set_ssl_allow_self_signed(bool value) const {
        ssl_context->allow_self_signed = value;
    }

    void set_ssl_verify_depth(uint8_t value) const {
        ssl_context->verify_depth = value;
    }

    void set_ssl_ciphers(const std::string &str) const {
        ssl_context->ciphers = str;
    }

#ifdef OPENSSL_IS_BORINGSSL
    void set_ssl_grease(uint8_t value) {
        ssl_context->grease = value;
    }
#endif

    const std::string &get_ssl_cert_file() const {
        return ssl_context->cert_file;
    }

    const std::string &get_ssl_key_file() const {
        return ssl_context->key_file;
    }

    static inline void init_reactor(Reactor *reactor) {
        reactor->set_handler(SW_FD_CO_SOCKET, SW_EVENT_READ, readable_event_callback);
        reactor->set_handler(SW_FD_CO_SOCKET, SW_EVENT_WRITE, writable_event_callback);
        reactor->set_handler(SW_FD_CO_SOCKET, SW_EVENT_ERROR, error_event_callback);
    }

    SocketType get_type() const {
        return type;
    }

    FdType get_fd_type() const {
        return socket->fd_type;
    }

    int get_sock_domain() const {
        return sock_domain;
    }

    int get_sock_type() const {
        return sock_type;
    }

    int get_sock_protocol() const {
        return sock_protocol;
    }

    int get_fd() const {
        return sock_fd;
    }

    network::Socket *get_socket() const {
        return socket;
    }

    bool getsockname() const;
    bool getpeername(network::Address *sa);

    const char *get_addr() const {
        return socket->get_addr();
    }

    int get_port() const {
        return socket->get_port();
    }

    bool has_bound(const EventType event = SW_EVENT_RDWR) const {
        return get_bound_co(event) != nullptr;
    }

    Coroutine *get_bound_co(const EventType event) const {
        if (event & SW_EVENT_READ) {
            if (read_co) {
                return read_co;
            }
        }
        if (event & SW_EVENT_WRITE) {
            if (write_co) {
                return write_co;
            }
        }
        return nullptr;
    }

    long get_bound_cid(const EventType event = SW_EVENT_RDWR) const {
        Coroutine *co = get_bound_co(event);
        return co ? co->get_cid() : 0;
    }

    const char *get_event_str(EventType event) const;

    void check_bound_co(const EventType event) const {
        auto bound_cid = get_bound_cid(event);
        if (sw_unlikely(bound_cid)) {
            Coroutine::print_socket_bound_error(sock_fd, get_event_str(event), bound_cid);
        }
    }

    void set_err(const int e) {
        errCode = errno = e;
        swoole_set_last_error(errCode);
        errMsg = e ? swoole_strerror(e) : "";
    }

    void set_err() {
        errCode = swoole_get_last_error() ? swoole_get_last_error() : errno;
        errMsg = swoole_strerror(errCode);
    }

    void set_err(const int e, const char *s) {
        errCode = errno = e;
        swoole_set_last_error(errCode);
        errMsg = s;
    }

    void set_err(const int e, const std::string &s) {
        errCode = errno = e;
        swoole_set_last_error(errCode);
        errString = s;
        errMsg = errString.c_str();
    }

    const char *get_err() {
        return swoole_strerror(errCode);
    }

    /* set connect read write timeout */
    void set_timeout(double timeout, int _type = SW_TIMEOUT_ALL) const;

    void set_timeout(const timeval *timeout, int _type = SW_TIMEOUT_ALL) const {
        set_timeout((double) timeout->tv_sec + ((double) timeout->tv_usec / 1000 / 1000), _type);
    }

    double get_timeout(TimeoutType _type) const;
    bool get_option(int level, int optname, void *optval, socklen_t *optlen) const;
    bool get_option(int level, int optname, int *optval) const;
    bool set_option(int level, int optname, const void *optval, socklen_t optlen) const;
    bool set_option(int level, int optname, int optval) const;
    void set_socks5_proxy(const std::string &host, int port, const std::string &user = "", const std::string &pwd = "");
    void set_http_proxy(const std::string &host, int port, const std::string &user = "", const std::string &pwd = "");
    String *get_read_buffer();
    String *get_write_buffer();
    String *pop_read_buffer();
    String *pop_write_buffer();

    void set_resolve_context(NameResolver::Context *ctx) {
        resolve_context_ = ctx;
    }

    void set_dtor(const std::function<void(Socket *)> &dtor) {
        dtor_ = dtor;
    }

    void set_zero_copy(bool enable) {
        zero_copy = enable;
    }

    void set_buffer_allocator(const Allocator *allocator) {
        buffer_allocator = allocator;
    }

    void set_buffer_init_size(size_t size) {
        if (size == 0) {
            return;
        }
        buffer_init_size = size;
    }

    int move_fd() {
        sock_fd = SW_BAD_SOCKET;
        return socket->move_fd();
    }

    network::Socket *move_socket() {
        network::Socket *_socket = socket;
        socket = nullptr;
        return _socket;
    }

    bool ssl_is_available() const {
        return socket && ssl_handshaked;
    }

    SSL *get_ssl() const {
        return socket->ssl;
    }

    void ssl_close() const;

  protected:
    SocketType type;
    network::Socket *socket = nullptr;
    int sock_domain = 0;
    int sock_type = 0;
    int sock_protocol = 0;
    int sock_fd = -1;

    Coroutine *read_co = nullptr;
    Coroutine *write_co = nullptr;

    EventType want_event = SW_EVENT_NULL;

    std::string connect_host;
    int connect_port = 0;
    int backlog = 0;

    TimerNode *read_timer = nullptr;
    TimerNode *write_timer = nullptr;

    const Allocator *buffer_allocator = nullptr;
    size_t buffer_init_size = SW_BUFFER_SIZE_BIG;
    String *read_buffer = nullptr;
    String *write_buffer = nullptr;

    EventBarrier *recv_barrier = nullptr;
    EventBarrier *send_barrier = nullptr;

    bool ssl_is_server = false;
    bool ssl_handshaked = false;
    std::shared_ptr<SSLContext> ssl_context = nullptr;
    std::string ssl_host_name;
    bool ssl_context_create();
    bool ssl_create(SSLContext *ssl_context);

    bool connected = false;
    bool shutdown_read = false;
    bool shutdown_write = false;

    bool zero_copy = false;

    NameResolver::Context *resolve_context_ = nullptr;
    std::function<void(Socket *)> dtor_;

    Socket(network::Socket *sock, const Socket *server_sock);

    static void timer_callback(Timer *timer, TimerNode *tnode);
    static int readable_event_callback(Reactor *reactor, Event *event);
    static int writable_event_callback(Reactor *reactor, Event *event);
    static int error_event_callback(Reactor *reactor, Event *event);

    void init_sock_type(SocketType _type);
    bool init_sock();
    bool reinit_sock(SocketType _type);
    bool init_reactor_socket(int fd);

    void check_return_value(ssize_t retval) {
        if (retval >= 0) {
            set_err(0);
        } else if (errCode == 0) {
            set_err(errno);
        }
    }

    void init_options() {
        if (socket->is_tcp()) {
            set_option(IPPROTO_TCP, TCP_NODELAY, 1);
        }
        if (socket->is_udp()) {
            socket->set_buffer_size(network::Socket::default_buffer_size);
        }
        protocol.package_length_type = 'N';
        protocol.package_length_size = 4;
        protocol.package_length_offset = 0;
        protocol.package_body_offset = 0;
        protocol.package_max_length = SW_INPUT_BUFFER_SIZE;
    }

    bool add_event(EventType event);
    bool wait_event(EventType event, const void **_buf = nullptr, size_t _n = 0);

    ssize_t recv_packet_with_length_protocol();
    ssize_t recv_packet_with_eof_protocol();

    bool is_available(const EventType event) {
        if (event != SW_EVENT_NULL) {
            check_bound_co(event);
        }
        if (sw_unlikely(is_closed())) {
            set_err(EBADF);
            return false;
        }
        if (sw_unlikely(socket->close_wait)) {
            set_err(SW_ERROR_CO_SOCKET_CLOSE_WAIT);
            return false;
        }
        return true;
    }

    bool socks5_handshake();

    const std::string &get_http_proxy_host_name() const {
        if (ssl_context && !ssl_context->tls_host_name.empty()) {
            return ssl_context->tls_host_name;
        }
        return http_proxy->target_host;
    }

    bool http_proxy_handshake();

    class TimerController {
      public:
        TimerController(TimerNode **_timer_pp, double _timeout, Socket *_socket, TimerCallback _callback)
            : timer_pp(_timer_pp), timeout(_timeout), socket_(_socket), callback(std::move(_callback)) {}
        bool start();
        ~TimerController();

      private:
        bool enabled = false;
        TimerNode **timer_pp;
        double timeout;
        Socket *socket_;
        TimerCallback callback;
    };

  public:
    class TimeoutSetter {
      public:
        TimeoutSetter(Socket *socket, double _timeout, TimeoutType _type);
        ~TimeoutSetter();

      protected:
        Socket *socket_;
        double timeout;
        TimeoutType type;
        double original_timeout[sizeof(timeout_type_list)] = {};
    };

    class TimeoutController : public TimeoutSetter {
      public:
        TimeoutController(Socket *_socket, double _timeout, const TimeoutType _type)
            : TimeoutSetter(_socket, _timeout, _type) {}
        bool has_timedout(TimeoutType _type);

      protected:
        double startup_time = 0;
    };
};

class ProtocolSwitch {
    bool ori_open_eof_check;
    bool ori_open_length_check;
    Protocol ori_protocol;
    Socket *socket_;

  public:
    explicit ProtocolSwitch(Socket *socket) {
        ori_open_eof_check = socket->open_eof_check;
        ori_open_length_check = socket->open_length_check;
        ori_protocol = socket->protocol;
        socket_ = socket;
    }

    ~ProtocolSwitch() {
        /* revert protocol settings */
        socket_->open_eof_check = ori_open_eof_check;
        socket_->open_length_check = ori_open_length_check;
        socket_->protocol = ori_protocol;
    }
};

std::vector<std::string> dns_lookup(const char *domain, int family = AF_INET, double timeout = 2.0);
std::vector<std::string> dns_lookup_impl_with_socket(const char *domain, int family, double timeout);
#ifdef SW_USE_CARES
std::vector<std::string> dns_lookup_impl_with_cares(const char *domain, int family, double timeout);
#endif
std::string get_ip_by_hosts(const std::string &domain);
//-------------------------------------------------------------------------------
}  // namespace coroutine
}  // namespace swoole
ext/swoole/include/swoole_thread.h000064400000003764151730542050013323 0ustar00/*
  +----------------------------------------------------------------------+
  | Swoole                                                               |
  +----------------------------------------------------------------------+
  | This source file is subject to version 2.0 of the Apache license,    |
  | that is bundled with this package in the file LICENSE, and is        |
  | available through the world-wide-web at the following url:           |
  | http://www.apache.org/licenses/LICENSE-2.0.html                      |
  | If you did not receive a copy of the Apache2.0 license and are unable|
  | to obtain it through the world-wide-web, please send a note to       |
  | license@swoole.com so we can mail you a copy immediately.            |
  +----------------------------------------------------------------------+
  | Author: Tianfeng Han  <rango@swoole.com>                             |
  +----------------------------------------------------------------------+
*/

#pragma once

#include "swoole_lock.h"

#include <thread>
#include <string>

long swoole_thread_get_native_id();
bool swoole_thread_set_name(const char *name);
bool swoole_thread_get_name(char *buf, size_t len);
std::string swoole_thread_id_to_str(std::thread::id id);

namespace swoole {
class Thread {
    int exit_status = 0;
    bool living = false;
    std::thread thread;

  public:
    bool is_alive() const {
        return living;
    }

    bool joinable() const {
        return thread.joinable();
    }

    void join() {
        thread.join();
    }

    void detach() {
        thread.detach();
    }

    int get_exit_status() const {
        return exit_status;
    }

    pthread_t get_id() {
        return thread.native_handle();
    }

    template <typename Callable>
    void start(Callable fn) {
        thread = std::thread(fn);
    }

    void enter() {
        exit_status = 0;
        living = true;
    }

    void exit(const int status) {
        exit_status = status;
        living = false;
    }
};
}  // namespace swoole
ext/swoole/include/swoole_mime_type.h000064400000002660151730542050014036 0ustar00/*
  +----------------------------------------------------------------------+
  | Swoole                                                               |
  +----------------------------------------------------------------------+
  | This source file is subject to version 2.0 of the Apache license,    |
  | that is bundled with this package in the file LICENSE, and is        |
  | available through the world-wide-web at the following url:           |
  | http://www.apache.org/licenses/LICENSE-2.0.html                      |
  | If you did not receive a copy of the Apache2.0 license and are unable|
  | to obtain it through the world-wide-web, please send a note to       |
  | license@swoole.com so we can mail you a copy immediately.            |
  +----------------------------------------------------------------------+
  | Author: Tianfeng Han  <rango@swoole.com>                             |
  +----------------------------------------------------------------------+
*/

#pragma once

#include <unordered_map>
#include <string>

namespace swoole {
namespace mime_type {
const std::unordered_map<std::string, std::string> &list();
bool add(const std::string &suffix, const std::string &mime_type);
void set(const std::string &suffix, const std::string &mime_type);
bool del(const std::string &suffix);
const std::string &get(const std::string &filename);
bool exists(const std::string &filename);
}  // namespace mime_type
}  // namespace swoole
ext/swoole/include/swoole_websocket.h000064400000012157151730542050014036 0ustar00/*
  +----------------------------------------------------------------------+
  | Swoole                                                               |
  +----------------------------------------------------------------------+
  | This source file is subject to version 2.0 of the Apache license,    |
  | that is bundled with this package in the file LICENSE, and is        |
  | available through the world-wide-web at the following url:           |
  | http://www.apache.org/licenses/LICENSE-2.0.html                      |
  | If you did not receive a copy of the Apache2.0 license and are unable|
  | to obtain it through the world-wide-web, please send a note to       |
  | license@php.net so we can mail you a copy immediately.               |
  +----------------------------------------------------------------------+
  | Author: Tianfeng Han  <rango@swoole.com>                             |
  +----------------------------------------------------------------------+
*/

#pragma once

#include "swoole_http.h"

#define SW_WEBSOCKET_SEC_KEY_LEN 16
#define SW_WEBSOCKET_GUID "258EAFA5-E914-47DA-95CA-C5AB0DC85B11"
#define SW_WEBSOCKET_HEADER_LEN 2
#define SW_WEBSOCKET_MASK_LEN 4
#define SW_WEBSOCKET_MASK_DATA "258E"
#define SW_WEBSOCKET_EXT16_MAX_LEN 0xFFFF
#define SW_WEBSOCKET_EXT16_LENGTH 0x7E
#define SW_WEBSOCKET_EXT64_LENGTH 0x7F
#define SW_WEBSOCKET_CLOSE_CODE_LEN 2
#define SW_WEBSOCKET_CLOSE_REASON_MAX_LEN 125
#define SW_WEBSOCKET_OPCODE_MAX swoole::websocket::OPCODE_PONG
#define SW_WEBSOCKET_FRAME_HEADER_SIZE (SW_WEBSOCKET_HEADER_LEN + SW_WEBSOCKET_MASK_LEN + sizeof(uint64_t))
#define SW_WEBSOCKET_DEFAULT_PAYLOAD_SIZE 1024

namespace swoole {
namespace websocket {

enum Status {
    STATUS_NONE = 0,
    STATUS_CONNECTION = 1,
    STATUS_HANDSHAKE = 2,
    STATUS_ACTIVE = 3,
    STATUS_CLOSING = 4,
    STATUS_HANDSHAKE_FAILED = 5,
};

enum Flag {
    FLAG_FIN = 1 << 0, /* BC: must be 1 */
    FLAG_COMPRESS = 1 << 1,
    // readonly for user
    FLAG_RSV1 = 1 << 2,
    FLAG_RSV2 = 1 << 3,
    FLAG_RSV3 = 1 << 4,
    FLAG_MASK = 1 << 5,
    // for encoder/decoder
    FLAG_ENCODE_HEADER_ONLY = 1 << 6,
    FLAGS_ALL = /* used to prevent overflow  */
    FLAG_FIN | FLAG_RSV1 | FLAG_RSV2 | FLAG_RSV3 | FLAG_MASK | FLAG_COMPRESS
};

struct Header {
    /**
     * fin:1 rsv1:1 rsv2:1 rsv3:1 opcode:4
     */
    uchar OPCODE : 4;
    uchar RSV3 : 1;
    uchar RSV2 : 1;
    uchar RSV1 : 1;
    uchar FIN : 1;
    uchar LENGTH : 7;
    uchar MASK : 1;
};

struct Frame {
    Header header;
    char mask_key[SW_WEBSOCKET_MASK_LEN];
    uint16_t header_length;
    size_t payload_length;
    char *payload;

    uchar get_flags() const {
        uchar flags = 0;
        if (header.FIN) {
            flags |= FLAG_FIN;
        }
        if (header.RSV1) {
            flags |= FLAG_RSV1;
        }
        if (header.RSV2) {
            flags |= FLAG_RSV2;
        }
        if (header.RSV3) {
            flags |= FLAG_RSV3;
        }
        if (header.MASK) {
            flags |= FLAG_MASK;
        }
        return flags;
    }

    bool compressed() const {
        return header.RSV1;
    }
};

#define WEBSOCKET_VERSION 13

enum Opcode {
    OPCODE_CONTINUATION = 0x0,
    OPCODE_TEXT = 0x1,
    OPCODE_BINARY = 0x2,
    OPCODE_CLOSE = 0x8,
    OPCODE_PING = 0x9,
    OPCODE_PONG = 0xa,
};

enum CloseReason {
    CLOSE_NORMAL = 1000,
    CLOSE_GOING_AWAY = 1001,
    CLOSE_PROTOCOL_ERROR = 1002,
    CLOSE_DATA_ERROR = 1003,
    CLOSE_STATUS_ERROR = 1005,
    CLOSE_ABNORMAL = 1006,
    CLOSE_MESSAGE_ERROR = 1007,
    CLOSE_POLICY_ERROR = 1008,
    CLOSE_MESSAGE_TOO_BIG = 1009,
    CLOSE_EXTENSION_MISSING = 1010,
    CLOSE_SERVER_ERROR = 1011,
    CLOSE_SERVICE_RESTART = 1012,
    CLOSE_TRY_AGAIN_LATER = 1013,
    CLOSE_BAD_GATEWAY = 1014,
    CLOSE_TLS = 1015,
};

static inline uint16_t get_ext_flags(uchar opcode, uchar flags) {
    uint16_t ext_flags = opcode;
    ext_flags = ext_flags << 8;
    ext_flags += flags;
    return ext_flags;
}

static inline uchar set_flags(uchar fin, uchar mask, uchar rsv1, uchar rsv2, uchar rsv3) {
    uchar flags = 0;
    if (fin) {
        flags |= FLAG_FIN;
    }
    if (mask) {
        flags |= FLAG_MASK;
    }
    if (rsv1) {
        flags |= FLAG_RSV1;
    }
    if (rsv2) {
        flags |= FLAG_RSV2;
    }
    if (rsv3) {
        flags |= FLAG_RSV3;
    }
    return flags;
}

bool encode(String *buffer, const char *data, size_t length, uint8_t opcode, uint8_t flags);
bool decode(Frame *frame, char *data, size_t length);
void mask(char *data, size_t len, const char *mask_key);
bool pack_close_frame(String *buffer, int code, const char *reason, size_t length, uint8_t flags);
void print_frame(const Frame *frame);

static inline bool decode(Frame *frame, const String *str) {
    return decode(frame, str->str, str->length);
}

static inline void parse_ext_flags(uint16_t ext_flags, uchar *opcode, uchar *flags) {
    *opcode = (uchar) (ext_flags >> 8);
    *flags = (uchar) (ext_flags & 0xFF);
}

ssize_t get_package_length(const Protocol *protocol, network::Socket *conn, PacketLength *pl);
int dispatch_frame(const Protocol *protocol, network::Socket *conn, const RecvData *rdata);

}  // namespace websocket
}  // namespace swoole
ext/swoole/include/swoole_log.h000064400000037326151730542050012636 0ustar00/*
  +----------------------------------------------------------------------+
  | Swoole                                                               |
  +----------------------------------------------------------------------+
  | This source file is subject to version 2.0 of the Apache license,    |
  | that is bundled with this package in the file LICENSE, and is        |
  | available through the world-wide-web at the following url:           |
  | http://www.apache.org/licenses/LICENSE-2.0.html                      |
  | If you did not receive a copy of the Apache2.0 license and are unable|
  | to obtain it through the world-wide-web, please send a note to       |
  | license@swoole.com so we can mail you a copy immediately.            |
  +----------------------------------------------------------------------+
  | Author: Tianfeng Han  <rango@swoole.com>                             |
  +----------------------------------------------------------------------+
*/

#pragma once

#include <cstddef>
#include <cstdint>
#include <string>
#include <unistd.h>

#define SW_LOG_BUFFER_SIZE (SW_ERROR_MSG_SIZE + 256)
#define SW_LOG_DATE_STRLEN 128
#define SW_LOG_DEFAULT_DATE_FORMAT "%F %T"

enum swLogLevel {
    SW_LOG_DEBUG = 0,
    SW_LOG_TRACE,
    SW_LOG_INFO,
    SW_LOG_NOTICE,
    SW_LOG_WARNING,
    SW_LOG_ERROR,
    SW_LOG_NONE,
};

enum swLogRotationType {
    SW_LOG_ROTATION_SINGLE = 0,
    SW_LOG_ROTATION_MONTHLY,
    SW_LOG_ROTATION_DAILY,
    SW_LOG_ROTATION_HOURLY,
    SW_LOG_ROTATION_EVERY_MINUTE,
};

namespace swoole {
class Logger {
  private:
    bool opened = false;
    // Redirect stdin and stdout to log_fd
    bool redirected = false;
    bool display_backtrace_ = false;
    int stdout_fd = -1;
    int stderr_fd = -1;
    FILE *log_fp = stdout;
    int log_level = SW_LOG_INFO;
    bool date_with_microseconds = false;
    std::string date_format = SW_LOG_DEFAULT_DATE_FORMAT;
    std::string log_file;
    std::string log_real_file;
    std::mutex lock;
    int log_rotation = SW_LOG_ROTATION_SINGLE;

    void reopen_without_lock();

  public:
    bool open(const char *logfile);
    void reopen();
    void set_stream(FILE *stream);
    /**
     * Only the `put` and `reopen` functions are thread-safe,
     * other functions must be used in a single-threaded environment.
     */
    void put(int level, const char *content, size_t length);
    void close();
    void reset();
    void set_level(int lv);
    int get_level() const;
    bool set_date_format(const char *format);
    void set_rotation(int rotation);
    const char *get_real_file();
    const char *get_file() const;
    bool is_opened() const;
    bool redirect_stdout_and_stderr(bool enable);
    void set_date_with_microseconds(bool enable);
    std::string gen_real_file(const std::string &file) const;
    static std::string get_pretty_name(const std::string &prettyFunction, bool strip = true);

    void display_backtrace() {
        display_backtrace_ = true;
    }
};
}  // namespace swoole

swoole::Logger *sw_logger();
#define __SW_FUNC__ (swoole::Logger::get_pretty_name(__PRETTY_FUNCTION__).c_str())

#define swoole_info(str, ...)                                                                                          \
    if (SW_LOG_INFO >= swoole_get_log_level()) {                                                                       \
        size_t _sw_error_len = sw_snprintf(sw_error, SW_ERROR_MSG_SIZE, str, ##__VA_ARGS__);                           \
        sw_logger()->put(SW_LOG_INFO, sw_error, _sw_error_len);                                                        \
    }

#define swoole_notice(str, ...)                                                                                        \
    if (SW_LOG_NOTICE >= swoole_get_log_level()) {                                                                     \
        size_t _sw_error_len = sw_snprintf(sw_error, SW_ERROR_MSG_SIZE, str, ##__VA_ARGS__);                           \
        sw_logger()->put(SW_LOG_NOTICE, sw_error, _sw_error_len);                                                      \
    }

#define swoole_sys_notice(str, ...)                                                                                    \
    do {                                                                                                               \
        swoole_set_last_error(errno);                                                                                  \
        if (SW_LOG_ERROR >= swoole_get_log_level()) {                                                                  \
            size_t _sw_error_len = sw_snprintf(sw_error,                                                               \
                                               SW_ERROR_MSG_SIZE,                                                      \
                                               "%s(:%d): " str ", Error: %s[%d]",                                      \
                                               __SW_FUNC__,                                                            \
                                               __LINE__,                                                               \
                                               ##__VA_ARGS__,                                                          \
                                               swoole_strerror(errno),                                                 \
                                               errno);                                                                 \
            sw_logger()->put(SW_LOG_NOTICE, sw_error, _sw_error_len);                                                  \
        }                                                                                                              \
    } while (0)

#define swoole_warning(str, ...)                                                                                       \
    do {                                                                                                               \
        if (SW_LOG_WARNING >= swoole_get_log_level()) {                                                                \
            size_t _sw_error_len = sw_snprintf(sw_error, SW_ERROR_MSG_SIZE, "%s(): " str, __SW_FUNC__, ##__VA_ARGS__); \
            sw_logger()->put(SW_LOG_WARNING, sw_error, _sw_error_len);                                                 \
        }                                                                                                              \
    } while (0)

#define swoole_sys_warning(str, ...)                                                                                   \
    do {                                                                                                               \
        swoole_set_last_error(errno);                                                                                  \
        if (SW_LOG_ERROR >= swoole_get_log_level()) {                                                                  \
            size_t _sw_error_len = sw_snprintf(sw_error,                                                               \
                                               SW_ERROR_MSG_SIZE,                                                      \
                                               "%s(): " str ", Error: %s[%d]",                                         \
                                               __SW_FUNC__,                                                            \
                                               ##__VA_ARGS__,                                                          \
                                               swoole_strerror(errno),                                                 \
                                               errno);                                                                 \
            sw_logger()->put(SW_LOG_WARNING, sw_error, _sw_error_len);                                                 \
        }                                                                                                              \
    } while (0)

#define swoole_error(str, ...)                                                                                         \
    do {                                                                                                               \
        size_t _sw_error_len = sw_snprintf(sw_error, SW_ERROR_MSG_SIZE, "%s(): " str, __SW_FUNC__, ##__VA_ARGS__);     \
        sw_logger()->put(SW_LOG_ERROR, sw_error, _sw_error_len);                                                       \
        swoole_exit(1);                                                                                                \
    } while (0)

#define swoole_sys_error(str, ...)                                                                                     \
    do {                                                                                                               \
        size_t _sw_error_len = sw_snprintf(sw_error,                                                                   \
                                           SW_ERROR_MSG_SIZE,                                                          \
                                           "%s(): " str ", Error: %s[%d]",                                             \
                                           __SW_FUNC__,                                                                \
                                           ##__VA_ARGS__,                                                              \
                                           swoole_strerror(errno),                                                     \
                                           errno);                                                                     \
        sw_logger()->put(SW_LOG_ERROR, sw_error, _sw_error_len);                                                       \
        swoole_exit(1);                                                                                                \
    } while (0)

#define swoole_fatal_error(code, str, ...) SwooleG.fatal_error(code, str, ##__VA_ARGS__)

#define swoole_error_log(level, error, str, ...)                                                                       \
    do {                                                                                                               \
        swoole_set_last_error(error);                                                                                  \
        if (level >= swoole_get_log_level() && !swoole_is_ignored_error(error)) {                                      \
            size_t _sw_error_len =                                                                                     \
                sw_snprintf(sw_error, SW_ERROR_MSG_SIZE, "%s() (ERRNO %d): " str, __SW_FUNC__, error, ##__VA_ARGS__);  \
            sw_logger()->put(level, sw_error, _sw_error_len);                                                          \
        }                                                                                                              \
    } while (0)

#ifdef SW_DEBUG
#define swoole_debug(str, ...)                                                                                         \
    if (SW_LOG_DEBUG >= swoole_get_log_level()) {                                                                      \
        size_t _sw_error_len =                                                                                         \
            sw_snprintf(sw_error, SW_ERROR_MSG_SIZE, "%s(:%d): " str, __SW_FUNC__, __LINE__, ##__VA_ARGS__);           \
        sw_logger()->put(SW_LOG_DEBUG, sw_error, _sw_error_len);                                                       \
    }

#define swoole_hex_dump(data, length)                                                                                  \
    do {                                                                                                               \
        const char *__data = (data);                                                                                   \
        size_t __length = (length);                                                                                    \
        swoole_debug("+----------+------------+-----------+-----------+------------+------------------+");             \
        for (size_t of = 0; of < __length; of += 16) {                                                                 \
            char hex[16 * 3 + 1];                                                                                      \
            char str[16 + 1];                                                                                          \
            size_t i, hof = 0, sof = 0;                                                                                \
            for (i = of; i < of + 16 && i < __length; i++) {                                                           \
                hof += sprintf(hex + hof, "%02x ", (__data)[i] & 0xff);                                                \
                sof += sprintf(str + sof, "%c", isprint((int) (__data)[i]) ? (__data)[i] : '.');                       \
            }                                                                                                          \
            swoole_debug("| %08zx | %-48s| %-16s |", of, hex, str);                                                    \
        }                                                                                                              \
        swoole_debug("+----------+------------+-----------+-----------+------------+------------------+");             \
    } while (0)
#else
#define swoole_debug(str, ...)
#define swoole_hex_dump(data, length)
#endif

enum swTraceWhat : long {
    /**
     * Server
     */
    SW_TRACE_SERVER = 1u << 1,
    SW_TRACE_CLIENT = 1u << 2,
    SW_TRACE_BUFFER = 1u << 3,
    SW_TRACE_CONN = 1u << 4,
    SW_TRACE_EVENT = 1u << 5,
    SW_TRACE_WORKER = 1u << 6,
    SW_TRACE_MEMORY = 1u << 7,
    SW_TRACE_REACTOR = 1u << 8,
    SW_TRACE_PHP = 1u << 9,
    SW_TRACE_HTTP = 1u << 10,
    SW_TRACE_HTTP2 = 1u << 11,
    SW_TRACE_EOF_PROTOCOL = 1u << 12,
    SW_TRACE_LENGTH_PROTOCOL = 1u << 13,
    SW_TRACE_CLOSE = 1u << 14,
    SW_TRACE_WEBSOCKET = 1u << 15,
    /**
     * Client
     */
    SW_TRACE_REDIS_CLIENT = 1u << 16,
    SW_TRACE_MYSQL_CLIENT = 1u << 17,
    SW_TRACE_HTTP_CLIENT = 1u << 18,
    SW_TRACE_AIO = 1u << 19,
    SW_TRACE_SSL = 1u << 20,
    SW_TRACE_NORMAL = 1u << 21,
    /**
     * Coroutine
     */
    SW_TRACE_CHANNEL = 1u << 22,
    SW_TRACE_TIMER = 1u << 23,
    SW_TRACE_SOCKET = 1u << 24,
    SW_TRACE_COROUTINE = 1u << 25,
    SW_TRACE_CONTEXT = 1u << 26,
    SW_TRACE_CO_HTTP_SERVER = 1u << 27,
    SW_TRACE_TABLE = 1u << 28,
    SW_TRACE_CO_CURL = 1u << 29,
    SW_TRACE_CARES = 1u << 30,

    SW_TRACE_ZLIB = 1u << 31,
    SW_TRACE_CO_PGSQL = 1ul << 32,
    SW_TRACE_CO_ODBC = 1ul << 33,
    SW_TRACE_CO_ORACLE = 1ul << 34,
    SW_TRACE_CO_SQLITE = 1ul << 35,
    SW_TRACE_CO_FIREBIRD = 1ul << 36,
    SW_TRACE_CO_SSH2 = 1ul << 37,
    /**
     * Thread
     */
    SW_TRACE_THREAD = 1ul << 40,

    SW_TRACE_ALL = 0x7fffffffffffffff
};

#ifdef SW_LOG_TRACE_OPEN
#define swoole_trace_log(what, str, ...)                                                                               \
    if (SW_LOG_TRACE >= swoole_get_log_level() && (what & SwooleG.trace_flags)) {                                      \
        size_t _sw_error_len =                                                                                         \
            sw_snprintf(sw_error, SW_ERROR_MSG_SIZE, "%s(:%d): " str, __SW_FUNC__, __LINE__, ##__VA_ARGS__);           \
        sw_logger()->put(SW_LOG_TRACE, sw_error, _sw_error_len);                                                       \
    }
#else
#define swoole_trace_log(what, str, ...)
#endif

#define swoole_trace(str, ...) swoole_trace_log(SW_TRACE_NORMAL, str, ##__VA_ARGS__)
ext/swoole/include/swoole_config.h000064400000021456151730542050013317 0ustar00/*
  +----------------------------------------------------------------------+
  | Swoole                                                               |
  +----------------------------------------------------------------------+
  | This source file is subject to version 2.0 of the Apache license,    |
  | that is bundled with this package in the file LICENSE, and is        |
  | available through the world-wide-web at the following url:           |
  | http://www.apache.org/licenses/LICENSE-2.0.html                      |
  | If you did not receive a copy of the Apache2.0 license and are unable|
  | to obtain it through the world-wide-web, please send a note to       |
  | license@swoole.com so we can mail you a copy immediately.            |
  +----------------------------------------------------------------------+
  | Author: Tianfeng Han  <rango@swoole.com>                             |
  +----------------------------------------------------------------------+
*/
#ifndef SWOOLE_CONFIG_H_
#define SWOOLE_CONFIG_H_

#ifndef __clang__
// gcc version check
#if defined(__GNUC__) && (__GNUC__ < 3 || (__GNUC__ == 4 && __GNUC_MINOR__ < 8))
#error "GCC 4.8 or later required"
#endif
#endif

#define SW_MAX_FDTYPE 32  // 32 kinds of event
#define SW_MAX_HOOK_TYPE 32
#define SW_ERROR_MSG_SIZE 16384
#define SW_MAX_FILE_CONTENT (64 * 1024 * 1024)  // for swoole_file_get_contents
#define SW_MAX_LISTEN_PORT 60000
#define SW_MAX_CONNECTION 100000
#define SW_MAX_CONCURRENT_TASK 1024
#define SW_STACK_BUFFER_SIZE 65536

#ifdef HAVE_MALLOC_TRIM
#define SW_USE_MALLOC_TRIM 1
#endif
#define SW_MALLOC_TRIM_INTERVAL 60
#define SW_MALLOC_TRIM_PAD 0

#define SW_MAX_SOCKETS_DEFAULT 1024

#define SW_SOCKET_BUFFER_SIZE 8388608
#define SW_SOCKET_RETRY_COUNT 10

#define SW_SOCKET_DEFAULT_DNS_TIMEOUT 60
#define SW_SOCKET_DEFAULT_CONNECT_TIMEOUT 10
#define SW_SOCKET_DEFAULT_READ_TIMEOUT 60
#define SW_SOCKET_DEFAULT_WRITE_TIMEOUT 60
#define SW_SOCKET_CORK_MIN_SIZE 65536

#define SW_SYSTEMD_FDS_START 3

#define SW_GLOBAL_MEMORY_PAGESIZE (2 * 1024 * 1024)  // global memory page

#define SW_MAX_THREAD_NCPU 4     // n * cpu_num
#define SW_MAX_WORKER_NCPU 1000  // n * cpu_num

#define SW_HOST_MAXSIZE                                                                                                \
    sizeof(((struct sockaddr_un *) NULL)->sun_path)  // Linux has 108 UNIX_PATH_MAX, but BSD/macOS limit is only 104

#define SW_CLIENT_BUFFER_SIZE 65536
#define SW_CLIENT_CONNECT_TIMEOUT 0.5

// !!!Don't modify.----------------------------------------------------------
#ifdef __MACH__
#define SW_IPC_MAX_SIZE 2048  // MacOS
#else
#define SW_IPC_MAX_SIZE 8192  // for IPC, dgram and message-queue max size
#endif
#define SW_IPC_BUFFER_MAX_SIZE (64 * 1024)
#define SW_IPC_BUFFER_SIZE (SW_IPC_MAX_SIZE - sizeof(swoole::DataHead))
#define SW_IPC_MSG_MIN (2048 - sizeof(swoole::DataHead))
// !!!End.-------------------------------------------------------------------

#define SW_BUFFER_SIZE_STD 8192
#define SW_BUFFER_SIZE_BIG 65536
#define SW_BUFFER_SIZE_UDP 65536

#define SW_SENDFILE_CHUNK_SIZE 65536

#define SW_DATA_EOF "\r\n\r\n"
#define SW_DATA_EOF_MAXLEN 8

#define SW_TASKWAIT_TIMEOUT 0.5

#define SW_AIO_THREAD_NUM_MULTIPLE 8
#define SW_AIO_THREAD_MAX_IDLE_TIME 1.0
#define SW_AIO_TASK_MAX_WAIT_TIME 0.001
#define SW_AIO_EVENT_NUM 128

#define SW_WORKER_MAX_WAIT_TIME 3
#define SW_WORKER_MIN_REQUEST 10
#define SW_WORKER_MAX_RECV_CHUNK_COUNT 32

#define SW_REACTOR_MAXEVENTS 4096

#define SW_SESSION_LIST_SIZE (1 * 1024 * 1024)

#define SW_MSGMAX 65536
#define SW_MESSAGE_BOX_SIZE 65536

/**
 * The maximum number of Reactor threads
 * the number of the CPU cores threads will be started by default
 * number 8 is the maximum
 */
#define SW_REACTOR_MAX_THREAD 8

#define SW_INPUT_BUFFER_SIZE (2 * 1024 * 1024)
#define SW_BUFFER_MIN_SIZE 65536
#define SW_SEND_BUFFER_SIZE 65536

#define SW_BACKLOG 512

/**
 * max accept times for single time
 */
#define SW_ACCEPT_MAX_COUNT 64
#define SW_ACCEPT_RETRY_TIME 1.0

#define SW_TCP_KEEPCOUNT 5
#define SW_TCP_KEEPIDLE 3600  // 1 hour
#define SW_TCP_KEEPINTERVAL 60

#define SW_TASK_TMP_PATH_SIZE 256
#define SW_TASK_TMP_DIR "/tmp"
#define SW_TASK_TMP_FILE "swoole.task.XXXXXX"

#define SW_FILE_CHUNK_SIZE 65536

#define SW_TABLE_CONFLICT_PROPORTION 0.2  // 20%
#define SW_TABLE_KEY_SIZE 64

#define SW_SSL_BUFFER_SIZE 16384
#define SW_SSL_CIPHER_LIST "EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH"
#define SW_SSL_ECDH_CURVE "auto"

#define SW_SPINLOCK_LOOP_N 1024
#define SW_FILE_LOCK_DEFAULT_SECOND 0.001
#define SW_FILE_LOCK_MAX_SECOND 0.1

#define SW_SIGNO_MAX 128
#define SW_UNREGISTERED_SIGNAL_FMT "Unable to find callback function for signal %s"

#define SW_DNS_HOST_BUFFER_SIZE 16
#define SW_DNS_SERVER_PORT 53
#define SW_DNS_RESOLV_CONF "/etc/resolv.conf"

#define SW_Z_BEST_SPEED 1
#define SW_COMPRESSION_MIN_LENGTH_DEFAULT 20

#ifndef IOV_MAX
#define IOV_MAX 16
#endif

#define SW_IOV_MAX_ERROR_MSG "The maximum of iov count is %d"

#define SW_IOURING_QUEUE_SIZE 8192
#define SW_IOURING_SQE_BATCH_SIZE 16

/**
 * HTTP Protocol
 */
#define SW_HTTP_SERVER_SOFTWARE "swoole-http-server"
#define SW_HTTP_SERVER_BOUNDARY_PREKEY "SwooleBoundary"
#define SW_HTTP_SERVER_BOUNDARY_TOTAL_SIZE 39
#define SW_HTTP_SERVER_PART_HEADER 256
#define SW_HTTP_PARAM_MAX_NUM 128
#define SW_HTTP_FORM_KEYLEN 512
#define SW_HTTP_RESPONSE_INIT_SIZE 65536
#define SW_HTTP_HEADER_MAX_SIZE 65536
#define SW_HTTP_HEADER_KEY_SIZE 128
#define SW_HTTP_UPLOAD_TMPDIR_SIZE SW_TASK_TMP_PATH_SIZE
#define SW_HTTP_DATE_FORMAT "D, d M Y H:i:s T"
#define SW_HTTP_RFC1123_DATE_GMT "%a, %d %b %Y %T GMT"
#define SW_HTTP_RFC1123_DATE_UTC "%a, %d %b %Y %T UTC"
#define SW_HTTP_RFC850_DATE "%A, %d-%b-%y %T GMT"
#define SW_HTTP_ASCTIME_DATE "%a %b %e %T %Y"
#define SW_HTTP_UPLOAD_FILE "Swoole-Upload-File"
#define SW_HTTP_CHUNK_EOF "0\r\n\r\n"
#define SW_HTTP_DEFAULT_CONTENT_TYPE "text/html"
#define SW_HTTP_MAX_APPEND_DATA 16384

#define SW_HTTP_100_CONTINUE_PACKET "HTTP/1.1 100 Continue\r\n\r\n"
#define SW_HTTP_BAD_REQUEST_PACKET "HTTP/1.1 400 Bad Request\r\n\r\n"
#define SW_HTTP_REQUEST_ENTITY_TOO_LARGE_PACKET "HTTP/1.1 413 Request Entity Too Large\r\n\r\n"
#define SW_HTTP_SERVICE_UNAVAILABLE_PACKET "HTTP/1.1 503 Service Unavailable\r\n\r\n"

#define SW_HTTP_PAGE_CSS                                                                                               \
    "<style> \
body { padding: 0.5em; line-height: 2; } \
h1 { font-size: 1.5em; padding-bottom: 0.3em; border-bottom: 1px solid #ccc; } \
ul { list-style-type: disc; } \
footer { border-top: 1px solid #ccc; } \
a { color: #0969da; } \
</style>"

#define SW_HTTP_POWER_BY "<footer><i>Powered by Swoole</i></footer>"

#define SW_HTTP_PAGE_400                                                                                               \
    "<html><body>" SW_HTTP_PAGE_CSS "<h1>HTTP 400 Bad Request</h1>" SW_HTTP_POWER_BY "</body></html>"
#define SW_HTTP_PAGE_404 "<html><body>" SW_HTTP_PAGE_CSS "<h1>HTTP 404 Not Found</h1>" SW_HTTP_POWER_BY "</body></html>"
#define SW_HTTP_PAGE_500                                                                                               \
    "<html><body>" SW_HTTP_PAGE_CSS "<h1>HTTP 500 Internal Server Error</h1>" SW_HTTP_POWER_BY "</body></html>"

/**
 * HTTP2 Protocol
 */
#define SW_HTTP2_DATA_BUFFER_SIZE 8192
#define SW_HTTP2_DEFAULT_HEADER_TABLE_SIZE (1 << 12)
#define SW_HTTP2_DEFAULT_MAX_CONCURRENT_STREAMS UINT_MAX
#define SW_HTTP2_DEFAULT_ENABLE_PUSH 0
#define SW_HTTP2_DEFAULT_MAX_FRAME_SIZE (1u << 14)
#define SW_HTTP2_DEFAULT_INIT_WINDOW_SIZE ((1 << 16) - 1)
#define SW_HTTP2_DEFAULT_MAX_HEADER_LIST_SIZE UINT_MAX

#define SW_HTTP_CLIENT_USERAGENT "swoole-http-client"
#define SW_HTTP_CLIENT_BOUNDARY_PREKEY "----SwooleBoundary"
#define SW_HTTP_CLIENT_BOUNDARY_TOTAL_SIZE 39
#define SW_HTTP_FORM_RAW_DATA_FMT "--%.*s\r\nContent-Disposition: form-data; name=\"%.*s\"\r\n\r\n"
#define SW_HTTP_FORM_RAW_DATA_FMT_LEN 8
#define SW_HTTP_FORM_FILE_DATA_FMT                                                                                     \
    "--%.*s\r\nContent-Disposition: form-data; name=\"%.*s\"; filename=\"%.*s\"\r\nContent-Type: %.*s\r\n\r\n"
#define SW_HTTP_FORM_FILE_DATA_FMT_LEN 16

#define SW_WEBSOCKET_VERSION "13"
#define SW_WEBSOCKET_KEY_LENGTH 16
#define SW_WEBSOCKET_QUEUE_SIZE 16
#define SW_WEBSOCKET_EXTENSION_DEFLATE "permessage-deflate; client_no_context_takeover; server_no_context_takeover"

/**
 * MySQL Client
 */
#define SW_MYSQL_DEFAULT_HOST "127.0.0.1"
#define SW_MYSQL_DEFAULT_PORT 3306
#define SW_MYSQL_DEFAULT_CHARSET 33  // 0x21, utf8_general_ci

/**
 * PGSQL Client
 */
#define SW_PGSQL_CONNECT_TIMEOUT 3.0

/**
 * Coroutine
 */
#define SW_DEFAULT_C_STACK_SIZE (2 * 1024 * 1024)
#define SW_CORO_BAILOUT_EXIT_CODE 1
#if 0
#define SW_CONTEXT_PROTECT_STACK_PAGE 1
#define SW_CONTEXT_DETECT_STACK_USAGE 1
#endif

#ifdef SW_DEBUG
#ifndef SW_LOG_TRACE_OPEN
#define SW_LOG_TRACE_OPEN 1
#endif
#endif

#endif /* SWOOLE_CONFIG_H_ */
ext/swoole/include/swoole_lock.h000064400000006403151730542050012775 0ustar00/*
  +----------------------------------------------------------------------+
  | Swoole                                                               |
  +----------------------------------------------------------------------+
  | This source file is subject to version 2.0 of the Apache license,    |
  | that is bundled with this package in the file LICENSE, and is        |
  | available through the world-wide-web at the following url:           |
  | http://www.apache.org/licenses/LICENSE-2.0.html                      |
  | If you did not receive a copy of the Apache2.0 license and are unable|
  | to obtain it through the world-wide-web, please send a note to       |
  | license@swoole.com so we can mail you a copy immediately.            |
  +----------------------------------------------------------------------+
  | Author: Tianfeng Han  <rango@swoole.com>                             |
  |         Twosee  <twose@qq.com>                                       |
  +----------------------------------------------------------------------+
*/

#pragma once

#include "swoole_memory.h"

#include <sys/file.h>
#include <system_error>

namespace swoole {

class Lock {
  public:
    enum Type {
        RW_LOCK = 1,
        MUTEX = 3,
        SPIN_LOCK = 5,
        COROUTINE_LOCK = 6,
    };
    Type get_type() const {
        return type_;
    }
    virtual ~Lock() = default;
    virtual int lock(int operation = LOCK_EX, int timeout_msec = -1) = 0;
    virtual int unlock() = 0;

  protected:
    Lock(Type type, bool shared) {
        type_ = type;
        shared_ = shared;
    }
    Type type_;
    bool shared_;
};

struct MutexImpl;

class Mutex final : public Lock {
    MutexImpl *impl;

  public:
    explicit Mutex(bool shared);
    ~Mutex() override;
    int lock(int operation = LOCK_EX, int timeout_msec = -1) override;
    int unlock() override;
};

#ifdef HAVE_RWLOCK
struct RWLockImpl;

class RWLock final : public Lock {
    RWLockImpl *impl;

  public:
    explicit RWLock(bool shared);
    ~RWLock() override;
    int lock(int operation = LOCK_EX, int timeout_msec = -1) override;
    int unlock() override;
    int lock_rd() {
    	return lock(LOCK_SH);
    }
    int lock_wr() {
    	return lock(LOCK_EX);
    }
};
#endif

#ifdef HAVE_SPINLOCK
class SpinLock final : public Lock {
    pthread_spinlock_t *impl;

  public:
    explicit SpinLock(bool shared);
    ~SpinLock() override;
    int lock(int operation = LOCK_EX, int timeout_msec = -1) override;
    int unlock() override;
};
#endif

class CoroutineLock final : public Lock {
    long cid = 0;
    sw_atomic_t *value = nullptr;
    void *coroutine = nullptr;

    int lock_impl(bool blocking = true);

  public:
    explicit CoroutineLock(bool shared);
    ~CoroutineLock() override;
    int lock(int operation = LOCK_EX, int timeout_msec = -1) override;
    int unlock() override;
};

#if defined(HAVE_PTHREAD_BARRIER) && !(defined(__FreeBSD__) || defined(__OpenBSD__) || defined(__NetBSD__))
#define SW_USE_PTHREAD_BARRIER
#endif

struct Barrier {
#ifdef SW_USE_PTHREAD_BARRIER
    pthread_barrier_t barrier_;
    pthread_barrierattr_t barrier_attr_;
    bool shared_;
#else
    sw_atomic_t count_;
    sw_atomic_t barrier_;
#endif
    void init(bool shared, int count);
    void wait();
    void destroy();
};

}  // namespace swoole
ext/swoole/include/swoole_api.h000064400000004026151730542050012615 0ustar00/*
  +----------------------------------------------------------------------+
  | Swoole                                                               |
  +----------------------------------------------------------------------+
  | This source file is subject to version 2.0 of the Apache license,    |
  | that is bundled with this package in the file LICENSE, and is        |
  | available through the world-wide-web at the following url:           |
  | http://www.apache.org/licenses/LICENSE-2.0.html                      |
  | If you did not receive a copy of the Apache2.0 license and are unable|
  | to obtain it through the world-wide-web, please send a note to       |
  | license@swoole.com so we can mail you a copy immediately.            |
  +----------------------------------------------------------------------+
  | Author: Tianfeng Han  <rango@swoole.com>                             |
  +----------------------------------------------------------------------+
*/

#ifndef SW_C_API_H_
#define SW_C_API_H_

#ifdef __cplusplus
extern "C" {
#endif

#include "swoole_config.h"

enum swGlobalHookType {
    SW_GLOBAL_HOOK_BEFORE_SERVER_START,
    SW_GLOBAL_HOOK_BEFORE_CLIENT_START,
    SW_GLOBAL_HOOK_BEFORE_WORKER_START,
    SW_GLOBAL_HOOK_ON_CORO_START,
    SW_GLOBAL_HOOK_ON_CORO_STOP,
    SW_GLOBAL_HOOK_ON_REACTOR_CREATE,
    SW_GLOBAL_HOOK_BEFORE_SERVER_SHUTDOWN,
    SW_GLOBAL_HOOK_AFTER_SERVER_SHUTDOWN,
    SW_GLOBAL_HOOK_BEFORE_WORKER_STOP,
    SW_GLOBAL_HOOK_ON_REACTOR_DESTROY,
    SW_GLOBAL_HOOK_BEFORE_SERVER_CREATE,
    SW_GLOBAL_HOOK_AFTER_SERVER_CREATE,
    SW_GLOBAL_HOOK_AFTER_FORK,
    SW_GLOBAL_HOOK_USER = 24,
    SW_GLOBAL_HOOK_END = SW_MAX_HOOK_TYPE - 1,
};

typedef void (*swHookFunc)(void *data);

void swoole_add_hook(swGlobalHookType type, swHookFunc cb, int push_back);
void swoole_call_hook(swGlobalHookType type, void *arg);
bool swoole_isset_hook(swGlobalHookType type);

const char *swoole_version(void);
int swoole_version_id(void);
int swoole_api_version_id(void);

#ifdef __cplusplus
} /* end extern "C" */
#endif
#endif
ext/swoole/include/swoole_version.h000064400000003371151730542050013533 0ustar00/*
  +----------------------------------------------------------------------+
  | Swoole                                                               |
  +----------------------------------------------------------------------+
  | This source file is subject to version 2.0 of the Apache license,    |
  | that is bundled with this package in the file LICENSE, and is        |
  | available through the world-wide-web at the following url:           |
  | http://www.apache.org/licenses/LICENSE-2.0.html                      |
  | If you did not receive a copy of the Apache2.0 license and are unable|
  | to obtain it through the world-wide-web, please send a note to       |
  | license@swoole.com so we can mail you a copy immediately.            |
  +----------------------------------------------------------------------+
  | Author: Tianfeng Han  <rango@swoole.com>                             |
  |         Twosee  <twose@qq.com>                                       |
  +----------------------------------------------------------------------+
*/

#ifndef SWOOLE_VERSION_H_
#define SWOOLE_VERSION_H_

#define SWOOLE_MAJOR_VERSION 6
#define SWOOLE_MINOR_VERSION 2
#define SWOOLE_RELEASE_VERSION 0
#define SWOOLE_EXTRA_VERSION ""
#define SWOOLE_VERSION "6.2.0"
#define SWOOLE_VERSION_ID 60200
#define SWOOLE_API_VERSION_ID 0x202208a

#define SWOOLE_BUG_REPORT                                                                                              \
    "A process crash occurred in Swoole-v" SWOOLE_VERSION ". Please report this issue.\n"                              \
    "You can refer to the documentation below, submit an issue to us on GitHub.\n"                                     \
    ">> https://github.com/swoole/swoole-src/blob/master/docs/ISSUE.md\n"
#endif
ext/swoole/include/swoole_client.h000064400000027376151730542050013337 0ustar00/*
  +----------------------------------------------------------------------+
  | Swoole                                                               |
  +----------------------------------------------------------------------+
  | This source file is subject to version 2.0 of the Apache license,    |
  | that is bundled with this package in the file LICENSE, and is        |
  | available through the world-wide-web at the following url:           |
  | http://www.apache.org/licenses/LICENSE-2.0.html                      |
  | If you did not receive a copy of the Apache2.0 license and are unable|
  | to obtain it through the world-wide-web, please send a note to       |
  | license@swoole.com so we can mail you a copy immediately.            |
  +----------------------------------------------------------------------+
  | Author: Tianfeng Han  <rango@swoole.com>                             |
  +----------------------------------------------------------------------+
*/

#pragma once

#include "swoole_string.h"
#include "swoole_socket.h"
#include "swoole_reactor.h"
#include "swoole_protocol.h"
#include "swoole_proxy.h"

namespace swoole {
namespace network {

class Client {
    int (*connect_)(Client *cli, const char *host, int port, double timeout, int sock_flag) = nullptr;
    ssize_t (*send_)(Client *cli, const char *data, size_t length, int flags) = nullptr;
    int (*sendfile_)(Client *cli, const char *filename, off_t offset, size_t length) = nullptr;
    ssize_t (*recv_)(Client *cli, char *data, size_t length, int flags) = nullptr;

  public:
    int id = 0;
    long timeout_id = 0;  // timeout node id
    int sock_type_ = 0;
    int sock_domain_ = 0;
    int sock_flags_ = 0;
    int protocol_ = 0;
    FdType fd_type;
    bool active = false;
    bool async = false;
    bool keep = false;
    bool http2 = false;
    bool sleep_ = false;
    bool wait_dns = false;
    bool dns_completed = false;
    bool host_preseted = false;
    bool shutdown_rw = false;
    bool shutdown_read = false;
    bool shutdown_write = false;
    bool remove_delay = false;
    bool closed = false;
    bool high_watermark = false;
    bool async_connect = false;
    bool onerror_called = false;

    /**
     * one package: length check
     */
    bool open_length_check = false;
    bool open_eof_check = false;

    Protocol protocol = {};
    std::unique_ptr<Socks5Proxy> socks5_proxy = nullptr;
    std::unique_ptr<HttpProxy> http_proxy = nullptr;

    uint32_t reuse_count = 0;

    std::string server_id;
    std::string server_host;
    int server_port = 0;
    void *ptr = nullptr;
    void *params = nullptr;

    TimerNode *timer = nullptr;

    /**
     * for connect()/sendto()
     */
    Address server_addr = {};
    /**
     * for recvfrom()
     */
    Address remote_addr = {};

    Socket *socket;

    void *object = nullptr;

    String *buffer = nullptr;
    uint32_t wait_length = 0;
    uint32_t input_buffer_size = 0;

    uint32_t buffer_high_watermark = 0;
    uint32_t buffer_low_watermark = 0;

    bool open_ssl = false;
    bool ssl_wait_handshake = false;
    std::shared_ptr<SSLContext> ssl_context = nullptr;

    std::function<void(Client *cli)> onConnect = nullptr;
    std::function<void(Client *cli)> onError = nullptr;
    std::function<void(Client *cli, const char *, size_t)> onReceive = nullptr;
    std::function<void(Client *cli)> onClose = nullptr;
    std::function<void(Client *cli)> onBufferFull = nullptr;
    std::function<void(Client *cli)> onBufferEmpty = nullptr;

    static void init_reactor(Reactor *reactor);
    Client(SocketType _type, bool async);
    ~Client();

    Socket *get_socket() const {
        return socket;
    }

    bool ready() const {
        return socket != nullptr;
    }

    SocketType get_socket_type() const {
        return socket->socket_type;
    }

    const std::string &get_http_proxy_host_name() const {
        if (ssl_context && !ssl_context->tls_host_name.empty()) {
            return ssl_context->tls_host_name;
        }
        return http_proxy->target_host;
    }

    int connect(const char *_host, int _port, double _timeout = -1, int _sock_flag = 0) {
        return connect_(this, _host, _port, _timeout, _sock_flag);
    }

    ssize_t send(const char *_data, size_t _length, int _flags = 0) {
        return send_(this, _data, _length, _flags);
    }

    int sendfile(const char *_filename, off_t _offset = 0, size_t _length = 0) {
        return sendfile_(this, _filename, _offset, _length);
    }

    ssize_t recv(char *_data, size_t _length, int _flags = 0) {
        return recv_(this, _data, _length, _flags);
    }

    int bind(const std::string &addr, int port) const;
    int sleep();
    int wakeup();
    int sendto(const std::string &host, int port, const char *data, size_t len) const;
    int get_peer_name(Address *addr) const;
    int shutdown(int _how = SHUT_RDWR);
    int close();
    bool socks5_handshake(const char *recv_data, size_t length);
    void set_timeout(double timeout, TimeoutType type = SW_TIMEOUT_ALL) const;
    bool has_timedout() const;
    void set_socks5_proxy(const std::string &host, int port, const std::string &user = "", const std::string &pwd = "");
    void set_http_proxy(const std::string &host, int port, const std::string &user = "", const std::string &pwd = "");

    int enable_ssl_encrypt();
#ifdef SW_SUPPORT_DTLS
    void enable_dtls();
#endif
    int ssl_handshake() const;
    int ssl_verify(int allow_self_signed) const;

    bool set_ssl_key_file(const std::string &file) const {
        return ssl_context->set_key_file(file);
    }

    bool set_ssl_cert_file(const std::string &file) const {
        return ssl_context->set_cert_file(file);
    }

    void set_ssl_cafile(const std::string &file) const {
        ssl_context->cafile = file;
    }

    void set_ssl_capath(const std::string &path) const {
        ssl_context->capath = path;
    }

    void set_ssl_passphrase(const std::string &str) const {
        ssl_context->passphrase = str;
    }

#ifdef SSL_CTRL_SET_TLSEXT_HOSTNAME
    void set_tls_host_name(const std::string &str) const {
        ssl_context->tls_host_name = str;
        // if user set empty ssl_host_name, disable it, otherwise the underlying may set it automatically
        ssl_context->disable_tls_host_name = ssl_context->tls_host_name.empty();
    }
#endif

    void set_ssl_dhparam(const std::string &file) const {
        ssl_context->dhparam = file;
    }

    void set_ssl_ecdh_curve(const std::string &str) const {
        ssl_context->ecdh_curve = str;
    }

    void set_ssl_protocols(long protocols) const {
        ssl_context->protocols = protocols;
    }

    void set_ssl_disable_compress(bool value) const {
        ssl_context->disable_compress = value;
    }

    void set_ssl_verify_peer(bool value) const {
        ssl_context->verify_peer = value;
    }

    void set_ssl_allow_self_signed(bool value) const {
        ssl_context->allow_self_signed = value;
    }

    void set_ssl_verify_depth(uint8_t value) const {
        ssl_context->verify_depth = value;
    }

    void set_ssl_ciphers(const std::string &str) const {
        ssl_context->ciphers = str;
    }

#ifdef OPENSSL_IS_BORINGSSL
    void set_ssl_grease(uint8_t value) const {
        ssl_context->grease = value;
    }
#endif

    const std::string &get_ssl_cert_file() const {
        return ssl_context->cert_file;
    }

    const std::string &get_ssl_key_file() const {
        return ssl_context->key_file;
    }
};

//----------------------------------------Stream---------------------------------------
class Stream {
  public:
    String *buffer = nullptr;
    Client client;
    bool connected = false;
    bool cancel = false;
    int errCode = 0;
    void *private_data = nullptr;
    void *private_data_2 = nullptr;
    long private_data_fd = -1;

    std::function<void(Stream *stream, const char *data, uint32_t length)> response = nullptr;

    int send(const char *data, size_t length);
    void set_max_length(uint32_t max_length);
    ~Stream();

    static Stream *create(const char *dst_host, int dst_port, SocketType type);
    static ssize_t recv_sync(Socket *sock, void *_buf, size_t _len);
    static void set_protocol(Protocol *protocol);

  private:
    Stream(const char *dst_host, int dst_port, SocketType type);
};
//----------------------------------------Stream End------------------------------------

class SyncClient {
  protected:
    Client client;
    bool connected = false;
    bool created;
    bool async = false;
    SocketType type;

  public:
    explicit SyncClient(SocketType _type, bool _async = false) : client(_type, _async), async(_async), type(_type) {
        created = client.socket != nullptr;
    }

    virtual bool connect(const char *host, int port, double timeout = -1) {
        if (connected || !created) {
            return false;
        }
        if (client.connect(host, port, timeout, client.socket->is_dgram()) < 0) {
            return false;
        }
        connected = true;
        return true;
    }

    void set_stream_protocol() {
        client.open_length_check = true;
        Stream::set_protocol(&client.protocol);
    }

    void set_package_max_length(uint32_t max_length) {
        client.protocol.package_max_length = max_length;
    }

    bool enable_ssl_encrypt() {
        if (client.enable_ssl_encrypt() < 0) {
            return false;
        }
        if (connected) {
            return client.ssl_handshake() == SW_OK;
        } else {
            return true;
        }
    }

    ssize_t send(const std::string &data) {
        return client.send(data.c_str(), data.length(), 0);
    }

    ssize_t send(const char *buf, size_t len) {
        return client.send(buf, len, 0);
    }

    bool sendfile(const char *filename, off_t offset = 0, size_t length = 0) {
        return client.sendfile(filename, offset, length) == SW_OK;
    }

    ssize_t recv(char *buf, size_t len, int flags = 0) {
        return client.recv(buf, len, flags);
    }

    bool close() {
        if (!created || client.closed) {
            return false;
        }
        client.close();
        created = false;
        return true;
    }

    Client *get_client() {
        return &client;
    }

    virtual ~SyncClient() {
        if (created) {
            close();
        }
    }
};

class AsyncClient : public SyncClient {
  protected:
    std::function<void(AsyncClient *)> _onConnect = nullptr;
    std::function<void(AsyncClient *)> _onError = nullptr;
    std::function<void(AsyncClient *)> _onClose = nullptr;
    std::function<void(AsyncClient *, const char *data, size_t length)> _onReceive = nullptr;

  public:
    explicit AsyncClient(SocketType _type) : SyncClient(_type, true) {}

    bool connect(const char *host, int port, double timeout = -1) override {
        client.object = this;
        client.onConnect = [](Client *cli) {
            auto *ac = (AsyncClient *) cli->object;
            ac->_onConnect(ac);
        };
        client.onError = [](Client *cli) {
            auto *ac = (AsyncClient *) cli->object;
            ac->_onError(ac);
        };
        client.onClose = [](Client *cli) {
            auto *ac = (AsyncClient *) cli->object;
            ac->_onClose(ac);
        };
        client.onReceive = [](Client *cli, const char *data, size_t length) {
            auto *ac = (AsyncClient *) cli->object;
            ac->_onReceive(ac, data, length);
        };
        return SyncClient::connect(host, port, timeout);
    }

    void on_connect(const std::function<void(AsyncClient *)> &fn) {
        _onConnect = fn;
    }

    void on_error(const std::function<void(AsyncClient *)> &fn) {
        _onError = fn;
    }

    void on_close(const std::function<void(AsyncClient *)> &fn) {
        _onClose = fn;
    }

    void on_receive(const std::function<void(AsyncClient *, const char *data, size_t length)> &fn) {
        _onReceive = fn;
    }
};

}  // namespace network
}  // namespace swoole
ext/swoole/ext-src/php_swoole_coroutine.h000064400000023547151730542060014676 0ustar00/*
  +----------------------------------------------------------------------+
  | Swoole                                                               |
  +----------------------------------------------------------------------+
  | This source file is subject to version 2.0 of the Apache license,    |
  | that is bundled with this package in the file LICENSE, and is        |
  | available through the world-wide-web at the following url:           |
  | http://www.apache.org/licenses/LICENSE-2.0.html                      |
  | If you did not receive a copy of the Apache2.0 license and are unable|
  | to obtain it through the world-wide-web, please send a note to       |
  | license@swoole.com so we can mail you a copy immediately.            |
  +----------------------------------------------------------------------+
  | Author: Xinyu Zhu  <xyzhu1120@gmail.com>                             |
  |         shiguangqi <shiguangqi2008@gmail.com>                        |
  |         Twosee  <twose@qq.com>                                       |
  |         Tianfeng Han  <rango@swoole.com>                             |
  +----------------------------------------------------------------------+
 */

#pragma once

#include "swoole_coroutine.h"
#include "swoole_coroutine_system.h"

#include "zend_vm.h"
#include "zend_closures.h"

#include "zend_fibers.h"
#include "zend_observer.h"

#include <stack>
#include <thread>

#define SW_DEFAULT_MAX_CORO_NUM 100000
#define SW_DEFAULT_PHP_STACK_PAGE_SIZE 8192

#define SWOG ((zend_output_globals *) &OG(handlers))

SW_EXTERN_C_BEGIN
PHP_METHOD(swoole_coroutine_scheduler, set);
PHP_METHOD(swoole_coroutine_scheduler, getOptions);
SW_EXTERN_C_END

namespace zend {
struct Function;
}

namespace swoole {

struct PHPContext {
    typedef std::function<void(PHPContext *)> SwapCallback;

    JMP_BUF *bailout;
    zval *vm_stack_top;
    zval *vm_stack_end;
    zend_vm_stack vm_stack;
    size_t vm_stack_page_size;
    zend_execute_data *execute_data;
    uint32_t jit_trace_num;
    zend_error_handling_t error_handling;
    zend_class_entry *exception_class;
    zend_object *exception;
    zend_output_globals *output_ptr;
    /*
     * for var serialize/unserialize,
     * coroutine switching may occur in the __sleep/__wakeup magic method of the object
     */
    unsigned serialize_lock;
    struct {
        struct php_serialize_data *data;
        unsigned level;
    } serialize;
    struct {
        struct php_unserialize_data *data;
        unsigned level;
    } unserialize;
    /* for error control `@` */
    bool in_silence;
    bool enable_scheduler;
    int ori_error_reporting;
    int tmp_error_reporting;
    Coroutine *co;
    zend_fcall_info fci;
    zend_fcall_info_cache fci_cache;
    zval return_value;
    zend_fiber_context *fiber_context;
    bool fiber_init_notified;
#ifdef ZEND_CHECK_STACK_LIMIT
    void *stack_base;
    void *stack_limit;
#endif
    std::stack<zend::Function *> *defer_tasks;
    SwapCallback *on_yield;
    SwapCallback *on_resume;
    SwapCallback *on_close;
    long pcid;
    zend_object *context;
    int64_t last_msec;
    size_t switch_count;
};

class PHPCoroutine {
  public:
    struct Args {
        zend_fcall_info_cache *fci_cache;
        zval *argv;
        uint32_t argc;
        zval *callable;
    };

    struct Config {
        uint64_t max_num;
        uint32_t hook_flags;
        bool enable_preemptive_scheduler;
        bool enable_deadlock_check;
    };

    static SW_THREAD_LOCAL zend_array *options;

    enum HookType {
        HOOK_NONE = 0,
        HOOK_TCP = 1u << 1,
        HOOK_UDP = 1u << 2,
        HOOK_UNIX = 1u << 3,
        HOOK_UDG = 1u << 4,
        HOOK_SSL = 1u << 5,
        HOOK_TLS = 1u << 6,
        HOOK_STREAM_FUNCTION = 1u << 7,
        HOOK_FILE = 1u << 8,
        HOOK_SLEEP = 1u << 9,
        HOOK_PROC = 1u << 10,
        HOOK_CURL = 1u << 11,
        HOOK_NATIVE_CURL = 1u << 12,
        HOOK_SOCKETS = 1u << 14,
        HOOK_STDIO = 1u << 15,
        HOOK_PDO_PGSQL = 1u << 16,
        HOOK_PDO_ODBC = 1u << 17,
        HOOK_PDO_ORACLE = 1u << 18,
        HOOK_PDO_SQLITE = 1u << 19,
        HOOK_PDO_FIREBIRD = 1u << 20,
        HOOK_NET_FUNCTION = 1u << 21,
        HOOK_MONGODB = 1u << 22,
#ifdef SW_USE_CURL
        HOOK_ALL = 0x7fffffff & ~HOOK_CURL & ~HOOK_MONGODB,
#else
        HOOK_ALL = 0x7fffffff & ~HOOK_NATIVE_CURL & ~HOOK_MONGODB,
#endif
    };

    static const uint8_t MAX_EXEC_MSEC = 10;
    static void shutdown();
    static long create(zend_fcall_info_cache *fci_cache, uint32_t argc, zval *argv, zval *callable);
    static PHPContext *create_context(const Args *args);
    static void defer(zend::Function *fci);
    static void deadlock_check();
    static bool enable_hook(uint32_t flags);
    static bool disable_hook();
    static void disable_unsafe_function();
    static void enable_unsafe_function();
    static void interrupt_thread_stop();

    static inline long get_cid() {
        return sw_likely(activated) ? Coroutine::get_current_cid() : -1;
    }

    static inline long get_pcid(long cid = 0) {
        PHPContext *ctx = cid == 0 ? get_context() : get_context_by_cid(cid);
        return sw_likely(ctx) ? ctx->pcid : 0;
    }

    static inline long get_elapsed(long cid = 0) {
        return sw_likely(activated) ? Coroutine::get_elapsed(cid) : -1;
    }

    static inline PHPContext *get_context() {
        PHPContext *ctx = (PHPContext *) Coroutine::get_current_task();
        return ctx ? ctx : &main_context;
    }

    static inline PHPContext *get_origin_context(PHPContext *ctx) {
        Coroutine *co = ctx->co->get_origin();
        return co ? (PHPContext *) co->get_task() : &main_context;
    }

    static inline PHPContext *get_context_by_cid(long cid) {
        return cid == -1 ? &main_context : (PHPContext *) Coroutine::get_task_by_cid(cid);
    }

    static inline ssize_t get_stack_usage(long cid) {
        zend_long current_cid = PHPCoroutine::get_cid();
        if (cid == 0) {
            cid = current_cid;
        }
        PHPContext *ctx = (PHPContext *) PHPCoroutine::get_context_by_cid(cid);
        if (UNEXPECTED(!ctx)) {
            swoole_set_last_error(SW_ERROR_CO_NOT_EXISTS);
            return -1;
        }
        zend_vm_stack stack = cid == current_cid ? EG(vm_stack) : ctx->vm_stack;
        size_t usage = 0;

        while (stack) {
            usage += (stack->end - stack->top) * sizeof(zval);
            stack = stack->prev;
        }
        return usage;
    }

    static inline uint64_t get_max_num() {
        return config.max_num;
    }

    static inline void set_max_num(uint64_t n) {
        config.max_num = n;
    }

    static inline void set_deadlock_check(bool value = true) {
        config.enable_deadlock_check = value;
    }

    static inline bool is_schedulable(PHPContext *ctx) {
        return ctx->enable_scheduler && (Timer::get_absolute_msec() - ctx->last_msec > MAX_EXEC_MSEC);
    }

    static inline bool enable_scheduler() {
        PHPContext *ctx = (PHPContext *) Coroutine::get_current_task();
        if (ctx && !ctx->enable_scheduler) {
            ctx->enable_scheduler = true;
            return true;
        }
        return false;
    }

    static inline bool disable_scheduler() {
        PHPContext *ctx = (PHPContext *) Coroutine::get_current_task();
        if (ctx && ctx->enable_scheduler) {
            ctx->enable_scheduler = false;
            return true;
        }
        return false;
    }

    static void set_hook_flags(uint32_t flags);

    static inline uint32_t get_hook_flags() {
        return config.hook_flags;
    }

    static inline void enable_preemptive_scheduler(bool value) {
        config.enable_preemptive_scheduler = value;
    }

    static inline bool is_activated() {
        return activated;
    }

    static inline long get_execute_time(long cid = 0) {
        return sw_likely(activated) ? Coroutine::get_execute_time(cid) : -1;
    }

    static inline void init_main_context() {
        main_context.co = nullptr;
        main_context.fiber_context = EG(main_fiber_context);
        main_context.fiber_init_notified = true;
        save_context(&main_context);
    }

    static inline void free_main_context() {
        main_context = {};
    }

  protected:
    static SW_THREAD_LOCAL bool activated;
    static SW_THREAD_LOCAL PHPContext main_context;
    static SW_THREAD_LOCAL Config config;

    static SW_THREAD_LOCAL bool interrupt_thread_running;
    static SW_THREAD_LOCAL std::thread interrupt_thread;

    static void activate();
    static void deactivate(void *ptr);

    static void save_vm_stack(PHPContext *ctx);
    static void restore_vm_stack(PHPContext *ctx);
    static void save_og(PHPContext *ctx);
    static void restore_og(PHPContext *ctx);
    static void save_bg(PHPContext *ctx);
    static void restore_bg(PHPContext *ctx);
    static void save_context(PHPContext *ctx);
    static void restore_context(PHPContext *ctx);
    static void destroy_context(PHPContext *ctx);
    static bool catch_exception();
    static void bailout();
    static void on_yield(void *arg);
    static void on_resume(void *arg);
    static void on_close(void *arg);
    static void main_func(void *arg);
    static zend_fiber_status fiber_get_status(const PHPContext *ctx);
    static void fiber_context_init(PHPContext *ctx);
    static void fiber_context_try_destroy(const PHPContext *ctx, PHPContext *origin_ctx);
    static void fiber_context_switch_notify(const PHPContext *from, PHPContext *to);
    static void fiber_context_switch_try_notify(const PHPContext *from, PHPContext *to);
#ifdef ZEND_CHECK_STACK_LIMIT
    static void *stack_limit(PHPContext *ctx);
    static void *stack_base(PHPContext *ctx);
#endif
    static void interrupt_thread_start();
    static void record_last_msec(PHPContext *ctx) {
        if (interrupt_thread_running) {
            ctx->last_msec = Timer::get_absolute_msec();
        }
    }
};
}  // namespace swoole

/**
 * for gdb
 */
zend_executor_globals *php_swoole_get_executor_globals();
ext/swoole/ext-src/php_swoole_pgsql.h000064400000005063151730542060014006 0ustar00/*
  +----------------------------------------------------------------------+
  | Swoole                                                               |
  +----------------------------------------------------------------------+
  | This source file is subject to version 2.0 of the Apache license,    |
  | that is bundled with this package in the file LICENSE, and is        |
  | available through the world-wide-web at the following url:           |
  | http://www.apache.org/licenses/LICENSE-2.0.html                      |
  | If you did not receive a copy of the Apache2.0 license and are unable|
  | to obtain it through the world-wide-web, please send a note to       |
  | license@swoole.com so we can mail you a copy immediately.            |
  +----------------------------------------------------------------------+
  | Author: Tianfeng Han  <rango@swoole.com>                             |
  +----------------------------------------------------------------------+
*/

#ifndef PHP_SWOOLE_PGSQL_H
#define PHP_SWOOLE_PGSQL_H

#include "php_swoole.h"

#ifdef SW_USE_PGSQL

BEGIN_EXTERN_C()

#include "ext/pdo/php_pdo_driver.h"

#if PHP_VERSION_ID < 80300
#include "thirdparty/php82/pdo_pgsql/php_pdo_pgsql_int.h"
#elif PHP_VERSION_ID >= 80300 && PHP_VERSION_ID < 80400
#include "thirdparty/php83/pdo_pgsql/php_pdo_pgsql_int.h"
#elif PHP_VERSION_ID >= 80400 && PHP_VERSION_ID < 80500
#include "thirdparty/php84/pdo_pgsql/php_pdo_pgsql_int.h"
#else
#include "thirdparty/php85/pdo_pgsql/php_pdo_pgsql_int.h"
#endif


extern const pdo_driver_t swoole_pdo_pgsql_driver;

#include <libpq-fe.h>
#include <libpq/libpq-fs.h>

void swoole_pgsql_set_blocking(bool blocking);

PGconn *swoole_pgsql_connectdb(const char *conninfo);
PGresult *swoole_pgsql_prepare(PGconn *conn, const char *stmt_name, const char *query, int n_params, const Oid *param_types);
PGresult *swoole_pgsql_exec_prepared(PGconn *conn, const char *stmt_name, int n_params,
    const char *const *param_values, const int *param_lengths, const int *param_formats, int result_format);
PGresult *swoole_pgsql_exec(PGconn *conn, const char *query);
PGresult *swoole_pgsql_exec_params(PGconn *conn, const char *command, int n_params,
    const Oid *param_types, const char *const *param_values, const int *param_lengths, const int *param_formats, int result_format);

#ifdef SW_USE_PGSQL_HOOK
#define PQconnectdb  swoole_pgsql_connectdb
#define PQprepare  swoole_pgsql_prepare
#define PQexecPrepared  swoole_pgsql_exec_prepared
#define PQexec  swoole_pgsql_exec
#define PQexecParams  swoole_pgsql_exec_params
#endif

END_EXTERN_C()

#endif
#endif
ext/swoole/ext-src/php_swoole_oracle.h000064400000005743151730542070014133 0ustar00/*
  +----------------------------------------------------------------------+
  | Swoole                                                               |
  +----------------------------------------------------------------------+
  | Copyright (c) 2012-2018 The Swoole Group                             |
  +----------------------------------------------------------------------+
  | This source file is subject to version 2.0 of the Apache license,    |
  | that is bundled with this package in the file LICENSE, and is        |
  | available through the world-wide-web at the following url:           |
  | http://www.apache.org/licenses/LICENSE-2.0.html                      |
  | If you did not receive a copy of the Apache2.0 license and are unable|
  | to obtain it through the world-wide-web, please send a note to       |
  | license@swoole.com so we can mail you a copy immediately.            |
  +----------------------------------------------------------------------+
  | Author: NathanFreeman  <mariasocute@163.com>                         |
  +----------------------------------------------------------------------+
*/

#ifndef PHP_SWOOLE_ORACLE_H
#define PHP_SWOOLE_ORACLE_H

#include "php_swoole.h"

#ifdef SW_USE_ORACLE

BEGIN_EXTERN_C()

#include "ext/pdo/php_pdo_driver.h"

#include "thirdparty/pdo_oci/php_pdo_oci_int.h"

extern const pdo_driver_t swoole_pdo_oci_driver;

void swoole_oracle_set_blocking(bool blocking);
sword swoole_oci_session_begin(OCISvcCtx *svchp, OCIError *errhp, OCISession *usrhp, ub4 credt, ub4 mode);
sword swoole_oci_server_detach(OCIServer *srvhp, OCIError *errhp, ub4 mode);
sword swoole_oci_stmt_prepare(
    OCIStmt *stmtp, OCIError *errhp, const OraText *stmt, ub4 stmt_len, ub4 language, ub4 mode);
sword swoole_oci_stmt_execute(OCISvcCtx *svchp,
                              OCIStmt *stmtp,
                              OCIError *errhp,
                              ub4 iters,
                              ub4 rowoff,
                              const OCISnapshot *snap_in,
                              OCISnapshot *snap_out,
                              ub4 mode);
sword swoole_oci_stmt_fetch(OCIStmt *stmtp, OCIError *errhp, ub4 nrows, ub2 orientation, ub4 mode);
sword swoole_oci_stmt_fetch2(OCIStmt *stmtp, OCIError *errhp, ub4 nrows, ub2 orientation, sb4 scrollOffset, ub4 mode);
sword swoole_oci_trans_commit(OCISvcCtx *svchp, OCIError *errhp, ub4 flags);
sword swoole_oci_trans_rollback(OCISvcCtx *svchp, OCIError *errhp, ub4 flags);
sword swoole_oci_ping(OCISvcCtx *svchp, OCIError *errhp, ub4 mode);

#ifdef SW_USE_ORACLE_HOOK
#define OCISessionBegin swoole_oci_session_begin
#define OCIServerDetach swoole_oci_server_detach
#define OCIStmtPrepare swoole_oci_stmt_prepare
#define OCIStmtExecute swoole_oci_stmt_execute
#define OCIStmtFetch swoole_oci_stmt_fetch
#define OCIStmtFetch2 swoole_oci_stmt_fetch2
#define OCITransCommit swoole_oci_trans_commit
#define OCITransRollback swoole_oci_trans_rollback
#define OCIPing swoole_oci_ping
#endif

END_EXTERN_C()
#endif
#endif
ext/swoole/ext-src/php_swoole_ssh2.h000064400000004474151730542070013545 0ustar00#pragma once

#include "php_swoole_cxx.h"
#include "php_swoole_ssh2_def.h"

#include <libssh2.h>
#include <libssh2_sftp.h>
#include <libssh2_publickey.h>

typedef struct _php_ssh2_session_data {
    /* Userspace callback functions */
    zval *ignore_cb;
    zval *debug_cb;
    zval *macerror_cb;
    zval *disconnect_cb;

    SocketImpl *socket;
} php_ssh2_session_data;

static inline swoole::EventType ssh2_get_event_type(LIBSSH2_SESSION *session) {
    int dir = libssh2_session_block_directions(session);
    if (dir & LIBSSH2_SESSION_BLOCK_OUTBOUND) {
        return SW_EVENT_WRITE;
    } else {
        return SW_EVENT_READ;
    }
}

static inline SocketImpl *ssh2_get_socket(LIBSSH2_SESSION *session) {
    auto session_data = (php_ssh2_session_data **) libssh2_session_abstract(session);
    return (*session_data)->socket;
}

static inline void ssh2_set_socket_timeout(LIBSSH2_SESSION *session, int timeout_ms) {
    auto sock = ssh2_get_socket(session);
    sock->set_timeout(timeout_ms / 1000, SW_TIMEOUT_ALL);
}

class ResourceGuard {
    zval zres_;

  public:
    ResourceGuard(zval *zres) {
        zval_addref_p(zres);
        zres_ = *zres;
    }
    ~ResourceGuard() {
        zval_ptr_dtor(&zres_);
    }
};

static inline int ssh2_async_call(LIBSSH2_SESSION *session, const std::function<int(void)> &fn) {
    auto event = ssh2_get_event_type(session);
    auto socket = ssh2_get_socket(session);

    socket->check_bound_co(SW_EVENT_READ);
    socket->check_bound_co(SW_EVENT_WRITE);

    int rc = 0;
    while (1) {
        rc = fn();
        if (rc == LIBSSH2_ERROR_EAGAIN) {
            if (!socket->poll(event)) {
                return LIBSSH2_ERROR_SOCKET_NONE;
            }
            continue;
        }
        break;
    }
    return rc;
}

template <typename T>
static inline T *ssh2_async_call_ex(LIBSSH2_SESSION *session, const std::function<T *(void)> &fn) {
    auto event = ssh2_get_event_type(session);
    auto socket = ssh2_get_socket(session);

    socket->check_bound_co(SW_EVENT_READ);
    socket->check_bound_co(SW_EVENT_WRITE);

    T *handle;
    while (1) {
        handle = fn();
        if (handle) {
            return handle;
        }
        if (libssh2_session_last_errno(session) == LIBSSH2_ERROR_EAGAIN && socket->poll(event)) {
            continue;
        }
        break;
    }
    return nullptr;
}
ext/swoole/ext-src/php_swoole_process.h000064400000003027151730542070014335 0ustar00/*
  +----------------------------------------------------------------------+
  | Swoole                                                               |
  +----------------------------------------------------------------------+
  | This source file is subject to version 2.0 of the Apache license,    |
  | that is bundled with this package in the file LICENSE, and is        |
  | available through the world-wide-web at the following url:           |
  | http://www.apache.org/licenses/LICENSE-2.0.html                      |
  | If you did not receive a copy of the Apache2.0 license and are unable|
  | to obtain it through the world-wide-web, please send a note to       |
  | license@php.net so we can mail you a copy immediately.               |
  +----------------------------------------------------------------------+
  | Author: Twosee  <twose@qq.com>                                       |
  | Author: Tianfeng Han  <rango@swoole.com>                             |
  +----------------------------------------------------------------------+
*/

#pragma once

#include "php_swoole_cxx.h"
#include "swoole_process_pool.h"

enum PipeType {
    PIPE_TYPE_NONE = 0,
    PIPE_TYPE_STREAM = 1,
    PIPE_TYPE_DGRAM = 2,
};

void php_swoole_process_clean();
int php_swoole_process_start(swoole::Worker *process, zval *zobject);
swoole::Worker *php_swoole_process_get_worker(const zval *zobject);
void php_swoole_process_set_worker(const zval *zobject, swoole::Worker *worker, bool enable_coroutine, int pipe_type);

swoole::ProcessPool *sw_process_pool();
ext/swoole/ext-src/php_swoole_library.h000064400001523023151730542100014321 0ustar00/**
 * -----------------------------------------------------------------------
 * Generated by build-library.php, Please DO NOT modify!
  +----------------------------------------------------------------------+
  | Swoole                                                               |
  +----------------------------------------------------------------------+
  | This source file is subject to version 2.0 of the Apache license,    |
  | that is bundled with this package in the file LICENSE, and is        |
  | available through the world-wide-web at the following url:           |
  | http://www.apache.org/licenses/LICENSE-2.0.html                      |
  | If you did not receive a copy of the Apache2.0 license and are unable|
  | to obtain it through the world-wide-web, please send a note to       |
  | license@swoole.com so we can mail you a copy immediately.            |
  +----------------------------------------------------------------------+
 */

/* $Id: 54ad6d15fb4330384673e6d6a8317c46d0ca78a3 */

#ifndef SWOOLE_LIBRARY_H
#define SWOOLE_LIBRARY_H

#if PHP_VERSION_ID < 80000
typedef zval zend_source_string_t;
#else
typedef zend_string zend_source_string_t;
#endif

#if PHP_VERSION_ID < 80200
#define ZEND_COMPILE_POSITION_DC
#define ZEND_COMPILE_POSITION_RELAY_C
#else
#define ZEND_COMPILE_POSITION_DC , zend_compile_position position
#define ZEND_COMPILE_POSITION_RELAY_C , position
#endif

#if PHP_VERSION_ID < 80000
#define ZEND_STR_CONST
#else
#define ZEND_STR_CONST const
#endif


static zend_op_array *(*old_compile_string)(zend_source_string_t *source_string, ZEND_STR_CONST char *filename ZEND_COMPILE_POSITION_DC);

static inline zend_op_array *_compile_string(zend_source_string_t *source_string, ZEND_STR_CONST char *filename ZEND_COMPILE_POSITION_DC) {
    if (UNEXPECTED(EG(exception))) {
        zend_exception_error(EG(exception), E_ERROR);
        return NULL;
    }
    zend_op_array *opa = old_compile_string(source_string, filename ZEND_COMPILE_POSITION_RELAY_C);
    opa->type = ZEND_USER_FUNCTION;
    return opa;
}

static inline zend_bool _eval(const char *code, const char *filename) {
    if (!old_compile_string) {
        old_compile_string = zend_compile_string;
    }
    // overwrite
    zend_compile_string = _compile_string;
    int ret = (zend_eval_stringl((char *) code, strlen(code), NULL, (char *) filename) == SUCCESS);
    // recover
    zend_compile_string = old_compile_string;
    return ret;
}

#endif

static const char* swoole_library_source_constants =
    "\n"
    "/**\n"
    " * This file is part of Swoole.\n"
    " *\n"
    " * @link     https://www.swoole.com\n"
    " * @contact  team@swoole.com\n"
    " * @license  https://github.com/swoole/library/blob/master/LICENSE\n"
    " */\n"
    "\n"
    "declare(strict_types=1);\n"
    "\n"
    "define('SWOOLE_LIBRARY', true);\n"
    "\n"
    "!defined('CURLOPT_HEADEROPT') && define('CURLOPT_HEADEROPT', 229);\n"
    "!defined('CURLOPT_PROXYHEADER') && define('CURLOPT_PROXYHEADER', 10228);\n"
    "!defined('CURLOPT_RESOLVE') && define('CURLOPT_RESOLVE', 10203);\n"
    "!defined('CURLOPT_UNIX_SOCKET_PATH') && define('CURLOPT_UNIX_SOCKET_PATH', 10231);\n";

static const char* swoole_library_source_std_exec =
    "\n"
    "/**\n"
    " * This file is part of Swoole.\n"
    " *\n"
    " * @link     https://www.swoole.com\n"
    " * @contact  team@swoole.com\n"
    " * @license  https://github.com/swoole/library/blob/master/LICENSE\n"
    " */\n"
    "\n"
    "declare(strict_types=1);\n"
    "\n"
    "use Swoole\\Coroutine\\System;\n"
    "\n"
    "function swoole_exec(string $command, &$output = null, &$returnVar = null)\n"
    "{\n"
    "    $result = System::exec($command);\n"
    "    if ($result) {\n"
    "        $outputList = explode(PHP_EOL, $result['output']);\n"
    "        foreach ($outputList as &$value) {\n"
    "            $value = rtrim($value);\n"
    "        }\n"
    "        if (($endLine = end($outputList)) === '') {\n"
    "            array_pop($outputList);\n"
    "            $endLine = end($outputList);\n"
    "        }\n"
    "        if ($output) {\n"
    "            $output = array_merge($output, $outputList);\n"
    "        } else {\n"
    "            $output = $outputList;\n"
    "        }\n"
    "        $returnVar = $result['code'];\n"
    "        return $endLine;\n"
    "    }\n"
    "    return false;\n"
    "}\n"
    "\n"
    "function swoole_shell_exec(string $cmd)\n"
    "{\n"
    "    $result = System::exec($cmd);\n"
    "    if ($result && $result['output'] !== '') {\n"
    "        return $result['output'];\n"
    "    }\n"
    "    return null;\n"
    "}\n";

static const char* swoole_library_source_core_constant =
    "\n"
    "/**\n"
    " * This file is part of Swoole.\n"
    " *\n"
    " * @link     https://www.swoole.com\n"
    " * @contact  team@swoole.com\n"
    " * @license  https://github.com/swoole/library/blob/master/LICENSE\n"
    " */\n"
    "\n"
    "declare(strict_types=1);\n"
    "\n"
    "namespace Swoole;\n"
    "\n"
    "class Constant\n"
    "{\n"
    "    /* {{{ EVENT */\n"
    "    public const EVENT_START = 'start';\n"
    "\n"
    "    public const EVENT_BEFORE_SHUTDOWN = 'beforeShutdown';\n"
    "\n"
    "    public const EVENT_SHUTDOWN = 'shutdown';\n"
    "\n"
    "    public const EVENT_WORKER_START = 'workerStart';\n"
    "\n"
    "    public const EVENT_WORKER_STOP = 'workerStop';\n"
    "\n"
    "    public const EVENT_BEFORE_RELOAD = 'beforeReload';\n"
    "\n"
    "    public const EVENT_AFTER_RELOAD = 'afterReload';\n"
    "\n"
    "    public const EVENT_TASK = 'task';\n"
    "\n"
    "    public const EVENT_FINISH = 'finish';\n"
    "\n"
    "    public const EVENT_WORKER_EXIT = 'workerExit';\n"
    "\n"
    "    public const EVENT_WORKER_ERROR = 'workerError';\n"
    "\n"
    "    public const EVENT_MANAGER_START = 'managerStart';\n"
    "\n"
    "    public const EVENT_MANAGER_STOP = 'managerStop';\n"
    "\n"
    "    public const EVENT_PIPE_MESSAGE = 'pipeMessage';\n"
    "\n"
    "    public const EVENT_CONNECT = 'connect';\n"
    "\n"
    "    public const EVENT_RECEIVE = 'receive';\n"
    "\n"
    "    public const EVENT_CLOSE = 'close';\n"
    "\n"
    "    public const EVENT_PACKET = 'packet';\n"
    "\n"
    "    public const EVENT_BUFFER_FULL = 'bufferFull';\n"
    "\n"
    "    public const EVENT_BUFFER_EMPTY = 'bufferEmpty';\n"
    "\n"
    "    public const EVENT_REQUEST = 'request';\n"
    "\n"
    "    public const EVENT_HANDSHAKE = 'handshake';\n"
    "\n"
    "    public const EVENT_BEFORE_HANDSHAKE_RESPONSE = 'beforeHandshakeResponse';\n"
    "\n"
    "    public const EVENT_OPEN = 'open';\n"
    "\n"
    "    public const EVENT_MESSAGE = 'message';\n"
    "\n"
    "    public const EVENT_DISCONNECT = 'disconnect';\n"
    "\n"
    "    /* }}} EVENT */\n"
    "\n"
    "    public const EVENT_ERROR = 'error';\n"
    "\n"
    "    /* {{{ OPTION */\n"
    "    public const OPTION_DEBUG_MODE = 'debug_mode';\n"
    "\n"
    "    public const OPTION_TRACE_FLAGS = 'trace_flags';\n"
    "\n"
    "    public const OPTION_LOG_FILE = 'log_file';\n"
    "\n"
    "    public const OPTION_LOG_LEVEL = 'log_level';\n"
    "\n"
    "    public const OPTION_LOG_DATE_FORMAT = 'log_date_format';\n"
    "\n"
    "    public const OPTION_LOG_DATE_WITH_MICROSECONDS = 'log_date_with_microseconds';\n"
    "\n"
    "    public const OPTION_LOG_ROTATION = 'log_rotation';\n"
    "\n"
    "    public const OPTION_DISPLAY_ERRORS = 'display_errors';\n"
    "\n"
    "    public const OPTION_DNS_SERVER = 'dns_server';\n"
    "\n"
    "    /**\n"
    "     * Socket DNS timeout in seconds.\n"
    "     */\n"
    "    public const OPTION_SOCKET_DNS_TIMEOUT = 'socket_dns_timeout';\n"
    "\n"
    "    /**\n"
    "     * Default socket connect timeout in seconds.\n"
    "     */\n"
    "    public const OPTION_SOCKET_CONNECT_TIMEOUT = 'socket_connect_timeout';\n"
    "\n"
    "    /**\n"
    "     * Default socket write timeout in seconds.\n"
    "     *\n"
    "     * This one works the same as option \"socket_send_timeout\", but has higher priority.\n"
    "     *\n"
    "     * @see Constant::OPTION_SOCKET_SEND_TIMEOUT\n"
    "     */\n"
    "    public const OPTION_SOCKET_WRITE_TIMEOUT = 'socket_write_timeout';\n"
    "\n"
    "    /**\n"
    "     * Default socket write timeout in seconds.\n"
    "     *\n"
    "     * This one works the same as option \"socket_write_timeout\", but has lower priority.\n"
    "     *\n"
    "     * @see Constant::OPTION_SOCKET_WRITE_TIMEOUT\n"
    "     */\n"
    "    public const OPTION_SOCKET_SEND_TIMEOUT = 'socket_send_timeout';\n"
    "\n"
    "    /**\n"
    "     * Default socket read timeout in seconds.\n"
    "     *\n"
    "     * This one works the same as option \"socket_recv_timeout\", but has higher priority.\n"
    "     *\n"
    "     * @see Constant::OPTION_SOCKET_RECV_TIMEOUT\n"
    "     */\n"
    "    public const OPTION_SOCKET_READ_TIMEOUT = 'socket_read_timeout';\n"
    "\n"
    "    /**\n"
    "     * Default socket read timeout in seconds.\n"
    "     *\n"
    "     * This one works the same as option \"socket_read_timeout\", but has lower priority.\n"
    "     *\n"
    "     * @see Constant::OPTION_SOCKET_READ_TIMEOUT\n"
    "     */\n"
    "    public const OPTION_SOCKET_RECV_TIMEOUT = 'socket_recv_timeout';\n"
    "\n"
    "    /**\n"
    "     * Default socket read/write timeout in seconds.\n"
    "     *\n"
    "     * This one has the highest priority than the other read/write timeout options:\n"
    "     * - Constant::OPTION_SOCKET_WRITE_TIMEOUT\n"
    "     * - Constant::OPTION_SOCKET_SEND_TIMEOUT\n"
    "     * - Constant::OPTION_SOCKET_READ_TIMEOUT\n"
    "     * - Constant::OPTION_SOCKET_RECV_TIMEOUT\n"
    "     *\n"
    "     * @see Constant::OPTION_SOCKET_SEND_TIMEOUT\n"
    "     * @see Constant::OPTION_SOCKET_WRITE_TIMEOUT\n"
    "     * @see Constant::OPTION_SOCKET_RECV_TIMEOUT\n"
    "     * @see Constant::OPTION_SOCKET_READ_TIMEOUT\n"
    "     */\n"
    "    public const OPTION_SOCKET_TIMEOUT = 'socket_timeout';\n"
    "\n"
    "    public const OPTION_SOCKET_BUFFER_SIZE = 'socket_buffer_size';\n"
    "\n"
    "    public const OPTION_HTTP2_HEADER_TABLE_SIZE = 'http2_header_table_size';\n"
    "\n"
    "    public const OPTION_HTTP2_ENABLE_PUSH = 'http2_enable_push';\n"
    "\n"
    "    public const OPTION_HTTP2_MAX_CONCURRENT_STREAMS = 'http2_max_concurrent_streams';\n"
    "\n"
    "    public const OPTION_HTTP2_INIT_WINDOW_SIZE = 'http2_init_window_size';\n"
    "\n"
    "    public const OPTION_HTTP2_MAX_FRAME_SIZE = 'http2_max_frame_size';\n"
    "\n"
    "    public const OPTION_HTTP2_MAX_HEADER_LIST_SIZE = 'http2_max_header_list_size';\n"
    "\n"
    "    public const OPTION_AIO_CORE_WORKER_NUM = 'aio_core_worker_num';\n"
    "\n"
    "    public const OPTION_AIO_WORKER_NUM = 'aio_worker_num';\n"
    "\n"
    "    public const OPTION_AIO_MAX_WAIT_TIME = 'aio_max_wait_time';\n"
    "\n"
    "    public const OPTION_AIO_MAX_IDLE_TIME = 'aio_max_idle_time';\n"
    "\n"
    "    /**\n"
    "     * @since 6.0.0-beta\n"
    "     */\n"
    "    public const OPTION_IOURING_ENTRIES = 'iouring_entries';\n"
    "\n"
    "    /**\n"
    "     * @since 6.0.0-rc1\n"
    "     */\n"
    "    public const OPTION_IOURING_WORKERS = 'iouring_workers';\n"
    "\n"
    "    /**\n"
    "     * @since 6.0.0-rc1\n"
    "     */\n"
    "    public const OPTION_IOURING_FLAG = 'iouring_flag';\n"
    "\n"
    "    public const OPTION_ENABLE_SIGNALFD = 'enable_signalfd';\n"
    "\n"
    "    /**\n"
    "     * @since 6.1.0\n"
    "     */\n"
    "    public const OPTION_ENABLE_KQUEUE = 'enable_kqueue';\n"
    "\n"
    "    public const OPTION_WAIT_SIGNAL = 'wait_signal';\n"
    "\n"
    "    public const OPTION_DNS_CACHE_REFRESH_TIME = 'dns_cache_refresh_time';\n"
    "\n"
    "    public const OPTION_THREAD_NUM = 'thread_num';\n"
    "\n"
    "    public const OPTION_MIN_THREAD_NUM = 'min_thread_num';\n"
    "\n"
    "    public const OPTION_MAX_THREAD_NUM = 'max_thread_num';\n"
    "\n"
    "    /**\n"
    "     * @removed 6.1.0\n"
    "     */\n"
    "    public const OPTION_SOCKET_DONTWAIT = 'socket_dontwait';\n"
    "\n"
    "    public const OPTION_DNS_LOOKUP_RANDOM = 'dns_lookup_random';\n"
    "\n"
    "    public const OPTION_USE_ASYNC_RESOLVER = 'use_async_resolver';\n"
    "\n"
    "    public const OPTION_ENABLE_COROUTINE = 'enable_coroutine';\n"
    "\n"
    "    public const OPTION_SSL_PROTOCOLS = 'ssl_protocols';\n"
    "\n"
    "    public const OPTION_SSL_COMPRESS = 'ssl_compress';\n"
    "\n"
    "    public const OPTION_SSL_CERT_FILE = 'ssl_cert_file';\n"
    "\n"
    "    public const OPTION_SSL_KEY_FILE = 'ssl_key_file';\n"
    "\n"
    "    public const OPTION_SSL_PASSPHRASE = 'ssl_passphrase';\n"
    "\n"
    "    public const OPTION_SSL_HOST_NAME = 'ssl_host_name';\n"
    "\n"
    "    public const OPTION_SSL_VERIFY_PEER = 'ssl_verify_peer';\n"
    "\n"
    "    public const OPTION_SSL_ALLOW_SELF_SIGNED = 'ssl_allow_self_signed';\n"
    "\n"
    "    public const OPTION_SSL_CAFILE = 'ssl_cafile';\n"
    "\n"
    "    public const OPTION_SSL_CAPATH = 'ssl_capath';\n"
    "\n"
    "    public const OPTION_SSL_VERIFY_DEPTH = 'ssl_verify_depth';\n"
    "\n"
    "    public const OPTION_SSL_CIPHERS = 'ssl_ciphers';\n"
    "\n"
    "    public const OPTION_OPEN_EOF_CHECK = 'open_eof_check';\n"
    "\n"
    "    public const OPTION_OPEN_EOF_SPLIT = 'open_eof_split';\n"
    "\n"
    "    public const OPTION_PACKAGE_EOF = 'package_eof';\n"
    "\n"
    "    public const OPTION_OPEN_MQTT_PROTOCOL = 'open_mqtt_protocol';\n"
    "\n"
    "    public const OPTION_OPEN_LENGTH_CHECK = 'open_length_check';\n"
    "\n"
    "    public const OPTION_PACKAGE_LENGTH_TYPE = 'package_length_type';\n"
    "\n"
    "    public const OPTION_PACKAGE_LENGTH_OFFSET = 'package_length_offset';\n"
    "\n"
    "    public const OPTION_PACKAGE_BODY_OFFSET = 'package_body_offset';\n"
    "\n"
    "    public const OPTION_PACKAGE_LENGTH_FUNC = 'package_length_func';\n"
    "\n"
    "    public const OPTION_PACKAGE_MAX_LENGTH = 'package_max_length';\n"
    "\n"
    "    public const OPTION_BUFFER_HIGH_WATERMARK = 'buffer_high_watermark';\n"
    "\n"
    "    public const OPTION_BUFFER_LOW_WATERMARK = 'buffer_low_watermark';\n"
    "\n"
    "    public const OPTION_BIND_PORT = 'bind_port';\n"
    "\n"
    "    public const OPTION_BIND_ADDRESS = 'bind_address';\n"
    "\n"
    "    public const OPTION_OPEN_TCP_NODELAY = 'open_tcp_nodelay';\n"
    "\n"
    "    public const OPTION_SOCKS5_HOST = 'socks5_host';\n"
    "\n"
    "    public const OPTION_SOCKS5_PORT = 'socks5_port';\n"
    "\n"
    "    public const OPTION_SOCKS5_USERNAME = 'socks5_username';\n"
    "\n"
    "    public const OPTION_SOCKS5_PASSWORD = 'socks5_password';\n"
    "\n"
    "    public const OPTION_HTTP_PROXY_HOST = 'http_proxy_host';\n"
    "\n"
    "    public const OPTION_HTTP_PROXY_PORT = 'http_proxy_port';\n"
    "\n"
    "    public const OPTION_HTTP_PROXY_USERNAME = 'http_proxy_username';\n"
    "\n"
    "    public const OPTION_HTTP_PROXY_USER = 'http_proxy_user';\n"
    "\n"
    "    public const OPTION_HTTP_PROXY_PASSWORD = 'http_proxy_password';\n"
    "\n"
    "    public const OPTION_MAX_CORO_NUM = 'max_coro_num';\n"
    "\n"
    "    public const OPTION_MAX_COROUTINE = 'max_coroutine';\n"
    "\n"
    "    public const OPTION_ENABLE_DEADLOCK_CHECK = 'enable_deadlock_check';\n"
    "\n"
    "    public const OPTION_HOOK_FLAGS = 'hook_flags';\n"
    "\n"
    "    public const OPTION_ENABLE_PREEMPTIVE_SCHEDULER = 'enable_preemptive_scheduler';\n"
    "\n"
    "    public const OPTION_C_STACK_SIZE = 'c_stack_size';\n"
    "\n"
    "    public const OPTION_STACK_SIZE = 'stack_size';\n"
    "\n"
    "    public const OPTION_NAME_RESOLVER = 'name_resolver';\n"
    "\n"
    "    public const OPTION_DNS_CACHE_EXPIRE = 'dns_cache_expire';\n"
    "\n"
    "    public const OPTION_DNS_CACHE_CAPACITY = 'dns_cache_capacity';\n"
    "\n"
    "    public const OPTION_CONNECT_TIMEOUT = 'connect_timeout';\n"
    "\n"
    "    public const OPTION_TIMEOUT = 'timeout';\n"
    "\n"
    "    public const OPTION_MAX_RETRIES = 'max_retries';\n"
    "\n"
    "    public const OPTION_DEFER = 'defer';\n"
    "\n"
    "    public const OPTION_LOWERCASE_HEADER = 'lowercase_header';\n"
    "\n"
    "    public const OPTION_KEEP_ALIVE = 'keep_alive';\n"
    "\n"
    "    public const OPTION_WEBSOCKET_MASK = 'websocket_mask';\n"
    "\n"
    "    public const OPTION_HTTP_COMPRESSION = 'http_compression';\n"
    "\n"
    "    public const OPTION_BODY_DECOMPRESSION = 'body_decompression';\n"
    "\n"
    "    public const OPTION_WEBSOCKET_COMPRESSION = 'websocket_compression';\n"
    "\n"
    "    public const OPTION_WRITE_FUNC = 'write_func';\n"
    "\n"
    "    public const OPTION_HTTP_PARSE_COOKIE = 'http_parse_cookie';\n"
    "\n"
    "    public const OPTION_HTTP_PARSE_POST = 'http_parse_post';\n"
    "\n"
    "    public const OPTION_HTTP_PARSE_FILES = 'http_parse_files';\n"
    "\n"
    "    public const OPTION_HTTP_COMPRESSION_LEVEL = 'http_compression_level';\n"
    "\n"
    "    public const OPTION_COMPRESSION_LEVEL = 'compression_level';\n"
    "\n"
    "    public const OPTION_HTTP_GZIP_LEVEL = 'http_gzip_level';\n"
    "\n"
    "    public const OPTION_HTTP_COMPRESSION_MIN_LENGTH = 'http_compression_min_length';\n"
    "\n"
    "    public const OPTION_COMPRESSION_MIN_LENGTH = 'compression_min_length';\n"
    "\n"
    "    public const OPTION_HTTP_COMPRESSION_TYPES = 'http_compression_types';\n"
    "\n"
    "    public const OPTION_COMPRESSION_TYPES = 'compression_types';\n"
    "\n"
    "    public const OPTION_UPLOAD_TMP_DIR = 'upload_tmp_dir';\n"
    "\n"
    "    public const OPTION_ENABLE_MESSAGE_BUS = 'enable_message_bus';\n"
    "\n"
    "    public const OPTION_MAX_PACKAGE_SIZE = 'max_package_size';\n"
    "\n"
    "    public const OPTION_SSL = 'ssl';\n"
    "\n"
    "    public const OPTION_CHROOT = 'chroot';\n"
    "\n"
    "    public const OPTION_USER = 'user';\n"
    "\n"
    "    public const OPTION_GROUP = 'group';\n"
    "\n"
    "    public const OPTION_DAEMONIZE = 'daemonize';\n"
    "\n"
    "    public const OPTION_PID_FILE = 'pid_file';\n"
    "\n"
    "    public const OPTION_REACTOR_NUM = 'reactor_num';\n"
    "\n"
    "    public const OPTION_SINGLE_THREAD = 'single_thread';\n"
    "\n"
    "    public const OPTION_WORKER_NUM = 'worker_num';\n"
    "\n"
    "    public const OPTION_MAX_WAIT_TIME = 'max_wait_time';\n"
    "\n"
    "    public const OPTION_MAX_QUEUED_BYTES = 'max_queued_bytes';\n"
    "\n"
    "    public const OPTION_MAX_CONCURRENCY = 'max_concurrency';\n"
    "\n"
    "    public const OPTION_WORKER_MAX_CONCURRENCY = 'worker_max_concurrency';\n"
    "\n"
    "    public const OPTION_SEND_TIMEOUT = 'send_timeout';\n"
    "\n"
    "    public const OPTION_DISPATCH_MODE = 'dispatch_mode';\n"
    "\n"
    "    public const OPTION_SEND_YIELD = 'send_yield';\n"
    "\n"
    "    public const OPTION_DISPATCH_FUNC = 'dispatch_func';\n"
    "\n"
    "    public const OPTION_DISCARD_TIMEOUT_REQUEST = 'discard_timeout_request';\n"
    "\n"
    "    public const OPTION_ENABLE_UNSAFE_EVENT = 'enable_unsafe_event';\n"
    "\n"
    "    public const OPTION_ENABLE_DELAY_RECEIVE = 'enable_delay_receive';\n"
    "\n"
    "    public const OPTION_ENABLE_REUSE_PORT = 'enable_reuse_port';\n"
    "\n"
    "    public const OPTION_TASK_USE_OBJECT = 'task_use_object';\n"
    "\n"
    "    public const OPTION_TASK_OBJECT = 'task_object';\n"
    "\n"
    "    public const OPTION_EVENT_OBJECT = 'event_object';\n"
    "\n"
    "    public const OPTION_TASK_ENABLE_COROUTINE = 'task_enable_coroutine';\n"
    "\n"
    "    public const OPTION_TASK_WORKER_NUM = 'task_worker_num';\n"
    "\n"
    "    public const OPTION_TASK_IPC_MODE = 'task_ipc_mode';\n"
    "\n"
    "    public const OPTION_TASK_TMPDIR = 'task_tmpdir';\n"
    "\n"
    "    public const OPTION_TASK_MAX_REQUEST = 'task_max_request';\n"
    "\n"
    "    public const OPTION_TASK_MAX_REQUEST_GRACE = 'task_max_request_grace';\n"
    "\n"
    "    public const OPTION_MAX_CONNECTION = 'max_connection';\n"
    "\n"
    "    public const OPTION_MAX_CONN = 'max_conn';\n"
    "\n"
    "    public const OPTION_START_SESSION_ID = 'start_session_id';\n"
    "\n"
    "    public const OPTION_HEARTBEAT_CHECK_INTERVAL = 'heartbeat_check_interval';\n"
    "\n"
    "    public const OPTION_HEARTBEAT_IDLE_TIME = 'heartbeat_idle_time';\n"
    "\n"
    "    public const OPTION_MAX_REQUEST = 'max_request';\n"
    "\n"
    "    public const OPTION_MAX_REQUEST_GRACE = 'max_request_grace';\n"
    "\n"
    "    public const OPTION_RELOAD_ASYNC = 'reload_async';\n"
    "\n"
    "    public const OPTION_OPEN_CPU_AFFINITY = 'open_cpu_affinity';\n"
    "\n"
    "    public const OPTION_CPU_AFFINITY_IGNORE = 'cpu_affinity_ignore';\n"
    "\n"
    "    public const OPTION_UPLOAD_MAX_FILESIZE = 'upload_max_filesize';\n"
    "\n"
    "    public const OPTION_ENABLE_STATIC_HANDLER = 'enable_static_handler';\n"
    "\n"
    "    public const OPTION_DOCUMENT_ROOT = 'document_root';\n"
    "\n"
    "    public const OPTION_HTTP_AUTOINDEX = 'http_autoindex';\n"
    "\n"
    "    public const OPTION_HTTP_INDEX_FILES = 'http_index_files';\n"
    "\n"
    "    public const OPTION_STATIC_HANDLER_LOCATIONS = 'static_handler_locations';\n"
    "\n"
    "    /**\n"
    "     * @since 6.2.0\n"
    "     */\n"
    "    public const OPTION_URL_REWRITE_RULES = 'url_rewrite_rules';\n"
    "\n"
    "    public const OPTION_INPUT_BUFFER_SIZE = 'input_buffer_size';\n"
    "\n"
    "    public const OPTION_BUFFER_INPUT_SIZE = 'buffer_input_size';\n"
    "\n"
    "    public const OPTION_OUTPUT_BUFFER_SIZE = 'output_buffer_size';\n"
    "\n"
    "    public const OPTION_BUFFER_OUTPUT_SIZE = 'buffer_output_size';\n"
    "\n"
    "    public const OPTION_MESSAGE_QUEUE_KEY = 'message_queue_key';\n"
    "\n"
    "    /**\n"
    "     * @since 6.0.0-beta\n"
    "     */\n"
    "    public const OPTION_BOOTSTRAP = 'bootstrap';\n"
    "\n"
    "    /**\n"
    "     * @since 6.0.0-beta\n"
    "     */\n"
    "    public const OPTION_INIT_ARGUMENTS = 'init_arguments';\n"
    "\n"
    "    public const OPTION_BACKLOG = 'backlog';\n"
    "\n"
    "    public const OPTION_KERNEL_SOCKET_RECV_BUFFER_SIZE = 'kernel_socket_recv_buffer_size';\n"
    "\n"
    "    public const OPTION_KERNEL_SOCKET_SEND_BUFFER_SIZE = 'kernel_socket_send_buffer_size';\n"
    "\n"
    "    public const OPTION_TCP_DEFER_ACCEPT = 'tcp_defer_accept';\n"
    "\n"
    "    public const OPTION_OPEN_TCP_KEEPALIVE = 'open_tcp_keepalive';\n"
    "\n"
    "    public const OPTION_OPEN_HTTP_PROTOCOL = 'open_http_protocol';\n"
    "\n"
    "    public const OPTION_OPEN_WEBSOCKET_PROTOCOL = 'open_websocket_protocol';\n"
    "\n"
    "    public const OPTION_WEBSOCKET_SUBPROTOCOL = 'websocket_subprotocol';\n"
    "\n"
    "    public const OPTION_OPEN_WEBSOCKET_CLOSE_FRAME = 'open_websocket_close_frame';\n"
    "\n"
    "    public const OPTION_OPEN_WEBSOCKET_PING_FRAME = 'open_websocket_ping_frame';\n"
    "\n"
    "    public const OPTION_OPEN_WEBSOCKET_PONG_FRAME = 'open_websocket_pong_frame';\n"
    "\n"
    "    public const OPTION_OPEN_HTTP2_PROTOCOL = 'open_http2_protocol';\n"
    "\n"
    "    public const OPTION_OPEN_REDIS_PROTOCOL = 'open_redis_protocol';\n"
    "\n"
    "    public const OPTION_MAX_IDLE_TIME = 'max_idle_time';\n"
    "\n"
    "    public const OPTION_TCP_KEEPIDLE = 'tcp_keepidle';\n"
    "\n"
    "    public const OPTION_TCP_KEEPINTERVAL = 'tcp_keepinterval';\n"
    "\n"
    "    public const OPTION_TCP_KEEPCOUNT = 'tcp_keepcount';\n"
    "\n"
    "    public const OPTION_TCP_USER_TIMEOUT = 'tcp_user_timeout';\n"
    "\n"
    "    public const OPTION_TCP_FASTOPEN = 'tcp_fastopen';\n"
    "\n"
    "    public const OPTION_PACKAGE_BODY_START = 'package_body_start';\n"
    "\n"
    "    public const OPTION_SSL_CLIENT_CERT_FILE = 'ssl_client_cert_file';\n"
    "\n"
    "    public const OPTION_SSL_PREFER_SERVER_CIPHERS = 'ssl_prefer_server_ciphers';\n"
    "\n"
    "    public const OPTION_SSL_ECDH_CURVE = 'ssl_ecdh_curve';\n"
    "\n"
    "    public const OPTION_SSL_DHPARAM = 'ssl_dhparam';\n"
    "\n"
    "    public const OPTION_SSL_SNI_CERTS = 'ssl_sni_certs';\n"
    "\n"
    "    public const OPTION_OPEN_SSL = 'open_ssl';\n"
    "\n"
    "    public const OPTION_OPEN_FASTCGI_PROTOCOL = 'open_fastcgi_protocol';\n"
    "\n"
    "    public const OPTION_READ_TIMEOUT = 'read_timeout';\n"
    "\n"
    "    public const OPTION_WRITE_TIMEOUT = 'write_timeout';\n"
    "\n"
    "    public const OPTION_SSL_DISABLE_COMPRESSION = 'ssl_disable_compression';\n"
    "\n"
    "    public const OPTION_SSL_GREASE = 'ssl_grease';\n"
    "\n"
    "    public const OPTION_EXIT_CONDITION = 'exit_condition';\n"
    "\n"
    "    public const OPTION_DEADLOCK_CHECK_DISABLE_TRACE = 'deadlock_check_disable_trace';\n"
    "\n"
    "    public const OPTION_DEADLOCK_CHECK_LIMIT = 'deadlock_check_limit';\n"
    "\n"
    "    public const OPTION_DEADLOCK_CHECK_DEPTH = 'deadlock_check_depth';\n"
    "\n"
    "    public const OPTION_STATS_FILE = 'stats_file';\n"
    "\n"
    "    public const OPTION_STATS_TIMER_INTERVAL = 'stats_timer_interval';\n"
    "\n"
    "    public const OPTION_ADMIN_SERVER = 'admin_server';\n"
    "\n"
    "    /* }}} OPTION */\n"
    "\n"
    "    public const OPTION_HTTP_CLIENT_DRIVER = 'http_client_driver';\n"
    "}\n";

static const char* swoole_library_source_core_string_object =
    "\n"
    "/**\n"
    " * This file is part of Swoole.\n"
    " *\n"
    " * @link     https://www.swoole.com\n"
    " * @contact  team@swoole.com\n"
    " * @license  https://github.com/swoole/library/blob/master/LICENSE\n"
    " */\n"
    "\n"
    "declare(strict_types=1);\n"
    "\n"
    "namespace Swoole;\n"
    "\n"
    "class StringObject implements \\Stringable\n"
    "{\n"
    "    /**\n"
    "     * StringObject constructor.\n"
    "     */\n"
    "    public function __construct(protected string $string = '')\n"
    "    {\n"
    "    }\n"
    "\n"
    "    public function __toString(): string\n"
    "    {\n"
    "        return $this->string;\n"
    "    }\n"
    "\n"
    "    public static function from(string $string = ''): static\n"
    "    {\n"
    "        return new static($string); // @phpstan-ignore new.static\n"
    "    }\n"
    "\n"
    "    public function length(): int\n"
    "    {\n"
    "        return strlen($this->string);\n"
    "    }\n"
    "\n"
    "    public function indexOf(string $needle, int $offset = 0): false|int\n"
    "    {\n"
    "        return strpos($this->string, $needle, $offset);\n"
    "    }\n"
    "\n"
    "    public function lastIndexOf(string $needle, int $offset = 0): false|int\n"
    "    {\n"
    "        return strrpos($this->string, $needle, $offset);\n"
    "    }\n"
    "\n"
    "    public function pos(string $needle, int $offset = 0): false|int\n"
    "    {\n"
    "        return strpos($this->string, $needle, $offset);\n"
    "    }\n"
    "\n"
    "    public function rpos(string $needle, int $offset = 0): false|int\n"
    "    {\n"
    "        return strrpos($this->string, $needle, $offset);\n"
    "    }\n"
    "\n"
    "    public function reverse(): static\n"
    "    {\n"
    "        return new static(strrev($this->string)); // @phpstan-ignore new.static\n"
    "    }\n"
    "\n"
    "    /**\n"
    "     * @return false|int\n"
    "     */\n"
    "    public function ipos(string $needle)\n"
    "    {\n"
    "        return stripos($this->string, $needle);\n"
    "    }\n"
    "\n"
    "    public function lower(): static\n"
    "    {\n"
    "        return new static(strtolower($this->string)); // @phpstan-ignore new.static\n"
    "    }\n"
    "\n"
    "    public function upper(): static\n"
    "    {\n"
    "        return new static(strtoupper($this->string)); // @phpstan-ignore new.static\n"
    "    }\n"
    "\n"
    "    public function trim(string $characters = ''): static\n"
    "    {\n"
    "        if ($characters) {\n"
    "            return new static(trim($this->string, $characters)); // @phpstan-ignore new.static\n"
    "        }\n"
    "        return new static(trim($this->string)); // @phpstan-ignore new.static\n"
    "    }\n"
    "\n"
    "    /**\n"
    "     * @return static\n"
    "     */\n"
    "    public function ltrim(): self\n"
    "    {\n"
    "        return new static(ltrim($this->string)); // @phpstan-ignore new.static\n"
    "    }\n"
    "\n"
    "    /**\n"
    "     * @return static\n"
    "     */\n"
    "    public function rtrim(): self\n"
    "    {\n"
    "        return new static(rtrim($this->string)); // @phpstan-ignore new.static\n"
    "    }\n"
    "\n"
    "    /**\n"
    "     * @return static\n"
    "     */\n"
    "    public function substr(int $offset, ?int $length = null)\n"
    "    {\n"
    "        return new static(substr($this->string, $offset, $length)); // @phpstan-ignore new.static\n"
    "    }\n"
    "\n"
    "    public function repeat(int $times): static\n"
    "    {\n"
    "        return new static(str_repeat($this->string, $times)); // @phpstan-ignore new.static\n"
    "    }\n"
    "\n"
    "    public function append(mixed $str): static\n"
    "    {\n"
    "        return new static($this->string .= $str); // @phpstan-ignore new.static\n"
    "    }\n"
    "\n"
    "    /**\n"
    "     * @param int|null $count\n"
    "     */\n"
    "    public function replace(string $search, string $replace, &$count = null): static\n"
    "    {\n"
    "        return new static(str_replace($search, $replace, $this->string, $count)); // @phpstan-ignore new.static\n"
    "    }\n"
    "\n"
    "    public function startsWith(string $needle): bool\n"
    "    {\n"
    "        return str_starts_with($this->string, $needle);\n"
    "    }\n"
    "\n"
    "    public function endsWith(string $needle): bool\n"
    "    {\n"
    "        return strrpos($this->string, $needle) === (strlen($this->string) - strlen($needle));\n"
    "    }\n"
    "\n"
    "    public function equals($str, bool $strict = false): bool\n"
    "    {\n"
    "        if ($str instanceof StringObject) {\n"
    "            $str = strval($str);\n"
    "        }\n"
    "        if ($strict) {\n"
    "            return $this->string === $str;\n"
    "        }\n"
    "        return $this->string == $str;\n"
    "    }\n"
    "\n"
    "    public function contains(string $subString): bool\n"
    "    {\n"
    "        return str_contains($this->string, $subString);\n"
    "    }\n"
    "\n"
    "    public function split(string $delimiter, int $limit = PHP_INT_MAX): ArrayObject\n"
    "    {\n"
    "        return static::detectArrayType(explode($delimiter, $this->string, $limit));\n"
    "    }\n"
    "\n"
    "    public function char(int $index): string\n"
    "    {\n"
    "        if ($index > strlen($this->string)) {\n"
    "            return '';\n"
    "        }\n"
    "        return $this->string[$index];\n"
    "    }\n"
    "\n"
    "    /**\n"
    "     * Get a new string object by splitting the string of current object into smaller chunks.\n"
    "     *\n"
    "     * @param int $length The chunk length.\n"
    "     * @param string $separator The line ending sequence.\n"
    "     * @see https://www.php.net/chunk_split\n"
    "     */\n"
    "    public function chunkSplit(int $length = 76, string $separator = \"\\r\\n\"): static\n"
    "    {\n"
    "        return new static(chunk_split($this->string, $length, $separator)); // @phpstan-ignore new.static\n"
    "    }\n"
    "\n"
    "    /**\n"
    "     * Convert a string to an array object of class \\Swoole\\ArrayObject.\n"
    "     *\n"
    "     * @param int $length Maximum length of the chunk.\n"
    "     * @see https://www.php.net/str_split\n"
    "     */\n"
    "    public function chunk(int $length = 1): ArrayObject\n"
    "    {\n"
    "        return static::detectArrayType(str_split($this->string, $length));\n"
    "    }\n"
    "\n"
    "    public function toString(): string\n"
    "    {\n"
    "        return $this->string;\n"
    "    }\n"
    "\n"
    "    protected static function detectArrayType(array $value): ArrayObject\n"
    "    {\n"
    "        return new ArrayObject($value);\n"
    "    }\n"
    "}\n";

static const char* swoole_library_source_core_multibyte_string_object =
    "\n"
    "/**\n"
    " * This file is part of Swoole.\n"
    " *\n"
    " * @link     https://www.swoole.com\n"
    " * @contact  team@swoole.com\n"
    " * @license  https://github.com/swoole/library/blob/master/LICENSE\n"
    " */\n"
    "\n"
    "declare(strict_types=1);\n"
    "\n"
    "namespace Swoole;\n"
    "\n"
    "class MultibyteStringObject extends StringObject\n"
    "{\n"
    "    public function length(): int\n"
    "    {\n"
    "        return mb_strlen($this->string);\n"
    "    }\n"
    "\n"
    "    public function indexOf(string $needle, int $offset = 0, ?string $encoding = null): false|int\n"
    "    {\n"
    "        return mb_strpos($this->string, $needle, $offset, $encoding);\n"
    "    }\n"
    "\n"
    "    public function lastIndexOf(string $needle, int $offset = 0, ?string $encoding = null): false|int\n"
    "    {\n"
    "        return mb_strrpos($this->string, $needle, $offset, $encoding);\n"
    "    }\n"
    "\n"
    "    public function pos(string $needle, int $offset = 0, ?string $encoding = null): false|int\n"
    "    {\n"
    "        return mb_strpos($this->string, $needle, $offset, $encoding);\n"
    "    }\n"
    "\n"
    "    public function rpos(string $needle, int $offset = 0, ?string $encoding = null): false|int\n"
    "    {\n"
    "        return mb_strrpos($this->string, $needle, $offset, $encoding);\n"
    "    }\n"
    "\n"
    "    public function ipos(string $needle, int $offset = 0, ?string $encoding = null): int|false\n"
    "    {\n"
    "        return mb_stripos($this->string, $needle, $offset, $encoding);\n"
    "    }\n"
    "\n"
    "    /**\n"
    "     * @see https://www.php.net/mb_substr\n"
    "     */\n"
    "    public function substr(int $start, ?int $length = null, ?string $encoding = null): static\n"
    "    {\n"
    "        return new static(mb_substr($this->string, $start, $length, $encoding)); // @phpstan-ignore new.static\n"
    "    }\n"
    "\n"
    "    /**\n"
    "     * {@inheritDoc}\n"
    "     * @see https://www.php.net/mb_str_split\n"
    "     */\n"
    "    public function chunk(int $length = 1): ArrayObject\n"
    "    {\n"
    "        return static::detectArrayType(mb_str_split($this->string, $length));\n"
    "    }\n"
    "}\n";

static const char* swoole_library_source_core_exception_array_key_not_exists =
    "\n"
    "/**\n"
    " * This file is part of Swoole.\n"
    " *\n"
    " * @link     https://www.swoole.com\n"
    " * @contact  team@swoole.com\n"
    " * @license  https://github.com/swoole/library/blob/master/LICENSE\n"
    " */\n"
    "\n"
    "declare(strict_types=1);\n"
    "\n"
    "namespace Swoole\\Exception;\n"
    "\n"
    "class ArrayKeyNotExists extends \\RuntimeException\n"
    "{\n"
    "}\n";

static const char* swoole_library_source_core_array_object =
    "\n"
    "/**\n"
    " * This file is part of Swoole.\n"
    " *\n"
    " * @link     https://www.swoole.com\n"
    " * @contact  team@swoole.com\n"
    " * @license  https://github.com/swoole/library/blob/master/LICENSE\n"
    " */\n"
    "\n"
    "declare(strict_types=1);\n"
    "\n"
    "namespace Swoole;\n"
    "\n"
    "use Swoole\\Exception\\ArrayKeyNotExists;\n"
    "\n"
    "class ArrayObject implements \\ArrayAccess, \\Serializable, \\Countable, \\Iterator\n"
    "{\n"
    "    /**\n"
    "     * @var array\n"
    "     */\n"
    "    protected $array;\n"
    "\n"
    "    /**\n"
    "     * ArrayObject constructor.\n"
    "     */\n"
    "    public function __construct(array $array = [])\n"
    "    {\n"
    "        $this->array = $array;\n"
    "    }\n"
    "\n"
    "    public function __toArray(): array\n"
    "    {\n"
    "        return $this->array;\n"
    "    }\n"
    "\n"
    "    public function __serialize(): array\n"
    "    {\n"
    "        return $this->array;\n"
    "    }\n"
    "\n"
    "    public function __unserialize(array $data): void\n"
    "    {\n"
    "        $this->array = $data;\n"
    "    }\n"
    "\n"
    "    public static function from(array $array = []): static\n"
    "    {\n"
    "        return new static($array); // @phpstan-ignore new.static\n"
    "    }\n"
    "\n"
    "    public function toArray(): array\n"
    "    {\n"
    "        return $this->array;\n"
    "    }\n"
    "\n"
    "    public function isEmpty(): bool\n"
    "    {\n"
    "        return empty($this->array);\n"
    "    }\n"
    "\n"
    "    public function count(): int\n"
    "    {\n"
    "        return count($this->array);\n"
    "    }\n"
    "\n"
    "    /**\n"
    "     * @return mixed\n"
    "     */\n"
    "    #[\\ReturnTypeWillChange]\n"
    "    public function current()\n"
    "    {\n"
    "        return current($this->array);\n"
    "    }\n"
    "\n"
    "    /**\n"
    "     * @return mixed\n"
    "     */\n"
    "    #[\\ReturnTypeWillChange]\n"
    "    public function key()\n"
    "    {\n"
    "        return key($this->array);\n"
    "    }\n"
    "\n"
    "    public function valid(): bool\n"
    "    {\n"
    "        return array_key_exists($this->key(), $this->array);\n"
    "    }\n"
    "\n"
    "    /**\n"
    "     * @return mixed\n"
    "     */\n"
    "    #[\\ReturnTypeWillChange]\n"
    "    public function rewind()\n"
    "    {\n"
    "        return reset($this->array);\n"
    "    }\n"
    "\n"
    "    /**\n"
    "     * @return mixed\n"
    "     */\n"
    "    #[\\ReturnTypeWillChange]\n"
    "    public function next()\n"
    "    {\n"
    "        return next($this->array);\n"
    "    }\n"
    "\n"
    "    /**\n"
    "     * @return ArrayObject|StringObject\n"
    "     */\n"
    "    public function get(mixed $key)\n"
    "    {\n"
    "        if (!$this->exists($key)) {\n"
    "            throw new ArrayKeyNotExists($key);\n"
    "        }\n"
    "        return static::detectType($this->array[$key]);\n"
    "    }\n"
    "\n"
    "    /**\n"
    "     * @return ArrayObject|StringObject\n"
    "     */\n"
    "    public function getOr(mixed $key, mixed $default = null)\n"
    "    {\n"
    "        if (!$this->exists($key)) {\n"
    "            return $default;\n"
    "        }\n"
    "        return static::detectType($this->array[$key]);\n"
    "    }\n"
    "\n"
    "    /**\n"
    "     * @return mixed\n"
    "     */\n"
    "    public function last()\n"
    "    {\n"
    "        $key = array_key_last($this->array);\n"
    "        if ($key === null) {\n"
    "            return null;\n"
    "        }\n"
    "        return $this->get($key);\n"
    "    }\n"
    "\n"
    "    /**\n"
    "     * @return int|string|null\n"
    "     */\n"
    "    public function firstKey()\n"
    "    {\n"
    "        return array_key_first($this->array);\n"
    "    }\n"
    "\n"
    "    /**\n"
    "     * @return int|string|null\n"
    "     */\n"
    "    public function lastKey()\n"
    "    {\n"
    "        return array_key_last($this->array);\n"
    "    }\n"
    "\n"
    "    /**\n"
    "     * @return mixed\n"
    "     */\n"
    "    public function first()\n"
    "    {\n"
    "        $key = array_key_first($this->array);\n"
    "        if ($key === null) {\n"
    "            return null;\n"
    "        }\n"
    "        return $this->get($key);\n"
    "    }\n"
    "\n"
    "    /**\n"
    "     * @return $this\n"
    "     */\n"
    "    public function set(mixed $key, mixed $value): self\n"
    "    {\n"
    "        $this->array[$key] = $value;\n"
    "        return $this;\n"
    "    }\n"
    "\n"
    "    /**\n"
    "     * @return $this\n"
    "     */\n"
    "    public function delete(mixed $key): self\n"
    "    {\n"
    "        unset($this->array[$key]);\n"
    "        return $this;\n"
    "    }\n"
    "\n"
    "    /**\n"
    "     * @return $this\n"
    "     */\n"
    "    public function remove(mixed $value, bool $strict = true, bool $loop = false): self\n"
    "    {\n"
    "        do {\n"
    "            $key = $this->search($value, $strict);\n"
    "            if ($key === false) {\n"
    "                break;\n"
    "            }\n"
    "            unset($this->array[$key]);\n"
    "        } while ($loop);\n"
    "\n"
    "        return $this;\n"
    "    }\n"
    "\n"
    "    /**\n"
    "     * @return $this\n"
    "     */\n"
    "    public function clear(): self\n"
    "    {\n"
    "        $this->array = [];\n"
    "        return $this;\n"
    "    }\n"
    "\n"
    "    /**\n"
    "     * @return mixed|null\n"
    "     */\n"
    "    #[\\ReturnTypeWillChange]\n"
    "    public function offsetGet(mixed $key)\n"
    "    {\n"
    "        if (!array_key_exists($key, $this->array)) {\n"
    "            return null;\n"
    "        }\n"
    "        return $this->array[$key];\n"
    "    }\n"
    "\n"
    "    public function offsetSet(mixed $key, mixed $value): void\n"
    "    {\n"
    "        $this->array[$key] = $value;\n"
    "    }\n"
    "\n"
    "    public function offsetUnset(mixed $key): void\n"
    "    {\n"
    "        unset($this->array[$key]);\n"
    "    }\n"
    "\n"
    "    /**\n"
    "     * @return bool\n"
    "     */\n"
    "    #[\\ReturnTypeWillChange]\n"
    "    public function offsetExists(mixed $key)\n"
    "    {\n"
    "        return isset($this->array[$key]);\n"
    "    }\n"
    "\n"
    "    public function exists(mixed $key): bool\n"
    "    {\n"
    "        return array_key_exists($key, $this->array);\n"
    "    }\n"
    "\n"
    "    public function contains(mixed $value, bool $strict = true): bool\n"
    "    {\n"
    "        return in_array($value, $this->array, $strict);\n"
    "    }\n"
    "\n"
    "    /**\n"
    "     * @return mixed\n"
    "     */\n"
    "    public function indexOf(mixed $value, bool $strict = true)\n"
    "    {\n"
    "        return $this->search($value, $strict);\n"
    "    }\n"
    "\n"
    "    /**\n"
    "     * @return mixed\n"
    "     */\n"
    "    public function lastIndexOf(mixed $value, bool $strict = true)\n"
    "    {\n"
    "        $array = $this->array;\n"
    "        for (end($array); ($currentKey = key($array)) !== null; prev($array)) {\n"
    "            $currentValue = current($array);\n"
    "            if ($currentValue == $value) {\n"
    "                if ($strict && $currentValue !== $value) {\n"
    "                    continue;\n"
    "                }\n"
    "                break;\n"
    "            }\n"
    "        }\n"
    "        return $currentKey;\n"
    "    }\n"
    "\n"
    "    /**\n"
    "     * @return mixed\n"
    "     */\n"
    "    public function search(mixed $needle, bool $strict = true)\n"
    "    {\n"
    "        return array_search($needle, $this->array, $strict);\n"
    "    }\n"
    "\n"
    "    public function join(string $glue = ''): StringObject\n"
    "    {\n"
    "        return self::detectStringType(implode($glue, $this->array));\n"
    "    }\n"
    "\n"
    "    public function serialize(): string\n"
    "    {\n"
    "        return serialize($this->array);\n"
    "    }\n"
    "\n"
    "    public function unserialize(string|\\Stringable|StringObject $string): self\n"
    "    {\n"
    "        $this->array = (array) unserialize((string) $string);\n"
    "        return $this;\n"
    "    }\n"
    "\n"
    "    /**\n"
    "     * @return float|int\n"
    "     */\n"
    "    public function sum()\n"
    "    {\n"
    "        return array_sum($this->array);\n"
    "    }\n"
    "\n"
    "    /**\n"
    "     * @return float|int\n"
    "     */\n"
    "    public function product()\n"
    "    {\n"
    "        return array_product($this->array);\n"
    "    }\n"
    "\n"
    "    /**\n"
    "     * @return int\n"
    "     */\n"
    "    public function push(mixed $value)\n"
    "    {\n"
    "        return $this->pushBack($value);\n"
    "    }\n"
    "\n"
    "    /**\n"
    "     * @return int\n"
    "     */\n"
    "    public function pushFront(mixed $value)\n"
    "    {\n"
    "        return array_unshift($this->array, $value);\n"
    "    }\n"
    "\n"
    "    public function append(...$values): ArrayObject\n"
    "    {\n"
    "        array_push($this->array, ...$values);\n"
    "        return $this;\n"
    "    }\n"
    "\n"
    "    /**\n"
    "     * @return int\n"
    "     */\n"
    "    public function pushBack(mixed $value)\n"
    "    {\n"
    "        return array_push($this->array, $value);\n"
    "    }\n"
    "\n"
    "    /**\n"
    "     * @return $this\n"
    "     */\n"
    "    public function insert(int $offset, mixed $value): self\n"
    "    {\n"
    "        if (is_array($value) || is_object($value) || is_null($value)) {\n"
    "            $value = [$value];\n"
    "        }\n"
    "        array_splice($this->array, $offset, 0, $value);\n"
    "        return $this;\n"
    "    }\n"
    "\n"
    "    /**\n"
    "     * @return mixed\n"
    "     */\n"
    "    public function pop()\n"
    "    {\n"
    "        return $this->popBack();\n"
    "    }\n"
    "\n"
    "    /**\n"
    "     * @return mixed\n"
    "     */\n"
    "    public function popFront()\n"
    "    {\n"
    "        return array_shift($this->array);\n"
    "    }\n"
    "\n"
    "    /**\n"
    "     * @return mixed\n"
    "     */\n"
    "    public function popBack()\n"
    "    {\n"
    "        return array_pop($this->array);\n"
    "    }\n"
    "\n"
    "    public function slice(int $offset, ?int $length = null, bool $preserve_keys = false): static\n"
    "    {\n"
    "        return new static(array_slice($this->array, $offset, $length, $preserve_keys)); // @phpstan-ignore new.static\n"
    "    }\n"
    "\n"
    "    /**\n"
    "     * @return ArrayObject|mixed|StringObject\n"
    "     */\n"
    "    public function randomGet()\n"
    "    {\n"
    "        return static::detectType($this->array[array_rand($this->array, 1)]);\n"
    "    }\n"
    "\n"
    "    public function each(callable $fn): self\n"
    "    {\n"
    "        array_walk($this->array, $fn);\n"
    "\n"
    "        return $this;\n"
    "    }\n"
    "\n"
    "    /**\n"
    "     * @param array $args\n"
    "     */\n"
    "    public function map(callable $fn, ...$args): static\n"
    "    {\n"
    "        return new static(array_map($fn, $this->array, ...$args)); // @phpstan-ignore new.static\n"
    "    }\n"
    "\n"
    "    /**\n"
    "     * @param null $initial\n"
    "     * @return mixed\n"
    "     */\n"
    "    public function reduce(callable $fn, $initial = null)\n"
    "    {\n"
    "        return array_reduce($this->array, $fn, $initial);\n"
    "    }\n"
    "\n"
    "    /**\n"
    "     * @param array $args\n"
    "     */\n"
    "    public function keys(...$args): static\n"
    "    {\n"
    "        return new static(array_keys($this->array, ...$args)); // @phpstan-ignore new.static\n"
    "    }\n"
    "\n"
    "    public function values(): static\n"
    "    {\n"
    "        return new static(array_values($this->array)); // @phpstan-ignore new.static\n"
    "    }\n"
    "\n"
    "    public function column(mixed $column_key, mixed $index = null): static\n"
    "    {\n"
    "        return new static(array_column($this->array, $column_key, $index)); // @phpstan-ignore new.static\n"
    "    }\n"
    "\n"
    "    public function unique(int $sort_flags = SORT_STRING): static\n"
    "    {\n"
    "        return new static(array_unique($this->array, $sort_flags)); // @phpstan-ignore new.static\n"
    "    }\n"
    "\n"
    "    public function reverse(bool $preserve_keys = false): static\n"
    "    {\n"
    "        return new static(array_reverse($this->array, $preserve_keys)); // @phpstan-ignore new.static\n"
    "    }\n"
    "\n"
    "    public function chunk(int $size, bool $preserve_keys = false): static\n"
    "    {\n"
    "        return new static(array_chunk($this->array, $size, $preserve_keys)); // @phpstan-ignore new.static\n"
    "    }\n"
    "\n"
    "    /**\n"
    "     * Swap keys and values in an array.\n"
    "     */\n"
    "    public function flip(): static\n"
    "    {\n"
    "        return new static(array_flip($this->array)); // @phpstan-ignore new.static\n"
    "    }\n"
    "\n"
    "    public function filter(callable $fn, int $flag = 0): static\n"
    "    {\n"
    "        return new static(array_filter($this->array, $fn, $flag)); // @phpstan-ignore new.static\n"
    "    }\n"
    "\n"
    "    /**\n"
    "     * | Function name     | Sorts by | Maintains key association   | Order of sort               | Related functions |\n"
    "     * | :---------------- | :------- | :-------------------------- | :-------------------------- | :---------------- |\n"
    "     * | array_multisort() | value    | associative yes, numeric no | first array or sort options | array_walk()      |\n"
    "     * | asort()           | value    | yes                         | low to high                 | arsort()          |\n"
    "     * | arsort()          | value    | yes                         | high to low                 | asort()           |\n"
    "     * | krsort()          | key      | yes                         | high to low                 | ksort()           |\n"
    "     * | ksort()           | key      | yes                         | low to high                 | asort()           |\n"
    "     * | natcasesort()     | value    | yes                         | natural, case insensitive   | natsort()         |\n"
    "     * | natsort()         | value    | yes                         | natural                     | natcasesort()     |\n"
    "     * | rsort()           | value    | no                          | high to low                 | sort()            |\n"
    "     * | shuffle()         | value    | no                          | random                      | array_rand()      |\n"
    "     * | sort()            | value    | no                          | low to high                 | rsort()           |\n"
    "     * | uasort()          | value    | yes                         | user defined                | uksort()          |\n"
    "     * | uksort()          | key      | yes                         | user defined                | uasort()          |\n"
    "     * | usort()           | value    | no                          | user defined                | uasort()          |\n"
    "     */\n"
    "\n"
    "    /**\n"
    "     * @return $this\n"
    "     */\n"
    "    public function asort(int $sort_flags = SORT_REGULAR): self\n"
    "    {\n"
    "        asort($this->array, $sort_flags);\n"
    "\n"
    "        return $this;\n"
    "    }\n"
    "\n"
    "    public function arsort(int $sort_flags = SORT_REGULAR): self\n"
    "    {\n"
    "        arsort($this->array, $sort_flags);\n"
    "\n"
    "        return $this;\n"
    "    }\n"
    "\n"
    "    public function krsort(int $sort_flags = SORT_REGULAR): self\n"
    "    {\n"
    "        krsort($this->array, $sort_flags);\n"
    "\n"
    "        return $this;\n"
    "    }\n"
    "\n"
    "    public function ksort(int $sort_flags = SORT_REGULAR): self\n"
    "    {\n"
    "        ksort($this->array, $sort_flags);\n"
    "\n"
    "        return $this;\n"
    "    }\n"
    "\n"
    "    /**\n"
    "     * @return $this\n"
    "     */\n"
    "    public function natcasesort(): self\n"
    "    {\n"
    "        if (natcasesort($this->array) !== true) { // @phpstan-ignore notIdentical.alwaysFalse\n"
    "            throw new \\RuntimeException('natcasesort() failed');\n"
    "        }\n"
    "        return $this;\n"
    "    }\n"
    "\n"
    "    /**\n"
    "     * @return $this\n"
    "     */\n"
    "    public function natsort(): self\n"
    "    {\n"
    "        if (natsort($this->array) !== true) { // @phpstan-ignore notIdentical.alwaysFalse\n"
    "            throw new \\RuntimeException('natsort() failed');\n"
    "        }\n"
    "        return $this;\n"
    "    }\n"
    "\n"
    "    /**\n"
    "     * @return $this\n"
    "     */\n"
    "    public function rsort(int $sort_flags = SORT_REGULAR): self\n"
    "    {\n"
    "        if (rsort($this->array, $sort_flags) !== true) { // @phpstan-ignore notIdentical.alwaysFalse\n"
    "            throw new \\RuntimeException('rsort() failed');\n"
    "        }\n"
    "        return $this;\n"
    "    }\n"
    "\n"
    "    public function shuffle(): self\n"
    "    {\n"
    "        shuffle($this->array);\n"
    "\n"
    "        return $this;\n"
    "    }\n"
    "\n"
    "    public function sort(int $sort_flags = SORT_REGULAR): self\n"
    "    {\n"
    "        sort($this->array, $sort_flags);\n"
    "\n"
    "        return $this;\n"
    "    }\n"
    "\n"
    "    public function uasort(callable $value_compare_func): self\n"
    "    {\n"
    "        uasort($this->array, $value_compare_func);\n"
    "\n"
    "        return $this;\n"
    "    }\n"
    "\n"
    "    public function uksort(callable $value_compare_func): self\n"
    "    {\n"
    "        uksort($this->array, $value_compare_func);\n"
    "\n"
    "        return $this;\n"
    "    }\n"
    "\n"
    "    public function usort(callable $value_compare_func): self\n"
    "    {\n"
    "        usort($this->array, $value_compare_func);\n"
    "\n"
    "        return $this;\n"
    "    }\n"
    "\n"
    "    /**\n"
    "     * @return ArrayObject|mixed|StringObject\n"
    "     */\n"
    "    protected static function detectType(mixed $value)\n"
    "    {\n"
    "        if (is_string($value)) {\n"
    "            return static::detectStringType($value);\n"
    "        }\n"
    "        if (is_array($value)) {\n"
    "            return static::detectArrayType($value);\n"
    "        }\n"
    "        return $value;\n"
    "    }\n"
    "\n"
    "    protected static function detectStringType(string $value): StringObject\n"
    "    {\n"
    "        return new StringObject($value);\n"
    "    }\n"
    "\n"
    "    protected static function detectArrayType(array $value): static\n"
    "    {\n"
    "        return new static($value); // @phpstan-ignore new.static\n"
    "    }\n"
    "}\n";

static const char* swoole_library_source_core_object_proxy =
    "\n"
    "/**\n"
    " * This file is part of Swoole.\n"
    " *\n"
    " * @link     https://www.swoole.com\n"
    " * @contact  team@swoole.com\n"
    " * @license  https://github.com/swoole/library/blob/master/LICENSE\n"
    " */\n"
    "\n"
    "declare(strict_types=1);\n"
    "\n"
    "namespace Swoole;\n"
    "\n"
    "class ObjectProxy\n"
    "{\n"
    "    /** @var object */\n"
    "    protected $__object;\n"
    "\n"
    "    public function __construct(object $object)\n"
    "    {\n"
    "        $this->__object = $object;\n"
    "    }\n"
    "\n"
    "    public function __getObject()\n"
    "    {\n"
    "        return $this->__object;\n"
    "    }\n"
    "\n"
    "    public function __get(string $name)\n"
    "    {\n"
    "        return $this->__object->{$name};\n"
    "    }\n"
    "\n"
    "    public function __set(string $name, $value): void\n"
    "    {\n"
    "        $this->__object->{$name} = $value;\n"
    "    }\n"
    "\n"
    "    public function __isset($name)\n"
    "    {\n"
    "        return isset($this->__object->{$name});\n"
    "    }\n"
    "\n"
    "    public function __unset(string $name): void\n"
    "    {\n"
    "        unset($this->__object->{$name});\n"
    "    }\n"
    "\n"
    "    public function __call(string $name, array $arguments)\n"
    "    {\n"
    "        return $this->__object->{$name}(...$arguments);\n"
    "    }\n"
    "\n"
    "    public function __invoke(...$arguments)\n"
    "    {\n"
    "        /** @var mixed $object */\n"
    "        $object = $this->__object;\n"
    "        return $object(...$arguments);\n"
    "    }\n"
    "}\n";

static const char* swoole_library_source_core_coroutine_wait_group =
    "\n"
    "/**\n"
    " * This file is part of Swoole.\n"
    " *\n"
    " * @link     https://www.swoole.com\n"
    " * @contact  team@swoole.com\n"
    " * @license  https://github.com/swoole/library/blob/master/LICENSE\n"
    " */\n"
    "\n"
    "declare(strict_types=1);\n"
    "\n"
    "namespace Swoole\\Coroutine;\n"
    "\n"
    "class WaitGroup\n"
    "{\n"
    "    protected Channel $chan;\n"
    "\n"
    "    protected int $count = 0;\n"
    "\n"
    "    protected bool $waiting = false;\n"
    "\n"
    "    public function __construct(int $delta = 0)\n"
    "    {\n"
    "        $this->chan = new Channel(1);\n"
    "        if ($delta > 0) {\n"
    "            $this->add($delta);\n"
    "        }\n"
    "    }\n"
    "\n"
    "    public function add(int $delta = 1): void\n"
    "    {\n"
    "        if ($this->waiting) {\n"
    "            throw new \\BadMethodCallException('WaitGroup misuse: add called concurrently with wait');\n"
    "        }\n"
    "        $count = $this->count + $delta;\n"
    "        if ($count < 0) {\n"
    "            throw new \\InvalidArgumentException('WaitGroup misuse: negative counter');\n"
    "        }\n"
    "        $this->count = $count;\n"
    "    }\n"
    "\n"
    "    public function done(): void\n"
    "    {\n"
    "        $count = $this->count - 1;\n"
    "        if ($count < 0) {\n"
    "            throw new \\BadMethodCallException('WaitGroup misuse: negative counter');\n"
    "        }\n"
    "        $this->count = $count;\n"
    "        if ($count === 0 && $this->waiting) {\n"
    "            $this->chan->push(true);\n"
    "        }\n"
    "    }\n"
    "\n"
    "    public function wait(float $timeout = -1): bool\n"
    "    {\n"
    "        if ($this->waiting) {\n"
    "            throw new \\BadMethodCallException('WaitGroup misuse: reused before previous wait has returned');\n"
    "        }\n"
    "        if ($this->count > 0) {\n"
    "            $this->waiting = true;\n"
    "            $done          = $this->chan->pop($timeout);\n"
    "            $this->waiting = false;\n"
    "            return $done;\n"
    "        }\n"
    "        return true;\n"
    "    }\n"
    "\n"
    "    public function count(): int\n"
    "    {\n"
    "        return $this->count;\n"
    "    }\n"
    "}\n";

static const char* swoole_library_source_core_coroutine_server =
    "\n"
    "/**\n"
    " * This file is part of Swoole.\n"
    " *\n"
    " * @link     https://www.swoole.com\n"
    " * @contact  team@swoole.com\n"
    " * @license  https://github.com/swoole/library/blob/master/LICENSE\n"
    " */\n"
    "\n"
    "declare(strict_types=1);\n"
    "\n"
    "namespace Swoole\\Coroutine;\n"
    "\n"
    "use Swoole\\Constant;\n"
    "use Swoole\\Coroutine;\n"
    "use Swoole\\Coroutine\\Server\\Connection;\n"
    "use Swoole\\Exception;\n"
    "\n"
    "class Server\n"
    "{\n"
    "    /** @var string */\n"
    "    public $host = '';\n"
    "\n"
    "    /** @var int */\n"
    "    public $port = 0;\n"
    "\n"
    "    /** @var int */\n"
    "    public $type = AF_INET;\n"
    "\n"
    "    /** @var int */\n"
    "    public $fd = -1;\n"
    "\n"
    "    /** @var int */\n"
    "    public $errCode = 0;\n"
    "\n"
    "    /** @var array */\n"
    "    public $setting = [];\n"
    "\n"
    "    /** @var bool */\n"
    "    protected $running = false;\n"
    "\n"
    "    /** @var callable|null */\n"
    "    protected $fn;\n"
    "\n"
    "    /** @var Socket */\n"
    "    protected $socket;\n"
    "\n"
    "    /**\n"
    "     * Server constructor.\n"
    "     * @throws Exception\n"
    "     */\n"
    "    public function __construct(string $host, int $port = 0, bool $ssl = false, bool $reuse_port = false)\n"
    "    {\n"
    "        $_host = swoole_string($host);\n"
    "        if ($_host->contains('::')) {\n"
    "            $this->type = AF_INET6;\n"
    "        } elseif ($_host->startsWith('unix:/')) {\n"
    "            $host       = $_host->substr(5)->__toString();\n"
    "            $this->type = AF_UNIX;\n"
    "        } else {\n"
    "            $this->type = AF_INET;\n"
    "        }\n"
    "        $this->host = $host;\n"
    "\n"
    "        $socket = new Socket($this->type, SOCK_STREAM, 0);\n"
    "        if ($reuse_port and defined('SO_REUSEPORT')) {\n"
    "            $socket->setOption(SOL_SOCKET, SO_REUSEPORT, true);\n"
    "        }\n"
    "        if (!$socket->bind($this->host, $port)) {\n"
    "            throw new Exception(\"bind({$this->host}:{$port}) failed\", $socket->errCode);\n"
    "        }\n"
    "        if (!$socket->listen()) {\n"
    "            throw new Exception('listen() failed', $socket->errCode);\n"
    "        }\n"
    "        $this->port                = $socket->getsockname()['port'] ?? 0;\n"
    "        $this->fd                  = $socket->fd;\n"
    "        $this->socket              = $socket;\n"
    "        $this->setting['open_ssl'] = $ssl;\n"
    "    }\n"
    "\n"
    "    public function set(array $setting): void\n"
    "    {\n"
    "        $this->setting = array_merge($this->setting, $setting);\n"
    "    }\n"
    "\n"
    "    public function handle(callable $fn): void\n"
    "    {\n"
    "        $this->fn = $fn;\n"
    "    }\n"
    "\n"
    "    public function shutdown(): bool\n"
    "    {\n"
    "        $this->running = false;\n"
    "        return $this->socket->cancel();\n"
    "    }\n"
    "\n"
    "    public function start(): bool\n"
    "    {\n"
    "        $this->running = true;\n"
    "        if ($this->fn === null) {\n"
    "            $this->errCode = SOCKET_EINVAL;\n"
    "            return false;\n"
    "        }\n"
    "        $socket = $this->socket;\n"
    "        if (!$socket->setProtocol($this->setting)) {\n"
    "            $this->errCode = SOCKET_EINVAL;\n"
    "            return false;\n"
    "        }\n"
    "\n"
    "        while ($this->running) { // @phpstan-ignore while.alwaysTrue\n"
    "            $conn = null;\n"
    "            /** @var Socket $conn */\n"
    "            $conn = $socket->accept();\n"
    "            if ($conn) { // @phpstan-ignore if.alwaysTrue\n"
    "                $conn->setProtocol($this->setting);\n"
    "                if (!empty($this->setting[Constant::OPTION_OPEN_SSL])) {\n"
    "                    $fn = static function ($fn, $connection) {\n"
    "                        /* @var $connection Connection */\n"
    "                        if (!$connection->exportSocket()->sslHandshake()) {\n"
    "                            return;\n"
    "                        }\n"
    "                        $fn($connection);\n"
    "                    };\n"
    "                    $arguments = [$this->fn, new Connection($conn)];\n"
    "                } else {\n"
    "                    $fn        = $this->fn;\n"
    "                    $arguments = [new Connection($conn)];\n"
    "                }\n"
    "                if (Coroutine::create($fn, ...$arguments) < 0) {\n"
    "                    goto _wait;\n"
    "                }\n"
    "            } else {\n"
    "                if ($socket->errCode == SOCKET_EMFILE or $socket->errCode == SOCKET_ENFILE) {\n"
    "                    _wait:\n"
    "                    Coroutine::sleep(1);\n"
    "                    continue;\n"
    "                }\n"
    "                if ($socket->errCode == SOCKET_ETIMEDOUT) {\n"
    "                    continue;\n"
    "                }\n"
    "                if ($socket->errCode == SOCKET_ECANCELED) {\n"
    "                    break;\n"
    "                }\n"
    "                trigger_error(\"accept failed, Error: {$socket->errMsg}[{$socket->errCode}]\", E_USER_WARNING);\n"
    "                break;\n"
    "            }\n"
    "        }\n"
    "\n"
    "        return true; // @phpstan-ignore deadCode.unreachable\n"
    "    }\n"
    "}\n";

static const char* swoole_library_source_core_coroutine_server_connection =
    "\n"
    "/**\n"
    " * This file is part of Swoole.\n"
    " *\n"
    " * @link     https://www.swoole.com\n"
    " * @contact  team@swoole.com\n"
    " * @license  https://github.com/swoole/library/blob/master/LICENSE\n"
    " */\n"
    "\n"
    "declare(strict_types=1);\n"
    "\n"
    "namespace Swoole\\Coroutine\\Server;\n"
    "\n"
    "use Swoole\\Coroutine\\Socket;\n"
    "\n"
    "class Connection\n"
    "{\n"
    "    protected $socket;\n"
    "\n"
    "    public function __construct(Socket $conn)\n"
    "    {\n"
    "        $this->socket = $conn;\n"
    "    }\n"
    "\n"
    "    public function recv(float $timeout = 0)\n"
    "    {\n"
    "        return $this->socket->recvPacket($timeout);\n"
    "    }\n"
    "\n"
    "    public function send(string $data)\n"
    "    {\n"
    "        return $this->socket->sendAll($data);\n"
    "    }\n"
    "\n"
    "    public function close(): bool\n"
    "    {\n"
    "        return $this->socket->close();\n"
    "    }\n"
    "\n"
    "    public function exportSocket(): Socket\n"
    "    {\n"
    "        return $this->socket;\n"
    "    }\n"
    "}\n";

static const char* swoole_library_source_core_coroutine_barrier =
    "\n"
    "/**\n"
    " * This file is part of Swoole.\n"
    " *\n"
    " * @link     https://www.swoole.com\n"
    " * @contact  team@swoole.com\n"
    " * @license  https://github.com/swoole/library/blob/master/LICENSE\n"
    " */\n"
    "\n"
    "declare(strict_types=1);\n"
    "\n"
    "namespace Swoole\\Coroutine;\n"
    "\n"
    "use Swoole\\Coroutine;\n"
    "use Swoole\\Exception;\n"
    "use Swoole\\Timer;\n"
    "\n"
    "class Barrier\n"
    "{\n"
    "    private int $cid = -1;\n"
    "\n"
    "    private $timer = -1;\n"
    "\n"
    "    private static array $cancel_list = [];\n"
    "\n"
    "    public function __destruct()\n"
    "    {\n"
    "        if ($this->timer !== -1) {\n"
    "            Timer::clear($this->timer);\n"
    "            if (isset(self::$cancel_list[$this->cid])) {\n"
    "                unset(self::$cancel_list[$this->cid]);\n"
    "                return;\n"
    "            }\n"
    "        }\n"
    "        if ($this->cid !== -1 && $this->cid !== Coroutine::getCid()) {\n"
    "            Coroutine::resume($this->cid);\n"
    "        } else {\n"
    "            self::$cancel_list[$this->cid] = true;\n"
    "        }\n"
    "    }\n"
    "\n"
    "    public static function make(): self\n"
    "    {\n"
    "        return new self();\n"
    "    }\n"
    "\n"
    "    /**\n"
    "     * @param-out null $barrier\n"
    "     */\n"
    "    public static function wait(Barrier &$barrier, float $timeout = -1): void\n"
    "    {\n"
    "        if ($barrier->cid !== -1) {\n"
    "            throw new Exception('The barrier is waiting, cannot wait again.');\n"
    "        }\n"
    "        $cid          = Coroutine::getCid();\n"
    "        $barrier->cid = $cid;\n"
    "        if ($timeout > 0 && ($timeout_ms = (int) ($timeout * 1000)) > 0) {\n"
    "            $barrier->timer = Timer::after($timeout_ms, function () use ($cid) {\n"
    "                self::$cancel_list[$cid] = true;\n"
    "                Coroutine::resume($cid);\n"
    "            });\n"
    "        }\n"
    "        $barrier = null;\n"
    "        if (!isset(self::$cancel_list[$cid])) {\n"
    "            Coroutine::yield();\n"
    "        } else {\n"
    "            unset(self::$cancel_list[$cid]);\n"
    "        }\n"
    "    }\n"
    "}\n";

static const char* swoole_library_source_core_coroutine_http_client_proxy =
    "\n"
    "/**\n"
    " * This file is part of Swoole.\n"
    " *\n"
    " * @link     https://www.swoole.com\n"
    " * @contact  team@swoole.com\n"
    " * @license  https://github.com/swoole/library/blob/master/LICENSE\n"
    " */\n"
    "\n"
    "declare(strict_types=1);\n"
    "\n"
    "namespace Swoole\\Coroutine\\Http;\n"
    "\n"
    "class ClientProxy\n"
    "{\n"
    "    private array $headers;\n"
    "\n"
    "    private array $cookies;\n"
    "\n"
    "    public function __construct(private string $body, private int $statusCode, ?array $headers, ?array $cookies)\n"
    "    {\n"
    "        $this->headers = $headers ?? [];\n"
    "        $this->cookies = $cookies ?? [];\n"
    "    }\n"
    "\n"
    "    public function getBody(): string\n"
    "    {\n"
    "        return $this->body;\n"
    "    }\n"
    "\n"
    "    public function getStatusCode(): int\n"
    "    {\n"
    "        return $this->statusCode;\n"
    "    }\n"
    "\n"
    "    public function getHeaders(): array\n"
    "    {\n"
    "        return $this->headers;\n"
    "    }\n"
    "\n"
    "    public function getCookies(): array\n"
    "    {\n"
    "        return $this->cookies;\n"
    "    }\n"
    "}\n";

static const char* swoole_library_source_core_coroutine_http_functions =
    "\n"
    "/**\n"
    " * This file is part of Swoole.\n"
    " *\n"
    " * @link     https://www.swoole.com\n"
    " * @contact  team@swoole.com\n"
    " * @license  https://github.com/swoole/library/blob/master/LICENSE\n"
    " */\n"
    "\n"
    "declare(strict_types=1);\n"
    "\n"
    "namespace Swoole\\Coroutine\\Http;\n"
    "\n"
    "use Swoole\\Coroutine\\Http\\Client\\Exception;\n"
    "\n"
    "/**\n"
    " * @throws Exception\n"
    " */\n"
    "function request(\n"
    "    string $url,\n"
    "    string $method,\n"
    "    mixed $data = null,\n"
    "    ?array $options = null,\n"
    "    ?array $headers = null,\n"
    "    ?array $cookies = null,\n"
    "): ClientProxy {\n"
    "    $driver = swoole_library_get_option('http_client_driver');\n"
    "    return match ($driver) {\n"
    "        'curl'   => request_with_curl($url, $method, $data, $options, $headers, $cookies),\n"
    "        'stream' => request_with_stream($url, $method, $data, $options, $headers, $cookies),\n"
    "        default  => request_with_http_client($url, $method, $data, $options, $headers, $cookies),\n"
    "    };\n"
    "}\n"
    "\n"
    "/**\n"
    " * @throws Exception\n"
    " */\n"
    "function request_with_http_client(\n"
    "    string $url,\n"
    "    string $method,\n"
    "    mixed $data = null,\n"
    "    ?array $options = null,\n"
    "    ?array $headers = null,\n"
    "    ?array $cookies = null,\n"
    "): ClientProxy {\n"
    "    $info = parse_url($url);\n"
    "    if (empty($info['scheme'])) {\n"
    "        throw new Exception('The URL given is illegal [no scheme]');\n"
    "    }\n"
    "    if ($info['scheme'] == 'http') {\n"
    "        $client = new Client($info['host'], swoole_array_default_value($info, 'port', 80), false);\n"
    "    } elseif ($info['scheme'] == 'https') {\n"
    "        $client = new Client($info['host'], swoole_array_default_value($info, 'port', 443), true);\n"
    "    } else {\n"
    "        throw new Exception('unknown scheme \"' . $info['scheme'] . '\"');\n"
    "    }\n"
    "    $client->setMethod($method);\n"
    "    if ($data) {\n"
    "        $client->setData($data);\n"
    "    }\n"
    "    $client->set($options ?: []);\n"
    "    $client->setHeaders($headers ?: []);\n"
    "    $client->setCookies($cookies ?: []);\n"
    "    $request_url = swoole_array_default_value($info, 'path', '/');\n"
    "    if (!empty($info['query'])) {\n"
    "        $request_url .= '?' . $info['query'];\n"
    "    }\n"
    "    if ($client->execute($request_url)) {\n"
    "        return new ClientProxy(\n"
    "            $client->getBody(),\n"
    "            $client->getStatusCode(),\n"
    "            $client->getHeaders() ?: [],\n"
    "            $client->getCookies() ?: []\n"
    "        );\n"
    "    }\n"
    "    throw new Exception($client->errMsg, $client->errCode);\n"
    "}\n"
    "\n"
    "/**\n"
    " * @throws Exception\n"
    " */\n"
    "function request_with_curl(\n"
    "    string $url,\n"
    "    string $method,\n"
    "    mixed $data = null,\n"
    "    ?array $options = null,\n"
    "    ?array $headers = null,\n"
    "    ?array $cookies = null,\n"
    "): ClientProxy {\n"
    "    $ch = curl_init($url);\n"
    "    if (empty($ch)) {\n"
    "        throw new Exception('failed to curl_init');\n"
    "    }\n"
    "    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);\n"
    "    curl_setopt($ch, CURLOPT_CUSTOMREQUEST, strtoupper($method));\n"
    "    $responseHeaders = $responseCookies = [];\n"
    "    curl_setopt($ch, CURLOPT_HEADERFUNCTION, function ($ch, $header) use (&$responseHeaders, &$responseCookies) {\n"
    "        $len    = strlen($header);\n"
    "        $header = explode(':', $header, 2);\n"
    "        if (count($header) < 2) {\n"
    "            return $len;\n"
    "        }\n"
    "        $headerKey = strtolower(trim($header[0]));\n"
    "        if ($headerKey == 'set-cookie') {\n"
    "            [$k, $v]             = explode('=', $header[1]);\n"
    "            $responseCookies[$k] = $v;\n"
    "        } else {\n"
    "            $responseHeaders[$headerKey][] = trim($header[1]);\n"
    "        }\n"
    "        return $len;\n"
    "    });\n"
    "    if ($data) {\n"
    "        curl_setopt($ch, CURLOPT_POSTFIELDS, $data);\n"
    "    }\n"
    "    if ($headers) {\n"
    "        curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);\n"
    "    }\n"
    "    if ($cookies) {\n"
    "        $cookie_str = '';\n"
    "        foreach ($cookies as $k => $v) {\n"
    "            $cookie_str .= \"{$k}={$v}; \";\n"
    "        }\n"
    "        curl_setopt($ch, CURLOPT_COOKIE, $cookie_str);\n"
    "    }\n"
    "    if (isset($options['timeout'])) {\n"
    "        if (is_float($options['timeout'])) {\n"
    "            curl_setopt($ch, CURLOPT_TIMEOUT_MS, intval($options['timeout'] * 1000));\n"
    "            curl_setopt($ch, CURLOPT_CONNECTTIMEOUT_MS, intval($options['timeout'] * 1000));\n"
    "        } else {\n"
    "            curl_setopt($ch, CURLOPT_TIMEOUT, intval($options['timeout']));\n"
    "            curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, intval($options['timeout']));\n"
    "        }\n"
    "    }\n"
    "    if (isset($options['connect_timeout'])) {\n"
    "        if (is_float($options['connect_timeout'])) {\n"
    "            curl_setopt($ch, CURLOPT_CONNECTTIMEOUT_MS, intval($options['connect_timeout'] * 1000));\n"
    "        } else {\n"
    "            curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, intval($options['connect_timeout']));\n"
    "        }\n"
    "    }\n"
    "    $body = curl_exec($ch);\n"
    "    if ($body !== false) {\n"
    "        return new ClientProxy($body, curl_getinfo($ch, CURLINFO_RESPONSE_CODE), $responseHeaders, $responseCookies);\n"
    "    }\n"
    "    throw new Exception(curl_error($ch), curl_errno($ch));\n"
    "}\n"
    "\n"
    "/**\n"
    " * @throws Exception\n"
    " */\n"
    "function request_with_stream(\n"
    "    string $url,\n"
    "    string $method,\n"
    "    mixed $data = null,\n"
    "    ?array $options = null,\n"
    "    ?array $headers = null,\n"
    "    ?array $cookies = null,\n"
    "): ClientProxy {\n"
    "    $stream_options = [\n"
    "        'http' => [\n"
    "            'method' => $method,\n"
    "        ],\n"
    "    ];\n"
    "    $headerStr = '';\n"
    "    if ($headers) {\n"
    "        foreach ($headers as $k => $v) {\n"
    "            $headerStr .= \"{$k}: {$v}\\r\\n\";\n"
    "        }\n"
    "    }\n"
    "    if ($cookies) {\n"
    "        foreach ($cookies as $k => $v) {\n"
    "            $headerStr .= \"Cookie: {$k}={$v}\\r\\n\";\n"
    "        }\n"
    "    }\n"
    "    if (isset($options['timeout'])) {\n"
    "        $stream_options['http']['timeout'] = intval($options['timeout']);\n"
    "    }\n"
    "    if ($data) {\n"
    "        if (is_array($data)) {\n"
    "            $headerStr .= \"Content-type: application/x-www-form-urlencoded\\r\\n\";\n"
    "            $stream_options['http']['content'] = http_build_query($data);\n"
    "        } else {\n"
    "            $stream_options['http']['content'] = strval($data);\n"
    "        }\n"
    "    }\n"
    "    if ($headerStr) {\n"
    "        $stream_options['http']['header'] = $headerStr;\n"
    "    }\n"
    "    $body = file_get_contents($url, false, stream_context_create($stream_options));\n"
    "    if ($body) {\n"
    "        return new ClientProxy($body, 200, [], []);\n"
    "    }\n"
    "    $error = error_get_last();\n"
    "    throw new Exception($error['message']);\n"
    "}\n"
    "\n"
    "/**\n"
    " * @throws Exception\n"
    " */\n"
    "function post(string $url, mixed $data, ?array $options = null, ?array $headers = null, ?array $cookies = null): ClientProxy\n"
    "{\n"
    "    return request($url, 'POST', $data, $options, $headers, $cookies);\n"
    "}\n"
    "\n"
    "/**\n"
    " * @throws Exception\n"
    " */\n"
    "function get(string $url, ?array $options = null, ?array $headers = null, ?array $cookies = null): ClientProxy\n"
    "{\n"
    "    return request($url, 'GET', null, $options, $headers, $cookies);\n"
    "}\n";

static const char* swoole_library_source_core_connection_pool =
    "\n"
    "/**\n"
    " * This file is part of Swoole.\n"
    " *\n"
    " * @link     https://www.swoole.com\n"
    " * @contact  team@swoole.com\n"
    " * @license  https://github.com/swoole/library/blob/master/LICENSE\n"
    " */\n"
    "\n"
    "declare(strict_types=1);\n"
    "\n"
    "namespace Swoole;\n"
    "\n"
    "use Swoole\\Coroutine\\Channel;\n"
    "\n"
    "class ConnectionPool\n"
    "{\n"
    "    public const DEFAULT_SIZE = 64;\n"
    "\n"
    "    protected ?Channel $pool;\n"
    "\n"
    "    /** @var callable */\n"
    "    protected $constructor;\n"
    "\n"
    "    protected int $size;\n"
    "\n"
    "    protected int $num = 0;\n"
    "\n"
    "    public function __construct(callable $constructor, int $size = self::DEFAULT_SIZE, protected ?string $proxy = null)\n"
    "    {\n"
    "        $this->pool        = new Channel($this->size = $size);\n"
    "        $this->constructor = $constructor;\n"
    "    }\n"
    "\n"
    "    public function fill(): void\n"
    "    {\n"
    "        while ($this->size > $this->num) {\n"
    "            $this->make();\n"
    "        }\n"
    "    }\n"
    "\n"
    "    /**\n"
    "     * Get a connection from the pool.\n"
    "     *\n"
    "     * @param float $timeout > 0 means waiting for the specified number of seconds. other means no waiting.\n"
    "     * @return mixed|false Returns a connection object from the pool, or false if the pool is full and the timeout is reached.\n"
    "     */\n"
    "    public function get(float $timeout = -1)\n"
    "    {\n"
    "        if ($this->pool === null) {\n"
    "            throw new \\RuntimeException('Pool has been closed');\n"
    "        }\n"
    "        if ($this->pool->isEmpty() && $this->num < $this->size) {\n"
    "            $this->make();\n"
    "        }\n"
    "        return $this->pool->pop($timeout);\n"
    "    }\n"
    "\n"
    "    public function put($connection): void\n"
    "    {\n"
    "        if ($this->pool === null) {\n"
    "            return;\n"
    "        }\n"
    "        if ($connection !== null) {\n"
    "            $this->pool->push($connection);\n"
    "        } else {\n"
    "            /* connection broken */\n"
    "            $this->num -= 1;\n"
    "            $this->make();\n"
    "        }\n"
    "    }\n"
    "\n"
    "    public function close(): void\n"
    "    {\n"
    "        $this->pool->close();\n"
    "        $this->pool = null;\n"
    "        $this->num  = 0;\n"
    "    }\n"
    "\n"
    "    protected function make(): void\n"
    "    {\n"
    "        $this->num++;\n"
    "        try {\n"
    "            if ($this->proxy) {\n"
    "                $connection = new $this->proxy($this->constructor);\n"
    "            } else {\n"
    "                $constructor = $this->constructor;\n"
    "                $connection  = $constructor();\n"
    "            }\n"
    "        } catch (\\Throwable $throwable) {\n"
    "            $this->num--;\n"
    "            throw $throwable;\n"
    "        }\n"
    "        $this->put($connection);\n"
    "    }\n"
    "}\n";

static const char* swoole_library_source_core_database_object_proxy =
    "\n"
    "/**\n"
    " * This file is part of Swoole.\n"
    " *\n"
    " * @link     https://www.swoole.com\n"
    " * @contact  team@swoole.com\n"
    " * @license  https://github.com/swoole/library/blob/master/LICENSE\n"
    " */\n"
    "\n"
    "declare(strict_types=1);\n"
    "\n"
    "namespace Swoole\\Database;\n"
    "\n"
    "class ObjectProxy extends \\Swoole\\ObjectProxy\n"
    "{\n"
    "    final public function __clone(): void\n"
    "    {\n"
    "        throw new \\Error('Trying to clone an uncloneable database proxy object');\n"
    "    }\n"
    "}\n";

static const char* swoole_library_source_core_database_mysqli_config =
    "\n"
    "/**\n"
    " * This file is part of Swoole.\n"
    " *\n"
    " * @link     https://www.swoole.com\n"
    " * @contact  team@swoole.com\n"
    " * @license  https://github.com/swoole/library/blob/master/LICENSE\n"
    " */\n"
    "\n"
    "declare(strict_types=1);\n"
    "\n"
    "namespace Swoole\\Database;\n"
    "\n"
    "class MysqliConfig\n"
    "{\n"
    "    protected string $host = '127.0.0.1';\n"
    "\n"
    "    protected int $port = 3306;\n"
    "\n"
    "    protected ?string $unixSocket;\n"
    "\n"
    "    protected string $dbname = 'test';\n"
    "\n"
    "    protected string $charset = 'utf8mb4';\n"
    "\n"
    "    protected string $username = 'root';\n"
    "\n"
    "    protected string $password = 'root';\n"
    "\n"
    "    protected array $options = [];\n"
    "\n"
    "    public function getHost(): string\n"
    "    {\n"
    "        return $this->host;\n"
    "    }\n"
    "\n"
    "    public function withHost(string $host): self\n"
    "    {\n"
    "        $this->host = $host;\n"
    "        return $this;\n"
    "    }\n"
    "\n"
    "    public function getPort(): int\n"
    "    {\n"
    "        return $this->port;\n"
    "    }\n"
    "\n"
    "    public function getUnixSocket(): ?string\n"
    "    {\n"
    "        return $this->unixSocket ?? null;\n"
    "    }\n"
    "\n"
    "    public function withUnixSocket(?string $unixSocket): self\n"
    "    {\n"
    "        $this->unixSocket = $unixSocket;\n"
    "        return $this;\n"
    "    }\n"
    "\n"
    "    public function withPort(int $port): self\n"
    "    {\n"
    "        $this->port = $port;\n"
    "        return $this;\n"
    "    }\n"
    "\n"
    "    public function getDbname(): string\n"
    "    {\n"
    "        return $this->dbname;\n"
    "    }\n"
    "\n"
    "    public function withDbname(string $dbname): self\n"
    "    {\n"
    "        $this->dbname = $dbname;\n"
    "        return $this;\n"
    "    }\n"
    "\n"
    "    public function getCharset(): string\n"
    "    {\n"
    "        return $this->charset;\n"
    "    }\n"
    "\n"
    "    public function withCharset(string $charset): self\n"
    "    {\n"
    "        $this->charset = $charset;\n"
    "        return $this;\n"
    "    }\n"
    "\n"
    "    public function getUsername(): string\n"
    "    {\n"
    "        return $this->username;\n"
    "    }\n"
    "\n"
    "    public function withUsername(string $username): self\n"
    "    {\n"
    "        $this->username = $username;\n"
    "        return $this;\n"
    "    }\n"
    "\n"
    "    public function getPassword(): string\n"
    "    {\n"
    "        return $this->password;\n"
    "    }\n"
    "\n"
    "    public function withPassword(string $password): self\n"
    "    {\n"
    "        $this->password = $password;\n"
    "        return $this;\n"
    "    }\n"
    "\n"
    "    public function getOptions(): array\n"
    "    {\n"
    "        return $this->options;\n"
    "    }\n"
    "\n"
    "    public function withOptions(array $options): self\n"
    "    {\n"
    "        $this->options = $options;\n"
    "        return $this;\n"
    "    }\n"
    "}\n";

static const char* swoole_library_source_core_database_mysqli_exception =
    "\n"
    "/**\n"
    " * This file is part of Swoole.\n"
    " *\n"
    " * @link     https://www.swoole.com\n"
    " * @contact  team@swoole.com\n"
    " * @license  https://github.com/swoole/library/blob/master/LICENSE\n"
    " */\n"
    "\n"
    "declare(strict_types=1);\n"
    "\n"
    "namespace Swoole\\Database;\n"
    "\n"
    "class MysqliException extends \\Exception\n"
    "{\n"
    "}\n";

static const char* swoole_library_source_core_database_mysqli_pool =
    "\n"
    "/**\n"
    " * This file is part of Swoole.\n"
    " *\n"
    " * @link     https://www.swoole.com\n"
    " * @contact  team@swoole.com\n"
    " * @license  https://github.com/swoole/library/blob/master/LICENSE\n"
    " */\n"
    "\n"
    "declare(strict_types=1);\n"
    "\n"
    "namespace Swoole\\Database;\n"
    "\n"
    "use mysqli;\n"
    "use Swoole\\ConnectionPool;\n"
    "\n"
    "/**\n"
    " * @method \\mysqli|MysqliProxy get()\n"
    " * @method void put(mysqli|MysqliProxy $connection)\n"
    " */\n"
    "class MysqliPool extends ConnectionPool\n"
    "{\n"
    "    public function __construct(protected MysqliConfig $config, int $size = self::DEFAULT_SIZE)\n"
    "    {\n"
    "        parent::__construct(function () {\n"
    "            $mysqli = new \\mysqli();\n"
    "            foreach ($this->config->getOptions() as $option => $value) {\n"
    "                $mysqli->set_opt($option, $value);\n"
    "            }\n"
    "            $mysqli->real_connect(\n"
    "                $this->config->getHost(),\n"
    "                $this->config->getUsername(),\n"
    "                $this->config->getPassword(),\n"
    "                $this->config->getDbname(),\n"
    "                $this->config->getPort(),\n"
    "                $this->config->getUnixSocket()\n"
    "            );\n"
    "            if ($mysqli->connect_errno) {\n"
    "                throw new MysqliException($mysqli->connect_error, $mysqli->connect_errno);\n"
    "            }\n"
    "            $mysqli->set_charset($this->config->getCharset());\n"
    "            return $mysqli;\n"
    "        }, $size, MysqliProxy::class);\n"
    "    }\n"
    "}\n";

static const char* swoole_library_source_core_database_mysqli_proxy =
    "\n"
    "/**\n"
    " * This file is part of Swoole.\n"
    " *\n"
    " * @link     https://www.swoole.com\n"
    " * @contact  team@swoole.com\n"
    " * @license  https://github.com/swoole/library/blob/master/LICENSE\n"
    " */\n"
    "\n"
    "declare(strict_types=1);\n"
    "\n"
    "namespace Swoole\\Database;\n"
    "\n"
    "/**\n"
    " * @method \\mysqli __getObject()\n"
    " */\n"
    "class MysqliProxy extends ObjectProxy\n"
    "{\n"
    "    public const IO_METHOD_REGEX = '/^autocommit|begin_transaction|change_user|close|commit|kill|multi_query|ping|prepare|query|real_connect|real_query|reap_async_query|refresh|release_savepoint|rollback|savepoint|select_db|send_query|set_charset|ssl_set$/i';\n"
    "\n"
    "    public const IO_ERRORS = [\n"
    "        2002, // MYSQLND_CR_CONNECTION_ERROR\n"
    "        2006, // MYSQLND_CR_SERVER_GONE_ERROR\n"
    "        2013, // MYSQLND_CR_SERVER_LOST\n"
    "    ];\n"
    "\n"
    "    /** @var \\mysqli */\n"
    "    protected $__object;\n"
    "\n"
    "    protected string $charsetContext;\n"
    "\n"
    "    protected array $setOptContext = [];\n"
    "\n"
    "    protected array $changeUserContext;\n"
    "\n"
    "    /** @var callable */\n"
    "    protected $constructor;\n"
    "\n"
    "    protected int $round = 0;\n"
    "\n"
    "    public function __construct(callable $constructor)\n"
    "    {\n"
    "        parent::__construct($constructor());\n"
    "        $this->constructor = $constructor;\n"
    "    }\n"
    "\n"
    "    public function __call(string $name, array $arguments)\n"
    "    {\n"
    "        for ($n = 3; $n--;) {\n"
    "            $ret = @$this->__object->{$name}(...$arguments);\n"
    "            if ($ret === false) {\n"
    "                /* non-IO method */\n"
    "                if (!preg_match(static::IO_METHOD_REGEX, $name)) {\n"
    "                    break;\n"
    "                }\n"
    "                /* no more chances or non-IO failures */\n"
    "                if (!in_array($this->__object->errno, static::IO_ERRORS, true) || ($n === 0)) {\n"
    "                    throw new MysqliException($this->__object->error, $this->__object->errno);\n"
    "                }\n"
    "                $this->reconnect();\n"
    "                continue;\n"
    "            }\n"
    "            if (strcasecmp($name, 'prepare') === 0) {\n"
    "                $ret = new MysqliStatementProxy($ret, $arguments[0], $this);\n"
    "            } elseif (strcasecmp($name, 'stmt_init') === 0) {\n"
    "                $ret = new MysqliStatementProxy($ret, null, $this);\n"
    "            }\n"
    "            break;\n"
    "        }\n"
    "        /* @noinspection PhpUndefinedVariableInspection */\n"
    "        return $ret;\n"
    "    }\n"
    "\n"
    "    public function getRound(): int\n"
    "    {\n"
    "        return $this->round;\n"
    "    }\n"
    "\n"
    "    public function reconnect(): void\n"
    "    {\n"
    "        $constructor = $this->constructor;\n"
    "        parent::__construct($constructor());\n"
    "        $this->round++;\n"
    "        /* restore context */\n"
    "        if (!empty($this->charsetContext)) {\n"
    "            $this->__object->set_charset($this->charsetContext);\n"
    "        }\n"
    "        foreach ($this->setOptContext as $opt => $val) {\n"
    "            $this->__object->set_opt($opt, $val);\n"
    "        }\n"
    "        if (!empty($this->changeUserContext)) {\n"
    "            $this->__object->change_user(...$this->changeUserContext);\n"
    "        }\n"
    "    }\n"
    "\n"
    "    public function options(int $option, $value): bool\n"
    "    {\n"
    "        $this->setOptContext[$option] = $value;\n"
    "        return $this->__object->options($option, $value);\n"
    "    }\n"
    "\n"
    "    public function set_opt(int $option, $value): bool\n"
    "    {\n"
    "        return $this->options($option, $value);\n"
    "    }\n"
    "\n"
    "    public function set_charset(string $charset): bool\n"
    "    {\n"
    "        $this->charsetContext = $charset;\n"
    "        return $this->__object->set_charset($charset);\n"
    "    }\n"
    "\n"
    "    public function change_user(string $user, string $password, ?string $database): bool\n"
    "    {\n"
    "        $this->changeUserContext = [$user, $password, $database];\n"
    "        return $this->__object->change_user($user, $password, $database);\n"
    "    }\n"
    "}\n";

static const char* swoole_library_source_core_database_mysqli_statement_proxy =
    "\n"
    "/**\n"
    " * This file is part of Swoole.\n"
    " *\n"
    " * @link     https://www.swoole.com\n"
    " * @contact  team@swoole.com\n"
    " * @license  https://github.com/swoole/library/blob/master/LICENSE\n"
    " */\n"
    "\n"
    "declare(strict_types=1);\n"
    "\n"
    "namespace Swoole\\Database;\n"
    "\n"
    "class MysqliStatementProxy extends ObjectProxy\n"
    "{\n"
    "    public const IO_METHOD_REGEX = '/^close|execute|fetch|prepare$/i';\n"
    "\n"
    "    /** @var \\mysqli_stmt */\n"
    "    protected $__object;\n"
    "\n"
    "    protected ?string $queryString;\n"
    "\n"
    "    protected array $attrSetContext = [];\n"
    "\n"
    "    protected array $bindParamContext;\n"
    "\n"
    "    protected array $bindResultContext;\n"
    "\n"
    "    protected MysqliProxy $parent;\n"
    "\n"
    "    protected int $parentRound;\n"
    "\n"
    "    public function __construct(\\mysqli_stmt $object, ?string $queryString, MysqliProxy $parent)\n"
    "    {\n"
    "        parent::__construct($object);\n"
    "        $this->queryString = $queryString;\n"
    "        $this->parent      = $parent;\n"
    "        $this->parentRound = $parent->getRound();\n"
    "    }\n"
    "\n"
    "    public function __call(string $name, array $arguments)\n"
    "    {\n"
    "        for ($n = 3; $n--;) {\n"
    "            $ret = @$this->__object->{$name}(...$arguments);\n"
    "            if ($ret === false) {\n"
    "                /* non-IO method */\n"
    "                if (!preg_match(static::IO_METHOD_REGEX, $name)) {\n"
    "                    break;\n"
    "                }\n"
    "                /* no more chances or non-IO failures or in transaction */\n"
    "                if (!in_array($this->__object->errno, $this->parent::IO_ERRORS, true) || ($n === 0)) {\n"
    "                    throw new MysqliException($this->__object->error, $this->__object->errno);\n"
    "                }\n"
    "                if ($this->parent->getRound() === $this->parentRound) {\n"
    "                    /* if not equal, parent has reconnected */\n"
    "                    $this->parent->reconnect();\n"
    "                }\n"
    "                $parent         = $this->parent->__getObject();\n"
    "                $this->__object = $this->queryString ? @$parent->prepare($this->queryString) : @$parent->stmt_init();\n"
    "                if ($this->__object === false) {\n"
    "                    throw new MysqliException($parent->error, $parent->errno);\n"
    "                }\n"
    "                if (!empty($this->bindParamContext)) {\n"
    "                    $this->__object->bind_param($this->bindParamContext[0], ...$this->bindParamContext[1]);\n"
    "                }\n"
    "                if (!empty($this->bindResultContext)) {\n"
    "                    $this->__object->bind_result($this->bindResultContext);\n"
    "                }\n"
    "                foreach ($this->attrSetContext as $attr => $value) {\n"
    "                    $this->__object->attr_set($attr, $value);\n"
    "                }\n"
    "                continue;\n"
    "            }\n"
    "            if (strcasecmp($name, 'prepare') === 0) {\n"
    "                $this->queryString = $arguments[0];\n"
    "            }\n"
    "            break;\n"
    "        }\n"
    "        /* @noinspection PhpUndefinedVariableInspection */\n"
    "        return $ret;\n"
    "    }\n"
    "\n"
    "    public function attr_set($attr, $mode): bool\n"
    "    {\n"
    "        $this->attrSetContext[$attr] = $mode;\n"
    "        return $this->__object->attr_set($attr, $mode);\n"
    "    }\n"
    "\n"
    "    public function bind_param($types, &...$arguments): bool\n"
    "    {\n"
    "        $this->bindParamContext = [$types, $arguments];\n"
    "        return $this->__object->bind_param($types, ...$arguments);\n"
    "    }\n"
    "\n"
    "    public function bind_result(&...$arguments): bool\n"
    "    {\n"
    "        $this->bindResultContext = $arguments;\n"
    "        return $this->__object->bind_result(...$arguments);\n"
    "    }\n"
    "}\n";

static const char* swoole_library_source_core_database_detects_lost_connections =
    "\n"
    "/**\n"
    " * This file is part of Swoole.\n"
    " *\n"
    " * @link     https://www.swoole.com\n"
    " * @contact  team@swoole.com\n"
    " * @license  https://github.com/swoole/library/blob/master/LICENSE\n"
    " */\n"
    "\n"
    "declare(strict_types=1);\n"
    "\n"
    "namespace Swoole\\Database;\n"
    "\n"
    "class DetectsLostConnections\n"
    "{\n"
    "    /**\n"
    "     * @var array<string>\n"
    "     */\n"
    "    private const ERROR_MESSAGES = [\n"
    "        'server has gone away',\n"
    "        'no connection to the server',\n"
    "        'Lost connection',\n"
    "        'is dead or not enabled',\n"
    "        'Error while sending',\n"
    "        'decryption failed or bad record mac',\n"
    "        'server closed the connection unexpectedly',\n"
    "        'SSL connection has been closed unexpectedly',\n"
    "        'Error writing data to the connection',\n"
    "        'Resource deadlock avoided',\n"
    "        'Transaction() on null',\n"
    "        'child connection forced to terminate due to client_idle_limit',\n"
    "        'query_wait_timeout',\n"
    "        'reset by peer',\n"
    "        'Physical connection is not usable',\n"
    "        'TCP Provider: Error code 0x68',\n"
    "        'ORA-03113',\n"
    "        'ORA-03114',\n"
    "        'Packets out of order. Expected',\n"
    "        'Adaptive Server connection failed',\n"
    "        'Communication link failure',\n"
    "        'connection is no longer usable',\n"
    "        'Login timeout expired',\n"
    "        'SQLSTATE[HY000] [2002] Connection refused',\n"
    "        'running with the --read-only option so it cannot execute this statement',\n"
    "        'The connection is broken and recovery is not possible. The connection is marked by the client driver as unrecoverable. No attempt was made to restore the connection.',\n"
    "        'SQLSTATE[HY000] [2002] php_network_getaddresses: getaddrinfo failed: Try again',\n"
    "        'SQLSTATE[HY000] [2002] php_network_getaddresses: getaddrinfo failed: Name or service not known',\n"
    "        'SQLSTATE[HY000] [2002] php_network_getaddresses: getaddrinfo for',\n"
    "        'SQLSTATE[HY000]: General error: 7 SSL SYSCALL error: EOF detected',\n"
    "        'SQLSTATE[HY000]: General error: 1105 The last transaction was aborted due to Seamless Scaling. Please retry.',\n"
    "        'Temporary failure in name resolution',\n"
    "        'SQLSTATE[08S01]: Communication link failure',\n"
    "        'SQLSTATE[08006] [7] could not connect to server: Connection refused Is the server running on host',\n"
    "        'SQLSTATE[HY000]: General error: 7 SSL SYSCALL error: No route to host',\n"
    "        'The client was disconnected by the server because of inactivity. See wait_timeout and interactive_timeout for configuring this behavior.',\n"
    "        'SQLSTATE[08006] [7] could not translate host name',\n"
    "        'TCP Provider: Error code 0x274C',\n"
    "        'SQLSTATE[HY000] [2002] No such file or directory',\n"
    "        'Reason: Server is in script upgrade mode. Only administrator can connect at this time.',\n"
    "        'Unknown $curl_error_code: 77',\n"
    "        'SQLSTATE[08006] [7] SSL error: sslv3 alert unexpected message',\n"
    "        'SQLSTATE[08006] [7] unrecognized SSL error code:',\n"
    "        'SQLSTATE[HY000] [2002] No connection could be made because the target machine actively refused it',\n"
    "        'Broken pipe',\n"
    "        // PDO::prepare(): Send of 77 bytes failed with errno=110 Operation timed out\n"
    "        // SSL: Handshake timed out\n"
    "        // SSL: Operation timed out\n"
    "        // SSL: Connection timed out\n"
    "        // SQLSTATE[HY000] [2002] Connection timed out\n"
    "        'timed out',\n"
    "        'Error reading result',\n"
    "    ];\n"
    "\n"
    "    public static function causedByLostConnection(\\Throwable $e): bool\n"
    "    {\n"
    "        $message = $e->getMessage();\n"
    "        foreach (self::ERROR_MESSAGES as $needle) {\n"
    "            if (mb_strpos($message, $needle) !== false) {\n"
    "                return true;\n"
    "            }\n"
    "        }\n"
    "\n"
    "        return false;\n"
    "    }\n"
    "}\n";

static const char* swoole_library_source_core_database_pdo_config =
    "\n"
    "/**\n"
    " * This file is part of Swoole.\n"
    " *\n"
    " * @link     https://www.swoole.com\n"
    " * @contact  team@swoole.com\n"
    " * @license  https://github.com/swoole/library/blob/master/LICENSE\n"
    " */\n"
    "\n"
    "declare(strict_types=1);\n"
    "\n"
    "namespace Swoole\\Database;\n"
    "\n"
    "class PDOConfig\n"
    "{\n"
    "    public const DRIVER_MYSQL = 'mysql';\n"
    "\n"
    "    protected string $driver = self::DRIVER_MYSQL;\n"
    "\n"
    "    protected string $host = '127.0.0.1';\n"
    "\n"
    "    protected int $port = 3306;\n"
    "\n"
    "    protected ?string $unixSocket;\n"
    "\n"
    "    protected string $dbname = 'test';\n"
    "\n"
    "    protected string $charset = 'utf8mb4';\n"
    "\n"
    "    protected string $username = 'root';\n"
    "\n"
    "    protected string $password = 'root';\n"
    "\n"
    "    protected array $options = [];\n"
    "\n"
    "    public function getDriver(): string\n"
    "    {\n"
    "        return $this->driver;\n"
    "    }\n"
    "\n"
    "    public function withDriver(string $driver): self\n"
    "    {\n"
    "        $this->driver = $driver;\n"
    "        return $this;\n"
    "    }\n"
    "\n"
    "    public function getHost(): string\n"
    "    {\n"
    "        return $this->host;\n"
    "    }\n"
    "\n"
    "    public function withHost(string $host): self\n"
    "    {\n"
    "        $this->host = $host;\n"
    "        return $this;\n"
    "    }\n"
    "\n"
    "    public function getPort(): int\n"
    "    {\n"
    "        return $this->port;\n"
    "    }\n"
    "\n"
    "    public function hasUnixSocket(): bool\n"
    "    {\n"
    "        return !empty($this->unixSocket);\n"
    "    }\n"
    "\n"
    "    public function getUnixSocket(): ?string\n"
    "    {\n"
    "        return $this->unixSocket ?? null;\n"
    "    }\n"
    "\n"
    "    public function withUnixSocket(?string $unixSocket): self\n"
    "    {\n"
    "        $this->unixSocket = $unixSocket;\n"
    "        return $this;\n"
    "    }\n"
    "\n"
    "    public function withPort(int $port): self\n"
    "    {\n"
    "        $this->port = $port;\n"
    "        return $this;\n"
    "    }\n"
    "\n"
    "    public function getDbname(): string\n"
    "    {\n"
    "        return $this->dbname;\n"
    "    }\n"
    "\n"
    "    public function withDbname(string $dbname): self\n"
    "    {\n"
    "        $this->dbname = $dbname;\n"
    "        return $this;\n"
    "    }\n"
    "\n"
    "    public function getCharset(): string\n"
    "    {\n"
    "        return $this->charset;\n"
    "    }\n"
    "\n"
    "    public function withCharset(string $charset): self\n"
    "    {\n"
    "        $this->charset = $charset;\n"
    "        return $this;\n"
    "    }\n"
    "\n"
    "    public function getUsername(): string\n"
    "    {\n"
    "        return $this->username;\n"
    "    }\n"
    "\n"
    "    public function withUsername(string $username): self\n"
    "    {\n"
    "        $this->username = $username;\n"
    "        return $this;\n"
    "    }\n"
    "\n"
    "    public function getPassword(): string\n"
    "    {\n"
    "        return $this->password;\n"
    "    }\n"
    "\n"
    "    public function withPassword(string $password): self\n"
    "    {\n"
    "        $this->password = $password;\n"
    "        return $this;\n"
    "    }\n"
    "\n"
    "    public function getOptions(): array\n"
    "    {\n"
    "        return $this->options;\n"
    "    }\n"
    "\n"
    "    public function withOptions(array $options): self\n"
    "    {\n"
    "        $this->options = $options;\n"
    "        return $this;\n"
    "    }\n"
    "\n"
    "    /**\n"
    "     * Returns the list of available drivers\n"
    "     *\n"
    "     * @return string[]\n"
    "     */\n"
    "    public static function getAvailableDrivers(): array\n"
    "    {\n"
    "        return [\n"
    "            self::DRIVER_MYSQL,\n"
    "        ];\n"
    "    }\n"
    "}\n";

static const char* swoole_library_source_core_database_pdo_pool =
    "\n"
    "/**\n"
    " * This file is part of Swoole.\n"
    " *\n"
    " * @link     https://www.swoole.com\n"
    " * @contact  team@swoole.com\n"
    " * @license  https://github.com/swoole/library/blob/master/LICENSE\n"
    " */\n"
    "\n"
    "declare(strict_types=1);\n"
    "\n"
    "namespace Swoole\\Database;\n"
    "\n"
    "use PDO;\n"
    "use Swoole\\ConnectionPool;\n"
    "\n"
    "/**\n"
    " * @method void put(PDO|PDOProxy $connection)\n"
    " */\n"
    "class PDOPool extends ConnectionPool\n"
    "{\n"
    "    public function __construct(protected PDOConfig $config, int $size = self::DEFAULT_SIZE)\n"
    "    {\n"
    "        parent::__construct(function () {\n"
    "            $driver = $this->config->getDriver();\n"
    "            if ($driver === 'sqlite') {\n"
    "                return new \\PDO($this->createDSN('sqlite'));\n"
    "            }\n"
    "\n"
    "            return new \\PDO($this->createDSN($driver), $this->config->getUsername(), $this->config->getPassword(), $this->config->getOptions());\n"
    "        }, $size, PDOProxy::class);\n"
    "    }\n"
    "\n"
    "    /**\n"
    "     * Get a PDO connection from the pool. The PDO connection (a PDO object) is wrapped in a PDOProxy object returned.\n"
    "     *\n"
    "     * @param float $timeout > 0 means waiting for the specified number of seconds. other means no waiting.\n"
    "     * @return PDOProxy|false Returns a PDOProxy object from the pool, or false if the pool is full and the timeout is reached.\n"
    "     *                        {@inheritDoc}\n"
    "     */\n"
    "    public function get(float $timeout = -1)\n"
    "    {\n"
    "        /* @var \\Swoole\\Database\\PDOProxy|false $pdo */\n"
    "        $pdo = parent::get($timeout);\n"
    "        if ($pdo === false) {\n"
    "            return false;\n"
    "        }\n"
    "\n"
    "        $pdo->reset();\n"
    "\n"
    "        return $pdo;\n"
    "    }\n"
    "\n"
    "    /**\n"
    "     * @purpose create DSN\n"
    "     * @throws \\Exception\n"
    "     */\n"
    "    private function createDSN(string $driver): string\n"
    "    {\n"
    "        switch ($driver) {\n"
    "            case 'mysql':\n"
    "                if ($this->config->hasUnixSocket()) {\n"
    "                    $dsn = \"mysql:unix_socket={$this->config->getUnixSocket()};dbname={$this->config->getDbname()};charset={$this->config->getCharset()}\";\n"
    "                } else {\n"
    "                    $dsn = \"mysql:host={$this->config->getHost()};port={$this->config->getPort()};dbname={$this->config->getDbname()};charset={$this->config->getCharset()}\";\n"
    "                }\n"
    "                break;\n"
    "            case 'pgsql':\n"
    "                $dsn = 'pgsql:host=' . ($this->config->hasUnixSocket() ? $this->config->getUnixSocket() : $this->config->getHost()) . \";port={$this->config->getPort()};dbname={$this->config->getDbname()}\";\n"
    "                break;\n"
    "            case 'oci':\n"
    "                $dsn = 'oci:dbname=' . ($this->config->hasUnixSocket() ? $this->config->getUnixSocket() : $this->config->getHost()) . ':' . $this->config->getPort() . '/' . $this->config->getDbname() . ';charset=' . $this->config->getCharset();\n"
    "                break;\n"
    "            case 'sqlite':\n"
    "                // There are three types of SQLite databases: databases on disk, databases in memory, and temporary\n"
    "                // databases (which are deleted when the connections are closed). It doesn't make sense to use\n"
    "                // connection pool for the latter two types of databases, because each connection connects to a\n"
    "                //different in-memory or temporary SQLite database.\n"
    "                if ($this->config->getDbname() === '') {\n"
    "                    throw new \\Exception('Connection pool in Swoole does not support temporary SQLite databases.');\n"
    "                }\n"
    "                if ($this->config->getDbname() === ':memory:') {\n"
    "                    throw new \\Exception('Connection pool in Swoole does not support creating SQLite databases in memory.');\n"
    "                }\n"
    "                $dsn = 'sqlite:' . $this->config->getDbname();\n"
    "                break;\n"
    "            default:\n"
    "                throw new \\Exception('Unsupported Database Driver:' . $driver);\n"
    "        }\n"
    "        return $dsn;\n"
    "    }\n"
    "}\n";

static const char* swoole_library_source_core_database_pdo_proxy =
    "\n"
    "/**\n"
    " * This file is part of Swoole.\n"
    " *\n"
    " * @link     https://www.swoole.com\n"
    " * @contact  team@swoole.com\n"
    " * @license  https://github.com/swoole/library/blob/master/LICENSE\n"
    " */\n"
    "\n"
    "declare(strict_types=1);\n"
    "\n"
    "namespace Swoole\\Database;\n"
    "\n"
    "/**\n"
    " * @method \\PDO __getObject()\n"
    " */\n"
    "class PDOProxy extends ObjectProxy\n"
    "{\n"
    "    /** @var \\PDO */\n"
    "    protected $__object;\n"
    "\n"
    "    protected array $setAttributeContext = [];\n"
    "\n"
    "    /** @var callable */\n"
    "    protected $constructor;\n"
    "\n"
    "    protected int $round = 0;\n"
    "\n"
    "    protected int $inTransaction = 0;\n"
    "\n"
    "    public function __construct(callable $constructor)\n"
    "    {\n"
    "        parent::__construct($constructor());\n"
    "        $this->__object->setAttribute(\\PDO::ATTR_ERRMODE, \\PDO::ERRMODE_EXCEPTION);\n"
    "        $this->constructor = $constructor;\n"
    "    }\n"
    "\n"
    "    public function __call(string $name, array $arguments)\n"
    "    {\n"
    "        try {\n"
    "            $ret = $this->__object->{$name}(...$arguments);\n"
    "        } catch (\\PDOException $e) {\n"
    "            if (!$this->__object->inTransaction() && DetectsLostConnections::causedByLostConnection($e)) {\n"
    "                $this->reconnect();\n"
    "                $ret = $this->__object->{$name}(...$arguments);\n"
    "            } else {\n"
    "                throw $e;\n"
    "            }\n"
    "        }\n"
    "\n"
    "        if (strcasecmp($name, 'beginTransaction') === 0) {\n"
    "            $this->inTransaction++;\n"
    "        }\n"
    "\n"
    "        if ((strcasecmp($name, 'commit') === 0 || strcasecmp($name, 'rollback') === 0) && $this->inTransaction > 0) {\n"
    "            $this->inTransaction--;\n"
    "        }\n"
    "\n"
    "        if ((strcasecmp($name, 'prepare') === 0) || (strcasecmp($name, 'query') === 0)) {\n"
    "            $ret = new PDOStatementProxy($ret, $this);\n"
    "        }\n"
    "\n"
    "        return $ret;\n"
    "    }\n"
    "\n"
    "    public function getRound(): int\n"
    "    {\n"
    "        return $this->round;\n"
    "    }\n"
    "\n"
    "    public function reconnect(): void\n"
    "    {\n"
    "        $constructor = $this->constructor;\n"
    "        parent::__construct($constructor());\n"
    "        $this->__object->setAttribute(\\PDO::ATTR_ERRMODE, \\PDO::ERRMODE_EXCEPTION);\n"
    "        $this->round++;\n"
    "        /* restore context */\n"
    "        foreach ($this->setAttributeContext as $attribute => $value) {\n"
    "            $this->__object->setAttribute($attribute, $value);\n"
    "        }\n"
    "    }\n"
    "\n"
    "    public function setAttribute(int $attribute, $value): bool\n"
    "    {\n"
    "        $this->setAttributeContext[$attribute] = $value;\n"
    "        return $this->__object->setAttribute($attribute, $value);\n"
    "    }\n"
    "\n"
    "    public function inTransaction(): bool\n"
    "    {\n"
    "        return $this->inTransaction > 0;\n"
    "    }\n"
    "\n"
    "    public function reset(): void\n"
    "    {\n"
    "        $this->inTransaction = 0;\n"
    "    }\n"
    "}\n";

static const char* swoole_library_source_core_database_pdo_statement_proxy =
    "\n"
    "/**\n"
    " * This file is part of Swoole.\n"
    " *\n"
    " * @link     https://www.swoole.com\n"
    " * @contact  team@swoole.com\n"
    " * @license  https://github.com/swoole/library/blob/master/LICENSE\n"
    " */\n"
    "\n"
    "declare(strict_types=1);\n"
    "\n"
    "namespace Swoole\\Database;\n"
    "\n"
    "/**\n"
    " * The proxy class for PHP class PDOStatement.\n"
    " *\n"
    " * @see https://www.php.net/PDOStatement The PDOStatement class\n"
    " */\n"
    "class PDOStatementProxy extends ObjectProxy\n"
    "{\n"
    "    /** @var \\PDOStatement */\n"
    "    protected $__object;\n"
    "\n"
    "    protected array $setAttributeContext = [];\n"
    "\n"
    "    protected array $setFetchModeContext;\n"
    "\n"
    "    protected array $bindParamContext = [];\n"
    "\n"
    "    protected array $bindColumnContext = [];\n"
    "\n"
    "    protected array $bindValueContext = [];\n"
    "\n"
    "    protected PDOProxy $parent;\n"
    "\n"
    "    /** @var int */\n"
    "    protected $parentRound;\n"
    "\n"
    "    public function __construct(\\PDOStatement $object, PDOProxy $parent)\n"
    "    {\n"
    "        parent::__construct($object);\n"
    "        $this->parent      = $parent;\n"
    "        $this->parentRound = $parent->getRound();\n"
    "    }\n"
    "\n"
    "    public function __call(string $name, array $arguments)\n"
    "    {\n"
    "        try {\n"
    "            $ret = $this->__object->{$name}(...$arguments);\n"
    "        } catch (\\PDOException $e) {\n"
    "            if (!$this->parent->inTransaction() && DetectsLostConnections::causedByLostConnection($e)) {\n"
    "                if ($this->parent->getRound() === $this->parentRound) {\n"
    "                    /* if not equal, parent has reconnected */\n"
    "                    $this->parent->reconnect();\n"
    "                }\n"
    "                $parent         = $this->parent->__getObject();\n"
    "                $this->__object = $parent->prepare($this->__object->queryString);\n"
    "\n"
    "                foreach ($this->setAttributeContext as $attribute => $value) {\n"
    "                    $this->__object->setAttribute($attribute, $value);\n"
    "                }\n"
    "                if (!empty($this->setFetchModeContext)) {\n"
    "                    $this->__object->setFetchMode(...$this->setFetchModeContext);\n"
    "                }\n"
    "                foreach ($this->bindParamContext as $param => $item) {\n"
    "                    $this->__object->bindParam($param, ...$item);\n"
    "                }\n"
    "                foreach ($this->bindColumnContext as $column => $item) {\n"
    "                    $this->__object->bindColumn($column, ...$item);\n"
    "                }\n"
    "                foreach ($this->bindValueContext as $value => $item) {\n"
    "                    $this->__object->bindParam($value, ...$item);\n"
    "                }\n"
    "                $ret = $this->__object->{$name}(...$arguments);\n"
    "            } else {\n"
    "                throw $e;\n"
    "            }\n"
    "        }\n"
    "\n"
    "        return $ret;\n"
    "    }\n"
    "\n"
    "    public function setAttribute(int $attribute, $value): bool\n"
    "    {\n"
    "        $this->setAttributeContext[$attribute] = $value;\n"
    "        return $this->__object->setAttribute($attribute, $value);\n"
    "    }\n"
    "\n"
    "    /**\n"
    "     * Set the default fetch mode for this statement.\n"
    "     *\n"
    "     * @see https://www.php.net/manual/en/pdostatement.setfetchmode.php\n"
    "     */\n"
    "    public function setFetchMode(int $mode, ...$params): bool\n"
    "    {\n"
    "        $this->setFetchModeContext = func_get_args();\n"
    "        return $this->__object->setFetchMode(...$this->setFetchModeContext);\n"
    "    }\n"
    "\n"
    "    public function bindParam($parameter, &$variable, $data_type = \\PDO::PARAM_STR, $length = 0, $driver_options = null): bool\n"
    "    {\n"
    "        $this->bindParamContext[$parameter] = [$variable, $data_type, $length, $driver_options];\n"
    "        return $this->__object->bindParam($parameter, $variable, $data_type, $length, $driver_options);\n"
    "    }\n"
    "\n"
    "    public function bindColumn($column, &$param, $type = null, $maxlen = null, $driverdata = null): bool\n"
    "    {\n"
    "        $this->bindColumnContext[$column] = [$param, $type, $maxlen, $driverdata];\n"
    "        return $this->__object->bindColumn($column, $param, $type, $maxlen, $driverdata);\n"
    "    }\n"
    "\n"
    "    public function bindValue($parameter, $value, $data_type = \\PDO::PARAM_STR): bool\n"
    "    {\n"
    "        $this->bindValueContext[$parameter] = [$value, $data_type];\n"
    "        return $this->__object->bindValue($parameter, $value, $data_type);\n"
    "    }\n"
    "}\n";

static const char* swoole_library_source_core_database_redis_config =
    "\n"
    "/**\n"
    " * This file is part of Swoole.\n"
    " *\n"
    " * @link     https://www.swoole.com\n"
    " * @contact  team@swoole.com\n"
    " * @license  https://github.com/swoole/library/blob/master/LICENSE\n"
    " */\n"
    "\n"
    "declare(strict_types=1);\n"
    "\n"
    "namespace Swoole\\Database;\n"
    "\n"
    "class RedisConfig\n"
    "{\n"
    "    protected string $host = '127.0.0.1';\n"
    "\n"
    "    protected int $port = 6379;\n"
    "\n"
    "    protected float $timeout = 0.0;\n"
    "\n"
    "    protected string $reserved = '';\n"
    "\n"
    "    protected int $retry_interval = 0;\n"
    "\n"
    "    protected float $read_timeout = 0.0;\n"
    "\n"
    "    protected string $auth = '';\n"
    "\n"
    "    protected int $dbIndex = 0;\n"
    "\n"
    "    /**\n"
    "     * @var array<int, mixed>\n"
    "     */\n"
    "    protected array $options = [];\n"
    "\n"
    "    public function getHost(): string\n"
    "    {\n"
    "        return $this->host;\n"
    "    }\n"
    "\n"
    "    public function withHost(string $host): self\n"
    "    {\n"
    "        $this->host = $host;\n"
    "        return $this;\n"
    "    }\n"
    "\n"
    "    public function getPort(): int\n"
    "    {\n"
    "        return $this->port;\n"
    "    }\n"
    "\n"
    "    public function withPort(int $port): self\n"
    "    {\n"
    "        $this->port = $port;\n"
    "        return $this;\n"
    "    }\n"
    "\n"
    "    public function getTimeout(): float\n"
    "    {\n"
    "        return $this->timeout;\n"
    "    }\n"
    "\n"
    "    public function withTimeout(float $timeout): self\n"
    "    {\n"
    "        $this->timeout = $timeout;\n"
    "        return $this;\n"
    "    }\n"
    "\n"
    "    public function getReserved(): string\n"
    "    {\n"
    "        return $this->reserved;\n"
    "    }\n"
    "\n"
    "    public function withReserved(string $reserved): self\n"
    "    {\n"
    "        $this->reserved = $reserved;\n"
    "        return $this;\n"
    "    }\n"
    "\n"
    "    public function getRetryInterval(): int\n"
    "    {\n"
    "        return $this->retry_interval;\n"
    "    }\n"
    "\n"
    "    public function withRetryInterval(int $retry_interval): self\n"
    "    {\n"
    "        $this->retry_interval = $retry_interval;\n"
    "        return $this;\n"
    "    }\n"
    "\n"
    "    public function getReadTimeout(): float\n"
    "    {\n"
    "        return $this->read_timeout;\n"
    "    }\n"
    "\n"
    "    public function withReadTimeout(float $read_timeout): self\n"
    "    {\n"
    "        $this->read_timeout = $read_timeout;\n"
    "        return $this;\n"
    "    }\n"
    "\n"
    "    public function getAuth(): string\n"
    "    {\n"
    "        return $this->auth;\n"
    "    }\n"
    "\n"
    "    public function withAuth(string $auth): self\n"
    "    {\n"
    "        $this->auth = $auth;\n"
    "        return $this;\n"
    "    }\n"
    "\n"
    "    public function getDbIndex(): int\n"
    "    {\n"
    "        return $this->dbIndex;\n"
    "    }\n"
    "\n"
    "    public function withDbIndex(int $dbIndex): self\n"
    "    {\n"
    "        $this->dbIndex = $dbIndex;\n"
    "        return $this;\n"
    "    }\n"
    "\n"
    "    /**\n"
    "     * Add a configurable option.\n"
    "     */\n"
    "    public function withOption(int $option, mixed $value): self\n"
    "    {\n"
    "        $this->options[$option] = $value;\n"
    "        return $this;\n"
    "    }\n"
    "\n"
    "    /**\n"
    "     * Add/override configurable options.\n"
    "     *\n"
    "     * @param array<int, mixed> $options\n"
    "     */\n"
    "    public function setOptions(array $options): self\n"
    "    {\n"
    "        $this->options = $options;\n"
    "        return $this;\n"
    "    }\n"
    "\n"
    "    /**\n"
    "     * Get configurable options.\n"
    "     *\n"
    "     * @return array<int, mixed>\n"
    "     */\n"
    "    public function getOptions(): array\n"
    "    {\n"
    "        return $this->options;\n"
    "    }\n"
    "}\n";

static const char* swoole_library_source_core_database_redis_pool =
    "\n"
    "/**\n"
    " * This file is part of Swoole.\n"
    " *\n"
    " * @link     https://www.swoole.com\n"
    " * @contact  team@swoole.com\n"
    " * @license  https://github.com/swoole/library/blob/master/LICENSE\n"
    " */\n"
    "\n"
    "declare(strict_types=1);\n"
    "\n"
    "namespace Swoole\\Database;\n"
    "\n"
    "use Redis;\n"
    "use Swoole\\ConnectionPool;\n"
    "\n"
    "/**\n"
    " * @method \\Redis get(float $timeout = -1)\n"
    " * @method void put(Redis $connection)\n"
    " */\n"
    "class RedisPool extends ConnectionPool\n"
    "{\n"
    "    public function __construct(protected RedisConfig $config, int $size = self::DEFAULT_SIZE)\n"
    "    {\n"
    "        parent::__construct(function () {\n"
    "            $redis = new \\Redis();\n"
    "            /* Compatible with different versions of Redis extension as much as possible */\n"
    "            $arguments = [\n"
    "                $this->config->getHost(),\n"
    "                $this->config->getPort(),\n"
    "            ];\n"
    "            if ($this->config->getTimeout() !== 0.0) {\n"
    "                $arguments[] = $this->config->getTimeout();\n"
    "            }\n"
    "            if ($this->config->getRetryInterval() !== 0) {\n"
    "                /* reserved should always be NULL */\n"
    "                $arguments[] = null;\n"
    "                $arguments[] = $this->config->getRetryInterval();\n"
    "            }\n"
    "            if ($this->config->getReadTimeout() !== 0.0) {\n"
    "                $arguments[] = $this->config->getReadTimeout();\n"
    "            }\n"
    "            $redis->connect(...$arguments);\n"
    "            if ($this->config->getAuth()) {\n"
    "                $redis->auth($this->config->getAuth());\n"
    "            }\n"
    "            if ($this->config->getDbIndex() !== 0) {\n"
    "                $redis->select($this->config->getDbIndex());\n"
    "            }\n"
    "\n"
    "            /* Set Redis options. */\n"
    "            foreach ($this->config->getOptions() as $key => $value) {\n"
    "                $redis->setOption($key, $value);\n"
    "            }\n"
    "\n"
    "            return $redis;\n"
    "        }, $size);\n"
    "    }\n"
    "}\n";

static const char* swoole_library_source_core_http_status =
    "\n"
    "/**\n"
    " * This file is part of Swoole.\n"
    " *\n"
    " * @link     https://www.swoole.com\n"
    " * @contact  team@swoole.com\n"
    " * @license  https://github.com/swoole/library/blob/master/LICENSE\n"
    " */\n"
    "\n"
    "declare(strict_types=1);\n"
    "\n"
    "namespace Swoole\\Http;\n"
    "\n"
    "abstract class Status\n"
    "{\n"
    "    public const CONTINUE = 100;\n"
    "\n"
    "    public const SWITCHING_PROTOCOLS = 101;\n"
    "\n"
    "    public const PROCESSING = 102;\n"
    "\n"
    "    public const OK = 200;\n"
    "\n"
    "    public const CREATED = 201;\n"
    "\n"
    "    public const ACCEPTED = 202;\n"
    "\n"
    "    public const NON_AUTHORITATIVE_INFORMATION = 203;\n"
    "\n"
    "    public const NO_CONTENT = 204;\n"
    "\n"
    "    public const RESET_CONTENT = 205;\n"
    "\n"
    "    public const PARTIAL_CONTENT = 206;\n"
    "\n"
    "    public const MULTI_STATUS = 207;\n"
    "\n"
    "    public const ALREADY_REPORTED = 208;\n"
    "\n"
    "    public const IM_USED = 226;\n"
    "\n"
    "    public const MULTIPLE_CHOICES = 300;\n"
    "\n"
    "    public const MOVED_PERMANENTLY = 301;\n"
    "\n"
    "    public const FOUND = 302;\n"
    "\n"
    "    public const SEE_OTHER = 303;\n"
    "\n"
    "    public const NOT_MODIFIED = 304;\n"
    "\n"
    "    public const USE_PROXY = 305;\n"
    "\n"
    "    public const SWITCH_PROXY = 306;\n"
    "\n"
    "    public const TEMPORARY_REDIRECT = 307;\n"
    "\n"
    "    public const PERMANENT_REDIRECT = 308;\n"
    "\n"
    "    public const BAD_REQUEST = 400;\n"
    "\n"
    "    public const UNAUTHORIZED = 401;\n"
    "\n"
    "    public const PAYMENT_REQUIRED = 402;\n"
    "\n"
    "    public const FORBIDDEN = 403;\n"
    "\n"
    "    public const NOT_FOUND = 404;\n"
    "\n"
    "    public const METHOD_NOT_ALLOWED = 405;\n"
    "\n"
    "    public const NOT_ACCEPTABLE = 406;\n"
    "\n"
    "    public const PROXY_AUTHENTICATION_REQUIRED = 407;\n"
    "\n"
    "    public const REQUEST_TIME_OUT = 408;\n"
    "\n"
    "    public const CONFLICT = 409;\n"
    "\n"
    "    public const GONE = 410;\n"
    "\n"
    "    public const LENGTH_REQUIRED = 411;\n"
    "\n"
    "    public const PRECONDITION_FAILED = 412;\n"
    "\n"
    "    public const REQUEST_ENTITY_TOO_LARGE = 413;\n"
    "\n"
    "    public const REQUEST_URI_TOO_LARGE = 414;\n"
    "\n"
    "    public const UNSUPPORTED_MEDIA_TYPE = 415;\n"
    "\n"
    "    public const REQUESTED_RANGE_NOT_SATISFIABLE = 416;\n"
    "\n"
    "    public const EXPECTATION_FAILED = 417;\n"
    "\n"
    "    public const MISDIRECTED_REQUEST = 421;\n"
    "\n"
    "    public const UNPROCESSABLE_ENTITY = 422;\n"
    "\n"
    "    public const LOCKED = 423;\n"
    "\n"
    "    public const FAILED_DEPENDENCY = 424;\n"
    "\n"
    "    public const UNORDERED_COLLECTION = 425;\n"
    "\n"
    "    public const UPGRADE_REQUIRED = 426;\n"
    "\n"
    "    public const PRECONDITION_REQUIRED = 428;\n"
    "\n"
    "    public const TOO_MANY_REQUESTS = 429;\n"
    "\n"
    "    public const REQUEST_HEADER_FIELDS_TOO_LARGE = 431;\n"
    "\n"
    "    public const UNAVAILABLE_FOR_LEGAL_REASONS = 451;\n"
    "\n"
    "    public const INTERNAL_SERVER_ERROR = 500;\n"
    "\n"
    "    public const NOT_IMPLEMENTED = 501;\n"
    "\n"
    "    public const BAD_GATEWAY = 502;\n"
    "\n"
    "    public const SERVICE_UNAVAILABLE = 503;\n"
    "\n"
    "    public const GATEWAY_TIME_OUT = 504;\n"
    "\n"
    "    public const HTTP_VERSION_NOT_SUPPORTED = 505;\n"
    "\n"
    "    public const VARIANT_ALSO_NEGOTIATES = 506;\n"
    "\n"
    "    public const INSUFFICIENT_STORAGE = 507;\n"
    "\n"
    "    public const LOOP_DETECTED = 508;\n"
    "\n"
    "    public const NOT_EXTENDED = 510;\n"
    "\n"
    "    public const NETWORK_AUTHENTICATION_REQUIRED = 511;\n"
    "\n"
    "    protected static $reasonPhrases = [\n"
    "        self::CONTINUE                        => 'Continue',\n"
    "        self::SWITCHING_PROTOCOLS             => 'Switching Protocols',\n"
    "        self::PROCESSING                      => 'Processing',\n"
    "        self::OK                              => 'OK',\n"
    "        self::CREATED                         => 'Created',\n"
    "        self::ACCEPTED                        => 'Accepted',\n"
    "        self::NON_AUTHORITATIVE_INFORMATION   => 'Non-Authoritative Information',\n"
    "        self::NO_CONTENT                      => 'No Content',\n"
    "        self::RESET_CONTENT                   => 'Reset Content',\n"
    "        self::PARTIAL_CONTENT                 => 'Partial Content',\n"
    "        self::MULTI_STATUS                    => 'Multi-status',\n"
    "        self::ALREADY_REPORTED                => 'Already Reported',\n"
    "        self::IM_USED                         => 'IM Used',\n"
    "        self::MULTIPLE_CHOICES                => 'Multiple Choices',\n"
    "        self::MOVED_PERMANENTLY               => 'Moved Permanently',\n"
    "        self::FOUND                           => 'Found',\n"
    "        self::SEE_OTHER                       => 'See Other',\n"
    "        self::NOT_MODIFIED                    => 'Not Modified',\n"
    "        self::USE_PROXY                       => 'Use Proxy',\n"
    "        self::SWITCH_PROXY                    => 'Switch Proxy',\n"
    "        self::TEMPORARY_REDIRECT              => 'Temporary Redirect',\n"
    "        self::PERMANENT_REDIRECT              => 'Permanent Redirect',\n"
    "        self::BAD_REQUEST                     => 'Bad Request',\n"
    "        self::UNAUTHORIZED                    => 'Unauthorized',\n"
    "        self::PAYMENT_REQUIRED                => 'Payment Required',\n"
    "        self::FORBIDDEN                       => 'Forbidden',\n"
    "        self::NOT_FOUND                       => 'Not Found',\n"
    "        self::METHOD_NOT_ALLOWED              => 'Method Not Allowed',\n"
    "        self::NOT_ACCEPTABLE                  => 'Not Acceptable',\n"
    "        self::PROXY_AUTHENTICATION_REQUIRED   => 'Proxy Authentication Required',\n"
    "        self::REQUEST_TIME_OUT                => 'Request Time-out',\n"
    "        self::CONFLICT                        => 'Conflict',\n"
    "        self::GONE                            => 'Gone',\n"
    "        self::LENGTH_REQUIRED                 => 'Length Required',\n"
    "        self::PRECONDITION_FAILED             => 'Precondition Failed',\n"
    "        self::REQUEST_ENTITY_TOO_LARGE        => 'Request Entity Too Large',\n"
    "        self::REQUEST_URI_TOO_LARGE           => 'Request-URI Too Large',\n"
    "        self::UNSUPPORTED_MEDIA_TYPE          => 'Unsupported Media Type',\n"
    "        self::REQUESTED_RANGE_NOT_SATISFIABLE => 'Requested range not satisfiable',\n"
    "        self::EXPECTATION_FAILED              => 'Expectation Failed',\n"
    "        self::MISDIRECTED_REQUEST             => 'Misdirected Request',\n"
    "        self::UNPROCESSABLE_ENTITY            => 'Unprocessable Entity',\n"
    "        self::LOCKED                          => 'Locked',\n"
    "        self::FAILED_DEPENDENCY               => 'Failed Dependency',\n"
    "        self::UNORDERED_COLLECTION            => 'Unordered Collection',\n"
    "        self::UPGRADE_REQUIRED                => 'Upgrade Required',\n"
    "        self::PRECONDITION_REQUIRED           => 'Precondition Required',\n"
    "        self::TOO_MANY_REQUESTS               => 'Too Many Requests',\n"
    "        self::REQUEST_HEADER_FIELDS_TOO_LARGE => 'Request Header Fields Too Large',\n"
    "        self::UNAVAILABLE_FOR_LEGAL_REASONS   => 'Unavailable For Legal Reasons',\n"
    "        self::INTERNAL_SERVER_ERROR           => 'Internal Server Error',\n"
    "        self::NOT_IMPLEMENTED                 => 'Not Implemented',\n"
    "        self::BAD_GATEWAY                     => 'Bad Gateway',\n"
    "        self::SERVICE_UNAVAILABLE             => 'Service Unavailable',\n"
    "        self::GATEWAY_TIME_OUT                => 'Gateway Time-out',\n"
    "        self::HTTP_VERSION_NOT_SUPPORTED      => 'HTTP Version not supported',\n"
    "        self::VARIANT_ALSO_NEGOTIATES         => 'Variant Also Negotiates',\n"
    "        self::INSUFFICIENT_STORAGE            => 'Insufficient Storage',\n"
    "        self::LOOP_DETECTED                   => 'Loop Detected',\n"
    "        self::NOT_EXTENDED                    => 'Not Extended',\n"
    "        self::NETWORK_AUTHENTICATION_REQUIRED => 'Network Authentication Required',\n"
    "    ];\n"
    "\n"
    "    public static function getReasonPhrases(): array\n"
    "    {\n"
    "        return static::$reasonPhrases;\n"
    "    }\n"
    "\n"
    "    public static function getReasonPhrase(int $value): string\n"
    "    {\n"
    "        return static::$reasonPhrases[$value] ?? 'Unknown';\n"
    "    }\n"
    "}\n";

static const char* swoole_library_source_core_curl_exception =
    "\n"
    "/**\n"
    " * This file is part of Swoole.\n"
    " *\n"
    " * @link     https://www.swoole.com\n"
    " * @contact  team@swoole.com\n"
    " * @license  https://github.com/swoole/library/blob/master/LICENSE\n"
    " */\n"
    "\n"
    "declare(strict_types=1);\n"
    "\n"
    "namespace Swoole\\Curl;\n"
    "\n"
    "use Swoole;\n"
    "\n"
    "class Exception extends Swoole\\Exception\n"
    "{\n"
    "}\n";

static const char* swoole_library_source_core_curl_handler =
    "\n"
    "/**\n"
    " * This file is part of Swoole.\n"
    " *\n"
    " * @link     https://www.swoole.com\n"
    " * @contact  team@swoole.com\n"
    " * @license  https://github.com/swoole/library/blob/master/LICENSE\n"
    " */\n"
    "\n"
    "/* @noinspection PhpComposerExtensionStubsInspection, PhpDuplicateSwitchCaseBodyInspection, PhpInconsistentReturnPointsInspection */\n"
    "\n"
    "declare(strict_types=1);\n"
    "\n"
    "namespace Swoole\\Curl;\n"
    "\n"
    "use Swoole\\Constant;\n"
    "use Swoole\\Coroutine\\Http\\Client;\n"
    "use Swoole\\Coroutine\\System;\n"
    "use Swoole\\Curl\\Exception as CurlException;\n"
    "use Swoole\\Http\\Status;\n"
    "\n"
    "final class Handler implements \\Stringable\n"
    "{\n"
    "    /**\n"
    "     * @var Client|null\n"
    "     */\n"
    "    private $client;\n"
    "\n"
    "    private $info = [\n"
    "        'url'                     => '',\n"
    "        'content_type'            => '',\n"
    "        'http_code'               => 0,\n"
    "        'header_size'             => 0,\n"
    "        'request_size'            => 0,\n"
    "        'filetime'                => -1,\n"
    "        'ssl_verify_result'       => 0,\n"
    "        'redirect_count'          => 0,\n"
    "        'total_time'              => 5.3E-5,\n"
    "        'namelookup_time'         => 0.0,\n"
    "        'connect_time'            => 0.0,\n"
    "        'pretransfer_time'        => 0.0,\n"
    "        'size_upload'             => 0.0,\n"
    "        'size_download'           => 0.0,\n"
    "        'speed_download'          => 0.0,\n"
    "        'speed_upload'            => 0.0,\n"
    "        'download_content_length' => -1.0,\n"
    "        'upload_content_length'   => -1.0,\n"
    "        'starttransfer_time'      => 0.0,\n"
    "        'redirect_time'           => 0.0,\n"
    "        'redirect_url'            => '',\n"
    "        'primary_ip'              => '',\n"
    "        'certinfo'                => [],\n"
    "        'primary_port'            => 0,\n"
    "        'local_ip'                => '',\n"
    "        'local_port'              => 0,\n"
    "        'http_version'            => 0,\n"
    "        'protocol'                => 0,\n"
    "        'ssl_verifyresult'        => 0,\n"
    "        'scheme'                  => '',\n"
    "        'private'                 => '',\n"
    "    ];\n"
    "\n"
    "    private $withHeaderOut = false;\n"
    "\n"
    "    private $withFileTime = false;\n"
    "\n"
    "    private $urlInfo;\n"
    "\n"
    "    private $postData;\n"
    "\n"
    "    private $infile;\n"
    "\n"
    "    private $infileSize = PHP_INT_MAX;\n"
    "\n"
    "    private $outputStream;\n"
    "\n"
    "    private $proxyType;\n"
    "\n"
    "    private $proxy;\n"
    "\n"
    "    private $proxyPort = 1080;\n"
    "\n"
    "    private $proxyUsername;\n"
    "\n"
    "    private $proxyPassword;\n"
    "\n"
    "    private $clientOptions = [];\n"
    "\n"
    "    private $followLocation = false;\n"
    "\n"
    "    private $autoReferer = false;\n"
    "\n"
    "    private $maxRedirects;\n"
    "\n"
    "    private $withHeader = false;\n"
    "\n"
    "    private $nobody = false;\n"
    "\n"
    "    /** @var callable|null */\n"
    "    private $headerFunction;\n"
    "\n"
    "    /** @var callable|null */\n"
    "    private $readFunction;\n"
    "\n"
    "    /** @var callable|null */\n"
    "    private $writeFunction;\n"
    "\n"
    "    private $noProgress = true;\n"
    "\n"
    "    /** @var callable */\n"
    "    private $progressFunction;\n"
    "\n"
    "    private $returnTransfer = false;\n"
    "\n"
    "    private $method = '';\n"
    "\n"
    "    private $headers = [];\n"
    "\n"
    "    private $headerMap = [];\n"
    "\n"
    "    private $transfer;\n"
    "\n"
    "    private $errCode = 0;\n"
    "\n"
    "    private $errMsg = '';\n"
    "\n"
    "    private $failOnError = false;\n"
    "\n"
    "    private $closed = false;\n"
    "\n"
    "    private $cookieJar = '';\n"
    "\n"
    "    private $resolve = [];\n"
    "\n"
    "    private $unix_socket_path = '';\n"
    "\n"
    "    public function __construct(string $url = '')\n"
    "    {\n"
    "        if ($url) {\n"
    "            $this->setUrl($url);\n"
    "        }\n"
    "    }\n"
    "\n"
    "    public function __toString(): string\n"
    "    {\n"
    "        $id = spl_object_id($this);\n"
    "        return \"Object({$id}) of type (curl)\";\n"
    "    }\n"
    "\n"
    "    /* ====== Public APIs ====== */\n"
    "\n"
    "    public function isAvailable(): bool\n"
    "    {\n"
    "        if ($this->closed) {\n"
    "            trigger_error('supplied resource is not a valid cURL handle resource', E_USER_WARNING);\n"
    "            return false;\n"
    "        }\n"
    "        return true;\n"
    "    }\n"
    "\n"
    "    public function setOpt(int $opt, $value): bool\n"
    "    {\n"
    "        return $this->isAvailable() and $this->setOption($opt, $value);\n"
    "    }\n"
    "\n"
    "    public function exec()\n"
    "    {\n"
    "        if (!$this->isAvailable()) {\n"
    "            return false;\n"
    "        }\n"
    "        return $this->execute();\n"
    "    }\n"
    "\n"
    "    public function getInfo()\n"
    "    {\n"
    "        return $this->isAvailable() ? $this->info : false;\n"
    "    }\n"
    "\n"
    "    public function errno(): int\n"
    "    {\n"
    "        return $this->isAvailable() ? $this->errCode : 0;\n"
    "    }\n"
    "\n"
    "    public function error(): string\n"
    "    {\n"
    "        return $this->isAvailable() ? $this->errMsg : '';\n"
    "    }\n"
    "\n"
    "    public function reset()\n"
    "    {\n"
    "        if (!$this->isAvailable()) {\n"
    "            return false;\n"
    "        }\n"
    "        foreach ((new \\ReflectionClass(self::class))->getDefaultProperties() as $name => $value) {\n"
    "            $this->{$name} = $value;\n"
    "        }\n"
    "    }\n"
    "\n"
    "    public function getContent()\n"
    "    {\n"
    "        if (!$this->isAvailable()) {\n"
    "            return false;\n"
    "        }\n"
    "        return $this->transfer;\n"
    "    }\n"
    "\n"
    "    public function close(): void\n"
    "    {\n"
    "        if (!$this->isAvailable()) {\n"
    "            return;\n"
    "        }\n"
    "        foreach ($this as &$property) { // @phpstan-ignore foreach.nonIterable\n"
    "            $property = null;\n"
    "        }\n"
    "        $this->closed = true;\n"
    "    }\n"
    "\n"
    "    private function create(?array $urlInfo = null): void\n"
    "    {\n"
    "        if ($urlInfo === null) {\n"
    "            $urlInfo = $this->urlInfo;\n"
    "        }\n"
    "        $host = $urlInfo['host'];\n"
    "        $port = $urlInfo['port'];\n"
    "        if (isset($this->resolve[$host])) {\n"
    "            if (!$this->hasHeader('Host')) {\n"
    "                $this->setHeader('Host', $host);\n"
    "            }\n"
    "            $this->urlInfo['host'] = $host = $this->resolve[$host][$port] ?? null ?: $host;\n"
    "        }\n"
    "        if ($this->unix_socket_path) {\n"
    "            $host = $this->unix_socket_path;\n"
    "            $port = 0;\n"
    "            if (stripos($host, 'unix:/') !== 0) {\n"
    "                $host = \"unix:/{$host}\";\n"
    "            }\n"
    "        }\n"
    "        $this->client = new Client($host, $port, $urlInfo['scheme'] === 'https');\n"
    "    }\n"
    "\n"
    "    private function getUrl(): string\n"
    "    {\n"
    "        if (empty($this->urlInfo['path'])) {\n"
    "            $url = '/';\n"
    "        } else {\n"
    "            $url = $this->urlInfo['path'];\n"
    "        }\n"
    "        if (!empty($this->urlInfo['query'])) {\n"
    "            $url .= '?' . $this->urlInfo['query'];\n"
    "        }\n"
    "        if (!empty($this->urlInfo['fragment'])) {\n"
    "            $url .= '#' . $this->urlInfo['fragment'];\n"
    "        }\n"
    "        return $url;\n"
    "    }\n"
    "\n"
    "    private function setUrl(string $url, bool $setInfo = true): bool\n"
    "    {\n"
    "        if (strlen($url) === 0) {\n"
    "            $this->setError(CURLE_URL_MALFORMAT, 'No URL set!');\n"
    "            return false;\n"
    "        }\n"
    "        if (!str_contains($url, '://') && $this->unix_socket_path === '') {\n"
    "            $url = 'http://' . $url;\n"
    "        }\n"
    "        if ($setInfo) {\n"
    "            $urlInfo = parse_url($url);\n"
    "            if ($this->unix_socket_path) {\n"
    "                if (empty($urlInfo['host']) && !empty($urlInfo['path'])) {\n"
    "                    $urlInfo['host'] = explode('/', $urlInfo['path'])[1] ?? null;\n"
    "                }\n"
    "                if (!$this->hasHeader('Host') && !empty($urlInfo['host'])) {\n"
    "                    $this->setHeader('Host', $urlInfo['host']);\n"
    "                }\n"
    "            }\n"
    "            if (!is_array($urlInfo)) {\n"
    "                $this->setError(CURLE_URL_MALFORMAT, \"URL[{$url}] using bad/illegal format\");\n"
    "                return false;\n"
    "            }\n"
    "            if (!$this->setUrlInfo($urlInfo)) {\n"
    "                return false;\n"
    "            }\n"
    "        }\n"
    "        $this->info['url'] = $url;\n"
    "        return true;\n"
    "    }\n"
    "\n"
    "    private function setUrlInfo(array $urlInfo): bool\n"
    "    {\n"
    "        if (empty($urlInfo['scheme'])) {\n"
    "            $urlInfo['scheme'] = 'http';\n"
    "        }\n"
    "        $scheme = $urlInfo['scheme'];\n"
    "        if ($scheme !== 'http' and $scheme !== 'https') {\n"
    "            $this->setError(CURLE_UNSUPPORTED_PROTOCOL, \"Protocol \\\"{$scheme}\\\" not supported or disabled in libcurl\");\n"
    "            return false;\n"
    "        }\n"
    "        $host = $urlInfo['host'];\n"
    "        if ($this->info['primary_port'] !== 0) {\n"
    "            /* keep same with cURL, primary_port has the highest priority */\n"
    "            $urlInfo['port'] = $this->info['primary_port'];\n"
    "        } elseif (empty($urlInfo['port'])) {\n"
    "            $urlInfo['port'] = $scheme === 'https' ? 443 : 80;\n"
    "        } else {\n"
    "            $urlInfo['port'] = intval($urlInfo['port']);\n"
    "        }\n"
    "        $port = $urlInfo['port'];\n"
    "        if (isset($this->client)) {\n"
    "            $oldUrlInfo = $this->urlInfo;\n"
    "            if (($host !== $oldUrlInfo['host']) || ($port !== $oldUrlInfo['port']) || ($scheme !== $oldUrlInfo['scheme'])) {\n"
    "                /* target changed */\n"
    "                $this->create($urlInfo);\n"
    "            }\n"
    "        }\n"
    "        $this->urlInfo = $urlInfo;\n"
    "        return true;\n"
    "    }\n"
    "\n"
    "    private function setPort(int $port): void\n"
    "    {\n"
    "        $this->info['primary_port'] = $port;\n"
    "        if (!isset($this->urlInfo['port']) || $this->urlInfo['port'] !== $port) {\n"
    "            $this->urlInfo['port'] = $port;\n"
    "            if (isset($this->client)) {\n"
    "                /* target changed */\n"
    "                $this->create();\n"
    "            }\n"
    "        }\n"
    "    }\n"
    "\n"
    "    private function setError($code, $msg = ''): void\n"
    "    {\n"
    "        $this->errCode = $code;\n"
    "        $this->errMsg  = $msg ?: curl_strerror($code);\n"
    "    }\n"
    "\n"
    "    private function hasHeader(string $headerName): bool\n"
    "    {\n"
    "        return isset($this->headerMap[strtolower($headerName)]);\n"
    "    }\n"
    "\n"
    "    private function setHeader(string $headerName, string $value): void\n"
    "    {\n"
    "        $lowerCaseHeaderName = strtolower($headerName);\n"
    "\n"
    "        if (isset($this->headerMap[$lowerCaseHeaderName])) {\n"
    "            unset($this->headers[$this->headerMap[$lowerCaseHeaderName]]);\n"
    "        }\n"
    "\n"
    "        if ($value !== '') {\n"
    "            $this->headers[$headerName]            = $value;\n"
    "            $this->headerMap[$lowerCaseHeaderName] = $headerName;\n"
    "        } else {\n"
    "            // remove empty headers (keep same with raw cURL)\n"
    "            unset($this->headerMap[$lowerCaseHeaderName]);\n"
    "        }\n"
    "    }\n"
    "\n"
    "    /**\n"
    "     * @throws Exception\n"
    "     */\n"
    "    private function setOption(int $opt, mixed $value): bool\n"
    "    {\n"
    "        switch ($opt) {\n"
    "            // case CURLOPT_STDERR:\n"
    "            // case CURLOPT_WRITEHEADER:\n"
    "            case CURLOPT_FILE:\n"
    "            case CURLOPT_INFILE:\n"
    "                if (!is_resource($value)) {\n"
    "                    trigger_error('swoole_curl_setopt(): supplied argument is not a valid File-Handle resource', E_USER_WARNING);\n"
    "                    return false;\n"
    "                }\n"
    "                break;\n"
    "        }\n"
    "\n"
    "        switch ($opt) {\n"
    "            /*\n"
    "             * Basic\n"
    "             */\n"
    "            case CURLOPT_URL:\n"
    "                return $this->setUrl((string) $value);\n"
    "            case CURLOPT_PORT:\n"
    "                $this->setPort((int) $value);\n"
    "                break;\n"
    "            case CURLOPT_FORBID_REUSE:\n"
    "                $this->clientOptions[Constant::OPTION_KEEP_ALIVE] = !$value;\n"
    "                break;\n"
    "            case CURLOPT_RETURNTRANSFER:\n"
    "                $this->returnTransfer = (bool) $value;\n"
    "                $this->transfer       = '';\n"
    "                break;\n"
    "            case CURLOPT_ENCODING:\n"
    "                if (empty($value)) {\n"
    "                    if (defined('SWOOLE_HAVE_ZLIB')) {\n"
    "                        $value = 'gzip, deflate';\n"
    "                    }\n"
    "                    if (defined('SWOOLE_HAVE_BROTLI')) {\n"
    "                        if (!empty($value)) {\n"
    "                            $value = 'br, ' . $value;\n"
    "                        } else {\n"
    "                            $value = 'br';\n"
    "                        }\n"
    "                    }\n"
    "                    if (empty($value)) {\n"
    "                        break;\n"
    "                    }\n"
    "                }\n"
    "                $this->setHeader('Accept-Encoding', $value);\n"
    "                break;\n"
    "            case CURLOPT_PROXYTYPE:\n"
    "                if ($value !== CURLPROXY_HTTP and $value !== CURLPROXY_SOCKS5) {\n"
    "                    throw new CurlException('swoole_curl_setopt(): Only support following CURLOPT_PROXYTYPE values: CURLPROXY_HTTP, CURLPROXY_SOCKS5');\n"
    "                }\n"
    "                $this->proxyType = $value;\n"
    "                break;\n"
    "            case CURLOPT_PROXY:\n"
    "                $this->proxy = $value;\n"
    "                break;\n"
    "            case CURLOPT_PROXYPORT:\n"
    "                $this->proxyPort = $value;\n"
    "                break;\n"
    "            case CURLOPT_PROXYUSERNAME:\n"
    "                $this->proxyUsername = $value;\n"
    "                break;\n"
    "            case CURLOPT_PROXYPASSWORD:\n"
    "                $this->proxyPassword = $value;\n"
    "                break;\n"
    "            case CURLOPT_PROXYUSERPWD:\n"
    "                $usernamePassword    = explode(':', $value);\n"
    "                $this->proxyUsername = urldecode($usernamePassword[0]);\n"
    "                $this->proxyPassword = urldecode($usernamePassword[1] ?? null);\n"
    "                break;\n"
    "            case CURLOPT_PROXYAUTH:\n"
    "                /* ignored temporarily */\n"
    "                break;\n"
    "            case CURLOPT_UNIX_SOCKET_PATH:\n"
    "                $realpath = realpath((string) $value);\n"
    "                if ($realpath) {\n"
    "                    $this->unix_socket_path = $realpath;\n"
    "                } else {\n"
    "                    $this->setError(CURLE_COULDNT_CONNECT);\n"
    "                }\n"
    "                break;\n"
    "            case CURLOPT_NOBODY:\n"
    "                $this->nobody = boolval($value);\n"
    "                $this->method = 'HEAD';\n"
    "                break;\n"
    "            case CURLOPT_RESOLVE:\n"
    "                foreach ((array) $value as $resolve) {\n"
    "                    $flag = substr($resolve, 0, 1);\n"
    "                    if ($flag === '+' || $flag === '-') {\n"
    "                        // TODO: [+]HOST:PORT:ADDRESS\n"
    "                        $resolve = substr($resolve, 1);\n"
    "                    }\n"
    "                    $tmpResolve = explode(':', $resolve, 3);\n"
    "                    $host       = $tmpResolve[0];\n"
    "                    $port       = $tmpResolve[1] ?? 0;\n"
    "                    $ip         = $tmpResolve[2] ?? '';\n"
    "                    if ($flag === '-') {\n"
    "                        unset($this->resolve[$host][$port]);\n"
    "                    } else {\n"
    "                        // TODO: HOST:PORT:ADDRESS[,ADDRESS]...\n"
    "                        $this->resolve[$host][$port] = explode(',', $ip)[0];\n"
    "                    }\n"
    "                }\n"
    "                break;\n"
    "            case CURLOPT_IPRESOLVE:\n"
    "                if ($value !== CURL_IPRESOLVE_WHATEVER and $value !== CURL_IPRESOLVE_V4) {\n"
    "                    throw new CurlException('swoole_curl_setopt(): Only support following CURLOPT_IPRESOLVE values: CURL_IPRESOLVE_WHATEVER, CURL_IPRESOLVE_V4');\n"
    "                }\n"
    "                break;\n"
    "            case CURLOPT_TCP_NODELAY:\n"
    "                $this->clientOptions[Constant::OPTION_OPEN_TCP_NODELAY] = boolval($value);\n"
    "                break;\n"
    "            case CURLOPT_PRIVATE:\n"
    "                $this->info['private'] = $value;\n"
    "                break;\n"
    "                /*\n"
    "                 * Ignore options\n"
    "                 */\n"
    "            case CURLOPT_VERBOSE:\n"
    "                // trigger_error('swoole_curl_setopt(): CURLOPT_VERBOSE is not supported', E_USER_WARNING);\n"
    "            case CURLOPT_SSLVERSION:\n"
    "            case CURLOPT_NOSIGNAL:\n"
    "            case CURLOPT_FRESH_CONNECT:\n"
    "            case CURLOPT_DNS_USE_GLOBAL_CACHE:\n"
    "            case CURLOPT_DNS_CACHE_TIMEOUT:\n"
    "            case CURLOPT_STDERR:\n"
    "            case CURLOPT_WRITEHEADER:\n"
    "            case CURLOPT_BUFFERSIZE:\n"
    "            case CURLOPT_SSLCERTTYPE:\n"
    "            case CURLOPT_SSLKEYTYPE:\n"
    "            case CURLOPT_NOPROXY:\n"
    "            case CURLOPT_CERTINFO:\n"
    "            case CURLOPT_HEADEROPT:\n"
    "            case CURLOPT_PROXYHEADER:\n"
    "            case CURLOPT_HTTPPROXYTUNNEL:\n"
    "                break;\n"
    "                /*\n"
    "                 * SSL\n"
    "                 */\n"
    "            case CURLOPT_SSL_VERIFYHOST:\n"
    "                break;\n"
    "            case CURLOPT_SSL_VERIFYPEER:\n"
    "                $this->clientOptions[Constant::OPTION_SSL_VERIFY_PEER] = $value;\n"
    "                break;\n"
    "            case CURLOPT_SSLCERT:\n"
    "                $this->clientOptions[Constant::OPTION_SSL_CERT_FILE] = $value;\n"
    "                break;\n"
    "            case CURLOPT_SSLKEY:\n"
    "                $this->clientOptions[Constant::OPTION_SSL_KEY_FILE] = $value;\n"
    "                break;\n"
    "            case CURLOPT_CAINFO:\n"
    "                $this->clientOptions[Constant::OPTION_SSL_CAFILE] = $value;\n"
    "                break;\n"
    "            case CURLOPT_CAPATH:\n"
    "                $this->clientOptions[Constant::OPTION_SSL_CAPATH] = $value;\n"
    "                break;\n"
    "            case CURLOPT_KEYPASSWD:\n"
    "            case CURLOPT_SSLCERTPASSWD:\n"
    "            case CURLOPT_SSLKEYPASSWD:\n"
    "                $this->clientOptions[Constant::OPTION_SSL_PASSPHRASE] = $value;\n"
    "                break;\n"
    "                /*\n"
    "                 * Http POST\n"
    "                 */\n"
    "            case CURLOPT_POST:\n"
    "                $this->method = 'POST';\n"
    "                break;\n"
    "            case CURLOPT_POSTFIELDS:\n"
    "                $this->postData = $value;\n"
    "                if (!$this->method) {\n"
    "                    $this->method = 'POST';\n"
    "                }\n"
    "                break;\n"
    "                /*\n"
    "                 * Upload\n"
    "                 */\n"
    "            case CURLOPT_SAFE_UPLOAD:\n"
    "                if (!$value) {\n"
    "                    trigger_error('swoole_curl_setopt(): Disabling safe uploads is no longer supported', E_USER_WARNING);\n"
    "                    return false;\n"
    "                }\n"
    "                break;\n"
    "                /*\n"
    "                 * Http Header\n"
    "                 */\n"
    "            case CURLOPT_HTTPHEADER:\n"
    "                if (!is_array($value) and !is_iterable($value)) {\n"
    "                    trigger_error('swoole_curl_setopt(): You must pass either an object or an array with the CURLOPT_HTTPHEADER argument', E_USER_WARNING);\n"
    "                    return false;\n"
    "                }\n"
    "                foreach ($value as $header) {\n"
    "                    $header      = explode(':', $header, 2);\n"
    "                    $headerName  = $header[0];\n"
    "                    $headerValue = trim($header[1] ?? '');\n"
    "                    $this->setHeader($headerName, $headerValue);\n"
    "                }\n"
    "                break;\n"
    "            case CURLOPT_REFERER:\n"
    "                $this->setHeader('Referer', $value);\n"
    "                break;\n"
    "            case CURLINFO_HEADER_OUT:\n"
    "                $this->withHeaderOut = boolval($value);\n"
    "                break;\n"
    "            case CURLOPT_FILETIME:\n"
    "                $this->withFileTime = boolval($value);\n"
    "                break;\n"
    "            case CURLOPT_USERAGENT:\n"
    "                $this->setHeader('User-Agent', $value);\n"
    "                break;\n"
    "            case CURLOPT_CUSTOMREQUEST:\n"
    "                $this->method = (string) $value;\n"
    "                break;\n"
    "            case CURLOPT_PROTOCOLS:\n"
    "                if (($value & ~(CURLPROTO_HTTP | CURLPROTO_HTTPS)) != 0) {\n"
    "                    throw new CurlException(\"swoole_curl_setopt(): CURLOPT_PROTOCOLS[{$value}] is not supported\");\n"
    "                }\n"
    "                break;\n"
    "            case CURLOPT_REDIR_PROTOCOLS:\n"
    "                if (($value & ~(CURLPROTO_HTTP | CURLPROTO_HTTPS)) != 0) {\n"
    "                    throw new CurlException(\"swoole_curl_setopt(): CURLOPT_REDIR_PROTOCOLS[{$value}] is not supported\");\n"
    "                }\n"
    "                break;\n"
    "            case CURLOPT_HTTP_VERSION:\n"
    "                if ($value != CURL_HTTP_VERSION_1_1) {\n"
    "                    trigger_error(\"swoole_curl_setopt(): CURLOPT_HTTP_VERSION[{$value}] is not supported\", E_USER_WARNING);\n"
    "                    return false;\n"
    "                }\n"
    "                break;\n"
    "            case CURLOPT_FAILONERROR:\n"
    "                $this->failOnError = $value;\n"
    "                break;\n"
    "                /*\n"
    "                 * Http Cookie\n"
    "                 */\n"
    "            case CURLOPT_COOKIE:\n"
    "                $this->setHeader('Cookie', $value);\n"
    "                break;\n"
    "            case CURLOPT_COOKIEJAR:\n"
    "                $this->cookieJar = (string) $value;\n"
    "                break;\n"
    "            case CURLOPT_COOKIEFILE:\n"
    "                if (is_file((string) $value)) {\n"
    "                    $this->setHeader('Cookie', file_get_contents($value));\n"
    "                }\n"
    "                break;\n"
    "            case CURLOPT_CONNECTTIMEOUT:\n"
    "                $this->clientOptions[Constant::OPTION_CONNECT_TIMEOUT] = $value;\n"
    "                break;\n"
    "            case CURLOPT_CONNECTTIMEOUT_MS:\n"
    "                $this->clientOptions[Constant::OPTION_CONNECT_TIMEOUT] = $value / 1000;\n"
    "                break;\n"
    "            case CURLOPT_TIMEOUT:\n"
    "                $this->clientOptions[Constant::OPTION_TIMEOUT] = $value;\n"
    "                break;\n"
    "            case CURLOPT_TIMEOUT_MS:\n"
    "                $this->clientOptions[Constant::OPTION_TIMEOUT] = $value / 1000;\n"
    "                break;\n"
    "            case CURLOPT_FILE:\n"
    "                $this->outputStream = $value;\n"
    "                break;\n"
    "            case CURLOPT_HEADER:\n"
    "                $this->withHeader = $value;\n"
    "                break;\n"
    "            case CURLOPT_HEADERFUNCTION:\n"
    "                $this->headerFunction = $value;\n"
    "                break;\n"
    "            case CURLOPT_READFUNCTION:\n"
    "                $this->readFunction = $value;\n"
    "                break;\n"
    "            case CURLOPT_WRITEFUNCTION:\n"
    "                if (SWOOLE_VERSION_ID >= 50100) {\n"
    "                    $this->clientOptions[Constant::OPTION_WRITE_FUNC] = function ($client, $data) use ($value) {\n"
    "                        return $value($this, $data);\n"
    "                    };\n"
    "                } else {\n"
    "                    $this->writeFunction = $value;\n"
    "                }\n"
    "                break;\n"
    "            case CURLOPT_NOPROGRESS:\n"
    "                $this->noProgress = $value;\n"
    "                break;\n"
    "            case CURLOPT_PROGRESSFUNCTION:\n"
    "                $this->progressFunction = $value;\n"
    "                break;\n"
    "            case CURLOPT_HTTPAUTH:\n"
    "                if (!($value & CURLAUTH_BASIC)) {\n"
    "                    trigger_error(\"swoole_curl_setopt(): CURLOPT_HTTPAUTH[{$value}] is not supported\", E_USER_WARNING);\n"
    "                    return false;\n"
    "                }\n"
    "                break;\n"
    "            case CURLOPT_USERPWD:\n"
    "                $this->setHeader('Authorization', 'Basic ' . base64_encode($value));\n"
    "                break;\n"
    "            case CURLOPT_FOLLOWLOCATION:\n"
    "                $this->followLocation = $value;\n"
    "                break;\n"
    "            case CURLOPT_AUTOREFERER:\n"
    "                $this->autoReferer = $value;\n"
    "                break;\n"
    "            case CURLOPT_MAXREDIRS:\n"
    "                $this->maxRedirects = $value;\n"
    "                break;\n"
    "            case CURLOPT_PUT:\n"
    "            case CURLOPT_UPLOAD:\n"
    "                /* after libcurl 7.12, CURLOPT_PUT is replaced by CURLOPT_UPLOAD */\n"
    "                $this->method = 'PUT';\n"
    "                break;\n"
    "            case CURLOPT_INFILE:\n"
    "                $this->infile = $value;\n"
    "                break;\n"
    "            case CURLOPT_INFILESIZE:\n"
    "                $this->infileSize = $value;\n"
    "                break;\n"
    "            case CURLOPT_HTTPGET:\n"
    "                /* Since GET is the default, this is only necessary if the request method has been changed. */\n"
    "                $this->method = 'GET';\n"
    "                break;\n"
    "            default:\n"
    "                throw new CurlException(\"swoole_curl_setopt(): option[{$opt}] is not supported\");\n"
    "        }\n"
    "        return true;\n"
    "    }\n"
    "\n"
    "    private function execute()\n"
    "    {\n"
    "        $this->info['redirect_count'] = $this->info['starttransfer_time'] = 0;\n"
    "        $this->info['redirect_url']   = '';\n"
    "        $timeBegin                    = microtime(true);\n"
    "        /*\n"
    "         * Socket\n"
    "         */\n"
    "        if (!$this->urlInfo) {\n"
    "            $this->setError(CURLE_URL_MALFORMAT, 'No URL set or URL using bad/illegal format');\n"
    "            return false;\n"
    "        }\n"
    "        if (!isset($this->client)) {\n"
    "            $this->create();\n"
    "        }\n"
    "        while (true) {\n"
    "            $client = $this->client;\n"
    "            /*\n"
    "             * Http Proxy\n"
    "             */\n"
    "            if ($this->proxy) {\n"
    "                $parse         = parse_url($this->proxy);\n"
    "                $proxy         = $parse['host'] ?? $parse['path'];\n"
    "                $proxyPort     = $parse['port'] ?? $this->proxyPort;\n"
    "                $proxyUsername = $parse['user'] ?? $this->proxyUsername;\n"
    "                $proxyPassword = $parse['pass'] ?? $this->proxyPassword;\n"
    "                $proxyType     = $parse['scheme'] ?? $this->proxyType;\n"
    "                if (is_string($proxyType)) {\n"
    "                    if ($proxyType === 'socks5') {\n"
    "                        $proxyType = CURLPROXY_SOCKS5;\n"
    "                    } else {\n"
    "                        $proxyType = CURLPROXY_HTTP;\n"
    "                    }\n"
    "                }\n"
    "\n"
    "                if (!filter_var($proxy, FILTER_VALIDATE_IP)) {\n"
    "                    $ip = System::gethostbyname($proxy, AF_INET, $this->clientOptions['connect_timeout'] ?? -1);\n"
    "                    if (!$ip) {\n"
    "                        $this->setError(CURLE_COULDNT_RESOLVE_PROXY, 'Could not resolve proxy: ' . $proxy);\n"
    "                        return false;\n"
    "                    }\n"
    "                    $this->proxy = $proxy = $ip;\n"
    "                }\n"
    "                $proxyOptions = match ($proxyType) {\n"
    "                    CURLPROXY_HTTP => [\n"
    "                        'http_proxy_host'     => $proxy,\n"
    "                        'http_proxy_port'     => $proxyPort,\n"
    "                        'http_proxy_username' => $proxyUsername,\n"
    "                        'http_proxy_password' => $proxyPassword,\n"
    "                    ],\n"
    "                    CURLPROXY_SOCKS5 => [\n"
    "                        'socks5_host'     => $proxy,\n"
    "                        'socks5_port'     => $proxyPort,\n"
    "                        'socks5_username' => $proxyUsername,\n"
    "                        'socks5_password' => $proxyPassword,\n"
    "                    ],\n"
    "                    default => throw new CurlException(\"Unexpected proxy type [{$proxyType}]\"),\n"
    "                };\n"
    "            }\n"
    "            /*\n"
    "             * Client Options\n"
    "             */\n"
    "            $client->set(\n"
    "                $this->clientOptions +\n"
    "                ($proxyOptions ?? [])\n"
    "            );\n"
    "            /*\n"
    "             * Method\n"
    "             */\n"
    "            if ($this->method) {\n"
    "                $client->setMethod($this->method);\n"
    "            }\n"
    "            /*\n"
    "             * Data\n"
    "             */\n"
    "            if ($this->infile) {\n"
    "                // Infile\n"
    "                // Notice: we make its priority higher than postData but raw cURL will send both of them\n"
    "                $data = '';\n"
    "                while (true) {\n"
    "                    $nLength = $this->infileSize - strlen($data);\n"
    "                    if ($nLength === 0) {\n"
    "                        break;\n"
    "                    }\n"
    "                    if (feof($this->infile)) {\n"
    "                        break;\n"
    "                    }\n"
    "                    $data .= fread($this->infile, $nLength);\n"
    "                }\n"
    "                $client->setData($data);\n"
    "                // Notice: although we reset it, raw cURL never do this\n"
    "                $this->infile     = null;\n"
    "                $this->infileSize = PHP_INT_MAX;\n"
    "            } else {\n"
    "                // POST data\n"
    "                if ($this->postData) {\n"
    "                    if (is_string($this->postData)) {\n"
    "                        if (!$this->hasHeader('content-type')) {\n"
    "                            $this->setHeader('Content-Type', 'application/x-www-form-urlencoded');\n"
    "                        }\n"
    "                    } elseif (is_array($this->postData)) {\n"
    "                        foreach ($this->postData as $k => $v) {\n"
    "                            if ($v instanceof \\CURLFile) {\n"
    "                                $client->addFile($v->getFilename(), $k, $v->getMimeType() ?: 'application/octet-stream', $v->getPostFilename());\n"
    "                                unset($this->postData[$k]);\n"
    "                            }\n"
    "                        }\n"
    "                    }\n"
    "                    $client->setData($this->postData);\n"
    "                }\n"
    "            }\n"
    "            /*\n"
    "             * Headers\n"
    "             */\n"
    "            // Notice: setHeaders must be placed last, because headers may be changed by other parts\n"
    "            // As much as possible to ensure that Host is the first header.\n"
    "            // See: http://tools.ietf.org/html/rfc7230#section-5.4\n"
    "            $client->setHeaders($this->headers);\n"
    "            /**\n"
    "             * Execute.\n"
    "             */\n"
    "            $executeResult = $client->execute($this->getUrl());\n"
    "            if (!$executeResult) {\n"
    "                $errCode = $client->errCode;\n"
    "                if ($errCode == SWOOLE_ERROR_DNSLOOKUP_RESOLVE_FAILED or $errCode == SWOOLE_ERROR_DNSLOOKUP_RESOLVE_TIMEOUT) {\n"
    "                    $this->setError(CURLE_COULDNT_RESOLVE_HOST, 'Could not resolve host: ' . $client->host);\n"
    "                } else {\n"
    "                    $this->setError($errCode, $client->errMsg);\n"
    "                }\n"
    "                $this->info['total_time'] = microtime(true) - $timeBegin;\n"
    "                return false;\n"
    "            }\n"
    "            if ($client->statusCode >= 300 and $client->statusCode < 400 and isset($client->headers['location'])) {\n"
    "                $redirectParsedUrl = $this->getRedirectUrl($client->headers['location']);\n"
    "                $redirectUrl       = self::unparseUrl($redirectParsedUrl);\n"
    "                if ($this->followLocation and ($this->maxRedirects === null or $this->info['redirect_count'] < $this->maxRedirects)) {\n"
    "                    if ($this->info['redirect_count'] === 0) {\n"
    "                        $this->info['starttransfer_time'] = microtime(true) - $timeBegin;\n"
    "                        $redirectBeginTime                = microtime(true);\n"
    "                    }\n"
    "                    // force GET\n"
    "                    if (in_array($client->statusCode, [Status::MOVED_PERMANENTLY, Status::FOUND, Status::SEE_OTHER])) {\n"
    "                        $this->method = 'GET';\n"
    "                    }\n"
    "                    if ($this->autoReferer) {\n"
    "                        $this->setHeader('Referer', $this->info['url']);\n"
    "                    }\n"
    "                    $this->setUrl($redirectUrl, false);\n"
    "                    $this->setUrlInfo($redirectParsedUrl);\n"
    "                    $this->info['redirect_count']++;\n"
    "                } else {\n"
    "                    $this->info['redirect_url'] = $redirectUrl;\n"
    "                    break;\n"
    "                }\n"
    "            } elseif ($this->failOnError && $client->statusCode >= 400) {\n"
    "                $this->setError(CURLE_HTTP_RETURNED_ERROR, \"The requested URL returned error: {$client->statusCode} \" . Status::getReasonPhrase($client->statusCode));\n"
    "                return false;\n"
    "            } else {\n"
    "                break;\n"
    "            }\n"
    "        }\n"
    "        $this->info['total_time']     = microtime(true) - $timeBegin;\n"
    "        $this->info['http_code']      = $client->statusCode;\n"
    "        $this->info['content_type']   = $client->headers['content-type'] ?? '';\n"
    "        $this->info['size_download']  = $this->info['download_content_length'] = strlen($client->body);\n"
    "        $this->info['speed_download'] = 1 / $this->info['total_time'] * $this->info['size_download'];\n"
    "        if (isset($redirectBeginTime)) {\n"
    "            $this->info['redirect_time'] = microtime(true) - $redirectBeginTime;\n"
    "        }\n"
    "\n"
    "        if (filter_var($this->urlInfo['host'], FILTER_VALIDATE_IP)) {\n"
    "            $this->info['primary_ip'] = $this->urlInfo['host'];\n"
    "        }\n"
    "\n"
    "        if ($this->unix_socket_path) {\n"
    "            $this->info['primary_ip']   = $this->unix_socket_path;\n"
    "            $this->info['primary_port'] = $this->urlInfo['port'];\n"
    "        }\n"
    "\n"
    "        $headerContent = '';\n"
    "        if ($client->headers) {\n"
    "            $cb = $this->headerFunction;\n"
    "            if ($client->statusCode > 0) {\n"
    "                $row = \"HTTP/1.1 {$client->statusCode} \" . Status::getReasonPhrase($client->statusCode) . \"\\r\\n\";\n"
    "                if ($cb) {\n"
    "                    $cb($this, $row);\n"
    "                }\n"
    "                $headerContent .= $row;\n"
    "            }\n"
    "            foreach ($client->headers as $k => $v) {\n"
    "                $list = is_array($v) ? $v : [$v];\n"
    "                foreach ($list as $_v) {\n"
    "                    $row = \"{$k}: {$_v}\\r\\n\";\n"
    "                    if ($cb) {\n"
    "                        $cb($this, $row);\n"
    "                    }\n"
    "                    $headerContent .= $row;\n"
    "                }\n"
    "            }\n"
    "            $headerContent .= \"\\r\\n\";\n"
    "            $this->info['header_size'] = strlen($headerContent);\n"
    "            if ($cb) {\n"
    "                $cb($this, '');\n"
    "            }\n"
    "        } else {\n"
    "            $this->info['header_size'] = 0;\n"
    "        }\n"
    "\n"
    "        if ($client->body and $this->readFunction) {\n"
    "            $cb = $this->readFunction;\n"
    "            $cb($this, $this->outputStream, strlen($client->body));\n"
    "        }\n"
    "\n"
    "        if ($this->withHeader) {\n"
    "            $transfer = $headerContent . $client->body;\n"
    "        } else {\n"
    "            $transfer = $client->body;\n"
    "        }\n"
    "\n"
    "        if ($this->withHeaderOut) {\n"
    "            $headerOutContent             = $client->getHeaderOut();\n"
    "            $this->info['request_header'] = $headerOutContent ? $headerOutContent . \"\\r\\n\\r\\n\" : '';\n"
    "        }\n"
    "        if ($this->withFileTime) {\n"
    "            if (isset($client->headers['last-modified'])) {\n"
    "                $this->info['filetime'] = strtotime($client->headers['last-modified']);\n"
    "            } else {\n"
    "                $this->info['filetime'] = -1;\n"
    "            }\n"
    "        }\n"
    "\n"
    "        if (!empty($this->cookieJar)) {\n"
    "            if ($this->cookieJar === '-') {\n"
    "                foreach ((array) $client->set_cookie_headers as $cookie) {\n"
    "                    echo $cookie . PHP_EOL;\n"
    "                }\n"
    "            } else {\n"
    "                $cookies = '';\n"
    "                foreach ((array) $client->set_cookie_headers as $cookie) {\n"
    "                    $cookies .= \"{$cookie};\";\n"
    "                }\n"
    "                file_put_contents($this->cookieJar, $cookies);\n"
    "            }\n"
    "        }\n"
    "\n"
    "        if ($this->writeFunction) {\n"
    "            if (!is_callable($this->writeFunction)) { // @phpstan-ignore booleanNot.alwaysFalse\n"
    "                trigger_error('curl_exec(): Could not call the CURLOPT_WRITEFUNCTION', E_USER_WARNING);\n"
    "                $this->setError(CURLE_WRITE_ERROR, 'Failure writing output to destination');\n"
    "                return false;\n"
    "            }\n"
    "            call_user_func($this->writeFunction, $this, $transfer);\n"
    "            return true;\n"
    "        }\n"
    "\n"
    "        if ($this->returnTransfer) {\n"
    "            return $this->transfer = $transfer;\n"
    "        }\n"
    "        if ($this->outputStream) {\n"
    "            return fwrite($this->outputStream, $transfer) === strlen($transfer);\n"
    "        }\n"
    "        echo $transfer;\n"
    "\n"
    "        return true;\n"
    "    }\n"
    "\n"
    "    /* ====== Redirect helper ====== */\n"
    "\n"
    "    private static function unparseUrl(array $parsedUrl): string\n"
    "    {\n"
    "        $scheme   = ($parsedUrl['scheme'] ?? 'http') . '://';\n"
    "        $host     = $parsedUrl['host'] ?? '';\n"
    "        $port     = isset($parsedUrl['port']) ? ':' . $parsedUrl['port'] : '';\n"
    "        $user     = $parsedUrl['user'] ?? '';\n"
    "        $pass     = isset($parsedUrl['pass']) ? ':' . $parsedUrl['pass'] : '';\n"
    "        $pass     = ($user or $pass) ? \"{$pass}@\" : '';\n"
    "        $path     = $parsedUrl['path'] ?? '';\n"
    "        $query    = (isset($parsedUrl['query']) and $parsedUrl['query'] !== '') ? '?' . $parsedUrl['query'] : '';\n"
    "        $fragment = isset($parsedUrl['fragment']) ? '#' . $parsedUrl['fragment'] : '';\n"
    "        return $scheme . $user . $pass . $host . $port . $path . $query . $fragment;\n"
    "    }\n"
    "\n"
    "    private function getRedirectUrl(string $location): array\n"
    "    {\n"
    "        $uri = parse_url($location);\n"
    "        if (isset($uri['host'])) {\n"
    "            $redirectUri = $uri;\n"
    "        } else {\n"
    "            if (!isset($location[0])) {\n"
    "                return [];\n"
    "            }\n"
    "            $redirectUri          = $this->urlInfo;\n"
    "            $redirectUri['query'] = '';\n"
    "            if ($location[0] === '/') {\n"
    "                $redirectUri['path'] = $location;\n"
    "            } else {\n"
    "                $path = dirname($redirectUri['path'] ?? '');\n"
    "                if ($path === '.') {\n"
    "                    $path = '/';\n"
    "                }\n"
    "                if (isset($location[1]) and str_starts_with($location, './')) {\n"
    "                    $location = substr($location, 2);\n"
    "                }\n"
    "                $redirectUri['path'] = $path . $location;\n"
    "            }\n"
    "            if (is_array($uri)) {\n"
    "                foreach ($uri as $k => $v) {\n"
    "                    if (!in_array($k, ['path', 'query'])) {\n"
    "                        $redirectUri[$k] = $v;\n"
    "                    }\n"
    "                }\n"
    "            }\n"
    "        }\n"
    "        return $redirectUri;\n"
    "    }\n"
    "}\n";

static const char* swoole_library_source_core_fast_cgi =
    "\n"
    "/**\n"
    " * This file is part of Swoole.\n"
    " *\n"
    " * @link     https://www.swoole.com\n"
    " * @contact  team@swoole.com\n"
    " * @license  https://github.com/swoole/library/blob/master/LICENSE\n"
    " */\n"
    "\n"
    "declare(strict_types=1);\n"
    "\n"
    "namespace Swoole;\n"
    "\n"
    "/**\n"
    " * FastCGI constants.\n"
    " */\n"
    "class FastCGI\n"
    "{\n"
    "    /**\n"
    "     * Number of bytes in a FCGI_Header.  Future versions of the protocol\n"
    "     * will not reduce this number.\n"
    "     */\n"
    "    public const HEADER_LEN = 8;\n"
    "\n"
    "    /**\n"
    "     * Format of FCGI_HEADER for unpacking in PHP\n"
    "     */\n"
    "    public const HEADER_FORMAT = 'Cversion/Ctype/nrequestId/ncontentLength/CpaddingLength/Creserved';\n"
    "\n"
    "    /**\n"
    "     * Max content length of a record\n"
    "     */\n"
    "    public const MAX_CONTENT_LENGTH = 65535;\n"
    "\n"
    "    /**\n"
    "     * Value for version component of FCGI_Header\n"
    "     */\n"
    "    public const VERSION_1 = 1;\n"
    "\n"
    "    /**\n"
    "     * Values for type component of FCGI_Header\n"
    "     */\n"
    "    public const BEGIN_REQUEST = 1;\n"
    "\n"
    "    public const ABORT_REQUEST = 2;\n"
    "\n"
    "    public const END_REQUEST = 3;\n"
    "\n"
    "    public const PARAMS = 4;\n"
    "\n"
    "    public const STDIN = 5;\n"
    "\n"
    "    public const STDOUT = 6;\n"
    "\n"
    "    public const STDERR = 7;\n"
    "\n"
    "    public const DATA = 8;\n"
    "\n"
    "    public const GET_VALUES = 9;\n"
    "\n"
    "    public const GET_VALUES_RESULT = 10;\n"
    "\n"
    "    public const UNKNOWN_TYPE = 11;\n"
    "\n"
    "    /**\n"
    "     * Value for requestId component of FCGI_Header\n"
    "     */\n"
    "    public const DEFAULT_REQUEST_ID = 1;\n"
    "\n"
    "    /**\n"
    "     * Mask for flags component of FCGI_BeginRequestBody\n"
    "     */\n"
    "    public const KEEP_CONN = 1;\n"
    "\n"
    "    /**\n"
    "     * Values for role component of FCGI_BeginRequestBody\n"
    "     */\n"
    "    public const RESPONDER = 1;\n"
    "\n"
    "    public const AUTHORIZER = 2;\n"
    "\n"
    "    public const FILTER = 3;\n"
    "\n"
    "    /**\n"
    "     * Values for protocolStatus component of FCGI_EndRequestBody\n"
    "     */\n"
    "    public const REQUEST_COMPLETE = 0;\n"
    "\n"
    "    public const CANT_MPX_CONN = 1;\n"
    "\n"
    "    public const OVERLOADED = 2;\n"
    "\n"
    "    public const UNKNOWN_ROLE = 3;\n"
    "}\n";

static const char* swoole_library_source_core_fast_cgi_record =
    "\n"
    "/**\n"
    " * This file is part of Swoole.\n"
    " *\n"
    " * @link     https://www.swoole.com\n"
    " * @contact  team@swoole.com\n"
    " * @license  https://github.com/swoole/library/blob/master/LICENSE\n"
    " */\n"
    "\n"
    "declare(strict_types=1);\n"
    "\n"
    "namespace Swoole\\FastCGI;\n"
    "\n"
    "use Swoole\\FastCGI;\n"
    "\n"
    "/**\n"
    " * FastCGI record.\n"
    " */\n"
    "class Record implements \\Stringable\n"
    "{\n"
    "    /**\n"
    "     * Identifies the FastCGI protocol version.\n"
    "     */\n"
    "    protected int $version = FastCGI::VERSION_1;\n"
    "\n"
    "    /**\n"
    "     * Identifies the FastCGI record type, i.e. the general function that the record performs.\n"
    "     */\n"
    "    protected int $type = FastCGI::UNKNOWN_TYPE;\n"
    "\n"
    "    /**\n"
    "     * Identifies the FastCGI request to which the record belongs.\n"
    "     */\n"
    "    protected int $requestId = FastCGI::DEFAULT_REQUEST_ID;\n"
    "\n"
    "    /**\n"
    "     * Reserved byte for future proposes\n"
    "     */\n"
    "    protected int $reserved = 0;\n"
    "\n"
    "    /**\n"
    "     * The number of bytes in the contentData component of the record.\n"
    "     */\n"
    "    private int $contentLength = 0;\n"
    "\n"
    "    /**\n"
    "     * The number of bytes in the paddingData component of the record.\n"
    "     */\n"
    "    private int $paddingLength = 0;\n"
    "\n"
    "    /**\n"
    "     * Binary data, between 0 and 65535 bytes of data, interpreted according to the record type.\n"
    "     */\n"
    "    private string $contentData = '';\n"
    "\n"
    "    /**\n"
    "     * Padding data, between 0 and 255 bytes of data, which are ignored.\n"
    "     */\n"
    "    private string $paddingData = '';\n"
    "\n"
    "    /**\n"
    "     * Returns the binary message representation of record\n"
    "     */\n"
    "    final public function __toString(): string\n"
    "    {\n"
    "        $headerPacket = pack(\n"
    "            'CCnnCC',\n"
    "            $this->version,\n"
    "            $this->type,\n"
    "            $this->requestId,\n"
    "            $this->contentLength,\n"
    "            $this->paddingLength,\n"
    "            $this->reserved\n"
    "        );\n"
    "\n"
    "        $payloadPacket = $this->packPayload();\n"
    "        $paddingPacket = pack(\"a{$this->paddingLength}\", $this->paddingData);\n"
    "\n"
    "        return $headerPacket . $payloadPacket . $paddingPacket;\n"
    "    }\n"
    "\n"
    "    /**\n"
    "     * Unpacks the message from the binary data buffer\n"
    "     */\n"
    "    final public static function unpack(string $binaryData): static\n"
    "    {\n"
    "        /** @var static $self */\n"
    "        $self = (new \\ReflectionClass(static::class))->newInstanceWithoutConstructor();\n"
    "\n"
    "        /** @phpstan-var false|array{version: int, type: int, requestId: int, contentLength: int, paddingLength: int, reserved: int} */\n"
    "        $packet = unpack(FastCGI::HEADER_FORMAT, $binaryData);\n"
    "        if ($packet === false) {\n"
    "            throw new \\RuntimeException('Can not unpack data from the binary buffer');\n"
    "        }\n"
    "        [\n"
    "            $self->version,\n"
    "            $self->type,\n"
    "            $self->requestId,\n"
    "            $self->contentLength,\n"
    "            $self->paddingLength,\n"
    "            $self->reserved,\n"
    "        ] = array_values($packet);\n"
    "\n"
    "        $payload = substr($binaryData, FastCGI::HEADER_LEN);\n"
    "        self::unpackPayload($self, $payload);\n"
    "        if (static::class !== self::class && $self->contentLength > 0) {\n"
    "            static::unpackPayload($self, $payload);\n"
    "        }\n"
    "\n"
    "        return $self;\n"
    "    }\n"
    "\n"
    "    /**\n"
    "     * Sets the content data and adjusts the length fields\n"
    "     *\n"
    "     * @return static\n"
    "     */\n"
    "    public function setContentData(string $data): self\n"
    "    {\n"
    "        $this->contentLength = strlen($data);\n"
    "        if ($this->contentLength > FastCGI::MAX_CONTENT_LENGTH) {\n"
    "            $this->contentLength = FastCGI::MAX_CONTENT_LENGTH;\n"
    "            $this->contentData   = substr($data, 0, FastCGI::MAX_CONTENT_LENGTH);\n"
    "        } else {\n"
    "            $this->contentData = $data;\n"
    "        }\n"
    "        $extraLength         = $this->contentLength % 8;\n"
    "        $this->paddingLength = $extraLength ? (8 - $extraLength) : 0;\n"
    "        return $this;\n"
    "    }\n"
    "\n"
    "    /**\n"
    "     * Returns the context data from the record\n"
    "     */\n"
    "    public function getContentData(): string\n"
    "    {\n"
    "        return $this->contentData;\n"
    "    }\n"
    "\n"
    "    /**\n"
    "     * Returns the version of record\n"
    "     */\n"
    "    public function getVersion(): int\n"
    "    {\n"
    "        return $this->version;\n"
    "    }\n"
    "\n"
    "    /**\n"
    "     * Returns record type\n"
    "     */\n"
    "    public function getType(): int\n"
    "    {\n"
    "        return $this->type;\n"
    "    }\n"
    "\n"
    "    /**\n"
    "     * Returns request ID\n"
    "     */\n"
    "    public function getRequestId(): int\n"
    "    {\n"
    "        return $this->requestId;\n"
    "    }\n"
    "\n"
    "    /**\n"
    "     * Sets request ID\n"
    "     *\n"
    "     * There should be only one unique ID for all active requests,\n"
    "     * use random number or preferably resetting auto-increment.\n"
    "     *\n"
    "     * @return static\n"
    "     */\n"
    "    public function setRequestId(int $requestId): self\n"
    "    {\n"
    "        $this->requestId = $requestId;\n"
    "        return $this;\n"
    "    }\n"
    "\n"
    "    /**\n"
    "     * Returns the size of content length\n"
    "     */\n"
    "    final public function getContentLength(): int\n"
    "    {\n"
    "        return $this->contentLength;\n"
    "    }\n"
    "\n"
    "    /**\n"
    "     * Returns the size of padding length\n"
    "     */\n"
    "    final public function getPaddingLength(): int\n"
    "    {\n"
    "        return $this->paddingLength;\n"
    "    }\n"
    "\n"
    "    /**\n"
    "     * Method to unpack the payload for the record.\n"
    "     *\n"
    "     * NB: Default implementation will be always called\n"
    "     */\n"
    "    protected static function unpackPayload(self $self, string $binaryData): void\n"
    "    {\n"
    "        /** @phpstan-var false|array{contentData: string, paddingData: string} */\n"
    "        $payload = unpack(\"a{$self->contentLength}contentData/a{$self->paddingLength}paddingData\", $binaryData);\n"
    "        if ($payload === false) {\n"
    "            throw new \\RuntimeException('Can not unpack data from the binary buffer');\n"
    "        }\n"
    "        [\n"
    "            $self->contentData,\n"
    "            $self->paddingData,\n"
    "        ] = array_values($payload);\n"
    "    }\n"
    "\n"
    "    /**\n"
    "     * Implementation of packing the payload\n"
    "     */\n"
    "    protected function packPayload(): string\n"
    "    {\n"
    "        return pack(\"a{$this->contentLength}\", $this->contentData);\n"
    "    }\n"
    "}\n";

static const char* swoole_library_source_core_fast_cgi_record_params =
    "\n"
    "/**\n"
    " * This file is part of Swoole.\n"
    " *\n"
    " * @link     https://www.swoole.com\n"
    " * @contact  team@swoole.com\n"
    " * @license  https://github.com/swoole/library/blob/master/LICENSE\n"
    " */\n"
    "\n"
    "declare(strict_types=1);\n"
    "\n"
    "namespace Swoole\\FastCGI\\Record;\n"
    "\n"
    "use Swoole\\FastCGI;\n"
    "use Swoole\\FastCGI\\Record;\n"
    "\n"
    "/**\n"
    " * Params request record\n"
    " */\n"
    "class Params extends Record\n"
    "{\n"
    "    /**\n"
    "     * List of params\n"
    "     *\n"
    "     * @var string[]\n"
    "     * @phpstan-var array<string, string>\n"
    "     */\n"
    "    protected array $values = [];\n"
    "\n"
    "    /**\n"
    "     * Constructs a param request\n"
    "     *\n"
    "     * @phpstan-param array<string, string> $values\n"
    "     */\n"
    "    public function __construct(array $values)\n"
    "    {\n"
    "        $this->type   = FastCGI::PARAMS;\n"
    "        $this->values = $values;\n"
    "        $this->setContentData($this->packPayload());\n"
    "    }\n"
    "\n"
    "    /**\n"
    "     * Returns an associative list of parameters\n"
    "     *\n"
    "     * @phpstan-return array<string, string>\n"
    "     */\n"
    "    public function getValues(): array\n"
    "    {\n"
    "        return $this->values;\n"
    "    }\n"
    "\n"
    "    /**\n"
    "     * {@inheritdoc}\n"
    "     * @param static $self\n"
    "     */\n"
    "    protected static function unpackPayload(Record $self, string $binaryData): void\n"
    "    {\n"
    "        assert($self instanceof self); // @phpstan-ignore function.alreadyNarrowedType,instanceof.alwaysTrue\n"
    "        $currentOffset = 0;\n"
    "        do {\n"
    "            /** @phpstan-var false|array{nameLengthHigh: int} */\n"
    "            $payload = unpack('CnameLengthHigh', $binaryData);\n"
    "            if ($payload === false) {\n"
    "                throw new \\RuntimeException('Can not unpack data from the binary buffer');\n"
    "            }\n"
    "            [$nameLengthHigh] = array_values($payload);\n"
    "            $isLongName       = ($nameLengthHigh >> 7 == 1);\n"
    "            $valueOffset      = $isLongName ? 4 : 1;\n"
    "\n"
    "            /** @phpstan-var false|array{valueLengthHigh: int} */\n"
    "            $payload = unpack('CvalueLengthHigh', substr($binaryData, $valueOffset));\n"
    "            if ($payload === false) {\n"
    "                throw new \\RuntimeException('Can not unpack data from the binary buffer');\n"
    "            }\n"
    "            [$valueLengthHigh] = array_values($payload);\n"
    "            $isLongValue       = ($valueLengthHigh >> 7 == 1);\n"
    "            $dataOffset        = $valueOffset + ($isLongValue ? 4 : 1);\n"
    "\n"
    "            $formatParts = [\n"
    "                $isLongName ? 'NnameLength' : 'CnameLength',\n"
    "                $isLongValue ? 'NvalueLength' : 'CvalueLength',\n"
    "            ];\n"
    "            $format      = join('/', $formatParts);\n"
    "\n"
    "            /** @phpstan-var false|array{nameLength: int, valueLength: int} */\n"
    "            $payload = unpack($format, $binaryData);\n"
    "            if ($payload === false) {\n"
    "                throw new \\RuntimeException('Can not unpack data from the binary buffer');\n"
    "            }\n"
    "            [$nameLength, $valueLength] = array_values($payload);\n"
    "\n"
    "            // Clear top bit for long record\n"
    "            $nameLength &= ($isLongName ? 0x7FFFFFFF : 0x7F);\n"
    "            $valueLength &= ($isLongValue ? 0x7FFFFFFF : 0x7F);\n"
    "\n"
    "            /** @phpstan-var false|array{nameData: string, valueData: string} */\n"
    "            $payload = unpack(\n"
    "                \"a{$nameLength}nameData/a{$valueLength}valueData\",\n"
    "                substr($binaryData, $dataOffset)\n"
    "            );\n"
    "            if ($payload === false) {\n"
    "                throw new \\RuntimeException('Can not unpack data from the binary buffer');\n"
    "            }\n"
    "            [$nameData, $valueData] = array_values($payload);\n"
    "\n"
    "            $self->values[$nameData] = $valueData;\n"
    "\n"
    "            $keyValueLength = $dataOffset + $nameLength + $valueLength;\n"
    "            $binaryData     = substr($binaryData, $keyValueLength);\n"
    "            $currentOffset += $keyValueLength;\n"
    "        } while ($currentOffset < $self->getContentLength());\n"
    "    }\n"
    "\n"
    "    /**\n"
    "     * {@inheritdoc}\n"
    "     */\n"
    "    protected function packPayload(): string\n"
    "    {\n"
    "        $payload = '';\n"
    "        foreach ($this->values as $nameData => $valueData) {\n"
    "            if ($valueData === null) { // @phpstan-ignore identical.alwaysFalse\n"
    "                continue;\n"
    "            }\n"
    "            $nameLength  = strlen($nameData);\n"
    "            $valueLength = strlen((string) $valueData);\n"
    "            $isLongName  = $nameLength > 127;\n"
    "            $isLongValue = $valueLength > 127;\n"
    "            $formatParts = [\n"
    "                $isLongName ? 'N' : 'C',\n"
    "                $isLongValue ? 'N' : 'C',\n"
    "                \"a{$nameLength}\",\n"
    "                \"a{$valueLength}\",\n"
    "            ];\n"
    "\n"
    "            $format = join('', $formatParts);\n"
    "\n"
    "            $payload .= pack(\n"
    "                $format,\n"
    "                $isLongName ? ($nameLength | 0x80000000) : $nameLength,\n"
    "                $isLongValue ? ($valueLength | 0x80000000) : $valueLength,\n"
    "                $nameData,\n"
    "                $valueData\n"
    "            );\n"
    "        }\n"
    "\n"
    "        return $payload;\n"
    "    }\n"
    "}\n";

static const char* swoole_library_source_core_fast_cgi_record_abort_request =
    "\n"
    "/**\n"
    " * This file is part of Swoole.\n"
    " *\n"
    " * @link     https://www.swoole.com\n"
    " * @contact  team@swoole.com\n"
    " * @license  https://github.com/swoole/library/blob/master/LICENSE\n"
    " */\n"
    "\n"
    "declare(strict_types=1);\n"
    "\n"
    "namespace Swoole\\FastCGI\\Record;\n"
    "\n"
    "use Swoole\\FastCGI;\n"
    "use Swoole\\FastCGI\\Record;\n"
    "\n"
    "/**\n"
    " * The Web server sends a FCGI_ABORT_REQUEST record to abort a request\n"
    " */\n"
    "class AbortRequest extends Record\n"
    "{\n"
    "    public function __construct(int $requestId)\n"
    "    {\n"
    "        $this->type = FastCGI::ABORT_REQUEST;\n"
    "        $this->setRequestId($requestId);\n"
    "    }\n"
    "}\n";

static const char* swoole_library_source_core_fast_cgi_record_begin_request =
    "\n"
    "/**\n"
    " * This file is part of Swoole.\n"
    " *\n"
    " * @link     https://www.swoole.com\n"
    " * @contact  team@swoole.com\n"
    " * @license  https://github.com/swoole/library/blob/master/LICENSE\n"
    " */\n"
    "\n"
    "declare(strict_types=1);\n"
    "\n"
    "namespace Swoole\\FastCGI\\Record;\n"
    "\n"
    "use Swoole\\FastCGI;\n"
    "use Swoole\\FastCGI\\Record;\n"
    "\n"
    "/**\n"
    " * The Web server sends a FCGI_BEGIN_REQUEST record to start a request.\n"
    " */\n"
    "class BeginRequest extends Record\n"
    "{\n"
    "    /**\n"
    "     * The role component sets the role the Web server expects the application to play.\n"
    "     * The currently-defined roles are:\n"
    "     *   FCGI_RESPONDER\n"
    "     *   FCGI_AUTHORIZER\n"
    "     *   FCGI_FILTER\n"
    "     */\n"
    "    protected int $role = FastCGI::UNKNOWN_ROLE;\n"
    "\n"
    "    /**\n"
    "     * The flags component contains a bit that controls connection shutdown.\n"
    "     *\n"
    "     * flags & FCGI_KEEP_CONN:\n"
    "     *   If zero, the application closes the connection after responding to this request.\n"
    "     *   If not zero, the application does not close the connection after responding to this request;\n"
    "     *   the Web server retains responsibility for the connection.\n"
    "     */\n"
    "    protected int $flags;\n"
    "\n"
    "    /**\n"
    "     * Reserved data, 5 bytes maximum\n"
    "     */\n"
    "    protected string $reserved1;\n"
    "\n"
    "    public function __construct(int $role = FastCGI::UNKNOWN_ROLE, int $flags = 0, string $reserved = '')\n"
    "    {\n"
    "        $this->type      = FastCGI::BEGIN_REQUEST;\n"
    "        $this->role      = $role;\n"
    "        $this->flags     = $flags;\n"
    "        $this->reserved1 = $reserved;\n"
    "        $this->setContentData($this->packPayload());\n"
    "    }\n"
    "\n"
    "    /**\n"
    "     * Returns the role\n"
    "     *\n"
    "     * The role component sets the role the Web server expects the application to play.\n"
    "     * The currently-defined roles are:\n"
    "     *   FCGI_RESPONDER\n"
    "     *   FCGI_AUTHORIZER\n"
    "     *   FCGI_FILTER\n"
    "     */\n"
    "    public function getRole(): int\n"
    "    {\n"
    "        return $this->role;\n"
    "    }\n"
    "\n"
    "    /**\n"
    "     * Returns the flags\n"
    "     *\n"
    "     * The flags component contains a bit that controls connection shutdown.\n"
    "     *\n"
    "     * flags & FCGI_KEEP_CONN:\n"
    "     *   If zero, the application closes the connection after responding to this request.\n"
    "     *   If not zero, the application does not close the connection after responding to this request;\n"
    "     *   the Web server retains responsibility for the connection.\n"
    "     */\n"
    "    public function getFlags(): int\n"
    "    {\n"
    "        return $this->flags;\n"
    "    }\n"
    "\n"
    "    /**\n"
    "     * {@inheritdoc}\n"
    "     * @param static $self\n"
    "     */\n"
    "    protected static function unpackPayload(Record $self, string $binaryData): void\n"
    "    {\n"
    "        assert($self instanceof self); // @phpstan-ignore function.alreadyNarrowedType,instanceof.alwaysTrue\n"
    "\n"
    "        /** @phpstan-var false|array{role: int, flags: int, reserved: string} */\n"
    "        $payload = unpack('nrole/Cflags/a5reserved', $binaryData);\n"
    "        if ($payload === false) {\n"
    "            throw new \\RuntimeException('Can not unpack data from the binary buffer');\n"
    "        }\n"
    "        [\n"
    "            $self->role,\n"
    "            $self->flags,\n"
    "            $self->reserved1,\n"
    "        ] = array_values($payload);\n"
    "    }\n"
    "\n"
    "    /** {@inheritdoc} */\n"
    "    protected function packPayload(): string\n"
    "    {\n"
    "        return pack(\n"
    "            'nCa5',\n"
    "            $this->role,\n"
    "            $this->flags,\n"
    "            $this->reserved1\n"
    "        );\n"
    "    }\n"
    "}\n";

static const char* swoole_library_source_core_fast_cgi_record_data =
    "\n"
    "/**\n"
    " * This file is part of Swoole.\n"
    " *\n"
    " * @link     https://www.swoole.com\n"
    " * @contact  team@swoole.com\n"
    " * @license  https://github.com/swoole/library/blob/master/LICENSE\n"
    " */\n"
    "\n"
    "declare(strict_types=1);\n"
    "\n"
    "namespace Swoole\\FastCGI\\Record;\n"
    "\n"
    "use Swoole\\FastCGI;\n"
    "use Swoole\\FastCGI\\Record;\n"
    "\n"
    "/**\n"
    " * Data binary stream\n"
    " *\n"
    " * FCGI_DATA is a second stream record type used to send additional data to the application.\n"
    " */\n"
    "class Data extends Record\n"
    "{\n"
    "    public function __construct(string $contentData)\n"
    "    {\n"
    "        $this->type = FastCGI::DATA;\n"
    "        $this->setContentData($contentData);\n"
    "    }\n"
    "}\n";

static const char* swoole_library_source_core_fast_cgi_record_end_request =
    "\n"
    "/**\n"
    " * This file is part of Swoole.\n"
    " *\n"
    " * @link     https://www.swoole.com\n"
    " * @contact  team@swoole.com\n"
    " * @license  https://github.com/swoole/library/blob/master/LICENSE\n"
    " */\n"
    "\n"
    "declare(strict_types=1);\n"
    "\n"
    "namespace Swoole\\FastCGI\\Record;\n"
    "\n"
    "use Swoole\\FastCGI;\n"
    "use Swoole\\FastCGI\\Record;\n"
    "\n"
    "/**\n"
    " * The application sends a FCGI_END_REQUEST record to terminate a request, either because the application\n"
    " * has processed the request or because the application has rejected the request.\n"
    " */\n"
    "class EndRequest extends Record\n"
    "{\n"
    "    /**\n"
    "     * The appStatus component is an application-level status code. Each role documents its usage of appStatus.\n"
    "     */\n"
    "    protected int $appStatus = 0;\n"
    "\n"
    "    /**\n"
    "     * The protocolStatus component is a protocol-level status code.\n"
    "     *\n"
    "     * The possible protocolStatus values are:\n"
    "     *   FCGI_REQUEST_COMPLETE: normal end of request.\n"
    "     *   FCGI_CANT_MPX_CONN: rejecting a new request.\n"
    "     *      This happens when a Web server sends concurrent requests over one connection to an application that is\n"
    "     *      designed to process one request at a time per connection.\n"
    "     *   FCGI_OVERLOADED: rejecting a new request.\n"
    "     *      This happens when the application runs out of some resource, e.g. database connections.\n"
    "     *   FCGI_UNKNOWN_ROLE: rejecting a new request.\n"
    "     *      This happens when the Web server has specified a role that is unknown to the application.\n"
    "     */\n"
    "    protected int $protocolStatus = FastCGI::REQUEST_COMPLETE;\n"
    "\n"
    "    /**\n"
    "     * Reserved data, 3 bytes maximum\n"
    "     */\n"
    "    protected string $reserved1;\n"
    "\n"
    "    public function __construct(int $protocolStatus = FastCGI::REQUEST_COMPLETE, int $appStatus = 0, string $reserved = '')\n"
    "    {\n"
    "        $this->type           = FastCGI::END_REQUEST;\n"
    "        $this->protocolStatus = $protocolStatus;\n"
    "        $this->appStatus      = $appStatus;\n"
    "        $this->reserved1      = $reserved;\n"
    "        $this->setContentData($this->packPayload());\n"
    "    }\n"
    "\n"
    "    /**\n"
    "     * Returns app status\n"
    "     *\n"
    "     * The appStatus component is an application-level status code. Each role documents its usage of appStatus.\n"
    "     */\n"
    "    public function getAppStatus(): int\n"
    "    {\n"
    "        return $this->appStatus;\n"
    "    }\n"
    "\n"
    "    /**\n"
    "     * Returns the protocol status\n"
    "     *\n"
    "     * The possible protocolStatus values are:\n"
    "     *   FCGI_REQUEST_COMPLETE: normal end of request.\n"
    "     *   FCGI_CANT_MPX_CONN: rejecting a new request.\n"
    "     *      This happens when a Web server sends concurrent requests over one connection to an application that is\n"
    "     *      designed to process one request at a time per connection.\n"
    "     *   FCGI_OVERLOADED: rejecting a new request.\n"
    "     *      This happens when the application runs out of some resource, e.g. database connections.\n"
    "     *   FCGI_UNKNOWN_ROLE: rejecting a new request.\n"
    "     *      This happens when the Web server has specified a role that is unknown to the application.\n"
    "     */\n"
    "    public function getProtocolStatus(): int\n"
    "    {\n"
    "        return $this->protocolStatus;\n"
    "    }\n"
    "\n"
    "    /**\n"
    "     * {@inheritdoc}\n"
    "     * @param static $self\n"
    "     */\n"
    "    protected static function unpackPayload(Record $self, string $binaryData): void\n"
    "    {\n"
    "        assert($self instanceof self); // @phpstan-ignore function.alreadyNarrowedType,instanceof.alwaysTrue\n"
    "\n"
    "        /** @phpstan-var false|array{appStatus: int, protocolStatus: int, reserved: string} */\n"
    "        $payload = unpack('NappStatus/CprotocolStatus/a3reserved', $binaryData);\n"
    "        if ($payload === false) {\n"
    "            throw new \\RuntimeException('Can not unpack data from the binary buffer');\n"
    "        }\n"
    "        [\n"
    "            $self->appStatus,\n"
    "            $self->protocolStatus,\n"
    "            $self->reserved1,\n"
    "        ] = array_values($payload);\n"
    "    }\n"
    "\n"
    "    /** {@inheritdoc} */\n"
    "    protected function packPayload(): string\n"
    "    {\n"
    "        return pack(\n"
    "            'NCa3',\n"
    "            $this->appStatus,\n"
    "            $this->protocolStatus,\n"
    "            $this->reserved1\n"
    "        );\n"
    "    }\n"
    "}\n";

static const char* swoole_library_source_core_fast_cgi_record_get_values =
    "\n"
    "/**\n"
    " * This file is part of Swoole.\n"
    " *\n"
    " * @link     https://www.swoole.com\n"
    " * @contact  team@swoole.com\n"
    " * @license  https://github.com/swoole/library/blob/master/LICENSE\n"
    " */\n"
    "\n"
    "declare(strict_types=1);\n"
    "\n"
    "namespace Swoole\\FastCGI\\Record;\n"
    "\n"
    "use Swoole\\FastCGI;\n"
    "\n"
    "/**\n"
    " * GetValues API\n"
    " *\n"
    " * The Web server can query specific variables within the application.\n"
    " * The server will typically perform a query on application startup in order to to automate certain aspects of\n"
    " * system configuration.\n"
    " *\n"
    " * The application responds by sending a record {FCGI_GET_VALUES_RESULT, 0, ...} with the values supplied.\n"
    " * If the application doesn't understand a variable name that was included in the query, it omits that name from\n"
    " * the response.\n"
    " *\n"
    " * FCGI_GET_VALUES is designed to allow an open-ended set of variables.\n"
    " *\n"
    " * The initial set provides information to help the server perform application and connection management:\n"
    " *   FCGI_MAX_CONNS:  The maximum number of concurrent transport connections this application will accept,\n"
    " *                    e.g. \"1\" or \"10\".\n"
    " *   FCGI_MAX_REQS:   The maximum number of concurrent requests this application will accept, e.g. \"1\" or \"50\".\n"
    " *   FCGI_MPXS_CONNS: \"0\" if this application does not multiplex connections (i.e. handle concurrent requests\n"
    " *                    over each connection), \"1\" otherwise.\n"
    " */\n"
    "class GetValues extends Params\n"
    "{\n"
    "    /**\n"
    "     * Constructs a request\n"
    "     *\n"
    "     * @param array $keys List of keys to receive\n"
    "     *\n"
    "     * @phpstan-param list<string> $keys\n"
    "     */\n"
    "    public function __construct(array $keys)\n"
    "    {\n"
    "        parent::__construct(array_fill_keys($keys, ''));\n"
    "        $this->type = FastCGI::GET_VALUES;\n"
    "    }\n"
    "}\n";

static const char* swoole_library_source_core_fast_cgi_record_get_values_result =
    "\n"
    "/**\n"
    " * This file is part of Swoole.\n"
    " *\n"
    " * @link     https://www.swoole.com\n"
    " * @contact  team@swoole.com\n"
    " * @license  https://github.com/swoole/library/blob/master/LICENSE\n"
    " */\n"
    "\n"
    "declare(strict_types=1);\n"
    "\n"
    "namespace Swoole\\FastCGI\\Record;\n"
    "\n"
    "use Swoole\\FastCGI;\n"
    "\n"
    "/**\n"
    " * GetValues API\n"
    " *\n"
    " * The Web server can query specific variables within the application.\n"
    " * The server will typically perform a query on application startup in order to to automate certain aspects of\n"
    " * system configuration.\n"
    " *\n"
    " * The application responds by sending a record {FCGI_GET_VALUES_RESULT, 0, ...} with the values supplied.\n"
    " * If the application doesn't understand a variable name that was included in the query, it omits that name from\n"
    " * the response.\n"
    " *\n"
    " * FCGI_GET_VALUES is designed to allow an open-ended set of variables.\n"
    " *\n"
    " * The initial set provides information to help the server perform application and connection management:\n"
    " *   FCGI_MAX_CONNS:  The maximum number of concurrent transport connections this application will accept,\n"
    " *                    e.g. \"1\" or \"10\".\n"
    " *   FCGI_MAX_REQS:   The maximum number of concurrent requests this application will accept, e.g. \"1\" or \"50\".\n"
    " *   FCGI_MPXS_CONNS: \"0\" if this application does not multiplex connections (i.e. handle concurrent requests\n"
    " *                    over each connection), \"1\" otherwise.\n"
    " */\n"
    "class GetValuesResult extends Params\n"
    "{\n"
    "    /**\n"
    "     * Constructs a param request\n"
    "     *\n"
    "     * @phpstan-param array<string, string> $values\n"
    "     */\n"
    "    public function __construct(array $values)\n"
    "    {\n"
    "        parent::__construct($values);\n"
    "        $this->type = FastCGI::GET_VALUES_RESULT;\n"
    "    }\n"
    "}\n";

static const char* swoole_library_source_core_fast_cgi_record_stdin =
    "\n"
    "/**\n"
    " * This file is part of Swoole.\n"
    " *\n"
    " * @link     https://www.swoole.com\n"
    " * @contact  team@swoole.com\n"
    " * @license  https://github.com/swoole/library/blob/master/LICENSE\n"
    " */\n"
    "\n"
    "declare(strict_types=1);\n"
    "\n"
    "namespace Swoole\\FastCGI\\Record;\n"
    "\n"
    "use Swoole\\FastCGI;\n"
    "use Swoole\\FastCGI\\Record;\n"
    "\n"
    "/**\n"
    " * Stdin binary stream\n"
    " *\n"
    " * FCGI_STDIN is a stream record type used in sending arbitrary data from the Web server to the application\n"
    " */\n"
    "class Stdin extends Record\n"
    "{\n"
    "    public function __construct(string $contentData)\n"
    "    {\n"
    "        $this->type = FastCGI::STDIN;\n"
    "        $this->setContentData($contentData);\n"
    "    }\n"
    "}\n";

static const char* swoole_library_source_core_fast_cgi_record_stdout =
    "\n"
    "/**\n"
    " * This file is part of Swoole.\n"
    " *\n"
    " * @link     https://www.swoole.com\n"
    " * @contact  team@swoole.com\n"
    " * @license  https://github.com/swoole/library/blob/master/LICENSE\n"
    " */\n"
    "\n"
    "declare(strict_types=1);\n"
    "\n"
    "namespace Swoole\\FastCGI\\Record;\n"
    "\n"
    "use Swoole\\FastCGI;\n"
    "use Swoole\\FastCGI\\Record;\n"
    "\n"
    "/**\n"
    " * Stdout binary stream\n"
    " *\n"
    " * FCGI_STDOUT is a stream record for sending arbitrary data from the application to the Web server\n"
    " */\n"
    "class Stdout extends Record\n"
    "{\n"
    "    public function __construct(string $contentData)\n"
    "    {\n"
    "        $this->type = FastCGI::STDOUT;\n"
    "        $this->setContentData($contentData);\n"
    "    }\n"
    "}\n";

static const char* swoole_library_source_core_fast_cgi_record_stderr =
    "\n"
    "/**\n"
    " * This file is part of Swoole.\n"
    " *\n"
    " * @link     https://www.swoole.com\n"
    " * @contact  team@swoole.com\n"
    " * @license  https://github.com/swoole/library/blob/master/LICENSE\n"
    " */\n"
    "\n"
    "declare(strict_types=1);\n"
    "\n"
    "namespace Swoole\\FastCGI\\Record;\n"
    "\n"
    "use Swoole\\FastCGI;\n"
    "use Swoole\\FastCGI\\Record;\n"
    "\n"
    "/**\n"
    " * Stderr binary stream\n"
    " *\n"
    " * FCGI_STDERR is a stream record for sending arbitrary data from the application to the Web server\n"
    " */\n"
    "class Stderr extends Record\n"
    "{\n"
    "    public function __construct(string $contentData)\n"
    "    {\n"
    "        $this->type = FastCGI::STDERR;\n"
    "        $this->setContentData($contentData);\n"
    "    }\n"
    "}\n";

static const char* swoole_library_source_core_fast_cgi_record_unknown_type =
    "\n"
    "/**\n"
    " * This file is part of Swoole.\n"
    " *\n"
    " * @link     https://www.swoole.com\n"
    " * @contact  team@swoole.com\n"
    " * @license  https://github.com/swoole/library/blob/master/LICENSE\n"
    " */\n"
    "\n"
    "declare(strict_types=1);\n"
    "\n"
    "namespace Swoole\\FastCGI\\Record;\n"
    "\n"
    "use Swoole\\FastCGI;\n"
    "use Swoole\\FastCGI\\Record;\n"
    "\n"
    "/**\n"
    " * Record for unknown queries\n"
    " *\n"
    " * The set of management record types is likely to grow in future versions of this protocol.\n"
    " * To provide for this evolution, the protocol includes the FCGI_UNKNOWN_TYPE management record.\n"
    " * When an application receives a management record whose type T it does not understand, the application responds\n"
    " * with {FCGI_UNKNOWN_TYPE, 0, {T}}.\n"
    " */\n"
    "class UnknownType extends Record\n"
    "{\n"
    "    /**\n"
    "     * Type of the unrecognized management record.\n"
    "     */\n"
    "    protected int $type1;\n"
    "\n"
    "    /**\n"
    "     * Reserved data, 7 bytes maximum\n"
    "     */\n"
    "    protected string $reserved1;\n"
    "\n"
    "    public function __construct(int $type, string $reserved = '')\n"
    "    {\n"
    "        $this->type      = FastCGI::UNKNOWN_TYPE;\n"
    "        $this->type1     = $type;\n"
    "        $this->reserved1 = $reserved;\n"
    "        $this->setContentData($this->packPayload());\n"
    "    }\n"
    "\n"
    "    /**\n"
    "     * Returns the unrecognized type\n"
    "     */\n"
    "    public function getUnrecognizedType(): int\n"
    "    {\n"
    "        return $this->type1;\n"
    "    }\n"
    "\n"
    "    /**\n"
    "     * {@inheritdoc}\n"
    "     * @param static $self\n"
    "     */\n"
    "    public static function unpackPayload(Record $self, string $binaryData): void\n"
    "    {\n"
    "        assert($self instanceof self); // @phpstan-ignore function.alreadyNarrowedType,instanceof.alwaysTrue\n"
    "\n"
    "        /** @phpstan-var false|array{type: int, reserved: string} */\n"
    "        $payload = unpack('Ctype/a7reserved', $binaryData);\n"
    "        if ($payload === false) {\n"
    "            throw new \\RuntimeException('Can not unpack data from the binary buffer');\n"
    "        }\n"
    "        [$self->type1, $self->reserved1] = array_values($payload);\n"
    "    }\n"
    "\n"
    "    /**\n"
    "     * {@inheritdoc}\n"
    "     */\n"
    "    protected function packPayload(): string\n"
    "    {\n"
    "        return pack(\n"
    "            'Ca7',\n"
    "            $this->type1,\n"
    "            $this->reserved1\n"
    "        );\n"
    "    }\n"
    "}\n";

static const char* swoole_library_source_core_fast_cgi_frame_parser =
    "\n"
    "/**\n"
    " * This file is part of Swoole.\n"
    " *\n"
    " * @link     https://www.swoole.com\n"
    " * @contact  team@swoole.com\n"
    " * @license  https://github.com/swoole/library/blob/master/LICENSE\n"
    " */\n"
    "\n"
    "declare(strict_types=1);\n"
    "\n"
    "namespace Swoole\\FastCGI;\n"
    "\n"
    "use Swoole\\FastCGI;\n"
    "use Swoole\\FastCGI\\Record\\AbortRequest;\n"
    "use Swoole\\FastCGI\\Record\\BeginRequest;\n"
    "use Swoole\\FastCGI\\Record\\Data;\n"
    "use Swoole\\FastCGI\\Record\\EndRequest;\n"
    "use Swoole\\FastCGI\\Record\\GetValues;\n"
    "use Swoole\\FastCGI\\Record\\GetValuesResult;\n"
    "use Swoole\\FastCGI\\Record\\Params;\n"
    "use Swoole\\FastCGI\\Record\\Stderr;\n"
    "use Swoole\\FastCGI\\Record\\Stdin;\n"
    "use Swoole\\FastCGI\\Record\\Stdout;\n"
    "use Swoole\\FastCGI\\Record\\UnknownType;\n"
    "\n"
    "/**\n"
    " * Utility class to simplify parsing of FastCGI protocol data.\n"
    " */\n"
    "class FrameParser\n"
    "{\n"
    "    /**\n"
    "     * Mapping of constants to the classes\n"
    "     *\n"
    "     * @phpstan-var array<int, class-string>\n"
    "     */\n"
    "    protected static array $classMapping = [\n"
    "        FastCGI::BEGIN_REQUEST     => BeginRequest::class,\n"
    "        FastCGI::ABORT_REQUEST     => AbortRequest::class,\n"
    "        FastCGI::END_REQUEST       => EndRequest::class,\n"
    "        FastCGI::PARAMS            => Params::class,\n"
    "        FastCGI::STDIN             => Stdin::class,\n"
    "        FastCGI::STDOUT            => Stdout::class,\n"
    "        FastCGI::STDERR            => Stderr::class,\n"
    "        FastCGI::DATA              => Data::class,\n"
    "        FastCGI::GET_VALUES        => GetValues::class,\n"
    "        FastCGI::GET_VALUES_RESULT => GetValuesResult::class,\n"
    "        FastCGI::UNKNOWN_TYPE      => UnknownType::class,\n"
    "    ];\n"
    "\n"
    "    /**\n"
    "     * Checks if the buffer contains a valid frame to parse\n"
    "     */\n"
    "    public static function hasFrame(string $binaryBuffer): bool\n"
    "    {\n"
    "        $bufferLength = strlen($binaryBuffer);\n"
    "        if ($bufferLength < FastCGI::HEADER_LEN) {\n"
    "            return false;\n"
    "        }\n"
    "\n"
    "        /** @phpstan-var false|array{version: int, type: int, requestId: int, contentLength: int, paddingLength: int} */\n"
    "        $fastInfo = unpack(FastCGI::HEADER_FORMAT, $binaryBuffer);\n"
    "        if ($fastInfo === false) {\n"
    "            throw new \\RuntimeException('Can not unpack data from the binary buffer');\n"
    "        }\n"
    "        if ($bufferLength < FastCGI::HEADER_LEN + $fastInfo['contentLength'] + $fastInfo['paddingLength']) {\n"
    "            return false;\n"
    "        }\n"
    "\n"
    "        return true;\n"
    "    }\n"
    "\n"
    "    /**\n"
    "     * Parses a frame from the binary buffer\n"
    "     *\n"
    "     * @return Record One of the corresponding FastCGI record\n"
    "     */\n"
    "    public static function parseFrame(string &$binaryBuffer): Record\n"
    "    {\n"
    "        $bufferLength = strlen($binaryBuffer);\n"
    "        if ($bufferLength < FastCGI::HEADER_LEN) {\n"
    "            throw new \\RuntimeException('Not enough data in the buffer to parse');\n"
    "        }\n"
    "        /** @phpstan-var false|array{version: int, type: int, requestId: int, contentLength: int, paddingLength: int} */\n"
    "        $recordHeader = unpack(FastCGI::HEADER_FORMAT, $binaryBuffer);\n"
    "        if ($recordHeader === false) {\n"
    "            throw new \\RuntimeException('Can not unpack data from the binary buffer');\n"
    "        }\n"
    "        $recordType = $recordHeader['type'];\n"
    "        if (!isset(self::$classMapping[$recordType])) {\n"
    "            throw new \\DomainException(\"Invalid FastCGI record type {$recordType} received\");\n"
    "        }\n"
    "\n"
    "        /** @var Record $className */\n"
    "        $className = self::$classMapping[$recordType];\n"
    "        $record    = $className::unpack($binaryBuffer);\n"
    "\n"
    "        $offset       = FastCGI::HEADER_LEN + $record->getContentLength() + $record->getPaddingLength();\n"
    "        $binaryBuffer = substr($binaryBuffer, $offset);\n"
    "\n"
    "        return $record;\n"
    "    }\n"
    "}\n";

static const char* swoole_library_source_core_fast_cgi_message =
    "\n"
    "/**\n"
    " * This file is part of Swoole.\n"
    " *\n"
    " * @link     https://www.swoole.com\n"
    " * @contact  team@swoole.com\n"
    " * @license  https://github.com/swoole/library/blob/master/LICENSE\n"
    " */\n"
    "\n"
    "declare(strict_types=1);\n"
    "\n"
    "namespace Swoole\\FastCGI;\n"
    "\n"
    "class Message\n"
    "{\n"
    "    protected array $params = [];\n"
    "\n"
    "    protected string $body = '';\n"
    "\n"
    "    protected string $error = '';\n"
    "\n"
    "    public function getParam(string $name): ?string\n"
    "    {\n"
    "        return $this->params[$name] ?? null;\n"
    "    }\n"
    "\n"
    "    public function withParam(string $name, string $value): static\n"
    "    {\n"
    "        $this->params[$name] = $value;\n"
    "        return $this;\n"
    "    }\n"
    "\n"
    "    public function withoutParam(string $name): static\n"
    "    {\n"
    "        unset($this->params[$name]);\n"
    "        return $this;\n"
    "    }\n"
    "\n"
    "    public function getParams(): array\n"
    "    {\n"
    "        return $this->params;\n"
    "    }\n"
    "\n"
    "    public function withParams(array $params): static\n"
    "    {\n"
    "        $this->params = $params;\n"
    "        return $this;\n"
    "    }\n"
    "\n"
    "    public function withAddedParams(array $params): static\n"
    "    {\n"
    "        $this->params = $params + $this->params;\n"
    "        return $this;\n"
    "    }\n"
    "\n"
    "    public function getBody(): string\n"
    "    {\n"
    "        return $this->body;\n"
    "    }\n"
    "\n"
    "    public function withBody(string|\\Stringable $body): self\n"
    "    {\n"
    "        $this->body = (string) $body;\n"
    "        return $this;\n"
    "    }\n"
    "\n"
    "    public function getError(): string\n"
    "    {\n"
    "        return $this->error;\n"
    "    }\n"
    "\n"
    "    public function withError(string $error): static\n"
    "    {\n"
    "        $this->error = $error;\n"
    "        return $this;\n"
    "    }\n"
    "}\n";

static const char* swoole_library_source_core_fast_cgi_request =
    "\n"
    "/**\n"
    " * This file is part of Swoole.\n"
    " *\n"
    " * @link     https://www.swoole.com\n"
    " * @contact  team@swoole.com\n"
    " * @license  https://github.com/swoole/library/blob/master/LICENSE\n"
    " */\n"
    "\n"
    "declare(strict_types=1);\n"
    "\n"
    "namespace Swoole\\FastCGI;\n"
    "\n"
    "use Swoole\\FastCGI;\n"
    "use Swoole\\FastCGI\\Record\\BeginRequest;\n"
    "use Swoole\\FastCGI\\Record\\Params;\n"
    "use Swoole\\FastCGI\\Record\\Stdin;\n"
    "\n"
    "class Request extends Message implements \\Stringable\n"
    "{\n"
    "    protected bool $keepConn = false;\n"
    "\n"
    "    public function __toString(): string\n"
    "    {\n"
    "        $body              = $this->getBody();\n"
    "        $beginRequestFrame = new BeginRequest(FastCGI::RESPONDER, $this->keepConn ? FastCGI::KEEP_CONN : 0);\n"
    "        $paramsFrame       = new Params($this->getParams());\n"
    "        $paramsEofFrame    = new Params([]);\n"
    "        if (empty($body)) {\n"
    "            $message = \"{$beginRequestFrame}{$paramsFrame}{$paramsEofFrame}\";\n"
    "        } else {\n"
    "            $stdinList = [];\n"
    "            while (true) {\n"
    "                $stdinList[] = $stdin = new Stdin($body);\n"
    "                $stdinLength = $stdin->getContentLength();\n"
    "                if ($stdinLength === strlen($body)) {\n"
    "                    break;\n"
    "                }\n"
    "                $body = substr($body, $stdinLength);\n"
    "            }\n"
    "            $stdinList[] = new Stdin('');\n"
    "            $stdin       = implode('', $stdinList);\n"
    "            $message     = \"{$beginRequestFrame}{$paramsFrame}{$paramsEofFrame}{$stdin}\";\n"
    "        }\n"
    "        return $message;\n"
    "    }\n"
    "\n"
    "    public function getKeepConn(): bool\n"
    "    {\n"
    "        return $this->keepConn;\n"
    "    }\n"
    "\n"
    "    public function withKeepConn(bool $keepConn): self\n"
    "    {\n"
    "        $this->keepConn = $keepConn;\n"
    "        return $this;\n"
    "    }\n"
    "}\n";

static const char* swoole_library_source_core_fast_cgi_response =
    "\n"
    "/**\n"
    " * This file is part of Swoole.\n"
    " *\n"
    " * @link     https://www.swoole.com\n"
    " * @contact  team@swoole.com\n"
    " * @license  https://github.com/swoole/library/blob/master/LICENSE\n"
    " */\n"
    "\n"
    "declare(strict_types=1);\n"
    "\n"
    "namespace Swoole\\FastCGI;\n"
    "\n"
    "use Swoole\\FastCGI\\Record\\EndRequest;\n"
    "use Swoole\\FastCGI\\Record\\Stderr;\n"
    "use Swoole\\FastCGI\\Record\\Stdout;\n"
    "\n"
    "class Response extends Message\n"
    "{\n"
    "    /**\n"
    "     * @param array<Stdout|Stderr|EndRequest> $records\n"
    "     */\n"
    "    public function __construct(array $records)\n"
    "    {\n"
    "        if (!static::verify($records)) {\n"
    "            throw new \\InvalidArgumentException('Bad records');\n"
    "        }\n"
    "\n"
    "        $body = $error = '';\n"
    "        foreach ($records as $record) {\n"
    "            if ($record instanceof Stdout) {\n"
    "                if ($record->getContentLength() > 0) {\n"
    "                    $body .= $record->getContentData();\n"
    "                }\n"
    "            } elseif ($record instanceof Stderr) {\n"
    "                if ($record->getContentLength() > 0) {\n"
    "                    $error .= $record->getContentData();\n"
    "                }\n"
    "            }\n"
    "        }\n"
    "        $this->withBody($body)->withError($error);\n"
    "    }\n"
    "\n"
    "    /**\n"
    "     * @param array<Stdout|Stderr|EndRequest> $records\n"
    "     */\n"
    "    protected static function verify(array $records): bool\n"
    "    {\n"
    "        return !empty($records) && $records[array_key_last($records)] instanceof EndRequest;\n"
    "    }\n"
    "}\n";

static const char* swoole_library_source_core_fast_cgi_http_request =
    "\n"
    "/**\n"
    " * This file is part of Swoole.\n"
    " *\n"
    " * @link     https://www.swoole.com\n"
    " * @contact  team@swoole.com\n"
    " * @license  https://github.com/swoole/library/blob/master/LICENSE\n"
    " */\n"
    "\n"
    "declare(strict_types=1);\n"
    "\n"
    "namespace Swoole\\FastCGI;\n"
    "\n"
    "class HttpRequest extends Request\n"
    "{\n"
    "    protected array $params = [\n"
    "        'REQUEST_SCHEME'    => 'http',\n"
    "        'REQUEST_METHOD'    => 'GET',\n"
    "        'DOCUMENT_ROOT'     => '',\n"
    "        'SCRIPT_FILENAME'   => '',\n"
    "        'SCRIPT_NAME'       => '',\n"
    "        'DOCUMENT_URI'      => '/',\n"
    "        'REQUEST_URI'       => '/',\n"
    "        'QUERY_STRING'      => '',\n"
    "        'CONTENT_TYPE'      => 'text/plain',\n"
    "        'CONTENT_LENGTH'    => '0',\n"
    "        'GATEWAY_INTERFACE' => 'CGI/1.1',\n"
    "        'SERVER_PROTOCOL'   => 'HTTP/1.1',\n"
    "        'SERVER_SOFTWARE'   => 'swoole/' . SWOOLE_VERSION,\n"
    "        'REMOTE_ADDR'       => 'unknown',\n"
    "        'REMOTE_PORT'       => '0',\n"
    "        'SERVER_ADDR'       => 'unknown',\n"
    "        'SERVER_PORT'       => '0',\n"
    "        'SERVER_NAME'       => 'Swoole',\n"
    "        'REDIRECT_STATUS'   => '200',\n"
    "    ];\n"
    "\n"
    "    public function getScheme(): ?string\n"
    "    {\n"
    "        return $this->params['REQUEST_SCHEME'] ?? null;\n"
    "    }\n"
    "\n"
    "    public function withScheme(string $scheme): self\n"
    "    {\n"
    "        $this->params['REQUEST_SCHEME'] = $scheme;\n"
    "        return $this;\n"
    "    }\n"
    "\n"
    "    public function withoutScheme(): void\n"
    "    {\n"
    "        unset($this->params['REQUEST_SCHEME']);\n"
    "    }\n"
    "\n"
    "    public function getMethod(): ?string\n"
    "    {\n"
    "        return $this->params['REQUEST_METHOD'] ?? null;\n"
    "    }\n"
    "\n"
    "    public function withMethod(string $method): self\n"
    "    {\n"
    "        $this->params['REQUEST_METHOD'] = $method;\n"
    "        return $this;\n"
    "    }\n"
    "\n"
    "    public function withoutMethod(): void\n"
    "    {\n"
    "        unset($this->params['REQUEST_METHOD']);\n"
    "    }\n"
    "\n"
    "    public function getDocumentRoot(): ?string\n"
    "    {\n"
    "        return $this->params['DOCUMENT_ROOT'] ?? null;\n"
    "    }\n"
    "\n"
    "    public function withDocumentRoot(string $documentRoot): self\n"
    "    {\n"
    "        $this->params['DOCUMENT_ROOT'] = $documentRoot;\n"
    "        return $this;\n"
    "    }\n"
    "\n"
    "    public function withoutDocumentRoot(): void\n"
    "    {\n"
    "        unset($this->params['DOCUMENT_ROOT']);\n"
    "    }\n"
    "\n"
    "    public function getScriptFilename(): ?string\n"
    "    {\n"
    "        return $this->params['SCRIPT_FILENAME'] ?? null;\n"
    "    }\n"
    "\n"
    "    public function withScriptFilename(string $scriptFilename): self\n"
    "    {\n"
    "        $this->params['SCRIPT_FILENAME'] = $scriptFilename;\n"
    "        return $this;\n"
    "    }\n"
    "\n"
    "    public function withoutScriptFilename(): void\n"
    "    {\n"
    "        unset($this->params['SCRIPT_FILENAME']);\n"
    "    }\n"
    "\n"
    "    public function getScriptName(): ?string\n"
    "    {\n"
    "        return $this->params['SCRIPT_NAME'] ?? null;\n"
    "    }\n"
    "\n"
    "    public function withScriptName(string $scriptName): self\n"
    "    {\n"
    "        $this->params['SCRIPT_NAME'] = $scriptName;\n"
    "        return $this;\n"
    "    }\n"
    "\n"
    "    public function withoutScriptName(): void\n"
    "    {\n"
    "        unset($this->params['SCRIPT_NAME']);\n"
    "    }\n"
    "\n"
    "    public function withUri(string $uri): self\n"
    "    {\n"
    "        $info = parse_url($uri);\n"
    "        return $this->withRequestUri($uri)\n"
    "            ->withDocumentUri($info['path'] ?? '')\n"
    "            ->withQueryString($info['query'] ?? '')\n"
    "        ;\n"
    "    }\n"
    "\n"
    "    public function getDocumentUri(): ?string\n"
    "    {\n"
    "        return $this->params['DOCUMENT_URI'] ?? null;\n"
    "    }\n"
    "\n"
    "    public function withDocumentUri(string $documentUri): self\n"
    "    {\n"
    "        $this->params['DOCUMENT_URI'] = $documentUri;\n"
    "        return $this;\n"
    "    }\n"
    "\n"
    "    public function withoutDocumentUri(): void\n"
    "    {\n"
    "        unset($this->params['DOCUMENT_URI']);\n"
    "    }\n"
    "\n"
    "    public function getRequestUri(): ?string\n"
    "    {\n"
    "        return $this->params['REQUEST_URI'] ?? null;\n"
    "    }\n"
    "\n"
    "    public function withRequestUri(string $requestUri): self\n"
    "    {\n"
    "        $this->params['REQUEST_URI'] = $requestUri;\n"
    "        return $this;\n"
    "    }\n"
    "\n"
    "    public function withoutRequestUri(): void\n"
    "    {\n"
    "        unset($this->params['REQUEST_URI']);\n"
    "    }\n"
    "\n"
    "    public function withQuery($query): self\n"
    "    {\n"
    "        if (is_array($query)) {\n"
    "            $query = http_build_query($query);\n"
    "        }\n"
    "        return $this->withQueryString($query);\n"
    "    }\n"
    "\n"
    "    public function getQueryString(): ?string\n"
    "    {\n"
    "        return $this->params['QUERY_STRING'] ?? null;\n"
    "    }\n"
    "\n"
    "    public function withQueryString(string $queryString): self\n"
    "    {\n"
    "        $this->params['QUERY_STRING'] = $queryString;\n"
    "        return $this;\n"
    "    }\n"
    "\n"
    "    public function withoutQueryString(): void\n"
    "    {\n"
    "        unset($this->params['QUERY_STRING']);\n"
    "    }\n"
    "\n"
    "    public function getContentType(): ?string\n"
    "    {\n"
    "        return $this->params['CONTENT_TYPE'] ?? null;\n"
    "    }\n"
    "\n"
    "    public function withContentType(string $contentType): self\n"
    "    {\n"
    "        $this->params['CONTENT_TYPE'] = $contentType;\n"
    "        return $this;\n"
    "    }\n"
    "\n"
    "    public function withoutContentType(): void\n"
    "    {\n"
    "        unset($this->params['CONTENT_TYPE']);\n"
    "    }\n"
    "\n"
    "    public function getContentLength(): ?int\n"
    "    {\n"
    "        return isset($this->params['CONTENT_LENGTH']) ? (int) $this->params['CONTENT_LENGTH'] : null;\n"
    "    }\n"
    "\n"
    "    public function withContentLength(int $contentLength): self\n"
    "    {\n"
    "        $this->params['CONTENT_LENGTH'] = (string) $contentLength;\n"
    "        return $this;\n"
    "    }\n"
    "\n"
    "    public function withoutContentLength(): void\n"
    "    {\n"
    "        unset($this->params['CONTENT_LENGTH']);\n"
    "    }\n"
    "\n"
    "    public function getGatewayInterface(): ?string\n"
    "    {\n"
    "        return $this->params['GATEWAY_INTERFACE'] ?? null;\n"
    "    }\n"
    "\n"
    "    public function withGatewayInterface(string $gatewayInterface): self\n"
    "    {\n"
    "        $this->params['GATEWAY_INTERFACE'] = $gatewayInterface;\n"
    "        return $this;\n"
    "    }\n"
    "\n"
    "    public function withoutGatewayInterface(): void\n"
    "    {\n"
    "        unset($this->params['GATEWAY_INTERFACE']);\n"
    "    }\n"
    "\n"
    "    public function getServerProtocol(): ?string\n"
    "    {\n"
    "        return $this->params['SERVER_PROTOCOL'] ?? null;\n"
    "    }\n"
    "\n"
    "    public function withServerProtocol(string $serverProtocol): self\n"
    "    {\n"
    "        $this->params['SERVER_PROTOCOL'] = $serverProtocol;\n"
    "        return $this;\n"
    "    }\n"
    "\n"
    "    public function withoutServerProtocol(): void\n"
    "    {\n"
    "        unset($this->params['SERVER_PROTOCOL']);\n"
    "    }\n"
    "\n"
    "    public function withProtocolVersion(string $protocolVersion): self\n"
    "    {\n"
    "        if (!is_numeric($protocolVersion)) {\n"
    "            throw new \\InvalidArgumentException('Protocol version must be numeric');\n"
    "        }\n"
    "        $this->params['SERVER_PROTOCOL'] = \"HTTP/{$protocolVersion}\";\n"
    "        return $this;\n"
    "    }\n"
    "\n"
    "    public function getServerSoftware(): ?string\n"
    "    {\n"
    "        return $this->params['SERVER_SOFTWARE'] ?? null;\n"
    "    }\n"
    "\n"
    "    public function withServerSoftware(string $serverSoftware): self\n"
    "    {\n"
    "        $this->params['SERVER_SOFTWARE'] = $serverSoftware;\n"
    "        return $this;\n"
    "    }\n"
    "\n"
    "    public function withoutServerSoftware(): void\n"
    "    {\n"
    "        unset($this->params['SERVER_SOFTWARE']);\n"
    "    }\n"
    "\n"
    "    public function getRemoteAddr(): ?string\n"
    "    {\n"
    "        return $this->params['REMOTE_ADDR'] ?? null;\n"
    "    }\n"
    "\n"
    "    public function withRemoteAddr(string $remoteAddr): self\n"
    "    {\n"
    "        $this->params['REMOTE_ADDR'] = $remoteAddr;\n"
    "        return $this;\n"
    "    }\n"
    "\n"
    "    public function withoutRemoteAddr(): void\n"
    "    {\n"
    "        unset($this->params['REMOTE_ADDR']);\n"
    "    }\n"
    "\n"
    "    public function getRemotePort(): ?int\n"
    "    {\n"
    "        return isset($this->params['REMOTE_PORT']) ? (int) $this->params['REMOTE_PORT'] : null;\n"
    "    }\n"
    "\n"
    "    public function withRemotePort(int $remotePort): self\n"
    "    {\n"
    "        $this->params['REMOTE_PORT'] = (string) $remotePort;\n"
    "        return $this;\n"
    "    }\n"
    "\n"
    "    public function withoutRemotePort(): void\n"
    "    {\n"
    "        unset($this->params['REMOTE_PORT']);\n"
    "    }\n"
    "\n"
    "    public function getServerAddr(): ?string\n"
    "    {\n"
    "        return $this->params['SERVER_ADDR'] ?? null;\n"
    "    }\n"
    "\n"
    "    public function withServerAddr(string $serverAddr): self\n"
    "    {\n"
    "        $this->params['SERVER_ADDR'] = $serverAddr;\n"
    "        return $this;\n"
    "    }\n"
    "\n"
    "    public function withoutServerAddr(): void\n"
    "    {\n"
    "        unset($this->params['SERVER_ADDR']);\n"
    "    }\n"
    "\n"
    "    public function getServerPort(): ?int\n"
    "    {\n"
    "        return isset($this->params['SERVER_PORT']) ? (int) $this->params['SERVER_PORT'] : null;\n"
    "    }\n"
    "\n"
    "    public function withServerPort(int $serverPort): self\n"
    "    {\n"
    "        $this->params['SERVER_PORT'] = (string) $serverPort;\n"
    "        return $this;\n"
    "    }\n"
    "\n"
    "    public function withoutServerPort(): void\n"
    "    {\n"
    "        unset($this->params['SERVER_PORT']);\n"
    "    }\n"
    "\n"
    "    public function getServerName(): ?string\n"
    "    {\n"
    "        return $this->params['SERVER_NAME'] ?? null;\n"
    "    }\n"
    "\n"
    "    public function withServerName(string $serverName): self\n"
    "    {\n"
    "        $this->params['SERVER_NAME'] = $serverName;\n"
    "        return $this;\n"
    "    }\n"
    "\n"
    "    public function withoutServerName(): void\n"
    "    {\n"
    "        unset($this->params['SERVER_NAME']);\n"
    "    }\n"
    "\n"
    "    public function getRedirectStatus(): ?string\n"
    "    {\n"
    "        return $this->params['REDIRECT_STATUS'] ?? null;\n"
    "    }\n"
    "\n"
    "    public function withRedirectStatus(string $redirectStatus): self\n"
    "    {\n"
    "        $this->params['REDIRECT_STATUS'] = $redirectStatus;\n"
    "        return $this;\n"
    "    }\n"
    "\n"
    "    public function withoutRedirectStatus(): void\n"
    "    {\n"
    "        unset($this->params['REDIRECT_STATUS']);\n"
    "    }\n"
    "\n"
    "    public function getHeader(string $name): ?string\n"
    "    {\n"
    "        return $this->params[static::convertHeaderNameToParamName($name)] ?? null;\n"
    "    }\n"
    "\n"
    "    public function withHeader(string $name, string $value): self\n"
    "    {\n"
    "        $this->params[static::convertHeaderNameToParamName($name)] = $value;\n"
    "        return $this;\n"
    "    }\n"
    "\n"
    "    public function withoutHeader(string $name): void\n"
    "    {\n"
    "        unset($this->params[static::convertHeaderNameToParamName($name)]);\n"
    "    }\n"
    "\n"
    "    public function getHeaders(): array\n"
    "    {\n"
    "        $headers = [];\n"
    "        foreach ($this->params as $name => $value) {\n"
    "            if (str_starts_with($name, 'HTTP_')) {\n"
    "                $headers[static::convertParamNameToHeaderName($name)] = $value;\n"
    "            }\n"
    "        }\n"
    "        return $headers;\n"
    "    }\n"
    "\n"
    "    public function withHeaders(array $headers): self\n"
    "    {\n"
    "        foreach ($headers as $name => $value) {\n"
    "            $this->withHeader($name, $value);\n"
    "        }\n"
    "        return $this;\n"
    "    }\n"
    "\n"
    "    public function withBody(array|string|\\Stringable $body): self\n"
    "    {\n"
    "        if (is_array($body)) {\n"
    "            $body = http_build_query($body);\n"
    "            $this->withContentType('application/x-www-form-urlencoded');\n"
    "        }\n"
    "        parent::withBody($body);\n"
    "\n"
    "        return $this->withContentLength(strlen($body));\n"
    "    }\n"
    "\n"
    "    protected static function convertHeaderNameToParamName(string $name)\n"
    "    {\n"
    "        return 'HTTP_' . str_replace('-', '_', strtoupper($name));\n"
    "    }\n"
    "\n"
    "    protected static function convertParamNameToHeaderName(string $name)\n"
    "    {\n"
    "        return ucwords(str_replace('_', '-', substr($name, strlen('HTTP_'))), '-');\n"
    "    }\n"
    "}\n";

static const char* swoole_library_source_core_fast_cgi_http_response =
    "\n"
    "/**\n"
    " * This file is part of Swoole.\n"
    " *\n"
    " * @link     https://www.swoole.com\n"
    " * @contact  team@swoole.com\n"
    " * @license  https://github.com/swoole/library/blob/master/LICENSE\n"
    " */\n"
    "\n"
    "declare(strict_types=1);\n"
    "\n"
    "namespace Swoole\\FastCGI;\n"
    "\n"
    "use Swoole\\FastCGI\\Record\\EndRequest;\n"
    "use Swoole\\FastCGI\\Record\\Stderr;\n"
    "use Swoole\\FastCGI\\Record\\Stdout;\n"
    "use Swoole\\Http\\Status;\n"
    "\n"
    "class HttpResponse extends Response\n"
    "{\n"
    "    /** @var int */\n"
    "    protected $statusCode;\n"
    "\n"
    "    /** @var string */\n"
    "    protected $reasonPhrase;\n"
    "\n"
    "    /**\n"
    "     * @var array<string, string>\n"
    "     */\n"
    "    protected array $headers = [];\n"
    "\n"
    "    /**\n"
    "     * @var array<string, string>\n"
    "     */\n"
    "    protected array $headersMap = [];\n"
    "\n"
    "    /**\n"
    "     * @var array<string>\n"
    "     */\n"
    "    protected array $setCookieHeaderLines = [];\n"
    "\n"
    "    /**\n"
    "     * @param array<Stdout|Stderr|EndRequest> $records\n"
    "     */\n"
    "    public function __construct(array $records = [])\n"
    "    {\n"
    "        parent::__construct($records);\n"
    "        $body = $this->getBody();\n"
    "        if (strlen($body) === 0) {\n"
    "            return;\n"
    "        }\n"
    "        $array = explode(\"\\r\\n\\r\\n\", $body, 2); // An array that contains the HTTP headers and the body.\n"
    "        if (count($array) != 2) {\n"
    "            $this->withStatusCode(Status::BAD_GATEWAY)->withReasonPhrase('Invalid FastCGI Response')->withError($body);\n"
    "            return;\n"
    "        }\n"
    "        $headers = explode(\"\\r\\n\", $array[0]);\n"
    "        $body    = $array[1];\n"
    "        foreach ($headers as $header) {\n"
    "            $array = explode(':', $header, 2); // An array that contains the name and the value of an HTTP header.\n"
    "            if (count($array) != 2) {\n"
    "                continue; // Invalid HTTP header? Ignore it!\n"
    "            }\n"
    "            $name  = trim($array[0]);\n"
    "            $value = trim($array[1]);\n"
    "            if (strcasecmp($name, 'Status') === 0) {\n"
    "                $array        = explode(' ', $value, 2); // An array that contains the status code (and the reason phrase).\n"
    "                $statusCode   = $array[0];\n"
    "                $reasonPhrase = $array[1] ?? null;\n"
    "            } elseif (strcasecmp($name, 'Set-Cookie') === 0) {\n"
    "                $this->withSetCookieHeaderLine($value);\n"
    "            } else {\n"
    "                $this->withHeader($name, $value);\n"
    "            }\n"
    "        }\n"
    "        $statusCode   = (int) ($statusCode ?? Status::OK);\n"
    "        $reasonPhrase = $reasonPhrase ?? Status::getReasonPhrase($statusCode);\n"
    "        $this->withStatusCode($statusCode)->withReasonPhrase($reasonPhrase);\n"
    "        $this->withBody($body);\n"
    "    }\n"
    "\n"
    "    public function getStatusCode(): int\n"
    "    {\n"
    "        return $this->statusCode;\n"
    "    }\n"
    "\n"
    "    public function withStatusCode(int $statusCode): self\n"
    "    {\n"
    "        $this->statusCode = $statusCode;\n"
    "        return $this;\n"
    "    }\n"
    "\n"
    "    public function getReasonPhrase(): string\n"
    "    {\n"
    "        return $this->reasonPhrase;\n"
    "    }\n"
    "\n"
    "    public function withReasonPhrase(string $reasonPhrase): self\n"
    "    {\n"
    "        $this->reasonPhrase = $reasonPhrase;\n"
    "        return $this;\n"
    "    }\n"
    "\n"
    "    public function getHeader(string $name): ?string\n"
    "    {\n"
    "        $name = $this->headersMap[strtolower($name)] ?? null;\n"
    "        return $name ? $this->headers[$name] : null;\n"
    "    }\n"
    "\n"
    "    /**\n"
    "     * @return array<string, string>\n"
    "     */\n"
    "    public function getHeaders(): array\n"
    "    {\n"
    "        return $this->headers;\n"
    "    }\n"
    "\n"
    "    public function withHeader(string $name, string $value): self\n"
    "    {\n"
    "        $this->headers[$name]                = $value;\n"
    "        $this->headersMap[strtolower($name)] = $name;\n"
    "        return $this;\n"
    "    }\n"
    "\n"
    "    /**\n"
    "     * @param array<string, string> $headers\n"
    "     */\n"
    "    public function withHeaders(array $headers): self\n"
    "    {\n"
    "        foreach ($headers as $name => $value) {\n"
    "            $this->withHeader($name, $value);\n"
    "        }\n"
    "        return $this;\n"
    "    }\n"
    "\n"
    "    /**\n"
    "     * @return array<string>\n"
    "     */\n"
    "    public function getSetCookieHeaderLines(): array\n"
    "    {\n"
    "        return $this->setCookieHeaderLines;\n"
    "    }\n"
    "\n"
    "    public function withSetCookieHeaderLine(string $value): self\n"
    "    {\n"
    "        $this->setCookieHeaderLines[] = $value;\n"
    "        return $this;\n"
    "    }\n"
    "}\n";

static const char* swoole_library_source_core_coroutine_fast_cgi_client =
    "\n"
    "/**\n"
    " * This file is part of Swoole.\n"
    " *\n"
    " * @link     https://www.swoole.com\n"
    " * @contact  team@swoole.com\n"
    " * @license  https://github.com/swoole/library/blob/master/LICENSE\n"
    " */\n"
    "\n"
    "declare(strict_types=1);\n"
    "\n"
    "namespace Swoole\\Coroutine\\FastCGI;\n"
    "\n"
    "use Swoole\\Constant;\n"
    "use Swoole\\Coroutine\\FastCGI\\Client\\Exception;\n"
    "use Swoole\\Coroutine\\Socket;\n"
    "use Swoole\\FastCGI\\FrameParser;\n"
    "use Swoole\\FastCGI\\HttpRequest;\n"
    "use Swoole\\FastCGI\\HttpResponse;\n"
    "use Swoole\\FastCGI\\Record\\EndRequest;\n"
    "use Swoole\\FastCGI\\Request;\n"
    "use Swoole\\FastCGI\\Response;\n"
    "\n"
    "class Client\n"
    "{\n"
    "    protected int $af;\n"
    "\n"
    "    protected string $host;\n"
    "\n"
    "    protected int $port;\n"
    "\n"
    "    protected bool $ssl;\n"
    "\n"
    "    protected ?Socket $socket;\n"
    "\n"
    "    public function __construct(string $host, int $port = 0, bool $ssl = false)\n"
    "    {\n"
    "        if (stripos($host, 'unix:/') === 0) {\n"
    "            $this->af = AF_UNIX;\n"
    "            $host     = '/' . ltrim(substr($host, strlen('unix:/')), '/');\n"
    "            $port     = 0;\n"
    "        } elseif (str_contains($host, ':')) {\n"
    "            $this->af = AF_INET6;\n"
    "        } else {\n"
    "            $this->af = AF_INET;\n"
    "        }\n"
    "        $this->host = $host;\n"
    "        $this->port = $port;\n"
    "        $this->ssl  = $ssl;\n"
    "    }\n"
    "\n"
    "    /**\n"
    "     * @return ($request is HttpRequest ? HttpResponse : Response)\n"
    "     * @throws Exception\n"
    "     */\n"
    "    public function execute(Request $request, float $timeout = -1): Response\n"
    "    {\n"
    "        if (!isset($this->socket)) {\n"
    "            $this->socket = $socket = new Socket($this->af, SOCK_STREAM, IPPROTO_IP);\n"
    "            $socket->setProtocol([\n"
    "                Constant::OPTION_OPEN_SSL              => $this->ssl,\n"
    "                Constant::OPTION_OPEN_FASTCGI_PROTOCOL => true,\n"
    "            ]);\n"
    "            if (!$socket->connect($this->host, $this->port, $timeout)) {\n"
    "                $this->ioException();\n"
    "            }\n"
    "        } else {\n"
    "            $socket = $this->socket;\n"
    "        }\n"
    "        $sendData = (string) $request;\n"
    "        if ($socket->sendAll($sendData) !== strlen($sendData)) {\n"
    "            $this->ioException();\n"
    "        }\n"
    "        $records = [];\n"
    "        while (true) {\n"
    "            $recvData = $socket->recvPacket($timeout);\n"
    "            if (!$recvData) {\n"
    "                if ($recvData === '') {\n"
    "                    $this->ioException(SOCKET_ECONNRESET);\n"
    "                }\n"
    "                $this->ioException();\n"
    "            }\n"
    "            if (!FrameParser::hasFrame($recvData)) {\n"
    "                $this->ioException(SOCKET_EPROTO);\n"
    "            }\n"
    "\n"
    "            do {\n"
    "                $records[] = $record = FrameParser::parseFrame($recvData);\n"
    "            } while (strlen($recvData) !== 0);\n"
    "            if ($record instanceof EndRequest) {\n"
    "                if (!$request->getKeepConn()) {\n"
    "                    $this->socket->close();\n"
    "                    $this->socket = null;\n"
    "                }\n"
    "                // @phpstan-ignore argument.type,argument.type\n"
    "                return ($request instanceof HttpRequest) ? new HttpResponse($records) : new Response($records);\n"
    "            }\n"
    "        }\n"
    "\n"
    "        // Code execution should never reach here. However, we still put an exit() statement here for safe purpose.\n"
    "        exit(1); // @phpstan-ignore deadCode.unreachable\n"
    "    }\n"
    "\n"
    "    public static function parseUrl(string $url): array\n"
    "    {\n"
    "        $url  = parse_url($url);\n"
    "        $host = $url['host'] ?? '';\n"
    "        $port = $url['port'] ?? 0;\n"
    "        if (empty($host)) {\n"
    "            $host = $url['path'] ?? '';\n"
    "            if (empty($host)) {\n"
    "                throw new \\InvalidArgumentException('Invalid url');\n"
    "            }\n"
    "            $host = \"unix:/{$host}\";\n"
    "        }\n"
    "        return [$host, $port];\n"
    "    }\n"
    "\n"
    "    public static function call(string $url, string $path, $data = '', float $timeout = -1): string\n"
    "    {\n"
    "        $client      = new Client(...static::parseUrl($url));\n"
    "        $pathInfo    = parse_url($path);\n"
    "        $path        = $pathInfo['path'] ?? '';\n"
    "        $root        = dirname($path);\n"
    "        $scriptName  = '/' . basename($path);\n"
    "        $documentUri = $scriptName;\n"
    "        $query       = $pathInfo['query'] ?? '';\n"
    "        $requestUri  = $query ? \"{$documentUri}?{$query}\" : $documentUri;\n"
    "        $request     = new HttpRequest();\n"
    "        $request->withDocumentRoot($root)\n"
    "            ->withScriptFilename($path)\n"
    "            ->withScriptName($documentUri)\n"
    "            ->withDocumentUri($documentUri)\n"
    "            ->withRequestUri($requestUri)\n"
    "            ->withQueryString($query)\n"
    "            ->withBody($data)\n"
    "            ->withMethod($request->getContentLength() === 0 ? 'GET' : 'POST')\n"
    "        ;\n"
    "        $response = $client->execute($request, $timeout);\n"
    "        return $response->getBody();\n"
    "    }\n"
    "\n"
    "    protected function ioException(?int $errno = null): void\n"
    "    {\n"
    "        $socket = $this->socket;\n"
    "        if ($errno !== null) {\n"
    "            $socket->errCode = $errno;\n"
    "            $socket->errMsg  = swoole_strerror($errno);\n"
    "        }\n"
    "        $socket->close();\n"
    "        $this->socket = null;\n"
    "        throw new Exception($socket->errMsg, $socket->errCode);\n"
    "    }\n"
    "}\n";

static const char* swoole_library_source_core_coroutine_fast_cgi_client_exception =
    "\n"
    "/**\n"
    " * This file is part of Swoole.\n"
    " *\n"
    " * @link     https://www.swoole.com\n"
    " * @contact  team@swoole.com\n"
    " * @license  https://github.com/swoole/library/blob/master/LICENSE\n"
    " */\n"
    "\n"
    "declare(strict_types=1);\n"
    "\n"
    "namespace Swoole\\Coroutine\\FastCGI\\Client;\n"
    "\n"
    "class Exception extends \\Swoole\\Exception\n"
    "{\n"
    "}\n";

static const char* swoole_library_source_core_coroutine_fast_cgi_proxy =
    "\n"
    "/**\n"
    " * This file is part of Swoole.\n"
    " *\n"
    " * @link     https://www.swoole.com\n"
    " * @contact  team@swoole.com\n"
    " * @license  https://github.com/swoole/library/blob/master/LICENSE\n"
    " */\n"
    "\n"
    "declare(strict_types=1);\n"
    "\n"
    "namespace Swoole\\Coroutine\\FastCGI;\n"
    "\n"
    "use Swoole\\FastCGI\\HttpRequest;\n"
    "use Swoole\\FastCGI\\HttpResponse;\n"
    "use Swoole\\Http;\n"
    "use Swoole\\Http\\Request as SwooleHttpRequest;\n"
    "use Swoole\\Http\\Response as SwooleHttpResponse;\n"
    "\n"
    "class Proxy\n"
    "{\n"
    "    /* @var string */\n"
    "    protected $host;\n"
    "\n"
    "    /* @var int */\n"
    "    protected $port;\n"
    "\n"
    "    /* @var float */\n"
    "    protected $timeout = -1;\n"
    "\n"
    "    /* @var string */\n"
    "    protected $documentRoot;\n"
    "\n"
    "    /* @var bool */\n"
    "    protected $https = false;\n"
    "\n"
    "    /* @var string */\n"
    "    protected $index = 'index.php';\n"
    "\n"
    "    /* @var array */\n"
    "    protected $params = [];\n"
    "\n"
    "    /* @var null|callable */\n"
    "    protected $staticFileFilter;\n"
    "\n"
    "    public function __construct(string $url, string $documentRoot = '/')\n"
    "    {\n"
    "        [$this->host, $this->port] = Client::parseUrl($url);\n"
    "        $this->documentRoot        = $documentRoot;\n"
    "        $this->staticFileFilter    = [$this, 'staticFileFiltrate'];\n"
    "    }\n"
    "\n"
    "    public function withTimeout(float $timeout): self\n"
    "    {\n"
    "        $this->timeout = $timeout;\n"
    "        return $this;\n"
    "    }\n"
    "\n"
    "    public function withHttps(bool $https): self\n"
    "    {\n"
    "        $this->https = $https;\n"
    "        return $this;\n"
    "    }\n"
    "\n"
    "    public function withIndex(string $index): self\n"
    "    {\n"
    "        $this->index = $index;\n"
    "        return $this;\n"
    "    }\n"
    "\n"
    "    public function getParam(string $name): ?string\n"
    "    {\n"
    "        return $this->params[$name] ?? null;\n"
    "    }\n"
    "\n"
    "    public function withParam(string $name, string $value): self\n"
    "    {\n"
    "        $this->params[$name] = $value;\n"
    "        return $this;\n"
    "    }\n"
    "\n"
    "    public function withoutParam(string $name): self\n"
    "    {\n"
    "        unset($this->params[$name]);\n"
    "        return $this;\n"
    "    }\n"
    "\n"
    "    public function getParams(): array\n"
    "    {\n"
    "        return $this->params;\n"
    "    }\n"
    "\n"
    "    public function withParams(array $params): self\n"
    "    {\n"
    "        $this->params = $params;\n"
    "        return $this;\n"
    "    }\n"
    "\n"
    "    public function withAddedParams(array $params): self\n"
    "    {\n"
    "        $this->params = $params + $this->params;\n"
    "        return $this;\n"
    "    }\n"
    "\n"
    "    public function withStaticFileFilter(?callable $filter): self\n"
    "    {\n"
    "        $this->staticFileFilter = $filter;\n"
    "        return $this;\n"
    "    }\n"
    "\n"
    "    public function translateRequest(SwooleHttpRequest $userRequest): HttpRequest\n"
    "    {\n"
    "        $server   = $userRequest->server;\n"
    "        $headers  = $userRequest->header;\n"
    "        $pathInfo = $userRequest->server['path_info'];\n"
    "        $pathInfo = '/' . ltrim($pathInfo, '/');\n"
    "        if (strlen($this->index) !== 0) {\n"
    "            $extension = pathinfo($pathInfo, PATHINFO_EXTENSION);\n"
    "            if (empty($extension)) {\n"
    "                $pathInfo = rtrim($pathInfo, '/') . '/' . $this->index;\n"
    "            }\n"
    "        }\n"
    "        $requestUri  = $scriptName = $documentUri = $server['request_uri'];\n"
    "        $queryString = $server['query_string'] ?? '';\n"
    "        if (strlen($queryString) !== 0) {\n"
    "            $requestUri .= \"?{$server['query_string']}\";\n"
    "        }\n"
    "        $request = (new HttpRequest())\n"
    "            ->withDocumentRoot($this->documentRoot)\n"
    "            ->withScriptFilename($this->documentRoot . $pathInfo)\n"
    "            ->withScriptName($scriptName)\n"
    "            ->withDocumentUri($documentUri)\n"
    "            ->withServerProtocol($server['server_protocol'])\n"
    "            ->withServerAddr('127.0.0.1')\n"
    "            ->withServerPort($server['server_port'])\n"
    "            ->withRemoteAddr($server['remote_addr'])\n"
    "            ->withRemotePort($server['remote_port'])\n"
    "            ->withMethod($server['request_method'])\n"
    "            ->withRequestUri($requestUri)\n"
    "            ->withQueryString($queryString)\n"
    "            ->withContentType($headers['content-type'] ?? '')\n"
    "            ->withContentLength((int) ($headers['content-length'] ?? 0))\n"
    "            ->withHeaders($headers)\n"
    "            ->withBody($userRequest->rawContent())\n"
    "            ->withAddedParams($this->params)\n"
    "        ;\n"
    "        if ($this->https) {\n"
    "            $request->withParam('HTTPS', '1');\n"
    "        }\n"
    "\n"
    "        return $request;\n"
    "    }\n"
    "\n"
    "    public function translateResponse(HttpResponse $response, SwooleHttpResponse $userResponse): void\n"
    "    {\n"
    "        $userResponse->status($response->getStatusCode(), $response->getReasonPhrase());\n"
    "        $userResponse->header = $response->getHeaders();\n"
    "        $userResponse->cookie = $response->getSetCookieHeaderLines();\n"
    "        $userResponse->end($response->getBody());\n"
    "    }\n"
    "\n"
    "    public function pass(SwooleHttpRequest|HttpRequest $userRequest, SwooleHttpResponse $userResponse): void\n"
    "    {\n"
    "        if (!$userRequest instanceof HttpRequest) {\n"
    "            $request = $this->translateRequest($userRequest);\n"
    "        } else {\n"
    "            $request = $userRequest;\n"
    "        }\n"
    "        unset($userRequest);\n"
    "        if ($this->staticFileFilter) {\n"
    "            $filter = $this->staticFileFilter;\n"
    "            if ($filter($request, $userResponse)) {\n"
    "                return;\n"
    "            }\n"
    "        }\n"
    "        $response = (new Client($this->host, $this->port))->execute($request, $this->timeout);\n"
    "        $this->translateResponse($response, $userResponse);\n"
    "    }\n"
    "\n"
    "    /**\n"
    "     * Send content of a static file to the client, if the file is accessible and is not a PHP file.\n"
    "     *\n"
    "     * @return bool True if the file doesn't have an extension of 'php', false otherwise. Note that the file may not be\n"
    "     *              accessible even the return value is true.\n"
    "     */\n"
    "    public function staticFileFiltrate(HttpRequest $request, SwooleHttpResponse $userResponse): bool\n"
    "    {\n"
    "        $extension = pathinfo($request->getScriptFilename(), PATHINFO_EXTENSION);\n"
    "        if ($extension !== 'php') {\n"
    "            $realPath = realpath($request->getScriptFilename());\n"
    "            if (!$realPath || !str_starts_with($realPath, $this->documentRoot) || !is_file($realPath)) {\n"
    "                $userResponse->status(Http\\Status::NOT_FOUND);\n"
    "            } else {\n"
    "                $userResponse->sendfile($realPath);\n"
    "            }\n"
    "            return true;\n"
    "        }\n"
    "        return false;\n"
    "    }\n"
    "}\n";

static const char* swoole_library_source_core_process_manager =
    "\n"
    "/**\n"
    " * This file is part of Swoole.\n"
    " *\n"
    " * @link     https://www.swoole.com\n"
    " * @contact  team@swoole.com\n"
    " * @license  https://github.com/swoole/library/blob/master/LICENSE\n"
    " */\n"
    "\n"
    "declare(strict_types=1);\n"
    "\n"
    "namespace Swoole\\Process;\n"
    "\n"
    "use Swoole\\Constant;\n"
    "\n"
    "use function Swoole\\Coroutine\\run;\n"
    "\n"
    "class Manager\n"
    "{\n"
    "    /**\n"
    "     * @var Pool\n"
    "     */\n"
    "    protected $pool;\n"
    "\n"
    "    /**\n"
    "     * @var int\n"
    "     */\n"
    "    protected $ipcType = SWOOLE_IPC_NONE;\n"
    "\n"
    "    /**\n"
    "     * @var int\n"
    "     */\n"
    "    protected $msgQueueKey = 0;\n"
    "\n"
    "    /**\n"
    "     * @var array\n"
    "     */\n"
    "    protected $startFuncMap = [];\n"
    "\n"
    "    public function __construct(int $ipcType = SWOOLE_IPC_NONE, int $msgQueueKey = 0)\n"
    "    {\n"
    "        $this->setIPCType($ipcType)->setMsgQueueKey($msgQueueKey);\n"
    "    }\n"
    "\n"
    "    public function add(callable $func, bool $enableCoroutine = false): self\n"
    "    {\n"
    "        $this->addBatch(1, $func, $enableCoroutine);\n"
    "        return $this;\n"
    "    }\n"
    "\n"
    "    public function addBatch(int $workerNum, callable $func, bool $enableCoroutine = false): self\n"
    "    {\n"
    "        for ($i = 0; $i < $workerNum; $i++) {\n"
    "            $this->startFuncMap[] = [$func, $enableCoroutine];\n"
    "        }\n"
    "        return $this;\n"
    "    }\n"
    "\n"
    "    public function start(): void\n"
    "    {\n"
    "        $this->pool = new Pool(count($this->startFuncMap), $this->ipcType, $this->msgQueueKey, false);\n"
    "\n"
    "        $this->pool->on(Constant::EVENT_WORKER_START, function (Pool $pool, int $workerId) {\n"
    "            [$func, $enableCoroutine] = $this->startFuncMap[$workerId];\n"
    "            if ($enableCoroutine) {\n"
    "                run($func, $pool, $workerId);\n"
    "            } else {\n"
    "                $func($pool, $workerId);\n"
    "            }\n"
    "        });\n"
    "\n"
    "        $this->pool->start();\n"
    "    }\n"
    "\n"
    "    public function setIPCType(int $ipcType): self\n"
    "    {\n"
    "        $this->ipcType = $ipcType;\n"
    "        return $this;\n"
    "    }\n"
    "\n"
    "    public function getIPCType(): int\n"
    "    {\n"
    "        return $this->ipcType;\n"
    "    }\n"
    "\n"
    "    public function setMsgQueueKey(int $msgQueueKey): self\n"
    "    {\n"
    "        $this->msgQueueKey = $msgQueueKey;\n"
    "        return $this;\n"
    "    }\n"
    "\n"
    "    public function getMsgQueueKey(): int\n"
    "    {\n"
    "        return $this->msgQueueKey;\n"
    "    }\n"
    "}\n";

static const char* swoole_library_source_core_remote_object =
    "\n"
    "/**\n"
    " * This file is part of Swoole.\n"
    " *\n"
    " * @link     https://www.swoole.com\n"
    " * @contact  team@swoole.com\n"
    " * @license  https://github.com/swoole/library/blob/master/LICENSE\n"
    " */\n"
    "\n"
    "declare(strict_types=1);\n"
    "\n"
    "namespace Swoole;\n"
    "\n"
    "use Swoole\\RemoteObject\\Client;\n"
    "use Swoole\\RemoteObject\\Exception;\n"
    "\n"
    "class RemoteObject implements \\ArrayAccess, \\Stringable, \\Iterator, \\Countable\n"
    "{\n"
    "    private int $objectId = 0;\n"
    "\n"
    "    private int $coroutineId;\n"
    "\n"
    "    private string $clientId;\n"
    "\n"
    "    private ?Client $client = null;\n"
    "\n"
    "    public function __construct($coroutineId, $clientId)\n"
    "    {\n"
    "        $this->coroutineId = $coroutineId;\n"
    "        $this->clientId    = $clientId;\n"
    "    }\n"
    "\n"
    "    public function __destruct()\n"
    "    {\n"
    "        // On the server side, this object will also be constructed,\n"
    "        // but it is only used for data storage and serialization.\n"
    "        // No remote calls are executed during destruction.\n"
    "        // If the objectId is 0, it indicates that the object may have been a temporary object created by a function call\n"
    "        // and does not need to be destructed.\n"
    "        if ($this->client and $this->objectId > 0) {\n"
    "            try {\n"
    "                $this->execute('/destroy', [\n"
    "                    'object' => $this->objectId,\n"
    "                ]);\n"
    "            } catch (Exception $e) {\n"
    "                error_log($e->getMessage());\n"
    "                debug_print_backtrace(DEBUG_BACKTRACE_IGNORE_ARGS);\n"
    "            }\n"
    "        }\n"
    "    }\n"
    "\n"
    "    /**\n"
    "     * @throws Exception\n"
    "     */\n"
    "    public function __call(string $method, array $args)\n"
    "    {\n"
    "        $rs = $this->execute('/call_method', [\n"
    "            'object' => $this->objectId,\n"
    "            'method' => $method,\n"
    "            'args'   => serialize($args),\n"
    "        ]);\n"
    "        return $rs['result'];\n"
    "    }\n"
    "\n"
    "    /**\n"
    "     * @throws Exception\n"
    "     */\n"
    "    public function __get(string $property)\n"
    "    {\n"
    "        $rs = $this->execute('/read_property', [\n"
    "            'object'   => $this->objectId,\n"
    "            'property' => $property,\n"
    "        ]);\n"
    "        return $rs['property'];\n"
    "    }\n"
    "\n"
    "    public function __set(string $property, mixed $value)\n"
    "    {\n"
    "        $this->execute('/write_property', [\n"
    "            'object'   => $this->objectId,\n"
    "            'property' => $property,\n"
    "            'value'    => serialize($value),\n"
    "        ]);\n"
    "    }\n"
    "\n"
    "    public function __unserialize(array $data): void\n"
    "    {\n"
    "        $this->objectId    = $data['objectId'];\n"
    "        $this->coroutineId = $data['coroutineId'];\n"
    "        $this->clientId    = $data['clientId'];\n"
    "        $this->client      = Client::getInstance($this->clientId);\n"
    "    }\n"
    "\n"
    "    public function __serialize(): array\n"
    "    {\n"
    "        return [\n"
    "            'objectId'    => $this->objectId,\n"
    "            'coroutineId' => $this->coroutineId,\n"
    "            'clientId'    => $this->clientId,\n"
    "        ];\n"
    "    }\n"
    "\n"
    "    public function __toString(): string\n"
    "    {\n"
    "        $rs = $this->execute('/to_string', [\n"
    "            'object' => $this->objectId,\n"
    "        ]);\n"
    "        return $rs['value'];\n"
    "    }\n"
    "\n"
    "    public function __invoke(...$args)\n"
    "    {\n"
    "        $rs = $this->execute('/call_method', [\n"
    "            'object' => $this->objectId,\n"
    "            'method' => '__invoke',\n"
    "            'args'   => serialize($args),\n"
    "        ]);\n"
    "        return $rs['result'];\n"
    "    }\n"
    "\n"
    "    public static function call(Client $client, string $fn, array $args)\n"
    "    {\n"
    "        $object         = new self(Coroutine::getCid(), $client->getId());\n"
    "        $object->client = $client;\n"
    "        $rs             = $object->execute('/call_function', [\n"
    "            'function' => $fn,\n"
    "            'args'     => serialize($args),\n"
    "        ]);\n"
    "        return $rs['result'];\n"
    "    }\n"
    "\n"
    "    public function getObjectId(): int\n"
    "    {\n"
    "        return $this->objectId;\n"
    "    }\n"
    "\n"
    "    /**\n"
    "     * @throws Exception\n"
    "     */\n"
    "    public static function create(Client $client, string $class, array $args): RemoteObject\n"
    "    {\n"
    "        $object         = new self(Coroutine::getCid(), $client->getId());\n"
    "        $object->client = $client;\n"
    "        $rs             = $object->execute('/new', [\n"
    "            'class' => $class,\n"
    "            'args'  => serialize($args),\n"
    "        ]);\n"
    "        $object->objectId = intval($rs['object']);\n"
    "        return $object;\n"
    "    }\n"
    "\n"
    "    /**\n"
    "     * This method is only used on the server side.\n"
    "     */\n"
    "    public static function marshal(int $objectId, int $ownerCoroutineId, string $clientId): RemoteObject\n"
    "    {\n"
    "        $object             = new self($ownerCoroutineId, $clientId);\n"
    "        $object->objectId   = $objectId;\n"
    "        return $object;\n"
    "    }\n"
    "\n"
    "    public function offsetGet(mixed $offset): mixed\n"
    "    {\n"
    "        $rs = $this->execute('/offset_get', [\n"
    "            'object' => $this->objectId,\n"
    "            'offset' => $offset,\n"
    "        ]);\n"
    "        return $rs['value'];\n"
    "    }\n"
    "\n"
    "    /**\n"
    "     * @throws Exception\n"
    "     */\n"
    "    public function offsetSet(mixed $offset, mixed $value): void\n"
    "    {\n"
    "        $this->execute('/offset_set', [\n"
    "            'object' => $this->objectId,\n"
    "            'offset' => $offset,\n"
    "            'value'  => serialize($value),\n"
    "        ]);\n"
    "    }\n"
    "\n"
    "    /**\n"
    "     * @throws Exception\n"
    "     */\n"
    "    public function offsetUnset(mixed $offset): void\n"
    "    {\n"
    "        $this->execute('/offset_unset', [\n"
    "            'object' => $this->objectId,\n"
    "            'offset' => $offset,\n"
    "        ]);\n"
    "    }\n"
    "\n"
    "    public function offsetExists(mixed $offset): bool\n"
    "    {\n"
    "        $rs = $this->execute('/offset_exists', [\n"
    "            'object' => $this->objectId,\n"
    "            'offset' => $offset,\n"
    "        ]);\n"
    "        return $rs['exists'];\n"
    "    }\n"
    "\n"
    "    public function current(): mixed\n"
    "    {\n"
    "        return $this->__call('current', []);\n"
    "    }\n"
    "\n"
    "    public function next(): void\n"
    "    {\n"
    "        $this->__call('next', []);\n"
    "    }\n"
    "\n"
    "    public function key(): mixed\n"
    "    {\n"
    "        return $this->__call('key', []);\n"
    "    }\n"
    "\n"
    "    public function valid(): bool\n"
    "    {\n"
    "        return $this->__call('valid', []);\n"
    "    }\n"
    "\n"
    "    public function rewind(): void\n"
    "    {\n"
    "        $this->__call('rewind', []);\n"
    "    }\n"
    "\n"
    "    public function count(): int\n"
    "    {\n"
    "        return $this->__call('count', []);\n"
    "    }\n"
    "\n"
    "    private function execute(string $path, array $params = []): array\n"
    "    {\n"
    "        if (!$this->client) {\n"
    "            throw new Exception('This remote object is not bound to a client, and cannot initiate remote calls');\n"
    "        }\n"
    "        return $this->client->execute($path, $params);\n"
    "    }\n"
    "}\n";

static const char* swoole_library_source_core_remote_object_server =
    "\n"
    "/**\n"
    " * This file is part of Swoole.\n"
    " *\n"
    " * @link     https://www.swoole.com\n"
    " * @contact  team@swoole.com\n"
    " * @license  https://github.com/swoole/library/blob/master/LICENSE\n"
    " */\n"
    "\n"
    "declare(strict_types=1);\n"
    "\n"
    "namespace Swoole\\RemoteObject;\n"
    "\n"
    "use Swoole\\Atomic\\Long;\n"
    "use Swoole\\Http\\Request;\n"
    "use Swoole\\Http\\Response;\n"
    "use Swoole\\Http\\Server as HttpServer;\n"
    "use Swoole\\RemoteObject;\n"
    "\n"
    "class Server\n"
    "{\n"
    "    public const DEFAULT_PORT = 9567;\n"
    "\n"
    "    private HttpServer $server;\n"
    "\n"
    "    private array $objects = [];\n"
    "\n"
    "    private array $allowedClasses = [];\n"
    "\n"
    "    private array $allowedFunctions = [];\n"
    "\n"
    "    private Long $nextObjectId;\n"
    "\n"
    "    private string $apiKey = '';\n"
    "\n"
    "    public function __construct(string $host = '127.0.0.1', int $port = self::DEFAULT_PORT, array $options = [])\n"
    "    {\n"
    "        // By default, thread mode is used, and when viewed with ps, only one process will be displayed.\n"
    "        $server_mode = $options['server_mode'] ?? SWOOLE_THREAD;\n"
    "        $socket_type = $options['socket_type'] ?? SWOOLE_SOCK_TCP;\n"
    "        $server      = new HttpServer($host, $port, $server_mode, $socket_type);\n"
    "        unset($options['server_mode'], $options['socket_type']);\n"
    "\n"
    "        if (isset($options['allowed_classes'])) {\n"
    "            if (!is_array($options['allowed_classes'])) {\n"
    "                throw new Exception('allowed_classes must be an array');\n"
    "            }\n"
    "            $this->allowedClasses = array_flip($options['allowed_classes']);\n"
    "            unset($options['allowed_classes']);\n"
    "        }\n"
    "\n"
    "        if (isset($options['allowed_functions'])) {\n"
    "            if (!is_array($options['allowed_functions'])) {\n"
    "                throw new Exception('allowed_functions must be an array');\n"
    "            }\n"
    "            $this->allowedFunctions = array_flip($options['allowed_functions']);\n"
    "            unset($options['allowed_functions']);\n"
    "        }\n"
    "\n"
    "        if (isset($options['api_key'])) {\n"
    "            $this->apiKey = $options['api_key'];\n"
    "            unset($options['api_key']);\n"
    "        }\n"
    "\n"
    "        if ($options) {\n"
    "            $server->set($options);\n"
    "        }\n"
    "        $server->on('request', [$this, 'onRequest']);\n"
    "        $server->on('start', [$this, 'onStart']);\n"
    "        $this->server       = $server;\n"
    "        $this->nextObjectId = new Long(1);\n"
    "    }\n"
    "\n"
    "    public function start(): bool\n"
    "    {\n"
    "        return $this->server->start();\n"
    "    }\n"
    "\n"
    "    public function onStart(): void\n"
    "    {\n"
    "        echo \"The remote-object server is started at http://{$this->server->host}:{$this->server->port}\\n\";\n"
    "    }\n"
    "\n"
    "    public function onRequest(Request $request, Response $response): void\n"
    "    {\n"
    "        $ctx = new Context($request, $response);\n"
    "        if ($this->apiKey and $this->apiKey !== $request->header['x-api-key']) {\n"
    "            $response->status(403);\n"
    "            $ctx->end(['code' => -3, 'msg' => 'invalid api key']);\n"
    "            return;\n"
    "        }\n"
    "        try {\n"
    "            $method = $ctx->getHandler();\n"
    "            if (method_exists($this, $method)) {\n"
    "                $this->{$method}($ctx);\n"
    "            } else {\n"
    "                $ctx->end(['code' => -1, 'msg' => 'invalid request']);\n"
    "            }\n"
    "        } catch (\\Throwable $e) {\n"
    "            $ctx->end(['code' => -2, 'exception' => [\n"
    "                'message' => $e->getMessage(),\n"
    "                'code'    => $e->getCode(),\n"
    "                'class'   => get_class($e),\n"
    "            ]]);\n"
    "        }\n"
    "    }\n"
    "\n"
    "    private function addObject($object): int\n"
    "    {\n"
    "        // The spl_object_id/spl_object_hash cannot be used,\n"
    "        // as the IDs they generate will be reused after the objects are destroyed.\n"
    "        $object_id                 = $this->nextObjectId->add();\n"
    "        $this->objects[$object_id] = $object;\n"
    "        return $object_id;\n"
    "    }\n"
    "\n"
    "    private function marshal(Context $ctx, mixed $data): mixed\n"
    "    {\n"
    "        if (is_object($data) or is_resource($data)) {\n"
    "            $object_id = $this->addObject($data);\n"
    "            return RemoteObject::marshal($object_id, $ctx->getCoroutineId(), $ctx->getClientId());\n"
    "        }\n"
    "        if (is_array($data)) {\n"
    "            foreach ($data as $key => $value) {\n"
    "                $data[$key] = $this->marshal($ctx, $value);\n"
    "            }\n"
    "        }\n"
    "        return $data;\n"
    "    }\n"
    "\n"
    "    private function unmarshal($data): mixed\n"
    "    {\n"
    "        if (is_object($data) and $data instanceof RemoteObject) {\n"
    "            return $this->objects[$data->getObjectId()];\n"
    "        }\n"
    "        if (is_array($data)) {\n"
    "            foreach ($data as $key => $value) {\n"
    "                $data[$key] = $this->unmarshal($value);\n"
    "            }\n"
    "            return $data;\n"
    "        }\n"
    "        return $data;\n"
    "    }\n"
    "\n"
    "    /**\n"
    "     * @throws Exception\n"
    "     */\n"
    "    private function _new(Context $ctx): void\n"
    "    {\n"
    "        $class = trim($ctx->getParam('class'), '\\ ');\n"
    "        if (count($this->allowedClasses) > 0 and !isset($this->allowedClasses[$class])) {\n"
    "            throw new Exception(\"class[{$class}] not allowed\");\n"
    "        }\n"
    "        $class = '\\\\' . $class;\n"
    "        $args  = $ctx->getDataParam('args');\n"
    "        foreach ($args as $key => $value) {\n"
    "            $args[$key] = $this->unmarshal($value);\n"
    "        }\n"
    "        $obj       = new $class(...$args);\n"
    "        $object_id = $this->addObject($obj);\n"
    "        $ctx->end(['code' => 0, 'object' => $object_id]);\n"
    "    }\n"
    "\n"
    "    private function _call_function(Context $ctx): void\n"
    "    {\n"
    "        $fn = trim($ctx->getParam('function'), '\\ ');\n"
    "        if (count($this->allowedFunctions) > 0 and !isset($this->allowedFunctions[$fn])) {\n"
    "            throw new Exception(\"function[{$fn}] not allowed\");\n"
    "        }\n"
    "        $args = $ctx->getDataParam('args');\n"
    "        foreach ($args as $key => $value) {\n"
    "            $args[$key] = $this->unmarshal($value);\n"
    "        }\n"
    "        $fn = '\\\\' . $fn;\n"
    "        if (!function_exists($fn)) {\n"
    "            throw new Exception(\"function[{$fn}] not found\");\n"
    "        }\n"
    "        $result = $fn(...$args);\n"
    "        $ctx->end(['code' => 0, 'result' => $this->marshal($ctx, $result)]);\n"
    "    }\n"
    "\n"
    "    /**\n"
    "     * @throws Exception\n"
    "     */\n"
    "    private function _call_method(Context $ctx): void\n"
    "    {\n"
    "        $object_id = $ctx->getParam('object');\n"
    "        if (!isset($this->objects[$object_id])) {\n"
    "            throw new Exception(\"object[#{$object_id}] not found\");\n"
    "        }\n"
    "        $method = $ctx->getParam('method');\n"
    "        $args   = $ctx->getDataParam('args');\n"
    "        foreach ($args as $key => $value) {\n"
    "            $args[$key] = $this->unmarshal($value);\n"
    "        }\n"
    "        $obj = $this->objects[$object_id];\n"
    "        if (!method_exists($obj, $method)) {\n"
    "            $class = get_class($obj);\n"
    "            throw new Exception(\"method[{$class}::{$method}] not found\");\n"
    "        }\n"
    "        $result = $obj->{$method}(...$args);\n"
    "        $ctx->end(['code' => 0, 'result' => $this->marshal($ctx, $result)]);\n"
    "    }\n"
    "\n"
    "    /**\n"
    "     * @throws Exception\n"
    "     */\n"
    "    private function _read_property(Context $ctx): void\n"
    "    {\n"
    "        $object_id = $ctx->getParam('object');\n"
    "        $property  = $ctx->getParam('property');\n"
    "        if (!isset($this->objects[$object_id])) {\n"
    "            throw new Exception(\"object[#{$object_id}] not found\");\n"
    "        }\n"
    "        $obj    = $this->objects[$object_id];\n"
    "        $result = $obj->{$property};\n"
    "        $ctx->end(['code' => 0, 'property' => $this->marshal($ctx, $result)]);\n"
    "    }\n"
    "\n"
    "    /**\n"
    "     * @throws Exception\n"
    "     */\n"
    "    private function _write_property(Context $ctx): void\n"
    "    {\n"
    "        $object_id = $ctx->getParam('object');\n"
    "        $property  = $ctx->getParam('property');\n"
    "        $value     = $ctx->getDataParam('value');\n"
    "        if (!isset($this->objects[$object_id])) {\n"
    "            throw new Exception(\"object[#{$object_id}] not found\");\n"
    "        }\n"
    "        $obj              = $this->objects[$object_id];\n"
    "        $obj->{$property} = $this->unmarshal($value);\n"
    "        $ctx->end(['code' => 0]);\n"
    "    }\n"
    "\n"
    "    private function _ping(Context $ctx): void\n"
    "    {\n"
    "        $ctx->end(['code' => 0]);\n"
    "    }\n"
    "\n"
    "    /**\n"
    "     * @throws Exception\n"
    "     */\n"
    "    private function _destroy(Context $ctx): void\n"
    "    {\n"
    "        $object_id = $ctx->getParam('object');\n"
    "        if (!isset($this->objects[$object_id])) {\n"
    "            throw new Exception(\"object[#{$object_id}] not found\");\n"
    "        }\n"
    "        unset($this->objects[$object_id]);\n"
    "        $ctx->end(['code' => 0]);\n"
    "    }\n"
    "\n"
    "    private function _to_string(Context $ctx): void\n"
    "    {\n"
    "        $object_id = $ctx->getParam('object');\n"
    "        if (!isset($this->objects[$object_id])) {\n"
    "            throw new Exception(\"object[#{$object_id}] not found\");\n"
    "        }\n"
    "        $obj = $this->objects[$object_id];\n"
    "        $ctx->end(['code' => 0, 'value' => (string) $obj]);\n"
    "    }\n"
    "\n"
    "    private function _offset_get(Context $ctx): void\n"
    "    {\n"
    "        $object_id = $ctx->getParam('object');\n"
    "        $offset    = $ctx->getParam('offset');\n"
    "        if (!isset($this->objects[$object_id])) {\n"
    "            throw new Exception(\"object[#{$object_id}] not found\");\n"
    "        }\n"
    "        $obj    = $this->objects[$object_id];\n"
    "        $result = $obj->{$offset};\n"
    "        $ctx->end(['code' => 0, 'value' => $this->marshal($ctx, $result)]);\n"
    "    }\n"
    "\n"
    "    private function _offset_set(Context $ctx): void\n"
    "    {\n"
    "        $object_id = $ctx->getParam('object');\n"
    "        $offset    = $ctx->getParam('offset');\n"
    "        $value     = $ctx->getDataParam('value');\n"
    "        if (!isset($this->objects[$object_id])) {\n"
    "            throw new Exception(\"object[#{$object_id}] not found\");\n"
    "        }\n"
    "        $obj            = $this->objects[$object_id];\n"
    "        $obj->{$offset} = $this->unmarshal($value);\n"
    "        $ctx->end(['code' => 0]);\n"
    "    }\n"
    "\n"
    "    private function _offset_unset(Context $ctx): void\n"
    "    {\n"
    "        $object_id = $ctx->getParam('object');\n"
    "        $offset    = $ctx->getParam('offset');\n"
    "        if (!isset($this->objects[$object_id])) {\n"
    "            throw new Exception(\"object[#{$object_id}] not found\");\n"
    "        }\n"
    "        $obj = $this->objects[$object_id];\n"
    "        unset($obj->{$offset});\n"
    "        $ctx->end(['code' => 0]);\n"
    "    }\n"
    "\n"
    "    private function _offset_exists(Context $ctx): void\n"
    "    {\n"
    "        $object_id = $ctx->getParam('object');\n"
    "        $offset    = $ctx->getParam('offset');\n"
    "        if (!isset($this->objects[$object_id])) {\n"
    "            throw new Exception(\"object[#{$object_id}] not found\");\n"
    "        }\n"
    "        $obj    = $this->objects[$object_id];\n"
    "        $result = isset($obj->{$offset});\n"
    "        $ctx->end(['code' => 0, 'value' => $this->marshal($ctx, $result)]);\n"
    "    }\n"
    "}\n";

static const char* swoole_library_source_core_remote_object_context =
    "\n"
    "/**\n"
    " * This file is part of Swoole.\n"
    " *\n"
    " * @link     https://www.swoole.com\n"
    " * @contact  team@swoole.com\n"
    " * @license  https://github.com/swoole/library/blob/master/LICENSE\n"
    " */\n"
    "\n"
    "declare(strict_types=1);\n"
    "\n"
    "namespace Swoole\\RemoteObject;\n"
    "\n"
    "use Swoole\\Http\\Request;\n"
    "use Swoole\\Http\\Response;\n"
    "\n"
    "class Context\n"
    "{\n"
    "    public string $clientId;\n"
    "\n"
    "    public int $coroutineId;\n"
    "\n"
    "    public Request $request;\n"
    "\n"
    "    public Response $response;\n"
    "\n"
    "    public function __construct(Request $request, Response $response)\n"
    "    {\n"
    "        $this->clientId    = $request->header['client-id'] ?? '';\n"
    "        $this->coroutineId = intval($request->header['coroutine-id'] ?? 0);\n"
    "        $this->request     = $request;\n"
    "        $this->response    = $response;\n"
    "    }\n"
    "\n"
    "    public function end(array $data): void\n"
    "    {\n"
    "        $this->response->header('Content-Type', 'application/octet-stream');\n"
    "        $this->response->end(serialize($data));\n"
    "    }\n"
    "\n"
    "    public function getHandler(): string\n"
    "    {\n"
    "        $path = $this->request->server['request_uri'];\n"
    "        return str_replace('/', '_', $path);\n"
    "    }\n"
    "\n"
    "    public function getParam(string $name): string\n"
    "    {\n"
    "        if (!isset($this->request->post[$name])) {\n"
    "            throw new Exception(\"param[{$name}] is empty\");\n"
    "        }\n"
    "        return $this->request->post[$name];\n"
    "    }\n"
    "\n"
    "    public function getDataParam(string $name): mixed\n"
    "    {\n"
    "        return unserialize($this->getParam($name));\n"
    "    }\n"
    "\n"
    "    public function getCoroutineId(): int\n"
    "    {\n"
    "        $coroutine_id = $this->request->header['coroutine-id'] ?? '';\n"
    "        if (!$coroutine_id) {\n"
    "            throw new Exception('coroutine-id is empty');\n"
    "        }\n"
    "        return intval($coroutine_id);\n"
    "    }\n"
    "\n"
    "    public function getClientId(): string\n"
    "    {\n"
    "        $client_id = $this->request->header['client-id'] ?? '';\n"
    "        if (!$client_id) {\n"
    "            throw new Exception('client-id is empty');\n"
    "        }\n"
    "        return $client_id;\n"
    "    }\n"
    "}\n";

static const char* swoole_library_source_core_remote_object_client =
    "\n"
    "/**\n"
    " * This file is part of Swoole.\n"
    " *\n"
    " * @link     https://www.swoole.com\n"
    " * @contact  team@swoole.com\n"
    " * @license  https://github.com/swoole/library/blob/master/LICENSE\n"
    " */\n"
    "\n"
    "declare(strict_types=1);\n"
    "\n"
    "namespace Swoole\\RemoteObject;\n"
    "\n"
    "use Swoole\\Coroutine;\n"
    "use Swoole\\Coroutine\\Http\\Client as HttpClient;\n"
    "use Swoole\\RemoteObject;\n"
    "\n"
    "class Client\n"
    "{\n"
    "    private static array $clients = [];\n"
    "\n"
    "    private HttpClient $client;\n"
    "\n"
    "    private string $id;\n"
    "\n"
    "    private int $ownerCoroutineId;\n"
    "\n"
    "    public function __construct(string $host = '127.0.0.1', int $port = Server::DEFAULT_PORT, array $options = [])\n"
    "    {\n"
    "        $this->id               = $this->genUuid();\n"
    "        $this->client           = new HttpClient($host, $port);\n"
    "        $this->ownerCoroutineId = Coroutine::getCid();\n"
    "\n"
    "        $headers = [\n"
    "            'client-id'    => $this->id,\n"
    "            'coroutine-id' => $this->ownerCoroutineId,\n"
    "        ];\n"
    "        if (isset($options['api_key'])) {\n"
    "            $headers['x-api-key'] = $options['api_key'];\n"
    "        }\n"
    "        $this->client->setHeaders($headers);\n"
    "        self::$clients[$this->id] = $this;\n"
    "    }\n"
    "\n"
    "    public function create(string $class, mixed ...$args): RemoteObject\n"
    "    {\n"
    "        return RemoteObject::create($this, $class, $args);\n"
    "    }\n"
    "\n"
    "    public function call(string $fn, mixed ...$args): mixed\n"
    "    {\n"
    "        return RemoteObject::call($this, $fn, $args);\n"
    "    }\n"
    "\n"
    "    /**\n"
    "     * @throws Exception\n"
    "     */\n"
    "    public static function getInstance(string $clientId): ?static\n"
    "    {\n"
    "        if (empty($clientId)) {\n"
    "            throw new Exception('RemoteObject is not bound to a client');\n"
    "        }\n"
    "        if (!isset(self::$clients[$clientId])) {\n"
    "            return null;\n"
    "        }\n"
    "        return self::$clients[$clientId];\n"
    "    }\n"
    "\n"
    "    public function getId(): string\n"
    "    {\n"
    "        return $this->id;\n"
    "    }\n"
    "\n"
    "    public function execute(string $path, array $array)\n"
    "    {\n"
    "        $rs = $this->client->post($path, $array);\n"
    "        if (!$rs) {\n"
    "            throw new Exception($this->client->errMsg);\n"
    "        }\n"
    "        $result = unserialize($this->client->body);\n"
    "        if ($result['code'] != 0) {\n"
    "            $ex = $result['exception'];\n"
    "            throw new Exception('Server Error: ' . $ex['message'], $ex['code']);\n"
    "        }\n"
    "        return $result;\n"
    "    }\n"
    "\n"
    "    public function ping(): bool\n"
    "    {\n"
    "        try {\n"
    "            $this->execute('/ping', []);\n"
    "            return true;\n"
    "        } catch (\\Throwable $e) {\n"
    "            return false;\n"
    "        }\n"
    "    }\n"
    "\n"
    "    private function genUuid(): string\n"
    "    {\n"
    "        $data    = random_bytes(16);\n"
    "        $data[6] = chr(ord($data[6]) & 0x0F | 0x40);\n"
    "        $data[8] = chr(ord($data[8]) & 0x3F | 0x80);\n"
    "        return vsprintf('%s%s-%s-%s-%s-%s%s%s', str_split(bin2hex($data), 4));\n"
    "    }\n"
    "}\n";

static const char* swoole_library_source_core_remote_object_exception =
    "\n"
    "/**\n"
    " * This file is part of Swoole.\n"
    " *\n"
    " * @link     https://www.swoole.com\n"
    " * @contact  team@swoole.com\n"
    " * @license  https://github.com/swoole/library/blob/master/LICENSE\n"
    " */\n"
    "\n"
    "declare(strict_types=1);\n"
    "\n"
    "namespace Swoole\\RemoteObject;\n"
    "\n"
    "class Exception extends \\RuntimeException\n"
    "{\n"
    "}\n";

static const char* swoole_library_source_core_remote_object_proxy_trait =
    "\n"
    "/**\n"
    " * This file is part of Swoole.\n"
    " *\n"
    " * @link     https://www.swoole.com\n"
    " * @contact  team@swoole.com\n"
    " * @license  https://github.com/swoole/library/blob/master/LICENSE\n"
    " */\n"
    "\n"
    "declare(strict_types=1);\n"
    "\n"
    "namespace Swoole\\RemoteObject;\n"
    "\n"
    "use Swoole\\RemoteObject;\n"
    "\n"
    "trait ProxyTrait\n"
    "{\n"
    "    public function __call(string $method, array $args)\n"
    "    {\n"
    "        return $this->getObject()->{$method}(...$args);\n"
    "    }\n"
    "\n"
    "    public function __get(string $property)\n"
    "    {\n"
    "        return $this->getObject()->{$property};\n"
    "    }\n"
    "\n"
    "    public function __set(string $property, mixed $value)\n"
    "    {\n"
    "        $this->getObject()->{$property} = $value;\n"
    "    }\n"
    "\n"
    "    public function __toString(): string\n"
    "    {\n"
    "        return $this->getObject()->__toString();\n"
    "    }\n"
    "\n"
    "    public function __invoke(...$args)\n"
    "    {\n"
    "        return $this->getObject()->__invoke(...$args);\n"
    "    }\n"
    "\n"
    "    public function offsetGet(mixed $offset): mixed\n"
    "    {\n"
    "        return $this->getObject()->offsetGet($offset);\n"
    "    }\n"
    "\n"
    "    /**\n"
    "     * @throws Exception\n"
    "     */\n"
    "    public function offsetSet(mixed $offset, mixed $value): void\n"
    "    {\n"
    "        $this->getObject()->offsetSet($offset, $value);\n"
    "    }\n"
    "\n"
    "    /**\n"
    "     * @throws Exception\n"
    "     */\n"
    "    public function offsetUnset(mixed $offset): void\n"
    "    {\n"
    "        $this->getObject()->offsetUnset($offset);\n"
    "    }\n"
    "\n"
    "    public function offsetExists(mixed $offset): bool\n"
    "    {\n"
    "        return $this->getObject()->offsetExists($offset);\n"
    "    }\n"
    "\n"
    "    public function current(): mixed\n"
    "    {\n"
    "        return $this->getObject()->current();\n"
    "    }\n"
    "\n"
    "    public function next(): void\n"
    "    {\n"
    "        $this->getObject()->next();\n"
    "    }\n"
    "\n"
    "    public function key(): mixed\n"
    "    {\n"
    "        return $this->getObject()->key();\n"
    "    }\n"
    "\n"
    "    public function valid(): bool\n"
    "    {\n"
    "        return $this->getObject()->valid();\n"
    "    }\n"
    "\n"
    "    public function rewind(): void\n"
    "    {\n"
    "        $this->getObject()->rewind();\n"
    "    }\n"
    "\n"
    "    public function count(): int\n"
    "    {\n"
    "        return $this->getObject()->count();\n"
    "    }\n"
    "\n"
    "    abstract protected function getObject(): RemoteObject;\n"
    "}\n";

static const char* swoole_library_source_core_server_admin =
    "\n"
    "/**\n"
    " * This file is part of Swoole.\n"
    " *\n"
    " * @link     https://www.swoole.com\n"
    " * @contact  team@swoole.com\n"
    " * @license  https://github.com/swoole/library/blob/master/LICENSE\n"
    " */\n"
    "\n"
    "declare(strict_types=1);\n"
    "\n"
    "namespace Swoole\\Server;\n"
    "\n"
    "use Swoole\\Coroutine;\n"
    "use Swoole\\Http\\Request;\n"
    "use Swoole\\Http\\Response;\n"
    "use Swoole\\Server;\n"
    "use Swoole\\StringObject;\n"
    "use Swoole\\Timer;\n"
    "\n"
    "class Admin\n"
    "{\n"
    "    /**\n"
    "     * gdb php\n"
    "     * (gdb) p sizeof(zval)\n"
    "     * $2 = 16\n"
    "     * (gdb) p sizeof(zend_array)\n"
    "     * $1 = 56\n"
    "     * (gdb) p sizeof(zend_string)\n"
    "     * $3 = 32\n"
    "     * (gdb) p sizeof(zend_object)\n"
    "     * $4 = 56\n"
    "     */\n"
    "    public const SIZE_OF_ZVAL = 16;\n"
    "\n"
    "    public const SIZE_OF_ZEND_STRING = 32;\n"
    "\n"
    "    public const SIZE_OF_ZEND_OBJECT = 56;\n"
    "\n"
    "    public const SIZE_OF_ZEND_ARRAY = 56;\n"
    "\n"
    "    private static array $map = [\n"
    "        'reactor'        => SWOOLE_SERVER_COMMAND_REACTOR_THREAD,\n"
    "        'reactor_thread' => SWOOLE_SERVER_COMMAND_REACTOR_THREAD,\n"
    "        'worker'         => SWOOLE_SERVER_COMMAND_EVENT_WORKER,\n"
    "        'event_worker'   => SWOOLE_SERVER_COMMAND_EVENT_WORKER,\n"
    "        'task'           => SWOOLE_SERVER_COMMAND_TASK_WORKER,\n"
    "        'task_worker'    => SWOOLE_SERVER_COMMAND_TASK_WORKER,\n"
    "    ];\n"
    "\n"
    "    private static array $allList = [\n"
    "        'all',\n"
    "        'all_reactor',\n"
    "        'all_reactor_thread',\n"
    "        'all_worker',\n"
    "        'all_event_worker',\n"
    "        'all_task',\n"
    "        'all_task_worker',\n"
    "        'specific',\n"
    "    ];\n"
    "\n"
    "    private static array $postMethodList = [\n"
    "        'server_reload',\n"
    "        'server_shutdown',\n"
    "        'close_session',\n"
    "    ];\n"
    "\n"
    "    private static string $accessToken = '';\n"
    "\n"
    "    public static function init(Server $server): void\n"
    "    {\n"
    "        $accepted_process_types = SWOOLE_SERVER_COMMAND_MASTER |\n"
    "            SWOOLE_SERVER_COMMAND_MANAGER |\n"
    "            SWOOLE_SERVER_COMMAND_EVENT_WORKER |\n"
    "            SWOOLE_SERVER_COMMAND_TASK_WORKER;\n"
    "\n"
    "        $server->addCommand(\n"
    "            'server_reload',\n"
    "            $accepted_process_types,\n"
    "            function (Server $server, string $msg) {\n"
    "                $server->reload();\n"
    "                return self::json('Operation succeeded');\n"
    "            }\n"
    "        );\n"
    "\n"
    "        $server->addCommand(\n"
    "            'server_shutdown',\n"
    "            $accepted_process_types,\n"
    "            function (Server $server, string $msg): void {\n"
    "                $server->shutdown();\n"
    "            }\n"
    "        );\n"
    "\n"
    "        $server->addCommand(\n"
    "            'coroutine_stats',\n"
    "            $accepted_process_types,\n"
    "            fn (Server $server, string $msg) => self::json(Coroutine::stats())\n"
    "        );\n"
    "\n"
    "        $server->addCommand(\n"
    "            'coroutine_list',\n"
    "            $accepted_process_types,\n"
    "            fn (Server $server, string $msg) => self::json(iterator_to_array(Coroutine::list()))\n"
    "        );\n"
    "\n"
    "        $server->addCommand(\n"
    "            'coroutine_bt',\n"
    "            $accepted_process_types,\n"
    "            function (Server $server, string $msg) {\n"
    "                $json = json_decode($msg, null, 512, JSON_THROW_ON_ERROR);\n"
    "                $cid  = empty($json->cid) ? 0 : intval($json->cid);\n"
    "                $bt   = Coroutine::getBackTrace($cid);\n"
    "                if ($bt === false) {\n"
    "                    return self::json(\"Coroutine#{$cid} not exists\", 4004);\n"
    "                }\n"
    "                return self::json($bt);\n"
    "            }\n"
    "        );\n"
    "\n"
    "        $server->addCommand(\n"
    "            'server_stats',\n"
    "            $accepted_process_types,\n"
    "            fn (Server $server, string $msg) => self::json($server->stats())\n"
    "        );\n"
    "\n"
    "        $server->addCommand(\n"
    "            'server_setting',\n"
    "            $accepted_process_types,\n"
    "            function (Server $server, string $msg) {\n"
    "                $setting                = $server->setting;\n"
    "                $setting['mode']        = $server->mode;\n"
    "                $setting['host']        = $server->host;\n"
    "                $setting['port']        = $server->port;\n"
    "                $setting['master_pid']  = $server->master_pid;\n"
    "                $setting['manager_pid'] = $server->manager_pid;\n"
    "                return self::json($setting);\n"
    "            }\n"
    "        );\n"
    "\n"
    "        $server->addCommand(\n"
    "            'get_client_info',\n"
    "            $accepted_process_types,\n"
    "            function (Server $server, string $msg) {\n"
    "                $json = json_decode($msg, true, 512, JSON_THROW_ON_ERROR);\n"
    "                if (empty($json['session_id'])) {\n"
    "                    return self::json('require session_id', 4003);\n"
    "                }\n"
    "                return self::json($server->getClientInfo(intval($json['session_id'])));\n"
    "            }\n"
    "        );\n"
    "\n"
    "        $server->addCommand('close_session', $accepted_process_types, [self::class, 'handlerCloseSession']);\n"
    "        $server->addCommand('get_version_info', $accepted_process_types, [self::class, 'handlerGetVersionInfo']);\n"
    "        $server->addCommand('get_worker_info', $accepted_process_types, [self::class, 'handlerGetWorkerInfo']);\n"
    "        $server->addCommand('get_timer_list', $accepted_process_types, [self::class, 'handlerGetTimerList']);\n"
    "        $server->addCommand('get_coroutine_list', $accepted_process_types, [self::class, 'handlerGetCoroutineList']);\n"
    "        $server->addCommand('get_objects', $accepted_process_types, [self::class, 'handlerGetObjects']);\n"
    "        $server->addCommand('get_class_info', $accepted_process_types, [self::class, 'handlerGetClassInfo']);\n"
    "        $server->addCommand('get_function_info', $accepted_process_types, [self::class, 'handlerGetFunctionInfo']);\n"
    "        $server->addCommand('get_object_by_handle', $accepted_process_types, [self::class, 'handlerGetObjectByHandle']);\n"
    "        $server->addCommand('get_server_cpu_usage', $accepted_process_types, [self::class, 'handlerGetServerCpuUsage']);\n"
    "        $server->addCommand(\n"
    "            'get_server_memory_usage',\n"
    "            $accepted_process_types,\n"
    "            [self::class, 'handlerGetServerMemoryUsage']\n"
    "        );\n"
    "        $server->addCommand(\n"
    "            'get_static_property_value',\n"
    "            $accepted_process_types,\n"
    "            [self::class, 'handlerGetStaticPropertyValue']\n"
    "        );\n"
    "        $server->addCommand(\n"
    "            'get_defined_functions',\n"
    "            $accepted_process_types,\n"
    "            [self::class, 'handlerGetDefinedFunctions']\n"
    "        );\n"
    "        $server->addCommand('get_declared_classes', $accepted_process_types, [self::class, 'handlerGetDeclaredClasses']);\n"
    "\n"
    "        $server->addCommand(\n"
    "            'gc_status',\n"
    "            $accepted_process_types,\n"
    "            function (Server $server, string $msg) {\n"
    "                return self::json(gc_status());\n"
    "            }\n"
    "        );\n"
    "\n"
    "        if (extension_loaded('opcache')) {\n"
    "            $server->addCommand(\n"
    "                'opcache_status',\n"
    "                $accepted_process_types,\n"
    "                fn (Server $server, string $msg) => self::json(opcache_get_status(true))\n"
    "            );\n"
    "        }\n"
    "\n"
    "        $server->addCommand(\n"
    "            'getpid',\n"
    "            $accepted_process_types,\n"
    "            fn (Server $server, string $msg) => self::json(['pid' => posix_getpid()])\n"
    "        );\n"
    "\n"
    "        $server->addCommand(\n"
    "            'memory_usage',\n"
    "            $accepted_process_types,\n"
    "            fn (Server $server, string $msg) => self::json([\n"
    "                'usage'      => memory_get_usage(),\n"
    "                'real_usage' => memory_get_usage(true),\n"
    "            ])\n"
    "        );\n"
    "\n"
    "        $server->addCommand(\n"
    "            'get_included_files',\n"
    "            $accepted_process_types,\n"
    "            fn (Server $server, string $msg) => self::json(['files' => get_included_files()])\n"
    "        );\n"
    "\n"
    "        $server->addCommand('get_resources', $accepted_process_types, [self::class, 'handlerGetResources']);\n"
    "\n"
    "        $server->addCommand(\n"
    "            'get_defined_constants',\n"
    "            $accepted_process_types,\n"
    "            function (Server $server, string $msg) {\n"
    "                $constants = get_defined_constants();\n"
    "                foreach ($constants as $k => $c) {\n"
    "                    if (is_resource($c)) {\n"
    "                        unset($constants[$k]);\n"
    "                    }\n"
    "                }\n"
    "                unset($constants['NULL'], $constants['NAN'], $constants['INF']);\n"
    "                return self::json($constants);\n"
    "            }\n"
    "        );\n"
    "\n"
    "        $server->addCommand(\n"
    "            'get_loaded_extensions',\n"
    "            $accepted_process_types,\n"
    "            function (Server $server, string $msg) {\n"
    "                $extensions = get_loaded_extensions();\n"
    "                $list       = [];\n"
    "                foreach ($extensions as $key => $extension) {\n"
    "                    $ext        = new \\ReflectionExtension($extension);\n"
    "                    $list[$key] = [\n"
    "                        'id'      => ++$key,\n"
    "                        'name'    => $extension,\n"
    "                        'version' => (string) $ext->getVersion(),\n"
    "                    ];\n"
    "                }\n"
    "                return self::json($list);\n"
    "            }\n"
    "        );\n"
    "\n"
    "        $server->addCommand(\n"
    "            'get_declared_interfaces',\n"
    "            $accepted_process_types,\n"
    "            fn (Server $server, string $msg) => self::json(get_declared_interfaces())\n"
    "        );\n"
    "\n"
    "        $server->addCommand(\n"
    "            'get_declared_traits',\n"
    "            $accepted_process_types,\n"
    "            fn (Server $server, string $msg) => self::json(get_declared_traits())\n"
    "        );\n"
    "\n"
    "        $server->addCommand(\n"
    "            'get_included_file_contents',\n"
    "            $accepted_process_types,\n"
    "            function (Server $server, string $msg) {\n"
    "                $json = json_decode($msg, true, 512, JSON_THROW_ON_ERROR);\n"
    "                if (empty($json['filename'])) {\n"
    "                    return self::json('require filename', 4003);\n"
    "                }\n"
    "\n"
    "                if (!file_exists($json['filename'])) {\n"
    "                    return self::json(\"{$json['filename']} not exist\", 4004);\n"
    "                }\n"
    "\n"
    "                if (!in_array($json['filename'], get_included_files())) {\n"
    "                    return self::json('no permission', 4003);\n"
    "                }\n"
    "\n"
    "                return self::json(file_get_contents($json['filename']));\n"
    "            }\n"
    "        );\n"
    "\n"
    "        $server->addCommand(\n"
    "            'get_globals',\n"
    "            $accepted_process_types,\n"
    "            function (Server $server, string $msg) {\n"
    "                $globals = [];\n"
    "                foreach ($GLOBALS as $key => $item) {\n"
    "                    if ($key === 'GLOBALS') {\n"
    "                        continue;\n"
    "                    }\n"
    "                    $type  = gettype($item);\n"
    "                    $other = [];\n"
    "                    if ($type === 'object') {\n"
    "                        $other = [\n"
    "                            'class_name'  => $item::class,\n"
    "                            'object_id'   => spl_object_id($item),\n"
    "                            'object_hash' => spl_object_hash($item),\n"
    "                        ];\n"
    "                    }\n"
    "                    if ($type == 'resource' || $type == 'resource (closed)') {\n"
    "                        $item = '';\n"
    "                    }\n"
    "                    $globals[] = [\n"
    "                        'key'   => $key,\n"
    "                        'value' => $item,\n"
    "                        'type'  => $type,\n"
    "                        'other' => $other,\n"
    "                    ];\n"
    "                }\n"
    "                return self::json($globals);\n"
    "            }\n"
    "        );\n"
    "\n"
    "        $server->addCommand(\n"
    "            'get_extension_info',\n"
    "            $accepted_process_types,\n"
    "            function (Server $server, string $msg) {\n"
    "                $json = json_decode($msg, true, 512, JSON_THROW_ON_ERROR);\n"
    "\n"
    "                if (empty($json['extension_name']) || !extension_loaded($json['extension_name'])) {\n"
    "                    return self::json('require extension_name', 4004);\n"
    "                }\n"
    "\n"
    "                $ext = new \\ReflectionExtension($json['extension_name']);\n"
    "\n"
    "                ob_start();\n"
    "                $ext->info();\n"
    "                $info = ob_get_clean();\n"
    "\n"
    "                $constants = $ext->getConstants();\n"
    "                foreach ($constants as $k => $c) {\n"
    "                    if (is_resource($c)) {\n"
    "                        unset($constants[$k]);\n"
    "                    }\n"
    "                }\n"
    "\n"
    "                unset($constants['NULL'], $constants['NAN'], $constants['INF']);\n"
    "\n"
    "                return self::json([\n"
    "                    'classes'      => $ext->getClassNames(),\n"
    "                    'version'      => $ext->getVersion(),\n"
    "                    'constants'    => $constants,\n"
    "                    'ini_entries'  => $ext->getINIEntries(),\n"
    "                    'dependencies' => $ext->getDependencies(),\n"
    "                    'functions'    => array_keys($ext->getFunctions()),\n"
    "                    'info'         => trim($info),\n"
    "                ]);\n"
    "            }\n"
    "        );\n"
    "\n"
    "        $server->addCommand(\n"
    "            'get_composer_packages',\n"
    "            $accepted_process_types,\n"
    "            function (Server $server, string $msg) {\n"
    "                if (!class_exists(\\Composer\\InstalledVersions::class)) {\n"
    "                    return self::json('require composer 2.0', 4003);\n"
    "                }\n"
    "\n"
    "                $list = [];\n"
    "                foreach (['getAllRawData', 'getRawData'] as $method) {\n"
    "                    if (!method_exists(\\Composer\\InstalledVersions::class, $method)) {\n"
    "                        continue;\n"
    "                    }\n"
    "\n"
    "                    $raw_data[] = \\Composer\\InstalledVersions::$method();\n"
    "                    if ($method === 'getAllRawData') {\n"
    "                        $raw_data = \\Composer\\InstalledVersions::$method();\n"
    "                        array_shift($raw_data);\n"
    "                    }\n"
    "\n"
    "                    foreach ($raw_data as $key => $package) {\n"
    "                        $key_name = $package['root']['name'];\n"
    "                        if ($package['root']['name'] === '__root__' && isset($list['__root__'])) {\n"
    "                            $key_name = \"__root__{$key}\";\n"
    "                        }\n"
    "                        $package['root']['install_path'] = !empty($package['root']['install_path']) ? realpath($package['root']['install_path']) : '';\n"
    "                        $list[$key_name]                 = $package;\n"
    "                    }\n"
    "                    break;\n"
    "                }\n"
    "                return self::json($list);\n"
    "            }\n"
    "        );\n"
    "    }\n"
    "\n"
    "    public static function getAccessToken(): string\n"
    "    {\n"
    "        return self::$accessToken;\n"
    "    }\n"
    "\n"
    "    public static function start(Server $server): void\n"
    "    {\n"
    "        $admin_server_uri = swoole_string($server->setting['admin_server']);\n"
    "        if ($admin_server_uri->startsWith('unix:/')) {\n"
    "            swoole_error_log(SWOOLE_LOG_ERROR, \"admin_server[{$server->setting['admin_server']}] is not supported\");\n"
    "            return;\n"
    "        }\n"
    "\n"
    "        if ($admin_server_uri->contains('@')) {\n"
    "            [$access_name, $access_secret] = $admin_server_uri->split('@', 2)->get(0)->split(':', 2)->toArray();\n"
    "            self::$accessToken             = sha1($access_name . $access_secret);\n"
    "            [$host, $port]                 = $admin_server_uri->split('@', 2)->get(1)->split(':', 2)->toArray();\n"
    "        } else {\n"
    "            [$host, $port] = $admin_server_uri->split(':', 2)->toArray();\n"
    "        }\n"
    "\n"
    "        $admin_server = new Coroutine\\Http\\Server($host, intval($port));\n"
    "\n"
    "        $admin_server->handle('/api', function (Request $req, Response $resp) use ($server) {\n"
    "            $path_array = swoole_string($req->server['request_uri'])->trim('/')->split('/');\n"
    "            if ($path_array->count() < 2 or $path_array->count() > 3) {\n"
    "                $resp->status(403);\n"
    "                $resp->end(self::json('Bad API path', 4003));\n"
    "                return;\n"
    "            }\n"
    "\n"
    "            $resp->header('Server', 'swoole-admin-server');\n"
    "            $resp->header('Access-Control-Allow-Origin', '*');\n"
    "            $resp->header('Access-Control-Allow-Methods', 'GET, POST, OPTIONS');\n"
    "            $resp->header('Access-Control-Allow-Headers', 'X-ACCESS-TOKEN, X-ADMIN-SERVER-ACCESS-TOKEN');\n"
    "\n"
    "            $method = $req->getMethod();\n"
    "\n"
    "            if ($method === 'OPTIONS') {\n"
    "                $resp->end();\n"
    "                return;\n"
    "            }\n"
    "\n"
    "            $token = self::getAccessToken();\n"
    "            if (!empty($token)) {\n"
    "                $token_header = $req->header['x-admin-server-access-token'] ?? '';\n"
    "                if ($token_header !== $token) {\n"
    "                    $resp->status(403);\n"
    "                    $resp->end(self::json('Bad access token', 4003));\n"
    "                    return;\n"
    "                }\n"
    "            }\n"
    "\n"
    "            $cmd = $path_array->get(1)->toString();\n"
    "\n"
    "            if (in_array($cmd, self::$postMethodList) && $method != 'POST') {\n"
    "                $resp->status(403);\n"
    "                $resp->end(self::json('Bad request method', 4003));\n"
    "                return;\n"
    "            }\n"
    "\n"
    "            if ($method == 'GET') {\n"
    "                $data = $req->get;\n"
    "            } else {\n"
    "                $data = $req->post;\n"
    "            }\n"
    "\n"
    "            if ($cmd === 'multi') {\n"
    "                $body = json_decode($req->getContent(), true, 512, JSON_THROW_ON_ERROR);\n"
    "                if (empty($body) || !is_array($body) || $method != 'POST') {\n"
    "                    goto _bad_process;\n"
    "                }\n"
    "\n"
    "                $result = self::handlerMulti($server, $body);\n"
    "                $resp->end(json_encode($result, JSON_INVALID_UTF8_IGNORE));\n"
    "                return;\n"
    "            }\n"
    "\n"
    "            if ($path_array->count() == 2) {\n"
    "                $process = swoole_string('master');\n"
    "            } else {\n"
    "                $process = $path_array->get(2);\n"
    "            }\n"
    "\n"
    "            if ($process->startsWith('master')) {\n"
    "                $process_type = SWOOLE_SERVER_COMMAND_MASTER;\n"
    "                $process_id   = 0;\n"
    "            } elseif ($process->startsWith('manager')) {\n"
    "                $process_type = SWOOLE_SERVER_COMMAND_MANAGER;\n"
    "                $process_id   = 0;\n"
    "            } elseif ($process->startsWith('all') || $process->equals('specific')) {\n"
    "                if (!in_array($process->toString(), self::$allList)) {\n"
    "                    goto _bad_process;\n"
    "                }\n"
    "\n"
    "                $result = self::handlerGetAll($server, $process, $cmd, $data);\n"
    "\n"
    "                $resp->end(self::json($result));\n"
    "                return;\n"
    "            } else {\n"
    "                $array = $process->split('-');\n"
    "                if ($array->count() != 2) {\n"
    "                    _bad_process:\n"
    "                    $resp->status(403);\n"
    "                    $resp->end(self::json('Bad process', 4003));\n"
    "                    return;\n"
    "                }\n"
    "\n"
    "                if (!isset(self::$map[$array->get(0)->toString()])) {\n"
    "                    goto _bad_process;\n"
    "                }\n"
    "\n"
    "                $process_type = self::$map[$array->get(0)->toString()];\n"
    "                $process_id   = intval($array->get(1)->toString());\n"
    "            }\n"
    "\n"
    "            $result = $server->command($cmd, $process_id, intval($process_type), $data, false);\n"
    "            if (!$result) {\n"
    "                $resp->end(json_encode([\n"
    "                    'code' => swoole_last_error(),\n"
    "                    'data' => swoole_strerror(swoole_last_error()),\n"
    "                ], JSON_THROW_ON_ERROR));\n"
    "            } else {\n"
    "                $resp->end($result);\n"
    "            }\n"
    "        });\n"
    "        $admin_server->handle('/', function (Request $req, Response $resp): void {\n"
    "            $resp->status(404);\n"
    "        });\n"
    "        $server->admin_server = $admin_server;\n"
    "        $admin_server->start();\n"
    "    }\n"
    "\n"
    "    /**\n"
    "     * @return false|string\n"
    "     */\n"
    "    public static function handlerGetResources(Server $server, string $msg)\n"
    "    {\n"
    "        $resources = get_resources();\n"
    "        $list      = [];\n"
    "        foreach ($resources as $r) {\n"
    "            $info = [\n"
    "                'id'   => get_resource_id($r),\n"
    "                'type' => get_resource_type($r),\n"
    "            ];\n"
    "            if ($info['type'] == 'stream') {\n"
    "                $info['info'] = stream_get_meta_data($r);\n"
    "            }\n"
    "            $list[] = $info;\n"
    "        }\n"
    "        return self::json($list);\n"
    "    }\n"
    "\n"
    "    /**\n"
    "     * @return false|string\n"
    "     */\n"
    "    public static function handlerGetWorkerInfo(Server $server, string $msg)\n"
    "    {\n"
    "        $info = [\n"
    "            'id'                => $server->getWorkerId(),\n"
    "            'pid'               => $server->getWorkerPid(),\n"
    "            'gc_status'         => gc_status(),\n"
    "            'memory_usage'      => memory_get_usage(),\n"
    "            'memory_real_usage' => memory_get_usage(true),\n"
    "            'process_status'    => self::getProcessStatus(),\n"
    "            'coroutine_stats'   => Coroutine::stats(),\n"
    "            'timer_stats'       => Timer::stats(),\n"
    "            'vm_status'         => swoole_get_vm_status(),\n"
    "        ];\n"
    "        return self::json($info);\n"
    "    }\n"
    "\n"
    "    /**\n"
    "     * @return false|string\n"
    "     */\n"
    "    public static function handlerCloseSession(Server $server, string $msg)\n"
    "    {\n"
    "        $json = json_decode($msg, true, 512, JSON_THROW_ON_ERROR);\n"
    "        if (empty($json['session_id'])) {\n"
    "            return self::json('require session_id', 4003);\n"
    "        }\n"
    "        if ($server->close(intval($json['session_id']), !empty($json['force']))) {\n"
    "            return self::json([]);\n"
    "        }\n"
    "        return self::json(['error' => swoole_last_error()], 4004);\n"
    "    }\n"
    "\n"
    "    /**\n"
    "     * @return false|string\n"
    "     */\n"
    "    public static function handlerGetTimerList(Server $server, string $msg)\n"
    "    {\n"
    "        $list = [];\n"
    "        foreach (Timer::list() as $timer_id) {\n"
    "            $list[] = [\n"
    "                'id'   => $timer_id,\n"
    "                'info' => Timer::info($timer_id),\n"
    "            ];\n"
    "        }\n"
    "\n"
    "        return self::json($list);\n"
    "    }\n"
    "\n"
    "    /**\n"
    "     * @return false|string\n"
    "     */\n"
    "    public static function handlerGetCoroutineList(Server $server, string $msg)\n"
    "    {\n"
    "        $list = [];\n"
    "        foreach (Coroutine::list() as $cid) {\n"
    "            $list[] = [\n"
    "                'id'          => $cid,\n"
    "                'elapsed'     => Coroutine::getElapsed($cid),\n"
    "                'stack_usage' => Coroutine::getStackUsage($cid),\n"
    "                'backTrace'   => Coroutine::getBackTrace($cid, DEBUG_BACKTRACE_IGNORE_ARGS, 1),\n"
    "            ];\n"
    "        }\n"
    "\n"
    "        return self::json($list);\n"
    "    }\n"
    "\n"
    "    public static function handlerGetObjects(Server $server, string $msg)\n"
    "    {\n"
    "        $list    = [];\n"
    "        $objects = swoole_get_objects();\n"
    "        foreach ($objects as $o) {\n"
    "            $class_name = $o::class;\n"
    "            $class      = new \\ReflectionClass($class_name);\n"
    "            $filename   = $class->getFileName();\n"
    "            $line       = $class->getStartLine();\n"
    "            $list[]     = [\n"
    "                'id'          => spl_object_id($o),\n"
    "                'hash'        => spl_object_hash($o),\n"
    "                'class'       => $class_name,\n"
    "                'filename'    => $filename ?: '',\n"
    "                'line'        => $line ?: '',\n"
    "                'memory_size' => self::getObjectMemorySize($o),\n"
    "            ];\n"
    "        }\n"
    "\n"
    "        return self::json($list);\n"
    "    }\n"
    "\n"
    "    public static function handlerGetClassInfo(Server $server, string $msg)\n"
    "    {\n"
    "        $json = json_decode($msg, true, 512, JSON_THROW_ON_ERROR);\n"
    "        if (!empty($json['class_name'])) {\n"
    "            if (!class_exists($json['class_name'], false) && !interface_exists($json['class_name'], false)) {\n"
    "                return self::json(\"{$json['class_name']} not exists\", 4003);\n"
    "            }\n"
    "            $name = $json['class_name'];\n"
    "        } elseif (!empty($json['interface_name'])) {\n"
    "            if (!interface_exists($json['interface_name'], false)) {\n"
    "                return self::json(\"{$json['interface_name']} not exists\", 4003);\n"
    "            }\n"
    "            $name = $json['interface_name'];\n"
    "        } else {\n"
    "            return self::json(['error' => 'require class_name or interface_name'], 4004);\n"
    "        }\n"
    "\n"
    "        $class = new \\ReflectionClass($name);\n"
    "\n"
    "        $filename = $class->getFileName();\n"
    "\n"
    "        $getTmpConstants = function ($data) {\n"
    "            $tmp = [];\n"
    "            foreach ($data as $k => $v) {\n"
    "                $tmp[] = [\n"
    "                    'name'  => $k,\n"
    "                    'value' => is_array($v) ? var_export($v, true) : $v,\n"
    "                    'type'  => is_array($v) ? 'detail' : 'default',\n"
    "                ];\n"
    "            }\n"
    "            return $tmp;\n"
    "        };\n"
    "\n"
    "        $tmpConstants = $class->getConstants();\n"
    "        $constants    = $tmpConstants ? $getTmpConstants($tmpConstants) : [];\n"
    "\n"
    "        $staticProperties = [];\n"
    "        $properties       = [];\n"
    "        $tmpProperties    = $class->getProperties();\n"
    "\n"
    "        $getTmpProperties = function ($class, $data) {\n"
    "            $static            = [];\n"
    "            $noStatic          = [];\n"
    "            $defaultProperties = $class->getDefaultProperties();\n"
    "            foreach ($data as $k => $v) {\n"
    "                $name      = $v->getName();\n"
    "                $modifiers = \\Reflection::getModifierNames($v->getModifiers());\n"
    "                if ($v->isStatic()) {\n"
    "                    $static[] = [\n"
    "                        'name'      => $name,\n"
    "                        'value'     => $defaultProperties[$name],\n"
    "                        'modifiers' => implode(' ', $modifiers),\n"
    "                    ];\n"
    "                } else {\n"
    "                    $noStatic[] = [\n"
    "                        'name'      => $name,\n"
    "                        'value'     => $defaultProperties[$name],\n"
    "                        'modifiers' => implode(' ', $modifiers),\n"
    "                    ];\n"
    "                }\n"
    "            }\n"
    "            return ['static' => $static, 'no_static' => $noStatic];\n"
    "        };\n"
    "\n"
    "        if ($tmpProperties) {\n"
    "            $tmpProperties    = $getTmpProperties($class, $tmpProperties);\n"
    "            $staticProperties = $tmpProperties['static'];\n"
    "            $properties       = $tmpProperties['no_static'];\n"
    "        }\n"
    "\n"
    "        $staticMethods    = [];\n"
    "        $methods          = [];\n"
    "        $tmpStaticMethods = $class->getMethods();\n"
    "\n"
    "        $getTmpMethods = function ($data) {\n"
    "            $static   = [];\n"
    "            $noStatic = [];\n"
    "            foreach ($data as $k => $v) {\n"
    "                $name      = $v->getName();\n"
    "                $line      = $v->getStartLine();\n"
    "                $modifiers = \\Reflection::getModifierNames($v->getModifiers());\n"
    "                if ($v->isStatic()) {\n"
    "                    $static[] = [\n"
    "                        'name'      => $name,\n"
    "                        'line'      => $line ?: '',\n"
    "                        'modifiers' => implode(' ', $modifiers),\n"
    "                    ];\n"
    "                } else {\n"
    "                    $noStatic[] = [\n"
    "                        'name'      => $name,\n"
    "                        'line'      => $line ?: '',\n"
    "                        'modifiers' => implode(' ', $modifiers),\n"
    "                    ];\n"
    "                }\n"
    "            }\n"
    "            return ['static' => $static, 'no_static' => $noStatic];\n"
    "        };\n"
    "\n"
    "        if ($tmpStaticMethods) {\n"
    "            $tmpStaticMethods = $getTmpMethods($tmpStaticMethods);\n"
    "            $staticMethods    = $tmpStaticMethods['static'];\n"
    "            $methods          = $tmpStaticMethods['no_static'];\n"
    "        }\n"
    "\n"
    "        $tmpParentClass = $class->getParentClass();\n"
    "        $parentClass    = $tmpParentClass ? $tmpParentClass->getName() : '';\n"
    "\n"
    "        $data = [\n"
    "            'filename'         => $filename,\n"
    "            'constants'        => $constants,\n"
    "            'staticProperties' => $staticProperties,\n"
    "            'properties'       => $properties,\n"
    "            'staticMethods'    => $staticMethods,\n"
    "            'methods'          => $methods,\n"
    "            'parentClass'      => $parentClass,\n"
    "            'interface'        => $class->getInterfaceNames(),\n"
    "        ];\n"
    "        return self::json($data);\n"
    "    }\n"
    "\n"
    "    public static function handlerGetFunctionInfo(Server $server, string $msg)\n"
    "    {\n"
    "        $json = json_decode($msg, true, 512, JSON_THROW_ON_ERROR);\n"
    "\n"
    "        $className    = $json['class_name'] ?? '';\n"
    "        $functionName = $json['function_name'] ?? '';\n"
    "\n"
    "        if (empty($json) || empty($functionName)) {\n"
    "            return self::json('require function_name', 4004);\n"
    "        }\n"
    "\n"
    "        $isStatic = false;\n"
    "        if (!empty($className)) {\n"
    "            if (!class_exists($className) && !interface_exists($className)) {\n"
    "                return self::json(\"{$className} not exists\", 4004);\n"
    "            }\n"
    "            if (!method_exists($className, $functionName)) {\n"
    "                return self::json(\"{$className}->{$functionName} not exists\", 4004);\n"
    "            }\n"
    "            $ref      = new \\ReflectionMethod($className, $functionName);\n"
    "            $isStatic = $ref->isStatic();\n"
    "        } else {\n"
    "            if (!function_exists($functionName)) {\n"
    "                return self::json(\"{$functionName} not exists\", 4004);\n"
    "            }\n"
    "            $ref = new \\ReflectionFunction($functionName);\n"
    "        }\n"
    "\n"
    "        $result = [\n"
    "            'filename'     => $ref->getFileName(),\n"
    "            'line'         => $ref->getStartLine() ?: '',\n"
    "            'num'          => $ref->getNumberOfParameters(),\n"
    "            'user_defined' => $ref->isUserDefined(),\n"
    "            'extension'    => $ref->getExtensionName(),\n"
    "            'is_static'    => $isStatic,\n"
    "        ];\n"
    "\n"
    "        $params = $ref->getParameters();\n"
    "\n"
    "        $list = [];\n"
    "        foreach ($params as $param) {\n"
    "            $type = $optional = $default = '';\n"
    "\n"
    "            $paramName = $param->getName();\n"
    "\n"
    "            if ($param->hasType()) {\n"
    "                /** @var \\ReflectionNamedType|\\ReflectionUnionType $reflection */\n"
    "                $reflection = $param->getType();\n"
    "                if ($reflection instanceof \\ReflectionUnionType) {\n"
    "                    $unionType = [];\n"
    "                    foreach ($reflection->getTypes() as $objType) {\n"
    "                        $unionType[] = $objType->getName();\n"
    "                    }\n"
    "                    $type = implode('|', $unionType);\n"
    "                } else {\n"
    "                    $type = $reflection->getName();\n"
    "                }\n"
    "            }\n"
    "\n"
    "            if ($param->isOptional() && !$param->isVariadic()) {\n"
    "                $optional = '?';\n"
    "                if ($param->isDefaultValueAvailable()) {\n"
    "                    $value = $param->getDefaultValue();\n"
    "                    if (in_array($value, [true, false, null, ''])) {\n"
    "                        if ($value === null) {\n"
    "                            $value = 'null';\n"
    "                        }\n"
    "                        if ($value === true) {\n"
    "                            $value = 'true';\n"
    "                        }\n"
    "                        if ($value === false) {\n"
    "                            $value = 'false';\n"
    "                        }\n"
    "                        if ($value === '') {\n"
    "                            $value = \"''\";\n"
    "                        }\n"
    "                    }\n"
    "                    $default = \" = {$value}\";\n"
    "                }\n"
    "            }\n"
    "\n"
    "            $isPassedByReference = $param->isPassedByReference() ? '&' : '';\n"
    "            $isVariadic          = $param->isVariadic() ? '...' : '';\n"
    "\n"
    "            $option = \"{$optional}{$type} {$isPassedByReference}{$isVariadic}\";\n"
    "            $param  = \"\\${$paramName}{$default}\";\n"
    "\n"
    "            $list[] = [\n"
    "                'optional'               => $optional,\n"
    "                'type'                   => $type,\n"
    "                'is_passed_by_reference' => $isPassedByReference,\n"
    "                'is_variadic'            => $isVariadic,\n"
    "                'name'                   => $paramName,\n"
    "                'default'                => $default,\n"
    "                'full'                   => $option !== ' ' ? \"{$option}{$param}\" : $param,\n"
    "            ];\n"
    "        }\n"
    "        $result['params'] = $list;\n"
    "\n"
    "        return self::json($result);\n"
    "    }\n"
    "\n"
    "    public static function handlerGetObjectByHandle(Server $server, string $msg)\n"
    "    {\n"
    "        $json = json_decode($msg, true, 512, JSON_THROW_ON_ERROR);\n"
    "        if (empty($json) || empty($json['object_id']) || empty($json['object_hash'])) {\n"
    "            return self::json(['error' => 'Params Error!'], 4004);\n"
    "        }\n"
    "\n"
    "        $object = swoole_get_object_by_handle((int) $json['object_id']);\n"
    "        if (!$object) {\n"
    "            return self::json(['error' => 'Object destroyed!'], 4004);\n"
    "        }\n"
    "\n"
    "        $object_hash = spl_object_hash($object); // @phpstan-ignore argument.type\n"
    "        if ($object_hash != $json['object_hash']) {\n"
    "            return self::json(['error' => 'Object destroyed!'], 4004);\n"
    "        }\n"
    "\n"
    "        return self::json(var_export($object, true));\n"
    "    }\n"
    "\n"
    "    public static function handlerGetVersionInfo(Server $server, string $msg)\n"
    "    {\n"
    "        $ip_arr = swoole_get_local_ip();\n"
    "        $host   = [];\n"
    "        $local  = [];\n"
    "        foreach ($ip_arr as $k => $ip) {\n"
    "            if (filter_var($ip, FILTER_VALIDATE_IP, FILTER_FLAG_NO_PRIV_RANGE | FILTER_FLAG_NO_RES_RANGE)) {\n"
    "                $host[] = $ip;\n"
    "            } else {\n"
    "                $local[] = $ip;\n"
    "            }\n"
    "        }\n"
    "        $data = [\n"
    "            'os'     => php_uname('s') . '-' . php_uname('r'),\n"
    "            'swoole' => swoole_version(),\n"
    "            'php'    => phpversion(),\n"
    "            'ip'     => $host ? $host[0] : $local[0],\n"
    "        ];\n"
    "        return self::json($data);\n"
    "    }\n"
    "\n"
    "    public static function handlerGetDefinedFunctions(Server $server, string $msg)\n"
    "    {\n"
    "        $functions = get_defined_functions();\n"
    "        $arr       = [\n"
    "            'internal' => $functions['internal'],\n"
    "        ];\n"
    "        if (!empty($functions['user'])) {\n"
    "            foreach ($functions['user'] as $function_name) {\n"
    "                $function      = new \\ReflectionFunction($function_name);\n"
    "                $filename      = $function->getFileName();\n"
    "                $line          = $function->getStartLine();\n"
    "                $arr['user'][] = [\n"
    "                    'function' => $function_name,\n"
    "                    'filename' => $filename,\n"
    "                    'line'     => $line,\n"
    "                ];\n"
    "            }\n"
    "        }\n"
    "        return self::json($arr);\n"
    "    }\n"
    "\n"
    "    public static function handlerGetDeclaredClasses(Server $server, string $msg)\n"
    "    {\n"
    "        $classes = get_declared_classes();\n"
    "        $arr     = [];\n"
    "        if ($classes) {\n"
    "            foreach ($classes as $classes_name) {\n"
    "                $function = new \\ReflectionClass($classes_name);\n"
    "                $filename = $function->getFileName();\n"
    "                $line     = $function->getStartLine();\n"
    "                $arr[]    = [\n"
    "                    'class'    => $classes_name,\n"
    "                    'filename' => $filename ?: '',\n"
    "                    'line'     => $line ?: '',\n"
    "                ];\n"
    "            }\n"
    "        }\n"
    "        return self::json($arr);\n"
    "    }\n"
    "\n"
    "    public static function handlerGetServerMemoryUsage(Server $server, string $msg)\n"
    "    {\n"
    "        $total = 0;\n"
    "\n"
    "        $result['master'] = $result['manager'] = 0;\n"
    "        if (self::haveMasterProcess($server)) {\n"
    "            $result['master'] = self::getProcessMemoryRealUsage($server->master_pid);\n"
    "        }\n"
    "        $total += $result['master'];\n"
    "\n"
    "        if (self::haveManagerProcess($server)) {\n"
    "            $result['manager'] = self::getProcessMemoryRealUsage($server->manager_pid);\n"
    "        }\n"
    "        $total += $result['manager'];\n"
    "\n"
    "        $n = $server->setting['worker_num'] + $server->setting['task_worker_num'];\n"
    "        /** @var int $n */\n"
    "        for ($i = 0; $i < $n; $i++) {\n"
    "            $key          = 'worker-' . $i;\n"
    "            $result[$key] = self::getProcessMemoryRealUsage($server->getWorkerPid($i));\n"
    "            $total += $result[$key];\n"
    "        }\n"
    "\n"
    "        $result['total'] = $total;\n"
    "\n"
    "        $result['memory_size'] = 0;\n"
    "        // TODO: Support other OS\n"
    "        if (PHP_OS_FAMILY === 'Linux') {\n"
    "            preg_match('#MemTotal:\\s+(\\d+) kB#i', file_get_contents('/proc/meminfo'), $match);\n"
    "            $result['memory_size'] = intval($match[1]) * 1024;\n"
    "        }\n"
    "\n"
    "        return self::json($result);\n"
    "    }\n"
    "\n"
    "    public static function handlerGetServerCpuUsage(Server $server, string $msg)\n"
    "    {\n"
    "        $total = 0;\n"
    "\n"
    "        $result['master'] = $result['manager'] = 0;\n"
    "        if (self::haveMasterProcess($server)) {\n"
    "            $result['master'] = self::getProcessCpuUsage($server->master_pid);\n"
    "        }\n"
    "\n"
    "        $total += $result['master'][1] ?? 0;\n"
    "\n"
    "        if (self::haveManagerProcess($server)) {\n"
    "            $result['manager'] = self::getProcessCpuUsage($server->manager_pid);\n"
    "        }\n"
    "\n"
    "        $total += $result['manager'][1] ?? 0;\n"
    "\n"
    "        $n = $server->setting['worker_num'] + $server->setting['task_worker_num'];\n"
    "        /** @var int $n */\n"
    "        for ($i = 0; $i < $n; $i++) {\n"
    "            $key          = 'worker-' . $i;\n"
    "            $result[$key] = self::getProcessCpuUsage($server->getWorkerPid($i))[1] ?? 0;\n"
    "            $total += $result[$key];\n"
    "        }\n"
    "\n"
    "        $result['total']   = $total;\n"
    "        $result['cpu_num'] = swoole_cpu_num();\n"
    "\n"
    "        return self::json($result);\n"
    "    }\n"
    "\n"
    "    public static function handlerGetStaticPropertyValue(Server $server, string $msg)\n"
    "    {\n"
    "        $json = json_decode($msg, true, 512, JSON_THROW_ON_ERROR);\n"
    "        if (empty($json['class_name'])) {\n"
    "            return self::json(['error' => 'require class_name!'], 4004);\n"
    "        }\n"
    "        if (empty($json['property_name'])) {\n"
    "            return self::json(['error' => 'require property_name!'], 4004);\n"
    "        }\n"
    "\n"
    "        $className    = $json['class_name'];\n"
    "        $propertyName = $json['property_name'];\n"
    "\n"
    "        if (!class_exists($className)) {\n"
    "            return self::json(\"class[{$className}] not exists\", 4004);\n"
    "        }\n"
    "\n"
    "        $reflection = new \\ReflectionClass($className);\n"
    "        $value      = $reflection->getStaticPropertyValue($propertyName, []);\n"
    "\n"
    "        $result = [\n"
    "            'value' => var_export($value, true),\n"
    "        ];\n"
    "        return self::json($result);\n"
    "    }\n"
    "\n"
    "    private static function handlerMulti(Server $server, array $list)\n"
    "    {\n"
    "        $return_list = [];\n"
    "        foreach ($list as $key => $content) {\n"
    "            $path_array = swoole_string($content['path'])->trim('/')->split('/');\n"
    "            $cmd        = $path_array->get(1)->toString();\n"
    "\n"
    "            if ($path_array->count() == 2) {\n"
    "                $process = swoole_string('master');\n"
    "            } else {\n"
    "                $process = $path_array->get(2);\n"
    "            }\n"
    "\n"
    "            $data      = [];\n"
    "            $url_query = parse_url($process->toString(), PHP_URL_QUERY) ?? [];\n"
    "            if (!empty($url_query)) {\n"
    "                parse_str($url_query, $data);\n"
    "            }\n"
    "            $data = array_merge($data, $content['post'] ?? []);\n"
    "\n"
    "            if ($process->startsWith('master')) {\n"
    "                $process_type = SWOOLE_SERVER_COMMAND_MASTER;\n"
    "                $process_id   = 0;\n"
    "            } elseif ($process->startsWith('manager')) {\n"
    "                $process_type = SWOOLE_SERVER_COMMAND_MANAGER;\n"
    "                $process_id   = 0;\n"
    "            } elseif ($process->startsWith('all') || $process->startsWith('specific')) {\n"
    "                if (!in_array($process->toString(), self::$allList) && !$process->startsWith('specific')) {\n"
    "                    $return_list[$key] = json_decode('{}');\n"
    "                    continue;\n"
    "                }\n"
    "\n"
    "                $result = self::handlerGetAll($server, $process, $cmd, $data);\n"
    "\n"
    "                $return_list[$key] = ['code' => 0, 'data' => $result];\n"
    "                continue;\n"
    "            } else {\n"
    "                $array = $process->split('-');\n"
    "\n"
    "                if ($array->count() != 2 || !isset(self::$map[$array->get(0)->toString()])) {\n"
    "                    $return_list[$key] = json_decode('{}');\n"
    "                    continue;\n"
    "                }\n"
    "\n"
    "                $process_type = self::$map[$array->get(0)->toString()];\n"
    "                $process_id   = intval($array->get(1)->toString());\n"
    "            }\n"
    "\n"
    "            $return_list[$key] = $server->command($cmd, $process_id, intval($process_type), $data, true);\n"
    "        }\n"
    "\n"
    "        return $return_list;\n"
    "    }\n"
    "\n"
    "    private static function handlerGetAll(Server $server, StringObject $process, $cmd, $data, bool $json_decode = true)\n"
    "    {\n"
    "        if ($process->equals('all')) {\n"
    "            $result = self::handlerGetMaster($cmd, $data, $server, $json_decode) +\n"
    "                self::handlerGetManager($cmd, $data, $server, $json_decode) +\n"
    "                self::handlerGetAllWorker($cmd, $data, $server, $json_decode) +\n"
    "                self::handlerGetAllTaskWorker($cmd, $data, $server, $json_decode);\n"
    "        } elseif ($process->startsWith('all_reactor')) {\n"
    "            $result = self::handlerGetAllReactor($cmd, $data, $server, $json_decode);\n"
    "        } elseif ($process->equals('all_worker') || $process->equals('all_event_worker')) {\n"
    "            $result = self::handlerGetAllWorker($cmd, $data, $server, $json_decode);\n"
    "        } elseif ($process->startsWith('all_task')) {\n"
    "            $result = self::handlerGetAllTaskWorker($cmd, $data, $server, $json_decode);\n"
    "        } else {\n"
    "            // specific\n"
    "            $result = [];\n"
    "            if (!empty($data['workers']) && is_array($data['workers'])) {\n"
    "                foreach ($data['workers'] as $name) {\n"
    "                    $process = swoole_string($name);\n"
    "                    if ($process->startsWith('master')) {\n"
    "                        $result += self::handlerGetMaster($cmd, $data, $server, $json_decode);\n"
    "                    } elseif ($process->startsWith('manager')) {\n"
    "                        $result += self::handlerGetManager($cmd, $data, $server, $json_decode);\n"
    "                    } else {\n"
    "                        $array = $process->split('-');\n"
    "                        if ($array->count() != 2 || !isset(self::$map[$array->get(0)->toString()])) {\n"
    "                            $result[$name] = $json_decode ? json_decode('{}') : $json_decode;\n"
    "                        } else {\n"
    "                            $process_type  = self::$map[$array->get(0)->toString()];\n"
    "                            $process_id    = intval($array->get(1)->toString());\n"
    "                            $result[$name] = $server->command($cmd, $process_id, $process_type, $data, $json_decode);\n"
    "                        }\n"
    "                    }\n"
    "                }\n"
    "            }\n"
    "        }\n"
    "\n"
    "        return $result;\n"
    "    }\n"
    "\n"
    "    private static function handlerGetMaster($cmd, $data, Server $server, bool $json_decode = false)\n"
    "    {\n"
    "        $list['master'] = $server->command($cmd, 0, SWOOLE_SERVER_COMMAND_MASTER, $data, $json_decode);\n"
    "        return $list;\n"
    "    }\n"
    "\n"
    "    private static function handlerGetManager($cmd, $data, Server $server, bool $json_decode = false)\n"
    "    {\n"
    "        $list['manager'] = $server->command($cmd, 0, SWOOLE_SERVER_COMMAND_MANAGER, $data, $json_decode);\n"
    "        return $list;\n"
    "    }\n"
    "\n"
    "    private static function handlerGetAllReactor($cmd, $data, Server $server, bool $json_decode = false)\n"
    "    {\n"
    "        $list = [];\n"
    "        if ($server->mode === SWOOLE_BASE) {\n"
    "            return $list;\n"
    "        }\n"
    "        $process_type = SWOOLE_SERVER_COMMAND_REACTOR_THREAD;\n"
    "        if (empty($server->setting['reactor_num'])) {\n"
    "            $reactor_num = $server->setting['worker_num'];\n"
    "        } else {\n"
    "            $reactor_num = $server->setting['reactor_num'];\n"
    "        }\n"
    "        for ($process_id = 0; $process_id < $reactor_num; $process_id++) {\n"
    "            $list[\"reactor-{$process_id}\"] = $server->command($cmd, $process_id, $process_type, $data, $json_decode);\n"
    "        }\n"
    "        return $list;\n"
    "    }\n"
    "\n"
    "    private static function handlerGetAllWorker($cmd, $data, Server $server, bool $json_decode = false)\n"
    "    {\n"
    "        $process_type = SWOOLE_SERVER_COMMAND_EVENT_WORKER;\n"
    "        $worker_num   = $server->setting['worker_num'];\n"
    "        $list         = [];\n"
    "        for ($process_id = 0; $process_id < $worker_num; $process_id++) {\n"
    "            $list[\"worker-{$process_id}\"] = $server->command($cmd, $process_id, $process_type, $data, $json_decode);\n"
    "        }\n"
    "        return $list;\n"
    "    }\n"
    "\n"
    "    private static function handlerGetAllTaskWorker($cmd, $data, Server $server, bool $json_decode = false)\n"
    "    {\n"
    "        $process_type = SWOOLE_SERVER_COMMAND_TASK_WORKER;\n"
    "        $list         = [];\n"
    "        if (empty($server->setting['task_worker_num'])) {\n"
    "            return $list;\n"
    "        }\n"
    "        $task_worker_num = $server->setting['task_worker_num'];\n"
    "        for ($process_id = 0; $process_id < $task_worker_num; $process_id++) {\n"
    "            $list[\"task_worker-{$process_id}\"] = $server->command($cmd, $process_id, $process_type, $data, $json_decode);\n"
    "        }\n"
    "        return $list;\n"
    "    }\n"
    "\n"
    "    private static function getProcessCpuUsage($pid)\n"
    "    {\n"
    "        // TODO: Support other OS\n"
    "        if (PHP_OS_FAMILY !== 'Linux' || !file_exists(\"/proc/{$pid}/stat\")) {\n"
    "            return [0];\n"
    "        }\n"
    "\n"
    "        $statAll  = file_get_contents('/proc/stat');\n"
    "        $statProc = file_get_contents(\"/proc/{$pid}/stat\");\n"
    "\n"
    "        $dataAll = preg_split(\"/[ \\t]+/\", $statAll, 6);\n"
    "        assert($dataAll[0] === 'cpu', '/proc/stat malformed');\n"
    "        $dataProc = preg_split(\"/[ \\t]+/\", $statProc, 15);\n"
    "\n"
    "        if (isset($dataProc[13]) and isset($dataProc[14])) {\n"
    "            return [\n"
    "                (int) $dataAll[1] + (int) $dataAll[2] + (int) $dataAll[3] + (int) $dataAll[4],\n"
    "                (int) $dataProc[13] + (int) $dataProc[14],\n"
    "            ];\n"
    "        }\n"
    "        return [(int) $dataAll[1] + (int) $dataAll[2] + (int) $dataAll[3] + (int) $dataAll[4]];\n"
    "    }\n"
    "\n"
    "    private static function getProcessMemoryRealUsage($pid = 'self')\n"
    "    {\n"
    "        $status = self::getProcessStatus($pid);\n"
    "        if (!is_array($status) || !isset($status['VmRSS'])) {\n"
    "            return 0;\n"
    "        }\n"
    "        return intval($status['VmRSS']) * 1024;\n"
    "    }\n"
    "\n"
    "    private static function getProcessStatus($pid = 'self')\n"
    "    {\n"
    "        $array = [];\n"
    "        // TODO: Support other OS\n"
    "        if (PHP_OS_FAMILY !== 'Linux' || !file_exists(\"/proc/{$pid}/status\")) {\n"
    "            return $array;\n"
    "        }\n"
    "        $status = swoole_string(trim(file_get_contents(\"/proc/{$pid}/status\")));\n"
    "        $lines  = $status->split(\"\\n\");\n"
    "        foreach ($lines as $l) {\n"
    "            if (empty($l)) {\n"
    "                continue;\n"
    "            }\n"
    "            [$k, $v]   = swoole_string($l)->split(':');\n"
    "            $array[$k] = trim($v);\n"
    "        }\n"
    "        return $array;\n"
    "    }\n"
    "\n"
    "    private static function getArrayMemorySize(array $a): int\n"
    "    {\n"
    "        $size = self::SIZE_OF_ZVAL + self::SIZE_OF_ZEND_ARRAY;\n"
    "        foreach ($a as $k => $v) {\n"
    "            if (is_string($k)) {\n"
    "                $size += self::getStringMemorySize($k);\n"
    "            } else {\n"
    "                $size += self::SIZE_OF_ZVAL;\n"
    "            }\n"
    "            if (is_string($v)) {\n"
    "                $size += self::getStringMemorySize($v);\n"
    "            } elseif (is_array($v)) {\n"
    "                $size += self::getArrayMemorySize($v);\n"
    "            } else {\n"
    "                $size += self::SIZE_OF_ZVAL;\n"
    "            }\n"
    "        }\n"
    "        return $size;\n"
    "    }\n"
    "\n"
    "    private static function getStringMemorySize(string $s): int\n"
    "    {\n"
    "        return self::SIZE_OF_ZVAL + self::SIZE_OF_ZEND_STRING + strlen($s);\n"
    "    }\n"
    "\n"
    "    private static function getObjectMemorySize(object $o): int\n"
    "    {\n"
    "        $vars = get_object_vars($o);\n"
    "        $size = self::SIZE_OF_ZEND_OBJECT;\n"
    "\n"
    "        foreach ($vars as $v) {\n"
    "            if (is_array($v)) {\n"
    "                $size += self::getArrayMemorySize($v);\n"
    "            } elseif (is_string($v)) {\n"
    "                $size += self::getStringMemorySize($v);\n"
    "            } else {\n"
    "                $size += self::SIZE_OF_ZVAL;\n"
    "            }\n"
    "        }\n"
    "\n"
    "        return $size;\n"
    "    }\n"
    "\n"
    "    private static function haveMasterProcess(Server $server): bool\n"
    "    {\n"
    "        if ($server->mode === SWOOLE_BASE) {\n"
    "            return false;\n"
    "        }\n"
    "\n"
    "        return true;\n"
    "    }\n"
    "\n"
    "    private static function haveManagerProcess(Server $server): bool\n"
    "    {\n"
    "        if ($server->mode === SWOOLE_BASE && $server->getManagerPid() === 0) {\n"
    "            return false;\n"
    "        }\n"
    "\n"
    "        return true;\n"
    "    }\n"
    "\n"
    "    private static function json($data, $code = 0)\n"
    "    {\n"
    "        $result = json_encode(['code' => $code, 'data' => $data], JSON_INVALID_UTF8_IGNORE);\n"
    "        if (empty($result)) {\n"
    "            return json_encode([\n"
    "                'code' => 5010,\n"
    "                'data' => ['message' => json_last_error_msg(), 'code' => json_last_error()],\n"
    "            ]);\n"
    "        }\n"
    "        return $result;\n"
    "    }\n"
    "}\n";

static const char* swoole_library_source_core_server_helper =
    "\n"
    "/**\n"
    " * This file is part of Swoole.\n"
    " *\n"
    " * @link     https://www.swoole.com\n"
    " * @contact  team@swoole.com\n"
    " * @license  https://github.com/swoole/library/blob/master/LICENSE\n"
    " */\n"
    "\n"
    "declare(strict_types=1);\n"
    "\n"
    "namespace Swoole\\Server;\n"
    "\n"
    "use Swoole\\Constant;\n"
    "use Swoole\\Coroutine;\n"
    "use Swoole\\Server;\n"
    "use Swoole\\Timer;\n"
    "\n"
    "class Helper\n"
    "{\n"
    "    public const STATS_TIMER_INTERVAL_TIME = 1000;\n"
    "\n"
    "    public const GLOBAL_OPTIONS = [\n"
    "        'debug_mode'                   => true,\n"
    "        'trace_flags'                  => true,\n"
    "        'log_file'                     => true,\n"
    "        'log_level'                    => true,\n"
    "        'log_date_format'              => true,\n"
    "        'log_date_with_microseconds'   => true,\n"
    "        'log_rotation'                 => true,\n"
    "        'display_errors'               => true,\n"
    "        'dns_server'                   => true,\n"
    "        'socket_dns_timeout'           => true,\n"
    "        'socket_connect_timeout'       => true,\n"
    "        'socket_write_timeout'         => true,\n"
    "        'socket_send_timeout'          => true,\n"
    "        'socket_read_timeout'          => true,\n"
    "        'socket_recv_timeout'          => true,\n"
    "        'socket_buffer_size'           => true,\n"
    "        'socket_timeout'               => true,\n"
    "        'http2_header_table_size'      => true,\n"
    "        'http2_enable_push'            => true,\n"
    "        'http2_max_concurrent_streams' => true,\n"
    "        'http2_init_window_size'       => true,\n"
    "        'http2_max_frame_size'         => true,\n"
    "        'http2_max_header_list_size'   => true,\n"
    "    ];\n"
    "\n"
    "    public const SERVER_OPTIONS = [\n"
    "        'chroot'                      => true,\n"
    "        'user'                        => true,\n"
    "        'group'                       => true,\n"
    "        'daemonize'                   => true,\n"
    "        'pid_file'                    => true,\n"
    "        'reactor_num'                 => true,\n"
    "        'single_thread'               => true,\n"
    "        'worker_num'                  => true,\n"
    "        'max_wait_time'               => true,\n"
    "        'max_queued_bytes'            => true,\n"
    "        'max_concurrency'             => true,\n"
    "        'worker_max_concurrency'      => true,\n"
    "        'enable_coroutine'            => true,\n"
    "        'send_timeout'                => true,\n"
    "        'dispatch_mode'               => true,\n"
    "        'send_yield'                  => true,\n"
    "        'dispatch_func'               => true,\n"
    "        'discard_timeout_request'     => true,\n"
    "        'enable_unsafe_event'         => true,\n"
    "        'enable_delay_receive'        => true,\n"
    "        'enable_reuse_port'           => true,\n"
    "        'task_use_object'             => true,\n"
    "        'task_object'                 => true,\n"
    "        'event_object'                => true,\n"
    "        'task_enable_coroutine'       => true,\n"
    "        'task_worker_num'             => true,\n"
    "        'task_ipc_mode'               => true,\n"
    "        'task_tmpdir'                 => true,\n"
    "        'task_max_request'            => true,\n"
    "        'task_max_request_grace'      => true,\n"
    "        'max_connection'              => true,\n"
    "        'max_conn'                    => true,\n"
    "        'start_session_id'            => true,\n"
    "        'heartbeat_check_interval'    => true,\n"
    "        'heartbeat_idle_time'         => true,\n"
    "        'max_request'                 => true,\n"
    "        'max_request_grace'           => true,\n"
    "        'reload_async'                => true,\n"
    "        'open_cpu_affinity'           => true,\n"
    "        'cpu_affinity_ignore'         => true,\n"
    "        'http_parse_cookie'           => true,\n"
    "        'http_parse_post'             => true,\n"
    "        'http_parse_files'            => true,\n"
    "        'http_compression'            => true,\n"
    "        'http_compression_level'      => true,\n"
    "        'compression_level'           => true,\n"
    "        'http_gzip_level'             => true,\n"
    "        'http_compression_min_length' => true,\n"
    "        'compression_min_length'      => true,\n"
    "        'websocket_compression'       => true,\n"
    "        'upload_tmp_dir'              => true,\n"
    "        'upload_max_filesize'         => true,\n"
    "        'enable_static_handler'       => true,\n"
    "        'document_root'               => true,\n"
    "        'http_autoindex'              => true,\n"
    "        'http_index_files'            => true,\n"
    "        'http_compression_types'      => true,\n"
    "        'compression_types'           => true,\n"
    "        'static_handler_locations'    => true,\n"
    "        'input_buffer_size'           => true,\n"
    "        'buffer_input_size'           => true,\n"
    "        'output_buffer_size'          => true,\n"
    "        'buffer_output_size'          => true,\n"
    "        'message_queue_key'           => true,\n"
    "        'bootstrap'                   => true,\n"
    "        'init_arguments'              => true,\n"
    "        'url_rewrite_rules'           => true,\n"
    "    ];\n"
    "\n"
    "    public const PORT_OPTIONS = [\n"
    "        'ssl_cert_file'                  => true,\n"
    "        'ssl_key_file'                   => true,\n"
    "        'backlog'                        => true,\n"
    "        'socket_buffer_size'             => true,\n"
    "        'kernel_socket_recv_buffer_size' => true,\n"
    "        'kernel_socket_send_buffer_size' => true,\n"
    "        'heartbeat_idle_time'            => true,\n"
    "        'buffer_high_watermark'          => true,\n"
    "        'buffer_low_watermark'           => true,\n"
    "        'open_tcp_nodelay'               => true,\n"
    "        'tcp_defer_accept'               => true,\n"
    "        'open_tcp_keepalive'             => true,\n"
    "        'open_eof_check'                 => true,\n"
    "        'open_eof_split'                 => true,\n"
    "        'package_eof'                    => true,\n"
    "        'open_http_protocol'             => true,\n"
    "        'open_websocket_protocol'        => true,\n"
    "        'websocket_subprotocol'          => true,\n"
    "        'open_websocket_close_frame'     => true,\n"
    "        'open_websocket_ping_frame'      => true,\n"
    "        'open_websocket_pong_frame'      => true,\n"
    "        'open_http2_protocol'            => true,\n"
    "        'open_mqtt_protocol'             => true,\n"
    "        'open_redis_protocol'            => true,\n"
    "        'max_idle_time'                  => true,\n"
    "        'tcp_keepidle'                   => true,\n"
    "        'tcp_keepinterval'               => true,\n"
    "        'tcp_keepcount'                  => true,\n"
    "        'tcp_user_timeout'               => true,\n"
    "        'tcp_fastopen'                   => true,\n"
    "        'open_length_check'              => true,\n"
    "        'package_length_type'            => true,\n"
    "        'package_length_offset'          => true,\n"
    "        'package_body_offset'            => true,\n"
    "        'package_body_start'             => true,\n"
    "        'package_length_func'            => true,\n"
    "        'package_max_length'             => true,\n"
    "        'ssl_compress'                   => true,\n"
    "        'ssl_protocols'                  => true,\n"
    "        'ssl_verify_peer'                => true,\n"
    "        'ssl_allow_self_signed'          => true,\n"
    "        'ssl_client_cert_file'           => true,\n"
    "        'ssl_cafile'                     => true,\n"
    "        'ssl_capath'                     => true,\n"
    "        'ssl_verify_depth'               => true,\n"
    "        'ssl_prefer_server_ciphers'      => true,\n"
    "        'ssl_ciphers'                    => true,\n"
    "        'ssl_ecdh_curve'                 => true,\n"
    "        'ssl_dhparam'                    => true,\n"
    "        'ssl_sni_certs'                  => true,\n"
    "    ];\n"
    "\n"
    "    public const AIO_OPTIONS = [\n"
    "        'aio_core_worker_num'    => true,\n"
    "        'aio_worker_num'         => true,\n"
    "        'aio_max_wait_time'      => true,\n"
    "        'aio_max_idle_time'      => true,\n"
    "        'iouring_entries'        => true,\n"
    "        'iouring_workers'        => true,\n"
    "        'iouring_flag'           => true,\n"
    "        'enable_signalfd'        => true,\n"
    "        'wait_signal'            => true,\n"
    "        'dns_cache_refresh_time' => true,\n"
    "        'thread_num'             => true,\n"
    "        'min_thread_num'         => true,\n"
    "        'max_thread_num'         => true,\n"
    "        'socket_dontwait'        => true,\n"
    "        'dns_lookup_random'      => true,\n"
    "        'use_async_resolver'     => true,\n"
    "        'enable_coroutine'       => true,\n"
    "    ];\n"
    "\n"
    "    public const COROUTINE_OPTIONS = [\n"
    "        'max_coro_num'                => true,\n"
    "        'max_coroutine'               => true,\n"
    "        'enable_deadlock_check'       => true,\n"
    "        'hook_flags'                  => true,\n"
    "        'enable_preemptive_scheduler' => true,\n"
    "        'c_stack_size'                => true,\n"
    "        'stack_size'                  => true,\n"
    "        'name_resolver'               => true,\n"
    "        'dns_cache_expire'            => true,\n"
    "        'dns_cache_capacity'          => true,\n"
    "    ];\n"
    "\n"
    "    public const HELPER_OPTIONS = [\n"
    "        'stats_file'           => true,\n"
    "        'stats_timer_interval' => true,\n"
    "        'admin_server'         => true,\n"
    "    ];\n"
    "\n"
    "    public static function checkOptions(array $input_options): void\n"
    "    {\n"
    "        $const_options = self::GLOBAL_OPTIONS + self::SERVER_OPTIONS + self::PORT_OPTIONS\n"
    "            + self::AIO_OPTIONS + self::COROUTINE_OPTIONS + self::HELPER_OPTIONS;\n"
    "\n"
    "        foreach ($input_options as $k => $v) {\n"
    "            if (!array_key_exists(strtolower($k), $const_options)) {\n"
    "                // TODO throw exception\n"
    "                trigger_error(\"unsupported option [{$k}]\", E_USER_WARNING);\n"
    "                debug_print_backtrace(DEBUG_BACKTRACE_IGNORE_ARGS);\n"
    "            }\n"
    "        }\n"
    "    }\n"
    "\n"
    "    public static function onBeforeStart(Server $server): void\n"
    "    {\n"
    "        if (!empty($server->setting['admin_server'])) {\n"
    "            Admin::init($server);\n"
    "        }\n"
    "    }\n"
    "\n"
    "    public static function onBeforeShutdown(Server $server): void\n"
    "    {\n"
    "        if (isset($server->admin_server)) { // @phpstan-ignore isset.property\n"
    "            $server->admin_server->shutdown();\n"
    "            $server->admin_server = null; // @phpstan-ignore assign.propertyType\n"
    "        }\n"
    "    }\n"
    "\n"
    "    public static function onWorkerStart(Server $server, int $workerId): void\n"
    "    {\n"
    "        if (!empty($server->setting['stats_file']) and $workerId == 0) {\n"
    "            $interval_ms = empty($server->setting['stats_timer_interval']) ? self::STATS_TIMER_INTERVAL_TIME : intval($server->setting['stats_timer_interval']);\n"
    "\n"
    "            $server->stats_timer = Timer::tick($interval_ms, function () use ($server) {\n"
    "                $stats      = $server->stats();\n"
    "                $stats_file = swoole_string($server->setting['stats_file']);\n"
    "                if ($stats_file->endsWith('.json')) {\n"
    "                    $out = json_encode($stats, JSON_THROW_ON_ERROR);\n"
    "                } elseif ($stats_file->endsWith('.php')) {\n"
    "                    $out = \"<?php\\nreturn \" . var_export($stats, true) . \";\\n\";\n"
    "                } else {\n"
    "                    $lines = [];\n"
    "                    foreach ($stats as $k => $v) {\n"
    "                        $lines[] = \"{$k}: {$v}\";\n"
    "                    }\n"
    "                    $out = implode(\"\\n\", $lines);\n"
    "                }\n"
    "                file_put_contents($server->setting['stats_file'], $out);\n"
    "            });\n"
    "        }\n"
    "    }\n"
    "\n"
    "    public static function onWorkerExit(Server $server, int $workerId): void\n"
    "    {\n"
    "        if ($server->stats_timer) {\n"
    "            Timer::clear($server->stats_timer);\n"
    "            $server->stats_timer = null;\n"
    "        }\n"
    "    }\n"
    "\n"
    "    public static function onWorkerStop(Server $server, int $workerId)\n"
    "    {\n"
    "    }\n"
    "\n"
    "    public static function onStart(Server $server): void\n"
    "    {\n"
    "        if (!empty($server->setting[Constant::OPTION_ADMIN_SERVER])) {\n"
    "            Coroutine::create(function () use ($server): void {\n"
    "                Admin::start($server);\n"
    "            });\n"
    "        }\n"
    "    }\n"
    "\n"
    "    public static function onShutdown(Server $server)\n"
    "    {\n"
    "    }\n"
    "\n"
    "    public static function onBeforeReload(Server $server)\n"
    "    {\n"
    "    }\n"
    "\n"
    "    public static function onAfterReload(Server $server)\n"
    "    {\n"
    "    }\n"
    "\n"
    "    public static function onManagerStart(Server $server)\n"
    "    {\n"
    "    }\n"
    "\n"
    "    public static function onManagerStop(Server $server)\n"
    "    {\n"
    "    }\n"
    "\n"
    "    public static function onWorkerError(Server $server)\n"
    "    {\n"
    "    }\n"
    "}\n";

static const char* swoole_library_source_core_name_resolver =
    "\n"
    "/**\n"
    " * This file is part of Swoole.\n"
    " *\n"
    " * @link     https://www.swoole.com\n"
    " * @contact  team@swoole.com\n"
    " * @license  https://github.com/swoole/library/blob/master/LICENSE\n"
    " */\n"
    "\n"
    "declare(strict_types=1);\n"
    "\n"
    "namespace Swoole;\n"
    "\n"
    "use Swoole\\Coroutine\\Http\\ClientProxy;\n"
    "use Swoole\\Http\\Status;\n"
    "use Swoole\\NameResolver\\Cluster;\n"
    "use Swoole\\NameResolver\\Exception;\n"
    "\n"
    "abstract class NameResolver\n"
    "{\n"
    "    protected $baseUrl;\n"
    "\n"
    "    protected $info;\n"
    "\n"
    "    private $filter_fn;\n"
    "\n"
    "    public function __construct($url, protected $prefix = 'swoole_service_')\n"
    "    {\n"
    "        $this->checkServerUrl($url);\n"
    "    }\n"
    "\n"
    "    abstract public function join(string $name, string $ip, int $port, array $options = []): bool;\n"
    "\n"
    "    abstract public function leave(string $name, string $ip, int $port): bool;\n"
    "\n"
    "    abstract public function getCluster(string $name): ?Cluster;\n"
    "\n"
    "    public function withFilter(callable $fn): self\n"
    "    {\n"
    "        $this->filter_fn = $fn;\n"
    "        return $this;\n"
    "    }\n"
    "\n"
    "    public function getFilter()\n"
    "    {\n"
    "        return $this->filter_fn;\n"
    "    }\n"
    "\n"
    "    public function hasFilter(): bool\n"
    "    {\n"
    "        return !empty($this->filter_fn);\n"
    "    }\n"
    "\n"
    "    /**\n"
    "     * return string: final result, non-empty string must be a valid IP address,\n"
    "     * and an empty string indicates name lookup failed, and lookup operation will not continue.\n"
    "     * return Cluster: has multiple nodes and failover is possible\n"
    "     * return false or null: try another name resolver\n"
    "     * @return Cluster|false|string|null\n"
    "     */\n"
    "    public function lookup(string $name)\n"
    "    {\n"
    "        if ($this->hasFilter() and ($this->getFilter())($name) !== true) {\n"
    "            return null;\n"
    "        }\n"
    "        $cluster = $this->getCluster($name);\n"
    "        // lookup failed, terminate execution\n"
    "        if ($cluster == null) {\n"
    "            return '';\n"
    "        }\n"
    "        // only one node, cannot retry\n"
    "        if ($cluster->count() == 1) {\n"
    "            return $cluster->pop();\n"
    "        }\n"
    "        return $cluster;\n"
    "    }\n"
    "\n"
    "    /**\n"
    "     * !!! The host MUST BE IP ADDRESS\n"
    "     */\n"
    "    protected function checkServerUrl(string $url)\n"
    "    {\n"
    "        $info = parse_url($url);\n"
    "        if (empty($info['scheme']) or empty($info['host'])) {\n"
    "            throw new \\RuntimeException(\"invalid url parameter '{$url}'\");\n"
    "        }\n"
    "        if (!filter_var($info['host'], FILTER_VALIDATE_IP)) {\n"
    "            $info['ip'] = gethostbyname($info['host']);\n"
    "            if (!filter_var($info['ip'], FILTER_VALIDATE_IP)) {\n"
    "                throw new \\RuntimeException(\"Failed to resolve host '{$info['host']}'\");\n"
    "            }\n"
    "        } else {\n"
    "            $info['ip'] = $info['host'];\n"
    "        }\n"
    "        $baseUrl = $info['scheme'] . '://' . $info['ip'];\n"
    "        if (!empty($info['port'])) {\n"
    "            $baseUrl .= \":{$info['port']}\";\n"
    "        }\n"
    "        if (!empty($info['path'])) {\n"
    "            $baseUrl .= rtrim($info['path'], '/');\n"
    "        }\n"
    "        $this->baseUrl = $baseUrl;\n"
    "        $this->info    = $info;\n"
    "    }\n"
    "\n"
    "    protected function checkResponse(ClientProxy $response): bool\n"
    "    {\n"
    "        if ($response->getStatusCode() === Status::OK) {\n"
    "            return true;\n"
    "        }\n"
    "\n"
    "        throw new Exception('Http Body: ' . $response->getBody(), $response->getStatusCode());\n"
    "    }\n"
    "}\n";

static const char* swoole_library_source_core_name_resolver_exception =
    "\n"
    "/**\n"
    " * This file is part of Swoole.\n"
    " *\n"
    " * @link     https://www.swoole.com\n"
    " * @contact  team@swoole.com\n"
    " * @license  https://github.com/swoole/library/blob/master/LICENSE\n"
    " */\n"
    "\n"
    "declare(strict_types=1);\n"
    "\n"
    "/**\n"
    " * This file is part of Swoole.\n"
    " *\n"
    " * @see     https://www.swoole.com\n"
    " * @contact  team@swoole.com\n"
    " * @license  https://github.com/swoole/library/blob/master/LICENSE\n"
    " */\n"
    "\n"
    "namespace Swoole\\NameResolver;\n"
    "\n"
    "class Exception extends \\RuntimeException\n"
    "{\n"
    "}\n";

static const char* swoole_library_source_core_name_resolver_cluster =
    "\n"
    "/**\n"
    " * This file is part of Swoole.\n"
    " *\n"
    " * @link     https://www.swoole.com\n"
    " * @contact  team@swoole.com\n"
    " * @license  https://github.com/swoole/library/blob/master/LICENSE\n"
    " */\n"
    "\n"
    "declare(strict_types=1);\n"
    "\n"
    "namespace Swoole\\NameResolver;\n"
    "\n"
    "use Swoole\\Exception;\n"
    "\n"
    "class Cluster\n"
    "{\n"
    "    private array $nodes = [];\n"
    "\n"
    "    /**\n"
    "     * @throws Exception\n"
    "     */\n"
    "    public function add(string $host, int $port, int $weight = 100): void\n"
    "    {\n"
    "        if (!filter_var($host, FILTER_VALIDATE_IP)) {\n"
    "            throw new Exception(\"Bad IP Address [{$host}]\");\n"
    "        }\n"
    "        if ($port < 0 or $port > 65535) {\n"
    "            throw new Exception(\"Bad Port [{$port}]\");\n"
    "        }\n"
    "        if ($weight < 0 or $weight > 100) {\n"
    "            throw new Exception(\"Bad Weight [{$weight}]\");\n"
    "        }\n"
    "        $this->nodes[] = ['host' => $host, 'port' => $port, 'weight' => $weight];\n"
    "    }\n"
    "\n"
    "    /**\n"
    "     * @return false|string\n"
    "     */\n"
    "    public function pop()\n"
    "    {\n"
    "        if (empty($this->nodes)) {\n"
    "            return false;\n"
    "        }\n"
    "        $index = array_rand($this->nodes, 1);\n"
    "        $node  = $this->nodes[$index];\n"
    "        unset($this->nodes[$index]);\n"
    "        return $node;\n"
    "    }\n"
    "\n"
    "    public function count(): int\n"
    "    {\n"
    "        return count($this->nodes);\n"
    "    }\n"
    "}\n";

static const char* swoole_library_source_core_name_resolver_redis =
    "\n"
    "/**\n"
    " * This file is part of Swoole.\n"
    " *\n"
    " * @link     https://www.swoole.com\n"
    " * @contact  team@swoole.com\n"
    " * @license  https://github.com/swoole/library/blob/master/LICENSE\n"
    " */\n"
    "\n"
    "declare(strict_types=1);\n"
    "/**\n"
    " * This file is part of Swoole.\n"
    " *\n"
    " * @see     https://www.swoole.com\n"
    " * @contact  team@swoole.com\n"
    " * @license  https://github.com/swoole/library/blob/master/LICENSE\n"
    " */\n"
    "\n"
    "namespace Swoole\\NameResolver;\n"
    "\n"
    "use Swoole\\NameResolver;\n"
    "\n"
    "class Redis extends NameResolver\n"
    "{\n"
    "    private $serverHost;\n"
    "\n"
    "    private $serverPort;\n"
    "\n"
    "    public function __construct($url, $prefix = 'swoole:service:')\n"
    "    {\n"
    "        parent::__construct($url, $prefix);\n"
    "        $this->serverHost = $this->info['ip'];\n"
    "        $this->serverPort = $this->info['port'] ?? 6379;\n"
    "    }\n"
    "\n"
    "    public function join(string $name, string $ip, int $port, array $options = []): bool\n"
    "    {\n"
    "        if (($redis = $this->connect()) === false) {\n"
    "            return false;\n"
    "        }\n"
    "        if ($redis->sAdd($this->prefix . $name, $ip . ':' . $port) === false) {\n"
    "            return false;\n"
    "        }\n"
    "        return true;\n"
    "    }\n"
    "\n"
    "    public function leave(string $name, string $ip, int $port): bool\n"
    "    {\n"
    "        if (($redis = $this->connect()) === false) {\n"
    "            return false;\n"
    "        }\n"
    "        if ($redis->sRem($this->prefix . $name, $ip . ':' . $port) === false) {\n"
    "            return false;\n"
    "        }\n"
    "        return true;\n"
    "    }\n"
    "\n"
    "    public function getCluster(string $name): ?Cluster\n"
    "    {\n"
    "        if (($redis = $this->connect()) === false) {\n"
    "            return null;\n"
    "        }\n"
    "        $members = $redis->sMembers($this->prefix . $name);\n"
    "        if (empty($members)) {\n"
    "            return null;\n"
    "        }\n"
    "        $cluster = new Cluster();\n"
    "        foreach ($members as $m) {\n"
    "            [$host, $port] = explode(':', $m);\n"
    "            $cluster->add($host, intval($port));\n"
    "        }\n"
    "        return $cluster;\n"
    "    }\n"
    "\n"
    "    protected function connect()\n"
    "    {\n"
    "        $redis = new \\Redis();\n"
    "        if ($redis->connect($this->serverHost, $this->serverPort) === false) {\n"
    "            return false;\n"
    "        }\n"
    "        return $redis;\n"
    "    }\n"
    "}\n";

static const char* swoole_library_source_core_name_resolver_nacos =
    "\n"
    "/**\n"
    " * This file is part of Swoole.\n"
    " *\n"
    " * @link     https://www.swoole.com\n"
    " * @contact  team@swoole.com\n"
    " * @license  https://github.com/swoole/library/blob/master/LICENSE\n"
    " */\n"
    "\n"
    "declare(strict_types=1);\n"
    "/**\n"
    " * This file is part of Swoole.\n"
    " *\n"
    " * @see     https://www.swoole.com\n"
    " * @contact  team@swoole.com\n"
    " * @license  https://github.com/swoole/library/blob/master/LICENSE\n"
    " */\n"
    "\n"
    "namespace Swoole\\NameResolver;\n"
    "\n"
    "use Swoole\\Coroutine;\n"
    "use Swoole\\NameResolver;\n"
    "\n"
    "class Nacos extends NameResolver\n"
    "{\n"
    "    /**\n"
    "     * @throws Coroutine\\Http\\Client\\Exception|Exception\n"
    "     */\n"
    "    public function join(string $name, string $ip, int $port, array $options = []): bool\n"
    "    {\n"
    "        $params['port']        = $port;\n"
    "        $params['ip']          = $ip;\n"
    "        $params['healthy']     = 'true';\n"
    "        $params['weight']      = $options['weight'] ?? 100;\n"
    "        $params['encoding']    = $options['encoding'] ?? 'utf-8';\n"
    "        $params['namespaceId'] = $options['namespaceId'] ?? 'public';\n"
    "        $params['serviceName'] = $this->prefix . $name;\n"
    "\n"
    "        $url = $this->baseUrl . '/nacos/v1/ns/instance?' . http_build_query($params);\n"
    "        $r   = Coroutine\\Http\\post($url, []);\n"
    "        return $this->checkResponse($r);\n"
    "    }\n"
    "\n"
    "    /**\n"
    "     * @throws Coroutine\\Http\\Client\\Exception|Exception\n"
    "     */\n"
    "    public function leave(string $name, string $ip, int $port): bool\n"
    "    {\n"
    "        $params['port']        = $port;\n"
    "        $params['ip']          = $ip;\n"
    "        $params['serviceName'] = $this->prefix . $name;\n"
    "\n"
    "        $url = $this->baseUrl . '/nacos/v1/ns/instance?' . http_build_query($params);\n"
    "        $r   = Coroutine\\Http\\request($this->baseUrl . '/nacos/v1/ns/instance?' . http_build_query($params), 'DELETE');\n"
    "        return $this->checkResponse($r);\n"
    "    }\n"
    "\n"
    "    /**\n"
    "     * @throws Coroutine\\Http\\Client\\Exception|Exception|\\Swoole\\Exception\n"
    "     */\n"
    "    public function getCluster(string $name): ?Cluster\n"
    "    {\n"
    "        $params['serviceName'] = $this->prefix . $name;\n"
    "\n"
    "        $url = $this->baseUrl . '/nacos/v1/ns/instance/list?' . http_build_query($params);\n"
    "        $r   = Coroutine\\Http\\get($url);\n"
    "        if (!$this->checkResponse($r)) {\n"
    "            return null;\n"
    "        }\n"
    "        $result = json_decode($r->getBody(), null, 512, JSON_THROW_ON_ERROR);\n"
    "        if (empty($result)) {\n"
    "            return null;\n"
    "        }\n"
    "        $cluster = new Cluster();\n"
    "        foreach ($result->hosts as $node) {\n"
    "            $cluster->add($node->ip, $node->port, $node->weight);\n"
    "        }\n"
    "        return $cluster;\n"
    "    }\n"
    "}\n";

static const char* swoole_library_source_core_name_resolver_consul =
    "\n"
    "/**\n"
    " * This file is part of Swoole.\n"
    " *\n"
    " * @link     https://www.swoole.com\n"
    " * @contact  team@swoole.com\n"
    " * @license  https://github.com/swoole/library/blob/master/LICENSE\n"
    " */\n"
    "\n"
    "declare(strict_types=1);\n"
    "/**\n"
    " * This file is part of Swoole.\n"
    " *\n"
    " * @see     https://www.swoole.com\n"
    " * @contact  team@swoole.com\n"
    " * @license  https://github.com/swoole/library/blob/master/LICENSE\n"
    " */\n"
    "\n"
    "namespace Swoole\\NameResolver;\n"
    "\n"
    "use Swoole\\NameResolver;\n"
    "\n"
    "use function Swoole\\Coroutine\\Http\\get;\n"
    "use function Swoole\\Coroutine\\Http\\request;\n"
    "\n"
    "class Consul extends NameResolver\n"
    "{\n"
    "    public function join(string $name, string $ip, int $port, array $options = []): bool\n"
    "    {\n"
    "        $weight = $options['weight'] ?? 100;\n"
    "        $data   = [\n"
    "            'ID'                => $this->getServiceId($name, $ip, $port),\n"
    "            'Name'              => $this->prefix . $name,\n"
    "            'Address'           => $ip,\n"
    "            'Port'              => $port,\n"
    "            'EnableTagOverride' => false,\n"
    "            'Weights'           => [\n"
    "                'Passing' => $weight,\n"
    "                'Warning' => 1,\n"
    "            ],\n"
    "        ];\n"
    "        $url = $this->baseUrl . '/v1/agent/service/register';\n"
    "        $r   = request($url, 'PUT', json_encode($data, JSON_THROW_ON_ERROR));\n"
    "        return $this->checkResponse($r);\n"
    "    }\n"
    "\n"
    "    public function leave(string $name, string $ip, int $port): bool\n"
    "    {\n"
    "        $url = $this->baseUrl . '/v1/agent/service/deregister/' . $this->getServiceId(\n"
    "            $name,\n"
    "            $ip,\n"
    "            $port\n"
    "        );\n"
    "        $r = request($url, 'PUT');\n"
    "        return $this->checkResponse($r);\n"
    "    }\n"
    "\n"
    "    public function enableMaintenanceMode(string $name, string $ip, int $port): bool\n"
    "    {\n"
    "        $url = $this->baseUrl . '/v1/agent/service/maintenance/' . $this->getServiceId(\n"
    "            $name,\n"
    "            $ip,\n"
    "            $port\n"
    "        );\n"
    "        $r = request($url, 'PUT');\n"
    "        return $this->checkResponse($r);\n"
    "    }\n"
    "\n"
    "    public function getCluster(string $name): ?Cluster\n"
    "    {\n"
    "        $url = $this->baseUrl . '/v1/catalog/service/' . $this->prefix . $name;\n"
    "        $r   = get($url);\n"
    "        if (!$this->checkResponse($r)) {\n"
    "            return null;\n"
    "        }\n"
    "        $list = json_decode($r->getBody(), null, 512, JSON_THROW_ON_ERROR);\n"
    "        if (empty($list)) {\n"
    "            return null;\n"
    "        }\n"
    "        $cluster = new Cluster();\n"
    "        foreach ($list as $li) {\n"
    "            $cluster->add($li->ServiceAddress, $li->ServicePort, $li->ServiceWeights->Passing);\n"
    "        }\n"
    "        return $cluster;\n"
    "    }\n"
    "\n"
    "    private function getServiceId(string $name, string $ip, int $port): string\n"
    "    {\n"
    "        return $this->prefix . $name . \"_{$ip}:{$port}\";\n"
    "    }\n"
    "}\n";

static const char* swoole_library_source_core_thread_pool =
    "\n"
    "/**\n"
    " * This file is part of Swoole.\n"
    " *\n"
    " * @link     https://www.swoole.com\n"
    " * @contact  team@swoole.com\n"
    " * @license  https://github.com/swoole/library/blob/master/LICENSE\n"
    " */\n"
    "\n"
    "declare(strict_types=1);\n"
    "\n"
    "namespace Swoole\\Thread;\n"
    "\n"
    "use PhpParser\\Error;\n"
    "use PhpParser\\ParserFactory;\n"
    "use Swoole\\Thread;\n"
    "\n"
    "/**\n"
    " * @since 6.0.0-beta\n"
    " */\n"
    "class Pool\n"
    "{\n"
    "    private array $threads = [];\n"
    "\n"
    "    private string $autoloader = '';\n"
    "\n"
    "    private string $classDefinitionFile = '';\n"
    "\n"
    "    private string $runnableClass = '';\n"
    "\n"
    "    private int $threadNum = 0;\n"
    "\n"
    "    private string $proxyFile;\n"
    "\n"
    "    private array $arguments = [];\n"
    "\n"
    "    private object $running;\n"
    "\n"
    "    private object $queue;\n"
    "\n"
    "    private array $indexes = [];\n"
    "\n"
    "    public function __construct(string $runnableClass, int $threadNum)\n"
    "    {\n"
    "        if ($threadNum <= 0) {\n"
    "            throw new \\Exception('threadNum must be greater than 0');\n"
    "        }\n"
    "        $this->runnableClass = $runnableClass;\n"
    "        $this->threadNum     = $threadNum;\n"
    "    }\n"
    "\n"
    "    public function withArguments(...$arguments): static\n"
    "    {\n"
    "        $this->arguments = $arguments;\n"
    "        return $this;\n"
    "    }\n"
    "\n"
    "    public function withAutoloader(string $autoloader): static\n"
    "    {\n"
    "        $this->autoloader = $autoloader;\n"
    "        return $this;\n"
    "    }\n"
    "\n"
    "    public function withClassDefinitionFile(string $classDefinitionFile): static\n"
    "    {\n"
    "        $this->classDefinitionFile = $classDefinitionFile;\n"
    "        return $this;\n"
    "    }\n"
    "\n"
    "    /**\n"
    "     * @throws \\ReflectionException\n"
    "     */\n"
    "    public function start(): void\n"
    "    {\n"
    "        if (empty($this->classDefinitionFile) and class_exists($this->runnableClass, false)) {\n"
    "            $file = (new \\ReflectionClass($this->runnableClass))->getFileName();\n"
    "            if (!$this->isValidPhpFile($file)) {\n"
    "                throw new \\Exception('class definition file must not contain any expressions.');\n"
    "            }\n"
    "            $this->classDefinitionFile = $file;\n"
    "        } elseif ($this->classDefinitionFile) {\n"
    "            require_once $this->classDefinitionFile;\n"
    "        }\n"
    "\n"
    "        if (!class_exists($this->runnableClass)) {\n"
    "            throw new \\Exception(\"class `{$this->runnableClass}` not found\");\n"
    "        }\n"
    "\n"
    "        if (!is_subclass_of($this->runnableClass, Runnable::class)) {\n"
    "            throw new \\Exception(\"class `{$this->runnableClass}` must implements Thread\\\\Runnable\");\n"
    "        }\n"
    "\n"
    "        if (empty($this->autoloader)) {\n"
    "            $include_files = get_included_files();\n"
    "            foreach ($include_files as $file) {\n"
    "                if (str_ends_with($file, 'vendor/autoload.php')) {\n"
    "                    $this->autoloader = $file;\n"
    "                    break;\n"
    "                }\n"
    "            }\n"
    "        }\n"
    "\n"
    "        if ($this->autoloader) {\n"
    "            $this->proxyFile = dirname($this->autoloader) . '/thread_runner.php';\n"
    "        } else {\n"
    "            $this->proxyFile = dirname($this->classDefinitionFile) . '/thread_runner.php';\n"
    "        }\n"
    "\n"
    "        if (!is_file($this->proxyFile)) {\n"
    "            $script = '<?php' . PHP_EOL;\n"
    "            $script .= '$arguments = Swoole\\Thread::getArguments();' . PHP_EOL;\n"
    "            $script .= '$threadId = Swoole\\Thread::getId();' . PHP_EOL;\n"
    "            $script .= '$autoloader = $arguments[0];' . PHP_EOL;\n"
    "            $script .= '$runnableClass = $arguments[1];' . PHP_EOL;\n"
    "            $script .= '$queue = $arguments[2];' . PHP_EOL;\n"
    "            $script .= '$classDefinitionFile = $arguments[3];' . PHP_EOL;\n"
    "            $script .= '$running = $arguments[4];' . PHP_EOL;\n"
    "            $script .= '$index = $arguments[5];' . PHP_EOL;\n"
    "            $script .= '$threadArguments = array_slice($arguments, 6);' . PHP_EOL;\n"
    "            $script .= 'if ($autoloader) require_once $autoloader;' . PHP_EOL;\n"
    "            $script .= 'if ($classDefinitionFile) require_once $classDefinitionFile;' . PHP_EOL;\n"
    "            $script .= '$runnable = new $runnableClass($running, $index);' . PHP_EOL;\n"
    "            $script .= 'try { $runnable->run($threadArguments); }' . PHP_EOL;\n"
    "            $script .= 'finally { $queue->push($threadId, Swoole\\Thread\\Queue::NOTIFY_ONE); }' . PHP_EOL;\n"
    "            $script .= PHP_EOL;\n"
    "            file_put_contents($this->proxyFile, $script);\n"
    "        }\n"
    "\n"
    "        $this->queue   = new Queue();\n"
    "        $this->running = new Atomic(1);\n"
    "\n"
    "        for ($index = 0; $index < $this->threadNum; $index++) {\n"
    "            $this->createThread($index);\n"
    "        }\n"
    "\n"
    "        while ($this->running->get()) {\n"
    "            $threadId = $this->queue->pop(-1);\n"
    "            $thread   = $this->threads[$threadId];\n"
    "            $index    = $this->indexes[$threadId];\n"
    "            $thread->join();\n"
    "            unset($this->threads[$threadId], $this->indexes[$threadId]);\n"
    "\n"
    "            $this->createThread($index);\n"
    "        }\n"
    "\n"
    "        foreach ($this->threads as $thread) {\n"
    "            $thread->join();\n"
    "        }\n"
    "    }\n"
    "\n"
    "    public function shutdown(): void\n"
    "    {\n"
    "        $this->running->set(0);\n"
    "    }\n"
    "\n"
    "    protected function isValidPhpFile($filePath): bool\n"
    "    {\n"
    "        $allowedNodeTypes = [\n"
    "            \\PhpParser\\Node\\Stmt\\Class_::class,\n"
    "            \\PhpParser\\Node\\Stmt\\Const_::class,\n"
    "            \\PhpParser\\Node\\Stmt\\Use_::class,\n"
    "            \\PhpParser\\Node\\Stmt\\Namespace_::class,\n"
    "            \\PhpParser\\Node\\Stmt\\Declare_::class,\n"
    "        ];\n"
    "\n"
    "        $parser = (new ParserFactory())->createForNewestSupportedVersion();\n"
    "        try {\n"
    "            $code     = file_get_contents($filePath);\n"
    "            $stmts    = $parser->parse($code);\n"
    "            $skipLine = -1;\n"
    "            foreach ($stmts as $stmt) {\n"
    "                $isAllowed = false;\n"
    "                foreach ($allowedNodeTypes as $allowedNodeType) {\n"
    "                    if ($stmt instanceof $allowedNodeType) {\n"
    "                        $isAllowed = true;\n"
    "                        break;\n"
    "                    }\n"
    "                }\n"
    "                if (!$isAllowed) {\n"
    "                    if ($stmt->getLine() == $skipLine) {\n"
    "                        continue;\n"
    "                    }\n"
    "                    return false;\n"
    "                }\n"
    "            }\n"
    "        } catch (Error $error) {\n"
    "            return false;\n"
    "        }\n"
    "        return true;\n"
    "    }\n"
    "\n"
    "    protected function createThread($index): void\n"
    "    {\n"
    "        $thread = new Thread($this->proxyFile,\n"
    "            $this->autoloader,\n"
    "            $this->runnableClass,\n"
    "            $this->queue,\n"
    "            $this->classDefinitionFile,\n"
    "            $this->running,\n"
    "            $index,\n"
    "            ...$this->arguments\n"
    "        );\n"
    "        $this->indexes[$thread->id] = $index;\n"
    "        $this->threads[$thread->id] = $thread;\n"
    "    }\n"
    "}\n";

static const char* swoole_library_source_core_thread_runnable =
    "\n"
    "/**\n"
    " * This file is part of Swoole.\n"
    " *\n"
    " * @link     https://www.swoole.com\n"
    " * @contact  team@swoole.com\n"
    " * @license  https://github.com/swoole/library/blob/master/LICENSE\n"
    " */\n"
    "\n"
    "declare(strict_types=1);\n"
    "\n"
    "namespace Swoole\\Thread;\n"
    "\n"
    "/**\n"
    " * @since 6.0.0-beta\n"
    " */\n"
    "abstract class Runnable\n"
    "{\n"
    "    protected Atomic $running;\n"
    "\n"
    "    protected int $id;\n"
    "\n"
    "    public function __construct($running, $index)\n"
    "    {\n"
    "        $this->running = $running;\n"
    "        $this->id      = $index;\n"
    "    }\n"
    "\n"
    "    abstract public function run(array $args): void;\n"
    "\n"
    "    protected function isRunning(): bool\n"
    "    {\n"
    "        return $this->running->get() === 1;\n"
    "    }\n"
    "\n"
    "    protected function shutdown(): void\n"
    "    {\n"
    "        $this->running->set(0);\n"
    "    }\n"
    "}\n";

static const char* swoole_library_source_core_coroutine_functions =
    "\n"
    "/**\n"
    " * This file is part of Swoole.\n"
    " *\n"
    " * @link     https://www.swoole.com\n"
    " * @contact  team@swoole.com\n"
    " * @license  https://github.com/swoole/library/blob/master/LICENSE\n"
    " */\n"
    "\n"
    "declare(strict_types=1);\n"
    "\n"
    "namespace Swoole\\Coroutine;\n"
    "\n"
    "use Swoole\\Coroutine;\n"
    "\n"
    "function run(callable $fn, ...$args)\n"
    "{\n"
    "    $s       = new Scheduler();\n"
    "    $options = Coroutine::getOptions();\n"
    "    if (!isset($options['hook_flags'])) {\n"
    "        $s->set(['hook_flags' => SWOOLE_HOOK_ALL]);\n"
    "    }\n"
    "    $s->add($fn, ...$args);\n"
    "    return $s->start();\n"
    "}\n"
    "\n"
    "function go(callable $fn, ...$args)\n"
    "{\n"
    "    return Coroutine::create($fn, ...$args);\n"
    "}\n"
    "\n"
    "function defer(callable $fn)\n"
    "{\n"
    "    Coroutine::defer($fn);\n"
    "}\n"
    "\n"
    "function batch(array $tasks, float $timeout = -1): array\n"
    "{\n"
    "    $wg = new WaitGroup(count($tasks));\n"
    "    foreach ($tasks as $id => $task) {\n"
    "        Coroutine::create(function () use ($wg, &$tasks, $id, $task) {\n"
    "            $tasks[$id] = null;\n"
    "            $tasks[$id] = $task();\n"
    "            $wg->done();\n"
    "        });\n"
    "    }\n"
    "    $wg->wait($timeout);\n"
    "    return $tasks;\n"
    "}\n"
    "\n"
    "function parallel(int $n, callable $fn): void\n"
    "{\n"
    "    $count = $n;\n"
    "    $wg    = new WaitGroup($n);\n"
    "    while ($count--) {\n"
    "        Coroutine::create(function () use ($fn, $wg) {\n"
    "            $fn();\n"
    "            $wg->done();\n"
    "        });\n"
    "    }\n"
    "    $wg->wait();\n"
    "}\n"
    "\n"
    "/**\n"
    " * Applies the callback to the elements of the given list.\n"
    " *\n"
    " * The callback function takes on two parameters. The list parameter's value being the first, and the key/index second.\n"
    " * Each callback runs in a new coroutine, allowing the list to be processed in parallel.\n"
    " *\n"
    " * @param array $list A list of key/value paired input data.\n"
    " * @param callable $fn The callback function to apply to each item on the list. The callback takes on two parameters.\n"
    " *                     The list parameter's value being the first, and the key/index second.\n"
    " * @param float $timeout > 0 means waiting for the specified number of seconds. other means no waiting.\n"
    " * @return array Returns an array containing the results of applying the callback function to the corresponding value\n"
    " *               and key of the list (used as arguments for the callback). The returned array will preserve the keys of\n"
    " *               the list.\n"
    " */\n"
    "function map(array $list, callable $fn, float $timeout = -1): array\n"
    "{\n"
    "    $wg = new WaitGroup(count($list));\n"
    "    foreach ($list as $id => $elem) {\n"
    "        Coroutine::create(function () use ($wg, &$list, $id, $elem, $fn): void {\n"
    "            $list[$id] = null;\n"
    "            $list[$id] = $fn($elem, $id);\n"
    "            $wg->done();\n"
    "        });\n"
    "    }\n"
    "    $wg->wait($timeout);\n"
    "    return $list;\n"
    "}\n"
    "\n"
    "function deadlock_check()\n"
    "{\n"
    "    $all_coroutines = Coroutine::listCoroutines();\n"
    "    $count          = Coroutine::stats()['coroutine_num'];\n"
    "\n"
    "    // coroutine deadlock detected, header\n"
    "    $hr_width = 64 + strlen(strval($count));\n"
    "    $hr1      = str_repeat('=', $hr_width);\n"
    "    $hr2      = str_repeat('-', $hr_width);\n"
    "    echo '',\n"
    "    \"\\n {$hr1}\",\n"
    "    \"\\n  [FATAL ERROR]: all coroutines (count: {$count}) are asleep - deadlock!\",\n"
    "    \"\\n {$hr1}\",\n"
    "    \"\\n\";\n"
    "\n"
    "    // print all coroutine backtraces\n"
    "    $options = Coroutine::getOptions();\n"
    "    if (empty($options['deadlock_check_disable_trace'])) {\n"
    "        $index = 0;\n"
    "        $limit = empty($options['deadlock_check_limit']) ? 32 : intval($options['deadlock_check_limit']);\n"
    "        $depth = empty($options['deadlock_check_depth']) ? 32 : intval($options['deadlock_check_depth']);\n"
    "        foreach ($all_coroutines as $cid) {\n"
    "            echo \"\\n  [Coroutine-{$cid}]\";\n"
    "            echo \"\\n {$hr2}\\n\";\n"
    "            echo Coroutine::printBackTrace($cid, DEBUG_BACKTRACE_IGNORE_ARGS, $depth);\n"
    "            $index++;\n"
    "            // limit the number of maximum outputs\n"
    "            if ($index >= $limit) {\n"
    "                break;\n"
    "            }\n"
    "        }\n"
    "    }\n"
    "\n"
    "    // footer\n"
    "    echo \"\\n {$hr1}\\n\";\n"
    "}\n";

static const char* swoole_library_source_ext_curl =
    "\n"
    "/**\n"
    " * This file is part of Swoole.\n"
    " *\n"
    " * @link     https://www.swoole.com\n"
    " * @contact  team@swoole.com\n"
    " * @license  https://github.com/swoole/library/blob/master/LICENSE\n"
    " */\n"
    "\n"
    "/* @noinspection PhpComposerExtensionStubsInspection */\n"
    "\n"
    "declare(strict_types=1);\n"
    "\n"
    "function swoole_curl_init(string $url = ''): Swoole\\Curl\\Handler\n"
    "{\n"
    "    return new Swoole\\Curl\\Handler($url);\n"
    "}\n"
    "\n"
    "function swoole_curl_setopt(Swoole\\Curl\\Handler $obj, int $opt, $value): bool\n"
    "{\n"
    "    return $obj->setOpt($opt, $value);\n"
    "}\n"
    "\n"
    "function swoole_curl_setopt_array(Swoole\\Curl\\Handler $obj, $array): bool\n"
    "{\n"
    "    foreach ($array as $k => $v) {\n"
    "        if ($obj->setOpt($k, $v) !== true) {\n"
    "            return false;\n"
    "        }\n"
    "    }\n"
    "    return true;\n"
    "}\n"
    "\n"
    "function swoole_curl_exec(Swoole\\Curl\\Handler $obj)\n"
    "{\n"
    "    return $obj->exec();\n"
    "}\n"
    "\n"
    "function swoole_curl_getinfo(Swoole\\Curl\\Handler $obj, int $opt = 0)\n"
    "{\n"
    "    $info = $obj->getInfo();\n"
    "    if (is_array($info) and $opt) {\n"
    "        return match ($opt) {\n"
    "            CURLINFO_EFFECTIVE_URL      => $info['url'],\n"
    "            CURLINFO_HTTP_CODE          => $info['http_code'],\n"
    "            CURLINFO_CONTENT_TYPE       => $info['content_type'],\n"
    "            CURLINFO_REDIRECT_COUNT     => $info['redirect_count'],\n"
    "            CURLINFO_REDIRECT_URL       => $info['redirect_url'],\n"
    "            CURLINFO_TOTAL_TIME         => $info['total_time'],\n"
    "            CURLINFO_STARTTRANSFER_TIME => $info['starttransfer_time'],\n"
    "            CURLINFO_SIZE_DOWNLOAD      => $info['size_download'],\n"
    "            CURLINFO_SPEED_DOWNLOAD     => $info['speed_download'],\n"
    "            CURLINFO_REDIRECT_TIME      => $info['redirect_time'],\n"
    "            CURLINFO_HEADER_SIZE        => $info['header_size'],\n"
    "            CURLINFO_PRIMARY_IP         => $info['primary_ip'],\n"
    "            CURLINFO_PRIVATE            => $info['private'],\n"
    "            default                     => null,\n"
    "        };\n"
    "    }\n"
    "    return $info;\n"
    "}\n"
    "\n"
    "function swoole_curl_errno(Swoole\\Curl\\Handler $obj): int\n"
    "{\n"
    "    return $obj->errno();\n"
    "}\n"
    "\n"
    "function swoole_curl_error(Swoole\\Curl\\Handler $obj): string\n"
    "{\n"
    "    return $obj->error();\n"
    "}\n"
    "\n"
    "function swoole_curl_reset(Swoole\\Curl\\Handler $obj)\n"
    "{\n"
    "    return $obj->reset();\n"
    "}\n"
    "\n"
    "function swoole_curl_close(Swoole\\Curl\\Handler $obj): void\n"
    "{\n"
    "    $obj->close();\n"
    "}\n"
    "\n"
    "function swoole_curl_multi_getcontent(Swoole\\Curl\\Handler $obj)\n"
    "{\n"
    "    return $obj->getContent();\n"
    "}\n";

static const char* swoole_library_source_ext_sockets =
    "\n"
    "/**\n"
    " * This file is part of Swoole.\n"
    " *\n"
    " * @link     https://www.swoole.com\n"
    " * @contact  team@swoole.com\n"
    " * @license  https://github.com/swoole/library/blob/master/LICENSE\n"
    " */\n"
    "\n"
    "declare(strict_types=1);\n"
    "\n"
    "use Swoole\\Coroutine\\Socket;\n"
    "\n"
    "function swoole_socket_create(int $domain, int $type, int $protocol)\n"
    "{\n"
    "    return new Socket($domain, $type, $protocol);\n"
    "}\n"
    "\n"
    "function swoole_socket_connect(Socket $socket, string $address, int $port = 0)\n"
    "{\n"
    "    return $socket->connect($address, $port);\n"
    "}\n"
    "\n"
    "function swoole_socket_read(Socket $socket, int $length, int $type = PHP_BINARY_READ)\n"
    "{\n"
    "    if ($type != PHP_BINARY_READ) {\n"
    "        return $socket->recvLine($length);\n"
    "    }\n"
    "    return $socket->recv($length);\n"
    "}\n"
    "\n"
    "function swoole_socket_write(Socket $socket, string $buffer, int $length = 0)\n"
    "{\n"
    "    if ($length > 0 and $length < strlen($buffer)) {\n"
    "        $buffer = substr($buffer, 0, $length);\n"
    "    }\n"
    "    return $socket->send($buffer);\n"
    "}\n"
    "\n"
    "function swoole_socket_send(Socket $socket, string $buffer, int $length, int $flags)\n"
    "{\n"
    "    if ($flags != 0) {\n"
    "        throw new RuntimeException(\"\\$flags[{$flags}] is not supported\");\n"
    "    }\n"
    "    return swoole_socket_write($socket, $buffer, $length);\n"
    "}\n"
    "\n"
    "function swoole_socket_recv(Socket $socket, &$buffer, int $length, int $flags)\n"
    "{\n"
    "    if ($flags & MSG_OOB) {\n"
    "        throw new RuntimeException('\\$flags[MSG_OOB] is not supported');\n"
    "    }\n"
    "    if ($flags & MSG_PEEK) {\n"
    "        $buffer = $socket->peek($length);\n"
    "    }\n"
    "    $timeout = $flags & MSG_DONTWAIT ? 0.001 : 0;\n"
    "    if ($flags & MSG_WAITALL) {\n"
    "        $buffer = $socket->recvAll($length, $timeout);\n"
    "    } else {\n"
    "        $buffer = $socket->recv($length, $timeout);\n"
    "    }\n"
    "    if ($buffer === false) {\n"
    "        return false;\n"
    "    }\n"
    "    return strlen($buffer);\n"
    "}\n"
    "\n"
    "function swoole_socket_sendto(Socket $socket, string $buffer, int $length, int $flags, string $addr, int $port = 0)\n"
    "{\n"
    "    if ($flags != 0) {\n"
    "        throw new RuntimeException(\"\\$flags[{$flags}] is not supported\");\n"
    "    }\n"
    "    if ($socket->type != SOCK_DGRAM) {\n"
    "        throw new RuntimeException('only supports dgram type socket');\n"
    "    }\n"
    "    if ($length > 0 and $length < strlen($buffer)) {\n"
    "        $buffer = substr($buffer, 0, $length);\n"
    "    }\n"
    "    return $socket->sendto($addr, $port, $buffer);\n"
    "}\n"
    "\n"
    "function swoole_socket_recvfrom(Socket $socket, &$buffer, int $length, int $flags, &$name, &$port = null)\n"
    "{\n"
    "    if ($flags != 0) {\n"
    "        throw new RuntimeException(\"\\$flags[{$flags}] is not supported\");\n"
    "    }\n"
    "    if ($length == 0) {\n"
    "        $socket->errCode = SOCKET_EAGAIN;\n"
    "        return false;\n"
    "    }\n"
    "    if ($socket->type != SOCK_DGRAM) {\n"
    "        throw new RuntimeException('only supports dgram type socket');\n"
    "    }\n"
    "    $data = $socket->recvfrom($peer);\n"
    "    if ($data === false) {\n"
    "        return false;\n"
    "    }\n"
    "    $name = $peer['address'];\n"
    "    if (func_num_args() == 6) {\n"
    "        $port = $peer['port'];\n"
    "    }\n"
    "    if ($length < strlen($data)) {\n"
    "        $buffer = substr($data, 0, $length);\n"
    "    } else {\n"
    "        $buffer = $data;\n"
    "    }\n"
    "    return strlen($buffer);\n"
    "}\n"
    "\n"
    "function swoole_socket_bind(Socket $socket, string $address, int $port = 0): bool\n"
    "{\n"
    "    return $socket->bind($address, $port);\n"
    "}\n"
    "\n"
    "function swoole_socket_listen(Socket $socket, int $backlog = 0): bool\n"
    "{\n"
    "    return $socket->listen($backlog);\n"
    "}\n"
    "\n"
    "function swoole_socket_create_listen(int $port, int $backlog = 128)\n"
    "{\n"
    "    $socket = new Socket(AF_INET, SOCK_STREAM, SOL_TCP);\n"
    "    if (!$socket->bind('0.0.0.0', $port)) {\n"
    "        return false;\n"
    "    }\n"
    "    if (!$socket->listen($backlog)) {\n"
    "        return false;\n"
    "    }\n"
    "    return $socket;\n"
    "}\n"
    "\n"
    "function swoole_socket_accept(Socket $socket)\n"
    "{\n"
    "    return $socket->accept();\n"
    "}\n"
    "\n"
    "function swoole_socket_getpeername(Socket $socket, &$address, &$port = null)\n"
    "{\n"
    "    $info = $socket->getpeername();\n"
    "    if (!$info) {\n"
    "        return false;\n"
    "    }\n"
    "    $address = $info['address'];\n"
    "    if (func_num_args() == 3) {\n"
    "        $port = $info['port'];\n"
    "    }\n"
    "    return true;\n"
    "}\n"
    "\n"
    "function swoole_socket_getsockname(Socket $socket, &$address, &$port = null)\n"
    "{\n"
    "    $info = $socket->getsockname();\n"
    "    if (!$info) {\n"
    "        return false;\n"
    "    }\n"
    "    $address = $info['address'];\n"
    "    if (func_num_args() == 3) {\n"
    "        $port = $info['port'];\n"
    "    }\n"
    "    return true;\n"
    "}\n"
    "\n"
    "function swoole_socket_set_option(Socket $socket, int $level, int $optname, $optval): bool\n"
    "{\n"
    "    return $socket->setOption($level, $optname, $optval);\n"
    "}\n"
    "\n"
    "function swoole_socket_setopt(Socket $socket, int $level, int $optname, $optval): bool\n"
    "{\n"
    "    return $socket->setOption($level, $optname, $optval);\n"
    "}\n"
    "\n"
    "function swoole_socket_get_option(Socket $socket, int $level, int $optname)\n"
    "{\n"
    "    return $socket->getOption($level, $optname);\n"
    "}\n"
    "\n"
    "function swoole_socket_getopt(Socket $socket, int $level, int $optname)\n"
    "{\n"
    "    return $socket->getOption($level, $optname);\n"
    "}\n"
    "\n"
    "function swoole_socket_shutdown(Socket $socket, int $how = 2): bool\n"
    "{\n"
    "    return $socket->shutdown($how);\n"
    "}\n"
    "\n"
    "function swoole_socket_close(Socket $socket)\n"
    "{\n"
    "    $socket->close();\n"
    "}\n"
    "\n"
    "function swoole_socket_clear_error(?Socket $socket = null)\n"
    "{\n"
    "    if ($socket) {\n"
    "        $socket->errCode = 0;\n"
    "    }\n"
    "    swoole_clear_error();\n"
    "}\n"
    "\n"
    "function swoole_socket_last_error(?Socket $socket = null): int\n"
    "{\n"
    "    if ($socket) {\n"
    "        return $socket->errCode;\n"
    "    }\n"
    "    return swoole_last_error();\n"
    "}\n"
    "\n"
    "function swoole_socket_set_block(Socket $socket)\n"
    "{\n"
    "    if ($socket->isClosed()) {\n"
    "        return false;\n"
    "    }\n"
    "    if (isset($socket->__ext_sockets_nonblock) and $socket->__ext_sockets_nonblock) {\n"
    "        $socket->setOption(SOL_SOCKET, SO_RCVTIMEO, $socket->__ext_sockets_timeout); // @phpstan-ignore property.notFound\n"
    "    }\n"
    "    $socket->__ext_sockets_nonblock = false; // @phpstan-ignore property.notFound\n"
    "    return true;\n"
    "}\n"
    "\n"
    "function swoole_socket_set_nonblock(Socket $socket)\n"
    "{\n"
    "    if ($socket->isClosed()) {\n"
    "        return false;\n"
    "    }\n"
    "    if (isset($socket->__ext_sockets_nonblock) and $socket->__ext_sockets_nonblock) {\n"
    "        return true;\n"
    "    }\n"
    "    $socket->__ext_sockets_nonblock = true; // @phpstan-ignore property.notFound\n"
    "    $socket->__ext_sockets_timeout  = $socket->getOption(SOL_SOCKET, SO_RCVTIMEO); // @phpstan-ignore property.notFound\n"
    "    $socket->setOption(SOL_SOCKET, SO_RCVTIMEO, ['sec' => 0, 'usec' => 1000]);\n"
    "    return true;\n"
    "}\n"
    "\n"
    "function swoole_socket_create_pair(\n"
    "    int $domain,\n"
    "    int $type,\n"
    "    int $protocol,\n"
    "    array &$pair,\n"
    ") {\n"
    "    $_pair = swoole_coroutine_socketpair($domain, $type, $protocol);\n"
    "    if ($_pair) {\n"
    "        $pair = $_pair;\n"
    "        return true;\n"
    "    }\n"
    "    return false;\n"
    "}\n"
    "\n"
    "/**\n"
    " * @since 5.0.0\n"
    " */\n"
    "function swoole_socket_import_stream(mixed $stream): Socket|false\n"
    "{\n"
    "    return Socket::import($stream); // @phpstan-ignore staticMethod.notFound\n"
    "}\n";

static const char* swoole_library_source_ext_standard =
    "\n"
    "/**\n"
    " * This file is part of Swoole.\n"
    " *\n"
    " * @link     https://www.swoole.com\n"
    " * @contact  team@swoole.com\n"
    " * @license  https://github.com/swoole/library/blob/master/LICENSE\n"
    " */\n"
    "\n"
    "/* @noinspection PhpComposerExtensionStubsInspection */\n"
    "\n"
    "declare(strict_types=1);\n"
    "\n"
    "use Swoole\\Coroutine\\System;\n"
    "\n"
    "function swoole_gethostbynamel(string $domain)\n"
    "{\n"
    "    return System::getaddrinfo($domain);\n"
    "}\n"
    "\n"
    "function swoole_mail(string $to, string $subject, string $message, array $headers = []): bool\n"
    "{\n"
    "    $client = swoole_get_default_remote_object_client();\n"
    "    return $client->call('mail', $to, $subject, $message, $headers);\n"
    "}\n"
    "\n"
    "function swoole_checkdnsrr(string $hostname, string $type = 'MX'): bool\n"
    "{\n"
    "    $client = swoole_get_default_remote_object_client();\n"
    "    return $client->call('checkdnsrr', ...func_get_args());\n"
    "}\n"
    "\n"
    "function swoole_dns_check_record(string $hostname, string $type = 'MX'): bool\n"
    "{\n"
    "    return swoole_checkdnsrr($hostname, $type);\n"
    "}\n"
    "\n"
    "function swoole_real_getmxrr(string $hostname, ?array $hosts = null, ?array $weights = null): array\n"
    "{\n"
    "    if (func_num_args() === 2) {\n"
    "        $result['result'] = getmxrr($hostname, $hosts);\n"
    "        $result['host']   = $hosts;\n"
    "    } else {\n"
    "        $result['result'] = getmxrr($hostname, $hosts, $weights);\n"
    "        $result['host']   = $hosts;\n"
    "        $result['weight'] = $weights;\n"
    "    }\n"
    "    return $result;\n"
    "}\n"
    "\n"
    "function swoole_getmxrr(string $hostname, array &$hosts, ?array &$weights = null): bool\n"
    "{\n"
    "    $client   = swoole_get_default_remote_object_client();\n"
    "    $_hosts   = $hosts;\n"
    "    $_weights = $weights === null ? null : $weights;\n"
    "    $result   = $client->call('swoole_real_getmxrr', $hostname, $_hosts, $_weights);\n"
    "    $hosts    = $result['host'];\n"
    "    $weights  = $result['weight'];\n"
    "    return $result['result'];\n"
    "}\n"
    "\n"
    "function swoole_dns_get_mx(string $hostname, array &$hosts, ?array &$weights = null): bool\n"
    "{\n"
    "    return swoole_getmxrr($hostname, $hosts, $weights);\n"
    "}\n"
    "\n"
    "function swoole_real_dns_get_record(string $hostname, int $type, ?array $authoritative_name_servers = null, ?array $additional_records = null, bool $raw = false): array\n"
    "{\n"
    "    if ($authoritative_name_servers === null && $additional_records === null) {\n"
    "        $result['result'] = dns_get_record($hostname, $type);\n"
    "    } elseif ($additional_records === null) {\n"
    "        $result['result'] = dns_get_record($hostname, $type, $authoritative_name_servers);\n"
    "    } else {\n"
    "        $result['result'] = dns_get_record($hostname, $type, $authoritative_name_servers, $additional_records);\n"
    "    }\n"
    "    $result['authoritative_name_servers'] = $authoritative_name_servers;\n"
    "    $result['additional_records']         = $additional_records;\n"
    "    return $result;\n"
    "}\n"
    "\n"
    "function swoole_dns_get_record(string $hostname,\n"
    "    int $type = DNS_ANY,\n"
    "    ?array &$authoritative_name_servers = null,\n"
    "    ?array &$additional_records = null,\n"
    "    bool $raw = false): array|false\n"
    "{\n"
    "    $client                     = swoole_get_default_remote_object_client();\n"
    "    $result                     = $client->call('swoole_real_dns_get_record', $hostname, $type, $authoritative_name_servers, $additional_records, $raw);\n"
    "    $authoritative_name_servers = $result['authoritative_name_servers'];\n"
    "    $additional_records         = $result['additional_records'];\n"
    "    return $result['result'];\n"
    "}\n"
    "\n"
    "function swoole_gethostbyaddr(string $ip): string\n"
    "{\n"
    "    $client = swoole_get_default_remote_object_client();\n"
    "    return $client->call('gethostbyaddr', $ip);\n"
    "}\n";

static const char* swoole_library_source_ext_mongodb =
    "\n"
    "/**\n"
    " * This file is part of Swoole.\n"
    " *\n"
    " * @link     https://www.swoole.com\n"
    " * @contact  team@swoole.com\n"
    " * @license  https://github.com/swoole/library/blob/master/LICENSE\n"
    " */\n"
    "\n"
    "declare(strict_types=1);\n"
    "\n"
    "namespace Swoole\\MongoDB;\n"
    "\n"
    "use Swoole\\RemoteObject;\n"
    "use Swoole\\RemoteObject\\ProxyTrait;\n"
    "\n"
    "class Client\n"
    "{\n"
    "    use ProxyTrait;\n"
    "\n"
    "    public const DEFAULT_URI = 'mongodb://127.0.0.1/';\n"
    "\n"
    "    protected RemoteObject $client;\n"
    "\n"
    "    public function __construct(?string $uri = self::DEFAULT_URI, array $uriOptions = [], array $driverOptions = [])\n"
    "    {\n"
    "        $remoteObjectClient = swoole_library_get_option('mongodb_remote_object_client');\n"
    "        if ($remoteObjectClient === null) {\n"
    "            $remoteObjectClient = swoole_get_default_remote_object_client();\n"
    "        }\n"
    "        $this->client = $remoteObjectClient->create(\\MongoDB\\Client::class, $uri, $uriOptions, $driverOptions);\n"
    "    }\n"
    "\n"
    "    protected function getObject(): RemoteObject\n"
    "    {\n"
    "        return $this->client;\n"
    "    }\n"
    "}\n";

static const char* swoole_library_source_functions =
    "\n"
    "/**\n"
    " * This file is part of Swoole.\n"
    " *\n"
    " * @link     https://www.swoole.com\n"
    " * @contact  team@swoole.com\n"
    " * @license  https://github.com/swoole/library/blob/master/LICENSE\n"
    " */\n"
    "\n"
    "declare(strict_types=1);\n"
    "\n"
    "if (PHP_VERSION_ID < 80100) { // @phpstan-ignore smaller.alwaysFalse\n"
    "    throw new RuntimeException('require PHP version 8.1 or later');\n"
    "}\n"
    "\n"
    "if (SWOOLE_USE_SHORTNAME) { // @phpstan-ignore if.alwaysTrue\n"
    "    function _string(string $string = ''): Swoole\\StringObject\n"
    "    {\n"
    "        return new Swoole\\StringObject($string);\n"
    "    }\n"
    "\n"
    "    function _mbstring(string $string = ''): Swoole\\MultibyteStringObject\n"
    "    {\n"
    "        return new Swoole\\MultibyteStringObject($string);\n"
    "    }\n"
    "\n"
    "    function _array(array $array = []): Swoole\\ArrayObject\n"
    "    {\n"
    "        return new Swoole\\ArrayObject($array);\n"
    "    }\n"
    "}\n"
    "\n"
    "class SwooleLibrary\n"
    "{\n"
    "    /**\n"
    "     * @var array<string, mixed>\n"
    "     */\n"
    "    public static array $options = [];\n"
    "\n"
    "    public static bool $remote_object_server_initiated = false;\n"
    "\n"
    "    public static string $remote_object_server_socket_file = '';\n"
    "}\n"
    "\n"
    "/**\n"
    " * @param array<string, mixed> $options\n"
    " */\n"
    "function swoole_library_set_options(array $options): void\n"
    "{\n"
    "    SwooleLibrary::$options = $options;\n"
    "}\n"
    "\n"
    "function swoole_library_get_options(): array\n"
    "{\n"
    "    return SwooleLibrary::$options;\n"
    "}\n"
    "\n"
    "function swoole_library_set_option(string $key, mixed $value): void\n"
    "{\n"
    "    SwooleLibrary::$options[$key] = $value;\n"
    "}\n"
    "\n"
    "function swoole_library_get_option(string $key): mixed\n"
    "{\n"
    "    return SwooleLibrary::$options[$key] ?? null;\n"
    "}\n"
    "\n"
    "function swoole_string(string $string = ''): Swoole\\StringObject\n"
    "{\n"
    "    return new Swoole\\StringObject($string);\n"
    "}\n"
    "\n"
    "function swoole_mbstring(string $string = ''): Swoole\\MultibyteStringObject\n"
    "{\n"
    "    return new Swoole\\MultibyteStringObject($string);\n"
    "}\n"
    "\n"
    "function swoole_array(array $array = []): Swoole\\ArrayObject\n"
    "{\n"
    "    return new Swoole\\ArrayObject($array);\n"
    "}\n"
    "\n"
    "function swoole_table(int $size, string $fields): Swoole\\Table\n"
    "{\n"
    "    $_fields = swoole_string($fields)->trim()->split(',');\n"
    "\n"
    "    $table = new Swoole\\Table($size, 0.25);\n"
    "\n"
    "    foreach ($_fields as $f) {\n"
    "        $_f   = swoole_string($f)->trim()->split(':');\n"
    "        $name = $_f->get(0)->trim()->toString();\n"
    "        $type = $_f->get(1)->trim();\n"
    "\n"
    "        switch ($type) {\n"
    "            case 'i':\n"
    "            case 'int':\n"
    "                $table->column($name, Swoole\\Table::TYPE_INT);\n"
    "                break;\n"
    "            case 'f':\n"
    "            case 'float':\n"
    "                $table->column($name, Swoole\\Table::TYPE_FLOAT);\n"
    "                break;\n"
    "            case 's':\n"
    "            case 'string':\n"
    "                if ($_f->count() < 3) {\n"
    "                    throw new RuntimeException('need to give string length');\n"
    "                }\n"
    "                $length = (int) $_f->get(2)->trim()->toString();\n"
    "                if ($length <= 0) {\n"
    "                    throw new RuntimeException(\"invalid string length[{$length}]\");\n"
    "                }\n"
    "                $table->column($name, Swoole\\Table::TYPE_STRING, $length);\n"
    "                break;\n"
    "            default:\n"
    "                throw new RuntimeException(\"unknown field type[{$type}]\");\n"
    "        }\n"
    "    }\n"
    "\n"
    "    if (!$table->create()) {\n"
    "        throw new RuntimeException('failed to create table');\n"
    "    }\n"
    "\n"
    "    return $table;\n"
    "}\n"
    "\n"
    "function swoole_array_list(...$arrray): Swoole\\ArrayObject\n"
    "{\n"
    "    return new Swoole\\ArrayObject($arrray);\n"
    "}\n"
    "\n"
    "function swoole_array_default_value(array $array, $key, $default_value = null)\n"
    "{\n"
    "    return array_key_exists($key, $array) ? $array[$key] : $default_value;\n"
    "}\n"
    "\n"
    "function swoole_is_in_container(): bool\n"
    "{\n"
    "    $mountinfo = file_get_contents('/proc/self/mountinfo');\n"
    "    return strpos($mountinfo, 'kubepods') > 0 || strpos($mountinfo, 'docker') > 0;\n"
    "}\n"
    "\n"
    "function swoole_container_cpu_num(): int\n"
    "{\n"
    "    $swoole_cpu_num = intval(getenv('SWOOLE_CPU_NUM'));\n"
    "    if ($swoole_cpu_num > 0) {\n"
    "        return $swoole_cpu_num;\n"
    "    }\n"
    "    if (!swoole_is_in_container()) {\n"
    "        return swoole_cpu_num();\n"
    "    }\n"
    "    // cgroup v2\n"
    "    $cpu_max = '/sys/fs/cgroup/cpu.max';\n"
    "    if (file_exists($cpu_max)) {\n"
    "        $cpu_max  = file_get_contents($cpu_max);\n"
    "        $fields   = explode($cpu_max, ' ');\n"
    "        $quota_us = $fields[0];\n"
    "        if ($quota_us === 'max') { // @phpstan-ignore identical.alwaysFalse\n"
    "            return swoole_cpu_num();\n"
    "        }\n"
    "        $period_us = $fields[1] ?? 100000;\n"
    "    } else {\n"
    "        $quota_us  = file_get_contents('/sys/fs/cgroup/cpu,cpuacct/cpu.cfs_quota_us');\n"
    "        $period_us = file_get_contents('/sys/fs/cgroup/cpu,cpuacct/cpu.cfs_period_us');\n"
    "    }\n"
    "    $cpu_num = floatval($quota_us) / floatval($period_us);\n"
    "    if ($cpu_num < 1) {\n"
    "        return swoole_cpu_num();\n"
    "    }\n"
    "    return intval(floor($cpu_num));\n"
    "}\n"
    "\n"
    "function swoole_init_default_remote_object_server(): void\n"
    "{\n"
    "    $dir = swoole_library_get_option('default_remote_object_server_dir');\n"
    "    if (empty($dir)) {\n"
    "        $home = getenv('HOME') ?: sys_get_temp_dir();\n"
    "        $dir  = $home . '/.swoole';\n"
    "        swoole_library_set_option('default_remote_object_server_dir', $dir);\n"
    "    }\n"
    "\n"
    "    $pid_file = $dir . '/remote-object-server.pid';\n"
    "\n"
    "    if (!is_dir($dir)) {\n"
    "        mkdir($dir, 0755, true);\n"
    "    } else {\n"
    "        if (is_file($pid_file)\n"
    "            and posix_kill(intval(file_get_contents($pid_file)), 0)) {\n"
    "            return;\n"
    "        }\n"
    "    }\n"
    "\n"
    "    $options = swoole_library_get_option('default_remote_object_server_options');\n"
    "    if (!$options) {\n"
    "        $worker_num = swoole_library_get_option('default_remote_object_server_worker_num') ?: 128;\n"
    "        $options    = [\n"
    "            'worker_num'  => $worker_num,\n"
    "            'server_mode' => defined('SWOOLE_THREAD') ? SWOOLE_THREAD : SWOOLE_BASE,\n"
    "        ];\n"
    "    }\n"
    "\n"
    "    $php_file                    = $dir . '/remote-object-server.php';\n"
    "    $socket_file                 = $dir . '/remote-object-server.sock';\n"
    "    $log_file                    = $dir . '/remote-object-server.log';\n"
    "    $lock_file                   = $dir . '/remote-object-server.lock';\n"
    "\n"
    "    $wait_ready_fn = function () use ($socket_file) {\n"
    "        // wait for remote object server ready\n"
    "        while (true) {\n"
    "            if (posix_access($socket_file, POSIX_R_OK)) {\n"
    "                break;\n"
    "            }\n"
    "            usleep(500000);\n"
    "        }\n"
    "    };\n"
    "\n"
    "    $lock_handle = fopen($lock_file, 'c');\n"
    "    if (!$lock_handle) {\n"
    "        throw new RuntimeException(\"failed to open lock file[{$lock_file}]\");\n"
    "    }\n"
    "    // If the lock was not acquired, it indicates that another process is trying to start the remote object server.\n"
    "    // In this case, the service should be skipped from starting and proceed to the ready wait detection branch.\n"
    "    if (!flock($lock_handle, LOCK_EX | LOCK_NB)) {\n"
    "        fclose($lock_handle);\n"
    "        $wait_ready_fn();\n"
    "        return;\n"
    "    }\n"
    "\n"
    "    $options['enable_coroutine'] = false;\n"
    "    $options['bootstrap']        = $php_file;\n"
    "    $options['pid_file']         = $pid_file;\n"
    "    $options['log_file']         = $log_file;\n"
    "    $options['daemonize']        = true;\n"
    "    $options['socket_type']      = SWOOLE_SOCK_UNIX_STREAM;\n"
    "\n"
    "    $rv = file_put_contents($php_file, '<?php' .\n"
    "        \"\\nif (is_file(__DIR__ . '/vendor/autoload.php')) { require __DIR__ . '/vendor/autoload.php'; }\" .\n"
    "        \"\\nif (is_file(__DIR__ . '/bootstrap.php')) { require __DIR__ . '/bootstrap.php'; }\" .\n"
    "        \"\\n\" .\n"
    "        \"\\n(new Swoole\\\\RemoteObject\\\\Server(\"\n"
    "        . \"'{$socket_file}', 0, \"\n"
    "        . var_export($options, true) .\n"
    "        \"))->start();\\n\");\n"
    "    if (!$rv) {\n"
    "        throw new RuntimeException(\"failed to write php file[{$php_file}]\");\n"
    "    }\n"
    "\n"
    "    $php_bin = PHP_BINARY;\n"
    "    if (posix_access($socket_file, POSIX_R_OK)) {\n"
    "        unlink($socket_file);\n"
    "    }\n"
    "\n"
    "    $hook_flags = Swoole\\Runtime::getHookFlags();\n"
    "    // Having enabled the MongoDB hook, you need to install the MongoDB PHP library through Composer.\n"
    "    if (defined('SWOOLE_HOOK_MONGODB') and $hook_flags & SWOOLE_HOOK_MONGODB and !is_dir($dir . '/vendor/mongodb/mongodb')) {\n"
    "        system(\"cd {$dir} && composer require mongodb/mongodb\");\n"
    "    }\n"
    "\n"
    "    // start server\n"
    "    $proc = proc_open(\"{$php_bin} {$php_file}\", [\n"
    "        0 => ['pipe', 'r'],\n"
    "        1 => ['pipe', 'w'],\n"
    "        2 => ['pipe', 'w'],\n"
    "    ], $pipes);\n"
    "    if ($proc === false) {\n"
    "        throw new RuntimeException('failed to start remote object server');\n"
    "    }\n"
    "    $rc = proc_close($proc);\n"
    "    if ($rc !== 0) {\n"
    "        $output = stream_get_contents($pipes[1]) . stream_get_contents($pipes[2]);\n"
    "        throw new RuntimeException(\"failed to start remote object server: exit code {$rc}, output: \" . $output);\n"
    "    }\n"
    "\n"
    "    $wait_ready_fn();\n"
    "    flock($lock_handle, LOCK_UN);\n"
    "    fclose($lock_handle);\n"
    "}\n"
    "\n"
    "function swoole_get_default_remote_object_client(): Swoole\\RemoteObject\\Client\n"
    "{\n"
    "    if (!SwooleLibrary::$remote_object_server_initiated) {\n"
    "        SwooleLibrary::$remote_object_server_initiated = true;\n"
    "        swoole_init_default_remote_object_server();\n"
    "    }\n"
    "    if (!SwooleLibrary::$remote_object_server_socket_file) {\n"
    "        $dir = swoole_library_get_option('default_remote_object_server_dir');\n"
    "        if (empty($dir)) {\n"
    "            $home = getenv('HOME') ?: sys_get_temp_dir();\n"
    "            $dir  = $home . '/.swoole';\n"
    "        }\n"
    "        SwooleLibrary::$remote_object_server_socket_file = 'unix://' . $dir . '/remote-object-server.sock';\n"
    "    }\n"
    "    return new Swoole\\RemoteObject\\Client(SwooleLibrary::$remote_object_server_socket_file);\n"
    "}\n";

static const char* swoole_library_source_alias =
    "\n"
    "/**\n"
    " * This file is part of Swoole.\n"
    " *\n"
    " * @link     https://www.swoole.com\n"
    " * @contact  team@swoole.com\n"
    " * @license  https://github.com/swoole/library/blob/master/LICENSE\n"
    " */\n"
    "\n"
    "declare(strict_types=1);\n"
    "\n"
    "if (SWOOLE_USE_SHORTNAME) { // @phpstan-ignore if.alwaysTrue\n"
    "    class_alias(Swoole\\Coroutine\\WaitGroup::class, Co\\WaitGroup::class, true);\n"
    "    class_alias(Swoole\\Coroutine\\Server::class, Co\\Server::class, true);\n"
    "    class_alias(Swoole\\Coroutine\\Server\\Connection::class, Co\\Server\\Connection::class, true);\n"
    "    class_alias(Swoole\\Coroutine\\FastCGI\\Client::class, Co\\FastCGI\\Client::class, true);\n"
    "    class_alias(Swoole\\Coroutine\\FastCGI\\Client\\Exception::class, Co\\FastCGI\\Client\\Exception::class, true);\n"
    "    class_alias(Swoole\\Coroutine\\FastCGI\\Proxy::class, Co\\FastCGI\\Proxy::class, true);\n"
    "}\n"
    "\n"
    "class_alias(Swoole\\Process\\Manager::class, Swoole\\Process\\ProcessManager::class, true);\n";

static const char* swoole_library_source_alias_ns =
    "\n"
    "/**\n"
    " * This file is part of Swoole.\n"
    " *\n"
    " * @link     https://www.swoole.com\n"
    " * @contact  team@swoole.com\n"
    " * @license  https://github.com/swoole/library/blob/master/LICENSE\n"
    " */\n"
    "\n"
    "declare(strict_types=1);\n"
    "\n"
    "namespace Co;\n"
    "\n"
    "use Swoole\\Coroutine;\n"
    "\n"
    "if (SWOOLE_USE_SHORTNAME) { // @phpstan-ignore if.alwaysTrue\n"
    "    function run(callable $fn, ...$args)\n"
    "    {\n"
    "        return \\Swoole\\Coroutine\\run($fn, ...$args);\n"
    "    }\n"
    "\n"
    "    function go(callable $fn, ...$args)\n"
    "    {\n"
    "        return Coroutine::create($fn, ...$args);\n"
    "    }\n"
    "\n"
    "    function defer(callable $fn)\n"
    "    {\n"
    "        Coroutine::defer($fn);\n"
    "    }\n"
    "}\n";

void php_swoole_load_library()
{
    _eval(swoole_library_source_constants, "@swoole/library/constants.php");
    _eval(swoole_library_source_std_exec, "@swoole/library/std/exec.php");
    _eval(swoole_library_source_core_constant, "@swoole/library/core/Constant.php");
    _eval(swoole_library_source_core_string_object, "@swoole/library/core/StringObject.php");
    _eval(swoole_library_source_core_multibyte_string_object, "@swoole/library/core/MultibyteStringObject.php");
    _eval(swoole_library_source_core_exception_array_key_not_exists, "@swoole/library/core/Exception/ArrayKeyNotExists.php");
    _eval(swoole_library_source_core_array_object, "@swoole/library/core/ArrayObject.php");
    _eval(swoole_library_source_core_object_proxy, "@swoole/library/core/ObjectProxy.php");
    _eval(swoole_library_source_core_coroutine_wait_group, "@swoole/library/core/Coroutine/WaitGroup.php");
    _eval(swoole_library_source_core_coroutine_server, "@swoole/library/core/Coroutine/Server.php");
    _eval(swoole_library_source_core_coroutine_server_connection, "@swoole/library/core/Coroutine/Server/Connection.php");
    _eval(swoole_library_source_core_coroutine_barrier, "@swoole/library/core/Coroutine/Barrier.php");
    _eval(swoole_library_source_core_coroutine_http_client_proxy, "@swoole/library/core/Coroutine/Http/ClientProxy.php");
    _eval(swoole_library_source_core_coroutine_http_functions, "@swoole/library/core/Coroutine/Http/functions.php");
    _eval(swoole_library_source_core_connection_pool, "@swoole/library/core/ConnectionPool.php");
    _eval(swoole_library_source_core_database_object_proxy, "@swoole/library/core/Database/ObjectProxy.php");
    _eval(swoole_library_source_core_database_mysqli_config, "@swoole/library/core/Database/MysqliConfig.php");
    _eval(swoole_library_source_core_database_mysqli_exception, "@swoole/library/core/Database/MysqliException.php");
    _eval(swoole_library_source_core_database_mysqli_pool, "@swoole/library/core/Database/MysqliPool.php");
    _eval(swoole_library_source_core_database_mysqli_proxy, "@swoole/library/core/Database/MysqliProxy.php");
    _eval(swoole_library_source_core_database_mysqli_statement_proxy, "@swoole/library/core/Database/MysqliStatementProxy.php");
    _eval(swoole_library_source_core_database_detects_lost_connections, "@swoole/library/core/Database/DetectsLostConnections.php");
    _eval(swoole_library_source_core_database_pdo_config, "@swoole/library/core/Database/PDOConfig.php");
    _eval(swoole_library_source_core_database_pdo_pool, "@swoole/library/core/Database/PDOPool.php");
    _eval(swoole_library_source_core_database_pdo_proxy, "@swoole/library/core/Database/PDOProxy.php");
    _eval(swoole_library_source_core_database_pdo_statement_proxy, "@swoole/library/core/Database/PDOStatementProxy.php");
    _eval(swoole_library_source_core_database_redis_config, "@swoole/library/core/Database/RedisConfig.php");
    _eval(swoole_library_source_core_database_redis_pool, "@swoole/library/core/Database/RedisPool.php");
    _eval(swoole_library_source_core_http_status, "@swoole/library/core/Http/Status.php");
    _eval(swoole_library_source_core_curl_exception, "@swoole/library/core/Curl/Exception.php");
    _eval(swoole_library_source_core_curl_handler, "@swoole/library/core/Curl/Handler.php");
    _eval(swoole_library_source_core_fast_cgi, "@swoole/library/core/FastCGI.php");
    _eval(swoole_library_source_core_fast_cgi_record, "@swoole/library/core/FastCGI/Record.php");
    _eval(swoole_library_source_core_fast_cgi_record_params, "@swoole/library/core/FastCGI/Record/Params.php");
    _eval(swoole_library_source_core_fast_cgi_record_abort_request, "@swoole/library/core/FastCGI/Record/AbortRequest.php");
    _eval(swoole_library_source_core_fast_cgi_record_begin_request, "@swoole/library/core/FastCGI/Record/BeginRequest.php");
    _eval(swoole_library_source_core_fast_cgi_record_data, "@swoole/library/core/FastCGI/Record/Data.php");
    _eval(swoole_library_source_core_fast_cgi_record_end_request, "@swoole/library/core/FastCGI/Record/EndRequest.php");
    _eval(swoole_library_source_core_fast_cgi_record_get_values, "@swoole/library/core/FastCGI/Record/GetValues.php");
    _eval(swoole_library_source_core_fast_cgi_record_get_values_result, "@swoole/library/core/FastCGI/Record/GetValuesResult.php");
    _eval(swoole_library_source_core_fast_cgi_record_stdin, "@swoole/library/core/FastCGI/Record/Stdin.php");
    _eval(swoole_library_source_core_fast_cgi_record_stdout, "@swoole/library/core/FastCGI/Record/Stdout.php");
    _eval(swoole_library_source_core_fast_cgi_record_stderr, "@swoole/library/core/FastCGI/Record/Stderr.php");
    _eval(swoole_library_source_core_fast_cgi_record_unknown_type, "@swoole/library/core/FastCGI/Record/UnknownType.php");
    _eval(swoole_library_source_core_fast_cgi_frame_parser, "@swoole/library/core/FastCGI/FrameParser.php");
    _eval(swoole_library_source_core_fast_cgi_message, "@swoole/library/core/FastCGI/Message.php");
    _eval(swoole_library_source_core_fast_cgi_request, "@swoole/library/core/FastCGI/Request.php");
    _eval(swoole_library_source_core_fast_cgi_response, "@swoole/library/core/FastCGI/Response.php");
    _eval(swoole_library_source_core_fast_cgi_http_request, "@swoole/library/core/FastCGI/HttpRequest.php");
    _eval(swoole_library_source_core_fast_cgi_http_response, "@swoole/library/core/FastCGI/HttpResponse.php");
    _eval(swoole_library_source_core_coroutine_fast_cgi_client, "@swoole/library/core/Coroutine/FastCGI/Client.php");
    _eval(swoole_library_source_core_coroutine_fast_cgi_client_exception, "@swoole/library/core/Coroutine/FastCGI/Client/Exception.php");
    _eval(swoole_library_source_core_coroutine_fast_cgi_proxy, "@swoole/library/core/Coroutine/FastCGI/Proxy.php");
    _eval(swoole_library_source_core_process_manager, "@swoole/library/core/Process/Manager.php");
    _eval(swoole_library_source_core_remote_object, "@swoole/library/core/RemoteObject.php");
    _eval(swoole_library_source_core_remote_object_server, "@swoole/library/core/RemoteObject/Server.php");
    _eval(swoole_library_source_core_remote_object_context, "@swoole/library/core/RemoteObject/Context.php");
    _eval(swoole_library_source_core_remote_object_client, "@swoole/library/core/RemoteObject/Client.php");
    _eval(swoole_library_source_core_remote_object_exception, "@swoole/library/core/RemoteObject/Exception.php");
    _eval(swoole_library_source_core_remote_object_proxy_trait, "@swoole/library/core/RemoteObject/ProxyTrait.php");
    _eval(swoole_library_source_core_server_admin, "@swoole/library/core/Server/Admin.php");
    _eval(swoole_library_source_core_server_helper, "@swoole/library/core/Server/Helper.php");
    _eval(swoole_library_source_core_name_resolver, "@swoole/library/core/NameResolver.php");
    _eval(swoole_library_source_core_name_resolver_exception, "@swoole/library/core/NameResolver/Exception.php");
    _eval(swoole_library_source_core_name_resolver_cluster, "@swoole/library/core/NameResolver/Cluster.php");
    _eval(swoole_library_source_core_name_resolver_redis, "@swoole/library/core/NameResolver/Redis.php");
    _eval(swoole_library_source_core_name_resolver_nacos, "@swoole/library/core/NameResolver/Nacos.php");
    _eval(swoole_library_source_core_name_resolver_consul, "@swoole/library/core/NameResolver/Consul.php");
    _eval(swoole_library_source_core_thread_pool, "@swoole/library/core/Thread/Pool.php");
    _eval(swoole_library_source_core_thread_runnable, "@swoole/library/core/Thread/Runnable.php");
    _eval(swoole_library_source_core_coroutine_functions, "@swoole/library/core/Coroutine/functions.php");
    _eval(swoole_library_source_ext_curl, "@swoole/library/ext/curl.php");
    _eval(swoole_library_source_ext_sockets, "@swoole/library/ext/sockets.php");
    _eval(swoole_library_source_ext_standard, "@swoole/library/ext/standard.php");
    _eval(swoole_library_source_ext_mongodb, "@swoole/library/ext/mongodb.php");
    _eval(swoole_library_source_functions, "@swoole/library/functions.php");
    _eval(swoole_library_source_alias, "@swoole/library/alias.php");
    _eval(swoole_library_source_alias_ns, "@swoole/library/alias_ns.php");
}
ext/swoole/ext-src/php_swoole_server.h000064400000015573151730542100014170 0ustar00/*
 +----------------------------------------------------------------------+
 | Swoole                                                               |
 +----------------------------------------------------------------------+
 | Copyright (c) 2012-2015 The Swoole Group                             |
 +----------------------------------------------------------------------+
 | This source file is subject to version 2.0 of the Apache license,    |
 | that is bundled with this package in the file LICENSE, and is        |
 | available through the world-wide-web at the following url:           |
 | http://www.apache.org/licenses/LICENSE-2.0.html                      |
 | If you did not receive a copy of the Apache2.0 license and are unable|
 | to obtain it through the world-wide-web, please send a note to       |
 | license@swoole.com so we can mail you a copy immediately.            |
 +----------------------------------------------------------------------+
 | Author: Tianfeng Han  <rango@swoole.com>                             |
 +----------------------------------------------------------------------+
 */

#pragma once

#include "php_swoole_cxx.h"
#include "swoole_server.h"

#include <unordered_map>
#include <list>
#include <vector>

//--------------------------------------------------------
enum php_swoole_server_callback_type {
    SW_SERVER_CB_onStart,           // master
    SW_SERVER_CB_onBeforeShutdown,  // master
    SW_SERVER_CB_onShutdown,        // master
    SW_SERVER_CB_onWorkerStart,     // worker(event & task)
    SW_SERVER_CB_onWorkerStop,      // worker(event & task)
    SW_SERVER_CB_onBeforeReload,    // manager
    SW_SERVER_CB_onAfterReload,     // manager
    SW_SERVER_CB_onTask,            // worker(task)
    SW_SERVER_CB_onFinish,          // worker(event & task)
    SW_SERVER_CB_onWorkerExit,      // worker(event)
    SW_SERVER_CB_onWorkerError,     // manager
    SW_SERVER_CB_onManagerStart,    // manager
    SW_SERVER_CB_onManagerStop,     // manager
    SW_SERVER_CB_onPipeMessage,     // worker(event & task)
};
//--------------------------------------------------------
enum php_swoole_server_port_callback_type {
    SW_SERVER_CB_onConnect,                  // stream, worker(event)
    SW_SERVER_CB_onReceive,                  // stream, worker(event)
    SW_SERVER_CB_onClose,                    // stream, worker(event)
    SW_SERVER_CB_onPacket,                   // dgram, worker(event)
    SW_SERVER_CB_onRequest,                  // http, worker(event)
    SW_SERVER_CB_onHandshake,                // websocket, worker(event)
    SW_SERVER_CB_onBeforeHandshakeResponse,  // websocket, worker(event)
    SW_SERVER_CB_onOpen,                     // websocket, worker(event)
    SW_SERVER_CB_onMessage,                  // websocket, worker(event)
    SW_SERVER_CB_onDisconnect,               // websocket (non websocket connection), worker(event)
    SW_SERVER_CB_onBufferFull,               // worker(event)
    SW_SERVER_CB_onBufferEmpty,              // worker(event)
};

#define PHP_SWOOLE_SERVER_CALLBACK_NUM (SW_SERVER_CB_onPipeMessage + 1)
#define PHP_SWOOLE_SERVER_PORT_CALLBACK_NUM (SW_SERVER_CB_onBufferEmpty + 1)

namespace swoole {
struct ServerPortProperty;
struct TaskCo;
};  // namespace swoole

zval *php_swoole_server_zval_ptr(swoole::Server *serv);
swoole::ServerPortProperty *php_swoole_server_get_port_property(swoole::ListenPort *port);
void php_swoole_server_set_port_property(swoole::ListenPort *port, swoole::ServerPortProperty *property);

namespace swoole {

struct ServerPortProperty {
    zend::Callable *callbacks[PHP_SWOOLE_SERVER_PORT_CALLBACK_NUM];
    Server *serv;
    ListenPort *port;
    zval *zsetting;
};

struct ServerProperty {
    std::vector<zval *> ports;
    std::vector<zval *> user_processes;
    zend::Callable *callbacks[PHP_SWOOLE_SERVER_CALLBACK_NUM];
    std::unordered_map<TaskId, zend::Callable *> task_callbacks;
    std::unordered_map<TaskId, TaskCo *> task_coroutine_map;
    std::unordered_map<SessionId, std::list<Coroutine *> *> send_coroutine_map;
    std::vector<zend::Callable *> command_callbacks;
};

struct ServerObject {
    Server *serv;
    ServerProperty *property;
    zval init_arguments;
    zend_object std;

    zend_class_entry *get_ce() const {
        return Z_OBJCE_P(php_swoole_server_zval_ptr(serv));
    }

    bool isset_callback(ListenPort *port, int event_type) const {
        return (php_swoole_server_get_port_property(port)->callbacks[event_type] ||
                php_swoole_server_get_port_property(serv->get_primary_port())->callbacks[event_type]);
    }

    bool isset_callback(int event_type) const {
        return property->callbacks[event_type] != nullptr;
    }

    zend::Callable *get_callback(int event_type) const {
        return property->callbacks[event_type];
    }

    zend_bool is_websocket_server() const {
        return instanceof_function(get_ce(), swoole_websocket_server_ce);
    }

    zend_bool is_http_server() const {
        return instanceof_function(get_ce(), swoole_http_server_ce);
    }

    zend_bool is_redis_server() const {
        return instanceof_function(get_ce(), swoole_redis_server_ce);
    }

    void register_callback() const;
    void on_before_start();
    void copy_setting(zval *zsetting) const;
};

struct TaskCo {
    Coroutine *co;
    TaskId *list;
    uint32_t count;
    zval *result;
};
void register_admin_server_commands(Server *serv);
}  // namespace swoole

void php_swoole_server_register_callbacks(swServer *serv);
zend::Callable *php_swoole_server_get_callback(swServer *serv, int server_fd, int event_type);
int php_swoole_create_dir(const char *path, size_t length);
void php_swoole_server_before_start(swServer *serv, zval *zobject);
bool php_swoole_server_isset_callback(swServer *serv, swoole::ListenPort *port, int event_type);
bool php_swoole_server_send_yield(swServer *serv, swoole::SessionId session_id, zend_string *sdata);
void php_swoole_get_recv_data(swServer *serv, zval *zdata, swoole::RecvData *req);
void php_swoole_server_onConnect(swServer *, swoole::DataHead *);
int php_swoole_server_onReceive(swServer *, swoole::RecvData *);
int php_swoole_http_server_onReceive(swServer *, swoole::RecvData *);
void php_swoole_http_server_onClose(swServer *serv, swoole::DataHead *info);
void php_swoole_http2_server_onClose(swServer *serv, swoole::SessionId session_id);
int php_swoole_redis_server_onReceive(swServer *serv, swoole::RecvData *req);
int php_swoole_server_onPacket(swServer *, swoole::RecvData *);
void php_swoole_server_onClose(swServer *, swoole::DataHead *);
void php_swoole_server_onBufferFull(swServer *, swoole::DataHead *);
void php_swoole_server_onBufferEmpty(swServer *, swoole::DataHead *);

swServer *php_swoole_server_get_and_check_server(zval *zobject);
void php_swoole_server_port_deref(zend_object *object);
void php_swoole_server_set_websocket_option(swoole::ListenPort *port, zend_array *vht);
swoole::ServerObject *php_swoole_server_get_zend_object(swoole::Server *serv);
ext/swoole/ext-src/php_swoole_ssh2_hook.h000064400000053627151730542110014564 0ustar00#define SSH2_ASYNC_CALL(session, libssh2_func, ...)                                                                    \
    ssh2_async_call(session, [&](void) { return libssh2_func(__VA_ARGS__); })

#define SSH2_ASYNC_CALL_EX(T, session, libssh2_func, ...)                                                              \
    ssh2_async_call_ex<T>(session, [&](void) -> T * { return libssh2_func(__VA_ARGS__); })

#define libssh2_session_handshake(session, sockfd) SSH2_ASYNC_CALL(session, libssh2_session_handshake, session, sockfd)

#undef libssh2_session_disconnect
#define libssh2_session_disconnect(session, description)                                                               \
    SSH2_ASYNC_CALL(session, libssh2_session_disconnect_ex, (session), SSH_DISCONNECT_BY_APPLICATION, (description), "")

#undef libssh2_channel_open_session
#define libssh2_channel_open_session(session)                                                                          \
    SSH2_ASYNC_CALL_EX(LIBSSH2_CHANNEL,                                                                                \
                       session,                                                                                        \
                       libssh2_channel_open_ex,                                                                        \
                       (session),                                                                                      \
                       "session",                                                                                      \
                       sizeof("session") - 1,                                                                          \
                       LIBSSH2_CHANNEL_WINDOW_DEFAULT,                                                                 \
                       LIBSSH2_CHANNEL_PACKET_DEFAULT,                                                                 \
                       NULL,                                                                                           \
                       0)

#define libssh2_channel_setenv_ex(channel, name, name_len, value, value_len)                                           \
    SSH2_ASYNC_CALL(session, libssh2_channel_setenv_ex, channel, name, name_len, value, value_len)

#define libssh2_channel_request_pty_ex(channel, term, term_len, modes, modes_len, width, height, width_px, height_px)  \
    SSH2_ASYNC_CALL(session,                                                                                           \
                    libssh2_channel_request_pty_ex,                                                                    \
                    channel,                                                                                           \
                    term,                                                                                              \
                    term_len,                                                                                          \
                    modes,                                                                                             \
                    modes_len,                                                                                         \
                    width,                                                                                             \
                    height,                                                                                            \
                    width_px,                                                                                          \
                    height_px)

#undef libssh2_channel_shell
#define libssh2_channel_shell(channel)                                                                                 \
    SSH2_ASYNC_CALL(session, libssh2_channel_process_startup, channel, "shell", sizeof("shell") - 1, NULL, 0)

#undef libssh2_channel_exec
#define libssh2_channel_exec(channel, command)                                                                         \
    SSH2_ASYNC_CALL(session,                                                                                           \
                    libssh2_channel_process_startup,                                                                   \
                    channel,                                                                                           \
                    "exec",                                                                                            \
                    sizeof("exec") - 1,                                                                                \
                    (command),                                                                                         \
                    (unsigned int) strlen(command))

#define libssh2_channel_flush_ex(channel, streamid)                                                                    \
    SSH2_ASYNC_CALL(session, libssh2_channel_flush_ex, (channel), (streamid))

#define libssh2_channel_read_ex(channel, streamid, buf, len)                                                           \
    SSH2_ASYNC_CALL(session, libssh2_channel_read_ex, channel, streamid, buf, len)

#undef libssh2_channel_write_ex
#define libssh2_channel_write_ex(channel, streamid, buf, len)                                                          \
    SSH2_ASYNC_CALL(session, libssh2_channel_write_ex, channel, streamid, buf, len)

#undef libssh2_channel_read
#define libssh2_channel_read(channel, buf, buflen) libssh2_channel_read_ex((channel), 0, (buf), (buflen))

#undef libssh2_channel_write
#define libssh2_channel_write(channel, buf, buflen) libssh2_channel_write_ex((channel), 0, (buf), (buflen))

#undef libssh2_channel_eof
#define libssh2_channel_eof(channel) SSH2_ASYNC_CALL(session, libssh2_channel_eof, channel)

#undef libssh2_channel_close
#define libssh2_channel_close(channel) SSH2_ASYNC_CALL(session, libssh2_channel_close, channel)

#undef libssh2_channel_send_eof
#define libssh2_channel_send_eof(channel) SSH2_ASYNC_CALL(session, libssh2_channel_send_eof, channel)

#undef libssh2_channel_get_exit_status
#define libssh2_channel_get_exit_status(channel) SSH2_ASYNC_CALL(session, libssh2_channel_get_exit_status, channel)

#undef libssh2_channel_request_pty_size_ex
#define libssh2_channel_request_pty_size_ex(channel, width, height, width_px, height_px)                               \
    SSH2_ASYNC_CALL(session, libssh2_channel_request_pty_size_ex, channel, width, height, width_px, height_px)

#undef libssh2_channel_forward_listen_ex
#define libssh2_channel_forward_listen_ex(session, host, port, addr, num_connections)                                  \
    SSH2_ASYNC_CALL_EX(                                                                                                \
        LIBSSH2_LISTENER, session, libssh2_channel_forward_listen_ex, session, host, port, addr, num_connections)

#undef libssh2_channel_forward_accept
#define libssh2_channel_forward_accept(listener)                                                                       \
    SSH2_ASYNC_CALL_EX(LIBSSH2_CHANNEL, session, libssh2_channel_forward_accept, listener)

#undef libssh2_channel_forward_cancel
#define libssh2_channel_forward_cancel(listener) SSH2_ASYNC_CALL(session, libssh2_channel_forward_cancel, listener)

#undef libssh2_channel_direct_tcpip
#define libssh2_channel_direct_tcpip(session, host, port)                                                              \
    SSH2_ASYNC_CALL_EX(                                                                                                \
        LIBSSH2_CHANNEL, session, libssh2_channel_direct_tcpip_ex, (session), (host), (port), "127.0.0.1", 22)

#undef libssh2_sftp_fstat
#define libssh2_sftp_fstat(handle, attrs) SSH2_ASYNC_CALL(session, libssh2_sftp_fstat_ex, handle, attrs, 0)

#define libssh2_sftp_stat_ex(sftp, path, path_len, stat_type, attrs)                                                   \
    SSH2_ASYNC_CALL(session, libssh2_sftp_stat_ex, sftp, path, path_len, stat_type, attrs)

#define libssh2_sftp_symlink_ex(sftp, path, path_len, target, target_len, link_type)                                   \
    SSH2_ASYNC_CALL(session, libssh2_sftp_symlink_ex, sftp, path, path_len, target, target_len, link_type)

#undef libssh2_sftp_open
#define libssh2_sftp_open(sftp, filename, flags, mode)                                                                 \
    SSH2_ASYNC_CALL_EX(LIBSSH2_SFTP_HANDLE,                                                                            \
                       session,                                                                                        \
                       libssh2_sftp_open_ex,                                                                           \
                       (sftp),                                                                                         \
                       (filename),                                                                                     \
                       strlen(filename),                                                                               \
                       (flags),                                                                                        \
                       (mode),                                                                                         \
                       LIBSSH2_SFTP_OPENFILE)

#undef libssh2_sftp_opendir
#define libssh2_sftp_opendir(sftp, path)                                                                               \
    SSH2_ASYNC_CALL_EX(                                                                                                \
        LIBSSH2_SFTP_HANDLE, session, libssh2_sftp_open_ex, (sftp), (path), strlen(path), 0, 0, LIBSSH2_SFTP_OPENDIR)

#undef libssh2_sftp_readdir
#define libssh2_sftp_readdir(handle, buffer, buffer_maxlen, attrs)                                                     \
    SSH2_ASYNC_CALL(session, libssh2_sftp_readdir_ex, (handle), (buffer), (buffer_maxlen), NULL, 0, (attrs))

#undef libssh2_sftp_tell
#define libssh2_sftp_tell(handle) SSH2_ASYNC_CALL(session, libssh2_sftp_tell, handle)

#undef libssh2_sftp_read
#define libssh2_sftp_read(handle, buffer, count)                                                                       \
    SSH2_ASYNC_CALL(session, libssh2_sftp_read, (handle), (buffer), (count))

#undef libssh2_sftp_write
#define libssh2_sftp_write(handle, buffer, count)                                                                      \
    SSH2_ASYNC_CALL(session, libssh2_sftp_write, (handle), (buffer), (count))

#define libssh2_sftp_init(session) SSH2_ASYNC_CALL_EX(LIBSSH2_SFTP, session, libssh2_sftp_init, session)

#undef libssh2_scp_recv
#define libssh2_scp_recv(session, path, stat)                                                                          \
    SSH2_ASYNC_CALL_EX(LIBSSH2_CHANNEL, session, libssh2_scp_recv, session, path, stat)

#undef libssh2_scp_send_ex
#define libssh2_scp_send_ex(session, path, mode, size, atime, mtime)                                                   \
    SSH2_ASYNC_CALL_EX(LIBSSH2_CHANNEL, session, libssh2_scp_send_ex, session, path, mode, size, atime, mtime)

#undef libssh2_sftp_close
#define libssh2_sftp_close(handle) SSH2_ASYNC_CALL(session, libssh2_sftp_close_handle, handle)

#define libssh2_sftp_unlink_ex(sftp, filename, filename_len)                                                           \
    SSH2_ASYNC_CALL(session, libssh2_sftp_unlink_ex, (sftp), (filename), filename_len)

#undef libssh2_sftp_unlink
#define libssh2_sftp_unlink(sftp, filename) libssh2_sftp_unlink_ex((sftp), (filename), strlen(filename))

#define libssh2_sftp_rename_ex(sftp, source_filename, srouce_filename_len, dest_filename, dest_filename_len, flags)    \
    SSH2_ASYNC_CALL(session,                                                                                           \
                    libssh2_sftp_rename_ex,                                                                            \
                    sftp,                                                                                              \
                    source_filename,                                                                                   \
                    srouce_filename_len,                                                                               \
                    dest_filename,                                                                                     \
                    dest_filename_len,                                                                                 \
                    flags)

#undef libssh2_sftp_rename
#define libssh2_sftp_rename(sftp, sourcefile, destfile)                                                                \
    libssh2_sftp_rename_ex((sftp),                                                                                     \
                           (sourcefile),                                                                               \
                           strlen(sourcefile),                                                                         \
                           (destfile),                                                                                 \
                           strlen(destfile),                                                                           \
                           LIBSSH2_SFTP_RENAME_OVERWRITE | LIBSSH2_SFTP_RENAME_ATOMIC | LIBSSH2_SFTP_RENAME_NATIVE)

#define libssh2_sftp_mkdir_ex(sftp, path, path_len, mode)                                                              \
    SSH2_ASYNC_CALL(session, libssh2_sftp_mkdir_ex, (sftp), (path), path_len, (mode))

#undef libssh2_sftp_mkdir
#define libssh2_sftp_mkdir(sftp, path, mode) libssh2_sftp_mkdir_ex((sftp), (path), strlen(path), (mode))

#define libssh2_sftp_rmdir_ex(sftp, path, path_len)                                                                    \
    SSH2_ASYNC_CALL(session, libssh2_sftp_rmdir_ex, (sftp), (path), path_len)

#undef libssh2_sftp_rmdir
#define libssh2_sftp_rmdir(sftp, path) libssh2_sftp_rmdir_ex((sftp), (path), strlen(path))

/* Agent related functions */
#undef libssh2_agent_connect
#define libssh2_agent_connect(agent) SSH2_ASYNC_CALL(session, libssh2_agent_connect, agent)

#undef libssh2_agent_list_identities
#define libssh2_agent_list_identities(agent) SSH2_ASYNC_CALL(session, libssh2_agent_list_identities, agent)

#undef libssh2_agent_get_identity
#define libssh2_agent_get_identity(agent, identity, prev_identity)                                                     \
    SSH2_ASYNC_CALL(session, libssh2_agent_get_identity, agent, identity, prev_identity)

#undef libssh2_agent_userauth
#define libssh2_agent_userauth(agent, username, identity)                                                              \
    SSH2_ASYNC_CALL(session, libssh2_agent_userauth, agent, username, identity)

#undef libssh2_agent_disconnect
#define libssh2_agent_disconnect(agent) SSH2_ASYNC_CALL(session, libssh2_agent_disconnect, agent)

/* libssh2_agent_free is just memory operation, no network IO, so don't async it */

/* User authentication functions */
#undef libssh2_userauth_list
#define libssh2_userauth_list(session, username, username_len)                                                         \
    SSH2_ASYNC_CALL_EX(char, session, libssh2_userauth_list, session, username, username_len)

#undef libssh2_userauth_password_ex
#define libssh2_userauth_password_ex(session, username, username_len, password, password_len, change_cb)               \
    SSH2_ASYNC_CALL(                                                                                                   \
        session, libssh2_userauth_password_ex, session, username, username_len, password, password_len, change_cb)

#undef libssh2_userauth_publickey_fromfile_ex
#define libssh2_userauth_publickey_fromfile_ex(session, username, username_len, publickey, privatekey, passphrase)     \
    SSH2_ASYNC_CALL(session,                                                                                           \
                    libssh2_userauth_publickey_fromfile_ex,                                                            \
                    (session),                                                                                         \
                    (username),                                                                                        \
                    (username_len),                                                                                    \
                    (publickey),                                                                                       \
                    (privatekey),                                                                                      \
                    (passphrase))

#undef libssh2_userauth_publickey_fromfile
#define libssh2_userauth_publickey_fromfile(session, username, publickey, privatekey, passphrase)                      \
    libssh2_userauth_publickey_fromfile_ex(                                                                            \
        (session), (username), (unsigned int) strlen(username), (publickey), (privatekey), (passphrase))

#undef libssh2_userauth_publickey_frommemory
#define libssh2_userauth_publickey_frommemory(                                                                         \
    session, username, username_len, pubkeydata, pubkeydata_len, privkeydata, privkeydata_len, passphrase)             \
    SSH2_ASYNC_CALL(session,                                                                                           \
                    libssh2_userauth_publickey_frommemory,                                                             \
                    session,                                                                                           \
                    username,                                                                                          \
                    username_len,                                                                                      \
                    pubkeydata,                                                                                        \
                    pubkeydata_len,                                                                                    \
                    privkeydata,                                                                                       \
                    privkeydata_len,                                                                                   \
                    passphrase)

#undef libssh2_userauth_hostbased_fromfile_ex
#define libssh2_userauth_hostbased_fromfile_ex(session,                                                                \
                                               username,                                                               \
                                               username_len,                                                           \
                                               pubkeyfile,                                                             \
                                               privkeyfile,                                                            \
                                               passphrase,                                                             \
                                               hostname,                                                               \
                                               hostname_len,                                                           \
                                               local_username,                                                         \
                                               local_username_len)                                                     \
    SSH2_ASYNC_CALL(session,                                                                                           \
                    libssh2_userauth_hostbased_fromfile_ex,                                                            \
                    session,                                                                                           \
                    username,                                                                                          \
                    username_len,                                                                                      \
                    pubkeyfile,                                                                                        \
                    privkeyfile,                                                                                       \
                    passphrase,                                                                                        \
                    hostname,                                                                                          \
                    hostname_len,                                                                                      \
                    local_username,                                                                                    \
                    local_username_len)

#undef libssh2_userauth_keyboard_interactive
#define libssh2_userauth_keyboard_interactive(session, username, response_callback)                                    \
    SSH2_ASYNC_CALL(session,                                                                                           \
                    libssh2_userauth_keyboard_interactive_ex,                                                          \
                    (session),                                                                                         \
                    (username),                                                                                        \
                    (unsigned int) strlen(username),                                                                   \
                    (response_callback))

#undef libssh2_userauth_authenticated
#define libssh2_userauth_authenticated(session) SSH2_ASYNC_CALL(session, libssh2_userauth_authenticated, session)ext/swoole/ext-src/php_swoole_ssh2_def.h000064400000002443151730542110014350 0ustar00#include "php.h"

BEGIN_EXTERN_C()
ZEND_FUNCTION(ssh2_connect);
ZEND_FUNCTION(ssh2_disconnect);
ZEND_FUNCTION(ssh2_methods_negotiated);
ZEND_FUNCTION(ssh2_fingerprint);
ZEND_FUNCTION(ssh2_auth_none);
ZEND_FUNCTION(ssh2_auth_password);
ZEND_FUNCTION(ssh2_auth_pubkey_file);
ZEND_FUNCTION(ssh2_auth_pubkey);
ZEND_FUNCTION(ssh2_auth_hostbased_file);
ZEND_FUNCTION(ssh2_forward_listen);
ZEND_FUNCTION(ssh2_forward_accept);
ZEND_FUNCTION(ssh2_shell);
ZEND_FUNCTION(ssh2_shell_resize);
ZEND_FUNCTION(ssh2_exec);
ZEND_FUNCTION(ssh2_tunnel);
ZEND_FUNCTION(ssh2_scp_recv);
ZEND_FUNCTION(ssh2_scp_send);
ZEND_FUNCTION(ssh2_fetch_stream);
ZEND_FUNCTION(ssh2_send_eof);
ZEND_FUNCTION(ssh2_sftp);
ZEND_FUNCTION(ssh2_sftp_rename);
ZEND_FUNCTION(ssh2_sftp_unlink);
ZEND_FUNCTION(ssh2_sftp_mkdir);
ZEND_FUNCTION(ssh2_sftp_rmdir);
ZEND_FUNCTION(ssh2_sftp_chmod);
ZEND_FUNCTION(ssh2_sftp_stat);
ZEND_FUNCTION(ssh2_sftp_lstat);
ZEND_FUNCTION(ssh2_sftp_symlink);
ZEND_FUNCTION(ssh2_sftp_readlink);
ZEND_FUNCTION(ssh2_sftp_realpath);
ZEND_FUNCTION(ssh2_publickey_init);
ZEND_FUNCTION(ssh2_publickey_add);
ZEND_FUNCTION(ssh2_publickey_remove);
ZEND_FUNCTION(ssh2_publickey_list);
ZEND_FUNCTION(ssh2_auth_agent);
END_EXTERN_C()

int php_swoole_ssh2_mshutdown();
int php_swoole_ssh2_minit(int module_number);
void php_swoole_ssh2_minfo();
ext/swoole/ext-src/php_swoole_cxx.h000064400000066060151730542120013463 0ustar00/*
  +----------------------------------------------------------------------+
  | Swoole                                                               |
  +----------------------------------------------------------------------+
  | This source file is subject to version 2.0 of the Apache license,    |
  | that is bundled with this package in the file LICENSE, and is        |
  | available through the world-wide-web at the following url:           |
  | http://www.apache.org/licenses/LICENSE-2.0.html                      |
  | If you did not receive a copy of the Apache2.0 license and are unable|
  | to obtain it through the world-wide-web, please send a note to       |
  | license@swoole.com so we can mail you a copy immediately.            |
  +----------------------------------------------------------------------+
  | Author: Tianfeng Han  <rango@swoole.com>                             |
  +----------------------------------------------------------------------+
*/

#pragma once

#include "php_swoole_private.h"
#include "php_swoole_coroutine.h"

#include "swoole_socket_impl.h"
#include "swoole_protocol.h"
#include "swoole_util.h"

#include <string>

// clang-format off
//----------------------------------Swoole known string------------------------------------

#define SW_ZEND_KNOWN_STRINGS(_) \
    _(SW_ZEND_STR_TYPE,                     "type") \
    _(SW_ZEND_STR_HOST,                     "host") \
    _(SW_ZEND_STR_USER_AGENT,               "user-agent") \
    _(SW_ZEND_STR_ACCEPT,                   "accept") \
    _(SW_ZEND_STR_CONTENT_TYPE,             "content-type") \
    _(SW_ZEND_STR_CONTENT_LENGTH,           "content-length") \
    _(SW_ZEND_STR_AUTHORIZATION,            "authorization") \
    _(SW_ZEND_STR_CONNECTION,               "connection") \
    _(SW_ZEND_STR_ACCEPT_ENCODING,          "accept-encoding") \
    _(SW_ZEND_STR_PORT,                     "port") \
    _(SW_ZEND_STR_SETTING,                  "setting") \
    _(SW_ZEND_STR_ID,                       "id") \
    _(SW_ZEND_STR_FD,                       "fd") \
    _(SW_ZEND_STR_SOCK,                     "sock") \
    _(SW_ZEND_STR_PIPE,                     "pipe") \
    _(SW_ZEND_STR_HEADERS,                  "headers") \
    _(SW_ZEND_STR_REQUEST_METHOD,           "requestMethod") \
    _(SW_ZEND_STR_REQUEST_HEADERS,          "requestHeaders") \
    _(SW_ZEND_STR_REQUEST_BODY,             "requestBody") \
    _(SW_ZEND_STR_UPLOAD_FILES,             "uploadFiles") \
    _(SW_ZEND_STR_COOKIES,                  "cookies") \
    _(SW_ZEND_STR_DOWNLOAD_FILE,            "downloadFile") \
    _(SW_ZEND_STR_DOWNLOAD_OFFSET,          "downloadOffset") \
    _(SW_ZEND_STR_SERVER,                   "server") \
    _(SW_ZEND_STR_HEADER,                   "header") \
    _(SW_ZEND_STR_GET,                      "get") \
    _(SW_ZEND_STR_POST,                     "post") \
    _(SW_ZEND_STR_FILES,                    "files") \
    _(SW_ZEND_STR_TMPFILES,                 "tmpfiles") \
    _(SW_ZEND_STR_COOKIE,                   "cookie") \
    _(SW_ZEND_STR_METHOD,                   "method") \
    _(SW_ZEND_STR_PATH,                     "path") \
    _(SW_ZEND_STR_DATA,                     "data") \
    _(SW_ZEND_STR_PIPELINE,                 "pipeline") \
    _(SW_ZEND_STR_USE_PIPELINE_READ,        "usePipelineRead") \
    _(SW_ZEND_STR_TRAILER,                  "trailer") \
    _(SW_ZEND_STR_MASTER_PID,               "master_pid") \
    _(SW_ZEND_STR_CALLBACK,                 "callback") \
    _(SW_ZEND_STR_OPCODE,                   "opcode") \
    _(SW_ZEND_STR_CODE,                     "code") \
    _(SW_ZEND_STR_REASON,                   "reason") \
    _(SW_ZEND_STR_FLAGS,                    "flags") \
    _(SW_ZEND_STR_FINISH,                   "finish") \
    _(SW_ZEND_STR_IN_COROUTINE,             "in_coroutine") \
    _(SW_ZEND_STR_PRIVATE_DATA,             "private_data") \
    _(SW_ZEND_STR_CLASS_NAME_RESOLVER,      "Swoole\\NameResolver") \
    _(SW_ZEND_STR_SOCKET,                   "socket") \
    _(SW_ZEND_STR_ADDR_LOOPBACK_V4,         "127.0.0.1") \
    _(SW_ZEND_STR_ADDR_LOOPBACK_V6,         "::1")  \
    _(SW_ZEND_STR_REQUEST_METHOD2,          "request_method")  \
    _(SW_ZEND_STR_REQUEST_URI,              "request_uri")  \
    _(SW_ZEND_STR_PATH_INFO,                "path_info")  \
    _(SW_ZEND_STR_REQUEST_TIME,             "request_time")  \
    _(SW_ZEND_STR_REQUEST_TIME_FLOAT,       "request_time_float")  \
    _(SW_ZEND_STR_SERVER_PROTOCOL,          "server_protocol")  \
    _(SW_ZEND_STR_SERVER_PORT,              "server_port")  \
    _(SW_ZEND_STR_SERVER_ADDR,              "server_addr")  \
    _(SW_ZEND_STR_REMOTE_PORT,              "remote_port")  \
    _(SW_ZEND_STR_REMOTE_ADDR,              "remote_addr")  \
    _(SW_ZEND_STR_MASTER_TIME,              "master_time") \
    _(SW_ZEND_STR_QUERY_STRING,             "query_string") \
    _(SW_ZEND_STR_HTTP10,                   "HTTP/1.0") \
    _(SW_ZEND_STR_HTTP11,                   "HTTP/1.1") \
    _(SW_ZEND_STR_HTTP2,                    "HTTP/2") \

typedef enum sw_zend_known_string_id {
#define _SW_ZEND_STR_ID(id, str) id,
SW_ZEND_KNOWN_STRINGS(_SW_ZEND_STR_ID)
#undef _SW_ZEND_STR_ID
    SW_ZEND_STR_LAST_KNOWN
} sw_zend_known_string_id;

// clang-format on

#define SW_ZSTR_KNOWN(idx) sw_zend_known_strings[idx]
extern zend_string **sw_zend_known_strings;

//----------------------------------Swoole known string------------------------------------

#define SW_SET_CLASS_CREATE_WITH_ITS_OWN_HANDLERS(module)                                                              \
    module##_ce->create_object = [](zend_class_entry *ce) { return sw_zend_create_object(ce, &module##_handlers); }

/**
 * It is safe across coroutines,
 * add reference count, prevent the socket pointer being released
 */
#define SW_CLIENT_GET_SOCKET_SAFE(__sock, __zsocket)                                                                   \
    SocketImpl *__sock = nullptr;                                                                                      \
    zend::Variable tmp_socket;                                                                                         \
    if (ZVAL_IS_OBJECT(__zsocket)) {                                                                                   \
        __sock = php_swoole_get_socket(__zsocket);                                                                     \
        tmp_socket.assign(__zsocket);                                                                                  \
    }

#define SW_CLIENT_PRESERVE_SOCKET(__zsocket)                                                                           \
    zend::Variable tmp_socket;                                                                                         \
    if (ZVAL_IS_OBJECT(__zsocket)) {                                                                                   \
        tmp_socket.assign(__zsocket);                                                                                  \
    }

SW_API bool php_swoole_is_enable_coroutine();
SW_API zend_object *php_swoole_create_socket(enum swSocketType type);
SW_API zend_object *php_swoole_create_socket_from_fd(int fd, enum swSocketType type);
SW_API zend_object *php_swoole_create_socket_from_fd(int fd, int _domain, int _type, int _protocol);
SW_API bool php_swoole_export_socket(zval *zobject, SocketImpl *_socket);
SW_API zend_object *php_swoole_dup_socket(int fd, enum swSocketType type);
SW_API void php_swoole_init_socket_object(zval *zobject, SocketImpl *socket);
SW_API SocketImpl *php_swoole_get_socket(const zval *zobject);
SW_API bool php_swoole_socket_is_closed(const zval *zobject);
SW_API bool php_swoole_socket_set_ssl(SocketImpl *sock, const zval *zset);
SW_API bool php_swoole_socket_set_protocol(SocketImpl *sock, const zval *zset);
SW_API bool php_swoole_socket_set(SocketImpl *cli, const zval *zset);
SW_API void php_swoole_socket_set_error_properties(const zval *zobject, int code);
SW_API void php_swoole_socket_set_error_properties(const zval *zobject, int code, const char *msg);
SW_API void php_swoole_socket_set_error_properties(const zval *zobject, const SocketImpl *socket);
#define php_swoole_client_set php_swoole_socket_set
SW_API php_stream *php_swoole_create_stream_from_socket(php_socket_t _fd,
                                                        int domain,
                                                        int type,
                                                        int protocol STREAMS_DC);
SW_API php_stream *php_swoole_create_stream_from_pipe(int fd, const char *mode, const char *persistent_id STREAMS_DC);
SW_API php_stream_ops *php_swoole_get_ori_php_stream_stdio_ops();
SW_API zif_handler php_swoole_get_original_handler(const char *name, size_t len);
SW_API bool php_swoole_call_original_handler(const char *name, size_t len, INTERNAL_FUNCTION_PARAMETERS);

// timer
SW_API bool php_swoole_timer_clear(swoole::TimerNode *tnode);
SW_API bool php_swoole_timer_clear_all();

static inline bool php_swoole_is_fatal_error() {
    return PG(last_error_message) && (PG(last_error_type) & E_FATAL_ERRORS);
}

ssize_t php_swoole_length_func(const swoole::Protocol *, NetSocket *, swoole::PacketLength *);
SW_API zend_long php_swoole_parse_to_size(zval *zv);
SW_API zend_string *php_swoole_serialize(zval *zdata);
SW_API bool php_swoole_unserialize(const zend_string *data, zval *zv);

#ifdef SW_HAVE_ZLIB
int php_swoole_zlib_decompress(z_stream *stream, swoole::String *buffer, char *body, int length);
#endif

swoole::NameResolver::Context *php_swoole_name_resolver_get_context(zval *zobject);
std::string php_swoole_name_resolver_lookup(const std::string &name,
                                            swoole::NameResolver::Context *ctx,
                                            void *_resolver);
bool php_swoole_name_resolver_add(zval *zresolver);

const swoole::Allocator *sw_php_allocator();
const swoole::Allocator *sw_zend_string_allocator();

#if defined(__FreeBSD__) || defined(__OpenBSD__) || defined(__NetBSD__) || defined(__APPLE__)
#define SOL_TCP IPPROTO_TCP
#endif

#ifdef __APPLE__
#define TCP_INFO TCP_CONNECTION_INFO
using tcp_info = tcp_connection_info;
#endif

#ifdef TCP_INFO
std::unordered_map<std::string, uint64_t> sw_socket_parse_tcp_info(tcp_info *info);
#endif

static inline bool php_swoole_async(bool blocking, const std::function<void(void)> &fn) {
    if (!blocking && swoole_coroutine_is_in()) {
        return swoole::coroutine::async(fn);
    } else {
        fn();
        return true;
    }
}

namespace zend {
//-----------------------------------namespace begin--------------------------------------------
class String {
  public:
    String() {
        str = nullptr;
    }

    String(const char *_str, size_t len) {
        str = zend_string_init(_str, len, false);
    }

    String(const std::string &_str) {
        str = zend_string_init(_str.c_str(), _str.length(), false);
    }

    String(zval *v) {
        str = zval_get_string(v);
    }

    String(zend_string *v, bool copy) {
        if (copy) {
            str = zend_string_copy(v);
        } else {
            str = v;
        }
    }

    String(const String &o) {
        str = zend_string_copy(o.str);
    }

    String(String &&o) noexcept {
        str = o.str;
        o.str = nullptr;
    }

    String &operator=(zval *v) {
        release();
        str = zval_get_string(v);
        return *this;
    }

    String &operator=(String &&o) noexcept {
        release();
        str = o.str;
        o.str = nullptr;
        return *this;
    }

    String &operator=(const String &o) {
        if (&o == this) {
            return *this;
        }
        release();
        str = zend_string_copy(o.str);
        return *this;
    }

    char *val() const {
        return ZSTR_VAL(str);
    }

    size_t len() const {
        return ZSTR_LEN(str);
    }

    zend_string *get() const {
        return str;
    }

    void rtrim() const {
        ZSTR_LEN(str) = swoole::rtrim(val(), len());
    }

    std::string to_std_string() const {
        return {val(), len()};
    }

    char *dup() const {
        return sw_likely(len() > 0) ? sw_strndup(val(), len()) : nullptr;
    }

    char *edup() const {
        return sw_likely(len() > 0) ? estrndup(val(), len()) : nullptr;
    }

    void release() {
        if (str) {
            zend_string_release(str);
            str = nullptr;
        }
    }

    ~String() {
        release();
    }

  private:
    zend_string *str;
};

class KeyValue {
  public:
    zend_ulong index;
    zend_string *key;
    zval zvalue;

    KeyValue(zend_ulong _index, zend_string *_key, zval *_zvalue) {
        index = _index;
        key = _key ? zend_string_copy(_key) : nullptr;
        ZVAL_DEREF(_zvalue);
        zvalue = *_zvalue;
        Z_TRY_ADDREF(zvalue);
    }

    void add_to(zval *zarray) {
        HashTable *ht = Z_ARRVAL_P(zarray);
        zval *dest_elem = !key ? zend_hash_index_update(ht, index, &zvalue) : zend_hash_update(ht, key, &zvalue);
        Z_TRY_ADDREF_P(dest_elem);
    }

    ~KeyValue() {
        if (key) {
            zend_string_release(key);
        }
        zval_ptr_dtor(&zvalue);
    }
};

class ArrayIterator {
  public:
    explicit ArrayIterator(Bucket *p) {
        _ptr = p;
        _key = _ptr->key;
        _val = &_ptr->val;
        _index = _ptr->h;
        pe = p;
    }

    ArrayIterator(Bucket *p, Bucket *_pe) {
        _ptr = p;
        _key = _ptr->key;
        _val = &_ptr->val;
        _index = _ptr->h;
        pe = _pe;
        skipUndefBucket();
    }

    void operator++(int i) {
        ++_ptr;
        skipUndefBucket();
    }

    bool operator!=(ArrayIterator b) const {
        return b.ptr() != _ptr;
    }

    std::string key() const {
        return {_key->val, _key->len};
    }

    zend_ulong index() const {
        return _index;
    }

    zval *value() const {
        return _val;
    }

    Bucket *ptr() const {
        return _ptr;
    }

  private:
    void skipUndefBucket() {
        while (_ptr != pe) {
            _val = &_ptr->val;
            if (_val && Z_TYPE_P(_val) == IS_INDIRECT) {
                _val = Z_INDIRECT_P(_val);
            }
            if (UNEXPECTED(Z_TYPE_P(_val) == IS_UNDEF)) {
                ++_ptr;
                continue;
            }
            if (_ptr->key) {
                _key = _ptr->key;
                _index = 0;
            } else {
                _index = _ptr->h;
                _key = nullptr;
            }
            break;
        }
    }

    zval *_val;
    zend_string *_key;
    Bucket *_ptr;
    Bucket *pe;
    zend_ulong _index;
};

class Array {
  public:
    zval *arr;

    Array(zval *_arr) {
        assert(Z_TYPE_P(_arr) == IS_ARRAY);
        arr = _arr;
    }

    size_t count() const {
        return zend_hash_num_elements(Z_ARRVAL_P(arr));
    }

    bool set(zend_ulong index, zval *value) const {
        return add_index_zval(arr, index, value) == SUCCESS;
    }

    bool append(zval *value) const {
        return add_next_index_zval(arr, value) == SUCCESS;
    }

    bool set(zend_ulong index, zend_resource *res) const {
        zval tmp;
        ZVAL_RES(&tmp, res);
        return set(index, &tmp);
    }

    ArrayIterator begin() const {
        return {Z_ARRVAL_P(arr)->arData, Z_ARRVAL_P(arr)->arData + Z_ARRVAL_P(arr)->nNumUsed};
    }

    ArrayIterator end() const {
        return ArrayIterator(Z_ARRVAL_P(arr)->arData + Z_ARRVAL_P(arr)->nNumUsed);
    }
};

class Variable {
  public:
    zval value;

    Variable() {
        value = {};
    }

    Variable(zval *zvalue) {
        assign(zvalue);
    }

    Variable(const char *str, size_t l_str) {
        ZVAL_STRINGL(&value, str, l_str);
    }

    Variable(const char *str) {
        ZVAL_STRING(&value, str);
    }

    Variable(const std::string &str) {
        ZVAL_STRINGL(&value, str.c_str(), str.length());
    }

    Variable(const Variable &&src) noexcept {
        value = src.value;
        add_ref();
    }

    Variable(Variable &&src) noexcept {
        value = src.value;
        src.reset();
    }

    Variable &operator=(zval *zvalue) {
        assign(zvalue);
        return *this;
    }

    Variable &operator=(const Variable &src) {
        value = src.value;
        add_ref();
        return *this;
    }

    void assign(zval *zvalue) {
        value = *zvalue;
        add_ref();
    }

    zval *ptr() {
        return &value;
    }

    void reset() {
        ZVAL_UNDEF(&value);
    }

    void add_ref() {
        Z_TRY_ADDREF_P(&value);
    }

    void del_ref() {
        Z_TRY_DELREF_P(&value);
    }

    ~Variable() {
        zval_ptr_dtor(&value);
    }
};

class CharPtr {
  private:
    char *str_;

  public:
    CharPtr() {
        str_ = nullptr;
    }

    CharPtr(const char *str) {
        str_ = estrndup(str, strlen(str));
    }

    CharPtr(const char *str, size_t len) {
        str_ = estrndup(str, len);
    }

    CharPtr &operator=(const char *str) {
        assign(str, strlen(str));
        return *this;
    }

    void release() {
        if (str_) {
            efree(str_);
            str_ = nullptr;
        }
    }

    void assign(const char *str, size_t len) {
        release();
        str_ = estrndup(str, len);
    }

    void assign_tolower(const char *str, size_t len) {
        release();
        str_ = zend_str_tolower_dup(str, len);
    }

    ~CharPtr() {
        release();
    }

    char *get() const {
        return str_;
    }
};

class Callable {
  private:
    zval zfn;
    zend_fcall_info_cache fcc;
    char *fn_name = nullptr;

    Callable() {}

  public:
    Callable(zval *_zfn);
    ~Callable();
    uint32_t refcount() const;

    zend_refcounted *refcount_ptr() {
        return sw_get_refcount_ptr(&zfn);
    }

    zend_fcall_info_cache *ptr() {
        return &fcc;
    }

    bool ready() const {
        return !ZVAL_IS_UNDEF(&zfn);
    }

    Callable *dup() const {
        auto copy = new Callable();
        copy->fcc = fcc;
        copy->zfn = zfn;
        zval_add_ref(&copy->zfn);
        if (fn_name) {
            copy->fn_name = estrdup(fn_name);
        }
        return copy;
    }

    bool call(uint32_t argc, zval *argv, zval *retval) {
        return sw_zend_call_function_ex(&zfn, &fcc, argc, argv, retval) == SUCCESS;
    }
};

#define SW_CONCURRENCY_HASHMAP_LOCK(code)                                                                              \
    if (locked_) {                                                                                                     \
        code;                                                                                                          \
    } else {                                                                                                           \
        lock_.lock();                                                                                                  \
        code;                                                                                                          \
        lock_.unlock();                                                                                                \
    }

template <typename KeyT, typename ValueT>
class ConcurrencyHashMap {
    std::unordered_map<KeyT, ValueT> map_;
    std::mutex lock_;
    bool locked_;
    ValueT default_value_;

  public:
    ConcurrencyHashMap(ValueT _default_value) : map_(), lock_() {
        default_value_ = _default_value;
        locked_ = false;
    }

    void set(const KeyT &key, const ValueT &value) {
        SW_CONCURRENCY_HASHMAP_LOCK(map_[key] = value);
    }

    ValueT get(const KeyT &key) {
        ValueT value;
        auto fn = [&]() -> ValueT {
            auto iter = map_.find(key);
            if (iter == map_.end()) {
                return default_value_;
            }
            return iter->second;
        };
        SW_CONCURRENCY_HASHMAP_LOCK(value = fn());
        return value;
    }

    bool exists(const KeyT &key) {
        std::unique_lock<std::mutex> _lock(lock_);
        return map_.find(key) != map_.end();
    }

    void del(const KeyT &key) {
        SW_CONCURRENCY_HASHMAP_LOCK(map_.erase(key));
    }

    void clear() {
        SW_CONCURRENCY_HASHMAP_LOCK(map_.clear());
    }

    void each(const std::function<void(KeyT key, ValueT value)> &cb) {
        std::unique_lock<std::mutex> _lock(lock_);
        locked_ = true;
        for (auto &iter : map_) {
            cb(iter.first, iter.second);
        }
        locked_ = false;
    }
};

namespace function {
/* must use this API to call event callbacks to ensure that exceptions are handled correctly */
bool call(zend_fcall_info_cache *fci_cache, uint32_t argc, zval *argv, zval *retval, const bool enable_coroutine);
Variable call(const std::string &func_name, int argc, zval *argv);

static inline bool call(Callable *cb, uint32_t argc, zval *argv, zval *retval, const bool enable_coroutine) {
    return call(cb->ptr(), argc, argv, retval, enable_coroutine);
}
}  // namespace function

struct Function {
    zend_fcall_info fci;
    zend_fcall_info_cache fci_cache;

    bool call(zval *retval, const bool enable_coroutine) {
        return function::call(&fci_cache, fci.param_count, fci.params, retval, enable_coroutine);
    }
};

void known_strings_init();
void known_strings_dtor();
void unserialize(zval *return_value, const char *buf, size_t buf_len, HashTable *options);
void json_decode(zval *return_value, const char *str, size_t str_len, zend_long options, zend_long zend_long);
zend_function *get_function(const char *fname, size_t fname_len);
zend_function *get_function(const std::string &fname);
zend_function *get_function(const zend_string *fname);
zend_function *get_function(const zend_array *function_table, const char *name, size_t name_len);

static inline zend_string *fetch_zend_string_by_val(void *val) {
    return (zend_string *) ((char *) val - XtOffsetOf(zend_string, val));
}

static inline void assign_zend_string_by_val(zval *zdata, char *addr, size_t length) {
    zend_string *zstr = fetch_zend_string_by_val(addr);
    addr[length] = 0;
    zstr->len = length;
    ZVAL_STR(zdata, zstr);
}

static inline void array_set(zval *arg, const char *key, size_t l_key, zval *zvalue) {
    Z_TRY_ADDREF_P(zvalue);
    add_assoc_zval_ex(arg, key, l_key, zvalue);
}

static inline void array_set(zval *arg, const char *key, size_t l_key, const char *value, size_t l_value) {
    zval ztmp;
    ZVAL_STRINGL(&ztmp, value, l_value);
    add_assoc_zval_ex(arg, key, l_key, &ztmp);
}

static inline void array_set(zval *arg, const char *key, size_t l_key, bool value) {
    add_assoc_bool_ex(arg, key, l_key, value);
}

static inline void array_set(zval *arg, const char *key, size_t l_key, const char *value) {
    add_assoc_string_ex(arg, key, l_key, value);
}

static inline void array_set(zval *arg, zend_ulong index, zval *zvalue) {
    Z_TRY_ADDREF_P(zvalue);
    zend_hash_index_add(Z_ARRVAL_P(arg), index, zvalue);
}

static inline void array_add(zval *arg, zval *zvalue) {
    Z_TRY_ADDREF_P(zvalue);
    add_next_index_zval(arg, zvalue);
}

/**
 * return reference
 */
static inline zval *array_get(zval *arg, const char *key, size_t l_key) {
    return zend_hash_str_find(Z_ARRVAL_P(arg), key, l_key);
}

static inline zval *array_get(zval *arg, zend_ulong index) {
    return zend_hash_index_find(Z_ARRVAL_P(arg), index);
}

static inline void array_unset(zval *arg, const char *key, size_t l_key) {
    zend_hash_str_del(Z_ARRVAL_P(arg), key, l_key);
}

/**
 * Add new element to the associative array or merge with existing elements.
 * If the key does not exist, add it to the array.
 * If the key already exists, merge all into a two-dimensional array.
 */
void array_add_or_merge(zval *zarray, const char *key, size_t key_len, zval *new_element);

static inline zend_long object_get_long(zval *obj, zend_string *key) {
    static zval rv;
    zval *property = zend_read_property_ex(Z_OBJCE_P(obj), Z_OBJ_P(obj), key, true, &rv);
    return property ? zval_get_long(property) : 0;
}

static inline zend_long object_get_long(zval *obj, const char *key, size_t l_key) {
    static zval rv;
    zval *property = zend_read_property(Z_OBJCE_P(obj), Z_OBJ_P(obj), key, l_key, true, &rv);
    return property ? zval_get_long(property) : 0;
}

static inline zend_long object_get_long(zend_object *obj, const char *key, size_t l_key) {
    static zval rv;
    zval *property = zend_read_property(obj->ce, obj, key, l_key, true, &rv);
    return property ? zval_get_long(property) : 0;
}

static inline void object_set(zval *obj, const char *name, size_t l_name, zval *zvalue) {
    zend_update_property(Z_OBJCE_P(obj), Z_OBJ_P(obj), name, l_name, zvalue);
}

static inline void object_set(zval *obj, const char *name, size_t l_name, const char *value) {
    zend_update_property_string(Z_OBJCE_P(obj), Z_OBJ_P(obj), name, l_name, value);
}

static inline void object_set(zval *obj, const char *name, size_t l_name, zend_long value) {
    zend_update_property_long(Z_OBJCE_P(obj), Z_OBJ_P(obj), name, l_name, value);
}

static inline void object_set(zend_object *obj, zend_string *name, zval *zvalue) {
    zend_update_property_ex(obj->ce, obj, name, zvalue);
}

static inline void object_set(zend_object *obj, zend_string *name, zend_string *value) {
    zval tmp;
    ZVAL_STR(&tmp, value);
    zend_update_property_ex(obj->ce, obj, name, &tmp);
}

static inline void object_set(zend_object *obj, zend_string *name, zend_long value) {
    zval tmp;
    ZVAL_LONG(&tmp, value);
    zend_update_property_ex(obj->ce, obj, name, &tmp);
}

static inline zval *object_get(zval *obj, const char *name, size_t l_name) {
    static zval rv;
    return zend_read_property(Z_OBJCE_P(obj), Z_OBJ_P(obj), name, l_name, true, &rv);
}

/**
 * print exception, The virtual machine will not be terminated.
 */
static inline void print_error(zend_object *exception, int severity) {
    zend_exception_error(exception, severity);
}

static inline void add_constant(const char *name, zend_long value) {
    zend_register_long_constant(name, strlen(name), value, CONST_CS | CONST_PERSISTENT, sw_module_number());
}

static inline void add_constant(const char *name, const char *value) {
    zend_register_string_constant(name, strlen(name), value, CONST_CS | CONST_PERSISTENT, sw_module_number());
}

//-----------------------------------namespace end--------------------------------------------
}  // namespace zend

/* use void* to match some C callback function pointers */
static inline void sw_callable_free(void *ptr) {
    delete (zend::Callable *) ptr;
}

static inline zend::Callable *sw_callable_create(zval *zfn) {
    auto fn = new zend::Callable(zfn);
    if (fn->ready()) {
        return fn;
    } else {
        delete fn;
        return nullptr;
    }
}

static inline zend::Callable *sw_callable_create_ex(zval *zfn, const char *fname, bool allow_null = true) {
    if (zfn == nullptr || ZVAL_IS_NULL(zfn)) {
        if (!allow_null) {
            zend_throw_exception_ex(
                swoole_exception_ce, SW_ERROR_INVALID_PARAMS, "%s must be of type callable, null given", fname);
        }
        return nullptr;
    }
    auto cb = sw_callable_create(zfn);
    if (!cb) {
        zend_throw_exception_ex(swoole_exception_ce,
                                SW_ERROR_INVALID_PARAMS,
                                "%s must be of type callable, %s given",
                                fname,
                                zend_zval_type_name(zfn));
        return nullptr;
    }
    return cb;
}
ext/swoole/ext-src/php_swoole_thread.h000064400000025440151730542120014125 0ustar00/*
  +----------------------------------------------------------------------+
  | Swoole                                                               |
  +----------------------------------------------------------------------+
  | This source file is subject to version 2.0 of the Apache license,    |
  | that is bundled with this package in the file LICENSE, and is        |
  | available through the world-wide-web at the following url:           |
  | http://www.apache.org/licenses/LICENSE-2.0.html                      |
  | If you did not receive a copy of the Apache2.0 license and are unable|
  | to obtain it through the world-wide-web, please send a note to       |
  | license@php.net so we can mail you a copy immediately.               |
  +----------------------------------------------------------------------+
  | Author: Twosee  <twose@qq.com>                                       |
  | Author: Tianfeng Han  <rango@swoole.com>                             |
  +----------------------------------------------------------------------+
*/

#pragma once

#include "php_swoole_cxx.h"

#ifdef SW_THREAD
#include "swoole_thread.h"

typedef uint32_t ThreadResourceId;
class ThreadResource;
class ZendArray;

extern zend_class_entry *swoole_thread_ce;
extern zend_class_entry *swoole_thread_error_ce;
extern zend_class_entry *swoole_thread_arraylist_ce;
extern zend_class_entry *swoole_thread_atomic_ce;
extern zend_class_entry *swoole_thread_atomic_long_ce;
extern zend_class_entry *swoole_thread_barrier_ce;
extern zend_class_entry *swoole_thread_lock_ce;
extern zend_class_entry *swoole_thread_map_ce;
extern zend_class_entry *swoole_thread_queue_ce;

void php_swoole_thread_start(std::shared_ptr<swoole::Thread> thread, zend_string *file, ZendArray *argv);
void php_swoole_thread_bailout();

ThreadResource *php_swoole_thread_arraylist_cast(const zval *zobject);
ThreadResource *php_swoole_thread_map_cast(const zval *zobject);
ThreadResource *php_swoole_thread_queue_cast(const zval *zobject);
ThreadResource *php_swoole_thread_lock_cast(const zval *zobject);
ThreadResource *php_swoole_thread_atomic_cast(const zval *zobject);
ThreadResource *php_swoole_thread_atomic_long_cast(const zval *zobject);
ThreadResource *php_swoole_thread_barrier_cast(const zval *zobject);

void php_swoole_thread_arraylist_create(zval *return_value, ThreadResource *resource);
void php_swoole_thread_map_create(zval *return_value, ThreadResource *resource);
void php_swoole_thread_queue_create(zval *return_value, ThreadResource *resource);
void php_swoole_thread_lock_create(zval *return_value, ThreadResource *resource);
void php_swoole_thread_atomic_create(zval *return_value, ThreadResource *resource);
void php_swoole_thread_atomic_long_create(zval *return_value, ThreadResource *resource);
void php_swoole_thread_barrier_create(zval *return_value, ThreadResource *resource);

int php_swoole_thread_stream_cast(zval *zstream);
void php_swoole_thread_stream_create(zval *return_value, zend_long sockfd);

int php_swoole_thread_co_socket_cast(zval *zstream, swSocketType *type);
void php_swoole_thread_co_socket_create(zval *return_value, zend_long sockfd, swSocketType type);

#define EMSG_NO_RESOURCE "resource not found"
#define ECODE_NO_RESOURCE (-2)

enum {
    IS_ARRAYLIST = 80,
    IS_QUEUE = 81,
    IS_LOCK = 82,
    IS_MAP = 83,
    IS_BARRIER = 84,
    IS_ATOMIC = 85,
    IS_ATOMIC_LONG = 86,
    IS_PHP_SOCKET = 96,
    IS_CO_SOCKET = 97,
    IS_STREAM_SOCKET = 98,
    IS_SERIALIZED_OBJECT = 99,
};

class ThreadResource {
    sw_atomic_t ref_count;

  public:
    ThreadResource() {
        ref_count = 1;
    }

    void add_ref() {
        sw_atomic_add_fetch(&ref_count, 1);
    }

    void del_ref() {
        if (sw_atomic_sub_fetch(&ref_count, 1) == 0) {
            delete this;
        }
    }

  protected:
    virtual ~ThreadResource() = default;
};

struct ArrayItem {
    uint32_t type = IS_UNDEF;
    zend_string *key = nullptr;
    union {
        zend_string *str;
        zend_long lval;
        double dval;
        struct {
            int fd;
            swSocketType type;
        } socket;
        zend_string *serialized_object;
        ThreadResource *resource;
    } value;

    explicit ArrayItem(zval *zvalue) {
        value = {};
        store(zvalue);
    }

    void setKey(zend::String &_key) {
        key = zend_string_init(_key.val(), _key.len(), true);
    }

    void setKey(const zend_string *_key) {
        key = zend_string_init(ZSTR_VAL(_key), ZSTR_LEN(_key), true);
    }

    void store(zval *zvalue);
    void fetch(zval *return_value) const;
    void release();
    bool equals(const zval *zvalue) const;

    static int compare(Bucket *a, Bucket *b);

    ~ArrayItem() {
        if (value.str) {
            release();
        }
        if (key) {
            zend_string_release(key);
        }
    }
};

class ZendArray : public ThreadResource {
  protected:
    swoole::RWLock lock_;
    zend_array ht;

    static void item_dtor(zval *pDest) {
        auto item = static_cast<ArrayItem *>(Z_PTR_P(pDest));
        delete item;
    }

  public:
    ZendArray() : lock_(false) {
        zend_hash_init(&ht, 0, NULL, item_dtor, 1);
    }

    ~ZendArray() override {
        zend_hash_destroy(&ht);
    }

    void clean() {
        lock_.lock();
        zend_hash_clean(&ht);
        lock_.unlock();
    }

    void append(zval *zvalue);

    void add(const zend_string *skey, zval *zvalue) {
        auto item = new ArrayItem(zvalue);
        item->setKey(skey);
        zend_hash_add_ptr(&ht, item->key, item);
    }

    void add(zend::String &skey, zval *zvalue) {
        auto item = new ArrayItem(zvalue);
        item->setKey(skey);
        zend_hash_add_ptr(&ht, item->key, item);
    }

    void add(zend_long index, zval *zvalue) {
        auto item = new ArrayItem(zvalue);
        zend_hash_index_add_ptr(&ht, index, item);
    }

    bool index_exists(zend_long index) const {
        return index < (zend_long) zend_hash_num_elements(&ht);
    }

    bool strkey_exists(zend::String &skey) const {
        return zend_hash_find_ptr(&ht, skey.get()) != nullptr;
    }

    bool intkey_exists(zend_long index) const {
        return zend_hash_index_find_ptr(&ht, index) != nullptr;
    }

    void strkey_offsetGet(zval *zkey, zval *return_value) {
        zend::String skey(zkey);
        lock_.lock_rd();
        auto item = static_cast<ArrayItem *>(zend_hash_find_ptr(&ht, skey.get()));
        if (item) {
            item->fetch(return_value);
        }
        lock_.unlock();
    }

    void strkey_offsetExists(zval *zkey, zval *return_value) {
        zend::String skey(zkey);
        lock_.lock_rd();
        RETVAL_BOOL(strkey_exists(skey));
        lock_.unlock();
    }

    void strkey_offsetUnset(zval *zkey) {
        zend::String skey(zkey);
        lock_.lock();
        zend_hash_del(&ht, skey.get());
        lock_.unlock();
    }

    void strkey_offsetSet(zval *zkey, zval *zvalue) {
        zend::String skey(zkey);
        auto item = new ArrayItem(zvalue);
        item->setKey(skey);
        lock_.lock();
        zend_hash_update_ptr(&ht, item->key, item);
        lock_.unlock();
    }

    void strkey_incr(zval *zkey, zval *zvalue, zval *return_value);
    void intkey_incr(zend_long index, zval *zvalue, zval *return_value);
    void strkey_decr(zval *zkey, zval *zvalue, zval *return_value);
    void intkey_decr(zend_long index, zval *zvalue, zval *return_value);
    bool index_incr(zval *zkey, zval *zvalue, zval *return_value);
    bool index_decr(zval *zkey, zval *zvalue, zval *return_value);

    void strkey_add(zval *zkey, zval *zvalue, zval *return_value);
    void intkey_add(zend_long index, zval *zvalue, zval *return_value);
    void strkey_update(zval *zkey, zval *zvalue, zval *return_value);
    void intkey_update(zend_long index, zval *zvalue, zval *return_value);

    void count(zval *return_value) {
        lock_.lock_rd();
        RETVAL_LONG(zend_hash_num_elements(&ht));
        lock_.unlock();
    }

    void keys(zval *return_value);
    void values(zval *return_value);
    void to_array(zval *return_value);
    void find(const zval *search, zval *return_value);
    void sort(bool renumber);

    void intkey_offsetGet(zend_long index, zval *return_value) {
        lock_.lock_rd();
        auto item = static_cast<ArrayItem *>(zend_hash_index_find_ptr(&ht, index));
        if (item) {
            item->fetch(return_value);
        }
        lock_.unlock();
    }

    void intkey_offsetExists(zend_long index, zval *return_value) {
        lock_.lock_rd();
        RETVAL_BOOL(intkey_exists(index));
        lock_.unlock();
    }

    void intkey_offsetUnset(zend_long index) {
        lock_.lock();
        zend_hash_index_del(&ht, index);
        lock_.unlock();
    }

    void intkey_offsetSet(zend_long index, zval *zvalue) {
        auto item = new ArrayItem(zvalue);
        lock_.lock();
        zend_hash_index_update_ptr(&ht, index, item);
        lock_.unlock();
    }

    bool index_offsetGet(zend_long index, zval *return_value);
    bool index_offsetSet(zend_long index, zval *zvalue);
    void index_offsetUnset(zend_long index);
    void index_offsetExists(zend_long index, zval *return_value);

    static void incr_update(ArrayItem *item, zval *zvalue, zval *return_value);
    static ArrayItem *incr_create(zval *zvalue, zval *return_value);
    static ZendArray *from(zend_array *ht);
};

#define INIT_ARRAY_INCR_PARAMS                                                                                         \
    zval *zkey;                                                                                                        \
    zval zvalue_, *zvalue = NULL;                                                                                      \
                                                                                                                       \
    ZEND_PARSE_PARAMETERS_START(1, 2)                                                                                  \
    Z_PARAM_ZVAL(zkey)                                                                                                 \
    Z_PARAM_OPTIONAL                                                                                                   \
    Z_PARAM_ZVAL(zvalue)                                                                                               \
    ZEND_PARSE_PARAMETERS_END();                                                                                       \
                                                                                                                       \
    if (!zvalue) {                                                                                                     \
        zvalue = &zvalue_;                                                                                             \
        ZVAL_LONG(zvalue, 1);                                                                                          \
    }

#endif
ext/swoole/ext-src/php_swoole_ftp_def.h000064400000002261151730542120014261 0ustar00#ifndef EXT_SRC_PHP_SWOOLE_FTP_DEF_H_
#define EXT_SRC_PHP_SWOOLE_FTP_DEF_H_

#include "php.h"

#ifdef HAVE_CONFIG_H
#include "config.h"
#endif

BEGIN_EXTERN_C()
ZEND_FUNCTION(ftp_connect);
#if defined(SW_HAVE_FTP_SSL)
ZEND_FUNCTION(ftp_ssl_connect);
#endif
ZEND_FUNCTION(ftp_login);
ZEND_FUNCTION(ftp_pwd);
ZEND_FUNCTION(ftp_cdup);
ZEND_FUNCTION(ftp_chdir);
ZEND_FUNCTION(ftp_exec);
ZEND_FUNCTION(ftp_raw);
ZEND_FUNCTION(ftp_mkdir);
ZEND_FUNCTION(ftp_rmdir);
ZEND_FUNCTION(ftp_chmod);
ZEND_FUNCTION(ftp_alloc);
ZEND_FUNCTION(ftp_nlist);
ZEND_FUNCTION(ftp_rawlist);
ZEND_FUNCTION(ftp_mlsd);
ZEND_FUNCTION(ftp_systype);
ZEND_FUNCTION(ftp_fget);
ZEND_FUNCTION(ftp_nb_fget);
ZEND_FUNCTION(ftp_pasv);
ZEND_FUNCTION(ftp_get);
ZEND_FUNCTION(ftp_nb_get);
ZEND_FUNCTION(ftp_nb_continue);
ZEND_FUNCTION(ftp_fput);
ZEND_FUNCTION(ftp_nb_fput);
ZEND_FUNCTION(ftp_put);
ZEND_FUNCTION(ftp_append);
ZEND_FUNCTION(ftp_nb_put);
ZEND_FUNCTION(ftp_size);
ZEND_FUNCTION(ftp_mdtm);
ZEND_FUNCTION(ftp_rename);
ZEND_FUNCTION(ftp_delete);
ZEND_FUNCTION(ftp_site);
ZEND_FUNCTION(ftp_close);
ZEND_FUNCTION(ftp_set_option);
ZEND_FUNCTION(ftp_get_option);

PHP_MINIT_FUNCTION(ftp);
PHP_MINFO_FUNCTION(ftp);
END_EXTERN_C()

#endif
ext/swoole/ext-src/php_swoole_sqlite.h000064400000004321151730542130014153 0ustar00/*
 +----------------------------------------------------------------------+
 | Swoole                                                               |
 +----------------------------------------------------------------------+
 | Copyright (c) 2012-2018 The Swoole Group                             |
 +----------------------------------------------------------------------+
 | This source file is subject to version 2.0 of the Apache license,    |
 | that is bundled with this package in the file LICENSE, and is        |
 | available through the world-wide-web at the following url:           |
 | http://www.apache.org/licenses/LICENSE-2.0.html                      |
 | If you did not receive a copy of the Apache2.0 license and are unable|
 | to obtain it through the world-wide-web, please send a note to       |
 | license@swoole.com so we can mail you a copy immediately.            |
 +----------------------------------------------------------------------+
 | Author: NathanFreeman  <mariasocute@163.com>                         |
 +----------------------------------------------------------------------+
*/
#ifndef SWOOLE_SRC_PHP_SWOOLE_SQLITE_H
#define SWOOLE_SRC_PHP_SWOOLE_SQLITE_H
#include "php_swoole.h"

#ifdef SW_USE_SQLITE

BEGIN_EXTERN_C()

#include "ext/pdo/php_pdo_driver.h"

#include "thirdparty/pdo_sqlite/php_pdo_sqlite_int.h"

extern const pdo_driver_t swoole_pdo_sqlite_driver;
void swoole_sqlite_set_blocking(bool blocking);

int swoole_sqlite3_open_v2(const char *filename, sqlite3 **ppDb, int flags, const char *zVfs);
int swoole_sqlite3_prepare_v2(sqlite3 *db, const char *zSql, int nByte, sqlite3_stmt **ppStmt, const char **pzTail);
int swoole_sqlite3_exec(
    sqlite3 *, const char *sql, int (*callback)(void *, int, char **, char **), void *, char **errmsg);
int swoole_sqlite3_close(sqlite3 *db);
int swoole_sqlite3_close_v2(sqlite3 *db);
int swoole_sqlite3_step(sqlite3_stmt *stmt);

#ifdef SW_USE_SQLITE_HOOK
#define sqlite3_open_v2 swoole_sqlite3_open_v2
#define sqlite3_prepare_v2 swoole_sqlite3_prepare_v2
#define sqlite3_exec swoole_sqlite3_exec
#define sqlite3_close swoole_sqlite3_close
#define sqlite3_close_v2 swoole_sqlite3_close_v2
#define sqlite3_step swoole_sqlite3_step
#endif

END_EXTERN_C()
#endif
#endif
ext/swoole/ext-src/php_swoole_private.h000064400000131516151730542130014333 0ustar00/*
  +----------------------------------------------------------------------+
  | Swoole                                                               |
  +----------------------------------------------------------------------+
  | This source file is subject to version 2.0 of the Apache license,    |
  | that is bundled with this package in the file LICENSE, and is        |
  | available through the world-wide-web at the following url:           |
  | http://www.apache.org/licenses/LICENSE-2.0.html                      |
  | If you did not receive a copy of the Apache2.0 license and are unable|
  | to obtain it through the world-wide-web, please send a note to       |
  | license@swoole.com so we can mail you a copy immediately.            |
  +----------------------------------------------------------------------+
  | Author: Tianfeng Han  <rango@swoole.com>                             |
  +----------------------------------------------------------------------+
*/

#ifndef PHP_SWOOLE_PRIVATE_H
#define PHP_SWOOLE_PRIVATE_H

#include "php_swoole.h"
#include "php_swoole_api.h"
#include "swoole.h"
#include "swoole_api.h"
#include "swoole_coroutine_api.h"

#ifdef SW_HAVE_ZLIB
#include <zlib.h>
#endif

BEGIN_EXTERN_C()
#include <ext/date/php_date.h>
#include <ext/standard/url.h>
#include <ext/standard/info.h>
#include <ext/standard/php_array.h>
#include <ext/standard/php_var.h>
#include <ext/standard/basic_functions.h>
#include <ext/standard/php_http.h>

#define PHP_SWOOLE_VERSION SWOOLE_VERSION

#ifdef PHP_WIN32
#define PHP_SWOOLE_API __declspec(dllexport)
#elif defined(__GNUC__) && __GNUC__ >= 4
#define PHP_SWOOLE_API __attribute__((visibility("default")))
#else
#define PHP_SWOOLE_API
#endif

#define SW_CHECK_RETURN(s)                                                                                             \
    if (s < 0) {                                                                                                       \
        RETURN_FALSE;                                                                                                  \
    } else {                                                                                                           \
        RETURN_TRUE;                                                                                                   \
    }

#define SW_LOCK_CHECK_RETURN(s)                                                                                        \
    zend_long ___tmp_return_value = s;                                                                                 \
    if (___tmp_return_value == 0) {                                                                                    \
        RETURN_TRUE;                                                                                                   \
    } else {                                                                                                           \
        zend_update_property_long(NULL, SW_Z8_OBJ_P(ZEND_THIS), SW_STRL("errCode"), ___tmp_return_value);              \
        RETURN_FALSE;                                                                                                  \
    }

#ifdef SW_THREAD
#define SW_MUST_BE_MAIN_THREAD_EX(op)                                                                                  \
    if (!tsrm_is_main_thread()) {                                                                                      \
        swoole_set_last_error(SW_ERROR_OPERATION_NOT_SUPPORT);                                                         \
        op;                                                                                                            \
    }
#define SW_MUST_BE_MAIN_THREAD() SW_MUST_BE_MAIN_THREAD_EX(RETURN_TRUE)
#else
#define SW_MUST_BE_MAIN_THREAD_EX(op)
#define SW_MUST_BE_MAIN_THREAD()
#endif

#define php_swoole_fatal_error(level, fmt_str, ...)                                                                    \
    swoole_set_last_error(SW_ERROR_PHP_FATAL_ERROR);                                                                   \
    php_error_docref(NULL, level, (const char *) (fmt_str), ##__VA_ARGS__)

/**
 * The error occurred at the PHP layer and no error code was set
 */
#define php_swoole_error(level, fmt_str, ...)                                                                          \
    swoole_set_last_error(SW_ERROR_PHP_RUNTIME_NOTICE);                                                                \
    if (SWOOLE_G(display_errors) || level == E_ERROR) php_error_docref(NULL, level, fmt_str, ##__VA_ARGS__)

/**
 * The error occurred in the core must have error code
 */
#define php_swoole_core_error(level, fmt_str, ...)                                                                     \
    if (SWOOLE_G(display_errors) || level == E_ERROR) php_error_docref(NULL, level, fmt_str, ##__VA_ARGS__)

#define php_swoole_error_ex(level, err_code, fmt_str, ...)                                                             \
    swoole_set_last_error(err_code);                                                                                   \
    if (SWOOLE_G(display_errors) || level == E_ERROR) php_error_docref(NULL, level, fmt_str, ##__VA_ARGS__)

#define php_swoole_sys_error(level, fmt_str, ...)                                                                      \
    swoole_set_last_error(errno);                                                                                      \
    if (SWOOLE_G(display_errors) || level == E_ERROR)                                                                  \
    php_error_docref(NULL, level, fmt_str ", Error: %s[%d]", ##__VA_ARGS__, strerror(errno), errno)

#ifdef SW_USE_CARES
#ifndef HAVE_CARES
#error "Enable c-ares support, require c-ares library"
#endif
#endif

#if defined(SW_HAVE_ZLIB) || defined(SW_HAVE_BROTLI) || defined(SW_HAVE_ZSTD)
#define SW_HAVE_COMPRESSION
#endif

#ifdef SW_SOCKETS
#include "ext/sockets/php_sockets.h"
#define SWOOLE_SOCKETS_SUPPORT
#endif

#if PHP_VERSION_ID < 80200
#error "require PHP version 8.2 or later"
#elif PHP_VERSION_ID >= 80600
#error "require PHP version 8.5 or earlier"
#endif

#if defined(ZTS) && defined(SW_USE_THREAD_CONTEXT)
#error "thread context cannot be used with ZTS"
#endif

#if defined(SW_USE_IOURING) && !defined(__linux__)
#error "only linux support iouring"
#endif

#if defined(SW_THREAD) && !defined(ZTS)
#error "swoole thread must be used with ZTS"
#endif

//--------------------------------------------------------
#define SW_MAX_FIND_COUNT 100  // for swoole_server::connection_list
#define SW_PHP_CLIENT_BUFFER_SIZE 65535
#define SW_ASYNC_FILE_PROTOCOL "async.file"
//---------------------------------------------------------
enum php_swoole_fd_type {
    PHP_SWOOLE_FD_STREAM_CLIENT = SW_FD_STREAM_CLIENT,
    PHP_SWOOLE_FD_DGRAM_CLIENT,
    PHP_SWOOLE_FD_MYSQL,
    PHP_SWOOLE_FD_REDIS,
    PHP_SWOOLE_FD_HTTPCLIENT,
    PHP_SWOOLE_FD_PROCESS_STREAM,
    PHP_SWOOLE_FD_MYSQL_CORO,
    PHP_SWOOLE_FD_REDIS_CORO,
    PHP_SWOOLE_FD_POSTGRESQL,
    PHP_SWOOLE_FD_SOCKET,
    PHP_SWOOLE_FD_CO_CURL,
};
//---------------------------------------------------------
enum php_swoole_req_status {
    PHP_SWOOLE_RINIT_BEGIN,
    PHP_SWOOLE_RINIT_END,
    PHP_SWOOLE_CALL_USER_SHUTDOWNFUNC_BEGIN,
    PHP_SWOOLE_RSHUTDOWN_BEGIN,
    PHP_SWOOLE_RSHUTDOWN_END,
};
//---------------------------------------------------------
enum php_swoole_hook_type {
    PHP_SWOOLE_HOOK_BEFORE_ENABLE_HOOK = SW_GLOBAL_HOOK_USER,
    PHP_SWOOLE_HOOK_AFTER_ENABLE_HOOK,
    PHP_SWOOLE_HOOK_BEFORE_REQUEST,
    PHP_SWOOLE_HOOK_AFTER_RESPONSE,
};
//---------------------------------------------------------

extern zend_class_entry *swoole_event_ce;
extern zend_class_entry *swoole_timer_ce;
extern zend_class_entry *swoole_socket_coro_ce;
extern zend_class_entry *swoole_client_ce;
extern zend_object_handlers swoole_client_handlers;
extern zend_class_entry *swoole_server_ce;
extern zend_object_handlers swoole_server_handlers;
extern zend_class_entry *swoole_redis_server_ce;
extern zend_object_handlers swoole_redis_server_handlers;
extern zend_class_entry *swoole_connection_iterator_ce;
extern zend_class_entry *swoole_process_ce;
extern zend_class_entry *swoole_http_server_ce;
extern zend_object_handlers swoole_http_server_handlers;
extern zend_class_entry *swoole_websocket_server_ce;
extern zend_class_entry *swoole_websocket_frame_ce;
extern zend_class_entry *swoole_server_port_ce;
extern zend_class_entry *swoole_exception_ce;
extern zend_object_handlers swoole_exception_handlers;
extern zend_class_entry *swoole_error_ce;
extern zend_class_entry *swoole_resolve_context_ce;
extern zend_object_handlers swoole_resolve_context_handlers;

PHP_FUNCTION(swoole_clear_dns_cache);
PHP_FUNCTION(swoole_last_error);
PHP_FUNCTION(swoole_set_process_name);
//---------------------------------------------------------
//                  Coroutine API
//---------------------------------------------------------
PHP_FUNCTION(swoole_coroutine_create);
PHP_FUNCTION(swoole_coroutine_exec);
PHP_FUNCTION(swoole_coroutine_gethostbyname);
PHP_FUNCTION(swoole_coroutine_defer);
PHP_FUNCTION(swoole_coroutine_socketpair);
PHP_FUNCTION(swoole_test_kernel_coroutine);  // for tests
//---------------------------------------------------------
//                  event
//---------------------------------------------------------
PHP_FUNCTION(swoole_client_select);
//---------------------------------------------------------
//                  async[coro]
//---------------------------------------------------------
PHP_FUNCTION(swoole_async_set);
PHP_FUNCTION(swoole_async_dns_lookup_coro);
//---------------------------------------------------------
//                  tracer
//---------------------------------------------------------
PHP_FUNCTION(swoole_tracer_leak_detect);
PHP_FUNCTION(swoole_tracer_prof_begin);
PHP_FUNCTION(swoole_tracer_prof_end);
//---------------------------------------------------------
//                  error
//---------------------------------------------------------
#define SW_STRERROR_SYSTEM 0
#define SW_STRERROR_GAI 1
#define SW_STRERROR_DNS 2
#define SW_STRERROR_SWOOLE 9

/**
 * MINIT <Sort by dependency>
 * ==============================================================
 */
void php_swoole_event_minit(int module_number);
// base
void php_swoole_atomic_minit(int module_number);
void php_swoole_lock_minit(int module_number);
int swoole_resolve_context_module_init(INIT_FUNC_ARGS);
void php_swoole_process_minit(int module_number);
void php_swoole_process_pool_minit(int module_number);
void php_swoole_table_minit(int module_number);
void php_swoole_timer_minit(int module_number);
// coroutine
void php_swoole_coroutine_minit(int module_number);
void php_swoole_coroutine_system_minit(int module_number);
void php_swoole_coroutine_scheduler_minit(int module_number);
void php_swoole_coroutine_lock_minit(int module_number);
void php_swoole_channel_coro_minit(int module_number);
void php_swoole_runtime_minit(int module_number);
// client
void php_swoole_socket_coro_minit(int module_number);
void php_swoole_client_minit(int module_number);
void php_swoole_client_async_minit(int module_number);
void php_swoole_client_coro_minit(int module_number);
void php_swoole_http_client_coro_minit(int module_number);
void php_swoole_http2_client_coro_minit(int module_number);
#ifdef SW_USE_PGSQL
void php_swoole_pgsql_minit(int module_number);
#endif
#ifdef SW_USE_ODBC
int php_swoole_odbc_minit(int module_id);
#endif
#ifdef SW_USE_ORACLE
void php_swoole_oracle_minit(int module_number);
#endif
#ifdef SW_USE_SQLITE
void php_swoole_sqlite_minit(int module_number);
#endif
#ifdef SW_USE_FIREBIRD
void php_swoole_firebird_minit(int module_number);
#endif
// server
void php_swoole_server_minit(int module_number);
void php_swoole_server_port_minit(int module_number);
void php_swoole_http_request_minit(int module_number);
void php_swoole_http_response_minit(int module_number);
void php_swoole_http_cookie_minit(int module_number);
void php_swoole_http_server_minit(int module_number);
void php_swoole_http_server_coro_minit(int module_number);
void php_swoole_websocket_server_minit(int module_number);
void php_swoole_redis_server_minit(int module_number);
void php_swoole_name_resolver_minit(int module_number);
#ifdef SW_THREAD
void php_swoole_thread_minit(int module_number);
void php_swoole_thread_atomic_minit(int module_number);
void php_swoole_thread_lock_minit(int module_number);
void php_swoole_thread_barrier_minit(int module_number);
void php_swoole_thread_queue_minit(int module_number);
void php_swoole_thread_map_minit(int module_number);
void php_swoole_thread_arraylist_minit(int module_number);
#endif
#ifdef SW_STDEXT
void php_swoole_stdext_minit(int module_number);
#endif
void php_swoole_tracer_minit(int module_number);

/**
 * RINIT
 * ==============================================================
 */
void php_swoole_http_server_rinit();
void php_swoole_coroutine_rinit();
void php_swoole_runtime_rinit();
#ifdef SW_USE_ORACLE
void php_swoole_oracle_rinit();
#endif
void php_swoole_thread_rinit();
void php_swoole_tracer_rinit();

/**
 * RSHUTDOWN
 * ==============================================================
 */
void php_swoole_http_server_rshutdown();
void php_swoole_http_response_rshutdown();
void php_swoole_async_coro_rshutdown();
void php_swoole_redis_server_rshutdown();
void php_swoole_coroutine_rshutdown();
void php_swoole_process_rshutdown();
void php_swoole_coroutine_scheduler_rshutdown();
void php_swoole_runtime_rshutdown();
void php_swoole_timer_rshutdown();
void php_swoole_server_rshutdown();
#ifdef SW_THREAD
void php_swoole_thread_rshutdown();
#endif
void php_swoole_tracer_rshutdown();

int php_swoole_reactor_init();
void php_swoole_set_global_option(zend_array *vht);
void php_swoole_set_coroutine_option(zend_array *vht);
void php_swoole_set_aio_option(const zend_array *vht);

// shutdown
void php_swoole_register_shutdown_function(const char *function);
void php_swoole_register_shutdown_function_prepend(const char *function);

// event
void php_swoole_event_init();
void php_swoole_event_wait();
void php_swoole_event_exit();

/**
 * MSHUTDOWN
 * ==============================================================
 */
void php_swoole_runtime_mshutdown();
#ifdef SW_USE_PGSQL
void php_swoole_pgsql_mshutdown();
#endif
#ifdef SW_USE_ORACLE
void php_swoole_oracle_mshutdown();
#endif
#ifdef SW_USE_SQLITE
void php_swoole_sqlite_mshutdown();
#endif
#ifdef SW_USE_FIREBIRD
void php_swoole_firebird_mshutdown();
#endif

int php_swoole_convert_to_fd(zval *zsocket);
int php_swoole_convert_to_fd_ex(zval *zsocket, int *async);

#ifdef SWOOLE_SOCKETS_SUPPORT
php_socket *php_swoole_convert_to_socket(int sock);
#endif

#ifdef HAVE_CPU_AFFINITY
bool php_swoole_array_to_cpu_set(const zval *array, cpu_set_t *cpu_set);
/**
 * Converts a cpu_set_t structure to a PHP array.
 *
 * Note: On Cygwin platform, CPU_ISSET is a function that takes a non-const pointer as its second parameter,
 * which is why the cpu_set parameter cannot be declared as const.
 *
 * @param array The PHP array to store the CPU set information
 * @param cpu_set The CPU set structure to convert
 */
void php_swoole_cpu_set_to_array(zval *array, cpu_set_t *cpu_set);
#endif

zend_bool php_swoole_signal_isset_handler(int signo);

#define sw_zend7_object zend_object
#define SW_Z8_OBJ_P(zobj) Z_OBJ_P(zobj)

typedef ssize_t php_stream_size_t;
typedef zend_string error_filename_t;

//----------------------------------Zval API------------------------------------

// Deprecated: do not use it anymore
// do not use sw_copy_to_stack(return_value, foo);
#define sw_copy_to_stack(ptr, val)                                                                                     \
    do {                                                                                                               \
        (val) = *(zval *) (ptr);                                                                                       \
        (ptr) = &(val);                                                                                                \
    } while (0)

#define SW_ZVAL_SOCKET(return_value, result) ZVAL_OBJ(return_value, &result->std)
#define SW_Z_SOCKET_P(zsocket) Z_SOCKET_P(zsocket)

static sw_inline zend_bool ZVAL_IS_TRUE(const zval *v) {
    return Z_TYPE_P(v) == IS_TRUE;
}

static sw_inline zend_bool ZVAL_IS_FALSE(const zval *v) {
    return Z_TYPE_P(v) == IS_FALSE;
}

static sw_inline zend_bool ZVAL_IS_BOOL(const zval *v) {
    return ZVAL_IS_TRUE(v) || ZVAL_IS_FALSE(v);
}

static sw_inline zend_bool ZVAL_IS_UNDEF(const zval *v) {
    return Z_TYPE_P(v) == IS_UNDEF;
}

static sw_inline zend_bool ZVAL_IS_LONG(const zval *v) {
    return Z_TYPE_P(v) == IS_LONG;
}

static sw_inline zend_bool ZVAL_IS_STRING(const zval *v) {
    return Z_TYPE_P(v) == IS_STRING;
}

static sw_inline zend_bool ZVAL_IS_EMPTY_STRING(const zval *v) {
    return Z_TYPE_P(v) == IS_STRING && Z_STRLEN_P(v) == 0;
}

static sw_inline zend_bool Z_BVAL_P(const zval *v) {
    return Z_TYPE_P(v) == IS_TRUE;
}

static sw_inline zend_bool ZVAL_IS_ARRAY(const zval *v) {
    return Z_TYPE_P(v) == IS_ARRAY;
}

static sw_inline zend_bool ZVAL_IS_REF(const zval *v) {
    return Z_TYPE_P(v) == IS_REFERENCE;
}

static sw_inline zend_bool ZVAL_IS_OBJECT(const zval *v) {
    return Z_TYPE_P(v) == IS_OBJECT;
}

static sw_inline zval *sw_malloc_zval() {
    return static_cast<zval *>(emalloc(sizeof(zval)));
}

static sw_inline zval *sw_zval_dup(zval *val) {
    zval *dup = sw_malloc_zval();
    memcpy(dup, val, sizeof(zval));
    return dup;
}

static sw_inline void sw_zval_free(zval *val) {
    zval_ptr_dtor(val);
    efree(val);
}

#ifdef SWOOLE_SOCKETS_SUPPORT
static inline bool sw_zval_is_php_socket(zval *val) {
    return instanceof_function(Z_OBJCE_P(val), socket_ce);
}
#endif

static inline bool sw_zval_is_co_socket(zval *val) {
    return instanceof_function(Z_OBJCE_P(val), swoole_socket_coro_ce);
}

static inline bool sw_zval_is_client(zval *val) {
    return instanceof_function(Z_OBJCE_P(val), swoole_client_ce);
}

static inline bool sw_zval_is_process(zval *val) {
    return instanceof_function(Z_OBJCE_P(val), swoole_process_ce);
}

bool sw_zval_is_serializable(const zval *struc);

static inline bool sw_is_main_thread() {
#ifdef SW_THREAD
    return tsrm_is_main_thread();
#else
    return true;
#endif
}

int sw_module_number();

#ifdef SW_THREAD
size_t sw_active_thread_count(void);
#else
static inline size_t sw_active_thread_count() {
    return 1;
}
#endif

zend_refcounted *sw_get_refcount_ptr(zval *value);

void sw_php_exit(int status);
void sw_php_print_backtrace(zend_long cid = 0,
                            zend_long options = 0,
                            zend_long limit = 0,
                            zval *return_value = nullptr);
void sw_php_print_backtrace_impl(int skip_last = 1, int options = 0, int limit = 0, bool include_main = false);

//----------------------------------Constant API------------------------------------

#define SW_REGISTER_NULL_CONSTANT(name) REGISTER_NULL_CONSTANT(name, CONST_CS | CONST_PERSISTENT)
#define SW_REGISTER_BOOL_CONSTANT(name, value) REGISTER_BOOL_CONSTANT(name, value, CONST_CS | CONST_PERSISTENT)
#define SW_REGISTER_LONG_CONSTANT(name, value) REGISTER_LONG_CONSTANT(name, value, CONST_CS | CONST_PERSISTENT)
#define SW_REGISTER_DOUBLE_CONSTANT(name, value) REGISTER_DOUBLE_CONSTANT(name, value, CONST_CS | CONST_PERSISTENT)
#define SW_REGISTER_STRING_CONSTANT(name, value)                                                                       \
    REGISTER_STRING_CONSTANT(name, (char *) value, CONST_CS | CONST_PERSISTENT)
#define SW_REGISTER_STRINGL_CONSTANT(name, value)                                                                      \
    REGISTER_STRINGL_CONSTANT(name, (char *) value, CONST_CS | CONST_PERSISTENT)

//----------------------------------Number API-----------------------------------

#define sw_php_math_round(value, places, mode) _php_math_round(value, places, mode)

//----------------------------------String API-----------------------------------

#define SW_PHP_OB_START(zoutput)                                                                                       \
    zval zoutput;                                                                                                      \
    do {                                                                                                               \
        php_output_start_user(NULL, 0, PHP_OUTPUT_HANDLER_STDFLAGS);
#define SW_PHP_OB_END()                                                                                                \
    php_output_get_contents(&zoutput);                                                                                 \
    php_output_discard();                                                                                              \
    }                                                                                                                  \
    while (0)

static sw_inline zend_string *sw_zend_string_recycle(zend_string *s, size_t alloc_len, size_t real_len) {
    SW_ASSERT(!ZSTR_IS_INTERNED(s));
    if (UNEXPECTED(alloc_len != real_len)) {
        if (alloc_len > swoole_pagesize() && alloc_len > real_len * 2) {
            s = zend_string_realloc(s, real_len, false);
        } else {
            ZSTR_LEN(s) = real_len;
        }
    }
    ZSTR_VAL(s)[real_len] = '\0';
    return s;
}

//----------------------------------Array API------------------------------------

#define php_swoole_array_length(zarray) zend_hash_num_elements(Z_ARRVAL_P(zarray))
#define php_swoole_array_get_value(ht, str, v) ((v = zend_hash_str_find(ht, str, sizeof(str) - 1)) && !ZVAL_IS_NULL(v))
#define php_swoole_array_get_value_ex(ht, str, v) ((v = zend_hash_str_find(ht, str, strlen(str))) && !ZVAL_IS_NULL(v))

static sw_inline int php_swoole_array_length_safe(zval *zarray) {
    if (zarray && ZVAL_IS_ARRAY(zarray)) {
        return php_swoole_array_length(zarray);
    } else {
        return 0;
    }
}

void php_swoole_sha1(const char *str, int _len, uchar *digest);
void php_swoole_sha256(const char *str, int _len, uchar *digest);

#define SW_HASHTABLE_FOREACH_START(ht, _val)                                                                           \
    ZEND_HASH_FOREACH_VAL(ht, _val);                                                                                   \
    {
#define SW_HASHTABLE_FOREACH_START2(ht, k, klen, ktype, _val)                                                          \
    zend_string *_foreach_key;                                                                                         \
    ZEND_HASH_FOREACH_STR_KEY_VAL(ht, _foreach_key, _val);                                                             \
    if (!_foreach_key) {                                                                                               \
        k = NULL;                                                                                                      \
        klen = 0;                                                                                                      \
        ktype = 0;                                                                                                     \
    } else {                                                                                                           \
        k = ZSTR_VAL(_foreach_key), klen = ZSTR_LEN(_foreach_key);                                                     \
        ktype = 1;                                                                                                     \
    }                                                                                                                  \
    {
#define SW_HASHTABLE_FOREACH_END()                                                                                     \
    }                                                                                                                  \
    ZEND_HASH_FOREACH_END();

static sw_inline void add_assoc_ulong_safe_ex(zval *arg, const char *key, size_t key_len, zend_ulong value) {
    if (sw_likely(value <= ZEND_LONG_MAX)) {
        add_assoc_long_ex(arg, key, key_len, value);
    } else {
        char buf[MAX_LENGTH_OF_LONG + 1];
        size_t len = sw_snprintf(buf, sizeof(buf), ZEND_ULONG_FMT, value);
        add_assoc_stringl_ex(arg, key, key_len, buf, len);
    }
}

static sw_inline void add_assoc_ulong_safe(zval *arg, const char *key, zend_ulong value) {
    add_assoc_ulong_safe_ex(arg, key, strlen(key), value);
}

//----------------------------------Class API------------------------------------

#define SW_Z_OBJCE_NAME_VAL_P(zobject) ZSTR_VAL(Z_OBJCE_P(zobject)->name)

/* PHP 7 class declaration macros */

#define SW_INIT_CLASS_ENTRY_BASE(module, namespace_name, short_name, methods, parent_ce)                               \
    do {                                                                                                               \
        zend_class_entry _##module##_ce = {};                                                                          \
        INIT_CLASS_ENTRY(_##module##_ce, namespace_name, methods);                                                     \
        module##_ce = zend_register_internal_class_ex(&_##module##_ce, parent_ce);                                     \
        if (short_name) SW_CLASS_ALIAS_SHORT_NAME(short_name, module);                                                 \
    } while (0)

#define SW_INIT_CLASS_ENTRY_STD(module, namespace_name, methods)                                                       \
    SW_INIT_CLASS_ENTRY_BASE(module, namespace_name, nullptr, methods, NULL);                                          \
    memcpy(&module##_handlers, zend_get_std_object_handlers(), sizeof(zend_object_handlers))

#define SW_INIT_CLASS_ENTRY(module, namespace_name, short_name, methods)                                               \
    SW_INIT_CLASS_ENTRY_BASE(module, namespace_name, short_name, methods, NULL);                                       \
    memcpy(&module##_handlers, zend_get_std_object_handlers(), sizeof(zend_object_handlers))

#define SW_INIT_CLASS_ENTRY_EX(module, namespace_name, short_name, methods, parent_module)                             \
    SW_INIT_CLASS_ENTRY_BASE(module, namespace_name, short_name, methods, parent_module##_ce);                         \
    memcpy(&module##_handlers, &parent_module##_handlers, sizeof(zend_object_handlers))

#define SW_INIT_CLASS_ENTRY_EX2(module, namespace_name, short_name, methods, parent_module_ce, parent_module_handlers) \
    SW_INIT_CLASS_ENTRY_BASE(module, namespace_name, short_name, methods, parent_module_ce);                           \
    memcpy(&module##_handlers, parent_module_handlers, sizeof(zend_object_handlers))

// Data Object: no methods, no parent
#define SW_INIT_CLASS_ENTRY_DATA_OBJECT(module, namespace_name)                                                        \
    SW_INIT_CLASS_ENTRY_BASE(module, namespace_name, NULL, NULL, NULL);                                                \
    memcpy(&module##_handlers, zend_get_std_object_handlers(), sizeof(zend_object_handlers))

#define SW_CLASS_ALIAS(name, module)                                                                                   \
    do {                                                                                                               \
        if (name) {                                                                                                    \
            sw_zend_register_class_alias(ZEND_STRL(name), module##_ce);                                                \
        }                                                                                                              \
    } while (0)

#define SW_CLASS_ALIAS_SHORT_NAME(short_name, module)                                                                  \
    do {                                                                                                               \
        if (SWOOLE_G(use_shortname)) {                                                                                 \
            SW_CLASS_ALIAS(short_name, module);                                                                        \
        }                                                                                                              \
    } while (0)

#define SW_SET_CLASS_NOT_SERIALIZABLE(module) module##_ce->ce_flags |= ZEND_ACC_NOT_SERIALIZABLE;

#define sw_zend_class_clone_deny NULL
#define SW_SET_CLASS_CLONEABLE(module, _clone_obj) module##_handlers.clone_obj = _clone_obj

#define SW_SET_CLASS_UNSET_PROPERTY_HANDLER(module, _unset_property) module##_handlers.unset_property = _unset_property

#define SW_SET_CLASS_CREATE(module, _create_object) module##_ce->create_object = _create_object

#define SW_SET_CLASS_DTOR(module, _dtor_obj) module##_handlers.dtor_obj = _dtor_obj

#define SW_SET_CLASS_FREE(module, _free_obj) module##_handlers.free_obj = _free_obj

#define SW_SET_CLASS_CREATE_AND_FREE(module, _create_object, _free_obj)                                                \
    SW_SET_CLASS_CREATE(module, _create_object);                                                                       \
    SW_SET_CLASS_FREE(module, _free_obj)

#define SW_SET_CLASS_CUSTOM_OBJECT(module, _create_object, _free_obj, _struct, _std)                                   \
    SW_SET_CLASS_CREATE_AND_FREE(module, _create_object, _free_obj);                                                   \
    module##_handlers.offset = XtOffsetOf(_struct, _std)

#define SW_PREVENT_USER_DESTRUCT()                                                                                     \
    do {                                                                                                               \
        if (sw_unlikely(!(GC_FLAGS(Z_OBJ_P(ZEND_THIS)) & IS_OBJ_DESTRUCTOR_CALLED))) {                                 \
            RETURN_NULL();                                                                                             \
        }                                                                                                              \
    } while (0)

#define SW_FUNCTION_ALIAS(origin_function_table, origin, alias_function_table, alias, arg_info)                        \
    sw_zend_register_function_alias(                                                                                   \
        origin_function_table, ZEND_STRL(origin), alias_function_table, ZEND_STRL(alias), arg_info)

static sw_inline int sw_zend_register_function_alias(zend_array *origin_function_table,
                                                     const char *origin,
                                                     size_t origin_length,
                                                     zend_array *alias_function_table,
                                                     const char *alias,
                                                     size_t alias_length,
                                                     const zend_internal_arg_info *arg_info) {
    zend_string *lowercase_origin = zend_string_alloc(origin_length, false);
    zend_str_tolower_copy(ZSTR_VAL(lowercase_origin), origin, origin_length);
    auto *origin_function = static_cast<zend_function *>(zend_hash_find_ptr(origin_function_table, lowercase_origin));
    zend_string_release(lowercase_origin);
    if (UNEXPECTED(!origin_function)) {
        return FAILURE;
    }
    SW_ASSERT(origin_function->common.type == ZEND_INTERNAL_FUNCTION);
    char *_alias = (char *) emalloc(alias_length + 1);
    ((char *) memcpy(_alias, alias, alias_length))[alias_length] = '\0';

    zend_function_entry zfe[] = {
        {_alias, origin_function->internal_function.handler, arg_info, origin_function->common.num_args, 0},
        PHP_FE_END};
    int ret = zend_register_functions(nullptr, zfe, alias_function_table, origin_function->common.type);
    efree(_alias);
    return ret;
}

static sw_inline int sw_zend_register_class_alias(const char *name, size_t name_len, zend_class_entry *ce) {
    zend_string *_name;
    if (name[0] == '\\') {
        _name = zend_string_init(name, name_len, true);
        zend_str_tolower_copy(ZSTR_VAL(_name), name + 1, name_len - 1);
    } else {
        _name = zend_string_init(name, name_len, true);
        zend_str_tolower_copy(ZSTR_VAL(_name), name, name_len);
    }

    zend_string *_interned_name = zend_new_interned_string(_name);

    return zend_register_class_alias_ex(ZSTR_VAL(_interned_name), ZSTR_LEN(_interned_name), ce, true);
}

static sw_inline zend_object *sw_zend_create_object(zend_class_entry *ce, zend_object_handlers *handlers) {
    auto *object = static_cast<zend_object *>(zend_object_alloc(sizeof(zend_object), ce));
    zend_object_std_init(object, ce);
    object_properties_init(object, ce);
    object->handlers = handlers;
    return object;
}

static sw_inline zend_object *sw_zend_create_object_deny(zend_class_entry *ce) {
    zend_object *object = zend_objects_new(ce);
    /* Initialize default properties */
    if (EXPECTED(ce->default_properties_count != 0)) {
        zval *p = object->properties_table;
        zval *end = p + ce->default_properties_count;
        do {
            ZVAL_UNDEF(p);
            p++;
        } while (p != end);
    }
    zend_throw_error(nullptr, "The object of %s can not be created for security reasons", ZSTR_VAL(ce->name));
    return object;
}

static sw_inline void sw_zend_class_unset_property_deny(zend_object *object, zend_string *member, void **cache_slot) {
    zend_class_entry *ce = object->ce;
    while (ce->parent) {
        ce = ce->parent;
    }
    SW_ASSERT(ce->type == ZEND_INTERNAL_CLASS);
    if (EXPECTED(zend_hash_find(&ce->properties_info, member))) {
        zend_throw_error(
            nullptr, "Property %s of class %s cannot be unset", ZSTR_VAL(member), ZSTR_VAL(object->ce->name));
        return;
    }
    std_object_handlers.unset_property(object, member, cache_slot);
}

static sw_inline zval *sw_zend_read_property(zend_class_entry *ce, zval *obj, const char *s, size_t len, int silent) {
    zval rv, *property = zend_read_property(ce, SW_Z8_OBJ_P(obj), s, len, silent, &rv);
    if (UNEXPECTED(property == &EG(uninitialized_zval))) {
        zend_update_property_null(ce, SW_Z8_OBJ_P(obj), s, len);
        return zend_read_property(ce, SW_Z8_OBJ_P(obj), s, len, silent, &rv);
    }
    return property;
}

static sw_inline void sw_zend_update_property_null_ex(zend_class_entry *scope, zval *object, zend_string *s) {
    zval tmp;

    ZVAL_NULL(&tmp);
    zend_update_property_ex(scope, SW_Z8_OBJ_P(object), s, &tmp);
}

static sw_inline zval *sw_zend_read_property_ex(zend_class_entry *ce, zval *zobject, zend_string *name, int silent) {
    zval *zv = zend_hash_find(&ce->properties_info, name);
    auto *property_info = (zend_property_info *) Z_PTR_P(zv);
    zval *property = OBJ_PROP(SW_Z8_OBJ_P(zobject), property_info->offset);
    if (UNEXPECTED(property == &EG(uninitialized_zval))) {
        ZVAL_NULL(property);
    }
    return property;
}

static sw_inline zval *sw_zend_read_property_not_null(
    zend_class_entry *ce, zval *obj, const char *s, size_t len, int silent) {
    zval rv, *property = zend_read_property(ce, SW_Z8_OBJ_P(obj), s, len, silent, &rv);
    zend_uchar type = Z_TYPE_P(property);
    return (type == IS_NULL || UNEXPECTED(type == IS_UNDEF)) ? nullptr : property;
}

static sw_inline zval *sw_zend_read_property_not_null_ex(zend_class_entry *ce, zval *obj, zend_string *s, int silent) {
    zval rv, *property = zend_read_property_ex(ce, SW_Z8_OBJ_P(obj), s, silent, &rv);
    zend_uchar type = Z_TYPE_P(property);
    return (type == IS_NULL || UNEXPECTED(type == IS_UNDEF)) ? nullptr : property;
}

static sw_inline zval *sw_zend_update_and_read_property_array(zend_class_entry *ce,
                                                              zval *obj,
                                                              const char *s,
                                                              size_t len) {
    zval ztmp;
    array_init(&ztmp);
    zend_update_property(ce, SW_Z8_OBJ_P(obj), s, len, &ztmp);
    zval_ptr_dtor(&ztmp);
    return zend_read_property(ce, SW_Z8_OBJ_P(obj), s, len, true, &ztmp);
}

static sw_inline zval *sw_zend_read_and_convert_property_array(
    zend_class_entry *ce, zval *obj, const char *s, size_t len, int silent) {
    zval rv, *property = zend_read_property(ce, SW_Z8_OBJ_P(obj), s, len, silent, &rv);
    if (Z_TYPE_P(property) != IS_ARRAY) {
        // NOTICE: if user unset the property, zend_read_property will return uninitialized_zval instead of NULL pointer
        if (UNEXPECTED(property == &EG(uninitialized_zval))) {
            property = sw_zend_update_and_read_property_array(ce, obj, s, len);
        } else {
            zval_ptr_dtor(property);
            array_init(property);
        }
    }

    return property;
}

#define SW_RETURN_PROPERTY(name)                                                                                       \
    do {                                                                                                               \
        RETURN_ZVAL(sw_zend_read_property(Z_OBJCE_P(ZEND_THIS), ZEND_THIS, ZEND_STRL(name), 0), 1, 0);                 \
    } while (0)

#define RETURN_SW_STRING(buf)                                                                                          \
    do {                                                                                                               \
        RETURN_STRINGL(buf->str, buf->length);                                                                         \
    } while (0)

//----------------------------------Function API------------------------------------

/**
 * Notice (sw_zend_call_method_with_%u_params): If you don't want to check the return value, please set retval to NULL
 */
#define sw_zend_call_method_with_0_params(zobj, obj_ce, fn_ptr_ptr, fn_name, retval)                                   \
    zend_call_method_with_0_params(SW_Z8_OBJ_P(zobj), obj_ce, fn_ptr_ptr, fn_name, retval)

#define sw_zend_call_method_with_1_params(zobj, obj_ce, fn_ptr_ptr, fn_name, retval, v1)                               \
    zend_call_method_with_1_params(SW_Z8_OBJ_P(zobj), obj_ce, fn_ptr_ptr, fn_name, retval, v1)

#define sw_zend_call_method_with_2_params(zobj, obj_ce, fn_ptr_ptr, fn_name, retval, v1, v2)                           \
    zend_call_method_with_2_params(SW_Z8_OBJ_P(zobj), obj_ce, fn_ptr_ptr, fn_name, retval, v1, v2)

static sw_inline int sw_zend_function_max_num_args(zend_function *function) {
    // https://github.com/php/php-src/commit/2646f7bcb98dcdd322ea21701c8bb101104ea619
    // zend_function.common.num_args don't include the variadic argument anymore.
    return (function->common.fn_flags & ZEND_ACC_VARIADIC) ? UINT32_MAX : function->common.num_args;
}

// TODO: remove it after remove async modules
static sw_inline zend_bool sw_zend_is_callable(zval *callable, int check_flags, char **callable_name) {
    zend_string *name;
    zend_bool ret = zend_is_callable(callable, check_flags, &name);
    *callable_name = estrndup(ZSTR_VAL(name), ZSTR_LEN(name));
    zend_string_release(name);
    return ret;
}

static sw_inline zend_bool sw_zend_is_callable_at_frame(zval *zcallable,
                                                        zval *zobject,
                                                        zend_execute_data *frame,
                                                        uint check_flags,
                                                        char **callable_name,
                                                        size_t *callable_name_len,
                                                        zend_fcall_info_cache *fci_cache,
                                                        char **error) {
    zend_bool ret = zend_is_callable_at_frame(
        zcallable, zobject ? Z_OBJ_P(zobject) : nullptr, frame, check_flags, fci_cache, error);
    zend_string *name = zend_get_callable_name_ex(zcallable, zobject ? Z_OBJ_P(zobject) : nullptr);
    if (callable_name) {
        *callable_name = estrndup(ZSTR_VAL(name), ZSTR_LEN(name));
    }
    if (callable_name_len) {
        *callable_name_len = ZSTR_LEN(name);
    }
    zend_string_release(name);
    return ret;
}

static sw_inline zend_bool sw_zend_is_callable_ex(zval *zcallable,
                                                  zval *zobject,
                                                  uint check_flags,
                                                  char **callable_name,
                                                  size_t *callable_name_len,
                                                  zend_fcall_info_cache *fci_cache,
                                                  char **error) {
    return sw_zend_is_callable_at_frame(
        zcallable, zobject, nullptr, check_flags, callable_name, callable_name_len, fci_cache, error);
}

/* this API can work well when retval is NULL */
static sw_inline int sw_zend_call_function_ex(
    zval *function_name, zend_fcall_info_cache *fci_cache, uint32_t param_count, zval *params, zval *retval) {
    zend_fcall_info fci;
    zval _retval;

    fci.size = sizeof(fci);
    fci.object = nullptr;
    if (!fci_cache || !fci_cache->function_handler) {
        if (!function_name) {
            php_swoole_fatal_error(E_WARNING, "Bad function");
            return FAILURE;
        }
        ZVAL_COPY_VALUE(&fci.function_name, function_name);
    } else {
        ZVAL_UNDEF(&fci.function_name);
    }
    fci.retval = retval ? retval : &_retval;
    fci.param_count = param_count;
    fci.params = params;
    fci.named_params = nullptr;

    int ret = zend_call_function(&fci, fci_cache);
    if (!retval) {
        zval_ptr_dtor(&_retval);
    }
    return ret;
}

/* we must check for exception immediately if we don't have chances to go back to ZendVM (e.g event loop) */
static sw_inline int sw_zend_call_function_ex2(
    zval *function_name, zend_fcall_info_cache *fci_cache, uint32_t param_count, zval *params, zval *retval) {
    int ret = sw_zend_call_function_ex(function_name, fci_cache, param_count, params, retval);
    if (UNEXPECTED(EG(exception))) {
        zend_exception_error(EG(exception), E_ERROR);
    }
    return ret;
}

static sw_inline int sw_zend_call_function_anyway(zend_fcall_info *fci, zend_fcall_info_cache *fci_cache) {
    zval retval;
    if (!fci->retval) {
        fci->retval = &retval;
    }
    int ret = zend_call_function(fci, fci_cache);
    if (fci->retval == &retval) {
        zval_ptr_dtor(&retval);
    }
    return ret;
}

static sw_inline void sw_zend_fci_params_persist(zend_fcall_info *fci) {
    if (fci->param_count > 0) {
        zval *params = (zval *) ecalloc(fci->param_count, sizeof(zval));
        for (uint32_t i = 0; i < fci->param_count; i++) {
            ZVAL_COPY(&params[i], &fci->params[i]);
        }
        fci->params = params;
    }
}

static sw_inline void sw_zend_fci_params_discard(zend_fcall_info *fci) {
    if (fci->param_count > 0) {
        for (uint32_t i = 0; i < fci->param_count; i++) {
            zval_ptr_dtor(&fci->params[i]);
        }
        efree(fci->params);
    }
}

static sw_inline void sw_zend_fci_cache_persist(zend_fcall_info_cache *fci_cache) {
    if (fci_cache->object) {
        GC_ADDREF(fci_cache->object);
    }
    if (fci_cache->function_handler->op_array.fn_flags & ZEND_ACC_CLOSURE) {
        GC_ADDREF(ZEND_CLOSURE_OBJECT(fci_cache->function_handler));
    }
}

static sw_inline void sw_zend_fci_cache_discard(zend_fcall_info_cache *fci_cache) {
    if (fci_cache->object) {
        OBJ_RELEASE(fci_cache->object);
    }
    if (fci_cache->function_handler->op_array.fn_flags & ZEND_ACC_CLOSURE) {
        OBJ_RELEASE(ZEND_CLOSURE_OBJECT(fci_cache->function_handler));
    }
}

#define sw_php_spl_object_hash(o) php_spl_object_hash(Z_OBJ_P(o))

//----------------------------------Misc API------------------------------------

static sw_inline int php_swoole_check_reactor() {
    if (SWOOLE_G(req_status) == PHP_SWOOLE_RSHUTDOWN_BEGIN) {
        return -1;
    }
    if (sw_unlikely(!sw_reactor())) {
        return php_swoole_reactor_init() == SW_OK ? 1 : -1;
    } else {
        return 0;
    }
}

static sw_inline char *php_swoole_url_encode(const char *value, size_t value_len, size_t *exten) {
    zend_string *str = php_url_encode(value, value_len);
    *exten = ZSTR_LEN(str);
    char *return_str = estrndup(ZSTR_VAL(str), ZSTR_LEN(str));
    zend_string_release(str);
    return return_str;
}

static sw_inline char *php_swoole_http_build_query(zval *zdata, size_t *length, smart_str *formstr) {
    if (HASH_OF(zdata)) {
#if PHP_VERSION_ID < 80300
        php_url_encode_hash_ex(
            HASH_OF(zdata), formstr, nullptr, 0, nullptr, 0, nullptr, 0, nullptr, nullptr, (int) PHP_QUERY_RFC1738);
#else
        php_url_encode_hash_ex(HASH_OF(zdata), formstr, NULL, 0, NULL, NULL, NULL, (int) PHP_QUERY_RFC1738);
#endif
    } else {
        if (formstr->s) {
            smart_str_free(formstr);
        }
        return nullptr;
    }
    if (!formstr->s) {
        return nullptr;
    }
    smart_str_0(formstr);
    *length = formstr->s->len;
    return formstr->s->val;
}

static inline const char *php_swoole_get_last_error_message() {
    return PG(last_error_message) ? PG(last_error_message)->val : nullptr;
}

static inline const char *php_swoole_get_last_error_file() {
    return PG(last_error_file) ? PG(last_error_file)->val : "-";
}

END_EXTERN_C()

#endif /* PHP_SWOOLE_PRIVATE_H */
ext/swoole/ext-src/swoole_curl_interface.h000064400000004473151730542140015001 0ustar00/*
 +----------------------------------------------------------------------+
 | Swoole                                                               |
 +----------------------------------------------------------------------+
 | Copyright (c) 2012-2015 The Swoole Group                             |
 +----------------------------------------------------------------------+
 | This source file is subject to version 2.0 of the Apache license,    |
 | that is bundled with this package in the file LICENSE, and is        |
 | available through the world-wide-web at the following url:           |
 | http://www.apache.org/licenses/LICENSE-2.0.html                      |
 | If you did not receive a copy of the Apache2.0 license and are unable|
 | to obtain it through the world-wide-web, please send a note to       |
 | license@swoole.com so we can mail you a copy immediately.            |
 +----------------------------------------------------------------------+
 */

#pragma once

#include "php_swoole_cxx.h"

#ifdef SW_USE_CURL
SW_EXTERN_C_BEGIN

#include <curl/curl.h>
#include <curl/multi.h>

#define curl_easy_reset swoole_curl_easy_reset

void swoole_native_curl_minit(int module_number);
void swoole_native_curl_mshutdown();

PHP_FUNCTION(swoole_native_curl_close);
PHP_FUNCTION(swoole_native_curl_copy_handle);
PHP_FUNCTION(swoole_native_curl_errno);
PHP_FUNCTION(swoole_native_curl_error);
PHP_FUNCTION(swoole_native_curl_exec);
PHP_FUNCTION(swoole_native_curl_getinfo);
PHP_FUNCTION(swoole_native_curl_init);
PHP_FUNCTION(swoole_native_curl_setopt);
PHP_FUNCTION(swoole_native_curl_setopt_array);
PHP_FUNCTION(swoole_native_curl_reset);
PHP_FUNCTION(swoole_native_curl_escape);
PHP_FUNCTION(swoole_native_curl_unescape);
PHP_FUNCTION(swoole_native_curl_pause);
PHP_FUNCTION(swoole_native_curl_multi_add_handle);
PHP_FUNCTION(swoole_native_curl_multi_close);
PHP_FUNCTION(swoole_native_curl_multi_errno);
PHP_FUNCTION(swoole_native_curl_multi_exec);
PHP_FUNCTION(swoole_native_curl_multi_select);
PHP_FUNCTION(swoole_native_curl_multi_remove_handle);
PHP_FUNCTION(swoole_native_curl_multi_setopt);
PHP_FUNCTION(swoole_native_curl_multi_getcontent);
PHP_FUNCTION(swoole_native_curl_multi_info_read);
PHP_FUNCTION(swoole_native_curl_multi_init);
#if LIBCURL_VERSION_NUM >= 0x073E00
PHP_FUNCTION(swoole_native_curl_upkeep);
#endif

SW_EXTERN_C_END
#endif
ext/swoole/ext-src/php_swoole_odbc.h000064400000013175151730542140013571 0ustar00/*
  +----------------------------------------------------------------------+
  | Swoole                                                               |
  +----------------------------------------------------------------------+
  | This source file is subject to version 2.0 of the Apache license,    |
  | that is bundled with this package in the file LICENSE, and is        |
  | available through the world-wide-web at the following url:           |
  | http://www.apache.org/licenses/LICENSE-2.0.html                      |
  | If you did not receive a copy of the Apache2.0 license and are unable|
  | to obtain it through the world-wide-web, please send a note to       |
  | license@swoole.com so we can mail you a copy immediately.            |
  +----------------------------------------------------------------------+
  | Author: Tianfeng Han  <rango@swoole.com>                             |
  +----------------------------------------------------------------------+
*/

#ifndef PHP_SWOOLE_ODBC_H
#define PHP_SWOOLE_ODBC_H

#include "php_swoole.h"

#ifdef SW_USE_ODBC
BEGIN_EXTERN_C()

#include "ext/pdo/php_pdo_driver.h"

#if PHP_VERSION_ID < 80300
#include "thirdparty/php82/pdo_odbc/php_pdo_odbc_int.h"
#elif PHP_VERSION_ID >= 80300 && PHP_VERSION_ID < 80400
#include "thirdparty/php83/pdo_odbc/php_pdo_odbc_int.h"
#elif PHP_VERSION_ID >= 80400 && PHP_VERSION_ID < 80500
#include "thirdparty/php84/pdo_odbc/php_pdo_odbc_int.h"
#else
#include "thirdparty/php85/pdo_odbc/php_pdo_odbc_int.h"
#endif

extern const pdo_driver_t swoole_pdo_odbc_driver;

#include "php_version.h"
#define PHP_PDO_ODBC_VERSION PHP_VERSION

RETCODE swoole_odbc_SQLConnect(SQLHDBC ConnectionHandle,
                               SQLCHAR *ServerName,
                               SQLSMALLINT NameLength1,
                               SQLCHAR *UserName,
                               SQLSMALLINT NameLength2,
                               SQLCHAR *Authentication,
                               SQLSMALLINT NameLength3);

SQLRETURN SQL_API swoole_odbc_SQLDriverConnect(SQLHDBC hdbc,
                                               SQLHWND hwnd,
                                               SQLCHAR *szConnStrIn,
                                               SQLSMALLINT cbConnStrIn,
                                               SQLCHAR *szConnStrOut,
                                               SQLSMALLINT cbConnStrOutMax,
                                               SQLSMALLINT *pcbConnStrOut,
                                               SQLUSMALLINT fDriverCompletion);

SQLRETURN SQL_API swoole_odbc_SQLExecDirect(SQLHSTMT StatementHandle, SQLCHAR *StatementText, SQLINTEGER TextLength);

SQLRETURN  SQL_API swoole_odbc_SQLGetInfo(SQLHDBC ConnectionHandle,
                              SQLUSMALLINT InfoType, SQLPOINTER InfoValue,
                              SQLSMALLINT BufferLength, SQLSMALLINT *StringLength);

SQLRETURN  SQL_API swoole_odbc_SQLGetDiagRec(SQLSMALLINT HandleType,
                                            SQLHANDLE Handle,
                                            SQLSMALLINT RecNumber,
                                            SQLCHAR *Sqlstate,
                                            SQLINTEGER *NativeError,
                                            SQLCHAR *MessageText,
                                            SQLSMALLINT BufferLength,
                                            SQLSMALLINT *TextLength);

SQLRETURN SQL_API swoole_odbc_SQLPrepare(SQLHSTMT StatementHandle, SQLCHAR *StatementText, SQLINTEGER TextLength);

SQLRETURN SQL_API swoole_odbc_SQLExecute(SQLHSTMT StatementHandle);

SQLRETURN SQL_API swoole_odbc_SQLCloseCursor(SQLHSTMT StatementHandle);

SQLRETURN SQL_API swoole_odbc_SQLPutData(SQLHSTMT StatementHandle, SQLPOINTER Data, SQLLEN StrLen_or_Ind);

SQLRETURN  SQL_API swoole_odbc_SQLGetData(SQLHSTMT StatementHandle,
                                  SQLUSMALLINT ColumnNumber, SQLSMALLINT TargetType,
                                  SQLPOINTER TargetValue, SQLLEN BufferLength,
                                  SQLLEN *StrLen_or_Ind);

SQLRETURN SQL_API swoole_odbc_SQLRowCount(SQLHSTMT StatementHandle, SQLLEN *RowCount);

SQLRETURN  SQL_API swoole_odbc_SQLDescribeCol(SQLHSTMT StatementHandle,
                                  SQLUSMALLINT ColumnNumber, SQLCHAR *ColumnName,
                                  SQLSMALLINT BufferLength, SQLSMALLINT *NameLength,
                                  SQLSMALLINT *DataType, SQLULEN *ColumnSize,
                                  SQLSMALLINT *DecimalDigits, SQLSMALLINT *Nullable);

SQLRETURN SQL_API swoole_odbc_SQLMoreResults(
    SQLHSTMT           hstmt);

SQLRETURN SQL_API swoole_odbc_SQLEndTran(SQLSMALLINT HandleType, SQLHANDLE Handle, SQLSMALLINT CompletionType);

SQLRETURN SQL_API swoole_odbc_SQLFreeHandle(SQLSMALLINT HandleType, SQLHANDLE Handle);

SQLRETURN SQL_API swoole_odbc_SQLDisconnect(SQLHDBC ConnectionHandle);

void swoole_odbc_set_blocking(bool blocking);

#ifdef SW_USE_ODBC_HOOK

#define SQLConnect swoole_odbc_SQLConnect
#define SQLDriverConnect swoole_odbc_SQLDriverConnect
#define SQLExecDirect swoole_odbc_SQLExecDirect
#define SQLGetInfo swoole_odbc_SQLGetInfo
#define SQLGetDiagRec swoole_odbc_SQLGetDiagRec
#define SQLPrepare swoole_odbc_SQLPrepare
#define SQLExecute swoole_odbc_SQLExecute
#define SQLCloseCursor  swoole_odbc_SQLCloseCursor
#define SQLGetData swoole_odbc_SQLGetData
#define SQLPutData swoole_odbc_SQLPutData
#define SQLRowCount swoole_odbc_SQLRowCount
#define SQLDescribeCol swoole_odbc_SQLDescribeCol
#define SQLEndTran swoole_odbc_SQLEndTran
#define SQLFreeHandle swoole_odbc_SQLFreeHandle
#define SQLDisconnect swoole_odbc_SQLDisconnect

#endif
END_EXTERN_C()
#endif
#endif
ext/swoole/ext-src/php_swoole_curl.h000064400000012104151730542140013616 0ustar00/*
 +----------------------------------------------------------------------+
 | Swoole                                                               |
 +----------------------------------------------------------------------+
 | This source file is subject to version 2.0 of the Apache license,    |
 | that is bundled with this package in the file LICENSE, and is        |
 | available through the world-wide-web at the following url:           |
 | http://www.apache.org/licenses/LICENSE-2.0.html                      |
 | If you did not receive a copy of the Apache2.0 license and are unable|
 | to obtain it through the world-wide-web, please send a note to       |
 | license@swoole.com so we can mail you a copy immediately.            |
 +----------------------------------------------------------------------+
 | Author: Tianfeng Han  <rango@swoole.com>                             |
 +----------------------------------------------------------------------+
 */

#pragma once

#include "php_swoole_cxx.h"

#ifdef SW_USE_CURL
#include "swoole_util.h"

SW_EXTERN_C_BEGIN
#include <curl/curl.h>
#include <curl/multi.h>
#if PHP_VERSION_ID >= 80400
#include "thirdparty/php84/curl/curl_private.h"
#else
#include "thirdparty/php/curl/curl_private.h"
#endif
SW_EXTERN_C_END

#if LIBCURL_VERSION_NUM < 0x073800
#error "require cURL version 7.56.0 or later"
#endif

#include <unordered_set>

CURLcode swoole_curl_easy_perform(CURL *cp);
php_curl *swoole_curl_get_handle(zval *zid, bool exclusive = true, bool required = true);
void swoole_curl_easy_reset(CURL *curl);

namespace swoole {
namespace curl {

class Multi;

struct Socket {
    Multi *multi;
    network::Socket *socket;
    int bitmask;
    int sockfd;
    int action;
    bool deleted;
};

struct Handle {
    CURL *cp;
    Multi *multi;
    /**
     * This is only for the swoole_curl_easy_perform function,
     * and it has a one-to-one relationship with the curl handle.
     * It must be destroyed when the curl handle is released.
     */
    Multi *easy_multi;

    explicit Handle(CURL *_cp) {
        cp = _cp;
        multi = nullptr;
        easy_multi = nullptr;
    }
};

Handle *get_handle(CURL *cp);
Handle *create_handle(CURL *ch);
void destroy_handle(CURL *ch);

struct Selector {
    bool timer_callback = false;
    bool executing = false;
    std::unordered_set<Socket *> active_sockets;
    std::unordered_set<Socket *> release_sockets;
};

class Multi {
    CURLM *multi_handle_;
    TimerNode *timer = nullptr;
    long timeout_ms_ = 0;
    Coroutine *co = nullptr;
    int running_handles_ = 0;
    bool defer_callback = false;
    Selector selector;
    std::unordered_map<curl_socket_t, Socket *> sockets;

    CURLcode read_info() const;

    int set_event(void *socket_ptr, curl_socket_t sockfd, int action);
    int del_event(void *socket_ptr, curl_socket_t sockfd);
    void selector_finish();
    void selector_prepare();

    bool wait_event() const {
        return timer || !sockets.empty();
    }

    void add_timer(long timeout_ms) {
        if (timer && swoole_timer_is_available()) {
            swoole_timer_del(timer);
        }
        timeout_ms_ = timeout_ms;
        timer = swoole_timer_add(timeout_ms, false, [this](Timer *_timer, TimerNode *tnode) {
            timer = nullptr;
            callback(nullptr, 0);
        });
    }

    void del_timer() {
        if (timer && swoole_timer_is_available()) {
            swoole_timer_del(timer);
            timeout_ms_ = -1;
            timer = nullptr;
        }
    }

    void set_timer() {
        long _timeout_ms = 0;
        curl_multi_timeout(multi_handle_, &_timeout_ms);
        handle_timeout(multi_handle_, _timeout_ms, this);
    }

  public:
    Multi();
    ~Multi();

    CURLM *get_multi_handle() const {
        return multi_handle_;
    }

    int get_running_handles() const {
        return running_handles_;
    }

    CURLMcode add_handle(Handle *handle);
    CURLMcode remove_handle(Handle *handle) const;

    CURLMcode perform() {
        return curl_multi_perform(multi_handle_, &running_handles_);
    }

    int get_event(int action) {
        return action == CURL_POLL_IN ? SW_EVENT_READ : SW_EVENT_WRITE;
    }

    Coroutine *check_bound_co() {
        if (co) {
            Coroutine::set_socket_bound_cid(co->get_cid());
            swoole_fatal_error(SW_ERROR_CO_HAS_BEEN_BOUND,
                               "This cURL handle is currently executing in coroutine#%ld, cannot be operated",
                               co->get_cid());
            return nullptr;
        }
        return Coroutine::get_current_safe();
    }

    CURLcode exec(Handle *handle);
    long select(php_curlm *mh, double timeout = -1);
    void callback(Socket *curl_socket, int bitmask, int sockfd = -1);

    static int cb_readable(Reactor *reactor, Event *event);
    static int cb_writable(Reactor *reactor, Event *event);
    static int cb_error(Reactor *reactor, Event *event);
    static int handle_socket(CURL *easy, curl_socket_t s, int action, void *userp, void *socketp);
    static int handle_timeout(CURLM *multi, long timeout_ms, void *userp);
};
};  // namespace curl
}  // namespace swoole
#endif
ext/swoole/ext-src/php_swoole_client.h000064400000005453151730542150014141 0ustar00/*
 +----------------------------------------------------------------------+
 | Swoole                                                               |
 +----------------------------------------------------------------------+
 | Copyright (c) 2012-2015 The Swoole Group                             |
 +----------------------------------------------------------------------+
 | This source file is subject to version 2.0 of the Apache license,    |
 | that is bundled with this package in the file LICENSE, and is        |
 | available through the world-wide-web at the following url:           |
 | http://www.apache.org/licenses/LICENSE-2.0.html                      |
 | If you did not receive a copy of the Apache2.0 license and are unable|
 | to obtain it through the world-wide-web, please send a note to       |
 | license@swoole.com so we can mail you a copy immediately.            |
 +----------------------------------------------------------------------+
 | Author: Tianfeng Han  <rango@swoole.com>                             |
 +----------------------------------------------------------------------+
 */

#pragma once

#include "php_swoole_cxx.h"
#include "swoole_client.h"

enum ClientFlag {
    SW_FLAG_KEEP = 1u << 12,
    SW_FLAG_ASYNC = 1u << 10,
    SW_FLAG_SYNC = 1u << 11,
};

struct AsyncClientObject {
    zend::Callable *onConnect;
    zend::Callable *onReceive;
    zend::Callable *onClose;
    zend::Callable *onError;
    zend::Callable *onBufferFull;
    zend::Callable *onBufferEmpty;
    zend::Callable *onSSLReady;
    zval _zobject;
};

typedef swoole::network::Client NetClient;

struct ClientObject {
    NetClient *cli;
#ifdef SWOOLE_SOCKETS_SUPPORT
    zval *zsocket;
#endif
    AsyncClientObject *async;
    zend_object std;
};

static inline ClientObject *php_swoole_client_fetch_object(zend_object *obj) {
    return reinterpret_cast<ClientObject *>(reinterpret_cast<char *>(obj) - swoole_client_handlers.offset);
}

static inline ClientObject *php_swoole_client_fetch_object(const zval *zobj) {
    return php_swoole_client_fetch_object(Z_OBJ_P(zobj));
}

static inline NetClient *php_swoole_client_get_cli(const zval *zobject) {
    return php_swoole_client_fetch_object(Z_OBJ_P(zobject))->cli;
}

static inline enum swSocketType php_swoole_client_get_type(long type) {
    return (enum swSocketType)(type & (~SW_FLAG_SYNC) & (~SW_FLAG_ASYNC) & (~SW_FLAG_KEEP) & (~SW_SOCK_SSL));
}

NetClient *php_swoole_client_get_cli_safe(const zval *zobject);
void php_swoole_client_free(const zval *zobject, NetClient *cli);
void php_swoole_client_async_free_object(const ClientObject *client_obj);
bool php_swoole_client_check_setting(NetClient *cli, const zval *zset);
void php_swoole_client_check_ssl_setting(const NetClient *cli, const zval *zset);
bool php_swoole_client_enable_ssl_encryption(NetClient *cli, zval *zobject);
ext/swoole/ext-src/php_swoole_http_server.h000064400000010174151730542150015224 0ustar00/*
 +----------------------------------------------------------------------+
 | Swoole                                                               |
 +----------------------------------------------------------------------+
 | Copyright (c) 2012-2015 The Swoole Group                             |
 +----------------------------------------------------------------------+
 | This source file is subject to version 2.0 of the Apache license,    |
 | that is bundled with this package in the file LICENSE, and is        |
 | available through the world-wide-web at the following url:           |
 | http://www.apache.org/licenses/LICENSE-2.0.html                      |
 | If you did not receive a copy of the Apache2.0 license and are unable|
 | to obtain it through the world-wide-web, please send a note to       |
 | license@swoole.com so we can mail you a copy immediately.            |
 +----------------------------------------------------------------------+
 | Author: Tianfeng Han  <rango@swoole.com>                             |
 +----------------------------------------------------------------------+
 */

#pragma once

#include "php_swoole_server.h"
#include "php_swoole_http.h"

#include "swoole_mime_type.h"

bool swoole_http_server_onBeforeRequest(swoole::http::Context *ctx);
void swoole_http_server_onAfterResponse(swoole::http::Context *ctx);
void swoole_http_server_populate_ip_and_port(
    swoole::Server *server, HashTable *ht, swoole::Connection *conn, swoole::SessionId session_id, bool keepalive);

int swoole_websocket_onMessage(swoole::Server *serv, swoole::RecvData *req);
int swoole_websocket_onHandshake(swoole::Server *serv, swoole::ListenPort *port, swoole::http::Context *ctx);
void swoole_websocket_onBeforeHandshakeResponse(swoole::http::Context *ctx);
void swoole_websocket_onOpen(swoole::http::Context *ctx);
void swoole_websocket_onRequest(swoole::http::Context *ctx);
bool swoole_websocket_handshake(swoole::http::Context *ctx);

int swoole_http2_server_parse(const std::shared_ptr<swoole::http2::Session> &client, const char *buf);
int swoole_http2_server_onReceive(swoole::Server *serv, swoole::Connection *conn, swoole::RecvData *req);

std::shared_ptr<swoole::http2::Session> swoole_http2_server_session_new(swoole::SessionId fd);
void swoole_http2_server_session_free(swoole::SessionId fd);

bool swoole_http2_server_end(swoole::http::Context *ctx, zend_string *sdata);
bool swoole_http2_server_write(swoole::http::Context *ctx, zend_string *sdata);
bool swoole_http2_server_send_file(swoole::http::Context *ctx, zend_string *file, off_t offset, size_t length);
bool swoole_http2_server_ping(swoole::http::Context *ctx);
bool swoole_http2_server_goaway(swoole::http::Context *ctx, zend_long error_code, zend_string *sdata);

static inline void http_server_add_server_array(HashTable *ht, zend_string *key, const char *value) {
    zval tmp;
    ZVAL_STRING(&tmp, value);
    zend_hash_add_new(ht, key, &tmp);
}

static inline void http_server_add_server_array(HashTable *ht, zend_string *key, const char *value, size_t length) {
    zval tmp;
    ZVAL_STRINGL(&tmp, value, length);
    zend_hash_add_new(ht, key, &tmp);
}

static inline void http_server_add_server_array(HashTable *ht, zend_string *key, zend_long value) {
    zval tmp;
    ZVAL_LONG(&tmp, value);
    zend_hash_add_new(ht, key, &tmp);
}

static inline void http_server_add_server_array(HashTable *ht, zend_string *key, double value) {
    zval tmp;
    ZVAL_DOUBLE(&tmp, value);
    zend_hash_add_new(ht, key, &tmp);
}

static inline void http_server_add_server_array(HashTable *ht, zend_string *key, zend_string *value) {
    zval tmp;
    ZVAL_STR(&tmp, value);
    zend_hash_add_new(ht, key, &tmp);
}

static inline void http_server_add_server_array(HashTable *ht, zend_string *key, zval *value) {
    zend_hash_add_new(ht, key, value);
}

static inline void http_server_set_object_fd_property(zend_object *object, const zend_class_entry *ce, long fd) {
    auto *zv = zend_hash_find(&ce->properties_info, SW_ZSTR_KNOWN(SW_ZEND_STR_FD));
    auto *property_info = static_cast<zend_property_info *>(Z_PTR_P(zv));
    auto property = OBJ_PROP(object, property_info->offset);
    ZVAL_LONG(property, fd);
}
ext/swoole/ext-src/php_swoole_http.h000064400000040402151730542150013633 0ustar00/*
 +----------------------------------------------------------------------+
 | Swoole                                                               |
 +----------------------------------------------------------------------+
 | Copyright (c) 2012-2015 The Swoole Group                             |
 +----------------------------------------------------------------------+
 | This source file is subject to version 2.0 of the Apache license,    |
 | that is bundled with this package in the file LICENSE, and is        |
 | available through the world-wide-web at the following url:           |
 | http://www.apache.org/licenses/LICENSE-2.0.html                      |
 | If you did not receive a copy of the Apache2.0 license and are unable|
 | to obtain it through the world-wide-web, please send a note to       |
 | license@swoole.com so we can mail you a copy immediately.            |
 +----------------------------------------------------------------------+
 | Author: Tianfeng Han  <rango@swoole.com>                             |
 +----------------------------------------------------------------------+
 */

#pragma once

#include "swoole_http.h"
#include "swoole_http2.h"
#include "swoole_llhttp.h"
#include "swoole_websocket.h"

#include "thirdparty/multipart_parser.h"

#include <unordered_map>
#include <unordered_set>

#ifdef SW_HAVE_ZLIB
#include <zlib.h>
#define SW_ZLIB_ENCODING_RAW -0xf
#define SW_ZLIB_ENCODING_GZIP 0x1f
#define SW_ZLIB_ENCODING_DEFLATE 0x0f
#define SW_ZLIB_ENCODING_ANY 0x2f
#if MAX_MEM_LEVEL >= 8
#define SW_ZLIB_DEF_MEM_LEVEL 8
#else
#define SW_ZLIB_DEF_MEM_LEVEL MAX_MEM_LEVEL
#endif
#endif

#ifdef SW_HAVE_BROTLI
#include <brotli/encode.h>
#include <brotli/decode.h>
#endif

#ifdef SW_HAVE_ZSTD
#include <zstd.h>
#endif

#define HTTP_API

#include <nghttp2/nghttp2.h>

enum swHttpHeaderFlag {
    HTTP_HEADER_SERVER = 1u << 1,
    HTTP_HEADER_CONNECTION = 1u << 2,
    HTTP_HEADER_CONTENT_LENGTH = 1u << 3,
    HTTP_HEADER_DATE = 1u << 4,
    HTTP_HEADER_CONTENT_TYPE = 1u << 5,
    HTTP_HEADER_TRANSFER_ENCODING = 1u << 6,
    HTTP_HEADER_ACCEPT_ENCODING = 1u << 7,
    HTTP_HEADER_CONTENT_ENCODING = 1u << 8,
};

enum swHttpCompressMethod {
    HTTP_COMPRESS_NONE,
    HTTP_COMPRESS_GZIP,
    HTTP_COMPRESS_DEFLATE,
    HTTP_COMPRESS_BR,
    HTTP_COMPRESS_ZSTD,
};

enum swHttpErrorStatusCode {
    HTTP_ESTATUS_CONNECT_FAILED = -1,
    HTTP_ESTATUS_REQUEST_TIMEOUT = -2,
    HTTP_ESTATUS_SERVER_RESET = -3,
    HTTP_ESTATUS_SEND_FAILED = -4,
};

namespace swoole {
class Server;
class Coroutine;

namespace http2 {
class Stream;
class Session;
}  // namespace http2

namespace http {
struct Request {
    int version;
    char *path;
    uint32_t path_len;
    const char *ext;
    uint32_t ext_len;
    uint8_t post_form_urlencoded;

    zval zdata;
    const char *body_at;
    size_t body_length;
    String *chunked_body;
    String *h2_data_buffer;

    // Notice: Do not change the order
    zval *zobject;
    zval _zobject;
    zval *zserver;
    zval _zserver;
    zval *zheader;
    zval _zheader;
    zval *zget;
    zval _zget;
    zval *zpost;
    zval _zpost;
    zval *zcookie;
    zval _zcookie;
    zval *zfiles;
    zval _zfiles;
    zval *ztmpfiles;
    zval _ztmpfiles;
};

struct Response {
    enum llhttp_method method;
    int version;
    int status;
    char *reason;

    // Notice: Do not change the order
    zval *zobject;
    zval _zobject;
    zval *zheader;
    zval _zheader;
    zval *zcookie;
    zval _zcookie;
    zval *ztrailer;
    zval _ztrailer;
};

struct Context {
    SessionId fd;
    uchar completed : 1;
    uchar end_ : 1;
    uchar send_header_ : 1;
#ifdef SW_HAVE_COMPRESSION
    uchar enable_compression : 1;
    uchar accept_compression : 1;
    uchar content_compressed : 1;
#endif
    uchar send_chunked : 1;
    uchar recv_chunked : 1;
    uchar send_trailer_ : 1;
    uchar keepalive : 1;
    uchar websocket : 1;
    uchar websocket_compression : 1;
    uchar upgrade : 1;
    uchar detached : 1;
    uchar parse_cookie : 1;
    uchar parse_body : 1;
    uchar parse_files : 1;
    uchar http2 : 1;

    zval zsocket;
    uint32_t stream_id;
    String *write_buffer;

#ifdef SW_HAVE_COMPRESSION
    int8_t compression_level;
    int8_t compression_method;
    uint32_t compression_min_length;
    std::shared_ptr<std::unordered_set<std::string>> compression_types;
    std::shared_ptr<String> zlib_buffer;
#endif

    std::shared_ptr<String> continue_frame_buffer;
    WebSocketSettings websocket_settings;

    Request request;
    Response response;

    llhttp_t parser;
    multipart_parser *mt_parser;

    uint16_t input_var_num;
    const char *current_header_name;
    size_t current_header_name_len;
    char *current_input_name;
    size_t current_input_name_len;
    char *current_form_data_name;
    size_t current_form_data_name_len;
    zval *current_multipart_header;
    const char *tmp_content_type;
    size_t tmp_content_type_len;
    String *form_data_buffer;

    std::string upload_tmp_dir;

    // The `private_data` pointer is used to store Server or CoSocket object
    void *private_data;
    // The `private_data_2` pointer is used to save callback function
    void *private_data_2;
    bool (*send)(Context *ctx, const char *data, size_t length);
    bool (*sendfile)(Context *ctx, zend_string *file, off_t offset, size_t length);
    bool (*close)(Context *ctx);
    bool (*onBeforeRequest)(Context *ctx);
    void (*onAfterResponse)(Context *ctx);

    void init(Server *server);
    void init(zval *zsock);
    void bind(Server *server);
    void bind(zval *zsock);
    void copy(const Context *ctx);
    bool init_multipart_parser(const char *boundary_str, int boundary_len);
    bool get_multipart_boundary(
        const char *at, size_t length, size_t offset, char **out_boundary_str, int *out_boundary_len);
    size_t parse(const char *data, size_t length);
    bool parse_multipart_data(const char *at, size_t length) const;

    HTTP_API bool set_header(const char *, size_t, zval *, bool);
    HTTP_API bool set_header(const char *, size_t, const char *, size_t, bool);
    HTTP_API bool set_header(const char *, size_t, const std::string &, bool);
    HTTP_API void end(zend_string *sdata, zval *return_value);
    HTTP_API void write(zend_string *sdata, zval *return_value);
    HTTP_API bool send_file(zend_string *file, off_t offset, size_t length);

    String *get_write_buffer();

    String *get_http2_data_buffer() {
        String *buffer = request.h2_data_buffer;
        if (!buffer) {
            buffer = new String(SW_HTTP2_DATA_BUFFER_SIZE);
            request.h2_data_buffer = buffer;
        }
        return buffer;
    }

    size_t get_http2_data_length() {
        if (request.h2_data_buffer) {
            return request.h2_data_buffer->length;
        } else {
            return 0;
        }
    }

    size_t get_content_length() const {
        return parser.content_length;
    }

    bool is_co_socket() const {
        return !ZVAL_IS_NULL(&zsocket);
    }

    Server *get_async_server() const {
        return static_cast<Server *>(private_data);
    }

    SocketImpl *get_co_socket() const {
        return static_cast<SocketImpl *>(private_data);
    }

#ifdef SW_HAVE_COMPRESSION
    void set_compression_method(const char *accept_encoding, size_t length);
    const char *get_content_encoding() const;
    bool compress(const char *data, size_t length);
#endif

    bool is_available() const;
    void free();

  private:
    void build_header(String *http_buffer, const char *body, size_t length);
    ssize_t build_trailer(String *http_buffer) const;
    void send_trailer(zval *return_value);
};

class Cookie {
    bool encode_;
    smart_str buffer_ = {};

  protected:
    zend_string *name = nullptr;
    zend_string *value = nullptr;
    zend_string *path = nullptr;
    zend_string *domain = nullptr;
    zend_string *sameSite = nullptr;
    zend_string *priority = nullptr;
    zend_long expires = 0;
    zend_bool secure = false;
    zend_bool httpOnly = false;
    zend_bool partitioned = false;

  public:
    explicit Cookie(bool _encode = true) {
        encode_ = _encode;
    }
    Cookie *withName(zend_string *);
    Cookie *withExpires(zend_long);
    Cookie *withSecure(zend_bool);
    Cookie *withHttpOnly(zend_bool);
    Cookie *withPartitioned(zend_bool);
    Cookie *withValue(zend_string *);
    Cookie *withPath(zend_string *);
    Cookie *withDomain(zend_string *);
    Cookie *withSameSite(zend_string *);
    Cookie *withPriority(zend_string *);
    void reset();
    void toArray(zval *return_value) const;
    zend_string *toString();
    ~Cookie();
};

}  // namespace http

namespace http2 {
class Stream {
  public:
    http::Context *ctx;
    // uint8_t priority; // useless now
    uint32_t id;
    // flow control
    uint32_t remote_window_size;
    uint32_t local_window_size;
    Coroutine *waiting_coroutine = nullptr;

    Stream(const Session *client, uint32_t _id);
    ~Stream();

    bool send_header(const String *body, bool end_stream) const;
    bool send_body(const String *body,
                   bool end_stream,
                   const std::shared_ptr<Session> &session,
                   off_t offset = 0,
                   size_t length = 0);
    bool send_end_stream_data_frame() const;
    bool send_trailer() const;

    void reset(uint32_t error_code) const;
};

class Session {
  public:
    SessionId fd;
    std::unordered_map<uint32_t, std::shared_ptr<Stream>> streams;

    nghttp2_hd_inflater *inflater = nullptr;
    nghttp2_hd_deflater *deflater = nullptr;

    Settings local_settings = {};
    Settings remote_settings = {};

    // flow control
    uint32_t remote_window_size;
    uint32_t local_window_size;

    uint32_t max_body_size;
    uint32_t last_stream_id;
    bool shutting_down;
    bool is_coro;

    http::Context *default_ctx = nullptr;
    void *private_data = nullptr;

    void (*handle)(const std::shared_ptr<Session> &, const std::shared_ptr<Stream> &) = nullptr;

    explicit Session(SessionId _fd);
    ~Session();
    std::shared_ptr<Stream> create_stream(uint32_t stream_id);
    std::shared_ptr<Stream> get_stream(uint32_t stream_id);
    bool remove_stream(uint32_t stream_id);
};
}  // namespace http2
}  // namespace swoole

extern zend_class_entry *swoole_http_request_ce;
extern zend_class_entry *swoole_http_response_ce;
extern zend_class_entry *swoole_http_cookie_ce;

swoole::http::Context *swoole_http_context_new(swoole::SessionId fd);
swoole::http::Cookie *php_swoole_http_get_cooke_safety(const zval *zobject);

/**
 *  These class properties cannot be modified by the user before assignment, such as Swoole\\Http\\Request.
 *  So we can use this function to init property.
 */
static sw_inline zval *swoole_http_init_and_read_property(const zend_class_entry *ce,
                                                          const zval *zobject,
                                                          zval **zproperty_store_pp,
                                                          zend_string *name,
                                                          int size = HT_MIN_SIZE) {
    if (UNEXPECTED(!*zproperty_store_pp)) {
        zval *zv = zend_hash_find(&ce->properties_info, name);
        auto *property_info = (zend_property_info *) Z_PTR_P(zv);
        zval *property = OBJ_PROP(SW_Z8_OBJ_P(zobject), property_info->offset);
        array_init_size(property, size);
        *zproperty_store_pp = (zval *) (zproperty_store_pp + 1);
        **zproperty_store_pp = *property;
    }
    return *zproperty_store_pp;
}

static sw_inline zval *swoole_http_init_and_read_property(
    zend_class_entry *ce, const zval *zobject, zval **zproperty_store_pp, const char *name, size_t name_len) {
    if (UNEXPECTED(!*zproperty_store_pp)) {
        // Notice: swoole http server properties can not be unset anymore, so we can read it without checking
        zval rv, *property = zend_read_property(ce, SW_Z8_OBJ_P(zobject), name, name_len, false, &rv);
        array_init(property);
        *zproperty_store_pp = (zval *) (zproperty_store_pp + 1);
        **zproperty_store_pp = *property;
    }
    return *zproperty_store_pp;
}

static sw_inline bool swoole_http_has_crlf(const char *value, size_t length) {
    /* new line/NUL character safety check */
    for (size_t i = 0; i < length; i++) {
        /* RFC 7230 ch. 3.2.4 deprecates folding support */
        if (value[i] == '\n' || value[i] == '\r') {
            php_swoole_error(E_WARNING, "Header may not contain more than a single header, new line detected");
            return true;
        }
        if (value[i] == '\0') {
            php_swoole_error(E_WARNING, "Header may not contain NUL bytes");
            return true;
        }
    }

    return false;
}

void swoole_http_parse_cookie(zval *array, const char *at, size_t length);
bool swoole_http_token_list_contains_value(const char *at, size_t length, const char *value);

swoole::http::Context *php_swoole_http_request_get_context(const zval *zobject);
void php_swoole_http_request_set_context(const zval *zobject, swoole::http::Context *ctx);
swoole::http::Context *php_swoole_http_response_get_context(const zval *zobject);
void php_swoole_http_response_set_context(const zval *zobject, swoole::http::Context *ctx);
zend_string *php_swoole_http_get_date();

#ifdef SW_HAVE_ZLIB
voidpf php_zlib_alloc(voidpf opaque, uInt items, uInt size);
void php_zlib_free(voidpf opaque, voidpf address);
#endif

#ifdef SW_HAVE_BROTLI
void *php_brotli_alloc(void *opaque, size_t size);
void php_brotli_free(void *opaque, void *address);
#endif

static sw_inline nghttp2_mem *php_nghttp2_mem() {
    static nghttp2_mem mem = {nullptr,
                              [](size_t size, void *mem_user_data) { return emalloc(size); },
                              [](void *ptr, void *mem_user_data) { return efree(ptr); },
                              [](size_t nmemb, size_t size, void *mem_user_data) { return ecalloc(nmemb, size); },
                              [](void *ptr, size_t size, void *mem_user_data) { return erealloc(ptr, size); }};
    return &mem;
}

namespace swoole {
namespace http2 {
//-----------------------------------namespace begin--------------------------------------------
class HeaderSet {
  public:
    explicit HeaderSet(size_t size) : size(size), index(0) {
        nvs = (nghttp2_nv *) ecalloc(size, sizeof(nghttp2_nv));
    }

    nghttp2_nv *get() const {
        return nvs;
    }

    size_t len() const {
        return index;
    }

    void reserve_one() {
        index++;
    }

    void add(size_t index,
             const char *name,
             size_t name_len,
             const char *value,
             size_t value_len,
             const uint8_t flags = NGHTTP2_NV_FLAG_NONE) const {
        if (sw_likely(index < size || nvs[index].name == nullptr)) {
            nghttp2_nv *nv = &nvs[index];
            name = zend_str_tolower_dup(name, name_len);  // auto to lower
            nv->name = (uchar *) name;
            nv->namelen = name_len;
            nv->value = (uchar *) emalloc(value_len);
            memcpy(nv->value, value, value_len);
            nv->valuelen = value_len;
            nv->flags = flags | NGHTTP2_NV_FLAG_NO_COPY_NAME | NGHTTP2_NV_FLAG_NO_COPY_VALUE;
            swoole_trace_log(SW_TRACE_HTTP2,
                             "name=(%zu)[" SW_ECHO_LEN_BLUE "], value=(%zu)[" SW_ECHO_LEN_CYAN "]",
                             name_len,
                             (int) name_len,
                             name,
                             value_len,
                             (int) value_len,
                             value);
        } else {
            php_swoole_fatal_error(
                E_WARNING, "unexpect http2 header [%.*s] (duplicated or overflow)", (int) name_len, name);
        }
    }

    void add(const char *name,
             size_t name_len,
             const char *value,
             size_t value_len,
             const uint8_t flags = NGHTTP2_NV_FLAG_NONE) {
        add(index++, name, name_len, value, value_len, flags);
    }

    ~HeaderSet() {
        for (size_t i = 0; i < size; ++i) {
            if (sw_likely(nvs[i].name /* && nvs[i].value */)) {
                efree((void *) nvs[i].name);
                efree((void *) nvs[i].value);
            }
        }
        efree(nvs);
    }

  private:
    nghttp2_nv *nvs;
    size_t size;
    size_t index;
};
//-----------------------------------namespace end--------------------------------------------
}  // namespace http2
}  // namespace swoole
ext/swoole/ext-src/php_swoole_websocket.h000064400000004761151730542160014653 0ustar00/*
 +----------------------------------------------------------------------+
 | Swoole                                                               |
 +----------------------------------------------------------------------+
 | Copyright (c) 2012-2015 The Swoole Group                             |
 +----------------------------------------------------------------------+
 | This source file is subject to version 2.0 of the Apache license,    |
 | that is bundled with this package in the file LICENSE, and is        |
 | available through the world-wide-web at the following url:           |
 | http://www.apache.org/licenses/LICENSE-2.0.html                      |
 | If you did not receive a copy of the Apache2.0 license and are unable|
 | to obtain it through the world-wide-web, please send a note to       |
 | license@swoole.com so we can mail you a copy immediately.            |
 +----------------------------------------------------------------------+
 | Author: Tianfeng Han  <rango@swoole.com>                             |
 +----------------------------------------------------------------------+
 */

#pragma once

#include "php_swoole_cxx.h"

#include "swoole_websocket.h"

#define SW_WEBSOCKET_DEFAULT_BUFFER 4096

namespace swoole {
namespace websocket {
void apply_setting(WebSocketSettings &settings, zend_array *vht, bool in_server);
void recv_frame(const WebSocketSettings &settings,
                std::shared_ptr<String> &frame_buffer,
                SocketImpl *sock,
                zval *return_value,
                double timeout);
ssize_t send_frame(const WebSocketSettings &settings,
                   SocketImpl *sock,
                   uchar opcode,
                   uchar flags,
                   const char *payload,
                   size_t payload_length);
void construct_frame(zval *zframe, zend_long opcode, zval *zpayload, uint8_t flags);

#ifdef SW_HAVE_ZLIB
bool message_compress(String *buffer, const char *data, size_t length, int level);
bool message_uncompress(String *buffer, const char *in, size_t in_len);
#endif

struct FrameObject {
    uint8_t opcode;
    uint8_t flags;
    uint16_t code;
    zval *data;

    explicit FrameObject(zval *data, zend_long _opcode = 0, zend_long _flags = 0, zend_long _code = 0);
    size_t get_data_size() const {
        return (data && ZVAL_IS_STRING(data)) ? Z_STRLEN_P(data) : 0;
    }
    bool pack(String *buffer);
    static bool uncompress(zval *zpayload, const char *data, size_t length);
};
}  // namespace websocket
}  // namespace swoole
ext/swoole/ext-src/php_swoole_stdext.h000064400000003533151730542160014174 0ustar00/*
 +----------------------------------------------------------------------+
 | Swoole                                                               |
 +----------------------------------------------------------------------+
 | Copyright (c) 2012-2015 The Swoole Group                             |
 +----------------------------------------------------------------------+
 | This source file is subject to version 2.0 of the Apache license,    |
 | that is bundled with this package in the file LICENSE, and is        |
 | available through the world-wide-web at the following url:           |
 | http://www.apache.org/licenses/LICENSE-2.0.html                      |
 | If you did not receive a copy of the Apache2.0 license and are unable|
 | to obtain it through the world-wide-web, please send a note to       |
 | license@swoole.com so we can mail you a copy immediately.            |
 +----------------------------------------------------------------------+
 */

#pragma once

#include "php_swoole_cxx.h"

SW_EXTERN_C_BEGIN
PHP_FUNCTION(swoole_call_array_method);
PHP_FUNCTION(swoole_call_string_method);
PHP_FUNCTION(swoole_call_stream_method);
PHP_FUNCTION(swoole_array_search);
PHP_FUNCTION(swoole_array_contains);
PHP_FUNCTION(swoole_array_join);
PHP_FUNCTION(swoole_array_key_exists);
PHP_FUNCTION(swoole_array_map);
PHP_FUNCTION(swoole_array_is_typed);
PHP_FUNCTION(swoole_array_is_empty);
PHP_FUNCTION(swoole_str_split);
PHP_FUNCTION(swoole_str_is_empty);
PHP_FUNCTION(swoole_str_match);
PHP_FUNCTION(swoole_str_match_all);
PHP_FUNCTION(swoole_str_json_decode);
PHP_FUNCTION(swoole_str_json_decode_to_object);
PHP_FUNCTION(swoole_parse_str);
PHP_FUNCTION(swoole_hash);
PHP_FUNCTION(swoole_typed_array);
PHP_FUNCTION(swoole_str_replace);
PHP_FUNCTION(swoole_str_ireplace);
PHP_FUNCTION(swoole_array_replace_str);
PHP_FUNCTION(swoole_array_ireplace_str);
SW_EXTERN_C_END
ext/swoole/ext-src/php_swoole_coroutine_system.h000064400000003616151730542160016276 0ustar00/*
  +----------------------------------------------------------------------+
  | Swoole                                                               |
  +----------------------------------------------------------------------+
  | This source file is subject to version 2.0 of the Apache license,    |
  | that is bundled with this package in the file LICENSE, and is        |
  | available through the world-wide-web at the following url:           |
  | http://www.apache.org/licenses/LICENSE-2.0.html                      |
  | If you did not receive a copy of the Apache2.0 license and are unable|
  | to obtain it through the world-wide-web, please send a note to       |
  | license@swoole.com so we can mail you a copy immediately.            |
  +----------------------------------------------------------------------+
  | Author: Xinyu Zhu  <xyzhu1120@gmail.com>                             |
  |         shiguangqi <shiguangqi2008@gmail.com>                        |
  |         Tianfeng Han  <mikan.tenny@gmail.com>                        |
  +----------------------------------------------------------------------+
 */

#pragma once

#include "php_swoole_cxx.h"

// clang-format off
BEGIN_EXTERN_C()
#include "stubs/php_swoole_coroutine_system_arginfo.h"
END_EXTERN_C()
// clang-format on

SW_EXTERN_C_BEGIN
PHP_METHOD(swoole_coroutine_system, exec);
PHP_METHOD(swoole_coroutine_system, sleep);
PHP_METHOD(swoole_coroutine_system, fread);
PHP_METHOD(swoole_coroutine_system, fgets);
PHP_METHOD(swoole_coroutine_system, fwrite);
PHP_METHOD(swoole_coroutine_system, statvfs);
PHP_METHOD(swoole_coroutine_system, getaddrinfo);
PHP_METHOD(swoole_coroutine_system, readFile);
PHP_METHOD(swoole_coroutine_system, writeFile);
PHP_METHOD(swoole_coroutine_system, wait);
PHP_METHOD(swoole_coroutine_system, waitPid);
PHP_METHOD(swoole_coroutine_system, waitSignal);
PHP_METHOD(swoole_coroutine_system, waitEvent);
SW_EXTERN_C_END
ext/swoole/ext-src/php_swoole_call_stack.h000064400000003502151730542160014755 0ustar00/*
  +----------------------------------------------------------------------+
  | Swoole                                                               |
  +----------------------------------------------------------------------+
  | This source file is subject to version 2.0 of the Apache license,    |
  | that is bundled with this package in the file LICENSE, and is        |
  | available through the world-wide-web at the following url:           |
  | http://www.apache.org/licenses/LICENSE-2.0.html                      |
  | If you did not receive a copy of the Apache2.0 license and are unable|
  | to obtain it through the world-wide-web, please send a note to       |
  | license@swoole.com so we can mail you a copy immediately.            |
  +----------------------------------------------------------------------+
  | Author: Yurun  <yurun@yurunsoft.com>                                 |
  +----------------------------------------------------------------------+
*/

#include "php_swoole.h"

#ifdef ZEND_CHECK_STACK_LIMIT
#define HOOK_PHP_CALL_STACK(callback)                                                                                  \
    void *__stack_limit = EG(stack_limit);                                                                             \
    void *__stack_base = EG(stack_base);                                                                               \
    EG(stack_base) = (void *) 0;                                                                                       \
    EG(stack_limit) = (void *) 0;                                                                                      \
    callback EG(stack_limit) = __stack_limit;                                                                          \
    EG(stack_base) = __stack_base;
#else
#define HOOK_PHP_CALL_STACK(callback) callback
#endif
ext/swoole/ext-src/php_swoole_firebird.h000064400000011572151730542170014452 0ustar00/*
 +----------------------------------------------------------------------+
 | Swoole                                                               |
 +----------------------------------------------------------------------+
 | Copyright (c) 2012-2018 The Swoole Group                             |
 +----------------------------------------------------------------------+
 | This source file is subject to version 2.0 of the Apache license,    |
 | that is bundled with this package in the file LICENSE, and is        |
 | available through the world-wide-web at the following url:           |
 | http://www.apache.org/licenses/LICENSE-2.0.html                      |
 | If you did not receive a copy of the Apache2.0 license and are unable|
 | to obtain it through the world-wide-web, please send a note to       |
 | license@swoole.com so we can mail you a copy immediately.            |
 +----------------------------------------------------------------------+
 | Author: NathanFreeman  <mariasocute@163.com>                         |
 +----------------------------------------------------------------------+
*/
#ifndef SWOOLE_SRC_PHP_SWOOLE_FIREBIRD_H
#define SWOOLE_SRC_PHP_SWOOLE_FIREBIRD_H

#include "php_swoole.h"

#ifdef SW_USE_FIREBIRD

BEGIN_EXTERN_C()

#include "ext/pdo/php_pdo_driver.h"

#if PHP_VERSION_ID < 80500
#include "thirdparty/php84/pdo_firebird/php_pdo_firebird_int.h"
#else
#include "thirdparty/php85/pdo_firebird/php_pdo_firebird_int.h"
#endif

extern const pdo_driver_t swoole_pdo_firebird_driver;
void swoole_firebird_set_blocking(bool blocking);

ISC_STATUS swoole_isc_attach_database(
    ISC_STATUS *, short, const ISC_SCHAR *, isc_db_handle *, short, const ISC_SCHAR *);
ISC_STATUS swoole_isc_detach_database(ISC_STATUS *, isc_db_handle *);
ISC_STATUS swoole_isc_dsql_execute(ISC_STATUS *, isc_tr_handle *, isc_stmt_handle *, unsigned short, const XSQLDA *);
ISC_STATUS swoole_isc_dsql_execute2(
    ISC_STATUS *, isc_tr_handle *, isc_stmt_handle *, unsigned short, const XSQLDA *, const XSQLDA *);
ISC_STATUS swoole_isc_dsql_sql_info(ISC_STATUS *, isc_stmt_handle *, short, const ISC_SCHAR *, short, ISC_SCHAR *);
ISC_STATUS swoole_isc_dsql_free_statement(ISC_STATUS *, isc_stmt_handle *, unsigned short);
ISC_STATUS swoole_isc_start_transaction(ISC_STATUS *, isc_tr_handle *, short, isc_db_handle *, size_t, char *);
ISC_STATUS swoole_isc_commit_retaining(ISC_STATUS *, isc_tr_handle *);
ISC_STATUS swoole_isc_commit_transaction(ISC_STATUS *, isc_tr_handle *);
ISC_STATUS swoole_isc_rollback_transaction(ISC_STATUS *, isc_tr_handle *);
ISC_STATUS swoole_isc_dsql_allocate_statement(ISC_STATUS *, isc_db_handle *, isc_stmt_handle *);
ISC_STATUS swoole_isc_dsql_prepare(
    ISC_STATUS *, isc_tr_handle *, isc_stmt_handle *, unsigned short, const ISC_SCHAR *, unsigned short, XSQLDA *);
ISC_STATUS swoole_isc_dsql_fetch(ISC_STATUS *, isc_stmt_handle *, unsigned short, const XSQLDA *);
ISC_STATUS swoole_isc_open_blob(ISC_STATUS *, isc_db_handle *, isc_tr_handle *, isc_blob_handle *, ISC_QUAD *);
ISC_STATUS swoole_isc_blob_info(ISC_STATUS *, isc_blob_handle *, short, const ISC_SCHAR *, short, ISC_SCHAR *);
ISC_STATUS swoole_isc_get_segment(ISC_STATUS *, isc_blob_handle *, unsigned short *, unsigned short, ISC_SCHAR *);
ISC_STATUS swoole_isc_put_segment(ISC_STATUS *, isc_blob_handle *, unsigned short, const ISC_SCHAR *);
ISC_STATUS swoole_isc_close_blob(ISC_STATUS *, isc_blob_handle *);
ISC_STATUS swoole_isc_create_blob(ISC_STATUS *, isc_db_handle *, isc_tr_handle *, isc_blob_handle *, ISC_QUAD *);
ISC_STATUS swoole_isc_dsql_set_cursor_name(ISC_STATUS *, isc_stmt_handle *, const ISC_SCHAR *, unsigned short);
ISC_STATUS swoole_fb_ping(ISC_STATUS *, isc_db_handle *);
int swoole_isc_version(isc_db_handle *, ISC_VERSION_CALLBACK, void *);

#ifdef SW_USE_FIREBIRD_HOOK
#define isc_attach_database swoole_isc_attach_database
#define isc_detach_database swoole_isc_detach_database
#define isc_dsql_execute swoole_isc_dsql_execute
#define isc_dsql_execute2 swoole_isc_dsql_execute2
#define isc_dsql_sql_info swoole_isc_dsql_sql_info
#define isc_dsql_free_statement swoole_isc_dsql_free_statement
#define isc_start_transaction swoole_isc_start_transaction
#define isc_commit_retaining swoole_isc_commit_retaining
#define isc_commit_transaction swoole_isc_commit_transaction
#define isc_rollback_transaction swoole_isc_rollback_transaction
#define isc_dsql_allocate_statement swoole_isc_dsql_allocate_statement
#define isc_dsql_prepare swoole_isc_dsql_prepare
#define isc_dsql_fetch swoole_isc_dsql_fetch
#define isc_open_blob swoole_isc_open_blob
#define isc_blob_info swoole_isc_blob_info
#define isc_get_segment swoole_isc_get_segment
#define isc_put_segment swoole_isc_put_segment
#define isc_create_blob swoole_isc_create_blob
#define isc_close_blob swoole_isc_close_blob
#define isc_dsql_set_cursor_name swoole_isc_dsql_set_cursor_name
#define fb_ping swoole_fb_ping
#define isc_version swoole_isc_version
#endif
END_EXTERN_C()
#endif
#endif
ext/session/php_session.h000064400000026660151730542170011551 0ustar00/*
   +----------------------------------------------------------------------+
   | Copyright (c) The PHP Group                                          |
   +----------------------------------------------------------------------+
   | This source file is subject to version 3.01 of the PHP license,      |
   | that is bundled with this package in the file LICENSE, and is        |
   | available through the world-wide-web at the following url:           |
   | https://www.php.net/license/3_01.txt                                 |
   | If you did not receive a copy of the PHP license and are unable to   |
   | obtain it through the world-wide-web, please send a note to          |
   | license@php.net so we can mail you a copy immediately.               |
   +----------------------------------------------------------------------+
   | Author: Sascha Schumann <sascha@schumann.cx>                         |
   +----------------------------------------------------------------------+
 */

#ifndef PHP_SESSION_H
#define PHP_SESSION_H

#include "ext/standard/php_var.h"
#include "ext/random/php_random.h"

#define PHP_SESSION_API 20161017

#include "php_version.h"
#define PHP_SESSION_VERSION PHP_VERSION

/* save handler macros */
#define PS_OPEN_ARGS     void **mod_data, const char *save_path, const char *session_name
#define PS_CLOSE_ARGS    void **mod_data
#define PS_READ_ARGS     void **mod_data, zend_string *key, zend_string **val, zend_long maxlifetime
#define PS_WRITE_ARGS    void **mod_data, zend_string *key, zend_string *val, zend_long maxlifetime
#define PS_DESTROY_ARGS  void **mod_data, zend_string *key
#define PS_GC_ARGS       void **mod_data, zend_long maxlifetime, zend_long *nrdels
#define PS_CREATE_SID_ARGS void **mod_data
#define PS_VALIDATE_SID_ARGS void **mod_data, zend_string *key
#define PS_UPDATE_TIMESTAMP_ARGS void **mod_data, zend_string *key, zend_string *val, zend_long maxlifetime

typedef struct ps_module_struct {
	const char *s_name;
	zend_result (*s_open)(PS_OPEN_ARGS);
	zend_result (*s_close)(PS_CLOSE_ARGS);
	zend_result (*s_read)(PS_READ_ARGS);
	zend_result (*s_write)(PS_WRITE_ARGS);
	zend_result (*s_destroy)(PS_DESTROY_ARGS);
	zend_long (*s_gc)(PS_GC_ARGS);
	zend_string *(*s_create_sid)(PS_CREATE_SID_ARGS);
	zend_result (*s_validate_sid)(PS_VALIDATE_SID_ARGS);
	zend_result (*s_update_timestamp)(PS_UPDATE_TIMESTAMP_ARGS);
} ps_module;

#define PS_GET_MOD_DATA() *mod_data
#define PS_SET_MOD_DATA(a) *mod_data = (a)

#define PS_OPEN_FUNC(x) 	zend_result ps_open_##x(PS_OPEN_ARGS)
#define PS_CLOSE_FUNC(x) 	zend_result ps_close_##x(PS_CLOSE_ARGS)
#define PS_READ_FUNC(x) 	zend_result ps_read_##x(PS_READ_ARGS)
#define PS_WRITE_FUNC(x) 	zend_result ps_write_##x(PS_WRITE_ARGS)
#define PS_DESTROY_FUNC(x) 	zend_result ps_delete_##x(PS_DESTROY_ARGS)
#define PS_GC_FUNC(x) 		zend_long ps_gc_##x(PS_GC_ARGS)
#define PS_CREATE_SID_FUNC(x)	zend_string *ps_create_sid_##x(PS_CREATE_SID_ARGS)
#define PS_VALIDATE_SID_FUNC(x)	zend_result ps_validate_sid_##x(PS_VALIDATE_SID_ARGS)
#define PS_UPDATE_TIMESTAMP_FUNC(x) 	zend_result ps_update_timestamp_##x(PS_UPDATE_TIMESTAMP_ARGS)

/* Legacy save handler module definitions */
#define PS_FUNCS(x) \
	PS_OPEN_FUNC(x); \
	PS_CLOSE_FUNC(x); \
	PS_READ_FUNC(x); \
	PS_WRITE_FUNC(x); \
	PS_DESTROY_FUNC(x); \
	PS_GC_FUNC(x);	\
	PS_CREATE_SID_FUNC(x)

#define PS_MOD(x) \
	#x, ps_open_##x, ps_close_##x, ps_read_##x, ps_write_##x, \
	 ps_delete_##x, ps_gc_##x, php_session_create_id, \
	 php_session_validate_sid, php_session_update_timestamp

/* Legacy SID creation enabled save handler module definitions */
#define PS_FUNCS_SID(x) \
	PS_OPEN_FUNC(x); \
	PS_CLOSE_FUNC(x); \
	PS_READ_FUNC(x); \
	PS_WRITE_FUNC(x); \
	PS_DESTROY_FUNC(x); \
	PS_GC_FUNC(x); \
	PS_CREATE_SID_FUNC(x); \
	PS_VALIDATE_SID_FUNC(x); \
	PS_UPDATE_TIMESTAMP_FUNC(x);

#define PS_MOD_SID(x) \
	#x, ps_open_##x, ps_close_##x, ps_read_##x, ps_write_##x, \
	 ps_delete_##x, ps_gc_##x, ps_create_sid_##x, \
	 php_session_validate_sid, php_session_update_timestamp

/* Update timestamp enabled save handler module definitions
   New save handlers should use this API */
#define PS_FUNCS_UPDATE_TIMESTAMP(x) \
	PS_OPEN_FUNC(x); \
	PS_CLOSE_FUNC(x); \
	PS_READ_FUNC(x); \
	PS_WRITE_FUNC(x); \
	PS_DESTROY_FUNC(x); \
	PS_GC_FUNC(x); \
	PS_CREATE_SID_FUNC(x); \
	PS_VALIDATE_SID_FUNC(x); \
	PS_UPDATE_TIMESTAMP_FUNC(x);

#define PS_MOD_UPDATE_TIMESTAMP(x) \
	#x, ps_open_##x, ps_close_##x, ps_read_##x, ps_write_##x, \
	 ps_delete_##x, ps_gc_##x, ps_create_sid_##x, \
	 ps_validate_sid_##x, ps_update_timestamp_##x


typedef enum {
	php_session_disabled,
	php_session_none,
	php_session_active
} php_session_status;

typedef struct _php_session_rfc1867_progress {
	zval      sid;
	smart_str key;

	zend_long      update_step;
	zend_long      next_update;
	double    next_update_time;
	bool cancel_upload;
	bool apply_trans_sid;
	size_t    content_length;

	zval      data;                 /* the array exported to session data */
	zval      files;                /* data["files"] array */
	zval	 *post_bytes_processed; /* data["bytes_processed"] */
	zval	 *current_file_bytes_processed;
	zval      current_file;         /* array of currently uploading file */
} php_session_rfc1867_progress;

typedef struct _php_ps_globals {
	zend_string *save_path;
	zend_string *session_name;
	zend_string *id;
	char *extern_referer_chk;
	zend_string *cache_limiter;
	zend_long cookie_lifetime;
	zend_string *cookie_path;
	zend_string *cookie_domain;
	zend_string *cookie_samesite;
	bool  cookie_secure;
	bool  cookie_httponly;
	bool  cookie_partitioned;
	const ps_module *mod;
	const ps_module *default_mod;
	void *mod_data;
	php_session_status session_status;
	zend_string *session_started_filename;
	uint32_t session_started_lineno;
	int module_number;
	php_random_status_state_pcgoneseq128xslrr64 random_state;
	php_random_algo_with_state random;
	zend_long gc_probability;
	zend_long gc_divisor;
	zend_long gc_maxlifetime;
	zend_long cache_expire;
	struct {
		zval ps_open;
		zval ps_close;
		zval ps_read;
		zval ps_write;
		zval ps_destroy;
		zval ps_gc;
		zval ps_create_sid;
		zval ps_validate_sid;
		zval ps_update_timestamp;
	} mod_user_names;
	zend_string *mod_user_class_name;
	bool mod_user_implemented;
	bool mod_user_is_open;
	bool auto_start;
	bool use_cookies;
	bool use_only_cookies;
	bool use_trans_sid; /* contains the INI value of whether to use trans-sid */
	bool send_cookie;
	bool define_sid;

	const struct ps_serializer_struct *serializer;
	zval http_session_vars;

	zend_long sid_length;
	zend_long sid_bits_per_character;

	php_session_rfc1867_progress *rfc1867_progress;
	zend_string *rfc1867_prefix;  /* session.upload_progress.prefix */
	zend_string *rfc1867_name;    /* session.upload_progress.name */
	zend_long rfc1867_freq;         /* session.upload_progress.freq */
	double rfc1867_min_freq;   /* session.upload_progress.min_freq */
	bool rfc1867_enabled; /* session.upload_progress.enabled */
	bool rfc1867_cleanup; /* session.upload_progress.cleanup */

	bool use_strict_mode; /* whether or not PHP accepts unknown session ids */
	bool lazy_write; /* omit session write when it is possible */
	bool in_save_handler; /* state if session is in save handler or not */
	bool set_handler;     /* state if session module i setting handler or not */
	zend_string *session_vars; /* serialized original session data */
} php_ps_globals;

typedef php_ps_globals zend_ps_globals;

extern zend_module_entry session_module_entry;
#define phpext_session_ptr &session_module_entry

#ifdef ZTS
#define PS(v) ZEND_TSRMG(ps_globals_id, php_ps_globals *, v)
#ifdef COMPILE_DL_SESSION
ZEND_TSRMLS_CACHE_EXTERN()
#endif
#else
#define PS(v) (ps_globals.v)
#endif

#define PS_SERIALIZER_ENCODE_ARGS void
#define PS_SERIALIZER_DECODE_ARGS const char *val, size_t vallen

typedef struct ps_serializer_struct {
	const char *name;
	zend_string *(*encode)(PS_SERIALIZER_ENCODE_ARGS);
	zend_result (*decode)(PS_SERIALIZER_DECODE_ARGS);
} ps_serializer;

#define PS_SERIALIZER_ENCODE_NAME(x) ps_srlzr_encode_##x
#define PS_SERIALIZER_DECODE_NAME(x) ps_srlzr_decode_##x

#define PS_SERIALIZER_ENCODE_FUNC(x) \
	zend_string *PS_SERIALIZER_ENCODE_NAME(x)(PS_SERIALIZER_ENCODE_ARGS)
#define PS_SERIALIZER_DECODE_FUNC(x) \
	zend_result PS_SERIALIZER_DECODE_NAME(x)(PS_SERIALIZER_DECODE_ARGS)

#define PS_SERIALIZER_FUNCS(x) \
	PS_SERIALIZER_ENCODE_FUNC(x); \
	PS_SERIALIZER_DECODE_FUNC(x)

#define PS_SERIALIZER_ENTRY(x) \
	{ #x, PS_SERIALIZER_ENCODE_NAME(x), PS_SERIALIZER_DECODE_NAME(x) }

/* default create id function */
PHPAPI zend_string *php_session_create_id(PS_CREATE_SID_ARGS);
/* Dummy PS module functions */
PHPAPI zend_result php_session_validate_sid(PS_VALIDATE_SID_ARGS);
PHPAPI zend_result php_session_update_timestamp(PS_UPDATE_TIMESTAMP_ARGS);

PHPAPI void session_adapt_url(const char *url, size_t url_len, char **new_url, size_t *new_len);

PHPAPI zend_result php_session_destroy(void);
PHPAPI void php_add_session_var(zend_string *name);
PHPAPI zval *php_set_session_var(zend_string *name, zval *state_val, php_unserialize_data_t *var_hash);
PHPAPI zval *php_get_session_var(zend_string *name);
PHPAPI zval* php_get_session_var_str(const char *name, size_t name_len);

PHPAPI zend_result php_session_register_module(const ps_module *);

PHPAPI zend_result php_session_register_serializer(const char *name,
	        zend_string *(*encode)(PS_SERIALIZER_ENCODE_ARGS),
	        zend_result (*decode)(PS_SERIALIZER_DECODE_ARGS));

PHPAPI zend_result php_session_start(void);
PHPAPI zend_result php_session_flush(int write);
PHPAPI php_session_status php_get_session_status(void);

PHPAPI const ps_module *_php_find_ps_module(const char *name);
PHPAPI const ps_serializer *_php_find_ps_serializer(const char *name);

PHPAPI zend_result php_session_valid_key(const char *key);
PHPAPI zend_result php_session_reset_id(void);

#define PS_ADD_VARL(name) do {										\
	php_add_session_var(name);							\
} while (0)

#define PS_ADD_VAR(name) PS_ADD_VARL(name)

#define PS_DEL_VARL(name) do {										\
	if (!Z_ISNULL(PS(http_session_vars))) {							\
		zend_hash_del(Z_ARRVAL(PS(http_session_vars)), name);		\
	}																\
} while (0)


#define PS_ENCODE_VARS 												\
	zend_string *key;												\
	zend_ulong num_key;													\
	zval *struc;

/* Do not use a return statement in `code` because that may leak memory.
 * Break out of the loop instead. */
#define PS_ENCODE_LOOP(code) do {									\
	zval _zv;														\
	/* protect against user interference */							\
	ZVAL_COPY(&_zv, Z_REFVAL(PS(http_session_vars)));				\
	HashTable *_ht = Z_ARRVAL(_zv);									\
	ZEND_HASH_FOREACH_KEY(_ht, num_key, key) {						\
		if (key == NULL) {											\
			php_error_docref(NULL, E_WARNING,						\
					"Skipping numeric key " ZEND_LONG_FMT, num_key);\
			continue;												\
		}															\
		if ((struc = php_get_session_var(key))) {					\
			code;		 											\
		} 															\
	} ZEND_HASH_FOREACH_END();										\
	zval_ptr_dtor(&_zv);											\
} while(0)

PHPAPI ZEND_EXTERN_MODULE_GLOBALS(ps)

void php_session_auto_start(void *data);

extern PHPAPI zend_class_entry *php_session_class_entry;

extern PHPAPI zend_class_entry *php_session_iface_entry;

extern PHPAPI zend_class_entry *php_session_id_iface_entry;

extern PHPAPI zend_class_entry *php_session_update_timestamp_iface_entry;

extern PHP_METHOD(SessionHandler, open);
extern PHP_METHOD(SessionHandler, close);
extern PHP_METHOD(SessionHandler, read);
extern PHP_METHOD(SessionHandler, write);
extern PHP_METHOD(SessionHandler, destroy);
extern PHP_METHOD(SessionHandler, gc);
extern PHP_METHOD(SessionHandler, create_sid);

#endif
ext/session/mod_files.h000064400000002200151730542170011140 0ustar00/*
   +----------------------------------------------------------------------+
   | Copyright (c) The PHP Group                                          |
   +----------------------------------------------------------------------+
   | This source file is subject to version 3.01 of the PHP license,      |
   | that is bundled with this package in the file LICENSE, and is        |
   | available through the world-wide-web at the following url:           |
   | https://www.php.net/license/3_01.txt                                 |
   | If you did not receive a copy of the PHP license and are unable to   |
   | obtain it through the world-wide-web, please send a note to          |
   | license@php.net so we can mail you a copy immediately.               |
   +----------------------------------------------------------------------+
   | Author: Sascha Schumann <sascha@schumann.cx>                         |
   +----------------------------------------------------------------------+
 */

#ifndef MOD_FILES_H
#define MOD_FILES_H

extern const ps_module ps_mod_files;
#define ps_files_ptr &ps_mod_files

PS_FUNCS_UPDATE_TIMESTAMP(files);

#endif
ext/session/mod_user.h000064400000002172151730542200011016 0ustar00/*
   +----------------------------------------------------------------------+
   | Copyright (c) The PHP Group                                          |
   +----------------------------------------------------------------------+
   | This source file is subject to version 3.01 of the PHP license,      |
   | that is bundled with this package in the file LICENSE, and is        |
   | available through the world-wide-web at the following url:           |
   | https://www.php.net/license/3_01.txt                                 |
   | If you did not receive a copy of the PHP license and are unable to   |
   | obtain it through the world-wide-web, please send a note to          |
   | license@php.net so we can mail you a copy immediately.               |
   +----------------------------------------------------------------------+
   | Author: Sascha Schumann <sascha@schumann.cx>                         |
   +----------------------------------------------------------------------+
 */

#ifndef MOD_USER_H
#define MOD_USER_H

extern const ps_module ps_mod_user;
#define ps_user_ptr &ps_mod_user

PS_FUNCS_UPDATE_TIMESTAMP(user);

#endif
ext/apcu/apc_globals.h000064400000007067151730542200010724 0ustar00/*
  +----------------------------------------------------------------------+
  | APC                                                                  |
  +----------------------------------------------------------------------+
  | Copyright (c) 2006-2011 The PHP Group                                |
  +----------------------------------------------------------------------+
  | This source file is subject to version 3.01 of the PHP license,      |
  | that is bundled with this package in the file LICENSE, and is        |
  | available through the world-wide-web at the following url:           |
  | http://www.php.net/license/3_01.txt.                                 |
  | If you did not receive a copy of the PHP license and are unable to   |
  | obtain it through the world-wide-web, please send a note to          |
  | license@php.net so we can mail you a copy immediately.               |
  +----------------------------------------------------------------------+
  | Authors: Daniel Cowgill <dcowgill@communityconnect.com>              |
  |          George Schlossnagle <george@omniti.com>                     |
  |          Rasmus Lerdorf <rasmus@php.net>                             |
  |          Arun C. Murthy <arunc@yahoo-inc.com>                        |
  |          Gopal Vijayaraghavan <gopalv@yahoo-inc.com>                 |
  +----------------------------------------------------------------------+

   This software was contributed to PHP by Community Connect Inc. in 2002
   and revised in 2005 by Yahoo! Inc. to add support for PHP 5.1.
   Future revisions and derivatives of this source code must acknowledge
   Community Connect Inc. as the original contributor of this module by
   leaving this note intact in the source code.

   All other licensing and usage conditions are those of the PHP Group.

 */

#ifndef APC_GLOBALS_H
#define APC_GLOBALS_H

#include "apc.h"

ZEND_BEGIN_MODULE_GLOBALS(apcu)
	/* configuration parameters */
	zend_bool enabled;      /* if true, apc is enabled (defaults to true) */
	zend_long shm_segments;      /* number of shared memory segments to use */
	zend_long shm_size;          /* size of each shared memory segment (in MB) */
	zend_long entries_hint;      /* hint at the number of entries expected */
	zend_long gc_ttl;            /* parameter to apc_cache_create */
	zend_long ttl;               /* parameter to apc_cache_create */
	zend_long smart;             /* smart value */

#ifdef APC_MMAP
	char *mmap_file_mask;   /* mktemp-style file-mask to pass to mmap */
#endif

	/* module variables */
	zend_bool initialized;       /* true if module was initialized */
	zend_bool enable_cli;        /* Flag to override turning APC off for CLI */
	zend_bool slam_defense;      /* true for user cache slam defense */

	char *preload_path;          /* preload path */
	zend_bool coredump_unmap;    /* trap signals that coredump and unmap shared memory */
	zend_bool use_request_time;  /* use the SAPI request start time for TTL */
	time_t request_time;         /* cached request time */

	char *serializer_name;       /* the serializer config option */

	/* Nesting level of apcu_entry calls. */
	unsigned int entry_level;
ZEND_END_MODULE_GLOBALS(apcu)

/* (the following is defined in php_apc.c) */
ZEND_EXTERN_MODULE_GLOBALS(apcu)

#ifdef ZTS
# define APCG(v) TSRMG(apcu_globals_id, zend_apcu_globals *, v)
#else
# define APCG(v) (apcu_globals.v)
#endif

extern struct _apc_cache_t* apc_user_cache;

#endif

/*
 * Local variables:
 * tab-width: 4
 * c-basic-offset: 4
 * End:
 * vim>600: noexpandtab sw=4 ts=4 sts=4 fdm=marker
 * vim<600: noexpandtab sw=4 ts=4 sts=4
 */
ext/apcu/apc_cache.h000064400000032033151730542210010334 0ustar00/*
  +----------------------------------------------------------------------+
  | APC                                                                  |
  +----------------------------------------------------------------------+
  | Copyright (c) 2006-2011 The PHP Group                                |
  +----------------------------------------------------------------------+
  | This source file is subject to version 3.01 of the PHP license,      |
  | that is bundled with this package in the file LICENSE, and is        |
  | available through the world-wide-web at the following url:           |
  | http://www.php.net/license/3_01.txt.                                 |
  | If you did not receive a copy of the PHP license and are unable to   |
  | obtain it through the world-wide-web, please send a note to          |
  | license@php.net so we can mail you a copy immediately.               |
  +----------------------------------------------------------------------+
  | Authors: Daniel Cowgill <dcowgill@communityconnect.com>              |
  |          Rasmus Lerdorf <rasmus@php.net>                             |
  +----------------------------------------------------------------------+

   This software was contributed to PHP by Community Connect Inc. in 2002
   and revised in 2005 by Yahoo! Inc. to add support for PHP 5.1.
   Future revisions and derivatives of this source code must acknowledge
   Community Connect Inc. as the original contributor of this module by
   leaving this note intact in the source code.

   All other licensing and usage conditions are those of the PHP Group.

 */

#ifndef APC_CACHE_H
#define APC_CACHE_H

#include "apc.h"
#include "apc_sma.h"
#include "apc_lock.h"
#include "apc_globals.h"
#include "TSRM.h"

typedef struct apc_cache_slam_key_t apc_cache_slam_key_t;
struct apc_cache_slam_key_t {
	zend_ulong hash;         /* hash of the key */
	size_t len;              /* length of the key */
	time_t mtime;            /* creation time of this key */
	pid_t owner_pid;         /* the pid that created this key */
#ifdef ZTS
	void ***owner_thread;    /* TSRMLS cache of thread that created this key */
#endif
};

/* {{{ struct definition: apc_cache_entry_t */
typedef struct apc_cache_entry_t apc_cache_entry_t;
struct apc_cache_entry_t {
	zend_string *key;        /* entry key */
	zval val;                /* the zval copied at store time */
	apc_cache_entry_t *next; /* next entry in linked list */
	zend_long ttl;           /* the ttl on this specific entry */
	zend_long ref_count;     /* the reference count of this entry */
	zend_long nhits;         /* number of hits to this entry */
	time_t ctime;            /* time entry was initialized */
	time_t mtime;            /* the mtime of this cached entry */
	time_t dtime;            /* time entry was removed from cache */
	time_t atime;            /* time entry was last accessed */
	zend_long mem_size;      /* memory used */
};
/* }}} */

/* {{{ struct definition: apc_cache_header_t
   Any values that must be shared among processes should go in here. */
typedef struct _apc_cache_header_t {
	apc_lock_t lock;                /* header lock */
	zend_long nhits;                /* hit count */
	zend_long nmisses;              /* miss count */
	zend_long ninserts;             /* insert count */
	zend_long nexpunges;            /* expunge count */
	zend_long nentries;             /* entry count */
	zend_long mem_size;             /* used */
	time_t stime;                   /* start time */
	unsigned short state;           /* cache state */
	apc_cache_slam_key_t lastkey;   /* last key inserted (not necessarily without error) */
	apc_cache_entry_t *gc;          /* gc list */
} apc_cache_header_t; /* }}} */

/* {{{ struct definition: apc_cache_t */
typedef struct _apc_cache_t {
	void* shmaddr;                /* process (local) address of shared cache */
	apc_cache_header_t* header;   /* cache header (stored in SHM) */
	apc_cache_entry_t** slots;    /* array of cache slots (stored in SHM) */
	apc_sma_t* sma;               /* shared memory allocator */
	apc_serializer_t* serializer; /* serializer */
	size_t nslots;                /* number of slots in cache */
	zend_long gc_ttl;            /* maximum time on GC list for a entry */
	zend_long ttl;               /* if slot is needed and entry's access time is older than this ttl, remove it */
	zend_long smart;             /* smart parameter for gc */
	zend_bool defend;             /* defense parameter for runtime */
} apc_cache_t; /* }}} */

/* {{{ typedef: apc_cache_updater_t */
typedef zend_bool (*apc_cache_updater_t)(apc_cache_t*, apc_cache_entry_t*, void* data); /* }}} */

/* {{{ typedef: apc_cache_atomic_updater_t */
typedef zend_bool (*apc_cache_atomic_updater_t)(apc_cache_t*, zend_long*, void* data); /* }}} */

/*
 * apc_cache_create creates the shared memory cache.
 *
 * This function should be called once per process per cache
 *
 * serializer for APCu is set by globals on MINIT and ensured with apc_cache_serializer
 * during execution. Using apc_cache_serializer avoids race conditions between MINIT/RINIT of
 * APCU and the third party serializer. API users can choose to leave this null to use default
 * PHP serializers, or search the list of serializers for the preferred serializer
 *
 * size_hint is a "hint" at the total number entries that will be expected.
 * It determines the physical size of the hash table. Passing 0 for
 * this argument will use a reasonable default value
 *
 * gc_ttl is the maximum time a cache entry may speed on the garbage
 * collection list. This is basically a work around for the inherent
 * unreliability of our reference counting mechanism (see apc_cache_release).
 *
 * ttl is the maximum time a cache entry can idle in a slot in case the slot
 * is needed.  This helps in cleaning up the cache and ensuring that entries
 * hit frequently stay cached and ones not hit very often eventually disappear.
 *
 * for an explanation of smart, see apc_cache_default_expunge
 *
 * defend enables/disables slam defense for this particular cache
 */
PHP_APCU_API apc_cache_t* apc_cache_create(
        apc_sma_t* sma, apc_serializer_t* serializer, zend_long size_hint,
        zend_long gc_ttl, zend_long ttl, zend_long smart, zend_bool defend);
/*
* apc_cache_preload preloads the data at path into the specified cache
*/
PHP_APCU_API zend_bool apc_cache_preload(apc_cache_t* cache, const char* path);

/*
 * apc_cache_detach detaches from the shared memory cache and cleans up
 * local allocations. Under apache, this function can be safely called by
 * the child processes when they exit.
 */
PHP_APCU_API void apc_cache_detach(apc_cache_t* cache);

/*
 * apc_cache_clear empties a cache. This can safely be called at any time.
 */
PHP_APCU_API void apc_cache_clear(apc_cache_t* cache);

/*
 * apc_cache_store creates key, entry and context in which to make an insertion of val into the specified cache
 */
PHP_APCU_API zend_bool apc_cache_store(
        apc_cache_t* cache, zend_string *key, const zval *val,
        const int32_t ttl, const zend_bool exclusive);
/*
 * apc_cache_update updates an entry in place. The updater function must not bailout.
 * The update is performed under write-lock and doesn't have to be atomic.
 */
PHP_APCU_API zend_bool apc_cache_update(
		apc_cache_t *cache, zend_string *key, apc_cache_updater_t updater, void *data,
		zend_bool insert_if_not_found, zend_long ttl);

/*
 * apc_cache_atomic_update_long updates an integer entry in place. The updater function must
 * perform the update atomically, as the update is performed under read-lock.
 */
PHP_APCU_API zend_bool apc_cache_atomic_update_long(
		apc_cache_t *cache, zend_string *key, apc_cache_atomic_updater_t updater, void *data,
		zend_bool insert_if_not_found, zend_long ttl);

/*
 * apc_cache_find searches for a cache entry by its hashed identifier,
 * and returns a pointer to the entry if found, NULL otherwise.
 *
 */
PHP_APCU_API apc_cache_entry_t* apc_cache_find(apc_cache_t* cache, zend_string *key, time_t t);

/*
 * apc_cache_fetch fetches an entry from the cache directly into dst
 *
 */
PHP_APCU_API zend_bool apc_cache_fetch(apc_cache_t* cache, zend_string *key, time_t t, zval *dst);

/*
 * apc_cache_exists searches for a cache entry by its hashed identifier,
 * and returns whether the entry exists.
 */
PHP_APCU_API zend_bool apc_cache_exists(apc_cache_t* cache, zend_string *key, time_t t);

/*
 * apc_cache_delete and apc_cache_delete finds an entry in the cache and deletes it.
 */
PHP_APCU_API zend_bool apc_cache_delete(apc_cache_t* cache, zend_string *key);

/* apc_cache_fetch_zval copies a cache entry value to be usable at runtime.
 */
PHP_APCU_API zend_bool apc_cache_entry_fetch_zval(
		apc_cache_t *cache, apc_cache_entry_t *entry, zval *dst);

/*
 * apc_cache_entry_release decrements the reference count associated with a cache
 * entry. Calling apc_cache_find automatically increments the reference count,
 * and this function must be called post-execution to return the count to its
 * original value. Failing to do so will prevent the entry from being
 * garbage-collected.
 *
 * entry is the cache entry whose ref count you want to decrement.
 */
PHP_APCU_API void apc_cache_entry_release(apc_cache_t *cache, apc_cache_entry_t *entry);

/*
 fetches information about the cache provided for userland status functions
*/
PHP_APCU_API zend_bool apc_cache_info(zval *info, apc_cache_t *cache, zend_bool limited);

/*
 fetches information about the key provided
*/
PHP_APCU_API void apc_cache_stat(apc_cache_t *cache, zend_string *key, zval *stat);

/*
* apc_cache_defense: guard against slamming a key
*  will return true if the following conditions are met:
*	the key provided has a matching hash and length to the last key inserted into cache
*   the last key has a different owner
* in ZTS mode, TSRM determines owner
* in non-ZTS mode, PID determines owner
* Note: this function sets the owner of key during execution
*/
PHP_APCU_API zend_bool apc_cache_defense(apc_cache_t *cache, zend_string *key, time_t t);

/*
* apc_cache_serializer
* sets the serializer for a cache, and by proxy contexts created for the cache
* Note: this avoids race conditions between third party serializers and APCu
*/
PHP_APCU_API void apc_cache_serializer(apc_cache_t* cache, const char* name);

/*
* The remaining functions allow a third party to reimplement expunge
*
* Look at the source of apc_cache_default_expunge for what is expected of this function
*
* The default behaviour of expunge is explained below, should no combination of those options
* be suitable, you will need to reimplement apc_cache_default_expunge and pass it to your
* call to apc_sma_api_impl, this will replace the default functionality.
* The functions below you can use during your own implementation of expunge to gain more
* control over how the expunge process works ...
*
* Note: beware of locking (copy it exactly), setting states is also important
*/

/* {{{ apc_cache_default_expunge
* Where smart is not set:
*  Where no ttl is set on cache:
*   1) Perform cleanup of stale entries
*   2) Expunge if available memory is less than sma->size/2
*  Where ttl is set on cache:
*   1) Perform cleanup of stale entries
*   2) If available memory if less than the size requested, run full expunge
*
* Where smart is set:
*  Where no ttl is set on cache:
*   1) Perform cleanup of stale entries
*   2) Expunge is available memory is less than size * smart
*  Where ttl is set on cache:
*   1) Perform cleanup of stale entries
*   2) If available memory if less than the size requested, run full expunge
*
* The TTL of an entry takes precedence over the TTL of a cache
*/
PHP_APCU_API void apc_cache_default_expunge(apc_cache_t* cache, size_t size);

/*
* apc_cache_entry: generate and create or fetch an entry
*
* @see https://github.com/krakjoe/apcu/issues/142
*/
PHP_APCU_API void apc_cache_entry(apc_cache_t *cache, zend_string *key, zend_fcall_info *fci, zend_fcall_info_cache *fcc, zend_long ttl, zend_long now, zval *return_value);

/* apcu_entry() holds a write lock on the cache while executing user code.
 * That code may call other apcu_* functions, which also try to acquire a
 * read or write lock, which would deadlock. As such, don't try to acquire a
 * lock if the current thread is inside apcu_entry().
 *
 * Whether the current thread is inside apcu_entry() is tracked by APCG(entry_level).
 * This breaks the self-contained apc_cache_t abstraction, but is currently
 * necessary because the entry_level needs to be tracked per-thread, while
 * apc_cache_t is a per-process structure.
 */

static inline zend_bool apc_cache_wlock(apc_cache_t *cache) {
	if (!APCG(entry_level)) {
		return WLOCK(&cache->header->lock);
	}
	return 1;
}

static inline void apc_cache_wunlock(apc_cache_t *cache) {
	if (!APCG(entry_level)) {
		WUNLOCK(&cache->header->lock);
	}
}

static inline zend_bool apc_cache_rlock(apc_cache_t *cache) {
	if (!APCG(entry_level)) {
		return RLOCK(&cache->header->lock);
	}
	return 1;
}

static inline void apc_cache_runlock(apc_cache_t *cache) {
	if (!APCG(entry_level)) {
		RUNLOCK(&cache->header->lock);
	}
}

#endif

/*
 * Local variables:
 * tab-width: 4
 * c-basic-offset: 4
 * End:
 * vim>600: noexpandtab sw=4 ts=4 sts=4 fdm=marker
 * vim<600: noexpandtab sw=4 ts=4 sts=4
 */
ext/apcu/apc_lock.h000064400000010521151730542210010217 0ustar00/*
  +----------------------------------------------------------------------+
  | APCu                                                                 |
  +----------------------------------------------------------------------+
  | Copyright (c) 2013 The PHP Group                                |
  +----------------------------------------------------------------------+
  | This source file is subject to version 3.01 of the PHP license,      |
  | that is bundled with this package in the file LICENSE, and is        |
  | available through the world-wide-web at the following url:           |
  | http://www.php.net/license/3_01.txt                                  |
  | If you did not receive a copy of the PHP license and are unable to   |
  | obtain it through the world-wide-web, please send a note to          |
  | license@php.net so we can mail you a copy immediately.               |
  +----------------------------------------------------------------------+
  | Author: Joe Watkins <joe.watkins@live.co.uk>                        |
  +----------------------------------------------------------------------+
 */

#ifndef APC_LOCK_H
#define APC_LOCK_H

/*
 APCu works most efficiently where there is access to native read/write locks
 If the current system has native rwlocks present they will be used, if they are
	not present, APCu will emulate their behavior with standard mutex.
 While APCu is emulating read/write locks, reads and writes are exclusive,
	additionally the write lock prefers readers, as is the default behaviour of
	the majority of Posix rwlock implementations
*/

#ifdef HAVE_CONFIG_H
# include <config.h>
#endif

#include "apc.h"

#ifndef PHP_WIN32
# ifndef __USE_UNIX98
#  define __USE_UNIX98
# endif
# include "pthread.h"
# ifndef APC_SPIN_LOCK
#   ifndef APC_FCNTL_LOCK
#       ifdef APC_NATIVE_RWLOCK
		typedef pthread_rwlock_t apc_lock_t;
#		define APC_LOCK_SHARED
#       else
		typedef pthread_mutex_t apc_lock_t;
#		define APC_LOCK_RECURSIVE
#       endif
#   else
		typedef int apc_lock_t;
#		define APC_LOCK_FILE
#   endif
# else
# define APC_LOCK_NICE 1
typedef struct {
	unsigned long state;
} apc_lock_t;
# endif
#else
/* XXX kernel lock mode only for now, compatible through all the wins, add more ifdefs for others */
# include "apc_windows_srwlock_kernel.h"
typedef apc_windows_cs_rwlock_t apc_lock_t;
# define APC_LOCK_SHARED
#endif

/* {{{ functions */
/*
  The following functions should be called once per process:
	apc_lock_init initializes attributes suitable for all locks
	apc_lock_cleanup destroys those attributes
  This saves us from having to create and destroy attributes for
  every lock we use at runtime */
PHP_APCU_API zend_bool apc_lock_init(void);
PHP_APCU_API void      apc_lock_cleanup(void);
/*
  The following functions should be self explanitory:
*/
PHP_APCU_API zend_bool apc_lock_create(apc_lock_t *lock);
PHP_APCU_API zend_bool apc_lock_rlock(apc_lock_t *lock);
PHP_APCU_API zend_bool apc_lock_wlock(apc_lock_t *lock);
PHP_APCU_API zend_bool apc_lock_runlock(apc_lock_t *lock);
PHP_APCU_API zend_bool apc_lock_wunlock(apc_lock_t *lock);
PHP_APCU_API void apc_lock_destroy(apc_lock_t *lock); /* }}} */

/* {{{ generic locking macros */
#define CREATE_LOCK(lock)     apc_lock_create(lock)
#define DESTROY_LOCK(lock)    apc_lock_destroy(lock)
#define WLOCK(lock)           apc_lock_wlock(lock)
#define WUNLOCK(lock)         { apc_lock_wunlock(lock); HANDLE_UNBLOCK_INTERRUPTIONS(); }
#define RLOCK(lock)           apc_lock_rlock(lock)
#define RUNLOCK(lock)         { apc_lock_runlock(lock); HANDLE_UNBLOCK_INTERRUPTIONS(); }
/* }}} */

/* atomic operations */
#ifdef PHP_WIN32
# ifdef _WIN64
#  define ATOMIC_INC(a) InterlockedIncrement64(&a)
#  define ATOMIC_DEC(a) InterlockedDecrement64(&a)
#  define ATOMIC_ADD(a, b) (InterlockedExchangeAdd64(&a, b) + b)
#  define ATOMIC_CAS(a, old, new) (InterlockedCompareExchange64(&a, new, old) == old)
# else
#  define ATOMIC_INC(a) InterlockedIncrement(&a)
#  define ATOMIC_DEC(a) InterlockedDecrement(&a)
#  define ATOMIC_ADD(a, b) (InterlockedExchangeAdd(&a, b) + b)
#  define ATOMIC_CAS(a, old, new) (InterlockedCompareExchange(&a, new, old) == old)
# endif
#else
# define ATOMIC_INC(a) __sync_add_and_fetch(&a, 1)
# define ATOMIC_DEC(a) __sync_sub_and_fetch(&a, 1)
# define ATOMIC_ADD(a, b) __sync_add_and_fetch(&a, b)
# define ATOMIC_CAS(a, old, new) __sync_bool_compare_and_swap(&a, old, new)
#endif

#endif
ext/apcu/php_apc.h000064400000004353151730542220010065 0ustar00/*
  +----------------------------------------------------------------------+
  | APC                                                                  |
  +----------------------------------------------------------------------+
  | Copyright (c) 2006-2011 The PHP Group                                |
  +----------------------------------------------------------------------+
  | This source file is subject to version 3.01 of the PHP license,      |
  | that is bundled with this package in the file LICENSE, and is        |
  | available through the world-wide-web at the following url:           |
  | http://www.php.net/license/3_01.txt                                  |
  | If you did not receive a copy of the PHP license and are unable to   |
  | obtain it through the world-wide-web, please send a note to          |
  | license@php.net so we can mail you a copy immediately.               |
  +----------------------------------------------------------------------+
  | Authors: Daniel Cowgill <dcowgill@communityconnect.com>              |
  |          George Schlossnagle <george@omniti.com>                     |
  |          Rasmus Lerdorf <rasmus@php.net>                             |
  +----------------------------------------------------------------------+

   This software was contributed to PHP by Community Connect Inc. in 2002
   and revised in 2005 by Yahoo! Inc. to add support for PHP 5.1.
   Future revisions and derivatives of this source code must acknowledge
   Community Connect Inc. as the original contributor of this module by
   leaving this note intact in the source code.

   All other licensing and usage conditions are those of the PHP Group.

 */

#ifndef PHP_APCU_H
#define PHP_APCU_H

#include "apc.h"
#include "apc_globals.h"

#define PHP_APCU_VERSION "5.1.24"
#define PHP_APCU_EXTNAME "apcu"

PHP_APCU_API zend_bool apc_is_enabled(void);

extern zend_module_entry apcu_module_entry;
#define apcu_module_ptr &apcu_module_entry

#define phpext_apcu_ptr apcu_module_ptr

#if defined(ZTS) && defined(COMPILE_DL_APCU)
ZEND_TSRMLS_CACHE_EXTERN();
#endif

#endif /* PHP_APC_H */

/*
 * Local variables:
 * tab-width: 4
 * c-basic-offset: 4
 * End:
 * vim>600: noexpandtab sw=4 ts=4 sts=4 fdm=marker
 * vim<600: noexpandtab sw=4 ts=4 sts=4
 */
ext/apcu/apc_arginfo.h000064400000000161151730542220010714 0ustar00#if PHP_VERSION_ID < 80000
# include "php_apc_legacy_arginfo.h"
#else
# error Not supported on PHP >= 8.0
#endif
ext/apcu/apc_api.h000064400000002355151730542230010050 0ustar00/*
  +----------------------------------------------------------------------+
  | APCu                                                                 |
  +----------------------------------------------------------------------+
  | Copyright (c) 2013 The PHP Group                                     |
  +----------------------------------------------------------------------+
  | This source file is subject to version 3.01 of the PHP license,      |
  | that is bundled with this package in the file LICENSE, and is        |
  | available through the world-wide-web at the following url:           |
  | http://www.php.net/license/3_01.txt                                  |
  | If you did not receive a copy of the PHP license and are unable to   |
  | obtain it through the world-wide-web, please send a note to          |
  | license@php.net so we can mail you a copy immediately.               |
  +----------------------------------------------------------------------+
  | Author: Joe Watkins <joe.watkins@live.co.uk>                         |
  +----------------------------------------------------------------------+
 */

#ifndef APC_API_H
#define APC_API_H

#include "apc.h"
#include "apc_lock.h"
#include "apc_sma.h"
#include "apc_cache.h"

#endif
ext/apcu/php_apc_legacy_arginfo.h000064400000005645151730542230013124 0ustar00/* This is a generated file, edit the .stub.php file instead.
 * Stub hash: 5282d856fd334278d5799581ad251977a3c6b18e */

ZEND_BEGIN_ARG_INFO_EX(arginfo_apcu_clear_cache, 0, 0, 0)
ZEND_END_ARG_INFO()

ZEND_BEGIN_ARG_INFO_EX(arginfo_apcu_cache_info, 0, 0, 0)
	ZEND_ARG_INFO(0, limited)
ZEND_END_ARG_INFO()

ZEND_BEGIN_ARG_INFO_EX(arginfo_apcu_key_info, 0, 0, 1)
	ZEND_ARG_INFO(0, key)
ZEND_END_ARG_INFO()

#define arginfo_apcu_sma_info arginfo_apcu_cache_info

#define arginfo_apcu_enabled arginfo_apcu_clear_cache

ZEND_BEGIN_ARG_INFO_EX(arginfo_apcu_store, 0, 0, 1)
	ZEND_ARG_INFO(0, key)
	ZEND_ARG_INFO(0, value)
	ZEND_ARG_INFO(0, ttl)
ZEND_END_ARG_INFO()

#define arginfo_apcu_add arginfo_apcu_store

ZEND_BEGIN_ARG_INFO_EX(arginfo_apcu_inc, 0, 0, 1)
	ZEND_ARG_INFO(0, key)
	ZEND_ARG_INFO(0, step)
	ZEND_ARG_INFO(1, success)
	ZEND_ARG_INFO(0, ttl)
ZEND_END_ARG_INFO()

#define arginfo_apcu_dec arginfo_apcu_inc

ZEND_BEGIN_ARG_INFO_EX(arginfo_apcu_cas, 0, 0, 3)
	ZEND_ARG_INFO(0, key)
	ZEND_ARG_INFO(0, old)
	ZEND_ARG_INFO(0, new)
ZEND_END_ARG_INFO()

ZEND_BEGIN_ARG_INFO_EX(arginfo_apcu_fetch, 0, 0, 1)
	ZEND_ARG_INFO(0, key)
	ZEND_ARG_INFO(1, success)
ZEND_END_ARG_INFO()

#define arginfo_apcu_exists arginfo_apcu_key_info

#define arginfo_apcu_delete arginfo_apcu_key_info

ZEND_BEGIN_ARG_INFO_EX(arginfo_apcu_entry, 0, 0, 2)
	ZEND_ARG_INFO(0, key)
	ZEND_ARG_INFO(0, callback)
	ZEND_ARG_INFO(0, ttl)
ZEND_END_ARG_INFO()

#if defined(APC_DEBUG)
ZEND_BEGIN_ARG_INFO_EX(arginfo_apcu_inc_request_time, 0, 0, 0)
	ZEND_ARG_INFO(0, by)
ZEND_END_ARG_INFO()
#endif


PHP_APCU_API ZEND_FUNCTION(apcu_clear_cache);
PHP_APCU_API ZEND_FUNCTION(apcu_cache_info);
PHP_APCU_API ZEND_FUNCTION(apcu_key_info);
PHP_APCU_API ZEND_FUNCTION(apcu_sma_info);
PHP_APCU_API ZEND_FUNCTION(apcu_enabled);
PHP_APCU_API ZEND_FUNCTION(apcu_store);
PHP_APCU_API ZEND_FUNCTION(apcu_add);
PHP_APCU_API ZEND_FUNCTION(apcu_inc);
PHP_APCU_API ZEND_FUNCTION(apcu_dec);
PHP_APCU_API ZEND_FUNCTION(apcu_cas);
PHP_APCU_API ZEND_FUNCTION(apcu_fetch);
PHP_APCU_API ZEND_FUNCTION(apcu_exists);
PHP_APCU_API ZEND_FUNCTION(apcu_delete);
PHP_APCU_API ZEND_FUNCTION(apcu_entry);
#if defined(APC_DEBUG)
PHP_APCU_API ZEND_FUNCTION(apcu_inc_request_time);
#endif


static const zend_function_entry ext_functions[] = {
	ZEND_FE(apcu_clear_cache, arginfo_apcu_clear_cache)
	ZEND_FE(apcu_cache_info, arginfo_apcu_cache_info)
	ZEND_FE(apcu_key_info, arginfo_apcu_key_info)
	ZEND_FE(apcu_sma_info, arginfo_apcu_sma_info)
	ZEND_FE(apcu_enabled, arginfo_apcu_enabled)
	ZEND_FE(apcu_store, arginfo_apcu_store)
	ZEND_FE(apcu_add, arginfo_apcu_add)
	ZEND_FE(apcu_inc, arginfo_apcu_inc)
	ZEND_FE(apcu_dec, arginfo_apcu_dec)
	ZEND_FE(apcu_cas, arginfo_apcu_cas)
	ZEND_FE(apcu_fetch, arginfo_apcu_fetch)
	ZEND_FE(apcu_exists, arginfo_apcu_exists)
	ZEND_FE(apcu_delete, arginfo_apcu_delete)
	ZEND_FE(apcu_entry, arginfo_apcu_entry)
#if defined(APC_DEBUG)
	ZEND_FE(apcu_inc_request_time, arginfo_apcu_inc_request_time)
#endif
	ZEND_FE_END
};
ext/apcu/apc_serializer.h000064400000005731151730542230011451 0ustar00/*
  +----------------------------------------------------------------------+
  | APC                                                                  |
  +----------------------------------------------------------------------+
  | Copyright (c) 2006-2011 The PHP Group                                |
  +----------------------------------------------------------------------+
  | This source file is subject to version 3.01 of the PHP license,      |
  | that is bundled with this package in the file LICENSE, and is        |
  | available through the world-wide-web at the following url:           |
  | http://www.php.net/license/3_01.txt.                                 |
  | If you did not receive a copy of the PHP license and are unable to   |
  | obtain it through the world-wide-web, please send a note to          |
  | license@php.net so we can mail you a copy immediately.               |
  +----------------------------------------------------------------------+
  | Authors: Gopal Vijayaraghavan <gopalv@php.net>                       |
  +----------------------------------------------------------------------+

 */

#ifndef APC_SERIALIZER_H
#define APC_SERIALIZER_H

/* this is a shipped .h file, do not include any other header in this file */
#define APC_SERIALIZER_NAME(module) module##_apc_serializer
#define APC_UNSERIALIZER_NAME(module) module##_apc_unserializer

#define APC_SERIALIZER_ARGS unsigned char **buf, size_t *buf_len, const zval *value, void *config
#define APC_UNSERIALIZER_ARGS zval *value, unsigned char *buf, size_t buf_len, void *config

typedef int (*apc_serialize_t)(APC_SERIALIZER_ARGS);
typedef int (*apc_unserialize_t)(APC_UNSERIALIZER_ARGS);

typedef int (*apc_register_serializer_t)(const char* name, apc_serialize_t serialize, apc_unserialize_t unserialize, void *config);

/*
 * ABI version for constant hooks. Increment this any time you make any changes
 * to any function in this file.
 */
#define APC_SERIALIZER_ABI "0"
#define APC_SERIALIZER_CONSTANT "\000apc_register_serializer-" APC_SERIALIZER_ABI

#if !defined(APC_UNUSED)
# if defined(__GNUC__)
#  define APC_UNUSED __attribute__((unused))
# else
# define APC_UNUSED
# endif
#endif

static APC_UNUSED int apc_register_serializer(
        const char* name, apc_serialize_t serialize, apc_unserialize_t unserialize, void *config)
{
	int retval = 0;

	zend_string *lookup = zend_string_init(
		APC_SERIALIZER_CONSTANT, sizeof(APC_SERIALIZER_CONSTANT)-1, 0);
	zval *magic = zend_get_constant(lookup);

	/* zend_get_constant will return 1 on success, otherwise apc_magic_constant wouldn't be touched at all */
	if (magic) {
		apc_register_serializer_t register_func = (apc_register_serializer_t)(Z_LVAL_P(magic));
		if(register_func) {
			retval = register_func(name, serialize, unserialize, NULL);
		}
	}

	zend_string_release(lookup);

	return retval;
}

#endif

/*
 * Local variables:
 * tab-width: 4
 * c-basic-offset: 4
 * End:
 * vim>600: noexpandtab sw=4 ts=4 sts=4 fdm=marker
 * vim<600: noexpandtab sw=4 ts=4 sts=4
 */
ext/apcu/apc_iterator.h000064400000007446151730542230011136 0ustar00/*
  +----------------------------------------------------------------------+
  | APC                                                                  |
  +----------------------------------------------------------------------+
  | Copyright (c) 2006-2011 The PHP Group                                |
  +----------------------------------------------------------------------+
  | This source file is subject to version 3.01 of the PHP license,      |
  | that is bundled with this package in the file LICENSE, and is        |
  | available through the world-wide-web at the following url:           |
  | http://www.php.net/license/3_01.txt                                  |
  | If you did not receive a copy of the PHP license and are unable to   |
  | obtain it through the world-wide-web, please send a note to          |
  | license@php.net so we can mail you a copy immediately.               |
  +----------------------------------------------------------------------+
  | Authors: Brian Shire <shire@.php.net>                                |
  +----------------------------------------------------------------------+

 */

#ifndef APC_ITERATOR_H
#define APC_ITERATOR_H

#include "apc.h"
#include "apc_stack.h"

#include "ext/pcre/php_pcre.h"
#include "zend_smart_str.h"

#define APC_DEFAULT_CHUNK_SIZE 100

#define APC_LIST_ACTIVE   0x1
#define APC_LIST_DELETED  0x2

#define APC_ITER_TYPE		(1 << 0)
#define APC_ITER_KEY        (1 << 1)
#define APC_ITER_VALUE      (1 << 2)
#define APC_ITER_NUM_HITS   (1 << 3)
#define APC_ITER_MTIME      (1 << 4)
#define APC_ITER_CTIME      (1 << 5)
#define APC_ITER_DTIME      (1 << 6)
#define APC_ITER_ATIME      (1 << 7)
#define APC_ITER_REFCOUNT   (1 << 8)
#define APC_ITER_MEM_SIZE   (1 << 9)
#define APC_ITER_TTL        (1 << 10)

#define APC_ITER_NONE       0
#define APC_ITER_ALL        (0xffffffffL)

/* {{{ apc_iterator_t */
typedef struct _apc_iterator_t {
	short int initialized;   /* sanity check in case __construct failed */
	zend_long format;             /* format bitmask of the return values ie: key, value, info */
	size_t (*fetch)(struct _apc_iterator_t *iterator);
							 /* fetch callback to fetch items from cache slots or lists */
	size_t slot_idx;           /* index to the slot array or linked list */
	size_t chunk_size;         /* number of entries to pull down per fetch */
	apc_stack_t *stack;      /* stack of entries pulled from cache */
	int stack_idx;           /* index into the current stack */
	pcre_cache_entry *pce;     /* regex filter on entry identifiers */
#if PHP_VERSION_ID >= 70300
	pcre2_match_data *re_match_data; /* match data for regex */
#endif
	zend_string *regex;
	HashTable *search_hash;  /* hash of keys to iterate over */
	zend_long key_idx;            /* incrementing index for numerical keys */
	short int totals_flag;   /* flag if totals have been calculated */
	zend_long hits;               /* hit total */
	size_t size;             /* size total */
	zend_long count;              /* count total */
	zend_object obj;
} apc_iterator_t;
/* }}} */

#define apc_iterator_fetch_from(o) ((apc_iterator_t*)((char*)o - XtOffsetOf(apc_iterator_t, obj)))
#define apc_iterator_fetch(z) apc_iterator_fetch_from(Z_OBJ_P(z))

/* {{{ apc_iterator_item */
typedef struct _apc_iterator_item_t {
	zend_string *key;
	zval value;
} apc_iterator_item_t;
/* }}} */

PHP_APCU_API void apc_iterator_obj_init(
	apc_iterator_t *iterator,
	zval *search,
	zend_long format,
	size_t chunk_size,
	zend_long list);
PHP_APCU_API zend_class_entry* apc_iterator_get_ce(void);
PHP_APCU_API int apc_iterator_init(int module_number);
PHP_APCU_API int apc_iterator_shutdown(int module_number);

extern int apc_iterator_delete(zval *key);
#endif

/*
 * Local variables:
 * tab-width: 4
 * c-basic-offset: 4
 * End:
 * vim>600: noexpandtab sw=4 ts=4 sts=4 fdm=marker
 * vim<600: noexpandtab sw=4 ts=4 sts=4
 */
ext/apcu/apc_stack.h000064400000004353151730542230010404 0ustar00/*
  +----------------------------------------------------------------------+
  | APC                                                                  |
  +----------------------------------------------------------------------+
  | Copyright (c) 2006-2011 The PHP Group                                |
  +----------------------------------------------------------------------+
  | This source file is subject to version 3.01 of the PHP license,      |
  | that is bundled with this package in the file LICENSE, and is        |
  | available through the world-wide-web at the following url:           |
  | http://www.php.net/license/3_01.txt                                  |
  | If you did not receive a copy of the PHP license and are unable to   |
  | obtain it through the world-wide-web, please send a note to          |
  | license@php.net so we can mail you a copy immediately.               |
  +----------------------------------------------------------------------+
  | Authors: Daniel Cowgill <dcowgill@communityconnect.com>              |
  |          George Schlossnagle <george@omniti.com>                     |
  +----------------------------------------------------------------------+

   This software was contributed to PHP by Community Connect Inc. in 2002
   and revised in 2005 by Yahoo! Inc. to add support for PHP 5.1.
   Future revisions and derivatives of this source code must acknowledge
   Community Connect Inc. as the original contributor of this module by
   leaving this note intact in the source code.

   All other licensing and usage conditions are those of the PHP Group.

 */

#ifndef APC_STACK_H
#define APC_STACK_H

/* Basic stack datatype */

#define T apc_stack_t*
typedef struct apc_stack_t apc_stack_t; /* opaque stack type */

extern T apc_stack_create(size_t size_hint);
extern void apc_stack_destroy(T stack);
extern void apc_stack_clear(T stack);
extern void apc_stack_push(T stack, void* item);
extern void* apc_stack_pop(T stack);
extern void* apc_stack_top(T stack);
extern void* apc_stack_get(T stack, size_t n);
extern int apc_stack_size(T stack);

#undef T
#endif

/*
 * Local variables:
 * tab-width: 4
 * c-basic-offset: 4
 * End:
 * vim>600: noexpandtab sw=4 ts=4 sts=4 fdm=marker
 * vim<600: noexpandtab sw=4 ts=4 sts=4
 */
ext/apcu/apc.h000064400000013376151730542240007225 0ustar00/*
  +----------------------------------------------------------------------+
  | APC                                                                  |
  +----------------------------------------------------------------------+
  | Copyright (c) 2006-2011 The PHP Group                                |
  +----------------------------------------------------------------------+
  | This source file is subject to version 3.01 of the PHP license,      |
  | that is bundled with this package in the file LICENSE, and is        |
  | available through the world-wide-web at the following url:           |
  | http://www.php.net/license/3_01.txt                                  |
  | If you did not receive a copy of the PHP license and are unable to   |
  | obtain it through the world-wide-web, please send a note to          |
  | license@php.net so we can mail you a copy immediately.               |
  +----------------------------------------------------------------------+
  | Authors: Daniel Cowgill <dcowgill@communityconnect.com>              |
  |          George Schlossnagle <george@omniti.com>                     |
  |          Rasmus Lerdorf <rasmus@php.net>                             |
  |          Arun C. Murthy <arunc@yahoo-inc.com>                        |
  |          Gopal Vijayaraghavan <gopalv@yahoo-inc.com>                 |
  +----------------------------------------------------------------------+

   This software was contributed to PHP by Community Connect Inc. in 2002
   and revised in 2005 by Yahoo! Inc. to add support for PHP 5.1.
   Future revisions and derivatives of this source code must acknowledge
   Community Connect Inc. as the original contributor of this module by
   leaving this note intact in the source code.

   All other licensing and usage conditions are those of the PHP Group.

 */

#ifndef APC_H
#define APC_H

/*
 * This module defines utilities and helper functions used elsewhere in APC.
 */
#ifdef PHP_WIN32
# define PHP_APCU_API __declspec(dllexport)
#elif defined(__GNUC__) && __GNUC__ >= 4
# define PHP_APCU_API __attribute__ ((visibility("default")))
#else
# define PHP_APCU_API
#endif

/* Commonly needed C library headers. */
#include <assert.h>
#include <errno.h>
#include <stdarg.h>
#include <stddef.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>

/* UNIX headers (needed for struct stat) */
#include <sys/types.h>
#include <sys/stat.h>
#ifndef PHP_WIN32
#include <unistd.h>
#endif

#ifdef HAVE_CONFIG_H
#include <config.h>
#endif

#include "php.h"
#include "main/php_streams.h"

/* console display functions */
PHP_APCU_API void apc_error(const char *format, ...) ZEND_ATTRIBUTE_FORMAT(printf, 1, 2);
PHP_APCU_API void apc_warning(const char *format, ...) ZEND_ATTRIBUTE_FORMAT(printf, 1, 2);
PHP_APCU_API void apc_notice(const char *format, ...) ZEND_ATTRIBUTE_FORMAT(printf, 1, 2);
PHP_APCU_API void apc_debug(const char *format, ...) ZEND_ATTRIBUTE_FORMAT(printf, 1, 2);

/* apc_flip_hash flips keys and values for faster searching */
PHP_APCU_API HashTable* apc_flip_hash(HashTable *hash);

#if defined(__GNUC__)
# define APC_UNUSED __attribute__((unused))
# define APC_USED __attribute__((used))
# define APC_ALLOC __attribute__((malloc))
# if __GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__  > 2)
#  define APC_HOTSPOT __attribute__((hot))
# else
#  define APC_HOTSPOT
# endif
#else
# define APC_UNUSED
# define APC_USED
# define APC_ALLOC
# define APC_HOTSPOT
#endif

/*
* Serializer API
*/
#define APC_SERIALIZER_ABI "0"
#define APC_SERIALIZER_CONSTANT "\000apc_register_serializer-" APC_SERIALIZER_ABI

#define APC_SERIALIZER_NAME(module) module##_apc_serializer
#define APC_UNSERIALIZER_NAME(module) module##_apc_unserializer

#define APC_SERIALIZER_ARGS unsigned char **buf, size_t *buf_len, const zval *value, void *config
#define APC_UNSERIALIZER_ARGS zval *value, unsigned char *buf, size_t buf_len, void *config

typedef int (*apc_serialize_t)(APC_SERIALIZER_ARGS);
typedef int (*apc_unserialize_t)(APC_UNSERIALIZER_ARGS);

/* {{{ struct definition: apc_serializer_t */
typedef struct apc_serializer_t {
	const char*        name;
	apc_serialize_t    serialize;
	apc_unserialize_t  unserialize;
	void*              config;
} apc_serializer_t;
/* }}} */

/* {{{ _apc_register_serializer
 registers the serializer using the given name and parameters */
PHP_APCU_API int _apc_register_serializer(
        const char* name, apc_serialize_t serialize, apc_unserialize_t unserialize, void *config);
/* }}} */

/* {{{ apc_get_serializers
 fetches the list of serializers */
PHP_APCU_API apc_serializer_t* apc_get_serializers(void); /* }}} */

/* {{{ apc_find_serializer
 finds a previously registered serializer by name */
PHP_APCU_API apc_serializer_t* apc_find_serializer(const char* name); /* }}} */

/* {{{ default serializers */
PHP_APCU_API int APC_SERIALIZER_NAME(php) (APC_SERIALIZER_ARGS);
PHP_APCU_API int APC_UNSERIALIZER_NAME(php) (APC_UNSERIALIZER_ARGS); /* }}} */

#define php_apc_try                        \
{                                          \
	JMP_BUF *zb = EG(bailout);             \
	JMP_BUF ab;                            \
	zend_bool _bailout = 0;                \
	                                       \
	EG(bailout) = &ab;                     \
	if (SETJMP(ab) == SUCCESS) {

#define php_apc_finally                    \
	} else {                               \
		_bailout = 1;                      \
	}

#define php_apc_end_try()                  \
	EG(bailout) = zb;                      \
	if (_bailout) {                        \
		zend_bailout();                    \
	}                                      \
}

#define php_apc_try_finish() (EG(bailout) = zb)

#endif

/*
 * Local variables:
 * tab-width: 4
 * c-basic-offset: 4
 * End:
 * vim>600: noexpandtab sw=4 ts=4 sts=4 fdm=marker
 * vim<600: noexpandtab sw=4 ts=4 sts=4
 */
ext/apcu/apc_sma.h000064400000012753151730542240010063 0ustar00/*
  +----------------------------------------------------------------------+
  | APC                                                                  |
  +----------------------------------------------------------------------+
  | Copyright (c) 2006-2011 The PHP Group                                |
  +----------------------------------------------------------------------+
  | This source file is subject to version 3.01 of the PHP license,      |
  | that is bundled with this package in the file LICENSE, and is        |
  | available through the world-wide-web at the following url:           |
  | http://www.php.net/license/3_01.txt                                  |
  | If you did not receive a copy of the PHP license and are unable to   |
  | obtain it through the world-wide-web, please send a note to          |
  | license@php.net so we can mail you a copy immediately.               |
  +----------------------------------------------------------------------+
  | Authors: Daniel Cowgill <dcowgill@communityconnect.com>              |
  +----------------------------------------------------------------------+

   This software was contributed to PHP by Community Connect Inc. in 2002
   and revised in 2005 by Yahoo! Inc. to add support for PHP 5.1.
   Future revisions and derivatives of this source code must acknowledge
   Community Connect Inc. as the original contributor of this module by
   leaving this note intact in the source code.

   All other licensing and usage conditions are those of the PHP Group.

 */

#ifndef APC_SMA_H
#define APC_SMA_H

/* {{{ SMA API
	APC SMA API provides support for shared memory allocators to external libraries ( and to APC )
	Skip to the bottom macros for error free usage of the SMA API
*/

#include "apc.h"

/* {{{ struct definition: apc_segment_t */
typedef struct _apc_segment_t {
	size_t size;            /* size of this segment */
	void* shmaddr;          /* address of shared memory */
#ifdef APC_MEMPROTECT
	void* roaddr;           /* read only (mprotect'd) address */
#endif
} apc_segment_t; /* }}} */

/* {{{ struct definition: apc_sma_link_t */
typedef struct apc_sma_link_t apc_sma_link_t;
struct apc_sma_link_t {
	zend_long size;              /* size of this free block */
	zend_long offset;            /* offset in segment of this block */
	apc_sma_link_t* next;   /* link to next free block */
};
/* }}} */

/* {{{ struct definition: apc_sma_info_t */
typedef struct apc_sma_info_t apc_sma_info_t;
struct apc_sma_info_t {
	int num_seg;            /* number of segments */
	size_t seg_size;        /* segment size */
	apc_sma_link_t** list;  /* one list per segment of links */
};
/* }}} */

typedef void (*apc_sma_expunge_f)(void *pointer, size_t size); /* }}} */

/* {{{ struct definition: apc_sma_t */
typedef struct _apc_sma_t {
	zend_bool initialized;         /* flag to indicate this sma has been initialized */

	/* callback */
	apc_sma_expunge_f expunge;     /* expunge */
	void** data;                   /* expunge data */

	/* info */
	int32_t  num;                  /* number of segments */
	size_t size;                   /* segment size */
	int32_t  last;                 /* last segment */

	/* segments */
	apc_segment_t *segs;           /* segments */
} apc_sma_t; /* }}} */

/*
* apc_sma_api_init will initialize a shared memory allocator with num segments of the given size
*
* should be called once per allocator per process
*/
PHP_APCU_API void apc_sma_init(
		apc_sma_t* sma, void** data, apc_sma_expunge_f expunge,
		int32_t num, size_t size, char *mask);

/*
 * apc_sma_detach will detach from shared memory and cleanup local allocations.
 */
PHP_APCU_API void apc_sma_detach(apc_sma_t* sma);

/*
* apc_smap_api_malloc will allocate a block from the sma of the given size
*/
PHP_APCU_API void* apc_sma_malloc(apc_sma_t* sma, size_t size);

/*
 * apc_sma_api_malloc_ex will allocate a block from the sma of the given size and
 * provide the size of the actual allocation.
 */
PHP_APCU_API void *apc_sma_malloc_ex(
		apc_sma_t *sma, size_t size, size_t *allocated);

/*
* apc_sma_api_free will free p (which should be a pointer to a block allocated from sma)
*/
PHP_APCU_API void apc_sma_free(apc_sma_t* sma, void* p);

/*
* apc_sma_api_protect will protect p (which should be a pointer to a block allocated from sma)
*/
PHP_APCU_API void* apc_sma_protect(apc_sma_t* sma, void* p);

/*
* apc_sma_api_protect will uprotect p (which should be a pointer to a block allocated from sma)
*/
PHP_APCU_API void* apc_sma_unprotect(apc_sma_t* sma, void *p);

/*
* apc_sma_api_info returns information about the allocator
*/
PHP_APCU_API apc_sma_info_t* apc_sma_info(apc_sma_t* sma, zend_bool limited);

/*
* apc_sma_api_info_free_info is for freeing apc_sma_info_t* returned by apc_sma_api_info
*/
PHP_APCU_API void apc_sma_free_info(apc_sma_t* sma, apc_sma_info_t* info);

/*
* apc_sma_api_get_avail_mem will return the amount of memory available left to sma
*/
PHP_APCU_API size_t apc_sma_get_avail_mem(apc_sma_t* sma);

/*
* apc_sma_api_get_avail_size will return true if at least size bytes are available to the sma
*/
PHP_APCU_API zend_bool apc_sma_get_avail_size(apc_sma_t* sma, size_t size);

/*
* apc_sma_api_check_integrity will check the integrity of sma
*/
PHP_APCU_API void apc_sma_check_integrity(apc_sma_t* sma); /* }}} */

/* {{{ ALIGNWORD: pad up x, aligned to the system's word boundary */
typedef union { void* p; int i; long l; double d; void (*f)(void); } apc_word_t;
#define ALIGNSIZE(x, size) ((size) * (1 + (((x)-1)/(size))))
#define ALIGNWORD(x) ALIGNSIZE(x, sizeof(apc_word_t))
/* }}} */

#endif

ext/apcu/apc_mutex.h000064400000004366151730542240010446 0ustar00/*
  +----------------------------------------------------------------------+
  | APCu                                                                 |
  +----------------------------------------------------------------------+
  | Copyright (c) 2013 The PHP Group                                |
  +----------------------------------------------------------------------+
  | This source file is subject to version 3.01 of the PHP license,      |
  | that is bundled with this package in the file LICENSE, and is        |
  | available through the world-wide-web at the following url:           |
  | http://www.php.net/license/3_01.txt                                  |
  | If you did not receive a copy of the PHP license and are unable to   |
  | obtain it through the world-wide-web, please send a note to          |
  | license@php.net so we can mail you a copy immediately.               |
  +----------------------------------------------------------------------+
  | Author: Joe Watkins <joe.watkins@live.co.uk>                        |
  +----------------------------------------------------------------------+
 */

#ifndef APC_MUTEX_H
#define APC_MUTEX_H

#include "apc.h"

#ifdef APC_HAS_PTHREAD_MUTEX

#include "pthread.h"

typedef pthread_mutex_t apc_mutex_t;

PHP_APCU_API zend_bool apc_mutex_init(void);
PHP_APCU_API void apc_mutex_cleanup(void);
PHP_APCU_API zend_bool apc_mutex_create(apc_mutex_t *lock);
PHP_APCU_API zend_bool apc_mutex_lock(apc_mutex_t *lock);
PHP_APCU_API zend_bool apc_mutex_unlock(apc_mutex_t *lock);
PHP_APCU_API void apc_mutex_destroy(apc_mutex_t *lock);

#define APC_MUTEX_INIT()          apc_mutex_init()
#define APC_MUTEX_CLEANUP()       apc_mutex_cleanup()

#define APC_CREATE_MUTEX(lock)    apc_mutex_create(lock)
#define APC_DESTROY_MUTEX(lock)   apc_mutex_destroy(lock)
#define APC_MUTEX_LOCK(lock)      apc_mutex_lock(lock)
#define APC_MUTEX_UNLOCK(lock)    apc_mutex_unlock(lock)

#else

#include "apc_lock.h"

typedef apc_lock_t apc_mutex_t;

// Fallback to normal locks

#define APC_MUTEX_INIT()
#define APC_MUTEX_CLEANUP()

#define APC_CREATE_MUTEX(lock)    CREATE_LOCK(lock)
#define APC_DESTROY_MUTEX(lock)   DESTROY_LOCK(lock)
#define APC_MUTEX_LOCK(lock)      WLOCK(lock)
#define APC_MUTEX_UNLOCK(lock)    WUNLOCK(lock)

#endif

#endif
ext/mysqlnd/mysqlnd_result.h000064400000003076151730542240012302 0ustar00/*
  +----------------------------------------------------------------------+
  | Copyright (c) The PHP Group                                          |
  +----------------------------------------------------------------------+
  | This source file is subject to version 3.01 of the PHP license,      |
  | that is bundled with this package in the file LICENSE, and is        |
  | available through the world-wide-web at the following url:           |
  | https://www.php.net/license/3_01.txt                                 |
  | If you did not receive a copy of the PHP license and are unable to   |
  | obtain it through the world-wide-web, please send a note to          |
  | license@php.net so we can mail you a copy immediately.               |
  +----------------------------------------------------------------------+
  | Authors: Andrey Hristov <andrey@php.net>                             |
  |          Ulf Wendel <uw@php.net>                                     |
  +----------------------------------------------------------------------+
*/

#ifndef MYSQLND_RESULT_H
#define MYSQLND_RESULT_H

PHPAPI MYSQLND_RES * mysqlnd_result_init(const unsigned int field_count);
PHPAPI MYSQLND_RES_UNBUFFERED * mysqlnd_result_unbuffered_init(MYSQLND_RES * result, const unsigned int field_count, MYSQLND_STMT_DATA *stmt);
PHPAPI MYSQLND_RES_BUFFERED * mysqlnd_result_buffered_init(MYSQLND_RES * result, const unsigned int field_count, MYSQLND_STMT_DATA *stmt);

enum_func_status mysqlnd_query_read_result_set_header(MYSQLND_CONN_DATA * conn, MYSQLND_STMT * stmt);

#endif /* MYSQLND_RESULT_H */
ext/mysqlnd/mysqlnd_ps.h000064400000003621151730542240011402 0ustar00/*
  +----------------------------------------------------------------------+
  | Copyright (c) The PHP Group                                          |
  +----------------------------------------------------------------------+
  | This source file is subject to version 3.01 of the PHP license,      |
  | that is bundled with this package in the file LICENSE, and is        |
  | available through the world-wide-web at the following url:           |
  | https://www.php.net/license/3_01.txt                                 |
  | If you did not receive a copy of the PHP license and are unable to   |
  | obtain it through the world-wide-web, please send a note to          |
  | license@php.net so we can mail you a copy immediately.               |
  +----------------------------------------------------------------------+
  | Authors: Andrey Hristov <andrey@php.net>                             |
  |          Ulf Wendel <uw@php.net>                                     |
  +----------------------------------------------------------------------+
*/

#ifndef MYSQLND_PS_H
#define MYSQLND_PS_H

/* PS stuff */
typedef void (*ps_field_fetch_func)(zval * zv, const MYSQLND_FIELD * const field, const unsigned int pack_len, const zend_uchar ** row);

struct st_mysqlnd_perm_bind {
	ps_field_fetch_func func;
	/* should be signed int */
	int pack_len;
	unsigned int php_type;
};

extern struct st_mysqlnd_perm_bind mysqlnd_ps_fetch_functions[MYSQL_TYPE_LAST + 1];

enum_func_status mysqlnd_fetch_stmt_row_cursor(MYSQLND_RES * result, zval **row_data, const unsigned int flags, bool * fetched_anything);

void _mysqlnd_init_ps_subsystem(void);/* This one is private, mysqlnd_library_init() will call it */
void _mysqlnd_init_ps_fetch_subsystem(void);

void ps_fetch_from_1_to_8_bytes(zval * zv, const MYSQLND_FIELD * const field, const unsigned int pack_len, const zend_uchar ** row, unsigned int byte_count);

#endif /* MYSQLND_PS_H */
ext/mysqlnd/mysqlnd_auth.h000064400000007637151730542250011735 0ustar00/*
  +----------------------------------------------------------------------+
  | Copyright (c) The PHP Group                                          |
  +----------------------------------------------------------------------+
  | This source file is subject to version 3.01 of the PHP license,      |
  | that is bundled with this package in the file LICENSE, and is        |
  | available through the world-wide-web at the following url:           |
  | https://www.php.net/license/3_01.txt                                 |
  | If you did not receive a copy of the PHP license and are unable to   |
  | obtain it through the world-wide-web, please send a note to          |
  | license@php.net so we can mail you a copy immediately.               |
  +----------------------------------------------------------------------+
  | Authors: Andrey Hristov <andrey@php.net>                             |
  |          Ulf Wendel <uw@php.net>                                     |
  +----------------------------------------------------------------------+
*/

#ifndef MYSQLND_AUTH_H
#define MYSQLND_AUTH_H
enum_func_status
mysqlnd_auth_handshake(MYSQLND_CONN_DATA * conn,
						const char * const user,
						const char * const passwd,
						const size_t passwd_len,
						const char * const db,
						const size_t db_len,
						const MYSQLND_SESSION_OPTIONS * const session_options,
						const zend_ulong mysql_flags,
						const unsigned int server_charset_no,
						const bool use_full_blown_auth_packet,
						const char * const auth_protocol,
						struct st_mysqlnd_authentication_plugin * auth_plugin,
						const zend_uchar * const orig_auth_plugin_data,
						const size_t orig_auth_plugin_data_len,
						const zend_uchar * const auth_plugin_data,
						const size_t auth_plugin_data_len,
						char ** switch_to_auth_protocol,
						size_t * const switch_to_auth_protocol_len,
						zend_uchar ** switch_to_auth_protocol_data,
						size_t * const switch_to_auth_protocol_data_len
						);

enum_func_status
mysqlnd_auth_change_user(MYSQLND_CONN_DATA * const conn,
								const char * const user,
								const size_t user_len,
								const char * const passwd,
								const size_t passwd_len,
								const char * const db,
								const size_t db_len,
								const bool silent,
								const bool use_full_blown_auth_packet,
								const char * const auth_protocol,
								struct st_mysqlnd_authentication_plugin * auth_plugin,
								const zend_uchar * const orig_auth_plugin_data,
								const size_t orig_auth_plugin_data_len,
								const zend_uchar * auth_plugin_data,
								const size_t auth_plugin_data_len,
								char ** switch_to_auth_protocol,
								size_t * const switch_to_auth_protocol_len,
								zend_uchar ** switch_to_auth_protocol_data,
								size_t * const switch_to_auth_protocol_data_len
								);


enum_func_status
mysqlnd_connect_run_authentication(
			MYSQLND_CONN_DATA * const conn,
			const char * const user,
			const char * const passwd,
			const char * const db,
			const size_t db_len,
			const size_t passwd_len,
			const MYSQLND_STRING authentication_plugin_data,
			const char * const authentication_protocol,
			const unsigned int charset_no,
			const size_t server_capabilities,
			const MYSQLND_SESSION_OPTIONS * const session_options,
			const zend_ulong mysql_flags
			);

enum_func_status
mysqlnd_run_authentication(
			MYSQLND_CONN_DATA * const conn,
			const char * const user,
			const char * const passwd,
			const size_t passwd_len,
			const char * const db,
			const size_t db_len,
			const MYSQLND_STRING auth_plugin_data,
			const char * const auth_protocol,
			const unsigned int charset_no,
			const MYSQLND_SESSION_OPTIONS * const session_options,
			const zend_ulong mysql_flags,
			const bool silent,
			const bool is_change_user
			);

PHPAPI void php_mysqlnd_scramble(zend_uchar * const buffer, const zend_uchar * const scramble, const zend_uchar * const pass, const size_t pass_len);

#endif /* MYSQLND_AUTH_H */
ext/mysqlnd/mysqlnd_structs.h000064400000170711151730542250012475 0ustar00/*
  +----------------------------------------------------------------------+
  | Copyright (c) The PHP Group                                          |
  +----------------------------------------------------------------------+
  | This source file is subject to version 3.01 of the PHP license,      |
  | that is bundled with this package in the file LICENSE, and is        |
  | available through the world-wide-web at the following url:           |
  | https://www.php.net/license/3_01.txt                                 |
  | If you did not receive a copy of the PHP license and are unable to   |
  | obtain it through the world-wide-web, please send a note to          |
  | license@php.net so we can mail you a copy immediately.               |
  +----------------------------------------------------------------------+
  | Authors: Andrey Hristov <andrey@php.net>                             |
  |          Ulf Wendel <uw@php.net>                                     |
  +----------------------------------------------------------------------+
*/

#ifndef MYSQLND_STRUCTS_H
#define MYSQLND_STRUCTS_H

#include "zend_smart_str_public.h"

#define MYSQLND_TYPEDEFED_METHODS

#define MYSQLND_CLASS_METHOD_TABLE_NAME(class) mysqlnd_##class##_methods
#define MYSQLND_CLASS_METHODS_TYPE(class) struct st_##class##_methods
#define MYSQLND_CLASS_METHOD_TABLE_NAME_FORWARD(class) MYSQLND_CLASS_METHODS_TYPE(class) MYSQLND_CLASS_METHOD_TABLE_NAME(class)

#define MYSQLND_CLASS_METHODS_START(class)	MYSQLND_CLASS_METHOD_TABLE_NAME_FORWARD(class) = {
#define MYSQLND_CLASS_METHODS_END			}

#define MYSQLND_CLASS_METHODS_INSTANCE_NAME(class)		mysqlnd_##class##_methods_ptr
#define MYSQLND_CLASS_METHODS_INSTANCE_DECLARE(class)	extern const MYSQLND_CLASS_METHODS_TYPE(class) * MYSQLND_CLASS_METHODS_INSTANCE_NAME(class)
#define MYSQLND_CLASS_METHODS_INSTANCE_DEFINE(class)	const MYSQLND_CLASS_METHODS_TYPE(class) * MYSQLND_CLASS_METHODS_INSTANCE_NAME(class) = & MYSQLND_CLASS_METHOD_TABLE_NAME(class)

typedef struct st_mysqlnd_string
{
	char	*s;
	size_t	l;
} MYSQLND_STRING;

typedef struct st_mysqlnd_const_string
{
	const char *s;
	size_t	l;
} MYSQLND_CSTRING;


typedef struct st_mysqlnd_memory_pool MYSQLND_MEMORY_POOL;

struct st_mysqlnd_memory_pool
{
	zend_arena		*arena;
	void            *checkpoint;

	void*	(*get_chunk)(MYSQLND_MEMORY_POOL * pool, size_t size);
};


typedef struct st_mysqlnd_row_buffer MYSQLND_ROW_BUFFER;

struct st_mysqlnd_row_buffer
{
	void			*ptr;
	size_t			size;
};


typedef struct st_mysqlnd_cmd_buffer
{
	zend_uchar		*buffer;
	size_t			length;
} MYSQLND_CMD_BUFFER;


typedef struct st_mysqlnd_field
{
	zend_string *sname;			/* Name of column */
	bool    is_numeric;
	zend_ulong	 num_key;
	const char  *name;          /* Name of column in C string */
	const char  *org_name;		/* Original column name, if an alias */
	const char  *table;			/* Table of column if column was a field */
	const char  *org_table;		/* Org table name, if table was an alias */
	const char  *db;			/* Database for table */
	const char  *catalog;		/* Catalog for table */
	char  *def;                 /* Default value */
	zend_ulong length;		/* Width of column (create length) */
	unsigned int name_length;
	unsigned int org_name_length;
	unsigned int table_length;
	unsigned int org_table_length;
	unsigned int db_length;
	unsigned int catalog_length;
	unsigned int def_length;
	unsigned int flags;			/* Diverse flags */
	unsigned int decimals;		/* Number of decimals in field */
	unsigned int charsetnr;		/* Character set */
	enum mysqlnd_field_types type;	/* Type of field. See mysql_com.h for types */
	char *root;
	size_t root_len;
} MYSQLND_FIELD;


typedef struct st_mysqlnd_upsert_status MYSQLND_UPSERT_STATUS;
typedef void (*func_mysqlnd_upsert_status__reset)(MYSQLND_UPSERT_STATUS * const upsert_status);
typedef void (*func_mysqlnd_upsert_status__set_affected_rows_to_error)(MYSQLND_UPSERT_STATUS * const upsert_status);

MYSQLND_CLASS_METHODS_TYPE(mysqlnd_upsert_status)
{
	func_mysqlnd_upsert_status__reset reset;
	func_mysqlnd_upsert_status__set_affected_rows_to_error set_affected_rows_to_error;
};

struct st_mysqlnd_upsert_status
{
	unsigned int	warning_count;
	unsigned int	server_status;
	uint64_t		affected_rows;
	uint64_t		last_insert_id;

	MYSQLND_CLASS_METHODS_TYPE(mysqlnd_upsert_status) *m;
};

#define SET_EMPTY_ERROR(info)							(info)->m->reset((info))
#define SET_CLIENT_ERROR(info, err_no, sqlstate, error)	(err_no)? (info)->m->set_client_error((info), (err_no), (sqlstate), (error)) : (info)->m->reset((info))
#define SET_OOM_ERROR(info) 							SET_CLIENT_ERROR((info), CR_OUT_OF_MEMORY, UNKNOWN_SQLSTATE, mysqlnd_out_of_memory)
#define COPY_CLIENT_ERROR(dest, source)					SET_CLIENT_ERROR((dest), (source).error_no, (source).sqlstate, (source).error)


typedef struct st_mysqlnd_error_info MYSQLND_ERROR_INFO;
typedef void (*func_mysqlnd_error_info__reset)(MYSQLND_ERROR_INFO * const info);
typedef void (*func_mysqlnd_error_info__set_client_error)(MYSQLND_ERROR_INFO * const info, const unsigned int err_no, const char * const sqlstate, const char * const error);


MYSQLND_CLASS_METHODS_TYPE(mysqlnd_error_info)
{
	func_mysqlnd_error_info__reset reset;
	func_mysqlnd_error_info__set_client_error set_client_error;
};

struct st_mysqlnd_error_info
{
	char error[MYSQLND_ERRMSG_SIZE+1];
	char sqlstate[MYSQLND_SQLSTATE_LENGTH + 1];
	unsigned int error_no;
	zend_llist error_list;

	bool persistent;
	MYSQLND_CLASS_METHODS_TYPE(mysqlnd_error_info) *m;
};


typedef struct st_mysqlnd_error_list_element
{
	char * error;
	char sqlstate[MYSQLND_SQLSTATE_LENGTH + 1];
	unsigned int error_no;
} MYSQLND_ERROR_LIST_ELEMENT;


typedef struct st_mysqlnd_infile_info
{
	php_stream	*fd;
	int			error_no;
	char		error_msg[MYSQLND_ERRMSG_SIZE + 1];
	const char	*filename;
} MYSQLND_INFILE_INFO;


typedef int (*func_mysqlnd_local_infile__init)(void ** ptr, const char * const filename);
typedef int (*func_mysqlnd_local_infile__read)(void * ptr, zend_uchar * buf, unsigned int buf_len);
typedef int (*func_mysqlnd_local_infile__error)(void * ptr, char * error_msg, unsigned int error_msg_len);
typedef void (*func_mysqlnd_local_infile__end)(void * ptr);


/* character set information */
typedef struct st_mysqlnd_charset
{
	unsigned int	nr;
	const char		*name;
	const char		*collation;
	unsigned int	char_minlen;
	unsigned int	char_maxlen;
	const char		*comment;
	short			mb_charlen;
	short			mb_valid;
	unsigned int    lowest_mb_byte;
} MYSQLND_CHARSET;


/* local infile handler */
typedef struct st_mysqlnd_infile
{
	func_mysqlnd_local_infile__init		local_infile_init;
	func_mysqlnd_local_infile__read		local_infile_read;
	func_mysqlnd_local_infile__error	local_infile_error;
	func_mysqlnd_local_infile__end		local_infile_end;
} MYSQLND_INFILE;


typedef struct st_mysqlnd_session_options
{
	unsigned int		flags;

	/* init commands - we need to send them to server directly after connect */
	unsigned int	num_commands;
	char			**init_commands;

	/* configuration file information */
	char 		*cfg_file;
	char		*cfg_section;

	char		*auth_protocol;
	/*
	  We need to keep these because otherwise st_mysqlnd_conn will be changed.
	  The ABI will be broken and the methods structure will be somewhere else
	  in the memory which can crash external code. Feel free to reuse these.
	*/
	HashTable	* connect_attr;
	char		* unused1;
	char		* unused2;
	char		* unused3;

	enum_mysqlnd_session_protocol_type protocol;

	char 		*charset_name;
	/* maximum allowed packet size for communication */
	unsigned int		max_allowed_packet;

	bool	int_and_float_native;

	char		*local_infile_directory;
} MYSQLND_SESSION_OPTIONS;


typedef struct st_mysqlnd_vio_options
{
	/* timeouts */
	unsigned int timeout_connect;
	unsigned int timeout_read;
	unsigned int timeout_write;

	size_t		net_read_buffer_size;

	/* SSL information */
	char		*ssl_key;
	char		*ssl_cert;
	char		*ssl_ca;
	char		*ssl_capath;
	char		*ssl_cipher;
	char		*ssl_passphrase;
	enum mysqlnd_ssl_peer {
		MYSQLND_SSL_PEER_DEFAULT = 0,
		MYSQLND_SSL_PEER_VERIFY = 1,
		MYSQLND_SSL_PEER_DONT_VERIFY = 2,

#define MYSQLND_SSL_PEER_DEFAULT_ACTION  MYSQLND_SSL_PEER_VERIFY
	} ssl_verify_peer;
} MYSQLND_VIO_OPTIONS;



typedef struct st_mysqlnd_connection MYSQLND;
typedef struct st_mysqlnd_connection_data MYSQLND_CONN_DATA;
typedef struct st_mysqlnd_protocol_frame_codec		MYSQLND_PFC;
typedef struct st_mysqlnd_protocol_frame_codec_data	MYSQLND_PFC_DATA;
typedef struct st_mysqlnd_vio		MYSQLND_VIO;
typedef struct st_mysqlnd_vio_data	MYSQLND_VIO_DATA;
typedef struct st_mysqlnd_protocol_payload_decoder_factory	MYSQLND_PROTOCOL_PAYLOAD_DECODER_FACTORY;
typedef struct st_mysqlnd_res	MYSQLND_RES;
typedef char** 					MYSQLND_ROW_C;		/* return data as array of strings */
typedef struct st_mysqlnd_stmt_data	MYSQLND_STMT_DATA;
typedef struct st_mysqlnd_stmt	MYSQLND_STMT;
typedef unsigned int			MYSQLND_FIELD_OFFSET;

typedef struct st_mysqlnd_param_bind MYSQLND_PARAM_BIND;

typedef struct st_mysqlnd_result_bind MYSQLND_RESULT_BIND;

typedef struct st_mysqlnd_result_metadata MYSQLND_RES_METADATA;
typedef struct st_mysqlnd_buffered_result MYSQLND_RES_BUFFERED;
typedef struct st_mysqlnd_unbuffered_result MYSQLND_RES_UNBUFFERED;

typedef struct st_mysqlnd_debug MYSQLND_DEBUG;


typedef MYSQLND_RES* (*mysqlnd_stmt_use_or_store_func)(MYSQLND_STMT * const);
typedef enum_func_status  (*mysqlnd_fetch_row_func)(MYSQLND_RES *result,
													zval **row,
													const unsigned int flags,
													bool * fetched_anything
													);


typedef struct st_mysqlnd_stats MYSQLND_STATS;

struct st_mysqlnd_stats
{
	size_t					count;
#ifdef ZTS
	MUTEX_T	LOCK_access;
#endif
	uint64_t values[] ZEND_ELEMENT_COUNT(count);
};


typedef enum_func_status (*func_mysqlnd_execute_com_set_option)(MYSQLND_CONN_DATA * const conn, const enum_mysqlnd_server_option option);
typedef enum_func_status (*func_mysqlnd_execute_com_debug)(MYSQLND_CONN_DATA * const conn);
typedef enum_func_status (*func_mysqlnd_execute_com_init_db)(MYSQLND_CONN_DATA * const conn, const MYSQLND_CSTRING db);
typedef enum_func_status (*func_mysqlnd_execute_com_ping)(MYSQLND_CONN_DATA * const conn);
typedef enum_func_status (*func_mysqlnd_execute_com_statistics)(MYSQLND_CONN_DATA * const conn, zend_string ** message);
typedef enum_func_status (*func_mysqlnd_execute_com_process_kill)(MYSQLND_CONN_DATA * const conn, const unsigned int process_id, const bool read_response);
typedef enum_func_status (*func_mysqlnd_execute_com_refresh)(MYSQLND_CONN_DATA * const conn, const uint8_t options);
typedef enum_func_status (*func_mysqlnd_execute_com_quit)(MYSQLND_CONN_DATA * const conn);
typedef enum_func_status (*func_mysqlnd_execute_com_query)(MYSQLND_CONN_DATA * const conn, MYSQLND_CSTRING query);
typedef enum_func_status (*func_mysqlnd_execute_com_change_user)(MYSQLND_CONN_DATA * const conn, const MYSQLND_CSTRING payload, const bool silent);
typedef enum_func_status (*func_mysqlnd_execute_com_reap_result)(MYSQLND_CONN_DATA * const conn);
typedef enum_func_status (*func_mysqlnd_execute_com_stmt_prepare)(MYSQLND_CONN_DATA * const conn, const MYSQLND_CSTRING query);
typedef enum_func_status (*func_mysqlnd_execute_com_stmt_execute)(MYSQLND_CONN_DATA * conn, const MYSQLND_CSTRING payload);
typedef enum_func_status (*func_mysqlnd_execute_com_stmt_fetch)(MYSQLND_CONN_DATA * const conn, const MYSQLND_CSTRING payload);
typedef enum_func_status (*func_mysqlnd_execute_com_stmt_reset)(MYSQLND_CONN_DATA * const conn, const zend_ulong stmt_id);
typedef enum_func_status (*func_mysqlnd_execute_com_stmt_send_long_data)(MYSQLND_CONN_DATA * const conn, const MYSQLND_CSTRING payload);
typedef enum_func_status (*func_mysqlnd_execute_com_stmt_close)(MYSQLND_CONN_DATA * const conn, const zend_ulong stmt_id);
typedef enum_func_status (*func_mysqlnd_execute_com_enable_ssl)(MYSQLND_CONN_DATA * const conn, const size_t client_capabilities, const size_t server_capabilities, const unsigned int charset_no);
typedef enum_func_status (*func_mysqlnd_execute_com_handshake)(MYSQLND_CONN_DATA * const conn, const MYSQLND_CSTRING username, const MYSQLND_CSTRING password, const MYSQLND_CSTRING database, const size_t client_flags);


MYSQLND_CLASS_METHODS_TYPE(mysqlnd_command)
{
	func_mysqlnd_execute_com_set_option set_option;
	func_mysqlnd_execute_com_debug debug;
	func_mysqlnd_execute_com_init_db init_db;
	func_mysqlnd_execute_com_ping ping;
	func_mysqlnd_execute_com_statistics statistics;
	func_mysqlnd_execute_com_process_kill process_kill;
	func_mysqlnd_execute_com_refresh refresh;
	func_mysqlnd_execute_com_quit quit;
	func_mysqlnd_execute_com_query query;
	func_mysqlnd_execute_com_change_user change_user;
	func_mysqlnd_execute_com_reap_result reap_result;
	func_mysqlnd_execute_com_stmt_prepare stmt_prepare;
	func_mysqlnd_execute_com_stmt_execute stmt_execute;
	func_mysqlnd_execute_com_stmt_fetch stmt_fetch;
	func_mysqlnd_execute_com_stmt_reset stmt_reset;
	func_mysqlnd_execute_com_stmt_send_long_data stmt_send_long_data;
	func_mysqlnd_execute_com_stmt_close stmt_close;
	func_mysqlnd_execute_com_enable_ssl enable_ssl;
	func_mysqlnd_execute_com_handshake handshake;
};



typedef void				(*func_mysqlnd_vio__init)(MYSQLND_VIO * const vio, MYSQLND_STATS * const stats, MYSQLND_ERROR_INFO * const error_info);
typedef void				(*func_mysqlnd_vio__dtor)(MYSQLND_VIO * const vio, MYSQLND_STATS * const conn_stats, MYSQLND_ERROR_INFO * const error_info);

typedef enum_func_status	(*func_mysqlnd_vio__connect)(MYSQLND_VIO * const vio, const MYSQLND_CSTRING scheme, const bool persistent, MYSQLND_STATS * const conn_stats, MYSQLND_ERROR_INFO * const error_info);

typedef void				(*func_mysqlnd_vio__close_stream)(MYSQLND_VIO * const vio, MYSQLND_STATS * const conn_stats, MYSQLND_ERROR_INFO * const error_info);
typedef php_stream *		(*func_mysqlnd_vio__open_stream)(MYSQLND_VIO * const vio, const MYSQLND_CSTRING scheme, const bool persistent, MYSQLND_STATS * const conn_stats, MYSQLND_ERROR_INFO * const error_info);
typedef php_stream *		(*func_mysqlnd_vio__get_stream)(const MYSQLND_VIO * const vio);
typedef enum_func_status	(*func_mysqlnd_vio__set_stream)(MYSQLND_VIO * const vio, php_stream * vio_stream);
typedef bool			(*func_mysqlnd_vio__has_valid_stream)(const MYSQLND_VIO * const vio);
typedef func_mysqlnd_vio__open_stream (*func_mysqlnd_vio__get_open_stream)(MYSQLND_VIO * const vio, const MYSQLND_CSTRING scheme, MYSQLND_ERROR_INFO * const error_info);

typedef enum_func_status	(*func_mysqlnd_vio__set_client_option)(MYSQLND_VIO * const vio, enum_mysqlnd_client_option option, const char * const value);
typedef void				(*func_mysqlnd_vio__post_connect_set_opt)(MYSQLND_VIO * const vio, const MYSQLND_CSTRING scheme, MYSQLND_STATS * const conn_stats, MYSQLND_ERROR_INFO * const error_info);

typedef enum_func_status	(*func_mysqlnd_vio__enable_ssl)(MYSQLND_VIO * const vio);
typedef enum_func_status	(*func_mysqlnd_vio__disable_ssl)(MYSQLND_VIO * const vio);
typedef enum_func_status	(*func_mysqlnd_vio__network_read)(MYSQLND_VIO * const vio, zend_uchar * const buffer, const size_t count, MYSQLND_STATS * const stats, MYSQLND_ERROR_INFO * const error_info);
typedef ssize_t				(*func_mysqlnd_vio__network_write)(MYSQLND_VIO * const vio, const zend_uchar * const buf, const size_t count, MYSQLND_STATS * const stats, MYSQLND_ERROR_INFO * const error_info);

typedef size_t				(*func_mysqlnd_vio__consume_uneaten_data)(MYSQLND_VIO * const vio, enum php_mysqlnd_server_command cmd);

typedef void				(*func_mysqlnd_vio__free_contents)(MYSQLND_VIO * vio);


MYSQLND_CLASS_METHODS_TYPE(mysqlnd_vio)
{
	func_mysqlnd_vio__init init;
	func_mysqlnd_vio__dtor dtor;
	func_mysqlnd_vio__connect connect;

	func_mysqlnd_vio__close_stream close_stream;
	func_mysqlnd_vio__open_stream open_pipe;
	func_mysqlnd_vio__open_stream open_tcp_or_unix;

	func_mysqlnd_vio__get_stream get_stream;
	func_mysqlnd_vio__set_stream set_stream;
	func_mysqlnd_vio__has_valid_stream has_valid_stream;
	func_mysqlnd_vio__get_open_stream get_open_stream;

	func_mysqlnd_vio__set_client_option set_client_option;
	func_mysqlnd_vio__post_connect_set_opt post_connect_set_opt;

	func_mysqlnd_vio__enable_ssl enable_ssl;
	func_mysqlnd_vio__disable_ssl disable_ssl;

	func_mysqlnd_vio__network_read network_read;
	func_mysqlnd_vio__network_write network_write;

	func_mysqlnd_vio__consume_uneaten_data consume_uneaten_data;

	func_mysqlnd_vio__free_contents free_contents;
};


MYSQLND_CLASS_METHODS_TYPE(mysqlnd_object_factory);

typedef MYSQLND * (*func_mysqlnd_object_factory__get_connection)(MYSQLND_CLASS_METHODS_TYPE(mysqlnd_object_factory) * factory, const bool persistent);
typedef MYSQLND * (*func_mysqlnd_object_factory__clone_connection_object)(MYSQLND * conn);
typedef MYSQLND_STMT * (*func_mysqlnd_object_factory__get_prepared_statement)(MYSQLND_CONN_DATA * conn);
typedef MYSQLND_PFC * (*func_mysqlnd_object_factory__get_pfc)(const bool persistent, MYSQLND_STATS * stats, MYSQLND_ERROR_INFO * error_info);
typedef MYSQLND_VIO * (*func_mysqlnd_object_factory__get_vio)(const bool persistent, MYSQLND_STATS * stats, MYSQLND_ERROR_INFO * error_info);
typedef MYSQLND_PROTOCOL_PAYLOAD_DECODER_FACTORY * (*func_mysqlnd_object_factory__get_protocol_payload_decoder_factory)(MYSQLND_CONN_DATA * conn, const bool persistent);


MYSQLND_CLASS_METHODS_TYPE(mysqlnd_object_factory)
{
	func_mysqlnd_object_factory__get_connection get_connection;
	func_mysqlnd_object_factory__clone_connection_object clone_connection_object;
	func_mysqlnd_object_factory__get_prepared_statement get_prepared_statement;
	func_mysqlnd_object_factory__get_pfc get_protocol_frame_codec;
	func_mysqlnd_object_factory__get_vio get_vio;
	func_mysqlnd_object_factory__get_protocol_payload_decoder_factory get_protocol_payload_decoder_factory;
};


typedef enum_func_status	(*func_mysqlnd_conn_data__connect)(MYSQLND_CONN_DATA * conn, MYSQLND_CSTRING hostname, MYSQLND_CSTRING username, MYSQLND_CSTRING password, MYSQLND_CSTRING database, unsigned int port, MYSQLND_CSTRING socket_or_pipe, unsigned int mysql_flags);
typedef zend_ulong			(*func_mysqlnd_conn_data__escape_string)(MYSQLND_CONN_DATA * const conn, char *newstr, const char *escapestr, size_t escapestr_len);
typedef enum_func_status	(*func_mysqlnd_conn_data__set_charset)(MYSQLND_CONN_DATA * const conn, const char * const charset);
typedef enum_func_status	(*func_mysqlnd_conn_data__query)(MYSQLND_CONN_DATA * conn, const char * const query, const size_t query_len);
typedef enum_func_status	(*func_mysqlnd_conn_data__send_query)(MYSQLND_CONN_DATA * conn, const char * const query, const size_t query_len, zval *read_cb, zval *err_cb);
typedef enum_func_status	(*func_mysqlnd_conn_data__reap_query)(MYSQLND_CONN_DATA * conn);
typedef MYSQLND_RES *		(*func_mysqlnd_conn_data__use_result)(MYSQLND_CONN_DATA * const conn);
typedef MYSQLND_RES *		(*func_mysqlnd_conn_data__store_result)(MYSQLND_CONN_DATA * const conn);
typedef enum_func_status	(*func_mysqlnd_conn_data__next_result)(MYSQLND_CONN_DATA * const conn);
typedef bool			(*func_mysqlnd_conn_data__more_results)(const MYSQLND_CONN_DATA * const conn);

typedef MYSQLND_STMT *		(*func_mysqlnd_conn_data__stmt_init)(MYSQLND_CONN_DATA * const conn);

typedef enum_func_status	(*func_mysqlnd_conn_data__shutdown_server)(MYSQLND_CONN_DATA * const conn, uint8_t level);
typedef enum_func_status	(*func_mysqlnd_conn_data__refresh_server)(MYSQLND_CONN_DATA * const conn, uint8_t options);

typedef enum_func_status	(*func_mysqlnd_conn_data__ping)(MYSQLND_CONN_DATA * const conn);
typedef enum_func_status	(*func_mysqlnd_conn_data__kill_connection)(MYSQLND_CONN_DATA * conn, unsigned int pid);
typedef enum_func_status	(*func_mysqlnd_conn_data__select_db)(MYSQLND_CONN_DATA * const conn, const char * const db, const size_t db_len);
typedef enum_func_status	(*func_mysqlnd_conn_data__server_dump_debug_information)(MYSQLND_CONN_DATA * const conn);
typedef enum_func_status	(*func_mysqlnd_conn_data__change_user)(MYSQLND_CONN_DATA * const conn, const char * user, const char * passwd, const char * db, bool silent, size_t passwd_len);

typedef unsigned int		(*func_mysqlnd_conn_data__get_error_no)(const MYSQLND_CONN_DATA * const conn);
typedef const char *		(*func_mysqlnd_conn_data__get_error_str)(const MYSQLND_CONN_DATA * const conn);
typedef const char *		(*func_mysqlnd_conn_data__get_sqlstate)(const MYSQLND_CONN_DATA * const conn);
typedef uint64_t			(*func_mysqlnd_conn_data__get_thread_id)(const MYSQLND_CONN_DATA * const conn);
typedef void				(*func_mysqlnd_conn_data__get_statistics)(const MYSQLND_CONN_DATA * const conn, zval *return_value ZEND_FILE_LINE_DC);

typedef zend_ulong			(*func_mysqlnd_conn_data__get_server_version)(const MYSQLND_CONN_DATA * const conn);
typedef const char *		(*func_mysqlnd_conn_data__get_server_information)(const MYSQLND_CONN_DATA * const conn);
typedef enum_func_status	(*func_mysqlnd_conn_data__get_server_statistics)(MYSQLND_CONN_DATA * conn, zend_string **message);
typedef const char *		(*func_mysqlnd_conn_data__get_host_information)(const MYSQLND_CONN_DATA * const conn);
typedef unsigned int		(*func_mysqlnd_conn_data__get_protocol_information)(const MYSQLND_CONN_DATA * const conn);
typedef const char *		(*func_mysqlnd_conn_data__get_last_message)(const MYSQLND_CONN_DATA * const conn);
typedef const char *		(*func_mysqlnd_conn_data__charset_name)(const MYSQLND_CONN_DATA * const conn);
typedef MYSQLND_RES *		(*func_mysqlnd_conn_data__list_method)(MYSQLND_CONN_DATA * conn, const char * const query, const char * const achtung_wild, const char * const par1);

typedef uint64_t			(*func_mysqlnd_conn_data__get_last_insert_id)(const MYSQLND_CONN_DATA * const conn);
typedef uint64_t			(*func_mysqlnd_conn_data__get_affected_rows)(const MYSQLND_CONN_DATA * const conn);
typedef unsigned int		(*func_mysqlnd_conn_data__get_warning_count)(const MYSQLND_CONN_DATA * const conn);

typedef unsigned int		(*func_mysqlnd_conn_data__get_field_count)(const MYSQLND_CONN_DATA * const conn);

typedef unsigned int		(*func_mysqlnd_conn_data__get_server_status)(const MYSQLND_CONN_DATA * const conn);
typedef enum_func_status	(*func_mysqlnd_conn_data__set_server_option)(MYSQLND_CONN_DATA * const conn, enum_mysqlnd_server_option option);
typedef enum_func_status	(*func_mysqlnd_conn_data__set_client_option)(MYSQLND_CONN_DATA * const conn, enum_mysqlnd_client_option option, const char * const value);
typedef void				(*func_mysqlnd_conn_data__free_contents)(MYSQLND_CONN_DATA * conn);/* private */
typedef void				(*func_mysqlnd_conn_data__free_options)(MYSQLND_CONN_DATA * conn);	/* private */
typedef void				(*func_mysqlnd_conn_data__dtor)(MYSQLND_CONN_DATA * conn);	/* private */

typedef enum_func_status	(*func_mysqlnd_conn_data__query_read_result_set_header)(MYSQLND_CONN_DATA * conn, MYSQLND_STMT * stmt);

typedef MYSQLND_CONN_DATA *	(*func_mysqlnd_conn_data__get_reference)(MYSQLND_CONN_DATA * const conn);
typedef enum_func_status	(*func_mysqlnd_conn_data__free_reference)(MYSQLND_CONN_DATA * const conn);

typedef enum_func_status	(*func_mysqlnd_conn_data__send_command_do_request)(MYSQLND_CONN_DATA * const conn, const enum php_mysqlnd_server_command command, const zend_uchar * const arg, const size_t arg_len, const bool silent, const bool ignore_upsert_status);
typedef enum_func_status	(*func_mysqlnd_conn_data__send_command_handle_response)(MYSQLND_CONN_DATA * const conn, const enum mysqlnd_packet_type ok_packet, const bool silent, const enum php_mysqlnd_server_command command, const bool ignore_upsert_status);

typedef void				(*func_mysqlnd_conn_data__restart_psession)(MYSQLND_CONN_DATA * conn);
typedef void				(*func_mysqlnd_conn_data__end_psession)(MYSQLND_CONN_DATA * conn);
typedef enum_func_status	(*func_mysqlnd_conn_data__send_close)(MYSQLND_CONN_DATA * conn);

typedef enum_func_status    (*func_mysqlnd_conn_data__ssl_set)(MYSQLND_CONN_DATA * const conn, const char * key, const char * const cert, const char * const ca, const char * const capath, const char * const cipher);

typedef MYSQLND_RES * 		(*func_mysqlnd_conn_data__result_init)(unsigned int field_count);

typedef enum_func_status	(*func_mysqlnd_conn_data__set_autocommit)(MYSQLND_CONN_DATA * conn, unsigned int mode);
typedef enum_func_status	(*func_mysqlnd_conn_data__tx_commit)(MYSQLND_CONN_DATA * conn);
typedef enum_func_status	(*func_mysqlnd_conn_data__tx_rollback)(MYSQLND_CONN_DATA * conn);
typedef enum_func_status	(*func_mysqlnd_conn_data__tx_begin)(MYSQLND_CONN_DATA * conn, const unsigned int mode, const char * const name);
typedef enum_func_status	(*func_mysqlnd_conn_data__tx_commit_or_rollback)(MYSQLND_CONN_DATA * conn, const bool commit, const unsigned int flags, const char * const name);
typedef void				(*func_mysqlnd_conn_data__tx_cor_options_to_string)(const MYSQLND_CONN_DATA * const conn, smart_str * tmp_str, const unsigned int mode);
typedef enum_func_status	(*func_mysqlnd_conn_data__tx_savepoint)(MYSQLND_CONN_DATA * conn, const char * const name);
typedef enum_func_status	(*func_mysqlnd_conn_data__tx_savepoint_release)(MYSQLND_CONN_DATA * conn, const char * const name);

typedef enum_func_status	(*func_mysqlnd_conn_data__execute_init_commands)(MYSQLND_CONN_DATA * conn);
typedef unsigned int		(*func_mysqlnd_conn_data__get_updated_connect_flags)(MYSQLND_CONN_DATA * conn, unsigned int mysql_flags);
typedef enum_func_status	(*func_mysqlnd_conn_data__connect_handshake)(MYSQLND_CONN_DATA * conn, const MYSQLND_CSTRING * const scheme, const MYSQLND_CSTRING * const username, const MYSQLND_CSTRING * const password, const MYSQLND_CSTRING * const database, const unsigned int mysql_flags);
typedef struct st_mysqlnd_authentication_plugin * (*func_mysqlnd_conn_data__fetch_auth_plugin_by_name)(const char * const requested_protocol);

typedef enum_func_status	(*func_mysqlnd_conn_data__set_client_option_2d)(MYSQLND_CONN_DATA * const conn, const enum_mysqlnd_client_option option, const char * const key, const char * const value);


typedef size_t				(*func_mysqlnd_conn_data__negotiate_client_api_capabilities)(MYSQLND_CONN_DATA * const conn, const size_t flags);
typedef size_t				(*func_mysqlnd_conn_data__get_client_api_capabilities)(const MYSQLND_CONN_DATA * const conn);

typedef MYSQLND_STRING		(*func_mysqlnd_conn_data__get_scheme)(MYSQLND_CONN_DATA * conn, MYSQLND_CSTRING hostname, MYSQLND_CSTRING *socket_or_pipe, unsigned int port, bool * unix_socket, bool * named_pipe);



MYSQLND_CLASS_METHODS_TYPE(mysqlnd_conn_data)
{
	func_mysqlnd_conn_data__connect connect;
	func_mysqlnd_conn_data__escape_string escape_string;
	func_mysqlnd_conn_data__set_charset set_charset;
	func_mysqlnd_conn_data__query query;
	func_mysqlnd_conn_data__send_query send_query;
	func_mysqlnd_conn_data__reap_query reap_query;
	func_mysqlnd_conn_data__use_result use_result;
	func_mysqlnd_conn_data__store_result store_result;
	func_mysqlnd_conn_data__next_result next_result;
	func_mysqlnd_conn_data__more_results more_results;

	func_mysqlnd_conn_data__stmt_init stmt_init;

	func_mysqlnd_conn_data__refresh_server refresh_server;

	func_mysqlnd_conn_data__ping ping;
	func_mysqlnd_conn_data__kill_connection kill_connection;
	func_mysqlnd_conn_data__select_db select_db;
	func_mysqlnd_conn_data__server_dump_debug_information server_dump_debug_information;
	func_mysqlnd_conn_data__change_user change_user;

	func_mysqlnd_conn_data__get_error_no get_error_no;
	func_mysqlnd_conn_data__get_error_str get_error_str;
	func_mysqlnd_conn_data__get_sqlstate get_sqlstate;
	func_mysqlnd_conn_data__get_thread_id get_thread_id;
	func_mysqlnd_conn_data__get_statistics get_statistics;

	func_mysqlnd_conn_data__get_server_version get_server_version;
	func_mysqlnd_conn_data__get_server_information get_server_information;
	func_mysqlnd_conn_data__get_server_statistics get_server_statistics;
	func_mysqlnd_conn_data__get_host_information get_host_information;
	func_mysqlnd_conn_data__get_protocol_information get_protocol_information;
	func_mysqlnd_conn_data__get_last_message get_last_message;
	func_mysqlnd_conn_data__charset_name charset_name;
	func_mysqlnd_conn_data__list_method list_method;

	func_mysqlnd_conn_data__get_last_insert_id get_last_insert_id;
	func_mysqlnd_conn_data__get_affected_rows get_affected_rows;
	func_mysqlnd_conn_data__get_warning_count get_warning_count;

	func_mysqlnd_conn_data__get_field_count get_field_count;

	func_mysqlnd_conn_data__get_server_status get_server_status;

	func_mysqlnd_conn_data__set_server_option set_server_option;
	func_mysqlnd_conn_data__set_client_option set_client_option;
	func_mysqlnd_conn_data__free_contents free_contents;
	func_mysqlnd_conn_data__free_options free_options;
	func_mysqlnd_conn_data__dtor dtor;

	func_mysqlnd_conn_data__query_read_result_set_header query_read_result_set_header;

	func_mysqlnd_conn_data__get_reference get_reference;
	func_mysqlnd_conn_data__free_reference free_reference;

	func_mysqlnd_conn_data__restart_psession restart_psession;
	func_mysqlnd_conn_data__end_psession end_psession;
	func_mysqlnd_conn_data__send_close send_close;

	func_mysqlnd_conn_data__ssl_set ssl_set;

	func_mysqlnd_conn_data__result_init result_init;
	func_mysqlnd_conn_data__set_autocommit set_autocommit;
	func_mysqlnd_conn_data__tx_commit tx_commit;
	func_mysqlnd_conn_data__tx_rollback tx_rollback;
	func_mysqlnd_conn_data__tx_begin tx_begin;
	func_mysqlnd_conn_data__tx_commit_or_rollback tx_commit_or_rollback;
	func_mysqlnd_conn_data__tx_cor_options_to_string tx_cor_options_to_string;
	func_mysqlnd_conn_data__tx_savepoint tx_savepoint;
	func_mysqlnd_conn_data__tx_savepoint_release tx_savepoint_release;

	func_mysqlnd_conn_data__execute_init_commands execute_init_commands;
	func_mysqlnd_conn_data__get_updated_connect_flags get_updated_connect_flags;
	func_mysqlnd_conn_data__connect_handshake connect_handshake;
	func_mysqlnd_conn_data__fetch_auth_plugin_by_name fetch_auth_plugin_by_name;

	func_mysqlnd_conn_data__set_client_option_2d set_client_option_2d;

	func_mysqlnd_conn_data__negotiate_client_api_capabilities negotiate_client_api_capabilities;
	func_mysqlnd_conn_data__get_client_api_capabilities get_client_api_capabilities;

	func_mysqlnd_conn_data__get_scheme get_scheme;
};


typedef enum_func_status	(*func_mysqlnd_data__connect)(MYSQLND * conn, const MYSQLND_CSTRING hostname, const MYSQLND_CSTRING username, const MYSQLND_CSTRING password, const MYSQLND_CSTRING database, unsigned int port, const MYSQLND_CSTRING socket_or_pipe, unsigned int mysql_flags);
typedef MYSQLND *			(*func_mysqlnd_conn__clone_object)(MYSQLND * const conn);
typedef void				(*func_mysqlnd_conn__dtor)(MYSQLND * conn);
typedef enum_func_status	(*func_mysqlnd_conn__close)(MYSQLND * conn, const enum_connection_close_type close_type);

MYSQLND_CLASS_METHODS_TYPE(mysqlnd_conn)
{
	func_mysqlnd_data__connect connect;
	func_mysqlnd_conn__clone_object clone_object;
	func_mysqlnd_conn__dtor dtor;
	func_mysqlnd_conn__close close;
};


	/* for decoding - binary or text protocol */
typedef enum_func_status	(*func_mysqlnd_res__row_decoder)(MYSQLND_ROW_BUFFER * row_buffer, zval * fields,
															 const unsigned int field_count, const MYSQLND_FIELD * const fields_metadata,
															 const bool as_int_or_float, MYSQLND_STATS * const stats);


typedef MYSQLND_RES *		(*func_mysqlnd_res__use_result)(MYSQLND_RES * const result, MYSQLND_STMT_DATA *stmt);
typedef MYSQLND_RES *		(*func_mysqlnd_res__store_result)(MYSQLND_RES * result, MYSQLND_CONN_DATA * const conn, MYSQLND_STMT_DATA *stmt);
typedef void 				(*func_mysqlnd_res__fetch_into)(MYSQLND_RES *result, const unsigned int flags, zval *return_value ZEND_FILE_LINE_DC);
typedef MYSQLND_ROW_C 		(*func_mysqlnd_res__fetch_row_c)(MYSQLND_RES *result);
typedef uint64_t			(*func_mysqlnd_res__num_rows)(const MYSQLND_RES * const result);
typedef unsigned int		(*func_mysqlnd_res__num_fields)(const MYSQLND_RES * const result);
typedef void				(*func_mysqlnd_res__skip_result)(MYSQLND_RES * const result);
typedef enum_func_status	(*func_mysqlnd_res__seek_data)(MYSQLND_RES * const result, const uint64_t row);
typedef MYSQLND_FIELD_OFFSET (*func_mysqlnd_res__seek_field)(MYSQLND_RES * const result, const MYSQLND_FIELD_OFFSET field_offset);
typedef MYSQLND_FIELD_OFFSET (*func_mysqlnd_res__field_tell)(const MYSQLND_RES * const result);
typedef const MYSQLND_FIELD *(*func_mysqlnd_res__fetch_field)(MYSQLND_RES * const result);
typedef const MYSQLND_FIELD *(*func_mysqlnd_res__fetch_field_direct)(MYSQLND_RES * const result, const MYSQLND_FIELD_OFFSET fieldnr);
typedef const MYSQLND_FIELD *(*func_mysqlnd_res__fetch_fields)(MYSQLND_RES * const result);

typedef enum_func_status	(*func_mysqlnd_res__read_result_metadata)(MYSQLND_RES * result, MYSQLND_CONN_DATA * conn);
typedef const size_t *		(*func_mysqlnd_res__fetch_lengths)(const MYSQLND_RES * const result);
typedef enum_func_status	(*func_mysqlnd_res__store_result_fetch_data)(MYSQLND_CONN_DATA * const conn, MYSQLND_RES * result, MYSQLND_RES_METADATA * meta, MYSQLND_ROW_BUFFER ** row_buffers, bool binary_protocol);

typedef void				(*func_mysqlnd_res__free_result_buffers)(MYSQLND_RES * result);	/* private */
typedef enum_func_status	(*func_mysqlnd_res__free_result)(MYSQLND_RES * result, const bool implicit);
typedef void				(*func_mysqlnd_res__free_result_contents)(MYSQLND_RES *result);
typedef void				(*func_mysqlnd_res__free_buffered_data)(MYSQLND_RES *result);


typedef MYSQLND_RES_METADATA * (*func_mysqlnd_res__result_meta_init)(MYSQLND_RES *result, unsigned int field_count);

MYSQLND_CLASS_METHODS_TYPE(mysqlnd_res)
{
	mysqlnd_fetch_row_func	fetch_row;

	func_mysqlnd_res__use_result use_result;
	func_mysqlnd_res__store_result store_result;
	func_mysqlnd_res__fetch_into fetch_into;
	func_mysqlnd_res__fetch_row_c fetch_row_c;
	func_mysqlnd_res__num_rows num_rows;
	func_mysqlnd_res__num_fields num_fields;
	func_mysqlnd_res__skip_result skip_result;
	func_mysqlnd_res__seek_data seek_data;
	func_mysqlnd_res__seek_field seek_field;
	func_mysqlnd_res__field_tell field_tell;
	func_mysqlnd_res__fetch_field fetch_field;
	func_mysqlnd_res__fetch_field_direct fetch_field_direct;
	func_mysqlnd_res__fetch_fields fetch_fields;
	func_mysqlnd_res__read_result_metadata read_result_metadata;
	func_mysqlnd_res__fetch_lengths fetch_lengths;
	func_mysqlnd_res__store_result_fetch_data store_result_fetch_data;
	func_mysqlnd_res__free_result_buffers free_result_buffers;
	func_mysqlnd_res__free_result free_result;
	func_mysqlnd_res__free_result_contents free_result_contents;

	func_mysqlnd_res__result_meta_init result_meta_init;

	void * unused1;
	void * unused2;
	void * unused3;
	void * unused4;
	void * unused5;
};


typedef uint64_t		(*func_mysqlnd_result_unbuffered__num_rows)(const MYSQLND_RES_UNBUFFERED * const result);
typedef const size_t *	(*func_mysqlnd_result_unbuffered__fetch_lengths)(const MYSQLND_RES_UNBUFFERED * const result);
typedef void			(*func_mysqlnd_result_unbuffered__free_result)(MYSQLND_RES_UNBUFFERED * const result, MYSQLND_STATS * const global_stats);

MYSQLND_CLASS_METHODS_TYPE(mysqlnd_result_unbuffered)
{
	mysqlnd_fetch_row_func							fetch_row;
	func_mysqlnd_res__row_decoder					row_decoder;
	func_mysqlnd_result_unbuffered__num_rows		num_rows;
	func_mysqlnd_result_unbuffered__fetch_lengths	fetch_lengths;
	func_mysqlnd_result_unbuffered__free_result		free_result;
};

typedef uint64_t			(*func_mysqlnd_result_buffered__num_rows)(const MYSQLND_RES_BUFFERED * const result);
typedef const size_t *		(*func_mysqlnd_result_buffered__fetch_lengths)(const MYSQLND_RES_BUFFERED * const result);
typedef enum_func_status	(*func_mysqlnd_result_buffered__data_seek)(MYSQLND_RES_BUFFERED * const result, const uint64_t row);
typedef void				(*func_mysqlnd_result_buffered__free_result)(MYSQLND_RES_BUFFERED * const result);

MYSQLND_CLASS_METHODS_TYPE(mysqlnd_result_buffered)
{
	mysqlnd_fetch_row_func						fetch_row;
	func_mysqlnd_res__row_decoder				row_decoder;
	func_mysqlnd_result_buffered__num_rows		num_rows;
	func_mysqlnd_result_buffered__fetch_lengths	fetch_lengths;
	func_mysqlnd_result_buffered__data_seek		data_seek;
	func_mysqlnd_result_buffered__free_result	free_result;
};


typedef const MYSQLND_FIELD *	(*func_mysqlnd_res_meta__fetch_field)(MYSQLND_RES_METADATA * const meta);
typedef const MYSQLND_FIELD *	(*func_mysqlnd_res_meta__fetch_field_direct)(const MYSQLND_RES_METADATA * const meta, const MYSQLND_FIELD_OFFSET fieldnr);
typedef const MYSQLND_FIELD *	(*func_mysqlnd_res_meta__fetch_fields)(MYSQLND_RES_METADATA * const meta);
typedef MYSQLND_FIELD_OFFSET	(*func_mysqlnd_res_meta__field_tell)(const MYSQLND_RES_METADATA * const meta);
typedef MYSQLND_FIELD_OFFSET	(*func_mysqlnd_res_meta__field_seek)(MYSQLND_RES_METADATA * const meta, const MYSQLND_FIELD_OFFSET field_offset);
typedef enum_func_status		(*func_mysqlnd_res_meta__read_metadata)(MYSQLND_RES_METADATA * const meta, MYSQLND_CONN_DATA * conn, MYSQLND_RES * result);
typedef MYSQLND_RES_METADATA *	(*func_mysqlnd_res_meta__clone_metadata)(MYSQLND_RES *result, const MYSQLND_RES_METADATA * const meta);
typedef void					(*func_mysqlnd_res_meta__free_metadata)(MYSQLND_RES_METADATA * meta);

MYSQLND_CLASS_METHODS_TYPE(mysqlnd_res_meta)
{
	func_mysqlnd_res_meta__fetch_field fetch_field;
	func_mysqlnd_res_meta__fetch_field_direct fetch_field_direct;
	func_mysqlnd_res_meta__fetch_fields fetch_fields;
	func_mysqlnd_res_meta__field_tell field_tell;
	func_mysqlnd_res_meta__field_seek field_seek;
	func_mysqlnd_res_meta__read_metadata read_metadata;
	func_mysqlnd_res_meta__clone_metadata clone_metadata;
	func_mysqlnd_res_meta__free_metadata free_metadata;
};


typedef enum_func_status	(*func_mysqlnd_stmt__prepare)(MYSQLND_STMT * const stmt, const char * const query, const size_t query_len);
typedef enum_func_status	(*func_mysqlnd_stmt__send_execute)(MYSQLND_STMT * const s, const enum_mysqlnd_send_execute_type type, zval * read_cb, zval * err_cb);
typedef enum_func_status	(*func_mysqlnd_stmt__execute)(MYSQLND_STMT * const stmt);
typedef MYSQLND_RES *		(*func_mysqlnd_stmt__use_result)(MYSQLND_STMT * const stmt);
typedef MYSQLND_RES *		(*func_mysqlnd_stmt__store_result)(MYSQLND_STMT * const stmt);
typedef MYSQLND_RES *		(*func_mysqlnd_stmt__get_result)(MYSQLND_STMT * const stmt);
typedef bool			(*func_mysqlnd_stmt__more_results)(const MYSQLND_STMT * const stmt);
typedef enum_func_status	(*func_mysqlnd_stmt__next_result)(MYSQLND_STMT * const stmt);
typedef enum_func_status	(*func_mysqlnd_stmt__free_result)(MYSQLND_STMT * const stmt);
typedef enum_func_status	(*func_mysqlnd_stmt__seek_data)(const MYSQLND_STMT * const stmt, uint64_t row);
typedef enum_func_status	(*func_mysqlnd_stmt__reset)(MYSQLND_STMT * const stmt);
typedef enum_func_status	(*func_mysqlnd_stmt__close_on_server)(MYSQLND_STMT * const stmt, bool implicit); /* private */
typedef enum_func_status	(*func_mysqlnd_stmt__dtor)(MYSQLND_STMT * const stmt, bool implicit); /* use this for mysqlnd_stmt_close */
typedef enum_func_status	(*func_mysqlnd_stmt__fetch)(MYSQLND_STMT * const stmt, bool * const fetched_anything);
typedef enum_func_status	(*func_mysqlnd_stmt__bind_parameters)(MYSQLND_STMT * const stmt, MYSQLND_PARAM_BIND * const param_bind);
typedef enum_func_status	(*func_mysqlnd_stmt__bind_one_parameter)(MYSQLND_STMT * const stmt, unsigned int param_no, zval * const zv, zend_uchar	type);
typedef enum_func_status	(*func_mysqlnd_stmt__refresh_bind_param)(MYSQLND_STMT * const stmt);
typedef enum_func_status	(*func_mysqlnd_stmt__bind_result)(MYSQLND_STMT * const stmt, MYSQLND_RESULT_BIND * const result_bind);
typedef enum_func_status	(*func_mysqlnd_stmt__bind_one_result)(MYSQLND_STMT * const stmt, unsigned int param_no);
typedef enum_func_status	(*func_mysqlnd_stmt__send_long_data)(MYSQLND_STMT * const stmt, unsigned int param_num, const char * const data, zend_ulong length);
typedef MYSQLND_RES *		(*func_mysqlnd_stmt__get_parameter_metadata)(MYSQLND_STMT * const stmt);
typedef MYSQLND_RES *		(*func_mysqlnd_stmt__get_result_metadata)(MYSQLND_STMT * const stmt);
typedef uint64_t			(*func_mysqlnd_stmt__get_last_insert_id)(const MYSQLND_STMT * const stmt);
typedef uint64_t			(*func_mysqlnd_stmt__get_affected_rows)(const MYSQLND_STMT * const stmt);
typedef uint64_t			(*func_mysqlnd_stmt__get_num_rows)(const MYSQLND_STMT * const stmt);
typedef unsigned int		(*func_mysqlnd_stmt__get_param_count)(const MYSQLND_STMT * const stmt);
typedef unsigned int		(*func_mysqlnd_stmt__get_field_count)(const MYSQLND_STMT * const stmt);
typedef unsigned int		(*func_mysqlnd_stmt__get_warning_count)(const MYSQLND_STMT * const stmt);
typedef unsigned int		(*func_mysqlnd_stmt__get_error_no)(const MYSQLND_STMT * const stmt);
typedef const char *		(*func_mysqlnd_stmt__get_error_str)(const MYSQLND_STMT * const stmt);
typedef const char *		(*func_mysqlnd_stmt__get_sqlstate)(const MYSQLND_STMT * const stmt);
typedef enum_func_status	(*func_mysqlnd_stmt__get_attribute)(const MYSQLND_STMT * const stmt, enum mysqlnd_stmt_attr attr_type, void * const value);
typedef enum_func_status	(*func_mysqlnd_stmt__set_attribute)(MYSQLND_STMT * const stmt, enum mysqlnd_stmt_attr attr_type, const void * const value);
typedef MYSQLND_PARAM_BIND *(*func_mysqlnd_stmt__alloc_param_bind)(MYSQLND_STMT * const stmt);
typedef MYSQLND_RESULT_BIND*(*func_mysqlnd_stmt__alloc_result_bind)(MYSQLND_STMT * const stmt);
typedef	void 				(*func_mysqlnd_stmt__free_parameter_bind)(MYSQLND_STMT * const stmt, MYSQLND_PARAM_BIND *);
typedef	void 				(*func_mysqlnd_stmt__free_result_bind)(MYSQLND_STMT * const stmt, MYSQLND_RESULT_BIND *);
typedef unsigned int		(*func_mysqlnd_stmt__server_status)(const MYSQLND_STMT * const stmt);
typedef enum_func_status 	(*func_mysqlnd_stmt__generate_execute_request)(MYSQLND_STMT * const s, zend_uchar ** request, size_t *request_len, bool * free_buffer);
typedef enum_func_status	(*func_mysqlnd_stmt__parse_execute_response)(MYSQLND_STMT * const s, enum_mysqlnd_parse_exec_response_type type);
typedef void 				(*func_mysqlnd_stmt__free_stmt_content)(MYSQLND_STMT * const s);
typedef enum_func_status	(*func_mysqlnd_stmt__flush)(MYSQLND_STMT * const stmt);
typedef void 				(*func_mysqlnd_stmt__free_stmt_result)(MYSQLND_STMT * const s);

MYSQLND_CLASS_METHODS_TYPE(mysqlnd_stmt)
{
	func_mysqlnd_stmt__prepare prepare;
	func_mysqlnd_stmt__send_execute send_execute;
	func_mysqlnd_stmt__execute execute;
	func_mysqlnd_stmt__use_result use_result;
	func_mysqlnd_stmt__store_result store_result;
	func_mysqlnd_stmt__get_result get_result;
	func_mysqlnd_stmt__more_results more_results;
	func_mysqlnd_stmt__next_result next_result;
	func_mysqlnd_stmt__free_result free_result;
	func_mysqlnd_stmt__seek_data seek_data;
	func_mysqlnd_stmt__reset reset;
	func_mysqlnd_stmt__close_on_server close_on_server;
	func_mysqlnd_stmt__dtor dtor;
	func_mysqlnd_stmt__fetch fetch;

	func_mysqlnd_stmt__bind_parameters bind_parameters;
	func_mysqlnd_stmt__bind_one_parameter bind_one_parameter;
	func_mysqlnd_stmt__refresh_bind_param refresh_bind_param;
	func_mysqlnd_stmt__bind_result bind_result;
	func_mysqlnd_stmt__bind_one_result bind_one_result;
	func_mysqlnd_stmt__send_long_data send_long_data;
	func_mysqlnd_stmt__get_result_metadata get_result_metadata;

	func_mysqlnd_stmt__get_last_insert_id get_last_insert_id;
	func_mysqlnd_stmt__get_affected_rows get_affected_rows;
	func_mysqlnd_stmt__get_num_rows get_num_rows;

	func_mysqlnd_stmt__get_param_count get_param_count;
	func_mysqlnd_stmt__get_field_count get_field_count;
	func_mysqlnd_stmt__get_warning_count get_warning_count;

	func_mysqlnd_stmt__get_error_no get_error_no;
	func_mysqlnd_stmt__get_error_str get_error_str;
	func_mysqlnd_stmt__get_sqlstate get_sqlstate;

	func_mysqlnd_stmt__get_attribute get_attribute;
	func_mysqlnd_stmt__set_attribute set_attribute;

	func_mysqlnd_stmt__alloc_param_bind alloc_parameter_bind;
	func_mysqlnd_stmt__alloc_result_bind alloc_result_bind;

	func_mysqlnd_stmt__free_parameter_bind free_parameter_bind;
	func_mysqlnd_stmt__free_result_bind free_result_bind;

	func_mysqlnd_stmt__server_status get_server_status;

	func_mysqlnd_stmt__generate_execute_request generate_execute_request;
	func_mysqlnd_stmt__parse_execute_response parse_execute_response;

	func_mysqlnd_stmt__free_stmt_content free_stmt_content;

	func_mysqlnd_stmt__flush flush;

	func_mysqlnd_stmt__free_stmt_result free_stmt_result;
};


struct st_mysqlnd_vio_data
{
	php_stream			*stream;
	bool			ssl;
	MYSQLND_VIO_OPTIONS	options;
#ifdef MYSQLND_DO_WIRE_CHECK_BEFORE_COMMAND
	zend_uchar			last_command;
#else
	zend_uchar			unused_pad1;
#endif

	bool			persistent;

	MYSQLND_CLASS_METHODS_TYPE(mysqlnd_vio) m;
};


struct st_mysqlnd_vio
{
	struct st_mysqlnd_vio_data * data;

	bool persistent;
};



typedef struct st_mysqlnd_connection_state MYSQLND_CONNECTION_STATE;
typedef enum mysqlnd_connection_state (*func_mysqlnd_connection_state__get)(const MYSQLND_CONNECTION_STATE * const state_struct);
typedef void (*func_mysqlnd_connection_state__set)(MYSQLND_CONNECTION_STATE * const state_struct, const enum mysqlnd_connection_state state);


MYSQLND_CLASS_METHODS_TYPE(mysqlnd_connection_state)
{
	func_mysqlnd_connection_state__get get;
	func_mysqlnd_connection_state__set set;
};

struct st_mysqlnd_connection_state
{
	enum mysqlnd_connection_state state;

	MYSQLND_CLASS_METHODS_TYPE(mysqlnd_connection_state) *m;
};

struct st_mysqlnd_connection_data
{
/* Operation related */
	MYSQLND_PFC		* protocol_frame_codec;
	MYSQLND_VIO		* vio;
	MYSQLND_PROTOCOL_PAYLOAD_DECODER_FACTORY * payload_decoder_factory;

/* Information related */
	MYSQLND_STRING	scheme;
	uint64_t		thread_id;
	char			*server_version;
	char			*host_info;
	MYSQLND_STRING	authentication_plugin_data;
	const MYSQLND_CHARSET *charset;
	const MYSQLND_CHARSET *greet_charset;
	MYSQLND_INFILE	infile;
	unsigned int	protocol_version;
	unsigned int	port;
	zend_ulong		server_capabilities;

	/* For UPSERT queries */
	MYSQLND_UPSERT_STATUS * upsert_status;
	MYSQLND_UPSERT_STATUS upsert_status_impl;
	MYSQLND_STRING last_message;

	/* If error packet, we use these */
	MYSQLND_ERROR_INFO	* error_info;
	MYSQLND_ERROR_INFO	error_info_impl;

	MYSQLND_CONNECTION_STATE	state;
	enum_mysqlnd_query_type		last_query_type;
	/* Temporary storage between query and (use|store)_result() call */
	MYSQLND_RES						*current_result;

	/*
	  How many result sets reference this connection.
	  It won't be freed until this number reaches 0.
	  The last one, please close the door! :-)
	  The result set objects can determine by inspecting
	  'quit_sent' whether the connection is still valid.
	*/
	unsigned int	refcount;

	/* Temporal storage for mysql_query */
	unsigned int	field_count;

	/* options */
	MYSQLND_SESSION_OPTIONS	* options;
	MYSQLND_SESSION_OPTIONS	options_impl;

	/* stats */
	MYSQLND_STATS	* stats;

	size_t			client_api_capabilities;

	zval			async_read_cb;
	zval			async_err_cb;
	bool		in_async_read_cb;
	bool		in_async_err_cb;

	MYSQLND_CLASS_METHODS_TYPE(mysqlnd_object_factory) object_factory;
	MYSQLND_CLASS_METHODS_TYPE(mysqlnd_command) * command;
	MYSQLND_CLASS_METHODS_TYPE(mysqlnd_conn_data) * m;

	/* persistent connection */
	bool		persistent;
};


struct st_mysqlnd_connection
{
	MYSQLND_CONN_DATA * data;
	bool persistent;
	MYSQLND_CLASS_METHODS_TYPE(mysqlnd_conn) * m;
};



struct st_mysqlnd_packet_greet;
struct st_mysqlnd_packet_auth;
struct st_mysqlnd_packet_auth_response;
struct st_mysqlnd_packet_change_auth_response;
struct st_mysqlnd_packet_ok;
struct st_mysqlnd_packet_command;
struct st_mysqlnd_packet_eof;
struct st_mysqlnd_packet_rset_header;
struct st_mysqlnd_packet_res_field;
struct st_mysqlnd_packet_row;
struct st_mysqlnd_packet_stats;
struct st_mysqlnd_packet_prepare_response;
struct st_mysqlnd_packet_chg_user_resp;
struct st_mysqlnd_packet_auth_pam;
struct st_mysqlnd_packet_sha256_pk_request;
struct st_mysqlnd_packet_sha256_pk_request_response;
struct st_mysqlnd_packet_cached_sha2_result;

typedef void (*func_mysqlnd_protocol_payload_decoder_factory__init_greet_packet)(struct st_mysqlnd_packet_greet *packet);
typedef void (*func_mysqlnd_protocol_payload_decoder_factory__init_auth_packet)(struct st_mysqlnd_packet_auth *packet);
typedef void (*func_mysqlnd_protocol_payload_decoder_factory__init_auth_response_packet)(struct st_mysqlnd_packet_auth_response *packet);
typedef void (*func_mysqlnd_protocol_payload_decoder_factory__init_change_auth_response_packet)(struct st_mysqlnd_packet_change_auth_response *packet);
typedef void (*func_mysqlnd_protocol_payload_decoder_factory__init_ok_packet)(struct st_mysqlnd_packet_ok *packet);
typedef void (*func_mysqlnd_protocol_payload_decoder_factory__init_command_packet)(struct st_mysqlnd_packet_command *packet);
typedef void (*func_mysqlnd_protocol_payload_decoder_factory__init_eof_packet)(struct st_mysqlnd_packet_eof *packet);
typedef void (*func_mysqlnd_protocol_payload_decoder_factory__init_rset_header_packet)(struct st_mysqlnd_packet_rset_header *packet);
typedef void (*func_mysqlnd_protocol_payload_decoder_factory__init_result_field_packet)(struct st_mysqlnd_packet_res_field *packet);
typedef void (*func_mysqlnd_protocol_payload_decoder_factory__init_row_packet)(struct st_mysqlnd_packet_row *packet);
typedef void (*func_mysqlnd_protocol_payload_decoder_factory__init_stats_packet)(struct st_mysqlnd_packet_stats *packet);
typedef void (*func_mysqlnd_protocol_payload_decoder_factory__init_prepare_response_packet)(struct st_mysqlnd_packet_prepare_response *packet);
typedef void (*func_mysqlnd_protocol_payload_decoder_factory__init_change_user_response_packet)(struct st_mysqlnd_packet_chg_user_resp *packet);
typedef void (*func_mysqlnd_protocol_payload_decoder_factory__init_sha256_pk_request_packet)(struct st_mysqlnd_packet_sha256_pk_request *packet);
typedef void (*func_mysqlnd_protocol_payload_decoder_factory__init_sha256_pk_request_response_packet)(struct st_mysqlnd_packet_sha256_pk_request_response *packet);
typedef void (*func_mysqlnd_protocol_payload_decoder_factory__init_cached_sha2_result_packet)(struct st_mysqlnd_packet_cached_sha2_result *packet);

typedef enum_func_status (*func_mysqlnd_protocol_payload_decoder_factory__send_command)(
			MYSQLND_PROTOCOL_PAYLOAD_DECODER_FACTORY * payload_decoder_factory,
			const enum php_mysqlnd_server_command command,
			const zend_uchar * const arg, const size_t arg_len,
			const bool silent,

			MYSQLND_CONNECTION_STATE * connection_state,
			MYSQLND_ERROR_INFO	* error_info,
			MYSQLND_UPSERT_STATUS * upsert_status,
			MYSQLND_STATS * stats,
			func_mysqlnd_conn_data__send_close send_close,
			void * send_close_ctx);

typedef enum_func_status (*func_mysqlnd_protocol_payload_decoder_factory__send_command_handle_OK)(
			MYSQLND_PROTOCOL_PAYLOAD_DECODER_FACTORY * const payload_decoder_factory,
			MYSQLND_ERROR_INFO * const error_info,
			MYSQLND_UPSERT_STATUS * const upsert_status,
			const bool ignore_upsert_status,  /* actually used only by LOAD DATA. COM_QUERY and COM_EXECUTE handle the responses themselves */
			MYSQLND_STRING * const last_message);

typedef enum_func_status (*func_mysqlnd_protocol_payload_decoder_factory__send_command_handle_EOF)(
			MYSQLND_PROTOCOL_PAYLOAD_DECODER_FACTORY * const payload_decoder_factory,
			MYSQLND_ERROR_INFO * const error_info,
			MYSQLND_UPSERT_STATUS * const upsert_status);

typedef enum_func_status (*func_mysqlnd_protocol_payload_decoder_factory__send_command_handle_response)(
			MYSQLND_PROTOCOL_PAYLOAD_DECODER_FACTORY * payload_decoder_factory,
			const enum mysqlnd_packet_type ok_packet,
			const bool silent,
			const enum php_mysqlnd_server_command command,
			const bool ignore_upsert_status, /* actually used only by LOAD DATA. COM_QUERY and COM_EXECUTE handle the responses themselves */

			MYSQLND_ERROR_INFO	* error_info,
			MYSQLND_UPSERT_STATUS * upsert_status,
			MYSQLND_STRING * last_message);


MYSQLND_CLASS_METHODS_TYPE(mysqlnd_protocol_payload_decoder_factory)
{
	func_mysqlnd_protocol_payload_decoder_factory__init_greet_packet init_greet_packet;
	func_mysqlnd_protocol_payload_decoder_factory__init_auth_packet init_auth_packet;
	func_mysqlnd_protocol_payload_decoder_factory__init_auth_response_packet init_auth_response_packet;
	func_mysqlnd_protocol_payload_decoder_factory__init_change_auth_response_packet init_change_auth_response_packet;
	func_mysqlnd_protocol_payload_decoder_factory__init_ok_packet init_ok_packet;
	func_mysqlnd_protocol_payload_decoder_factory__init_command_packet init_command_packet;
	func_mysqlnd_protocol_payload_decoder_factory__init_eof_packet init_eof_packet;
	func_mysqlnd_protocol_payload_decoder_factory__init_rset_header_packet init_rset_header_packet;
	func_mysqlnd_protocol_payload_decoder_factory__init_result_field_packet init_result_field_packet;
	func_mysqlnd_protocol_payload_decoder_factory__init_row_packet init_row_packet;
	func_mysqlnd_protocol_payload_decoder_factory__init_stats_packet init_stats_packet;
	func_mysqlnd_protocol_payload_decoder_factory__init_prepare_response_packet init_prepare_response_packet;
	func_mysqlnd_protocol_payload_decoder_factory__init_change_user_response_packet init_change_user_response_packet;
	func_mysqlnd_protocol_payload_decoder_factory__init_sha256_pk_request_packet init_sha256_pk_request_packet;
	func_mysqlnd_protocol_payload_decoder_factory__init_sha256_pk_request_response_packet init_sha256_pk_request_response_packet;
	func_mysqlnd_protocol_payload_decoder_factory__init_cached_sha2_result_packet init_cached_sha2_result_packet;

	func_mysqlnd_protocol_payload_decoder_factory__send_command send_command;
	func_mysqlnd_protocol_payload_decoder_factory__send_command_handle_response send_command_handle_response;
	func_mysqlnd_protocol_payload_decoder_factory__send_command_handle_OK send_command_handle_OK;
	func_mysqlnd_protocol_payload_decoder_factory__send_command_handle_EOF send_command_handle_EOF;
};

struct st_mysqlnd_protocol_payload_decoder_factory
{
	MYSQLND_CONN_DATA * conn;
	bool persistent;
	MYSQLND_CLASS_METHODS_TYPE(mysqlnd_protocol_payload_decoder_factory) m;
};


typedef struct st_mysqlnd_read_buffer {
	zend_uchar 	* data;
	size_t 		offset;
	size_t 		size;
	size_t		len;
	bool	(*is_empty)(const struct st_mysqlnd_read_buffer *);
	void		(*read)(struct st_mysqlnd_read_buffer *, size_t count, zend_uchar * dest);
	size_t		(*bytes_left)(const struct st_mysqlnd_read_buffer *);
	void		(*free_buffer)(struct st_mysqlnd_read_buffer **);
} MYSQLND_READ_BUFFER;



typedef void				(*func_mysqlnd_pfc__init)(MYSQLND_PFC * const pfc, MYSQLND_STATS * const stats, MYSQLND_ERROR_INFO * const error_info);
typedef void				(*func_mysqlnd_pfc__dtor)(MYSQLND_PFC * const pfc, MYSQLND_STATS * const conn_stats, MYSQLND_ERROR_INFO * const error_info);
typedef void				(*func_mysqlnd_pfc__reset)(MYSQLND_PFC * const pfc, MYSQLND_STATS * const conn_stats, MYSQLND_ERROR_INFO * const error_info);
typedef enum_func_status	(*func_mysqlnd_pfc__set_client_option)(MYSQLND_PFC * const pfc, enum_mysqlnd_client_option option, const char * const value);
typedef enum_func_status	(*func_mysqlnd_pfc__decode)(zend_uchar * uncompressed_data, const size_t uncompressed_data_len, const zend_uchar * const compressed_data, const size_t compressed_data_len);
typedef enum_func_status	(*func_mysqlnd_pfc__encode)(zend_uchar * compress_buffer, size_t * compress_buffer_len, const zend_uchar * const uncompressed_data, const size_t uncompressed_data_len);
typedef size_t				(*func_mysqlnd_pfc__send)(MYSQLND_PFC * const pfc, MYSQLND_VIO * const vio, zend_uchar * const buffer, const size_t count, MYSQLND_STATS * const conn_stats, MYSQLND_ERROR_INFO * const error_info);
typedef enum_func_status	(*func_mysqlnd_pfc__receive)(MYSQLND_PFC * const pfc, MYSQLND_VIO * const vio, zend_uchar * const buffer, const size_t count, MYSQLND_STATS * const conn_stats, MYSQLND_ERROR_INFO * const error_info);
typedef enum_func_status	(*func_mysqlnd_pfc__read_compressed_packet_from_stream_and_fill_read_buffer)(MYSQLND_PFC * pfc, MYSQLND_VIO * const vio, size_t net_payload_size, MYSQLND_STATS * conn_stats, MYSQLND_ERROR_INFO * error_info);
typedef void				(*func_mysqlnd_pfc__free_contents)(MYSQLND_PFC * pfc);

MYSQLND_CLASS_METHODS_TYPE(mysqlnd_protocol_packet_frame_codec)
{
	func_mysqlnd_pfc__init init;
	func_mysqlnd_pfc__dtor dtor;
	func_mysqlnd_pfc__reset reset;
	func_mysqlnd_pfc__set_client_option set_client_option;

	func_mysqlnd_pfc__decode decode;
	func_mysqlnd_pfc__encode encode;

	func_mysqlnd_pfc__send send;
	func_mysqlnd_pfc__receive receive;

	func_mysqlnd_pfc__read_compressed_packet_from_stream_and_fill_read_buffer read_compressed_packet_from_stream_and_fill_read_buffer;

	func_mysqlnd_pfc__free_contents free_contents;
};


struct st_mysqlnd_protocol_frame_codec_data
{
	php_stream		*stream;
	bool		compressed;
	bool		ssl;
	uint64_t		flags;
	char *			sha256_server_public_key;

#ifdef MYSQLND_COMPRESSION_ENABLED
	MYSQLND_READ_BUFFER	* uncompressed_data;
#else
	void * 				unused_pad1;
#endif

	/* sequence for simple checking of correct packets */
	zend_uchar		packet_no;
	zend_uchar		compressed_envelope_packet_no;

	bool		persistent;

	MYSQLND_CLASS_METHODS_TYPE(mysqlnd_protocol_packet_frame_codec) m;
};


struct st_mysqlnd_protocol_frame_codec
{
	MYSQLND_CMD_BUFFER	cmd_buffer;

	struct st_mysqlnd_protocol_frame_codec_data * data;

	bool 		persistent;
};


struct st_mysqlnd_result_metadata
{
	MYSQLND_FIELD					*fields;

	MYSQLND_CLASS_METHODS_TYPE(mysqlnd_res_meta) * m;

	unsigned int					current_field;
	unsigned int					field_count;
};


struct st_mysqlnd_buffered_result
{
	MYSQLND_CLASS_METHODS_TYPE(mysqlnd_result_buffered) m;

	MYSQLND_ROW_BUFFER	*row_buffers;
	uint64_t			row_count;

	/*  Column lengths of current row - both buffered and unbuffered. For buffered results it duplicates the data found in **data */
	size_t				*lengths;

	MYSQLND_MEMORY_POOL	*result_set_memory_pool;

	unsigned int		references;

	MYSQLND_ERROR_INFO	error_info;

	unsigned int		field_count;
	MYSQLND_STMT_DATA	*stmt;

	uint64_t	current_row;

	void				* unused1;
	void				* unused2;
	void				* unused3;
};


struct st_mysqlnd_unbuffered_result
{
	MYSQLND_CLASS_METHODS_TYPE(mysqlnd_result_unbuffered) m;
	uint64_t			row_count;

	/* For unbuffered (both normal and PS) */
	MYSQLND_ROW_BUFFER	 last_row_buffer;

	/*
	  Column lengths of current row - both buffered and unbuffered.
	  For buffered results it duplicates the data found in **data
	*/
	size_t				*lengths;

	MYSQLND_MEMORY_POOL	*result_set_memory_pool;

	struct st_mysqlnd_packet_row *row_packet;

	unsigned int		field_count;

	bool			eof_reached;

	MYSQLND_STMT_DATA	*stmt;
};


struct st_mysqlnd_res
{
	MYSQLND_CONN_DATA		*conn;
	enum_mysqlnd_res_type	type;
	unsigned int			field_count;

	zval					*row_data;
	bool					free_row_data;

	/* For metadata functions */
	MYSQLND_RES_METADATA	*meta;

	/* To be used with store_result() - both normal and PS */
	MYSQLND_RES_BUFFERED	*stored_data;
	MYSQLND_RES_UNBUFFERED	*unbuf;

	MYSQLND_MEMORY_POOL		*memory_pool;

	MYSQLND_CLASS_METHODS_TYPE(mysqlnd_res) m;
};


struct st_mysqlnd_param_bind
{
	zval		zv;
	zend_uchar	type;
	enum_param_bind_flags	flags;
};

struct st_mysqlnd_result_bind
{
	zval		zv;
	bool	bound;
};


struct st_mysqlnd_stmt_data
{
	MYSQLND_CONN_DATA			*conn;
	zend_ulong					stmt_id;
	zend_ulong					flags;/* cursor is set here */
	enum_mysqlnd_stmt_state		state;
	MYSQLND_RES					*result;
	unsigned int				field_count;
	unsigned int				param_count;
	unsigned char				send_types_to_server;
	MYSQLND_PARAM_BIND			*param_bind;
	MYSQLND_RESULT_BIND			*result_bind;

	MYSQLND_UPSERT_STATUS * 	upsert_status;
	MYSQLND_UPSERT_STATUS 		upsert_status_impl;

	MYSQLND_ERROR_INFO *		error_info;
	MYSQLND_ERROR_INFO			error_info_impl;

	bool					update_max_length;

	bool					cursor_exists;
	mysqlnd_stmt_use_or_store_func default_rset_handler;

	zval						execute_read_cb;
	zval						execute_err_cb;
	bool					in_execute_read_cb;
	bool					in_execute_err_cb;

	MYSQLND_CMD_BUFFER			execute_cmd_buffer;
	unsigned int				execute_count;/* count how many times the stmt was executed */
};


struct st_mysqlnd_stmt
{
	MYSQLND_STMT_DATA * data;
	MYSQLND_CLASS_METHODS_TYPE(mysqlnd_stmt) * m;
};


struct st_mysqlnd_plugin_header
{
	unsigned int	plugin_api_version;
	const char *	plugin_name;
	zend_ulong	plugin_version;
	const char *	plugin_string_version;
	const char *	plugin_license;
	const char *	plugin_author;
	struct
	{
		MYSQLND_STATS *			values;
		const MYSQLND_STRING *	names;
	} plugin_stats;

	struct
	{
		enum_func_status (*plugin_shutdown)(void * plugin);
	} m;
};


struct st_mysqlnd_plugin_core
{
	struct st_mysqlnd_plugin_header plugin_header;
};


struct st_mysqlnd_typeii_plugin_example
{
	struct st_mysqlnd_plugin_header plugin_header;
	void * methods;
	unsigned int counter;
};

struct st_mysqlnd_authentication_plugin;

typedef zend_uchar * (*func_auth_plugin__get_auth_data)(struct st_mysqlnd_authentication_plugin * self,
														size_t * auth_data_len,
														MYSQLND_CONN_DATA * conn, const char * const user, const char * const passwd,
														const size_t passwd_len, zend_uchar * auth_plugin_data, size_t auth_plugin_data_len,
														const MYSQLND_SESSION_OPTIONS * const session_options,
														const MYSQLND_PFC_DATA * const pfc_data, const zend_ulong mysql_flags
														);

typedef enum_func_status (*func_auth_plugin__handle_server_response)(struct st_mysqlnd_authentication_plugin * self,
		MYSQLND_CONN_DATA * conn,
		const zend_uchar * auth_plugin_data, size_t auth_plugin_data_len,
		const char * const passwd,
		const size_t passwd_len,
		char **new_auth_protocol, size_t *new_auth_protocol_len,
		zend_uchar **new_auth_protocol_data, size_t *new_auth_protocol_data_len
		);

struct st_mysqlnd_authentication_plugin
{
	struct st_mysqlnd_plugin_header plugin_header;
	struct {
		func_auth_plugin__get_auth_data get_auth_data;
		func_auth_plugin__handle_server_response handle_server_response;
	} methods;
};

#endif /* MYSQLND_STRUCTS_H */
ext/mysqlnd/mysqlnd_statistics.h000064400000007606151730542250013162 0ustar00/*
  +----------------------------------------------------------------------+
  | Copyright (c) The PHP Group                                          |
  +----------------------------------------------------------------------+
  | This source file is subject to version 3.01 of the PHP license,      |
  | that is bundled with this package in the file LICENSE, and is        |
  | available through the world-wide-web at the following url:           |
  | https://www.php.net/license/3_01.txt                                 |
  | If you did not receive a copy of the PHP license and are unable to   |
  | obtain it through the world-wide-web, please send a note to          |
  | license@php.net so we can mail you a copy immediately.               |
  +----------------------------------------------------------------------+
  | Authors: Andrey Hristov <andrey@php.net>                             |
  |          Ulf Wendel <uw@php.net>                                     |
  +----------------------------------------------------------------------+
*/

#ifndef MYSQLND_STATISTICS_H
#define MYSQLND_STATISTICS_H

#ifdef ZTS
#define MYSQLND_STATS_LOCK(stats) tsrm_mutex_lock((stats)->LOCK_access)
#define MYSQLND_STATS_UNLOCK(stats) tsrm_mutex_unlock((stats)->LOCK_access)
#else
#define MYSQLND_STATS_LOCK(stats)
#define MYSQLND_STATS_UNLOCK(stats)
#endif

#define MYSQLND_STATS_UPDATE_VALUE(stats, statistic, value) \
	{ \
			MYSQLND_STATS_LOCK(stats); \
			(stats)->values[(statistic)] += (value); \
			MYSQLND_STATS_UNLOCK(_p_s); \
	}

#define MYSQLND_DEC_STATISTIC(enabler, stats, statistic) \
 { \
	enum_mysqlnd_collected_stats _s = (statistic);\
	MYSQLND_STATS * _p_s = (MYSQLND_STATS *) (stats); \
	if ((enabler) && _p_s && _s != _p_s->count) { \
		MYSQLND_STATS_UPDATE_VALUE(_p_s, _s, -1); \
	}\
 }

#define MYSQLND_INC_STATISTIC(enabler, stats, statistic) \
 { \
	enum_mysqlnd_collected_stats _s = (statistic);\
	MYSQLND_STATS * _p_s = (MYSQLND_STATS *) (stats); \
	if ((enabler) && _p_s && _s != _p_s->count) { \
		MYSQLND_STATS_UPDATE_VALUE(_p_s, _s, 1); \
	}\
 }

#define MYSQLND_INC_STATISTIC_W_VALUE(enabler, stats, statistic, value) \
 { \
	enum_mysqlnd_collected_stats _s = (statistic);\
	MYSQLND_STATS * _p_s = (MYSQLND_STATS *) (stats); \
	if ((enabler) && _p_s && _s != _p_s->count) { \
		uint64_t v = (uint64_t) (value); \
		MYSQLND_STATS_UPDATE_VALUE(_p_s, _s, v); \
	}\
 }

#define MYSQLND_INC_STATISTIC_W_VALUE2(enabler, stats, statistic1, value1, statistic2, value2) \
 { \
	MYSQLND_STATS * _p_s = (MYSQLND_STATS *) (stats); \
	if ((enabler) && _p_s) { \
		uint64_t v1 = (uint64_t) (value1); \
		uint64_t v2 = (uint64_t) (value2); \
		enum_mysqlnd_collected_stats _s1 = (statistic1);\
		enum_mysqlnd_collected_stats _s2 = (statistic2);\
		if (_s1 != _p_s->count) MYSQLND_STATS_UPDATE_VALUE(_p_s, _s1, v1); \
		if (_s2 != _p_s->count) MYSQLND_STATS_UPDATE_VALUE(_p_s, _s2, v2); \
	}\
 }

#define MYSQLND_INC_STATISTIC_W_VALUE3(enabler, stats, statistic1, value1, statistic2, value2, statistic3, value3) \
 { \
	MYSQLND_STATS * _p_s = (MYSQLND_STATS *) (stats); \
	if ((enabler) && _p_s) { \
		uint64_t v1 = (uint64_t) (value1); \
		uint64_t v2 = (uint64_t) (value2); \
		uint64_t v3 = (uint64_t) (value3); \
		enum_mysqlnd_collected_stats _s1 = (statistic1);\
		enum_mysqlnd_collected_stats _s2 = (statistic2);\
		enum_mysqlnd_collected_stats _s3 = (statistic3);\
		if (_s1 != _p_s->count) MYSQLND_STATS_UPDATE_VALUE(_p_s, _s1, v1); \
		if (_s2 != _p_s->count) MYSQLND_STATS_UPDATE_VALUE(_p_s, _s2, v2); \
		if (_s3 != _p_s->count) MYSQLND_STATS_UPDATE_VALUE(_p_s, _s3, v3); \
	}\
 }



PHPAPI void mysqlnd_stats_init(MYSQLND_STATS ** stats, const size_t statistic_count, const bool persistent);
PHPAPI void mysqlnd_stats_end(MYSQLND_STATS * stats, const bool persistent);

PHPAPI void mysqlnd_fill_stats_hash(const MYSQLND_STATS * const stats, const MYSQLND_STRING * names, zval *return_value ZEND_FILE_LINE_DC);

#endif	/* MYSQLND_STATISTICS_H */
ext/mysqlnd/mysqlnd_block_alloc.h000064400000002645151730542260013233 0ustar00/*
  +----------------------------------------------------------------------+
  | Copyright (c) The PHP Group                                          |
  +----------------------------------------------------------------------+
  | This source file is subject to version 3.01 of the PHP license,      |
  | that is bundled with this package in the file LICENSE, and is        |
  | available through the world-wide-web at the following url:           |
  | https://www.php.net/license/3_01.txt                                 |
  | If you did not receive a copy of the PHP license and are unable to   |
  | obtain it through the world-wide-web, please send a note to          |
  | license@php.net so we can mail you a copy immediately.               |
  +----------------------------------------------------------------------+
  | Authors: Andrey Hristov <andrey@php.net>                             |
  |          Ulf Wendel <uw@php.net>                                     |
  +----------------------------------------------------------------------+
*/

#ifndef MYSQLND_BLOCK_ALLOC_H
#define MYSQLND_BLOCK_ALLOC_H

PHPAPI MYSQLND_MEMORY_POOL *	mysqlnd_mempool_create(size_t arena_size);
PHPAPI void 					mysqlnd_mempool_destroy(MYSQLND_MEMORY_POOL * pool);
PHPAPI void						mysqlnd_mempool_save_state(MYSQLND_MEMORY_POOL * pool);
PHPAPI void						mysqlnd_mempool_restore_state(MYSQLND_MEMORY_POOL * pool);

#endif	/* MYSQLND_BLOCK_ALLOC_H */
ext/mysqlnd/mysqlnd_connection.h000064400000005166151730542260013127 0ustar00/*
  +----------------------------------------------------------------------+
  | Copyright (c) The PHP Group                                          |
  +----------------------------------------------------------------------+
  | This source file is subject to version 3.01 of the PHP license,      |
  | that is bundled with this package in the file LICENSE, and is        |
  | available through the world-wide-web at the following url:           |
  | https://www.php.net/license/3_01.txt                                 |
  | If you did not receive a copy of the PHP license and are unable to   |
  | obtain it through the world-wide-web, please send a note to          |
  | license@php.net so we can mail you a copy immediately.               |
  +----------------------------------------------------------------------+
  | Authors: Andrey Hristov <andrey@php.net>                             |
  |          Ulf Wendel <uw@php.net>                                     |
  +----------------------------------------------------------------------+
*/

#ifndef MYSQLND_CONNECTION_H
#define MYSQLND_CONNECTION_H

PHPAPI extern const char * const mysqlnd_out_of_sync;
PHPAPI extern const char * const mysqlnd_server_gone;
PHPAPI extern const char * const mysqlnd_out_of_memory;


void mysqlnd_upsert_status_init(MYSQLND_UPSERT_STATUS * const upsert_status);

#define UPSERT_STATUS_RESET(status)							(status)->m->reset((status))

#define UPSERT_STATUS_GET_SERVER_STATUS(status)				(status)->server_status
#define UPSERT_STATUS_SET_SERVER_STATUS(status, server_st)	(status)->server_status = (server_st)

#define UPSERT_STATUS_GET_WARNINGS(status)					(status)->warning_count
#define UPSERT_STATUS_SET_WARNINGS(status, warnings)		(status)->warning_count = (warnings)

#define UPSERT_STATUS_GET_AFFECTED_ROWS(status)				(status)->affected_rows
#define UPSERT_STATUS_SET_AFFECTED_ROWS(status, rows)		(status)->affected_rows = (rows)
#define UPSERT_STATUS_SET_AFFECTED_ROWS_TO_ERROR(status)	(status)->m->set_affected_rows_to_error((status))

#define UPSERT_STATUS_GET_LAST_INSERT_ID(status)			(status)->last_insert_id
#define UPSERT_STATUS_SET_LAST_INSERT_ID(status, id)		(status)->last_insert_id = (id)

PHPAPI void mysqlnd_error_info_init(MYSQLND_ERROR_INFO * const info, const bool persistent);
PHPAPI void	mysqlnd_error_info_free_contents(MYSQLND_ERROR_INFO * const info);

#define GET_CONNECTION_STATE(state_struct)		(state_struct)->m->get((state_struct))
#define SET_CONNECTION_STATE(state_struct, s)	(state_struct)->m->set((state_struct), (s))

PHPAPI void mysqlnd_connection_state_init(struct st_mysqlnd_connection_state * const state);

#endif /* MYSQLND_CONNECTION_H */
ext/mysqlnd/php_mysqlnd.h000064400000002312151730542260011545 0ustar00/*
  +----------------------------------------------------------------------+
  | Copyright (c) The PHP Group                                          |
  +----------------------------------------------------------------------+
  | This source file is subject to version 3.01 of the PHP license,      |
  | that is bundled with this package in the file LICENSE, and is        |
  | available through the world-wide-web at the following url:           |
  | https://www.php.net/license/3_01.txt                                 |
  | If you did not receive a copy of the PHP license and are unable to   |
  | obtain it through the world-wide-web, please send a note to          |
  | license@php.net so we can mail you a copy immediately.               |
  +----------------------------------------------------------------------+
  | Authors: Andrey Hristov <andrey@php.net>                             |
  |          Ulf Wendel <uw@php.net>                                     |
  +----------------------------------------------------------------------+
*/

#ifndef PHP_MYSQLND_H
#define PHP_MYSQLND_H

#define phpext_mysqlnd_ptr &mysqlnd_module_entry
extern zend_module_entry mysqlnd_module_entry;

#endif	/* PHP_MYSQLND_H */
ext/mysqlnd/mysqlnd_ext_plugin.h000064400000017444151730542260013150 0ustar00/*
  +----------------------------------------------------------------------+
  | Copyright (c) The PHP Group                                          |
  +----------------------------------------------------------------------+
  | This source file is subject to version 3.01 of the PHP license,      |
  | that is bundled with this package in the file LICENSE, and is        |
  | available through the world-wide-web at the following url:           |
  | https://www.php.net/license/3_01.txt                                 |
  | If you did not receive a copy of the PHP license and are unable to   |
  | obtain it through the world-wide-web, please send a note to          |
  | license@php.net so we can mail you a copy immediately.               |
  +----------------------------------------------------------------------+
  | Authors: Andrey Hristov <andrey@php.net>                             |
  |          Johannes Schlüter <johannes@php.net>                        |
  |          Ulf Wendel <uw@php.net>                                     |
  +----------------------------------------------------------------------+
*/

#ifndef MYSQLND_EXT_PLUGIN_H
#define MYSQLND_EXT_PLUGIN_H

struct st_mysqlnd_plugin__plugin_area_getters
{
	void ** (*get_connection_area)(const MYSQLND * conn, const unsigned int plugin_id);
	void ** (*get_connection_data_area)(const MYSQLND_CONN_DATA * conn, const unsigned int plugin_id);
	void ** (*get_result_area)(const MYSQLND_RES * result, const unsigned int plugin_id);
	void ** (*get_unbuffered_area)(const MYSQLND_RES_UNBUFFERED * result, const unsigned int plugin_id);
	void ** (*get_result_buffered_aread)(const MYSQLND_RES_BUFFERED * result, const unsigned int plugin_id);
	void ** (*get_stmt_area)(const MYSQLND_STMT * stmt, const unsigned int plugin_id);
	void ** (*get_protocol_decoder_area)(const MYSQLND_PROTOCOL_PAYLOAD_DECODER_FACTORY * factory, const unsigned int plugin_id);
	void ** (*get_pfc_area)(const MYSQLND_PFC * pfc, const unsigned int plugin_id);
	void ** (*get_vio_area)(const MYSQLND_VIO * vio, const unsigned int plugin_id);
};

PHPAPI extern struct st_mysqlnd_plugin__plugin_area_getters mysqlnd_plugin_area_getters;

#define mysqlnd_plugin_get_plugin_connection_data(c, p_id)				mysqlnd_plugin_area_getters.get_connection_area((c), (p_id))
#define mysqlnd_plugin_get_plugin_connection_data_data(c, p_id)			mysqlnd_plugin_area_getters.get_connection_data_area((c), (p_id))
#define mysqlnd_plugin_get_plugin_result_data(res, p_id)				mysqlnd_plugin_area_getters.get_result_area((res), (p_id))
#define mysqlnd_plugin_get_plugin_result_unbuffered_data(res, p_id)		mysqlnd_plugin_area_getters.get_unbuffered_area((res), (p_id))
#define mysqlnd_plugin_get_plugin_result_buffered_data_c(res, p_id)		mysqlnd_plugin_area_getters.get_result_buffered_aread((res), (p_id))
#define mysqlnd_plugin_get_plugin_stmt_data(stmt, p_id)					mysqlnd_plugin_area_getters.get_stmt_area((stmt), (p_id))
#define mysqlnd_plugin_get_plugin_protocol_data(proto, p_id)			mysqlnd_plugin_area_getters.get_protocol_decoder_area((proto), (p_id))
#define mysqlnd_plugin_get_plugin_pfc_data(pfc, p_id)					mysqlnd_plugin_area_getters.get_pfc_area((pfc), (p_id))
#define mysqlnd_plugin_get_plugin_vio_data(vio, p_id)					mysqlnd_plugin_area_getters.get_pfc_area((vio), (p_id))


struct st_mysqlnd_plugin_methods_xetters
{
	struct st_mnd_object_factory_xetters
	{
		MYSQLND_CLASS_METHODS_TYPE(mysqlnd_object_factory) * (*get)(void);
		void (*set)(MYSQLND_CLASS_METHODS_TYPE(mysqlnd_object_factory) *methods);
	} object_factory;

	struct st_mnd_connection_xetters
	{
		MYSQLND_CLASS_METHODS_TYPE(mysqlnd_conn) * (*get)(void);
		void (*set)(MYSQLND_CLASS_METHODS_TYPE(mysqlnd_conn) *methods);
	} connection;

	struct st_mnd_connection_data_xetters
	{
		MYSQLND_CLASS_METHODS_TYPE(mysqlnd_conn_data) * (*get)(void);
		void (*set)(MYSQLND_CLASS_METHODS_TYPE(mysqlnd_conn_data) *methods);
	} connection_data;

	struct st_mnd_result_xetters
	{
		MYSQLND_CLASS_METHODS_TYPE(mysqlnd_res) * (*get)(void);
		void (*set)(MYSQLND_CLASS_METHODS_TYPE(mysqlnd_res) *methods);
	} result;

	struct st_mnd_unbuffered_result_xetters
	{
		MYSQLND_CLASS_METHODS_TYPE(mysqlnd_result_unbuffered) * (*get)(void);
		void (*set)(MYSQLND_CLASS_METHODS_TYPE(mysqlnd_result_unbuffered) *methods);
	} unbuffered_result;

	struct st_mnd_buffered_result_xetters
	{
		MYSQLND_CLASS_METHODS_TYPE(mysqlnd_result_buffered)* (*get)(void);
		void (*set)(MYSQLND_CLASS_METHODS_TYPE(mysqlnd_result_buffered) *methods);
	} buffered_result;

	struct st_mnd_stmt_xetters
	{
		MYSQLND_CLASS_METHODS_TYPE(mysqlnd_stmt) * (*get)(void);
		void (*set)(MYSQLND_CLASS_METHODS_TYPE(mysqlnd_stmt) * methods);
	} statement;

	struct st_mnd_protocol_xetters
	{
		MYSQLND_CLASS_METHODS_TYPE(mysqlnd_protocol_payload_decoder_factory)* (*get)(void);
		void (*set)(MYSQLND_CLASS_METHODS_TYPE(mysqlnd_protocol_payload_decoder_factory) *methods);
	} protocol;

	struct st_mnd_pfc_xetters
	{
		MYSQLND_CLASS_METHODS_TYPE(mysqlnd_protocol_packet_frame_codec) * (*get)(void);
		void (*set)(MYSQLND_CLASS_METHODS_TYPE(mysqlnd_protocol_packet_frame_codec) * methods);
	} pfc;

	struct st_mnd_vio_xetters
	{
		MYSQLND_CLASS_METHODS_TYPE(mysqlnd_vio) * (*get)(void);
		void (*set)(MYSQLND_CLASS_METHODS_TYPE(mysqlnd_vio) * methods);
	} vio;

	struct st_mnd_error_info_xetters
	{
		MYSQLND_CLASS_METHODS_TYPE(mysqlnd_error_info) * (*get)(void);
		void (*set)(MYSQLND_CLASS_METHODS_TYPE(mysqlnd_error_info) * methods);
	} error_info;

	struct st_mnd_command_xetters
	{
		MYSQLND_CLASS_METHODS_TYPE(mysqlnd_command) * (*get)(void);
		void (*set)(MYSQLND_CLASS_METHODS_TYPE(mysqlnd_command) * methods);
	} command;
};

PHPAPI extern struct st_mysqlnd_plugin_methods_xetters mysqlnd_plugin_methods_xetters;


#define mysqlnd_object_factory_get_methods()	mysqlnd_plugin_methods_xetters.object_factory.get()
#define mysqlnd_object_factory_set_methods(m)	mysqlnd_plugin_methods_xetters.object_factory.set((m))

#define mysqlnd_conn_get_methods()			mysqlnd_plugin_methods_xetters.connection.get()
#define mysqlnd_conn_set_methods(m)			mysqlnd_plugin_methods_xetters.connection.set((m))

#define mysqlnd_conn_data_get_methods()		mysqlnd_plugin_methods_xetters.connection_data.get()
#define mysqlnd_conn_data_set_methods(m)	mysqlnd_plugin_methods_xetters.connection_data.set((m))

#define mysqlnd_result_get_methods()		mysqlnd_plugin_methods_xetters.result.get()
#define mysqlnd_result_set_methods(m)		mysqlnd_plugin_methods_xetters.result.set((m))

#define mysqlnd_result_unbuffered_get_methods()		mysqlnd_plugin_methods_xetters.unbuffered_result.get()
#define mysqlnd_result_unbuffered_set_methods(m)	mysqlnd_plugin_methods_xetters.unbuffered_result.set((m))

#define mysqlnd_result_buffered_get_methods()		mysqlnd_plugin_methods_xetters.buffered_result.get()
#define mysqlnd_result_buffered_set_methods(m)		mysqlnd_plugin_methods_xetters.buffered_result.set((m))

#define mysqlnd_stmt_get_methods()		mysqlnd_plugin_methods_xetters.statement.get()
#define mysqlnd_stmt_set_methods(m)		mysqlnd_plugin_methods_xetters.statement.set((m))

#define mysqlnd_protocol_get_methods()	mysqlnd_plugin_methods_xetters.protocol.get()
#define mysqlnd_protocol_set_methods(m)	mysqlnd_plugin_methods_xetters.protocol.set((m))

#define mysqlnd_pfc_get_methods()		mysqlnd_plugin_methods_xetters.pfc.get()
#define mysqlnd_pfc_set_methods(m)		mysqlnd_plugin_methods_xetters.pfc.set((m))

#define mysqlnd_vio_get_methods()		mysqlnd_plugin_methods_xetters.vio.get()
#define mysqlnd_vio_set_methods(m)		mysqlnd_plugin_methods_xetters.vio.set((m))

#define mysqlnd_command_get_methods()		mysqlnd_plugin_methods_xetters.command.get()
#define mysqlnd_command_set_methods(m)		mysqlnd_plugin_methods_xetters.command.set((m))

#define mysqlnd_error_info_get_methods()	mysqlnd_plugin_methods_xetters.error_info.get()
#define mysqlnd_error_info_set_methods(m)	mysqlnd_plugin_methods_xetters.error_info.set((m))

#endif	/* MYSQLND_EXT_PLUGIN_H */
ext/mysqlnd/mysqlnd.h000064400000043102151730542270010701 0ustar00/*
  +----------------------------------------------------------------------+
  | Copyright (c) The PHP Group                                          |
  +----------------------------------------------------------------------+
  | This source file is subject to version 3.01 of the PHP license,      |
  | that is bundled with this package in the file LICENSE, and is        |
  | available through the world-wide-web at the following url:           |
  | https://www.php.net/license/3_01.txt                                 |
  | If you did not receive a copy of the PHP license and are unable to   |
  | obtain it through the world-wide-web, please send a note to          |
  | license@php.net so we can mail you a copy immediately.               |
  +----------------------------------------------------------------------+
  | Authors: Andrey Hristov <andrey@php.net>                             |
  |          Ulf Wendel <uw@php.net>                                     |
  |          Georg Richter <georg@php.net>                               |
  +----------------------------------------------------------------------+
*/

#ifndef MYSQLND_H
#define MYSQLND_H

#define PHP_MYSQLND_VERSION "mysqlnd " PHP_VERSION
#define MYSQLND_VERSION_ID PHP_VERSION_ID

#define MYSQLND_PLUGIN_API_VERSION 2

/*
  This force mysqlnd to do a single (or more depending on amount of data)
  non-blocking read() calls before sending a command to the server. Useful
  for debugging, if previous function hasn't consumed all the output sent
  to it - like stmt_send_long_data() error because the data was larger that
  max_allowed_packet_size, and COM_STMT_SEND_LONG_DATA by protocol doesn't
  use response packets, thus letting the next command to fail miserably, if
  the connector implementor is not aware of this deficiency. Should be off
  on production systems, if of course measured performance degradation is not
  minimal.
*/
#if defined(A0) && PHP_DEBUG
#define MYSQLND_DO_WIRE_CHECK_BEFORE_COMMAND 1
#endif

#if PHP_DEBUG
#define MYSQLND_DBG_ENABLED 1
#else
#define MYSQLND_DBG_ENABLED 0
#endif

#define MYSQLND_CHARSETS_SANITY_CHECK 0

#ifdef ZTS
#include "TSRM.h"
#endif

#include "mysqlnd_portability.h"
#include "mysqlnd_enum_n_def.h"
#include "mysqlnd_structs.h"

#define MYSQLND_STR_W_LEN(str)  str, (sizeof(str) - 1)

/* Library related */
PHPAPI void mysqlnd_library_init(void);
PHPAPI void mysqlnd_library_end(void);

PHPAPI unsigned int mysqlnd_plugin_register(void);
PHPAPI unsigned int mysqlnd_plugin_register_ex(struct st_mysqlnd_plugin_header * plugin);
PHPAPI unsigned int mysqlnd_plugin_count(void);
PHPAPI void * mysqlnd_plugin_find(const char * const name);

PHPAPI void mysqlnd_plugin_apply_with_argument(apply_func_arg_t apply_func, void * argument);

#define mysqlnd_restart_psession(conn)	((conn)->data)->m->restart_psession((conn)->data)
#define mysqlnd_end_psession(conn)		((conn)->data)->m->end_psession((conn)->data)
PHPAPI void mysqlnd_minfo_print_hash(zval *values);
#define mysqlnd_thread_safe()	true

PHPAPI const MYSQLND_CHARSET * mysqlnd_find_charset_nr(const unsigned int charsetno);
PHPAPI const MYSQLND_CHARSET * mysqlnd_find_charset_name(const char * const charsetname);


/* Connect */
#define mysqlnd_init(flags, persistent)		mysqlnd_connection_init((flags), (persistent), NULL /*use default factory*/)
#define mysqlnd_connect(conn, host, user, pass, pass_len, db, db_len, port, socket, mysql_flags, client_api_flags) \
			mysqlnd_connection_connect((conn), (host), (user), (pass), (pass_len), (db), (db_len), (port), (socket), (mysql_flags), (client_api_flags))

PHPAPI MYSQLND * mysqlnd_connection_init(const size_t client_flags, const bool persistent, MYSQLND_CLASS_METHODS_TYPE(mysqlnd_object_factory) *object_factory);
PHPAPI MYSQLND * mysqlnd_connection_connect(MYSQLND * conn,
											const char * const host,
											const char * const user,
											const char * const passwd, unsigned int passwd_len,
											const char * const db, unsigned int db_len,
											unsigned int port,
											const char * const socket_or_pipe,
											unsigned int mysql_flags,
											unsigned int client_api_flags
										);

#define mysqlnd_change_user(conn, user, passwd, db, silent)					((conn)->data)->m->change_user((conn)->data, (user), (passwd), (db), (silent), strlen((passwd)))
#define mysqlnd_change_user_ex(conn, user, passwd, db, silent, passwd_len)	((conn)->data)->m->change_user((conn)->data, (user), (passwd), (db), (silent), (passwd_len))

PHPAPI void mysqlnd_debug(const char *mode);

/* Query */
#define mysqlnd_fetch_into(result, flags, ret_val)	(result)->m.fetch_into((result), (flags), (ret_val) ZEND_FILE_LINE_CC)
#define mysqlnd_fetch_row_c(result)						(result)->m.fetch_row_c((result))
#define mysqlnd_fetch_row_zval(result, row_ptr, fetched) \
	(result)->m.fetch_row((result), (row_ptr), 0, (fetched))
#define mysqlnd_get_connection_stats(conn, values)		((conn)->data)->m->get_statistics((conn)->data,  (values) ZEND_FILE_LINE_CC)
#define mysqlnd_get_client_stats(values)				_mysqlnd_get_client_stats(mysqlnd_global_stats, (values) ZEND_FILE_LINE_CC)

#define mysqlnd_close(conn,is_forced)					(conn)->m->close((conn), (is_forced))
#define mysqlnd_query(conn, query_str, query_len)		((conn)->data)->m->query((conn)->data, (query_str), (query_len))
#define mysqlnd_async_query(conn, query_str, query_len)	((conn)->data)->m->send_query((conn)->data, (query_str), (query_len), NULL, NULL)
#define mysqlnd_reap_async_query(conn)					((conn)->data)->m->reap_query((conn)->data)

PHPAPI enum_func_status mysqlnd_poll(MYSQLND **r_array, MYSQLND **e_array, MYSQLND ***dont_poll, long sec, long usec, int * desc_num);

#define mysqlnd_use_result(conn)		((conn)->data)->m->use_result((conn)->data)
#define mysqlnd_store_result(conn)		((conn)->data)->m->store_result((conn)->data)
#define mysqlnd_next_result(conn)		((conn)->data)->m->next_result((conn)->data)
#define mysqlnd_more_results(conn)		((conn)->data)->m->more_results((conn)->data)
#define mysqlnd_free_result(r,e_or_i)	((MYSQLND_RES*)r)->m.free_result(((MYSQLND_RES*)(r)), (e_or_i))
#define mysqlnd_data_seek(result, row)	(result)->m.seek_data((result), (row))

/* Errors */
#define mysqlnd_errno(conn)				((conn)->data)->m->get_error_no((conn)->data)
#define mysqlnd_error(conn)				((conn)->data)->m->get_error_str((conn)->data)
#define mysqlnd_sqlstate(conn)			((conn)->data)->m->get_sqlstate((conn)->data)

/* Charset */
#define mysqlnd_character_set_name(conn) ((conn)->data)->m->charset_name((conn)->data)

/* Simple metadata */
#define mysqlnd_field_count(conn)		((conn)->data)->m->get_field_count((conn)->data)
#define mysqlnd_insert_id(conn)			((conn)->data)->m->get_last_insert_id((conn)->data)
#define mysqlnd_affected_rows(conn)		((conn)->data)->m->get_affected_rows((conn)->data)
#define mysqlnd_warning_count(conn)		((conn)->data)->m->get_warning_count((conn)->data)
#define mysqlnd_info(conn)				((conn)->data)->m->get_last_message((conn)->data)
#define mysqlnd_get_server_info(conn)	((conn)->data)->m->get_server_information((conn)->data)
#define mysqlnd_get_server_version(conn) ((conn)->data)->m->get_server_version((conn)->data)
#define mysqlnd_get_host_info(conn)		((conn)->data)->m->get_host_information((conn)->data)
#define mysqlnd_get_proto_info(conn)	((conn)->data)->m->get_protocol_information((conn)->data)
#define mysqlnd_thread_id(conn)			((conn)->data)->m->get_thread_id((conn)->data)
#define mysqlnd_get_server_status(conn)	((conn)->data)->m->get_server_status((conn)->data)

#define mysqlnd_num_rows(result)		(result)->m.num_rows((result))
#define mysqlnd_num_fields(result)		(result)->m.num_fields((result))

#define mysqlnd_fetch_lengths(result)	(result)->m.fetch_lengths((result))

#define mysqlnd_field_seek(result, ofs)			(result)->m.seek_field((result), (ofs))
#define mysqlnd_field_tell(result)				(result)->m.field_tell((result))
#define mysqlnd_fetch_field(result)				(result)->m.fetch_field((result))
#define mysqlnd_fetch_field_direct(result,fnr)	(result)->m.fetch_field_direct((result), (fnr))
#define mysqlnd_fetch_fields(result)			(result)->m.fetch_fields((result))

/* mysqlnd metadata */
PHPAPI const char *	mysqlnd_get_client_info(void);
PHPAPI unsigned long mysqlnd_get_client_version(void);

#define mysqlnd_ssl_set(conn, key, cert, ca, capath, cipher) ((conn)->data)->m->ssl_set((conn)->data, (key), (cert), (ca), (capath), (cipher))

/* PS */
#define mysqlnd_stmt_insert_id(stmt)		(stmt)->m->get_last_insert_id((stmt))
#define mysqlnd_stmt_affected_rows(stmt)	(stmt)->m->get_affected_rows((stmt))
#define mysqlnd_stmt_num_rows(stmt)			(stmt)->m->get_num_rows((stmt))
#define mysqlnd_stmt_param_count(stmt)		(stmt)->m->get_param_count((stmt))
#define mysqlnd_stmt_field_count(stmt)		(stmt)->m->get_field_count((stmt))
#define mysqlnd_stmt_warning_count(stmt)	(stmt)->m->get_warning_count((stmt))
#define mysqlnd_stmt_server_status(stmt)	(stmt)->m->get_server_status((stmt))
#define mysqlnd_stmt_errno(stmt)			(stmt)->m->get_error_no((stmt))
#define mysqlnd_stmt_error(stmt)			(stmt)->m->get_error_str((stmt))
#define mysqlnd_stmt_sqlstate(stmt)			(stmt)->m->get_sqlstate((stmt))


PHPAPI void mysqlnd_efree_param_bind_dtor(MYSQLND_PARAM_BIND * param_bind);
PHPAPI void mysqlnd_efree_result_bind_dtor(MYSQLND_RESULT_BIND * result_bind);
PHPAPI void mysqlnd_free_param_bind_dtor(MYSQLND_PARAM_BIND * param_bind);
PHPAPI void mysqlnd_free_result_bind_dtor(MYSQLND_RESULT_BIND * result_bind);


/* LOAD DATA LOCAL */
PHPAPI void mysqlnd_local_infile_default(MYSQLND_CONN_DATA * conn);

/* Simple commands */
#define mysqlnd_autocommit(conn, mode)		((conn)->data)->m->set_autocommit((conn)->data, (mode))
#define mysqlnd_begin_transaction(conn,flags,name) ((conn)->data)->m->tx_begin((conn)->data, (flags), (name))
#define mysqlnd_commit(conn, flags, name)	((conn)->data)->m->tx_commit_or_rollback((conn)->data, true, (flags), (name))
#define mysqlnd_rollback(conn, flags, name)	((conn)->data)->m->tx_commit_or_rollback((conn)->data, false, (flags), (name))
#define mysqlnd_savepoint(conn, name)		((conn)->data)->m->tx_savepoint((conn)->data, (name))
#define mysqlnd_release_savepoint(conn, name) ((conn)->data)->m->tx_savepoint_release((conn)->data, (name))
#define mysqlnd_list_dbs(conn, wild)		((conn)->data)->m->list_method((conn)->data, wild? "SHOW DATABASES LIKE %s":"SHOW DATABASES", (wild), NULL)
#define mysqlnd_list_processes(conn)		((conn)->data)->m->list_method((conn)->data, "SHOW PROCESSLIST", NULL, NULL)
#define mysqlnd_list_tables(conn, wild)		((conn)->data)->m->list_method((conn)->data, wild? "SHOW TABLES LIKE %s":"SHOW TABLES", (wild), NULL)
#define mysqlnd_dump_debug_info(conn)		((conn)->data)->m->server_dump_debug_information((conn)->data)
#define mysqlnd_select_db(conn, db, db_len)	((conn)->data)->m->select_db((conn)->data, (db), (db_len))
#define mysqlnd_ping(conn)					((conn)->data)->m->ping((conn)->data)
#define mysqlnd_kill(conn, pid)				((conn)->data)->m->kill_connection((conn)->data, (pid))
#define mysqlnd_refresh(conn, options)		((conn)->data)->m->refresh_server((conn)->data, (options))
#define mysqlnd_set_character_set(conn, cs)	((conn)->data)->m->set_charset((conn)->data, (cs))
#define mysqlnd_stat(conn, msg)				((conn)->data)->m->get_server_statistics(((conn)->data), (msg))
#define mysqlnd_options(conn, opt, value)	((conn)->data)->m->set_client_option((conn)->data, (opt), (value))
#define mysqlnd_options4(conn, opt, k, v)	((conn)->data)->m->set_client_option_2d((conn)->data, (opt), (k), (v))
#define mysqlnd_set_server_option(conn, op)	((conn)->data)->m->set_server_option((conn)->data, (op))

/* Escaping */
#define mysqlnd_real_escape_string(conn, newstr, escapestr, escapestr_len) \
		((conn)->data)->m->escape_string((conn)->data, (newstr), (escapestr), (escapestr_len))
#define mysqlnd_escape_string(newstr, escapestr, escapestr_len) \
		mysqlnd_old_escape_string((newstr), (escapestr), (escapestr_len))

PHPAPI zend_ulong mysqlnd_old_escape_string(char * newstr, const char * escapestr, size_t escapestr_len);


/* PS */
#define mysqlnd_stmt_init(conn)						((conn)->data)->m->stmt_init(((conn)->data))
#define mysqlnd_stmt_store_result(stmt)				(!mysqlnd_stmt_field_count((stmt)) ? PASS:((stmt)->m->store_result((stmt))? PASS:FAIL))
#define mysqlnd_stmt_get_result(stmt)				(stmt)->m->get_result((stmt))
#define mysqlnd_stmt_more_results(stmt)				(stmt)->m->more_results((stmt))
#define mysqlnd_stmt_next_result(stmt)				(stmt)->m->next_result((stmt))
#define mysqlnd_stmt_data_seek(stmt, row)			(stmt)->m->seek_data((stmt), (row))
#define mysqlnd_stmt_prepare(stmt, q, qlen)			(stmt)->m->prepare((stmt), (q), (qlen))
#define mysqlnd_stmt_execute(stmt) 					(stmt)->m->execute((stmt))
#define mysqlnd_stmt_send_long_data(stmt,p,d,l) 	(stmt)->m->send_long_data((stmt), (p), (d), (l))
#define mysqlnd_stmt_alloc_param_bind(stmt)			(stmt)->m->alloc_parameter_bind((stmt))
#define mysqlnd_stmt_free_param_bind(stmt,bind)		(stmt)->m->free_parameter_bind((stmt), (bind))
#define mysqlnd_stmt_bind_param(stmt,bind)			(stmt)->m->bind_parameters((stmt), (bind))
#define mysqlnd_stmt_bind_one_param(stmt,n,z,t)		(stmt)->m->bind_one_parameter((stmt), (n), (z), (t))
#define mysqlnd_stmt_refresh_bind_param(s)			(s)->m->refresh_bind_param((s))
#define mysqlnd_stmt_alloc_result_bind(stmt)		(stmt)->m->alloc_result_bind((stmt))
#define mysqlnd_stmt_free_result_bind(stmt,bind)	(stmt)->m->free_result_bind((stmt), (bind))
#define mysqlnd_stmt_bind_result(stmt,bind)			(stmt)->m->bind_result((stmt), (bind))
#define mysqlnd_stmt_bind_one_result(s,no)			(s)->m->bind_one_result((s), (no))
#define mysqlnd_stmt_result_metadata(stmt)			(stmt)->m->get_result_metadata((stmt))

#define	mysqlnd_stmt_free_result(stmt)				(stmt)->m->free_result((stmt))
#define	mysqlnd_stmt_close(stmt, implicit)			(stmt)->m->dtor((stmt), (implicit))
#define	mysqlnd_stmt_reset(stmt)					(stmt)->m->reset((stmt))
#define	mysqlnd_stmt_flush(stmt)					(stmt)->m->flush((stmt))


#define mysqlnd_stmt_attr_get(stmt, attr, value)	(stmt)->m->get_attribute((stmt), (attr), (value))
#define mysqlnd_stmt_attr_set(stmt, attr, value)	(stmt)->m->set_attribute((stmt), (attr), (value))

#define mysqlnd_stmt_fetch(stmt, fetched)	(stmt)->m->fetch((stmt), (fetched))


/* Performance statistics */
PHPAPI extern MYSQLND_STATS * mysqlnd_global_stats;
PHPAPI extern const MYSQLND_STRING mysqlnd_stats_values_names[];
PHPAPI void			_mysqlnd_get_client_stats(MYSQLND_STATS * stats, zval *return_value ZEND_FILE_LINE_DC);


#ifndef MYSQLND_CORE_STATISTICS_DISABLED

#define MYSQLND_INC_GLOBAL_STATISTIC(statistic) \
	MYSQLND_INC_STATISTIC(MYSQLND_G(collect_statistics), mysqlnd_global_stats, (statistic))

#define MYSQLND_DEC_GLOBAL_STATISTIC(statistic) \
	MYSQLND_DEC_STATISTIC(MYSQLND_G(collect_statistics), mysqlnd_global_stats, (statistic))

#define MYSQLND_INC_GLOBAL_STATISTIC_W_VALUE2(statistic1, value1, statistic2, value2) \
	MYSQLND_INC_STATISTIC_W_VALUE2(MYSQLND_G(collect_statistics), mysqlnd_global_stats, (statistic1), (value1), (statistic2), (value2))

#define MYSQLND_INC_CONN_STATISTIC(conn_stats, statistic) \
	MYSQLND_INC_STATISTIC(MYSQLND_G(collect_statistics), mysqlnd_global_stats, (statistic)); \
	MYSQLND_INC_STATISTIC(MYSQLND_G(collect_statistics), (conn_stats), (statistic));

#define MYSQLND_INC_CONN_STATISTIC_W_VALUE(conn_stats, statistic, value) \
	MYSQLND_INC_STATISTIC_W_VALUE(MYSQLND_G(collect_statistics), mysqlnd_global_stats, (statistic), (value)); \
	MYSQLND_INC_STATISTIC_W_VALUE(MYSQLND_G(collect_statistics), (conn_stats), (statistic), (value));

#define MYSQLND_INC_CONN_STATISTIC_W_VALUE2(conn_stats, statistic1, value1, statistic2, value2) \
	MYSQLND_INC_STATISTIC_W_VALUE2(MYSQLND_G(collect_statistics), mysqlnd_global_stats, (statistic1), (value1), (statistic2), (value2)); \
	MYSQLND_INC_STATISTIC_W_VALUE2(MYSQLND_G(collect_statistics), (conn_stats), (statistic1), (value1), (statistic2), (value2));

#define MYSQLND_INC_CONN_STATISTIC_W_VALUE3(conn_stats, statistic1, value1, statistic2, value2, statistic3, value3) \
	MYSQLND_INC_STATISTIC_W_VALUE3(MYSQLND_G(collect_statistics), mysqlnd_global_stats, (statistic1), (value1), (statistic2), (value2), (statistic3), (value3)); \
	MYSQLND_INC_STATISTIC_W_VALUE3(MYSQLND_G(collect_statistics), (conn_stats), (statistic1), (value1), (statistic2), (value2), (statistic3), (value3));

#else

#define MYSQLND_INC_GLOBAL_STATISTIC(statistic)
#define MYSQLND_DEC_GLOBAL_STATISTIC(statistic)
#define MYSQLND_INC_GLOBAL_STATISTIC_W_VALUE2(statistic1, value1, statistic2, value2)
#define MYSQLND_INC_CONN_STATISTIC(conn_stats, statistic)
#define MYSQLND_INC_CONN_STATISTIC_W_VALUE(conn_stats, statistic, value)
#define MYSQLND_INC_CONN_STATISTIC_W_VALUE2(conn_stats, statistic1, value1, statistic2, value2)
#define MYSQLND_INC_CONN_STATISTIC_W_VALUE3(conn_stats, statistic1, value1, statistic2, value2, statistic3, value3)

#endif /* MYSQLND_CORE_STATISTICS_DISABLED */


/* double check the class name to avoid naming conflicts when using these: */
#define MYSQLND_METHOD(class, method) 			mysqlnd_##class##_##method##_pub
#define MYSQLND_METHOD_PRIVATE(class, method)	mysqlnd_##class##_##method##_priv

ZEND_BEGIN_MODULE_GLOBALS(mysqlnd)
	char *			debug;	/* The actual string */
	char *			trace_alloc_settings;	/* The actual string */
	MYSQLND_DEBUG *	dbg;	/* The DBG object for standard tracing */
	MYSQLND_DEBUG *	trace_alloc;	/* The DBG object for allocation tracing */
	zend_long		net_cmd_buffer_size;
	zend_long		net_read_buffer_size;
	zend_long		log_mask;
	zend_long		net_read_timeout;
	zend_long		mempool_default_size;
	char *			sha256_server_public_key;
	bool		collect_statistics;
	bool		collect_memory_statistics;
ZEND_END_MODULE_GLOBALS(mysqlnd)

PHPAPI ZEND_EXTERN_MODULE_GLOBALS(mysqlnd)
#define MYSQLND_G(v) ZEND_MODULE_GLOBALS_ACCESSOR(mysqlnd, v)

#if defined(ZTS) && defined(COMPILE_DL_MYSQLND)
ZEND_TSRMLS_CACHE_EXTERN()
#endif


PHPAPI void mysqlnd_minfo_print_hash(zval *values);

#endif	/* MYSQLND_H */
ext/mysqlnd/mysqlnd_commands.h000064400000002261151730542270012563 0ustar00/*
  +----------------------------------------------------------------------+
  | Copyright (c) The PHP Group                                          |
  +----------------------------------------------------------------------+
  | This source file is subject to version 3.01 of the PHP license,      |
  | that is bundled with this package in the file LICENSE, and is        |
  | available through the world-wide-web at the following url:           |
  | https://www.php.net/license/3_01.txt                                 |
  | If you did not receive a copy of the PHP license and are unable to   |
  | obtain it through the world-wide-web, please send a note to          |
  | license@php.net so we can mail you a copy immediately.               |
  +----------------------------------------------------------------------+
  | Authors: Andrey Hristov <andrey@php.net>                             |
  |          Ulf Wendel <uw@php.net>                                     |
  +----------------------------------------------------------------------+
*/

#ifndef MYSQLND_COMMANDS_H
#define MYSQLND_COMMANDS_H

//extern func_mysqlnd__run_command mysqlnd_run_command;

#endif /* MYSQLND_COMMANDS_H */
ext/mysqlnd/mysqlnd_charset.h000064400000004273151730542270012420 0ustar00/*
  +----------------------------------------------------------------------+
  | Copyright (c) The PHP Group                                          |
  +----------------------------------------------------------------------+
  | This source file is subject to version 3.01 of the PHP license,      |
  | that is bundled with this package in the file LICENSE, and is        |
  | available through the world-wide-web at the following url:           |
  | https://www.php.net/license/3_01.txt                                 |
  | If you did not receive a copy of the PHP license and are unable to   |
  | obtain it through the world-wide-web, please send a note to          |
  | license@php.net so we can mail you a copy immediately.               |
  +----------------------------------------------------------------------+
  | Authors: Andrey Hristov <andrey@php.net>                             |
  |          Ulf Wendel <uw@php.net>                                     |
  |          Georg Richter <georg@php.net>                               |
  +----------------------------------------------------------------------+
*/

#ifndef MYSQLND_CHARSET_H
#define MYSQLND_CHARSET_H

#define MYSQLND_UTF8_MB3_DEFAULT_ID 33
#define MYSQLND_UTF8_MB4_DEFAULT_ID 45

PHPAPI zend_ulong mysqlnd_cset_escape_quotes(const MYSQLND_CHARSET * const charset, char * newstr,
											 const char * escapestr, const size_t escapestr_len);

PHPAPI zend_ulong mysqlnd_cset_escape_slashes(const MYSQLND_CHARSET * const cset, char * newstr,
										 	  const char * escapestr, const size_t escapestr_len);

struct st_mysqlnd_plugin_charsets
{
	const struct st_mysqlnd_plugin_header plugin_header;
	struct
	{
		const MYSQLND_CHARSET * (*const find_charset_by_nr)(unsigned int charsetnr);
		const MYSQLND_CHARSET * (*const find_charset_by_name)(const char * const name);
		zend_ulong 			(*const escape_quotes)(const MYSQLND_CHARSET * const cset, char * newstr, const char * escapestr, const size_t escapestr_len);
		zend_ulong			(*const escape_slashes)(const MYSQLND_CHARSET * const cset, char * newstr, const char * escapestr, const size_t escapestr_len);
	} methods;
};

void mysqlnd_charsets_plugin_register(void);

#endif /* MYSQLND_CHARSET_H */
ext/mysqlnd/mysqlnd_debug.h000064400000023326151730542300012047 0ustar00/*
  +----------------------------------------------------------------------+
  | Copyright (c) The PHP Group                                          |
  +----------------------------------------------------------------------+
  | This source file is subject to version 3.01 of the PHP license,      |
  | that is bundled with this package in the file LICENSE, and is        |
  | available through the world-wide-web at the following url:           |
  | https://www.php.net/license/3_01.txt                                 |
  | If you did not receive a copy of the PHP license and are unable to   |
  | obtain it through the world-wide-web, please send a note to          |
  | license@php.net so we can mail you a copy immediately.               |
  +----------------------------------------------------------------------+
  | Authors: Andrey Hristov <andrey@php.net>                             |
  |          Ulf Wendel <uw@php.net>                                     |
  +----------------------------------------------------------------------+
*/

#ifndef MYSQLND_DEBUG_H
#define MYSQLND_DEBUG_H

#include "mysqlnd_alloc.h"
#include "zend_stack.h"

struct st_mysqlnd_debug_methods
{
	enum_func_status (*open)(MYSQLND_DEBUG * self, bool reopen);
	void			 (*set_mode)(MYSQLND_DEBUG * self, const char * const mode);
	enum_func_status (*log)(MYSQLND_DEBUG * self, unsigned int line, const char * const file,
							unsigned int level, const char * type, const char *message);
	enum_func_status (*log_va)(
		MYSQLND_DEBUG * self, unsigned int line, const char * const file,
		unsigned int level, const char * type, const char *format, ...)
			ZEND_ATTRIBUTE_FORMAT(printf, 6, 7);
	bool (*func_enter)(MYSQLND_DEBUG * self, unsigned int line, const char * const file,
							const char * const func_name, unsigned int func_name_len);
	enum_func_status (*func_leave)(MYSQLND_DEBUG * self, unsigned int line, const char * const file, uint64_t call_time);
	enum_func_status (*close)(MYSQLND_DEBUG * self);
	enum_func_status (*free_handle)(MYSQLND_DEBUG * self);
};


struct st_mysqlnd_debug
{
	php_stream	*stream;
	unsigned int flags;
	unsigned int nest_level_limit;
	int pid;
	char * file_name;
	zend_stack call_stack;
	zend_stack call_time_stack;
	HashTable not_filtered_functions;
	HashTable function_profiles;
	struct st_mysqlnd_debug_methods *m;
	const char ** skip_functions;
};

struct st_mysqlnd_plugin_trace_log
{
	struct st_mysqlnd_plugin_header plugin_header;
	struct
	{
		MYSQLND_DEBUG * (*trace_instance_init)(const char * skip_functions[]);
	} methods;
};

void mysqlnd_debug_trace_plugin_register(void);

PHPAPI MYSQLND_DEBUG * mysqlnd_debug_init(const char * skip_functions[]);

#define MYSQLND_DEBUG_DUMP_TIME				1
#define MYSQLND_DEBUG_DUMP_TRACE			2
#define MYSQLND_DEBUG_DUMP_PID				4
#define MYSQLND_DEBUG_DUMP_LINE				8
#define MYSQLND_DEBUG_DUMP_FILE				16
#define MYSQLND_DEBUG_DUMP_LEVEL			32
#define MYSQLND_DEBUG_APPEND				64
#define MYSQLND_DEBUG_FLUSH					128
#define MYSQLND_DEBUG_TRACE_MEMORY_CALLS	256
#define MYSQLND_DEBUG_PROFILE_CALLS			512


#if defined(__GNUC__) || defined(PHP_WIN32)
#ifdef PHP_WIN32
#include "win32/time.h"
#else
#include <sys/time.h>
#endif

#ifndef MYSQLND_PROFILING_DISABLED
#define DBG_PROFILE_TIMEVAL_TO_DOUBLE(tp)	((tp.tv_sec * 1000000LL)+ tp.tv_usec)
#define DBG_PROFILE_START_TIME()		gettimeofday(&__dbg_prof_tp, NULL); __dbg_prof_start = DBG_PROFILE_TIMEVAL_TO_DOUBLE(__dbg_prof_tp);
#define DBG_PROFILE_END_TIME(duration)	gettimeofday(&__dbg_prof_tp, NULL); (duration) = (DBG_PROFILE_TIMEVAL_TO_DOUBLE(__dbg_prof_tp) - __dbg_prof_start);
#else
#define DBG_PROFILE_TIMEVAL_TO_DOUBLE(tp)
#define DBG_PROFILE_START_TIME()
#define DBG_PROFILE_END_TIME(duration)
#endif

#define DBG_INF_EX(dbg_obj, msg)		do { if (dbg_skip_trace == FALSE && (dbg_obj)) (dbg_obj)->m->log((dbg_obj), __LINE__, __FILE__, -1, "info : ", (msg)); } while (0)
#define DBG_ERR_EX(dbg_obj, msg)		do { if (dbg_skip_trace == FALSE && (dbg_obj)) (dbg_obj)->m->log((dbg_obj), __LINE__, __FILE__, -1, "error: ", (msg)); } while (0)
#define DBG_INF_FMT_EX(dbg_obj, ...)	do { if (dbg_skip_trace == FALSE && (dbg_obj)) (dbg_obj)->m->log_va((dbg_obj), __LINE__, __FILE__, -1, "info : ", __VA_ARGS__); } while (0)
#define DBG_ERR_FMT_EX(dbg_obj, ...)	do { if (dbg_skip_trace == FALSE && (dbg_obj)) (dbg_obj)->m->log_va((dbg_obj), __LINE__, __FILE__, -1, "error: ", __VA_ARGS__); } while (0)

#define DBG_BLOCK_ENTER_EX(dbg_obj, block_name) DBG_BLOCK_ENTER_EX2((dbg_obj), (MYSQLND_DEBUG *) NULL, (block_name))
#define DBG_BLOCK_LEAVE_EX(dbg_obj)				DBG_BLOCK_LEAVE_EX2((dbg_obj), (MYSQLND_DEBUG *) NULL)

#define DBG_BLOCK_ENTER_EX2(dbg_obj1, dbg_obj2, block_name) \
		{ \
			DBG_ENTER_EX2((dbg_obj1), (dbg_obj2), (block_name));

#define DBG_BLOCK_LEAVE_EX2(dbg_obj1, dbg_obj2) \
			DBG_LEAVE_EX2((dbg_obj1), (dbg_obj2), ;) \
		} \


#define DBG_ENTER_EX(dbg_obj, func_name)	DBG_ENTER_EX2((dbg_obj), (MYSQLND_DEBUG *) NULL, (func_name))
#define DBG_LEAVE_EX(dbg_obj, leave)		DBG_LEAVE_EX2((dbg_obj), (MYSQLND_DEBUG *) NULL, leave)

#define DBG_ENTER_EX2(dbg_obj1, dbg_obj2, func_name) \
					struct timeval __dbg_prof_tp = {0}; \
					uint64_t __dbg_prof_start = 0; /* initialization is needed */ \
					bool dbg_skip_trace = TRUE; \
					((void)__dbg_prof_start); \
					if ((dbg_obj1)) { \
						dbg_skip_trace = !(dbg_obj1)->m->func_enter((dbg_obj1), __LINE__, __FILE__, func_name, strlen(func_name)); \
					} \
					if ((dbg_obj2)) { \
						dbg_skip_trace |= !(dbg_obj2)->m->func_enter((dbg_obj2), __LINE__, __FILE__, func_name, strlen(func_name)); \
					} \
					if (dbg_skip_trace) { \
						/* EMPTY */ ; /* shut compiler's mouth */	\
					} \
					do { \
						if (((dbg_obj1) && ((dbg_obj1)->flags & MYSQLND_DEBUG_PROFILE_CALLS)) || \
							((dbg_obj2) && ((dbg_obj2)->flags & MYSQLND_DEBUG_PROFILE_CALLS))) \
						{ \
							DBG_PROFILE_START_TIME(); \
						} \
					} while (0);

#define DBG_LEAVE_EX2(dbg_obj1, dbg_obj2, leave) \
			do { \
				uint64_t this_call_duration = 0; \
				if (((dbg_obj1) && ((dbg_obj1)->flags & MYSQLND_DEBUG_PROFILE_CALLS)) || \
					((dbg_obj2) && ((dbg_obj2)->flags & MYSQLND_DEBUG_PROFILE_CALLS))) \
				{ \
					DBG_PROFILE_END_TIME(this_call_duration); \
				} \
				if ((dbg_obj1)) { \
					(dbg_obj1)->m->func_leave((dbg_obj1), __LINE__, __FILE__, this_call_duration); \
				} \
				if ((dbg_obj2)) { \
					(dbg_obj2)->m->func_leave((dbg_obj2), __LINE__, __FILE__, this_call_duration); \
				} \
				leave \
			} while (0);


#define DBG_RETURN_EX(dbg_obj, value)		DBG_LEAVE_EX((dbg_obj), return (value);)
#define DBG_VOID_RETURN_EX(dbg_obj)			DBG_LEAVE_EX((dbg_obj), return;)

#define DBG_RETURN_EX2(dbg_obj1, dbg_obj2, value)	DBG_LEAVE_EX2((dbg_obj1), (dbg_obj2), return (value);)
#define DBG_VOID_RETURN_EX2(dbg_obj1, dbg_obj2)		DBG_LEAVE_EX2((dbg_obj1), (dbg_obj2), return;)



#else  /* defined(__GNUC__) || defined(PHP_WIN32) */
static inline void DBG_INF_EX(MYSQLND_DEBUG * dbg_obj, const char * const msg) {}
static inline void DBG_ERR_EX(MYSQLND_DEBUG * dbg_obj, const char * const msg) {}
static inline void DBG_INF_FMT_EX(MYSQLND_DEBUG * dbg_obj, ...) {}
static inline void DBG_ERR_FMT_EX(MYSQLND_DEBUG * dbg_obj, ...) {}
static inline void DBG_ENTER_EX(MYSQLND_DEBUG * dbg_obj, const char * const func_name) {}
#define DBG_BLOCK_ENTER(bname)			{
#define DBG_RETURN_EX(dbg_obj, value)	return (value)
#define DBG_VOID_RETURN_EX(dbg_obj)		return
#define DBG_BLOCK_LEAVE_EX(dbg_obj)		}

#endif

#if MYSQLND_DBG_ENABLED == 1

#define DBG_INF(msg)		DBG_INF_EX(MYSQLND_G(dbg), (msg))
#define DBG_ERR(msg)		DBG_ERR_EX(MYSQLND_G(dbg), (msg))
#define DBG_INF_FMT(...)	DBG_INF_FMT_EX(MYSQLND_G(dbg), __VA_ARGS__)
#define DBG_ERR_FMT(...)	DBG_ERR_FMT_EX(MYSQLND_G(dbg), __VA_ARGS__)

#define DBG_ENTER(func_name)	DBG_ENTER_EX(MYSQLND_G(dbg), (func_name))
#define DBG_BLOCK_ENTER(bname)	DBG_BLOCK_ENTER_EX(MYSQLND_G(dbg), (bname))
#define DBG_RETURN(value)		DBG_RETURN_EX(MYSQLND_G(dbg), (value))
#define DBG_VOID_RETURN			DBG_VOID_RETURN_EX(MYSQLND_G(dbg))
#define DBG_BLOCK_LEAVE			DBG_BLOCK_LEAVE_EX(MYSQLND_G(dbg))


#define TRACE_ALLOC_INF(msg)			DBG_INF_EX(MYSQLND_G(trace_alloc), (msg))
#define TRACE_ALLOC_ERR(msg)			DBG_ERR_EX(MYSQLND_G(trace_alloc), (msg))
#define TRACE_ALLOC_INF_FMT(...)		DBG_INF_FMT_EX(MYSQLND_G(trace_alloc), __VA_ARGS__)
#define TRACE_ALLOC_ERR_FMT(...)		DBG_ERR_FMT_EX(MYSQLND_G(trace_alloc), __VA_ARGS__)

#define TRACE_ALLOC_ENTER(func_name)	DBG_ENTER_EX2(MYSQLND_G(dbg), MYSQLND_G(trace_alloc), (func_name))
#define TRACE_ALLOC_BLOCK_ENTER(bname)	DBG_BLOCK_ENTER_EX2(MYSQLND_G(dbg), MYSQLND_G(trace_alloc), (bname))
#define TRACE_ALLOC_RETURN(value)		DBG_RETURN_EX2(MYSQLND_G(dbg), MYSQLND_G(trace_alloc), (value))
#define TRACE_ALLOC_VOID_RETURN			DBG_VOID_RETURN_EX2(MYSQLND_G(dbg), MYSQLND_G(trace_alloc))
#define TRACE_ALLOC_BLOCK_LEAVE			DBG_BLOCK_LEAVE_EX2(MYSQLND_G(dbg), MYSQLND_G(trace_alloc))

#elif MYSQLND_DBG_ENABLED == 0

static inline void DBG_INF(const char * const msg) {}
static inline void DBG_ERR(const char * const msg) {}
static inline void DBG_INF_FMT(const char * const format, ...) {}
static inline void DBG_ERR_FMT(const char * const format, ...) {}
static inline void DBG_ENTER(const char * const func_name) {}
#define DBG_BLOCK_ENTER(bname)	{
#define DBG_RETURN(value)			return (value)
#define DBG_VOID_RETURN				return
#define DBG_BLOCK_LEAVE			}


static inline void TRACE_ALLOC_INF(const char * const msg) {}
static inline void TRACE_ALLOC_ERR(const char * const msg) {}
static inline void TRACE_ALLOC_INF_FMT(const char * const format, ...) {}
static inline void TRACE_ALLOC_ERR_FMT(const char * const format, ...) {}
static inline void TRACE_ALLOC_ENTER(const char * const func_name) {}
#define TRACE_ALLOC_BLOCK_ENTER(bname)	{
#define TRACE_ALLOC_RETURN(value)			return (value)
#define TRACE_ALLOC_VOID_RETURN				return
#define TRACE_ALLOC_BLOCK_LEAVE			}

#endif

#endif /* MYSQLND_DEBUG_H */
ext/mysqlnd/mysql_float_to_double.h000064400000003530151730542300013573 0ustar00/*
  +----------------------------------------------------------------------+
  | Copyright (c) The PHP Group                                          |
  +----------------------------------------------------------------------+
  | This source file is subject to version 3.01 of the PHP license,      |
  | that is bundled with this package in the file LICENSE, and is        |
  | available through the world-wide-web at the following url:           |
  | https://www.php.net/license/3_01.txt                                 |
  | If you did not receive a copy of the PHP license and are unable to   |
  | obtain it through the world-wide-web, please send a note to          |
  | license@php.net so we can mail you a copy immediately.               |
  +----------------------------------------------------------------------+
  | Authors: Keyur Govande <kgovande@gmail.com>                          |
  +----------------------------------------------------------------------+
*/

#ifndef MYSQL_FLOAT_TO_DOUBLE_H
#define MYSQL_FLOAT_TO_DOUBLE_H

#include "main/php.h"
#include <float.h>
#include "main/snprintf.h"

#define MAX_CHAR_BUF_LEN 255

#ifndef FLT_DIG
# define FLT_DIG 6
#endif

/*
 * Convert from a 4-byte float to a 8-byte decimal by first converting
 * the float to a string (ignoring localization), and then the string to a double.
 * The decimals argument specifies the precision of the output. If decimals
 * is less than zero, then a gcvt(3) like logic is used with the significant
 * digits set to FLT_DIG i.e. 6.
 */
static inline double mysql_float_to_double(float fp4, int decimals) {
	char num_buf[MAX_CHAR_BUF_LEN]; /* Over allocated */

	if (decimals < 0) {
		zend_gcvt(fp4, FLT_DIG, '.', 'e', num_buf);
	} else {
		snprintf(num_buf, MAX_CHAR_BUF_LEN, "%.*F", decimals, fp4);
	}

	return zend_strtod(num_buf, NULL);
}

#endif /* MYSQL_FLOAT_TO_DOUBLE_H */
ext/mysqlnd/mysqlnd_wireprotocol.h000064400000022737151730542300013516 0ustar00/*
  +----------------------------------------------------------------------+
  | Copyright (c) The PHP Group                                          |
  +----------------------------------------------------------------------+
  | This source file is subject to version 3.01 of the PHP license,      |
  | that is bundled with this package in the file LICENSE, and is        |
  | available through the world-wide-web at the following url:           |
  | https://www.php.net/license/3_01.txt                                 |
  | If you did not receive a copy of the PHP license and are unable to   |
  | obtain it through the world-wide-web, please send a note to          |
  | license@php.net so we can mail you a copy immediately.               |
  +----------------------------------------------------------------------+
  | Authors: Andrey Hristov <andrey@php.net>                             |
  |          Ulf Wendel <uw@php.net>                                     |
  +----------------------------------------------------------------------+
*/

#ifndef MYSQLND_WIREPROTOCOL_H
#define MYSQLND_WIREPROTOCOL_H

#define MYSQLND_HEADER_SIZE 4
#define COMPRESSED_HEADER_SIZE 3

#define MYSQLND_NULL_LENGTH	(zend_ulong) ~0

/* Used in mysqlnd_debug.c */
PHPAPI extern const char mysqlnd_read_header_name[];
PHPAPI extern const char mysqlnd_read_body_name[];


/* Packet handling */
#define PACKET_WRITE(conn, packet)	((packet)->header.m->write_to_net((conn), (packet)))
#define PACKET_READ(conn, packet)	((packet)->header.m->read_from_net((conn), (packet)))
#define PACKET_FREE(packet) \
	do { \
		DBG_INF_FMT("PACKET_FREE(%p)", packet); \
		if ((packet)->header.m->free_mem) { \
			((packet)->header.m->free_mem((packet))); \
		} \
	} while (0);

PHPAPI extern const char * const mysqlnd_command_to_text[COM_END];

/* Low-level extraction functionality */
typedef struct st_mysqlnd_packet_methods {
	enum_func_status	(*read_from_net)(MYSQLND_CONN_DATA * conn, void * packet);
	size_t				(*write_to_net)(MYSQLND_CONN_DATA * conn, void * packet);
	void				(*free_mem)(void *packet);
} mysqlnd_packet_methods;


typedef struct st_mysqlnd_packet_header {
	size_t		size;
	zend_uchar	packet_no;

	mysqlnd_packet_methods *m;
} MYSQLND_PACKET_HEADER;

/* Server greets the client */
typedef struct st_mysqlnd_packet_greet {
	MYSQLND_PACKET_HEADER		header;
	uint8_t		protocol_version;
	char		*server_version;
	uint32_t	thread_id;
	char		intern_auth_plugin_data[SCRAMBLE_LENGTH];
	MYSQLND_STRING authentication_plugin_data;
	/* 1 byte pad */
	uint32_t	server_capabilities;
	uint8_t		charset_no;
	uint16_t	server_status;
	/* 13 byte pad, in 5.5 first 2 bytes are more capabilities followed by 1 byte scramble_length */
	bool	pre41;
	/* If error packet, we use these */
	char 		error[MYSQLND_ERRMSG_SIZE+1];
	char 		sqlstate[MYSQLND_SQLSTATE_LENGTH + 1];
	unsigned int	error_no;
	char		*auth_protocol;
} MYSQLND_PACKET_GREET;


/* Client authenticates */
typedef struct st_mysqlnd_packet_auth {
	MYSQLND_PACKET_HEADER		header;
	const char	*user;
	const zend_uchar	*auth_data;
	size_t		auth_data_len;
	const char	*db;
	const char	*auth_plugin_name;
	uint32_t	client_flags;
	uint32_t	max_packet_size;
	uint8_t		charset_no;
	/* Here the packet ends. This is user supplied data */
	bool	send_auth_data;
	bool	is_change_user_packet;
	bool	silent;
	HashTable	*connect_attr;
	size_t		db_len;
} MYSQLND_PACKET_AUTH;

/* Auth response packet */
typedef struct st_mysqlnd_packet_auth_response {
	MYSQLND_PACKET_HEADER		header;
	uint8_t		response_code;
	uint64_t	affected_rows;
	uint64_t	last_insert_id;
	uint16_t	server_status;
	uint16_t	warning_count;
	char		*message;
	size_t		message_len;
	/* If error packet, we use these */
	char 		error[MYSQLND_ERRMSG_SIZE+1];
	char 		sqlstate[MYSQLND_SQLSTATE_LENGTH + 1];
	unsigned int 	error_no;

	char		*new_auth_protocol;
	size_t		new_auth_protocol_len;
	zend_uchar	*new_auth_protocol_data;
	size_t		new_auth_protocol_data_len;
} MYSQLND_PACKET_AUTH_RESPONSE;


/* Auth response packet */
typedef struct st_mysqlnd_packet_change_auth_response {
	MYSQLND_PACKET_HEADER		header;
	const zend_uchar	*auth_data;
	size_t				auth_data_len;
} MYSQLND_PACKET_CHANGE_AUTH_RESPONSE;


/* OK packet */
typedef struct st_mysqlnd_packet_ok {
	MYSQLND_PACKET_HEADER		header;
	uint8_t		field_count; /* always 0x0 */
	uint64_t	affected_rows;
	uint64_t	last_insert_id;
	uint16_t	server_status;
	uint16_t	warning_count;
	char		*message;
	size_t		message_len;
	/* If error packet, we use these */
	char 		error[MYSQLND_ERRMSG_SIZE+1];
	char 		sqlstate[MYSQLND_SQLSTATE_LENGTH + 1];
	unsigned int 	error_no;
} MYSQLND_PACKET_OK;


/* Command packet */
typedef struct st_mysqlnd_packet_command {
	MYSQLND_PACKET_HEADER			header;
	enum php_mysqlnd_server_command	command;
	MYSQLND_CSTRING	argument;
} MYSQLND_PACKET_COMMAND;


/* EOF packet */
typedef struct st_mysqlnd_packet_eof {
	MYSQLND_PACKET_HEADER		header;
	uint8_t		field_count; /* 0xFE */
	uint16_t	warning_count;
	uint16_t	server_status;
	/* If error packet, we use these */
	char 		error[MYSQLND_ERRMSG_SIZE+1];
	char 		sqlstate[MYSQLND_SQLSTATE_LENGTH + 1];
	unsigned int 	error_no;
} MYSQLND_PACKET_EOF;
/* EOF packet */


/* Result Set header*/
typedef struct st_mysqlnd_packet_rset_header {
	MYSQLND_PACKET_HEADER header;
	/*
	  0x00 => ok
	  ~0   => LOAD DATA LOCAL
	  error_no != 0 => error
	  others => result set -> Read res_field packets up to field_count
	*/
	zend_ulong		field_count;
	/*
	  These are filled if no SELECT query. For SELECT warning_count
	  and server status are in the last row packet, the EOF packet.
	*/
	uint16_t	warning_count;
	uint16_t	server_status;
	uint64_t	affected_rows;
	uint64_t	last_insert_id;
	/* This is for both LOAD DATA or info, when no result set */
	MYSQLND_STRING info_or_local_file;
	/* If error packet, we use these */
	MYSQLND_ERROR_INFO	error_info;
} MYSQLND_PACKET_RSET_HEADER;


/* Result set field packet */
typedef struct st_mysqlnd_packet_res_field {
	MYSQLND_PACKET_HEADER	header;
	MYSQLND_MEMORY_POOL		*memory_pool;
	MYSQLND_FIELD			*metadata;
	/* For table definitions, empty for result sets */
	bool				skip_parsing;

	MYSQLND_ERROR_INFO		error_info;
} MYSQLND_PACKET_RES_FIELD;


/* Row packet */
typedef struct st_mysqlnd_packet_row {
	MYSQLND_PACKET_HEADER	header;
	uint32_t	field_count;
	bool	eof;
	/*
	  These are, of course, only for SELECT in the EOF packet,
	  which is detected by this packet
	*/
	uint16_t	warning_count;
	uint16_t	server_status;

	MYSQLND_ROW_BUFFER	row_buffer;
	MYSQLND_MEMORY_POOL * result_set_memory_pool;

	bool		binary_protocol;
	MYSQLND_FIELD	*fields_metadata;

	/* If error packet, we use these */
	MYSQLND_ERROR_INFO	error_info;
} MYSQLND_PACKET_ROW;


/* Statistics packet */
typedef struct st_mysqlnd_packet_stats {
	MYSQLND_PACKET_HEADER	header;
	MYSQLND_STRING message;
} MYSQLND_PACKET_STATS;


/* COM_PREPARE response packet */
typedef struct st_mysqlnd_packet_prepare_response {
	MYSQLND_PACKET_HEADER	header;
	/* also known as field_count 0x00=OK , 0xFF=error */
	unsigned char	error_code;
	zend_ulong	stmt_id;
	unsigned int	field_count;
	unsigned int	param_count;
	unsigned int	warning_count;

	/* present in case of error */
	MYSQLND_ERROR_INFO	error_info;
} MYSQLND_PACKET_PREPARE_RESPONSE;


/* Statistics packet */
typedef struct st_mysqlnd_packet_chg_user_resp {
	MYSQLND_PACKET_HEADER	header;
	uint32_t			response_code;

	/* message_len is not part of the packet*/
	uint16_t			server_capabilities;
	/* If error packet, we use these */
	MYSQLND_ERROR_INFO	error_info;
	bool			server_asked_323_auth;

	char		*new_auth_protocol;
	size_t		new_auth_protocol_len;
	zend_uchar	*new_auth_protocol_data;
	size_t		new_auth_protocol_data_len;
} MYSQLND_PACKET_CHG_USER_RESPONSE;


/* Command packet */
typedef struct st_mysqlnd_packet_sha256_pk_request {
	MYSQLND_PACKET_HEADER			header;
} MYSQLND_PACKET_SHA256_PK_REQUEST;

typedef struct  st_mysqlnd_packet_sha256_pk_request_response {
	MYSQLND_PACKET_HEADER	header;
	zend_uchar 				*public_key;
	size_t					public_key_len;
} MYSQLND_PACKET_SHA256_PK_REQUEST_RESPONSE;

typedef struct st_mysqlnd_packet_cached_sha2_result {
	MYSQLND_PACKET_HEADER		header;
	uint8_t		response_code;
	uint8_t 	result;
	uint8_t 	request;
	zend_uchar * password;
	size_t password_len;
	/* Used for auth switch request */
	char		*new_auth_protocol;
	size_t		new_auth_protocol_len;
	zend_uchar	*new_auth_protocol_data;
	size_t		new_auth_protocol_data_len;
	/* Used for error result */
	char 		error[MYSQLND_ERRMSG_SIZE+1];
	char 		sqlstate[MYSQLND_SQLSTATE_LENGTH + 1];
	unsigned int 	error_no;
} MYSQLND_PACKET_CACHED_SHA2_RESULT;



zend_ulong		php_mysqlnd_net_field_length(const zend_uchar **packet);
zend_uchar *	php_mysqlnd_net_store_length(zend_uchar *packet, const uint64_t length);
size_t			php_mysqlnd_net_store_length_size(uint64_t length);

PHPAPI extern const char * const mysqlnd_empty_string;

enum_func_status php_mysqlnd_rowp_read_binary_protocol(MYSQLND_ROW_BUFFER * row_buffer, zval * fields,
										 unsigned int field_count, const MYSQLND_FIELD * fields_metadata,
										 bool as_int_or_float, MYSQLND_STATS * stats);


enum_func_status php_mysqlnd_rowp_read_text_protocol(MYSQLND_ROW_BUFFER * row_buffer, zval * fields,
										 unsigned int field_count, const MYSQLND_FIELD * fields_metadata,
										 bool as_int_or_float, MYSQLND_STATS * stats);


PHPAPI MYSQLND_PROTOCOL_PAYLOAD_DECODER_FACTORY * mysqlnd_protocol_payload_decoder_factory_init(MYSQLND_CONN_DATA * conn, const bool persistent);
PHPAPI void mysqlnd_protocol_payload_decoder_factory_free(MYSQLND_PROTOCOL_PAYLOAD_DECODER_FACTORY * const payload_decoder_factory);

#endif /* MYSQLND_WIREPROTOCOL_H */
ext/mysqlnd/mysqlnd_protocol_frame_codec.h000064400000002706151730542300015130 0ustar00/*
  +----------------------------------------------------------------------+
  | Copyright (c) The PHP Group                                          |
  +----------------------------------------------------------------------+
  | This source file is subject to version 3.01 of the PHP license,      |
  | that is bundled with this package in the file LICENSE, and is        |
  | available through the world-wide-web at the following url:           |
  | https://www.php.net/license/3_01.txt                                 |
  | If you did not receive a copy of the PHP license and are unable to   |
  | obtain it through the world-wide-web, please send a note to          |
  | license@php.net so we can mail you a copy immediately.               |
  +----------------------------------------------------------------------+
  | Authors: Andrey Hristov <andrey@php.net>                             |
  |          Ulf Wendel <uw@php.net>                                     |
  +----------------------------------------------------------------------+
*/

#ifndef MYSQLND_PROTOCOL_FRAME_CODEC_H
#define MYSQLND_PROTOCOL_FRAME_CODEC_H

PHPAPI MYSQLND_PFC * mysqlnd_pfc_init(const bool persistent, MYSQLND_CLASS_METHODS_TYPE(mysqlnd_object_factory) *object_factory, MYSQLND_STATS * stats, MYSQLND_ERROR_INFO * error_info);
PHPAPI void mysqlnd_pfc_free(MYSQLND_PFC * const pfc, MYSQLND_STATS * stats, MYSQLND_ERROR_INFO * error_info);

#endif /* MYSQLND_PROTOCOL_FRAME_CODEC_H */
ext/mysqlnd/mysqlnd_plugin.h000064400000002461151730542300012254 0ustar00/*
  +----------------------------------------------------------------------+
  | Copyright (c) The PHP Group                                          |
  +----------------------------------------------------------------------+
  | This source file is subject to version 3.01 of the PHP license,      |
  | that is bundled with this package in the file LICENSE, and is        |
  | available through the world-wide-web at the following url:           |
  | https://www.php.net/license/3_01.txt                                 |
  | If you did not receive a copy of the PHP license and are unable to   |
  | obtain it through the world-wide-web, please send a note to          |
  | license@php.net so we can mail you a copy immediately.               |
  +----------------------------------------------------------------------+
  | Authors: Andrey Hristov <andrey@php.net>                             |
  |          Ulf Wendel <uw@php.net>                                     |
  +----------------------------------------------------------------------+
*/

#ifndef MYSQLND_PLUGIN_H
#define MYSQLND_PLUGIN_H


void mysqlnd_plugin_subsystem_init(void);
void mysqlnd_plugin_subsystem_end(void);

void mysqlnd_register_builtin_authentication_plugins(void);

void mysqlnd_example_plugin_register(void);

#endif	/* MYSQLND_PLUGIN_H */
ext/mysqlnd/mysqlnd_alloc.h000064400000010375151730542300012053 0ustar00/*
  +----------------------------------------------------------------------+
  | Copyright (c) The PHP Group                                          |
  +----------------------------------------------------------------------+
  | This source file is subject to version 3.01 of the PHP license,      |
  | that is bundled with this package in the file LICENSE, and is        |
  | available through the world-wide-web at the following url:           |
  | https://www.php.net/license/3_01.txt                                 |
  | If you did not receive a copy of the PHP license and are unable to   |
  | obtain it through the world-wide-web, please send a note to          |
  | license@php.net so we can mail you a copy immediately.               |
  +----------------------------------------------------------------------+
  | Authors: Andrey Hristov <andrey@php.net>                             |
  |          Ulf Wendel <uw@php.net>                                     |
  +----------------------------------------------------------------------+
*/

#ifndef MYSQLND_ALLOC_H
#define MYSQLND_ALLOC_H

PHPAPI extern const char * mysqlnd_debug_std_no_trace_funcs[];

#define MYSQLND_MEM_D	ZEND_FILE_LINE_DC
#define MYSQLND_MEM_C	ZEND_FILE_LINE_CC

struct st_mysqlnd_allocator_methods
{
	void *	(*m_emalloc)(size_t size MYSQLND_MEM_D);
	void *	(*m_pemalloc)(size_t size, bool persistent MYSQLND_MEM_D);
	void *	(*m_ecalloc)(unsigned int nmemb, size_t size MYSQLND_MEM_D);
	void *	(*m_pecalloc)(unsigned int nmemb, size_t size, bool persistent MYSQLND_MEM_D);
	void *	(*m_erealloc)(void *ptr, size_t new_size MYSQLND_MEM_D);
	void *	(*m_perealloc)(void *ptr, size_t new_size, bool persistent MYSQLND_MEM_D);
	void	(*m_efree)(void *ptr MYSQLND_MEM_D);
	void	(*m_pefree)(void *ptr, bool persistent MYSQLND_MEM_D);
	char *	(*m_pememdup)(const char * const ptr, size_t size, bool persistent MYSQLND_MEM_D);
	char *	(*m_pestrndup)(const char * const ptr, size_t size, bool persistent MYSQLND_MEM_D);
	char *	(*m_pestrdup)(const char * const ptr, bool persistent MYSQLND_MEM_D);
};

PHPAPI extern struct st_mysqlnd_allocator_methods mysqlnd_allocator;

#define mnd_emalloc(size)				mysqlnd_allocator.m_emalloc((size) MYSQLND_MEM_C)
#define mnd_pemalloc(size, pers)		mysqlnd_allocator.m_pemalloc((size), (pers) MYSQLND_MEM_C)
#define mnd_ecalloc(nmemb, size)		mysqlnd_allocator.m_ecalloc((nmemb), (size) MYSQLND_MEM_C)
#define mnd_pecalloc(nmemb, size, p)	mysqlnd_allocator.m_pecalloc((nmemb), (size), (p) MYSQLND_MEM_C)
#define mnd_erealloc(ptr, new_size)		mysqlnd_allocator.m_erealloc((ptr), (new_size) MYSQLND_MEM_C)
#define mnd_perealloc(ptr, new_size, p)	mysqlnd_allocator.m_perealloc((ptr), (new_size), (p) MYSQLND_MEM_C)
#define mnd_efree(ptr)					mysqlnd_allocator.m_efree((ptr) MYSQLND_MEM_C)
#define mnd_pefree(ptr, pers)			mysqlnd_allocator.m_pefree((ptr), (pers) MYSQLND_MEM_C)
#define mnd_pememdup(ptr, size, pers)	mysqlnd_allocator.m_pememdup((ptr), (size), (pers) MYSQLND_MEM_C)
#define mnd_pestrndup(ptr, size, pers)	mysqlnd_allocator.m_pestrndup((ptr), (size), (pers) MYSQLND_MEM_C)
#define mnd_pestrdup(ptr, pers)			mysqlnd_allocator.m_pestrdup((ptr), (pers) MYSQLND_MEM_C)
#define mnd_sprintf(p, mx_len, fmt,...) spprintf((p), (mx_len), (fmt), __VA_ARGS__)
#define mnd_vsprintf(p, mx_len, fmt,ap) vspprintf((p), (mx_len), (fmt), (ap))
#define mnd_sprintf_free(p)				efree((p))

static inline MYSQLND_STRING mnd_dup_cstring(const MYSQLND_CSTRING str, const bool persistent)
{
	const MYSQLND_STRING ret = {(char*) mnd_pemalloc(str.l + 1, persistent), str.l};
	if (ret.s) {
		memcpy(ret.s, str.s, str.l);
		ret.s[str.l] = '\0';
	}
	return ret;
}

static inline MYSQLND_CSTRING mnd_str2c(const MYSQLND_STRING str)
{
	const MYSQLND_CSTRING ret = {str.s, str.l};
	return ret;
}

static inline void mysqlnd_set_string(MYSQLND_STRING *buf, const char *string, size_t len) {
	if (buf->s) {
		mnd_efree(buf->s);
		buf->s = NULL;
		buf->l = 0;
	}
	if (string) {
		buf->s = mnd_pestrndup(string, len, 0);
		buf->l = len;
	}
}

static inline void mysqlnd_set_persistent_string(MYSQLND_STRING *buf, const char *string, size_t len, bool persistent) {
	if (buf->s) {
		mnd_pefree(buf->s, persistent);
		buf->s = NULL;
		buf->l = 0;
	}
	if (string) {
		buf->s = mnd_pestrndup(string, len, persistent);
		buf->l = len;
	}
}

#endif /* MYSQLND_ALLOC_H */
ext/mysqlnd/mysqlnd_vio.h000064400000002615151730542300011554 0ustar00/*
  +----------------------------------------------------------------------+
  | Copyright (c) The PHP Group                                          |
  +----------------------------------------------------------------------+
  | This source file is subject to version 3.01 of the PHP license,      |
  | that is bundled with this package in the file LICENSE, and is        |
  | available through the world-wide-web at the following url:           |
  | https://www.php.net/license/3_01.txt                                 |
  | If you did not receive a copy of the PHP license and are unable to   |
  | obtain it through the world-wide-web, please send a note to          |
  | license@php.net so we can mail you a copy immediately.               |
  +----------------------------------------------------------------------+
  | Authors: Andrey Hristov <andrey@php.net>                             |
  |          Ulf Wendel <uw@php.net>                                     |
  +----------------------------------------------------------------------+
*/

#ifndef MYSQLND_VIO_H
#define MYSQLND_VIO_H

PHPAPI MYSQLND_VIO * mysqlnd_vio_init(bool persistent, MYSQLND_CLASS_METHODS_TYPE(mysqlnd_object_factory) *object_factory, MYSQLND_STATS * stats, MYSQLND_ERROR_INFO * error_info);
PHPAPI void mysqlnd_vio_free(MYSQLND_VIO * const vio, MYSQLND_STATS * stats, MYSQLND_ERROR_INFO * error_info);

#endif /* MYSQLND_VIO_H */
ext/mysqlnd/mysqlnd_reverse_api.h000064400000003275151730542310013267 0ustar00/*
  +----------------------------------------------------------------------+
  | Copyright (c) The PHP Group                                          |
  +----------------------------------------------------------------------+
  | This source file is subject to version 3.01 of the PHP license,      |
  | that is bundled with this package in the file LICENSE, and is        |
  | available through the world-wide-web at the following url:           |
  | https://www.php.net/license/3_01.txt                                 |
  | If you did not receive a copy of the PHP license and are unable to   |
  | obtain it through the world-wide-web, please send a note to          |
  | license@php.net so we can mail you a copy immediately.               |
  +----------------------------------------------------------------------+
  | Authors: Andrey Hristov <andrey@php.net>                             |
  |          Ulf Wendel <uw@php.net>                                     |
  |          Georg Richter <georg@php.net>                               |
  +----------------------------------------------------------------------+
*/

#ifndef MYSQLND_REVERSE_API_H
#define MYSQLND_REVERSE_API_H
typedef struct st_mysqlnd_reverse_api
{
	zend_module_entry * module;
	MYSQLND *(*conversion_cb)(zval * zv);
} MYSQLND_REVERSE_API;


PHPAPI void mysqlnd_reverse_api_init(void);
PHPAPI void mysqlnd_reverse_api_end(void);

PHPAPI HashTable * mysqlnd_reverse_api_get_api_list(void);

PHPAPI void mysqlnd_reverse_api_register_api(const MYSQLND_REVERSE_API * apiext);
PHPAPI MYSQLND * zval_to_mysqlnd(zval * zv, const unsigned int client_api_capabilities, unsigned int * save_client_api_capabilities);

#endif	/* MYSQLND_REVERSE_API_H */
ext/mysqlnd/mysqlnd_priv.h000064400000004212151730542310011733 0ustar00/*
  +----------------------------------------------------------------------+
  | Copyright (c) The PHP Group                                          |
  +----------------------------------------------------------------------+
  | This source file is subject to version 3.01 of the PHP license,      |
  | that is bundled with this package in the file LICENSE, and is        |
  | available through the world-wide-web at the following url:           |
  | https://www.php.net/license/3_01.txt                                 |
  | If you did not receive a copy of the PHP license and are unable to   |
  | obtain it through the world-wide-web, please send a note to          |
  | license@php.net so we can mail you a copy immediately.               |
  +----------------------------------------------------------------------+
  | Authors: Andrey Hristov <andrey@php.net>                             |
  |          Ulf Wendel <uw@php.net>                                     |
  +----------------------------------------------------------------------+
*/

#ifndef MYSQLND_PRIV_H
#define MYSQLND_PRIV_H
PHPAPI extern MYSQLND_CLASS_METHOD_TABLE_NAME_FORWARD(mysqlnd_object_factory);
PHPAPI extern MYSQLND_CLASS_METHOD_TABLE_NAME_FORWARD(mysqlnd_conn);
PHPAPI extern MYSQLND_CLASS_METHOD_TABLE_NAME_FORWARD(mysqlnd_conn_data);
PHPAPI extern MYSQLND_CLASS_METHOD_TABLE_NAME_FORWARD(mysqlnd_res);
PHPAPI extern MYSQLND_CLASS_METHOD_TABLE_NAME_FORWARD(mysqlnd_result_unbuffered);
PHPAPI extern MYSQLND_CLASS_METHOD_TABLE_NAME_FORWARD(mysqlnd_result_buffered);
PHPAPI extern MYSQLND_CLASS_METHOD_TABLE_NAME_FORWARD(mysqlnd_protocol_payload_decoder_factory);
PHPAPI extern MYSQLND_CLASS_METHOD_TABLE_NAME_FORWARD(mysqlnd_protocol_packet_frame_codec);
PHPAPI extern MYSQLND_CLASS_METHOD_TABLE_NAME_FORWARD(mysqlnd_vio);
PHPAPI extern MYSQLND_CLASS_METHOD_TABLE_NAME_FORWARD(mysqlnd_upsert_status);
PHPAPI extern MYSQLND_CLASS_METHOD_TABLE_NAME_FORWARD(mysqlnd_error_info);
PHPAPI extern MYSQLND_CLASS_METHOD_TABLE_NAME_FORWARD(mysqlnd_command);

enum_func_status mysqlnd_handle_local_infile(MYSQLND_CONN_DATA * conn, const char * const filename, bool * is_warning);
#endif	/* MYSQLND_PRIV_H */
ext/mysqlnd/mysqlnd_portability.h000064400000033643151730542320013330 0ustar00/* Copyright Abandoned 1996 TCX DataKonsult AB & Monty Program KB & Detron HB
This file is public domain and comes with NO WARRANTY of any kind */

/*
  Parts of the original, which are not applicable to mysqlnd have been removed.

  With small modifications, mostly casting but adding few more macros by
  Andrey Hristov <andrey@php.net> . The additions are in the public domain and
  were added to improve the header file, to get it more consistent.
*/

#ifndef MYSQLND_PORTABILITY_H
#define MYSQLND_PORTABILITY_H

#ifndef __attribute
#if !defined(__GNUC__)
#define __attribute(A)
#endif
#endif

#ifdef __CYGWIN__
/* We use a Unix API, so pretend it's not Windows */
#undef WIN
#undef WIN32
#undef _WIN
#undef _WIN32
#undef _WIN64
#undef __WIN__
#undef __WIN32__
#endif /* __CYGWIN__ */

#if defined(_WIN32) || defined(_WIN64) || defined(__WIN32__) || defined(WIN32)
#  include "ext/mysqlnd/config-win.h"
#endif /* _WIN32... */

#if __STDC_VERSION__ < 199901L && !defined(atoll)
  /* "inline" is a keyword */
  #define atoll atol
#endif

#include <stdint.h>

#if SIZEOF_LONG_LONG > 4 && !defined(_LONG_LONG)
#define _LONG_LONG 1        /* For AIX string library */
#endif

/* Go around some bugs in different OS and compilers */

#ifdef PHP_WIN32
#ifndef L64
#define L64(x) x##i64
#endif
#else

#ifndef L64
#define L64(x) x##LL
#endif
#endif


#define int1store(T,A)	do { *((int8_t*) (T)) = (A); } while(0)
#define uint1korr(A)	(*(((uint8_t*)(A))))

/* Bit values are sent in reverted order of bytes, compared to normal !!! */
#define bit_uint2korr(A) ((uint16_t) (((uint16_t) (((unsigned char*) (A))[1])) +\
                                   ((uint16_t) (((unsigned char*) (A))[0]) << 8)))
#define bit_uint3korr(A) ((uint32_t) (((uint32_t) (((unsigned char*) (A))[2])) +\
                                   (((uint32_t) (((unsigned char*) (A))[1])) << 8) +\
                                   (((uint32_t) (((unsigned char*) (A))[0])) << 16)))
#define bit_uint4korr(A) ((uint32_t) (((uint32_t) (((unsigned char*) (A))[3])) +\
                                   (((uint32_t) (((unsigned char*) (A))[2])) << 8) +\
                                   (((uint32_t) (((unsigned char*) (A))[1])) << 16) +\
                                   (((uint32_t) (((unsigned char*) (A))[0])) << 24)))
#define bit_uint5korr(A) ((uint64_t)(((uint32_t) (((unsigned char*) (A))[4])) +\
                                    (((uint32_t) (((unsigned char*) (A))[3])) << 8) +\
                                    (((uint32_t) (((unsigned char*) (A))[2])) << 16) +\
                                   (((uint32_t) (((unsigned char*) (A))[1])) << 24)) +\
                                    (((uint64_t) (((unsigned char*) (A))[0])) << 32))
#define bit_uint6korr(A) ((uint64_t)(((uint32_t) (((unsigned char*) (A))[5])) +\
                                    (((uint32_t) (((unsigned char*) (A))[4])) << 8) +\
                                    (((uint32_t) (((unsigned char*) (A))[3])) << 16) +\
                                    (((uint32_t) (((unsigned char*) (A))[2])) << 24)) +\
                        (((uint64_t) (((uint32_t) (((unsigned char*) (A))[1])) +\
                                    (((uint32_t) (((unsigned char*) (A))[0]) << 8)))) <<\
                                     32))
#define bit_uint7korr(A) ((uint64_t)(((uint32_t) (((unsigned char*) (A))[6])) +\
                                    (((uint32_t) (((unsigned char*) (A))[5])) << 8) +\
                                    (((uint32_t) (((unsigned char*) (A))[4])) << 16) +\
                                   (((uint32_t) (((unsigned char*) (A))[3])) << 24)) +\
                        (((uint64_t) (((uint32_t) (((unsigned char*) (A))[2])) +\
                                    (((uint32_t) (((unsigned char*) (A))[1])) << 8) +\
                                    (((uint32_t) (((unsigned char*) (A))[0])) << 16))) <<\
                                     32))
#define bit_uint8korr(A) ((uint64_t)(((uint32_t) (((unsigned char*) (A))[7])) +\
                                    (((uint32_t) (((unsigned char*) (A))[6])) << 8) +\
                                    (((uint32_t) (((unsigned char*) (A))[5])) << 16) +\
                                    (((uint32_t) (((unsigned char*) (A))[4])) << 24)) +\
                        (((uint64_t) (((uint32_t) (((unsigned char*) (A))[3])) +\
                                    (((uint32_t) (((unsigned char*) (A))[2])) << 8) +\
                                    (((uint32_t) (((unsigned char*) (A))[1])) << 16) +\
                                    (((uint32_t) (((unsigned char*) (A))[0])) << 24))) <<\
                                    32))


/*
** Define-funktions for reading and storing in machine independent format
**  (low byte first)
*/

/* Optimized store functions for Intel x86, non-valid for WIN64. __i386__ is GCC */
#if defined(__i386__) && !defined(_WIN64)
#define sint2korr(A)    (*((int16_t *) (A)))
#define sint3korr(A)    ((int32_t) ((((zend_uchar) (A)[2]) & 128) ? \
                   (((uint32_t) 255L << 24) | \
                   (((uint32_t) (zend_uchar) (A)[2]) << 16) |\
                   (((uint32_t) (zend_uchar) (A)[1]) << 8) | \
                    ((uint32_t) (zend_uchar) (A)[0])) : \
                   (((uint32_t) (zend_uchar) (A)[2]) << 16) |\
                   (((uint32_t) (zend_uchar) (A)[1]) << 8) | \
                    ((uint32_t) (zend_uchar) (A)[0])))
#define sint4korr(A)  (*((zend_long *) (A)))

#define uint2korr(A)  (*((uint16_t *) (A)))
#define uint3korr(A)  (uint32_t) (((uint32_t) ((zend_uchar) (A)[0])) +\
                               (((uint32_t) ((zend_uchar) (A)[1])) << 8) +\
                               (((uint32_t) ((zend_uchar) (A)[2])) << 16))
#define uint4korr(A)  (*((zend_ulong *) (A)))



#define uint8korr(A)    (*((uint64_t *) (A)))
#define sint8korr(A)    (*((int64_t *) (A)))
#define int2store(T,A)    *((uint16_t*) (T))= (uint16_t) (A)
#define int3store(T,A)   { \
                  *(T)=  (zend_uchar) ((A));\
                  *(T+1)=(zend_uchar) (((uint32_t) (A) >> 8));\
                  *(T+2)=(zend_uchar) (((A) >> 16)); }
#define int4store(T,A)    *((zend_long *) (T))= (zend_long) (A)
#define int5store(T,A)    { \
              *((zend_uchar *)(T))= (zend_uchar)((A));\
              *(((zend_uchar *)(T))+1)=(zend_uchar) (((A) >> 8));\
              *(((zend_uchar *)(T))+2)=(zend_uchar) (((A) >> 16));\
              *(((zend_uchar *)(T))+3)=(zend_uchar) (((A) >> 24)); \
              *(((zend_uchar *)(T))+4)=(zend_uchar) (((A) >> 32)); }

#define int8store(T,A)    *((uint64_t *) (T))= (uint64_t) (A)

typedef union {
  double v;
  zend_long m[2];
} float8get_union;
#define float8get(V,M)    { ((float8get_union *)&(V))->m[0] = *((zend_long*) (M)); \
                            ((float8get_union *)&(V))->m[1] = *(((zend_long*) (M))+1); }
#define float8store(T,V) { *((zend_long *) (T))     = ((float8get_union *)&(V))->m[0]; \
                           *(((zend_long *) (T))+1) = ((float8get_union *)&(V))->m[1]; }
#define float4get(V,M)	{ *((float *) &(V)) = *((float*) (M)); }
/* From Andrey Hristov based on float8get */
#define floatget(V,M)    memcpy((char*) &(V),(char*) (M),sizeof(float))
#endif /* __i386__ */


/* If we haven't defined sint2korr, which is because the platform is not x86 or it's WIN64 */
#ifndef sint2korr
#define sint2korr(A)    (int16_t) (((int16_t) ((zend_uchar) (A)[0])) +\
                                 ((int16_t) ((int16_t) (A)[1]) << 8))
#define sint3korr(A)    ((int32_t) ((((zend_uchar) (A)[2]) & 128) ? \
                  (((uint32_t) 255L << 24) | \
                  (((uint32_t) (zend_uchar) (A)[2]) << 16) |\
                  (((uint32_t) (zend_uchar) (A)[1]) << 8) | \
                   ((uint32_t) (zend_uchar) (A)[0])) : \
                  (((uint32_t) (zend_uchar) (A)[2]) << 16) |\
                  (((uint32_t) (zend_uchar) (A)[1]) << 8) | \
                  ((uint32_t) (zend_uchar) (A)[0])))
#define sint4korr(A)  (int32_t) (((uint32_t) ((A)[0])) +\
                              (((uint32_t) ((A)[1]) << 8)) +\
                              (((uint32_t) ((A)[2]) << 16)) +\
                              (((uint32_t) ((A)[3]) << 24)))

#define sint8korr(A)  (int64_t) uint8korr(A)
#define uint2korr(A)  (uint16_t) (((uint16_t) ((zend_uchar) (A)[0])) +\
                               ((uint16_t) ((zend_uchar) (A)[1]) << 8))
#define uint3korr(A)  (uint32_t) (((uint32_t) ((zend_uchar) (A)[0])) +\
                               (((uint32_t) ((zend_uchar) (A)[1])) << 8) +\
                               (((uint32_t) ((zend_uchar) (A)[2])) << 16))
#define uint4korr(A)  (uint32_t) (((uint32_t) ((zend_uchar) (A)[0])) +\
                               (((uint32_t) ((zend_uchar) (A)[1])) << 8) +\
                               (((uint32_t) ((zend_uchar) (A)[2])) << 16) +\
                               (((uint32_t) ((zend_uchar) (A)[3])) << 24))

#define uint8korr(A)	((uint64_t)(((uint32_t) ((zend_uchar) (A)[0])) +\
									(((uint32_t) ((zend_uchar) (A)[1])) << 8) +\
									(((uint32_t) ((zend_uchar) (A)[2])) << 16) +\
									(((uint32_t) ((zend_uchar) (A)[3])) << 24)) +\
									(((uint64_t) (((uint32_t) ((zend_uchar) (A)[4])) +\
									(((uint32_t) ((zend_uchar) (A)[5])) << 8) +\
									(((uint32_t) ((zend_uchar) (A)[6])) << 16) +\
									(((uint32_t) ((zend_uchar) (A)[7])) << 24))) << 32))


#define int2store(T,A)  do { uint32_t def_temp= (uint32_t) (A) ;\
                  *((zend_uchar*) (T))  =  (zend_uchar)(def_temp); \
                  *((zend_uchar*) (T+1)) = (zend_uchar)((def_temp >> 8)); } while (0)
#define int3store(T,A)  do { /*lint -save -e734 */\
                  *(((char *)(T)))   = (char) ((A));\
                  *(((char *)(T))+1) = (char) (((A) >> 8));\
                  *(((char *)(T))+2) = (char) (((A) >> 16)); \
                  /*lint -restore */} while (0)
#define int4store(T,A)  do { \
                  *(((char *)(T)))   = (char) ((A));\
                  *(((char *)(T))+1) = (char) (((A) >> 8));\
                  *(((char *)(T))+2) = (char) (((A) >> 16));\
                  *(((char *)(T))+3) = (char) (((A) >> 24)); } while (0)
#define int5store(T,A)  do { \
                  *(((char *)(T)))   = (char)((A));\
                  *(((char *)(T))+1) = (char)(((A) >> 8));\
                  *(((char *)(T))+2) = (char)(((A) >> 16));\
                  *(((char *)(T))+3) = (char)(((A) >> 24)); \
                  *(((char *)(T))+4) = sizeof(A) == 4 ? 0 : (char)(((A) >> 32)); } while (0)
#define int8store(T,A)        { uint32_t def_temp= (uint32_t) (A), def_temp2= sizeof(A) == 4 ? 0 : (uint32_t) ((A) >> 32); \
                  int4store((T),def_temp); \
                  int4store((T+4),def_temp2); \
                }
#ifdef WORDS_BIGENDIAN
#define float4get(V,M)   do { float def_temp;\
                          ((char*) &def_temp)[0] = (M)[3];\
                          ((char*) &def_temp)[1] = (M)[2];\
                          ((char*) &def_temp)[2] = (M)[1];\
                          ((char*) &def_temp)[3] = (M)[0];\
                          (V)=def_temp; } while (0)
#define float8store(T,V)  do { \
                           *(((char *)(T)))   = (char) ((char *) &(V))[7];\
                           *(((char *)(T))+1) = (char) ((char *) &(V))[6];\
                           *(((char *)(T))+2) = (char) ((char *) &(V))[5];\
                           *(((char *)(T))+3) = (char) ((char *) &(V))[4];\
                           *(((char *)(T))+4) = (char) ((char *) &(V))[3];\
                           *(((char *)(T))+5) = (char) ((char *) &(V))[2];\
                           *(((char *)(T))+6) = (char) ((char *) &(V))[1];\
                           *(((char *)(T))+7) = (char) ((char *) &(V))[0]; } while (0)

#define float8get(V,M)   do { double def_temp;\
                          ((char*) &def_temp)[0] = (M)[7];\
                          ((char*) &def_temp)[1] = (M)[6];\
                          ((char*) &def_temp)[2] = (M)[5];\
                          ((char*) &def_temp)[3] = (M)[4];\
                          ((char*) &def_temp)[4] = (M)[3];\
                          ((char*) &def_temp)[5] = (M)[2];\
                          ((char*) &def_temp)[6] = (M)[1];\
                          ((char*) &def_temp)[7] = (M)[0];\
                          (V) = def_temp; \
                         } while (0)
#else
#define float4get(V,M)   memcpy((char*) &(V),(char*) (M),sizeof(float))

#if defined(__FLOAT_WORD_ORDER) && (__FLOAT_WORD_ORDER == __BIG_ENDIAN)
#define float8store(T,V)  do { \
                         *(((char *)(T)))= ((char *) &(V))[4];\
                         *(((char *)(T))+1)=(char) ((char *) &(V))[5];\
                         *(((char *)(T))+2)=(char) ((char *) &(V))[6];\
                         *(((char *)(T))+3)=(char) ((char *) &(V))[7];\
                         *(((char *)(T))+4)=(char) ((char *) &(V))[0];\
                         *(((char *)(T))+5)=(char) ((char *) &(V))[1];\
                         *(((char *)(T))+6)=(char) ((char *) &(V))[2];\
                         *(((char *)(T))+7)=(char) ((char *) &(V))[3];} while (0)
#define float8get(V,M) do { double def_temp;\
                         ((char*) &def_temp)[0]=(M)[4];\
                         ((char*) &def_temp)[1]=(M)[5];\
                         ((char*) &def_temp)[2]=(M)[6];\
                         ((char*) &def_temp)[3]=(M)[7];\
                         ((char*) &def_temp)[4]=(M)[0];\
                         ((char*) &def_temp)[5]=(M)[1];\
                         ((char*) &def_temp)[6]=(M)[2];\
                         ((char*) &def_temp)[7]=(M)[3];\
                         (V) = def_temp; } while (0)
#endif /* __FLOAT_WORD_ORDER */

#endif /* WORDS_BIGENDIAN */

#endif /* sint2korr */
/* To here if the platform is not x86 or it's WIN64 */


/* Define-funktions for reading and storing in machine format from/to
   short/long to/from some place in memory V should be a (not
   register) variable, M is a pointer to byte */

#ifndef float8get
# define float8get(V,M)    memcpy((char*) &(V),(char*) (M),sizeof(double))
# define float8store(T,V)  memcpy((char*) (T),(char*) &(V),sizeof(double))
#endif

#endif /* MYSQLND_PORTABILITY_H */
ext/mysqlnd/mysqlnd_read_buffer.h000064400000002317151730542320013224 0ustar00/*
  +----------------------------------------------------------------------+
  | Copyright (c) The PHP Group                                          |
  +----------------------------------------------------------------------+
  | This source file is subject to version 3.01 of the PHP license,      |
  | that is bundled with this package in the file LICENSE, and is        |
  | available through the world-wide-web at the following url:           |
  | https://www.php.net/license/3_01.txt                                 |
  | If you did not receive a copy of the PHP license and are unable to   |
  | obtain it through the world-wide-web, please send a note to          |
  | license@php.net so we can mail you a copy immediately.               |
  +----------------------------------------------------------------------+
  | Authors: Andrey Hristov <andrey@php.net>                             |
  |          Ulf Wendel <uw@php.net>                                     |
  +----------------------------------------------------------------------+
*/

#ifndef MYSQLND_READ_BUFFER_H
#define MYSQLND_READ_BUFFER_H

PHPAPI MYSQLND_READ_BUFFER * mysqlnd_create_read_buffer(const size_t count);

#endif /* MYSQLND_READ_BUFFER_H */
ext/mysqlnd/mysqlnd_enum_n_def.h000064400000050524151730542330013063 0ustar00/*
  +----------------------------------------------------------------------+
  | Copyright (c) The PHP Group                                          |
  +----------------------------------------------------------------------+
  | This source file is subject to version 3.01 of the PHP license,      |
  | that is bundled with this package in the file LICENSE, and is        |
  | available through the world-wide-web at the following url:           |
  | https://www.php.net/license/3_01.txt                                 |
  | If you did not receive a copy of the PHP license and are unable to   |
  | obtain it through the world-wide-web, please send a note to          |
  | license@php.net so we can mail you a copy immediately.               |
  +----------------------------------------------------------------------+
  | Authors: Andrey Hristov <andrey@php.net>                             |
  |          Ulf Wendel <uw@php.net>                                     |
  |          Georg Richter <georg@php.net>                               |
  +----------------------------------------------------------------------+
*/

#ifndef MYSQLND_ENUM_N_DEF_H
#define MYSQLND_ENUM_N_DEF_H

#ifndef TRUE
#define TRUE 1
#endif

#ifndef FALSE
#define FALSE 0
#endif


#define MYSQLND_MIN_COMPRESS_LEN 0

#define MYSQLND_MAX_PACKET_SIZE (256L*256L*256L-1)

#define MYSQLND_ASSEMBLED_PACKET_MAX_SIZE 3UL*1024UL*1024UL*1024UL

#define MYSQLND_DEFAULT_AUTH_PROTOCOL "mysql_native_password"

#define MYSQLND_ERRMSG_SIZE			512
#define MYSQLND_SQLSTATE_LENGTH		5
#define MYSQLND_SQLSTATE_NULL		"00000"

#define MYSQLND_MAX_ALLOWED_USER_LEN	252		/* 63 char * 4byte . MySQL supports now only 32 char, but let it be forward compatible */
#define MYSQLND_MAX_ALLOWED_DB_LEN		1024	/* 256 char * 4byte. MySQL supports now only 64 char in the tables, but on the FS could be different. Forward compatible. */

#define MYSQLND_NET_CMD_BUFFER_MIN_SIZE			4096
#define MYSQLND_NET_CMD_BUFFER_MIN_SIZE_STR		"4096"

#define MYSQLND_STMT_ID_LENGTH 4


#define SERVER_STATUS_IN_TRANS					1	/* Transaction has started */
#define SERVER_STATUS_AUTOCOMMIT				2	/* Server in auto_commit mode */
#define SERVER_MORE_RESULTS_EXISTS				8	/* Multi query - next query exists */
#define SERVER_QUERY_NO_GOOD_INDEX_USED	16
#define SERVER_QUERY_NO_INDEX_USED		32
/*
  The server was able to fulfill the clients request and opened a
  read-only non-scrollable cursor for a query. This flag comes
  in reply to COM_STMT_EXECUTE and COM_STMT_FETCH commands.
*/
#define SERVER_STATUS_CURSOR_EXISTS				64
/*
  This flag is sent when a read-only cursor is exhausted, in reply to
  COM_STMT_FETCH command.
*/
#define SERVER_STATUS_LAST_ROW_SENT				128
#define SERVER_STATUS_DB_DROPPED				256 /* A database was dropped */
#define SERVER_STATUS_NO_BACKSLASH_ESCAPES		512
#define SERVER_QUERY_WAS_SLOW					2048
#define SERVER_PS_OUT_PARAMS            		4096

#define MYSQLND_NO_DATA			100
#define MYSQLND_DATA_TRUNCATED	101

#define SHA1_MAX_LENGTH 20
#define SCRAMBLE_LENGTH 20
#define SCRAMBLE_LENGTH_323 8

#define CLIENT_LONG_PASSWORD		1		/* new more secure passwords */
#define CLIENT_FOUND_ROWS			2		/* Found instead of affected rows */
#define CLIENT_LONG_FLAG			4		/* Get all column flags */
#define CLIENT_CONNECT_WITH_DB		8		/* One can specify db on connect */
#define CLIENT_NO_SCHEMA			16		/* Don't allow database.table.column */
#define CLIENT_COMPRESS				32		/* Can use compression protocol */
#define CLIENT_ODBC					64		/* Odbc client */
#define CLIENT_LOCAL_FILES			128		/* Can use LOAD DATA LOCAL */
#define CLIENT_IGNORE_SPACE			256		/* Ignore spaces before '(' */
#define CLIENT_PROTOCOL_41			512		/* New 4.1 protocol */
#define CLIENT_INTERACTIVE			1024	/* This is an interactive client */
#define CLIENT_SSL					2048	/* Switch to SSL after handshake */
#define CLIENT_IGNORE_SIGPIPE		4096	/* IGNORE sigpipes */
#define CLIENT_TRANSACTIONS			8192	/* Client knows about transactions */
#define CLIENT_RESERVED				16384	/* Old flag for 4.1 protocol */
#define CLIENT_SECURE_CONNECTION	32768	/* New 4.1 authentication */
#define CLIENT_MULTI_STATEMENTS		(1UL << 16) /* Enable/disable multi-stmt support */
#define CLIENT_MULTI_RESULTS		(1UL << 17) /* Enable/disable multi-results */
#define CLIENT_PS_MULTI_RESULTS		(1UL << 18) /* Multi-results in PS-protocol */
#define CLIENT_PLUGIN_AUTH			(1UL << 19) /* Client supports plugin authentication */
#define CLIENT_CONNECT_ATTRS		(1UL << 20) /* Client supports connection attributes */
#define CLIENT_PLUGIN_AUTH_LENENC_CLIENT_DATA	(1UL << 21) /* Enable authentication response packet to be larger than 255 bytes. */
#define CLIENT_CAN_HANDLE_EXPIRED_PASSWORDS		(1UL << 22) /* Don't close the connection for a connection with expired password. */
#define CLIENT_SESSION_TRACK					(1UL << 23) /* Extended OK */
/*
  This is a mysqlnd extension. CLIENT_ODBC is not used anyway. We will reuse it for our case and translate it to not using SSL peer verification
*/
#define CLIENT_SSL_DONT_VERIFY_SERVER_CERT	CLIENT_ODBC
#define CLIENT_SSL_VERIFY_SERVER_CERT	(1UL << 30)
#define CLIENT_REMEMBER_OPTIONS			(1UL << 31)

#define MYSQLND_CAPABILITIES (CLIENT_LONG_PASSWORD | CLIENT_LONG_FLAG | CLIENT_TRANSACTIONS | \
				CLIENT_PROTOCOL_41 | CLIENT_SECURE_CONNECTION | \
				CLIENT_MULTI_RESULTS  | CLIENT_LOCAL_FILES | CLIENT_PLUGIN_AUTH)

#define MYSQLND_PROTOCOL_FLAG_USE_COMPRESSION 1


/* Client Error codes */
#define CR_UNKNOWN_ERROR		2000
#define CR_CONNECTION_ERROR		2002
#define CR_SERVER_GONE_ERROR	2006
#define CR_OUT_OF_MEMORY		2008
#define CR_SERVER_LOST			2013
#define CR_COMMANDS_OUT_OF_SYNC	2014
#define CR_CANT_FIND_CHARSET	2019
#define CR_MALFORMED_PACKET		2027
#define CR_NOT_IMPLEMENTED		2054
#define CR_NO_PREPARE_STMT		2030
#define CR_PARAMS_NOT_BOUND		2031
#define CR_INVALID_PARAMETER_NO	2034
#define CR_INVALID_BUFFER_USE	2035
#define CR_LOAD_DATA_LOCAL_INFILE_REJECTED 2068
#define CR_CLIENT_INTERACTION_TIMEOUT 4031

#define MYSQLND_EE_FILENOTFOUND	 7890

#define UNKNOWN_SQLSTATE		"HY000"

#define MAX_CHARSET_LEN			32


#define TRANS_START_NO_OPT						0
#define TRANS_START_WITH_CONSISTENT_SNAPSHOT	1
#define TRANS_START_READ_WRITE					2
#define TRANS_START_READ_ONLY					4

#define TRANS_COR_NO_OPT		0
#define TRANS_COR_AND_CHAIN		1
#define TRANS_COR_AND_NO_CHAIN	2
#define TRANS_COR_RELEASE		4
#define TRANS_COR_NO_RELEASE	8

enum
{
	MYSQLND_FETCH_ASSOC = 1,
	MYSQLND_FETCH_NUM = 2,
	MYSQLND_FETCH_BOTH = 1|2
};

/* Follow libmysql convention */
typedef enum func_status
{
	PASS = 0,
	FAIL = 1
} enum_func_status;

typedef enum mysqlnd_query_type
{
	QUERY_UPSERT,
	QUERY_SELECT,
	QUERY_LOAD_LOCAL
} enum_mysqlnd_query_type;

typedef enum mysqlnd_res_type
{
	MYSQLND_RES_NORMAL = 1,
	MYSQLND_RES_PS_BUF,
	MYSQLND_RES_PS_UNBUF
} enum_mysqlnd_res_type;

typedef enum mysqlnd_send_execute_type
{
	MYSQLND_SEND_EXECUTE_IMPLICIT = 0,
	MYSQLND_SEND_EXECUTE_EXPLICIT
} enum_mysqlnd_send_execute_type;

typedef enum mysqlnd_parse_exec_response_type
{
	MYSQLND_PARSE_EXEC_RESPONSE_IMPLICIT = 0,
	MYSQLND_PARSE_EXEC_RESPONSE_IMPLICIT_NEXT_RESULT,
	MYSQLND_PARSE_EXEC_RESPONSE_IMPLICIT_OUT_VARIABLES,
	MYSQLND_PARSE_EXEC_RESPONSE_EXPLICIT,
} enum_mysqlnd_parse_exec_response_type;

typedef enum mysqlnd_client_option
{
	MYSQL_OPT_CONNECT_TIMEOUT,
	MYSQL_OPT_COMPRESS,
	MYSQL_OPT_NAMED_PIPE,
	MYSQL_INIT_COMMAND,
	MYSQL_READ_DEFAULT_FILE,
	MYSQL_READ_DEFAULT_GROUP,
	MYSQL_SET_CHARSET_DIR, /* Unsupported by mysqlnd */
	MYSQL_SET_CHARSET_NAME,
	MYSQL_OPT_LOCAL_INFILE,
	MYSQL_OPT_PROTOCOL,
	MYSQL_SHARED_MEMORY_BASE_NAME, /* Unsupported by mysqlnd */
	MYSQL_OPT_READ_TIMEOUT,
	MYSQL_OPT_WRITE_TIMEOUT,
	MYSQL_OPT_USE_RESULT, /* Unsupported by mysqlnd */
	MYSQL_OPT_USE_REMOTE_CONNECTION, /* Unsupported by mysqlnd; removed in MySQL-8.0 */
	MYSQL_OPT_USE_EMBEDDED_CONNECTION, /* Unsupported by mysqlnd; removed in MySQL-8.0 */
	MYSQL_OPT_GUESS_CONNECTION, /* Unsupported by mysqlnd; removed in MySQL-8.0 */
	MYSQL_SET_CLIENT_IP, /* Unsupported by mysqlnd */
	MYSQL_SECURE_AUTH, /* Unsupported by mysqlnd; removed in MySQL-8.0 */
	MYSQL_REPORT_DATA_TRUNCATION, /* Unsupported by mysqlnd */
	MYSQL_OPT_RECONNECT, /* Unsupported by mysqlnd */
	MYSQL_OPT_SSL_VERIFY_SERVER_CERT,
	MYSQL_PLUGIN_DIR,
	MYSQL_DEFAULT_AUTH,
	MYSQL_OPT_BIND,
	MYSQL_OPT_SSL_KEY,
	MYSQL_OPT_SSL_CERT,
	MYSQL_OPT_SSL_CA,
	MYSQL_OPT_SSL_CAPATH,
	MYSQL_OPT_SSL_CIPHER,
	MYSQL_OPT_SSL_CRL,
	MYSQL_OPT_SSL_CRLPATH,
	MYSQL_OPT_CONNECT_ATTR_RESET,
	MYSQL_OPT_CONNECT_ATTR_ADD,
	MYSQL_OPT_CONNECT_ATTR_DELETE,
	MYSQL_SERVER_PUBLIC_KEY,
	MYSQL_ENABLE_CLEARTEXT_PLUGIN,
	MYSQL_OPT_CAN_HANDLE_EXPIRED_PASSWORDS,
	MYSQL_OPT_SSL_ENFORCE,
	MYSQL_OPT_MAX_ALLOWED_PACKET,
	MYSQL_OPT_NET_BUFFER_LENGTH,
	MYSQL_OPT_TLS_VERSION,
	MYSQL_OPT_SSL_MODE,
	MYSQL_OPT_LOAD_DATA_LOCAL_DIR,
	MYSQLND_DEPRECATED_ENUM1 = 200,
	MYSQLND_OPT_INT_AND_FLOAT_NATIVE = 201,
	MYSQLND_OPT_NET_CMD_BUFFER_SIZE = 202,
	MYSQLND_OPT_NET_READ_BUFFER_SIZE = 203,
	MYSQLND_OPT_SSL_KEY = 204,
	MYSQLND_OPT_SSL_CERT = 205,
	MYSQLND_OPT_SSL_CA = 206,
	MYSQLND_OPT_SSL_CAPATH = 207,
	MYSQLND_OPT_SSL_CIPHER = 208,
	MYSQLND_OPT_SSL_PASSPHRASE = 209,
	MYSQLND_OPT_MAX_ALLOWED_PACKET = 210,
	MYSQLND_OPT_AUTH_PROTOCOL = 211
} enum_mysqlnd_client_option;

typedef enum mysqlnd_session_protocol_type
{
	MYSQL_PROTOCOL_DEFAULT = 0,
	MYSQL_PROTOCOL_TCP,		/* all, supported */
	MYSQL_PROTOCOL_SOCKET,	/* unix, supported */
	MYSQL_PROTOCOL_PIPE,	/* win32, not-supported */
	MYSQL_PROTOCOL_MEMORY,	/* win32, not-supported */
	MYSQL_PROTOCOL_LAST
} enum_mysqlnd_session_protocol_type;

typedef enum mysqlnd_field_types
{
	MYSQL_TYPE_DECIMAL	= 0,
	MYSQL_TYPE_TINY		= 1,
	MYSQL_TYPE_SHORT	= 2,
	MYSQL_TYPE_LONG		= 3,
	MYSQL_TYPE_FLOAT	= 4,
	MYSQL_TYPE_DOUBLE	= 5,
	MYSQL_TYPE_NULL		= 6,
	MYSQL_TYPE_TIMESTAMP= 7,
	MYSQL_TYPE_LONGLONG	= 8,
	MYSQL_TYPE_INT24	= 9,
	MYSQL_TYPE_DATE		= 10,
	MYSQL_TYPE_TIME		= 11,
	MYSQL_TYPE_DATETIME	= 12,
	MYSQL_TYPE_YEAR		= 13,
	MYSQL_TYPE_NEWDATE	= 14,
	MYSQL_TYPE_VARCHAR	= 15,
	MYSQL_TYPE_BIT		= 16,
	MYSQL_TYPE_VECTOR=242,
	MYSQL_TYPE_JSON=245,
	MYSQL_TYPE_NEWDECIMAL=246,
	MYSQL_TYPE_ENUM=247,
	MYSQL_TYPE_SET=248,
	MYSQL_TYPE_TINY_BLOB=249,
	MYSQL_TYPE_MEDIUM_BLOB=250,
	MYSQL_TYPE_LONG_BLOB=251,
	MYSQL_TYPE_BLOB=252,
	MYSQL_TYPE_VAR_STRING=253,
	MYSQL_TYPE_STRING=254,
	MYSQL_TYPE_GEOMETRY=255
} enum_mysqlnd_field_types;

/* Please update this if there is a new type after MYSQL_TYPE_GEOMETRY */
#define MYSQL_TYPE_LAST		MYSQL_TYPE_GEOMETRY


typedef enum mysqlnd_server_option
{
	MYSQL_OPTION_MULTI_STATEMENTS_ON,
	MYSQL_OPTION_MULTI_STATEMENTS_OFF
} enum_mysqlnd_server_option;


#define FIELD_TYPE_DECIMAL		MYSQL_TYPE_DECIMAL
#define FIELD_TYPE_NEWDECIMAL	MYSQL_TYPE_NEWDECIMAL
#define FIELD_TYPE_TINY			MYSQL_TYPE_TINY
#define FIELD_TYPE_SHORT		MYSQL_TYPE_SHORT
#define FIELD_TYPE_LONG			MYSQL_TYPE_LONG
#define FIELD_TYPE_FLOAT		MYSQL_TYPE_FLOAT
#define FIELD_TYPE_DOUBLE		MYSQL_TYPE_DOUBLE
#define FIELD_TYPE_NULL			MYSQL_TYPE_NULL
#define FIELD_TYPE_TIMESTAMP	MYSQL_TYPE_TIMESTAMP
#define FIELD_TYPE_LONGLONG		MYSQL_TYPE_LONGLONG
#define FIELD_TYPE_INT24		MYSQL_TYPE_INT24
#define FIELD_TYPE_DATE			MYSQL_TYPE_DATE
#define FIELD_TYPE_TIME			MYSQL_TYPE_TIME
#define FIELD_TYPE_DATETIME		MYSQL_TYPE_DATETIME
#define FIELD_TYPE_YEAR			MYSQL_TYPE_YEAR
#define FIELD_TYPE_NEWDATE		MYSQL_TYPE_NEWDATE
#define FIELD_TYPE_ENUM			MYSQL_TYPE_ENUM
#define FIELD_TYPE_SET			MYSQL_TYPE_SET
#define FIELD_TYPE_VECTOR 		MYSQL_TYPE_VECTOR
#define FIELD_TYPE_JSON 		MYSQL_TYPE_JSON
#define FIELD_TYPE_TINY_BLOB	MYSQL_TYPE_TINY_BLOB
#define FIELD_TYPE_MEDIUM_BLOB	MYSQL_TYPE_MEDIUM_BLOB
#define FIELD_TYPE_LONG_BLOB	MYSQL_TYPE_LONG_BLOB
#define FIELD_TYPE_BLOB			MYSQL_TYPE_BLOB
#define FIELD_TYPE_VAR_STRING	MYSQL_TYPE_VAR_STRING
#define FIELD_TYPE_STRING		MYSQL_TYPE_STRING
#define FIELD_TYPE_CHAR			MYSQL_TYPE_TINY
#define FIELD_TYPE_GEOMETRY		MYSQL_TYPE_GEOMETRY
#define FIELD_TYPE_BIT			MYSQL_TYPE_BIT

#define NOT_NULL_FLAG			    1
#define PRI_KEY_FLAG			    2
#define UNIQUE_KEY_FLAG			    4
#define MULTIPLE_KEY_FLAG		    8
#define BLOB_FLAG				   16
#define UNSIGNED_FLAG			   32
#define ZEROFILL_FLAG			   64
#define BINARY_FLAG				  128
#define ENUM_FLAG				  256
#define AUTO_INCREMENT_FLAG		  512
#define TIMESTAMP_FLAG			 1024
#define SET_FLAG				 2048
#define NO_DEFAULT_VALUE_FLAG	 4096
#define ON_UPDATE_NOW_FLAG		 8192
#define PART_KEY_FLAG			16384
#define GROUP_FLAG				32768
#define NUM_FLAG				32768

#define IS_PRI_KEY(n)	((n) & PRI_KEY_FLAG)
#define IS_NOT_NULL(n)	((n) & NOT_NULL_FLAG)
#define IS_BLOB(n)		((n) & BLOB_FLAG)
#define IS_NUM(t)		((t) <= FIELD_TYPE_INT24 || (t) == FIELD_TYPE_YEAR || (t) == FIELD_TYPE_NEWDECIMAL)


/*
		/-----> CONN_CLOSE  <---------------\
		|           ^                         \
		|           |                         \
	CONN_READY -> CONN_QUERY_SENT -> CONN_FETCHING_DATA
		^                                      |
		\-------------------------------------/
*/
typedef enum mysqlnd_connection_state
{
	CONN_ALLOCED = 0,
	CONN_READY = 1,
	CONN_QUERY_SENT = 2,
	CONN_SENDING_LOAD_DATA = 3,
	CONN_FETCHING_DATA = 4,
	CONN_NEXT_RESULT_PENDING = 5,
	CONN_QUIT_SENT = 6 /* object is "destroyed" at this stage */
} enum_mysqlnd_connection_state;


typedef enum mysqlnd_stmt_state
{
	MYSQLND_STMT_INITTED = 0,
	MYSQLND_STMT_PREPARED = 1,
	MYSQLND_STMT_EXECUTED = 2,
	MYSQLND_STMT_WAITING_USE_OR_STORE = 3,
	MYSQLND_STMT_USE_OR_STORE_CALLED = 4,
	MYSQLND_STMT_USER_FETCHING = 5/* fetch_row_buff or fetch_row_unbuf */
} enum_mysqlnd_stmt_state;


typedef enum param_bind_flags
{
	MYSQLND_PARAM_BIND_BLOB_USED = 1
} enum_param_bind_flags;


/* PS */
enum mysqlnd_stmt_attr
{
	STMT_ATTR_UPDATE_MAX_LENGTH,
	STMT_ATTR_CURSOR_TYPE
};

enum myslqnd_cursor_type
{
	CURSOR_TYPE_NO_CURSOR= 0,
	CURSOR_TYPE_READ_ONLY= 1,
};

typedef enum mysqlnd_connection_close_type
{
	MYSQLND_CLOSE_EXPLICIT = 0,
	MYSQLND_CLOSE_IMPLICIT,
	MYSQLND_CLOSE_DISCONNECTED,
	MYSQLND_CLOSE_LAST	/* for checking, should always be last */
} enum_connection_close_type;


typedef enum mysqlnd_collected_stats
{
	STAT_BYTES_SENT,
	STAT_BYTES_RECEIVED,
	STAT_PACKETS_SENT,
	STAT_PACKETS_RECEIVED,
	STAT_PROTOCOL_OVERHEAD_IN,
	STAT_PROTOCOL_OVERHEAD_OUT,
	STAT_BYTES_RECEIVED_OK,
	STAT_BYTES_RECEIVED_EOF,
	STAT_BYTES_RECEIVED_RSET_HEADER,
	STAT_BYTES_RECEIVED_RSET_FIELD_META,
	STAT_BYTES_RECEIVED_RSET_ROW,
	STAT_BYTES_RECEIVED_PREPARE_RESPONSE,
	STAT_BYTES_RECEIVED_CHANGE_USER,
	STAT_PACKETS_SENT_CMD,
	STAT_PACKETS_RECEIVED_OK,
	STAT_PACKETS_RECEIVED_EOF,
	STAT_PACKETS_RECEIVED_RSET_HEADER,
	STAT_PACKETS_RECEIVED_RSET_FIELD_META,
	STAT_PACKETS_RECEIVED_RSET_ROW,
	STAT_PACKETS_RECEIVED_PREPARE_RESPONSE,
	STAT_PACKETS_RECEIVED_CHANGE_USER,
	STAT_RSET_QUERY,
	STAT_NON_RSET_QUERY,
	STAT_NO_INDEX_USED,
	STAT_BAD_INDEX_USED,
	STAT_QUERY_WAS_SLOW,
	STAT_BUFFERED_SETS,
	STAT_UNBUFFERED_SETS,
	STAT_PS_BUFFERED_SETS,
	STAT_PS_UNBUFFERED_SETS,
	STAT_FLUSHED_NORMAL_SETS,
	STAT_FLUSHED_PS_SETS,
	STAT_PS_PREPARED_NEVER_EXECUTED,
	STAT_PS_PREPARED_ONCE_USED,
	STAT_ROWS_FETCHED_FROM_SERVER_NORMAL,
	STAT_ROWS_FETCHED_FROM_SERVER_PS,
	STAT_ROWS_BUFFERED_FROM_CLIENT_NORMAL,
	STAT_ROWS_BUFFERED_FROM_CLIENT_PS,
	STAT_ROWS_FETCHED_FROM_CLIENT_NORMAL_BUF,
	STAT_ROWS_FETCHED_FROM_CLIENT_NORMAL_UNBUF,
	STAT_ROWS_FETCHED_FROM_CLIENT_PS_BUF,
	STAT_ROWS_FETCHED_FROM_CLIENT_PS_UNBUF,
	STAT_ROWS_FETCHED_FROM_CLIENT_PS_CURSOR,
	STAT_ROWS_AFFECTED_NORMAL,
	STAT_ROWS_AFFECTED_PS,
	STAT_ROWS_SKIPPED_NORMAL,
	STAT_ROWS_SKIPPED_PS,
	STAT_COPY_ON_WRITE_SAVED,
	STAT_COPY_ON_WRITE_PERFORMED,
	STAT_CMD_BUFFER_TOO_SMALL,
	STAT_CONNECT_SUCCESS,
	STAT_CONNECT_FAILURE,
	STAT_CONNECT_REUSED,
	STAT_RECONNECT,
	STAT_PCONNECT_SUCCESS,
	STAT_OPENED_CONNECTIONS,
	STAT_OPENED_PERSISTENT_CONNECTIONS,
	STAT_CLOSE_EXPLICIT,
	STAT_CLOSE_IMPLICIT,
	STAT_CLOSE_DISCONNECT,
	STAT_CLOSE_IN_MIDDLE,
	STAT_FREE_RESULT_EXPLICIT,
	STAT_FREE_RESULT_IMPLICIT,
	STAT_STMT_CLOSE_EXPLICIT,
	STAT_STMT_CLOSE_IMPLICIT,
	STAT_MEM_EMALLOC_COUNT,
	STAT_MEM_EMALLOC_AMOUNT,
	STAT_MEM_ECALLOC_COUNT,
	STAT_MEM_ECALLOC_AMOUNT,
	STAT_MEM_EREALLOC_COUNT,
	STAT_MEM_EREALLOC_AMOUNT,
	STAT_MEM_EFREE_COUNT,
	STAT_MEM_EFREE_AMOUNT,
	STAT_MEM_MALLOC_COUNT,
	STAT_MEM_MALLOC_AMOUNT,
	STAT_MEM_CALLOC_COUNT,
	STAT_MEM_CALLOC_AMOUNT,
	STAT_MEM_REALLOC_COUNT,
	STAT_MEM_REALLOC_AMOUNT,
	STAT_MEM_FREE_COUNT,
	STAT_MEM_FREE_AMOUNT,
	STAT_MEM_ESTRNDUP_COUNT,
	STAT_MEM_STRNDUP_COUNT,
	STAT_MEM_ESTRDUP_COUNT,
	STAT_MEM_STRDUP_COUNT,
	STAT_MEM_EDUP_COUNT,
	STAT_MEM_DUP_COUNT,
	STAT_TEXT_TYPE_FETCHED_NULL,
	STAT_TEXT_TYPE_FETCHED_BIT,
	STAT_TEXT_TYPE_FETCHED_INT8,
	STAT_TEXT_TYPE_FETCHED_INT16,
	STAT_TEXT_TYPE_FETCHED_INT24,
	STAT_TEXT_TYPE_FETCHED_INT32,
	STAT_TEXT_TYPE_FETCHED_INT64,
	STAT_TEXT_TYPE_FETCHED_DECIMAL,
	STAT_TEXT_TYPE_FETCHED_FLOAT,
	STAT_TEXT_TYPE_FETCHED_DOUBLE,
	STAT_TEXT_TYPE_FETCHED_DATE,
	STAT_TEXT_TYPE_FETCHED_YEAR,
	STAT_TEXT_TYPE_FETCHED_TIME,
	STAT_TEXT_TYPE_FETCHED_DATETIME,
	STAT_TEXT_TYPE_FETCHED_TIMESTAMP,
	STAT_TEXT_TYPE_FETCHED_STRING,
	STAT_TEXT_TYPE_FETCHED_JSON,
	STAT_TEXT_TYPE_FETCHED_BLOB,
	STAT_TEXT_TYPE_FETCHED_ENUM,
	STAT_TEXT_TYPE_FETCHED_SET,
	STAT_TEXT_TYPE_FETCHED_GEOMETRY,
	STAT_TEXT_TYPE_FETCHED_OTHER,
	STAT_BINARY_TYPE_FETCHED_NULL,
	STAT_BINARY_TYPE_FETCHED_BIT,
	STAT_BINARY_TYPE_FETCHED_INT8,
	STAT_BINARY_TYPE_FETCHED_INT16,
	STAT_BINARY_TYPE_FETCHED_INT24,
	STAT_BINARY_TYPE_FETCHED_INT32,
	STAT_BINARY_TYPE_FETCHED_INT64,
	STAT_BINARY_TYPE_FETCHED_DECIMAL,
	STAT_BINARY_TYPE_FETCHED_FLOAT,
	STAT_BINARY_TYPE_FETCHED_DOUBLE,
	STAT_BINARY_TYPE_FETCHED_DATE,
	STAT_BINARY_TYPE_FETCHED_YEAR,
	STAT_BINARY_TYPE_FETCHED_TIME,
	STAT_BINARY_TYPE_FETCHED_DATETIME,
	STAT_BINARY_TYPE_FETCHED_TIMESTAMP,
	STAT_BINARY_TYPE_FETCHED_STRING,
	STAT_BINARY_TYPE_FETCHED_BLOB,
	STAT_BINARY_TYPE_FETCHED_ENUM,
	STAT_BINARY_TYPE_FETCHED_SET,
	STAT_BINARY_TYPE_FETCHED_GEOMETRY,
	STAT_BINARY_TYPE_FETCHED_OTHER,
	STAT_INIT_COMMAND_EXECUTED_COUNT,
	STAT_INIT_COMMAND_FAILED_COUNT,
	STAT_COM_QUIT,
	STAT_COM_INIT_DB,
	STAT_COM_QUERY,
	STAT_COM_FIELD_LIST,
	STAT_COM_CREATE_DB,
	STAT_COM_DROP_DB,
	STAT_COM_REFRESH,
	STAT_COM_SHUTDOWN,
	STAT_COM_STATISTICS,
	STAT_COM_PROCESS_INFO,
	STAT_COM_CONNECT,
	STAT_COM_PROCESS_KILL,
	STAT_COM_DEBUG,
	STAT_COM_PING,
	STAT_COM_TIME,
	STAT_COM_DELAYED_INSERT,
	STAT_COM_CHANGE_USER,
	STAT_COM_BINLOG_DUMP,
	STAT_COM_TABLE_DUMP,
	STAT_COM_CONNECT_OUT,
	STAT_COM_REGISTER_SLAVE,
	STAT_COM_STMT_PREPARE,
	STAT_COM_STMT_EXECUTE,
	STAT_COM_STMT_SEND_LONG_DATA,
	STAT_COM_STMT_CLOSE,
	STAT_COM_STMT_RESET,
	STAT_COM_SET_OPTION,
	STAT_COM_STMT_FETCH,
	STAT_COM_DAEMON,
	STAT_BYTES_RECEIVED_PURE_DATA_TEXT,
	STAT_BYTES_RECEIVED_PURE_DATA_PS,
	STAT_LAST /* Should be always the last */
} enum_mysqlnd_collected_stats;


/* Enums */
enum mysqlnd_packet_type
{
	PROT_GREET_PACKET= 0,
	PROT_AUTH_PACKET,
	PROT_AUTH_RESP_PACKET,
	PROT_CHANGE_AUTH_RESP_PACKET,
	PROT_OK_PACKET,
	PROT_EOF_PACKET,
	PROT_CMD_PACKET,
	PROT_RSET_HEADER_PACKET,
	PROT_RSET_FLD_PACKET,
	PROT_ROW_PACKET,
	PROT_STATS_PACKET,
	PROT_PREPARE_RESP_PACKET,
	PROT_CHG_USER_RESP_PACKET,
	PROT_SHA256_PK_REQUEST_PACKET,
	PROT_SHA256_PK_REQUEST_RESPONSE_PACKET,
	PROT_CACHED_SHA2_RESULT_PACKET,
	PROT_LAST /* should always be last */
};


/*
  After adding new elements please update
  `mysqlnd_command_to_text` in mysqlnd_wireprotocol.c
*/
enum php_mysqlnd_server_command
{
	COM_SLEEP = 0,
	COM_QUIT,
	COM_INIT_DB,
	COM_QUERY,
	COM_FIELD_LIST,
	COM_CREATE_DB,
	COM_DROP_DB,
	COM_REFRESH,
	COM_SHUTDOWN,
	COM_STATISTICS,
	COM_PROCESS_INFO,
	COM_CONNECT,
	COM_PROCESS_KILL,
	COM_DEBUG,
	COM_PING,
	COM_TIME = 15,
	COM_DELAYED_INSERT,
	COM_CHANGE_USER,
	COM_BINLOG_DUMP,
	COM_TABLE_DUMP,
	COM_CONNECT_OUT = 20,
	COM_REGISTER_SLAVE,
	COM_STMT_PREPARE = 22,
	COM_STMT_EXECUTE = 23,
	COM_STMT_SEND_LONG_DATA = 24,
	COM_STMT_CLOSE = 25,
	COM_STMT_RESET = 26,
	COM_SET_OPTION = 27,
	COM_STMT_FETCH = 28,
	COM_DAEMON = 29,
	COM_BINLOG_DUMP_GTID = 30,
	COM_RESET_CONNECTION = 31,
	COM_STMT_EXECUTE_BATCH = 32,
	COM_END,
	/* Here follow own, non-protocol, commands */
	COM_REAP_RESULT=240,	/* own command */
	COM_ENABLE_SSL,			/* own command */
	COM_HANDSHAKE,			/* own command */
};


#define MYSQLND_DEFAULT_PREFETCH_ROWS (zend_ulong) 1

#define MYSQLND_REFRESH_GRANT		1	/* Refresh grant tables */
#define MYSQLND_REFRESH_LOG			2	/* Start on new log file */
#define MYSQLND_REFRESH_TABLES		4	/* close all tables */
#define MYSQLND_REFRESH_HOSTS		8	/* Flush host cache */
#define MYSQLND_REFRESH_STATUS		16	/* Flush status variables */
#define MYSQLND_REFRESH_THREADS		32	/* Flush thread cache */
#define MYSQLND_REFRESH_REPLICA		64	/* Reset master info and restart replica */
#define MYSQLND_REFRESH_SLAVE		MYSQLND_REFRESH_REPLICA	/* temporarily for backward compatibility */
#define MYSQLND_REFRESH_MASTER		128	/* Remove all bin logs in the index */
#define MYSQLND_REFRESH_BACKUP_LOG	0x200000L


#define MYSQLND_CLIENT_NO_FLAG				0

#endif	/* MYSQLND_ENUM_N_DEF_H */
ext/mysqlnd/mysqlnd_result_meta.h000064400000003010151730542330013274 0ustar00/*
  +----------------------------------------------------------------------+
  | Copyright (c) The PHP Group                                          |
  +----------------------------------------------------------------------+
  | This source file is subject to version 3.01 of the PHP license,      |
  | that is bundled with this package in the file LICENSE, and is        |
  | available through the world-wide-web at the following url:           |
  | https://www.php.net/license/3_01.txt                                 |
  | If you did not receive a copy of the PHP license and are unable to   |
  | obtain it through the world-wide-web, please send a note to          |
  | license@php.net so we can mail you a copy immediately.               |
  +----------------------------------------------------------------------+
  | Authors: Andrey Hristov <andrey@php.net>                             |
  |          Johannes Schlüter <johannes@php.net>                        |
  |          Ulf Wendel <uw@php.net>                                     |
  +----------------------------------------------------------------------+
*/

#ifndef MYSQLND_RESULT_META_H
#define MYSQLND_RESULT_META_H

PHPAPI MYSQLND_RES_METADATA * mysqlnd_result_meta_init(MYSQLND_RES * result, unsigned int field_count);
PHPAPI struct st_mysqlnd_res_meta_methods * mysqlnd_result_metadata_get_methods(void);
PHPAPI void ** _mysqlnd_plugin_get_plugin_result_metadata_data(const MYSQLND_RES_METADATA * meta, unsigned int plugin_id);

#endif /* MYSQLND_RESULT_META_H */
ext/mysqlnd/mysqlnd_libmysql_compat.h000064400000016374151730542340014171 0ustar00/*
  +----------------------------------------------------------------------+
  | Copyright (c) The PHP Group                                          |
  +----------------------------------------------------------------------+
  | This source file is subject to version 3.01 of the PHP license,      |
  | that is bundled with this package in the file LICENSE, and is        |
  | available through the world-wide-web at the following url:           |
  | https://www.php.net/license/3_01.txt                                 |
  | If you did not receive a copy of the PHP license and are unable to   |
  | obtain it through the world-wide-web, please send a note to          |
  | license@php.net so we can mail you a copy immediately.               |
  +----------------------------------------------------------------------+
  | Authors: Andrey Hristov <andrey@php.net>                             |
  |          Ulf Wendel <uw@php.net>                                     |
  |          Georg Richter <georg@php.net>                               |
  +----------------------------------------------------------------------+
*/
#ifndef MYSQLND_LIBMYSQL_COMPAT_H
#define MYSQLND_LIBMYSQL_COMPAT_H

/* Global types and definitions*/
#define MYSQL_NO_DATA			MYSQLND_NO_DATA
#define MYSQL_DATA_TRUNCATED	MYSQLND_DATA_TRUNCATED
#define MYSQL_STMT				MYSQLND_STMT
#define MYSQL_FIELD				MYSQLND_FIELD
#define MYSQL_RES				MYSQLND_RES
#define MYSQL_ROW				MYSQLND_ROW_C
#define MYSQL					MYSQLND
#define my_bool					bool
#define my_ulonglong			uint64_t

#define MYSQL_VERSION_ID		MYSQLND_VERSION_ID
#define MYSQL_SERVER_VERSION	PHP_MYSQLND_VERSION
#define MYSQL_ERRMSG_SIZE		MYSQLND_ERRMSG_SIZE
#define SQLSTATE_LENGTH			MYSQLND_SQLSTATE_LENGTH

/* functions */
#define mysql_affected_rows(r)			mysqlnd_affected_rows((r))
#define mysql_autocommit(r,m)			mysqlnd_autocommit((r),(m))
#define mysql_change_user(r,a,b,c)		mysqlnd_change_user((r), (a), (b), (c), false)
#define mysql_character_set_name(c)		mysqlnd_character_set_name((c))
#define mysql_close(r)					mysqlnd_close((r), MYSQLND_CLOSE_EXPLICIT)
#define mysql_commit(r)					mysqlnd_commit((r), TRANS_COR_NO_OPT, NULL)
#define mysql_data_seek(r,o)			mysqlnd_data_seek((r),(o))
#define mysql_debug(x)					mysqlnd_debug((x))
#define mysql_dump_debug_info(r)		mysqlnd_dump_debug_info((r))
#define mysql_errno(r)					mysqlnd_errno((r))
#define mysql_error(r)					mysqlnd_error((r))
#define mysql_escape_string(a,b,c)		mysqlnd_escape_string((a), (b), (c))
#define mysql_fetch_field(r)			mysqlnd_fetch_field((r))
#define mysql_fetch_field_direct(r,o)	mysqlnd_fetch_field_direct((r), (o))
#define mysql_fetch_fields(r)			mysqlnd_fetch_fields((r))
#define mysql_fetch_lengths(r)			mysqlnd_fetch_lengths((r))
#define mysql_fetch_row(r)				mysqlnd_fetch_row_c((r))
#define mysql_field_count(r)			mysqlnd_field_count((r))
#define mysql_field_seek(r,o)			mysqlnd_field_seek((r), (o))
#define mysql_field_tell(r)				mysqlnd_field_tell((r))
#define mysql_init(a)					mysqlnd_connection_init((a), false)
#define mysql_insert_id(r)				mysqlnd_insert_id((r))
#define mysql_kill(r,n)					mysqlnd_kill((r), (n))
#define mysql_list_dbs(c, wild)			mysqlnd_list_dbs((c), (wild))
#define mysql_list_processes(c)			mysqlnd_list_processes((c))
#define mysql_list_tables(c, wild)		mysqlnd_list_tables((c), (wild))
#define mysql_more_results(r)			mysqlnd_more_results((r))
#define mysql_next_result(r)			mysqlnd_next_result((r))
#define mysql_num_fields(r)				mysqlnd_num_fields((r))
#define mysql_num_rows(r)				mysqlnd_num_rows((r))
#define mysql_ping(r)					mysqlnd_ping((r))
#define mysql_real_escape_string(r,a,b,c) mysqlnd_real_escape_string((r), (a), (b), (c))
#define mysql_real_query(r,a,b)			mysqlnd_query((r), (a), (b))
#define mysql_refresh(conn, options)	mysqlnd_refresh((conn), (options))
#define mysql_rollback(r)				mysqlnd_rollback((r), TRANS_COR_NO_OPT, NULL)
#define mysql_select_db(r,a)			mysqlnd_select_db((r), (a) ,strlen((a)))
#define mysql_set_server_option(r,o)	mysqlnd_set_server_option((r), (o))
#define mysql_set_character_set(r,a)	mysqlnd_set_character_set((r), (a))
#define mysql_sqlstate(r)				mysqlnd_sqlstate((r))
#define mysql_ssl_set(c,key,cert,ca,capath,cipher)	mysqlnd_ssl_set((c), (key), (cert), (ca), (capath), (cipher))
#define mysql_stmt_affected_rows(s)		mysqlnd_stmt_affected_rows((s))
#define mysql_stmt_field_count(s)		mysqlnd_stmt_field_count((s))
#define mysql_stmt_param_count(s)		mysqlnd_stmt_param_count((s))
#define mysql_stmt_num_rows(s)			mysqlnd_stmt_num_rows((s))
#define mysql_stmt_insert_id(s)			mysqlnd_stmt_insert_id((s))
#define mysql_stmt_close(s)				mysqlnd_stmt_close((s), 0)
#define mysql_stmt_bind_param(s,b)		mysqlnd_stmt_bind_param((s), (b))
#define mysql_stmt_bind_result(s,b)		mysqlnd_stmt_bind_result((s), (b))
#define mysql_stmt_errno(s)				mysqlnd_stmt_errno((s))
#define mysql_stmt_error(s)				mysqlnd_stmt_error((s))
#define mysql_stmt_sqlstate(s)			mysqlnd_stmt_sqlstate((s))
#define mysql_stmt_prepare(s,q,l)		mysqlnd_stmt_prepare((s), (q), (l))
#define mysql_stmt_execute(s)			mysqlnd_stmt_execute((s))
#define mysql_stmt_reset(s)				mysqlnd_stmt_reset((s))
#define mysql_stmt_store_result(s)		mysqlnd_stmt_store_result((s))
#define mysql_stmt_free_result(s)		mysqlnd_stmt_free_result((s))
#define mysql_stmt_data_seek(s,r)		mysqlnd_stmt_data_seek((s), (r))
#define mysql_stmt_send_long_data(s,p,d,l) mysqlnd_stmt_send_long_data((s), (p), (d), (l))
#define mysql_stmt_attr_get(s,a,v)		mysqlnd_stmt_attr_get((s), (a), (v))
#define mysql_stmt_attr_set(s,a,v)		mysqlnd_stmt_attr_set((s), (a), (v))
#define mysql_stmt_result_metadata(s)	mysqlnd_stmt_result_metadata((s))
#define mysql_stmt_next_result(s)		mysqlnd_stmt_next_result((s))
#define mysql_stmt_more_results(s)		mysqlnd_stmt_more_results((s))
#define mysql_thread_safe()				mysqlnd_thread_safe()
#define mysql_info(r)					mysqlnd_info((r))
#define mysql_options(c,a,v)			mysqlnd_options((c), (a), (v))
#define mysql_options4(c,a,k,v)			mysqlnd_options4((c), (a), (k), (v))
#define mysql_stmt_init(r)				mysqlnd_stmt_init((r))
#define mysql_free_result(r)			mysqlnd_free_result((r), false)
#define mysql_store_result(r)			mysqlnd_store_result((r))
#define mysql_use_result(r)				mysqlnd_use_result((r))
#define mysql_async_store_result(r)		mysqlnd_async_store_result((r))
#define mysql_thread_id(r)				mysqlnd_thread_id((r))
#define mysql_get_client_info()			mysqlnd_get_client_info()
#define mysql_get_client_version()		mysqlnd_get_client_version()
#define mysql_get_host_info(r)			mysqlnd_get_host_info((r))
#define mysql_get_proto_info(r)			mysqlnd_get_proto_info((r))
#define mysql_get_server_info(r)		mysqlnd_get_server_info((r))
#define mysql_get_server_version(r)		mysqlnd_get_server_version((r))
#define mysql_warning_count(r)			mysqlnd_warning_count((r))
#define mysql_eof(r)					(((r)->unbuf && (r)->unbuf->eof_reached) || (r)->stored_data)

#define REFRESH_GRANT		MYSQLND_REFRESH_GRANT
#define REFRESH_LOG			MYSQLND_REFRESH_LOG
#define REFRESH_TABLES		MYSQLND_REFRESH_TABLES
#define REFRESH_HOSTS		MYSQLND_REFRESH_HOSTS
#define REFRESH_STATUS		MYSQLND_REFRESH_STATUS
#define REFRESH_THREADS		MYSQLND_REFRESH_THREADS
#define REFRESH_SLAVE		MYSQLND_REFRESH_SLAVE
#define REFRESH_REPLICA		MYSQLND_REFRESH_REPLICA
#define REFRESH_MASTER		MYSQLND_REFRESH_MASTER
#define REFRESH_BACKUP_LOG	MYSQLND_REFRESH_BACKUP_LOG

#endif /* MYSQLND_LIBMYSQL_COMPAT_H */
ext/uri/php_uri_common.h000064400000017545151730542340011352 0ustar00/*
   +----------------------------------------------------------------------+
   | Copyright (c) The PHP Group                                          |
   +----------------------------------------------------------------------+
   | This source file is subject to version 3.01 of the PHP license,      |
   | that is bundled with this package in the file LICENSE, and is        |
   | available through the world-wide-web at the following url:           |
   | https://www.php.net/license/3_01.txt                                 |
   | If you did not receive a copy of the PHP license and are unable to   |
   | obtain it through the world-wide-web, please send a note to          |
   | license@php.net so we can mail you a copy immediately.               |
   +----------------------------------------------------------------------+
   | Authors: Máté Kocsis <kocsismate@php.net>                            |
   +----------------------------------------------------------------------+
*/

#ifndef PHP_URI_COMMON_H
#define PHP_URI_COMMON_H

extern zend_class_entry *php_uri_ce_rfc3986_uri;
extern zend_class_entry *php_uri_ce_whatwg_url;
extern zend_class_entry *php_uri_ce_comparison_mode;
extern zend_class_entry *php_uri_ce_exception;
extern zend_class_entry *php_uri_ce_error;
extern zend_class_entry *php_uri_ce_invalid_uri_exception;
extern zend_class_entry *php_uri_ce_whatwg_invalid_url_exception;
extern zend_class_entry *php_uri_ce_whatwg_url_validation_error_type;
extern zend_class_entry *php_uri_ce_whatwg_url_validation_error;

typedef enum php_uri_recomposition_mode {
	PHP_URI_RECOMPOSITION_MODE_RAW_ASCII,
	PHP_URI_RECOMPOSITION_MODE_RAW_UNICODE,
	PHP_URI_RECOMPOSITION_MODE_NORMALIZED_ASCII,
	PHP_URI_RECOMPOSITION_MODE_NORMALIZED_UNICODE,
} php_uri_recomposition_mode;

typedef enum php_uri_component_read_mode {
	PHP_URI_COMPONENT_READ_MODE_RAW,
	PHP_URI_COMPONENT_READ_MODE_NORMALIZED_ASCII,
	PHP_URI_COMPONENT_READ_MODE_NORMALIZED_UNICODE,
} php_uri_component_read_mode;

typedef zend_result (*php_uri_property_handler_read)(void *uri, php_uri_component_read_mode read_mode, zval *retval);

typedef zend_result (*php_uri_property_handler_write)(void *uri, zval *value, zval *errors);

typedef enum php_uri_property_name {
	PHP_URI_PROPERTY_NAME_SCHEME,
	PHP_URI_PROPERTY_NAME_USERNAME,
	PHP_URI_PROPERTY_NAME_PASSWORD,
	PHP_URI_PROPERTY_NAME_HOST,
	PHP_URI_PROPERTY_NAME_PORT,
	PHP_URI_PROPERTY_NAME_PATH,
	PHP_URI_PROPERTY_NAME_QUERY,
	PHP_URI_PROPERTY_NAME_FRAGMENT,
} php_uri_property_name;

typedef struct php_uri_property_handler {
	php_uri_property_handler_read read;
	php_uri_property_handler_write write;
} php_uri_property_handler;

typedef struct php_uri_parser {
	/**
	 * Name (the FQCN) of the URI parser. The "" name is reserved for the handler of the legacy parse_url().
	 */
	const char *name;

	/**
	 * Parses a URI string into a URI.
	 *
	 * If the URI string is valid, a URI is returned. In case of failure, NULL is
	 * returned.
	 *
	 * The errors by-ref parameter can contain errors that occurred during parsing.
	 * If the input value is NULL, or there were no errors, the errors parameter should
	 * not be modified.
	 *
	 * If the URI string is valid and the base_url URI is not NULL, the URI object
	 * is resolved against the base_url.
	 *
	 * If the silent parameter is true, a Uri\InvalidUriException instance must be thrown.
	 * If the parameter is false, the possible errors should be handled by the caller.
	 *
	 * @param uri_str The input string that is going to be parsed
	 * @param uri_str_len Length of the input string
	 * @param base_url The base URI if reference resolution should be performed, otherwise NULL
	 * @param errors An out parameter that stores additional error information
	 * @param silent Whether to throw a Uri\InvalidUriException in case of failure
	 */
	void *(*parse)(const char *uri_str, size_t uri_str_len, const void *base_url, zval *errors, bool silent);

	/**
	 * Clones a URI to a new URI.
	 *
	 * A deep-clone must be performed that copies all pointer members to a new memory address.
	 * @param uri The input URI
	 * @return The cloned URI
	 */
	void *(*clone)(void *uri);

	/**
	 * Recomposes a URI as a string according to the recomposition_mode and exclude_fragment parameters.
	 * The returned zend_string must not be persistent.
	 *
	 * Recomposition_mode can be one of the following:
	 * - PHP_URI_RECOMPOSITION_MODE_RAW_ASCII: Recomposes the raw, non-normalized variant of the URI as a string that must only contain ASCII characters
	 * - PHP_URI_RECOMPOSITION_MODE_RAW_UNICODE: Recomposes the raw, non-normalized variant of the URI as a string that may contain Unicode codepoints
	 * - PHP_URI_RECOMPOSITION_MODE_NORMALIZED_ASCII: Recomposes the normalized variant of the URI as a string that must only contain ASCII characters
	 * - PHP_URI_RECOMPOSITION_MODE_NORMALIZED_UNICODE: Recomposes the normalized variant of the URI as a string that may contain Unicode codepoints
	 *
	 * @param uri The input URI
	 * @param recomposition_mode The type of recomposition
	 * @param exclude_fragment Whether the fragment component should be part of the recomposed URI
	 * @return The recomposed URI as a non-persistent zend_string
	 */
	zend_string *(*to_string)(void *uri, php_uri_recomposition_mode recomposition_mode, bool exclude_fragment);

	/**
	 * Destroy (free) the provided URI.
	 *
	 * @param uri The URI to free. Must do nothing if NULL.
	 */
	void (*destroy)(void *uri);

	struct {
		php_uri_property_handler scheme;
		php_uri_property_handler username;
		php_uri_property_handler password;
		php_uri_property_handler host;
		php_uri_property_handler port;
		php_uri_property_handler path;
		php_uri_property_handler query;
		php_uri_property_handler fragment;
	} property_handler;
} php_uri_parser;

typedef struct php_uri_internal {
	const php_uri_parser *parser;
	void *uri;
} php_uri_internal;

typedef struct php_uri_object {
	const php_uri_parser *parser;
	void *uri;
	zend_object std;
} php_uri_object;

static inline php_uri_object *php_uri_object_from_obj(zend_object *object) {
	return (php_uri_object*)((char*)(object) - XtOffsetOf(php_uri_object, std));
}

#define Z_URI_OBJECT_P(zv) php_uri_object_from_obj(Z_OBJ_P((zv)))

PHPAPI php_uri_object *php_uri_object_create(zend_class_entry *class_type, const php_uri_parser *parser);
PHPAPI void php_uri_object_handler_free(zend_object *object);
PHPAPI zend_object *php_uri_object_handler_clone(zend_object *object);

#define PHP_URI_PARSER_RFC3986 "Uri\\Rfc3986\\Uri"
#define PHP_URI_PARSER_WHATWG "Uri\\WhatWg\\Url"
#define PHP_URI_PARSER_PHP_PARSE_URL "parse_url"
#define PHP_URI_SERIALIZE_URI_FIELD_NAME "uri"

static inline const php_uri_property_handler *php_uri_parser_property_handler_by_name(const php_uri_parser *parser, php_uri_property_name property_name)
{
	switch (property_name) {
		case PHP_URI_PROPERTY_NAME_SCHEME:
			return &parser->property_handler.scheme;
		case PHP_URI_PROPERTY_NAME_USERNAME:
			return &parser->property_handler.username;
		case PHP_URI_PROPERTY_NAME_PASSWORD:
			return &parser->property_handler.password;
		case PHP_URI_PROPERTY_NAME_HOST:
			return &parser->property_handler.host;
		case PHP_URI_PROPERTY_NAME_PORT:
			return &parser->property_handler.port;
		case PHP_URI_PROPERTY_NAME_PATH:
			return &parser->property_handler.path;
		case PHP_URI_PROPERTY_NAME_QUERY:
			return &parser->property_handler.query;
		case PHP_URI_PROPERTY_NAME_FRAGMENT:
			return &parser->property_handler.fragment;
		EMPTY_SWITCH_DEFAULT_CASE()
	}
}

void php_uri_property_read_helper(INTERNAL_FUNCTION_PARAMETERS, php_uri_property_name property_name, php_uri_component_read_mode component_read_mode);
void php_uri_property_write_str_helper(INTERNAL_FUNCTION_PARAMETERS, php_uri_property_name property_name);
void php_uri_property_write_str_or_null_helper(INTERNAL_FUNCTION_PARAMETERS, php_uri_property_name property_name);
void php_uri_property_write_long_or_null_helper(INTERNAL_FUNCTION_PARAMETERS, php_uri_property_name property_name);

#endif
ext/uri/uri_parser_whatwg.h000064400000002622151730542350012057 0ustar00/*
   +----------------------------------------------------------------------+
   | Copyright (c) The PHP Group                                          |
   +----------------------------------------------------------------------+
   | This source file is subject to version 3.01 of the PHP license,      |
   | that is bundled with this package in the file LICENSE, and is        |
   | available through the world-wide-web at the following url:           |
   | https://www.php.net/license/3_01.txt                                 |
   | If you did not receive a copy of the PHP license and are unable to   |
   | obtain it through the world-wide-web, please send a note to          |
   | license@php.net so we can mail you a copy immediately.               |
   +----------------------------------------------------------------------+
   | Authors: Máté Kocsis <kocsismate@php.net>                            |
   +----------------------------------------------------------------------+
*/

#ifndef PHP_URI_PARSER_WHATWG_H
#define PHP_URI_PARSER_WHATWG_H

#include "php_uri_common.h"
#include "lexbor/url/url.h"

PHPAPI extern const php_uri_parser php_uri_parser_whatwg;

lxb_url_t *php_uri_parser_whatwg_parse_ex(const char *uri_str, size_t uri_str_len, const lxb_url_t *lexbor_base_url, zval *errors, bool silent);

PHP_RINIT_FUNCTION(uri_parser_whatwg);
ZEND_MODULE_POST_ZEND_DEACTIVATE_D(uri_parser_whatwg);

#endif
ext/uri/php_uri.h000064400000027316151730542350010000 0ustar00/*
   +----------------------------------------------------------------------+
   | Copyright (c) The PHP Group                                          |
   +----------------------------------------------------------------------+
   | This source file is subject to version 3.01 of the PHP license,      |
   | that is bundled with this package in the file LICENSE, and is        |
   | available through the world-wide-web at the following url:           |
   | https://www.php.net/license/3_01.txt                                 |
   | If you did not receive a copy of the PHP license and are unable to   |
   | obtain it through the world-wide-web, please send a note to          |
   | license@php.net so we can mail you a copy immediately.               |
   +----------------------------------------------------------------------+
   | Authors: Máté Kocsis <kocsismate@php.net>                            |
   +----------------------------------------------------------------------+
*/

#ifndef PHP_URI_H
#define PHP_URI_H

#include "php_uri_common.h"

extern zend_module_entry uri_module_entry;
#define phpext_uri_ptr &uri_module_entry

typedef struct php_uri {
	zend_string *scheme;
	zend_string *user;
	zend_string *password;
	zend_string *host;
	/* port is a zend_long to match the userland port getter, which
	 * returns the port in zval. */
	zend_long port;
	zend_string *path;
	zend_string *query;
	zend_string *fragment;
} php_uri;

/**
 * Registers a URI parser. The parser must have a unique name.
 *
 * @param uri_parser The URI parser
 * @return SUCCESS in case of success, FAILURE otherwise
 */
PHPAPI zend_result php_uri_parser_register(const php_uri_parser *uri_parser);

/**
 * Returns the registered URI parser based on uri_parser_name.
 *
 * @param uri_parser_name The URI parser name
 * @return The URI parser
 */
PHPAPI const php_uri_parser *php_uri_get_parser(zend_string *uri_parser_name);

ZEND_ATTRIBUTE_NONNULL PHPAPI php_uri_internal *php_uri_parse(const php_uri_parser *uri_parser, const char *uri_str, size_t uri_str_len, bool silent);

/**
 * Retrieves the scheme component based on the read_mode and passes it to the zv ZVAL in case of success.
 * 
 * Read_mode can be one of the following:
 * - PHP_URI_COMPONENT_READ_MODE_RAW: Retrieves the raw, non-normalized variant of the URI component
 * - PHP_URI_COMPONENT_READ_MODE_NORMALIZED_ASCII: Retrieves the normalized variant of the requested URI component that must only contain ASCII characters
 * - PHP_URI_COMPONENT_READ_MODE_NORMALIZED_UNICODE: Retrieves the normalized variant of the requested URI component that may contain Unicode codepoints
 *
 * @param internal_uri The internal URI whose uri member is used to retrieve the component
 * @param read_mode The read mode
 * @param zv The output parameter containing the retrieved component as a ZVAL (either IS_STRING or IS_NULL).
 * @return SUCCESS in case of success, FAILURE otherwise.
 */
ZEND_ATTRIBUTE_NONNULL PHPAPI zend_result php_uri_get_scheme(const php_uri_internal *internal_uri, php_uri_component_read_mode read_mode, zval *zv);

/**
 * Retrieves the username component based on the read_mode and passes it to the zv ZVAL in case of success.
 *
 * Read_mode can be one of the following:
 * - PHP_URI_COMPONENT_READ_MODE_RAW: Retrieves the raw, non-normalized variant of the URI component
 * - PHP_URI_COMPONENT_READ_MODE_NORMALIZED_ASCII: Retrieves the normalized variant of the requested URI component that must only contain ASCII characters
 * - PHP_URI_COMPONENT_READ_MODE_NORMALIZED_UNICODE: Retrieves the normalized variant of the requested URI component that may contain Unicode codepoints
 *
 * @param internal_uri The internal URI whose uri member is used to retrieve the component
 * @param read_mode The read mode
 * @param zv The output parameter containing the retrieved component as a ZVAL (either IS_STRING or IS_NULL).
 * @return SUCCESS in case of success, FAILURE otherwise.
 */
ZEND_ATTRIBUTE_NONNULL PHPAPI zend_result php_uri_get_username(const php_uri_internal *internal_uri, php_uri_component_read_mode read_mode, zval *zv);

/**
 * Retrieves the password component based on the read_mode and passes it to the zv ZVAL in case of success.
 *
 * Read_mode can be one of the following:
 * - PHP_URI_COMPONENT_READ_MODE_RAW: Retrieves the raw, non-normalized variant of the URI component
 * - PHP_URI_COMPONENT_READ_MODE_NORMALIZED_ASCII: Retrieves the normalized variant of the requested URI component that must only contain ASCII characters
 * - PHP_URI_COMPONENT_READ_MODE_NORMALIZED_UNICODE: Retrieves the normalized variant of the requested URI component that may contain Unicode codepoints
 *
 * @param internal_uri The internal URI whose uri member is used to retrieve the component
 * @param read_mode The read mode
 * @param zv The output parameter containing the retrieved component as a ZVAL (either IS_STRING or IS_NULL).
 * @return SUCCESS in case of success, FAILURE otherwise.
 */
ZEND_ATTRIBUTE_NONNULL PHPAPI zend_result php_uri_get_password(const php_uri_internal *internal_uri, php_uri_component_read_mode read_mode, zval *zv);

/**
 * Retrieves the host component based on the read_mode and passes it to the zv ZVAL in case of success.
 *
 * Read_mode can be one of the following:
 * - PHP_URI_COMPONENT_READ_MODE_RAW: Retrieves the raw, non-normalized variant of the URI component
 * - PHP_URI_COMPONENT_READ_MODE_NORMALIZED_ASCII: Retrieves the normalized variant of the requested URI component that must only contain ASCII characters
 * - PHP_URI_COMPONENT_READ_MODE_NORMALIZED_UNICODE: Retrieves the normalized variant of the requested URI component that may contain Unicode codepoints
 *
 * @param internal_uri The internal URI whose uri member is used to retrieve the component
 * @param read_mode The read mode
 * @param zv The output parameter containing the retrieved component as a ZVAL (either IS_STRING or IS_NULL).
 * @return SUCCESS in case of success, FAILURE otherwise.
 */
ZEND_ATTRIBUTE_NONNULL PHPAPI zend_result php_uri_get_host(const php_uri_internal *internal_uri, php_uri_component_read_mode read_mode, zval *zv);

/**
 * Retrieves the port component based on the read_mode and passes it to the zv ZVAL in case of success.
 *
 * Read_mode can be one of the following:
 * - PHP_URI_COMPONENT_READ_MODE_RAW: Retrieves the raw, non-normalized variant of the URI component
 * - PHP_URI_COMPONENT_READ_MODE_NORMALIZED_ASCII: Retrieves the normalized variant of the requested URI component that must only contain ASCII characters
 * - PHP_URI_COMPONENT_READ_MODE_NORMALIZED_UNICODE: Retrieves the normalized variant of the requested URI component that may contain Unicode codepoints
 *
 * @param internal_uri The internal URI whose uri member is used to retrieve the component
 * @param read_mode The read mode
 * @param zv The output parameter containing the retrieved component as a ZVAL (either IS_LONG or IS_NULL).
 * @return SUCCESS in case of success, FAILURE otherwise.
 */
ZEND_ATTRIBUTE_NONNULL PHPAPI zend_result php_uri_get_port(const php_uri_internal *internal_uri, php_uri_component_read_mode read_mode, zval *zv);

/**
 * Retrieves the path component based on the read_mode and passes it to the zv ZVAL in case of success.
 *
 * Read_mode can be one of the following:
 * - PHP_URI_COMPONENT_READ_MODE_RAW: Retrieves the raw, non-normalized variant of the URI component
 * - PHP_URI_COMPONENT_READ_MODE_NORMALIZED_ASCII: Retrieves the normalized variant of the requested URI component that must only contain ASCII characters
 * - PHP_URI_COMPONENT_READ_MODE_NORMALIZED_UNICODE: Retrieves the normalized variant of the requested URI component that may contain Unicode codepoints
 *
 * @param internal_uri The internal URI whose uri member is used to retrieve the component
 * @param read_mode The read mode
 * @param zv The output parameter containing the retrieved component as a ZVAL (either IS_STRING or IS_NULL).
 * @return SUCCESS in case of success, FAILURE otherwise.
 */
ZEND_ATTRIBUTE_NONNULL PHPAPI zend_result php_uri_get_path(const php_uri_internal *internal_uri, php_uri_component_read_mode read_mode, zval *zv);

/**
 * Retrieves the query component based on the read_mode and passes it to the zv ZVAL in case of success.
 *
 * Read_mode can be one of the following:
 * - PHP_URI_COMPONENT_READ_MODE_RAW: Retrieves the raw, non-normalized variant of the URI component
 * - PHP_URI_COMPONENT_READ_MODE_NORMALIZED_ASCII: Retrieves the normalized variant of the requested URI component that must only contain ASCII characters
 * - PHP_URI_COMPONENT_READ_MODE_NORMALIZED_UNICODE: Retrieves the normalized variant of the requested URI component that may contain Unicode codepoints
 *
 * @param internal_uri The internal URI whose uri member is used to retrieve the component
 * @param read_mode The read mode
 * @param zv The output parameter containing the retrieved component as a ZVAL (either IS_STRING or IS_NULL).
 * @return SUCCESS in case of success, FAILURE otherwise.
 */
ZEND_ATTRIBUTE_NONNULL PHPAPI zend_result php_uri_get_query(const php_uri_internal *internal_uri, php_uri_component_read_mode read_mode, zval *zv);

/**
 * Retrieves the fragment component based on the read_mode and passes it to the zv ZVAL in case of success.
 *
 * Read_mode can be one of the following:
 * - PHP_URI_COMPONENT_READ_MODE_RAW: Retrieves the raw, non-normalized variant of the URI component
 * - PHP_URI_COMPONENT_READ_MODE_NORMALIZED_ASCII: Retrieves the normalized variant of the requested URI component that must only contain ASCII characters
 * - PHP_URI_COMPONENT_READ_MODE_NORMALIZED_UNICODE: Retrieves the normalized variant of the requested URI component that may contain Unicode codepoints
 *
 * @param internal_uri The internal URI whose uri member is used to retrieve the component
 * @param read_mode The read mode
 * @param zv The output parameter containing the retrieved component as a ZVAL (either IS_STRING or IS_NULL).
 * @return SUCCESS in case of success, FAILURE otherwise.
 */
ZEND_ATTRIBUTE_NONNULL PHPAPI zend_result php_uri_get_fragment(const php_uri_internal *internal_uri, php_uri_component_read_mode read_mode, zval *zv);

/**
 * Frees the uri member within the provided internal URI.
 *
 * @param internal_uri The internal URI
 */
ZEND_ATTRIBUTE_NONNULL PHPAPI void php_uri_free(php_uri_internal *internal_uri);

/**
 * Creates a new php_uri struct containing all the URI components. The components are retrieved based on the read_mode parameter.
 *
 * Read_mode can be one of the following:
 * - PHP_URI_COMPONENT_READ_MODE_RAW: Retrieves the raw, non-normalized variant of the URI component
 * - PHP_URI_COMPONENT_READ_MODE_NORMALIZED_ASCII: Retrieves the normalized variant of the requested URI component that must only contain ASCII characters
 * - PHP_URI_COMPONENT_READ_MODE_NORMALIZED_UNICODE: Retrieves the normalized variant of the requested URI component that may contain Unicode codepoints
 *
 * @param uri_parser The URI parser whose parse() handler is called
 * @param uri_str The input string that is going to be parsed
 * @param uri_str_len Length of the input string
 * @param read_mode The read mode based on which components are retrieved
 * @param silent Whether to throw a Uri\InvalidUriException in case of failure
 * @return The created php_uri struct in case of success, NULL otherwise
 */
ZEND_ATTRIBUTE_NONNULL PHPAPI php_uri *php_uri_parse_to_struct(
		const php_uri_parser *uri_parser, const char *uri_str, size_t uri_str_len, php_uri_component_read_mode read_mode, bool silent
);

/**
 * Frees the provided php_uri struct.
 *
 * @param uri The php_uri struct to free
 */
ZEND_ATTRIBUTE_NONNULL PHPAPI void php_uri_struct_free(php_uri *uri);

ZEND_ATTRIBUTE_NONNULL_ARGS(1, 2) PHPAPI void php_uri_instantiate_uri(
		INTERNAL_FUNCTION_PARAMETERS, const zend_string *uri_str, const php_uri_object *base_url_object,
		bool should_throw, bool should_update_this_object, zval *errors_zv
);

#endif
ext/uri/uri_parser_php_parse_url.h000064400000002347151730542360013426 0ustar00/*
   +----------------------------------------------------------------------+
   | Copyright (c) The PHP Group                                          |
   +----------------------------------------------------------------------+
   | This source file is subject to version 3.01 of the PHP license,      |
   | that is bundled with this package in the file LICENSE, and is        |
   | available through the world-wide-web at the following url:           |
   | https://www.php.net/license/3_01.txt                                 |
   | If you did not receive a copy of the PHP license and are unable to   |
   | obtain it through the world-wide-web, please send a note to          |
   | license@php.net so we can mail you a copy immediately.               |
   +----------------------------------------------------------------------+
   | Authors: Máté Kocsis <kocsismate@php.net>                            |
   |          Tim Düsterhus <timwolla@php.net>                            |
   +----------------------------------------------------------------------+
*/

#ifndef PHP_URI_PARSER_PHP_PARSE_URL_H
#define PHP_URI_PARSER_PHP_PARSE_URL_H

#include "php_uri_common.h"

PHPAPI extern const php_uri_parser php_uri_parser_php_parse_url;

#endif
ext/uri/uri_parser_rfc3986.h000064400000003111151730542360011655 0ustar00/*
   +----------------------------------------------------------------------+
   | Copyright (c) The PHP Group                                          |
   +----------------------------------------------------------------------+
   | This source file is subject to version 3.01 of the PHP license,      |
   | that is bundled with this package in the file LICENSE, and is        |
   | available through the world-wide-web at the following url:           |
   | https://www.php.net/license/3_01.txt                                 |
   | If you did not receive a copy of the PHP license and are unable to   |
   | obtain it through the world-wide-web, please send a note to          |
   | license@php.net so we can mail you a copy immediately.               |
   +----------------------------------------------------------------------+
   | Authors: Máté Kocsis <kocsismate@php.net>                            |
   +----------------------------------------------------------------------+
*/

#ifndef PHP_URI_PARSER_RFC3986_H
#define PHP_URI_PARSER_RFC3986_H

#include "php_uri_common.h"

PHPAPI extern const php_uri_parser php_uri_parser_rfc3986;

typedef struct php_uri_parser_rfc3986_uris php_uri_parser_rfc3986_uris;

zend_result php_uri_parser_rfc3986_userinfo_read(void *uri, php_uri_component_read_mode read_mode, zval *retval);
zend_result php_uri_parser_rfc3986_userinfo_write(void *uri, zval *value, zval *errors);

php_uri_parser_rfc3986_uris *php_uri_parser_rfc3986_parse_ex(const char *uri_str, size_t uri_str_len, const php_uri_parser_rfc3986_uris *uriparser_base_url, bool silent);

#endif
ext/sodium/php_libsodium.h000064400000005155151730542370011670 0ustar00/*
   +----------------------------------------------------------------------+
   | Copyright (c) The PHP Group                                          |
   +----------------------------------------------------------------------+
   | This source file is subject to version 3.01 of the PHP license,      |
   | that is bundled with this package in the file LICENSE, and is        |
   | available through the world-wide-web at the following url:           |
   | https://www.php.net/license/3_01.txt                                 |
   | If you did not receive a copy of the PHP license and are unable to   |
   | obtain it through the world-wide-web, please send a note to          |
   | license@php.net so we can mail you a copy immediately.               |
   +----------------------------------------------------------------------+
   | Authors: Frank Denis <jedisct1@php.net>                              |
   +----------------------------------------------------------------------+
*/

#ifndef PHP_LIBSODIUM_H
#define PHP_LIBSODIUM_H

extern zend_module_entry sodium_module_entry;
#define phpext_sodium_ptr &sodium_module_entry

#define PHP_SODIUM_VERSION PHP_VERSION

#ifdef ZTS
# include "TSRM.h"
#endif

#include <sodium.h>

#define SODIUM_LIBRARY_VERSION() (char *) (void *) sodium_version_string()

#define SODIUM_CRYPTO_BOX_KEYPAIRBYTES() crypto_box_SECRETKEYBYTES + crypto_box_PUBLICKEYBYTES

#define SODIUM_CRYPTO_KX_KEYPAIRBYTES() crypto_kx_SECRETKEYBYTES + crypto_kx_PUBLICKEYBYTES

#define SODIUM_CRYPTO_SIGN_KEYPAIRBYTES() crypto_sign_SECRETKEYBYTES + crypto_sign_PUBLICKEYBYTES

#if SODIUM_LIBRARY_VERSION_MAJOR > 9 || (SODIUM_LIBRARY_VERSION_MAJOR == 9 && SODIUM_LIBRARY_VERSION_MINOR >= 6)

/**
 * MEMLIMIT is normalized to KB even though sodium uses Bytes in order to
 * present a consistent user-facing API.
 *
 * Threads are fixed at 1 by libsodium.
 *
 * When updating these values, synchronize ext/standard/php_password.h values.
 */
#if defined(PHP_PASSWORD_ARGON2_MEMORY_COST)
#define PHP_SODIUM_PWHASH_MEMLIMIT PHP_PASSWORD_ARGON2_MEMORY_COST
#else
#define PHP_SODIUM_PWHASH_MEMLIMIT (64 << 10)
#endif
#if defined(PHP_PASSWORD_ARGON2_TIME_COST)
#define PHP_SODIUM_PWHASH_OPSLIMIT PHP_PASSWORD_ARGON2_TIME_COST
#else
#define PHP_SODIUM_PWHASH_OPSLIMIT 4
#endif
#if defined(PHP_SODIUM_PWHASH_THREADS)
#define PHP_SODIUM_PWHASH_THREADS PHP_SODIUM_PWHASH_THREADS
#else
#define PHP_SODIUM_PWHASH_THREADS 1
#endif

#endif

PHP_MINIT_FUNCTION(sodium);
PHP_MINIT_FUNCTION(sodium_password_hash);
PHP_MSHUTDOWN_FUNCTION(sodium);
PHP_RINIT_FUNCTION(sodium);
PHP_RSHUTDOWN_FUNCTION(sodium);
PHP_MINFO_FUNCTION(sodium);

#endif	/* PHP_LIBSODIUM_H */
ext/mysqli/mysqli_mysqlnd.h000064400000004607151730542370012136 0ustar00/*
  +----------------------------------------------------------------------+
  | Copyright (c) The PHP Group                                          |
  +----------------------------------------------------------------------+
  | This source file is subject to version 3.01 of the PHP license,      |
  | that is bundled with this package in the file LICENSE, and is        |
  | available through the world-wide-web at the following url:           |
  | https://www.php.net/license/3_01.txt                                 |
  | If you did not receive a copy of the PHP license and are unable to   |
  | obtain it through the world-wide-web, please send a note to          |
  | license@php.net so we can mail you a copy immediately.               |
  +----------------------------------------------------------------------+
  | Authors: Georg Richter <georg@php.net>                               |
  |          Andrey Hristov <andrey@php.net>                             |
  |          Ulf Wendel <uw@php.net>                                     |
  +----------------------------------------------------------------------+

*/

#ifndef MYSQLI_MYSQLND_H
#define MYSQLI_MYSQLND_H

#include "ext/mysqlnd/mysqlnd_libmysql_compat.h"
#include "ext/mysqlnd/mysqlnd_portability.h"

/* Here comes non-libmysql API to have less ifdefs in mysqli*/
#define MYSQLI_CLOSE_EXPLICIT                  MYSQLND_CLOSE_EXPLICIT
#define MYSQLI_CLOSE_IMPLICIT                  MYSQLND_CLOSE_IMPLICIT
#define MYSQLI_CLOSE_DISCONNECTED              MYSQLND_CLOSE_DISCONNECTED

#define mysqli_result_is_unbuffered(r)	((r)->unbuf)
#define mysqli_result_is_unbuffered_and_not_everything_is_fetched(r)	((r)->unbuf && !(r)->unbuf->eof_reached)
#define mysqli_server_status(c)			mysqlnd_get_server_status((c))
#define mysqli_stmt_get_id(s)			((s)->data->stmt_id)
#define mysqli_stmt_warning_count(s)	mysqlnd_stmt_warning_count((s))
#define mysqli_stmt_server_status(s)	mysqlnd_stmt_server_status((s))
#define mysqli_stmt_get_connection(s)	(s)->data->conn
#define mysqli_close(c, how)			mysqlnd_close((c), (how))
#define mysqli_stmt_close(c, implicit)	mysqlnd_stmt_close((c), (implicit))
#define mysqli_free_result(r, implicit)	mysqlnd_free_result((r), (implicit))
#define mysqli_async_query(c, q, l)		mysqlnd_async_query((c), (q), (l))
#define mysqli_change_user_silent(c, u, p, d, p_len)   mysqlnd_change_user_ex((c), (u), (p), (d), true, (size_t)(p_len))

#endif
ext/mysqli/php_mysqli_structs.h000064400000017010151730542400013007 0ustar00/*
  +----------------------------------------------------------------------+
  | Copyright (c) The PHP Group                                          |
  +----------------------------------------------------------------------+
  | This source file is subject to version 3.01 of the PHP license,      |
  | that is bundled with this package in the file LICENSE, and is        |
  | available through the world-wide-web at the following url:           |
  | https://www.php.net/license/3_01.txt                                 |
  | If you did not receive a copy of the PHP license and are unable to   |
  | obtain it through the world-wide-web, please send a note to          |
  | license@php.net so we can mail you a copy immediately.               |
  +----------------------------------------------------------------------+
  | Authors: Georg Richter <georg@php.net>                               |
  |          Andrey Hristov <andrey@php.net>                             |
  |          Ulf Wendel <uw@php.net>                                     |
  +----------------------------------------------------------------------+
*/

#ifndef PHP_MYSQLI_STRUCTS_H
#define PHP_MYSQLI_STRUCTS_H

/* A little hack to prevent build break, when mysql is used together with
 * c-client, which also defines LIST.
 */
#ifdef LIST
#undef LIST
#endif

#include "ext/mysqlnd/mysqlnd.h"
#include "mysqli_mysqlnd.h"


#define MYSQLI_VERSION_ID		101009

enum mysqli_status {
	MYSQLI_STATUS_UNKNOWN=0,
	MYSQLI_STATUS_INITIALIZED,
	MYSQLI_STATUS_VALID
};

typedef struct {
	char		*val;
	zend_ulong		buflen;
	zend_ulong		output_len;
	zend_ulong		type;
} VAR_BUFFER;

typedef struct {
	unsigned int	var_cnt;
	VAR_BUFFER		*buf;
	zval			*vars;
	my_bool			*is_null;
} BIND_BUFFER;

typedef struct {
	MYSQL_STMT	*stmt;
	BIND_BUFFER	param;
	BIND_BUFFER	result;
	char		*query;
} MY_STMT;

typedef struct {
	MYSQL			*mysql;
	zend_string		*hash_key;
	zval			li_read;
	php_stream		*li_stream;
	unsigned int 	multi_query;
	bool		persistent;
	int				async_result_fetch_type;
} MY_MYSQL;

typedef struct {
	void				*ptr;		/* resource: (mysql, result, stmt)   */
	void				*info;		/* additional buffer				 */
	enum mysqli_status	status;		/* object status */
} MYSQLI_RESOURCE;

typedef struct _mysqli_object {
	void 				*ptr;
	HashTable 			*prop_handler;
	zend_object 		zo;
} mysqli_object; /* extends zend_object */

static inline mysqli_object *php_mysqli_fetch_object(zend_object *obj) {
	return (mysqli_object *)((char*)(obj) - XtOffsetOf(mysqli_object, zo));
}

#define Z_MYSQLI_P(zv) php_mysqli_fetch_object(Z_OBJ_P((zv)))

typedef struct st_mysqli_warning MYSQLI_WARNING;

struct st_mysqli_warning {
	zval	reason;
	zval	sqlstate;
	int		errorno;
   	MYSQLI_WARNING	*next;
};

typedef struct _mysqli_property_entry {
	const char *pname;
	size_t pname_length;
	zend_result (*r_func)(mysqli_object *obj, zval *retval, bool quiet);
	zend_result (*w_func)(mysqli_object *obj, zval *value);
} mysqli_property_entry;

typedef struct {
	zend_ptr_stack free_links;
} mysqli_plist_entry;

#ifdef PHP_WIN32
#define PHP_MYSQLI_API __declspec(dllexport)
#ifndef L64
#define L64(x) x##i64
#endif
typedef __int64 my_longlong;
#else
# if defined(__GNUC__) && __GNUC__ >= 4
#  define PHP_MYSQLI_API __attribute__ ((visibility("default")))
# else
#  define PHP_MYSQLI_API
# endif
#ifndef L64
#define L64(x) x##LL
#endif
typedef int64_t my_longlong;
#endif

/* we need this for PRIu64 and PRId64 */
#include <inttypes.h>
#define MYSQLI_LLU_SPEC "%" PRIu64
#define MYSQLI_LL_SPEC "%" PRId64

#ifdef ZTS
#include "TSRM.h"
#endif

extern zend_class_entry *mysqli_link_class_entry;
extern zend_class_entry *mysqli_stmt_class_entry;
extern zend_class_entry *mysqli_result_class_entry;
extern zend_class_entry *mysqli_driver_class_entry;
extern zend_class_entry *mysqli_warning_class_entry;
extern zend_class_entry *mysqli_exception_class_entry;
extern int php_le_pmysqli(void);
extern void php_mysqli_dtor_p_elements(void *data);

extern void php_mysqli_close(MY_MYSQL * mysql, int close_type, int resource_status);

extern const zend_object_iterator_funcs php_mysqli_result_iterator_funcs;
extern zend_object_iterator *php_mysqli_result_get_iterator(zend_class_entry *ce, zval *object, int by_ref);

extern void php_mysqli_fetch_into_hash_aux(zval *return_value, MYSQL_RES * result, zend_long fetchtype);

#define MYSQLI_DISABLE_MQ if (mysql->multi_query) { \
	mysql_set_server_option(mysql->mysql, MYSQL_OPTION_MULTI_STATEMENTS_OFF); \
	mysql->multi_query = 0; \
}

#define MYSQLI_ENABLE_MQ if (!mysql->multi_query) { \
	mysql_set_server_option(mysql->mysql, MYSQL_OPTION_MULTI_STATEMENTS_ON); \
	mysql->multi_query = 1; \
}

#define MYSQLI_REGISTER_RESOURCE_EX(__ptr, __zval)  \
	(Z_MYSQLI_P(__zval))->ptr = __ptr;

#define MYSQLI_RETVAL_RESOURCE(__ptr, __ce) \
	RETVAL_OBJ(mysqli_objects_new(__ce)); \
	MYSQLI_REGISTER_RESOURCE_EX(__ptr, return_value)

#define MYSQLI_REGISTER_RESOURCE(__ptr, __ce) \
{\
	zval *object = getThis(); \
	if (!object || !instanceof_function(Z_OBJCE_P(object), mysqli_link_class_entry)) { \
		object = return_value; \
		ZVAL_OBJ(object, mysqli_objects_new(__ce)); \
	} \
	MYSQLI_REGISTER_RESOURCE_EX(__ptr, object)\
}

#define MYSQLI_FETCH_RESOURCE(__ptr, __type, __id, __name, __check) \
{ \
	MYSQLI_RESOURCE *my_res; \
	mysqli_object *intern = Z_MYSQLI_P(__id); \
	if (!(my_res = (MYSQLI_RESOURCE *)intern->ptr)) {\
		zend_throw_error(NULL, "%s object is already closed", ZSTR_VAL(intern->zo.ce->name));\
		RETURN_THROWS();\
  	}\
	__ptr = (__type)my_res->ptr; \
	if (my_res->status < __check) { \
		zend_throw_error(NULL, "%s object is not fully initialized", ZSTR_VAL(intern->zo.ce->name)); \
		RETURN_THROWS();\
	}\
}

#define MYSQLI_FETCH_RESOURCE_BY_OBJ(__ptr, __type, __obj, __name, __check) \
{ \
	MYSQLI_RESOURCE *my_res; \
	if (!(my_res = (MYSQLI_RESOURCE *)(__obj->ptr))) {\
		zend_throw_error(NULL, "%s object is already closed", ZSTR_VAL(intern->zo.ce->name));\
		return;\
	}\
	__ptr = (__type)my_res->ptr; \
	if (my_res->status < __check) { \
		zend_throw_error(NULL, "%s object is not fully initialized", ZSTR_VAL(intern->zo.ce->name)); \
		return;\
	}\
}

#define MYSQLI_FETCH_RESOURCE_CONN(__ptr, __id, __check) \
{ \
	MYSQLI_FETCH_RESOURCE((__ptr), MY_MYSQL *, (__id), "mysqli_link", (__check)); \
	if (!(__ptr)->mysql) { \
		zend_throw_error(NULL, "%s object is not fully initialized", ZSTR_VAL(Z_OBJCE_P(__id)->name)); \
		RETURN_THROWS(); \
	} \
}

#define MYSQLI_FETCH_RESOURCE_STMT(__ptr, __id, __check) \
{ \
	MYSQLI_FETCH_RESOURCE((__ptr), MY_STMT *, (__id), "mysqli_stmt", (__check)); \
	ZEND_ASSERT((__ptr)->stmt && "Missing statement?"); \
}

#define MYSQLI_SET_STATUS(__id, __value) \
{ \
	mysqli_object *intern = Z_MYSQLI_P(__id); \
	((MYSQLI_RESOURCE *)intern->ptr)->status = __value; \
} \

#define MYSQLI_CLEAR_RESOURCE(__id) \
{ \
	mysqli_object *intern = Z_MYSQLI_P(__id); \
	efree(intern->ptr); \
	intern->ptr = NULL; \
}


ZEND_BEGIN_MODULE_GLOBALS(mysqli)
	zend_long			num_links;
	zend_long			max_links;
	zend_long 			num_active_persistent;
	zend_long 			num_inactive_persistent;
	zend_long			max_persistent;
	bool				allow_persistent;
	zend_ulong			default_port;
	char				*default_host;
	char				*default_user;
	char				*default_pw;
	char				*default_socket;
	bool				allow_local_infile;
	char				*local_infile_directory;
	zend_long			error_no;
	char				*error_msg;
	zend_long			report_mode;
	bool 				rollback_on_cached_plink;
ZEND_END_MODULE_GLOBALS(mysqli)

#define MyG(v) ZEND_MODULE_GLOBALS_ACCESSOR(mysqli, v)

#if defined(ZTS) && defined(COMPILE_DL_MYSQLI)
ZEND_TSRMLS_CACHE_EXTERN()
#endif

ZEND_EXTERN_MODULE_GLOBALS(mysqli)

#endif	/* PHP_MYSQLI_STRUCTS.H */
ext/hash/php_hash_snefru.h000064400000003052151730542400011615 0ustar00/*
   +----------------------------------------------------------------------+
   | Copyright (c) The PHP Group                                          |
   +----------------------------------------------------------------------+
   | This source file is subject to version 3.01 of the PHP license,      |
   | that is bundled with this package in the file LICENSE, and is        |
   | available through the world-wide-web at the following url:           |
   | https://www.php.net/license/3_01.txt                                 |
   | If you did not receive a copy of the PHP license and are unable to   |
   | obtain it through the world-wide-web, please send a note to          |
   | license@php.net so we can mail you a copy immediately.               |
   +----------------------------------------------------------------------+
   | Author: Michael Wallner <mike@php.net>                               |
   +----------------------------------------------------------------------+
*/

#ifndef PHP_HASH_SNEFRU_H
#define PHP_HASH_SNEFRU_H

/* SNEFRU-2.5a with 8 passes and 256 bit hash output
 * AKA "Xerox Secure Hash Function"
 */

/* SNEFRU context */
typedef struct {
	uint32_t state[16];
	uint32_t count[2];
	unsigned char length;
	unsigned char buffer[32];
} PHP_SNEFRU_CTX;
#define PHP_SNEFRU_SPEC "l16l2bb32"

PHP_HASH_API void PHP_SNEFRUInit(PHP_SNEFRU_CTX *, ZEND_ATTRIBUTE_UNUSED HashTable *);
PHP_HASH_API void PHP_SNEFRUUpdate(PHP_SNEFRU_CTX *, const unsigned char *, size_t);
PHP_HASH_API void PHP_SNEFRUFinal(unsigned char[32], PHP_SNEFRU_CTX *);

#endif
ext/hash/php_hash_sha.h000064400000011243151730542410011070 0ustar00/*
   +----------------------------------------------------------------------+
   | Copyright (c) The PHP Group                                          |
   +----------------------------------------------------------------------+
   | This source file is subject to version 3.01 of the PHP license,      |
   | that is bundled with this package in the file LICENSE, and is        |
   | available through the world-wide-web at the following url:           |
   | https://www.php.net/license/3_01.txt                                 |
   | If you did not receive a copy of the PHP license and are unable to   |
   | obtain it through the world-wide-web, please send a note to          |
   | license@php.net so we can mail you a copy immediately.               |
   +----------------------------------------------------------------------+
   | SHA1 Author: Stefan Esser <sesser@php.net>                           |
   | SHA256 Author: Sara Golemon <pollita@php.net>                        |
   +----------------------------------------------------------------------+
*/

#ifndef PHP_HASH_SHA_H
#define PHP_HASH_SHA_H

#include "ext/standard/sha1.h"

/* SHA224 context. */
typedef struct {
	uint32_t state[8];		/* state */
	uint32_t count[2];		/* number of bits, modulo 2^64 */
	unsigned char buffer[64];	/* input buffer */
} PHP_SHA224_CTX;
#define PHP_SHA224_SPEC "l8l2b64."

#define PHP_SHA224Init(ctx) PHP_SHA224InitArgs(ctx, NULL)
PHP_HASH_API void PHP_SHA224InitArgs(PHP_SHA224_CTX *, ZEND_ATTRIBUTE_UNUSED HashTable *);
PHP_HASH_API void PHP_SHA224Update(PHP_SHA224_CTX *, const unsigned char *, size_t);
PHP_HASH_API void PHP_SHA224Final(unsigned char[28], PHP_SHA224_CTX *);

/* SHA256 context. */
typedef struct {
	uint32_t state[8];		/* state */
	uint32_t count[2];		/* number of bits, modulo 2^64 */
	unsigned char buffer[64];	/* input buffer */
} PHP_SHA256_CTX;
#define PHP_SHA256_SPEC "l8l2b64."

#define PHP_SHA256Init(ctx) PHP_SHA256InitArgs(ctx, NULL)
PHP_HASH_API void PHP_SHA256InitArgs(PHP_SHA256_CTX *, ZEND_ATTRIBUTE_UNUSED HashTable *);
PHP_HASH_API void PHP_SHA256Update(PHP_SHA256_CTX *, const unsigned char *, size_t);

#if defined(__cplusplus) || defined(_MSC_VER)
# define PHP_STATIC_RESTRICT
#else
# define PHP_STATIC_RESTRICT static restrict
#endif

#if defined(__SSE2__)
void SHA256_Transform_sse2(uint32_t state[PHP_STATIC_RESTRICT 8], const uint8_t block[PHP_STATIC_RESTRICT 64], uint32_t W[PHP_STATIC_RESTRICT 64], uint32_t S[PHP_STATIC_RESTRICT 8]);
#endif

#if ((defined(__i386__) || defined(__x86_64__)) && defined(HAVE_IMMINTRIN_H)) || defined(_M_X64) || defined(_M_IX86)
# if defined(__SSSE3__) && defined(__SHA__)
#  define PHP_HASH_INTRIN_SHA_NATIVE 1
# elif defined(HAVE_FUNC_ATTRIBUTE_TARGET) || defined(_M_X64) || defined(_M_IX86)
#  define PHP_HASH_INTRIN_SHA_RESOLVER 1
# endif
#endif

#if defined(PHP_HASH_INTRIN_SHA_NATIVE) || defined(PHP_HASH_INTRIN_SHA_RESOLVER)
void SHA256_Transform_shani(uint32_t state[PHP_STATIC_RESTRICT 8], const uint8_t block[PHP_STATIC_RESTRICT 64]);
#endif

PHP_HASH_API void PHP_SHA256Final(unsigned char[32], PHP_SHA256_CTX *);

/* SHA384 context */
typedef struct {
	uint64_t state[8];	/* state */
	uint64_t count[2];	/* number of bits, modulo 2^128 */
	unsigned char buffer[128];	/* input buffer */
} PHP_SHA384_CTX;
#define PHP_SHA384_SPEC "q8q2b128."

#define PHP_SHA384Init(ctx) PHP_SHA384InitArgs(ctx, NULL)
PHP_HASH_API void PHP_SHA384InitArgs(PHP_SHA384_CTX *, ZEND_ATTRIBUTE_UNUSED HashTable *);
PHP_HASH_API void PHP_SHA384Update(PHP_SHA384_CTX *, const unsigned char *, size_t);
PHP_HASH_API void PHP_SHA384Final(unsigned char[48], PHP_SHA384_CTX *);

/* SHA512 context */
typedef struct {
	uint64_t state[8];	/* state */
	uint64_t count[2];	/* number of bits, modulo 2^128 */
	unsigned char buffer[128];	/* input buffer */
} PHP_SHA512_CTX;
#define PHP_SHA512_SPEC "q8q2b128."

#define PHP_SHA512Init(ctx) PHP_SHA512InitArgs(ctx, NULL)
PHP_HASH_API void PHP_SHA512InitArgs(PHP_SHA512_CTX *, ZEND_ATTRIBUTE_UNUSED HashTable *);
PHP_HASH_API void PHP_SHA512Update(PHP_SHA512_CTX *, const unsigned char *, size_t);
PHP_HASH_API void PHP_SHA512Final(unsigned char[64], PHP_SHA512_CTX *);

#define PHP_SHA512_256Init(ctx) PHP_SHA512_256InitArgs(ctx, NULL)
PHP_HASH_API void PHP_SHA512_256InitArgs(PHP_SHA512_CTX *, ZEND_ATTRIBUTE_UNUSED HashTable *);
#define PHP_SHA512_256Update PHP_SHA512Update
PHP_HASH_API void PHP_SHA512_256Final(unsigned char[32], PHP_SHA512_CTX *);

#define PHP_SHA512_224Init(ctx) PHP_SHA512_224InitArgs(ctx, NULL)
PHP_HASH_API void PHP_SHA512_224InitArgs(PHP_SHA512_CTX *, ZEND_ATTRIBUTE_UNUSED HashTable *);
#define PHP_SHA512_224Update PHP_SHA512Update
PHP_HASH_API void PHP_SHA512_224Final(unsigned char[28], PHP_SHA512_CTX *);

#endif /* PHP_HASH_SHA_H */
ext/hash/xxhash/xxhash.h000064400000633451151730542410011264 0ustar00/*
 * xxHash - Extremely Fast Hash algorithm
 * Header File
 * Copyright (C) 2012-2020 Yann Collet
 *
 * BSD 2-Clause License (https://www.opensource.org/licenses/bsd-license.php)
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions are
 * met:
 *
 *    * Redistributions of source code must retain the above copyright
 *      notice, this list of conditions and the following disclaimer.
 *    * Redistributions in binary form must reproduce the above
 *      copyright notice, this list of conditions and the following disclaimer
 *      in the documentation and/or other materials provided with the
 *      distribution.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
 * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 *
 * You can contact the author at:
 *   - xxHash homepage: https://www.xxhash.com
 *   - xxHash source repository: https://github.com/Cyan4973/xxHash
 */
/*!
 * @mainpage xxHash
 *
 * @file xxhash.h
 * xxHash prototypes and implementation
 */
/* TODO: update */
/* Notice extracted from xxHash homepage:

xxHash is an extremely fast hash algorithm, running at RAM speed limits.
It also successfully passes all tests from the SMHasher suite.

Comparison (single thread, Windows Seven 32 bits, using SMHasher on a Core 2 Duo @3GHz)

Name            Speed       Q.Score   Author
xxHash          5.4 GB/s     10
CrapWow         3.2 GB/s      2       Andrew
MurmurHash 3a   2.7 GB/s     10       Austin Appleby
SpookyHash      2.0 GB/s     10       Bob Jenkins
SBox            1.4 GB/s      9       Bret Mulvey
Lookup3         1.2 GB/s      9       Bob Jenkins
SuperFastHash   1.2 GB/s      1       Paul Hsieh
CityHash64      1.05 GB/s    10       Pike & Alakuijala
FNV             0.55 GB/s     5       Fowler, Noll, Vo
CRC32           0.43 GB/s     9
MD5-32          0.33 GB/s    10       Ronald L. Rivest
SHA1-32         0.28 GB/s    10

Q.Score is a measure of quality of the hash function.
It depends on successfully passing SMHasher test set.
10 is a perfect score.

Note: SMHasher's CRC32 implementation is not the fastest one.
Other speed-oriented implementations can be faster,
especially in combination with PCLMUL instruction:
https://fastcompression.blogspot.com/2019/03/presenting-xxh3.html?showComment=1552696407071#c3490092340461170735

A 64-bit version, named XXH64, is available since r35.
It offers much better speed, but for 64-bit applications only.
Name     Speed on 64 bits    Speed on 32 bits
XXH64       13.8 GB/s            1.9 GB/s
XXH32        6.8 GB/s            6.0 GB/s
*/

#if defined (__cplusplus)
extern "C" {
#endif

/* ****************************
 *  INLINE mode
 ******************************/
/*!
 * XXH_INLINE_ALL (and XXH_PRIVATE_API)
 * Use these build macros to inline xxhash into the target unit.
 * Inlining improves performance on small inputs, especially when the length is
 * expressed as a compile-time constant:
 *
 *      https://fastcompression.blogspot.com/2018/03/xxhash-for-small-keys-impressive-power.html
 *
 * It also keeps xxHash symbols private to the unit, so they are not exported.
 *
 * Usage:
 *     #define XXH_INLINE_ALL
 *     #include "xxhash.h"
 *
 * Do not compile and link xxhash.o as a separate object, as it is not useful.
 */
#if (defined(XXH_INLINE_ALL) || defined(XXH_PRIVATE_API)) \
    && !defined(XXH_INLINE_ALL_31684351384)
   /* this section should be traversed only once */
#  define XXH_INLINE_ALL_31684351384
   /* give access to the advanced API, required to compile implementations */
#  undef XXH_STATIC_LINKING_ONLY   /* avoid macro redef */
#  define XXH_STATIC_LINKING_ONLY
   /* make all functions private */
#  undef XXH_PUBLIC_API
#  if defined(__GNUC__)
#    define XXH_PUBLIC_API static __inline __attribute__((unused))
#  elif defined (__cplusplus) || (defined (__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L) /* C99 */)
#    define XXH_PUBLIC_API static inline
#  elif defined(_MSC_VER)
#    define XXH_PUBLIC_API static __inline
#  else
     /* note: this version may generate warnings for unused static functions */
#    define XXH_PUBLIC_API static
#  endif

   /*
    * This part deals with the special case where a unit wants to inline xxHash,
    * but "xxhash.h" has previously been included without XXH_INLINE_ALL,
    * such as part of some previously included *.h header file.
    * Without further action, the new include would just be ignored,
    * and functions would effectively _not_ be inlined (silent failure).
    * The following macros solve this situation by prefixing all inlined names,
    * avoiding naming collision with previous inclusions.
    */
   /* Before that, we unconditionally #undef all symbols,
    * in case they were already defined with XXH_NAMESPACE.
    * They will then be redefined for XXH_INLINE_ALL
    */
#  undef XXH_versionNumber
    /* XXH32 */
#  undef XXH32
#  undef XXH32_createState
#  undef XXH32_freeState
#  undef XXH32_reset
#  undef XXH32_update
#  undef XXH32_digest
#  undef XXH32_copyState
#  undef XXH32_canonicalFromHash
#  undef XXH32_hashFromCanonical
    /* XXH64 */
#  undef XXH64
#  undef XXH64_createState
#  undef XXH64_freeState
#  undef XXH64_reset
#  undef XXH64_update
#  undef XXH64_digest
#  undef XXH64_copyState
#  undef XXH64_canonicalFromHash
#  undef XXH64_hashFromCanonical
    /* XXH3_64bits */
#  undef XXH3_64bits
#  undef XXH3_64bits_withSecret
#  undef XXH3_64bits_withSeed
#  undef XXH3_64bits_withSecretandSeed
#  undef XXH3_createState
#  undef XXH3_freeState
#  undef XXH3_copyState
#  undef XXH3_64bits_reset
#  undef XXH3_64bits_reset_withSeed
#  undef XXH3_64bits_reset_withSecret
#  undef XXH3_64bits_update
#  undef XXH3_64bits_digest
#  undef XXH3_generateSecret
    /* XXH3_128bits */
#  undef XXH128
#  undef XXH3_128bits
#  undef XXH3_128bits_withSeed
#  undef XXH3_128bits_withSecret
#  undef XXH3_128bits_reset
#  undef XXH3_128bits_reset_withSeed
#  undef XXH3_128bits_reset_withSecret
#  undef XXH3_128bits_reset_withSecretandSeed
#  undef XXH3_128bits_update
#  undef XXH3_128bits_digest
#  undef XXH128_isEqual
#  undef XXH128_cmp
#  undef XXH128_canonicalFromHash
#  undef XXH128_hashFromCanonical
    /* Finally, free the namespace itself */
#  undef XXH_NAMESPACE

    /* employ the namespace for XXH_INLINE_ALL */
#  define XXH_NAMESPACE XXH_INLINE_
   /*
    * Some identifiers (enums, type names) are not symbols,
    * but they must nonetheless be renamed to avoid redeclaration.
    * Alternative solution: do not redeclare them.
    * However, this requires some #ifdefs, and has a more dispersed impact.
    * Meanwhile, renaming can be achieved in a single place.
    */
#  define XXH_IPREF(Id)   XXH_NAMESPACE ## Id
#  define XXH_OK XXH_IPREF(XXH_OK)
#  define XXH_ERROR XXH_IPREF(XXH_ERROR)
#  define XXH_errorcode XXH_IPREF(XXH_errorcode)
#  define XXH32_canonical_t  XXH_IPREF(XXH32_canonical_t)
#  define XXH64_canonical_t  XXH_IPREF(XXH64_canonical_t)
#  define XXH128_canonical_t XXH_IPREF(XXH128_canonical_t)
#  define XXH32_state_s XXH_IPREF(XXH32_state_s)
#  define XXH32_state_t XXH_IPREF(XXH32_state_t)
#  define XXH64_state_s XXH_IPREF(XXH64_state_s)
#  define XXH64_state_t XXH_IPREF(XXH64_state_t)
#  define XXH3_state_s  XXH_IPREF(XXH3_state_s)
#  define XXH3_state_t  XXH_IPREF(XXH3_state_t)
#  define XXH128_hash_t XXH_IPREF(XXH128_hash_t)
   /* Ensure the header is parsed again, even if it was previously included */
#  undef XXHASH_H_5627135585666179
#  undef XXHASH_H_STATIC_13879238742
#endif /* XXH_INLINE_ALL || XXH_PRIVATE_API */



/* ****************************************************************
 *  Stable API
 *****************************************************************/
#ifndef XXHASH_H_5627135585666179
#define XXHASH_H_5627135585666179 1


/*!
 * @defgroup public Public API
 * Contains details on the public xxHash functions.
 * @{
 */
/* specific declaration modes for Windows */
#if !defined(XXH_INLINE_ALL) && !defined(XXH_PRIVATE_API)
#  if defined(_WIN32) && defined(_MSC_VER) && (defined(XXH_IMPORT) || defined(XXH_EXPORT))
#    ifdef XXH_EXPORT
#      define XXH_PUBLIC_API __declspec(dllexport)
#    elif XXH_IMPORT
#      define XXH_PUBLIC_API __declspec(dllimport)
#    endif
#  else
#    define XXH_PUBLIC_API   /* do nothing */
#  endif
#endif

#ifdef XXH_DOXYGEN
/*!
 * @brief Emulate a namespace by transparently prefixing all symbols.
 *
 * If you want to include _and expose_ xxHash functions from within your own
 * library, but also want to avoid symbol collisions with other libraries which
 * may also include xxHash, you can use XXH_NAMESPACE to automatically prefix
 * any public symbol from xxhash library with the value of XXH_NAMESPACE
 * (therefore, avoid empty or numeric values).
 *
 * Note that no change is required within the calling program as long as it
 * includes `xxhash.h`: Regular symbol names will be automatically translated
 * by this header.
 */
#  define XXH_NAMESPACE /* YOUR NAME HERE */
#  undef XXH_NAMESPACE
#endif

#ifdef XXH_NAMESPACE
#  define XXH_CAT(A,B) A##B
#  define XXH_NAME2(A,B) XXH_CAT(A,B)
#  define XXH_versionNumber XXH_NAME2(XXH_NAMESPACE, XXH_versionNumber)
/* XXH32 */
#  define XXH32 XXH_NAME2(XXH_NAMESPACE, XXH32)
#  define XXH32_createState XXH_NAME2(XXH_NAMESPACE, XXH32_createState)
#  define XXH32_freeState XXH_NAME2(XXH_NAMESPACE, XXH32_freeState)
#  define XXH32_reset XXH_NAME2(XXH_NAMESPACE, XXH32_reset)
#  define XXH32_update XXH_NAME2(XXH_NAMESPACE, XXH32_update)
#  define XXH32_digest XXH_NAME2(XXH_NAMESPACE, XXH32_digest)
#  define XXH32_copyState XXH_NAME2(XXH_NAMESPACE, XXH32_copyState)
#  define XXH32_canonicalFromHash XXH_NAME2(XXH_NAMESPACE, XXH32_canonicalFromHash)
#  define XXH32_hashFromCanonical XXH_NAME2(XXH_NAMESPACE, XXH32_hashFromCanonical)
/* XXH64 */
#  define XXH64 XXH_NAME2(XXH_NAMESPACE, XXH64)
#  define XXH64_createState XXH_NAME2(XXH_NAMESPACE, XXH64_createState)
#  define XXH64_freeState XXH_NAME2(XXH_NAMESPACE, XXH64_freeState)
#  define XXH64_reset XXH_NAME2(XXH_NAMESPACE, XXH64_reset)
#  define XXH64_update XXH_NAME2(XXH_NAMESPACE, XXH64_update)
#  define XXH64_digest XXH_NAME2(XXH_NAMESPACE, XXH64_digest)
#  define XXH64_copyState XXH_NAME2(XXH_NAMESPACE, XXH64_copyState)
#  define XXH64_canonicalFromHash XXH_NAME2(XXH_NAMESPACE, XXH64_canonicalFromHash)
#  define XXH64_hashFromCanonical XXH_NAME2(XXH_NAMESPACE, XXH64_hashFromCanonical)
/* XXH3_64bits */
#  define XXH3_64bits XXH_NAME2(XXH_NAMESPACE, XXH3_64bits)
#  define XXH3_64bits_withSecret XXH_NAME2(XXH_NAMESPACE, XXH3_64bits_withSecret)
#  define XXH3_64bits_withSeed XXH_NAME2(XXH_NAMESPACE, XXH3_64bits_withSeed)
#  define XXH3_64bits_withSecretandSeed XXH_NAME2(XXH_NAMESPACE, XXH3_64bits_withSecretandSeed)
#  define XXH3_createState XXH_NAME2(XXH_NAMESPACE, XXH3_createState)
#  define XXH3_freeState XXH_NAME2(XXH_NAMESPACE, XXH3_freeState)
#  define XXH3_copyState XXH_NAME2(XXH_NAMESPACE, XXH3_copyState)
#  define XXH3_64bits_reset XXH_NAME2(XXH_NAMESPACE, XXH3_64bits_reset)
#  define XXH3_64bits_reset_withSeed XXH_NAME2(XXH_NAMESPACE, XXH3_64bits_reset_withSeed)
#  define XXH3_64bits_reset_withSecret XXH_NAME2(XXH_NAMESPACE, XXH3_64bits_reset_withSecret)
#  define XXH3_64bits_reset_withSecretandSeed XXH_NAME2(XXH_NAMESPACE, XXH3_64bits_reset_withSecretandSeed)
#  define XXH3_64bits_update XXH_NAME2(XXH_NAMESPACE, XXH3_64bits_update)
#  define XXH3_64bits_digest XXH_NAME2(XXH_NAMESPACE, XXH3_64bits_digest)
#  define XXH3_generateSecret XXH_NAME2(XXH_NAMESPACE, XXH3_generateSecret)
#  define XXH3_generateSecret_fromSeed XXH_NAME2(XXH_NAMESPACE, XXH3_generateSecret_fromSeed)
/* XXH3_128bits */
#  define XXH128 XXH_NAME2(XXH_NAMESPACE, XXH128)
#  define XXH3_128bits XXH_NAME2(XXH_NAMESPACE, XXH3_128bits)
#  define XXH3_128bits_withSeed XXH_NAME2(XXH_NAMESPACE, XXH3_128bits_withSeed)
#  define XXH3_128bits_withSecret XXH_NAME2(XXH_NAMESPACE, XXH3_128bits_withSecret)
#  define XXH3_128bits_withSecretandSeed XXH_NAME2(XXH_NAMESPACE, XXH3_128bits_withSecretandSeed)
#  define XXH3_128bits_reset XXH_NAME2(XXH_NAMESPACE, XXH3_128bits_reset)
#  define XXH3_128bits_reset_withSeed XXH_NAME2(XXH_NAMESPACE, XXH3_128bits_reset_withSeed)
#  define XXH3_128bits_reset_withSecret XXH_NAME2(XXH_NAMESPACE, XXH3_128bits_reset_withSecret)
#  define XXH3_128bits_reset_withSecretandSeed XXH_NAME2(XXH_NAMESPACE, XXH3_128bits_reset_withSecretandSeed)
#  define XXH3_128bits_update XXH_NAME2(XXH_NAMESPACE, XXH3_128bits_update)
#  define XXH3_128bits_digest XXH_NAME2(XXH_NAMESPACE, XXH3_128bits_digest)
#  define XXH128_isEqual XXH_NAME2(XXH_NAMESPACE, XXH128_isEqual)
#  define XXH128_cmp     XXH_NAME2(XXH_NAMESPACE, XXH128_cmp)
#  define XXH128_canonicalFromHash XXH_NAME2(XXH_NAMESPACE, XXH128_canonicalFromHash)
#  define XXH128_hashFromCanonical XXH_NAME2(XXH_NAMESPACE, XXH128_hashFromCanonical)
#endif


/* *************************************
*  Version
***************************************/
#define XXH_VERSION_MAJOR    0
#define XXH_VERSION_MINOR    8
#define XXH_VERSION_RELEASE  1
#define XXH_VERSION_NUMBER  (XXH_VERSION_MAJOR *100*100 + XXH_VERSION_MINOR *100 + XXH_VERSION_RELEASE)

/*!
 * @brief Obtains the xxHash version.
 *
 * This is mostly useful when xxHash is compiled as a shared library,
 * since the returned value comes from the library, as opposed to header file.
 *
 * @return `XXH_VERSION_NUMBER` of the invoked library.
 */
XXH_PUBLIC_API unsigned XXH_versionNumber (void);


/* ****************************
*  Common basic types
******************************/
#include <stddef.h>   /* size_t */
typedef enum { XXH_OK=0, XXH_ERROR } XXH_errorcode;


/*-**********************************************************************
*  32-bit hash
************************************************************************/
#if defined(XXH_DOXYGEN) /* Don't show <stdint.h> include */
/*!
 * @brief An unsigned 32-bit integer.
 *
 * Not necessarily defined to `uint32_t` but functionally equivalent.
 */
typedef uint32_t XXH32_hash_t;

#elif !defined (__VMS) \
  && (defined (__cplusplus) \
  || (defined (__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L) /* C99 */) )
#   include <stdint.h>
    typedef uint32_t XXH32_hash_t;

#else
#   include <limits.h>
#   if UINT_MAX == 0xFFFFFFFFUL
      typedef unsigned int XXH32_hash_t;
#   else
#     if ULONG_MAX == 0xFFFFFFFFUL
        typedef unsigned long XXH32_hash_t;
#     else
#       error "unsupported platform: need a 32-bit type"
#     endif
#   endif
#endif

/*!
 * @}
 *
 * @defgroup xxh32_family XXH32 family
 * @ingroup public
 * Contains functions used in the classic 32-bit xxHash algorithm.
 *
 * @note
 *   XXH32 is useful for older platforms, with no or poor 64-bit performance.
 *   Note that @ref xxh3_family provides competitive speed
 *   for both 32-bit and 64-bit systems, and offers true 64/128 bit hash results.
 *
 * @see @ref xxh64_family, @ref xxh3_family : Other xxHash families
 * @see @ref xxh32_impl for implementation details
 * @{
 */

/*!
 * @brief Calculates the 32-bit hash of @p input using xxHash32.
 *
 * Speed on Core 2 Duo @ 3 GHz (single thread, SMHasher benchmark): 5.4 GB/s
 *
 * @param input The block of data to be hashed, at least @p length bytes in size.
 * @param length The length of @p input, in bytes.
 * @param seed The 32-bit seed to alter the hash's output predictably.
 *
 * @pre
 *   The memory between @p input and @p input + @p length must be valid,
 *   readable, contiguous memory. However, if @p length is `0`, @p input may be
 *   `NULL`. In C++, this also must be *TriviallyCopyable*.
 *
 * @return The calculated 32-bit hash value.
 *
 * @see
 *    XXH64(), XXH3_64bits_withSeed(), XXH3_128bits_withSeed(), XXH128():
 *    Direct equivalents for the other variants of xxHash.
 * @see
 *    XXH32_createState(), XXH32_update(), XXH32_digest(): Streaming version.
 */
XXH_PUBLIC_API XXH32_hash_t XXH32 (const void* input, size_t length, XXH32_hash_t seed);

/*!
 * Streaming functions generate the xxHash value from an incremental input.
 * This method is slower than single-call functions, due to state management.
 * For small inputs, prefer `XXH32()` and `XXH64()`, which are better optimized.
 *
 * An XXH state must first be allocated using `XXH*_createState()`.
 *
 * Start a new hash by initializing the state with a seed using `XXH*_reset()`.
 *
 * Then, feed the hash state by calling `XXH*_update()` as many times as necessary.
 *
 * The function returns an error code, with 0 meaning OK, and any other value
 * meaning there is an error.
 *
 * Finally, a hash value can be produced anytime, by using `XXH*_digest()`.
 * This function returns the nn-bits hash as an int or long long.
 *
 * It's still possible to continue inserting input into the hash state after a
 * digest, and generate new hash values later on by invoking `XXH*_digest()`.
 *
 * When done, release the state using `XXH*_freeState()`.
 *
 * Example code for incrementally hashing a file:
 * @code{.c}
 *    #include <stdio.h>
 *    #include <xxhash.h>
 *    #define BUFFER_SIZE 256
 *
 *    // Note: XXH64 and XXH3 use the same interface.
 *    XXH32_hash_t
 *    hashFile(FILE* stream)
 *    {
 *        XXH32_state_t* state;
 *        unsigned char buf[BUFFER_SIZE];
 *        size_t amt;
 *        XXH32_hash_t hash;
 *
 *        state = XXH32_createState();       // Create a state
 *        assert(state != NULL);             // Error check here
 *        XXH32_reset(state, 0xbaad5eed);    // Reset state with our seed
 *        while ((amt = fread(buf, 1, sizeof(buf), stream)) != 0) {
 *            XXH32_update(state, buf, amt); // Hash the file in chunks
 *        }
 *        hash = XXH32_digest(state);        // Finalize the hash
 *        XXH32_freeState(state);            // Clean up
 *        return hash;
 *    }
 * @endcode
 */

/*!
 * @typedef struct XXH32_state_s XXH32_state_t
 * @brief The opaque state struct for the XXH32 streaming API.
 *
 * @see XXH32_state_s for details.
 */
typedef struct XXH32_state_s XXH32_state_t;

/*!
 * @brief Allocates an @ref XXH32_state_t.
 *
 * Must be freed with XXH32_freeState().
 * @return An allocated XXH32_state_t on success, `NULL` on failure.
 */
XXH_PUBLIC_API XXH32_state_t* XXH32_createState(void);
/*!
 * @brief Frees an @ref XXH32_state_t.
 *
 * Must be allocated with XXH32_createState().
 * @param statePtr A pointer to an @ref XXH32_state_t allocated with @ref XXH32_createState().
 * @return XXH_OK.
 */
XXH_PUBLIC_API XXH_errorcode  XXH32_freeState(XXH32_state_t* statePtr);
/*!
 * @brief Copies one @ref XXH32_state_t to another.
 *
 * @param dst_state The state to copy to.
 * @param src_state The state to copy from.
 * @pre
 *   @p dst_state and @p src_state must not be `NULL` and must not overlap.
 */
XXH_PUBLIC_API void XXH32_copyState(XXH32_state_t* dst_state, const XXH32_state_t* src_state);

/*!
 * @brief Resets an @ref XXH32_state_t to begin a new hash.
 *
 * This function resets and seeds a state. Call it before @ref XXH32_update().
 *
 * @param statePtr The state struct to reset.
 * @param seed The 32-bit seed to alter the hash result predictably.
 *
 * @pre
 *   @p statePtr must not be `NULL`.
 *
 * @return @ref XXH_OK on success, @ref XXH_ERROR on failure.
 */
XXH_PUBLIC_API XXH_errorcode XXH32_reset  (XXH32_state_t* statePtr, XXH32_hash_t seed);

/*!
 * @brief Consumes a block of @p input to an @ref XXH32_state_t.
 *
 * Call this to incrementally consume blocks of data.
 *
 * @param statePtr The state struct to update.
 * @param input The block of data to be hashed, at least @p length bytes in size.
 * @param length The length of @p input, in bytes.
 *
 * @pre
 *   @p statePtr must not be `NULL`.
 * @pre
 *   The memory between @p input and @p input + @p length must be valid,
 *   readable, contiguous memory. However, if @p length is `0`, @p input may be
 *   `NULL`. In C++, this also must be *TriviallyCopyable*.
 *
 * @return @ref XXH_OK on success, @ref XXH_ERROR on failure.
 */
XXH_PUBLIC_API XXH_errorcode XXH32_update (XXH32_state_t* statePtr, const void* input, size_t length);

/*!
 * @brief Returns the calculated hash value from an @ref XXH32_state_t.
 *
 * @note
 *   Calling XXH32_digest() will not affect @p statePtr, so you can update,
 *   digest, and update again.
 *
 * @param statePtr The state struct to calculate the hash from.
 *
 * @pre
 *  @p statePtr must not be `NULL`.
 *
 * @return The calculated xxHash32 value from that state.
 */
XXH_PUBLIC_API XXH32_hash_t  XXH32_digest (const XXH32_state_t* statePtr);

/*******   Canonical representation   *******/

/*
 * The default return values from XXH functions are unsigned 32 and 64 bit
 * integers.
 * This the simplest and fastest format for further post-processing.
 *
 * However, this leaves open the question of what is the order on the byte level,
 * since little and big endian conventions will store the same number differently.
 *
 * The canonical representation settles this issue by mandating big-endian
 * convention, the same convention as human-readable numbers (large digits first).
 *
 * When writing hash values to storage, sending them over a network, or printing
 * them, it's highly recommended to use the canonical representation to ensure
 * portability across a wider range of systems, present and future.
 *
 * The following functions allow transformation of hash values to and from
 * canonical format.
 */

/*!
 * @brief Canonical (big endian) representation of @ref XXH32_hash_t.
 */
typedef struct {
    unsigned char digest[4]; /*!< Hash bytes, big endian */
} XXH32_canonical_t;

/*!
 * @brief Converts an @ref XXH32_hash_t to a big endian @ref XXH32_canonical_t.
 *
 * @param dst The @ref XXH32_canonical_t pointer to be stored to.
 * @param hash The @ref XXH32_hash_t to be converted.
 *
 * @pre
 *   @p dst must not be `NULL`.
 */
XXH_PUBLIC_API void XXH32_canonicalFromHash(XXH32_canonical_t* dst, XXH32_hash_t hash);

/*!
 * @brief Converts an @ref XXH32_canonical_t to a native @ref XXH32_hash_t.
 *
 * @param src The @ref XXH32_canonical_t to convert.
 *
 * @pre
 *   @p src must not be `NULL`.
 *
 * @return The converted hash.
 */
XXH_PUBLIC_API XXH32_hash_t XXH32_hashFromCanonical(const XXH32_canonical_t* src);


#ifdef __has_attribute
# define XXH_HAS_ATTRIBUTE(x) __has_attribute(x)
#else
# define XXH_HAS_ATTRIBUTE(x) 0
#endif

/* C-language Attributes are added in C23. */
#if defined(__STDC_VERSION__) && (__STDC_VERSION__ > 201710L) && defined(__has_c_attribute)
# define XXH_HAS_C_ATTRIBUTE(x) __has_c_attribute(x)
#else
# define XXH_HAS_C_ATTRIBUTE(x) 0
#endif

#if defined(__cplusplus) && defined(__has_cpp_attribute)
# define XXH_HAS_CPP_ATTRIBUTE(x) __has_cpp_attribute(x)
#else
# define XXH_HAS_CPP_ATTRIBUTE(x) 0
#endif

/*
Define XXH_FALLTHROUGH macro for annotating switch case with the 'fallthrough' attribute
introduced in CPP17 and C23.
CPP17 : https://en.cppreference.com/w/cpp/language/attributes/fallthrough
C23   : https://en.cppreference.com/w/c/language/attributes/fallthrough
*/
#if XXH_HAS_C_ATTRIBUTE(x)
# define XXH_FALLTHROUGH [[fallthrough]]
#elif XXH_HAS_CPP_ATTRIBUTE(x)
# define XXH_FALLTHROUGH [[fallthrough]]
#elif XXH_HAS_ATTRIBUTE(__fallthrough__)
# define XXH_FALLTHROUGH __attribute__ ((fallthrough))
#else
# define XXH_FALLTHROUGH
#endif

/*!
 * @}
 * @ingroup public
 * @{
 */

#ifndef XXH_NO_LONG_LONG
/*-**********************************************************************
*  64-bit hash
************************************************************************/
#if defined(XXH_DOXYGEN) /* don't include <stdint.h> */
/*!
 * @brief An unsigned 64-bit integer.
 *
 * Not necessarily defined to `uint64_t` but functionally equivalent.
 */
typedef uint64_t XXH64_hash_t;
#elif !defined (__VMS) \
  && (defined (__cplusplus) \
  || (defined (__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L) /* C99 */) )
#  include <stdint.h>
   typedef uint64_t XXH64_hash_t;
#else
#  include <limits.h>
#  if defined(__LP64__) && ULONG_MAX == 0xFFFFFFFFFFFFFFFFULL
     /* LP64 ABI says uint64_t is unsigned long */
     typedef unsigned long XXH64_hash_t;
#  else
     /* the following type must have a width of 64-bit */
     typedef unsigned long long XXH64_hash_t;
#  endif
#endif

/*!
 * @}
 *
 * @defgroup xxh64_family XXH64 family
 * @ingroup public
 * @{
 * Contains functions used in the classic 64-bit xxHash algorithm.
 *
 * @note
 *   XXH3 provides competitive speed for both 32-bit and 64-bit systems,
 *   and offers true 64/128 bit hash results.
 *   It provides better speed for systems with vector processing capabilities.
 */


/*!
 * @brief Calculates the 64-bit hash of @p input using xxHash64.
 *
 * This function usually runs faster on 64-bit systems, but slower on 32-bit
 * systems (see benchmark).
 *
 * @param input The block of data to be hashed, at least @p length bytes in size.
 * @param length The length of @p input, in bytes.
 * @param seed The 64-bit seed to alter the hash's output predictably.
 *
 * @pre
 *   The memory between @p input and @p input + @p length must be valid,
 *   readable, contiguous memory. However, if @p length is `0`, @p input may be
 *   `NULL`. In C++, this also must be *TriviallyCopyable*.
 *
 * @return The calculated 64-bit hash.
 *
 * @see
 *    XXH32(), XXH3_64bits_withSeed(), XXH3_128bits_withSeed(), XXH128():
 *    Direct equivalents for the other variants of xxHash.
 * @see
 *    XXH64_createState(), XXH64_update(), XXH64_digest(): Streaming version.
 */
XXH_PUBLIC_API XXH64_hash_t XXH64(const void* input, size_t length, XXH64_hash_t seed);

/*******   Streaming   *******/
/*!
 * @brief The opaque state struct for the XXH64 streaming API.
 *
 * @see XXH64_state_s for details.
 */
typedef struct XXH64_state_s XXH64_state_t;   /* incomplete type */
XXH_PUBLIC_API XXH64_state_t* XXH64_createState(void);
XXH_PUBLIC_API XXH_errorcode  XXH64_freeState(XXH64_state_t* statePtr);
XXH_PUBLIC_API void XXH64_copyState(XXH64_state_t* dst_state, const XXH64_state_t* src_state);

XXH_PUBLIC_API XXH_errorcode XXH64_reset  (XXH64_state_t* statePtr, XXH64_hash_t seed);
XXH_PUBLIC_API XXH_errorcode XXH64_update (XXH64_state_t* statePtr, const void* input, size_t length);
XXH_PUBLIC_API XXH64_hash_t  XXH64_digest (const XXH64_state_t* statePtr);

/*******   Canonical representation   *******/
typedef struct { unsigned char digest[sizeof(XXH64_hash_t)]; } XXH64_canonical_t;
XXH_PUBLIC_API void XXH64_canonicalFromHash(XXH64_canonical_t* dst, XXH64_hash_t hash);
XXH_PUBLIC_API XXH64_hash_t XXH64_hashFromCanonical(const XXH64_canonical_t* src);

/*!
 * @}
 * ************************************************************************
 * @defgroup xxh3_family XXH3 family
 * @ingroup public
 * @{
 *
 * XXH3 is a more recent hash algorithm featuring:
 *  - Improved speed for both small and large inputs
 *  - True 64-bit and 128-bit outputs
 *  - SIMD acceleration
 *  - Improved 32-bit viability
 *
 * Speed analysis methodology is explained here:
 *
 *    https://fastcompression.blogspot.com/2019/03/presenting-xxh3.html
 *
 * Compared to XXH64, expect XXH3 to run approximately
 * ~2x faster on large inputs and >3x faster on small ones,
 * exact differences vary depending on platform.
 *
 * XXH3's speed benefits greatly from SIMD and 64-bit arithmetic,
 * but does not require it.
 * Any 32-bit and 64-bit targets that can run XXH32 smoothly
 * can run XXH3 at competitive speeds, even without vector support.
 * Further details are explained in the implementation.
 *
 * Optimized implementations are provided for AVX512, AVX2, SSE2, NEON, POWER8,
 * ZVector and scalar targets. This can be controlled via the XXH_VECTOR macro.
 *
 * XXH3 implementation is portable:
 * it has a generic C90 formulation that can be compiled on any platform,
 * all implementations generage exactly the same hash value on all platforms.
 * Starting from v0.8.0, it's also labelled "stable", meaning that
 * any future version will also generate the same hash value.
 *
 * XXH3 offers 2 variants, _64bits and _128bits.
 *
 * When only 64 bits are needed, prefer invoking the _64bits variant, as it
 * reduces the amount of mixing, resulting in faster speed on small inputs.
 * It's also generally simpler to manipulate a scalar return type than a struct.
 *
 * The API supports one-shot hashing, streaming mode, and custom secrets.
 */

/*-**********************************************************************
*  XXH3 64-bit variant
************************************************************************/

/* XXH3_64bits():
 * default 64-bit variant, using default secret and default seed of 0.
 * It's the fastest variant. */
XXH_PUBLIC_API XXH64_hash_t XXH3_64bits(const void* data, size_t len);

/*
 * XXH3_64bits_withSeed():
 * This variant generates a custom secret on the fly
 * based on default secret altered using the `seed` value.
 * While this operation is decently fast, note that it's not completely free.
 * Note: seed==0 produces the same results as XXH3_64bits().
 */
XXH_PUBLIC_API XXH64_hash_t XXH3_64bits_withSeed(const void* data, size_t len, XXH64_hash_t seed);

/*!
 * The bare minimum size for a custom secret.
 *
 * @see
 *  XXH3_64bits_withSecret(), XXH3_64bits_reset_withSecret(),
 *  XXH3_128bits_withSecret(), XXH3_128bits_reset_withSecret().
 */
#define XXH3_SECRET_SIZE_MIN 136

/*
 * XXH3_64bits_withSecret():
 * It's possible to provide any blob of bytes as a "secret" to generate the hash.
 * This makes it more difficult for an external actor to prepare an intentional collision.
 * The main condition is that secretSize *must* be large enough (>= XXH3_SECRET_SIZE_MIN).
 * However, the quality of the secret impacts the dispersion of the hash algorithm.
 * Therefore, the secret _must_ look like a bunch of random bytes.
 * Avoid "trivial" or structured data such as repeated sequences or a text document.
 * Whenever in doubt about the "randomness" of the blob of bytes,
 * consider employing "XXH3_generateSecret()" instead (see below).
 * It will generate a proper high entropy secret derived from the blob of bytes.
 * Another advantage of using XXH3_generateSecret() is that
 * it guarantees that all bits within the initial blob of bytes
 * will impact every bit of the output.
 * This is not necessarily the case when using the blob of bytes directly
 * because, when hashing _small_ inputs, only a portion of the secret is employed.
 */
XXH_PUBLIC_API XXH64_hash_t XXH3_64bits_withSecret(const void* data, size_t len, const void* secret, size_t secretSize);


/*******   Streaming   *******/
/*
 * Streaming requires state maintenance.
 * This operation costs memory and CPU.
 * As a consequence, streaming is slower than one-shot hashing.
 * For better performance, prefer one-shot functions whenever applicable.
 */

/*!
 * @brief The state struct for the XXH3 streaming API.
 *
 * @see XXH3_state_s for details.
 */
typedef struct XXH3_state_s XXH3_state_t;
XXH_PUBLIC_API XXH3_state_t* XXH3_createState(void);
XXH_PUBLIC_API XXH_errorcode XXH3_freeState(XXH3_state_t* statePtr);
XXH_PUBLIC_API void XXH3_copyState(XXH3_state_t* dst_state, const XXH3_state_t* src_state);

/*
 * XXH3_64bits_reset():
 * Initialize with default parameters.
 * digest will be equivalent to `XXH3_64bits()`.
 */
XXH_PUBLIC_API XXH_errorcode XXH3_64bits_reset(XXH3_state_t* statePtr);
/*
 * XXH3_64bits_reset_withSeed():
 * Generate a custom secret from `seed`, and store it into `statePtr`.
 * digest will be equivalent to `XXH3_64bits_withSeed()`.
 */
XXH_PUBLIC_API XXH_errorcode XXH3_64bits_reset_withSeed(XXH3_state_t* statePtr, XXH64_hash_t seed);
/*
 * XXH3_64bits_reset_withSecret():
 * `secret` is referenced, it _must outlive_ the hash streaming session.
 * Similar to one-shot API, `secretSize` must be >= `XXH3_SECRET_SIZE_MIN`,
 * and the quality of produced hash values depends on secret's entropy
 * (secret's content should look like a bunch of random bytes).
 * When in doubt about the randomness of a candidate `secret`,
 * consider employing `XXH3_generateSecret()` instead (see below).
 */
XXH_PUBLIC_API XXH_errorcode XXH3_64bits_reset_withSecret(XXH3_state_t* statePtr, const void* secret, size_t secretSize);

XXH_PUBLIC_API XXH_errorcode XXH3_64bits_update (XXH3_state_t* statePtr, const void* input, size_t length);
XXH_PUBLIC_API XXH64_hash_t  XXH3_64bits_digest (const XXH3_state_t* statePtr);

/* note : canonical representation of XXH3 is the same as XXH64
 * since they both produce XXH64_hash_t values */


/*-**********************************************************************
*  XXH3 128-bit variant
************************************************************************/

/*!
 * @brief The return value from 128-bit hashes.
 *
 * Stored in little endian order, although the fields themselves are in native
 * endianness.
 */
typedef struct {
    XXH64_hash_t low64;   /*!< `value & 0xFFFFFFFFFFFFFFFF` */
    XXH64_hash_t high64;  /*!< `value >> 64` */
} XXH128_hash_t;

XXH_PUBLIC_API XXH128_hash_t XXH3_128bits(const void* data, size_t len);
XXH_PUBLIC_API XXH128_hash_t XXH3_128bits_withSeed(const void* data, size_t len, XXH64_hash_t seed);
XXH_PUBLIC_API XXH128_hash_t XXH3_128bits_withSecret(const void* data, size_t len, const void* secret, size_t secretSize);

/*******   Streaming   *******/
/*
 * Streaming requires state maintenance.
 * This operation costs memory and CPU.
 * As a consequence, streaming is slower than one-shot hashing.
 * For better performance, prefer one-shot functions whenever applicable.
 *
 * XXH3_128bits uses the same XXH3_state_t as XXH3_64bits().
 * Use already declared XXH3_createState() and XXH3_freeState().
 *
 * All reset and streaming functions have same meaning as their 64-bit counterpart.
 */

XXH_PUBLIC_API XXH_errorcode XXH3_128bits_reset(XXH3_state_t* statePtr);
XXH_PUBLIC_API XXH_errorcode XXH3_128bits_reset_withSeed(XXH3_state_t* statePtr, XXH64_hash_t seed);
XXH_PUBLIC_API XXH_errorcode XXH3_128bits_reset_withSecret(XXH3_state_t* statePtr, const void* secret, size_t secretSize);

XXH_PUBLIC_API XXH_errorcode XXH3_128bits_update (XXH3_state_t* statePtr, const void* input, size_t length);
XXH_PUBLIC_API XXH128_hash_t XXH3_128bits_digest (const XXH3_state_t* statePtr);

/* Following helper functions make it possible to compare XXH128_hast_t values.
 * Since XXH128_hash_t is a structure, this capability is not offered by the language.
 * Note: For better performance, these functions can be inlined using XXH_INLINE_ALL */

/*!
 * XXH128_isEqual():
 * Return: 1 if `h1` and `h2` are equal, 0 if they are not.
 */
XXH_PUBLIC_API int XXH128_isEqual(XXH128_hash_t h1, XXH128_hash_t h2);

/*!
 * XXH128_cmp():
 *
 * This comparator is compatible with stdlib's `qsort()`/`bsearch()`.
 *
 * return: >0 if *h128_1  > *h128_2
 *         =0 if *h128_1 == *h128_2
 *         <0 if *h128_1  < *h128_2
 */
XXH_PUBLIC_API int XXH128_cmp(const void* h128_1, const void* h128_2);


/*******   Canonical representation   *******/
typedef struct { unsigned char digest[sizeof(XXH128_hash_t)]; } XXH128_canonical_t;
static zend_always_inline void XXH128_canonicalFromHash(XXH128_canonical_t* dst, XXH128_hash_t hash);
XXH_PUBLIC_API XXH128_hash_t XXH128_hashFromCanonical(const XXH128_canonical_t* src);


#endif  /* XXH_NO_LONG_LONG */

/*!
 * @}
 */
#endif /* XXHASH_H_5627135585666179 */



#if defined(XXH_STATIC_LINKING_ONLY) && !defined(XXHASH_H_STATIC_13879238742)
#define XXHASH_H_STATIC_13879238742
/* ****************************************************************************
 * This section contains declarations which are not guaranteed to remain stable.
 * They may change in future versions, becoming incompatible with a different
 * version of the library.
 * These declarations should only be used with static linking.
 * Never use them in association with dynamic linking!
 ***************************************************************************** */

/*
 * These definitions are only present to allow static allocation
 * of XXH states, on stack or in a struct, for example.
 * Never **ever** access their members directly.
 */

/*!
 * @internal
 * @brief Structure for XXH32 streaming API.
 *
 * @note This is only defined when @ref XXH_STATIC_LINKING_ONLY,
 * @ref XXH_INLINE_ALL, or @ref XXH_IMPLEMENTATION is defined. Otherwise it is
 * an opaque type. This allows fields to safely be changed.
 *
 * Typedef'd to @ref XXH32_state_t.
 * Do not access the members of this struct directly.
 * @see XXH64_state_s, XXH3_state_s
 */
struct XXH32_state_s {
   XXH32_hash_t total_len_32; /*!< Total length hashed, modulo 2^32 */
   XXH32_hash_t large_len;    /*!< Whether the hash is >= 16 (handles @ref total_len_32 overflow) */
   XXH32_hash_t v[4];         /*!< Accumulator lanes */
   XXH32_hash_t mem32[4];     /*!< Internal buffer for partial reads. Treated as unsigned char[16]. */
   XXH32_hash_t memsize;      /*!< Amount of data in @ref mem32 */
   XXH32_hash_t reserved;     /*!< Reserved field. Do not read or write to it, it may be removed. */
};   /* typedef'd to XXH32_state_t */


#ifndef XXH_NO_LONG_LONG  /* defined when there is no 64-bit support */

/*!
 * @internal
 * @brief Structure for XXH64 streaming API.
 *
 * @note This is only defined when @ref XXH_STATIC_LINKING_ONLY,
 * @ref XXH_INLINE_ALL, or @ref XXH_IMPLEMENTATION is defined. Otherwise it is
 * an opaque type. This allows fields to safely be changed.
 *
 * Typedef'd to @ref XXH64_state_t.
 * Do not access the members of this struct directly.
 * @see XXH32_state_s, XXH3_state_s
 */
struct XXH64_state_s {
   XXH64_hash_t total_len;    /*!< Total length hashed. This is always 64-bit. */
   XXH64_hash_t v[4];         /*!< Accumulator lanes */
   XXH64_hash_t mem64[4];     /*!< Internal buffer for partial reads. Treated as unsigned char[32]. */
   XXH32_hash_t memsize;      /*!< Amount of data in @ref mem64 */
   XXH32_hash_t reserved32;   /*!< Reserved field, needed for padding anyways*/
   XXH64_hash_t reserved64;   /*!< Reserved field. Do not read or write to it, it may be removed. */
};   /* typedef'd to XXH64_state_t */

#if defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 201112L) /* >= C11 */
#  include <stdalign.h>
#  define XXH_ALIGN(n)      alignas(n)
#elif defined(__cplusplus) && (__cplusplus >= 201103L) /* >= C++11 */
/* In C++ alignas() is a keyword */
#  define XXH_ALIGN(n)      alignas(n)
#elif defined(__GNUC__)
#  define XXH_ALIGN(n)      __attribute__ ((aligned(n)))
#elif defined(_MSC_VER)
#  define XXH_ALIGN(n)      __declspec(align(n))
#else
#  define XXH_ALIGN(n)   /* disabled */
#endif

/* Old GCC versions only accept the attribute after the type in structures. */
#if !(defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 201112L))   /* C11+ */ \
    && ! (defined(__cplusplus) && (__cplusplus >= 201103L)) /* >= C++11 */ \
    && defined(__GNUC__)
#   define XXH_ALIGN_MEMBER(align, type) type XXH_ALIGN(align)
#else
#   define XXH_ALIGN_MEMBER(align, type) XXH_ALIGN(align) type
#endif

/*!
 * @brief The size of the internal XXH3 buffer.
 *
 * This is the optimal update size for incremental hashing.
 *
 * @see XXH3_64b_update(), XXH3_128b_update().
 */
#define XXH3_INTERNALBUFFER_SIZE 256

/*!
 * @brief Default size of the secret buffer (and @ref XXH3_kSecret).
 *
 * This is the size used in @ref XXH3_kSecret and the seeded functions.
 *
 * Not to be confused with @ref XXH3_SECRET_SIZE_MIN.
 */
#define XXH3_SECRET_DEFAULT_SIZE 192

/*!
 * @internal
 * @brief Structure for XXH3 streaming API.
 *
 * @note This is only defined when @ref XXH_STATIC_LINKING_ONLY,
 * @ref XXH_INLINE_ALL, or @ref XXH_IMPLEMENTATION is defined.
 * Otherwise it is an opaque type.
 * Never use this definition in combination with dynamic library.
 * This allows fields to safely be changed in the future.
 *
 * @note ** This structure has a strict alignment requirement of 64 bytes!! **
 * Do not allocate this with `malloc()` or `new`,
 * it will not be sufficiently aligned.
 * Use @ref XXH3_createState() and @ref XXH3_freeState(), or stack allocation.
 *
 * Typedef'd to @ref XXH3_state_t.
 * Do never access the members of this struct directly.
 *
 * @see XXH3_INITSTATE() for stack initialization.
 * @see XXH3_createState(), XXH3_freeState().
 * @see XXH32_state_s, XXH64_state_s
 */
struct XXH3_state_s {
   XXH_ALIGN_MEMBER(64, XXH64_hash_t acc[8]);
       /*!< The 8 accumulators. Similar to `vN` in @ref XXH32_state_s::v1 and @ref XXH64_state_s */
   XXH_ALIGN_MEMBER(64, unsigned char customSecret[XXH3_SECRET_DEFAULT_SIZE]);
       /*!< Used to store a custom secret generated from a seed. */
   XXH_ALIGN_MEMBER(64, unsigned char buffer[XXH3_INTERNALBUFFER_SIZE]);
       /*!< The internal buffer. @see XXH32_state_s::mem32 */
   XXH32_hash_t bufferedSize;
       /*!< The amount of memory in @ref buffer, @see XXH32_state_s::memsize */
   XXH32_hash_t useSeed;
       /*!< Reserved field. Needed for padding on 64-bit. */
   size_t nbStripesSoFar;
       /*!< Number or stripes processed. */
   XXH64_hash_t totalLen;
       /*!< Total length hashed. 64-bit even on 32-bit targets. */
   size_t nbStripesPerBlock;
       /*!< Number of stripes per block. */
   size_t secretLimit;
       /*!< Size of @ref customSecret or @ref extSecret */
   XXH64_hash_t seed;
       /*!< Seed for _withSeed variants. Must be zero otherwise, @see XXH3_INITSTATE() */
   XXH64_hash_t reserved64;
       /*!< Reserved field. */
   const unsigned char* extSecret;
       /*!< Reference to an external secret for the _withSecret variants, NULL
        *   for other variants. */
   /* note: there may be some padding at the end due to alignment on 64 bytes */
}; /* typedef'd to XXH3_state_t */

#undef XXH_ALIGN_MEMBER

/*!
 * @brief Initializes a stack-allocated `XXH3_state_s`.
 *
 * When the @ref XXH3_state_t structure is merely emplaced on stack,
 * it should be initialized with XXH3_INITSTATE() or a memset()
 * in case its first reset uses XXH3_NNbits_reset_withSeed().
 * This init can be omitted if the first reset uses default or _withSecret mode.
 * This operation isn't necessary when the state is created with XXH3_createState().
 * Note that this doesn't prepare the state for a streaming operation,
 * it's still necessary to use XXH3_NNbits_reset*() afterwards.
 */
#define XXH3_INITSTATE(XXH3_state_ptr)   { (XXH3_state_ptr)->seed = 0; }


/* XXH128() :
 * simple alias to pre-selected XXH3_128bits variant
 */
XXH_PUBLIC_API XXH128_hash_t XXH128(const void* data, size_t len, XXH64_hash_t seed);


/* ===   Experimental API   === */
/* Symbols defined below must be considered tied to a specific library version. */

/*
 * XXH3_generateSecret():
 *
 * Derive a high-entropy secret from any user-defined content, named customSeed.
 * The generated secret can be used in combination with `*_withSecret()` functions.
 * The `_withSecret()` variants are useful to provide a higher level of protection than 64-bit seed,
 * as it becomes much more difficult for an external actor to guess how to impact the calculation logic.
 *
 * The function accepts as input a custom seed of any length and any content,
 * and derives from it a high-entropy secret of length @secretSize
 * into an already allocated buffer @secretBuffer.
 * @secretSize must be >= XXH3_SECRET_SIZE_MIN
 *
 * The generated secret can then be used with any `*_withSecret()` variant.
 * Functions `XXH3_128bits_withSecret()`, `XXH3_64bits_withSecret()`,
 * `XXH3_128bits_reset_withSecret()` and `XXH3_64bits_reset_withSecret()`
 * are part of this list. They all accept a `secret` parameter
 * which must be large enough for implementation reasons (>= XXH3_SECRET_SIZE_MIN)
 * _and_ feature very high entropy (consist of random-looking bytes).
 * These conditions can be a high bar to meet, so
 * XXH3_generateSecret() can be employed to ensure proper quality.
 *
 * customSeed can be anything. It can have any size, even small ones,
 * and its content can be anything, even "poor entropy" sources such as a bunch of zeroes.
 * The resulting `secret` will nonetheless provide all required qualities.
 *
 * When customSeedSize > 0, supplying NULL as customSeed is undefined behavior.
 */
XXH_PUBLIC_API XXH_errorcode XXH3_generateSecret(void* secretBuffer, size_t secretSize, const void* customSeed, size_t customSeedSize);


/*
 * XXH3_generateSecret_fromSeed():
 *
 * Generate the same secret as the _withSeed() variants.
 *
 * The resulting secret has a length of XXH3_SECRET_DEFAULT_SIZE (necessarily).
 * @secretBuffer must be already allocated, of size at least XXH3_SECRET_DEFAULT_SIZE bytes.
 *
 * The generated secret can be used in combination with
 *`*_withSecret()` and `_withSecretandSeed()` variants.
 * This generator is notably useful in combination with `_withSecretandSeed()`,
 * as a way to emulate a faster `_withSeed()` variant.
 */
XXH_PUBLIC_API void XXH3_generateSecret_fromSeed(void* secretBuffer, XXH64_hash_t seed);

/*
 * *_withSecretandSeed() :
 * These variants generate hash values using either
 * @seed for "short" keys (< XXH3_MIDSIZE_MAX = 240 bytes)
 * or @secret for "large" keys (>= XXH3_MIDSIZE_MAX).
 *
 * This generally benefits speed, compared to `_withSeed()` or `_withSecret()`.
 * `_withSeed()` has to generate the secret on the fly for "large" keys.
 * It's fast, but can be perceptible for "not so large" keys (< 1 KB).
 * `_withSecret()` has to generate the masks on the fly for "small" keys,
 * which requires more instructions than _withSeed() variants.
 * Therefore, _withSecretandSeed variant combines the best of both worlds.
 *
 * When @secret has been generated by XXH3_generateSecret_fromSeed(),
 * this variant produces *exactly* the same results as `_withSeed()` variant,
 * hence offering only a pure speed benefit on "large" input,
 * by skipping the need to regenerate the secret for every large input.
 *
 * Another usage scenario is to hash the secret to a 64-bit hash value,
 * for example with XXH3_64bits(), which then becomes the seed,
 * and then employ both the seed and the secret in _withSecretandSeed().
 * On top of speed, an added benefit is that each bit in the secret
 * has a 50% chance to swap each bit in the output,
 * via its impact to the seed.
 * This is not guaranteed when using the secret directly in "small data" scenarios,
 * because only portions of the secret are employed for small data.
 */
XXH_PUBLIC_API XXH64_hash_t
XXH3_64bits_withSecretandSeed(const void* data, size_t len,
                              const void* secret, size_t secretSize,
                              XXH64_hash_t seed);

XXH_PUBLIC_API XXH128_hash_t
XXH3_128bits_withSecretandSeed(const void* data, size_t len,
                               const void* secret, size_t secretSize,
                               XXH64_hash_t seed64);

XXH_PUBLIC_API XXH_errorcode
XXH3_64bits_reset_withSecretandSeed(XXH3_state_t* statePtr,
                                    const void* secret, size_t secretSize,
                                    XXH64_hash_t seed64);

XXH_PUBLIC_API XXH_errorcode
XXH3_128bits_reset_withSecretandSeed(XXH3_state_t* statePtr,
                                     const void* secret, size_t secretSize,
                                     XXH64_hash_t seed64);


#endif  /* XXH_NO_LONG_LONG */
#if defined(XXH_INLINE_ALL) || defined(XXH_PRIVATE_API)
#  define XXH_IMPLEMENTATION
#endif

#endif  /* defined(XXH_STATIC_LINKING_ONLY) && !defined(XXHASH_H_STATIC_13879238742) */


/* ======================================================================== */
/* ======================================================================== */
/* ======================================================================== */


/*-**********************************************************************
 * xxHash implementation
 *-**********************************************************************
 * xxHash's implementation used to be hosted inside xxhash.c.
 *
 * However, inlining requires implementation to be visible to the compiler,
 * hence be included alongside the header.
 * Previously, implementation was hosted inside xxhash.c,
 * which was then #included when inlining was activated.
 * This construction created issues with a few build and install systems,
 * as it required xxhash.c to be stored in /include directory.
 *
 * xxHash implementation is now directly integrated within xxhash.h.
 * As a consequence, xxhash.c is no longer needed in /include.
 *
 * xxhash.c is still available and is still useful.
 * In a "normal" setup, when xxhash is not inlined,
 * xxhash.h only exposes the prototypes and public symbols,
 * while xxhash.c can be built into an object file xxhash.o
 * which can then be linked into the final binary.
 ************************************************************************/

#if ( defined(XXH_INLINE_ALL) || defined(XXH_PRIVATE_API) \
   || defined(XXH_IMPLEMENTATION) ) && !defined(XXH_IMPLEM_13a8737387)
#  define XXH_IMPLEM_13a8737387

/* *************************************
*  Tuning parameters
***************************************/

/*!
 * @defgroup tuning Tuning parameters
 * @{
 *
 * Various macros to control xxHash's behavior.
 */
#ifdef XXH_DOXYGEN
/*!
 * @brief Define this to disable 64-bit code.
 *
 * Useful if only using the @ref xxh32_family and you have a strict C90 compiler.
 */
#  define XXH_NO_LONG_LONG
#  undef XXH_NO_LONG_LONG /* don't actually */
/*!
 * @brief Controls how unaligned memory is accessed.
 *
 * By default, access to unaligned memory is controlled by `memcpy()`, which is
 * safe and portable.
 *
 * Unfortunately, on some target/compiler combinations, the generated assembly
 * is sub-optimal.
 *
 * The below switch allow selection of a different access method
 * in the search for improved performance.
 *
 * @par Possible options:
 *
 *  - `XXH_FORCE_MEMORY_ACCESS=0` (default): `memcpy`
 *   @par
 *     Use `memcpy()`. Safe and portable. Note that most modern compilers will
 *     eliminate the function call and treat it as an unaligned access.
 *
 *  - `XXH_FORCE_MEMORY_ACCESS=1`: `__attribute__((packed))`
 *   @par
 *     Depends on compiler extensions and is therefore not portable.
 *     This method is safe _if_ your compiler supports it,
 *     and *generally* as fast or faster than `memcpy`.
 *
 *  - `XXH_FORCE_MEMORY_ACCESS=2`: Direct cast
 *  @par
 *     Casts directly and dereferences. This method doesn't depend on the
 *     compiler, but it violates the C standard as it directly dereferences an
 *     unaligned pointer. It can generate buggy code on targets which do not
 *     support unaligned memory accesses, but in some circumstances, it's the
 *     only known way to get the most performance.
 *
 *  - `XXH_FORCE_MEMORY_ACCESS=3`: Byteshift
 *  @par
 *     Also portable. This can generate the best code on old compilers which don't
 *     inline small `memcpy()` calls, and it might also be faster on big-endian
 *     systems which lack a native byteswap instruction. However, some compilers
 *     will emit literal byteshifts even if the target supports unaligned access.
 *  .
 *
 * @warning
 *   Methods 1 and 2 rely on implementation-defined behavior. Use these with
 *   care, as what works on one compiler/platform/optimization level may cause
 *   another to read garbage data or even crash.
 *
 * See http://fastcompression.blogspot.com/2015/08/accessing-unaligned-memory.html for details.
 *
 * Prefer these methods in priority order (0 > 3 > 1 > 2)
 */
#  define XXH_FORCE_MEMORY_ACCESS 0

/*!
 * @def XXH_FORCE_ALIGN_CHECK
 * @brief If defined to non-zero, adds a special path for aligned inputs (XXH32()
 * and XXH64() only).
 *
 * This is an important performance trick for architectures without decent
 * unaligned memory access performance.
 *
 * It checks for input alignment, and when conditions are met, uses a "fast
 * path" employing direct 32-bit/64-bit reads, resulting in _dramatically
 * faster_ read speed.
 *
 * The check costs one initial branch per hash, which is generally negligible,
 * but not zero.
 *
 * Moreover, it's not useful to generate an additional code path if memory
 * access uses the same instruction for both aligned and unaligned
 * addresses (e.g. x86 and aarch64).
 *
 * In these cases, the alignment check can be removed by setting this macro to 0.
 * Then the code will always use unaligned memory access.
 * Align check is automatically disabled on x86, x64 & arm64,
 * which are platforms known to offer good unaligned memory accesses performance.
 *
 * This option does not affect XXH3 (only XXH32 and XXH64).
 */
#  define XXH_FORCE_ALIGN_CHECK 0

/*!
 * @def XXH_NO_INLINE_HINTS
 * @brief When non-zero, sets all functions to `static`.
 *
 * By default, xxHash tries to force the compiler to inline almost all internal
 * functions.
 *
 * This can usually improve performance due to reduced jumping and improved
 * constant folding, but significantly increases the size of the binary which
 * might not be favorable.
 *
 * Additionally, sometimes the forced inlining can be detrimental to performance,
 * depending on the architecture.
 *
 * XXH_NO_INLINE_HINTS marks all internal functions as static, giving the
 * compiler full control on whether to inline or not.
 *
 * When not optimizing (-O0), optimizing for size (-Os, -Oz), or using
 * -fno-inline with GCC or Clang, this will automatically be defined.
 */
#  define XXH_NO_INLINE_HINTS 0

/*!
 * @def XXH3_INLINE_SECRET
 * @brief Determines whether to inline the XXH3 withSecret code.
 *
 * When the secret size is known, the compiler can improve the performance
 * of XXH3_64bits_withSecret() and XXH3_128bits_withSecret().
 *
 * However, if the secret size is not known, it doesn't have any benefit. This
 * happens when xxHash is compiled into a global symbol. Therefore, if
 * @ref XXH_INLINE_ALL is *not* defined, this will be defined to 0.
 *
 * Additionally, this defaults to 0 on GCC 12+, which has an issue with function pointers
 * that are *sometimes* force inline on -Og, and it is impossible to automatically
 * detect this optimization level.
 */
#  define XXH3_INLINE_SECRET 0

/*!
 * @def XXH32_ENDJMP
 * @brief Whether to use a jump for `XXH32_finalize`.
 *
 * For performance, `XXH32_finalize` uses multiple branches in the finalizer.
 * This is generally preferable for performance,
 * but depending on exact architecture, a jmp may be preferable.
 *
 * This setting is only possibly making a difference for very small inputs.
 */
#  define XXH32_ENDJMP 0

/*!
 * @internal
 * @brief Redefines old internal names.
 *
 * For compatibility with code that uses xxHash's internals before the names
 * were changed to improve namespacing. There is no other reason to use this.
 */
#  define XXH_OLD_NAMES
#  undef XXH_OLD_NAMES /* don't actually use, it is ugly. */
#endif /* XXH_DOXYGEN */
/*!
 * @}
 */

#ifndef XXH_FORCE_MEMORY_ACCESS   /* can be defined externally, on command line for example */
   /* prefer __packed__ structures (method 1) for gcc on armv7+ and mips */
#  if !defined(__clang__) && \
( \
    (defined(__INTEL_COMPILER) && !defined(_WIN32)) || \
    ( \
        defined(__GNUC__) && ( \
            (defined(__ARM_ARCH) && __ARM_ARCH >= 7) || \
            ( \
                defined(__mips__) && \
                (__mips <= 5 || __mips_isa_rev < 6) && \
                (!defined(__mips16) || defined(__mips_mips16e2)) \
            ) \
        ) \
    ) \
)
#    define XXH_FORCE_MEMORY_ACCESS 1
#  endif
#endif

#ifndef XXH_FORCE_ALIGN_CHECK  /* can be defined externally */
#  if defined(__i386)  || defined(__x86_64__) || defined(__aarch64__) \
   || defined(_M_IX86) || defined(_M_X64)     || defined(_M_ARM64) /* visual */
#    define XXH_FORCE_ALIGN_CHECK 0
#  else
#    define XXH_FORCE_ALIGN_CHECK 1
#  endif
#endif

#ifndef XXH_NO_INLINE_HINTS
#  if defined(__OPTIMIZE_SIZE__) /* -Os, -Oz */ \
   || defined(__NO_INLINE__)     /* -O0, -fno-inline */
#    define XXH_NO_INLINE_HINTS 1
#  else
#    define XXH_NO_INLINE_HINTS 0
#  endif
#endif

#ifndef XXH3_INLINE_SECRET
#  if (defined(__GNUC__) && !defined(__clang__) && __GNUC__ >= 12) \
     || !defined(XXH_INLINE_ALL)
#    define XXH3_INLINE_SECRET 0
#  else
#    define XXH3_INLINE_SECRET 1
#  endif
#endif

#ifndef XXH32_ENDJMP
/* generally preferable for performance */
#  define XXH32_ENDJMP 0
#endif

/*!
 * @defgroup impl Implementation
 * @{
 */


/* *************************************
*  Includes & Memory related functions
***************************************/
/*
 * Modify the local functions below should you wish to use
 * different memory routines for malloc() and free()
 */
#include <stdlib.h>

/*!
 * @internal
 * @brief Modify this function to use a different routine than malloc().
 */
static void* XXH_malloc(size_t s) { return malloc(s); }

/*!
 * @internal
 * @brief Modify this function to use a different routine than free().
 */
static void XXH_free(void* p) { free(p); }

#include <string.h>

/*!
 * @internal
 * @brief Modify this function to use a different routine than memcpy().
 */
static void* XXH_memcpy(void* dest, const void* src, size_t size)
{
    return memcpy(dest,src,size);
}

#include <limits.h>   /* ULLONG_MAX */


/* *************************************
*  Compiler Specific Options
***************************************/
#ifdef _MSC_VER /* Visual Studio warning fix */
#  pragma warning(disable : 4127) /* disable: C4127: conditional expression is constant */
#endif

#if XXH_NO_INLINE_HINTS  /* disable inlining hints */
#  if defined(__GNUC__) || defined(__clang__)
#    define XXH_FORCE_INLINE static __attribute__((unused))
#  else
#    define XXH_FORCE_INLINE static
#  endif
#  define XXH_NO_INLINE static
/* enable inlining hints */
#elif defined(__GNUC__) || defined(__clang__)
#  define XXH_FORCE_INLINE static __inline__ __attribute__((always_inline, unused))
#  define XXH_NO_INLINE static __attribute__((noinline))
#elif defined(_MSC_VER)  /* Visual Studio */
#  define XXH_FORCE_INLINE static __forceinline
#  define XXH_NO_INLINE static __declspec(noinline)
#elif defined (__cplusplus) \
  || (defined (__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L))   /* C99 */
#  define XXH_FORCE_INLINE static inline
#  define XXH_NO_INLINE static
#else
#  define XXH_FORCE_INLINE static
#  define XXH_NO_INLINE static
#endif

#if XXH3_INLINE_SECRET
#  define XXH3_WITH_SECRET_INLINE XXH_FORCE_INLINE
#else
#  define XXH3_WITH_SECRET_INLINE XXH_NO_INLINE
#endif


/* *************************************
*  Debug
***************************************/
/*!
 * @ingroup tuning
 * @def XXH_DEBUGLEVEL
 * @brief Sets the debugging level.
 *
 * XXH_DEBUGLEVEL is expected to be defined externally, typically via the
 * compiler's command line options. The value must be a number.
 */
#ifndef XXH_DEBUGLEVEL
#  ifdef DEBUGLEVEL /* backwards compat */
#    define XXH_DEBUGLEVEL DEBUGLEVEL
#  else
#    define XXH_DEBUGLEVEL 0
#  endif
#endif

#if (XXH_DEBUGLEVEL>=1)
#  include <assert.h>   /* note: can still be disabled with NDEBUG */
#  define XXH_ASSERT(c)   assert(c)
#else
#  define XXH_ASSERT(c)   ((void)0)
#endif

/* note: use after variable declarations */
#ifndef XXH_STATIC_ASSERT
#  if defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 201112L)    /* C11 */
#    define XXH_STATIC_ASSERT_WITH_MESSAGE(c,m) do { _Static_assert((c),m); } while(0)
#  elif defined(__cplusplus) && (__cplusplus >= 201103L)            /* C++11 */
#    define XXH_STATIC_ASSERT_WITH_MESSAGE(c,m) do { static_assert((c),m); } while(0)
#  else
#    define XXH_STATIC_ASSERT_WITH_MESSAGE(c,m) do { struct xxh_sa { char x[(c) ? 1 : -1]; }; } while(0)
#  endif
#  define XXH_STATIC_ASSERT(c) XXH_STATIC_ASSERT_WITH_MESSAGE((c),#c)
#endif

/*!
 * @internal
 * @def XXH_COMPILER_GUARD(var)
 * @brief Used to prevent unwanted optimizations for @p var.
 *
 * It uses an empty GCC inline assembly statement with a register constraint
 * which forces @p var into a general purpose register (eg eax, ebx, ecx
 * on x86) and marks it as modified.
 *
 * This is used in a few places to avoid unwanted autovectorization (e.g.
 * XXH32_round()). All vectorization we want is explicit via intrinsics,
 * and _usually_ isn't wanted elsewhere.
 *
 * We also use it to prevent unwanted constant folding for AArch64 in
 * XXH3_initCustomSecret_scalar().
 */
#if defined(__GNUC__) || defined(__clang__)
#  define XXH_COMPILER_GUARD(var) __asm__ __volatile__("" : "+r" (var))
#else
#  define XXH_COMPILER_GUARD(var) ((void)0)
#endif

/* *************************************
*  Basic Types
***************************************/
#if !defined (__VMS) \
 && (defined (__cplusplus) \
 || (defined (__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L) /* C99 */) )
# include <stdint.h>
  typedef uint8_t xxh_u8;
#else
  typedef unsigned char xxh_u8;
#endif
typedef XXH32_hash_t xxh_u32;

#ifdef XXH_OLD_NAMES
#  define BYTE xxh_u8
#  define U8   xxh_u8
#  define U32  xxh_u32
#endif

/* ***   Memory access   *** */

/*!
 * @internal
 * @fn xxh_u32 XXH_read32(const void* ptr)
 * @brief Reads an unaligned 32-bit integer from @p ptr in native endianness.
 *
 * Affected by @ref XXH_FORCE_MEMORY_ACCESS.
 *
 * @param ptr The pointer to read from.
 * @return The 32-bit native endian integer from the bytes at @p ptr.
 */

/*!
 * @internal
 * @fn xxh_u32 XXH_readLE32(const void* ptr)
 * @brief Reads an unaligned 32-bit little endian integer from @p ptr.
 *
 * Affected by @ref XXH_FORCE_MEMORY_ACCESS.
 *
 * @param ptr The pointer to read from.
 * @return The 32-bit little endian integer from the bytes at @p ptr.
 */

/*!
 * @internal
 * @fn xxh_u32 XXH_readBE32(const void* ptr)
 * @brief Reads an unaligned 32-bit big endian integer from @p ptr.
 *
 * Affected by @ref XXH_FORCE_MEMORY_ACCESS.
 *
 * @param ptr The pointer to read from.
 * @return The 32-bit big endian integer from the bytes at @p ptr.
 */

/*!
 * @internal
 * @fn xxh_u32 XXH_readLE32_align(const void* ptr, XXH_alignment align)
 * @brief Like @ref XXH_readLE32(), but has an option for aligned reads.
 *
 * Affected by @ref XXH_FORCE_MEMORY_ACCESS.
 * Note that when @ref XXH_FORCE_ALIGN_CHECK == 0, the @p align parameter is
 * always @ref XXH_alignment::XXH_unaligned.
 *
 * @param ptr The pointer to read from.
 * @param align Whether @p ptr is aligned.
 * @pre
 *   If @p align == @ref XXH_alignment::XXH_aligned, @p ptr must be 4 byte
 *   aligned.
 * @return The 32-bit little endian integer from the bytes at @p ptr.
 */

#if (defined(XXH_FORCE_MEMORY_ACCESS) && (XXH_FORCE_MEMORY_ACCESS==3))
/*
 * Manual byteshift. Best for old compilers which don't inline memcpy.
 * We actually directly use XXH_readLE32 and XXH_readBE32.
 */
#elif (defined(XXH_FORCE_MEMORY_ACCESS) && (XXH_FORCE_MEMORY_ACCESS==2))

/*
 * Force direct memory access. Only works on CPU which support unaligned memory
 * access in hardware.
 */
static xxh_u32 XXH_read32(const void* memPtr) { return *(const xxh_u32*) memPtr; }

#elif (defined(XXH_FORCE_MEMORY_ACCESS) && (XXH_FORCE_MEMORY_ACCESS==1))

/*
 * __pack instructions are safer but compiler specific, hence potentially
 * problematic for some compilers.
 *
 * Currently only defined for GCC and ICC.
 */
#ifdef XXH_OLD_NAMES
typedef union { xxh_u32 u32; } __attribute__((packed)) unalign;
#endif
static xxh_u32 XXH_read32(const void* ptr)
{
    typedef union { xxh_u32 u32; } __attribute__((packed)) xxh_unalign;
    return ((const xxh_unalign*)ptr)->u32;
}

#else

/*
 * Portable and safe solution. Generally efficient.
 * see: http://fastcompression.blogspot.com/2015/08/accessing-unaligned-memory.html
 */
static xxh_u32 XXH_read32(const void* memPtr)
{
    xxh_u32 val;
    XXH_memcpy(&val, memPtr, sizeof(val));
    return val;
}

#endif   /* XXH_FORCE_DIRECT_MEMORY_ACCESS */


/* ***   Endianness   *** */

/*!
 * @ingroup tuning
 * @def XXH_CPU_LITTLE_ENDIAN
 * @brief Whether the target is little endian.
 *
 * Defined to 1 if the target is little endian, or 0 if it is big endian.
 * It can be defined externally, for example on the compiler command line.
 *
 * If it is not defined,
 * a runtime check (which is usually constant folded) is used instead.
 *
 * @note
 *   This is not necessarily defined to an integer constant.
 *
 * @see XXH_isLittleEndian() for the runtime check.
 */
#ifndef XXH_CPU_LITTLE_ENDIAN
/*
 * Try to detect endianness automatically, to avoid the nonstandard behavior
 * in `XXH_isLittleEndian()`
 */
#  if defined(_WIN32) /* Windows is always little endian */ \
     || defined(__LITTLE_ENDIAN__) \
     || (defined(__BYTE_ORDER__) && __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__)
#    define XXH_CPU_LITTLE_ENDIAN 1
#  elif defined(__BIG_ENDIAN__) \
     || (defined(__BYTE_ORDER__) && __BYTE_ORDER__ == __ORDER_BIG_ENDIAN__)
#    define XXH_CPU_LITTLE_ENDIAN 0
#  else
/*!
 * @internal
 * @brief Runtime check for @ref XXH_CPU_LITTLE_ENDIAN.
 *
 * Most compilers will constant fold this.
 */
static int XXH_isLittleEndian(void)
{
    /*
     * Portable and well-defined behavior.
     * Don't use static: it is detrimental to performance.
     */
    const union { xxh_u32 u; xxh_u8 c[4]; } one = { 1 };
    return one.c[0];
}
#   define XXH_CPU_LITTLE_ENDIAN   XXH_isLittleEndian()
#  endif
#endif




/* ****************************************
*  Compiler-specific Functions and Macros
******************************************/
#define XXH_GCC_VERSION (__GNUC__ * 100 + __GNUC_MINOR__)

#ifdef __has_builtin
#  define XXH_HAS_BUILTIN(x) __has_builtin(x)
#else
#  define XXH_HAS_BUILTIN(x) 0
#endif

/*!
 * @internal
 * @def XXH_rotl32(x,r)
 * @brief 32-bit rotate left.
 *
 * @param x The 32-bit integer to be rotated.
 * @param r The number of bits to rotate.
 * @pre
 *   @p r > 0 && @p r < 32
 * @note
 *   @p x and @p r may be evaluated multiple times.
 * @return The rotated result.
 */
#if !defined(NO_CLANG_BUILTIN) && XXH_HAS_BUILTIN(__builtin_rotateleft32) \
                               && XXH_HAS_BUILTIN(__builtin_rotateleft64)
#  define XXH_rotl32 __builtin_rotateleft32
#  define XXH_rotl64 __builtin_rotateleft64
/* Note: although _rotl exists for minGW (GCC under windows), performance seems poor */
#elif defined(_MSC_VER)
#  define XXH_rotl32(x,r) _rotl(x,r)
#  define XXH_rotl64(x,r) _rotl64(x,r)
#else
#  define XXH_rotl32(x,r) (((x) << (r)) | ((x) >> (32 - (r))))
#  define XXH_rotl64(x,r) (((x) << (r)) | ((x) >> (64 - (r))))
#endif

/*!
 * @internal
 * @fn xxh_u32 XXH_swap32(xxh_u32 x)
 * @brief A 32-bit byteswap.
 *
 * @param x The 32-bit integer to byteswap.
 * @return @p x, byteswapped.
 */
#if defined(_MSC_VER)     /* Visual Studio */
#  define XXH_swap32 _byteswap_ulong
#elif XXH_GCC_VERSION >= 403
#  define XXH_swap32 __builtin_bswap32
#else
static xxh_u32 XXH_swap32 (xxh_u32 x)
{
    return  ((x << 24) & 0xff000000 ) |
            ((x <<  8) & 0x00ff0000 ) |
            ((x >>  8) & 0x0000ff00 ) |
            ((x >> 24) & 0x000000ff );
}
#endif


/* ***************************
*  Memory reads
*****************************/

/*!
 * @internal
 * @brief Enum to indicate whether a pointer is aligned.
 */
typedef enum {
    XXH_aligned,  /*!< Aligned */
    XXH_unaligned /*!< Possibly unaligned */
} XXH_alignment;

/*
 * XXH_FORCE_MEMORY_ACCESS==3 is an endian-independent byteshift load.
 *
 * This is ideal for older compilers which don't inline memcpy.
 */
#if (defined(XXH_FORCE_MEMORY_ACCESS) && (XXH_FORCE_MEMORY_ACCESS==3))

XXH_FORCE_INLINE xxh_u32 XXH_readLE32(const void* memPtr)
{
    const xxh_u8* bytePtr = (const xxh_u8 *)memPtr;
    return bytePtr[0]
         | ((xxh_u32)bytePtr[1] << 8)
         | ((xxh_u32)bytePtr[2] << 16)
         | ((xxh_u32)bytePtr[3] << 24);
}

XXH_FORCE_INLINE xxh_u32 XXH_readBE32(const void* memPtr)
{
    const xxh_u8* bytePtr = (const xxh_u8 *)memPtr;
    return bytePtr[3]
         | ((xxh_u32)bytePtr[2] << 8)
         | ((xxh_u32)bytePtr[1] << 16)
         | ((xxh_u32)bytePtr[0] << 24);
}

#else
XXH_FORCE_INLINE xxh_u32 XXH_readLE32(const void* ptr)
{
    return XXH_CPU_LITTLE_ENDIAN ? XXH_read32(ptr) : XXH_swap32(XXH_read32(ptr));
}

static xxh_u32 XXH_readBE32(const void* ptr)
{
    return XXH_CPU_LITTLE_ENDIAN ? XXH_swap32(XXH_read32(ptr)) : XXH_read32(ptr);
}
#endif

XXH_FORCE_INLINE xxh_u32
XXH_readLE32_align(const void* ptr, XXH_alignment align)
{
    if (align==XXH_unaligned) {
        return XXH_readLE32(ptr);
    } else {
        return XXH_CPU_LITTLE_ENDIAN ? *(const xxh_u32*)ptr : XXH_swap32(*(const xxh_u32*)ptr);
    }
}


/* *************************************
*  Misc
***************************************/
/*! @ingroup public */
XXH_PUBLIC_API unsigned XXH_versionNumber (void) { return XXH_VERSION_NUMBER; }


/* *******************************************************************
*  32-bit hash functions
*********************************************************************/
/*!
 * @}
 * @defgroup xxh32_impl XXH32 implementation
 * @ingroup impl
 * @{
 */
 /* #define instead of static const, to be used as initializers */
#define XXH_PRIME32_1  0x9E3779B1U  /*!< 0b10011110001101110111100110110001 */
#define XXH_PRIME32_2  0x85EBCA77U  /*!< 0b10000101111010111100101001110111 */
#define XXH_PRIME32_3  0xC2B2AE3DU  /*!< 0b11000010101100101010111000111101 */
#define XXH_PRIME32_4  0x27D4EB2FU  /*!< 0b00100111110101001110101100101111 */
#define XXH_PRIME32_5  0x165667B1U  /*!< 0b00010110010101100110011110110001 */

#ifdef XXH_OLD_NAMES
#  define PRIME32_1 XXH_PRIME32_1
#  define PRIME32_2 XXH_PRIME32_2
#  define PRIME32_3 XXH_PRIME32_3
#  define PRIME32_4 XXH_PRIME32_4
#  define PRIME32_5 XXH_PRIME32_5
#endif

/*!
 * @internal
 * @brief Normal stripe processing routine.
 *
 * This shuffles the bits so that any bit from @p input impacts several bits in
 * @p acc.
 *
 * @param acc The accumulator lane.
 * @param input The stripe of input to mix.
 * @return The mixed accumulator lane.
 */
static xxh_u32 XXH32_round(xxh_u32 acc, xxh_u32 input)
{
    acc += input * XXH_PRIME32_2;
    acc  = XXH_rotl32(acc, 13);
    acc *= XXH_PRIME32_1;
#if (defined(__SSE4_1__) || defined(__aarch64__)) && !defined(XXH_ENABLE_AUTOVECTORIZE)
    /*
     * UGLY HACK:
     * A compiler fence is the only thing that prevents GCC and Clang from
     * autovectorizing the XXH32 loop (pragmas and attributes don't work for some
     * reason) without globally disabling SSE4.1.
     *
     * The reason we want to avoid vectorization is because despite working on
     * 4 integers at a time, there are multiple factors slowing XXH32 down on
     * SSE4:
     * - There's a ridiculous amount of lag from pmulld (10 cycles of latency on
     *   newer chips!) making it slightly slower to multiply four integers at
     *   once compared to four integers independently. Even when pmulld was
     *   fastest, Sandy/Ivy Bridge, it is still not worth it to go into SSE
     *   just to multiply unless doing a long operation.
     *
     * - Four instructions are required to rotate,
     *      movqda tmp,  v // not required with VEX encoding
     *      pslld  tmp, 13 // tmp <<= 13
     *      psrld  v,   19 // x >>= 19
     *      por    v,  tmp // x |= tmp
     *   compared to one for scalar:
     *      roll   v, 13    // reliably fast across the board
     *      shldl  v, v, 13 // Sandy Bridge and later prefer this for some reason
     *
     * - Instruction level parallelism is actually more beneficial here because
     *   the SIMD actually serializes this operation: While v1 is rotating, v2
     *   can load data, while v3 can multiply. SSE forces them to operate
     *   together.
     *
     * This is also enabled on AArch64, as Clang autovectorizes it incorrectly
     * and it is pointless writing a NEON implementation that is basically the
     * same speed as scalar for XXH32.
     */
    XXH_COMPILER_GUARD(acc);
#endif
    return acc;
}

/*!
 * @internal
 * @brief Mixes all bits to finalize the hash.
 *
 * The final mix ensures that all input bits have a chance to impact any bit in
 * the output digest, resulting in an unbiased distribution.
 *
 * @param h32 The hash to avalanche.
 * @return The avalanched hash.
 */
static xxh_u32 XXH32_avalanche(xxh_u32 h32)
{
    h32 ^= h32 >> 15;
    h32 *= XXH_PRIME32_2;
    h32 ^= h32 >> 13;
    h32 *= XXH_PRIME32_3;
    h32 ^= h32 >> 16;
    return(h32);
}

#define XXH_get32bits(p) XXH_readLE32_align(p, align)

/*!
 * @internal
 * @brief Processes the last 0-15 bytes of @p ptr.
 *
 * There may be up to 15 bytes remaining to consume from the input.
 * This final stage will digest them to ensure that all input bytes are present
 * in the final mix.
 *
 * @param h32 The hash to finalize.
 * @param ptr The pointer to the remaining input.
 * @param len The remaining length, modulo 16.
 * @param align Whether @p ptr is aligned.
 * @return The finalized hash.
 */
static xxh_u32
XXH32_finalize(xxh_u32 h32, const xxh_u8* ptr, size_t len, XXH_alignment align)
{
#define XXH_PROCESS1 do {                           \
    h32 += (*ptr++) * XXH_PRIME32_5;                \
    h32 = XXH_rotl32(h32, 11) * XXH_PRIME32_1;      \
} while (0)

#define XXH_PROCESS4 do {                           \
    h32 += XXH_get32bits(ptr) * XXH_PRIME32_3;      \
    ptr += 4;                                   \
    h32  = XXH_rotl32(h32, 17) * XXH_PRIME32_4;     \
} while (0)

    if (ptr==NULL) XXH_ASSERT(len == 0);

    /* Compact rerolled version; generally faster */
    if (!XXH32_ENDJMP) {
        len &= 15;
        while (len >= 4) {
            XXH_PROCESS4;
            len -= 4;
        }
        while (len > 0) {
            XXH_PROCESS1;
            --len;
        }
        return XXH32_avalanche(h32);
    } else {
         switch(len&15) /* or switch(bEnd - p) */ {
           case 12:      XXH_PROCESS4;
                         XXH_FALLTHROUGH;
           case 8:       XXH_PROCESS4;
                         XXH_FALLTHROUGH;
           case 4:       XXH_PROCESS4;
                         return XXH32_avalanche(h32);

           case 13:      XXH_PROCESS4;
                         XXH_FALLTHROUGH;
           case 9:       XXH_PROCESS4;
                         XXH_FALLTHROUGH;
           case 5:       XXH_PROCESS4;
                         XXH_PROCESS1;
                         return XXH32_avalanche(h32);

           case 14:      XXH_PROCESS4;
                         XXH_FALLTHROUGH;
           case 10:      XXH_PROCESS4;
                         XXH_FALLTHROUGH;
           case 6:       XXH_PROCESS4;
                         XXH_PROCESS1;
                         XXH_PROCESS1;
                         return XXH32_avalanche(h32);

           case 15:      XXH_PROCESS4;
                         XXH_FALLTHROUGH;
           case 11:      XXH_PROCESS4;
                         XXH_FALLTHROUGH;
           case 7:       XXH_PROCESS4;
                         XXH_FALLTHROUGH;
           case 3:       XXH_PROCESS1;
                         XXH_FALLTHROUGH;
           case 2:       XXH_PROCESS1;
                         XXH_FALLTHROUGH;
           case 1:       XXH_PROCESS1;
                         XXH_FALLTHROUGH;
           case 0:       return XXH32_avalanche(h32);
        }
        XXH_ASSERT(0);
        return h32;   /* reaching this point is deemed impossible */
    }
}

#ifdef XXH_OLD_NAMES
#  define PROCESS1 XXH_PROCESS1
#  define PROCESS4 XXH_PROCESS4
#else
#  undef XXH_PROCESS1
#  undef XXH_PROCESS4
#endif

/*!
 * @internal
 * @brief The implementation for @ref XXH32().
 *
 * @param input , len , seed Directly passed from @ref XXH32().
 * @param align Whether @p input is aligned.
 * @return The calculated hash.
 */
XXH_FORCE_INLINE xxh_u32
XXH32_endian_align(const xxh_u8* input, size_t len, xxh_u32 seed, XXH_alignment align)
{
    xxh_u32 h32;

    if (input==NULL) XXH_ASSERT(len == 0);

    if (len>=16) {
        const xxh_u8* const bEnd = input + len;
        const xxh_u8* const limit = bEnd - 15;
        xxh_u32 v1 = seed + XXH_PRIME32_1 + XXH_PRIME32_2;
        xxh_u32 v2 = seed + XXH_PRIME32_2;
        xxh_u32 v3 = seed + 0;
        xxh_u32 v4 = seed - XXH_PRIME32_1;

        do {
            v1 = XXH32_round(v1, XXH_get32bits(input)); input += 4;
            v2 = XXH32_round(v2, XXH_get32bits(input)); input += 4;
            v3 = XXH32_round(v3, XXH_get32bits(input)); input += 4;
            v4 = XXH32_round(v4, XXH_get32bits(input)); input += 4;
        } while (input < limit);

        h32 = XXH_rotl32(v1, 1)  + XXH_rotl32(v2, 7)
            + XXH_rotl32(v3, 12) + XXH_rotl32(v4, 18);
    } else {
        h32  = seed + XXH_PRIME32_5;
    }

    h32 += (xxh_u32)len;

    return XXH32_finalize(h32, input, len&15, align);
}

/*! @ingroup xxh32_family */
XXH_PUBLIC_API XXH32_hash_t XXH32 (const void* input, size_t len, XXH32_hash_t seed)
{
#if 0
    /* Simple version, good for code maintenance, but unfortunately slow for small inputs */
    XXH32_state_t state;
    XXH32_reset(&state, seed);
    XXH32_update(&state, (const xxh_u8*)input, len);
    return XXH32_digest(&state);
#else
    if (XXH_FORCE_ALIGN_CHECK) {
        if ((((size_t)input) & 3) == 0) {   /* Input is 4-bytes aligned, leverage the speed benefit */
            return XXH32_endian_align((const xxh_u8*)input, len, seed, XXH_aligned);
    }   }

    return XXH32_endian_align((const xxh_u8*)input, len, seed, XXH_unaligned);
#endif
}



/*******   Hash streaming   *******/
/*!
 * @ingroup xxh32_family
 */
XXH_PUBLIC_API XXH32_state_t* XXH32_createState(void)
{
    return (XXH32_state_t*)XXH_malloc(sizeof(XXH32_state_t));
}
/*! @ingroup xxh32_family */
XXH_PUBLIC_API XXH_errorcode XXH32_freeState(XXH32_state_t* statePtr)
{
    XXH_free(statePtr);
    return XXH_OK;
}

/*! @ingroup xxh32_family */
XXH_PUBLIC_API void XXH32_copyState(XXH32_state_t* dstState, const XXH32_state_t* srcState)
{
    XXH_memcpy(dstState, srcState, sizeof(*dstState));
}

/*! @ingroup xxh32_family */
XXH_PUBLIC_API XXH_errorcode XXH32_reset(XXH32_state_t* statePtr, XXH32_hash_t seed)
{
    XXH32_state_t state;   /* using a local state to memcpy() in order to avoid strict-aliasing warnings */
    memset(&state, 0, sizeof(state));
    state.v[0] = seed + XXH_PRIME32_1 + XXH_PRIME32_2;
    state.v[1] = seed + XXH_PRIME32_2;
    state.v[2] = seed + 0;
    state.v[3] = seed - XXH_PRIME32_1;
    /* do not write into reserved, planned to be removed in a future version */
    XXH_memcpy(statePtr, &state, sizeof(state) - sizeof(state.reserved));
    return XXH_OK;
}


/*! @ingroup xxh32_family */
XXH_PUBLIC_API XXH_errorcode
XXH32_update(XXH32_state_t* state, const void* input, size_t len)
{
    if (input==NULL) {
        XXH_ASSERT(len == 0);
        return XXH_OK;
    }

    {   const xxh_u8* p = (const xxh_u8*)input;
        const xxh_u8* const bEnd = p + len;

        state->total_len_32 += (XXH32_hash_t)len;
        state->large_len |= (XXH32_hash_t)((len>=16) | (state->total_len_32>=16));

        if (state->memsize + len < 16)  {   /* fill in tmp buffer */
            XXH_memcpy((xxh_u8*)(state->mem32) + state->memsize, input, len);
            state->memsize += (XXH32_hash_t)len;
            return XXH_OK;
        }

        if (state->memsize) {   /* some data left from previous update */
            XXH_memcpy((xxh_u8*)(state->mem32) + state->memsize, input, 16-state->memsize);
            {   const xxh_u32* p32 = state->mem32;
                state->v[0] = XXH32_round(state->v[0], XXH_readLE32(p32)); p32++;
                state->v[1] = XXH32_round(state->v[1], XXH_readLE32(p32)); p32++;
                state->v[2] = XXH32_round(state->v[2], XXH_readLE32(p32)); p32++;
                state->v[3] = XXH32_round(state->v[3], XXH_readLE32(p32));
            }
            p += 16-state->memsize;
            state->memsize = 0;
        }

        if (p <= bEnd-16) {
            const xxh_u8* const limit = bEnd - 16;

            do {
                state->v[0] = XXH32_round(state->v[0], XXH_readLE32(p)); p+=4;
                state->v[1] = XXH32_round(state->v[1], XXH_readLE32(p)); p+=4;
                state->v[2] = XXH32_round(state->v[2], XXH_readLE32(p)); p+=4;
                state->v[3] = XXH32_round(state->v[3], XXH_readLE32(p)); p+=4;
            } while (p<=limit);

        }

        if (p < bEnd) {
            XXH_memcpy(state->mem32, p, (size_t)(bEnd-p));
            state->memsize = (unsigned)(bEnd-p);
        }
    }

    return XXH_OK;
}


/*! @ingroup xxh32_family */
XXH_PUBLIC_API XXH32_hash_t XXH32_digest(const XXH32_state_t* state)
{
    xxh_u32 h32;

    if (state->large_len) {
        h32 = XXH_rotl32(state->v[0], 1)
            + XXH_rotl32(state->v[1], 7)
            + XXH_rotl32(state->v[2], 12)
            + XXH_rotl32(state->v[3], 18);
    } else {
        h32 = state->v[2] /* == seed */ + XXH_PRIME32_5;
    }

    h32 += state->total_len_32;

    return XXH32_finalize(h32, (const xxh_u8*)state->mem32, state->memsize, XXH_aligned);
}


/*******   Canonical representation   *******/

/*!
 * @ingroup xxh32_family
 * The default return values from XXH functions are unsigned 32 and 64 bit
 * integers.
 *
 * The canonical representation uses big endian convention, the same convention
 * as human-readable numbers (large digits first).
 *
 * This way, hash values can be written into a file or buffer, remaining
 * comparable across different systems.
 *
 * The following functions allow transformation of hash values to and from their
 * canonical format.
 */
XXH_PUBLIC_API void XXH32_canonicalFromHash(XXH32_canonical_t* dst, XXH32_hash_t hash)
{
    XXH_STATIC_ASSERT(sizeof(XXH32_canonical_t) == sizeof(XXH32_hash_t));
    if (XXH_CPU_LITTLE_ENDIAN) hash = XXH_swap32(hash);
    XXH_memcpy(dst, &hash, sizeof(*dst));
}
/*! @ingroup xxh32_family */
XXH_PUBLIC_API XXH32_hash_t XXH32_hashFromCanonical(const XXH32_canonical_t* src)
{
    return XXH_readBE32(src);
}


#ifndef XXH_NO_LONG_LONG

/* *******************************************************************
*  64-bit hash functions
*********************************************************************/
/*!
 * @}
 * @ingroup impl
 * @{
 */
/*******   Memory access   *******/

typedef XXH64_hash_t xxh_u64;

#ifdef XXH_OLD_NAMES
#  define U64 xxh_u64
#endif

#if (defined(XXH_FORCE_MEMORY_ACCESS) && (XXH_FORCE_MEMORY_ACCESS==3))
/*
 * Manual byteshift. Best for old compilers which don't inline memcpy.
 * We actually directly use XXH_readLE64 and XXH_readBE64.
 */
#elif (defined(XXH_FORCE_MEMORY_ACCESS) && (XXH_FORCE_MEMORY_ACCESS==2))

/* Force direct memory access. Only works on CPU which support unaligned memory access in hardware */
static xxh_u64 XXH_read64(const void* memPtr)
{
    return *(const xxh_u64*) memPtr;
}

#elif (defined(XXH_FORCE_MEMORY_ACCESS) && (XXH_FORCE_MEMORY_ACCESS==1))

/*
 * __pack instructions are safer, but compiler specific, hence potentially
 * problematic for some compilers.
 *
 * Currently only defined for GCC and ICC.
 */
#ifdef XXH_OLD_NAMES
typedef union { xxh_u32 u32; xxh_u64 u64; } __attribute__((packed)) unalign64;
#endif
static xxh_u64 XXH_read64(const void* ptr)
{
    typedef union { xxh_u32 u32; xxh_u64 u64; } __attribute__((packed)) xxh_unalign64;
    return ((const xxh_unalign64*)ptr)->u64;
}

#else

/*
 * Portable and safe solution. Generally efficient.
 * see: http://fastcompression.blogspot.com/2015/08/accessing-unaligned-memory.html
 */
static xxh_u64 XXH_read64(const void* memPtr)
{
    xxh_u64 val;
    XXH_memcpy(&val, memPtr, sizeof(val));
    return val;
}

#endif   /* XXH_FORCE_DIRECT_MEMORY_ACCESS */

#if defined(_MSC_VER)     /* Visual Studio */
#  define XXH_swap64 _byteswap_uint64
#elif XXH_GCC_VERSION >= 403
#  define XXH_swap64 __builtin_bswap64
#else
static xxh_u64 XXH_swap64(xxh_u64 x)
{
    return  ((x << 56) & 0xff00000000000000ULL) |
            ((x << 40) & 0x00ff000000000000ULL) |
            ((x << 24) & 0x0000ff0000000000ULL) |
            ((x << 8)  & 0x000000ff00000000ULL) |
            ((x >> 8)  & 0x00000000ff000000ULL) |
            ((x >> 24) & 0x0000000000ff0000ULL) |
            ((x >> 40) & 0x000000000000ff00ULL) |
            ((x >> 56) & 0x00000000000000ffULL);
}
#endif


/* XXH_FORCE_MEMORY_ACCESS==3 is an endian-independent byteshift load. */
#if (defined(XXH_FORCE_MEMORY_ACCESS) && (XXH_FORCE_MEMORY_ACCESS==3))

XXH_FORCE_INLINE xxh_u64 XXH_readLE64(const void* memPtr)
{
    const xxh_u8* bytePtr = (const xxh_u8 *)memPtr;
    return bytePtr[0]
         | ((xxh_u64)bytePtr[1] << 8)
         | ((xxh_u64)bytePtr[2] << 16)
         | ((xxh_u64)bytePtr[3] << 24)
         | ((xxh_u64)bytePtr[4] << 32)
         | ((xxh_u64)bytePtr[5] << 40)
         | ((xxh_u64)bytePtr[6] << 48)
         | ((xxh_u64)bytePtr[7] << 56);
}

XXH_FORCE_INLINE xxh_u64 XXH_readBE64(const void* memPtr)
{
    const xxh_u8* bytePtr = (const xxh_u8 *)memPtr;
    return bytePtr[7]
         | ((xxh_u64)bytePtr[6] << 8)
         | ((xxh_u64)bytePtr[5] << 16)
         | ((xxh_u64)bytePtr[4] << 24)
         | ((xxh_u64)bytePtr[3] << 32)
         | ((xxh_u64)bytePtr[2] << 40)
         | ((xxh_u64)bytePtr[1] << 48)
         | ((xxh_u64)bytePtr[0] << 56);
}

#else
XXH_FORCE_INLINE xxh_u64 XXH_readLE64(const void* ptr)
{
    return XXH_CPU_LITTLE_ENDIAN ? XXH_read64(ptr) : XXH_swap64(XXH_read64(ptr));
}

static xxh_u64 XXH_readBE64(const void* ptr)
{
    return XXH_CPU_LITTLE_ENDIAN ? XXH_swap64(XXH_read64(ptr)) : XXH_read64(ptr);
}
#endif

XXH_FORCE_INLINE xxh_u64
XXH_readLE64_align(const void* ptr, XXH_alignment align)
{
    if (align==XXH_unaligned)
        return XXH_readLE64(ptr);
    else
        return XXH_CPU_LITTLE_ENDIAN ? *(const xxh_u64*)ptr : XXH_swap64(*(const xxh_u64*)ptr);
}


/*******   xxh64   *******/
/*!
 * @}
 * @defgroup xxh64_impl XXH64 implementation
 * @ingroup impl
 * @{
 */
/* #define rather that static const, to be used as initializers */
#define XXH_PRIME64_1  0x9E3779B185EBCA87ULL  /*!< 0b1001111000110111011110011011000110000101111010111100101010000111 */
#define XXH_PRIME64_2  0xC2B2AE3D27D4EB4FULL  /*!< 0b1100001010110010101011100011110100100111110101001110101101001111 */
#define XXH_PRIME64_3  0x165667B19E3779F9ULL  /*!< 0b0001011001010110011001111011000110011110001101110111100111111001 */
#define XXH_PRIME64_4  0x85EBCA77C2B2AE63ULL  /*!< 0b1000010111101011110010100111011111000010101100101010111001100011 */
#define XXH_PRIME64_5  0x27D4EB2F165667C5ULL  /*!< 0b0010011111010100111010110010111100010110010101100110011111000101 */

#ifdef XXH_OLD_NAMES
#  define PRIME64_1 XXH_PRIME64_1
#  define PRIME64_2 XXH_PRIME64_2
#  define PRIME64_3 XXH_PRIME64_3
#  define PRIME64_4 XXH_PRIME64_4
#  define PRIME64_5 XXH_PRIME64_5
#endif

static xxh_u64 XXH64_round(xxh_u64 acc, xxh_u64 input)
{
    acc += input * XXH_PRIME64_2;
    acc  = XXH_rotl64(acc, 31);
    acc *= XXH_PRIME64_1;
    return acc;
}

static xxh_u64 XXH64_mergeRound(xxh_u64 acc, xxh_u64 val)
{
    val  = XXH64_round(0, val);
    acc ^= val;
    acc  = acc * XXH_PRIME64_1 + XXH_PRIME64_4;
    return acc;
}

static xxh_u64 XXH64_avalanche(xxh_u64 h64)
{
    h64 ^= h64 >> 33;
    h64 *= XXH_PRIME64_2;
    h64 ^= h64 >> 29;
    h64 *= XXH_PRIME64_3;
    h64 ^= h64 >> 32;
    return h64;
}


#define XXH_get64bits(p) XXH_readLE64_align(p, align)

static xxh_u64
XXH64_finalize(xxh_u64 h64, const xxh_u8* ptr, size_t len, XXH_alignment align)
{
    if (ptr==NULL) XXH_ASSERT(len == 0);
    len &= 31;
    while (len >= 8) {
        xxh_u64 const k1 = XXH64_round(0, XXH_get64bits(ptr));
        ptr += 8;
        h64 ^= k1;
        h64  = XXH_rotl64(h64,27) * XXH_PRIME64_1 + XXH_PRIME64_4;
        len -= 8;
    }
    if (len >= 4) {
        h64 ^= (xxh_u64)(XXH_get32bits(ptr)) * XXH_PRIME64_1;
        ptr += 4;
        h64 = XXH_rotl64(h64, 23) * XXH_PRIME64_2 + XXH_PRIME64_3;
        len -= 4;
    }
    while (len > 0) {
        h64 ^= (*ptr++) * XXH_PRIME64_5;
        h64 = XXH_rotl64(h64, 11) * XXH_PRIME64_1;
        --len;
    }
    return  XXH64_avalanche(h64);
}

#ifdef XXH_OLD_NAMES
#  define PROCESS1_64 XXH_PROCESS1_64
#  define PROCESS4_64 XXH_PROCESS4_64
#  define PROCESS8_64 XXH_PROCESS8_64
#else
#  undef XXH_PROCESS1_64
#  undef XXH_PROCESS4_64
#  undef XXH_PROCESS8_64
#endif

XXH_FORCE_INLINE xxh_u64
XXH64_endian_align(const xxh_u8* input, size_t len, xxh_u64 seed, XXH_alignment align)
{
    xxh_u64 h64;
    if (input==NULL) XXH_ASSERT(len == 0);

    if (len>=32) {
        const xxh_u8* const bEnd = input + len;
        const xxh_u8* const limit = bEnd - 31;
        xxh_u64 v1 = seed + XXH_PRIME64_1 + XXH_PRIME64_2;
        xxh_u64 v2 = seed + XXH_PRIME64_2;
        xxh_u64 v3 = seed + 0;
        xxh_u64 v4 = seed - XXH_PRIME64_1;

        do {
            v1 = XXH64_round(v1, XXH_get64bits(input)); input+=8;
            v2 = XXH64_round(v2, XXH_get64bits(input)); input+=8;
            v3 = XXH64_round(v3, XXH_get64bits(input)); input+=8;
            v4 = XXH64_round(v4, XXH_get64bits(input)); input+=8;
        } while (input<limit);

        h64 = XXH_rotl64(v1, 1) + XXH_rotl64(v2, 7) + XXH_rotl64(v3, 12) + XXH_rotl64(v4, 18);
        h64 = XXH64_mergeRound(h64, v1);
        h64 = XXH64_mergeRound(h64, v2);
        h64 = XXH64_mergeRound(h64, v3);
        h64 = XXH64_mergeRound(h64, v4);

    } else {
        h64  = seed + XXH_PRIME64_5;
    }

    h64 += (xxh_u64) len;

    return XXH64_finalize(h64, input, len, align);
}


/*! @ingroup xxh64_family */
XXH_PUBLIC_API XXH64_hash_t XXH64 (const void* input, size_t len, XXH64_hash_t seed)
{
#if 0
    /* Simple version, good for code maintenance, but unfortunately slow for small inputs */
    XXH64_state_t state;
    XXH64_reset(&state, seed);
    XXH64_update(&state, (const xxh_u8*)input, len);
    return XXH64_digest(&state);
#else
    if (XXH_FORCE_ALIGN_CHECK) {
        if ((((size_t)input) & 7)==0) {  /* Input is aligned, let's leverage the speed advantage */
            return XXH64_endian_align((const xxh_u8*)input, len, seed, XXH_aligned);
    }   }

    return XXH64_endian_align((const xxh_u8*)input, len, seed, XXH_unaligned);

#endif
}

/*******   Hash Streaming   *******/

/*! @ingroup xxh64_family*/
XXH_PUBLIC_API XXH64_state_t* XXH64_createState(void)
{
    return (XXH64_state_t*)XXH_malloc(sizeof(XXH64_state_t));
}
/*! @ingroup xxh64_family */
XXH_PUBLIC_API XXH_errorcode XXH64_freeState(XXH64_state_t* statePtr)
{
    XXH_free(statePtr);
    return XXH_OK;
}

/*! @ingroup xxh64_family */
XXH_PUBLIC_API void XXH64_copyState(XXH64_state_t* dstState, const XXH64_state_t* srcState)
{
    XXH_memcpy(dstState, srcState, sizeof(*dstState));
}

/*! @ingroup xxh64_family */
XXH_PUBLIC_API XXH_errorcode XXH64_reset(XXH64_state_t* statePtr, XXH64_hash_t seed)
{
    XXH64_state_t state;   /* use a local state to memcpy() in order to avoid strict-aliasing warnings */
    memset(&state, 0, sizeof(state));
    state.v[0] = seed + XXH_PRIME64_1 + XXH_PRIME64_2;
    state.v[1] = seed + XXH_PRIME64_2;
    state.v[2] = seed + 0;
    state.v[3] = seed - XXH_PRIME64_1;
     /* do not write into reserved64, might be removed in a future version */
    XXH_memcpy(statePtr, &state, sizeof(state) - sizeof(state.reserved64));
    return XXH_OK;
}

/*! @ingroup xxh64_family */
XXH_PUBLIC_API XXH_errorcode
XXH64_update (XXH64_state_t* state, const void* input, size_t len)
{
    if (input==NULL) {
        XXH_ASSERT(len == 0);
        return XXH_OK;
    }

    {   const xxh_u8* p = (const xxh_u8*)input;
        const xxh_u8* const bEnd = p + len;

        state->total_len += len;

        if (state->memsize + len < 32) {  /* fill in tmp buffer */
            XXH_memcpy(((xxh_u8*)state->mem64) + state->memsize, input, len);
            state->memsize += (xxh_u32)len;
            return XXH_OK;
        }

        if (state->memsize) {   /* tmp buffer is full */
            XXH_memcpy(((xxh_u8*)state->mem64) + state->memsize, input, 32-state->memsize);
            state->v[0] = XXH64_round(state->v[0], XXH_readLE64(state->mem64+0));
            state->v[1] = XXH64_round(state->v[1], XXH_readLE64(state->mem64+1));
            state->v[2] = XXH64_round(state->v[2], XXH_readLE64(state->mem64+2));
            state->v[3] = XXH64_round(state->v[3], XXH_readLE64(state->mem64+3));
            p += 32 - state->memsize;
            state->memsize = 0;
        }

        if (p+32 <= bEnd) {
            const xxh_u8* const limit = bEnd - 32;

            do {
                state->v[0] = XXH64_round(state->v[0], XXH_readLE64(p)); p+=8;
                state->v[1] = XXH64_round(state->v[1], XXH_readLE64(p)); p+=8;
                state->v[2] = XXH64_round(state->v[2], XXH_readLE64(p)); p+=8;
                state->v[3] = XXH64_round(state->v[3], XXH_readLE64(p)); p+=8;
            } while (p<=limit);

        }

        if (p < bEnd) {
            XXH_memcpy(state->mem64, p, (size_t)(bEnd-p));
            state->memsize = (unsigned)(bEnd-p);
        }
    }

    return XXH_OK;
}


/*! @ingroup xxh64_family */
XXH_PUBLIC_API XXH64_hash_t XXH64_digest(const XXH64_state_t* state)
{
    xxh_u64 h64;

    if (state->total_len >= 32) {
        h64 = XXH_rotl64(state->v[0], 1) + XXH_rotl64(state->v[1], 7) + XXH_rotl64(state->v[2], 12) + XXH_rotl64(state->v[3], 18);
        h64 = XXH64_mergeRound(h64, state->v[0]);
        h64 = XXH64_mergeRound(h64, state->v[1]);
        h64 = XXH64_mergeRound(h64, state->v[2]);
        h64 = XXH64_mergeRound(h64, state->v[3]);
    } else {
        h64  = state->v[2] /*seed*/ + XXH_PRIME64_5;
    }

    h64 += (xxh_u64) state->total_len;

    return XXH64_finalize(h64, (const xxh_u8*)state->mem64, (size_t)state->total_len, XXH_aligned);
}


/******* Canonical representation   *******/

/*! @ingroup xxh64_family */
XXH_PUBLIC_API void XXH64_canonicalFromHash(XXH64_canonical_t* dst, XXH64_hash_t hash)
{
    XXH_STATIC_ASSERT(sizeof(XXH64_canonical_t) == sizeof(XXH64_hash_t));
    if (XXH_CPU_LITTLE_ENDIAN) hash = XXH_swap64(hash);
    XXH_memcpy(dst, &hash, sizeof(*dst));
}

/*! @ingroup xxh64_family */
XXH_PUBLIC_API XXH64_hash_t XXH64_hashFromCanonical(const XXH64_canonical_t* src)
{
    return XXH_readBE64(src);
}

#ifndef XXH_NO_XXH3

/* *********************************************************************
*  XXH3
*  New generation hash designed for speed on small keys and vectorization
************************************************************************ */
/*!
 * @}
 * @defgroup xxh3_impl XXH3 implementation
 * @ingroup impl
 * @{
 */

/* ===   Compiler specifics   === */

#if ((defined(sun) || defined(__sun)) && __cplusplus) /* Solaris includes __STDC_VERSION__ with C++. Tested with GCC 5.5 */
#  define XXH_RESTRICT /* disable */
#elif defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L   /* >= C99 */
#  define XXH_RESTRICT   restrict
#else
/* Note: it might be useful to define __restrict or __restrict__ for some C++ compilers */
#  define XXH_RESTRICT   /* disable */
#endif

#if (defined(__GNUC__) && (__GNUC__ >= 3))  \
  || (defined(__INTEL_COMPILER) && (__INTEL_COMPILER >= 800)) \
  || defined(__clang__)
#    define XXH_likely(x) __builtin_expect(x, 1)
#    define XXH_unlikely(x) __builtin_expect(x, 0)
#else
#    define XXH_likely(x) (x)
#    define XXH_unlikely(x) (x)
#endif

#if defined(__GNUC__)
#  if defined(__AVX2__)
#    include <immintrin.h>
#  elif defined(__SSE2__)
#    include <emmintrin.h>
#  elif defined(__ARM_NEON__) || defined(__ARM_NEON)
#    define inline __inline__  /* circumvent a clang bug */
#    include <arm_neon.h>
#    undef inline
#  endif
#elif defined(_MSC_VER)
#  include <intrin.h>
#endif

/*
 * One goal of XXH3 is to make it fast on both 32-bit and 64-bit, while
 * remaining a true 64-bit/128-bit hash function.
 *
 * This is done by prioritizing a subset of 64-bit operations that can be
 * emulated without too many steps on the average 32-bit machine.
 *
 * For example, these two lines seem similar, and run equally fast on 64-bit:
 *
 *   xxh_u64 x;
 *   x ^= (x >> 47); // good
 *   x ^= (x >> 13); // bad
 *
 * However, to a 32-bit machine, there is a major difference.
 *
 * x ^= (x >> 47) looks like this:
 *
 *   x.lo ^= (x.hi >> (47 - 32));
 *
 * while x ^= (x >> 13) looks like this:
 *
 *   // note: funnel shifts are not usually cheap.
 *   x.lo ^= (x.lo >> 13) | (x.hi << (32 - 13));
 *   x.hi ^= (x.hi >> 13);
 *
 * The first one is significantly faster than the second, simply because the
 * shift is larger than 32. This means:
 *  - All the bits we need are in the upper 32 bits, so we can ignore the lower
 *    32 bits in the shift.
 *  - The shift result will always fit in the lower 32 bits, and therefore,
 *    we can ignore the upper 32 bits in the xor.
 *
 * Thanks to this optimization, XXH3 only requires these features to be efficient:
 *
 *  - Usable unaligned access
 *  - A 32-bit or 64-bit ALU
 *      - If 32-bit, a decent ADC instruction
 *  - A 32 or 64-bit multiply with a 64-bit result
 *  - For the 128-bit variant, a decent byteswap helps short inputs.
 *
 * The first two are already required by XXH32, and almost all 32-bit and 64-bit
 * platforms which can run XXH32 can run XXH3 efficiently.
 *
 * Thumb-1, the classic 16-bit only subset of ARM's instruction set, is one
 * notable exception.
 *
 * First of all, Thumb-1 lacks support for the UMULL instruction which
 * performs the important long multiply. This means numerous __aeabi_lmul
 * calls.
 *
 * Second of all, the 8 functional registers are just not enough.
 * Setup for __aeabi_lmul, byteshift loads, pointers, and all arithmetic need
 * Lo registers, and this shuffling results in thousands more MOVs than A32.
 *
 * A32 and T32 don't have this limitation. They can access all 14 registers,
 * do a 32->64 multiply with UMULL, and the flexible operand allowing free
 * shifts is helpful, too.
 *
 * Therefore, we do a quick sanity check.
 *
 * If compiling Thumb-1 for a target which supports ARM instructions, we will
 * emit a warning, as it is not a "sane" platform to compile for.
 *
 * Usually, if this happens, it is because of an accident and you probably need
 * to specify -march, as you likely meant to compile for a newer architecture.
 *
 * Credit: large sections of the vectorial and asm source code paths
 *         have been contributed by @easyaspi314
 */
#if defined(__thumb__) && !defined(__thumb2__) && defined(__ARM_ARCH_ISA_ARM)
#   warning "XXH3 is highly inefficient without ARM or Thumb-2."
#endif

/* ==========================================
 * Vectorization detection
 * ========================================== */

#ifdef XXH_DOXYGEN
/*!
 * @ingroup tuning
 * @brief Overrides the vectorization implementation chosen for XXH3.
 *
 * Can be defined to 0 to disable SIMD or any of the values mentioned in
 * @ref XXH_VECTOR_TYPE.
 *
 * If this is not defined, it uses predefined macros to determine the best
 * implementation.
 */
#  define XXH_VECTOR XXH_SCALAR
/*!
 * @ingroup tuning
 * @brief Possible values for @ref XXH_VECTOR.
 *
 * Note that these are actually implemented as macros.
 *
 * If this is not defined, it is detected automatically.
 * @ref XXH_X86DISPATCH overrides this.
 */
enum XXH_VECTOR_TYPE /* fake enum */ {
    XXH_SCALAR = 0,  /*!< Portable scalar version */
    XXH_SSE2   = 1,  /*!<
                      * SSE2 for Pentium 4, Opteron, all x86_64.
                      *
                      * @note SSE2 is also guaranteed on Windows 10, macOS, and
                      * Android x86.
                      */
    XXH_AVX2   = 2,  /*!< AVX2 for Haswell and Bulldozer */
    XXH_AVX512 = 3,  /*!< AVX512 for Skylake and Icelake */
    XXH_NEON   = 4,  /*!< NEON for most ARMv7-A and all AArch64 */
    XXH_VSX    = 5,  /*!< VSX and ZVector for POWER8/z13 (64-bit) */
};
/*!
 * @ingroup tuning
 * @brief Selects the minimum alignment for XXH3's accumulators.
 *
 * When using SIMD, this should match the alignment reqired for said vector
 * type, so, for example, 32 for AVX2.
 *
 * Default: Auto detected.
 */
#  define XXH_ACC_ALIGN 8
#endif

/* Actual definition */
#ifndef XXH_DOXYGEN
#  define XXH_SCALAR 0
#  define XXH_SSE2   1
#  define XXH_AVX2   2
#  define XXH_AVX512 3
#  define XXH_NEON   4
#  define XXH_VSX    5
#endif

#ifndef XXH_VECTOR    /* can be defined on command line */
#  if defined(__AVX512F__)
#    define XXH_VECTOR XXH_AVX512
#  elif defined(__AVX2__)
#    define XXH_VECTOR XXH_AVX2
#  elif defined(__SSE2__) || defined(_M_AMD64) || defined(_M_X64) || (defined(_M_IX86_FP) && (_M_IX86_FP == 2))
#    define XXH_VECTOR XXH_SSE2
#  elif ( \
        defined(__ARM_NEON__) || defined(__ARM_NEON) /* gcc */ \
     || defined(_M_ARM64) || defined(_M_ARM_ARMV7VE) /* msvc */ \
   ) && ( \
        defined(_WIN32) || defined(__LITTLE_ENDIAN__) /* little endian only */ \
    || (defined(__BYTE_ORDER__) && __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__) \
   )
#    define XXH_VECTOR XXH_NEON
#  elif (defined(__PPC64__) && defined(__POWER8_VECTOR__)) \
     || (defined(__s390x__) && defined(__VEC__)) \
     && defined(__GNUC__) /* TODO: IBM XL */
#    define XXH_VECTOR XXH_VSX
#  else
#    define XXH_VECTOR XXH_SCALAR
#  endif
#endif

/*
 * Controls the alignment of the accumulator,
 * for compatibility with aligned vector loads, which are usually faster.
 */
#ifndef XXH_ACC_ALIGN
#  if defined(XXH_X86DISPATCH)
#     define XXH_ACC_ALIGN 64  /* for compatibility with avx512 */
#  elif XXH_VECTOR == XXH_SCALAR  /* scalar */
#     define XXH_ACC_ALIGN 8
#  elif XXH_VECTOR == XXH_SSE2  /* sse2 */
#     define XXH_ACC_ALIGN 16
#  elif XXH_VECTOR == XXH_AVX2  /* avx2 */
#     define XXH_ACC_ALIGN 32
#  elif XXH_VECTOR == XXH_NEON  /* neon */
#     define XXH_ACC_ALIGN 16
#  elif XXH_VECTOR == XXH_VSX   /* vsx */
#     define XXH_ACC_ALIGN 16
#  elif XXH_VECTOR == XXH_AVX512  /* avx512 */
#     define XXH_ACC_ALIGN 64
#  endif
#endif

#if defined(XXH_X86DISPATCH) || XXH_VECTOR == XXH_SSE2 \
    || XXH_VECTOR == XXH_AVX2 || XXH_VECTOR == XXH_AVX512
#  define XXH_SEC_ALIGN XXH_ACC_ALIGN
#else
#  define XXH_SEC_ALIGN 8
#endif

/*
 * UGLY HACK:
 * GCC usually generates the best code with -O3 for xxHash.
 *
 * However, when targeting AVX2, it is overzealous in its unrolling resulting
 * in code roughly 3/4 the speed of Clang.
 *
 * There are other issues, such as GCC splitting _mm256_loadu_si256 into
 * _mm_loadu_si128 + _mm256_inserti128_si256. This is an optimization which
 * only applies to Sandy and Ivy Bridge... which don't even support AVX2.
 *
 * That is why when compiling the AVX2 version, it is recommended to use either
 *   -O2 -mavx2 -march=haswell
 * or
 *   -O2 -mavx2 -mno-avx256-split-unaligned-load
 * for decent performance, or to use Clang instead.
 *
 * Fortunately, we can control the first one with a pragma that forces GCC into
 * -O2, but the other one we can't control without "failed to inline always
 * inline function due to target mismatch" warnings.
 */
#if XXH_VECTOR == XXH_AVX2 /* AVX2 */ \
  && defined(__GNUC__) && !defined(__clang__) /* GCC, not Clang */ \
  && defined(__OPTIMIZE__) && !defined(__OPTIMIZE_SIZE__) /* respect -O0 and -Os */
#  pragma GCC push_options
#  pragma GCC optimize("-O2")
#endif


#if XXH_VECTOR == XXH_NEON
/*
 * NEON's setup for vmlal_u32 is a little more complicated than it is on
 * SSE2, AVX2, and VSX.
 *
 * While PMULUDQ and VMULEUW both perform a mask, VMLAL.U32 performs an upcast.
 *
 * To do the same operation, the 128-bit 'Q' register needs to be split into
 * two 64-bit 'D' registers, performing this operation::
 *
 *   [                a                 |                 b                ]
 *            |              '---------. .--------'                |
 *            |                         x                          |
 *            |              .---------' '--------.                |
 *   [ a & 0xFFFFFFFF | b & 0xFFFFFFFF ],[    a >> 32     |     b >> 32    ]
 *
 * Due to significant changes in aarch64, the fastest method for aarch64 is
 * completely different than the fastest method for ARMv7-A.
 *
 * ARMv7-A treats D registers as unions overlaying Q registers, so modifying
 * D11 will modify the high half of Q5. This is similar to how modifying AH
 * will only affect bits 8-15 of AX on x86.
 *
 * VZIP takes two registers, and puts even lanes in one register and odd lanes
 * in the other.
 *
 * On ARMv7-A, this strangely modifies both parameters in place instead of
 * taking the usual 3-operand form.
 *
 * Therefore, if we want to do this, we can simply use a D-form VZIP.32 on the
 * lower and upper halves of the Q register to end up with the high and low
 * halves where we want - all in one instruction.
 *
 *   vzip.32   d10, d11       @ d10 = { d10[0], d11[0] }; d11 = { d10[1], d11[1] }
 *
 * Unfortunately we need inline assembly for this: Instructions modifying two
 * registers at once is not possible in GCC or Clang's IR, and they have to
 * create a copy.
 *
 * aarch64 requires a different approach.
 *
 * In order to make it easier to write a decent compiler for aarch64, many
 * quirks were removed, such as conditional execution.
 *
 * NEON was also affected by this.
 *
 * aarch64 cannot access the high bits of a Q-form register, and writes to a
 * D-form register zero the high bits, similar to how writes to W-form scalar
 * registers (or DWORD registers on x86_64) work.
 *
 * The formerly free vget_high intrinsics now require a vext (with a few
 * exceptions)
 *
 * Additionally, VZIP was replaced by ZIP1 and ZIP2, which are the equivalent
 * of PUNPCKL* and PUNPCKH* in SSE, respectively, in order to only modify one
 * operand.
 *
 * The equivalent of the VZIP.32 on the lower and upper halves would be this
 * mess:
 *
 *   ext     v2.4s, v0.4s, v0.4s, #2 // v2 = { v0[2], v0[3], v0[0], v0[1] }
 *   zip1    v1.2s, v0.2s, v2.2s     // v1 = { v0[0], v2[0] }
 *   zip2    v0.2s, v0.2s, v1.2s     // v0 = { v0[1], v2[1] }
 *
 * Instead, we use a literal downcast, vmovn_u64 (XTN), and vshrn_n_u64 (SHRN):
 *
 *   shrn    v1.2s, v0.2d, #32  // v1 = (uint32x2_t)(v0 >> 32);
 *   xtn     v0.2s, v0.2d       // v0 = (uint32x2_t)(v0 & 0xFFFFFFFF);
 *
 * This is available on ARMv7-A, but is less efficient than a single VZIP.32.
 */

/*!
 * Function-like macro:
 * void XXH_SPLIT_IN_PLACE(uint64x2_t &in, uint32x2_t &outLo, uint32x2_t &outHi)
 * {
 *     outLo = (uint32x2_t)(in & 0xFFFFFFFF);
 *     outHi = (uint32x2_t)(in >> 32);
 *     in = UNDEFINED;
 * }
 */
# if !defined(XXH_NO_VZIP_HACK) /* define to disable */ \
   && defined(__GNUC__) \
   && !defined(__aarch64__) && !defined(__arm64__) && !defined(_M_ARM64)
#  define XXH_SPLIT_IN_PLACE(in, outLo, outHi)                                              \
    do {                                                                                    \
      /* Undocumented GCC/Clang operand modifier: %e0 = lower D half, %f0 = upper D half */ \
      /* https://github.com/gcc-mirror/gcc/blob/38cf91e5/gcc/config/arm/arm.c#L22486 */     \
      /* https://github.com/llvm-mirror/llvm/blob/2c4ca683/lib/Target/ARM/ARMAsmPrinter.cpp#L399 */ \
      __asm__("vzip.32  %e0, %f0" : "+w" (in));                                             \
      (outLo) = vget_low_u32 (vreinterpretq_u32_u64(in));                                   \
      (outHi) = vget_high_u32(vreinterpretq_u32_u64(in));                                   \
   } while (0)
# else
#  define XXH_SPLIT_IN_PLACE(in, outLo, outHi)                                            \
    do {                                                                                  \
      (outLo) = vmovn_u64    (in);                                                        \
      (outHi) = vshrn_n_u64  ((in), 32);                                                  \
    } while (0)
# endif
#endif  /* XXH_VECTOR == XXH_NEON */

/*
 * VSX and Z Vector helpers.
 *
 * This is very messy, and any pull requests to clean this up are welcome.
 *
 * There are a lot of problems with supporting VSX and s390x, due to
 * inconsistent intrinsics, spotty coverage, and multiple endiannesses.
 */
#if XXH_VECTOR == XXH_VSX
#  if defined(__s390x__)
#    include <s390intrin.h>
#  else
/* gcc's altivec.h can have the unwanted consequence to unconditionally
 * #define bool, vector, and pixel keywords,
 * with bad consequences for programs already using these keywords for other purposes.
 * The paragraph defining these macros is skipped when __APPLE_ALTIVEC__ is defined.
 * __APPLE_ALTIVEC__ is _generally_ defined automatically by the compiler,
 * but it seems that, in some cases, it isn't.
 * Force the build macro to be defined, so that keywords are not altered.
 */
#    if defined(__GNUC__) && !defined(__APPLE_ALTIVEC__)
#      define __APPLE_ALTIVEC__
#    endif
#    include <altivec.h>
#  endif

typedef __vector unsigned long long xxh_u64x2;
typedef __vector unsigned char xxh_u8x16;
typedef __vector unsigned xxh_u32x4;

# ifndef XXH_VSX_BE
#  if defined(__BIG_ENDIAN__) \
  || (defined(__BYTE_ORDER__) && __BYTE_ORDER__ == __ORDER_BIG_ENDIAN__)
#    define XXH_VSX_BE 1
#  elif defined(__VEC_ELEMENT_REG_ORDER__) && __VEC_ELEMENT_REG_ORDER__ == __ORDER_BIG_ENDIAN__
#    warning "-maltivec=be is not recommended. Please use native endianness."
#    define XXH_VSX_BE 1
#  else
#    define XXH_VSX_BE 0
#  endif
# endif /* !defined(XXH_VSX_BE) */

# if XXH_VSX_BE
#  if defined(__POWER9_VECTOR__) || (defined(__clang__) && defined(__s390x__))
#    define XXH_vec_revb vec_revb
#  else
/*!
 * A polyfill for POWER9's vec_revb().
 */
XXH_FORCE_INLINE xxh_u64x2 XXH_vec_revb(xxh_u64x2 val)
{
    xxh_u8x16 const vByteSwap = { 0x07, 0x06, 0x05, 0x04, 0x03, 0x02, 0x01, 0x00,
                                  0x0F, 0x0E, 0x0D, 0x0C, 0x0B, 0x0A, 0x09, 0x08 };
    return vec_perm(val, val, vByteSwap);
}
#  endif
# endif /* XXH_VSX_BE */

/*!
 * Performs an unaligned vector load and byte swaps it on big endian.
 */
XXH_FORCE_INLINE xxh_u64x2 XXH_vec_loadu(const void *ptr)
{
    xxh_u64x2 ret;
    XXH_memcpy(&ret, ptr, sizeof(xxh_u64x2));
# if XXH_VSX_BE
    ret = XXH_vec_revb(ret);
# endif
    return ret;
}

/*
 * vec_mulo and vec_mule are very problematic intrinsics on PowerPC
 *
 * These intrinsics weren't added until GCC 8, despite existing for a while,
 * and they are endian dependent. Also, their meaning swap depending on version.
 * */
# if defined(__s390x__)
 /* s390x is always big endian, no issue on this platform */
#  define XXH_vec_mulo vec_mulo
#  define XXH_vec_mule vec_mule
# elif defined(__clang__) && XXH_HAS_BUILTIN(__builtin_altivec_vmuleuw)
/* Clang has a better way to control this, we can just use the builtin which doesn't swap. */
#  define XXH_vec_mulo __builtin_altivec_vmulouw
#  define XXH_vec_mule __builtin_altivec_vmuleuw
# else
/* gcc needs inline assembly */
/* Adapted from https://github.com/google/highwayhash/blob/master/highwayhash/hh_vsx.h. */
XXH_FORCE_INLINE xxh_u64x2 XXH_vec_mulo(xxh_u32x4 a, xxh_u32x4 b)
{
    xxh_u64x2 result;
    __asm__("vmulouw %0, %1, %2" : "=v" (result) : "v" (a), "v" (b));
    return result;
}
XXH_FORCE_INLINE xxh_u64x2 XXH_vec_mule(xxh_u32x4 a, xxh_u32x4 b)
{
    xxh_u64x2 result;
    __asm__("vmuleuw %0, %1, %2" : "=v" (result) : "v" (a), "v" (b));
    return result;
}
# endif /* XXH_vec_mulo, XXH_vec_mule */
#endif /* XXH_VECTOR == XXH_VSX */


/* prefetch
 * can be disabled, by declaring XXH_NO_PREFETCH build macro */
#if defined(XXH_NO_PREFETCH)
#  define XXH_PREFETCH(ptr)  (void)(ptr)  /* disabled */
#else
#  if defined(_MSC_VER) && (defined(_M_X64) || defined(_M_IX86))  /* _mm_prefetch() not defined outside of x86/x64 */
#    include <mmintrin.h>   /* https://msdn.microsoft.com/fr-fr/library/84szxsww(v=vs.90).aspx */
#    define XXH_PREFETCH(ptr)  _mm_prefetch((const char*)(ptr), _MM_HINT_T0)
#  elif defined(__GNUC__) && ( (__GNUC__ >= 4) || ( (__GNUC__ == 3) && (__GNUC_MINOR__ >= 1) ) )
#    define XXH_PREFETCH(ptr)  __builtin_prefetch((ptr), 0 /* rw==read */, 3 /* locality */)
#  else
#    define XXH_PREFETCH(ptr) (void)(ptr)  /* disabled */
#  endif
#endif  /* XXH_NO_PREFETCH */


/* ==========================================
 * XXH3 default settings
 * ========================================== */

#define XXH_SECRET_DEFAULT_SIZE 192   /* minimum XXH3_SECRET_SIZE_MIN */

#if (XXH_SECRET_DEFAULT_SIZE < XXH3_SECRET_SIZE_MIN)
#  error "default keyset is not large enough"
#endif

/*! Pseudorandom secret taken directly from FARSH. */
XXH_ALIGN(64) static const xxh_u8 XXH3_kSecret[XXH_SECRET_DEFAULT_SIZE] = {
    0xb8, 0xfe, 0x6c, 0x39, 0x23, 0xa4, 0x4b, 0xbe, 0x7c, 0x01, 0x81, 0x2c, 0xf7, 0x21, 0xad, 0x1c,
    0xde, 0xd4, 0x6d, 0xe9, 0x83, 0x90, 0x97, 0xdb, 0x72, 0x40, 0xa4, 0xa4, 0xb7, 0xb3, 0x67, 0x1f,
    0xcb, 0x79, 0xe6, 0x4e, 0xcc, 0xc0, 0xe5, 0x78, 0x82, 0x5a, 0xd0, 0x7d, 0xcc, 0xff, 0x72, 0x21,
    0xb8, 0x08, 0x46, 0x74, 0xf7, 0x43, 0x24, 0x8e, 0xe0, 0x35, 0x90, 0xe6, 0x81, 0x3a, 0x26, 0x4c,
    0x3c, 0x28, 0x52, 0xbb, 0x91, 0xc3, 0x00, 0xcb, 0x88, 0xd0, 0x65, 0x8b, 0x1b, 0x53, 0x2e, 0xa3,
    0x71, 0x64, 0x48, 0x97, 0xa2, 0x0d, 0xf9, 0x4e, 0x38, 0x19, 0xef, 0x46, 0xa9, 0xde, 0xac, 0xd8,
    0xa8, 0xfa, 0x76, 0x3f, 0xe3, 0x9c, 0x34, 0x3f, 0xf9, 0xdc, 0xbb, 0xc7, 0xc7, 0x0b, 0x4f, 0x1d,
    0x8a, 0x51, 0xe0, 0x4b, 0xcd, 0xb4, 0x59, 0x31, 0xc8, 0x9f, 0x7e, 0xc9, 0xd9, 0x78, 0x73, 0x64,
    0xea, 0xc5, 0xac, 0x83, 0x34, 0xd3, 0xeb, 0xc3, 0xc5, 0x81, 0xa0, 0xff, 0xfa, 0x13, 0x63, 0xeb,
    0x17, 0x0d, 0xdd, 0x51, 0xb7, 0xf0, 0xda, 0x49, 0xd3, 0x16, 0x55, 0x26, 0x29, 0xd4, 0x68, 0x9e,
    0x2b, 0x16, 0xbe, 0x58, 0x7d, 0x47, 0xa1, 0xfc, 0x8f, 0xf8, 0xb8, 0xd1, 0x7a, 0xd0, 0x31, 0xce,
    0x45, 0xcb, 0x3a, 0x8f, 0x95, 0x16, 0x04, 0x28, 0xaf, 0xd7, 0xfb, 0xca, 0xbb, 0x4b, 0x40, 0x7e,
};


#ifdef XXH_OLD_NAMES
#  define kSecret XXH3_kSecret
#endif

#ifdef XXH_DOXYGEN
/*!
 * @brief Calculates a 32-bit to 64-bit long multiply.
 *
 * Implemented as a macro.
 *
 * Wraps `__emulu` on MSVC x86 because it tends to call `__allmul` when it doesn't
 * need to (but it shouldn't need to anyways, it is about 7 instructions to do
 * a 64x64 multiply...). Since we know that this will _always_ emit `MULL`, we
 * use that instead of the normal method.
 *
 * If you are compiling for platforms like Thumb-1 and don't have a better option,
 * you may also want to write your own long multiply routine here.
 *
 * @param x, y Numbers to be multiplied
 * @return 64-bit product of the low 32 bits of @p x and @p y.
 */
XXH_FORCE_INLINE xxh_u64
XXH_mult32to64(xxh_u64 x, xxh_u64 y)
{
   return (x & 0xFFFFFFFF) * (y & 0xFFFFFFFF);
}
#elif defined(_MSC_VER) && defined(_M_IX86)
#    include <intrin.h>
#    define XXH_mult32to64(x, y) __emulu((unsigned)(x), (unsigned)(y))
#else
/*
 * Downcast + upcast is usually better than masking on older compilers like
 * GCC 4.2 (especially 32-bit ones), all without affecting newer compilers.
 *
 * The other method, (x & 0xFFFFFFFF) * (y & 0xFFFFFFFF), will AND both operands
 * and perform a full 64x64 multiply -- entirely redundant on 32-bit.
 */
#    define XXH_mult32to64(x, y) ((xxh_u64)(xxh_u32)(x) * (xxh_u64)(xxh_u32)(y))
#endif

/*!
 * @brief Calculates a 64->128-bit long multiply.
 *
 * Uses `__uint128_t` and `_umul128` if available, otherwise uses a scalar
 * version.
 *
 * @param lhs , rhs The 64-bit integers to be multiplied
 * @return The 128-bit result represented in an @ref XXH128_hash_t.
 */
static XXH128_hash_t
XXH_mult64to128(xxh_u64 lhs, xxh_u64 rhs)
{
    /*
     * GCC/Clang __uint128_t method.
     *
     * On most 64-bit targets, GCC and Clang define a __uint128_t type.
     * This is usually the best way as it usually uses a native long 64-bit
     * multiply, such as MULQ on x86_64 or MUL + UMULH on aarch64.
     *
     * Usually.
     *
     * Despite being a 32-bit platform, Clang (and emscripten) define this type
     * despite not having the arithmetic for it. This results in a laggy
     * compiler builtin call which calculates a full 128-bit multiply.
     * In that case it is best to use the portable one.
     * https://github.com/Cyan4973/xxHash/issues/211#issuecomment-515575677
     */
#if defined(__GNUC__) && !defined(__wasm__) \
    && defined(__SIZEOF_INT128__) \
    || (defined(_INTEGRAL_MAX_BITS) && _INTEGRAL_MAX_BITS >= 128)

    __uint128_t const product = (__uint128_t)lhs * (__uint128_t)rhs;
    XXH128_hash_t r128;
    r128.low64  = (xxh_u64)(product);
    r128.high64 = (xxh_u64)(product >> 64);
    return r128;

    /*
     * MSVC for x64's _umul128 method.
     *
     * xxh_u64 _umul128(xxh_u64 Multiplier, xxh_u64 Multiplicand, xxh_u64 *HighProduct);
     *
     * This compiles to single operand MUL on x64.
     */
#elif defined(_M_X64) || defined(_M_IA64)

#ifndef _MSC_VER
#   pragma intrinsic(_umul128)
#endif
    xxh_u64 product_high;
    xxh_u64 const product_low = _umul128(lhs, rhs, &product_high);
    XXH128_hash_t r128;
    r128.low64  = product_low;
    r128.high64 = product_high;
    return r128;

    /*
     * MSVC for ARM64's __umulh method.
     *
     * This compiles to the same MUL + UMULH as GCC/Clang's __uint128_t method.
     */
#elif defined(_M_ARM64)

#ifndef _MSC_VER
#   pragma intrinsic(__umulh)
#endif
    XXH128_hash_t r128;
    r128.low64  = lhs * rhs;
    r128.high64 = __umulh(lhs, rhs);
    return r128;

#else
    /*
     * Portable scalar method. Optimized for 32-bit and 64-bit ALUs.
     *
     * This is a fast and simple grade school multiply, which is shown below
     * with base 10 arithmetic instead of base 0x100000000.
     *
     *           9 3 // D2 lhs = 93
     *         x 7 5 // D2 rhs = 75
     *     ----------
     *           1 5 // D2 lo_lo = (93 % 10) * (75 % 10) = 15
     *         4 5 | // D2 hi_lo = (93 / 10) * (75 % 10) = 45
     *         2 1 | // D2 lo_hi = (93 % 10) * (75 / 10) = 21
     *     + 6 3 | | // D2 hi_hi = (93 / 10) * (75 / 10) = 63
     *     ---------
     *         2 7 | // D2 cross = (15 / 10) + (45 % 10) + 21 = 27
     *     + 6 7 | | // D2 upper = (27 / 10) + (45 / 10) + 63 = 67
     *     ---------
     *       6 9 7 5 // D4 res = (27 * 10) + (15 % 10) + (67 * 100) = 6975
     *
     * The reasons for adding the products like this are:
     *  1. It avoids manual carry tracking. Just like how
     *     (9 * 9) + 9 + 9 = 99, the same applies with this for UINT64_MAX.
     *     This avoids a lot of complexity.
     *
     *  2. It hints for, and on Clang, compiles to, the powerful UMAAL
     *     instruction available in ARM's Digital Signal Processing extension
     *     in 32-bit ARMv6 and later, which is shown below:
     *
     *         void UMAAL(xxh_u32 *RdLo, xxh_u32 *RdHi, xxh_u32 Rn, xxh_u32 Rm)
     *         {
     *             xxh_u64 product = (xxh_u64)*RdLo * (xxh_u64)*RdHi + Rn + Rm;
     *             *RdLo = (xxh_u32)(product & 0xFFFFFFFF);
     *             *RdHi = (xxh_u32)(product >> 32);
     *         }
     *
     *     This instruction was designed for efficient long multiplication, and
     *     allows this to be calculated in only 4 instructions at speeds
     *     comparable to some 64-bit ALUs.
     *
     *  3. It isn't terrible on other platforms. Usually this will be a couple
     *     of 32-bit ADD/ADCs.
     */

    /* First calculate all of the cross products. */
    xxh_u64 const lo_lo = XXH_mult32to64(lhs & 0xFFFFFFFF, rhs & 0xFFFFFFFF);
    xxh_u64 const hi_lo = XXH_mult32to64(lhs >> 32,        rhs & 0xFFFFFFFF);
    xxh_u64 const lo_hi = XXH_mult32to64(lhs & 0xFFFFFFFF, rhs >> 32);
    xxh_u64 const hi_hi = XXH_mult32to64(lhs >> 32,        rhs >> 32);

    /* Now add the products together. These will never overflow. */
    xxh_u64 const cross = (lo_lo >> 32) + (hi_lo & 0xFFFFFFFF) + lo_hi;
    xxh_u64 const upper = (hi_lo >> 32) + (cross >> 32)        + hi_hi;
    xxh_u64 const lower = (cross << 32) | (lo_lo & 0xFFFFFFFF);

    XXH128_hash_t r128;
    r128.low64  = lower;
    r128.high64 = upper;
    return r128;
#endif
}

/*!
 * @brief Calculates a 64-bit to 128-bit multiply, then XOR folds it.
 *
 * The reason for the separate function is to prevent passing too many structs
 * around by value. This will hopefully inline the multiply, but we don't force it.
 *
 * @param lhs , rhs The 64-bit integers to multiply
 * @return The low 64 bits of the product XOR'd by the high 64 bits.
 * @see XXH_mult64to128()
 */
static xxh_u64
XXH3_mul128_fold64(xxh_u64 lhs, xxh_u64 rhs)
{
    XXH128_hash_t product = XXH_mult64to128(lhs, rhs);
    return product.low64 ^ product.high64;
}

/*! Seems to produce slightly better code on GCC for some reason. */
XXH_FORCE_INLINE xxh_u64 XXH_xorshift64(xxh_u64 v64, int shift)
{
    XXH_ASSERT(0 <= shift && shift < 64);
    return v64 ^ (v64 >> shift);
}

/*
 * This is a fast avalanche stage,
 * suitable when input bits are already partially mixed
 */
static XXH64_hash_t XXH3_avalanche(xxh_u64 h64)
{
    h64 = XXH_xorshift64(h64, 37);
    h64 *= 0x165667919E3779F9ULL;
    h64 = XXH_xorshift64(h64, 32);
    return h64;
}

/*
 * This is a stronger avalanche,
 * inspired by Pelle Evensen's rrmxmx
 * preferable when input has not been previously mixed
 */
static XXH64_hash_t XXH3_rrmxmx(xxh_u64 h64, xxh_u64 len)
{
    /* this mix is inspired by Pelle Evensen's rrmxmx */
    h64 ^= XXH_rotl64(h64, 49) ^ XXH_rotl64(h64, 24);
    h64 *= 0x9FB21C651E98DF25ULL;
    h64 ^= (h64 >> 35) + len ;
    h64 *= 0x9FB21C651E98DF25ULL;
    return XXH_xorshift64(h64, 28);
}


/* ==========================================
 * Short keys
 * ==========================================
 * One of the shortcomings of XXH32 and XXH64 was that their performance was
 * sub-optimal on short lengths. It used an iterative algorithm which strongly
 * favored lengths that were a multiple of 4 or 8.
 *
 * Instead of iterating over individual inputs, we use a set of single shot
 * functions which piece together a range of lengths and operate in constant time.
 *
 * Additionally, the number of multiplies has been significantly reduced. This
 * reduces latency, especially when emulating 64-bit multiplies on 32-bit.
 *
 * Depending on the platform, this may or may not be faster than XXH32, but it
 * is almost guaranteed to be faster than XXH64.
 */

/*
 * At very short lengths, there isn't enough input to fully hide secrets, or use
 * the entire secret.
 *
 * There is also only a limited amount of mixing we can do before significantly
 * impacting performance.
 *
 * Therefore, we use different sections of the secret and always mix two secret
 * samples with an XOR. This should have no effect on performance on the
 * seedless or withSeed variants because everything _should_ be constant folded
 * by modern compilers.
 *
 * The XOR mixing hides individual parts of the secret and increases entropy.
 *
 * This adds an extra layer of strength for custom secrets.
 */
XXH_FORCE_INLINE XXH64_hash_t
XXH3_len_1to3_64b(const xxh_u8* input, size_t len, const xxh_u8* secret, XXH64_hash_t seed)
{
    XXH_ASSERT(input != NULL);
    XXH_ASSERT(1 <= len && len <= 3);
    XXH_ASSERT(secret != NULL);
    /*
     * len = 1: combined = { input[0], 0x01, input[0], input[0] }
     * len = 2: combined = { input[1], 0x02, input[0], input[1] }
     * len = 3: combined = { input[2], 0x03, input[0], input[1] }
     */
    {   xxh_u8  const c1 = input[0];
        xxh_u8  const c2 = input[len >> 1];
        xxh_u8  const c3 = input[len - 1];
        xxh_u32 const combined = ((xxh_u32)c1 << 16) | ((xxh_u32)c2  << 24)
                               | ((xxh_u32)c3 <<  0) | ((xxh_u32)len << 8);
        xxh_u64 const bitflip = (XXH_readLE32(secret) ^ XXH_readLE32(secret+4)) + seed;
        xxh_u64 const keyed = (xxh_u64)combined ^ bitflip;
        return XXH64_avalanche(keyed);
    }
}

XXH_FORCE_INLINE XXH64_hash_t
XXH3_len_4to8_64b(const xxh_u8* input, size_t len, const xxh_u8* secret, XXH64_hash_t seed)
{
    XXH_ASSERT(input != NULL);
    XXH_ASSERT(secret != NULL);
    XXH_ASSERT(4 <= len && len <= 8);
    seed ^= (xxh_u64)XXH_swap32((xxh_u32)seed) << 32;
    {   xxh_u32 const input1 = XXH_readLE32(input);
        xxh_u32 const input2 = XXH_readLE32(input + len - 4);
        xxh_u64 const bitflip = (XXH_readLE64(secret+8) ^ XXH_readLE64(secret+16)) - seed;
        xxh_u64 const input64 = input2 + (((xxh_u64)input1) << 32);
        xxh_u64 const keyed = input64 ^ bitflip;
        return XXH3_rrmxmx(keyed, len);
    }
}

XXH_FORCE_INLINE XXH64_hash_t
XXH3_len_9to16_64b(const xxh_u8* input, size_t len, const xxh_u8* secret, XXH64_hash_t seed)
{
    XXH_ASSERT(input != NULL);
    XXH_ASSERT(secret != NULL);
    XXH_ASSERT(9 <= len && len <= 16);
    {   xxh_u64 const bitflip1 = (XXH_readLE64(secret+24) ^ XXH_readLE64(secret+32)) + seed;
        xxh_u64 const bitflip2 = (XXH_readLE64(secret+40) ^ XXH_readLE64(secret+48)) - seed;
        xxh_u64 const input_lo = XXH_readLE64(input)           ^ bitflip1;
        xxh_u64 const input_hi = XXH_readLE64(input + len - 8) ^ bitflip2;
        xxh_u64 const acc = len
                          + XXH_swap64(input_lo) + input_hi
                          + XXH3_mul128_fold64(input_lo, input_hi);
        return XXH3_avalanche(acc);
    }
}

XXH_FORCE_INLINE XXH64_hash_t
XXH3_len_0to16_64b(const xxh_u8* input, size_t len, const xxh_u8* secret, XXH64_hash_t seed)
{
    XXH_ASSERT(len <= 16);
    {   if (XXH_likely(len >  8)) return XXH3_len_9to16_64b(input, len, secret, seed);
        if (XXH_likely(len >= 4)) return XXH3_len_4to8_64b(input, len, secret, seed);
        if (len) return XXH3_len_1to3_64b(input, len, secret, seed);
        return XXH64_avalanche(seed ^ (XXH_readLE64(secret+56) ^ XXH_readLE64(secret+64)));
    }
}

/*
 * DISCLAIMER: There are known *seed-dependent* multicollisions here due to
 * multiplication by zero, affecting hashes of lengths 17 to 240.
 *
 * However, they are very unlikely.
 *
 * Keep this in mind when using the unseeded XXH3_64bits() variant: As with all
 * unseeded non-cryptographic hashes, it does not attempt to defend itself
 * against specially crafted inputs, only random inputs.
 *
 * Compared to classic UMAC where a 1 in 2^31 chance of 4 consecutive bytes
 * cancelling out the secret is taken an arbitrary number of times (addressed
 * in XXH3_accumulate_512), this collision is very unlikely with random inputs
 * and/or proper seeding:
 *
 * This only has a 1 in 2^63 chance of 8 consecutive bytes cancelling out, in a
 * function that is only called up to 16 times per hash with up to 240 bytes of
 * input.
 *
 * This is not too bad for a non-cryptographic hash function, especially with
 * only 64 bit outputs.
 *
 * The 128-bit variant (which trades some speed for strength) is NOT affected
 * by this, although it is always a good idea to use a proper seed if you care
 * about strength.
 */
XXH_FORCE_INLINE xxh_u64 XXH3_mix16B(const xxh_u8* XXH_RESTRICT input,
                                     const xxh_u8* XXH_RESTRICT secret, xxh_u64 seed64)
{
#if defined(__GNUC__) && !defined(__clang__) /* GCC, not Clang */ \
  && defined(__i386__) && defined(__SSE2__)  /* x86 + SSE2 */ \
  && !defined(XXH_ENABLE_AUTOVECTORIZE)      /* Define to disable like XXH32 hack */
    /*
     * UGLY HACK:
     * GCC for x86 tends to autovectorize the 128-bit multiply, resulting in
     * slower code.
     *
     * By forcing seed64 into a register, we disrupt the cost model and
     * cause it to scalarize. See `XXH32_round()`
     *
     * FIXME: Clang's output is still _much_ faster -- On an AMD Ryzen 3600,
     * XXH3_64bits @ len=240 runs at 4.6 GB/s with Clang 9, but 3.3 GB/s on
     * GCC 9.2, despite both emitting scalar code.
     *
     * GCC generates much better scalar code than Clang for the rest of XXH3,
     * which is why finding a more optimal codepath is an interest.
     */
    XXH_COMPILER_GUARD(seed64);
#endif
    {   xxh_u64 const input_lo = XXH_readLE64(input);
        xxh_u64 const input_hi = XXH_readLE64(input+8);
        return XXH3_mul128_fold64(
            input_lo ^ (XXH_readLE64(secret)   + seed64),
            input_hi ^ (XXH_readLE64(secret+8) - seed64)
        );
    }
}

/* For mid range keys, XXH3 uses a Mum-hash variant. */
XXH_FORCE_INLINE XXH64_hash_t
XXH3_len_17to128_64b(const xxh_u8* XXH_RESTRICT input, size_t len,
                     const xxh_u8* XXH_RESTRICT secret, size_t secretSize,
                     XXH64_hash_t seed)
{
    XXH_ASSERT(secretSize >= XXH3_SECRET_SIZE_MIN); (void)secretSize;
    XXH_ASSERT(16 < len && len <= 128);

    {   xxh_u64 acc = len * XXH_PRIME64_1;
        if (len > 32) {
            if (len > 64) {
                if (len > 96) {
                    acc += XXH3_mix16B(input+48, secret+96, seed);
                    acc += XXH3_mix16B(input+len-64, secret+112, seed);
                }
                acc += XXH3_mix16B(input+32, secret+64, seed);
                acc += XXH3_mix16B(input+len-48, secret+80, seed);
            }
            acc += XXH3_mix16B(input+16, secret+32, seed);
            acc += XXH3_mix16B(input+len-32, secret+48, seed);
        }
        acc += XXH3_mix16B(input+0, secret+0, seed);
        acc += XXH3_mix16B(input+len-16, secret+16, seed);

        return XXH3_avalanche(acc);
    }
}

#define XXH3_MIDSIZE_MAX 240

XXH_NO_INLINE XXH64_hash_t
XXH3_len_129to240_64b(const xxh_u8* XXH_RESTRICT input, size_t len,
                      const xxh_u8* XXH_RESTRICT secret, size_t secretSize,
                      XXH64_hash_t seed)
{
    XXH_ASSERT(secretSize >= XXH3_SECRET_SIZE_MIN); (void)secretSize;
    XXH_ASSERT(128 < len && len <= XXH3_MIDSIZE_MAX);

    #define XXH3_MIDSIZE_STARTOFFSET 3
    #define XXH3_MIDSIZE_LASTOFFSET  17

    {   xxh_u64 acc = len * XXH_PRIME64_1;
        int const nbRounds = (int)len / 16;
        int i;
        for (i=0; i<8; i++) {
            acc += XXH3_mix16B(input+(16*i), secret+(16*i), seed);
        }
        acc = XXH3_avalanche(acc);
        XXH_ASSERT(nbRounds >= 8);
#if defined(__clang__)                                /* Clang */ \
    && (defined(__ARM_NEON) || defined(__ARM_NEON__)) /* NEON */ \
    && !defined(XXH_ENABLE_AUTOVECTORIZE)             /* Define to disable */
        /*
         * UGLY HACK:
         * Clang for ARMv7-A tries to vectorize this loop, similar to GCC x86.
         * In everywhere else, it uses scalar code.
         *
         * For 64->128-bit multiplies, even if the NEON was 100% optimal, it
         * would still be slower than UMAAL (see XXH_mult64to128).
         *
         * Unfortunately, Clang doesn't handle the long multiplies properly and
         * converts them to the nonexistent "vmulq_u64" intrinsic, which is then
         * scalarized into an ugly mess of VMOV.32 instructions.
         *
         * This mess is difficult to avoid without turning autovectorization
         * off completely, but they are usually relatively minor and/or not
         * worth it to fix.
         *
         * This loop is the easiest to fix, as unlike XXH32, this pragma
         * _actually works_ because it is a loop vectorization instead of an
         * SLP vectorization.
         */
        #pragma clang loop vectorize(disable)
#endif
        for (i=8 ; i < nbRounds; i++) {
            acc += XXH3_mix16B(input+(16*i), secret+(16*(i-8)) + XXH3_MIDSIZE_STARTOFFSET, seed);
        }
        /* last bytes */
        acc += XXH3_mix16B(input + len - 16, secret + XXH3_SECRET_SIZE_MIN - XXH3_MIDSIZE_LASTOFFSET, seed);
        return XXH3_avalanche(acc);
    }
}


/* =======     Long Keys     ======= */

#define XXH_STRIPE_LEN 64
#define XXH_SECRET_CONSUME_RATE 8   /* nb of secret bytes consumed at each accumulation */
#define XXH_ACC_NB (XXH_STRIPE_LEN / sizeof(xxh_u64))

#ifdef XXH_OLD_NAMES
#  define STRIPE_LEN XXH_STRIPE_LEN
#  define ACC_NB XXH_ACC_NB
#endif

XXH_FORCE_INLINE void XXH_writeLE64(void* dst, xxh_u64 v64)
{
    if (!XXH_CPU_LITTLE_ENDIAN) v64 = XXH_swap64(v64);
    XXH_memcpy(dst, &v64, sizeof(v64));
}

/* Several intrinsic functions below are supposed to accept __int64 as argument,
 * as documented in https://software.intel.com/sites/landingpage/IntrinsicsGuide/ .
 * However, several environments do not define __int64 type,
 * requiring a workaround.
 */
#if !defined (__VMS) \
  && (defined (__cplusplus) \
  || (defined (__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L) /* C99 */) )
    typedef int64_t xxh_i64;
#else
    /* the following type must have a width of 64-bit */
    typedef long long xxh_i64;
#endif

/*
 * XXH3_accumulate_512 is the tightest loop for long inputs, and it is the most optimized.
 *
 * It is a hardened version of UMAC, based off of FARSH's implementation.
 *
 * This was chosen because it adapts quite well to 32-bit, 64-bit, and SIMD
 * implementations, and it is ridiculously fast.
 *
 * We harden it by mixing the original input to the accumulators as well as the product.
 *
 * This means that in the (relatively likely) case of a multiply by zero, the
 * original input is preserved.
 *
 * On 128-bit inputs, we swap 64-bit pairs when we add the input to improve
 * cross-pollination, as otherwise the upper and lower halves would be
 * essentially independent.
 *
 * This doesn't matter on 64-bit hashes since they all get merged together in
 * the end, so we skip the extra step.
 *
 * Both XXH3_64bits and XXH3_128bits use this subroutine.
 */

#if (XXH_VECTOR == XXH_AVX512) \
     || (defined(XXH_DISPATCH_AVX512) && XXH_DISPATCH_AVX512 != 0)

#ifndef XXH_TARGET_AVX512
# define XXH_TARGET_AVX512  /* disable attribute target */
#endif

XXH_FORCE_INLINE XXH_TARGET_AVX512 void
XXH3_accumulate_512_avx512(void* XXH_RESTRICT acc,
                     const void* XXH_RESTRICT input,
                     const void* XXH_RESTRICT secret)
{
    __m512i* const xacc = (__m512i *) acc;
    XXH_ASSERT((((size_t)acc) & 63) == 0);
    XXH_STATIC_ASSERT(XXH_STRIPE_LEN == sizeof(__m512i));

    {
        /* data_vec    = input[0]; */
        __m512i const data_vec    = _mm512_loadu_si512   (input);
        /* key_vec     = secret[0]; */
        __m512i const key_vec     = _mm512_loadu_si512   (secret);
        /* data_key    = data_vec ^ key_vec; */
        __m512i const data_key    = _mm512_xor_si512     (data_vec, key_vec);
        /* data_key_lo = data_key >> 32; */
        __m512i const data_key_lo = _mm512_shuffle_epi32 (data_key, (_MM_PERM_ENUM)_MM_SHUFFLE(0, 3, 0, 1));
        /* product     = (data_key & 0xffffffff) * (data_key_lo & 0xffffffff); */
        __m512i const product     = _mm512_mul_epu32     (data_key, data_key_lo);
        /* xacc[0] += swap(data_vec); */
        __m512i const data_swap = _mm512_shuffle_epi32(data_vec, (_MM_PERM_ENUM)_MM_SHUFFLE(1, 0, 3, 2));
        __m512i const sum       = _mm512_add_epi64(*xacc, data_swap);
        /* xacc[0] += product; */
        *xacc = _mm512_add_epi64(product, sum);
    }
}

/*
 * XXH3_scrambleAcc: Scrambles the accumulators to improve mixing.
 *
 * Multiplication isn't perfect, as explained by Google in HighwayHash:
 *
 *  // Multiplication mixes/scrambles bytes 0-7 of the 64-bit result to
 *  // varying degrees. In descending order of goodness, bytes
 *  // 3 4 2 5 1 6 0 7 have quality 228 224 164 160 100 96 36 32.
 *  // As expected, the upper and lower bytes are much worse.
 *
 * Source: https://github.com/google/highwayhash/blob/0aaf66b/highwayhash/hh_avx2.h#L291
 *
 * Since our algorithm uses a pseudorandom secret to add some variance into the
 * mix, we don't need to (or want to) mix as often or as much as HighwayHash does.
 *
 * This isn't as tight as XXH3_accumulate, but still written in SIMD to avoid
 * extraction.
 *
 * Both XXH3_64bits and XXH3_128bits use this subroutine.
 */

XXH_FORCE_INLINE XXH_TARGET_AVX512 void
XXH3_scrambleAcc_avx512(void* XXH_RESTRICT acc, const void* XXH_RESTRICT secret)
{
    XXH_ASSERT((((size_t)acc) & 63) == 0);
    XXH_STATIC_ASSERT(XXH_STRIPE_LEN == sizeof(__m512i));
    {   __m512i* const xacc = (__m512i*) acc;
        const __m512i prime32 = _mm512_set1_epi32((int)XXH_PRIME32_1);

        /* xacc[0] ^= (xacc[0] >> 47) */
        __m512i const acc_vec     = *xacc;
        __m512i const shifted     = _mm512_srli_epi64    (acc_vec, 47);
        __m512i const data_vec    = _mm512_xor_si512     (acc_vec, shifted);
        /* xacc[0] ^= secret; */
        __m512i const key_vec     = _mm512_loadu_si512   (secret);
        __m512i const data_key    = _mm512_xor_si512     (data_vec, key_vec);

        /* xacc[0] *= XXH_PRIME32_1; */
        __m512i const data_key_hi = _mm512_shuffle_epi32 (data_key, (_MM_PERM_ENUM)_MM_SHUFFLE(0, 3, 0, 1));
        __m512i const prod_lo     = _mm512_mul_epu32     (data_key, prime32);
        __m512i const prod_hi     = _mm512_mul_epu32     (data_key_hi, prime32);
        *xacc = _mm512_add_epi64(prod_lo, _mm512_slli_epi64(prod_hi, 32));
    }
}

XXH_FORCE_INLINE XXH_TARGET_AVX512 void
XXH3_initCustomSecret_avx512(void* XXH_RESTRICT customSecret, xxh_u64 seed64)
{
    XXH_STATIC_ASSERT((XXH_SECRET_DEFAULT_SIZE & 63) == 0);
    XXH_STATIC_ASSERT(XXH_SEC_ALIGN == 64);
    XXH_ASSERT(((size_t)customSecret & 63) == 0);
    (void)(&XXH_writeLE64);
    {   int const nbRounds = XXH_SECRET_DEFAULT_SIZE / sizeof(__m512i);
        __m512i const seed = _mm512_mask_set1_epi64(_mm512_set1_epi64((xxh_i64)seed64), 0xAA, (xxh_i64)(0U - seed64));

        const __m512i* const src  = (const __m512i*) ((const void*) XXH3_kSecret);
              __m512i* const dest = (      __m512i*) customSecret;
        int i;
        XXH_ASSERT(((size_t)src & 63) == 0); /* control alignment */
        XXH_ASSERT(((size_t)dest & 63) == 0);
        for (i=0; i < nbRounds; ++i) {
            /* GCC has a bug, _mm512_stream_load_si512 accepts 'void*', not 'void const*',
             * this will warn "discards 'const' qualifier". */
            union {
                const __m512i* cp;
                void* p;
            } remote_const_void;
            remote_const_void.cp = src + i;
            dest[i] = _mm512_add_epi64(_mm512_stream_load_si512(remote_const_void.p), seed);
    }   }
}

#endif

#if (XXH_VECTOR == XXH_AVX2) \
    || (defined(XXH_DISPATCH_AVX2) && XXH_DISPATCH_AVX2 != 0)

#ifndef XXH_TARGET_AVX2
# define XXH_TARGET_AVX2  /* disable attribute target */
#endif

XXH_FORCE_INLINE XXH_TARGET_AVX2 void
XXH3_accumulate_512_avx2( void* XXH_RESTRICT acc,
                    const void* XXH_RESTRICT input,
                    const void* XXH_RESTRICT secret)
{
    XXH_ASSERT((((size_t)acc) & 31) == 0);
    {   __m256i* const xacc    =       (__m256i *) acc;
        /* Unaligned. This is mainly for pointer arithmetic, and because
         * _mm256_loadu_si256 requires  a const __m256i * pointer for some reason. */
        const         __m256i* const xinput  = (const __m256i *) input;
        /* Unaligned. This is mainly for pointer arithmetic, and because
         * _mm256_loadu_si256 requires a const __m256i * pointer for some reason. */
        const         __m256i* const xsecret = (const __m256i *) secret;

        size_t i;
        for (i=0; i < XXH_STRIPE_LEN/sizeof(__m256i); i++) {
            /* data_vec    = xinput[i]; */
            __m256i const data_vec    = _mm256_loadu_si256    (xinput+i);
            /* key_vec     = xsecret[i]; */
            __m256i const key_vec     = _mm256_loadu_si256   (xsecret+i);
            /* data_key    = data_vec ^ key_vec; */
            __m256i const data_key    = _mm256_xor_si256     (data_vec, key_vec);
            /* data_key_lo = data_key >> 32; */
            __m256i const data_key_lo = _mm256_shuffle_epi32 (data_key, _MM_SHUFFLE(0, 3, 0, 1));
            /* product     = (data_key & 0xffffffff) * (data_key_lo & 0xffffffff); */
            __m256i const product     = _mm256_mul_epu32     (data_key, data_key_lo);
            /* xacc[i] += swap(data_vec); */
            __m256i const data_swap = _mm256_shuffle_epi32(data_vec, _MM_SHUFFLE(1, 0, 3, 2));
            __m256i const sum       = _mm256_add_epi64(xacc[i], data_swap);
            /* xacc[i] += product; */
            xacc[i] = _mm256_add_epi64(product, sum);
    }   }
}

XXH_FORCE_INLINE XXH_TARGET_AVX2 void
XXH3_scrambleAcc_avx2(void* XXH_RESTRICT acc, const void* XXH_RESTRICT secret)
{
    XXH_ASSERT((((size_t)acc) & 31) == 0);
    {   __m256i* const xacc = (__m256i*) acc;
        /* Unaligned. This is mainly for pointer arithmetic, and because
         * _mm256_loadu_si256 requires a const __m256i * pointer for some reason. */
        const         __m256i* const xsecret = (const __m256i *) secret;
        const __m256i prime32 = _mm256_set1_epi32((int)XXH_PRIME32_1);

        size_t i;
        for (i=0; i < XXH_STRIPE_LEN/sizeof(__m256i); i++) {
            /* xacc[i] ^= (xacc[i] >> 47) */
            __m256i const acc_vec     = xacc[i];
            __m256i const shifted     = _mm256_srli_epi64    (acc_vec, 47);
            __m256i const data_vec    = _mm256_xor_si256     (acc_vec, shifted);
            /* xacc[i] ^= xsecret; */
            __m256i const key_vec     = _mm256_loadu_si256   (xsecret+i);
            __m256i const data_key    = _mm256_xor_si256     (data_vec, key_vec);

            /* xacc[i] *= XXH_PRIME32_1; */
            __m256i const data_key_hi = _mm256_shuffle_epi32 (data_key, _MM_SHUFFLE(0, 3, 0, 1));
            __m256i const prod_lo     = _mm256_mul_epu32     (data_key, prime32);
            __m256i const prod_hi     = _mm256_mul_epu32     (data_key_hi, prime32);
            xacc[i] = _mm256_add_epi64(prod_lo, _mm256_slli_epi64(prod_hi, 32));
        }
    }
}

XXH_FORCE_INLINE XXH_TARGET_AVX2 void XXH3_initCustomSecret_avx2(void* XXH_RESTRICT customSecret, xxh_u64 seed64)
{
    XXH_STATIC_ASSERT((XXH_SECRET_DEFAULT_SIZE & 31) == 0);
    XXH_STATIC_ASSERT((XXH_SECRET_DEFAULT_SIZE / sizeof(__m256i)) == 6);
    XXH_STATIC_ASSERT(XXH_SEC_ALIGN <= 64);
    (void)(&XXH_writeLE64);
    XXH_PREFETCH(customSecret);
    {   __m256i const seed = _mm256_set_epi64x((xxh_i64)(0U - seed64), (xxh_i64)seed64, (xxh_i64)(0U - seed64), (xxh_i64)seed64);

        const __m256i* const src  = (const __m256i*) ((const void*) XXH3_kSecret);
              __m256i*       dest = (      __m256i*) customSecret;

#       if defined(__GNUC__) || defined(__clang__)
        /*
         * On GCC & Clang, marking 'dest' as modified will cause the compiler:
         *   - do not extract the secret from sse registers in the internal loop
         *   - use less common registers, and avoid pushing these reg into stack
         */
        XXH_COMPILER_GUARD(dest);
#       endif
        XXH_ASSERT(((size_t)src & 31) == 0); /* control alignment */
        XXH_ASSERT(((size_t)dest & 31) == 0);

        /* GCC -O2 need unroll loop manually */
        dest[0] = _mm256_add_epi64(_mm256_stream_load_si256(src+0), seed);
        dest[1] = _mm256_add_epi64(_mm256_stream_load_si256(src+1), seed);
        dest[2] = _mm256_add_epi64(_mm256_stream_load_si256(src+2), seed);
        dest[3] = _mm256_add_epi64(_mm256_stream_load_si256(src+3), seed);
        dest[4] = _mm256_add_epi64(_mm256_stream_load_si256(src+4), seed);
        dest[5] = _mm256_add_epi64(_mm256_stream_load_si256(src+5), seed);
    }
}

#endif

/* x86dispatch always generates SSE2 */
#if (XXH_VECTOR == XXH_SSE2) || defined(XXH_X86DISPATCH)

#ifndef XXH_TARGET_SSE2
# define XXH_TARGET_SSE2  /* disable attribute target */
#endif

XXH_FORCE_INLINE XXH_TARGET_SSE2 void
XXH3_accumulate_512_sse2( void* XXH_RESTRICT acc,
                    const void* XXH_RESTRICT input,
                    const void* XXH_RESTRICT secret)
{
    /* SSE2 is just a half-scale version of the AVX2 version. */
    XXH_ASSERT((((size_t)acc) & 15) == 0);
    {   __m128i* const xacc    =       (__m128i *) acc;
        /* Unaligned. This is mainly for pointer arithmetic, and because
         * _mm_loadu_si128 requires a const __m128i * pointer for some reason. */
        const         __m128i* const xinput  = (const __m128i *) input;
        /* Unaligned. This is mainly for pointer arithmetic, and because
         * _mm_loadu_si128 requires a const __m128i * pointer for some reason. */
        const         __m128i* const xsecret = (const __m128i *) secret;

        size_t i;
        for (i=0; i < XXH_STRIPE_LEN/sizeof(__m128i); i++) {
            /* data_vec    = xinput[i]; */
            __m128i const data_vec    = _mm_loadu_si128   (xinput+i);
            /* key_vec     = xsecret[i]; */
            __m128i const key_vec     = _mm_loadu_si128   (xsecret+i);
            /* data_key    = data_vec ^ key_vec; */
            __m128i const data_key    = _mm_xor_si128     (data_vec, key_vec);
            /* data_key_lo = data_key >> 32; */
            __m128i const data_key_lo = _mm_shuffle_epi32 (data_key, _MM_SHUFFLE(0, 3, 0, 1));
            /* product     = (data_key & 0xffffffff) * (data_key_lo & 0xffffffff); */
            __m128i const product     = _mm_mul_epu32     (data_key, data_key_lo);
            /* xacc[i] += swap(data_vec); */
            __m128i const data_swap = _mm_shuffle_epi32(data_vec, _MM_SHUFFLE(1,0,3,2));
            __m128i const sum       = _mm_add_epi64(xacc[i], data_swap);
            /* xacc[i] += product; */
            xacc[i] = _mm_add_epi64(product, sum);
    }   }
}

XXH_FORCE_INLINE XXH_TARGET_SSE2 void
XXH3_scrambleAcc_sse2(void* XXH_RESTRICT acc, const void* XXH_RESTRICT secret)
{
    XXH_ASSERT((((size_t)acc) & 15) == 0);
    {   __m128i* const xacc = (__m128i*) acc;
        /* Unaligned. This is mainly for pointer arithmetic, and because
         * _mm_loadu_si128 requires a const __m128i * pointer for some reason. */
        const         __m128i* const xsecret = (const __m128i *) secret;
        const __m128i prime32 = _mm_set1_epi32((int)XXH_PRIME32_1);

        size_t i;
        for (i=0; i < XXH_STRIPE_LEN/sizeof(__m128i); i++) {
            /* xacc[i] ^= (xacc[i] >> 47) */
            __m128i const acc_vec     = xacc[i];
            __m128i const shifted     = _mm_srli_epi64    (acc_vec, 47);
            __m128i const data_vec    = _mm_xor_si128     (acc_vec, shifted);
            /* xacc[i] ^= xsecret[i]; */
            __m128i const key_vec     = _mm_loadu_si128   (xsecret+i);
            __m128i const data_key    = _mm_xor_si128     (data_vec, key_vec);

            /* xacc[i] *= XXH_PRIME32_1; */
            __m128i const data_key_hi = _mm_shuffle_epi32 (data_key, _MM_SHUFFLE(0, 3, 0, 1));
            __m128i const prod_lo     = _mm_mul_epu32     (data_key, prime32);
            __m128i const prod_hi     = _mm_mul_epu32     (data_key_hi, prime32);
            xacc[i] = _mm_add_epi64(prod_lo, _mm_slli_epi64(prod_hi, 32));
        }
    }
}

XXH_FORCE_INLINE XXH_TARGET_SSE2 void XXH3_initCustomSecret_sse2(void* XXH_RESTRICT customSecret, xxh_u64 seed64)
{
    XXH_STATIC_ASSERT((XXH_SECRET_DEFAULT_SIZE & 15) == 0);
    (void)(&XXH_writeLE64);
    {   int const nbRounds = XXH_SECRET_DEFAULT_SIZE / sizeof(__m128i);

#       if defined(_MSC_VER) && defined(_M_IX86) && _MSC_VER < 1900
        /* MSVC 32bit mode does not support _mm_set_epi64x before 2015 */
        XXH_ALIGN(16) const xxh_i64 seed64x2[2] = { (xxh_i64)seed64, (xxh_i64)(0U - seed64) };
        __m128i const seed = _mm_load_si128((__m128i const*)seed64x2);
#       else
        __m128i const seed = _mm_set_epi64x((xxh_i64)(0U - seed64), (xxh_i64)seed64);
#       endif
        int i;

        const void* const src16 = XXH3_kSecret;
        __m128i* dst16 = (__m128i*) customSecret;
#       if defined(__GNUC__) || defined(__clang__)
        /*
         * On GCC & Clang, marking 'dest' as modified will cause the compiler:
         *   - do not extract the secret from sse registers in the internal loop
         *   - use less common registers, and avoid pushing these reg into stack
         */
        XXH_COMPILER_GUARD(dst16);
#       endif
        XXH_ASSERT(((size_t)src16 & 15) == 0); /* control alignment */
        XXH_ASSERT(((size_t)dst16 & 15) == 0);

        for (i=0; i < nbRounds; ++i) {
            dst16[i] = _mm_add_epi64(_mm_load_si128((const __m128i *)src16+i), seed);
    }   }
}

#endif

#if (XXH_VECTOR == XXH_NEON)

XXH_FORCE_INLINE void
XXH3_accumulate_512_neon( void* XXH_RESTRICT acc,
                    const void* XXH_RESTRICT input,
                    const void* XXH_RESTRICT secret)
{
    XXH_ASSERT((((size_t)acc) & 15) == 0);
    {
        uint64x2_t* const xacc = (uint64x2_t *) acc;
        /* We don't use a uint32x4_t pointer because it causes bus errors on ARMv7. */
        uint8_t const* const xinput = (const uint8_t *) input;
        uint8_t const* const xsecret  = (const uint8_t *) secret;

        size_t i;
        for (i=0; i < XXH_STRIPE_LEN / sizeof(uint64x2_t); i++) {
            /* data_vec = xinput[i]; */
            uint8x16_t data_vec    = vld1q_u8(xinput  + (i * 16));
            /* key_vec  = xsecret[i];  */
            uint8x16_t key_vec     = vld1q_u8(xsecret + (i * 16));
            uint64x2_t data_key;
            uint32x2_t data_key_lo, data_key_hi;
            /* xacc[i] += swap(data_vec); */
            uint64x2_t const data64  = vreinterpretq_u64_u8(data_vec);
            uint64x2_t const swapped = vextq_u64(data64, data64, 1);
            xacc[i] = vaddq_u64 (xacc[i], swapped);
            /* data_key = data_vec ^ key_vec; */
            data_key = vreinterpretq_u64_u8(veorq_u8(data_vec, key_vec));
            /* data_key_lo = (uint32x2_t) (data_key & 0xFFFFFFFF);
             * data_key_hi = (uint32x2_t) (data_key >> 32);
             * data_key = UNDEFINED; */
            XXH_SPLIT_IN_PLACE(data_key, data_key_lo, data_key_hi);
            /* xacc[i] += (uint64x2_t) data_key_lo * (uint64x2_t) data_key_hi; */
            xacc[i] = vmlal_u32 (xacc[i], data_key_lo, data_key_hi);

        }
    }
}

XXH_FORCE_INLINE void
XXH3_scrambleAcc_neon(void* XXH_RESTRICT acc, const void* XXH_RESTRICT secret)
{
    XXH_ASSERT((((size_t)acc) & 15) == 0);

    {   uint64x2_t* xacc       = (uint64x2_t*) acc;
        uint8_t const* xsecret = (uint8_t const*) secret;
        uint32x2_t prime       = vdup_n_u32 (XXH_PRIME32_1);

        size_t i;
        for (i=0; i < XXH_STRIPE_LEN/sizeof(uint64x2_t); i++) {
            /* xacc[i] ^= (xacc[i] >> 47); */
            uint64x2_t acc_vec  = xacc[i];
            uint64x2_t shifted  = vshrq_n_u64 (acc_vec, 47);
            uint64x2_t data_vec = veorq_u64   (acc_vec, shifted);

            /* xacc[i] ^= xsecret[i]; */
            uint8x16_t key_vec  = vld1q_u8    (xsecret + (i * 16));
            uint64x2_t data_key = veorq_u64   (data_vec, vreinterpretq_u64_u8(key_vec));

            /* xacc[i] *= XXH_PRIME32_1 */
            uint32x2_t data_key_lo, data_key_hi;
            /* data_key_lo = (uint32x2_t) (xacc[i] & 0xFFFFFFFF);
             * data_key_hi = (uint32x2_t) (xacc[i] >> 32);
             * xacc[i] = UNDEFINED; */
            XXH_SPLIT_IN_PLACE(data_key, data_key_lo, data_key_hi);
            {   /*
                 * prod_hi = (data_key >> 32) * XXH_PRIME32_1;
                 *
                 * Avoid vmul_u32 + vshll_n_u32 since Clang 6 and 7 will
                 * incorrectly "optimize" this:
                 *   tmp     = vmul_u32(vmovn_u64(a), vmovn_u64(b));
                 *   shifted = vshll_n_u32(tmp, 32);
                 * to this:
                 *   tmp     = "vmulq_u64"(a, b); // no such thing!
                 *   shifted = vshlq_n_u64(tmp, 32);
                 *
                 * However, unlike SSE, Clang lacks a 64-bit multiply routine
                 * for NEON, and it scalarizes two 64-bit multiplies instead.
                 *
                 * vmull_u32 has the same timing as vmul_u32, and it avoids
                 * this bug completely.
                 * See https://bugs.llvm.org/show_bug.cgi?id=39967
                 */
                uint64x2_t prod_hi = vmull_u32 (data_key_hi, prime);
                /* xacc[i] = prod_hi << 32; */
                xacc[i] = vshlq_n_u64(prod_hi, 32);
                /* xacc[i] += (prod_hi & 0xFFFFFFFF) * XXH_PRIME32_1; */
                xacc[i] = vmlal_u32(xacc[i], data_key_lo, prime);
            }
    }   }
}

#endif

#if (XXH_VECTOR == XXH_VSX)

XXH_FORCE_INLINE void
XXH3_accumulate_512_vsx(  void* XXH_RESTRICT acc,
                    const void* XXH_RESTRICT input,
                    const void* XXH_RESTRICT secret)
{
    /* presumed aligned */
    unsigned int* const xacc = (unsigned int*) acc;
    xxh_u64x2 const* const xinput   = (xxh_u64x2 const*) input;   /* no alignment restriction */
    xxh_u64x2 const* const xsecret  = (xxh_u64x2 const*) secret;    /* no alignment restriction */
    xxh_u64x2 const v32 = { 32, 32 };
    size_t i;
    for (i = 0; i < XXH_STRIPE_LEN / sizeof(xxh_u64x2); i++) {
        /* data_vec = xinput[i]; */
        xxh_u64x2 const data_vec = XXH_vec_loadu(xinput + i);
        /* key_vec = xsecret[i]; */
        xxh_u64x2 const key_vec  = XXH_vec_loadu(xsecret + i);
        xxh_u64x2 const data_key = data_vec ^ key_vec;
        /* shuffled = (data_key << 32) | (data_key >> 32); */
        xxh_u32x4 const shuffled = (xxh_u32x4)vec_rl(data_key, v32);
        /* product = ((xxh_u64x2)data_key & 0xFFFFFFFF) * ((xxh_u64x2)shuffled & 0xFFFFFFFF); */
        xxh_u64x2 const product  = XXH_vec_mulo((xxh_u32x4)data_key, shuffled);
        /* acc_vec = xacc[i]; */
        xxh_u64x2 acc_vec        = (xxh_u64x2)vec_xl(0, xacc + 4 * i);
        acc_vec += product;

        /* swap high and low halves */
#ifdef __s390x__
        acc_vec += vec_permi(data_vec, data_vec, 2);
#else
        acc_vec += vec_xxpermdi(data_vec, data_vec, 2);
#endif
        /* xacc[i] = acc_vec; */
        vec_xst((xxh_u32x4)acc_vec, 0, xacc + 4 * i);
    }
}

XXH_FORCE_INLINE void
XXH3_scrambleAcc_vsx(void* XXH_RESTRICT acc, const void* XXH_RESTRICT secret)
{
    XXH_ASSERT((((size_t)acc) & 15) == 0);

    {         xxh_u64x2* const xacc    =       (xxh_u64x2*) acc;
        const xxh_u64x2* const xsecret = (const xxh_u64x2*) secret;
        /* constants */
        xxh_u64x2 const v32  = { 32, 32 };
        xxh_u64x2 const v47 = { 47, 47 };
        xxh_u32x4 const prime = { XXH_PRIME32_1, XXH_PRIME32_1, XXH_PRIME32_1, XXH_PRIME32_1 };
        size_t i;
        for (i = 0; i < XXH_STRIPE_LEN / sizeof(xxh_u64x2); i++) {
            /* xacc[i] ^= (xacc[i] >> 47); */
            xxh_u64x2 const acc_vec  = xacc[i];
            xxh_u64x2 const data_vec = acc_vec ^ (acc_vec >> v47);

            /* xacc[i] ^= xsecret[i]; */
            xxh_u64x2 const key_vec  = XXH_vec_loadu(xsecret + i);
            xxh_u64x2 const data_key = data_vec ^ key_vec;

            /* xacc[i] *= XXH_PRIME32_1 */
            /* prod_lo = ((xxh_u64x2)data_key & 0xFFFFFFFF) * ((xxh_u64x2)prime & 0xFFFFFFFF);  */
            xxh_u64x2 const prod_even  = XXH_vec_mule((xxh_u32x4)data_key, prime);
            /* prod_hi = ((xxh_u64x2)data_key >> 32) * ((xxh_u64x2)prime >> 32);  */
            xxh_u64x2 const prod_odd  = XXH_vec_mulo((xxh_u32x4)data_key, prime);
            xacc[i] = prod_odd + (prod_even << v32);
    }   }
}

#endif

/* scalar variants - universal */

XXH_FORCE_INLINE void
XXH3_accumulate_512_scalar(void* XXH_RESTRICT acc,
                     const void* XXH_RESTRICT input,
                     const void* XXH_RESTRICT secret)
{
    xxh_u64* const xacc = (xxh_u64*) acc; /* presumed aligned */
    const xxh_u8* const xinput  = (const xxh_u8*) input;  /* no alignment restriction */
    const xxh_u8* const xsecret = (const xxh_u8*) secret;   /* no alignment restriction */
    size_t i;
    XXH_ASSERT(((size_t)acc & (XXH_ACC_ALIGN-1)) == 0);
    for (i=0; i < XXH_ACC_NB; i++) {
        xxh_u64 const data_val = XXH_readLE64(xinput + 8*i);
        xxh_u64 const data_key = data_val ^ XXH_readLE64(xsecret + i*8);
        xacc[i ^ 1] += data_val; /* swap adjacent lanes */
        xacc[i] += XXH_mult32to64(data_key & 0xFFFFFFFF, data_key >> 32);
    }
}

XXH_FORCE_INLINE void
XXH3_scrambleAcc_scalar(void* XXH_RESTRICT acc, const void* XXH_RESTRICT secret)
{
    xxh_u64* const xacc = (xxh_u64*) acc;   /* presumed aligned */
    const xxh_u8* const xsecret = (const xxh_u8*) secret;   /* no alignment restriction */
    size_t i;
    XXH_ASSERT((((size_t)acc) & (XXH_ACC_ALIGN-1)) == 0);
    for (i=0; i < XXH_ACC_NB; i++) {
        xxh_u64 const key64 = XXH_readLE64(xsecret + 8*i);
        xxh_u64 acc64 = xacc[i];
        acc64 = XXH_xorshift64(acc64, 47);
        acc64 ^= key64;
        acc64 *= XXH_PRIME32_1;
        xacc[i] = acc64;
    }
}

XXH_FORCE_INLINE void
XXH3_initCustomSecret_scalar(void* XXH_RESTRICT customSecret, xxh_u64 seed64)
{
    /*
     * We need a separate pointer for the hack below,
     * which requires a non-const pointer.
     * Any decent compiler will optimize this out otherwise.
     */
    const xxh_u8* kSecretPtr = XXH3_kSecret;
    XXH_STATIC_ASSERT((XXH_SECRET_DEFAULT_SIZE & 15) == 0);

#if defined(__clang__) && defined(__aarch64__)
    /*
     * UGLY HACK:
     * Clang generates a bunch of MOV/MOVK pairs for aarch64, and they are
     * placed sequentially, in order, at the top of the unrolled loop.
     *
     * While MOVK is great for generating constants (2 cycles for a 64-bit
     * constant compared to 4 cycles for LDR), long MOVK chains stall the
     * integer pipelines:
     *   I   L   S
     * MOVK
     * MOVK
     * MOVK
     * MOVK
     * ADD
     * SUB      STR
     *          STR
     * By forcing loads from memory (as the asm line causes Clang to assume
     * that XXH3_kSecretPtr has been changed), the pipelines are used more
     * efficiently:
     *   I   L   S
     *      LDR
     *  ADD LDR
     *  SUB     STR
     *          STR
     * XXH3_64bits_withSeed, len == 256, Snapdragon 835
     *   without hack: 2654.4 MB/s
     *   with hack:    3202.9 MB/s
     */
    XXH_COMPILER_GUARD(kSecretPtr);
#endif
    /*
     * Note: in debug mode, this overrides the asm optimization
     * and Clang will emit MOVK chains again.
     */
    XXH_ASSERT(kSecretPtr == XXH3_kSecret);

    {   int const nbRounds = XXH_SECRET_DEFAULT_SIZE / 16;
        int i;
        for (i=0; i < nbRounds; i++) {
            /*
             * The asm hack causes Clang to assume that kSecretPtr aliases with
             * customSecret, and on aarch64, this prevented LDP from merging two
             * loads together for free. Putting the loads together before the stores
             * properly generates LDP.
             */
            xxh_u64 lo = XXH_readLE64(kSecretPtr + 16*i)     + seed64;
            xxh_u64 hi = XXH_readLE64(kSecretPtr + 16*i + 8) - seed64;
            XXH_writeLE64((xxh_u8*)customSecret + 16*i,     lo);
            XXH_writeLE64((xxh_u8*)customSecret + 16*i + 8, hi);
    }   }
}


typedef void (*XXH3_f_accumulate_512)(void* XXH_RESTRICT, const void*, const void*);
typedef void (*XXH3_f_scrambleAcc)(void* XXH_RESTRICT, const void*);
typedef void (*XXH3_f_initCustomSecret)(void* XXH_RESTRICT, xxh_u64);


#if (XXH_VECTOR == XXH_AVX512)

#define XXH3_accumulate_512 XXH3_accumulate_512_avx512
#define XXH3_scrambleAcc    XXH3_scrambleAcc_avx512
#define XXH3_initCustomSecret XXH3_initCustomSecret_avx512

#elif (XXH_VECTOR == XXH_AVX2)

#define XXH3_accumulate_512 XXH3_accumulate_512_avx2
#define XXH3_scrambleAcc    XXH3_scrambleAcc_avx2
#define XXH3_initCustomSecret XXH3_initCustomSecret_avx2

#elif (XXH_VECTOR == XXH_SSE2)

#define XXH3_accumulate_512 XXH3_accumulate_512_sse2
#define XXH3_scrambleAcc    XXH3_scrambleAcc_sse2
#define XXH3_initCustomSecret XXH3_initCustomSecret_sse2

#elif (XXH_VECTOR == XXH_NEON)

#define XXH3_accumulate_512 XXH3_accumulate_512_neon
#define XXH3_scrambleAcc    XXH3_scrambleAcc_neon
#define XXH3_initCustomSecret XXH3_initCustomSecret_scalar

#elif (XXH_VECTOR == XXH_VSX)

#define XXH3_accumulate_512 XXH3_accumulate_512_vsx
#define XXH3_scrambleAcc    XXH3_scrambleAcc_vsx
#define XXH3_initCustomSecret XXH3_initCustomSecret_scalar

#else /* scalar */

#define XXH3_accumulate_512 XXH3_accumulate_512_scalar
#define XXH3_scrambleAcc    XXH3_scrambleAcc_scalar
#define XXH3_initCustomSecret XXH3_initCustomSecret_scalar

#endif



#ifndef XXH_PREFETCH_DIST
#  ifdef __clang__
#    define XXH_PREFETCH_DIST 320
#  else
#    if (XXH_VECTOR == XXH_AVX512)
#      define XXH_PREFETCH_DIST 512
#    else
#      define XXH_PREFETCH_DIST 384
#    endif
#  endif  /* __clang__ */
#endif  /* XXH_PREFETCH_DIST */

/*
 * XXH3_accumulate()
 * Loops over XXH3_accumulate_512().
 * Assumption: nbStripes will not overflow the secret size
 */
XXH_FORCE_INLINE void
XXH3_accumulate(     xxh_u64* XXH_RESTRICT acc,
                const xxh_u8* XXH_RESTRICT input,
                const xxh_u8* XXH_RESTRICT secret,
                      size_t nbStripes,
                      XXH3_f_accumulate_512 f_acc512)
{
    size_t n;
    for (n = 0; n < nbStripes; n++ ) {
        const xxh_u8* const in = input + n*XXH_STRIPE_LEN;
        XXH_PREFETCH(in + XXH_PREFETCH_DIST);
        f_acc512(acc,
                 in,
                 secret + n*XXH_SECRET_CONSUME_RATE);
    }
}

XXH_FORCE_INLINE void
XXH3_hashLong_internal_loop(xxh_u64* XXH_RESTRICT acc,
                      const xxh_u8* XXH_RESTRICT input, size_t len,
                      const xxh_u8* XXH_RESTRICT secret, size_t secretSize,
                            XXH3_f_accumulate_512 f_acc512,
                            XXH3_f_scrambleAcc f_scramble)
{
    size_t const nbStripesPerBlock = (secretSize - XXH_STRIPE_LEN) / XXH_SECRET_CONSUME_RATE;
    size_t const block_len = XXH_STRIPE_LEN * nbStripesPerBlock;
    size_t const nb_blocks = (len - 1) / block_len;

    size_t n;

    XXH_ASSERT(secretSize >= XXH3_SECRET_SIZE_MIN);

    for (n = 0; n < nb_blocks; n++) {
        XXH3_accumulate(acc, input + n*block_len, secret, nbStripesPerBlock, f_acc512);
        f_scramble(acc, secret + secretSize - XXH_STRIPE_LEN);
    }

    /* last partial block */
    XXH_ASSERT(len > XXH_STRIPE_LEN);
    {   size_t const nbStripes = ((len - 1) - (block_len * nb_blocks)) / XXH_STRIPE_LEN;
        XXH_ASSERT(nbStripes <= (secretSize / XXH_SECRET_CONSUME_RATE));
        XXH3_accumulate(acc, input + nb_blocks*block_len, secret, nbStripes, f_acc512);

        /* last stripe */
        {   const xxh_u8* const p = input + len - XXH_STRIPE_LEN;
#define XXH_SECRET_LASTACC_START 7  /* not aligned on 8, last secret is different from acc & scrambler */
            f_acc512(acc, p, secret + secretSize - XXH_STRIPE_LEN - XXH_SECRET_LASTACC_START);
    }   }
}

XXH_FORCE_INLINE xxh_u64
XXH3_mix2Accs(const xxh_u64* XXH_RESTRICT acc, const xxh_u8* XXH_RESTRICT secret)
{
    return XXH3_mul128_fold64(
               acc[0] ^ XXH_readLE64(secret),
               acc[1] ^ XXH_readLE64(secret+8) );
}

static XXH64_hash_t
XXH3_mergeAccs(const xxh_u64* XXH_RESTRICT acc, const xxh_u8* XXH_RESTRICT secret, xxh_u64 start)
{
    xxh_u64 result64 = start;
    size_t i = 0;

    for (i = 0; i < 4; i++) {
        result64 += XXH3_mix2Accs(acc+2*i, secret + 16*i);
#if defined(__clang__)                                /* Clang */ \
    && (defined(__arm__) || defined(__thumb__))       /* ARMv7 */ \
    && (defined(__ARM_NEON) || defined(__ARM_NEON__)) /* NEON */  \
    && !defined(XXH_ENABLE_AUTOVECTORIZE)             /* Define to disable */
        /*
         * UGLY HACK:
         * Prevent autovectorization on Clang ARMv7-a. Exact same problem as
         * the one in XXH3_len_129to240_64b. Speeds up shorter keys > 240b.
         * XXH3_64bits, len == 256, Snapdragon 835:
         *   without hack: 2063.7 MB/s
         *   with hack:    2560.7 MB/s
         */
        XXH_COMPILER_GUARD(result64);
#endif
    }

    return XXH3_avalanche(result64);
}

#define XXH3_INIT_ACC { XXH_PRIME32_3, XXH_PRIME64_1, XXH_PRIME64_2, XXH_PRIME64_3, \
                        XXH_PRIME64_4, XXH_PRIME32_2, XXH_PRIME64_5, XXH_PRIME32_1 }

XXH_FORCE_INLINE XXH64_hash_t
XXH3_hashLong_64b_internal(const void* XXH_RESTRICT input, size_t len,
                           const void* XXH_RESTRICT secret, size_t secretSize,
                           XXH3_f_accumulate_512 f_acc512,
                           XXH3_f_scrambleAcc f_scramble)
{
    XXH_ALIGN(XXH_ACC_ALIGN) xxh_u64 acc[XXH_ACC_NB] = XXH3_INIT_ACC;

    XXH3_hashLong_internal_loop(acc, (const xxh_u8*)input, len, (const xxh_u8*)secret, secretSize, f_acc512, f_scramble);

    /* converge into final hash */
    XXH_STATIC_ASSERT(sizeof(acc) == 64);
    /* do not align on 8, so that the secret is different from the accumulator */
#define XXH_SECRET_MERGEACCS_START 11
    XXH_ASSERT(secretSize >= sizeof(acc) + XXH_SECRET_MERGEACCS_START);
    return XXH3_mergeAccs(acc, (const xxh_u8*)secret + XXH_SECRET_MERGEACCS_START, (xxh_u64)len * XXH_PRIME64_1);
}

/*
 * It's important for performance to transmit secret's size (when it's static)
 * so that the compiler can properly optimize the vectorized loop.
 * This makes a big performance difference for "medium" keys (<1 KB) when using AVX instruction set.
 */
XXH3_WITH_SECRET_INLINE XXH64_hash_t
XXH3_hashLong_64b_withSecret(const void* XXH_RESTRICT input, size_t len,
                             XXH64_hash_t seed64, const xxh_u8* XXH_RESTRICT secret, size_t secretLen)
{
    (void)seed64;
    return XXH3_hashLong_64b_internal(input, len, secret, secretLen, XXH3_accumulate_512, XXH3_scrambleAcc);
}

/*
 * It's preferable for performance that XXH3_hashLong is not inlined,
 * as it results in a smaller function for small data, easier to the instruction cache.
 * Note that inside this no_inline function, we do inline the internal loop,
 * and provide a statically defined secret size to allow optimization of vector loop.
 */
XXH_NO_INLINE XXH64_hash_t
XXH3_hashLong_64b_default(const void* XXH_RESTRICT input, size_t len,
                          XXH64_hash_t seed64, const xxh_u8* XXH_RESTRICT secret, size_t secretLen)
{
    (void)seed64; (void)secret; (void)secretLen;
    return XXH3_hashLong_64b_internal(input, len, XXH3_kSecret, sizeof(XXH3_kSecret), XXH3_accumulate_512, XXH3_scrambleAcc);
}

/*
 * XXH3_hashLong_64b_withSeed():
 * Generate a custom key based on alteration of default XXH3_kSecret with the seed,
 * and then use this key for long mode hashing.
 *
 * This operation is decently fast but nonetheless costs a little bit of time.
 * Try to avoid it whenever possible (typically when seed==0).
 *
 * It's important for performance that XXH3_hashLong is not inlined. Not sure
 * why (uop cache maybe?), but the difference is large and easily measurable.
 */
XXH_FORCE_INLINE XXH64_hash_t
XXH3_hashLong_64b_withSeed_internal(const void* input, size_t len,
                                    XXH64_hash_t seed,
                                    XXH3_f_accumulate_512 f_acc512,
                                    XXH3_f_scrambleAcc f_scramble,
                                    XXH3_f_initCustomSecret f_initSec)
{
    if (seed == 0)
        return XXH3_hashLong_64b_internal(input, len,
                                          XXH3_kSecret, sizeof(XXH3_kSecret),
                                          f_acc512, f_scramble);
    {   XXH_ALIGN(XXH_SEC_ALIGN) xxh_u8 secret[XXH_SECRET_DEFAULT_SIZE];
        f_initSec(secret, seed);
        return XXH3_hashLong_64b_internal(input, len, secret, sizeof(secret),
                                          f_acc512, f_scramble);
    }
}

/*
 * It's important for performance that XXH3_hashLong is not inlined.
 */
XXH_NO_INLINE XXH64_hash_t
XXH3_hashLong_64b_withSeed(const void* input, size_t len,
                           XXH64_hash_t seed, const xxh_u8* secret, size_t secretLen)
{
    (void)secret; (void)secretLen;
    return XXH3_hashLong_64b_withSeed_internal(input, len, seed,
                XXH3_accumulate_512, XXH3_scrambleAcc, XXH3_initCustomSecret);
}


typedef XXH64_hash_t (*XXH3_hashLong64_f)(const void* XXH_RESTRICT, size_t,
                                          XXH64_hash_t, const xxh_u8* XXH_RESTRICT, size_t);

XXH_FORCE_INLINE XXH64_hash_t
XXH3_64bits_internal(const void* XXH_RESTRICT input, size_t len,
                     XXH64_hash_t seed64, const void* XXH_RESTRICT secret, size_t secretLen,
                     XXH3_hashLong64_f f_hashLong)
{
    XXH_ASSERT(secretLen >= XXH3_SECRET_SIZE_MIN);
    /*
     * If an action is to be taken if `secretLen` condition is not respected,
     * it should be done here.
     * For now, it's a contract pre-condition.
     * Adding a check and a branch here would cost performance at every hash.
     * Also, note that function signature doesn't offer room to return an error.
     */
    if (len <= 16)
        return XXH3_len_0to16_64b((const xxh_u8*)input, len, (const xxh_u8*)secret, seed64);
    if (len <= 128)
        return XXH3_len_17to128_64b((const xxh_u8*)input, len, (const xxh_u8*)secret, secretLen, seed64);
    if (len <= XXH3_MIDSIZE_MAX)
        return XXH3_len_129to240_64b((const xxh_u8*)input, len, (const xxh_u8*)secret, secretLen, seed64);
    return f_hashLong(input, len, seed64, (const xxh_u8*)secret, secretLen);
}


/* ===   Public entry point   === */

/*! @ingroup xxh3_family */
XXH_PUBLIC_API XXH64_hash_t XXH3_64bits(const void* input, size_t len)
{
    return XXH3_64bits_internal(input, len, 0, XXH3_kSecret, sizeof(XXH3_kSecret), XXH3_hashLong_64b_default);
}

/*! @ingroup xxh3_family */
XXH_PUBLIC_API XXH64_hash_t
XXH3_64bits_withSecret(const void* input, size_t len, const void* secret, size_t secretSize)
{
    return XXH3_64bits_internal(input, len, 0, secret, secretSize, XXH3_hashLong_64b_withSecret);
}

/*! @ingroup xxh3_family */
XXH_PUBLIC_API XXH64_hash_t
XXH3_64bits_withSeed(const void* input, size_t len, XXH64_hash_t seed)
{
    return XXH3_64bits_internal(input, len, seed, XXH3_kSecret, sizeof(XXH3_kSecret), XXH3_hashLong_64b_withSeed);
}

XXH_PUBLIC_API XXH64_hash_t
XXH3_64bits_withSecretandSeed(const void* input, size_t len, const void* secret, size_t secretSize, XXH64_hash_t seed)
{
    if (len <= XXH3_MIDSIZE_MAX)
        return XXH3_64bits_internal(input, len, seed, XXH3_kSecret, sizeof(XXH3_kSecret), NULL);
    return XXH3_hashLong_64b_withSecret(input, len, seed, (const xxh_u8*)secret, secretSize);
}


/* ===   XXH3 streaming   === */

/*
 * Malloc's a pointer that is always aligned to align.
 *
 * This must be freed with `XXH_alignedFree()`.
 *
 * malloc typically guarantees 16 byte alignment on 64-bit systems and 8 byte
 * alignment on 32-bit. This isn't enough for the 32 byte aligned loads in AVX2
 * or on 32-bit, the 16 byte aligned loads in SSE2 and NEON.
 *
 * This underalignment previously caused a rather obvious crash which went
 * completely unnoticed due to XXH3_createState() not actually being tested.
 * Credit to RedSpah for noticing this bug.
 *
 * The alignment is done manually: Functions like posix_memalign or _mm_malloc
 * are avoided: To maintain portability, we would have to write a fallback
 * like this anyways, and besides, testing for the existence of library
 * functions without relying on external build tools is impossible.
 *
 * The method is simple: Overallocate, manually align, and store the offset
 * to the original behind the returned pointer.
 *
 * Align must be a power of 2 and 8 <= align <= 128.
 */
static void* XXH_alignedMalloc(size_t s, size_t align)
{
    XXH_ASSERT(align <= 128 && align >= 8); /* range check */
    XXH_ASSERT((align & (align-1)) == 0);   /* power of 2 */
    XXH_ASSERT(s != 0 && s < (s + align));  /* empty/overflow */
    {   /* Overallocate to make room for manual realignment and an offset byte */
        xxh_u8* base = (xxh_u8*)XXH_malloc(s + align);
        if (base != NULL) {
            /*
             * Get the offset needed to align this pointer.
             *
             * Even if the returned pointer is aligned, there will always be
             * at least one byte to store the offset to the original pointer.
             */
            size_t offset = align - ((size_t)base & (align - 1)); /* base % align */
            /* Add the offset for the now-aligned pointer */
            xxh_u8* ptr = base + offset;

            XXH_ASSERT((size_t)ptr % align == 0);

            /* Store the offset immediately before the returned pointer. */
            ptr[-1] = (xxh_u8)offset;
            return ptr;
        }
        return NULL;
    }
}
/*
 * Frees an aligned pointer allocated by XXH_alignedMalloc(). Don't pass
 * normal malloc'd pointers, XXH_alignedMalloc has a specific data layout.
 */
static void XXH_alignedFree(void* p)
{
    if (p != NULL) {
        xxh_u8* ptr = (xxh_u8*)p;
        /* Get the offset byte we added in XXH_malloc. */
        xxh_u8 offset = ptr[-1];
        /* Free the original malloc'd pointer */
        xxh_u8* base = ptr - offset;
        XXH_free(base);
    }
}
/*! @ingroup xxh3_family */
XXH_PUBLIC_API XXH3_state_t* XXH3_createState(void)
{
    XXH3_state_t* const state = (XXH3_state_t*)XXH_alignedMalloc(sizeof(XXH3_state_t), 64);
    if (state==NULL) return NULL;
    XXH3_INITSTATE(state);
    return state;
}

/*! @ingroup xxh3_family */
XXH_PUBLIC_API XXH_errorcode XXH3_freeState(XXH3_state_t* statePtr)
{
    XXH_alignedFree(statePtr);
    return XXH_OK;
}

/*! @ingroup xxh3_family */
XXH_PUBLIC_API void
XXH3_copyState(XXH3_state_t* dst_state, const XXH3_state_t* src_state)
{
    XXH_memcpy(dst_state, src_state, sizeof(*dst_state));
}

static void
XXH3_reset_internal(XXH3_state_t* statePtr,
                    XXH64_hash_t seed,
                    const void* secret, size_t secretSize)
{
    size_t const initStart = offsetof(XXH3_state_t, bufferedSize);
    size_t const initLength = offsetof(XXH3_state_t, nbStripesPerBlock) - initStart;
    XXH_ASSERT(offsetof(XXH3_state_t, nbStripesPerBlock) > initStart);
    XXH_ASSERT(statePtr != NULL);
    /* set members from bufferedSize to nbStripesPerBlock (excluded) to 0 */
    memset((char*)statePtr + initStart, 0, initLength);
    statePtr->acc[0] = XXH_PRIME32_3;
    statePtr->acc[1] = XXH_PRIME64_1;
    statePtr->acc[2] = XXH_PRIME64_2;
    statePtr->acc[3] = XXH_PRIME64_3;
    statePtr->acc[4] = XXH_PRIME64_4;
    statePtr->acc[5] = XXH_PRIME32_2;
    statePtr->acc[6] = XXH_PRIME64_5;
    statePtr->acc[7] = XXH_PRIME32_1;
    statePtr->seed = seed;
    statePtr->useSeed = (seed != 0);
    statePtr->extSecret = (const unsigned char*)secret;
    XXH_ASSERT(secretSize >= XXH3_SECRET_SIZE_MIN);
    statePtr->secretLimit = secretSize - XXH_STRIPE_LEN;
    statePtr->nbStripesPerBlock = statePtr->secretLimit / XXH_SECRET_CONSUME_RATE;
}

/*! @ingroup xxh3_family */
XXH_PUBLIC_API XXH_errorcode
XXH3_64bits_reset(XXH3_state_t* statePtr)
{
    if (statePtr == NULL) return XXH_ERROR;
    XXH3_reset_internal(statePtr, 0, XXH3_kSecret, XXH_SECRET_DEFAULT_SIZE);
    return XXH_OK;
}

/*! @ingroup xxh3_family */
XXH_PUBLIC_API XXH_errorcode
XXH3_64bits_reset_withSecret(XXH3_state_t* statePtr, const void* secret, size_t secretSize)
{
    if (statePtr == NULL) return XXH_ERROR;
    XXH3_reset_internal(statePtr, 0, secret, secretSize);
    if (secret == NULL) return XXH_ERROR;
    if (secretSize < XXH3_SECRET_SIZE_MIN) return XXH_ERROR;
    return XXH_OK;
}

/*! @ingroup xxh3_family */
XXH_PUBLIC_API XXH_errorcode
XXH3_64bits_reset_withSeed(XXH3_state_t* statePtr, XXH64_hash_t seed)
{
    if (statePtr == NULL) return XXH_ERROR;
    if (seed==0) return XXH3_64bits_reset(statePtr);
    if ((seed != statePtr->seed) || (statePtr->extSecret != NULL))
        XXH3_initCustomSecret(statePtr->customSecret, seed);
    XXH3_reset_internal(statePtr, seed, NULL, XXH_SECRET_DEFAULT_SIZE);
    return XXH_OK;
}

/*! @ingroup xxh3_family */
XXH_PUBLIC_API XXH_errorcode
XXH3_64bits_reset_withSecretandSeed(XXH3_state_t* statePtr, const void* secret, size_t secretSize, XXH64_hash_t seed64)
{
    if (statePtr == NULL) return XXH_ERROR;
    if (secret == NULL) return XXH_ERROR;
    if (secretSize < XXH3_SECRET_SIZE_MIN) return XXH_ERROR;
    XXH3_reset_internal(statePtr, seed64, secret, secretSize);
    statePtr->useSeed = 1; /* always, even if seed64==0 */
    return XXH_OK;
}

/* Note : when XXH3_consumeStripes() is invoked,
 * there must be a guarantee that at least one more byte must be consumed from input
 * so that the function can blindly consume all stripes using the "normal" secret segment */
XXH_FORCE_INLINE void
XXH3_consumeStripes(xxh_u64* XXH_RESTRICT acc,
                    size_t* XXH_RESTRICT nbStripesSoFarPtr, size_t nbStripesPerBlock,
                    const xxh_u8* XXH_RESTRICT input, size_t nbStripes,
                    const xxh_u8* XXH_RESTRICT secret, size_t secretLimit,
                    XXH3_f_accumulate_512 f_acc512,
                    XXH3_f_scrambleAcc f_scramble)
{
    XXH_ASSERT(nbStripes <= nbStripesPerBlock);  /* can handle max 1 scramble per invocation */
    XXH_ASSERT(*nbStripesSoFarPtr < nbStripesPerBlock);
    if (nbStripesPerBlock - *nbStripesSoFarPtr <= nbStripes) {
        /* need a scrambling operation */
        size_t const nbStripesToEndofBlock = nbStripesPerBlock - *nbStripesSoFarPtr;
        size_t const nbStripesAfterBlock = nbStripes - nbStripesToEndofBlock;
        XXH3_accumulate(acc, input, secret + nbStripesSoFarPtr[0] * XXH_SECRET_CONSUME_RATE, nbStripesToEndofBlock, f_acc512);
        f_scramble(acc, secret + secretLimit);
        XXH3_accumulate(acc, input + nbStripesToEndofBlock * XXH_STRIPE_LEN, secret, nbStripesAfterBlock, f_acc512);
        *nbStripesSoFarPtr = nbStripesAfterBlock;
    } else {
        XXH3_accumulate(acc, input, secret + nbStripesSoFarPtr[0] * XXH_SECRET_CONSUME_RATE, nbStripes, f_acc512);
        *nbStripesSoFarPtr += nbStripes;
    }
}

#ifndef XXH3_STREAM_USE_STACK
# ifndef __clang__ /* clang doesn't need additional stack space */
#   define XXH3_STREAM_USE_STACK 1
# endif
#endif
/*
 * Both XXH3_64bits_update and XXH3_128bits_update use this routine.
 */
XXH_FORCE_INLINE XXH_errorcode
XXH3_update(XXH3_state_t* XXH_RESTRICT const state,
            const xxh_u8* XXH_RESTRICT input, size_t len,
            XXH3_f_accumulate_512 f_acc512,
            XXH3_f_scrambleAcc f_scramble)
{
    if (input==NULL) {
        XXH_ASSERT(len == 0);
        return XXH_OK;
    }

    XXH_ASSERT(state != NULL);
    {   const xxh_u8* const bEnd = input + len;
        const unsigned char* const secret = (state->extSecret == NULL) ? state->customSecret : state->extSecret;
#if defined(XXH3_STREAM_USE_STACK) && XXH3_STREAM_USE_STACK >= 1
        /* For some reason, gcc and MSVC seem to suffer greatly
         * when operating accumulators directly into state.
         * Operating into stack space seems to enable proper optimization.
         * clang, on the other hand, doesn't seem to need this trick */
        XXH_ALIGN(XXH_ACC_ALIGN) xxh_u64 acc[8]; memcpy(acc, state->acc, sizeof(acc));
#else
        xxh_u64* XXH_RESTRICT const acc = state->acc;
#endif
        state->totalLen += len;
        XXH_ASSERT(state->bufferedSize <= XXH3_INTERNALBUFFER_SIZE);

        /* small input : just fill in tmp buffer */
        if (state->bufferedSize + len <= XXH3_INTERNALBUFFER_SIZE) {
            XXH_memcpy(state->buffer + state->bufferedSize, input, len);
            state->bufferedSize += (XXH32_hash_t)len;
            return XXH_OK;
        }

        /* total input is now > XXH3_INTERNALBUFFER_SIZE */
        #define XXH3_INTERNALBUFFER_STRIPES (XXH3_INTERNALBUFFER_SIZE / XXH_STRIPE_LEN)
        XXH_STATIC_ASSERT(XXH3_INTERNALBUFFER_SIZE % XXH_STRIPE_LEN == 0);   /* clean multiple */

        /*
         * Internal buffer is partially filled (always, except at beginning)
         * Complete it, then consume it.
         */
        if (state->bufferedSize) {
            size_t const loadSize = XXH3_INTERNALBUFFER_SIZE - state->bufferedSize;
            XXH_memcpy(state->buffer + state->bufferedSize, input, loadSize);
            input += loadSize;
            XXH3_consumeStripes(acc,
                               &state->nbStripesSoFar, state->nbStripesPerBlock,
                                state->buffer, XXH3_INTERNALBUFFER_STRIPES,
                                secret, state->secretLimit,
                                f_acc512, f_scramble);
            state->bufferedSize = 0;
        }
        XXH_ASSERT(input < bEnd);

        /* large input to consume : ingest per full block */
        if ((size_t)(bEnd - input) > state->nbStripesPerBlock * XXH_STRIPE_LEN) {
            size_t nbStripes = (size_t)(bEnd - 1 - input) / XXH_STRIPE_LEN;
            XXH_ASSERT(state->nbStripesPerBlock >= state->nbStripesSoFar);
            /* join to current block's end */
            {   size_t const nbStripesToEnd = state->nbStripesPerBlock - state->nbStripesSoFar;
                XXH_ASSERT(nbStripes <= nbStripes);
                XXH3_accumulate(acc, input, secret + state->nbStripesSoFar * XXH_SECRET_CONSUME_RATE, nbStripesToEnd, f_acc512);
                f_scramble(acc, secret + state->secretLimit);
                state->nbStripesSoFar = 0;
                input += nbStripesToEnd * XXH_STRIPE_LEN;
                nbStripes -= nbStripesToEnd;
            }
            /* consume per entire blocks */
            while(nbStripes >= state->nbStripesPerBlock) {
                XXH3_accumulate(acc, input, secret, state->nbStripesPerBlock, f_acc512);
                f_scramble(acc, secret + state->secretLimit);
                input += state->nbStripesPerBlock * XXH_STRIPE_LEN;
                nbStripes -= state->nbStripesPerBlock;
            }
            /* consume last partial block */
            XXH3_accumulate(acc, input, secret, nbStripes, f_acc512);
            input += nbStripes * XXH_STRIPE_LEN;
            XXH_ASSERT(input < bEnd);  /* at least some bytes left */
            state->nbStripesSoFar = nbStripes;
            /* buffer predecessor of last partial stripe */
            XXH_memcpy(state->buffer + sizeof(state->buffer) - XXH_STRIPE_LEN, input - XXH_STRIPE_LEN, XXH_STRIPE_LEN);
            XXH_ASSERT(bEnd - input <= XXH_STRIPE_LEN);
        } else {
            /* content to consume <= block size */
            /* Consume input by a multiple of internal buffer size */
            if (bEnd - input > XXH3_INTERNALBUFFER_SIZE) {
                const xxh_u8* const limit = bEnd - XXH3_INTERNALBUFFER_SIZE;
                do {
                    XXH3_consumeStripes(acc,
                                       &state->nbStripesSoFar, state->nbStripesPerBlock,
                                        input, XXH3_INTERNALBUFFER_STRIPES,
                                        secret, state->secretLimit,
                                        f_acc512, f_scramble);
                    input += XXH3_INTERNALBUFFER_SIZE;
                } while (input<limit);
                /* buffer predecessor of last partial stripe */
                XXH_memcpy(state->buffer + sizeof(state->buffer) - XXH_STRIPE_LEN, input - XXH_STRIPE_LEN, XXH_STRIPE_LEN);
            }
        }

        /* Some remaining input (always) : buffer it */
        XXH_ASSERT(input < bEnd);
        XXH_ASSERT(bEnd - input <= XXH3_INTERNALBUFFER_SIZE);
        XXH_ASSERT(state->bufferedSize == 0);
        XXH_memcpy(state->buffer, input, (size_t)(bEnd-input));
        state->bufferedSize = (XXH32_hash_t)(bEnd-input);
#if defined(XXH3_STREAM_USE_STACK) && XXH3_STREAM_USE_STACK >= 1
        /* save stack accumulators into state */
        memcpy(state->acc, acc, sizeof(acc));
#endif
    }

    return XXH_OK;
}

/*! @ingroup xxh3_family */
XXH_PUBLIC_API XXH_errorcode
XXH3_64bits_update(XXH3_state_t* state, const void* input, size_t len)
{
    return XXH3_update(state, (const xxh_u8*)input, len,
                       XXH3_accumulate_512, XXH3_scrambleAcc);
}


XXH_FORCE_INLINE void
XXH3_digest_long (XXH64_hash_t* acc,
                  const XXH3_state_t* state,
                  const unsigned char* secret)
{
    /*
     * Digest on a local copy. This way, the state remains unaltered, and it can
     * continue ingesting more input afterwards.
     */
    XXH_memcpy(acc, state->acc, sizeof(state->acc));
    if (state->bufferedSize >= XXH_STRIPE_LEN) {
        size_t const nbStripes = (state->bufferedSize - 1) / XXH_STRIPE_LEN;
        size_t nbStripesSoFar = state->nbStripesSoFar;
        XXH3_consumeStripes(acc,
                           &nbStripesSoFar, state->nbStripesPerBlock,
                            state->buffer, nbStripes,
                            secret, state->secretLimit,
                            XXH3_accumulate_512, XXH3_scrambleAcc);
        /* last stripe */
        XXH3_accumulate_512(acc,
                            state->buffer + state->bufferedSize - XXH_STRIPE_LEN,
                            secret + state->secretLimit - XXH_SECRET_LASTACC_START);
    } else {  /* bufferedSize < XXH_STRIPE_LEN */
        xxh_u8 lastStripe[XXH_STRIPE_LEN];
        size_t const catchupSize = XXH_STRIPE_LEN - state->bufferedSize;
        XXH_ASSERT(state->bufferedSize > 0);  /* there is always some input buffered */
        XXH_memcpy(lastStripe, state->buffer + sizeof(state->buffer) - catchupSize, catchupSize);
        XXH_memcpy(lastStripe + catchupSize, state->buffer, state->bufferedSize);
        XXH3_accumulate_512(acc,
                            lastStripe,
                            secret + state->secretLimit - XXH_SECRET_LASTACC_START);
    }
}

/*! @ingroup xxh3_family */
XXH_PUBLIC_API XXH64_hash_t XXH3_64bits_digest (const XXH3_state_t* state)
{
    const unsigned char* const secret = (state->extSecret == NULL) ? state->customSecret : state->extSecret;
    if (state->totalLen > XXH3_MIDSIZE_MAX) {
        XXH_ALIGN(XXH_ACC_ALIGN) XXH64_hash_t acc[XXH_ACC_NB];
        XXH3_digest_long(acc, state, secret);
        return XXH3_mergeAccs(acc,
                              secret + XXH_SECRET_MERGEACCS_START,
                              (xxh_u64)state->totalLen * XXH_PRIME64_1);
    }
    /* totalLen <= XXH3_MIDSIZE_MAX: digesting a short input */
    if (state->useSeed)
        return XXH3_64bits_withSeed(state->buffer, (size_t)state->totalLen, state->seed);
    return XXH3_64bits_withSecret(state->buffer, (size_t)(state->totalLen),
                                  secret, state->secretLimit + XXH_STRIPE_LEN);
}



/* ==========================================
 * XXH3 128 bits (a.k.a XXH128)
 * ==========================================
 * XXH3's 128-bit variant has better mixing and strength than the 64-bit variant,
 * even without counting the significantly larger output size.
 *
 * For example, extra steps are taken to avoid the seed-dependent collisions
 * in 17-240 byte inputs (See XXH3_mix16B and XXH128_mix32B).
 *
 * This strength naturally comes at the cost of some speed, especially on short
 * lengths. Note that longer hashes are about as fast as the 64-bit version
 * due to it using only a slight modification of the 64-bit loop.
 *
 * XXH128 is also more oriented towards 64-bit machines. It is still extremely
 * fast for a _128-bit_ hash on 32-bit (it usually clears XXH64).
 */

XXH_FORCE_INLINE XXH128_hash_t
XXH3_len_1to3_128b(const xxh_u8* input, size_t len, const xxh_u8* secret, XXH64_hash_t seed)
{
    /* A doubled version of 1to3_64b with different constants. */
    XXH_ASSERT(input != NULL);
    XXH_ASSERT(1 <= len && len <= 3);
    XXH_ASSERT(secret != NULL);
    /*
     * len = 1: combinedl = { input[0], 0x01, input[0], input[0] }
     * len = 2: combinedl = { input[1], 0x02, input[0], input[1] }
     * len = 3: combinedl = { input[2], 0x03, input[0], input[1] }
     */
    {   xxh_u8 const c1 = input[0];
        xxh_u8 const c2 = input[len >> 1];
        xxh_u8 const c3 = input[len - 1];
        xxh_u32 const combinedl = ((xxh_u32)c1 <<16) | ((xxh_u32)c2 << 24)
                                | ((xxh_u32)c3 << 0) | ((xxh_u32)len << 8);
        xxh_u32 const combinedh = XXH_rotl32(XXH_swap32(combinedl), 13);
        xxh_u64 const bitflipl = (XXH_readLE32(secret) ^ XXH_readLE32(secret+4)) + seed;
        xxh_u64 const bitfliph = (XXH_readLE32(secret+8) ^ XXH_readLE32(secret+12)) - seed;
        xxh_u64 const keyed_lo = (xxh_u64)combinedl ^ bitflipl;
        xxh_u64 const keyed_hi = (xxh_u64)combinedh ^ bitfliph;
        XXH128_hash_t h128;
        h128.low64  = XXH64_avalanche(keyed_lo);
        h128.high64 = XXH64_avalanche(keyed_hi);
        return h128;
    }
}

XXH_FORCE_INLINE XXH128_hash_t
XXH3_len_4to8_128b(const xxh_u8* input, size_t len, const xxh_u8* secret, XXH64_hash_t seed)
{
    XXH_ASSERT(input != NULL);
    XXH_ASSERT(secret != NULL);
    XXH_ASSERT(4 <= len && len <= 8);
    seed ^= (xxh_u64)XXH_swap32((xxh_u32)seed) << 32;
    {   xxh_u32 const input_lo = XXH_readLE32(input);
        xxh_u32 const input_hi = XXH_readLE32(input + len - 4);
        xxh_u64 const input_64 = input_lo + ((xxh_u64)input_hi << 32);
        xxh_u64 const bitflip = (XXH_readLE64(secret+16) ^ XXH_readLE64(secret+24)) + seed;
        xxh_u64 const keyed = input_64 ^ bitflip;

        /* Shift len to the left to ensure it is even, this avoids even multiplies. */
        XXH128_hash_t m128 = XXH_mult64to128(keyed, XXH_PRIME64_1 + (len << 2));

        m128.high64 += (m128.low64 << 1);
        m128.low64  ^= (m128.high64 >> 3);

        m128.low64   = XXH_xorshift64(m128.low64, 35);
        m128.low64  *= 0x9FB21C651E98DF25ULL;
        m128.low64   = XXH_xorshift64(m128.low64, 28);
        m128.high64  = XXH3_avalanche(m128.high64);
        return m128;
    }
}

XXH_FORCE_INLINE XXH128_hash_t
XXH3_len_9to16_128b(const xxh_u8* input, size_t len, const xxh_u8* secret, XXH64_hash_t seed)
{
    XXH_ASSERT(input != NULL);
    XXH_ASSERT(secret != NULL);
    XXH_ASSERT(9 <= len && len <= 16);
    {   xxh_u64 const bitflipl = (XXH_readLE64(secret+32) ^ XXH_readLE64(secret+40)) - seed;
        xxh_u64 const bitfliph = (XXH_readLE64(secret+48) ^ XXH_readLE64(secret+56)) + seed;
        xxh_u64 const input_lo = XXH_readLE64(input);
        xxh_u64       input_hi = XXH_readLE64(input + len - 8);
        XXH128_hash_t m128 = XXH_mult64to128(input_lo ^ input_hi ^ bitflipl, XXH_PRIME64_1);
        /*
         * Put len in the middle of m128 to ensure that the length gets mixed to
         * both the low and high bits in the 128x64 multiply below.
         */
        m128.low64 += (xxh_u64)(len - 1) << 54;
        input_hi   ^= bitfliph;
        /*
         * Add the high 32 bits of input_hi to the high 32 bits of m128, then
         * add the long product of the low 32 bits of input_hi and XXH_PRIME32_2 to
         * the high 64 bits of m128.
         *
         * The best approach to this operation is different on 32-bit and 64-bit.
         */
        if (sizeof(void *) < sizeof(xxh_u64)) { /* 32-bit */
            /*
             * 32-bit optimized version, which is more readable.
             *
             * On 32-bit, it removes an ADC and delays a dependency between the two
             * halves of m128.high64, but it generates an extra mask on 64-bit.
             */
            m128.high64 += (input_hi & 0xFFFFFFFF00000000ULL) + XXH_mult32to64((xxh_u32)input_hi, XXH_PRIME32_2);
        } else {
            /*
             * 64-bit optimized (albeit more confusing) version.
             *
             * Uses some properties of addition and multiplication to remove the mask:
             *
             * Let:
             *    a = input_hi.lo = (input_hi & 0x00000000FFFFFFFF)
             *    b = input_hi.hi = (input_hi & 0xFFFFFFFF00000000)
             *    c = XXH_PRIME32_2
             *
             *    a + (b * c)
             * Inverse Property: x + y - x == y
             *    a + (b * (1 + c - 1))
             * Distributive Property: x * (y + z) == (x * y) + (x * z)
             *    a + (b * 1) + (b * (c - 1))
             * Identity Property: x * 1 == x
             *    a + b + (b * (c - 1))
             *
             * Substitute a, b, and c:
             *    input_hi.hi + input_hi.lo + ((xxh_u64)input_hi.lo * (XXH_PRIME32_2 - 1))
             *
             * Since input_hi.hi + input_hi.lo == input_hi, we get this:
             *    input_hi + ((xxh_u64)input_hi.lo * (XXH_PRIME32_2 - 1))
             */
            m128.high64 += input_hi + XXH_mult32to64((xxh_u32)input_hi, XXH_PRIME32_2 - 1);
        }
        /* m128 ^= XXH_swap64(m128 >> 64); */
        m128.low64  ^= XXH_swap64(m128.high64);

        {   /* 128x64 multiply: h128 = m128 * XXH_PRIME64_2; */
            XXH128_hash_t h128 = XXH_mult64to128(m128.low64, XXH_PRIME64_2);
            h128.high64 += m128.high64 * XXH_PRIME64_2;

            h128.low64   = XXH3_avalanche(h128.low64);
            h128.high64  = XXH3_avalanche(h128.high64);
            return h128;
    }   }
}

/*
 * Assumption: `secret` size is >= XXH3_SECRET_SIZE_MIN
 */
XXH_FORCE_INLINE XXH128_hash_t
XXH3_len_0to16_128b(const xxh_u8* input, size_t len, const xxh_u8* secret, XXH64_hash_t seed)
{
    XXH_ASSERT(len <= 16);
    {   if (len > 8) return XXH3_len_9to16_128b(input, len, secret, seed);
        if (len >= 4) return XXH3_len_4to8_128b(input, len, secret, seed);
        if (len) return XXH3_len_1to3_128b(input, len, secret, seed);
        {   XXH128_hash_t h128;
            xxh_u64 const bitflipl = XXH_readLE64(secret+64) ^ XXH_readLE64(secret+72);
            xxh_u64 const bitfliph = XXH_readLE64(secret+80) ^ XXH_readLE64(secret+88);
            h128.low64 = XXH64_avalanche(seed ^ bitflipl);
            h128.high64 = XXH64_avalanche( seed ^ bitfliph);
            return h128;
    }   }
}

/*
 * A bit slower than XXH3_mix16B, but handles multiply by zero better.
 */
XXH_FORCE_INLINE XXH128_hash_t
XXH128_mix32B(XXH128_hash_t acc, const xxh_u8* input_1, const xxh_u8* input_2,
              const xxh_u8* secret, XXH64_hash_t seed)
{
    acc.low64  += XXH3_mix16B (input_1, secret+0, seed);
    acc.low64  ^= XXH_readLE64(input_2) + XXH_readLE64(input_2 + 8);
    acc.high64 += XXH3_mix16B (input_2, secret+16, seed);
    acc.high64 ^= XXH_readLE64(input_1) + XXH_readLE64(input_1 + 8);
    return acc;
}


XXH_FORCE_INLINE XXH128_hash_t
XXH3_len_17to128_128b(const xxh_u8* XXH_RESTRICT input, size_t len,
                      const xxh_u8* XXH_RESTRICT secret, size_t secretSize,
                      XXH64_hash_t seed)
{
    XXH_ASSERT(secretSize >= XXH3_SECRET_SIZE_MIN); (void)secretSize;
    XXH_ASSERT(16 < len && len <= 128);

    {   XXH128_hash_t acc;
        acc.low64 = len * XXH_PRIME64_1;
        acc.high64 = 0;
        if (len > 32) {
            if (len > 64) {
                if (len > 96) {
                    acc = XXH128_mix32B(acc, input+48, input+len-64, secret+96, seed);
                }
                acc = XXH128_mix32B(acc, input+32, input+len-48, secret+64, seed);
            }
            acc = XXH128_mix32B(acc, input+16, input+len-32, secret+32, seed);
        }
        acc = XXH128_mix32B(acc, input, input+len-16, secret, seed);
        {   XXH128_hash_t h128;
            h128.low64  = acc.low64 + acc.high64;
            h128.high64 = (acc.low64    * XXH_PRIME64_1)
                        + (acc.high64   * XXH_PRIME64_4)
                        + ((len - seed) * XXH_PRIME64_2);
            h128.low64  = XXH3_avalanche(h128.low64);
            h128.high64 = (XXH64_hash_t)0 - XXH3_avalanche(h128.high64);
            return h128;
        }
    }
}

XXH_NO_INLINE XXH128_hash_t
XXH3_len_129to240_128b(const xxh_u8* XXH_RESTRICT input, size_t len,
                       const xxh_u8* XXH_RESTRICT secret, size_t secretSize,
                       XXH64_hash_t seed)
{
    XXH_ASSERT(secretSize >= XXH3_SECRET_SIZE_MIN); (void)secretSize;
    XXH_ASSERT(128 < len && len <= XXH3_MIDSIZE_MAX);

    {   XXH128_hash_t acc;
        int const nbRounds = (int)len / 32;
        int i;
        acc.low64 = len * XXH_PRIME64_1;
        acc.high64 = 0;
        for (i=0; i<4; i++) {
            acc = XXH128_mix32B(acc,
                                input  + (32 * i),
                                input  + (32 * i) + 16,
                                secret + (32 * i),
                                seed);
        }
        acc.low64 = XXH3_avalanche(acc.low64);
        acc.high64 = XXH3_avalanche(acc.high64);
        XXH_ASSERT(nbRounds >= 4);
        for (i=4 ; i < nbRounds; i++) {
            acc = XXH128_mix32B(acc,
                                input + (32 * i),
                                input + (32 * i) + 16,
                                secret + XXH3_MIDSIZE_STARTOFFSET + (32 * (i - 4)),
                                seed);
        }
        /* last bytes */
        acc = XXH128_mix32B(acc,
                            input + len - 16,
                            input + len - 32,
                            secret + XXH3_SECRET_SIZE_MIN - XXH3_MIDSIZE_LASTOFFSET - 16,
                            0ULL - seed);

        {   XXH128_hash_t h128;
            h128.low64  = acc.low64 + acc.high64;
            h128.high64 = (acc.low64    * XXH_PRIME64_1)
                        + (acc.high64   * XXH_PRIME64_4)
                        + ((len - seed) * XXH_PRIME64_2);
            h128.low64  = XXH3_avalanche(h128.low64);
            h128.high64 = (XXH64_hash_t)0 - XXH3_avalanche(h128.high64);
            return h128;
        }
    }
}

XXH_FORCE_INLINE XXH128_hash_t
XXH3_hashLong_128b_internal(const void* XXH_RESTRICT input, size_t len,
                            const xxh_u8* XXH_RESTRICT secret, size_t secretSize,
                            XXH3_f_accumulate_512 f_acc512,
                            XXH3_f_scrambleAcc f_scramble)
{
    XXH_ALIGN(XXH_ACC_ALIGN) xxh_u64 acc[XXH_ACC_NB] = XXH3_INIT_ACC;

    XXH3_hashLong_internal_loop(acc, (const xxh_u8*)input, len, secret, secretSize, f_acc512, f_scramble);

    /* converge into final hash */
    XXH_STATIC_ASSERT(sizeof(acc) == 64);
    XXH_ASSERT(secretSize >= sizeof(acc) + XXH_SECRET_MERGEACCS_START);
    {   XXH128_hash_t h128;
        h128.low64  = XXH3_mergeAccs(acc,
                                     secret + XXH_SECRET_MERGEACCS_START,
                                     (xxh_u64)len * XXH_PRIME64_1);
        h128.high64 = XXH3_mergeAccs(acc,
                                     secret + secretSize
                                            - sizeof(acc) - XXH_SECRET_MERGEACCS_START,
                                     ~((xxh_u64)len * XXH_PRIME64_2));
        return h128;
    }
}

/*
 * It's important for performance that XXH3_hashLong is not inlined.
 */
XXH_NO_INLINE XXH128_hash_t
XXH3_hashLong_128b_default(const void* XXH_RESTRICT input, size_t len,
                           XXH64_hash_t seed64,
                           const void* XXH_RESTRICT secret, size_t secretLen)
{
    (void)seed64; (void)secret; (void)secretLen;
    return XXH3_hashLong_128b_internal(input, len, XXH3_kSecret, sizeof(XXH3_kSecret),
                                       XXH3_accumulate_512, XXH3_scrambleAcc);
}

/*
 * It's important for performance to pass @secretLen (when it's static)
 * to the compiler, so that it can properly optimize the vectorized loop.
 */
XXH3_WITH_SECRET_INLINE XXH128_hash_t
XXH3_hashLong_128b_withSecret(const void* XXH_RESTRICT input, size_t len,
                              XXH64_hash_t seed64,
                              const void* XXH_RESTRICT secret, size_t secretLen)
{
    (void)seed64;
    return XXH3_hashLong_128b_internal(input, len, (const xxh_u8*)secret, secretLen,
                                       XXH3_accumulate_512, XXH3_scrambleAcc);
}

XXH_FORCE_INLINE XXH128_hash_t
XXH3_hashLong_128b_withSeed_internal(const void* XXH_RESTRICT input, size_t len,
                                XXH64_hash_t seed64,
                                XXH3_f_accumulate_512 f_acc512,
                                XXH3_f_scrambleAcc f_scramble,
                                XXH3_f_initCustomSecret f_initSec)
{
    if (seed64 == 0)
        return XXH3_hashLong_128b_internal(input, len,
                                           XXH3_kSecret, sizeof(XXH3_kSecret),
                                           f_acc512, f_scramble);
    {   XXH_ALIGN(XXH_SEC_ALIGN) xxh_u8 secret[XXH_SECRET_DEFAULT_SIZE];
        f_initSec(secret, seed64);
        return XXH3_hashLong_128b_internal(input, len, (const xxh_u8*)secret, sizeof(secret),
                                           f_acc512, f_scramble);
    }
}

/*
 * It's important for performance that XXH3_hashLong is not inlined.
 */
XXH_NO_INLINE XXH128_hash_t
XXH3_hashLong_128b_withSeed(const void* input, size_t len,
                            XXH64_hash_t seed64, const void* XXH_RESTRICT secret, size_t secretLen)
{
    (void)secret; (void)secretLen;
    return XXH3_hashLong_128b_withSeed_internal(input, len, seed64,
                XXH3_accumulate_512, XXH3_scrambleAcc, XXH3_initCustomSecret);
}

typedef XXH128_hash_t (*XXH3_hashLong128_f)(const void* XXH_RESTRICT, size_t,
                                            XXH64_hash_t, const void* XXH_RESTRICT, size_t);

XXH_FORCE_INLINE XXH128_hash_t
XXH3_128bits_internal(const void* input, size_t len,
                      XXH64_hash_t seed64, const void* XXH_RESTRICT secret, size_t secretLen,
                      XXH3_hashLong128_f f_hl128)
{
    XXH_ASSERT(secretLen >= XXH3_SECRET_SIZE_MIN);
    /*
     * If an action is to be taken if `secret` conditions are not respected,
     * it should be done here.
     * For now, it's a contract pre-condition.
     * Adding a check and a branch here would cost performance at every hash.
     */
    if (len <= 16)
        return XXH3_len_0to16_128b((const xxh_u8*)input, len, (const xxh_u8*)secret, seed64);
    if (len <= 128)
        return XXH3_len_17to128_128b((const xxh_u8*)input, len, (const xxh_u8*)secret, secretLen, seed64);
    if (len <= XXH3_MIDSIZE_MAX)
        return XXH3_len_129to240_128b((const xxh_u8*)input, len, (const xxh_u8*)secret, secretLen, seed64);
    return f_hl128(input, len, seed64, secret, secretLen);
}


/* ===   Public XXH128 API   === */

/*! @ingroup xxh3_family */
XXH_PUBLIC_API XXH128_hash_t XXH3_128bits(const void* input, size_t len)
{
    return XXH3_128bits_internal(input, len, 0,
                                 XXH3_kSecret, sizeof(XXH3_kSecret),
                                 XXH3_hashLong_128b_default);
}

/*! @ingroup xxh3_family */
XXH_PUBLIC_API XXH128_hash_t
XXH3_128bits_withSecret(const void* input, size_t len, const void* secret, size_t secretSize)
{
    return XXH3_128bits_internal(input, len, 0,
                                 (const xxh_u8*)secret, secretSize,
                                 XXH3_hashLong_128b_withSecret);
}

/*! @ingroup xxh3_family */
XXH_PUBLIC_API XXH128_hash_t
XXH3_128bits_withSeed(const void* input, size_t len, XXH64_hash_t seed)
{
    return XXH3_128bits_internal(input, len, seed,
                                 XXH3_kSecret, sizeof(XXH3_kSecret),
                                 XXH3_hashLong_128b_withSeed);
}

/*! @ingroup xxh3_family */
XXH_PUBLIC_API XXH128_hash_t
XXH3_128bits_withSecretandSeed(const void* input, size_t len, const void* secret, size_t secretSize, XXH64_hash_t seed)
{
    if (len <= XXH3_MIDSIZE_MAX)
        return XXH3_128bits_internal(input, len, seed, XXH3_kSecret, sizeof(XXH3_kSecret), NULL);
    return XXH3_hashLong_128b_withSecret(input, len, seed, secret, secretSize);
}

/*! @ingroup xxh3_family */
XXH_PUBLIC_API XXH128_hash_t
XXH128(const void* input, size_t len, XXH64_hash_t seed)
{
    return XXH3_128bits_withSeed(input, len, seed);
}


/* ===   XXH3 128-bit streaming   === */

/*
 * All initialization and update functions are identical to 64-bit streaming variant.
 * The only difference is the finalization routine.
 */

/*! @ingroup xxh3_family */
XXH_PUBLIC_API XXH_errorcode
XXH3_128bits_reset(XXH3_state_t* statePtr)
{
    return XXH3_64bits_reset(statePtr);
}

/*! @ingroup xxh3_family */
XXH_PUBLIC_API XXH_errorcode
XXH3_128bits_reset_withSecret(XXH3_state_t* statePtr, const void* secret, size_t secretSize)
{
    return XXH3_64bits_reset_withSecret(statePtr, secret, secretSize);
}

/*! @ingroup xxh3_family */
XXH_PUBLIC_API XXH_errorcode
XXH3_128bits_reset_withSeed(XXH3_state_t* statePtr, XXH64_hash_t seed)
{
    return XXH3_64bits_reset_withSeed(statePtr, seed);
}

/*! @ingroup xxh3_family */
XXH_PUBLIC_API XXH_errorcode
XXH3_128bits_reset_withSecretandSeed(XXH3_state_t* statePtr, const void* secret, size_t secretSize, XXH64_hash_t seed)
{
    return XXH3_64bits_reset_withSecretandSeed(statePtr, secret, secretSize, seed);
}

/*! @ingroup xxh3_family */
XXH_PUBLIC_API XXH_errorcode
XXH3_128bits_update(XXH3_state_t* state, const void* input, size_t len)
{
    return XXH3_update(state, (const xxh_u8*)input, len,
                       XXH3_accumulate_512, XXH3_scrambleAcc);
}

/*! @ingroup xxh3_family */
XXH_PUBLIC_API XXH128_hash_t XXH3_128bits_digest (const XXH3_state_t* state)
{
    const unsigned char* const secret = (state->extSecret == NULL) ? state->customSecret : state->extSecret;
    if (state->totalLen > XXH3_MIDSIZE_MAX) {
        XXH_ALIGN(XXH_ACC_ALIGN) XXH64_hash_t acc[XXH_ACC_NB];
        XXH3_digest_long(acc, state, secret);
        XXH_ASSERT(state->secretLimit + XXH_STRIPE_LEN >= sizeof(acc) + XXH_SECRET_MERGEACCS_START);
        {   XXH128_hash_t h128;
            h128.low64  = XXH3_mergeAccs(acc,
                                         secret + XXH_SECRET_MERGEACCS_START,
                                         (xxh_u64)state->totalLen * XXH_PRIME64_1);
            h128.high64 = XXH3_mergeAccs(acc,
                                         secret + state->secretLimit + XXH_STRIPE_LEN
                                                - sizeof(acc) - XXH_SECRET_MERGEACCS_START,
                                         ~((xxh_u64)state->totalLen * XXH_PRIME64_2));
            return h128;
        }
    }
    /* len <= XXH3_MIDSIZE_MAX : short code */
    if (state->seed)
        return XXH3_128bits_withSeed(state->buffer, (size_t)state->totalLen, state->seed);
    return XXH3_128bits_withSecret(state->buffer, (size_t)(state->totalLen),
                                   secret, state->secretLimit + XXH_STRIPE_LEN);
}

/* 128-bit utility functions */

#include <string.h>   /* memcmp, memcpy */

/* return : 1 is equal, 0 if different */
/*! @ingroup xxh3_family */
XXH_PUBLIC_API int XXH128_isEqual(XXH128_hash_t h1, XXH128_hash_t h2)
{
    /* note : XXH128_hash_t is compact, it has no padding byte */
    return !(memcmp(&h1, &h2, sizeof(h1)));
}

/* This prototype is compatible with stdlib's qsort().
 * return : >0 if *h128_1  > *h128_2
 *          <0 if *h128_1  < *h128_2
 *          =0 if *h128_1 == *h128_2  */
/*! @ingroup xxh3_family */
XXH_PUBLIC_API int XXH128_cmp(const void* h128_1, const void* h128_2)
{
    XXH128_hash_t const h1 = *(const XXH128_hash_t*)h128_1;
    XXH128_hash_t const h2 = *(const XXH128_hash_t*)h128_2;
    int const hcmp = (h1.high64 > h2.high64) - (h2.high64 > h1.high64);
    /* note : bets that, in most cases, hash values are different */
    if (hcmp) return hcmp;
    return (h1.low64 > h2.low64) - (h2.low64 > h1.low64);
}


/*======   Canonical representation   ======*/
/*! @ingroup xxh3_family */
static zend_always_inline void
XXH128_canonicalFromHash(XXH128_canonical_t* dst, XXH128_hash_t hash)
{
    XXH_STATIC_ASSERT(sizeof(XXH128_canonical_t) == sizeof(XXH128_hash_t));
    if (XXH_CPU_LITTLE_ENDIAN) {
        hash.high64 = XXH_swap64(hash.high64);
        hash.low64  = XXH_swap64(hash.low64);
    }
    XXH_memcpy(dst, &hash.high64, sizeof(hash.high64));
    XXH_memcpy((char*)dst + sizeof(hash.high64), &hash.low64, sizeof(hash.low64));
}

/*! @ingroup xxh3_family */
XXH_PUBLIC_API XXH128_hash_t
XXH128_hashFromCanonical(const XXH128_canonical_t* src)
{
    XXH128_hash_t h;
    h.high64 = XXH_readBE64(src);
    h.low64  = XXH_readBE64(src->digest + 8);
    return h;
}



/* ==========================================
 * Secret generators
 * ==========================================
 */
#define XXH_MIN(x, y) (((x) > (y)) ? (y) : (x))

static void XXH3_combine16(void* dst, XXH128_hash_t h128)
{
    XXH_writeLE64( dst, XXH_readLE64(dst) ^ h128.low64 );
    XXH_writeLE64( (char*)dst+8, XXH_readLE64((char*)dst+8) ^ h128.high64 );
}

/*! @ingroup xxh3_family */
XXH_PUBLIC_API XXH_errorcode
XXH3_generateSecret(void* secretBuffer, size_t secretSize, const void* customSeed, size_t customSeedSize)
{
    XXH_ASSERT(secretBuffer != NULL);
    if (secretBuffer == NULL) return XXH_ERROR;
    XXH_ASSERT(secretSize >= XXH3_SECRET_SIZE_MIN);
    if (secretSize < XXH3_SECRET_SIZE_MIN) return XXH_ERROR;
    if (customSeedSize == 0) {
        customSeed = XXH3_kSecret;
        customSeedSize = XXH_SECRET_DEFAULT_SIZE;
    }
    XXH_ASSERT(customSeed != NULL);
    if (customSeed == NULL) return XXH_ERROR;

    /* Fill secretBuffer with a copy of customSeed - repeat as needed */
    {   size_t pos = 0;
        while (pos < secretSize) {
            size_t const toCopy = XXH_MIN((secretSize - pos), customSeedSize);
            memcpy((char*)secretBuffer + pos, customSeed, toCopy);
            pos += toCopy;
    }   }

    {   size_t const nbSeg16 = secretSize / 16;
        size_t n;
        XXH128_canonical_t scrambler;
        XXH128_canonicalFromHash(&scrambler, XXH128(customSeed, customSeedSize, 0));
        for (n=0; n<nbSeg16; n++) {
            XXH128_hash_t const h128 = XXH128(&scrambler, sizeof(scrambler), n);
            XXH3_combine16((char*)secretBuffer + n*16, h128);
        }
        /* last segment */
        XXH3_combine16((char*)secretBuffer + secretSize - 16, XXH128_hashFromCanonical(&scrambler));
    }
    return XXH_OK;
}

/*! @ingroup xxh3_family */
XXH_PUBLIC_API void
XXH3_generateSecret_fromSeed(void* secretBuffer, XXH64_hash_t seed)
{
    XXH_ALIGN(XXH_SEC_ALIGN) xxh_u8 secret[XXH_SECRET_DEFAULT_SIZE];
    XXH3_initCustomSecret(secret, seed);
    XXH_ASSERT(secretBuffer != NULL);
    memcpy(secretBuffer, secret, XXH_SECRET_DEFAULT_SIZE);
}



/* Pop our optimization override from above */
#if XXH_VECTOR == XXH_AVX2 /* AVX2 */ \
  && defined(__GNUC__) && !defined(__clang__) /* GCC, not Clang */ \
  && defined(__OPTIMIZE__) && !defined(__OPTIMIZE_SIZE__) /* respect -O0 and -Os */
#  pragma GCC pop_options
#endif

#endif  /* XXH_NO_LONG_LONG */

#endif  /* XXH_NO_XXH3 */

/*!
 * @}
 */
#endif  /* XXH_IMPLEMENTATION */


#if defined (__cplusplus)
}
#endif
ext/hash/php_hash_crc32.h000064400000003517151730542410011236 0ustar00/*
   +----------------------------------------------------------------------+
   | Copyright (c) The PHP Group                                          |
   +----------------------------------------------------------------------+
   | This source file is subject to version 3.01 of the PHP license,      |
   | that is bundled with this package in the file LICENSE, and is        |
   | available through the world-wide-web at the following url:           |
   | https://www.php.net/license/3_01.txt                                 |
   | If you did not receive a copy of the PHP license and are unable to   |
   | obtain it through the world-wide-web, please send a note to          |
   | license@php.net so we can mail you a copy immediately.               |
   +----------------------------------------------------------------------+
   | Author: Michael Wallner <mike@php.net>                               |
   +----------------------------------------------------------------------+
*/

#ifndef PHP_HASH_CRC32_H
#define PHP_HASH_CRC32_H

#include "ext/standard/basic_functions.h"

typedef struct {
	uint32_t state;
} PHP_CRC32_CTX;
#define PHP_CRC32_SPEC "l."

PHP_HASH_API void PHP_CRC32Init(PHP_CRC32_CTX *context, ZEND_ATTRIBUTE_UNUSED HashTable *args);
PHP_HASH_API void PHP_CRC32Update(PHP_CRC32_CTX *context, const unsigned char *input, size_t len);
PHP_HASH_API void PHP_CRC32BUpdate(PHP_CRC32_CTX *context, const unsigned char *input, size_t len);
PHP_HASH_API void PHP_CRC32CUpdate(PHP_CRC32_CTX *context, const unsigned char *input, size_t len);
PHP_HASH_API void PHP_CRC32LEFinal(unsigned char digest[4], PHP_CRC32_CTX *context);
PHP_HASH_API void PHP_CRC32BEFinal(unsigned char digest[4], PHP_CRC32_CTX *context);
PHP_HASH_API zend_result PHP_CRC32Copy(const php_hash_ops *ops, const PHP_CRC32_CTX *orig_context, PHP_CRC32_CTX *copy_context);

#endif
ext/hash/php_hash_joaat.h000064400000002677151730542420011427 0ustar00/*
  +----------------------------------------------------------------------+
  | Copyright (c) The PHP Group                                          |
  +----------------------------------------------------------------------+
  | This source file is subject to version 3.01 of the PHP license,      |
  | that is bundled with this package in the file LICENSE, and is        |
  | available through the world-wide-web at the following url:           |
  | https://www.php.net/license/3_01.txt                                 |
  | If you did not receive a copy of the PHP license and are unable to   |
  | obtain it through the world-wide-web, please send a note to          |
  | license@php.net so we can mail you a copy immediately.               |
  +----------------------------------------------------------------------+
  | Author: Martin Jansen <mj@php.net>                                   |
  +----------------------------------------------------------------------+
*/

#ifndef PHP_HASH_JOAAT_H
#define PHP_HASH_JOAAT_H

typedef struct {
	uint32_t state;
} PHP_JOAAT_CTX;
#define PHP_JOAAT_SPEC "l."

PHP_HASH_API void PHP_JOAATInit(PHP_JOAAT_CTX *context, ZEND_ATTRIBUTE_UNUSED HashTable *args);
PHP_HASH_API void PHP_JOAATUpdate(PHP_JOAAT_CTX *context, const unsigned char *input, size_t inputLen);
PHP_HASH_API void PHP_JOAATFinal(unsigned char digest[4], PHP_JOAAT_CTX * context);

static uint32_t joaat_buf(void *buf, size_t len, uint32_t hval);

#endif
ext/hash/php_hash_md.h000064400000004030151730542420010712 0ustar00/*
   +----------------------------------------------------------------------+
   | Copyright (c) The PHP Group                                          |
   +----------------------------------------------------------------------+
   | This source file is subject to version 3.01 of the PHP license,      |
   | that is bundled with this package in the file LICENSE, and is        |
   | available through the world-wide-web at the following url:           |
   | https://www.php.net/license/3_01.txt                                 |
   | If you did not receive a copy of the PHP license and are unable to   |
   | obtain it through the world-wide-web, please send a note to          |
   | license@php.net so we can mail you a copy immediately.               |
   +----------------------------------------------------------------------+
   | Original Author: Rasmus Lerdorf <rasmus@lerdorf.on.ca>               |
   | Modified for pHASH by: Sara Golemon <pollita@php.net>
   +----------------------------------------------------------------------+
*/

#ifndef PHP_HASH_MD_H
#define PHP_HASH_MD_H

#include "ext/standard/md5.h"

/* MD4 context */
typedef struct {
	uint32_t state[4];
	uint32_t count[2];
	unsigned char buffer[64];
} PHP_MD4_CTX;
#define PHP_MD4_SPEC "l4l2b64."

#define PHP_MD4Init(ctx) PHP_MD4InitArgs(ctx, NULL)
PHP_HASH_API void PHP_MD4InitArgs(PHP_MD4_CTX *, ZEND_ATTRIBUTE_UNUSED HashTable *);
PHP_HASH_API void PHP_MD4Update(PHP_MD4_CTX *context, const unsigned char *, size_t);
PHP_HASH_API void PHP_MD4Final(unsigned char[16], PHP_MD4_CTX *);

/* MD2 context */
typedef struct {
	unsigned char state[48];
	unsigned char checksum[16];
	unsigned char buffer[16];
	unsigned char in_buffer;
} PHP_MD2_CTX;
#define PHP_MD2_SPEC "b48b16b16b."

#define PHP_MD2Init(ctx) PHP_MD2InitArgs(ctx, NULL)
PHP_HASH_API void PHP_MD2InitArgs(PHP_MD2_CTX *context, ZEND_ATTRIBUTE_UNUSED HashTable *args);
PHP_HASH_API void PHP_MD2Update(PHP_MD2_CTX *context, const unsigned char *, size_t);
PHP_HASH_API void PHP_MD2Final(unsigned char[16], PHP_MD2_CTX *);

#endif
ext/hash/php_hash_ripemd.h000064400000006003151730542430011575 0ustar00/*
   +----------------------------------------------------------------------+
   | Copyright (c) The PHP Group                                          |
   +----------------------------------------------------------------------+
   | This source file is subject to version 3.01 of the PHP license,      |
   | that is bundled with this package in the file LICENSE, and is        |
   | available through the world-wide-web at the following url:           |
   | https://www.php.net/license/3_01.txt                                 |
   | If you did not receive a copy of the PHP license and are unable to   |
   | obtain it through the world-wide-web, please send a note to          |
   | license@php.net so we can mail you a copy immediately.               |
   +----------------------------------------------------------------------+
   | Author: Sara Golemon <pollita@php.net>                               |
   +----------------------------------------------------------------------+
*/

#ifndef PHP_HASH_RIPEMD_H
#define PHP_HASH_RIPEMD_H

/* RIPEMD context. */
typedef struct {
	uint32_t state[4];		/* state (ABCD) */
	uint32_t count[2];		/* number of bits, modulo 2^64 (lsb first) */
	unsigned char buffer[64];	/* input buffer */
} PHP_RIPEMD128_CTX;
#define PHP_RIPEMD128_SPEC "l4l2b64."

typedef struct {
	uint32_t state[5];		/* state (ABCD) */
	uint32_t count[2];		/* number of bits, modulo 2^64 (lsb first) */
	unsigned char buffer[64];	/* input buffer */
} PHP_RIPEMD160_CTX;
#define PHP_RIPEMD160_SPEC "l5l2b64."

typedef struct {
	uint32_t state[8];		/* state (ABCD) */
	uint32_t count[2];		/* number of bits, modulo 2^64 (lsb first) */
	unsigned char buffer[64];	/* input buffer */
} PHP_RIPEMD256_CTX;
#define PHP_RIPEMD256_SPEC "l8l2b64."

typedef struct {
	uint32_t state[10];		/* state (ABCD) */
	uint32_t count[2];		/* number of bits, modulo 2^64 (lsb first) */
	unsigned char buffer[64];	/* input buffer */
} PHP_RIPEMD320_CTX;
#define PHP_RIPEMD320_SPEC "l10l2b64."

PHP_HASH_API void PHP_RIPEMD128Init(PHP_RIPEMD128_CTX *, ZEND_ATTRIBUTE_UNUSED HashTable *);
PHP_HASH_API void PHP_RIPEMD128Update(PHP_RIPEMD128_CTX *, const unsigned char *, size_t);
PHP_HASH_API void PHP_RIPEMD128Final(unsigned char[16], PHP_RIPEMD128_CTX *);

PHP_HASH_API void PHP_RIPEMD160Init(PHP_RIPEMD160_CTX *, ZEND_ATTRIBUTE_UNUSED HashTable *);
PHP_HASH_API void PHP_RIPEMD160Update(PHP_RIPEMD160_CTX *, const unsigned char *, size_t);
PHP_HASH_API void PHP_RIPEMD160Final(unsigned char[20], PHP_RIPEMD160_CTX *);

PHP_HASH_API void PHP_RIPEMD256Init(PHP_RIPEMD256_CTX *, ZEND_ATTRIBUTE_UNUSED HashTable *);
PHP_HASH_API void PHP_RIPEMD256Update(PHP_RIPEMD256_CTX *, const unsigned char *, size_t);
PHP_HASH_API void PHP_RIPEMD256Final(unsigned char[32], PHP_RIPEMD256_CTX *);

PHP_HASH_API void PHP_RIPEMD320Init(PHP_RIPEMD320_CTX *, ZEND_ATTRIBUTE_UNUSED HashTable *);
PHP_HASH_API void PHP_RIPEMD320Update(PHP_RIPEMD320_CTX *, const unsigned char *, size_t);
PHP_HASH_API void PHP_RIPEMD320Final(unsigned char[40], PHP_RIPEMD320_CTX *);

#endif /* PHP_HASH_RIPEMD_H */
ext/hash/php_hash_adler32.h000064400000003037151730542430011555 0ustar00/*
   +----------------------------------------------------------------------+
   | Copyright (c) The PHP Group                                          |
   +----------------------------------------------------------------------+
   | This source file is subject to version 3.01 of the PHP license,      |
   | that is bundled with this package in the file LICENSE, and is        |
   | available through the world-wide-web at the following url:           |
   | https://www.php.net/license/3_01.txt                                 |
   | If you did not receive a copy of the PHP license and are unable to   |
   | obtain it through the world-wide-web, please send a note to          |
   | license@php.net so we can mail you a copy immediately.               |
   +----------------------------------------------------------------------+
   | Author: Michael Wallner <mike@php.net>                               |
   +----------------------------------------------------------------------+
*/

#ifndef PHP_HASH_ADLER32_H
#define PHP_HASH_ADLER32_H

typedef struct {
	uint32_t state;
} PHP_ADLER32_CTX;
#define PHP_ADLER32_SPEC "l."

PHP_HASH_API void PHP_ADLER32Init(PHP_ADLER32_CTX *context, ZEND_ATTRIBUTE_UNUSED HashTable *args);
PHP_HASH_API void PHP_ADLER32Update(PHP_ADLER32_CTX *context, const unsigned char *input, size_t len);
PHP_HASH_API void PHP_ADLER32Final(unsigned char digest[4], PHP_ADLER32_CTX *context);
PHP_HASH_API zend_result PHP_ADLER32Copy(const php_hash_ops *ops, const PHP_ADLER32_CTX *orig_context, PHP_ADLER32_CTX *copy_context);

#endif
ext/hash/php_hash_fnv.h000064400000005255151730542430011116 0ustar00/*
  +----------------------------------------------------------------------+
  | Copyright (c) The PHP Group                                          |
  +----------------------------------------------------------------------+
  | This source file is subject to version 3.01 of the PHP license,      |
  | that is bundled with this package in the file LICENSE, and is        |
  | available through the world-wide-web at the following url:           |
  | https://www.php.net/license/3_01.txt                                 |
  | If you did not receive a copy of the PHP license and are unable to   |
  | obtain it through the world-wide-web, please send a note to          |
  | license@php.net so we can mail you a copy immediately.               |
  +----------------------------------------------------------------------+
  | Author: Michael Maclean <mgdm@php.net>                               |
  +----------------------------------------------------------------------+
*/

#ifndef PHP_HASH_FNV_H
#define PHP_HASH_FNV_H

#define PHP_FNV1_32_INIT ((uint32_t)0x811c9dc5)

#define PHP_FNV_32_PRIME ((uint32_t)0x01000193)

#define PHP_FNV1_64_INIT ((uint64_t)0xcbf29ce484222325ULL)

#define PHP_FNV_64_PRIME ((uint64_t)0x100000001b3ULL)


/*
 * hash types
 */
enum php_fnv_type {
	PHP_FNV_NONE  = 0,	/* invalid FNV hash type */
	PHP_FNV0_32   = 1,	/* FNV-0 32 bit hash */
	PHP_FNV1_32   = 2,	/* FNV-1 32 bit hash */
	PHP_FNV1a_32  = 3,	/* FNV-1a 32 bit hash */
	PHP_FNV0_64   = 4,	/* FNV-0 64 bit hash */
	PHP_FNV1_64   = 5,	/* FNV-1 64 bit hash */
	PHP_FNV1a_64  = 6,	/* FNV-1a 64 bit hash */
};

typedef struct {
	uint32_t state;
} PHP_FNV132_CTX;
#define PHP_FNV132_SPEC "l."

typedef struct {
	uint64_t state;
} PHP_FNV164_CTX;
#define PHP_FNV164_SPEC "q."


PHP_HASH_API void PHP_FNV132Init(PHP_FNV132_CTX *context, ZEND_ATTRIBUTE_UNUSED HashTable *args);
PHP_HASH_API void PHP_FNV132Update(PHP_FNV132_CTX *context, const unsigned char *input, size_t inputLen);
PHP_HASH_API void PHP_FNV1a32Update(PHP_FNV132_CTX *context, const unsigned char *input, size_t inputLen);
PHP_HASH_API void PHP_FNV132Final(unsigned char digest[4], PHP_FNV132_CTX * context);

PHP_HASH_API void PHP_FNV164Init(PHP_FNV164_CTX *context, ZEND_ATTRIBUTE_UNUSED HashTable *args);
PHP_HASH_API void PHP_FNV164Update(PHP_FNV164_CTX *context, const unsigned char *input, size_t inputLen);
PHP_HASH_API void PHP_FNV1a64Update(PHP_FNV164_CTX *context, const unsigned char *input, size_t inputLen);
PHP_HASH_API void PHP_FNV164Final(unsigned char digest[8], PHP_FNV164_CTX * context);

static uint32_t fnv_32_buf(void *buf, size_t len, uint32_t hval, int alternate);
static uint64_t fnv_64_buf(void *buf, size_t len, uint64_t hval, int alternate);

#endif
ext/hash/php_hash_whirlpool.h000064400000003014151730542440012334 0ustar00/*
   +----------------------------------------------------------------------+
   | Copyright (c) The PHP Group                                          |
   +----------------------------------------------------------------------+
   | This source file is subject to version 3.01 of the PHP license,      |
   | that is bundled with this package in the file LICENSE, and is        |
   | available through the world-wide-web at the following url:           |
   | https://www.php.net/license/3_01.txt                                 |
   | If you did not receive a copy of the PHP license and are unable to   |
   | obtain it through the world-wide-web, please send a note to          |
   | license@php.net so we can mail you a copy immediately.               |
   +----------------------------------------------------------------------+
   | Author: Michael Wallner <mike@php.net>                               |
   +----------------------------------------------------------------------+
*/

#ifndef PHP_HASH_WHIRLPOOL_H
#define PHP_HASH_WHIRLPOOL_H

/* WHIRLPOOL context */
typedef struct {
	uint64_t state[8];
	unsigned char bitlength[32];
	struct {
		int pos;
		int bits;
		unsigned char data[64];
	} buffer;
} PHP_WHIRLPOOL_CTX;
#define PHP_WHIRLPOOL_SPEC "q8b32iib64."

PHP_HASH_API void PHP_WHIRLPOOLInit(PHP_WHIRLPOOL_CTX *, ZEND_ATTRIBUTE_UNUSED HashTable *);
PHP_HASH_API void PHP_WHIRLPOOLUpdate(PHP_WHIRLPOOL_CTX *, const unsigned char *, size_t);
PHP_HASH_API void PHP_WHIRLPOOLFinal(unsigned char[64], PHP_WHIRLPOOL_CTX *);

#endif
ext/hash/php_hash.h000064400000015460151730542440010245 0ustar00/*
  +----------------------------------------------------------------------+
  | Copyright (c) The PHP Group                                          |
  +----------------------------------------------------------------------+
  | This source file is subject to version 3.01 of the PHP license,      |
  | that is bundled with this package in the file LICENSE, and is        |
  | available through the world-wide-web at the following url:           |
  | https://www.php.net/license/3_01.txt                                 |
  | If you did not receive a copy of the PHP license and are unable to   |
  | obtain it through the world-wide-web, please send a note to          |
  | license@php.net so we can mail you a copy immediately.               |
  +----------------------------------------------------------------------+
  | Author: Sara Golemon <pollita@php.net>                               |
  +----------------------------------------------------------------------+
*/

#ifndef PHP_HASH_H
#define PHP_HASH_H

#include "php.h"

#define PHP_HASH_EXTNAME	"hash"
#define PHP_HASH_VERSION	PHP_VERSION
#define PHP_MHASH_VERSION	PHP_VERSION

#define PHP_HASH_HMAC		0x0001

#define PHP_HASH_SERIALIZE_MAGIC_SPEC          2

#define L64 INT64_C

typedef enum {
    HASH_SPEC_SUCCESS = 0,
    HASH_SPEC_FAILURE = -1,
    WRONG_CONTEXT_SIZE = -999,
    BYTE_OFFSET_POS_ERROR = -1000,
    CONTEXT_VALIDATION_FAILURE = -2000,
} hash_spec_result;

typedef struct _php_hashcontext_object php_hashcontext_object;

typedef void (*php_hash_init_func_t)(void *context, HashTable *args);
typedef void (*php_hash_update_func_t)(void *context, const unsigned char *buf, size_t count);
typedef void (*php_hash_final_func_t)(unsigned char *digest, void *context);
typedef zend_result (*php_hash_copy_func_t)(const void *ops, const void *orig_context, void *dest_context);
typedef hash_spec_result (*php_hash_serialize_func_t)(const php_hashcontext_object *hash, zend_long *magic, zval *zv);
typedef hash_spec_result (*php_hash_unserialize_func_t)(php_hashcontext_object *hash, zend_long magic, const zval *zv);

typedef struct _php_hash_ops {
	const char *algo;
	php_hash_init_func_t hash_init;
	php_hash_update_func_t hash_update;
	php_hash_final_func_t hash_final;
	php_hash_copy_func_t hash_copy;
	php_hash_serialize_func_t hash_serialize;
	php_hash_unserialize_func_t hash_unserialize;
	const char *serialize_spec;

	size_t digest_size;
	size_t block_size;
	size_t context_size;
	unsigned is_crypto: 1;
} php_hash_ops;

struct _php_hashcontext_object {
	const php_hash_ops *ops;
	void *context;

	zend_long options;
	unsigned char *key;

	zend_object std;
};

static inline php_hashcontext_object *php_hashcontext_from_object(zend_object *obj) {
	return ((php_hashcontext_object*)(obj + 1)) - 1;
}

extern const php_hash_ops php_hash_md2_ops;
extern const php_hash_ops php_hash_md4_ops;
extern const php_hash_ops php_hash_md5_ops;
extern const php_hash_ops php_hash_sha1_ops;
extern const php_hash_ops php_hash_sha224_ops;
extern const php_hash_ops php_hash_sha256_ops;
extern const php_hash_ops php_hash_sha384_ops;
extern const php_hash_ops php_hash_sha512_ops;
extern const php_hash_ops php_hash_sha512_256_ops;
extern const php_hash_ops php_hash_sha512_224_ops;
extern const php_hash_ops php_hash_sha3_224_ops;
extern const php_hash_ops php_hash_sha3_256_ops;
extern const php_hash_ops php_hash_sha3_384_ops;
extern const php_hash_ops php_hash_sha3_512_ops;
extern const php_hash_ops php_hash_ripemd128_ops;
extern const php_hash_ops php_hash_ripemd160_ops;
extern const php_hash_ops php_hash_ripemd256_ops;
extern const php_hash_ops php_hash_ripemd320_ops;
extern const php_hash_ops php_hash_whirlpool_ops;
extern const php_hash_ops php_hash_3tiger128_ops;
extern const php_hash_ops php_hash_3tiger160_ops;
extern const php_hash_ops php_hash_3tiger192_ops;
extern const php_hash_ops php_hash_4tiger128_ops;
extern const php_hash_ops php_hash_4tiger160_ops;
extern const php_hash_ops php_hash_4tiger192_ops;
extern const php_hash_ops php_hash_snefru_ops;
extern const php_hash_ops php_hash_gost_ops;
extern const php_hash_ops php_hash_gost_crypto_ops;
extern const php_hash_ops php_hash_adler32_ops;
extern const php_hash_ops php_hash_crc32_ops;
extern const php_hash_ops php_hash_crc32b_ops;
extern const php_hash_ops php_hash_crc32c_ops;
extern const php_hash_ops php_hash_fnv132_ops;
extern const php_hash_ops php_hash_fnv1a32_ops;
extern const php_hash_ops php_hash_fnv164_ops;
extern const php_hash_ops php_hash_fnv1a64_ops;
extern const php_hash_ops php_hash_joaat_ops;
extern const php_hash_ops php_hash_murmur3a_ops;
extern const php_hash_ops php_hash_murmur3c_ops;
extern const php_hash_ops php_hash_murmur3f_ops;
extern const php_hash_ops php_hash_xxh32_ops;
extern const php_hash_ops php_hash_xxh64_ops;
extern const php_hash_ops php_hash_xxh3_64_ops;
extern const php_hash_ops php_hash_xxh3_128_ops;

#define PHP_HASH_HAVAL_OPS(p,b)	extern const php_hash_ops php_hash_##p##haval##b##_ops;

PHP_HASH_HAVAL_OPS(3,128)
PHP_HASH_HAVAL_OPS(3,160)
PHP_HASH_HAVAL_OPS(3,192)
PHP_HASH_HAVAL_OPS(3,224)
PHP_HASH_HAVAL_OPS(3,256)

PHP_HASH_HAVAL_OPS(4,128)
PHP_HASH_HAVAL_OPS(4,160)
PHP_HASH_HAVAL_OPS(4,192)
PHP_HASH_HAVAL_OPS(4,224)
PHP_HASH_HAVAL_OPS(4,256)

PHP_HASH_HAVAL_OPS(5,128)
PHP_HASH_HAVAL_OPS(5,160)
PHP_HASH_HAVAL_OPS(5,192)
PHP_HASH_HAVAL_OPS(5,224)
PHP_HASH_HAVAL_OPS(5,256)

extern zend_module_entry hash_module_entry;
#define phpext_hash_ptr &hash_module_entry

#ifdef PHP_WIN32
#	define PHP_HASH_API __declspec(dllexport)
#elif defined(__GNUC__) && __GNUC__ >= 4
#	define PHP_HASH_API __attribute__ ((visibility("default")))
#else
#	define PHP_HASH_API
#endif

extern PHP_HASH_API zend_class_entry *php_hashcontext_ce;
PHP_HASH_API const php_hash_ops *php_hash_fetch_ops(zend_string *algo);
PHP_HASH_API void php_hash_register_algo(const char *algo, const php_hash_ops *ops);
PHP_HASH_API zend_result php_hash_copy(const void *ops, const void *orig_context, void *dest_context);
PHP_HASH_API hash_spec_result php_hash_serialize(const php_hashcontext_object *context, zend_long *magic, zval *zv);
PHP_HASH_API hash_spec_result php_hash_unserialize(php_hashcontext_object *context, zend_long magic, const zval *zv);
PHP_HASH_API hash_spec_result php_hash_serialize_spec(const php_hashcontext_object *context, zval *zv, const char *spec);
PHP_HASH_API hash_spec_result php_hash_unserialize_spec(php_hashcontext_object *hash, const zval *zv, const char *spec);

static inline void *php_hash_alloc_context(const php_hash_ops *ops) {
	/* Zero out context memory so serialization doesn't expose internals */
	return ecalloc(1, ops->context_size);
}

static inline void php_hash_bin2hex(char *out, const unsigned char *in, size_t in_len)
{
	static const char hexits[17] = "0123456789abcdef";
	size_t i;

	for(i = 0; i < in_len; i++) {
		out[i * 2]       = hexits[in[i] >> 4];
		out[(i * 2) + 1] = hexits[in[i] &  0x0F];
	}
}

#endif	/* PHP_HASH_H */
ext/hash/php_hash_xxhash.h000064400000006710151730542440011626 0ustar00/*
   +----------------------------------------------------------------------+
   | Copyright (c) The PHP Group                                          |
   +----------------------------------------------------------------------+
   | This source file is subject to version 3.01 of the PHP license,      |
   | that is bundled with this package in the file LICENSE, and is        |
   | available through the world-wide-web at the following url:           |
   | https://www.php.net/license/3_01.txt                                 |
   | If you did not receive a copy of the PHP license and are unable to   |
   | obtain it through the world-wide-web, please send a note to          |
   | license@php.net so we can mail you a copy immediately.               |
   +----------------------------------------------------------------------+
   | Author: Anatol Belski <ab@php.net>                                   |
   +----------------------------------------------------------------------+
*/

#ifndef PHP_HASH_XXHASH_H
#define PHP_HASH_XXHASH_H

#define XXH_INLINE_ALL 1
#include "xxhash/xxhash.h"

typedef struct {
	XXH32_state_t s;
} PHP_XXH32_CTX;
#define PHP_XXH32_SPEC "llllllllllll"

PHP_HASH_API void PHP_XXH32Init(PHP_XXH32_CTX *ctx, HashTable *args);
PHP_HASH_API void PHP_XXH32Update(PHP_XXH32_CTX *ctx, const unsigned char *in, size_t len);
PHP_HASH_API void PHP_XXH32Final(unsigned char digest[4], PHP_XXH32_CTX *ctx);
PHP_HASH_API zend_result PHP_XXH32Copy(const php_hash_ops *ops, const PHP_XXH32_CTX *orig_context, PHP_XXH32_CTX *copy_context);

typedef struct {
	XXH64_state_t s;
} PHP_XXH64_CTX;
#define PHP_XXH64_SPEC "qqqqqqqqqllq"

PHP_HASH_API void PHP_XXH64Init(PHP_XXH64_CTX *ctx, HashTable *args);
PHP_HASH_API void PHP_XXH64Update(PHP_XXH64_CTX *ctx, const unsigned char *in, size_t len);
PHP_HASH_API void PHP_XXH64Final(unsigned char digest[8], PHP_XXH64_CTX *ctx);
PHP_HASH_API zend_result PHP_XXH64Copy(const php_hash_ops *ops, const PHP_XXH64_CTX *orig_context, PHP_XXH64_CTX *copy_context);

#define PHP_XXH3_SECRET_SIZE_MIN XXH3_SECRET_SIZE_MIN
#define PHP_XXH3_SECRET_SIZE_MAX 256

typedef struct {
	XXH3_state_t s;
	/* The value must survive the whole streaming cycle from init to final.

	   A more flexible mechanism would be to carry zend_string* passed through
	   the options. However, that will require to introduce a destructor
	   handler for ctx, so then it wolud be automatically called from the
	   object destructor. Until that is given, the viable way is to use a
	   plausible max secret length. */
	const unsigned char secret[PHP_XXH3_SECRET_SIZE_MAX];
} PHP_XXH3_CTX;

typedef PHP_XXH3_CTX PHP_XXH3_64_CTX;

PHP_HASH_API void PHP_XXH3_64_Init(PHP_XXH3_64_CTX *ctx, HashTable *args);
PHP_HASH_API void PHP_XXH3_64_Update(PHP_XXH3_64_CTX *ctx, const unsigned char *in, size_t len);
PHP_HASH_API void PHP_XXH3_64_Final(unsigned char digest[8], PHP_XXH3_64_CTX *ctx);
PHP_HASH_API zend_result PHP_XXH3_64_Copy(const php_hash_ops *ops, const PHP_XXH3_64_CTX *orig_context, PHP_XXH3_64_CTX *copy_context);

typedef PHP_XXH3_CTX PHP_XXH3_128_CTX;

PHP_HASH_API void PHP_XXH3_128_Init(PHP_XXH3_128_CTX *ctx, HashTable *args);
PHP_HASH_API void PHP_XXH3_128_Update(PHP_XXH3_128_CTX *ctx, const unsigned char *in, size_t len);
PHP_HASH_API void PHP_XXH3_128_Final(unsigned char digest[16], PHP_XXH3_128_CTX *ctx);
PHP_HASH_API zend_result PHP_XXH3_128_Copy(const php_hash_ops *ops, const PHP_XXH3_128_CTX *orig_context, PHP_XXH3_128_CTX *copy_context);

#endif /* PHP_HASH_XXHASH_H */

ext/hash/php_hash_murmur.h000064400000005121151730542450011646 0ustar00/*
   +----------------------------------------------------------------------+
   | Copyright (c) The PHP Group                                          |
   +----------------------------------------------------------------------+
   | This source file is subject to version 3.01 of the PHP license,      |
   | that is bundled with this package in the file LICENSE, and is        |
   | available through the world-wide-web at the following url:           |
   | https://www.php.net/license/3_01.txt                                 |
   | If you did not receive a copy of the PHP license and are unable to   |
   | obtain it through the world-wide-web, please send a note to          |
   | license@php.net so we can mail you a copy immediately.               |
   +----------------------------------------------------------------------+
   | Author: Anatol Belski <ab@php.net>                                   |
   +----------------------------------------------------------------------+
*/

#ifndef PHP_HASH_MURMUR_H
#define PHP_HASH_MURMUR_H

typedef struct {
	uint32_t h;
	uint32_t carry;
	uint32_t len;
} PHP_MURMUR3A_CTX;
#define PHP_MURMUR3A_SPEC "lll"

PHP_HASH_API void PHP_MURMUR3AInit(PHP_MURMUR3A_CTX *ctx, HashTable *args);
PHP_HASH_API void PHP_MURMUR3AUpdate(PHP_MURMUR3A_CTX *ctx, const unsigned char *in, size_t len);
PHP_HASH_API void PHP_MURMUR3AFinal(unsigned char digest[4], PHP_MURMUR3A_CTX *ctx);
PHP_HASH_API zend_result PHP_MURMUR3ACopy(const php_hash_ops *ops, const PHP_MURMUR3A_CTX *orig_context, PHP_MURMUR3A_CTX *copy_context);

typedef struct {
	uint32_t h[4];
	uint32_t carry[4];
	uint32_t len;
} PHP_MURMUR3C_CTX;
#define PHP_MURMUR3C_SPEC "lllllllll"

PHP_HASH_API void PHP_MURMUR3CInit(PHP_MURMUR3C_CTX *ctx, HashTable *args);
PHP_HASH_API void PHP_MURMUR3CUpdate(PHP_MURMUR3C_CTX *ctx, const unsigned char *in, size_t len);
PHP_HASH_API void PHP_MURMUR3CFinal(unsigned char digest[16], PHP_MURMUR3C_CTX *ctx);
PHP_HASH_API zend_result PHP_MURMUR3CCopy(const php_hash_ops *ops, const PHP_MURMUR3C_CTX *orig_context, PHP_MURMUR3C_CTX *copy_context);

typedef struct {
	uint64_t h[2];
	uint64_t carry[2];
	uint32_t len;
} PHP_MURMUR3F_CTX;
#define PHP_MURMUR3F_SPEC "qqqql"

PHP_HASH_API void PHP_MURMUR3FInit(PHP_MURMUR3F_CTX *ctx, HashTable *args);
PHP_HASH_API void PHP_MURMUR3FUpdate(PHP_MURMUR3F_CTX *ctx, const unsigned char *in, size_t len);
PHP_HASH_API void PHP_MURMUR3FFinal(unsigned char digest[16], PHP_MURMUR3F_CTX *ctx);
PHP_HASH_API zend_result PHP_MURMUR3FCopy(const php_hash_ops *ops, const PHP_MURMUR3F_CTX *orig_context, PHP_MURMUR3F_CTX *copy_context);

#endif /* PHP_HASH_MURMUR_H */

ext/hash/php_hash_gost.h000064400000002735151730542450011303 0ustar00/*
   +----------------------------------------------------------------------+
   | Copyright (c) The PHP Group                                          |
   +----------------------------------------------------------------------+
   | This source file is subject to version 3.01 of the PHP license,      |
   | that is bundled with this package in the file LICENSE, and is        |
   | available through the world-wide-web at the following url:           |
   | https://www.php.net/license/3_01.txt                                 |
   | If you did not receive a copy of the PHP license and are unable to   |
   | obtain it through the world-wide-web, please send a note to          |
   | license@php.net so we can mail you a copy immediately.               |
   +----------------------------------------------------------------------+
   | Author: Michael Wallner <mike@php.net>                               |
   +----------------------------------------------------------------------+
*/

#ifndef PHP_HASH_GOST_H
#define PHP_HASH_GOST_H

/* GOST context */
typedef struct {
	uint32_t state[16];
	uint32_t count[2];
	unsigned char length;
	unsigned char buffer[32];
	const uint32_t (*tables)[4][256];
} PHP_GOST_CTX;
#define PHP_GOST_SPEC "l16l2bb32"

PHP_HASH_API void PHP_GOSTInit(PHP_GOST_CTX *, ZEND_ATTRIBUTE_UNUSED HashTable *args);
PHP_HASH_API void PHP_GOSTUpdate(PHP_GOST_CTX *, const unsigned char *, size_t);
PHP_HASH_API void PHP_GOSTFinal(unsigned char[32], PHP_GOST_CTX *);

#endif
ext/hash/php_hash_haval.h000064400000004061151730542450011414 0ustar00/*
   +----------------------------------------------------------------------+
   | Copyright (c) The PHP Group                                          |
   +----------------------------------------------------------------------+
   | This source file is subject to version 3.01 of the PHP license,      |
   | that is bundled with this package in the file LICENSE, and is        |
   | available through the world-wide-web at the following url:           |
   | https://www.php.net/license/3_01.txt                                 |
   | If you did not receive a copy of the PHP license and are unable to   |
   | obtain it through the world-wide-web, please send a note to          |
   | license@php.net so we can mail you a copy immediately.               |
   +----------------------------------------------------------------------+
   | Author: Sara Golemon <pollita@php.net>                               |
   +----------------------------------------------------------------------+
*/

#ifndef PHP_HASH_HAVAL_H
#define PHP_HASH_HAVAL_H

/* HAVAL context. */
typedef struct {
	uint32_t state[8];
	uint32_t count[2];
	unsigned char buffer[128];

	char passes;
	short output;
	void (*Transform)(uint32_t state[8], const unsigned char block[128]);
} PHP_HAVAL_CTX;
#define PHP_HAVAL_SPEC "l8l2b128"

#define PHP_HASH_HAVAL_INIT_DECL(p,b)	PHP_HASH_API void PHP_##p##HAVAL##b##Init(PHP_HAVAL_CTX *, ZEND_ATTRIBUTE_UNUSED HashTable *); \
										PHP_HASH_API void PHP_HAVAL##b##Final(unsigned char*, PHP_HAVAL_CTX *);

PHP_HASH_API void PHP_HAVALUpdate(PHP_HAVAL_CTX *, const unsigned char *, size_t);

PHP_HASH_HAVAL_INIT_DECL(3,128)
PHP_HASH_HAVAL_INIT_DECL(3,160)
PHP_HASH_HAVAL_INIT_DECL(3,192)
PHP_HASH_HAVAL_INIT_DECL(3,224)
PHP_HASH_HAVAL_INIT_DECL(3,256)

PHP_HASH_HAVAL_INIT_DECL(4,128)
PHP_HASH_HAVAL_INIT_DECL(4,160)
PHP_HASH_HAVAL_INIT_DECL(4,192)
PHP_HASH_HAVAL_INIT_DECL(4,224)
PHP_HASH_HAVAL_INIT_DECL(4,256)

PHP_HASH_HAVAL_INIT_DECL(5,128)
PHP_HASH_HAVAL_INIT_DECL(5,160)
PHP_HASH_HAVAL_INIT_DECL(5,192)
PHP_HASH_HAVAL_INIT_DECL(5,224)
PHP_HASH_HAVAL_INIT_DECL(5,256)

#endif
ext/hash/php_hash_sha3.h000064400000004651151730542450011164 0ustar00/*
   +----------------------------------------------------------------------+
   | Copyright (c) The PHP Group                                          |
   +----------------------------------------------------------------------+
   | This source file is subject to version 3.01 of the PHP license,      |
   | that is bundled with this package in the file LICENSE, and is        |
   | available through the world-wide-web at the following url:           |
   | https://www.php.net/license/3_01.txt                                 |
   | If you did not receive a copy of the PHP license and are unable to   |
   | obtain it through the world-wide-web, please send a note to          |
   | license@php.net so we can mail you a copy immediately.               |
   +----------------------------------------------------------------------+
   | Author: Sara Golemon <pollita@php.net>                               |
   +----------------------------------------------------------------------+
*/

#ifndef PHP_HASH_SHA3_H
#define PHP_HASH_SHA3_H

typedef struct {
#ifdef HAVE_SLOW_HASH3
	unsigned char state[200]; // 5 * 5 * sizeof(uint64)
	uint32_t pos;
#else
	unsigned char state[224]; // this must fit a Keccak_HashInstance
#endif
} PHP_SHA3_CTX;
#ifdef HAVE_SLOW_HASH3
#define PHP_SHA3_SPEC "b200l."
#endif

typedef PHP_SHA3_CTX PHP_SHA3_224_CTX;
typedef PHP_SHA3_CTX PHP_SHA3_256_CTX;
typedef PHP_SHA3_CTX PHP_SHA3_384_CTX;
typedef PHP_SHA3_CTX PHP_SHA3_512_CTX;

PHP_HASH_API void PHP_SHA3224Init(PHP_SHA3_224_CTX*, ZEND_ATTRIBUTE_UNUSED HashTable *);
PHP_HASH_API void PHP_SHA3224Update(PHP_SHA3_224_CTX*, const unsigned char*, size_t);
PHP_HASH_API void PHP_SAH3224Final(unsigned char[32], PHP_SHA3_224_CTX*);

PHP_HASH_API void PHP_SHA3256Init(PHP_SHA3_256_CTX*, ZEND_ATTRIBUTE_UNUSED HashTable *);
PHP_HASH_API void PHP_SHA3256Update(PHP_SHA3_256_CTX*, const unsigned char*, size_t);
PHP_HASH_API void PHP_SAH3256Final(unsigned char[32], PHP_SHA3_256_CTX*);

PHP_HASH_API void PHP_SHA3384Init(PHP_SHA3_384_CTX*, ZEND_ATTRIBUTE_UNUSED HashTable *);
PHP_HASH_API void PHP_SHA3384Update(PHP_SHA3_384_CTX*, const unsigned char*, size_t);
PHP_HASH_API void PHP_SAH3384Final(unsigned char[32], PHP_SHA3_384_CTX*);

PHP_HASH_API void PHP_SHA3512Init(PHP_SHA3_512_CTX*, ZEND_ATTRIBUTE_UNUSED HashTable *);
PHP_HASH_API void PHP_SHA3512Update(PHP_SHA3_512_CTX*, const unsigned char*, size_t);
PHP_HASH_API void PHP_SAH3512Final(unsigned char[32], PHP_SHA3_512_CTX*);

#endif
ext/hash/php_hash_tiger.h000064400000003413151730542450011433 0ustar00/*
   +----------------------------------------------------------------------+
   | Copyright (c) The PHP Group                                          |
   +----------------------------------------------------------------------+
   | This source file is subject to version 3.01 of the PHP license,      |
   | that is bundled with this package in the file LICENSE, and is        |
   | available through the world-wide-web at the following url:           |
   | https://www.php.net/license/3_01.txt                                 |
   | If you did not receive a copy of the PHP license and are unable to   |
   | obtain it through the world-wide-web, please send a note to          |
   | license@php.net so we can mail you a copy immediately.               |
   +----------------------------------------------------------------------+
   | Author: Michael Wallner <mike@php.net>                               |
   +----------------------------------------------------------------------+
*/

#ifndef PHP_HASH_TIGER_H
#define PHP_HASH_TIGER_H

/* TIGER context */
typedef struct {
	uint64_t state[3];
	uint64_t passed;
	unsigned char buffer[64];
	uint32_t length;
	unsigned int passes:1;
} PHP_TIGER_CTX;
#define PHP_TIGER_SPEC "q3qb64l"

PHP_HASH_API void PHP_3TIGERInit(PHP_TIGER_CTX *context, ZEND_ATTRIBUTE_UNUSED HashTable *args);
PHP_HASH_API void PHP_4TIGERInit(PHP_TIGER_CTX *context, ZEND_ATTRIBUTE_UNUSED HashTable *args);
PHP_HASH_API void PHP_TIGERUpdate(PHP_TIGER_CTX *context, const unsigned char *input, size_t len);
PHP_HASH_API void PHP_TIGER128Final(unsigned char digest[16], PHP_TIGER_CTX *context);
PHP_HASH_API void PHP_TIGER160Final(unsigned char digest[20], PHP_TIGER_CTX *context);
PHP_HASH_API void PHP_TIGER192Final(unsigned char digest[24], PHP_TIGER_CTX *context);

#endif
ext/jsmin/php_jsmin.h000064400000003410151730542460010631 0ustar00/*
  +----------------------------------------------------------------------+
  | PHP Version 5                                                        |
  +----------------------------------------------------------------------+
  | Copyright (c) 1997-2012 The PHP Group                                |
  +----------------------------------------------------------------------+
  | This source file is subject to version 3.01 of the PHP license,      |
  | that is bundled with this package in the file LICENSE, and is        |
  | available through the world-wide-web at the following url:           |
  | http://www.php.net/license/3_01.txt                                  |
  | If you did not receive a copy of the PHP license and are unable to   |
  | obtain it through the world-wide-web, please send a note to          |
  | license@php.net so we can mail you a copy immediately.               |
  +----------------------------------------------------------------------+
  | Author: Michael Squires <sqmk@php.net>                               |
  +----------------------------------------------------------------------+
*/

/* $Id$ */

#ifndef PHP_JSMIN_H
#define PHP_JSMIN_H

#define PHP_JSMIN_VERSION "3.0.0"

#ifdef PHP_WIN32
#define PHP_JSMIN_API __declspec(dllexport)
#else
#define PHP_JSMIN_API
#endif

extern zend_module_entry jsmin_module_entry;
#define phpext_jsmin_ptr &jsmin_module_entry

#ifdef ZTS
#include "TSRM.h"
#endif

ZEND_BEGIN_MODULE_GLOBALS(jsmin)
	int error_code;
ZEND_END_MODULE_GLOBALS(jsmin)

#ifdef ZTS
#define JSMIN_G(v) TSRMG(jsmin_globals_id, zend_jsmin_globals *, v)
#else
#define JSMIN_G(v) (jsmin_globals.v)
#endif

PHP_MINFO_FUNCTION(jsmin);
PHP_FUNCTION(jsmin);
PHP_FUNCTION(jsmin_last_error);
PHP_FUNCTION(jsmin_last_error_msg);

#endif  /* PHP_JSMIN_H */
ext/date/php_date.h000064400000013726151730542460010236 0ustar00/*
   +----------------------------------------------------------------------+
   | Copyright (c) The PHP Group                                          |
   +----------------------------------------------------------------------+
   | This source file is subject to version 3.01 of the PHP license,      |
   | that is bundled with this package in the file LICENSE, and is        |
   | available through the world-wide-web at the following url:           |
   | https://www.php.net/license/3_01.txt                                 |
   | If you did not receive a copy of the PHP license and are unable to   |
   | obtain it through the world-wide-web, please send a note to          |
   | license@php.net so we can mail you a copy immediately.               |
   +----------------------------------------------------------------------+
   | Authors: Derick Rethans <derick@derickrethans.nl>                    |
   +----------------------------------------------------------------------+
*/

#ifndef PHP_DATE_H
#define PHP_DATE_H

#include "lib/timelib.h"
#include "Zend/zend_hash.h"

/* Same as SIZEOF_ZEND_LONG but using TIMELIB_LONG_MAX/MIN */
#if TIMELIB_LONG_MAX == INT32_MAX
# define PHP_DATE_SIZEOF_LONG 4
#elif TIMELIB_LONG_MAX == INT64_MAX
# define PHP_DATE_SIZEOF_LONG 8
#else
# error "Unknown TIMELIB LONG SIZE"
#endif

/* Same as ZEND_DOUBLE_FITS_LONG but using TIMELIB_LONG_MAX/MIN */
#if PHP_DATE_SIZEOF_LONG == 4
# define PHP_DATE_DOUBLE_FITS_LONG(d) (!((d) > (double)TIMELIB_LONG_MAX || (d) < (double)TIMELIB_LONG_MIN))
#elif PHP_DATE_SIZEOF_LONG == 8
  /* >= as (double)TIMELIB_LONG_MAX is outside signed range */
# define PHP_DATE_DOUBLE_FITS_LONG(d) (!((d) >= (double)TIMELIB_LONG_MAX || (d) < (double)TIMELIB_LONG_MIN))
#endif

#include "php_version.h"
#define PHP_DATE_VERSION PHP_VERSION

extern zend_module_entry date_module_entry;
#define phpext_date_ptr &date_module_entry

PHP_RINIT_FUNCTION(date);
PHP_RSHUTDOWN_FUNCTION(date);
PHP_MINIT_FUNCTION(date);
PHP_MSHUTDOWN_FUNCTION(date);
PHP_MINFO_FUNCTION(date);
ZEND_MODULE_POST_ZEND_DEACTIVATE_D(date);

typedef struct _php_date_obj php_date_obj;
typedef struct _php_timezone_obj php_timezone_obj;
typedef struct _php_interval_obj php_interval_obj;
typedef struct _php_period_obj php_period_obj;

struct _php_date_obj {
	timelib_time *time;
	zend_object   std;
};

static inline php_date_obj *php_date_obj_from_obj(zend_object *obj) {
	return (php_date_obj*)((char*)(obj) - XtOffsetOf(php_date_obj, std));
}

#define Z_PHPDATE_P(zv)  php_date_obj_from_obj(Z_OBJ_P((zv)))

struct _php_timezone_obj {
	bool            initialized;
	int             type;
	union {
		timelib_tzinfo   *tz;         /* TIMELIB_ZONETYPE_ID */
		timelib_sll       utc_offset; /* TIMELIB_ZONETYPE_OFFSET */
		timelib_abbr_info z;          /* TIMELIB_ZONETYPE_ABBR */
	} tzi;
	zend_object std;
};

static inline php_timezone_obj *php_timezone_obj_from_obj(zend_object *obj) {
	return (php_timezone_obj*)((char*)(obj) - XtOffsetOf(php_timezone_obj, std));
}

#define Z_PHPTIMEZONE_P(zv)  php_timezone_obj_from_obj(Z_OBJ_P((zv)))

#define PHP_DATE_CIVIL   1
#define PHP_DATE_WALL    2

struct _php_interval_obj {
	timelib_rel_time *diff;
	int               civil_or_wall;
	bool              initialized;
	bool              from_string;
	zend_string      *date_string;
	zend_object       std;
};

static inline php_interval_obj *php_interval_obj_from_obj(zend_object *obj) {
	return (php_interval_obj*)((char*)(obj) - XtOffsetOf(php_interval_obj, std));
}

#define Z_PHPINTERVAL_P(zv)  php_interval_obj_from_obj(Z_OBJ_P((zv)))

struct _php_period_obj {
	timelib_time     *start;
	zend_class_entry *start_ce;
	timelib_time     *current;
	timelib_time     *end;
	timelib_rel_time *interval;
	int               recurrences;
	bool              initialized;
	bool              include_start_date;
	bool              include_end_date;
	zend_object       std;
};

static inline php_period_obj *php_period_obj_from_obj(zend_object *obj) {
	return (php_period_obj*)((char*)(obj) - XtOffsetOf(php_period_obj, std));
}

#define Z_PHPPERIOD_P(zv)  php_period_obj_from_obj(Z_OBJ_P((zv)))

ZEND_BEGIN_MODULE_GLOBALS(date)
	char                    *default_timezone;
	char                    *timezone;
	HashTable               *tzcache;
	timelib_error_container *last_errors;
ZEND_END_MODULE_GLOBALS(date)

#define DATEG(v) ZEND_MODULE_GLOBALS_ACCESSOR(date, v)

PHPAPI time_t php_time(void);

/* Backwards compatibility wrapper */
PHPAPI zend_long php_parse_date(const char *string, zend_long *now);
PHPAPI void php_mktime(INTERNAL_FUNCTION_PARAMETERS, bool gmt);
PHPAPI int php_idate(char format, time_t ts, bool localtime);

#define _php_strftime php_strftime

PHPAPI void php_strftime(INTERNAL_FUNCTION_PARAMETERS, bool gm);
PHPAPI zend_string *php_format_date(const char *format, size_t format_len, time_t ts, bool localtime);
PHPAPI zend_string *php_format_date_obj(const char *format, size_t format_len, const php_date_obj *date_obj);

/* Mechanism to set new TZ database */
PHPAPI void php_date_set_tzdb(timelib_tzdb *tzdb);
PHPAPI timelib_tzinfo *get_timezone_info(void);

/* Grabbing CE's so that other exts can use the date objects too */
PHPAPI zend_class_entry *php_date_get_date_ce(void);
PHPAPI zend_class_entry *php_date_get_immutable_ce(void);
PHPAPI zend_class_entry *php_date_get_interface_ce(void);
PHPAPI zend_class_entry *php_date_get_timezone_ce(void);
PHPAPI zend_class_entry *php_date_get_interval_ce(void);
PHPAPI zend_class_entry *php_date_get_period_ce(void);

/* Functions for creating DateTime objects, and initializing them from a string */
#define PHP_DATE_INIT_CTOR   0x01
#define PHP_DATE_INIT_FORMAT 0x02

PHPAPI zval *php_date_instantiate(zend_class_entry *pce, zval *object);
PHPAPI bool php_date_initialize(php_date_obj *dateobj, const char *time_str, size_t time_str_len, const char *format, zval *timezone_object, int flags);
PHPAPI void php_date_initialize_from_ts_long(php_date_obj *dateobj, zend_long sec, int usec);
PHPAPI bool php_date_initialize_from_ts_double(php_date_obj *dateobj, double ts);

#endif /* PHP_DATE_H */
ext/date/lib/timelib_config.h000064400000000516151730542460012163 0ustar00#ifdef PHP_WIN32
# include "config.w32.h"
#else
# include <php_config.h>
#endif
#include <inttypes.h>
#include <stdint.h>

#include "zend.h"

#define timelib_malloc  emalloc
#define timelib_realloc erealloc
#define timelib_calloc  ecalloc
#define timelib_strdup  estrdup
#define timelib_strndup estrndup
#define timelib_free    efree
ext/date/lib/timelib.h000064400000113336151730542470010644 0ustar00/*
 * The MIT License (MIT)
 *
 * Copyright (c) 2015-2026 Derick Rethans
 * Copyright (c) 2018,2021 MongoDB, Inc.
 *
 * Permission is hereby granted, free of charge, to any person obtaining a copy
 * of this software and associated documentation files (the "Software"), to deal
 * in the Software without restriction, including without limitation the rights
 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
 * copies of the Software, and to permit persons to whom the Software is
 * furnished to do so, subject to the following conditions:
 *
 * The above copyright notice and this permission notice shall be included in
 * all copies or substantial portions of the Software.
 *
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
 * THE SOFTWARE.
 */

#ifndef __TIMELIB_H__
#define __TIMELIB_H__

#ifdef HAVE_TIMELIB_CONFIG_H
# include "timelib_config.h"
#endif

#define TIMELIB_VERSION 202215
#define TIMELIB_EXTENDED_VERSION 20221501
#define TIMELIB_ASCII_VERSION "2022.15"

#include <stdlib.h>
#include <stdbool.h>
#include <limits.h>
#include <inttypes.h>

# ifndef HAVE_INT32_T
#  if SIZEOF_INT == 4
typedef int int32_t;
#  elif SIZEOF_LONG == 4
typedef long int int32_t;
#  endif
# endif

# ifndef HAVE_UINT32_T
#  if SIZEOF_INT == 4
typedef unsigned int uint32_t;
#  elif SIZEOF_LONG == 4
typedef unsigned long int uint32_t;
#  endif
# endif

#ifdef _WIN32
# if _MSC_VER >= 1600
# include <stdint.h>
# endif
# ifndef SIZEOF_INT
#  define SIZEOF_INT 4
# endif
# ifndef SIZEOF_LONG
#  define SIZEOF_LONG 4
# endif
# ifndef int32_t
typedef __int32           int32_t;
# endif
# ifndef uint32_t
typedef unsigned __int32  uint32_t;
# endif
# ifndef int64_t
typedef __int64           int64_t;
# endif
# ifndef uint64_t
typedef unsigned __int64  uint64_t;
# endif
# ifndef PRId32
#  define PRId32       "I32d"
# endif
# ifndef PRIu32
#  define PRIu32       "I32u"
# endif
# ifndef PRId64
#  define PRId64       "I64d"
# endif
# ifndef PRIu64
#  define PRIu64       "I64u"
# endif
# ifndef INT32_MAX
#define INT32_MAX    _I32_MAX
# endif
# ifndef INT32_MIN
#define INT32_MIN    ((int32_t)_I32_MIN)
# endif
# ifndef UINT32_MAX
#define UINT32_MAX   _UI32_MAX
# endif
# ifndef INT64_MIN
#define INT64_MIN    ((int64_t)_I64_MIN)
# endif
# ifndef INT64_MAX
#define INT64_MAX    _I64_MAX
# endif
# ifndef UINT64_MAX
#define UINT64_MAX   _UI64_MAX
# endif
#endif

#if (defined(__x86_64__) || defined(__LP64__) || defined(_LP64) || defined(_WIN64)) && !defined(TIMELIB_FORCE_LONG32)
typedef int64_t timelib_long;
typedef uint64_t timelib_ulong;
# define TIMELIB_LONG_MAX INT64_MAX
# define TIMELIB_LONG_MIN INT64_MIN
# define TIMELIB_ULONG_MAX UINT64_MAX
# define TIMELIB_LONG_FMT "%" PRId64
# define TIMELIB_ULONG_FMT "%" PRIu64
#else
typedef int32_t timelib_long;
typedef uint32_t timelib_ulong;
# define TIMELIB_LONG_MAX INT32_MAX
# define TIMELIB_LONG_MIN INT32_MIN
# define TIMELIB_ULONG_MAX UINT32_MAX
# define TIMELIB_LONG_FMT "%" PRId32
# define TIMELIB_ULONG_FMT "%" PRIu32
#endif

#if defined(_MSC_VER)
typedef uint64_t timelib_ull;
typedef int64_t timelib_sll;
# define TIMELIB_LL_CONST(n) n ## i64
#else
typedef unsigned long long timelib_ull;
typedef signed long long timelib_sll;
# define TIMELIB_LL_CONST(n) n ## ll
#endif

typedef struct _ttinfo ttinfo;
typedef struct _tlinfo tlinfo;

typedef struct _tlocinfo
{
	char country_code[3];
	double latitude;
	double longitude;
	char *comments;
} tlocinfo;

#define TIMELIB_POSIX_TRANS_TYPE_JULIAN_NO_FEB29   1
#define TIMELIB_POSIX_TRANS_TYPE_JULIAN_FEB29      2
#define TIMELIB_POSIX_TRANS_TYPE_MWD               3

typedef struct _timelib_posix_trans_info
{
	int type; // 1=Jn, 2=n, 3=Mm.w.d
	union {
		int days;
		struct {
			int month;
			int week;
			int dow;
		} mwd;
	};
	int hour;
} timelib_posix_trans_info;

typedef struct _timelib_posix_str
{
	char        *std;
	timelib_sll  std_offset;
	char        *dst;
	timelib_sll  dst_offset;

	timelib_posix_trans_info *dst_begin;
	timelib_posix_trans_info *dst_end;

	int type_index_std_type;  // index into tz->type
	int type_index_dst_type;  // index into tz->type
} timelib_posix_str;

typedef struct _timelib_posix_transitions {
	size_t      count;
	timelib_sll times[6];
	timelib_sll types[6];
} timelib_posix_transitions;

typedef struct _timelib_tzinfo
{
	char    *name;
	struct {
		uint32_t ttisgmtcnt;
		uint32_t ttisstdcnt;
		uint32_t leapcnt;
		uint32_t timecnt;
		uint32_t typecnt;
		uint32_t charcnt;
	} _bit32;
	struct {
		uint64_t ttisgmtcnt;
		uint64_t ttisstdcnt;
		uint64_t leapcnt;
		uint64_t timecnt;
		uint64_t typecnt;
		uint64_t charcnt;
	} bit64;

	int64_t *trans;
	unsigned char *trans_idx;

	ttinfo  *type;
	char    *timezone_abbr;

	tlinfo  *leap_times;
	unsigned char bc;
	tlocinfo location;

	char              *posix_string;
	timelib_posix_str *posix_info;
} timelib_tzinfo;

typedef struct _timelib_rel_time {
	timelib_sll y, m, d; /* Years, Months and Days */
	timelib_sll h, i, s; /* Hours, mInutes and Seconds */
	timelib_sll us;      /* Microseconds */

	int weekday; /* Stores the day in 'next monday' */
	int weekday_behavior; /* 0: the current day should *not* be counted when advancing forwards; 1: the current day *should* be counted */

	int first_last_day_of;
	int invert; /* Whether the difference should be inverted */
	timelib_sll days; /* Contains the number of *days*, instead of Y-M-D differences */

	struct {
		unsigned int type;
		timelib_sll amount;
	} special;

	unsigned int   have_weekday_relative, have_special_relative;
} timelib_rel_time;

typedef struct _timelib_time_offset {
	int32_t      offset;
	unsigned int leap_secs;
	unsigned int is_dst;
	char        *abbr;
	timelib_sll  transition_time;
} timelib_time_offset;

typedef struct _timelib_time {
	timelib_sll      y, m, d;     /* Year, Month, Day */
	timelib_sll      h, i, s;     /* Hour, mInute, Second */
	timelib_sll      us;          /* Microseconds */
	int              z;           /* UTC offset in seconds */
	char            *tz_abbr;     /* Timezone abbreviation (display only) */
	timelib_tzinfo  *tz_info;     /* Timezone structure */
	signed int       dst;         /* Flag if we were parsing a DST zone */
	timelib_rel_time relative;

	timelib_sll      sse;         /* Seconds since epoch */

	unsigned int   have_time, have_date, have_zone, have_relative, have_weeknr_day;

	unsigned int   sse_uptodate; /* !0 if the sse member is up to date with the date/time members */
	unsigned int   tim_uptodate; /* !0 if the date/time members are up to date with the sse member */
	unsigned int   is_localtime; /*  1 if the current struct represents localtime, 0 if it is in GMT */
	unsigned int   zone_type;    /*  1 time offset,
	                              *  3 TimeZone identifier,
	                              *  2 TimeZone abbreviation */
} timelib_time;

typedef struct _timelib_abbr_info {
	timelib_sll  utc_offset;
	char        *abbr;
	int          dst;
} timelib_abbr_info;

#define TIMELIB_WARN_MASK                      0x1ff
#define TIMELIB_ERR_MASK                       0x2ff

#define TIMELIB_WARN_DOUBLE_TZ                 0x101
#define TIMELIB_WARN_INVALID_TIME              0x102
#define TIMELIB_WARN_INVALID_DATE              0x103
#define TIMELIB_WARN_TRAILING_DATA             0x11a

#define TIMELIB_ERR_DOUBLE_TZ                  0x201
#define TIMELIB_ERR_TZID_NOT_FOUND             0x202
#define TIMELIB_ERR_DOUBLE_TIME                0x203
#define TIMELIB_ERR_DOUBLE_DATE                0x204
#define TIMELIB_ERR_UNEXPECTED_CHARACTER       0x205
#define TIMELIB_ERR_EMPTY_STRING               0x206
#define TIMELIB_ERR_UNEXPECTED_DATA            0x207
#define TIMELIB_ERR_NO_TEXTUAL_DAY             0x208
#define TIMELIB_ERR_NO_TWO_DIGIT_DAY           0x209
#define TIMELIB_ERR_NO_THREE_DIGIT_DAY_OF_YEAR 0x20a
#define TIMELIB_ERR_NO_TWO_DIGIT_MONTH         0x20b
#define TIMELIB_ERR_NO_TEXTUAL_MONTH           0x20c
#define TIMELIB_ERR_NO_TWO_DIGIT_YEAR          0x20d
#define TIMELIB_ERR_NO_FOUR_DIGIT_YEAR         0x20e
#define TIMELIB_ERR_NO_TWO_DIGIT_HOUR          0x20f
#define TIMELIB_ERR_HOUR_LARGER_THAN_12        0x210
#define TIMELIB_ERR_MERIDIAN_BEFORE_HOUR       0x211
#define TIMELIB_ERR_NO_MERIDIAN                0x212
#define TIMELIB_ERR_NO_TWO_DIGIT_MINUTE        0x213
#define TIMELIB_ERR_NO_TWO_DIGIT_SECOND        0x214
#define TIMELIB_ERR_NO_SIX_DIGIT_MICROSECOND   0x215
#define TIMELIB_ERR_NO_SEP_SYMBOL              0x216
#define TIMELIB_ERR_EXPECTED_ESCAPE_CHAR       0x217
#define TIMELIB_ERR_NO_ESCAPED_CHAR            0x218
#define TIMELIB_ERR_WRONG_FORMAT_SEP           0x219
#define TIMELIB_ERR_TRAILING_DATA              0x21a
#define TIMELIB_ERR_DATA_MISSING               0x21b
#define TIMELIB_ERR_NO_THREE_DIGIT_MILLISECOND 0x21c
#define TIMELIB_ERR_NO_FOUR_DIGIT_YEAR_ISO     0x21d
#define TIMELIB_ERR_NO_TWO_DIGIT_WEEK          0x21e
#define TIMELIB_ERR_INVALID_WEEK               0x21f
#define TIMELIB_ERR_NO_DAY_OF_WEEK             0x220
#define TIMELIB_ERR_INVALID_DAY_OF_WEEK        0x221
#define TIMELIB_ERR_INVALID_SPECIFIER          0x222
#define TIMELIB_ERR_INVALID_TZ_OFFSET          0x223
#define TIMELIB_ERR_FORMAT_LITERAL_MISMATCH    0x224
#define TIMELIB_ERR_MIX_ISO_WITH_NATURAL       0x225
#define TIMELIB_ERR_NUMBER_OUT_OF_RANGE        0x226

#define TIMELIB_ZONETYPE_NONE   0
#define TIMELIB_ZONETYPE_OFFSET 1
#define TIMELIB_ZONETYPE_ABBR   2
#define TIMELIB_ZONETYPE_ID     3

typedef struct _timelib_error_message {
	int         error_code;
	int         position;
	char        character;
	char       *message;
} timelib_error_message;

typedef struct _timelib_error_container {
	timelib_error_message *error_messages;
	timelib_error_message *warning_messages;
	int                    error_count;
	int                    warning_count;
} timelib_error_container;

typedef struct _timelib_tz_lookup_table {
	const char *name;
	int         type;
	float       gmtoffset;
	const char *full_tz_name;
} timelib_tz_lookup_table;

typedef struct _timelib_tzdb_index_entry {
	char *id;
	unsigned int pos;
} timelib_tzdb_index_entry;

typedef struct _timelib_tzdb {
	const char                     *version;
	int                             index_size;
	const timelib_tzdb_index_entry *index;
	const unsigned char            *data;
} timelib_tzdb;

#ifndef timelib_malloc
# define timelib_malloc  malloc
# define timelib_realloc realloc
# define timelib_calloc  calloc
# define timelib_strdup  strdup
# define timelib_free    free
# if defined(WIN32) || defined(_WIN32) || defined(__WIN32) && !defined(__CYGWIN__)
#  define TIMELIB_USE_BUILTIN_STRNDUP 1
# else
#  define TIMELIB_USE_BUILTIN_STRNDUP 0
#  define timelib_strndup strndup
# endif
#endif

#define TIMELIB_NONE             0x00
#define TIMELIB_OVERRIDE_TIME    0x01
#define TIMELIB_NO_CLONE         0x02

#define TIMELIB_UNSET   -9999999

/* An entry for each of these error codes is also in the
 * timelib_error_messages array in timelib.c.
 * Codes 0x00, 0x07, and 0x09 are warnings only. */
#define TIMELIB_ERROR_NO_ERROR                            0x00
#define TIMELIB_ERROR_CANNOT_ALLOCATE                     0x01
#define TIMELIB_ERROR_CORRUPT_TRANSITIONS_DONT_INCREASE   0x02
#define TIMELIB_ERROR_CORRUPT_NO_64BIT_PREAMBLE           0x03
#define TIMELIB_ERROR_CORRUPT_NO_ABBREVIATION             0x04
#define TIMELIB_ERROR_UNSUPPORTED_VERSION                 0x05
#define TIMELIB_ERROR_NO_SUCH_TIMEZONE                    0x06
#define TIMELIB_ERROR_SLIM_FILE                           0x07 /* Warns if the file is SLIM, but we can't read it */
#define TIMELIB_ERROR_CORRUPT_POSIX_STRING                0x08
#define TIMELIB_ERROR_EMPTY_POSIX_STRING                  0x09 /* Warns if the POSIX string is empty, but still produces results */

#ifdef __cplusplus
extern "C" {
#endif

typedef enum _timelib_format_specifier_code {
	TIMELIB_FORMAT_ALLOW_EXTRA_CHARACTERS = 0,
	TIMELIB_FORMAT_ANY_SEPARATOR,
	TIMELIB_FORMAT_DAY_TWO_DIGIT,
	TIMELIB_FORMAT_DAY_TWO_DIGIT_PADDED,
	TIMELIB_FORMAT_DAY_OF_WEEK_ISO,
	TIMELIB_FORMAT_DAY_OF_WEEK,
	TIMELIB_FORMAT_DAY_OF_YEAR,
	TIMELIB_FORMAT_DAY_SUFFIX,
	TIMELIB_FORMAT_END,
	TIMELIB_FORMAT_EPOCH_SECONDS,
	TIMELIB_FORMAT_ESCAPE,
	TIMELIB_FORMAT_HOUR_TWO_DIGIT_12_MAX,
	TIMELIB_FORMAT_HOUR_TWO_DIGIT_12_MAX_PADDED,
	TIMELIB_FORMAT_HOUR_TWO_DIGIT_24_MAX,
	TIMELIB_FORMAT_HOUR_TWO_DIGIT_24_MAX_PADDED,
	TIMELIB_FORMAT_LITERAL,
	TIMELIB_FORMAT_MERIDIAN,
	TIMELIB_FORMAT_MICROSECOND_SIX_DIGIT,
	TIMELIB_FORMAT_MILLISECOND_THREE_DIGIT,
	TIMELIB_FORMAT_MINUTE_TWO_DIGIT,
	TIMELIB_FORMAT_MONTH_TWO_DIGIT,
	TIMELIB_FORMAT_MONTH_TWO_DIGIT_PADDED,
	TIMELIB_FORMAT_RANDOM_CHAR,
	TIMELIB_FORMAT_RESET_ALL,
	TIMELIB_FORMAT_RESET_ALL_WHEN_NOT_SET,
	TIMELIB_FORMAT_SECOND_TWO_DIGIT,
	TIMELIB_FORMAT_SEPARATOR,
	TIMELIB_FORMAT_SKIP_TO_SEPARATOR,
	TIMELIB_FORMAT_TEXTUAL_DAY_3_LETTER,
	TIMELIB_FORMAT_TEXTUAL_DAY_FULL,
	TIMELIB_FORMAT_TEXTUAL_MONTH_3_LETTER,
	TIMELIB_FORMAT_TEXTUAL_MONTH_FULL,
	TIMELIB_FORMAT_TIMEZONE_OFFSET,
	TIMELIB_FORMAT_TIMEZONE_OFFSET_MINUTES,
	TIMELIB_FORMAT_WEEK_OF_YEAR_ISO,
	TIMELIB_FORMAT_WEEK_OF_YEAR,
	TIMELIB_FORMAT_WHITESPACE,
	TIMELIB_FORMAT_YEAR_TWO_DIGIT,
	TIMELIB_FORMAT_YEAR_FOUR_DIGIT,
	TIMELIB_FORMAT_YEAR_EXPANDED,
	TIMELIB_FORMAT_YEAR_ISO
} timelib_format_specifier_code;

typedef struct _timelib_format_specifier {
	char                          specifier;
	timelib_format_specifier_code code;
} timelib_format_specifier;

typedef struct _timelib_format_config {
	const timelib_format_specifier *format_map;
	/* Format speciifiers must be preceded by 'prefix_char' if not '\0'. */
	char                            prefix_char;
} timelib_format_config;

/* Function pointers */
typedef timelib_tzinfo* (*timelib_tz_get_wrapper)(const char *tzname, const timelib_tzdb *tzdb, int *error_code);

/* From dow.c */
/* Calculates the day of the week from y, m, and d. 0=Sunday..6=Saturday */
timelib_sll timelib_day_of_week(timelib_sll y, timelib_sll m, timelib_sll d);

/* Calculates the day of the ISO week from y, m, and d. 1=Monday, 7=Sunday */
timelib_sll timelib_iso_day_of_week(timelib_sll y, timelib_sll m, timelib_sll d);

/* Calculates the day of the year according to y-m-d. 0=Jan 1st..364/365=Dec
 * 31st */
timelib_sll timelib_day_of_year(timelib_sll y, timelib_sll m, timelib_sll d);

/* Calculates the day of the year according to y-w-dow. 0..364/365 */
timelib_sll timelib_daynr_from_weeknr(timelib_sll iy, timelib_sll iw, timelib_sll id);

/* Calculates the number of days in month m for year y. 28..31 */
timelib_sll timelib_days_in_month(timelib_sll y, timelib_sll m);

/* Calculates the ISO year and week from y, m, and d, into iw and iy */
void timelib_isoweek_from_date(timelib_sll y, timelib_sll m, timelib_sll d, timelib_sll *iw, timelib_sll *iy);

/* Calculates the ISO year, week, and day of week from y, m, and d, into iy,
 * iw, and id */
void timelib_isodate_from_date(timelib_sll y, timelib_sll m, timelib_sll d, timelib_sll *iy, timelib_sll *iw, timelib_sll *id);

/* Calculates the year, month, and day from iy, iw, and iw, into y, m, and d */
void timelib_date_from_isodate(timelib_sll iy, timelib_sll iw, timelib_sll id, timelib_sll *y, timelib_sll *m, timelib_sll *d);

/* Returns true if h, i and s fit in the range 00:00:00..23:59:59, false
 * otherwise */
int timelib_valid_time(timelib_sll h, timelib_sll i, timelib_sll s);

/* Returns true if m fits in the range 1..12, and d fits in the range
 * 1..<days-in-month> for year y */
int timelib_valid_date(timelib_sll y, timelib_sll m, timelib_sll d);

/* From parse_date.re */

/* Parses the date/time string in 's' with length 'len' into the constituent
 * parts of timelib_time*.
 *
 * Depending on the contents of the string 's', not all elements might be
 * filled. You can check whether a specific element has been parsed by
 * comparing with the TIMELIB_UNSET define.
 *
 * If errors occur, this function keeps already parsed elements in the
 * returned timelib_time* value.
 *
 * If the **errors points to a timelib_error_container variable, warnings
 * and errors will be recorded. You are responsible for freeing the stored
 * information with timelib_error_container_dtor(). To see whether errors have
 * occurred, inspect errors->errors_count. To see whether warnings have occurred,
 * inspect errors->warnings_count.
 *
 * The returned timelib_time* value is dynamically allocated and should be
 * freed with timelib_time_dtor().
 */
timelib_time *timelib_strtotime(const char *s, size_t len, timelib_error_container **errors, const timelib_tzdb *tzdb, timelib_tz_get_wrapper tz_get_wrapper);

/* Parses the date/time string in 's' with length 'len' into the constituent
 * parts of timelib_time* according to the format in 'format'.
 *
 * Depending on the contents of the string 's', not all elements might be
 * filled. You can check whether a specific element has been parsed by
 * comparing with the TIMELIB_UNSET define.
 *
 * If errors occur, this function keeps already parsed elements in the
 * returned timelib_time* value.
 *
 * If the **errors points to a timelib_error_container variable, warnings
 * and errors will be recorded. You are responsible for freeing the stored
 * information with timelib_error_container_dtor(). To see whether errors have
 * occurred, inspect errors->errors_count. To see whether warnings have occurred,
 * inspect errors->warnings_count.
 *
 * The returned timelib_time* value is dynamically allocated and should be
 * freed with timelib_time_dtor().
 */
timelib_time *timelib_parse_from_format(const char *format, const char *s, size_t len, timelib_error_container **errors, const timelib_tzdb *tzdb, timelib_tz_get_wrapper tz_get_wrapper);

/* Parses the date/time string in 's' with length 'len' into the constituent
 * parts of timelib_time* according to the format in 'format' with format
 * specifier configuration 'format_config'.
 *
 * 'format_map' is an array of pairs, with the first element being the format
 * specifier as a character and the second element corresponds to the
 * representation of the specifier from the enum list
 * 'timelib_format_specifier_code'.
 *
 * Note: 'format_map' must be terminated with specifier '\0' to indicate to the
 * parser that there are no more format specifiers in the list.
 */
timelib_time *timelib_parse_from_format_with_map(const char *format, const char *s, size_t len, timelib_error_container **errors, const timelib_tzdb *tzdb, timelib_tz_get_wrapper tz_get_wrapper, const timelib_format_config* format_config);

/* Fills the gaps in the parsed timelib_time with information from the reference date/time in 'now'
 *
 * If any of the 'parsed' y, m, d, h, i or s parameters is unset (TIMELIB_UNSET):
 * - if microtime (us) is unset, then the us of the parsed time is set to 0.
 * - else if microtime (us) is unset and 'now'->'us' is set, use it, otherwise use 0.
 *
 * For either of the 'parsed' y, m, d, h, i, s, z (utc offset in seconds) or
 * dst is unset, set it to the corresponding value in 'now' if set, otherwise
 * set it to 0.
 *
 * It duplicates tz_abbr if unset in 'parsed' but set in 'now'.
 *
 * It duplicates tz_info if unset in 'parsed', but set in 'now' unless
 * TIMELIB_NO_CLONE is passed, in which case only the pointer in 'parsed' is
 * set to 'now'.
 *
 * If the option TIMELIB_OVERRIDE_TIME is passed and the parsed date/time has
 * no time portion, the function will ignore the time aspect in 'now' and
 * instead fill it with zeros.
 */
void timelib_fill_holes(timelib_time *parsed, timelib_time *now, int options);

/* Tries to convert a time zone abbreviation, gmtoffset and/or isdst flag
 * combination to a time zone identifier.
 *
 * If 'abbr' is either 'utc' or 'gmt' (case insensitve) then "UTC" is
 * returned.
 *
 * It first uses the data in the timezonemap.h file to find a matching
 * abbreviation/GMT offset combination. If not found, it uses the data in
 * fallbackmap.h to match only the GMT offset/isdst flag to try to find a
 * match. If nothing is found, NULL is returned.
 *
 * The returned char* is not duplicated, and should not be freed.
 */
const char *timelib_timezone_id_from_abbr(const char *abbr, timelib_long gmtoffset, int isdst);

/* Returns an array of known time zone abbreviations
 *
 * This file is generated from the time zone database through the
 * gettzmapping.php scripts, which requires that an up-to-date time zone
 * database is used with the PHP binary that runs the script.
 *
 * Each item in the returned list contains the abbreviation, a flag whether
 * it's an abbreviation used with DST, the UTC offset in seconds, and the name
 * of the time zone identifier that this abbreviation belongs to.
 *
 * The order for each specific abbreviation is controlled through the
 * preference list in the gettzmapping.php script. Time zones that match the
 * pattern ±\d{2,4} are excluded
 */
const timelib_tz_lookup_table *timelib_timezone_abbreviations_list(void);

/**
 * DEPRECATED, but still used by PHP.
 */
timelib_long timelib_parse_zone(const char **ptr, int *dst, timelib_time *t, int *tz_not_found, const timelib_tzdb *tzdb, timelib_tz_get_wrapper tz_wrapper);

/* From parse_iso_intervals.re */

/**
 * Parses a subset of an ISO 8601 intervals specification string into its
 * constituent parts.
 *
 * If the **errors points to a timelib_error_container variable, warnings
 * and errors will be recorded. You are responsible for freeing the stored
 * information with timelib_error_container_dtor(). To see whether errors have
 * occurred, inspect errors->errors_count. To see whether warnings have occurred,
 * inspect errors->warnings_count.
 */
void timelib_strtointerval(const char *s, size_t len,
                           timelib_time **begin, timelib_time **end,
                           timelib_rel_time **period, int *recurrences,
                           timelib_error_container **errors);


/* From tm2unixtime.c */

/**
 * Uses the y/m/d/h/i/s fields to calculate and store the equivalent timestamp
 * in the sse field.
 *
 * It uses the time zone information associated with 'time' to account for the
 * right UTC offset and/or DST rules. You can associate time zone information
 * with the timelib_set_timezone_* functions (see below).
 *
 * If the type is 'TIMELIB_ZONETYPE_ID' and there is no associated tzinfo, it
 * will use the second argument 'tzi' to provide the rules necessary to
 * calculate the right timestamp.
 */
void timelib_update_ts(timelib_time* time, timelib_tzinfo* tzi);

/**
 * Returns the number of days from the y/m/d fields of 'time' since the Unix
 * Epoch.
 */
timelib_sll timelib_epoch_days_from_time(timelib_time *time);

/**
 * Takes the information from the y/m/d/h/i/s fields and makes sure their
 * values are in the right range.
 *
 * If a value under- or overflows it will adjust the larger measure up (or
 * down). It also takes into account leap days.
 */
void timelib_do_normalize(timelib_time *base);

/**
 * Takes the information from the y/m/d/h/i/s fields of 'rt' and makes sure
 * their values are in the right range.
 *
 * If a value under- or overflows it will adjust the larger measure up (or
 * down). As this function operates on a *relative date/time*, it also takes
 * into account leap days and correctly accounts for the difference depending
 * on the base date/time in 'base'.
 */
void timelib_do_rel_normalize(timelib_time *base, timelib_rel_time *rt);

/* From unixtime2tm.c */

/**
 * Takes the unix timestamp in seconds from 'ts', and calculates y, m, and d,
 * in the proleptic Gregorian calendar.
 *
 * It uses the algorithm from howardhinnant.github.io/date_algorithms.html
 */
void timelib_unixtime2date(timelib_sll ts, timelib_sll *y, timelib_sll *m, timelib_sll *d);

/**
 * Takes the unix timestamp in seconds from 'ts' and populates the y/m/d/h/i/s
 * fields of 'tm' without taking time zones into account
 */
void timelib_unixtime2gmt(timelib_time* tm, timelib_sll ts);

/**
 * Takes the Unix timestamp from 'ts', and calculates the y/m/d/h/i/s fields
 * according to the time zone information attached to 'tm'.
 */
void timelib_unixtime2local(timelib_time *tm, timelib_sll ts);

/**
 * Takes the Unix timestamp stored in 'tm', and calculates the y/m/d/h/i/s
 * fields according to the time zone information attached to 'tm'.
 */
void timelib_update_from_sse(timelib_time *tm);

/**
 * Attaches the UTC offset as time zone information to 't'.
 *
 * 'utc_offset' is in seconds East of UTC.
 */
void timelib_set_timezone_from_offset(timelib_time *t, timelib_sll utc_offset);

/**
 * Attaches the information from 'abbr_info' as time zone information to 't'.
 *
 * The timelib_abbr_info struct contains an abbreviation ('abbr') which string
 * value is duplicated, as well as a 'utc_offset' and 'dst' flag. It only
 * supports a 'dst' change over of 1 hour.
 */
void timelib_set_timezone_from_abbr(timelib_time *t, timelib_abbr_info abbr_info);

/**
 * Attaches the time zone information in 'tz' to to 't'.
 *
 * It fetches the right UTC offset that is currently stored in the time
 * stamp field in 't' ('sse'), and assigns that to the 'z' field and 'dst'
 * field (whether DST is in effect at the time). It also sets the current
 * abbreviation to the 'tz_addr' field, making sure that if a value was already
 * set it was freed.
 *
 * The time zone information in 'tz' is *not* duplicated into the 't' field so
 * it should not be freed until all timelib_time* variables have been freed as
 * well.
 */
void timelib_set_timezone(timelib_time *t, timelib_tzinfo *tz);

/* From parse_tz.c */

/**
 * Returns whether the time zone ID 'timezone' is available in the time zone
 * database as pointed to be 'tzdb'.
 */
int timelib_timezone_id_is_valid(const char *timezone, const timelib_tzdb *tzdb);

/**
 * Converts the binary stored time zone information from 'tzdb' for the time
 * zone 'timezone' into a structure the library can use for calculations.
 *
 * The function can be used on both timelib_builtin_db as well as a time zone
 * db as opened by timelib_zoneinfo.
 *
 * 'error_code' must not be a null pointer, and will always be written to. If
 * the value is TIMELIB_ERROR_NO_ERROR then the file was parsed without
 * problems.
 *
 * The function will return null upon failure, and also set an error code
 * through 'error_code'.
 *
 * The error code is one of the TIMELIB_ERROR_* constants as listed above.
 * These error constants can be converted into a string by
 * timelib_get_error_message.
 *
 * If the function returns not-null, the 'error_code' might have a non-null
 * value that can be used to detect incompatibilities. The only one that is
 * currently detected is whether the file is a 'slim' file, in which case
 * 'error_code' will be set to TIMELIB_ERROR_SLIM_FILE.
 *
 * This function allocates memory for the new time zone structure, which must
 * be freed after use. Although it is recommended that a cache of each used
 * time zone is kept.
 */
timelib_tzinfo *timelib_parse_tzfile(const char *timezone, const timelib_tzdb *tzdb, int *error_code);

/**
 * Frees up the resources allocated by 'timelib_parse_tzfile'.
 */
void timelib_tzinfo_dtor(timelib_tzinfo *tz);

/**
 * Deep-clones a timelib_tzinfo structure.
 *
 * This allocates resources that need to be freed with 'timelib_tzinfo_dtor'
 */
timelib_tzinfo* timelib_tzinfo_clone(timelib_tzinfo *tz);

/**
 * Returns whether DST is active with time zone 'tz' for the time stamp 'ts'.
 *
 * Returns 0 if DST is not active, 1 if DST is active, or -1 if no transitions
 * were available through 'tz'.
 */
int timelib_timestamp_is_in_dst(timelib_sll ts, timelib_tzinfo *tz);

/**
 * Returns offset information with time zone 'tz' for the time stamp 'ts'.
 *
 * The returned information contains: the offset in seconds East of UTC (in
 * 'offset'), whether DST is active ('is_dst'), what the current time zone
 * abbreviation is ('abbr') and the transition time that got to this state (in
 * 'transition_time');
 */
timelib_time_offset *timelib_get_time_zone_info(timelib_sll ts, timelib_tzinfo *tz);

/**
 * Returns offset information with time zone 'tz' for the time stamp 'ts'.
 *
 * The returned information contains: the offset in seconds East of UTC (in
 * the output parameter 'offset'), whether DST is active (in the output
 * parameter 'is_dst'), and the transition time that got to this state (in
 * the output parameter 'transition_time'); if NULL is passed, the value is
 * not retrieved
 *
 * Returns 1 if successful, 0 for failure.
 */
int timelib_get_time_zone_offset_info(timelib_sll ts, timelib_tzinfo *tz, int32_t* offset, timelib_sll* transition_time, unsigned int* is_dst);

/**
 * Returns the UTC offset currently applicable for the information stored in 't'.
 *
 * The value returned is the UTC offset in seconds East.
 */
timelib_sll timelib_get_current_offset(timelib_time *t);

/**
 * Returns whether the timezone information in *one and *two are the same
 *
 * A timezone is considered the same if:
 * - the ->zone_type values are the same for *one and *two
 * - for TYPE_ABBR and TYPE_OFFSET, ->z + (->dst * 3600), is the same
 * - for TYPE_ID, the zone's names are the same
 */
int timelib_same_timezone(timelib_time *one, timelib_time *two);

/**
 * Displays debugging information about the time zone information in 'tz'.
 */
void timelib_dump_tzinfo(timelib_tzinfo *tz);

/**
 * Returns a pointer to the built-in time zone database.
 *
 * You must *not* free the returned pointer as it is part of the text segment.
 */
const timelib_tzdb *timelib_builtin_db(void);

/**
 * Returns a pointer to the start of an array containing a list of timezone identifiers.
 *
 * The amount of entries in the array is returned through the 'count' OUT parameter.
 *
 * Each entry contains the time zone ID ('id' field), and the position within the time zone
 * information ('pos' field). The pos field should not be used.
 */
const timelib_tzdb_index_entry *timelib_timezone_identifiers_list(const timelib_tzdb *tzdb, int *count);

/* From parse_zoneinfo.c */

/**
 * Scans the directory and subdirectories of 'directory' for valid time zone files and builds
 * a time zone database out of these files.
 *
 * Typically, the directory should point to '/usr/share/zoneinfo'.
 *
 * Unlike 'timelib_builtin_db', the return value of this function must be freed
 * with the 'timelib_zoneinfo_dtor' function.
 */
timelib_tzdb *timelib_zoneinfo(const char *directory);

/**
 * Frees up the resources as created through 'timelib_zoneinfo'.
 *
 * This function must be used to free up all the resources that have been
 * allocated while calling 'timelib_zoneinfo'.
 */
void timelib_zoneinfo_dtor(timelib_tzdb *tzdb);

/* From timelib.c */

/**
 * Returns a static string containing an error message belonging to a specific
 * error code.
 */
const char *timelib_get_error_message(int error_code);

/**
 * Allocates resources for the relative time structure.
 *
 * Must be freed with 'timelib_rel_time_dtor'.
 */
timelib_rel_time* timelib_rel_time_ctor(void);

/**
 * Frees up the resources as allocated through 'timelib_rel_time_ctor'.
 */
void timelib_rel_time_dtor(timelib_rel_time* t);

/**
 * Creates a new timelib_rel_time resource and copies over the information
 * from 'tz'.
 *
 * Must be freed with 'timelib_rel_time_dtor'.
 */
timelib_rel_time* timelib_rel_time_clone(timelib_rel_time *tz);

/**
 * Allocates resources for the time structure.
 *
 * Must be freed with 'timelib_time_dtor'.
 */
timelib_time* timelib_time_ctor(void);

/**
 * Frees up the resources as allocated through 'timelib_time_ctor'.
 */
void timelib_time_dtor(timelib_time* t);

/**
 * Creates a new timelib_time resource and copies over the information
 * from 'orig'.
 *
 * Must be freed with 'timelib_time_dtor'.
 */
timelib_time* timelib_time_clone(timelib_time* orig);

/**
 * Compares two timelib_time structures and returns which one is earlier in
 * time.
 *
 * To decide which comes earlier it uses the 'sse' (Seconds Since Epoch) and
 * 'us' (microseconds) fields.
 *
 * Returns -1 if t1 < t2, 0 if t1 == t2, and -1 if t1 > t2.
 */
int timelib_time_compare(timelib_time *t1, timelib_time *t2);

/**
 * Allocates resources for the time offset structure.
 *
 * Must be freed with 'timelib_time_offset_dtor'.
 */
timelib_time_offset* timelib_time_offset_ctor(void);

/**
 * Frees up the resources as allocated through 'timelib_time_offset_ctor'.
 */
void timelib_time_offset_dtor(timelib_time_offset* t);

/**
 * Frees up the resources allocated while converting strings to timelib_time
 * structures with the timelib_strtotime and timelib_strtointerval functions.
 */
void timelib_error_container_dtor(timelib_error_container *errors);

/**
 * Converts the 'sse' value of 'd' to a timelib_long type.
 *
 * If the value fits in the TIMELIB_LONG_MIN and TIMELIB_LONG_MAX range, the
 * value is cast to (timelib_long) and returned. If *error is not a NULL
 * pointer, it will be set to 0.
 *
 * If the value does *not* fit in the range, the function returns 0 and if
 * *error is not a NULL pointer, it will be set to 1.
 *
 * timelib_long is a 32 bit signed long integer on 32 bit platforms, and a 64
 * bit signed long long integer on 64 bit platforms. In other words, it makes
 * sure that the value in 'sse' (which is always a signed long long 64 bit
 * integer) can be used safely outside of the library.
 */
timelib_long timelib_date_to_int(timelib_time *d, int *error);

/**
 * Displays debugging information about the date/time information stored in 'd'.
 *
 * 'options' is a bit field, where:
 * - 1 controls whether the relative time portion is shown.
 * - 2 controls whether the zone type is shown.
 */
void timelib_dump_date(timelib_time *d, int options);

/**
 * Displays debugging information about the relative time information stored
 * in 'd'.
 */
void timelib_dump_rel_time(timelib_rel_time *d);

/**
 * Converts a decimal hour into hour/min/sec components
 */
void timelib_decimal_hour_to_hms(double h, int *hour, int *min, int *sec);

/**
 * Converts hour/min/sec values into a decimal hour
 */
void timelib_hms_to_decimal_hour(int hour, int min, int sec, double *h);

/**
 * Converts hour/min/sec/micro sec values into a decimal hour
 */
void timelib_hmsf_to_decimal_hour(int hour, int min, int sec, int us, double *h);

/**
 * Converts hour/min/sec values into seconds
 */
timelib_sll timelib_hms_to_seconds(timelib_sll h, timelib_sll m, timelib_sll s);


/* from astro.c */

/**
 * Converts the Unix Epoch time stamp 'ts' to a Julian Day
 *
 * The value returned is the number of whole days since -4714-11-24T12:00:00 UTC
 * (in the proleptic Gregorian calendar):
 * https://en.wikipedia.org/wiki/Julian_day
 */
double timelib_ts_to_julianday(timelib_sll ts);

/**
 * Converts the Unix Epoch time stamp 'ts' to the J2000 epoch
 *
 * The value returned is the number of whole days since 2000-01-01T12:00:00
 * UTC: https://en.wikipedia.org/wiki/Epoch_(astronomy)#Julian_years_and_J2000
 */
double timelib_ts_to_j2000(timelib_sll ts);

/**
 * Calculates when the Sun is above a certain latitude.
 *
 * Parameters:
 * - time: A timelib_time time describing that needs to specific midnight for a
 *         specific day.
 * - lon: The longitude of the observer (East positive, West negative).
 * - lat: The latitude of the observer (North positive, South negative).
 * - altit: The altitude. Set to -35/60 for rise/set, -6 for civil twilight,
 *          -12 for nautical, and -18 for astronomical twilight.
 * - upper_limb: set to non-zero for rise/set calculations, and 0 for twilight
 *               calculations.
 *
 * Out Parameters:
 * - h_rise: The decimal hour when the Sun rises
 * - h_set: The decimal hour when the Sun sets
 * - ts_rise: The Unix timestamp of the Sun rising
 * - ts_set: The Unix timestamp of the Sun setting
 * - ts_transit: The Unix timestmap of the Sun transitting through South
 *
 * Return Values:
 * - 0: The Sun rises and sets.
 * - +1: The Sun is always above the horizon. (ts_rise is set to ts_transit -
 *       (12 * 3600); ts_set is set to ts_transit + (12 * 3600).
 * - -1: The Sun is awlays below the horizon. (ts_rise and ts_set are set
 *       to ts_transit)
 */
int timelib_astro_rise_set_altitude(timelib_time *time, double lon, double lat, double altit, int upper_limb, double *h_rise, double *h_set, timelib_sll *ts_rise, timelib_sll *ts_set, timelib_sll *ts_transit);

/* from interval.c */

/**
 * Calculates the difference between two times
 *
 * The result is a timelib_rel_time structure that describes how you can
 * convert from 'one' to 'two' with 'timelib_add'. This does *not* necessarily
 * mean that you can go from 'two' to 'one' by using 'timelib_sub' due to the
 * way months and days are calculated.
 */
timelib_rel_time *timelib_diff(timelib_time *one, timelib_time *two);

/**
 * Calculates the difference in full days between two times
 *
 * The result is the number of full days between 'one' and 'two'. It does take
 * into account 23 and 25 hour (and variants) days when the zone_type
 * is TIMELIB_ZONETYPE_ID and have the same TZID for 'one' and 'two'.
 */
int timelib_diff_days(timelib_time *one, timelib_time *two);

/**
 * Adds the relative time information 'interval' to the base time 't'.
 *
 * This can be a relative time as created by 'timelib_diff', but also by more
 * complex statements such as "next workday".
 */
timelib_time *timelib_add(timelib_time *t, timelib_rel_time *interval);
timelib_time *timelib_add_wall(timelib_time *t, timelib_rel_time *interval);

/**
 * Subtracts the relative time information 'interval' to the base time 't'.
 *
 * This can be a relative time as created by 'timelib_diff'. Unlike with
 * 'timelib_add', this does not support more complex statements such as "next
 * workday".
 */
timelib_time *timelib_sub(timelib_time *t, timelib_rel_time *interval);
timelib_time *timelib_sub_wall(timelib_time *t, timelib_rel_time *interval);

/* from parse_posix.c */

void timelib_posix_str_dtor(timelib_posix_str *ps);

timelib_posix_str* timelib_parse_posix_str(const char *posix);

/**
 * Calculate the two yearly to/from DST
 */
void timelib_get_transitions_for_year(timelib_tzinfo *tz, timelib_sll year, timelib_posix_transitions *transitions);


#ifdef __cplusplus
} /* extern "C" */
#endif

#endif
ext/gd/php_gd.h000064400000007741151730542470007371 0ustar00/*
   +----------------------------------------------------------------------+
   | Copyright (c) The PHP Group                                          |
   +----------------------------------------------------------------------+
   | This source file is subject to version 3.01 of the PHP license,      |
   | that is bundled with this package in the file LICENSE, and is        |
   | available through the world-wide-web at the following url:           |
   | https://www.php.net/license/3_01.txt                                 |
   | If you did not receive a copy of the PHP license and are unable to   |
   | obtain it through the world-wide-web, please send a note to          |
   | license@php.net so we can mail you a copy immediately.               |
   +----------------------------------------------------------------------+
   | Authors: Rasmus Lerdorf <rasmus@php.net>                             |
   |          Stig Bakken <ssb@php.net>                                   |
   +----------------------------------------------------------------------+
*/

#ifndef PHP_GD_H
#define PHP_GD_H

#include "zend_string.h"
#include "php_streams.h"

#if defined(HAVE_LIBGD) || defined(HAVE_GD_BUNDLED)

#define PHP_GD_CHECK_OPEN_BASEDIR(filename, errormsg)                       \
	if (!filename || php_check_open_basedir(filename)) {      \
		php_error_docref(NULL, E_WARNING, errormsg);      \
		RETURN_FALSE;                                               \
	}

#define PHP_GDIMG_TYPE_GIF      1
#define PHP_GDIMG_TYPE_PNG      2
#define PHP_GDIMG_TYPE_JPG      3
#define PHP_GDIMG_TYPE_WBM      4
#define PHP_GDIMG_TYPE_XBM      5
#define PHP_GDIMG_TYPE_XPM      6
#define PHP_GDIMG_TYPE_GD       8
#define PHP_GDIMG_TYPE_GD2      9
#define PHP_GDIMG_TYPE_GD2PART  10
#define PHP_GDIMG_TYPE_WEBP     11
#define PHP_GDIMG_TYPE_BMP      12
#define PHP_GDIMG_TYPE_TGA      13
#define PHP_GDIMG_TYPE_AVIF     14

#define PHP_IMG_GIF    1
#define PHP_IMG_JPG    2
#define PHP_IMG_JPEG   2
#define PHP_IMG_PNG    4
#define PHP_IMG_WBMP   8
#define PHP_IMG_XPM   16
#define PHP_IMG_WEBP  32
#define PHP_IMG_BMP   64
#define PHP_IMG_TGA  128
#define PHP_IMG_AVIF 256

/* Section Filters Declarations */
/* IMPORTANT NOTE FOR NEW FILTER
 * Do not forget to update:
 * IMAGE_FILTER_MAX: define the last filter index
 * IMAGE_FILTER_MAX_ARGS: define the biggest amount of arguments
 * image_filter array in PHP_FUNCTION(imagefilter)
 * */
#define IMAGE_FILTER_NEGATE         0
#define IMAGE_FILTER_GRAYSCALE      1
#define IMAGE_FILTER_BRIGHTNESS     2
#define IMAGE_FILTER_CONTRAST       3
#define IMAGE_FILTER_COLORIZE       4
#define IMAGE_FILTER_EDGEDETECT     5
#define IMAGE_FILTER_EMBOSS         6
#define IMAGE_FILTER_GAUSSIAN_BLUR  7
#define IMAGE_FILTER_SELECTIVE_BLUR 8
#define IMAGE_FILTER_MEAN_REMOVAL   9
#define IMAGE_FILTER_SMOOTH         10
#define IMAGE_FILTER_PIXELATE       11
#define IMAGE_FILTER_SCATTER		12
#define IMAGE_FILTER_MAX            12
#define IMAGE_FILTER_MAX_ARGS       6

#ifdef HAVE_GD_BUNDLED
#define GD_BUNDLED 1
#else
#define GD_BUNDLED 0
#endif

#ifdef PHP_WIN32
#	ifdef PHP_GD_EXPORTS
#		define PHP_GD_API __declspec(dllexport)
#	else
#		define PHP_GD_API __declspec(dllimport)
#	endif
#elif defined(__GNUC__) && __GNUC__ >= 4
#	define PHP_GD_API __attribute__ ((visibility("default")))
#else
#	define PHP_GD_API
#endif

PHPAPI extern const char php_sig_gif[3];
PHPAPI extern const char php_sig_jpg[3];
PHPAPI extern const char php_sig_png[8];
PHPAPI extern const char php_sig_bmp[2];
PHPAPI extern const char php_sig_riff[4];
PHPAPI extern const char php_sig_webp[4];
PHPAPI extern const char php_sig_avif[4];

extern zend_module_entry gd_module_entry;
#define phpext_gd_ptr &gd_module_entry

#include "php_version.h"
#define PHP_GD_VERSION PHP_VERSION

/* gd.c functions */
PHP_MINFO_FUNCTION(gd);
PHP_MINIT_FUNCTION(gd);
PHP_MSHUTDOWN_FUNCTION(gd);
PHP_RSHUTDOWN_FUNCTION(gd);

PHP_GD_API struct gdImageStruct *php_gd_libgdimageptr_from_zval_p(zval* zp);

#else

#define phpext_gd_ptr NULL

#endif

#endif /* PHP_GD_H */
ext/dom/xpath_callbacks.h000064400000007770151730542470011442 0ustar00/*
   +----------------------------------------------------------------------+
   | Copyright (c) The PHP Group                                          |
   +----------------------------------------------------------------------+
   | This source file is subject to version 3.01 of the PHP license,      |
   | that is bundled with this package in the file LICENSE, and is        |
   | available through the world-wide-web at the following url:           |
   | https://www.php.net/license/3_01.txt                                 |
   | If you did not receive a copy of the PHP license and are unable to   |
   | obtain it through the world-wide-web, please send a note to          |
   | license@php.net so we can mail you a copy immediately.               |
   +----------------------------------------------------------------------+
   | Authors: Niels Dossche <nielsdos@php.net>                            |
   +----------------------------------------------------------------------+
*/

#ifndef PHP_DOM_XPATH_CALLBACKS_H
#define PHP_DOM_XPATH_CALLBACKS_H

#include <libxml/xpathInternals.h>
#include "xml_common.h"

typedef enum {
	PHP_DOM_REG_FUNC_MODE_NONE = 0,
	PHP_DOM_REG_FUNC_MODE_ALL,
	PHP_DOM_REG_FUNC_MODE_SET,
} php_dom_register_functions_mode;

typedef enum {
	PHP_DOM_XPATH_EVALUATE_NODESET_TO_STRING,
	PHP_DOM_XPATH_EVALUATE_NODESET_TO_NODESET,
} php_dom_xpath_nodeset_evaluation_mode;

typedef void (*php_dom_xpath_callbacks_proxy_factory)(xmlNodePtr node, zval *proxy, dom_object *intern, xmlXPathParserContextPtr ctxt);
typedef void (*php_dom_xpath_callbacks_register_func_ctx)(void *ctxt, const zend_string *ns, const zend_string *name);

typedef struct {
	HashTable functions;
	php_dom_register_functions_mode mode;
} php_dom_xpath_callback_ns;

typedef struct {
	php_dom_xpath_callback_ns *php_ns;
	HashTable *namespaces;
	HashTable *node_list;
} php_dom_xpath_callbacks;

typedef enum {
	PHP_DOM_XPATH_CALLBACK_NAME_VALIDATE_NULLS,
	PHP_DOM_XPATH_CALLBACK_NAME_VALIDATE_NCNAME,
} php_dom_xpath_callback_name_validation;

PHP_DOM_EXPORT void php_dom_xpath_callbacks_ctor(php_dom_xpath_callbacks *registry);
PHP_DOM_EXPORT void php_dom_xpath_callbacks_dtor(php_dom_xpath_callbacks *registry);
PHP_DOM_EXPORT void php_dom_xpath_callbacks_clean_node_list(php_dom_xpath_callbacks *registry);
PHP_DOM_EXPORT void php_dom_xpath_callbacks_clean_argument_stack(xmlXPathParserContextPtr ctxt, uint32_t num_args);
PHP_DOM_EXPORT void php_dom_xpath_callbacks_get_gc(php_dom_xpath_callbacks *registry, zend_get_gc_buffer *gc_buffer);
PHP_DOM_EXPORT HashTable *php_dom_xpath_callbacks_get_gc_for_whole_object(php_dom_xpath_callbacks *registry, zend_object *object, zval **table, int *n);
PHP_DOM_EXPORT void php_dom_xpath_callbacks_delayed_lib_registration(const php_dom_xpath_callbacks* registry, void *ctxt, php_dom_xpath_callbacks_register_func_ctx register_func);
PHP_DOM_EXPORT zend_result php_dom_xpath_callbacks_update_method_handler(php_dom_xpath_callbacks* registry, xmlXPathContextPtr ctxt, zend_string *ns, zend_string *name, const HashTable *callable_ht, php_dom_xpath_callback_name_validation name_validation, php_dom_xpath_callbacks_register_func_ctx register_func);
PHP_DOM_EXPORT zend_result php_dom_xpath_callbacks_update_single_method_handler(php_dom_xpath_callbacks* registry, xmlXPathContextPtr ctxt, zend_string *ns, zend_string *name, const zend_fcall_info_cache *fcc, php_dom_xpath_callback_name_validation name_validation, php_dom_xpath_callbacks_register_func_ctx register_func);
PHP_DOM_EXPORT zend_result php_dom_xpath_callbacks_call_php_ns(php_dom_xpath_callbacks *xpath_callbacks, xmlXPathParserContextPtr ctxt, int num_args, php_dom_xpath_nodeset_evaluation_mode evaluation_mode, dom_object *intern, php_dom_xpath_callbacks_proxy_factory proxy_factory);
PHP_DOM_EXPORT zend_result php_dom_xpath_callbacks_call_custom_ns(php_dom_xpath_callbacks *xpath_callbacks, xmlXPathParserContextPtr ctxt, int num_args, php_dom_xpath_nodeset_evaluation_mode evaluation_mode, dom_object *intern, php_dom_xpath_callbacks_proxy_factory proxy_factory);

#endif
ext/dom/namespace_compat.h000064400000010204151730542470011600 0ustar00/*
   +----------------------------------------------------------------------+
   | Copyright (c) The PHP Group                                          |
   +----------------------------------------------------------------------+
   | This source file is subject to version 3.01 of the PHP license,      |
   | that is bundled with this package in the file LICENSE, and is        |
   | available through the world-wide-web at the following url:           |
   | https://www.php.net/license/3_01.txt                                 |
   | If you did not receive a copy of the PHP license and are unable to   |
   | obtain it through the world-wide-web, please send a note to          |
   | license@php.net so we can mail you a copy immediately.               |
   +----------------------------------------------------------------------+
   | Authors: Niels Dossche <nielsdos@php.net>                            |
   +----------------------------------------------------------------------+
*/

#ifndef NAMESPACE_COMPAT_H
#define NAMESPACE_COMPAT_H

#include "xml_common.h"

/* https://infra.spec.whatwg.org/#namespaces */
#define DOM_XHTML_NS_URI "http://www.w3.org/1999/xhtml"
#define DOM_MATHML_NS_URI "http://www.w3.org/1998/Math/MathML"
#define DOM_SVG_NS_URI "http://www.w3.org/2000/svg"
#define DOM_XLINK_NS_URI "http://www.w3.org/1999/xlink"
#define DOM_XML_NS_URI "http://www.w3.org/XML/1998/namespace"
#define DOM_XMLNS_NS_URI "http://www.w3.org/2000/xmlns/"

struct php_dom_ns_magic_token;
typedef struct php_dom_ns_magic_token php_dom_ns_magic_token;

struct php_dom_libxml_ns_mapper;
typedef struct php_dom_libxml_ns_mapper php_dom_libxml_ns_mapper;

PHP_DOM_EXPORT extern const php_dom_ns_magic_token *php_dom_ns_is_html_magic_token;
PHP_DOM_EXPORT extern const php_dom_ns_magic_token *php_dom_ns_is_mathml_magic_token;
PHP_DOM_EXPORT extern const php_dom_ns_magic_token *php_dom_ns_is_svg_magic_token;
PHP_DOM_EXPORT extern const php_dom_ns_magic_token *php_dom_ns_is_xlink_magic_token;
PHP_DOM_EXPORT extern const php_dom_ns_magic_token *php_dom_ns_is_xml_magic_token;
PHP_DOM_EXPORT extern const php_dom_ns_magic_token *php_dom_ns_is_xmlns_magic_token;

/* These functions make it possible to make a namespace declaration also visible as an attribute by
 * creating an equivalent attribute node. */

PHP_DOM_EXPORT xmlNsPtr php_dom_libxml_ns_mapper_ensure_html_ns(php_dom_libxml_ns_mapper *mapper);
PHP_DOM_EXPORT xmlNsPtr php_dom_libxml_ns_mapper_ensure_prefixless_xmlns_ns(php_dom_libxml_ns_mapper *mapper);
PHP_DOM_EXPORT xmlNsPtr php_dom_libxml_ns_mapper_get_ns(php_dom_libxml_ns_mapper *mapper, zend_string *prefix, zend_string *uri);
PHP_DOM_EXPORT xmlNsPtr php_dom_libxml_ns_mapper_get_ns_raw_prefix_string(php_dom_libxml_ns_mapper *mapper, const xmlChar *prefix, size_t prefix_len, zend_string *uri);
PHP_DOM_EXPORT xmlNsPtr php_dom_libxml_ns_mapper_get_ns_raw_strings_nullsafe(php_dom_libxml_ns_mapper *mapper, const char *prefix, const char *uri);

PHP_DOM_EXPORT php_dom_libxml_ns_mapper *php_dom_get_ns_mapper(dom_object *object);
PHP_DOM_EXPORT void php_dom_ns_compat_mark_attribute_list(php_dom_libxml_ns_mapper *mapper, xmlNodePtr node);
PHP_DOM_EXPORT void php_dom_libxml_reconcile_modern(php_dom_libxml_ns_mapper *ns_mapper, xmlNodePtr node);
PHP_DOM_EXPORT void php_dom_reconcile_attribute_namespace_after_insertion(xmlAttrPtr attrp);
PHP_DOM_EXPORT xmlAttrPtr php_dom_ns_compat_mark_attribute(php_dom_libxml_ns_mapper *mapper, xmlNodePtr node, xmlNsPtr ns);

PHP_DOM_EXPORT bool php_dom_ns_is_fast(const xmlNode *nodep, const php_dom_ns_magic_token *magic_token);
PHP_DOM_EXPORT bool php_dom_ns_is_fast_ex(xmlNsPtr ns, const php_dom_ns_magic_token *magic_token);
PHP_DOM_EXPORT bool php_dom_ns_is_html_and_document_is_html(const xmlNode *nodep);

typedef struct php_dom_in_scope_ns {
   xmlNsPtr *list;
   size_t count;
   bool origin_is_ns_compat;
} php_dom_in_scope_ns;

PHP_DOM_EXPORT php_dom_in_scope_ns php_dom_get_in_scope_ns(php_dom_libxml_ns_mapper *ns_mapper, const xmlNode *node, bool ignore_elements);
PHP_DOM_EXPORT php_dom_in_scope_ns php_dom_get_in_scope_ns_legacy(const xmlNode *node);
PHP_DOM_EXPORT void php_dom_in_scope_ns_destroy(php_dom_in_scope_ns *in_scope_ns);

#endif
ext/dom/xml_common.h000064400000010456151730542500010454 0ustar00/*
  +----------------------------------------------------------------------+
  | Copyright (c) The PHP Group                                          |
  +----------------------------------------------------------------------+
  | This source file is subject to version 3.01 of the PHP license,      |
  | that is bundled with this package in the file LICENSE, and is        |
  | available through the world-wide-web at the following url:           |
  | https://www.php.net/license/3_01.txt                                 |
  | If you did not receive a copy of the PHP license and are unable to   |
  | obtain it through the world-wide-web, please send a note to          |
  | license@php.net so we can mail you a copy immediately.               |
  +----------------------------------------------------------------------+
  | Authors: Christian Stocker <chregu@php.net>                          |
  |          Rob Richards <rrichards@php.net>                            |
  +----------------------------------------------------------------------+
*/

#ifndef PHP_XML_COMMON_H
#define PHP_XML_COMMON_H

#include "ext/libxml/php_libxml.h"

typedef libxml_doc_props *dom_doc_propsptr;

typedef struct _dom_object {
	void *ptr;
	php_libxml_ref_obj *document;
	HashTable *prop_handler;
	zend_object std;
} dom_object;

static inline dom_object *php_dom_obj_from_obj(zend_object *obj) {
	return (dom_object*)((char*)(obj) - XtOffsetOf(dom_object, std));
}

#define Z_DOMOBJ_P(zv)  php_dom_obj_from_obj(Z_OBJ_P((zv)))

#ifdef PHP_WIN32
#	ifdef DOM_EXPORTS
#		define PHP_DOM_EXPORT __declspec(dllexport)
#	elif !defined(DOM_LOCAL_DEFINES) /* Allow to counteract LNK4049 warning. */
#		define PHP_DOM_EXPORT __declspec(dllimport)
#   else
#		define PHP_DOM_EXPORT
#	endif /* DOM_EXPORTS */
#elif defined(__GNUC__) && __GNUC__ >= 4
#	define PHP_DOM_EXPORT __attribute__ ((visibility("default")))
#elif defined(PHPAPI)
#   define PHP_DOM_EXPORT PHPAPI
#else
#   define PHP_DOM_EXPORT
#endif

PHP_DOM_EXPORT extern zend_class_entry *dom_node_class_entry;
PHP_DOM_EXPORT dom_object *php_dom_object_get_data(xmlNodePtr obj);
PHP_DOM_EXPORT bool php_dom_create_object(xmlNodePtr obj, zval* return_value, dom_object *domobj);
PHP_DOM_EXPORT xmlNodePtr dom_object_get_node(dom_object *obj);

#define NODE_GET_OBJ(__ptr, __id, __prtype, __intern) { \
	__intern = Z_LIBXML_NODE_P(__id); \
	if (UNEXPECTED(__intern->node == NULL)) { \
		php_error_docref(NULL, E_WARNING, "Couldn't fetch %s", \
			ZSTR_VAL(Z_OBJCE_P(__zv)->name));\
		RETURN_NULL();\
	} \
	__ptr = (__prtype)__intern->node->node; \
}

#define DOC_GET_OBJ(__ptr, __id, __prtype, __intern) { \
	__intern = Z_LIBXML_NODE_P(__id); \
	if (EXPECTED(__intern->document != NULL)) { \
		__ptr = (__prtype)__intern->document->ptr); \
	} \
}

#define DOM_RET_OBJ(obj, domobject) \
	php_dom_create_object(obj, return_value, domobject)

#define DOM_GET_THIS_OBJ(__ptr, __id, __prtype, __intern) \
	__id = ZEND_THIS; \
	DOM_GET_OBJ(__ptr, __id, __prtype, __intern);

struct php_dom_private_data;
typedef struct php_dom_private_data php_dom_private_data;

static zend_always_inline php_dom_private_data *php_dom_get_private_data(dom_object *intern)
{
	ZEND_ASSERT(intern->document != NULL);
	return (php_dom_private_data *) intern->document->private_data;
}

static zend_always_inline xmlNodePtr php_dom_next_in_tree_order(const xmlNode *nodep, const xmlNode *basep)
{
	if (nodep->type == XML_ELEMENT_NODE && nodep->children) {
		return nodep->children;
	}

	if (nodep->next) {
		return nodep->next;
	} else {
		/* Go upwards, until we find a parent node with a next sibling, or until we hit the base. */
		do {
			nodep = nodep->parent;
			if (nodep == basep) {
				return NULL;
			}
			/* This shouldn't happen, unless there's an invalidation bug somewhere. */
			if (UNEXPECTED(nodep == NULL)) {
				zend_throw_error(NULL, "Current node in traversal is not in the document. Please report this as a bug in php-src.");
				return NULL;
			}
		} while (nodep->next == NULL);
		return nodep->next;
	}
}

static zend_always_inline bool php_dom_follow_spec_doc_ref(const php_libxml_ref_obj *document)
{
	return document != NULL && document->class_type == PHP_LIBXML_CLASS_MODERN;
}

static zend_always_inline bool php_dom_follow_spec_intern(const dom_object *intern)
{
	ZEND_ASSERT(intern != NULL);
	return php_dom_follow_spec_doc_ref(intern->document);
}

#endif
ext/dom/dom_ce.h000064400000011215151730542500007524 0ustar00/*
   +----------------------------------------------------------------------+
   | Copyright (c) The PHP Group                                          |
   +----------------------------------------------------------------------+
   | This source file is subject to version 3.01 of the PHP license,      |
   | that is bundled with this package in the file LICENSE, and is        |
   | available through the world-wide-web at the following url:           |
   | https://www.php.net/license/3_01.txt                                 |
   | If you did not receive a copy of the PHP license and are unable to   |
   | obtain it through the world-wide-web, please send a note to          |
   | license@php.net so we can mail you a copy immediately.               |
   +----------------------------------------------------------------------+
   | Authors: Christian Stocker <chregu@php.net>                          |
   |          Rob Richards <rrichards@php.net>                            |
   +----------------------------------------------------------------------+
*/

#ifndef DOM_CE_H
#define DOM_CE_H

extern PHP_DOM_EXPORT zend_class_entry *dom_node_class_entry;
extern PHP_DOM_EXPORT zend_class_entry *dom_modern_node_class_entry;
extern PHP_DOM_EXPORT zend_class_entry *dom_domexception_class_entry;
extern PHP_DOM_EXPORT zend_class_entry *dom_parentnode_class_entry;
extern PHP_DOM_EXPORT zend_class_entry *dom_modern_parentnode_class_entry;
extern PHP_DOM_EXPORT zend_class_entry *dom_childnode_class_entry;
extern PHP_DOM_EXPORT zend_class_entry *dom_modern_childnode_class_entry;
extern PHP_DOM_EXPORT zend_class_entry *dom_domimplementation_class_entry;
extern PHP_DOM_EXPORT zend_class_entry *dom_modern_domimplementation_class_entry;
extern PHP_DOM_EXPORT zend_class_entry *dom_documentfragment_class_entry;
extern PHP_DOM_EXPORT zend_class_entry *dom_modern_documentfragment_class_entry;
extern PHP_DOM_EXPORT zend_class_entry *dom_document_class_entry;
extern PHP_DOM_EXPORT zend_class_entry *dom_html_document_class_entry;
extern PHP_DOM_EXPORT zend_class_entry *dom_xml_document_class_entry;
extern PHP_DOM_EXPORT zend_class_entry *dom_nodelist_class_entry;
extern PHP_DOM_EXPORT zend_class_entry *dom_modern_nodelist_class_entry;
extern PHP_DOM_EXPORT zend_class_entry *dom_namednodemap_class_entry;
extern PHP_DOM_EXPORT zend_class_entry *dom_modern_namednodemap_class_entry;
extern PHP_DOM_EXPORT zend_class_entry *dom_modern_dtd_namednodemap_class_entry;
extern PHP_DOM_EXPORT zend_class_entry *dom_html_collection_class_entry;
extern PHP_DOM_EXPORT zend_class_entry *dom_characterdata_class_entry;
extern PHP_DOM_EXPORT zend_class_entry *dom_modern_characterdata_class_entry;
extern PHP_DOM_EXPORT zend_class_entry *dom_attr_class_entry;
extern PHP_DOM_EXPORT zend_class_entry *dom_modern_attr_class_entry;
extern PHP_DOM_EXPORT zend_class_entry *dom_element_class_entry;
extern PHP_DOM_EXPORT zend_class_entry *dom_modern_element_class_entry;
extern PHP_DOM_EXPORT zend_class_entry *dom_html_element_class_entry;
extern PHP_DOM_EXPORT zend_class_entry *dom_text_class_entry;
extern PHP_DOM_EXPORT zend_class_entry *dom_modern_text_class_entry;
extern PHP_DOM_EXPORT zend_class_entry *dom_comment_class_entry;
extern PHP_DOM_EXPORT zend_class_entry *dom_modern_comment_class_entry;
extern PHP_DOM_EXPORT zend_class_entry *dom_cdatasection_class_entry;
extern PHP_DOM_EXPORT zend_class_entry *dom_modern_cdatasection_class_entry;
extern PHP_DOM_EXPORT zend_class_entry *dom_documenttype_class_entry;
extern PHP_DOM_EXPORT zend_class_entry *dom_modern_documenttype_class_entry;
extern PHP_DOM_EXPORT zend_class_entry *dom_notation_class_entry;
extern PHP_DOM_EXPORT zend_class_entry *dom_modern_notation_class_entry;
extern PHP_DOM_EXPORT zend_class_entry *dom_entity_class_entry;
extern PHP_DOM_EXPORT zend_class_entry *dom_modern_entity_class_entry;
extern PHP_DOM_EXPORT zend_class_entry *dom_entityreference_class_entry;
extern PHP_DOM_EXPORT zend_class_entry *dom_modern_entityreference_class_entry;
extern PHP_DOM_EXPORT zend_class_entry *dom_processinginstruction_class_entry;
extern PHP_DOM_EXPORT zend_class_entry *dom_modern_processinginstruction_class_entry;
extern PHP_DOM_EXPORT zend_class_entry *dom_abstract_base_document_class_entry;
extern PHP_DOM_EXPORT zend_class_entry *dom_token_list_class_entry;
#ifdef LIBXML_XPATH_ENABLED
extern PHP_DOM_EXPORT zend_class_entry *dom_xpath_class_entry;
extern PHP_DOM_EXPORT zend_class_entry *dom_modern_xpath_class_entry;
#endif
extern PHP_DOM_EXPORT zend_class_entry *dom_namespace_node_class_entry;
extern PHP_DOM_EXPORT zend_class_entry *dom_adjacent_position_class_entry;
extern PHP_DOM_EXPORT zend_class_entry *dom_namespace_info_class_entry;

#endif /* DOM_CE_H */
ext/standard/dl_arginfo.h000064400000000416151730542510011425 0ustar00/* This is a generated file, edit the .stub.php file instead.
 * Stub hash: 7dac6edd98e3e17669ae4bf0be7db89678059ca0 */

ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_dl, 0, 1, _IS_BOOL, 0)
	ZEND_ARG_TYPE_INFO(0, extension_filename, IS_STRING, 0)
ZEND_END_ARG_INFO()

ext/standard/credits.h000064400000003032151730542510010753 0ustar00/*
   +----------------------------------------------------------------------+
   | Copyright (c) The PHP Group                                          |
   +----------------------------------------------------------------------+
   | This source file is subject to version 3.01 of the PHP license,      |
   | that is bundled with this package in the file LICENSE, and is        |
   | available through the world-wide-web at the following url:           |
   | https://www.php.net/license/3_01.txt                                 |
   | If you did not receive a copy of the PHP license and are unable to   |
   | obtain it through the world-wide-web, please send a note to          |
   | license@php.net so we can mail you a copy immediately.               |
   +----------------------------------------------------------------------+
   | Authors: Rasmus Lerdorf <rasmus@php.net>                             |
   |          Zeev Suraski <zeev@php.net>                                 |
   +----------------------------------------------------------------------+
*/

#ifndef CREDITS_H
#define CREDITS_H

#ifndef HAVE_CREDITS_DEFS
#define HAVE_CREDITS_DEFS

#define PHP_CREDITS_GROUP			(1<<0)
#define PHP_CREDITS_GENERAL			(1<<1)
#define PHP_CREDITS_SAPI			(1<<2)
#define PHP_CREDITS_MODULES			(1<<3)
#define PHP_CREDITS_DOCS			(1<<4)
#define PHP_CREDITS_FULLPAGE		(1<<5)
#define PHP_CREDITS_QA				(1<<6)
#define PHP_CREDITS_WEB				(1<<7)
#define PHP_CREDITS_ALL				0xFFFFFFFF

#endif /* HAVE_CREDITS_DEFS */

PHPAPI void php_print_credits(int flag);

#endif
ext/standard/basic_functions_arginfo.h000064400000524023151730542520014205 0ustar00/* This is a generated file, edit the .stub.php file instead.
 * Stub hash: f6bf6cdd07080c01d3a0cb08d71409d05b1084f9 */

ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_set_time_limit, 0, 1, _IS_BOOL, 0)
	ZEND_ARG_TYPE_INFO(0, seconds, IS_LONG, 0)
ZEND_END_ARG_INFO()

ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_header_register_callback, 0, 1, _IS_BOOL, 0)
	ZEND_ARG_TYPE_INFO(0, callback, IS_CALLABLE, 0)
ZEND_END_ARG_INFO()

ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_ob_start, 0, 0, _IS_BOOL, 0)
	ZEND_ARG_INFO_WITH_DEFAULT_VALUE(0, callback, "null")
	ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, chunk_size, IS_LONG, 0, "0")
	ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, flags, IS_LONG, 0, "PHP_OUTPUT_HANDLER_STDFLAGS")
ZEND_END_ARG_INFO()

ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_ob_flush, 0, 0, _IS_BOOL, 0)
ZEND_END_ARG_INFO()

#define arginfo_ob_clean arginfo_ob_flush

#define arginfo_ob_end_flush arginfo_ob_flush

#define arginfo_ob_end_clean arginfo_ob_flush

ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_ob_get_flush, 0, 0, MAY_BE_STRING|MAY_BE_FALSE)
ZEND_END_ARG_INFO()

#define arginfo_ob_get_clean arginfo_ob_get_flush

#define arginfo_ob_get_contents arginfo_ob_get_flush

ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_ob_get_level, 0, 0, IS_LONG, 0)
ZEND_END_ARG_INFO()

ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_ob_get_length, 0, 0, MAY_BE_LONG|MAY_BE_FALSE)
ZEND_END_ARG_INFO()

ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_ob_list_handlers, 0, 0, IS_ARRAY, 0)
ZEND_END_ARG_INFO()

ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_ob_get_status, 0, 0, IS_ARRAY, 0)
	ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, full_status, _IS_BOOL, 0, "false")
ZEND_END_ARG_INFO()

ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_ob_implicit_flush, 0, 0, IS_VOID, 0)
	ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, enable, _IS_BOOL, 0, "true")
ZEND_END_ARG_INFO()

#define arginfo_output_reset_rewrite_vars arginfo_ob_flush

ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_output_add_rewrite_var, 0, 2, _IS_BOOL, 0)
	ZEND_ARG_TYPE_INFO(0, name, IS_STRING, 0)
	ZEND_ARG_TYPE_INFO(0, value, IS_STRING, 0)
ZEND_END_ARG_INFO()

ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_stream_wrapper_register, 0, 2, _IS_BOOL, 0)
	ZEND_ARG_TYPE_INFO(0, protocol, IS_STRING, 0)
	ZEND_ARG_TYPE_INFO(0, class, IS_STRING, 0)
	ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, flags, IS_LONG, 0, "0")
ZEND_END_ARG_INFO()

#define arginfo_stream_register_wrapper arginfo_stream_wrapper_register

ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_stream_wrapper_unregister, 0, 1, _IS_BOOL, 0)
	ZEND_ARG_TYPE_INFO(0, protocol, IS_STRING, 0)
ZEND_END_ARG_INFO()

#define arginfo_stream_wrapper_restore arginfo_stream_wrapper_unregister

ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_array_push, 0, 1, IS_LONG, 0)
	ZEND_ARG_TYPE_INFO(1, array, IS_ARRAY, 0)
	ZEND_ARG_VARIADIC_TYPE_INFO(0, values, IS_MIXED, 0)
ZEND_END_ARG_INFO()

ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_krsort, 0, 1, IS_TRUE, 0)
	ZEND_ARG_TYPE_INFO(1, array, IS_ARRAY, 0)
	ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, flags, IS_LONG, 0, "SORT_REGULAR")
ZEND_END_ARG_INFO()

#define arginfo_ksort arginfo_krsort

ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_count, 0, 1, IS_LONG, 0)
	ZEND_ARG_OBJ_TYPE_MASK(0, value, Countable, MAY_BE_ARRAY, NULL)
	ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, mode, IS_LONG, 0, "COUNT_NORMAL")
ZEND_END_ARG_INFO()

#define arginfo_sizeof arginfo_count

ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_natsort, 0, 1, IS_TRUE, 0)
	ZEND_ARG_TYPE_INFO(1, array, IS_ARRAY, 0)
ZEND_END_ARG_INFO()

#define arginfo_natcasesort arginfo_natsort

#define arginfo_asort arginfo_krsort

#define arginfo_arsort arginfo_krsort

#define arginfo_sort arginfo_krsort

#define arginfo_rsort arginfo_krsort

ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_usort, 0, 2, IS_TRUE, 0)
	ZEND_ARG_TYPE_INFO(1, array, IS_ARRAY, 0)
	ZEND_ARG_TYPE_INFO(0, callback, IS_CALLABLE, 0)
ZEND_END_ARG_INFO()

#define arginfo_uasort arginfo_usort

#define arginfo_uksort arginfo_usort

ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_end, 0, 1, IS_MIXED, 0)
	ZEND_ARG_TYPE_MASK(1, array, MAY_BE_ARRAY|MAY_BE_OBJECT, NULL)
ZEND_END_ARG_INFO()

#define arginfo_prev arginfo_end

#define arginfo_next arginfo_end

#define arginfo_reset arginfo_end

ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_current, 0, 1, IS_MIXED, 0)
	ZEND_ARG_TYPE_MASK(0, array, MAY_BE_ARRAY|MAY_BE_OBJECT, NULL)
ZEND_END_ARG_INFO()

#define arginfo_pos arginfo_current

ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_key, 0, 1, MAY_BE_LONG|MAY_BE_STRING|MAY_BE_NULL)
	ZEND_ARG_TYPE_MASK(0, array, MAY_BE_ARRAY|MAY_BE_OBJECT, NULL)
ZEND_END_ARG_INFO()

ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_min, 0, 1, IS_MIXED, 0)
	ZEND_ARG_TYPE_INFO(0, value, IS_MIXED, 0)
	ZEND_ARG_VARIADIC_TYPE_INFO(0, values, IS_MIXED, 0)
ZEND_END_ARG_INFO()

#define arginfo_max arginfo_min

ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_array_walk, 0, 2, IS_TRUE, 0)
	ZEND_ARG_TYPE_MASK(1, array, MAY_BE_ARRAY|MAY_BE_OBJECT, NULL)
	ZEND_ARG_TYPE_INFO(0, callback, IS_CALLABLE, 0)
	ZEND_ARG_TYPE_INFO(0, arg, IS_MIXED, 0)
ZEND_END_ARG_INFO()

#define arginfo_array_walk_recursive arginfo_array_walk

ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_in_array, 0, 2, _IS_BOOL, 0)
	ZEND_ARG_TYPE_INFO(0, needle, IS_MIXED, 0)
	ZEND_ARG_TYPE_INFO(0, haystack, IS_ARRAY, 0)
	ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, strict, _IS_BOOL, 0, "false")
ZEND_END_ARG_INFO()

ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_array_search, 0, 2, MAY_BE_LONG|MAY_BE_STRING|MAY_BE_FALSE)
	ZEND_ARG_TYPE_INFO(0, needle, IS_MIXED, 0)
	ZEND_ARG_TYPE_INFO(0, haystack, IS_ARRAY, 0)
	ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, strict, _IS_BOOL, 0, "false")
ZEND_END_ARG_INFO()

ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_extract, 0, 1, IS_LONG, 0)
	ZEND_ARG_TYPE_INFO(ZEND_SEND_PREFER_REF, array, IS_ARRAY, 0)
	ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, flags, IS_LONG, 0, "EXTR_OVERWRITE")
	ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, prefix, IS_STRING, 0, "\"\"")
ZEND_END_ARG_INFO()

ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_compact, 0, 1, IS_ARRAY, 0)
	ZEND_ARG_INFO(0, var_name)
	ZEND_ARG_VARIADIC_INFO(0, var_names)
ZEND_END_ARG_INFO()

ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_array_fill, 0, 3, IS_ARRAY, 0)
	ZEND_ARG_TYPE_INFO(0, start_index, IS_LONG, 0)
	ZEND_ARG_TYPE_INFO(0, count, IS_LONG, 0)
	ZEND_ARG_TYPE_INFO(0, value, IS_MIXED, 0)
ZEND_END_ARG_INFO()

ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_array_fill_keys, 0, 2, IS_ARRAY, 0)
	ZEND_ARG_TYPE_INFO(0, keys, IS_ARRAY, 0)
	ZEND_ARG_TYPE_INFO(0, value, IS_MIXED, 0)
ZEND_END_ARG_INFO()

ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_range, 0, 2, IS_ARRAY, 0)
	ZEND_ARG_TYPE_MASK(0, start, MAY_BE_STRING|MAY_BE_LONG|MAY_BE_DOUBLE, NULL)
	ZEND_ARG_TYPE_MASK(0, end, MAY_BE_STRING|MAY_BE_LONG|MAY_BE_DOUBLE, NULL)
	ZEND_ARG_TYPE_MASK(0, step, MAY_BE_LONG|MAY_BE_DOUBLE, "1")
ZEND_END_ARG_INFO()

#define arginfo_shuffle arginfo_natsort

ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_array_pop, 0, 1, IS_MIXED, 0)
	ZEND_ARG_TYPE_INFO(1, array, IS_ARRAY, 0)
ZEND_END_ARG_INFO()

#define arginfo_array_shift arginfo_array_pop

#define arginfo_array_unshift arginfo_array_push

ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_array_splice, 0, 2, IS_ARRAY, 0)
	ZEND_ARG_TYPE_INFO(1, array, IS_ARRAY, 0)
	ZEND_ARG_TYPE_INFO(0, offset, IS_LONG, 0)
	ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, length, IS_LONG, 1, "null")
	ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, replacement, IS_MIXED, 0, "[]")
ZEND_END_ARG_INFO()

ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_array_slice, 0, 2, IS_ARRAY, 0)
	ZEND_ARG_TYPE_INFO(0, array, IS_ARRAY, 0)
	ZEND_ARG_TYPE_INFO(0, offset, IS_LONG, 0)
	ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, length, IS_LONG, 1, "null")
	ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, preserve_keys, _IS_BOOL, 0, "false")
ZEND_END_ARG_INFO()

ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_array_merge, 0, 0, IS_ARRAY, 0)
	ZEND_ARG_VARIADIC_TYPE_INFO(0, arrays, IS_ARRAY, 0)
ZEND_END_ARG_INFO()

#define arginfo_array_merge_recursive arginfo_array_merge

ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_array_replace, 0, 1, IS_ARRAY, 0)
	ZEND_ARG_TYPE_INFO(0, array, IS_ARRAY, 0)
	ZEND_ARG_VARIADIC_TYPE_INFO(0, replacements, IS_ARRAY, 0)
ZEND_END_ARG_INFO()

#define arginfo_array_replace_recursive arginfo_array_replace

ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_array_keys, 0, 1, IS_ARRAY, 0)
	ZEND_ARG_TYPE_INFO(0, array, IS_ARRAY, 0)
	ZEND_ARG_TYPE_INFO(0, filter_value, IS_MIXED, 0)
	ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, strict, _IS_BOOL, 0, "false")
ZEND_END_ARG_INFO()

ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_array_key_first, 0, 1, MAY_BE_LONG|MAY_BE_STRING|MAY_BE_NULL)
	ZEND_ARG_TYPE_INFO(0, array, IS_ARRAY, 0)
ZEND_END_ARG_INFO()

#define arginfo_array_key_last arginfo_array_key_first

ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_array_first, 0, 1, IS_MIXED, 0)
	ZEND_ARG_TYPE_INFO(0, array, IS_ARRAY, 0)
ZEND_END_ARG_INFO()

#define arginfo_array_last arginfo_array_first

ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_array_values, 0, 1, IS_ARRAY, 0)
	ZEND_ARG_TYPE_INFO(0, array, IS_ARRAY, 0)
ZEND_END_ARG_INFO()

#define arginfo_array_count_values arginfo_array_values

ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_array_column, 0, 2, IS_ARRAY, 0)
	ZEND_ARG_TYPE_INFO(0, array, IS_ARRAY, 0)
	ZEND_ARG_TYPE_MASK(0, column_key, MAY_BE_LONG|MAY_BE_STRING|MAY_BE_NULL, NULL)
	ZEND_ARG_TYPE_MASK(0, index_key, MAY_BE_LONG|MAY_BE_STRING|MAY_BE_NULL, "null")
ZEND_END_ARG_INFO()

ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_array_reverse, 0, 1, IS_ARRAY, 0)
	ZEND_ARG_TYPE_INFO(0, array, IS_ARRAY, 0)
	ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, preserve_keys, _IS_BOOL, 0, "false")
ZEND_END_ARG_INFO()

ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_array_pad, 0, 3, IS_ARRAY, 0)
	ZEND_ARG_TYPE_INFO(0, array, IS_ARRAY, 0)
	ZEND_ARG_TYPE_INFO(0, length, IS_LONG, 0)
	ZEND_ARG_TYPE_INFO(0, value, IS_MIXED, 0)
ZEND_END_ARG_INFO()

#define arginfo_array_flip arginfo_array_values

ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_array_change_key_case, 0, 1, IS_ARRAY, 0)
	ZEND_ARG_TYPE_INFO(0, array, IS_ARRAY, 0)
	ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, case, IS_LONG, 0, "CASE_LOWER")
ZEND_END_ARG_INFO()

ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_array_unique, 0, 1, IS_ARRAY, 0)
	ZEND_ARG_TYPE_INFO(0, array, IS_ARRAY, 0)
	ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, flags, IS_LONG, 0, "SORT_STRING")
ZEND_END_ARG_INFO()

ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_array_intersect_key, 0, 1, IS_ARRAY, 0)
	ZEND_ARG_TYPE_INFO(0, array, IS_ARRAY, 0)
	ZEND_ARG_VARIADIC_TYPE_INFO(0, arrays, IS_ARRAY, 0)
ZEND_END_ARG_INFO()

ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_array_intersect_ukey, 0, 1, IS_ARRAY, 0)
	ZEND_ARG_TYPE_INFO(0, array, IS_ARRAY, 0)
	ZEND_ARG_VARIADIC_INFO(0, rest)
ZEND_END_ARG_INFO()

#define arginfo_array_intersect arginfo_array_intersect_key

#define arginfo_array_uintersect arginfo_array_intersect_ukey

#define arginfo_array_intersect_assoc arginfo_array_intersect_key

#define arginfo_array_uintersect_assoc arginfo_array_intersect_ukey

#define arginfo_array_intersect_uassoc arginfo_array_intersect_ukey

#define arginfo_array_uintersect_uassoc arginfo_array_intersect_ukey

#define arginfo_array_diff_key arginfo_array_intersect_key

#define arginfo_array_diff_ukey arginfo_array_intersect_ukey

#define arginfo_array_diff arginfo_array_intersect_key

#define arginfo_array_udiff arginfo_array_intersect_ukey

#define arginfo_array_diff_assoc arginfo_array_intersect_key

#define arginfo_array_diff_uassoc arginfo_array_intersect_ukey

#define arginfo_array_udiff_assoc arginfo_array_intersect_ukey

#define arginfo_array_udiff_uassoc arginfo_array_intersect_ukey

ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_array_multisort, 0, 1, IS_TRUE, 0)
	ZEND_ARG_INFO(ZEND_SEND_PREFER_REF, array)
	ZEND_ARG_VARIADIC_INFO(ZEND_SEND_PREFER_REF, rest)
ZEND_END_ARG_INFO()

ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_array_rand, 0, 1, MAY_BE_LONG|MAY_BE_STRING|MAY_BE_ARRAY)
	ZEND_ARG_TYPE_INFO(0, array, IS_ARRAY, 0)
	ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, num, IS_LONG, 0, "1")
ZEND_END_ARG_INFO()

ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_array_sum, 0, 1, MAY_BE_LONG|MAY_BE_DOUBLE)
	ZEND_ARG_TYPE_INFO(0, array, IS_ARRAY, 0)
ZEND_END_ARG_INFO()

#define arginfo_array_product arginfo_array_sum

ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_array_reduce, 0, 2, IS_MIXED, 0)
	ZEND_ARG_TYPE_INFO(0, array, IS_ARRAY, 0)
	ZEND_ARG_TYPE_INFO(0, callback, IS_CALLABLE, 0)
	ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, initial, IS_MIXED, 0, "null")
ZEND_END_ARG_INFO()

ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_array_filter, 0, 1, IS_ARRAY, 0)
	ZEND_ARG_TYPE_INFO(0, array, IS_ARRAY, 0)
	ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, callback, IS_CALLABLE, 1, "null")
	ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, mode, IS_LONG, 0, "0")
ZEND_END_ARG_INFO()

ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_array_find, 0, 2, IS_MIXED, 0)
	ZEND_ARG_TYPE_INFO(0, array, IS_ARRAY, 0)
	ZEND_ARG_TYPE_INFO(0, callback, IS_CALLABLE, 0)
ZEND_END_ARG_INFO()

#define arginfo_array_find_key arginfo_array_find

ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_array_any, 0, 2, _IS_BOOL, 0)
	ZEND_ARG_TYPE_INFO(0, array, IS_ARRAY, 0)
	ZEND_ARG_TYPE_INFO(0, callback, IS_CALLABLE, 0)
ZEND_END_ARG_INFO()

#define arginfo_array_all arginfo_array_any

ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_array_map, 0, 2, IS_ARRAY, 0)
	ZEND_ARG_TYPE_INFO(0, callback, IS_CALLABLE, 1)
	ZEND_ARG_TYPE_INFO(0, array, IS_ARRAY, 0)
	ZEND_ARG_VARIADIC_TYPE_INFO(0, arrays, IS_ARRAY, 0)
ZEND_END_ARG_INFO()

ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_array_key_exists, 0, 2, _IS_BOOL, 0)
	ZEND_ARG_INFO(0, key)
	ZEND_ARG_TYPE_INFO(0, array, IS_ARRAY, 0)
ZEND_END_ARG_INFO()

#define arginfo_key_exists arginfo_array_key_exists

ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_array_chunk, 0, 2, IS_ARRAY, 0)
	ZEND_ARG_TYPE_INFO(0, array, IS_ARRAY, 0)
	ZEND_ARG_TYPE_INFO(0, length, IS_LONG, 0)
	ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, preserve_keys, _IS_BOOL, 0, "false")
ZEND_END_ARG_INFO()

ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_array_combine, 0, 2, IS_ARRAY, 0)
	ZEND_ARG_TYPE_INFO(0, keys, IS_ARRAY, 0)
	ZEND_ARG_TYPE_INFO(0, values, IS_ARRAY, 0)
ZEND_END_ARG_INFO()

ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_array_is_list, 0, 1, _IS_BOOL, 0)
	ZEND_ARG_TYPE_INFO(0, array, IS_ARRAY, 0)
ZEND_END_ARG_INFO()

ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_base64_encode, 0, 1, IS_STRING, 0)
	ZEND_ARG_TYPE_INFO(0, string, IS_STRING, 0)
ZEND_END_ARG_INFO()

ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_base64_decode, 0, 1, MAY_BE_STRING|MAY_BE_FALSE)
	ZEND_ARG_TYPE_INFO(0, string, IS_STRING, 0)
	ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, strict, _IS_BOOL, 0, "false")
ZEND_END_ARG_INFO()

ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_constant, 0, 1, IS_MIXED, 0)
	ZEND_ARG_TYPE_INFO(0, name, IS_STRING, 0)
ZEND_END_ARG_INFO()

ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_ip2long, 0, 1, MAY_BE_LONG|MAY_BE_FALSE)
	ZEND_ARG_TYPE_INFO(0, ip, IS_STRING, 0)
ZEND_END_ARG_INFO()

ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_long2ip, 0, 1, IS_STRING, 0)
	ZEND_ARG_TYPE_INFO(0, ip, IS_LONG, 0)
ZEND_END_ARG_INFO()

ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_getenv, 0, 0, MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_FALSE)
	ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, name, IS_STRING, 1, "null")
	ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, local_only, _IS_BOOL, 0, "false")
ZEND_END_ARG_INFO()

#if defined(HAVE_PUTENV)
ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_putenv, 0, 1, _IS_BOOL, 0)
	ZEND_ARG_TYPE_INFO(0, assignment, IS_STRING, 0)
ZEND_END_ARG_INFO()
#endif

ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_getopt, 0, 1, MAY_BE_ARRAY|MAY_BE_FALSE)
	ZEND_ARG_TYPE_INFO(0, short_options, IS_STRING, 0)
	ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, long_options, IS_ARRAY, 0, "[]")
	ZEND_ARG_INFO_WITH_DEFAULT_VALUE(1, rest_index, "null")
ZEND_END_ARG_INFO()

ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_flush, 0, 0, IS_VOID, 0)
ZEND_END_ARG_INFO()

ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_sleep, 0, 1, IS_LONG, 0)
	ZEND_ARG_TYPE_INFO(0, seconds, IS_LONG, 0)
ZEND_END_ARG_INFO()

ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_usleep, 0, 1, IS_VOID, 0)
	ZEND_ARG_TYPE_INFO(0, microseconds, IS_LONG, 0)
ZEND_END_ARG_INFO()

#if defined(HAVE_NANOSLEEP)
ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_time_nanosleep, 0, 2, MAY_BE_ARRAY|MAY_BE_BOOL)
	ZEND_ARG_TYPE_INFO(0, seconds, IS_LONG, 0)
	ZEND_ARG_TYPE_INFO(0, nanoseconds, IS_LONG, 0)
ZEND_END_ARG_INFO()

ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_time_sleep_until, 0, 1, _IS_BOOL, 0)
	ZEND_ARG_TYPE_INFO(0, timestamp, IS_DOUBLE, 0)
ZEND_END_ARG_INFO()
#endif

ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_get_current_user, 0, 0, IS_STRING, 0)
ZEND_END_ARG_INFO()

ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_get_cfg_var, 0, 1, MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_FALSE)
	ZEND_ARG_TYPE_INFO(0, option, IS_STRING, 0)
ZEND_END_ARG_INFO()

ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_error_log, 0, 1, _IS_BOOL, 0)
	ZEND_ARG_TYPE_INFO(0, message, IS_STRING, 0)
	ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, message_type, IS_LONG, 0, "0")
	ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, destination, IS_STRING, 1, "null")
	ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, additional_headers, IS_STRING, 1, "null")
ZEND_END_ARG_INFO()

ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_error_get_last, 0, 0, IS_ARRAY, 1)
ZEND_END_ARG_INFO()

#define arginfo_error_clear_last arginfo_flush

ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_call_user_func, 0, 1, IS_MIXED, 0)
	ZEND_ARG_TYPE_INFO(0, callback, IS_CALLABLE, 0)
	ZEND_ARG_VARIADIC_TYPE_INFO(0, args, IS_MIXED, 0)
ZEND_END_ARG_INFO()

ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_call_user_func_array, 0, 2, IS_MIXED, 0)
	ZEND_ARG_TYPE_INFO(0, callback, IS_CALLABLE, 0)
	ZEND_ARG_TYPE_INFO(0, args, IS_ARRAY, 0)
ZEND_END_ARG_INFO()

#define arginfo_forward_static_call arginfo_call_user_func

#define arginfo_forward_static_call_array arginfo_call_user_func_array

ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_register_shutdown_function, 0, 1, IS_VOID, 0)
	ZEND_ARG_TYPE_INFO(0, callback, IS_CALLABLE, 0)
	ZEND_ARG_VARIADIC_TYPE_INFO(0, args, IS_MIXED, 0)
ZEND_END_ARG_INFO()

ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_highlight_file, 0, 1, MAY_BE_STRING|MAY_BE_BOOL)
	ZEND_ARG_TYPE_INFO(0, filename, IS_STRING, 0)
	ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, return, _IS_BOOL, 0, "false")
ZEND_END_ARG_INFO()

#define arginfo_show_source arginfo_highlight_file

ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_php_strip_whitespace, 0, 1, IS_STRING, 0)
	ZEND_ARG_TYPE_INFO(0, filename, IS_STRING, 0)
ZEND_END_ARG_INFO()

ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_highlight_string, 0, 1, MAY_BE_STRING|MAY_BE_TRUE)
	ZEND_ARG_TYPE_INFO(0, string, IS_STRING, 0)
	ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, return, _IS_BOOL, 0, "false")
ZEND_END_ARG_INFO()

ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_ini_get, 0, 1, MAY_BE_STRING|MAY_BE_FALSE)
	ZEND_ARG_TYPE_INFO(0, option, IS_STRING, 0)
ZEND_END_ARG_INFO()

ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_ini_get_all, 0, 0, MAY_BE_ARRAY|MAY_BE_FALSE)
	ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, extension, IS_STRING, 1, "null")
	ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, details, _IS_BOOL, 0, "true")
ZEND_END_ARG_INFO()

ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_ini_set, 0, 2, MAY_BE_STRING|MAY_BE_FALSE)
	ZEND_ARG_TYPE_INFO(0, option, IS_STRING, 0)
	ZEND_ARG_TYPE_MASK(0, value, MAY_BE_STRING|MAY_BE_LONG|MAY_BE_DOUBLE|MAY_BE_BOOL|MAY_BE_NULL, NULL)
ZEND_END_ARG_INFO()

#define arginfo_ini_alter arginfo_ini_set

ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_ini_restore, 0, 1, IS_VOID, 0)
	ZEND_ARG_TYPE_INFO(0, option, IS_STRING, 0)
ZEND_END_ARG_INFO()

ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_ini_parse_quantity, 0, 1, IS_LONG, 0)
	ZEND_ARG_TYPE_INFO(0, shorthand, IS_STRING, 0)
ZEND_END_ARG_INFO()

ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_set_include_path, 0, 1, MAY_BE_STRING|MAY_BE_FALSE)
	ZEND_ARG_TYPE_INFO(0, include_path, IS_STRING, 0)
ZEND_END_ARG_INFO()

#define arginfo_get_include_path arginfo_ob_get_flush

ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_print_r, 0, 1, MAY_BE_STRING|MAY_BE_TRUE)
	ZEND_ARG_TYPE_INFO(0, value, IS_MIXED, 0)
	ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, return, _IS_BOOL, 0, "false")
ZEND_END_ARG_INFO()

#define arginfo_connection_aborted arginfo_ob_get_level

#define arginfo_connection_status arginfo_ob_get_level

ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_ignore_user_abort, 0, 0, IS_LONG, 0)
	ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, enable, _IS_BOOL, 1, "null")
ZEND_END_ARG_INFO()

#if defined(HAVE_GETSERVBYNAME)
ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_getservbyname, 0, 2, MAY_BE_LONG|MAY_BE_FALSE)
	ZEND_ARG_TYPE_INFO(0, service, IS_STRING, 0)
	ZEND_ARG_TYPE_INFO(0, protocol, IS_STRING, 0)
ZEND_END_ARG_INFO()
#endif

#if defined(HAVE_GETSERVBYPORT)
ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_getservbyport, 0, 2, MAY_BE_STRING|MAY_BE_FALSE)
	ZEND_ARG_TYPE_INFO(0, port, IS_LONG, 0)
	ZEND_ARG_TYPE_INFO(0, protocol, IS_STRING, 0)
ZEND_END_ARG_INFO()
#endif

#if defined(HAVE_GETPROTOBYNAME)
ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_getprotobyname, 0, 1, MAY_BE_LONG|MAY_BE_FALSE)
	ZEND_ARG_TYPE_INFO(0, protocol, IS_STRING, 0)
ZEND_END_ARG_INFO()
#endif

#if defined(HAVE_GETPROTOBYNUMBER)
ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_getprotobynumber, 0, 1, MAY_BE_STRING|MAY_BE_FALSE)
	ZEND_ARG_TYPE_INFO(0, protocol, IS_LONG, 0)
ZEND_END_ARG_INFO()
#endif

ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_register_tick_function, 0, 1, _IS_BOOL, 0)
	ZEND_ARG_TYPE_INFO(0, callback, IS_CALLABLE, 0)
	ZEND_ARG_VARIADIC_TYPE_INFO(0, args, IS_MIXED, 0)
ZEND_END_ARG_INFO()

ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_unregister_tick_function, 0, 1, IS_VOID, 0)
	ZEND_ARG_TYPE_INFO(0, callback, IS_CALLABLE, 0)
ZEND_END_ARG_INFO()

ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_is_uploaded_file, 0, 1, _IS_BOOL, 0)
	ZEND_ARG_TYPE_INFO(0, filename, IS_STRING, 0)
ZEND_END_ARG_INFO()

ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_move_uploaded_file, 0, 2, _IS_BOOL, 0)
	ZEND_ARG_TYPE_INFO(0, from, IS_STRING, 0)
	ZEND_ARG_TYPE_INFO(0, to, IS_STRING, 0)
ZEND_END_ARG_INFO()

ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_parse_ini_file, 0, 1, MAY_BE_ARRAY|MAY_BE_FALSE)
	ZEND_ARG_TYPE_INFO(0, filename, IS_STRING, 0)
	ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, process_sections, _IS_BOOL, 0, "false")
	ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, scanner_mode, IS_LONG, 0, "INI_SCANNER_NORMAL")
ZEND_END_ARG_INFO()

ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_parse_ini_string, 0, 1, MAY_BE_ARRAY|MAY_BE_FALSE)
	ZEND_ARG_TYPE_INFO(0, ini_string, IS_STRING, 0)
	ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, process_sections, _IS_BOOL, 0, "false")
	ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, scanner_mode, IS_LONG, 0, "INI_SCANNER_NORMAL")
ZEND_END_ARG_INFO()

#if ZEND_DEBUG
ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_config_get_hash, 0, 0, IS_ARRAY, 0)
ZEND_END_ARG_INFO()
#endif

#if defined(HAVE_GETLOADAVG)
ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_sys_getloadavg, 0, 0, MAY_BE_ARRAY|MAY_BE_FALSE)
ZEND_END_ARG_INFO()
#endif

ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_get_browser, 0, 0, MAY_BE_OBJECT|MAY_BE_ARRAY|MAY_BE_FALSE)
	ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, user_agent, IS_STRING, 1, "null")
	ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, return_array, _IS_BOOL, 0, "false")
ZEND_END_ARG_INFO()

ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_crc32, 0, 1, IS_LONG, 0)
	ZEND_ARG_TYPE_INFO(0, string, IS_STRING, 0)
ZEND_END_ARG_INFO()

ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_crypt, 0, 2, IS_STRING, 0)
	ZEND_ARG_TYPE_INFO(0, string, IS_STRING, 0)
	ZEND_ARG_TYPE_INFO(0, salt, IS_STRING, 0)
ZEND_END_ARG_INFO()

#if defined(HAVE_STRPTIME)
ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_strptime, 0, 2, MAY_BE_ARRAY|MAY_BE_FALSE)
	ZEND_ARG_TYPE_INFO(0, timestamp, IS_STRING, 0)
	ZEND_ARG_TYPE_INFO(0, format, IS_STRING, 0)
ZEND_END_ARG_INFO()
#endif

#if defined(HAVE_GETHOSTNAME)
ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_gethostname, 0, 0, MAY_BE_STRING|MAY_BE_FALSE)
ZEND_END_ARG_INFO()
#endif

ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_gethostbyaddr, 0, 1, MAY_BE_STRING|MAY_BE_FALSE)
	ZEND_ARG_TYPE_INFO(0, ip, IS_STRING, 0)
ZEND_END_ARG_INFO()

ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_gethostbyname, 0, 1, IS_STRING, 0)
	ZEND_ARG_TYPE_INFO(0, hostname, IS_STRING, 0)
ZEND_END_ARG_INFO()

ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_gethostbynamel, 0, 1, MAY_BE_ARRAY|MAY_BE_FALSE)
	ZEND_ARG_TYPE_INFO(0, hostname, IS_STRING, 0)
ZEND_END_ARG_INFO()

#if (defined(PHP_WIN32) || defined(HAVE_DNS_SEARCH_FUNC))
ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_dns_check_record, 0, 1, _IS_BOOL, 0)
	ZEND_ARG_TYPE_INFO(0, hostname, IS_STRING, 0)
	ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, type, IS_STRING, 0, "\"MX\"")
ZEND_END_ARG_INFO()

#define arginfo_checkdnsrr arginfo_dns_check_record

ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_dns_get_record, 0, 1, MAY_BE_ARRAY|MAY_BE_FALSE)
	ZEND_ARG_TYPE_INFO(0, hostname, IS_STRING, 0)
	ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, type, IS_LONG, 0, "DNS_ANY")
	ZEND_ARG_INFO_WITH_DEFAULT_VALUE(1, authoritative_name_servers, "null")
	ZEND_ARG_INFO_WITH_DEFAULT_VALUE(1, additional_records, "null")
	ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, raw, _IS_BOOL, 0, "false")
ZEND_END_ARG_INFO()

ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_dns_get_mx, 0, 2, _IS_BOOL, 0)
	ZEND_ARG_TYPE_INFO(0, hostname, IS_STRING, 0)
	ZEND_ARG_INFO(1, hosts)
	ZEND_ARG_INFO_WITH_DEFAULT_VALUE(1, weights, "null")
ZEND_END_ARG_INFO()

#define arginfo_getmxrr arginfo_dns_get_mx
#endif

#if (defined(PHP_WIN32) || defined(HAVE_GETIFADDRS) || defined(__PASE__))
ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_net_get_interfaces, 0, 0, MAY_BE_ARRAY|MAY_BE_FALSE)
ZEND_END_ARG_INFO()
#endif

#if defined(HAVE_FTOK)
ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_ftok, 0, 2, IS_LONG, 0)
	ZEND_ARG_TYPE_INFO(0, filename, IS_STRING, 0)
	ZEND_ARG_TYPE_INFO(0, project_id, IS_STRING, 0)
ZEND_END_ARG_INFO()
#endif

ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_hrtime, 0, 0, MAY_BE_ARRAY|MAY_BE_LONG|MAY_BE_DOUBLE|MAY_BE_FALSE)
	ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, as_number, _IS_BOOL, 0, "false")
ZEND_END_ARG_INFO()

ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_md5, 0, 1, IS_STRING, 0)
	ZEND_ARG_TYPE_INFO(0, string, IS_STRING, 0)
	ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, binary, _IS_BOOL, 0, "false")
ZEND_END_ARG_INFO()

ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_md5_file, 0, 1, MAY_BE_STRING|MAY_BE_FALSE)
	ZEND_ARG_TYPE_INFO(0, filename, IS_STRING, 0)
	ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, binary, _IS_BOOL, 0, "false")
ZEND_END_ARG_INFO()

#define arginfo_getmyuid arginfo_ob_get_length

#define arginfo_getmygid arginfo_ob_get_length

#define arginfo_getmypid arginfo_ob_get_length

#define arginfo_getmyinode arginfo_ob_get_length

#define arginfo_getlastmod arginfo_ob_get_length

#define arginfo_sha1 arginfo_md5

#define arginfo_sha1_file arginfo_md5_file

#if defined(HAVE_SYSLOG_H)
ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_openlog, 0, 3, IS_TRUE, 0)
	ZEND_ARG_TYPE_INFO(0, prefix, IS_STRING, 0)
	ZEND_ARG_TYPE_INFO(0, flags, IS_LONG, 0)
	ZEND_ARG_TYPE_INFO(0, facility, IS_LONG, 0)
ZEND_END_ARG_INFO()

ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_closelog, 0, 0, IS_TRUE, 0)
ZEND_END_ARG_INFO()

ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_syslog, 0, 2, IS_TRUE, 0)
	ZEND_ARG_TYPE_INFO(0, priority, IS_LONG, 0)
	ZEND_ARG_TYPE_INFO(0, message, IS_STRING, 0)
ZEND_END_ARG_INFO()
#endif

#define arginfo_inet_ntop arginfo_gethostbyaddr

#define arginfo_inet_pton arginfo_gethostbyaddr

ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_metaphone, 0, 1, IS_STRING, 0)
	ZEND_ARG_TYPE_INFO(0, string, IS_STRING, 0)
	ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, max_phonemes, IS_LONG, 0, "0")
ZEND_END_ARG_INFO()

ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_header, 0, 1, IS_VOID, 0)
	ZEND_ARG_TYPE_INFO(0, header, IS_STRING, 0)
	ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, replace, _IS_BOOL, 0, "true")
	ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, response_code, IS_LONG, 0, "0")
ZEND_END_ARG_INFO()

ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_header_remove, 0, 0, IS_VOID, 0)
	ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, name, IS_STRING, 1, "null")
ZEND_END_ARG_INFO()

ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_setrawcookie, 0, 1, _IS_BOOL, 0)
	ZEND_ARG_TYPE_INFO(0, name, IS_STRING, 0)
	ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, value, IS_STRING, 0, "\"\"")
	ZEND_ARG_TYPE_MASK(0, expires_or_options, MAY_BE_ARRAY|MAY_BE_LONG, "0")
	ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, path, IS_STRING, 0, "\"\"")
	ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, domain, IS_STRING, 0, "\"\"")
	ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, secure, _IS_BOOL, 0, "false")
	ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, httponly, _IS_BOOL, 0, "false")
ZEND_END_ARG_INFO()

#define arginfo_setcookie arginfo_setrawcookie

ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_http_response_code, 0, 0, MAY_BE_LONG|MAY_BE_BOOL)
	ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, response_code, IS_LONG, 0, "0")
ZEND_END_ARG_INFO()

ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_headers_sent, 0, 0, _IS_BOOL, 0)
	ZEND_ARG_INFO_WITH_DEFAULT_VALUE(1, filename, "null")
	ZEND_ARG_INFO_WITH_DEFAULT_VALUE(1, line, "null")
ZEND_END_ARG_INFO()

#define arginfo_headers_list arginfo_ob_list_handlers

ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_htmlspecialchars, 0, 1, IS_STRING, 0)
	ZEND_ARG_TYPE_INFO(0, string, IS_STRING, 0)
	ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, flags, IS_LONG, 0, "ENT_QUOTES | ENT_SUBSTITUTE | ENT_HTML401")
	ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, encoding, IS_STRING, 1, "null")
	ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, double_encode, _IS_BOOL, 0, "true")
ZEND_END_ARG_INFO()

ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_htmlspecialchars_decode, 0, 1, IS_STRING, 0)
	ZEND_ARG_TYPE_INFO(0, string, IS_STRING, 0)
	ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, flags, IS_LONG, 0, "ENT_QUOTES | ENT_SUBSTITUTE | ENT_HTML401")
ZEND_END_ARG_INFO()

ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_html_entity_decode, 0, 1, IS_STRING, 0)
	ZEND_ARG_TYPE_INFO(0, string, IS_STRING, 0)
	ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, flags, IS_LONG, 0, "ENT_QUOTES | ENT_SUBSTITUTE | ENT_HTML401")
	ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, encoding, IS_STRING, 1, "null")
ZEND_END_ARG_INFO()

#define arginfo_htmlentities arginfo_htmlspecialchars

ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_get_html_translation_table, 0, 0, IS_ARRAY, 0)
	ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, table, IS_LONG, 0, "HTML_SPECIALCHARS")
	ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, flags, IS_LONG, 0, "ENT_QUOTES | ENT_SUBSTITUTE | ENT_HTML401")
	ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, encoding, IS_STRING, 0, "\"UTF-8\"")
ZEND_END_ARG_INFO()

ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_assert, 0, 1, _IS_BOOL, 0)
	ZEND_ARG_TYPE_INFO(0, assertion, IS_MIXED, 0)
	ZEND_ARG_OBJ_TYPE_MASK(0, description, Throwable, MAY_BE_STRING|MAY_BE_NULL, "null")
ZEND_END_ARG_INFO()

ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_assert_options, 0, 1, IS_MIXED, 0)
	ZEND_ARG_TYPE_INFO(0, option, IS_LONG, 0)
	ZEND_ARG_TYPE_INFO(0, value, IS_MIXED, 0)
ZEND_END_ARG_INFO()

#define arginfo_bin2hex arginfo_base64_encode

ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_hex2bin, 0, 1, MAY_BE_STRING|MAY_BE_FALSE)
	ZEND_ARG_TYPE_INFO(0, string, IS_STRING, 0)
ZEND_END_ARG_INFO()

ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_strspn, 0, 2, IS_LONG, 0)
	ZEND_ARG_TYPE_INFO(0, string, IS_STRING, 0)
	ZEND_ARG_TYPE_INFO(0, characters, IS_STRING, 0)
	ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, offset, IS_LONG, 0, "0")
	ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, length, IS_LONG, 1, "null")
ZEND_END_ARG_INFO()

#define arginfo_strcspn arginfo_strspn

#if defined(HAVE_NL_LANGINFO)
ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_nl_langinfo, 0, 1, MAY_BE_STRING|MAY_BE_FALSE)
	ZEND_ARG_TYPE_INFO(0, item, IS_LONG, 0)
ZEND_END_ARG_INFO()
#endif

ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_strcoll, 0, 2, IS_LONG, 0)
	ZEND_ARG_TYPE_INFO(0, string1, IS_STRING, 0)
	ZEND_ARG_TYPE_INFO(0, string2, IS_STRING, 0)
ZEND_END_ARG_INFO()

ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_trim, 0, 1, IS_STRING, 0)
	ZEND_ARG_TYPE_INFO(0, string, IS_STRING, 0)
	ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, characters, IS_STRING, 0, "\" \\n\\r\\t\\v\\x00\"")
ZEND_END_ARG_INFO()

#define arginfo_rtrim arginfo_trim

#define arginfo_chop arginfo_trim

#define arginfo_ltrim arginfo_trim

ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_wordwrap, 0, 1, IS_STRING, 0)
	ZEND_ARG_TYPE_INFO(0, string, IS_STRING, 0)
	ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, width, IS_LONG, 0, "75")
	ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, break, IS_STRING, 0, "\"\\n\"")
	ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, cut_long_words, _IS_BOOL, 0, "false")
ZEND_END_ARG_INFO()

ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_explode, 0, 2, IS_ARRAY, 0)
	ZEND_ARG_TYPE_INFO(0, separator, IS_STRING, 0)
	ZEND_ARG_TYPE_INFO(0, string, IS_STRING, 0)
	ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, limit, IS_LONG, 0, "PHP_INT_MAX")
ZEND_END_ARG_INFO()

ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_implode, 0, 1, IS_STRING, 0)
	ZEND_ARG_TYPE_MASK(0, separator, MAY_BE_STRING|MAY_BE_ARRAY, NULL)
	ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, array, IS_ARRAY, 1, "null")
ZEND_END_ARG_INFO()

#define arginfo_join arginfo_implode

ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_strtok, 0, 1, MAY_BE_STRING|MAY_BE_FALSE)
	ZEND_ARG_TYPE_INFO(0, string, IS_STRING, 0)
	ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, token, IS_STRING, 1, "null")
ZEND_END_ARG_INFO()

#define arginfo_strtoupper arginfo_base64_encode

#define arginfo_strtolower arginfo_base64_encode

#define arginfo_str_increment arginfo_base64_encode

#define arginfo_str_decrement arginfo_base64_encode

ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_basename, 0, 1, IS_STRING, 0)
	ZEND_ARG_TYPE_INFO(0, path, IS_STRING, 0)
	ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, suffix, IS_STRING, 0, "\"\"")
ZEND_END_ARG_INFO()

ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_dirname, 0, 1, IS_STRING, 0)
	ZEND_ARG_TYPE_INFO(0, path, IS_STRING, 0)
	ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, levels, IS_LONG, 0, "1")
ZEND_END_ARG_INFO()

ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_pathinfo, 0, 1, MAY_BE_ARRAY|MAY_BE_STRING)
	ZEND_ARG_TYPE_INFO(0, path, IS_STRING, 0)
	ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, flags, IS_LONG, 0, "PATHINFO_ALL")
ZEND_END_ARG_INFO()

ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_stristr, 0, 2, MAY_BE_STRING|MAY_BE_FALSE)
	ZEND_ARG_TYPE_INFO(0, haystack, IS_STRING, 0)
	ZEND_ARG_TYPE_INFO(0, needle, IS_STRING, 0)
	ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, before_needle, _IS_BOOL, 0, "false")
ZEND_END_ARG_INFO()

#define arginfo_strstr arginfo_stristr

#define arginfo_strchr arginfo_stristr

ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_strpos, 0, 2, MAY_BE_LONG|MAY_BE_FALSE)
	ZEND_ARG_TYPE_INFO(0, haystack, IS_STRING, 0)
	ZEND_ARG_TYPE_INFO(0, needle, IS_STRING, 0)
	ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, offset, IS_LONG, 0, "0")
ZEND_END_ARG_INFO()

#define arginfo_stripos arginfo_strpos

#define arginfo_strrpos arginfo_strpos

#define arginfo_strripos arginfo_strpos

#define arginfo_strrchr arginfo_stristr

ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_str_contains, 0, 2, _IS_BOOL, 0)
	ZEND_ARG_TYPE_INFO(0, haystack, IS_STRING, 0)
	ZEND_ARG_TYPE_INFO(0, needle, IS_STRING, 0)
ZEND_END_ARG_INFO()

#define arginfo_str_starts_with arginfo_str_contains

#define arginfo_str_ends_with arginfo_str_contains

ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_chunk_split, 0, 1, IS_STRING, 0)
	ZEND_ARG_TYPE_INFO(0, string, IS_STRING, 0)
	ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, length, IS_LONG, 0, "76")
	ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, separator, IS_STRING, 0, "\"\\r\\n\"")
ZEND_END_ARG_INFO()

ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_substr, 0, 2, IS_STRING, 0)
	ZEND_ARG_TYPE_INFO(0, string, IS_STRING, 0)
	ZEND_ARG_TYPE_INFO(0, offset, IS_LONG, 0)
	ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, length, IS_LONG, 1, "null")
ZEND_END_ARG_INFO()

ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_substr_replace, 0, 3, MAY_BE_STRING|MAY_BE_ARRAY)
	ZEND_ARG_TYPE_MASK(0, string, MAY_BE_ARRAY|MAY_BE_STRING, NULL)
	ZEND_ARG_TYPE_MASK(0, replace, MAY_BE_ARRAY|MAY_BE_STRING, NULL)
	ZEND_ARG_TYPE_MASK(0, offset, MAY_BE_ARRAY|MAY_BE_LONG, NULL)
	ZEND_ARG_TYPE_MASK(0, length, MAY_BE_ARRAY|MAY_BE_LONG|MAY_BE_NULL, "null")
ZEND_END_ARG_INFO()

#define arginfo_quotemeta arginfo_base64_encode

ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_ord, 0, 1, IS_LONG, 0)
	ZEND_ARG_TYPE_INFO(0, character, IS_STRING, 0)
ZEND_END_ARG_INFO()

ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_chr, 0, 1, IS_STRING, 0)
	ZEND_ARG_TYPE_INFO(0, codepoint, IS_LONG, 0)
ZEND_END_ARG_INFO()

#define arginfo_ucfirst arginfo_base64_encode

#define arginfo_lcfirst arginfo_base64_encode

ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_ucwords, 0, 1, IS_STRING, 0)
	ZEND_ARG_TYPE_INFO(0, string, IS_STRING, 0)
	ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, separators, IS_STRING, 0, "\" \\t\\r\\n\\f\\v\"")
ZEND_END_ARG_INFO()

ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_strtr, 0, 2, IS_STRING, 0)
	ZEND_ARG_TYPE_INFO(0, string, IS_STRING, 0)
	ZEND_ARG_TYPE_MASK(0, from, MAY_BE_STRING|MAY_BE_ARRAY, NULL)
	ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, to, IS_STRING, 1, "null")
ZEND_END_ARG_INFO()

#define arginfo_strrev arginfo_base64_encode

ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_similar_text, 0, 2, IS_LONG, 0)
	ZEND_ARG_TYPE_INFO(0, string1, IS_STRING, 0)
	ZEND_ARG_TYPE_INFO(0, string2, IS_STRING, 0)
	ZEND_ARG_INFO_WITH_DEFAULT_VALUE(1, percent, "null")
ZEND_END_ARG_INFO()

ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_addcslashes, 0, 2, IS_STRING, 0)
	ZEND_ARG_TYPE_INFO(0, string, IS_STRING, 0)
	ZEND_ARG_TYPE_INFO(0, characters, IS_STRING, 0)
ZEND_END_ARG_INFO()

#define arginfo_addslashes arginfo_base64_encode

#define arginfo_stripcslashes arginfo_base64_encode

#define arginfo_stripslashes arginfo_base64_encode

ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_str_replace, 0, 3, MAY_BE_STRING|MAY_BE_ARRAY)
	ZEND_ARG_TYPE_MASK(0, search, MAY_BE_ARRAY|MAY_BE_STRING, NULL)
	ZEND_ARG_TYPE_MASK(0, replace, MAY_BE_ARRAY|MAY_BE_STRING, NULL)
	ZEND_ARG_TYPE_MASK(0, subject, MAY_BE_STRING|MAY_BE_ARRAY, NULL)
	ZEND_ARG_INFO_WITH_DEFAULT_VALUE(1, count, "null")
ZEND_END_ARG_INFO()

#define arginfo_str_ireplace arginfo_str_replace

ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_hebrev, 0, 1, IS_STRING, 0)
	ZEND_ARG_TYPE_INFO(0, string, IS_STRING, 0)
	ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, max_chars_per_line, IS_LONG, 0, "0")
ZEND_END_ARG_INFO()

ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_nl2br, 0, 1, IS_STRING, 0)
	ZEND_ARG_TYPE_INFO(0, string, IS_STRING, 0)
	ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, use_xhtml, _IS_BOOL, 0, "true")
ZEND_END_ARG_INFO()

ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_strip_tags, 0, 1, IS_STRING, 0)
	ZEND_ARG_TYPE_INFO(0, string, IS_STRING, 0)
	ZEND_ARG_TYPE_MASK(0, allowed_tags, MAY_BE_ARRAY|MAY_BE_STRING|MAY_BE_NULL, "null")
ZEND_END_ARG_INFO()

ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_setlocale, 0, 2, MAY_BE_STRING|MAY_BE_FALSE)
	ZEND_ARG_TYPE_INFO(0, category, IS_LONG, 0)
	ZEND_ARG_INFO(0, locales)
	ZEND_ARG_VARIADIC_INFO(0, rest)
ZEND_END_ARG_INFO()

ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_parse_str, 0, 2, IS_VOID, 0)
	ZEND_ARG_TYPE_INFO(0, string, IS_STRING, 0)
	ZEND_ARG_INFO(1, result)
ZEND_END_ARG_INFO()

ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_str_getcsv, 0, 1, IS_ARRAY, 0)
	ZEND_ARG_TYPE_INFO(0, string, IS_STRING, 0)
	ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, separator, IS_STRING, 0, "\",\"")
	ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, enclosure, IS_STRING, 0, "\"\\\"\"")
	ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, escape, IS_STRING, 0, "\"\\\\\"")
ZEND_END_ARG_INFO()

ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_str_repeat, 0, 2, IS_STRING, 0)
	ZEND_ARG_TYPE_INFO(0, string, IS_STRING, 0)
	ZEND_ARG_TYPE_INFO(0, times, IS_LONG, 0)
ZEND_END_ARG_INFO()

ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_count_chars, 0, 1, MAY_BE_ARRAY|MAY_BE_STRING)
	ZEND_ARG_TYPE_INFO(0, string, IS_STRING, 0)
	ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, mode, IS_LONG, 0, "0")
ZEND_END_ARG_INFO()

#define arginfo_strnatcmp arginfo_strcoll

#define arginfo_localeconv arginfo_ob_list_handlers

#define arginfo_strnatcasecmp arginfo_strcoll

ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_substr_count, 0, 2, IS_LONG, 0)
	ZEND_ARG_TYPE_INFO(0, haystack, IS_STRING, 0)
	ZEND_ARG_TYPE_INFO(0, needle, IS_STRING, 0)
	ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, offset, IS_LONG, 0, "0")
	ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, length, IS_LONG, 1, "null")
ZEND_END_ARG_INFO()

ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_str_pad, 0, 2, IS_STRING, 0)
	ZEND_ARG_TYPE_INFO(0, string, IS_STRING, 0)
	ZEND_ARG_TYPE_INFO(0, length, IS_LONG, 0)
	ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, pad_string, IS_STRING, 0, "\" \"")
	ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, pad_type, IS_LONG, 0, "STR_PAD_RIGHT")
ZEND_END_ARG_INFO()

ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_sscanf, 0, 2, MAY_BE_ARRAY|MAY_BE_LONG|MAY_BE_NULL)
	ZEND_ARG_TYPE_INFO(0, string, IS_STRING, 0)
	ZEND_ARG_TYPE_INFO(0, format, IS_STRING, 0)
	ZEND_ARG_VARIADIC_TYPE_INFO(1, vars, IS_MIXED, 0)
ZEND_END_ARG_INFO()

#define arginfo_str_rot13 arginfo_base64_encode

#define arginfo_str_shuffle arginfo_base64_encode

ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_str_word_count, 0, 1, MAY_BE_ARRAY|MAY_BE_LONG)
	ZEND_ARG_TYPE_INFO(0, string, IS_STRING, 0)
	ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, format, IS_LONG, 0, "0")
	ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, characters, IS_STRING, 1, "null")
ZEND_END_ARG_INFO()

ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_str_split, 0, 1, IS_ARRAY, 0)
	ZEND_ARG_TYPE_INFO(0, string, IS_STRING, 0)
	ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, length, IS_LONG, 0, "1")
ZEND_END_ARG_INFO()

ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_strpbrk, 0, 2, MAY_BE_STRING|MAY_BE_FALSE)
	ZEND_ARG_TYPE_INFO(0, string, IS_STRING, 0)
	ZEND_ARG_TYPE_INFO(0, characters, IS_STRING, 0)
ZEND_END_ARG_INFO()

ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_substr_compare, 0, 3, IS_LONG, 0)
	ZEND_ARG_TYPE_INFO(0, haystack, IS_STRING, 0)
	ZEND_ARG_TYPE_INFO(0, needle, IS_STRING, 0)
	ZEND_ARG_TYPE_INFO(0, offset, IS_LONG, 0)
	ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, length, IS_LONG, 1, "null")
	ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, case_insensitive, _IS_BOOL, 0, "false")
ZEND_END_ARG_INFO()

#define arginfo_utf8_encode arginfo_base64_encode

#define arginfo_utf8_decode arginfo_base64_encode

ZEND_BEGIN_ARG_INFO_EX(arginfo_opendir, 0, 0, 1)
	ZEND_ARG_TYPE_INFO(0, directory, IS_STRING, 0)
	ZEND_ARG_INFO_WITH_DEFAULT_VALUE(0, context, "null")
ZEND_END_ARG_INFO()

ZEND_BEGIN_ARG_WITH_RETURN_OBJ_TYPE_MASK_EX(arginfo_dir, 0, 1, Directory, MAY_BE_FALSE)
	ZEND_ARG_TYPE_INFO(0, directory, IS_STRING, 0)
	ZEND_ARG_INFO_WITH_DEFAULT_VALUE(0, context, "null")
ZEND_END_ARG_INFO()

ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_closedir, 0, 0, IS_VOID, 0)
	ZEND_ARG_INFO_WITH_DEFAULT_VALUE(0, dir_handle, "null")
ZEND_END_ARG_INFO()

ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_chdir, 0, 1, _IS_BOOL, 0)
	ZEND_ARG_TYPE_INFO(0, directory, IS_STRING, 0)
ZEND_END_ARG_INFO()

#if (defined(HAVE_CHROOT) && !defined(ZTS) && defined(ENABLE_CHROOT_FUNC))
ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_chroot, 0, 1, _IS_BOOL, 0)
	ZEND_ARG_TYPE_INFO(0, directory, IS_STRING, 0)
ZEND_END_ARG_INFO()
#endif

#define arginfo_getcwd arginfo_ob_get_flush

#define arginfo_rewinddir arginfo_closedir

ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_readdir, 0, 0, MAY_BE_STRING|MAY_BE_FALSE)
	ZEND_ARG_INFO_WITH_DEFAULT_VALUE(0, dir_handle, "null")
ZEND_END_ARG_INFO()

ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_scandir, 0, 1, MAY_BE_ARRAY|MAY_BE_FALSE)
	ZEND_ARG_TYPE_INFO(0, directory, IS_STRING, 0)
	ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, sorting_order, IS_LONG, 0, "SCANDIR_SORT_ASCENDING")
	ZEND_ARG_INFO_WITH_DEFAULT_VALUE(0, context, "null")
ZEND_END_ARG_INFO()

ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_glob, 0, 1, MAY_BE_ARRAY|MAY_BE_FALSE)
	ZEND_ARG_TYPE_INFO(0, pattern, IS_STRING, 0)
	ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, flags, IS_LONG, 0, "0")
ZEND_END_ARG_INFO()

ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_exec, 0, 1, MAY_BE_STRING|MAY_BE_FALSE)
	ZEND_ARG_TYPE_INFO(0, command, IS_STRING, 0)
	ZEND_ARG_INFO_WITH_DEFAULT_VALUE(1, output, "null")
	ZEND_ARG_INFO_WITH_DEFAULT_VALUE(1, result_code, "null")
ZEND_END_ARG_INFO()

ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_system, 0, 1, MAY_BE_STRING|MAY_BE_FALSE)
	ZEND_ARG_TYPE_INFO(0, command, IS_STRING, 0)
	ZEND_ARG_INFO_WITH_DEFAULT_VALUE(1, result_code, "null")
ZEND_END_ARG_INFO()

ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_passthru, 0, 1, IS_FALSE, 1)
	ZEND_ARG_TYPE_INFO(0, command, IS_STRING, 0)
	ZEND_ARG_INFO_WITH_DEFAULT_VALUE(1, result_code, "null")
ZEND_END_ARG_INFO()

ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_escapeshellcmd, 0, 1, IS_STRING, 0)
	ZEND_ARG_TYPE_INFO(0, command, IS_STRING, 0)
ZEND_END_ARG_INFO()

ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_escapeshellarg, 0, 1, IS_STRING, 0)
	ZEND_ARG_TYPE_INFO(0, arg, IS_STRING, 0)
ZEND_END_ARG_INFO()

ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_shell_exec, 0, 1, MAY_BE_STRING|MAY_BE_FALSE|MAY_BE_NULL)
	ZEND_ARG_TYPE_INFO(0, command, IS_STRING, 0)
ZEND_END_ARG_INFO()

#if defined(HAVE_NICE)
ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_proc_nice, 0, 1, _IS_BOOL, 0)
	ZEND_ARG_TYPE_INFO(0, priority, IS_LONG, 0)
ZEND_END_ARG_INFO()
#endif

ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_flock, 0, 2, _IS_BOOL, 0)
	ZEND_ARG_INFO(0, stream)
	ZEND_ARG_TYPE_INFO(0, operation, IS_LONG, 0)
	ZEND_ARG_INFO_WITH_DEFAULT_VALUE(1, would_block, "null")
ZEND_END_ARG_INFO()

ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_get_meta_tags, 0, 1, MAY_BE_ARRAY|MAY_BE_FALSE)
	ZEND_ARG_TYPE_INFO(0, filename, IS_STRING, 0)
	ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, use_include_path, _IS_BOOL, 0, "false")
ZEND_END_ARG_INFO()

ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_pclose, 0, 1, IS_LONG, 0)
	ZEND_ARG_INFO(0, handle)
ZEND_END_ARG_INFO()

ZEND_BEGIN_ARG_INFO_EX(arginfo_popen, 0, 0, 2)
	ZEND_ARG_TYPE_INFO(0, command, IS_STRING, 0)
	ZEND_ARG_TYPE_INFO(0, mode, IS_STRING, 0)
ZEND_END_ARG_INFO()

ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_readfile, 0, 1, MAY_BE_LONG|MAY_BE_FALSE)
	ZEND_ARG_TYPE_INFO(0, filename, IS_STRING, 0)
	ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, use_include_path, _IS_BOOL, 0, "false")
	ZEND_ARG_INFO_WITH_DEFAULT_VALUE(0, context, "null")
ZEND_END_ARG_INFO()

ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_rewind, 0, 1, _IS_BOOL, 0)
	ZEND_ARG_INFO(0, stream)
ZEND_END_ARG_INFO()

ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_rmdir, 0, 1, _IS_BOOL, 0)
	ZEND_ARG_TYPE_INFO(0, directory, IS_STRING, 0)
	ZEND_ARG_INFO_WITH_DEFAULT_VALUE(0, context, "null")
ZEND_END_ARG_INFO()

ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_umask, 0, 0, IS_LONG, 0)
	ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, mask, IS_LONG, 1, "null")
ZEND_END_ARG_INFO()

#define arginfo_fclose arginfo_rewind

#define arginfo_feof arginfo_rewind

ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_fgetc, 0, 1, MAY_BE_STRING|MAY_BE_FALSE)
	ZEND_ARG_INFO(0, stream)
ZEND_END_ARG_INFO()

ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_fgets, 0, 1, MAY_BE_STRING|MAY_BE_FALSE)
	ZEND_ARG_INFO(0, stream)
	ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, length, IS_LONG, 1, "null")
ZEND_END_ARG_INFO()

ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_fread, 0, 2, MAY_BE_STRING|MAY_BE_FALSE)
	ZEND_ARG_INFO(0, stream)
	ZEND_ARG_TYPE_INFO(0, length, IS_LONG, 0)
ZEND_END_ARG_INFO()

ZEND_BEGIN_ARG_INFO_EX(arginfo_fopen, 0, 0, 2)
	ZEND_ARG_TYPE_INFO(0, filename, IS_STRING, 0)
	ZEND_ARG_TYPE_INFO(0, mode, IS_STRING, 0)
	ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, use_include_path, _IS_BOOL, 0, "false")
	ZEND_ARG_INFO_WITH_DEFAULT_VALUE(0, context, "null")
ZEND_END_ARG_INFO()

ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_fscanf, 0, 2, MAY_BE_ARRAY|MAY_BE_LONG|MAY_BE_FALSE|MAY_BE_NULL)
	ZEND_ARG_INFO(0, stream)
	ZEND_ARG_TYPE_INFO(0, format, IS_STRING, 0)
	ZEND_ARG_VARIADIC_TYPE_INFO(1, vars, IS_MIXED, 0)
ZEND_END_ARG_INFO()

ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_fpassthru, 0, 1, IS_LONG, 0)
	ZEND_ARG_INFO(0, stream)
ZEND_END_ARG_INFO()

ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_ftruncate, 0, 2, _IS_BOOL, 0)
	ZEND_ARG_INFO(0, stream)
	ZEND_ARG_TYPE_INFO(0, size, IS_LONG, 0)
ZEND_END_ARG_INFO()

ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_fstat, 0, 1, MAY_BE_ARRAY|MAY_BE_FALSE)
	ZEND_ARG_INFO(0, stream)
ZEND_END_ARG_INFO()

ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_fseek, 0, 2, IS_LONG, 0)
	ZEND_ARG_INFO(0, stream)
	ZEND_ARG_TYPE_INFO(0, offset, IS_LONG, 0)
	ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, whence, IS_LONG, 0, "SEEK_SET")
ZEND_END_ARG_INFO()

ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_ftell, 0, 1, MAY_BE_LONG|MAY_BE_FALSE)
	ZEND_ARG_INFO(0, stream)
ZEND_END_ARG_INFO()

#define arginfo_fflush arginfo_rewind

#define arginfo_fsync arginfo_rewind

#define arginfo_fdatasync arginfo_rewind

ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_fwrite, 0, 2, MAY_BE_LONG|MAY_BE_FALSE)
	ZEND_ARG_INFO(0, stream)
	ZEND_ARG_TYPE_INFO(0, data, IS_STRING, 0)
	ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, length, IS_LONG, 1, "null")
ZEND_END_ARG_INFO()

#define arginfo_fputs arginfo_fwrite

ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_mkdir, 0, 1, _IS_BOOL, 0)
	ZEND_ARG_TYPE_INFO(0, directory, IS_STRING, 0)
	ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, permissions, IS_LONG, 0, "0777")
	ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, recursive, _IS_BOOL, 0, "false")
	ZEND_ARG_INFO_WITH_DEFAULT_VALUE(0, context, "null")
ZEND_END_ARG_INFO()

ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_rename, 0, 2, _IS_BOOL, 0)
	ZEND_ARG_TYPE_INFO(0, from, IS_STRING, 0)
	ZEND_ARG_TYPE_INFO(0, to, IS_STRING, 0)
	ZEND_ARG_INFO_WITH_DEFAULT_VALUE(0, context, "null")
ZEND_END_ARG_INFO()

#define arginfo_copy arginfo_rename

ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_tempnam, 0, 2, MAY_BE_STRING|MAY_BE_FALSE)
	ZEND_ARG_TYPE_INFO(0, directory, IS_STRING, 0)
	ZEND_ARG_TYPE_INFO(0, prefix, IS_STRING, 0)
ZEND_END_ARG_INFO()

ZEND_BEGIN_ARG_INFO_EX(arginfo_tmpfile, 0, 0, 0)
ZEND_END_ARG_INFO()

ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_file, 0, 1, MAY_BE_ARRAY|MAY_BE_FALSE)
	ZEND_ARG_TYPE_INFO(0, filename, IS_STRING, 0)
	ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, flags, IS_LONG, 0, "0")
	ZEND_ARG_INFO_WITH_DEFAULT_VALUE(0, context, "null")
ZEND_END_ARG_INFO()

ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_file_get_contents, 0, 1, MAY_BE_STRING|MAY_BE_FALSE)
	ZEND_ARG_TYPE_INFO(0, filename, IS_STRING, 0)
	ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, use_include_path, _IS_BOOL, 0, "false")
	ZEND_ARG_INFO_WITH_DEFAULT_VALUE(0, context, "null")
	ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, offset, IS_LONG, 0, "0")
	ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, length, IS_LONG, 1, "null")
ZEND_END_ARG_INFO()

ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_unlink, 0, 1, _IS_BOOL, 0)
	ZEND_ARG_TYPE_INFO(0, filename, IS_STRING, 0)
	ZEND_ARG_INFO_WITH_DEFAULT_VALUE(0, context, "null")
ZEND_END_ARG_INFO()

ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_file_put_contents, 0, 2, MAY_BE_LONG|MAY_BE_FALSE)
	ZEND_ARG_TYPE_INFO(0, filename, IS_STRING, 0)
	ZEND_ARG_TYPE_INFO(0, data, IS_MIXED, 0)
	ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, flags, IS_LONG, 0, "0")
	ZEND_ARG_INFO_WITH_DEFAULT_VALUE(0, context, "null")
ZEND_END_ARG_INFO()

ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_fputcsv, 0, 2, MAY_BE_LONG|MAY_BE_FALSE)
	ZEND_ARG_INFO(0, stream)
	ZEND_ARG_TYPE_INFO(0, fields, IS_ARRAY, 0)
	ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, separator, IS_STRING, 0, "\",\"")
	ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, enclosure, IS_STRING, 0, "\"\\\"\"")
	ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, escape, IS_STRING, 0, "\"\\\\\"")
	ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, eol, IS_STRING, 0, "\"\\n\"")
ZEND_END_ARG_INFO()

ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_fgetcsv, 0, 1, MAY_BE_ARRAY|MAY_BE_FALSE)
	ZEND_ARG_INFO(0, stream)
	ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, length, IS_LONG, 1, "null")
	ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, separator, IS_STRING, 0, "\",\"")
	ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, enclosure, IS_STRING, 0, "\"\\\"\"")
	ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, escape, IS_STRING, 0, "\"\\\\\"")
ZEND_END_ARG_INFO()

ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_realpath, 0, 1, MAY_BE_STRING|MAY_BE_FALSE)
	ZEND_ARG_TYPE_INFO(0, path, IS_STRING, 0)
ZEND_END_ARG_INFO()

#if defined(HAVE_FNMATCH)
ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_fnmatch, 0, 2, _IS_BOOL, 0)
	ZEND_ARG_TYPE_INFO(0, pattern, IS_STRING, 0)
	ZEND_ARG_TYPE_INFO(0, filename, IS_STRING, 0)
	ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, flags, IS_LONG, 0, "0")
ZEND_END_ARG_INFO()
#endif

#define arginfo_sys_get_temp_dir arginfo_get_current_user

ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_fileatime, 0, 1, MAY_BE_LONG|MAY_BE_FALSE)
	ZEND_ARG_TYPE_INFO(0, filename, IS_STRING, 0)
ZEND_END_ARG_INFO()

#define arginfo_filectime arginfo_fileatime

#define arginfo_filegroup arginfo_fileatime

#define arginfo_fileinode arginfo_fileatime

#define arginfo_filemtime arginfo_fileatime

#define arginfo_fileowner arginfo_fileatime

#define arginfo_fileperms arginfo_fileatime

#define arginfo_filesize arginfo_fileatime

ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_filetype, 0, 1, MAY_BE_STRING|MAY_BE_FALSE)
	ZEND_ARG_TYPE_INFO(0, filename, IS_STRING, 0)
ZEND_END_ARG_INFO()

#define arginfo_file_exists arginfo_is_uploaded_file

#define arginfo_is_writable arginfo_is_uploaded_file

#define arginfo_is_writeable arginfo_is_uploaded_file

#define arginfo_is_readable arginfo_is_uploaded_file

#define arginfo_is_executable arginfo_is_uploaded_file

#define arginfo_is_file arginfo_is_uploaded_file

#define arginfo_is_dir arginfo_is_uploaded_file

#define arginfo_is_link arginfo_is_uploaded_file

ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_stat, 0, 1, MAY_BE_ARRAY|MAY_BE_FALSE)
	ZEND_ARG_TYPE_INFO(0, filename, IS_STRING, 0)
ZEND_END_ARG_INFO()

#define arginfo_lstat arginfo_stat

ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_chown, 0, 2, _IS_BOOL, 0)
	ZEND_ARG_TYPE_INFO(0, filename, IS_STRING, 0)
	ZEND_ARG_TYPE_MASK(0, user, MAY_BE_STRING|MAY_BE_LONG, NULL)
ZEND_END_ARG_INFO()

ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_chgrp, 0, 2, _IS_BOOL, 0)
	ZEND_ARG_TYPE_INFO(0, filename, IS_STRING, 0)
	ZEND_ARG_TYPE_MASK(0, group, MAY_BE_STRING|MAY_BE_LONG, NULL)
ZEND_END_ARG_INFO()

#if defined(HAVE_LCHOWN)
ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_lchown, 0, 2, _IS_BOOL, 0)
	ZEND_ARG_TYPE_INFO(0, filename, IS_STRING, 0)
	ZEND_ARG_TYPE_MASK(0, user, MAY_BE_STRING|MAY_BE_LONG, NULL)
ZEND_END_ARG_INFO()

ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_lchgrp, 0, 2, _IS_BOOL, 0)
	ZEND_ARG_TYPE_INFO(0, filename, IS_STRING, 0)
	ZEND_ARG_TYPE_MASK(0, group, MAY_BE_STRING|MAY_BE_LONG, NULL)
ZEND_END_ARG_INFO()
#endif

ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_chmod, 0, 2, _IS_BOOL, 0)
	ZEND_ARG_TYPE_INFO(0, filename, IS_STRING, 0)
	ZEND_ARG_TYPE_INFO(0, permissions, IS_LONG, 0)
ZEND_END_ARG_INFO()

#if defined(HAVE_UTIME)
ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_touch, 0, 1, _IS_BOOL, 0)
	ZEND_ARG_TYPE_INFO(0, filename, IS_STRING, 0)
	ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, mtime, IS_LONG, 1, "null")
	ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, atime, IS_LONG, 1, "null")
ZEND_END_ARG_INFO()
#endif

ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_clearstatcache, 0, 0, IS_VOID, 0)
	ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, clear_realpath_cache, _IS_BOOL, 0, "false")
	ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, filename, IS_STRING, 0, "\"\"")
ZEND_END_ARG_INFO()

ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_disk_total_space, 0, 1, MAY_BE_DOUBLE|MAY_BE_FALSE)
	ZEND_ARG_TYPE_INFO(0, directory, IS_STRING, 0)
ZEND_END_ARG_INFO()

#define arginfo_disk_free_space arginfo_disk_total_space

#define arginfo_diskfreespace arginfo_disk_total_space

#define arginfo_realpath_cache_get arginfo_ob_list_handlers

#define arginfo_realpath_cache_size arginfo_ob_get_level

ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_sprintf, 0, 1, IS_STRING, 0)
	ZEND_ARG_TYPE_INFO(0, format, IS_STRING, 0)
	ZEND_ARG_VARIADIC_TYPE_INFO(0, values, IS_MIXED, 0)
ZEND_END_ARG_INFO()

ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_printf, 0, 1, IS_LONG, 0)
	ZEND_ARG_TYPE_INFO(0, format, IS_STRING, 0)
	ZEND_ARG_VARIADIC_TYPE_INFO(0, values, IS_MIXED, 0)
ZEND_END_ARG_INFO()

ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_vprintf, 0, 2, IS_LONG, 0)
	ZEND_ARG_TYPE_INFO(0, format, IS_STRING, 0)
	ZEND_ARG_TYPE_INFO(0, values, IS_ARRAY, 0)
ZEND_END_ARG_INFO()

ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_vsprintf, 0, 2, IS_STRING, 0)
	ZEND_ARG_TYPE_INFO(0, format, IS_STRING, 0)
	ZEND_ARG_TYPE_INFO(0, values, IS_ARRAY, 0)
ZEND_END_ARG_INFO()

ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_fprintf, 0, 2, IS_LONG, 0)
	ZEND_ARG_INFO(0, stream)
	ZEND_ARG_TYPE_INFO(0, format, IS_STRING, 0)
	ZEND_ARG_VARIADIC_TYPE_INFO(0, values, IS_MIXED, 0)
ZEND_END_ARG_INFO()

ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_vfprintf, 0, 3, IS_LONG, 0)
	ZEND_ARG_INFO(0, stream)
	ZEND_ARG_TYPE_INFO(0, format, IS_STRING, 0)
	ZEND_ARG_TYPE_INFO(0, values, IS_ARRAY, 0)
ZEND_END_ARG_INFO()

ZEND_BEGIN_ARG_INFO_EX(arginfo_fsockopen, 0, 0, 1)
	ZEND_ARG_TYPE_INFO(0, hostname, IS_STRING, 0)
	ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, port, IS_LONG, 0, "-1")
	ZEND_ARG_INFO_WITH_DEFAULT_VALUE(1, error_code, "null")
	ZEND_ARG_INFO_WITH_DEFAULT_VALUE(1, error_message, "null")
	ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, timeout, IS_DOUBLE, 1, "null")
ZEND_END_ARG_INFO()

#define arginfo_pfsockopen arginfo_fsockopen

ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_http_build_query, 0, 1, IS_STRING, 0)
	ZEND_ARG_TYPE_MASK(0, data, MAY_BE_ARRAY|MAY_BE_OBJECT, NULL)
	ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, numeric_prefix, IS_STRING, 0, "\"\"")
	ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, arg_separator, IS_STRING, 1, "null")
	ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, encoding_type, IS_LONG, 0, "PHP_QUERY_RFC1738")
ZEND_END_ARG_INFO()

#define arginfo_http_get_last_response_headers arginfo_error_get_last

#define arginfo_http_clear_last_response_headers arginfo_flush

ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_request_parse_body, 0, 0, IS_ARRAY, 0)
	ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, options, IS_ARRAY, 1, "null")
ZEND_END_ARG_INFO()

ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_image_type_to_mime_type, 0, 1, IS_STRING, 0)
	ZEND_ARG_TYPE_INFO(0, image_type, IS_LONG, 0)
ZEND_END_ARG_INFO()

ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_image_type_to_extension, 0, 1, MAY_BE_STRING|MAY_BE_FALSE)
	ZEND_ARG_TYPE_INFO(0, image_type, IS_LONG, 0)
	ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, include_dot, _IS_BOOL, 0, "true")
ZEND_END_ARG_INFO()

ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_getimagesize, 0, 1, MAY_BE_ARRAY|MAY_BE_FALSE)
	ZEND_ARG_TYPE_INFO(0, filename, IS_STRING, 0)
	ZEND_ARG_INFO_WITH_DEFAULT_VALUE(1, image_info, "null")
ZEND_END_ARG_INFO()

ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_getimagesizefromstring, 0, 1, MAY_BE_ARRAY|MAY_BE_FALSE)
	ZEND_ARG_TYPE_INFO(0, string, IS_STRING, 0)
	ZEND_ARG_INFO_WITH_DEFAULT_VALUE(1, image_info, "null")
ZEND_END_ARG_INFO()

ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_phpinfo, 0, 0, IS_TRUE, 0)
	ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, flags, IS_LONG, 0, "INFO_ALL")
ZEND_END_ARG_INFO()

ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_phpversion, 0, 0, MAY_BE_STRING|MAY_BE_FALSE)
	ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, extension, IS_STRING, 1, "null")
ZEND_END_ARG_INFO()

ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_phpcredits, 0, 0, IS_TRUE, 0)
	ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, flags, IS_LONG, 0, "CREDITS_ALL")
ZEND_END_ARG_INFO()

#define arginfo_php_sapi_name arginfo_ob_get_flush

ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_php_uname, 0, 0, IS_STRING, 0)
	ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, mode, IS_STRING, 0, "\"a\"")
ZEND_END_ARG_INFO()

#define arginfo_php_ini_scanned_files arginfo_ob_get_flush

#define arginfo_php_ini_loaded_file arginfo_ob_get_flush

ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_iptcembed, 0, 2, MAY_BE_STRING|MAY_BE_BOOL)
	ZEND_ARG_TYPE_INFO(0, iptc_data, IS_STRING, 0)
	ZEND_ARG_TYPE_INFO(0, filename, IS_STRING, 0)
	ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, spool, IS_LONG, 0, "0")
ZEND_END_ARG_INFO()

ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_iptcparse, 0, 1, MAY_BE_ARRAY|MAY_BE_FALSE)
	ZEND_ARG_TYPE_INFO(0, iptc_block, IS_STRING, 0)
ZEND_END_ARG_INFO()

ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_levenshtein, 0, 2, IS_LONG, 0)
	ZEND_ARG_TYPE_INFO(0, string1, IS_STRING, 0)
	ZEND_ARG_TYPE_INFO(0, string2, IS_STRING, 0)
	ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, insertion_cost, IS_LONG, 0, "1")
	ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, replacement_cost, IS_LONG, 0, "1")
	ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, deletion_cost, IS_LONG, 0, "1")
ZEND_END_ARG_INFO()

#if (defined(HAVE_SYMLINK) || defined(PHP_WIN32))
ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_readlink, 0, 1, MAY_BE_STRING|MAY_BE_FALSE)
	ZEND_ARG_TYPE_INFO(0, path, IS_STRING, 0)
ZEND_END_ARG_INFO()

ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_linkinfo, 0, 1, MAY_BE_LONG|MAY_BE_FALSE)
	ZEND_ARG_TYPE_INFO(0, path, IS_STRING, 0)
ZEND_END_ARG_INFO()

ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_symlink, 0, 2, _IS_BOOL, 0)
	ZEND_ARG_TYPE_INFO(0, target, IS_STRING, 0)
	ZEND_ARG_TYPE_INFO(0, link, IS_STRING, 0)
ZEND_END_ARG_INFO()

#define arginfo_link arginfo_symlink
#endif

ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_mail, 0, 3, _IS_BOOL, 0)
	ZEND_ARG_TYPE_INFO(0, to, IS_STRING, 0)
	ZEND_ARG_TYPE_INFO(0, subject, IS_STRING, 0)
	ZEND_ARG_TYPE_INFO(0, message, IS_STRING, 0)
	ZEND_ARG_TYPE_MASK(0, additional_headers, MAY_BE_ARRAY|MAY_BE_STRING, "[]")
	ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, additional_params, IS_STRING, 0, "\"\"")
ZEND_END_ARG_INFO()

ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_abs, 0, 1, MAY_BE_LONG|MAY_BE_DOUBLE)
	ZEND_ARG_TYPE_MASK(0, num, MAY_BE_LONG|MAY_BE_DOUBLE, NULL)
ZEND_END_ARG_INFO()

ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_ceil, 0, 1, IS_DOUBLE, 0)
	ZEND_ARG_TYPE_MASK(0, num, MAY_BE_LONG|MAY_BE_DOUBLE, NULL)
ZEND_END_ARG_INFO()

#define arginfo_floor arginfo_ceil

ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_round, 0, 1, IS_DOUBLE, 0)
	ZEND_ARG_TYPE_MASK(0, num, MAY_BE_LONG|MAY_BE_DOUBLE, NULL)
	ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, precision, IS_LONG, 0, "0")
	ZEND_ARG_OBJ_TYPE_MASK(0, mode, RoundingMode, MAY_BE_LONG, "RoundingMode::HalfAwayFromZero")
ZEND_END_ARG_INFO()

ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_sin, 0, 1, IS_DOUBLE, 0)
	ZEND_ARG_TYPE_INFO(0, num, IS_DOUBLE, 0)
ZEND_END_ARG_INFO()

#define arginfo_cos arginfo_sin

#define arginfo_tan arginfo_sin

#define arginfo_asin arginfo_sin

#define arginfo_acos arginfo_sin

#define arginfo_atan arginfo_sin

#define arginfo_atanh arginfo_sin

ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_atan2, 0, 2, IS_DOUBLE, 0)
	ZEND_ARG_TYPE_INFO(0, y, IS_DOUBLE, 0)
	ZEND_ARG_TYPE_INFO(0, x, IS_DOUBLE, 0)
ZEND_END_ARG_INFO()

#define arginfo_sinh arginfo_sin

#define arginfo_cosh arginfo_sin

#define arginfo_tanh arginfo_sin

#define arginfo_asinh arginfo_sin

#define arginfo_acosh arginfo_sin

#define arginfo_expm1 arginfo_sin

#define arginfo_log1p arginfo_sin

ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_pi, 0, 0, IS_DOUBLE, 0)
ZEND_END_ARG_INFO()

ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_is_finite, 0, 1, _IS_BOOL, 0)
	ZEND_ARG_TYPE_INFO(0, num, IS_DOUBLE, 0)
ZEND_END_ARG_INFO()

#define arginfo_is_nan arginfo_is_finite

ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_intdiv, 0, 2, IS_LONG, 0)
	ZEND_ARG_TYPE_INFO(0, num1, IS_LONG, 0)
	ZEND_ARG_TYPE_INFO(0, num2, IS_LONG, 0)
ZEND_END_ARG_INFO()

#define arginfo_is_infinite arginfo_is_finite

ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_pow, 0, 2, MAY_BE_LONG|MAY_BE_DOUBLE|MAY_BE_OBJECT)
	ZEND_ARG_TYPE_INFO(0, num, IS_MIXED, 0)
	ZEND_ARG_TYPE_INFO(0, exponent, IS_MIXED, 0)
ZEND_END_ARG_INFO()

#define arginfo_exp arginfo_sin

ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_log, 0, 1, IS_DOUBLE, 0)
	ZEND_ARG_TYPE_INFO(0, num, IS_DOUBLE, 0)
	ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, base, IS_DOUBLE, 0, "M_E")
ZEND_END_ARG_INFO()

#define arginfo_log10 arginfo_sin

#define arginfo_sqrt arginfo_sin

ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_hypot, 0, 2, IS_DOUBLE, 0)
	ZEND_ARG_TYPE_INFO(0, x, IS_DOUBLE, 0)
	ZEND_ARG_TYPE_INFO(0, y, IS_DOUBLE, 0)
ZEND_END_ARG_INFO()

#define arginfo_deg2rad arginfo_sin

#define arginfo_rad2deg arginfo_sin

ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_bindec, 0, 1, MAY_BE_LONG|MAY_BE_DOUBLE)
	ZEND_ARG_TYPE_INFO(0, binary_string, IS_STRING, 0)
ZEND_END_ARG_INFO()

ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_hexdec, 0, 1, MAY_BE_LONG|MAY_BE_DOUBLE)
	ZEND_ARG_TYPE_INFO(0, hex_string, IS_STRING, 0)
ZEND_END_ARG_INFO()

ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_octdec, 0, 1, MAY_BE_LONG|MAY_BE_DOUBLE)
	ZEND_ARG_TYPE_INFO(0, octal_string, IS_STRING, 0)
ZEND_END_ARG_INFO()

ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_decbin, 0, 1, IS_STRING, 0)
	ZEND_ARG_TYPE_INFO(0, num, IS_LONG, 0)
ZEND_END_ARG_INFO()

#define arginfo_decoct arginfo_decbin

#define arginfo_dechex arginfo_decbin

ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_base_convert, 0, 3, IS_STRING, 0)
	ZEND_ARG_TYPE_INFO(0, num, IS_STRING, 0)
	ZEND_ARG_TYPE_INFO(0, from_base, IS_LONG, 0)
	ZEND_ARG_TYPE_INFO(0, to_base, IS_LONG, 0)
ZEND_END_ARG_INFO()

ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_number_format, 0, 1, IS_STRING, 0)
	ZEND_ARG_TYPE_INFO(0, num, IS_DOUBLE, 0)
	ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, decimals, IS_LONG, 0, "0")
	ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, decimal_separator, IS_STRING, 1, "\".\"")
	ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, thousands_separator, IS_STRING, 1, "\",\"")
ZEND_END_ARG_INFO()

ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_fmod, 0, 2, IS_DOUBLE, 0)
	ZEND_ARG_TYPE_INFO(0, num1, IS_DOUBLE, 0)
	ZEND_ARG_TYPE_INFO(0, num2, IS_DOUBLE, 0)
ZEND_END_ARG_INFO()

#define arginfo_fdiv arginfo_fmod

ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_fpow, 0, 2, IS_DOUBLE, 0)
	ZEND_ARG_TYPE_INFO(0, num, IS_DOUBLE, 0)
	ZEND_ARG_TYPE_INFO(0, exponent, IS_DOUBLE, 0)
ZEND_END_ARG_INFO()

#if defined(HAVE_GETTIMEOFDAY)
ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_microtime, 0, 0, MAY_BE_STRING|MAY_BE_DOUBLE)
	ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, as_float, _IS_BOOL, 0, "false")
ZEND_END_ARG_INFO()

ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_gettimeofday, 0, 0, MAY_BE_ARRAY|MAY_BE_DOUBLE)
	ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, as_float, _IS_BOOL, 0, "false")
ZEND_END_ARG_INFO()
#endif

#if defined(HAVE_GETRUSAGE)
ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_getrusage, 0, 0, MAY_BE_ARRAY|MAY_BE_FALSE)
	ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, mode, IS_LONG, 0, "0")
ZEND_END_ARG_INFO()
#endif

#define arginfo_pack arginfo_sprintf

ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_unpack, 0, 2, MAY_BE_ARRAY|MAY_BE_FALSE)
	ZEND_ARG_TYPE_INFO(0, format, IS_STRING, 0)
	ZEND_ARG_TYPE_INFO(0, string, IS_STRING, 0)
	ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, offset, IS_LONG, 0, "0")
ZEND_END_ARG_INFO()

ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_password_get_info, 0, 1, IS_ARRAY, 0)
	ZEND_ARG_TYPE_INFO(0, hash, IS_STRING, 0)
ZEND_END_ARG_INFO()

ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_password_hash, 0, 2, IS_STRING, 0)
	ZEND_ARG_TYPE_INFO(0, password, IS_STRING, 0)
	ZEND_ARG_TYPE_MASK(0, algo, MAY_BE_STRING|MAY_BE_LONG|MAY_BE_NULL, NULL)
	ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, options, IS_ARRAY, 0, "[]")
ZEND_END_ARG_INFO()

ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_password_needs_rehash, 0, 2, _IS_BOOL, 0)
	ZEND_ARG_TYPE_INFO(0, hash, IS_STRING, 0)
	ZEND_ARG_TYPE_MASK(0, algo, MAY_BE_STRING|MAY_BE_LONG|MAY_BE_NULL, NULL)
	ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, options, IS_ARRAY, 0, "[]")
ZEND_END_ARG_INFO()

ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_password_verify, 0, 2, _IS_BOOL, 0)
	ZEND_ARG_TYPE_INFO(0, password, IS_STRING, 0)
	ZEND_ARG_TYPE_INFO(0, hash, IS_STRING, 0)
ZEND_END_ARG_INFO()

#define arginfo_password_algos arginfo_ob_list_handlers

#if defined(PHP_CAN_SUPPORT_PROC_OPEN)
ZEND_BEGIN_ARG_INFO_EX(arginfo_proc_open, 0, 0, 3)
	ZEND_ARG_TYPE_MASK(0, command, MAY_BE_ARRAY|MAY_BE_STRING, NULL)
	ZEND_ARG_TYPE_INFO(0, descriptor_spec, IS_ARRAY, 0)
	ZEND_ARG_INFO(1, pipes)
	ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, cwd, IS_STRING, 1, "null")
	ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, env_vars, IS_ARRAY, 1, "null")
	ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, options, IS_ARRAY, 1, "null")
ZEND_END_ARG_INFO()

ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_proc_close, 0, 1, IS_LONG, 0)
	ZEND_ARG_INFO(0, process)
ZEND_END_ARG_INFO()

ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_proc_terminate, 0, 1, _IS_BOOL, 0)
	ZEND_ARG_INFO(0, process)
	ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, signal, IS_LONG, 0, "15")
ZEND_END_ARG_INFO()

ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_proc_get_status, 0, 1, IS_ARRAY, 0)
	ZEND_ARG_INFO(0, process)
ZEND_END_ARG_INFO()
#endif

#define arginfo_quoted_printable_decode arginfo_base64_encode

#define arginfo_quoted_printable_encode arginfo_base64_encode

#define arginfo_soundex arginfo_base64_encode

ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_stream_select, 0, 4, MAY_BE_LONG|MAY_BE_FALSE)
	ZEND_ARG_TYPE_INFO(1, read, IS_ARRAY, 1)
	ZEND_ARG_TYPE_INFO(1, write, IS_ARRAY, 1)
	ZEND_ARG_TYPE_INFO(1, except, IS_ARRAY, 1)
	ZEND_ARG_TYPE_INFO(0, seconds, IS_LONG, 1)
	ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, microseconds, IS_LONG, 1, "null")
ZEND_END_ARG_INFO()

ZEND_BEGIN_ARG_INFO_EX(arginfo_stream_context_create, 0, 0, 0)
	ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, options, IS_ARRAY, 1, "null")
	ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, params, IS_ARRAY, 1, "null")
ZEND_END_ARG_INFO()

ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_stream_context_set_params, 0, 2, IS_TRUE, 0)
	ZEND_ARG_INFO(0, context)
	ZEND_ARG_TYPE_INFO(0, params, IS_ARRAY, 0)
ZEND_END_ARG_INFO()

ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_stream_context_get_params, 0, 1, IS_ARRAY, 0)
	ZEND_ARG_INFO(0, context)
ZEND_END_ARG_INFO()

ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_stream_context_set_option, 0, 2, IS_TRUE, 0)
	ZEND_ARG_INFO(0, context)
	ZEND_ARG_TYPE_MASK(0, wrapper_or_options, MAY_BE_ARRAY|MAY_BE_STRING, NULL)
	ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, option_name, IS_STRING, 1, "null")
	ZEND_ARG_TYPE_INFO(0, value, IS_MIXED, 0)
ZEND_END_ARG_INFO()

ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_stream_context_set_options, 0, 2, IS_TRUE, 0)
	ZEND_ARG_INFO(0, context)
	ZEND_ARG_TYPE_INFO(0, options, IS_ARRAY, 0)
ZEND_END_ARG_INFO()

ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_stream_context_get_options, 0, 1, IS_ARRAY, 0)
	ZEND_ARG_INFO(0, stream_or_context)
ZEND_END_ARG_INFO()

ZEND_BEGIN_ARG_INFO_EX(arginfo_stream_context_get_default, 0, 0, 0)
	ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, options, IS_ARRAY, 1, "null")
ZEND_END_ARG_INFO()

ZEND_BEGIN_ARG_INFO_EX(arginfo_stream_context_set_default, 0, 0, 1)
	ZEND_ARG_TYPE_INFO(0, options, IS_ARRAY, 0)
ZEND_END_ARG_INFO()

ZEND_BEGIN_ARG_INFO_EX(arginfo_stream_filter_prepend, 0, 0, 2)
	ZEND_ARG_INFO(0, stream)
	ZEND_ARG_TYPE_INFO(0, filter_name, IS_STRING, 0)
	ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, mode, IS_LONG, 0, "0")
	ZEND_ARG_TYPE_INFO(0, params, IS_MIXED, 0)
ZEND_END_ARG_INFO()

#define arginfo_stream_filter_append arginfo_stream_filter_prepend

ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_stream_filter_remove, 0, 1, _IS_BOOL, 0)
	ZEND_ARG_INFO(0, stream_filter)
ZEND_END_ARG_INFO()

ZEND_BEGIN_ARG_INFO_EX(arginfo_stream_socket_client, 0, 0, 1)
	ZEND_ARG_TYPE_INFO(0, address, IS_STRING, 0)
	ZEND_ARG_INFO_WITH_DEFAULT_VALUE(1, error_code, "null")
	ZEND_ARG_INFO_WITH_DEFAULT_VALUE(1, error_message, "null")
	ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, timeout, IS_DOUBLE, 1, "null")
	ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, flags, IS_LONG, 0, "STREAM_CLIENT_CONNECT")
	ZEND_ARG_INFO_WITH_DEFAULT_VALUE(0, context, "null")
ZEND_END_ARG_INFO()

ZEND_BEGIN_ARG_INFO_EX(arginfo_stream_socket_server, 0, 0, 1)
	ZEND_ARG_TYPE_INFO(0, address, IS_STRING, 0)
	ZEND_ARG_INFO_WITH_DEFAULT_VALUE(1, error_code, "null")
	ZEND_ARG_INFO_WITH_DEFAULT_VALUE(1, error_message, "null")
	ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, flags, IS_LONG, 0, "STREAM_SERVER_BIND | STREAM_SERVER_LISTEN")
	ZEND_ARG_INFO_WITH_DEFAULT_VALUE(0, context, "null")
ZEND_END_ARG_INFO()

ZEND_BEGIN_ARG_INFO_EX(arginfo_stream_socket_accept, 0, 0, 1)
	ZEND_ARG_INFO(0, socket)
	ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, timeout, IS_DOUBLE, 1, "null")
	ZEND_ARG_INFO_WITH_DEFAULT_VALUE(1, peer_name, "null")
ZEND_END_ARG_INFO()

ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_stream_socket_get_name, 0, 2, MAY_BE_STRING|MAY_BE_FALSE)
	ZEND_ARG_INFO(0, socket)
	ZEND_ARG_TYPE_INFO(0, remote, _IS_BOOL, 0)
ZEND_END_ARG_INFO()

ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_stream_socket_recvfrom, 0, 2, MAY_BE_STRING|MAY_BE_FALSE)
	ZEND_ARG_INFO(0, socket)
	ZEND_ARG_TYPE_INFO(0, length, IS_LONG, 0)
	ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, flags, IS_LONG, 0, "0")
	ZEND_ARG_INFO_WITH_DEFAULT_VALUE(1, address, "null")
ZEND_END_ARG_INFO()

ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_stream_socket_sendto, 0, 2, MAY_BE_LONG|MAY_BE_FALSE)
	ZEND_ARG_INFO(0, socket)
	ZEND_ARG_TYPE_INFO(0, data, IS_STRING, 0)
	ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, flags, IS_LONG, 0, "0")
	ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, address, IS_STRING, 0, "\"\"")
ZEND_END_ARG_INFO()

ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_stream_socket_enable_crypto, 0, 2, MAY_BE_LONG|MAY_BE_BOOL)
	ZEND_ARG_INFO(0, stream)
	ZEND_ARG_TYPE_INFO(0, enable, _IS_BOOL, 0)
	ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, crypto_method, IS_LONG, 1, "null")
	ZEND_ARG_INFO_WITH_DEFAULT_VALUE(0, session_stream, "null")
ZEND_END_ARG_INFO()

#if defined(HAVE_SHUTDOWN)
ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_stream_socket_shutdown, 0, 2, _IS_BOOL, 0)
	ZEND_ARG_INFO(0, stream)
	ZEND_ARG_TYPE_INFO(0, mode, IS_LONG, 0)
ZEND_END_ARG_INFO()
#endif

#if defined(HAVE_SOCKETPAIR)
ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_stream_socket_pair, 0, 3, MAY_BE_ARRAY|MAY_BE_FALSE)
	ZEND_ARG_TYPE_INFO(0, domain, IS_LONG, 0)
	ZEND_ARG_TYPE_INFO(0, type, IS_LONG, 0)
	ZEND_ARG_TYPE_INFO(0, protocol, IS_LONG, 0)
ZEND_END_ARG_INFO()
#endif

ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_stream_copy_to_stream, 0, 2, MAY_BE_LONG|MAY_BE_FALSE)
	ZEND_ARG_INFO(0, from)
	ZEND_ARG_INFO(0, to)
	ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, length, IS_LONG, 1, "null")
	ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, offset, IS_LONG, 0, "0")
ZEND_END_ARG_INFO()

ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_stream_get_contents, 0, 1, MAY_BE_STRING|MAY_BE_FALSE)
	ZEND_ARG_INFO(0, stream)
	ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, length, IS_LONG, 1, "null")
	ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, offset, IS_LONG, 0, "-1")
ZEND_END_ARG_INFO()

#define arginfo_stream_supports_lock arginfo_rewind

ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_stream_set_write_buffer, 0, 2, IS_LONG, 0)
	ZEND_ARG_INFO(0, stream)
	ZEND_ARG_TYPE_INFO(0, size, IS_LONG, 0)
ZEND_END_ARG_INFO()

#define arginfo_set_file_buffer arginfo_stream_set_write_buffer

#define arginfo_stream_set_read_buffer arginfo_stream_set_write_buffer

ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_stream_set_blocking, 0, 2, _IS_BOOL, 0)
	ZEND_ARG_INFO(0, stream)
	ZEND_ARG_TYPE_INFO(0, enable, _IS_BOOL, 0)
ZEND_END_ARG_INFO()

#define arginfo_socket_set_blocking arginfo_stream_set_blocking

ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_stream_get_meta_data, 0, 1, IS_ARRAY, 0)
	ZEND_ARG_INFO(0, stream)
ZEND_END_ARG_INFO()

#define arginfo_socket_get_status arginfo_stream_get_meta_data

ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_stream_get_line, 0, 2, MAY_BE_STRING|MAY_BE_FALSE)
	ZEND_ARG_INFO(0, stream)
	ZEND_ARG_TYPE_INFO(0, length, IS_LONG, 0)
	ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, ending, IS_STRING, 0, "\"\"")
ZEND_END_ARG_INFO()

#define arginfo_stream_resolve_include_path arginfo_filetype

#define arginfo_stream_get_wrappers arginfo_ob_list_handlers

#define arginfo_stream_get_transports arginfo_ob_list_handlers

#define arginfo_stream_is_local arginfo_rewind

#define arginfo_stream_isatty arginfo_rewind

#if defined(PHP_WIN32)
ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_sapi_windows_vt100_support, 0, 1, _IS_BOOL, 0)
	ZEND_ARG_INFO(0, stream)
	ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, enable, _IS_BOOL, 1, "null")
ZEND_END_ARG_INFO()
#endif

#define arginfo_stream_set_chunk_size arginfo_stream_set_write_buffer

#if (defined(HAVE_SYS_TIME_H) || defined(PHP_WIN32))
ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_stream_set_timeout, 0, 2, _IS_BOOL, 0)
	ZEND_ARG_INFO(0, stream)
	ZEND_ARG_TYPE_INFO(0, seconds, IS_LONG, 0)
	ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, microseconds, IS_LONG, 0, "0")
ZEND_END_ARG_INFO()

#define arginfo_socket_set_timeout arginfo_stream_set_timeout
#endif

ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_gettype, 0, 1, IS_STRING, 0)
	ZEND_ARG_TYPE_INFO(0, value, IS_MIXED, 0)
ZEND_END_ARG_INFO()

#define arginfo_get_debug_type arginfo_gettype

ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_settype, 0, 2, _IS_BOOL, 0)
	ZEND_ARG_TYPE_INFO(1, var, IS_MIXED, 0)
	ZEND_ARG_TYPE_INFO(0, type, IS_STRING, 0)
ZEND_END_ARG_INFO()

ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_intval, 0, 1, IS_LONG, 0)
	ZEND_ARG_TYPE_INFO(0, value, IS_MIXED, 0)
	ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, base, IS_LONG, 0, "10")
ZEND_END_ARG_INFO()

ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_floatval, 0, 1, IS_DOUBLE, 0)
	ZEND_ARG_TYPE_INFO(0, value, IS_MIXED, 0)
ZEND_END_ARG_INFO()

#define arginfo_doubleval arginfo_floatval

ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_boolval, 0, 1, _IS_BOOL, 0)
	ZEND_ARG_TYPE_INFO(0, value, IS_MIXED, 0)
ZEND_END_ARG_INFO()

#define arginfo_strval arginfo_gettype

#define arginfo_is_null arginfo_boolval

#define arginfo_is_resource arginfo_boolval

#define arginfo_is_bool arginfo_boolval

#define arginfo_is_int arginfo_boolval

#define arginfo_is_integer arginfo_boolval

#define arginfo_is_long arginfo_boolval

#define arginfo_is_float arginfo_boolval

#define arginfo_is_double arginfo_boolval

#define arginfo_is_numeric arginfo_boolval

#define arginfo_is_string arginfo_boolval

#define arginfo_is_array arginfo_boolval

#define arginfo_is_object arginfo_boolval

#define arginfo_is_scalar arginfo_boolval

ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_is_callable, 0, 1, _IS_BOOL, 0)
	ZEND_ARG_TYPE_INFO(0, value, IS_MIXED, 0)
	ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, syntax_only, _IS_BOOL, 0, "false")
	ZEND_ARG_INFO_WITH_DEFAULT_VALUE(1, callable_name, "null")
ZEND_END_ARG_INFO()

#define arginfo_is_iterable arginfo_boolval

#define arginfo_is_countable arginfo_boolval

#if defined(HAVE_GETTIMEOFDAY)
ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_uniqid, 0, 0, IS_STRING, 0)
	ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, prefix, IS_STRING, 0, "\"\"")
	ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, more_entropy, _IS_BOOL, 0, "false")
ZEND_END_ARG_INFO()
#endif

ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_parse_url, 0, 1, MAY_BE_LONG|MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_NULL|MAY_BE_FALSE)
	ZEND_ARG_TYPE_INFO(0, url, IS_STRING, 0)
	ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, component, IS_LONG, 0, "-1")
ZEND_END_ARG_INFO()

#define arginfo_urlencode arginfo_base64_encode

#define arginfo_urldecode arginfo_base64_encode

#define arginfo_rawurlencode arginfo_base64_encode

#define arginfo_rawurldecode arginfo_base64_encode

ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_get_headers, 0, 1, MAY_BE_ARRAY|MAY_BE_FALSE)
	ZEND_ARG_TYPE_INFO(0, url, IS_STRING, 0)
	ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, associative, _IS_BOOL, 0, "false")
	ZEND_ARG_INFO_WITH_DEFAULT_VALUE(0, context, "null")
ZEND_END_ARG_INFO()

ZEND_BEGIN_ARG_WITH_RETURN_OBJ_INFO_EX(arginfo_stream_bucket_make_writeable, 0, 1, StreamBucket, 1)
	ZEND_ARG_INFO(0, brigade)
ZEND_END_ARG_INFO()

ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_stream_bucket_prepend, 0, 2, IS_VOID, 0)
	ZEND_ARG_INFO(0, brigade)
	ZEND_ARG_OBJ_INFO(0, bucket, StreamBucket, 0)
ZEND_END_ARG_INFO()

#define arginfo_stream_bucket_append arginfo_stream_bucket_prepend

ZEND_BEGIN_ARG_WITH_RETURN_OBJ_INFO_EX(arginfo_stream_bucket_new, 0, 2, StreamBucket, 0)
	ZEND_ARG_INFO(0, stream)
	ZEND_ARG_TYPE_INFO(0, buffer, IS_STRING, 0)
ZEND_END_ARG_INFO()

#define arginfo_stream_get_filters arginfo_ob_list_handlers

ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_stream_filter_register, 0, 2, _IS_BOOL, 0)
	ZEND_ARG_TYPE_INFO(0, filter_name, IS_STRING, 0)
	ZEND_ARG_TYPE_INFO(0, class, IS_STRING, 0)
ZEND_END_ARG_INFO()

#define arginfo_convert_uuencode arginfo_base64_encode

#define arginfo_convert_uudecode arginfo_hex2bin

ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_var_dump, 0, 1, IS_VOID, 0)
	ZEND_ARG_TYPE_INFO(0, value, IS_MIXED, 0)
	ZEND_ARG_VARIADIC_TYPE_INFO(0, values, IS_MIXED, 0)
ZEND_END_ARG_INFO()

ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_var_export, 0, 1, IS_STRING, 1)
	ZEND_ARG_TYPE_INFO(0, value, IS_MIXED, 0)
	ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, return, _IS_BOOL, 0, "false")
ZEND_END_ARG_INFO()

#define arginfo_debug_zval_dump arginfo_var_dump

#define arginfo_serialize arginfo_gettype

ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_unserialize, 0, 1, IS_MIXED, 0)
	ZEND_ARG_TYPE_INFO(0, data, IS_STRING, 0)
	ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, options, IS_ARRAY, 0, "[]")
ZEND_END_ARG_INFO()

ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_memory_get_usage, 0, 0, IS_LONG, 0)
	ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, real_usage, _IS_BOOL, 0, "false")
ZEND_END_ARG_INFO()

#define arginfo_memory_get_peak_usage arginfo_memory_get_usage

#define arginfo_memory_reset_peak_usage arginfo_flush

ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_version_compare, 0, 2, MAY_BE_LONG|MAY_BE_BOOL)
	ZEND_ARG_TYPE_INFO(0, version1, IS_STRING, 0)
	ZEND_ARG_TYPE_INFO(0, version2, IS_STRING, 0)
	ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, operator, IS_STRING, 1, "null")
ZEND_END_ARG_INFO()

#if defined(PHP_WIN32)
ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_sapi_windows_cp_set, 0, 1, _IS_BOOL, 0)
	ZEND_ARG_TYPE_INFO(0, codepage, IS_LONG, 0)
ZEND_END_ARG_INFO()

ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_sapi_windows_cp_get, 0, 0, IS_LONG, 0)
	ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, kind, IS_STRING, 0, "\"\"")
ZEND_END_ARG_INFO()

ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_sapi_windows_cp_conv, 0, 3, IS_STRING, 1)
	ZEND_ARG_TYPE_MASK(0, in_codepage, MAY_BE_LONG|MAY_BE_STRING, NULL)
	ZEND_ARG_TYPE_MASK(0, out_codepage, MAY_BE_LONG|MAY_BE_STRING, NULL)
	ZEND_ARG_TYPE_INFO(0, subject, IS_STRING, 0)
ZEND_END_ARG_INFO()

ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_sapi_windows_cp_is_utf8, 0, 0, _IS_BOOL, 0)
ZEND_END_ARG_INFO()

ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_sapi_windows_set_ctrl_handler, 0, 1, _IS_BOOL, 0)
	ZEND_ARG_TYPE_INFO(0, handler, IS_CALLABLE, 1)
	ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, add, _IS_BOOL, 0, "true")
ZEND_END_ARG_INFO()

ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_sapi_windows_generate_ctrl_event, 0, 1, _IS_BOOL, 0)
	ZEND_ARG_TYPE_INFO(0, event, IS_LONG, 0)
	ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, pid, IS_LONG, 0, "0")
ZEND_END_ARG_INFO()
#endif


ZEND_FRAMELESS_FUNCTION(min, 2);
static const zend_frameless_function_info frameless_function_infos_min[] = {
	{ ZEND_FRAMELESS_FUNCTION_NAME(min, 2), 2 },
	{ 0 },
};

ZEND_FRAMELESS_FUNCTION(max, 2);
static const zend_frameless_function_info frameless_function_infos_max[] = {
	{ ZEND_FRAMELESS_FUNCTION_NAME(max, 2), 2 },
	{ 0 },
};

ZEND_FRAMELESS_FUNCTION(in_array, 2);
ZEND_FRAMELESS_FUNCTION(in_array, 3);
static const zend_frameless_function_info frameless_function_infos_in_array[] = {
	{ ZEND_FRAMELESS_FUNCTION_NAME(in_array, 2), 2 },
	{ ZEND_FRAMELESS_FUNCTION_NAME(in_array, 3), 3 },
	{ 0 },
};

ZEND_FRAMELESS_FUNCTION(trim, 1);
ZEND_FRAMELESS_FUNCTION(trim, 2);
static const zend_frameless_function_info frameless_function_infos_trim[] = {
	{ ZEND_FRAMELESS_FUNCTION_NAME(trim, 1), 1 },
	{ ZEND_FRAMELESS_FUNCTION_NAME(trim, 2), 2 },
	{ 0 },
};

ZEND_FRAMELESS_FUNCTION(implode, 1);
ZEND_FRAMELESS_FUNCTION(implode, 2);
static const zend_frameless_function_info frameless_function_infos_implode[] = {
	{ ZEND_FRAMELESS_FUNCTION_NAME(implode, 1), 1 },
	{ ZEND_FRAMELESS_FUNCTION_NAME(implode, 2), 2 },
	{ 0 },
};

ZEND_FRAMELESS_FUNCTION(dirname, 1);
ZEND_FRAMELESS_FUNCTION(dirname, 2);
static const zend_frameless_function_info frameless_function_infos_dirname[] = {
	{ ZEND_FRAMELESS_FUNCTION_NAME(dirname, 1), 1 },
	{ ZEND_FRAMELESS_FUNCTION_NAME(dirname, 2), 2 },
	{ 0 },
};

ZEND_FRAMELESS_FUNCTION(strstr, 2);
ZEND_FRAMELESS_FUNCTION(strstr, 3);
static const zend_frameless_function_info frameless_function_infos_strstr[] = {
	{ ZEND_FRAMELESS_FUNCTION_NAME(strstr, 2), 2 },
	{ ZEND_FRAMELESS_FUNCTION_NAME(strstr, 3), 3 },
	{ 0 },
};

ZEND_FRAMELESS_FUNCTION(strpos, 2);
ZEND_FRAMELESS_FUNCTION(strpos, 3);
static const zend_frameless_function_info frameless_function_infos_strpos[] = {
	{ ZEND_FRAMELESS_FUNCTION_NAME(strpos, 2), 2 },
	{ ZEND_FRAMELESS_FUNCTION_NAME(strpos, 3), 3 },
	{ 0 },
};

ZEND_FRAMELESS_FUNCTION(str_contains, 2);
static const zend_frameless_function_info frameless_function_infos_str_contains[] = {
	{ ZEND_FRAMELESS_FUNCTION_NAME(str_contains, 2), 2 },
	{ 0 },
};

ZEND_FRAMELESS_FUNCTION(str_starts_with, 2);
static const zend_frameless_function_info frameless_function_infos_str_starts_with[] = {
	{ ZEND_FRAMELESS_FUNCTION_NAME(str_starts_with, 2), 2 },
	{ 0 },
};

ZEND_FRAMELESS_FUNCTION(substr, 2);
ZEND_FRAMELESS_FUNCTION(substr, 3);
static const zend_frameless_function_info frameless_function_infos_substr[] = {
	{ ZEND_FRAMELESS_FUNCTION_NAME(substr, 2), 2 },
	{ ZEND_FRAMELESS_FUNCTION_NAME(substr, 3), 3 },
	{ 0 },
};

ZEND_FRAMELESS_FUNCTION(strtr, 2);
ZEND_FRAMELESS_FUNCTION(strtr, 3);
static const zend_frameless_function_info frameless_function_infos_strtr[] = {
	{ ZEND_FRAMELESS_FUNCTION_NAME(strtr, 2), 2 },
	{ ZEND_FRAMELESS_FUNCTION_NAME(strtr, 3), 3 },
	{ 0 },
};

ZEND_FRAMELESS_FUNCTION(str_replace, 3);
static const zend_frameless_function_info frameless_function_infos_str_replace[] = {
	{ ZEND_FRAMELESS_FUNCTION_NAME(str_replace, 3), 3 },
	{ 0 },
};

ZEND_FRAMELESS_FUNCTION(dechex, 1);
static const zend_frameless_function_info frameless_function_infos_dechex[] = {
	{ ZEND_FRAMELESS_FUNCTION_NAME(dechex, 1), 1 },
	{ 0 },
};

ZEND_FRAMELESS_FUNCTION(is_numeric, 1);
static const zend_frameless_function_info frameless_function_infos_is_numeric[] = {
	{ ZEND_FRAMELESS_FUNCTION_NAME(is_numeric, 1), 1 },
	{ 0 },
};

ZEND_FUNCTION(set_time_limit);
ZEND_FUNCTION(header_register_callback);
ZEND_FUNCTION(ob_start);
ZEND_FUNCTION(ob_flush);
ZEND_FUNCTION(ob_clean);
ZEND_FUNCTION(ob_end_flush);
ZEND_FUNCTION(ob_end_clean);
ZEND_FUNCTION(ob_get_flush);
ZEND_FUNCTION(ob_get_clean);
ZEND_FUNCTION(ob_get_contents);
ZEND_FUNCTION(ob_get_level);
ZEND_FUNCTION(ob_get_length);
ZEND_FUNCTION(ob_list_handlers);
ZEND_FUNCTION(ob_get_status);
ZEND_FUNCTION(ob_implicit_flush);
ZEND_FUNCTION(output_reset_rewrite_vars);
ZEND_FUNCTION(output_add_rewrite_var);
ZEND_FUNCTION(stream_wrapper_register);
ZEND_FUNCTION(stream_wrapper_unregister);
ZEND_FUNCTION(stream_wrapper_restore);
ZEND_FUNCTION(array_push);
ZEND_FUNCTION(krsort);
ZEND_FUNCTION(ksort);
ZEND_FUNCTION(count);
ZEND_FUNCTION(natsort);
ZEND_FUNCTION(natcasesort);
ZEND_FUNCTION(asort);
ZEND_FUNCTION(arsort);
ZEND_FUNCTION(sort);
ZEND_FUNCTION(rsort);
ZEND_FUNCTION(usort);
ZEND_FUNCTION(uasort);
ZEND_FUNCTION(uksort);
ZEND_FUNCTION(end);
ZEND_FUNCTION(prev);
ZEND_FUNCTION(next);
ZEND_FUNCTION(reset);
ZEND_FUNCTION(current);
ZEND_FUNCTION(key);
ZEND_FUNCTION(min);
ZEND_FUNCTION(max);
ZEND_FUNCTION(array_walk);
ZEND_FUNCTION(array_walk_recursive);
ZEND_FUNCTION(in_array);
ZEND_FUNCTION(array_search);
ZEND_FUNCTION(extract);
ZEND_FUNCTION(compact);
ZEND_FUNCTION(array_fill);
ZEND_FUNCTION(array_fill_keys);
ZEND_FUNCTION(range);
ZEND_FUNCTION(shuffle);
ZEND_FUNCTION(array_pop);
ZEND_FUNCTION(array_shift);
ZEND_FUNCTION(array_unshift);
ZEND_FUNCTION(array_splice);
ZEND_FUNCTION(array_slice);
ZEND_FUNCTION(array_merge);
ZEND_FUNCTION(array_merge_recursive);
ZEND_FUNCTION(array_replace);
ZEND_FUNCTION(array_replace_recursive);
ZEND_FUNCTION(array_keys);
ZEND_FUNCTION(array_key_first);
ZEND_FUNCTION(array_key_last);
ZEND_FUNCTION(array_first);
ZEND_FUNCTION(array_last);
ZEND_FUNCTION(array_values);
ZEND_FUNCTION(array_count_values);
ZEND_FUNCTION(array_column);
ZEND_FUNCTION(array_reverse);
ZEND_FUNCTION(array_pad);
ZEND_FUNCTION(array_flip);
ZEND_FUNCTION(array_change_key_case);
ZEND_FUNCTION(array_unique);
ZEND_FUNCTION(array_intersect_key);
ZEND_FUNCTION(array_intersect_ukey);
ZEND_FUNCTION(array_intersect);
ZEND_FUNCTION(array_uintersect);
ZEND_FUNCTION(array_intersect_assoc);
ZEND_FUNCTION(array_uintersect_assoc);
ZEND_FUNCTION(array_intersect_uassoc);
ZEND_FUNCTION(array_uintersect_uassoc);
ZEND_FUNCTION(array_diff_key);
ZEND_FUNCTION(array_diff_ukey);
ZEND_FUNCTION(array_diff);
ZEND_FUNCTION(array_udiff);
ZEND_FUNCTION(array_diff_assoc);
ZEND_FUNCTION(array_diff_uassoc);
ZEND_FUNCTION(array_udiff_assoc);
ZEND_FUNCTION(array_udiff_uassoc);
ZEND_FUNCTION(array_multisort);
ZEND_FUNCTION(array_rand);
ZEND_FUNCTION(array_sum);
ZEND_FUNCTION(array_product);
ZEND_FUNCTION(array_reduce);
ZEND_FUNCTION(array_filter);
ZEND_FUNCTION(array_find);
ZEND_FUNCTION(array_find_key);
ZEND_FUNCTION(array_any);
ZEND_FUNCTION(array_all);
ZEND_FUNCTION(array_map);
ZEND_FUNCTION(array_key_exists);
ZEND_FUNCTION(array_chunk);
ZEND_FUNCTION(array_combine);
ZEND_FUNCTION(array_is_list);
ZEND_FUNCTION(base64_encode);
ZEND_FUNCTION(base64_decode);
ZEND_FUNCTION(constant);
ZEND_FUNCTION(ip2long);
ZEND_FUNCTION(long2ip);
ZEND_FUNCTION(getenv);
#if defined(HAVE_PUTENV)
ZEND_FUNCTION(putenv);
#endif
ZEND_FUNCTION(getopt);
ZEND_FUNCTION(flush);
ZEND_FUNCTION(sleep);
ZEND_FUNCTION(usleep);
#if defined(HAVE_NANOSLEEP)
ZEND_FUNCTION(time_nanosleep);
ZEND_FUNCTION(time_sleep_until);
#endif
ZEND_FUNCTION(get_current_user);
ZEND_FUNCTION(get_cfg_var);
ZEND_FUNCTION(error_log);
ZEND_FUNCTION(error_get_last);
ZEND_FUNCTION(error_clear_last);
ZEND_FUNCTION(call_user_func);
ZEND_FUNCTION(call_user_func_array);
ZEND_FUNCTION(forward_static_call);
ZEND_FUNCTION(forward_static_call_array);
ZEND_FUNCTION(register_shutdown_function);
ZEND_FUNCTION(highlight_file);
ZEND_FUNCTION(php_strip_whitespace);
ZEND_FUNCTION(highlight_string);
ZEND_FUNCTION(ini_get);
ZEND_FUNCTION(ini_get_all);
ZEND_FUNCTION(ini_set);
ZEND_FUNCTION(ini_restore);
ZEND_FUNCTION(ini_parse_quantity);
ZEND_FUNCTION(set_include_path);
ZEND_FUNCTION(get_include_path);
ZEND_FUNCTION(print_r);
ZEND_FUNCTION(connection_aborted);
ZEND_FUNCTION(connection_status);
ZEND_FUNCTION(ignore_user_abort);
#if defined(HAVE_GETSERVBYNAME)
ZEND_FUNCTION(getservbyname);
#endif
#if defined(HAVE_GETSERVBYPORT)
ZEND_FUNCTION(getservbyport);
#endif
#if defined(HAVE_GETPROTOBYNAME)
ZEND_FUNCTION(getprotobyname);
#endif
#if defined(HAVE_GETPROTOBYNUMBER)
ZEND_FUNCTION(getprotobynumber);
#endif
ZEND_FUNCTION(register_tick_function);
ZEND_FUNCTION(unregister_tick_function);
ZEND_FUNCTION(is_uploaded_file);
ZEND_FUNCTION(move_uploaded_file);
ZEND_FUNCTION(parse_ini_file);
ZEND_FUNCTION(parse_ini_string);
#if ZEND_DEBUG
ZEND_FUNCTION(config_get_hash);
#endif
#if defined(HAVE_GETLOADAVG)
ZEND_FUNCTION(sys_getloadavg);
#endif
ZEND_FUNCTION(get_browser);
ZEND_FUNCTION(crc32);
ZEND_FUNCTION(crypt);
#if defined(HAVE_STRPTIME)
ZEND_FUNCTION(strptime);
#endif
#if defined(HAVE_GETHOSTNAME)
ZEND_FUNCTION(gethostname);
#endif
ZEND_FUNCTION(gethostbyaddr);
ZEND_FUNCTION(gethostbyname);
ZEND_FUNCTION(gethostbynamel);
#if (defined(PHP_WIN32) || defined(HAVE_DNS_SEARCH_FUNC))
ZEND_FUNCTION(dns_check_record);
ZEND_FUNCTION(dns_get_record);
ZEND_FUNCTION(dns_get_mx);
#endif
#if (defined(PHP_WIN32) || defined(HAVE_GETIFADDRS) || defined(__PASE__))
ZEND_FUNCTION(net_get_interfaces);
#endif
#if defined(HAVE_FTOK)
ZEND_FUNCTION(ftok);
#endif
ZEND_FUNCTION(hrtime);
ZEND_FUNCTION(md5);
ZEND_FUNCTION(md5_file);
ZEND_FUNCTION(getmyuid);
ZEND_FUNCTION(getmygid);
ZEND_FUNCTION(getmypid);
ZEND_FUNCTION(getmyinode);
ZEND_FUNCTION(getlastmod);
ZEND_FUNCTION(sha1);
ZEND_FUNCTION(sha1_file);
#if defined(HAVE_SYSLOG_H)
ZEND_FUNCTION(openlog);
ZEND_FUNCTION(closelog);
ZEND_FUNCTION(syslog);
#endif
ZEND_FUNCTION(inet_ntop);
ZEND_FUNCTION(inet_pton);
ZEND_FUNCTION(metaphone);
ZEND_FUNCTION(header);
ZEND_FUNCTION(header_remove);
ZEND_FUNCTION(setrawcookie);
ZEND_FUNCTION(setcookie);
ZEND_FUNCTION(http_response_code);
ZEND_FUNCTION(headers_sent);
ZEND_FUNCTION(headers_list);
ZEND_FUNCTION(htmlspecialchars);
ZEND_FUNCTION(htmlspecialchars_decode);
ZEND_FUNCTION(html_entity_decode);
ZEND_FUNCTION(htmlentities);
ZEND_FUNCTION(get_html_translation_table);
ZEND_FUNCTION(assert);
ZEND_FUNCTION(assert_options);
ZEND_FUNCTION(bin2hex);
ZEND_FUNCTION(hex2bin);
ZEND_FUNCTION(strspn);
ZEND_FUNCTION(strcspn);
#if defined(HAVE_NL_LANGINFO)
ZEND_FUNCTION(nl_langinfo);
#endif
ZEND_FUNCTION(strcoll);
ZEND_FUNCTION(trim);
ZEND_FUNCTION(rtrim);
ZEND_FUNCTION(ltrim);
ZEND_FUNCTION(wordwrap);
ZEND_FUNCTION(explode);
ZEND_FUNCTION(implode);
ZEND_FUNCTION(strtok);
ZEND_FUNCTION(strtoupper);
ZEND_FUNCTION(strtolower);
ZEND_FUNCTION(str_increment);
ZEND_FUNCTION(str_decrement);
ZEND_FUNCTION(basename);
ZEND_FUNCTION(dirname);
ZEND_FUNCTION(pathinfo);
ZEND_FUNCTION(stristr);
ZEND_FUNCTION(strstr);
ZEND_FUNCTION(strpos);
ZEND_FUNCTION(stripos);
ZEND_FUNCTION(strrpos);
ZEND_FUNCTION(strripos);
ZEND_FUNCTION(strrchr);
ZEND_FUNCTION(str_contains);
ZEND_FUNCTION(str_starts_with);
ZEND_FUNCTION(str_ends_with);
ZEND_FUNCTION(chunk_split);
ZEND_FUNCTION(substr);
ZEND_FUNCTION(substr_replace);
ZEND_FUNCTION(quotemeta);
ZEND_FUNCTION(ord);
ZEND_FUNCTION(chr);
ZEND_FUNCTION(ucfirst);
ZEND_FUNCTION(lcfirst);
ZEND_FUNCTION(ucwords);
ZEND_FUNCTION(strtr);
ZEND_FUNCTION(strrev);
ZEND_FUNCTION(similar_text);
ZEND_FUNCTION(addcslashes);
ZEND_FUNCTION(addslashes);
ZEND_FUNCTION(stripcslashes);
ZEND_FUNCTION(stripslashes);
ZEND_FUNCTION(str_replace);
ZEND_FUNCTION(str_ireplace);
ZEND_FUNCTION(hebrev);
ZEND_FUNCTION(nl2br);
ZEND_FUNCTION(strip_tags);
ZEND_FUNCTION(setlocale);
ZEND_FUNCTION(parse_str);
ZEND_FUNCTION(str_getcsv);
ZEND_FUNCTION(str_repeat);
ZEND_FUNCTION(count_chars);
ZEND_FUNCTION(strnatcmp);
ZEND_FUNCTION(localeconv);
ZEND_FUNCTION(strnatcasecmp);
ZEND_FUNCTION(substr_count);
ZEND_FUNCTION(str_pad);
ZEND_FUNCTION(sscanf);
ZEND_FUNCTION(str_rot13);
ZEND_FUNCTION(str_shuffle);
ZEND_FUNCTION(str_word_count);
ZEND_FUNCTION(str_split);
ZEND_FUNCTION(strpbrk);
ZEND_FUNCTION(substr_compare);
ZEND_FUNCTION(utf8_encode);
ZEND_FUNCTION(utf8_decode);
ZEND_FUNCTION(opendir);
ZEND_FUNCTION(dir);
ZEND_FUNCTION(closedir);
ZEND_FUNCTION(chdir);
#if (defined(HAVE_CHROOT) && !defined(ZTS) && defined(ENABLE_CHROOT_FUNC))
ZEND_FUNCTION(chroot);
#endif
ZEND_FUNCTION(getcwd);
ZEND_FUNCTION(rewinddir);
ZEND_FUNCTION(readdir);
ZEND_FUNCTION(scandir);
ZEND_FUNCTION(glob);
ZEND_FUNCTION(exec);
ZEND_FUNCTION(system);
ZEND_FUNCTION(passthru);
ZEND_FUNCTION(escapeshellcmd);
ZEND_FUNCTION(escapeshellarg);
ZEND_FUNCTION(shell_exec);
#if defined(HAVE_NICE)
ZEND_FUNCTION(proc_nice);
#endif
ZEND_FUNCTION(flock);
ZEND_FUNCTION(get_meta_tags);
ZEND_FUNCTION(pclose);
ZEND_FUNCTION(popen);
ZEND_FUNCTION(readfile);
ZEND_FUNCTION(rewind);
ZEND_FUNCTION(rmdir);
ZEND_FUNCTION(umask);
ZEND_FUNCTION(fclose);
ZEND_FUNCTION(feof);
ZEND_FUNCTION(fgetc);
ZEND_FUNCTION(fgets);
ZEND_FUNCTION(fread);
ZEND_FUNCTION(fopen);
ZEND_FUNCTION(fscanf);
ZEND_FUNCTION(fpassthru);
ZEND_FUNCTION(ftruncate);
ZEND_FUNCTION(fstat);
ZEND_FUNCTION(fseek);
ZEND_FUNCTION(ftell);
ZEND_FUNCTION(fflush);
ZEND_FUNCTION(fsync);
ZEND_FUNCTION(fdatasync);
ZEND_FUNCTION(fwrite);
ZEND_FUNCTION(mkdir);
ZEND_FUNCTION(rename);
ZEND_FUNCTION(copy);
ZEND_FUNCTION(tempnam);
ZEND_FUNCTION(tmpfile);
ZEND_FUNCTION(file);
ZEND_FUNCTION(file_get_contents);
ZEND_FUNCTION(unlink);
ZEND_FUNCTION(file_put_contents);
ZEND_FUNCTION(fputcsv);
ZEND_FUNCTION(fgetcsv);
ZEND_FUNCTION(realpath);
#if defined(HAVE_FNMATCH)
ZEND_FUNCTION(fnmatch);
#endif
ZEND_FUNCTION(sys_get_temp_dir);
ZEND_FUNCTION(fileatime);
ZEND_FUNCTION(filectime);
ZEND_FUNCTION(filegroup);
ZEND_FUNCTION(fileinode);
ZEND_FUNCTION(filemtime);
ZEND_FUNCTION(fileowner);
ZEND_FUNCTION(fileperms);
ZEND_FUNCTION(filesize);
ZEND_FUNCTION(filetype);
ZEND_FUNCTION(file_exists);
ZEND_FUNCTION(is_writable);
ZEND_FUNCTION(is_readable);
ZEND_FUNCTION(is_executable);
ZEND_FUNCTION(is_file);
ZEND_FUNCTION(is_dir);
ZEND_FUNCTION(is_link);
ZEND_FUNCTION(stat);
ZEND_FUNCTION(lstat);
ZEND_FUNCTION(chown);
ZEND_FUNCTION(chgrp);
#if defined(HAVE_LCHOWN)
ZEND_FUNCTION(lchown);
ZEND_FUNCTION(lchgrp);
#endif
ZEND_FUNCTION(chmod);
#if defined(HAVE_UTIME)
ZEND_FUNCTION(touch);
#endif
ZEND_FUNCTION(clearstatcache);
ZEND_FUNCTION(disk_total_space);
ZEND_FUNCTION(disk_free_space);
ZEND_FUNCTION(realpath_cache_get);
ZEND_FUNCTION(realpath_cache_size);
ZEND_FUNCTION(sprintf);
ZEND_FUNCTION(printf);
ZEND_FUNCTION(vprintf);
ZEND_FUNCTION(vsprintf);
ZEND_FUNCTION(fprintf);
ZEND_FUNCTION(vfprintf);
ZEND_FUNCTION(fsockopen);
ZEND_FUNCTION(pfsockopen);
ZEND_FUNCTION(http_build_query);
ZEND_FUNCTION(http_get_last_response_headers);
ZEND_FUNCTION(http_clear_last_response_headers);
ZEND_FUNCTION(request_parse_body);
ZEND_FUNCTION(image_type_to_mime_type);
ZEND_FUNCTION(image_type_to_extension);
ZEND_FUNCTION(getimagesize);
ZEND_FUNCTION(getimagesizefromstring);
ZEND_FUNCTION(phpinfo);
ZEND_FUNCTION(phpversion);
ZEND_FUNCTION(phpcredits);
ZEND_FUNCTION(php_sapi_name);
ZEND_FUNCTION(php_uname);
ZEND_FUNCTION(php_ini_scanned_files);
ZEND_FUNCTION(php_ini_loaded_file);
ZEND_FUNCTION(iptcembed);
ZEND_FUNCTION(iptcparse);
ZEND_FUNCTION(levenshtein);
#if (defined(HAVE_SYMLINK) || defined(PHP_WIN32))
ZEND_FUNCTION(readlink);
ZEND_FUNCTION(linkinfo);
ZEND_FUNCTION(symlink);
ZEND_FUNCTION(link);
#endif
ZEND_FUNCTION(mail);
ZEND_FUNCTION(abs);
ZEND_FUNCTION(ceil);
ZEND_FUNCTION(floor);
ZEND_FUNCTION(round);
ZEND_FUNCTION(sin);
ZEND_FUNCTION(cos);
ZEND_FUNCTION(tan);
ZEND_FUNCTION(asin);
ZEND_FUNCTION(acos);
ZEND_FUNCTION(atan);
ZEND_FUNCTION(atanh);
ZEND_FUNCTION(atan2);
ZEND_FUNCTION(sinh);
ZEND_FUNCTION(cosh);
ZEND_FUNCTION(tanh);
ZEND_FUNCTION(asinh);
ZEND_FUNCTION(acosh);
ZEND_FUNCTION(expm1);
ZEND_FUNCTION(log1p);
ZEND_FUNCTION(pi);
ZEND_FUNCTION(is_finite);
ZEND_FUNCTION(is_nan);
ZEND_FUNCTION(intdiv);
ZEND_FUNCTION(is_infinite);
ZEND_FUNCTION(pow);
ZEND_FUNCTION(exp);
ZEND_FUNCTION(log);
ZEND_FUNCTION(log10);
ZEND_FUNCTION(sqrt);
ZEND_FUNCTION(hypot);
ZEND_FUNCTION(deg2rad);
ZEND_FUNCTION(rad2deg);
ZEND_FUNCTION(bindec);
ZEND_FUNCTION(hexdec);
ZEND_FUNCTION(octdec);
ZEND_FUNCTION(decbin);
ZEND_FUNCTION(decoct);
ZEND_FUNCTION(dechex);
ZEND_FUNCTION(base_convert);
ZEND_FUNCTION(number_format);
ZEND_FUNCTION(fmod);
ZEND_FUNCTION(fdiv);
ZEND_FUNCTION(fpow);
#if defined(HAVE_GETTIMEOFDAY)
ZEND_FUNCTION(microtime);
ZEND_FUNCTION(gettimeofday);
#endif
#if defined(HAVE_GETRUSAGE)
ZEND_FUNCTION(getrusage);
#endif
ZEND_FUNCTION(pack);
ZEND_FUNCTION(unpack);
ZEND_FUNCTION(password_get_info);
ZEND_FUNCTION(password_hash);
ZEND_FUNCTION(password_needs_rehash);
ZEND_FUNCTION(password_verify);
ZEND_FUNCTION(password_algos);
#if defined(PHP_CAN_SUPPORT_PROC_OPEN)
ZEND_FUNCTION(proc_open);
ZEND_FUNCTION(proc_close);
ZEND_FUNCTION(proc_terminate);
ZEND_FUNCTION(proc_get_status);
#endif
ZEND_FUNCTION(quoted_printable_decode);
ZEND_FUNCTION(quoted_printable_encode);
ZEND_FUNCTION(soundex);
ZEND_FUNCTION(stream_select);
ZEND_FUNCTION(stream_context_create);
ZEND_FUNCTION(stream_context_set_params);
ZEND_FUNCTION(stream_context_get_params);
ZEND_FUNCTION(stream_context_set_option);
ZEND_FUNCTION(stream_context_set_options);
ZEND_FUNCTION(stream_context_get_options);
ZEND_FUNCTION(stream_context_get_default);
ZEND_FUNCTION(stream_context_set_default);
ZEND_FUNCTION(stream_filter_prepend);
ZEND_FUNCTION(stream_filter_append);
ZEND_FUNCTION(stream_filter_remove);
ZEND_FUNCTION(stream_socket_client);
ZEND_FUNCTION(stream_socket_server);
ZEND_FUNCTION(stream_socket_accept);
ZEND_FUNCTION(stream_socket_get_name);
ZEND_FUNCTION(stream_socket_recvfrom);
ZEND_FUNCTION(stream_socket_sendto);
ZEND_FUNCTION(stream_socket_enable_crypto);
#if defined(HAVE_SHUTDOWN)
ZEND_FUNCTION(stream_socket_shutdown);
#endif
#if defined(HAVE_SOCKETPAIR)
ZEND_FUNCTION(stream_socket_pair);
#endif
ZEND_FUNCTION(stream_copy_to_stream);
ZEND_FUNCTION(stream_get_contents);
ZEND_FUNCTION(stream_supports_lock);
ZEND_FUNCTION(stream_set_write_buffer);
ZEND_FUNCTION(stream_set_read_buffer);
ZEND_FUNCTION(stream_set_blocking);
ZEND_FUNCTION(stream_get_meta_data);
ZEND_FUNCTION(stream_get_line);
ZEND_FUNCTION(stream_resolve_include_path);
ZEND_FUNCTION(stream_get_wrappers);
ZEND_FUNCTION(stream_get_transports);
ZEND_FUNCTION(stream_is_local);
ZEND_FUNCTION(stream_isatty);
#if defined(PHP_WIN32)
ZEND_FUNCTION(sapi_windows_vt100_support);
#endif
ZEND_FUNCTION(stream_set_chunk_size);
#if (defined(HAVE_SYS_TIME_H) || defined(PHP_WIN32))
ZEND_FUNCTION(stream_set_timeout);
#endif
ZEND_FUNCTION(gettype);
ZEND_FUNCTION(get_debug_type);
ZEND_FUNCTION(settype);
ZEND_FUNCTION(intval);
ZEND_FUNCTION(floatval);
ZEND_FUNCTION(boolval);
ZEND_FUNCTION(strval);
ZEND_FUNCTION(is_null);
ZEND_FUNCTION(is_resource);
ZEND_FUNCTION(is_bool);
ZEND_FUNCTION(is_int);
ZEND_FUNCTION(is_float);
ZEND_FUNCTION(is_numeric);
ZEND_FUNCTION(is_string);
ZEND_FUNCTION(is_array);
ZEND_FUNCTION(is_object);
ZEND_FUNCTION(is_scalar);
ZEND_FUNCTION(is_callable);
ZEND_FUNCTION(is_iterable);
ZEND_FUNCTION(is_countable);
#if defined(HAVE_GETTIMEOFDAY)
ZEND_FUNCTION(uniqid);
#endif
ZEND_FUNCTION(parse_url);
ZEND_FUNCTION(urlencode);
ZEND_FUNCTION(urldecode);
ZEND_FUNCTION(rawurlencode);
ZEND_FUNCTION(rawurldecode);
ZEND_FUNCTION(get_headers);
ZEND_FUNCTION(stream_bucket_make_writeable);
ZEND_FUNCTION(stream_bucket_prepend);
ZEND_FUNCTION(stream_bucket_append);
ZEND_FUNCTION(stream_bucket_new);
ZEND_FUNCTION(stream_get_filters);
ZEND_FUNCTION(stream_filter_register);
ZEND_FUNCTION(convert_uuencode);
ZEND_FUNCTION(convert_uudecode);
ZEND_FUNCTION(var_dump);
ZEND_FUNCTION(var_export);
ZEND_FUNCTION(debug_zval_dump);
ZEND_FUNCTION(serialize);
ZEND_FUNCTION(unserialize);
ZEND_FUNCTION(memory_get_usage);
ZEND_FUNCTION(memory_get_peak_usage);
ZEND_FUNCTION(memory_reset_peak_usage);
ZEND_FUNCTION(version_compare);
#if defined(PHP_WIN32)
ZEND_FUNCTION(sapi_windows_cp_set);
ZEND_FUNCTION(sapi_windows_cp_get);
ZEND_FUNCTION(sapi_windows_cp_conv);
ZEND_FUNCTION(sapi_windows_cp_is_utf8);
ZEND_FUNCTION(sapi_windows_set_ctrl_handler);
ZEND_FUNCTION(sapi_windows_generate_ctrl_event);
#endif

static const zend_function_entry ext_functions[] = {
	ZEND_FE(set_time_limit, arginfo_set_time_limit)
	ZEND_FE(header_register_callback, arginfo_header_register_callback)
	ZEND_FE(ob_start, arginfo_ob_start)
	ZEND_FE(ob_flush, arginfo_ob_flush)
	ZEND_FE(ob_clean, arginfo_ob_clean)
	ZEND_FE(ob_end_flush, arginfo_ob_end_flush)
	ZEND_FE(ob_end_clean, arginfo_ob_end_clean)
	ZEND_FE(ob_get_flush, arginfo_ob_get_flush)
	ZEND_FE(ob_get_clean, arginfo_ob_get_clean)
	ZEND_FE(ob_get_contents, arginfo_ob_get_contents)
	ZEND_FE(ob_get_level, arginfo_ob_get_level)
	ZEND_FE(ob_get_length, arginfo_ob_get_length)
	ZEND_FE(ob_list_handlers, arginfo_ob_list_handlers)
	ZEND_FE(ob_get_status, arginfo_ob_get_status)
	ZEND_FE(ob_implicit_flush, arginfo_ob_implicit_flush)
	ZEND_FE(output_reset_rewrite_vars, arginfo_output_reset_rewrite_vars)
	ZEND_FE(output_add_rewrite_var, arginfo_output_add_rewrite_var)
	ZEND_FE(stream_wrapper_register, arginfo_stream_wrapper_register)
	ZEND_RAW_FENTRY("stream_register_wrapper", zif_stream_wrapper_register, arginfo_stream_register_wrapper, 0, NULL, NULL)
	ZEND_FE(stream_wrapper_unregister, arginfo_stream_wrapper_unregister)
	ZEND_FE(stream_wrapper_restore, arginfo_stream_wrapper_restore)
	ZEND_FE(array_push, arginfo_array_push)
	ZEND_FE(krsort, arginfo_krsort)
	ZEND_FE(ksort, arginfo_ksort)
	ZEND_RAW_FENTRY("count", zif_count, arginfo_count, ZEND_ACC_COMPILE_TIME_EVAL, NULL, NULL)
	ZEND_RAW_FENTRY("sizeof", zif_count, arginfo_sizeof, 0, NULL, NULL)
	ZEND_FE(natsort, arginfo_natsort)
	ZEND_FE(natcasesort, arginfo_natcasesort)
	ZEND_FE(asort, arginfo_asort)
	ZEND_FE(arsort, arginfo_arsort)
	ZEND_FE(sort, arginfo_sort)
	ZEND_FE(rsort, arginfo_rsort)
	ZEND_FE(usort, arginfo_usort)
	ZEND_FE(uasort, arginfo_uasort)
	ZEND_FE(uksort, arginfo_uksort)
	ZEND_FE(end, arginfo_end)
	ZEND_FE(prev, arginfo_prev)
	ZEND_FE(next, arginfo_next)
	ZEND_FE(reset, arginfo_reset)
	ZEND_FE(current, arginfo_current)
	ZEND_RAW_FENTRY("pos", zif_current, arginfo_pos, 0, NULL, NULL)
	ZEND_FE(key, arginfo_key)
	ZEND_RAW_FENTRY("min", zif_min, arginfo_min, ZEND_ACC_COMPILE_TIME_EVAL, frameless_function_infos_min, NULL)
	ZEND_RAW_FENTRY("max", zif_max, arginfo_max, ZEND_ACC_COMPILE_TIME_EVAL, frameless_function_infos_max, NULL)
	ZEND_FE(array_walk, arginfo_array_walk)
	ZEND_FE(array_walk_recursive, arginfo_array_walk_recursive)
	ZEND_RAW_FENTRY("in_array", zif_in_array, arginfo_in_array, ZEND_ACC_COMPILE_TIME_EVAL, frameless_function_infos_in_array, NULL)
	ZEND_RAW_FENTRY("array_search", zif_array_search, arginfo_array_search, ZEND_ACC_COMPILE_TIME_EVAL, NULL, NULL)
	ZEND_FE(extract, arginfo_extract)
	ZEND_FE(compact, arginfo_compact)
	ZEND_FE(array_fill, arginfo_array_fill)
	ZEND_FE(array_fill_keys, arginfo_array_fill_keys)
	ZEND_FE(range, arginfo_range)
	ZEND_FE(shuffle, arginfo_shuffle)
	ZEND_FE(array_pop, arginfo_array_pop)
	ZEND_FE(array_shift, arginfo_array_shift)
	ZEND_FE(array_unshift, arginfo_array_unshift)
	ZEND_FE(array_splice, arginfo_array_splice)
	ZEND_RAW_FENTRY("array_slice", zif_array_slice, arginfo_array_slice, ZEND_ACC_COMPILE_TIME_EVAL, NULL, NULL)
	ZEND_RAW_FENTRY("array_merge", zif_array_merge, arginfo_array_merge, ZEND_ACC_COMPILE_TIME_EVAL, NULL, NULL)
	ZEND_RAW_FENTRY("array_merge_recursive", zif_array_merge_recursive, arginfo_array_merge_recursive, ZEND_ACC_COMPILE_TIME_EVAL, NULL, NULL)
	ZEND_RAW_FENTRY("array_replace", zif_array_replace, arginfo_array_replace, ZEND_ACC_COMPILE_TIME_EVAL, NULL, NULL)
	ZEND_RAW_FENTRY("array_replace_recursive", zif_array_replace_recursive, arginfo_array_replace_recursive, ZEND_ACC_COMPILE_TIME_EVAL, NULL, NULL)
	ZEND_RAW_FENTRY("array_keys", zif_array_keys, arginfo_array_keys, ZEND_ACC_COMPILE_TIME_EVAL, NULL, NULL)
	ZEND_RAW_FENTRY("array_key_first", zif_array_key_first, arginfo_array_key_first, ZEND_ACC_COMPILE_TIME_EVAL, NULL, NULL)
	ZEND_RAW_FENTRY("array_key_last", zif_array_key_last, arginfo_array_key_last, ZEND_ACC_COMPILE_TIME_EVAL, NULL, NULL)
	ZEND_RAW_FENTRY("array_first", zif_array_first, arginfo_array_first, ZEND_ACC_COMPILE_TIME_EVAL, NULL, NULL)
	ZEND_RAW_FENTRY("array_last", zif_array_last, arginfo_array_last, ZEND_ACC_COMPILE_TIME_EVAL, NULL, NULL)
	ZEND_RAW_FENTRY("array_values", zif_array_values, arginfo_array_values, ZEND_ACC_COMPILE_TIME_EVAL, NULL, NULL)
	ZEND_RAW_FENTRY("array_count_values", zif_array_count_values, arginfo_array_count_values, ZEND_ACC_COMPILE_TIME_EVAL, NULL, NULL)
	ZEND_RAW_FENTRY("array_column", zif_array_column, arginfo_array_column, ZEND_ACC_COMPILE_TIME_EVAL, NULL, NULL)
	ZEND_RAW_FENTRY("array_reverse", zif_array_reverse, arginfo_array_reverse, ZEND_ACC_COMPILE_TIME_EVAL, NULL, NULL)
	ZEND_FE(array_pad, arginfo_array_pad)
	ZEND_RAW_FENTRY("array_flip", zif_array_flip, arginfo_array_flip, ZEND_ACC_COMPILE_TIME_EVAL, NULL, NULL)
	ZEND_RAW_FENTRY("array_change_key_case", zif_array_change_key_case, arginfo_array_change_key_case, ZEND_ACC_COMPILE_TIME_EVAL, NULL, NULL)
	ZEND_RAW_FENTRY("array_unique", zif_array_unique, arginfo_array_unique, ZEND_ACC_COMPILE_TIME_EVAL, NULL, NULL)
	ZEND_RAW_FENTRY("array_intersect_key", zif_array_intersect_key, arginfo_array_intersect_key, ZEND_ACC_COMPILE_TIME_EVAL, NULL, NULL)
	ZEND_FE(array_intersect_ukey, arginfo_array_intersect_ukey)
	ZEND_RAW_FENTRY("array_intersect", zif_array_intersect, arginfo_array_intersect, ZEND_ACC_COMPILE_TIME_EVAL, NULL, NULL)
	ZEND_FE(array_uintersect, arginfo_array_uintersect)
	ZEND_RAW_FENTRY("array_intersect_assoc", zif_array_intersect_assoc, arginfo_array_intersect_assoc, ZEND_ACC_COMPILE_TIME_EVAL, NULL, NULL)
	ZEND_FE(array_uintersect_assoc, arginfo_array_uintersect_assoc)
	ZEND_FE(array_intersect_uassoc, arginfo_array_intersect_uassoc)
	ZEND_FE(array_uintersect_uassoc, arginfo_array_uintersect_uassoc)
	ZEND_RAW_FENTRY("array_diff_key", zif_array_diff_key, arginfo_array_diff_key, ZEND_ACC_COMPILE_TIME_EVAL, NULL, NULL)
	ZEND_FE(array_diff_ukey, arginfo_array_diff_ukey)
	ZEND_RAW_FENTRY("array_diff", zif_array_diff, arginfo_array_diff, ZEND_ACC_COMPILE_TIME_EVAL, NULL, NULL)
	ZEND_FE(array_udiff, arginfo_array_udiff)
	ZEND_RAW_FENTRY("array_diff_assoc", zif_array_diff_assoc, arginfo_array_diff_assoc, ZEND_ACC_COMPILE_TIME_EVAL, NULL, NULL)
	ZEND_FE(array_diff_uassoc, arginfo_array_diff_uassoc)
	ZEND_FE(array_udiff_assoc, arginfo_array_udiff_assoc)
	ZEND_FE(array_udiff_uassoc, arginfo_array_udiff_uassoc)
	ZEND_FE(array_multisort, arginfo_array_multisort)
	ZEND_FE(array_rand, arginfo_array_rand)
	ZEND_RAW_FENTRY("array_sum", zif_array_sum, arginfo_array_sum, ZEND_ACC_COMPILE_TIME_EVAL, NULL, NULL)
	ZEND_RAW_FENTRY("array_product", zif_array_product, arginfo_array_product, ZEND_ACC_COMPILE_TIME_EVAL, NULL, NULL)
	ZEND_FE(array_reduce, arginfo_array_reduce)
	ZEND_FE(array_filter, arginfo_array_filter)
	ZEND_FE(array_find, arginfo_array_find)
	ZEND_FE(array_find_key, arginfo_array_find_key)
	ZEND_FE(array_any, arginfo_array_any)
	ZEND_FE(array_all, arginfo_array_all)
	ZEND_FE(array_map, arginfo_array_map)
	ZEND_RAW_FENTRY("array_key_exists", zif_array_key_exists, arginfo_array_key_exists, ZEND_ACC_COMPILE_TIME_EVAL, NULL, NULL)
	ZEND_RAW_FENTRY("key_exists", zif_array_key_exists, arginfo_key_exists, 0, NULL, NULL)
	ZEND_RAW_FENTRY("array_chunk", zif_array_chunk, arginfo_array_chunk, ZEND_ACC_COMPILE_TIME_EVAL, NULL, NULL)
	ZEND_RAW_FENTRY("array_combine", zif_array_combine, arginfo_array_combine, ZEND_ACC_COMPILE_TIME_EVAL, NULL, NULL)
	ZEND_RAW_FENTRY("array_is_list", zif_array_is_list, arginfo_array_is_list, ZEND_ACC_COMPILE_TIME_EVAL, NULL, NULL)
	ZEND_RAW_FENTRY("base64_encode", zif_base64_encode, arginfo_base64_encode, ZEND_ACC_COMPILE_TIME_EVAL, NULL, NULL)
	ZEND_RAW_FENTRY("base64_decode", zif_base64_decode, arginfo_base64_decode, ZEND_ACC_COMPILE_TIME_EVAL, NULL, NULL)
	ZEND_FE(constant, arginfo_constant)
	ZEND_FE(ip2long, arginfo_ip2long)
	ZEND_FE(long2ip, arginfo_long2ip)
	ZEND_FE(getenv, arginfo_getenv)
#if defined(HAVE_PUTENV)
	ZEND_FE(putenv, arginfo_putenv)
#endif
	ZEND_FE(getopt, arginfo_getopt)
	ZEND_FE(flush, arginfo_flush)
	ZEND_FE(sleep, arginfo_sleep)
	ZEND_FE(usleep, arginfo_usleep)
#if defined(HAVE_NANOSLEEP)
	ZEND_FE(time_nanosleep, arginfo_time_nanosleep)
	ZEND_FE(time_sleep_until, arginfo_time_sleep_until)
#endif
	ZEND_FE(get_current_user, arginfo_get_current_user)
	ZEND_FE(get_cfg_var, arginfo_get_cfg_var)
	ZEND_FE(error_log, arginfo_error_log)
	ZEND_FE(error_get_last, arginfo_error_get_last)
	ZEND_FE(error_clear_last, arginfo_error_clear_last)
	ZEND_FE(call_user_func, arginfo_call_user_func)
	ZEND_FE(call_user_func_array, arginfo_call_user_func_array)
	ZEND_FE(forward_static_call, arginfo_forward_static_call)
	ZEND_FE(forward_static_call_array, arginfo_forward_static_call_array)
	ZEND_FE(register_shutdown_function, arginfo_register_shutdown_function)
	ZEND_FE(highlight_file, arginfo_highlight_file)
	ZEND_RAW_FENTRY("show_source", zif_highlight_file, arginfo_show_source, 0, NULL, NULL)
	ZEND_FE(php_strip_whitespace, arginfo_php_strip_whitespace)
	ZEND_FE(highlight_string, arginfo_highlight_string)
	ZEND_FE(ini_get, arginfo_ini_get)
	ZEND_FE(ini_get_all, arginfo_ini_get_all)
	ZEND_FE(ini_set, arginfo_ini_set)
	ZEND_RAW_FENTRY("ini_alter", zif_ini_set, arginfo_ini_alter, 0, NULL, NULL)
	ZEND_FE(ini_restore, arginfo_ini_restore)
	ZEND_FE(ini_parse_quantity, arginfo_ini_parse_quantity)
	ZEND_FE(set_include_path, arginfo_set_include_path)
	ZEND_FE(get_include_path, arginfo_get_include_path)
	ZEND_FE(print_r, arginfo_print_r)
	ZEND_FE(connection_aborted, arginfo_connection_aborted)
	ZEND_FE(connection_status, arginfo_connection_status)
	ZEND_FE(ignore_user_abort, arginfo_ignore_user_abort)
#if defined(HAVE_GETSERVBYNAME)
	ZEND_FE(getservbyname, arginfo_getservbyname)
#endif
#if defined(HAVE_GETSERVBYPORT)
	ZEND_FE(getservbyport, arginfo_getservbyport)
#endif
#if defined(HAVE_GETPROTOBYNAME)
	ZEND_FE(getprotobyname, arginfo_getprotobyname)
#endif
#if defined(HAVE_GETPROTOBYNUMBER)
	ZEND_FE(getprotobynumber, arginfo_getprotobynumber)
#endif
	ZEND_FE(register_tick_function, arginfo_register_tick_function)
	ZEND_FE(unregister_tick_function, arginfo_unregister_tick_function)
	ZEND_FE(is_uploaded_file, arginfo_is_uploaded_file)
	ZEND_FE(move_uploaded_file, arginfo_move_uploaded_file)
	ZEND_FE(parse_ini_file, arginfo_parse_ini_file)
	ZEND_RAW_FENTRY("parse_ini_string", zif_parse_ini_string, arginfo_parse_ini_string, ZEND_ACC_COMPILE_TIME_EVAL, NULL, NULL)
#if ZEND_DEBUG
	ZEND_FE(config_get_hash, arginfo_config_get_hash)
#endif
#if defined(HAVE_GETLOADAVG)
	ZEND_FE(sys_getloadavg, arginfo_sys_getloadavg)
#endif
	ZEND_FE(get_browser, arginfo_get_browser)
	ZEND_RAW_FENTRY("crc32", zif_crc32, arginfo_crc32, ZEND_ACC_COMPILE_TIME_EVAL, NULL, NULL)
	ZEND_FE(crypt, arginfo_crypt)
#if defined(HAVE_STRPTIME)
	ZEND_RAW_FENTRY("strptime", zif_strptime, arginfo_strptime, ZEND_ACC_DEPRECATED, NULL, NULL)
#endif
#if defined(HAVE_GETHOSTNAME)
	ZEND_FE(gethostname, arginfo_gethostname)
#endif
	ZEND_FE(gethostbyaddr, arginfo_gethostbyaddr)
	ZEND_FE(gethostbyname, arginfo_gethostbyname)
	ZEND_FE(gethostbynamel, arginfo_gethostbynamel)
#if (defined(PHP_WIN32) || defined(HAVE_DNS_SEARCH_FUNC))
	ZEND_FE(dns_check_record, arginfo_dns_check_record)
	ZEND_RAW_FENTRY("checkdnsrr", zif_dns_check_record, arginfo_checkdnsrr, 0, NULL, NULL)
	ZEND_FE(dns_get_record, arginfo_dns_get_record)
	ZEND_FE(dns_get_mx, arginfo_dns_get_mx)
	ZEND_RAW_FENTRY("getmxrr", zif_dns_get_mx, arginfo_getmxrr, 0, NULL, NULL)
#endif
#if (defined(PHP_WIN32) || defined(HAVE_GETIFADDRS) || defined(__PASE__))
	ZEND_FE(net_get_interfaces, arginfo_net_get_interfaces)
#endif
#if defined(HAVE_FTOK)
	ZEND_FE(ftok, arginfo_ftok)
#endif
	ZEND_FE(hrtime, arginfo_hrtime)
	ZEND_FE(md5, arginfo_md5)
	ZEND_FE(md5_file, arginfo_md5_file)
	ZEND_FE(getmyuid, arginfo_getmyuid)
	ZEND_FE(getmygid, arginfo_getmygid)
	ZEND_FE(getmypid, arginfo_getmypid)
	ZEND_FE(getmyinode, arginfo_getmyinode)
	ZEND_FE(getlastmod, arginfo_getlastmod)
	ZEND_FE(sha1, arginfo_sha1)
	ZEND_FE(sha1_file, arginfo_sha1_file)
#if defined(HAVE_SYSLOG_H)
	ZEND_FE(openlog, arginfo_openlog)
	ZEND_FE(closelog, arginfo_closelog)
	ZEND_FE(syslog, arginfo_syslog)
#endif
	ZEND_FE(inet_ntop, arginfo_inet_ntop)
	ZEND_FE(inet_pton, arginfo_inet_pton)
	ZEND_FE(metaphone, arginfo_metaphone)
	ZEND_FE(header, arginfo_header)
	ZEND_FE(header_remove, arginfo_header_remove)
	ZEND_FE(setrawcookie, arginfo_setrawcookie)
	ZEND_FE(setcookie, arginfo_setcookie)
	ZEND_FE(http_response_code, arginfo_http_response_code)
	ZEND_FE(headers_sent, arginfo_headers_sent)
	ZEND_FE(headers_list, arginfo_headers_list)
	ZEND_FE(htmlspecialchars, arginfo_htmlspecialchars)
	ZEND_FE(htmlspecialchars_decode, arginfo_htmlspecialchars_decode)
	ZEND_FE(html_entity_decode, arginfo_html_entity_decode)
	ZEND_FE(htmlentities, arginfo_htmlentities)
	ZEND_FE(get_html_translation_table, arginfo_get_html_translation_table)
	ZEND_FE(assert, arginfo_assert)
	ZEND_RAW_FENTRY("assert_options", zif_assert_options, arginfo_assert_options, ZEND_ACC_DEPRECATED, NULL, NULL)
	ZEND_RAW_FENTRY("bin2hex", zif_bin2hex, arginfo_bin2hex, ZEND_ACC_COMPILE_TIME_EVAL, NULL, NULL)
	ZEND_RAW_FENTRY("hex2bin", zif_hex2bin, arginfo_hex2bin, ZEND_ACC_COMPILE_TIME_EVAL, NULL, NULL)
	ZEND_RAW_FENTRY("strspn", zif_strspn, arginfo_strspn, ZEND_ACC_COMPILE_TIME_EVAL, NULL, NULL)
	ZEND_RAW_FENTRY("strcspn", zif_strcspn, arginfo_strcspn, ZEND_ACC_COMPILE_TIME_EVAL, NULL, NULL)
#if defined(HAVE_NL_LANGINFO)
	ZEND_FE(nl_langinfo, arginfo_nl_langinfo)
#endif
	ZEND_FE(strcoll, arginfo_strcoll)
	ZEND_RAW_FENTRY("trim", zif_trim, arginfo_trim, ZEND_ACC_COMPILE_TIME_EVAL, frameless_function_infos_trim, NULL)
	ZEND_RAW_FENTRY("rtrim", zif_rtrim, arginfo_rtrim, ZEND_ACC_COMPILE_TIME_EVAL, NULL, NULL)
	ZEND_RAW_FENTRY("chop", zif_rtrim, arginfo_chop, 0, NULL, NULL)
	ZEND_RAW_FENTRY("ltrim", zif_ltrim, arginfo_ltrim, ZEND_ACC_COMPILE_TIME_EVAL, NULL, NULL)
	ZEND_RAW_FENTRY("wordwrap", zif_wordwrap, arginfo_wordwrap, ZEND_ACC_COMPILE_TIME_EVAL, NULL, NULL)
	ZEND_RAW_FENTRY("explode", zif_explode, arginfo_explode, ZEND_ACC_COMPILE_TIME_EVAL, NULL, NULL)
	ZEND_RAW_FENTRY("implode", zif_implode, arginfo_implode, ZEND_ACC_COMPILE_TIME_EVAL, frameless_function_infos_implode, NULL)
	ZEND_RAW_FENTRY("join", zif_implode, arginfo_join, 0, NULL, NULL)
	ZEND_FE(strtok, arginfo_strtok)
	ZEND_RAW_FENTRY("strtoupper", zif_strtoupper, arginfo_strtoupper, ZEND_ACC_COMPILE_TIME_EVAL, NULL, NULL)
	ZEND_RAW_FENTRY("strtolower", zif_strtolower, arginfo_strtolower, ZEND_ACC_COMPILE_TIME_EVAL, NULL, NULL)
	ZEND_FE(str_increment, arginfo_str_increment)
	ZEND_FE(str_decrement, arginfo_str_decrement)
	ZEND_FE(basename, arginfo_basename)
	ZEND_RAW_FENTRY("dirname", zif_dirname, arginfo_dirname, 0, frameless_function_infos_dirname, NULL)
	ZEND_FE(pathinfo, arginfo_pathinfo)
	ZEND_RAW_FENTRY("stristr", zif_stristr, arginfo_stristr, ZEND_ACC_COMPILE_TIME_EVAL, NULL, NULL)
	ZEND_RAW_FENTRY("strstr", zif_strstr, arginfo_strstr, ZEND_ACC_COMPILE_TIME_EVAL, frameless_function_infos_strstr, NULL)
	ZEND_RAW_FENTRY("strchr", zif_strstr, arginfo_strchr, 0, NULL, NULL)
	ZEND_RAW_FENTRY("strpos", zif_strpos, arginfo_strpos, ZEND_ACC_COMPILE_TIME_EVAL, frameless_function_infos_strpos, NULL)
	ZEND_RAW_FENTRY("stripos", zif_stripos, arginfo_stripos, ZEND_ACC_COMPILE_TIME_EVAL, NULL, NULL)
	ZEND_RAW_FENTRY("strrpos", zif_strrpos, arginfo_strrpos, ZEND_ACC_COMPILE_TIME_EVAL, NULL, NULL)
	ZEND_RAW_FENTRY("strripos", zif_strripos, arginfo_strripos, ZEND_ACC_COMPILE_TIME_EVAL, NULL, NULL)
	ZEND_RAW_FENTRY("strrchr", zif_strrchr, arginfo_strrchr, ZEND_ACC_COMPILE_TIME_EVAL, NULL, NULL)
	ZEND_RAW_FENTRY("str_contains", zif_str_contains, arginfo_str_contains, ZEND_ACC_COMPILE_TIME_EVAL, frameless_function_infos_str_contains, NULL)
	ZEND_RAW_FENTRY("str_starts_with", zif_str_starts_with, arginfo_str_starts_with, ZEND_ACC_COMPILE_TIME_EVAL, frameless_function_infos_str_starts_with, NULL)
	ZEND_RAW_FENTRY("str_ends_with", zif_str_ends_with, arginfo_str_ends_with, ZEND_ACC_COMPILE_TIME_EVAL, NULL, NULL)
	ZEND_RAW_FENTRY("chunk_split", zif_chunk_split, arginfo_chunk_split, ZEND_ACC_COMPILE_TIME_EVAL, NULL, NULL)
	ZEND_RAW_FENTRY("substr", zif_substr, arginfo_substr, ZEND_ACC_COMPILE_TIME_EVAL, frameless_function_infos_substr, NULL)
	ZEND_RAW_FENTRY("substr_replace", zif_substr_replace, arginfo_substr_replace, ZEND_ACC_COMPILE_TIME_EVAL, NULL, NULL)
	ZEND_RAW_FENTRY("quotemeta", zif_quotemeta, arginfo_quotemeta, ZEND_ACC_COMPILE_TIME_EVAL, NULL, NULL)
	ZEND_RAW_FENTRY("ord", zif_ord, arginfo_ord, ZEND_ACC_COMPILE_TIME_EVAL, NULL, NULL)
	ZEND_RAW_FENTRY("chr", zif_chr, arginfo_chr, ZEND_ACC_COMPILE_TIME_EVAL, NULL, NULL)
	ZEND_RAW_FENTRY("ucfirst", zif_ucfirst, arginfo_ucfirst, ZEND_ACC_COMPILE_TIME_EVAL, NULL, NULL)
	ZEND_RAW_FENTRY("lcfirst", zif_lcfirst, arginfo_lcfirst, ZEND_ACC_COMPILE_TIME_EVAL, NULL, NULL)
	ZEND_RAW_FENTRY("ucwords", zif_ucwords, arginfo_ucwords, ZEND_ACC_COMPILE_TIME_EVAL, NULL, NULL)
	ZEND_RAW_FENTRY("strtr", zif_strtr, arginfo_strtr, ZEND_ACC_COMPILE_TIME_EVAL, frameless_function_infos_strtr, NULL)
	ZEND_RAW_FENTRY("strrev", zif_strrev, arginfo_strrev, ZEND_ACC_COMPILE_TIME_EVAL, NULL, NULL)
	ZEND_FE(similar_text, arginfo_similar_text)
	ZEND_RAW_FENTRY("addcslashes", zif_addcslashes, arginfo_addcslashes, ZEND_ACC_COMPILE_TIME_EVAL, NULL, NULL)
	ZEND_RAW_FENTRY("addslashes", zif_addslashes, arginfo_addslashes, ZEND_ACC_COMPILE_TIME_EVAL, NULL, NULL)
	ZEND_RAW_FENTRY("stripcslashes", zif_stripcslashes, arginfo_stripcslashes, ZEND_ACC_COMPILE_TIME_EVAL, NULL, NULL)
	ZEND_RAW_FENTRY("stripslashes", zif_stripslashes, arginfo_stripslashes, ZEND_ACC_COMPILE_TIME_EVAL, NULL, NULL)
	ZEND_RAW_FENTRY("str_replace", zif_str_replace, arginfo_str_replace, ZEND_ACC_COMPILE_TIME_EVAL, frameless_function_infos_str_replace, NULL)
	ZEND_RAW_FENTRY("str_ireplace", zif_str_ireplace, arginfo_str_ireplace, ZEND_ACC_COMPILE_TIME_EVAL, NULL, NULL)
	ZEND_FE(hebrev, arginfo_hebrev)
	ZEND_RAW_FENTRY("nl2br", zif_nl2br, arginfo_nl2br, ZEND_ACC_COMPILE_TIME_EVAL, NULL, NULL)
	ZEND_RAW_FENTRY("strip_tags", zif_strip_tags, arginfo_strip_tags, ZEND_ACC_COMPILE_TIME_EVAL, NULL, NULL)
	ZEND_FE(setlocale, arginfo_setlocale)
	ZEND_FE(parse_str, arginfo_parse_str)
	ZEND_FE(str_getcsv, arginfo_str_getcsv)
	ZEND_FE(str_repeat, arginfo_str_repeat)
	ZEND_RAW_FENTRY("count_chars", zif_count_chars, arginfo_count_chars, ZEND_ACC_COMPILE_TIME_EVAL, NULL, NULL)
	ZEND_FE(strnatcmp, arginfo_strnatcmp)
	ZEND_FE(localeconv, arginfo_localeconv)
	ZEND_FE(strnatcasecmp, arginfo_strnatcasecmp)
	ZEND_RAW_FENTRY("substr_count", zif_substr_count, arginfo_substr_count, ZEND_ACC_COMPILE_TIME_EVAL, NULL, NULL)
	ZEND_FE(str_pad, arginfo_str_pad)
	ZEND_FE(sscanf, arginfo_sscanf)
	ZEND_RAW_FENTRY("str_rot13", zif_str_rot13, arginfo_str_rot13, ZEND_ACC_COMPILE_TIME_EVAL, NULL, NULL)
	ZEND_FE(str_shuffle, arginfo_str_shuffle)
	ZEND_FE(str_word_count, arginfo_str_word_count)
	ZEND_RAW_FENTRY("str_split", zif_str_split, arginfo_str_split, ZEND_ACC_COMPILE_TIME_EVAL, NULL, NULL)
	ZEND_RAW_FENTRY("strpbrk", zif_strpbrk, arginfo_strpbrk, ZEND_ACC_COMPILE_TIME_EVAL, NULL, NULL)
	ZEND_RAW_FENTRY("substr_compare", zif_substr_compare, arginfo_substr_compare, ZEND_ACC_COMPILE_TIME_EVAL, NULL, NULL)
	ZEND_RAW_FENTRY("utf8_encode", zif_utf8_encode, arginfo_utf8_encode, ZEND_ACC_DEPRECATED|ZEND_ACC_COMPILE_TIME_EVAL, NULL, NULL)
	ZEND_RAW_FENTRY("utf8_decode", zif_utf8_decode, arginfo_utf8_decode, ZEND_ACC_DEPRECATED|ZEND_ACC_COMPILE_TIME_EVAL, NULL, NULL)
	ZEND_FE(opendir, arginfo_opendir)
	ZEND_FE(dir, arginfo_dir)
	ZEND_FE(closedir, arginfo_closedir)
	ZEND_FE(chdir, arginfo_chdir)
#if (defined(HAVE_CHROOT) && !defined(ZTS) && defined(ENABLE_CHROOT_FUNC))
	ZEND_FE(chroot, arginfo_chroot)
#endif
	ZEND_FE(getcwd, arginfo_getcwd)
	ZEND_FE(rewinddir, arginfo_rewinddir)
	ZEND_FE(readdir, arginfo_readdir)
	ZEND_FE(scandir, arginfo_scandir)
	ZEND_FE(glob, arginfo_glob)
	ZEND_FE(exec, arginfo_exec)
	ZEND_FE(system, arginfo_system)
	ZEND_FE(passthru, arginfo_passthru)
	ZEND_FE(escapeshellcmd, arginfo_escapeshellcmd)
	ZEND_FE(escapeshellarg, arginfo_escapeshellarg)
	ZEND_FE(shell_exec, arginfo_shell_exec)
#if defined(HAVE_NICE)
	ZEND_FE(proc_nice, arginfo_proc_nice)
#endif
	ZEND_FE(flock, arginfo_flock)
	ZEND_FE(get_meta_tags, arginfo_get_meta_tags)
	ZEND_FE(pclose, arginfo_pclose)
	ZEND_FE(popen, arginfo_popen)
	ZEND_FE(readfile, arginfo_readfile)
	ZEND_FE(rewind, arginfo_rewind)
	ZEND_FE(rmdir, arginfo_rmdir)
	ZEND_FE(umask, arginfo_umask)
	ZEND_FE(fclose, arginfo_fclose)
	ZEND_FE(feof, arginfo_feof)
	ZEND_FE(fgetc, arginfo_fgetc)
	ZEND_FE(fgets, arginfo_fgets)
	ZEND_FE(fread, arginfo_fread)
	ZEND_FE(fopen, arginfo_fopen)
	ZEND_FE(fscanf, arginfo_fscanf)
	ZEND_FE(fpassthru, arginfo_fpassthru)
	ZEND_FE(ftruncate, arginfo_ftruncate)
	ZEND_FE(fstat, arginfo_fstat)
	ZEND_FE(fseek, arginfo_fseek)
	ZEND_FE(ftell, arginfo_ftell)
	ZEND_FE(fflush, arginfo_fflush)
	ZEND_FE(fsync, arginfo_fsync)
	ZEND_FE(fdatasync, arginfo_fdatasync)
	ZEND_FE(fwrite, arginfo_fwrite)
	ZEND_RAW_FENTRY("fputs", zif_fwrite, arginfo_fputs, 0, NULL, NULL)
	ZEND_FE(mkdir, arginfo_mkdir)
	ZEND_FE(rename, arginfo_rename)
	ZEND_FE(copy, arginfo_copy)
	ZEND_FE(tempnam, arginfo_tempnam)
	ZEND_FE(tmpfile, arginfo_tmpfile)
	ZEND_FE(file, arginfo_file)
	ZEND_FE(file_get_contents, arginfo_file_get_contents)
	ZEND_FE(unlink, arginfo_unlink)
	ZEND_FE(file_put_contents, arginfo_file_put_contents)
	ZEND_FE(fputcsv, arginfo_fputcsv)
	ZEND_FE(fgetcsv, arginfo_fgetcsv)
	ZEND_FE(realpath, arginfo_realpath)
#if defined(HAVE_FNMATCH)
	ZEND_FE(fnmatch, arginfo_fnmatch)
#endif
	ZEND_FE(sys_get_temp_dir, arginfo_sys_get_temp_dir)
	ZEND_FE(fileatime, arginfo_fileatime)
	ZEND_FE(filectime, arginfo_filectime)
	ZEND_FE(filegroup, arginfo_filegroup)
	ZEND_FE(fileinode, arginfo_fileinode)
	ZEND_FE(filemtime, arginfo_filemtime)
	ZEND_FE(fileowner, arginfo_fileowner)
	ZEND_FE(fileperms, arginfo_fileperms)
	ZEND_FE(filesize, arginfo_filesize)
	ZEND_FE(filetype, arginfo_filetype)
	ZEND_FE(file_exists, arginfo_file_exists)
	ZEND_FE(is_writable, arginfo_is_writable)
	ZEND_RAW_FENTRY("is_writeable", zif_is_writable, arginfo_is_writeable, 0, NULL, NULL)
	ZEND_FE(is_readable, arginfo_is_readable)
	ZEND_FE(is_executable, arginfo_is_executable)
	ZEND_FE(is_file, arginfo_is_file)
	ZEND_FE(is_dir, arginfo_is_dir)
	ZEND_FE(is_link, arginfo_is_link)
	ZEND_FE(stat, arginfo_stat)
	ZEND_FE(lstat, arginfo_lstat)
	ZEND_FE(chown, arginfo_chown)
	ZEND_FE(chgrp, arginfo_chgrp)
#if defined(HAVE_LCHOWN)
	ZEND_FE(lchown, arginfo_lchown)
	ZEND_FE(lchgrp, arginfo_lchgrp)
#endif
	ZEND_FE(chmod, arginfo_chmod)
#if defined(HAVE_UTIME)
	ZEND_FE(touch, arginfo_touch)
#endif
	ZEND_FE(clearstatcache, arginfo_clearstatcache)
	ZEND_FE(disk_total_space, arginfo_disk_total_space)
	ZEND_FE(disk_free_space, arginfo_disk_free_space)
	ZEND_RAW_FENTRY("diskfreespace", zif_disk_free_space, arginfo_diskfreespace, 0, NULL, NULL)
	ZEND_FE(realpath_cache_get, arginfo_realpath_cache_get)
	ZEND_FE(realpath_cache_size, arginfo_realpath_cache_size)
	ZEND_FE(sprintf, arginfo_sprintf)
	ZEND_FE(printf, arginfo_printf)
	ZEND_FE(vprintf, arginfo_vprintf)
	ZEND_FE(vsprintf, arginfo_vsprintf)
	ZEND_FE(fprintf, arginfo_fprintf)
	ZEND_FE(vfprintf, arginfo_vfprintf)
	ZEND_FE(fsockopen, arginfo_fsockopen)
	ZEND_FE(pfsockopen, arginfo_pfsockopen)
	ZEND_FE(http_build_query, arginfo_http_build_query)
	ZEND_FE(http_get_last_response_headers, arginfo_http_get_last_response_headers)
	ZEND_FE(http_clear_last_response_headers, arginfo_http_clear_last_response_headers)
	ZEND_FE(request_parse_body, arginfo_request_parse_body)
	ZEND_RAW_FENTRY("image_type_to_mime_type", zif_image_type_to_mime_type, arginfo_image_type_to_mime_type, ZEND_ACC_COMPILE_TIME_EVAL, NULL, NULL)
	ZEND_RAW_FENTRY("image_type_to_extension", zif_image_type_to_extension, arginfo_image_type_to_extension, ZEND_ACC_COMPILE_TIME_EVAL, NULL, NULL)
	ZEND_FE(getimagesize, arginfo_getimagesize)
	ZEND_FE(getimagesizefromstring, arginfo_getimagesizefromstring)
	ZEND_FE(phpinfo, arginfo_phpinfo)
	ZEND_RAW_FENTRY("phpversion", zif_phpversion, arginfo_phpversion, ZEND_ACC_COMPILE_TIME_EVAL, NULL, NULL)
	ZEND_FE(phpcredits, arginfo_phpcredits)
	ZEND_RAW_FENTRY("php_sapi_name", zif_php_sapi_name, arginfo_php_sapi_name, ZEND_ACC_COMPILE_TIME_EVAL, NULL, NULL)
	ZEND_RAW_FENTRY("php_uname", zif_php_uname, arginfo_php_uname, ZEND_ACC_COMPILE_TIME_EVAL, NULL, NULL)
	ZEND_FE(php_ini_scanned_files, arginfo_php_ini_scanned_files)
	ZEND_FE(php_ini_loaded_file, arginfo_php_ini_loaded_file)
	ZEND_FE(iptcembed, arginfo_iptcembed)
	ZEND_FE(iptcparse, arginfo_iptcparse)
	ZEND_FE(levenshtein, arginfo_levenshtein)
#if (defined(HAVE_SYMLINK) || defined(PHP_WIN32))
	ZEND_FE(readlink, arginfo_readlink)
	ZEND_FE(linkinfo, arginfo_linkinfo)
	ZEND_FE(symlink, arginfo_symlink)
	ZEND_FE(link, arginfo_link)
#endif
	ZEND_FE(mail, arginfo_mail)
	ZEND_RAW_FENTRY("abs", zif_abs, arginfo_abs, ZEND_ACC_COMPILE_TIME_EVAL, NULL, NULL)
	ZEND_RAW_FENTRY("ceil", zif_ceil, arginfo_ceil, ZEND_ACC_COMPILE_TIME_EVAL, NULL, NULL)
	ZEND_RAW_FENTRY("floor", zif_floor, arginfo_floor, ZEND_ACC_COMPILE_TIME_EVAL, NULL, NULL)
	ZEND_RAW_FENTRY("round", zif_round, arginfo_round, ZEND_ACC_COMPILE_TIME_EVAL, NULL, NULL)
	ZEND_RAW_FENTRY("sin", zif_sin, arginfo_sin, ZEND_ACC_COMPILE_TIME_EVAL, NULL, NULL)
	ZEND_RAW_FENTRY("cos", zif_cos, arginfo_cos, ZEND_ACC_COMPILE_TIME_EVAL, NULL, NULL)
	ZEND_RAW_FENTRY("tan", zif_tan, arginfo_tan, ZEND_ACC_COMPILE_TIME_EVAL, NULL, NULL)
	ZEND_RAW_FENTRY("asin", zif_asin, arginfo_asin, ZEND_ACC_COMPILE_TIME_EVAL, NULL, NULL)
	ZEND_RAW_FENTRY("acos", zif_acos, arginfo_acos, ZEND_ACC_COMPILE_TIME_EVAL, NULL, NULL)
	ZEND_RAW_FENTRY("atan", zif_atan, arginfo_atan, ZEND_ACC_COMPILE_TIME_EVAL, NULL, NULL)
	ZEND_RAW_FENTRY("atanh", zif_atanh, arginfo_atanh, ZEND_ACC_COMPILE_TIME_EVAL, NULL, NULL)
	ZEND_RAW_FENTRY("atan2", zif_atan2, arginfo_atan2, ZEND_ACC_COMPILE_TIME_EVAL, NULL, NULL)
	ZEND_RAW_FENTRY("sinh", zif_sinh, arginfo_sinh, ZEND_ACC_COMPILE_TIME_EVAL, NULL, NULL)
	ZEND_RAW_FENTRY("cosh", zif_cosh, arginfo_cosh, ZEND_ACC_COMPILE_TIME_EVAL, NULL, NULL)
	ZEND_RAW_FENTRY("tanh", zif_tanh, arginfo_tanh, ZEND_ACC_COMPILE_TIME_EVAL, NULL, NULL)
	ZEND_RAW_FENTRY("asinh", zif_asinh, arginfo_asinh, ZEND_ACC_COMPILE_TIME_EVAL, NULL, NULL)
	ZEND_RAW_FENTRY("acosh", zif_acosh, arginfo_acosh, ZEND_ACC_COMPILE_TIME_EVAL, NULL, NULL)
	ZEND_RAW_FENTRY("expm1", zif_expm1, arginfo_expm1, ZEND_ACC_COMPILE_TIME_EVAL, NULL, NULL)
	ZEND_RAW_FENTRY("log1p", zif_log1p, arginfo_log1p, ZEND_ACC_COMPILE_TIME_EVAL, NULL, NULL)
	ZEND_RAW_FENTRY("pi", zif_pi, arginfo_pi, ZEND_ACC_COMPILE_TIME_EVAL, NULL, NULL)
	ZEND_RAW_FENTRY("is_finite", zif_is_finite, arginfo_is_finite, ZEND_ACC_COMPILE_TIME_EVAL, NULL, NULL)
	ZEND_RAW_FENTRY("is_nan", zif_is_nan, arginfo_is_nan, ZEND_ACC_COMPILE_TIME_EVAL, NULL, NULL)
	ZEND_RAW_FENTRY("intdiv", zif_intdiv, arginfo_intdiv, ZEND_ACC_COMPILE_TIME_EVAL, NULL, NULL)
	ZEND_RAW_FENTRY("is_infinite", zif_is_infinite, arginfo_is_infinite, ZEND_ACC_COMPILE_TIME_EVAL, NULL, NULL)
	ZEND_RAW_FENTRY("pow", zif_pow, arginfo_pow, ZEND_ACC_COMPILE_TIME_EVAL, NULL, NULL)
	ZEND_RAW_FENTRY("exp", zif_exp, arginfo_exp, ZEND_ACC_COMPILE_TIME_EVAL, NULL, NULL)
	ZEND_RAW_FENTRY("log", zif_log, arginfo_log, ZEND_ACC_COMPILE_TIME_EVAL, NULL, NULL)
	ZEND_RAW_FENTRY("log10", zif_log10, arginfo_log10, ZEND_ACC_COMPILE_TIME_EVAL, NULL, NULL)
	ZEND_RAW_FENTRY("sqrt", zif_sqrt, arginfo_sqrt, ZEND_ACC_COMPILE_TIME_EVAL, NULL, NULL)
	ZEND_RAW_FENTRY("hypot", zif_hypot, arginfo_hypot, ZEND_ACC_COMPILE_TIME_EVAL, NULL, NULL)
	ZEND_RAW_FENTRY("deg2rad", zif_deg2rad, arginfo_deg2rad, ZEND_ACC_COMPILE_TIME_EVAL, NULL, NULL)
	ZEND_RAW_FENTRY("rad2deg", zif_rad2deg, arginfo_rad2deg, ZEND_ACC_COMPILE_TIME_EVAL, NULL, NULL)
	ZEND_RAW_FENTRY("bindec", zif_bindec, arginfo_bindec, ZEND_ACC_COMPILE_TIME_EVAL, NULL, NULL)
	ZEND_RAW_FENTRY("hexdec", zif_hexdec, arginfo_hexdec, ZEND_ACC_COMPILE_TIME_EVAL, NULL, NULL)
	ZEND_RAW_FENTRY("octdec", zif_octdec, arginfo_octdec, ZEND_ACC_COMPILE_TIME_EVAL, NULL, NULL)
	ZEND_RAW_FENTRY("decbin", zif_decbin, arginfo_decbin, ZEND_ACC_COMPILE_TIME_EVAL, NULL, NULL)
	ZEND_RAW_FENTRY("decoct", zif_decoct, arginfo_decoct, ZEND_ACC_COMPILE_TIME_EVAL, NULL, NULL)
	ZEND_RAW_FENTRY("dechex", zif_dechex, arginfo_dechex, ZEND_ACC_COMPILE_TIME_EVAL, frameless_function_infos_dechex, NULL)
	ZEND_RAW_FENTRY("base_convert", zif_base_convert, arginfo_base_convert, ZEND_ACC_COMPILE_TIME_EVAL, NULL, NULL)
	ZEND_RAW_FENTRY("number_format", zif_number_format, arginfo_number_format, ZEND_ACC_COMPILE_TIME_EVAL, NULL, NULL)
	ZEND_RAW_FENTRY("fmod", zif_fmod, arginfo_fmod, ZEND_ACC_COMPILE_TIME_EVAL, NULL, NULL)
	ZEND_RAW_FENTRY("fdiv", zif_fdiv, arginfo_fdiv, ZEND_ACC_COMPILE_TIME_EVAL, NULL, NULL)
	ZEND_RAW_FENTRY("fpow", zif_fpow, arginfo_fpow, ZEND_ACC_COMPILE_TIME_EVAL, NULL, NULL)
#if defined(HAVE_GETTIMEOFDAY)
	ZEND_FE(microtime, arginfo_microtime)
	ZEND_FE(gettimeofday, arginfo_gettimeofday)
#endif
#if defined(HAVE_GETRUSAGE)
	ZEND_FE(getrusage, arginfo_getrusage)
#endif
	ZEND_RAW_FENTRY("pack", zif_pack, arginfo_pack, ZEND_ACC_COMPILE_TIME_EVAL, NULL, NULL)
	ZEND_RAW_FENTRY("unpack", zif_unpack, arginfo_unpack, ZEND_ACC_COMPILE_TIME_EVAL, NULL, NULL)
	ZEND_FE(password_get_info, arginfo_password_get_info)
	ZEND_FE(password_hash, arginfo_password_hash)
	ZEND_FE(password_needs_rehash, arginfo_password_needs_rehash)
	ZEND_FE(password_verify, arginfo_password_verify)
	ZEND_RAW_FENTRY("password_algos", zif_password_algos, arginfo_password_algos, ZEND_ACC_COMPILE_TIME_EVAL, NULL, NULL)
#if defined(PHP_CAN_SUPPORT_PROC_OPEN)
	ZEND_FE(proc_open, arginfo_proc_open)
	ZEND_FE(proc_close, arginfo_proc_close)
	ZEND_FE(proc_terminate, arginfo_proc_terminate)
	ZEND_FE(proc_get_status, arginfo_proc_get_status)
#endif
	ZEND_RAW_FENTRY("quoted_printable_decode", zif_quoted_printable_decode, arginfo_quoted_printable_decode, ZEND_ACC_COMPILE_TIME_EVAL, NULL, NULL)
	ZEND_RAW_FENTRY("quoted_printable_encode", zif_quoted_printable_encode, arginfo_quoted_printable_encode, ZEND_ACC_COMPILE_TIME_EVAL, NULL, NULL)
	ZEND_FE(soundex, arginfo_soundex)
	ZEND_FE(stream_select, arginfo_stream_select)
	ZEND_FE(stream_context_create, arginfo_stream_context_create)
	ZEND_FE(stream_context_set_params, arginfo_stream_context_set_params)
	ZEND_FE(stream_context_get_params, arginfo_stream_context_get_params)
	ZEND_FE(stream_context_set_option, arginfo_stream_context_set_option)
	ZEND_FE(stream_context_set_options, arginfo_stream_context_set_options)
	ZEND_FE(stream_context_get_options, arginfo_stream_context_get_options)
	ZEND_FE(stream_context_get_default, arginfo_stream_context_get_default)
	ZEND_FE(stream_context_set_default, arginfo_stream_context_set_default)
	ZEND_FE(stream_filter_prepend, arginfo_stream_filter_prepend)
	ZEND_FE(stream_filter_append, arginfo_stream_filter_append)
	ZEND_FE(stream_filter_remove, arginfo_stream_filter_remove)
	ZEND_FE(stream_socket_client, arginfo_stream_socket_client)
	ZEND_FE(stream_socket_server, arginfo_stream_socket_server)
	ZEND_FE(stream_socket_accept, arginfo_stream_socket_accept)
	ZEND_FE(stream_socket_get_name, arginfo_stream_socket_get_name)
	ZEND_FE(stream_socket_recvfrom, arginfo_stream_socket_recvfrom)
	ZEND_FE(stream_socket_sendto, arginfo_stream_socket_sendto)
	ZEND_FE(stream_socket_enable_crypto, arginfo_stream_socket_enable_crypto)
#if defined(HAVE_SHUTDOWN)
	ZEND_FE(stream_socket_shutdown, arginfo_stream_socket_shutdown)
#endif
#if defined(HAVE_SOCKETPAIR)
	ZEND_FE(stream_socket_pair, arginfo_stream_socket_pair)
#endif
	ZEND_FE(stream_copy_to_stream, arginfo_stream_copy_to_stream)
	ZEND_FE(stream_get_contents, arginfo_stream_get_contents)
	ZEND_FE(stream_supports_lock, arginfo_stream_supports_lock)
	ZEND_FE(stream_set_write_buffer, arginfo_stream_set_write_buffer)
	ZEND_RAW_FENTRY("set_file_buffer", zif_stream_set_write_buffer, arginfo_set_file_buffer, 0, NULL, NULL)
	ZEND_FE(stream_set_read_buffer, arginfo_stream_set_read_buffer)
	ZEND_FE(stream_set_blocking, arginfo_stream_set_blocking)
	ZEND_RAW_FENTRY("socket_set_blocking", zif_stream_set_blocking, arginfo_socket_set_blocking, 0, NULL, NULL)
	ZEND_FE(stream_get_meta_data, arginfo_stream_get_meta_data)
	ZEND_RAW_FENTRY("socket_get_status", zif_stream_get_meta_data, arginfo_socket_get_status, 0, NULL, NULL)
	ZEND_FE(stream_get_line, arginfo_stream_get_line)
	ZEND_FE(stream_resolve_include_path, arginfo_stream_resolve_include_path)
	ZEND_FE(stream_get_wrappers, arginfo_stream_get_wrappers)
	ZEND_FE(stream_get_transports, arginfo_stream_get_transports)
	ZEND_FE(stream_is_local, arginfo_stream_is_local)
	ZEND_FE(stream_isatty, arginfo_stream_isatty)
#if defined(PHP_WIN32)
	ZEND_FE(sapi_windows_vt100_support, arginfo_sapi_windows_vt100_support)
#endif
	ZEND_FE(stream_set_chunk_size, arginfo_stream_set_chunk_size)
#if (defined(HAVE_SYS_TIME_H) || defined(PHP_WIN32))
	ZEND_FE(stream_set_timeout, arginfo_stream_set_timeout)
	ZEND_RAW_FENTRY("socket_set_timeout", zif_stream_set_timeout, arginfo_socket_set_timeout, ZEND_ACC_DEPRECATED, NULL, NULL)
#endif
	ZEND_RAW_FENTRY("gettype", zif_gettype, arginfo_gettype, ZEND_ACC_COMPILE_TIME_EVAL, NULL, NULL)
	ZEND_RAW_FENTRY("get_debug_type", zif_get_debug_type, arginfo_get_debug_type, ZEND_ACC_COMPILE_TIME_EVAL, NULL, NULL)
	ZEND_FE(settype, arginfo_settype)
	ZEND_RAW_FENTRY("intval", zif_intval, arginfo_intval, ZEND_ACC_COMPILE_TIME_EVAL, NULL, NULL)
	ZEND_RAW_FENTRY("floatval", zif_floatval, arginfo_floatval, ZEND_ACC_COMPILE_TIME_EVAL, NULL, NULL)
	ZEND_RAW_FENTRY("doubleval", zif_floatval, arginfo_doubleval, 0, NULL, NULL)
	ZEND_RAW_FENTRY("boolval", zif_boolval, arginfo_boolval, ZEND_ACC_COMPILE_TIME_EVAL, NULL, NULL)
	ZEND_RAW_FENTRY("strval", zif_strval, arginfo_strval, ZEND_ACC_COMPILE_TIME_EVAL, NULL, NULL)
	ZEND_RAW_FENTRY("is_null", zif_is_null, arginfo_is_null, ZEND_ACC_COMPILE_TIME_EVAL, NULL, NULL)
	ZEND_RAW_FENTRY("is_resource", zif_is_resource, arginfo_is_resource, ZEND_ACC_COMPILE_TIME_EVAL, NULL, NULL)
	ZEND_RAW_FENTRY("is_bool", zif_is_bool, arginfo_is_bool, ZEND_ACC_COMPILE_TIME_EVAL, NULL, NULL)
	ZEND_RAW_FENTRY("is_int", zif_is_int, arginfo_is_int, ZEND_ACC_COMPILE_TIME_EVAL, NULL, NULL)
	ZEND_RAW_FENTRY("is_integer", zif_is_int, arginfo_is_integer, 0, NULL, NULL)
	ZEND_RAW_FENTRY("is_long", zif_is_int, arginfo_is_long, 0, NULL, NULL)
	ZEND_RAW_FENTRY("is_float", zif_is_float, arginfo_is_float, ZEND_ACC_COMPILE_TIME_EVAL, NULL, NULL)
	ZEND_RAW_FENTRY("is_double", zif_is_float, arginfo_is_double, 0, NULL, NULL)
	ZEND_RAW_FENTRY("is_numeric", zif_is_numeric, arginfo_is_numeric, ZEND_ACC_COMPILE_TIME_EVAL, frameless_function_infos_is_numeric, NULL)
	ZEND_RAW_FENTRY("is_string", zif_is_string, arginfo_is_string, ZEND_ACC_COMPILE_TIME_EVAL, NULL, NULL)
	ZEND_RAW_FENTRY("is_array", zif_is_array, arginfo_is_array, ZEND_ACC_COMPILE_TIME_EVAL, NULL, NULL)
	ZEND_RAW_FENTRY("is_object", zif_is_object, arginfo_is_object, ZEND_ACC_COMPILE_TIME_EVAL, NULL, NULL)
	ZEND_RAW_FENTRY("is_scalar", zif_is_scalar, arginfo_is_scalar, ZEND_ACC_COMPILE_TIME_EVAL, NULL, NULL)
	ZEND_FE(is_callable, arginfo_is_callable)
	ZEND_RAW_FENTRY("is_iterable", zif_is_iterable, arginfo_is_iterable, ZEND_ACC_COMPILE_TIME_EVAL, NULL, NULL)
	ZEND_RAW_FENTRY("is_countable", zif_is_countable, arginfo_is_countable, ZEND_ACC_COMPILE_TIME_EVAL, NULL, NULL)
#if defined(HAVE_GETTIMEOFDAY)
	ZEND_FE(uniqid, arginfo_uniqid)
#endif
	ZEND_RAW_FENTRY("parse_url", zif_parse_url, arginfo_parse_url, ZEND_ACC_COMPILE_TIME_EVAL, NULL, NULL)
	ZEND_RAW_FENTRY("urlencode", zif_urlencode, arginfo_urlencode, ZEND_ACC_COMPILE_TIME_EVAL, NULL, NULL)
	ZEND_RAW_FENTRY("urldecode", zif_urldecode, arginfo_urldecode, ZEND_ACC_COMPILE_TIME_EVAL, NULL, NULL)
	ZEND_RAW_FENTRY("rawurlencode", zif_rawurlencode, arginfo_rawurlencode, ZEND_ACC_COMPILE_TIME_EVAL, NULL, NULL)
	ZEND_RAW_FENTRY("rawurldecode", zif_rawurldecode, arginfo_rawurldecode, ZEND_ACC_COMPILE_TIME_EVAL, NULL, NULL)
	ZEND_FE(get_headers, arginfo_get_headers)
	ZEND_FE(stream_bucket_make_writeable, arginfo_stream_bucket_make_writeable)
	ZEND_FE(stream_bucket_prepend, arginfo_stream_bucket_prepend)
	ZEND_FE(stream_bucket_append, arginfo_stream_bucket_append)
	ZEND_FE(stream_bucket_new, arginfo_stream_bucket_new)
	ZEND_FE(stream_get_filters, arginfo_stream_get_filters)
	ZEND_FE(stream_filter_register, arginfo_stream_filter_register)
	ZEND_RAW_FENTRY("convert_uuencode", zif_convert_uuencode, arginfo_convert_uuencode, ZEND_ACC_COMPILE_TIME_EVAL, NULL, NULL)
	ZEND_RAW_FENTRY("convert_uudecode", zif_convert_uudecode, arginfo_convert_uudecode, ZEND_ACC_COMPILE_TIME_EVAL, NULL, NULL)
	ZEND_FE(var_dump, arginfo_var_dump)
	ZEND_FE(var_export, arginfo_var_export)
	ZEND_FE(debug_zval_dump, arginfo_debug_zval_dump)
	ZEND_RAW_FENTRY("serialize", zif_serialize, arginfo_serialize, ZEND_ACC_COMPILE_TIME_EVAL, NULL, NULL)
	ZEND_FE(unserialize, arginfo_unserialize)
	ZEND_FE(memory_get_usage, arginfo_memory_get_usage)
	ZEND_FE(memory_get_peak_usage, arginfo_memory_get_peak_usage)
	ZEND_FE(memory_reset_peak_usage, arginfo_memory_reset_peak_usage)
	ZEND_RAW_FENTRY("version_compare", zif_version_compare, arginfo_version_compare, ZEND_ACC_COMPILE_TIME_EVAL, NULL, NULL)
#if defined(PHP_WIN32)
	ZEND_FE(sapi_windows_cp_set, arginfo_sapi_windows_cp_set)
	ZEND_FE(sapi_windows_cp_get, arginfo_sapi_windows_cp_get)
	ZEND_FE(sapi_windows_cp_conv, arginfo_sapi_windows_cp_conv)
	ZEND_FE(sapi_windows_cp_is_utf8, arginfo_sapi_windows_cp_is_utf8)
	ZEND_FE(sapi_windows_set_ctrl_handler, arginfo_sapi_windows_set_ctrl_handler)
	ZEND_FE(sapi_windows_generate_ctrl_event, arginfo_sapi_windows_generate_ctrl_event)
#endif
	ZEND_FE_END
};

static void register_basic_functions_symbols(int module_number)
{
	REGISTER_LONG_CONSTANT("EXTR_OVERWRITE", PHP_EXTR_OVERWRITE, CONST_PERSISTENT);
	REGISTER_LONG_CONSTANT("EXTR_SKIP", PHP_EXTR_SKIP, CONST_PERSISTENT);
	REGISTER_LONG_CONSTANT("EXTR_PREFIX_SAME", PHP_EXTR_PREFIX_SAME, CONST_PERSISTENT);
	REGISTER_LONG_CONSTANT("EXTR_PREFIX_ALL", PHP_EXTR_PREFIX_ALL, CONST_PERSISTENT);
	REGISTER_LONG_CONSTANT("EXTR_PREFIX_INVALID", PHP_EXTR_PREFIX_INVALID, CONST_PERSISTENT);
	REGISTER_LONG_CONSTANT("EXTR_PREFIX_IF_EXISTS", PHP_EXTR_PREFIX_IF_EXISTS, CONST_PERSISTENT);
	REGISTER_LONG_CONSTANT("EXTR_IF_EXISTS", PHP_EXTR_IF_EXISTS, CONST_PERSISTENT);
	REGISTER_LONG_CONSTANT("EXTR_REFS", PHP_EXTR_REFS, CONST_PERSISTENT);
	REGISTER_LONG_CONSTANT("SORT_ASC", PHP_SORT_ASC, CONST_PERSISTENT);
	REGISTER_LONG_CONSTANT("SORT_DESC", PHP_SORT_DESC, CONST_PERSISTENT);
	REGISTER_LONG_CONSTANT("SORT_REGULAR", PHP_SORT_REGULAR, CONST_PERSISTENT);
	REGISTER_LONG_CONSTANT("SORT_NUMERIC", PHP_SORT_NUMERIC, CONST_PERSISTENT);
	REGISTER_LONG_CONSTANT("SORT_STRING", PHP_SORT_STRING, CONST_PERSISTENT);
	REGISTER_LONG_CONSTANT("SORT_LOCALE_STRING", PHP_SORT_LOCALE_STRING, CONST_PERSISTENT);
	REGISTER_LONG_CONSTANT("SORT_NATURAL", PHP_SORT_NATURAL, CONST_PERSISTENT);
	REGISTER_LONG_CONSTANT("SORT_FLAG_CASE", PHP_SORT_FLAG_CASE, CONST_PERSISTENT);
	REGISTER_LONG_CONSTANT("CASE_LOWER", PHP_CASE_LOWER, CONST_PERSISTENT);
	REGISTER_LONG_CONSTANT("CASE_UPPER", PHP_CASE_UPPER, CONST_PERSISTENT);
	REGISTER_LONG_CONSTANT("COUNT_NORMAL", PHP_COUNT_NORMAL, CONST_PERSISTENT);
	REGISTER_LONG_CONSTANT("COUNT_RECURSIVE", PHP_COUNT_RECURSIVE, CONST_PERSISTENT);
	REGISTER_LONG_CONSTANT("ARRAY_FILTER_USE_BOTH", ARRAY_FILTER_USE_BOTH, CONST_PERSISTENT);
	REGISTER_LONG_CONSTANT("ARRAY_FILTER_USE_KEY", ARRAY_FILTER_USE_KEY, CONST_PERSISTENT);
	zend_constant *const_ASSERT_ACTIVE = REGISTER_LONG_CONSTANT("ASSERT_ACTIVE", PHP_ASSERT_ACTIVE, CONST_PERSISTENT | CONST_DEPRECATED);
	zend_constant *const_ASSERT_CALLBACK = REGISTER_LONG_CONSTANT("ASSERT_CALLBACK", PHP_ASSERT_CALLBACK, CONST_PERSISTENT | CONST_DEPRECATED);
	zend_constant *const_ASSERT_BAIL = REGISTER_LONG_CONSTANT("ASSERT_BAIL", PHP_ASSERT_BAIL, CONST_PERSISTENT | CONST_DEPRECATED);
	zend_constant *const_ASSERT_WARNING = REGISTER_LONG_CONSTANT("ASSERT_WARNING", PHP_ASSERT_WARNING, CONST_PERSISTENT | CONST_DEPRECATED);
	zend_constant *const_ASSERT_EXCEPTION = REGISTER_LONG_CONSTANT("ASSERT_EXCEPTION", PHP_ASSERT_EXCEPTION, CONST_PERSISTENT | CONST_DEPRECATED);
	REGISTER_LONG_CONSTANT("CONNECTION_ABORTED", PHP_CONNECTION_ABORTED, CONST_PERSISTENT);
	REGISTER_LONG_CONSTANT("CONNECTION_NORMAL", PHP_CONNECTION_NORMAL, CONST_PERSISTENT);
	REGISTER_LONG_CONSTANT("CONNECTION_TIMEOUT", PHP_CONNECTION_TIMEOUT, CONST_PERSISTENT);
	REGISTER_LONG_CONSTANT("INI_USER", ZEND_INI_USER, CONST_PERSISTENT);
	REGISTER_LONG_CONSTANT("INI_PERDIR", ZEND_INI_PERDIR, CONST_PERSISTENT);
	REGISTER_LONG_CONSTANT("INI_SYSTEM", ZEND_INI_SYSTEM, CONST_PERSISTENT);
	REGISTER_LONG_CONSTANT("INI_ALL", ZEND_INI_ALL, CONST_PERSISTENT);
	REGISTER_LONG_CONSTANT("INI_SCANNER_NORMAL", ZEND_INI_SCANNER_NORMAL, CONST_PERSISTENT);
	REGISTER_LONG_CONSTANT("INI_SCANNER_RAW", ZEND_INI_SCANNER_RAW, CONST_PERSISTENT);
	REGISTER_LONG_CONSTANT("INI_SCANNER_TYPED", ZEND_INI_SCANNER_TYPED, CONST_PERSISTENT);
	REGISTER_LONG_CONSTANT("PHP_URL_SCHEME", PHP_URL_SCHEME, CONST_PERSISTENT);
	REGISTER_LONG_CONSTANT("PHP_URL_HOST", PHP_URL_HOST, CONST_PERSISTENT);
	REGISTER_LONG_CONSTANT("PHP_URL_PORT", PHP_URL_PORT, CONST_PERSISTENT);
	REGISTER_LONG_CONSTANT("PHP_URL_USER", PHP_URL_USER, CONST_PERSISTENT);
	REGISTER_LONG_CONSTANT("PHP_URL_PASS", PHP_URL_PASS, CONST_PERSISTENT);
	REGISTER_LONG_CONSTANT("PHP_URL_PATH", PHP_URL_PATH, CONST_PERSISTENT);
	REGISTER_LONG_CONSTANT("PHP_URL_QUERY", PHP_URL_QUERY, CONST_PERSISTENT);
	REGISTER_LONG_CONSTANT("PHP_URL_FRAGMENT", PHP_URL_FRAGMENT, CONST_PERSISTENT);
	REGISTER_LONG_CONSTANT("PHP_QUERY_RFC1738", PHP_QUERY_RFC1738, CONST_PERSISTENT);
	REGISTER_LONG_CONSTANT("PHP_QUERY_RFC3986", PHP_QUERY_RFC3986, CONST_PERSISTENT);
	REGISTER_DOUBLE_CONSTANT("M_E", M_E, CONST_PERSISTENT);
	ZEND_ASSERT(M_E == 2.718281828459045);
	REGISTER_DOUBLE_CONSTANT("M_LOG2E", M_LOG2E, CONST_PERSISTENT);
	ZEND_ASSERT(M_LOG2E == 1.4426950408889634);
	REGISTER_DOUBLE_CONSTANT("M_LOG10E", M_LOG10E, CONST_PERSISTENT);
	ZEND_ASSERT(M_LOG10E == 0.4342944819032518);
	REGISTER_DOUBLE_CONSTANT("M_LN2", M_LN2, CONST_PERSISTENT);
	ZEND_ASSERT(M_LN2 == 0.6931471805599453);
	REGISTER_DOUBLE_CONSTANT("M_LN10", M_LN10, CONST_PERSISTENT);
	ZEND_ASSERT(M_LN10 == 2.302585092994046);
	REGISTER_DOUBLE_CONSTANT("M_PI", M_PI, CONST_PERSISTENT);
	ZEND_ASSERT(M_PI == 3.141592653589793);
	REGISTER_DOUBLE_CONSTANT("M_PI_2", M_PI_2, CONST_PERSISTENT);
	ZEND_ASSERT(M_PI_2 == 1.5707963267948966);
	REGISTER_DOUBLE_CONSTANT("M_PI_4", M_PI_4, CONST_PERSISTENT);
	ZEND_ASSERT(M_PI_4 == 0.7853981633974483);
	REGISTER_DOUBLE_CONSTANT("M_1_PI", M_1_PI, CONST_PERSISTENT);
	ZEND_ASSERT(M_1_PI == 0.3183098861837907);
	REGISTER_DOUBLE_CONSTANT("M_2_PI", M_2_PI, CONST_PERSISTENT);
	ZEND_ASSERT(M_2_PI == 0.6366197723675814);
	REGISTER_DOUBLE_CONSTANT("M_SQRTPI", M_SQRTPI, CONST_PERSISTENT);
	ZEND_ASSERT(M_SQRTPI == 1.772453850905516);
	REGISTER_DOUBLE_CONSTANT("M_2_SQRTPI", M_2_SQRTPI, CONST_PERSISTENT);
	ZEND_ASSERT(M_2_SQRTPI == 1.1283791670955126);
	REGISTER_DOUBLE_CONSTANT("M_LNPI", M_LNPI, CONST_PERSISTENT);
	ZEND_ASSERT(M_LNPI == 1.1447298858494002);
	REGISTER_DOUBLE_CONSTANT("M_EULER", M_EULER, CONST_PERSISTENT);
	ZEND_ASSERT(M_EULER == 0.5772156649015329);
	REGISTER_DOUBLE_CONSTANT("M_SQRT2", M_SQRT2, CONST_PERSISTENT);
	ZEND_ASSERT(M_SQRT2 == 1.4142135623730951);
	REGISTER_DOUBLE_CONSTANT("M_SQRT1_2", M_SQRT1_2, CONST_PERSISTENT);
	ZEND_ASSERT(M_SQRT1_2 == 0.7071067811865476);
	REGISTER_DOUBLE_CONSTANT("M_SQRT3", M_SQRT3, CONST_PERSISTENT);
	ZEND_ASSERT(M_SQRT3 == 1.7320508075688772);
	REGISTER_DOUBLE_CONSTANT("INF", ZEND_INFINITY, CONST_PERSISTENT);
	REGISTER_DOUBLE_CONSTANT("NAN", ZEND_NAN, CONST_PERSISTENT);
	REGISTER_LONG_CONSTANT("PHP_ROUND_HALF_UP", PHP_ROUND_HALF_UP, CONST_PERSISTENT);
	REGISTER_LONG_CONSTANT("PHP_ROUND_HALF_DOWN", PHP_ROUND_HALF_DOWN, CONST_PERSISTENT);
	REGISTER_LONG_CONSTANT("PHP_ROUND_HALF_EVEN", PHP_ROUND_HALF_EVEN, CONST_PERSISTENT);
	REGISTER_LONG_CONSTANT("PHP_ROUND_HALF_ODD", PHP_ROUND_HALF_ODD, CONST_PERSISTENT);
	REGISTER_LONG_CONSTANT("CRYPT_SALT_LENGTH", PHP_MAX_SALT_LEN, CONST_PERSISTENT);
	REGISTER_LONG_CONSTANT("CRYPT_STD_DES", 1, CONST_PERSISTENT);
	REGISTER_LONG_CONSTANT("CRYPT_EXT_DES", 1, CONST_PERSISTENT);
	REGISTER_LONG_CONSTANT("CRYPT_MD5", 1, CONST_PERSISTENT);
	REGISTER_LONG_CONSTANT("CRYPT_BLOWFISH", 1, CONST_PERSISTENT);
	REGISTER_LONG_CONSTANT("CRYPT_SHA256", 1, CONST_PERSISTENT);
	REGISTER_LONG_CONSTANT("CRYPT_SHA512", 1, CONST_PERSISTENT);
#if (defined(PHP_WIN32) || (defined(HAVE_DNS_SEARCH_FUNC) && defined(HAVE_FULL_DNS_FUNCS)))
	REGISTER_LONG_CONSTANT("DNS_A", PHP_DNS_A, CONST_PERSISTENT);
	REGISTER_LONG_CONSTANT("DNS_NS", PHP_DNS_NS, CONST_PERSISTENT);
	REGISTER_LONG_CONSTANT("DNS_CNAME", PHP_DNS_CNAME, CONST_PERSISTENT);
	REGISTER_LONG_CONSTANT("DNS_SOA", PHP_DNS_SOA, CONST_PERSISTENT);
	REGISTER_LONG_CONSTANT("DNS_PTR", PHP_DNS_PTR, CONST_PERSISTENT);
	REGISTER_LONG_CONSTANT("DNS_HINFO", PHP_DNS_HINFO, CONST_PERSISTENT);
#endif
#if (defined(PHP_WIN32) || (defined(HAVE_DNS_SEARCH_FUNC) && defined(HAVE_FULL_DNS_FUNCS))) && (!defined(PHP_WIN32))
	REGISTER_LONG_CONSTANT("DNS_CAA", PHP_DNS_CAA, CONST_PERSISTENT);
#endif
#if (defined(PHP_WIN32) || (defined(HAVE_DNS_SEARCH_FUNC) && defined(HAVE_FULL_DNS_FUNCS)))
	REGISTER_LONG_CONSTANT("DNS_MX", PHP_DNS_MX, CONST_PERSISTENT);
	REGISTER_LONG_CONSTANT("DNS_TXT", PHP_DNS_TXT, CONST_PERSISTENT);
	REGISTER_LONG_CONSTANT("DNS_SRV", PHP_DNS_SRV, CONST_PERSISTENT);
	REGISTER_LONG_CONSTANT("DNS_NAPTR", PHP_DNS_NAPTR, CONST_PERSISTENT);
	REGISTER_LONG_CONSTANT("DNS_AAAA", PHP_DNS_AAAA, CONST_PERSISTENT);
	REGISTER_LONG_CONSTANT("DNS_A6", PHP_DNS_A6, CONST_PERSISTENT);
	REGISTER_LONG_CONSTANT("DNS_ANY", PHP_DNS_ANY, CONST_PERSISTENT);
	REGISTER_LONG_CONSTANT("DNS_ALL", PHP_DNS_ALL, CONST_PERSISTENT);
#endif
	REGISTER_LONG_CONSTANT("HTML_SPECIALCHARS", PHP_HTML_SPECIALCHARS, CONST_PERSISTENT);
	REGISTER_LONG_CONSTANT("HTML_ENTITIES", PHP_HTML_ENTITIES, CONST_PERSISTENT);
	REGISTER_LONG_CONSTANT("ENT_COMPAT", ENT_COMPAT, CONST_PERSISTENT);
	REGISTER_LONG_CONSTANT("ENT_QUOTES", ENT_QUOTES, CONST_PERSISTENT);
	REGISTER_LONG_CONSTANT("ENT_NOQUOTES", ENT_NOQUOTES, CONST_PERSISTENT);
	REGISTER_LONG_CONSTANT("ENT_IGNORE", ENT_IGNORE, CONST_PERSISTENT);
	REGISTER_LONG_CONSTANT("ENT_SUBSTITUTE", ENT_SUBSTITUTE, CONST_PERSISTENT);
	REGISTER_LONG_CONSTANT("ENT_DISALLOWED", ENT_DISALLOWED, CONST_PERSISTENT);
	REGISTER_LONG_CONSTANT("ENT_HTML401", ENT_HTML401, CONST_PERSISTENT);
	REGISTER_LONG_CONSTANT("ENT_XML1", ENT_XML1, CONST_PERSISTENT);
	REGISTER_LONG_CONSTANT("ENT_XHTML", ENT_XHTML, CONST_PERSISTENT);
	REGISTER_LONG_CONSTANT("ENT_HTML5", ENT_HTML5, CONST_PERSISTENT);
	REGISTER_LONG_CONSTANT("IMAGETYPE_GIF", IMAGE_FILETYPE_GIF, CONST_PERSISTENT);
	REGISTER_LONG_CONSTANT("IMAGETYPE_JPEG", IMAGE_FILETYPE_JPEG, CONST_PERSISTENT);
	REGISTER_LONG_CONSTANT("IMAGETYPE_PNG", IMAGE_FILETYPE_PNG, CONST_PERSISTENT);
	REGISTER_LONG_CONSTANT("IMAGETYPE_SWF", IMAGE_FILETYPE_SWF, CONST_PERSISTENT);
	REGISTER_LONG_CONSTANT("IMAGETYPE_PSD", IMAGE_FILETYPE_PSD, CONST_PERSISTENT);
	REGISTER_LONG_CONSTANT("IMAGETYPE_BMP", IMAGE_FILETYPE_BMP, CONST_PERSISTENT);
	REGISTER_LONG_CONSTANT("IMAGETYPE_TIFF_II", IMAGE_FILETYPE_TIFF_II, CONST_PERSISTENT);
	REGISTER_LONG_CONSTANT("IMAGETYPE_TIFF_MM", IMAGE_FILETYPE_TIFF_MM, CONST_PERSISTENT);
	REGISTER_LONG_CONSTANT("IMAGETYPE_JPC", IMAGE_FILETYPE_JPC, CONST_PERSISTENT);
	REGISTER_LONG_CONSTANT("IMAGETYPE_JP2", IMAGE_FILETYPE_JP2, CONST_PERSISTENT);
	REGISTER_LONG_CONSTANT("IMAGETYPE_JPX", IMAGE_FILETYPE_JPX, CONST_PERSISTENT);
	REGISTER_LONG_CONSTANT("IMAGETYPE_JB2", IMAGE_FILETYPE_JB2, CONST_PERSISTENT);
#if (defined(HAVE_ZLIB) && !defined(COMPILE_DL_ZLIB))
	REGISTER_LONG_CONSTANT("IMAGETYPE_SWC", IMAGE_FILETYPE_SWC, CONST_PERSISTENT);
#endif
	REGISTER_LONG_CONSTANT("IMAGETYPE_IFF", IMAGE_FILETYPE_IFF, CONST_PERSISTENT);
	REGISTER_LONG_CONSTANT("IMAGETYPE_WBMP", IMAGE_FILETYPE_WBMP, CONST_PERSISTENT);
	REGISTER_LONG_CONSTANT("IMAGETYPE_JPEG2000", IMAGE_FILETYPE_JPC, CONST_PERSISTENT);
	REGISTER_LONG_CONSTANT("IMAGETYPE_XBM", IMAGE_FILETYPE_XBM, CONST_PERSISTENT);
	REGISTER_LONG_CONSTANT("IMAGETYPE_ICO", IMAGE_FILETYPE_ICO, CONST_PERSISTENT);
	REGISTER_LONG_CONSTANT("IMAGETYPE_WEBP", IMAGE_FILETYPE_WEBP, CONST_PERSISTENT);
	REGISTER_LONG_CONSTANT("IMAGETYPE_AVIF", IMAGE_FILETYPE_AVIF, CONST_PERSISTENT);
	REGISTER_LONG_CONSTANT("IMAGETYPE_HEIF", IMAGE_FILETYPE_HEIF, CONST_PERSISTENT);
	REGISTER_LONG_CONSTANT("IMAGETYPE_UNKNOWN", IMAGE_FILETYPE_UNKNOWN, CONST_PERSISTENT);
	REGISTER_LONG_CONSTANT("IMAGETYPE_COUNT", IMAGE_FILETYPE_FIXED_COUNT, CONST_PERSISTENT);
	REGISTER_LONG_CONSTANT("INFO_GENERAL", PHP_INFO_GENERAL, CONST_PERSISTENT);
	REGISTER_LONG_CONSTANT("INFO_CREDITS", PHP_INFO_CREDITS, CONST_PERSISTENT);
	REGISTER_LONG_CONSTANT("INFO_CONFIGURATION", PHP_INFO_CONFIGURATION, CONST_PERSISTENT);
	REGISTER_LONG_CONSTANT("INFO_MODULES", PHP_INFO_MODULES, CONST_PERSISTENT);
	REGISTER_LONG_CONSTANT("INFO_ENVIRONMENT", PHP_INFO_ENVIRONMENT, CONST_PERSISTENT);
	REGISTER_LONG_CONSTANT("INFO_VARIABLES", PHP_INFO_VARIABLES, CONST_PERSISTENT);
	REGISTER_LONG_CONSTANT("INFO_LICENSE", PHP_INFO_LICENSE, CONST_PERSISTENT);
	REGISTER_LONG_CONSTANT("INFO_ALL", PHP_INFO_ALL, CONST_PERSISTENT);
	REGISTER_LONG_CONSTANT("CREDITS_GROUP", PHP_CREDITS_GROUP, CONST_PERSISTENT);
	REGISTER_LONG_CONSTANT("CREDITS_GENERAL", PHP_CREDITS_GENERAL, CONST_PERSISTENT);
	REGISTER_LONG_CONSTANT("CREDITS_SAPI", PHP_CREDITS_SAPI, CONST_PERSISTENT);
	REGISTER_LONG_CONSTANT("CREDITS_MODULES", PHP_CREDITS_MODULES, CONST_PERSISTENT);
	REGISTER_LONG_CONSTANT("CREDITS_DOCS", PHP_CREDITS_DOCS, CONST_PERSISTENT);
	REGISTER_LONG_CONSTANT("CREDITS_FULLPAGE", PHP_CREDITS_FULLPAGE, CONST_PERSISTENT);
	REGISTER_LONG_CONSTANT("CREDITS_QA", PHP_CREDITS_QA, CONST_PERSISTENT);
	REGISTER_LONG_CONSTANT("CREDITS_ALL", PHP_CREDITS_ALL, CONST_PERSISTENT);
	REGISTER_LONG_CONSTANT("LOG_EMERG", LOG_EMERG, CONST_PERSISTENT);
	REGISTER_LONG_CONSTANT("LOG_ALERT", LOG_ALERT, CONST_PERSISTENT);
	REGISTER_LONG_CONSTANT("LOG_CRIT", LOG_CRIT, CONST_PERSISTENT);
	REGISTER_LONG_CONSTANT("LOG_ERR", LOG_ERR, CONST_PERSISTENT);
	REGISTER_LONG_CONSTANT("LOG_WARNING", LOG_WARNING, CONST_PERSISTENT);
	REGISTER_LONG_CONSTANT("LOG_NOTICE", LOG_NOTICE, CONST_PERSISTENT);
	REGISTER_LONG_CONSTANT("LOG_INFO", LOG_INFO, CONST_PERSISTENT);
	REGISTER_LONG_CONSTANT("LOG_DEBUG", LOG_DEBUG, CONST_PERSISTENT);
	REGISTER_LONG_CONSTANT("LOG_KERN", LOG_KERN, CONST_PERSISTENT);
	REGISTER_LONG_CONSTANT("LOG_USER", LOG_USER, CONST_PERSISTENT);
	REGISTER_LONG_CONSTANT("LOG_MAIL", LOG_MAIL, CONST_PERSISTENT);
	REGISTER_LONG_CONSTANT("LOG_DAEMON", LOG_DAEMON, CONST_PERSISTENT);
	REGISTER_LONG_CONSTANT("LOG_AUTH", LOG_AUTH, CONST_PERSISTENT);
	REGISTER_LONG_CONSTANT("LOG_SYSLOG", LOG_SYSLOG, CONST_PERSISTENT);
	REGISTER_LONG_CONSTANT("LOG_LPR", LOG_LPR, CONST_PERSISTENT);
#if defined(LOG_NEWS)
	REGISTER_LONG_CONSTANT("LOG_NEWS", LOG_NEWS, CONST_PERSISTENT);
#endif
#if defined(LOG_UUCP)
	REGISTER_LONG_CONSTANT("LOG_UUCP", LOG_UUCP, CONST_PERSISTENT);
#endif
#if defined(LOG_CRON)
	REGISTER_LONG_CONSTANT("LOG_CRON", LOG_CRON, CONST_PERSISTENT);
#endif
#if defined(LOG_AUTHPRIV)
	REGISTER_LONG_CONSTANT("LOG_AUTHPRIV", LOG_AUTHPRIV, CONST_PERSISTENT);
#endif
#if !defined(PHP_WIN32)
	REGISTER_LONG_CONSTANT("LOG_LOCAL0", LOG_LOCAL0, CONST_PERSISTENT);
	REGISTER_LONG_CONSTANT("LOG_LOCAL1", LOG_LOCAL1, CONST_PERSISTENT);
	REGISTER_LONG_CONSTANT("LOG_LOCAL2", LOG_LOCAL2, CONST_PERSISTENT);
	REGISTER_LONG_CONSTANT("LOG_LOCAL3", LOG_LOCAL3, CONST_PERSISTENT);
	REGISTER_LONG_CONSTANT("LOG_LOCAL4", LOG_LOCAL4, CONST_PERSISTENT);
	REGISTER_LONG_CONSTANT("LOG_LOCAL5", LOG_LOCAL5, CONST_PERSISTENT);
	REGISTER_LONG_CONSTANT("LOG_LOCAL6", LOG_LOCAL6, CONST_PERSISTENT);
	REGISTER_LONG_CONSTANT("LOG_LOCAL7", LOG_LOCAL7, CONST_PERSISTENT);
#endif
	REGISTER_LONG_CONSTANT("LOG_PID", LOG_PID, CONST_PERSISTENT);
	REGISTER_LONG_CONSTANT("LOG_CONS", LOG_CONS, CONST_PERSISTENT);
	REGISTER_LONG_CONSTANT("LOG_ODELAY", LOG_ODELAY, CONST_PERSISTENT);
	REGISTER_LONG_CONSTANT("LOG_NDELAY", LOG_NDELAY, CONST_PERSISTENT);
#if defined(LOG_NOWAIT)
	REGISTER_LONG_CONSTANT("LOG_NOWAIT", LOG_NOWAIT, CONST_PERSISTENT);
#endif
#if defined(LOG_PERROR)
	REGISTER_LONG_CONSTANT("LOG_PERROR", LOG_PERROR, CONST_PERSISTENT);
#endif
	REGISTER_LONG_CONSTANT("STR_PAD_LEFT", PHP_STR_PAD_LEFT, CONST_PERSISTENT);
	REGISTER_LONG_CONSTANT("STR_PAD_RIGHT", PHP_STR_PAD_RIGHT, CONST_PERSISTENT);
	REGISTER_LONG_CONSTANT("STR_PAD_BOTH", PHP_STR_PAD_BOTH, CONST_PERSISTENT);
	REGISTER_LONG_CONSTANT("PATHINFO_DIRNAME", PHP_PATHINFO_DIRNAME, CONST_PERSISTENT);
	REGISTER_LONG_CONSTANT("PATHINFO_BASENAME", PHP_PATHINFO_BASENAME, CONST_PERSISTENT);
	REGISTER_LONG_CONSTANT("PATHINFO_EXTENSION", PHP_PATHINFO_EXTENSION, CONST_PERSISTENT);
	REGISTER_LONG_CONSTANT("PATHINFO_FILENAME", PHP_PATHINFO_FILENAME, CONST_PERSISTENT);
	REGISTER_LONG_CONSTANT("PATHINFO_ALL", PHP_PATHINFO_ALL, CONST_PERSISTENT);
	REGISTER_LONG_CONSTANT("CHAR_MAX", CHAR_MAX, CONST_PERSISTENT);
	REGISTER_LONG_CONSTANT("LC_CTYPE", LC_CTYPE, CONST_PERSISTENT);
	REGISTER_LONG_CONSTANT("LC_NUMERIC", LC_NUMERIC, CONST_PERSISTENT);
	REGISTER_LONG_CONSTANT("LC_TIME", LC_TIME, CONST_PERSISTENT);
	REGISTER_LONG_CONSTANT("LC_COLLATE", LC_COLLATE, CONST_PERSISTENT);
	REGISTER_LONG_CONSTANT("LC_MONETARY", LC_MONETARY, CONST_PERSISTENT);
	REGISTER_LONG_CONSTANT("LC_ALL", LC_ALL, CONST_PERSISTENT);
#if defined(LC_MESSAGES)
	REGISTER_LONG_CONSTANT("LC_MESSAGES", LC_MESSAGES, CONST_PERSISTENT);
#endif
#if defined(HAVE_NL_LANGINFO) && defined(ABDAY_1)
	REGISTER_LONG_CONSTANT("ABDAY_1", ABDAY_1, CONST_PERSISTENT);
	REGISTER_LONG_CONSTANT("ABDAY_2", ABDAY_2, CONST_PERSISTENT);
	REGISTER_LONG_CONSTANT("ABDAY_3", ABDAY_3, CONST_PERSISTENT);
	REGISTER_LONG_CONSTANT("ABDAY_4", ABDAY_4, CONST_PERSISTENT);
	REGISTER_LONG_CONSTANT("ABDAY_5", ABDAY_5, CONST_PERSISTENT);
	REGISTER_LONG_CONSTANT("ABDAY_6", ABDAY_6, CONST_PERSISTENT);
	REGISTER_LONG_CONSTANT("ABDAY_7", ABDAY_7, CONST_PERSISTENT);
#endif
#if defined(HAVE_NL_LANGINFO) && defined(DAY_1)
	REGISTER_LONG_CONSTANT("DAY_1", DAY_1, CONST_PERSISTENT);
	REGISTER_LONG_CONSTANT("DAY_2", DAY_2, CONST_PERSISTENT);
	REGISTER_LONG_CONSTANT("DAY_3", DAY_3, CONST_PERSISTENT);
	REGISTER_LONG_CONSTANT("DAY_4", DAY_4, CONST_PERSISTENT);
	REGISTER_LONG_CONSTANT("DAY_5", DAY_5, CONST_PERSISTENT);
	REGISTER_LONG_CONSTANT("DAY_6", DAY_6, CONST_PERSISTENT);
	REGISTER_LONG_CONSTANT("DAY_7", DAY_7, CONST_PERSISTENT);
#endif
#if defined(HAVE_NL_LANGINFO) && defined(ABMON_1)
	REGISTER_LONG_CONSTANT("ABMON_1", ABMON_1, CONST_PERSISTENT);
	REGISTER_LONG_CONSTANT("ABMON_2", ABMON_2, CONST_PERSISTENT);
	REGISTER_LONG_CONSTANT("ABMON_3", ABMON_3, CONST_PERSISTENT);
	REGISTER_LONG_CONSTANT("ABMON_4", ABMON_4, CONST_PERSISTENT);
	REGISTER_LONG_CONSTANT("ABMON_5", ABMON_5, CONST_PERSISTENT);
	REGISTER_LONG_CONSTANT("ABMON_6", ABMON_6, CONST_PERSISTENT);
	REGISTER_LONG_CONSTANT("ABMON_7", ABMON_7, CONST_PERSISTENT);
	REGISTER_LONG_CONSTANT("ABMON_8", ABMON_8, CONST_PERSISTENT);
	REGISTER_LONG_CONSTANT("ABMON_9", ABMON_9, CONST_PERSISTENT);
	REGISTER_LONG_CONSTANT("ABMON_10", ABMON_10, CONST_PERSISTENT);
	REGISTER_LONG_CONSTANT("ABMON_11", ABMON_11, CONST_PERSISTENT);
	REGISTER_LONG_CONSTANT("ABMON_12", ABMON_12, CONST_PERSISTENT);
#endif
#if defined(HAVE_NL_LANGINFO) && defined(MON_1)
	REGISTER_LONG_CONSTANT("MON_1", MON_1, CONST_PERSISTENT);
	REGISTER_LONG_CONSTANT("MON_2", MON_2, CONST_PERSISTENT);
	REGISTER_LONG_CONSTANT("MON_3", MON_3, CONST_PERSISTENT);
	REGISTER_LONG_CONSTANT("MON_4", MON_4, CONST_PERSISTENT);
	REGISTER_LONG_CONSTANT("MON_5", MON_5, CONST_PERSISTENT);
	REGISTER_LONG_CONSTANT("MON_6", MON_6, CONST_PERSISTENT);
	REGISTER_LONG_CONSTANT("MON_7", MON_7, CONST_PERSISTENT);
	REGISTER_LONG_CONSTANT("MON_8", MON_8, CONST_PERSISTENT);
	REGISTER_LONG_CONSTANT("MON_9", MON_9, CONST_PERSISTENT);
	REGISTER_LONG_CONSTANT("MON_10", MON_10, CONST_PERSISTENT);
	REGISTER_LONG_CONSTANT("MON_11", MON_11, CONST_PERSISTENT);
	REGISTER_LONG_CONSTANT("MON_12", MON_12, CONST_PERSISTENT);
#endif
#if defined(HAVE_NL_LANGINFO) && defined(AM_STR)
	REGISTER_LONG_CONSTANT("AM_STR", AM_STR, CONST_PERSISTENT);
#endif
#if defined(HAVE_NL_LANGINFO) && defined(PM_STR)
	REGISTER_LONG_CONSTANT("PM_STR", PM_STR, CONST_PERSISTENT);
#endif
#if defined(HAVE_NL_LANGINFO) && defined(D_T_FMT)
	REGISTER_LONG_CONSTANT("D_T_FMT", D_T_FMT, CONST_PERSISTENT);
#endif
#if defined(HAVE_NL_LANGINFO) && defined(D_FMT)
	REGISTER_LONG_CONSTANT("D_FMT", D_FMT, CONST_PERSISTENT);
#endif
#if defined(HAVE_NL_LANGINFO) && defined(T_FMT)
	REGISTER_LONG_CONSTANT("T_FMT", T_FMT, CONST_PERSISTENT);
#endif
#if defined(HAVE_NL_LANGINFO) && defined(T_FMT_AMPM)
	REGISTER_LONG_CONSTANT("T_FMT_AMPM", T_FMT_AMPM, CONST_PERSISTENT);
#endif
#if defined(HAVE_NL_LANGINFO) && defined(ERA)
	REGISTER_LONG_CONSTANT("ERA", ERA, CONST_PERSISTENT);
#endif
#if defined(HAVE_NL_LANGINFO) && defined(ERA_YEAR)
	REGISTER_LONG_CONSTANT("ERA_YEAR", ERA_YEAR, CONST_PERSISTENT);
#endif
#if defined(HAVE_NL_LANGINFO) && defined(ERA_D_T_FMT)
	REGISTER_LONG_CONSTANT("ERA_D_T_FMT", ERA_D_T_FMT, CONST_PERSISTENT);
#endif
#if defined(HAVE_NL_LANGINFO) && defined(ERA_D_FMT)
	REGISTER_LONG_CONSTANT("ERA_D_FMT", ERA_D_FMT, CONST_PERSISTENT);
#endif
#if defined(HAVE_NL_LANGINFO) && defined(ERA_T_FMT)
	REGISTER_LONG_CONSTANT("ERA_T_FMT", ERA_T_FMT, CONST_PERSISTENT);
#endif
#if defined(HAVE_NL_LANGINFO) && defined(ALT_DIGITS)
	REGISTER_LONG_CONSTANT("ALT_DIGITS", ALT_DIGITS, CONST_PERSISTENT);
#endif
#if defined(HAVE_NL_LANGINFO) && defined(INT_CURR_SYMBOL)
	REGISTER_LONG_CONSTANT("INT_CURR_SYMBOL", INT_CURR_SYMBOL, CONST_PERSISTENT);
#endif
#if defined(HAVE_NL_LANGINFO) && defined(CURRENCY_SYMBOL)
	REGISTER_LONG_CONSTANT("CURRENCY_SYMBOL", CURRENCY_SYMBOL, CONST_PERSISTENT);
#endif
#if defined(HAVE_NL_LANGINFO) && defined(CRNCYSTR)
	REGISTER_LONG_CONSTANT("CRNCYSTR", CRNCYSTR, CONST_PERSISTENT);
#endif
#if defined(HAVE_NL_LANGINFO) && defined(MON_DECIMAL_POINT)
	REGISTER_LONG_CONSTANT("MON_DECIMAL_POINT", MON_DECIMAL_POINT, CONST_PERSISTENT);
#endif
#if defined(HAVE_NL_LANGINFO) && defined(MON_THOUSANDS_SEP)
	REGISTER_LONG_CONSTANT("MON_THOUSANDS_SEP", MON_THOUSANDS_SEP, CONST_PERSISTENT);
#endif
#if defined(HAVE_NL_LANGINFO) && defined(MON_GROUPING)
	REGISTER_LONG_CONSTANT("MON_GROUPING", MON_GROUPING, CONST_PERSISTENT);
#endif
#if defined(HAVE_NL_LANGINFO) && defined(POSITIVE_SIGN)
	REGISTER_LONG_CONSTANT("POSITIVE_SIGN", POSITIVE_SIGN, CONST_PERSISTENT);
#endif
#if defined(HAVE_NL_LANGINFO) && defined(NEGATIVE_SIGN)
	REGISTER_LONG_CONSTANT("NEGATIVE_SIGN", NEGATIVE_SIGN, CONST_PERSISTENT);
#endif
#if defined(HAVE_NL_LANGINFO) && defined(INT_FRAC_DIGITS)
	REGISTER_LONG_CONSTANT("INT_FRAC_DIGITS", INT_FRAC_DIGITS, CONST_PERSISTENT);
#endif
#if defined(HAVE_NL_LANGINFO) && defined(FRAC_DIGITS)
	REGISTER_LONG_CONSTANT("FRAC_DIGITS", FRAC_DIGITS, CONST_PERSISTENT);
#endif
#if defined(HAVE_NL_LANGINFO) && defined(P_CS_PRECEDES)
	REGISTER_LONG_CONSTANT("P_CS_PRECEDES", P_CS_PRECEDES, CONST_PERSISTENT);
#endif
#if defined(HAVE_NL_LANGINFO) && defined(P_SEP_BY_SPACE)
	REGISTER_LONG_CONSTANT("P_SEP_BY_SPACE", P_SEP_BY_SPACE, CONST_PERSISTENT);
#endif
#if defined(HAVE_NL_LANGINFO) && defined(N_CS_PRECEDES)
	REGISTER_LONG_CONSTANT("N_CS_PRECEDES", N_CS_PRECEDES, CONST_PERSISTENT);
#endif
#if defined(HAVE_NL_LANGINFO) && defined(N_SEP_BY_SPACE)
	REGISTER_LONG_CONSTANT("N_SEP_BY_SPACE", N_SEP_BY_SPACE, CONST_PERSISTENT);
#endif
#if defined(HAVE_NL_LANGINFO) && defined(P_SIGN_POSN)
	REGISTER_LONG_CONSTANT("P_SIGN_POSN", P_SIGN_POSN, CONST_PERSISTENT);
#endif
#if defined(HAVE_NL_LANGINFO) && defined(N_SIGN_POSN)
	REGISTER_LONG_CONSTANT("N_SIGN_POSN", N_SIGN_POSN, CONST_PERSISTENT);
#endif
#if defined(HAVE_NL_LANGINFO) && defined(DECIMAL_POINT)
	REGISTER_LONG_CONSTANT("DECIMAL_POINT", DECIMAL_POINT, CONST_PERSISTENT);
#endif
#if defined(HAVE_NL_LANGINFO) && defined(RADIXCHAR)
	REGISTER_LONG_CONSTANT("RADIXCHAR", RADIXCHAR, CONST_PERSISTENT);
#endif
#if defined(HAVE_NL_LANGINFO) && defined(THOUSANDS_SEP)
	REGISTER_LONG_CONSTANT("THOUSANDS_SEP", THOUSANDS_SEP, CONST_PERSISTENT);
#endif
#if defined(HAVE_NL_LANGINFO) && defined(THOUSEP)
	REGISTER_LONG_CONSTANT("THOUSEP", THOUSEP, CONST_PERSISTENT);
#endif
#if defined(HAVE_NL_LANGINFO) && defined(GROUPING)
	REGISTER_LONG_CONSTANT("GROUPING", GROUPING, CONST_PERSISTENT);
#endif
#if defined(HAVE_NL_LANGINFO) && defined(YESEXPR)
	REGISTER_LONG_CONSTANT("YESEXPR", YESEXPR, CONST_PERSISTENT);
#endif
#if defined(HAVE_NL_LANGINFO) && defined(NOEXPR)
	REGISTER_LONG_CONSTANT("NOEXPR", NOEXPR, CONST_PERSISTENT);
#endif
#if defined(HAVE_NL_LANGINFO) && defined(YESSTR)
	REGISTER_LONG_CONSTANT("YESSTR", YESSTR, CONST_PERSISTENT);
#endif
#if defined(HAVE_NL_LANGINFO) && defined(NOSTR)
	REGISTER_LONG_CONSTANT("NOSTR", NOSTR, CONST_PERSISTENT);
#endif
#if defined(HAVE_NL_LANGINFO) && defined(CODESET)
	REGISTER_LONG_CONSTANT("CODESET", CODESET, CONST_PERSISTENT);
#endif


	zend_add_parameter_attribute(zend_hash_str_find_ptr(CG(function_table), "crypt", sizeof("crypt") - 1), 0, ZSTR_KNOWN(ZEND_STR_SENSITIVEPARAMETER), 0);
#if defined(HAVE_STRPTIME)

	zend_attribute *attribute_Deprecated_func_strptime_0 = zend_add_function_attribute(zend_hash_str_find_ptr(CG(function_table), "strptime", sizeof("strptime") - 1), ZSTR_KNOWN(ZEND_STR_DEPRECATED_CAPITALIZED), 2);
	ZVAL_STR(&attribute_Deprecated_func_strptime_0->args[0].value, ZSTR_KNOWN(ZEND_STR_8_DOT_2));
	attribute_Deprecated_func_strptime_0->args[0].name = ZSTR_KNOWN(ZEND_STR_SINCE);
	zend_string *attribute_Deprecated_func_strptime_0_arg1_str = zend_string_init("use date_parse_from_format() (for locale-independent parsing), or IntlDateFormatter::parse() (for locale-dependent parsing) instead", strlen("use date_parse_from_format() (for locale-independent parsing), or IntlDateFormatter::parse() (for locale-dependent parsing) instead"), 1);
	ZVAL_STR(&attribute_Deprecated_func_strptime_0->args[1].value, attribute_Deprecated_func_strptime_0_arg1_str);
	attribute_Deprecated_func_strptime_0->args[1].name = ZSTR_KNOWN(ZEND_STR_MESSAGE);
#endif

	zend_attribute *attribute_Deprecated_func_assert_options_0 = zend_add_function_attribute(zend_hash_str_find_ptr(CG(function_table), "assert_options", sizeof("assert_options") - 1), ZSTR_KNOWN(ZEND_STR_DEPRECATED_CAPITALIZED), 1);
	ZVAL_STR(&attribute_Deprecated_func_assert_options_0->args[0].value, ZSTR_KNOWN(ZEND_STR_8_DOT_3));
	attribute_Deprecated_func_assert_options_0->args[0].name = ZSTR_KNOWN(ZEND_STR_SINCE);

	zend_attribute *attribute_Deprecated_func_utf8_encode_0 = zend_add_function_attribute(zend_hash_str_find_ptr(CG(function_table), "utf8_encode", sizeof("utf8_encode") - 1), ZSTR_KNOWN(ZEND_STR_DEPRECATED_CAPITALIZED), 2);
	ZVAL_STR(&attribute_Deprecated_func_utf8_encode_0->args[0].value, ZSTR_KNOWN(ZEND_STR_8_DOT_2));
	attribute_Deprecated_func_utf8_encode_0->args[0].name = ZSTR_KNOWN(ZEND_STR_SINCE);
	zend_string *attribute_Deprecated_func_utf8_encode_0_arg1_str = zend_string_init("visit the php.net documentation for various alternatives", strlen("visit the php.net documentation for various alternatives"), 1);
	ZVAL_STR(&attribute_Deprecated_func_utf8_encode_0->args[1].value, attribute_Deprecated_func_utf8_encode_0_arg1_str);
	attribute_Deprecated_func_utf8_encode_0->args[1].name = ZSTR_KNOWN(ZEND_STR_MESSAGE);

	zend_attribute *attribute_Deprecated_func_utf8_decode_0 = zend_add_function_attribute(zend_hash_str_find_ptr(CG(function_table), "utf8_decode", sizeof("utf8_decode") - 1), ZSTR_KNOWN(ZEND_STR_DEPRECATED_CAPITALIZED), 2);
	ZVAL_STR(&attribute_Deprecated_func_utf8_decode_0->args[0].value, ZSTR_KNOWN(ZEND_STR_8_DOT_2));
	attribute_Deprecated_func_utf8_decode_0->args[0].name = ZSTR_KNOWN(ZEND_STR_SINCE);
	ZVAL_STR_COPY(&attribute_Deprecated_func_utf8_decode_0->args[1].value, attribute_Deprecated_func_utf8_encode_0_arg1_str);
	attribute_Deprecated_func_utf8_decode_0->args[1].name = ZSTR_KNOWN(ZEND_STR_MESSAGE);

	zend_add_parameter_attribute(zend_hash_str_find_ptr(CG(function_table), "password_hash", sizeof("password_hash") - 1), 0, ZSTR_KNOWN(ZEND_STR_SENSITIVEPARAMETER), 0);

	zend_add_parameter_attribute(zend_hash_str_find_ptr(CG(function_table), "password_verify", sizeof("password_verify") - 1), 0, ZSTR_KNOWN(ZEND_STR_SENSITIVEPARAMETER), 0);
#if (defined(HAVE_SYS_TIME_H) || defined(PHP_WIN32))

	zend_attribute *attribute_Deprecated_func_socket_set_timeout_0 = zend_add_function_attribute(zend_hash_str_find_ptr(CG(function_table), "socket_set_timeout", sizeof("socket_set_timeout") - 1), ZSTR_KNOWN(ZEND_STR_DEPRECATED_CAPITALIZED), 2);
	ZVAL_STR(&attribute_Deprecated_func_socket_set_timeout_0->args[0].value, ZSTR_KNOWN(ZEND_STR_8_DOT_5));
	attribute_Deprecated_func_socket_set_timeout_0->args[0].name = ZSTR_KNOWN(ZEND_STR_SINCE);
	zend_string *attribute_Deprecated_func_socket_set_timeout_0_arg1_str = zend_string_init("use stream_set_timeout() instead", strlen("use stream_set_timeout() instead"), 1);
	ZVAL_STR(&attribute_Deprecated_func_socket_set_timeout_0->args[1].value, attribute_Deprecated_func_socket_set_timeout_0_arg1_str);
	attribute_Deprecated_func_socket_set_timeout_0->args[1].name = ZSTR_KNOWN(ZEND_STR_MESSAGE);
#endif

	zend_attribute *attribute_Deprecated_const_ASSERT_ACTIVE_0 = zend_add_global_constant_attribute(const_ASSERT_ACTIVE, ZSTR_KNOWN(ZEND_STR_DEPRECATED_CAPITALIZED), 2);
	ZVAL_STR(&attribute_Deprecated_const_ASSERT_ACTIVE_0->args[0].value, ZSTR_KNOWN(ZEND_STR_8_DOT_3));
	attribute_Deprecated_const_ASSERT_ACTIVE_0->args[0].name = ZSTR_KNOWN(ZEND_STR_SINCE);
	zend_string *attribute_Deprecated_const_ASSERT_ACTIVE_0_arg1_str = zend_string_init("as assert_options() is deprecated", strlen("as assert_options() is deprecated"), 1);
	ZVAL_STR(&attribute_Deprecated_const_ASSERT_ACTIVE_0->args[1].value, attribute_Deprecated_const_ASSERT_ACTIVE_0_arg1_str);
	attribute_Deprecated_const_ASSERT_ACTIVE_0->args[1].name = ZSTR_KNOWN(ZEND_STR_MESSAGE);

	zend_attribute *attribute_Deprecated_const_ASSERT_CALLBACK_0 = zend_add_global_constant_attribute(const_ASSERT_CALLBACK, ZSTR_KNOWN(ZEND_STR_DEPRECATED_CAPITALIZED), 2);
	ZVAL_STR(&attribute_Deprecated_const_ASSERT_CALLBACK_0->args[0].value, ZSTR_KNOWN(ZEND_STR_8_DOT_3));
	attribute_Deprecated_const_ASSERT_CALLBACK_0->args[0].name = ZSTR_KNOWN(ZEND_STR_SINCE);
	ZVAL_STR_COPY(&attribute_Deprecated_const_ASSERT_CALLBACK_0->args[1].value, attribute_Deprecated_const_ASSERT_ACTIVE_0_arg1_str);
	attribute_Deprecated_const_ASSERT_CALLBACK_0->args[1].name = ZSTR_KNOWN(ZEND_STR_MESSAGE);

	zend_attribute *attribute_Deprecated_const_ASSERT_BAIL_0 = zend_add_global_constant_attribute(const_ASSERT_BAIL, ZSTR_KNOWN(ZEND_STR_DEPRECATED_CAPITALIZED), 2);
	ZVAL_STR(&attribute_Deprecated_const_ASSERT_BAIL_0->args[0].value, ZSTR_KNOWN(ZEND_STR_8_DOT_3));
	attribute_Deprecated_const_ASSERT_BAIL_0->args[0].name = ZSTR_KNOWN(ZEND_STR_SINCE);
	ZVAL_STR_COPY(&attribute_Deprecated_const_ASSERT_BAIL_0->args[1].value, attribute_Deprecated_const_ASSERT_ACTIVE_0_arg1_str);
	attribute_Deprecated_const_ASSERT_BAIL_0->args[1].name = ZSTR_KNOWN(ZEND_STR_MESSAGE);

	zend_attribute *attribute_Deprecated_const_ASSERT_WARNING_0 = zend_add_global_constant_attribute(const_ASSERT_WARNING, ZSTR_KNOWN(ZEND_STR_DEPRECATED_CAPITALIZED), 2);
	ZVAL_STR(&attribute_Deprecated_const_ASSERT_WARNING_0->args[0].value, ZSTR_KNOWN(ZEND_STR_8_DOT_3));
	attribute_Deprecated_const_ASSERT_WARNING_0->args[0].name = ZSTR_KNOWN(ZEND_STR_SINCE);
	ZVAL_STR_COPY(&attribute_Deprecated_const_ASSERT_WARNING_0->args[1].value, attribute_Deprecated_const_ASSERT_ACTIVE_0_arg1_str);
	attribute_Deprecated_const_ASSERT_WARNING_0->args[1].name = ZSTR_KNOWN(ZEND_STR_MESSAGE);

	zend_attribute *attribute_Deprecated_const_ASSERT_EXCEPTION_0 = zend_add_global_constant_attribute(const_ASSERT_EXCEPTION, ZSTR_KNOWN(ZEND_STR_DEPRECATED_CAPITALIZED), 2);
	ZVAL_STR(&attribute_Deprecated_const_ASSERT_EXCEPTION_0->args[0].value, ZSTR_KNOWN(ZEND_STR_8_DOT_3));
	attribute_Deprecated_const_ASSERT_EXCEPTION_0->args[0].name = ZSTR_KNOWN(ZEND_STR_SINCE);
	ZVAL_STR_COPY(&attribute_Deprecated_const_ASSERT_EXCEPTION_0->args[1].value, attribute_Deprecated_const_ASSERT_ACTIVE_0_arg1_str);
	attribute_Deprecated_const_ASSERT_EXCEPTION_0->args[1].name = ZSTR_KNOWN(ZEND_STR_MESSAGE);
}

static zend_class_entry *register_class___PHP_Incomplete_Class(void)
{
	zend_class_entry ce, *class_entry;

	INIT_CLASS_ENTRY(ce, "__PHP_Incomplete_Class", NULL);
	class_entry = zend_register_internal_class_with_flags(&ce, NULL, ZEND_ACC_FINAL|ZEND_ACC_ALLOW_DYNAMIC_PROPERTIES);

	zend_string *attribute_name_AllowDynamicProperties_class___PHP_Incomplete_Class_0 = zend_string_init_interned("AllowDynamicProperties", sizeof("AllowDynamicProperties") - 1, 1);
	zend_add_class_attribute(class_entry, attribute_name_AllowDynamicProperties_class___PHP_Incomplete_Class_0, 0);
	zend_string_release(attribute_name_AllowDynamicProperties_class___PHP_Incomplete_Class_0);

	return class_entry;
}

static zend_class_entry *register_class_AssertionError(zend_class_entry *class_entry_Error)
{
	zend_class_entry ce, *class_entry;

	INIT_CLASS_ENTRY(ce, "AssertionError", NULL);
	class_entry = zend_register_internal_class_with_flags(&ce, class_entry_Error, 0);

	return class_entry;
}

static zend_class_entry *register_class_RoundingMode(void)
{
	zend_class_entry *class_entry = zend_register_internal_enum("RoundingMode", IS_UNDEF, NULL);

	zend_enum_add_case_cstr(class_entry, "HalfAwayFromZero", NULL);

	zend_enum_add_case_cstr(class_entry, "HalfTowardsZero", NULL);

	zend_enum_add_case_cstr(class_entry, "HalfEven", NULL);

	zend_enum_add_case_cstr(class_entry, "HalfOdd", NULL);

	zend_enum_add_case_cstr(class_entry, "TowardsZero", NULL);

	zend_enum_add_case_cstr(class_entry, "AwayFromZero", NULL);

	zend_enum_add_case_cstr(class_entry, "NegativeInfinity", NULL);

	zend_enum_add_case_cstr(class_entry, "PositiveInfinity", NULL);

	return class_entry;
}
ext/standard/php_net.h000064400000002213151730542530010755 0ustar00/*
   +----------------------------------------------------------------------+
   | Copyright (c) The PHP Group                                          |
   +----------------------------------------------------------------------+
   | This source file is subject to version 3.01 of the PHP license,      |
   | that is bundled with this package in the file LICENSE, and is        |
   | available through the world-wide-web at the following url:           |
   | https://www.php.net/license/3_01.txt                                 |
   | If you did not receive a copy of the PHP license and are unable to   |
   | obtain it through the world-wide-web, please send a note to          |
   | license@php.net so we can mail you a copy immediately.               |
   +----------------------------------------------------------------------+
   | Authors: Sara Golemon <pollita@php.net>                              |
   +----------------------------------------------------------------------+
*/

#ifndef PHP_NET_H
#define PHP_NET_H

#include "php.h"
#include "php_network.h"

PHPAPI zend_string* php_inet_ntop(const struct sockaddr *addr);

#endif /* PHP_NET_H */
ext/standard/basic_functions.h000064400000010752151730542530012500 0ustar00/*
   +----------------------------------------------------------------------+
   | Copyright (c) The PHP Group                                          |
   +----------------------------------------------------------------------+
   | This source file is subject to version 3.01 of the PHP license,      |
   | that is bundled with this package in the file LICENSE, and is        |
   | available through the world-wide-web at the following url:           |
   | https://www.php.net/license/3_01.txt                                 |
   | If you did not receive a copy of the PHP license and are unable to   |
   | obtain it through the world-wide-web, please send a note to          |
   | license@php.net so we can mail you a copy immediately.               |
   +----------------------------------------------------------------------+
   | Authors: Andi Gutmans <andi@php.net>                                 |
   |          Zeev Suraski <zeev@php.net>                                 |
   +----------------------------------------------------------------------+
*/

#ifndef BASIC_FUNCTIONS_H
#define BASIC_FUNCTIONS_H

#include <sys/stat.h>
#include <wchar.h>

#include "php_filestat.h"

#include "zend_highlight.h"

#include "url_scanner_ex.h"

#if defined(_WIN32) && !defined(__clang__)
#include <intrin.h>
#endif

extern zend_module_entry basic_functions_module;
#define basic_functions_module_ptr &basic_functions_module

PHP_MINIT_FUNCTION(basic);
PHP_MSHUTDOWN_FUNCTION(basic);
PHP_RINIT_FUNCTION(basic);
PHP_RSHUTDOWN_FUNCTION(basic);
PHP_MINFO_FUNCTION(basic);

ZEND_API void php_get_highlight_struct(zend_syntax_highlighter_ini *syntax_highlighter_ini);

PHP_MINIT_FUNCTION(user_filters);
PHP_RSHUTDOWN_FUNCTION(user_filters);
PHP_RSHUTDOWN_FUNCTION(browscap);

/* Left for BC (not binary safe!) */
PHPAPI int _php_error_log(int opt_err, const char *message, const char *opt, const char *headers);
PHPAPI int _php_error_log_ex(int opt_err, const char *message, size_t message_len, const char *opt, const char *headers);
PHPAPI int php_prefix_varname(zval *result, zend_string *prefix, const char *var_name, size_t var_name_len, bool add_underscore);

typedef struct _php_basic_globals {
	HashTable *user_shutdown_function_names;
	HashTable putenv_ht;
	zend_string *strtok_string;
	zend_string *ctype_string; /* current LC_CTYPE locale (or NULL for 'C') */
	bool locale_changed;   /* locale was changed and has to be restored */
	char *strtok_last;
	char strtok_table[256];
	size_t strtok_len;
	zend_fcall_info user_compare_fci;
	zend_fcall_info_cache user_compare_fci_cache;
	zend_llist *user_tick_functions;

	zval active_ini_file_section;

	/* http_fopen_wrapper.c */
	zval last_http_headers;

	/* pageinfo.c */
	zend_long page_uid;
	zend_long page_gid;
	zend_long page_inode;
	time_t page_mtime;

	/* filestat.c && main/streams/streams.c */
	zend_string *CurrentStatFile, *CurrentLStatFile;
	php_stream_statbuf ssb, lssb;

	/* syslog.c */
	char *syslog_device;

	/* var.c */
	unsigned serialize_lock; /* whether to use the locally supplied var_hash instead (__sleep/__wakeup) */
	struct {
		struct php_serialize_data *data;
		unsigned level;
	} serialize;
	struct {
		struct php_unserialize_data *data;
		unsigned level;
	} unserialize;

	/* url_scanner_ex.re */
	url_adapt_state_ex_t url_adapt_session_ex;
	HashTable url_adapt_session_hosts_ht;
	url_adapt_state_ex_t url_adapt_output_ex;
	HashTable url_adapt_output_hosts_ht;
	HashTable *user_filter_map;

	/* file.c */
#if defined(_REENTRANT)
	mbstate_t mblen_state;
#endif

	int umask;
	zend_long unserialize_max_depth;
} php_basic_globals;

#ifdef ZTS
#define BG(v) ZEND_TSRMG(basic_globals_id, php_basic_globals *, v)
PHPAPI extern int basic_globals_id;
#else
#define BG(v) (basic_globals.v)
PHPAPI extern php_basic_globals basic_globals;
#endif

PHPAPI zend_string *php_getenv(const char *str, size_t str_len);

PHPAPI double php_get_nan(void);
PHPAPI double php_get_inf(void);

typedef struct _php_shutdown_function_entry {
	zend_fcall_info_cache fci_cache;
	zval *params;
	uint32_t param_count;
} php_shutdown_function_entry;

PHPAPI extern bool register_user_shutdown_function(const char *function_name, size_t function_len, php_shutdown_function_entry *shutdown_function_entry);
PHPAPI extern bool remove_user_shutdown_function(const char *function_name, size_t function_len);
PHPAPI extern bool append_user_shutdown_function(php_shutdown_function_entry *shutdown_function_entry);

PHPAPI void php_call_shutdown_functions(void);
PHPAPI void php_free_shutdown_functions(void);


#endif /* BASIC_FUNCTIONS_H */
ext/standard/credits_ext.h000064400000012152151730542540011641 0ustar00/*
                      DO NOT EDIT THIS FILE!

 it has been automatically created by scripts/dev/credits from
 the information found in the various ext/.../CREDITS and
 sapi/.../CREDITS files

 if you want to change an entry you have to edit the appropriate
 CREDITS file instead

*/

CREDIT_LINE("BC Math", "Andi Gutmans");
CREDIT_LINE("Bzip2", "Sterling Hughes");
CREDIT_LINE("Calendar", "Shane Caraveo, Colin Viebrock, Hartmut Holzgraefe, Wez Furlong");
CREDIT_LINE("COM and .Net", "Wez Furlong");
CREDIT_LINE("ctype", "Hartmut Holzgraefe");
CREDIT_LINE("cURL", "Sterling Hughes");
CREDIT_LINE("Date/Time Support", "Derick Rethans");
CREDIT_LINE("DB-LIB (MS SQL, Sybase)", "Wez Furlong, Frank M. Kromann, Adam Baratz");
CREDIT_LINE("DBA", "Sascha Schumann, Marcus Boerger");
CREDIT_LINE("DOM", "Christian Stocker, Rob Richards, Marcus Boerger, Niels Dossche");
CREDIT_LINE("enchant", "Pierre-Alain Joye, Ilia Alshanetsky");
CREDIT_LINE("EXIF", "Rasmus Lerdorf, Marcus Boerger");
CREDIT_LINE("FFI", "Dmitry Stogov");
CREDIT_LINE("fileinfo", "Ilia Alshanetsky, Pierre Alain Joye, Scott MacVicar, Derick Rethans, Anatol Belski");
CREDIT_LINE("Firebird driver for PDO", "Ard Biesheuvel");
CREDIT_LINE("FTP", "Stefan Esser, Andrew Skalski");
CREDIT_LINE("GD imaging", "Rasmus Lerdorf, Stig Bakken, Jim Winstead, Jouni Ahto, Ilia Alshanetsky, Pierre-Alain Joye, Marcus Boerger, Mark Randall");
CREDIT_LINE("GetText", "Alex Plotnick");
CREDIT_LINE("GNU GMP support", "Stanislav Malyshev");
CREDIT_LINE("Iconv", "Rui Hirokawa, Stig Bakken, Moriyoshi Koizumi");
CREDIT_LINE("Input Filter", "Rasmus Lerdorf, Derick Rethans, Pierre-Alain Joye, Ilia Alshanetsky");
CREDIT_LINE("Internationalization", "Ed Batutis, Vladimir Iordanov, Dmitry Lakhtyuk, Stanislav Malyshev, Vadim Savchuk, Kirti Velankar");
CREDIT_LINE("JSON", "Jakub Zelenka, Omar Kilani, Scott MacVicar");
CREDIT_LINE("LDAP", "Amitay Isaacs, Eric Warnke, Rasmus Lerdorf, Gerrit Thomson, Stig Venaas");
CREDIT_LINE("LIBXML", "Christian Stocker, Rob Richards, Marcus Boerger, Wez Furlong, Shane Caraveo");
CREDIT_LINE("Multibyte String Functions", "Tsukada Takuya, Rui Hirokawa");
CREDIT_LINE("MySQL driver for PDO", "George Schlossnagle, Wez Furlong, Ilia Alshanetsky, Johannes Schlueter");
CREDIT_LINE("MySQLi", "Zak Greant, Georg Richter, Andrey Hristov, Ulf Wendel");
CREDIT_LINE("MySQLnd", "Andrey Hristov, Ulf Wendel, Georg Richter, Johannes Schlüter");
CREDIT_LINE("ODBC driver for PDO", "Wez Furlong");
CREDIT_LINE("ODBC", "Stig Bakken, Andreas Karajannis, Frank M. Kromann, Daniel R. Kalowsky");
CREDIT_LINE("Opcache", "Andi Gutmans, Zeev Suraski, Stanislav Malyshev, Dmitry Stogov, Xinchen Hui");
CREDIT_LINE("OpenSSL", "Stig Venaas, Wez Furlong, Sascha Kettler, Scott MacVicar, Eliot Lear");
CREDIT_LINE("pcntl", "Jason Greene, Arnaud Le Blanc");
CREDIT_LINE("Perl Compatible Regexps", "Andrei Zmievski");
CREDIT_LINE("PHP Archive", "Gregory Beaver, Marcus Boerger");
CREDIT_LINE("PHP Data Objects", "Wez Furlong, Marcus Boerger, Sterling Hughes, George Schlossnagle, Ilia Alshanetsky");
CREDIT_LINE("PHP hash", "Sara Golemon, Rasmus Lerdorf, Stefan Esser, Michael Wallner, Scott MacVicar");
CREDIT_LINE("Posix", "Kristian Koehntopp");
CREDIT_LINE("PostgreSQL driver for PDO", "Edin Kadribasic, Ilia Alshanetsky");
CREDIT_LINE("PostgreSQL", "Jouni Ahto, Zeev Suraski, Yasuo Ohgaki, Chris Kings-Lynne");
CREDIT_LINE("random", "Go Kudo, Tim Düsterhus, Guilliam Xavier, Christoph M. Becker, Jakub Zelenka, Bob Weinand, Máté Kocsis, and Original RNG implementators");
CREDIT_LINE("Readline", "Thies C. Arntzen");
CREDIT_LINE("Reflection", "Marcus Boerger, Timm Friebe, George Schlossnagle, Andrei Zmievski, Johannes Schlueter");
CREDIT_LINE("Sessions", "Sascha Schumann, Andrei Zmievski");
CREDIT_LINE("Shared Memory Operations", "Slava Poliakov, Ilia Alshanetsky");
CREDIT_LINE("SimpleXML", "Sterling Hughes, Marcus Boerger, Rob Richards");
CREDIT_LINE("SNMP", "Rasmus Lerdorf, Harrie Hazewinkel, Mike Jackson, Steven Lawrance, Johann Hanne, Boris Lytochkin");
CREDIT_LINE("SOAP", "Brad Lafountain, Shane Caraveo, Dmitry Stogov");
CREDIT_LINE("Sockets", "Chris Vandomelen, Sterling Hughes, Daniel Beulshausen, Jason Greene");
CREDIT_LINE("Sodium", "Frank Denis");
CREDIT_LINE("SPL", "Marcus Boerger, Etienne Kneuss");
CREDIT_LINE("SQLite 3.x driver for PDO", "Wez Furlong");
CREDIT_LINE("SQLite3", "Scott MacVicar, Ilia Alshanetsky, Brad Dewar");
CREDIT_LINE("System V Message based IPC", "Wez Furlong");
CREDIT_LINE("System V Semaphores", "Tom May");
CREDIT_LINE("System V Shared Memory", "Christian Cartus");
CREDIT_LINE("tidy", "John Coggeshall, Ilia Alshanetsky");
CREDIT_LINE("tokenizer", "Andrei Zmievski, Johannes Schlueter");
CREDIT_LINE("uri", "Máté Kocsis, Tim Düsterhus, Ignace Nyamagana Butera, Arnaud Le Blanc, Dennis Snell, Niels Dossche, Nicolas Grekas");
CREDIT_LINE("XML", "Stig Bakken, Thies C. Arntzen, Sterling Hughes");
CREDIT_LINE("XMLReader", "Rob Richards");
CREDIT_LINE("XMLWriter", "Rob Richards, Pierre-Alain Joye");
CREDIT_LINE("XSL", "Christian Stocker, Rob Richards");
CREDIT_LINE("Zip", "Pierre-Alain Joye, Remi Collet");
CREDIT_LINE("Zlib", "Rasmus Lerdorf, Stefan Roehrich, Zeev Suraski, Jade Nicoletti, Michael Wallner");
ext/standard/crypt_freesec.h000064400000001110151730542550012152 0ustar00#ifndef _CRYPT_FREESEC_H
#define _CRYPT_FREESEC_H

#include <stdint.h>

#define MD5_HASH_MAX_LEN 120

struct php_crypt_extended_data {
	int initialized;
	uint32_t saltbits;
	uint32_t old_salt;
	uint32_t en_keysl[16], en_keysr[16];
	uint32_t de_keysl[16], de_keysr[16];
	uint32_t old_rawkey0, old_rawkey1;
	char output[21];
};

/*
 * _crypt_extended_init() must be called explicitly before first use of
 * _crypt_extended_r().
 */

void _crypt_extended_init(void);

char *_crypt_extended_r(const unsigned char *key, const char *setting,
	struct php_crypt_extended_data *data);

#endif
ext/standard/sha1.h000064400000003124151730542550010160 0ustar00/*
   +----------------------------------------------------------------------+
   | Copyright (c) The PHP Group                                          |
   +----------------------------------------------------------------------+
   | This source file is subject to version 3.01 of the PHP license,      |
   | that is bundled with this package in the file LICENSE, and is        |
   | available through the world-wide-web at the following url:           |
   | https://www.php.net/license/3_01.txt                                 |
   | If you did not receive a copy of the PHP license and are unable to   |
   | obtain it through the world-wide-web, please send a note to          |
   | license@php.net so we can mail you a copy immediately.               |
   +----------------------------------------------------------------------+
   | Author: Stefan Esser <sesser@php.net>                                |
   +----------------------------------------------------------------------+
*/

#ifndef SHA1_H
#define SHA1_H

/* SHA1 context. */
typedef struct {
	uint32_t state[5];		/* state (ABCD) */
	uint32_t count[2];		/* number of bits, modulo 2^64 (lsb first) */
	unsigned char buffer[64];	/* input buffer */
} PHP_SHA1_CTX;
#define PHP_SHA1_SPEC "l5l2b64."

#define PHP_SHA1Init(ctx) PHP_SHA1InitArgs(ctx, NULL)
PHPAPI void PHP_SHA1InitArgs(PHP_SHA1_CTX *, ZEND_ATTRIBUTE_UNUSED HashTable *);
PHPAPI void PHP_SHA1Update(PHP_SHA1_CTX *, const unsigned char *, size_t);
PHPAPI void PHP_SHA1Final(unsigned char[20], PHP_SHA1_CTX *);
PHPAPI void make_sha1_digest(char *sha1str, const unsigned char *digest);

#endif
ext/standard/crc32.h000064400000011464151730542560010247 0ustar00/*
   +----------------------------------------------------------------------+
   | Copyright (c) The PHP Group                                          |
   +----------------------------------------------------------------------+
   | This source file is subject to version 3.01 of the PHP license,      |
   | that is bundled with this package in the file LICENSE, and is        |
   | available through the world-wide-web at the following url:           |
   | https://www.php.net/license/3_01.txt                                 |
   | If you did not receive a copy of the PHP license and are unable to   |
   | obtain it through the world-wide-web, please send a note to          |
   | license@php.net so we can mail you a copy immediately.               |
   +----------------------------------------------------------------------+
   | Author: Rasmus Lerdorf <rasmus@php.net>                              |
   +----------------------------------------------------------------------+
*/

/*
 * This code implements the AUTODIN II polynomial
 * The variable corresponding to the macro argument "crc" should
 * be an unsigned long.
 * Original code by Spencer Garrett <srg@quick.com>
 */

#define CRC32(crc, ch)	 (crc = (crc >> 8) ^ crc32tab[(crc ^ (ch)) & 0xff])

#define php_crc32_bulk_init() (0 ^ 0xffffffff)
#define php_crc32_bulk_end(c) ((c) ^ 0xffffffff)

PHPAPI uint32_t php_crc32_bulk_update(uint32_t crc, const char *p, size_t nr);

/* Return FAILURE if stream reading fail */
PHPAPI zend_result php_crc32_stream_bulk_update(uint32_t *crc, php_stream *fp, size_t nr);

/* generated using the AUTODIN II polynomial
 *	x^32 + x^26 + x^23 + x^22 + x^16 +
 *	x^12 + x^11 + x^10 + x^8 + x^7 + x^5 + x^4 + x^2 + x^1 + 1
 */

static const unsigned int crc32tab[256] = {
	0x00000000, 0x77073096, 0xee0e612c, 0x990951ba,
	0x076dc419, 0x706af48f, 0xe963a535, 0x9e6495a3,
	0x0edb8832, 0x79dcb8a4, 0xe0d5e91e, 0x97d2d988,
	0x09b64c2b, 0x7eb17cbd, 0xe7b82d07, 0x90bf1d91,
	0x1db71064, 0x6ab020f2, 0xf3b97148, 0x84be41de,
	0x1adad47d, 0x6ddde4eb, 0xf4d4b551, 0x83d385c7,
	0x136c9856, 0x646ba8c0, 0xfd62f97a, 0x8a65c9ec,
	0x14015c4f, 0x63066cd9, 0xfa0f3d63, 0x8d080df5,
	0x3b6e20c8, 0x4c69105e, 0xd56041e4, 0xa2677172,
	0x3c03e4d1, 0x4b04d447, 0xd20d85fd, 0xa50ab56b,
	0x35b5a8fa, 0x42b2986c, 0xdbbbc9d6, 0xacbcf940,
	0x32d86ce3, 0x45df5c75, 0xdcd60dcf, 0xabd13d59,
	0x26d930ac, 0x51de003a, 0xc8d75180, 0xbfd06116,
	0x21b4f4b5, 0x56b3c423, 0xcfba9599, 0xb8bda50f,
	0x2802b89e, 0x5f058808, 0xc60cd9b2, 0xb10be924,
	0x2f6f7c87, 0x58684c11, 0xc1611dab, 0xb6662d3d,
	0x76dc4190, 0x01db7106, 0x98d220bc, 0xefd5102a,
	0x71b18589, 0x06b6b51f, 0x9fbfe4a5, 0xe8b8d433,
	0x7807c9a2, 0x0f00f934, 0x9609a88e, 0xe10e9818,
	0x7f6a0dbb, 0x086d3d2d, 0x91646c97, 0xe6635c01,
	0x6b6b51f4, 0x1c6c6162, 0x856530d8, 0xf262004e,
	0x6c0695ed, 0x1b01a57b, 0x8208f4c1, 0xf50fc457,
	0x65b0d9c6, 0x12b7e950, 0x8bbeb8ea, 0xfcb9887c,
	0x62dd1ddf, 0x15da2d49, 0x8cd37cf3, 0xfbd44c65,
	0x4db26158, 0x3ab551ce, 0xa3bc0074, 0xd4bb30e2,
	0x4adfa541, 0x3dd895d7, 0xa4d1c46d, 0xd3d6f4fb,
	0x4369e96a, 0x346ed9fc, 0xad678846, 0xda60b8d0,
	0x44042d73, 0x33031de5, 0xaa0a4c5f, 0xdd0d7cc9,
	0x5005713c, 0x270241aa, 0xbe0b1010, 0xc90c2086,
	0x5768b525, 0x206f85b3, 0xb966d409, 0xce61e49f,
	0x5edef90e, 0x29d9c998, 0xb0d09822, 0xc7d7a8b4,
	0x59b33d17, 0x2eb40d81, 0xb7bd5c3b, 0xc0ba6cad,
	0xedb88320, 0x9abfb3b6, 0x03b6e20c, 0x74b1d29a,
	0xead54739, 0x9dd277af, 0x04db2615, 0x73dc1683,
	0xe3630b12, 0x94643b84, 0x0d6d6a3e, 0x7a6a5aa8,
	0xe40ecf0b, 0x9309ff9d, 0x0a00ae27, 0x7d079eb1,
	0xf00f9344, 0x8708a3d2, 0x1e01f268, 0x6906c2fe,
	0xf762575d, 0x806567cb, 0x196c3671, 0x6e6b06e7,
	0xfed41b76, 0x89d32be0, 0x10da7a5a, 0x67dd4acc,
	0xf9b9df6f, 0x8ebeeff9, 0x17b7be43, 0x60b08ed5,
	0xd6d6a3e8, 0xa1d1937e, 0x38d8c2c4, 0x4fdff252,
	0xd1bb67f1, 0xa6bc5767, 0x3fb506dd, 0x48b2364b,
	0xd80d2bda, 0xaf0a1b4c, 0x36034af6, 0x41047a60,
	0xdf60efc3, 0xa867df55, 0x316e8eef, 0x4669be79,
	0xcb61b38c, 0xbc66831a, 0x256fd2a0, 0x5268e236,
	0xcc0c7795, 0xbb0b4703, 0x220216b9, 0x5505262f,
	0xc5ba3bbe, 0xb2bd0b28, 0x2bb45a92, 0x5cb36a04,
	0xc2d7ffa7, 0xb5d0cf31, 0x2cd99e8b, 0x5bdeae1d,
	0x9b64c2b0, 0xec63f226, 0x756aa39c, 0x026d930a,
	0x9c0906a9, 0xeb0e363f, 0x72076785, 0x05005713,
	0x95bf4a82, 0xe2b87a14, 0x7bb12bae, 0x0cb61b38,
	0x92d28e9b, 0xe5d5be0d, 0x7cdcefb7, 0x0bdbdf21,
	0x86d3d2d4, 0xf1d4e242, 0x68ddb3f8, 0x1fda836e,
	0x81be16cd, 0xf6b9265b, 0x6fb077e1, 0x18b74777,
	0x88085ae6, 0xff0f6a70, 0x66063bca, 0x11010b5c,
	0x8f659eff, 0xf862ae69, 0x616bffd3, 0x166ccf45,
	0xa00ae278, 0xd70dd2ee, 0x4e048354, 0x3903b3c2,
	0xa7672661, 0xd06016f7, 0x4969474d, 0x3e6e77db,
	0xaed16a4a, 0xd9d65adc, 0x40df0b66, 0x37d83bf0,
	0xa9bcae53, 0xdebb9ec5, 0x47b2cf7f, 0x30b5ffe9,
	0xbdbdf21c, 0xcabac28a, 0x53b39330, 0x24b4a3a6,
	0xbad03605, 0xcdd70693, 0x54de5729, 0x23d967bf,
	0xb3667a2e, 0xc4614ab8, 0x5d681b02, 0x2a6f2b94,
	0xb40bbe37, 0xc30c8ea1, 0x5a05df1b, 0x2d02ef8d,
};
ext/standard/php_string.h000064400000007545151730542570011516 0ustar00/*
   +----------------------------------------------------------------------+
   | Copyright (c) The PHP Group                                          |
   +----------------------------------------------------------------------+
   | This source file is subject to version 3.01 of the PHP license,      |
   | that is bundled with this package in the file LICENSE, and is        |
   | available through the world-wide-web at the following url:           |
   | https://www.php.net/license/3_01.txt                                 |
   | If you did not receive a copy of the PHP license and are unable to   |
   | obtain it through the world-wide-web, please send a note to          |
   | license@php.net so we can mail you a copy immediately.               |
   +----------------------------------------------------------------------+
   | Authors: Rasmus Lerdorf <rasmus@php.net>                             |
   |          Stig Sæther Bakken <ssb@php.net>                            |
   +----------------------------------------------------------------------+
*/

#ifndef PHP_STRING_H
#define PHP_STRING_H

# include "ext/random/php_random.h"

#ifdef ZTS
PHP_MINIT_FUNCTION(localeconv);
PHP_MSHUTDOWN_FUNCTION(localeconv);
#endif
#ifdef ZEND_INTRIN_SSE4_2_FUNC_PTR
PHP_MINIT_FUNCTION(string_intrin);
#endif

#define strnatcmp(a, b) \
	strnatcmp_ex(a, strlen(a), b, strlen(b), 0)
#define strnatcasecmp(a, b) \
	strnatcmp_ex(a, strlen(a), b, strlen(b), 1)
PHPAPI int strnatcmp_ex(char const *a, size_t a_len, char const *b, size_t b_len, bool is_case_insensitive);
PHPAPI struct lconv *localeconv_r(struct lconv *out);
PHPAPI char *php_strtr(char *str, size_t len, const char *str_from, const char *str_to, size_t trlen);
PHPAPI zend_string *php_addslashes(zend_string *str);
PHPAPI void php_stripslashes(zend_string *str);
PHPAPI zend_string *php_addcslashes_str(const char *str, size_t len, const char *what, size_t what_len);
PHPAPI zend_string *php_addcslashes(zend_string *str, const char *what, size_t what_len);
PHPAPI void php_stripcslashes(zend_string *str);
PHPAPI zend_string *php_basename(const char *s, size_t len, const char *suffix, size_t sufflen);
PHPAPI size_t php_dirname(char *str, size_t len);
PHPAPI char *php_stristr(const char *s, const char *t, size_t s_len, size_t t_len);
PHPAPI zend_string *php_str_to_str(const char *haystack, size_t length, const char *needle,
		size_t needle_len, const char *str, size_t str_len);
PHPAPI zend_string *php_trim(zend_string *str, const char *what, size_t what_len, int mode);
PHPAPI size_t php_strip_tags(char *rbuf, size_t len, const char *allow, size_t allow_len);
PHPAPI size_t php_strip_tags_ex(char *rbuf, size_t len, const char *allow, size_t allow_len, bool allow_tag_spaces);
PHPAPI void php_implode(const zend_string *delim, HashTable *arr, zval *return_value);
PHPAPI void php_explode(const zend_string *delim, zend_string *str, zval *return_value, zend_long limit);

PHPAPI size_t php_strspn(const char *s1, const char *s2, const char *s1_end, const char *s2_end);
PHPAPI size_t php_strcspn(const char *s1, const char *s2, const char *s1_end, const char *s2_end);

PHPAPI bool php_binary_string_shuffle(php_random_algo_with_state engine, char *str, zend_long len);

#ifdef _REENTRANT
# ifdef PHP_WIN32
#  include <wchar.h>
# endif
# define php_mblen(ptr, len) ((int) mbrlen(ptr, len, &BG(mblen_state)))
# define php_mb_reset() memset(&BG(mblen_state), 0, sizeof(BG(mblen_state)))
#else
# define php_mblen(ptr, len) mblen(ptr, len)
# define php_mb_reset() php_ignore_value(mblen(NULL, 0))
#endif

#define PHP_STR_PAD_LEFT		0
#define PHP_STR_PAD_RIGHT		1
#define PHP_STR_PAD_BOTH		2
#define PHP_PATHINFO_DIRNAME 	1
#define PHP_PATHINFO_BASENAME 	2
#define PHP_PATHINFO_EXTENSION 	4
#define PHP_PATHINFO_FILENAME 	8
#define PHP_PATHINFO_ALL	(PHP_PATHINFO_DIRNAME | PHP_PATHINFO_BASENAME | PHP_PATHINFO_EXTENSION | PHP_PATHINFO_FILENAME)

#endif /* PHP_STRING_H */
ext/standard/url_scanner_ex.h000064400000004570151730542570012343 0ustar00/*
  +----------------------------------------------------------------------+
  | Copyright (c) The PHP Group                                          |
  +----------------------------------------------------------------------+
  | This source file is subject to version 3.01 of the PHP license,      |
  | that is bundled with this package in the file LICENSE, and is        |
  | available through the world-wide-web at the following url:           |
  | https://www.php.net/license/3_01.txt                                 |
  | If you did not receive a copy of the PHP license and are unable to   |
  | obtain it through the world-wide-web, please send a note to          |
  | license@php.net so we can mail you a copy immediately.               |
  +----------------------------------------------------------------------+
  | Author: Sascha Schumann <sascha@schumann.cx>                         |
  +----------------------------------------------------------------------+
*/

#ifndef URL_SCANNER_EX_H
#define URL_SCANNER_EX_H

PHP_MINIT_FUNCTION(url_scanner_ex);
PHP_MSHUTDOWN_FUNCTION(url_scanner_ex);

PHP_RINIT_FUNCTION(url_scanner_ex);
PHP_RSHUTDOWN_FUNCTION(url_scanner_ex);

PHPAPI char *php_url_scanner_adapt_single_url(const char *url, size_t urllen, const char *name, const char *value, size_t *newlen, bool encode);
PHPAPI zend_result php_url_scanner_add_session_var(const char *name, size_t name_len, const char *value, size_t value_len, bool encode);
PHPAPI zend_result php_url_scanner_reset_session_var(zend_string *name, int encode);
PHPAPI zend_result php_url_scanner_reset_session_vars(void);
PHPAPI zend_result php_url_scanner_add_var(const char *name, size_t name_len, const char *value, size_t value_len, bool encode);
PHPAPI zend_result php_url_scanner_reset_var(zend_string *name, int encode);
PHPAPI zend_result php_url_scanner_reset_vars(void);

#include "zend_smart_str_public.h"

typedef struct {
	/* Used by the mainloop of the scanner */
	smart_str tag; /* read only */
	smart_str arg; /* read only */
	smart_str val; /* read only */
	smart_str buf;

	/* The result buffer */
	smart_str result;

	/* The data which is appended to each relative URL/FORM */
	smart_str form_app, url_app;

	int active;

	char *lookup_data;
	int state;

	int type;
	smart_str attr_val;
	int tag_type;
	int attr_type;

	/* Everything above is zeroed in RINIT */
	HashTable *tags;
} url_adapt_state_ex_t;

#endif
ext/standard/scanf.h000064400000003715151730542570010426 0ustar00/*
   +----------------------------------------------------------------------+
   | Copyright (c) The PHP Group                                          |
   +----------------------------------------------------------------------+
   | This source file is subject to version 3.01 of the PHP license,      |
   | that is bundled with this package in the file LICENSE, and is        |
   | available through the world-wide-web at the following url:           |
   | https://www.php.net/license/3_01.txt                                 |
   | If you did not receive a copy of the PHP license and are unable to   |
   | obtain it through the world-wide-web, please send a note to          |
   | license@php.net so we can mail you a copy immediately.               |
   +----------------------------------------------------------------------+
   | Author: Clayton Collie <clcollie@mindspring.com>                     |
   +----------------------------------------------------------------------+
*/

#ifndef  SCANF_H
#define  SCANF_H


#define SCAN_MAX_ARGS   0xFF    /* Maximum number of variable which can be      */
                                /* passed to (f|s)scanf. This is an artificial   */
                                /* upper limit to keep resources in check and   */
                                /* minimize the possibility of exploits         */

#define SCAN_SUCCESS			SUCCESS
#define SCAN_ERROR_EOF			-1	/* indicates premature termination of scan 	*/
									/* can be caused by bad parameters or format*/
									/* string.									*/
#define SCAN_ERROR_INVALID_FORMAT		(SCAN_ERROR_EOF - 1)
#define SCAN_ERROR_WRONG_PARAM_COUNT	(SCAN_ERROR_INVALID_FORMAT - 1)

/*
 * The following are here solely for the benefit of the scanf type functions
 * e.g. fscanf
 */
PHPAPI int ValidateFormat(char *format, int numVars, int *totalVars);
PHPAPI int php_sscanf_internal(char *string,char *format,int argCount,zval *args,
				int varStart, zval *return_value);


#endif /* SCANF_H */
ext/standard/streamsfuncs.h000064400000002161151730542600012035 0ustar00/*
  +----------------------------------------------------------------------+
  | Copyright (c) The PHP Group                                          |
  +----------------------------------------------------------------------+
  | This source file is subject to version 3.01 of the PHP license,      |
  | that is bundled with this package in the file LICENSE, and is        |
  | available through the world-wide-web at the following url:           |
  | https://www.php.net/license/3_01.txt                                 |
  | If you did not receive a copy of the PHP license and are unable to   |
  | obtain it through the world-wide-web, please send a note to          |
  | license@php.net so we can mail you a copy immediately.               |
  +----------------------------------------------------------------------+
  | Authors: Wez Furlong <wez@thebrainroom.com>                          |
  +----------------------------------------------------------------------+
*/

/* Flags for stream_socket_client */
#define PHP_STREAM_CLIENT_PERSISTENT	1
#define PHP_STREAM_CLIENT_ASYNC_CONNECT	2
#define PHP_STREAM_CLIENT_CONNECT		4
ext/standard/php_math_round_mode.h000064400000003670151730542600013341 0ustar00/*
   +----------------------------------------------------------------------+
   | Copyright (c) The PHP Group                                          |
   +----------------------------------------------------------------------+
   | This source file is subject to version 3.01 of the PHP license,      |
   | that is bundled with this package in the file LICENSE, and is        |
   | available through the world-wide-web at the following url:           |
   | https://www.php.net/license/3_01.txt                                 |
   | If you did not receive a copy of the PHP license and are unable to   |
   | obtain it through the world-wide-web, please send a note to          |
   | license@php.net so we can mail you a copy immediately.               |
   +----------------------------------------------------------------------+
   | Authors: Jim Winstead <jimw@php.net>                                 |
   |          Stig Sæther Bakken <ssb@php.net>                            |
   +----------------------------------------------------------------------+
*/

#include "php.h"

/* Define rounding modes (all are round-to-nearest) */
#ifndef PHP_ROUND_HALF_UP
#define PHP_ROUND_HALF_UP        0x01    /* Arithmetic rounding, up == away from zero */
#endif

#ifndef PHP_ROUND_HALF_DOWN
#define PHP_ROUND_HALF_DOWN      0x02    /* Arithmetic rounding, down == towards zero */
#endif

#ifndef PHP_ROUND_HALF_EVEN
#define PHP_ROUND_HALF_EVEN      0x03    /* Banker's rounding */
#endif

#ifndef PHP_ROUND_HALF_ODD
#define PHP_ROUND_HALF_ODD       0x04
#endif

#ifndef PHP_ROUND_CEILING
#define PHP_ROUND_CEILING        0x05
#endif

#ifndef PHP_ROUND_FLOOR
#define PHP_ROUND_FLOOR          0x06
#endif

#ifndef PHP_ROUND_TOWARD_ZERO
#define PHP_ROUND_TOWARD_ZERO    0x07
#endif

#ifndef PHP_ROUND_AWAY_FROM_ZERO
#define PHP_ROUND_AWAY_FROM_ZERO 0x08
#endif

extern PHPAPI zend_class_entry *rounding_mode_ce;

PHPAPI int php_math_round_mode_from_enum(zend_object *mode);
ext/standard/php_fopen_wrappers.h000064400000003455151730542600013230 0ustar00/*
   +----------------------------------------------------------------------+
   | Copyright (c) The PHP Group                                          |
   +----------------------------------------------------------------------+
   | This source file is subject to version 3.01 of the PHP license,      |
   | that is bundled with this package in the file LICENSE, and is        |
   | available through the world-wide-web at the following url:           |
   | https://www.php.net/license/3_01.txt                                 |
   | If you did not receive a copy of the PHP license and are unable to   |
   | obtain it through the world-wide-web, please send a note to          |
   | license@php.net so we can mail you a copy immediately.               |
   +----------------------------------------------------------------------+
   | Authors: Rasmus Lerdorf <rasmus@php.net>                             |
   |          Jim Winstead <jimw@php.net>                                 |
   |          Hartmut Holzgraefe <hholzgra@php.net>                       |
   +----------------------------------------------------------------------+
*/

#ifndef PHP_FOPEN_WRAPPERS_H
#define PHP_FOPEN_WRAPPERS_H

php_stream *php_stream_url_wrap_http(php_stream_wrapper *wrapper, const char *path, const char *mode, int options, zend_string **opened_path, php_stream_context *context STREAMS_DC);
php_stream *php_stream_url_wrap_ftp(php_stream_wrapper *wrapper, const char *path, const char *mode, int options, zend_string **opened_path, php_stream_context *context STREAMS_DC);
extern PHPAPI const php_stream_wrapper php_stream_http_wrapper;
extern PHPAPI const php_stream_wrapper php_stream_ftp_wrapper;
extern PHPAPI const php_stream_wrapper php_stream_php_wrapper;
extern PHPAPI /*const*/ php_stream_wrapper php_plain_files_wrapper;

#endif
ext/standard/md5.h000064400000003751151730542600010013 0ustar00/*
   +----------------------------------------------------------------------+
   | Copyright (c) The PHP Group                                          |
   +----------------------------------------------------------------------+
   | This source file is subject to version 3.01 of the PHP license,      |
   | that is bundled with this package in the file LICENSE, and is        |
   | available through the world-wide-web at the following url:           |
   | https://www.php.net/license/3_01.txt                                 |
   | If you did not receive a copy of the PHP license and are unable to   |
   | obtain it through the world-wide-web, please send a note to          |
   | license@php.net so we can mail you a copy immediately.               |
   +----------------------------------------------------------------------+
   | Author: Alexander Peslyak (Solar Designer) <solar at openwall.com>   |
   |         Rasmus Lerdorf <rasmus@lerdorf.on.ca>                        |
   +----------------------------------------------------------------------+
*/

#ifndef MD5_H
#define MD5_H

PHPAPI void make_digest(char *md5str, const unsigned char *digest);
PHPAPI void make_digest_ex(char *md5str, const unsigned char *digest, size_t len);

/*
 * This is an OpenSSL-compatible implementation of the RSA Data Security,
 * Inc. MD5 Message-Digest Algorithm (RFC 1321).
 *
 * Written by Solar Designer <solar at openwall.com> in 2001, and placed
 * in the public domain.  There's absolutely no warranty.
 *
 * See md5.c for more information.
 */

/* MD5 context. */
typedef struct {
	uint32_t lo, hi;
	uint32_t a, b, c, d;
	unsigned char buffer[64];
	uint32_t block[16];
} PHP_MD5_CTX;
#define PHP_MD5_SPEC "llllllb64l16."

#define PHP_MD5Init(ctx) PHP_MD5InitArgs(ctx, NULL)
PHPAPI void PHP_MD5InitArgs(PHP_MD5_CTX *context, ZEND_ATTRIBUTE_UNUSED HashTable *args);
PHPAPI void PHP_MD5Update(PHP_MD5_CTX *ctx, const void *data, size_t size);
PHPAPI void PHP_MD5Final(unsigned char *result, PHP_MD5_CTX *ctx);

#endif
ext/standard/credits_sapi.h000064400000001477151730542610012003 0ustar00/*
                      DO NOT EDIT THIS FILE!

 it has been automatically created by scripts/dev/credits from
 the information found in the various ext/.../CREDITS and
 sapi/.../CREDITS files

 if you want to change an entry you have to edit the appropriate
 CREDITS file instead

*/

CREDIT_LINE("Apache 2 Handler", "Ian Holsman, Justin Erenkrantz (based on Apache 2 Filter code)");
CREDIT_LINE("CGI / FastCGI", "Rasmus Lerdorf, Stig Bakken, Shane Caraveo, Dmitry Stogov");
CREDIT_LINE("CLI", "Edin Kadribasic, Marcus Boerger, Johannes Schlueter, Moriyoshi Koizumi, Xinchen Hui");
CREDIT_LINE("Embed", "Edin Kadribasic");
CREDIT_LINE("FastCGI Process Manager", "Andrei Nigmatulin, dreamcat4, Antony Dovgal, Jerome Loyet");
CREDIT_LINE("litespeed", "George Wang");
CREDIT_LINE("phpdbg", "Felipe Pena, Joe Watkins, Bob Weinand");
ext/standard/file.h000064400000010025151730542610010236 0ustar00/*
   +----------------------------------------------------------------------+
   | Copyright (c) The PHP Group                                          |
   +----------------------------------------------------------------------+
   | This source file is subject to version 3.01 of the PHP license,      |
   | that is bundled with this package in the file LICENSE, and is        |
   | available through the world-wide-web at the following url:           |
   | https://www.php.net/license/3_01.txt                                 |
   | If you did not receive a copy of the PHP license and are unable to   |
   | obtain it through the world-wide-web, please send a note to          |
   | license@php.net so we can mail you a copy immediately.               |
   +----------------------------------------------------------------------+
   | Author: Rasmus Lerdorf <rasmus@lerdorf.on.ca>                        |
   +----------------------------------------------------------------------+
*/

#ifndef FILE_H
#define FILE_H

#include "php_network.h"

PHP_MINIT_FUNCTION(file);
PHP_MSHUTDOWN_FUNCTION(file);

PHPAPI PHP_FUNCTION(fclose);
PHPAPI PHP_FUNCTION(feof);
PHPAPI PHP_FUNCTION(fread);
PHPAPI PHP_FUNCTION(fgetc);
PHPAPI PHP_FUNCTION(fgets);
PHPAPI PHP_FUNCTION(fwrite);
PHPAPI PHP_FUNCTION(fflush);
PHPAPI PHP_FUNCTION(rewind);
PHPAPI PHP_FUNCTION(ftell);
PHPAPI PHP_FUNCTION(fseek);
PHPAPI PHP_FUNCTION(fpassthru);

PHP_MINIT_FUNCTION(user_streams);

PHPAPI zend_result php_copy_file(const char *src, const char *dest);
PHPAPI zend_result php_copy_file_ex(const char *src, const char *dest, int src_flags);
PHPAPI zend_result php_copy_file_ctx(const char *src, const char *dest, int src_flags, php_stream_context *ctx);
PHPAPI void php_fstat(php_stream *stream, zval *return_value);
PHPAPI void php_flock_common(php_stream *stream, zend_long operation, uint32_t operation_arg_num,
	zval *wouldblock, zval *return_value);

#define PHP_CSV_NO_ESCAPE EOF
#define PHP_CSV_ESCAPE_ERROR -500

PHPAPI HashTable *php_bc_fgetcsv_empty_line(void);
PHPAPI int php_csv_handle_escape_argument(const zend_string *escape_str, uint32_t arg_num);
PHPAPI HashTable *php_fgetcsv(php_stream *stream, char delimiter, char enclosure, int escape_char, size_t buf_len, char *buf);
PHPAPI ssize_t php_fputcsv(php_stream *stream, zval *fields, char delimiter, char enclosure, int escape_char, zend_string *eol_str);

#define META_DEF_BUFSIZE 8192

#define PHP_FILE_USE_INCLUDE_PATH (1 << 0)
#define PHP_FILE_IGNORE_NEW_LINES (1 << 1)
#define PHP_FILE_SKIP_EMPTY_LINES (1 << 2)
#define PHP_FILE_APPEND (1 << 3)
#define PHP_FILE_NO_DEFAULT_CONTEXT (1 << 4)

#ifndef _WIN32
#define PHP_TIMEOUT_ULL_MAX ULLONG_MAX
#else
#define PHP_TIMEOUT_ULL_MAX UINT64_MAX
#endif

typedef enum _php_meta_tags_token {
	TOK_EOF = 0,
	TOK_OPENTAG,
	TOK_CLOSETAG,
	TOK_SLASH,
	TOK_EQUAL,
	TOK_SPACE,
	TOK_ID,
	TOK_STRING,
	TOK_OTHER
} php_meta_tags_token;

typedef struct _php_meta_tags_data {
	php_stream *stream;
	int ulc;
	int lc;
	char *input_buffer;
	char *token_data;
	int token_len;
	int in_meta;
} php_meta_tags_data;

php_meta_tags_token php_next_meta_token(php_meta_tags_data *);

typedef struct {
	int pclose_ret;
	size_t def_chunk_size;
	bool auto_detect_line_endings;
	zend_long default_socket_timeout;
	char *user_agent; /* for the http wrapper */
	char *from_address; /* for the ftp and http wrappers */
	const char *user_stream_current_filename; /* for simple recursion protection */
	php_stream_context *default_context;
	HashTable *stream_wrappers;			/* per-request copy of url_stream_wrappers_hash */
	HashTable *stream_filters;			/* per-request copy of stream_filters_hash */
	HashTable *wrapper_errors;			/* key: wrapper address; value: linked list of char* */
	int pclose_wait;
#ifdef HAVE_GETHOSTBYNAME_R
	struct hostent tmp_host_info;
	char *tmp_host_buf;
	size_t tmp_host_buf_len;
#endif
} php_file_globals;

#ifdef ZTS
#define FG(v) ZEND_TSRMG(file_globals_id, php_file_globals *, v)
extern PHPAPI int file_globals_id;
#else
#define FG(v) (file_globals.v)
extern PHPAPI php_file_globals file_globals;
#endif


#endif /* FILE_H */
ext/standard/user_filters_arginfo.h000064400000011444151730542610013540 0ustar00/* This is a generated file, edit the .stub.php file instead.
 * Stub hash: 33264435fe01a2cc9aa21a4a087dbbf3c4007206 */

ZEND_BEGIN_ARG_WITH_TENTATIVE_RETURN_TYPE_INFO_EX(arginfo_class_php_user_filter_filter, 0, 4, IS_LONG, 0)
	ZEND_ARG_INFO(0, in)
	ZEND_ARG_INFO(0, out)
	ZEND_ARG_INFO(1, consumed)
	ZEND_ARG_TYPE_INFO(0, closing, _IS_BOOL, 0)
ZEND_END_ARG_INFO()

ZEND_BEGIN_ARG_WITH_TENTATIVE_RETURN_TYPE_INFO_EX(arginfo_class_php_user_filter_onCreate, 0, 0, _IS_BOOL, 0)
ZEND_END_ARG_INFO()

ZEND_BEGIN_ARG_WITH_TENTATIVE_RETURN_TYPE_INFO_EX(arginfo_class_php_user_filter_onClose, 0, 0, IS_VOID, 0)
ZEND_END_ARG_INFO()

ZEND_METHOD(php_user_filter, filter);
ZEND_METHOD(php_user_filter, onCreate);
ZEND_METHOD(php_user_filter, onClose);

static const zend_function_entry class_php_user_filter_methods[] = {
	ZEND_ME(php_user_filter, filter, arginfo_class_php_user_filter_filter, ZEND_ACC_PUBLIC)
	ZEND_ME(php_user_filter, onCreate, arginfo_class_php_user_filter_onCreate, ZEND_ACC_PUBLIC)
	ZEND_ME(php_user_filter, onClose, arginfo_class_php_user_filter_onClose, ZEND_ACC_PUBLIC)
	ZEND_FE_END
};

static void register_user_filters_symbols(int module_number)
{
	REGISTER_LONG_CONSTANT("PSFS_PASS_ON", PSFS_PASS_ON, CONST_PERSISTENT);
	REGISTER_LONG_CONSTANT("PSFS_FEED_ME", PSFS_FEED_ME, CONST_PERSISTENT);
	REGISTER_LONG_CONSTANT("PSFS_ERR_FATAL", PSFS_ERR_FATAL, CONST_PERSISTENT);
	REGISTER_LONG_CONSTANT("PSFS_FLAG_NORMAL", PSFS_FLAG_NORMAL, CONST_PERSISTENT);
	REGISTER_LONG_CONSTANT("PSFS_FLAG_FLUSH_INC", PSFS_FLAG_FLUSH_INC, CONST_PERSISTENT);
	REGISTER_LONG_CONSTANT("PSFS_FLAG_FLUSH_CLOSE", PSFS_FLAG_FLUSH_CLOSE, CONST_PERSISTENT);
}

static zend_class_entry *register_class_php_user_filter(void)
{
	zend_class_entry ce, *class_entry;

	INIT_CLASS_ENTRY(ce, "php_user_filter", class_php_user_filter_methods);
	class_entry = zend_register_internal_class_with_flags(&ce, NULL, 0);

	zval property_filtername_default_value;
	ZVAL_EMPTY_STRING(&property_filtername_default_value);
	zend_string *property_filtername_name = zend_string_init("filtername", sizeof("filtername") - 1, 1);
	zend_declare_typed_property(class_entry, property_filtername_name, &property_filtername_default_value, ZEND_ACC_PUBLIC, NULL, (zend_type) ZEND_TYPE_INIT_MASK(MAY_BE_STRING));
	zend_string_release(property_filtername_name);

	zval property_params_default_value;
	ZVAL_EMPTY_STRING(&property_params_default_value);
	zend_string *property_params_name = zend_string_init("params", sizeof("params") - 1, 1);
	zend_declare_typed_property(class_entry, property_params_name, &property_params_default_value, ZEND_ACC_PUBLIC, NULL, (zend_type) ZEND_TYPE_INIT_MASK(MAY_BE_ANY));
	zend_string_release(property_params_name);

	zval property_stream_default_value;
	ZVAL_NULL(&property_stream_default_value);
	zend_string *property_stream_name = zend_string_init("stream", sizeof("stream") - 1, 1);
	zend_declare_typed_property(class_entry, property_stream_name, &property_stream_default_value, ZEND_ACC_PUBLIC, NULL, (zend_type) ZEND_TYPE_INIT_NONE(0));
	zend_string_release(property_stream_name);

	return class_entry;
}

static zend_class_entry *register_class_StreamBucket(void)
{
	zend_class_entry ce, *class_entry;

	INIT_CLASS_ENTRY(ce, "StreamBucket", NULL);
	class_entry = zend_register_internal_class_with_flags(&ce, NULL, ZEND_ACC_FINAL);

	zval property_bucket_default_value;
	ZVAL_NULL(&property_bucket_default_value);
	zend_string *property_bucket_name = zend_string_init("bucket", sizeof("bucket") - 1, 1);
	zend_declare_typed_property(class_entry, property_bucket_name, &property_bucket_default_value, ZEND_ACC_PUBLIC, NULL, (zend_type) ZEND_TYPE_INIT_NONE(0));
	zend_string_release(property_bucket_name);

	zval property_data_default_value;
	ZVAL_UNDEF(&property_data_default_value);
	zend_string *property_data_name = zend_string_init("data", sizeof("data") - 1, 1);
	zend_declare_typed_property(class_entry, property_data_name, &property_data_default_value, ZEND_ACC_PUBLIC, NULL, (zend_type) ZEND_TYPE_INIT_MASK(MAY_BE_STRING));
	zend_string_release(property_data_name);

	zval property_datalen_default_value;
	ZVAL_UNDEF(&property_datalen_default_value);
	zend_string *property_datalen_name = zend_string_init("datalen", sizeof("datalen") - 1, 1);
	zend_declare_typed_property(class_entry, property_datalen_name, &property_datalen_default_value, ZEND_ACC_PUBLIC, NULL, (zend_type) ZEND_TYPE_INIT_MASK(MAY_BE_LONG));
	zend_string_release(property_datalen_name);

	zval property_dataLength_default_value;
	ZVAL_UNDEF(&property_dataLength_default_value);
	zend_string *property_dataLength_name = zend_string_init("dataLength", sizeof("dataLength") - 1, 1);
	zend_declare_typed_property(class_entry, property_dataLength_name, &property_dataLength_default_value, ZEND_ACC_PUBLIC, NULL, (zend_type) ZEND_TYPE_INIT_MASK(MAY_BE_LONG));
	zend_string_release(property_dataLength_name);

	return class_entry;
}
ext/standard/php_assert.h000064400000002546151730542610011500 0ustar00/*
   +----------------------------------------------------------------------+
   | Copyright (c) The PHP Group                                          |
   +----------------------------------------------------------------------+
   | This source file is subject to version 3.01 of the PHP license,      |
   | that is bundled with this package in the file LICENSE, and is        |
   | available through the world-wide-web at the following url:           |
   | https://www.php.net/license/3_01.txt                                 |
   | If you did not receive a copy of the PHP license and are unable to   |
   | obtain it through the world-wide-web, please send a note to          |
   | license@php.net so we can mail you a copy immediately.               |
   +----------------------------------------------------------------------+
   | Author: Thies C. Arntzen <thies@thieso.net>                          |
   +----------------------------------------------------------------------+
*/

#ifndef PHP_ASSERT_H
#define PHP_ASSERT_H

PHP_MINIT_FUNCTION(assert);
PHP_MSHUTDOWN_FUNCTION(assert);
PHP_RINIT_FUNCTION(assert);
PHP_RSHUTDOWN_FUNCTION(assert);
PHP_MINFO_FUNCTION(assert);

enum {
	PHP_ASSERT_ACTIVE=1,
	PHP_ASSERT_CALLBACK,
	PHP_ASSERT_BAIL,
	PHP_ASSERT_WARNING,
	PHP_ASSERT_EXCEPTION
};

extern PHPAPI zend_class_entry *assertion_error_ce;

#endif /* PHP_ASSERT_H */
ext/standard/crc32_x86.h000064400000003532151730542620010746 0ustar00/*
  +----------------------------------------------------------------------+
  | Copyright (c) The PHP Group                                          |
  +----------------------------------------------------------------------+
  | This source file is subject to version 3.01 of the PHP license,      |
  | that is bundled with this package in the file LICENSE, and is        |
  | available through the world-wide-web at the following url:           |
  | https://www.php.net/license/3_01.txt                                 |
  | If you did not receive a copy of the PHP license and are unable to   |
  | obtain it through the world-wide-web, please send a note to          |
  | license@php.net so we can mail you a copy immediately.               |
  +----------------------------------------------------------------------+
  | Author: Frank Du <frank.du@intel.com>                                |
  +----------------------------------------------------------------------+
*/

#ifndef _CRC32_X86_HEADER_H_
#define _CRC32_X86_HEADER_H_

#include "php.h"

typedef enum {
	/* polynomial: 0x04C11DB7, used by bzip */
	X86_CRC32 = 0,
	/*
	 polynomial: 0x04C11DB7 with reversed ordering,
	 used by ethernet (IEEE 802.3), gzip, zip, png, etc
	*/
	X86_CRC32B,
	/*
	 polynomial: 0x1EDC6F41 with reversed ordering,
	 used by iSCSI, SCTP, Btrfs, ext4, etc
	*/
	X86_CRC32C,
	X86_CRC32_MAX,
} X86_CRC32_TYPE;

#ifdef ZEND_INTRIN_SSE4_2_PCLMUL_FUNC_PTR
PHP_MINIT_FUNCTION(crc32_x86_intrin);
#endif

#if defined(ZEND_INTRIN_SSE4_2_PCLMUL_NATIVE) || defined(ZEND_INTRIN_SSE4_2_PCLMUL_RESOLVER)
/* Return the size processed by SIMD routine */
size_t crc32_x86_simd_update(X86_CRC32_TYPE type, uint32_t *crc, const unsigned char *p, size_t nr);
#else
static inline size_t crc32_x86_simd_update(X86_CRC32_TYPE type, uint32_t *crc, const unsigned char *p, size_t nr)
{
	return 0;
}
#endif

#endif
ext/standard/html.h000064400000004563151730542620010276 0ustar00/*
   +----------------------------------------------------------------------+
   | Copyright (c) The PHP Group                                          |
   +----------------------------------------------------------------------+
   | This source file is subject to version 3.01 of the PHP license,      |
   | that is bundled with this package in the file LICENSE, and is        |
   | available through the world-wide-web at the following url:           |
   | https://www.php.net/license/3_01.txt                                 |
   | If you did not receive a copy of the PHP license and are unable to   |
   | obtain it through the world-wide-web, please send a note to          |
   | license@php.net so we can mail you a copy immediately.               |
   +----------------------------------------------------------------------+
   | Author: Rasmus Lerdorf <rasmus@lerdorf.on.ca>                        |
   +----------------------------------------------------------------------+
*/

#ifndef HTML_H
#define HTML_H

#define ENT_HTML_QUOTE_NONE			0
#define ENT_HTML_QUOTE_SINGLE		1
#define ENT_HTML_QUOTE_DOUBLE		2
#define ENT_HTML_IGNORE_ERRORS		4
#define ENT_HTML_SUBSTITUTE_ERRORS	8
#define ENT_HTML_DOC_TYPE_MASK		(16|32)
#define ENT_HTML_DOC_HTML401		0
#define ENT_HTML_DOC_XML1			16
#define ENT_HTML_DOC_XHTML			32
#define ENT_HTML_DOC_HTML5			(16|32)
/* reserve bit 6 */
#define ENT_HTML_SUBSTITUTE_DISALLOWED_CHARS	128

#define PHP_HTML_SPECIALCHARS 	0
#define PHP_HTML_ENTITIES	 	1

#define ENT_COMPAT		ENT_HTML_QUOTE_DOUBLE
#define ENT_QUOTES		(ENT_HTML_QUOTE_DOUBLE | ENT_HTML_QUOTE_SINGLE)
#define ENT_NOQUOTES	ENT_HTML_QUOTE_NONE
#define ENT_IGNORE		ENT_HTML_IGNORE_ERRORS
#define ENT_SUBSTITUTE	ENT_HTML_SUBSTITUTE_ERRORS
#define ENT_HTML401		0
#define ENT_XML1		16
#define ENT_XHTML		32
#define ENT_HTML5		(16|32)
#define ENT_DISALLOWED	128

PHPAPI zend_string *php_escape_html_entities(const unsigned char *old, size_t oldlen, int all, int flags, const char *hint_charset);
PHPAPI zend_string *php_escape_html_entities_ex(const unsigned char *old, size_t oldlen, int all, int flags, const char *hint_charset, bool double_encode, bool quiet);
PHPAPI zend_string *php_unescape_html_entities(zend_string *str, int all, int flags, const char *hint_charset);
PHPAPI unsigned int php_next_utf8_char(const unsigned char *str, size_t str_len, size_t *cursor, zend_result *status);

#endif /* HTML_H */
ext/standard/html_tables.h000064400001660415151730542620011635 0ustar00/*
   +----------------------------------------------------------------------+
   | Copyright (c) The PHP Group                                          |
   +----------------------------------------------------------------------+
   | This source file is subject to version 3.01 of the PHP license,      |
   | that is bundled with this package in the file LICENSE, and is        |
   | available through the world-wide-web at the following url:           |
   | https://www.php.net/license/3_01.txt                                 |
   | If you did not receive a copy of the PHP license and are unable to   |
   | obtain it through the world-wide-web, please send a note to          |
   | license@php.net so we can mail you a copy immediately.               |
   +----------------------------------------------------------------------+
*/

#ifndef HTML_TABLES_H
#define HTML_TABLES_H

/**************************************************************************
***************************************************************************
**        THIS FILE IS AUTOMATICALLY GENERATED. DO NOT MODIFY IT.        **
***************************************************************************
** Please change html_tables/html_table_gen.php instead and then         **
** run it in order to generate this file                                 **
***************************************************************************
**************************************************************************/

enum entity_charset { cs_utf_8, cs_8859_1, cs_cp1252, cs_8859_15, cs_cp1251,
					  cs_8859_5, cs_cp866, cs_macroman, cs_koi8r, cs_big5,
					  cs_gb2312, cs_big5hkscs, cs_sjis, cs_eucjp,
					  cs_numelems /* used to count the number of charsets */
					};
#define CHARSET_UNICODE_COMPAT(cs)	((cs) <= cs_8859_1)
#define CHARSET_SINGLE_BYTE(cs)		((cs) > cs_utf_8 && (cs) < cs_big5)
#define CHARSET_PARTIAL_SUPPORT(cs)	((cs) >= cs_big5)

static const struct {
	const char *codeset;
	uint32_t codeset_len;
	enum entity_charset charset;
} charset_map[] = {
	{ "ISO-8859-1",		sizeof("ISO-8859-1")-1,		cs_8859_1 },
	{ "ISO8859-1",		sizeof("ISO8859-1")-1,		cs_8859_1 },
	{ "ISO-8859-15",	sizeof("ISO-8859-15")-1,	cs_8859_15 },
	{ "ISO8859-15",		sizeof("ISO8859-15")-1,		cs_8859_15 },
	{ "utf-8",			sizeof("utf-8")-1,			cs_utf_8 },
	{ "cp1252", 		sizeof("cp1252")-1, 		cs_cp1252 },
	{ "Windows-1252",	sizeof("Windows-1252")-1,	cs_cp1252 },
	{ "1252",			sizeof("1252")-1,			cs_cp1252 },
	{ "BIG5",			sizeof("BIG5")-1,			cs_big5 },
	{ "950",			sizeof("950")-1,			cs_big5 },
	{ "GB2312",			sizeof("GB2312")-1,			cs_gb2312 },
	{ "936",			sizeof("936")-1,			cs_gb2312 },
	{ "BIG5-HKSCS",		sizeof("BIG5-HKSCS")-1,		cs_big5hkscs },
	{ "Shift_JIS",		sizeof("Shift_JIS")-1,		cs_sjis },
	{ "SJIS",			sizeof("SJIS")-1,			cs_sjis },
	{ "932",			sizeof("932")-1,			cs_sjis },
	{ "SJIS-win",		sizeof("SJIS-win")-1,		cs_sjis },
	{ "CP932",			sizeof("CP932")-1,			cs_sjis },
	{ "EUCJP",			sizeof("EUCJP")-1,			cs_eucjp },
	{ "EUC-JP",			sizeof("EUC-JP")-1,			cs_eucjp },
	{ "eucJP-win",		sizeof("eucJP-win")-1,		cs_eucjp },
	{ "KOI8-R",			sizeof("KOI8-R")-1,			cs_koi8r },
	{ "koi8-ru",		sizeof("koi8-ru")-1,		cs_koi8r },
	{ "koi8r",			sizeof("koi8r")-1,			cs_koi8r },
	{ "cp1251",			sizeof("cp1251")-1,			cs_cp1251 },
	{ "Windows-1251",	sizeof("Windows-1251")-1,	cs_cp1251 },
	{ "win-1251",		sizeof("win-1251")-1,		cs_cp1251 },
	{ "iso8859-5",		sizeof("iso8859-5")-1,		cs_8859_5 },
	{ "iso-8859-5",		sizeof("iso-8859-5")-1,		cs_8859_5 },
	{ "cp866",			sizeof("cp866")-1,			cs_cp866 },
	{ "866",			sizeof("866")-1,			cs_cp866 },
	{ "ibm866",			sizeof("ibm866")-1,			cs_cp866 },
	{ "MacRoman",		sizeof("MacRoman")-1,		cs_macroman }
};

/* longest entity name length excluding & and ; */
#define LONGEST_ENTITY_LENGTH 31

/* Definitions for mappings *to* Unicode.
 * The origin charset must have at most 256 code points.
 * The multi-byte encodings are not supported */
typedef struct {
    unsigned short uni_cp[64];
} enc_to_uni_stage2;

typedef struct {
    const enc_to_uni_stage2 *inner[4];
} enc_to_uni;

/* bits 7-8 bits (only single bytes encodings supported )*/
#define ENT_ENC_TO_UNI_STAGE1(k) ((k & 0xC0) >> 6)
/* bits 1-6 */
#define ENT_ENC_TO_UNI_STAGE2(k) ((k) & 0x3F)

/* {{{ Mappings *to* Unicode for ISO-8859-1 */

/* {{{ Stage 2 tables for ISO-8859-1 */

static const enc_to_uni_stage2 enc_to_uni_s2_iso88591_00 = { {
	0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005,
	0x0006, 0x0007, 0x0008, 0x0009, 0x000A, 0x000B,
	0x000C, 0x000D, 0x000E, 0x000F, 0x0010, 0x0011,
	0x0012, 0x0013, 0x0014, 0x0015, 0x0016, 0x0017,
	0x0018, 0x0019, 0x001A, 0x001B, 0x001C, 0x001D,
	0x001E, 0x001F, 0x0020, 0x0021, 0x0022, 0x0023,
	0x0024, 0x0025, 0x0026, 0x0027, 0x0028, 0x0029,
	0x002A, 0x002B, 0x002C, 0x002D, 0x002E, 0x002F,
	0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035,
	0x0036, 0x0037, 0x0038, 0x0039, 0x003A, 0x003B,
	0x003C, 0x003D, 0x003E, 0x003F,
} };

static const enc_to_uni_stage2 enc_to_uni_s2_iso88591_40 = { {
	0x0040, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045,
	0x0046, 0x0047, 0x0048, 0x0049, 0x004A, 0x004B,
	0x004C, 0x004D, 0x004E, 0x004F, 0x0050, 0x0051,
	0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057,
	0x0058, 0x0059, 0x005A, 0x005B, 0x005C, 0x005D,
	0x005E, 0x005F, 0x0060, 0x0061, 0x0062, 0x0063,
	0x0064, 0x0065, 0x0066, 0x0067, 0x0068, 0x0069,
	0x006A, 0x006B, 0x006C, 0x006D, 0x006E, 0x006F,
	0x0070, 0x0071, 0x0072, 0x0073, 0x0074, 0x0075,
	0x0076, 0x0077, 0x0078, 0x0079, 0x007A, 0x007B,
	0x007C, 0x007D, 0x007E, 0x007F,
} };

static const enc_to_uni_stage2 enc_to_uni_s2_iso88591_80 = { {
	0x0080, 0x0081, 0x0082, 0x0083, 0x0084, 0x0085,
	0x0086, 0x0087, 0x0088, 0x0089, 0x008A, 0x008B,
	0x008C, 0x008D, 0x008E, 0x008F, 0x0090, 0x0091,
	0x0092, 0x0093, 0x0094, 0x0095, 0x0096, 0x0097,
	0x0098, 0x0099, 0x009A, 0x009B, 0x009C, 0x009D,
	0x009E, 0x009F, 0x00A0, 0x00A1, 0x00A2, 0x00A3,
	0x00A4, 0x00A5, 0x00A6, 0x00A7, 0x00A8, 0x00A9,
	0x00AA, 0x00AB, 0x00AC, 0x00AD, 0x00AE, 0x00AF,
	0x00B0, 0x00B1, 0x00B2, 0x00B3, 0x00B4, 0x00B5,
	0x00B6, 0x00B7, 0x00B8, 0x00B9, 0x00BA, 0x00BB,
	0x00BC, 0x00BD, 0x00BE, 0x00BF,
} };

static const enc_to_uni_stage2 enc_to_uni_s2_iso88591_C0 = { {
	0x00C0, 0x00C1, 0x00C2, 0x00C3, 0x00C4, 0x00C5,
	0x00C6, 0x00C7, 0x00C8, 0x00C9, 0x00CA, 0x00CB,
	0x00CC, 0x00CD, 0x00CE, 0x00CF, 0x00D0, 0x00D1,
	0x00D2, 0x00D3, 0x00D4, 0x00D5, 0x00D6, 0x00D7,
	0x00D8, 0x00D9, 0x00DA, 0x00DB, 0x00DC, 0x00DD,
	0x00DE, 0x00DF, 0x00E0, 0x00E1, 0x00E2, 0x00E3,
	0x00E4, 0x00E5, 0x00E6, 0x00E7, 0x00E8, 0x00E9,
	0x00EA, 0x00EB, 0x00EC, 0x00ED, 0x00EE, 0x00EF,
	0x00F0, 0x00F1, 0x00F2, 0x00F3, 0x00F4, 0x00F5,
	0x00F6, 0x00F7, 0x00F8, 0x00F9, 0x00FA, 0x00FB,
	0x00FC, 0x00FD, 0x00FE, 0x00FF,
} };

/* end of stage 2 tables for ISO-8859-1 }}} */

/* {{{ Stage 1 table for ISO-8859-1 */
static const enc_to_uni enc_to_uni_iso88591 = { {
	&enc_to_uni_s2_iso88591_00,
	&enc_to_uni_s2_iso88591_40,
	&enc_to_uni_s2_iso88591_80,
	&enc_to_uni_s2_iso88591_C0 }
};
/* end of stage 1 table for ISO-8859-1 }}} */

/* {{{ Mappings *to* Unicode for ISO-8859-5 */

/* {{{ Stage 2 tables for ISO-8859-5 */

static const enc_to_uni_stage2 enc_to_uni_s2_iso88595_80 = { {
	0x0080, 0x0081, 0x0082, 0x0083, 0x0084, 0x0085,
	0x0086, 0x0087, 0x0088, 0x0089, 0x008A, 0x008B,
	0x008C, 0x008D, 0x008E, 0x008F, 0x0090, 0x0091,
	0x0092, 0x0093, 0x0094, 0x0095, 0x0096, 0x0097,
	0x0098, 0x0099, 0x009A, 0x009B, 0x009C, 0x009D,
	0x009E, 0x009F, 0x00A0, 0x0401, 0x0402, 0x0403,
	0x0404, 0x0405, 0x0406, 0x0407, 0x0408, 0x0409,
	0x040A, 0x040B, 0x040C, 0x00AD, 0x040E, 0x040F,
	0x0410, 0x0411, 0x0412, 0x0413, 0x0414, 0x0415,
	0x0416, 0x0417, 0x0418, 0x0419, 0x041A, 0x041B,
	0x041C, 0x041D, 0x041E, 0x041F,
} };

static const enc_to_uni_stage2 enc_to_uni_s2_iso88595_C0 = { {
	0x0420, 0x0421, 0x0422, 0x0423, 0x0424, 0x0425,
	0x0426, 0x0427, 0x0428, 0x0429, 0x042A, 0x042B,
	0x042C, 0x042D, 0x042E, 0x042F, 0x0430, 0x0431,
	0x0432, 0x0433, 0x0434, 0x0435, 0x0436, 0x0437,
	0x0438, 0x0439, 0x043A, 0x043B, 0x043C, 0x043D,
	0x043E, 0x043F, 0x0440, 0x0441, 0x0442, 0x0443,
	0x0444, 0x0445, 0x0446, 0x0447, 0x0448, 0x0449,
	0x044A, 0x044B, 0x044C, 0x044D, 0x044E, 0x044F,
	0x2116, 0x0451, 0x0452, 0x0453, 0x0454, 0x0455,
	0x0456, 0x0457, 0x0458, 0x0459, 0x045A, 0x045B,
	0x045C, 0x00A7, 0x045E, 0x045F,
} };

/* end of stage 2 tables for ISO-8859-5 }}} */

/* {{{ Stage 1 table for ISO-8859-5 */
static const enc_to_uni enc_to_uni_iso88595 = { {
	&enc_to_uni_s2_iso88591_00,
	&enc_to_uni_s2_iso88591_40,
	&enc_to_uni_s2_iso88595_80,
	&enc_to_uni_s2_iso88595_C0 }
};
/* end of stage 1 table for ISO-8859-5 }}} */

/* {{{ Mappings *to* Unicode for ISO-8859-15 */

/* {{{ Stage 2 tables for ISO-8859-15 */

static const enc_to_uni_stage2 enc_to_uni_s2_iso885915_80 = { {
	0x0080, 0x0081, 0x0082, 0x0083, 0x0084, 0x0085,
	0x0086, 0x0087, 0x0088, 0x0089, 0x008A, 0x008B,
	0x008C, 0x008D, 0x008E, 0x008F, 0x0090, 0x0091,
	0x0092, 0x0093, 0x0094, 0x0095, 0x0096, 0x0097,
	0x0098, 0x0099, 0x009A, 0x009B, 0x009C, 0x009D,
	0x009E, 0x009F, 0x00A0, 0x00A1, 0x00A2, 0x00A3,
	0x20AC, 0x00A5, 0x0160, 0x00A7, 0x0161, 0x00A9,
	0x00AA, 0x00AB, 0x00AC, 0x00AD, 0x00AE, 0x00AF,
	0x00B0, 0x00B1, 0x00B2, 0x00B3, 0x017D, 0x00B5,
	0x00B6, 0x00B7, 0x017E, 0x00B9, 0x00BA, 0x00BB,
	0x0152, 0x0153, 0x0178, 0x00BF,
} };

/* end of stage 2 tables for ISO-8859-15 }}} */

/* {{{ Stage 1 table for ISO-8859-15 */
static const enc_to_uni enc_to_uni_iso885915 = { {
	&enc_to_uni_s2_iso88591_00,
	&enc_to_uni_s2_iso88591_40,
	&enc_to_uni_s2_iso885915_80,
	&enc_to_uni_s2_iso88591_C0 }
};
/* end of stage 1 table for ISO-8859-15 }}} */

/* {{{ Mappings *to* Unicode for Windows-1252 */

/* {{{ Stage 2 tables for Windows-1252 */

static const enc_to_uni_stage2 enc_to_uni_s2_win1252_80 = { {
	0x20AC, 0xFFFF, 0x201A, 0x0192, 0x201E, 0x2026,
	0x2020, 0x2021, 0x02C6, 0x2030, 0x0160, 0x2039,
	0x0152, 0xFFFF, 0x017D, 0xFFFF, 0xFFFF, 0x2018,
	0x2019, 0x201C, 0x201D, 0x2022, 0x2013, 0x2014,
	0x02DC, 0x2122, 0x0161, 0x203A, 0x0153, 0xFFFF,
	0x017E, 0x0178, 0x00A0, 0x00A1, 0x00A2, 0x00A3,
	0x00A4, 0x00A5, 0x00A6, 0x00A7, 0x00A8, 0x00A9,
	0x00AA, 0x00AB, 0x00AC, 0x00AD, 0x00AE, 0x00AF,
	0x00B0, 0x00B1, 0x00B2, 0x00B3, 0x00B4, 0x00B5,
	0x00B6, 0x00B7, 0x00B8, 0x00B9, 0x00BA, 0x00BB,
	0x00BC, 0x00BD, 0x00BE, 0x00BF,
} };

/* end of stage 2 tables for Windows-1252 }}} */

/* {{{ Stage 1 table for Windows-1252 */
static const enc_to_uni enc_to_uni_win1252 = { {
	&enc_to_uni_s2_iso88591_00,
	&enc_to_uni_s2_iso88591_40,
	&enc_to_uni_s2_win1252_80,
	&enc_to_uni_s2_iso88591_C0 }
};
/* end of stage 1 table for Windows-1252 }}} */

/* {{{ Mappings *to* Unicode for Windows-1251 */

/* {{{ Stage 2 tables for Windows-1251 */

static const enc_to_uni_stage2 enc_to_uni_s2_win1251_80 = { {
	0x0402, 0x0403, 0x201A, 0x0453, 0x201E, 0x2026,
	0x2020, 0x2021, 0x20AC, 0x2030, 0x0409, 0x2039,
	0x040A, 0x040C, 0x040B, 0x040F, 0x0452, 0x2018,
	0x2019, 0x201C, 0x201D, 0x2022, 0x2013, 0x2014,
	0xFFFF, 0x2122, 0x0459, 0x203A, 0x045A, 0x045C,
	0x045B, 0x045F, 0x00A0, 0x040E, 0x045E, 0x0408,
	0x00A4, 0x0490, 0x00A6, 0x00A7, 0x0401, 0x00A9,
	0x0404, 0x00AB, 0x00AC, 0x00AD, 0x00AE, 0x0407,
	0x00B0, 0x00B1, 0x0406, 0x0456, 0x0491, 0x00B5,
	0x00B6, 0x00B7, 0x0451, 0x2116, 0x0454, 0x00BB,
	0x0458, 0x0405, 0x0455, 0x0457,
} };

static const enc_to_uni_stage2 enc_to_uni_s2_win1251_C0 = { {
	0x0410, 0x0411, 0x0412, 0x0413, 0x0414, 0x0415,
	0x0416, 0x0417, 0x0418, 0x0419, 0x041A, 0x041B,
	0x041C, 0x041D, 0x041E, 0x041F, 0x0420, 0x0421,
	0x0422, 0x0423, 0x0424, 0x0425, 0x0426, 0x0427,
	0x0428, 0x0429, 0x042A, 0x042B, 0x042C, 0x042D,
	0x042E, 0x042F, 0x0430, 0x0431, 0x0432, 0x0433,
	0x0434, 0x0435, 0x0436, 0x0437, 0x0438, 0x0439,
	0x043A, 0x043B, 0x043C, 0x043D, 0x043E, 0x043F,
	0x0440, 0x0441, 0x0442, 0x0443, 0x0444, 0x0445,
	0x0446, 0x0447, 0x0448, 0x0449, 0x044A, 0x044B,
	0x044C, 0x044D, 0x044E, 0x044F,
} };

/* end of stage 2 tables for Windows-1251 }}} */

/* {{{ Stage 1 table for Windows-1251 */
static const enc_to_uni enc_to_uni_win1251 = { {
	&enc_to_uni_s2_iso88591_00,
	&enc_to_uni_s2_iso88591_40,
	&enc_to_uni_s2_win1251_80,
	&enc_to_uni_s2_win1251_C0 }
};
/* end of stage 1 table for Windows-1251 }}} */

/* {{{ Mappings *to* Unicode for KOI8-R */

/* {{{ Stage 2 tables for KOI8-R */

static const enc_to_uni_stage2 enc_to_uni_s2_koi8r_80 = { {
	0x2500, 0x2502, 0x250C, 0x2510, 0x2514, 0x2518,
	0x251C, 0x2524, 0x252C, 0x2534, 0x253C, 0x2580,
	0x2584, 0x2588, 0x258C, 0x2590, 0x2591, 0x2592,
	0x2593, 0x2320, 0x25A0, 0x2219, 0x221A, 0x2248,
	0x2264, 0x2265, 0x00A0, 0x2321, 0x00B0, 0x00B2,
	0x00B7, 0x00F7, 0x2550, 0x2551, 0x2552, 0x0451,
	0x2553, 0x2554, 0x2555, 0x2556, 0x2557, 0x2558,
	0x2559, 0x255A, 0x255B, 0x255C, 0x255D, 0x255E,
	0x255F, 0x2560, 0x2561, 0x0401, 0x2562, 0x2563,
	0x2564, 0x2565, 0x2566, 0x2567, 0x2568, 0x2569,
	0x256A, 0x256B, 0x256C, 0x00A9,
} };

static const enc_to_uni_stage2 enc_to_uni_s2_koi8r_C0 = { {
	0x044E, 0x0430, 0x0431, 0x0446, 0x0434, 0x0435,
	0x0444, 0x0433, 0x0445, 0x0438, 0x0439, 0x043A,
	0x043B, 0x043C, 0x043D, 0x043E, 0x043F, 0x044F,
	0x0440, 0x0441, 0x0442, 0x0443, 0x0436, 0x0432,
	0x044C, 0x044B, 0x0437, 0x0448, 0x044D, 0x0449,
	0x0447, 0x044A, 0x042E, 0x0410, 0x0411, 0x0426,
	0x0414, 0x0415, 0x0424, 0x0413, 0x0425, 0x0418,
	0x0419, 0x041A, 0x041B, 0x041C, 0x041D, 0x041E,
	0x041F, 0x042F, 0x0420, 0x0421, 0x0422, 0x0423,
	0x0416, 0x0412, 0x042C, 0x042B, 0x0417, 0x0428,
	0x042D, 0x0429, 0x0427, 0x042A,
} };

/* end of stage 2 tables for KOI8-R }}} */

/* {{{ Stage 1 table for KOI8-R */
static const enc_to_uni enc_to_uni_koi8r = { {
	&enc_to_uni_s2_iso88591_00,
	&enc_to_uni_s2_iso88591_40,
	&enc_to_uni_s2_koi8r_80,
	&enc_to_uni_s2_koi8r_C0 }
};
/* end of stage 1 table for KOI8-R }}} */

/* {{{ Mappings *to* Unicode for CP-866 */

/* {{{ Stage 2 tables for CP-866 */

static const enc_to_uni_stage2 enc_to_uni_s2_cp866_80 = { {
	0x0410, 0x0411, 0x0412, 0x0413, 0x0414, 0x0415,
	0x0416, 0x0417, 0x0418, 0x0419, 0x041A, 0x041B,
	0x041C, 0x041D, 0x041E, 0x041F, 0x0420, 0x0421,
	0x0422, 0x0423, 0x0424, 0x0425, 0x0426, 0x0427,
	0x0428, 0x0429, 0x042A, 0x042B, 0x042C, 0x042D,
	0x042E, 0x042F, 0x0430, 0x0431, 0x0432, 0x0433,
	0x0434, 0x0435, 0x0436, 0x0437, 0x0438, 0x0439,
	0x043A, 0x043B, 0x043C, 0x043D, 0x043E, 0x043F,
	0x2591, 0x2592, 0x2593, 0x2502, 0x2524, 0x2561,
	0x2562, 0x2556, 0x2555, 0x2563, 0x2551, 0x2557,
	0x255D, 0x255C, 0x255B, 0x2510,
} };

static const enc_to_uni_stage2 enc_to_uni_s2_cp866_C0 = { {
	0x2514, 0x2534, 0x252C, 0x251C, 0x2500, 0x253C,
	0x255E, 0x255F, 0x255A, 0x2554, 0x2569, 0x2566,
	0x2560, 0x2550, 0x256C, 0x2567, 0x2568, 0x2564,
	0x2565, 0x2559, 0x2558, 0x2552, 0x2553, 0x256B,
	0x256A, 0x2518, 0x250C, 0x2588, 0x2584, 0x258C,
	0x2590, 0x2580, 0x0440, 0x0441, 0x0442, 0x0443,
	0x0444, 0x0445, 0x0446, 0x0447, 0x0448, 0x0449,
	0x044A, 0x044B, 0x044C, 0x044D, 0x044E, 0x044F,
	0x0401, 0x0451, 0x0404, 0x0454, 0x0407, 0x0457,
	0x040E, 0x045E, 0x00B0, 0x2219, 0x00B7, 0x221A,
	0x2116, 0x00A4, 0x25A0, 0x00A0,
} };

/* end of stage 2 tables for CP-866 }}} */

/* {{{ Stage 1 table for CP-866 */
static const enc_to_uni enc_to_uni_cp866 = { {
	&enc_to_uni_s2_iso88591_00,
	&enc_to_uni_s2_iso88591_40,
	&enc_to_uni_s2_cp866_80,
	&enc_to_uni_s2_cp866_C0 }
};
/* end of stage 1 table for CP-866 }}} */

/* {{{ Mappings *to* Unicode for MacRoman */

/* {{{ Stage 2 tables for MacRoman */

static const enc_to_uni_stage2 enc_to_uni_s2_macroman_00 = { {
	0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF,
	0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF,
	0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF,
	0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF,
	0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF,
	0xFFFF, 0xFFFF, 0x0020, 0x0021, 0x0022, 0x0023,
	0x0024, 0x0025, 0x0026, 0x0027, 0x0028, 0x0029,
	0x002A, 0x002B, 0x002C, 0x002D, 0x002E, 0x002F,
	0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035,
	0x0036, 0x0037, 0x0038, 0x0039, 0x003A, 0x003B,
	0x003C, 0x003D, 0x003E, 0x003F,
} };

static const enc_to_uni_stage2 enc_to_uni_s2_macroman_40 = { {
	0x0040, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045,
	0x0046, 0x0047, 0x0048, 0x0049, 0x004A, 0x004B,
	0x004C, 0x004D, 0x004E, 0x004F, 0x0050, 0x0051,
	0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057,
	0x0058, 0x0059, 0x005A, 0x005B, 0x005C, 0x005D,
	0x005E, 0x005F, 0x0060, 0x0061, 0x0062, 0x0063,
	0x0064, 0x0065, 0x0066, 0x0067, 0x0068, 0x0069,
	0x006A, 0x006B, 0x006C, 0x006D, 0x006E, 0x006F,
	0x0070, 0x0071, 0x0072, 0x0073, 0x0074, 0x0075,
	0x0076, 0x0077, 0x0078, 0x0079, 0x007A, 0x007B,
	0x007C, 0x007D, 0x007E, 0xFFFF,
} };

static const enc_to_uni_stage2 enc_to_uni_s2_macroman_80 = { {
	0x00C4, 0x00C5, 0x00C7, 0x00C9, 0x00D1, 0x00D6,
	0x00DC, 0x00E1, 0x00E0, 0x00E2, 0x00E4, 0x00E3,
	0x00E5, 0x00E7, 0x00E9, 0x00E8, 0x00EA, 0x00EB,
	0x00ED, 0x00EC, 0x00EE, 0x00EF, 0x00F1, 0x00F3,
	0x00F2, 0x00F4, 0x00F6, 0x00F5, 0x00FA, 0x00F9,
	0x00FB, 0x00FC, 0x2020, 0x00B0, 0x00A2, 0x00A3,
	0x00A7, 0x2022, 0x00B6, 0x00DF, 0x00AE, 0x00A9,
	0x2122, 0x00B4, 0x00A8, 0x2260, 0x00C6, 0x00D8,
	0x221E, 0x00B1, 0x2264, 0x2265, 0x00A5, 0x00B5,
	0x2202, 0x2211, 0x220F, 0x03C0, 0x222B, 0x00AA,
	0x00BA, 0x03A9, 0x00E6, 0x00F8,
} };

static const enc_to_uni_stage2 enc_to_uni_s2_macroman_C0 = { {
	0x00BF, 0x00A1, 0x00AC, 0x221A, 0x0192, 0x2248,
	0x2206, 0x00AB, 0x00BB, 0x2026, 0x00A0, 0x00C0,
	0x00C3, 0x00D5, 0x0152, 0x0153, 0x2013, 0x2014,
	0x201C, 0x201D, 0x2018, 0x2019, 0x00F7, 0x25CA,
	0x00FF, 0x0178, 0x2044, 0x20AC, 0x2039, 0x203A,
	0xFB01, 0xFB02, 0x2021, 0x00B7, 0x201A, 0x201E,
	0x2030, 0x00C2, 0x00CA, 0x00C1, 0x00CB, 0x00C8,
	0x00CD, 0x00CE, 0x00CF, 0x00CC, 0x00D3, 0x00D4,
	0xF8FF, 0x00D2, 0x00DA, 0x00DB, 0x00D9, 0x0131,
	0x02C6, 0x02DC, 0x00AF, 0x02D8, 0x02D9, 0x02DA,
	0x00B8, 0x02DD, 0x02DB, 0x02C7,
} };

/* end of stage 2 tables for MacRoman }}} */

/* {{{ Stage 1 table for MacRoman */
static const enc_to_uni enc_to_uni_macroman = { {
	&enc_to_uni_s2_macroman_00,
	&enc_to_uni_s2_macroman_40,
	&enc_to_uni_s2_macroman_80,
	&enc_to_uni_s2_macroman_C0 }
};
/* end of stage 1 table for MacRoman }}} */

/* {{{ Index of tables for encoding conversion */
static const enc_to_uni *const enc_to_uni_index[cs_numelems] = {
	NULL,
	&enc_to_uni_iso88591,
	&enc_to_uni_win1252,
	&enc_to_uni_iso885915,
	&enc_to_uni_win1251,
	&enc_to_uni_iso88595,
	&enc_to_uni_cp866,
	&enc_to_uni_macroman,
	&enc_to_uni_koi8r,
};
/* }}} */

/* Definitions for mappings *from* Unicode */

typedef struct {
	unsigned short un_code_point; /* we don't need bigger */
	unsigned char cs_code; /* currently, we only have maps to single-byte encodings */
} uni_to_enc;

/* {{{ Mappings *from* Unicode for ISO-8859-15 */
static const uni_to_enc unimap_iso885915[] = {
	{ 0x00A5, 0xA5 },	/* yen sign */
	{ 0x00A7, 0xA7 },	/* section sign */
	{ 0x00A9, 0xA9 },	/* copyright sign */
	{ 0x00AA, 0xAA },	/* feminine ordinal indicator */
	{ 0x00AB, 0xAB },	/* left-pointing double angle quotation mark */
	{ 0x00AC, 0xAC },	/* not sign */
	{ 0x00AD, 0xAD },	/* soft hyphen */
	{ 0x00AE, 0xAE },	/* registered sign */
	{ 0x00AF, 0xAF },	/* macron */
	{ 0x00B0, 0xB0 },	/* degree sign */
	{ 0x00B1, 0xB1 },	/* plus-minus sign */
	{ 0x00B2, 0xB2 },	/* superscript two */
	{ 0x00B3, 0xB3 },	/* superscript three */
	{ 0x00B5, 0xB5 },	/* micro sign */
	{ 0x00B6, 0xB6 },	/* pilcrow sign */
	{ 0x00B7, 0xB7 },	/* middle dot */
	{ 0x00B9, 0xB9 },	/* superscript one */
	{ 0x00BA, 0xBA },	/* masculine ordinal indicator */
	{ 0x00BB, 0xBB },	/* right-pointing double angle quotation mark */
	{ 0x0152, 0xBC },	/* latin capital ligature oe */
	{ 0x0153, 0xBD },	/* latin small ligature oe */
	{ 0x0160, 0xA6 },	/* latin capital letter s with caron */
	{ 0x0161, 0xA8 },	/* latin small letter s with caron */
	{ 0x0178, 0xBE },	/* latin capital letter y with diaeresis */
	{ 0x017D, 0xB4 },	/* latin capital letter z with caron */
	{ 0x017E, 0xB8 },	/* latin small letter z with caron */
	{ 0x20AC, 0xA4 },	/* euro sign */
};
/* {{{ end of mappings *from* Unicode for ISO-8859-15 */

/* {{{ Mappings *from* Unicode for Windows-1252 */
static const uni_to_enc unimap_win1252[] = {
	{ 0x0152, 0x8C },	/* latin capital ligature oe */
	{ 0x0153, 0x9C },	/* latin small ligature oe */
	{ 0x0160, 0x8A },	/* latin capital letter s with caron */
	{ 0x0161, 0x9A },	/* latin small letter s with caron */
	{ 0x0178, 0x9F },	/* latin capital letter y with diaeresis */
	{ 0x017D, 0x8E },	/* latin capital letter z with caron */
	{ 0x017E, 0x9E },	/* latin small letter z with caron */
	{ 0x0192, 0x83 },	/* latin small letter f with hook */
	{ 0x02C6, 0x88 },	/* modifier letter circumflex accent */
	{ 0x02DC, 0x98 },	/* small tilde */
	{ 0x2013, 0x96 },	/* en dash */
	{ 0x2014, 0x97 },	/* em dash */
	{ 0x2018, 0x91 },	/* left single quotation mark */
	{ 0x2019, 0x92 },	/* right single quotation mark */
	{ 0x201A, 0x82 },	/* single low-9 quotation mark */
	{ 0x201C, 0x93 },	/* left double quotation mark */
	{ 0x201D, 0x94 },	/* right double quotation mark */
	{ 0x201E, 0x84 },	/* double low-9 quotation mark */
	{ 0x2020, 0x86 },	/* dagger */
	{ 0x2021, 0x87 },	/* double dagger */
	{ 0x2022, 0x95 },	/* bullet */
	{ 0x2026, 0x85 },	/* horizontal ellipsis */
	{ 0x2030, 0x89 },	/* per mille sign */
	{ 0x2039, 0x8B },	/* single left-pointing angle quotation mark */
	{ 0x203A, 0x9B },	/* single right-pointing angle quotation mark */
	{ 0x20AC, 0x80 },	/* euro sign */
	{ 0x2122, 0x99 },	/* trade mark sign */
};
/* {{{ end of mappings *from* Unicode for Windows-1252 */

/* {{{ Mappings *from* Unicode for Windows-1251 */
static const uni_to_enc unimap_win1251[] = {
	{ 0x00A0, 0xA0 },	/* no-break space */
	{ 0x00A4, 0xA4 },	/* currency sign */
	{ 0x00A6, 0xA6 },	/* broken bar */
	{ 0x00A7, 0xA7 },	/* section sign */
	{ 0x00A9, 0xA9 },	/* copyright sign */
	{ 0x00AB, 0xAB },	/* left-pointing double angle quotation mark */
	{ 0x00AC, 0xAC },	/* not sign */
	{ 0x00AD, 0xAD },	/* soft hyphen */
	{ 0x00AE, 0xAE },	/* registered sign */
	{ 0x00B0, 0xB0 },	/* degree sign */
	{ 0x00B1, 0xB1 },	/* plus-minus sign */
	{ 0x00B5, 0xB5 },	/* micro sign */
	{ 0x00B6, 0xB6 },	/* pilcrow sign */
	{ 0x00B7, 0xB7 },	/* middle dot */
	{ 0x00BB, 0xBB },	/* right-pointing double angle quotation mark */
	{ 0x0401, 0xA8 },	/* cyrillic capital letter io */
	{ 0x0402, 0x80 },	/* cyrillic capital letter dje */
	{ 0x0403, 0x81 },	/* cyrillic capital letter gje */
	{ 0x0404, 0xAA },	/* cyrillic capital letter ukrainian ie */
	{ 0x0405, 0xBD },	/* cyrillic capital letter dze */
	{ 0x0406, 0xB2 },	/* cyrillic capital letter byelorussian-ukrainian i */
	{ 0x0407, 0xAF },	/* cyrillic capital letter yi */
	{ 0x0408, 0xA3 },	/* cyrillic capital letter je */
	{ 0x0409, 0x8A },	/* cyrillic capital letter lje */
	{ 0x040A, 0x8C },	/* cyrillic capital letter nje */
	{ 0x040B, 0x8E },	/* cyrillic capital letter tshe */
	{ 0x040C, 0x8D },	/* cyrillic capital letter kje */
	{ 0x040E, 0xA1 },	/* cyrillic capital letter short u */
	{ 0x040F, 0x8F },	/* cyrillic capital letter dzhe */
	{ 0x0410, 0xC0 },	/* cyrillic capital letter a */
	{ 0x0411, 0xC1 },	/* cyrillic capital letter be */
	{ 0x0412, 0xC2 },	/* cyrillic capital letter ve */
	{ 0x0413, 0xC3 },	/* cyrillic capital letter ghe */
	{ 0x0414, 0xC4 },	/* cyrillic capital letter de */
	{ 0x0415, 0xC5 },	/* cyrillic capital letter ie */
	{ 0x0416, 0xC6 },	/* cyrillic capital letter zhe */
	{ 0x0417, 0xC7 },	/* cyrillic capital letter ze */
	{ 0x0418, 0xC8 },	/* cyrillic capital letter i */
	{ 0x0419, 0xC9 },	/* cyrillic capital letter short i */
	{ 0x041A, 0xCA },	/* cyrillic capital letter ka */
	{ 0x041B, 0xCB },	/* cyrillic capital letter el */
	{ 0x041C, 0xCC },	/* cyrillic capital letter em */
	{ 0x041D, 0xCD },	/* cyrillic capital letter en */
	{ 0x041E, 0xCE },	/* cyrillic capital letter o */
	{ 0x041F, 0xCF },	/* cyrillic capital letter pe */
	{ 0x0420, 0xD0 },	/* cyrillic capital letter er */
	{ 0x0421, 0xD1 },	/* cyrillic capital letter es */
	{ 0x0422, 0xD2 },	/* cyrillic capital letter te */
	{ 0x0423, 0xD3 },	/* cyrillic capital letter u */
	{ 0x0424, 0xD4 },	/* cyrillic capital letter ef */
	{ 0x0425, 0xD5 },	/* cyrillic capital letter ha */
	{ 0x0426, 0xD6 },	/* cyrillic capital letter tse */
	{ 0x0427, 0xD7 },	/* cyrillic capital letter che */
	{ 0x0428, 0xD8 },	/* cyrillic capital letter sha */
	{ 0x0429, 0xD9 },	/* cyrillic capital letter shcha */
	{ 0x042A, 0xDA },	/* cyrillic capital letter hard sign */
	{ 0x042B, 0xDB },	/* cyrillic capital letter yeru */
	{ 0x042C, 0xDC },	/* cyrillic capital letter soft sign */
	{ 0x042D, 0xDD },	/* cyrillic capital letter e */
	{ 0x042E, 0xDE },	/* cyrillic capital letter yu */
	{ 0x042F, 0xDF },	/* cyrillic capital letter ya */
	{ 0x0430, 0xE0 },	/* cyrillic small letter a */
	{ 0x0431, 0xE1 },	/* cyrillic small letter be */
	{ 0x0432, 0xE2 },	/* cyrillic small letter ve */
	{ 0x0433, 0xE3 },	/* cyrillic small letter ghe */
	{ 0x0434, 0xE4 },	/* cyrillic small letter de */
	{ 0x0435, 0xE5 },	/* cyrillic small letter ie */
	{ 0x0436, 0xE6 },	/* cyrillic small letter zhe */
	{ 0x0437, 0xE7 },	/* cyrillic small letter ze */
	{ 0x0438, 0xE8 },	/* cyrillic small letter i */
	{ 0x0439, 0xE9 },	/* cyrillic small letter short i */
	{ 0x043A, 0xEA },	/* cyrillic small letter ka */
	{ 0x043B, 0xEB },	/* cyrillic small letter el */
	{ 0x043C, 0xEC },	/* cyrillic small letter em */
	{ 0x043D, 0xED },	/* cyrillic small letter en */
	{ 0x043E, 0xEE },	/* cyrillic small letter o */
	{ 0x043F, 0xEF },	/* cyrillic small letter pe */
	{ 0x0440, 0xF0 },	/* cyrillic small letter er */
	{ 0x0441, 0xF1 },	/* cyrillic small letter es */
	{ 0x0442, 0xF2 },	/* cyrillic small letter te */
	{ 0x0443, 0xF3 },	/* cyrillic small letter u */
	{ 0x0444, 0xF4 },	/* cyrillic small letter ef */
	{ 0x0445, 0xF5 },	/* cyrillic small letter ha */
	{ 0x0446, 0xF6 },	/* cyrillic small letter tse */
	{ 0x0447, 0xF7 },	/* cyrillic small letter che */
	{ 0x0448, 0xF8 },	/* cyrillic small letter sha */
	{ 0x0449, 0xF9 },	/* cyrillic small letter shcha */
	{ 0x044A, 0xFA },	/* cyrillic small letter hard sign */
	{ 0x044B, 0xFB },	/* cyrillic small letter yeru */
	{ 0x044C, 0xFC },	/* cyrillic small letter soft sign */
	{ 0x044D, 0xFD },	/* cyrillic small letter e */
	{ 0x044E, 0xFE },	/* cyrillic small letter yu */
	{ 0x044F, 0xFF },	/* cyrillic small letter ya */
	{ 0x0451, 0xB8 },	/* cyrillic small letter io */
	{ 0x0452, 0x90 },	/* cyrillic small letter dje */
	{ 0x0453, 0x83 },	/* cyrillic small letter gje */
	{ 0x0454, 0xBA },	/* cyrillic small letter ukrainian ie */
	{ 0x0455, 0xBE },	/* cyrillic small letter dze */
	{ 0x0456, 0xB3 },	/* cyrillic small letter byelorussian-ukrainian i */
	{ 0x0457, 0xBF },	/* cyrillic small letter yi */
	{ 0x0458, 0xBC },	/* cyrillic small letter je */
	{ 0x0459, 0x9A },	/* cyrillic small letter lje */
	{ 0x045A, 0x9C },	/* cyrillic small letter nje */
	{ 0x045B, 0x9E },	/* cyrillic small letter tshe */
	{ 0x045C, 0x9D },	/* cyrillic small letter kje */
	{ 0x045E, 0xA2 },	/* cyrillic small letter short u */
	{ 0x045F, 0x9F },	/* cyrillic small letter dzhe */
	{ 0x0490, 0xA5 },	/* cyrillic capital letter ghe with upturn */
	{ 0x0491, 0xB4 },	/* cyrillic small letter ghe with upturn */
	{ 0x2013, 0x96 },	/* en dash */
	{ 0x2014, 0x97 },	/* em dash */
	{ 0x2018, 0x91 },	/* left single quotation mark */
	{ 0x2019, 0x92 },	/* right single quotation mark */
	{ 0x201A, 0x82 },	/* single low-9 quotation mark */
	{ 0x201C, 0x93 },	/* left double quotation mark */
	{ 0x201D, 0x94 },	/* right double quotation mark */
	{ 0x201E, 0x84 },	/* double low-9 quotation mark */
	{ 0x2020, 0x86 },	/* dagger */
	{ 0x2021, 0x87 },	/* double dagger */
	{ 0x2022, 0x95 },	/* bullet */
	{ 0x2026, 0x85 },	/* horizontal ellipsis */
	{ 0x2030, 0x89 },	/* per mille sign */
	{ 0x2039, 0x8B },	/* single left-pointing angle quotation mark */
	{ 0x203A, 0x9B },	/* single right-pointing angle quotation mark */
	{ 0x20AC, 0x88 },	/* euro sign */
	{ 0x2116, 0xB9 },	/* numero sign */
	{ 0x2122, 0x99 },	/* trade mark sign */
};
/* {{{ end of mappings *from* Unicode for Windows-1251 */

/* {{{ Mappings *from* Unicode for KOI8-R */
static const uni_to_enc unimap_koi8r[] = {
	{ 0x00A0, 0x9A },	/* no-break space */
	{ 0x00A9, 0xBF },	/* copyright sign */
	{ 0x00B0, 0x9C },	/* degree sign */
	{ 0x00B2, 0x9D },	/* superscript two */
	{ 0x00B7, 0x9E },	/* middle dot */
	{ 0x00F7, 0x9F },	/* division sign */
	{ 0x0401, 0xB3 },	/* cyrillic capital letter io */
	{ 0x0410, 0xE1 },	/* cyrillic capital letter a */
	{ 0x0411, 0xE2 },	/* cyrillic capital letter be */
	{ 0x0412, 0xF7 },	/* cyrillic capital letter ve */
	{ 0x0413, 0xE7 },	/* cyrillic capital letter ghe */
	{ 0x0414, 0xE4 },	/* cyrillic capital letter de */
	{ 0x0415, 0xE5 },	/* cyrillic capital letter ie */
	{ 0x0416, 0xF6 },	/* cyrillic capital letter zhe */
	{ 0x0417, 0xFA },	/* cyrillic capital letter ze */
	{ 0x0418, 0xE9 },	/* cyrillic capital letter i */
	{ 0x0419, 0xEA },	/* cyrillic capital letter short i */
	{ 0x041A, 0xEB },	/* cyrillic capital letter ka */
	{ 0x041B, 0xEC },	/* cyrillic capital letter el */
	{ 0x041C, 0xED },	/* cyrillic capital letter em */
	{ 0x041D, 0xEE },	/* cyrillic capital letter en */
	{ 0x041E, 0xEF },	/* cyrillic capital letter o */
	{ 0x041F, 0xF0 },	/* cyrillic capital letter pe */
	{ 0x0420, 0xF2 },	/* cyrillic capital letter er */
	{ 0x0421, 0xF3 },	/* cyrillic capital letter es */
	{ 0x0422, 0xF4 },	/* cyrillic capital letter te */
	{ 0x0423, 0xF5 },	/* cyrillic capital letter u */
	{ 0x0424, 0xE6 },	/* cyrillic capital letter ef */
	{ 0x0425, 0xE8 },	/* cyrillic capital letter ha */
	{ 0x0426, 0xE3 },	/* cyrillic capital letter tse */
	{ 0x0427, 0xFE },	/* cyrillic capital letter che */
	{ 0x0428, 0xFB },	/* cyrillic capital letter sha */
	{ 0x0429, 0xFD },	/* cyrillic capital letter shcha */
	{ 0x042A, 0xFF },	/* cyrillic capital letter hard sign */
	{ 0x042B, 0xF9 },	/* cyrillic capital letter yeru */
	{ 0x042C, 0xF8 },	/* cyrillic capital letter soft sign */
	{ 0x042D, 0xFC },	/* cyrillic capital letter e */
	{ 0x042E, 0xE0 },	/* cyrillic capital letter yu */
	{ 0x042F, 0xF1 },	/* cyrillic capital letter ya */
	{ 0x0430, 0xC1 },	/* cyrillic small letter a */
	{ 0x0431, 0xC2 },	/* cyrillic small letter be */
	{ 0x0432, 0xD7 },	/* cyrillic small letter ve */
	{ 0x0433, 0xC7 },	/* cyrillic small letter ghe */
	{ 0x0434, 0xC4 },	/* cyrillic small letter de */
	{ 0x0435, 0xC5 },	/* cyrillic small letter ie */
	{ 0x0436, 0xD6 },	/* cyrillic small letter zhe */
	{ 0x0437, 0xDA },	/* cyrillic small letter ze */
	{ 0x0438, 0xC9 },	/* cyrillic small letter i */
	{ 0x0439, 0xCA },	/* cyrillic small letter short i */
	{ 0x043A, 0xCB },	/* cyrillic small letter ka */
	{ 0x043B, 0xCC },	/* cyrillic small letter el */
	{ 0x043C, 0xCD },	/* cyrillic small letter em */
	{ 0x043D, 0xCE },	/* cyrillic small letter en */
	{ 0x043E, 0xCF },	/* cyrillic small letter o */
	{ 0x043F, 0xD0 },	/* cyrillic small letter pe */
	{ 0x0440, 0xD2 },	/* cyrillic small letter er */
	{ 0x0441, 0xD3 },	/* cyrillic small letter es */
	{ 0x0442, 0xD4 },	/* cyrillic small letter te */
	{ 0x0443, 0xD5 },	/* cyrillic small letter u */
	{ 0x0444, 0xC6 },	/* cyrillic small letter ef */
	{ 0x0445, 0xC8 },	/* cyrillic small letter ha */
	{ 0x0446, 0xC3 },	/* cyrillic small letter tse */
	{ 0x0447, 0xDE },	/* cyrillic small letter che */
	{ 0x0448, 0xDB },	/* cyrillic small letter sha */
	{ 0x0449, 0xDD },	/* cyrillic small letter shcha */
	{ 0x044A, 0xDF },	/* cyrillic small letter hard sign */
	{ 0x044B, 0xD9 },	/* cyrillic small letter yeru */
	{ 0x044C, 0xD8 },	/* cyrillic small letter soft sign */
	{ 0x044D, 0xDC },	/* cyrillic small letter e */
	{ 0x044E, 0xC0 },	/* cyrillic small letter yu */
	{ 0x044F, 0xD1 },	/* cyrillic small letter ya */
	{ 0x0451, 0xA3 },	/* cyrillic small letter io */
	{ 0x2219, 0x95 },	/* bullet operator */
	{ 0x221A, 0x96 },	/* square root */
	{ 0x2248, 0x97 },	/* almost equal to */
	{ 0x2264, 0x98 },	/* less-than or equal to */
	{ 0x2265, 0x99 },	/* greater-than or equal to */
	{ 0x2320, 0x93 },	/* top half integral */
	{ 0x2321, 0x9B },	/* bottom half integral */
	{ 0x2500, 0x80 },	/* box drawings light horizontal */
	{ 0x2502, 0x81 },	/* box drawings light vertical */
	{ 0x250C, 0x82 },	/* box drawings light down and right */
	{ 0x2510, 0x83 },	/* box drawings light down and left */
	{ 0x2514, 0x84 },	/* box drawings light up and right */
	{ 0x2518, 0x85 },	/* box drawings light up and left */
	{ 0x251C, 0x86 },	/* box drawings light vertical and right */
	{ 0x2524, 0x87 },	/* box drawings light vertical and left */
	{ 0x252C, 0x88 },	/* box drawings light down and horizontal */
	{ 0x2534, 0x89 },	/* box drawings light up and horizontal */
	{ 0x253C, 0x8A },	/* box drawings light vertical and horizontal */
	{ 0x2550, 0xA0 },	/* box drawings double horizontal */
	{ 0x2551, 0xA1 },	/* box drawings double vertical */
	{ 0x2552, 0xA2 },	/* box drawings down single and right double */
	{ 0x2553, 0xA4 },	/* box drawings down double and right single */
	{ 0x2554, 0xA5 },	/* box drawings double down and right */
	{ 0x2555, 0xA6 },	/* box drawings down single and left double */
	{ 0x2556, 0xA7 },	/* box drawings down double and left single */
	{ 0x2557, 0xA8 },	/* box drawings double down and left */
	{ 0x2558, 0xA9 },	/* box drawings up single and right double */
	{ 0x2559, 0xAA },	/* box drawings up double and right single */
	{ 0x255A, 0xAB },	/* box drawings double up and right */
	{ 0x255B, 0xAC },	/* box drawings up single and left double */
	{ 0x255C, 0xAD },	/* box drawings up double and left single */
	{ 0x255D, 0xAE },	/* box drawings double up and left */
	{ 0x255E, 0xAF },	/* box drawings vertical single and right double */
	{ 0x255F, 0xB0 },	/* box drawings vertical double and right single */
	{ 0x2560, 0xB1 },	/* box drawings double vertical and right */
	{ 0x2561, 0xB2 },	/* box drawings vertical single and left double */
	{ 0x2562, 0xB4 },	/* box drawings vertical double and left single */
	{ 0x2563, 0xB5 },	/* box drawings double vertical and left */
	{ 0x2564, 0xB6 },	/* box drawings down single and horizontal double */
	{ 0x2565, 0xB7 },	/* box drawings down double and horizontal single */
	{ 0x2566, 0xB8 },	/* box drawings double down and horizontal */
	{ 0x2567, 0xB9 },	/* box drawings up single and horizontal double */
	{ 0x2568, 0xBA },	/* box drawings up double and horizontal single */
	{ 0x2569, 0xBB },	/* box drawings double up and horizontal */
	{ 0x256A, 0xBC },	/* box drawings vertical single and horizontal double */
	{ 0x256B, 0xBD },	/* box drawings vertical double and horizontal single */
	{ 0x256C, 0xBE },	/* box drawings double vertical and horizontal */
	{ 0x2580, 0x8B },	/* upper half block */
	{ 0x2584, 0x8C },	/* lower half block */
	{ 0x2588, 0x8D },	/* full block */
	{ 0x258C, 0x8E },	/* left half block */
	{ 0x2590, 0x8F },	/* right half block */
	{ 0x2591, 0x90 },	/* light shade */
	{ 0x2592, 0x91 },	/* medium shade */
	{ 0x2593, 0x92 },	/* dark shade */
	{ 0x25A0, 0x94 },	/* black square */
};
/* {{{ end of mappings *from* Unicode for KOI8-R */

/* {{{ Mappings *from* Unicode for CP-866 */
static const uni_to_enc unimap_cp866[] = {
	{ 0x00A0, 0xFF },	/* no-break space */
	{ 0x00A4, 0xFD },	/* currency sign */
	{ 0x00B0, 0xF8 },	/* degree sign */
	{ 0x00B7, 0xFA },	/* middle dot */
	{ 0x0401, 0xF0 },	/* cyrillic capital letter io */
	{ 0x0404, 0xF2 },	/* cyrillic capital letter ukrainian ie */
	{ 0x0407, 0xF4 },	/* cyrillic capital letter yi */
	{ 0x040E, 0xF6 },	/* cyrillic capital letter short u */
	{ 0x0410, 0x80 },	/* cyrillic capital letter a */
	{ 0x0411, 0x81 },	/* cyrillic capital letter be */
	{ 0x0412, 0x82 },	/* cyrillic capital letter ve */
	{ 0x0413, 0x83 },	/* cyrillic capital letter ghe */
	{ 0x0414, 0x84 },	/* cyrillic capital letter de */
	{ 0x0415, 0x85 },	/* cyrillic capital letter ie */
	{ 0x0416, 0x86 },	/* cyrillic capital letter zhe */
	{ 0x0417, 0x87 },	/* cyrillic capital letter ze */
	{ 0x0418, 0x88 },	/* cyrillic capital letter i */
	{ 0x0419, 0x89 },	/* cyrillic capital letter short i */
	{ 0x041A, 0x8A },	/* cyrillic capital letter ka */
	{ 0x041B, 0x8B },	/* cyrillic capital letter el */
	{ 0x041C, 0x8C },	/* cyrillic capital letter em */
	{ 0x041D, 0x8D },	/* cyrillic capital letter en */
	{ 0x041E, 0x8E },	/* cyrillic capital letter o */
	{ 0x041F, 0x8F },	/* cyrillic capital letter pe */
	{ 0x0420, 0x90 },	/* cyrillic capital letter er */
	{ 0x0421, 0x91 },	/* cyrillic capital letter es */
	{ 0x0422, 0x92 },	/* cyrillic capital letter te */
	{ 0x0423, 0x93 },	/* cyrillic capital letter u */
	{ 0x0424, 0x94 },	/* cyrillic capital letter ef */
	{ 0x0425, 0x95 },	/* cyrillic capital letter ha */
	{ 0x0426, 0x96 },	/* cyrillic capital letter tse */
	{ 0x0427, 0x97 },	/* cyrillic capital letter che */
	{ 0x0428, 0x98 },	/* cyrillic capital letter sha */
	{ 0x0429, 0x99 },	/* cyrillic capital letter shcha */
	{ 0x042A, 0x9A },	/* cyrillic capital letter hard sign */
	{ 0x042B, 0x9B },	/* cyrillic capital letter yeru */
	{ 0x042C, 0x9C },	/* cyrillic capital letter soft sign */
	{ 0x042D, 0x9D },	/* cyrillic capital letter e */
	{ 0x042E, 0x9E },	/* cyrillic capital letter yu */
	{ 0x042F, 0x9F },	/* cyrillic capital letter ya */
	{ 0x0430, 0xA0 },	/* cyrillic small letter a */
	{ 0x0431, 0xA1 },	/* cyrillic small letter be */
	{ 0x0432, 0xA2 },	/* cyrillic small letter ve */
	{ 0x0433, 0xA3 },	/* cyrillic small letter ghe */
	{ 0x0434, 0xA4 },	/* cyrillic small letter de */
	{ 0x0435, 0xA5 },	/* cyrillic small letter ie */
	{ 0x0436, 0xA6 },	/* cyrillic small letter zhe */
	{ 0x0437, 0xA7 },	/* cyrillic small letter ze */
	{ 0x0438, 0xA8 },	/* cyrillic small letter i */
	{ 0x0439, 0xA9 },	/* cyrillic small letter short i */
	{ 0x043A, 0xAA },	/* cyrillic small letter ka */
	{ 0x043B, 0xAB },	/* cyrillic small letter el */
	{ 0x043C, 0xAC },	/* cyrillic small letter em */
	{ 0x043D, 0xAD },	/* cyrillic small letter en */
	{ 0x043E, 0xAE },	/* cyrillic small letter o */
	{ 0x043F, 0xAF },	/* cyrillic small letter pe */
	{ 0x0440, 0xE0 },	/* cyrillic small letter er */
	{ 0x0441, 0xE1 },	/* cyrillic small letter es */
	{ 0x0442, 0xE2 },	/* cyrillic small letter te */
	{ 0x0443, 0xE3 },	/* cyrillic small letter u */
	{ 0x0444, 0xE4 },	/* cyrillic small letter ef */
	{ 0x0445, 0xE5 },	/* cyrillic small letter ha */
	{ 0x0446, 0xE6 },	/* cyrillic small letter tse */
	{ 0x0447, 0xE7 },	/* cyrillic small letter che */
	{ 0x0448, 0xE8 },	/* cyrillic small letter sha */
	{ 0x0449, 0xE9 },	/* cyrillic small letter shcha */
	{ 0x044A, 0xEA },	/* cyrillic small letter hard sign */
	{ 0x044B, 0xEB },	/* cyrillic small letter yeru */
	{ 0x044C, 0xEC },	/* cyrillic small letter soft sign */
	{ 0x044D, 0xED },	/* cyrillic small letter e */
	{ 0x044E, 0xEE },	/* cyrillic small letter yu */
	{ 0x044F, 0xEF },	/* cyrillic small letter ya */
	{ 0x0451, 0xF1 },	/* cyrillic small letter io */
	{ 0x0454, 0xF3 },	/* cyrillic small letter ukrainian ie */
	{ 0x0457, 0xF5 },	/* cyrillic small letter yi */
	{ 0x045E, 0xF7 },	/* cyrillic small letter short u */
	{ 0x2116, 0xFC },	/* numero sign */
	{ 0x2219, 0xF9 },	/* bullet operator */
	{ 0x221A, 0xFB },	/* square root */
	{ 0x2500, 0xC4 },	/* box drawings light horizontal */
	{ 0x2502, 0xB3 },	/* box drawings light vertical */
	{ 0x250C, 0xDA },	/* box drawings light down and right */
	{ 0x2510, 0xBF },	/* box drawings light down and left */
	{ 0x2514, 0xC0 },	/* box drawings light up and right */
	{ 0x2518, 0xD9 },	/* box drawings light up and left */
	{ 0x251C, 0xC3 },	/* box drawings light vertical and right */
	{ 0x2524, 0xB4 },	/* box drawings light vertical and left */
	{ 0x252C, 0xC2 },	/* box drawings light down and horizontal */
	{ 0x2534, 0xC1 },	/* box drawings light up and horizontal */
	{ 0x253C, 0xC5 },	/* box drawings light vertical and horizontal */
	{ 0x2550, 0xCD },	/* box drawings double horizontal */
	{ 0x2551, 0xBA },	/* box drawings double vertical */
	{ 0x2552, 0xD5 },	/* box drawings down single and right double */
	{ 0x2553, 0xD6 },	/* box drawings down double and right single */
	{ 0x2554, 0xC9 },	/* box drawings double down and right */
	{ 0x2555, 0xB8 },	/* box drawings down single and left double */
	{ 0x2556, 0xB7 },	/* box drawings down double and left single */
	{ 0x2557, 0xBB },	/* box drawings double down and left */
	{ 0x2558, 0xD4 },	/* box drawings up single and right double */
	{ 0x2559, 0xD3 },	/* box drawings up double and right single */
	{ 0x255A, 0xC8 },	/* box drawings double up and right */
	{ 0x255B, 0xBE },	/* box drawings up single and left double */
	{ 0x255C, 0xBD },	/* box drawings up double and left single */
	{ 0x255D, 0xBC },	/* box drawings double up and left */
	{ 0x255E, 0xC6 },	/* box drawings vertical single and right double */
	{ 0x255F, 0xC7 },	/* box drawings vertical double and right single */
	{ 0x2560, 0xCC },	/* box drawings double vertical and right */
	{ 0x2561, 0xB5 },	/* box drawings vertical single and left double */
	{ 0x2562, 0xB6 },	/* box drawings vertical double and left single */
	{ 0x2563, 0xB9 },	/* box drawings double vertical and left */
	{ 0x2564, 0xD1 },	/* box drawings down single and horizontal double */
	{ 0x2565, 0xD2 },	/* box drawings down double and horizontal single */
	{ 0x2566, 0xCB },	/* box drawings double down and horizontal */
	{ 0x2567, 0xCF },	/* box drawings up single and horizontal double */
	{ 0x2568, 0xD0 },	/* box drawings up double and horizontal single */
	{ 0x2569, 0xCA },	/* box drawings double up and horizontal */
	{ 0x256A, 0xD8 },	/* box drawings vertical single and horizontal double */
	{ 0x256B, 0xD7 },	/* box drawings vertical double and horizontal single */
	{ 0x256C, 0xCE },	/* box drawings double vertical and horizontal */
	{ 0x2580, 0xDF },	/* upper half block */
	{ 0x2584, 0xDC },	/* lower half block */
	{ 0x2588, 0xDB },	/* full block */
	{ 0x258C, 0xDD },	/* left half block */
	{ 0x2590, 0xDE },	/* right half block */
	{ 0x2591, 0xB0 },	/* light shade */
	{ 0x2592, 0xB1 },	/* medium shade */
	{ 0x2593, 0xB2 },	/* dark shade */
	{ 0x25A0, 0xFE },	/* black square */
};
/* {{{ end of mappings *from* Unicode for CP-866 */

/* {{{ Mappings *from* Unicode for MacRoman */
static const uni_to_enc unimap_macroman[] = {
	{ 0x00A0, 0xCA },	/* no-break space */
	{ 0x00A1, 0xC1 },	/* inverted exclamation mark */
	{ 0x00A2, 0xA2 },	/* cent sign */
	{ 0x00A3, 0xA3 },	/* pound sign */
	{ 0x00A5, 0xB4 },	/* yen sign */
	{ 0x00A7, 0xA4 },	/* section sign */
	{ 0x00A8, 0xAC },	/* diaeresis */
	{ 0x00A9, 0xA9 },	/* copyright sign */
	{ 0x00AA, 0xBB },	/* feminine ordinal indicator */
	{ 0x00AB, 0xC7 },	/* left-pointing double angle quotation mark */
	{ 0x00AC, 0xC2 },	/* not sign */
	{ 0x00AE, 0xA8 },	/* registered sign */
	{ 0x00AF, 0xF8 },	/* macron */
	{ 0x00B0, 0xA1 },	/* degree sign */
	{ 0x00B1, 0xB1 },	/* plus-minus sign */
	{ 0x00B4, 0xAB },	/* acute accent */
	{ 0x00B5, 0xB5 },	/* micro sign */
	{ 0x00B6, 0xA6 },	/* pilcrow sign */
	{ 0x00B7, 0xE1 },	/* middle dot */
	{ 0x00B8, 0xFC },	/* cedilla */
	{ 0x00BA, 0xBC },	/* masculine ordinal indicator */
	{ 0x00BB, 0xC8 },	/* right-pointing double angle quotation mark */
	{ 0x00BF, 0xC0 },	/* inverted question mark */
	{ 0x00C0, 0xCB },	/* latin capital letter a with grave */
	{ 0x00C1, 0xE7 },	/* latin capital letter a with acute */
	{ 0x00C2, 0xE5 },	/* latin capital letter a with circumflex */
	{ 0x00C3, 0xCC },	/* latin capital letter a with tilde */
	{ 0x00C4, 0x80 },	/* latin capital letter a with diaeresis */
	{ 0x00C5, 0x81 },	/* latin capital letter a with ring above */
	{ 0x00C6, 0xAE },	/* latin capital letter ae */
	{ 0x00C7, 0x82 },	/* latin capital letter c with cedilla */
	{ 0x00C8, 0xE9 },	/* latin capital letter e with grave */
	{ 0x00C9, 0x83 },	/* latin capital letter e with acute */
	{ 0x00CA, 0xE6 },	/* latin capital letter e with circumflex */
	{ 0x00CB, 0xE8 },	/* latin capital letter e with diaeresis */
	{ 0x00CC, 0xED },	/* latin capital letter i with grave */
	{ 0x00CD, 0xEA },	/* latin capital letter i with acute */
	{ 0x00CE, 0xEB },	/* latin capital letter i with circumflex */
	{ 0x00CF, 0xEC },	/* latin capital letter i with diaeresis */
	{ 0x00D1, 0x84 },	/* latin capital letter n with tilde */
	{ 0x00D2, 0xF1 },	/* latin capital letter o with grave */
	{ 0x00D3, 0xEE },	/* latin capital letter o with acute */
	{ 0x00D4, 0xEF },	/* latin capital letter o with circumflex */
	{ 0x00D5, 0xCD },	/* latin capital letter o with tilde */
	{ 0x00D6, 0x85 },	/* latin capital letter o with diaeresis */
	{ 0x00D8, 0xAF },	/* latin capital letter o with stroke */
	{ 0x00D9, 0xF4 },	/* latin capital letter u with grave */
	{ 0x00DA, 0xF2 },	/* latin capital letter u with acute */
	{ 0x00DB, 0xF3 },	/* latin capital letter u with circumflex */
	{ 0x00DC, 0x86 },	/* latin capital letter u with diaeresis */
	{ 0x00DF, 0xA7 },	/* latin small letter sharp s */
	{ 0x00E0, 0x88 },	/* latin small letter a with grave */
	{ 0x00E1, 0x87 },	/* latin small letter a with acute */
	{ 0x00E2, 0x89 },	/* latin small letter a with circumflex */
	{ 0x00E3, 0x8B },	/* latin small letter a with tilde */
	{ 0x00E4, 0x8A },	/* latin small letter a with diaeresis */
	{ 0x00E5, 0x8C },	/* latin small letter a with ring above */
	{ 0x00E6, 0xBE },	/* latin small letter ae */
	{ 0x00E7, 0x8D },	/* latin small letter c with cedilla */
	{ 0x00E8, 0x8F },	/* latin small letter e with grave */
	{ 0x00E9, 0x8E },	/* latin small letter e with acute */
	{ 0x00EA, 0x90 },	/* latin small letter e with circumflex */
	{ 0x00EB, 0x91 },	/* latin small letter e with diaeresis */
	{ 0x00EC, 0x93 },	/* latin small letter i with grave */
	{ 0x00ED, 0x92 },	/* latin small letter i with acute */
	{ 0x00EE, 0x94 },	/* latin small letter i with circumflex */
	{ 0x00EF, 0x95 },	/* latin small letter i with diaeresis */
	{ 0x00F1, 0x96 },	/* latin small letter n with tilde */
	{ 0x00F2, 0x98 },	/* latin small letter o with grave */
	{ 0x00F3, 0x97 },	/* latin small letter o with acute */
	{ 0x00F4, 0x99 },	/* latin small letter o with circumflex */
	{ 0x00F5, 0x9B },	/* latin small letter o with tilde */
	{ 0x00F6, 0x9A },	/* latin small letter o with diaeresis */
	{ 0x00F7, 0xD6 },	/* division sign */
	{ 0x00F8, 0xBF },	/* latin small letter o with stroke */
	{ 0x00F9, 0x9D },	/* latin small letter u with grave */
	{ 0x00FA, 0x9C },	/* latin small letter u with acute */
	{ 0x00FB, 0x9E },	/* latin small letter u with circumflex */
	{ 0x00FC, 0x9F },	/* latin small letter u with diaeresis */
	{ 0x00FF, 0xD8 },	/* latin small letter y with diaeresis */
	{ 0x0131, 0xF5 },	/* latin small letter dotless i */
	{ 0x0152, 0xCE },	/* latin capital ligature oe */
	{ 0x0153, 0xCF },	/* latin small ligature oe */
	{ 0x0178, 0xD9 },	/* latin capital letter y with diaeresis */
	{ 0x0192, 0xC4 },	/* latin small letter f with hook */
	{ 0x02C6, 0xF6 },	/* modifier letter circumflex accent */
	{ 0x02C7, 0xFF },	/* caron */
	{ 0x02D8, 0xF9 },	/* breve */
	{ 0x02D9, 0xFA },	/* dot above */
	{ 0x02DA, 0xFB },	/* ring above */
	{ 0x02DB, 0xFE },	/* ogonek */
	{ 0x02DC, 0xF7 },	/* small tilde */
	{ 0x02DD, 0xFD },	/* double acute accent */
	{ 0x03A9, 0xBD },	/* greek capital letter omega */
	{ 0x03C0, 0xB9 },	/* greek small letter pi */
	{ 0x2013, 0xD0 },	/* en dash */
	{ 0x2014, 0xD1 },	/* em dash */
	{ 0x2018, 0xD4 },	/* left single quotation mark */
	{ 0x2019, 0xD5 },	/* right single quotation mark */
	{ 0x201A, 0xE2 },	/* single low-9 quotation mark */
	{ 0x201C, 0xD2 },	/* left double quotation mark */
	{ 0x201D, 0xD3 },	/* right double quotation mark */
	{ 0x201E, 0xE3 },	/* double low-9 quotation mark */
	{ 0x2020, 0xA0 },	/* dagger */
	{ 0x2021, 0xE0 },	/* double dagger */
	{ 0x2022, 0xA5 },	/* bullet */
	{ 0x2026, 0xC9 },	/* horizontal ellipsis */
	{ 0x2030, 0xE4 },	/* per mille sign */
	{ 0x2039, 0xDC },	/* single left-pointing angle quotation mark */
	{ 0x203A, 0xDD },	/* single right-pointing angle quotation mark */
	{ 0x2044, 0xDA },	/* fraction slash */
	{ 0x20AC, 0xDB },	/* euro sign */
	{ 0x2122, 0xAA },	/* trade mark sign */
	{ 0x2202, 0xB6 },	/* partial differential */
	{ 0x2206, 0xC6 },	/* increment */
	{ 0x220F, 0xB8 },	/* n-ary product */
	{ 0x2211, 0xB7 },	/* n-ary summation */
	{ 0x221A, 0xC3 },	/* square root */
	{ 0x221E, 0xB0 },	/* infinity */
	{ 0x222B, 0xBA },	/* integral */
	{ 0x2248, 0xC5 },	/* almost equal to */
	{ 0x2260, 0xAD },	/* not equal to */
	{ 0x2264, 0xB2 },	/* less-than or equal to */
	{ 0x2265, 0xB3 },	/* greater-than or equal to */
	{ 0x25CA, 0xD7 },	/* lozenge */
	{ 0xF8FF, 0xF0 },	/* apple logo */
	{ 0xFB01, 0xDE },	/* latin small ligature fi */
	{ 0xFB02, 0xDF },	/* latin small ligature fl */
};
/* {{{ end of mappings *from* Unicode for MacRoman */

/* HTML 5 has many more named entities.
 * Some of them map to two unicode code points, not one.
 * We're going to use a three-stage table (with an extra one for the entities
 * with two code points). */

#define ENT_STAGE1_INDEX(k) (((k) & 0xFFF000) >> 12) /* > 1D, we have no mapping */
#define ENT_STAGE2_INDEX(k) (((k) & 0xFC0) >> 6)
#define ENT_STAGE3_INDEX(k) ((k) & 0x3F)
#define ENT_CODE_POINT_FROM_STAGES(i,j,k) (((i) << 12) | ((j) << 6) | (k))

/* The default entity may be NULL. Binary search is still possible while
   is senseless as there are just two rows (see also find_entity_for_char()). */
typedef union {
	struct {
		const char *default_entity;
		unsigned size; /* number of remaining entries in the table */
		unsigned short default_entity_len;
	} leading_entry;
	struct {
		const char *entity;
		unsigned second_cp; /* second code point */
		unsigned short entity_len;
	} normal_entry;
} entity_multicodepoint_row;

/* blocks of these should start at code points k where k % 0xFC0 == 0 */
typedef struct {
	char ambiguous; /* if 0 look into entity */
	union {
		struct {
			const char *entity; /* may be NULL */
			unsigned short entity_len;
		} ent;
		const entity_multicodepoint_row *multicodepoint_table;
	} data;
} entity_stage3_row;

/* Calculate k & 0x3F Use as offset */
typedef const entity_stage3_row *entity_stage2_row; /* 64 elements */

/* Calculate k & 0xFC0 >> 6. Use as offset */
typedef const entity_stage3_row *const *entity_stage1_row; /* 64 elements */

/* For stage 1, Calculate k & 0xFFF000 >> 3*4.
 * If larger than 1D, we have no mapping. Otherwise lookup that index */

typedef struct {
	const entity_stage1_row *ms_table;
	/* for tables with only basic entities, this member is to be accessed
	 * directly for better performance: */
	const entity_stage3_row *table;
} entity_table_opt;

/* Replaced "GT" > "gt" and "QUOT" > "quot" for consistency's sake. */

/* {{{ Start of HTML5 multi-stage table for codepoint -> entity */

/* {{{ Start of double code point tables for HTML5 */

static const entity_multicodepoint_row multi_cp_html5_0003C[] = {
	{ {"lt",                 	01,		 2} },
	{ {"nvlt",               	0x020D2,	 4} },
};
static const entity_multicodepoint_row multi_cp_html5_0003D[] = {
	{ {"equals",             	01,		 6} },
	{ {"bne",                	0x020E5,	 3} },
};
static const entity_multicodepoint_row multi_cp_html5_0003E[] = {
	{ {"gt",                 	01,		 2} },
	{ {"nvgt",               	0x020D2,	 4} },
};
static const entity_multicodepoint_row multi_cp_html5_00066[] = {
	{ {NULL,                 	01,		0} },
	{ {"fjlig",              	0x0006A,	 5} },
};
static const entity_multicodepoint_row multi_cp_html5_0205F[] = {
	{ {"MediumSpace",        	01,		11} },
	{ {"ThickSpace",         	0x0200A,	10} },
};
static const entity_multicodepoint_row multi_cp_html5_0219D[] = {
	{ {"rarrw",              	01,		 5} },
	{ {"nrarrw",             	0x00338,	 6} },
};
static const entity_multicodepoint_row multi_cp_html5_02202[] = {
	{ {"part",               	01,		 4} },
	{ {"npart",              	0x00338,	 5} },
};
static const entity_multicodepoint_row multi_cp_html5_02220[] = {
	{ {"angle",              	01,		 5} },
	{ {"nang",               	0x020D2,	 4} },
};
static const entity_multicodepoint_row multi_cp_html5_02229[] = {
	{ {"cap",                	01,		 3} },
	{ {"caps",               	0x0FE00,	 4} },
};
static const entity_multicodepoint_row multi_cp_html5_0222A[] = {
	{ {"cup",                	01,		 3} },
	{ {"cups",               	0x0FE00,	 4} },
};
static const entity_multicodepoint_row multi_cp_html5_0223C[] = {
	{ {"sim",                	01,		 3} },
	{ {"nvsim",              	0x020D2,	 5} },
};
static const entity_multicodepoint_row multi_cp_html5_0223D[] = {
	{ {"bsim",               	01,		 4} },
	{ {"race",               	0x00331,	 4} },
};
static const entity_multicodepoint_row multi_cp_html5_0223E[] = {
	{ {"ac",                 	01,		 2} },
	{ {"acE",                	0x00333,	 3} },
};
static const entity_multicodepoint_row multi_cp_html5_02242[] = {
	{ {"esim",               	01,		 4} },
	{ {"nesim",              	0x00338,	 5} },
};
static const entity_multicodepoint_row multi_cp_html5_0224B[] = {
	{ {"apid",               	01,		 4} },
	{ {"napid",              	0x00338,	 5} },
};
static const entity_multicodepoint_row multi_cp_html5_0224D[] = {
	{ {"CupCap",             	01,		 6} },
	{ {"nvap",               	0x020D2,	 4} },
};
static const entity_multicodepoint_row multi_cp_html5_0224E[] = {
	{ {"bump",               	01,		 4} },
	{ {"nbump",              	0x00338,	 5} },
};
static const entity_multicodepoint_row multi_cp_html5_0224F[] = {
	{ {"HumpEqual",          	01,		 9} },
	{ {"nbumpe",             	0x00338,	 6} },
};
static const entity_multicodepoint_row multi_cp_html5_02250[] = {
	{ {"esdot",              	01,		 5} },
	{ {"nedot",              	0x00338,	 5} },
};
static const entity_multicodepoint_row multi_cp_html5_02261[] = {
	{ {"Congruent",          	01,		 9} },
	{ {"bnequiv",            	0x020E5,	 7} },
};
static const entity_multicodepoint_row multi_cp_html5_02264[] = {
	{ {"leq",                	01,		 3} },
	{ {"nvle",               	0x020D2,	 4} },
};
static const entity_multicodepoint_row multi_cp_html5_02265[] = {
	{ {"ge",                 	01,		 2} },
	{ {"nvge",               	0x020D2,	 4} },
};
static const entity_multicodepoint_row multi_cp_html5_02266[] = {
	{ {"lE",                 	01,		 2} },
	{ {"nlE",                	0x00338,	 3} },
};
static const entity_multicodepoint_row multi_cp_html5_02267[] = {
	{ {"geqq",               	01,		 4} },
	{ {"NotGreaterFullEqual",	0x00338,	19} },
};
static const entity_multicodepoint_row multi_cp_html5_02268[] = {
	{ {"lneqq",              	01,		 5} },
	{ {"lvertneqq",          	0x0FE00,	 9} },
};
static const entity_multicodepoint_row multi_cp_html5_02269[] = {
	{ {"gneqq",              	01,		 5} },
	{ {"gvertneqq",          	0x0FE00,	 9} },
};
static const entity_multicodepoint_row multi_cp_html5_0226A[] = {
	{ {"ll",                 	02,		 2} },
	{ {"nLtv",               	0x00338,	 4} },
	{ {"nLt",                	0x020D2,	 3} },
};
static const entity_multicodepoint_row multi_cp_html5_0226B[] = {
	{ {"gg",                 	02,		 2} },
	{ {"NotGreaterGreater",  	0x00338,	17} },
	{ {"nGt",                	0x020D2,	 3} },
};
static const entity_multicodepoint_row multi_cp_html5_0227F[] = {
	{ {"SucceedsTilde",      	01,		13} },
	{ {"NotSucceedsTilde",   	0x00338,	16} },
};
static const entity_multicodepoint_row multi_cp_html5_02282[] = {
	{ {"sub",                	01,		 3} },
	{ {"vnsub",              	0x020D2,	 5} },
};
static const entity_multicodepoint_row multi_cp_html5_02283[] = {
	{ {"sup",                	01,		 3} },
	{ {"nsupset",            	0x020D2,	 7} },
};
static const entity_multicodepoint_row multi_cp_html5_0228A[] = {
	{ {"subsetneq",          	01,		 9} },
	{ {"vsubne",             	0x0FE00,	 6} },
};
static const entity_multicodepoint_row multi_cp_html5_0228B[] = {
	{ {"supsetneq",          	01,		 9} },
	{ {"vsupne",             	0x0FE00,	 6} },
};
static const entity_multicodepoint_row multi_cp_html5_0228F[] = {
	{ {"sqsub",              	01,		 5} },
	{ {"NotSquareSubset",    	0x00338,	15} },
};
static const entity_multicodepoint_row multi_cp_html5_02290[] = {
	{ {"sqsupset",           	01,		 8} },
	{ {"NotSquareSuperset",  	0x00338,	17} },
};
static const entity_multicodepoint_row multi_cp_html5_02293[] = {
	{ {"sqcap",              	01,		 5} },
	{ {"sqcaps",             	0x0FE00,	 6} },
};
static const entity_multicodepoint_row multi_cp_html5_02294[] = {
	{ {"sqcup",              	01,		 5} },
	{ {"sqcups",             	0x0FE00,	 6} },
};
static const entity_multicodepoint_row multi_cp_html5_022B4[] = {
	{ {"LeftTriangleEqual",  	01,		17} },
	{ {"nvltrie",            	0x020D2,	 7} },
};
static const entity_multicodepoint_row multi_cp_html5_022B5[] = {
	{ {"RightTriangleEqual", 	01,		18} },
	{ {"nvrtrie",            	0x020D2,	 7} },
};
static const entity_multicodepoint_row multi_cp_html5_022D8[] = {
	{ {"Ll",                 	01,		 2} },
	{ {"nLl",                	0x00338,	 3} },
};
static const entity_multicodepoint_row multi_cp_html5_022D9[] = {
	{ {"Gg",                 	01,		 2} },
	{ {"nGg",                	0x00338,	 3} },
};
static const entity_multicodepoint_row multi_cp_html5_022DA[] = {
	{ {"lesseqgtr",          	01,		 9} },
	{ {"lesg",               	0x0FE00,	 4} },
};
static const entity_multicodepoint_row multi_cp_html5_022DB[] = {
	{ {"gtreqless",          	01,		 9} },
	{ {"gesl",               	0x0FE00,	 4} },
};
static const entity_multicodepoint_row multi_cp_html5_022F5[] = {
	{ {"isindot",            	01,		 7} },
	{ {"notindot",           	0x00338,	 8} },
};
static const entity_multicodepoint_row multi_cp_html5_022F9[] = {
	{ {"isinE",              	01,		 5} },
	{ {"notinE",             	0x00338,	 6} },
};
static const entity_multicodepoint_row multi_cp_html5_02933[] = {
	{ {"rarrc",              	01,		 5} },
	{ {"nrarrc",             	0x00338,	 6} },
};
static const entity_multicodepoint_row multi_cp_html5_029CF[] = {
	{ {"LeftTriangleBar",    	01,		15} },
	{ {"NotLeftTriangleBar", 	0x00338,	18} },
};
static const entity_multicodepoint_row multi_cp_html5_029D0[] = {
	{ {"RightTriangleBar",   	01,		16} },
	{ {"NotRightTriangleBar",	0x00338,	19} },
};
static const entity_multicodepoint_row multi_cp_html5_02A6D[] = {
	{ {"congdot",            	01,		 7} },
	{ {"ncongdot",           	0x00338,	 8} },
};
static const entity_multicodepoint_row multi_cp_html5_02A70[] = {
	{ {"apE",                	01,		 3} },
	{ {"napE",               	0x00338,	 4} },
};
static const entity_multicodepoint_row multi_cp_html5_02A7D[] = {
	{ {"les",                	01,		 3} },
	{ {"nles",               	0x00338,	 4} },
};
static const entity_multicodepoint_row multi_cp_html5_02A7E[] = {
	{ {"ges",                	01,		 3} },
	{ {"nges",               	0x00338,	 4} },
};
static const entity_multicodepoint_row multi_cp_html5_02AA1[] = {
	{ {"LessLess",           	01,		 8} },
	{ {"NotNestedLessLess",  	0x00338,	17} },
};
static const entity_multicodepoint_row multi_cp_html5_02AA2[] = {
	{ {"GreaterGreater",     	01,		14} },
	{ {"NotNestedGreaterGreater",	0x00338,	23} },
};
static const entity_multicodepoint_row multi_cp_html5_02AAC[] = {
	{ {"smte",               	01,		 4} },
	{ {"smtes",              	0x0FE00,	 5} },
};
static const entity_multicodepoint_row multi_cp_html5_02AAD[] = {
	{ {"late",               	01,		 4} },
	{ {"lates",              	0x0FE00,	 5} },
};
static const entity_multicodepoint_row multi_cp_html5_02AAF[] = {
	{ {"preceq",             	01,		 6} },
	{ {"NotPrecedesEqual",   	0x00338,	16} },
};
static const entity_multicodepoint_row multi_cp_html5_02AB0[] = {
	{ {"SucceedsEqual",      	01,		13} },
	{ {"NotSucceedsEqual",   	0x00338,	16} },
};
static const entity_multicodepoint_row multi_cp_html5_02AC5[] = {
	{ {"subE",               	01,		 4} },
	{ {"nsubE",              	0x00338,	 5} },
};
static const entity_multicodepoint_row multi_cp_html5_02AC6[] = {
	{ {"supseteqq",          	01,		 9} },
	{ {"nsupseteqq",         	0x00338,	10} },
};
static const entity_multicodepoint_row multi_cp_html5_02ACB[] = {
	{ {"subsetneqq",         	01,		10} },
	{ {"vsubnE",             	0x0FE00,	 6} },
};
static const entity_multicodepoint_row multi_cp_html5_02ACC[] = {
	{ {"supnE",              	01,		 5} },
	{ {"varsupsetneqq",      	0x0FE00,	13} },
};
static const entity_multicodepoint_row multi_cp_html5_02AFD[] = {
	{ {"parsl",              	01,		 5} },
	{ {"nparsl",             	0x020E5,	 6} },
};

/* End of double code point tables }}} */

/* {{{ Stage 3 Tables for HTML5 */

static const entity_stage3_row empty_stage3_table[] = {
	/* 64 elements */
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
};
static const entity_stage3_row stage3_table_html5_00000[] = {
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {"Tab", 3} } }, {0, { {"NewLine", 7} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {"excl", 4} } }, {0, { {"quot", 4} } }, {0, { {"num", 3} } },
	{0, { {"dollar", 6} } }, {0, { {"percnt", 6} } }, {0, { {"amp", 3} } }, {0, { {"apos", 4} } },
	{0, { {"lpar", 4} } }, {0, { {"rpar", 4} } }, {0, { {"ast", 3} } }, {0, { {"plus", 4} } },
	{0, { {"comma", 5} } }, {0, { {NULL, 0} } }, {0, { {"period", 6} } }, {0, { {"sol", 3} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {"colon", 5} } }, {0, { {"semi", 4} } },
	{1, { {(void *)multi_cp_html5_0003C, 0} } }, {1, { {(void *)multi_cp_html5_0003D, 0} } }, {1, { {(void *)multi_cp_html5_0003E, 0} } }, {0, { {"quest", 5} } },
};

static const entity_stage3_row stage3_table_html5_00040[] = {
	{0, { {"commat", 6} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {"lbrack", 6} } },
	{0, { {"bsol", 4} } }, {0, { {"rsqb", 4} } }, {0, { {"Hat", 3} } }, {0, { {"lowbar", 6} } },
	{0, { {"grave", 5} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {1, { {(void *)multi_cp_html5_00066, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {"lbrace", 6} } },
	{0, { {"vert", 4} } }, {0, { {"rcub", 4} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
};

static const entity_stage3_row stage3_table_html5_00080[] = {
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {"nbsp", 4} } }, {0, { {"iexcl", 5} } }, {0, { {"cent", 4} } }, {0, { {"pound", 5} } },
	{0, { {"curren", 6} } }, {0, { {"yen", 3} } }, {0, { {"brvbar", 6} } }, {0, { {"sect", 4} } },
	{0, { {"DoubleDot", 9} } }, {0, { {"copy", 4} } }, {0, { {"ordf", 4} } }, {0, { {"laquo", 5} } },
	{0, { {"not", 3} } }, {0, { {"shy", 3} } }, {0, { {"reg", 3} } }, {0, { {"macr", 4} } },
	{0, { {"deg", 3} } }, {0, { {"plusmn", 6} } }, {0, { {"sup2", 4} } }, {0, { {"sup3", 4} } },
	{0, { {"DiacriticalAcute", 16} } }, {0, { {"micro", 5} } }, {0, { {"para", 4} } }, {0, { {"CenterDot", 9} } },
	{0, { {"Cedilla", 7} } }, {0, { {"sup1", 4} } }, {0, { {"ordm", 4} } }, {0, { {"raquo", 5} } },
	{0, { {"frac14", 6} } }, {0, { {"half", 4} } }, {0, { {"frac34", 6} } }, {0, { {"iquest", 6} } },
};

static const entity_stage3_row stage3_table_html5_000C0[] = {
	{0, { {"Agrave", 6} } }, {0, { {"Aacute", 6} } }, {0, { {"Acirc", 5} } }, {0, { {"Atilde", 6} } },
	{0, { {"Auml", 4} } }, {0, { {"Aring", 5} } }, {0, { {"AElig", 5} } }, {0, { {"Ccedil", 6} } },
	{0, { {"Egrave", 6} } }, {0, { {"Eacute", 6} } }, {0, { {"Ecirc", 5} } }, {0, { {"Euml", 4} } },
	{0, { {"Igrave", 6} } }, {0, { {"Iacute", 6} } }, {0, { {"Icirc", 5} } }, {0, { {"Iuml", 4} } },
	{0, { {"ETH", 3} } }, {0, { {"Ntilde", 6} } }, {0, { {"Ograve", 6} } }, {0, { {"Oacute", 6} } },
	{0, { {"Ocirc", 5} } }, {0, { {"Otilde", 6} } }, {0, { {"Ouml", 4} } }, {0, { {"times", 5} } },
	{0, { {"Oslash", 6} } }, {0, { {"Ugrave", 6} } }, {0, { {"Uacute", 6} } }, {0, { {"Ucirc", 5} } },
	{0, { {"Uuml", 4} } }, {0, { {"Yacute", 6} } }, {0, { {"THORN", 5} } }, {0, { {"szlig", 5} } },
	{0, { {"agrave", 6} } }, {0, { {"aacute", 6} } }, {0, { {"acirc", 5} } }, {0, { {"atilde", 6} } },
	{0, { {"auml", 4} } }, {0, { {"aring", 5} } }, {0, { {"aelig", 5} } }, {0, { {"ccedil", 6} } },
	{0, { {"egrave", 6} } }, {0, { {"eacute", 6} } }, {0, { {"ecirc", 5} } }, {0, { {"euml", 4} } },
	{0, { {"igrave", 6} } }, {0, { {"iacute", 6} } }, {0, { {"icirc", 5} } }, {0, { {"iuml", 4} } },
	{0, { {"eth", 3} } }, {0, { {"ntilde", 6} } }, {0, { {"ograve", 6} } }, {0, { {"oacute", 6} } },
	{0, { {"ocirc", 5} } }, {0, { {"otilde", 6} } }, {0, { {"ouml", 4} } }, {0, { {"divide", 6} } },
	{0, { {"oslash", 6} } }, {0, { {"ugrave", 6} } }, {0, { {"uacute", 6} } }, {0, { {"ucirc", 5} } },
	{0, { {"uuml", 4} } }, {0, { {"yacute", 6} } }, {0, { {"thorn", 5} } }, {0, { {"yuml", 4} } },
};

static const entity_stage3_row stage3_table_html5_00100[] = {
	{0, { {"Amacr", 5} } }, {0, { {"amacr", 5} } }, {0, { {"Abreve", 6} } }, {0, { {"abreve", 6} } },
	{0, { {"Aogon", 5} } }, {0, { {"aogon", 5} } }, {0, { {"Cacute", 6} } }, {0, { {"cacute", 6} } },
	{0, { {"Ccirc", 5} } }, {0, { {"ccirc", 5} } }, {0, { {"Cdot", 4} } }, {0, { {"cdot", 4} } },
	{0, { {"Ccaron", 6} } }, {0, { {"ccaron", 6} } }, {0, { {"Dcaron", 6} } }, {0, { {"dcaron", 6} } },
	{0, { {"Dstrok", 6} } }, {0, { {"dstrok", 6} } }, {0, { {"Emacr", 5} } }, {0, { {"emacr", 5} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {"Edot", 4} } }, {0, { {"edot", 4} } },
	{0, { {"Eogon", 5} } }, {0, { {"eogon", 5} } }, {0, { {"Ecaron", 6} } }, {0, { {"ecaron", 6} } },
	{0, { {"Gcirc", 5} } }, {0, { {"gcirc", 5} } }, {0, { {"Gbreve", 6} } }, {0, { {"gbreve", 6} } },
	{0, { {"Gdot", 4} } }, {0, { {"gdot", 4} } }, {0, { {"Gcedil", 6} } }, {0, { {NULL, 0} } },
	{0, { {"Hcirc", 5} } }, {0, { {"hcirc", 5} } }, {0, { {"Hstrok", 6} } }, {0, { {"hstrok", 6} } },
	{0, { {"Itilde", 6} } }, {0, { {"itilde", 6} } }, {0, { {"Imacr", 5} } }, {0, { {"imacr", 5} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {"Iogon", 5} } }, {0, { {"iogon", 5} } },
	{0, { {"Idot", 4} } }, {0, { {"inodot", 6} } }, {0, { {"IJlig", 5} } }, {0, { {"ijlig", 5} } },
	{0, { {"Jcirc", 5} } }, {0, { {"jcirc", 5} } }, {0, { {"Kcedil", 6} } }, {0, { {"kcedil", 6} } },
	{0, { {"kgreen", 6} } }, {0, { {"Lacute", 6} } }, {0, { {"lacute", 6} } }, {0, { {"Lcedil", 6} } },
	{0, { {"lcedil", 6} } }, {0, { {"Lcaron", 6} } }, {0, { {"lcaron", 6} } }, {0, { {"Lmidot", 6} } },
};

static const entity_stage3_row stage3_table_html5_00140[] = {
	{0, { {"lmidot", 6} } }, {0, { {"Lstrok", 6} } }, {0, { {"lstrok", 6} } }, {0, { {"Nacute", 6} } },
	{0, { {"nacute", 6} } }, {0, { {"Ncedil", 6} } }, {0, { {"ncedil", 6} } }, {0, { {"Ncaron", 6} } },
	{0, { {"ncaron", 6} } }, {0, { {"napos", 5} } }, {0, { {"ENG", 3} } }, {0, { {"eng", 3} } },
	{0, { {"Omacr", 5} } }, {0, { {"omacr", 5} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {"Odblac", 6} } }, {0, { {"odblac", 6} } }, {0, { {"OElig", 5} } }, {0, { {"oelig", 5} } },
	{0, { {"Racute", 6} } }, {0, { {"racute", 6} } }, {0, { {"Rcedil", 6} } }, {0, { {"rcedil", 6} } },
	{0, { {"Rcaron", 6} } }, {0, { {"rcaron", 6} } }, {0, { {"Sacute", 6} } }, {0, { {"sacute", 6} } },
	{0, { {"Scirc", 5} } }, {0, { {"scirc", 5} } }, {0, { {"Scedil", 6} } }, {0, { {"scedil", 6} } },
	{0, { {"Scaron", 6} } }, {0, { {"scaron", 6} } }, {0, { {"Tcedil", 6} } }, {0, { {"tcedil", 6} } },
	{0, { {"Tcaron", 6} } }, {0, { {"tcaron", 6} } }, {0, { {"Tstrok", 6} } }, {0, { {"tstrok", 6} } },
	{0, { {"Utilde", 6} } }, {0, { {"utilde", 6} } }, {0, { {"Umacr", 5} } }, {0, { {"umacr", 5} } },
	{0, { {"Ubreve", 6} } }, {0, { {"ubreve", 6} } }, {0, { {"Uring", 5} } }, {0, { {"uring", 5} } },
	{0, { {"Udblac", 6} } }, {0, { {"udblac", 6} } }, {0, { {"Uogon", 5} } }, {0, { {"uogon", 5} } },
	{0, { {"Wcirc", 5} } }, {0, { {"wcirc", 5} } }, {0, { {"Ycirc", 5} } }, {0, { {"ycirc", 5} } },
	{0, { {"Yuml", 4} } }, {0, { {"Zacute", 6} } }, {0, { {"zacute", 6} } }, {0, { {"Zdot", 4} } },
	{0, { {"zdot", 4} } }, {0, { {"Zcaron", 6} } }, {0, { {"zcaron", 6} } }, {0, { {NULL, 0} } },
};

static const entity_stage3_row stage3_table_html5_00180[] = {
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {"fnof", 4} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {"imped", 5} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
};

static const entity_stage3_row stage3_table_html5_001C0[] = {
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {"gacute", 6} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
};

static const entity_stage3_row stage3_table_html5_00200[] = {
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {"jmath", 5} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
};

static const entity_stage3_row stage3_table_html5_002C0[] = {
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {"circ", 4} } }, {0, { {"Hacek", 5} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {"Breve", 5} } }, {0, { {"dot", 3} } }, {0, { {"ring", 4} } }, {0, { {"ogon", 4} } },
	{0, { {"DiacriticalTilde", 16} } }, {0, { {"DiacriticalDoubleAcute", 22} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
};

static const entity_stage3_row stage3_table_html5_00300[] = {
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {"DownBreve", 9} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
};

static const entity_stage3_row stage3_table_html5_00380[] = {
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {"Alpha", 5} } }, {0, { {"Beta", 4} } }, {0, { {"Gamma", 5} } },
	{0, { {"Delta", 5} } }, {0, { {"Epsilon", 7} } }, {0, { {"Zeta", 4} } }, {0, { {"Eta", 3} } },
	{0, { {"Theta", 5} } }, {0, { {"Iota", 4} } }, {0, { {"Kappa", 5} } }, {0, { {"Lambda", 6} } },
	{0, { {"Mu", 2} } }, {0, { {"Nu", 2} } }, {0, { {"Xi", 2} } }, {0, { {"Omicron", 7} } },
	{0, { {"Pi", 2} } }, {0, { {"Rho", 3} } }, {0, { {NULL, 0} } }, {0, { {"Sigma", 5} } },
	{0, { {"Tau", 3} } }, {0, { {"Upsilon", 7} } }, {0, { {"Phi", 3} } }, {0, { {"Chi", 3} } },
	{0, { {"Psi", 3} } }, {0, { {"Omega", 5} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {"alpha", 5} } }, {0, { {"beta", 4} } }, {0, { {"gamma", 5} } },
	{0, { {"delta", 5} } }, {0, { {"epsi", 4} } }, {0, { {"zeta", 4} } }, {0, { {"eta", 3} } },
	{0, { {"theta", 5} } }, {0, { {"iota", 4} } }, {0, { {"kappa", 5} } }, {0, { {"lambda", 6} } },
	{0, { {"mu", 2} } }, {0, { {"nu", 2} } }, {0, { {"xi", 2} } }, {0, { {"omicron", 7} } },
};

static const entity_stage3_row stage3_table_html5_003C0[] = {
	{0, { {"pi", 2} } }, {0, { {"rho", 3} } }, {0, { {"sigmav", 6} } }, {0, { {"sigma", 5} } },
	{0, { {"tau", 3} } }, {0, { {"upsi", 4} } }, {0, { {"phi", 3} } }, {0, { {"chi", 3} } },
	{0, { {"psi", 3} } }, {0, { {"omega", 5} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {"thetasym", 8} } }, {0, { {"upsih", 5} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {"straightphi", 11} } }, {0, { {"piv", 3} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {"Gammad", 6} } }, {0, { {"gammad", 6} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {"varkappa", 8} } }, {0, { {"rhov", 4} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {"straightepsilon", 15} } }, {0, { {"backepsilon", 11} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
};

static const entity_stage3_row stage3_table_html5_00400[] = {
	{0, { {NULL, 0} } }, {0, { {"IOcy", 4} } }, {0, { {"DJcy", 4} } }, {0, { {"GJcy", 4} } },
	{0, { {"Jukcy", 5} } }, {0, { {"DScy", 4} } }, {0, { {"Iukcy", 5} } }, {0, { {"YIcy", 4} } },
	{0, { {"Jsercy", 6} } }, {0, { {"LJcy", 4} } }, {0, { {"NJcy", 4} } }, {0, { {"TSHcy", 5} } },
	{0, { {"KJcy", 4} } }, {0, { {NULL, 0} } }, {0, { {"Ubrcy", 5} } }, {0, { {"DZcy", 4} } },
	{0, { {"Acy", 3} } }, {0, { {"Bcy", 3} } }, {0, { {"Vcy", 3} } }, {0, { {"Gcy", 3} } },
	{0, { {"Dcy", 3} } }, {0, { {"IEcy", 4} } }, {0, { {"ZHcy", 4} } }, {0, { {"Zcy", 3} } },
	{0, { {"Icy", 3} } }, {0, { {"Jcy", 3} } }, {0, { {"Kcy", 3} } }, {0, { {"Lcy", 3} } },
	{0, { {"Mcy", 3} } }, {0, { {"Ncy", 3} } }, {0, { {"Ocy", 3} } }, {0, { {"Pcy", 3} } },
	{0, { {"Rcy", 3} } }, {0, { {"Scy", 3} } }, {0, { {"Tcy", 3} } }, {0, { {"Ucy", 3} } },
	{0, { {"Fcy", 3} } }, {0, { {"KHcy", 4} } }, {0, { {"TScy", 4} } }, {0, { {"CHcy", 4} } },
	{0, { {"SHcy", 4} } }, {0, { {"SHCHcy", 6} } }, {0, { {"HARDcy", 6} } }, {0, { {"Ycy", 3} } },
	{0, { {"SOFTcy", 6} } }, {0, { {"Ecy", 3} } }, {0, { {"YUcy", 4} } }, {0, { {"YAcy", 4} } },
	{0, { {"acy", 3} } }, {0, { {"bcy", 3} } }, {0, { {"vcy", 3} } }, {0, { {"gcy", 3} } },
	{0, { {"dcy", 3} } }, {0, { {"iecy", 4} } }, {0, { {"zhcy", 4} } }, {0, { {"zcy", 3} } },
	{0, { {"icy", 3} } }, {0, { {"jcy", 3} } }, {0, { {"kcy", 3} } }, {0, { {"lcy", 3} } },
	{0, { {"mcy", 3} } }, {0, { {"ncy", 3} } }, {0, { {"ocy", 3} } }, {0, { {"pcy", 3} } },
};

static const entity_stage3_row stage3_table_html5_00440[] = {
	{0, { {"rcy", 3} } }, {0, { {"scy", 3} } }, {0, { {"tcy", 3} } }, {0, { {"ucy", 3} } },
	{0, { {"fcy", 3} } }, {0, { {"khcy", 4} } }, {0, { {"tscy", 4} } }, {0, { {"chcy", 4} } },
	{0, { {"shcy", 4} } }, {0, { {"shchcy", 6} } }, {0, { {"hardcy", 6} } }, {0, { {"ycy", 3} } },
	{0, { {"softcy", 6} } }, {0, { {"ecy", 3} } }, {0, { {"yucy", 4} } }, {0, { {"yacy", 4} } },
	{0, { {NULL, 0} } }, {0, { {"iocy", 4} } }, {0, { {"djcy", 4} } }, {0, { {"gjcy", 4} } },
	{0, { {"jukcy", 5} } }, {0, { {"dscy", 4} } }, {0, { {"iukcy", 5} } }, {0, { {"yicy", 4} } },
	{0, { {"jsercy", 6} } }, {0, { {"ljcy", 4} } }, {0, { {"njcy", 4} } }, {0, { {"tshcy", 5} } },
	{0, { {"kjcy", 4} } }, {0, { {NULL, 0} } }, {0, { {"ubrcy", 5} } }, {0, { {"dzcy", 4} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
};

static const entity_stage3_row stage3_table_html5_02000[] = {
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {"ensp", 4} } }, {0, { {"emsp", 4} } },
	{0, { {"emsp13", 6} } }, {0, { {"emsp14", 6} } }, {0, { {NULL, 0} } }, {0, { {"numsp", 5} } },
	{0, { {"puncsp", 6} } }, {0, { {"ThinSpace", 9} } }, {0, { {"hairsp", 6} } }, {0, { {"ZeroWidthSpace", 14} } },
	{0, { {"zwnj", 4} } }, {0, { {"zwj", 3} } }, {0, { {"lrm", 3} } }, {0, { {"rlm", 3} } },
	{0, { {"hyphen", 6} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {"ndash", 5} } },
	{0, { {"mdash", 5} } }, {0, { {"horbar", 6} } }, {0, { {"Verbar", 6} } }, {0, { {NULL, 0} } },
	{0, { {"OpenCurlyQuote", 14} } }, {0, { {"rsquo", 5} } }, {0, { {"sbquo", 5} } }, {0, { {NULL, 0} } },
	{0, { {"OpenCurlyDoubleQuote", 20} } }, {0, { {"rdquo", 5} } }, {0, { {"bdquo", 5} } }, {0, { {NULL, 0} } },
	{0, { {"dagger", 6} } }, {0, { {"Dagger", 6} } }, {0, { {"bull", 4} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {"nldr", 4} } }, {0, { {"hellip", 6} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {"permil", 6} } }, {0, { {"pertenk", 7} } }, {0, { {"prime", 5} } }, {0, { {"Prime", 5} } },
	{0, { {"tprime", 6} } }, {0, { {"backprime", 9} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {"lsaquo", 6} } }, {0, { {"rsaquo", 6} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {"oline", 5} } }, {0, { {NULL, 0} } },
};

static const entity_stage3_row stage3_table_html5_02040[] = {
	{0, { {NULL, 0} } }, {0, { {"caret", 5} } }, {0, { {NULL, 0} } }, {0, { {"hybull", 6} } },
	{0, { {"frasl", 5} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {"bsemi", 5} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {"qprime", 6} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {1, { {(void *)multi_cp_html5_0205F, 0} } },
	{0, { {"NoBreak", 7} } }, {0, { {"af", 2} } }, {0, { {"InvisibleTimes", 14} } }, {0, { {"ic", 2} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
};

static const entity_stage3_row stage3_table_html5_02080[] = {
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {"euro", 4} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
};

static const entity_stage3_row stage3_table_html5_020C0[] = {
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {"TripleDot", 9} } },
	{0, { {"DotDot", 6} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
};

static const entity_stage3_row stage3_table_html5_02100[] = {
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {"complexes", 9} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {"incare", 6} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {"gscr", 4} } }, {0, { {"HilbertSpace", 12} } },
	{0, { {"Hfr", 3} } }, {0, { {"Hopf", 4} } }, {0, { {"planckh", 7} } }, {0, { {"planck", 6} } },
	{0, { {"imagline", 8} } }, {0, { {"Ifr", 3} } }, {0, { {"lagran", 6} } }, {0, { {"ell", 3} } },
	{0, { {NULL, 0} } }, {0, { {"naturals", 8} } }, {0, { {"numero", 6} } }, {0, { {"copysr", 6} } },
	{0, { {"wp", 2} } }, {0, { {"primes", 6} } }, {0, { {"rationals", 9} } }, {0, { {"realine", 7} } },
	{0, { {"Rfr", 3} } }, {0, { {"Ropf", 4} } }, {0, { {"rx", 2} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {"trade", 5} } }, {0, { {NULL, 0} } },
	{0, { {"Zopf", 4} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {"mho", 3} } },
	{0, { {"Zfr", 3} } }, {0, { {"iiota", 5} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {"Bscr", 4} } }, {0, { {"Cfr", 3} } }, {0, { {NULL, 0} } }, {0, { {"escr", 4} } },
	{0, { {"expectation", 11} } }, {0, { {"Fouriertrf", 10} } }, {0, { {NULL, 0} } }, {0, { {"Mellintrf", 9} } },
	{0, { {"orderof", 7} } }, {0, { {"aleph", 5} } }, {0, { {"beth", 4} } }, {0, { {"gimel", 5} } },
	{0, { {"daleth", 6} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
};

static const entity_stage3_row stage3_table_html5_02140[] = {
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {"CapitalDifferentialD", 20} } }, {0, { {"DifferentialD", 13} } }, {0, { {"exponentiale", 12} } },
	{0, { {"ImaginaryI", 10} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {"frac13", 6} } },
	{0, { {"frac23", 6} } }, {0, { {"frac15", 6} } }, {0, { {"frac25", 6} } }, {0, { {"frac35", 6} } },
	{0, { {"frac45", 6} } }, {0, { {"frac16", 6} } }, {0, { {"frac56", 6} } }, {0, { {"frac18", 6} } },
	{0, { {"frac38", 6} } }, {0, { {"frac58", 6} } }, {0, { {"frac78", 6} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
};

static const entity_stage3_row stage3_table_html5_02180[] = {
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {"larr", 4} } }, {0, { {"uarr", 4} } }, {0, { {"srarr", 5} } }, {0, { {"darr", 4} } },
	{0, { {"harr", 4} } }, {0, { {"UpDownArrow", 11} } }, {0, { {"nwarrow", 7} } }, {0, { {"UpperRightArrow", 15} } },
	{0, { {"LowerRightArrow", 15} } }, {0, { {"swarr", 5} } }, {0, { {"nleftarrow", 10} } }, {0, { {"nrarr", 5} } },
	{0, { {NULL, 0} } }, {1, { {(void *)multi_cp_html5_0219D, 0} } }, {0, { {"Larr", 4} } }, {0, { {"Uarr", 4} } },
	{0, { {"twoheadrightarrow", 17} } }, {0, { {"Darr", 4} } }, {0, { {"larrtl", 6} } }, {0, { {"rarrtl", 6} } },
	{0, { {"LeftTeeArrow", 12} } }, {0, { {"UpTeeArrow", 10} } }, {0, { {"map", 3} } }, {0, { {"DownTeeArrow", 12} } },
	{0, { {NULL, 0} } }, {0, { {"larrhk", 6} } }, {0, { {"rarrhk", 6} } }, {0, { {"larrlp", 6} } },
	{0, { {"looparrowright", 14} } }, {0, { {"harrw", 5} } }, {0, { {"nleftrightarrow", 15} } }, {0, { {NULL, 0} } },
	{0, { {"Lsh", 3} } }, {0, { {"rsh", 3} } }, {0, { {"ldsh", 4} } }, {0, { {"rdsh", 4} } },
	{0, { {NULL, 0} } }, {0, { {"crarr", 5} } }, {0, { {"curvearrowleft", 14} } }, {0, { {"curarr", 6} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {"olarr", 5} } }, {0, { {"orarr", 5} } },
	{0, { {"leftharpoonup", 13} } }, {0, { {"leftharpoondown", 15} } }, {0, { {"RightUpVector", 13} } }, {0, { {"uharl", 5} } },
};

static const entity_stage3_row stage3_table_html5_021C0[] = {
	{0, { {"rharu", 5} } }, {0, { {"rhard", 5} } }, {0, { {"RightDownVector", 15} } }, {0, { {"dharl", 5} } },
	{0, { {"rightleftarrows", 15} } }, {0, { {"udarr", 5} } }, {0, { {"lrarr", 5} } }, {0, { {"llarr", 5} } },
	{0, { {"upuparrows", 10} } }, {0, { {"rrarr", 5} } }, {0, { {"downdownarrows", 14} } }, {0, { {"leftrightharpoons", 17} } },
	{0, { {"rightleftharpoons", 17} } }, {0, { {"nLeftarrow", 10} } }, {0, { {"nhArr", 5} } }, {0, { {"nrArr", 5} } },
	{0, { {"DoubleLeftArrow", 15} } }, {0, { {"DoubleUpArrow", 13} } }, {0, { {"Implies", 7} } }, {0, { {"Downarrow", 9} } },
	{0, { {"hArr", 4} } }, {0, { {"Updownarrow", 11} } }, {0, { {"nwArr", 5} } }, {0, { {"neArr", 5} } },
	{0, { {"seArr", 5} } }, {0, { {"swArr", 5} } }, {0, { {"lAarr", 5} } }, {0, { {"rAarr", 5} } },
	{0, { {NULL, 0} } }, {0, { {"zigrarr", 7} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {"LeftArrowBar", 12} } }, {0, { {"RightArrowBar", 13} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {"DownArrowUpArrow", 16} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {"loarr", 5} } }, {0, { {"roarr", 5} } }, {0, { {"hoarr", 5} } },
};

static const entity_stage3_row stage3_table_html5_02200[] = {
	{0, { {"forall", 6} } }, {0, { {"comp", 4} } }, {1, { {(void *)multi_cp_html5_02202, 0} } }, {0, { {"Exists", 6} } },
	{0, { {"nexist", 6} } }, {0, { {"empty", 5} } }, {0, { {NULL, 0} } }, {0, { {"nabla", 5} } },
	{0, { {"isinv", 5} } }, {0, { {"notin", 5} } }, {0, { {NULL, 0} } }, {0, { {"ReverseElement", 14} } },
	{0, { {"notniva", 7} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {"prod", 4} } },
	{0, { {"Coproduct", 9} } }, {0, { {"sum", 3} } }, {0, { {"minus", 5} } }, {0, { {"MinusPlus", 9} } },
	{0, { {"plusdo", 6} } }, {0, { {NULL, 0} } }, {0, { {"ssetmn", 6} } }, {0, { {"lowast", 6} } },
	{0, { {"compfn", 6} } }, {0, { {NULL, 0} } }, {0, { {"Sqrt", 4} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {"prop", 4} } }, {0, { {"infin", 5} } }, {0, { {"angrt", 5} } },
	{1, { {(void *)multi_cp_html5_02220, 0} } }, {0, { {"angmsd", 6} } }, {0, { {"angsph", 6} } }, {0, { {"mid", 3} } },
	{0, { {"nshortmid", 9} } }, {0, { {"shortparallel", 13} } }, {0, { {"nparallel", 9} } }, {0, { {"and", 3} } },
	{0, { {"or", 2} } }, {1, { {(void *)multi_cp_html5_02229, 0} } }, {1, { {(void *)multi_cp_html5_0222A, 0} } }, {0, { {"Integral", 8} } },
	{0, { {"Int", 3} } }, {0, { {"tint", 4} } }, {0, { {"ContourIntegral", 15} } }, {0, { {"DoubleContourIntegral", 21} } },
	{0, { {"Cconint", 7} } }, {0, { {"cwint", 5} } }, {0, { {"cwconint", 8} } }, {0, { {"awconint", 8} } },
	{0, { {"there4", 6} } }, {0, { {"Because", 7} } }, {0, { {"ratio", 5} } }, {0, { {"Colon", 5} } },
	{0, { {"minusd", 6} } }, {0, { {NULL, 0} } }, {0, { {"mDDot", 5} } }, {0, { {"homtht", 6} } },
	{1, { {(void *)multi_cp_html5_0223C, 0} } }, {1, { {(void *)multi_cp_html5_0223D, 0} } }, {1, { {(void *)multi_cp_html5_0223E, 0} } }, {0, { {"acd", 3} } },
};

static const entity_stage3_row stage3_table_html5_02240[] = {
	{0, { {"wr", 2} } }, {0, { {"NotTilde", 8} } }, {1, { {(void *)multi_cp_html5_02242, 0} } }, {0, { {"simeq", 5} } },
	{0, { {"nsime", 5} } }, {0, { {"TildeFullEqual", 14} } }, {0, { {"simne", 5} } }, {0, { {"ncong", 5} } },
	{0, { {"approx", 6} } }, {0, { {"napprox", 7} } }, {0, { {"ape", 3} } }, {1, { {(void *)multi_cp_html5_0224B, 0} } },
	{0, { {"bcong", 5} } }, {1, { {(void *)multi_cp_html5_0224D, 0} } }, {1, { {(void *)multi_cp_html5_0224E, 0} } }, {1, { {(void *)multi_cp_html5_0224F, 0} } },
	{1, { {(void *)multi_cp_html5_02250, 0} } }, {0, { {"doteqdot", 8} } }, {0, { {"fallingdotseq", 13} } }, {0, { {"risingdotseq", 12} } },
	{0, { {"coloneq", 7} } }, {0, { {"eqcolon", 7} } }, {0, { {"ecir", 4} } }, {0, { {"circeq", 6} } },
	{0, { {NULL, 0} } }, {0, { {"wedgeq", 6} } }, {0, { {"veeeq", 5} } }, {0, { {NULL, 0} } },
	{0, { {"triangleq", 9} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {"equest", 6} } },
	{0, { {"NotEqual", 8} } }, {1, { {(void *)multi_cp_html5_02261, 0} } }, {0, { {"NotCongruent", 12} } }, {0, { {NULL, 0} } },
	{1, { {(void *)multi_cp_html5_02264, 0} } }, {1, { {(void *)multi_cp_html5_02265, 0} } }, {1, { {(void *)multi_cp_html5_02266, 0} } }, {1, { {(void *)multi_cp_html5_02267, 0} } },
	{1, { {(void *)multi_cp_html5_02268, 0} } }, {1, { {(void *)multi_cp_html5_02269, 0} } }, {1, { {(void *)multi_cp_html5_0226A, 0} } }, {1, { {(void *)multi_cp_html5_0226B, 0} } },
	{0, { {"between", 7} } }, {0, { {"NotCupCap", 9} } }, {0, { {"NotLess", 7} } }, {0, { {"ngtr", 4} } },
	{0, { {"NotLessEqual", 12} } }, {0, { {"ngeq", 4} } }, {0, { {"LessTilde", 9} } }, {0, { {"GreaterTilde", 12} } },
	{0, { {"nlsim", 5} } }, {0, { {"ngsim", 5} } }, {0, { {"lessgtr", 7} } }, {0, { {"gl", 2} } },
	{0, { {"ntlg", 4} } }, {0, { {"NotGreaterLess", 14} } }, {0, { {"prec", 4} } }, {0, { {"succ", 4} } },
	{0, { {"PrecedesSlantEqual", 18} } }, {0, { {"succcurlyeq", 11} } }, {0, { {"precsim", 7} } }, {1, { {(void *)multi_cp_html5_0227F, 0} } },
};

static const entity_stage3_row stage3_table_html5_02280[] = {
	{0, { {"npr", 3} } }, {0, { {"NotSucceeds", 11} } }, {1, { {(void *)multi_cp_html5_02282, 0} } }, {1, { {(void *)multi_cp_html5_02283, 0} } },
	{0, { {"nsub", 4} } }, {0, { {"nsup", 4} } }, {0, { {"SubsetEqual", 11} } }, {0, { {"supe", 4} } },
	{0, { {"NotSubsetEqual", 14} } }, {0, { {"NotSupersetEqual", 16} } }, {1, { {(void *)multi_cp_html5_0228A, 0} } }, {1, { {(void *)multi_cp_html5_0228B, 0} } },
	{0, { {NULL, 0} } }, {0, { {"cupdot", 6} } }, {0, { {"UnionPlus", 9} } }, {1, { {(void *)multi_cp_html5_0228F, 0} } },
	{1, { {(void *)multi_cp_html5_02290, 0} } }, {0, { {"SquareSubsetEqual", 17} } }, {0, { {"SquareSupersetEqual", 19} } }, {1, { {(void *)multi_cp_html5_02293, 0} } },
	{1, { {(void *)multi_cp_html5_02294, 0} } }, {0, { {"CirclePlus", 10} } }, {0, { {"ominus", 6} } }, {0, { {"CircleTimes", 11} } },
	{0, { {"osol", 4} } }, {0, { {"CircleDot", 9} } }, {0, { {"ocir", 4} } }, {0, { {"oast", 4} } },
	{0, { {NULL, 0} } }, {0, { {"odash", 5} } }, {0, { {"boxplus", 7} } }, {0, { {"boxminus", 8} } },
	{0, { {"timesb", 6} } }, {0, { {"sdotb", 5} } }, {0, { {"vdash", 5} } }, {0, { {"dashv", 5} } },
	{0, { {"DownTee", 7} } }, {0, { {"perp", 4} } }, {0, { {NULL, 0} } }, {0, { {"models", 6} } },
	{0, { {"DoubleRightTee", 14} } }, {0, { {"Vdash", 5} } }, {0, { {"Vvdash", 6} } }, {0, { {"VDash", 5} } },
	{0, { {"nvdash", 6} } }, {0, { {"nvDash", 6} } }, {0, { {"nVdash", 6} } }, {0, { {"nVDash", 6} } },
	{0, { {"prurel", 6} } }, {0, { {NULL, 0} } }, {0, { {"vartriangleleft", 15} } }, {0, { {"vrtri", 5} } },
	{1, { {(void *)multi_cp_html5_022B4, 0} } }, {1, { {(void *)multi_cp_html5_022B5, 0} } }, {0, { {"origof", 6} } }, {0, { {"imof", 4} } },
	{0, { {"mumap", 5} } }, {0, { {"hercon", 6} } }, {0, { {"intcal", 6} } }, {0, { {"veebar", 6} } },
	{0, { {NULL, 0} } }, {0, { {"barvee", 6} } }, {0, { {"angrtvb", 7} } }, {0, { {"lrtri", 5} } },
};

static const entity_stage3_row stage3_table_html5_022C0[] = {
	{0, { {"xwedge", 6} } }, {0, { {"xvee", 4} } }, {0, { {"bigcap", 6} } }, {0, { {"bigcup", 6} } },
	{0, { {"diamond", 7} } }, {0, { {"sdot", 4} } }, {0, { {"Star", 4} } }, {0, { {"divonx", 6} } },
	{0, { {"bowtie", 6} } }, {0, { {"ltimes", 6} } }, {0, { {"rtimes", 6} } }, {0, { {"lthree", 6} } },
	{0, { {"rthree", 6} } }, {0, { {"backsimeq", 9} } }, {0, { {"curlyvee", 8} } }, {0, { {"curlywedge", 10} } },
	{0, { {"Sub", 3} } }, {0, { {"Supset", 6} } }, {0, { {"Cap", 3} } }, {0, { {"Cup", 3} } },
	{0, { {"pitchfork", 9} } }, {0, { {"epar", 4} } }, {0, { {"lessdot", 7} } }, {0, { {"gtrdot", 6} } },
	{1, { {(void *)multi_cp_html5_022D8, 0} } }, {1, { {(void *)multi_cp_html5_022D9, 0} } }, {1, { {(void *)multi_cp_html5_022DA, 0} } }, {1, { {(void *)multi_cp_html5_022DB, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {"curlyeqprec", 11} } }, {0, { {"cuesc", 5} } },
	{0, { {"NotPrecedesSlantEqual", 21} } }, {0, { {"NotSucceedsSlantEqual", 21} } }, {0, { {"NotSquareSubsetEqual", 20} } }, {0, { {"NotSquareSupersetEqual", 22} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {"lnsim", 5} } }, {0, { {"gnsim", 5} } },
	{0, { {"precnsim", 8} } }, {0, { {"scnsim", 6} } }, {0, { {"nltri", 5} } }, {0, { {"ntriangleright", 14} } },
	{0, { {"nltrie", 6} } }, {0, { {"NotRightTriangleEqual", 21} } }, {0, { {"vellip", 6} } }, {0, { {"ctdot", 5} } },
	{0, { {"utdot", 5} } }, {0, { {"dtdot", 5} } }, {0, { {"disin", 5} } }, {0, { {"isinsv", 6} } },
	{0, { {"isins", 5} } }, {1, { {(void *)multi_cp_html5_022F5, 0} } }, {0, { {"notinvc", 7} } }, {0, { {"notinvb", 7} } },
	{0, { {NULL, 0} } }, {1, { {(void *)multi_cp_html5_022F9, 0} } }, {0, { {"nisd", 4} } }, {0, { {"xnis", 4} } },
	{0, { {"nis", 3} } }, {0, { {"notnivc", 7} } }, {0, { {"notnivb", 7} } }, {0, { {NULL, 0} } },
};

static const entity_stage3_row stage3_table_html5_02300[] = {
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {"barwed", 6} } }, {0, { {"doublebarwedge", 14} } }, {0, { {NULL, 0} } },
	{0, { {"lceil", 5} } }, {0, { {"RightCeiling", 12} } }, {0, { {"LeftFloor", 9} } }, {0, { {"RightFloor", 10} } },
	{0, { {"drcrop", 6} } }, {0, { {"dlcrop", 6} } }, {0, { {"urcrop", 6} } }, {0, { {"ulcrop", 6} } },
	{0, { {"bnot", 4} } }, {0, { {NULL, 0} } }, {0, { {"profline", 8} } }, {0, { {"profsurf", 8} } },
	{0, { {NULL, 0} } }, {0, { {"telrec", 6} } }, {0, { {"target", 6} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {"ulcorner", 8} } }, {0, { {"urcorner", 8} } }, {0, { {"llcorner", 8} } }, {0, { {"drcorn", 6} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {"frown", 5} } }, {0, { {"smile", 5} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {"cylcty", 6} } }, {0, { {"profalar", 8} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {"topbot", 6} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {"ovbar", 5} } }, {0, { {NULL, 0} } }, {0, { {"solbar", 6} } },
};

static const entity_stage3_row stage3_table_html5_02340[] = {
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {"angzarr", 7} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
};

static const entity_stage3_row stage3_table_html5_02380[] = {
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {"lmoust", 6} } }, {0, { {"rmoust", 6} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {"OverBracket", 11} } }, {0, { {"bbrk", 4} } }, {0, { {"bbrktbrk", 8} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
};

static const entity_stage3_row stage3_table_html5_023C0[] = {
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {"OverParenthesis", 15} } }, {0, { {"UnderParenthesis", 16} } }, {0, { {"OverBrace", 9} } }, {0, { {"UnderBrace", 10} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {"trpezium", 8} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {"elinters", 8} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
};

static const entity_stage3_row stage3_table_html5_02400[] = {
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {"blank", 5} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
};

static const entity_stage3_row stage3_table_html5_024C0[] = {
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {"oS", 2} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
};

static const entity_stage3_row stage3_table_html5_02500[] = {
	{0, { {"HorizontalLine", 14} } }, {0, { {NULL, 0} } }, {0, { {"boxv", 4} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {"boxdr", 5} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {"boxdl", 5} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {"boxur", 5} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {"boxul", 5} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {"boxvr", 5} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {"boxvl", 5} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {"boxhd", 5} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {"boxhu", 5} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {"boxvh", 5} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
};

static const entity_stage3_row stage3_table_html5_02540[] = {
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {"boxH", 4} } }, {0, { {"boxV", 4} } }, {0, { {"boxdR", 5} } }, {0, { {"boxDr", 5} } },
	{0, { {"boxDR", 5} } }, {0, { {"boxdL", 5} } }, {0, { {"boxDl", 5} } }, {0, { {"boxDL", 5} } },
	{0, { {"boxuR", 5} } }, {0, { {"boxUr", 5} } }, {0, { {"boxUR", 5} } }, {0, { {"boxuL", 5} } },
	{0, { {"boxUl", 5} } }, {0, { {"boxUL", 5} } }, {0, { {"boxvR", 5} } }, {0, { {"boxVr", 5} } },
	{0, { {"boxVR", 5} } }, {0, { {"boxvL", 5} } }, {0, { {"boxVl", 5} } }, {0, { {"boxVL", 5} } },
	{0, { {"boxHd", 5} } }, {0, { {"boxhD", 5} } }, {0, { {"boxHD", 5} } }, {0, { {"boxHu", 5} } },
	{0, { {"boxhU", 5} } }, {0, { {"boxHU", 5} } }, {0, { {"boxvH", 5} } }, {0, { {"boxVh", 5} } },
	{0, { {"boxVH", 5} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
};

static const entity_stage3_row stage3_table_html5_02580[] = {
	{0, { {"uhblk", 5} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {"lhblk", 5} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {"block", 5} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {"blk14", 5} } }, {0, { {"blk12", 5} } }, {0, { {"blk34", 5} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {"Square", 6} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {"squarf", 6} } }, {0, { {"EmptyVerySmallSquare", 20} } },
	{0, { {NULL, 0} } }, {0, { {"rect", 4} } }, {0, { {"marker", 6} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {"fltns", 5} } }, {0, { {NULL, 0} } }, {0, { {"bigtriangleup", 13} } },
	{0, { {"blacktriangle", 13} } }, {0, { {"triangle", 8} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {"blacktriangleright", 18} } }, {0, { {"rtri", 4} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {"bigtriangledown", 15} } }, {0, { {"blacktriangledown", 17} } }, {0, { {"triangledown", 12} } },
};

static const entity_stage3_row stage3_table_html5_025C0[] = {
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {"blacktriangleleft", 17} } }, {0, { {"ltri", 4} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {"lozenge", 7} } }, {0, { {"cir", 3} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {"tridot", 6} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {"bigcirc", 7} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {"ultri", 5} } }, {0, { {"urtri", 5} } }, {0, { {"lltri", 5} } }, {0, { {"EmptySmallSquare", 16} } },
	{0, { {"FilledSmallSquare", 17} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
};

static const entity_stage3_row stage3_table_html5_02600[] = {
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {"starf", 5} } }, {0, { {"star", 4} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {"phone", 5} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
};

static const entity_stage3_row stage3_table_html5_02640[] = {
	{0, { {"female", 6} } }, {0, { {NULL, 0} } }, {0, { {"male", 4} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {"spadesuit", 9} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {"clubs", 5} } },
	{0, { {NULL, 0} } }, {0, { {"hearts", 6} } }, {0, { {"diamondsuit", 11} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {"sung", 4} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {"flat", 4} } }, {0, { {"natur", 5} } }, {0, { {"sharp", 5} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
};

static const entity_stage3_row stage3_table_html5_02700[] = {
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {"check", 5} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {"cross", 5} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {"maltese", 7} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {"sext", 4} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
};

static const entity_stage3_row stage3_table_html5_02740[] = {
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {"VerticalSeparator", 17} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {"lbbrk", 5} } }, {0, { {"rbbrk", 5} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
};

static const entity_stage3_row stage3_table_html5_027C0[] = {
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {"bsolhsub", 8} } }, {0, { {"suphsol", 7} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {"LeftDoubleBracket", 17} } }, {0, { {"RightDoubleBracket", 18} } },
	{0, { {"langle", 6} } }, {0, { {"RightAngleBracket", 17} } }, {0, { {"Lang", 4} } }, {0, { {"Rang", 4} } },
	{0, { {"loang", 5} } }, {0, { {"roang", 5} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {"longleftarrow", 13} } }, {0, { {"LongRightArrow", 14} } }, {0, { {"LongLeftRightArrow", 18} } },
	{0, { {"xlArr", 5} } }, {0, { {"DoubleLongRightArrow", 20} } }, {0, { {"xhArr", 5} } }, {0, { {NULL, 0} } },
	{0, { {"xmap", 4} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {"dzigrarr", 8} } },
};

static const entity_stage3_row stage3_table_html5_02900[] = {
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {"nvlArr", 6} } }, {0, { {"nvrArr", 6} } },
	{0, { {"nvHarr", 6} } }, {0, { {"Map", 3} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {"lbarr", 5} } }, {0, { {"bkarow", 6} } }, {0, { {"lBarr", 5} } }, {0, { {"dbkarow", 7} } },
	{0, { {"drbkarow", 8} } }, {0, { {"DDotrahd", 8} } }, {0, { {"UpArrowBar", 10} } }, {0, { {"DownArrowBar", 12} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {"Rarrtl", 6} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {"latail", 6} } }, {0, { {"ratail", 6} } }, {0, { {"lAtail", 6} } },
	{0, { {"rAtail", 6} } }, {0, { {"larrfs", 6} } }, {0, { {"rarrfs", 6} } }, {0, { {"larrbfs", 7} } },
	{0, { {"rarrbfs", 7} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {"nwarhk", 6} } },
	{0, { {"nearhk", 6} } }, {0, { {"searhk", 6} } }, {0, { {"swarhk", 6} } }, {0, { {"nwnear", 6} } },
	{0, { {"toea", 4} } }, {0, { {"seswar", 6} } }, {0, { {"swnwar", 6} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {1, { {(void *)multi_cp_html5_02933, 0} } },
	{0, { {NULL, 0} } }, {0, { {"cudarrr", 7} } }, {0, { {"ldca", 4} } }, {0, { {"rdca", 4} } },
	{0, { {"cudarrl", 7} } }, {0, { {"larrpl", 6} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {"curarrm", 7} } }, {0, { {"cularrp", 7} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
};

static const entity_stage3_row stage3_table_html5_02940[] = {
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {"rarrpl", 6} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {"harrcir", 7} } }, {0, { {"Uarrocir", 8} } }, {0, { {"lurdshar", 8} } }, {0, { {"ldrushar", 8} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {"LeftRightVector", 15} } }, {0, { {"RightUpDownVector", 17} } },
	{0, { {"DownLeftRightVector", 19} } }, {0, { {"LeftUpDownVector", 16} } }, {0, { {"LeftVectorBar", 13} } }, {0, { {"RightVectorBar", 14} } },
	{0, { {"RightUpVectorBar", 16} } }, {0, { {"RightDownVectorBar", 18} } }, {0, { {"DownLeftVectorBar", 17} } }, {0, { {"DownRightVectorBar", 18} } },
	{0, { {"LeftUpVectorBar", 15} } }, {0, { {"LeftDownVectorBar", 17} } }, {0, { {"LeftTeeVector", 13} } }, {0, { {"RightTeeVector", 14} } },
	{0, { {"RightUpTeeVector", 16} } }, {0, { {"RightDownTeeVector", 18} } }, {0, { {"DownLeftTeeVector", 17} } }, {0, { {"DownRightTeeVector", 18} } },
	{0, { {"LeftUpTeeVector", 15} } }, {0, { {"LeftDownTeeVector", 17} } }, {0, { {"lHar", 4} } }, {0, { {"uHar", 4} } },
	{0, { {"rHar", 4} } }, {0, { {"dHar", 4} } }, {0, { {"luruhar", 7} } }, {0, { {"ldrdhar", 7} } },
	{0, { {"ruluhar", 7} } }, {0, { {"rdldhar", 7} } }, {0, { {"lharul", 6} } }, {0, { {"llhard", 6} } },
	{0, { {"rharul", 6} } }, {0, { {"lrhard", 6} } }, {0, { {"udhar", 5} } }, {0, { {"ReverseUpEquilibrium", 20} } },
	{0, { {"RoundImplies", 12} } }, {0, { {"erarr", 5} } }, {0, { {"simrarr", 7} } }, {0, { {"larrsim", 7} } },
	{0, { {"rarrsim", 7} } }, {0, { {"rarrap", 6} } }, {0, { {"ltlarr", 6} } }, {0, { {NULL, 0} } },
	{0, { {"gtrarr", 6} } }, {0, { {"subrarr", 7} } }, {0, { {NULL, 0} } }, {0, { {"suplarr", 7} } },
	{0, { {"lfisht", 6} } }, {0, { {"rfisht", 6} } }, {0, { {"ufisht", 6} } }, {0, { {"dfisht", 6} } },
};

static const entity_stage3_row stage3_table_html5_02980[] = {
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {"lopar", 5} } }, {0, { {"ropar", 5} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {"lbrke", 5} } },
	{0, { {"rbrke", 5} } }, {0, { {"lbrkslu", 7} } }, {0, { {"rbrksld", 7} } }, {0, { {"lbrksld", 7} } },
	{0, { {"rbrkslu", 7} } }, {0, { {"langd", 5} } }, {0, { {"rangd", 5} } }, {0, { {"lparlt", 6} } },
	{0, { {"rpargt", 6} } }, {0, { {"gtlPar", 6} } }, {0, { {"ltrPar", 6} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {"vzigzag", 7} } }, {0, { {NULL, 0} } },
	{0, { {"vangrt", 6} } }, {0, { {"angrtvbd", 8} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {"ange", 4} } }, {0, { {"range", 5} } }, {0, { {"dwangle", 7} } }, {0, { {"uwangle", 7} } },
	{0, { {"angmsdaa", 8} } }, {0, { {"angmsdab", 8} } }, {0, { {"angmsdac", 8} } }, {0, { {"angmsdad", 8} } },
	{0, { {"angmsdae", 8} } }, {0, { {"angmsdaf", 8} } }, {0, { {"angmsdag", 8} } }, {0, { {"angmsdah", 8} } },
	{0, { {"bemptyv", 7} } }, {0, { {"demptyv", 7} } }, {0, { {"cemptyv", 7} } }, {0, { {"raemptyv", 8} } },
	{0, { {"laemptyv", 8} } }, {0, { {"ohbar", 5} } }, {0, { {"omid", 4} } }, {0, { {"opar", 4} } },
	{0, { {NULL, 0} } }, {0, { {"operp", 5} } }, {0, { {NULL, 0} } }, {0, { {"olcross", 7} } },
	{0, { {"odsold", 6} } }, {0, { {NULL, 0} } }, {0, { {"olcir", 5} } }, {0, { {"ofcir", 5} } },
};

static const entity_stage3_row stage3_table_html5_029C0[] = {
	{0, { {"olt", 3} } }, {0, { {"ogt", 3} } }, {0, { {"cirscir", 7} } }, {0, { {"cirE", 4} } },
	{0, { {"solb", 4} } }, {0, { {"bsolb", 5} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {"boxbox", 6} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {"trisb", 5} } }, {0, { {"rtriltri", 8} } }, {1, { {(void *)multi_cp_html5_029CF, 0} } },
	{1, { {(void *)multi_cp_html5_029D0, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {"iinfin", 6} } }, {0, { {"infintie", 8} } }, {0, { {"nvinfin", 7} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {"eparsl", 6} } },
	{0, { {"smeparsl", 8} } }, {0, { {"eqvparsl", 8} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {"lozf", 4} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {"RuleDelayed", 11} } }, {0, { {NULL, 0} } }, {0, { {"dsol", 4} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
};

static const entity_stage3_row stage3_table_html5_02A00[] = {
	{0, { {"xodot", 5} } }, {0, { {"bigoplus", 8} } }, {0, { {"bigotimes", 9} } }, {0, { {NULL, 0} } },
	{0, { {"biguplus", 8} } }, {0, { {NULL, 0} } }, {0, { {"bigsqcup", 8} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {"iiiint", 6} } }, {0, { {"fpartint", 8} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {"cirfnint", 8} } }, {0, { {"awint", 5} } }, {0, { {"rppolint", 8} } }, {0, { {"scpolint", 8} } },
	{0, { {"npolint", 7} } }, {0, { {"pointint", 8} } }, {0, { {"quatint", 7} } }, {0, { {"intlarhk", 8} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {"pluscir", 7} } }, {0, { {"plusacir", 8} } },
	{0, { {"simplus", 7} } }, {0, { {"plusdu", 6} } }, {0, { {"plussim", 7} } }, {0, { {"plustwo", 7} } },
	{0, { {NULL, 0} } }, {0, { {"mcomma", 6} } }, {0, { {"minusdu", 7} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {"loplus", 6} } }, {0, { {"roplus", 6} } }, {0, { {"Cross", 5} } },
	{0, { {"timesd", 6} } }, {0, { {"timesbar", 8} } }, {0, { {NULL, 0} } }, {0, { {"smashp", 6} } },
	{0, { {"lotimes", 7} } }, {0, { {"rotimes", 7} } }, {0, { {"otimesas", 8} } }, {0, { {"Otimes", 6} } },
	{0, { {"odiv", 4} } }, {0, { {"triplus", 7} } }, {0, { {"triminus", 8} } }, {0, { {"tritime", 7} } },
	{0, { {"iprod", 5} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {"amalg", 5} } },
};

static const entity_stage3_row stage3_table_html5_02A40[] = {
	{0, { {"capdot", 6} } }, {0, { {NULL, 0} } }, {0, { {"ncup", 4} } }, {0, { {"ncap", 4} } },
	{0, { {"capand", 6} } }, {0, { {"cupor", 5} } }, {0, { {"cupcap", 6} } }, {0, { {"capcup", 6} } },
	{0, { {"cupbrcap", 8} } }, {0, { {"capbrcup", 8} } }, {0, { {"cupcup", 6} } }, {0, { {"capcap", 6} } },
	{0, { {"ccups", 5} } }, {0, { {"ccaps", 5} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {"ccupssm", 7} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {"And", 3} } },
	{0, { {"Or", 2} } }, {0, { {"andand", 6} } }, {0, { {"oror", 4} } }, {0, { {"orslope", 7} } },
	{0, { {"andslope", 8} } }, {0, { {NULL, 0} } }, {0, { {"andv", 4} } }, {0, { {"orv", 3} } },
	{0, { {"andd", 4} } }, {0, { {"ord", 3} } }, {0, { {NULL, 0} } }, {0, { {"wedbar", 6} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {"sdote", 5} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {"simdot", 6} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {1, { {(void *)multi_cp_html5_02A6D, 0} } }, {0, { {"easter", 6} } }, {0, { {"apacir", 6} } },
	{1, { {(void *)multi_cp_html5_02A70, 0} } }, {0, { {"eplus", 5} } }, {0, { {"pluse", 5} } }, {0, { {"Esim", 4} } },
	{0, { {"Colone", 6} } }, {0, { {"Equal", 5} } }, {0, { {NULL, 0} } }, {0, { {"ddotseq", 7} } },
	{0, { {"equivDD", 7} } }, {0, { {"ltcir", 5} } }, {0, { {"gtcir", 5} } }, {0, { {"ltquest", 7} } },
	{0, { {"gtquest", 7} } }, {1, { {(void *)multi_cp_html5_02A7D, 0} } }, {1, { {(void *)multi_cp_html5_02A7E, 0} } }, {0, { {"lesdot", 6} } },
};

static const entity_stage3_row stage3_table_html5_02A80[] = {
	{0, { {"gesdot", 6} } }, {0, { {"lesdoto", 7} } }, {0, { {"gesdoto", 7} } }, {0, { {"lesdotor", 8} } },
	{0, { {"gesdotol", 8} } }, {0, { {"lap", 3} } }, {0, { {"gap", 3} } }, {0, { {"lne", 3} } },
	{0, { {"gne", 3} } }, {0, { {"lnap", 4} } }, {0, { {"gnap", 4} } }, {0, { {"lesseqqgtr", 10} } },
	{0, { {"gEl", 3} } }, {0, { {"lsime", 5} } }, {0, { {"gsime", 5} } }, {0, { {"lsimg", 5} } },
	{0, { {"gsiml", 5} } }, {0, { {"lgE", 3} } }, {0, { {"glE", 3} } }, {0, { {"lesges", 6} } },
	{0, { {"gesles", 6} } }, {0, { {"els", 3} } }, {0, { {"egs", 3} } }, {0, { {"elsdot", 6} } },
	{0, { {"egsdot", 6} } }, {0, { {"el", 2} } }, {0, { {"eg", 2} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {"siml", 4} } }, {0, { {"simg", 4} } }, {0, { {"simlE", 5} } },
	{0, { {"simgE", 5} } }, {1, { {(void *)multi_cp_html5_02AA1, 0} } }, {1, { {(void *)multi_cp_html5_02AA2, 0} } }, {0, { {NULL, 0} } },
	{0, { {"glj", 3} } }, {0, { {"gla", 3} } }, {0, { {"ltcc", 4} } }, {0, { {"gtcc", 4} } },
	{0, { {"lescc", 5} } }, {0, { {"gescc", 5} } }, {0, { {"smt", 3} } }, {0, { {"lat", 3} } },
	{1, { {(void *)multi_cp_html5_02AAC, 0} } }, {1, { {(void *)multi_cp_html5_02AAD, 0} } }, {0, { {"bumpE", 5} } }, {1, { {(void *)multi_cp_html5_02AAF, 0} } },
	{1, { {(void *)multi_cp_html5_02AB0, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {"prE", 3} } },
	{0, { {"scE", 3} } }, {0, { {"precneqq", 8} } }, {0, { {"scnE", 4} } }, {0, { {"precapprox", 10} } },
	{0, { {"succapprox", 10} } }, {0, { {"precnapprox", 11} } }, {0, { {"succnapprox", 11} } }, {0, { {"Pr", 2} } },
	{0, { {"Sc", 2} } }, {0, { {"subdot", 6} } }, {0, { {"supdot", 6} } }, {0, { {"subplus", 7} } },
};

static const entity_stage3_row stage3_table_html5_02AC0[] = {
	{0, { {"supplus", 7} } }, {0, { {"submult", 7} } }, {0, { {"supmult", 7} } }, {0, { {"subedot", 7} } },
	{0, { {"supedot", 7} } }, {1, { {(void *)multi_cp_html5_02AC5, 0} } }, {1, { {(void *)multi_cp_html5_02AC6, 0} } }, {0, { {"subsim", 6} } },
	{0, { {"supsim", 6} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {1, { {(void *)multi_cp_html5_02ACB, 0} } },
	{1, { {(void *)multi_cp_html5_02ACC, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {"csub", 4} } },
	{0, { {"csup", 4} } }, {0, { {"csube", 5} } }, {0, { {"csupe", 5} } }, {0, { {"subsup", 6} } },
	{0, { {"supsub", 6} } }, {0, { {"subsub", 6} } }, {0, { {"supsup", 6} } }, {0, { {"suphsub", 7} } },
	{0, { {"supdsub", 7} } }, {0, { {"forkv", 5} } }, {0, { {"topfork", 7} } }, {0, { {"mlcp", 4} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {"Dashv", 5} } }, {0, { {NULL, 0} } }, {0, { {"Vdashl", 6} } }, {0, { {"Barv", 4} } },
	{0, { {"vBar", 4} } }, {0, { {"vBarv", 5} } }, {0, { {NULL, 0} } }, {0, { {"Vbar", 4} } },
	{0, { {"Not", 3} } }, {0, { {"bNot", 4} } }, {0, { {"rnmid", 5} } }, {0, { {"cirmid", 6} } },
	{0, { {"midcir", 6} } }, {0, { {"topcir", 6} } }, {0, { {"nhpar", 5} } }, {0, { {"parsim", 6} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {1, { {(void *)multi_cp_html5_02AFD, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
};

static const entity_stage3_row stage3_table_html5_0FB00[] = {
	{0, { {"fflig", 5} } }, {0, { {"filig", 5} } }, {0, { {"fllig", 5} } }, {0, { {"ffilig", 6} } },
	{0, { {"ffllig", 6} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
};

static const entity_stage3_row stage3_table_html5_1D480[] = {
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {"Ascr", 4} } }, {0, { {NULL, 0} } }, {0, { {"Cscr", 4} } }, {0, { {"Dscr", 4} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {"Gscr", 4} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {"Jscr", 4} } }, {0, { {"Kscr", 4} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {"Nscr", 4} } }, {0, { {"Oscr", 4} } }, {0, { {"Pscr", 4} } },
	{0, { {"Qscr", 4} } }, {0, { {NULL, 0} } }, {0, { {"Sscr", 4} } }, {0, { {"Tscr", 4} } },
	{0, { {"Uscr", 4} } }, {0, { {"Vscr", 4} } }, {0, { {"Wscr", 4} } }, {0, { {"Xscr", 4} } },
	{0, { {"Yscr", 4} } }, {0, { {"Zscr", 4} } }, {0, { {"ascr", 4} } }, {0, { {"bscr", 4} } },
	{0, { {"cscr", 4} } }, {0, { {"dscr", 4} } }, {0, { {NULL, 0} } }, {0, { {"fscr", 4} } },
	{0, { {NULL, 0} } }, {0, { {"hscr", 4} } }, {0, { {"iscr", 4} } }, {0, { {"jscr", 4} } },
};

static const entity_stage3_row stage3_table_html5_1D4C0[] = {
	{0, { {"kscr", 4} } }, {0, { {"lscr", 4} } }, {0, { {"mscr", 4} } }, {0, { {"nscr", 4} } },
	{0, { {NULL, 0} } }, {0, { {"pscr", 4} } }, {0, { {"qscr", 4} } }, {0, { {"rscr", 4} } },
	{0, { {"sscr", 4} } }, {0, { {"tscr", 4} } }, {0, { {"uscr", 4} } }, {0, { {"vscr", 4} } },
	{0, { {"wscr", 4} } }, {0, { {"xscr", 4} } }, {0, { {"yscr", 4} } }, {0, { {"zscr", 4} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
};

static const entity_stage3_row stage3_table_html5_1D500[] = {
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {"Afr", 3} } }, {0, { {"Bfr", 3} } }, {0, { {NULL, 0} } }, {0, { {"Dfr", 3} } },
	{0, { {"Efr", 3} } }, {0, { {"Ffr", 3} } }, {0, { {"Gfr", 3} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {"Jfr", 3} } }, {0, { {"Kfr", 3} } }, {0, { {"Lfr", 3} } },
	{0, { {"Mfr", 3} } }, {0, { {"Nfr", 3} } }, {0, { {"Ofr", 3} } }, {0, { {"Pfr", 3} } },
	{0, { {"Qfr", 3} } }, {0, { {NULL, 0} } }, {0, { {"Sfr", 3} } }, {0, { {"Tfr", 3} } },
	{0, { {"Ufr", 3} } }, {0, { {"Vfr", 3} } }, {0, { {"Wfr", 3} } }, {0, { {"Xfr", 3} } },
	{0, { {"Yfr", 3} } }, {0, { {NULL, 0} } }, {0, { {"afr", 3} } }, {0, { {"bfr", 3} } },
	{0, { {"cfr", 3} } }, {0, { {"dfr", 3} } }, {0, { {"efr", 3} } }, {0, { {"ffr", 3} } },
	{0, { {"gfr", 3} } }, {0, { {"hfr", 3} } }, {0, { {"ifr", 3} } }, {0, { {"jfr", 3} } },
	{0, { {"kfr", 3} } }, {0, { {"lfr", 3} } }, {0, { {"mfr", 3} } }, {0, { {"nfr", 3} } },
	{0, { {"ofr", 3} } }, {0, { {"pfr", 3} } }, {0, { {"qfr", 3} } }, {0, { {"rfr", 3} } },
	{0, { {"sfr", 3} } }, {0, { {"tfr", 3} } }, {0, { {"ufr", 3} } }, {0, { {"vfr", 3} } },
	{0, { {"wfr", 3} } }, {0, { {"xfr", 3} } }, {0, { {"yfr", 3} } }, {0, { {"zfr", 3} } },
	{0, { {"Aopf", 4} } }, {0, { {"Bopf", 4} } }, {0, { {NULL, 0} } }, {0, { {"Dopf", 4} } },
	{0, { {"Eopf", 4} } }, {0, { {"Fopf", 4} } }, {0, { {"Gopf", 4} } }, {0, { {NULL, 0} } },
};

static const entity_stage3_row stage3_table_html5_1D540[] = {
	{0, { {"Iopf", 4} } }, {0, { {"Jopf", 4} } }, {0, { {"Kopf", 4} } }, {0, { {"Lopf", 4} } },
	{0, { {"Mopf", 4} } }, {0, { {NULL, 0} } }, {0, { {"Oopf", 4} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {"Sopf", 4} } }, {0, { {"Topf", 4} } },
	{0, { {"Uopf", 4} } }, {0, { {"Vopf", 4} } }, {0, { {"Wopf", 4} } }, {0, { {"Xopf", 4} } },
	{0, { {"Yopf", 4} } }, {0, { {NULL, 0} } }, {0, { {"aopf", 4} } }, {0, { {"bopf", 4} } },
	{0, { {"copf", 4} } }, {0, { {"dopf", 4} } }, {0, { {"eopf", 4} } }, {0, { {"fopf", 4} } },
	{0, { {"gopf", 4} } }, {0, { {"hopf", 4} } }, {0, { {"iopf", 4} } }, {0, { {"jopf", 4} } },
	{0, { {"kopf", 4} } }, {0, { {"lopf", 4} } }, {0, { {"mopf", 4} } }, {0, { {"nopf", 4} } },
	{0, { {"oopf", 4} } }, {0, { {"popf", 4} } }, {0, { {"qopf", 4} } }, {0, { {"ropf", 4} } },
	{0, { {"sopf", 4} } }, {0, { {"topf", 4} } }, {0, { {"uopf", 4} } }, {0, { {"vopf", 4} } },
	{0, { {"wopf", 4} } }, {0, { {"xopf", 4} } }, {0, { {"yopf", 4} } }, {0, { {"zopf", 4} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
};

/* end of stage 3 Tables for HTML5 }}} */

/* {{{ Stage 2 Tables for HTML5 */

static const entity_stage2_row empty_stage2_table[] = {
	empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table,
	empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table,
	empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table,
	empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table,
	empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table,
	empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table,
	empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table,
	empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table,
	empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table,
	empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table,
	empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table,
	empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table,
	empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table,
	empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table,
	empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table,
	empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table,
};
static const entity_stage2_row stage2_table_html5_00000[] = {
	stage3_table_html5_00000, stage3_table_html5_00040, stage3_table_html5_00080, stage3_table_html5_000C0,
	stage3_table_html5_00100, stage3_table_html5_00140, stage3_table_html5_00180, stage3_table_html5_001C0,
	stage3_table_html5_00200, empty_stage3_table, empty_stage3_table, stage3_table_html5_002C0,
	stage3_table_html5_00300, empty_stage3_table, stage3_table_html5_00380, stage3_table_html5_003C0,
	stage3_table_html5_00400, stage3_table_html5_00440, empty_stage3_table, empty_stage3_table,
	empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table,
	empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table,
	empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table,
	empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table,
	empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table,
	empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table,
	empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table,
	empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table,
	empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table,
	empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table,
	empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table,
};

static const entity_stage2_row stage2_table_html5_02000[] = {
	stage3_table_html5_02000, stage3_table_html5_02040, stage3_table_html5_02080, stage3_table_html5_020C0,
	stage3_table_html5_02100, stage3_table_html5_02140, stage3_table_html5_02180, stage3_table_html5_021C0,
	stage3_table_html5_02200, stage3_table_html5_02240, stage3_table_html5_02280, stage3_table_html5_022C0,
	stage3_table_html5_02300, stage3_table_html5_02340, stage3_table_html5_02380, stage3_table_html5_023C0,
	stage3_table_html5_02400, empty_stage3_table, empty_stage3_table, stage3_table_html5_024C0,
	stage3_table_html5_02500, stage3_table_html5_02540, stage3_table_html5_02580, stage3_table_html5_025C0,
	stage3_table_html5_02600, stage3_table_html5_02640, empty_stage3_table, empty_stage3_table,
	stage3_table_html5_02700, stage3_table_html5_02740, empty_stage3_table, stage3_table_html5_027C0,
	empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table,
	stage3_table_html5_02900, stage3_table_html5_02940, stage3_table_html5_02980, stage3_table_html5_029C0,
	stage3_table_html5_02A00, stage3_table_html5_02A40, stage3_table_html5_02A80, stage3_table_html5_02AC0,
	empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table,
	empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table,
	empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table,
	empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table,
	empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table,
};

static const entity_stage2_row stage2_table_html5_0F000[] = {
	empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table,
	empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table,
	empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table,
	empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table,
	empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table,
	empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table,
	empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table,
	empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table,
	empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table,
	empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table,
	empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table,
	stage3_table_html5_0FB00, empty_stage3_table, empty_stage3_table, empty_stage3_table,
	empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table,
	empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table,
	empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table,
	empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table,
};

static const entity_stage2_row stage2_table_html5_1D000[] = {
	empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table,
	empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table,
	empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table,
	empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table,
	empty_stage3_table, empty_stage3_table, stage3_table_html5_1D480, stage3_table_html5_1D4C0,
	stage3_table_html5_1D500, stage3_table_html5_1D540, empty_stage3_table, empty_stage3_table,
	empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table,
	empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table,
	empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table,
	empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table,
	empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table,
	empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table,
	empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table,
	empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table,
	empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table,
	empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table,
};

/* end of stage 2 tables for HTML5 }}} */

static const entity_stage1_row entity_ms_table_html5[] = {
	stage2_table_html5_00000,
	empty_stage2_table,
	stage2_table_html5_02000,
	empty_stage2_table,
	empty_stage2_table,
	empty_stage2_table,
	empty_stage2_table,
	empty_stage2_table,
	empty_stage2_table,
	empty_stage2_table,
	empty_stage2_table,
	empty_stage2_table,
	empty_stage2_table,
	empty_stage2_table,
	empty_stage2_table,
	stage2_table_html5_0F000,
	empty_stage2_table,
	empty_stage2_table,
	empty_stage2_table,
	empty_stage2_table,
	empty_stage2_table,
	empty_stage2_table,
	empty_stage2_table,
	empty_stage2_table,
	empty_stage2_table,
	empty_stage2_table,
	empty_stage2_table,
	empty_stage2_table,
	empty_stage2_table,
	stage2_table_html5_1D000,
};

/* end of HTML5 multi-stage table for codepoint -> entity }}} */

/* {{{ HTML5 hash table for entity -> codepoint */

typedef struct {
	const char *entity;
	unsigned short entity_len;
	unsigned int codepoint1;
	unsigned int codepoint2;
} entity_cp_map;

typedef const entity_cp_map *entity_ht_bucket;

typedef struct {
	unsigned num_elems; /* power of 2 */
	const entity_ht_bucket *buckets; /* .num_elems elements */
} entity_ht;

static const entity_cp_map ht_bucket_empty[] = { {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_000[] = { {"realpart", 8, 0x0211C, 0}, {"varr", 4, 0x02195, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_001[] = { {"angrt", 5, 0x0221F, 0}, {"iogon", 5, 0x0012F, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_003[] = { {"lessdot", 7, 0x022D6, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_005[] = { {"simrarr", 7, 0x02972, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_007[] = { {"Zscr", 4, 0x1D4B5, 0}, {"midast", 6, 0x0002A, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_00D[] = { {"copf", 4, 0x1D554, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_00F[] = { {"female", 6, 0x02640, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_017[] = { {"NegativeThickSpace", 18, 0x0200B, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_020[] = { {"copy", 4, 0x000A9, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_022[] = { {"angst", 5, 0x000C5, 0}, {"searr", 5, 0x02198, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_024[] = { {"sqcups", 6, 0x02294, 0x0FE00}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_027[] = { {"Acirc", 5, 0x000C2, 0}, {"gtdot", 5, 0x022D7, 0}, {"varpi", 5, 0x003D6, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_028[] = { {"UpTee", 5, 0x022A5, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_029[] = { {"TildeTilde", 10, 0x02248, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_02A[] = { {"mfr", 3, 0x1D52A, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_02B[] = { {"RightVectorBar", 14, 0x02953, 0}, {"gesdot", 6, 0x02A80, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_02C[] = { {"Uarrocir", 8, 0x02949, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_02E[] = { {"RightTriangleBar", 16, 0x029D0, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_030[] = { {"Ocy", 3, 0x0041E, 0}, {"int", 3, 0x0222B, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_034[] = { {"preccurlyeq", 11, 0x0227C, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_038[] = { {"sccue", 5, 0x0227D, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_040[] = { {"DoubleContourIntegral", 21, 0x0222F, 0}, {"nexist", 6, 0x02204, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_047[] = { {"acirc", 5, 0x000E2, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_04C[] = { {"setmn", 5, 0x02216, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_04E[] = { {"Dopf", 4, 0x1D53B, 0}, {"LeftTee", 7, 0x022A3, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_051[] = { {"SquareSuperset", 14, 0x02290, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_059[] = { {"udhar", 5, 0x0296E, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_05D[] = { {"Equal", 5, 0x02A75, 0}, {"pscr", 4, 0x1D4C5, 0}, {"xvee", 4, 0x022C1, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_05F[] = { {"approx", 6, 0x02248, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_060[] = { {"HARDcy", 6, 0x0042A, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_061[] = { {"nGg", 3, 0x022D9, 0x00338}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_063[] = { {"yopf", 4, 0x1D56A, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_064[] = { {"prcue", 5, 0x0227C, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_065[] = { {"loarr", 5, 0x021FD, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_069[] = { {"mho", 3, 0x02127, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_06A[] = { {"otimesas", 8, 0x02A36, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_06D[] = { {"capcap", 6, 0x02A4B, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_06E[] = { {"eplus", 5, 0x02A71, 0}, {"nGt", 3, 0x0226B, 0x020D2}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_06F[] = { {"Bumpeq", 6, 0x0224E, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_071[] = { {"submult", 7, 0x02AC1, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_073[] = { {"subplus", 7, 0x02ABF, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_074[] = { {"auml", 4, 0x000E4, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_07A[] = { {"RightDoubleBracket", 18, 0x027E7, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_07B[] = { {"varkappa", 8, 0x003F0, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_07C[] = { {"plusdo", 6, 0x02214, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_07F[] = { {"mid", 3, 0x02223, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_082[] = { {"plusdu", 6, 0x02A25, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_084[] = { {"notniva", 7, 0x0220C, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_085[] = { {"notnivb", 7, 0x022FE, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_086[] = { {"notnivc", 7, 0x022FD, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_088[] = { {"varepsilon", 10, 0x003F5, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_089[] = { {"nspar", 5, 0x02226, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_08C[] = { {"Ofr", 3, 0x1D512, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_08E[] = { {"Omega", 5, 0x003A9, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_090[] = { {"equals", 6, 0x0003D, 0}, {"harrcir", 7, 0x02948, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_094[] = { {"Succeeds", 8, 0x0227B, 0}, {"cupdot", 6, 0x0228D, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_097[] = { {"lsqb", 4, 0x0005B, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_09E[] = { {"Qscr", 4, 0x1D4AC, 0}, {"urcorn", 6, 0x0231D, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_0A4[] = { {"Zopf", 4, 0x02124, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_0A6[] = { {"triangleleft", 12, 0x025C3, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_0AB[] = { {"supdsub", 7, 0x02AD8, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_0AC[] = { {"chcy", 4, 0x00447, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_0AD[] = { {"sqsupset", 8, 0x02290, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_0AE[] = { {"omega", 5, 0x003C9, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_0AF[] = { {"rthree", 6, 0x022CC, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_0B0[] = { {"THORN", 5, 0x000DE, 0}, {"clubsuit", 8, 0x02663, 0}, {"filig", 5, 0x0FB01, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_0B2[] = { {"ocir", 4, 0x0229A, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_0B8[] = { {"ShortDownArrow", 14, 0x02193, 0}, {"atilde", 6, 0x000E3, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_0B9[] = { {"DownLeftTeeVector", 17, 0x0295E, 0}, {"LeftTeeArrow", 12, 0x021A4, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_0BA[] = { {"GreaterFullEqual", 16, 0x02267, 0}, {"emsp", 4, 0x02003, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_0C0[] = { {"lozf", 4, 0x029EB, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_0C4[] = { {"ThinSpace", 9, 0x02009, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_0CE[] = { {"fnof", 4, 0x00192, 0}, {"multimap", 8, 0x022B8, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_0D1[] = { {"Zacute", 6, 0x00179, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_0D2[] = { {"mdash", 5, 0x02014, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_0D3[] = { {"minusb", 6, 0x0229F, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_0D5[] = { {"minusd", 6, 0x02238, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_0DF[] = { {"varsigma", 8, 0x003C2, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_0E5[] = { {"ntilde", 6, 0x000F1, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_0E6[] = { {"Lambda", 6, 0x0039B, 0}, {"integers", 8, 0x02124, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_0E8[] = { {"gesles", 6, 0x02A94, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_0EC[] = { {"NotSubset", 9, 0x02282, 0x020D2}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_0EF[] = { {"NotLeftTriangleEqual", 20, 0x022EC, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_0F3[] = { {"LessLess", 8, 0x02AA1, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_0F4[] = { {"gscr", 4, 0x0210A, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_0FA[] = { {"popf", 4, 0x1D561, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_0FB[] = { {"Agrave", 6, 0x000C0, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_0FD[] = { {"nvinfin", 7, 0x029DE, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_0FE[] = { {"gacute", 6, 0x001F5, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_100[] = { {"diam", 4, 0x022C4, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_101[] = { {"nesim", 5, 0x02242, 0x00338}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_103[] = { {"YIcy", 4, 0x00407, 0}, {"bcy", 3, 0x00431, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_105[] = { {"Exists", 6, 0x02203, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_106[] = { {"vert", 4, 0x0007C, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_109[] = { {"ropar", 5, 0x02986, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_10A[] = { {"topfork", 7, 0x02ADA, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_10B[] = { {"nLl", 3, 0x022D8, 0x00338}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_10D[] = { {"notin", 5, 0x02209, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_10E[] = { {"SucceedsSlantEqual", 18, 0x0227D, 0}, {"toea", 4, 0x02928, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_10F[] = { {"ImaginaryI", 10, 0x02148, 0}, {"srarr", 5, 0x02192, 0}, {"ulcorner", 8, 0x0231C, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_110[] = { {"LeftArrowBar", 12, 0x021E4, 0}, {"ldsh", 4, 0x021B2, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_111[] = { {"DownBreve", 9, 0x00311, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_113[] = { {"nLt", 3, 0x0226A, 0x020D2}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_116[] = { {"vltri", 5, 0x022B2, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_11B[] = { {"VDash", 5, 0x022AB, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_11C[] = { {"Dstrok", 6, 0x00110, 0}, {"Intersection", 12, 0x022C2, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_11E[] = { {"lrhar", 5, 0x021CB, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_121[] = { {"RightTee", 8, 0x022A2, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_124[] = { {"RightArrowLeftArrow", 19, 0x021C4, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_129[] = { {"Ccirc", 5, 0x00108, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_12A[] = { {"ntrianglelefteq", 15, 0x022EC, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_12C[] = { {"leftharpoonup", 13, 0x021BC, 0}, {"scap", 4, 0x02AB8, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_12E[] = { {"darr", 4, 0x02193, 0}, {"qfr", 3, 0x1D52E, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_12F[] = { {"cdot", 4, 0x0010B, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_130[] = { {"supseteqq", 9, 0x02AC6, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_134[] = { {"Scy", 3, 0x00421, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_135[] = { {"Hscr", 4, 0x0210B, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_137[] = { {"LowerRightArrow", 15, 0x02198, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_13A[] = { {"divide", 6, 0x000F7, 0}, {"tcedil", 6, 0x00163, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_13B[] = { {"LeftArrow", 9, 0x02190, 0}, {"Qopf", 4, 0x0211A, 0}, {"vDash", 5, 0x022A8, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_145[] = { {"dash", 4, 0x02010, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_147[] = { {"oror", 4, 0x02A56, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_149[] = { {"ccirc", 5, 0x00109, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_14B[] = { {"LongLeftArrow", 13, 0x027F5, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_14C[] = { {"straightphi", 11, 0x003D5, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_14E[] = { {"xlarr", 5, 0x027F5, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_14F[] = { {"DJcy", 4, 0x00402, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_158[] = { {"nbsp", 4, 0x000A0, 0}, {"succcurlyeq", 11, 0x0227D, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_159[] = { {"njcy", 4, 0x0045A, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_15B[] = { {"Leftarrow", 9, 0x021D0, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_15E[] = { {"dtrif", 5, 0x025BE, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_15F[] = { {"bfr", 3, 0x1D51F, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_161[] = { {"GreaterTilde", 12, 0x02273, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_164[] = { {"hamilt", 6, 0x0210B, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_165[] = { {"Dcy", 3, 0x00414, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_168[] = { {"LeftUpVector", 12, 0x021BF, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_16A[] = { {"bigoplus", 8, 0x02A01, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_170[] = { {"nwarhk", 6, 0x02923, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_173[] = { {"diams", 5, 0x02666, 0}, {"suphsol", 7, 0x027C9, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_17A[] = { {"boxminus", 8, 0x0229F, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_17B[] = { {"leftarrow", 9, 0x02190, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_17C[] = { {"andd", 4, 0x02A5C, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_17F[] = { {"NonBreakingSpace", 16, 0x000A0, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_181[] = { {"xutri", 5, 0x025B3, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_189[] = { {"Longleftrightarrow", 18, 0x027FA, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_18B[] = { {"Longleftarrow", 13, 0x027F8, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_18C[] = { {"gtrapprox", 9, 0x02A86, 0}, {"phmmat", 6, 0x02133, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_18E[] = { {"andv", 4, 0x02A5A, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_18F[] = { {"equiv", 5, 0x02261, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_190[] = { {"Sfr", 3, 0x1D516, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_191[] = { {"gopf", 4, 0x1D558, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_193[] = { {"sqsub", 5, 0x0228F, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_195[] = { {"approxeq", 8, 0x0224A, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_19A[] = { {"Del", 3, 0x02207, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_19C[] = { {"nrightarrow", 11, 0x0219B, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_19F[] = { {"SquareUnion", 11, 0x02294, 0}, {"strns", 5, 0x000AF, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_1A0[] = { {"Itilde", 6, 0x00128, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_1A1[] = { {"sqsup", 5, 0x02290, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_1A2[] = { {"Ouml", 4, 0x000D6, 0}, {"PrecedesTilde", 13, 0x0227E, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_1A3[] = { {"AMP", 3, 0x00026, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_1A4[] = { {"plusmn", 6, 0x000B1, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_1A5[] = { {"xcup", 4, 0x022C3, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_1A8[] = { {"radic", 5, 0x0221A, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_1AB[] = { {"longleftarrow", 13, 0x027F5, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_1AC[] = { {"lrcorner", 8, 0x0231F, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_1AD[] = { {"notni", 5, 0x0220C, 0}, {"updownarrow", 11, 0x02195, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_1AE[] = { {"szlig", 5, 0x000DF, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_1AF[] = { {"ugrave", 6, 0x000F9, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_1B0[] = { {"imof", 4, 0x022B7, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_1B2[] = { {"csub", 4, 0x02ACF, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_1B5[] = { {"gsim", 4, 0x02273, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_1B9[] = { {"leftleftarrows", 14, 0x021C7, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_1BD[] = { {"backcong", 8, 0x0224C, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_1BE[] = { {"clubs", 5, 0x02663, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_1C0[] = { {"csup", 4, 0x02AD0, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_1C1[] = { {"Dfr", 3, 0x1D507, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_1C4[] = { {"profline", 8, 0x02312, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_1C6[] = { {"Zdot", 4, 0x0017B, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_1C9[] = { {"ClockwiseContourIntegral", 24, 0x02232, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_1CA[] = { {"roplus", 6, 0x02A2E, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_1CD[] = { {"Rang", 4, 0x027EB, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_1CE[] = { {"bcong", 5, 0x0224C, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_1D0[] = { {"tshcy", 5, 0x0045B, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_1D1[] = { {"eDot", 4, 0x02251, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_1D2[] = { {"Hopf", 4, 0x0210D, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_1D4[] = { {"lpar", 4, 0x00028, 0}, {"odash", 5, 0x0229D, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_1D5[] = { {"capbrcup", 8, 0x02A49, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_1D6[] = { {"ucy", 3, 0x00443, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_1D8[] = { {"ofcir", 5, 0x029BF, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_1D9[] = { {"Breve", 5, 0x002D8, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_1DA[] = { {"barvee", 6, 0x022BD, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_1DF[] = { {"backsim", 7, 0x0223D, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_1E0[] = { {"ange", 4, 0x029A4, 0}, {"half", 4, 0x000BD, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_1E1[] = { {"tscr", 4, 0x1D4C9, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_1E5[] = { {"realine", 7, 0x0211B, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_1E6[] = { {"Oacute", 6, 0x000D3, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_1E7[] = { {"dfisht", 6, 0x0297F, 0}, {"swnwar", 6, 0x0292A, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_1E8[] = { {"tscy", 4, 0x00446, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_1EB[] = { {"lsquor", 6, 0x0201A, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_1EF[] = { {"naturals", 8, 0x02115, 0}, {"utrif", 5, 0x025B4, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_1F0[] = { {"DiacriticalTilde", 16, 0x002DC, 0}, {"RightUpVectorBar", 16, 0x02954, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_1F2[] = { {"rHar", 4, 0x02964, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_1F4[] = { {"curlyeqprec", 11, 0x022DE, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_1F8[] = { {"dtri", 4, 0x025BF, 0}, {"euml", 4, 0x000EB, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_1F9[] = { {"breve", 5, 0x002D8, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_1FA[] = { {"Barwed", 6, 0x02306, 0}, {"nvlArr", 6, 0x02902, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_1FC[] = { {"dcaron", 6, 0x0010F, 0}, {"natural", 7, 0x0266E, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_1FE[] = { {"nsupseteqq", 10, 0x02AC6, 0x00338}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_1FF[] = { {"nedot", 5, 0x02250, 0x00338}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_205[] = { {"bigtriangledown", 15, 0x025BD, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_207[] = { {"fcy", 3, 0x00444, 0}, {"marker", 6, 0x025AE, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_20E[] = { {"Union", 5, 0x022C3, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_212[] = { {"varpropto", 9, 0x0221D, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_213[] = { {"CloseCurlyDoubleQuote", 21, 0x0201D, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_219[] = { {"DoubleLongRightArrow", 20, 0x027F9, 0}, {"GreaterGreater", 14, 0x02AA2, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_21D[] = { {"Umacr", 5, 0x0016A, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_220[] = { {"Colon", 5, 0x02237, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_222[] = { {"Hat", 3, 0x0005E, 0}, {"Uscr", 4, 0x1D4B0, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_227[] = { {"SHCHcy", 6, 0x00429, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_229[] = { {"nLeftarrow", 10, 0x021CD, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_22B[] = { {"Ecirc", 5, 0x000CA, 0}, {"Jukcy", 5, 0x00404, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_22C[] = { {"nbumpe", 6, 0x0224F, 0x00338}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_22D[] = { {"NotLess", 7, 0x0226E, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_22F[] = { {"gtlPar", 6, 0x02995, 0}, {"suphsub", 7, 0x02AD7, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_230[] = { {"gtreqqless", 10, 0x02A8C, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_232[] = { {"ufr", 3, 0x1D532, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_234[] = { {"cirscir", 7, 0x029C2, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_239[] = { {"LeftDownTeeVector", 17, 0x02961, 0}, {"duhar", 5, 0x0296F, 0}, {"nrtrie", 6, 0x022ED, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_23C[] = { {"llhard", 6, 0x0296B, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_23D[] = { {"umacr", 5, 0x0016B, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_23E[] = { {"lates", 5, 0x02AAD, 0x0FE00}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_240[] = { {"colon", 5, 0x0003A, 0}, {"iacute", 6, 0x000ED, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_241[] = { {"NotPrecedes", 11, 0x02280, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_242[] = { {"cirfnint", 8, 0x02A10, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_246[] = { {"barwedge", 8, 0x02305, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_249[] = { {"nleftarrow", 10, 0x0219A, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_24A[] = { {"Ubrcy", 5, 0x0040E, 0}, {"leftthreetimes", 14, 0x022CB, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_24B[] = { {"andand", 6, 0x02A55, 0}, {"ecirc", 5, 0x000EA, 0}, {"jukcy", 5, 0x00454, 0}, {"quatint", 7, 0x02A16, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_24D[] = { {"lharul", 6, 0x0296A, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_251[] = { {"smtes", 5, 0x02AAC, 0x0FE00}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_252[] = { {"UnionPlus", 9, 0x0228E, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_257[] = { {"NotLeftTriangle", 15, 0x022EA, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_25A[] = { {"bne", 3, 0x0003D, 0x020E5}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_25B[] = { {"gtrsim", 6, 0x02273, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_25C[] = { {"Rarr", 4, 0x021A0, 0}, {"ldquor", 6, 0x0201E, 0}, {"phiv", 4, 0x003D5, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_25D[] = { {"because", 7, 0x02235, 0}, {"gEl", 3, 0x02A8C, 0}, {"setminus", 8, 0x02216, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_263[] = { {"ffr", 3, 0x1D523, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_26A[] = { {"ubrcy", 5, 0x0045E, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_26B[] = { {"elinters", 8, 0x023E7, 0}, {"plusb", 5, 0x0229E, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_26E[] = { {"pluse", 5, 0x02A72, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_274[] = { {"CapitalDifferentialD", 20, 0x02145, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_277[] = { {"daleth", 6, 0x02138, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_278[] = { {"kscr", 4, 0x1D4C0, 0}, {"ogon", 4, 0x002DB, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_27C[] = { {"SHcy", 4, 0x00428, 0}, {"equest", 6, 0x0225F, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_27E[] = { {"rbarr", 5, 0x0290D, 0}, {"topf", 4, 0x1D565, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_283[] = { {"tritime", 7, 0x02A3B, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_28A[] = { {"bot", 3, 0x022A5, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_294[] = { {"Wfr", 3, 0x1D51A, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_297[] = { {"HumpEqual", 9, 0x0224F, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_298[] = { {"rightleftharpoons", 17, 0x021CC, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_29D[] = { {"frasl", 5, 0x02044, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_29F[] = { {"UnderBracket", 12, 0x023B5, 0}, {"ovbar", 5, 0x0233D, 0}, {"upharpoonright", 14, 0x021BE, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_2A0[] = { {"euro", 4, 0x020AC, 0}, {"nhArr", 5, 0x021CE, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_2A9[] = { {"NotSupersetEqual", 16, 0x02289, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_2AE[] = { {"cularr", 6, 0x021B6, 0}, {"scnE", 4, 0x02AB6, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_2B1[] = { {"napid", 5, 0x0224B, 0x00338}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_2B2[] = { {"harr", 4, 0x02194, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_2B3[] = { {"gdot", 4, 0x00121, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_2B9[] = { {"Lscr", 4, 0x02112, 0}, {"zeta", 4, 0x003B6, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_2BF[] = { {"ENG", 3, 0x0014A, 0}, {"Uopf", 4, 0x1D54C, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_2C4[] = { {"esdot", 5, 0x02250, 0}, {"scsim", 5, 0x0227F, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_2C5[] = { {"Hfr", 3, 0x0210C, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_2CE[] = { {"RightArrow", 10, 0x02192, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_2CF[] = { {"Sqrt", 4, 0x0221A, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_2D3[] = { {"xodot", 5, 0x02A00, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_2DA[] = { {"ycy", 3, 0x0044B, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_2DB[] = { {"hkswarow", 8, 0x02926, 0}, {"urtri", 5, 0x025F9, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_2DC[] = { {"roang", 5, 0x027ED, 0}, {"tosa", 4, 0x02929, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_2E3[] = { {"CircleMinus", 11, 0x02296, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_2E4[] = { {"Lcaron", 6, 0x0013D, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_2EB[] = { {"ShortLeftArrow", 14, 0x02190, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_2EC[] = { {"Dot", 3, 0x000A8, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_2EE[] = { {"Rightarrow", 10, 0x021D2, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_2F0[] = { {"prsim", 5, 0x0227E, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_2F2[] = { {"notinE", 6, 0x022F9, 0x00338}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_2F8[] = { {"becaus", 6, 0x02235, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_300[] = { {"NotEqualTilde", 13, 0x02242, 0x00338}, {"nparallel", 9, 0x02226, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_301[] = { {"capcup", 6, 0x02A47, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_304[] = { {"simeq", 5, 0x02243, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_305[] = { {"forall", 6, 0x02200, 0}, {"straightepsilon", 15, 0x003F5, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_308[] = { {"ruluhar", 7, 0x02968, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_30B[] = { {"jcy", 3, 0x00439, 0}, {"ltcc", 4, 0x02AA6, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_30F[] = { {"bscr", 4, 0x1D4B7, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_311[] = { {"ExponentialE", 12, 0x02147, 0}, {"weierp", 6, 0x02118, 0}, {"yen", 3, 0x000A5, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_313[] = { {"blacksquare", 11, 0x025AA, 0}, {"uml", 3, 0x000A8, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_315[] = { {"backsimeq", 9, 0x022CD, 0}, {"kopf", 4, 0x1D55C, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_319[] = { {"NotPrecedesEqual", 16, 0x02AAF, 0x00338}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_31A[] = { {"simgE", 5, 0x02AA0, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_31B[] = { {"tridot", 6, 0x025EC, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_326[] = { {"DoubleLongLeftArrow", 19, 0x027F8, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_329[] = { {"models", 6, 0x022A7, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_32A[] = { {"emptyv", 6, 0x02205, 0}, {"eqslantgtr", 10, 0x02A96, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_32D[] = { {"Gcirc", 5, 0x0011C, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_330[] = { {"bernou", 6, 0x0212C, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_331[] = { {"HumpDownHump", 12, 0x0224E, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_336[] = { {"yfr", 3, 0x1D536, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_338[] = { {"blacktriangle", 13, 0x025B4, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_33B[] = { {"yacy", 4, 0x0044F, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_33F[] = { {"lsime", 5, 0x02A8D, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_340[] = { {"NotTildeEqual", 13, 0x02244, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_341[] = { {"lsimg", 5, 0x02A8F, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_347[] = { {"ncap", 4, 0x02A43, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_34D[] = { {"DD", 2, 0x02145, 0}, {"gcirc", 5, 0x0011D, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_350[] = { {"Cscr", 4, 0x1D49E, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_356[] = { {"Lopf", 4, 0x1D543, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_358[] = { {"lBarr", 5, 0x0290E, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_359[] = { {"Leftrightarrow", 14, 0x021D4, 0}, {"gtrdot", 6, 0x022D7, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_35D[] = { {"NotSquareSubset", 15, 0x0228F, 0x00338}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_35F[] = { {"sqsubset", 8, 0x0228F, 0}, {"subsetneq", 9, 0x0228A, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_361[] = { {"doublebarwedge", 14, 0x02306, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_363[] = { {"blacktriangleleft", 17, 0x025C2, 0}, {"hellip", 6, 0x02026, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_365[] = { {"xscr", 4, 0x1D4CD, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_367[] = { {"LessFullEqual", 13, 0x02266, 0}, {"jfr", 3, 0x1D527, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_369[] = { {"GreaterSlantEqual", 17, 0x02A7E, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_36A[] = { {"Uring", 5, 0x0016E, 0}, {"VeryThinSpace", 13, 0x0200A, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_36B[] = { {"roarr", 5, 0x021FE, 0}, {"scaron", 6, 0x00161, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_36D[] = { {"Lcy", 3, 0x0041B, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_36E[] = { {"RightDownVector", 15, 0x021C2, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_36F[] = { {"Sub", 3, 0x022D0, 0}, {"pitchfork", 9, 0x022D4, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_372[] = { {"nvsim", 5, 0x0223C, 0x020D2}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_374[] = { {"xrArr", 5, 0x027F9, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_378[] = { {"CloseCurlyQuote", 15, 0x02019, 0}, {"uwangle", 7, 0x029A7, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_37A[] = { {"Sum", 3, 0x02211, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_37C[] = { {"iuml", 4, 0x000EF, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_37D[] = { {"Sup", 3, 0x022D1, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_37E[] = { {"planck", 6, 0x0210F, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_37F[] = { {"Egrave", 6, 0x000C8, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_380[] = { {"curlywedge", 10, 0x022CF, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_382[] = { {"TildeFullEqual", 14, 0x02245, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_383[] = { {"searhk", 6, 0x02925, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_386[] = { {"ETH", 3, 0x000D0, 0}, {"napos", 5, 0x00149, 0}, {"upsi", 4, 0x003C5, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_387[] = { {"twoheadleftarrow", 16, 0x0219E, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_38A[] = { {"Assign", 6, 0x02254, 0}, {"uring", 5, 0x0016F, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_38D[] = { {"SquareIntersection", 18, 0x02293, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_38E[] = { {"lmidot", 6, 0x00140, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_391[] = { {"kcedil", 6, 0x00137, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_394[] = { {"curren", 6, 0x000A4, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_397[] = { {"acute", 5, 0x000B4, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_398[] = { {"curlyeqsucc", 11, 0x022DF, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_39C[] = { {"Omicron", 7, 0x0039F, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_39F[] = { {"uarr", 4, 0x02191, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_3A0[] = { {"Hstrok", 6, 0x00126, 0}, {"UnderBrace", 10, 0x023DF, 0}, {"tdot", 4, 0x020DB, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_3A1[] = { {"qint", 4, 0x02A0C, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_3A4[] = { {"sfrown", 6, 0x02322, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_3A5[] = { {"trpezium", 8, 0x023E2, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_3A6[] = { {"Yscr", 4, 0x1D4B4, 0}, {"cedil", 5, 0x000B8, 0}, {"planckh", 7, 0x0210E, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_3A7[] = { {"lang", 4, 0x027E8, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_3AC[] = { {"bopf", 4, 0x1D553, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_3B2[] = { {"lbbrk", 5, 0x02772, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_3B4[] = { {"khcy", 4, 0x00445, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_3BF[] = { {"Epsilon", 7, 0x00395, 0}, {"simlE", 5, 0x02A9F, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_3C0[] = { {"GT", 2, 0x0003E, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_3C4[] = { {"nap", 3, 0x02249, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_3C9[] = { {"Lfr", 3, 0x1D50F, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_3CD[] = { {"succapprox", 10, 0x02AB8, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_3D0[] = { {"bsim", 4, 0x0223D, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_3D3[] = { {"Gg", 2, 0x022D9, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_3D9[] = { {"angrtvb", 7, 0x022BE, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_3DE[] = { {"xcirc", 5, 0x025EF, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_3E0[] = { {"Gt", 2, 0x0226B, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_3E1[] = { {"LeftRightVector", 15, 0x0294E, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_3E3[] = { {"circledast", 10, 0x0229B, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_3E4[] = { {"telrec", 6, 0x02315, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_3E6[] = { {"SucceedsTilde", 13, 0x0227F, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_3E9[] = { {"nLtv", 4, 0x0226A, 0x00338}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_3ED[] = { {"Copf", 4, 0x02102, 0}, {"napprox", 7, 0x02249, 0}, {"nsupseteq", 9, 0x02289, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_3F1[] = { {"VerticalTilde", 13, 0x02240, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_3F2[] = { {"parallel", 8, 0x02225, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_3F7[] = { {"precnapprox", 11, 0x02AB9, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_3FC[] = { {"oscr", 4, 0x02134, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_3FE[] = { {"supsetneqq", 10, 0x02ACC, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_402[] = { {"xopf", 4, 0x1D569, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_405[] = { {"mumap", 5, 0x022B8, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_407[] = { {"varsupsetneqq", 13, 0x02ACC, 0x0FE00}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_409[] = { {"ReverseEquilibrium", 18, 0x021CB, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_40E[] = { {"Ubreve", 6, 0x0016C, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_40F[] = { {"YUcy", 4, 0x0042E, 0}, {"ncy", 3, 0x0043D, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_413[] = { {"ltimes", 6, 0x022C9, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_41A[] = { {"UpperRightArrow", 15, 0x02197, 0}, {"nvap", 4, 0x0224D, 0x020D2}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_41B[] = { {"Im", 2, 0x02111, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_421[] = { {"simne", 5, 0x02246, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_423[] = { {"ccups", 5, 0x02A4C, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_424[] = { {"nlArr", 5, 0x021CD, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_425[] = { {"rarrsim", 7, 0x02974, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_426[] = { {"Ncaron", 6, 0x00147, 0}, {"vsupnE", 6, 0x02ACC, 0x0FE00}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_429[] = { {"succeq", 6, 0x02AB0, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_42C[] = { {"Gammad", 6, 0x003DC, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_42F[] = { {"Icirc", 5, 0x000CE, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_430[] = { {"backepsilon", 11, 0x003F6, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_432[] = { {"ddarr", 5, 0x021CA, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_436[] = { {"larr", 4, 0x02190, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_439[] = { {"divideontimes", 13, 0x022C7, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_43C[] = { {"succsim", 7, 0x0227F, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_43D[] = { {"Pscr", 4, 0x1D4AB, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_43E[] = { {"puncsp", 6, 0x02008, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_43F[] = { {"gtreqless", 9, 0x022DB, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_440[] = { {"intcal", 6, 0x022BA, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_441[] = { {"nsime", 5, 0x02244, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_443[] = { {"Yopf", 4, 0x1D550, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_446[] = { {"angsph", 6, 0x02222, 0}, {"vsupne", 6, 0x0228B, 0x0FE00}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_447[] = { {"NotNestedLessLess", 17, 0x02AA1, 0x00338}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_44A[] = { {"PrecedesSlantEqual", 18, 0x0227C, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_44F[] = { {"icirc", 5, 0x000EE, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_450[] = { {"DownLeftVectorBar", 17, 0x02956, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_454[] = { {"Auml", 4, 0x000C4, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_457[] = { {"LJcy", 4, 0x00409, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_458[] = { {"sqsube", 6, 0x02291, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_45D[] = { {"nprec", 5, 0x02280, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_45F[] = { {"ngE", 3, 0x02267, 0x00338}, {"smile", 5, 0x02323, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_465[] = { {"LT", 2, 0x0003C, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_466[] = { {"ldrdhar", 7, 0x02967, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_469[] = { {"utri", 4, 0x025B5, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_46A[] = { {"Sacute", 6, 0x0015A, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_46B[] = { {"late", 4, 0x02AAD, 0}, {"nfr", 3, 0x1D52B, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_46D[] = { {"NotNestedGreaterGreater", 23, 0x02AA2, 0x00338}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_46F[] = { {"nwarr", 5, 0x02196, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_470[] = { {"biguplus", 8, 0x02A04, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_471[] = { {"Pcy", 3, 0x0041F, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_472[] = { {"bigtriangleup", 13, 0x025B3, 0}, {"rationals", 9, 0x0211A, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_473[] = { {"congdot", 7, 0x02A6D, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_475[] = { {"PlusMinus", 9, 0x000B1, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_479[] = { {"IOcy", 4, 0x00401, 0}, {"Scedil", 6, 0x0015E, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_47C[] = { {"eqcirc", 6, 0x02256, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_47D[] = { {"Ll", 2, 0x022D8, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_47F[] = { {"Cayleys", 7, 0x0212D, 0}, {"nge", 3, 0x02271, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_480[] = { {"NotGreater", 10, 0x0226F, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_485[] = { {"Lt", 2, 0x0226A, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_488[] = { {"rotimes", 7, 0x02A35, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_48C[] = { {"caps", 4, 0x02229, 0x0FE00}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_48E[] = { {"ngt", 3, 0x0226F, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_48F[] = { {"Cross", 5, 0x02A2F, 0}, {"bumpeq", 6, 0x0224F, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_490[] = { {"VerticalSeparator", 17, 0x02758, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_491[] = { {"plankv", 6, 0x0210F, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_493[] = { {"fscr", 4, 0x1D4BB, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_495[] = { {"bsol", 4, 0x0005C, 0}, {"sqsubseteq", 10, 0x02291, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_496[] = { {"boxH", 4, 0x02550, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_498[] = { {"rightarrowtail", 14, 0x021A3, 0}, {"ufisht", 6, 0x0297E, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_499[] = { {"oopf", 4, 0x1D560, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_49F[] = { {"lobrk", 5, 0x027E6, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_4A2[] = { {"Acy", 3, 0x00410, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_4A4[] = { {"NotSubsetEqual", 14, 0x02288, 0}, {"boxV", 4, 0x02551, 0}, {"dHar", 4, 0x02965, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_4A6[] = { {"precnsim", 8, 0x022E8, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_4A7[] = { {"Mu", 2, 0x0039C, 0}, {"aelig", 5, 0x000E6, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_4AA[] = { {"gescc", 5, 0x02AA9, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_4AB[] = { {"origof", 6, 0x022B6, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_4AE[] = { {"upsih", 5, 0x003D2, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_4AF[] = { {"cross", 5, 0x02717, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_4B2[] = { {"LeftFloor", 9, 0x0230A, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_4B6[] = { {"boxh", 4, 0x02500, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_4B8[] = { {"NotGreaterEqual", 15, 0x02271, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_4BC[] = { {"profalar", 8, 0x0232E, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_4C0[] = { {"nsmid", 5, 0x02224, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_4C2[] = { {"hbar", 4, 0x0210F, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_4C3[] = { {"udarr", 5, 0x021C5, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_4C4[] = { {"boxv", 4, 0x02502, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_4C5[] = { {"olarr", 5, 0x021BA, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_4C8[] = { {"Nu", 2, 0x0039D, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_4CB[] = { {"NotCongruent", 12, 0x02262, 0}, {"bkarow", 6, 0x0290D, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_4CD[] = { {"Pfr", 3, 0x1D513, 0}, {"forkv", 5, 0x02AD9, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_4CF[] = { {"nis", 3, 0x022FC, 0}, {"trianglerighteq", 15, 0x022B5, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_4D0[] = { {"ngeq", 4, 0x02271, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_4D2[] = { {"cudarrl", 7, 0x02938, 0}, {"nges", 4, 0x02A7E, 0x00338}, {"niv", 3, 0x0220B, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_4D3[] = { {"SubsetEqual", 11, 0x02286, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_4D4[] = { {"Gscr", 4, 0x1D4A2, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_4D5[] = { {"complexes", 9, 0x02102, 0}, {"eDDot", 5, 0x02A77, 0}, {"nvge", 4, 0x02265, 0x020D2}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_4D8[] = { {"cudarrr", 7, 0x02935, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_4DA[] = { {"Popf", 4, 0x02119, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_4DE[] = { {"LongRightArrow", 14, 0x027F6, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_4DF[] = { {"supseteq", 8, 0x02287, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_4E3[] = { {"dollar", 6, 0x00024, 0}, {"gnsim", 5, 0x022E7, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_4E4[] = { {"nvgt", 4, 0x0003E, 0x020D2}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_4E6[] = { {"Or", 2, 0x02A54, 0}, {"Vert", 4, 0x02016, 0}, {"lneqq", 5, 0x02268, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_4E7[] = { {"nLeftrightarrow", 15, 0x021CE, 0}, {"nbump", 5, 0x0224E, 0x00338}, {"ntriangleright", 14, 0x022EB, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_4E8[] = { {"ecir", 4, 0x02256, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_4E9[] = { {"npolint", 7, 0x02A14, 0}, {"plus", 4, 0x0002B, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_4ED[] = { {"centerdot", 9, 0x000B7, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_4F1[] = { {"zacute", 6, 0x0017A, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_4F7[] = { {"odiv", 4, 0x02A38, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_4F9[] = { {"cap", 3, 0x02229, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_4FB[] = { {"ensp", 4, 0x02002, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_4FE[] = { {"Afr", 3, 0x1D504, 0}, {"Pi", 2, 0x003A0, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_500[] = { {"iquest", 6, 0x000BF, 0}, {"ltri", 4, 0x025C3, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_504[] = { {"nlE", 3, 0x02266, 0x00338}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_506[] = { {"Phi", 3, 0x003A6, 0}, {"lambda", 6, 0x003BB, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_507[] = { {"Pr", 2, 0x02ABB, 0}, {"Vdashl", 6, 0x02AE6, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_509[] = { {"SuchThat", 8, 0x0220B, 0}, {"Supset", 6, 0x022D1, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_50E[] = { {"Darr", 4, 0x021A1, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_50F[] = { {"Cdot", 4, 0x0010A, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_513[] = { {"rcy", 3, 0x00440, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_516[] = { {"orderof", 7, 0x02134, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_518[] = { {"leqq", 4, 0x02266, 0}, {"precsim", 7, 0x0227E, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_519[] = { {"RightTriangle", 13, 0x022B3, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_51B[] = { {"agrave", 6, 0x000E0, 0}, {"succnapprox", 11, 0x02ABA, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_51C[] = { {"Tab", 3, 0x00009, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_524[] = { {"nle", 3, 0x02270, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_525[] = { {"spades", 6, 0x02660, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_526[] = { {"gtcc", 4, 0x02AA7, 0}, {"llcorner", 8, 0x0231E, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_52F[] = { {"Oslash", 6, 0x000D8, 0}, {"Tau", 3, 0x003A4, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_530[] = { {"fopf", 4, 0x1D557, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_532[] = { {"Mellintrf", 9, 0x02133, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_533[] = { {"nlt", 3, 0x0226E, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_534[] = { {"lparlt", 6, 0x02993, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_53B[] = { {"Ccaron", 6, 0x0010C, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_53C[] = { {"Re", 2, 0x0211C, 0}, {"dstrok", 6, 0x00111, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_53F[] = { {"leftharpoondown", 15, 0x021BD, 0}, {"ssetmn", 6, 0x02216, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_542[] = { {"lrhard", 6, 0x0296D, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_543[] = { {"reg", 3, 0x000AE, 0}, {"sharp", 5, 0x0266F, 0}, {"yicy", 4, 0x00457, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_545[] = { {"ShortUpArrow", 12, 0x02191, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_548[] = { {"plusacir", 8, 0x02A23, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_54F[] = { {"cent", 4, 0x000A2, 0}, {"natur", 5, 0x0266E, 0}, {"varphi", 6, 0x003D5, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_550[] = { {"lesg", 4, 0x022DA, 0x0FE00}, {"supnE", 5, 0x02ACC, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_551[] = { {"ohbar", 5, 0x029B5, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_557[] = { {"NotLessGreater", 14, 0x02278, 0}, {"nleqslant", 9, 0x02A7D, 0x00338}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_55B[] = { {"Sc", 2, 0x02ABC, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_55D[] = { {"NotSucceedsEqual", 16, 0x02AB0, 0x00338}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_55F[] = { {"DZcy", 4, 0x0040F, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_564[] = { {"vartheta", 8, 0x003D1, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_565[] = { {"ltrie", 5, 0x022B4, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_566[] = { {"Otilde", 6, 0x000D5, 0}, {"ltrif", 5, 0x025C2, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_56C[] = { {"Lsh", 3, 0x021B0, 0}, {"hookleftarrow", 13, 0x021A9, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_56F[] = { {"rfr", 3, 0x1D52F, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_570[] = { {"supne", 5, 0x0228B, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_571[] = { {"Gopf", 4, 0x1D53E, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_572[] = { {"UpEquilibrium", 13, 0x0296E, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_575[] = { {"Tcy", 3, 0x00422, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_576[] = { {"ffilig", 6, 0x0FB03, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_577[] = { {"fork", 4, 0x022D4, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_578[] = { {"oplus", 5, 0x02295, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_57A[] = { {"nvle", 4, 0x02264, 0x020D2}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_57B[] = { {"HilbertSpace", 12, 0x0210B, 0}, {"subedot", 7, 0x02AC3, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_57C[] = { {"TripleDot", 9, 0x020DB, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_580[] = { {"sscr", 4, 0x1D4C8, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_582[] = { {"osol", 4, 0x02298, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_583[] = { {"plustwo", 7, 0x02A27, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_586[] = { {"LessGreater", 11, 0x02276, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_588[] = { {"lrarr", 5, 0x021C6, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_589[] = { {"nvlt", 4, 0x0003C, 0x020D2}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_58D[] = { {"questeq", 7, 0x0225F, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_58E[] = { {"LessTilde", 9, 0x02272, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_58F[] = { {"djcy", 4, 0x00452, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_590[] = { {"xoplus", 6, 0x02A01, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_595[] = { {"primes", 6, 0x02119, 0}, {"solb", 4, 0x029C4, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_596[] = { {"not", 3, 0x000AC, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_59A[] = { {"angzarr", 7, 0x0237C, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_59D[] = { {"nearr", 5, 0x02197, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_59F[] = { {"lowast", 6, 0x02217, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_5A0[] = { {"cfr", 3, 0x1D520, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_5A3[] = { {"ltcir", 5, 0x02A79, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_5A6[] = { {"Ecy", 3, 0x0042D, 0}, {"gesdotol", 8, 0x02A84, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_5A9[] = { {"longleftrightarrow", 18, 0x027F7, 0}, {"para", 4, 0x000B6, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_5AC[] = { {"Uacute", 6, 0x000DA, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_5AD[] = { {"blank", 5, 0x02423, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_5AE[] = { {"rho", 3, 0x003C1, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_5B0[] = { {"dharl", 5, 0x021C3, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_5B1[] = { {"rsquor", 6, 0x02019, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_5B5[] = { {"NotSquareSubsetEqual", 20, 0x022E2, 0}, {"npr", 3, 0x02280, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_5B6[] = { {"dharr", 5, 0x021C2, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_5B7[] = { {"NewLine", 7, 0x0000A, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_5BB[] = { {"odot", 4, 0x02299, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_5BC[] = { {"part", 4, 0x02202, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_5BD[] = { {"cuvee", 5, 0x022CE, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_5BF[] = { {"lesdoto", 7, 0x02A81, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_5C0[] = { {"itilde", 6, 0x00129, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_5C1[] = { {"Tscr", 4, 0x1D4AF, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_5C2[] = { {"nsubE", 5, 0x02AC5, 0x00338}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_5C4[] = { {"ratio", 5, 0x02236, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_5D0[] = { {"Conint", 6, 0x0222F, 0}, {"LeftDownVectorBar", 17, 0x02959, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_5D1[] = { {"Tfr", 3, 0x1D517, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_5D3[] = { {"fllig", 5, 0x0FB02, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_5D5[] = { {"thksim", 6, 0x0223C, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_5D8[] = { {"Euml", 4, 0x000CB, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_5D9[] = { {"chi", 3, 0x003C7, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_5DB[] = { {"ncup", 4, 0x02A42, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_5DD[] = { {"SOFTcy", 6, 0x0042C, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_5DF[] = { {"bnequiv", 7, 0x02261, 0x020E5}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_5E2[] = { {"nsube", 5, 0x02288, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_5E4[] = { {"mapstoleft", 10, 0x021A4, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_5E7[] = { {"NotLessSlantEqual", 17, 0x02A7D, 0x00338}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_5EA[] = { {"ldrushar", 8, 0x0294B, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_5ED[] = { {"Equilibrium", 11, 0x021CC, 0}, {"Uogon", 5, 0x00172, 0}, {"supsetneq", 9, 0x0228B, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_5F0[] = { {"Vbar", 4, 0x02AEB, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_5F3[] = { {"vnsub", 5, 0x02282, 0x020D2}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_5F6[] = { {"Square", 6, 0x025A1, 0}, {"lessapprox", 10, 0x02A85, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_5F8[] = { {"And", 3, 0x02A53, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_5FA[] = { {"gesdoto", 7, 0x02A82, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_5FD[] = { {"gap", 3, 0x02A86, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_601[] = { {"nsucc", 5, 0x02281, 0}, {"thicksim", 8, 0x0223C, 0}, {"vnsup", 5, 0x02283, 0x020D2}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_602[] = { {"Efr", 3, 0x1D508, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_603[] = { {"Igrave", 6, 0x000CC, 0}, {"cir", 3, 0x025CB, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_606[] = { {"Xi", 2, 0x0039E, 0}, {"oacute", 6, 0x000F3, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_609[] = { {"nsc", 3, 0x02281, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_60D[] = { {"uogon", 5, 0x00173, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_613[] = { {"rharul", 6, 0x0296C, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_615[] = { {"RuleDelayed", 11, 0x029F4, 0}, {"apacir", 6, 0x02A6F, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_617[] = { {"jscr", 4, 0x1D4BF, 0}, {"vcy", 3, 0x00432, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_61A[] = { {"barwed", 6, 0x02305, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_61D[] = { {"sopf", 4, 0x1D564, 0}, {"thkap", 5, 0x02248, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_61F[] = { {"lesseqgtr", 9, 0x022DA, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_622[] = { {"rdquor", 6, 0x0201D, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_624[] = { {"Lstrok", 6, 0x00141, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_626[] = { {"Product", 7, 0x0220F, 0}, {"sqsupe", 6, 0x02292, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_628[] = { {"awconint", 8, 0x02233, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_62C[] = { {"hearts", 6, 0x02665, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_630[] = { {"rlm", 3, 0x0200F, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_632[] = { {"comma", 5, 0x0002C, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_636[] = { {"PartialD", 8, 0x02202, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_63A[] = { {"wedbar", 6, 0x02A5F, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_63C[] = { {"oline", 5, 0x0203E, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_63D[] = { {"OverBracket", 11, 0x023B4, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_63E[] = { {"RBarr", 5, 0x02910, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_641[] = { {"uharl", 5, 0x021BF, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_642[] = { {"leftrightsquigarrow", 19, 0x021AD, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_645[] = { {"RightFloor", 10, 0x0230B, 0}, {"intprod", 7, 0x02A3C, 0}, {"vee", 3, 0x02228, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_646[] = { {"zigrarr", 7, 0x021DD, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_647[] = { {"uharr", 5, 0x021BE, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_648[] = { {"gcy", 3, 0x00433, 0}, {"varsubsetneq", 12, 0x0228A, 0x0FE00}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_649[] = { {"leqslant", 8, 0x02A7D, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_64A[] = { {"Odblac", 6, 0x00150, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_651[] = { {"minus", 5, 0x02212, 0}, {"scpolint", 8, 0x02A13, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_652[] = { {"lrtri", 5, 0x022BF, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_653[] = { {"DiacriticalGrave", 16, 0x00060, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_655[] = { {"num", 3, 0x00023, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_657[] = { {"quest", 5, 0x0003F, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_658[] = { {"Kscr", 4, 0x1D4A6, 0}, {"UnderBar", 8, 0x0005F, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_659[] = { {"lsquo", 5, 0x02018, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_65C[] = { {"rArr", 4, 0x021D2, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_65E[] = { {"Topf", 4, 0x1D54B, 0}, {"heartsuit", 9, 0x02665, 0}, {"rBarr", 5, 0x0290F, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_660[] = { {"emptyset", 8, 0x02205, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_669[] = { {"UnderParenthesis", 16, 0x023DD, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_670[] = { {"dotplus", 7, 0x02214, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_671[] = { {"Psi", 3, 0x003A8, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_672[] = { {"GJcy", 4, 0x00403, 0}, {"exist", 5, 0x02203, 0}, {"simplus", 7, 0x02A24, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_673[] = { {"vfr", 3, 0x1D533, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_676[] = { {"tprime", 6, 0x02034, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_678[] = { {"leftrightharpoons", 17, 0x021CB, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_679[] = { {"rbrksld", 7, 0x0298E, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_67D[] = { {"Ecaron", 6, 0x0011A, 0}, {"gel", 3, 0x022DB, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_680[] = { {"capdot", 6, 0x02A40, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_682[] = { {"geq", 3, 0x02265, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_684[] = { {"LowerLeftArrow", 14, 0x02199, 0}, {"ges", 3, 0x02A7E, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_685[] = { {"Colone", 6, 0x02A74, 0}, {"NotLessEqual", 12, 0x02270, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_68A[] = { {"nrarr", 5, 0x0219B, 0}, {"rbrkslu", 7, 0x02990, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_68C[] = { {"flat", 4, 0x0266D, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_691[] = { {"there4", 6, 0x02234, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_693[] = { {"Gdot", 4, 0x00120, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_694[] = { {"ijlig", 5, 0x00133, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_696[] = { {"blacklozenge", 12, 0x029EB, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_699[] = { {"Zeta", 4, 0x00396, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_6A3[] = { {"duarr", 5, 0x021F5, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_6A4[] = { {"DotEqual", 8, 0x02250, 0}, {"dtdot", 5, 0x022F1, 0}, {"gfr", 3, 0x1D524, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_6A8[] = { {"cirE", 4, 0x029C3, 0}, {"period", 6, 0x0002E, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_6A9[] = { {"lmoust", 6, 0x023B0, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_6AA[] = { {"Icy", 3, 0x00418, 0}, {"Rcaron", 6, 0x00158, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_6AB[] = { {"LeftCeiling", 11, 0x02308, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_6AE[] = { {"ascr", 4, 0x1D4B6, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_6B0[] = { {"boxtimes", 8, 0x022A0, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_6B4[] = { {"jopf", 4, 0x1D55B, 0}, {"ntriangleleft", 13, 0x022EA, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_6B6[] = { {"eqcolon", 7, 0x02255, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_6B8[] = { {"rbbrk", 5, 0x02773, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_6B9[] = { {"homtht", 6, 0x0223B, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_6BA[] = { {"ggg", 3, 0x022D9, 0}, {"seswar", 6, 0x02929, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_6BC[] = { {"perp", 4, 0x022A5, 0}, {"shcy", 4, 0x00448, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_6BF[] = { {"phone", 5, 0x0260E, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_6C0[] = { {"NotDoubleVerticalBar", 20, 0x02226, 0}, {"ngtr", 4, 0x0226F, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_6C4[] = { {"ThickSpace", 10, 0x0205F, 0x0200A}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_6C5[] = { {"ForAll", 6, 0x02200, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_6C6[] = { {"circ", 4, 0x002C6, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_6C7[] = { {"Verbar", 6, 0x02016, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_6C8[] = { {"cire", 4, 0x02257, 0}, {"lesges", 6, 0x02A93, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_6C9[] = { {"slarr", 5, 0x02190, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_6CC[] = { {"RightDownTeeVector", 18, 0x0295D, 0}, {"triangleq", 9, 0x0225C, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_6CE[] = { {"checkmark", 9, 0x02713, 0}, {"quot", 4, 0x00022, 0}, {"suplarr", 7, 0x0297B, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_6D1[] = { {"Backslash", 9, 0x02216, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_6D2[] = { {"fallingdotseq", 13, 0x02252, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_6D4[] = { {"swArr", 5, 0x021D9, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_6D5[] = { {"Xfr", 3, 0x1D51B, 0}, {"lbrke", 5, 0x0298B, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_6D9[] = { {"jmath", 5, 0x00237, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_6DA[] = { {"lmoustache", 10, 0x023B0, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_6DB[] = { {"DownTee", 7, 0x022A4, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_6DC[] = { {"reals", 5, 0x0211D, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_6DE[] = { {"quaternions", 11, 0x0210D, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_6E7[] = { {"vzigzag", 7, 0x0299A, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_6EB[] = { {"pound", 5, 0x000A3, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_6EE[] = { {"permil", 6, 0x02030, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_6EF[] = { {"Bscr", 4, 0x0212C, 0}, {"lfisht", 6, 0x0297C, 0}, {"vartriangleleft", 15, 0x022B2, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_6F5[] = { {"Kopf", 4, 0x1D542, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_6F7[] = { {"Tilde", 5, 0x0223C, 0}, {"gtrarr", 6, 0x02978, 0}, {"lAarr", 5, 0x021DA, 0}, {"opar", 4, 0x029B7, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_6FB[] = { {"triangle", 8, 0x025B5, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_704[] = { {"lcaron", 6, 0x0013E, 0}, {"wscr", 4, 0x1D4CC, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_705[] = { {"asympeq", 7, 0x0224D, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_706[] = { {"Ifr", 3, 0x02111, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_707[] = { {"DoubleDot", 9, 0x000A8, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_709[] = { {"nVdash", 6, 0x022AE, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_70C[] = { {"hairsp", 6, 0x0200A, 0}, {"leftrightarrows", 15, 0x021C6, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_70E[] = { {"lbrace", 6, 0x0007B, 0}, {"rightarrow", 10, 0x02192, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_70F[] = { {"Dagger", 6, 0x02021, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_712[] = { {"rsh", 3, 0x021B1, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_714[] = { {"eqslantless", 11, 0x02A95, 0}, {"gnapprox", 8, 0x02A8A, 0}, {"lbrack", 6, 0x0005B, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_715[] = { {"uHar", 4, 0x02963, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_717[] = { {"tilde", 5, 0x002DC, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_719[] = { {"complement", 10, 0x02201, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_71B[] = { {"zcy", 3, 0x00437, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_71E[] = { {"boxDL", 5, 0x02557, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_71F[] = { {"micro", 5, 0x000B5, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_723[] = { {"horbar", 6, 0x02015, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_724[] = { {"boxDR", 5, 0x02554, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_727[] = { {"bsolhsub", 8, 0x027C8, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_729[] = { {"ac", 2, 0x0223E, 0}, {"nvdash", 6, 0x022AC, 0}, {"precapprox", 10, 0x02AB7, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_72C[] = { {"af", 2, 0x02061, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_72D[] = { {"bullet", 6, 0x02022, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_72E[] = { {"demptyv", 7, 0x029B1, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_733[] = { {"geqq", 4, 0x02267, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_734[] = { {"uuarr", 5, 0x021C8, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_735[] = { {"Ocirc", 5, 0x000D4, 0}, {"utdot", 5, 0x022F0, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_736[] = { {"ap", 2, 0x02248, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_738[] = { {"bNot", 4, 0x02AED, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_73B[] = { {"CirclePlus", 10, 0x02295, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_73D[] = { {"glE", 3, 0x02A92, 0}, {"midcir", 6, 0x02AF0, 0}, {"rppolint", 8, 0x02A12, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_73E[] = { {"boxDl", 5, 0x02556, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_73F[] = { {"sdot", 4, 0x022C5, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_744[] = { {"boxDr", 5, 0x02553, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_745[] = { {"Xscr", 4, 0x1D4B3, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_749[] = { {"dlcrop", 6, 0x0230D, 0}, {"gtrless", 7, 0x02277, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_74B[] = { {"aopf", 4, 0x1D552, 0}, {"operp", 5, 0x029B9, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_74C[] = { {"kcy", 3, 0x0043A, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_74F[] = { {"larrfs", 6, 0x0291D, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_751[] = { {"rcub", 4, 0x0007D, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_754[] = { {"nrtri", 5, 0x022EB, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_755[] = { {"nparsl", 6, 0x02AFD, 0x020E5}, {"ocirc", 5, 0x000F4, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_759[] = { {"gla", 3, 0x02AA5, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_75C[] = { {"Iuml", 4, 0x000CF, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_75F[] = { {"mcomma", 6, 0x02A29, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_762[] = { {"glj", 3, 0x02AA4, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_763[] = { {"Map", 3, 0x02905, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_765[] = { {"copysr", 6, 0x02117, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_766[] = { {"DownTeeArrow", 12, 0x021A7, 0}, {"Upsi", 4, 0x003D2, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_768[] = { {"awint", 5, 0x02A11, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_76E[] = { {"DownRightVector", 15, 0x021C1, 0}, {"NotEqual", 8, 0x02260, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_770[] = { {"gesl", 4, 0x022DB, 0x0FE00}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_772[] = { {"NotCupCap", 9, 0x0226D, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_776[] = { {"blacktriangleright", 18, 0x025B8, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_777[] = { {"zfr", 3, 0x1D537, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_779[] = { {"leftrightarrow", 14, 0x02194, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_77A[] = { {"Abreve", 6, 0x00102, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_77F[] = { {"Uarr", 4, 0x0219F, 0}, {"gnE", 3, 0x02269, 0}, {"supmult", 7, 0x02AC2, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_781[] = { {"supplus", 7, 0x02AC0, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_783[] = { {"nabla", 5, 0x02207, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_787[] = { {"Lang", 4, 0x027EA, 0}, {"laquo", 5, 0x000AB, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_789[] = { {"larrhk", 6, 0x021A9, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_78C[] = { {"Bopf", 4, 0x1D539, 0}, {"lowbar", 6, 0x0005F, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_78D[] = { {"cup", 3, 0x0222A, 0}, {"dd", 2, 0x02146, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_78E[] = { {"nsce", 4, 0x02AB0, 0x00338}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_790[] = { {"nshortparallel", 14, 0x02226, 0}, {"nsupE", 5, 0x02AC6, 0x00338}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_794[] = { {"OpenCurlyQuote", 14, 0x02018, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_797[] = { {"bsolb", 5, 0x029C5, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_798[] = { {"DScy", 4, 0x00405, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_79A[] = { {"boxHD", 5, 0x02566, 0}, {"ltrPar", 6, 0x02996, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_79B[] = { {"nscr", 4, 0x1D4C3, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_79D[] = { {"lEg", 3, 0x02A8B, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_79F[] = { {"egrave", 6, 0x000E8, 0}, {"gne", 3, 0x02A88, 0}, {"larrsim", 7, 0x02973, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_7A0[] = { {"COPY", 4, 0x000A9, 0}, {"bdquo", 5, 0x0201E, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_7A1[] = { {"wopf", 4, 0x1D568, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_7A2[] = { {"NotRightTriangleEqual", 21, 0x022ED, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_7A5[] = { {"robrk", 5, 0x027E7, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_7A8[] = { {"kfr", 3, 0x1D528, 0}, {"nlsim", 5, 0x02274, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_7AA[] = { {"xhArr", 5, 0x027FA, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_7AB[] = { {"boxHU", 5, 0x02569, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_7AC[] = { {"lHar", 4, 0x02962, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_7AE[] = { {"Mcy", 3, 0x0041C, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_7AF[] = { {"ee", 2, 0x02147, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_7B0[] = { {"nsupe", 5, 0x02289, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_7B1[] = { {"eg", 2, 0x02A9A, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_7B5[] = { {"trade", 5, 0x02122, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_7B6[] = { {"el", 2, 0x02A99, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_7B7[] = { {"nsucceq", 7, 0x02AB0, 0x00338}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_7B8[] = { {"langle", 6, 0x027E8, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_7BA[] = { {"boxHd", 5, 0x02564, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_7BB[] = { {"Subset", 6, 0x022D0, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_7BD[] = { {"DownArrowBar", 12, 0x02913, 0}, {"topbot", 6, 0x02336, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_7BE[] = { {"OverBrace", 9, 0x023DE, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_7BF[] = { {"Eta", 3, 0x00397, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_7C0[] = { {"hstrok", 6, 0x00127, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_7C1[] = { {"Hacek", 5, 0x002C7, 0}, {"diamond", 7, 0x022C4, 0}, {"isinsv", 6, 0x022F3, 0}, {"rtriltri", 8, 0x029CE, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_7C9[] = { {"nvltrie", 7, 0x022B4, 0x020D2}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_7CB[] = { {"boxHu", 5, 0x02567, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_7CD[] = { {"fpartint", 8, 0x02A0D, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_7CE[] = { {"Proportional", 12, 0x0221D, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_7D1[] = { {"NotSuperset", 11, 0x02283, 0x020D2}, {"gE", 2, 0x02267, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_7D2[] = { {"scnsim", 6, 0x022E9, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_7D5[] = { {"uparrow", 7, 0x02191, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_7D6[] = { {"ltlarr", 6, 0x02976, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_7D9[] = { {"rtimes", 6, 0x022CA, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_7DA[] = { {"ncong", 5, 0x02247, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_7DC[] = { {"Oscr", 4, 0x1D4AA, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_7E0[] = { {"vArr", 4, 0x021D5, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_7E2[] = { {"Xopf", 4, 0x1D54F, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_7E4[] = { {"notinva", 7, 0x02209, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_7E5[] = { {"notinvb", 7, 0x022F7, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_7E6[] = { {"notinvc", 7, 0x022F6, 0}, {"nsqsube", 7, 0x022E2, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_7EC[] = { {"Tcaron", 6, 0x00164, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_7EF[] = { {"upsilon", 7, 0x003C5, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_7F1[] = { {"ge", 2, 0x02265, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_7F3[] = { {"gg", 2, 0x0226B, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_7F6[] = { {"KJcy", 4, 0x0040C, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_7F8[] = { {"gl", 2, 0x02277, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_7FB[] = { {"dblac", 5, 0x002DD, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_7FC[] = { {"lAtail", 6, 0x0291B, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_800[] = { {"gt", 2, 0x0003E, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_802[] = { {"lotimes", 7, 0x02A34, 0}, {"seArr", 5, 0x021D8, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_803[] = { {"Lacute", 6, 0x00139, 0}, {"Laplacetrf", 10, 0x02112, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_808[] = { {"uuml", 4, 0x000FC, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_809[] = { {"Amacr", 5, 0x00100, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_80A[] = { {"Mfr", 3, 0x1D510, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_810[] = { {"Int", 3, 0x0222C, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_811[] = { {"Vvdash", 6, 0x022AA, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_812[] = { {"Lcedil", 6, 0x0013B, 0}, {"larrlp", 6, 0x021AB, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_816[] = { {"Larr", 4, 0x0219E, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_819[] = { {"CircleTimes", 11, 0x02297, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_81C[] = { {"NotReverseElement", 17, 0x0220C, 0}, {"latail", 6, 0x02919, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_81D[] = { {"ntrianglerighteq", 16, 0x022ED, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_821[] = { {"blk12", 5, 0x02592, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_822[] = { {"intlarhk", 8, 0x02A17, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_823[] = { {"blk14", 5, 0x02591, 0}, {"ccupssm", 7, 0x02A50, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_824[] = { {"hercon", 6, 0x022B9, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_828[] = { {"bigotimes", 9, 0x02A02, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_829[] = { {"amacr", 5, 0x00101, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_82D[] = { {"nrarrc", 6, 0x02933, 0x00338}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_82E[] = { {"ubreve", 6, 0x0016D, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_830[] = { {"Yacute", 6, 0x000DD, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_831[] = { {"ic", 2, 0x02063, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_832[] = { {"escr", 4, 0x0212F, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_837[] = { {"ii", 2, 0x02148, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_838[] = { {"DownArrowUpArrow", 16, 0x021F5, 0}, {"nopf", 4, 0x1D55F, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_83C[] = { {"in", 2, 0x02208, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_83E[] = { {"bumpE", 5, 0x02AAE, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_83F[] = { {"rightharpoonup", 14, 0x021C0, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_841[] = { {"nrarrw", 6, 0x0219D, 0x00338}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_842[] = { {"it", 2, 0x02062, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_846[] = { {"ncaron", 6, 0x00148, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_84A[] = { {"succnsim", 8, 0x022E9, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_84C[] = { {"gammad", 6, 0x003DD, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_84F[] = { {"yucy", 4, 0x0044E, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_850[] = { {"ocy", 3, 0x0043E, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_855[] = { {"hybull", 6, 0x02043, 0}, {"rpargt", 6, 0x02994, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_857[] = { {"csube", 5, 0x02AD1, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_85B[] = { {"iiota", 5, 0x02129, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_85C[] = { {"nsim", 4, 0x02241, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_85E[] = { {"LeftTriangleEqual", 17, 0x022B4, 0}, {"bumpe", 5, 0x0224F, 0}, {"nearhk", 6, 0x02924, 0}, {"nhpar", 5, 0x02AF2, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_861[] = { {"risingdotseq", 12, 0x02253, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_865[] = { {"blk34", 5, 0x02593, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_866[] = { {"LeftTriangle", 12, 0x022B2, 0}, {"vBarv", 5, 0x02AE9, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_867[] = { {"AElig", 5, 0x000C6, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_868[] = { {"DoubleUpDownArrow", 17, 0x021D5, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_86A[] = { {"cwint", 5, 0x02231, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_86B[] = { {"rtrie", 5, 0x022B5, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_86C[] = { {"rtrif", 5, 0x025B8, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_873[] = { {"Fscr", 4, 0x02131, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_876[] = { {"lE", 2, 0x02266, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_879[] = { {"Oopf", 4, 0x1D546, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_87B[] = { {"spar", 4, 0x02225, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_87E[] = { {"uplus", 5, 0x0228E, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_88A[] = { {"sacute", 6, 0x0015B, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_88C[] = { {"fltns", 5, 0x025B1, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_88E[] = { {"rrarr", 5, 0x021C9, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_892[] = { {"larrpl", 6, 0x02939, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_895[] = { {"ultri", 5, 0x025F8, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_896[] = { {"le", 2, 0x02264, 0}, {"xuplus", 6, 0x02A04, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_897[] = { {"ljcy", 4, 0x00459, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_898[] = { {"lg", 2, 0x02276, 0}, {"vsubnE", 6, 0x02ACB, 0x0FE00}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_899[] = { {"scedil", 6, 0x0015F, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_89D[] = { {"ll", 2, 0x0226A, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_8A5[] = { {"lt", 2, 0x0003C, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_8AC[] = { {"ofr", 3, 0x1D52C, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_8B3[] = { {"nexists", 7, 0x02204, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_8B6[] = { {"smallsetminus", 13, 0x02216, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_8B7[] = { {"InvisibleComma", 14, 0x02063, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_8B8[] = { {"dotminus", 8, 0x02238, 0}, {"vsubne", 6, 0x0228A, 0x0FE00}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_8B9[] = { {"iocy", 4, 0x00451, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_8BA[] = { {"gsime", 5, 0x02A8E, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_8BC[] = { {"Rarrtl", 6, 0x02916, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_8BD[] = { {"cirmid", 6, 0x02AEF, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_8C0[] = { {"ominus", 6, 0x02296, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_8C1[] = { {"gsiml", 5, 0x02A90, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_8C2[] = { {"Prime", 5, 0x02033, 0}, {"mp", 2, 0x02213, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_8C4[] = { {"tint", 4, 0x0222D, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_8C7[] = { {"mu", 2, 0x003BC, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_8CF[] = { {"dbkarow", 7, 0x0290F, 0}, {"eopf", 4, 0x1D556, 0}, {"ogt", 3, 0x029C1, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_8D0[] = { {"Precedes", 8, 0x0227A, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_8D3[] = { {"UpTeeArrow", 10, 0x021A5, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_8D6[] = { {"varsupsetneq", 12, 0x0228B, 0x0FE00}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_8D8[] = { {"ne", 2, 0x02260, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_8DC[] = { {"ni", 2, 0x0220B, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_8DD[] = { {"mDDot", 5, 0x0223A, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_8DE[] = { {"cularrp", 7, 0x0293D, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_8DF[] = { {"rnmid", 5, 0x02AEE, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_8E0[] = { {"hardcy", 6, 0x0044A, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_8E2[] = { {"prime", 5, 0x02032, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_8E3[] = { {"Bcy", 3, 0x00411, 0}, {"REG", 3, 0x000AE, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_8E7[] = { {"oS", 2, 0x024C8, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_8E8[] = { {"nu", 2, 0x003BD, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_8E9[] = { {"ohm", 3, 0x003A9, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_8EB[] = { {"langd", 5, 0x02991, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_8F3[] = { {"backprime", 9, 0x02035, 0}, {"esim", 4, 0x02242, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_8FB[] = { {"veeeq", 5, 0x0225A, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_8FE[] = { {"RightCeiling", 12, 0x02309, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_8FF[] = { {"crarr", 5, 0x021B5, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_904[] = { {"eqsim", 5, 0x02242, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_906[] = { {"or", 2, 0x02228, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_907[] = { {"OverParenthesis", 15, 0x023DC, 0}, {"UpperLeftArrow", 14, 0x02196, 0}, {"nleftrightarrow", 15, 0x021AE, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_909[] = { {"expectation", 11, 0x02130, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_90C[] = { {"coprod", 6, 0x02210, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_90E[] = { {"Qfr", 3, 0x1D514, 0}, {"dArr", 4, 0x021D3, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_910[] = { {"Fopf", 4, 0x1D53D, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_913[] = { {"Cconint", 7, 0x02230, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_916[] = { {"larrtl", 6, 0x021A2, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_918[] = { {"Aacute", 6, 0x000C1, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_919[] = { {"DownLeftRightVector", 19, 0x02950, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_91B[] = { {"circleddash", 11, 0x0229D, 0}, {"thinsp", 6, 0x02009, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_91E[] = { {"Longrightarrow", 14, 0x027F9, 0}, {"pi", 2, 0x003C0, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_91F[] = { {"hookrightarrow", 14, 0x021AA, 0}, {"rscr", 4, 0x1D4C7, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_920[] = { {"scE", 3, 0x02AB4, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_922[] = { {"pm", 2, 0x000B1, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_923[] = { {"ZHcy", 4, 0x00416, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_927[] = { {"pr", 2, 0x0227A, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_929[] = { {"LongLeftRightArrow", 18, 0x027F7, 0}, {"supset", 6, 0x02283, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_92A[] = { {"UpArrowBar", 10, 0x02912, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_92C[] = { {"Utilde", 6, 0x00168, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_92E[] = { {"xlArr", 5, 0x027F8, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_930[] = { {"DoubleUpArrow", 13, 0x021D1, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_936[] = { {"alefsym", 7, 0x02135, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_939[] = { {"Scirc", 5, 0x0015C, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_93B[] = { {"xotime", 6, 0x02A02, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_93F[] = { {"Bfr", 3, 0x1D505, 0}, {"rdca", 4, 0x02937, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_940[] = { {"sce", 3, 0x02AB0, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_945[] = { {"Nacute", 6, 0x00143, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_947[] = { {"amalg", 5, 0x02A3F, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_94D[] = { {"UpDownArrow", 11, 0x02195, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_94F[] = { {"EqualTilde", 10, 0x02242, 0}, {"boxUL", 5, 0x0255D, 0}, {"oslash", 6, 0x000F8, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_950[] = { {"lnap", 4, 0x02A89, 0}, {"thorn", 5, 0x000FE, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_952[] = { {"ssmile", 6, 0x02323, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_953[] = { {"ndash", 5, 0x02013, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_954[] = { {"Ncedil", 6, 0x00145, 0}, {"scy", 3, 0x00441, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_955[] = { {"boxUR", 5, 0x0255A, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_956[] = { {"Aring", 5, 0x000C5, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_959[] = { {"scirc", 5, 0x0015D, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_95B[] = { {"ccaron", 6, 0x0010D, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_95D[] = { {"dotsquare", 9, 0x022A1, 0}, {"nshortmid", 9, 0x02224, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_95F[] = { {"rsquo", 5, 0x02019, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_960[] = { {"Sscr", 4, 0x1D4AE, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_963[] = { {"bigwedge", 8, 0x022C0, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_964[] = { {"Bernoullis", 10, 0x0212C, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_969[] = { {"harrw", 5, 0x021AD, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_96C[] = { {"SquareSubset", 12, 0x0228F, 0}, {"boxVH", 5, 0x0256C, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_96F[] = { {"boxUl", 5, 0x0255C, 0}, {"rx", 2, 0x0211E, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_970[] = { {"boxVL", 5, 0x02563, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_974[] = { {"olt", 3, 0x029C0, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_975[] = { {"boxUr", 5, 0x02559, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_976[] = { {"aring", 5, 0x000E5, 0}, {"boxVR", 5, 0x02560, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_97B[] = { {"sc", 2, 0x0227B, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_97C[] = { {"NestedGreaterGreater", 20, 0x0226B, 0}, {"oast", 4, 0x0229B, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_97F[] = { {"star", 4, 0x02606, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_981[] = { {"LeftTeeVector", 13, 0x0295A, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_983[] = { {"bigsqcup", 8, 0x02A06, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_985[] = { {"dcy", 3, 0x00434, 0}, {"preceq", 6, 0x02AAF, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_986[] = { {"otilde", 6, 0x000F5, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_988[] = { {"luruhar", 7, 0x02966, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_98C[] = { {"boxVh", 5, 0x0256B, 0}, {"capand", 6, 0x02A44, 0}, {"yuml", 4, 0x000FF, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_98D[] = { {"Updownarrow", 11, 0x021D5, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_98F[] = { {"TildeEqual", 10, 0x02243, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_990[] = { {"boxVl", 5, 0x02562, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_996[] = { {"boxVr", 5, 0x0255F, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_997[] = { {"HorizontalLine", 14, 0x02500, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_99B[] = { {"xmap", 4, 0x027FC, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_99C[] = { {"sigmaf", 6, 0x003C2, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_99E[] = { {"EmptySmallSquare", 16, 0x025FB, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_99F[] = { {"dzcy", 4, 0x0045F, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_9A0[] = { {"cups", 4, 0x0222A, 0x0FE00}, {"zwj", 3, 0x0200D, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_9A1[] = { {"beta", 4, 0x003B2, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_9A6[] = { {"supsim", 6, 0x02AC8, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_9A8[] = { {"beth", 4, 0x02136, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_9AA[] = { {"Iukcy", 5, 0x00406, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_9AC[] = { {"eparsl", 6, 0x029E3, 0}, {"sigmav", 6, 0x003C2, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_9B0[] = { {"lhard", 5, 0x021BD, 0}, {"sfr", 3, 0x1D530, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_9B4[] = { {"nsqsupe", 7, 0x022E3, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_9B5[] = { {"Jsercy", 6, 0x00408, 0}, {"deg", 3, 0x000B0, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_9B6[] = { {"Ucy", 3, 0x00423, 0}, {"iscr", 4, 0x1D4BE, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_9B7[] = { {"efDot", 5, 0x02252, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_9BB[] = { {"uhblk", 5, 0x02580, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_9BC[] = { {"ropf", 4, 0x1D563, 0}, {"vprop", 5, 0x0221D, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_9BD[] = { {"isinE", 5, 0x022F9, 0}, {"raemptyv", 8, 0x029B3, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_9C1[] = { {"lharu", 5, 0x021BC, 0}, {"ncongdot", 8, 0x02A6D, 0x00338}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_9C2[] = { {"subnE", 5, 0x02ACB, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_9C3[] = { {"ngsim", 5, 0x02275, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_9C5[] = { {"starf", 5, 0x02605, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_9C9[] = { {"Ograve", 6, 0x000D2, 0}, {"hksearow", 8, 0x02925, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_9CA[] = { {"iukcy", 5, 0x00456, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_9CC[] = { {"uacute", 6, 0x000FA, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_9CF[] = { {"asymp", 5, 0x02248, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_9D5[] = { {"lneq", 4, 0x02A87, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_9D6[] = { {"Otimes", 6, 0x02A37, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_9DA[] = { {"NotTildeTilde", 13, 0x02249, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_9DB[] = { {"Integral", 8, 0x0222B, 0}, {"rbrke", 5, 0x0298C, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_9DD[] = { {"nsub", 4, 0x02284, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_9DE[] = { {"rlhar", 5, 0x021CC, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_9E1[] = { {"dfr", 3, 0x1D521, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_9E2[] = { {"subne", 5, 0x0228A, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_9E5[] = { {"varnothing", 10, 0x02205, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_9E7[] = { {"Fcy", 3, 0x00424, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_9E9[] = { {"DoubleLeftTee", 13, 0x02AE4, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_9EB[] = { {"isins", 5, 0x022F4, 0}, {"nsup", 4, 0x02285, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_9ED[] = { {"circlearrowleft", 15, 0x021BA, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_9EE[] = { {"isinv", 5, 0x02208, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_9EF[] = { {"IEcy", 4, 0x00415, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_9F0[] = { {"conint", 6, 0x0222E, 0}, {"vBar", 4, 0x02AE8, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_9F1[] = { {"edot", 4, 0x00117, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_9F2[] = { {"Kappa", 5, 0x0039A, 0}, {"MediumSpace", 11, 0x0205F, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_9F3[] = { {"lbrksld", 7, 0x0298F, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_9F4[] = { {"sect", 4, 0x000A7, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_9F5[] = { {"nldr", 4, 0x02025, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_9F7[] = { {"Jscr", 4, 0x1D4A5, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_9F9[] = { {"shy", 3, 0x000AD, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_9FA[] = { {"ulcrop", 6, 0x0230F, 0}, {"veebar", 6, 0x022BB, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_9FD[] = { {"Sopf", 4, 0x1D54A, 0}, {"cuwed", 5, 0x022CF, 0}, {"rAarr", 5, 0x021DB, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_A01[] = { {"erarr", 5, 0x02971, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_A04[] = { {"lbrkslu", 7, 0x0298D, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_A05[] = { {"NotSucceeds", 11, 0x02281, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_A06[] = { {"nsccue", 6, 0x022E1, 0}, {"subrarr", 7, 0x02979, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_A08[] = { {"looparrowright", 14, 0x021AC, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_A0C[] = { {"wp", 2, 0x02118, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_A0D[] = { {"Emacr", 5, 0x00112, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_A0E[] = { {"sim", 3, 0x0223C, 0}, {"wr", 2, 0x02240, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_A10[] = { {"Udblac", 6, 0x00170, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_A12[] = { {"Ufr", 3, 0x1D518, 0}, {"kappa", 5, 0x003BA, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_A14[] = { {"notindot", 8, 0x022F5, 0x00338}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_A15[] = { {"nleq", 4, 0x02270, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_A16[] = { {"NestedLessLess", 14, 0x0226A, 0}, {"square", 6, 0x025A1, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_A17[] = { {"nles", 4, 0x02A7D, 0x00338}, {"squarf", 6, 0x025AA, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_A21[] = { {"order", 5, 0x02134, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_A23[] = { {"igrave", 6, 0x000EC, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_A24[] = { {"precneqq", 8, 0x02AB5, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_A25[] = { {"csupe", 5, 0x02AD2, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_A26[] = { {"xi", 2, 0x003BE, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_A28[] = { {"NotHumpEqual", 12, 0x0224F, 0x00338}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_A2A[] = { {"ord", 3, 0x02A5D, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_A2D[] = { {"emacr", 5, 0x00113, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_A30[] = { {"nwnear", 6, 0x02927, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_A32[] = { {"nprcue", 6, 0x022E0, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_A36[] = { {"NotExists", 9, 0x02204, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_A37[] = { {"die", 3, 0x000A8, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_A39[] = { {"ddotseq", 7, 0x02A77, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_A3B[] = { {"Dashv", 5, 0x02AE4, 0}, {"Ucirc", 5, 0x000DB, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_A3C[] = { {"orv", 3, 0x02A5B, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_A3D[] = { {"Because", 7, 0x02235, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_A41[] = { {"kgreen", 6, 0x00138, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_A43[] = { {"Ffr", 3, 0x1D509, 0}, {"LeftVector", 10, 0x021BC, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_A44[] = { {"lstrok", 6, 0x00142, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_A45[] = { {"twixt", 5, 0x0226C, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_A48[] = { {"compfn", 6, 0x02218, 0}, {"div", 3, 0x000F7, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_A4F[] = { {"drcrop", 6, 0x0230C, 0}, {"shortmid", 8, 0x02223, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_A53[] = { {"iopf", 4, 0x1D55A, 0}, {"triangledown", 12, 0x025BF, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_A54[] = { {"IJlig", 5, 0x00132, 0}, {"thetasym", 8, 0x003D1, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_A56[] = { {"Sigma", 5, 0x003A3, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_A57[] = { {"equivDD", 7, 0x02A78, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_A5A[] = { {"Cacute", 6, 0x00106, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_A5B[] = { {"dashv", 5, 0x022A3, 0}, {"ucirc", 5, 0x000FB, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_A61[] = { {"gneqq", 5, 0x02269, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_A62[] = { {"gvertneqq", 9, 0x02269, 0x0FE00}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_A63[] = { {"RightDownVectorBar", 18, 0x02955, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_A64[] = { {"NotLessLess", 11, 0x0226A, 0x00338}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_A69[] = { {"Ccedil", 6, 0x000C7, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_A6A[] = { {"odblac", 6, 0x00151, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_A6B[] = { {"mstpos", 6, 0x0223E, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_A6D[] = { {"cemptyv", 7, 0x029B2, 0}, {"rarrap", 6, 0x02975, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_A6F[] = { {"rmoust", 6, 0x023B1, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_A70[] = { {"elsdot", 6, 0x02A97, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_A76[] = { {"sigma", 5, 0x003C3, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_A78[] = { {"Implies", 7, 0x021D2, 0}, {"isin", 4, 0x02208, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_A7A[] = { {"bottom", 6, 0x022A5, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_A7E[] = { {"ShortRightArrow", 15, 0x02192, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_A81[] = { {"cupcap", 6, 0x02A46, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_A82[] = { {"NotSquareSuperset", 17, 0x02290, 0x00338}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_A84[] = { {"LeftArrowRightArrow", 19, 0x021C6, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_A85[] = { {"FilledVerySmallSquare", 21, 0x025AA, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_A86[] = { {"LeftUpTeeVector", 15, 0x02960, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_A89[] = { {"DoubleRightArrow", 16, 0x021D2, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_A8D[] = { {"raquo", 5, 0x000BB, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_A8E[] = { {"Ascr", 4, 0x1D49C, 0}, {"ReverseUpEquilibrium", 20, 0x0296F, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_A92[] = { {"hArr", 4, 0x021D4, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_A94[] = { {"Jopf", 4, 0x1D541, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_A96[] = { {"npar", 4, 0x02226, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_A98[] = { {"SupersetEqual", 13, 0x02287, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_A99[] = { {"ffllig", 6, 0x0FB04, 0}, {"smt", 3, 0x02AAA, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_A9A[] = { {"twoheadrightarrow", 17, 0x021A0, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_A9D[] = { {"ecaron", 6, 0x0011B, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_A9F[] = { {"NotRightTriangleBar", 19, 0x029D0, 0x00338}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_AA3[] = { {"apid", 4, 0x0224B, 0}, {"vscr", 4, 0x1D4CB, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_AA4[] = { {"supdot", 6, 0x02ABE, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_AA5[] = { {"colone", 6, 0x02254, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_AA7[] = { {"dwangle", 7, 0x029A6, 0}, {"shchcy", 6, 0x00449, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_AAC[] = { {"ltdot", 5, 0x022D6, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_AB2[] = { {"downharpoonright", 16, 0x021C2, 0}, {"gjcy", 4, 0x00453, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_AB4[] = { {"wfr", 3, 0x1D534, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_AB5[] = { {"rfisht", 6, 0x0297D, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_ABA[] = { {"Ycy", 3, 0x0042B, 0}, {"swarrow", 7, 0x02199, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_AC0[] = { {"nharr", 5, 0x021AE, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_AC4[] = { {"frac12", 6, 0x000BD, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_AC5[] = { {"frac13", 6, 0x02153, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_AC6[] = { {"frac14", 6, 0x000BC, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_AC7[] = { {"GreaterEqual", 12, 0x02265, 0}, {"frac15", 6, 0x02155, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_AC8[] = { {"Gamma", 5, 0x00393, 0}, {"frac16", 6, 0x02159, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_ACA[] = { {"dzigrarr", 8, 0x027FF, 0}, {"frac18", 6, 0x0215B, 0}, {"rcaron", 6, 0x00159, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_ACC[] = { {"DownRightTeeVector", 18, 0x0295F, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_ACF[] = { {"nvrtrie", 7, 0x022B5, 0x020D2}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_AD2[] = { {"iota", 4, 0x003B9, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_AD3[] = { {"sol", 3, 0x0002F, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_AD4[] = { {"rbrace", 6, 0x0007D, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_ADA[] = { {"rbrack", 6, 0x0005D, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_ADD[] = { {"rsqb", 4, 0x0005D, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_ADF[] = { {"oint", 4, 0x0222E, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_AE4[] = { {"Wscr", 4, 0x1D4B2, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_AE5[] = { {"hfr", 3, 0x1D525, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_AE6[] = { {"frac23", 6, 0x02154, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_AE7[] = { {"dlcorn", 6, 0x0231E, 0}, {"verbar", 6, 0x0007C, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_AE8[] = { {"frac25", 6, 0x02156, 0}, {"gamma", 5, 0x003B3, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_AE9[] = { {"nVDash", 6, 0x022AF, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_AEB[] = { {"Jcy", 3, 0x00419, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_AF5[] = { {"nwarrow", 7, 0x02196, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_AF6[] = { {"OverBar", 7, 0x0203E, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_AF7[] = { {"rightsquigarrow", 15, 0x0219D, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_AFA[] = { {"iexcl", 5, 0x000A1, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_AFD[] = { {"sqcap", 5, 0x02293, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_AFE[] = { {"pertenk", 7, 0x02031, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_B08[] = { {"PrecedesEqual", 13, 0x02AAF, 0}, {"frac34", 6, 0x000BE, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_B09[] = { {"Therefore", 9, 0x02234, 0}, {"frac35", 6, 0x02157, 0}, {"nvDash", 6, 0x022AD, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_B0A[] = { {"odsold", 6, 0x029BC, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_B0C[] = { {"dot", 3, 0x002D9, 0}, {"frac38", 6, 0x0215C, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_B10[] = { {"sqcaps", 6, 0x02293, 0x0FE00}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_B11[] = { {"ZeroWidthSpace", 14, 0x0200B, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_B15[] = { {"rarrfs", 6, 0x0291E, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_B16[] = { {"Yfr", 3, 0x1D51C, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_B1E[] = { {"CircleDot", 9, 0x02299, 0}, {"gtcir", 5, 0x02A7A, 0}, {"squ", 3, 0x025A1, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_B1F[] = { {"angmsd", 6, 0x02221, 0}, {"nsubseteq", 9, 0x02288, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_B23[] = { {"iprod", 5, 0x02A3C, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_B24[] = { {"bprime", 6, 0x02035, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_B27[] = { {"supsub", 6, 0x02AD4, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_B29[] = { {"SquareSupersetEqual", 19, 0x02292, 0}, {"therefore", 9, 0x02234, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_B2A[] = { {"frac45", 6, 0x02158, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_B2B[] = { {"Aopf", 4, 0x1D538, 0}, {"NotGreaterFullEqual", 19, 0x02267, 0x00338}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_B2C[] = { {"Tstrok", 6, 0x00166, 0}, {"rightleftarrows", 15, 0x021C4, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_B2D[] = { {"Fouriertrf", 10, 0x02131, 0}, {"epar", 4, 0x022D5, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_B2E[] = { {"omid", 4, 0x029B6, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_B2F[] = { {"OpenCurlyDoubleQuote", 20, 0x0201C, 0}, {"dagger", 6, 0x02020, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_B33[] = { {"semi", 4, 0x0003B, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_B35[] = { {"supsup", 6, 0x02AD6, 0}, {"zeetrf", 6, 0x02128, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_B36[] = { {"DifferentialD", 13, 0x02146, 0}, {"topcir", 6, 0x02AF1, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_B3A[] = { {"mscr", 4, 0x1D4C2, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_B3D[] = { {"Wcirc", 5, 0x00174, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_B3E[] = { {"boxdL", 5, 0x02555, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_B40[] = { {"Gbreve", 6, 0x0011E, 0}, {"vopf", 4, 0x1D567, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_B42[] = { {"lap", 3, 0x02A85, 0}, {"llarr", 5, 0x021C7, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_B44[] = { {"boxdR", 5, 0x02552, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_B46[] = { {"RightAngleBracket", 17, 0x027E9, 0}, {"lat", 3, 0x02AAB, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_B47[] = { {"Jfr", 3, 0x1D50D, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_B4C[] = { {"frac56", 6, 0x0215A, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_B4E[] = { {"frac58", 6, 0x0215D, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_B4F[] = { {"rarrhk", 6, 0x021AA, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_B50[] = { {"lesdot", 6, 0x02A7F, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_B51[] = { {"ApplyFunction", 13, 0x02061, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_B52[] = { {"NotGreaterTilde", 15, 0x02275, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_B53[] = { {"Cedilla", 7, 0x000B8, 0}, {"curvearrowright", 15, 0x021B7, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_B56[] = { {"rdsh", 4, 0x021B3, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_B58[] = { {"larrb", 5, 0x021E4, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_B5C[] = { {"vrtri", 5, 0x022B3, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_B5D[] = { {"nequiv", 6, 0x02262, 0}, {"wcirc", 5, 0x00175, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_B5E[] = { {"boxdl", 5, 0x02510, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_B63[] = { {"DoubleDownArrow", 15, 0x021D3, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_B64[] = { {"boxdr", 5, 0x0250C, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_B67[] = { {"pluscir", 7, 0x02A22, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_B69[] = { {"longmapsto", 10, 0x027FC, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_B6B[] = { {"gnap", 4, 0x02A8A, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_B6D[] = { {"bigodot", 7, 0x02A00, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_B72[] = { {"thickapprox", 11, 0x02248, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_B73[] = { {"DotDot", 6, 0x020DC, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_B77[] = { {"incare", 6, 0x02105, 0}, {"rarrbfs", 7, 0x02920, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_B78[] = { {"apos", 4, 0x00027, 0}, {"tbrk", 4, 0x023B4, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_B7A[] = { {"grave", 5, 0x00060, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_B7B[] = { {"Nscr", 4, 0x1D4A9, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_B7E[] = { {"rangle", 6, 0x027E9, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_B7F[] = { {"uArr", 4, 0x021D1, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_B81[] = { {"Wopf", 4, 0x1D54E, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_B82[] = { {"doteq", 5, 0x02250, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_B87[] = { {"times", 5, 0x000D7, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_B8D[] = { {"fflig", 5, 0x0FB00, 0}, {"lcy", 3, 0x0043B, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_B8F[] = { {"sub", 3, 0x02282, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_B90[] = { {"frac78", 6, 0x0215E, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_B94[] = { {"xrarr", 5, 0x027F6, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_B98[] = { {"UpArrowDownArrow", 16, 0x021C5, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_B99[] = { {"bbrktbrk", 8, 0x023B6, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_B9A[] = { {"abreve", 6, 0x00103, 0}, {"lsaquo", 6, 0x02039, 0}, {"sum", 3, 0x02211, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_B9C[] = { {"Eacute", 6, 0x000C9, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_B9D[] = { {"sup", 3, 0x02283, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_BA5[] = { {"ContourIntegral", 15, 0x0222E, 0}, {"DiacriticalDot", 14, 0x002D9, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_BA9[] = { {"trisb", 5, 0x029CD, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_BAE[] = { {"Hcirc", 5, 0x00124, 0}, {"lceil", 5, 0x02308, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_BB2[] = { {"Zcaron", 6, 0x0017D, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_BB5[] = { {"looparrowleft", 13, 0x021AB, 0}, {"oelig", 5, 0x00153, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_BB6[] = { {"LessSlantEqual", 14, 0x02A7D, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_BB7[] = { {"NegativeThinSpace", 17, 0x0200B, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_BBA[] = { {"boxhD", 5, 0x02565, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_BBC[] = { {"omicron", 7, 0x003BF, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_BBD[] = { {"leg", 3, 0x022DA, 0}, {"rightthreetimes", 15, 0x022CC, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_BBF[] = { {"NotSucceedsSlantEqual", 21, 0x022E1, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_BC1[] = { {"angmsdaa", 8, 0x029A8, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_BC2[] = { {"angmsdab", 8, 0x029A9, 0}, {"rAtail", 6, 0x0291C, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_BC3[] = { {"angmsdac", 8, 0x029AA, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_BC4[] = { {"angmsdad", 8, 0x029AB, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_BC5[] = { {"angmsdae", 8, 0x029AC, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_BC6[] = { {"angmsdaf", 8, 0x029AD, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_BC7[] = { {"angmsdag", 8, 0x029AE, 0}, {"leq", 3, 0x02264, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_BC8[] = { {"angmsdah", 8, 0x029AF, 0}, {"solbar", 6, 0x0233F, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_BC9[] = { {"Racute", 6, 0x00154, 0}, {"les", 3, 0x02A7D, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_BCB[] = { {"boxhU", 5, 0x02568, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_BCE[] = { {"hcirc", 5, 0x00125, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_BD1[] = { {"dscr", 4, 0x1D4B9, 0}, {"smashp", 6, 0x02A33, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_BD7[] = { {"mopf", 4, 0x1D55E, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_BD8[] = { {"Rcedil", 6, 0x00156, 0}, {"dscy", 4, 0x00455, 0}, {"prap", 4, 0x02AB7, 0}, {"rarrlp", 6, 0x021AC, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_BD9[] = { {"Aogon", 5, 0x00104, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_BDA[] = { {"boxhd", 5, 0x0252C, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_BDB[] = { {"subset", 6, 0x02282, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_BDD[] = { {"lgE", 3, 0x02A91, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_BDF[] = { {"epsilon", 7, 0x003B5, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_BE1[] = { {"curarrm", 7, 0x0293C, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_BE2[] = { {"ratail", 6, 0x0291A, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_BE4[] = { {"DoubleLongLeftRightArrow", 24, 0x027FA, 0}, {"rhov", 4, 0x003F1, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_BE7[] = { {"LeftDoubleBracket", 17, 0x027E6, 0}, {"Lleftarrow", 10, 0x021DA, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_BE8[] = { {"Uuml", 4, 0x000DC, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_BE9[] = { {"lfr", 3, 0x1D529, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_BEA[] = { {"minusdu", 7, 0x02A2A, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_BEB[] = { {"boxhu", 5, 0x02534, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_BEF[] = { {"Ncy", 3, 0x0041D, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_BF0[] = { {"gneq", 4, 0x02A88, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_BF1[] = { {"rangd", 5, 0x02992, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_BF2[] = { {"range", 5, 0x029A5, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_BF3[] = { {"lfloor", 6, 0x0230A, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_BF7[] = { {"NotSucceedsTilde", 16, 0x0227F, 0x00338}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_BF9[] = { {"aogon", 5, 0x00105, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_BFA[] = { {"NotGreaterSlantEqual", 20, 0x02A7E, 0x00338}, {"NotSquareSupersetEqual", 22, 0x022E3, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_BFC[] = { {"profsurf", 8, 0x02313, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_C02[] = { {"wedgeq", 6, 0x02259, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_C0B[] = { {"Alpha", 5, 0x00391, 0}, {"DiacriticalDoubleAcute", 22, 0x002DD, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_C0C[] = { {"lltri", 5, 0x025FA, 0}, {"tcaron", 6, 0x00165, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_C11[] = { {"Imacr", 5, 0x0012A, 0}, {"subseteq", 8, 0x02286, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_C12[] = { {"Escr", 4, 0x02130, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_C16[] = { {"lArr", 4, 0x021D0, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_C18[] = { {"Nopf", 4, 0x02115, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_C1A[] = { {"rpar", 4, 0x00029, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_C1D[] = { {"divonx", 6, 0x022C7, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_C1E[] = { {"olcir", 5, 0x029BE, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_C23[] = { {"lacute", 6, 0x0013A, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_C27[] = { {"zscr", 4, 0x1D4CF, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_C2B[] = { {"alpha", 5, 0x003B1, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_C31[] = { {"imacr", 5, 0x0012B, 0}, {"vellip", 6, 0x022EE, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_C32[] = { {"lcedil", 6, 0x0013C, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_C33[] = { {"sime", 4, 0x02243, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_C34[] = { {"empty", 5, 0x02205, 0}, {"imped", 5, 0x001B5, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_C35[] = { {"simg", 4, 0x02A9E, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_C36[] = { {"kjcy", 4, 0x0045C, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_C3A[] = { {"siml", 4, 0x02A9D, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_C3E[] = { {"LessEqualGreater", 16, 0x022DA, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_C3F[] = { {"Ycirc", 5, 0x00176, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_C40[] = { {"RoundImplies", 12, 0x02970, 0}, {"nvrArr", 6, 0x02903, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_C43[] = { {"check", 5, 0x02713, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_C44[] = { {"nlarr", 5, 0x0219A, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_C46[] = { {"middot", 6, 0x000B7, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_C48[] = { {"par", 3, 0x02225, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_C4A[] = { {"NotGreaterGreater", 17, 0x0226B, 0x00338}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_C4B[] = { {"Nfr", 3, 0x1D511, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_C4F[] = { {"nwArr", 5, 0x021D6, 0}, {"prec", 4, 0x0227A, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_C50[] = { {"Barv", 4, 0x02AE7, 0}, {"yacute", 6, 0x000FD, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_C54[] = { {"DoubleLeftRightArrow", 20, 0x021D4, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_C58[] = { {"Coproduct", 9, 0x02210, 0}, {"rarrpl", 6, 0x02945, 0}, {"subsim", 6, 0x02AC7, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_C5A[] = { {"ntgl", 4, 0x02279, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_C5B[] = { {"LeftTriangleBar", 15, 0x029CF, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_C5F[] = { {"ycirc", 5, 0x00177, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_C69[] = { {"doteqdot", 8, 0x02251, 0}, {"nang", 4, 0x02220, 0x020D2}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_C6B[] = { {"bigcap", 6, 0x022C2, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_C6C[] = { {"CHcy", 4, 0x00427, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_C6E[] = { {"dopf", 4, 0x1D555, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_C72[] = { {"inodot", 6, 0x00131, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_C76[] = { {"nvHarr", 6, 0x02904, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_C77[] = { {"laemptyv", 8, 0x029B4, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_C78[] = { {"bigcirc", 7, 0x025EF, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_C7A[] = { {"scnap", 5, 0x02ABA, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_C7B[] = { {"DownLeftVector", 14, 0x021BD, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_C80[] = { {"race", 4, 0x0223D, 0x00331}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_C82[] = { {"vartriangleright", 16, 0x022B3, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_C89[] = { {"napE", 4, 0x02A70, 0x00338}, {"supedot", 7, 0x02AC4, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_C8E[] = { {"acE", 3, 0x0223E, 0x00333}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_C91[] = { {"pcy", 3, 0x0043F, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_C93[] = { {"qprime", 6, 0x02057, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_C94[] = { {"RightTeeVector", 14, 0x0295B, 0}, {"curlyvee", 8, 0x022CE, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_C95[] = { {"swarhk", 6, 0x02926, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_C98[] = { {"Atilde", 6, 0x000C3, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_CA6[] = { {"bbrk", 4, 0x023B5, 0}, {"prnap", 5, 0x02AB9, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_CA8[] = { {"image", 5, 0x02111, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_CA9[] = { {"sext", 4, 0x02736, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_CAA[] = { {"ldquo", 5, 0x0201C, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_CAC[] = { {"NotLeftTriangleBar", 18, 0x029CF, 0x00338}, {"epsiv", 5, 0x003F5, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_CAD[] = { {"CenterDot", 9, 0x000B7, 0}, {"acd", 3, 0x0223F, 0}, {"upuparrows", 10, 0x021C8, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_CAF[] = { {"Eopf", 4, 0x1D53C, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_CB0[] = { {"Jcirc", 5, 0x00134, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_CB2[] = { {"smid", 4, 0x02223, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_CB4[] = { {"bull", 4, 0x02022, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_CB6[] = { {"rhard", 5, 0x021C1, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_CB7[] = { {"nsupset", 7, 0x02283, 0x020D2}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_CBA[] = { {"npre", 4, 0x02AAF, 0x00338}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_CBE[] = { {"qscr", 4, 0x1D4C6, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_CC2[] = { {"acy", 3, 0x00430, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_CC4[] = { {"lnE", 3, 0x02268, 0}, {"zopf", 4, 0x1D56B, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_CC5[] = { {"Ntilde", 6, 0x000D1, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_CC7[] = { {"rharu", 5, 0x021C0, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_CC8[] = { {"kappav", 6, 0x003F0, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_CC9[] = { {"timesb", 6, 0x022A0, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_CCB[] = { {"iiiint", 6, 0x02A0C, 0}, {"timesd", 6, 0x02A30, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_CD0[] = { {"jcirc", 5, 0x00135, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_CD2[] = { {"nsimeq", 6, 0x02244, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_CD3[] = { {"Esim", 4, 0x02A73, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_CD9[] = { {"Cap", 3, 0x022D2, 0}, {"bump", 4, 0x0224E, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_CDA[] = { {"lvnE", 4, 0x02268, 0x0FE00}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_CDC[] = { {"rarrtl", 6, 0x021A3, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_CE4[] = { {"lne", 3, 0x02A87, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_CE6[] = { {"commat", 6, 0x00040, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_CE8[] = { {"hslash", 6, 0x0210F, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_CE9[] = { {"lthree", 6, 0x022CB, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_CED[] = { {"Gcedil", 6, 0x00122, 0}, {"pfr", 3, 0x1D52D, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_CF1[] = { {"RightTriangleEqual", 18, 0x022B5, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_CF2[] = { {"ngeqslant", 9, 0x02A7E, 0x00338}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_CF3[] = { {"Rcy", 3, 0x00420, 0}, {"gimel", 5, 0x02137, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_CF4[] = { {"curarr", 6, 0x021B7, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_CFA[] = { {"ntlg", 4, 0x02278, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_CFF[] = { {"Rscr", 4, 0x0211B, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_D00[] = { {"urcrop", 6, 0x0230E, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_D06[] = { {"Poincareplane", 13, 0x0210C, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_D07[] = { {"NoBreak", 7, 0x02060, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_D0B[] = { {"lcub", 4, 0x0007B, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_D0E[] = { {"nltri", 5, 0x022EA, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_D10[] = { {"blacktriangledown", 17, 0x025BE, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_D11[] = { {"fjlig", 5, 0x00066, 0x0006A}, {"percnt", 6, 0x00025, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_D12[] = { {"rightharpoondown", 16, 0x021C1, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_D13[] = { {"LeftAngleBracket", 16, 0x027E8, 0}, {"npreceq", 7, 0x02AAF, 0x00338}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_D15[] = { {"cupcup", 6, 0x02A4A, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_D18[] = { {"LeftVectorBar", 13, 0x02952, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_D19[] = { {"NJcy", 4, 0x0040A, 0}, {"triangleright", 13, 0x025B9, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_D1A[] = { {"Tcedil", 6, 0x00162, 0}, {"loz", 3, 0x025CA, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_D1E[] = { {"afr", 3, 0x1D51E, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_D1F[] = { {"NotLessTilde", 12, 0x02274, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_D20[] = { {"NotElement", 10, 0x02209, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_D22[] = { {"NotHumpDownHump", 15, 0x0224E, 0x00338}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_D24[] = { {"SquareSubsetEqual", 17, 0x02291, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_D26[] = { {"nleqq", 5, 0x02266, 0x00338}, {"phi", 3, 0x003C6, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_D2A[] = { {"NotRightTriangle", 16, 0x022EB, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_D32[] = { {"lhblk", 5, 0x02584, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_D34[] = { {"caret", 5, 0x02041, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_D35[] = { {"bsemi", 5, 0x0204F, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_D38[] = { {"aacute", 6, 0x000E1, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_D39[] = { {"mapsto", 6, 0x021A6, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_D3A[] = { {"Congruent", 9, 0x02261, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_D3B[] = { {"Vdash", 5, 0x022A9, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_D3E[] = { {"longrightarrow", 14, 0x027F6, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_D42[] = { {"iinfin", 6, 0x029DC, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_D44[] = { {"EmptyVerySmallSquare", 20, 0x025AB, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_D49[] = { {"real", 4, 0x0211C, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_D4C[] = { {"SucceedsEqual", 13, 0x02AB0, 0}, {"utilde", 6, 0x00169, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_D4F[] = { {"Rfr", 3, 0x0211C, 0}, {"tau", 3, 0x003C4, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_D51[] = { {"Wedge", 5, 0x022C0, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_D54[] = { {"piv", 3, 0x003D6, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_D55[] = { {"hscr", 4, 0x1D4BD, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_D56[] = { {"subdot", 6, 0x02ABD, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_D57[] = { {"dsol", 4, 0x029F6, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_D5A[] = { {"prnE", 4, 0x02AB5, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_D5B[] = { {"qopf", 4, 0x1D562, 0}, {"vdash", 5, 0x022A2, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_D5F[] = { {"Star", 4, 0x022C6, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_D63[] = { {"sqsupseteq", 10, 0x02292, 0}, {"zhcy", 4, 0x00436, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_D65[] = { {"nacute", 6, 0x00144, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_D69[] = { {"lessgtr", 7, 0x02276, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_D6A[] = { {"nless", 5, 0x0226E, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_D6C[] = { {"RightTeeArrow", 13, 0x021A6, 0}, {"Yuml", 4, 0x00178, 0}, {"target", 6, 0x02316, 0}, {"upharpoonleft", 13, 0x021BF, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_D6F[] = { {"between", 7, 0x0226C, 0}, {"boxuL", 5, 0x0255B, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_D70[] = { {"TSHcy", 5, 0x0040B, 0}, {"lrm", 3, 0x0200E, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_D71[] = { {"excl", 4, 0x00021, 0}, {"hyphen", 6, 0x02010, 0}, {"mlcp", 4, 0x02ADB, 0}, {"wedge", 5, 0x02227, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_D74[] = { {"ncedil", 6, 0x00146, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_D75[] = { {"boxuR", 5, 0x02558, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_D76[] = { {"Not", 3, 0x02AEC, 0}, {"epsi", 4, 0x003B5, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_D7C[] = { {"disin", 5, 0x022F2, 0}, {"nRightarrow", 11, 0x021CF, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_D7D[] = { {"cylcty", 6, 0x0232D, 0}, {"neArr", 5, 0x021D7, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_D7E[] = { {"prnsim", 6, 0x022E8, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_D80[] = { {"Cfr", 3, 0x0212D, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_D81[] = { {"Beta", 4, 0x00392, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_D85[] = { {"leftarrowtail", 13, 0x021A2, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_D87[] = { {"parsl", 5, 0x02AFD, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_D89[] = { {"xwedge", 6, 0x022C0, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_D8A[] = { {"olcross", 7, 0x029BB, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_D8C[] = { {"boxvH", 5, 0x0256A, 0}, {"lsh", 3, 0x021B0, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_D8D[] = { {"circledR", 8, 0x000AE, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_D8E[] = { {"Rho", 3, 0x003A1, 0}, {"circledS", 8, 0x024C8, 0}, {"cupor", 5, 0x02A45, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_D8F[] = { {"Ugrave", 6, 0x000D9, 0}, {"boxul", 5, 0x02518, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_D90[] = { {"boxvL", 5, 0x02561, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_D91[] = { {"sqcup", 5, 0x02294, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_D93[] = { {"rect", 4, 0x025AD, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_D94[] = { {"mldr", 4, 0x02026, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_D95[] = { {"boxur", 5, 0x02514, 0}, {"digamma", 7, 0x003DD, 0}, {"tcy", 3, 0x00442, 0}, {"urcorner", 8, 0x0231D, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_D96[] = { {"DoubleLeftArrow", 15, 0x021D0, 0}, {"Iscr", 4, 0x02110, 0}, {"boxvR", 5, 0x0255E, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_D98[] = { {"ulcorn", 6, 0x0231C, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_D9A[] = { {"prod", 4, 0x0220F, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_D9C[] = { {"Ropf", 4, 0x0211D, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_DA0[] = { {"rmoustache", 10, 0x023B1, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_DA5[] = { {"NegativeMediumSpace", 19, 0x0200B, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_DA6[] = { {"prop", 4, 0x0221D, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_DA8[] = { {"TScy", 4, 0x00426, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_DA9[] = { {"xsqcup", 6, 0x02A06, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_DAC[] = { {"bemptyv", 7, 0x029B0, 0}, {"boxvh", 5, 0x0253C, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_DB0[] = { {"boxvl", 5, 0x02524, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_DB3[] = { {"NotTildeFullEqual", 17, 0x02247, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_DB4[] = { {"subE", 4, 0x02AC5, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_DB6[] = { {"boxvr", 5, 0x0251C, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_DB7[] = { {"bigvee", 6, 0x022C1, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_DB9[] = { {"Chi", 3, 0x003A7, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_DBC[] = { {"circeq", 6, 0x02257, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_DBE[] = { {"emsp13", 6, 0x02004, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_DBF[] = { {"emsp14", 6, 0x02005, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_DC2[] = { {"ouml", 4, 0x000F6, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_DC3[] = { {"RightArrowBar", 13, 0x021E5, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_DC6[] = { {"ecy", 3, 0x0044D, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_DC8[] = { {"succneqq", 8, 0x02AB6, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_DCA[] = { {"npart", 5, 0x02202, 0x00338}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_DCF[] = { {"Element", 7, 0x02208, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_DD1[] = { {"Edot", 4, 0x00116, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_DD3[] = { {"RightUpDownVector", 17, 0x0294F, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_DD4[] = { {"sube", 4, 0x02286, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_DD5[] = { {"jsercy", 6, 0x00458, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_DD7[] = { {"varrho", 6, 0x003F1, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_DD9[] = { {"subsub", 6, 0x02AD5, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_DDC[] = { {"Dcaron", 6, 0x0010E, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_DDD[] = { {"Eogon", 5, 0x00118, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_DE4[] = { {"geqslant", 8, 0x02A7E, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_DE6[] = { {"rdldhar", 7, 0x02969, 0}, {"zdot", 4, 0x0017C, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_DE7[] = { {"subsup", 6, 0x02AD3, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_DE9[] = { {"ograve", 6, 0x000F2, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_DEB[] = { {"ReverseElement", 14, 0x0220B, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_DED[] = { {"drcorn", 6, 0x0231F, 0}, {"rang", 4, 0x027E9, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_DF1[] = { {"tfr", 3, 0x1D531, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_DF2[] = { {"hopf", 4, 0x1D559, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_DF3[] = { {"succ", 4, 0x0227B, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_DF6[] = { {"otimes", 6, 0x02297, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_DF7[] = { {"Vcy", 3, 0x00412, 0}, {"ltquest", 7, 0x02A7B, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_DF9[] = { {"lozenge", 7, 0x025CA, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_DFB[] = { {"LeftDownVector", 14, 0x021C3, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_DFD[] = { {"eogon", 5, 0x00119, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_E03[] = { {"amp", 3, 0x00026, 0}, {"lopar", 5, 0x02985, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_E04[] = { {"loplus", 6, 0x02A2D, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_E08[] = { {"NotTilde", 8, 0x02241, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_E09[] = { {"CounterClockwiseContourIntegral", 31, 0x02233, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_E0C[] = { {"InvisibleTimes", 14, 0x02062, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_E11[] = { {"lesdotor", 8, 0x02A83, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_E18[] = { {"and", 3, 0x02227, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_E1B[] = { {"RightUpVector", 13, 0x021BE, 0}, {"ang", 3, 0x02220, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_E1C[] = { {"DoubleRightTee", 14, 0x022A8, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_E1D[] = { {"LeftUpVectorBar", 15, 0x02958, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_E1E[] = { {"smte", 4, 0x02AAC, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_E20[] = { {"Iacute", 6, 0x000CD, 0}, {"triminus", 8, 0x02A3A, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_E22[] = { {"efr", 3, 0x1D522, 0}, {"iiint", 5, 0x0222D, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_E23[] = { {"ctdot", 5, 0x022EF, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_E24[] = { {"mnplus", 6, 0x02213, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_E25[] = { {"Vee", 3, 0x022C1, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_E28[] = { {"Gcy", 3, 0x00413, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_E2A[] = { {"lurdshar", 8, 0x0294A, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_E2C[] = { {"smeparsl", 8, 0x029E4, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_E2F[] = { {"DoubleVerticalBar", 17, 0x02225, 0}, {"iecy", 4, 0x00435, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_E30[] = { {"udblac", 6, 0x00171, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_E32[] = { {"gtquest", 7, 0x02A7C, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_E33[] = { {"Iopf", 4, 0x1D540, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_E35[] = { {"bsime", 5, 0x022CD, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_E36[] = { {"RightVector", 11, 0x021C0, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_E37[] = { {"NotGreaterLess", 14, 0x02279, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_E3B[] = { {"apE", 3, 0x02A70, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_E41[] = { {"CupCap", 6, 0x0224D, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_E42[] = { {"uscr", 4, 0x1D4CA, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_E43[] = { {"erDot", 5, 0x02253, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_E44[] = { {"egs", 3, 0x02A96, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_E48[] = { {"rlarr", 5, 0x021C4, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_E4C[] = { {"prE", 3, 0x02AB3, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_E4E[] = { {"QUOT", 4, 0x00022, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_E53[] = { {"Vfr", 3, 0x1D519, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_E55[] = { {"cupbrcap", 8, 0x02A48, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_E57[] = { {"intercal", 8, 0x022BA, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_E58[] = { {"imath", 5, 0x00131, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_E59[] = { {"RightUpTeeVector", 16, 0x0295C, 0}, {"trie", 4, 0x0225C, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_E5B[] = { {"ape", 3, 0x0224A, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_E5D[] = { {"softcy", 6, 0x0044C, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_E5E[] = { {"rarrb", 5, 0x021E5, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_E5F[] = { {"FilledSmallSquare", 17, 0x025FC, 0}, {"rarrc", 5, 0x02933, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_E60[] = { {"Superset", 8, 0x02283, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_E61[] = { {"hoarr", 5, 0x021FF, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_E63[] = { {"DownRightVectorBar", 18, 0x02957, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_E64[] = { {"brvbar", 6, 0x000A6, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_E65[] = { {"ecolon", 6, 0x02255, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_E66[] = { {"GreaterLess", 11, 0x02277, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_E6A[] = { {"nrArr", 5, 0x021CF, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_E6C[] = { {"pre", 3, 0x02AAF, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_E6F[] = { {"aleph", 5, 0x02135, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_E70[] = { {"DiacriticalAcute", 16, 0x000B4, 0}, {"SmallCircle", 11, 0x02218, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_E71[] = { {"parsim", 6, 0x02AF3, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_E73[] = { {"rarrw", 5, 0x0219D, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_E78[] = { {"caron", 5, 0x002C7, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_E7A[] = { {"cacute", 6, 0x00107, 0}, {"lagran", 6, 0x02112, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_E7C[] = { {"rarr", 4, 0x02192, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_E80[] = { {"Rrightarrow", 11, 0x021DB, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_E83[] = { {"Vscr", 4, 0x1D4B1, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_E84[] = { {"Gfr", 3, 0x1D50A, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_E89[] = { {"ccedil", 6, 0x000E7, 0}, {"propto", 6, 0x0221D, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_E8E[] = { {"zwnj", 4, 0x0200C, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_E91[] = { {"psi", 3, 0x003C8, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_E99[] = { {"infin", 5, 0x0221E, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_E9C[] = { {"circledcirc", 11, 0x0229A, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_EA1[] = { {"Proportion", 10, 0x02237, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_EA2[] = { {"subseteqq", 9, 0x02AC5, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_EA4[] = { {"nGtv", 4, 0x0226B, 0x00338}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_EA8[] = { {"macr", 4, 0x000AF, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_EA9[] = { {"orslope", 7, 0x02A57, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_EB1[] = { {"frown", 5, 0x02322, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_EB2[] = { {"Iota", 4, 0x00399, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_EB4[] = { {"rceil", 5, 0x02309, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_EB7[] = { {"spadesuit", 9, 0x02660, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_EB8[] = { {"sstarf", 6, 0x022C6, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_ECA[] = { {"icy", 3, 0x00438, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_ECD[] = { {"ast", 3, 0x0002A, 0}, {"nmid", 4, 0x02224, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_ECF[] = { {"bowtie", 6, 0x022C8, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_ED1[] = { {"thetav", 6, 0x003D1, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_ED7[] = { {"vangrt", 6, 0x0299C, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_ED8[] = { {"numsp", 5, 0x02007, 0}, {"triplus", 7, 0x02A39, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_ED9[] = { {"lscr", 4, 0x1D4C1, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_EDA[] = { {"pointint", 8, 0x02A15, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_EDB[] = { {"Theta", 5, 0x00398, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_EDF[] = { {"rightrightarrows", 16, 0x021C9, 0}, {"uopf", 4, 0x1D566, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_EE2[] = { {"ell", 3, 0x02113, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_EE4[] = { {"cuepr", 5, 0x022DE, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_EE5[] = { {"NotVerticalBar", 14, 0x02224, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_EE7[] = { {"xnis", 4, 0x022FB, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_EE9[] = { {"els", 3, 0x02A95, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_EEF[] = { {"DDotrahd", 8, 0x02911, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_EF1[] = { {"larrbfs", 7, 0x0291F, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_EF2[] = { {"Rsh", 3, 0x021B1, 0}, {"boxplus", 7, 0x0229E, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_EF4[] = { {"swarr", 5, 0x02199, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_EF5[] = { {"gvnE", 4, 0x02269, 0x0FE00}, {"xfr", 3, 0x1D535, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_EF9[] = { {"ldca", 4, 0x02936, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_EFB[] = { {"NotPrecedesSlantEqual", 21, 0x022E0, 0}, {"YAcy", 4, 0x0042F, 0}, {"Zcy", 3, 0x00417, 0}, {"andslope", 8, 0x02A58, 0}, {"numero", 6, 0x02116, 0}, {"theta", 5, 0x003B8, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_EFE[] = { {"mapstoup", 8, 0x021A5, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_EFF[] = { {"bigcup", 6, 0x022C3, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_F03[] = { {"nesear", 6, 0x02928, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_F05[] = { {"lesssim", 7, 0x02272, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_F08[] = { {"DownArrow", 9, 0x02193, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_F0B[] = { {"orarr", 5, 0x021BB, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_F0F[] = { {"ccaps", 5, 0x02A4D, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_F10[] = { {"xdtri", 5, 0x025BD, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_F11[] = { {"xcap", 4, 0x022C2, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_F13[] = { {"downdownarrows", 14, 0x021CA, 0}, {"nisd", 4, 0x022FA, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_F14[] = { {"VerticalBar", 11, 0x02223, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_F15[] = { {"TRADE", 5, 0x02122, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_F17[] = { {"Omacr", 5, 0x0014C, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_F18[] = { {"top", 3, 0x022A4, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_F19[] = { {"LeftRightArrow", 14, 0x02194, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_F1A[] = { {"Mscr", 4, 0x02133, 0}, {"iff", 3, 0x021D4, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_F1F[] = { {"downharpoonleft", 15, 0x021C3, 0}, {"eng", 3, 0x0014B, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_F20[] = { {"Vopf", 4, 0x1D54D, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_F26[] = { {"ifr", 3, 0x1D526, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_F28[] = { {"Downarrow", 9, 0x021D3, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_F2C[] = { {"Kcy", 3, 0x0041A, 0}, {"angle", 5, 0x02220, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_F2F[] = { {"lescc", 5, 0x02AA8, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_F30[] = { {"lesseqqgtr", 10, 0x02A8B, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_F31[] = { {"bigstar", 7, 0x02605, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_F33[] = { {"ddagger", 7, 0x02021, 0}, {"nltrie", 6, 0x022EC, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_F37[] = { {"omacr", 5, 0x0014D, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_F38[] = { {"cuesc", 5, 0x022DF, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_F40[] = { {"circlearrowright", 16, 0x021BB, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_F41[] = { {"ngeqq", 5, 0x02267, 0x00338}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_F44[] = { {"squf", 4, 0x025AA, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_F46[] = { {"rtri", 4, 0x025B9, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_F47[] = { {"VerticalLine", 12, 0x0007C, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_F48[] = { {"downarrow", 9, 0x02193, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_F4B[] = { {"Scaron", 6, 0x00160, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_F4C[] = { {"tstrok", 6, 0x00167, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_F50[] = { {"wreath", 6, 0x02240, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_F51[] = { {"exponentiale", 12, 0x02147, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_F55[] = { {"Idot", 4, 0x00130, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_F57[] = { {"Zfr", 3, 0x02128, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_F58[] = { {"bnot", 4, 0x02310, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_F5B[] = { {"infintie", 8, 0x029DD, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_F5D[] = { {"angrtvbd", 8, 0x0299D, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_F5F[] = { {"prurel", 6, 0x022B0, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_F60[] = { {"gbreve", 6, 0x0011F, 0}, {"rsaquo", 6, 0x0203A, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_F62[] = { {"sung", 4, 0x0266A, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_F67[] = { {"lvertneqq", 9, 0x02268, 0x0FE00}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_F68[] = { {"lnsim", 5, 0x022E6, 0}, {"searrow", 7, 0x02198, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_F69[] = { {"nsubset", 7, 0x02282, 0x020D2}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_F6D[] = { {"Cup", 3, 0x022D3, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_F6E[] = { {"Lmidot", 6, 0x0013F, 0}, {"sup1", 4, 0x000B9, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_F6F[] = { {"Delta", 5, 0x00394, 0}, {"sbquo", 5, 0x0201A, 0}, {"sup2", 4, 0x000B2, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_F70[] = { {"cscr", 4, 0x1D4B8, 0}, {"nsubseteqq", 10, 0x02AC5, 0x00338}, {"sup3", 4, 0x000B3, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_F71[] = { {"Kcedil", 6, 0x00136, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_F72[] = { {"plussim", 7, 0x02A26, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_F74[] = { {"KHcy", 4, 0x00425, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_F75[] = { {"OElig", 5, 0x00152, 0}, {"simdot", 6, 0x02A6A, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_F76[] = { {"lopf", 4, 0x1D55D, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_F77[] = { {"boxbox", 6, 0x029C9, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_F78[] = { {"bepsi", 5, 0x003F6, 0}, {"lbarr", 5, 0x0290C, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_F79[] = { {"lnapprox", 8, 0x02A89, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_F81[] = { {"sdotb", 5, 0x022A1, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_F82[] = { {"measuredangle", 13, 0x02221, 0}, {"supE", 4, 0x02AC6, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_F83[] = { {"map", 3, 0x021A6, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_F84[] = { {"sdote", 5, 0x02A66, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_F86[] = { {"diamondsuit", 11, 0x02666, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_F88[] = { {"Kfr", 3, 0x1D50E, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_F8B[] = { {"imagline", 8, 0x02110, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_F8F[] = { {"delta", 5, 0x003B4, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_F91[] = { {"mapstodown", 10, 0x021A7, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_F93[] = { {"eqvparsl", 8, 0x029E5, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_F95[] = { {"UpArrow", 7, 0x02191, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_F9A[] = { {"imagpart", 8, 0x02111, 0}, {"lsim", 4, 0x02272, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_F9C[] = { {"trianglelefteq", 14, 0x022B4, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_F9F[] = { {"isindot", 7, 0x022F5, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_FA0[] = { {"LeftUpDownVector", 16, 0x02951, 0}, {"curvearrowleft", 14, 0x021B6, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_FA1[] = { {"Diamond", 7, 0x022C4, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_FA2[] = { {"supe", 4, 0x02287, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_FA3[] = { {"nearrow", 7, 0x02197, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_FA9[] = { {"easter", 6, 0x02A6E, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_FB0[] = { {"rdquo", 5, 0x0201D, 0}, {"subsetneqq", 10, 0x02ACB, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_FB1[] = { {"Dscr", 4, 0x1D49F, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_FB4[] = { {"comp", 4, 0x02201, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_FB5[] = { {"Uparrow", 7, 0x021D1, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_FB6[] = { {"coloneq", 7, 0x02254, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_FB7[] = { {"Mopf", 4, 0x1D544, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_FB9[] = { {"rfloor", 6, 0x0230B, 0}, {"varsubsetneqq", 13, 0x02ACB, 0x0FE00}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_FBC[] = { {"eacute", 6, 0x000E9, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_FC2[] = { {"shortparallel", 13, 0x02225, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_FC4[] = { {"male", 4, 0x02642, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_FC6[] = { {"yscr", 4, 0x1D4CE, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_FCA[] = { {"xharr", 5, 0x027F7, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_FCC[] = { {"cong", 4, 0x02245, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_FCE[] = { {"mcy", 3, 0x0043C, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_FCF[] = { {"Upsilon", 7, 0x003A5, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_FD0[] = { {"block", 5, 0x02588, 0}, {"maltese", 7, 0x02720, 0}, {"ordf", 4, 0x000AA, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_FD2[] = { {"zcaron", 6, 0x0017E, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_FD3[] = { {"malt", 4, 0x02720, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_FD6[] = { {"loang", 5, 0x027EC, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_FD7[] = { {"ordm", 4, 0x000BA, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_FDD[] = { {"NegativeVeryThinSpace", 21, 0x0200B, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_FDF[] = { {"eta", 3, 0x003B7, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_FE1[] = { {"Iogon", 5, 0x0012E, 0}, {"drbkarow", 8, 0x02910, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_FE6[] = { {"eth", 3, 0x000F0, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_FE9[] = { {"racute", 6, 0x00155, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_FEA[] = { {"cwconint", 8, 0x02232, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_FEB[] = { {"egsdot", 6, 0x02A98, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_FF5[] = { {"MinusPlus", 9, 0x02213, 0}, {"ring", 4, 0x002DA, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_FF8[] = { {"rcedil", 6, 0x00157, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_FFC[] = { {"timesbar", 8, 0x02A31, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html5_FFE[] = { {"GreaterEqualLess", 16, 0x022DB, 0}, {NULL, 0, 0, 0} };

static const entity_cp_map *const ht_buckets_html5[] = {
	ht_bucket_html5_000, ht_bucket_html5_001, ht_bucket_empty, ht_bucket_html5_003,
	ht_bucket_empty, ht_bucket_html5_005, ht_bucket_empty, ht_bucket_html5_007,
	ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
	ht_bucket_empty, ht_bucket_html5_00D, ht_bucket_empty, ht_bucket_html5_00F,
	ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
	ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_017,
	ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
	ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
	ht_bucket_html5_020, ht_bucket_empty, ht_bucket_html5_022, ht_bucket_empty,
	ht_bucket_html5_024, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_027,
	ht_bucket_html5_028, ht_bucket_html5_029, ht_bucket_html5_02A, ht_bucket_html5_02B,
	ht_bucket_html5_02C, ht_bucket_empty, ht_bucket_html5_02E, ht_bucket_empty,
	ht_bucket_html5_030, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
	ht_bucket_html5_034, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
	ht_bucket_html5_038, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
	ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
	ht_bucket_html5_040, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
	ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_047,
	ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
	ht_bucket_html5_04C, ht_bucket_empty, ht_bucket_html5_04E, ht_bucket_empty,
	ht_bucket_empty, ht_bucket_html5_051, ht_bucket_empty, ht_bucket_empty,
	ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
	ht_bucket_empty, ht_bucket_html5_059, ht_bucket_empty, ht_bucket_empty,
	ht_bucket_empty, ht_bucket_html5_05D, ht_bucket_empty, ht_bucket_html5_05F,
	ht_bucket_html5_060, ht_bucket_html5_061, ht_bucket_empty, ht_bucket_html5_063,
	ht_bucket_html5_064, ht_bucket_html5_065, ht_bucket_empty, ht_bucket_empty,
	ht_bucket_empty, ht_bucket_html5_069, ht_bucket_html5_06A, ht_bucket_empty,
	ht_bucket_empty, ht_bucket_html5_06D, ht_bucket_html5_06E, ht_bucket_html5_06F,
	ht_bucket_empty, ht_bucket_html5_071, ht_bucket_empty, ht_bucket_html5_073,
	ht_bucket_html5_074, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
	ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_07A, ht_bucket_html5_07B,
	ht_bucket_html5_07C, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_07F,
	ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_082, ht_bucket_empty,
	ht_bucket_html5_084, ht_bucket_html5_085, ht_bucket_html5_086, ht_bucket_empty,
	ht_bucket_html5_088, ht_bucket_html5_089, ht_bucket_empty, ht_bucket_empty,
	ht_bucket_html5_08C, ht_bucket_empty, ht_bucket_html5_08E, ht_bucket_empty,
	ht_bucket_html5_090, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
	ht_bucket_html5_094, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_097,
	ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
	ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_09E, ht_bucket_empty,
	ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
	ht_bucket_html5_0A4, ht_bucket_empty, ht_bucket_html5_0A6, ht_bucket_empty,
	ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_0AB,
	ht_bucket_html5_0AC, ht_bucket_html5_0AD, ht_bucket_html5_0AE, ht_bucket_html5_0AF,
	ht_bucket_html5_0B0, ht_bucket_empty, ht_bucket_html5_0B2, ht_bucket_empty,
	ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
	ht_bucket_html5_0B8, ht_bucket_html5_0B9, ht_bucket_html5_0BA, ht_bucket_empty,
	ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
	ht_bucket_html5_0C0, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
	ht_bucket_html5_0C4, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
	ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
	ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_0CE, ht_bucket_empty,
	ht_bucket_empty, ht_bucket_html5_0D1, ht_bucket_html5_0D2, ht_bucket_html5_0D3,
	ht_bucket_empty, ht_bucket_html5_0D5, ht_bucket_empty, ht_bucket_empty,
	ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
	ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_0DF,
	ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
	ht_bucket_empty, ht_bucket_html5_0E5, ht_bucket_html5_0E6, ht_bucket_empty,
	ht_bucket_html5_0E8, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
	ht_bucket_html5_0EC, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_0EF,
	ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_0F3,
	ht_bucket_html5_0F4, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
	ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_0FA, ht_bucket_html5_0FB,
	ht_bucket_empty, ht_bucket_html5_0FD, ht_bucket_html5_0FE, ht_bucket_empty,
	ht_bucket_html5_100, ht_bucket_html5_101, ht_bucket_empty, ht_bucket_html5_103,
	ht_bucket_empty, ht_bucket_html5_105, ht_bucket_html5_106, ht_bucket_empty,
	ht_bucket_empty, ht_bucket_html5_109, ht_bucket_html5_10A, ht_bucket_html5_10B,
	ht_bucket_empty, ht_bucket_html5_10D, ht_bucket_html5_10E, ht_bucket_html5_10F,
	ht_bucket_html5_110, ht_bucket_html5_111, ht_bucket_empty, ht_bucket_html5_113,
	ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_116, ht_bucket_empty,
	ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_11B,
	ht_bucket_html5_11C, ht_bucket_empty, ht_bucket_html5_11E, ht_bucket_empty,
	ht_bucket_empty, ht_bucket_html5_121, ht_bucket_empty, ht_bucket_empty,
	ht_bucket_html5_124, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
	ht_bucket_empty, ht_bucket_html5_129, ht_bucket_html5_12A, ht_bucket_empty,
	ht_bucket_html5_12C, ht_bucket_empty, ht_bucket_html5_12E, ht_bucket_html5_12F,
	ht_bucket_html5_130, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
	ht_bucket_html5_134, ht_bucket_html5_135, ht_bucket_empty, ht_bucket_html5_137,
	ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_13A, ht_bucket_html5_13B,
	ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
	ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
	ht_bucket_empty, ht_bucket_html5_145, ht_bucket_empty, ht_bucket_html5_147,
	ht_bucket_empty, ht_bucket_html5_149, ht_bucket_empty, ht_bucket_html5_14B,
	ht_bucket_html5_14C, ht_bucket_empty, ht_bucket_html5_14E, ht_bucket_html5_14F,
	ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
	ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
	ht_bucket_html5_158, ht_bucket_html5_159, ht_bucket_empty, ht_bucket_html5_15B,
	ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_15E, ht_bucket_html5_15F,
	ht_bucket_empty, ht_bucket_html5_161, ht_bucket_empty, ht_bucket_empty,
	ht_bucket_html5_164, ht_bucket_html5_165, ht_bucket_empty, ht_bucket_empty,
	ht_bucket_html5_168, ht_bucket_empty, ht_bucket_html5_16A, ht_bucket_empty,
	ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
	ht_bucket_html5_170, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_173,
	ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
	ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_17A, ht_bucket_html5_17B,
	ht_bucket_html5_17C, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_17F,
	ht_bucket_empty, ht_bucket_html5_181, ht_bucket_empty, ht_bucket_empty,
	ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
	ht_bucket_empty, ht_bucket_html5_189, ht_bucket_empty, ht_bucket_html5_18B,
	ht_bucket_html5_18C, ht_bucket_empty, ht_bucket_html5_18E, ht_bucket_html5_18F,
	ht_bucket_html5_190, ht_bucket_html5_191, ht_bucket_empty, ht_bucket_html5_193,
	ht_bucket_empty, ht_bucket_html5_195, ht_bucket_empty, ht_bucket_empty,
	ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_19A, ht_bucket_empty,
	ht_bucket_html5_19C, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_19F,
	ht_bucket_html5_1A0, ht_bucket_html5_1A1, ht_bucket_html5_1A2, ht_bucket_html5_1A3,
	ht_bucket_html5_1A4, ht_bucket_html5_1A5, ht_bucket_empty, ht_bucket_empty,
	ht_bucket_html5_1A8, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_1AB,
	ht_bucket_html5_1AC, ht_bucket_html5_1AD, ht_bucket_html5_1AE, ht_bucket_html5_1AF,
	ht_bucket_html5_1B0, ht_bucket_empty, ht_bucket_html5_1B2, ht_bucket_empty,
	ht_bucket_empty, ht_bucket_html5_1B5, ht_bucket_empty, ht_bucket_empty,
	ht_bucket_empty, ht_bucket_html5_1B9, ht_bucket_empty, ht_bucket_empty,
	ht_bucket_empty, ht_bucket_html5_1BD, ht_bucket_html5_1BE, ht_bucket_empty,
	ht_bucket_html5_1C0, ht_bucket_html5_1C1, ht_bucket_empty, ht_bucket_empty,
	ht_bucket_html5_1C4, ht_bucket_empty, ht_bucket_html5_1C6, ht_bucket_empty,
	ht_bucket_empty, ht_bucket_html5_1C9, ht_bucket_html5_1CA, ht_bucket_empty,
	ht_bucket_empty, ht_bucket_html5_1CD, ht_bucket_html5_1CE, ht_bucket_empty,
	ht_bucket_html5_1D0, ht_bucket_html5_1D1, ht_bucket_html5_1D2, ht_bucket_empty,
	ht_bucket_html5_1D4, ht_bucket_html5_1D5, ht_bucket_html5_1D6, ht_bucket_empty,
	ht_bucket_html5_1D8, ht_bucket_html5_1D9, ht_bucket_html5_1DA, ht_bucket_empty,
	ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_1DF,
	ht_bucket_html5_1E0, ht_bucket_html5_1E1, ht_bucket_empty, ht_bucket_empty,
	ht_bucket_empty, ht_bucket_html5_1E5, ht_bucket_html5_1E6, ht_bucket_html5_1E7,
	ht_bucket_html5_1E8, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_1EB,
	ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_1EF,
	ht_bucket_html5_1F0, ht_bucket_empty, ht_bucket_html5_1F2, ht_bucket_empty,
	ht_bucket_html5_1F4, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
	ht_bucket_html5_1F8, ht_bucket_html5_1F9, ht_bucket_html5_1FA, ht_bucket_empty,
	ht_bucket_html5_1FC, ht_bucket_empty, ht_bucket_html5_1FE, ht_bucket_html5_1FF,
	ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
	ht_bucket_empty, ht_bucket_html5_205, ht_bucket_empty, ht_bucket_html5_207,
	ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
	ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_20E, ht_bucket_empty,
	ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_212, ht_bucket_html5_213,
	ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
	ht_bucket_empty, ht_bucket_html5_219, ht_bucket_empty, ht_bucket_empty,
	ht_bucket_empty, ht_bucket_html5_21D, ht_bucket_empty, ht_bucket_empty,
	ht_bucket_html5_220, ht_bucket_empty, ht_bucket_html5_222, ht_bucket_empty,
	ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_227,
	ht_bucket_empty, ht_bucket_html5_229, ht_bucket_empty, ht_bucket_html5_22B,
	ht_bucket_html5_22C, ht_bucket_html5_22D, ht_bucket_empty, ht_bucket_html5_22F,
	ht_bucket_html5_230, ht_bucket_empty, ht_bucket_html5_232, ht_bucket_empty,
	ht_bucket_html5_234, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
	ht_bucket_empty, ht_bucket_html5_239, ht_bucket_empty, ht_bucket_empty,
	ht_bucket_html5_23C, ht_bucket_html5_23D, ht_bucket_html5_23E, ht_bucket_empty,
	ht_bucket_html5_240, ht_bucket_html5_241, ht_bucket_html5_242, ht_bucket_empty,
	ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_246, ht_bucket_empty,
	ht_bucket_empty, ht_bucket_html5_249, ht_bucket_html5_24A, ht_bucket_html5_24B,
	ht_bucket_empty, ht_bucket_html5_24D, ht_bucket_empty, ht_bucket_empty,
	ht_bucket_empty, ht_bucket_html5_251, ht_bucket_html5_252, ht_bucket_empty,
	ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_257,
	ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_25A, ht_bucket_html5_25B,
	ht_bucket_html5_25C, ht_bucket_html5_25D, ht_bucket_empty, ht_bucket_empty,
	ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_263,
	ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
	ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_26A, ht_bucket_html5_26B,
	ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_26E, ht_bucket_empty,
	ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
	ht_bucket_html5_274, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_277,
	ht_bucket_html5_278, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
	ht_bucket_html5_27C, ht_bucket_empty, ht_bucket_html5_27E, ht_bucket_empty,
	ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_283,
	ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
	ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_28A, ht_bucket_empty,
	ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
	ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
	ht_bucket_html5_294, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_297,
	ht_bucket_html5_298, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
	ht_bucket_empty, ht_bucket_html5_29D, ht_bucket_empty, ht_bucket_html5_29F,
	ht_bucket_html5_2A0, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
	ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
	ht_bucket_empty, ht_bucket_html5_2A9, ht_bucket_empty, ht_bucket_empty,
	ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_2AE, ht_bucket_empty,
	ht_bucket_empty, ht_bucket_html5_2B1, ht_bucket_html5_2B2, ht_bucket_html5_2B3,
	ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
	ht_bucket_empty, ht_bucket_html5_2B9, ht_bucket_empty, ht_bucket_empty,
	ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_2BF,
	ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
	ht_bucket_html5_2C4, ht_bucket_html5_2C5, ht_bucket_empty, ht_bucket_empty,
	ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
	ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_2CE, ht_bucket_html5_2CF,
	ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_2D3,
	ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
	ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_2DA, ht_bucket_html5_2DB,
	ht_bucket_html5_2DC, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
	ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_2E3,
	ht_bucket_html5_2E4, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
	ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_2EB,
	ht_bucket_html5_2EC, ht_bucket_empty, ht_bucket_html5_2EE, ht_bucket_empty,
	ht_bucket_html5_2F0, ht_bucket_empty, ht_bucket_html5_2F2, ht_bucket_empty,
	ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
	ht_bucket_html5_2F8, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
	ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
	ht_bucket_html5_300, ht_bucket_html5_301, ht_bucket_empty, ht_bucket_empty,
	ht_bucket_html5_304, ht_bucket_html5_305, ht_bucket_empty, ht_bucket_empty,
	ht_bucket_html5_308, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_30B,
	ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_30F,
	ht_bucket_empty, ht_bucket_html5_311, ht_bucket_empty, ht_bucket_html5_313,
	ht_bucket_empty, ht_bucket_html5_315, ht_bucket_empty, ht_bucket_empty,
	ht_bucket_empty, ht_bucket_html5_319, ht_bucket_html5_31A, ht_bucket_html5_31B,
	ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
	ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
	ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_326, ht_bucket_empty,
	ht_bucket_empty, ht_bucket_html5_329, ht_bucket_html5_32A, ht_bucket_empty,
	ht_bucket_empty, ht_bucket_html5_32D, ht_bucket_empty, ht_bucket_empty,
	ht_bucket_html5_330, ht_bucket_html5_331, ht_bucket_empty, ht_bucket_empty,
	ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_336, ht_bucket_empty,
	ht_bucket_html5_338, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_33B,
	ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_33F,
	ht_bucket_html5_340, ht_bucket_html5_341, ht_bucket_empty, ht_bucket_empty,
	ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_347,
	ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
	ht_bucket_empty, ht_bucket_html5_34D, ht_bucket_empty, ht_bucket_empty,
	ht_bucket_html5_350, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
	ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_356, ht_bucket_empty,
	ht_bucket_html5_358, ht_bucket_html5_359, ht_bucket_empty, ht_bucket_empty,
	ht_bucket_empty, ht_bucket_html5_35D, ht_bucket_empty, ht_bucket_html5_35F,
	ht_bucket_empty, ht_bucket_html5_361, ht_bucket_empty, ht_bucket_html5_363,
	ht_bucket_empty, ht_bucket_html5_365, ht_bucket_empty, ht_bucket_html5_367,
	ht_bucket_empty, ht_bucket_html5_369, ht_bucket_html5_36A, ht_bucket_html5_36B,
	ht_bucket_empty, ht_bucket_html5_36D, ht_bucket_html5_36E, ht_bucket_html5_36F,
	ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_372, ht_bucket_empty,
	ht_bucket_html5_374, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
	ht_bucket_html5_378, ht_bucket_empty, ht_bucket_html5_37A, ht_bucket_empty,
	ht_bucket_html5_37C, ht_bucket_html5_37D, ht_bucket_html5_37E, ht_bucket_html5_37F,
	ht_bucket_html5_380, ht_bucket_empty, ht_bucket_html5_382, ht_bucket_html5_383,
	ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_386, ht_bucket_html5_387,
	ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_38A, ht_bucket_empty,
	ht_bucket_empty, ht_bucket_html5_38D, ht_bucket_html5_38E, ht_bucket_empty,
	ht_bucket_empty, ht_bucket_html5_391, ht_bucket_empty, ht_bucket_empty,
	ht_bucket_html5_394, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_397,
	ht_bucket_html5_398, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
	ht_bucket_html5_39C, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_39F,
	ht_bucket_html5_3A0, ht_bucket_html5_3A1, ht_bucket_empty, ht_bucket_empty,
	ht_bucket_html5_3A4, ht_bucket_html5_3A5, ht_bucket_html5_3A6, ht_bucket_html5_3A7,
	ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
	ht_bucket_html5_3AC, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
	ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_3B2, ht_bucket_empty,
	ht_bucket_html5_3B4, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
	ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
	ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_3BF,
	ht_bucket_html5_3C0, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
	ht_bucket_html5_3C4, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
	ht_bucket_empty, ht_bucket_html5_3C9, ht_bucket_empty, ht_bucket_empty,
	ht_bucket_empty, ht_bucket_html5_3CD, ht_bucket_empty, ht_bucket_empty,
	ht_bucket_html5_3D0, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_3D3,
	ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
	ht_bucket_empty, ht_bucket_html5_3D9, ht_bucket_empty, ht_bucket_empty,
	ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_3DE, ht_bucket_empty,
	ht_bucket_html5_3E0, ht_bucket_html5_3E1, ht_bucket_empty, ht_bucket_html5_3E3,
	ht_bucket_html5_3E4, ht_bucket_empty, ht_bucket_html5_3E6, ht_bucket_empty,
	ht_bucket_empty, ht_bucket_html5_3E9, ht_bucket_empty, ht_bucket_empty,
	ht_bucket_empty, ht_bucket_html5_3ED, ht_bucket_empty, ht_bucket_empty,
	ht_bucket_empty, ht_bucket_html5_3F1, ht_bucket_html5_3F2, ht_bucket_empty,
	ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_3F7,
	ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
	ht_bucket_html5_3FC, ht_bucket_empty, ht_bucket_html5_3FE, ht_bucket_empty,
	ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_402, ht_bucket_empty,
	ht_bucket_empty, ht_bucket_html5_405, ht_bucket_empty, ht_bucket_html5_407,
	ht_bucket_empty, ht_bucket_html5_409, ht_bucket_empty, ht_bucket_empty,
	ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_40E, ht_bucket_html5_40F,
	ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_413,
	ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
	ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_41A, ht_bucket_html5_41B,
	ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
	ht_bucket_empty, ht_bucket_html5_421, ht_bucket_empty, ht_bucket_html5_423,
	ht_bucket_html5_424, ht_bucket_html5_425, ht_bucket_html5_426, ht_bucket_empty,
	ht_bucket_empty, ht_bucket_html5_429, ht_bucket_empty, ht_bucket_empty,
	ht_bucket_html5_42C, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_42F,
	ht_bucket_html5_430, ht_bucket_empty, ht_bucket_html5_432, ht_bucket_empty,
	ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_436, ht_bucket_empty,
	ht_bucket_empty, ht_bucket_html5_439, ht_bucket_empty, ht_bucket_empty,
	ht_bucket_html5_43C, ht_bucket_html5_43D, ht_bucket_html5_43E, ht_bucket_html5_43F,
	ht_bucket_html5_440, ht_bucket_html5_441, ht_bucket_empty, ht_bucket_html5_443,
	ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_446, ht_bucket_html5_447,
	ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_44A, ht_bucket_empty,
	ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_44F,
	ht_bucket_html5_450, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
	ht_bucket_html5_454, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_457,
	ht_bucket_html5_458, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
	ht_bucket_empty, ht_bucket_html5_45D, ht_bucket_empty, ht_bucket_html5_45F,
	ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
	ht_bucket_empty, ht_bucket_html5_465, ht_bucket_html5_466, ht_bucket_empty,
	ht_bucket_empty, ht_bucket_html5_469, ht_bucket_html5_46A, ht_bucket_html5_46B,
	ht_bucket_empty, ht_bucket_html5_46D, ht_bucket_empty, ht_bucket_html5_46F,
	ht_bucket_html5_470, ht_bucket_html5_471, ht_bucket_html5_472, ht_bucket_html5_473,
	ht_bucket_empty, ht_bucket_html5_475, ht_bucket_empty, ht_bucket_empty,
	ht_bucket_empty, ht_bucket_html5_479, ht_bucket_empty, ht_bucket_empty,
	ht_bucket_html5_47C, ht_bucket_html5_47D, ht_bucket_empty, ht_bucket_html5_47F,
	ht_bucket_html5_480, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
	ht_bucket_empty, ht_bucket_html5_485, ht_bucket_empty, ht_bucket_empty,
	ht_bucket_html5_488, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
	ht_bucket_html5_48C, ht_bucket_empty, ht_bucket_html5_48E, ht_bucket_html5_48F,
	ht_bucket_html5_490, ht_bucket_html5_491, ht_bucket_empty, ht_bucket_html5_493,
	ht_bucket_empty, ht_bucket_html5_495, ht_bucket_html5_496, ht_bucket_empty,
	ht_bucket_html5_498, ht_bucket_html5_499, ht_bucket_empty, ht_bucket_empty,
	ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_49F,
	ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_4A2, ht_bucket_empty,
	ht_bucket_html5_4A4, ht_bucket_empty, ht_bucket_html5_4A6, ht_bucket_html5_4A7,
	ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_4AA, ht_bucket_html5_4AB,
	ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_4AE, ht_bucket_html5_4AF,
	ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_4B2, ht_bucket_empty,
	ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_4B6, ht_bucket_empty,
	ht_bucket_html5_4B8, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
	ht_bucket_html5_4BC, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
	ht_bucket_html5_4C0, ht_bucket_empty, ht_bucket_html5_4C2, ht_bucket_html5_4C3,
	ht_bucket_html5_4C4, ht_bucket_html5_4C5, ht_bucket_empty, ht_bucket_empty,
	ht_bucket_html5_4C8, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_4CB,
	ht_bucket_empty, ht_bucket_html5_4CD, ht_bucket_empty, ht_bucket_html5_4CF,
	ht_bucket_html5_4D0, ht_bucket_empty, ht_bucket_html5_4D2, ht_bucket_html5_4D3,
	ht_bucket_html5_4D4, ht_bucket_html5_4D5, ht_bucket_empty, ht_bucket_empty,
	ht_bucket_html5_4D8, ht_bucket_empty, ht_bucket_html5_4DA, ht_bucket_empty,
	ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_4DE, ht_bucket_html5_4DF,
	ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_4E3,
	ht_bucket_html5_4E4, ht_bucket_empty, ht_bucket_html5_4E6, ht_bucket_html5_4E7,
	ht_bucket_html5_4E8, ht_bucket_html5_4E9, ht_bucket_empty, ht_bucket_empty,
	ht_bucket_empty, ht_bucket_html5_4ED, ht_bucket_empty, ht_bucket_empty,
	ht_bucket_empty, ht_bucket_html5_4F1, ht_bucket_empty, ht_bucket_empty,
	ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_4F7,
	ht_bucket_empty, ht_bucket_html5_4F9, ht_bucket_empty, ht_bucket_html5_4FB,
	ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_4FE, ht_bucket_empty,
	ht_bucket_html5_500, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
	ht_bucket_html5_504, ht_bucket_empty, ht_bucket_html5_506, ht_bucket_html5_507,
	ht_bucket_empty, ht_bucket_html5_509, ht_bucket_empty, ht_bucket_empty,
	ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_50E, ht_bucket_html5_50F,
	ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_513,
	ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_516, ht_bucket_empty,
	ht_bucket_html5_518, ht_bucket_html5_519, ht_bucket_empty, ht_bucket_html5_51B,
	ht_bucket_html5_51C, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
	ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
	ht_bucket_html5_524, ht_bucket_html5_525, ht_bucket_html5_526, ht_bucket_empty,
	ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
	ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_52F,
	ht_bucket_html5_530, ht_bucket_empty, ht_bucket_html5_532, ht_bucket_html5_533,
	ht_bucket_html5_534, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
	ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_53B,
	ht_bucket_html5_53C, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_53F,
	ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_542, ht_bucket_html5_543,
	ht_bucket_empty, ht_bucket_html5_545, ht_bucket_empty, ht_bucket_empty,
	ht_bucket_html5_548, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
	ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_54F,
	ht_bucket_html5_550, ht_bucket_html5_551, ht_bucket_empty, ht_bucket_empty,
	ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_557,
	ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_55B,
	ht_bucket_empty, ht_bucket_html5_55D, ht_bucket_empty, ht_bucket_html5_55F,
	ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
	ht_bucket_html5_564, ht_bucket_html5_565, ht_bucket_html5_566, ht_bucket_empty,
	ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
	ht_bucket_html5_56C, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_56F,
	ht_bucket_html5_570, ht_bucket_html5_571, ht_bucket_html5_572, ht_bucket_empty,
	ht_bucket_empty, ht_bucket_html5_575, ht_bucket_html5_576, ht_bucket_html5_577,
	ht_bucket_html5_578, ht_bucket_empty, ht_bucket_html5_57A, ht_bucket_html5_57B,
	ht_bucket_html5_57C, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
	ht_bucket_html5_580, ht_bucket_empty, ht_bucket_html5_582, ht_bucket_html5_583,
	ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_586, ht_bucket_empty,
	ht_bucket_html5_588, ht_bucket_html5_589, ht_bucket_empty, ht_bucket_empty,
	ht_bucket_empty, ht_bucket_html5_58D, ht_bucket_html5_58E, ht_bucket_html5_58F,
	ht_bucket_html5_590, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
	ht_bucket_empty, ht_bucket_html5_595, ht_bucket_html5_596, ht_bucket_empty,
	ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_59A, ht_bucket_empty,
	ht_bucket_empty, ht_bucket_html5_59D, ht_bucket_empty, ht_bucket_html5_59F,
	ht_bucket_html5_5A0, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_5A3,
	ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_5A6, ht_bucket_empty,
	ht_bucket_empty, ht_bucket_html5_5A9, ht_bucket_empty, ht_bucket_empty,
	ht_bucket_html5_5AC, ht_bucket_html5_5AD, ht_bucket_html5_5AE, ht_bucket_empty,
	ht_bucket_html5_5B0, ht_bucket_html5_5B1, ht_bucket_empty, ht_bucket_empty,
	ht_bucket_empty, ht_bucket_html5_5B5, ht_bucket_html5_5B6, ht_bucket_html5_5B7,
	ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_5BB,
	ht_bucket_html5_5BC, ht_bucket_html5_5BD, ht_bucket_empty, ht_bucket_html5_5BF,
	ht_bucket_html5_5C0, ht_bucket_html5_5C1, ht_bucket_html5_5C2, ht_bucket_empty,
	ht_bucket_html5_5C4, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
	ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
	ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
	ht_bucket_html5_5D0, ht_bucket_html5_5D1, ht_bucket_empty, ht_bucket_html5_5D3,
	ht_bucket_empty, ht_bucket_html5_5D5, ht_bucket_empty, ht_bucket_empty,
	ht_bucket_html5_5D8, ht_bucket_html5_5D9, ht_bucket_empty, ht_bucket_html5_5DB,
	ht_bucket_empty, ht_bucket_html5_5DD, ht_bucket_empty, ht_bucket_html5_5DF,
	ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_5E2, ht_bucket_empty,
	ht_bucket_html5_5E4, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_5E7,
	ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_5EA, ht_bucket_empty,
	ht_bucket_empty, ht_bucket_html5_5ED, ht_bucket_empty, ht_bucket_empty,
	ht_bucket_html5_5F0, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_5F3,
	ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_5F6, ht_bucket_empty,
	ht_bucket_html5_5F8, ht_bucket_empty, ht_bucket_html5_5FA, ht_bucket_empty,
	ht_bucket_empty, ht_bucket_html5_5FD, ht_bucket_empty, ht_bucket_empty,
	ht_bucket_empty, ht_bucket_html5_601, ht_bucket_html5_602, ht_bucket_html5_603,
	ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_606, ht_bucket_empty,
	ht_bucket_empty, ht_bucket_html5_609, ht_bucket_empty, ht_bucket_empty,
	ht_bucket_empty, ht_bucket_html5_60D, ht_bucket_empty, ht_bucket_empty,
	ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_613,
	ht_bucket_empty, ht_bucket_html5_615, ht_bucket_empty, ht_bucket_html5_617,
	ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_61A, ht_bucket_empty,
	ht_bucket_empty, ht_bucket_html5_61D, ht_bucket_empty, ht_bucket_html5_61F,
	ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_622, ht_bucket_empty,
	ht_bucket_html5_624, ht_bucket_empty, ht_bucket_html5_626, ht_bucket_empty,
	ht_bucket_html5_628, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
	ht_bucket_html5_62C, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
	ht_bucket_html5_630, ht_bucket_empty, ht_bucket_html5_632, ht_bucket_empty,
	ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_636, ht_bucket_empty,
	ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_63A, ht_bucket_empty,
	ht_bucket_html5_63C, ht_bucket_html5_63D, ht_bucket_html5_63E, ht_bucket_empty,
	ht_bucket_empty, ht_bucket_html5_641, ht_bucket_html5_642, ht_bucket_empty,
	ht_bucket_empty, ht_bucket_html5_645, ht_bucket_html5_646, ht_bucket_html5_647,
	ht_bucket_html5_648, ht_bucket_html5_649, ht_bucket_html5_64A, ht_bucket_empty,
	ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
	ht_bucket_empty, ht_bucket_html5_651, ht_bucket_html5_652, ht_bucket_html5_653,
	ht_bucket_empty, ht_bucket_html5_655, ht_bucket_empty, ht_bucket_html5_657,
	ht_bucket_html5_658, ht_bucket_html5_659, ht_bucket_empty, ht_bucket_empty,
	ht_bucket_html5_65C, ht_bucket_empty, ht_bucket_html5_65E, ht_bucket_empty,
	ht_bucket_html5_660, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
	ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
	ht_bucket_empty, ht_bucket_html5_669, ht_bucket_empty, ht_bucket_empty,
	ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
	ht_bucket_html5_670, ht_bucket_html5_671, ht_bucket_html5_672, ht_bucket_html5_673,
	ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_676, ht_bucket_empty,
	ht_bucket_html5_678, ht_bucket_html5_679, ht_bucket_empty, ht_bucket_empty,
	ht_bucket_empty, ht_bucket_html5_67D, ht_bucket_empty, ht_bucket_empty,
	ht_bucket_html5_680, ht_bucket_empty, ht_bucket_html5_682, ht_bucket_empty,
	ht_bucket_html5_684, ht_bucket_html5_685, ht_bucket_empty, ht_bucket_empty,
	ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_68A, ht_bucket_empty,
	ht_bucket_html5_68C, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
	ht_bucket_empty, ht_bucket_html5_691, ht_bucket_empty, ht_bucket_html5_693,
	ht_bucket_html5_694, ht_bucket_empty, ht_bucket_html5_696, ht_bucket_empty,
	ht_bucket_empty, ht_bucket_html5_699, ht_bucket_empty, ht_bucket_empty,
	ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
	ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_6A3,
	ht_bucket_html5_6A4, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
	ht_bucket_html5_6A8, ht_bucket_html5_6A9, ht_bucket_html5_6AA, ht_bucket_html5_6AB,
	ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_6AE, ht_bucket_empty,
	ht_bucket_html5_6B0, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
	ht_bucket_html5_6B4, ht_bucket_empty, ht_bucket_html5_6B6, ht_bucket_empty,
	ht_bucket_html5_6B8, ht_bucket_html5_6B9, ht_bucket_html5_6BA, ht_bucket_empty,
	ht_bucket_html5_6BC, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_6BF,
	ht_bucket_html5_6C0, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
	ht_bucket_html5_6C4, ht_bucket_html5_6C5, ht_bucket_html5_6C6, ht_bucket_html5_6C7,
	ht_bucket_html5_6C8, ht_bucket_html5_6C9, ht_bucket_empty, ht_bucket_empty,
	ht_bucket_html5_6CC, ht_bucket_empty, ht_bucket_html5_6CE, ht_bucket_empty,
	ht_bucket_empty, ht_bucket_html5_6D1, ht_bucket_html5_6D2, ht_bucket_empty,
	ht_bucket_html5_6D4, ht_bucket_html5_6D5, ht_bucket_empty, ht_bucket_empty,
	ht_bucket_empty, ht_bucket_html5_6D9, ht_bucket_html5_6DA, ht_bucket_html5_6DB,
	ht_bucket_html5_6DC, ht_bucket_empty, ht_bucket_html5_6DE, ht_bucket_empty,
	ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
	ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_6E7,
	ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_6EB,
	ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_6EE, ht_bucket_html5_6EF,
	ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
	ht_bucket_empty, ht_bucket_html5_6F5, ht_bucket_empty, ht_bucket_html5_6F7,
	ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_6FB,
	ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
	ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
	ht_bucket_html5_704, ht_bucket_html5_705, ht_bucket_html5_706, ht_bucket_html5_707,
	ht_bucket_empty, ht_bucket_html5_709, ht_bucket_empty, ht_bucket_empty,
	ht_bucket_html5_70C, ht_bucket_empty, ht_bucket_html5_70E, ht_bucket_html5_70F,
	ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_712, ht_bucket_empty,
	ht_bucket_html5_714, ht_bucket_html5_715, ht_bucket_empty, ht_bucket_html5_717,
	ht_bucket_empty, ht_bucket_html5_719, ht_bucket_empty, ht_bucket_html5_71B,
	ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_71E, ht_bucket_html5_71F,
	ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_723,
	ht_bucket_html5_724, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_727,
	ht_bucket_empty, ht_bucket_html5_729, ht_bucket_empty, ht_bucket_empty,
	ht_bucket_html5_72C, ht_bucket_html5_72D, ht_bucket_html5_72E, ht_bucket_empty,
	ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_733,
	ht_bucket_html5_734, ht_bucket_html5_735, ht_bucket_html5_736, ht_bucket_empty,
	ht_bucket_html5_738, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_73B,
	ht_bucket_empty, ht_bucket_html5_73D, ht_bucket_html5_73E, ht_bucket_html5_73F,
	ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
	ht_bucket_html5_744, ht_bucket_html5_745, ht_bucket_empty, ht_bucket_empty,
	ht_bucket_empty, ht_bucket_html5_749, ht_bucket_empty, ht_bucket_html5_74B,
	ht_bucket_html5_74C, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_74F,
	ht_bucket_empty, ht_bucket_html5_751, ht_bucket_empty, ht_bucket_empty,
	ht_bucket_html5_754, ht_bucket_html5_755, ht_bucket_empty, ht_bucket_empty,
	ht_bucket_empty, ht_bucket_html5_759, ht_bucket_empty, ht_bucket_empty,
	ht_bucket_html5_75C, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_75F,
	ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_762, ht_bucket_html5_763,
	ht_bucket_empty, ht_bucket_html5_765, ht_bucket_html5_766, ht_bucket_empty,
	ht_bucket_html5_768, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
	ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_76E, ht_bucket_empty,
	ht_bucket_html5_770, ht_bucket_empty, ht_bucket_html5_772, ht_bucket_empty,
	ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_776, ht_bucket_html5_777,
	ht_bucket_empty, ht_bucket_html5_779, ht_bucket_html5_77A, ht_bucket_empty,
	ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_77F,
	ht_bucket_empty, ht_bucket_html5_781, ht_bucket_empty, ht_bucket_html5_783,
	ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_787,
	ht_bucket_empty, ht_bucket_html5_789, ht_bucket_empty, ht_bucket_empty,
	ht_bucket_html5_78C, ht_bucket_html5_78D, ht_bucket_html5_78E, ht_bucket_empty,
	ht_bucket_html5_790, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
	ht_bucket_html5_794, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_797,
	ht_bucket_html5_798, ht_bucket_empty, ht_bucket_html5_79A, ht_bucket_html5_79B,
	ht_bucket_empty, ht_bucket_html5_79D, ht_bucket_empty, ht_bucket_html5_79F,
	ht_bucket_html5_7A0, ht_bucket_html5_7A1, ht_bucket_html5_7A2, ht_bucket_empty,
	ht_bucket_empty, ht_bucket_html5_7A5, ht_bucket_empty, ht_bucket_empty,
	ht_bucket_html5_7A8, ht_bucket_empty, ht_bucket_html5_7AA, ht_bucket_html5_7AB,
	ht_bucket_html5_7AC, ht_bucket_empty, ht_bucket_html5_7AE, ht_bucket_html5_7AF,
	ht_bucket_html5_7B0, ht_bucket_html5_7B1, ht_bucket_empty, ht_bucket_empty,
	ht_bucket_empty, ht_bucket_html5_7B5, ht_bucket_html5_7B6, ht_bucket_html5_7B7,
	ht_bucket_html5_7B8, ht_bucket_empty, ht_bucket_html5_7BA, ht_bucket_html5_7BB,
	ht_bucket_empty, ht_bucket_html5_7BD, ht_bucket_html5_7BE, ht_bucket_html5_7BF,
	ht_bucket_html5_7C0, ht_bucket_html5_7C1, ht_bucket_empty, ht_bucket_empty,
	ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
	ht_bucket_empty, ht_bucket_html5_7C9, ht_bucket_empty, ht_bucket_html5_7CB,
	ht_bucket_empty, ht_bucket_html5_7CD, ht_bucket_html5_7CE, ht_bucket_empty,
	ht_bucket_empty, ht_bucket_html5_7D1, ht_bucket_html5_7D2, ht_bucket_empty,
	ht_bucket_empty, ht_bucket_html5_7D5, ht_bucket_html5_7D6, ht_bucket_empty,
	ht_bucket_empty, ht_bucket_html5_7D9, ht_bucket_html5_7DA, ht_bucket_empty,
	ht_bucket_html5_7DC, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
	ht_bucket_html5_7E0, ht_bucket_empty, ht_bucket_html5_7E2, ht_bucket_empty,
	ht_bucket_html5_7E4, ht_bucket_html5_7E5, ht_bucket_html5_7E6, ht_bucket_empty,
	ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
	ht_bucket_html5_7EC, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_7EF,
	ht_bucket_empty, ht_bucket_html5_7F1, ht_bucket_empty, ht_bucket_html5_7F3,
	ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_7F6, ht_bucket_empty,
	ht_bucket_html5_7F8, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_7FB,
	ht_bucket_html5_7FC, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
	ht_bucket_html5_800, ht_bucket_empty, ht_bucket_html5_802, ht_bucket_html5_803,
	ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
	ht_bucket_html5_808, ht_bucket_html5_809, ht_bucket_html5_80A, ht_bucket_empty,
	ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
	ht_bucket_html5_810, ht_bucket_html5_811, ht_bucket_html5_812, ht_bucket_empty,
	ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_816, ht_bucket_empty,
	ht_bucket_empty, ht_bucket_html5_819, ht_bucket_empty, ht_bucket_empty,
	ht_bucket_html5_81C, ht_bucket_html5_81D, ht_bucket_empty, ht_bucket_empty,
	ht_bucket_empty, ht_bucket_html5_821, ht_bucket_html5_822, ht_bucket_html5_823,
	ht_bucket_html5_824, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
	ht_bucket_html5_828, ht_bucket_html5_829, ht_bucket_empty, ht_bucket_empty,
	ht_bucket_empty, ht_bucket_html5_82D, ht_bucket_html5_82E, ht_bucket_empty,
	ht_bucket_html5_830, ht_bucket_html5_831, ht_bucket_html5_832, ht_bucket_empty,
	ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_837,
	ht_bucket_html5_838, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
	ht_bucket_html5_83C, ht_bucket_empty, ht_bucket_html5_83E, ht_bucket_html5_83F,
	ht_bucket_empty, ht_bucket_html5_841, ht_bucket_html5_842, ht_bucket_empty,
	ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_846, ht_bucket_empty,
	ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_84A, ht_bucket_empty,
	ht_bucket_html5_84C, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_84F,
	ht_bucket_html5_850, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
	ht_bucket_empty, ht_bucket_html5_855, ht_bucket_empty, ht_bucket_html5_857,
	ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_85B,
	ht_bucket_html5_85C, ht_bucket_empty, ht_bucket_html5_85E, ht_bucket_empty,
	ht_bucket_empty, ht_bucket_html5_861, ht_bucket_empty, ht_bucket_empty,
	ht_bucket_empty, ht_bucket_html5_865, ht_bucket_html5_866, ht_bucket_html5_867,
	ht_bucket_html5_868, ht_bucket_empty, ht_bucket_html5_86A, ht_bucket_html5_86B,
	ht_bucket_html5_86C, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
	ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_873,
	ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_876, ht_bucket_empty,
	ht_bucket_empty, ht_bucket_html5_879, ht_bucket_empty, ht_bucket_html5_87B,
	ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_87E, ht_bucket_empty,
	ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
	ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
	ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_88A, ht_bucket_empty,
	ht_bucket_html5_88C, ht_bucket_empty, ht_bucket_html5_88E, ht_bucket_empty,
	ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_892, ht_bucket_empty,
	ht_bucket_empty, ht_bucket_html5_895, ht_bucket_html5_896, ht_bucket_html5_897,
	ht_bucket_html5_898, ht_bucket_html5_899, ht_bucket_empty, ht_bucket_empty,
	ht_bucket_empty, ht_bucket_html5_89D, ht_bucket_empty, ht_bucket_empty,
	ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
	ht_bucket_empty, ht_bucket_html5_8A5, ht_bucket_empty, ht_bucket_empty,
	ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
	ht_bucket_html5_8AC, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
	ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_8B3,
	ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_8B6, ht_bucket_html5_8B7,
	ht_bucket_html5_8B8, ht_bucket_html5_8B9, ht_bucket_html5_8BA, ht_bucket_empty,
	ht_bucket_html5_8BC, ht_bucket_html5_8BD, ht_bucket_empty, ht_bucket_empty,
	ht_bucket_html5_8C0, ht_bucket_html5_8C1, ht_bucket_html5_8C2, ht_bucket_empty,
	ht_bucket_html5_8C4, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_8C7,
	ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
	ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_8CF,
	ht_bucket_html5_8D0, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_8D3,
	ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_8D6, ht_bucket_empty,
	ht_bucket_html5_8D8, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
	ht_bucket_html5_8DC, ht_bucket_html5_8DD, ht_bucket_html5_8DE, ht_bucket_html5_8DF,
	ht_bucket_html5_8E0, ht_bucket_empty, ht_bucket_html5_8E2, ht_bucket_html5_8E3,
	ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_8E7,
	ht_bucket_html5_8E8, ht_bucket_html5_8E9, ht_bucket_empty, ht_bucket_html5_8EB,
	ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
	ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_8F3,
	ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
	ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_8FB,
	ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_8FE, ht_bucket_html5_8FF,
	ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
	ht_bucket_html5_904, ht_bucket_empty, ht_bucket_html5_906, ht_bucket_html5_907,
	ht_bucket_empty, ht_bucket_html5_909, ht_bucket_empty, ht_bucket_empty,
	ht_bucket_html5_90C, ht_bucket_empty, ht_bucket_html5_90E, ht_bucket_empty,
	ht_bucket_html5_910, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_913,
	ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_916, ht_bucket_empty,
	ht_bucket_html5_918, ht_bucket_html5_919, ht_bucket_empty, ht_bucket_html5_91B,
	ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_91E, ht_bucket_html5_91F,
	ht_bucket_html5_920, ht_bucket_empty, ht_bucket_html5_922, ht_bucket_html5_923,
	ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_927,
	ht_bucket_empty, ht_bucket_html5_929, ht_bucket_html5_92A, ht_bucket_empty,
	ht_bucket_html5_92C, ht_bucket_empty, ht_bucket_html5_92E, ht_bucket_empty,
	ht_bucket_html5_930, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
	ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_936, ht_bucket_empty,
	ht_bucket_empty, ht_bucket_html5_939, ht_bucket_empty, ht_bucket_html5_93B,
	ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_93F,
	ht_bucket_html5_940, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
	ht_bucket_empty, ht_bucket_html5_945, ht_bucket_empty, ht_bucket_html5_947,
	ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
	ht_bucket_empty, ht_bucket_html5_94D, ht_bucket_empty, ht_bucket_html5_94F,
	ht_bucket_html5_950, ht_bucket_empty, ht_bucket_html5_952, ht_bucket_html5_953,
	ht_bucket_html5_954, ht_bucket_html5_955, ht_bucket_html5_956, ht_bucket_empty,
	ht_bucket_empty, ht_bucket_html5_959, ht_bucket_empty, ht_bucket_html5_95B,
	ht_bucket_empty, ht_bucket_html5_95D, ht_bucket_empty, ht_bucket_html5_95F,
	ht_bucket_html5_960, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_963,
	ht_bucket_html5_964, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
	ht_bucket_empty, ht_bucket_html5_969, ht_bucket_empty, ht_bucket_empty,
	ht_bucket_html5_96C, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_96F,
	ht_bucket_html5_970, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
	ht_bucket_html5_974, ht_bucket_html5_975, ht_bucket_html5_976, ht_bucket_empty,
	ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_97B,
	ht_bucket_html5_97C, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_97F,
	ht_bucket_empty, ht_bucket_html5_981, ht_bucket_empty, ht_bucket_html5_983,
	ht_bucket_empty, ht_bucket_html5_985, ht_bucket_html5_986, ht_bucket_empty,
	ht_bucket_html5_988, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
	ht_bucket_html5_98C, ht_bucket_html5_98D, ht_bucket_empty, ht_bucket_html5_98F,
	ht_bucket_html5_990, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
	ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_996, ht_bucket_html5_997,
	ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_99B,
	ht_bucket_html5_99C, ht_bucket_empty, ht_bucket_html5_99E, ht_bucket_html5_99F,
	ht_bucket_html5_9A0, ht_bucket_html5_9A1, ht_bucket_empty, ht_bucket_empty,
	ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_9A6, ht_bucket_empty,
	ht_bucket_html5_9A8, ht_bucket_empty, ht_bucket_html5_9AA, ht_bucket_empty,
	ht_bucket_html5_9AC, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
	ht_bucket_html5_9B0, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
	ht_bucket_html5_9B4, ht_bucket_html5_9B5, ht_bucket_html5_9B6, ht_bucket_html5_9B7,
	ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_9BB,
	ht_bucket_html5_9BC, ht_bucket_html5_9BD, ht_bucket_empty, ht_bucket_empty,
	ht_bucket_empty, ht_bucket_html5_9C1, ht_bucket_html5_9C2, ht_bucket_html5_9C3,
	ht_bucket_empty, ht_bucket_html5_9C5, ht_bucket_empty, ht_bucket_empty,
	ht_bucket_empty, ht_bucket_html5_9C9, ht_bucket_html5_9CA, ht_bucket_empty,
	ht_bucket_html5_9CC, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_9CF,
	ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
	ht_bucket_empty, ht_bucket_html5_9D5, ht_bucket_html5_9D6, ht_bucket_empty,
	ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_9DA, ht_bucket_html5_9DB,
	ht_bucket_empty, ht_bucket_html5_9DD, ht_bucket_html5_9DE, ht_bucket_empty,
	ht_bucket_empty, ht_bucket_html5_9E1, ht_bucket_html5_9E2, ht_bucket_empty,
	ht_bucket_empty, ht_bucket_html5_9E5, ht_bucket_empty, ht_bucket_html5_9E7,
	ht_bucket_empty, ht_bucket_html5_9E9, ht_bucket_empty, ht_bucket_html5_9EB,
	ht_bucket_empty, ht_bucket_html5_9ED, ht_bucket_html5_9EE, ht_bucket_html5_9EF,
	ht_bucket_html5_9F0, ht_bucket_html5_9F1, ht_bucket_html5_9F2, ht_bucket_html5_9F3,
	ht_bucket_html5_9F4, ht_bucket_html5_9F5, ht_bucket_empty, ht_bucket_html5_9F7,
	ht_bucket_empty, ht_bucket_html5_9F9, ht_bucket_html5_9FA, ht_bucket_empty,
	ht_bucket_empty, ht_bucket_html5_9FD, ht_bucket_empty, ht_bucket_empty,
	ht_bucket_empty, ht_bucket_html5_A01, ht_bucket_empty, ht_bucket_empty,
	ht_bucket_html5_A04, ht_bucket_html5_A05, ht_bucket_html5_A06, ht_bucket_empty,
	ht_bucket_html5_A08, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
	ht_bucket_html5_A0C, ht_bucket_html5_A0D, ht_bucket_html5_A0E, ht_bucket_empty,
	ht_bucket_html5_A10, ht_bucket_empty, ht_bucket_html5_A12, ht_bucket_empty,
	ht_bucket_html5_A14, ht_bucket_html5_A15, ht_bucket_html5_A16, ht_bucket_html5_A17,
	ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
	ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
	ht_bucket_empty, ht_bucket_html5_A21, ht_bucket_empty, ht_bucket_html5_A23,
	ht_bucket_html5_A24, ht_bucket_html5_A25, ht_bucket_html5_A26, ht_bucket_empty,
	ht_bucket_html5_A28, ht_bucket_empty, ht_bucket_html5_A2A, ht_bucket_empty,
	ht_bucket_empty, ht_bucket_html5_A2D, ht_bucket_empty, ht_bucket_empty,
	ht_bucket_html5_A30, ht_bucket_empty, ht_bucket_html5_A32, ht_bucket_empty,
	ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_A36, ht_bucket_html5_A37,
	ht_bucket_empty, ht_bucket_html5_A39, ht_bucket_empty, ht_bucket_html5_A3B,
	ht_bucket_html5_A3C, ht_bucket_html5_A3D, ht_bucket_empty, ht_bucket_empty,
	ht_bucket_empty, ht_bucket_html5_A41, ht_bucket_empty, ht_bucket_html5_A43,
	ht_bucket_html5_A44, ht_bucket_html5_A45, ht_bucket_empty, ht_bucket_empty,
	ht_bucket_html5_A48, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
	ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_A4F,
	ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_A53,
	ht_bucket_html5_A54, ht_bucket_empty, ht_bucket_html5_A56, ht_bucket_html5_A57,
	ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_A5A, ht_bucket_html5_A5B,
	ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
	ht_bucket_empty, ht_bucket_html5_A61, ht_bucket_html5_A62, ht_bucket_html5_A63,
	ht_bucket_html5_A64, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
	ht_bucket_empty, ht_bucket_html5_A69, ht_bucket_html5_A6A, ht_bucket_html5_A6B,
	ht_bucket_empty, ht_bucket_html5_A6D, ht_bucket_empty, ht_bucket_html5_A6F,
	ht_bucket_html5_A70, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
	ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_A76, ht_bucket_empty,
	ht_bucket_html5_A78, ht_bucket_empty, ht_bucket_html5_A7A, ht_bucket_empty,
	ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_A7E, ht_bucket_empty,
	ht_bucket_empty, ht_bucket_html5_A81, ht_bucket_html5_A82, ht_bucket_empty,
	ht_bucket_html5_A84, ht_bucket_html5_A85, ht_bucket_html5_A86, ht_bucket_empty,
	ht_bucket_empty, ht_bucket_html5_A89, ht_bucket_empty, ht_bucket_empty,
	ht_bucket_empty, ht_bucket_html5_A8D, ht_bucket_html5_A8E, ht_bucket_empty,
	ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_A92, ht_bucket_empty,
	ht_bucket_html5_A94, ht_bucket_empty, ht_bucket_html5_A96, ht_bucket_empty,
	ht_bucket_html5_A98, ht_bucket_html5_A99, ht_bucket_html5_A9A, ht_bucket_empty,
	ht_bucket_empty, ht_bucket_html5_A9D, ht_bucket_empty, ht_bucket_html5_A9F,
	ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_AA3,
	ht_bucket_html5_AA4, ht_bucket_html5_AA5, ht_bucket_empty, ht_bucket_html5_AA7,
	ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
	ht_bucket_html5_AAC, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
	ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_AB2, ht_bucket_empty,
	ht_bucket_html5_AB4, ht_bucket_html5_AB5, ht_bucket_empty, ht_bucket_empty,
	ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_ABA, ht_bucket_empty,
	ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
	ht_bucket_html5_AC0, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
	ht_bucket_html5_AC4, ht_bucket_html5_AC5, ht_bucket_html5_AC6, ht_bucket_html5_AC7,
	ht_bucket_html5_AC8, ht_bucket_empty, ht_bucket_html5_ACA, ht_bucket_empty,
	ht_bucket_html5_ACC, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_ACF,
	ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_AD2, ht_bucket_html5_AD3,
	ht_bucket_html5_AD4, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
	ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_ADA, ht_bucket_empty,
	ht_bucket_empty, ht_bucket_html5_ADD, ht_bucket_empty, ht_bucket_html5_ADF,
	ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
	ht_bucket_html5_AE4, ht_bucket_html5_AE5, ht_bucket_html5_AE6, ht_bucket_html5_AE7,
	ht_bucket_html5_AE8, ht_bucket_html5_AE9, ht_bucket_empty, ht_bucket_html5_AEB,
	ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
	ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
	ht_bucket_empty, ht_bucket_html5_AF5, ht_bucket_html5_AF6, ht_bucket_html5_AF7,
	ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_AFA, ht_bucket_empty,
	ht_bucket_empty, ht_bucket_html5_AFD, ht_bucket_html5_AFE, ht_bucket_empty,
	ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
	ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
	ht_bucket_html5_B08, ht_bucket_html5_B09, ht_bucket_html5_B0A, ht_bucket_empty,
	ht_bucket_html5_B0C, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
	ht_bucket_html5_B10, ht_bucket_html5_B11, ht_bucket_empty, ht_bucket_empty,
	ht_bucket_empty, ht_bucket_html5_B15, ht_bucket_html5_B16, ht_bucket_empty,
	ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
	ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_B1E, ht_bucket_html5_B1F,
	ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_B23,
	ht_bucket_html5_B24, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_B27,
	ht_bucket_empty, ht_bucket_html5_B29, ht_bucket_html5_B2A, ht_bucket_html5_B2B,
	ht_bucket_html5_B2C, ht_bucket_html5_B2D, ht_bucket_html5_B2E, ht_bucket_html5_B2F,
	ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_B33,
	ht_bucket_empty, ht_bucket_html5_B35, ht_bucket_html5_B36, ht_bucket_empty,
	ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_B3A, ht_bucket_empty,
	ht_bucket_empty, ht_bucket_html5_B3D, ht_bucket_html5_B3E, ht_bucket_empty,
	ht_bucket_html5_B40, ht_bucket_empty, ht_bucket_html5_B42, ht_bucket_empty,
	ht_bucket_html5_B44, ht_bucket_empty, ht_bucket_html5_B46, ht_bucket_html5_B47,
	ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
	ht_bucket_html5_B4C, ht_bucket_empty, ht_bucket_html5_B4E, ht_bucket_html5_B4F,
	ht_bucket_html5_B50, ht_bucket_html5_B51, ht_bucket_html5_B52, ht_bucket_html5_B53,
	ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_B56, ht_bucket_empty,
	ht_bucket_html5_B58, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
	ht_bucket_html5_B5C, ht_bucket_html5_B5D, ht_bucket_html5_B5E, ht_bucket_empty,
	ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_B63,
	ht_bucket_html5_B64, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_B67,
	ht_bucket_empty, ht_bucket_html5_B69, ht_bucket_empty, ht_bucket_html5_B6B,
	ht_bucket_empty, ht_bucket_html5_B6D, ht_bucket_empty, ht_bucket_empty,
	ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_B72, ht_bucket_html5_B73,
	ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_B77,
	ht_bucket_html5_B78, ht_bucket_empty, ht_bucket_html5_B7A, ht_bucket_html5_B7B,
	ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_B7E, ht_bucket_html5_B7F,
	ht_bucket_empty, ht_bucket_html5_B81, ht_bucket_html5_B82, ht_bucket_empty,
	ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_B87,
	ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
	ht_bucket_empty, ht_bucket_html5_B8D, ht_bucket_empty, ht_bucket_html5_B8F,
	ht_bucket_html5_B90, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
	ht_bucket_html5_B94, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
	ht_bucket_html5_B98, ht_bucket_html5_B99, ht_bucket_html5_B9A, ht_bucket_empty,
	ht_bucket_html5_B9C, ht_bucket_html5_B9D, ht_bucket_empty, ht_bucket_empty,
	ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
	ht_bucket_empty, ht_bucket_html5_BA5, ht_bucket_empty, ht_bucket_empty,
	ht_bucket_empty, ht_bucket_html5_BA9, ht_bucket_empty, ht_bucket_empty,
	ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_BAE, ht_bucket_empty,
	ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_BB2, ht_bucket_empty,
	ht_bucket_empty, ht_bucket_html5_BB5, ht_bucket_html5_BB6, ht_bucket_html5_BB7,
	ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_BBA, ht_bucket_empty,
	ht_bucket_html5_BBC, ht_bucket_html5_BBD, ht_bucket_empty, ht_bucket_html5_BBF,
	ht_bucket_empty, ht_bucket_html5_BC1, ht_bucket_html5_BC2, ht_bucket_html5_BC3,
	ht_bucket_html5_BC4, ht_bucket_html5_BC5, ht_bucket_html5_BC6, ht_bucket_html5_BC7,
	ht_bucket_html5_BC8, ht_bucket_html5_BC9, ht_bucket_empty, ht_bucket_html5_BCB,
	ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_BCE, ht_bucket_empty,
	ht_bucket_empty, ht_bucket_html5_BD1, ht_bucket_empty, ht_bucket_empty,
	ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_BD7,
	ht_bucket_html5_BD8, ht_bucket_html5_BD9, ht_bucket_html5_BDA, ht_bucket_html5_BDB,
	ht_bucket_empty, ht_bucket_html5_BDD, ht_bucket_empty, ht_bucket_html5_BDF,
	ht_bucket_empty, ht_bucket_html5_BE1, ht_bucket_html5_BE2, ht_bucket_empty,
	ht_bucket_html5_BE4, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_BE7,
	ht_bucket_html5_BE8, ht_bucket_html5_BE9, ht_bucket_html5_BEA, ht_bucket_html5_BEB,
	ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_BEF,
	ht_bucket_html5_BF0, ht_bucket_html5_BF1, ht_bucket_html5_BF2, ht_bucket_html5_BF3,
	ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_BF7,
	ht_bucket_empty, ht_bucket_html5_BF9, ht_bucket_html5_BFA, ht_bucket_empty,
	ht_bucket_html5_BFC, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
	ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_C02, ht_bucket_empty,
	ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
	ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_C0B,
	ht_bucket_html5_C0C, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
	ht_bucket_empty, ht_bucket_html5_C11, ht_bucket_html5_C12, ht_bucket_empty,
	ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_C16, ht_bucket_empty,
	ht_bucket_html5_C18, ht_bucket_empty, ht_bucket_html5_C1A, ht_bucket_empty,
	ht_bucket_empty, ht_bucket_html5_C1D, ht_bucket_html5_C1E, ht_bucket_empty,
	ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_C23,
	ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_C27,
	ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_C2B,
	ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
	ht_bucket_empty, ht_bucket_html5_C31, ht_bucket_html5_C32, ht_bucket_html5_C33,
	ht_bucket_html5_C34, ht_bucket_html5_C35, ht_bucket_html5_C36, ht_bucket_empty,
	ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_C3A, ht_bucket_empty,
	ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_C3E, ht_bucket_html5_C3F,
	ht_bucket_html5_C40, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_C43,
	ht_bucket_html5_C44, ht_bucket_empty, ht_bucket_html5_C46, ht_bucket_empty,
	ht_bucket_html5_C48, ht_bucket_empty, ht_bucket_html5_C4A, ht_bucket_html5_C4B,
	ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_C4F,
	ht_bucket_html5_C50, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
	ht_bucket_html5_C54, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
	ht_bucket_html5_C58, ht_bucket_empty, ht_bucket_html5_C5A, ht_bucket_html5_C5B,
	ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_C5F,
	ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
	ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
	ht_bucket_empty, ht_bucket_html5_C69, ht_bucket_empty, ht_bucket_html5_C6B,
	ht_bucket_html5_C6C, ht_bucket_empty, ht_bucket_html5_C6E, ht_bucket_empty,
	ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_C72, ht_bucket_empty,
	ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_C76, ht_bucket_html5_C77,
	ht_bucket_html5_C78, ht_bucket_empty, ht_bucket_html5_C7A, ht_bucket_html5_C7B,
	ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
	ht_bucket_html5_C80, ht_bucket_empty, ht_bucket_html5_C82, ht_bucket_empty,
	ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
	ht_bucket_empty, ht_bucket_html5_C89, ht_bucket_empty, ht_bucket_empty,
	ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_C8E, ht_bucket_empty,
	ht_bucket_empty, ht_bucket_html5_C91, ht_bucket_empty, ht_bucket_html5_C93,
	ht_bucket_html5_C94, ht_bucket_html5_C95, ht_bucket_empty, ht_bucket_empty,
	ht_bucket_html5_C98, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
	ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
	ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
	ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_CA6, ht_bucket_empty,
	ht_bucket_html5_CA8, ht_bucket_html5_CA9, ht_bucket_html5_CAA, ht_bucket_empty,
	ht_bucket_html5_CAC, ht_bucket_html5_CAD, ht_bucket_empty, ht_bucket_html5_CAF,
	ht_bucket_html5_CB0, ht_bucket_empty, ht_bucket_html5_CB2, ht_bucket_empty,
	ht_bucket_html5_CB4, ht_bucket_empty, ht_bucket_html5_CB6, ht_bucket_html5_CB7,
	ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_CBA, ht_bucket_empty,
	ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_CBE, ht_bucket_empty,
	ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_CC2, ht_bucket_empty,
	ht_bucket_html5_CC4, ht_bucket_html5_CC5, ht_bucket_empty, ht_bucket_html5_CC7,
	ht_bucket_html5_CC8, ht_bucket_html5_CC9, ht_bucket_empty, ht_bucket_html5_CCB,
	ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
	ht_bucket_html5_CD0, ht_bucket_empty, ht_bucket_html5_CD2, ht_bucket_html5_CD3,
	ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
	ht_bucket_empty, ht_bucket_html5_CD9, ht_bucket_html5_CDA, ht_bucket_empty,
	ht_bucket_html5_CDC, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
	ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
	ht_bucket_html5_CE4, ht_bucket_empty, ht_bucket_html5_CE6, ht_bucket_empty,
	ht_bucket_html5_CE8, ht_bucket_html5_CE9, ht_bucket_empty, ht_bucket_empty,
	ht_bucket_empty, ht_bucket_html5_CED, ht_bucket_empty, ht_bucket_empty,
	ht_bucket_empty, ht_bucket_html5_CF1, ht_bucket_html5_CF2, ht_bucket_html5_CF3,
	ht_bucket_html5_CF4, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
	ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_CFA, ht_bucket_empty,
	ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_CFF,
	ht_bucket_html5_D00, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
	ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_D06, ht_bucket_html5_D07,
	ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_D0B,
	ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_D0E, ht_bucket_empty,
	ht_bucket_html5_D10, ht_bucket_html5_D11, ht_bucket_html5_D12, ht_bucket_html5_D13,
	ht_bucket_empty, ht_bucket_html5_D15, ht_bucket_empty, ht_bucket_empty,
	ht_bucket_html5_D18, ht_bucket_html5_D19, ht_bucket_html5_D1A, ht_bucket_empty,
	ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_D1E, ht_bucket_html5_D1F,
	ht_bucket_html5_D20, ht_bucket_empty, ht_bucket_html5_D22, ht_bucket_empty,
	ht_bucket_html5_D24, ht_bucket_empty, ht_bucket_html5_D26, ht_bucket_empty,
	ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_D2A, ht_bucket_empty,
	ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
	ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_D32, ht_bucket_empty,
	ht_bucket_html5_D34, ht_bucket_html5_D35, ht_bucket_empty, ht_bucket_empty,
	ht_bucket_html5_D38, ht_bucket_html5_D39, ht_bucket_html5_D3A, ht_bucket_html5_D3B,
	ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_D3E, ht_bucket_empty,
	ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_D42, ht_bucket_empty,
	ht_bucket_html5_D44, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
	ht_bucket_empty, ht_bucket_html5_D49, ht_bucket_empty, ht_bucket_empty,
	ht_bucket_html5_D4C, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_D4F,
	ht_bucket_empty, ht_bucket_html5_D51, ht_bucket_empty, ht_bucket_empty,
	ht_bucket_html5_D54, ht_bucket_html5_D55, ht_bucket_html5_D56, ht_bucket_html5_D57,
	ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_D5A, ht_bucket_html5_D5B,
	ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_D5F,
	ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_D63,
	ht_bucket_empty, ht_bucket_html5_D65, ht_bucket_empty, ht_bucket_empty,
	ht_bucket_empty, ht_bucket_html5_D69, ht_bucket_html5_D6A, ht_bucket_empty,
	ht_bucket_html5_D6C, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_D6F,
	ht_bucket_html5_D70, ht_bucket_html5_D71, ht_bucket_empty, ht_bucket_empty,
	ht_bucket_html5_D74, ht_bucket_html5_D75, ht_bucket_html5_D76, ht_bucket_empty,
	ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
	ht_bucket_html5_D7C, ht_bucket_html5_D7D, ht_bucket_html5_D7E, ht_bucket_empty,
	ht_bucket_html5_D80, ht_bucket_html5_D81, ht_bucket_empty, ht_bucket_empty,
	ht_bucket_empty, ht_bucket_html5_D85, ht_bucket_empty, ht_bucket_html5_D87,
	ht_bucket_empty, ht_bucket_html5_D89, ht_bucket_html5_D8A, ht_bucket_empty,
	ht_bucket_html5_D8C, ht_bucket_html5_D8D, ht_bucket_html5_D8E, ht_bucket_html5_D8F,
	ht_bucket_html5_D90, ht_bucket_html5_D91, ht_bucket_empty, ht_bucket_html5_D93,
	ht_bucket_html5_D94, ht_bucket_html5_D95, ht_bucket_html5_D96, ht_bucket_empty,
	ht_bucket_html5_D98, ht_bucket_empty, ht_bucket_html5_D9A, ht_bucket_empty,
	ht_bucket_html5_D9C, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
	ht_bucket_html5_DA0, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
	ht_bucket_empty, ht_bucket_html5_DA5, ht_bucket_html5_DA6, ht_bucket_empty,
	ht_bucket_html5_DA8, ht_bucket_html5_DA9, ht_bucket_empty, ht_bucket_empty,
	ht_bucket_html5_DAC, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
	ht_bucket_html5_DB0, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_DB3,
	ht_bucket_html5_DB4, ht_bucket_empty, ht_bucket_html5_DB6, ht_bucket_html5_DB7,
	ht_bucket_empty, ht_bucket_html5_DB9, ht_bucket_empty, ht_bucket_empty,
	ht_bucket_html5_DBC, ht_bucket_empty, ht_bucket_html5_DBE, ht_bucket_html5_DBF,
	ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_DC2, ht_bucket_html5_DC3,
	ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_DC6, ht_bucket_empty,
	ht_bucket_html5_DC8, ht_bucket_empty, ht_bucket_html5_DCA, ht_bucket_empty,
	ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_DCF,
	ht_bucket_empty, ht_bucket_html5_DD1, ht_bucket_empty, ht_bucket_html5_DD3,
	ht_bucket_html5_DD4, ht_bucket_html5_DD5, ht_bucket_empty, ht_bucket_html5_DD7,
	ht_bucket_empty, ht_bucket_html5_DD9, ht_bucket_empty, ht_bucket_empty,
	ht_bucket_html5_DDC, ht_bucket_html5_DDD, ht_bucket_empty, ht_bucket_empty,
	ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
	ht_bucket_html5_DE4, ht_bucket_empty, ht_bucket_html5_DE6, ht_bucket_html5_DE7,
	ht_bucket_empty, ht_bucket_html5_DE9, ht_bucket_empty, ht_bucket_html5_DEB,
	ht_bucket_empty, ht_bucket_html5_DED, ht_bucket_empty, ht_bucket_empty,
	ht_bucket_empty, ht_bucket_html5_DF1, ht_bucket_html5_DF2, ht_bucket_html5_DF3,
	ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_DF6, ht_bucket_html5_DF7,
	ht_bucket_empty, ht_bucket_html5_DF9, ht_bucket_empty, ht_bucket_html5_DFB,
	ht_bucket_empty, ht_bucket_html5_DFD, ht_bucket_empty, ht_bucket_empty,
	ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_E03,
	ht_bucket_html5_E04, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
	ht_bucket_html5_E08, ht_bucket_html5_E09, ht_bucket_empty, ht_bucket_empty,
	ht_bucket_html5_E0C, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
	ht_bucket_empty, ht_bucket_html5_E11, ht_bucket_empty, ht_bucket_empty,
	ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
	ht_bucket_html5_E18, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_E1B,
	ht_bucket_html5_E1C, ht_bucket_html5_E1D, ht_bucket_html5_E1E, ht_bucket_empty,
	ht_bucket_html5_E20, ht_bucket_empty, ht_bucket_html5_E22, ht_bucket_html5_E23,
	ht_bucket_html5_E24, ht_bucket_html5_E25, ht_bucket_empty, ht_bucket_empty,
	ht_bucket_html5_E28, ht_bucket_empty, ht_bucket_html5_E2A, ht_bucket_empty,
	ht_bucket_html5_E2C, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_E2F,
	ht_bucket_html5_E30, ht_bucket_empty, ht_bucket_html5_E32, ht_bucket_html5_E33,
	ht_bucket_empty, ht_bucket_html5_E35, ht_bucket_html5_E36, ht_bucket_html5_E37,
	ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_E3B,
	ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
	ht_bucket_empty, ht_bucket_html5_E41, ht_bucket_html5_E42, ht_bucket_html5_E43,
	ht_bucket_html5_E44, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
	ht_bucket_html5_E48, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
	ht_bucket_html5_E4C, ht_bucket_empty, ht_bucket_html5_E4E, ht_bucket_empty,
	ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_E53,
	ht_bucket_empty, ht_bucket_html5_E55, ht_bucket_empty, ht_bucket_html5_E57,
	ht_bucket_html5_E58, ht_bucket_html5_E59, ht_bucket_empty, ht_bucket_html5_E5B,
	ht_bucket_empty, ht_bucket_html5_E5D, ht_bucket_html5_E5E, ht_bucket_html5_E5F,
	ht_bucket_html5_E60, ht_bucket_html5_E61, ht_bucket_empty, ht_bucket_html5_E63,
	ht_bucket_html5_E64, ht_bucket_html5_E65, ht_bucket_html5_E66, ht_bucket_empty,
	ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_E6A, ht_bucket_empty,
	ht_bucket_html5_E6C, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_E6F,
	ht_bucket_html5_E70, ht_bucket_html5_E71, ht_bucket_empty, ht_bucket_html5_E73,
	ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
	ht_bucket_html5_E78, ht_bucket_empty, ht_bucket_html5_E7A, ht_bucket_empty,
	ht_bucket_html5_E7C, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
	ht_bucket_html5_E80, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_E83,
	ht_bucket_html5_E84, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
	ht_bucket_empty, ht_bucket_html5_E89, ht_bucket_empty, ht_bucket_empty,
	ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_E8E, ht_bucket_empty,
	ht_bucket_empty, ht_bucket_html5_E91, ht_bucket_empty, ht_bucket_empty,
	ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
	ht_bucket_empty, ht_bucket_html5_E99, ht_bucket_empty, ht_bucket_empty,
	ht_bucket_html5_E9C, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
	ht_bucket_empty, ht_bucket_html5_EA1, ht_bucket_html5_EA2, ht_bucket_empty,
	ht_bucket_html5_EA4, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
	ht_bucket_html5_EA8, ht_bucket_html5_EA9, ht_bucket_empty, ht_bucket_empty,
	ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
	ht_bucket_empty, ht_bucket_html5_EB1, ht_bucket_html5_EB2, ht_bucket_empty,
	ht_bucket_html5_EB4, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_EB7,
	ht_bucket_html5_EB8, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
	ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
	ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
	ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
	ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_ECA, ht_bucket_empty,
	ht_bucket_empty, ht_bucket_html5_ECD, ht_bucket_empty, ht_bucket_html5_ECF,
	ht_bucket_empty, ht_bucket_html5_ED1, ht_bucket_empty, ht_bucket_empty,
	ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_ED7,
	ht_bucket_html5_ED8, ht_bucket_html5_ED9, ht_bucket_html5_EDA, ht_bucket_html5_EDB,
	ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_EDF,
	ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_EE2, ht_bucket_empty,
	ht_bucket_html5_EE4, ht_bucket_html5_EE5, ht_bucket_empty, ht_bucket_html5_EE7,
	ht_bucket_empty, ht_bucket_html5_EE9, ht_bucket_empty, ht_bucket_empty,
	ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_EEF,
	ht_bucket_empty, ht_bucket_html5_EF1, ht_bucket_html5_EF2, ht_bucket_empty,
	ht_bucket_html5_EF4, ht_bucket_html5_EF5, ht_bucket_empty, ht_bucket_empty,
	ht_bucket_empty, ht_bucket_html5_EF9, ht_bucket_empty, ht_bucket_html5_EFB,
	ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_EFE, ht_bucket_html5_EFF,
	ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_F03,
	ht_bucket_empty, ht_bucket_html5_F05, ht_bucket_empty, ht_bucket_empty,
	ht_bucket_html5_F08, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_F0B,
	ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_F0F,
	ht_bucket_html5_F10, ht_bucket_html5_F11, ht_bucket_empty, ht_bucket_html5_F13,
	ht_bucket_html5_F14, ht_bucket_html5_F15, ht_bucket_empty, ht_bucket_html5_F17,
	ht_bucket_html5_F18, ht_bucket_html5_F19, ht_bucket_html5_F1A, ht_bucket_empty,
	ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_F1F,
	ht_bucket_html5_F20, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
	ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_F26, ht_bucket_empty,
	ht_bucket_html5_F28, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
	ht_bucket_html5_F2C, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_F2F,
	ht_bucket_html5_F30, ht_bucket_html5_F31, ht_bucket_empty, ht_bucket_html5_F33,
	ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_F37,
	ht_bucket_html5_F38, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
	ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
	ht_bucket_html5_F40, ht_bucket_html5_F41, ht_bucket_empty, ht_bucket_empty,
	ht_bucket_html5_F44, ht_bucket_empty, ht_bucket_html5_F46, ht_bucket_html5_F47,
	ht_bucket_html5_F48, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_F4B,
	ht_bucket_html5_F4C, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
	ht_bucket_html5_F50, ht_bucket_html5_F51, ht_bucket_empty, ht_bucket_empty,
	ht_bucket_empty, ht_bucket_html5_F55, ht_bucket_empty, ht_bucket_html5_F57,
	ht_bucket_html5_F58, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_F5B,
	ht_bucket_empty, ht_bucket_html5_F5D, ht_bucket_empty, ht_bucket_html5_F5F,
	ht_bucket_html5_F60, ht_bucket_empty, ht_bucket_html5_F62, ht_bucket_empty,
	ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_F67,
	ht_bucket_html5_F68, ht_bucket_html5_F69, ht_bucket_empty, ht_bucket_empty,
	ht_bucket_empty, ht_bucket_html5_F6D, ht_bucket_html5_F6E, ht_bucket_html5_F6F,
	ht_bucket_html5_F70, ht_bucket_html5_F71, ht_bucket_html5_F72, ht_bucket_empty,
	ht_bucket_html5_F74, ht_bucket_html5_F75, ht_bucket_html5_F76, ht_bucket_html5_F77,
	ht_bucket_html5_F78, ht_bucket_html5_F79, ht_bucket_empty, ht_bucket_empty,
	ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
	ht_bucket_empty, ht_bucket_html5_F81, ht_bucket_html5_F82, ht_bucket_html5_F83,
	ht_bucket_html5_F84, ht_bucket_empty, ht_bucket_html5_F86, ht_bucket_empty,
	ht_bucket_html5_F88, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_F8B,
	ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_F8F,
	ht_bucket_empty, ht_bucket_html5_F91, ht_bucket_empty, ht_bucket_html5_F93,
	ht_bucket_empty, ht_bucket_html5_F95, ht_bucket_empty, ht_bucket_empty,
	ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_F9A, ht_bucket_empty,
	ht_bucket_html5_F9C, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_F9F,
	ht_bucket_html5_FA0, ht_bucket_html5_FA1, ht_bucket_html5_FA2, ht_bucket_html5_FA3,
	ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
	ht_bucket_empty, ht_bucket_html5_FA9, ht_bucket_empty, ht_bucket_empty,
	ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
	ht_bucket_html5_FB0, ht_bucket_html5_FB1, ht_bucket_empty, ht_bucket_empty,
	ht_bucket_html5_FB4, ht_bucket_html5_FB5, ht_bucket_html5_FB6, ht_bucket_html5_FB7,
	ht_bucket_empty, ht_bucket_html5_FB9, ht_bucket_empty, ht_bucket_empty,
	ht_bucket_html5_FBC, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
	ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_FC2, ht_bucket_empty,
	ht_bucket_html5_FC4, ht_bucket_empty, ht_bucket_html5_FC6, ht_bucket_empty,
	ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_FCA, ht_bucket_empty,
	ht_bucket_html5_FCC, ht_bucket_empty, ht_bucket_html5_FCE, ht_bucket_html5_FCF,
	ht_bucket_html5_FD0, ht_bucket_empty, ht_bucket_html5_FD2, ht_bucket_html5_FD3,
	ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_FD6, ht_bucket_html5_FD7,
	ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
	ht_bucket_empty, ht_bucket_html5_FDD, ht_bucket_empty, ht_bucket_html5_FDF,
	ht_bucket_empty, ht_bucket_html5_FE1, ht_bucket_empty, ht_bucket_empty,
	ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_FE6, ht_bucket_empty,
	ht_bucket_empty, ht_bucket_html5_FE9, ht_bucket_html5_FEA, ht_bucket_html5_FEB,
	ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
	ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
	ht_bucket_empty, ht_bucket_html5_FF5, ht_bucket_empty, ht_bucket_empty,
	ht_bucket_html5_FF8, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
	ht_bucket_html5_FFC, ht_bucket_empty, ht_bucket_html5_FFE, ht_bucket_empty,
};

static const entity_ht ent_ht_html5 = {
	0x1000,
	ht_buckets_html5
};

/* end of HTML5 hash table for entity -> codepoint }}} */

/* {{{ Start of HTML 4.01 multi-stage table for codepoint -> entity */

/* {{{ Stage 3 Tables for HTML 4.01 */

static const entity_stage3_row stage3_table_html4_00000[] = {
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {"quot", 4} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {"amp", 3} } }, {0, { {"#039", 4} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {"lt", 2} } }, {0, { {NULL, 0} } }, {0, { {"gt", 2} } }, {0, { {NULL, 0} } },
};

static const entity_stage3_row stage3_table_html4_00080[] = {
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {"nbsp", 4} } }, {0, { {"iexcl", 5} } }, {0, { {"cent", 4} } }, {0, { {"pound", 5} } },
	{0, { {"curren", 6} } }, {0, { {"yen", 3} } }, {0, { {"brvbar", 6} } }, {0, { {"sect", 4} } },
	{0, { {"uml", 3} } }, {0, { {"copy", 4} } }, {0, { {"ordf", 4} } }, {0, { {"laquo", 5} } },
	{0, { {"not", 3} } }, {0, { {"shy", 3} } }, {0, { {"reg", 3} } }, {0, { {"macr", 4} } },
	{0, { {"deg", 3} } }, {0, { {"plusmn", 6} } }, {0, { {"sup2", 4} } }, {0, { {"sup3", 4} } },
	{0, { {"acute", 5} } }, {0, { {"micro", 5} } }, {0, { {"para", 4} } }, {0, { {"middot", 6} } },
	{0, { {"cedil", 5} } }, {0, { {"sup1", 4} } }, {0, { {"ordm", 4} } }, {0, { {"raquo", 5} } },
	{0, { {"frac14", 6} } }, {0, { {"frac12", 6} } }, {0, { {"frac34", 6} } }, {0, { {"iquest", 6} } },
};

static const entity_stage3_row stage3_table_html4_000C0[] = {
	{0, { {"Agrave", 6} } }, {0, { {"Aacute", 6} } }, {0, { {"Acirc", 5} } }, {0, { {"Atilde", 6} } },
	{0, { {"Auml", 4} } }, {0, { {"Aring", 5} } }, {0, { {"AElig", 5} } }, {0, { {"Ccedil", 6} } },
	{0, { {"Egrave", 6} } }, {0, { {"Eacute", 6} } }, {0, { {"Ecirc", 5} } }, {0, { {"Euml", 4} } },
	{0, { {"Igrave", 6} } }, {0, { {"Iacute", 6} } }, {0, { {"Icirc", 5} } }, {0, { {"Iuml", 4} } },
	{0, { {"ETH", 3} } }, {0, { {"Ntilde", 6} } }, {0, { {"Ograve", 6} } }, {0, { {"Oacute", 6} } },
	{0, { {"Ocirc", 5} } }, {0, { {"Otilde", 6} } }, {0, { {"Ouml", 4} } }, {0, { {"times", 5} } },
	{0, { {"Oslash", 6} } }, {0, { {"Ugrave", 6} } }, {0, { {"Uacute", 6} } }, {0, { {"Ucirc", 5} } },
	{0, { {"Uuml", 4} } }, {0, { {"Yacute", 6} } }, {0, { {"THORN", 5} } }, {0, { {"szlig", 5} } },
	{0, { {"agrave", 6} } }, {0, { {"aacute", 6} } }, {0, { {"acirc", 5} } }, {0, { {"atilde", 6} } },
	{0, { {"auml", 4} } }, {0, { {"aring", 5} } }, {0, { {"aelig", 5} } }, {0, { {"ccedil", 6} } },
	{0, { {"egrave", 6} } }, {0, { {"eacute", 6} } }, {0, { {"ecirc", 5} } }, {0, { {"euml", 4} } },
	{0, { {"igrave", 6} } }, {0, { {"iacute", 6} } }, {0, { {"icirc", 5} } }, {0, { {"iuml", 4} } },
	{0, { {"eth", 3} } }, {0, { {"ntilde", 6} } }, {0, { {"ograve", 6} } }, {0, { {"oacute", 6} } },
	{0, { {"ocirc", 5} } }, {0, { {"otilde", 6} } }, {0, { {"ouml", 4} } }, {0, { {"divide", 6} } },
	{0, { {"oslash", 6} } }, {0, { {"ugrave", 6} } }, {0, { {"uacute", 6} } }, {0, { {"ucirc", 5} } },
	{0, { {"uuml", 4} } }, {0, { {"yacute", 6} } }, {0, { {"thorn", 5} } }, {0, { {"yuml", 4} } },
};

static const entity_stage3_row stage3_table_html4_00140[] = {
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {"OElig", 5} } }, {0, { {"oelig", 5} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {"Scaron", 6} } }, {0, { {"scaron", 6} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {"Yuml", 4} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
};

static const entity_stage3_row stage3_table_html4_00180[] = {
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {"fnof", 4} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
};

static const entity_stage3_row stage3_table_html4_002C0[] = {
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {"circ", 4} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {"tilde", 5} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
};

static const entity_stage3_row stage3_table_html4_00380[] = {
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {"Alpha", 5} } }, {0, { {"Beta", 4} } }, {0, { {"Gamma", 5} } },
	{0, { {"Delta", 5} } }, {0, { {"Epsilon", 7} } }, {0, { {"Zeta", 4} } }, {0, { {"Eta", 3} } },
	{0, { {"Theta", 5} } }, {0, { {"Iota", 4} } }, {0, { {"Kappa", 5} } }, {0, { {"Lambda", 6} } },
	{0, { {"Mu", 2} } }, {0, { {"Nu", 2} } }, {0, { {"Xi", 2} } }, {0, { {"Omicron", 7} } },
	{0, { {"Pi", 2} } }, {0, { {"Rho", 3} } }, {0, { {NULL, 0} } }, {0, { {"Sigma", 5} } },
	{0, { {"Tau", 3} } }, {0, { {"Upsilon", 7} } }, {0, { {"Phi", 3} } }, {0, { {"Chi", 3} } },
	{0, { {"Psi", 3} } }, {0, { {"Omega", 5} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {"alpha", 5} } }, {0, { {"beta", 4} } }, {0, { {"gamma", 5} } },
	{0, { {"delta", 5} } }, {0, { {"epsilon", 7} } }, {0, { {"zeta", 4} } }, {0, { {"eta", 3} } },
	{0, { {"theta", 5} } }, {0, { {"iota", 4} } }, {0, { {"kappa", 5} } }, {0, { {"lambda", 6} } },
	{0, { {"mu", 2} } }, {0, { {"nu", 2} } }, {0, { {"xi", 2} } }, {0, { {"omicron", 7} } },
};

static const entity_stage3_row stage3_table_html4_003C0[] = {
	{0, { {"pi", 2} } }, {0, { {"rho", 3} } }, {0, { {"sigmaf", 6} } }, {0, { {"sigma", 5} } },
	{0, { {"tau", 3} } }, {0, { {"upsilon", 7} } }, {0, { {"phi", 3} } }, {0, { {"chi", 3} } },
	{0, { {"psi", 3} } }, {0, { {"omega", 5} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {"thetasym", 8} } }, {0, { {"upsih", 5} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {"piv", 3} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
};

static const entity_stage3_row stage3_table_html4_02000[] = {
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {"ensp", 4} } }, {0, { {"emsp", 4} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {"thinsp", 6} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {"zwnj", 4} } }, {0, { {"zwj", 3} } }, {0, { {"lrm", 3} } }, {0, { {"rlm", 3} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {"ndash", 5} } },
	{0, { {"mdash", 5} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {"lsquo", 5} } }, {0, { {"rsquo", 5} } }, {0, { {"sbquo", 5} } }, {0, { {NULL, 0} } },
	{0, { {"ldquo", 5} } }, {0, { {"rdquo", 5} } }, {0, { {"bdquo", 5} } }, {0, { {NULL, 0} } },
	{0, { {"dagger", 6} } }, {0, { {"Dagger", 6} } }, {0, { {"bull", 4} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {"hellip", 6} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {"permil", 6} } }, {0, { {NULL, 0} } }, {0, { {"prime", 5} } }, {0, { {"Prime", 5} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {"lsaquo", 6} } }, {0, { {"rsaquo", 6} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {"oline", 5} } }, {0, { {NULL, 0} } },
};

static const entity_stage3_row stage3_table_html4_02040[] = {
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {"frasl", 5} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
};

static const entity_stage3_row stage3_table_html4_02080[] = {
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {"euro", 4} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
};

static const entity_stage3_row stage3_table_html4_02100[] = {
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {"image", 5} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {"weierp", 6} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {"real", 4} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {"trade", 5} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {"alefsym", 7} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
};

static const entity_stage3_row stage3_table_html4_02180[] = {
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {"larr", 4} } }, {0, { {"uarr", 4} } }, {0, { {"rarr", 4} } }, {0, { {"darr", 4} } },
	{0, { {"harr", 4} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {"crarr", 5} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
};

static const entity_stage3_row stage3_table_html4_021C0[] = {
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {"lArr", 4} } }, {0, { {"uArr", 4} } }, {0, { {"rArr", 4} } }, {0, { {"dArr", 4} } },
	{0, { {"hArr", 4} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
};

static const entity_stage3_row stage3_table_html4_02200[] = {
	{0, { {"forall", 6} } }, {0, { {NULL, 0} } }, {0, { {"part", 4} } }, {0, { {"exist", 5} } },
	{0, { {NULL, 0} } }, {0, { {"empty", 5} } }, {0, { {NULL, 0} } }, {0, { {"nabla", 5} } },
	{0, { {"isin", 4} } }, {0, { {"notin", 5} } }, {0, { {NULL, 0} } }, {0, { {"ni", 2} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {"prod", 4} } },
	{0, { {NULL, 0} } }, {0, { {"sum", 3} } }, {0, { {"minus", 5} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {"lowast", 6} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {"radic", 5} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {"prop", 4} } }, {0, { {"infin", 5} } }, {0, { {NULL, 0} } },
	{0, { {"ang", 3} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {"and", 3} } },
	{0, { {"or", 2} } }, {0, { {"cap", 3} } }, {0, { {"cup", 3} } }, {0, { {"int", 3} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {"there4", 6} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {"sim", 3} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
};

static const entity_stage3_row stage3_table_html4_02240[] = {
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {"cong", 4} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {"asymp", 5} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {"ne", 2} } }, {0, { {"equiv", 5} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {"le", 2} } }, {0, { {"ge", 2} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
};

static const entity_stage3_row stage3_table_html4_02280[] = {
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {"sub", 3} } }, {0, { {"sup", 3} } },
	{0, { {"nsub", 4} } }, {0, { {NULL, 0} } }, {0, { {"sube", 4} } }, {0, { {"supe", 4} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {"oplus", 5} } }, {0, { {NULL, 0} } }, {0, { {"otimes", 6} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {"perp", 4} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
};

static const entity_stage3_row stage3_table_html4_022C0[] = {
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {"sdot", 4} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
};

static const entity_stage3_row stage3_table_html4_02300[] = {
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {"lceil", 5} } }, {0, { {"rceil", 5} } }, {0, { {"lfloor", 6} } }, {0, { {"rfloor", 6} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {"lang", 4} } }, {0, { {"rang", 4} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
};

static const entity_stage3_row stage3_table_html4_025C0[] = {
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {"loz", 3} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
};

static const entity_stage3_row stage3_table_html4_02640[] = {
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {"spades", 6} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {"clubs", 5} } },
	{0, { {NULL, 0} } }, {0, { {"hearts", 6} } }, {0, { {"diams", 5} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
};

/* end of stage 3 Tables for HTML 4.01 }}} */

/* {{{ Stage 2 Tables for HTML 4.01 */

static const entity_stage2_row stage2_table_html4_00000[] = {
	stage3_table_html4_00000, empty_stage3_table, stage3_table_html4_00080, stage3_table_html4_000C0,
	empty_stage3_table, stage3_table_html4_00140, stage3_table_html4_00180, empty_stage3_table,
	empty_stage3_table, empty_stage3_table, empty_stage3_table, stage3_table_html4_002C0,
	empty_stage3_table, empty_stage3_table, stage3_table_html4_00380, stage3_table_html4_003C0,
	empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table,
	empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table,
	empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table,
	empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table,
	empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table,
	empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table,
	empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table,
	empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table,
	empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table,
	empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table,
	empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table,
	empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table,
};

static const entity_stage2_row stage2_table_html4_02000[] = {
	stage3_table_html4_02000, stage3_table_html4_02040, stage3_table_html4_02080, empty_stage3_table,
	stage3_table_html4_02100, empty_stage3_table, stage3_table_html4_02180, stage3_table_html4_021C0,
	stage3_table_html4_02200, stage3_table_html4_02240, stage3_table_html4_02280, stage3_table_html4_022C0,
	stage3_table_html4_02300, empty_stage3_table, empty_stage3_table, empty_stage3_table,
	empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table,
	empty_stage3_table, empty_stage3_table, empty_stage3_table, stage3_table_html4_025C0,
	empty_stage3_table, stage3_table_html4_02640, empty_stage3_table, empty_stage3_table,
	empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table,
	empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table,
	empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table,
	empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table,
	empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table,
	empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table,
	empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table,
	empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table,
	empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table,
};

/* end of stage 2 tables for HTML 4.01 }}} */

static const entity_stage1_row entity_ms_table_html4[] = {
	stage2_table_html4_00000,
	empty_stage2_table,
	stage2_table_html4_02000,
	empty_stage2_table,
	empty_stage2_table,
	empty_stage2_table,
	empty_stage2_table,
	empty_stage2_table,
	empty_stage2_table,
	empty_stage2_table,
	empty_stage2_table,
	empty_stage2_table,
	empty_stage2_table,
	empty_stage2_table,
	empty_stage2_table,
	empty_stage2_table,
	empty_stage2_table,
	empty_stage2_table,
	empty_stage2_table,
	empty_stage2_table,
	empty_stage2_table,
	empty_stage2_table,
	empty_stage2_table,
	empty_stage2_table,
	empty_stage2_table,
	empty_stage2_table,
	empty_stage2_table,
	empty_stage2_table,
	empty_stage2_table,
	empty_stage2_table,
};

/* end of HTML 4.01 multi-stage table for codepoint -> entity }}} */

/* {{{ HTML 4.01 hash table for entity -> codepoint */

static const entity_cp_map ht_bucket_html4_000[] = { {"gt", 2, 0x0003E, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html4_003[] = { {"Igrave", 6, 0x000CC, 0}, {"amp", 3, 0x00026, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html4_006[] = { {"oacute", 6, 0x000F3, 0}, {"Xi", 2, 0x0039E, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html4_008[] = { {"uuml", 4, 0x000FC, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html4_00B[] = { {"Alpha", 5, 0x00391, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html4_00E[] = { {"sim", 3, 0x0223C, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html4_012[] = { {"kappa", 5, 0x003BA, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html4_016[] = { {"lArr", 4, 0x021D0, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html4_018[] = { {"and", 3, 0x02227, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html4_01B[] = { {"ang", 3, 0x02220, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html4_020[] = { {"copy", 4, 0x000A9, 0}, {"Iacute", 6, 0x000CD, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html4_023[] = { {"igrave", 6, 0x000EC, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html4_026[] = { {"xi", 2, 0x003BE, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html4_027[] = { {"Acirc", 5, 0x000C2, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html4_02B[] = { {"Ecirc", 5, 0x000CA, 0}, {"alpha", 5, 0x003B1, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html4_02C[] = { {"hearts", 6, 0x02665, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html4_02F[] = { {"Icirc", 5, 0x000CE, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html4_030[] = { {"Yacute", 6, 0x000DD, 0}, {"int", 3, 0x0222B, 0}, {"rlm", 3, 0x0200F, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html4_034[] = { {"empty", 5, 0x02205, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html4_036[] = { {"larr", 4, 0x02190, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html4_03B[] = { {"Ucirc", 5, 0x000DB, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html4_03C[] = { {"oline", 5, 0x0203E, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html4_040[] = { {"iacute", 6, 0x000ED, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html4_046[] = { {"middot", 6, 0x000B7, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html4_047[] = { {"acirc", 5, 0x000E2, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html4_04B[] = { {"ecirc", 5, 0x000EA, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html4_04F[] = { {"icirc", 5, 0x000EE, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html4_050[] = { {"yacute", 6, 0x000FD, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html4_051[] = { {"minus", 5, 0x02212, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html4_054[] = { {"Auml", 4, 0x000C4, 0}, {"thetasym", 8, 0x003D1, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html4_056[] = { {"Sigma", 5, 0x003A3, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html4_059[] = { {"lsquo", 5, 0x02018, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html4_05B[] = { {"ucirc", 5, 0x000FB, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html4_05C[] = { {"rArr", 4, 0x021D2, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html4_064[] = { {"brvbar", 6, 0x000A6, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html4_067[] = { {"AElig", 5, 0x000C6, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html4_069[] = { {"Ccedil", 6, 0x000C7, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html4_071[] = { {"Psi", 3, 0x003A8, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html4_072[] = { {"exist", 5, 0x02203, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html4_074[] = { {"auml", 4, 0x000E4, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html4_076[] = { {"sigma", 5, 0x003C3, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html4_078[] = { {"isin", 4, 0x02208, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html4_07C[] = { {"rarr", 4, 0x02192, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html4_089[] = { {"ccedil", 6, 0x000E7, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html4_08D[] = { {"raquo", 5, 0x000BB, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html4_08E[] = { {"Omega", 5, 0x003A9, 0}, {"zwnj", 4, 0x0200C, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html4_091[] = { {"psi", 3, 0x003C8, 0}, {"there4", 6, 0x02234, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html4_092[] = { {"hArr", 4, 0x021D4, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html4_096[] = { {"le", 2, 0x02264, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html4_098[] = { {"Atilde", 6, 0x000C3, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html4_099[] = { {"Zeta", 4, 0x00396, 0}, {"infin", 5, 0x0221E, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html4_09D[] = { {"frasl", 5, 0x02044, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html4_0A0[] = { {"euro", 4, 0x020AC, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html4_0A5[] = { {"lt", 2, 0x0003C, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html4_0A7[] = { {"aelig", 5, 0x000E6, 0}, {"Mu", 2, 0x0039C, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html4_0A8[] = { {"macr", 4, 0x000AF, 0}, {"image", 5, 0x02111, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html4_0AA[] = { {"ldquo", 5, 0x0201C, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html4_0AE[] = { {"omega", 5, 0x003C9, 0}, {"upsih", 5, 0x003D2, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html4_0B0[] = { {"THORN", 5, 0x000DE, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html4_0B2[] = { {"Iota", 4, 0x00399, 0}, {"harr", 4, 0x02194, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html4_0B4[] = { {"bull", 4, 0x02022, 0}, {"rceil", 5, 0x02309, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html4_0B8[] = { {"atilde", 6, 0x000E3, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html4_0B9[] = { {"zeta", 4, 0x003B6, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html4_0BA[] = { {"emsp", 4, 0x02003, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html4_0BC[] = { {"perp", 4, 0x022A5, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html4_0C2[] = { {"Prime", 5, 0x02033, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html4_0C4[] = { {"frac12", 6, 0x000BD, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html4_0C5[] = { {"Ntilde", 6, 0x000D1, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html4_0C6[] = { {"frac14", 6, 0x000BC, 0}, {"circ", 4, 0x002C6, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html4_0C7[] = { {"mu", 2, 0x003BC, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html4_0C8[] = { {"Gamma", 5, 0x00393, 0}, {"Nu", 2, 0x0039D, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html4_0CE[] = { {"fnof", 4, 0x00192, 0}, {"quot", 4, 0x00022, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html4_0D2[] = { {"iota", 4, 0x003B9, 0}, {"mdash", 5, 0x02014, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html4_0D8[] = { {"ne", 2, 0x02260, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html4_0DB[] = { {"Theta", 5, 0x00398, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html4_0DC[] = { {"ni", 2, 0x0220B, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html4_0E2[] = { {"prime", 5, 0x02032, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html4_0E5[] = { {"ntilde", 6, 0x000F1, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html4_0E6[] = { {"Lambda", 6, 0x0039B, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html4_0E8[] = { {"gamma", 5, 0x003B3, 0}, {"nu", 2, 0x003BD, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html4_0EB[] = { {"pound", 5, 0x000A3, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html4_0EE[] = { {"permil", 6, 0x02030, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html4_0F9[] = { {"cap", 3, 0x02229, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html4_0FA[] = { {"iexcl", 5, 0x000A1, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html4_0FB[] = { {"Agrave", 6, 0x000C0, 0}, {"theta", 5, 0x003B8, 0}, {"ensp", 4, 0x02002, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html4_0FE[] = { {"Pi", 2, 0x003A0, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html4_0FF[] = { {"crarr", 5, 0x021B5, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html4_100[] = { {"iquest", 6, 0x000BF, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html4_105[] = { {"forall", 6, 0x02200, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html4_106[] = { {"Phi", 3, 0x003A6, 0}, {"lambda", 6, 0x003BB, 0}, {"or", 2, 0x02228, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html4_108[] = { {"frac34", 6, 0x000BE, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html4_10D[] = { {"notin", 5, 0x02209, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html4_10E[] = { {"dArr", 4, 0x021D3, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html4_10F[] = { {"Dagger", 6, 0x02021, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html4_111[] = { {"yen", 3, 0x000A5, 0}, {"weierp", 6, 0x02118, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html4_113[] = { {"uml", 3, 0x000A8, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html4_117[] = { {"tilde", 5, 0x002DC, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html4_118[] = { {"Aacute", 6, 0x000C1, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html4_11A[] = { {"loz", 3, 0x025CA, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html4_11B[] = { {"agrave", 6, 0x000E0, 0}, {"thinsp", 6, 0x02009, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html4_11E[] = { {"pi", 2, 0x003C0, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html4_11F[] = { {"micro", 5, 0x000B5, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html4_125[] = { {"spades", 6, 0x02660, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html4_126[] = { {"phi", 3, 0x003C6, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html4_12E[] = { {"darr", 4, 0x02193, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html4_12F[] = { {"Oslash", 6, 0x000D8, 0}, {"Tau", 3, 0x003A4, 0}, {"dagger", 6, 0x02020, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html4_135[] = { {"Ocirc", 5, 0x000D4, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html4_136[] = { {"alefsym", 7, 0x02135, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html4_138[] = { {"aacute", 6, 0x000E1, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html4_13A[] = { {"divide", 6, 0x000F7, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html4_13F[] = { {"sdot", 4, 0x022C5, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html4_143[] = { {"reg", 3, 0x000AE, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html4_149[] = { {"real", 4, 0x0211C, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html4_14B[] = { {"Scaron", 6, 0x00160, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html4_14F[] = { {"cent", 4, 0x000A2, 0}, {"oslash", 6, 0x000F8, 0}, {"tau", 3, 0x003C4, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html4_150[] = { {"thorn", 5, 0x000FE, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html4_153[] = { {"ndash", 5, 0x02013, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html4_154[] = { {"piv", 3, 0x003D6, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html4_155[] = { {"ocirc", 5, 0x000F4, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html4_156[] = { {"Aring", 5, 0x000C5, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html4_158[] = { {"nbsp", 4, 0x000A0, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html4_15C[] = { {"Iuml", 4, 0x000CF, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html4_15F[] = { {"rsquo", 5, 0x02019, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html4_160[] = { {"rsaquo", 6, 0x0203A, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html4_163[] = { {"hellip", 6, 0x02026, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html4_166[] = { {"Otilde", 6, 0x000D5, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html4_16B[] = { {"scaron", 6, 0x00161, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html4_16C[] = { {"Yuml", 4, 0x00178, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html4_16E[] = { {"sup1", 4, 0x000B9, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html4_16F[] = { {"sup2", 4, 0x000B2, 0}, {"Delta", 5, 0x00394, 0}, {"sbquo", 5, 0x0201A, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html4_170[] = { {"sup3", 4, 0x000B3, 0}, {"lrm", 3, 0x0200E, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html4_173[] = { {"diams", 5, 0x02666, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html4_175[] = { {"OElig", 5, 0x00152, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html4_176[] = { {"aring", 5, 0x000E5, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html4_178[] = { {"oplus", 5, 0x02295, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html4_17C[] = { {"iuml", 4, 0x000EF, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html4_17F[] = { {"Egrave", 6, 0x000C8, 0}, {"uArr", 4, 0x021D1, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html4_181[] = { {"Beta", 4, 0x00392, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html4_183[] = { {"nabla", 5, 0x02207, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html4_186[] = { {"ETH", 3, 0x000D0, 0}, {"otilde", 6, 0x000F5, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html4_187[] = { {"laquo", 5, 0x000AB, 0}, {"times", 5, 0x000D7, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html4_18C[] = { {"yuml", 4, 0x000FF, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html4_18D[] = { {"cup", 3, 0x0222A, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html4_18E[] = { {"Rho", 3, 0x003A1, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html4_18F[] = { {"Ugrave", 6, 0x000D9, 0}, {"delta", 5, 0x003B4, 0}, {"equiv", 5, 0x02261, 0}, {"sub", 3, 0x02282, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html4_194[] = { {"curren", 6, 0x000A4, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html4_196[] = { {"not", 3, 0x000AC, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html4_197[] = { {"acute", 5, 0x000B4, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html4_19A[] = { {"prod", 4, 0x0220F, 0}, {"sum", 3, 0x02211, 0}, {"lsaquo", 6, 0x02039, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html4_19C[] = { {"Eacute", 6, 0x000C9, 0}, {"Omicron", 7, 0x0039F, 0}, {"sigmaf", 6, 0x003C2, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html4_19D[] = { {"sup", 3, 0x02283, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html4_19F[] = { {"egrave", 6, 0x000E8, 0}, {"uarr", 4, 0x02191, 0}, {"lowast", 6, 0x02217, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html4_1A0[] = { {"zwj", 3, 0x0200D, 0}, {"bdquo", 5, 0x0201E, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html4_1A1[] = { {"beta", 4, 0x003B2, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html4_1A2[] = { {"Ouml", 4, 0x000D6, 0}, {"supe", 4, 0x02287, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html4_1A4[] = { {"plusmn", 6, 0x000B1, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html4_1A6[] = { {"cedil", 5, 0x000B8, 0}, {"prop", 4, 0x0221D, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html4_1A7[] = { {"lang", 4, 0x02329, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html4_1A8[] = { {"radic", 5, 0x0221A, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html4_1A9[] = { {"para", 4, 0x000B6, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html4_1AC[] = { {"Uacute", 6, 0x000DA, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html4_1AE[] = { {"szlig", 5, 0x000DF, 0}, {"rho", 3, 0x003C1, 0}, {"lceil", 5, 0x02308, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html4_1AF[] = { {"ugrave", 6, 0x000F9, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html4_1B0[] = { {"rdquo", 5, 0x0201D, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html4_1B5[] = { {"deg", 3, 0x000B0, 0}, {"trade", 5, 0x02122, 0}, {"oelig", 5, 0x00153, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html4_1B9[] = { {"Chi", 3, 0x003A7, 0}, {"rfloor", 6, 0x0230B, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html4_1BC[] = { {"eacute", 6, 0x000E9, 0}, {"omicron", 7, 0x003BF, 0}, {"part", 4, 0x02202, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html4_1BE[] = { {"clubs", 5, 0x02663, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html4_1BF[] = { {"Epsilon", 7, 0x00395, 0}, {"Eta", 3, 0x00397, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html4_1C2[] = { {"ouml", 4, 0x000F6, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html4_1C4[] = { {"#039", 4, 0x00027, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html4_1C9[] = { {"Ograve", 6, 0x000D2, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html4_1CC[] = { {"uacute", 6, 0x000FA, 0}, {"cong", 4, 0x02245, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html4_1CF[] = { {"Upsilon", 7, 0x003A5, 0}, {"asymp", 5, 0x02248, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html4_1D0[] = { {"ordf", 4, 0x000AA, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html4_1D4[] = { {"sube", 4, 0x02286, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html4_1D7[] = { {"ordm", 4, 0x000BA, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html4_1D8[] = { {"Euml", 4, 0x000CB, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html4_1D9[] = { {"chi", 3, 0x003C7, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html4_1DD[] = { {"nsub", 4, 0x02284, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html4_1DF[] = { {"epsilon", 7, 0x003B5, 0}, {"eta", 3, 0x003B7, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html4_1E6[] = { {"Oacute", 6, 0x000D3, 0}, {"eth", 3, 0x000F0, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html4_1E8[] = { {"Uuml", 4, 0x000DC, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html4_1E9[] = { {"ograve", 6, 0x000F2, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html4_1ED[] = { {"rang", 4, 0x0232A, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html4_1EF[] = { {"upsilon", 7, 0x003C5, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html4_1F1[] = { {"ge", 2, 0x02265, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html4_1F2[] = { {"Kappa", 5, 0x0039A, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html4_1F3[] = { {"lfloor", 6, 0x0230A, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html4_1F4[] = { {"sect", 4, 0x000A7, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html4_1F6[] = { {"otimes", 6, 0x02297, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html4_1F8[] = { {"euml", 4, 0x000EB, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_html4_1F9[] = { {"shy", 3, 0x000AD, 0}, {NULL, 0, 0, 0} };

static const entity_cp_map *const ht_buckets_html4[] = {
	ht_bucket_html4_000, ht_bucket_empty, ht_bucket_empty, ht_bucket_html4_003,
	ht_bucket_empty, ht_bucket_empty, ht_bucket_html4_006, ht_bucket_empty,
	ht_bucket_html4_008, ht_bucket_empty, ht_bucket_empty, ht_bucket_html4_00B,
	ht_bucket_empty, ht_bucket_empty, ht_bucket_html4_00E, ht_bucket_empty,
	ht_bucket_empty, ht_bucket_empty, ht_bucket_html4_012, ht_bucket_empty,
	ht_bucket_empty, ht_bucket_empty, ht_bucket_html4_016, ht_bucket_empty,
	ht_bucket_html4_018, ht_bucket_empty, ht_bucket_empty, ht_bucket_html4_01B,
	ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
	ht_bucket_html4_020, ht_bucket_empty, ht_bucket_empty, ht_bucket_html4_023,
	ht_bucket_empty, ht_bucket_empty, ht_bucket_html4_026, ht_bucket_html4_027,
	ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html4_02B,
	ht_bucket_html4_02C, ht_bucket_empty, ht_bucket_empty, ht_bucket_html4_02F,
	ht_bucket_html4_030, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
	ht_bucket_html4_034, ht_bucket_empty, ht_bucket_html4_036, ht_bucket_empty,
	ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html4_03B,
	ht_bucket_html4_03C, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
	ht_bucket_html4_040, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
	ht_bucket_empty, ht_bucket_empty, ht_bucket_html4_046, ht_bucket_html4_047,
	ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html4_04B,
	ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html4_04F,
	ht_bucket_html4_050, ht_bucket_html4_051, ht_bucket_empty, ht_bucket_empty,
	ht_bucket_html4_054, ht_bucket_empty, ht_bucket_html4_056, ht_bucket_empty,
	ht_bucket_empty, ht_bucket_html4_059, ht_bucket_empty, ht_bucket_html4_05B,
	ht_bucket_html4_05C, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
	ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
	ht_bucket_html4_064, ht_bucket_empty, ht_bucket_empty, ht_bucket_html4_067,
	ht_bucket_empty, ht_bucket_html4_069, ht_bucket_empty, ht_bucket_empty,
	ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
	ht_bucket_empty, ht_bucket_html4_071, ht_bucket_html4_072, ht_bucket_empty,
	ht_bucket_html4_074, ht_bucket_empty, ht_bucket_html4_076, ht_bucket_empty,
	ht_bucket_html4_078, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
	ht_bucket_html4_07C, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
	ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
	ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
	ht_bucket_empty, ht_bucket_html4_089, ht_bucket_empty, ht_bucket_empty,
	ht_bucket_empty, ht_bucket_html4_08D, ht_bucket_html4_08E, ht_bucket_empty,
	ht_bucket_empty, ht_bucket_html4_091, ht_bucket_html4_092, ht_bucket_empty,
	ht_bucket_empty, ht_bucket_empty, ht_bucket_html4_096, ht_bucket_empty,
	ht_bucket_html4_098, ht_bucket_html4_099, ht_bucket_empty, ht_bucket_empty,
	ht_bucket_empty, ht_bucket_html4_09D, ht_bucket_empty, ht_bucket_empty,
	ht_bucket_html4_0A0, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
	ht_bucket_empty, ht_bucket_html4_0A5, ht_bucket_empty, ht_bucket_html4_0A7,
	ht_bucket_html4_0A8, ht_bucket_empty, ht_bucket_html4_0AA, ht_bucket_empty,
	ht_bucket_empty, ht_bucket_empty, ht_bucket_html4_0AE, ht_bucket_empty,
	ht_bucket_html4_0B0, ht_bucket_empty, ht_bucket_html4_0B2, ht_bucket_empty,
	ht_bucket_html4_0B4, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
	ht_bucket_html4_0B8, ht_bucket_html4_0B9, ht_bucket_html4_0BA, ht_bucket_empty,
	ht_bucket_html4_0BC, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
	ht_bucket_empty, ht_bucket_empty, ht_bucket_html4_0C2, ht_bucket_empty,
	ht_bucket_html4_0C4, ht_bucket_html4_0C5, ht_bucket_html4_0C6, ht_bucket_html4_0C7,
	ht_bucket_html4_0C8, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
	ht_bucket_empty, ht_bucket_empty, ht_bucket_html4_0CE, ht_bucket_empty,
	ht_bucket_empty, ht_bucket_empty, ht_bucket_html4_0D2, ht_bucket_empty,
	ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
	ht_bucket_html4_0D8, ht_bucket_empty, ht_bucket_empty, ht_bucket_html4_0DB,
	ht_bucket_html4_0DC, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
	ht_bucket_empty, ht_bucket_empty, ht_bucket_html4_0E2, ht_bucket_empty,
	ht_bucket_empty, ht_bucket_html4_0E5, ht_bucket_html4_0E6, ht_bucket_empty,
	ht_bucket_html4_0E8, ht_bucket_empty, ht_bucket_empty, ht_bucket_html4_0EB,
	ht_bucket_empty, ht_bucket_empty, ht_bucket_html4_0EE, ht_bucket_empty,
	ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
	ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
	ht_bucket_empty, ht_bucket_html4_0F9, ht_bucket_html4_0FA, ht_bucket_html4_0FB,
	ht_bucket_empty, ht_bucket_empty, ht_bucket_html4_0FE, ht_bucket_html4_0FF,
	ht_bucket_html4_100, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
	ht_bucket_empty, ht_bucket_html4_105, ht_bucket_html4_106, ht_bucket_empty,
	ht_bucket_html4_108, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
	ht_bucket_empty, ht_bucket_html4_10D, ht_bucket_html4_10E, ht_bucket_html4_10F,
	ht_bucket_empty, ht_bucket_html4_111, ht_bucket_empty, ht_bucket_html4_113,
	ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html4_117,
	ht_bucket_html4_118, ht_bucket_empty, ht_bucket_html4_11A, ht_bucket_html4_11B,
	ht_bucket_empty, ht_bucket_empty, ht_bucket_html4_11E, ht_bucket_html4_11F,
	ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
	ht_bucket_empty, ht_bucket_html4_125, ht_bucket_html4_126, ht_bucket_empty,
	ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
	ht_bucket_empty, ht_bucket_empty, ht_bucket_html4_12E, ht_bucket_html4_12F,
	ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
	ht_bucket_empty, ht_bucket_html4_135, ht_bucket_html4_136, ht_bucket_empty,
	ht_bucket_html4_138, ht_bucket_empty, ht_bucket_html4_13A, ht_bucket_empty,
	ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html4_13F,
	ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html4_143,
	ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
	ht_bucket_empty, ht_bucket_html4_149, ht_bucket_empty, ht_bucket_html4_14B,
	ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html4_14F,
	ht_bucket_html4_150, ht_bucket_empty, ht_bucket_empty, ht_bucket_html4_153,
	ht_bucket_html4_154, ht_bucket_html4_155, ht_bucket_html4_156, ht_bucket_empty,
	ht_bucket_html4_158, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
	ht_bucket_html4_15C, ht_bucket_empty, ht_bucket_empty, ht_bucket_html4_15F,
	ht_bucket_html4_160, ht_bucket_empty, ht_bucket_empty, ht_bucket_html4_163,
	ht_bucket_empty, ht_bucket_empty, ht_bucket_html4_166, ht_bucket_empty,
	ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html4_16B,
	ht_bucket_html4_16C, ht_bucket_empty, ht_bucket_html4_16E, ht_bucket_html4_16F,
	ht_bucket_html4_170, ht_bucket_empty, ht_bucket_empty, ht_bucket_html4_173,
	ht_bucket_empty, ht_bucket_html4_175, ht_bucket_html4_176, ht_bucket_empty,
	ht_bucket_html4_178, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
	ht_bucket_html4_17C, ht_bucket_empty, ht_bucket_empty, ht_bucket_html4_17F,
	ht_bucket_empty, ht_bucket_html4_181, ht_bucket_empty, ht_bucket_html4_183,
	ht_bucket_empty, ht_bucket_empty, ht_bucket_html4_186, ht_bucket_html4_187,
	ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
	ht_bucket_html4_18C, ht_bucket_html4_18D, ht_bucket_html4_18E, ht_bucket_html4_18F,
	ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
	ht_bucket_html4_194, ht_bucket_empty, ht_bucket_html4_196, ht_bucket_html4_197,
	ht_bucket_empty, ht_bucket_empty, ht_bucket_html4_19A, ht_bucket_empty,
	ht_bucket_html4_19C, ht_bucket_html4_19D, ht_bucket_empty, ht_bucket_html4_19F,
	ht_bucket_html4_1A0, ht_bucket_html4_1A1, ht_bucket_html4_1A2, ht_bucket_empty,
	ht_bucket_html4_1A4, ht_bucket_empty, ht_bucket_html4_1A6, ht_bucket_html4_1A7,
	ht_bucket_html4_1A8, ht_bucket_html4_1A9, ht_bucket_empty, ht_bucket_empty,
	ht_bucket_html4_1AC, ht_bucket_empty, ht_bucket_html4_1AE, ht_bucket_html4_1AF,
	ht_bucket_html4_1B0, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
	ht_bucket_empty, ht_bucket_html4_1B5, ht_bucket_empty, ht_bucket_empty,
	ht_bucket_empty, ht_bucket_html4_1B9, ht_bucket_empty, ht_bucket_empty,
	ht_bucket_html4_1BC, ht_bucket_empty, ht_bucket_html4_1BE, ht_bucket_html4_1BF,
	ht_bucket_empty, ht_bucket_empty, ht_bucket_html4_1C2, ht_bucket_empty,
	ht_bucket_html4_1C4, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
	ht_bucket_empty, ht_bucket_html4_1C9, ht_bucket_empty, ht_bucket_empty,
	ht_bucket_html4_1CC, ht_bucket_empty, ht_bucket_empty, ht_bucket_html4_1CF,
	ht_bucket_html4_1D0, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
	ht_bucket_html4_1D4, ht_bucket_empty, ht_bucket_empty, ht_bucket_html4_1D7,
	ht_bucket_html4_1D8, ht_bucket_html4_1D9, ht_bucket_empty, ht_bucket_empty,
	ht_bucket_empty, ht_bucket_html4_1DD, ht_bucket_empty, ht_bucket_html4_1DF,
	ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
	ht_bucket_empty, ht_bucket_empty, ht_bucket_html4_1E6, ht_bucket_empty,
	ht_bucket_html4_1E8, ht_bucket_html4_1E9, ht_bucket_empty, ht_bucket_empty,
	ht_bucket_empty, ht_bucket_html4_1ED, ht_bucket_empty, ht_bucket_html4_1EF,
	ht_bucket_empty, ht_bucket_html4_1F1, ht_bucket_html4_1F2, ht_bucket_html4_1F3,
	ht_bucket_html4_1F4, ht_bucket_empty, ht_bucket_html4_1F6, ht_bucket_empty,
	ht_bucket_html4_1F8, ht_bucket_html4_1F9, ht_bucket_empty, ht_bucket_empty,
	ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
};

static const entity_ht ent_ht_html4 = {
	0x200,
	ht_buckets_html4
};

/* end of HTML 4.01 hash table for entity -> codepoint }}} */

/* {{{ Start of Basic entities (no apos) table for codepoint -> entity */

static const entity_stage3_row stage3_table_be_noapos_00000[] = {
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {"quot", 4} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {"amp", 3} } }, {0, { {"#039", 4} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {"lt", 2} } }, {0, { {NULL, 0} } }, {0, { {"gt", 2} } }, {0, { {NULL, 0} } },
};

/* {{{ Basic entities (no apos) hash table for entity -> codepoint */

static const entity_cp_map ht_bucket_be_noapos_000[] = { {"gt", 2, 0x0003E, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_be_noapos_003[] = { {"amp", 3, 0x00026, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_be_noapos_004[] = { {"#039", 4, 0x00027, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_be_noapos_005[] = { {"lt", 2, 0x0003C, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_be_noapos_00E[] = { {"quot", 4, 0x00022, 0}, {NULL, 0, 0, 0} };

static const entity_cp_map *const ht_buckets_be_noapos[] = {
	ht_bucket_be_noapos_000, ht_bucket_empty, ht_bucket_empty, ht_bucket_be_noapos_003,
	ht_bucket_be_noapos_004, ht_bucket_be_noapos_005, ht_bucket_empty, ht_bucket_empty,
	ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
	ht_bucket_empty, ht_bucket_empty, ht_bucket_be_noapos_00E, ht_bucket_empty,
};

static const entity_ht ent_ht_be_noapos = {
	0x10,
	ht_buckets_be_noapos
};

/* end of Basic entities (no apos) hash table for entity -> codepoint }}} */

/* {{{ Start of Basic entities (with apos) table for codepoint -> entity */

static const entity_stage3_row stage3_table_be_apos_00000[] = {
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {"quot", 4} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {"amp", 3} } }, {0, { {"apos", 4} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } },
	{0, { {"lt", 2} } }, {0, { {NULL, 0} } }, {0, { {"gt", 2} } }, {0, { {NULL, 0} } },
};

/* {{{ Basic entities (with apos) hash table for entity -> codepoint */

static const entity_cp_map ht_bucket_be_apos_000[] = { {"gt", 2, 0x0003E, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_be_apos_003[] = { {"amp", 3, 0x00026, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_be_apos_005[] = { {"lt", 2, 0x0003C, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_be_apos_008[] = { {"apos", 4, 0x00027, 0}, {NULL, 0, 0, 0} };
static const entity_cp_map ht_bucket_be_apos_00E[] = { {"quot", 4, 0x00022, 0}, {NULL, 0, 0, 0} };

static const entity_cp_map *const ht_buckets_be_apos[] = {
	ht_bucket_be_apos_000, ht_bucket_empty, ht_bucket_empty, ht_bucket_be_apos_003,
	ht_bucket_empty, ht_bucket_be_apos_005, ht_bucket_empty, ht_bucket_empty,
	ht_bucket_be_apos_008, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty,
	ht_bucket_empty, ht_bucket_empty, ht_bucket_be_apos_00E, ht_bucket_empty,
};

static const entity_ht ent_ht_be_apos = {
	0x10,
	ht_buckets_be_apos
};

/* end of Basic entities (with apos) hash table for entity -> codepoint }}} */

#endif /* HTML_TABLES_H */
ext/standard/php_image.h000064400000006025151730542620011256 0ustar00/*
   +----------------------------------------------------------------------+
   | Copyright (c) The PHP Group                                          |
   +----------------------------------------------------------------------+
   | This source file is subject to version 3.01 of the PHP license,      |
   | that is bundled with this package in the file LICENSE, and is        |
   | available through the world-wide-web at the following url:           |
   | https://www.php.net/license/3_01.txt                                 |
   | If you did not receive a copy of the PHP license and are unable to   |
   | obtain it through the world-wide-web, please send a note to          |
   | license@php.net so we can mail you a copy immediately.               |
   +----------------------------------------------------------------------+
   | Authors: Rasmus Lerdorf <rasmus@php.net>                             |
   |          Marcus Boerger <helly@php.net>                              |
   +----------------------------------------------------------------------+
*/

#ifndef PHP_IMAGE_H
#define PHP_IMAGE_H

PHP_MINIT_FUNCTION(image);
PHP_MSHUTDOWN_FUNCTION(image);

/* {{{ enum image_filetype
   This enum is used to have ext/standard/image.c and ext/exif/exif.c use
   the same constants for file types.
*/
typedef enum
{ IMAGE_FILETYPE_UNKNOWN=0,
  IMAGE_FILETYPE_GIF=1,
  IMAGE_FILETYPE_JPEG,
  IMAGE_FILETYPE_PNG,
  IMAGE_FILETYPE_SWF,
  IMAGE_FILETYPE_PSD,
  IMAGE_FILETYPE_BMP,
  IMAGE_FILETYPE_TIFF_II, /* intel */
  IMAGE_FILETYPE_TIFF_MM, /* motorola */
  IMAGE_FILETYPE_JPC,
  IMAGE_FILETYPE_JP2,
  IMAGE_FILETYPE_JPX,
  IMAGE_FILETYPE_JB2,
  IMAGE_FILETYPE_SWC,
  IMAGE_FILETYPE_IFF,
  IMAGE_FILETYPE_WBMP,
  /* IMAGE_FILETYPE_JPEG2000 is a userland alias for IMAGE_FILETYPE_JPC */
  IMAGE_FILETYPE_XBM,
  IMAGE_FILETYPE_ICO,
  IMAGE_FILETYPE_WEBP,
  IMAGE_FILETYPE_AVIF,
  IMAGE_FILETYPE_HEIF,
/* WHEN EXTENDING: PLEASE ALSO REGISTER IN basic_function.stub.php */
  IMAGE_FILETYPE_FIXED_COUNT
} image_filetype;
/* }}} */

PHPAPI int php_getimagetype(php_stream *stream, const char *input, char *filetype);

PHPAPI const char * php_image_type_to_mime_type(int image_type);

PHPAPI bool php_is_image_avif(php_stream *stream);

/* return info as a struct, to make expansion easier */
struct php_gfxinfo {
	unsigned int width;
	unsigned int height;
	zend_string *width_unit;
	zend_string *height_unit;
	unsigned int bits;
	unsigned int channels;
};

typedef zend_result (*php_image_identify)(php_stream *stream);
typedef struct php_gfxinfo *(*php_image_get_info)(php_stream *stream);

struct php_image_handler {
	const char *mime_type;
	const char *extension;
	const char *const_name;
	php_image_identify identify;
	php_image_get_info get_info;
};

#define PHP_IMAGE_CONST_NAME(suffix) ("IMAGETYPE_" suffix)

/* This should only be called on module init */
PHPAPI int php_image_register_handler(const struct php_image_handler *handler);
/* This should only be called on module shutdown */
PHPAPI zend_result php_image_unregister_handler(int image_type);

#endif /* PHP_IMAGE_H */
ext/standard/head.h000064400000003142151730542620010223 0ustar00/*
   +----------------------------------------------------------------------+
   | Copyright (c) The PHP Group                                          |
   +----------------------------------------------------------------------+
   | This source file is subject to version 3.01 of the PHP license,      |
   | that is bundled with this package in the file LICENSE, and is        |
   | available through the world-wide-web at the following url:           |
   | https://www.php.net/license/3_01.txt                                 |
   | If you did not receive a copy of the PHP license and are unable to   |
   | obtain it through the world-wide-web, please send a note to          |
   | license@php.net so we can mail you a copy immediately.               |
   +----------------------------------------------------------------------+
   | Author: Rasmus Lerdorf <rasmus@lerdorf.on.ca>                        |
   +----------------------------------------------------------------------+
*/

#ifndef HEAD_H
#define HEAD_H

#define COOKIE_EXPIRES     "; expires="
#define COOKIE_MAX_AGE     "; Max-Age="
#define COOKIE_DOMAIN      "; domain="
#define COOKIE_PATH        "; path="
#define COOKIE_SECURE      "; secure"
#define COOKIE_HTTPONLY    "; HttpOnly"
#define COOKIE_SAMESITE    "; SameSite="
#define COOKIE_PARTITIONED "; Partitioned"

extern PHP_RINIT_FUNCTION(head);

PHPAPI bool php_header(void);
PHPAPI zend_result php_setcookie(zend_string *name, zend_string *value, time_t expires,
	zend_string *path, zend_string *domain, bool secure, bool httponly,
	zend_string *samesite, bool partitioned, bool url_encode);

#endif
ext/standard/php_ext_syslog.h000064400000002251151730542630012372 0ustar00/*
   +----------------------------------------------------------------------+
   | Copyright (c) The PHP Group                                          |
   +----------------------------------------------------------------------+
   | This source file is subject to version 3.01 of the PHP license,      |
   | that is bundled with this package in the file LICENSE, and is        |
   | available through the world-wide-web at the following url:           |
   | https://www.php.net/license/3_01.txt                                 |
   | If you did not receive a copy of the PHP license and are unable to   |
   | obtain it through the world-wide-web, please send a note to          |
   | license@php.net so we can mail you a copy immediately.               |
   +----------------------------------------------------------------------+
   | Author: Stig Sæther Bakken <ssb@php.net>                             |
   +----------------------------------------------------------------------+
*/

#ifndef PHP_EXT_SYSLOG_H
#define PHP_EXT_SYSLOG_H

#ifdef HAVE_SYSLOG_H

#include "php_syslog.h"

PHP_MINIT_FUNCTION(syslog);
PHP_RSHUTDOWN_FUNCTION(syslog);

#endif

#endif /* PHP_EXT_SYSLOG_H */
ext/standard/pageinfo.h000064400000002234151730542630011114 0ustar00/*
   +----------------------------------------------------------------------+
   | Copyright (c) The PHP Group                                          |
   +----------------------------------------------------------------------+
   | This source file is subject to version 3.01 of the PHP license,      |
   | that is bundled with this package in the file LICENSE, and is        |
   | available through the world-wide-web at the following url:           |
   | https://www.php.net/license/3_01.txt                                 |
   | If you did not receive a copy of the PHP license and are unable to   |
   | obtain it through the world-wide-web, please send a note to          |
   | license@php.net so we can mail you a copy immediately.               |
   +----------------------------------------------------------------------+
   | Author: Jim Winstead <jimw@php.net>                                  |
   +----------------------------------------------------------------------+
*/

#ifndef PAGEINFO_H
#define PAGEINFO_H

PHPAPI void php_statpage(void);
PHPAPI time_t php_getlastmod(void);
extern zend_long php_getuid(void);
extern zend_long php_getgid(void);

#endif
ext/standard/base64.h000064400000007655151730542630010424 0ustar00/*
   +----------------------------------------------------------------------+
   | Copyright (c) The PHP Group                                          |
   +----------------------------------------------------------------------+
   | This source file is subject to version 3.01 of the PHP license,      |
   | that is bundled with this package in the file LICENSE, and is        |
   | available through the world-wide-web at the following url:           |
   | https://www.php.net/license/3_01.txt                                 |
   | If you did not receive a copy of the PHP license and are unable to   |
   | obtain it through the world-wide-web, please send a note to          |
   | license@php.net so we can mail you a copy immediately.               |
   +----------------------------------------------------------------------+
   | Author: Jim Winstead <jimw@php.net>                                  |
   |         Xinchen Hui <laruence@php.net>                               |
   +----------------------------------------------------------------------+
*/

#ifndef BASE64_H
#define BASE64_H

/*
 * NEON and AVX512 implementation are based on https://github.com/WojciechMula/base64simd
 * which is copyrighted to:
 * Copyright (c) 2015-2018, Wojciech Mula
 * All rights reserved.
 *
 * SSSE3 and AVX2 implementation are based on https://github.com/aklomp/base64
 * which is copyrighted to:
 *
 * Copyright (c) 2005-2007, Nick Galbreath
 * Copyright (c) 2013-2017, Alfred Klomp
 * Copyright (c) 2015-2017, Wojciech Mula
 * Copyright (c) 2016-2017, Matthieu Darbois
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions are
 * met:
 *
 * - Redistributions of source code must retain the above copyright notice,
 *   this list of conditions and the following disclaimer.
 *
 * - Redistributions in binary form must reproduce the above copyright
 *   notice, this list of conditions and the following disclaimer in the
 *   documentation and/or other materials provided with the distribution.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
 * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
 * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
 * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
 * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
 * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
 * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
 * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 */

#if (defined(ZEND_INTRIN_AVX2_FUNC_PTR) || defined(ZEND_INTRIN_SSSE3_FUNC_PTR) || defined(ZEND_INTRIN_AVX512_FUNC_PTR) || defined(ZEND_INTRIN_AVX512_VBMI_FUNC_PTR)) && !defined(ZEND_INTRIN_AVX2_NATIVE)
PHP_MINIT_FUNCTION(base64_intrin);
#endif

/* php_base64_encode_ex flags */
#define PHP_BASE64_NO_PADDING 1

PHPAPI extern zend_string *php_base64_encode_ex(const unsigned char *, size_t, zend_long flags);
PHPAPI extern zend_string *php_base64_decode_ex(const unsigned char *, size_t, bool);

static inline zend_string *php_base64_encode(const unsigned char *str, size_t len) {
	return php_base64_encode_ex(str, len, 0);
}
static inline zend_string *php_base64_encode_str(const zend_string *str) {
	return php_base64_encode((const unsigned char*)(ZSTR_VAL(str)), ZSTR_LEN(str));
}

static inline zend_string *php_base64_decode(const unsigned char *str, size_t len) {
	return php_base64_decode_ex(str, len, 0);
}
static inline zend_string *php_base64_decode_str(const zend_string *str) {
	return php_base64_decode_ex((const unsigned char*)(ZSTR_VAL(str)), ZSTR_LEN(str), 0);
}

#endif /* BASE64_H */
ext/standard/dir_arginfo.h000064400000006506151730542630011615 0ustar00/* This is a generated file, edit the .stub.php file instead.
 * Stub hash: e21d382cd4001001874c49d8c5244efb57613910 */

ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_class_Directory_close, 0, 0, IS_VOID, 0)
ZEND_END_ARG_INFO()

#define arginfo_class_Directory_rewind arginfo_class_Directory_close

ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_class_Directory_read, 0, 0, MAY_BE_STRING|MAY_BE_FALSE)
ZEND_END_ARG_INFO()

ZEND_METHOD(Directory, close);
ZEND_METHOD(Directory, rewind);
ZEND_METHOD(Directory, read);

static const zend_function_entry class_Directory_methods[] = {
	ZEND_ME(Directory, close, arginfo_class_Directory_close, ZEND_ACC_PUBLIC)
	ZEND_ME(Directory, rewind, arginfo_class_Directory_rewind, ZEND_ACC_PUBLIC)
	ZEND_ME(Directory, read, arginfo_class_Directory_read, ZEND_ACC_PUBLIC)
	ZEND_FE_END
};

static void register_dir_symbols(int module_number)
{
	REGISTER_STRING_CONSTANT("DIRECTORY_SEPARATOR", dirsep_str, CONST_PERSISTENT);
	REGISTER_STRING_CONSTANT("PATH_SEPARATOR", pathsep_str, CONST_PERSISTENT);
#if (defined(PHP_GLOB_BRACE) && PHP_GLOB_BRACE != 0)
	REGISTER_LONG_CONSTANT("GLOB_BRACE", PHP_GLOB_BRACE, CONST_PERSISTENT);
#endif
#if (defined(PHP_GLOB_ERR) && PHP_GLOB_ERR != 0)
	REGISTER_LONG_CONSTANT("GLOB_ERR", PHP_GLOB_ERR, CONST_PERSISTENT);
#endif
#if (defined(PHP_GLOB_MARK) && PHP_GLOB_MARK != 0)
	REGISTER_LONG_CONSTANT("GLOB_MARK", PHP_GLOB_MARK, CONST_PERSISTENT);
#endif
#if (defined(PHP_GLOB_NOCHECK) && PHP_GLOB_NOCHECK != 0)
	REGISTER_LONG_CONSTANT("GLOB_NOCHECK", PHP_GLOB_NOCHECK, CONST_PERSISTENT);
#endif
#if (defined(PHP_GLOB_NOESCAPE) && PHP_GLOB_NOESCAPE != 0)
	REGISTER_LONG_CONSTANT("GLOB_NOESCAPE", PHP_GLOB_NOESCAPE, CONST_PERSISTENT);
#endif
#if (defined(PHP_GLOB_NOSORT) && PHP_GLOB_NOSORT != 0)
	REGISTER_LONG_CONSTANT("GLOB_NOSORT", PHP_GLOB_NOSORT, CONST_PERSISTENT);
#endif
#if (defined(PHP_GLOB_ONLYDIR) && PHP_GLOB_ONLYDIR != 0)
	REGISTER_LONG_CONSTANT("GLOB_ONLYDIR", PHP_GLOB_ONLYDIR, CONST_PERSISTENT);
#endif
#if defined(PHP_GLOB_AVAILABLE_FLAGS)
	REGISTER_LONG_CONSTANT("GLOB_AVAILABLE_FLAGS", PHP_GLOB_AVAILABLE_FLAGS, CONST_PERSISTENT);
#endif
	REGISTER_LONG_CONSTANT("SCANDIR_SORT_ASCENDING", PHP_SCANDIR_SORT_ASCENDING, CONST_PERSISTENT);
	REGISTER_LONG_CONSTANT("SCANDIR_SORT_DESCENDING", PHP_SCANDIR_SORT_DESCENDING, CONST_PERSISTENT);
	REGISTER_LONG_CONSTANT("SCANDIR_SORT_NONE", PHP_SCANDIR_SORT_NONE, CONST_PERSISTENT);
}

static zend_class_entry *register_class_Directory(void)
{
	zend_class_entry ce, *class_entry;

	INIT_CLASS_ENTRY(ce, "Directory", class_Directory_methods);
	class_entry = zend_register_internal_class_with_flags(&ce, NULL, ZEND_ACC_FINAL|ZEND_ACC_NO_DYNAMIC_PROPERTIES|ZEND_ACC_NOT_SERIALIZABLE);

	zval property_path_default_value;
	ZVAL_UNDEF(&property_path_default_value);
	zend_declare_typed_property(class_entry, ZSTR_KNOWN(ZEND_STR_PATH), &property_path_default_value, ZEND_ACC_PUBLIC|ZEND_ACC_READONLY, NULL, (zend_type) ZEND_TYPE_INIT_MASK(MAY_BE_STRING));

	zval property_handle_default_value;
	ZVAL_UNDEF(&property_handle_default_value);
	zend_string *property_handle_name = zend_string_init("handle", sizeof("handle") - 1, 1);
	zend_declare_typed_property(class_entry, property_handle_name, &property_handle_default_value, ZEND_ACC_PUBLIC|ZEND_ACC_READONLY, NULL, (zend_type) ZEND_TYPE_INIT_MASK(MAY_BE_ANY));
	zend_string_release(property_handle_name);

	return class_entry;
}
ext/standard/php_standard.h000064400000003474151730542640012003 0ustar00/*
   +----------------------------------------------------------------------+
   | Copyright (c) The PHP Group                                          |
   +----------------------------------------------------------------------+
   | This source file is subject to version 3.01 of the PHP license,      |
   | that is bundled with this package in the file LICENSE, and is        |
   | available through the world-wide-web at the following url:           |
   | https://www.php.net/license/3_01.txt                                 |
   | If you did not receive a copy of the PHP license and are unable to   |
   | obtain it through the world-wide-web, please send a note to          |
   | license@php.net so we can mail you a copy immediately.               |
   +----------------------------------------------------------------------+
   | Author:                                                              |
   +----------------------------------------------------------------------+
*/

#include "basic_functions.h"
#include "php_math.h"
#include "php_string.h"
#include "base64.h"
#include "php_dir.h"
#include "php_dns.h"
#include "php_mail.h"
#include "md5.h"
#include "sha1.h"
#include "html.h"
#include "exec.h"
#include "file.h"
#include "php_ext_syslog.h"
#include "php_filestat.h"
#include "php_browscap.h"
#include "url.h"
#include "pageinfo.h"
#include "fsock.h"
#include "php_image.h"
#include "info.h"
#include "php_var.h"
#include "quot_print.h"
#include "dl.h"
#include "php_crypt.h"
#include "head.h"
#include "php_output.h"
#include "php_array.h"
#include "php_assert.h"
#include "php_versioning.h"
#include "php_password.h"

#include "php_version.h"
#define PHP_STANDARD_VERSION PHP_VERSION

#define phpext_standard_ptr basic_functions_module_ptr
PHP_MINIT_FUNCTION(standard_filters);
PHP_MSHUTDOWN_FUNCTION(standard_filters);
ext/standard/php_filestat.h000064400000004153151730542640012011 0ustar00/*
   +----------------------------------------------------------------------+
   | Copyright (c) The PHP Group                                          |
   +----------------------------------------------------------------------+
   | This source file is subject to version 3.01 of the PHP license,      |
   | that is bundled with this package in the file LICENSE, and is        |
   | available through the world-wide-web at the following url:           |
   | https://www.php.net/license/3_01.txt                                 |
   | If you did not receive a copy of the PHP license and are unable to   |
   | obtain it through the world-wide-web, please send a note to          |
   | license@php.net so we can mail you a copy immediately.               |
   +----------------------------------------------------------------------+
   | Author:  Jim Winstead <jimw@php.net>                                 |
   +----------------------------------------------------------------------+
*/

#ifndef PHP_FILESTAT_H
#define PHP_FILESTAT_H

PHP_RINIT_FUNCTION(filestat);
PHP_RSHUTDOWN_FUNCTION(filestat);

#ifdef PHP_WIN32
#define S_IRUSR S_IREAD
#define S_IWUSR S_IWRITE
#define S_IXUSR S_IEXEC
#define S_IRGRP S_IREAD
#define S_IWGRP S_IWRITE
#define S_IXGRP S_IEXEC
#define S_IROTH S_IREAD
#define S_IWOTH S_IWRITE
#define S_IXOTH S_IEXEC

#undef getgid
#define getgroups(a, b) 0
#define getgid() 1
#define getuid() 1
#endif

/* Compatibility. */
typedef size_t php_stat_len;

PHPAPI void php_clear_stat_cache(bool clear_realpath_cache, const char *filename, size_t filename_len);
PHPAPI void php_stat(zend_string *filename, int type, zval *return_value);

/* Switches for various filestat functions: */
#define FS_PERMS    0
#define FS_INODE    1
#define FS_SIZE     2
#define FS_OWNER    3
#define FS_GROUP    4
#define FS_ATIME    5
#define FS_MTIME    6
#define FS_CTIME    7
#define FS_TYPE     8
#define FS_IS_W     9
#define FS_IS_R    10
#define FS_IS_X    11
#define FS_IS_FILE 12
#define FS_IS_DIR  13
#define FS_IS_LINK 14
#define FS_EXISTS  15
#define FS_LSTAT   16
#define FS_STAT    17
#define FS_LPERMS  18

#endif /* PHP_FILESTAT_H */
ext/standard/css.h000064400000002056151730542640010117 0ustar00/*
   +----------------------------------------------------------------------+
   | Copyright (c) The PHP Group                                          |
   +----------------------------------------------------------------------+
   | This source file is subject to version 3.01 of the PHP license,      |
   | that is bundled with this package in the file LICENSE, and is        |
   | available through the world-wide-web at the following url:           |
   | https://www.php.net/license/3_01.txt                                 |
   | If you did not receive a copy of the PHP license and are unable to   |
   | obtain it through the world-wide-web, please send a note to          |
   | license@php.net so we can mail you a copy immediately.               |
   +----------------------------------------------------------------------+
   | Authors: Colin Viebrock <colin@viebrock.ca>                          |
   +----------------------------------------------------------------------+
*/

#ifndef CSS_H
#define CSS_H

PHPAPI void php_info_print_css(void);

#endif
ext/standard/php_uuencode.h000064400000002265151730542640012007 0ustar00/*
   +----------------------------------------------------------------------+
   | Copyright (c) The PHP Group                                          |
   +----------------------------------------------------------------------+
   | This source file is subject to version 3.01 of the PHP license,      |
   | that is bundled with this package in the file LICENSE, and is        |
   | available through the world-wide-web at the following url:           |
   | https://www.php.net/license/3_01.txt                                 |
   | If you did not receive a copy of the PHP license and are unable to   |
   | obtain it through the world-wide-web, please send a note to          |
   | license@php.net so we can mail you a copy immediately.               |
   +----------------------------------------------------------------------+
   | Author: Ilia Alshanetsky <ilia@php.net>                              |
   +----------------------------------------------------------------------+
*/

#ifndef PHP_UUENCODE_H
#define PHP_UUENCODE_H

PHPAPI zend_string *php_uudecode(const char *src, size_t src_len);
PHPAPI zend_string *php_uuencode(const char *src, size_t src_len);

#endif /* PHP_UUENCODE_H */
ext/standard/crypt_blowfish.h000064400000001426151730542650012366 0ustar00/*
 * Written by Solar Designer <solar at openwall.com> in 2000-2011.
 * No copyright is claimed, and the software is hereby placed in the public
 * domain. In case this attempt to disclaim copyright and place the software
 * in the public domain is deemed null and void, then the software is
 * Copyright (c) 2000-2011 Solar Designer and it is hereby released to the
 * general public under the following terms:
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted.
 *
 * There's ABSOLUTELY NO WARRANTY, express or implied.
 *
 * See crypt_blowfish.c for more information.
 */

#ifndef _CRYPT_BLOWFISH_H
#define _CRYPT_BLOWFISH_H

extern char *php_crypt_blowfish_rn(const char *key, const char *setting,
	char *output, int size);

#endif
ext/standard/dl.h000064400000002731151730542650007727 0ustar00/*
   +----------------------------------------------------------------------+
   | Copyright (c) The PHP Group                                          |
   +----------------------------------------------------------------------+
   | This source file is subject to version 3.01 of the PHP license,      |
   | that is bundled with this package in the file LICENSE, and is        |
   | available through the world-wide-web at the following url:           |
   | https://www.php.net/license/3_01.txt                                 |
   | If you did not receive a copy of the PHP license and are unable to   |
   | obtain it through the world-wide-web, please send a note to          |
   | license@php.net so we can mail you a copy immediately.               |
   +----------------------------------------------------------------------+
   | Authors: Brian Schaffner <brian@tool.net>                            |
   |          Shane Caraveo <shane@caraveo.com>                           |
   |          Zeev Suraski <zeev@php.net>                                 |
   +----------------------------------------------------------------------+
*/

#ifndef DL_H
#define DL_H

PHPAPI int php_load_extension(const char *filename, int type, int start_now);
PHPAPI void php_dl(const char *file, int type, zval *return_value, int start_now);
PHPAPI void *php_load_shlib(const char *path, char **errp);

/* dynamic loading functions */
PHPAPI PHP_FUNCTION(dl);

PHP_MINFO_FUNCTION(dl);

#endif /* DL_H */
ext/standard/info.h000064400000055612151730542650010271 0ustar00/*
   +----------------------------------------------------------------------+
   | Copyright (c) The PHP Group                                          |
   +----------------------------------------------------------------------+
   | This source file is subject to version 3.01 of the PHP license,      |
   | that is bundled with this package in the file LICENSE, and is        |
   | available through the world-wide-web at the following url:           |
   | https://www.php.net/license/3_01.txt                                 |
   | If you did not receive a copy of the PHP license and are unable to   |
   | obtain it through the world-wide-web, please send a note to          |
   | license@php.net so we can mail you a copy immediately.               |
   +----------------------------------------------------------------------+
   | Authors: Rasmus Lerdorf <rasmus@php.net>                             |
   |          Zeev Suraski <zeev@php.net>                                 |
   |          Colin Viebrock <colin@viebrock.ca>                          |
   +----------------------------------------------------------------------+
*/

#ifndef INFO_H
#define INFO_H

#define PHP_ENTRY_NAME_COLOR "#ccf"
#define PHP_CONTENTS_COLOR "#ccc"
#define PHP_HEADER_COLOR "#99c"

#define PHP_INFO_GENERAL			(1<<0)
#define PHP_INFO_CREDITS			(1<<1)
#define PHP_INFO_CONFIGURATION		(1<<2)
#define PHP_INFO_MODULES			(1<<3)
#define PHP_INFO_ENVIRONMENT		(1<<4)
#define PHP_INFO_VARIABLES			(1<<5)
#define PHP_INFO_LICENSE			(1<<6)
#define PHP_INFO_ALL				0xFFFFFFFF

#ifndef HAVE_CREDITS_DEFS
#define HAVE_CREDITS_DEFS

#define PHP_CREDITS_GROUP			(1<<0)
#define PHP_CREDITS_GENERAL			(1<<1)
#define PHP_CREDITS_SAPI			(1<<2)
#define PHP_CREDITS_MODULES			(1<<3)
#define PHP_CREDITS_DOCS			(1<<4)
#define PHP_CREDITS_FULLPAGE		(1<<5)
#define PHP_CREDITS_QA				(1<<6)
#define PHP_CREDITS_WEB             (1<<7)
#define PHP_CREDITS_ALL				0xFFFFFFFF

#endif /* HAVE_CREDITS_DEFS */

#define PHP_LOGO_DATA_URI "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAHkAAABACAYAAAA+j9gsAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAD4BJREFUeNrsnXtwXFUdx8/dBGihmE21QCrQDY6oZZykon/gY5qizjgM2KQMfzFAOioOA5KEh+j4R9oZH7zT6MAMKrNphZFSQreKHRgZmspLHSCJ2Co6tBtJk7Zps7tJs5t95F5/33PvWU4293F29ybdlPzaM3df2XPv+Zzf4/zOuWc1tkjl+T0HQ3SQC6SBSlD6WKN4rusGm9F1ps/o5mPriOf8dd0YoNfi0nt4ntB1PT4zYwzQkf3kR9/sW4xtpS0CmE0SyPUFUJXFMIxZcM0jAZ4xrKMudQT7963HBF0n6EaUjkP0vI9K9OEHWqJLkNW1s8mC2WgVTwGAqWTafJzTWTKZmQuZ/k1MpAi2+eys6mpWfVaAPzcILu8EVKoCAaYFtPxrAXo8qyNwzZc7gSgzgN9Hx0Ecn3j8xr4lyHOhNrlpaJIgptM5DjCdzrJ0Jmce6bWFkOpqs0MErA4gXIBuAmY53gFmOPCcdaTXCbq+n16PPLXjewMfGcgEttECeouTpk5MplhyKsPBTiXNYyULtwIW7Cx1vlwuJyDLR9L0mQiVPb27fhA54yBbGttMpc1OWwF1cmKaH2FSF7vAjGezOZZJZ9j0dIZlMhnuRiToMO0c+N4X7oksasgEt9XS2KZCHzoem2Ixq5zpAuDTqTR14FMslZyepeEI4Ogj26n0vLj33uiigExgMWRpt+CGCsEePZqoePM738BPTaJzT7CpU0nu1yXpAXCC3VeRkCW4bfJYFZo6dmJyQTW2tvZc1nb719iyZWc5fmZ6Osu6H3uVzit52oBnMll2YizGxk8muFZLAshb/YKtzQdcaO3Y2CQ7eiy+YNGvLN+4+nJetm3bxhKJxJz316xZw1pbW9kLew+w1944XBEaPj6eYCeOx1gqNe07bK1MwIDbKcOFOR49GuePT5fcfOMX2drPXcQ0zf7y2tvbWVdXF/v1k2+yQ4dPVpQ5P0Um/NjoCX6UBMFZR6k+u7qMYVBYDIEqBW7eXAfPZX19zp2/oaGBHysNMGTFinPZik9fWggbI5Omb13zUDeB3lLsdwaK/YPeyAFU0i8Aw9/2Dwyx4SPjFQEYUlf3MTYw4Jx7CIVCbHR0oqIDNMD+FMG+ZE0dO/tsHlvAWnYS6H4qjfMC+Zld/wg92/tuv2WeeYT87j+H2aFDxysGLuSy+o/z49DQkONnmpqa2MjRyoYsZOXKGnb5Z+vZqlUrxUsAvI9At/oK+elnBpoNw+Dai9TekSMxDrgSh0KrSYshTprc2NhoRf1JtlikqirAVl98AddsSavDBDrsC+QdT7/TSoB344tzOZ39+70RbporVerqasyw1MEnC8iV6I9VTDi0uqbmfPFSq2W+gyUHXuEdb3WR5rab5jnD3i/BNMN8ChNaqsTiKa55KmBWX+Tuj0XQdQVF307nhTH0CPls+O0UPbaT5TQG/8qX68u6LpV67LQ6dNknaYgaYyPDx2TzvYGCsnhRkH8b/rsF2GDj1MCInkvxvRjOuCUlipWD/zrKx7ZOwBF0vfSSM2ShyaqAAOC1Nw+zt9/5YNbrN1zfwIdpfgnqebv/A6pnWAn4qlW1HPgHQ6OeoG3N9RO/+StMdDtmV2LxJPfBpQCGfwTgrVu38jFrKaW2tpZt2LCBdXR0sEgkwhv21u9cxQsyW3ZB1+DgoOM54btU6tu8eTPr6elhy5fr7IZNDey+e76e9/fCLcAllHpdKKinpaUlX8+111xB9VzNrYxqUAY/XVVVJYMOekLu2fFGM8VWYQRYiYkU9bD4vPlHFYnH4/zvkb1CgwACHgMoUpdyw3sFXcXUh4YHaNSHDqaxdL5jwVTXBpeXVY9oF3RcUQ+O09NT7Cayfld+4RJlP42gTIq8w66Qf/X4a6FTSSMMDcaE/NhYecMM+MdyG90OAhodWoAGkTUaSZByO5WdiA4GqwStrrM6k5vFKEXQserr63l7oR5V0NBojKctaSZtbneErOtGmFxwkGewjk0UzpCUlJSIRqMcjN8CkHLDqyRByq0PEGBBhDmdj7rQVujAaLfrrlk7xyW5gUaxpEtOmOQDr0e799NYmDVBi0+OT7FcbsaXxEQk8qprEBQMBm0vVKUBRcNjskFE8W71lSt79uzhda1d6w4ZGTUUp3NWAQ3TvW/fPvbVq+rZH/ceULOcF1/I06CY3QJohCCzNJnYdgEwwvpUKuNbUsLNpO3evZtfSGHp7+/nS2pw3LLFPVWLoA5yHQUtXvXFYjH+vU4F5yOibzsRUL38MTqC3XWh8GCWziMcDjt2BNEZUIfoUOpJkwvziT3S5ua8Jj/4yD5E0yERbPkhKv4RF4mhkN1wCMHN2rWfYZ2dnWz9+vXchNkJzBoaQ8Bxqg91wWo41YdO2dzczD+3bt06Rw0rBG4nOF8oi9M0Jsw9OgLqQ124BifLgeuHyVbN0NXUrODBmDWxgRR0pNrUYqMNgDOZGZbNzvgCuc4j0kX+GPJ2//CcMagQmKkbrm/knwVEp++SIXulM1+nhj9AY207QRDnpsnye24WA59DkuPlV/5j+z5eB2hE0W1tbTyQdNJmDpksRzFp2E9csFJAboRvDvz8gZdJgw2ek55KZphfAv+Inu8UdKnmkEUHQK93EjEZ4Rbkifq8JiactEpYAy9Nli2Gm6CjIZPn1qlKFWizleOG3BIwdKNZ+KRMxr9VHKvr1NKLXo2BhlAVFRPq1qlWW6MBr3NWyY2rTGXO5ySJlN9uDuiGsV7XTVPtl8CHYGizf/9+V5Om0hAwVV4ahuU8qia03HP26kyqFkMOTudDzjs/P/QKBUiBYa5ZNucfZJUkCG/0IhpCxYyqBF3lnLOII8q1GKqdStQ3rTh5MStwXX5O/nE1metGQzPHUH6JatA1OppQ8u1eUbpX44tO4GY5vM5Z9sduFgOfG1GwUOK6VFzaSAmrWCSfzGCuuT/O+bi6QwRdTtqXN2keJ4/ejgkJ5HedRARkbkGe6ARulgMWQ+Wc3cDAWohhoZdcue7ifJ7crfP6Me8dELd0Mv8U2begC2k9SHd3t+NnNm7cqKwRbiYUkykqvlZlmOYVLIq5bHRep46JzotOc9BhuFc0ZHGLph+CJIaXr1FZSIfxsdBiN1+LpALEK2By61Aqs0rwtV7DNBU3BMCYixYTLU6C8bM5hBwum0k1mesBpmPtlj+qXFenFsAgCVLon9DYeIxUnmh05HCdBIkCVRP6ussiepVZJZXIutCHwt2I0YGY2Kiz3AIyeG5aLNooVULQBbHy1/nAK2oEtEanheil+GO3aFg0FnwSilNC4q6OrXzywc0XCy1WMaFu/tgrCBLRuWpHuP+n1zqmRXFN0GAnwKgHeW1E1C/86UDJHFKptATZMPZTafbLXHtN3OPixKRC4ev4GwB2Gy6JxhQNEYul+KoKp79RMaGqKzy9ovzt27c7pidVZtYAGJMYOP7u6bdK1mLI1GQ+/ogSZBahwKuLO2jSZt0odw65xrUhAMNrZskLsGiIXz72F3bTjV+ixvtbWcMQr3NWCbog5VyXAIy63PLrqpJITIqHkcD9P7suSiYbG53wvTLKDbr8WBbjZqIF4F3PD3ItRn1eQd5CBF3lCM5RAIYfVp0/dgZ8SvbJ2/l8MmlvNw+8qJTjm+drWQwaAXO9KMuWncc1GBMXKkGeV/pU5ZxFIsTvzovOCu3HvDnOE7NTu3rLr+PE8fy6+IEX9947YM4n/+LbPT/88R8QqoYAuVSDrZLFKcYso2AcLBIeGDPu6h3M+yqvIE/4Y6w4LdUfi+jcr86L75KvC9+PcbVfd1hCi6U7Innwk1/+Q5rcoetsdyBg3s9aCmivBsNFifGfG9zCJUFiztmpEXAbqhMgr6SLWBPu9R1enRfm1ktrC6cVYWH+/Mqg43x6sYK1edaCex7vkRZHZkF+6P6NkXvvi/TpLNBUaqTtdcsoLtIrVTcem2EHDh7m2uq0ikMINBvafOmazzt+BkGMW9CF70DndPsOaJqb38Y1oXjdCYHOiqwbPofrKid6thMAlnxxPtMy6w4K0ubNhq73U5wd5PtVleCTd+50D2CEafLloqixyv0ufMcOGq64CVaMYN2119gfAdPpuscKOxWgCMDwxfm0pvzBhx9siRLoFt3ca7Ikf+x2yygaYzHdTSi7IT9y8fMJ2Lpdhg+ZCPA2+f05d1A88mBLHzQaoA1dL6ohVLJGi+1uQj8XQMyHIMgaGT6eDxuozMkD294LRaB7CPI27DLHQSskSFRvGa30O/zndF4fF0DMhwa//9//iZ2DcILqN7xBHn1oUweNn7eJ3WO9QHvdMlrMsphKEj8XQPgpuHVVMtGOgF0hC9CGTqbb2kHOzXx73aKiuiymEv2x22ICMYYeWSALBQ7RQ0fkoZIr4DnRtS3ohzf1dNzTG9d0PcwMLahZO8UyKTMm38wteratSVtkplq4oWj0PcfrEinPhYg14H+hvdIwCVs1bvb6O+UBMYFGl90d0LRGLRDgoHEUwYnXDniQStocTVUwfPLaKQGA/RoWOmkvtnsaG8unK+PWMKlH5e+Lznp03N27RdO0TkxmYNZKszYBlyfI3RpjsQkmMOo8ls4Wsx1EKcEVAEvayyNoeRzsO2RI+93PNRLesGYtNpBhL4l/prlgZz5ob0mbtZVFhWC301d0EuQgAHPgS7D9hssTHKyMbRfLptF213NBDRuoaqxNA2yh2VUBDnxJ1M1yRW6gOgt2x64gqXK7ht1yOWyW1+wl7bYXvhUygQXgit4KuVDuBGzSbA2bmmtayNzpRgJOGu7XosHFChZzvrGTiUKt5UMiVsmbmtsCb3+2lZmwm3hFNsA/CiYdKyfhYx3Aws8urp8nsJM72naGCG8zYwZMecjk/WHVVRbsMwU6tBVQsWJS2sNDlrgVTO0RE/vzKQtuN2+/85k5PxlUaL75D3BZwKss+JUqSFRAO/F7Eqlkmj+2gbrgYE8rZFluu+P3pOGsyWCG/Y9/GR8exC+vYfc5flxgzRdDGsDEz/8AJsxwQcBUKPCtmKOMFJO8OKMgF8r3b3sKkAm69TN+2OZCAm5ID/g9XPypwX29ufWgudq0urrKes/8nPkxgy1bdg6z/or/SFc2mzV/xs+6HwySTmdYJp2dpaWKEregYrVfn9/B0xkD2U6+e+sOaHqImTfLrycUOIZM1hJwC3oemPXbi/y5PnsrJ136bUa8pxu69BklmANWwDRkgR1wmwVaglyi3Nz6JLQ+ZG5NxQsgNdAhmIfJN7wxgoWg9fxzPQ+c/g9YAIXgeUKCyipJO4uR/wswAOIwB/5IgxvbAAAAAElFTkSuQmCC"
#define PHP_EGG_LOGO_DATA_URI "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAHkAAABACAMAAAAJUSgeAAADAFBMVEVHcExweqyBiLNHS42mqtBgY5dbXpVjd7tMTotISotMTo+VmrutsNanq9CusdaYnL6Tmb+qrMZKTIx0eK1hY6BISotITY+Ok8JmbqdvcauorMp8f7R9gKx3gaxecK1ISouTlsVZXHx3e7MBAQBISoszSacgKYQ6UrAvQqM9VbIdJn4hLIo4T60mNpYtPqQfKYcmNJ4sPpgzRp8pOpQpOaMzRqYnNZs1TKowRacyRqOustYlMZsqOoslMIkiLYYlMpYnNIwxRZstPpUcJYIxRasnN5AyR68lMpEkMY0wQpYqOpsvQZkfKZUmNZEkMHwZIHUsPpsvQacuPpI6ULU+Vr0wQ60uPp8wQp8pOacdJXs2S68kL3YjLY8tQZ4zSaMiLIEpOpgoN580SKsfKWwZIXseKJB+g7Y3TrIhL5RCWrhAV7QZIG0pN4crOp+DiLgsP6t6f7QhK3InNIA6Uro5TaosPqgqOpEfLY0dJXU9VLdyebAeJ4wlMoQ2S6cfK5EgK3kiMJkgLZotPI9BWr0aI18jMJ4VG2Y4TqQaJolvda2LkrmTl8U0SLIZJJGZncYiNaJrb6k1S54NDAYbGhFHYMA/PjptfLxNZscZK58cMZFEW8NNZLlHX7s8U6s2SrZddsgWJplXaK8oPZ9DWKpqesZHXbVZb8BiaqaMkMGlqc5YXpgSGFIUGVtTaL1QVJOeosyGjL48QVNmanoKCxAOE0crKytUa8knJR40N0Jjcq4iObA+UqE4SJUMHI+qrtNudqZJSUNshMYVHoN7gJIsQbX9/f5NT1JMT2KFl9BYWV9aX20xQo0dMadietZrcpFHYMwmMWYtZccLF4NXbdZ3iLtgb7l+jMctTrAGCC4wR7wWL7FJWp9LUnRxh9J8g6JLYatNhdk8d9FcaJ1lbqB3e4RUXYMIDUF6kt8bNZmpteoLE3YSFB9GdcKutL6Lj5d1dnUZS6lPZKQwPHXDx8+PlqudreVja4m/yuyKptoZIkODne/U2us5Usedoa8oL1YtYLdNAseBAAAAInRSTlMAq2nohiAy/EfPEE/pZ8E5/SCegWV7wMHI4w/MHpjVr9eBwELx9AAAFs9JREFUWMOs1XtUkmkeB/Bmxt1mtkybdrY9OzuX42uEGS8oSCQqIiiCECqgyKqJi3JxBQsFSSWMUFPRSREIvGAKocVoetI0b5nHMrVmTDtHy9qZmtPk6TJdpman086+XpqZ3bmcZmd+f8HLOXze7/P7Pc+zatXPlUfTwdhk1uatLPO7yw/We7i7ua2Dam1g4MBAS0tLW1vF+xs3bnTb8KqHx6rfsNyJfbGKuILsCGWJm7vbIvf9WqTbILqirMzpdLZLpelvv7PB46+/ifyOX98/8imZcRrf4QffehBWtlRSqbQdIj09KxarrMyzFNKl6VmvbPj9r5bfDevb/TckXZSXqN430NJW5mxP9/qu0qWlpaXtp5sbHA6Hy9okkdhdDkdDQ0OzcVr69q/T11wJ6tuxf29aiRKPLznwrZgFic729mmjy+7DUkGg1VorwYGpLDnbYNCKtWz5iMxnZk/WK6//f+x697WB1N3jQcf+DkMS6PqpVijjUshp42qHy2AwiIVk8DCNsE2yVWIwGVIzM0GxSVwrlojFYonGZraZC3oG3/zluPs6qKUtyL27xjOOJQjo+JTrPZA447DWimuhstrrJPa6AAQBgYgjq8QGk0UYp06LU/moxLXQO/nAURqR2tbf3zT42lu/+wXsX9wWp3igQloSUpSxqyj4VPGdeYdDYq1NLi5usttr7XZJdoHEZBDj4BIxLlWrFRsMZIIaD+aUk8FUKDObhSOIRBqRpt/c+Kn3Swdfdtvavbz2LGTs8B5/2Hr9uvfVK/ZalxiRskkCyWKJisUDVSaTxWAy8Xy0FnkMCBJEBEyELEeHj4lgsyLIeDUWROlQ9P7CQW/vP73+su5A2dIMtxZ9uLrB1fpwfLKj+kizw+powrBrodXUqthalgZVX681aYWpKpXFwqWr+Xw8P4KL0qjpmbwITA5GRAC5GIyGMjzV+uHL2O5LbtbyDPc0nu7SSogPTF0VPdB2cTU11LLYKqh4qUIxD68r5JMxWJxQxS7n6tR4FAYD8vEoPB4LCstlGBGKr0NxUVgGcmH8hre393s/22+Pdd+5XqVGKHDXnW8+Od13ZbWkydQ12bXNZeel4kB4ADyAR84E+RoNXQOm8oQxdF1hmgiMwYCyCA6HQxbK61F6rowOPcajIkMWxrOg2K+99dOwG9TfihfutNVqtZvO3fn4m10fXdkcdtDQ1TXpkliT46IRiJS4ABxIw4pEeDWdjsfGkPm6QjWCBmJy6stlEeWccra8Mg3PLSyk69NElMjQqStZRyD7jZ84XdZDgVuky6502sfHas8m+zism7cFNFn9g6KgrdM1WSu2KhhoNJoWB4fHiQiZhLy8Er1tpDcHm5YmwoIcWbmMw+Fyy1X1XB2dXqjT6PV5SmV4eP8Brz2tUOw//uiBtXZgoGzlkCo9VVngI+EdJtBEyJBE+uYmYqxi+2Yxm21RaetCQ8P9/KKTaCm0GLgIqdSBrkkLV5Sn12tQHI6Mi9HhwfKICA6Gri/U0bmGnP4SiiJYD0X6AIr95o+MFnTlrQQubaxEoAsKaEmHaQxf5JYFQV0d0Q/tFw3HlcvlOJZ/fqhfVHwSmhEdAI+haXrnH9195ujPy1scLlQOB6XByuo5MhBaaZuNe/nM4JfGYUqkbxP0x4ux3/jD/7a4raVtucOle3CfK9H+2WgSMpJGYVAEx4qKtxOJYX7xAalyi0XIyd5HDYvyj0IrwrZv3xQAjtwarbo/b8tEYUB8oYafg8Lzc2QcLgqS6baZUaDq+TNJfyQVnb7490d+QLtBN98KfBADD96piI9GCnwTwxHRNMHRY0lhQVGKsORtPJXloqmeR42lUqPCqAridv/s5LiR5m5gbHJudmTCpibwKyt1ZjNXJsPgC9P09N5Pq4HqmoovVfSog4zrUukPafeKtpUWlxZ/zvCFwUIoeSTYbj9ENA4rKCrKDxfko/38cTgW+6JJLqQGxYZRicT4JBo2E4ybNXYDZ27PNDc3OybMfPmlxYPt0sXe/pI0un7iRjXwJPDuV/M5FGLfwlSSsdTrg/+i11RUOFfgukPBJBLSt4TJhKn3/xvcBE8UMJlFuTtDFGh0EnQPWiwxPGqQIgVBiCtuajzSeJ08e6AaOD5aU1Mz1HF5tvlxR8f5jidPnng12IZLhvuNNcDVS4HnJl16RF0Qc7jfPOOEUr/37XbyrHix1MWHFUjf4DTB1TPnH/om/GtfKkgQMLcwizL2hqETaalCiCYLicE7/Wd6Wj87Ozo0NHbh4oPqKmC5huYvn1j+VNV9c9I2PDxl6gCG2Iav/mkspPj35ebD8mwTq9O9vV+cKRvLXsD+iDAGBUEY/uzuo7sdu4f37zgMqklMgS/z2NGgaCQFi2PJtUI5EXnqwlhN97JXfeBIFXDy/thYN9AJXDtXDXSeGBrqhn640DVVohkZrOo2zt+6M2POrDuYm5sA883r7zXe8F4+UtY4l+8Hr6xTh/aFpyAoU97Pnt59eu+jhaP5WAqSxNyihGUUUcNJSgScJ2fxVLHKrpOLaHcN5ABjjwHg/u2Gr69Bb3KtrAqoabl8qwWKXmM0p6EmmmuAe08/vmM0q7eJdxQxE3IFSPPciPHPS/L7zpUm7xkOT0lKQqjzH3fcDHx27+HCLjQi0ReWwfQNYYZSQ0mRtCV5ayzFDsknOnpmWjsB4OTjTuCs1TZ3rgao8rwGAGO35uYunQE6qwdH6GrNxTHgwtdfTDfbYMrsfZCckQEj6Mxz7I3rV6161elcXmvpIUZYEhyeMtw6CnQ+f9QxnsZgUCKVJGYRk0Txj1bAlCk4HguHyw46ZIXkm82VMvFZSD7TCZx3VY5ALT5xG/o+2sClz3pCuylrli4yW58/+OSLxnMyUkIIMTYXGpncBAoWpZvodUFddrYvw9HYqCQ4Dp6JPA6c6Hx873g8BsFgKJFbcjMySMnJ8X5IZcp/uC7XoKbSM46z9kOnsx+2/dKZjvuJeJJDLoSckJOckpOTkxhzOZsQUidHmuQkAWQjJAjZLFBIQFIx1pbJBIYtdKVcK6uOrtFVClhXhh1QVJDBRddVC15GHXa9bLvrZWztE+xuse9k8iEzmd/7/N/n/1zQje+iuUR0lTwzbsI238mQebxre9//AgyUfgK/zy7ktyw8AE0ujf0N//zju8uPUh9/2Mcv5uuixYVlZZWVGom/tXXL+ay3j3z06pUf38NYglAoisgV+NuNswd2lBAWt1TP5wsLaxOERyY1SgZUJegmzLujHwjT48xARRrUzZDF+XNwiZn7EOqtF11Xn56G2C90jf7+6dLL7u4917soN1+krS8WCgsrC70mKq8luSVr3ZFXIZffY1iOQBWE032F1z4zM4sNKBELgDUmoQZLKQmDXkQNbEQt76aiecPHee3XaDRvQwePd3SG13FnU9fCDK99zx6gP3+xcP82ZN7shUXgXn50c2XmRJtQL5KZhDavpri+WKMxhlpb/VlvHFntE+WJXIyFjo8SdveuldMPJ8fvKQUKu1XPF0n1OlkMwUxSUSB3YygEhaQIimLnzT7laCbFbx/njRzO7+s9zRu5fxQusv/Gg4eQ5lN3J67Pzz+6N/F1e3pfm15vlJtPSndbvVFSpJWEClrystZXrYrdkExxBKtACSUhaaJvjia6UaVASfj4IJHWQCN+Ti6SBnI3WSwl6sIIKHv21PDsaSDMzoK9Du8Y+6CD99cnaYiVt+rzqcXe3vn5y55LExMj6d42oci4u6H61snugNVnNVpCeS0tWVWr5CoORThCQaB2VhlDizYN4GxEKRYrffzCXV6zgQhYMblb2hhSWfyIelfkGq/9+FRnBjFz97uVY6dH27afejgy+S2kd+fISEfH8ckzL/Z9tfwS7HR1qGN6oamYNEgy2jZ8WdfqM4Ry81sas8qrMp4avYfFCKdCgVokTAwhVAqWjQgArfLwixk5J9lNc1ZpYwD3SUKEbddgmreyWiI7jx7y/POne/7V35Y/9O2p+w0dvKn7H1RXf7p4dyxnYhnsNNE1d4P33ZylkG9MrGpbnf24O+B05geAnOmbVTKDjCBgwoH+Y/CII6oSJYso4SCsiLHLORnbgxnr3BROUShmK4TUPjY9PX3n1ui4xBM7dGivxFJ0fmzzHBhrauHqZ19Ax0x+PjS/9HL0vbEznZ1D2518fqD/+7WsYRzfEcKbXpEbuuVsLMOxezy18ogA4Tj4xBAE7bZiJh3NRlK1Jr5UMiCxKuiwFcjtN3orFBKr3EHbcdzv9DmdVHJutp03faIPJpO8/OSh68tLyz/+88TDqSd/Spq0mu6G/22EwE7mZ60Hcvm4hxOLBQJxhCEIuQETKzNcjEMUCh8mN6UYu0dndEv5EqeVUtBq+1/SvPa0R+eIq2FGMNOs04nCVNZyIZPaC0ncZ6Goll+fWVpa6t3/j8lfLo5J+AbSvnb/rW4YTGa9UQ3kgR5xRAwngnExQibDIkoOQSBmtATBSCYhk9UaTI0ik9Fnoohz53QfQpH8d8LsiMfVMJwwGMGyuXhu8sTXkw/2/6GFshgbm97pmnj6cn55aeLMYu4OkpRJxteSs4cPDGetqy7P/t32QUFELAC5OYYWY3ImFuNiXI6AUykjHkOC1ulMIpNGapIYSScWVBv2ATmdommzOm5maNCJtTvtTr9i6PnzEy2NVF5BU1NjwWeLTyd6v5q49H5AK9LIJI/XgrMPbPhR1tuQbv2bcnIEghwxghC6eCwhq01FkFjYJXhPKU7JsITawZikGr5I4jNZS3ThoHZw8uztG2pHKhWPm2mMxgjCY7cTCrzvfF+b203l4ZRRZEluH/po8VJ/axNJksJayWvg7MOZ8Xd9dvmgOAfQYF8E8xjUiZjB3BPhdMFn3/y2p9baA2Stxusl3bhcYyGCNpdNO/xB/8mgw2GGD4NhYEgIm0VZiyQQcFN+HPfVuWEBOb9lS/Ida1BLktDrXhMbhjGYDdZll8d6cioqlDGxOEYzDpujh9FFEtyvYisXt2EkCWLXCoUak6kOt5IenS3qKrUJy8qEUbM57qB1DItBIsYIBRQhRZG/AMdDOG5xS0JuqdFiIb2kVktqRXVfVr8e8k8yk8EvqlUZskDBRTiadgSbz40zHJfYvPPZXMKhrU3J5AaTnm+yBii+tSTuCttqaprDYZstGIfMdtAYRiCQiyoVolAVFRWFQn4/sHHKTcJt+SC1Br7q+v8v5NWl9s1PVRUVoDbiwTiM0ambS1MROpX4zc6Lf0zJZTQj15JGGIStFo0whAZrXOFmVzgYjAfrm9UOtQPEBhOUICUqVYacm5vrp4xuihKJRHy9FOZnDV+vJesa1oAbDm/4+asJ8PHlCghZICDkarMublZXusbpVCqy85u9tIxJMXITaZVLpSKjV5qU19SUuuCl1eDl+vpmEuyMYVDuYlB4UZYocoZCeX63yF1XJwWyUC8s9mo0GlJjrnotsf87Af4MEmxbRQ64WVZvUwfV8WBlOGU+GXl2cW9Kx9C1coNW7pOK3HphU766tKa01OYKg5PV4frKZgdthu2OVWQOiqKWAEUFmgJbpdDXjUY+gIu9Xq9Wa1zrqeEfpt63BsUV27bliGMI660sLd1Z6nLVgGmDV1w9CZ3cXGuAA9qRZWUBu81VU1oTDofhfvFotLk+6mBkMkLBEpEIbPMhitpK4QV51O6tdbvdbr6wrFioiXo1DNbwGvj7Sf+tHkHmncUlCCEj6yt3Hvzk4MGL6fTxdNVJzmBgakmtmoT09BbqcXhlm+vVK+vM2mA46g3ClsMpYrFMxCi0HBzPz4dCEigokEpN0ozYUY2u5+/la7Prh+3mTXAziK1UYoxMF6zfdfCTK8+OZZr7fwoz39g06jCO709mjb4yW8xmMhM7gfb4Uw6OfwLXA46DQgtcj6OFtlw5mNdyxQ4olLa01JU1xRCtydS02UjUbG/ghTpiNDNZYlLf+Gbv1sQlvpmNie/cSxPjc2y23dZtP17w8nPPv+/ze57fzkcOL+F0yuWE2+31IOIKmk0GchLZZpMS22YbKAccOr9fBmG29PTwkYyBxxJa68WVfqPRq5yXyBznneu9dNjig7EKyGnQEZPOOUyUK+ut5l5bAl94sPPNb+P24rAckRN6tTqampxJZoEcyOXKNvD28EDcWZ5xOvwjFl4y2szTtNnMa7RGKzRy77gSZm9E3jeuu/7j0eBjJyQFA7Qh5C4Hks12e/fRcPRwp7s2by/aEU6O6ye50rx7DEoKyLYA1BOMkwOfDjidRYcfDUX8OnOPgeZjPE9mrEY6YlTKoRj6ECgqj2nf109P7iegP8JRyUJ6ghurtnfvf9Y5O/90v7/ldrpdUBV2vNQ3mUtmpezKzUg224owRussfrvbPxTyo8sSlVcJAp/pNxoiHiVMpB653E54er7+H/zMtqJDVqlkI1A+XAXID3cenfe6Lw2oiSHc7h5SinKfLQlZL51yGSQE3O1HJ5b1nFKP+tH4nEKQhJ9hFAafz6ce8iKIl7BDVUTSHxwY/NSG5oQJGpXJEEH1xEwlW91rP9qUf/yxFJetIYLACbuITPyazI4lIdCBSiVQJop+v1/niCtQCATqdMZVUrdbEEwmki1giQTv88zbZ4qTRT3/OLuO2kqdJsFkQyQUQolKNlnd+/ewxN7e2vLAQJeKSBYnq9XqenZ9XRSjCFd0OHTx2ARO+FG9RF5gFlQyk0BR9UaDauTDtLrMXZ4wL+47+tlN3HlKJV0yR4BcAqFo31984vagm5ryoLpctdpqNlvNVgvAwSg0KzlEeEKPB5GiE9UtLyuWDWZ+IRxmGo1GvU4xYRoKyzuxzz1q+whkk0oGw4UerwSA/EettngYXvv9+o2fkq323l4TTBZLCAJgl3LKGCLKiBgkLl8m4qp4yNvPbG+vhWkNhVkzJBUzZ3oUitpjPx+9cT1+D4pZZohb9NFKAHL7ndPnagA/xP5y2iFK4OZ6EsDRVCq1AQ2Y5PUcUrKPFHN3hx3q/pVBJpxnNINGDK6eGEnxwo1rn3fXIK+eu+kFMswxMovFy5UD2Wrz1WOvddgH8Nq0fr3VaoliqcLhrmDQpdZo6BiJmWMjhHO4kgsM+SThwlg2swqyjY3OsmRMmP7+5h3J3Odv1o/f6+2dsyzP9eBRLgBJ1EnAM2c3O/AOfVHmDYqiWClzHA4RVoIzKYon6dha2JJttbM+OnFxaWlJS2PaVavVemWUrbNCb/qLrnelvHr+dvlsLA3uNsT10WhlLLlefZz6p86c29zcrG0C/Y4fh35X4nAYpYPR8QhJa+AOQJI8s72Q3d0dM2eUPy8NDmq1VuuHV8DVLJwO+eSLHxLeBg1QzI2g0WClkkyKdw++8RWwXDp39FHEjiO4y5WKuuYxMhajaZKEv9jC1eqFW2OkcWkVsPBbxQqfjM4WCmw91pu+2vWy5zAB6llhUAajHIiEePeJ571TZ46f65DlStwll7tcUxmSZAErSMt9Jhz++69bOcqopepsIZHAsAIICaZNkAzTO32t662XkaFV9RrmUymuFMg9Re7Qzw+4oOcoXYhyaQmrxyi2zuTzULphhsnf/mWXKGhImqLYRIZk2Ua+MVvACvBh6fTLyGchwxRCT/8GRLHEHfb2/jm54VF7lX2QRSssRYJAhbfX8gLDkEwY/e6H6Fc0VZA0M6EpsCAj7CxLCQtMerrrjReTIbfTCplZ4/P2caWKOHYE+c0/J/uVuNq6sTGoqQtMHsBreYaJCWvh0INvgxqKEmgsYUwUsNGChtZgbD5PUYrpm6+/APsfPpGyoTDU6NQAAAAASUVORK5CYII="
#define ZEND_LOGO_DATA_URI "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAPoAAAAvCAYAAADKH9ehAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAEWJJREFUeNrsXQl0VNUZvjNJSAgEAxHCGsNitSBFxB1l0boUW1pp3VAUrKLWKgUPUlEB13K0Yq1alaXWuh5EadWK1F0s1gJaoaCgQDRKBBJDVhKSzPR+zPfg5vLevCUzmZnwvnP+k8ybN3fevfff73/vBAJTHxc+khL5kr6T1ODk5nAgTRTWloghFVtEg/zfh2PkSvq9pJGSKiX9SdKittbJoD/PSYkrJD0vKeB4IsNNotfuUtHk/CM+IvijpF9KGiDpGEkLJZ3lC7qPeKKTpD9IWiDpUOfWPCi61ZeLvD2VIhTwp9QlTjK5NsIXdB/xxHmSpvD/OucWPSAyQw2+LfeG1SbXVra1Tqb785xUaNdMel0g7Iu5V1zPv6dJqpD0kKR/+ILuI55o8oeg1bFT0kWSOkraQxK+oPvw0TZR3ZY758foyQXf//ZxUFh0Q/GEfNf9gHkaJ6m7pHJJSyTt9tnXhxtBR2EGlnHCMbZMaHuHzX19JZ0u6VRJh0k6hM+BpMjnklZIelPSNhff3V5StkNlEWBMFm+3LcC+BW3GuZP2GvfmiEiCCMUzxZIKRGSt9zeML/fdGAW9JB3O8c6SlMZ+b5f0qaQiF7EpnieXY1auvZfG7zhSUk8RSS428F7M5xfsh1eAV/vxOzoq16sklZBqbdpo5H2qDPRQXoP3Ki0+20FSFyrZUgt+Rt/7KH2vZb8/t/iMG2Sy/0dI6sbvgHGoV8a3xErQb5Q0iTfHCplkzlkW7w+VNF3ST7QJUzFK0pVkDFiw+yV95uC7r5Z0k3CW2ApwIkrJ9B9IelfSh2SIlqC/pDFUZAVk0rQoMhk2GYswx+AtWvMKPtcyEckW37pPwsIHNAuBniDpYhEpBMmJwvibJL0gIlVh39r0C8UlczkXQ/mM6OtEzuf3RfPVAxUY47f5PStcGKPxpOMldbbxiBptPMavJX1PuQ/P/olyz12S7rD4PLyqBTQ8gyXVSOot6VK+dxR53wyl7POjkv7pkpcwpleJSCHP4eQjM0BB/ZuG4Hl9EO8mQx4ZQ0FfL+k+k+t4wNlULpkO24IGnSzpQklzKPDRAMvZ1eXz9uXfH/Pvx5Ie44C5zYQXUgDPj6LEnMCQ3AFkjjupjGF9/kJmxPw1oiquz+6dalXcCRSmYxwK0kDSRI71azb3Y+6GiMi6P/5ey3F3YpExjxdQoG61uX8gBetkh2OWFkUIVGUT1pS9yosZNu1nkl8uZH+mikhxkx1wz7mkB0WkXsKJFw1ZuSWKotY9wjNJS6mUy41JK5P0c2qCnBgIeQWZvEK7Dnf6WUljTT5TS7d0KwezkJShdWIeGeuKKJo7FktUQylcl0i6RtL/HH4OjP+wB0UTLTGHfubRDWyi1g7SaoZQ495z9w7RpaHKqHEfLeklEyWzk+7dl3TTu1KQCpV7+pBB4IWstFFAgvOpJnTL6DoW0xPbw3k/nIYkW+kbmHeXhUEABklazrBDBdzTDfyuBo5DPq1eoUk7ZbSk70l6n3MZjUdCDpQvMF/rezn7/hX7Xs8wsj/7rsrWdQxnZtrwwENUosJkDDZxTjOUkEH1ds6lzJyDZzGScRsonGNcMCIG+WgRKTRQ8Su2p7uRi/mlKjZKekREChS2KIOcTvfqp3RZDlM+cxnfv8Thc75Pt8kqo92VzNTbxBqcQlceivAdByHDIxbvFTMOLovyHAGGK3qc/jJDoDc4hpjABzBm4UAglBFqEAOqt8mB29ss4uJnNCHfSK/tVZMYEfMykt7Bcco1eDLDHCT8gmzzRdLHZL6wRSgzg6GIgVl8Xj2uhPA+oQn53yTdK2mVMC8NzuJ8zaSyM/ApxyzWCFJRvUQ3eQ29BTNFcRgt+FTl2g30zDZZtD/ZRMifE5ES6Y9MxqAHQ7XZikI9nd97j5p1f83GZTPr6Crt2sOcOB1zTYT8HrqjVRZx4wbSAt47SXn/YsZV9zp4zuvJgNGQRaszmoN1rBY6IH4dHiVHcA5dZd2zeIbPv8ZBkghYTQFTx/h1WvSz6c3kM5ewGG8Prvxc5DZWS2u+dypnM5Y3sIJMXmbxfXW0misZN56oxITnWsyl2fg+6+C+zWTefMWr68RwaYF271htHBZqCsKqL28wB/ACjYShrE9nUjfWmEU33A7woqbR4k5UlNk4yoYOzOHvtGs30KO1QgnlZC2VohGOIGn7WEvW0ZdoMeCHfBgdo8X++m3V+s2wEHKzJMblJom92+ne2SHDwT1gknUispPpJLrrVZqwLxTmy5F5jOdVS72F/b6UwlbrcEytrD00+a8l/ZUM82jEZd8peu8uNYS8JxNWqis5IYqQCy1rPUULh8Y7fOYal3zzmPb6aJN7zlf+32bBV9ESclNE85WUX4j4oNbl/fM1b2eoxX3jyXNqiDTP4Xe8Rm9ItfSjvAr6DM0d+o5MXW/CuHO0a7eZTLYT3KF9LktYZ/WdCI+IkoV+lFZ6l3J9OF14HdM0F3MrhXxFjJmqhh5FBera24XqxaCqL0UosK97Z2ku+yJaEqf4D62ByoROcjZuN78Xaa9zTBSzKvxvC+vlrmgWVPU2h4j4FCO5lZ+vNBnpYHHfOOX/PfR83eApTaGM8CLop5l88WSLWAOu4AiNme5owcBO1xhlLGO/eGAFkyYqrtFe5zKzqU7KBE5o/BAIiv7VJSK7qV4GhEF1XtSk0YseWl6lWYI+cXj6pigJLkH3Vk0qfebxe4q0JGOGSDxCWn/Nchk9qJgMfGKS87LDes1IHeVW0LszgaC6sPMYE5lBt4CzRcuy4lVMLKlWfWwcJ+YpxtcGjtOYfzRjTgNIlv0rnpyCveeHNFSJ/jUlonH/3nNYqyOU28qYhHOLbzVPqFc81JQDKxnQ5twLdmjfmQzlxU6eoZ/mma3y8D3VonlhUr6bElhMwJ81RseSxW+jfOYULdYGAw5s4WBtpeU0ijKwxnp/HCfn70piCNlMFEUU8/WpmnZe1Bq80r96m5yMkIwx9nnNHTWFs114q0ArM1HsiUY7j5/rKFIThdrrzR7agHyoy9vd3Ag64uEfKa+xjIKlLqtTUBB7FWgJrQ9joFl1d2cQ2wzHaeDXa6/ztO9Wx+OT+FrzSAKuV12ptOZp+ljnaVawk8uxDpnMZXYCGB3PXqe5sl7QQ5ubhhQR9B4mQpvjIR+gJgrbOxV0rK/rVUyXmyRWdI2a2YLEhVP3BwmN9sJ9BtQpKkxiSDOrUeUhaeQaPevKzKQ3oIVTSGatcynoRl29sIkh440a8pURNoz00Ab4Ts1obxCps1FKl8k5IpKbcmsgu6nz6ETQC+iSqoKKOPmVJBmYnDjHX4EozB9s7TgwykkyYS13URAHpmstYIloOP/HEi6Wx5a4+DwSpH2V18tTyHUPm3iQeS1s09ai4/0ntVgNRQmzHTRulGwaQNnei3FgHqPcMBEJlXrNioAaE8AcupKBd7ElBu1uTxCzg+dmKB4TahiQNX/OxssAb00Uzdeci4S3FYhEQdfkWCrc1cI2K+2EDhsP1OUxZGUnOWTmcgphV0UgZ4jUR1hLlBiuJfqJpb61CXimOrq8RqiEeu6TU3iMwdzYgWhUnWHDDKr0ptLar6USqmOfYYiGMMTUN/KgziGVTo+pNJHBBfF0zVAQc6N2DUL+tcO2Yc1Rk2ss+yBmOko43yCSCljJXAWA7PD4eAt6MBy2yiNACRvVVN05t40pPLYPsT+zlRDpOLG/Jt8OSGKhmnBpivV7q/Y6JkucVgkyWKb52rVZwl0tvNDi+AzRvKjfK1Dnjvpd1FhPEc1LBVsbqENXN35cFaPY2BIVGdlWYZKqgPPj/RythNtpcNycpoOxwAae0bGwhAkAQg01cfiDWDRqZtHhCqFQ5FAtOXKXh/Yh6Ci2N5YMUDW2SHg/N3scn02N++cnMIZCBdwS9gtApRxqDc6OlzWtSrdc8cJGlzP5fzZDri1tQNixISWL/5fSQvcVzfe/wzXfSG8Kuw03pHB/t5KMik+EYJ1EC1d0zCw6fofqRI2ZJwpvyxN4uPs0q/6UR2szyESobxatf3aa7jvfrT0DGPNpYV3H3CI0BYLGllQdy7TX14rUP/zzDHpuRp0EPLnJvH68Qij/RXnyIyku5Ea+5S3NO7s01q77eMY1qqY8T7Qs+4qtq+o2UWhjZO6HuWhjJBlZXWbAHvbFSTAxqMW+RbuG3VfviAP36tshujINh6Tr3kE0BNMl5x8Qq6+mVTdwrMlzpRrGaGPzVpw9NDNFngjoFZZzRCS/FRPXHRZT31X2MgfYTQYX1WE1moaaQJfKEFTs/camkXnUwt9YtNWPiuc67VmRlb0yiRgS/cAe7is0QXuTAm9kikM2DNc5OkeGRaMU8tq0TJHbUCOtezMeRfITiSv1PLLbGE5gb/NOB/1AuR1KlLETDltidyR4XIPasyEnc6eIbRa9kfNifFeXJOAnVJBiKfFCvobcLKccLHWojHJpIPH3iXQlpoNLrdcH44sucvmQOHHjZ9rDrGdbixVmbk/XGy4mtiKuoQDjmQpFJLs6wuSZvqKmL0ky6zOZLry+420UKUaue5ooyeqy9+iopgM989cp1Dcp16bSU1tOJbyFyjedTID5wOk6OAUFFXUDKFRLkmBM3xH7fzIJwPLsxexDMWP2b8g38DqN45ywCuH0VNuv+XmjwOYCjtUakbg6AkGlNoQGBMB5A9g8hh2g7zFE2U4F35FxfHfmwwbxcz3Yl32C/oAwPwDAS6UXdpOhXPZ27Trc9R/SLTla0zzGoXl2QAexnLVZJB/CZMpV7HthfL4lJIrb54u+tdv3/rCiSbw+k88yM9ZxXgKwlHmZycq13iSr0KeMHmUZw6r1VICrLT4D5fy4wq/5DAvfjaWC9oAd9KxwTNUJynUjL+EqpwSTME1zOWMBuIxmZ7p9RCsNq+NmdxW09I1MdNkJeYZNHsIt0qKEO2Z4kvmHadS+Xqv2cqzc93rpuhdl54tg2DISuJljBW3uZjMHrAPqHOYK6zPIM23G2+14Rts4cyLbdxo3Y667UskOo/W/m/PwRhQBwZFkT2vXzDbTtLMZCyfP1155bbfDrpjKZoYH41bO+d97jmEgMPVxFMF0iHESIkiNtDhKuwV058cw0dBZNP+lFsSU/6VWf0E4P/x+IF2eJnokr4uW/2jAKPYjjRb7Cxef70c3qsCl0im1Gj/Uu2eF6sWo0rUiTQq7zS+pYjywnXYwcyOZfI4mKgHj9N2ttHqbRfSlQXhjw5XXy4S7ZbzOovkxVRsphHp8ia3HlyleZS1zHcvoVrdjuNFdEe7edGHzSbpSria/WZ3+cxYV5DCx/4w7FUfyfTW0WO+i7x2YrzKUXZFw/sut+OxJDGkHUxEZPwgCquQcIgxZR9oXekDQk8FF60bqwocupaIoEz6EmaC3C+0Ro6Wgp4eb2tpPJqN+4xXFXQ3TfUfCc5PDNnLZDpLIV1NADKyjZa87mHgmWX57bYdIfIY3pdCGf43xQUXI62kBn3fZxi4SPC8crIjDQ4yzFAaz/XcPJn7xf03VRzIB5Z7qCbBzPQi5jga2E9bCD+ELug8ficEZCk/Cmj8Ro3aLtLxDR1/QffhIHNRTUZCf+S5G7SJBp2b7G31B9+EjcVAFEInZQ2LU7jiN1zf4gu7DR+KwTvkfO9bGx6BNnEQ8XXmN5cT3fEH34SNxwN4A9dgknIEwyWNbeRTwV7WYHBVwFQfbwKb7vOUjiYAiKVT1PczXqCLD/n5UbuLcNxTKoCgExSFNmsFCHI6iJBQFnUbqqbWPHyFceDAOrC/oPpIN+FVaVLrNUa6dLPbvoEQdO4pd1OUylBVkCutsOkqosbNvwcE6qL6g+0hG3MY4ejots1pT3kE4P9QDdfuLKeDfHswD6gu6j2TF2yQcLoqEGurre9EdP1QTfmxJRdn0NlrvD+jmY69Egz+UQvxfgAEALJ4EcRDa/toAAAAASUVORK5CYII="

BEGIN_EXTERN_C()
PHPAPI void php_print_info_htmlhead(void);
PHPAPI void php_print_info(int flag);
PHPAPI void php_print_style(void);
PHPAPI void php_info_print_style(void);
PHPAPI void php_info_print_table_colspan_header(int num_cols, const char *header);
PHPAPI void php_info_print_table_header(int num_cols, ...);
PHPAPI void php_info_print_table_row(int num_cols, ...);
PHPAPI void php_info_print_table_row_ex(int num_cols, const char *, ...);
PHPAPI void php_info_print_table_start(void);
PHPAPI void php_info_print_table_end(void);
PHPAPI void php_info_print_box_start(int bg);
PHPAPI void php_info_print_box_end(void);
PHPAPI void php_info_print_hr(void);
PHPAPI void php_info_print_module(zend_module_entry *module);
PHPAPI zend_string *php_get_uname(char mode);

void register_phpinfo_constants(INIT_FUNC_ARGS);
END_EXTERN_C()

#endif /* INFO_H */
ext/standard/php_crypt.h000064400000002725151730542650011343 0ustar00/*
   +----------------------------------------------------------------------+
   | Copyright (c) The PHP Group                                          |
   +----------------------------------------------------------------------+
   | This source file is subject to version 3.01 of the PHP license,      |
   | that is bundled with this package in the file LICENSE, and is        |
   | available through the world-wide-web at the following url:           |
   | https://www.php.net/license/3_01.txt                                 |
   | If you did not receive a copy of the PHP license and are unable to   |
   | obtain it through the world-wide-web, please send a note to          |
   | license@php.net so we can mail you a copy immediately.               |
   +----------------------------------------------------------------------+
   | Authors: Stig Bakken <ssb@php.net>                                   |
   |          Zeev Suraski <zeev@php.net>                                 |
   |          Rasmus Lerdorf <rasmus@php.net>                             |
   +----------------------------------------------------------------------+
*/

#ifndef PHP_CRYPT_H
#define PHP_CRYPT_H

PHPAPI zend_string *php_crypt(const char *password, const int pass_len, const char *salt, int salt_len, bool quiet);
PHP_MINIT_FUNCTION(crypt);
PHP_MSHUTDOWN_FUNCTION(crypt);
PHP_RINIT_FUNCTION(crypt);

/* sha512 crypt has the maximal salt length of 123 characters */
#define PHP_MAX_SALT_LEN 123

#endif
ext/standard/php_browscap.h000064400000002157151730542650012021 0ustar00/*
   +----------------------------------------------------------------------+
   | Copyright (c) The PHP Group                                          |
   +----------------------------------------------------------------------+
   | This source file is subject to version 3.01 of the PHP license,      |
   | that is bundled with this package in the file LICENSE, and is        |
   | available through the world-wide-web at the following url:           |
   | https://www.php.net/license/3_01.txt                                 |
   | If you did not receive a copy of the PHP license and are unable to   |
   | obtain it through the world-wide-web, please send a note to          |
   | license@php.net so we can mail you a copy immediately.               |
   +----------------------------------------------------------------------+
   | Author: Zeev Suraski <zeev@php.net>                                  |
   +----------------------------------------------------------------------+
*/

#ifndef PHP_BROWSCAP_H
#define PHP_BROWSCAP_H

PHP_MINIT_FUNCTION(browscap);
PHP_MSHUTDOWN_FUNCTION(browscap);

#endif /* PHP_BROWSCAP_H */
ext/standard/php_crypt_r.h000064400000003217151730542660011662 0ustar00/*
   +----------------------------------------------------------------------+
   | Copyright (c) The PHP Group                                          |
   +----------------------------------------------------------------------+
   | This source file is subject to version 3.01 of the PHP license,      |
   | that is bundled with this package in the file LICENSE, and is        |
   | available through the world-wide-web at the following url:           |
   | https://www.php.net/license/3_01.txt                                 |
   | If you did not receive a copy of the PHP license and are unable to   |
   | obtain it through the world-wide-web, please send a note to          |
   | license@php.net so we can mail you a copy immediately.               |
   +----------------------------------------------------------------------+
   | Authors: Pierre Alain Joye  <pajoye@php.net                          |
   +----------------------------------------------------------------------+
 */

#ifndef _CRYPT_WIHN32_H_
#define _CRYPT_WIHN32_H_

BEGIN_EXTERN_C()
#include "crypt_freesec.h"

void php_init_crypt_r(void);
void php_shutdown_crypt_r(void);

extern void _crypt_extended_init_r(void);

PHPAPI char *php_crypt_r (const char *__key, const char *__salt, struct php_crypt_extended_data * __data);

#define MD5_HASH_MAX_LEN 120

#include "crypt_blowfish.h"

extern char * php_md5_crypt_r(const char *pw, const char *salt, char *out);
extern char * php_sha512_crypt_r (const char *key, const char *salt, char *buffer, int buflen);
extern char * php_sha256_crypt_r (const char *key, const char *salt, char *buffer, int buflen);
END_EXTERN_C()

#endif /* _CRYPT_WIHN32_H_ */
ext/standard/php_dns.h000064400000007105151730542660010764 0ustar00/*
   +----------------------------------------------------------------------+
   | Copyright (c) The PHP Group                                          |
   +----------------------------------------------------------------------+
   | This source file is subject to version 3.01 of the PHP license,      |
   | that is bundled with this package in the file LICENSE, and is        |
   | available through the world-wide-web at the following url:           |
   | https://www.php.net/license/3_01.txt                                 |
   | If you did not receive a copy of the PHP license and are unable to   |
   | obtain it through the world-wide-web, please send a note to          |
   | license@php.net so we can mail you a copy immediately.               |
   +----------------------------------------------------------------------+
   | Authors: The typical suspects                                        |
   |          Marcus Boerger <helly@php.net>                              |
   |          Pollita <pollita@php.net>                                   |
   +----------------------------------------------------------------------+
*/

#ifndef PHP_DNS_H
#define PHP_DNS_H

#if defined(HAVE_DNS_SEARCH)
#define php_dns_search(res, dname, class, type, answer, anslen) \
    	((int)dns_search(res, dname, class, type, (char *) answer, anslen, (struct sockaddr *)&from, &fromsize))
#define php_dns_free_handle(res) \
		dns_free(res)
#define php_dns_errno(handle) h_errno

#elif defined(HAVE_RES_NSEARCH)
#define php_dns_search(res, dname, class, type, answer, anslen) \
			res_nsearch(res, dname, class, type, answer, anslen);
#ifdef HAVE_RES_NDESTROY
#define php_dns_free_handle(res) \
			res_ndestroy(res); \
			php_dns_free_res(res)
#else
#define php_dns_free_handle(res) \
			res_nclose(res); \
			php_dns_free_res(res)
#endif
#define php_dns_errno(handle) handle->res_h_errno

#elif defined(HAVE_RES_SEARCH)
#define php_dns_search(res, dname, class, type, answer, anslen) \
			res_search(dname, class, type, answer, anslen)
#define php_dns_free_handle(res) /* noop */
#define php_dns_errno(handle) h_errno

#endif

#if defined(HAVE_DNS_SEARCH) || defined(HAVE_RES_NSEARCH) || defined(HAVE_RES_SEARCH)
#define HAVE_DNS_SEARCH_FUNC 1
#endif

#if defined(HAVE_DNS_SEARCH_FUNC) && defined(HAVE_DN_EXPAND) && defined(HAVE_DN_SKIPNAME)
#define HAVE_FULL_DNS_FUNCS 1
#endif

#if defined(PHP_WIN32) || (defined(HAVE_DNS_SEARCH_FUNC) && defined(HAVE_FULL_DNS_FUNCS))
#define PHP_DNS_A      0x00000001
#define PHP_DNS_NS     0x00000002
#define PHP_DNS_CNAME  0x00000010
#define PHP_DNS_SOA    0x00000020
#define PHP_DNS_PTR    0x00000800
#define PHP_DNS_HINFO  0x00001000
#if !defined(PHP_WIN32)
# define PHP_DNS_CAA    0x00002000
#endif
#define PHP_DNS_MX     0x00004000
#define PHP_DNS_TXT    0x00008000
#define PHP_DNS_A6     0x01000000
#define PHP_DNS_SRV    0x02000000
#define PHP_DNS_NAPTR  0x04000000
#define PHP_DNS_AAAA   0x08000000
#define PHP_DNS_ANY    0x10000000

#if defined(PHP_WIN32)
# define PHP_DNS_NUM_TYPES	12	/* Number of DNS Types Supported by PHP currently */
# define PHP_DNS_ALL    (PHP_DNS_A|PHP_DNS_NS|PHP_DNS_CNAME|PHP_DNS_SOA|PHP_DNS_PTR|PHP_DNS_HINFO|PHP_DNS_MX|PHP_DNS_TXT|PHP_DNS_A6|PHP_DNS_SRV|PHP_DNS_NAPTR|PHP_DNS_AAAA)
#else
# define PHP_DNS_NUM_TYPES	13	/* Number of DNS Types Supported by PHP currently */
# define PHP_DNS_ALL   (PHP_DNS_A|PHP_DNS_NS|PHP_DNS_CNAME|PHP_DNS_SOA|PHP_DNS_PTR|PHP_DNS_HINFO|PHP_DNS_CAA|PHP_DNS_MX|PHP_DNS_TXT|PHP_DNS_A6|PHP_DNS_SRV|PHP_DNS_NAPTR|PHP_DNS_AAAA)
#endif
#endif

#ifndef INT16SZ
#define INT16SZ		2
#endif

#ifndef INT32SZ
#define INT32SZ		4
#endif

#endif /* PHP_DNS_H */
ext/standard/php_mail.h000064400000002401151730542660011114 0ustar00/*
   +----------------------------------------------------------------------+
   | Copyright (c) The PHP Group                                          |
   +----------------------------------------------------------------------+
   | This source file is subject to version 3.01 of the PHP license,      |
   | that is bundled with this package in the file LICENSE, and is        |
   | available through the world-wide-web at the following url:           |
   | https://www.php.net/license/3_01.txt                                 |
   | If you did not receive a copy of the PHP license and are unable to   |
   | obtain it through the world-wide-web, please send a note to          |
   | license@php.net so we can mail you a copy immediately.               |
   +----------------------------------------------------------------------+
   | Author: Rasmus Lerdorf <rasmus@lerdorf.on.ca>                        |
   +----------------------------------------------------------------------+
*/

#ifndef PHP_MAIL_H
#define PHP_MAIL_H

PHP_MINFO_FUNCTION(mail);

PHPAPI zend_string *php_mail_build_headers(HashTable *headers);
PHPAPI extern bool php_mail(const char *to, const char *subject, const char *message, const char *headers, const char *extra_cmd);

#endif /* PHP_MAIL_H */
ext/standard/php_http.h000064400000002505151730542670011157 0ustar00/*
   +----------------------------------------------------------------------+
   | Copyright (c) The PHP Group                                          |
   +----------------------------------------------------------------------+
   | This source file is subject to version 3.01 of the PHP license,      |
   | that is bundled with this package in the file LICENSE, and is        |
   | available through the world-wide-web at the following url:           |
   | https://www.php.net/license/3_01.txt                                 |
   | If you did not receive a copy of the PHP license and are unable to   |
   | obtain it through the world-wide-web, please send a note to          |
   | license@php.net so we can mail you a copy immediately.               |
   +----------------------------------------------------------------------+
   | Authors: Sara Golemon <pollita@php.net>                              |
   +----------------------------------------------------------------------+
*/

#ifndef PHP_HTTP_H
#define PHP_HTTP_H

#include "php.h"
#include "zend_types.h" /* for zend_string */
#include "zend_smart_str.h"

PHPAPI void php_url_encode_hash_ex(HashTable *ht, smart_str *formstr,
				const char *num_prefix, size_t num_prefix_len,
				const zend_string *key_prefix,
				zval *type, const zend_string *arg_sep, int enc_type);

#endif
ext/standard/php_versioning.h000064400000002273151730542670012365 0ustar00/*
   +----------------------------------------------------------------------+
   | Copyright (c) The PHP Group                                          |
   +----------------------------------------------------------------------+
   | This source file is subject to version 3.01 of the PHP license,      |
   | that is bundled with this package in the file LICENSE, and is        |
   | available through the world-wide-web at the following url:           |
   | https://www.php.net/license/3_01.txt                                 |
   | If you did not receive a copy of the PHP license and are unable to   |
   | obtain it through the world-wide-web, please send a note to          |
   | license@php.net so we can mail you a copy immediately.               |
   +----------------------------------------------------------------------+
   | Author: Stig Sæther Bakken <ssb@php.net>                             |
   +----------------------------------------------------------------------+
*/

#ifndef PHP_VERSIONING_H
#define PHP_VERSIONING_H

#include "ext/standard/basic_functions.h"

PHPAPI char *php_canonicalize_version(const char *);
PHPAPI int php_version_compare(const char *, const char *);

#endif
ext/standard/exec.h000064400000002472151730542700010252 0ustar00/*
   +----------------------------------------------------------------------+
   | Copyright (c) The PHP Group                                          |
   +----------------------------------------------------------------------+
   | This source file is subject to version 3.01 of the PHP license,      |
   | that is bundled with this package in the file LICENSE, and is        |
   | available through the world-wide-web at the following url:           |
   | https://www.php.net/license/3_01.txt                                 |
   | If you did not receive a copy of the PHP license and are unable to   |
   | obtain it through the world-wide-web, please send a note to          |
   | license@php.net so we can mail you a copy immediately.               |
   +----------------------------------------------------------------------+
   | Author: Rasmus Lerdorf <rasmus@lerdorf.on.ca>                        |
   +----------------------------------------------------------------------+
*/

#ifndef EXEC_H
#define EXEC_H

PHP_MINIT_FUNCTION(proc_open);
PHP_MINIT_FUNCTION(exec);

PHPAPI zend_string *php_escape_shell_cmd(const zend_string *unescaped_cmd);
PHPAPI zend_string *php_escape_shell_arg(const zend_string *unescaped_arg);
PHPAPI int php_exec(int type, const char *cmd, zval *array, zval *return_value);

#endif /* EXEC_H */
ext/standard/php_dir.h000064400000002331151730542700010745 0ustar00/*
   +----------------------------------------------------------------------+
   | Copyright (c) The PHP Group                                          |
   +----------------------------------------------------------------------+
   | This source file is subject to version 3.01 of the PHP license,      |
   | that is bundled with this package in the file LICENSE, and is        |
   | available through the world-wide-web at the following url:           |
   | https://www.php.net/license/3_01.txt                                 |
   | If you did not receive a copy of the PHP license and are unable to   |
   | obtain it through the world-wide-web, please send a note to          |
   | license@php.net so we can mail you a copy immediately.               |
   +----------------------------------------------------------------------+
   | Author: Thies C. Arntzen <thies@thieso.net>                          |
   +----------------------------------------------------------------------+
 */

#ifndef PHP_DIR_H
#define PHP_DIR_H

/* directory functions */
PHP_MINIT_FUNCTION(dir);
PHP_RINIT_FUNCTION(dir);

#define PHP_SCANDIR_SORT_ASCENDING 0
#define PHP_SCANDIR_SORT_DESCENDING 1
#define PHP_SCANDIR_SORT_NONE 2

#endif /* PHP_DIR_H */
ext/standard/php_dir_int.h000064400000002041151730542700011615 0ustar00/*
   +----------------------------------------------------------------------+
   | Copyright (c) The PHP Group                                          |
   +----------------------------------------------------------------------+
   | This source file is subject to version 3.01 of the PHP license,      |
   | that is bundled with this package in the file LICENSE, and is        |
   | available through the world-wide-web at the following url:           |
   | https://www.php.net/license/3_01.txt                                 |
   | If you did not receive a copy of the PHP license and are unable to   |
   | obtain it through the world-wide-web, please send a note to          |
   | license@php.net so we can mail you a copy immediately.               |
   +----------------------------------------------------------------------+
 */

/* internal header; not supposed to be installed; FIXME but unfortunately is */

#ifndef PHP_DIR_INT_H
#define PHP_DIR_INT_H

#include "php_glob.h"

char dirsep_str[2], pathsep_str[2];

#endif /* PHP_DIR_INT_H */
ext/standard/url.h000064400000004424151730542710010130 0ustar00/*
   +----------------------------------------------------------------------+
   | Copyright (c) The PHP Group                                          |
   +----------------------------------------------------------------------+
   | This source file is subject to version 3.01 of the PHP license,      |
   | that is bundled with this package in the file LICENSE, and is        |
   | available through the world-wide-web at the following url:           |
   | https://www.php.net/license/3_01.txt                                 |
   | If you did not receive a copy of the PHP license and are unable to   |
   | obtain it through the world-wide-web, please send a note to          |
   | license@php.net so we can mail you a copy immediately.               |
   +----------------------------------------------------------------------+
   | Author: Jim Winstead <jimw@php.net>                                  |
   +----------------------------------------------------------------------+
 */

#ifndef URL_H
#define URL_H

typedef struct php_url {
	zend_string *scheme;
	zend_string *user;
	zend_string *pass;
	zend_string *host;
	unsigned short port;
	zend_string *path;
	zend_string *query;
	zend_string *fragment;
} php_url;

PHPAPI void php_url_free(php_url *theurl);
PHPAPI php_url *php_url_parse(char const *str);
PHPAPI php_url *php_url_parse_ex(char const *str, size_t length);
PHPAPI php_url *php_url_parse_ex2(char const *str, size_t length, bool *has_port);
PHPAPI size_t php_url_decode(char *str, size_t len); /* return value: length of decoded string */
PHPAPI size_t php_url_decode_ex(char *dest, const char *src, size_t src_len);
PHPAPI size_t php_raw_url_decode(char *str, size_t len); /* return value: length of decoded string */
PHPAPI size_t php_raw_url_decode_ex(char *dest, const char *src, size_t src_len);
PHPAPI zend_string *php_url_encode(char const *s, size_t len);
PHPAPI zend_string *php_raw_url_encode(char const *s, size_t len);
PHPAPI void php_url_encode_to_smart_str(smart_str *buf, char const *s, size_t len, bool raw);

#define PHP_URL_SCHEME 0
#define PHP_URL_HOST 1
#define PHP_URL_PORT 2
#define PHP_URL_USER 3
#define PHP_URL_PASS 4
#define PHP_URL_PATH 5
#define PHP_URL_QUERY 6
#define PHP_URL_FRAGMENT 7

#define PHP_QUERY_RFC1738 1
#define PHP_QUERY_RFC3986 2

#endif /* URL_H */
ext/standard/proc_open.h000064400000003626151730542720011316 0ustar00/*
   +----------------------------------------------------------------------+
   | Copyright (c) The PHP Group                                          |
   +----------------------------------------------------------------------+
   | This source file is subject to version 3.01 of the PHP license,      |
   | that is bundled with this package in the file LICENSE, and is        |
   | available through the world-wide-web at the following url:           |
   | https://www.php.net/license/3_01.txt                                 |
   | If you did not receive a copy of the PHP license and are unable to   |
   | obtain it through the world-wide-web, please send a note to          |
   | license@php.net so we can mail you a copy immediately.               |
   +----------------------------------------------------------------------+
   | Author: Wez Furlong <wez@thebrainroom.com>                           |
   +----------------------------------------------------------------------+
 */

#ifdef PHP_WIN32
typedef HANDLE php_file_descriptor_t;
typedef DWORD php_process_id_t;
# define PHP_INVALID_FD INVALID_HANDLE_VALUE
#else
typedef int php_file_descriptor_t;
typedef pid_t php_process_id_t;
# define PHP_INVALID_FD (-1)
#endif

/* Environment block under Win32 is a NUL terminated sequence of NUL terminated
 *   name=value strings.
 * Under Unix, it is an argv style array. */
typedef struct _php_process_env {
	char *envp;
#ifndef PHP_WIN32
	char **envarray;
#endif
} php_process_env;

typedef struct _php_process_handle {
	php_process_id_t	child;
#ifdef PHP_WIN32
	HANDLE childHandle;
#endif
	int npipes;
	zend_resource **pipes;
	zend_string *command;
	php_process_env env;
#ifdef HAVE_SYS_WAIT_H
	/* We can only request the status once before it becomes unavailable.
	 * Cache the result so we can request it multiple times. */
	int cached_exit_wait_status_value;
	bool has_cached_exit_wait_status;
#endif
} php_process_handle;
ext/standard/php_password.h000064400000005476151730542720012050 0ustar00/*
   +----------------------------------------------------------------------+
   | Copyright (c) The PHP Group                                          |
   +----------------------------------------------------------------------+
   | This source file is subject to version 3.01 of the PHP license,      |
   | that is bundled with this package in the file LICENSE, and is        |
   | available through the world-wide-web at the following url:           |
   | https://www.php.net/license/3_01.txt                                 |
   | If you did not receive a copy of the PHP license and are unable to   |
   | obtain it through the world-wide-web, please send a note to          |
   | license@php.net so we can mail you a copy immediately.               |
   +----------------------------------------------------------------------+
   | Authors: Anthony Ferrara <ircmaxell@php.net>                         |
   |          Charles R. Portwood II <charlesportwoodii@erianna.com>      |
   +----------------------------------------------------------------------+
*/

#ifndef PHP_PASSWORD_H
#define PHP_PASSWORD_H

PHP_MINIT_FUNCTION(password);
PHP_MSHUTDOWN_FUNCTION(password);

#define PHP_PASSWORD_DEFAULT    PHP_PASSWORD_BCRYPT
#define PHP_PASSWORD_BCRYPT_COST 12

#ifdef HAVE_ARGON2LIB
/**
 * When updating these values, synchronize values in
 *     ext/sodium/php_libsodium.h
 *     ext/openssl/php_openssl.h
 * Note that libargon/openssl express memlimit in KB, while libsodium uses bytes.
 */
#define PHP_PASSWORD_ARGON2_MEMORY_COST (64 << 10)
#define PHP_PASSWORD_ARGON2_TIME_COST 4
#define PHP_PASSWORD_ARGON2_THREADS 1
#endif

typedef struct _php_password_algo {
	const char *name;
	zend_string *(*hash)(const zend_string *password, zend_array *options);
	bool (*verify)(const zend_string *password, const zend_string *hash);
	bool (*needs_rehash)(const zend_string *password, zend_array *options);
	int (*get_info)(zval *return_value, const zend_string *hash);
	bool (*valid)(const zend_string *hash);
} php_password_algo;

extern const php_password_algo php_password_algo_bcrypt;
#ifdef HAVE_ARGON2LIB
extern const php_password_algo php_password_algo_argon2i;
extern const php_password_algo php_password_algo_argon2id;
#endif

PHPAPI int php_password_algo_register(const char*, const php_password_algo*);
PHPAPI void php_password_algo_unregister(const char*);
PHPAPI const php_password_algo* php_password_algo_default(void);
PHPAPI zend_string *php_password_algo_extract_ident(const zend_string*);
PHPAPI const php_password_algo* php_password_algo_find(const zend_string*);

PHPAPI const php_password_algo* php_password_algo_identify_ex(const zend_string*, const php_password_algo*);
static inline const php_password_algo* php_password_algo_identify(const zend_string *hash) {
	return php_password_algo_identify_ex(hash, php_password_algo_default());
}


#endif
ext/standard/password_arginfo.h000064400000002007151730542730012672 0ustar00/* This is a generated file, edit the .stub.php file instead.
 * Stub hash: f61df8d477588718e0eb1b055e5a3e138e6bcad3 */

static void register_password_symbols(int module_number)
{
	REGISTER_STRING_CONSTANT("PASSWORD_DEFAULT", "2y", CONST_PERSISTENT);
	REGISTER_STRING_CONSTANT("PASSWORD_BCRYPT", "2y", CONST_PERSISTENT);
	REGISTER_LONG_CONSTANT("PASSWORD_BCRYPT_DEFAULT_COST", PHP_PASSWORD_BCRYPT_COST, CONST_PERSISTENT);
#if defined(HAVE_ARGON2LIB)
	REGISTER_STRING_CONSTANT("PASSWORD_ARGON2I", "argon2i", CONST_PERSISTENT);
	REGISTER_STRING_CONSTANT("PASSWORD_ARGON2ID", "argon2id", CONST_PERSISTENT);
	REGISTER_STRING_CONSTANT("PASSWORD_ARGON2_PROVIDER", "standard", CONST_PERSISTENT);
	REGISTER_LONG_CONSTANT("PASSWORD_ARGON2_DEFAULT_MEMORY_COST", PHP_PASSWORD_ARGON2_MEMORY_COST, CONST_PERSISTENT);
	REGISTER_LONG_CONSTANT("PASSWORD_ARGON2_DEFAULT_TIME_COST", PHP_PASSWORD_ARGON2_TIME_COST, CONST_PERSISTENT);
	REGISTER_LONG_CONSTANT("PASSWORD_ARGON2_DEFAULT_THREADS", PHP_PASSWORD_ARGON2_THREADS, CONST_PERSISTENT);
#endif
}
ext/standard/php_var.h000064400000006651151730542740010774 0ustar00/*
   +----------------------------------------------------------------------+
   | Copyright (c) The PHP Group                                          |
   +----------------------------------------------------------------------+
   | This source file is subject to version 3.01 of the PHP license,      |
   | that is bundled with this package in the file LICENSE, and is        |
   | available through the world-wide-web at the following url:           |
   | https://www.php.net/license/3_01.txt                                 |
   | If you did not receive a copy of the PHP license and are unable to   |
   | obtain it through the world-wide-web, please send a note to          |
   | license@php.net so we can mail you a copy immediately.               |
   +----------------------------------------------------------------------+
   | Author: Jani Lehtimäki <jkl@njet.net>                                |
   +----------------------------------------------------------------------+
*/

#ifndef PHP_VAR_H
#define PHP_VAR_H

#include "ext/standard/basic_functions.h"
#include "zend_smart_str_public.h"

PHP_MINIT_FUNCTION(var);

PHPAPI void php_var_dump(zval *struc, int level);
PHPAPI void php_var_export(zval *struc, int level);
PHPAPI zend_result php_var_export_ex(zval *struc, int level, smart_str *buf);

PHPAPI void php_debug_zval_dump(zval *struc, int level);

typedef struct php_serialize_data *php_serialize_data_t;
typedef struct php_unserialize_data *php_unserialize_data_t;

PHPAPI void php_var_serialize(smart_str *buf, zval *struc, php_serialize_data_t *data);
PHPAPI int php_var_unserialize(zval *rval, const unsigned char **p, const unsigned char *max, php_unserialize_data_t *var_hash);
PHPAPI int php_var_unserialize_ref(zval *rval, const unsigned char **p, const unsigned char *max, php_unserialize_data_t *var_hash);
PHPAPI int php_var_unserialize_intern(zval *rval, const unsigned char **p, const unsigned char *max, php_unserialize_data_t *var_hash);

PHPAPI php_serialize_data_t php_var_serialize_init(void);
PHPAPI void php_var_serialize_destroy(php_serialize_data_t d);
PHPAPI php_unserialize_data_t php_var_unserialize_init(void);
PHPAPI void php_var_unserialize_destroy(php_unserialize_data_t d);
PHPAPI HashTable *php_var_unserialize_get_allowed_classes(php_unserialize_data_t d);
PHPAPI void php_var_unserialize_set_allowed_classes(php_unserialize_data_t d, HashTable *classes);
PHPAPI void php_var_unserialize_set_max_depth(php_unserialize_data_t d, zend_long max_depth);
PHPAPI zend_long php_var_unserialize_get_max_depth(php_unserialize_data_t d);
PHPAPI void php_var_unserialize_set_cur_depth(php_unserialize_data_t d, zend_long cur_depth);
PHPAPI zend_long php_var_unserialize_get_cur_depth(php_unserialize_data_t d);

#define PHP_VAR_SERIALIZE_INIT(d) \
	(d) = php_var_serialize_init()

#define PHP_VAR_SERIALIZE_DESTROY(d) \
	php_var_serialize_destroy(d)

#define PHP_VAR_UNSERIALIZE_INIT(d) \
	(d) = php_var_unserialize_init()

#define PHP_VAR_UNSERIALIZE_DESTROY(d) \
	php_var_unserialize_destroy(d)

PHPAPI void php_unserialize_with_options(zval *return_value, const char *buf, const size_t buf_len, HashTable *options, const char* function_name);

PHPAPI void var_replace(php_unserialize_data_t *var_hash, zval *ozval, zval *nzval);
PHPAPI void var_push_dtor(php_unserialize_data_t *var_hash, zval *val);
PHPAPI zval *var_tmp_var(php_unserialize_data_t *var_hashx);
PHPAPI void var_destroy(php_unserialize_data_t *var_hash);

#endif /* PHP_VAR_H */
ext/standard/flock_compat.h000064400000003557151730542740012000 0ustar00/*
   +----------------------------------------------------------------------+
   | Copyright (c) The PHP Group                                          |
   +----------------------------------------------------------------------+
   | This source file is subject to version 3.01 of the PHP license,      |
   | that is bundled with this package in the file LICENSE, and is        |
   | available through the world-wide-web at the following url:           |
   | https://www.php.net/license/3_01.txt                                 |
   | If you did not receive a copy of the PHP license and are unable to   |
   | obtain it through the world-wide-web, please send a note to          |
   | license@php.net so we can mail you a copy immediately.               |
   +----------------------------------------------------------------------+
   | Author: Sascha Schumann <sascha@schumann.cx>                         |
   +----------------------------------------------------------------------+
*/

#ifndef FLOCK_COMPAT_H
#define FLOCK_COMPAT_H

#ifdef HAVE_STRUCT_FLOCK
#include <unistd.h>
#include <fcntl.h>
#include <sys/file.h>
#endif

#ifdef PHP_WIN32
#include <io.h>
#include "config.w32.h"
#endif

/* php_flock internally uses fcntl whether or not flock is available
 * This way our php_flock even works on NFS files.
 * More info: /usr/src/linux/Documentation
 */
PHPAPI int php_flock(int fd, int operation);

#ifndef HAVE_FLOCK
#	define LOCK_SH 1
#	define LOCK_EX 2
#	define LOCK_NB 4
#	define LOCK_UN 8
PHPAPI int flock(int fd, int operation);
#endif

/* Userland LOCK_* constants */
#define PHP_LOCK_SH 1
#define PHP_LOCK_EX 2
#define PHP_LOCK_UN 3
#define PHP_LOCK_NB 4

#ifdef PHP_WIN32
# ifdef EWOULDBLOCK
#  undef EWOULDBLOCK
# endif
# define EWOULDBLOCK WSAEWOULDBLOCK
# define fsync _commit
# define ftruncate(a, b) chsize(a, b)
#endif /* defined(PHP_WIN32) */

#endif	/* FLOCK_COMPAT_H */
ext/standard/file_arginfo.h000064400000023224151730542750011755 0ustar00/* This is a generated file, edit the .stub.php file instead.
 * Stub hash: c394e14cd32587ce9ad0503e21c6c4cf5b301697 */

static void register_file_symbols(int module_number)
{
	REGISTER_LONG_CONSTANT("SEEK_SET", SEEK_SET, CONST_PERSISTENT);
	REGISTER_LONG_CONSTANT("SEEK_CUR", SEEK_CUR, CONST_PERSISTENT);
	REGISTER_LONG_CONSTANT("SEEK_END", SEEK_END, CONST_PERSISTENT);
	REGISTER_LONG_CONSTANT("LOCK_SH", PHP_LOCK_SH, CONST_PERSISTENT);
	REGISTER_LONG_CONSTANT("LOCK_EX", PHP_LOCK_EX, CONST_PERSISTENT);
	REGISTER_LONG_CONSTANT("LOCK_UN", PHP_LOCK_UN, CONST_PERSISTENT);
	REGISTER_LONG_CONSTANT("LOCK_NB", PHP_LOCK_NB, CONST_PERSISTENT);
	REGISTER_LONG_CONSTANT("STREAM_NOTIFY_CONNECT", PHP_STREAM_NOTIFY_CONNECT, CONST_PERSISTENT);
	REGISTER_LONG_CONSTANT("STREAM_NOTIFY_AUTH_REQUIRED", PHP_STREAM_NOTIFY_AUTH_REQUIRED, CONST_PERSISTENT);
	REGISTER_LONG_CONSTANT("STREAM_NOTIFY_AUTH_RESULT", PHP_STREAM_NOTIFY_AUTH_RESULT, CONST_PERSISTENT);
	REGISTER_LONG_CONSTANT("STREAM_NOTIFY_MIME_TYPE_IS", PHP_STREAM_NOTIFY_MIME_TYPE_IS, CONST_PERSISTENT);
	REGISTER_LONG_CONSTANT("STREAM_NOTIFY_FILE_SIZE_IS", PHP_STREAM_NOTIFY_FILE_SIZE_IS, CONST_PERSISTENT);
	REGISTER_LONG_CONSTANT("STREAM_NOTIFY_REDIRECTED", PHP_STREAM_NOTIFY_REDIRECTED, CONST_PERSISTENT);
	REGISTER_LONG_CONSTANT("STREAM_NOTIFY_PROGRESS", PHP_STREAM_NOTIFY_PROGRESS, CONST_PERSISTENT);
	REGISTER_LONG_CONSTANT("STREAM_NOTIFY_FAILURE", PHP_STREAM_NOTIFY_FAILURE, CONST_PERSISTENT);
	REGISTER_LONG_CONSTANT("STREAM_NOTIFY_COMPLETED", PHP_STREAM_NOTIFY_COMPLETED, CONST_PERSISTENT);
	REGISTER_LONG_CONSTANT("STREAM_NOTIFY_RESOLVE", PHP_STREAM_NOTIFY_RESOLVE, CONST_PERSISTENT);
	REGISTER_LONG_CONSTANT("STREAM_NOTIFY_SEVERITY_INFO", PHP_STREAM_NOTIFY_SEVERITY_INFO, CONST_PERSISTENT);
	REGISTER_LONG_CONSTANT("STREAM_NOTIFY_SEVERITY_WARN", PHP_STREAM_NOTIFY_SEVERITY_WARN, CONST_PERSISTENT);
	REGISTER_LONG_CONSTANT("STREAM_NOTIFY_SEVERITY_ERR", PHP_STREAM_NOTIFY_SEVERITY_ERR, CONST_PERSISTENT);
	REGISTER_LONG_CONSTANT("STREAM_FILTER_READ", PHP_STREAM_FILTER_READ, CONST_PERSISTENT);
	REGISTER_LONG_CONSTANT("STREAM_FILTER_WRITE", PHP_STREAM_FILTER_WRITE, CONST_PERSISTENT);
	REGISTER_LONG_CONSTANT("STREAM_FILTER_ALL", PHP_STREAM_FILTER_ALL, CONST_PERSISTENT);
	REGISTER_LONG_CONSTANT("STREAM_CLIENT_PERSISTENT", PHP_STREAM_CLIENT_PERSISTENT, CONST_PERSISTENT);
	REGISTER_LONG_CONSTANT("STREAM_CLIENT_ASYNC_CONNECT", PHP_STREAM_CLIENT_ASYNC_CONNECT, CONST_PERSISTENT);
	REGISTER_LONG_CONSTANT("STREAM_CLIENT_CONNECT", PHP_STREAM_CLIENT_CONNECT, CONST_PERSISTENT);
	REGISTER_LONG_CONSTANT("STREAM_CRYPTO_METHOD_ANY_CLIENT", STREAM_CRYPTO_METHOD_ANY_CLIENT, CONST_PERSISTENT);
	REGISTER_LONG_CONSTANT("STREAM_CRYPTO_METHOD_SSLv2_CLIENT", STREAM_CRYPTO_METHOD_SSLv2_CLIENT, CONST_PERSISTENT);
	REGISTER_LONG_CONSTANT("STREAM_CRYPTO_METHOD_SSLv3_CLIENT", STREAM_CRYPTO_METHOD_SSLv3_CLIENT, CONST_PERSISTENT);
	REGISTER_LONG_CONSTANT("STREAM_CRYPTO_METHOD_SSLv23_CLIENT", STREAM_CRYPTO_METHOD_SSLv23_CLIENT, CONST_PERSISTENT);
	REGISTER_LONG_CONSTANT("STREAM_CRYPTO_METHOD_TLS_CLIENT", STREAM_CRYPTO_METHOD_TLS_CLIENT, CONST_PERSISTENT);
	REGISTER_LONG_CONSTANT("STREAM_CRYPTO_METHOD_TLSv1_0_CLIENT", STREAM_CRYPTO_METHOD_TLSv1_0_CLIENT, CONST_PERSISTENT);
	REGISTER_LONG_CONSTANT("STREAM_CRYPTO_METHOD_TLSv1_1_CLIENT", STREAM_CRYPTO_METHOD_TLSv1_1_CLIENT, CONST_PERSISTENT);
	REGISTER_LONG_CONSTANT("STREAM_CRYPTO_METHOD_TLSv1_2_CLIENT", STREAM_CRYPTO_METHOD_TLSv1_2_CLIENT, CONST_PERSISTENT);
	REGISTER_LONG_CONSTANT("STREAM_CRYPTO_METHOD_TLSv1_3_CLIENT", STREAM_CRYPTO_METHOD_TLSv1_3_CLIENT, CONST_PERSISTENT);
	REGISTER_LONG_CONSTANT("STREAM_CRYPTO_METHOD_ANY_SERVER", STREAM_CRYPTO_METHOD_ANY_SERVER, CONST_PERSISTENT);
	REGISTER_LONG_CONSTANT("STREAM_CRYPTO_METHOD_SSLv2_SERVER", STREAM_CRYPTO_METHOD_SSLv2_SERVER, CONST_PERSISTENT);
	REGISTER_LONG_CONSTANT("STREAM_CRYPTO_METHOD_SSLv3_SERVER", STREAM_CRYPTO_METHOD_SSLv3_SERVER, CONST_PERSISTENT);
	REGISTER_LONG_CONSTANT("STREAM_CRYPTO_METHOD_SSLv23_SERVER", STREAM_CRYPTO_METHOD_SSLv23_SERVER, CONST_PERSISTENT);
	REGISTER_LONG_CONSTANT("STREAM_CRYPTO_METHOD_TLS_SERVER", STREAM_CRYPTO_METHOD_TLS_SERVER, CONST_PERSISTENT);
	REGISTER_LONG_CONSTANT("STREAM_CRYPTO_METHOD_TLSv1_0_SERVER", STREAM_CRYPTO_METHOD_TLSv1_0_SERVER, CONST_PERSISTENT);
	REGISTER_LONG_CONSTANT("STREAM_CRYPTO_METHOD_TLSv1_1_SERVER", STREAM_CRYPTO_METHOD_TLSv1_1_SERVER, CONST_PERSISTENT);
	REGISTER_LONG_CONSTANT("STREAM_CRYPTO_METHOD_TLSv1_2_SERVER", STREAM_CRYPTO_METHOD_TLSv1_2_SERVER, CONST_PERSISTENT);
	REGISTER_LONG_CONSTANT("STREAM_CRYPTO_METHOD_TLSv1_3_SERVER", STREAM_CRYPTO_METHOD_TLSv1_3_SERVER, CONST_PERSISTENT);
	REGISTER_LONG_CONSTANT("STREAM_CRYPTO_PROTO_SSLv3", STREAM_CRYPTO_METHOD_SSLv3_SERVER, CONST_PERSISTENT);
	REGISTER_LONG_CONSTANT("STREAM_CRYPTO_PROTO_TLSv1_0", STREAM_CRYPTO_METHOD_TLSv1_0_SERVER, CONST_PERSISTENT);
	REGISTER_LONG_CONSTANT("STREAM_CRYPTO_PROTO_TLSv1_1", STREAM_CRYPTO_METHOD_TLSv1_1_SERVER, CONST_PERSISTENT);
	REGISTER_LONG_CONSTANT("STREAM_CRYPTO_PROTO_TLSv1_2", STREAM_CRYPTO_METHOD_TLSv1_2_SERVER, CONST_PERSISTENT);
	REGISTER_LONG_CONSTANT("STREAM_CRYPTO_PROTO_TLSv1_3", STREAM_CRYPTO_METHOD_TLSv1_3_SERVER, CONST_PERSISTENT);
	REGISTER_LONG_CONSTANT("STREAM_SHUT_RD", STREAM_SHUT_RD, CONST_PERSISTENT);
	REGISTER_LONG_CONSTANT("STREAM_SHUT_WR", STREAM_SHUT_WR, CONST_PERSISTENT);
	REGISTER_LONG_CONSTANT("STREAM_SHUT_RDWR", STREAM_SHUT_RDWR, CONST_PERSISTENT);
#if defined(PF_INET)
	REGISTER_LONG_CONSTANT("STREAM_PF_INET", PF_INET, CONST_PERSISTENT);
#endif
#if (!defined(PF_INET) && defined(AF_INET))
	REGISTER_LONG_CONSTANT("STREAM_PF_INET", AF_INET, CONST_PERSISTENT);
#endif
#if defined(HAVE_IPV6) && defined(PF_INET6)
	REGISTER_LONG_CONSTANT("STREAM_PF_INET6", PF_INET6, CONST_PERSISTENT);
#endif
#if defined(HAVE_IPV6) && (!defined(PF_INET6) && defined(AF_INET6))
	REGISTER_LONG_CONSTANT("STREAM_PF_INET6", AF_INET6, CONST_PERSISTENT);
#endif
#if defined(PF_UNIX)
	REGISTER_LONG_CONSTANT("STREAM_PF_UNIX", PF_UNIX, CONST_PERSISTENT);
#endif
#if (!defined(PF_UNIX) && defined(AF_UNIX))
	REGISTER_LONG_CONSTANT("STREAM_PF_UNIX", AF_UNIX, CONST_PERSISTENT);
#endif
#if defined(IPPROTO_IP)
	REGISTER_LONG_CONSTANT("STREAM_IPPROTO_IP", IPPROTO_IP, CONST_PERSISTENT);
#endif
#if (defined(IPPROTO_TCP) || defined(PHP_WIN32))
	REGISTER_LONG_CONSTANT("STREAM_IPPROTO_TCP", IPPROTO_TCP, CONST_PERSISTENT);
#endif
#if (defined(IPPROTO_UDP) || defined(PHP_WIN32))
	REGISTER_LONG_CONSTANT("STREAM_IPPROTO_UDP", IPPROTO_UDP, CONST_PERSISTENT);
#endif
#if (defined(IPPROTO_ICMP) || defined(PHP_WIN32))
	REGISTER_LONG_CONSTANT("STREAM_IPPROTO_ICMP", IPPROTO_ICMP, CONST_PERSISTENT);
#endif
#if (defined(IPPROTO_RAW) || defined(PHP_WIN32))
	REGISTER_LONG_CONSTANT("STREAM_IPPROTO_RAW", IPPROTO_RAW, CONST_PERSISTENT);
#endif
	REGISTER_LONG_CONSTANT("STREAM_SOCK_STREAM", SOCK_STREAM, CONST_PERSISTENT);
	REGISTER_LONG_CONSTANT("STREAM_SOCK_DGRAM", SOCK_DGRAM, CONST_PERSISTENT);
#if defined(SOCK_RAW)
	REGISTER_LONG_CONSTANT("STREAM_SOCK_RAW", SOCK_RAW, CONST_PERSISTENT);
#endif
#if defined(SOCK_SEQPACKET)
	REGISTER_LONG_CONSTANT("STREAM_SOCK_SEQPACKET", SOCK_SEQPACKET, CONST_PERSISTENT);
#endif
#if defined(SOCK_RDM)
	REGISTER_LONG_CONSTANT("STREAM_SOCK_RDM", SOCK_RDM, CONST_PERSISTENT);
#endif
	REGISTER_LONG_CONSTANT("STREAM_PEEK", STREAM_PEEK, CONST_PERSISTENT);
	REGISTER_LONG_CONSTANT("STREAM_OOB", STREAM_OOB, CONST_PERSISTENT);
	REGISTER_LONG_CONSTANT("STREAM_SERVER_BIND", STREAM_XPORT_BIND, CONST_PERSISTENT);
	REGISTER_LONG_CONSTANT("STREAM_SERVER_LISTEN", STREAM_XPORT_LISTEN, CONST_PERSISTENT);
	REGISTER_LONG_CONSTANT("FILE_USE_INCLUDE_PATH", PHP_FILE_USE_INCLUDE_PATH, CONST_PERSISTENT);
	REGISTER_LONG_CONSTANT("FILE_IGNORE_NEW_LINES", PHP_FILE_IGNORE_NEW_LINES, CONST_PERSISTENT);
	REGISTER_LONG_CONSTANT("FILE_SKIP_EMPTY_LINES", PHP_FILE_SKIP_EMPTY_LINES, CONST_PERSISTENT);
	REGISTER_LONG_CONSTANT("FILE_APPEND", PHP_FILE_APPEND, CONST_PERSISTENT);
	REGISTER_LONG_CONSTANT("FILE_NO_DEFAULT_CONTEXT", PHP_FILE_NO_DEFAULT_CONTEXT, CONST_PERSISTENT);
	zend_constant *const_FILE_TEXT = REGISTER_LONG_CONSTANT("FILE_TEXT", 0, CONST_PERSISTENT | CONST_DEPRECATED);
	zend_constant *const_FILE_BINARY = REGISTER_LONG_CONSTANT("FILE_BINARY", 0, CONST_PERSISTENT | CONST_DEPRECATED);
#if defined(HAVE_FNMATCH)
	REGISTER_LONG_CONSTANT("FNM_NOESCAPE", FNM_NOESCAPE, CONST_PERSISTENT);
	REGISTER_LONG_CONSTANT("FNM_PATHNAME", FNM_PATHNAME, CONST_PERSISTENT);
	REGISTER_LONG_CONSTANT("FNM_PERIOD", FNM_PERIOD, CONST_PERSISTENT);
#endif
#if defined(HAVE_FNMATCH) && defined(FNM_CASEFOLD)
	REGISTER_LONG_CONSTANT("FNM_CASEFOLD", FNM_CASEFOLD, CONST_PERSISTENT);
#endif


	zend_attribute *attribute_Deprecated_const_FILE_TEXT_0 = zend_add_global_constant_attribute(const_FILE_TEXT, ZSTR_KNOWN(ZEND_STR_DEPRECATED_CAPITALIZED), 2);
	ZVAL_STR(&attribute_Deprecated_const_FILE_TEXT_0->args[0].value, ZSTR_KNOWN(ZEND_STR_8_DOT_1));
	attribute_Deprecated_const_FILE_TEXT_0->args[0].name = ZSTR_KNOWN(ZEND_STR_SINCE);
	zend_string *attribute_Deprecated_const_FILE_TEXT_0_arg1_str = zend_string_init("as the constant has no effect", strlen("as the constant has no effect"), 1);
	ZVAL_STR(&attribute_Deprecated_const_FILE_TEXT_0->args[1].value, attribute_Deprecated_const_FILE_TEXT_0_arg1_str);
	attribute_Deprecated_const_FILE_TEXT_0->args[1].name = ZSTR_KNOWN(ZEND_STR_MESSAGE);

	zend_attribute *attribute_Deprecated_const_FILE_BINARY_0 = zend_add_global_constant_attribute(const_FILE_BINARY, ZSTR_KNOWN(ZEND_STR_DEPRECATED_CAPITALIZED), 2);
	ZVAL_STR(&attribute_Deprecated_const_FILE_BINARY_0->args[0].value, ZSTR_KNOWN(ZEND_STR_8_DOT_1));
	attribute_Deprecated_const_FILE_BINARY_0->args[0].name = ZSTR_KNOWN(ZEND_STR_SINCE);
	ZVAL_STR_COPY(&attribute_Deprecated_const_FILE_BINARY_0->args[1].value, attribute_Deprecated_const_FILE_TEXT_0_arg1_str);
	attribute_Deprecated_const_FILE_BINARY_0->args[1].name = ZSTR_KNOWN(ZEND_STR_MESSAGE);
}
ext/standard/fsock.h000064400000002337151730542750010440 0ustar00/*
   +----------------------------------------------------------------------+
   | Copyright (c) The PHP Group                                          |
   +----------------------------------------------------------------------+
   | This source file is subject to version 3.01 of the PHP license,      |
   | that is bundled with this package in the file LICENSE, and is        |
   | available through the world-wide-web at the following url:           |
   | https://www.php.net/license/3_01.txt                                 |
   | If you did not receive a copy of the PHP license and are unable to   |
   | obtain it through the world-wide-web, please send a note to          |
   | license@php.net so we can mail you a copy immediately.               |
   +----------------------------------------------------------------------+
   | Authors: Paul Panotzki - Bunyip Information Systems                  |
   |          Jim Winstead <jimw@php.net>                                 |
   |          Wez Furlong                                                 |
   +----------------------------------------------------------------------+
*/

#ifndef FSOCK_H
#define FSOCK_H

#include "file.h"

#include "php_network.h"


#endif /* FSOCK_H */
ext/standard/php_incomplete_class.h000064400000004232151730542760013523 0ustar00/*
   +----------------------------------------------------------------------+
   | Copyright (c) The PHP Group                                          |
   +----------------------------------------------------------------------+
   | This source file is subject to version 3.01 of the PHP license,      |
   | that is bundled with this package in the file LICENSE, and is        |
   | available through the world-wide-web at the following url:           |
   | https://www.php.net/license/3_01.txt                                 |
   | If you did not receive a copy of the PHP license and are unable to   |
   | obtain it through the world-wide-web, please send a note to          |
   | license@php.net so we can mail you a copy immediately.               |
   +----------------------------------------------------------------------+
   | Author:  Sascha Schumann <sascha@schumann.cx>                        |
   +----------------------------------------------------------------------+
*/

#ifndef PHP_INCOMPLETE_CLASS_H
#define PHP_INCOMPLETE_CLASS_H

#include "ext/standard/basic_functions.h"

extern PHPAPI zend_class_entry *php_ce_incomplete_class;

#define PHP_IC_ENTRY php_ce_incomplete_class

#define PHP_SET_CLASS_ATTRIBUTES(struc) \
	/* OBJECTS_FIXME: Fix for new object model */	\
	if (Z_OBJCE_P(struc) == php_ce_incomplete_class) {	\
		class_name = php_lookup_class_name(Z_OBJ_P(struc)); \
		if (!class_name) { \
			class_name = zend_string_init(INCOMPLETE_CLASS, sizeof(INCOMPLETE_CLASS) - 1, 0); \
		} \
		incomplete_class = 1; \
	} else { \
		class_name = zend_string_copy(Z_OBJCE_P(struc)->name); \
	}

#define PHP_CLEANUP_CLASS_ATTRIBUTES()	\
	zend_string_release_ex(class_name, 0)

#define PHP_CLASS_ATTRIBUTES											\
	zend_string *class_name;											\
	bool incomplete_class ZEND_ATTRIBUTE_UNUSED = 0

#define INCOMPLETE_CLASS "__PHP_Incomplete_Class"
#define MAGIC_MEMBER "__PHP_Incomplete_Class_Name"

#ifdef __cplusplus
extern "C" {
#endif

PHPAPI void php_register_incomplete_class_handlers(void);
PHPAPI zend_string *php_lookup_class_name(zend_object *object);
PHPAPI void php_store_class_name(zval *object, zend_string *name);

#ifdef __cplusplus
};
#endif

#endif
ext/standard/quot_print.h000064400000002347151730542760011541 0ustar00/*
   +----------------------------------------------------------------------+
   | Copyright (c) The PHP Group                                          |
   +----------------------------------------------------------------------+
   | This source file is subject to version 3.01 of the PHP license,      |
   | that is bundled with this package in the file LICENSE, and is        |
   | available through the world-wide-web at the following url:           |
   | https://www.php.net/license/3_01.txt                                 |
   | If you did not receive a copy of the PHP license and are unable to   |
   | obtain it through the world-wide-web, please send a note to          |
   | license@php.net so we can mail you a copy immediately.               |
   +----------------------------------------------------------------------+
   | Author: Kirill Maximov (kir@rus.net)                                 |
   +----------------------------------------------------------------------+
*/

#ifndef QUOT_PRINT_H
#define QUOT_PRINT_H

PHPAPI zend_string *php_quot_print_decode(const unsigned char *str, size_t length, int replace_us_by_ws);
PHPAPI zend_string *php_quot_print_encode(const unsigned char *str, size_t length);

#endif /* QUOT_PRINT_H */
ext/standard/php_array.h000064400000005461151730542770011323 0ustar00/*
   +----------------------------------------------------------------------+
   | Copyright (c) The PHP Group                                          |
   +----------------------------------------------------------------------+
   | This source file is subject to version 3.01 of the PHP license,      |
   | that is bundled with this package in the file LICENSE, and is        |
   | available through the world-wide-web at the following url:           |
   | https://www.php.net/license/3_01.txt                                 |
   | If you did not receive a copy of the PHP license and are unable to   |
   | obtain it through the world-wide-web, please send a note to          |
   | license@php.net so we can mail you a copy immediately.               |
   +----------------------------------------------------------------------+
   | Authors: Andi Gutmans <andi@php.net>                                 |
   |          Zeev Suraski <zeev@php.net>                                 |
   |          Rasmus Lerdorf <rasmus@php.net>                             |
   |          Andrei Zmievski <andrei@php.net>                            |
   +----------------------------------------------------------------------+
*/

#ifndef PHP_ARRAY_H
#define PHP_ARRAY_H

# include "ext/random/php_random.h"

PHP_MINIT_FUNCTION(array);
PHP_MSHUTDOWN_FUNCTION(array);

PHPAPI int php_array_merge(HashTable *dest, HashTable *src);
PHPAPI int php_array_merge_recursive(HashTable *dest, HashTable *src);
PHPAPI int php_array_replace_recursive(HashTable *dest, HashTable *src);
PHPAPI int php_multisort_compare(const void *a, const void *b);
PHPAPI zend_long php_count_recursive(HashTable *ht);

PHPAPI bool php_array_data_shuffle(php_random_algo_with_state engine, zval *array);
PHPAPI bool php_array_pick_keys(php_random_algo_with_state engine, zval *input, zend_long num_req, zval *retval, bool silent);

#define PHP_EXTR_OVERWRITE			0
#define PHP_EXTR_SKIP				1
#define PHP_EXTR_PREFIX_SAME		2
#define PHP_EXTR_PREFIX_ALL			3
#define PHP_EXTR_PREFIX_INVALID		4
#define PHP_EXTR_PREFIX_IF_EXISTS	5
#define PHP_EXTR_IF_EXISTS			6

#define PHP_EXTR_REFS				0x100

#define PHP_CASE_LOWER				0
#define PHP_CASE_UPPER				1

#define PHP_SORT_REGULAR            0
#define PHP_SORT_NUMERIC            1
#define PHP_SORT_STRING             2
#define PHP_SORT_DESC               3
#define PHP_SORT_ASC                4
#define PHP_SORT_LOCALE_STRING      5
#define PHP_SORT_NATURAL            6
#define PHP_SORT_FLAG_CASE          8

#define PHP_COUNT_NORMAL      0
#define PHP_COUNT_RECURSIVE   1

#define ARRAY_FILTER_USE_BOTH	1
#define ARRAY_FILTER_USE_KEY	2

ZEND_BEGIN_MODULE_GLOBALS(array)
	bucket_compare_func_t *multisort_func;
	bool compare_deprecation_thrown;
ZEND_END_MODULE_GLOBALS(array)

#define ARRAYG(v) ZEND_MODULE_GLOBALS_ACCESSOR(array, v)

#endif /* PHP_ARRAY_H */
ext/standard/php_math.h000064400000006471151730543000011123 0ustar00/*
   +----------------------------------------------------------------------+
   | Copyright (c) The PHP Group                                          |
   +----------------------------------------------------------------------+
   | This source file is subject to version 3.01 of the PHP license,      |
   | that is bundled with this package in the file LICENSE, and is        |
   | available through the world-wide-web at the following url:           |
   | https://www.php.net/license/3_01.txt                                 |
   | If you did not receive a copy of the PHP license and are unable to   |
   | obtain it through the world-wide-web, please send a note to          |
   | license@php.net so we can mail you a copy immediately.               |
   +----------------------------------------------------------------------+
   | Authors: Jim Winstead <jimw@php.net>                                 |
   |          Stig Sæther Bakken <ssb@php.net>                            |
   +----------------------------------------------------------------------+
*/

#ifndef PHP_MATH_H
#define PHP_MATH_H

PHPAPI double _php_math_round(double value, int places, int mode);
PHPAPI zend_string *_php_math_number_format(double d, int dec, char dec_point, char thousand_sep);
PHPAPI zend_string *_php_math_number_format_ex(double d, int dec, const char *dec_point, size_t dec_point_len, const char *thousand_sep, size_t thousand_sep_len);
PHPAPI zend_string *_php_math_number_format_long(zend_long num, zend_long dec, const char *dec_point, size_t dec_point_len, const char *thousand_sep, size_t thousand_sep_len);
PHPAPI zend_string * _php_math_longtobase(zend_long arg, int base);
PHPAPI zend_long _php_math_basetolong(zval *arg, int base);
PHPAPI void _php_math_basetozval(zend_string *str, int base, zval *ret);
PHPAPI zend_string * _php_math_zvaltobase(zval *arg, int base);

#include <math.h>
#include "php_math_round_mode.h"

#ifndef M_E
#define M_E            2.7182818284590452354   /* e */
#endif

#ifndef M_LOG2E
#define M_LOG2E        1.4426950408889634074   /* log_2 e */
#endif

#ifndef M_LOG10E
#define M_LOG10E       0.43429448190325182765  /* log_10 e */
#endif

#ifndef M_LN2
#define M_LN2          0.69314718055994530942  /* log_e 2 */
#endif

#ifndef M_LN10
#define M_LN10         2.30258509299404568402  /* log_e 10 */
#endif

#ifndef M_PI
#define M_PI           3.14159265358979323846  /* pi */
#endif

#ifndef M_PI_2
#define M_PI_2         1.57079632679489661923  /* pi/2 */
#endif

#ifndef M_PI_4
#define M_PI_4         0.78539816339744830962  /* pi/4 */
#endif

#ifndef M_1_PI
#define M_1_PI         0.31830988618379067154  /* 1/pi */
#endif

#ifndef M_2_PI
#define M_2_PI         0.63661977236758134308  /* 2/pi */
#endif

#ifndef M_SQRTPI
#define M_SQRTPI       1.77245385090551602729  /* sqrt(pi) */
#endif

#ifndef M_2_SQRTPI
#define M_2_SQRTPI     1.12837916709551257390  /* 2/sqrt(pi) */
#endif

#ifndef M_LNPI
#define M_LNPI         1.14472988584940017414  /* ln(pi) */
#endif

#ifndef M_EULER
#define M_EULER        0.57721566490153286061 /* Euler constant */
#endif

#ifndef M_SQRT2
#define M_SQRT2        1.41421356237309504880  /* sqrt(2) */
#endif

#ifndef M_SQRT1_2
#define M_SQRT1_2      0.70710678118654752440  /* 1/sqrt(2) */
#endif

#ifndef M_SQRT3
#define M_SQRT3	       1.73205080756887729352  /* sqrt(3) */
#endif

#endif /* PHP_MATH_H */
ext/igbinary/igbinary.h000064400000000405151730543000011122 0ustar00#ifndef PHPEXT_IGBINARY_BASE_IGBINARY_H
#define PHPEXT_IGBINARY_BASE_IGBINARY_H
#include "php_version.h"
#if PHP_MAJOR_VERSION == 7 || PHP_MAJOR_VERSION == 8
#include "src/php7/igbinary.h"
#else
#error "Unsupported php version for igbinary build"
#endif
#endif
ext/igbinary/src/php7/igbinary.h000064400000006465151730543000012603 0ustar00/*
  +----------------------------------------------------------------------+
  | See COPYING file for further copyright information                   |
  +----------------------------------------------------------------------+
  | Author: Oleg Grenrus <oleg.grenrus@dynamoid.com>                     |
  | See CREDITS for contributors                                         |
  +----------------------------------------------------------------------+
*/

#ifndef IGBINARY_H
#define IGBINARY_H
#include <stdint.h>

/* Forward declarations. */
struct zval;

/* Constants and constant macros */
/** Binary protocol version of igbinary. */
#define IGBINARY_FORMAT_VERSION 0x00000002

#define PHP_IGBINARY_VERSION "3.2.16"

/* Macros */

#ifdef PHP_WIN32
#	if defined(IGBINARY_EXPORTS) || (!defined(COMPILE_DL_IGBINARY))
#		define IGBINARY_API __declspec(dllexport)
#	elif defined(COMPILE_DL_IGBINARY)
#		define IGBINARY_API __declspec(dllimport)
#	else
#		define IGBINARY_API /* nothing special */
#	endif
#elif defined(__GNUC__) && __GNUC__ >= 4
#	define IGBINARY_API __attribute__ ((visibility("default")))
#else
#	define IGBINARY_API /* nothing special */
#endif

/** Struct that contains pointers to memory allocation and deallocation functions.
 * @see igbinary_serialize_data
 */
struct igbinary_memory_manager {
	void *(*alloc)(size_t size, void *context);
	void *(*realloc)(void *ptr, size_t new_size, void *context);
	void (*free)(void *ptr, void *context);
	void *context;
};

/** Serialize zval.
 * Return buffer is allocated by this function with emalloc.
 * @param[out] ret Return buffer
 * @param[out] ret_len Size of return buffer
 * @param[in] z Variable to be serialized
 * @return 0 on success, 1 elsewhere.
 */
IGBINARY_API int igbinary_serialize(uint8_t **ret, size_t *ret_len, zval *z);

/** Serialize zval.
 * Return buffer is allocated by this function with emalloc.
 * @param[out] ret Return buffer
 * @param[out] ret_len Size of return buffer
 * @param[in] z Variable to be serialized
 * @param[in] memory_manager Pointer to the structure that contains memory allocation functions.
 * @return 0 on success, 1 elsewhere.
 */
IGBINARY_API int igbinary_serialize_ex(uint8_t **ret, size_t *ret_len, zval *z, struct igbinary_memory_manager *memory_manager);

/** Unserialize to zval.
 * @param[in] buf Buffer with serialized data.
 * @param[in] buf_len Buffer length.
 * @param[out] z Unserialized zval
 * @return 0 on success, 1 elsewhere.
 */
IGBINARY_API int igbinary_unserialize(const uint8_t *buf, size_t buf_len, zval *z);

static zend_always_inline int _igbinary_has_valid_header(const uint8_t *buf, size_t buf_len) {
	if (buf_len < 5) {
		/* Must have 4 header bytes and at least one byte of data */
		return 0;
	}
	/* Unserialize 32bit value the same way on big-endian and little-endian architectures.
	 * This compiles to a load+optional bswap when compiler optimizations are enabled. */
	const uint32_t ret =
	    ((uint32_t)(buf[0]) << 24) |
	    ((uint32_t)(buf[1]) << 16) |
	    ((uint32_t)(buf[2]) << 8) |
	    ((uint32_t)(buf[3]));
	return ret == 1 || ret == 2;
}
/** This is defined as a macro and a static C function
 * to allow callers to use the macro from newer igbinary versions even with older igbinary installations. */
#define igbinary_has_valid_header(buf, buf_len) _igbinary_has_valid_header((buf), (buf_len))


#endif /* IGBINARY_H */
ext/igbinary/src/php7/php_igbinary.h000064400000003723151730543000013444 0ustar00/*
  +----------------------------------------------------------------------+
  | See COPYING file for further copyright information                   |
  +----------------------------------------------------------------------+
  | Author: Oleg Grenrus <oleg.grenrus@dynamoid.com>                     |
  | See CREDITS for contributors                                         |
  +----------------------------------------------------------------------+
*/

#ifndef PHP_IGBINARY_H
#define PHP_IGBINARY_H
// Note: php_igbinary.h should contain publicly exposed variables, functions, and macros of igbinary.
// If a macro is needed by *only* igbinary, put it in igbinary_macros.h

#include "php.h"

/** Module entry of igbinary. */
extern zend_module_entry igbinary_module_entry;
#define phpext_igbinary_ptr &igbinary_module_entry

#ifdef PHP_WIN32
#define PHP_IGBINARY_API __declspec(dllexport)
#else
#define PHP_IGBINARY_API
#endif

ZEND_BEGIN_MODULE_GLOBALS(igbinary)
	zend_bool compact_strings;
ZEND_END_MODULE_GLOBALS(igbinary)

#ifdef ZTS
#include "TSRM.h"
#endif

#include "Zend/zend_smart_string.h"

/** Module init function. */
PHP_MINIT_FUNCTION(igbinary);

/** Module shutdown function. */
PHP_MSHUTDOWN_FUNCTION(igbinary);

/** Request init function. */
PHP_RINIT_FUNCTION(igbinary);

/** Request shutdown function. */
PHP_RSHUTDOWN_FUNCTION(igbinary);

/** Module info function for phpinfo(). */
PHP_MINFO_FUNCTION(igbinary);

/** string igbinary_serialize(mixed value).
 * Returns the binary serialized value.
 */
PHP_FUNCTION(igbinary_serialize);

/** mixed igbinary_unserialize(string data).
 * Unserializes the given inputstring (value).
 */
PHP_FUNCTION(igbinary_unserialize);

#ifdef ZTS
#define IGBINARY_G(v) TSRMG(igbinary_globals_id, zend_igbinary_globals *, v)
#else
#define IGBINARY_G(v) (igbinary_globals.v)
#endif

#endif /* PHP_IGBINARY_H */

/*
 * Local variables:
 * tab-width: 2
 * c-basic-offset: 0
 * End:
 * vim600: noet sw=2 ts=2 fdm=marker
 * vim<600: noet sw=2 ts=2
 */
ext/igbinary/php_igbinary.h000064400000001424151730543010011774 0ustar00#ifndef PHPEXT_IGBINARY_BASE_PHP_IGBINARY_H
#define PHPEXT_IGBINARY_BASE_PHP_IGBINARY_H
#include "php_version.h"
#if PHP_MAJOR_VERSION == 7 || PHP_MAJOR_VERSION == 8
#include "ext/igbinary/src/php7/php_igbinary.h"
#else
#error "Unsupported php version for igbinary build"
#endif

/**
 * The below line is redundant
 * (and just mentioning phpext_ in a comment is sufficient).
 * This block is only here to make php-src/build/print_include.awk include this file,
 * when igbinary is placed in php-src/ext/igbinary/ (instead of compiled separately with `phpize; ...`)
 */
#ifndef phpext_igbinary_ptr
extern zend_module_entry igbinary_module_entry;
#define phpext_igbinary_ptr &igbinary_module_entry
#endif
/** End line needed for putting igbinary in php-src/ext/igbinary to work */

#endif
main/snprintf.h000064400000013054151730543010007506 0ustar00/*
   +----------------------------------------------------------------------+
   | Copyright (c) The PHP Group                                          |
   +----------------------------------------------------------------------+
   | This source file is subject to version 3.01 of the PHP license,      |
   | that is bundled with this package in the file LICENSE, and is        |
   | available through the world-wide-web at the following url:           |
   | https://www.php.net/license/3_01.txt                                 |
   | If you did not receive a copy of the PHP license and are unable to   |
   | obtain it through the world-wide-web, please send a note to          |
   | license@php.net so we can mail you a copy immediately.               |
   +----------------------------------------------------------------------+
   | Author: Stig Sæther Bakken <ssb@php.net>                             |
   |         Marcus Boerger <helly@php.net>                               |
   +----------------------------------------------------------------------+
*/

/*

Comparing: sprintf, snprintf, slprintf, spprintf

sprintf  offers the ability to make a lot of failures since it does not know
         the size of the buffer it uses. Therefore usage of sprintf often
         results in possible entries for buffer overrun attacks. So please
         use this version only if you are sure the call is safe. sprintf
         always terminates the buffer it writes to.

snprintf knows the buffers size and will not write behind it. But you will
         have to use either a static buffer or allocate a dynamic buffer
         before being able to call the function. In other words you must
         be sure that you really know the maximum size of the buffer required.
         A bad thing is having a big maximum while in most cases you would
         only need a small buffer. If the size of the resulting string is
         longer or equal to the buffer size than the buffer is not terminated.
         The function also returns the number of chars not including the
         terminating \0 that were needed to fully comply to the print request.

slprintf same as snprintf with the difference that it actually returns the
         length printed not including the terminating \0.

spprintf is the dynamical version of snprintf. It allocates the buffer in size
         as needed and allows a maximum setting as snprintf (turn this feature
         off by setting max_len to 0). spprintf is a little bit slower than
         snprintf and offers possible memory leaks if you miss freeing the
         buffer allocated by the function. Therefore this function should be
         used where either no maximum is known or the maximum is much bigger
         than normal size required. spprintf always terminates the buffer.

Example:

 #define MAX 1024              | #define MAX 1024               | #define MAX 1024
 char buffer[MAX]              | char buffer[MAX]               | char *buffer;
                               |                                |
                               |                                | // No need to initialize buffer:
                               |                                | // spprintf ignores value of buffer
 sprintf(buffer, "test");      | snprintf(buffer, MAX, "test"); | spprintf(&buffer, MAX, "text");
                               |                                | if (!buffer)
                               |                                |   return OUT_OF_MEMORY
 // sprintf always terminates | // manual termination of       | // spprintf allays terminates buffer
 // buffer                     | // buffer *IS* required        |
                               | buffer[MAX-1] = 0;             |
 action_with_buffer(buffer);   | action_with_buffer(buffer);    | action_with_buffer(buffer);
                               |                                | efree(buffer);
*/

#ifndef SNPRINTF_H
#define SNPRINTF_H

#include <stdbool.h>

BEGIN_EXTERN_C()
PHPAPI int ap_php_slprintf(char *buf, size_t len, const char *format,...) ZEND_ATTRIBUTE_FORMAT(printf, 3, 4);
PHPAPI int ap_php_vslprintf(char *buf, size_t len, const char *format, va_list ap);
PHPAPI int ap_php_snprintf(char *, size_t, const char *, ...) ZEND_ATTRIBUTE_FORMAT(printf, 3, 4);
PHPAPI int ap_php_vsnprintf(char *, size_t, const char *, va_list ap);
PHPAPI int ap_php_vasprintf(char **buf, const char *format, va_list ap);
PHPAPI int ap_php_asprintf(char **buf, const char *format, ...) ZEND_ATTRIBUTE_FORMAT(printf, 2, 3);
PHPAPI char * php_0cvt(double value, int ndigit, char dec_point, char exponent, char *buf);
PHPAPI char * php_conv_fp(char format, double num,
		 bool add_dp, int precision, char dec_point, bool * is_negative, char *buf, size_t *len);

END_EXTERN_C()

#define php_gcvt zend_gcvt

#ifdef slprintf
#undef slprintf
#endif
#define slprintf ap_php_slprintf

#ifdef vslprintf
#undef vslprintf
#endif
#define vslprintf ap_php_vslprintf

#ifdef snprintf
#undef snprintf
#endif
#define snprintf ap_php_snprintf

#ifdef vsnprintf
#undef vsnprintf
#endif
#define vsnprintf ap_php_vsnprintf

#ifndef HAVE_VASPRINTF
#define vasprintf ap_php_vasprintf
#endif

#ifndef HAVE_ASPRINTF
#define asprintf ap_php_asprintf
#endif

typedef enum {
	LM_STD = 0,
	LM_INTMAX_T,
	LM_PTRDIFF_T,
#if SIZEOF_LONG_LONG
	LM_LONG_LONG,
#endif
	LM_SIZE_T,
	LM_LONG,
	LM_LONG_DOUBLE,
} length_modifier_e;

PHPAPI char * ap_php_conv_10(int64_t num, bool is_unsigned,
	   bool * is_negative, char *buf_end, size_t *len);

PHPAPI char * ap_php_conv_p2(uint64_t num, int nbits,
		 char format, char *buf_end, size_t *len);

#endif /* SNPRINTF_H */
main/php_main.h000064400000007110151730543010007432 0ustar00/*
   +----------------------------------------------------------------------+
   | Copyright (c) The PHP Group                                          |
   +----------------------------------------------------------------------+
   | This source file is subject to version 3.01 of the PHP license,      |
   | that is bundled with this package in the file LICENSE, and is        |
   | available through the world-wide-web at the following url:           |
   | https://www.php.net/license/3_01.txt                                 |
   | If you did not receive a copy of the PHP license and are unable to   |
   | obtain it through the world-wide-web, please send a note to          |
   | license@php.net so we can mail you a copy immediately.               |
   +----------------------------------------------------------------------+
   | Authors: Andi Gutmans <andi@php.net>                                 |
   |          Zeev Suraski <zeev@php.net>                                 |
   +----------------------------------------------------------------------+
 */

#ifndef PHP_MAIN_H
#define PHP_MAIN_H

#include "zend_globals.h"
#include "php_globals.h"
#include "SAPI.h"

BEGIN_EXTERN_C()

/* Returns the PHP version the engine was built with. This is useful for
 * extensions which want to know the version of PHP at run-time, rather than
 * the version they were built with at compile-time.
 */
ZEND_ATTRIBUTE_CONST PHPAPI const char *php_version(void);

/* Returns the PHP version id the engine was built with. This is useful for
 * extensions which want to know the version of PHP at run-time, rather than
 * the version they were built with at compile-time.
 */
ZEND_ATTRIBUTE_CONST PHPAPI unsigned int php_version_id(void);

/* Returns the build provider specified at build time. NULL is returned if
 * no build provider was specified. This is useful for extensions which want
 * to know the origin of a PHP binary at run-time, for example to provide
 * statistics.
 */
ZEND_ATTRIBUTE_CONST PHPAPI const char *php_build_provider(void);

/* Prints the PHP version string for the -v option. It's in main/ so that
 * it can be shared between SAPIs.
 */
PHPAPI char *php_get_version(sapi_module_struct *sapi_module);
PHPAPI void php_print_version(sapi_module_struct *sapi_module);

PHPAPI void php_child_init(void);
PHPAPI zend_result php_request_startup(void);
PHPAPI void php_request_shutdown(void *dummy);
PHPAPI zend_result php_module_startup(sapi_module_struct *sf, zend_module_entry *additional_module);
PHPAPI void php_module_shutdown(void);
PHPAPI int php_module_shutdown_wrapper(sapi_module_struct *sapi_globals);

PHPAPI zend_result php_register_extensions(zend_module_entry * const * ptr, int count);

PHPAPI bool php_execute_script(zend_file_handle *primary_file);
PHPAPI bool php_execute_script_ex(zend_file_handle *primary_file, zval *retval);
PHPAPI int php_execute_simple_script(zend_file_handle *primary_file, zval *ret);
PHPAPI zend_result php_lint_script(zend_file_handle *file);

PHPAPI void php_handle_aborted_connection(void);
PHPAPI int php_handle_auth_data(const char *auth);

PHPAPI void php_html_puts(const char *str, size_t siz);
PHPAPI zend_result php_stream_open_for_zend_ex(zend_file_handle *handle, int mode);

/* environment module */
extern int php_init_environ(void);
extern int php_shutdown_environ(void);

#ifdef ZTS
PHPAPI void php_reserve_tsrm_memory(void);
PHPAPI bool php_tsrm_startup_ex(int expected_threads);
PHPAPI bool php_tsrm_startup(void);

#define PHP_ZTS 1
#else
#define PHP_ZTS 0
#endif

#ifdef PHP_WIN32
#define PHP_OS_STR "WINNT"
#else
#define PHP_OS_STR PHP_OS
#endif

END_EXTERN_C()

#endif
main/php_syslog.h000064400000003050151730543010010025 0ustar00/*
  +----------------------------------------------------------------------+
  | Copyright (c) The PHP Group                                          |
  +----------------------------------------------------------------------+
  | This source file is subject to version 3.01 of the PHP license,      |
  | that is bundled with this package in the file LICENSE, and is        |
  | available through the world-wide-web at the following url:           |
  | https://www.php.net/license/3_01.txt                                 |
  | If you did not receive a copy of the PHP license and are unable to   |
  | obtain it through the world-wide-web, please send a note to          |
  | license@php.net so we can mail you a copy immediately.               |
  +----------------------------------------------------------------------+
  | Author:                                                              |
  +----------------------------------------------------------------------+
*/

#ifndef PHP_SYSLOG_H
#define PHP_SYSLOG_H

#include "php.h"

#ifdef PHP_WIN32
#include "win32/syslog.h"
#else
#include <php_config.h>
#ifdef HAVE_SYSLOG_H
#include <syslog.h>
#endif
#endif

/* Syslog filters */
#define PHP_SYSLOG_FILTER_ALL		0
#define PHP_SYSLOG_FILTER_NO_CTRL	1
#define PHP_SYSLOG_FILTER_ASCII		2
#define PHP_SYSLOG_FILTER_RAW		3

BEGIN_EXTERN_C()
PHPAPI void php_syslog_str(int priority, const zend_string* message);
PHPAPI void php_syslog(int, const char *format, ...);
PHPAPI void php_openlog(const char *, int, int);
PHPAPI void php_closelog(void);
END_EXTERN_C()

#endif
main/php_reentrancy.h000064400000006237151730543010010671 0ustar00/*
   +----------------------------------------------------------------------+
   | Copyright (c) The PHP Group                                          |
   +----------------------------------------------------------------------+
   | This source file is subject to version 3.01 of the PHP license,      |
   | that is bundled with this package in the file LICENSE, and is        |
   | available through the world-wide-web at the following url:           |
   | https://www.php.net/license/3_01.txt                                 |
   | If you did not receive a copy of the PHP license and are unable to   |
   | obtain it through the world-wide-web, please send a note to          |
   | license@php.net so we can mail you a copy immediately.               |
   +----------------------------------------------------------------------+
   | Author: Sascha Schumann <sascha@schumann.cx>                         |
   +----------------------------------------------------------------------+
 */

#ifndef PHP_REENTRANCY_H
#define PHP_REENTRANCY_H

#include "php.h"

#include <sys/types.h>
#ifdef HAVE_DIRENT_H
#include <dirent.h>
#endif
#include <time.h>

/* currently, PHP does not check for these functions, but assumes
   that they are available on all systems. */

#define HAVE_LOCALTIME 1
#define HAVE_GMTIME 1
#define HAVE_ASCTIME 1
#define HAVE_CTIME 1

#if defined(PHP_IRIX_TIME_R)
#undef HAVE_ASCTIME_R
#undef HAVE_CTIME_R
#endif

#if defined(PHP_HPUX_TIME_R)
#undef HAVE_LOCALTIME_R
#undef HAVE_ASCTIME_R
#undef HAVE_CTIME_R
#undef HAVE_GMTIME_R
#endif

BEGIN_EXTERN_C()

#if !defined(HAVE_LOCALTIME_R) && defined(HAVE_LOCALTIME)
#define PHP_NEED_REENTRANCY 1
PHPAPI struct tm *php_localtime_r(const time_t *const timep, struct tm *p_tm);
#else
#define php_localtime_r localtime_r
#ifdef MISSING_LOCALTIME_R_DECL
struct tm *localtime_r(const time_t *const timep, struct tm *p_tm);
#endif
#endif


#if !defined(HAVE_CTIME_R) && defined(HAVE_CTIME)
#define PHP_NEED_REENTRANCY 1
PHPAPI char *php_ctime_r(const time_t *clock, char *buf);
#else
#define php_ctime_r ctime_r
#ifdef MISSING_CTIME_R_DECL
char *ctime_r(const time_t *clock, char *buf);
#endif
#endif


#if !defined(HAVE_ASCTIME_R) && defined(HAVE_ASCTIME)
#define PHP_NEED_REENTRANCY 1
PHPAPI char *php_asctime_r(const struct tm *tm, char *buf);
#else
#define php_asctime_r asctime_r
#ifdef MISSING_ASCTIME_R_DECL
char *asctime_r(const struct tm *tm, char *buf);
#endif
#endif


#if !defined(HAVE_GMTIME_R) && defined(HAVE_GMTIME)
#define PHP_NEED_REENTRANCY 1
PHPAPI struct tm *php_gmtime_r(const time_t *const timep, struct tm *p_tm);
#else
#define php_gmtime_r gmtime_r
#ifdef MISSING_GMTIME_R_DECL
struct tm *php_gmtime_r(const time_t *const timep, struct tm *p_tm);
#endif
#endif

#if !defined(HAVE_STRTOK_R)
PHPAPI char *php_strtok_r(char *s, const char *delim, char **last);
#else
#define php_strtok_r strtok_r
#ifdef MISSING_STRTOK_R_DECL
char *strtok_r(char *s, const char *delim, char **last);
#endif
#endif

END_EXTERN_C()

#if !defined(ZTS)
#undef PHP_NEED_REENTRANCY
#endif

#if defined(PHP_NEED_REENTRANCY)
void reentrancy_startup(void);
void reentrancy_shutdown(void);
#else
#define reentrancy_startup()
#define reentrancy_shutdown()
#endif

#endif
main/php_content_types.h000064400000002472151730543010011412 0ustar00/*
  +----------------------------------------------------------------------+
  | Copyright (c) The PHP Group                                          |
  +----------------------------------------------------------------------+
  | This source file is subject to version 3.01 of the PHP license,      |
  | that is bundled with this package in the file LICENSE, and is        |
  | available through the world-wide-web at the following url:           |
  | https://www.php.net/license/3_01.txt                                 |
  | If you did not receive a copy of the PHP license and are unable to   |
  | obtain it through the world-wide-web, please send a note to          |
  | license@php.net so we can mail you a copy immediately.               |
  +----------------------------------------------------------------------+
  | Author:                                                              |
  +----------------------------------------------------------------------+
*/

#ifndef PHP_CONTENT_TYPES_H
#define PHP_CONTENT_TYPES_H

#define DEFAULT_POST_CONTENT_TYPE "application/x-www-form-urlencoded"

SAPI_API SAPI_POST_READER_FUNC(php_default_post_reader);
SAPI_API SAPI_POST_HANDLER_FUNC(php_std_post_handler);
int php_startup_sapi_content_types(void);
int php_setup_sapi_content_types(void);

#endif /* PHP_CONTENT_TYPES_H */
main/main_arginfo.h000064400000015210151730543020010271 0ustar00/* This is a generated file, edit the .stub.php file instead.
 * Stub hash: e8b81aa6f03d36f35def2bb1fcc3563b284a113b */

static void register_main_symbols(int module_number)
{
	REGISTER_STRING_CONSTANT("PHP_VERSION", PHP_VERSION, CONST_PERSISTENT);
	REGISTER_LONG_CONSTANT("PHP_MAJOR_VERSION", PHP_MAJOR_VERSION, CONST_PERSISTENT);
	REGISTER_LONG_CONSTANT("PHP_MINOR_VERSION", PHP_MINOR_VERSION, CONST_PERSISTENT);
	REGISTER_LONG_CONSTANT("PHP_RELEASE_VERSION", PHP_RELEASE_VERSION, CONST_PERSISTENT);
	REGISTER_STRING_CONSTANT("PHP_EXTRA_VERSION", PHP_EXTRA_VERSION, CONST_PERSISTENT);
	REGISTER_LONG_CONSTANT("PHP_VERSION_ID", PHP_VERSION_ID, CONST_PERSISTENT);
	REGISTER_STRING_CONSTANT("PHP_BUILD_DATE", php_build_date, CONST_PERSISTENT);
#if defined(PHP_BUILD_PROVIDER)
	REGISTER_STRING_CONSTANT("PHP_BUILD_PROVIDER", PHP_BUILD_PROVIDER, CONST_PERSISTENT);
#endif
	REGISTER_BOOL_CONSTANT("PHP_ZTS", PHP_ZTS, CONST_PERSISTENT);
	REGISTER_BOOL_CONSTANT("PHP_DEBUG", PHP_DEBUG, CONST_PERSISTENT);
	REGISTER_STRING_CONSTANT("PHP_OS", PHP_OS_STR, CONST_PERSISTENT);
	REGISTER_STRING_CONSTANT("PHP_OS_FAMILY", PHP_OS_FAMILY, CONST_PERSISTENT);
	REGISTER_STRING_CONSTANT("DEFAULT_INCLUDE_PATH", PHP_INCLUDE_PATH, CONST_PERSISTENT);
	REGISTER_STRING_CONSTANT("PEAR_INSTALL_DIR", PEAR_INSTALLDIR, CONST_PERSISTENT);
	REGISTER_STRING_CONSTANT("PEAR_EXTENSION_DIR", PHP_EXTENSION_DIR, CONST_PERSISTENT);
	REGISTER_STRING_CONSTANT("PHP_EXTENSION_DIR", PHP_EXTENSION_DIR, CONST_PERSISTENT);
	REGISTER_STRING_CONSTANT("PHP_PREFIX", PHP_PREFIX, CONST_PERSISTENT);
	REGISTER_STRING_CONSTANT("PHP_BINDIR", PHP_BINDIR, CONST_PERSISTENT);
	REGISTER_STRING_CONSTANT("PHP_SBINDIR", PHP_SBINDIR, CONST_PERSISTENT);
#if !defined(PHP_WIN32)
	REGISTER_STRING_CONSTANT("PHP_MANDIR", PHP_MANDIR, CONST_PERSISTENT);
#endif
	REGISTER_STRING_CONSTANT("PHP_LIBDIR", PHP_LIBDIR, CONST_PERSISTENT);
	REGISTER_STRING_CONSTANT("PHP_DATADIR", PHP_DATADIR, CONST_PERSISTENT);
	REGISTER_STRING_CONSTANT("PHP_SYSCONFDIR", PHP_SYSCONFDIR, CONST_PERSISTENT);
	REGISTER_STRING_CONSTANT("PHP_LOCALSTATEDIR", PHP_LOCALSTATEDIR, CONST_PERSISTENT);
	REGISTER_STRING_CONSTANT("PHP_CONFIG_FILE_PATH", PHP_CONFIG_FILE_PATH, CONST_PERSISTENT);
	REGISTER_STRING_CONSTANT("PHP_CONFIG_FILE_SCAN_DIR", PHP_CONFIG_FILE_SCAN_DIR, CONST_PERSISTENT);
	REGISTER_STRING_CONSTANT("PHP_SHLIB_SUFFIX", PHP_SHLIB_SUFFIX, CONST_PERSISTENT);
	REGISTER_STRING_CONSTANT("PHP_EOL", PHP_EOL, CONST_PERSISTENT);
	REGISTER_LONG_CONSTANT("PHP_MAXPATHLEN", MAXPATHLEN, CONST_PERSISTENT);
	REGISTER_LONG_CONSTANT("PHP_INT_MAX", ZEND_LONG_MAX, CONST_PERSISTENT);
	REGISTER_LONG_CONSTANT("PHP_INT_MIN", ZEND_LONG_MIN, CONST_PERSISTENT);
	REGISTER_LONG_CONSTANT("PHP_INT_SIZE", SIZEOF_ZEND_LONG, CONST_PERSISTENT);
	REGISTER_LONG_CONSTANT("PHP_FD_SETSIZE", FD_SETSIZE, CONST_PERSISTENT);
	REGISTER_LONG_CONSTANT("PHP_FLOAT_DIG", DBL_DIG, CONST_PERSISTENT);
	REGISTER_DOUBLE_CONSTANT("PHP_FLOAT_EPSILON", DBL_EPSILON, CONST_PERSISTENT);
	REGISTER_DOUBLE_CONSTANT("PHP_FLOAT_MAX", DBL_MAX, CONST_PERSISTENT);
	REGISTER_DOUBLE_CONSTANT("PHP_FLOAT_MIN", DBL_MIN, CONST_PERSISTENT);
#if defined(PHP_WIN32)
	REGISTER_LONG_CONSTANT("PHP_WINDOWS_VERSION_MAJOR", EG(windows_version_info).dwMajorVersion, CONST_PERSISTENT);
	REGISTER_LONG_CONSTANT("PHP_WINDOWS_VERSION_MINOR", EG(windows_version_info).dwMinorVersion, CONST_PERSISTENT);
	REGISTER_LONG_CONSTANT("PHP_WINDOWS_VERSION_BUILD", EG(windows_version_info).dwBuildNumber, CONST_PERSISTENT);
	REGISTER_LONG_CONSTANT("PHP_WINDOWS_VERSION_PLATFORM", EG(windows_version_info).dwPlatformId, CONST_PERSISTENT);
	REGISTER_LONG_CONSTANT("PHP_WINDOWS_VERSION_SP_MAJOR", EG(windows_version_info).wServicePackMajor, CONST_PERSISTENT);
	REGISTER_LONG_CONSTANT("PHP_WINDOWS_VERSION_SP_MINOR", EG(windows_version_info).wServicePackMinor, CONST_PERSISTENT);
	REGISTER_LONG_CONSTANT("PHP_WINDOWS_VERSION_SUITEMASK", EG(windows_version_info).wSuiteMask, CONST_PERSISTENT);
	REGISTER_LONG_CONSTANT("PHP_WINDOWS_VERSION_PRODUCTTYPE", EG(windows_version_info).wProductType, CONST_PERSISTENT);
	REGISTER_LONG_CONSTANT("PHP_WINDOWS_NT_DOMAIN_CONTROLLER", VER_NT_DOMAIN_CONTROLLER, CONST_PERSISTENT);
	REGISTER_LONG_CONSTANT("PHP_WINDOWS_NT_SERVER", VER_NT_SERVER, CONST_PERSISTENT);
	REGISTER_LONG_CONSTANT("PHP_WINDOWS_NT_WORKSTATION", VER_NT_WORKSTATION, CONST_PERSISTENT);
#endif
	REGISTER_LONG_CONSTANT("PHP_OUTPUT_HANDLER_START", PHP_OUTPUT_HANDLER_START, CONST_PERSISTENT);
	REGISTER_LONG_CONSTANT("PHP_OUTPUT_HANDLER_WRITE", PHP_OUTPUT_HANDLER_WRITE, CONST_PERSISTENT);
	REGISTER_LONG_CONSTANT("PHP_OUTPUT_HANDLER_FLUSH", PHP_OUTPUT_HANDLER_FLUSH, CONST_PERSISTENT);
	REGISTER_LONG_CONSTANT("PHP_OUTPUT_HANDLER_CLEAN", PHP_OUTPUT_HANDLER_CLEAN, CONST_PERSISTENT);
	REGISTER_LONG_CONSTANT("PHP_OUTPUT_HANDLER_FINAL", PHP_OUTPUT_HANDLER_FINAL, CONST_PERSISTENT);
	REGISTER_LONG_CONSTANT("PHP_OUTPUT_HANDLER_CONT", PHP_OUTPUT_HANDLER_WRITE, CONST_PERSISTENT);
	REGISTER_LONG_CONSTANT("PHP_OUTPUT_HANDLER_END", PHP_OUTPUT_HANDLER_FINAL, CONST_PERSISTENT);
	REGISTER_LONG_CONSTANT("PHP_OUTPUT_HANDLER_CLEANABLE", PHP_OUTPUT_HANDLER_CLEANABLE, CONST_PERSISTENT);
	REGISTER_LONG_CONSTANT("PHP_OUTPUT_HANDLER_FLUSHABLE", PHP_OUTPUT_HANDLER_FLUSHABLE, CONST_PERSISTENT);
	REGISTER_LONG_CONSTANT("PHP_OUTPUT_HANDLER_REMOVABLE", PHP_OUTPUT_HANDLER_REMOVABLE, CONST_PERSISTENT);
	REGISTER_LONG_CONSTANT("PHP_OUTPUT_HANDLER_STDFLAGS", PHP_OUTPUT_HANDLER_STDFLAGS, CONST_PERSISTENT);
	REGISTER_LONG_CONSTANT("PHP_OUTPUT_HANDLER_STARTED", PHP_OUTPUT_HANDLER_STARTED, CONST_PERSISTENT);
	REGISTER_LONG_CONSTANT("PHP_OUTPUT_HANDLER_DISABLED", PHP_OUTPUT_HANDLER_DISABLED, CONST_PERSISTENT);
	REGISTER_LONG_CONSTANT("PHP_OUTPUT_HANDLER_PROCESSED", PHP_OUTPUT_HANDLER_PROCESSED, CONST_PERSISTENT);
	REGISTER_LONG_CONSTANT("UPLOAD_ERR_OK", PHP_UPLOAD_ERROR_OK, CONST_PERSISTENT);
	REGISTER_LONG_CONSTANT("UPLOAD_ERR_INI_SIZE", PHP_UPLOAD_ERROR_A, CONST_PERSISTENT);
	REGISTER_LONG_CONSTANT("UPLOAD_ERR_FORM_SIZE", PHP_UPLOAD_ERROR_B, CONST_PERSISTENT);
	REGISTER_LONG_CONSTANT("UPLOAD_ERR_PARTIAL", PHP_UPLOAD_ERROR_C, CONST_PERSISTENT);
	REGISTER_LONG_CONSTANT("UPLOAD_ERR_NO_FILE", PHP_UPLOAD_ERROR_D, CONST_PERSISTENT);
	REGISTER_LONG_CONSTANT("UPLOAD_ERR_NO_TMP_DIR", PHP_UPLOAD_ERROR_E, CONST_PERSISTENT);
	REGISTER_LONG_CONSTANT("UPLOAD_ERR_CANT_WRITE", PHP_UPLOAD_ERROR_F, CONST_PERSISTENT);
	REGISTER_LONG_CONSTANT("UPLOAD_ERR_EXTENSION", PHP_UPLOAD_ERROR_X, CONST_PERSISTENT);
#if defined(ZEND_VERIFY_TYPE_INFERENCE)
	REGISTER_BOOL_CONSTANT("ZEND_VERIFY_TYPE_INFERENCE", ZEND_VERIFY_TYPE_INFERENCE, CONST_PERSISTENT);
#endif
	REGISTER_STRING_CONSTANT("PHP_SAPI", sapi_module.name, CONST_PERSISTENT | CONST_NO_FILE_CACHE);
	REGISTER_STRING_CONSTANT("PHP_BINARY", PG(php_binary) ? PG(php_binary) : "", CONST_PERSISTENT | CONST_NO_FILE_CACHE);
}
main/streams/php_stream_userspace.h000064400000002373151730543020013540 0ustar00/*
   +----------------------------------------------------------------------+
   | Copyright (c) The PHP Group                                          |
   +----------------------------------------------------------------------+
   | This source file is subject to version 3.01 of the PHP license,      |
   | that is bundled with this package in the file LICENSE, and is        |
   | available through the world-wide-web at the following url:           |
   | https://www.php.net/license/3_01.txt                                 |
   | If you did not receive a copy of the PHP license and are unable to   |
   | obtain it through the world-wide-web, please send a note to          |
   | license@php.net so we can mail you a copy immediately.               |
   +----------------------------------------------------------------------+
   | Author: Wez Furlong <wez@thebrainroom.com>                           |
   +----------------------------------------------------------------------+
 */

/* for user-space streams */
PHPAPI extern const php_stream_ops php_stream_userspace_ops;
PHPAPI extern const php_stream_ops php_stream_userspace_dir_ops;
#define PHP_STREAM_IS_USERSPACE	&php_stream_userspace_ops
#define PHP_STREAM_IS_USERSPACE_DIR	&php_stream_userspace_dir_ops
main/streams/php_streams_int.h000064400000005274151730543020012526 0ustar00/*
  +----------------------------------------------------------------------+
  | Copyright (c) The PHP Group                                          |
  +----------------------------------------------------------------------+
  | This source file is subject to version 3.01 of the PHP license,      |
  | that is bundled with this package in the file LICENSE, and is        |
  | available through the world-wide-web at the following url:           |
  | https://www.php.net/license/3_01.txt                                 |
  | If you did not receive a copy of the PHP license and are unable to   |
  | obtain it through the world-wide-web, please send a note to          |
  | license@php.net so we can mail you a copy immediately.               |
  +----------------------------------------------------------------------+
  | Author: Wez Furlong <wez@thebrainroom.com>                           |
  +----------------------------------------------------------------------+
*/

/* internal header; not supposed to be installed; FIXME but unfortunately is */

#if ZEND_DEBUG

#define emalloc_rel_orig(size)	\
		( __php_stream_call_depth == 0 \
		? _emalloc((size) ZEND_FILE_LINE_CC ZEND_FILE_LINE_RELAY_CC) \
		: _emalloc((size) ZEND_FILE_LINE_CC ZEND_FILE_LINE_ORIG_RELAY_CC) )

#define erealloc_rel_orig(ptr, size)	\
		( __php_stream_call_depth == 0 \
		? _erealloc((ptr), (size), 0 ZEND_FILE_LINE_CC ZEND_FILE_LINE_RELAY_CC) \
		: _erealloc((ptr), (size), 0 ZEND_FILE_LINE_CC ZEND_FILE_LINE_ORIG_RELAY_CC) )

#define pemalloc_rel_orig(size, persistent)	((persistent) ? malloc((size)) : emalloc_rel_orig((size)))
#define perealloc_rel_orig(ptr, size, persistent)	((persistent) ? realloc((ptr), (size)) : erealloc_rel_orig((ptr), (size)))
#else
# define pemalloc_rel_orig(size, persistent)				pemalloc((size), (persistent))
# define perealloc_rel_orig(ptr, size, persistent)			perealloc((ptr), (size), (persistent))
# define emalloc_rel_orig(size)								emalloc((size))
#endif

#define STREAM_DEBUG 0
#define STREAM_WRAPPER_PLAIN_FILES	((php_stream_wrapper*)-1)

#ifndef MAP_FAILED
#define MAP_FAILED ((void *) -1)
#endif

#define CHUNK_SIZE	8192

#ifdef PHP_WIN32
# ifdef EWOULDBLOCK
#  undef EWOULDBLOCK
# endif
# define EWOULDBLOCK WSAEWOULDBLOCK
# ifdef EMSGSIZE
#  undef EMSGSIZE
# endif
# define EMSGSIZE WSAEMSGSIZE
#endif

/* This functions transforms the first char to 'w' if it's not 'r', 'a' or 'w'
 * and strips any subsequent chars except '+' and 'b'.
 * Use this to sanitize stream->mode if you call e.g. fdopen, fopencookie or
 * any other function that expects standard modes and you allow non-standard
 * ones. result should be a char[5]. */
void php_stream_mode_sanitize_fdopen_fopencookie(php_stream *stream, char *result);
main/streams/php_stream_mmap.h000064400000006165151730543020012503 0ustar00/*
  +----------------------------------------------------------------------+
  | Copyright (c) The PHP Group                                          |
  +----------------------------------------------------------------------+
  | This source file is subject to version 3.01 of the PHP license,      |
  | that is bundled with this package in the file LICENSE, and is        |
  | available through the world-wide-web at the following url:           |
  | https://www.php.net/license/3_01.txt                                 |
  | If you did not receive a copy of the PHP license and are unable to   |
  | obtain it through the world-wide-web, please send a note to          |
  | license@php.net so we can mail you a copy immediately.               |
  +----------------------------------------------------------------------+
  | Author: Wez Furlong <wez@thebrainroom.com>                           |
  +----------------------------------------------------------------------+
*/

/* Memory Mapping interface for streams.
 * The intention is to provide a uniform interface over the most common
 * operations that are used within PHP itself, rather than a complete
 * API for all memory mapping needs.
 *
 * ATM, we support only mmap(), but win32 memory mapping support will
 * follow soon.
 * */

typedef enum {
	/* Does the stream support mmap ? */
	PHP_STREAM_MMAP_SUPPORTED,
	/* Request a range and offset to be mapped;
	 * while mapped, you MUST NOT use any read/write functions
	 * on the stream (win9x compatibility) */
	PHP_STREAM_MMAP_MAP_RANGE,
	/* Unmap the last range that was mapped for the stream */
	PHP_STREAM_MMAP_UNMAP
} php_stream_mmap_operation_t;

typedef enum {
	PHP_STREAM_MAP_MODE_READONLY,
	PHP_STREAM_MAP_MODE_READWRITE,
	PHP_STREAM_MAP_MODE_SHARED_READONLY,
	PHP_STREAM_MAP_MODE_SHARED_READWRITE
} php_stream_mmap_access_t;

typedef struct {
	/* requested offset and length.
	 * If length is 0, the whole file is mapped */
	size_t offset;
	size_t length;

	php_stream_mmap_access_t mode;

	/* returned mapped address */
	char *mapped;

} php_stream_mmap_range;

#define PHP_STREAM_MMAP_ALL 0

#define PHP_STREAM_MMAP_MAX (512 * 1024 * 1024)

#define php_stream_mmap_supported(stream)	(_php_stream_set_option((stream), PHP_STREAM_OPTION_MMAP_API, PHP_STREAM_MMAP_SUPPORTED, NULL) == 0 ? 1 : 0)

/* Returns 1 if the stream in its current state can be memory mapped,
 * 0 otherwise */
#define php_stream_mmap_possible(stream)			(!php_stream_is_filtered((stream)) && php_stream_mmap_supported((stream)))

BEGIN_EXTERN_C()
PHPAPI char *_php_stream_mmap_range(php_stream *stream, size_t offset, size_t length, php_stream_mmap_access_t mode, size_t *mapped_len);
#define php_stream_mmap_range(stream, offset, length, mode, mapped_len)	_php_stream_mmap_range((stream), (offset), (length), (mode), (mapped_len))

/* un-maps the last mapped range */
PHPAPI int _php_stream_mmap_unmap(php_stream *stream);
#define php_stream_mmap_unmap(stream)				_php_stream_mmap_unmap((stream))

PHPAPI int _php_stream_mmap_unmap_ex(php_stream *stream, zend_off_t readden);
#define php_stream_mmap_unmap_ex(stream, readden)			_php_stream_mmap_unmap_ex((stream), (readden))
END_EXTERN_C()
main/streams/php_stream_transport.h000064400000016701151730543020013602 0ustar00/*
  +----------------------------------------------------------------------+
  | Copyright (c) The PHP Group                                          |
  +----------------------------------------------------------------------+
  | This source file is subject to version 3.01 of the PHP license,      |
  | that is bundled with this package in the file LICENSE, and is        |
  | available through the world-wide-web at the following url:           |
  | https://www.php.net/license/3_01.txt                                 |
  | If you did not receive a copy of the PHP license and are unable to   |
  | obtain it through the world-wide-web, please send a note to          |
  | license@php.net so we can mail you a copy immediately.               |
  +----------------------------------------------------------------------+
  | Author: Wez Furlong <wez@thebrainroom.com>                           |
  +----------------------------------------------------------------------+
*/

#ifdef PHP_WIN32
#include "config.w32.h"
#include <Ws2tcpip.h>
#endif

#ifdef HAVE_SYS_SOCKET_H
# include <sys/socket.h>
#endif

typedef php_stream *(php_stream_transport_factory_func)(const char *proto, size_t protolen,
		const char *resourcename, size_t resourcenamelen,
		const char *persistent_id, int options, int flags,
		struct timeval *timeout,
		php_stream_context *context STREAMS_DC);
typedef php_stream_transport_factory_func *php_stream_transport_factory;

BEGIN_EXTERN_C()
PHPAPI int php_stream_xport_register(const char *protocol, php_stream_transport_factory factory);
PHPAPI int php_stream_xport_unregister(const char *protocol);

#define STREAM_XPORT_CLIENT			0
#define STREAM_XPORT_SERVER			1

#define STREAM_XPORT_CONNECT		2
#define STREAM_XPORT_BIND			4
#define STREAM_XPORT_LISTEN			8
#define STREAM_XPORT_CONNECT_ASYNC	16

/* Open a client or server socket connection */
PHPAPI php_stream *_php_stream_xport_create(const char *name, size_t namelen, int options,
		int flags, const char *persistent_id,
		struct timeval *timeout,
		php_stream_context *context,
		zend_string **error_string,
		int *error_code
		STREAMS_DC);

#define php_stream_xport_create(name, namelen, options, flags, persistent_id, timeout, context, estr, ecode) \
	_php_stream_xport_create(name, namelen, options, flags, persistent_id, timeout, context, estr, ecode STREAMS_CC)

/* Bind the stream to a local address */
PHPAPI int php_stream_xport_bind(php_stream *stream,
		const char *name, size_t namelen,
		zend_string **error_text
		);

/* Connect to a remote address */
PHPAPI int php_stream_xport_connect(php_stream *stream,
		const char *name, size_t namelen,
		int asynchronous,
		struct timeval *timeout,
		zend_string **error_text,
		int *error_code
		);

/* Prepare to listen */
PHPAPI int php_stream_xport_listen(php_stream *stream,
		int backlog,
		zend_string **error_text
		);

/* Get the next client and their address as a string, or the underlying address
 * structure.  You must efree either of these if you request them */
PHPAPI int php_stream_xport_accept(php_stream *stream, php_stream **client,
		zend_string **textaddr,
		void **addr, socklen_t *addrlen,
		struct timeval *timeout,
		zend_string **error_text
		);

/* Get the name of either the socket or it's peer */
PHPAPI int php_stream_xport_get_name(php_stream *stream, int want_peer,
		zend_string **textaddr,
		void **addr, socklen_t *addrlen
		);

enum php_stream_xport_send_recv_flags {
	STREAM_OOB = 1,
	STREAM_PEEK = 2
};

/* Similar to recv() system call; read data from the stream, optionally
 * peeking, optionally retrieving OOB data */
PHPAPI int php_stream_xport_recvfrom(php_stream *stream, char *buf, size_t buflen,
		int flags, void **addr, socklen_t *addrlen,
		zend_string **textaddr);

/* Similar to send() system call; send data to the stream, optionally
 * sending it as OOB data */
PHPAPI int php_stream_xport_sendto(php_stream *stream, const char *buf, size_t buflen,
		int flags, void *addr, socklen_t addrlen);

typedef enum {
	STREAM_SHUT_RD,
	STREAM_SHUT_WR,
	STREAM_SHUT_RDWR
} stream_shutdown_t;

/* Similar to shutdown() system call; shut down part of a full-duplex
 * connection */
PHPAPI int php_stream_xport_shutdown(php_stream *stream, stream_shutdown_t how);
END_EXTERN_C()


/* Structure definition for the set_option interface that the above functions wrap */

typedef struct _php_stream_xport_param {
	enum {
		STREAM_XPORT_OP_BIND, STREAM_XPORT_OP_CONNECT,
		STREAM_XPORT_OP_LISTEN, STREAM_XPORT_OP_ACCEPT,
		STREAM_XPORT_OP_CONNECT_ASYNC,
		STREAM_XPORT_OP_GET_NAME,
		STREAM_XPORT_OP_GET_PEER_NAME,
		STREAM_XPORT_OP_RECV,
		STREAM_XPORT_OP_SEND,
		STREAM_XPORT_OP_SHUTDOWN
	} op;
	unsigned int want_addr:1;
	unsigned int want_textaddr:1;
	unsigned int want_errortext:1;
	unsigned int how:2;

	struct {
		char *name;
		size_t namelen;
		struct timeval *timeout;
		struct sockaddr *addr;
		char *buf;
		size_t buflen;
		socklen_t addrlen;
		int backlog;
		int flags;
	} inputs;
	struct {
		php_stream *client;
		struct sockaddr *addr;
		socklen_t addrlen;
		zend_string *textaddr;
		zend_string *error_text;
		int returncode;
		int error_code;
	} outputs;
} php_stream_xport_param;

/* Because both client and server streams use the same mechanisms
   for encryption we use the LSB to denote clients.
*/
typedef enum {
	STREAM_CRYPTO_METHOD_SSLv2_CLIENT = (1 << 1 | 1),
	STREAM_CRYPTO_METHOD_SSLv3_CLIENT = (1 << 2 | 1),
	/* v23 no longer negotiates SSL2 or SSL3 */
	STREAM_CRYPTO_METHOD_SSLv23_CLIENT = ((1 << 3) | (1 << 4) | (1 << 5) | 1),
	STREAM_CRYPTO_METHOD_TLSv1_0_CLIENT = (1 << 3 | 1),
	STREAM_CRYPTO_METHOD_TLSv1_1_CLIENT = (1 << 4 | 1),
	STREAM_CRYPTO_METHOD_TLSv1_2_CLIENT = (1 << 5 | 1),
	STREAM_CRYPTO_METHOD_TLSv1_3_CLIENT = (1 << 6 | 1),
	/* TLS equates to TLS_ANY as of PHP 7.2 */
	STREAM_CRYPTO_METHOD_TLS_CLIENT = ((1 << 3) | (1 << 4) | (1 << 5) | (1 << 6) | 1),
	STREAM_CRYPTO_METHOD_TLS_ANY_CLIENT = ((1 << 3) | (1 << 4) | (1 << 5) | (1 << 6) | 1),
	STREAM_CRYPTO_METHOD_ANY_CLIENT = ((1 << 1) | (1 << 2) | (1 << 3) | (1 << 4) | (1 << 5) | (1 << 6) | 1),
	STREAM_CRYPTO_METHOD_SSLv2_SERVER = (1 << 1),
	STREAM_CRYPTO_METHOD_SSLv3_SERVER = (1 << 2),
	/* v23 no longer negotiates SSL2 or SSL3 */
	STREAM_CRYPTO_METHOD_SSLv23_SERVER = ((1 << 3) | (1 << 4) | (1 << 5) | (1 << 6)),
	STREAM_CRYPTO_METHOD_TLSv1_0_SERVER = (1 << 3),
	STREAM_CRYPTO_METHOD_TLSv1_1_SERVER = (1 << 4),
	STREAM_CRYPTO_METHOD_TLSv1_2_SERVER = (1 << 5),
	STREAM_CRYPTO_METHOD_TLSv1_3_SERVER = (1 << 6),
	/* TLS equates to TLS_ANY as of PHP 7.2 */
	STREAM_CRYPTO_METHOD_TLS_SERVER = ((1 << 3) | (1 << 4) | (1 << 5) | (1 << 6)),
	STREAM_CRYPTO_METHOD_TLS_ANY_SERVER = ((1 << 3) | (1 << 4) | (1 << 5) | (1 << 6)),
	STREAM_CRYPTO_METHOD_ANY_SERVER = ((1 << 1) | (1 << 2) | (1 << 3) | (1 << 4) | (1 << 5) | (1 << 6))
} php_stream_xport_crypt_method_t;

/* These functions provide crypto support on the underlying transport */

BEGIN_EXTERN_C()
PHPAPI int php_stream_xport_crypto_setup(php_stream *stream, php_stream_xport_crypt_method_t crypto_method, php_stream *session_stream);
PHPAPI int php_stream_xport_crypto_enable(php_stream *stream, int activate);
END_EXTERN_C()

typedef struct _php_stream_xport_crypto_param {
	struct {
		php_stream *session;
		int activate;
		php_stream_xport_crypt_method_t method;
	} inputs;
	struct {
		int returncode;
	} outputs;
	enum {
		STREAM_XPORT_CRYPTO_OP_SETUP,
		STREAM_XPORT_CRYPTO_OP_ENABLE
	} op;
} php_stream_xport_crypto_param;

BEGIN_EXTERN_C()
PHPAPI HashTable *php_stream_xport_get_hash(void);
PHPAPI php_stream_transport_factory_func php_stream_generic_socket_factory;
END_EXTERN_C()
main/streams/php_stream_glob_wrapper.h000064400000003305151730543020014225 0ustar00/*
   +----------------------------------------------------------------------+
   | Copyright (c) The PHP Group                                          |
   +----------------------------------------------------------------------+
   | This source file is subject to version 3.01 of the PHP license,      |
   | that is bundled with this package in the file LICENSE, and is        |
   | available through the world-wide-web at the following url:           |
   | https://www.php.net/license/3_01.txt                                 |
   | If you did not receive a copy of the PHP license and are unable to   |
   | obtain it through the world-wide-web, please send a note to          |
   | license@php.net so we can mail you a copy immediately.               |
   +----------------------------------------------------------------------+
   | Author: Marcus Boerger <helly@php.net>                               |
   +----------------------------------------------------------------------+
 */

PHPAPI extern const php_stream_wrapper php_glob_stream_wrapper;
PHPAPI extern const php_stream_ops     php_glob_stream_ops;

BEGIN_EXTERN_C()

PHPAPI char* _php_glob_stream_get_path(php_stream *stream, size_t *plen STREAMS_DC);
#define php_glob_stream_get_path(stream, plen)	_php_glob_stream_get_path((stream), (plen) STREAMS_CC)

PHPAPI char* _php_glob_stream_get_pattern(php_stream *stream, size_t *plen STREAMS_DC);
#define php_glob_stream_get_pattern(stream, plen)	_php_glob_stream_get_pattern((stream), (plen) STREAMS_CC)

PHPAPI int   _php_glob_stream_get_count(php_stream *stream, int *pflags STREAMS_DC);
#define php_glob_stream_get_count(stream, pflags)	_php_glob_stream_get_count((stream), (pflags) STREAMS_CC)

END_EXTERN_C()
main/streams/userspace_arginfo.h000064400000004332151730543020013020 0ustar00/* This is a generated file, edit the .stub.php file instead.
 * Stub hash: 9198095c858c95fcb31252ddfa24fe04787d0460 */

static void register_userspace_symbols(int module_number)
{
	REGISTER_LONG_CONSTANT("STREAM_USE_PATH", USE_PATH, CONST_PERSISTENT);
	REGISTER_LONG_CONSTANT("STREAM_IGNORE_URL", IGNORE_URL, CONST_PERSISTENT);
	REGISTER_LONG_CONSTANT("STREAM_REPORT_ERRORS", REPORT_ERRORS, CONST_PERSISTENT);
	REGISTER_LONG_CONSTANT("STREAM_MUST_SEEK", STREAM_MUST_SEEK, CONST_PERSISTENT);
	REGISTER_LONG_CONSTANT("STREAM_URL_STAT_LINK", PHP_STREAM_URL_STAT_LINK, CONST_PERSISTENT);
	REGISTER_LONG_CONSTANT("STREAM_URL_STAT_QUIET", PHP_STREAM_URL_STAT_QUIET, CONST_PERSISTENT);
	REGISTER_LONG_CONSTANT("STREAM_MKDIR_RECURSIVE", PHP_STREAM_MKDIR_RECURSIVE, CONST_PERSISTENT);
	REGISTER_LONG_CONSTANT("STREAM_IS_URL", PHP_STREAM_IS_URL, CONST_PERSISTENT);
	REGISTER_LONG_CONSTANT("STREAM_OPTION_BLOCKING", PHP_STREAM_OPTION_BLOCKING, CONST_PERSISTENT);
	REGISTER_LONG_CONSTANT("STREAM_OPTION_READ_TIMEOUT", PHP_STREAM_OPTION_READ_TIMEOUT, CONST_PERSISTENT);
	REGISTER_LONG_CONSTANT("STREAM_OPTION_READ_BUFFER", PHP_STREAM_OPTION_READ_BUFFER, CONST_PERSISTENT);
	REGISTER_LONG_CONSTANT("STREAM_OPTION_WRITE_BUFFER", PHP_STREAM_OPTION_WRITE_BUFFER, CONST_PERSISTENT);
	REGISTER_LONG_CONSTANT("STREAM_BUFFER_NONE", PHP_STREAM_BUFFER_NONE, CONST_PERSISTENT);
	REGISTER_LONG_CONSTANT("STREAM_BUFFER_LINE", PHP_STREAM_BUFFER_LINE, CONST_PERSISTENT);
	REGISTER_LONG_CONSTANT("STREAM_BUFFER_FULL", PHP_STREAM_BUFFER_FULL, CONST_PERSISTENT);
	REGISTER_LONG_CONSTANT("STREAM_CAST_AS_STREAM", PHP_STREAM_AS_STDIO, CONST_PERSISTENT);
	REGISTER_LONG_CONSTANT("STREAM_CAST_FOR_SELECT", PHP_STREAM_AS_FD_FOR_SELECT, CONST_PERSISTENT);
	REGISTER_LONG_CONSTANT("STREAM_META_TOUCH", PHP_STREAM_META_TOUCH, CONST_PERSISTENT);
	REGISTER_LONG_CONSTANT("STREAM_META_OWNER", PHP_STREAM_META_OWNER, CONST_PERSISTENT);
	REGISTER_LONG_CONSTANT("STREAM_META_OWNER_NAME", PHP_STREAM_META_OWNER_NAME, CONST_PERSISTENT);
	REGISTER_LONG_CONSTANT("STREAM_META_GROUP", PHP_STREAM_META_GROUP, CONST_PERSISTENT);
	REGISTER_LONG_CONSTANT("STREAM_META_GROUP_NAME", PHP_STREAM_META_GROUP_NAME, CONST_PERSISTENT);
	REGISTER_LONG_CONSTANT("STREAM_META_ACCESS", PHP_STREAM_META_ACCESS, CONST_PERSISTENT);
}
main/streams/php_stream_plain_wrapper.h000064400000006727151730543020014420 0ustar00/*
   +----------------------------------------------------------------------+
   | Copyright (c) The PHP Group                                          |
   +----------------------------------------------------------------------+
   | This source file is subject to version 3.01 of the PHP license,      |
   | that is bundled with this package in the file LICENSE, and is        |
   | available through the world-wide-web at the following url:           |
   | https://www.php.net/license/3_01.txt                                 |
   | If you did not receive a copy of the PHP license and are unable to   |
   | obtain it through the world-wide-web, please send a note to          |
   | license@php.net so we can mail you a copy immediately.               |
   +----------------------------------------------------------------------+
   | Author: Wez Furlong <wez@thebrainroom.com>                           |
   +----------------------------------------------------------------------+
 */

/* definitions for the plain files wrapper */

/* operations for a plain file; use the php_stream_fopen_XXX funcs below */
PHPAPI extern php_stream_ops php_stream_stdio_ops;
PHPAPI extern /*const*/ php_stream_wrapper php_plain_files_wrapper;

BEGIN_EXTERN_C()

/* like fopen, but returns a stream */
PHPAPI php_stream *_php_stream_fopen(const char *filename, const char *mode, zend_string **opened_path, int options STREAMS_DC);
#define php_stream_fopen(filename, mode, opened)	_php_stream_fopen((filename), (mode), (opened), 0 STREAMS_CC)

PHPAPI php_stream *_php_stream_fopen_with_path(const char *filename, const char *mode, const char *path, zend_string **opened_path, int options STREAMS_DC);
#define php_stream_fopen_with_path(filename, mode, path, opened)	_php_stream_fopen_with_path((filename), (mode), (path), (opened), 0 STREAMS_CC)

PHPAPI php_stream *_php_stream_fopen_from_file(FILE *file, const char *mode STREAMS_DC);
#define php_stream_fopen_from_file(file, mode)	_php_stream_fopen_from_file((file), (mode) STREAMS_CC)

PHPAPI php_stream *_php_stream_fopen_from_fd(int fd, const char *mode, const char *persistent_id, bool zero_position STREAMS_DC);
#define php_stream_fopen_from_fd(fd, mode, persistent_id)	_php_stream_fopen_from_fd((fd), (mode), (persistent_id), false STREAMS_CC)

PHPAPI php_stream *_php_stream_fopen_from_pipe(FILE *file, const char *mode STREAMS_DC);
#define php_stream_fopen_from_pipe(file, mode)	_php_stream_fopen_from_pipe((file), (mode) STREAMS_CC)

PHPAPI php_stream *_php_stream_fopen_tmpfile(int dummy STREAMS_DC);
#define php_stream_fopen_tmpfile()	_php_stream_fopen_tmpfile(0 STREAMS_CC)

PHPAPI php_stream *_php_stream_fopen_temporary_file(const char *dir, const char *pfx, zend_string **opened_path STREAMS_DC);
#define php_stream_fopen_temporary_file(dir, pfx, opened_path)	_php_stream_fopen_temporary_file((dir), (pfx), (opened_path) STREAMS_CC)

/* This is a utility API for extensions that are opening a stream, converting it
 * to a FILE* and then closing it again.  Be warned that fileno() on the result
 * will most likely fail on systems with fopencookie. */
PHPAPI FILE * _php_stream_open_wrapper_as_file(char * path, char * mode, int options, zend_string **opened_path STREAMS_DC);
#define php_stream_open_wrapper_as_file(path, mode, options, opened_path) _php_stream_open_wrapper_as_file((path), (mode), (options), (opened_path) STREAMS_CC)

/* parse standard "fopen" modes into open() flags */
PHPAPI int php_stream_parse_fopen_modes(const char *mode, int *open_flags);

END_EXTERN_C()
main/streams/php_stream_filter_api.h000064400000015137151730543030013667 0ustar00/*
   +----------------------------------------------------------------------+
   | Copyright (c) The PHP Group                                          |
   +----------------------------------------------------------------------+
   | This source file is subject to version 3.01 of the PHP license,      |
   | that is bundled with this package in the file LICENSE, and is        |
   | available through the world-wide-web at the following url:           |
   | https://www.php.net/license/3_01.txt                                 |
   | If you did not receive a copy of the PHP license and are unable to   |
   | obtain it through the world-wide-web, please send a note to          |
   | license@php.net so we can mail you a copy immediately.               |
   +----------------------------------------------------------------------+
   | Author: Wez Furlong <wez@thebrainroom.com>                           |
   | With suggestions from:                                               |
   |      Moriyoshi Koizumi <moriyoshi@at.wakwak.com>                     |
   |      Sara Golemon      <pollita@php.net>                             |
   +----------------------------------------------------------------------+
 */

/* The filter API works on the principle of "Bucket-Brigades".  This is
 * partially inspired by the Apache 2 method of doing things, although
 * it is intentionally a light-weight implementation.
 *
 * Each stream can have a chain of filters for reading and another for writing.
 *
 * When data is written to the stream, it is placed into a bucket and placed at
 * the start of the input brigade.
 *
 * The first filter in the chain is invoked on the brigade and (depending on
 * it's return value), the next filter is invoked and so on.
 * */

#define PHP_STREAM_FILTER_READ	0x0001
#define PHP_STREAM_FILTER_WRITE	0x0002
#define PHP_STREAM_FILTER_ALL	(PHP_STREAM_FILTER_READ | PHP_STREAM_FILTER_WRITE)

typedef struct _php_stream_bucket			php_stream_bucket;
typedef struct _php_stream_bucket_brigade	php_stream_bucket_brigade;

struct _php_stream_bucket {
	php_stream_bucket *next, *prev;
	php_stream_bucket_brigade *brigade;

	char *buf;
	size_t buflen;
	/* if non-zero, buf should be pefreed when the bucket is destroyed */
	bool own_buf;
	bool is_persistent;

	/* destroy this struct when refcount falls to zero */
	int refcount;
};

struct _php_stream_bucket_brigade {
	php_stream_bucket *head, *tail;
};

typedef enum {
	PSFS_ERR_FATAL,	/* error in data stream */
	PSFS_FEED_ME,	/* filter needs more data; stop processing chain until more is available */
	PSFS_PASS_ON	/* filter generated output buckets; pass them on to next in chain */
} php_stream_filter_status_t;

/* Buckets API. */
BEGIN_EXTERN_C()
PHPAPI php_stream_bucket *php_stream_bucket_new(const php_stream *stream, char *buf, size_t buflen, uint8_t own_buf, uint8_t buf_persistent);
PHPAPI int php_stream_bucket_split(php_stream_bucket *in, php_stream_bucket **left, php_stream_bucket **right, size_t length);
PHPAPI void php_stream_bucket_delref(php_stream_bucket *bucket);
#define php_stream_bucket_addref(bucket)	(bucket)->refcount++
PHPAPI void php_stream_bucket_prepend(php_stream_bucket_brigade *brigade, php_stream_bucket *bucket);
PHPAPI void php_stream_bucket_append(php_stream_bucket_brigade *brigade, php_stream_bucket *bucket);
PHPAPI void php_stream_bucket_unlink(php_stream_bucket *bucket);
PHPAPI php_stream_bucket *php_stream_bucket_make_writeable(php_stream_bucket *bucket);
END_EXTERN_C()

#define PSFS_FLAG_NORMAL		0	/* regular read/write */
#define PSFS_FLAG_FLUSH_INC		1	/* an incremental flush */
#define PSFS_FLAG_FLUSH_CLOSE	2	/* final flush prior to closing */

typedef struct _php_stream_filter_ops {

	php_stream_filter_status_t (*filter)(
			php_stream *stream,
			php_stream_filter *thisfilter,
			php_stream_bucket_brigade *buckets_in,
			php_stream_bucket_brigade *buckets_out,
			size_t *bytes_consumed,
			int flags
			);

	void (*dtor)(php_stream_filter *thisfilter);

	const char *label;

} php_stream_filter_ops;

typedef struct _php_stream_filter_chain {
	php_stream_filter *head, *tail;

	/* Owning stream */
	php_stream *stream;
} php_stream_filter_chain;

struct _php_stream_filter {
	const php_stream_filter_ops *fops;
	zval abstract; /* for use by filter implementation */
	php_stream_filter *next;
	php_stream_filter *prev;
	int is_persistent;

	/* link into stream and chain */
	php_stream_filter_chain *chain;

	/* buffered buckets */
	php_stream_bucket_brigade buffer;

	/* filters are auto_registered when they're applied */
	zend_resource *res;
};

/* stack filter onto a stream */
BEGIN_EXTERN_C()
PHPAPI void _php_stream_filter_prepend(php_stream_filter_chain *chain, php_stream_filter *filter);
PHPAPI void php_stream_filter_prepend_ex(php_stream_filter_chain *chain, php_stream_filter *filter);
PHPAPI void _php_stream_filter_append(php_stream_filter_chain *chain, php_stream_filter *filter);
PHPAPI zend_result php_stream_filter_append_ex(php_stream_filter_chain *chain, php_stream_filter *filter);
PHPAPI zend_result _php_stream_filter_flush(php_stream_filter *filter, bool finish);
PHPAPI php_stream_filter *php_stream_filter_remove(php_stream_filter *filter, bool call_dtor);
PHPAPI void php_stream_filter_free(php_stream_filter *filter);
PHPAPI php_stream_filter *_php_stream_filter_alloc(const php_stream_filter_ops *fops, void *abstract, uint8_t persistent STREAMS_DC);
END_EXTERN_C()
#define php_stream_filter_alloc(fops, thisptr, persistent) _php_stream_filter_alloc((fops), (thisptr), (persistent) STREAMS_CC)
#define php_stream_filter_alloc_rel(fops, thisptr, persistent) _php_stream_filter_alloc((fops), (thisptr), (persistent) STREAMS_REL_CC)
#define php_stream_filter_prepend(chain, filter) _php_stream_filter_prepend((chain), (filter))
#define php_stream_filter_append(chain, filter) _php_stream_filter_append((chain), (filter))
#define php_stream_filter_flush(filter, finish) _php_stream_filter_flush((filter), (finish))

#define php_stream_is_filtered(stream)	((stream)->readfilters.head || (stream)->writefilters.head)

typedef struct _php_stream_filter_factory {
	php_stream_filter *(*create_filter)(const char *filtername, zval *filterparams, uint8_t persistent);
} php_stream_filter_factory;

BEGIN_EXTERN_C()
PHPAPI zend_result php_stream_filter_register_factory(const char *filterpattern, const php_stream_filter_factory *factory);
PHPAPI zend_result php_stream_filter_unregister_factory(const char *filterpattern);
PHPAPI zend_result php_stream_filter_register_factory_volatile(zend_string *filterpattern, const php_stream_filter_factory *factory);
PHPAPI php_stream_filter *php_stream_filter_create(const char *filtername, zval *filterparams, uint8_t persistent);
END_EXTERN_C()
main/streams/php_stream_context.h000064400000014302151730543030013226 0ustar00/*
   +----------------------------------------------------------------------+
   | Copyright (c) The PHP Group                                          |
   +----------------------------------------------------------------------+
   | This source file is subject to version 3.01 of the PHP license,      |
   | that is bundled with this package in the file LICENSE, and is        |
   | available through the world-wide-web at the following url:           |
   | https://www.php.net/license/3_01.txt                                 |
   | If you did not receive a copy of the PHP license and are unable to   |
   | obtain it through the world-wide-web, please send a note to          |
   | license@php.net so we can mail you a copy immediately.               |
   +----------------------------------------------------------------------+
   | Author: Wez Furlong <wez@thebrainroom.com>                           |
   +----------------------------------------------------------------------+
 */

/* Stream context and status notification related definitions */

/* callback for status notifications */
typedef void (*php_stream_notification_func)(php_stream_context *context,
		int notifycode, int severity,
		char *xmsg, int xcode,
		size_t bytes_sofar, size_t bytes_max,
		void * ptr);

#define PHP_STREAM_NOTIFIER_PROGRESS	1

/* TODO: Remove dependence on ext/standard/file.h for the default context global */
#define php_stream_context_get_default(without_context) \
	(without_context) ? NULL : FG(default_context) ? FG(default_context) : \
		(FG(default_context) = php_stream_context_alloc())

/* Attempt to fetch context from the zval passed,
   If no context was passed, use the default context
   The default context has not yet been created, do it now. */
#define php_stream_context_from_zval(zcontext, nocontext) ( \
		(zcontext) ? zend_fetch_resource_ex(zcontext, "Stream-Context", php_le_stream_context()) : \
		php_stream_context_get_default(nocontext))

#define php_stream_context_to_zval(context, zval) { ZVAL_RES(zval, (context)->res); GC_ADDREF((context)->res); }

typedef struct _php_stream_notifier php_stream_notifier;

struct _php_stream_notifier {
	php_stream_notification_func func;
	void (*dtor)(php_stream_notifier *notifier);
	void *ptr;
	int mask;
	size_t progress, progress_max; /* position for progress notification */
};

struct _php_stream_context {
	php_stream_notifier *notifier;
	zval options;	/* hash keyed by wrapper family or specific wrapper */
	zend_resource *res;	/* used for auto-cleanup */
};

BEGIN_EXTERN_C()
PHPAPI int php_le_stream_context(void);
PHPAPI void php_stream_context_free(php_stream_context *context);
PHPAPI php_stream_context *php_stream_context_alloc(void);
PHPAPI zval *php_stream_context_get_option(const php_stream_context *context,
		const char *wrappername, const char *optionname);
PHPAPI void php_stream_context_set_option(php_stream_context *context,
		const char *wrappername, const char *optionname, zval *optionvalue);
void php_stream_context_unset_option(php_stream_context *context,
	const char *wrappername, const char *optionname);

struct php_uri_parser;

PHPAPI const struct php_uri_parser *php_stream_context_get_uri_parser(const char *wrappername, php_stream_context *context);
PHPAPI php_stream_notifier *php_stream_notification_alloc(void);
PHPAPI void php_stream_notification_free(php_stream_notifier *notifier);
END_EXTERN_C()

/* not all notification codes are implemented */
#define PHP_STREAM_NOTIFY_RESOLVE		1
#define PHP_STREAM_NOTIFY_CONNECT		2
#define PHP_STREAM_NOTIFY_AUTH_REQUIRED		3
#define PHP_STREAM_NOTIFY_MIME_TYPE_IS	4
#define PHP_STREAM_NOTIFY_FILE_SIZE_IS	5
#define PHP_STREAM_NOTIFY_REDIRECTED	6
#define PHP_STREAM_NOTIFY_PROGRESS		7
#define PHP_STREAM_NOTIFY_COMPLETED		8
#define PHP_STREAM_NOTIFY_FAILURE		9
#define PHP_STREAM_NOTIFY_AUTH_RESULT	10

#define PHP_STREAM_NOTIFY_SEVERITY_INFO	0
#define PHP_STREAM_NOTIFY_SEVERITY_WARN	1
#define PHP_STREAM_NOTIFY_SEVERITY_ERR	2

BEGIN_EXTERN_C()
PHPAPI void php_stream_notification_notify(php_stream_context *context, int notifycode, int severity,
		char *xmsg, int xcode, size_t bytes_sofar, size_t bytes_max, void * ptr);
PHPAPI php_stream_context *php_stream_context_set(php_stream *stream, php_stream_context *context);
END_EXTERN_C()

#define php_stream_notify_info(context, code, xmsg, xcode)	do { if ((context) && (context)->notifier) { \
	php_stream_notification_notify((context), (code), PHP_STREAM_NOTIFY_SEVERITY_INFO, \
				(xmsg), (xcode), 0, 0, NULL); } } while (0)

#define php_stream_notify_progress(context, bsofar, bmax) do { if ((context) && (context)->notifier) { \
	php_stream_notification_notify((context), PHP_STREAM_NOTIFY_PROGRESS, PHP_STREAM_NOTIFY_SEVERITY_INFO, \
			NULL, 0, (bsofar), (bmax), NULL); } } while(0)

#define php_stream_notify_completed(context) do { if ((context) && (context)->notifier) { \
	php_stream_notification_notify((context), PHP_STREAM_NOTIFY_COMPLETED, PHP_STREAM_NOTIFY_SEVERITY_INFO, \
			NULL, 0, (context)->notifier->progress, (context)->notifier->progress_max, NULL); } } while(0)

#define php_stream_notify_progress_init(context, sofar, bmax) do { if ((context) && (context)->notifier) { \
	(context)->notifier->progress = (sofar); \
	(context)->notifier->progress_max = (bmax); \
	(context)->notifier->mask |= PHP_STREAM_NOTIFIER_PROGRESS; \
	php_stream_notify_progress((context), (sofar), (bmax)); } } while (0)

#define php_stream_notify_progress_increment(context, dsofar, dmax) do { if ((context) && (context)->notifier && ((context)->notifier->mask & PHP_STREAM_NOTIFIER_PROGRESS)) { \
	(context)->notifier->progress += (dsofar); \
	(context)->notifier->progress_max += (dmax); \
	php_stream_notify_progress((context), (context)->notifier->progress, (context)->notifier->progress_max); } } while (0)

#define php_stream_notify_file_size(context, file_size, xmsg, xcode) do { if ((context) && (context)->notifier) { \
	php_stream_notification_notify((context), PHP_STREAM_NOTIFY_FILE_SIZE_IS, PHP_STREAM_NOTIFY_SEVERITY_INFO, \
			(xmsg), (xcode), 0, (file_size), NULL); } } while(0)

#define php_stream_notify_error(context, code, xmsg, xcode) do { if ((context) && (context)->notifier) {\
	php_stream_notification_notify((context), (code), PHP_STREAM_NOTIFY_SEVERITY_ERR, \
			(xmsg), (xcode), 0, 0, NULL); } } while(0)
main/SAPI.h000064400000026006151730543030006402 0ustar00/*
   +----------------------------------------------------------------------+
   | Copyright (c) The PHP Group                                          |
   +----------------------------------------------------------------------+
   | This source file is subject to version 3.01 of the PHP license,      |
   | that is bundled with this package in the file LICENSE, and is        |
   | available through the world-wide-web at the following url:           |
   | https://www.php.net/license/3_01.txt                                 |
   | If you did not receive a copy of the PHP license and are unable to   |
   | obtain it through the world-wide-web, please send a note to          |
   | license@php.net so we can mail you a copy immediately.               |
   +----------------------------------------------------------------------+
   | Author:  Zeev Suraski <zeev@php.net>                                 |
   +----------------------------------------------------------------------+
*/

#ifndef SAPI_H
#define SAPI_H

#include "php.h"
#include "zend.h"
#include "zend_API.h"
#include "zend_llist.h"
#include "zend_operators.h"
#include <sys/stat.h>

#define SAPI_OPTION_NO_CHDIR 1
#define SAPI_POST_BLOCK_SIZE 0x4000

#ifdef PHP_WIN32
#	ifdef SAPI_EXPORTS
#		define SAPI_API __declspec(dllexport)
#	else
#		define SAPI_API __declspec(dllimport)
#	endif
#elif defined(__GNUC__) && __GNUC__ >= 4
#	define SAPI_API __attribute__ ((visibility("default")))
#else
#	define SAPI_API
#endif

#undef shutdown

typedef struct {
	char *header;
	size_t header_len;
} sapi_header_struct;


typedef struct {
	zend_llist headers;
	int http_response_code;
	unsigned char send_default_content_type;
	char *mimetype;
	char *http_status_line;
} sapi_headers_struct;


typedef struct _sapi_post_entry sapi_post_entry;
typedef struct _sapi_module_struct sapi_module_struct;

BEGIN_EXTERN_C()
extern SAPI_API sapi_module_struct sapi_module;  /* true global */
END_EXTERN_C()

/* Some values in this structure needs to be filled in before
 * calling sapi_activate(). We WILL change the `char *' entries,
 * so make sure that you allocate a separate buffer for them
 * and that you free them after sapi_deactivate().
 */

typedef struct {
	const char *request_method;
	char *query_string;
	char *cookie_data;
	zend_long content_length;

	char *path_translated;
	char *request_uri;

	/* Do not use request_body directly, but the php://input stream wrapper instead */
	struct _php_stream *request_body;

	const char *content_type;

	bool headers_only;
	bool no_headers;
	bool headers_read;

	sapi_post_entry *post_entry;

	char *content_type_dup;

	/* for HTTP authentication */
	char *auth_user;
	char *auth_password;
	char *auth_digest;

	/* this is necessary for the CGI SAPI module */
	char *argv0;

	char *current_user;
	int current_user_length;

	/* this is necessary for CLI module */
	int argc;
	char **argv;
	int proto_num;
} sapi_request_info;

typedef struct {
	bool throw_exceptions;
	struct {
		bool set;
		zend_long value;
	} options_cache[5];
} sapi_request_parse_body_context;

typedef enum {
	REQUEST_PARSE_BODY_OPTION_max_file_uploads = 0,
	REQUEST_PARSE_BODY_OPTION_max_input_vars,
	REQUEST_PARSE_BODY_OPTION_max_multipart_body_parts,
	REQUEST_PARSE_BODY_OPTION_post_max_size,
	REQUEST_PARSE_BODY_OPTION_upload_max_filesize,
} request_parse_body_option;

#define REQUEST_PARSE_BODY_OPTION_GET(name, fallback) \
	(SG(request_parse_body_context).options_cache[REQUEST_PARSE_BODY_OPTION_ ## name].set \
		? SG(request_parse_body_context).options_cache[REQUEST_PARSE_BODY_OPTION_ ## name].value \
		: (fallback))

typedef struct _sapi_globals_struct {
	void *server_context;
	sapi_request_info request_info;
	sapi_headers_struct sapi_headers;
	int64_t read_post_bytes;
	unsigned char post_read;
	unsigned char headers_sent;
	zend_stat_t global_stat;
	char *default_mimetype;
	char *default_charset;
	HashTable *rfc1867_uploaded_files;
	zend_long post_max_size;
	int options;
	bool sapi_started;
	double global_request_time;
	HashTable known_post_content_types;
	zval callback_func;
	zend_fcall_info_cache fci_cache;
	sapi_request_parse_body_context request_parse_body_context;
} sapi_globals_struct;


BEGIN_EXTERN_C()
#ifdef ZTS
# define SG(v) ZEND_TSRMG_FAST(sapi_globals_offset, sapi_globals_struct *, v)
SAPI_API extern int sapi_globals_id;
SAPI_API extern size_t sapi_globals_offset;
#else
# define SG(v) (sapi_globals.v)
extern SAPI_API sapi_globals_struct sapi_globals;
#endif

SAPI_API void sapi_startup(sapi_module_struct *sf);
SAPI_API void sapi_shutdown(void);
SAPI_API void sapi_activate(void);
SAPI_API void sapi_deactivate_module(void);
SAPI_API void sapi_deactivate_destroy(void);
SAPI_API void sapi_deactivate(void);
SAPI_API void sapi_initialize_empty_request(void);
SAPI_API void sapi_add_request_header(const char *var, unsigned int var_len, char *val, unsigned int val_len, void *arg);
END_EXTERN_C()

/*
 * This is the preferred and maintained API for
 * operating on HTTP headers.
 */

/*
 * Always specify a sapi_header_line this way:
 *
 *     sapi_header_line ctr = {0};
 */

typedef struct {
	const char *line; /* If you allocated this, you need to free it yourself */
	size_t line_len;
	union {
		zend_long response_code; /* long due to zend_parse_parameters compatibility */
		size_t header_len; /* the "Key" in "Key: Value", for optimization */
	};
} sapi_header_line;

typedef enum {					/* Parameter: 			*/
	SAPI_HEADER_REPLACE,		/* sapi_header_line* 	*/
	SAPI_HEADER_ADD,			/* sapi_header_line* 	*/
	SAPI_HEADER_DELETE,			/* sapi_header_line* 	*/
	SAPI_HEADER_DELETE_PREFIX,	/* sapi_header_line* 	*/
	SAPI_HEADER_DELETE_ALL,		/* void					*/
	SAPI_HEADER_SET_STATUS		/* int 					*/
} sapi_header_op_enum;

BEGIN_EXTERN_C()
SAPI_API int sapi_header_op(sapi_header_op_enum op, void *arg);

SAPI_API int sapi_add_header_ex(const char *header_line, size_t header_line_len, bool duplicate, bool replace);
#define sapi_add_header(a, b, c) sapi_add_header_ex((a),(b),(c),1)


SAPI_API int sapi_send_headers(void);
SAPI_API void sapi_free_header(sapi_header_struct *sapi_header);
SAPI_API void sapi_handle_post(void *arg);
SAPI_API void sapi_read_post_data(void);
SAPI_API size_t sapi_read_post_block(char *buffer, size_t buflen);
SAPI_API int sapi_register_post_entries(const sapi_post_entry *post_entry);
SAPI_API int sapi_register_post_entry(const sapi_post_entry *post_entry);
SAPI_API void sapi_unregister_post_entry(const sapi_post_entry *post_entry);
SAPI_API int sapi_register_default_post_reader(void (*default_post_reader)(void));
SAPI_API int sapi_register_treat_data(void (*treat_data)(int arg, char *str, zval *destArray));
SAPI_API int sapi_register_input_filter(unsigned int (*input_filter)(int arg, const char *var, char **val, size_t val_len, size_t *new_val_len), unsigned int (*input_filter_init)(void));

SAPI_API int sapi_flush(void);
SAPI_API zend_stat_t *sapi_get_stat(void);
SAPI_API char *sapi_getenv(const char *name, size_t name_len);

SAPI_API char *sapi_get_default_content_type(void);
SAPI_API void sapi_get_default_content_type_header(sapi_header_struct *default_header);
SAPI_API size_t sapi_apply_default_charset(char **mimetype, size_t len);
SAPI_API void sapi_activate_headers_only(void);

SAPI_API int sapi_get_fd(int *fd);
SAPI_API int sapi_force_http_10(void);

SAPI_API int sapi_get_target_uid(uid_t *);
SAPI_API int sapi_get_target_gid(gid_t *);
SAPI_API double sapi_get_request_time(void);
SAPI_API void sapi_terminate_process(void);
END_EXTERN_C()

struct _sapi_module_struct {
	char *name;
	char *pretty_name;

	int (*startup)(struct _sapi_module_struct *sapi_module);
	int (*shutdown)(struct _sapi_module_struct *sapi_module);

	int (*activate)(void);
	int (*deactivate)(void);

	size_t (*ub_write)(const char *str, size_t str_length);
	void (*flush)(void *server_context);
	zend_stat_t *(*get_stat)(void);
	char *(*getenv)(const char *name, size_t name_len);

	void (*sapi_error)(int type, const char *error_msg, ...) ZEND_ATTRIBUTE_FORMAT(printf, 2, 3);

	int (*header_handler)(sapi_header_struct *sapi_header, sapi_header_op_enum op, sapi_headers_struct *sapi_headers);
	int (*send_headers)(sapi_headers_struct *sapi_headers);
	void (*send_header)(sapi_header_struct *sapi_header, void *server_context);

	size_t (*read_post)(char *buffer, size_t count_bytes);
	char *(*read_cookies)(void);

	void (*register_server_variables)(zval *track_vars_array);
	void (*log_message)(const char *message, int syslog_type_int);
	zend_result (*get_request_time)(double *request_time);
	void (*terminate_process)(void);

	char *php_ini_path_override;

	void (*default_post_reader)(void);
	void (*treat_data)(int arg, char *str, zval *destArray);
	char *executable_location;

	int php_ini_ignore;
	int php_ini_ignore_cwd; /* don't look for php.ini in the current directory */

	int (*get_fd)(int *fd);

	int (*force_http_10)(void);

	int (*get_target_uid)(uid_t *);
	int (*get_target_gid)(gid_t *);

	unsigned int (*input_filter)(int arg, const char *var, char **val, size_t val_len, size_t *new_val_len);

	void (*ini_defaults)(HashTable *configuration_hash);
	int phpinfo_as_text;

	const char *ini_entries;
	const zend_function_entry *additional_functions;
	unsigned int (*input_filter_init)(void);

	int (*pre_request_init)(void); /* called before activate and before the post data read - used for .user.ini */
};

struct _sapi_post_entry {
	char *content_type;
	uint32_t content_type_len;
	void (*post_reader)(void);
	void (*post_handler)(char *content_type_dup, void *arg);
};

/* header_handler() constants */
#define SAPI_HEADER_ADD			(1<<0)


#define SAPI_HEADER_SENT_SUCCESSFULLY	1
#define SAPI_HEADER_DO_SEND				2
#define SAPI_HEADER_SEND_FAILED			3

#define SAPI_DEFAULT_MIMETYPE		"text/html"
#define SAPI_DEFAULT_CHARSET		PHP_DEFAULT_CHARSET
#define SAPI_PHP_VERSION_HEADER		"X-Powered-By: PHP/" PHP_VERSION

#define SAPI_POST_READER_FUNC(post_reader) void post_reader(void)
#define SAPI_POST_HANDLER_FUNC(post_handler) void post_handler(char *content_type_dup, void *arg)

#define SAPI_TREAT_DATA_FUNC(treat_data) void treat_data(int arg, char *str, zval* destArray)
#define SAPI_INPUT_FILTER_FUNC(input_filter) unsigned int input_filter(int arg, const char *var, char **val, size_t val_len, size_t *new_val_len)

BEGIN_EXTERN_C()
SAPI_API SAPI_POST_READER_FUNC(sapi_read_standard_form_data);
SAPI_API SAPI_POST_READER_FUNC(php_default_post_reader);
SAPI_API SAPI_TREAT_DATA_FUNC(php_default_treat_data);
SAPI_API SAPI_INPUT_FILTER_FUNC(php_default_input_filter);
END_EXTERN_C()

#define STANDARD_SAPI_MODULE_PROPERTIES \
	NULL, /* php_ini_path_override   */ \
	NULL, /* default_post_reader     */ \
	NULL, /* treat_data              */ \
	NULL, /* executable_location     */ \
	0,    /* php_ini_ignore          */ \
	0,    /* php_ini_ignore_cwd      */ \
	NULL, /* get_fd                  */ \
	NULL, /* force_http_10           */ \
	NULL, /* get_target_uid          */ \
	NULL, /* get_target_gid          */ \
	NULL, /* input_filter            */ \
	NULL, /* ini_defaults            */ \
	0,    /* phpinfo_as_text;        */ \
	NULL, /* ini_entries;            */ \
	NULL, /* additional_functions    */ \
	NULL, /* input_filter_init       */ \
	NULL  /* pre_request_init        */

#endif /* SAPI_H */
main/php_config.h000064400000177254151730543030007776 0ustar00/* main/php_config.h.  Generated from php_config.h.in by configure.  */
/* main/php_config.h.in.  Generated from configure.ac by autoheader.  */


#ifndef PHP_CONFIG_H
#define PHP_CONFIG_H

#if defined(__GNUC__) && __GNUC__ >= 4
# define ZEND_API __attribute__ ((visibility("default")))
# define ZEND_DLEXPORT __attribute__ ((visibility("default")))
#else
# define ZEND_API
# define ZEND_DLEXPORT
#endif

#define ZEND_DLIMPORT


/* The cdb handler header file. */
/* #undef CDB_INCLUDE_FILE */

/* Define to 1 if the PHP extension 'bcmath' is built as a dynamic module. */
#define COMPILE_DL_BCMATH 1

/* Define to 1 if the PHP extension 'bz2' is built as a dynamic module. */
/* #undef COMPILE_DL_BZ2 */

/* Define to 1 if the PHP extension 'calendar' is built as a dynamic module.
   */
/* #undef COMPILE_DL_CALENDAR */

/* Define to 1 if the PHP extension 'ctype' is built as a dynamic module. */
/* #undef COMPILE_DL_CTYPE */

/* Define to 1 if the PHP extension 'curl' is built as a dynamic module. */
/* #undef COMPILE_DL_CURL */

/* Define to 1 if the PHP extension 'date' is built as a dynamic module. */
/* #undef COMPILE_DL_DATE */

/* Define to 1 if the PHP extension 'dba' is built as a dynamic module. */
#define COMPILE_DL_DBA 1

/* Define to 1 if the PHP extension 'dl_test' is built as a dynamic module. */
/* #undef COMPILE_DL_DL_TEST */

/* Define to 1 if the PHP extension 'dom' is built as a dynamic module. */
#define COMPILE_DL_DOM 1

/* Define to 1 if the PHP extension 'enchant' is built as a dynamic module. */
#define COMPILE_DL_ENCHANT 1

/* Define to 1 if the PHP extension 'exif' is built as a dynamic module. */
/* #undef COMPILE_DL_EXIF */

/* Define to 1 if the PHP extension 'ffi' is built as a dynamic module. */
#define COMPILE_DL_FFI 1

/* Define to 1 if the PHP extension 'fileinfo' is built as a dynamic module.
   */
#define COMPILE_DL_FILEINFO 1

/* Define to 1 if the PHP extension 'filter' is built as a dynamic module. */
/* #undef COMPILE_DL_FILTER */

/* Define to 1 if the PHP extension 'ftp' is built as a dynamic module. */
/* #undef COMPILE_DL_FTP */

/* Define to 1 if the PHP extension 'gd' is built as a dynamic module. */
#define COMPILE_DL_GD 1

/* Define to 1 if the PHP extension 'gettext' is built as a dynamic module. */
/* #undef COMPILE_DL_GETTEXT */

/* Define to 1 if the PHP extension 'gmp' is built as a dynamic module. */
#define COMPILE_DL_GMP 1

/* Define to 1 if the PHP extension 'hash' is built as a dynamic module. */
/* #undef COMPILE_DL_HASH */

/* Define to 1 if the PHP extension 'iconv' is built as a dynamic module. */
/* #undef COMPILE_DL_ICONV */

/* Define to 1 if the PHP extension 'intl' is built as a dynamic module. */
#define COMPILE_DL_INTL 1

/* Define to 1 if the PHP extension 'json' is built as a dynamic module. */
/* #undef COMPILE_DL_JSON */

/* Define to 1 if the PHP extension 'ldap' is built as a dynamic module. */
#define COMPILE_DL_LDAP 1

/* Define to 1 if the PHP extension 'lexbor' is built as a dynamic module. */
/* #undef COMPILE_DL_LEXBOR */

/* Define to 1 if the PHP extension 'libxml' is built as a dynamic module. */
/* #undef COMPILE_DL_LIBXML */

/* Define to 1 if the PHP extension 'mbstring' is built as a dynamic module.
   */
#define COMPILE_DL_MBSTRING 1

/* Define to 1 if the PHP extension 'mysqli' is built as a dynamic module. */
#define COMPILE_DL_MYSQLI 1

/* Define to 1 if the PHP extension 'mysqlnd' is built as a dynamic module. */
#define COMPILE_DL_MYSQLND 1

/* Define to 1 if the PHP extension 'odbc' is built as a dynamic module. */
#define COMPILE_DL_ODBC 1

/* Define to 1 if the PHP extension 'opcache' is built as a dynamic module. */
/* #undef COMPILE_DL_OPCACHE */

/* Define to 1 if the PHP extension 'openssl' is built as a dynamic module. */
/* #undef COMPILE_DL_OPENSSL */

/* Define to 1 if the PHP extension 'pcntl' is built as a dynamic module. */
/* #undef COMPILE_DL_PCNTL */

/* Define to 1 if the PHP extension 'pcre' is built as a dynamic module. */
/* #undef COMPILE_DL_PCRE */

/* Define to 1 if the PHP extension 'pdo' is built as a dynamic module. */
#define COMPILE_DL_PDO 1

/* Define to 1 if the PHP extension 'pdo_dblib' is built as a dynamic module.
   */
#define COMPILE_DL_PDO_DBLIB 1

/* Define to 1 if the PHP extension 'pdo_firebird' is built as a dynamic
   module. */
#define COMPILE_DL_PDO_FIREBIRD 1

/* Define to 1 if the PHP extension 'pdo_mysql' is built as a dynamic module.
   */
#define COMPILE_DL_PDO_MYSQL 1

/* Define to 1 if the PHP extension 'pdo_odbc' is built as a dynamic module.
   */
#define COMPILE_DL_PDO_ODBC 1

/* Define to 1 if the PHP extension 'pdo_pgsql' is built as a dynamic module.
   */
#define COMPILE_DL_PDO_PGSQL 1

/* Define to 1 if the PHP extension 'pdo_sqlite' is built as a dynamic module.
   */
#define COMPILE_DL_PDO_SQLITE 1

/* Define to 1 if the PHP extension 'pgsql' is built as a dynamic module. */
#define COMPILE_DL_PGSQL 1

/* Define to 1 if the PHP extension 'phar' is built as a dynamic module. */
#define COMPILE_DL_PHAR 1

/* Define to 1 if the PHP extension 'posix' is built as a dynamic module. */
#define COMPILE_DL_POSIX 1

/* Define to 1 if the PHP extension 'random' is built as a dynamic module. */
/* #undef COMPILE_DL_RANDOM */

/* Define to 1 if the PHP extension 'readline' is built as a dynamic module.
   */
/* #undef COMPILE_DL_READLINE */

/* Define to 1 if the PHP extension 'reflection' is built as a dynamic module.
   */
/* #undef COMPILE_DL_REFLECTION */

/* Define to 1 if the PHP extension 'session' is built as a dynamic module. */
/* #undef COMPILE_DL_SESSION */

/* Define to 1 if the PHP extension 'shmop' is built as a dynamic module. */
/* #undef COMPILE_DL_SHMOP */

/* Define to 1 if the PHP extension 'simplexml' is built as a dynamic module.
   */
/* #undef COMPILE_DL_SIMPLEXML */

/* Define to 1 if the PHP extension 'snmp' is built as a dynamic module. */
#define COMPILE_DL_SNMP 1

/* Define to 1 if the PHP extension 'soap' is built as a dynamic module. */
#define COMPILE_DL_SOAP 1

/* Define to 1 if the PHP extension 'sockets' is built as a dynamic module. */
#define COMPILE_DL_SOCKETS 1

/* Define to 1 if the PHP extension 'sodium' is built as a dynamic module. */
#define COMPILE_DL_SODIUM 1

/* Define to 1 if the PHP extension 'spl' is built as a dynamic module. */
/* #undef COMPILE_DL_SPL */

/* Define to 1 if the PHP extension 'sqlite3' is built as a dynamic module. */
/* #undef COMPILE_DL_SQLITE3 */

/* Define to 1 if the PHP extension 'standard' is built as a dynamic module.
   */
/* #undef COMPILE_DL_STANDARD */

/* Define to 1 if the PHP extension 'sysvmsg' is built as a dynamic module. */
#define COMPILE_DL_SYSVMSG 1

/* Define to 1 if the PHP extension 'sysvsem' is built as a dynamic module. */
#define COMPILE_DL_SYSVSEM 1

/* Define to 1 if the PHP extension 'sysvshm' is built as a dynamic module. */
#define COMPILE_DL_SYSVSHM 1

/* Define to 1 if the PHP extension 'tidy' is built as a dynamic module. */
#define COMPILE_DL_TIDY 1

/* Define to 1 if the PHP extension 'tokenizer' is built as a dynamic module.
   */
/* #undef COMPILE_DL_TOKENIZER */

/* Define to 1 if the PHP extension 'uri' is built as a dynamic module. */
/* #undef COMPILE_DL_URI */

/* Define to 1 if the PHP extension 'xml' is built as a dynamic module. */
/* #undef COMPILE_DL_XML */

/* Define to 1 if the PHP extension 'xmlreader' is built as a dynamic module.
   */
#define COMPILE_DL_XMLREADER 1

/* Define to 1 if the PHP extension 'xmlwriter' is built as a dynamic module.
   */
#define COMPILE_DL_XMLWRITER 1

/* Define to 1 if the PHP extension 'xsl' is built as a dynamic module. */
#define COMPILE_DL_XSL 1

/* Define to 1 if the PHP extension 'zend_test' is built as a dynamic module.
   */
/* #undef COMPILE_DL_ZEND_TEST */

/* Define to 1 if the PHP extension 'zip' is built as a dynamic module. */
#define COMPILE_DL_ZIP 1

/* Define to 1 if the PHP extension 'zlib' is built as a dynamic module. */
/* #undef COMPILE_DL_ZLIB */

/* Define to 1 if fopencookie seeker uses off64_t. */
#define COOKIE_SEEKER_USES_OFF64_T 1

/* Define to one of `_getb67', `GETB67', `getb67' for Cray-2 and Cray-YMP
   systems. This function is required for `alloca.c' support on those systems.
   */
/* #undef CRAY_STACKSEG_END */

/* Define to 1 if crypt_r uses CRYPTD. */
/* #undef CRYPT_R_CRYPTD */

/* Define to 1 if struct crypt_data requires _GNU_SOURCE. */
/* #undef CRYPT_R_GNU_SOURCE */

/* Define to 1 if crypt_r uses struct crypt_data. */
/* #undef CRYPT_R_STRUCT_CRYPT_DATA */

/* Define to 1 if using `alloca.c'. */
/* #undef C_ALLOCA */

/* The DB1 handler header file. */
/* #undef DB1_INCLUDE_FILE */

/* The DB1 handler version information. */
/* #undef DB1_VERSION */

/* The DB2 handler header file. */
/* #undef DB2_INCLUDE_FILE */

/* The DB3 handler header file. */
/* #undef DB3_INCLUDE_FILE */

/* The DB4 handler header file. */
#define DB4_INCLUDE_FILE "/usr/include/db.h"

/* Define to 1 if the dba extension uses the cdb handler. */
#define DBA_CDB 1

/* Define to 1 if the dba extension uses the PHP built-in cdb handler. */
#define DBA_CDB_BUILTIN 1

/* Define to 1 if the dba extension uses the Berkeley DB version 1 (DB1)
   handler. */
/* #undef DBA_DB1 */

/* Define to 1 if the dba extension uses the Berkeley DB version 2 (DB2)
   handler. */
/* #undef DBA_DB2 */

/* Define to 1 if the dba extension uses the Berkeley DB version 3 (DB3)
   handler. */
/* #undef DBA_DB3 */

/* Define to 1 if the dba extension uses the Berkeley DB version 4 (DB4)
   handler. */
#define DBA_DB4 1

/* Define to 1 if the dba extension uses the DBM handler. */
/* #undef DBA_DBM */

/* Define to 1 if the dba extension uses the bundled flatfile handler. */
#define DBA_FLATFILE 1

/* Define to 1 if the dba extension uses the GDBM handler. */
/* #undef DBA_GDBM */

/* Define to 1 if the dba extension uses the bundled inifile handler. */
#define DBA_INIFILE 1

/* Define to 1 if the dba extension uses the LMDB handler. */
/* #undef DBA_LMDB */

/* Define to 1 if the dba extension uses the NDBM handler. */
/* #undef DBA_NDBM */

/* Define to 1 if the dba extension uses the QDBM handler. */
/* #undef DBA_QDBM */

/* Define to 1 if the dba extension uses the Tokyo Cabinet handler. */
/* #undef DBA_TCADB */

/* The DBM handler include file. */
/* #undef DBM_INCLUDE_FILE */

/* The DBM handler version information. */
/* #undef DBM_VERSION */

/* Define to string "1" if PHP short open tags '<?' are enabled by default,
   and to string "0" if they are not. */
#define DEFAULT_SHORT_OPEN_TAG "1"

/* Define to 1 to enable the 'chroot' function. */
/* #undef ENABLE_CHROOT_FUNC */

/* The GDBM handler header file. */
/* #undef GDBM_INCLUDE_FILE */

/* Define to 1 if `TIOCGWINSZ' requires <sys/ioctl.h>. */
#define GWINSZ_IN_SYS_IOCTL 1

/* Define to 1 if 'ldap_set_rebind_proc' has 3 arguments. */
#define HAVE_3ARG_SETREBINDPROC 1

/* Define to 1 when aarch64 CRC32 API is available. */
/* #undef HAVE_AARCH64_CRC32 */

/* Define to 1 if you have the `accept4' function. */
#define HAVE_ACCEPT4 1

/* Define to 1 if the compiler supports '__alignof__'. */
#define HAVE_ALIGNOF 1

/* Define to 1 if you have `alloca', as a function or macro. */
#define HAVE_ALLOCA 1

/* Define to 1 if you have <alloca.h> and it should be used (not on Ultrix).
   */
#define HAVE_ALLOCA_H 1

/* Define to 1 if you have the `alphasort' function. */
#define HAVE_ALPHASORT 1

/* Define to 1 if AppArmor confinement is available for PHP-FPM. */
/* #undef HAVE_APPARMOR */

/* Define to 1 if you have the 'arc4random_buf' function. */
/* #undef HAVE_ARC4RANDOM_BUF */

/* Define to 1 if the system has the 'libargon2' library. */
#define HAVE_ARGON2LIB 1

/* Define to 1 if you have the <arpa/inet.h> header file. */
#define HAVE_ARPA_INET_H 1

/* Define to 1 if you have the <arpa/nameser.h> header file. */
#define HAVE_ARPA_NAMESER_H 1

/* Define to 1 if you have the `asctime_r' function. */
#define HAVE_ASCTIME_R 1

/* Define to 1 if asm goto support is available. */
#define HAVE_ASM_GOTO 1

/* Define to 1 if you have the `asprintf' function. */
#define HAVE_ASPRINTF 1

/* Define to 1 if you have the `atoll' function. */
#define HAVE_ATOLL 1

/* Define to 1 if the compiler supports the 'aligned' variable attribute. */
#define HAVE_ATTRIBUTE_ALIGNED 1

/* Define to 1 if the PHP extension 'bcmath' is available. */
#define HAVE_BCMATH 1

/* Define to 1 if you have the 'bind_textdomain_codeset' function. */
#define HAVE_BIND_TEXTDOMAIN_CODESET 1

/* Define to 1 if system has a broken 'getcwd'. */
/* #undef HAVE_BROKEN_GETCWD */

/* Define to 1 if PHP has the <main/build-defs.h> header file. */
#define HAVE_BUILD_DEFS_H 1

/* Define to 1 if compiler supports __sync_bool_compare_and_swap() a.o. */
#define HAVE_BUILTIN_ATOMIC 1

/* Define to 1 if PHP uses the bundled PCRE library. */
#define HAVE_BUNDLED_PCRE 1

/* Define to 1 if the PHP extension 'bz2' is available. */
#define HAVE_BZ2 1

/* Define to 1 if the PHP extension 'calendar' is available. */
#define HAVE_CALENDAR 1

/* Define to 1 if libzip library has the
   'zip_register_cancel_callback_with_state' function (available since 1.6.0).
   */
#define HAVE_CANCEL_CALLBACK 1

/* Define to 1 if Capstone is available. */
/* #undef HAVE_CAPSTONE */

/* Define to 1 if you have the `chroot' function. */
#define HAVE_CHROOT 1

/* Define to 1 if you have the `clearenv' function. */
#define HAVE_CLEARENV 1

/* Define to 1 if you have the <cli0cli.h> header file. */
/* #undef HAVE_CLI0CLI_H */

/* Define to 1 if you have the <cli0core.h> header file. */
/* #undef HAVE_CLI0CORE_H */

/* Define to 1 if you have the <cli0defs.h> header file. */
/* #undef HAVE_CLI0DEFS_H */

/* Define to 1 if you have the <cli0env.h> header file. */
/* #undef HAVE_CLI0ENV_H */

/* Define to 1 if you have the <cli0ext.h> header file. */
/* #undef HAVE_CLI0EXT_H */

/* Define to 1 if you have the `clock_gettime' function. */
#define HAVE_CLOCK_GETTIME 1

/* Define to 1 if you have the declaration of 'clock_gettime_nsec_np'. */
/* #undef HAVE_CLOCK_GETTIME_NSEC_NP */

/* Define to 1 if you have the 'clock_get_time' function. */
/* #undef HAVE_CLOCK_GET_TIME */

/* Define to 1 if the odbc extension uses custom ODBC installation. */
/* #undef HAVE_CODBC */

/* Define to 1 if you have the <CommonCrypto/CommonRandom.h> header file. */
/* #undef HAVE_COMMONCRYPTO_COMMONRANDOM_H */

/* Define to 1 if you have the 'copy_file_range' function. */
/* #undef HAVE_COPY_FILE_RANGE */

/* Define to 1 if '__cpuid_count' is available. */
#define HAVE_CPUID_COUNT 1

/* Define to 1 if you have the <cpuid.h> header file. */
#define HAVE_CPUID_H 1

/* Define to 1 if you have the `CreateProcess' function. */
/* #undef HAVE_CREATEPROCESS */

/* Define to 1 if you have the 'crypt' function. */
/* #undef HAVE_CRYPT */

/* Define to 1 if you have the <crypt.h> header file. */
/* #undef HAVE_CRYPT_H */

/* Define to 1 if you have the 'crypt_r' function. */
/* #undef HAVE_CRYPT_R */

/* Define to 1 if you have the `ctermid' function. */
#define HAVE_CTERMID 1

/* Define to 1 if you have the `ctime_r' function. */
#define HAVE_CTIME_R 1

/* Define to 1 if the PHP extension 'ctype' is available. */
#define HAVE_CTYPE 1

/* Define to 1 if the PHP extension 'curl' is available. */
#define HAVE_CURL 1

/* Define to 1 if the PHP extension 'dba' is available. */
#define HAVE_DBA 1

/* Define to 1 if you have the 'dcngettext' function. */
#define HAVE_DCNGETTEXT 1

/* Define to 1 if you have the declaration of `PGRES_TUPLES_CHUNK', and to 0
   if you don't. */
#define HAVE_DECL_PGRES_TUPLES_CHUNK 0

/* Define to 1 if you have the declaration of `P_ALL', and to 0 if you don't.
   */
#define HAVE_DECL_P_ALL 1

/* Define to 1 if you have the declaration of `P_JAILID', and to 0 if you
   don't. */
#define HAVE_DECL_P_JAILID 0

/* Define to 1 if you have the declaration of `P_PIDFD', and to 0 if you
   don't. */
#define HAVE_DECL_P_PIDFD 0

/* Define to 1 if you have the declaration of `P_UID', and to 0 if you don't.
   */
#define HAVE_DECL_P_UID 0

/* Define to 1 if you have the declaration of `strerror_r', and to 0 if you
   don't. */
#define HAVE_DECL_STRERROR_R 1

/* Define to 1 if you have the declaration of 'strptime'. */
#define HAVE_DECL_STRPTIME 1

/* Define to 1 if you have the declaration of `SYS_pidfd_open', and to 0 if
   you don't. */
#define HAVE_DECL_SYS_PIDFD_OPEN 0

/* Define to 1 if you have the declaration of `SYS_waitid', and to 0 if you
   don't. */
#define HAVE_DECL_SYS_WAITID 1

/* Define to 1 if you have the declaration of `tzname', and to 0 if you don't.
   */
/* #undef HAVE_DECL_TZNAME */

/* Define to 1 if you have the declaration of `WCONTINUED', and to 0 if you
   don't. */
#define HAVE_DECL_WCONTINUED 1

/* Define to 1 if you have the declaration of `WEXITED', and to 0 if you
   don't. */
#define HAVE_DECL_WEXITED 1

/* Define to 1 if you have the declaration of `WNOWAIT', and to 0 if you
   don't. */
#define HAVE_DECL_WNOWAIT 1

/* Define to 1 if you have the declaration of `WSTOPPED', and to 0 if you
   don't. */
#define HAVE_DECL_WSTOPPED 1

/* Define to 1 if you have the <dirent.h> header file. */
#define HAVE_DIRENT_H 1

/* Define to 1 if you have the <dlfcn.h> header file. */
#define HAVE_DLFCN_H 1

/* Define to 1 if you have dmalloc. */
/* #undef HAVE_DMALLOC */

/* Define to 1 if you have the 'dngettext' function. */
#define HAVE_DNGETTEXT 1

/* Define to 1 if you have the <dns.h> header file. */
/* #undef HAVE_DNS_H */

/* Define to 1 if you have the 'dns_search' function. */
/* #undef HAVE_DNS_SEARCH */

/* Define to 1 if you have the 'dn_expand' function. */
#define HAVE_DN_EXPAND 1

/* Define to 1 if you have the 'dn_skipname' function. */
#define HAVE_DN_SKIPNAME 1

/* Define to 1 if the PHP extension 'dom' is available. */
#define HAVE_DOM 1

/* Define to 1 if DTrace support is enabled. */
/* #undef HAVE_DTRACE */

/* Define to 1 if you have the `eaccess' function. */
#define HAVE_EACCESS 1

/* Define to 1 if you have the `elf_aux_info' function. */
/* #undef HAVE_ELF_AUX_INFO */

/* Define to 1 if the PHP extension 'enchant' is available. */
#define HAVE_ENCHANT 1

/* Define to 1 if Enchant library has the 'enchant_broker_set_param' function
   (available since 1.5.0 and removed in 2.x). */
#define HAVE_ENCHANT_BROKER_SET_PARAM 1

/* Define to 1 if Enchant library has the 'enchant_get_version' function
   (available since 1.6.0). */
#define HAVE_ENCHANT_GET_VERSION 1

/* Define to 1 if libzip library has encryption support (available since
   1.2.0). */
#define HAVE_ENCRYPTION 1

/* Define to 1 if system has a working epoll. */
#define HAVE_EPOLL 1

/* Define to 1 if edit/readline library has the 'rl_erase_empty_line' global
   variable. */
#define HAVE_ERASE_EMPTY_LINE 1

/* Define to 1 if the PHP extension 'exif' is available. */
#define HAVE_EXIF 1

/* Define to 1 if you have the `explicit_bzero' function. */
#define HAVE_EXPLICIT_BZERO 1

/* Define to 1 if you have the `explicit_memset' function. */
/* #undef HAVE_EXPLICIT_MEMSET */

/* Define to 1 if you have the <fcntl.h> header file. */
#define HAVE_FCNTL_H 1

/* Define to 1 if you have the `fdatasync' function. */
#define HAVE_FDATASYNC 1

/* Define to 1 if the PHP extension 'ffi' is available. */
#define HAVE_FFI 1

/* Define to 1 if libffi supports the 'FFI_FASTCALL' calling convention. */
#define HAVE_FFI_FASTCALL 1

/* Define to 1 if libffi supports the 'FFI_MS_CDECL' calling convention. */
/* #undef HAVE_FFI_MS_CDECL */

/* Define to 1 if libffi supports the 'FFI_PASCAL' calling convention. */
/* #undef HAVE_FFI_PASCAL */

/* Define to 1 if libffi supports the 'FFI_REGISTER' calling convention. */
/* #undef HAVE_FFI_REGISTER */

/* Define to 1 if libffi supports the 'FFI_STDCALL' calling convention. */
#define HAVE_FFI_STDCALL 1

/* Define to 1 if libffi supports the 'FFI_SYSV' calling convention. */
#define HAVE_FFI_SYSV 1

/* Define to 1 if libffi supports the 'FFI_THISCALL' calling convention. */
#define HAVE_FFI_THISCALL 1

/* Define to 1 if you have the `flock' function. */
#define HAVE_FLOCK 1

/* Define to 1 if flush should be called explicitly after a buffered io. */
/* #undef HAVE_FLUSHIO */

/* Define to 1 if your system has a working POSIX `fnmatch' function. */
#define HAVE_FNMATCH 1

/* Define to 1 if you have the `fopencookie' function. */
#define HAVE_FOPENCOOKIE 1

/* Define to 1 if you have the `fork' function. */
#define HAVE_FORK 1

/* Define to 1 if you have the `forkx' function. */
/* #undef HAVE_FORKX */

/* Define to 1 if you have the `fpathconf' function. */
#define HAVE_FPATHCONF 1

/* Define to 1 if PHP-FPM has ACL support. */
/* #undef HAVE_FPM_ACL */

/* Define to 1 if fpsetprec is present and usable. */
/* #undef HAVE_FPSETPREC */

/* Define to 1 if FPU control word can be manipulated by inline assembler. */
#define HAVE_FPU_INLINE_ASM_X86 1

/* Define to 1 if you have the `ftok' function. */
#define HAVE_FTOK 1

/* Define to 1 if the PHP extension 'ftp' is available. */
#define HAVE_FTP 1

/* Define to 1 if FTP over SSL is enabled. */
#define HAVE_FTP_SSL 1

/* Define to 1 if the system has the `ifunc' function attribute */
#define HAVE_FUNC_ATTRIBUTE_IFUNC 1

/* Define to 1 if the system has the `target' function attribute */
#define HAVE_FUNC_ATTRIBUTE_TARGET 1

/* Define to 1 if the system has the `visibility' function attribute */
#define HAVE_FUNC_ATTRIBUTE_VISIBILITY 1

/* Define to 1 if you have the three-argument form of gethostbyname_r(). */
/* #undef HAVE_FUNC_GETHOSTBYNAME_R_3 */

/* Define to 1 if you have the five-argument form of gethostbyname_r(). */
/* #undef HAVE_FUNC_GETHOSTBYNAME_R_5 */

/* Define to 1 if you have the six-argument form of gethostbyname_r(). */
#define HAVE_FUNC_GETHOSTBYNAME_R_6 1

/* Define to 1 if you have the `funopen' function. */
/* #undef HAVE_FUNOPEN */

/* Define to 1 if you have the `gai_strerror' function. */
#define HAVE_GAI_STRERROR 1

/* Define to 1 if the target system has support for global register variables.
   */
#define HAVE_GCC_GLOBAL_REGS 1

/* Define to 1 if GCOV code coverage is enabled. */
/* #undef HAVE_GCOV */

/* Define to 1 if gd extension has AVIF support. */
#define HAVE_GD_AVIF 1

/* Define to 1 if gd extension uses GD library bundled in PHP. */
/* #undef HAVE_GD_BUNDLED */

/* Define to 1 if gd extension has FreeType support. */
#define HAVE_GD_FREETYPE 1

/* Define to 1 if GD library has the 'gdImageGetInterpolationMethod' function.
   */
#define HAVE_GD_GET_INTERPOLATION 1

/* Define to 1 if gd extension has JPEG support. */
#define HAVE_GD_JPG 1

/* Define to 1 if GD library has the 'gdVersionString' function. */
#define HAVE_GD_LIBVERSION 1

/* Define to 1 if gd extension has PNG support. */
#define HAVE_GD_PNG 1

/* Define to 1 if gd extension has WebP support. */
#define HAVE_GD_WEBP 1

/* Define to 1 if gd extension has XPM support. */
#define HAVE_GD_XPM 1

/* Define to 1 if you have the 'getaddrinfo' function. */
#define HAVE_GETADDRINFO 1

/* Define to 1 if you have the `getcpuid' function. */
/* #undef HAVE_GETCPUID */

/* Define to 1 if you have the `getcwd' function. */
#define HAVE_GETCWD 1

/* Define to 1 if you have the `getgrgid_r' function. */
#define HAVE_GETGRGID_R 1

/* Define to 1 if you have the `getgrnam_r' function. */
#define HAVE_GETGRNAM_R 1

/* Define to 1 if you have the `getgroups' function. */
#define HAVE_GETGROUPS 1

/* Define to 1 if you have some form of gethostbyname_r(). */
#define HAVE_GETHOSTBYNAME_R 1

/* Define to 1 if you have the `gethostname' function. */
#define HAVE_GETHOSTNAME 1

/* Define to 1 if you have the 'getifaddrs' function. */
#define HAVE_GETIFADDRS 1

/* Define to 1 if you have the `getloadavg' function. */
#define HAVE_GETLOADAVG 1

/* Define to 1 if you have the `getlogin' function. */
#define HAVE_GETLOGIN 1

/* Define to 1 if you have the `getopt' function. */
#define HAVE_GETOPT 1

/* Define to 1 if you have the `getpgid' function. */
#define HAVE_GETPGID 1

/* Define to 1 if you have the `getpid' function. */
#define HAVE_GETPID 1

/* Define to 1 if you have the `getpriority' function. */
#define HAVE_GETPRIORITY 1

/* Define to 1 if you have the `getprotobyname' function. */
#define HAVE_GETPROTOBYNAME 1

/* Define to 1 if you have the `getprotobynumber' function. */
#define HAVE_GETPROTOBYNUMBER 1

/* Define to 1 if you have the `getpwnam_r' function. */
#define HAVE_GETPWNAM_R 1

/* Define to 1 if you have the `getpwuid_r' function. */
#define HAVE_GETPWUID_R 1

/* Define to 1 if you have the `getrandom' function. */
#define HAVE_GETRANDOM 1

/* Define to 1 if you have the `getrlimit' function. */
#define HAVE_GETRLIMIT 1

/* Define to 1 if you have the `getrusage' function. */
#define HAVE_GETRUSAGE 1

/* Define to 1 if you have the `getservbyname' function. */
#define HAVE_GETSERVBYNAME 1

/* Define to 1 if you have the `getservbyport' function. */
#define HAVE_GETSERVBYPORT 1

/* Define to 1 if you have the `getsid' function. */
#define HAVE_GETSID 1

/* Define to 1 if you have the `gettid' function. */
/* #undef HAVE_GETTID */

/* Define to 1 if you have the `gettimeofday' function. */
#define HAVE_GETTIMEOFDAY 1

/* Define to 1 if you have the `getwd' function. */
#define HAVE_GETWD 1

/* Define to 1 if iconv implementation is glibc. */
#define HAVE_GLIBC_ICONV 1

/* Define to 1 if you have the `glob' function. */
#define HAVE_GLOB 1

/* Define to 1 if the PHP extension 'gmp' is available. */
#define HAVE_GMP 1

/* Define to 1 if you have the `gmtime_r' function. */
#define HAVE_GMTIME_R 1

/* Define to 1 if you have the <grp.h> header file. */
#define HAVE_GRP_H 1

/* Define to 1 if edit/readline library has the 'history_list' function. */
#define HAVE_HISTORY_LIST 1

/* Define to 1 if you have the `hstrerror' function. */
#define HAVE_HSTRERROR 1

/* Define to 1 to enable copying PHP CODE pages into HUGE PAGES. */
#define HAVE_HUGE_CODE_PAGES 1

/* Define to 1 if the odbc extension uses the IBM DB2. */
/* #undef HAVE_IBMDB2 */

/* Define to 1 if iconv implementation is IBM. */
/* #undef HAVE_IBM_ICONV */

/* Define to 1 if the PHP extension 'iconv' is available. */
#define HAVE_ICONV 1

/* Define to 1 if you have the <ieeefp.h> header file. */
/* #undef HAVE_IEEEFP_H */

/* Define to 1 if you have the `if_indextoname' function. */
#define HAVE_IF_INDEXTONAME 1

/* Define to 1 if you have the `if_nametoindex' function. */
#define HAVE_IF_NAMETOINDEX 1

/* Define to 1 if you have the <immintrin.h> header file. */
#define HAVE_IMMINTRIN_H 1

/* Define to 1 if you have the `initgroups' function. */
#define HAVE_INITGROUPS 1

/* Define to 1 if you have the <inttypes.h> header file. */
#define HAVE_INTTYPES_H 1

/* Define to 1 if the odbc extension uses the iODBC. */
/* #undef HAVE_IODBC */

/* Define to 1 if you have the <iodbc.h> header file. */
/* #undef HAVE_IODBC_H */

/* Define to 1 if you have the <io.h> header file. */
/* #undef HAVE_IO_H */

/* Define to 1 if IPv6 is enabled and supported. */
#define HAVE_IPV6 1

/* Define to 1 if you have the <isqlext.h> header file. */
/* #undef HAVE_ISQLEXT_H */

/* Define to 1 if you have the <isql.h> header file. */
/* #undef HAVE_ISQL_H */

/* Define to 1 if you have the `issetugid' function. */
/* #undef HAVE_ISSETUGID */

/* Define to 1 to enable JIT. */
#define HAVE_JIT 1

/* Define to 1 if you have the `kill' function. */
#define HAVE_KILL 1

/* Define to 1 if system has a working 'kqueue' function. */
/* #undef HAVE_KQUEUE */

/* Define to 1 if you have the <langinfo.h> header file. */
#define HAVE_LANGINFO_H 1

/* Define to 1 if you have the `lchown' function. */
#define HAVE_LCHOWN 1

/* Define to 1 if the PHP extension 'ldap' is available. */
#define HAVE_LDAP 1

/* Define to 1 if you have the `ldap_control_find' function. */
#define HAVE_LDAP_CONTROL_FIND 1

/* Define to 1 if you have the `ldap_extended_operation' function. */
#define HAVE_LDAP_EXTENDED_OPERATION 1

/* Define to 1 if you have the `ldap_extended_operation_s' function. */
#define HAVE_LDAP_EXTENDED_OPERATION_S 1

/* Define to 1 if you have the `ldap_parse_extended_result' function. */
#define HAVE_LDAP_PARSE_EXTENDED_RESULT 1

/* Define to 1 if you have the `ldap_parse_reference' function. */
#define HAVE_LDAP_PARSE_REFERENCE 1

/* Define to 1 if you have the `ldap_parse_result' function. */
#define HAVE_LDAP_PARSE_RESULT 1

/* Define to 1 if you have the `ldap_passwd' function. */
#define HAVE_LDAP_PASSWD 1

/* Define to 1 if you have the `ldap_refresh_s' function. */
#define HAVE_LDAP_REFRESH_S 1

/* Define to 1 if the ldap extension has SASL support enabled. */
#define HAVE_LDAP_SASL 1

/* Define to 1 if you have the `ldap_start_tls_s' function. */
#define HAVE_LDAP_START_TLS_S 1

/* Define to 1 if you have the `ldap_whoami_s' function. */
#define HAVE_LDAP_WHOAMI_S 1

/* Define to 1 if the PHP extension 'lexbor' is available. */
#define HAVE_LEXBOR 1

/* Define to 1 if you have the 'atomic' library (-latomic). */
/* #undef HAVE_LIBATOMIC */

/* Define to 1 if you have the libavif library. */
/* #undef HAVE_LIBAVIF */

/* Define to 1 if you have the 'dl' library (-ldl). */
#define HAVE_LIBDL 1

/* Define to 1 if readline extension uses the 'libedit' library. */
/* #undef HAVE_LIBEDIT */

/* Define to 1 if the system has the Expat XML parser library. */
/* #undef HAVE_LIBEXPAT */

/* Define to 1 if you have the FreeType library. */
/* #undef HAVE_LIBFREETYPE */

/* Define to 1 if gd extension uses external system GD library. */
#define HAVE_LIBGD 1

/* Define to 1 if you have the 'libiconv' function. */
/* #undef HAVE_LIBICONV */

/* Define to 1 if you have the 'intl' library. */
#define HAVE_LIBINTL 1

/* Define to 1 if you have the libjpeg library. */
/* #undef HAVE_LIBJPEG */

/* Define to 1 if the system has the 'mm' library. */
/* #undef HAVE_LIBMM */

/* Define to 1 if you have the libpng library. */
/* #undef HAVE_LIBPNG */

/* Define to 1 if you have the <libproc.h> header file. */
/* #undef HAVE_LIBPROC_H */

/* Define to 1 if you have the <LibraryManager.h> header file. */
/* #undef HAVE_LIBRARYMANAGER_H */

/* Define to 1 if readline extension uses the 'readline' library. */
#define HAVE_LIBREADLINE 1

/* Define to 1 if you have the 'resolv' library (-lresolv). */
#define HAVE_LIBRESOLV 1

/* Define to 1 if you have the 'socket' library (-lsocket). */
/* #undef HAVE_LIBSOCKET */

/* Define to 1 if the PHP extension 'sodium' is available. */
#define HAVE_LIBSODIUMLIB 1

/* Define to 1 if you have the libwebp library. */
/* #undef HAVE_LIBWEBP */

/* Define to 1 if the PHP extension 'libxml' is available. */
#define HAVE_LIBXML 1

/* Define to 1 if libzip library has the 'zip_libzip_version' function
   (available since 1.3.1). */
#define HAVE_LIBZIP_VERSION 1

/* Define to 1 if you have the <linux/filter.h> header file. */
#define HAVE_LINUX_FILTER_H 1

/* Define to 1 if you have the <linux/if_ether.h> header file. */
#define HAVE_LINUX_IF_ETHER_H 1

/* Define to 1 if you have the <linux/if_packet.h> header file. */
#define HAVE_LINUX_IF_PACKET_H 1

/* Define to 1 if you have the <linux/sock_diag.h> header file. */
#define HAVE_LINUX_SOCK_DIAG_H 1

/* Define to 1 if you have the <linux/udp.h> header file. */
#define HAVE_LINUX_UDP_H 1

/* Define to 1 if you have the `localtime_r' function. */
#define HAVE_LOCALTIME_R 1

/* Define to 1 if the system has the type `long double'. */
#define HAVE_LONG_DOUBLE 1

/* Define to 1 if you have 'SO_LISTENQ*'. */
/* #undef HAVE_LQ_SO_LISTENQ */

/* Define to 1 if you have 'TCP_CONNECTION_INFO'. */
/* #undef HAVE_LQ_TCP_CONNECTION_INFO */

/* Define to 1 if you have 'TCP_INFO'. */
#define HAVE_LQ_TCP_INFO 1

/* Define to 1 if you have the 'mach_vm_read' function. */
/* #undef HAVE_MACH_VM_READ */

/* Define to 1 if you have the `makedev' function. */
#define HAVE_MAKEDEV 1

/* Define to 1 if mbstring has multibyte regex support enabled. */
#define HAVE_MBREGEX 1

/* Define to 1 if the PHP extension 'mbstring' is available. */
#define HAVE_MBSTRING 1

/* Define to 1 if you have the `memcntl' function. */
/* #undef HAVE_MEMCNTL */

/* Define to 1 if you have the `memfd_create' function. */
#define HAVE_MEMFD_CREATE 1

/* Define to 1 if you have the `memmem' function. */
#define HAVE_MEMMEM 1

/* Define to 1 if you have the <memory.h> header file. */
#define HAVE_MEMORY_H 1

/* Define to 1 if you have the `mempcpy' function. */
#define HAVE_MEMPCPY 1

/* Define to 1 if you have the `memrchr' function. */
#define HAVE_MEMRCHR 1

/* Define to 1 if you have the `memset_explicit' function. */
/* #undef HAVE_MEMSET_EXPLICIT */

/* Define to 1 if libzip library has 'zip_*_method_supported' functions
   (available since 1.7.0). */
#define HAVE_METHOD_SUPPORTED 1

/* Define to 1 if you have the `mkfifo' function. */
#define HAVE_MKFIFO 1

/* Define to 1 if you have the `mknod' function. */
#define HAVE_MKNOD 1

/* Define to 1 if you have the `mkstemp' function. */
#define HAVE_MKSTEMP 1

/* Define to 1 if you have the `mmap' function. */
#define HAVE_MMAP 1

/* Define to 1 if you have the `mprotect' function. */
#define HAVE_MPROTECT 1

/* Define to 1 if you have the `mremap' function. */
#define HAVE_MREMAP 1

/* Define to 1 if you have the `nanosleep' function. */
#define HAVE_NANOSLEEP 1

/* Define to 1 if you have the <netinet/in.h> header file. */
#define HAVE_NETINET_IN_H 1

/* Define to 1 if you have the <net/if.h> header file. */
#define HAVE_NET_IF_H 1

/* Define to 1 if you have the 'ngettext' function. */
#define HAVE_NGETTEXT 1

/* Define to 1 if you have the `nice' function. */
#define HAVE_NICE 1

/* Define to 1 if you have the `nl_langinfo' function. */
#define HAVE_NL_LANGINFO 1

/* Define to 1 if you have the <nmmintrin.h> header file. */
#define HAVE_NMMINTRIN_H 1

/* Define to 1 if you have the <odbc.h> header file. */
/* #undef HAVE_ODBC_H */

/* Define to 1 if you have the `openpty' function. */
#define HAVE_OPENPTY 1

/* Define to 1 to enable OpenSSL argon2 password hashing. */
/* #undef HAVE_OPENSSL_ARGON2 */

/* Define to 1 if the PHP extension 'openssl' is available. */
#define HAVE_OPENSSL_EXT 1

/* Define to 1 if the ldap extension uses the Oracle Instant Client. */
/* #undef HAVE_ORALDAP */

/* Define to 1 if you have the `pathconf' function. */
#define HAVE_PATHCONF 1

/* Define to 1 if PCRE JIT is enabled and supported. */
#define HAVE_PCRE_JIT_SUPPORT 1

/* Define to 1 if pcre has Valgrind support enabled. */
/* #undef HAVE_PCRE_VALGRIND_SUPPORT */

/* Define to 1 if the PHP extension 'pdo_pgsql' is available. */
#define HAVE_PDO_PGSQL 1

/* Define to 1 if the PHP extension 'pgsql' is available. */
#define HAVE_PGSQL 1

/* Define to 1 if libpq has the 'PQchangePassword' function (PostgreSQL 17 or
   later). */
/* #undef HAVE_PG_CHANGE_PASSWORD */

/* PostgreSQL 17 or later */
/* #undef HAVE_PG_CLOSE_STMT */

/* Define to 1 if libpq has the 'PQresultMemorySize' function (PostgreSQL 12
   or later). */
#define HAVE_PG_RESULT_MEMORY_SIZE 1

/* PostgreSQL 18 or later */
/* #undef HAVE_PG_SERVICE */

/* Define to 1 if libpq has the 'PQsetChunkedRowsMode' function (PostgreSQL 17
   or later). */
/* #undef HAVE_PG_SET_CHUNKED_ROWS_SIZE */

/* Define to 1 if libpq has the 'PQsocketPoll' function (PostgreSQL 17 or
   later). */
/* #undef HAVE_PG_SOCKET_POLL */

/* Define to 1 if the phpdbg SAPI has libedit/readline integration. */
/* #undef HAVE_PHPDBG_READLINE */

/* Define to 1 if the PHP extension 'session' is available. */
#define HAVE_PHP_SESSION 1

/* Define to 1 if you have the `poll' function. */
#define HAVE_POLL 1

/* Define to 1 if you have the <poll.h> header file. */
#define HAVE_POLL_H 1

/* Define to 1 if you have the `port_create' function. */
/* #undef HAVE_PORT_CREATE */

/* Define to 1 if the PHP extension 'posix' is available. */
#define HAVE_POSIX 1

/* Define to 1 if you have the `posix_spawn_file_actions_addchdir_np'
   function. */
/* #undef HAVE_POSIX_SPAWN_FILE_ACTIONS_ADDCHDIR_NP */

/* Define to 1 if libpq has the 'PQclosePrepared' function (PostgreSQL 17 or
   later). */
/* #undef HAVE_PQCLOSEPREPARED */

/* Define to 1 if PGVerbosity enum has PQERRORS_SQLSTATE. */
#define HAVE_PQERRORS_SQLSTATE 1

/* Define to 1 if you have the `prctl' function. */
#define HAVE_PRCTL 1

/* Define to 1 if you have the 'pread' function. */
#define HAVE_PREAD 1

/* Define to 1 if you have preserve_none support. */
/* #undef HAVE_PRESERVE_NONE */

/* Define to 1 if you have the `procctl' function. */
/* #undef HAVE_PROCCTL */

/* Define to 1 if libzip library has the
   'zip_register_progress_callback_with_state' function (available since
   1.3.0). */
#define HAVE_PROGRESS_CALLBACK 1

/* Define to 1 if you have the `pset_bind' function. */
/* #undef HAVE_PSET_BIND */

/* Define if the PS_STRINGS exists. */
/* #undef HAVE_PS_STRINGS */

/* Define to 1 if you have the `pthread_attr_getstack' function. */
#define HAVE_PTHREAD_ATTR_GETSTACK 1

/* Define to 1 if you have the `pthread_attr_get_np' function. */
/* #undef HAVE_PTHREAD_ATTR_GET_NP */

/* Define to 1 if you have the `pthread_getattr_np' function. */
#define HAVE_PTHREAD_GETATTR_NP 1

/* Define to 1 if you have the `pthread_get_stackaddr_np' function. */
/* #undef HAVE_PTHREAD_GET_STACKADDR_NP */

/* Define to 1 if you have the `pthread_jit_write_protect_np' function. */
/* #undef HAVE_PTHREAD_JIT_WRITE_PROTECT_NP */

/* Define to 1 if you have the `pthread_set_qos_class_self_np' function. */
/* #undef HAVE_PTHREAD_SET_QOS_CLASS_SELF_NP */

/* Define to 1 if you have the `pthread_stackseg_np' function. */
/* #undef HAVE_PTHREAD_STACKSEG_NP */

/* Define to 1 if you have the 'ptrace' function. */
#define HAVE_PTRACE 1

/* Define to 1 if you have the <pty.h> header file. */
#define HAVE_PTY_H 1

/* Define to 1 if you have the `putenv' function. */
#define HAVE_PUTENV 1

/* Define to 1 if you have the <pwd.h> header file. */
#define HAVE_PWD_H 1

/* Define to 1 if you have the 'pwrite' function. */
#define HAVE_PWRITE 1

/* Define to 1 if OpenSSL crypto library has the 'RAND_egd' function. */
/* #undef HAVE_RAND_EGD */

/* Define to 1 if you have the `reallocarray' function. */
#define HAVE_REALLOCARRAY 1

/* Define to 1 if you have the <resolv.h> header file. */
#define HAVE_RESOLV_H 1

/* Define to 1 if you have the 'res_ndestroy' function. */
/* #undef HAVE_RES_NDESTROY */

/* Define to 1 if you have the 'res_nsearch' function. */
#define HAVE_RES_NSEARCH 1

/* Define to 1 if you have the 'res_search' function. */
#define HAVE_RES_SEARCH 1

/* Define to 1 if you have the `rfork' function. */
/* #undef HAVE_RFORK */

/* Define to 1 if edit/readline library has the 'rl_callback_read_char'
   function. */
#define HAVE_RL_CALLBACK_READ_CHAR 1

/* Define to 1 if edit/readline library has the 'rl_completion_matches'
   function. */
#define HAVE_RL_COMPLETION_MATCHES 1

/* Define to 1 if edit/readline library has the 'rl_on_new_line' function. */
#define HAVE_RL_ON_NEW_LINE 1

/* Define to 1 if you have the `scandir' function. */
#define HAVE_SCANDIR 1

/* Define to 1 if the 'sched_getcpu' function is properly supported. */
#define HAVE_SCHED_GETCPU 1

/* Define to 1 if you have the `sched_setaffinity' function. */
#define HAVE_SCHED_SETAFFINITY 1

/* Define to 1 if system has a working 'select' function. */
#define HAVE_SELECT 1

/* Define to 1 if SELinux is available in PHP-FPM. */
/* #undef HAVE_SELINUX */

/* Define to 1 if you have the `setegid' function. */
#define HAVE_SETEGID 1

/* Define to 1 if you have the `setenv' function. */
#define HAVE_SETENV 1

/* Define to 1 if you have the `seteuid' function. */
#define HAVE_SETEUID 1

/* Define to 1 if you have the `setitimer' function. */
#define HAVE_SETITIMER 1

/* Define to 1 if you have the `setpflags' function. */
/* #undef HAVE_SETPFLAGS */

/* Define to 1 if you have the `setpriority' function. */
#define HAVE_SETPRIORITY 1

/* Define to 1 if you have the `setproctitle' function. */
/* #undef HAVE_SETPROCTITLE */

/* Define to 1 if you have the `setproctitle_fast' function. */
/* #undef HAVE_SETPROCTITLE_FAST */

/* Define to 1 if you have the `setrlimit' function. */
#define HAVE_SETRLIMIT 1

/* Define to 1 if you have the `setsid' function. */
#define HAVE_SETSID 1

/* Define to 1 if libzip library has the 'zip_file_set_mtime' function
   (available since 1.0.0). */
#define HAVE_SET_MTIME 1

/* Define to 1 if the PHP extension 'shmop' is available. */
#define HAVE_SHMOP 1

/* Define to 1 if you have the `shm_create_largepage' function. */
/* #undef HAVE_SHM_CREATE_LARGEPAGE */

/* Define to 1 if you have the SysV IPC SHM support. */
#define HAVE_SHM_IPC 1

/* Define to 1 if you have the mmap(MAP_ANON) SHM support. */
#define HAVE_SHM_MMAP_ANON 1

/* Define to 1 if you have the POSIX mmap() SHM support. */
#define HAVE_SHM_MMAP_POSIX 1

/* Define to 1 if you have the `shutdown' function. */
#define HAVE_SHUTDOWN 1

/* Define to 1 if SNMP library has the 'shutdown_snmp_logging' function. */
#define HAVE_SHUTDOWN_SNMP_LOGGING 1

/* Define to 1 if you have the `sigaction' function. */
#define HAVE_SIGACTION 1

/* Define to 1 if you have the `sigprocmask' function. */
#define HAVE_SIGPROCMASK 1

/* Define to 1 if you have the `sigtimedwait' function. */
#define HAVE_SIGTIMEDWAIT 1

/* Define to 1 if you have the `sigwaitinfo' function. */
#define HAVE_SIGWAITINFO 1

/* Define to 1 if the PHP extension 'simplexml' is available. */
#define HAVE_SIMPLEXML 1

/* Define to 1 if the PHP hash extension uses the slow SHA3 algorithm. */
/* #undef HAVE_SLOW_HASH3 */

/* Define to 1 if the PHP extension 'snmp' is available. */
#define HAVE_SNMP 1

/* Define to 1 if SNMP library has the 'usmHMAC192SHA256AuthProtocol' array.
   */
#define HAVE_SNMP_SHA256 1

/* Define to 1 if SNMP library has the 'usmHMAC384SHA512AuthProtocol' array.
   */
#define HAVE_SNMP_SHA512 1

/* Define to 1 if the PHP extension 'soap' is available. */
#define HAVE_SOAP 1

/* Define to 1 if you have the `sockatmark' function. */
#define HAVE_SOCKATMARK 1

/* Define to 1 if you have the `socketpair' function. */
#define HAVE_SOCKETPAIR 1

/* Define to 1 if the PHP extension 'sockets' is available. */
#define HAVE_SOCKETS 1

/* Define to 1 if the system has the type `socklen_t'. */
#define HAVE_SOCKLEN_T 1

/* Define to 1 if you have the <sqlcli1.h> header file. */
/* #undef HAVE_SQLCLI1_H */

/* Define to 1 if you have the <sqlext.h> header file. */
#define HAVE_SQLEXT_H 1

/* Define to 1 if the PHP extension 'sqlite3' is available. */
#define HAVE_SQLITE3 1

/* Define to 1 if SQLite library has the 'sqlite3_close_v2' function. */
#define HAVE_SQLITE3_CLOSE_V2 1

/* Define to 1 if SQLite library was compiled with the
   SQLITE_ENABLE_COLUMN_METADATA and has the 'sqlite3_column_table_name'
   function. */
#define HAVE_SQLITE3_COLUMN_TABLE_NAME 1

/* Define to 1 if SQLite library has the 'sqlite3_errstr' function. */
#define HAVE_SQLITE3_ERRSTR 1

/* Define to 1 if SQLite library has the 'sqlite3_expanded_sql' function. */
#define HAVE_SQLITE3_EXPANDED_SQL 1

/* Define to 1 if you have the <sqltypes.h> header file. */
#define HAVE_SQLTYPES_H 1

/* Define to 1 if you have the <sqlucode.h> header file. */
#define HAVE_SQLUCODE_H 1

/* Define to 1 if you have the <sqlunix.h> header file. */
/* #undef HAVE_SQLUNIX_H */

/* Define to 1 if you have the <sql.h> header file. */
#define HAVE_SQL_H 1

/* Define to 1 if you have the `statfs' function. */
#define HAVE_STATFS 1

/* Define to 1 if you have the `statvfs' function. */
#define HAVE_STATVFS 1

/* Define to 1 if you have the <stdint.h> header file. */
#define HAVE_STDINT_H 1

/* Define to 1 if you have the <stdlib.h> header file. */
#define HAVE_STDLIB_H 1

/* Define to 1 if you have the `std_syslog' function. */
/* #undef HAVE_STD_SYSLOG */

/* Define to 1 if you have the `strcasecmp' function. */
#define HAVE_STRCASECMP 1

/* Define to 1 if you have the `strcasestr' function. */
#define HAVE_STRCASESTR 1

/* Define to 1 if you have the `strerror_r' function. */
#define HAVE_STRERROR_R 1

/* Define to 1 if you have the <strings.h> header file. */
#define HAVE_STRINGS_H 1

/* Define to 1 if you have the <string.h> header file. */
#define HAVE_STRING_H 1

/* Define to 1 if you have the `strlcat' function. */
/* #undef HAVE_STRLCAT */

/* Define to 1 if you have the `strlcpy' function. */
/* #undef HAVE_STRLCPY */

/* Define to 1 if you have the `strndup' function. */
#define HAVE_STRNDUP 1

/* Define to 1 if you have the `strnlen' function. */
#define HAVE_STRNLEN 1

/* Define to 1 if you have the `strptime' function. */
#define HAVE_STRPTIME 1

/* Define to 1 if you have the `strtok_r' function. */
#define HAVE_STRTOK_R 1

/* Define to 1 if you have the `strtoll' function. */
#define HAVE_STRTOLL 1

/* Define to 1 if the system has the type `struct cmsgcred'. */
/* #undef HAVE_STRUCT_CMSGCRED */

/* Define to 1 if the system has the type `struct flock'. */
#define HAVE_STRUCT_FLOCK 1

/* Define to 1 if `sa_len' is a member of `struct sockaddr'. */
/* #undef HAVE_STRUCT_SOCKADDR_SA_LEN */

/* Define to 1 if the system has the type `struct sockaddr_storage'. */
#define HAVE_STRUCT_SOCKADDR_STORAGE 1

/* Define to 1 if `ss_family' is a member of `struct sockaddr_storage'. */
#define HAVE_STRUCT_SOCKADDR_STORAGE_SS_FAMILY 1

/* Define to 1 if `sun_len' is a member of `struct sockaddr_un'. */
/* #undef HAVE_STRUCT_SOCKADDR_UN_SUN_LEN */

/* Define to 1 if `st_blksize' is a member of `struct stat'. */
#define HAVE_STRUCT_STAT_ST_BLKSIZE 1

/* Define to 1 if `st_blocks' is a member of `struct stat'. */
#define HAVE_STRUCT_STAT_ST_BLOCKS 1

/* Define to 1 if `st_rdev' is a member of `struct stat'. */
#define HAVE_STRUCT_STAT_ST_RDEV 1

/* Define to 1 if `tm_gmtoff' is a member of `struct tm'. */
#define HAVE_STRUCT_TM_TM_GMTOFF 1

/* Define to 1 if `tm_zone' is a member of `struct tm'. */
#define HAVE_STRUCT_TM_TM_ZONE 1

/* Define to 1 if the system has the type `struct ucred'. */
#define HAVE_STRUCT_UCRED 1

/* Define to 1 if `domainname' is a member of `struct utsname'. */
#define HAVE_STRUCT_UTSNAME_DOMAINNAME 1

/* Define to 1 if your `struct stat' has `st_blocks'. Deprecated, use
   `HAVE_STRUCT_STAT_ST_BLOCKS' instead. */
#define HAVE_ST_BLOCKS 1

/* Define to 1 if you have the `symlink' function. */
#define HAVE_SYMLINK 1

/* Define to 1 if you have the `syscall' function. */
#define HAVE_SYSCALL 1

/* Define to 1 if you have the <sysexits.h> header file. */
#define HAVE_SYSEXITS_H 1

/* Define to 1 if you have the <syslog.h> header file. */
#define HAVE_SYSLOG_H 1

/* Define to 1 if FPM has systemd integration. */
#define HAVE_SYSTEMD 1

/* Define if system timezone data is used */
/* #undef HAVE_SYSTEM_TZDATA */

/* Define for location of system timezone data */
/* #undef HAVE_SYSTEM_TZDATA_PREFIX */

/* Define to 1 if the PHP extension 'sysvmsg' is available. */
#define HAVE_SYSVMSG 1

/* Define to 1 if the PHP extension 'sysvsem' is available. */
#define HAVE_SYSVSEM 1

/* Define to 1 if the PHP extension 'sysvshm' is available. */
#define HAVE_SYSVSHM 1

/* Define to 1 if you have the <sys/acl.h> header file. */
/* #undef HAVE_SYS_ACL_H */

/* Define to 1 if you have the <sys/file.h> header file. */
#define HAVE_SYS_FILE_H 1

/* Define to 1 if you have the <sys/ioctl.h> header file. */
#define HAVE_SYS_IOCTL_H 1

/* Define to 1 if you have the <sys/ipc.h> header file. */
#define HAVE_SYS_IPC_H 1

/* Define to 1 if you have the <sys/loadavg.h> header file. */
/* #undef HAVE_SYS_LOADAVG_H */

/* Define to 1 if you have the <sys/mman.h> header file. */
#define HAVE_SYS_MMAN_H 1

/* Define to 1 if you have the <sys/mount.h> header file. */
#define HAVE_SYS_MOUNT_H 1

/* Define to 1 if you have the <sys/param.h> header file. */
#define HAVE_SYS_PARAM_H 1

/* Define to 1 if you have the <sys/poll.h> header file. */
#define HAVE_SYS_POLL_H 1

/* Define to 1 if you have the <sys/pstat.h> header file. */
/* #undef HAVE_SYS_PSTAT_H */

/* Define to 1 if you have the <sys/resource.h> header file. */
#define HAVE_SYS_RESOURCE_H 1

/* Define to 1 if you have the <sys/select.h> header file. */
#define HAVE_SYS_SELECT_H 1

/* Define to 1 if you have the <sys/socket.h> header file. */
#define HAVE_SYS_SOCKET_H 1

/* Define to 1 if you have the <sys/sockio.h> header file. */
/* #undef HAVE_SYS_SOCKIO_H */

/* Define to 1 if you have the <sys/statfs.h> header file. */
#define HAVE_SYS_STATFS_H 1

/* Define to 1 if you have the <sys/statvfs.h> header file. */
#define HAVE_SYS_STATVFS_H 1

/* Define to 1 if you have the <sys/stat.h> header file. */
#define HAVE_SYS_STAT_H 1

/* Define to 1 if you have the <sys/sysexits.h> header file. */
/* #undef HAVE_SYS_SYSEXITS_H */

/* Define to 1 if you have the <sys/sysmacros.h> header file. */
#define HAVE_SYS_SYSMACROS_H 1

/* Define to 1 if you have the <sys/time.h> header file. */
#define HAVE_SYS_TIME_H 1

/* Define to 1 if you have the <sys/types.h> header file. */
#define HAVE_SYS_TYPES_H 1

/* Define to 1 if you have the <sys/uio.h> header file. */
#define HAVE_SYS_UIO_H 1

/* Define to 1 if you have the <sys/utsname.h> header file. */
#define HAVE_SYS_UTSNAME_H 1

/* Define to 1 if you have the <sys/vfs.h> header file. */
#define HAVE_SYS_VFS_H 1

/* Define to 1 if you have the <sys/wait.h> header file. */
#define HAVE_SYS_WAIT_H 1

/* Define to 1 if the PHP extension 'tidy' is available. */
#define HAVE_TIDY 1

/* Define to 1 if you have the <tidybuffio.h> header file. */
#define HAVE_TIDYBUFFIO_H 1

/* Define to 1 if tidyOptGetCategory is available. */
#define HAVE_TIDYOPTGETCATEGORY 1

/* Define to 1 if Tidy library has the 'tidyOptGetDoc' function. */
#define HAVE_TIDYOPTGETDOC 1

/* Define to 1 if you have the <tidyp.h> header file. */
/* #undef HAVE_TIDYP_H */

/* Define to 1 if Tidy library has the 'tidyReleaseDate' function. */
#define HAVE_TIDYRELEASEDATE 1

/* Define to 1 if you have the <tidy.h> header file. */
#define HAVE_TIDY_H 1

/* Define to 1 if you have the <timelib_config.h> header file. */
#define HAVE_TIMELIB_CONFIG_H 1

/* Define to 1 if you have the `times' function. */
#define HAVE_TIMES 1

/* Define to 1 if you have the <tmmintrin.h> header file. */
#define HAVE_TMMINTRIN_H 1

/* Define to 1 if your `struct tm' has `tm_zone'. Deprecated, use
   `HAVE_STRUCT_TM_TM_ZONE' instead. */
#define HAVE_TM_ZONE 1

/* Define to 1 if you have a working 'ttyname_r' function. */
#define HAVE_TTYNAME_R 1

/* Define to 1 if you don't have `tm_zone' but do have the external array
   `tzname'. */
/* #undef HAVE_TZNAME */

/* Define to 1 if you have the `tzset' function. */
#define HAVE_TZSET 1

/* Define to 1 if you have the <udbcext.h> header file. */
/* #undef HAVE_UDBCEXT_H */

/* Define to 1 if the system has the type `union semun'. */
/* #undef HAVE_UNION_SEMUN */

/* Define to 1 if you have the <unistd.h> header file. */
#define HAVE_UNISTD_H 1

/* Define to 1 if the odbc extension uses the unixODBC. */
#define HAVE_UNIXODBC 1

/* Define to 1 if you have the <unix.h> header file. */
/* #undef HAVE_UNIX_H */

/* Define to 1 if you have the `unsetenv' function. */
#define HAVE_UNSETENV 1

/* Define to 1 if you have the `unshare' function. */
#define HAVE_UNSHARE 1

/* Define to 1 if the PHP extension 'odbc' is available. */
#define HAVE_UODBC 1

/* Define to 1 if faulting on write-protected memory support can be compiled
   for userfaultfd. */
#define HAVE_USERFAULTFD_WRITEFAULT 1

/* Define to 1 if you have the `usleep' function. */
#define HAVE_USLEEP 1

/* Define to 1 if you have the `utime' function. */
#define HAVE_UTIME 1

/* Define to 1 if you have the `utimes' function. */
#define HAVE_UTIMES 1

/* Define to 1 if you have the <utime.h> header file. */
#define HAVE_UTIME_H 1

/* Define to 1 if Valgrind is enabled and supported. */
/* #undef HAVE_VALGRIND */

/* Define to 1 if you have the <valgrind/cachegrind.h> header file. */
/* #undef HAVE_VALGRIND_CACHEGRIND_H */

/* Define to 1 if you have the `vasprintf' function. */
#define HAVE_VASPRINTF 1

/* Define to 1 if you have the `wait3' function. */
#define HAVE_WAIT3 1

/* Define to 1 if you have the `wait4' function. */
#define HAVE_WAIT4 1

/* Define to 1 if you have the `wait6' function. */
/* #undef HAVE_WAIT6 */

/* Define to 1 if you have the `waitid' function. */
#define HAVE_WAITID 1

/* Define to 1 if you have the `WIFCONTINUED' function. */
#define HAVE_WIFCONTINUED 1

/* Define to 1 if you have the <wmmintrin.h> header file. */
#define HAVE_WMMINTRIN_H 1

/* Define to 1 if the PHP extension 'xml' is available. */
#define HAVE_XML 1

/* Define to 1 if the PHP extension 'xmlreader' is available. */
#define HAVE_XMLREADER 1

/* Define to 1 if the PHP extension 'xmlwriter' is available. */
#define HAVE_XMLWRITER 1

/* Define to 1 if you have the xpm library. */
/* #undef HAVE_XPM */

/* Define to 1 if the PHP extension 'xsl' is available. */
#define HAVE_XSL 1

/* Define to 1 if the system has the EXSLT extension library for XSLT. */
#define HAVE_XSL_EXSLT 1

/* Define to 1 if the PHP extension 'zip' is available. */
#define HAVE_ZIP 1

/* Define to 1 if the PHP extension 'zlib' is available. */
#define HAVE_ZLIB 1

/* Define to 1 if _controlfp is present and usable. */
/* #undef HAVE__CONTROLFP */

/* Define to 1 if _controlfp_s is present and usable. */
/* #undef HAVE__CONTROLFP_S */

/* Define to 1 if _FPU_SETCW is present and usable. */
#define HAVE__FPU_SETCW 1

/* Define to 1 if you have the '__atomic_exchange_1' function. */
/* #undef HAVE___ATOMIC_EXCHANGE_1 */

/* Define to 1 if 'iconv()' is aliased to 'libiconv()'. */
/* #undef ICONV_ALIASED_LIBICONV */

/* Define to 1 if iconv has broken IGNORE. */
#define ICONV_BROKEN_IGNORE 1

/* Define to 1 if GD library has JIS-mapped Japanese font support. */
/* #undef JISX0208 */

/* Define the main Lexbor version */
#define LEXBOR_VERSION "2.5.0"

/* The LMDB handler header file. */
/* #undef LMDB_INCLUDE_FILE */

/* Define to 1 to load the OpenSSL legacy algorithm provider in addition to
   the default provider. */
/* #undef LOAD_OPENSSL_LEGACY_PROVIDER */

/* Define to the sub-directory where libtool stores uninstalled libraries. */
#define LT_OBJDIR ".libs/"

/* Define to 1 if `major', `minor', and `makedev' are declared in <mkdev.h>.
   */
/* #undef MAJOR_IN_MKDEV */

/* Define to 1 if `major', `minor', and `makedev' are declared in
   <sysmacros.h>. */
#define MAJOR_IN_SYSMACROS 1

/* Define to 1 if 'asctime_r' declaration is missing. */
/* #undef MISSING_ASCTIME_R_DECL */

/* Define to 1 if 'ctime_r' declaration is missing. */
/* #undef MISSING_CTIME_R_DECL */

/* Define to 1 if 'gmtime_r' declaration is missing. */
/* #undef MISSING_GMTIME_R_DECL */

/* Define to 1 if 'localtime_r' declaration is missing. */
/* #undef MISSING_LOCALTIME_R_DECL */

/* Define to 1 if 'strtok_r' declaration is missing. */
/* #undef MISSING_STRTOK_R_DECL */

/* Define to 1 if mysqlnd has compressed protocol support. */
#define MYSQLND_COMPRESSION_ENABLED 1

/* Define to 1 if mysqlnd extended SSL is enabled through a system library. */
#define MYSQLND_HAVE_SSL 1

/* Define to 1 if mysqlnd core SSL is enabled. */
#define MYSQLND_SSL_SUPPORTED 1

/* The NDBM handler header file. */
/* #undef NDBM_INCLUDE_FILE */

/* Define to the address where bug reports for this package should be sent. */
/* #undef PACKAGE_BUGREPORT */

/* Define to the full name of this package. */
/* #undef PACKAGE_NAME */

/* Define to the full name and version of this package. */
/* #undef PACKAGE_STRING */

/* Define to the one symbol short name of this package. */
/* #undef PACKAGE_TARNAME */

/* Define to the home page for this package. */
/* #undef PACKAGE_URL */

/* Define to the version of this package. */
/* #undef PACKAGE_VERSION */

/* Number of bits in non-UTF mode for PCRE library. */
#define PCRE2_CODE_UNIT_WIDTH 8

/* The MySQL Unix socket location as defined by 'mysql_config' for use with
   the pdo_mysql extension. */
/* #undef PDO_MYSQL_UNIX_ADDR */

/* Define to the ODBC driver or driver manager value. */
#define PDO_ODBC_TYPE "unixODBC"

/* Define to 1 if SQLite library was compiled with the
   SQLITE_OMIT_LOAD_EXTENSION and does not have the extension support with the
   'sqlite3_load_extension' function. For usage in the pdo_sqlite. See
   https://www.sqlite.org/compile.html. */
/* #undef PDO_SQLITE_OMIT_LOAD_EXTENSION */

/* Define to 1 if the pdo_mysql extension uses mysqlnd. */

/* Define to 1 if phar extension has native OpenSSL support. */
/* #undef PHAR_HAVE_OPENSSL */

/* The build architecture. */
/* #undef PHP_BUILD_ARCH */

/* The compiler used for the PHP build. */
/* #undef PHP_BUILD_COMPILER */

/* The PHP build provider information. */
/* #undef PHP_BUILD_PROVIDER */

/* The system that PHP was built on. */
#define PHP_BUILD_SYSTEM "Linux buildfarm02-new.corp.cloudlinux.com 4.18.0-553.8.1.el8_10.x86_64 #1 SMP Tue Jul 2 07:26:33 EDT 2024 x86_64 x86_64 x86_64 GNU/Linux"

/* Define to 1 if your system has fork/vfork/CreateProcess. */
#define PHP_CAN_SUPPORT_PROC_OPEN 1

/* Define to 1 if the compiler supports AVX-512. */
#define PHP_HAVE_AVX512_SUPPORTS 1

/* Define to 1 if the compiler supports AVX-512 VBMI. */
#define PHP_HAVE_AVX512_VBMI_SUPPORTS 1

/* Define to 1 if the compiler supports '__builtin_clz'. */
#define PHP_HAVE_BUILTIN_CLZ 1

/* Define to 1 if the compiler supports '__builtin_clzl'. */
#define PHP_HAVE_BUILTIN_CLZL 1

/* Define to 1 if the compiler supports '__builtin_clzll'. */
#define PHP_HAVE_BUILTIN_CLZLL 1

/* Define to 1 if the compiler supports '__builtin_cpu_init'. */
#define PHP_HAVE_BUILTIN_CPU_INIT 1

/* Define to 1 if the compiler supports '__builtin_cpu_supports'. */
#define PHP_HAVE_BUILTIN_CPU_SUPPORTS 1

/* Define to 1 if the compiler supports '__builtin_ctzl'. */
#define PHP_HAVE_BUILTIN_CTZL 1

/* Define to 1 if the compiler supports '__builtin_ctzll'. */
#define PHP_HAVE_BUILTIN_CTZLL 1

/* Define to 1 if the compiler supports '__builtin_expect'. */
#define PHP_HAVE_BUILTIN_EXPECT 1

/* Define to 1 if the compiler supports '__builtin_frame_address'. */
#define PHP_HAVE_BUILTIN_FRAME_ADDRESS 1

/* Define to 1 if the compiler supports '__builtin_saddll_overflow'. */
#define PHP_HAVE_BUILTIN_SADDLL_OVERFLOW 1

/* Define to 1 if the compiler supports '__builtin_saddl_overflow'. */
#define PHP_HAVE_BUILTIN_SADDL_OVERFLOW 1

/* Define to 1 if the compiler supports '__builtin_smulll_overflow'. */
#define PHP_HAVE_BUILTIN_SMULLL_OVERFLOW 1

/* Define to 1 if the compiler supports '__builtin_smull_overflow'. */
#define PHP_HAVE_BUILTIN_SMULL_OVERFLOW 1

/* Define to 1 if the compiler supports '__builtin_ssubll_overflow'. */
#define PHP_HAVE_BUILTIN_SSUBLL_OVERFLOW 1

/* Define to 1 if the compiler supports '__builtin_ssubl_overflow'. */
#define PHP_HAVE_BUILTIN_SSUBL_OVERFLOW 1

/* Define to 1 if the compiler supports '__builtin_unreachable'. */
#define PHP_HAVE_BUILTIN_UNREACHABLE 1

/* Define to 1 if the compiler supports '__builtin_usub_overflow'. */
#define PHP_HAVE_BUILTIN_USUB_OVERFLOW 1

/* Define to 1 if you have HP-UX 10.x.-style reentrant time functions. */
/* #undef PHP_HPUX_TIME_R */

/* The iconv implementation. */
#define PHP_ICONV_IMPL "glibc"

/* Define to 1 you have IRIX-style reentrant time functions. */
/* #undef PHP_IRIX_TIME_R */

/* Define to 1 if mhash support is enabled. */
#define PHP_MHASH_BC 1

/* The MySQL Unix socket location. */
#define PHP_MYSQL_UNIX_SOCK_ADDR "/var/lib/mysql/mysql.sock"

/* The compile options that PHP odbc extension was built with. */
#define PHP_ODBC_CFLAGS "-I/usr/include"

/* The linker flags that PHP odbc extension was built with. */
#define PHP_ODBC_LFLAGS "-L/usr/lib64"

/* The libraries linker flags that PHP odbc extension was built with. */
#define PHP_ODBC_LIBS "-lodbc"

/* The ODBC library used in the PHP odbc extension. */
#define PHP_ODBC_TYPE "unixODBC"

/* Define to 1 if oniguruma has an invalid entry for KOI8 encoding. */
#define PHP_ONIG_BAD_KOI8_ENTRY 1

/* The 'uname' output. */
#define PHP_OS "Linux"

/* Define to 1 if 'pread' declaration with 'off64_t' is missing. */
/* #undef PHP_PREAD_64 */

/* Define to 1 if 'pwrite' declaration with 'off64_t' is missing. */
/* #undef PHP_PWRITE_64 */

/* Define to 1 if PHP uses its own SIGCHLD handler, and to 0 if not. */
#define PHP_SIGCHILD 0

/* Define to 1 if PHP will use the system glob function instead of php_glob.
   */
/* #undef PHP_SYSTEM_GLOB */

/* The 'uname -a' output. */
#define PHP_UNAME "Linux buildfarm02-new.corp.cloudlinux.com 4.18.0-553.8.1.el8_10.x86_64 #1 SMP Tue Jul 2 07:26:33 EDT 2024 x86_64 x86_64 x86_64 GNU/Linux"

/* Define to 1 if PHP uses its own crypt_r, and to 0 if using the external
   crypt library. */
#define PHP_USE_PHP_CRYPT_R 1

/* Define to 1 if 'dlopen()' uses the 'RTLD_NOW' mode flag instead of
   'RTLD_LAZY'. */
/* #undef PHP_USE_RTLD_NOW */

/* Define to 1 if 'write(2)' works. */
#define PHP_WRITE_STDOUT 1

/* Define to the /proc/pid/mem interface filename value. */
#define PROC_MEM_FILE "mem"

/* The QDBM handler header file. */
/* #undef QDBM_INCLUDE_FILE */

/* The size of `int', as computed by sizeof. */
#define SIZEOF_INT 4

/* The size of `long', as computed by sizeof. */
#define SIZEOF_LONG 8

/* The size of `long long', as computed by sizeof. */
#define SIZEOF_LONG_LONG 8

/* The size of `off_t', as computed by sizeof. */
#define SIZEOF_OFF_T 8

/* The size of `size_t', as computed by sizeof. */
#define SIZEOF_SIZE_T 8

/* Define to 1 if SQLite library was compiled with the
   SQLITE_OMIT_LOAD_EXTENSION and does not have the extension support with the
   'sqlite3_load_extension' function. For usage in the sqlite3 PHP extension.
   See https://www.sqlite.org/compile.html. */
/* #undef SQLITE_OMIT_LOAD_EXTENSION */

/* If using the C implementation of alloca, define if you know the
   direction of stack growth for your system; otherwise it will be
   automatically deduced at runtime.
	STACK_DIRECTION > 0 => grows toward higher addresses
	STACK_DIRECTION < 0 => grows toward lower addresses
	STACK_DIRECTION = 0 => direction of growth unknown */
/* #undef STACK_DIRECTION */

/* Define to 1 if you have the ANSI C header files. */
#define STDC_HEADERS 1

/* Define to 1 if strerror_r returns char *. */
#define STRERROR_R_CHAR_P 1

/* The Tokyo Cabinet handler header file. */
/* #undef TCADB_INCLUDE_FILE */

/* Define to 1 if your <sys/time.h> declares `struct tm'. */
/* #undef TM_IN_SYS_TIME */

/* Define to 1 for enabling ANSI support of uriparser. */
#define URI_ENABLE_ANSI 1

/* Define to 1 for disabling unicode support of uriparser. */
#define URI_NO_UNICODE 1

/* Define to 1 if gd extension has JIS-mapped Japanese font support. */
/* #undef USE_GD_JISX0208 */

/* Define to 1 if cross-process locking is required by 'accept()'. */
/* #undef USE_LOCKING */

/* Define to 1 to use system default cipher list instead of the hardcoded
   value in OpenSSL. */
/* #undef USE_OPENSSL_SYSTEM_CIPHERS */

/* Enable extensions on AIX 3, Interix.  */
#ifndef _ALL_SOURCE
# define _ALL_SOURCE 1
#endif
/* Enable GNU extensions on systems that have them.  */
#ifndef _GNU_SOURCE
# define _GNU_SOURCE 1
#endif
/* Enable threading extensions on Solaris.  */
#ifndef _POSIX_PTHREAD_SEMANTICS
# define _POSIX_PTHREAD_SEMANTICS 1
#endif
/* Enable extensions on HP NonStop.  */
#ifndef _TANDEM_SOURCE
# define _TANDEM_SOURCE 1
#endif
/* Enable general extensions on Solaris.  */
#ifndef __EXTENSIONS__
# define __EXTENSIONS__ 1
#endif


/* Define if processor uses big-endian word. */
/* #undef WORDS_BIGENDIAN */

/* Define to 1 if checking the stack limit is supported. */
#define ZEND_CHECK_STACK_LIMIT 1

/* Define to 1 if debugging is enabled, and to 0 if not. */
#define ZEND_DEBUG 0

/* Define to 1 if Zend fiber uses ucontext instead of boost context. */
/* #undef ZEND_FIBER_UCONTEXT */

/* Define to 1 if Zend max execution timers are supported and enabled. */
/* #undef ZEND_MAX_EXECUTION_TIMERS */

/* Number of bytes for the ZEND_MM alignment. */
#define ZEND_MM_ALIGNMENT (size_t)8

/* Number of bytes for the logarithmic ZEND_MM alignment. */
#define ZEND_MM_ALIGNMENT_LOG2 (size_t)3

/* Define to 1 if ZEND_MM needs 8-byte realignment, and to 0 if not. */
#define ZEND_MM_NEED_EIGHT_BYTE_REALIGNMENT 0

/* Define to 1 if Zend signal handling is supported and enabled. */
#define ZEND_SIGNALS 1

/* Define to 1 if thread safety (ZTS) is enabled. */
/* #undef ZTS */

/* Define to 1 if on MINIX. */
/* #undef _MINIX */

/* Define to 2 if the system does not provide POSIX.1 features except with
   this defined. */
/* #undef _POSIX_1_SOURCE */

/* Define to 1 if you need to in order for `stat' and other things to work. */
/* #undef _POSIX_SOURCE */

/* */
/* #undef _XOPEN_SOURCE */

/* Define to 1 when using musl libc. */
/* #undef __MUSL__ */

/* Define to `int' if <sys/types.h> doesn't define. */
/* #undef gid_t */

/* Define to `unsigned int' if <sys/types.h> does not define. */
/* #undef size_t */

/* Define to `int' if <sys/types.h> doesn't define. */
/* #undef uid_t */


#include <stdlib.h>

#ifdef HAVE_SYS_TYPES_H
# include <sys/types.h>
#endif

#ifdef HAVE_SYS_SELECT_H
#include <sys/select.h>
#endif

#include <string.h>

#endif /* PHP_CONFIG_H */

main/php.h000064400000027064151730543040006443 0ustar00/*
   +----------------------------------------------------------------------+
   | Copyright (c) The PHP Group                                          |
   +----------------------------------------------------------------------+
   | This source file is subject to version 3.01 of the PHP license,      |
   | that is bundled with this package in the file LICENSE, and is        |
   | available through the world-wide-web at the following url:           |
   | https://www.php.net/license/3_01.txt                                 |
   | If you did not receive a copy of the PHP license and are unable to   |
   | obtain it through the world-wide-web, please send a note to          |
   | license@php.net so we can mail you a copy immediately.               |
   +----------------------------------------------------------------------+
   | Authors: Andi Gutmans <andi@php.net>                                 |
   |          Zeev Suraski <zeev@php.net>                                 |
   +----------------------------------------------------------------------+
 */

#ifndef PHP_H
#define PHP_H

#ifdef HAVE_DMALLOC
#include <dmalloc.h>
#endif

#define PHP_API_VERSION 20250925
#define PHP_HAVE_STREAMS
#define YYDEBUG 0
#define PHP_DEFAULT_CHARSET "UTF-8"

#include "php_version.h"
#include "zend.h"
#include "zend_sort.h"
#include "php_compat.h"

#include "zend_API.h"

#define php_sprintf sprintf

/* Operating system family definition */
#ifdef PHP_WIN32
# define PHP_OS_FAMILY			"Windows"
#elif defined(BSD) || defined(__DragonFly__) || defined(__FreeBSD__) || defined(__NetBSD__) || defined(__OpenBSD__)
# define PHP_OS_FAMILY			"BSD"
#elif defined(__APPLE__) || defined(__MACH__)
# define PHP_OS_FAMILY			"Darwin"
#elif defined(__sun__)
# define PHP_OS_FAMILY			"Solaris"
#elif defined(__linux__)
# define PHP_OS_FAMILY			"Linux"
#else
# define PHP_OS_FAMILY			"Unknown"
#endif

/* PHP's DEBUG value must match Zend's ZEND_DEBUG value */
#undef PHP_DEBUG
#define PHP_DEBUG ZEND_DEBUG

#ifdef PHP_WIN32
#	include "tsrm_win32.h"
#	ifdef PHP_EXPORTS
#		define PHPAPI __declspec(dllexport)
#	else
#		define PHPAPI __declspec(dllimport)
#	endif
#	define PHP_DIR_SEPARATOR '\\'
#	define PHP_EOL "\r\n"
#else
#	if defined(__GNUC__) && __GNUC__ >= 4
#		define PHPAPI __attribute__ ((visibility("default")))
#	else
#		define PHPAPI
#	endif
#	define PHP_DIR_SEPARATOR '/'
#	define PHP_EOL "\n"
#endif

/* Windows specific defines */
#ifdef PHP_WIN32
# define PHP_PROG_SENDMAIL		"Built in mailer"
# define WIN32_LEAN_AND_MEAN
# define NOOPENFILE

# include <io.h>
# include <malloc.h>
# include <direct.h>
# include <stdlib.h>
# include <stdio.h>
# include <stdarg.h>
# include <sys/types.h>
# include <process.h>

typedef int uid_t;
typedef int gid_t;
typedef char * caddr_t;
typedef int pid_t;

# define M_TWOPI        (M_PI * 2.0)
# define off_t			_off_t

# define lstat(x, y)	php_sys_lstat(x, y)
# define chdir(path)	_chdir(path)
# define mkdir(a, b)	_mkdir(a)
# define rmdir(a)		_rmdir(a)
# define getpid			_getpid
# define php_sleep(t)	SleepEx(t*1000, TRUE)

# ifndef getcwd
#  define getcwd(a, b)	_getcwd(a, b)
# endif
#endif

#include <assert.h>

#ifdef HAVE_UNIX_H
#include <unix.h>
#endif

#ifdef HAVE_ALLOCA_H
#include <alloca.h>
#endif

#ifdef HAVE_BUILD_DEFS_H
#include <build-defs.h>
#endif

/*
 * This is a fast version of strlcpy which should be used, if you
 * know the size of the destination buffer and if you know
 * the length of the source string.
 *
 * size is the allocated number of bytes of dst
 * src_size is the number of bytes excluding the NUL of src
 */

#define PHP_STRLCPY(dst, src, size, src_size)	\
	{											\
		size_t php_str_len;						\
												\
		if (src_size >= size)					\
			php_str_len = size - 1;				\
		else									\
			php_str_len = src_size;				\
		memcpy(dst, src, php_str_len);			\
		dst[php_str_len] = '\0';				\
	}

#ifndef HAVE_STRLCPY
BEGIN_EXTERN_C()
PHPAPI size_t php_strlcpy(char *dst, const char *src, size_t siz);
END_EXTERN_C()
#undef strlcpy
#define strlcpy php_strlcpy
#define HAVE_STRLCPY 1
#define USE_STRLCPY_PHP_IMPL 1
#endif

#ifndef HAVE_STRLCAT
BEGIN_EXTERN_C()
PHPAPI size_t php_strlcat(char *dst, const char *src, size_t siz);
END_EXTERN_C()
#undef strlcat
#define strlcat php_strlcat
#define HAVE_STRLCAT 1
#define USE_STRLCAT_PHP_IMPL 1
#endif

#ifndef HAVE_EXPLICIT_BZERO
BEGIN_EXTERN_C()
PHPAPI void php_explicit_bzero(void *dst, size_t siz);
END_EXTERN_C()
#undef explicit_bzero
#define explicit_bzero php_explicit_bzero
#endif

BEGIN_EXTERN_C()
PHPAPI int php_safe_bcmp(const zend_string *a, const zend_string *b);
END_EXTERN_C()

#ifndef HAVE_STRTOK_R
BEGIN_EXTERN_C()
char *strtok_r(char *s, const char *delim, char **last);
END_EXTERN_C()
#endif

#ifndef HAVE_SOCKLEN_T
# ifdef PHP_WIN32
typedef int socklen_t;
# else
typedef unsigned int socklen_t;
# endif
#endif

#define CREATE_MUTEX(a, b)
#define SET_MUTEX(a)
#define FREE_MUTEX(a)

#include <stdlib.h>
#include <ctype.h>
#ifdef HAVE_UNISTD_H
#include <unistd.h>
#endif

#include <stdarg.h>

#include "zend_hash.h"
#include "zend_alloc.h"
#include "zend_stack.h"
#include <string.h>

#ifdef HAVE_PWD_H
# ifdef PHP_WIN32
#include "win32/param.h"
# else
#include <pwd.h>
#include <sys/param.h>
# endif
#endif

#include <limits.h>

#ifndef INT_MAX
#define INT_MAX 2147483647
#endif

#ifndef INT_MIN
#define INT_MIN (- INT_MAX - 1)
#endif

#define PHP_DOUBLE_MAX_LENGTH ZEND_DOUBLE_MAX_LENGTH

#define PHP_GCC_VERSION ZEND_GCC_VERSION
#define PHP_ATTRIBUTE_MALLOC ZEND_ATTRIBUTE_MALLOC
#define PHP_ATTRIBUTE_FORMAT ZEND_ATTRIBUTE_FORMAT

BEGIN_EXTERN_C()
#include "snprintf.h"
END_EXTERN_C()
#include "spprintf.h"

#define EXEC_INPUT_BUF 4096

#define PHP_MIME_TYPE "application/x-httpd-php"

/* macros */
#define STR_PRINT(str)	((str)?(str):"")

#ifndef MAXPATHLEN
# ifdef PHP_WIN32
#  include "win32/ioutil.h"
#  define MAXPATHLEN PHP_WIN32_IOUTIL_MAXPATHLEN
# elif PATH_MAX
#  define MAXPATHLEN PATH_MAX
# elif defined(MAX_PATH)
#  define MAXPATHLEN MAX_PATH
# else
#  define MAXPATHLEN 256    /* Should be safe for any weird systems that do not define it */
# endif
#endif

#define php_ignore_value(x) ZEND_IGNORE_VALUE(x)

/* global variables */
#ifndef PHP_WIN32
#define php_sleep sleep
extern char **environ;
#endif	/* ifndef PHP_WIN32 */

extern const char php_build_date[];

#ifdef PHP_PWRITE_64
ssize_t pwrite(int, void *, size_t, off64_t);
#endif

#ifdef PHP_PREAD_64
ssize_t pread(int, void *, size_t, off64_t);
#endif

BEGIN_EXTERN_C()
void phperror(char *error);
PHPAPI size_t php_write(void *buf, size_t size);
PHPAPI size_t php_printf(const char *format, ...) PHP_ATTRIBUTE_FORMAT(printf, 1, 2);
PHPAPI size_t php_printf_unchecked(const char *format, ...);
PHPAPI bool php_during_module_startup(void);
PHPAPI bool php_during_module_shutdown(void);
PHPAPI bool php_get_module_initialized(void);
#ifdef HAVE_SYSLOG_H
#include "php_syslog.h"
#define php_log_err(msg) php_log_err_with_severity(msg, LOG_NOTICE)
#else
#define php_log_err(msg) php_log_err_with_severity(msg, 5)
#endif
PHPAPI ZEND_COLD void php_log_err_with_severity(const char *log_message, int syslog_type_int);
int Debug(char *format, ...) PHP_ATTRIBUTE_FORMAT(printf, 1, 2);
int cfgparse(void);
END_EXTERN_C()

#define php_error zend_error
#define error_handling_t zend_error_handling_t

BEGIN_EXTERN_C()
static inline ZEND_ATTRIBUTE_DEPRECATED void php_set_error_handling(error_handling_t error_handling, zend_class_entry *exception_class)
{
	zend_replace_error_handling(error_handling, exception_class, NULL);
}
static inline ZEND_ATTRIBUTE_DEPRECATED void php_std_error_handling(void) {}

PHPAPI ZEND_COLD void php_verror(const char *docref, const char *params, int type, const char *format, va_list args) PHP_ATTRIBUTE_FORMAT(printf, 4, 0);

/* PHPAPI void php_error(int type, const char *format, ...); */
PHPAPI ZEND_COLD void php_error_docref(const char *docref, int type, const char *format, ...)
	PHP_ATTRIBUTE_FORMAT(printf, 3, 4);
PHPAPI ZEND_COLD void php_error_docref_unchecked(const char *docref, int type, const char *format, ...);
PHPAPI ZEND_COLD void php_error_docref1(const char *docref, const char *param1, int type, const char *format, ...)
	PHP_ATTRIBUTE_FORMAT(printf, 4, 5);
PHPAPI ZEND_COLD void php_error_docref2(const char *docref, const char *param1, const char *param2, int type, const char *format, ...)
	PHP_ATTRIBUTE_FORMAT(printf, 5, 6);
#ifdef PHP_WIN32
PHPAPI ZEND_COLD void php_win32_docref1_from_error(DWORD error, const char *param1);
PHPAPI ZEND_COLD void php_win32_docref2_from_error(DWORD error, const char *param1, const char *param2);
#endif
END_EXTERN_C()

#define zenderror phperror
#define zendlex phplex

#define phpparse zendparse
#define phprestart zendrestart
#define phpin zendin

#define php_memnstr zend_memnstr
#define php_memnistr zend_memnistr

/* functions */
BEGIN_EXTERN_C()
PHPAPI extern int (*php_register_internal_extensions_func)(void);
PHPAPI int php_register_internal_extensions(void);
PHPAPI void php_register_pre_request_shutdown(void (*func)(void *), void *userdata);
PHPAPI void php_com_initialize(void);
PHPAPI char *php_get_current_user(void);

PHPAPI const char *php_get_internal_encoding(void);
PHPAPI const char *php_get_input_encoding(void);
PHPAPI const char *php_get_output_encoding(void);
PHPAPI extern void (*php_internal_encoding_changed)(void);
END_EXTERN_C()

/* PHP-named Zend macro wrappers */
#define PHP_FN					ZEND_FN
#define PHP_MN					ZEND_MN
#define PHP_NAMED_FUNCTION		ZEND_NAMED_FUNCTION
#define PHP_FUNCTION			ZEND_FUNCTION
#define PHP_METHOD  			ZEND_METHOD

#define PHP_RAW_NAMED_FE ZEND_RAW_NAMED_FE
#define PHP_NAMED_FE	ZEND_NAMED_FE
#define PHP_FE			ZEND_FE
#define PHP_DEP_FE      ZEND_DEP_FE
#define PHP_FALIAS		ZEND_FALIAS
#define PHP_DEP_FALIAS	ZEND_DEP_FALIAS
#define PHP_ME          ZEND_ME
#define PHP_MALIAS      ZEND_MALIAS
#define PHP_ABSTRACT_ME ZEND_ABSTRACT_ME
#define PHP_ME_MAPPING  ZEND_ME_MAPPING
#define PHP_FE_END      ZEND_FE_END

#define PHP_MODULE_STARTUP_N	ZEND_MODULE_STARTUP_N
#define PHP_MODULE_SHUTDOWN_N	ZEND_MODULE_SHUTDOWN_N
#define PHP_MODULE_ACTIVATE_N	ZEND_MODULE_ACTIVATE_N
#define PHP_MODULE_DEACTIVATE_N	ZEND_MODULE_DEACTIVATE_N
#define PHP_MODULE_INFO_N		ZEND_MODULE_INFO_N

#define PHP_MODULE_STARTUP_D	ZEND_MODULE_STARTUP_D
#define PHP_MODULE_SHUTDOWN_D	ZEND_MODULE_SHUTDOWN_D
#define PHP_MODULE_ACTIVATE_D	ZEND_MODULE_ACTIVATE_D
#define PHP_MODULE_DEACTIVATE_D	ZEND_MODULE_DEACTIVATE_D
#define PHP_MODULE_INFO_D		ZEND_MODULE_INFO_D

/* Compatibility macros */
#define PHP_MINIT		ZEND_MODULE_STARTUP_N
#define PHP_MSHUTDOWN	ZEND_MODULE_SHUTDOWN_N
#define PHP_RINIT		ZEND_MODULE_ACTIVATE_N
#define PHP_RSHUTDOWN	ZEND_MODULE_DEACTIVATE_N
#define PHP_MINFO		ZEND_MODULE_INFO_N
#define PHP_GINIT		ZEND_GINIT
#define PHP_GSHUTDOWN	ZEND_GSHUTDOWN

#define PHP_MINIT_FUNCTION		ZEND_MODULE_STARTUP_D
#define PHP_MSHUTDOWN_FUNCTION	ZEND_MODULE_SHUTDOWN_D
#define PHP_RINIT_FUNCTION		ZEND_MODULE_ACTIVATE_D
#define PHP_RSHUTDOWN_FUNCTION	ZEND_MODULE_DEACTIVATE_D
#define PHP_MINFO_FUNCTION		ZEND_MODULE_INFO_D
#define PHP_GINIT_FUNCTION		ZEND_GINIT_FUNCTION
#define PHP_GSHUTDOWN_FUNCTION	ZEND_GSHUTDOWN_FUNCTION

#define PHP_MODULE_GLOBALS		ZEND_MODULE_GLOBALS


/* Output support */
#include "main/php_output.h"


#include "php_streams.h"
#include "php_memory_streams.h"
#include "fopen_wrappers.h"


/* Virtual current working directory support */
#include "zend_virtual_cwd.h"

#include "zend_constants.h"

/* connection status states */
#define PHP_CONNECTION_NORMAL  0
#define PHP_CONNECTION_ABORTED 1
#define PHP_CONNECTION_TIMEOUT 2

#include "php_reentrancy.h"

/* the following typedefs are deprecated and will be removed in PHP
 * 9.0; use the standard C99 types instead */
typedef bool zend_bool;
typedef intptr_t zend_intptr_t;
typedef uintptr_t zend_uintptr_t;

#endif
main/fopen_wrappers.h000064400000004221151730543040010674 0ustar00/*
   +----------------------------------------------------------------------+
   | Copyright (c) The PHP Group                                          |
   +----------------------------------------------------------------------+
   | This source file is subject to version 3.01 of the PHP license,      |
   | that is bundled with this package in the file LICENSE, and is        |
   | available through the world-wide-web at the following url:           |
   | https://www.php.net/license/3_01.txt                                 |
   | If you did not receive a copy of the PHP license and are unable to   |
   | obtain it through the world-wide-web, please send a note to          |
   | license@php.net so we can mail you a copy immediately.               |
   +----------------------------------------------------------------------+
   | Author: Jim Winstead <jimw@php.net>                                  |
   +----------------------------------------------------------------------+
 */

#ifndef FOPEN_WRAPPERS_H
#define FOPEN_WRAPPERS_H

BEGIN_EXTERN_C()
#include "php_globals.h"
#include "php_ini.h"

PHPAPI int php_fopen_primary_script(zend_file_handle *file_handle);
PHPAPI char *expand_filepath(const char *filepath, char *real_path);
PHPAPI char *expand_filepath_ex(const char *filepath, char *real_path, const char *relative_to, size_t relative_to_len);
PHPAPI char *expand_filepath_with_mode(const char *filepath, char *real_path, const char *relative_to, size_t relative_to_len, int use_realpath);

PHPAPI int php_check_open_basedir(const char *path);
PHPAPI int php_check_open_basedir_ex(const char *path, int warn);
PHPAPI int php_check_specific_open_basedir(const char *basedir, const char *path);

/* OPENBASEDIR_CHECKPATH(filename) to ease merge between 6.x and 5.x */
#define OPENBASEDIR_CHECKPATH(filename) php_check_open_basedir(filename)

PHPAPI zend_string *php_resolve_path(const char *filename, size_t filename_len, const char *path);

PHPAPI FILE *php_fopen_with_path(const char *filename, const char *mode, const char *path, zend_string **opened_path);

PHPAPI char *php_strip_url_passwd(char *path);

PHPAPI ZEND_INI_MH(OnUpdateBaseDir);
END_EXTERN_C()

#endif
main/php_compat.h000064400000047163151730543040010010 0ustar00/*
  +----------------------------------------------------------------------+
  | Copyright (c) The PHP Group                                          |
  +----------------------------------------------------------------------+
  | This source file is subject to version 3.01 of the PHP license,      |
  | that is bundled with this package in the file LICENSE, and is        |
  | available through the world-wide-web at the following url:           |
  | https://www.php.net/license/3_01.txt                                 |
  | If you did not receive a copy of the PHP license and are unable to   |
  | obtain it through the world-wide-web, please send a note to          |
  | license@php.net so we can mail you a copy immediately.               |
  +----------------------------------------------------------------------+
  | Author:                                                              |
  +----------------------------------------------------------------------+
*/

#ifndef PHP_COMPAT_H
#define PHP_COMPAT_H

#ifdef PHP_WIN32
#include "config.w32.h"
#else
#include <php_config.h>
#endif

#if defined(HAVE_BUNDLED_PCRE) || !defined(PHP_VERSION)
#define pcre2_jit_callback_8 php_pcre2_jit_callback
#define pcre2_callout_enumerate_8 php_pcre2_callout_enumerate
#define pcre2_code_copy_8 php_pcre2_code_copy
#define pcre2_code_copy_with_tables_8 php_pcre2_code_copy_with_tables
#define pcre2_code_free_8 php_pcre2_code_free
#define pcre2_compile_8 php_pcre2_compile
#define pcre2_compile_context_copy_8 php_pcre2_compile_context_copy
#define pcre2_compile_context_create_8 php_pcre2_compile_context_create
#define pcre2_compile_context_free_8 php_pcre2_compile_context_free
#define pcre2_config_8 php_pcre2_config
#define pcre2_convert_context_copy_8 php_pcre2_convert_context_copy
#define pcre2_convert_context_create_8 php_pcre2_convert_context_create
#define pcre2_convert_context_free_8 php_pcre2_convert_context_free
#define pcre2_dfa_match_8 php_pcre2_dfa_match
#define pcre2_general_context_copy_8 php_pcre2_general_context_copy
#define pcre2_general_context_create_8 php_pcre2_general_context_create
#define pcre2_general_context_free_8 php_pcre2_general_context_free
#define pcre2_get_error_message_8 php_pcre2_get_error_message
#define pcre2_get_mark_8 php_pcre2_get_mark
#define pcre2_get_ovector_pointer_8 php_pcre2_get_ovector_pointer
#define pcre2_get_ovector_count_8 php_pcre2_get_ovector_count
#define pcre2_get_startchar_8 php_pcre2_get_startchar
#define pcre2_jit_compile_8 php_pcre2_jit_compile
#define pcre2_jit_match_8 php_pcre2_jit_match
#define pcre2_jit_free_unused_memory_8 php_pcre2_jit_free_unused_memory
#define pcre2_jit_stack_assign_8 php_pcre2_jit_stack_assign
#define pcre2_jit_stack_create_8 php_pcre2_jit_stack_create
#define pcre2_jit_stack_free_8 php_pcre2_jit_stack_free
#define pcre2_maketables_8 php_pcre2_maketables
#define pcre2_match_8 php_pcre2_match
#define pcre2_match_context_copy_8 php_pcre2_match_context_copy
#define pcre2_match_context_create_8 php_pcre2_match_context_create
#define pcre2_match_context_free_8 php_pcre2_match_context_free
#define pcre2_match_data_create_8 php_pcre2_match_data_create
#define pcre2_match_data_create_from_pattern_8 php_pcre2_match_data_create_from_pattern
#define pcre2_match_data_free_8 php_pcre2_match_data_free
#define pcre2_pattern_info_8 php_pcre2_pattern_info
#define pcre2_serialize_decode_8 php_pcre2_serialize_decode
#define pcre2_serialize_encode_8 php_pcre2_serialize_encode
#define pcre2_serialize_free_8 php_pcre2_serialize_free
#define pcre2_serialize_get_number_of_codes_8 php_pcre2_serialize_get_number_of_codes
#define pcre2_set_bsr_8 php_pcre2_set_bsr
#define pcre2_set_callout_8 php_pcre2_set_callout
#define pcre2_set_character_tables_8 php_pcre2_set_character_tables
#define pcre2_set_compile_extra_options_8 php_pcre2_set_compile_extra_options
#define pcre2_set_compile_recursion_guard_8 php_pcre2_set_compile_recursion_guard
#define pcre2_set_depth_limit_8 php_pcre2_set_depth_limit
#define pcre2_set_glob_escape_8 php_pcre2_set_glob_escape
#define pcre2_set_glob_separator_8 php_pcre2_set_glob_separator
#define pcre2_set_heap_limit_8 php_pcre2_set_heap_limit
#define pcre2_set_match_limit_8 php_pcre2_set_match_limit
#define pcre2_set_max_pattern_length_8 php_pcre2_set_max_pattern_length
#define pcre2_set_newline_8 php_pcre2_set_newline
#define pcre2_set_parens_nest_limit_8 php_pcre2_set_parens_nest_limit
#define pcre2_set_offset_limit_8 php_pcre2_set_offset_limit
#define pcre2_substitute_8 php_pcre2_substitute
#define pcre2_substring_copy_byname_8 php_pcre2_substring_copy_byname
#define pcre2_substring_copy_bynumber_8 php_pcre2_substring_copy_bynumber
#define pcre2_substring_free_8 php_pcre2_substring_free
#define pcre2_substring_get_byname_8 php_pcre2_substring_get_byname
#define pcre2_substring_get_bynumber_8 php_pcre2_substring_get_bynumber
#define pcre2_substring_length_byname_8 php_pcre2_substring_length_byname
#define pcre2_substring_length_bynumber_8 php_pcre2_substring_length_bynumber
#define pcre2_substring_list_get_8 php_pcre2_substring_list_get
#define pcre2_substring_list_free_8 php_pcre2_substring_list_free
#define pcre2_substring_nametable_scan_8 php_pcre2_substring_nametable_scan
#define pcre2_substring_number_from_name_8 php_pcre2_substring_number_from_name
#define pcre2_set_recursion_limit_8 php_pcre2_set_recursion_limit
#define pcre2_set_recursion_memory_management_8 php_pcre2_set_recursion_memory_management
#endif

#define lookup				php_lookup
#define hashTableInit		php_hashTableInit
#define hashTableDestroy	php_hashTableDestroy
#define hashTableIterInit	php_hashTableIterInit
#define hashTableIterNext	php_hashTableIterNext

#if defined(HAVE_LIBXML) && (defined(HAVE_XML) || defined(HAVE_XMLRPC)) && !defined(HAVE_LIBEXPAT)
#define XML_DefaultCurrent php_XML_DefaultCurrent
#define XML_ErrorString php_XML_ErrorString
#define XML_ExpatVersion php_XML_ExpatVersion
#define XML_ExpatVersionInfo php_XML_ExpatVersionInfo
#define XML_ExternalEntityParserCreate php_XML_ExternalEntityParserCreate
#define XML_GetBase php_XML_GetBase
#define XML_GetBuffer php_XML_GetBuffer
#define XML_GetCurrentByteCount php_XML_GetCurrentByteCount
#define XML_GetCurrentByteIndex php_XML_GetCurrentByteIndex
#define XML_GetCurrentColumnNumber php_XML_GetCurrentColumnNumber
#define XML_GetCurrentLineNumber php_XML_GetCurrentLineNumber
#define XML_GetErrorCode php_XML_GetErrorCode
#define XML_GetIdAttributeIndex php_XML_GetIdAttributeIndex
#define XML_GetInputContext php_XML_GetInputContext
#define XML_GetSpecifiedAttributeCount php_XML_GetSpecifiedAttributeCount
#define XmlGetUtf16InternalEncodingNS php_XmlGetUtf16InternalEncodingNS
#define XmlGetUtf16InternalEncoding php_XmlGetUtf16InternalEncoding
#define XmlGetUtf8InternalEncodingNS php_XmlGetUtf8InternalEncodingNS
#define XmlGetUtf8InternalEncoding php_XmlGetUtf8InternalEncoding
#define XmlInitEncoding php_XmlInitEncoding
#define XmlInitEncodingNS php_XmlInitEncodingNS
#define XmlInitUnknownEncoding php_XmlInitUnknownEncoding
#define XmlInitUnknownEncodingNS php_XmlInitUnknownEncodingNS
#define XML_ParseBuffer php_XML_ParseBuffer
#define XML_Parse php_XML_Parse
#define XML_ParserCreate_MM php_XML_ParserCreate_MM
#define XML_ParserCreateNS php_XML_ParserCreateNS
#define XML_ParserCreate php_XML_ParserCreate
#define XML_ParserFree php_XML_ParserFree
#define XmlParseXmlDecl php_XmlParseXmlDecl
#define XmlParseXmlDeclNS php_XmlParseXmlDeclNS
#define XmlPrologStateInitExternalEntity php_XmlPrologStateInitExternalEntity
#define XmlPrologStateInit php_XmlPrologStateInit
#define XML_SetAttlistDeclHandler php_XML_SetAttlistDeclHandler
#define XML_SetBase php_XML_SetBase
#define XML_SetCdataSectionHandler php_XML_SetCdataSectionHandler
#define XML_SetCharacterDataHandler php_XML_SetCharacterDataHandler
#define XML_SetCommentHandler php_XML_SetCommentHandler
#define XML_SetDefaultHandlerExpand php_XML_SetDefaultHandlerExpand
#define XML_SetDefaultHandler php_XML_SetDefaultHandler
#define XML_SetDoctypeDeclHandler php_XML_SetDoctypeDeclHandler
#define XML_SetElementDeclHandler php_XML_SetElementDeclHandler
#define XML_SetElementHandler php_XML_SetElementHandler
#define XML_SetEncoding php_XML_SetEncoding
#define XML_SetEndCdataSectionHandler php_XML_SetEndCdataSectionHandler
#define XML_SetEndDoctypeDeclHandler php_XML_SetEndDoctypeDeclHandler
#define XML_SetEndElementHandler php_XML_SetEndElementHandler
#define XML_SetEndNamespaceDeclHandler php_XML_SetEndNamespaceDeclHandler
#define XML_SetEntityDeclHandler php_XML_SetEntityDeclHandler
#define XML_SetExternalEntityRefHandlerArg php_XML_SetExternalEntityRefHandlerArg
#define XML_SetExternalEntityRefHandler php_XML_SetExternalEntityRefHandler
#define XML_SetNamespaceDeclHandler php_XML_SetNamespaceDeclHandler
#define XML_SetNotationDeclHandler php_XML_SetNotationDeclHandler
#define XML_SetNotStandaloneHandler php_XML_SetNotStandaloneHandler
#define XML_SetParamEntityParsing php_XML_SetParamEntityParsing
#define XML_SetProcessingInstructionHandler php_XML_SetProcessingInstructionHandler
#define XML_SetReturnNSTriplet php_XML_SetReturnNSTriplet
#define XML_SetStartCdataSectionHandler php_XML_SetStartCdataSectionHandler
#define XML_SetStartDoctypeDeclHandler php_XML_SetStartDoctypeDeclHandler
#define XML_SetStartElementHandler php_XML_SetStartElementHandler
#define XML_SetStartNamespaceDeclHandler php_XML_SetStartNamespaceDeclHandler
#define XML_SetUnknownEncodingHandler php_XML_SetUnknownEncodingHandler
#define XML_SetUnparsedEntityDeclHandler php_XML_SetUnparsedEntityDeclHandler
#define XML_SetUserData php_XML_SetUserData
#define XML_SetXmlDeclHandler php_XML_SetXmlDeclHandler
#define XmlSizeOfUnknownEncoding php_XmlSizeOfUnknownEncoding
#define XML_UseParserAsHandlerArg php_XML_UseParserAsHandlerArg
#define XmlUtf16Encode php_XmlUtf16Encode
#define XmlUtf8Encode php_XmlUtf8Encode
#define XML_FreeContentModel php_XML_FreeContentModel
#define XML_MemMalloc php_XML_MemMalloc
#define XML_MemRealloc php_XML_MemRealloc
#define XML_MemFree php_XML_MemFree
#define XML_UseForeignDTD php_XML_UseForeignDTD
#define XML_GetFeatureList php_XML_GetFeatureList
#define XML_ParserReset php_XML_ParserReset

#ifdef HAVE_GD_BUNDLED
#define any2eucjp php_gd_any2eucjp
#define createwbmp php_gd_createwbmp
#define empty_output_buffer php_gd_empty_output_buffer
#define fill_input_buffer php_gd_fill_input_buffer
#define freewbmp php_gd_freewbmp
#define gdAlphaBlend php_gd_gdAlphaBlend
#define gdCompareInt php_gd_gdCompareInt
#define gdCosT php_gd_gdCosT
#define gdCtxPrintf php_gd_gdCtxPrintf
#define gdDPExtractData php_gd_gdDPExtractData
#define gdFontGetGiant php_gd_gdFontGetGiant
#define gdFontGetLarge php_gd_gdFontGetLarge
#define gdFontGetMediumBold php_gd_gdFontGetMediumBold
#define gdFontGetSmall php_gd_gdFontGetSmall
#define gdFontGetTiny php_gd_gdFontGetTiny
#define gdFontGiant php_gd_gdFontGiant
#define gdFontGiantData php_gd_gdFontGiantData
#define gdFontGiantRep php_gd_gdFontGiantRep
#define gdFontLarge php_gd_gdFontLarge
#define gdFontLargeData php_gd_gdFontLargeData
#define gdFontLargeRep php_gd_gdFontLargeRep
#define gdFontMediumBold php_gd_gdFontMediumBold
#define gdFontMediumBoldData php_gd_gdFontMediumBoldData
#define gdFontMediumBoldRep php_gd_gdFontMediumBoldRep
#define gdFontSmall php_gd_gdFontSmall
#define gdFontSmallData php_gd_gdFontSmallData
#define gdFontSmallRep php_gd_gdFontSmallRep
#define gdFontTiny php_gd_gdFontTiny
#define gdFontTinyData php_gd_gdFontTinyData
#define gdFontTinyRep php_gd_gdFontTinyRep
#define gdGetBuf php_gd_gdGetBuf
#define gdGetByte php_gd_gdGetByte
#define gdGetC php_gd_gdGetC
#define _gdGetColors php_gd__gdGetColors
#define gd_getin php_gd_gd_getin
#define gdGetInt php_gd_gdGetInt
#define gdGetWord php_gd_gdGetWord
#define gdImageAABlend php_gd_gdImageAABlend
#define gdImageAALine php_gd_gdImageAALine
#define gdImageAlphaBlending php_gd_gdImageAlphaBlending
#define gdImageAntialias php_gd_gdImageAntialias
#define gdImageArc php_gd_gdImageArc
#define gdImageBrightness php_gd_gdImageBrightness
#define gdImageChar php_gd_gdImageChar
#define gdImageCharUp php_gd_gdImageCharUp
#define gdImageColor php_gd_gdImageColor
#define gdImageColorAllocate php_gd_gdImageColorAllocate
#define gdImageColorAllocateAlpha php_gd_gdImageColorAllocateAlpha
#define gdImageColorClosest php_gd_gdImageColorClosest
#define gdImageColorClosestAlpha php_gd_gdImageColorClosestAlpha
#define gdImageColorClosestHWB php_gd_gdImageColorClosestHWB
#define gdImageColorDeallocate php_gd_gdImageColorDeallocate
#define gdImageColorExact php_gd_gdImageColorExact
#define gdImageColorExactAlpha php_gd_gdImageColorExactAlpha
#define gdImageColorMatch php_gd_gdImageColorMatch
#define gdImageColorResolve php_gd_gdImageColorResolve
#define gdImageColorResolveAlpha php_gd_gdImageColorResolveAlpha
#define gdImageColorTransparent php_gd_gdImageColorTransparent
#define gdImageCompare php_gd_gdImageCompare
#define gdImageContrast php_gd_gdImageContrast
#define gdImageConvolution php_gd_gdImageConvolution
#define gdImageCopy php_gd_gdImageCopy
#define gdImageCopyMerge php_gd_gdImageCopyMerge
#define gdImageCopyMergeGray php_gd_gdImageCopyMergeGray
#define gdImageCopyResampled php_gd_gdImageCopyResampled
#define gdImageCopyResized php_gd_gdImageCopyResized
#define gdImageCreate php_gd_gdImageCreate
#define gdImageCreateFromGd php_gd_gdImageCreateFromGd
#define gdImageCreateFromGd2 php_gd_gdImageCreateFromGd2
#define gdImageCreateFromGd2Ctx php_gd_gdImageCreateFromGd2Ctx
#define gdImageCreateFromGd2Part php_gd_gdImageCreateFromGd2Part
#define gdImageCreateFromGd2PartCtx php_gd_gdImageCreateFromGd2PartCtx
#define gdImageCreateFromGd2PartPtr php_gd_gdImageCreateFromGd2PartPtr
#define gdImageCreateFromGd2Ptr php_gd_gdImageCreateFromGd2Ptr
#define gdImageCreateFromGdCtx php_gd_gdImageCreateFromGdCtx
#define gdImageCreateFromGdPtr php_gd_gdImageCreateFromGdPtr
#define gdImageCreateFromGif php_gd_gdImageCreateFromGif
#define gdImageCreateFromGifCtx php_gd_gdImageCreateFromGifCtx
#define gdImageCreateFromGifSource php_gd_gdImageCreateFromGifSource
#define gdImageCreateFromJpeg php_gd_gdImageCreateFromJpeg
#define gdImageCreateFromJpegCtx php_gd_gdImageCreateFromJpegCtx
#define gdImageCreateFromJpegPtr php_gd_gdImageCreateFromJpegPtr
#define gdImageCreateFromPng php_gd_gdImageCreateFromPng
#define gdImageCreateFromPngCtx php_gd_gdImageCreateFromPngCtx
#define gdImageCreateFromPngPtr php_gd_gdImageCreateFromPngPtr
#define gdImageCreateFromPngSource php_gd_gdImageCreateFromPngSource
#define gdImageCreateFromWBMP php_gd_gdImageCreateFromWBMP
#define gdImageCreateFromWBMPCtx php_gd_gdImageCreateFromWBMPCtx
#define gdImageCreateFromWBMPPtr php_gd_gdImageCreateFromWBMPPtr
#define gdImageCreateFromXbm php_gd_gdImageCreateFromXbm
#define gdImageCreatePaletteFromTrueColor php_gd_gdImageCreatePaletteFromTrueColor
#define gdImageCreateTrueColor php_gd_gdImageCreateTrueColor
#define gdImageDashedLine php_gd_gdImageDashedLine
#define gdImageDestroy php_gd_gdImageDestroy
#define gdImageEdgeDetectQuick php_gd_gdImageEdgeDetectQuick
#define gdImageEllipse php_gd_gdImageEllipse
#define gdImageEmboss php_gd_gdImageEmboss
#define gdImageFill php_gd_gdImageFill
#define gdImageFilledArc php_gd_gdImageFilledArc
#define gdImageFilledEllipse php_gd_gdImageFilledEllipse
#define gdImageFilledPolygon php_gd_gdImageFilledPolygon
#define gdImageFilledRectangle php_gd_gdImageFilledRectangle
#define _gdImageFillTiled php_gd__gdImageFillTiled
#define gdImageFillToBorder php_gd_gdImageFillToBorder
#define gdImageGaussianBlur php_gd_gdImageGaussianBlur
#define gdImageGd php_gd_gdImageGd
#define gdImageGd2 php_gd_gdImageGd2
#define gdImageGd2Ptr php_gd_gdImageGd2Ptr
#define gdImageGdPtr php_gd_gdImageGdPtr
#define gdImageGetClip php_gd_gdImageGetClip
#define gdImageGetPixel php_gd_gdImageGetPixel
#define gdImageGetTrueColorPixel php_gd_gdImageGetTrueColorPixel
#define gdImageGif php_gd_gdImageGif
#define gdImageGifCtx php_gd_gdImageGifCtx
#define gdImageGifPtr php_gd_gdImageGifPtr
#define gdImageGrayScale php_gd_gdImageGrayScale
#define gdImageInterlace php_gd_gdImageInterlace
#define gdImageJpeg php_gd_gdImageJpeg
#define gdImageJpegCtx php_gd_gdImageJpegCtx
#define gdImageJpegPtr php_gd_gdImageJpegPtr
#define gdImageLine php_gd_gdImageLine
#define gdImageMeanRemoval php_gd_gdImageMeanRemoval
#define gdImageNegate php_gd_gdImageNegate
#define gdImagePaletteCopy php_gd_gdImagePaletteCopy
#define gdImagePng php_gd_gdImagePng
#define gdImagePngCtx php_gd_gdImagePngCtx
#define gdImagePngCtxEx php_gd_gdImagePngCtxEx
#define gdImagePngEx php_gd_gdImagePngEx
#define gdImagePngPtr php_gd_gdImagePngPtr
#define gdImagePngPtrEx php_gd_gdImagePngPtrEx
#define gdImagePngToSink php_gd_gdImagePngToSink
#define gdImagePolygon php_gd_gdImagePolygon
#define gdImageRectangle php_gd_gdImageRectangle
#define gdImageRotate php_gd_gdImageRotate
#define gdImageRotate180 php_gd_gdImageRotate180
#define gdImageRotate270 php_gd_gdImageRotate270
#define gdImageRotate45 php_gd_gdImageRotate45
#define gdImageRotate90 php_gd_gdImageRotate90
#define gdImageSaveAlpha php_gd_gdImageSaveAlpha
#define gdImageSelectiveBlur php_gd_gdImageSelectiveBlur
#define gdImageSetAntiAliased php_gd_gdImageSetAntiAliased
#define gdImageSetAntiAliasedDontBlend php_gd_gdImageSetAntiAliasedDontBlend
#define gdImageSetBrush php_gd_gdImageSetBrush
#define gdImageSetClip php_gd_gdImageSetClip
#define gdImageSetPixel php_gd_gdImageSetPixel
#define gdImageSetStyle php_gd_gdImageSetStyle
#define gdImageSetThickness php_gd_gdImageSetThickness
#define gdImageSetTile php_gd_gdImageSetTile
#define gdImageSkewX php_gd_gdImageSkewX
#define gdImageSkewY php_gd_gdImageSkewY
#define gdImageSmooth php_gd_gdImageSmooth
#define gdImageString php_gd_gdImageString
#define gdImageString16 php_gd_gdImageString16
#define gdImageStringFT php_gd_gdImageStringFT
#define gdImageStringFTEx php_gd_gdImageStringFTEx
#define gdImageStringTTF php_gd_gdImageStringTTF
#define gdImageStringUp php_gd_gdImageStringUp
#define gdImageStringUp16 php_gd_gdImageStringUp16
#define gdImageTrueColorToPalette php_gd_gdImageTrueColorToPalette
#define gdImageWBMP php_gd_gdImageWBMP
#define gdImageWBMPCtx php_gd_gdImageWBMPCtx
#define gdImageWBMPPtr php_gd_gdImageWBMPPtr
#define gdImageXbmCtx php_gd_gdImageXbmCtx
#define gdNewDynamicCtx php_gd_gdNewDynamicCtx
#define gdNewDynamicCtxEx php_gd_gdNewDynamicCtxEx
#define gdNewFileCtx php_gd_gdNewFileCtx
#define gdNewSSCtx php_gd_gdNewSSCtx
#define gdPutBuf php_gd_gdPutBuf
#define gdPutC php_gd_gdPutC
#define _gdPutColors php_gd__gdPutColors
#define gdPutInt php_gd_gdPutInt
#define gd_putout php_gd_gd_putout
#define gdPutWord php_gd_gdPutWord
#define gdSeek php_gd_gdSeek
#define gdSinT php_gd_gdSinT
#define gd_strtok_r php_gd_gd_strtok_r
#define gdTell php_gd_gdTell
#define getmbi php_gd_getmbi
#define init_destination php_gd_init_destination
#define init_source php_gd_init_source
#define jpeg_gdIOCtx_dest php_gd_jpeg_gdIOCtx_dest
#define jpeg_gdIOCtx_src php_gd_jpeg_gdIOCtx_src
#define lsqrt php_gd_lsqrt
#define printwbmp php_gd_printwbmp
#define Putchar php_gd_Putchar
#define putmbi php_gd_putmbi
#define Putword php_gd_Putword
#define readwbmp php_gd_readwbmp
#define skipheader php_gd_skipheader
#define skip_input_data php_gd_skip_input_data
#define term_destination php_gd_term_destination
#define term_source php_gd_term_source
#define writewbmp php_gd_writewbmp
#define ZeroDataBlock php_gd_ZeroDataBlock
#define gdCacheCreate php_gd_gdCacheCreate
#define gdCacheDelete php_gd_gdCacheDelete
#define gdCacheGet php_gd_gdCacheGet
#define gdFontCacheSetup php_gd_gdFontCacheSetup
#define gdFontCacheShutdown php_gd_gdFontCacheShutdown
#define gdFreeFontCache php_gd_gdFreeFontCache
#endif /* HAVE_GD_BUNDLED */

/* Define to specify how much context to retain around the current parse
   point. */
#define XML_CONTEXT_BYTES 1024

/* Define to make parameter entity parsing functionality available. */
#define XML_DTD 1

/* Define to make XML Namespaces functionality available. */
#define XML_NS 1
#endif

#endif
main/build-defs.h000064400000014763151730543040007674 0ustar00/*
   +----------------------------------------------------------------------+
   | Copyright (c) The PHP Group                                          |
   +----------------------------------------------------------------------+
   | This source file is subject to version 3.01 of the PHP license,      |
   | that is bundled with this package in the file LICENSE, and is        |
   | available through the world-wide-web at the following url:           |
   | https://www.php.net/license/3_01.txt                                 |
   | If you did not receive a copy of the PHP license and are unable to   |
   | obtain it through the world-wide-web, please send a note to          |
   | license@php.net so we can mail you a copy immediately.               |
   +----------------------------------------------------------------------+
   | Author: Stig Sæther Bakken <ssb@php.net>                             |
   +----------------------------------------------------------------------+
*/

#define CONFIGURE_COMMAND " './configure'  '--disable-dependency-tracking' '--prefix=/usr' '--exec-prefix=/usr' '--bindir=/usr/bin' '--sbindir=/usr/sbin' '--sysconfdir=/etc' '--datadir=/usr/share' '--includedir=/usr/include' '--libdir=/usr/lib64' '--libexecdir=/usr/libexec' '--sharedstatedir=/var/lib' '--mandir=/usr/share/man' '--infodir=/usr/share/info' '--build=x86_64-redhat-linux-gnu' '--host=x86_64-redhat-linux-gnu' '--target=x86_64-redhat-linux-gnu' '--program-prefix=' '--prefix=/opt/alt/php85' '--exec-prefix=/opt/alt/php85' '--bindir=/opt/alt/php85/usr/bin' '--sbindir=/opt/alt/php85/usr/sbin' '--sysconfdir=/opt/alt/php85/etc' '--datadir=/opt/alt/php85/usr/share' '--includedir=/opt/alt/php85/usr/include' '--libdir=/opt/alt/php85/usr/lib64' '--libexecdir=/opt/alt/php85/usr/libexec' '--localstatedir=/var' '--sharedstatedir=/usr/com' '--mandir=/opt/alt/php85/usr/share/man' '--infodir=/opt/alt/php85/usr/share/info' '--cache-file=../config.cache' '--with-libdir=lib64' '--with-config-file-path=/opt/alt/php85/etc' '--with-config-file-scan-dir=/opt/alt/php85/link/conf' '--disable-debug' '--enable-calendar' '--enable-exif' '--enable-ftp' '--enable-huge-code-pages' '--enable-jit' '--enable-shared=yes' '--enable-shmop' '--enable-static=no' '--enable-xml' '--with-bz2' '--with-freetype=/usr' '--with-gettext' '--with-gmp=shared' '--with-gnu-ld=yes' '--with-iconv' '--with-jpeg=/usr' '--with-layout=GNU' '--with-mhash' '--with-password-argon2=/usr' '--with-pcre-jit' '--with-pic' '--with-readline' '--with-webp=/opt/alt/libwebp' '--with-xpm=/usr' '--with-zlib' '--with-zlib-dir=/usr' '--without-gdbm' '--without-pear' '--with-curl=/opt/alt/curlssl11/usr' '--with-openssl-dir=/opt/alt/openssl11' '--with-openssl=/opt/alt/openssl11' '--with-pcre-dir=/opt/alt/pcre2' '--with-avif' '--with-kerberos=/opt/alt/krb5/usr' '--with-apxs2' '--enable-fpm' '--with-fpm-systemd' '--enable-litespeed' '--enable-bcmath=shared' '--enable-dba=shared' '--with-db4=/usr' '--enable-dom=shared' '--enable-fileinfo=shared' '--enable-gd=shared' '--enable-intl=shared' '--enable-mbregex' '--enable-mbstring=shared' '--enable-mysqlnd=shared' '--enable-pcntl' '--enable-pdo=shared' '--enable-phar=shared' '--enable-posix=shared' '--enable-soap=shared' '--enable-sockets=shared' '--enable-sysvsem=shared' '--enable-sysvshm=shared' '--enable-sysvmsg=shared' '--enable-xmlreader=shared' '--enable-xmlwriter=shared' '--with-enchant=shared,/usr' '--with-external-gd' '--with-mysql-sock=/var/lib/mysql/mysql.sock' '--with-mysqli=shared,mysqlnd' '--with-pdo-mysql=shared,mysqlnd' '--with-pdo-odbc=shared,unixODBC,/usr' '--with-pdo-sqlite=shared,/opt/alt/sqlite/usr' '--with-sqlite3=/opt/alt/sqlite/usr' '--with-tidy=shared,/usr' '--with-unixODBC=shared,/usr' '--with-zip=shared' '--with-pdo-pgsql=shared,/usr' '--with-pgsql=shared,/usr' '--with-pdo-dblib=shared,/opt/alt/freetds11/usr' '--with-ldap=shared,/opt/alt/openldap11' '--with-ldap-sasl' '--with-snmp=shared,/opt/alt/net-snmp11/usr' '--with-pdo-oci=shared,instantclient,/usr/lib/oracle/21/client64/lib' '--with-sodium=shared,/usr' '--with-ffi=shared,/usr' '--with-pdo-firebird=shared' '--with-xsl=shared,/usr' 'build_alias=x86_64-redhat-linux-gnu' 'host_alias=x86_64-redhat-linux-gnu' 'target_alias=x86_64-redhat-linux-gnu' 'PKG_CONFIG_PATH=/opt/alt/curlssl11/usr/lib64/pkgconfig:/opt/alt/libssh211/usr/lib64/pkgconfig:/opt/alt/sqlite/usr/lib64/pkgconfig:/opt/alt/openssl11/lib64/pkgconfig:/opt/alt/sqlite/usr/lib64/pkgconfig:/opt/alt/pcre2/usr/lib64/pkgconfig:/opt/alt/libzip/usr/lib64/pkgconfig:/opt/alt/krb5/usr/lib64/pkgconfig:/opt/alt/libxml2/usr/lib64/pkgconfig:/opt/alt/libicu/usr/lib64/pkgconfig:/opt/alt/libgd/lib64/pkgconfig::/usr/lib64/pkgconfig:/usr/share/pkgconfig' 'CFLAGS=-O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m64 -mtune=generic -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -Dmp_bitcnt_t=long -fno-strict-aliasing -Wno-pointer-sign -I/opt/alt/libxml2/usr/include/libxml2 -I/opt/alt/libicu/usr/include -I/opt/alt/libgd/include -I/usr/include/libpng16 -I/usr/include/freetype2 -I/usr/include/uuid -DAVIF_DLL -I/opt/alt/krb5/usr/include -I/opt/alt/curlssl11/usr/include -I/opt/alt/openssl11/include -I/opt/alt/libssh211/usr/include -I/opt/alt/sqlite/usr/include -I/opt/alt/pcre2/usr/include -I/opt/alt/libzip/usr/include -mshstk' 'WEBP_LIBS=-L/opt/alt/libwebp/lib64 -Wl,-rpath=/opt/alt/libwebp/lib64' 'SASL_CFLAGS=-I/opt/alt/cyrus-sasl/include' 'SASL_LIBS=-L/opt/alt/cyrus-sasl/lib64' 'EXTENSION_DIR=/opt/alt/php85/usr/lib64/php/modules'"
#define PHP_PROG_SENDMAIL	"/usr/sbin/sendmail"
#define PEAR_INSTALLDIR         "/opt/alt/php85/usr/share/pear"
#define PHP_INCLUDE_PATH	".:/opt/alt/php85/usr/share/pear:/opt/alt/php85/usr/share/php:/usr/share/pear:/usr/share/php"
#define PHP_EXTENSION_DIR       "/opt/alt/php85/usr/lib64/php/modules"
#define PHP_PREFIX              "/opt/alt/php85"
#define PHP_BINDIR              "/opt/alt/php85/usr/bin"
#define PHP_SBINDIR             "/opt/alt/php85/usr/sbin"
#define PHP_MANDIR              "/opt/alt/php85/usr/share/man"
#define PHP_LIBDIR              "/opt/alt/php85/usr/lib64"
#define PHP_DATADIR             "/opt/alt/php85/usr/share"
#define PHP_SYSCONFDIR          "/opt/alt/php85/etc"
#define PHP_LOCALSTATEDIR       "/var"
#define PHP_CONFIG_FILE_PATH    "/opt/alt/php85/etc"
#define PHP_CONFIG_FILE_SCAN_DIR    "/opt/alt/php85/link/conf"
#define PHP_SHLIB_SUFFIX        "so"
#define PHP_SHLIB_EXT_PREFIX    ""
main/php_ticks.h000064400000002542151730543040007632 0ustar00/*
   +----------------------------------------------------------------------+
   | Copyright (c) The PHP Group                                          |
   +----------------------------------------------------------------------+
   | This source file is subject to version 3.01 of the PHP license,      |
   | that is bundled with this package in the file LICENSE, and is        |
   | available through the world-wide-web at the following url:           |
   | https://www.php.net/license/3_01.txt                                 |
   | If you did not receive a copy of the PHP license and are unable to   |
   | obtain it through the world-wide-web, please send a note to          |
   | license@php.net so we can mail you a copy immediately.               |
   +----------------------------------------------------------------------+
   | Author: Stig Bakken <ssb@php.net>                                    |
   +----------------------------------------------------------------------+
*/

#ifndef PHP_TICKS_H
#define PHP_TICKS_H

void php_startup_ticks(void);
void php_deactivate_ticks(void);
void php_shutdown_ticks(php_core_globals *core_globals);
void php_run_ticks(int count);

BEGIN_EXTERN_C()
PHPAPI void php_add_tick_function(void (*func)(int, void *), void *arg);
PHPAPI void php_remove_tick_function(void (*func)(int, void *), void * arg);
END_EXTERN_C()

#endif
main/spprintf.h000064400000002735151730543040007517 0ustar00/*
   +----------------------------------------------------------------------+
   | Copyright (c) The PHP Group                                          |
   +----------------------------------------------------------------------+
   | This source file is subject to version 3.01 of the PHP license,      |
   | that is bundled with this package in the file LICENSE, and is        |
   | available through the world-wide-web at the following url:           |
   | https://www.php.net/license/3_01.txt                                 |
   | If you did not receive a copy of the PHP license and are unable to   |
   | obtain it through the world-wide-web, please send a note to          |
   | license@php.net so we can mail you a copy immediately.               |
   +----------------------------------------------------------------------+
   | Author: Marcus Boerger <helly@php.net>                               |
   +----------------------------------------------------------------------+
 */

#ifndef SPPRINTF_H
#define SPPRINTF_H

#include "snprintf.h"
#include "zend_smart_str_public.h"
#include "zend_smart_string_public.h"

BEGIN_EXTERN_C()
PHPAPI void php_printf_to_smart_string(smart_string *buf, const char *format, va_list ap);
PHPAPI void php_printf_to_smart_str(smart_str *buf, const char *format, va_list ap);
END_EXTERN_C()

#define spprintf zend_spprintf
#define strpprintf zend_strpprintf
#define vspprintf zend_vspprintf
#define vstrpprintf zend_vstrpprintf

#endif /* SPPRINTF_H */
main/php_glob.h000064400000013632151730543040007442 0ustar00/*	$OpenBSD: glob.h,v 1.14 2019/02/04 16:45:40 millert Exp $	*/
/*	$NetBSD: glob.h,v 1.5 1994/10/26 00:55:56 cgd Exp $	*/

/*
 * Copyright (c) 1989, 1993
 *	The Regents of the University of California.  All rights reserved.
 *
 * This code is derived from software contributed to Berkeley by
 * Guido van Rossum.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions
 * are met:
 * 1. Redistributions of source code must retain the above copyright
 *    notice, this list of conditions and the following disclaimer.
 * 2. Redistributions in binary form must reproduce the above copyright
 *    notice, this list of conditions and the following disclaimer in the
 *    documentation and/or other materials provided with the distribution.
 * 3. Neither the name of the University nor the names of its contributors
 *    may be used to endorse or promote products derived from this software
 *    without specific prior written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
 * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 * SUCH DAMAGE.
 *
 *	@(#)glob.h	8.1 (Berkeley) 6/2/93
 */

#ifdef PHP_WIN32
#include "config.w32.h"
#else
#include <php_config.h>
#endif

#ifndef _PHP_GLOB_H_
#define	_PHP_GLOB_H_

#if defined(HAVE_GLOB) && defined(PHP_SYSTEM_GLOB)
#include <glob.h>

#ifdef GLOB_APPEND
#define PHP_GLOB_APPEND GLOB_APPEND
#endif
#ifdef GLOB_DOOFFS
#define PHP_GLOB_DOOFFS GLOB_DOOFFS
#endif
#ifdef GLOB_ERR
#define PHP_GLOB_ERR GLOB_ERR
#endif
#ifdef GLOB_MARK
#define PHP_GLOB_MARK GLOB_MARK
#endif
#ifdef GLOB_NOCHECK
#define PHP_GLOB_NOCHECK GLOB_NOCHECK
#endif
#ifdef GLOB_NOSORT
#define PHP_GLOB_NOSORT GLOB_NOSORT
#endif
#ifdef GLOB_NOESCAPE
#define PHP_GLOB_NOESCAPE GLOB_NOESCAPE
#endif
#ifdef GLOB_NOSPACE
#define PHP_GLOB_NOSPACE GLOB_NOSPACE
#endif
#ifdef GLOB_ABORTED
#define PHP_GLOB_ABORTED GLOB_ABORTED
#endif
#ifdef GLOB_NOMATCH
#define PHP_GLOB_NOMATCH GLOB_NOMATCH
#endif
#ifdef GLOB_NOSYS
#define PHP_GLOB_NOSYS GLOB_NOSYS
#endif
#ifdef GLOB_ALTDIRFUNC
#define PHP_GLOB_ALTDIRFUNC GLOB_ALTDIRFUNC
#endif
#ifdef GLOB_BRACE
#define PHP_GLOB_BRACE GLOB_BRACE
#endif
#ifdef GLOB_MAGCHAR
#define PHP_GLOB_MAGCHAR GLOB_MAGCHAR
#endif
#ifdef GLOB_NOMAGIC
#define PHP_GLOB_NOMAGIC GLOB_NOMAGIC
#endif
#ifdef GLOB_QUOTE
#define PHP_GLOB_QUOTE GLOB_QUOTE
#endif
#ifdef GLOB_TILDE
#define PHP_GLOB_TILDE GLOB_TILDE
#endif
#ifdef GLOB_LIMIT
#define PHP_GLOB_LIMIT GLOB_LIMIT
#endif
#ifdef GLOB_KEEPSTAT
#define PHP_GLOB_KEEPSTAT GLOB_KEEPSTAT
#endif

#define php_glob_t glob_t
#define php_glob glob
#define php_globfree globfree
#else

#include "php.h"
#include "Zend/zend_stream.h"

typedef struct {
	size_t gl_pathc;	/* Count of total paths so far. */
	size_t gl_matchc;	/* Count of paths matching pattern. */
	size_t gl_offs;		/* Reserved at beginning of gl_pathv. */
	int gl_flags;		/* Copy of flags parameter to glob. */
	char **gl_pathv;	/* List of paths matching pattern. */
	zend_stat_t **gl_statv;	/* Stat entries corresponding to gl_pathv */
				/* Copy of errfunc parameter to glob. */
	int (*gl_errfunc)(const char *, int);

	/*
	 * Alternate filesystem access methods for glob; replacement
	 * versions of closedir(3), readdir(3), opendir(3), stat(2)
	 * and lstat(2).
	 */
	void (*gl_closedir)(void *);
	struct dirent *(*gl_readdir)(void *);
	void *(*gl_opendir)(const char *);
	int (*gl_lstat)(const char *, zend_stat_t *);
	int (*gl_stat)(const char *, zend_stat_t *);
} php_glob_t;

#define	PHP_GLOB_APPEND	0x0001	/* Append to output from previous call. */
#define	PHP_GLOB_DOOFFS	0x0002	/* Use gl_offs. */
#define	PHP_GLOB_ERR	0x0004	/* Return on error. */
#define	PHP_GLOB_MARK	0x0008	/* Append / to matching directories. */
#define	PHP_GLOB_NOCHECK	0x0010	/* Return pattern itself if nothing matches. */
#define	PHP_GLOB_NOSORT	0x0020	/* Don't sort. */
#define	PHP_GLOB_NOESCAPE	0x1000	/* Disable backslash escaping. */

#define	PHP_GLOB_NOSPACE	(-1)	/* Malloc call failed. */
#define	PHP_GLOB_ABORTED	(-2)	/* Unignored error. */
#define	PHP_GLOB_NOMATCH	(-3)	/* No match and PHP_GLOB_NOCHECK not set. */
#define	PHP_GLOB_NOSYS	(-4)	/* Function not supported. */

#define	PHP_GLOB_ALTDIRFUNC	0x0040	/* Use alternately specified directory funcs. */
#define	PHP_GLOB_BRACE	0x0080	/* Expand braces ala csh. */
#define	PHP_GLOB_MAGCHAR	0x0100	/* Pattern had globbing characters. */
#define	PHP_GLOB_NOMAGIC	0x0200	/* PHP_GLOB_NOCHECK without magic chars (csh). */
#define	PHP_GLOB_QUOTE	0x0400	/* Quote special chars with \. */
#define	PHP_GLOB_TILDE	0x0800	/* Expand tilde names from the passwd file. */
#define PHP_GLOB_LIMIT	0x2000	/* Limit pattern match output to ARG_MAX */
#define	PHP_GLOB_KEEPSTAT	0x4000	/* Retain stat data for paths in gl_statv. */

BEGIN_EXTERN_C()
PHPAPI int	php_glob(const char *__restrict, int, int (*)(const char *, int),
	    php_glob_t *__restrict);
PHPAPI void	php_globfree(php_glob_t *);
END_EXTERN_C()

#endif /* defined(HAVE_GLOB) */

/* These were copied from dir and zip */

#ifndef PHP_GLOB_ONLYDIR
#define PHP_GLOB_ONLYDIR (1<<30)
#define PHP_GLOB_FLAGMASK (~PHP_GLOB_ONLYDIR)
#else
#define PHP_GLOB_FLAGMASK (~0)
#endif

#define PHP_GLOB_AVAILABLE_FLAGS (0 | PHP_GLOB_BRACE | PHP_GLOB_MARK | PHP_GLOB_NOSORT | PHP_GLOB_NOCHECK | PHP_GLOB_NOESCAPE | PHP_GLOB_ERR | PHP_GLOB_ONLYDIR)

#endif /* !_GLOB_H_ */
main/php_output.h000064400000022020151730543040010046 0ustar00/*
   +----------------------------------------------------------------------+
   | Copyright (c) The PHP Group                                          |
   +----------------------------------------------------------------------+
   | This source file is subject to version 3.01 of the PHP license,      |
   | that is bundled with this package in the file LICENSE, and is        |
   | available through the world-wide-web at the following url:           |
   | https://www.php.net/license/3_01.txt                                 |
   | If you did not receive a copy of the PHP license and are unable to   |
   | obtain it through the world-wide-web, please send a note to          |
   | license@php.net so we can mail you a copy immediately.               |
   +----------------------------------------------------------------------+
   | Author: Michael Wallner <mike@php.net>                               |
   +----------------------------------------------------------------------+
*/

#ifndef PHP_OUTPUT_H
#define PHP_OUTPUT_H

#define PHP_OUTPUT_NEWAPI 1

/* handler ops */
#define PHP_OUTPUT_HANDLER_WRITE	0x00	/* standard passthru */
#define PHP_OUTPUT_HANDLER_START	0x01	/* start */
#define PHP_OUTPUT_HANDLER_CLEAN	0x02	/* restart */
#define PHP_OUTPUT_HANDLER_FLUSH	0x04	/* pass along as much as possible */
#define PHP_OUTPUT_HANDLER_FINAL	0x08	/* finalize */
#define PHP_OUTPUT_HANDLER_CONT		PHP_OUTPUT_HANDLER_WRITE
#define PHP_OUTPUT_HANDLER_END		PHP_OUTPUT_HANDLER_FINAL

/* handler types */
#define PHP_OUTPUT_HANDLER_INTERNAL		0x0000
#define PHP_OUTPUT_HANDLER_USER			0x0001

/* handler ability flags */
#define PHP_OUTPUT_HANDLER_CLEANABLE	0x0010
#define PHP_OUTPUT_HANDLER_FLUSHABLE	0x0020
#define PHP_OUTPUT_HANDLER_REMOVABLE	0x0040
#define PHP_OUTPUT_HANDLER_STDFLAGS		0x0070

/* handler status flags */
#define PHP_OUTPUT_HANDLER_STARTED		0x1000
#define PHP_OUTPUT_HANDLER_DISABLED		0x2000
#define PHP_OUTPUT_HANDLER_PROCESSED	0x4000
#define PHP_OUTPUT_HANDLER_PRODUCED_OUTPUT 0x8000

#define PHP_OUTPUT_HANDLER_ABILITY_FLAGS(bitmask) ((bitmask) & ~0xf00f)

/* handler op return values */
typedef enum _php_output_handler_status_t {
	PHP_OUTPUT_HANDLER_FAILURE,
	PHP_OUTPUT_HANDLER_SUCCESS,
	PHP_OUTPUT_HANDLER_NO_DATA
} php_output_handler_status_t;

/* php_output_stack_pop() flags */
#define PHP_OUTPUT_POP_TRY			0x000
#define PHP_OUTPUT_POP_FORCE		0x001
#define PHP_OUTPUT_POP_DISCARD		0x010
#define PHP_OUTPUT_POP_SILENT		0x100

/* real global flags */
#define PHP_OUTPUT_IMPLICITFLUSH		0x01
#define PHP_OUTPUT_DISABLED				0x02
#define PHP_OUTPUT_WRITTEN				0x04
#define PHP_OUTPUT_SENT					0x08
/* supplementary flags for php_output_get_status() */
#define PHP_OUTPUT_ACTIVE				0x10
#define PHP_OUTPUT_LOCKED				0x20
/* output layer is ready to use */
#define PHP_OUTPUT_ACTIVATED		0x100000

/* handler hooks */
typedef enum _php_output_handler_hook_t {
	PHP_OUTPUT_HANDLER_HOOK_GET_OPAQ,
	PHP_OUTPUT_HANDLER_HOOK_GET_FLAGS,
	PHP_OUTPUT_HANDLER_HOOK_GET_LEVEL,
	PHP_OUTPUT_HANDLER_HOOK_IMMUTABLE,
	PHP_OUTPUT_HANDLER_HOOK_DISABLE,
	/* unused */
	PHP_OUTPUT_HANDLER_HOOK_LAST
} php_output_handler_hook_t;

#define PHP_OUTPUT_HANDLER_INITBUF_SIZE(s) \
( ((s) > 0) ? \
	ZEND_MM_ALIGNED_SIZE_EX(s, PHP_OUTPUT_HANDLER_ALIGNTO_SIZE) : \
	PHP_OUTPUT_HANDLER_DEFAULT_SIZE \
)
#define PHP_OUTPUT_HANDLER_ALIGNTO_SIZE		0x1000
#define PHP_OUTPUT_HANDLER_DEFAULT_SIZE		0x4000

typedef struct _php_output_buffer {
	char *data;
	size_t size;
	size_t used;
	uint32_t free:1;
	uint32_t _reserved:31;
} php_output_buffer;

typedef struct _php_output_context {
	int op;
	php_output_buffer in;
	php_output_buffer out;
} php_output_context;

/* old-style, stateless callback */
typedef void (*php_output_handler_func_t)(char *output, size_t output_len, char **handled_output, size_t *handled_output_len, int mode);
/* new-style, opaque context callback */
typedef zend_result (*php_output_handler_context_func_t)(void **handler_context, php_output_context *output_context);
/* output handler context dtor */
typedef void (*php_output_handler_context_dtor_t)(void *opaq);
/* conflict check callback */
typedef zend_result (*php_output_handler_conflict_check_t)(const char *handler_name, size_t handler_name_len);
/* ctor for aliases */
typedef struct _php_output_handler *(*php_output_handler_alias_ctor_t)(const char *handler_name, size_t handler_name_len, size_t chunk_size, int flags);

typedef struct _php_output_handler_user_func_t {
	zend_fcall_info fci;
	zend_fcall_info_cache fcc;
	zval zoh;
} php_output_handler_user_func_t;

typedef struct _php_output_handler {
	zend_string *name;
	int flags;
	int level;
	size_t size;
	php_output_buffer buffer;

	void *opaq;
	void (*dtor)(void *opaq);

	union {
		php_output_handler_user_func_t *user;
		php_output_handler_context_func_t internal;
	} func;
} php_output_handler;

ZEND_BEGIN_MODULE_GLOBALS(output)
	zend_stack handlers;
	php_output_handler *active;
	php_output_handler *running;
	zend_string *output_start_filename;
	int output_start_lineno;
	int flags;
ZEND_END_MODULE_GLOBALS(output)

PHPAPI ZEND_EXTERN_MODULE_GLOBALS(output)

/* there should not be a need to use OG() from outside of output.c */
#ifdef ZTS
# define OG(v) ZEND_TSRMG(output_globals_id, zend_output_globals *, v)
#else
# define OG(v) (output_globals.v)
#endif

/* convenience macros */
#define PHPWRITE(str, str_len)		php_output_write((str), (str_len))
#define PHPWRITE_H(str, str_len)	php_output_write_unbuffered((str), (str_len))

#define PUTC(c)						php_output_write((const char *) &(c), 1)
#define PUTC_H(c)					php_output_write_unbuffered((const char *) &(c), 1)

#define PUTS(str)					do {				\
	const char *__str = (str);							\
	php_output_write(__str, strlen(__str));	\
} while (0)
#define PUTS_H(str)					do {							\
	const char *__str = (str);										\
	php_output_write_unbuffered(__str, strlen(__str));	\
} while (0)


BEGIN_EXTERN_C()

extern const char php_output_default_handler_name[sizeof("default output handler")];
extern const char php_output_devnull_handler_name[sizeof("null output handler")];

#define php_output_tearup() \
	php_output_startup(); \
	php_output_activate()
#define php_output_teardown() \
	php_output_end_all(); \
	php_output_deactivate(); \
	php_output_shutdown()

/* MINIT */
PHPAPI void php_output_startup(void);
/* MSHUTDOWN */
PHPAPI void php_output_shutdown(void);

/* RINIT */
PHPAPI int php_output_activate(void);
/* RSHUTDOWN */
PHPAPI void php_output_deactivate(void);

PHPAPI void php_output_set_status(int status);
PHPAPI int php_output_get_status(void);
PHPAPI void php_output_set_implicit_flush(int flush);
PHPAPI const char *php_output_get_start_filename(void);
PHPAPI int php_output_get_start_lineno(void);

PHPAPI size_t php_output_write_unbuffered(const char *str, size_t len);
PHPAPI size_t php_output_write(const char *str, size_t len);

PHPAPI zend_result php_output_flush(void);
PHPAPI void php_output_flush_all(void);
PHPAPI zend_result php_output_clean(void);
PHPAPI void php_output_clean_all(void);
PHPAPI zend_result php_output_end(void);
PHPAPI void php_output_end_all(void);
PHPAPI zend_result php_output_discard(void);
PHPAPI void php_output_discard_all(void);

PHPAPI zend_result php_output_get_contents(zval *p);
PHPAPI zend_result php_output_get_length(zval *p);
PHPAPI int php_output_get_level(void);
PHPAPI php_output_handler* php_output_get_active_handler(void);

PHPAPI zend_result php_output_start_default(void);
PHPAPI zend_result php_output_start_devnull(void);

PHPAPI zend_result php_output_start_user(zval *output_handler, size_t chunk_size, int flags);
PHPAPI zend_result php_output_start_internal(const char *name, size_t name_len, php_output_handler_func_t output_handler, size_t chunk_size, int flags);

PHPAPI php_output_handler *php_output_handler_create_user(zval *handler, size_t chunk_size, int flags);
PHPAPI php_output_handler *php_output_handler_create_internal(const char *name, size_t name_len, php_output_handler_context_func_t handler, size_t chunk_size, int flags);

PHPAPI void php_output_handler_set_context(php_output_handler *handler, void *opaq, void (*dtor)(void*));
PHPAPI zend_result php_output_handler_start(php_output_handler *handler);
PHPAPI bool php_output_handler_started(const char *name, size_t name_len);
PHPAPI zend_result php_output_handler_hook(php_output_handler_hook_t type, void *arg);
PHPAPI void php_output_handler_dtor(php_output_handler *handler);
PHPAPI void php_output_handler_free(php_output_handler **handler);

PHPAPI bool php_output_handler_conflict(const char *handler_new, size_t handler_new_len, const char *handler_set, size_t handler_set_len);
PHPAPI zend_result php_output_handler_conflict_register(const char *handler_name, size_t handler_name_len, php_output_handler_conflict_check_t check_func);
PHPAPI zend_result php_output_handler_reverse_conflict_register(const char *handler_name, size_t handler_name_len, php_output_handler_conflict_check_t check_func);

PHPAPI php_output_handler_alias_ctor_t php_output_handler_alias(const char *handler_name, size_t handler_name_len);
PHPAPI zend_result php_output_handler_alias_register(const char *handler_name, size_t handler_name_len, php_output_handler_alias_ctor_t func);

END_EXTERN_C()

#endif
main/php_scandir.h000064400000003263151730543040010141 0ustar00/*
   +----------------------------------------------------------------------+
   | Copyright (c) The PHP Group                                          |
   +----------------------------------------------------------------------+
   | This source file is subject to version 3.01 of the PHP license,      |
   | that is bundled with this package in the file LICENSE, and is        |
   | available through the world-wide-web at the following url:           |
   | https://www.php.net/license/3_01.txt                                 |
   | If you did not receive a copy of the PHP license and are unable to   |
   | obtain it through the world-wide-web, please send a note to          |
   | license@php.net so we can mail you a copy immediately.               |
   +----------------------------------------------------------------------+
   | Authors: Shane Caraveo <shane@caraveo.com>                           |
   |          Ilia Alshanetsky  <ilia@prohost.org>                        |
   +----------------------------------------------------------------------+
*/

#ifndef PHP_SCANDIR_H
#define PHP_SCANDIR_H

#include <sys/types.h>

#ifdef PHP_WIN32
#include "config.w32.h"
#include "win32/readdir.h"
#else
#include <php_config.h>
#endif

#ifdef HAVE_DIRENT_H
#include <dirent.h>
#endif

#ifdef HAVE_SCANDIR
#define php_scandir		scandir
#else
PHPAPI int php_scandir(const char *dirname, struct dirent **namelist[], int (*selector) (const struct dirent *entry), int (*compare) (const struct dirent **a, const struct dirent **b));
#endif

#ifdef HAVE_ALPHASORT
#define php_alphasort	alphasort
#else
PHPAPI int php_alphasort(const struct dirent **a, const struct dirent **b);
#endif

#endif /* PHP_SCANDIR_H */
main/fastcgi.h000064400000011434151730543040007266 0ustar00/*
   +----------------------------------------------------------------------+
   | Copyright (c) The PHP Group                                          |
   +----------------------------------------------------------------------+
   | This source file is subject to version 3.01 of the PHP license,      |
   | that is bundled with this package in the file LICENSE, and is        |
   | available through the world-wide-web at the following url:           |
   | https://www.php.net/license/3_01.txt                                 |
   | If you did not receive a copy of the PHP license and are unable to   |
   | obtain it through the world-wide-web, please send a note to          |
   | license@php.net so we can mail you a copy immediately.               |
   +----------------------------------------------------------------------+
   | Authors: Dmitry Stogov <dmitry@php.net>                              |
   +----------------------------------------------------------------------+
*/

/* FastCGI protocol */

#define FCGI_VERSION_1 1

#define FCGI_MAX_LENGTH 0xffff

#define FCGI_KEEP_CONN  1

/* this is near the perfect hash function for most useful FastCGI variables
 * which combines efficiency and minimal hash collisions
 */

#define FCGI_HASH_FUNC(var, var_len) \
	(UNEXPECTED(var_len < 3) ? (unsigned int)var_len : \
		(((unsigned int)var[3]) << 2) + \
		(((unsigned int)var[var_len-2]) << 4) + \
		(((unsigned int)var[var_len-1]) << 2) + \
		var_len)

#define FCGI_GETENV(request, name) \
	fcgi_quick_getenv(request, name, sizeof(name)-1, FCGI_HASH_FUNC(name, sizeof(name)-1))

#define FCGI_PUTENV(request, name, value) \
	fcgi_quick_putenv(request, name, sizeof(name)-1, FCGI_HASH_FUNC(name, sizeof(name)-1), value)

typedef enum _fcgi_role {
	FCGI_RESPONDER	= 1,
	FCGI_AUTHORIZER	= 2,
	FCGI_FILTER		= 3
} fcgi_role;

enum {
	FCGI_DEBUG		= 1,
	FCGI_NOTICE		= 2,
	FCGI_WARNING	= 3,
	FCGI_ERROR		= 4,
	FCGI_ALERT		= 5,
};

typedef enum _fcgi_request_type {
	FCGI_BEGIN_REQUEST		=  1, /* [in]                              */
	FCGI_ABORT_REQUEST		=  2, /* [in]  (not supported)             */
	FCGI_END_REQUEST		=  3, /* [out]                             */
	FCGI_PARAMS				=  4, /* [in]  environment variables       */
	FCGI_STDIN				=  5, /* [in]  post data                   */
	FCGI_STDOUT				=  6, /* [out] response                    */
	FCGI_STDERR				=  7, /* [out] errors                      */
	FCGI_DATA				=  8, /* [in]  filter data (not supported) */
	FCGI_GET_VALUES			=  9, /* [in]                              */
	FCGI_GET_VALUES_RESULT	= 10  /* [out]                             */
} fcgi_request_type;

typedef enum _fcgi_protocol_status {
	FCGI_REQUEST_COMPLETE	= 0,
	FCGI_CANT_MPX_CONN		= 1,
	FCGI_OVERLOADED			= 2,
	FCGI_UNKNOWN_ROLE		= 3
} dcgi_protocol_status;

/* FastCGI client API */

typedef void (*fcgi_apply_func)(const char *var, unsigned int var_len, char *val, unsigned int val_len, void *arg);

#define FCGI_HASH_TABLE_SIZE 128
#define FCGI_HASH_TABLE_MASK (FCGI_HASH_TABLE_SIZE - 1)
#define FCGI_HASH_SEG_SIZE   4096

typedef struct _fcgi_request fcgi_request;

int fcgi_init(void);
void fcgi_shutdown(void);
int fcgi_is_fastcgi(void);
int fcgi_is_closed(fcgi_request *req);
void fcgi_close(fcgi_request *req, int force, int destroy);
int fcgi_in_shutdown(void);
void fcgi_terminate(void);
int fcgi_listen(const char *path, int backlog);
fcgi_request* fcgi_init_request(int listen_socket, void(*on_accept)(void), void(*on_read)(void), void(*on_close)(void));
void fcgi_destroy_request(fcgi_request *req);
void fcgi_set_allowed_clients(char *ip);
int fcgi_accept_request(fcgi_request *req);
int fcgi_finish_request(fcgi_request *req, int force_close);
const char *fcgi_get_last_client_ip(void);
void fcgi_set_in_shutdown(int new_value);
void fcgi_request_set_keep(fcgi_request *req, int new_value);

#ifndef HAVE_ATTRIBUTE_WEAK
typedef void (*fcgi_logger)(int type, const char *fmt, ...) ZEND_ATTRIBUTE_FORMAT(printf, 2, 3);
void fcgi_set_logger(fcgi_logger lg);
#endif

int   fcgi_has_env(fcgi_request *req);
char* fcgi_getenv(fcgi_request *req, const char* var, int var_len);
char* fcgi_putenv(fcgi_request *req, char* var, int var_len, char* val);
char* fcgi_quick_getenv(fcgi_request *req, const char* var, int var_len, unsigned int hash_value);
char* fcgi_quick_putenv(fcgi_request *req, char* var, int var_len, unsigned int hash_value, char* val);
void  fcgi_loadenv(fcgi_request *req, fcgi_apply_func load_func, zval *array);

int fcgi_read(fcgi_request *req, char *str, int len);

int fcgi_write(fcgi_request *req, fcgi_request_type type, const char *str, int len);
int fcgi_flush(fcgi_request *req, int end);
int fcgi_end(fcgi_request *req);

#ifdef PHP_WIN32
void fcgi_impersonate(void);
#endif

void fcgi_set_mgmt_var(const char * name, size_t name_len, const char * value, size_t value_len);
void fcgi_free_mgmt_var_cb(zval *zv);
main/php_version.h000064400000000410151730543050010173 0ustar00/* automatically generated by configure */
/* edit configure.ac to change version number */
#define PHP_MAJOR_VERSION 8
#define PHP_MINOR_VERSION 5
#define PHP_RELEASE_VERSION 4
#define PHP_EXTRA_VERSION ""
#define PHP_VERSION "8.5.4"
#define PHP_VERSION_ID 80504
main/php_globals.h000064400000007675151730543050010155 0ustar00/*
   +----------------------------------------------------------------------+
   | Copyright (c) The PHP Group                                          |
   +----------------------------------------------------------------------+
   | This source file is subject to version 3.01 of the PHP license,      |
   | that is bundled with this package in the file LICENSE, and is        |
   | available through the world-wide-web at the following url:           |
   | https://www.php.net/license/3_01.txt                                 |
   | If you did not receive a copy of the PHP license and are unable to   |
   | obtain it through the world-wide-web, please send a note to          |
   | license@php.net so we can mail you a copy immediately.               |
   +----------------------------------------------------------------------+
   | Author: Zeev Suraski <zeev@php.net>                                  |
   +----------------------------------------------------------------------+
*/

#ifndef PHP_GLOBALS_H
#define PHP_GLOBALS_H

#include "zend_globals.h"

#include <stdint.h>

typedef struct _php_core_globals php_core_globals;

#ifdef ZTS
# define PG(v) ZEND_TSRMG_FAST(core_globals_offset, php_core_globals *, v)
extern PHPAPI int core_globals_id;
extern PHPAPI size_t core_globals_offset;
#else
# define PG(v) (core_globals.v)
extern ZEND_API struct _php_core_globals core_globals;
#endif

/* Error display modes */
#define PHP_DISPLAY_ERRORS_STDOUT	1
#define PHP_DISPLAY_ERRORS_STDERR	2

/* Track vars */
#define TRACK_VARS_POST		0
#define TRACK_VARS_GET		1
#define TRACK_VARS_COOKIE	2
#define TRACK_VARS_SERVER	3
#define TRACK_VARS_ENV		4
#define TRACK_VARS_FILES	5
#define TRACK_VARS_REQUEST	6

struct _php_tick_function_entry;

typedef struct _arg_separators {
	zend_string *output;
	zend_string *input;
} arg_separators;

struct _php_core_globals {
	zend_long output_buffering;

	bool implicit_flush;

	bool enable_dl;

	uint8_t display_errors;
	bool display_startup_errors;
	bool log_errors;
	bool ignore_repeated_errors;
	bool ignore_repeated_source;
	bool report_memleaks;

	char *output_handler;

	char *unserialize_callback_func;
	zend_long serialize_precision;

	zend_long memory_limit;
	zend_long max_memory_limit;
	zend_long max_input_time;

	char *error_log;

	char *doc_root;
	char *user_dir;
	char *include_path;
	char *open_basedir;
	bool open_basedir_modified;
	char *extension_dir;
	char *php_binary;
	char *sys_temp_dir;

	char *upload_tmp_dir;
	zend_long upload_max_filesize;

	char *error_append_string;
	char *error_prepend_string;

	char *auto_prepend_file;
	char *auto_append_file;

	char *input_encoding;
	char *internal_encoding;
	char *output_encoding;

	arg_separators arg_separator;

	char *variables_order;

	HashTable rfc1867_protected_variables;

	short connection_status;
	bool ignore_user_abort;

	unsigned char header_is_being_sent;

	zend_llist tick_functions;

	zval http_globals[6];

	bool expose_php;

	bool register_argc_argv;
	bool auto_globals_jit;

	bool html_errors;
	bool xmlrpc_errors;

	char *docref_root;
	char *docref_ext;

	zend_long xmlrpc_error_number;

	bool activated_auto_globals[8];

	bool modules_activated;
	bool file_uploads;
	bool during_request_startup;
	bool allow_url_fopen;
	bool enable_post_data_reading;
	bool report_zend_debug;

	int last_error_type;
	int last_error_lineno;
	zend_string *last_error_message;
	zend_string *last_error_file;

	char *php_sys_temp_dir;

	zend_long max_input_nesting_level;
	zend_long max_input_vars;

	char *user_ini_filename;
	zend_long user_ini_cache_ttl;

	char *request_order;

	char *mail_log;
	zend_string *mail_cr_lf_mode;
	bool mail_x_header;
	bool mail_mixed_lf_and_crlf;

	bool in_error_log;

	bool allow_url_include;
#ifdef PHP_WIN32
	bool com_initialized;
#endif
	bool in_user_include;

#ifdef PHP_WIN32
	bool windows_show_crt_warning;
#endif

	bool have_called_openlog;
	zend_long syslog_facility;
	char *syslog_ident;
	zend_long syslog_filter;
	zend_long error_log_mode;
};


#endif /* PHP_GLOBALS_H */
main/php_open_temporary_file.h000064400000003650151730543050012561 0ustar00/*
   +----------------------------------------------------------------------+
   | Copyright (c) The PHP Group                                          |
   +----------------------------------------------------------------------+
   | This source file is subject to version 3.01 of the PHP license,      |
   | that is bundled with this package in the file LICENSE, and is        |
   | available through the world-wide-web at the following url:           |
   | https://www.php.net/license/3_01.txt                                 |
   | If you did not receive a copy of the PHP license and are unable to   |
   | obtain it through the world-wide-web, please send a note to          |
   | license@php.net so we can mail you a copy immediately.               |
   +----------------------------------------------------------------------+
   | Author: Zeev Suraski <zeev@php.net>                                  |
   +----------------------------------------------------------------------+
*/

#ifndef PHP_OPEN_TEMPORARY_FILE_H
#define PHP_OPEN_TEMPORARY_FILE_H

#define PHP_TMP_FILE_DEFAULT 0
#define PHP_TMP_FILE_OPEN_BASEDIR_CHECK_ON_FALLBACK (1<<0)
#define PHP_TMP_FILE_SILENT (1<<1)
#define PHP_TMP_FILE_OPEN_BASEDIR_CHECK_ON_EXPLICIT_DIR (1<<2)
#define PHP_TMP_FILE_OPEN_BASEDIR_CHECK_ALWAYS \
    (PHP_TMP_FILE_OPEN_BASEDIR_CHECK_ON_FALLBACK | PHP_TMP_FILE_OPEN_BASEDIR_CHECK_ON_EXPLICIT_DIR)

/* for compatibility purpose */
#define PHP_TMP_FILE_OPEN_BASEDIR_CHECK PHP_TMP_FILE_OPEN_BASEDIR_CHECK_ON_FALLBACK


BEGIN_EXTERN_C()
PHPAPI FILE *php_open_temporary_file(const char *dir, const char *pfx, zend_string **opened_path_p);
PHPAPI int php_open_temporary_fd_ex(const char *dir, const char *pfx, zend_string **opened_path_p, uint32_t flags);
PHPAPI int php_open_temporary_fd(const char *dir, const char *pfx, zend_string **opened_path_p);
PHPAPI const char *php_get_temporary_directory(void);
END_EXTERN_C()

#endif /* PHP_OPEN_TEMPORARY_FILE_H */
main/php_ini.h000064400000007107151730543050007277 0ustar00/*
   +----------------------------------------------------------------------+
   | Copyright (c) The PHP Group                                          |
   +----------------------------------------------------------------------+
   | This source file is subject to version 3.01 of the PHP license,      |
   | that is bundled with this package in the file LICENSE, and is        |
   | available through the world-wide-web at the following url:           |
   | https://www.php.net/license/3_01.txt                                 |
   | If you did not receive a copy of the PHP license and are unable to   |
   | obtain it through the world-wide-web, please send a note to          |
   | license@php.net so we can mail you a copy immediately.               |
   +----------------------------------------------------------------------+
   | Author: Zeev Suraski <zeev@php.net>                                  |
   +----------------------------------------------------------------------+
*/

#ifndef PHP_INI_H
#define PHP_INI_H

#include "zend_ini.h"

BEGIN_EXTERN_C()
PHPAPI void config_zval_dtor(zval *zvalue);
void php_init_config(void);
void php_shutdown_config(void);
void php_ini_register_extensions(void);
PHPAPI zval *cfg_get_entry_ex(zend_string *name);
PHPAPI zval *cfg_get_entry(const char *name, size_t name_length);
PHPAPI zend_result cfg_get_long(const char *varname, zend_long *result);
PHPAPI zend_result cfg_get_double(const char *varname, double *result);
PHPAPI zend_result cfg_get_string(const char *varname, char **result);
PHPAPI zend_result php_parse_user_ini_file(const char *dirname, const char *ini_filename, HashTable *target_hash);
PHPAPI void php_ini_activate_config(const HashTable *source_hash, int modify_type, int stage);
PHPAPI bool php_ini_has_per_dir_config(void);
PHPAPI bool php_ini_has_per_host_config(void);
PHPAPI void php_ini_activate_per_dir_config(char *path, size_t path_len);
PHPAPI void php_ini_activate_per_host_config(const char *host, size_t host_len);
PHPAPI HashTable* php_ini_get_configuration_hash(void);
END_EXTERN_C()

#define PHP_INI_USER	ZEND_INI_USER
#define PHP_INI_PERDIR	ZEND_INI_PERDIR
#define PHP_INI_SYSTEM	ZEND_INI_SYSTEM

#define PHP_INI_ALL 	ZEND_INI_ALL

#define php_ini_entry	zend_ini_entry

#define PHP_INI_MH		ZEND_INI_MH
#define PHP_INI_DISP	ZEND_INI_DISP

#define PHP_INI_BEGIN		ZEND_INI_BEGIN
#define PHP_INI_END			ZEND_INI_END

#define PHP_INI_ENTRY3_EX	ZEND_INI_ENTRY3_EX
#define PHP_INI_ENTRY3		ZEND_INI_ENTRY3
#define PHP_INI_ENTRY2_EX	ZEND_INI_ENTRY2_EX
#define PHP_INI_ENTRY2		ZEND_INI_ENTRY2
#define PHP_INI_ENTRY1_EX	ZEND_INI_ENTRY1_EX
#define PHP_INI_ENTRY1		ZEND_INI_ENTRY1
#define PHP_INI_ENTRY_EX	ZEND_INI_ENTRY_EX
#define PHP_INI_ENTRY		ZEND_INI_ENTRY

#define STD_PHP_INI_ENTRY		STD_ZEND_INI_ENTRY
#define STD_PHP_INI_ENTRY_EX	STD_ZEND_INI_ENTRY_EX
#define STD_PHP_INI_BOOLEAN		STD_ZEND_INI_BOOLEAN

#define PHP_INI_DISPLAY_ORIG	ZEND_INI_DISPLAY_ORIG
#define PHP_INI_DISPLAY_ACTIVE	ZEND_INI_DISPLAY_ACTIVE

#define PHP_INI_STAGE_STARTUP		ZEND_INI_STAGE_STARTUP
#define PHP_INI_STAGE_SHUTDOWN		ZEND_INI_STAGE_SHUTDOWN
#define PHP_INI_STAGE_ACTIVATE		ZEND_INI_STAGE_ACTIVATE
#define PHP_INI_STAGE_DEACTIVATE	ZEND_INI_STAGE_DEACTIVATE
#define PHP_INI_STAGE_RUNTIME		ZEND_INI_STAGE_RUNTIME
#define PHP_INI_STAGE_HTACCESS		ZEND_INI_STAGE_HTACCESS

#define php_ini_boolean_displayer_cb	zend_ini_boolean_displayer_cb
#define php_ini_color_displayer_cb		zend_ini_color_displayer_cb

#define php_alter_ini_entry		zend_alter_ini_entry

#define php_ini_long	zend_ini_long
#define php_ini_double	zend_ini_double
#define php_ini_string	zend_ini_string

#endif /* PHP_INI_H */
main/php_variables.h000064400000004071151730543050010465 0ustar00/*
   +----------------------------------------------------------------------+
   | Copyright (c) The PHP Group                                          |
   +----------------------------------------------------------------------+
   | This source file is subject to version 3.01 of the PHP license,      |
   | that is bundled with this package in the file LICENSE, and is        |
   | available through the world-wide-web at the following url:           |
   | https://www.php.net/license/3_01.txt                                 |
   | If you did not receive a copy of the PHP license and are unable to   |
   | obtain it through the world-wide-web, please send a note to          |
   | license@php.net so we can mail you a copy immediately.               |
   +----------------------------------------------------------------------+
   | Authors: Rasmus Lerdorf <rasmus@lerdorf.on.ca>                       |
   |          Zeev Suraski <zeev@php.net>                                 |
   +----------------------------------------------------------------------+
*/

#ifndef PHP_VARIABLES_H
#define PHP_VARIABLES_H

#include "php.h"
#include "SAPI.h"

#define PARSE_POST 0
#define PARSE_GET 1
#define PARSE_COOKIE 2
#define PARSE_STRING 3
#define PARSE_ENV 4
#define PARSE_SERVER 5

BEGIN_EXTERN_C()
void php_startup_auto_globals(void);
extern PHPAPI void (*php_import_environment_variables)(zval *array_ptr);
extern PHPAPI void (*php_load_environment_variables)(zval *array_ptr);
PHPAPI void php_register_variable(const char *var, const char *val, zval *track_vars_array);
/* binary-safe version */
PHPAPI void php_register_variable_safe(const char *var, const char *val, size_t val_len, zval *track_vars_array);
PHPAPI void php_register_variable_ex(const char *var, zval *val, zval *track_vars_array);
PHPAPI void php_register_known_variable(const char *var, size_t var_len, zval *value, zval *track_vars_array);

PHPAPI void php_build_argv(const char *s, zval *track_vars_array);
PHPAPI zend_result php_hash_environment(void);
END_EXTERN_C()

#define NUM_TRACK_VARS	6

#endif /* PHP_VARIABLES_H */
main/php_ini_builder.h000064400000005356151730543050011011 0ustar00/*
   +----------------------------------------------------------------------+
   | Copyright (c) The PHP Group                                          |
   +----------------------------------------------------------------------+
   | This source file is subject to version 3.01 of the PHP license,      |
   | that is bundled with this package in the file LICENSE, and is        |
   | available through the world-wide-web at the following url:           |
   | https://www.php.net/license/3_01.txt                                 |
   | If you did not receive a copy of the PHP license and are unable to   |
   | obtain it through the world-wide-web, please send a note to          |
   | license@php.net so we can mail you a copy immediately.               |
   +----------------------------------------------------------------------+
   | Authors: Max Kellermann <max.kellermann@ionos.com>                   |
   +----------------------------------------------------------------------+
*/

#ifndef PHP_INI_BUILDER_H
#define PHP_INI_BUILDER_H

#include "php.h"

/**
 * A class which helps with constructing INI entries from the command
 * line.
 */
struct php_ini_builder {
	char *value;
	size_t length;
};

BEGIN_EXTERN_C()

static inline void php_ini_builder_init(struct php_ini_builder *b)
{
	b->value = NULL;
	b->length = 0;
}

static inline void php_ini_builder_deinit(struct php_ini_builder *b)
{
	free(b->value);
}

/**
 * Null-terminate the buffer and return it.
 */
static inline char *php_ini_builder_finish(struct php_ini_builder *b)
{
	if (b->value != NULL) {
		/* null-terminate the string */
		b->value[b->length] = '\0';
	}

	return b->value;
}

/**
 * Make room for more data.
 *
 * @param delta the number of bytes to be appended
 */
static inline void php_ini_builder_realloc(struct php_ini_builder *b, size_t delta)
{
	/* reserve enough space for the null terminator */
	b->value = realloc(b->value, b->length + delta + 1);
}

/**
 * Prepend a string.
 *
 * @param src the source string
 * @param length the size of the source string
 */
PHPAPI void php_ini_builder_prepend(struct php_ini_builder *b, const char *src, size_t length);

#define php_ini_builder_prepend_literal(b, l) php_ini_builder_prepend(b, l, strlen(l))

/**
 * Append an unquoted name/value pair.
 */
PHPAPI void php_ini_builder_unquoted(struct php_ini_builder *b, const char *name, size_t name_length, const char *value, size_t value_length);

/**
 * Append a quoted name/value pair.
 */
PHPAPI void php_ini_builder_quoted(struct php_ini_builder *b, const char *name, size_t name_length, const char *value, size_t value_length);

/**
 * Parse an INI entry from the command-line option "--define".
 */
PHPAPI void php_ini_builder_define(struct php_ini_builder *b, const char *arg);

END_EXTERN_C()

#endif
main/php_network.h000064400000025260151730543050010211 0ustar00/*
   +----------------------------------------------------------------------+
   | Copyright (c) The PHP Group                                          |
   +----------------------------------------------------------------------+
   | This source file is subject to version 3.01 of the PHP license,      |
   | that is bundled with this package in the file LICENSE, and is        |
   | available through the world-wide-web at the following url:           |
   | https://www.php.net/license/3_01.txt                                 |
   | If you did not receive a copy of the PHP license and are unable to   |
   | obtain it through the world-wide-web, please send a note to          |
   | license@php.net so we can mail you a copy immediately.               |
   +----------------------------------------------------------------------+
   | Author: Stig Venaas <venaas@uninett.no>                              |
   +----------------------------------------------------------------------+
 */

#ifndef _PHP_NETWORK_H
#define _PHP_NETWORK_H

#include <php.h>

#ifndef PHP_WIN32
# undef closesocket
# define closesocket close
# include <netinet/tcp.h>
#endif

#ifndef HAVE_SHUTDOWN
#undef shutdown
#define shutdown(s,n)	/* nothing */
#endif

#ifdef PHP_WIN32
# ifdef EWOULDBLOCK
#  undef EWOULDBLOCK
# endif
# ifdef EINPROGRESS
#  undef EINPROGRESS
# endif
# define EWOULDBLOCK WSAEWOULDBLOCK
# define EINPROGRESS	WSAEWOULDBLOCK
# define fsync _commit
# define ftruncate(a, b) chsize(a, b)
#endif /* defined(PHP_WIN32) */

#ifndef EWOULDBLOCK
# define EWOULDBLOCK EAGAIN
#endif

/* This is a workaround for GCC bug 69602: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=69602 */
#if EAGAIN != EWOULDBLOCK
# define PHP_IS_TRANSIENT_ERROR(err) (err == EAGAIN || err == EWOULDBLOCK)
#else
# define PHP_IS_TRANSIENT_ERROR(err) (err == EAGAIN)
#endif

#ifdef PHP_WIN32
#define php_socket_errno() WSAGetLastError()
#else
#define php_socket_errno() errno
#endif

/* like strerror, but caller must efree the returned string,
 * unless buf is not NULL.
 * Also works sensibly for win32 */
BEGIN_EXTERN_C()
#ifdef PHP_WIN32
char *php_socket_strerror_s(long err, char *buf, size_t bufsize);
#else
#define php_socket_strerror_s php_socket_strerror
#endif
PHPAPI char *php_socket_strerror(long err, char *buf, size_t bufsize);
PHPAPI zend_string *php_socket_error_str(long err);
END_EXTERN_C()

#ifdef HAVE_NETINET_IN_H
# include <netinet/in.h>
#endif

#ifdef HAVE_SYS_SOCKET_H
#include <sys/socket.h>
#endif

#ifdef HAVE_GETHOSTBYNAME_R
#include <netdb.h>
#endif

/* These are here, rather than with the win32 counterparts above,
 * since <sys/socket.h> defines them. */
#ifndef SHUT_RD
# define SHUT_RD 0
# define SHUT_WR 1
# define SHUT_RDWR 2
#endif

#ifdef HAVE_SYS_TIME_H
#include <sys/time.h>
#endif

#include <stddef.h>

#ifdef PHP_WIN32
typedef SOCKET php_socket_t;
#define PHP_SOCKET_FMT "%" PRIxPTR
#else
typedef int php_socket_t;
#define PHP_SOCKET_FMT "%d"
#endif

#ifdef PHP_WIN32
# define SOCK_ERR INVALID_SOCKET
# define SOCK_CONN_ERR SOCKET_ERROR
# define SOCK_RECV_ERR SOCKET_ERROR
#else
# define SOCK_ERR -1
# define SOCK_CONN_ERR -1
# define SOCK_RECV_ERR -1
#endif

#define STREAM_SOCKOP_NONE                (1 << 0)
#define STREAM_SOCKOP_SO_REUSEPORT        (1 << 1)
#define STREAM_SOCKOP_SO_BROADCAST        (1 << 2)
#define STREAM_SOCKOP_IPV6_V6ONLY         (1 << 3)
#define STREAM_SOCKOP_IPV6_V6ONLY_ENABLED (1 << 4)
#define STREAM_SOCKOP_TCP_NODELAY         (1 << 5)


/* uncomment this to debug poll(2) emulation on systems that have poll(2) */
/* #define PHP_USE_POLL_2_EMULATION 1 */

#if defined(HAVE_POLL)
# if defined(HAVE_POLL_H)
#  include <poll.h>
# elif defined(HAVE_SYS_POLL_H)
#  include <sys/poll.h>
# endif
typedef struct pollfd php_pollfd;
#else
typedef struct _php_pollfd {
	php_socket_t fd;
	short events;
	short revents;
} php_pollfd;

PHPAPI int php_poll2(php_pollfd *ufds, unsigned int nfds, int timeout);

#ifndef POLLIN
# define POLLIN      0x0001    /* There is data to read */
# define POLLPRI     0x0002    /* There is urgent data to read */
# define POLLOUT     0x0004    /* Writing now will not block */
# define POLLERR     0x0008    /* Error condition */
# define POLLHUP     0x0010    /* Hung up */
# define POLLNVAL    0x0020    /* Invalid request: fd not open */
#endif

# ifndef PHP_USE_POLL_2_EMULATION
#  define PHP_USE_POLL_2_EMULATION 1
# endif
#endif

#define PHP_POLLREADABLE	(POLLIN|POLLERR|POLLHUP)

#ifndef PHP_USE_POLL_2_EMULATION
# define php_poll2(ufds, nfds, timeout)		poll(ufds, nfds, timeout)
#endif

/* timeval-to-timeout (for poll(2)) */
static inline int php_tvtoto(struct timeval *timeouttv)
{
	if (timeouttv && timeouttv->tv_sec >= 0 && timeouttv->tv_sec <= ((INT_MAX - 1000) / 1000)) {
		return (timeouttv->tv_sec * 1000) + (timeouttv->tv_usec / 1000);
	}
	return -1;
}

/* hybrid select(2)/poll(2) for a single descriptor.
 * timeouttv follows same rules as select(2), but is reduced to millisecond accuracy.
 * Returns 0 on timeout, -1 on error, or the event mask (ala poll(2)).
 */
static inline int php_pollfd_for(php_socket_t fd, int events, struct timeval *timeouttv)
{
	php_pollfd p;
	int n;

	p.fd = fd;
	p.events = events;
	p.revents = 0;

	n = php_poll2(&p, 1, php_tvtoto(timeouttv));

	if (n > 0) {
		return p.revents;
	}

	return n;
}

static inline int php_pollfd_for_ms(php_socket_t fd, int events, int timeout)
{
	php_pollfd p;
	int n;

	p.fd = fd;
	p.events = events;
	p.revents = 0;

	n = php_poll2(&p, 1, timeout);

	if (n > 0) {
		return p.revents;
	}

	return n;
}

/* emit warning and suggestion for unsafe select(2) usage */
PHPAPI void _php_emit_fd_setsize_warning(int max_fd);

static inline bool _php_check_fd_setsize(php_socket_t *max_fd, int setsize)
{
#ifdef PHP_WIN32
	(void)(max_fd); // Unused
	if (setsize + 1 >= FD_SETSIZE) {
		_php_emit_fd_setsize_warning(setsize);
		return false;
	}
#else
	(void)(setsize); // Unused
	if (*max_fd >= FD_SETSIZE) {
		_php_emit_fd_setsize_warning(*max_fd);
		*max_fd = FD_SETSIZE - 1;
		return false;
	}
#endif
	return true;
}

#ifdef PHP_WIN32
/* it is safe to FD_SET too many fd's under win32; the macro will simply ignore
 * descriptors that go beyond the default FD_SETSIZE */
# define PHP_SAFE_FD_SET(fd, set)	FD_SET(fd, set)
# define PHP_SAFE_FD_CLR(fd, set)	FD_CLR(fd, set)
# define PHP_SAFE_FD_ISSET(fd, set)	FD_ISSET(fd, set)
# define PHP_SAFE_MAX_FD(m, n)		_php_check_fd_setsize(&m, n)
#else
# define PHP_SAFE_FD_SET(fd, set)	do { if (fd < FD_SETSIZE) FD_SET(fd, set); } while(0)
# define PHP_SAFE_FD_CLR(fd, set)	do { if (fd < FD_SETSIZE) FD_CLR(fd, set); } while(0)
# define PHP_SAFE_FD_ISSET(fd, set)	((fd < FD_SETSIZE) && FD_ISSET(fd, set))
# define PHP_SAFE_MAX_FD(m, n)		_php_check_fd_setsize(&m, n)
#endif


#define PHP_SOCK_CHUNK_SIZE	8192

#ifdef HAVE_STRUCT_SOCKADDR_STORAGE
typedef struct sockaddr_storage php_sockaddr_storage;
#else
typedef struct {
#ifdef HAVE_STRUCT_SOCKADDR_SA_LEN
		unsigned char ss_len;
		unsigned char ss_family;
#else
        unsigned short ss_family;
#endif
        char info[126];
} php_sockaddr_storage;
#endif

BEGIN_EXTERN_C()
PHPAPI int php_network_getaddresses(const char *host, int socktype, struct sockaddr ***sal, zend_string **error_string);
PHPAPI void php_network_freeaddresses(struct sockaddr **sal);

PHPAPI php_socket_t php_network_connect_socket_to_host(const char *host, unsigned short port,
		int socktype, int asynchronous, struct timeval *timeout, zend_string **error_string,
		int *error_code, const char *bindto, unsigned short bindport, long sockopts
		);

PHPAPI int php_network_connect_socket(php_socket_t sockfd,
		const struct sockaddr *addr,
		socklen_t addrlen,
		int asynchronous,
		struct timeval *timeout,
		zend_string **error_string,
		int *error_code);

#define php_connect_nonb(sock, addr, addrlen, timeout) \
	php_network_connect_socket((sock), (addr), (addrlen), 0, (timeout), NULL, NULL)

PHPAPI php_socket_t php_network_bind_socket_to_local_addr(const char *host, unsigned port,
		int socktype, long sockopts, zend_string **error_string, int *error_code
		);

PHPAPI php_socket_t php_network_accept_incoming(php_socket_t srvsock,
		zend_string **textaddr,
		struct sockaddr **addr,
		socklen_t *addrlen,
		struct timeval *timeout,
		zend_string **error_string,
		int *error_code,
		int tcp_nodelay
		);

PHPAPI int php_network_get_sock_name(php_socket_t sock,
		zend_string **textaddr,
		struct sockaddr **addr,
		socklen_t *addrlen
		);

PHPAPI int php_network_get_peer_name(php_socket_t sock,
		zend_string **textaddr,
		struct sockaddr **addr,
		socklen_t *addrlen
		);

PHPAPI void php_any_addr(int family, php_sockaddr_storage *addr, unsigned short port);
PHPAPI socklen_t php_sockaddr_size(php_sockaddr_storage *addr);
END_EXTERN_C()

struct _php_netstream_data_t	{
	php_socket_t socket;
	bool is_blocked;
	bool timeout_event;
	struct timeval timeout;
	size_t ownsize;
};
typedef struct _php_netstream_data_t php_netstream_data_t;
PHPAPI extern const php_stream_ops php_stream_socket_ops;
extern const php_stream_ops php_stream_generic_socket_ops;
#define PHP_STREAM_IS_SOCKET	(&php_stream_socket_ops)

BEGIN_EXTERN_C()
PHPAPI php_stream *_php_stream_sock_open_from_socket(php_socket_t socket, const char *persistent_id STREAMS_DC );
/* open a connection to a host using php_hostconnect and return a stream */
PHPAPI php_stream *_php_stream_sock_open_host(const char *host, unsigned short port,
		int socktype, struct timeval *timeout, const char *persistent_id STREAMS_DC);
PHPAPI void php_network_populate_name_from_sockaddr(
		/* input address */
		struct sockaddr *sa, socklen_t sl,
		/* output readable address */
		zend_string **textaddr,
		/* output address */
		struct sockaddr **addr,
		socklen_t *addrlen
		);

PHPAPI zend_result php_network_parse_network_address_with_port(const char *addr,
		size_t addrlen, struct sockaddr *sa, socklen_t *sl);

PHPAPI struct hostent*	php_network_gethostbyname(const char *name);

PHPAPI zend_result php_set_sock_blocking(php_socket_t socketd, bool block);
END_EXTERN_C()

#define php_stream_sock_open_from_socket(socket, persistent)	_php_stream_sock_open_from_socket((socket), (persistent) STREAMS_CC)
#define php_stream_sock_open_host(host, port, socktype, timeout, persistent)	_php_stream_sock_open_host((host), (port), (socktype), (timeout), (persistent) STREAMS_CC)

/* {{{ memory debug */
#define php_stream_sock_open_from_socket_rel(socket, persistent)	_php_stream_sock_open_from_socket((socket), (persistent) STREAMS_REL_CC)
#define php_stream_sock_open_host_rel(host, port, socktype, timeout, persistent)	_php_stream_sock_open_host((host), (port), (socktype), (timeout), (persistent) STREAMS_REL_CC)
#define php_stream_sock_open_unix_rel(path, pathlen, persistent, timeval)	_php_stream_sock_open_unix((path), (pathlen), (persistent), (timeval) STREAMS_REL_CC)

/* }}} */

#ifndef MAXFQDNLEN
#define MAXFQDNLEN 255
#endif

#endif /* _PHP_NETWORK_H */
main/php_odbc_utils.h000064400000002422151730543050010642 0ustar00/*
   +----------------------------------------------------------------------+
   | Copyright (c) The PHP Group                                          |
   +----------------------------------------------------------------------+
   | This source file is subject to version 3.01 of the PHP license,      |
   | that is bundled with this package in the file LICENSE, and is        |
   | available through the world-wide-web at the following url:           |
   | https://www.php.net/license/3_01.txt                                 |
   | If you did not receive a copy of the PHP license and are unable to   |
   | obtain it through the world-wide-web, please send a note to          |
   | license@php.net so we can mail you a copy immediately.               |
   +----------------------------------------------------------------------+
   | Authors: Calvin Buckley <calvin@cmpct.info>                          |
   +----------------------------------------------------------------------+
*/

#include "php.h"

PHPAPI bool php_odbc_connstr_is_quoted(const char *str);
PHPAPI bool php_odbc_connstr_should_quote(const char *str);
PHPAPI size_t php_odbc_connstr_estimate_quote_length(const char *in_str);
PHPAPI size_t php_odbc_connstr_quote(char *out_str, const char *in_str, size_t out_str_size);
main/php_streams.h000064400000077203151730543050010202 0ustar00/*
   +----------------------------------------------------------------------+
   | Copyright (c) The PHP Group                                          |
   +----------------------------------------------------------------------+
   | This source file is subject to version 3.01 of the PHP license,      |
   | that is bundled with this package in the file LICENSE, and is        |
   | available through the world-wide-web at the following url:           |
   | https://www.php.net/license/3_01.txt                                 |
   | If you did not receive a copy of the PHP license and are unable to   |
   | obtain it through the world-wide-web, please send a note to          |
   | license@php.net so we can mail you a copy immediately.               |
   +----------------------------------------------------------------------+
   | Author: Wez Furlong (wez@thebrainroom.com)                           |
   +----------------------------------------------------------------------+
 */

#ifndef PHP_STREAMS_H
#define PHP_STREAMS_H

#ifdef HAVE_SYS_TIME_H
#include <sys/time.h>
#endif
#include <sys/types.h>
#include <sys/stat.h>
#include "zend.h"
#include "zend_stream.h"

BEGIN_EXTERN_C()
PHPAPI int php_file_le_stream(void);
PHPAPI int php_file_le_pstream(void);
PHPAPI int php_file_le_stream_filter(void);
END_EXTERN_C()

/* {{{ Streams memory debugging stuff */

#if ZEND_DEBUG
/* these have more of a dependency on the definitions of the zend macros than
 * I would prefer, but doing it this way saves loads of idefs :-/ */
# define STREAMS_D			int __php_stream_call_depth ZEND_FILE_LINE_DC ZEND_FILE_LINE_ORIG_DC
# define STREAMS_C			0 ZEND_FILE_LINE_CC ZEND_FILE_LINE_EMPTY_CC
# define STREAMS_REL_C		__php_stream_call_depth + 1 ZEND_FILE_LINE_CC, \
	__php_stream_call_depth ? __zend_orig_filename : __zend_filename, \
	__php_stream_call_depth ? __zend_orig_lineno : __zend_lineno

# define STREAMS_DC		, STREAMS_D
# define STREAMS_CC		, STREAMS_C
# define STREAMS_REL_CC	, STREAMS_REL_C

#else
# define STREAMS_D
# define STREAMS_C
# define STREAMS_REL_C
# define STREAMS_DC
# define STREAMS_CC
# define STREAMS_REL_CC
#endif

/* these functions relay the file/line number information. They are depth aware, so they will pass
 * the ultimate ancestor, which is useful, because there can be several layers of calls */
#define php_stream_alloc_rel(ops, thisptr, persistent, mode) _php_stream_alloc((ops), (thisptr), (persistent), (mode) STREAMS_REL_CC)

#define php_stream_copy_to_mem_rel(src, maxlen, persistent) _php_stream_copy_to_mem((src), (buf), (maxlen), (persistent) STREAMS_REL_CC)

#define php_stream_fopen_rel(filename, mode, opened, options) _php_stream_fopen((filename), (mode), (opened), (options) STREAMS_REL_CC)

#define php_stream_fopen_with_path_rel(filename, mode, path, opened, options) _php_stream_fopen_with_path((filename), (mode), (path), (opened), (options) STREAMS_REL_CC)

#define php_stream_fopen_from_fd_rel(fd, mode, persistent_id, zero_position)	 _php_stream_fopen_from_fd((fd), (mode), (persistent_id), (zero_position) STREAMS_REL_CC)
#define php_stream_fopen_from_file_rel(file, mode)	 _php_stream_fopen_from_file((file), (mode) STREAMS_REL_CC)

#define php_stream_fopen_from_pipe_rel(file, mode)	 _php_stream_fopen_from_pipe((file), (mode) STREAMS_REL_CC)

#define php_stream_fopen_tmpfile_rel()	_php_stream_fopen_tmpfile(0 STREAMS_REL_CC)

#define php_stream_fopen_temporary_file_rel(dir, pfx, opened_path)	_php_stream_fopen_temporary_file((dir), (pfx), (opened_path) STREAMS_REL_CC)

#define php_stream_open_wrapper_rel(path, mode, options, opened) _php_stream_open_wrapper_ex((path), (mode), (options), (opened), NULL STREAMS_REL_CC)
#define php_stream_open_wrapper_ex_rel(path, mode, options, opened, context) _php_stream_open_wrapper_ex((path), (mode), (options), (opened), (context) STREAMS_REL_CC)

#define php_stream_make_seekable_rel(origstream, newstream, flags) _php_stream_make_seekable((origstream), (newstream), (flags) STREAMS_REL_CC)

/* }}} */

/* The contents of the php_stream_ops and php_stream should only be accessed
 * using the functions/macros in this header.
 * If you need to get at something that doesn't have an API,
 * drop me a line <wez@thebrainroom.com> and we can sort out a way to do
 * it properly.
 *
 * The only exceptions to this rule are that stream implementations can use
 * the php_stream->abstract pointer to hold their context, and streams
 * opened via stream_open_wrappers can use the zval ptr in
 * php_stream->wrapperdata to hold metadata for php scripts to
 * retrieve using file_get_wrapper_data(). */

typedef struct _php_stream php_stream;
typedef struct _php_stream_wrapper php_stream_wrapper;
typedef struct _php_stream_context php_stream_context;
typedef struct _php_stream_filter php_stream_filter;

#include "streams/php_stream_context.h"
#include "streams/php_stream_filter_api.h"

typedef struct _php_stream_statbuf {
	zend_stat_t sb; /* regular info */
	/* extended info to go here some day: content-type etc. etc. */
} php_stream_statbuf;

typedef struct _php_stream_dirent {
	char d_name[MAXPATHLEN];
	unsigned char d_type;
} php_stream_dirent;

/* operations on streams that are file-handles */
typedef struct _php_stream_ops  {
	/* stdio like functions - these are mandatory! */
	ssize_t (*write)(php_stream *stream, const char *buf, size_t count);
	ssize_t (*read)(php_stream *stream, char *buf, size_t count);
	int    (*close)(php_stream *stream, int close_handle);
	int    (*flush)(php_stream *stream);

	const char *label; /* label for this ops structure */

	/* these are optional */
	int (*seek)(php_stream *stream, zend_off_t offset, int whence, zend_off_t *newoffset);
	int (*cast)(php_stream *stream, int castas, void **ret);
	int (*stat)(php_stream *stream, php_stream_statbuf *ssb);
	int (*set_option)(php_stream *stream, int option, int value, void *ptrparam);
} php_stream_ops;

typedef struct _php_stream_wrapper_ops {
	/* open/create a wrapped stream */
	php_stream *(*stream_opener)(php_stream_wrapper *wrapper, const char *filename, const char *mode,
			int options, zend_string **opened_path, php_stream_context *context STREAMS_DC);
	/* close/destroy a wrapped stream */
	int (*stream_closer)(php_stream_wrapper *wrapper, php_stream *stream);
	/* stat a wrapped stream */
	int (*stream_stat)(php_stream_wrapper *wrapper, php_stream *stream, php_stream_statbuf *ssb);
	/* stat a URL */
	int (*url_stat)(php_stream_wrapper *wrapper, const char *url, int flags, php_stream_statbuf *ssb, php_stream_context *context);
	/* open a "directory" stream */
	php_stream *(*dir_opener)(php_stream_wrapper *wrapper, const char *filename, const char *mode,
			int options, zend_string **opened_path, php_stream_context *context STREAMS_DC);

	const char *label;

	/* delete a file */
	int (*unlink)(php_stream_wrapper *wrapper, const char *url, int options, php_stream_context *context);

	/* rename a file */
	int (*rename)(php_stream_wrapper *wrapper, const char *url_from, const char *url_to, int options, php_stream_context *context);

	/* Create/Remove directory */
	int (*stream_mkdir)(php_stream_wrapper *wrapper, const char *url, int mode, int options, php_stream_context *context);
	int (*stream_rmdir)(php_stream_wrapper *wrapper, const char *url, int options, php_stream_context *context);
	/* Metadata handling */
	int (*stream_metadata)(php_stream_wrapper *wrapper, const char *url, int options, void *value, php_stream_context *context);
} php_stream_wrapper_ops;

struct _php_stream_wrapper	{
	const php_stream_wrapper_ops *wops;	/* operations the wrapper can perform */
	void *abstract;					/* context for the wrapper */
	int is_url;						/* so that PG(allow_url_fopen) can be respected */
};

#define PHP_STREAM_FLAG_NO_SEEK						0x1
#define PHP_STREAM_FLAG_NO_BUFFER					0x2

#define PHP_STREAM_FLAG_EOL_UNIX					0x0 /* also includes DOS */
#define PHP_STREAM_FLAG_DETECT_EOL					0x4
#define PHP_STREAM_FLAG_EOL_MAC						0x8

/* set this when the stream might represent "interactive" data.
 * When set, the read buffer will avoid certain operations that
 * might otherwise cause the read to block for much longer than
 * is strictly required. */
#define PHP_STREAM_FLAG_AVOID_BLOCKING					0x10

#define PHP_STREAM_FLAG_NO_CLOSE					0x20

#define PHP_STREAM_FLAG_IS_DIR						0x40

#define PHP_STREAM_FLAG_NO_FCLOSE					0x80

/* Suppress generation of PHP warnings on stream read/write errors.
 * Currently, for internal use only. */
#define PHP_STREAM_FLAG_SUPPRESS_ERRORS				0x100

/* Do not close handle except it is explicitly closed by user (e.g. fclose) */
#define PHP_STREAM_FLAG_NO_RSCR_DTOR_CLOSE			0x200

#define PHP_STREAM_FLAG_NO_IO						0x400

#define PHP_STREAM_FLAG_WAS_WRITTEN					0x80000000

struct _php_stream  {
	const php_stream_ops *ops;
	void *abstract;			/* convenience pointer for abstraction */

	php_stream_filter_chain readfilters, writefilters;

	php_stream_wrapper *wrapper; /* which wrapper was used to open the stream */
	void *wrapperthis;		/* convenience pointer for an instance of a wrapper */
	zval wrapperdata;		/* fgetwrapperdata retrieves this */

	uint16_t is_persistent:1;
	uint16_t in_free:2;			/* to prevent recursion during free */
	uint16_t eof:1;
	uint16_t __exposed:1;	/* non-zero if exposed as a zval somewhere */

	/* so we know how to clean it up correctly.  This should be set to
	 * PHP_STREAM_FCLOSE_XXX as appropriate */
	uint16_t fclose_stdiocast:2;


	/* flag to mark whether the stream has buffered data */
	uint16_t has_buffered_data:1;

	/* whether stdio cast flushing is in progress */
	uint16_t fclose_stdiocast_flush_in_progress:1;

	/* whether fatal error happened and all operations should terminates as soon as possible */
	uint16_t fatal_error:1;

	char mode[16];			/* "rwb" etc. ala stdio */

	uint32_t flags;	/* PHP_STREAM_FLAG_XXX */

	zend_resource *res;		/* used for auto-cleanup */
	FILE *stdiocast;    /* cache this, otherwise we might leak! */
	char *orig_path;

	zend_resource *ctx;

	/* buffer */
	zend_off_t position; /* of underlying stream */
	unsigned char *readbuf;
	size_t readbuflen;
	zend_off_t readpos;
	zend_off_t writepos;

	/* how much data to read when filling buffer */
	size_t chunk_size;

#if ZEND_DEBUG
	const char *open_filename;
	uint32_t open_lineno;
#endif

	struct _php_stream *enclosing_stream; /* this is a private stream owned by enclosing_stream */
}; /* php_stream */

#define PHP_STREAM_CONTEXT(stream) \
	((php_stream_context*) ((stream)->ctx ? ((stream)->ctx->ptr) : NULL))

/* state definitions when closing down; these are private to streams.c */
#define PHP_STREAM_FCLOSE_NONE 0
#define PHP_STREAM_FCLOSE_FDOPEN	1
#define PHP_STREAM_FCLOSE_FOPENCOOKIE 2

/* allocate a new stream for a particular ops */
BEGIN_EXTERN_C()
PHPAPI php_stream *_php_stream_alloc(const php_stream_ops *ops, void *abstract,
		const char *persistent_id, const char *mode STREAMS_DC);
END_EXTERN_C()
#define php_stream_alloc(ops, thisptr, persistent_id, mode)	_php_stream_alloc((ops), (thisptr), (persistent_id), (mode) STREAMS_CC)

#define php_stream_get_resource_id(stream)		((php_stream *)(stream))->res->handle
/* use this to tell the stream that it is OK if we don't explicitly close it */
#define php_stream_auto_cleanup(stream)	{ (stream)->__exposed = 1; }
/* use this to assign the stream to a zval and tell the stream that is
 * has been exported to the engine; it will expect to be closed automatically
 * when the resources are auto-destructed */
#define php_stream_to_zval(stream, zval)	{ ZVAL_RES(zval, (stream)->res); (stream)->__exposed = 1; }

#define php_stream_from_zval(xstr, pzval)	do { \
	if (((xstr) = (php_stream*)zend_fetch_resource2_ex((pzval), \
				"stream", php_file_le_stream(), php_file_le_pstream())) == NULL) { \
		return; \
	} \
} while (0)
#define php_stream_from_res(xstr, res)	do { \
	if (((xstr) = (php_stream*)zend_fetch_resource2((res), \
			   	"stream", php_file_le_stream(), php_file_le_pstream())) == NULL) { \
		return; \
	} \
} while (0)
#define php_stream_from_res_no_verify(xstr, pzval)	(xstr) = (php_stream*)zend_fetch_resource2((res), "stream", php_file_le_stream(), php_file_le_pstream())
#define php_stream_from_zval_no_verify(xstr, pzval)	(xstr) = (php_stream*)zend_fetch_resource2_ex((pzval), "stream", php_file_le_stream(), php_file_le_pstream())

static zend_always_inline php_stream* php_stream_from_zval_no_verify_no_error(zval *zval) {
	return (php_stream*)zend_fetch_resource2_ex(zval, NULL, php_file_le_stream(), php_file_le_pstream());
}

BEGIN_EXTERN_C()

static zend_always_inline bool php_stream_zend_parse_arg_into_stream(
	zval *arg,
	php_stream **destination_stream_ptr,
	bool check_null,
	uint32_t arg_num
) {
	if (EXPECTED(Z_TYPE_P(arg) == IS_RESOURCE)) {
		zend_resource *res = Z_RES_P(arg);
		/* We do not use zend_fetch_resource2() API,
		 * as we want to be able to specify the argument number in the type error */
		if (EXPECTED(res->type == php_file_le_stream() || res->type == php_file_le_pstream())) {
			*destination_stream_ptr = (php_stream*)res->ptr;
			return true;
		} else {
			zend_argument_type_error(arg_num, "must be an open stream resource");
			return false;
		}
	} else if (check_null && EXPECTED(Z_TYPE_P(arg) == IS_NULL)) {
		*destination_stream_ptr = NULL;
	} else {
		return false;
	}
	return true;
}

#define PHP_Z_PARAM_STREAM_EX(destination_stream_ptr, check_null) \
	Z_PARAM_PROLOGUE(0, 0); \
	if (UNEXPECTED(!php_stream_zend_parse_arg_into_stream(_arg, &destination_stream_ptr, check_null, _i))) { \
		_error_code = ZPP_ERROR_FAILURE; \
		if (!EG(exception)) { \
			_expected_type = check_null ? Z_EXPECTED_RESOURCE_OR_NULL : Z_EXPECTED_RESOURCE; \
			_error_code = ZPP_ERROR_WRONG_ARG; \
		} \
		break; \
	}
#define PHP_Z_PARAM_STREAM(dest) PHP_Z_PARAM_STREAM_EX(dest, false)
#define PHP_Z_PARAM_STREAM_OR_NULL(dest) PHP_Z_PARAM_STREAM_EX(dest, true)

PHPAPI php_stream *php_stream_encloses(php_stream *enclosing, php_stream *enclosed);
#define php_stream_free_enclosed(stream_enclosed, close_options) _php_stream_free_enclosed((stream_enclosed), (close_options))
PHPAPI int _php_stream_free_enclosed(php_stream *stream_enclosed, int close_options);

PHPAPI int php_stream_from_persistent_id(const char *persistent_id, php_stream **stream);
#define PHP_STREAM_PERSISTENT_SUCCESS	0 /* id exists */
#define PHP_STREAM_PERSISTENT_FAILURE	1 /* id exists but is not a stream! */
#define PHP_STREAM_PERSISTENT_NOT_EXIST	2 /* id does not exist */

#define PHP_STREAM_FREE_CALL_DTOR			1 /* call ops->close */
#define PHP_STREAM_FREE_RELEASE_STREAM		2 /* pefree(stream) */
#define PHP_STREAM_FREE_PRESERVE_HANDLE		4 /* tell ops->close to not close its underlying handle */
#define PHP_STREAM_FREE_RSRC_DTOR			8 /* called from the resource list dtor */
#define PHP_STREAM_FREE_PERSISTENT			16 /* manually freeing a persistent connection */
#define PHP_STREAM_FREE_IGNORE_ENCLOSING	32 /* don't close the enclosing stream instead */
#define PHP_STREAM_FREE_KEEP_RSRC			64 /* keep associated zend_resource */
#define PHP_STREAM_FREE_CLOSE				(PHP_STREAM_FREE_CALL_DTOR | PHP_STREAM_FREE_RELEASE_STREAM)
#define PHP_STREAM_FREE_CLOSE_CASTED		(PHP_STREAM_FREE_CLOSE | PHP_STREAM_FREE_PRESERVE_HANDLE)
#define PHP_STREAM_FREE_CLOSE_PERSISTENT	(PHP_STREAM_FREE_CLOSE | PHP_STREAM_FREE_PERSISTENT)

PHPAPI int _php_stream_free(php_stream *stream, int close_options);
#define php_stream_free(stream, close_options)	_php_stream_free((stream), (close_options))
#define php_stream_close(stream)	_php_stream_free((stream), PHP_STREAM_FREE_CLOSE)
#define php_stream_pclose(stream)	_php_stream_free((stream), PHP_STREAM_FREE_CLOSE_PERSISTENT)

PHPAPI int _php_stream_seek(php_stream *stream, zend_off_t offset, int whence);
#define php_stream_rewind(stream)	_php_stream_seek((stream), 0L, SEEK_SET)
#define php_stream_seek(stream, offset, whence)	_php_stream_seek((stream), (offset), (whence))

PHPAPI zend_off_t _php_stream_tell(const php_stream *stream);
#define php_stream_tell(stream)	_php_stream_tell((stream))

PHPAPI ssize_t _php_stream_read(php_stream *stream, char *buf, size_t count);
#define php_stream_read(stream, buf, count)		_php_stream_read((stream), (buf), (count))

PHPAPI zend_string *php_stream_read_to_str(php_stream *stream, size_t len);

PHPAPI ssize_t _php_stream_write(php_stream *stream, const char *buf, size_t count);
#define php_stream_write_string(stream, str)	_php_stream_write(stream, str, strlen(str))
#define php_stream_write(stream, buf, count)	_php_stream_write(stream, (buf), (count))

PHPAPI zend_result _php_stream_fill_read_buffer(php_stream *stream, size_t size);
#define php_stream_fill_read_buffer(stream, size)	_php_stream_fill_read_buffer((stream), (size))

PHPAPI ssize_t _php_stream_printf(php_stream *stream, const char *fmt, ...) PHP_ATTRIBUTE_FORMAT(printf, 2, 3);

/* php_stream_printf macro & function require */
#define php_stream_printf _php_stream_printf

PHPAPI bool _php_stream_eof(php_stream *stream);
#define php_stream_eof(stream)	_php_stream_eof((stream))

PHPAPI int _php_stream_getc(php_stream *stream);
#define php_stream_getc(stream)	_php_stream_getc((stream))

PHPAPI int _php_stream_putc(php_stream *stream, int c);
#define php_stream_putc(stream, c)	_php_stream_putc((stream), (c))

PHPAPI int _php_stream_flush(php_stream *stream, int closing);
#define php_stream_flush(stream)	_php_stream_flush((stream), 0)

PHPAPI int _php_stream_sync(php_stream *stream, bool data_only);
#define php_stream_sync(stream, d)	    _php_stream_sync((stream), (d))

PHPAPI char *_php_stream_get_line(php_stream *stream, char *buf, size_t maxlen, size_t *returned_len);
#define php_stream_gets(stream, buf, maxlen)	_php_stream_get_line((stream), (buf), (maxlen), NULL)

#define php_stream_get_line(stream, buf, maxlen, retlen) _php_stream_get_line((stream), (buf), (maxlen), (retlen))
PHPAPI zend_string *php_stream_get_record(php_stream *stream, size_t maxlen, const char *delim, size_t delim_len);

/* Returns true if buffer has been appended, false on error */
PHPAPI bool _php_stream_puts(php_stream *stream, const char *buf);
#define php_stream_puts(stream, buf)	_php_stream_puts((stream), (buf))

PHPAPI int _php_stream_stat(php_stream *stream, php_stream_statbuf *ssb);
#define php_stream_stat(stream, ssb)	_php_stream_stat((stream), (ssb))

PHPAPI int _php_stream_stat_path(const char *path, int flags, php_stream_statbuf *ssb, php_stream_context *context);
#define php_stream_stat_path(path, ssb)	_php_stream_stat_path((path), 0, (ssb), NULL)
#define php_stream_stat_path_ex(path, flags, ssb, context)	_php_stream_stat_path((path), (flags), (ssb), (context))

PHPAPI int _php_stream_mkdir(const char *path, int mode, int options, php_stream_context *context);
#define php_stream_mkdir(path, mode, options, context)	_php_stream_mkdir(path, mode, options, context)

PHPAPI int _php_stream_rmdir(const char *path, int options, php_stream_context *context);
#define php_stream_rmdir(path, options, context)	_php_stream_rmdir(path, options, context)

PHPAPI php_stream *_php_stream_opendir(const char *path, int options, php_stream_context *context STREAMS_DC);
#define php_stream_opendir(path, options, context)	_php_stream_opendir((path), (options), (context) STREAMS_CC)
PHPAPI php_stream_dirent *_php_stream_readdir(php_stream *dirstream, php_stream_dirent *ent);
#define php_stream_readdir(dirstream, dirent)	_php_stream_readdir((dirstream), (dirent))
#define php_stream_closedir(dirstream)	php_stream_close((dirstream))
#define php_stream_rewinddir(dirstream)	php_stream_rewind((dirstream))

PHPAPI int php_stream_dirent_alphasort(const zend_string **a, const zend_string **b);
PHPAPI int php_stream_dirent_alphasortr(const zend_string **a, const zend_string **b);

PHPAPI int _php_stream_scandir(const char *dirname, zend_string **namelist[], int flags, php_stream_context *context,
			int (*compare) (const zend_string **a, const zend_string **b));
#define php_stream_scandir(dirname, namelist, context, compare) _php_stream_scandir((dirname), (namelist), 0, (context), (compare))

PHPAPI int _php_stream_set_option(php_stream *stream, int option, int value, void *ptrparam);
#define php_stream_set_option(stream, option, value, ptrvalue)	_php_stream_set_option((stream), (option), (value), (ptrvalue))

#define php_stream_set_chunk_size(stream, size) _php_stream_set_option((stream), PHP_STREAM_OPTION_SET_CHUNK_SIZE, (size), NULL)

END_EXTERN_C()


/* Flags for mkdir method in wrapper ops */
#define PHP_STREAM_MKDIR_RECURSIVE	1
/* define REPORT ERRORS 8 (below) */

/* Flags for rmdir method in wrapper ops */
/* define REPORT_ERRORS 8 (below) */

/* Flags for url_stat method in wrapper ops */
#define PHP_STREAM_URL_STAT_LINK	1
#define PHP_STREAM_URL_STAT_QUIET	2
#define PHP_STREAM_URL_STAT_IGNORE_OPEN_BASEDIR	4

/* change the blocking mode of stream: value == 1 => blocking, value == 0 => non-blocking. */
#define PHP_STREAM_OPTION_BLOCKING	1

/* change the buffering mode of stream. value is a PHP_STREAM_BUFFER_XXXX value, ptrparam is a ptr to a size_t holding
 * the required buffer size */
#define PHP_STREAM_OPTION_READ_BUFFER	2
#define PHP_STREAM_OPTION_WRITE_BUFFER	3

#define PHP_STREAM_BUFFER_NONE	0	/* unbuffered */
#define PHP_STREAM_BUFFER_LINE	1	/* line buffered */
#define PHP_STREAM_BUFFER_FULL	2	/* fully buffered */

/* set the timeout duration for reads on the stream. ptrparam is a pointer to a struct timeval * */
#define PHP_STREAM_OPTION_READ_TIMEOUT	4
#define PHP_STREAM_OPTION_SET_CHUNK_SIZE	5

/* set or release lock on a stream */
#define PHP_STREAM_OPTION_LOCKING		6

/* whether or not locking is supported */
#define PHP_STREAM_LOCK_SUPPORTED		1

#define php_stream_supports_lock(stream)	(_php_stream_set_option((stream), PHP_STREAM_OPTION_LOCKING, 0, (void *) PHP_STREAM_LOCK_SUPPORTED) == 0 ? 1 : 0)
#define php_stream_lock(stream, mode)		_php_stream_set_option((stream), PHP_STREAM_OPTION_LOCKING, (mode), (void *) NULL)

/* option code used by the php_stream_xport_XXX api */
#define PHP_STREAM_OPTION_XPORT_API			7 /* see php_stream_transport.h */
#define PHP_STREAM_OPTION_CRYPTO_API		8 /* see php_stream_transport.h */
#define PHP_STREAM_OPTION_MMAP_API			9 /* see php_stream_mmap.h */
#define PHP_STREAM_OPTION_TRUNCATE_API		10

#define PHP_STREAM_TRUNCATE_SUPPORTED	0
#define PHP_STREAM_TRUNCATE_SET_SIZE	1	/* ptrparam is a pointer to a size_t */

#define php_stream_truncate_supported(stream)	(_php_stream_set_option((stream), PHP_STREAM_OPTION_TRUNCATE_API, PHP_STREAM_TRUNCATE_SUPPORTED, NULL) == PHP_STREAM_OPTION_RETURN_OK ? 1 : 0)

BEGIN_EXTERN_C()
PHPAPI int _php_stream_truncate_set_size(php_stream *stream, size_t newsize);
#define php_stream_truncate_set_size(stream, size)	_php_stream_truncate_set_size((stream), (size))
END_EXTERN_C()

#define PHP_STREAM_OPTION_META_DATA_API		11 /* ptrparam is a zval* to which to add metadata information */
#define php_stream_populate_meta_data(stream, zv)	(_php_stream_set_option((stream), PHP_STREAM_OPTION_META_DATA_API, 0, zv) == PHP_STREAM_OPTION_RETURN_OK ? 1 : 0)

/* Check if the stream is still "live"; for sockets/pipes this means the socket
 * is still connected; for files, this does not really have meaning */
#define PHP_STREAM_OPTION_CHECK_LIVENESS	12 /* no parameters */

/* Enable/disable blocking reads on anonymous pipes on Windows. */
#define PHP_STREAM_OPTION_PIPE_BLOCKING 13

/* Stream can support fsync operation */
#define PHP_STREAM_OPTION_SYNC_API		14
#define PHP_STREAM_SYNC_SUPPORTED	0
#define PHP_STREAM_SYNC_FSYNC 1
#define PHP_STREAM_SYNC_FDSYNC 2

#define php_stream_sync_supported(stream)	(_php_stream_set_option((stream), PHP_STREAM_OPTION_SYNC_API, PHP_STREAM_SYNC_SUPPORTED, NULL) == PHP_STREAM_OPTION_RETURN_OK ? 1 : 0)


#define PHP_STREAM_OPTION_RETURN_OK			 0 /* option set OK */
#define PHP_STREAM_OPTION_RETURN_ERR		-1 /* problem setting option */
#define PHP_STREAM_OPTION_RETURN_NOTIMPL	-2 /* underlying stream does not implement; streams can handle it instead */

/* copy up to maxlen bytes from src to dest.  If maxlen is PHP_STREAM_COPY_ALL,
 * copy until eof(src). */
#define PHP_STREAM_COPY_ALL		((size_t)-1)

BEGIN_EXTERN_C()
ZEND_ATTRIBUTE_DEPRECATED
PHPAPI size_t _php_stream_copy_to_stream(php_stream *src, php_stream *dest, size_t maxlen STREAMS_DC);
#define php_stream_copy_to_stream(src, dest, maxlen)	_php_stream_copy_to_stream((src), (dest), (maxlen) STREAMS_CC)
PHPAPI zend_result _php_stream_copy_to_stream_ex(php_stream *src, php_stream *dest, size_t maxlen, size_t *len STREAMS_DC);
#define php_stream_copy_to_stream_ex(src, dest, maxlen, len)	_php_stream_copy_to_stream_ex((src), (dest), (maxlen), (len) STREAMS_CC)


/* read all data from stream and put into a buffer. Caller must free buffer
 * when done. */
PHPAPI zend_string *_php_stream_copy_to_mem(php_stream *src, size_t maxlen, bool persistent STREAMS_DC);
#define php_stream_copy_to_mem(src, maxlen, persistent) _php_stream_copy_to_mem((src), (maxlen), (persistent) STREAMS_CC)

/* output all data from a stream */
PHPAPI ssize_t _php_stream_passthru(php_stream * src STREAMS_DC);
#define php_stream_passthru(stream)	_php_stream_passthru((stream) STREAMS_CC)
END_EXTERN_C()

#include "streams/php_stream_transport.h"
#include "streams/php_stream_plain_wrapper.h"
#include "streams/php_stream_glob_wrapper.h"
#include "streams/php_stream_userspace.h"
#include "streams/php_stream_mmap.h"

/* coerce the stream into some other form */
/* cast as a stdio FILE * */
#define PHP_STREAM_AS_STDIO     0
/* cast as a POSIX fd or socketd */
#define PHP_STREAM_AS_FD		1
/* cast as a socketd */
#define PHP_STREAM_AS_SOCKETD	2
/* cast as fd/socket for select purposes */
#define PHP_STREAM_AS_FD_FOR_SELECT 3

/* try really, really hard to make sure the cast happens (avoid using this flag if possible) */
#define PHP_STREAM_CAST_TRY_HARD	0x80000000
#define PHP_STREAM_CAST_RELEASE		0x40000000	/* stream becomes invalid on success */
#define PHP_STREAM_CAST_INTERNAL	0x20000000	/* stream cast for internal use */
#define PHP_STREAM_CAST_MASK		(PHP_STREAM_CAST_TRY_HARD | PHP_STREAM_CAST_RELEASE | PHP_STREAM_CAST_INTERNAL)
BEGIN_EXTERN_C()
PHPAPI zend_result _php_stream_cast(php_stream *stream, int castas, void **ret, int show_err);
END_EXTERN_C()
/* use this to check if a stream can be cast into another form */
#define php_stream_can_cast(stream, as)	_php_stream_cast((stream), (as), NULL, 0)
#define php_stream_cast(stream, as, ret, show_err)	_php_stream_cast((stream), (as), (ret), (show_err))

/* use this to check if a stream is of a particular type:
 * PHPAPI int php_stream_is(php_stream *stream, php_stream_ops *ops); */
#define php_stream_is(stream, anops)		((stream)->ops == anops)
#define PHP_STREAM_IS_STDIO &php_stream_stdio_ops

#define php_stream_is_persistent(stream)	(stream)->is_persistent

/* Wrappers support */

#define IGNORE_PATH                     0x00000000
#define USE_PATH                        0x00000001
#define IGNORE_URL                      0x00000002
#define REPORT_ERRORS                   0x00000008

/* If you don't need to write to the stream, but really need to
 * be able to seek, use this flag in your options. */
#define STREAM_MUST_SEEK                0x00000010
/* If you are going to end up casting the stream into a FILE* or
 * a socket, pass this flag and the streams/wrappers will not use
 * buffering mechanisms while reading the headers, so that HTTP
 * wrapped streams will work consistently.
 * If you omit this flag, streams will use buffering and should end
 * up working more optimally.
 * */
#define STREAM_WILL_CAST                0x00000020

/* this flag applies to php_stream_locate_url_wrapper */
#define STREAM_LOCATE_WRAPPERS_ONLY     0x00000040

/* this flag is only used by include/require functions */
#define STREAM_OPEN_FOR_INCLUDE         0x00000080

/* this flag tells streams to ONLY open urls */
#define STREAM_USE_URL                  0x00000100

/* this flag is used when only the headers from HTTP request are to be fetched */
#define STREAM_ONLY_GET_HEADERS         0x00000200

/* don't apply open_basedir checks */
#define STREAM_DISABLE_OPEN_BASEDIR     0x00000400

/* get (or create) a persistent version of the stream */
#define STREAM_OPEN_PERSISTENT          0x00000800

/* use glob stream for directory open in plain files stream */
#define STREAM_USE_GLOB_DIR_OPEN        0x00001000

/* don't check allow_url_fopen and allow_url_include */
#define STREAM_DISABLE_URL_PROTECTION   0x00002000

/* assume the path passed in exists and is fully expanded, avoiding syscalls */
#define STREAM_ASSUME_REALPATH          0x00004000

/* Allow blocking reads on anonymous pipes on Windows. */
#define STREAM_USE_BLOCKING_PIPE        0x00008000

/* this flag is only used by include/require functions */
#define STREAM_OPEN_FOR_ZEND_STREAM     0x00010000

zend_result php_init_stream_wrappers(int module_number);
void php_shutdown_stream_wrappers(int module_number);
void php_shutdown_stream_hashes(void);
PHP_RSHUTDOWN_FUNCTION(streams);

BEGIN_EXTERN_C()
PHPAPI zend_result php_register_url_stream_wrapper(const char *protocol, const php_stream_wrapper *wrapper);
PHPAPI zend_result php_unregister_url_stream_wrapper(const char *protocol);
PHPAPI zend_result php_register_url_stream_wrapper_volatile(zend_string *protocol, php_stream_wrapper *wrapper);
PHPAPI zend_result php_unregister_url_stream_wrapper_volatile(zend_string *protocol);
PHPAPI php_stream *_php_stream_open_wrapper_ex(const char *path, const char *mode, int options, zend_string **opened_path, php_stream_context *context STREAMS_DC);
PHPAPI php_stream_wrapper *php_stream_locate_url_wrapper(const char *path, const char **path_for_open, int options);
PHPAPI const char *php_stream_locate_eol(php_stream *stream, zend_string *buf);

#define php_stream_open_wrapper(path, mode, options, opened)	_php_stream_open_wrapper_ex((path), (mode), (options), (opened), NULL STREAMS_CC)
#define php_stream_open_wrapper_ex(path, mode, options, opened, context)	_php_stream_open_wrapper_ex((path), (mode), (options), (opened), (context) STREAMS_CC)

/* pushes an error message onto the stack for a wrapper instance */
PHPAPI void php_stream_wrapper_log_error(const php_stream_wrapper *wrapper, int options, const char *fmt, ...) PHP_ATTRIBUTE_FORMAT(printf, 3, 4);

typedef enum {
	PHP_STREAM_UNCHANGED = 0, /* orig stream was seekable anyway */
	PHP_STREAM_RELEASED = 1, /* newstream should be used; origstream is no longer valid */
	PHP_STREAM_FAILED = 2, /* an error occurred while attempting conversion */
	PHP_STREAM_CRITICAL = 3, /* an error occurred; origstream is in an unknown state; you should close origstream */
} php_stream_make_seekable_status;

#define PHP_STREAM_NO_PREFERENCE	0
#define PHP_STREAM_PREFER_STDIO		1
#define PHP_STREAM_FORCE_CONVERSION	2
/* DO NOT call this on streams that are referenced by resources! */
PHPAPI php_stream_make_seekable_status _php_stream_make_seekable(php_stream *origstream, php_stream **newstream, int flags STREAMS_DC);
#define php_stream_make_seekable(origstream, newstream, flags)	_php_stream_make_seekable((origstream), (newstream), (flags) STREAMS_CC)

/* Give other modules access to the url_stream_wrappers_hash and stream_filters_hash */
PHPAPI HashTable *_php_stream_get_url_stream_wrappers_hash(void);
#define php_stream_get_url_stream_wrappers_hash()	_php_stream_get_url_stream_wrappers_hash()
PHPAPI HashTable *php_stream_get_url_stream_wrappers_hash_global(void);
PHPAPI HashTable *_php_get_stream_filters_hash(void);
#define php_get_stream_filters_hash()	_php_get_stream_filters_hash()
PHPAPI HashTable *php_get_stream_filters_hash_global(void);
extern const php_stream_wrapper_ops *php_stream_user_wrapper_ops;

static inline bool php_is_stream_path(const char *filename)
{
	const char *p;

	for (p = filename;
	     (*p >= 'a' && *p <= 'z') ||
	     (*p >= 'A' && *p <= 'Z') ||
	     (*p >= '0' && *p <= '9') ||
	     *p == '+' || *p == '-' || *p == '.';
	     p++);
	return ((p != filename) && (p[0] == ':') && (p[1] == '/') && (p[2] == '/'));
}

END_EXTERN_C()
#endif

/* Definitions for user streams */
#define PHP_STREAM_IS_URL		1

/* Stream metadata definitions */
/* Create if referred resource does not exist */
#define PHP_STREAM_META_TOUCH		1
#define PHP_STREAM_META_OWNER_NAME	2
#define PHP_STREAM_META_OWNER		3
#define PHP_STREAM_META_GROUP_NAME	4
#define PHP_STREAM_META_GROUP		5
#define PHP_STREAM_META_ACCESS		6
main/charclass.h000064400000001215151730543050007606 0ustar00/*
 * Public domain, 2008, Todd C. Miller <millert@openbsd.org>
 *
 * $OpenBSD: charclass.h,v 1.3 2020/10/13 04:42:28 guenther Exp $
 */

/*
 * POSIX character class support for fnmatch() and glob().
 */
static const struct cclass {
	const char *name;
	int (*isctype)(int);
} cclasses[] = {
	{ "alnum",	isalnum },
	{ "alpha",	isalpha },
	{ "blank",	isblank },
	{ "cntrl",	iscntrl },
	{ "digit",	isdigit },
	{ "graph",	isgraph },
	{ "lower",	islower },
	{ "print",	isprint },
	{ "punct",	ispunct },
	{ "space",	isspace },
	{ "upper",	isupper },
	{ "xdigit",	isxdigit },
	{ NULL,		NULL }
};

#define NCCLASSES	(sizeof(cclasses) / sizeof(cclasses[0]) - 1)
main/http_status_codes.h000064400000005522151730543050011407 0ustar00/*
   +----------------------------------------------------------------------+
   | Copyright (c) The PHP Group                                          |
   +----------------------------------------------------------------------+
   | This source file is subject to version 3.01 of the PHP license,      |
   | that is bundled with this package in the file LICENSE, and is        |
   | available through the world-wide-web at the following url:           |
   | https://www.php.net/license/3_01.txt                                 |
   | If you did not receive a copy of the PHP license and are unable to   |
   | obtain it through the world-wide-web, please send a note to          |
   | license@php.net so we can mail you a copy immediately.               |
   +----------------------------------------------------------------------+
   | Author: Andrea Faulds     <ajf@ajf.me>                               |
   +----------------------------------------------------------------------+
*/

#ifndef HTTP_STATUS_CODES_H
#define HTTP_STATUS_CODES_H

typedef struct _http_response_status_code_pair {
	const int code;
	const char *str;
} http_response_status_code_pair;

static const http_response_status_code_pair http_status_map[] = {
	{ 100, "Continue" },
	{ 101, "Switching Protocols" },
	{ 200, "OK" },
	{ 201, "Created" },
	{ 202, "Accepted" },
	{ 203, "Non-Authoritative Information" },
	{ 204, "No Content" },
	{ 205, "Reset Content" },
	{ 206, "Partial Content" },
	{ 300, "Multiple Choices" },
	{ 301, "Moved Permanently" },
	{ 302, "Found" },
	{ 303, "See Other" },
	{ 304, "Not Modified" },
	{ 305, "Use Proxy" },
	{ 307, "Temporary Redirect" },
	{ 308, "Permanent Redirect" },
	{ 400, "Bad Request" },
	{ 401, "Unauthorized" },
	{ 402, "Payment Required" },
	{ 403, "Forbidden" },
	{ 404, "Not Found" },
	{ 405, "Method Not Allowed" },
	{ 406, "Not Acceptable" },
	{ 407, "Proxy Authentication Required" },
	{ 408, "Request Timeout" },
	{ 409, "Conflict" },
	{ 410, "Gone" },
	{ 411, "Length Required" },
	{ 412, "Precondition Failed" },
	{ 413, "Request Entity Too Large" },
	{ 414, "Request-URI Too Long" },
	{ 415, "Unsupported Media Type" },
	{ 416, "Requested Range Not Satisfiable" },
	{ 417, "Expectation Failed" },
	{ 426, "Upgrade Required" },
	{ 428, "Precondition Required" },
	{ 429, "Too Many Requests" },
	{ 431, "Request Header Fields Too Large" },
	{ 451, "Unavailable For Legal Reasons"},
	{ 500, "Internal Server Error" },
	{ 501, "Not Implemented" },
	{ 502, "Bad Gateway" },
	{ 503, "Service Unavailable" },
	{ 504, "Gateway Timeout" },
	{ 505, "HTTP Version Not Supported" },
	{ 506, "Variant Also Negotiates" },
	{ 511, "Network Authentication Required" },
	/* to allow search with while() loop */
	{ 0, NULL }
};

static const size_t http_status_map_len = (sizeof(http_status_map) / sizeof(http_response_status_code_pair)) - 1;

#endif /* HTTP_STATUS_CODES_H */
main/php_getopt.h000064400000003207151730543050010017 0ustar00/*
   +----------------------------------------------------------------------+
   | Copyright (c) The PHP Group                                          |
   +----------------------------------------------------------------------+
   | This source file is subject to version 3.01 of the PHP license,      |
   | that is bundled with this package in the file LICENSE, and is        |
   | available through the world-wide-web at the following url:           |
   | https://www.php.net/license/3_01.txt                                 |
   | If you did not receive a copy of the PHP license and are unable to   |
   | obtain it through the world-wide-web, please send a note to          |
   | license@php.net so we can mail you a copy immediately.               |
   +----------------------------------------------------------------------+
   | Author: Marcus Boerger <helly@php.net>                               |
   +----------------------------------------------------------------------+
*/

#ifndef PHP_GETOPT_H
#define PHP_GETOPT_H

#include "php.h"

/* Define structure for one recognized option (both single char and long name).
 * If short_open is '-' this is the last option. */
typedef struct _opt_struct {
	char opt_char;
	int  need_param;
	char * opt_name;
} opt_struct;

BEGIN_EXTERN_C()
/* holds the index of the latest fetched element from the opts array */
extern PHPAPI int php_optidx;
PHPAPI int php_getopt(int argc, char* const *argv, const opt_struct opts[], char **optarg, int *optind, int show_err, int arg_start);
END_EXTERN_C()

/* php_getopt will return this value if there is an error in arguments */
#define PHP_GETOPT_INVALID_ARG (-2)

#endif
main/rfc1867.h000064400000007233151730543050006751 0ustar00/*
  +----------------------------------------------------------------------+
  | Copyright (c) The PHP Group                                          |
  +----------------------------------------------------------------------+
  | This source file is subject to version 3.01 of the PHP license,      |
  | that is bundled with this package in the file LICENSE, and is        |
  | available through the world-wide-web at the following url:           |
  | https://www.php.net/license/3_01.txt                                 |
  | If you did not receive a copy of the PHP license and are unable to   |
  | obtain it through the world-wide-web, please send a note to          |
  | license@php.net so we can mail you a copy immediately.               |
  +----------------------------------------------------------------------+
  | Author:                                                              |
  +----------------------------------------------------------------------+
*/

#ifndef RFC1867_H
#define RFC1867_H

#include "SAPI.h"

#define MULTIPART_CONTENT_TYPE "multipart/form-data"
#define MULTIPART_EVENT_START		0
#define MULTIPART_EVENT_FORMDATA	1
#define MULTIPART_EVENT_FILE_START	2
#define MULTIPART_EVENT_FILE_DATA	3
#define MULTIPART_EVENT_FILE_END	4
#define MULTIPART_EVENT_END		5

/* Errors */
#define PHP_UPLOAD_ERROR_OK   0  /* File upload successful */
#define PHP_UPLOAD_ERROR_A    1  /* Uploaded file exceeded upload_max_filesize */
#define PHP_UPLOAD_ERROR_B    2  /* Uploaded file exceeded MAX_FILE_SIZE */
#define PHP_UPLOAD_ERROR_C    3  /* Partially uploaded */
#define PHP_UPLOAD_ERROR_D    4  /* No file uploaded */
#define PHP_UPLOAD_ERROR_E    6  /* Missing /tmp or similar directory */
#define PHP_UPLOAD_ERROR_F    7  /* Failed to write file to disk */
#define PHP_UPLOAD_ERROR_X    8  /* File upload stopped by extension */

typedef struct _multipart_event_start {
	size_t	content_length;
} multipart_event_start;

typedef struct _multipart_event_formdata {
	size_t	post_bytes_processed;
	char	*name;
	char	**value;
	size_t	length;
	size_t	*newlength;
} multipart_event_formdata;

typedef struct _multipart_event_file_start {
	size_t	post_bytes_processed;
	char	*name;
	char	**filename;
} multipart_event_file_start;

typedef struct _multipart_event_file_data {
	size_t	post_bytes_processed;
	zend_off_t	offset;
	char	*data;
	size_t	length;
	size_t	*newlength;
} multipart_event_file_data;

typedef struct _multipart_event_file_end {
	size_t	post_bytes_processed;
	char	*temp_filename;
	int	cancel_upload;
} multipart_event_file_end;

typedef struct _multipart_event_end {
	size_t	post_bytes_processed;
} multipart_event_end;

typedef int (*php_rfc1867_encoding_translation_t)(void);
typedef void (*php_rfc1867_get_detect_order_t)(const zend_encoding ***list, size_t *list_size);
typedef void (*php_rfc1867_set_input_encoding_t)(const zend_encoding *encoding);
typedef char* (*php_rfc1867_getword_t)(const zend_encoding *encoding, char **line, char stop);
typedef char* (*php_rfc1867_getword_conf_t)(const zend_encoding *encoding, char *str);
typedef char* (*php_rfc1867_basename_t)(const zend_encoding *encoding, char *str);

SAPI_API SAPI_POST_HANDLER_FUNC(rfc1867_post_handler);

PHPAPI void destroy_uploaded_files_hash(void);
extern PHPAPI zend_result (*php_rfc1867_callback)(unsigned int event, void *event_data, void **extra);

SAPI_API void php_rfc1867_set_multibyte_callbacks(
					php_rfc1867_encoding_translation_t encoding_translation,
					php_rfc1867_get_detect_order_t get_detect_order,
					php_rfc1867_set_input_encoding_t set_input_encoding,
					php_rfc1867_getword_t getword,
					php_rfc1867_getword_conf_t getword_conf,
					php_rfc1867_basename_t basename);

#endif /* RFC1867_H */
main/php_memory_streams.h000064400000006356151730543050011573 0ustar00/*
   +----------------------------------------------------------------------+
   | Copyright (c) The PHP Group                                          |
   +----------------------------------------------------------------------+
   | This source file is subject to version 3.01 of the PHP license,      |
   | that is bundled with this package in the file LICENSE, and is        |
   | available through the world-wide-web at the following url:           |
   | https://www.php.net/license/3_01.txt                                 |
   | If you did not receive a copy of the PHP license and are unable to   |
   | obtain it through the world-wide-web, please send a note to          |
   | license@php.net so we can mail you a copy immediately.               |
   +----------------------------------------------------------------------+
   | Author: Marcus Boerger <helly@php.net>                               |
   +----------------------------------------------------------------------+
 */

#ifndef PHP_MEMORY_STREAM_H
#define PHP_MEMORY_STREAM_H

#include "php_streams.h"

#define PHP_STREAM_MAX_MEM	2 * 1024 * 1024

#define TEMP_STREAM_DEFAULT     0x0
#define TEMP_STREAM_READONLY    0x1
#define TEMP_STREAM_TAKE_BUFFER 0x2
#define TEMP_STREAM_APPEND      0x4

#define php_stream_memory_create(mode) _php_stream_memory_create((mode) STREAMS_CC)
#define php_stream_memory_create_rel(mode) _php_stream_memory_create((mode) STREAMS_REL_CC)
#define php_stream_memory_open(mode, str) _php_stream_memory_open((mode), (str) STREAMS_CC)
#define php_stream_memory_get_buffer(stream) _php_stream_memory_get_buffer((stream) STREAMS_CC)

#define php_stream_temp_new() php_stream_temp_create(TEMP_STREAM_DEFAULT, PHP_STREAM_MAX_MEM)
#define php_stream_temp_create(mode, max_memory_usage) _php_stream_temp_create((mode), (max_memory_usage) STREAMS_CC)
#define php_stream_temp_create_ex(mode, max_memory_usage, tmpdir) _php_stream_temp_create_ex((mode), (max_memory_usage), (tmpdir) STREAMS_CC)
#define php_stream_temp_create_rel(mode, max_memory_usage) _php_stream_temp_create((mode), (max_memory_usage) STREAMS_REL_CC)
#define php_stream_temp_open(mode, max_memory_usage, buf, length) _php_stream_temp_open((mode), (max_memory_usage), (buf), (length) STREAMS_CC)

BEGIN_EXTERN_C()

PHPAPI php_stream *_php_stream_memory_create(int mode STREAMS_DC);
PHPAPI php_stream *_php_stream_memory_open(int mode, zend_string *buf STREAMS_DC);
PHPAPI zend_string *_php_stream_memory_get_buffer(php_stream *stream STREAMS_DC);

PHPAPI php_stream *_php_stream_temp_create(int mode, size_t max_memory_usage STREAMS_DC);
PHPAPI php_stream *_php_stream_temp_create_ex(int mode, size_t max_memory_usage, const char *tmpdir STREAMS_DC);
PHPAPI php_stream *_php_stream_temp_open(int mode, size_t max_memory_usage, const char *buf, size_t length STREAMS_DC);

PHPAPI int php_stream_mode_from_str(const char *mode);
PHPAPI const char *_php_stream_mode_to_str(int mode);

END_EXTERN_C()

extern PHPAPI const php_stream_ops php_stream_memory_ops;
extern PHPAPI const php_stream_ops php_stream_temp_ops;
extern PHPAPI const php_stream_ops php_stream_rfc2397_ops;
extern PHPAPI const php_stream_wrapper php_stream_rfc2397_wrapper;

#define PHP_STREAM_IS_MEMORY &php_stream_memory_ops
#define PHP_STREAM_IS_TEMP   &php_stream_temp_ops

#endif
TSRM/TSRM.h000064400000015443151730543050006301 0ustar00/*
   +----------------------------------------------------------------------+
   | Thread Safe Resource Manager                                         |
   +----------------------------------------------------------------------+
   | Copyright (c) 1999-2011, Andi Gutmans, Sascha Schumann, Zeev Suraski |
   | This source file is subject to the TSRM license, that is bundled     |
   | with this package in the file LICENSE                                |
   +----------------------------------------------------------------------+
   | Authors:  Zeev Suraski <zeev@php.net>                                |
   +----------------------------------------------------------------------+
*/

#ifndef TSRM_H
#define TSRM_H

#if !defined(__CYGWIN__) && defined(_WIN32)
# define TSRM_WIN32
# include <Zend/zend_config.w32.h>
#else
# include <main/php_config.h>
#endif

#include <stdint.h>
#include <stdbool.h>

#ifdef TSRM_WIN32
#	ifdef TSRM_EXPORTS
#		define TSRM_API __declspec(dllexport)
#	else
#		define TSRM_API __declspec(dllimport)
#	endif
#elif defined(__GNUC__) && __GNUC__ >= 4
#	define TSRM_API __attribute__ ((visibility("default")))
#else
#	define TSRM_API
#endif

typedef intptr_t tsrm_intptr_t;
typedef uintptr_t tsrm_uintptr_t;

/* Only compile multi-threading functions if we're in ZTS mode */
#ifdef ZTS

#ifdef TSRM_WIN32
# ifndef TSRM_INCLUDE_FULL_WINDOWS_HEADERS
#  define WIN32_LEAN_AND_MEAN
# endif
#else
# include <pthread.h>
#endif

#if SIZEOF_SIZE_T == 4
# define TSRM_ALIGNED_SIZE(size) \
	(((size) + INT32_C(15)) & ~INT32_C(15))
#else
# define TSRM_ALIGNED_SIZE(size) \
	(((size) + INT64_C(15)) & ~INT64_C(15))
#endif

typedef int ts_rsrc_id;

/* Define THREAD_T and MUTEX_T */
#ifdef TSRM_WIN32
# define THREAD_T DWORD
# define MUTEX_T CRITICAL_SECTION *
#else
# define THREAD_T pthread_t
# define MUTEX_T pthread_mutex_t *
#endif

#include <signal.h>

typedef void (*ts_allocate_ctor)(void *);
typedef void (*ts_allocate_dtor)(void *);

#define THREAD_HASH_OF(thr,ts)  (unsigned long)thr%(unsigned long)ts

#ifdef __cplusplus
extern "C" {
#endif

/* startup/shutdown */
TSRM_API bool tsrm_startup(int expected_threads, int expected_resources, int debug_level, const char *debug_filename);
TSRM_API void tsrm_shutdown(void);

/* environ lock API */
TSRM_API void tsrm_env_lock(void);
TSRM_API void tsrm_env_unlock(void);

/* allocates a new thread-safe-resource id */
TSRM_API ts_rsrc_id ts_allocate_id(ts_rsrc_id *rsrc_id, size_t size, ts_allocate_ctor ctor, ts_allocate_dtor dtor);

/* Fast resource in reserved (pre-allocated) space */
TSRM_API void tsrm_reserve(size_t size);
TSRM_API ts_rsrc_id ts_allocate_fast_id(ts_rsrc_id *rsrc_id, size_t *offset, size_t size, ts_allocate_ctor ctor, ts_allocate_dtor dtor);

/* fetches the requested resource for the current thread */
TSRM_API void *ts_resource_ex(ts_rsrc_id id, THREAD_T *th_id);
#define ts_resource(id)			ts_resource_ex(id, NULL)

/* frees all resources allocated for the current thread */
TSRM_API void ts_free_thread(void);

/* deallocates all occurrences of a given id */
TSRM_API void ts_free_id(ts_rsrc_id id);

/* Runs a callback on all resources of the given id.
 * The caller is responsible for ensuring the underlying resources don't data-race. */
TSRM_API void ts_apply_for_id(ts_rsrc_id id, void (*cb)(void *));

/* Debug support */
#define TSRM_ERROR_LEVEL_ERROR	1
#define TSRM_ERROR_LEVEL_CORE	2
#define TSRM_ERROR_LEVEL_INFO	3

typedef void (*tsrm_thread_begin_func_t)(THREAD_T thread_id);
typedef void (*tsrm_thread_end_func_t)(THREAD_T thread_id);
typedef void (*tsrm_shutdown_func_t)(void);


TSRM_API int tsrm_error(int level, const char *format, ...);
TSRM_API void tsrm_error_set(int level, const char *debug_filename);

/* utility functions */
TSRM_API THREAD_T tsrm_thread_id(void);
TSRM_API MUTEX_T tsrm_mutex_alloc(void);
TSRM_API void tsrm_mutex_free(MUTEX_T mutexp);
TSRM_API int tsrm_mutex_lock(MUTEX_T mutexp);
TSRM_API int tsrm_mutex_unlock(MUTEX_T mutexp);
#ifdef HAVE_SIGPROCMASK
TSRM_API int tsrm_sigmask(int how, const sigset_t *set, sigset_t *oldset);
#endif

TSRM_API void *tsrm_set_new_thread_begin_handler(tsrm_thread_begin_func_t new_thread_begin_handler);
TSRM_API void *tsrm_set_new_thread_end_handler(tsrm_thread_end_func_t new_thread_end_handler);
TSRM_API void *tsrm_set_shutdown_handler(tsrm_shutdown_func_t shutdown_handler);

TSRM_API void *tsrm_get_ls_cache(void);
TSRM_API size_t tsrm_get_ls_cache_tcb_offset(void);
TSRM_API bool tsrm_is_main_thread(void);
TSRM_API bool tsrm_is_shutdown(void);
TSRM_API const char *tsrm_api_name(void);
TSRM_API bool tsrm_is_managed_thread(void);

#ifdef TSRM_WIN32
# define TSRM_TLS __declspec(thread)
#else
# define TSRM_TLS __thread
#endif

#ifndef __has_attribute
# define __has_attribute(x) 0
#endif

#if !__has_attribute(tls_model) || defined(__FreeBSD__) || defined(__NetBSD__) || defined(__MUSL__) || defined(__HAIKU__)
# define TSRM_TLS_MODEL_ATTR
# define TSRM_TLS_MODEL_DEFAULT
#elif __PIC__
# define TSRM_TLS_MODEL_ATTR __attribute__((tls_model("initial-exec")))
# define TSRM_TLS_MODEL_INITIAL_EXEC
#else
# define TSRM_TLS_MODEL_ATTR __attribute__((tls_model("local-exec")))
# define TSRM_TLS_MODEL_LOCAL_EXEC
#endif

#define TSRM_SHUFFLE_RSRC_ID(rsrc_id)		((rsrc_id)+1)
#define TSRM_UNSHUFFLE_RSRC_ID(rsrc_id)		((rsrc_id)-1)

#define TSRMG(id, type, element)	(TSRMG_BULK(id, type)->element)
#define TSRMG_BULK(id, type)	((type) (*((void ***) tsrm_get_ls_cache()))[TSRM_UNSHUFFLE_RSRC_ID(id)])
#define TSRMG_FAST(offset, type, element)	(TSRMG_FAST_BULK(offset, type)->element)
#define TSRMG_FAST_BULK(offset, type)	((type) (((char*) tsrm_get_ls_cache())+(offset)))

#define TSRMG_STATIC(id, type, element)	(TSRMG_BULK_STATIC(id, type)->element)
#define TSRMG_BULK_STATIC(id, type)	((type) (*((void ***) TSRMLS_CACHE))[TSRM_UNSHUFFLE_RSRC_ID(id)])
#define TSRMG_FAST_STATIC(offset, type, element)	(TSRMG_FAST_BULK_STATIC(offset, type)->element)
#define TSRMG_FAST_BULK_STATIC(offset, type)	((type) (((char*) TSRMLS_CACHE)+(offset)))
#define TSRMLS_MAIN_CACHE_EXTERN() extern TSRM_TLS void *TSRMLS_CACHE TSRM_TLS_MODEL_ATTR;
#define TSRMLS_MAIN_CACHE_DEFINE() TSRM_TLS void *TSRMLS_CACHE TSRM_TLS_MODEL_ATTR = NULL;
#define TSRMLS_CACHE_EXTERN() extern TSRM_TLS void *TSRMLS_CACHE;
#define TSRMLS_CACHE_DEFINE() TSRM_TLS void *TSRMLS_CACHE = NULL;
#define TSRMLS_CACHE_UPDATE() TSRMLS_CACHE = tsrm_get_ls_cache()
#define TSRMLS_CACHE _tsrm_ls_cache

#ifdef __cplusplus
}
#endif

#else /* non ZTS */

#define tsrm_env_lock()
#define tsrm_env_unlock()

#define TSRMG_STATIC(id, type, element)
#define TSRMLS_MAIN_CACHE_EXTERN()
#define TSRMLS_MAIN_CACHE_DEFINE()
#define TSRMLS_CACHE_EXTERN()
#define TSRMLS_CACHE_DEFINE()
#define TSRMLS_CACHE_UPDATE()
#define TSRMLS_CACHE

#define TSRM_TLS

#endif /* ZTS */

// Backward compatibility with old modules
#ifndef TSRMLS_C
#define TSRMLS_C
#define TSRMLS_D
#define TSRMLS_CC
#define TSRMLS_DC
#endif

#endif /* TSRM_H */
Zend/zend_API.h000064400000325066151730543050007265 0ustar00/*
   +----------------------------------------------------------------------+
   | Zend Engine                                                          |
   +----------------------------------------------------------------------+
   | Copyright (c) Zend Technologies Ltd. (http://www.zend.com)           |
   +----------------------------------------------------------------------+
   | This source file is subject to version 2.00 of the Zend license,     |
   | that is bundled with this package in the file LICENSE, and is        |
   | available through the world-wide-web at the following url:           |
   | http://www.zend.com/license/2_00.txt.                                |
   | If you did not receive a copy of the Zend license and are unable to  |
   | obtain it through the world-wide-web, please send a note to          |
   | license@zend.com so we can mail you a copy immediately.              |
   +----------------------------------------------------------------------+
   | Authors: Andi Gutmans <andi@php.net>                                 |
   |          Zeev Suraski <zeev@php.net>                                 |
   |          Andrei Zmievski <andrei@php.net>                            |
   |          Dmitry Stogov <dmitry@php.net>                              |
   +----------------------------------------------------------------------+
*/

#ifndef ZEND_API_H
#define ZEND_API_H

#include "zend_modules.h"
#include "zend_list.h"
#include "zend_operators.h"
#include "zend_variables.h"
#include "zend_execute.h"
#include "zend_type_info.h"
#include "zend_frameless_function.h"

BEGIN_EXTERN_C()

typedef struct _zend_function_entry {
	const char *fname;
	zif_handler handler;
	const struct _zend_internal_arg_info *arg_info;
	uint32_t num_args;
	uint32_t flags;
	const zend_frameless_function_info *frameless_function_infos;
	const char *doc_comment;
} zend_function_entry;

typedef struct _zend_fcall_info {
	size_t size;
	zval function_name;
	zval *retval;
	zval *params;
	zend_object *object;
	uint32_t param_count;
	/* This hashtable can also contain positional arguments (with integer keys),
	 * which will be appended to the normal params[]. This makes it easier to
	 * integrate APIs like call_user_func_array(). The usual restriction that
	 * there may not be position arguments after named arguments applies. */
	HashTable *named_params;
} zend_fcall_info;

typedef struct _zend_fcall_info_cache {
	zend_function *function_handler;
	zend_class_entry *calling_scope;
	zend_class_entry *called_scope;
	zend_object *object; /* Instance of object for method calls */
	zend_object *closure; /* Closure reference, only if the callable *is* the object */
} zend_fcall_info_cache;

#define ZEND_NS_NAME(ns, name)			ns "\\" name

/* ZEND_FN/ZEND_MN are inlined below to prevent pre-scan macro expansion,
 * which causes issues if the function name is also a macro name. */
#define ZEND_FN(name) zif_##name
#define ZEND_MN(name) zim_##name

#define ZEND_NAMED_FUNCTION(name)		void ZEND_FASTCALL name(INTERNAL_FUNCTION_PARAMETERS)
#define ZEND_FUNCTION(name)				ZEND_NAMED_FUNCTION(zif_##name)
#define ZEND_METHOD(classname, name)	ZEND_NAMED_FUNCTION(zim_##classname##_##name)

#define ZEND_FENTRY(zend_name, name, arg_info, flags)	{ #zend_name, name, arg_info, (uint32_t) (sizeof(arg_info)/sizeof(struct _zend_internal_arg_info)-1), flags, NULL, NULL },

#define ZEND_RAW_FENTRY(zend_name, name, arg_info, flags, frameless_function_infos, doc_comment)   { zend_name, name, arg_info, (uint32_t) (sizeof(arg_info)/sizeof(struct _zend_internal_arg_info)-1), flags, frameless_function_infos, doc_comment },

/* Same as ZEND_NAMED_FE */
#define ZEND_RAW_NAMED_FE(zend_name, name, arg_info) ZEND_RAW_FENTRY(#zend_name, name, arg_info, 0, NULL, NULL)

#define ZEND_NAMED_FE(zend_name, name, arg_info)	ZEND_RAW_FENTRY(#zend_name, name, arg_info, 0, NULL, NULL)
#define ZEND_FE(name, arg_info)						ZEND_RAW_FENTRY(#name, zif_##name, arg_info, 0, NULL, NULL)
#define ZEND_DEP_FE(name, arg_info)                 ZEND_RAW_FENTRY(#name, zif_##name, arg_info, ZEND_ACC_DEPRECATED, NULL, NULL)
#define ZEND_FALIAS(name, alias, arg_info)			ZEND_RAW_FENTRY(#name, zif_##alias, arg_info, 0, NULL, NULL)
#define ZEND_DEP_FALIAS(name, alias, arg_info)		ZEND_RAW_FENTRY(#name, zif_##alias, arg_info, ZEND_ACC_DEPRECATED, NULL, NULL)
#define ZEND_NAMED_ME(zend_name, name, arg_info, flags)	ZEND_FENTRY(zend_name, name, arg_info, flags)
#define ZEND_ME(classname, name, arg_info, flags)	ZEND_RAW_FENTRY(#name, zim_##classname##_##name, arg_info, flags, NULL, NULL)
#define ZEND_DEP_ME(classname, name, arg_info, flags) ZEND_RAW_FENTRY(#name, zim_##classname##_##name, arg_info, flags | ZEND_ACC_DEPRECATED, NULL, NULL)
#define ZEND_ABSTRACT_ME(classname, name, arg_info)	ZEND_RAW_FENTRY(#name, NULL, arg_info, ZEND_ACC_PUBLIC|ZEND_ACC_ABSTRACT, NULL, NULL)
#define ZEND_ABSTRACT_ME_WITH_FLAGS(classname, name, arg_info, flags)	ZEND_RAW_FENTRY(#name, NULL, arg_info, flags, NULL, NULL)
#define ZEND_MALIAS(classname, name, alias, arg_info, flags) ZEND_RAW_FENTRY(#name, zim_##classname##_##alias, arg_info, flags, NULL, NULL)
#define ZEND_ME_MAPPING(name, func_name, arg_info, flags) ZEND_RAW_FENTRY(#name, zif_##func_name, arg_info, flags, NULL, NULL)
#define ZEND_FRAMELESS_FE(name, arg_info, flags, frameless_function_infos, doc_comment) \
	{ #name, zif_##name, arg_info, (uint32_t) (sizeof(arg_info)/sizeof(struct _zend_internal_arg_info)-1), flags, frameless_function_infos, doc_comment },

#define ZEND_NS_FENTRY(ns, zend_name, name, arg_info, flags)		ZEND_RAW_FENTRY(ZEND_NS_NAME(ns, #zend_name), name, arg_info, flags, NULL, NULL)

#define ZEND_NS_RAW_FENTRY(ns, zend_name, name, arg_info, flags)	ZEND_RAW_FENTRY(ZEND_NS_NAME(ns, zend_name), name, arg_info, flags, NULL, NULL)
/**
 * Note that if you are asserting that a function is compile-time evaluable, you are asserting that
 *
 * 1. The function will always have the same result for the same arguments
 * 2. The function does not depend on global state such as ini settings or locale (e.g. mb_strtolower), number_format(), etc.
 * 3. The function does not have side effects. It is okay if they throw
 *    or warn on invalid arguments, as we detect this and will discard the evaluation result.
 * 4. The function will not take an unreasonable amount of time or memory to compute on code that may be seen in practice.
 *    (e.g. str_repeat is special cased to check the length instead of using this)
 */
#define ZEND_SUPPORTS_COMPILE_TIME_EVAL_FE(name, arg_info) ZEND_RAW_FENTRY(#name, zif_##name, arg_info, ZEND_ACC_COMPILE_TIME_EVAL, NULL, NULL)

/* Same as ZEND_NS_NAMED_FE */
#define ZEND_NS_RAW_NAMED_FE(ns, zend_name, name, arg_info)			ZEND_NS_RAW_FENTRY(ns, #zend_name, name, arg_info, 0)

#define ZEND_NS_NAMED_FE(ns, zend_name, name, arg_info)	ZEND_NS_RAW_FENTRY(ns, #zend_name, name, arg_info, 0)
#define ZEND_NS_FE(ns, name, arg_info)					ZEND_NS_RAW_FENTRY(ns, #name, zif_##name, arg_info, 0)
#define ZEND_NS_DEP_FE(ns, name, arg_info)				ZEND_NS_RAW_FENTRY(ns, #name, zif_##name, arg_info, ZEND_ACC_DEPRECATED)
#define ZEND_NS_FALIAS(ns, name, alias, arg_info)		ZEND_NS_RAW_FENTRY(ns, #name, zif_##alias, arg_info, 0)
#define ZEND_NS_DEP_FALIAS(ns, name, alias, arg_info)	ZEND_NS_RAW_FENTRY(ns, #name, zif_##alias, arg_info, ZEND_ACC_DEPRECATED)

#define ZEND_FE_END            { NULL, NULL, NULL, 0, 0, NULL, NULL }

#define _ZEND_ARG_INFO_FLAGS(pass_by_ref, is_variadic, is_tentative) \
	(((pass_by_ref) << _ZEND_SEND_MODE_SHIFT) | ((is_variadic) ? _ZEND_IS_VARIADIC_BIT : 0) | ((is_tentative) ? _ZEND_IS_TENTATIVE_BIT : 0))

/* Arginfo structures without type information */
#define ZEND_ARG_INFO(pass_by_ref, name) \
	{ #name, ZEND_TYPE_INIT_NONE(_ZEND_ARG_INFO_FLAGS(pass_by_ref, 0, 0)), NULL },
#define ZEND_ARG_INFO_WITH_DEFAULT_VALUE(pass_by_ref, name, default_value) \
	{ #name, ZEND_TYPE_INIT_NONE(_ZEND_ARG_INFO_FLAGS(pass_by_ref, 0, 0)), default_value },
#define ZEND_ARG_VARIADIC_INFO(pass_by_ref, name) \
	{ #name, ZEND_TYPE_INIT_NONE(_ZEND_ARG_INFO_FLAGS(pass_by_ref, 1, 0)), NULL },

/* Arginfo structures with simple type information */
#define ZEND_ARG_TYPE_INFO(pass_by_ref, name, type_hint, allow_null) \
	{ #name, ZEND_TYPE_INIT_CODE(type_hint, allow_null, _ZEND_ARG_INFO_FLAGS(pass_by_ref, 0, 0)), NULL },
#define ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(pass_by_ref, name, type_hint, allow_null, default_value) \
	{ #name, ZEND_TYPE_INIT_CODE(type_hint, allow_null, _ZEND_ARG_INFO_FLAGS(pass_by_ref, 0, 0)), default_value },
#define ZEND_ARG_VARIADIC_TYPE_INFO(pass_by_ref, name, type_hint, allow_null) \
	{ #name, ZEND_TYPE_INIT_CODE(type_hint, allow_null, _ZEND_ARG_INFO_FLAGS(pass_by_ref, 1, 0)), NULL },

/* Arginfo structures with complex type information */
#define ZEND_ARG_TYPE_MASK(pass_by_ref, name, type_mask, default_value) \
	{ #name, ZEND_TYPE_INIT_MASK(type_mask | _ZEND_ARG_INFO_FLAGS(pass_by_ref, 0, 0)), default_value },
#define ZEND_ARG_OBJ_TYPE_MASK(pass_by_ref, name, class_name, type_mask, default_value) \
	{ #name, ZEND_TYPE_INIT_CLASS_CONST_MASK(#class_name, type_mask | _ZEND_ARG_INFO_FLAGS(pass_by_ref, 0, 0)), default_value },
#define ZEND_ARG_VARIADIC_OBJ_TYPE_MASK(pass_by_ref, name, class_name, type_mask) \
	{ #name, ZEND_TYPE_INIT_CLASS_CONST_MASK(#class_name, type_mask | _ZEND_ARG_INFO_FLAGS(pass_by_ref, 1, 0)), NULL },

/* Arginfo structures with object type information */
#define ZEND_ARG_OBJ_INFO(pass_by_ref, name, class_name, allow_null) \
	{ #name, ZEND_TYPE_INIT_CLASS_CONST(#class_name, allow_null, _ZEND_ARG_INFO_FLAGS(pass_by_ref, 0, 0)), NULL },
#define ZEND_ARG_OBJ_INFO_WITH_DEFAULT_VALUE(pass_by_ref, name, class_name, allow_null, default_value) \
	{ #name, ZEND_TYPE_INIT_CLASS_CONST(#class_name, allow_null, _ZEND_ARG_INFO_FLAGS(pass_by_ref, 0, 0)), default_value },
#define ZEND_ARG_VARIADIC_OBJ_INFO(pass_by_ref, name, class_name, allow_null) \
	{ #name, ZEND_TYPE_INIT_CLASS_CONST(#class_name, allow_null, _ZEND_ARG_INFO_FLAGS(pass_by_ref, 1, 0)), NULL },

/* Legacy arginfo structures */
#define ZEND_ARG_ARRAY_INFO(pass_by_ref, name, allow_null) \
	{ #name, ZEND_TYPE_INIT_CODE(IS_ARRAY, allow_null, _ZEND_ARG_INFO_FLAGS(pass_by_ref, 0, 0)), NULL },
#define ZEND_ARG_CALLABLE_INFO(pass_by_ref, name, allow_null) \
	{ #name, ZEND_TYPE_INIT_CODE(IS_CALLABLE, allow_null, _ZEND_ARG_INFO_FLAGS(pass_by_ref, 0, 0)), NULL },

#define ZEND_BEGIN_ARG_WITH_RETURN_OBJ_INFO_EX2(name, return_reference, required_num_args, class_name, allow_null, is_tentative_return_type) \
	static const zend_internal_arg_info name[] = { \
		{ (const char*)(uintptr_t)(required_num_args), \
			ZEND_TYPE_INIT_CLASS_CONST(#class_name, allow_null, _ZEND_ARG_INFO_FLAGS(return_reference, 0, is_tentative_return_type)), NULL },

#define ZEND_BEGIN_ARG_WITH_RETURN_OBJ_INFO_EX(name, return_reference, required_num_args, class_name, allow_null) \
	ZEND_BEGIN_ARG_WITH_RETURN_OBJ_INFO_EX2(name, return_reference, required_num_args, class_name, allow_null, 0)

#define ZEND_BEGIN_ARG_WITH_TENTATIVE_RETURN_OBJ_INFO_EX(name, return_reference, required_num_args, class_name, allow_null) \
	ZEND_BEGIN_ARG_WITH_RETURN_OBJ_INFO_EX2(name, return_reference, required_num_args, class_name, allow_null, 1)

#define ZEND_BEGIN_ARG_WITH_RETURN_OBJ_INFO(name, class_name, allow_null) \
	ZEND_BEGIN_ARG_WITH_RETURN_OBJ_INFO_EX2(name, 0, -1, class_name, allow_null, 0)

#define ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX2(name, return_reference, required_num_args, type, is_tentative_return_type) \
	static const zend_internal_arg_info name[] = { \
		{ (const char*)(uintptr_t)(required_num_args), ZEND_TYPE_INIT_MASK(type | _ZEND_ARG_INFO_FLAGS(return_reference, 0, is_tentative_return_type)), NULL },

#define ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(name, return_reference, required_num_args, type) \
	ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX2(name, return_reference, required_num_args, type, 0)

#define ZEND_BEGIN_ARG_WITH_TENTATIVE_RETURN_TYPE_MASK_EX(name, return_reference, required_num_args, type) \
	ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX2(name, return_reference, required_num_args, type, 1)

#define ZEND_BEGIN_ARG_WITH_RETURN_OBJ_TYPE_MASK_EX2(name, return_reference, required_num_args, class_name, type, is_tentative_return_type) \
	static const zend_internal_arg_info name[] = { \
		{ (const char*)(uintptr_t)(required_num_args), ZEND_TYPE_INIT_CLASS_CONST_MASK(#class_name, type | _ZEND_ARG_INFO_FLAGS(return_reference, 0, is_tentative_return_type)), NULL },

#define ZEND_BEGIN_ARG_WITH_RETURN_OBJ_TYPE_MASK_EX(name, return_reference, required_num_args, class_name, type) \
	ZEND_BEGIN_ARG_WITH_RETURN_OBJ_TYPE_MASK_EX2(name, return_reference, required_num_args, class_name, type, 0)

#define ZEND_BEGIN_ARG_WITH_TENTATIVE_RETURN_OBJ_TYPE_MASK_EX(name, return_reference, required_num_args, class_name, type) \
	ZEND_BEGIN_ARG_WITH_RETURN_OBJ_TYPE_MASK_EX2(name, return_reference, required_num_args, class_name, type, 1)

#define ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX2(name, return_reference, required_num_args, type, allow_null, is_tentative_return_type) \
	static const zend_internal_arg_info name[] = { \
		{ (const char*)(uintptr_t)(required_num_args), ZEND_TYPE_INIT_CODE(type, allow_null, _ZEND_ARG_INFO_FLAGS(return_reference, 0, is_tentative_return_type)), NULL },

#define ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(name, return_reference, required_num_args, type, allow_null) \
	ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX2(name, return_reference, required_num_args, type, allow_null, 0)

#define ZEND_BEGIN_ARG_WITH_TENTATIVE_RETURN_TYPE_INFO_EX(name, return_reference, required_num_args, type, allow_null) \
	ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX2(name, return_reference, required_num_args, type, allow_null, 1)

#define ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO(name, type, allow_null) \
	ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX2(name, 0, -1, type, allow_null, 0)

#define ZEND_BEGIN_ARG_INFO_EX(name, _unused, return_reference, required_num_args)	\
	static const zend_internal_arg_info name[] = { \
		{ (const char*)(uintptr_t)(required_num_args), ZEND_TYPE_INIT_NONE(_ZEND_ARG_INFO_FLAGS(return_reference, 0, 0)), NULL },
#define ZEND_BEGIN_ARG_INFO(name, _unused)	\
	ZEND_BEGIN_ARG_INFO_EX(name, {}, ZEND_RETURN_VALUE, -1)
#define ZEND_END_ARG_INFO()		};

/* Name macros */
#define ZEND_MODULE_STARTUP_N(module)       zm_startup_##module
#define ZEND_MODULE_SHUTDOWN_N(module)		zm_shutdown_##module
#define ZEND_MODULE_ACTIVATE_N(module)		zm_activate_##module
#define ZEND_MODULE_DEACTIVATE_N(module)	zm_deactivate_##module
#define ZEND_MODULE_POST_ZEND_DEACTIVATE_N(module)	zm_post_zend_deactivate_##module
#define ZEND_MODULE_INFO_N(module)			zm_info_##module
#define ZEND_MODULE_GLOBALS_CTOR_N(module)  zm_globals_ctor_##module
#define ZEND_MODULE_GLOBALS_DTOR_N(module)  zm_globals_dtor_##module

/* Declaration macros */
#define ZEND_MODULE_STARTUP_D(module)		zend_result ZEND_MODULE_STARTUP_N(module)(INIT_FUNC_ARGS)
#define ZEND_MODULE_SHUTDOWN_D(module)		zend_result ZEND_MODULE_SHUTDOWN_N(module)(SHUTDOWN_FUNC_ARGS)
#define ZEND_MODULE_ACTIVATE_D(module)		zend_result ZEND_MODULE_ACTIVATE_N(module)(INIT_FUNC_ARGS)
#define ZEND_MODULE_DEACTIVATE_D(module)	zend_result ZEND_MODULE_DEACTIVATE_N(module)(SHUTDOWN_FUNC_ARGS)
#define ZEND_MODULE_POST_ZEND_DEACTIVATE_D(module)	zend_result ZEND_MODULE_POST_ZEND_DEACTIVATE_N(module)(void)
#define ZEND_MODULE_INFO_D(module)			ZEND_COLD void ZEND_MODULE_INFO_N(module)(ZEND_MODULE_INFO_FUNC_ARGS)
#define ZEND_MODULE_GLOBALS_CTOR_D(module)  void ZEND_MODULE_GLOBALS_CTOR_N(module)(zend_##module##_globals *module##_globals)
#define ZEND_MODULE_GLOBALS_DTOR_D(module)  void ZEND_MODULE_GLOBALS_DTOR_N(module)(zend_##module##_globals *module##_globals)

#define ZEND_GET_MODULE(name) \
    BEGIN_EXTERN_C()\
	ZEND_DLEXPORT zend_module_entry *get_module(void) { return &name##_module_entry; }\
    END_EXTERN_C()

#define ZEND_BEGIN_MODULE_GLOBALS(module_name)		\
	typedef struct _zend_##module_name##_globals {
#define ZEND_END_MODULE_GLOBALS(module_name)		\
	} zend_##module_name##_globals;

#ifdef ZTS

#define ZEND_DECLARE_MODULE_GLOBALS(module_name)							\
	ts_rsrc_id module_name##_globals_id;
#define ZEND_EXTERN_MODULE_GLOBALS(module_name)								\
	extern ts_rsrc_id module_name##_globals_id;
#define ZEND_INIT_MODULE_GLOBALS(module_name, globals_ctor, globals_dtor)	\
	ts_allocate_id(&module_name##_globals_id, sizeof(zend_##module_name##_globals), (ts_allocate_ctor) globals_ctor, (ts_allocate_dtor) globals_dtor);
#define ZEND_MODULE_GLOBALS_ACCESSOR(module_name, v) ZEND_TSRMG(module_name##_globals_id, zend_##module_name##_globals *, v)
#ifdef ZEND_ENABLE_STATIC_TSRMLS_CACHE
#define ZEND_MODULE_GLOBALS_BULK(module_name) TSRMG_BULK_STATIC(module_name##_globals_id, zend_##module_name##_globals *)
#else
#define ZEND_MODULE_GLOBALS_BULK(module_name) TSRMG_BULK(module_name##_globals_id, zend_##module_name##_globals *)
#endif

#else

#define ZEND_DECLARE_MODULE_GLOBALS(module_name)							\
	zend_##module_name##_globals module_name##_globals;
#define ZEND_EXTERN_MODULE_GLOBALS(module_name)								\
	extern zend_##module_name##_globals module_name##_globals;
#define ZEND_INIT_MODULE_GLOBALS(module_name, globals_ctor, globals_dtor)	\
	globals_ctor(&module_name##_globals);
#define ZEND_MODULE_GLOBALS_ACCESSOR(module_name, v) (module_name##_globals.v)
#define ZEND_MODULE_GLOBALS_BULK(module_name) (&module_name##_globals)

#endif

#define INIT_CLASS_ENTRY(class_container, class_name, functions) \
	INIT_CLASS_ENTRY_EX(class_container, class_name, strlen(class_name), functions)

#define INIT_CLASS_ENTRY_EX(class_container, class_name, class_name_len, functions) \
	{															\
		memset(&class_container, 0, sizeof(zend_class_entry)); \
		class_container.name = zend_string_init_interned(class_name, class_name_len, 1); \
		class_container.default_object_handlers = &std_object_handlers;	\
		class_container.info.internal.builtin_functions = functions;	\
	}

#define INIT_CLASS_ENTRY_INIT_METHODS(class_container, functions) \
	{															\
		class_container.default_object_handlers = &std_object_handlers;	\
		class_container.constructor = NULL;						\
		class_container.destructor = NULL;						\
		class_container.clone = NULL;							\
		class_container.serialize = NULL;						\
		class_container.unserialize = NULL;						\
		class_container.create_object = NULL;					\
		class_container.get_static_method = NULL;				\
		class_container.__call = NULL;							\
		class_container.__callstatic = NULL;					\
		class_container.__tostring = NULL;						\
		class_container.__get = NULL;							\
		class_container.__set = NULL;							\
		class_container.__unset = NULL;							\
		class_container.__isset = NULL;							\
		class_container.__debugInfo = NULL;						\
		class_container.__serialize = NULL;						\
		class_container.__unserialize = NULL;					\
		class_container.parent = NULL;							\
		class_container.num_interfaces = 0;						\
		class_container.trait_names = NULL;						\
		class_container.num_traits = 0;							\
		class_container.trait_aliases = NULL;					\
		class_container.trait_precedences = NULL;				\
		class_container.interfaces = NULL;						\
		class_container.get_iterator = NULL;					\
		class_container.iterator_funcs_ptr = NULL;				\
		class_container.arrayaccess_funcs_ptr = NULL;			\
		class_container.info.internal.module = NULL;			\
		class_container.info.internal.builtin_functions = functions;	\
	}


#define INIT_NS_CLASS_ENTRY(class_container, ns, class_name, functions) \
	INIT_CLASS_ENTRY(class_container, ZEND_NS_NAME(ns, class_name), functions)

#define CE_STATIC_MEMBERS(ce) \
	((zval*)ZEND_MAP_PTR_GET((ce)->static_members_table))

#define CE_CONSTANTS_TABLE(ce) \
	zend_class_constants_table(ce)

#define CE_DEFAULT_PROPERTIES_TABLE(ce) \
	zend_class_default_properties_table(ce)

#define CE_BACKED_ENUM_TABLE(ce) \
	zend_class_backed_enum_table(ce)

#define ZEND_FCI_INITIALIZED(fci) ((fci).size != 0)
#define ZEND_FCC_INITIALIZED(fcc) ((fcc).function_handler != NULL)

ZEND_API int zend_next_free_module(void);

BEGIN_EXTERN_C()
ZEND_API void zend_set_dl_use_deepbind(bool use_deepbind);

ZEND_API zend_result zend_get_parameters_array_ex(uint32_t param_count, zval *argument_array);

/* internal function to efficiently copy parameters when executing __call() */
ZEND_API zend_result zend_copy_parameters_array(uint32_t param_count, zval *argument_array);

#define zend_get_parameters_array(ht, param_count, argument_array) \
	zend_get_parameters_array_ex(param_count, argument_array)
#define zend_parse_parameters_none() \
	(EXPECTED(ZEND_NUM_ARGS() == 0) ? SUCCESS : (zend_wrong_parameters_none_error(), FAILURE))
#define zend_parse_parameters_none_throw() \
	zend_parse_parameters_none()

/* Parameter parsing API -- andrei */

#define ZEND_PARSE_PARAMS_THROW 0 /* No longer used, zpp always uses exceptions */
#define ZEND_PARSE_PARAMS_QUIET (1<<1)
ZEND_API zend_result zend_parse_parameters(uint32_t num_args, const char *type_spec, ...);
ZEND_API zend_result zend_parse_parameters_ex(int flags, uint32_t num_args, const char *type_spec, ...);
/* NOTE: This must have at least one value in __VA_ARGS__ for the expression to be valid */
#define zend_parse_parameters_throw(num_args, ...) \
	zend_parse_parameters(num_args, __VA_ARGS__)
ZEND_API const char *zend_zval_type_name(const zval *arg);
ZEND_API const char *zend_zval_value_name(const zval *arg);
ZEND_API zend_string *zend_zval_get_legacy_type(const zval *arg);

ZEND_API zend_result zend_parse_method_parameters(uint32_t num_args, zval *this_ptr, const char *type_spec, ...);
ZEND_API zend_result zend_parse_method_parameters_ex(int flags, uint32_t num_args, zval *this_ptr, const char *type_spec, ...);

ZEND_API zend_result zend_parse_parameter(int flags, uint32_t arg_num, zval *arg, const char *spec, ...);

/* End of parameter parsing API -- andrei */

ZEND_API zend_result zend_register_functions(zend_class_entry *scope, const zend_function_entry *functions, HashTable *function_table, int type);
ZEND_API void zend_unregister_functions(const zend_function_entry *functions, int count, HashTable *function_table);
ZEND_API zend_result zend_startup_module(zend_module_entry *module_entry);
ZEND_API zend_module_entry* zend_register_internal_module(zend_module_entry *module_entry);
ZEND_API zend_module_entry* zend_register_module_ex(zend_module_entry *module, int module_type);
ZEND_API zend_result zend_startup_module_ex(zend_module_entry *module);
ZEND_API void zend_startup_modules(void);
ZEND_API void zend_collect_module_handlers(void);
ZEND_API void zend_destroy_modules(void);
ZEND_API void zend_check_magic_method_implementation(
		const zend_class_entry *ce, const zend_function *fptr, zend_string *lcname, int error_type);
ZEND_API void zend_add_magic_method(zend_class_entry *ce, zend_function *fptr, zend_string *lcname);

ZEND_API zend_class_entry *zend_register_internal_class(zend_class_entry *class_entry);
ZEND_API zend_class_entry *zend_register_internal_class_ex(zend_class_entry *class_entry, zend_class_entry *parent_ce);
ZEND_API zend_class_entry *zend_register_internal_class_with_flags(zend_class_entry *class_entry, zend_class_entry *parent_ce, uint32_t flags);
ZEND_API zend_class_entry *zend_register_internal_interface(zend_class_entry *orig_class_entry);
ZEND_API void zend_class_implements(zend_class_entry *class_entry, int num_interfaces, ...);

ZEND_API zend_result zend_register_class_alias_ex(const char *name, size_t name_len, zend_class_entry *ce, bool persistent);

static zend_always_inline zend_result zend_register_class_alias(const char *name, zend_class_entry *ce) {
	return zend_register_class_alias_ex(name, strlen(name), ce, 1);
}
#define zend_register_ns_class_alias(ns, name, ce) \
	zend_register_class_alias_ex(ZEND_NS_NAME(ns, name), sizeof(ZEND_NS_NAME(ns, name))-1, ce, 1)

ZEND_API void zend_disable_functions(const char *function_list);

ZEND_API ZEND_COLD void zend_wrong_param_count(void);
ZEND_API ZEND_COLD void zend_wrong_property_read(zval *object, zval *property);

#define IS_CALLABLE_CHECK_SYNTAX_ONLY (1<<0)
#define IS_CALLABLE_SUPPRESS_DEPRECATIONS (1<<1)

ZEND_API void zend_release_fcall_info_cache(zend_fcall_info_cache *fcc);
ZEND_API zend_string *zend_get_callable_name_ex(zval *callable, zend_object *object);
ZEND_API zend_string *zend_get_callable_name(zval *callable);
ZEND_API bool zend_is_callable_at_frame(
		zval *callable, zend_object *object, zend_execute_data *frame,
		uint32_t check_flags, zend_fcall_info_cache *fcc, char **error);
ZEND_API bool zend_is_callable_ex(zval *callable, zend_object *object, uint32_t check_flags, zend_string **callable_name, zend_fcall_info_cache *fcc, char **error);
ZEND_API bool zend_is_callable(zval *callable, uint32_t check_flags, zend_string **callable_name);
ZEND_API bool zend_make_callable(zval *callable, zend_string **callable_name);
ZEND_API const char *zend_get_module_version(const char *module_name);
ZEND_API zend_result zend_get_module_started(const char *module_name);

ZEND_API zend_property_info *zend_declare_typed_property(zend_class_entry *ce, zend_string *name, zval *property, int access_type, zend_string *doc_comment, zend_type type);

ZEND_API void zend_declare_property_ex(zend_class_entry *ce, zend_string *name, zval *property, int access_type, zend_string *doc_comment);
ZEND_API void zend_declare_property(zend_class_entry *ce, const char *name, size_t name_length, zval *property, int access_type);
ZEND_API void zend_declare_property_null(zend_class_entry *ce, const char *name, size_t name_length, int access_type);
ZEND_API void zend_declare_property_bool(zend_class_entry *ce, const char *name, size_t name_length, zend_long value, int access_type);
ZEND_API void zend_declare_property_long(zend_class_entry *ce, const char *name, size_t name_length, zend_long value, int access_type);
ZEND_API void zend_declare_property_double(zend_class_entry *ce, const char *name, size_t name_length, double value, int access_type);
ZEND_API void zend_declare_property_string(zend_class_entry *ce, const char *name, size_t name_length, const char *value, int access_type);
ZEND_API void zend_declare_property_stringl(zend_class_entry *ce, const char *name, size_t name_length, const char *value, size_t value_len, int access_type);

ZEND_API zend_class_constant *zend_declare_typed_class_constant(zend_class_entry *ce, zend_string *name, zval *value, int access_type, zend_string *doc_comment, zend_type type);
ZEND_API zend_class_constant *zend_declare_class_constant_ex(zend_class_entry *ce, zend_string *name, zval *value, int access_type, zend_string *doc_comment);
ZEND_API void zend_declare_class_constant(zend_class_entry *ce, const char *name, size_t name_length, zval *value);
ZEND_API void zend_declare_class_constant_null(zend_class_entry *ce, const char *name, size_t name_length);
ZEND_API void zend_declare_class_constant_long(zend_class_entry *ce, const char *name, size_t name_length, zend_long value);
ZEND_API void zend_declare_class_constant_bool(zend_class_entry *ce, const char *name, size_t name_length, bool value);
ZEND_API void zend_declare_class_constant_double(zend_class_entry *ce, const char *name, size_t name_length, double value);
ZEND_API void zend_declare_class_constant_stringl(zend_class_entry *ce, const char *name, size_t name_length, const char *value, size_t value_length);
ZEND_API void zend_declare_class_constant_string(zend_class_entry *ce, const char *name, size_t name_length, const char *value);

ZEND_API zend_result zend_update_class_constant(zend_class_constant *c, const zend_string *name, zend_class_entry *scope);
ZEND_API zend_result zend_update_class_constants(zend_class_entry *class_type);
ZEND_API HashTable *zend_separate_class_constants_table(zend_class_entry *class_type);

static zend_always_inline HashTable *zend_class_constants_table(zend_class_entry *ce) {
	if ((ce->ce_flags & ZEND_ACC_HAS_AST_CONSTANTS) && ZEND_MAP_PTR(ce->mutable_data)) {
		zend_class_mutable_data *mutable_data =
			(zend_class_mutable_data*)ZEND_MAP_PTR_GET_IMM(ce->mutable_data);
		if (mutable_data && mutable_data->constants_table) {
			return mutable_data->constants_table;
		} else {
			return zend_separate_class_constants_table(ce);
		}
	} else {
		return &ce->constants_table;
	}
}

static zend_always_inline zval *zend_class_default_properties_table(zend_class_entry *ce) {
	if ((ce->ce_flags & ZEND_ACC_HAS_AST_PROPERTIES) && ZEND_MAP_PTR(ce->mutable_data)) {
		zend_class_mutable_data *mutable_data =
			(zend_class_mutable_data*)ZEND_MAP_PTR_GET_IMM(ce->mutable_data);
		return mutable_data->default_properties_table;
	} else {
		return ce->default_properties_table;
	}
}

static zend_always_inline void zend_class_set_backed_enum_table(zend_class_entry *ce, HashTable *backed_enum_table)
{
	if (ZEND_MAP_PTR(ce->mutable_data) && ce->type == ZEND_USER_CLASS) {
		zend_class_mutable_data *mutable_data = (zend_class_mutable_data*)ZEND_MAP_PTR_GET_IMM(ce->mutable_data);
		mutable_data->backed_enum_table = backed_enum_table;
	} else {
		ce->backed_enum_table = backed_enum_table;
	}
}

static zend_always_inline HashTable *zend_class_backed_enum_table(zend_class_entry *ce)
{
	if (ZEND_MAP_PTR(ce->mutable_data) && ce->type == ZEND_USER_CLASS) {
		zend_class_mutable_data *mutable_data = (zend_class_mutable_data*)ZEND_MAP_PTR_GET_IMM(ce->mutable_data);
		return mutable_data->backed_enum_table;
	} else {
		return ce->backed_enum_table;
	}
}

ZEND_API void zend_update_property_ex(const zend_class_entry *scope, zend_object *object, zend_string *name, zval *value);
ZEND_API void zend_update_property(const zend_class_entry *scope, zend_object *object, const char *name, size_t name_length, zval *value);
ZEND_API void zend_update_property_null(const zend_class_entry *scope, zend_object *object, const char *name, size_t name_length);
ZEND_API void zend_update_property_bool(const zend_class_entry *scope, zend_object *object, const char *name, size_t name_length, zend_long value);
ZEND_API void zend_update_property_long(const zend_class_entry *scope, zend_object *object, const char *name, size_t name_length, zend_long value);
ZEND_API void zend_update_property_double(const zend_class_entry *scope, zend_object *object, const char *name, size_t name_length, double value);
ZEND_API void zend_update_property_str(const zend_class_entry *scope, zend_object *object, const char *name, size_t name_length, zend_string *value);
ZEND_API void zend_update_property_string(const zend_class_entry *scope, zend_object *object, const char *name, size_t name_length, const char *value);
ZEND_API void zend_update_property_stringl(const zend_class_entry *scope, zend_object *object, const char *name, size_t name_length, const char *value, size_t value_length);
ZEND_API void zend_unset_property(const zend_class_entry *scope, zend_object *object, const char *name, size_t name_length);

ZEND_API zend_result zend_update_static_property_ex(zend_class_entry *scope, zend_string *name, zval *value);
ZEND_API zend_result zend_update_static_property(zend_class_entry *scope, const char *name, size_t name_length, zval *value);
ZEND_API zend_result zend_update_static_property_null(zend_class_entry *scope, const char *name, size_t name_length);
ZEND_API zend_result zend_update_static_property_bool(zend_class_entry *scope, const char *name, size_t name_length, zend_long value);
ZEND_API zend_result zend_update_static_property_long(zend_class_entry *scope, const char *name, size_t name_length, zend_long value);
ZEND_API zend_result zend_update_static_property_double(zend_class_entry *scope, const char *name, size_t name_length, double value);
ZEND_API zend_result zend_update_static_property_string(zend_class_entry *scope, const char *name, size_t name_length, const char *value);
ZEND_API zend_result zend_update_static_property_stringl(zend_class_entry *scope, const char *name, size_t name_length, const char *value, size_t value_length);

ZEND_API zval *zend_read_property_ex(zend_class_entry *scope, zend_object *object, zend_string *name, bool silent, zval *rv);
ZEND_API zval *zend_read_property(zend_class_entry *scope, zend_object *object, const char *name, size_t name_length, bool silent, zval *rv);

ZEND_API zval *zend_read_static_property_ex(zend_class_entry *scope, zend_string *name, bool silent);
ZEND_API zval *zend_read_static_property(zend_class_entry *scope, const char *name, size_t name_length, bool silent);

ZEND_API const char *zend_get_type_by_const(int type);

#define ZEND_THIS                           (&EX(This))

#define hasThis()							(Z_TYPE_P(ZEND_THIS) == IS_OBJECT)
#define getThis()							(hasThis() ? ZEND_THIS : NULL)
#define ZEND_IS_METHOD_CALL()				(EX(func)->common.scope != NULL)

#define WRONG_PARAM_COUNT					ZEND_WRONG_PARAM_COUNT()
#define ZEND_NUM_ARGS()						EX_NUM_ARGS()
#define ZEND_WRONG_PARAM_COUNT()					{ zend_wrong_param_count(); return; }

#ifndef ZEND_WIN32
#define DLEXPORT
#endif

#define array_init(arg)				ZVAL_ARR((arg), zend_new_array(0))
#define array_init_size(arg, size)	ZVAL_ARR((arg), zend_new_array(size))
ZEND_API void object_init(zval *arg);
ZEND_API zend_result object_init_ex(zval *arg, zend_class_entry *ce);
ZEND_API zend_result object_init_with_constructor(zval *arg, zend_class_entry *class_type, uint32_t param_count, zval *params, HashTable *named_params);
ZEND_API zend_result object_and_properties_init(zval *arg, zend_class_entry *ce, HashTable *properties);
ZEND_API void object_properties_init(zend_object *object, zend_class_entry *class_type);
ZEND_API void object_properties_init_ex(zend_object *object, HashTable *properties);
ZEND_API void object_properties_load(zend_object *object, HashTable *properties);

ZEND_API void zend_merge_properties(zval *obj, HashTable *properties);

ZEND_API void add_assoc_long_ex(zval *arg, const char *key, size_t key_len, zend_long n);
ZEND_API void add_assoc_null_ex(zval *arg, const char *key, size_t key_len);
ZEND_API void add_assoc_bool_ex(zval *arg, const char *key, size_t key_len, bool b);
ZEND_API void add_assoc_resource_ex(zval *arg, const char *key, size_t key_len, zend_resource *r);
ZEND_API void add_assoc_double_ex(zval *arg, const char *key, size_t key_len, double d);
ZEND_API void add_assoc_str_ex(zval *arg, const char *key, size_t key_len, zend_string *str);
ZEND_API void add_assoc_string_ex(zval *arg, const char *key, size_t key_len, const char *str);
ZEND_API void add_assoc_stringl_ex(zval *arg, const char *key, size_t key_len, const char *str, size_t length);
ZEND_API void add_assoc_array_ex(zval *arg, const char *key, size_t key_len, zend_array *arr);
ZEND_API void add_assoc_object_ex(zval *arg, const char *key, size_t key_len, zend_object *obj);
ZEND_API void add_assoc_reference_ex(zval *arg, const char *key, size_t key_len, zend_reference *ref);
ZEND_API void add_assoc_zval_ex(zval *arg, const char *key, size_t key_len, zval *value);

static zend_always_inline void add_assoc_long(zval *arg, const char *key, zend_long n) {
	add_assoc_long_ex(arg, key, strlen(key), n);
}
static zend_always_inline void add_assoc_null(zval *arg, const char *key) {
	add_assoc_null_ex(arg, key, strlen(key));
}
static zend_always_inline void add_assoc_bool(zval *arg, const char *key, bool b) {
	add_assoc_bool_ex(arg, key, strlen(key), b);
}
static zend_always_inline void add_assoc_resource(zval *arg, const char *key, zend_resource *r) {
	add_assoc_resource_ex(arg, key, strlen(key), r);
}
static zend_always_inline void add_assoc_double(zval *arg, const char *key, double d) {
	add_assoc_double_ex(arg, key, strlen(key), d);
}
static zend_always_inline void add_assoc_str(zval *arg, const char *key, zend_string *str) {
	add_assoc_str_ex(arg, key, strlen(key), str);
}
static zend_always_inline void add_assoc_string(zval *arg, const char *key, const char *str) {
	add_assoc_string_ex(arg, key, strlen(key), str);
}
static zend_always_inline void add_assoc_stringl(zval *arg, const char *key, const char *str, size_t length) {
	add_assoc_stringl_ex(arg, key, strlen(key), str, length);
}
static zend_always_inline void add_assoc_array(zval *arg, const char *key, zend_array *arr) {
	add_assoc_array_ex(arg, key, strlen(key), arr);
}
static zend_always_inline void add_assoc_object(zval *arg, const char *key, zend_object *obj) {
	add_assoc_object_ex(arg, key, strlen(key), obj);
}
static zend_always_inline void add_assoc_reference(zval *arg, const char *key, zend_reference *ref) {
	add_assoc_reference_ex(arg, key, strlen(key), ref);
}
static zend_always_inline void add_assoc_zval(zval *arg, const char *key, zval *value) {
	add_assoc_zval_ex(arg, key, strlen(key), value);
}

ZEND_API void add_index_long(zval *arg, zend_ulong index, zend_long n);
ZEND_API void add_index_null(zval *arg, zend_ulong index);
ZEND_API void add_index_bool(zval *arg, zend_ulong index, bool b);
ZEND_API void add_index_resource(zval *arg, zend_ulong index, zend_resource *r);
ZEND_API void add_index_double(zval *arg, zend_ulong index, double d);
ZEND_API void add_index_str(zval *arg, zend_ulong index, zend_string *str);
ZEND_API void add_index_string(zval *arg, zend_ulong index, const char *str);
ZEND_API void add_index_stringl(zval *arg, zend_ulong index, const char *str, size_t length);
ZEND_API void add_index_array(zval *arg, zend_ulong index, zend_array *arr);
ZEND_API void add_index_object(zval *arg, zend_ulong index, zend_object *obj);
ZEND_API void add_index_reference(zval *arg, zend_ulong index, zend_reference *ref);

static zend_always_inline zend_result add_index_zval(zval *arg, zend_ulong index, zval *value)
{
	return zend_hash_index_update(Z_ARRVAL_P(arg), index, value) ? SUCCESS : FAILURE;
}

ZEND_API zend_result add_next_index_long(zval *arg, zend_long n);
ZEND_API zend_result add_next_index_null(zval *arg);
ZEND_API zend_result add_next_index_bool(zval *arg, bool b);
ZEND_API zend_result add_next_index_resource(zval *arg, zend_resource *r);
ZEND_API zend_result add_next_index_double(zval *arg, double d);
ZEND_API zend_result add_next_index_str(zval *arg, zend_string *str);
ZEND_API zend_result add_next_index_string(zval *arg, const char *str);
ZEND_API zend_result add_next_index_stringl(zval *arg, const char *str, size_t length);
ZEND_API zend_result add_next_index_array(zval *arg, zend_array *arr);
ZEND_API zend_result add_next_index_object(zval *arg, zend_object *obj);
ZEND_API zend_result add_next_index_reference(zval *arg, zend_reference *ref);

static zend_always_inline zend_result add_next_index_zval(zval *arg, zval *value)
{
	return zend_hash_next_index_insert(Z_ARRVAL_P(arg), value) ? SUCCESS : FAILURE;
}

ZEND_API zend_result array_set_zval_key(HashTable *ht, zval *key, zval *value);

ZEND_API void add_property_long_ex(zval *arg, const char *key, size_t key_len, zend_long l);
ZEND_API void add_property_null_ex(zval *arg, const char *key, size_t key_len);
ZEND_API void add_property_bool_ex(zval *arg, const char *key, size_t key_len, zend_long b);
ZEND_API void add_property_resource_ex(zval *arg, const char *key, size_t key_len, zend_resource *r);
ZEND_API void add_property_double_ex(zval *arg, const char *key, size_t key_len, double d);
ZEND_API void add_property_str_ex(zval *arg, const char *key, size_t key_len, zend_string *str);
ZEND_API void add_property_string_ex(zval *arg, const char *key, size_t key_len, const char *str);
ZEND_API void add_property_stringl_ex(zval *arg, const char *key, size_t key_len,  const char *str, size_t length);
ZEND_API void add_property_array_ex(zval *arg, const char *key, size_t key_len, zend_array *arr);
ZEND_API void add_property_object_ex(zval *arg, const char *key, size_t key_len, zend_object *obj);
ZEND_API void add_property_reference_ex(zval *arg, const char *key, size_t key_len, zend_reference *ref);
ZEND_API void add_property_zval_ex(zval *arg, const char *key, size_t key_len, zval *value);

static zend_always_inline void add_property_long(zval *arg, const char *key, zend_long n) {
	add_property_long_ex(arg, key, strlen(key), n);
}
static zend_always_inline void add_property_null(zval *arg, const char *key) {
	add_property_null_ex(arg, key, strlen(key));
}
static zend_always_inline void add_property_bool(zval *arg, const char *key, bool b) {
	add_property_bool_ex(arg, key, strlen(key), b);
}
static zend_always_inline void add_property_resource(zval *arg, const char *key, zend_resource *r) {
	add_property_resource_ex(arg, key, strlen(key), r);
}
static zend_always_inline void add_property_double(zval *arg, const char *key, double d) {
	add_property_double_ex(arg, key, strlen(key), d);
}
static zend_always_inline void add_property_str(zval *arg, const char *key, zend_string *str) {
	add_property_str_ex(arg, key, strlen(key), str);
}
static zend_always_inline void add_property_string(zval *arg, const char *key, const char *str) {
	add_property_string_ex(arg, key, strlen(key), str);
}
static zend_always_inline void add_property_stringl(zval *arg, const char *key, const char *str, size_t length) {
	add_property_stringl_ex(arg, key, strlen(key), str, length);
}
static zend_always_inline void add_property_array(zval *arg, const char *key, zend_array *arr) {
	add_property_array_ex(arg, key, strlen(key), arr);
}
static zend_always_inline void add_property_object(zval *arg, const char *key, zend_object *obj) {
	add_property_object_ex(arg, key, strlen(key), obj);
}
static zend_always_inline void add_property_reference(zval *arg, const char *key, zend_reference *ref) {
	add_property_reference_ex(arg, key, strlen(key), ref);
}
static zend_always_inline void add_property_zval(zval *arg, const char *key, zval *value) {
	add_property_zval_ex(arg, key, strlen(key), value);
}

ZEND_API zend_result _call_user_function_impl(zval *object, zval *function_name, zval *retval_ptr, uint32_t param_count, zval params[], HashTable *named_params);

#define call_user_function(function_table, object, function_name, retval_ptr, param_count, params) \
	_call_user_function_impl(object, function_name, retval_ptr, param_count, params, NULL)

#define call_user_function_named(function_table, object, function_name, retval_ptr, param_count, params, named_params) \
	_call_user_function_impl(object, function_name, retval_ptr, param_count, params, named_params)

#ifndef __cplusplus
# define empty_fcall_info (zend_fcall_info) {0}
# define empty_fcall_info_cache (zend_fcall_info_cache) {0}
#else
# define empty_fcall_info zend_fcall_info {}
# define empty_fcall_info_cache zend_fcall_info_cache {}
#endif

/** Build zend_call_info/cache from a zval*
 *
 * Caller is responsible to provide a return value (fci->retval), otherwise the we will crash.
 * In order to pass parameters the following members need to be set:
 * fci->param_count = 0;
 * fci->params = NULL;
 * The callable_name argument may be NULL.
 */
ZEND_API zend_result zend_fcall_info_init(zval *callable, uint32_t check_flags, zend_fcall_info *fci, zend_fcall_info_cache *fcc, zend_string **callable_name, char **error);

/** Clear arguments connected with zend_fcall_info *fci
 * If free_mem is not zero then the params array gets free'd as well
 */
ZEND_API void zend_fcall_info_args_clear(zend_fcall_info *fci, bool free_mem);

/** Save current arguments from zend_fcall_info *fci
 * params array will be set to NULL
 */
ZEND_API void zend_fcall_info_args_save(zend_fcall_info *fci, uint32_t *param_count, zval **params);

/** Free arguments connected with zend_fcall_info *fci and set back saved ones.
 */
ZEND_API void zend_fcall_info_args_restore(zend_fcall_info *fci, uint32_t param_count, zval *params);

/** Set or clear the arguments in the zend_call_info struct taking care of
 * refcount. If args is NULL and arguments are set then those are cleared.
 */
ZEND_API zend_result zend_fcall_info_args(zend_fcall_info *fci, zval *args);
ZEND_API zend_result zend_fcall_info_args_ex(zend_fcall_info *fci, zend_function *func, zval *args);

/** Set arguments in the zend_fcall_info struct taking care of refcount.
 * If argc is 0 the arguments which are set will be cleared, else pass
 * a variable amount of zval** arguments.
 */
ZEND_API void zend_fcall_info_argp(zend_fcall_info *fci, uint32_t argc, zval *argv);

/** Set arguments in the zend_fcall_info struct taking care of refcount.
 * If argc is 0 the arguments which are set will be cleared, else pass
 * a variable amount of zval** arguments.
 */
ZEND_API void zend_fcall_info_argv(zend_fcall_info *fci, uint32_t argc, va_list *argv);

/** Set arguments in the zend_fcall_info struct taking care of refcount.
 * If argc is 0 the arguments which are set will be cleared, else pass
 * a variable amount of zval** arguments.
 */
ZEND_API void zend_fcall_info_argn(zend_fcall_info *fci, uint32_t argc, ...);

/** Call a function using information created by zend_fcall_info_init()/args().
 * If args is given then those replace the argument info in fci is temporarily.
 */
ZEND_API zend_result zend_fcall_info_call(zend_fcall_info *fci, zend_fcall_info_cache *fcc, zval *retval, zval *args);

/* Zend FCC API to store and handle PHP userland functions */
static zend_always_inline bool zend_fcc_equals(const zend_fcall_info_cache* a, const zend_fcall_info_cache* b)
{
	if (UNEXPECTED((a->function_handler->common.fn_flags & ZEND_ACC_CALL_VIA_TRAMPOLINE) &&
		(b->function_handler->common.fn_flags & ZEND_ACC_CALL_VIA_TRAMPOLINE))) {
		return a->object == b->object
			&& a->calling_scope == b->calling_scope
			&& a->closure == b->closure
			&& zend_string_equals(a->function_handler->common.function_name, b->function_handler->common.function_name)
		;
	}
	return a->function_handler == b->function_handler
		&& a->object == b->object
		&& a->calling_scope == b->calling_scope
		&& a->closure == b->closure
	;
}

static zend_always_inline void zend_fcc_addref(zend_fcall_info_cache *fcc)
{
	ZEND_ASSERT(ZEND_FCC_INITIALIZED(*fcc) && "FCC Not initialized, possibly refetch trampoline freed by ZPP?");
	/* If the cached trampoline is set, free it */
	if (UNEXPECTED(fcc->function_handler == &EG(trampoline))) {
		zend_function *copy = (zend_function*)emalloc(sizeof(zend_function));

		memcpy(copy, fcc->function_handler, sizeof(zend_function));
		fcc->function_handler->common.function_name = NULL;
		fcc->function_handler = copy;
	}
	if (fcc->object) {
		GC_ADDREF(fcc->object);
	}
	if (fcc->closure) {
		GC_ADDREF(fcc->closure);
	}
}

static zend_always_inline void zend_fcc_dup(/* restrict */ zend_fcall_info_cache *dest, const zend_fcall_info_cache *src)
{
	memcpy(dest, src, sizeof(zend_fcall_info_cache));
	zend_fcc_addref(dest);
}

static zend_always_inline void zend_fcc_dtor(zend_fcall_info_cache *fcc)
{
	ZEND_ASSERT(fcc->function_handler);
	if (fcc->object) {
		OBJ_RELEASE(fcc->object);
	}
	/* Need to free potential trampoline (__call/__callStatic) copied function handler before releasing the closure */
	zend_release_fcall_info_cache(fcc);
	if (fcc->closure) {
		OBJ_RELEASE(fcc->closure);
	}
	*fcc = empty_fcall_info_cache;
}

ZEND_API void zend_get_callable_zval_from_fcc(const zend_fcall_info_cache *fcc, zval *callable);

/* Moved out of zend_gc.h because zend_fcall_info_cache is an unknown type in that header */
static zend_always_inline void zend_get_gc_buffer_add_fcc(zend_get_gc_buffer *gc_buffer, zend_fcall_info_cache *fcc)
{
	ZEND_ASSERT(ZEND_FCC_INITIALIZED(*fcc));
	if (fcc->object) {
		zend_get_gc_buffer_add_obj(gc_buffer, fcc->object);
	}
	if (fcc->closure) {
		zend_get_gc_buffer_add_obj(gc_buffer, fcc->closure);
	}
}

/* Can only return FAILURE if EG(active) is false during late engine shutdown.
 * If the call or call setup throws, EG(exception) will be set and the retval
 * will be UNDEF. Otherwise, the retval will be a non-UNDEF value. */
ZEND_API zend_result zend_call_function(zend_fcall_info *fci, zend_fcall_info_cache *fci_cache);

/* Call the FCI/FCC pair while setting the call return value to the passed zval*. */
static zend_always_inline zend_result zend_call_function_with_return_value(
	zend_fcall_info *fci, zend_fcall_info_cache *fci_cache, zval *retval)
{
	ZEND_ASSERT(retval && "Use zend_call_function() directly if not providing a retval");
	fci->retval = retval;
	return zend_call_function(fci, fci_cache);
}

/* Call the provided zend_function with the given params.
 * If retval_ptr is NULL, the return value is discarded.
 * If object is NULL, this must be a free function or static call.
 * called_scope must be provided for instance and static method calls. */
ZEND_API void zend_call_known_function(
		zend_function *fn, zend_object *object, zend_class_entry *called_scope, zval *retval_ptr,
		uint32_t param_count, zval *params, HashTable *named_params);

static zend_always_inline void zend_call_known_fcc(
	const zend_fcall_info_cache *fcc, zval *retval_ptr, uint32_t param_count, zval *params, HashTable *named_params)
{
	zend_function *func = fcc->function_handler;
	/* Need to copy trampolines as they get released after they are called */
	if (UNEXPECTED(func->common.fn_flags & ZEND_ACC_CALL_VIA_TRAMPOLINE)) {
		func = (zend_function*) emalloc(sizeof(zend_function));
		memcpy(func, fcc->function_handler, sizeof(zend_function));
		zend_string_addref(func->op_array.function_name);
	}
	zend_call_known_function(func, fcc->object, fcc->called_scope, retval_ptr, param_count, params, named_params);
}

/* Call the provided zend_function instance method on an object. */
static zend_always_inline void zend_call_known_instance_method(
		zend_function *fn, zend_object *object, zval *retval_ptr,
		uint32_t param_count, zval *params)
{
	zend_call_known_function(fn, object, object->ce, retval_ptr, param_count, params, NULL);
}

static zend_always_inline void zend_call_known_instance_method_with_0_params(
		zend_function *fn, zend_object *object, zval *retval_ptr)
{
	zend_call_known_instance_method(fn, object, retval_ptr, 0, NULL);
}

static zend_always_inline void zend_call_known_instance_method_with_1_params(
		zend_function *fn, zend_object *object, zval *retval_ptr, zval *param)
{
	zend_call_known_instance_method(fn, object, retval_ptr, 1, param);
}

ZEND_API void zend_call_known_instance_method_with_2_params(
		zend_function *fn, zend_object *object, zval *retval_ptr, zval *param1, zval *param2);

/* Call method if it exists. Return FAILURE if method does not exist or call failed.
 * If FAILURE is returned, retval will be UNDEF. As such, destroying retval unconditionally
 * is legal. */
ZEND_API zend_result zend_call_method_if_exists(
		zend_object *object, zend_string *method_name, zval *retval,
		uint32_t param_count, zval *params);

ZEND_API zend_result zend_set_hash_symbol(zval *symbol, const char *name, size_t name_length, bool is_ref, int num_symbol_tables, ...);

ZEND_API zend_result zend_delete_global_variable(zend_string *name);

ZEND_API zend_array *zend_rebuild_symbol_table(void);
ZEND_API void zend_attach_symbol_table(zend_execute_data *execute_data);
ZEND_API void zend_detach_symbol_table(zend_execute_data *execute_data);
ZEND_API zend_result zend_set_local_var(zend_string *name, zval *value, bool force);
ZEND_API zend_result zend_set_local_var_str(const char *name, size_t len, zval *value, bool force);

static zend_always_inline zend_result zend_forbid_dynamic_call(void)
{
	zend_execute_data *ex = EG(current_execute_data);
	ZEND_ASSERT(ex != NULL && ex->func != NULL);

	if (ZEND_CALL_INFO(ex) & ZEND_CALL_DYNAMIC) {
		zend_string *function_or_method_name = get_active_function_or_method_name();
		zend_throw_error(NULL, "Cannot call %.*s() dynamically",
			(int) ZSTR_LEN(function_or_method_name), ZSTR_VAL(function_or_method_name));
		zend_string_release(function_or_method_name);
		return FAILURE;
	}

	return SUCCESS;
}

ZEND_API ZEND_COLD const char *zend_get_object_type_case(const zend_class_entry *ce, bool upper_case);

static zend_always_inline const char *zend_get_object_type(const zend_class_entry *ce)
{
	return zend_get_object_type_case(ce, false);
}

static zend_always_inline const char *zend_get_object_type_uc(const zend_class_entry *ce)
{
	return zend_get_object_type_case(ce, true);
}

ZEND_API bool zend_is_iterable(const zval *iterable);

ZEND_API bool zend_is_countable(const zval *countable);

ZEND_API zend_result zend_get_default_from_internal_arg_info(
		zval *default_value_zval, zend_internal_arg_info *arg_info);

END_EXTERN_C()

#if ZEND_DEBUG
#define CHECK_ZVAL_STRING(str) \
	ZEND_ASSERT(ZSTR_VAL(str)[ZSTR_LEN(str)] == '\0' && "String is not null-terminated");
#else
#define CHECK_ZVAL_STRING(z)
#endif

static zend_always_inline bool zend_str_has_nul_byte(const zend_string *str)
{
	return ZSTR_LEN(str) != strlen(ZSTR_VAL(str));
}
static zend_always_inline bool zend_char_has_nul_byte(const char *s, size_t known_length)
{
	return known_length != strlen(s);
}

/* Compatibility with PHP 8.1 and below */
#define CHECK_ZVAL_NULL_PATH(p) zend_str_has_nul_byte(Z_STR_P(p))
#define CHECK_NULL_PATH(p, l) zend_char_has_nul_byte(p, l)

#define ZVAL_STRINGL(z, s, l) do {				\
		ZVAL_NEW_STR(z, zend_string_init(s, l, 0));		\
	} while (0)

#define ZVAL_STRING(z, s) do {					\
		const char *_s = (s);					\
		ZVAL_STRINGL(z, _s, strlen(_s));		\
	} while (0)

#define ZVAL_EMPTY_STRING(z) do {				\
		ZVAL_INTERNED_STR(z, ZSTR_EMPTY_ALLOC());		\
	} while (0)

#define ZVAL_PSTRINGL(z, s, l) do {				\
		ZVAL_NEW_STR(z, zend_string_init(s, l, 1));		\
	} while (0)

#define ZVAL_PSTRING(z, s) do {					\
		const char *_s = (s);					\
		ZVAL_PSTRINGL(z, _s, strlen(_s));		\
	} while (0)

#define ZVAL_EMPTY_PSTRING(z) do {				\
		ZVAL_PSTRINGL(z, "", 0);				\
	} while (0)

#define ZVAL_CHAR(z, c)  do {		            \
		char _c = (c);                          \
		ZVAL_INTERNED_STR(z, ZSTR_CHAR((zend_uchar) _c));	\
	} while (0)

#define ZVAL_STRINGL_FAST(z, s, l) do {			\
		ZVAL_STR(z, zend_string_init_fast(s, l));	\
	} while (0)

#define ZVAL_STRING_FAST(z, s) do {				\
		const char *_s = (s);					\
		ZVAL_STRINGL_FAST(z, _s, strlen(_s));	\
	} while (0)

#define ZVAL_ZVAL(z, zv, copy, dtor) do {		\
		zval *__z = (z);						\
		zval *__zv = (zv);						\
		if (EXPECTED(!Z_ISREF_P(__zv))) {		\
			if (copy && !dtor) {				\
				ZVAL_COPY(__z, __zv);			\
			} else {							\
				ZVAL_COPY_VALUE(__z, __zv);		\
			}									\
		} else {								\
			ZVAL_COPY(__z, Z_REFVAL_P(__zv));	\
			if (dtor || !copy) {				\
				zval_ptr_dtor(__zv);			\
			}									\
		}										\
	} while (0)

#define RETVAL_BOOL(b)					ZVAL_BOOL(return_value, b)
#define RETVAL_NULL()					ZVAL_NULL(return_value)
#define RETVAL_LONG(l)					ZVAL_LONG(return_value, l)
#define RETVAL_DOUBLE(d)				ZVAL_DOUBLE(return_value, d)
#define RETVAL_STR(s)					ZVAL_STR(return_value, s)
#define RETVAL_INTERNED_STR(s)			ZVAL_INTERNED_STR(return_value, s)
#define RETVAL_NEW_STR(s)				ZVAL_NEW_STR(return_value, s)
#define RETVAL_STR_COPY(s)				ZVAL_STR_COPY(return_value, s)
#define RETVAL_STRING(s)				ZVAL_STRING(return_value, s)
#define RETVAL_STRINGL(s, l)			ZVAL_STRINGL(return_value, s, l)
#define RETVAL_STRING_FAST(s)			ZVAL_STRING_FAST(return_value, s)
#define RETVAL_STRINGL_FAST(s, l)		ZVAL_STRINGL_FAST(return_value, s, l)
#define RETVAL_EMPTY_STRING()			ZVAL_EMPTY_STRING(return_value)
#define RETVAL_CHAR(c)		            ZVAL_CHAR(return_value, c)
#define RETVAL_RES(r)					ZVAL_RES(return_value, r)
#define RETVAL_ARR(r)					ZVAL_ARR(return_value, r)
#define RETVAL_EMPTY_ARRAY()			ZVAL_EMPTY_ARRAY(return_value)
#define RETVAL_OBJ(r)					ZVAL_OBJ(return_value, r)
#define RETVAL_OBJ_COPY(r)				ZVAL_OBJ_COPY(return_value, r)
#define RETVAL_COPY(zv)					ZVAL_COPY(return_value, zv)
#define RETVAL_COPY_VALUE(zv)			ZVAL_COPY_VALUE(return_value, zv)
#define RETVAL_COPY_DEREF(zv)			ZVAL_COPY_DEREF(return_value, zv)
#define RETVAL_ZVAL(zv, copy, dtor)		ZVAL_ZVAL(return_value, zv, copy, dtor)
#define RETVAL_FALSE					ZVAL_FALSE(return_value)
#define RETVAL_TRUE						ZVAL_TRUE(return_value)

#define RETURN_BOOL(b)					do { RETVAL_BOOL(b); return; } while (0)
#define RETURN_NULL()					do { RETVAL_NULL(); return;} while (0)
#define RETURN_LONG(l)					do { RETVAL_LONG(l); return; } while (0)
#define RETURN_DOUBLE(d)				do { RETVAL_DOUBLE(d); return; } while (0)
#define RETURN_STR(s) 					do { RETVAL_STR(s); return; } while (0)
#define RETURN_INTERNED_STR(s)			do { RETVAL_INTERNED_STR(s); return; } while (0)
#define RETURN_NEW_STR(s)				do { RETVAL_NEW_STR(s); return; } while (0)
#define RETURN_STR_COPY(s)				do { RETVAL_STR_COPY(s); return; } while (0)
#define RETURN_STRING(s) 				do { RETVAL_STRING(s); return; } while (0)
#define RETURN_STRINGL(s, l) 			do { RETVAL_STRINGL(s, l); return; } while (0)
#define RETURN_STRING_FAST(s) 			do { RETVAL_STRING_FAST(s); return; } while (0)
#define RETURN_STRINGL_FAST(s, l)		do { RETVAL_STRINGL_FAST(s, l); return; } while (0)
#define RETURN_EMPTY_STRING() 			do { RETVAL_EMPTY_STRING(); return; } while (0)
#define RETURN_CHAR(c)		            do { RETVAL_CHAR(c); return; } while (0)
#define RETURN_RES(r)					do { RETVAL_RES(r); return; } while (0)
#define RETURN_ARR(r)					do { RETVAL_ARR(r); return; } while (0)
#define RETURN_EMPTY_ARRAY()			do { RETVAL_EMPTY_ARRAY(); return; } while (0)
#define RETURN_OBJ(r)					do { RETVAL_OBJ(r); return; } while (0)
#define RETURN_OBJ_COPY(r)				do { RETVAL_OBJ_COPY(r); return; } while (0)
#define RETURN_COPY(zv)					do { RETVAL_COPY(zv); return; } while (0)
#define RETURN_COPY_VALUE(zv)			do { RETVAL_COPY_VALUE(zv); return; } while (0)
#define RETURN_COPY_DEREF(zv)			do { RETVAL_COPY_DEREF(zv); return; } while (0)
#define RETURN_ZVAL(zv, copy, dtor)		do { RETVAL_ZVAL(zv, copy, dtor); return; } while (0)
#define RETURN_FALSE					do { RETVAL_FALSE; return; } while (0)
#define RETURN_TRUE						do { RETVAL_TRUE; return; } while (0)
#define RETURN_THROWS()					do { ZEND_ASSERT(EG(exception)); (void) return_value; return; } while (0)

#define HASH_OF(p) (Z_TYPE_P(p)==IS_ARRAY ? Z_ARRVAL_P(p) : ((Z_TYPE_P(p)==IS_OBJECT ? Z_OBJ_HT_P(p)->get_properties(Z_OBJ_P(p)) : NULL)))
#define ZVAL_IS_NULL(z) (Z_TYPE_P(z) == IS_NULL)

/* For compatibility */
#define ZEND_MINIT			ZEND_MODULE_STARTUP_N
#define ZEND_MSHUTDOWN		ZEND_MODULE_SHUTDOWN_N
#define ZEND_RINIT			ZEND_MODULE_ACTIVATE_N
#define ZEND_RSHUTDOWN		ZEND_MODULE_DEACTIVATE_N
#define ZEND_MINFO			ZEND_MODULE_INFO_N
#define ZEND_GINIT(module)		((void (*)(void*))(ZEND_MODULE_GLOBALS_CTOR_N(module)))
#define ZEND_GSHUTDOWN(module)	((void (*)(void*))(ZEND_MODULE_GLOBALS_DTOR_N(module)))

#define ZEND_MINIT_FUNCTION			ZEND_MODULE_STARTUP_D
#define ZEND_MSHUTDOWN_FUNCTION		ZEND_MODULE_SHUTDOWN_D
#define ZEND_RINIT_FUNCTION			ZEND_MODULE_ACTIVATE_D
#define ZEND_RSHUTDOWN_FUNCTION		ZEND_MODULE_DEACTIVATE_D
#define ZEND_MINFO_FUNCTION			ZEND_MODULE_INFO_D
#define ZEND_GINIT_FUNCTION			ZEND_MODULE_GLOBALS_CTOR_D
#define ZEND_GSHUTDOWN_FUNCTION		ZEND_MODULE_GLOBALS_DTOR_D

/* May modify arg in-place. Will free arg in failure case (and take ownership in success case).
 * Prefer using the ZEND_TRY_ASSIGN_* macros over these APIs. */
ZEND_API zend_result zend_try_assign_typed_ref_ex(zend_reference *ref, zval *zv, bool strict);
ZEND_API zend_result zend_try_assign_typed_ref(zend_reference *ref, zval *zv);

ZEND_API zend_result zend_try_assign_typed_ref_null(zend_reference *ref);
ZEND_API zend_result zend_try_assign_typed_ref_bool(zend_reference *ref, bool val);
ZEND_API zend_result zend_try_assign_typed_ref_long(zend_reference *ref, zend_long lval);
ZEND_API zend_result zend_try_assign_typed_ref_double(zend_reference *ref, double dval);
ZEND_API zend_result zend_try_assign_typed_ref_empty_string(zend_reference *ref);
ZEND_API zend_result zend_try_assign_typed_ref_str(zend_reference *ref, zend_string *str);
ZEND_API zend_result zend_try_assign_typed_ref_string(zend_reference *ref, const char *string);
ZEND_API zend_result zend_try_assign_typed_ref_stringl(zend_reference *ref, const char *string, size_t len);
ZEND_API zend_result zend_try_assign_typed_ref_arr(zend_reference *ref, zend_array *arr);
ZEND_API zend_result zend_try_assign_typed_ref_res(zend_reference *ref, zend_resource *res);
ZEND_API zend_result zend_try_assign_typed_ref_zval(zend_reference *ref, zval *zv);
ZEND_API zend_result zend_try_assign_typed_ref_zval_ex(zend_reference *ref, zval *zv, bool strict);

#define _ZEND_TRY_ASSIGN_NULL(zv, is_ref) do { \
	zval *_zv = zv; \
	if (is_ref || UNEXPECTED(Z_ISREF_P(_zv))) { \
		zend_reference *ref = Z_REF_P(_zv); \
		if (UNEXPECTED(ZEND_REF_HAS_TYPE_SOURCES(ref))) { \
			zend_try_assign_typed_ref_null(ref); \
			break; \
		} \
		_zv = &ref->val; \
	} \
	zval_ptr_safe_dtor(_zv); \
	ZVAL_NULL(_zv); \
} while (0)

#define ZEND_TRY_ASSIGN_NULL(zv) \
	_ZEND_TRY_ASSIGN_NULL(zv, 0)

#define ZEND_TRY_ASSIGN_REF_NULL(zv) do { \
	ZEND_ASSERT(Z_ISREF_P(zv)); \
	_ZEND_TRY_ASSIGN_NULL(zv, 1); \
} while (0)

#define _ZEND_TRY_ASSIGN_FALSE(zv, is_ref) do { \
	zval *_zv = zv; \
	if (is_ref || UNEXPECTED(Z_ISREF_P(_zv))) { \
		zend_reference *ref = Z_REF_P(_zv); \
		if (UNEXPECTED(ZEND_REF_HAS_TYPE_SOURCES(ref))) { \
			zend_try_assign_typed_ref_bool(ref, 0); \
			break; \
		} \
		_zv = &ref->val; \
	} \
	zval_ptr_safe_dtor(_zv); \
	ZVAL_FALSE(_zv); \
} while (0)

#define ZEND_TRY_ASSIGN_FALSE(zv) \
	_ZEND_TRY_ASSIGN_FALSE(zv, 0)

#define ZEND_TRY_ASSIGN_REF_FALSE(zv) do { \
	ZEND_ASSERT(Z_ISREF_P(zv)); \
	_ZEND_TRY_ASSIGN_FALSE(zv, 1); \
} while (0)

#define _ZEND_TRY_ASSIGN_TRUE(zv, is_ref) do { \
	zval *_zv = zv; \
	if (is_ref || UNEXPECTED(Z_ISREF_P(_zv))) { \
		zend_reference *ref = Z_REF_P(_zv); \
		if (UNEXPECTED(ZEND_REF_HAS_TYPE_SOURCES(ref))) { \
			zend_try_assign_typed_ref_bool(ref, 1); \
			break; \
		} \
		_zv = &ref->val; \
	} \
	zval_ptr_safe_dtor(_zv); \
	ZVAL_TRUE(_zv); \
} while (0)

#define ZEND_TRY_ASSIGN_TRUE(zv) \
	_ZEND_TRY_ASSIGN_TRUE(zv, 0)

#define ZEND_TRY_ASSIGN_REF_TRUE(zv) do { \
	ZEND_ASSERT(Z_ISREF_P(zv)); \
	_ZEND_TRY_ASSIGN_TRUE(zv, 1); \
} while (0)

#define _ZEND_TRY_ASSIGN_BOOL(zv, bval, is_ref) do { \
	zval *_zv = zv; \
	if (is_ref || UNEXPECTED(Z_ISREF_P(_zv))) { \
		zend_reference *ref = Z_REF_P(_zv); \
		if (UNEXPECTED(ZEND_REF_HAS_TYPE_SOURCES(ref))) { \
			zend_try_assign_typed_ref_bool(ref, 1); \
			break; \
		} \
		_zv = &ref->val; \
	} \
	zval_ptr_safe_dtor(_zv); \
	ZVAL_BOOL(_zv, bval); \
} while (0)

#define ZEND_TRY_ASSIGN_BOOL(zv, bval) \
	_ZEND_TRY_ASSIGN_BOOL(zv, bval, 0)

#define ZEND_TRY_ASSIGN_REF_BOOL(zv, bval) do { \
	ZEND_ASSERT(Z_ISREF_P(zv)); \
	_ZEND_TRY_ASSIGN_BOOL(zv, bval, 1); \
} while (0)

#define _ZEND_TRY_ASSIGN_LONG(zv, lval, is_ref) do { \
	zval *_zv = zv; \
	if (is_ref || UNEXPECTED(Z_ISREF_P(_zv))) { \
		zend_reference *ref = Z_REF_P(_zv); \
		if (UNEXPECTED(ZEND_REF_HAS_TYPE_SOURCES(ref))) { \
			zend_try_assign_typed_ref_long(ref, lval); \
			break; \
		} \
		_zv = &ref->val; \
	} \
	zval_ptr_safe_dtor(_zv); \
	ZVAL_LONG(_zv, lval); \
} while (0)

#define ZEND_TRY_ASSIGN_LONG(zv, lval) \
	_ZEND_TRY_ASSIGN_LONG(zv, lval, 0)

#define ZEND_TRY_ASSIGN_REF_LONG(zv, lval) do { \
	ZEND_ASSERT(Z_ISREF_P(zv)); \
	_ZEND_TRY_ASSIGN_LONG(zv, lval, 1); \
} while (0)

#define _ZEND_TRY_ASSIGN_DOUBLE(zv, dval, is_ref) do { \
	zval *_zv = zv; \
	if (is_ref || UNEXPECTED(Z_ISREF_P(_zv))) { \
		zend_reference *ref = Z_REF_P(_zv); \
		if (UNEXPECTED(ZEND_REF_HAS_TYPE_SOURCES(ref))) { \
			zend_try_assign_typed_ref_double(ref, dval); \
			break; \
		} \
		_zv = &ref->val; \
	} \
	zval_ptr_safe_dtor(_zv); \
	ZVAL_DOUBLE(_zv, dval); \
} while (0)

#define ZEND_TRY_ASSIGN_DOUBLE(zv, dval) \
	_ZEND_TRY_ASSIGN_DOUBLE(zv, dval, 0)

#define ZEND_TRY_ASSIGN_REF_DOUBLE(zv, dval) do { \
	ZEND_ASSERT(Z_ISREF_P(zv)); \
	_ZEND_TRY_ASSIGN_DOUBLE(zv, dval, 1); \
} while (0)

#define _ZEND_TRY_ASSIGN_EMPTY_STRING(zv, is_ref) do { \
	zval *_zv = zv; \
	if (is_ref || UNEXPECTED(Z_ISREF_P(_zv))) { \
		zend_reference *ref = Z_REF_P(_zv); \
		if (UNEXPECTED(ZEND_REF_HAS_TYPE_SOURCES(ref))) { \
			zend_try_assign_typed_ref_empty_string(ref); \
			break; \
		} \
		_zv = &ref->val; \
	} \
	zval_ptr_safe_dtor(_zv); \
	ZVAL_EMPTY_STRING(_zv); \
} while (0)

#define ZEND_TRY_ASSIGN_EMPTY_STRING(zv) \
	_ZEND_TRY_ASSIGN_EMPTY_STRING(zv, 0)

#define ZEND_TRY_ASSIGN_REF_EMPTY_STRING(zv) do { \
	ZEND_ASSERT(Z_ISREF_P(zv)); \
	_ZEND_TRY_ASSIGN_EMPTY_STRING(zv, 1); \
} while (0)

#define _ZEND_TRY_ASSIGN_STR(zv, str, is_ref) do { \
	zval *_zv = zv; \
	if (is_ref || UNEXPECTED(Z_ISREF_P(_zv))) { \
		zend_reference *ref = Z_REF_P(_zv); \
		if (UNEXPECTED(ZEND_REF_HAS_TYPE_SOURCES(ref))) { \
			zend_try_assign_typed_ref_str(ref, str); \
			break; \
		} \
		_zv = &ref->val; \
	} \
	zval_ptr_safe_dtor(_zv); \
	ZVAL_STR(_zv, str); \
} while (0)

#define ZEND_TRY_ASSIGN_STR(zv, str) \
	_ZEND_TRY_ASSIGN_STR(zv, str, 0)

#define ZEND_TRY_ASSIGN_REF_STR(zv, str) do { \
	ZEND_ASSERT(Z_ISREF_P(zv)); \
	_ZEND_TRY_ASSIGN_STR(zv, str, 1); \
} while (0)

#define _ZEND_TRY_ASSIGN_NEW_STR(zv, str, is_str) do { \
	zval *_zv = zv; \
	if (is_str || UNEXPECTED(Z_ISREF_P(_zv))) { \
		zend_reference *ref = Z_REF_P(_zv); \
		if (UNEXPECTED(ZEND_REF_HAS_TYPE_SOURCES(ref))) { \
			zend_try_assign_typed_ref_str(ref, str); \
			break; \
		} \
		_zv = &ref->val; \
	} \
	zval_ptr_safe_dtor(_zv); \
	ZVAL_NEW_STR(_zv, str); \
} while (0)

#define ZEND_TRY_ASSIGN_NEW_STR(zv, str) \
	_ZEND_TRY_ASSIGN_NEW_STR(zv, str, 0)

#define ZEND_TRY_ASSIGN_REF_NEW_STR(zv, str) do { \
	ZEND_ASSERT(Z_ISREF_P(zv)); \
	_ZEND_TRY_ASSIGN_NEW_STR(zv, str, 1); \
} while (0)

#define _ZEND_TRY_ASSIGN_STRING(zv, string, is_ref) do { \
	zval *_zv = zv; \
	if (is_ref || UNEXPECTED(Z_ISREF_P(_zv))) { \
		zend_reference *ref = Z_REF_P(_zv); \
		if (UNEXPECTED(ZEND_REF_HAS_TYPE_SOURCES(ref))) { \
			zend_try_assign_typed_ref_string(ref, string); \
			break; \
		} \
		_zv = &ref->val; \
	} \
	zval_ptr_safe_dtor(_zv); \
	ZVAL_STRING(_zv, string); \
} while (0)

#define ZEND_TRY_ASSIGN_STRING(zv, string) \
	_ZEND_TRY_ASSIGN_STRING(zv, string, 0)

#define ZEND_TRY_ASSIGN_REF_STRING(zv, string) do { \
	ZEND_ASSERT(Z_ISREF_P(zv)); \
	_ZEND_TRY_ASSIGN_STRING(zv, string, 1); \
} while (0)

#define _ZEND_TRY_ASSIGN_STRINGL(zv, string, len, is_ref) do { \
	zval *_zv = zv; \
	if (is_ref || UNEXPECTED(Z_ISREF_P(_zv))) { \
		zend_reference *ref = Z_REF_P(_zv); \
		if (UNEXPECTED(ZEND_REF_HAS_TYPE_SOURCES(ref))) { \
			zend_try_assign_typed_ref_stringl(ref, string, len); \
			break; \
		} \
		_zv = &ref->val; \
	} \
	zval_ptr_safe_dtor(_zv); \
	ZVAL_STRINGL(_zv, string, len); \
} while (0)

#define ZEND_TRY_ASSIGN_STRINGL(zv, string, len) \
	_ZEND_TRY_ASSIGN_STRINGL(zv, string, len, 0)

#define ZEND_TRY_ASSIGN_REF_STRINGL(zv, string, len) do { \
	ZEND_ASSERT(Z_ISREF_P(zv)); \
	_ZEND_TRY_ASSIGN_STRINGL(zv, string, len, 1); \
} while (0)

#define _ZEND_TRY_ASSIGN_ARR(zv, arr, is_ref) do { \
	zval *_zv = zv; \
	if (is_ref || UNEXPECTED(Z_ISREF_P(_zv))) { \
		zend_reference *ref = Z_REF_P(_zv); \
		if (UNEXPECTED(ZEND_REF_HAS_TYPE_SOURCES(ref))) { \
			zend_try_assign_typed_ref_arr(ref, arr); \
			break; \
		} \
		_zv = &ref->val; \
	} \
	zval_ptr_safe_dtor(_zv); \
	ZVAL_ARR(_zv, arr); \
} while (0)

#define ZEND_TRY_ASSIGN_ARR(zv, arr) \
	_ZEND_TRY_ASSIGN_ARR(zv, arr, 0)

#define ZEND_TRY_ASSIGN_REF_ARR(zv, arr) do { \
	ZEND_ASSERT(Z_ISREF_P(zv)); \
	ZEND_ASSERT(!(GC_FLAGS(arr) & GC_IMMUTABLE)); \
	_ZEND_TRY_ASSIGN_ARR(zv, arr, 1); \
} while (0)

#define _ZEND_TRY_ASSIGN_RES(zv, res, is_ref) do { \
	zval *_zv = zv; \
	if (is_ref || UNEXPECTED(Z_ISREF_P(_zv))) { \
		zend_reference *ref = Z_REF_P(_zv); \
		if (UNEXPECTED(ZEND_REF_HAS_TYPE_SOURCES(ref))) { \
			zend_try_assign_typed_ref_res(ref, res); \
			break; \
		} \
		_zv = &ref->val; \
	} \
	zval_ptr_safe_dtor(_zv); \
	ZVAL_RES(_zv, res); \
} while (0)

#define ZEND_TRY_ASSIGN_RES(zv, res) \
	_ZEND_TRY_ASSIGN_RES(zv, res, 0)

#define ZEND_TRY_ASSIGN_REF_RES(zv, res) do { \
	ZEND_ASSERT(Z_ISREF_P(zv)); \
	_ZEND_TRY_ASSIGN_RES(zv, res, 1); \
} while (0)

#define _ZEND_TRY_ASSIGN_TMP(zv, other_zv, is_ref) do { \
	zval *_zv = zv; \
	if (is_ref || UNEXPECTED(Z_ISREF_P(_zv))) { \
		zend_reference *ref = Z_REF_P(_zv); \
		if (UNEXPECTED(ZEND_REF_HAS_TYPE_SOURCES(ref))) { \
			zend_try_assign_typed_ref(ref, other_zv); \
			break; \
		} \
		_zv = &ref->val; \
	} \
	zval_ptr_safe_dtor(_zv); \
	ZVAL_COPY_VALUE(_zv, other_zv); \
} while (0)

#define ZEND_TRY_ASSIGN_TMP(zv, other_zv) \
	_ZEND_TRY_ASSIGN_TMP(zv, other_zv, 0)

#define ZEND_TRY_ASSIGN_REF_TMP(zv, other_zv) do { \
	ZEND_ASSERT(Z_ISREF_P(zv)); \
	_ZEND_TRY_ASSIGN_TMP(zv, other_zv, 1); \
} while (0)

#define _ZEND_TRY_ASSIGN_VALUE(zv, other_zv, is_ref) do { \
	zval *_zv = zv; \
	if (is_ref || UNEXPECTED(Z_ISREF_P(_zv))) { \
		zend_reference *ref = Z_REF_P(_zv); \
		if (UNEXPECTED(ZEND_REF_HAS_TYPE_SOURCES(ref))) { \
			zend_try_assign_typed_ref_zval(ref, other_zv); \
			break; \
		} \
		_zv = &ref->val; \
	} \
	zval_ptr_safe_dtor(_zv); \
	ZVAL_COPY_VALUE(_zv, other_zv); \
} while (0)

#define ZEND_TRY_ASSIGN_VALUE(zv, other_zv) \
	_ZEND_TRY_ASSIGN_VALUE(zv, other_zv, 0)

#define ZEND_TRY_ASSIGN_REF_VALUE(zv, other_zv) do { \
	ZEND_ASSERT(Z_ISREF_P(zv)); \
	_ZEND_TRY_ASSIGN_VALUE(zv, other_zv, 1); \
} while (0)

#define ZEND_TRY_ASSIGN_COPY(zv, other_zv) do { \
	Z_TRY_ADDREF_P(other_zv); \
	ZEND_TRY_ASSIGN_VALUE(zv, other_zv); \
} while (0)

#define ZEND_TRY_ASSIGN_REF_COPY(zv, other_zv) do { \
	Z_TRY_ADDREF_P(other_zv); \
	ZEND_TRY_ASSIGN_REF_VALUE(zv, other_zv); \
} while (0)

#define _ZEND_TRY_ASSIGN_VALUE_EX(zv, other_zv, strict, is_ref) do { \
	zval *_zv = zv; \
	if (is_ref || UNEXPECTED(Z_ISREF_P(_zv))) { \
		zend_reference *ref = Z_REF_P(_zv); \
		if (UNEXPECTED(ZEND_REF_HAS_TYPE_SOURCES(ref))) { \
			zend_try_assign_typed_ref_zval_ex(ref, other_zv, strict); \
			break; \
		} \
		_zv = &ref->val; \
	} \
	zval_ptr_safe_dtor(_zv); \
	ZVAL_COPY_VALUE(_zv, other_zv); \
} while (0)

#define ZEND_TRY_ASSIGN_VALUE_EX(zv, other_zv, strict) \
	_ZEND_TRY_ASSIGN_VALUE_EX(zv, other_zv, strict, 0)

#define ZEND_TRY_ASSIGN_REF_VALUE_EX(zv, other_zv, strict) do { \
	ZEND_ASSERT(Z_ISREF_P(zv)); \
	_ZEND_TRY_ASSIGN_VALUE_EX(zv, other_zv, strict, 1); \
} while (0)

#define ZEND_TRY_ASSIGN_COPY_EX(zv, other_zv, strict) do { \
	Z_TRY_ADDREF_P(other_zv); \
	ZEND_TRY_ASSIGN_VALUE_EX(zv, other_zv, strict); \
} while (0)

#define ZEND_TRY_ASSIGN_REF_COPY_EX(zv, other_zv, strict) do { \
	Z_TRY_ADDREF_P(other_zv); \
	ZEND_TRY_ASSIGN_REF_VALUE_EX(zv, other_zv, strict); \
} while (0)

/* Initializes a reference to an empty array and returns dereferenced zval,
 * or NULL if the initialization failed. */
static zend_always_inline zval *zend_try_array_init_size(zval *zv, uint32_t size)
{
	zend_array *arr = zend_new_array(size);

	if (EXPECTED(Z_ISREF_P(zv))) {
		zend_reference *ref = Z_REF_P(zv);
		if (UNEXPECTED(ZEND_REF_HAS_TYPE_SOURCES(ref))) {
			if (zend_try_assign_typed_ref_arr(ref, arr) == FAILURE) {
				return NULL;
			}
			return &ref->val;
		}
		zv = &ref->val;
	}
	zval_ptr_safe_dtor(zv);
	ZVAL_ARR(zv, arr);
	return zv;
}

static zend_always_inline zval *zend_try_array_init(zval *zv)
{
	return zend_try_array_init_size(zv, 0);
}

/* Fast parameter parsing API */

/* Fast ZPP is always enabled now; this define is left in for compatibility
 * with any existing conditional compilation blocks.
 */
#define FAST_ZPP 1

#define Z_EXPECTED_TYPES(_) \
	_(Z_EXPECTED_LONG,				"of type int") \
	_(Z_EXPECTED_LONG_OR_NULL,		"of type ?int") \
	_(Z_EXPECTED_BOOL,				"of type bool") \
	_(Z_EXPECTED_BOOL_OR_NULL,		"of type ?bool") \
	_(Z_EXPECTED_STRING,			"of type string") \
	_(Z_EXPECTED_STRING_OR_NULL,	"of type ?string") \
	_(Z_EXPECTED_ARRAY,				"of type array") \
	_(Z_EXPECTED_ARRAY_OR_NULL,		"of type ?array") \
	_(Z_EXPECTED_ARRAY_OR_LONG,		"of type array|int") \
	_(Z_EXPECTED_ARRAY_OR_LONG_OR_NULL, "of type array|int|null") \
	_(Z_EXPECTED_ITERABLE,				"of type Traversable|array") \
	_(Z_EXPECTED_ITERABLE_OR_NULL,		"of type Traversable|array|null") \
	_(Z_EXPECTED_FUNC,				"a valid callback") \
	_(Z_EXPECTED_FUNC_OR_NULL,		"a valid callback or null") \
	_(Z_EXPECTED_RESOURCE,			"of type resource") \
	_(Z_EXPECTED_RESOURCE_OR_NULL,	"of type resource or null") \
	_(Z_EXPECTED_PATH,				"of type string") \
	_(Z_EXPECTED_PATH_OR_NULL,		"of type ?string") \
	_(Z_EXPECTED_OBJECT,			"of type object") \
	_(Z_EXPECTED_OBJECT_OR_NULL,	"of type ?object") \
	_(Z_EXPECTED_DOUBLE,			"of type float") \
	_(Z_EXPECTED_DOUBLE_OR_NULL,	"of type ?float") \
	_(Z_EXPECTED_NUMBER,			"of type int|float") \
	_(Z_EXPECTED_NUMBER_OR_NULL,	"of type int|float|null") \
	_(Z_EXPECTED_NUMBER_OR_STRING,			"of type string|int|float") \
	_(Z_EXPECTED_NUMBER_OR_STRING_OR_NULL,	"of type string|int|float|null") \
	_(Z_EXPECTED_ARRAY_OR_STRING,	"of type array|string") \
	_(Z_EXPECTED_ARRAY_OR_STRING_OR_NULL, "of type array|string|null") \
	_(Z_EXPECTED_STRING_OR_LONG,	"of type string|int") \
	_(Z_EXPECTED_STRING_OR_LONG_OR_NULL, "of type string|int|null") \
	_(Z_EXPECTED_OBJECT_OR_CLASS_NAME,	"an object or a valid class name") \
	_(Z_EXPECTED_OBJECT_OR_CLASS_NAME_OR_NULL, "an object, a valid class name, or null") \
	_(Z_EXPECTED_OBJECT_OR_STRING,	"of type object|string") \
	_(Z_EXPECTED_OBJECT_OR_STRING_OR_NULL, "of type object|string|null") \

#define Z_EXPECTED_TYPE

#define Z_EXPECTED_TYPE_ENUM(id, str) id,
#define Z_EXPECTED_TYPE_STR(id, str)  str,

typedef enum _zend_expected_type {
	Z_EXPECTED_TYPES(Z_EXPECTED_TYPE_ENUM)
	Z_EXPECTED_LAST
} zend_expected_type;

ZEND_API ZEND_COLD void ZEND_FASTCALL zend_wrong_parameters_none_error(void);
ZEND_API ZEND_COLD void ZEND_FASTCALL zend_wrong_parameters_count_error(uint32_t min_num_args, uint32_t max_num_args);
ZEND_API ZEND_COLD void ZEND_FASTCALL zend_wrong_parameter_error(int error_code, uint32_t num, char *name, zend_expected_type expected_type, zval *arg);
ZEND_API ZEND_COLD void ZEND_FASTCALL zend_wrong_parameter_type_error(uint32_t num, zend_expected_type expected_type, zval *arg);
ZEND_API ZEND_COLD void ZEND_FASTCALL zend_wrong_parameter_class_error(uint32_t num, const char *name, zval *arg);
ZEND_API ZEND_COLD void ZEND_FASTCALL zend_wrong_parameter_class_or_null_error(uint32_t num, const char *name, zval *arg);
ZEND_API ZEND_COLD void ZEND_FASTCALL zend_wrong_parameter_class_or_long_error(uint32_t num, const char *name, zval *arg);
ZEND_API ZEND_COLD void ZEND_FASTCALL zend_wrong_parameter_class_or_long_or_null_error(uint32_t num, const char *name, zval *arg);
ZEND_API ZEND_COLD void ZEND_FASTCALL zend_wrong_parameter_class_or_string_error(uint32_t num, const char *name, zval *arg);
ZEND_API ZEND_COLD void ZEND_FASTCALL zend_wrong_parameter_class_or_string_or_null_error(uint32_t num, const char *name, zval *arg);
ZEND_API ZEND_COLD void ZEND_FASTCALL zend_wrong_callback_error(uint32_t num, char *error);
ZEND_API ZEND_COLD void ZEND_FASTCALL zend_wrong_callback_or_null_error(uint32_t num, char *error);
ZEND_API ZEND_COLD void ZEND_FASTCALL zend_unexpected_extra_named_error(void);
ZEND_API ZEND_COLD void ZEND_FASTCALL zend_argument_error_variadic(zend_class_entry *error_ce, uint32_t arg_num, const char *format, va_list va);
ZEND_API ZEND_COLD void zend_argument_error(zend_class_entry *error_ce, uint32_t arg_num, const char *format, ...);
ZEND_API ZEND_COLD void zend_argument_type_error(uint32_t arg_num, const char *format, ...);
ZEND_API ZEND_COLD void zend_argument_value_error(uint32_t arg_num, const char *format, ...);
ZEND_API ZEND_COLD void zend_argument_must_not_be_empty_error(uint32_t arg_num);
ZEND_API ZEND_COLD void zend_class_redeclaration_error(int type, zend_class_entry *old_ce);
ZEND_API ZEND_COLD void zend_class_redeclaration_error_ex(int type, zend_string *new_name, zend_class_entry *old_ce);

#define ZPP_ERROR_OK                            0
#define ZPP_ERROR_FAILURE                       1
#define ZPP_ERROR_WRONG_CALLBACK                2
#define ZPP_ERROR_WRONG_CLASS                   3
#define ZPP_ERROR_WRONG_CLASS_OR_NULL           4
#define ZPP_ERROR_WRONG_CLASS_OR_STRING         5
#define ZPP_ERROR_WRONG_CLASS_OR_STRING_OR_NULL 6
#define ZPP_ERROR_WRONG_CLASS_OR_LONG           7
#define ZPP_ERROR_WRONG_CLASS_OR_LONG_OR_NULL   8
#define ZPP_ERROR_WRONG_ARG                     9
#define ZPP_ERROR_WRONG_COUNT                   10
#define ZPP_ERROR_UNEXPECTED_EXTRA_NAMED        11
#define ZPP_ERROR_WRONG_CALLBACK_OR_NULL        12

#define ZEND_PARSE_PARAMETERS_START_EX(flags, min_num_args, max_num_args) do { \
		const int _flags = (flags); \
		uint32_t _min_num_args = (min_num_args); \
		uint32_t _max_num_args = (uint32_t) (max_num_args); \
		uint32_t _num_args = EX_NUM_ARGS(); \
		uint32_t _i = 0; \
		zval *_real_arg, *_arg = NULL; \
		zend_expected_type _expected_type = Z_EXPECTED_LONG; \
		char *_error = NULL; \
		bool _dummy = 0; \
		bool _optional = 0; \
		int _error_code = ZPP_ERROR_OK; \
		((void)_i); \
		((void)_real_arg); \
		((void)_arg); \
		((void)_expected_type); \
		((void)_error); \
		((void)_optional); \
		((void)_dummy); \
		\
		do { \
			if (UNEXPECTED(_num_args < _min_num_args) || \
			    UNEXPECTED(_num_args > _max_num_args)) { \
				if (!(_flags & ZEND_PARSE_PARAMS_QUIET)) { \
					zend_wrong_parameters_count_error(_min_num_args, _max_num_args); \
				} \
				_error_code = ZPP_ERROR_FAILURE; \
				break; \
			} \
			_real_arg = ZEND_CALL_ARG(execute_data, 0);

#define ZEND_PARSE_PARAMETERS_START(min_num_args, max_num_args) \
	ZEND_PARSE_PARAMETERS_START_EX(0, min_num_args, max_num_args)

#define ZEND_PARSE_PARAMETERS_NONE() do { \
		if (UNEXPECTED(ZEND_NUM_ARGS() != 0)) { \
			zend_wrong_parameters_none_error(); \
			return; \
		} \
	} while (0)

#define ZEND_PARSE_PARAMETERS_END_EX(failure) \
			ZEND_ASSERT(_i == _max_num_args || _max_num_args == (uint32_t) -1); \
		} while (0); \
		if (UNEXPECTED(_error_code != ZPP_ERROR_OK)) { \
			if (!(_flags & ZEND_PARSE_PARAMS_QUIET)) { \
				zend_wrong_parameter_error(_error_code, _i, _error, _expected_type, _arg); \
			} \
			failure; \
		} \
	} while (0)

#define ZEND_PARSE_PARAMETERS_END() \
	ZEND_PARSE_PARAMETERS_END_EX(return)

#define Z_PARAM_PROLOGUE(deref, separate) \
	++_i; \
	ZEND_ASSERT(_i <= _min_num_args || _optional==1); \
	ZEND_ASSERT(_i >  _min_num_args || _optional==0); \
	if (_optional) { \
		if (UNEXPECTED(_i >_num_args)) break; \
	} \
	_real_arg++; \
	_arg = _real_arg; \
	if (deref) { \
		if (EXPECTED(Z_ISREF_P(_arg))) { \
			_arg = Z_REFVAL_P(_arg); \
		} \
	} \
	if (separate) { \
		SEPARATE_ZVAL_NOREF(_arg); \
	}

/* get the zval* for a previously parsed argument */
#define Z_PARAM_GET_PREV_ZVAL(dest) \
	zend_parse_arg_zval_deref(_arg, &dest, 0);

/* old "|" */
#define Z_PARAM_OPTIONAL \
	_optional = 1;

/* old "a" */
#define Z_PARAM_ARRAY_EX2(dest, check_null, deref, separate) \
		Z_PARAM_PROLOGUE(deref, separate); \
		if (UNEXPECTED(!zend_parse_arg_array(_arg, &dest, check_null, 0))) { \
			_expected_type = check_null ? Z_EXPECTED_ARRAY_OR_NULL : Z_EXPECTED_ARRAY; \
			_error_code = ZPP_ERROR_WRONG_ARG; \
			break; \
		}

#define Z_PARAM_ARRAY_EX(dest, check_null, separate) \
	Z_PARAM_ARRAY_EX2(dest, check_null, separate, separate)

#define Z_PARAM_ARRAY(dest) \
	Z_PARAM_ARRAY_EX(dest, 0, 0)

#define Z_PARAM_ARRAY_OR_NULL(dest) \
	Z_PARAM_ARRAY_EX(dest, 1, 0)

/* old "A" */
#define Z_PARAM_ARRAY_OR_OBJECT_EX2(dest, check_null, deref, separate) \
		Z_PARAM_PROLOGUE(deref, separate); \
		if (UNEXPECTED(!zend_parse_arg_array(_arg, &dest, check_null, 1))) { \
			_expected_type = check_null ? Z_EXPECTED_ARRAY_OR_NULL : Z_EXPECTED_ARRAY; \
			_error_code = ZPP_ERROR_WRONG_ARG; \
			break; \
		}

#define Z_PARAM_ARRAY_OR_OBJECT_EX(dest, check_null, separate) \
	Z_PARAM_ARRAY_OR_OBJECT_EX2(dest, check_null, separate, separate)

#define Z_PARAM_ARRAY_OR_OBJECT(dest) \
	Z_PARAM_ARRAY_OR_OBJECT_EX(dest, 0, 0)

#define Z_PARAM_ITERABLE_EX(dest, check_null) \
	Z_PARAM_PROLOGUE(0, 0); \
	if (UNEXPECTED(!zend_parse_arg_iterable(_arg, &dest, check_null))) { \
		_expected_type = check_null ? Z_EXPECTED_ITERABLE_OR_NULL : Z_EXPECTED_ITERABLE; \
		_error_code = ZPP_ERROR_WRONG_ARG; \
		break; \
	}

#define Z_PARAM_ITERABLE(dest) \
	Z_PARAM_ITERABLE_EX(dest, 0)

#define Z_PARAM_ITERABLE_OR_NULL(dest) \
	Z_PARAM_ITERABLE_EX(dest, 1)

/* old "b" */
#define Z_PARAM_BOOL_EX(dest, is_null, check_null, deref) \
		Z_PARAM_PROLOGUE(deref, 0); \
		if (UNEXPECTED(!zend_parse_arg_bool(_arg, &dest, &is_null, check_null, _i))) { \
			_expected_type = check_null ? Z_EXPECTED_BOOL_OR_NULL : Z_EXPECTED_BOOL; \
			_error_code = ZPP_ERROR_WRONG_ARG; \
			break; \
		}

#define Z_PARAM_BOOL(dest) \
	Z_PARAM_BOOL_EX(dest, _dummy, 0, 0)

#define Z_PARAM_BOOL_OR_NULL(dest, is_null) \
	Z_PARAM_BOOL_EX(dest, is_null, 1, 0)

/* old "C" */
#define Z_PARAM_CLASS_EX(dest, check_null, deref) \
		Z_PARAM_PROLOGUE(deref, 0); \
		if (UNEXPECTED(!zend_parse_arg_class(_arg, &dest, _i, check_null))) { \
			_error_code = ZPP_ERROR_FAILURE; \
			break; \
		}

#define Z_PARAM_CLASS(dest) \
	Z_PARAM_CLASS_EX(dest, 0, 0)

#define Z_PARAM_CLASS_OR_NULL(dest) \
	Z_PARAM_CLASS_EX(dest, 1, 0)

#define Z_PARAM_OBJ_OR_CLASS_NAME_EX(dest, allow_null) \
	Z_PARAM_PROLOGUE(0, 0); \
	if (UNEXPECTED(!zend_parse_arg_obj_or_class_name(_arg, &dest, allow_null))) { \
		_expected_type = allow_null ? Z_EXPECTED_OBJECT_OR_CLASS_NAME_OR_NULL : Z_EXPECTED_OBJECT_OR_CLASS_NAME; \
		_error_code = ZPP_ERROR_WRONG_ARG; \
		break; \
	}

#define Z_PARAM_OBJ_OR_CLASS_NAME(dest) \
	Z_PARAM_OBJ_OR_CLASS_NAME_EX(dest, 0);

#define Z_PARAM_OBJ_OR_CLASS_NAME_OR_NULL(dest) \
	Z_PARAM_OBJ_OR_CLASS_NAME_EX(dest, 1);

#define Z_PARAM_OBJ_OR_STR_EX(destination_object, destination_string, allow_null) \
	Z_PARAM_PROLOGUE(0, 0); \
	if (UNEXPECTED(!zend_parse_arg_obj_or_str(_arg, &destination_object, NULL, &destination_string, allow_null, _i))) { \
		_expected_type = allow_null ? Z_EXPECTED_OBJECT_OR_STRING_OR_NULL : Z_EXPECTED_OBJECT_OR_STRING; \
		_error_code = ZPP_ERROR_WRONG_ARG; \
		break; \
	}

#define Z_PARAM_OBJ_OR_STR(destination_object, destination_string) \
	Z_PARAM_OBJ_OR_STR_EX(destination_object, destination_string, 0);

#define Z_PARAM_OBJ_OR_STR_OR_NULL(destination_object, destination_string) \
	Z_PARAM_OBJ_OR_STR_EX(destination_object, destination_string, 1);

#define Z_PARAM_OBJ_OF_CLASS_OR_STR_EX(destination_object, base_ce, destination_string, allow_null) \
	Z_PARAM_PROLOGUE(0, 0); \
	if (UNEXPECTED(!zend_parse_arg_obj_or_str(_arg, &destination_object, base_ce, &destination_string, allow_null, _i))) { \
		if (base_ce) { \
			_error = ZSTR_VAL((base_ce)->name); \
			_error_code = allow_null ? ZPP_ERROR_WRONG_CLASS_OR_STRING_OR_NULL : ZPP_ERROR_WRONG_CLASS_OR_STRING; \
			break; \
		} else { \
			_expected_type = allow_null ? Z_EXPECTED_OBJECT_OR_STRING_OR_NULL : Z_EXPECTED_OBJECT_OR_STRING; \
			_error_code = ZPP_ERROR_WRONG_ARG; \
			break; \
		} \
	}

#define Z_PARAM_OBJ_OF_CLASS_OR_STR(destination_object, base_ce, destination_string) \
	Z_PARAM_OBJ_OF_CLASS_OR_STR_EX(destination_object, base_ce, destination_string, 0);

#define Z_PARAM_OBJ_OF_CLASS_OR_STR_OR_NULL(destination_object, base_ce, destination_string) \
	Z_PARAM_OBJ_OF_CLASS_OR_STR_EX(destination_object, base_ce, destination_string, 1);

/* old "d" */
#define Z_PARAM_DOUBLE_EX(dest, is_null, check_null, deref) \
		Z_PARAM_PROLOGUE(deref, 0); \
		if (UNEXPECTED(!zend_parse_arg_double(_arg, &dest, &is_null, check_null, _i))) { \
			_expected_type = check_null ? Z_EXPECTED_DOUBLE_OR_NULL : Z_EXPECTED_DOUBLE; \
			_error_code = ZPP_ERROR_WRONG_ARG; \
			break; \
		}

#define Z_PARAM_DOUBLE(dest) \
	Z_PARAM_DOUBLE_EX(dest, _dummy, 0, 0)

#define Z_PARAM_DOUBLE_OR_NULL(dest, is_null) \
	Z_PARAM_DOUBLE_EX(dest, is_null, 1, 0)

/* old "f" */
#define Z_PARAM_FUNC_EX2(dest_fci, dest_fcc, check_null, deref, free_trampoline) \
		Z_PARAM_PROLOGUE(deref, 0); \
		if (UNEXPECTED(!zend_parse_arg_func(_arg, &dest_fci, &dest_fcc, check_null, &_error, free_trampoline))) { \
			if (!_error) { \
				_expected_type = check_null ? Z_EXPECTED_FUNC_OR_NULL : Z_EXPECTED_FUNC; \
				_error_code = ZPP_ERROR_WRONG_ARG; \
			} else { \
				_error_code = check_null ? ZPP_ERROR_WRONG_CALLBACK_OR_NULL : ZPP_ERROR_WRONG_CALLBACK; \
			} \
			break; \
		} \

#define Z_PARAM_FUNC_EX(dest_fci, dest_fcc, check_null, deref) Z_PARAM_FUNC_EX2(dest_fci, dest_fcc, check_null, deref, true)

#define Z_PARAM_FUNC(dest_fci, dest_fcc) \
	Z_PARAM_FUNC_EX2(dest_fci, dest_fcc, 0, 0, true)

#define Z_PARAM_FUNC_NO_TRAMPOLINE_FREE(dest_fci, dest_fcc) \
	Z_PARAM_FUNC_EX2(dest_fci, dest_fcc, 0, 0, false)

#define Z_PARAM_FUNC_OR_NULL(dest_fci, dest_fcc) \
	Z_PARAM_FUNC_EX2(dest_fci, dest_fcc, 1, 0, true)

#define Z_PARAM_FUNC_NO_TRAMPOLINE_FREE_OR_NULL(dest_fci, dest_fcc) \
	Z_PARAM_FUNC_EX2(dest_fci, dest_fcc, 1, 0, false)

#define Z_PARAM_FUNC_OR_NULL_WITH_ZVAL(dest_fci, dest_fcc, dest_zp) \
	Z_PARAM_FUNC_EX2(dest_fci, dest_fcc, 1, 0, true) \
	Z_PARAM_GET_PREV_ZVAL(dest_zp)

/* old "h" */
#define Z_PARAM_ARRAY_HT_EX2(dest, check_null, deref, separate) \
		Z_PARAM_PROLOGUE(deref, separate); \
		if (UNEXPECTED(!zend_parse_arg_array_ht(_arg, &dest, check_null, 0, separate))) { \
			_expected_type = check_null ? Z_EXPECTED_ARRAY_OR_NULL : Z_EXPECTED_ARRAY; \
			_error_code = ZPP_ERROR_WRONG_ARG; \
			break; \
		}

#define Z_PARAM_ARRAY_HT_EX(dest, check_null, separate) \
	Z_PARAM_ARRAY_HT_EX2(dest, check_null, separate, separate)

#define Z_PARAM_ARRAY_HT(dest) \
	Z_PARAM_ARRAY_HT_EX(dest, 0, 0)

#define Z_PARAM_ARRAY_HT_OR_NULL(dest) \
	Z_PARAM_ARRAY_HT_EX(dest, 1, 0)

#define Z_PARAM_ARRAY_HT_OR_LONG_EX(dest_ht, dest_long, is_null, allow_null) \
	Z_PARAM_PROLOGUE(0, 0); \
	if (UNEXPECTED(!zend_parse_arg_array_ht_or_long(_arg, &dest_ht, &dest_long, &is_null, allow_null, _i))) { \
		_expected_type = allow_null ? Z_EXPECTED_ARRAY_OR_LONG_OR_NULL : Z_EXPECTED_ARRAY_OR_LONG; \
		_error_code = ZPP_ERROR_WRONG_ARG; \
		break; \
	}

#define Z_PARAM_ARRAY_HT_OR_LONG(dest_ht, dest_long) \
	Z_PARAM_ARRAY_HT_OR_LONG_EX(dest_ht, dest_long, _dummy, 0)

#define Z_PARAM_ARRAY_HT_OR_LONG_OR_NULL(dest_ht, dest_long, is_null) \
	Z_PARAM_ARRAY_HT_OR_LONG_EX(dest_ht, dest_long, is_null, 1)

/* old "H" */
#define Z_PARAM_ARRAY_OR_OBJECT_HT_EX2(dest, check_null, deref, separate) \
		Z_PARAM_PROLOGUE(deref, separate); \
		if (UNEXPECTED(!zend_parse_arg_array_ht(_arg, &dest, check_null, 1, separate))) { \
			_expected_type = check_null ? Z_EXPECTED_ARRAY_OR_NULL : Z_EXPECTED_ARRAY; \
			_error_code = ZPP_ERROR_WRONG_ARG; \
			break; \
		}

#define Z_PARAM_ARRAY_OR_OBJECT_HT_EX(dest, check_null, separate) \
	Z_PARAM_ARRAY_OR_OBJECT_HT_EX2(dest, check_null, separate, separate)

#define Z_PARAM_ARRAY_OR_OBJECT_HT(dest) \
	Z_PARAM_ARRAY_OR_OBJECT_HT_EX(dest, 0, 0)

/* old "l" */
#define Z_PARAM_LONG_EX(dest, is_null, check_null, deref) \
		Z_PARAM_PROLOGUE(deref, 0); \
		if (UNEXPECTED(!zend_parse_arg_long(_arg, &dest, &is_null, check_null, _i))) { \
			_expected_type = check_null ? Z_EXPECTED_LONG_OR_NULL : Z_EXPECTED_LONG; \
			_error_code = ZPP_ERROR_WRONG_ARG; \
			break; \
		}

#define Z_PARAM_LONG(dest) \
	Z_PARAM_LONG_EX(dest, _dummy, 0, 0)

#define Z_PARAM_LONG_OR_NULL(dest, is_null) \
	Z_PARAM_LONG_EX(dest, is_null, 1, 0)

/* old "n" */
#define Z_PARAM_NUMBER_EX(dest, check_null) \
	Z_PARAM_PROLOGUE(0, 0); \
	if (UNEXPECTED(!zend_parse_arg_number(_arg, &dest, check_null, _i))) { \
		_expected_type = check_null ? Z_EXPECTED_NUMBER_OR_NULL : Z_EXPECTED_NUMBER; \
		_error_code = ZPP_ERROR_WRONG_ARG; \
		break; \
	}

#define Z_PARAM_NUMBER_OR_NULL(dest) \
	Z_PARAM_NUMBER_EX(dest, 1)

#define Z_PARAM_NUMBER(dest) \
	Z_PARAM_NUMBER_EX(dest, 0)

#define Z_PARAM_NUMBER_OR_STR_EX(dest, check_null) \
	Z_PARAM_PROLOGUE(0, 0); \
	if (UNEXPECTED(!zend_parse_arg_number_or_str(_arg, &dest, check_null, _i))) { \
		_expected_type = check_null ? Z_EXPECTED_NUMBER_OR_STRING_OR_NULL : Z_EXPECTED_NUMBER_OR_STRING; \
		_error_code = ZPP_ERROR_WRONG_ARG; \
		break; \
	}

#define Z_PARAM_NUMBER_OR_STR(dest) \
	Z_PARAM_NUMBER_OR_STR_EX(dest, false)

#define Z_PARAM_NUMBER_OR_STR_OR_NULL(dest) \
	Z_PARAM_NUMBER_OR_STR_EX(dest, true)

/* old "o" */
#define Z_PARAM_OBJECT_EX(dest, check_null, deref) \
		Z_PARAM_PROLOGUE(deref, 0); \
		if (UNEXPECTED(!zend_parse_arg_object(_arg, &dest, NULL, check_null))) { \
			_expected_type = check_null ? Z_EXPECTED_OBJECT_OR_NULL : Z_EXPECTED_OBJECT; \
			_error_code = ZPP_ERROR_WRONG_ARG; \
			break; \
		}

#define Z_PARAM_OBJECT(dest) \
	Z_PARAM_OBJECT_EX(dest, 0, 0)

#define Z_PARAM_OBJECT_OR_NULL(dest) \
	Z_PARAM_OBJECT_EX(dest, 1, 0)

/* The same as Z_PARAM_OBJECT_EX except that dest is a zend_object rather than a zval */
#define Z_PARAM_OBJ_EX(dest, check_null, deref) \
		Z_PARAM_PROLOGUE(deref, 0); \
		if (UNEXPECTED(!zend_parse_arg_obj(_arg, &dest, NULL, check_null))) { \
			_expected_type = check_null ? Z_EXPECTED_OBJECT_OR_NULL : Z_EXPECTED_OBJECT; \
			_error_code = ZPP_ERROR_WRONG_ARG; \
			break; \
		}

#define Z_PARAM_OBJ(dest) \
	Z_PARAM_OBJ_EX(dest, 0, 0)

#define Z_PARAM_OBJ_OR_NULL(dest) \
	Z_PARAM_OBJ_EX(dest, 1, 0)

/* old "O" */
#define Z_PARAM_OBJECT_OF_CLASS_EX(dest, _ce, check_null, deref) \
		Z_PARAM_PROLOGUE(deref, 0); \
		if (UNEXPECTED(!zend_parse_arg_object(_arg, &dest, _ce, check_null))) { \
			if (_ce) { \
				_error = ZSTR_VAL((_ce)->name); \
				_error_code = check_null ? ZPP_ERROR_WRONG_CLASS_OR_NULL : ZPP_ERROR_WRONG_CLASS; \
				break; \
			} else { \
				_expected_type = check_null ? Z_EXPECTED_OBJECT_OR_NULL : Z_EXPECTED_OBJECT; \
				_error_code = ZPP_ERROR_WRONG_ARG; \
				break; \
			} \
		}

#define Z_PARAM_OBJECT_OF_CLASS(dest, _ce) \
	Z_PARAM_OBJECT_OF_CLASS_EX(dest, _ce, 0, 0)

#define Z_PARAM_OBJECT_OF_CLASS_OR_NULL(dest, _ce) \
	Z_PARAM_OBJECT_OF_CLASS_EX(dest, _ce, 1, 0)

/* The same as Z_PARAM_OBJECT_OF_CLASS_EX except that dest is a zend_object rather than a zval */
#define Z_PARAM_OBJ_OF_CLASS_EX(dest, _ce, check_null, deref) \
		Z_PARAM_PROLOGUE(deref, 0); \
		if (UNEXPECTED(!zend_parse_arg_obj(_arg, &dest, _ce, check_null))) { \
			if (_ce) { \
				_error = ZSTR_VAL((_ce)->name); \
				_error_code = check_null ? ZPP_ERROR_WRONG_CLASS_OR_NULL : ZPP_ERROR_WRONG_CLASS; \
				break; \
			} else { \
				_expected_type = check_null ? Z_EXPECTED_OBJECT_OR_NULL : Z_EXPECTED_OBJECT; \
				_error_code = ZPP_ERROR_WRONG_ARG; \
				break; \
			} \
		}

#define Z_PARAM_OBJ_OF_CLASS(dest, _ce) \
	Z_PARAM_OBJ_OF_CLASS_EX(dest, _ce, 0, 0)

#define Z_PARAM_OBJ_OF_CLASS_OR_NULL(dest, _ce) \
	Z_PARAM_OBJ_OF_CLASS_EX(dest, _ce, 1, 0)

#define Z_PARAM_OBJ_OF_CLASS_OR_LONG_EX(dest_obj, _ce, dest_long, is_null, allow_null) \
		Z_PARAM_PROLOGUE(0, 0); \
		if (UNEXPECTED(!zend_parse_arg_obj_or_long(_arg, &dest_obj, _ce, &dest_long, &is_null, allow_null, _i))) { \
			_error = ZSTR_VAL((_ce)->name); \
			_error_code = allow_null ? ZPP_ERROR_WRONG_CLASS_OR_LONG_OR_NULL : ZPP_ERROR_WRONG_CLASS_OR_LONG; \
			break; \
		}

#define Z_PARAM_OBJ_OF_CLASS_OR_LONG(dest_obj, _ce, dest_long) \
	Z_PARAM_OBJ_OF_CLASS_OR_LONG_EX(dest_obj, _ce, dest_long, _dummy, 0)

#define Z_PARAM_OBJ_OF_CLASS_OR_LONG_OR_NULL(dest_obj, _ce, dest_long, is_null) \
	Z_PARAM_OBJ_OF_CLASS_OR_LONG_EX(dest_obj, _ce, dest_long, is_null, 1)

/* old "p" */
#define Z_PARAM_PATH_EX(dest, dest_len, check_null, deref) \
		Z_PARAM_PROLOGUE(deref, 0); \
		if (UNEXPECTED(!zend_parse_arg_path(_arg, &dest, &dest_len, check_null, _i))) { \
			_expected_type = check_null ? Z_EXPECTED_PATH_OR_NULL : Z_EXPECTED_PATH; \
			_error_code = ZPP_ERROR_WRONG_ARG; \
			break; \
		}

#define Z_PARAM_PATH(dest, dest_len) \
	Z_PARAM_PATH_EX(dest, dest_len, 0, 0)

#define Z_PARAM_PATH_OR_NULL(dest, dest_len) \
	Z_PARAM_PATH_EX(dest, dest_len, 1, 0)

/* old "P" */
#define Z_PARAM_PATH_STR_EX(dest, check_null, deref) \
		Z_PARAM_PROLOGUE(deref, 0); \
		if (UNEXPECTED(!zend_parse_arg_path_str(_arg, &dest, check_null, _i))) { \
			_expected_type = check_null ? Z_EXPECTED_PATH_OR_NULL : Z_EXPECTED_PATH; \
			_error_code = ZPP_ERROR_WRONG_ARG; \
			break; \
		}

#define Z_PARAM_PATH_STR(dest) \
	Z_PARAM_PATH_STR_EX(dest, 0, 0)

#define Z_PARAM_PATH_STR_OR_NULL(dest) \
	Z_PARAM_PATH_STR_EX(dest, 1, 0)

/* old "r" */
#define Z_PARAM_RESOURCE_EX(dest, check_null, deref) \
		Z_PARAM_PROLOGUE(deref, 0); \
		if (UNEXPECTED(!zend_parse_arg_resource(_arg, &dest, check_null))) { \
			_expected_type = check_null ? Z_EXPECTED_RESOURCE_OR_NULL : Z_EXPECTED_RESOURCE; \
			_error_code = ZPP_ERROR_WRONG_ARG; \
			break; \
		}

#define Z_PARAM_RESOURCE(dest) \
	Z_PARAM_RESOURCE_EX(dest, 0, 0)

#define Z_PARAM_RESOURCE_OR_NULL(dest) \
	Z_PARAM_RESOURCE_EX(dest, 1, 0)

/* old "s" */
#define Z_PARAM_STRING_EX(dest, dest_len, check_null, deref) \
		Z_PARAM_PROLOGUE(deref, 0); \
		if (UNEXPECTED(!zend_parse_arg_string(_arg, &dest, &dest_len, check_null, _i))) { \
			_expected_type = check_null ? Z_EXPECTED_STRING_OR_NULL : Z_EXPECTED_STRING; \
			_error_code = ZPP_ERROR_WRONG_ARG; \
			break; \
		}

#define Z_PARAM_STRING(dest, dest_len) \
	Z_PARAM_STRING_EX(dest, dest_len, 0, 0)

#define Z_PARAM_STRING_OR_NULL(dest, dest_len) \
	Z_PARAM_STRING_EX(dest, dest_len, 1, 0)

/* old "S" */
#define Z_PARAM_STR_EX(dest, check_null, deref) \
		Z_PARAM_PROLOGUE(deref, 0); \
		if (UNEXPECTED(!zend_parse_arg_str(_arg, &dest, check_null, _i))) { \
			_expected_type = check_null ? Z_EXPECTED_STRING_OR_NULL : Z_EXPECTED_STRING; \
			_error_code = ZPP_ERROR_WRONG_ARG; \
			break; \
		}

#define Z_PARAM_STR(dest) \
	Z_PARAM_STR_EX(dest, 0, 0)

#define Z_PARAM_STR_OR_NULL(dest) \
	Z_PARAM_STR_EX(dest, 1, 0)

/* old "z" */
#define Z_PARAM_ZVAL_EX2(dest, check_null, deref, separate) \
		Z_PARAM_PROLOGUE(deref, separate); \
		zend_parse_arg_zval_deref(_arg, &dest, check_null);

#define Z_PARAM_ZVAL_EX(dest, check_null, separate) \
	Z_PARAM_ZVAL_EX2(dest, check_null, separate, separate)

#define Z_PARAM_ZVAL(dest) \
	Z_PARAM_ZVAL_EX(dest, 0, 0)

#define Z_PARAM_ZVAL_OR_NULL(dest) \
	Z_PARAM_ZVAL_EX(dest, 1, 0)

/* old "+" and "*" */
#define Z_PARAM_VARIADIC_EX(spec, dest, dest_num, post_varargs) do { \
		uint32_t _num_varargs = _num_args - _i - (post_varargs); \
		if (EXPECTED(_num_varargs > 0)) { \
			dest = _real_arg + 1; \
			dest_num = _num_varargs; \
			_i += _num_varargs; \
			_real_arg += _num_varargs; \
		} else { \
			dest = NULL; \
			dest_num = 0; \
		} \
		if (UNEXPECTED(ZEND_CALL_INFO(execute_data) & ZEND_CALL_HAS_EXTRA_NAMED_PARAMS)) { \
			_error_code = ZPP_ERROR_UNEXPECTED_EXTRA_NAMED; \
			break; \
		} \
	} while (0);

#define Z_PARAM_VARIADIC(spec, dest, dest_num) \
	Z_PARAM_VARIADIC_EX(spec, dest, dest_num, 0)

#define Z_PARAM_VARIADIC_WITH_NAMED(dest, dest_num, dest_named) do { \
		uint32_t _num_varargs = _num_args - _i; \
		if (EXPECTED(_num_varargs > 0)) { \
			dest = _real_arg + 1; \
			dest_num = _num_varargs; \
		} else { \
			dest = NULL; \
			dest_num = 0; \
		} \
		if (ZEND_CALL_INFO(execute_data) & ZEND_CALL_HAS_EXTRA_NAMED_PARAMS) { \
			dest_named = execute_data->extra_named_params; \
		} else { \
			dest_named = NULL; \
		} \
	} while (0);

#define Z_PARAM_ARRAY_HT_OR_STR_EX(dest_ht, dest_str, allow_null) \
	Z_PARAM_PROLOGUE(0, 0); \
	if (UNEXPECTED(!zend_parse_arg_array_ht_or_str(_arg, &dest_ht, &dest_str, allow_null, _i))) { \
		_expected_type = allow_null ? Z_EXPECTED_ARRAY_OR_STRING_OR_NULL : Z_EXPECTED_ARRAY_OR_STRING; \
		_error_code = ZPP_ERROR_WRONG_ARG; \
		break; \
	}

#define Z_PARAM_ARRAY_HT_OR_STR(dest_ht, dest_str) \
	Z_PARAM_ARRAY_HT_OR_STR_EX(dest_ht, dest_str, 0);

#define Z_PARAM_ARRAY_HT_OR_STR_OR_NULL(dest_ht, dest_str) \
	Z_PARAM_ARRAY_HT_OR_STR_EX(dest_ht, dest_str, 1);

#define Z_PARAM_STR_OR_LONG_EX(dest_str, dest_long, is_null, allow_null) \
	Z_PARAM_PROLOGUE(0, 0); \
	if (UNEXPECTED(!zend_parse_arg_str_or_long(_arg, &dest_str, &dest_long, &is_null, allow_null, _i))) { \
		_expected_type = allow_null ? Z_EXPECTED_STRING_OR_LONG_OR_NULL : Z_EXPECTED_STRING_OR_LONG; \
		_error_code = ZPP_ERROR_WRONG_ARG; \
		break; \
	}

#define Z_PARAM_STR_OR_LONG(dest_str, dest_long) \
	Z_PARAM_STR_OR_LONG_EX(dest_str, dest_long, _dummy, 0);

#define Z_PARAM_STR_OR_LONG_OR_NULL(dest_str, dest_long, is_null) \
	Z_PARAM_STR_OR_LONG_EX(dest_str, dest_long, is_null, 1);

/* End of new parameter parsing API */

/* Inlined implementations shared by new and old parameter parsing APIs */

ZEND_API bool ZEND_FASTCALL zend_parse_arg_class(zval *arg, zend_class_entry **pce, uint32_t num, bool check_null);
ZEND_API bool ZEND_FASTCALL zend_parse_arg_bool_slow(const zval *arg, bool *dest, uint32_t arg_num);
ZEND_API bool ZEND_FASTCALL zend_parse_arg_bool_weak(const zval *arg, bool *dest, uint32_t arg_num);
ZEND_API bool ZEND_FASTCALL zend_parse_arg_long_slow(const zval *arg, zend_long *dest, uint32_t arg_num);
ZEND_API bool ZEND_FASTCALL zend_parse_arg_long_weak(const zval *arg, zend_long *dest, uint32_t arg_num);
ZEND_API bool ZEND_FASTCALL zend_parse_arg_double_slow(const zval *arg, double *dest, uint32_t arg_num);
ZEND_API bool ZEND_FASTCALL zend_parse_arg_double_weak(const zval *arg, double *dest, uint32_t arg_num);
ZEND_API bool ZEND_FASTCALL zend_parse_arg_str_slow(zval *arg, zend_string **dest, uint32_t arg_num);
ZEND_API bool ZEND_FASTCALL zend_parse_arg_str_weak(zval *arg, zend_string **dest, uint32_t arg_num);
ZEND_API bool ZEND_FASTCALL zend_parse_arg_number_slow(zval *arg, zval **dest, uint32_t arg_num);
ZEND_API bool ZEND_FASTCALL zend_parse_arg_number_or_str_slow(zval *arg, zval **dest, uint32_t arg_num);
ZEND_API bool ZEND_FASTCALL zend_parse_arg_str_or_long_slow(zval *arg, zend_string **dest_str, zend_long *dest_long, uint32_t arg_num);

ZEND_API bool ZEND_FASTCALL zend_flf_parse_arg_bool_slow(const zval *arg, bool *dest, uint32_t arg_num);
ZEND_API bool ZEND_FASTCALL zend_flf_parse_arg_str_slow(zval *arg, zend_string **dest, uint32_t arg_num);
ZEND_API bool ZEND_FASTCALL zend_flf_parse_arg_long_slow(const zval *arg, zend_long *dest, uint32_t arg_num);

static zend_always_inline bool zend_parse_arg_bool_ex(const zval *arg, bool *dest, bool *is_null, bool check_null, uint32_t arg_num, bool frameless)
{
	if (check_null) {
		*is_null = 0;
	}
	if (EXPECTED(Z_TYPE_P(arg) == IS_TRUE)) {
		*dest = 1;
	} else if (EXPECTED(Z_TYPE_P(arg) == IS_FALSE)) {
		*dest = 0;
	} else if (check_null && Z_TYPE_P(arg) == IS_NULL) {
		*is_null = 1;
		*dest = 0;
	} else {
		if (frameless) {
			return zend_flf_parse_arg_bool_slow(arg, dest, arg_num);
		} else {
			return zend_parse_arg_bool_slow(arg, dest, arg_num);
		}
	}
	return 1;
}

static zend_always_inline bool zend_parse_arg_bool(const zval *arg, bool *dest, bool *is_null, bool check_null, uint32_t arg_num)
{
	return zend_parse_arg_bool_ex(arg, dest, is_null, check_null, arg_num, /* frameless */ false);
}

static zend_always_inline bool zend_parse_arg_long_ex(zval *arg, zend_long *dest, bool *is_null, bool check_null, uint32_t arg_num, bool frameless)
{
	if (check_null) {
		*is_null = 0;
	}
	if (EXPECTED(Z_TYPE_P(arg) == IS_LONG)) {
		*dest = Z_LVAL_P(arg);
	} else if (check_null && Z_TYPE_P(arg) == IS_NULL) {
		*is_null = 1;
		*dest = 0;
	} else {
		if (frameless) {
			return zend_flf_parse_arg_long_slow(arg, dest, arg_num);
		} else {
			return zend_parse_arg_long_slow(arg, dest, arg_num);
		}
	}
	return 1;
}

static zend_always_inline bool zend_parse_arg_long(zval *arg, zend_long *dest, bool *is_null, bool check_null, uint32_t arg_num)
{
	return zend_parse_arg_long_ex(arg, dest, is_null, check_null, arg_num, /* frameless */ false);
}

static zend_always_inline bool zend_parse_arg_double(const zval *arg, double *dest, bool *is_null, bool check_null, uint32_t arg_num)
{
	if (check_null) {
		*is_null = 0;
	}
	if (EXPECTED(Z_TYPE_P(arg) == IS_DOUBLE)) {
		*dest = Z_DVAL_P(arg);
	} else if (check_null && Z_TYPE_P(arg) == IS_NULL) {
		*is_null = 1;
		*dest = 0.0;
	} else {
		return zend_parse_arg_double_slow(arg, dest, arg_num);
	}
	return 1;
}

static zend_always_inline bool zend_parse_arg_number(zval *arg, zval **dest, bool check_null, uint32_t arg_num)
{
	if (EXPECTED(Z_TYPE_P(arg) == IS_LONG || Z_TYPE_P(arg) == IS_DOUBLE)) {
		*dest = arg;
	} else if (check_null && EXPECTED(Z_TYPE_P(arg) == IS_NULL)) {
		*dest = NULL;
	} else {
		return zend_parse_arg_number_slow(arg, dest, arg_num);
	}
	return 1;
}

static zend_always_inline bool zend_parse_arg_number_or_str(zval *arg, zval **dest, bool check_null, uint32_t arg_num)
{
	if (EXPECTED(Z_TYPE_P(arg) == IS_LONG || Z_TYPE_P(arg) == IS_DOUBLE || Z_TYPE_P(arg) == IS_STRING)) {
		*dest = arg;
	} else if (check_null && EXPECTED(Z_TYPE_P(arg) == IS_NULL)) {
		*dest = NULL;
	} else {
		return zend_parse_arg_number_or_str_slow(arg, dest, arg_num);
	}
	return true;
}

static zend_always_inline bool zend_parse_arg_str_ex(zval *arg, zend_string **dest, bool check_null, uint32_t arg_num, bool frameless)
{
	if (EXPECTED(Z_TYPE_P(arg) == IS_STRING)) {
		*dest = Z_STR_P(arg);
	} else if (check_null && Z_TYPE_P(arg) == IS_NULL) {
		*dest = NULL;
	} else {
		if (frameless) {
			return zend_flf_parse_arg_str_slow(arg, dest, arg_num);
		} else {
			return zend_parse_arg_str_slow(arg, dest, arg_num);
		}
	}
	return 1;
}

static zend_always_inline bool zend_parse_arg_str(zval *arg, zend_string **dest, bool check_null, uint32_t arg_num)
{
	return zend_parse_arg_str_ex(arg, dest, check_null, arg_num, /* frameless */ false);
}

static zend_always_inline bool zend_parse_arg_string(zval *arg, char **dest, size_t *dest_len, bool check_null, uint32_t arg_num)
{
	zend_string *str;

	if (!zend_parse_arg_str(arg, &str, check_null, arg_num)) {
		return 0;
	}
	if (check_null && UNEXPECTED(!str)) {
		*dest = NULL;
		*dest_len = 0;
	} else {
		*dest = ZSTR_VAL(str);
		*dest_len = ZSTR_LEN(str);
	}
	return 1;
}

static zend_always_inline bool zend_parse_arg_path_str(zval *arg, zend_string **dest, bool check_null, uint32_t arg_num)
{
	if (!zend_parse_arg_str(arg, dest, check_null, arg_num) ||
	    (*dest && UNEXPECTED(zend_str_has_nul_byte(*dest)))) {
		return 0;
	}
	return 1;
}

static zend_always_inline bool zend_parse_arg_path(zval *arg, char **dest, size_t *dest_len, bool check_null, uint32_t arg_num)
{
	zend_string *str;

	if (!zend_parse_arg_path_str(arg, &str, check_null, arg_num)) {
		return 0;
	}
	if (check_null && UNEXPECTED(!str)) {
		*dest = NULL;
		*dest_len = 0;
	} else {
		*dest = ZSTR_VAL(str);
		*dest_len = ZSTR_LEN(str);
	}
	return 1;
}

static zend_always_inline bool zend_parse_arg_iterable(zval *arg, zval **dest, bool check_null)
{
	if (EXPECTED(zend_is_iterable(arg))) {
		*dest = arg;
		return 1;
	}

	if (check_null && EXPECTED(Z_TYPE_P(arg) == IS_NULL)) {
		*dest = NULL;
		return 1;
	}

	return 0;
}

static zend_always_inline bool zend_parse_arg_array(zval *arg, zval **dest, bool check_null, bool or_object)
{
	if (EXPECTED(Z_TYPE_P(arg) == IS_ARRAY) ||
		(or_object && EXPECTED(Z_TYPE_P(arg) == IS_OBJECT))) {
		*dest = arg;
	} else if (check_null && EXPECTED(Z_TYPE_P(arg) == IS_NULL)) {
		*dest = NULL;
	} else {
		return 0;
	}
	return 1;
}

static zend_always_inline bool zend_parse_arg_array_ht(const zval *arg, HashTable **dest, bool check_null, bool or_object, bool separate)
{
	if (EXPECTED(Z_TYPE_P(arg) == IS_ARRAY)) {
		*dest = Z_ARRVAL_P(arg);
	} else if (or_object && EXPECTED(Z_TYPE_P(arg) == IS_OBJECT)) {
		zend_object *zobj = Z_OBJ_P(arg);
		if (separate
		 && zobj->properties
		 && UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
			if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
				GC_DELREF(zobj->properties);
			}
			zobj->properties = zend_array_dup(zobj->properties);
		}
		*dest = zobj->handlers->get_properties(zobj);
	} else if (check_null && EXPECTED(Z_TYPE_P(arg) == IS_NULL)) {
		*dest = NULL;
	} else {
		return 0;
	}
	return 1;
}

static zend_always_inline bool zend_parse_arg_array_ht_or_long(
	zval *arg, HashTable **dest_ht, zend_long *dest_long, bool *is_null, bool allow_null, uint32_t arg_num
) {
	if (allow_null) {
		*is_null = 0;
	}

	if (EXPECTED(Z_TYPE_P(arg) == IS_ARRAY)) {
		*dest_ht = Z_ARRVAL_P(arg);
	} else if (EXPECTED(Z_TYPE_P(arg) == IS_LONG)) {
		*dest_ht = NULL;
		*dest_long = Z_LVAL_P(arg);
	} else if (allow_null && EXPECTED(Z_TYPE_P(arg) == IS_NULL)) {
		*dest_ht = NULL;
		*is_null = 1;
	} else {
		*dest_ht = NULL;
		return zend_parse_arg_long_slow(arg, dest_long, arg_num);
	}

	return 1;
}

static zend_always_inline bool zend_parse_arg_object(zval *arg, zval **dest, zend_class_entry *ce, bool check_null)
{
	if (EXPECTED(Z_TYPE_P(arg) == IS_OBJECT) &&
	    (!ce || EXPECTED(instanceof_function(Z_OBJCE_P(arg), ce) != 0))) {
		*dest = arg;
	} else if (check_null && EXPECTED(Z_TYPE_P(arg) == IS_NULL)) {
		*dest = NULL;
	} else {
		return 0;
	}
	return 1;
}

static zend_always_inline bool zend_parse_arg_obj(const zval *arg, zend_object **dest, zend_class_entry *ce, bool check_null)
{
	if (EXPECTED(Z_TYPE_P(arg) == IS_OBJECT) &&
	    (!ce || EXPECTED(instanceof_function(Z_OBJCE_P(arg), ce) != 0))) {
		*dest = Z_OBJ_P(arg);
	} else if (check_null && EXPECTED(Z_TYPE_P(arg) == IS_NULL)) {
		*dest = NULL;
	} else {
		return 0;
	}
	return 1;
}

static zend_always_inline bool zend_parse_arg_obj_or_long(
	zval *arg, zend_object **dest_obj, zend_class_entry *ce, zend_long *dest_long, bool *is_null, bool allow_null, uint32_t arg_num
) {
	if (allow_null) {
		*is_null = 0;
	}

	if (EXPECTED(Z_TYPE_P(arg) == IS_OBJECT) && EXPECTED(instanceof_function(Z_OBJCE_P(arg), ce) != 0)) {
		*dest_obj = Z_OBJ_P(arg);
	} else if (EXPECTED(Z_TYPE_P(arg) == IS_LONG)) {
		*dest_obj = NULL;
		*dest_long = Z_LVAL_P(arg);
	} else if (allow_null && EXPECTED(Z_TYPE_P(arg) == IS_NULL)) {
		*dest_obj = NULL;
		*is_null = 1;
	} else {
		*dest_obj = NULL;
		return zend_parse_arg_long_slow(arg, dest_long, arg_num);
	}

	return 1;
}

static zend_always_inline bool zend_parse_arg_resource(zval *arg, zval **dest, bool check_null)
{
	if (EXPECTED(Z_TYPE_P(arg) == IS_RESOURCE)) {
		*dest = arg;
	} else if (check_null && EXPECTED(Z_TYPE_P(arg) == IS_NULL)) {
		*dest = NULL;
	} else {
		return 0;
	}
	return 1;
}

static zend_always_inline bool zend_parse_arg_func(zval *arg, zend_fcall_info *dest_fci, zend_fcall_info_cache *dest_fcc, bool check_null, char **error, bool free_trampoline)
{
	if (check_null && UNEXPECTED(Z_TYPE_P(arg) == IS_NULL)) {
		dest_fci->size = 0;
		dest_fcc->function_handler = NULL;
		*error = NULL;
	} else if (UNEXPECTED(zend_fcall_info_init(arg, 0, dest_fci, dest_fcc, NULL, error) != SUCCESS)) {
		return 0;
	}
	if (free_trampoline) {
		/* Release call trampolines: The function may not get called, in which case
		 * the trampoline will leak. Force it to be refetched during
		 * zend_call_function instead. */
		zend_release_fcall_info_cache(dest_fcc);
	}
	return 1;
}

static zend_always_inline void zend_parse_arg_zval(zval *arg, zval **dest, bool check_null)
{
	*dest = (check_null &&
	    (UNEXPECTED(Z_TYPE_P(arg) == IS_NULL) ||
	     (UNEXPECTED(Z_ISREF_P(arg)) &&
	      UNEXPECTED(Z_TYPE_P(Z_REFVAL_P(arg)) == IS_NULL)))) ? NULL : arg;
}

static zend_always_inline void zend_parse_arg_zval_deref(zval *arg, zval **dest, bool check_null)
{
	*dest = (check_null && UNEXPECTED(Z_TYPE_P(arg) == IS_NULL)) ? NULL : arg;
}

static zend_always_inline bool zend_parse_arg_array_ht_or_str(
		zval *arg, HashTable **dest_ht, zend_string **dest_str, bool allow_null, uint32_t arg_num)
{
	if (EXPECTED(Z_TYPE_P(arg) == IS_STRING)) {
		*dest_ht = NULL;
		*dest_str = Z_STR_P(arg);
	} else if (EXPECTED(Z_TYPE_P(arg) == IS_ARRAY)) {
		*dest_ht = Z_ARRVAL_P(arg);
		*dest_str = NULL;
	} else if (allow_null && EXPECTED(Z_TYPE_P(arg) == IS_NULL)) {
		*dest_ht = NULL;
		*dest_str = NULL;
	} else {
		*dest_ht = NULL;
		return zend_parse_arg_str_slow(arg, dest_str, arg_num);
	}
	return 1;
}

static zend_always_inline bool zend_parse_arg_str_or_long(zval *arg, zend_string **dest_str, zend_long *dest_long,
	bool *is_null, bool allow_null, uint32_t arg_num)
{
	if (allow_null) {
		*is_null = 0;
	}
	if (EXPECTED(Z_TYPE_P(arg) == IS_STRING)) {
		*dest_str = Z_STR_P(arg);
	} else if (EXPECTED(Z_TYPE_P(arg) == IS_LONG)) {
		*dest_str = NULL;
		*dest_long = Z_LVAL_P(arg);
	} else if (allow_null && EXPECTED(Z_TYPE_P(arg) == IS_NULL)) {
		*dest_str = NULL;
		*is_null = 1;
	} else {
		return zend_parse_arg_str_or_long_slow(arg, dest_str, dest_long, arg_num);
	}
	return 1;
}

static zend_always_inline bool zend_parse_arg_obj_or_class_name(
	zval *arg, zend_class_entry **destination, bool allow_null
) {
	if (EXPECTED(Z_TYPE_P(arg) == IS_STRING)) {
		*destination = zend_lookup_class(Z_STR_P(arg));

		return *destination != NULL;
	} else if (EXPECTED(Z_TYPE_P(arg) == IS_OBJECT)) {
		*destination = Z_OBJ_P(arg)->ce;
	} else if (allow_null && EXPECTED(Z_TYPE_P(arg) == IS_NULL)) {
		*destination = NULL;
	} else {
		return 0;
	}

	return 1;
}

static zend_always_inline bool zend_parse_arg_obj_or_str(
	zval *arg, zend_object **destination_object, zend_class_entry *base_ce, zend_string **destination_string, bool allow_null, uint32_t arg_num
) {
	if (EXPECTED(Z_TYPE_P(arg) == IS_OBJECT)) {
		if (!base_ce || EXPECTED(instanceof_function(Z_OBJCE_P(arg), base_ce))) {
			*destination_object = Z_OBJ_P(arg);
			*destination_string = NULL;
			return 1;
		}
	}

	*destination_object = NULL;
	return zend_parse_arg_str(arg, destination_string, allow_null, arg_num);
}

END_EXTERN_C()

#endif /* ZEND_API_H */
Zend/zend_atomic.h000064400000031431151730543050010116 0ustar00/*
   +----------------------------------------------------------------------+
   | This source file is subject to version 3.01 of the PHP license,      |
   | that is bundled with this package in the file LICENSE, and is        |
   | available through the world-wide-web at the following url:           |
   | https://www.php.net/license/3_01.txt                                 |
   | If you did not receive a copy of the PHP license and are unable to   |
   | obtain it through the world-wide-web, please send a note to          |
   | license@php.net so we can mail you a copy immediately.               |
   +----------------------------------------------------------------------+
   | Authors: Levi Morrison <morrison.levi@gmail.com>                     |
   +----------------------------------------------------------------------+
 */

#ifndef ZEND_ATOMIC_H
#define ZEND_ATOMIC_H

#include "zend_portability.h"

#include <stdbool.h>

#define ZEND_GCC_PREREQ(x, y) \
	((__GNUC__ == (x) && __GNUC_MINOR__ >= (y)) || (__GNUC__ > (x)))

/* Builtins are used to avoid library linkage */
#if __has_feature(c_atomic) && defined(__clang__)
#define	HAVE_C11_ATOMICS 1
#elif ZEND_GCC_PREREQ(4, 7)
#define	HAVE_GNUC_ATOMICS 1
#elif defined(__GNUC__)
#define	HAVE_SYNC_ATOMICS 1
#elif !defined(ZEND_WIN32)
#define HAVE_NO_ATOMICS 1
#endif

#undef ZEND_GCC_PREREQ

/* Treat zend_atomic_* types as opaque. They have definitions only for size
 * and alignment purposes.
 */

#if defined(ZEND_WIN32) || defined(HAVE_SYNC_ATOMICS)
typedef struct zend_atomic_bool_s {
	volatile char value;
} zend_atomic_bool;
typedef struct zend_atomic_int_s {
# ifdef ZEND_WIN32
	volatile long value;
# else
	volatile int value;
# endif
} zend_atomic_int;
#elif defined(HAVE_C11_ATOMICS)
typedef struct zend_atomic_bool_s {
	_Atomic(bool) value;
} zend_atomic_bool;
typedef struct zend_atomic_int_s {
	_Atomic(int) value;
} zend_atomic_int;
#else
typedef struct zend_atomic_bool_s {
	volatile bool value;
} zend_atomic_bool;
typedef struct zend_atomic_int_s {
	volatile int value;
} zend_atomic_int;
#endif

BEGIN_EXTERN_C()

#ifdef ZEND_WIN32

#ifndef InterlockedExchange8
#define InterlockedExchange8 _InterlockedExchange8
#endif
#ifndef InterlockedOr8
#define InterlockedOr8 _InterlockedOr8
#endif
#ifndef InterlockedCompareExchange8
#define InterlockedCompareExchange8 _InterlockedCompareExchange8
#endif
#ifndef InterlockedExchange
#define InterlockedExchange _InterlockedExchange
#endif
#ifndef InterlockedOr
#define InterlockedOr _InterlockedOr
#endif
#ifndef InterlockedCompareExchange
#define InterlockedCompareExchange _InterlockedCompareExchange
#endif

#define ZEND_ATOMIC_BOOL_INIT(obj, desired) ((obj)->value = (desired))
#define ZEND_ATOMIC_INT_INIT(obj, desired)  ((obj)->value = (desired))

#define ZEND_ATOMIC_BOOL_INITIALIZER(desired) {.value = (desired)}
#define ZEND_ATOMIC_INT_INITIALIZER(desired)  {.value = (desired)}

static zend_always_inline bool zend_atomic_bool_exchange_ex(zend_atomic_bool *obj, bool desired) {
	return InterlockedExchange8(&obj->value, desired);
}

static zend_always_inline int zend_atomic_int_exchange_ex(zend_atomic_int *obj, int desired) {
	return (int) InterlockedExchange(&obj->value, desired);
}

static zend_always_inline bool zend_atomic_bool_compare_exchange_ex(zend_atomic_bool *obj, bool *expected, bool desired) {
	bool prev = (bool) InterlockedCompareExchange8(&obj->value, *expected, desired);
	if (prev == *expected) {
		return true;
	} else {
		*expected = prev;
		return false;
	}
}

static zend_always_inline bool zend_atomic_int_compare_exchange_ex(zend_atomic_int *obj, int *expected, int desired) {
	int prev = (int) InterlockedCompareExchange(&obj->value, *expected, desired);
	if (prev == *expected) {
		return true;
	} else {
		*expected = prev;
		return false;
	}
}

/* On this platform it is non-const due to Iterlocked API*/
static zend_always_inline bool zend_atomic_bool_load_ex(zend_atomic_bool *obj) {
	/* Or'ing with false won't change the value. */
	return InterlockedOr8(&obj->value, false);
}

static zend_always_inline int zend_atomic_int_load_ex(zend_atomic_int *obj) {
	/* Or'ing with 0 won't change the value. */
	return (int) InterlockedOr(&obj->value, 0);
}

static zend_always_inline void zend_atomic_bool_store_ex(zend_atomic_bool *obj, bool desired) {
	(void)InterlockedExchange8(&obj->value, desired);
}

static zend_always_inline void zend_atomic_int_store_ex(zend_atomic_int *obj, int desired) {
	(void)InterlockedExchange(&obj->value, desired);
}

#elif defined(HAVE_C11_ATOMICS)

#define ZEND_ATOMIC_BOOL_INIT(obj, desired) __c11_atomic_init(&(obj)->value, (desired))
#define ZEND_ATOMIC_INT_INIT(obj, desired)  __c11_atomic_init(&(obj)->value, (desired))

#define ZEND_ATOMIC_BOOL_INITIALIZER(desired) {.value = (desired)}
#define ZEND_ATOMIC_INT_INITIALIZER(desired)  {.value = (desired)}

static zend_always_inline bool zend_atomic_bool_exchange_ex(zend_atomic_bool *obj, bool desired) {
	return __c11_atomic_exchange(&obj->value, desired, __ATOMIC_SEQ_CST);
}

static zend_always_inline int zend_atomic_int_exchange_ex(zend_atomic_int *obj, int desired) {
	return __c11_atomic_exchange(&obj->value, desired, __ATOMIC_SEQ_CST);
}

static zend_always_inline bool zend_atomic_bool_compare_exchange_ex(zend_atomic_bool *obj, bool *expected, bool desired) {
	return __c11_atomic_compare_exchange_strong(&obj->value, expected, desired, __ATOMIC_SEQ_CST, __ATOMIC_SEQ_CST);
}

static zend_always_inline bool zend_atomic_int_compare_exchange_ex(zend_atomic_int *obj, int *expected, int desired) {
	return __c11_atomic_compare_exchange_strong(&obj->value, expected, desired, __ATOMIC_SEQ_CST, __ATOMIC_SEQ_CST);
}

static zend_always_inline bool zend_atomic_bool_load_ex(const zend_atomic_bool *obj) {
	return __c11_atomic_load(&obj->value, __ATOMIC_SEQ_CST);
}

static zend_always_inline int zend_atomic_int_load_ex(const zend_atomic_int *obj) {
	return __c11_atomic_load(&obj->value, __ATOMIC_SEQ_CST);
}

static zend_always_inline void zend_atomic_bool_store_ex(zend_atomic_bool *obj, bool desired) {
	__c11_atomic_store(&obj->value, desired, __ATOMIC_SEQ_CST);
}

static zend_always_inline void zend_atomic_int_store_ex(zend_atomic_int *obj, int desired) {
	__c11_atomic_store(&obj->value, desired, __ATOMIC_SEQ_CST);
}

#elif defined(HAVE_GNUC_ATOMICS)

/* bool */

#define ZEND_ATOMIC_BOOL_INIT(obj, desired) ((obj)->value = (desired))
#define ZEND_ATOMIC_INT_INIT(obj, desired)  ((obj)->value = (desired))

#define ZEND_ATOMIC_BOOL_INITIALIZER(desired) {.value = (desired)}
#define ZEND_ATOMIC_INT_INITIALIZER(desired)  {.value = (desired)}

static zend_always_inline bool zend_atomic_bool_exchange_ex(zend_atomic_bool *obj, bool desired) {
	bool prev = false;
	__atomic_exchange(&obj->value, &desired, &prev, __ATOMIC_SEQ_CST);
	return prev;
}

static zend_always_inline int zend_atomic_int_exchange_ex(zend_atomic_int *obj, int desired) {
	int prev = false;
	__atomic_exchange(&obj->value, &desired, &prev, __ATOMIC_SEQ_CST);
	return prev;
}

static zend_always_inline bool zend_atomic_bool_compare_exchange_ex(zend_atomic_bool *obj, bool *expected, bool desired) {
	return __atomic_compare_exchange(&obj->value, expected, &desired, /* weak */ false, __ATOMIC_SEQ_CST, __ATOMIC_SEQ_CST);
}

static zend_always_inline bool zend_atomic_int_compare_exchange_ex(zend_atomic_int *obj, int *expected, int desired) {
	return __atomic_compare_exchange(&obj->value, expected, &desired, /* weak */ false, __ATOMIC_SEQ_CST, __ATOMIC_SEQ_CST);
}

static zend_always_inline bool zend_atomic_bool_load_ex(const zend_atomic_bool *obj) {
	bool prev = false;
	__atomic_load(&obj->value, &prev, __ATOMIC_SEQ_CST);
	return prev;
}

static zend_always_inline int zend_atomic_int_load_ex(const zend_atomic_int *obj) {
	int prev = false;
	__atomic_load(&obj->value, &prev, __ATOMIC_SEQ_CST);
	return prev;
}

static zend_always_inline void zend_atomic_bool_store_ex(zend_atomic_bool *obj, bool desired) {
	__atomic_store(&obj->value, &desired, __ATOMIC_SEQ_CST);
}

static zend_always_inline void zend_atomic_int_store_ex(zend_atomic_int *obj, int desired) {
	__atomic_store(&obj->value, &desired, __ATOMIC_SEQ_CST);
}

#elif defined(HAVE_SYNC_ATOMICS)

#define ZEND_ATOMIC_BOOL_INIT(obj, desired) ((obj)->value = (desired))
#define ZEND_ATOMIC_INT_INIT(obj, desired)  ((obj)->value = (desired))

#define ZEND_ATOMIC_BOOL_INITIALIZER(desired) {.value = (desired)}
#define ZEND_ATOMIC_INT_INITIALIZER(desired)  {.value = (desired)}

static zend_always_inline bool zend_atomic_bool_exchange_ex(zend_atomic_bool *obj, bool desired) {
	bool prev = __sync_lock_test_and_set(&obj->value, desired);

	/* __sync_lock_test_and_set only does an acquire barrier, so sync
	 * immediately after.
	 */
	__sync_synchronize();
	return prev;
}

static zend_always_inline int zend_atomic_int_exchange_ex(zend_atomic_int *obj, int desired) {
	int prev = __sync_lock_test_and_set(&obj->value, desired);

	/* __sync_lock_test_and_set only does an acquire barrier, so sync
	 * immediately after.
	 */
	__sync_synchronize();
	return prev;
}

static zend_always_inline bool zend_atomic_bool_compare_exchange_ex(zend_atomic_bool *obj, bool *expected, bool desired) {
	bool prev = __sync_val_compare_and_swap(&obj->value, *expected, desired);
	if (prev == *expected) {
		return true;
	} else {
		*expected = prev;
		return false;
	}
}

static zend_always_inline bool zend_atomic_int_compare_exchange_ex(zend_atomic_int *obj, int *expected, int desired) {
	int prev = __sync_val_compare_and_swap(&obj->value, *expected, desired);
	if (prev == *expected) {
		return true;
	} else {
		*expected = prev;
		return false;
	}
}

static zend_always_inline bool zend_atomic_bool_load_ex(zend_atomic_bool *obj) {
	/* Or'ing false won't change the value */
	return __sync_fetch_and_or(&obj->value, false);
}

static zend_always_inline int zend_atomic_int_load_ex(zend_atomic_int *obj) {
	/* Or'ing 0 won't change the value */
	return __sync_fetch_and_or(&obj->value, 0);
}

static zend_always_inline void zend_atomic_bool_store_ex(zend_atomic_bool *obj, bool desired) {
	__sync_synchronize();
	obj->value = desired;
	__sync_synchronize();
}

static zend_always_inline void zend_atomic_int_store_ex(zend_atomic_int *obj, int desired) {
	__sync_synchronize();
	obj->value = desired;
	__sync_synchronize();
}

#elif defined(HAVE_NO_ATOMICS)

#warning No atomics support detected. Please open an issue with platform details.

#define ZEND_ATOMIC_BOOL_INIT(obj, desired) ((obj)->value = (desired))
#define ZEND_ATOMIC_INT_INIT(obj, desired)  ((obj)->value = (desired))

#define ZEND_ATOMIC_BOOL_INITIALIZER(desired) {.value = (desired)}
#define ZEND_ATOMIC_INT_INITIALIZER(desired)  {.value = (desired)}

static zend_always_inline void zend_atomic_bool_store_ex(zend_atomic_bool *obj, bool desired) {
	obj->value = desired;
}

static zend_always_inline void zend_atomic_int_store_ex(zend_atomic_int *obj, int desired) {
	obj->value = desired;
}

static zend_always_inline bool zend_atomic_bool_compare_exchange_ex(zend_atomic_int *obj, bool *expected, bool desired) {
	bool prev = obj->value;
	if (prev == *expected) {
		obj->value = desired;
		return true;
	} else {
		*expected = prev;
		return false;
	}
}

static zend_always_inline bool zend_atomic_int_compare_exchange_ex(zend_atomic_int *obj, int *expected, int desired) {
	int prev = obj->value;
	if (prev == *expected) {
		obj->value = desired;
		return true;
	} else {
		*expected = prev;
		return false;
	}
}

static zend_always_inline bool zend_atomic_bool_load_ex(const zend_atomic_bool *obj) {
	return obj->value;
}

static zend_always_inline int zend_atomic_int_load_ex(const zend_atomic_int *obj) {
	return obj->value;
}

static zend_always_inline bool zend_atomic_bool_exchange_ex(zend_atomic_bool *obj, bool desired) {
	bool prev = obj->value;
	obj->value = desired;
	return prev;
}

static zend_always_inline int zend_atomic_int_exchange_ex(zend_atomic_int *obj, int desired) {
	int prev = obj->value;
	obj->value = desired;
	return prev;
}

#endif

ZEND_API void zend_atomic_bool_init(zend_atomic_bool *obj, bool desired);
ZEND_API void zend_atomic_int_init(zend_atomic_int *obj, int desired);

ZEND_API bool zend_atomic_bool_exchange(zend_atomic_bool *obj, bool desired);
ZEND_API int zend_atomic_int_exchange(zend_atomic_int *obj, int desired);

ZEND_API bool zend_atomic_bool_compare_exchange(zend_atomic_bool *obj, bool *expected, bool desired);
ZEND_API bool zend_atomic_int_compare_exchange(zend_atomic_int *obj, int *expected, int desired);

ZEND_API void zend_atomic_bool_store(zend_atomic_bool *obj, bool desired);
ZEND_API void zend_atomic_int_store(zend_atomic_int *obj, int desired);

#if defined(ZEND_WIN32) || defined(HAVE_SYNC_ATOMICS)
/* On these platforms it is non-const due to underlying APIs. */
ZEND_API bool zend_atomic_bool_load(zend_atomic_bool *obj);
ZEND_API int zend_atomic_int_load(zend_atomic_int *obj);
#else
ZEND_API bool zend_atomic_bool_load(const zend_atomic_bool *obj);
ZEND_API int zend_atomic_int_load(const zend_atomic_int *obj);
#endif

END_EXTERN_C()

#endif
Zend/zend_variables.h000064400000006102151730543050010607 0ustar00/*
   +----------------------------------------------------------------------+
   | Zend Engine                                                          |
   +----------------------------------------------------------------------+
   | Copyright (c) Zend Technologies Ltd. (http://www.zend.com)           |
   +----------------------------------------------------------------------+
   | This source file is subject to version 2.00 of the Zend license,     |
   | that is bundled with this package in the file LICENSE, and is        |
   | available through the world-wide-web at the following url:           |
   | http://www.zend.com/license/2_00.txt.                                |
   | If you did not receive a copy of the Zend license and are unable to  |
   | obtain it through the world-wide-web, please send a note to          |
   | license@zend.com so we can mail you a copy immediately.              |
   +----------------------------------------------------------------------+
   | Authors: Andi Gutmans <andi@php.net>                                 |
   |          Zeev Suraski <zeev@php.net>                                 |
   |          Dmitry Stogov <dmitry@php.net>                              |
   +----------------------------------------------------------------------+
*/

#ifndef ZEND_VARIABLES_H
#define ZEND_VARIABLES_H

#include "zend_types.h"
#include "zend_gc.h"
#include "zend_hash.h"

BEGIN_EXTERN_C()

ZEND_API void ZEND_FASTCALL rc_dtor_func(zend_refcounted *p);
ZEND_API void ZEND_FASTCALL zval_copy_ctor_func(zval *zvalue);

static zend_always_inline void zval_ptr_dtor_nogc(zval *zval_ptr)
{
	if (Z_REFCOUNTED_P(zval_ptr) && !Z_DELREF_P(zval_ptr)) {
		rc_dtor_func(Z_COUNTED_P(zval_ptr));
	}
}

static zend_always_inline void i_zval_ptr_dtor(zval *zval_ptr)
{
	if (Z_REFCOUNTED_P(zval_ptr)) {
		zend_refcounted *ref = Z_COUNTED_P(zval_ptr);
		if (!GC_DELREF(ref)) {
			rc_dtor_func(ref);
		} else {
			gc_check_possible_root(ref);
		}
	}
}

static zend_always_inline void zval_copy_ctor(zval *zvalue)
{
	if (Z_TYPE_P(zvalue) == IS_ARRAY) {
		ZVAL_ARR(zvalue, zend_array_dup(Z_ARR_P(zvalue)));
	} else if (Z_REFCOUNTED_P(zvalue)) {
		Z_ADDREF_P(zvalue);
	}
}

static zend_always_inline void zval_opt_copy_ctor(zval *zvalue)
{
	if (Z_OPT_TYPE_P(zvalue) == IS_ARRAY) {
		ZVAL_ARR(zvalue, zend_array_dup(Z_ARR_P(zvalue)));
	} else if (Z_OPT_REFCOUNTED_P(zvalue)) {
		Z_ADDREF_P(zvalue);
	}
}

static zend_always_inline void zval_ptr_dtor_str(zval *zval_ptr)
{
	if (Z_REFCOUNTED_P(zval_ptr) && !Z_DELREF_P(zval_ptr)) {
		ZEND_ASSERT(Z_TYPE_P(zval_ptr) == IS_STRING);
		ZEND_ASSERT(!ZSTR_IS_INTERNED(Z_STR_P(zval_ptr)));
		ZEND_ASSERT(!(GC_FLAGS(Z_STR_P(zval_ptr)) & IS_STR_PERSISTENT));
		efree(Z_STR_P(zval_ptr));
	}
}

ZEND_API void zval_ptr_dtor(zval *zval_ptr);
ZEND_API void zval_ptr_safe_dtor(zval *zval_ptr);
ZEND_API void zval_internal_ptr_dtor(zval *zvalue);

/* Kept for compatibility */
#define zval_dtor(zvalue) zval_ptr_dtor_nogc(zvalue)

ZEND_API void zval_add_ref(zval *p);

END_EXTERN_C()

#define ZVAL_PTR_DTOR zval_ptr_dtor
#define ZVAL_INTERNAL_PTR_DTOR zval_internal_ptr_dtor

#endif
Zend/zend_weakrefs_arginfo.h000064400000006560151730543060012164 0ustar00/* This is a generated file, edit the .stub.php file instead.
 * Stub hash: d91889851d9732d41e43fffddb6235d033c67534 */

ZEND_BEGIN_ARG_INFO_EX(arginfo_class_WeakReference___construct, 0, 0, 0)
ZEND_END_ARG_INFO()

ZEND_BEGIN_ARG_WITH_RETURN_OBJ_INFO_EX(arginfo_class_WeakReference_create, 0, 1, WeakReference, 0)
	ZEND_ARG_TYPE_INFO(0, object, IS_OBJECT, 0)
ZEND_END_ARG_INFO()

ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_class_WeakReference_get, 0, 0, IS_OBJECT, 1)
ZEND_END_ARG_INFO()

ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_class_WeakMap_offsetGet, 0, 1, IS_MIXED, 0)
	ZEND_ARG_INFO(0, object)
ZEND_END_ARG_INFO()

ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_class_WeakMap_offsetSet, 0, 2, IS_VOID, 0)
	ZEND_ARG_INFO(0, object)
	ZEND_ARG_TYPE_INFO(0, value, IS_MIXED, 0)
ZEND_END_ARG_INFO()

ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_class_WeakMap_offsetExists, 0, 1, _IS_BOOL, 0)
	ZEND_ARG_INFO(0, object)
ZEND_END_ARG_INFO()

ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_class_WeakMap_offsetUnset, 0, 1, IS_VOID, 0)
	ZEND_ARG_INFO(0, object)
ZEND_END_ARG_INFO()

ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_class_WeakMap_count, 0, 0, IS_LONG, 0)
ZEND_END_ARG_INFO()

ZEND_BEGIN_ARG_WITH_RETURN_OBJ_INFO_EX(arginfo_class_WeakMap_getIterator, 0, 0, Iterator, 0)
ZEND_END_ARG_INFO()

ZEND_METHOD(WeakReference, __construct);
ZEND_METHOD(WeakReference, create);
ZEND_METHOD(WeakReference, get);
ZEND_METHOD(WeakMap, offsetGet);
ZEND_METHOD(WeakMap, offsetSet);
ZEND_METHOD(WeakMap, offsetExists);
ZEND_METHOD(WeakMap, offsetUnset);
ZEND_METHOD(WeakMap, count);
ZEND_METHOD(WeakMap, getIterator);

static const zend_function_entry class_WeakReference_methods[] = {
	ZEND_ME(WeakReference, __construct, arginfo_class_WeakReference___construct, ZEND_ACC_PUBLIC)
	ZEND_ME(WeakReference, create, arginfo_class_WeakReference_create, ZEND_ACC_PUBLIC|ZEND_ACC_STATIC)
	ZEND_ME(WeakReference, get, arginfo_class_WeakReference_get, ZEND_ACC_PUBLIC)
	ZEND_FE_END
};

static const zend_function_entry class_WeakMap_methods[] = {
	ZEND_ME(WeakMap, offsetGet, arginfo_class_WeakMap_offsetGet, ZEND_ACC_PUBLIC)
	ZEND_ME(WeakMap, offsetSet, arginfo_class_WeakMap_offsetSet, ZEND_ACC_PUBLIC)
	ZEND_ME(WeakMap, offsetExists, arginfo_class_WeakMap_offsetExists, ZEND_ACC_PUBLIC)
	ZEND_ME(WeakMap, offsetUnset, arginfo_class_WeakMap_offsetUnset, ZEND_ACC_PUBLIC)
	ZEND_ME(WeakMap, count, arginfo_class_WeakMap_count, ZEND_ACC_PUBLIC)
	ZEND_ME(WeakMap, getIterator, arginfo_class_WeakMap_getIterator, ZEND_ACC_PUBLIC)
	ZEND_FE_END
};

static zend_class_entry *register_class_WeakReference(void)
{
	zend_class_entry ce, *class_entry;

	INIT_CLASS_ENTRY(ce, "WeakReference", class_WeakReference_methods);
	class_entry = zend_register_internal_class_with_flags(&ce, NULL, ZEND_ACC_FINAL|ZEND_ACC_NO_DYNAMIC_PROPERTIES|ZEND_ACC_NOT_SERIALIZABLE);

	return class_entry;
}

static zend_class_entry *register_class_WeakMap(zend_class_entry *class_entry_ArrayAccess, zend_class_entry *class_entry_Countable, zend_class_entry *class_entry_IteratorAggregate)
{
	zend_class_entry ce, *class_entry;

	INIT_CLASS_ENTRY(ce, "WeakMap", class_WeakMap_methods);
	class_entry = zend_register_internal_class_with_flags(&ce, NULL, ZEND_ACC_FINAL|ZEND_ACC_NO_DYNAMIC_PROPERTIES|ZEND_ACC_NOT_SERIALIZABLE);
	zend_class_implements(class_entry, 3, class_entry_ArrayAccess, class_entry_Countable, class_entry_IteratorAggregate);

	return class_entry;
}
Zend/zend_string.h000064400000054643151730543060010163 0ustar00/*
   +----------------------------------------------------------------------+
   | Zend Engine                                                          |
   +----------------------------------------------------------------------+
   | Copyright (c) Zend Technologies Ltd. (http://www.zend.com)           |
   +----------------------------------------------------------------------+
   | This source file is subject to version 2.00 of the Zend license,     |
   | that is bundled with this package in the file LICENSE, and is        |
   | available through the world-wide-web at the following url:           |
   | http://www.zend.com/license/2_00.txt.                                |
   | If you did not receive a copy of the Zend license and are unable to  |
   | obtain it through the world-wide-web, please send a note to          |
   | license@zend.com so we can mail you a copy immediately.              |
   +----------------------------------------------------------------------+
   | Authors: Dmitry Stogov <dmitry@php.net>                              |
   +----------------------------------------------------------------------+
*/

#ifndef ZEND_STRING_H
#define ZEND_STRING_H

#include "zend_types.h"
#include "zend_gc.h"
#include "zend_alloc.h"

BEGIN_EXTERN_C()

typedef void (*zend_string_copy_storage_func_t)(void);
typedef zend_string *(ZEND_FASTCALL *zend_new_interned_string_func_t)(zend_string *str);
typedef zend_string *(ZEND_FASTCALL *zend_string_init_interned_func_t)(const char *str, size_t size, bool permanent);
typedef zend_string *(ZEND_FASTCALL *zend_string_init_existing_interned_func_t)(const char *str, size_t size, bool permanent);

ZEND_API extern zend_new_interned_string_func_t zend_new_interned_string;
ZEND_API extern zend_string_init_interned_func_t zend_string_init_interned;
/* Init an interned string if it already exists, but do not create a new one if it does not. */
ZEND_API extern zend_string_init_existing_interned_func_t zend_string_init_existing_interned;

ZEND_API zend_ulong ZEND_FASTCALL zend_string_hash_func(zend_string *str);
ZEND_API zend_ulong ZEND_FASTCALL zend_hash_func(const char *str, size_t len);
ZEND_API zend_string* ZEND_FASTCALL zend_interned_string_find_permanent(zend_string *str);

ZEND_API zend_string *zend_string_concat2(
	const char *str1, size_t str1_len,
	const char *str2, size_t str2_len);
ZEND_API zend_string *zend_string_concat3(
	const char *str1, size_t str1_len,
	const char *str2, size_t str2_len,
	const char *str3, size_t str3_len);

ZEND_API void zend_interned_strings_init(void);
ZEND_API void zend_interned_strings_dtor(void);
ZEND_API void zend_interned_strings_activate(void);
ZEND_API void zend_interned_strings_deactivate(void);
ZEND_API void zend_interned_strings_set_request_storage_handlers(
	zend_new_interned_string_func_t handler,
	zend_string_init_interned_func_t init_handler,
	zend_string_init_existing_interned_func_t init_existing_handler);
ZEND_API void zend_interned_strings_switch_storage(bool request);

ZEND_API extern zend_string  *zend_empty_string;
ZEND_API extern zend_string  *zend_one_char_string[256];
ZEND_API extern zend_string **zend_known_strings;

END_EXTERN_C()

/* Shortcuts */

#define ZSTR_VAL(zstr)  (zstr)->val
#define ZSTR_LEN(zstr)  (zstr)->len
#define ZSTR_H(zstr)    (zstr)->h
#define ZSTR_HASH(zstr) zend_string_hash_val(zstr)

/*---*/

#define ZSTR_IS_INTERNED(s)					(GC_FLAGS(s) & IS_STR_INTERNED)
#define ZSTR_IS_VALID_UTF8(s)				(GC_FLAGS(s) & IS_STR_VALID_UTF8)

/* These are properties, encoded as flags, that will hold on the resulting string
 * after concatenating two strings that have these property.
 * Example: concatenating two UTF-8 strings yields another UTF-8 string. */
#define ZSTR_COPYABLE_CONCAT_PROPERTIES		(IS_STR_VALID_UTF8)

#define ZSTR_GET_COPYABLE_CONCAT_PROPERTIES(s) 				(GC_FLAGS(s) & ZSTR_COPYABLE_CONCAT_PROPERTIES)
/* This macro returns the copyable concat properties which hold on both strings. */
#define ZSTR_GET_COPYABLE_CONCAT_PROPERTIES_BOTH(s1, s2)	(GC_FLAGS(s1) & GC_FLAGS(s2) & ZSTR_COPYABLE_CONCAT_PROPERTIES)

#define ZSTR_COPY_CONCAT_PROPERTIES(out, in) do { \
	zend_string *_out = (out); \
	uint32_t properties = ZSTR_GET_COPYABLE_CONCAT_PROPERTIES((in)); \
	GC_ADD_FLAGS(_out, properties); \
} while (0)

#define ZSTR_COPY_CONCAT_PROPERTIES_BOTH(out, in1, in2) do { \
	zend_string *_out = (out); \
	uint32_t properties = ZSTR_GET_COPYABLE_CONCAT_PROPERTIES_BOTH((in1), (in2)); \
	GC_ADD_FLAGS(_out, properties); \
} while (0)

#define ZSTR_EMPTY_ALLOC() zend_empty_string
#define ZSTR_CHAR(c) zend_one_char_string[c]
#define ZSTR_KNOWN(idx) zend_known_strings[idx]

#define _ZSTR_HEADER_SIZE XtOffsetOf(zend_string, val)

#define _ZSTR_STRUCT_SIZE(len) (_ZSTR_HEADER_SIZE + len + 1)

#define ZSTR_MAX_OVERHEAD (ZEND_MM_ALIGNED_SIZE(_ZSTR_HEADER_SIZE + 1))
#define ZSTR_MAX_LEN (SIZE_MAX - ZSTR_MAX_OVERHEAD)

#define ZSTR_ALLOCA_ALLOC(str, _len, use_heap) do { \
	(str) = (zend_string *)do_alloca(ZEND_MM_ALIGNED_SIZE_EX(_ZSTR_STRUCT_SIZE(_len), 8), (use_heap)); \
	GC_SET_REFCOUNT(str, 1); \
	GC_TYPE_INFO(str) = GC_STRING; \
	ZSTR_H(str) = 0; \
	ZSTR_LEN(str) = _len; \
} while (0)

#define ZSTR_ALLOCA_INIT(str, s, len, use_heap) do { \
	ZSTR_ALLOCA_ALLOC(str, len, use_heap); \
	memcpy(ZSTR_VAL(str), (s), (len)); \
	ZSTR_VAL(str)[(len)] = '\0'; \
} while (0)

#define ZSTR_ALLOCA_FREE(str, use_heap) free_alloca(str, use_heap)

#define ZSTR_INIT_LITERAL(s, persistent) (zend_string_init((s), strlen(s), (persistent)))

/*---*/

static zend_always_inline zend_ulong zend_string_hash_val(zend_string *s)
{
	return ZSTR_H(s) ? ZSTR_H(s) : zend_string_hash_func(s);
}

static zend_always_inline void zend_string_forget_hash_val(zend_string *s)
{
	ZSTR_H(s) = 0;
	GC_DEL_FLAGS(s, IS_STR_VALID_UTF8);
}

static zend_always_inline uint32_t zend_string_refcount(const zend_string *s)
{
	if (!ZSTR_IS_INTERNED(s)) {
		return GC_REFCOUNT(s);
	}
	return 1;
}

static zend_always_inline uint32_t zend_string_addref(zend_string *s)
{
	if (!ZSTR_IS_INTERNED(s)) {
		return GC_ADDREF(s);
	}
	return 1;
}

static zend_always_inline uint32_t zend_string_delref(zend_string *s)
{
	if (!ZSTR_IS_INTERNED(s)) {
		return GC_DELREF(s);
	}
	return 1;
}

static zend_always_inline zend_string *zend_string_alloc(size_t len, bool persistent)
{
	zend_string *ret = (zend_string *)pemalloc(ZEND_MM_ALIGNED_SIZE(_ZSTR_STRUCT_SIZE(len)), persistent);

	GC_SET_REFCOUNT(ret, 1);
	GC_TYPE_INFO(ret) = GC_STRING | ((persistent ? IS_STR_PERSISTENT : 0) << GC_FLAGS_SHIFT);
	ZSTR_H(ret) = 0;
	ZSTR_LEN(ret) = len;
	return ret;
}

static zend_always_inline zend_string *zend_string_safe_alloc(size_t n, size_t m, size_t l, bool persistent)
{
	zend_string *ret = (zend_string *)safe_pemalloc(n, m, ZEND_MM_ALIGNED_SIZE(_ZSTR_STRUCT_SIZE(l)), persistent);

	GC_SET_REFCOUNT(ret, 1);
	GC_TYPE_INFO(ret) = GC_STRING | ((persistent ? IS_STR_PERSISTENT : 0) << GC_FLAGS_SHIFT);
	ZSTR_H(ret) = 0;
	ZSTR_LEN(ret) = (n * m) + l;
	return ret;
}

static zend_always_inline zend_string *zend_string_init(const char *str, size_t len, bool persistent)
{
	zend_string *ret = zend_string_alloc(len, persistent);

	memcpy(ZSTR_VAL(ret), str, len);
	ZSTR_VAL(ret)[len] = '\0';
	return ret;
}

static zend_always_inline zend_string *zend_string_init_fast(const char *str, size_t len)
{
	if (len > 1) {
		return zend_string_init(str, len, 0);
	} else if (len == 0) {
		return zend_empty_string;
	} else /* if (len == 1) */ {
		return ZSTR_CHAR((zend_uchar) *str);
	}
}

static zend_always_inline zend_string *zend_string_copy(zend_string *s)
{
	if (!ZSTR_IS_INTERNED(s)) {
		GC_ADDREF(s);
	}
	return s;
}

static zend_always_inline zend_string *zend_string_dup(zend_string *s, bool persistent)
{
	if (ZSTR_IS_INTERNED(s)) {
		return s;
	} else {
		return zend_string_init(ZSTR_VAL(s), ZSTR_LEN(s), persistent);
	}
}

static zend_always_inline zend_string *zend_string_separate(zend_string *s, bool persistent)
{
	if (ZSTR_IS_INTERNED(s) || GC_REFCOUNT(s) > 1) {
		if (!ZSTR_IS_INTERNED(s)) {
			GC_DELREF(s);
		}
		return zend_string_init(ZSTR_VAL(s), ZSTR_LEN(s), persistent);
	}

	zend_string_forget_hash_val(s);
	return s;
}

static zend_always_inline zend_string *zend_string_realloc(zend_string *s, size_t len, bool persistent)
{
	zend_string *ret;

	if (!ZSTR_IS_INTERNED(s)) {
		if (EXPECTED(GC_REFCOUNT(s) == 1)) {
			ret = (zend_string *)perealloc(s, ZEND_MM_ALIGNED_SIZE(_ZSTR_STRUCT_SIZE(len)), persistent);
			ZSTR_LEN(ret) = len;
			zend_string_forget_hash_val(ret);
			return ret;
		}
	}
	ret = zend_string_alloc(len, persistent);
	memcpy(ZSTR_VAL(ret), ZSTR_VAL(s), MIN(len, ZSTR_LEN(s)) + 1);
	if (!ZSTR_IS_INTERNED(s)) {
		GC_DELREF(s);
	}
	return ret;
}

static zend_always_inline zend_string *zend_string_extend(zend_string *s, size_t len, bool persistent)
{
	zend_string *ret;

	ZEND_ASSERT(len >= ZSTR_LEN(s));
	if (!ZSTR_IS_INTERNED(s)) {
		if (EXPECTED(GC_REFCOUNT(s) == 1)) {
			ret = (zend_string *)perealloc(s, ZEND_MM_ALIGNED_SIZE(_ZSTR_STRUCT_SIZE(len)), persistent);
			ZSTR_LEN(ret) = len;
			zend_string_forget_hash_val(ret);
			return ret;
		}
	}
	ret = zend_string_alloc(len, persistent);
	memcpy(ZSTR_VAL(ret), ZSTR_VAL(s), ZSTR_LEN(s) + 1);
	if (!ZSTR_IS_INTERNED(s)) {
		GC_DELREF(s);
	}
	return ret;
}

static zend_always_inline zend_string *zend_string_truncate(zend_string *s, size_t len, bool persistent)
{
	zend_string *ret;

	ZEND_ASSERT(len <= ZSTR_LEN(s));
	if (!ZSTR_IS_INTERNED(s)) {
		if (EXPECTED(GC_REFCOUNT(s) == 1)) {
			ret = (zend_string *)perealloc(s, ZEND_MM_ALIGNED_SIZE(_ZSTR_STRUCT_SIZE(len)), persistent);
			ZSTR_LEN(ret) = len;
			zend_string_forget_hash_val(ret);
			return ret;
		}
	}
	ret = zend_string_alloc(len, persistent);
	memcpy(ZSTR_VAL(ret), ZSTR_VAL(s), len + 1);
	if (!ZSTR_IS_INTERNED(s)) {
		GC_DELREF(s);
	}
	return ret;
}

static zend_always_inline zend_string *zend_string_safe_realloc(zend_string *s, size_t n, size_t m, size_t l, bool persistent)
{
	zend_string *ret;

	if (!ZSTR_IS_INTERNED(s)) {
		if (GC_REFCOUNT(s) == 1) {
			ret = (zend_string *)safe_perealloc(s, n, m, ZEND_MM_ALIGNED_SIZE(_ZSTR_STRUCT_SIZE(l)), persistent);
			ZSTR_LEN(ret) = (n * m) + l;
			zend_string_forget_hash_val(ret);
			return ret;
		}
	}
	ret = zend_string_safe_alloc(n, m, l, persistent);
	memcpy(ZSTR_VAL(ret), ZSTR_VAL(s), MIN((n * m) + l, ZSTR_LEN(s)) + 1);
	if (!ZSTR_IS_INTERNED(s)) {
		GC_DELREF(s);
	}
	return ret;
}

static zend_always_inline void zend_string_free(zend_string *s)
{
	if (!ZSTR_IS_INTERNED(s)) {
		ZEND_ASSERT(GC_REFCOUNT(s) <= 1);
		pefree(s, GC_FLAGS(s) & IS_STR_PERSISTENT);
	}
}

static zend_always_inline void zend_string_efree(zend_string *s)
{
	ZEND_ASSERT(!ZSTR_IS_INTERNED(s));
	ZEND_ASSERT(GC_REFCOUNT(s) <= 1);
	ZEND_ASSERT(!(GC_FLAGS(s) & IS_STR_PERSISTENT));
	efree(s);
}

static zend_always_inline void zend_string_release(zend_string *s)
{
	if (!ZSTR_IS_INTERNED(s)) {
		if (GC_DELREF(s) == 0) {
			pefree(s, GC_FLAGS(s) & IS_STR_PERSISTENT);
		}
	}
}

static zend_always_inline void zend_string_release_ex(zend_string *s, bool persistent)
{
	if (!ZSTR_IS_INTERNED(s)) {
		if (GC_DELREF(s) == 0) {
			if (persistent) {
				ZEND_ASSERT(GC_FLAGS(s) & IS_STR_PERSISTENT);
				free(s);
			} else {
				ZEND_ASSERT(!(GC_FLAGS(s) & IS_STR_PERSISTENT));
				efree(s);
			}
		}
	}
}

static zend_always_inline bool zend_string_equals_cstr(const zend_string *s1, const char *s2, size_t s2_length)
{
	return ZSTR_LEN(s1) == s2_length && !memcmp(ZSTR_VAL(s1), s2, s2_length);
}

#if defined(__GNUC__) && (defined(__i386__) || (defined(__x86_64__) && !defined(__ILP32__)))
BEGIN_EXTERN_C()
ZEND_API bool ZEND_FASTCALL zend_string_equal_val(const zend_string *s1, const zend_string *s2);
END_EXTERN_C()
#else
static zend_always_inline bool zend_string_equal_val(const zend_string *s1, const zend_string *s2)
{
	return !memcmp(ZSTR_VAL(s1), ZSTR_VAL(s2), ZSTR_LEN(s1));
}
#endif

static zend_always_inline bool zend_string_equal_content(const zend_string *s1, const zend_string *s2)
{
	return ZSTR_LEN(s1) == ZSTR_LEN(s2) && zend_string_equal_val(s1, s2);
}

static zend_always_inline bool zend_string_equals(const zend_string *s1, const zend_string *s2)
{
	return s1 == s2 || zend_string_equal_content(s1, s2);
}

#define zend_string_equals_ci(s1, s2) \
	(ZSTR_LEN(s1) == ZSTR_LEN(s2) && !zend_binary_strcasecmp(ZSTR_VAL(s1), ZSTR_LEN(s1), ZSTR_VAL(s2), ZSTR_LEN(s2)))

#define zend_string_equals_literal_ci(str, c) \
	(ZSTR_LEN(str) == sizeof("" c) - 1 && !zend_binary_strcasecmp(ZSTR_VAL(str), ZSTR_LEN(str), (c), sizeof(c) - 1))

#define zend_string_equals_literal(str, literal) \
	zend_string_equals_cstr(str, "" literal, sizeof(literal) - 1)

static zend_always_inline bool zend_string_starts_with_cstr(const zend_string *str, const char *prefix, size_t prefix_length)
{
	return ZSTR_LEN(str) >= prefix_length && !memcmp(ZSTR_VAL(str), prefix, prefix_length);
}

static zend_always_inline bool zend_string_starts_with(const zend_string *str, const zend_string *prefix)
{
	return zend_string_starts_with_cstr(str, ZSTR_VAL(prefix), ZSTR_LEN(prefix));
}

#define zend_string_starts_with_literal(str, prefix) \
	zend_string_starts_with_cstr(str, prefix, strlen(prefix))

static zend_always_inline bool zend_string_starts_with_cstr_ci(const zend_string *str, const char *prefix, size_t prefix_length)
{
	return ZSTR_LEN(str) >= prefix_length && !strncasecmp(ZSTR_VAL(str), prefix, prefix_length);
}

static zend_always_inline bool zend_string_starts_with_ci(const zend_string *str, const zend_string *prefix)
{
	return zend_string_starts_with_cstr_ci(str, ZSTR_VAL(prefix), ZSTR_LEN(prefix));
}

#define zend_string_starts_with_literal_ci(str, prefix) \
	zend_string_starts_with_cstr_ci(str, prefix, strlen(prefix))

/*
 * DJBX33A (Daniel J. Bernstein, Times 33 with Addition)
 *
 * This is Daniel J. Bernstein's popular `times 33' hash function as
 * posted by him years ago on comp.lang.c. It basically uses a function
 * like ``hash(i) = hash(i-1) * 33 + str[i]''. This is one of the best
 * known hash functions for strings. Because it is both computed very
 * fast and distributes very well.
 *
 * The magic of number 33, i.e. why it works better than many other
 * constants, prime or not, has never been adequately explained by
 * anyone. So I try an explanation: if one experimentally tests all
 * multipliers between 1 and 256 (as RSE did now) one detects that even
 * numbers are not usable at all. The remaining 128 odd numbers
 * (except for the number 1) work more or less all equally well. They
 * all distribute in an acceptable way and this way fill a hash table
 * with an average percent of approx. 86%.
 *
 * If one compares the Chi^2 values of the variants, the number 33 not
 * even has the best value. But the number 33 and a few other equally
 * good numbers like 17, 31, 63, 127 and 129 have nevertheless a great
 * advantage to the remaining numbers in the large set of possible
 * multipliers: their multiply operation can be replaced by a faster
 * operation based on just one shift plus either a single addition
 * or subtraction operation. And because a hash function has to both
 * distribute good _and_ has to be very fast to compute, those few
 * numbers should be preferred and seems to be the reason why Daniel J.
 * Bernstein also preferred it.
 *
 *
 *                  -- Ralf S. Engelschall <rse@engelschall.com>
 */

static zend_always_inline zend_ulong zend_inline_hash_func(const char *str, size_t len)
{
	zend_ulong hash = Z_UL(5381);

#if defined(_WIN32) || defined(__i386__) || defined(__x86_64__) || defined(__aarch64__)
	/* Version with multiplication works better on modern CPU */
	for (; len >= 8; len -= 8, str += 8) {
# if defined(__aarch64__) && !defined(WORDS_BIGENDIAN)
		/* On some architectures it is beneficial to load 8 bytes at a
		   time and extract each byte with a bit field extract instr. */
		uint64_t chunk;

		memcpy(&chunk, str, sizeof(chunk));
		hash =
			hash                        * 33 * 33 * 33 * 33 +
			((chunk >> (8 * 0)) & 0xff) * 33 * 33 * 33 +
			((chunk >> (8 * 1)) & 0xff) * 33 * 33 +
			((chunk >> (8 * 2)) & 0xff) * 33 +
			((chunk >> (8 * 3)) & 0xff);
		hash =
			hash                        * 33 * 33 * 33 * 33 +
			((chunk >> (8 * 4)) & 0xff) * 33 * 33 * 33 +
			((chunk >> (8 * 5)) & 0xff) * 33 * 33 +
			((chunk >> (8 * 6)) & 0xff) * 33 +
			((chunk >> (8 * 7)) & 0xff);
# else
		hash =
			hash   * Z_L(33 * 33 * 33 * 33) +
			str[0] * Z_L(33 * 33 * 33) +
			str[1] * Z_L(33 * 33) +
			str[2] * Z_L(33) +
			str[3];
		hash =
			hash   * Z_L(33 * 33 * 33 * 33) +
			str[4] * Z_L(33 * 33 * 33) +
			str[5] * Z_L(33 * 33) +
			str[6] * Z_L(33) +
			str[7];
# endif
	}
	if (len >= 4) {
		hash =
			hash   * Z_L(33 * 33 * 33 * 33) +
			str[0] * Z_L(33 * 33 * 33) +
			str[1] * Z_L(33 * 33) +
			str[2] * Z_L(33) +
			str[3];
		len -= 4;
		str += 4;
	}
	if (len >= 2) {
		if (len > 2) {
			hash =
				hash   * Z_L(33 * 33 * 33) +
				str[0] * Z_L(33 * 33) +
				str[1] * Z_L(33) +
				str[2];
		} else {
			hash =
				hash   * Z_L(33 * 33) +
				str[0] * Z_L(33) +
				str[1];
		}
	} else if (len != 0) {
		hash = hash * Z_L(33) + *str;
	}
#else
	/* variant with the hash unrolled eight times */
	for (; len >= 8; len -= 8) {
		hash = ((hash << 5) + hash) + *str++;
		hash = ((hash << 5) + hash) + *str++;
		hash = ((hash << 5) + hash) + *str++;
		hash = ((hash << 5) + hash) + *str++;
		hash = ((hash << 5) + hash) + *str++;
		hash = ((hash << 5) + hash) + *str++;
		hash = ((hash << 5) + hash) + *str++;
		hash = ((hash << 5) + hash) + *str++;
	}
	switch (len) {
		case 7: hash = ((hash << 5) + hash) + *str++; /* fallthrough... */
		case 6: hash = ((hash << 5) + hash) + *str++; /* fallthrough... */
		case 5: hash = ((hash << 5) + hash) + *str++; /* fallthrough... */
		case 4: hash = ((hash << 5) + hash) + *str++; /* fallthrough... */
		case 3: hash = ((hash << 5) + hash) + *str++; /* fallthrough... */
		case 2: hash = ((hash << 5) + hash) + *str++; /* fallthrough... */
		case 1: hash = ((hash << 5) + hash) + *str++; break;
		case 0: break;
EMPTY_SWITCH_DEFAULT_CASE()
	}
#endif

	/* Hash value can't be zero, so we always set the high bit */
#if SIZEOF_ZEND_LONG == 8
	return hash | Z_UL(0x8000000000000000);
#elif SIZEOF_ZEND_LONG == 4
	return hash | Z_UL(0x80000000);
#else
# error "Unknown SIZEOF_ZEND_LONG"
#endif
}

// When adding a new string here, please also update build/gen_stub.php to the
// known strings to be used in property registration; see gh-15751
#define ZEND_KNOWN_STRINGS(_) \
	_(ZEND_STR_FILE,                   "file") \
	_(ZEND_STR_LINE,                   "line") \
	_(ZEND_STR_FUNCTION,               "function") \
	_(ZEND_STR_CLASS,                  "class") \
	_(ZEND_STR_OBJECT,                 "object") \
	_(ZEND_STR_TYPE,                   "type") \
	_(ZEND_STR_OBJECT_OPERATOR,        "->") \
	_(ZEND_STR_PAAMAYIM_NEKUDOTAYIM,   "::") \
	_(ZEND_STR_ARGS,                   "args") \
	_(ZEND_STR_UNKNOWN,                "unknown") \
	_(ZEND_STR_UNKNOWN_CAPITALIZED,    "Unknown") \
	_(ZEND_STR_EXIT,                   "exit") \
	_(ZEND_STR_CLONE,                  "clone") \
	_(ZEND_STR_EVAL,                   "eval") \
	_(ZEND_STR_INCLUDE,                "include") \
	_(ZEND_STR_REQUIRE,                "require") \
	_(ZEND_STR_INCLUDE_ONCE,           "include_once") \
	_(ZEND_STR_REQUIRE_ONCE,           "require_once") \
	_(ZEND_STR_SCALAR,                 "scalar") \
	_(ZEND_STR_ERROR_REPORTING,        "error_reporting") \
	_(ZEND_STR_STATIC,                 "static") \
	_(ZEND_STR_THIS,                   "this") \
	_(ZEND_STR_VALUE,                  "value") \
	_(ZEND_STR_KEY,                    "key") \
	_(ZEND_STR_MAGIC_INVOKE,           "__invoke") \
	_(ZEND_STR_PREVIOUS,               "previous") \
	_(ZEND_STR_CODE,                   "code") \
	_(ZEND_STR_MESSAGE,                "message") \
	_(ZEND_STR_SEVERITY,               "severity") \
	_(ZEND_STR_STRING,                 "string") \
	_(ZEND_STR_TRACE,                  "trace") \
	_(ZEND_STR_SCHEME,                 "scheme") \
	_(ZEND_STR_HOST,                   "host") \
	_(ZEND_STR_PORT,                   "port") \
	_(ZEND_STR_USER,                   "user") \
	_(ZEND_STR_USERNAME,               "username") \
	_(ZEND_STR_PASS,                   "pass") \
	_(ZEND_STR_PASSWORD,               "password") \
	_(ZEND_STR_PATH,                   "path") \
	_(ZEND_STR_QUERY,                  "query") \
	_(ZEND_STR_FRAGMENT,               "fragment") \
	_(ZEND_STR_NULL,                   "NULL") \
	_(ZEND_STR_BOOLEAN,                "boolean") \
	_(ZEND_STR_INTEGER,                "integer") \
	_(ZEND_STR_DOUBLE,                 "double") \
	_(ZEND_STR_ARRAY,                  "array") \
	_(ZEND_STR_RESOURCE,               "resource") \
	_(ZEND_STR_CLOSED_RESOURCE,        "resource (closed)") \
	_(ZEND_STR_NAME,                   "name") \
	_(ZEND_STR_ARGV,                   "argv") \
	_(ZEND_STR_ARGC,                   "argc") \
	_(ZEND_STR_ARRAY_CAPITALIZED,      "Array") \
	_(ZEND_STR_BOOL,                   "bool") \
	_(ZEND_STR_INT,                    "int") \
	_(ZEND_STR_FLOAT,                  "float") \
	_(ZEND_STR_CALLABLE,               "callable") \
	_(ZEND_STR_ITERABLE,               "iterable") \
	_(ZEND_STR_VOID,                   "void") \
	_(ZEND_STR_NEVER,                  "never") \
	_(ZEND_STR_FALSE,                  "false") \
	_(ZEND_STR_TRUE,                   "true") \
	_(ZEND_STR_NULL_LOWERCASE,         "null") \
	_(ZEND_STR_MIXED,                  "mixed") \
	_(ZEND_STR_TRAVERSABLE,            "Traversable") \
	_(ZEND_STR_SELF,                   "self") \
	_(ZEND_STR_PARENT,                 "parent") \
	_(ZEND_STR_SLEEP,                  "__sleep") \
	_(ZEND_STR_WAKEUP,                 "__wakeup") \
	_(ZEND_STR_CASES,                  "cases") \
	_(ZEND_STR_FROM,                   "from") \
	_(ZEND_STR_TRYFROM,                "tryFrom") \
	_(ZEND_STR_TRYFROM_LOWERCASE,      "tryfrom") \
	_(ZEND_STR_AUTOGLOBAL_SERVER,      "_SERVER") \
	_(ZEND_STR_AUTOGLOBAL_ENV,         "_ENV") \
	_(ZEND_STR_AUTOGLOBAL_REQUEST,     "_REQUEST") \
	_(ZEND_STR_COUNT,                  "count") \
	_(ZEND_STR_SENSITIVEPARAMETER,     "SensitiveParameter") \
	_(ZEND_STR_CONST_EXPR_PLACEHOLDER, "[constant expression]") \
	_(ZEND_STR_DEPRECATED_CAPITALIZED, "Deprecated") \
	_(ZEND_STR_SINCE,                  "since") \
	_(ZEND_STR_GET,                    "get") \
	_(ZEND_STR_SET,                    "set") \
	_(ZEND_STR_8_DOT_0,                "8.0") \
	_(ZEND_STR_8_DOT_1,                "8.1") \
	_(ZEND_STR_8_DOT_2,                "8.2") \
	_(ZEND_STR_8_DOT_3,                "8.3") \
	_(ZEND_STR_8_DOT_4,                "8.4") \
	_(ZEND_STR_8_DOT_5,                "8.5") \


typedef enum _zend_known_string_id {
#define _ZEND_STR_ID(id, str) id,
ZEND_KNOWN_STRINGS(_ZEND_STR_ID)
#undef _ZEND_STR_ID
	ZEND_STR_LAST_KNOWN
} zend_known_string_id;

#endif /* ZEND_STRING_H */
Zend/zend_stream.h000064400000007071151730543060010141 0ustar00/*
   +----------------------------------------------------------------------+
   | Zend Engine                                                          |
   +----------------------------------------------------------------------+
   | Copyright (c) Zend Technologies Ltd. (http://www.zend.com)           |
   +----------------------------------------------------------------------+
   | This source file is subject to version 2.00 of the Zend license,     |
   | that is bundled with this package in the file LICENSE, and is        |
   | available through the world-wide-web at the following url:           |
   | http://www.zend.com/license/2_00.txt.                                |
   | If you did not receive a copy of the Zend license and are unable to  |
   | obtain it through the world-wide-web, please send a note to          |
   | license@zend.com so we can mail you a copy immediately.              |
   +----------------------------------------------------------------------+
   | Authors: Wez Furlong <wez@thebrainroom.com>                          |
   |          Scott MacVicar <scottmac@php.net>                           |
   |          Nuno Lopes <nlopess@php.net>                                |
   |          Marcus Boerger <helly@php.net>                              |
   +----------------------------------------------------------------------+
*/

#ifndef ZEND_STREAM_H
#define ZEND_STREAM_H

#include <sys/types.h>
#include <sys/stat.h>

#include "zend_types.h"

/* Lightweight stream implementation for the ZE scanners.
 * These functions are private to the engine.
 * */
typedef size_t (*zend_stream_fsizer_t)(void* handle);
typedef ssize_t (*zend_stream_reader_t)(void* handle, char *buf, size_t len);
typedef void   (*zend_stream_closer_t)(void* handle);

#define ZEND_MMAP_AHEAD 32

typedef enum {
	ZEND_HANDLE_FILENAME,
	ZEND_HANDLE_FP,
	ZEND_HANDLE_STREAM
} zend_stream_type;

typedef struct _zend_stream {
	void        *handle;
	int         isatty;
	zend_stream_reader_t   reader;
	zend_stream_fsizer_t   fsizer;
	zend_stream_closer_t   closer;
} zend_stream;

typedef struct _zend_file_handle {
	union {
		FILE          *fp;
		zend_stream   stream;
	} handle;
	zend_string       *filename;
	zend_string       *opened_path;
	uint8_t           type; /* packed zend_stream_type */
	bool              primary_script;
	bool              in_list; /* added into CG(open_file) */
	char              *buf;
	size_t            len;
} zend_file_handle;

BEGIN_EXTERN_C()
ZEND_API void zend_stream_init_fp(zend_file_handle *handle, FILE *fp, const char *filename);
ZEND_API void zend_stream_init_filename(zend_file_handle *handle, const char *filename);
ZEND_API void zend_stream_init_filename_ex(zend_file_handle *handle, zend_string *filename);
ZEND_API zend_result zend_stream_open(zend_file_handle *handle);
ZEND_API zend_result zend_stream_fixup(zend_file_handle *file_handle, char **buf, size_t *len);
ZEND_API void zend_destroy_file_handle(zend_file_handle *file_handle);

void zend_stream_init(void);
void zend_stream_shutdown(void);
END_EXTERN_C()

#ifdef ZEND_WIN32
# include "win32/ioutil.h"
typedef php_win32_ioutil_stat_t zend_stat_t;
#ifdef _WIN64
#  define zend_fseek _fseeki64
#  define zend_ftell _ftelli64
#  define zend_lseek _lseeki64
# else
#  define zend_fseek fseek
#  define zend_ftell ftell
#  define zend_lseek lseek
# endif
# define zend_fstat php_win32_ioutil_fstat
# define zend_stat php_win32_ioutil_stat
#else
typedef struct stat zend_stat_t;
# define zend_fseek fseek
# define zend_ftell ftell
# define zend_lseek lseek
# define zend_fstat fstat
# define zend_stat stat
#endif

#endif
Zend/zend_smart_str.h000064400000015605151730543070010667 0ustar00/*
   +----------------------------------------------------------------------+
   | Copyright (c) The PHP Group                                          |
   +----------------------------------------------------------------------+
   | This source file is subject to version 3.01 of the PHP license,      |
   | that is bundled with this package in the file LICENSE, and is        |
   | available through the world-wide-web at the following url:           |
   | https://www.php.net/license/3_01.txt                                 |
   | If you did not receive a copy of the PHP license and are unable to   |
   | obtain it through the world-wide-web, please send a note to          |
   | license@php.net so we can mail you a copy immediately.               |
   +----------------------------------------------------------------------+
   | Author: Sascha Schumann <sascha@schumann.cx>                         |
   +----------------------------------------------------------------------+
 */

#ifndef ZEND_SMART_STR_H
#define ZEND_SMART_STR_H

#include <zend.h>
#include "zend_globals.h"
#include "zend_smart_str_public.h"

BEGIN_EXTERN_C()

ZEND_API void ZEND_FASTCALL smart_str_erealloc(smart_str *str, size_t len);
ZEND_API void ZEND_FASTCALL smart_str_realloc(smart_str *str, size_t len);
ZEND_API void ZEND_FASTCALL smart_str_append_escaped(smart_str *str, const char *s, size_t l);
/* If zero_fraction is true, then a ".0" will be added to numbers that would not otherwise
 * have a fractional part and look like integers. */
ZEND_API void ZEND_FASTCALL smart_str_append_double(
		smart_str *str, double num, int precision, bool zero_fraction);
ZEND_API void smart_str_append_printf(smart_str *dest, const char *format, ...)
	ZEND_ATTRIBUTE_FORMAT(printf, 2, 3);
ZEND_API void ZEND_FASTCALL smart_str_append_escaped_truncated(smart_str *str, const zend_string *value, size_t length);
ZEND_API void ZEND_FASTCALL smart_str_append_scalar(smart_str *str, const zval *value, size_t truncate);
ZEND_API zend_result ZEND_FASTCALL smart_str_append_zval(smart_str *dest, const zval *value, size_t truncate);
END_EXTERN_C()

static zend_always_inline size_t smart_str_alloc(smart_str *str, size_t len, bool persistent) {
	if (UNEXPECTED(!str->s)) {
		goto do_smart_str_realloc;
	} else {
		len += ZSTR_LEN(str->s);
		if (UNEXPECTED(len >= str->a)) {
do_smart_str_realloc:
			if (persistent) {
				smart_str_realloc(str, len);
			} else {
				smart_str_erealloc(str, len);
			}
		}
	}
	return len;
}

static zend_always_inline char* smart_str_extend_ex(smart_str *dest, size_t len, bool persistent) {
	size_t new_len = smart_str_alloc(dest, len, persistent);
	char *ret = ZSTR_VAL(dest->s) + ZSTR_LEN(dest->s);
	ZSTR_LEN(dest->s) = new_len;
	return ret;
}

static zend_always_inline char* smart_str_extend(smart_str *dest, size_t length)
{
	return smart_str_extend_ex(dest, length, false);
}

static zend_always_inline void smart_str_free_ex(smart_str *str, bool persistent) {
	if (str->s) {
		zend_string_release_ex(str->s, persistent);
		str->s = NULL;
	}
	str->a = 0;
}

static zend_always_inline void smart_str_free(smart_str *str)
{
	smart_str_free_ex(str, false);
}

static zend_always_inline void smart_str_0(smart_str *str) {
	if (str->s) {
		ZSTR_VAL(str->s)[ZSTR_LEN(str->s)] = '\0';
	}
}

static zend_always_inline size_t smart_str_get_len(smart_str *str) {
	return str->s ? ZSTR_LEN(str->s) : 0;
}

static zend_always_inline void smart_str_trim_to_size_ex(smart_str *str, bool persistent)
{
	if (str->s && str->a > ZSTR_LEN(str->s)) {
		str->s = zend_string_realloc(str->s, ZSTR_LEN(str->s), persistent);
		str->a = ZSTR_LEN(str->s);
	}
}

static zend_always_inline void smart_str_trim_to_size(smart_str *dest)
{
	smart_str_trim_to_size_ex(dest, false);
}

static zend_always_inline zend_string *smart_str_extract_ex(smart_str *str, bool persistent) {
	if (str->s) {
		zend_string *res;
		smart_str_0(str);
		smart_str_trim_to_size_ex(str, persistent);
		res = str->s;
		str->s = NULL;
		return res;
	} else {
		return ZSTR_EMPTY_ALLOC();
	}
}

static zend_always_inline zend_string *smart_str_extract(smart_str *dest)
{
	return smart_str_extract_ex(dest, false);
}

static zend_always_inline void smart_str_appendc_ex(smart_str *dest, char ch, bool persistent) {
	size_t new_len = smart_str_alloc(dest, 1, persistent);
	ZSTR_VAL(dest->s)[new_len - 1] = ch;
	ZSTR_LEN(dest->s) = new_len;
}

static zend_always_inline void smart_str_appendl_ex(smart_str *dest, const char *str, size_t len, bool persistent) {
	size_t new_len = smart_str_alloc(dest, len, persistent);
	memcpy(ZSTR_VAL(dest->s) + ZSTR_LEN(dest->s), str, len);
	ZSTR_LEN(dest->s) = new_len;
}

static zend_always_inline void smart_str_append_ex(smart_str *dest, const zend_string *src, bool persistent) {
	smart_str_appendl_ex(dest, ZSTR_VAL(src), ZSTR_LEN(src), persistent);
}

static zend_always_inline void smart_str_append_smart_str_ex(smart_str *dest, const smart_str *src, bool persistent) {
	if (src->s && ZSTR_LEN(src->s)) {
		smart_str_append_ex(dest, src->s, persistent);
	}
}

static zend_always_inline void smart_str_append_long_ex(smart_str *dest, zend_long num, bool persistent) {
	char buf[32];
	char *result = zend_print_long_to_buf(buf + sizeof(buf) - 1, num);
	smart_str_appendl_ex(dest, result, buf + sizeof(buf) - 1 - result, persistent);
}

static zend_always_inline void smart_str_append_long(smart_str *dest, zend_long num)
{
	smart_str_append_long_ex(dest, num, false);
}

static zend_always_inline void smart_str_append_unsigned_ex(smart_str *dest, zend_ulong num, bool persistent) {
	char buf[32];
	char *result = zend_print_ulong_to_buf(buf + sizeof(buf) - 1, num);
	smart_str_appendl_ex(dest, result, buf + sizeof(buf) - 1 - result, persistent);
}

static zend_always_inline void smart_str_append_unsigned(smart_str *dest, zend_ulong num)
{
	smart_str_append_unsigned_ex(dest, num, false);
}

static zend_always_inline void smart_str_appendl(smart_str *dest, const char *src, size_t length)
{
	smart_str_appendl_ex(dest, src, length, false);
}
static zend_always_inline void smart_str_appends_ex(smart_str *dest, const char *src, bool persistent)
{
	smart_str_appendl_ex(dest, src, strlen(src), persistent);
}
static zend_always_inline void smart_str_appends(smart_str *dest, const char *src)
{
	smart_str_appendl_ex(dest, src, strlen(src), false);
}
static zend_always_inline void smart_str_append(smart_str *dest, const zend_string *src)
{
	smart_str_append_ex(dest, src, false);
}
static zend_always_inline void smart_str_appendc(smart_str *dest, char ch)
{
	smart_str_appendc_ex(dest, ch, false);
}
static zend_always_inline void smart_str_append_smart_str(smart_str *dest, const smart_str *src)
{
	smart_str_append_smart_str_ex(dest, src, false);
}

static zend_always_inline void smart_str_setl(smart_str *dest, const char *src, size_t len) {
	smart_str_free(dest);
	smart_str_appendl(dest, src, len);
}

static zend_always_inline void smart_str_sets(smart_str *dest, const char *src)
{
	smart_str_setl(dest, src, strlen(src));
}
#endif
Zend/zend_attributes_arginfo.h000064400000037001151730543070012536 0ustar00/* This is a generated file, edit the .stub.php file instead.
 * Stub hash: b868cb33f41d9442f42d0cec84e33fcc09f5d88c */

ZEND_BEGIN_ARG_INFO_EX(arginfo_class_Attribute___construct, 0, 0, 0)
	ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, flags, IS_LONG, 0, "Attribute::TARGET_ALL")
ZEND_END_ARG_INFO()

ZEND_BEGIN_ARG_INFO_EX(arginfo_class_ReturnTypeWillChange___construct, 0, 0, 0)
ZEND_END_ARG_INFO()

#define arginfo_class_AllowDynamicProperties___construct arginfo_class_ReturnTypeWillChange___construct

#define arginfo_class_SensitiveParameter___construct arginfo_class_ReturnTypeWillChange___construct

ZEND_BEGIN_ARG_INFO_EX(arginfo_class_SensitiveParameterValue___construct, 0, 0, 1)
	ZEND_ARG_TYPE_INFO(0, value, IS_MIXED, 0)
ZEND_END_ARG_INFO()

ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_class_SensitiveParameterValue_getValue, 0, 0, IS_MIXED, 0)
ZEND_END_ARG_INFO()

ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_class_SensitiveParameterValue___debugInfo, 0, 0, IS_ARRAY, 0)
ZEND_END_ARG_INFO()

#define arginfo_class_Override___construct arginfo_class_ReturnTypeWillChange___construct

ZEND_BEGIN_ARG_INFO_EX(arginfo_class_Deprecated___construct, 0, 0, 0)
	ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, message, IS_STRING, 1, "null")
	ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, since, IS_STRING, 1, "null")
ZEND_END_ARG_INFO()

ZEND_BEGIN_ARG_INFO_EX(arginfo_class_NoDiscard___construct, 0, 0, 0)
	ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, message, IS_STRING, 1, "null")
ZEND_END_ARG_INFO()

ZEND_METHOD(Attribute, __construct);
ZEND_METHOD(ReturnTypeWillChange, __construct);
ZEND_METHOD(AllowDynamicProperties, __construct);
ZEND_METHOD(SensitiveParameter, __construct);
ZEND_METHOD(SensitiveParameterValue, __construct);
ZEND_METHOD(SensitiveParameterValue, getValue);
ZEND_METHOD(SensitiveParameterValue, __debugInfo);
ZEND_METHOD(Override, __construct);
ZEND_METHOD(Deprecated, __construct);
ZEND_METHOD(NoDiscard, __construct);

static const zend_function_entry class_Attribute_methods[] = {
	ZEND_ME(Attribute, __construct, arginfo_class_Attribute___construct, ZEND_ACC_PUBLIC)
	ZEND_FE_END
};

static const zend_function_entry class_ReturnTypeWillChange_methods[] = {
	ZEND_ME(ReturnTypeWillChange, __construct, arginfo_class_ReturnTypeWillChange___construct, ZEND_ACC_PUBLIC)
	ZEND_FE_END
};

static const zend_function_entry class_AllowDynamicProperties_methods[] = {
	ZEND_ME(AllowDynamicProperties, __construct, arginfo_class_AllowDynamicProperties___construct, ZEND_ACC_PUBLIC)
	ZEND_FE_END
};

static const zend_function_entry class_SensitiveParameter_methods[] = {
	ZEND_ME(SensitiveParameter, __construct, arginfo_class_SensitiveParameter___construct, ZEND_ACC_PUBLIC)
	ZEND_FE_END
};

static const zend_function_entry class_SensitiveParameterValue_methods[] = {
	ZEND_ME(SensitiveParameterValue, __construct, arginfo_class_SensitiveParameterValue___construct, ZEND_ACC_PUBLIC)
	ZEND_ME(SensitiveParameterValue, getValue, arginfo_class_SensitiveParameterValue_getValue, ZEND_ACC_PUBLIC)
	ZEND_ME(SensitiveParameterValue, __debugInfo, arginfo_class_SensitiveParameterValue___debugInfo, ZEND_ACC_PUBLIC)
	ZEND_FE_END
};

static const zend_function_entry class_Override_methods[] = {
	ZEND_ME(Override, __construct, arginfo_class_Override___construct, ZEND_ACC_PUBLIC)
	ZEND_FE_END
};

static const zend_function_entry class_Deprecated_methods[] = {
	ZEND_ME(Deprecated, __construct, arginfo_class_Deprecated___construct, ZEND_ACC_PUBLIC)
	ZEND_FE_END
};

static const zend_function_entry class_NoDiscard_methods[] = {
	ZEND_ME(NoDiscard, __construct, arginfo_class_NoDiscard___construct, ZEND_ACC_PUBLIC)
	ZEND_FE_END
};

static zend_class_entry *register_class_Attribute(void)
{
	zend_class_entry ce, *class_entry;

	INIT_CLASS_ENTRY(ce, "Attribute", class_Attribute_methods);
	class_entry = zend_register_internal_class_with_flags(&ce, NULL, ZEND_ACC_FINAL);

	zval const_TARGET_CLASS_value;
	ZVAL_LONG(&const_TARGET_CLASS_value, ZEND_ATTRIBUTE_TARGET_CLASS);
	zend_string *const_TARGET_CLASS_name = zend_string_init_interned("TARGET_CLASS", sizeof("TARGET_CLASS") - 1, 1);
	zend_declare_typed_class_constant(class_entry, const_TARGET_CLASS_name, &const_TARGET_CLASS_value, ZEND_ACC_PUBLIC, NULL, (zend_type) ZEND_TYPE_INIT_MASK(MAY_BE_LONG));
	zend_string_release(const_TARGET_CLASS_name);

	zval const_TARGET_FUNCTION_value;
	ZVAL_LONG(&const_TARGET_FUNCTION_value, ZEND_ATTRIBUTE_TARGET_FUNCTION);
	zend_string *const_TARGET_FUNCTION_name = zend_string_init_interned("TARGET_FUNCTION", sizeof("TARGET_FUNCTION") - 1, 1);
	zend_declare_typed_class_constant(class_entry, const_TARGET_FUNCTION_name, &const_TARGET_FUNCTION_value, ZEND_ACC_PUBLIC, NULL, (zend_type) ZEND_TYPE_INIT_MASK(MAY_BE_LONG));
	zend_string_release(const_TARGET_FUNCTION_name);

	zval const_TARGET_METHOD_value;
	ZVAL_LONG(&const_TARGET_METHOD_value, ZEND_ATTRIBUTE_TARGET_METHOD);
	zend_string *const_TARGET_METHOD_name = zend_string_init_interned("TARGET_METHOD", sizeof("TARGET_METHOD") - 1, 1);
	zend_declare_typed_class_constant(class_entry, const_TARGET_METHOD_name, &const_TARGET_METHOD_value, ZEND_ACC_PUBLIC, NULL, (zend_type) ZEND_TYPE_INIT_MASK(MAY_BE_LONG));
	zend_string_release(const_TARGET_METHOD_name);

	zval const_TARGET_PROPERTY_value;
	ZVAL_LONG(&const_TARGET_PROPERTY_value, ZEND_ATTRIBUTE_TARGET_PROPERTY);
	zend_string *const_TARGET_PROPERTY_name = zend_string_init_interned("TARGET_PROPERTY", sizeof("TARGET_PROPERTY") - 1, 1);
	zend_declare_typed_class_constant(class_entry, const_TARGET_PROPERTY_name, &const_TARGET_PROPERTY_value, ZEND_ACC_PUBLIC, NULL, (zend_type) ZEND_TYPE_INIT_MASK(MAY_BE_LONG));
	zend_string_release(const_TARGET_PROPERTY_name);

	zval const_TARGET_CLASS_CONSTANT_value;
	ZVAL_LONG(&const_TARGET_CLASS_CONSTANT_value, ZEND_ATTRIBUTE_TARGET_CLASS_CONST);
	zend_string *const_TARGET_CLASS_CONSTANT_name = zend_string_init_interned("TARGET_CLASS_CONSTANT", sizeof("TARGET_CLASS_CONSTANT") - 1, 1);
	zend_declare_typed_class_constant(class_entry, const_TARGET_CLASS_CONSTANT_name, &const_TARGET_CLASS_CONSTANT_value, ZEND_ACC_PUBLIC, NULL, (zend_type) ZEND_TYPE_INIT_MASK(MAY_BE_LONG));
	zend_string_release(const_TARGET_CLASS_CONSTANT_name);

	zval const_TARGET_PARAMETER_value;
	ZVAL_LONG(&const_TARGET_PARAMETER_value, ZEND_ATTRIBUTE_TARGET_PARAMETER);
	zend_string *const_TARGET_PARAMETER_name = zend_string_init_interned("TARGET_PARAMETER", sizeof("TARGET_PARAMETER") - 1, 1);
	zend_declare_typed_class_constant(class_entry, const_TARGET_PARAMETER_name, &const_TARGET_PARAMETER_value, ZEND_ACC_PUBLIC, NULL, (zend_type) ZEND_TYPE_INIT_MASK(MAY_BE_LONG));
	zend_string_release(const_TARGET_PARAMETER_name);

	zval const_TARGET_CONSTANT_value;
	ZVAL_LONG(&const_TARGET_CONSTANT_value, ZEND_ATTRIBUTE_TARGET_CONST);
	zend_string *const_TARGET_CONSTANT_name = zend_string_init_interned("TARGET_CONSTANT", sizeof("TARGET_CONSTANT") - 1, 1);
	zend_declare_typed_class_constant(class_entry, const_TARGET_CONSTANT_name, &const_TARGET_CONSTANT_value, ZEND_ACC_PUBLIC, NULL, (zend_type) ZEND_TYPE_INIT_MASK(MAY_BE_LONG));
	zend_string_release(const_TARGET_CONSTANT_name);

	zval const_TARGET_ALL_value;
	ZVAL_LONG(&const_TARGET_ALL_value, ZEND_ATTRIBUTE_TARGET_ALL);
	zend_string *const_TARGET_ALL_name = zend_string_init_interned("TARGET_ALL", sizeof("TARGET_ALL") - 1, 1);
	zend_declare_typed_class_constant(class_entry, const_TARGET_ALL_name, &const_TARGET_ALL_value, ZEND_ACC_PUBLIC, NULL, (zend_type) ZEND_TYPE_INIT_MASK(MAY_BE_LONG));
	zend_string_release(const_TARGET_ALL_name);

	zval const_IS_REPEATABLE_value;
	ZVAL_LONG(&const_IS_REPEATABLE_value, ZEND_ATTRIBUTE_IS_REPEATABLE);
	zend_string *const_IS_REPEATABLE_name = zend_string_init_interned("IS_REPEATABLE", sizeof("IS_REPEATABLE") - 1, 1);
	zend_declare_typed_class_constant(class_entry, const_IS_REPEATABLE_name, &const_IS_REPEATABLE_value, ZEND_ACC_PUBLIC, NULL, (zend_type) ZEND_TYPE_INIT_MASK(MAY_BE_LONG));
	zend_string_release(const_IS_REPEATABLE_name);

	zval property_flags_default_value;
	ZVAL_UNDEF(&property_flags_default_value);
	zend_string *property_flags_name = zend_string_init("flags", sizeof("flags") - 1, 1);
	zend_declare_typed_property(class_entry, property_flags_name, &property_flags_default_value, ZEND_ACC_PUBLIC, NULL, (zend_type) ZEND_TYPE_INIT_MASK(MAY_BE_LONG));
	zend_string_release(property_flags_name);

	zend_string *attribute_name_Attribute_class_Attribute_0 = zend_string_init_interned("Attribute", sizeof("Attribute") - 1, 1);
	zend_attribute *attribute_Attribute_class_Attribute_0 = zend_add_class_attribute(class_entry, attribute_name_Attribute_class_Attribute_0, 1);
	zend_string_release(attribute_name_Attribute_class_Attribute_0);
	ZVAL_LONG(&attribute_Attribute_class_Attribute_0->args[0].value, ZEND_ATTRIBUTE_TARGET_CLASS);

	return class_entry;
}

static zend_class_entry *register_class_ReturnTypeWillChange(void)
{
	zend_class_entry ce, *class_entry;

	INIT_CLASS_ENTRY(ce, "ReturnTypeWillChange", class_ReturnTypeWillChange_methods);
	class_entry = zend_register_internal_class_with_flags(&ce, NULL, ZEND_ACC_FINAL);

	zend_string *attribute_name_Attribute_class_ReturnTypeWillChange_0 = zend_string_init_interned("Attribute", sizeof("Attribute") - 1, 1);
	zend_attribute *attribute_Attribute_class_ReturnTypeWillChange_0 = zend_add_class_attribute(class_entry, attribute_name_Attribute_class_ReturnTypeWillChange_0, 1);
	zend_string_release(attribute_name_Attribute_class_ReturnTypeWillChange_0);
	ZVAL_LONG(&attribute_Attribute_class_ReturnTypeWillChange_0->args[0].value, ZEND_ATTRIBUTE_TARGET_METHOD);

	return class_entry;
}

static zend_class_entry *register_class_AllowDynamicProperties(void)
{
	zend_class_entry ce, *class_entry;

	INIT_CLASS_ENTRY(ce, "AllowDynamicProperties", class_AllowDynamicProperties_methods);
	class_entry = zend_register_internal_class_with_flags(&ce, NULL, ZEND_ACC_FINAL);

	zend_string *attribute_name_Attribute_class_AllowDynamicProperties_0 = zend_string_init_interned("Attribute", sizeof("Attribute") - 1, 1);
	zend_attribute *attribute_Attribute_class_AllowDynamicProperties_0 = zend_add_class_attribute(class_entry, attribute_name_Attribute_class_AllowDynamicProperties_0, 1);
	zend_string_release(attribute_name_Attribute_class_AllowDynamicProperties_0);
	ZVAL_LONG(&attribute_Attribute_class_AllowDynamicProperties_0->args[0].value, ZEND_ATTRIBUTE_TARGET_CLASS);

	return class_entry;
}

static zend_class_entry *register_class_SensitiveParameter(void)
{
	zend_class_entry ce, *class_entry;

	INIT_CLASS_ENTRY(ce, "SensitiveParameter", class_SensitiveParameter_methods);
	class_entry = zend_register_internal_class_with_flags(&ce, NULL, ZEND_ACC_FINAL|ZEND_ACC_NO_DYNAMIC_PROPERTIES);

	zend_string *attribute_name_Attribute_class_SensitiveParameter_0 = zend_string_init_interned("Attribute", sizeof("Attribute") - 1, 1);
	zend_attribute *attribute_Attribute_class_SensitiveParameter_0 = zend_add_class_attribute(class_entry, attribute_name_Attribute_class_SensitiveParameter_0, 1);
	zend_string_release(attribute_name_Attribute_class_SensitiveParameter_0);
	ZVAL_LONG(&attribute_Attribute_class_SensitiveParameter_0->args[0].value, ZEND_ATTRIBUTE_TARGET_PARAMETER);

	return class_entry;
}

static zend_class_entry *register_class_SensitiveParameterValue(void)
{
	zend_class_entry ce, *class_entry;

	INIT_CLASS_ENTRY(ce, "SensitiveParameterValue", class_SensitiveParameterValue_methods);
	class_entry = zend_register_internal_class_with_flags(&ce, NULL, ZEND_ACC_FINAL|ZEND_ACC_NO_DYNAMIC_PROPERTIES|ZEND_ACC_NOT_SERIALIZABLE);

	zval property_value_default_value;
	ZVAL_UNDEF(&property_value_default_value);
	zend_declare_typed_property(class_entry, ZSTR_KNOWN(ZEND_STR_VALUE), &property_value_default_value, ZEND_ACC_PRIVATE|ZEND_ACC_READONLY, NULL, (zend_type) ZEND_TYPE_INIT_MASK(MAY_BE_ANY));

	return class_entry;
}

static zend_class_entry *register_class_Override(void)
{
	zend_class_entry ce, *class_entry;

	INIT_CLASS_ENTRY(ce, "Override", class_Override_methods);
	class_entry = zend_register_internal_class_with_flags(&ce, NULL, ZEND_ACC_FINAL|ZEND_ACC_NO_DYNAMIC_PROPERTIES);

	zend_string *attribute_name_Attribute_class_Override_0 = zend_string_init_interned("Attribute", sizeof("Attribute") - 1, 1);
	zend_attribute *attribute_Attribute_class_Override_0 = zend_add_class_attribute(class_entry, attribute_name_Attribute_class_Override_0, 1);
	zend_string_release(attribute_name_Attribute_class_Override_0);
	ZVAL_LONG(&attribute_Attribute_class_Override_0->args[0].value, ZEND_ATTRIBUTE_TARGET_METHOD | ZEND_ATTRIBUTE_TARGET_PROPERTY);

	return class_entry;
}

static zend_class_entry *register_class_Deprecated(void)
{
	zend_class_entry ce, *class_entry;

	INIT_CLASS_ENTRY(ce, "Deprecated", class_Deprecated_methods);
	class_entry = zend_register_internal_class_with_flags(&ce, NULL, ZEND_ACC_FINAL|ZEND_ACC_NO_DYNAMIC_PROPERTIES);

	zval property_message_default_value;
	ZVAL_UNDEF(&property_message_default_value);
	zend_declare_typed_property(class_entry, ZSTR_KNOWN(ZEND_STR_MESSAGE), &property_message_default_value, ZEND_ACC_PUBLIC|ZEND_ACC_READONLY, NULL, (zend_type) ZEND_TYPE_INIT_MASK(MAY_BE_STRING|MAY_BE_NULL));

	zval property_since_default_value;
	ZVAL_UNDEF(&property_since_default_value);
	zend_declare_typed_property(class_entry, ZSTR_KNOWN(ZEND_STR_SINCE), &property_since_default_value, ZEND_ACC_PUBLIC|ZEND_ACC_READONLY, NULL, (zend_type) ZEND_TYPE_INIT_MASK(MAY_BE_STRING|MAY_BE_NULL));

	zend_string *attribute_name_Attribute_class_Deprecated_0 = zend_string_init_interned("Attribute", sizeof("Attribute") - 1, 1);
	zend_attribute *attribute_Attribute_class_Deprecated_0 = zend_add_class_attribute(class_entry, attribute_name_Attribute_class_Deprecated_0, 1);
	zend_string_release(attribute_name_Attribute_class_Deprecated_0);
	ZVAL_LONG(&attribute_Attribute_class_Deprecated_0->args[0].value, ZEND_ATTRIBUTE_TARGET_METHOD | ZEND_ATTRIBUTE_TARGET_FUNCTION | ZEND_ATTRIBUTE_TARGET_CLASS_CONST | ZEND_ATTRIBUTE_TARGET_CONST | ZEND_ATTRIBUTE_TARGET_CLASS);

	return class_entry;
}

static zend_class_entry *register_class_NoDiscard(void)
{
	zend_class_entry ce, *class_entry;

	INIT_CLASS_ENTRY(ce, "NoDiscard", class_NoDiscard_methods);
	class_entry = zend_register_internal_class_with_flags(&ce, NULL, ZEND_ACC_FINAL|ZEND_ACC_NO_DYNAMIC_PROPERTIES);

	zval property_message_default_value;
	ZVAL_UNDEF(&property_message_default_value);
	zend_declare_typed_property(class_entry, ZSTR_KNOWN(ZEND_STR_MESSAGE), &property_message_default_value, ZEND_ACC_PUBLIC|ZEND_ACC_READONLY, NULL, (zend_type) ZEND_TYPE_INIT_MASK(MAY_BE_STRING|MAY_BE_NULL));

	zend_string *attribute_name_Attribute_class_NoDiscard_0 = zend_string_init_interned("Attribute", sizeof("Attribute") - 1, 1);
	zend_attribute *attribute_Attribute_class_NoDiscard_0 = zend_add_class_attribute(class_entry, attribute_name_Attribute_class_NoDiscard_0, 1);
	zend_string_release(attribute_name_Attribute_class_NoDiscard_0);
	ZVAL_LONG(&attribute_Attribute_class_NoDiscard_0->args[0].value, ZEND_ATTRIBUTE_TARGET_METHOD | ZEND_ATTRIBUTE_TARGET_FUNCTION);

	return class_entry;
}

static zend_class_entry *register_class_DelayedTargetValidation(void)
{
	zend_class_entry ce, *class_entry;

	INIT_CLASS_ENTRY(ce, "DelayedTargetValidation", NULL);
	class_entry = zend_register_internal_class_with_flags(&ce, NULL, ZEND_ACC_FINAL|ZEND_ACC_NO_DYNAMIC_PROPERTIES);

	zend_string *attribute_name_Attribute_class_DelayedTargetValidation_0 = zend_string_init_interned("Attribute", sizeof("Attribute") - 1, 1);
	zend_attribute *attribute_Attribute_class_DelayedTargetValidation_0 = zend_add_class_attribute(class_entry, attribute_name_Attribute_class_DelayedTargetValidation_0, 1);
	zend_string_release(attribute_name_Attribute_class_DelayedTargetValidation_0);
	ZVAL_LONG(&attribute_Attribute_class_DelayedTargetValidation_0->args[0].value, ZEND_ATTRIBUTE_TARGET_ALL);

	return class_entry;
}
Zend/zend_language_scanner.h000064400000005777151730543070012156 0ustar00/*
   +----------------------------------------------------------------------+
   | Zend Engine                                                          |
   +----------------------------------------------------------------------+
   | Copyright (c) Zend Technologies Ltd. (http://www.zend.com)           |
   +----------------------------------------------------------------------+
   | This source file is subject to version 2.00 of the Zend license,     |
   | that is bundled with this package in the file LICENSE, and is        |
   | available through the world-wide-web at the following url:           |
   | http://www.zend.com/license/2_00.txt.                                |
   | If you did not receive a copy of the Zend license and are unable to  |
   | obtain it through the world-wide-web, please send a note to          |
   | license@zend.com so we can mail you a copy immediately.              |
   +----------------------------------------------------------------------+
   | Authors: Andi Gutmans <andi@php.net>                                 |
   |          Zeev Suraski <zeev@php.net>                                 |
   +----------------------------------------------------------------------+
*/

#ifndef ZEND_SCANNER_H
#define ZEND_SCANNER_H

#include "zend_globals.h"

typedef struct _zend_lex_state {
	unsigned int yy_leng;
	unsigned char *yy_start;
	unsigned char *yy_text;
	unsigned char *yy_cursor;
	unsigned char *yy_marker;
	unsigned char *yy_limit;
	int yy_state;
	zend_stack state_stack;
	zend_ptr_stack heredoc_label_stack;
	zend_stack nest_location_stack; /* for syntax error reporting */

	zend_file_handle *in;
	uint32_t lineno;
	zend_string *filename;

	/* original (unfiltered) script */
	unsigned char *script_org;
	size_t script_org_size;

	/* filtered script */
	unsigned char *script_filtered;
	size_t script_filtered_size;

	/* input/output filters */
	zend_encoding_filter input_filter;
	zend_encoding_filter output_filter;
	const zend_encoding *script_encoding;

	/* hooks */
	void (*on_event)(
		zend_php_scanner_event event, int token, int line,
		const char *text, size_t length, void *context);
	void *on_event_context;

	zend_ast *ast;
	zend_arena *ast_arena;
} zend_lex_state;

typedef struct _zend_heredoc_label {
	char *label;
	int length;
	int indentation;
	bool indentation_uses_spaces;
} zend_heredoc_label;

/* Track locations of unclosed {, [, (, etc. for better syntax error reporting */
typedef struct _zend_nest_location {
	char text;
	int  lineno;
} zend_nest_location;

BEGIN_EXTERN_C()
ZEND_API void zend_save_lexical_state(zend_lex_state *lex_state);
ZEND_API void zend_restore_lexical_state(zend_lex_state *lex_state);
ZEND_API void zend_prepare_string_for_scanning(zval *str, zend_string *filename);
ZEND_API void zend_multibyte_yyinput_again(zend_encoding_filter old_input_filter, const zend_encoding *old_encoding);
ZEND_API zend_result zend_multibyte_set_filter(const zend_encoding *onetime_encoding);
ZEND_API zend_result zend_lex_tstring(zval *zv, unsigned char *ident);

END_EXTERN_C()

#endif
Zend/zend_inheritance.h000064400000006204151730543070011135 0ustar00/*
   +----------------------------------------------------------------------+
   | Zend Engine                                                          |
   +----------------------------------------------------------------------+
   | Copyright (c) Zend Technologies Ltd. (http://www.zend.com)           |
   +----------------------------------------------------------------------+
   | This source file is subject to version 2.00 of the Zend license,     |
   | that is bundled with this package in the file LICENSE, and is        |
   | available through the world-wide-web at the following url:           |
   | http://www.zend.com/license/2_00.txt.                                |
   | If you did not receive a copy of the Zend license and are unable to  |
   | obtain it through the world-wide-web, please send a note to          |
   | license@zend.com so we can mail you a copy immediately.              |
   +----------------------------------------------------------------------+
   | Authors: Andi Gutmans <andi@php.net>                                 |
   |          Zeev Suraski <zeev@php.net>                                 |
   +----------------------------------------------------------------------+
*/

#ifndef ZEND_INHERITANCE_H
#define ZEND_INHERITANCE_H

#include "zend.h"
#include "zend_compile.h"

BEGIN_EXTERN_C()

ZEND_API void zend_do_implement_interface(zend_class_entry *ce, zend_class_entry *iface);
ZEND_API void zend_do_inheritance_ex(zend_class_entry *ce, zend_class_entry *parent_ce, bool checked);

static zend_always_inline void zend_do_inheritance(zend_class_entry *ce, zend_class_entry *parent_ce) {
	zend_do_inheritance_ex(ce, parent_ce, 0);
}

ZEND_API zend_class_entry *zend_do_link_class(zend_class_entry *ce, zend_string *lc_parent_name, const zend_string *key);

void zend_verify_abstract_class(zend_class_entry *ce);
void zend_build_properties_info_table(zend_class_entry *ce);
ZEND_API zend_class_entry *zend_try_early_bind(zend_class_entry *ce, zend_class_entry *parent_ce, zend_string *lcname, zval *delayed_early_binding);

void zend_inheritance_check_override(const zend_class_entry *ce);

ZEND_API extern zend_class_entry* (*zend_inheritance_cache_get)(zend_class_entry *ce, zend_class_entry *parent, zend_class_entry **traits_and_interfaces);
ZEND_API extern zend_class_entry* (*zend_inheritance_cache_add)(zend_class_entry *ce, zend_class_entry *proto, zend_class_entry *parent, zend_class_entry **traits_and_interfaces, HashTable *dependencies);

typedef enum {
	INHERITANCE_UNRESOLVED = -1,
	INHERITANCE_ERROR = 0,
	INHERITANCE_WARNING = 1,
	INHERITANCE_SUCCESS = 2,
} zend_inheritance_status;

ZEND_API zend_inheritance_status zend_verify_property_hook_variance(const zend_property_info *prop_info, const zend_function *func);
ZEND_API ZEND_COLD ZEND_NORETURN void zend_hooked_property_variance_error(const zend_property_info *prop_info);
ZEND_API ZEND_COLD ZEND_NORETURN void zend_hooked_property_variance_error_ex(zend_string *value_param_name, zend_string *class_name, zend_string *prop_name);
ZEND_API void zend_verify_hooked_property(const zend_class_entry *ce, zend_property_info *prop_info, zend_string *prop_name);

END_EXTERN_C()

#endif
Zend/zend_constants_arginfo.h000064400000005226151730543070012370 0ustar00/* This is a generated file, edit the .stub.php file instead.
 * Stub hash: 569ccba4e0a93a9ce49c81c76955413188df390e */

static void register_zend_constants_symbols(int module_number)
{
	REGISTER_LONG_CONSTANT("E_ERROR", E_ERROR, CONST_PERSISTENT);
	REGISTER_LONG_CONSTANT("E_WARNING", E_WARNING, CONST_PERSISTENT);
	REGISTER_LONG_CONSTANT("E_PARSE", E_PARSE, CONST_PERSISTENT);
	REGISTER_LONG_CONSTANT("E_NOTICE", E_NOTICE, CONST_PERSISTENT);
	REGISTER_LONG_CONSTANT("E_CORE_ERROR", E_CORE_ERROR, CONST_PERSISTENT);
	REGISTER_LONG_CONSTANT("E_CORE_WARNING", E_CORE_WARNING, CONST_PERSISTENT);
	REGISTER_LONG_CONSTANT("E_COMPILE_ERROR", E_COMPILE_ERROR, CONST_PERSISTENT);
	REGISTER_LONG_CONSTANT("E_COMPILE_WARNING", E_COMPILE_WARNING, CONST_PERSISTENT);
	REGISTER_LONG_CONSTANT("E_USER_ERROR", E_USER_ERROR, CONST_PERSISTENT);
	REGISTER_LONG_CONSTANT("E_USER_WARNING", E_USER_WARNING, CONST_PERSISTENT);
	REGISTER_LONG_CONSTANT("E_USER_NOTICE", E_USER_NOTICE, CONST_PERSISTENT);
	zend_constant *const_E_STRICT = REGISTER_LONG_CONSTANT("E_STRICT", E_STRICT, CONST_PERSISTENT | CONST_DEPRECATED);
	REGISTER_LONG_CONSTANT("E_RECOVERABLE_ERROR", E_RECOVERABLE_ERROR, CONST_PERSISTENT);
	REGISTER_LONG_CONSTANT("E_DEPRECATED", E_DEPRECATED, CONST_PERSISTENT);
	REGISTER_LONG_CONSTANT("E_USER_DEPRECATED", E_USER_DEPRECATED, CONST_PERSISTENT);
	REGISTER_LONG_CONSTANT("E_ALL", E_ALL, CONST_PERSISTENT);
	REGISTER_LONG_CONSTANT("DEBUG_BACKTRACE_PROVIDE_OBJECT", DEBUG_BACKTRACE_PROVIDE_OBJECT, CONST_PERSISTENT);
	REGISTER_LONG_CONSTANT("DEBUG_BACKTRACE_IGNORE_ARGS", DEBUG_BACKTRACE_IGNORE_ARGS, CONST_PERSISTENT);
	REGISTER_BOOL_CONSTANT("ZEND_THREAD_SAFE", ZTS_V, CONST_PERSISTENT);
	REGISTER_BOOL_CONSTANT("ZEND_DEBUG_BUILD", ZEND_DEBUG, CONST_PERSISTENT);
	REGISTER_STRING_CONSTANT("ZEND_VM_KIND", zend_vm_kind_name[ZEND_VM_KIND], CONST_PERSISTENT);
	REGISTER_BOOL_CONSTANT("TRUE", true, CONST_PERSISTENT);
	REGISTER_BOOL_CONSTANT("FALSE", false, CONST_PERSISTENT);
	REGISTER_NULL_CONSTANT("NULL", CONST_PERSISTENT);


	zend_attribute *attribute_Deprecated_const_E_STRICT_0 = zend_add_global_constant_attribute(const_E_STRICT, ZSTR_KNOWN(ZEND_STR_DEPRECATED_CAPITALIZED), 2);
	ZVAL_STR(&attribute_Deprecated_const_E_STRICT_0->args[0].value, ZSTR_KNOWN(ZEND_STR_8_DOT_4));
	attribute_Deprecated_const_E_STRICT_0->args[0].name = ZSTR_KNOWN(ZEND_STR_SINCE);
	zend_string *attribute_Deprecated_const_E_STRICT_0_arg1_str = zend_string_init("the error level was removed", strlen("the error level was removed"), 1);
	ZVAL_STR(&attribute_Deprecated_const_E_STRICT_0->args[1].value, attribute_Deprecated_const_E_STRICT_0_arg1_str);
	attribute_Deprecated_const_E_STRICT_0->args[1].name = ZSTR_KNOWN(ZEND_STR_MESSAGE);
}
Zend/zend_enum.h000064400000005560151730543070007614 0ustar00/*
   +----------------------------------------------------------------------+
   | Zend Engine                                                          |
   +----------------------------------------------------------------------+
   | Copyright (c) Zend Technologies Ltd. (http://www.zend.com)           |
   +----------------------------------------------------------------------+
   | This source file is subject to version 2.00 of the Zend license,     |
   | that is bundled with this package in the file LICENSE, and is        |
   | available through the world-wide-web at the following url:           |
   | http://www.zend.com/license/2_00.txt.                                |
   | If you did not receive a copy of the Zend license and are unable to  |
   | obtain it through the world-wide-web, please send a note to          |
   | license@zend.com so we can mail you a copy immediately.              |
   +----------------------------------------------------------------------+
   | Authors: Ilija Tovilo <ilutov@php.net>                               |
   +----------------------------------------------------------------------+
*/

#ifndef ZEND_ENUM_H
#define ZEND_ENUM_H

#include "zend.h"
#include "zend_API.h"

#include <stdint.h>

BEGIN_EXTERN_C()

extern ZEND_API zend_class_entry *zend_ce_unit_enum;
extern ZEND_API zend_class_entry *zend_ce_backed_enum;
extern ZEND_API zend_object_handlers zend_enum_object_handlers;

void zend_register_enum_ce(void);
void zend_enum_add_interfaces(zend_class_entry *ce);
zend_result zend_enum_build_backed_enum_table(zend_class_entry *ce);
zend_object *zend_enum_new(zval *result, zend_class_entry *ce, zend_string *case_name, zval *backing_value_zv);
void zend_verify_enum(const zend_class_entry *ce);
void zend_enum_register_funcs(zend_class_entry *ce);
void zend_enum_register_props(zend_class_entry *ce);

ZEND_API zend_class_entry *zend_register_internal_enum(
	const char *name, uint8_t type, const zend_function_entry *functions);
ZEND_API void zend_enum_add_case(zend_class_entry *ce, zend_string *case_name, zval *value);
ZEND_API void zend_enum_add_case_cstr(zend_class_entry *ce, const char *name, zval *value);
ZEND_API zend_object *zend_enum_get_case(zend_class_entry *ce, zend_string *name);
ZEND_API zend_object *zend_enum_get_case_cstr(zend_class_entry *ce, const char *name);
ZEND_API zend_result zend_enum_get_case_by_value(zend_object **result, zend_class_entry *ce, zend_long long_key, zend_string *string_key, bool try_from);

static zend_always_inline zval *zend_enum_fetch_case_name(zend_object *zobj)
{
	ZEND_ASSERT(zobj->ce->ce_flags & ZEND_ACC_ENUM);
	return OBJ_PROP_NUM(zobj, 0);
}

static zend_always_inline zval *zend_enum_fetch_case_value(zend_object *zobj)
{
	ZEND_ASSERT(zobj->ce->ce_flags & ZEND_ACC_ENUM);
	ZEND_ASSERT(zobj->ce->enum_backing_type != IS_UNDEF);
	return OBJ_PROP_NUM(zobj, 1);
}

END_EXTERN_C()

#endif /* ZEND_ENUM_H */
Zend/zend_lazy_objects.h000064400000011245151730543070011335 0ustar00/*
   +----------------------------------------------------------------------+
   | Zend Engine                                                          |
   +----------------------------------------------------------------------+
   | Copyright (c) Zend Technologies Ltd. (http://www.zend.com)           |
   +----------------------------------------------------------------------+
   | This source file is subject to version 2.00 of the Zend license,     |
   | that is bundled with this package in the file LICENSE, and is        |
   | available through the world-wide-web at the following url:           |
   | http://www.zend.com/license/2_00.txt.                                |
   | If you did not receive a copy of the Zend license and are unable to  |
   | obtain it through the world-wide-web, please send a note to          |
   | license@zend.com so we can mail you a copy immediately.              |
   +----------------------------------------------------------------------+
   | Authors: Arnaud Le Blanc <arnaud.lb@gmail.com>                       |
   +----------------------------------------------------------------------+
*/

#ifndef ZEND_LAZY_OBJECT_H
#define ZEND_LAZY_OBJECT_H

#include "Zend/zend_types.h"

/* Lazy object is a lazy proxy object */
#define ZEND_LAZY_OBJECT_STRATEGY_PROXY                     (1<<0)

/* Lazy object is a lazy ghost object */
#define ZEND_LAZY_OBJECT_STRATEGY_GHOST                     (1<<1)

/* Lazy object is initialized (info.u is an instance) */
#define ZEND_LAZY_OBJECT_INITIALIZED                        (1<<2)

/* Serialization skips initialization */
#define ZEND_LAZY_OBJECT_SKIP_INITIALIZATION_ON_SERIALIZE   (1<<3)

/* Do not call destructor when making existing object lazy */
#define ZEND_LAZY_OBJECT_SKIP_DESTRUCTOR                    (1<<4)

#define ZEND_LAZY_OBJECT_USER_MASK (                                        \
	ZEND_LAZY_OBJECT_SKIP_INITIALIZATION_ON_SERIALIZE |                     \
	ZEND_LAZY_OBJECT_SKIP_DESTRUCTOR                                        \
)

#define ZEND_LAZY_OBJECT_STRATEGY_MASK (                                    \
		ZEND_LAZY_OBJECT_STRATEGY_PROXY |                                   \
		ZEND_LAZY_OBJECT_STRATEGY_GHOST                                     \
)

typedef uint8_t zend_lazy_object_flags_t;

typedef struct _zend_lazy_objects_store {
	/* object handle -> *zend_lazy_object_info */
	HashTable infos;
} zend_lazy_objects_store;

typedef struct _zend_property_info zend_property_info;
typedef struct _zend_fcall_info zend_fcall_info;
typedef struct _zend_fcall_info_cache zend_fcall_info_cache;

ZEND_API bool zend_class_can_be_lazy(const zend_class_entry *ce);
ZEND_API zend_object *zend_object_make_lazy(zend_object *obj,
		zend_class_entry *class_type, zval *initializer_zv,
		zend_fcall_info_cache *initializer_fcc, zend_lazy_object_flags_t flags);
ZEND_API zend_object *zend_lazy_object_init(zend_object *obj);
ZEND_API zend_object *zend_lazy_object_mark_as_initialized(zend_object *obj);

void zend_lazy_objects_init(zend_lazy_objects_store *store);
void zend_lazy_objects_destroy(zend_lazy_objects_store *store);
zval* zend_lazy_object_get_initializer_zv(zend_object *obj);
zend_object *zend_lazy_object_get_instance(zend_object *obj);
zend_lazy_object_flags_t zend_lazy_object_get_flags(const zend_object *obj);
void zend_lazy_object_del_info(const zend_object *obj);
ZEND_API HashTable *zend_lazy_object_get_properties(zend_object *object);
zend_object *zend_lazy_object_clone(zend_object *old_obj);
HashTable *zend_lazy_object_debug_info(zend_object *object, int *is_temp);
HashTable *zend_lazy_object_get_gc(zend_object *zobj, zval **table, int *n);
bool zend_lazy_object_decr_lazy_props(const zend_object *obj);
void zend_lazy_object_realize(zend_object *obj);
ZEND_API zend_property_info *zend_lazy_object_get_property_info_for_slot(zend_object *obj, zval *slot);

static zend_always_inline bool zend_object_is_lazy(const zend_object *obj)
{
	return (OBJ_EXTRA_FLAGS(obj) & (IS_OBJ_LAZY_UNINITIALIZED | IS_OBJ_LAZY_PROXY));
}

static zend_always_inline bool zend_object_is_lazy_proxy(const zend_object *obj)
{
	return (OBJ_EXTRA_FLAGS(obj) & IS_OBJ_LAZY_PROXY);
}

static zend_always_inline bool zend_lazy_object_initialized(const zend_object *obj)
{
	return !(OBJ_EXTRA_FLAGS(obj) & IS_OBJ_LAZY_UNINITIALIZED);
}

/* True if accessing a lazy prop on obj mandates a call to
 * zend_lazy_object_init() */
static zend_always_inline bool zend_lazy_object_must_init(const zend_object *obj)
{
	return zend_object_is_lazy(obj);
}

static inline bool zend_lazy_object_initialize_on_serialize(const zend_object *obj)
{
	return !(zend_lazy_object_get_flags(obj) & ZEND_LAZY_OBJECT_SKIP_INITIALIZATION_ON_SERIALIZE);
}

#endif /* ZEND_LAZY_OBJECT_H */
Zend/zend_portability.h000064400000070175151730543100011210 0ustar00/*
   +----------------------------------------------------------------------+
   | Zend Engine                                                          |
   +----------------------------------------------------------------------+
   | Copyright (c) Zend Technologies Ltd. (http://www.zend.com)           |
   +----------------------------------------------------------------------+
   | This source file is subject to version 2.00 of the Zend license,     |
   | that is bundled with this package in the file LICENSE, and is        |
   | available through the world-wide-web at the following url:           |
   | http://www.zend.com/license/2_00.txt.                                |
   | If you did not receive a copy of the Zend license and are unable to  |
   | obtain it through the world-wide-web, please send a note to          |
   | license@zend.com so we can mail you a copy immediately.              |
   +----------------------------------------------------------------------+
   | Authors: Andi Gutmans <andi@php.net>                                 |
   |          Zeev Suraski <zeev@php.net>                                 |
   |          Dmitry Stogov <dmitry@php.net>                              |
   +----------------------------------------------------------------------+
*/

#ifndef ZEND_PORTABILITY_H
#define ZEND_PORTABILITY_H

#ifdef __cplusplus
#define BEGIN_EXTERN_C() extern "C" {
#define END_EXTERN_C() }
#else
#define BEGIN_EXTERN_C()
#define END_EXTERN_C()
#endif

/*
 * general definitions
 */

#ifdef ZEND_WIN32
# include "zend_config.w32.h"
# define ZEND_PATHS_SEPARATOR		';'
#elif defined(__riscos__)
# include <zend_config.h>
# define ZEND_PATHS_SEPARATOR		';'
#else
# include <zend_config.h>
# define ZEND_PATHS_SEPARATOR		':'
#endif

#include "../TSRM/TSRM.h"

#include <stdio.h>
#if ZEND_DEBUG && defined(NDEBUG)
# error "NDEBUG must not be defined when ZEND_DEBUG is enabled"
#endif
#include <assert.h>
#include <math.h>

#ifdef HAVE_UNIX_H
# include <unix.h>
#endif

#include <stdarg.h>
#include <stddef.h>

#ifdef HAVE_DLFCN_H
# include <dlfcn.h>
#endif

#include <limits.h>

#if defined(ZEND_WIN32) && !defined(__clang__)
#include <intrin.h>
#endif

#include "zend_range_check.h"

/* GCC x.y.z supplies __GNUC__ = x and __GNUC_MINOR__ = y */
#ifdef __GNUC__
# define ZEND_GCC_VERSION (__GNUC__ * 1000 + __GNUC_MINOR__)
#else
# define ZEND_GCC_VERSION 0
#endif

/* Compatibility with non-clang compilers */
#ifndef __has_attribute
# define __has_attribute(x) 0
#endif
#ifndef __has_builtin
# define __has_builtin(x) 0
#endif
#ifndef __has_feature
# define __has_feature(x) 0
#endif
#ifndef __has_include
# define __has_include(x) 0
#endif

#if defined(ZEND_WIN32) && !defined(__clang__)
# define ZEND_ASSUME(c)	__assume(c)
#elif defined(__clang__) && __has_builtin(__builtin_assume)
# pragma clang diagnostic ignored "-Wassume"
# define ZEND_ASSUME(c)	__builtin_assume(c)
#elif defined(PHP_HAVE_BUILTIN_UNREACHABLE) && defined(PHP_HAVE_BUILTIN_EXPECT)
# define ZEND_ASSUME(c)	do { \
		if (__builtin_expect(!(c), 0)) __builtin_unreachable(); \
	} while (0)
#else
# define ZEND_ASSUME(c)
#endif

#if ZEND_DEBUG
# define ZEND_ASSERT(c)	assert(c)
#else
# define ZEND_ASSERT(c) ZEND_ASSUME(c)
#endif

/* use C23 unreachable() from <stddef.h> if possible */
#ifdef unreachable
# define _ZEND_UNREACHABLE() unreachable()
#elif defined(PHP_HAVE_BUILTIN_UNREACHABLE)
# define _ZEND_UNREACHABLE() __builtin_unreachable()
#else
# define _ZEND_UNREACHABLE() ZEND_ASSUME(0)
#endif

#if ZEND_DEBUG
# define ZEND_UNREACHABLE() do {ZEND_ASSERT(0); _ZEND_UNREACHABLE();} while (0)
#else
# define ZEND_UNREACHABLE() _ZEND_UNREACHABLE()
#endif

/* pseudo fallthrough keyword; */
#if defined(__GNUC__) && __GNUC__ >= 7
# define ZEND_FALLTHROUGH __attribute__((__fallthrough__))
#else
# define ZEND_FALLTHROUGH ((void)0)
#endif

/* Only use this macro if you know for sure that all of the switches values
   are covered by its case statements */
#define EMPTY_SWITCH_DEFAULT_CASE() default: ZEND_UNREACHABLE(); break;

#if defined(__GNUC__) && __GNUC__ >= 4
# define ZEND_IGNORE_VALUE(x) (({ __typeof__ (x) __x = (x); (void) __x; }))
#else
# define ZEND_IGNORE_VALUE(x) ((void) (x))
#endif

#define zend_quiet_write(...) ZEND_IGNORE_VALUE(write(__VA_ARGS__))

/* all HAVE_XXX test have to be after the include of zend_config above */

#if defined(HAVE_LIBDL) && !defined(ZEND_WIN32)

# if __has_feature(address_sanitizer) && !defined(__SANITIZE_ADDRESS__)
#  define __SANITIZE_ADDRESS__
# endif

# ifndef RTLD_LAZY
#  define RTLD_LAZY 1    /* Solaris 1, FreeBSD's (2.1.7.1 and older) */
# endif

# ifndef RTLD_GLOBAL
#  define RTLD_GLOBAL 0
# endif

# ifdef PHP_USE_RTLD_NOW
#  define PHP_RTLD_MODE  RTLD_NOW
# else
#  define PHP_RTLD_MODE  RTLD_LAZY
# endif

# if defined(RTLD_GROUP) && defined(RTLD_WORLD) && defined(RTLD_PARENT)
#  define DL_LOAD(libname)			dlopen(libname, PHP_RTLD_MODE | RTLD_GLOBAL | RTLD_GROUP | RTLD_WORLD | RTLD_PARENT)
# elif defined(RTLD_DEEPBIND) && !defined(__SANITIZE_ADDRESS__) && !__has_feature(memory_sanitizer)
#  if defined(LM_ID_NEWLM)
     ZEND_API extern bool zend_dl_use_deepbind;
#    define DL_LOAD(libname)			dlopen(libname, PHP_RTLD_MODE | RTLD_GLOBAL | (zend_dl_use_deepbind ? RTLD_DEEPBIND : 0))
#  else
#    define DL_LOAD(libname)			dlopen(libname, PHP_RTLD_MODE | RTLD_GLOBAL | RTLD_DEEPBIND)
#  endif
# else
#  define DL_LOAD(libname)			dlopen(libname, PHP_RTLD_MODE | RTLD_GLOBAL)
# endif
# define DL_UNLOAD					dlclose
# if defined(DLSYM_NEEDS_UNDERSCORE)
#  define DL_FETCH_SYMBOL(h,s)		dlsym((h), "_" s)
# else
#  define DL_FETCH_SYMBOL			dlsym
# endif
# define DL_ERROR					dlerror
# define DL_HANDLE					void *
# define ZEND_EXTENSIONS_SUPPORT	1
#elif defined(ZEND_WIN32)
# define DL_LOAD(libname)			LoadLibrary(libname)
# define DL_FETCH_SYMBOL			GetProcAddress
# define DL_UNLOAD					FreeLibrary
# define DL_HANDLE					HMODULE
# define ZEND_EXTENSIONS_SUPPORT	1
#else
# define DL_HANDLE					void *
# define ZEND_EXTENSIONS_SUPPORT	0
#endif

#if defined(HAVE_ALLOCA_H) && !defined(_ALLOCA_H)
# include <alloca.h>
#endif
/* AIX requires this to be the first thing in the file.  */
#ifndef __GNUC__
# ifndef HAVE_ALLOCA_H
#  ifdef _AIX
#   pragma alloca
#  else
#   ifndef alloca /* predefined by HP cc +Olibcalls */
char *alloca();
#   endif
#  endif
# endif
#endif

#if !ZEND_DEBUG && (defined(HAVE_ALLOCA) || (defined (__GNUC__) && __GNUC__ >= 2)) && !(defined(ZTS) && defined(HPUX)) && !defined(__APPLE__)
# define ZEND_ALLOCA_MAX_SIZE (32 * 1024)
# define ALLOCA_FLAG(name) \
	bool name;
# define SET_ALLOCA_FLAG(name) \
	name = true
# define do_alloca_ex(size, limit, use_heap) \
	((use_heap = (UNEXPECTED((size) > (limit)))) ? emalloc(size) : alloca(size))
# define do_alloca(size, use_heap) \
	do_alloca_ex(size, ZEND_ALLOCA_MAX_SIZE, use_heap)
# define free_alloca(p, use_heap) \
	do { if (UNEXPECTED(use_heap)) efree(p); } while (0)
#else
# define ALLOCA_FLAG(name)
# define SET_ALLOCA_FLAG(name)
# define do_alloca(p, use_heap)		emalloc(p)
# define free_alloca(p, use_heap)	efree(p)
#endif

#if ZEND_GCC_VERSION >= 2096 || __has_attribute(__malloc__)
# define ZEND_ATTRIBUTE_MALLOC __attribute__ ((__malloc__))
#elif defined(ZEND_WIN32)
# define ZEND_ATTRIBUTE_MALLOC __declspec(allocator) __declspec(restrict)
#else
# define ZEND_ATTRIBUTE_MALLOC
#endif

#if ZEND_GCC_VERSION >= 4003 || __has_attribute(alloc_size)
# define ZEND_ATTRIBUTE_ALLOC_SIZE(X) __attribute__ ((alloc_size(X)))
# define ZEND_ATTRIBUTE_ALLOC_SIZE2(X,Y) __attribute__ ((alloc_size(X,Y)))
#else
# define ZEND_ATTRIBUTE_ALLOC_SIZE(X)
# define ZEND_ATTRIBUTE_ALLOC_SIZE2(X,Y)
#endif

#if __STDC_VERSION__ >= 202311L || (defined(__cplusplus) && __cplusplus >= 201703L)
# define ZEND_ATTRIBUTE_NODISCARD [[nodiscard]]
#elif __has_attribute(__warn_unused_result__)
# define ZEND_ATTRIBUTE_NODISCARD __attribute__((__warn_unused_result__))
#else
# define ZEND_ATTRIBUTE_NODISCARD
#endif

#if ZEND_GCC_VERSION >= 3000
# define ZEND_ATTRIBUTE_CONST __attribute__((const))
#else
# define ZEND_ATTRIBUTE_CONST
#endif

#if ZEND_GCC_VERSION >= 2007 || __has_attribute(format)
# define ZEND_ATTRIBUTE_FORMAT(type, idx, first) __attribute__ ((format(type, idx, first)))
#else
# define ZEND_ATTRIBUTE_FORMAT(type, idx, first)
#endif

#if (ZEND_GCC_VERSION >= 3001 && !defined(__INTEL_COMPILER)) || __has_attribute(format)
# define ZEND_ATTRIBUTE_PTR_FORMAT(type, idx, first) __attribute__ ((format(type, idx, first)))
#else
# define ZEND_ATTRIBUTE_PTR_FORMAT(type, idx, first)
#endif

#if ZEND_GCC_VERSION >= 3001 || __has_attribute(deprecated)
# define ZEND_ATTRIBUTE_DEPRECATED  __attribute__((deprecated))
#elif defined(ZEND_WIN32)
# define ZEND_ATTRIBUTE_DEPRECATED  __declspec(deprecated)
#else
# define ZEND_ATTRIBUTE_DEPRECATED
#endif

#if ZEND_GCC_VERSION >= 4003 || __has_attribute(unused)
# define ZEND_ATTRIBUTE_UNUSED __attribute__((unused))
#else
# define ZEND_ATTRIBUTE_UNUSED
#endif

#if ZEND_GCC_VERSION >= 3003 || __has_attribute(nonnull)
/* All pointer arguments must be non-null */
# define ZEND_ATTRIBUTE_NONNULL  __attribute__((nonnull))
/* Specified arguments must be non-null (1-based) */
# define ZEND_ATTRIBUTE_NONNULL_ARGS(...)  __attribute__((nonnull(__VA_ARGS__)))
#else
# define ZEND_ATTRIBUTE_NONNULL
# define ZEND_ATTRIBUTE_NONNULL_ARGS(...)
#endif

#if defined(__GNUC__) && ZEND_GCC_VERSION >= 4003
# define ZEND_COLD __attribute__((cold))
# ifdef __OPTIMIZE__
#  define ZEND_OPT_SIZE  __attribute__((optimize("Os")))
#  define ZEND_OPT_SPEED __attribute__((optimize("Ofast")))
# else
#  define ZEND_OPT_SIZE
#  define ZEND_OPT_SPEED
# endif
#else
# define ZEND_COLD
# define ZEND_OPT_SIZE
# define ZEND_OPT_SPEED
#endif

#if defined(__GNUC__) && ZEND_GCC_VERSION >= 5000
# define ZEND_ATTRIBUTE_UNUSED_LABEL __attribute__((unused));
# define ZEND_ATTRIBUTE_COLD_LABEL __attribute__((cold));
#else
# define ZEND_ATTRIBUTE_UNUSED_LABEL
# define ZEND_ATTRIBUTE_COLD_LABEL
#endif

#if defined(__GNUC__) && ZEND_GCC_VERSION >= 3004 && defined(__i386__)
# define ZEND_FASTCALL __attribute__((fastcall))
#elif defined(_MSC_VER)
# define ZEND_FASTCALL __vectorcall
#else
# define ZEND_FASTCALL
#endif

#ifdef HAVE_PRESERVE_NONE
# define ZEND_PRESERVE_NONE __attribute__((preserve_none))
#endif


#if !defined(__apple_build_version__) || (defined(__apple_build_version__) && __apple_build_version__ >= 17000404)
# if __has_attribute(musttail)
#  define HAVE_MUSTTAIL
#  define ZEND_MUSTTAIL __attribute__((musttail))
# endif
#endif

#if (defined(__GNUC__) && __GNUC__ >= 3 && !defined(__INTEL_COMPILER) && !defined(__APPLE__) && !defined(__hpux) && !defined(_AIX) && !defined(__osf__)) || __has_attribute(noreturn)
# define HAVE_NORETURN
# define ZEND_NORETURN __attribute__((noreturn))
#elif defined(ZEND_WIN32)
# define HAVE_NORETURN
# define ZEND_NORETURN __declspec(noreturn)
#else
# define ZEND_NORETURN
#endif

#if __has_attribute(force_align_arg_pointer)
# define ZEND_STACK_ALIGNED __attribute__((force_align_arg_pointer))
#else
# define ZEND_STACK_ALIGNED
#endif

#if (defined(__GNUC__) && __GNUC__ >= 3 && !defined(__INTEL_COMPILER) && !defined(__APPLE__) && !defined(__hpux) && !defined(_AIX) && !defined(__osf__))
# define HAVE_NORETURN_ALIAS
# define HAVE_ATTRIBUTE_WEAK
#endif

#if ZEND_GCC_VERSION >= 3001 || __has_builtin(__builtin_constant_p)
# define HAVE_BUILTIN_CONSTANT_P
#endif

#if __has_attribute(counted_by)
#define ZEND_ELEMENT_COUNT(m) __attribute__((counted_by(m)))
#else
#define ZEND_ELEMENT_COUNT(m)
#endif

#ifdef HAVE_BUILTIN_CONSTANT_P
# define ZEND_CONST_COND(_condition, _default) \
	(__builtin_constant_p(_condition) ? (_condition) : (_default))
#else
# define ZEND_CONST_COND(_condition, _default) \
	(_default)
#endif

#if ZEND_DEBUG || defined(ZEND_WIN32_NEVER_INLINE)
# define zend_always_inline inline
# define zend_never_inline
#else
# if defined(__GNUC__)
#  if __GNUC__ >= 3
#   define zend_always_inline inline __attribute__((always_inline))
#   define zend_never_inline __attribute__((noinline))
#  else
#   define zend_always_inline inline
#   define zend_never_inline
#  endif
# elif defined(_MSC_VER)
#  define zend_always_inline __forceinline
#  define zend_never_inline __declspec(noinline)
# else
#  if __has_attribute(always_inline)
#   define zend_always_inline inline __attribute__((always_inline))
#  else
#   define zend_always_inline inline
#  endif
#  if __has_attribute(noinline)
#   define zend_never_inline __attribute__((noinline))
#  else
#   define zend_never_inline
#  endif
# endif
#endif /* ZEND_DEBUG */

#ifdef PHP_HAVE_BUILTIN_EXPECT
# define EXPECTED(condition)   __builtin_expect(!!(condition), 1)
# define UNEXPECTED(condition) __builtin_expect(!!(condition), 0)
#else
# define EXPECTED(condition)   (condition)
# define UNEXPECTED(condition) (condition)
#endif

#ifndef XtOffsetOf
# define XtOffsetOf(s_type, field) offsetof(s_type, field)
#endif

#ifndef ZEND_WIN32
# define SETJMP(a) sigsetjmp(a, 0)
# define LONGJMP(a,b) siglongjmp(a, b)
# define JMP_BUF sigjmp_buf
#else
# define SETJMP(a) setjmp(a)
# define LONGJMP(a,b) longjmp(a, b)
# define JMP_BUF jmp_buf
#endif

#if ZEND_DEBUG
# define ZEND_FILE_LINE_D				const char *__zend_filename, const uint32_t __zend_lineno
# define ZEND_FILE_LINE_DC				, ZEND_FILE_LINE_D
# define ZEND_FILE_LINE_ORIG_D			const char *__zend_orig_filename, const uint32_t __zend_orig_lineno
# define ZEND_FILE_LINE_ORIG_DC			, ZEND_FILE_LINE_ORIG_D
# define ZEND_FILE_LINE_RELAY_C			__zend_filename, __zend_lineno
# define ZEND_FILE_LINE_RELAY_CC		, ZEND_FILE_LINE_RELAY_C
# define ZEND_FILE_LINE_C				__FILE__, __LINE__
# define ZEND_FILE_LINE_CC				, ZEND_FILE_LINE_C
# define ZEND_FILE_LINE_EMPTY_C			NULL, 0
# define ZEND_FILE_LINE_EMPTY_CC		, ZEND_FILE_LINE_EMPTY_C
# define ZEND_FILE_LINE_ORIG_RELAY_C	__zend_orig_filename, __zend_orig_lineno
# define ZEND_FILE_LINE_ORIG_RELAY_CC	, ZEND_FILE_LINE_ORIG_RELAY_C
#else
# define ZEND_FILE_LINE_D				void
# define ZEND_FILE_LINE_DC
# define ZEND_FILE_LINE_ORIG_D			void
# define ZEND_FILE_LINE_ORIG_DC
# define ZEND_FILE_LINE_RELAY_C
# define ZEND_FILE_LINE_RELAY_CC
# define ZEND_FILE_LINE_C
# define ZEND_FILE_LINE_CC
# define ZEND_FILE_LINE_EMPTY_C
# define ZEND_FILE_LINE_EMPTY_CC
# define ZEND_FILE_LINE_ORIG_RELAY_C
# define ZEND_FILE_LINE_ORIG_RELAY_CC
#endif	/* ZEND_DEBUG */

#if ZEND_DEBUG
# define Z_DBG(expr)		(expr)
#else
# define Z_DBG(expr)
#endif

#ifdef ZTS
# define ZTS_V 1
#else
# define ZTS_V 0
#endif

#define MAX_LENGTH_OF_DOUBLE 32

#undef MIN
#undef MAX
#define MAX(a, b)  (((a)>(b))?(a):(b))
#define MIN(a, b)  (((a)<(b))?(a):(b))

#define ZEND_BIT_TEST(bits, bit) \
	(((bits)[(bit) / (sizeof((bits)[0])*8)] >> ((bit) & (sizeof((bits)[0])*8-1))) & 1)

#define ZEND_INFINITY INFINITY

#define ZEND_NAN NAN

#if defined(__cplusplus) && __cplusplus >= 201103L
extern "C++" {
# include <cmath>
}
# define zend_isnan std::isnan
# define zend_isinf std::isinf
# define zend_finite std::isfinite
#else
# include <math.h>
# define zend_isnan(a) isnan(a)
# define zend_isinf(a) isinf(a)
# define zend_finite(a) isfinite(a)
#endif

#define ZEND_STRL(str)		(str), (sizeof(str)-1)
#define ZEND_STRS(str)		(str), (sizeof(str))
#define ZEND_NORMALIZE_BOOL(n)			\
	((n) ? (((n)<0) ? -1 : 1) : 0)
#define ZEND_TRUTH(x)		((x) ? 1 : 0)
#define ZEND_LOG_XOR(a, b)		(ZEND_TRUTH(a) ^ ZEND_TRUTH(b))

/**
 * Do a three-way comparison of two integers and returns -1, 0 or 1
 * depending on whether #a is smaller, equal or larger than #b.
 */
#define ZEND_THREEWAY_COMPARE(a, b) ((a) == (b) ? 0 : ((a) < (b) ? -1 : 1))

#define ZEND_MAX_RESERVED_RESOURCES	6

/* excpt.h on Digital Unix 4.0 defines function_table */
#undef function_table

#ifdef ZEND_WIN32
#define ZEND_SECURE_ZERO(var, size) RtlSecureZeroMemory((var), (size))
#elif defined(HAVE_MEMSET_EXPLICIT)
#define ZEND_SECURE_ZERO(var, size) memset_explicit((var), 0, (size))
#else
#define ZEND_SECURE_ZERO(var, size) explicit_bzero((var), (size))
#endif

/* This check should only be used on network socket, not file descriptors */
#ifdef ZEND_WIN32
#define ZEND_VALID_SOCKET(sock) (INVALID_SOCKET != (sock))
#else
#define ZEND_VALID_SOCKET(sock) ((sock) >= 0)
#endif

/* Intrinsics macros start. */

/* Memory sanitizer is incompatible with ifunc resolvers. Even if the resolver
 * is marked as no_sanitize("memory") it will still be instrumented and crash. */
#if __has_feature(memory_sanitizer) || __has_feature(thread_sanitizer) || \
	__has_feature(dataflow_sanitizer)
# undef HAVE_FUNC_ATTRIBUTE_IFUNC
#endif

#if __has_feature(memory_sanitizer)
# include <sanitizer/msan_interface.h>
# define MSAN_UNPOISON(value) __msan_unpoison(&(value), sizeof(value))
#else
# define MSAN_UNPOISON(value)
#endif

/* Only use ifunc resolvers if we have __builtin_cpu_supports() and __builtin_cpu_init(),
 * otherwise the use of zend_cpu_supports() may not be safe inside ifunc resolvers. */
#if defined(HAVE_FUNC_ATTRIBUTE_IFUNC) && defined(HAVE_FUNC_ATTRIBUTE_TARGET) && \
	defined(PHP_HAVE_BUILTIN_CPU_SUPPORTS) && defined(PHP_HAVE_BUILTIN_CPU_INIT)
# define ZEND_INTRIN_HAVE_IFUNC_TARGET 1
#endif

#if (defined(__i386__) || defined(__x86_64__))
# if defined(HAVE_TMMINTRIN_H)
#  define PHP_HAVE_SSSE3
# endif

# if defined(HAVE_NMMINTRIN_H)
#  define PHP_HAVE_SSE4_2
# endif

# if defined(HAVE_WMMINTRIN_H)
#  define PHP_HAVE_PCLMUL
# endif

/*
 * AVX2 support was added in gcc 4.7, but AVX2 intrinsics don't work in
 * __attribute__((target("avx2"))) functions until gcc 4.9.
 */
# if defined(HAVE_IMMINTRIN_H) && \
  (defined(__llvm__) || defined(__clang__) || (defined(__GNUC__) && ZEND_GCC_VERSION >= 4009))
#  define PHP_HAVE_AVX2
# endif
#endif

#ifdef __SSSE3__
/* Instructions compiled directly. */
# define ZEND_INTRIN_SSSE3_NATIVE 1
#elif (defined(HAVE_FUNC_ATTRIBUTE_TARGET) && defined(PHP_HAVE_SSSE3)) || (defined(ZEND_WIN32) && (!defined(_M_ARM64)))
/* Function resolved by ifunc or MINIT. */
# define ZEND_INTRIN_SSSE3_RESOLVER 1
#endif

/* Do not use for conditional declaration of API functions! */
#if defined(ZEND_INTRIN_SSSE3_RESOLVER) && defined(ZEND_INTRIN_HAVE_IFUNC_TARGET)
# define ZEND_INTRIN_SSSE3_FUNC_PROTO 1
#elif defined(ZEND_INTRIN_SSSE3_RESOLVER)
# define ZEND_INTRIN_SSSE3_FUNC_PTR 1
#endif

#ifdef ZEND_INTRIN_SSSE3_RESOLVER
# ifdef HAVE_FUNC_ATTRIBUTE_TARGET
#  define ZEND_INTRIN_SSSE3_FUNC_DECL(func) ZEND_API func __attribute__((target("ssse3")))
# else
#  define ZEND_INTRIN_SSSE3_FUNC_DECL(func) func
# endif
#else
# define ZEND_INTRIN_SSSE3_FUNC_DECL(func)
#endif

#ifdef __SSE4_2__
/* Instructions compiled directly. */
# define ZEND_INTRIN_SSE4_2_NATIVE 1
#elif (defined(HAVE_FUNC_ATTRIBUTE_TARGET) && defined(PHP_HAVE_SSE4_2)) || (defined(ZEND_WIN32) && (!defined(_M_ARM64)))
/* Function resolved by ifunc or MINIT. */
# define ZEND_INTRIN_SSE4_2_RESOLVER 1
#endif

/* Do not use for conditional declaration of API functions! */
#if defined(ZEND_INTRIN_SSE4_2_RESOLVER) && defined(ZEND_INTRIN_HAVE_IFUNC_TARGET)
# define ZEND_INTRIN_SSE4_2_FUNC_PROTO 1
#elif defined(ZEND_INTRIN_SSE4_2_RESOLVER)
# define ZEND_INTRIN_SSE4_2_FUNC_PTR 1
#endif

#ifdef ZEND_INTRIN_SSE4_2_RESOLVER
# ifdef HAVE_FUNC_ATTRIBUTE_TARGET
#  define ZEND_INTRIN_SSE4_2_FUNC_DECL(func) ZEND_API func __attribute__((target("sse4.2")))
# else
#  define ZEND_INTRIN_SSE4_2_FUNC_DECL(func) func
# endif
#else
# define ZEND_INTRIN_SSE4_2_FUNC_DECL(func)
#endif

#ifdef __PCLMUL__
/* Instructions compiled directly. */
# define ZEND_INTRIN_PCLMUL_NATIVE 1
#elif (defined(HAVE_FUNC_ATTRIBUTE_TARGET) && defined(PHP_HAVE_PCLMUL)) || (defined(ZEND_WIN32) && (!defined(_M_ARM64)))
/* Function resolved by ifunc or MINIT. */
# define ZEND_INTRIN_PCLMUL_RESOLVER 1
#endif

/* Do not use for conditional declaration of API functions! */
#if defined(ZEND_INTRIN_PCLMUL_RESOLVER) && defined(ZEND_INTRIN_HAVE_IFUNC_TARGET) && (!defined(__GNUC__) || (ZEND_GCC_VERSION >= 9000))
/* __builtin_cpu_supports has pclmul from gcc9 */
# define ZEND_INTRIN_PCLMUL_FUNC_PROTO 1
#elif defined(ZEND_INTRIN_PCLMUL_RESOLVER)
# define ZEND_INTRIN_PCLMUL_FUNC_PTR 1
#endif

#ifdef ZEND_INTRIN_PCLMUL_RESOLVER
# ifdef HAVE_FUNC_ATTRIBUTE_TARGET
#  define ZEND_INTRIN_PCLMUL_FUNC_DECL(func) ZEND_API func __attribute__((target("pclmul")))
# else
#  define ZEND_INTRIN_PCLMUL_FUNC_DECL(func) func
# endif
#else
# define ZEND_INTRIN_PCLMUL_FUNC_DECL(func)
#endif

#if defined(ZEND_INTRIN_SSE4_2_NATIVE) && defined(ZEND_INTRIN_PCLMUL_NATIVE)
/* Instructions compiled directly. */
# define ZEND_INTRIN_SSE4_2_PCLMUL_NATIVE 1
#elif (defined(HAVE_FUNC_ATTRIBUTE_TARGET) && defined(PHP_HAVE_SSE4_2) && defined(PHP_HAVE_PCLMUL)) || (defined(ZEND_WIN32) && (!defined(_M_ARM64)))
/* Function resolved by ifunc or MINIT. */
# define ZEND_INTRIN_SSE4_2_PCLMUL_RESOLVER 1
#endif

/* Do not use for conditional declaration of API functions! */
#if defined(ZEND_INTRIN_SSE4_2_PCLMUL_RESOLVER) && defined(ZEND_INTRIN_HAVE_IFUNC_TARGET) && (!defined(__GNUC__) || (ZEND_GCC_VERSION >= 9000))
/* __builtin_cpu_supports has pclmul from gcc9 */
# define ZEND_INTRIN_SSE4_2_PCLMUL_FUNC_PROTO 1
#elif defined(ZEND_INTRIN_SSE4_2_PCLMUL_RESOLVER)
# define ZEND_INTRIN_SSE4_2_PCLMUL_FUNC_PTR 1
#endif

#ifdef ZEND_INTRIN_SSE4_2_PCLMUL_RESOLVER
# ifdef HAVE_FUNC_ATTRIBUTE_TARGET
#  define ZEND_INTRIN_SSE4_2_PCLMUL_FUNC_DECL(func) ZEND_API func __attribute__((target("sse4.2,pclmul")))
# else
#  define ZEND_INTRIN_SSE4_2_PCLMUL_FUNC_DECL(func) func
# endif
#else
# define ZEND_INTRIN_SSE4_2_PCLMUL_FUNC_DECL(func)
#endif

#ifdef __AVX2__
# define ZEND_INTRIN_AVX2_NATIVE 1
#elif (defined(HAVE_FUNC_ATTRIBUTE_TARGET) && defined(PHP_HAVE_AVX2)) || (defined(ZEND_WIN32) && (!defined(_M_ARM64)))
# define ZEND_INTRIN_AVX2_RESOLVER 1
#endif

/* Do not use for conditional declaration of API functions! */
#if defined(ZEND_INTRIN_AVX2_RESOLVER) && defined(ZEND_INTRIN_HAVE_IFUNC_TARGET)
# define ZEND_INTRIN_AVX2_FUNC_PROTO 1
#elif defined(ZEND_INTRIN_AVX2_RESOLVER)
# define ZEND_INTRIN_AVX2_FUNC_PTR 1
#endif

#ifdef ZEND_INTRIN_AVX2_RESOLVER
# ifdef HAVE_FUNC_ATTRIBUTE_TARGET
#  define ZEND_INTRIN_AVX2_FUNC_DECL(func) ZEND_API func __attribute__((target("avx2")))
# else
#  define ZEND_INTRIN_AVX2_FUNC_DECL(func) func
# endif
#else
# define ZEND_INTRIN_AVX2_FUNC_DECL(func)
#endif

#if defined(PHP_HAVE_AVX512_SUPPORTS) && defined(HAVE_FUNC_ATTRIBUTE_TARGET) || defined(ZEND_WIN32)
#define ZEND_INTRIN_AVX512_RESOLVER 1
#endif

#if defined(ZEND_INTRIN_AVX512_RESOLVER) && defined(ZEND_INTRIN_HAVE_IFUNC_TARGET)
# define ZEND_INTRIN_AVX512_FUNC_PROTO 1
#elif defined(ZEND_INTRIN_AVX512_RESOLVER)
# define ZEND_INTRIN_AVX512_FUNC_PTR 1
#endif

#ifdef ZEND_INTRIN_AVX512_RESOLVER
# ifdef HAVE_FUNC_ATTRIBUTE_TARGET
#  define ZEND_INTRIN_AVX512_FUNC_DECL(func) ZEND_API func __attribute__((target("avx512f,avx512cd,avx512vl,avx512dq,avx512bw")))
# else
#  define ZEND_INTRIN_AVX512_FUNC_DECL(func) func
# endif
#else
# define ZEND_INTRIN_AVX512_FUNC_DECL(func)
#endif

#if defined(PHP_HAVE_AVX512_VBMI_SUPPORTS) && defined(HAVE_FUNC_ATTRIBUTE_TARGET)
#define ZEND_INTRIN_AVX512_VBMI_RESOLVER 1
#endif

#if defined(ZEND_INTRIN_AVX512_VBMI_RESOLVER) && defined(ZEND_INTRIN_HAVE_IFUNC_TARGET)
# define ZEND_INTRIN_AVX512_VBMI_FUNC_PROTO 1
#elif defined(ZEND_INTRIN_AVX512_VBMI_RESOLVER)
# define ZEND_INTRIN_AVX512_VBMI_FUNC_PTR 1
#endif

#ifdef ZEND_INTRIN_AVX512_VBMI_RESOLVER
# ifdef HAVE_FUNC_ATTRIBUTE_TARGET
#  define ZEND_INTRIN_AVX512_VBMI_FUNC_DECL(func) ZEND_API func __attribute__((target("avx512f,avx512cd,avx512vl,avx512dq,avx512bw,avx512vbmi")))
# else
#  define ZEND_INTRIN_AVX512_VBMI_FUNC_DECL(func) func
# endif
#else
# define ZEND_INTRIN_AVX512_VBMI_FUNC_DECL(func)
#endif

/* Intrinsics macros end. */

#ifdef ZEND_WIN32
# define ZEND_SET_ALIGNED(alignment, decl) __declspec(align(alignment)) decl
#elif defined(HAVE_ATTRIBUTE_ALIGNED)
# define ZEND_SET_ALIGNED(alignment, decl) decl __attribute__ ((__aligned__ (alignment)))
#else
# define ZEND_SET_ALIGNED(alignment, decl) decl
#endif

#if __has_attribute(section)
# define HAVE_ATTRIBUTE_SECTION
#endif

#define ZEND_SLIDE_TO_ALIGNED(alignment, ptr) (((uintptr_t)(ptr) + ((alignment)-1)) & ~((alignment)-1))
#define ZEND_SLIDE_TO_ALIGNED16(ptr) ZEND_SLIDE_TO_ALIGNED(Z_UL(16), ptr)

#ifdef ZEND_WIN32
# define _ZEND_EXPAND_VA(a) a
# define ZEND_EXPAND_VA(code) _ZEND_EXPAND_VA(code)
#else
# define ZEND_EXPAND_VA(code) code
#endif

/* On CPU with few registers, it's cheaper to reload value then use spill slot */
#if defined(__i386__) || (defined(_WIN32) && !defined(_WIN64))
# define ZEND_PREFER_RELOAD
#endif

#if defined(ZEND_WIN32) && defined(_DEBUG)
# define ZEND_IGNORE_LEAKS_BEGIN() _CrtSetDbgFlag(_CrtSetDbgFlag(_CRTDBG_REPORT_FLAG) & ~_CRTDBG_ALLOC_MEM_DF)
# define ZEND_IGNORE_LEAKS_END() _CrtSetDbgFlag(_CrtSetDbgFlag(_CRTDBG_REPORT_FLAG) | _CRTDBG_ALLOC_MEM_DF)
#else
# define ZEND_IGNORE_LEAKS_BEGIN()
# define ZEND_IGNORE_LEAKS_END()
#endif

/* MSVC yields C4090 when a (const T **) is passed to a (void *); ZEND_VOIDP works around that */
#ifdef _MSC_VER
# define ZEND_VOIDP(ptr) ((void *) ptr)
#else
# define ZEND_VOIDP(ptr) (ptr)
#endif

#if __has_attribute(__indirect_return__)
# define ZEND_INDIRECT_RETURN __attribute__((__indirect_return__))
#else
# define ZEND_INDIRECT_RETURN
#endif

#if __has_attribute(nonstring) && defined(__GNUC__) && ((!defined(__clang__) && __GNUC__ >= 15) || (defined(__clang_major__) && __clang_major__ >= 20))
# define ZEND_NONSTRING __attribute__((nonstring))
#else
# define ZEND_NONSTRING
#endif

#define __ZEND_DO_PRAGMA(x) _Pragma(#x)
#define _ZEND_DO_PRAGMA(x) __ZEND_DO_PRAGMA(x)
#if defined(__clang__)
# define ZEND_DIAGNOSTIC_IGNORED_START(warning) \
	_Pragma("clang diagnostic push") \
	_ZEND_DO_PRAGMA(clang diagnostic ignored warning)
# define ZEND_DIAGNOSTIC_IGNORED_END \
	_Pragma("clang diagnostic pop")
#elif defined(__GNUC__)
# define ZEND_DIAGNOSTIC_IGNORED_START(warning) \
	_Pragma("GCC diagnostic push") \
	_ZEND_DO_PRAGMA(GCC diagnostic ignored warning)
# define ZEND_DIAGNOSTIC_IGNORED_END \
	_Pragma("GCC diagnostic pop")
#else
# define ZEND_DIAGNOSTIC_IGNORED_START(warning)
# define ZEND_DIAGNOSTIC_IGNORED_END
#endif

/** @deprecated */
#define ZEND_CGG_DIAGNOSTIC_IGNORED_START ZEND_DIAGNOSTIC_IGNORED_START
/** @deprecated */
#define ZEND_CGG_DIAGNOSTIC_IGNORED_END ZEND_DIAGNOSTIC_IGNORED_END

#if defined(__cplusplus)
# define ZEND_STATIC_ASSERT(c, m) static_assert((c), m)
#elif defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 201112L) /* C11 */
# define ZEND_STATIC_ASSERT(c, m) _Static_assert((c), m)
#else
# define ZEND_STATIC_ASSERT(c, m)
#endif

#if ((defined(__STDC_VERSION__) && __STDC_VERSION__ >= 201112L) /* C11 */ \
  || (defined(__cplusplus) && __cplusplus >= 201103L) /* C++11 */) && !defined(ZEND_WIN32)
typedef max_align_t zend_max_align_t;
#else
typedef union {
	char c;
	short s;
	int i;
	long l;
#if SIZEOF_LONG_LONG
	long long ll;
#endif
	float f;
	double d;
	long double ld;
	void *p;
	void (*fun)(void);
} zend_max_align_t;
#endif

/* Bytes swap */
#ifdef _MSC_VER
#  include <stdlib.h>
#  define ZEND_BYTES_SWAP32(u) _byteswap_ulong(u)
#  define ZEND_BYTES_SWAP64(u) _byteswap_uint64(u)
#elif defined(HAVE_BYTESWAP_H)
#  include <byteswap.h>
#  define ZEND_BYTES_SWAP32(u) bswap_32(u)
#  define ZEND_BYTES_SWAP64(u) bswap_64(u)
#elif defined(HAVE_SYS_BSWAP_H)
#  include <sys/bswap.h>
#  define ZEND_BYTES_SWAP32(u) bswap32(u)
#  define ZEND_BYTES_SWAP64(u) bswap64(u)
#elif defined(__GNUC__)
#  define ZEND_BYTES_SWAP32(u) __builtin_bswap32(u)
#  define ZEND_BYTES_SWAP64(u) __builtin_bswap64(u)
#elif defined(__has_builtin)
#  if __has_builtin(__builtin_bswap32)
#    define ZEND_BYTES_SWAP32(u) __builtin_bswap32(u)
#  endif
#  if __has_builtin(__builtin_bswap64)
#    define ZEND_BYTES_SWAP64(u) __builtin_bswap64(u)
#  endif
#endif

#ifndef ZEND_BYTES_SWAP32
static zend_always_inline uint32_t ZEND_BYTES_SWAP32(uint32_t u)
{
  return (((u & 0xff000000) >> 24)
          | ((u & 0x00ff0000) >>  8)
          | ((u & 0x0000ff00) <<  8)
          | ((u & 0x000000ff) << 24));
}
#endif
#ifndef ZEND_BYTES_SWAP64
static zend_always_inline uint64_t ZEND_BYTES_SWAP64(uint64_t u)
{
   return (((u & 0xff00000000000000ULL) >> 56)
          | ((u & 0x00ff000000000000ULL) >> 40)
          | ((u & 0x0000ff0000000000ULL) >> 24)
          | ((u & 0x000000ff00000000ULL) >>  8)
          | ((u & 0x00000000ff000000ULL) <<  8)
          | ((u & 0x0000000000ff0000ULL) << 24)
          | ((u & 0x000000000000ff00ULL) << 40)
          | ((u & 0x00000000000000ffULL) << 56));
}
#endif

#ifdef ZEND_WIN32
/* Whether it's allowed to reattach to a shm segment from different processes on
 * this platform. This prevents pointing to internal structures from shm due to
 * ASLR. Currently only possible on Windows. */
# define ZEND_OPCACHE_SHM_REATTACHMENT 1
#endif

#endif /* ZEND_PORTABILITY_H */
Zend/Optimizer/zend_optimizer.h000064400000012000151730543100012631 0ustar00/*
   +----------------------------------------------------------------------+
   | Zend OPcache                                                         |
   +----------------------------------------------------------------------+
   | Copyright (c) The PHP Group                                          |
   +----------------------------------------------------------------------+
   | This source file is subject to version 3.01 of the PHP license,      |
   | that is bundled with this package in the file LICENSE, and is        |
   | available through the world-wide-web at the following url:           |
   | https://www.php.net/license/3_01.txt                                 |
   | If you did not receive a copy of the PHP license and are unable to   |
   | obtain it through the world-wide-web, please send a note to          |
   | license@php.net so we can mail you a copy immediately.               |
   +----------------------------------------------------------------------+
   | Authors: Andi Gutmans <andi@php.net>                                 |
   |          Zeev Suraski <zeev@php.net>                                 |
   |          Stanislav Malyshev <stas@zend.com>                          |
   |          Dmitry Stogov <dmitry@php.net>                              |
   +----------------------------------------------------------------------+
*/

#ifndef ZEND_OPTIMIZER_H
#define ZEND_OPTIMIZER_H

#include "zend.h"
#include "zend_compile.h"

#define ZEND_OPTIMIZER_PASS_1		(1<<0)   /* Simple local optimizations   */
#define ZEND_OPTIMIZER_PASS_2		(1<<1)   /*                              */
#define ZEND_OPTIMIZER_PASS_3		(1<<2)   /* Jump optimization            */
#define ZEND_OPTIMIZER_PASS_4		(1<<3)   /* INIT_FCALL_BY_NAME -> DO_FCALL */
#define ZEND_OPTIMIZER_PASS_5		(1<<4)   /* CFG based optimization       */
#define ZEND_OPTIMIZER_PASS_6		(1<<5)   /* DFA based optimization       */
#define ZEND_OPTIMIZER_PASS_7		(1<<6)   /* CALL GRAPH optimization      */
#define ZEND_OPTIMIZER_PASS_8		(1<<7)   /* SCCP (constant propagation)  */
#define ZEND_OPTIMIZER_PASS_9		(1<<8)   /* TMP VAR usage                */
#define ZEND_OPTIMIZER_PASS_10		(1<<9)   /* NOP removal                 */
#define ZEND_OPTIMIZER_PASS_11		(1<<10)  /* Merge equal constants       */
#define ZEND_OPTIMIZER_PASS_12		(1<<11)  /* Adjust used stack           */
#define ZEND_OPTIMIZER_PASS_13		(1<<12)  /* Remove unused variables     */
#define ZEND_OPTIMIZER_PASS_14		(1<<13)  /* DCE (dead code elimination) */
#define ZEND_OPTIMIZER_PASS_15		(1<<14)  /* (unsafe) Collect constants */
#define ZEND_OPTIMIZER_PASS_16		(1<<15)  /* Inline functions */

#define ZEND_OPTIMIZER_IGNORE_OVERLOADING	(1<<16)  /* (unsafe) Ignore possibility of operator overloading */

#define ZEND_OPTIMIZER_NARROW_TO_DOUBLE		(1<<17)  /* try to narrow long constant assignments to double */

#define ZEND_OPTIMIZER_ALL_PASSES	0x7FFFFFFF

#define DEFAULT_OPTIMIZATION_LEVEL  "0x7FFEBFFF"


#define ZEND_DUMP_AFTER_PASS_1		ZEND_OPTIMIZER_PASS_1
#define ZEND_DUMP_AFTER_PASS_2		ZEND_OPTIMIZER_PASS_2
#define ZEND_DUMP_AFTER_PASS_3		ZEND_OPTIMIZER_PASS_3
#define ZEND_DUMP_AFTER_PASS_4		ZEND_OPTIMIZER_PASS_4
#define ZEND_DUMP_AFTER_PASS_5		ZEND_OPTIMIZER_PASS_5
#define ZEND_DUMP_AFTER_PASS_6		ZEND_OPTIMIZER_PASS_6
#define ZEND_DUMP_AFTER_PASS_7		ZEND_OPTIMIZER_PASS_7
#define ZEND_DUMP_AFTER_PASS_8		ZEND_OPTIMIZER_PASS_8
#define ZEND_DUMP_AFTER_PASS_9		ZEND_OPTIMIZER_PASS_9
#define ZEND_DUMP_AFTER_PASS_10		ZEND_OPTIMIZER_PASS_10
#define ZEND_DUMP_AFTER_PASS_11		ZEND_OPTIMIZER_PASS_11
#define ZEND_DUMP_AFTER_PASS_12		ZEND_OPTIMIZER_PASS_12
#define ZEND_DUMP_AFTER_PASS_13		ZEND_OPTIMIZER_PASS_13
#define ZEND_DUMP_AFTER_PASS_14		ZEND_OPTIMIZER_PASS_14

#define ZEND_DUMP_BEFORE_OPTIMIZER  (1<<16)
#define ZEND_DUMP_AFTER_OPTIMIZER   (1<<17)

#define ZEND_DUMP_BEFORE_BLOCK_PASS (1<<18)
#define ZEND_DUMP_AFTER_BLOCK_PASS  (1<<19)
#define ZEND_DUMP_BLOCK_PASS_VARS   (1<<20)

#define ZEND_DUMP_BEFORE_DFA_PASS   (1<<21)
#define ZEND_DUMP_AFTER_DFA_PASS    (1<<22)
#define ZEND_DUMP_DFA_CFG           (1<<23)
#define ZEND_DUMP_DFA_DOMINATORS    (1<<24)
#define ZEND_DUMP_DFA_LIVENESS      (1<<25)
#define ZEND_DUMP_DFA_PHI           (1<<26)
#define ZEND_DUMP_DFA_SSA           (1<<27)
#define ZEND_DUMP_DFA_SSA_VARS      (1<<28)
#define ZEND_DUMP_SCCP              (1<<29)

typedef struct _zend_script {
	zend_string   *filename;
	zend_op_array  main_op_array;
	HashTable      function_table;
	HashTable      class_table;
} zend_script;

typedef void (*zend_optimizer_pass_t)(zend_script *, void *context);

BEGIN_EXTERN_C()
ZEND_API void zend_optimize_script(zend_script *script, zend_long optimization_level, zend_long debug_level);
ZEND_API int zend_optimizer_register_pass(zend_optimizer_pass_t pass);
ZEND_API void zend_optimizer_unregister_pass(int idx);
zend_result zend_optimizer_startup(void);
zend_result zend_optimizer_shutdown(void);

typedef void (*zend_op_array_func_t)(zend_op_array *, void *context);
void zend_foreach_op_array(zend_script *script, zend_op_array_func_t func, void *context);

END_EXTERN_C()

#endif
Zend/Optimizer/zend_ssa.h000064400000027364151730543100011420 0ustar00/*
   +----------------------------------------------------------------------+
   | Zend Engine, SSA - Static Single Assignment Form                     |
   +----------------------------------------------------------------------+
   | Copyright (c) The PHP Group                                          |
   +----------------------------------------------------------------------+
   | This source file is subject to version 3.01 of the PHP license,      |
   | that is bundled with this package in the file LICENSE, and is        |
   | available through the world-wide-web at the following url:           |
   | https://www.php.net/license/3_01.txt                                 |
   | If you did not receive a copy of the PHP license and are unable to   |
   | obtain it through the world-wide-web, please send a note to          |
   | license@php.net so we can mail you a copy immediately.               |
   +----------------------------------------------------------------------+
   | Authors: Dmitry Stogov <dmitry@php.net>                              |
   +----------------------------------------------------------------------+
*/

#ifndef ZEND_SSA_H
#define ZEND_SSA_H

#include "zend_optimizer.h"
#include "zend_cfg.h"

typedef struct _zend_ssa_range {
	zend_long              min;
	zend_long              max;
	bool              underflow;
	bool              overflow;
} zend_ssa_range;

typedef enum _zend_ssa_negative_lat {
	NEG_NONE      = 0,
	NEG_INIT      = 1,
	NEG_INVARIANT = 2,
	NEG_USE_LT    = 3,
	NEG_USE_GT    = 4,
	NEG_UNKNOWN   = 5
} zend_ssa_negative_lat;

/* Special kind of SSA Phi function used in eSSA */
typedef struct _zend_ssa_range_constraint {
	zend_ssa_range         range;       /* simple range constraint */
	int                    min_var;
	int                    max_var;
	int                    min_ssa_var; /* ((min_var>0) ? MIN(ssa_var) : 0) + range.min */
	int                    max_ssa_var; /* ((max_var>0) ? MAX(ssa_var) : 0) + range.max */
	zend_ssa_negative_lat  negative;
} zend_ssa_range_constraint;

typedef struct _zend_ssa_type_constraint {
	uint32_t               type_mask;   /* Type mask to intersect with */
	zend_class_entry      *ce;          /* Class entry for instanceof constraints */
} zend_ssa_type_constraint;

typedef union _zend_ssa_pi_constraint {
	zend_ssa_range_constraint range;
	zend_ssa_type_constraint type;
} zend_ssa_pi_constraint;

/* SSA Phi - ssa_var = Phi(source0, source1, ...sourceN) */
typedef struct _zend_ssa_phi zend_ssa_phi;
struct _zend_ssa_phi {
	zend_ssa_phi          *next;          /* next Phi in the same BB */
	int                    pi;            /* if >= 0 this is actually a e-SSA Pi */
	zend_ssa_pi_constraint constraint;    /* e-SSA Pi constraint */
	int                    var;           /* Original CV, VAR or TMP variable index */
	int                    ssa_var;       /* SSA variable index */
	int                    block;         /* current BB index */
	bool                   has_range_constraint;
	zend_ssa_phi         **use_chains;
	zend_ssa_phi          *sym_use_chain;
	int                   *sources;       /* Array of SSA IDs that produce this var.
									         As many as this block has
									         predecessors.  */
};

typedef struct _zend_ssa_block {
	zend_ssa_phi          *phis;
} zend_ssa_block;

typedef struct _zend_ssa_op {
	int                    op1_use;
	int                    op2_use;
	int                    result_use;
	int                    op1_def;
	int                    op2_def;
	int                    result_def;
	int                    op1_use_chain;
	int                    op2_use_chain;
	int                    res_use_chain;
} zend_ssa_op;

typedef enum _zend_ssa_alias_kind {
	NO_ALIAS,
	SYMTABLE_ALIAS,
	HTTP_RESPONSE_HEADER_ALIAS
} zend_ssa_alias_kind;

typedef enum _zend_ssa_escape_state {
	ESCAPE_STATE_UNKNOWN,
	ESCAPE_STATE_NO_ESCAPE,
	ESCAPE_STATE_FUNCTION_ESCAPE,
	ESCAPE_STATE_GLOBAL_ESCAPE
} zend_ssa_escape_state;

typedef struct _zend_ssa_var {
	int                    var;            /* original var number; op.var for CVs and following numbers for VARs and TMP_VARs */
	int                    scc;            /* strongly connected component */
	int                    definition;     /* opcode that defines this value */
	int                    use_chain;      /* uses of this value, linked through opN_use_chain */
	zend_ssa_phi          *definition_phi; /* phi that defines this value */
	zend_ssa_phi          *phi_use_chain;  /* uses of this value in Phi, linked through use_chain */
	zend_ssa_phi          *sym_use_chain;  /* uses of this value in Pi constraints */
	bool                   no_val : 1;     /* value doesn't matter (used as op1 in ZEND_ASSIGN) */
	bool                   scc_entry : 1;
	unsigned int           alias : 2;  /* value may be changed indirectly */
	unsigned int           escape_state : 2;
} zend_ssa_var;

typedef struct _zend_ssa_var_info {
	uint32_t               type; /* inferred type (see zend_inference.h) */
	bool                   has_range : 1;
	bool                   is_instanceof : 1; /* 0 - class == "ce", 1 - may be child of "ce" */
	bool                   recursive : 1;
	bool                   use_as_double : 1;
	bool                   delayed_fetch_this : 1;
	bool                   avoid_refcounting : 1;
	bool                   guarded_reference : 1;
	bool                   indirect_reference : 1; /* IS_INDIRECT returned by FETCH_DIM_W/FETCH_OBJ_W */
	zend_ssa_range         range;
	zend_class_entry      *ce;
} zend_ssa_var_info;

typedef struct _zend_ssa {
	zend_cfg               cfg;            /* control flow graph             */
	int                    vars_count;     /* number of SSA variables        */
	int                    sccs;           /* number of SCCs                 */
	zend_ssa_block        *blocks;         /* array of SSA blocks            */
	zend_ssa_op           *ops;            /* array of SSA instructions      */
	zend_ssa_var          *vars;           /* use/def chain of SSA variables */
	zend_ssa_var_info     *var_info;
} zend_ssa;

BEGIN_EXTERN_C()

ZEND_API zend_result zend_build_ssa(zend_arena **arena, const zend_script *script, const zend_op_array *op_array, uint32_t build_flags, zend_ssa *ssa);
ZEND_API void zend_ssa_compute_use_def_chains(zend_arena **arena, const zend_op_array *op_array, zend_ssa *ssa);
ZEND_API int zend_ssa_rename_op(const zend_op_array *op_array, const zend_op *opline, uint32_t k, uint32_t build_flags, int ssa_vars_count, zend_ssa_op *ssa_ops, int *var);
void zend_ssa_unlink_use_chain(zend_ssa *ssa, int op, int var);
void zend_ssa_replace_use_chain(zend_ssa *ssa, int op, int new_op, int var);

void zend_ssa_remove_predecessor(zend_ssa *ssa, int from, int to);
void zend_ssa_remove_defs_of_instr(zend_ssa *ssa, zend_ssa_op *ssa_op);
void zend_ssa_remove_instr(zend_ssa *ssa, zend_op *opline, zend_ssa_op *ssa_op);
void zend_ssa_remove_phi(zend_ssa *ssa, zend_ssa_phi *phi);
void zend_ssa_remove_uses_of_var(zend_ssa *ssa, int var_num);
void zend_ssa_remove_block(zend_op_array *op_array, zend_ssa *ssa, int b);
void zend_ssa_rename_var_uses(zend_ssa *ssa, int old_var, int new_var, bool update_types);
void zend_ssa_remove_block_from_cfg(zend_ssa *ssa, int b);

static zend_always_inline void _zend_ssa_remove_def(zend_ssa_var *var)
{
	ZEND_ASSERT(var->definition >= 0);
	ZEND_ASSERT(var->use_chain < 0);
	ZEND_ASSERT(!var->phi_use_chain);
	var->definition = -1;
}

static zend_always_inline void zend_ssa_remove_result_def(zend_ssa *ssa, zend_ssa_op *ssa_op)
{
	zend_ssa_var *var = &ssa->vars[ssa_op->result_def];
	_zend_ssa_remove_def(var);
	ssa_op->result_def = -1;
}

static zend_always_inline void zend_ssa_remove_op1_def(zend_ssa *ssa, zend_ssa_op *ssa_op)
{
	zend_ssa_var *var = &ssa->vars[ssa_op->op1_def];
	_zend_ssa_remove_def(var);
	ssa_op->op1_def = -1;
}

static zend_always_inline void zend_ssa_remove_op2_def(zend_ssa *ssa, zend_ssa_op *ssa_op)
{
	zend_ssa_var *var = &ssa->vars[ssa_op->op2_def];
	_zend_ssa_remove_def(var);
	ssa_op->op2_def = -1;
}

END_EXTERN_C()

static zend_always_inline int zend_ssa_next_use(const zend_ssa_op *ssa_op, int var, int use)
{
	ssa_op += use;
	if (ssa_op->op1_use == var) {
		return ssa_op->op1_use_chain;
	} else if (ssa_op->op2_use == var) {
		return ssa_op->op2_use_chain;
	} else {
		return ssa_op->res_use_chain;
	}
}

static zend_always_inline zend_ssa_phi* zend_ssa_next_use_phi(const zend_ssa *ssa, int var, const zend_ssa_phi *p)
{
	if (p->pi >= 0) {
		return p->use_chains[0];
	} else {
		int j;
		for (j = 0; j < ssa->cfg.blocks[p->block].predecessors_count; j++) {
			if (p->sources[j] == var) {
				return p->use_chains[j];
			}
		}
	}
	return NULL;
}

static zend_always_inline bool zend_ssa_is_no_val_use(const zend_op *opline, const zend_ssa_op *ssa_op, int var)
{
	if (opline->opcode == ZEND_ASSIGN
			 || opline->opcode == ZEND_UNSET_CV
			 || opline->opcode == ZEND_BIND_GLOBAL
			 || opline->opcode == ZEND_BIND_STATIC) {
		return ssa_op->op1_use == var && ssa_op->op2_use != var;
	}
	if (opline->opcode == ZEND_FE_FETCH_R || opline->opcode == ZEND_FE_FETCH_RW) {
		return ssa_op->op2_use == var && ssa_op->op1_use != var;
	}
	if (ssa_op->result_use == var
			&& opline->opcode != ZEND_ADD_ARRAY_ELEMENT
			&& opline->opcode != ZEND_ADD_ARRAY_UNPACK) {
		return ssa_op->op1_use != var && ssa_op->op2_use != var;
	}
	return 0;
}

static zend_always_inline void zend_ssa_rename_defs_of_instr(zend_ssa *ssa, zend_ssa_op *ssa_op) {
	/* Rename def to use if possible. Mark variable as not defined otherwise. */
	if (ssa_op->op1_def >= 0) {
		if (ssa_op->op1_use >= 0) {
			zend_ssa_rename_var_uses(ssa, ssa_op->op1_def, ssa_op->op1_use, 1);
		}
		ssa->vars[ssa_op->op1_def].definition = -1;
		ssa_op->op1_def = -1;
	}
	if (ssa_op->op2_def >= 0) {
		if (ssa_op->op2_use >= 0) {
			zend_ssa_rename_var_uses(ssa, ssa_op->op2_def, ssa_op->op2_use, 1);
		}
		ssa->vars[ssa_op->op2_def].definition = -1;
		ssa_op->op2_def = -1;
	}
	if (ssa_op->result_def >= 0) {
		if (ssa_op->result_use >= 0) {
			zend_ssa_rename_var_uses(ssa, ssa_op->result_def, ssa_op->result_use, 1);
		}
		ssa->vars[ssa_op->result_def].definition = -1;
		ssa_op->result_def = -1;
	}
}

#define NUM_PHI_SOURCES(phi) \
	((phi)->pi >= 0 ? 1 : (ssa->cfg.blocks[(phi)->block].predecessors_count))

/* FOREACH_USE and FOREACH_PHI_USE explicitly support "continue"
 * and changing the use chain of the current element */
#define FOREACH_USE(var, use) do { \
	int _var_num = (var) - ssa->vars, next; \
	for (use = (var)->use_chain; use >= 0; use = next) { \
		next = zend_ssa_next_use(ssa->ops, _var_num, use);
#define FOREACH_USE_END() \
	} \
} while (0)

#define FOREACH_PHI_USE(var, phi) do { \
	int _var_num = (var) - ssa->vars; \
	zend_ssa_phi *next_phi; \
	for (phi = (var)->phi_use_chain; phi; phi = next_phi) { \
		next_phi = zend_ssa_next_use_phi(ssa, _var_num, phi);
#define FOREACH_PHI_USE_END() \
	} \
} while (0)

#define FOREACH_PHI_SOURCE(phi, source) do { \
	zend_ssa_phi *_phi = (phi); \
	int _i, _end = NUM_PHI_SOURCES(phi); \
	for (_i = 0; _i < _end; _i++) { \
		ZEND_ASSERT(_phi->sources[_i] >= 0); \
		source = _phi->sources[_i];
#define FOREACH_PHI_SOURCE_END() \
	} \
} while (0)

#define FOREACH_PHI(phi) do { \
	int _i; \
	for (_i = 0; _i < ssa->cfg.blocks_count; _i++) { \
		phi = ssa->blocks[_i].phis; \
		for (; phi; phi = phi->next) {
#define FOREACH_PHI_END() \
		} \
	} \
} while (0)

#define FOREACH_BLOCK(block) do { \
	int _i; \
	for (_i = 0; _i < ssa->cfg.blocks_count; _i++) { \
		(block) = &ssa->cfg.blocks[_i]; \
		if (!((block)->flags & ZEND_BB_REACHABLE)) { \
			continue; \
		}
#define FOREACH_BLOCK_END() \
	} \
} while (0)

/* Does not support "break" */
#define FOREACH_INSTR_NUM(i) do { \
	zend_basic_block *_block; \
	FOREACH_BLOCK(_block) { \
		uint32_t _end = _block->start + _block->len; \
		for ((i) = _block->start; (i) < _end; (i)++) {
#define FOREACH_INSTR_NUM_END() \
		} \
	} FOREACH_BLOCK_END(); \
} while (0)

#endif /* ZEND_SSA_H */
Zend/Optimizer/zend_dfg.h000064400000003777151730543100011374 0ustar00/*
   +----------------------------------------------------------------------+
   | Zend Engine, DFG - Data Flow Graph                                   |
   +----------------------------------------------------------------------+
   | Copyright (c) The PHP Group                                          |
   +----------------------------------------------------------------------+
   | This source file is subject to version 3.01 of the PHP license,      |
   | that is bundled with this package in the file LICENSE, and is        |
   | available through the world-wide-web at the following url:           |
   | https://www.php.net/license/3_01.txt                                 |
   | If you did not receive a copy of the PHP license and are unable to   |
   | obtain it through the world-wide-web, please send a note to          |
   | license@php.net so we can mail you a copy immediately.               |
   +----------------------------------------------------------------------+
   | Authors: Dmitry Stogov <dmitry@php.net>                              |
   +----------------------------------------------------------------------+
*/

#ifndef ZEND_DFG_H
#define ZEND_DFG_H

#include "zend_bitset.h"
#include "zend_cfg.h"

typedef struct _zend_dfg {
	int         vars;
	uint32_t    size;
	zend_bitset tmp;
	zend_bitset def;
	zend_bitset use;
	zend_bitset in;
	zend_bitset out;
} zend_dfg;

#define DFG_BITSET(set, set_size, block_num) \
	((set) + ((block_num) * (set_size)))

#define DFG_SET(set, set_size, block_num, var_num) \
	zend_bitset_incl(DFG_BITSET(set, set_size, block_num), (var_num))

#define DFG_ISSET(set, set_size, block_num, var_num) \
	zend_bitset_in(DFG_BITSET(set, set_size, block_num), (var_num))

BEGIN_EXTERN_C()

void zend_build_dfg(const zend_op_array *op_array, const zend_cfg *cfg, zend_dfg *dfg, uint32_t build_flags);
ZEND_API void zend_dfg_add_use_def_op(const zend_op_array *op_array, const zend_op *opline, uint32_t build_flags, zend_bitset use, zend_bitset def);

END_EXTERN_C()

#endif /* ZEND_DFG_H */
Zend/Optimizer/zend_cfg.h000064400000013016151730543100011356 0ustar00/*
   +----------------------------------------------------------------------+
   | Zend Engine, CFG - Control Flow Graph                                |
   +----------------------------------------------------------------------+
   | Copyright (c) The PHP Group                                          |
   +----------------------------------------------------------------------+
   | This source file is subject to version 3.01 of the PHP license,      |
   | that is bundled with this package in the file LICENSE, and is        |
   | available through the world-wide-web at the following url:           |
   | https://www.php.net/license/3_01.txt                                 |
   | If you did not receive a copy of the PHP license and are unable to   |
   | obtain it through the world-wide-web, please send a note to          |
   | license@php.net so we can mail you a copy immediately.               |
   +----------------------------------------------------------------------+
   | Authors: Dmitry Stogov <dmitry@php.net>                              |
   +----------------------------------------------------------------------+
*/

#ifndef ZEND_CFG_H
#define ZEND_CFG_H

/* zend_basic_block.flags */
#define ZEND_BB_START            (1<<0)  /* first block            */
#define ZEND_BB_FOLLOW           (1<<1)  /* follows the next block */
#define ZEND_BB_TARGET           (1<<2)  /* jump target            */
#define ZEND_BB_EXIT             (1<<3)  /* without successors     */
#define ZEND_BB_ENTRY            (1<<4)  /* stackless entry        */
#define ZEND_BB_TRY              (1<<5)  /* start of try block     */
#define ZEND_BB_CATCH            (1<<6)  /* start of catch block   */
#define ZEND_BB_FINALLY          (1<<7)  /* start of finally block */
#define ZEND_BB_FINALLY_END      (1<<8)  /* end of finally block   */
#define ZEND_BB_UNREACHABLE_FREE (1<<11) /* unreachable loop free  */
#define ZEND_BB_RECV_ENTRY       (1<<12) /* RECV entry             */

#define ZEND_BB_LOOP_HEADER      (1<<16)
#define ZEND_BB_IRREDUCIBLE_LOOP (1<<17)

#define ZEND_BB_REACHABLE        (1U<<31)

#define ZEND_BB_PROTECTED        (ZEND_BB_ENTRY|ZEND_BB_RECV_ENTRY|ZEND_BB_TRY|ZEND_BB_CATCH|ZEND_BB_FINALLY|ZEND_BB_FINALLY_END|ZEND_BB_UNREACHABLE_FREE)

typedef struct _zend_basic_block {
	int              *successors;         /* successor block indices     */
	uint32_t          flags;
	uint32_t          start;              /* first opcode number         */
	uint32_t          len;                /* number of opcodes           */
	int               successors_count;   /* number of successors        */
	int               predecessors_count; /* number of predecessors      */
	int               predecessor_offset; /* offset of 1-st predecessor  */
	int               idom;               /* immediate dominator block   */
	int               loop_header;        /* closest loop header, or -1  */
	int               level;              /* steps away from the entry in the dom. tree */
	int               children;           /* list of dominated blocks    */
	int               next_child;         /* next dominated block        */
	int               successors_storage[2]; /* up to 2 successor blocks */
} zend_basic_block;

/*
+------------+---+---+---+---+---+
|            |OP1|OP2|EXT| 0 | 1 |
+------------+---+---+---+---+---+
|JMP         |ADR|   |   |OP1| - |
|JMPZ        |   |ADR|   |OP2|FOL|
|JMPNZ       |   |ADR|   |OP2|FOL|
|JMPZ_EX     |   |ADR|   |OP2|FOL|
|JMPNZ_EX    |   |ADR|   |OP2|FOL|
|JMP_SET     |   |ADR|   |OP2|FOL|
|COALESCE    |   |ADR|   |OP2|FOL|
|ASSERT_CHK  |   |ADR|   |OP2|FOL|
|NEW         |   |ADR|   |OP2|FOL|
|DCL_ANON*   |ADR|   |   |OP1|FOL|
|FE_RESET_*  |   |ADR|   |OP2|FOL|
|FE_FETCH_*  |   |   |ADR|EXT|FOL|
|CATCH       |   |   |ADR|EXT|FOL|
|FAST_CALL   |ADR|   |   |OP1|FOL|
|FAST_RET    |   |   |   | - | - |
|RETURN*     |   |   |   | - | - |
|EXIT        |   |   |   | - | - |
|THROW       |   |   |   | - | - |
|*           |   |   |   |FOL| - |
+------------+---+---+---+---+---+
*/

typedef struct _zend_cfg {
	int               blocks_count;       /* number of basic blocks      */
	int               edges_count;        /* number of edges             */
	zend_basic_block *blocks;             /* array of basic blocks       */
	int              *predecessors;
	uint32_t         *map;
	uint32_t          flags;
} zend_cfg;

/* Build Flags */
#define ZEND_CFG_STACKLESS             (1<<30)
#define ZEND_SSA_DEBUG_LIVENESS        (1<<29)
#define ZEND_SSA_DEBUG_PHI_PLACEMENT   (1<<28)
#define ZEND_SSA_RC_INFERENCE          (1<<27)
#define ZEND_CFG_NO_ENTRY_PREDECESSORS (1<<25)
#define ZEND_CFG_RECV_ENTRY            (1<<24)
#define ZEND_CALL_TREE                 (1<<23)
#define ZEND_SSA_USE_CV_RESULTS        (1<<22)

#define CRT_CONSTANT_EX(op_array, opline, node) \
	(((op_array)->fn_flags & ZEND_ACC_DONE_PASS_TWO) ? \
		RT_CONSTANT(opline, (node)) \
	: \
		CT_CONSTANT_EX(op_array, (node).constant) \
	)

#define CRT_CONSTANT(node) \
	CRT_CONSTANT_EX(op_array, opline, node)

#define RETURN_VALUE_USED(opline) \
	((opline)->result_type != IS_UNUSED)

BEGIN_EXTERN_C()

ZEND_API void zend_build_cfg(zend_arena **arena, const zend_op_array *op_array, uint32_t build_flags, zend_cfg *cfg);
void zend_cfg_remark_reachable_blocks(const zend_op_array *op_array, zend_cfg *cfg);
ZEND_API void zend_cfg_build_predecessors(zend_arena **arena, zend_cfg *cfg);
ZEND_API void zend_cfg_compute_dominators_tree(const zend_op_array *op_array, zend_cfg *cfg);
ZEND_API void zend_cfg_identify_loops(const zend_op_array *op_array, zend_cfg *cfg);

END_EXTERN_C()

#endif /* ZEND_CFG_H */
Zend/Optimizer/zend_dump.h000064400000005344151730543110011572 0ustar00/*
   +----------------------------------------------------------------------+
   | Zend Engine, Bytecode Visualisation                                  |
   +----------------------------------------------------------------------+
   | Copyright (c) The PHP Group                                          |
   +----------------------------------------------------------------------+
   | This source file is subject to version 3.01 of the PHP license,      |
   | that is bundled with this package in the file LICENSE, and is        |
   | available through the world-wide-web at the following url:           |
   | https://www.php.net/license/3_01.txt                                 |
   | If you did not receive a copy of the PHP license and are unable to   |
   | obtain it through the world-wide-web, please send a note to          |
   | license@php.net so we can mail you a copy immediately.               |
   +----------------------------------------------------------------------+
   | Authors: Dmitry Stogov <dmitry@php.net>                              |
   +----------------------------------------------------------------------+
*/

#ifndef ZEND_DUMP_H
#define ZEND_DUMP_H

#include "zend_ssa.h"
#include "zend_dfg.h"

#include <stdint.h>

#define ZEND_DUMP_HIDE_UNREACHABLE     (1<<0)
#define ZEND_DUMP_RC_INFERENCE         (1<<1)
#define ZEND_DUMP_CFG                  (1<<2)
#define ZEND_DUMP_SSA                  (1<<3)
#define ZEND_DUMP_LIVE_RANGES          (1<<4)
#define ZEND_DUMP_LINE_NUMBERS         (1<<5)

BEGIN_EXTERN_C()

ZEND_API void zend_dump_op_array(const zend_op_array *op_array, uint32_t dump_flags, const char *msg, const void *data);
ZEND_API void zend_dump_op(const zend_op_array *op_array, const zend_basic_block *b, const zend_op *opline, uint32_t dump_flags, const zend_ssa *ssa, const zend_ssa_op *ssa_op);
ZEND_API void zend_dump_op_line(const zend_op_array *op_array, const zend_basic_block *b, const zend_op *opline, uint32_t dump_flags, const void *data);
void zend_dump_dominators(const zend_op_array *op_array, const zend_cfg *cfg);
void zend_dump_dfg(const zend_op_array *op_array, const zend_cfg *cfg, const zend_dfg *dfg);
void zend_dump_phi_placement(const zend_op_array *op_array, const zend_ssa *ssa);
void zend_dump_ssa_variables(const zend_op_array *op_array, const zend_ssa *ssa, uint32_t dump_flags);
ZEND_API void zend_dump_ssa_var(const zend_op_array *op_array, const zend_ssa *ssa, int ssa_var_num, uint8_t var_type, uint32_t var_num, uint32_t dump_flags);
ZEND_API void zend_dump_var(const zend_op_array *op_array, uint8_t var_type, uint32_t var_num);
void zend_dump_op_array_name(const zend_op_array *op_array);
void zend_dump_const(const zval *zv);
void zend_dump_ht(HashTable *ht);

END_EXTERN_C()

#endif /* ZEND_DUMP_H */
Zend/Optimizer/zend_inference.h000064400000024437151730543110012567 0ustar00/*
   +----------------------------------------------------------------------+
   | Zend Engine, e-SSA based Type & Range Inference                      |
   +----------------------------------------------------------------------+
   | Copyright (c) The PHP Group                                          |
   +----------------------------------------------------------------------+
   | This source file is subject to version 3.01 of the PHP license,      |
   | that is bundled with this package in the file LICENSE, and is        |
   | available through the world-wide-web at the following url:           |
   | https://www.php.net/license/3_01.txt                                 |
   | If you did not receive a copy of the PHP license and are unable to   |
   | obtain it through the world-wide-web, please send a note to          |
   | license@php.net so we can mail you a copy immediately.               |
   +----------------------------------------------------------------------+
   | Authors: Dmitry Stogov <dmitry@php.net>                              |
   +----------------------------------------------------------------------+
*/

#ifndef ZEND_INFERENCE_H
#define ZEND_INFERENCE_H

#include "zend_optimizer.h"
#include "zend_ssa.h"
#include "zend_bitset.h"

/* Bitmask for type inference (zend_ssa_var_info.type) */
#include "zend_type_info.h"

#include <stdint.h>

#define MAY_BE_PACKED_GUARD         (1<<27) /* needs packed array guard */
#define MAY_BE_CLASS_GUARD          (1<<27) /* needs class guard */
#define MAY_BE_GUARD                (1<<28) /* needs type guard */

#define MAY_HAVE_DTOR \
	(MAY_BE_OBJECT|MAY_BE_RESOURCE \
	|MAY_BE_ARRAY_OF_ARRAY|MAY_BE_ARRAY_OF_OBJECT|MAY_BE_ARRAY_OF_RESOURCE)

#define DEFINE_SSA_OP_HAS_RANGE(opN) \
	static zend_always_inline bool _ssa_##opN##_has_range(const zend_op_array *op_array, const zend_ssa *ssa, const zend_op *opline, const zend_ssa_op *ssa_op) \
	{ \
		if (opline->opN##_type == IS_CONST) { \
			zval *zv = CRT_CONSTANT(opline->opN); \
			return (Z_TYPE_P(zv) == IS_LONG); \
		} else { \
			return (opline->opN##_type != IS_UNUSED && \
		        ssa->var_info && \
		        ssa_op->opN##_use >= 0 && \
			    ssa->var_info[ssa_op->opN##_use].has_range); \
		} \
		return 0; \
	} \

#define DEFINE_SSA_OP_MIN_RANGE(opN) \
	static zend_always_inline zend_long _ssa_##opN##_min_range(const zend_op_array *op_array, const zend_ssa *ssa, const zend_op *opline, const zend_ssa_op *ssa_op) \
	{ \
		if (opline->opN##_type == IS_CONST) { \
			zval *zv = CRT_CONSTANT(opline->opN); \
			if (Z_TYPE_P(zv) == IS_LONG) { \
				return Z_LVAL_P(zv); \
			} \
		} else if (opline->opN##_type != IS_UNUSED && \
		    ssa->var_info && \
		    ssa_op->opN##_use >= 0 && \
		    ssa->var_info[ssa_op->opN##_use].has_range) { \
			return ssa->var_info[ssa_op->opN##_use].range.min; \
		} \
		return ZEND_LONG_MIN; \
	} \

#define DEFINE_SSA_OP_MAX_RANGE(opN) \
	static zend_always_inline zend_long _ssa_##opN##_max_range(const zend_op_array *op_array, const zend_ssa *ssa, const zend_op *opline, const zend_ssa_op *ssa_op) \
	{ \
		if (opline->opN##_type == IS_CONST) { \
			zval *zv = CRT_CONSTANT(opline->opN); \
			if (Z_TYPE_P(zv) == IS_LONG) { \
				return Z_LVAL_P(zv); \
			} \
		} else if (opline->opN##_type != IS_UNUSED && \
		    ssa->var_info && \
		    ssa_op->opN##_use >= 0 && \
		    ssa->var_info[ssa_op->opN##_use].has_range) { \
			return ssa->var_info[ssa_op->opN##_use].range.max; \
		} \
		return ZEND_LONG_MAX; \
	} \

#define DEFINE_SSA_OP_RANGE_UNDERFLOW(opN) \
	static zend_always_inline char _ssa_##opN##_range_underflow(const zend_op_array *op_array, const zend_ssa *ssa, const zend_op *opline, const zend_ssa_op *ssa_op) \
	{ \
		if (opline->opN##_type == IS_CONST) { \
			zval *zv = CRT_CONSTANT(opline->opN); \
			if (Z_TYPE_P(zv) == IS_LONG) { \
				return 0; \
			} \
		} else if (opline->opN##_type != IS_UNUSED && \
		    ssa->var_info && \
		    ssa_op->opN##_use >= 0 && \
		    ssa->var_info[ssa_op->opN##_use].has_range) { \
			return ssa->var_info[ssa_op->opN##_use].range.underflow; \
		} \
		return 1; \
	} \

#define DEFINE_SSA_OP_RANGE_OVERFLOW(opN) \
	static zend_always_inline char _ssa_##opN##_range_overflow(const zend_op_array *op_array, const zend_ssa *ssa, const zend_op *opline, const zend_ssa_op *ssa_op) \
	{ \
		if (opline->opN##_type == IS_CONST) { \
			zval *zv = CRT_CONSTANT(opline->opN); \
			if (Z_TYPE_P(zv) == IS_LONG) { \
				return 0; \
			} \
		} else if (opline->opN##_type != IS_UNUSED && \
		    ssa->var_info && \
		    ssa_op->opN##_use >= 0 && \
		    ssa->var_info[ssa_op->opN##_use].has_range) { \
			return ssa->var_info[ssa_op->opN##_use].range.overflow; \
		} \
		return 1; \
	} \

DEFINE_SSA_OP_HAS_RANGE(op1)
DEFINE_SSA_OP_MIN_RANGE(op1)
DEFINE_SSA_OP_MAX_RANGE(op1)
DEFINE_SSA_OP_RANGE_UNDERFLOW(op1)
DEFINE_SSA_OP_RANGE_OVERFLOW(op1)
DEFINE_SSA_OP_HAS_RANGE(op2)
DEFINE_SSA_OP_MIN_RANGE(op2)
DEFINE_SSA_OP_MAX_RANGE(op2)
DEFINE_SSA_OP_RANGE_UNDERFLOW(op2)
DEFINE_SSA_OP_RANGE_OVERFLOW(op2)

#define OP1_HAS_RANGE()       (_ssa_op1_has_range (op_array, ssa, opline, ssa_op))
#define OP1_MIN_RANGE()       (_ssa_op1_min_range (op_array, ssa, opline, ssa_op))
#define OP1_MAX_RANGE()       (_ssa_op1_max_range (op_array, ssa, opline, ssa_op))
#define OP1_RANGE_UNDERFLOW() (_ssa_op1_range_underflow (op_array, ssa, opline, ssa_op))
#define OP1_RANGE_OVERFLOW()  (_ssa_op1_range_overflow (op_array, ssa, opline, ssa_op))
#define OP2_HAS_RANGE()       (_ssa_op2_has_range (op_array, ssa, opline, ssa_op))
#define OP2_MIN_RANGE()       (_ssa_op2_min_range (op_array, ssa, opline, ssa_op))
#define OP2_MAX_RANGE()       (_ssa_op2_max_range (op_array, ssa, opline, ssa_op))
#define OP2_RANGE_UNDERFLOW() (_ssa_op2_range_underflow (op_array, ssa, opline, ssa_op))
#define OP2_RANGE_OVERFLOW()  (_ssa_op2_range_overflow (op_array, ssa, opline, ssa_op))

BEGIN_EXTERN_C()
ZEND_API uint32_t ZEND_FASTCALL zend_array_type_info(const zval *zv);
END_EXTERN_C()

static zend_always_inline uint32_t _const_op_type(const zval *zv) {
	if (Z_TYPE_P(zv) == IS_CONSTANT_AST) {
		return MAY_BE_RC1 | MAY_BE_RCN | MAY_BE_ANY | MAY_BE_ARRAY_KEY_ANY | MAY_BE_ARRAY_OF_ANY;
	} else if (Z_TYPE_P(zv) == IS_ARRAY) {
		return zend_array_type_info(zv);
	} else {
		uint32_t tmp = (1 << Z_TYPE_P(zv));

		if (Z_REFCOUNTED_P(zv)) {
			tmp |= MAY_BE_RC1 | MAY_BE_RCN;
		} else if (Z_TYPE_P(zv) == IS_STRING) {
			tmp |= MAY_BE_RCN;
		}
		return tmp;
	}
}

static zend_always_inline uint32_t get_ssa_var_info(const zend_ssa *ssa, int ssa_var_num)
{
	if (ssa->var_info && ssa_var_num >= 0) {
		return ssa->var_info[ssa_var_num].type;
	} else {
		return MAY_BE_UNDEF | MAY_BE_RC1 | MAY_BE_RCN | MAY_BE_REF | MAY_BE_INDIRECT | MAY_BE_ANY | MAY_BE_ARRAY_KEY_ANY | MAY_BE_ARRAY_OF_ANY | MAY_BE_ARRAY_OF_REF;
	}
}

#define DEFINE_SSA_OP_INFO(opN) \
	static zend_always_inline uint32_t _ssa_##opN##_info(const zend_op_array *op_array, const zend_ssa *ssa, const zend_op *opline, const zend_ssa_op *ssa_op) \
	{																		\
		if (opline->opN##_type == IS_CONST) {							\
			return _const_op_type(CRT_CONSTANT(opline->opN)); \
		} else { \
			return get_ssa_var_info(ssa, ssa->var_info ? ssa_op->opN##_use : -1); \
		} \
	} \

#define DEFINE_SSA_OP_DEF_INFO(opN) \
	static zend_always_inline uint32_t _ssa_##opN##_def_info(const zend_op_array *op_array, const zend_ssa *ssa, const zend_op *opline, const zend_ssa_op *ssa_op) \
	{ \
		return get_ssa_var_info(ssa, ssa->var_info ? ssa_op->opN##_def : -1); \
	} \


DEFINE_SSA_OP_INFO(op1)
DEFINE_SSA_OP_INFO(op2)
DEFINE_SSA_OP_INFO(result)
DEFINE_SSA_OP_DEF_INFO(op1)
DEFINE_SSA_OP_DEF_INFO(op2)
DEFINE_SSA_OP_DEF_INFO(result)

#define OP1_INFO()           (_ssa_op1_info(op_array, ssa, opline, ssa_op))
#define OP2_INFO()           (_ssa_op2_info(op_array, ssa, opline, ssa_op))
#define OP1_DATA_INFO()      (_ssa_op1_info(op_array, ssa, (opline+1), ssa_op ? (ssa_op+1) : NULL))
#define OP2_DATA_INFO()      (_ssa_op2_info(op_array, ssa, (opline+1), ssa_op ? (ssa_op+1) : NULL))
#define RES_USE_INFO()       (_ssa_result_info(op_array, ssa, opline, ssa_op))
#define OP1_DEF_INFO()       (_ssa_op1_def_info(op_array, ssa, opline, ssa_op))
#define OP2_DEF_INFO()       (_ssa_op2_def_info(op_array, ssa, opline, ssa_op))
#define OP1_DATA_DEF_INFO()  (_ssa_op1_def_info(op_array, ssa, (opline+1), ssa_op ? (ssa_op+1) : NULL))
#define OP2_DATA_DEF_INFO()  (_ssa_op2_def_info(op_array, ssa, (opline+1), ssa_op ? (ssa_op+1) : NULL))
#define RES_INFO()           (_ssa_result_def_info(op_array, ssa, opline, ssa_op))

static zend_always_inline bool zend_add_will_overflow(zend_long a, zend_long b) {
	return (b > 0 && a > ZEND_LONG_MAX - b)
		|| (b < 0 && a < ZEND_LONG_MIN - b);
}
static zend_always_inline bool zend_sub_will_overflow(zend_long a, zend_long b) {
	return (b > 0 && a < ZEND_LONG_MIN + b)
		|| (b < 0 && a > ZEND_LONG_MAX + b);
}

BEGIN_EXTERN_C()

ZEND_API void zend_ssa_find_false_dependencies(const zend_op_array *op_array, zend_ssa *ssa);
ZEND_API void zend_ssa_find_sccs(const zend_op_array *op_array, zend_ssa *ssa);
ZEND_API zend_result zend_ssa_inference(zend_arena **raena, const zend_op_array *op_array, const zend_script *script, zend_ssa *ssa, zend_long optimization_level);

ZEND_API uint32_t zend_array_element_type(uint32_t t1, uint8_t op_type, int write, int insert);

ZEND_API bool zend_inference_propagate_range(const zend_op_array *op_array, const zend_ssa *ssa, const zend_op *opline, const zend_ssa_op* ssa_op, int var, zend_ssa_range *tmp);

ZEND_API uint32_t zend_fetch_arg_info_type(
	const zend_script *script, const zend_arg_info *arg_info, zend_class_entry **pce);
ZEND_API void zend_init_func_return_info(
	const zend_op_array *op_array, const zend_script *script, zend_ssa_var_info *ret);
uint32_t zend_get_return_info_from_signature_only(
		const zend_function *func, const zend_script *script,
		zend_class_entry **ce, bool *ce_is_instanceof, bool use_tentative_return_info);

ZEND_API bool zend_may_throw_ex(const zend_op *opline, const zend_ssa_op *ssa_op, const zend_op_array *op_array, const zend_ssa *ssa, uint32_t t1, uint32_t t2);
ZEND_API bool zend_may_throw(const zend_op *opline, const zend_ssa_op *ssa_op, const zend_op_array *op_array, const zend_ssa *ssa);

ZEND_API zend_result zend_update_type_info(
	const zend_op_array *op_array, zend_ssa *ssa, const zend_script *script,
	zend_op *opline, zend_ssa_op *ssa_op, const zend_op **ssa_opcodes,
	zend_long optimization_level);

END_EXTERN_C()

#endif /* ZEND_INFERENCE_H */
Zend/Optimizer/zend_worklist.h000064400000007507151730543110012506 0ustar00/*
   +----------------------------------------------------------------------+
   | Zend Engine                                                          |
   +----------------------------------------------------------------------+
   | Copyright (c) The PHP Group                                          |
   +----------------------------------------------------------------------+
   | This source file is subject to version 3.01 of the PHP license,      |
   | that is bundled with this package in the file LICENSE, and is        |
   | available through the world-wide-web at the following url:           |
   | https://www.php.net/license/3_01.txt                                 |
   | If you did not receive a copy of the PHP license and are unable to   |
   | obtain it through the world-wide-web, please send a note to          |
   | license@php.net so we can mail you a copy immediately.               |
   +----------------------------------------------------------------------+
   | Authors: Andy Wingo <wingo@igalia.com>                               |
   +----------------------------------------------------------------------+
*/

#ifndef _ZEND_WORKLIST_H_
#define _ZEND_WORKLIST_H_

#include "zend_arena.h"
#include "zend_bitset.h"

typedef struct _zend_worklist_stack {
	int *buf;
	int len;
	int capacity;
} zend_worklist_stack;

#define ZEND_WORKLIST_STACK_ALLOCA(s, _len, use_heap) do { \
		(s)->buf = (int*)do_alloca(sizeof(int) * _len, use_heap); \
		(s)->len = 0; \
		(s)->capacity = _len; \
	} while (0)

#define ZEND_WORKLIST_STACK_FREE_ALLOCA(s, use_heap) \
	free_alloca((s)->buf, use_heap)

static inline void zend_worklist_stack_prepare(zend_arena **arena, zend_worklist_stack *stack, int len)
{
	ZEND_ASSERT(len >= 0);

	stack->buf = (int*)zend_arena_calloc(arena, sizeof(*stack->buf), len);
	stack->len = 0;
	stack->capacity = len;
}

static inline void zend_worklist_stack_push(zend_worklist_stack *stack, int i)
{
	ZEND_ASSERT(stack->len < stack->capacity);
	stack->buf[stack->len++] = i;
}

static inline int zend_worklist_stack_peek(const zend_worklist_stack *stack)
{
	ZEND_ASSERT(stack->len);
	return stack->buf[stack->len - 1];
}

static inline int zend_worklist_stack_pop(zend_worklist_stack *stack)
{
	ZEND_ASSERT(stack->len);
	return stack->buf[--stack->len];
}

typedef struct _zend_worklist {
	zend_bitset visited;
	zend_worklist_stack stack;
} zend_worklist;

#define ZEND_WORKLIST_ALLOCA(w, _len, use_heap) do { \
		(w)->stack.buf = (int*)do_alloca(ZEND_MM_ALIGNED_SIZE(sizeof(int) * _len) + sizeof(zend_ulong) * zend_bitset_len(_len), use_heap); \
		(w)->stack.len = 0; \
		(w)->stack.capacity = _len; \
		(w)->visited = (zend_bitset)((char*)(w)->stack.buf + ZEND_MM_ALIGNED_SIZE(sizeof(int) * _len)); \
		memset((w)->visited, 0, sizeof(zend_ulong) * zend_bitset_len(_len)); \
	} while (0)

#define ZEND_WORKLIST_FREE_ALLOCA(w, use_heap) \
	free_alloca((w)->stack.buf, use_heap)

static inline void zend_worklist_prepare(zend_arena **arena, zend_worklist *worklist, int len)
{
	ZEND_ASSERT(len >= 0);
	worklist->visited = (zend_bitset)zend_arena_calloc(arena, sizeof(zend_ulong), zend_bitset_len(len));
	zend_worklist_stack_prepare(arena, &worklist->stack, len);
}

static inline int zend_worklist_len(const zend_worklist *worklist)
{
	return worklist->stack.len;
}

static inline bool zend_worklist_push(zend_worklist *worklist, int i)
{
	ZEND_ASSERT(i >= 0 && i < worklist->stack.capacity);

	if (zend_bitset_in(worklist->visited, i)) {
		return 0;
	}

	zend_bitset_incl(worklist->visited, i);
	zend_worklist_stack_push(&worklist->stack, i);
	return 1;
}

static inline int zend_worklist_peek(const zend_worklist *worklist)
{
	return zend_worklist_stack_peek(&worklist->stack);
}

static inline int zend_worklist_pop(zend_worklist *worklist)
{
	/* Does not clear visited flag */
	return zend_worklist_stack_pop(&worklist->stack);
}

#endif /* _ZEND_WORKLIST_H_ */
Zend/Optimizer/zend_call_graph.h000064400000006403151730543110012716 0ustar00/*
   +----------------------------------------------------------------------+
   | Zend Engine, Call Graph                                              |
   +----------------------------------------------------------------------+
   | Copyright (c) The PHP Group                                          |
   +----------------------------------------------------------------------+
   | This source file is subject to version 3.01 of the PHP license,      |
   | that is bundled with this package in the file LICENSE, and is        |
   | available through the world-wide-web at the following url:           |
   | https://www.php.net/license/3_01.txt                                 |
   | If you did not receive a copy of the PHP license and are unable to   |
   | obtain it through the world-wide-web, please send a note to          |
   | license@php.net so we can mail you a copy immediately.               |
   +----------------------------------------------------------------------+
   | Authors: Dmitry Stogov <dmitry@php.net>                              |
   +----------------------------------------------------------------------+
*/

#ifndef ZEND_CALL_GRAPH_H
#define ZEND_CALL_GRAPH_H

#include "zend_ssa.h"
#include "zend_func_info.h"
#include "zend_optimizer.h"

typedef struct _zend_send_arg_info {
	zend_op                *opline;
} zend_send_arg_info;

struct _zend_call_info {
	zend_op_array          *caller_op_array;
	zend_op                *caller_init_opline;
	zend_op                *caller_call_opline;
	zend_function          *callee_func;
	zend_call_info         *next_caller;
	zend_call_info         *next_callee;
	bool               recursive;
	bool               send_unpack;  /* Parameters passed by SEND_UNPACK or SEND_ARRAY */
	bool               named_args;   /* Function has named arguments */
	bool               is_prototype; /* An overridden child method may be called */
	bool               is_frameless; /* A frameless function sends arguments through operands */
	int                     num_args;	/* Number of arguments, excluding named and variadic arguments */
	zend_send_arg_info      arg_info[1];
};

struct _zend_func_info {
	int                     num;
	uint32_t                flags;
	zend_ssa                ssa;          /* Static Single Assignment Form  */
	zend_call_info         *caller_info;  /* where this function is called from */
	zend_call_info         *callee_info;  /* which functions are called from this one */
	zend_call_info        **call_map;     /* Call info associated with init/call/send opnum */
	zend_ssa_var_info       return_info;
};

typedef struct _zend_call_graph {
	int                     op_arrays_count;
	zend_op_array         **op_arrays;
	zend_func_info         *func_infos;
} zend_call_graph;

BEGIN_EXTERN_C()

ZEND_API void zend_build_call_graph(zend_arena **arena, zend_script *script, zend_call_graph *call_graph);
ZEND_API void zend_analyze_call_graph(zend_arena **arena, zend_script *script, zend_call_graph *call_graph);
ZEND_API zend_call_info **zend_build_call_map(zend_arena **arena, zend_func_info *info, const zend_op_array *op_array);
ZEND_API void zend_analyze_calls(zend_arena **arena, zend_script *script, uint32_t build_flags, zend_op_array *op_array, zend_func_info *func_info);

END_EXTERN_C()

#endif /* ZEND_CALL_GRAPH_H */
Zend/Optimizer/zend_func_info.h000064400000006055151730543120012574 0ustar00/*
   +----------------------------------------------------------------------+
   | Zend Engine, Func Info                                               |
   +----------------------------------------------------------------------+
   | Copyright (c) The PHP Group                                          |
   +----------------------------------------------------------------------+
   | This source file is subject to version 3.01 of the PHP license,      |
   | that is bundled with this package in the file LICENSE, and is        |
   | available through the world-wide-web at the following url:           |
   | https://www.php.net/license/3_01.txt                                 |
   | If you did not receive a copy of the PHP license and are unable to   |
   | obtain it through the world-wide-web, please send a note to          |
   | license@php.net so we can mail you a copy immediately.               |
   +----------------------------------------------------------------------+
   | Authors: Dmitry Stogov <dmitry@php.net>                              |
   +----------------------------------------------------------------------+
*/

#ifndef ZEND_FUNC_INFO_H
#define ZEND_FUNC_INFO_H

#include "zend_ssa.h"

/* func/cfg flags */
#define ZEND_FUNC_INDIRECT_VAR_ACCESS      (1<<0)  /* accesses variables by name  */
#define ZEND_FUNC_HAS_CALLS                (1<<1)
#define ZEND_FUNC_VARARG                   (1<<2)  /* uses func_get_args()        */
#define ZEND_FUNC_NO_LOOPS                 (1<<3)
#define ZEND_FUNC_IRREDUCIBLE              (1<<4)
#define ZEND_FUNC_FREE_LOOP_VAR            (1<<5)
#define ZEND_FUNC_RECURSIVE                (1<<7)
#define ZEND_FUNC_RECURSIVE_DIRECTLY       (1<<8)
#define ZEND_FUNC_RECURSIVE_INDIRECTLY     (1<<9)
#define ZEND_FUNC_HAS_EXTENDED_FCALL       (1<<10)
#define ZEND_FUNC_HAS_EXTENDED_STMT        (1<<11)
#define ZEND_SSA_TSSA                      (1<<12) /* used by tracing JIT */

#define ZEND_FUNC_JIT_ON_FIRST_EXEC        (1<<13) /* used by JIT */
#define ZEND_FUNC_JIT_ON_PROF_REQUEST      (1<<14) /* used by JIT */
#define ZEND_FUNC_JIT_ON_HOT_COUNTERS      (1<<15) /* used by JIT */
#define ZEND_FUNC_JIT_ON_HOT_TRACE         (1<<16) /* used by JIT */
#define ZEND_FUNC_JITED                    (1<<17) /* used by JIT */

typedef struct _zend_func_info zend_func_info;
typedef struct _zend_call_info zend_call_info;

#define ZEND_FUNC_INFO(op_array) \
	((zend_func_info*)((op_array)->reserved[zend_func_info_rid]))

#define ZEND_SET_FUNC_INFO(op_array, info) do { \
		zend_func_info** pinfo = (zend_func_info**)&(op_array)->reserved[zend_func_info_rid]; \
		*pinfo = info; \
	} while (0)

BEGIN_EXTERN_C()

extern ZEND_API int zend_func_info_rid;

uint32_t zend_get_internal_func_info(
	const zend_function *callee_func, const zend_call_info *call_info, const zend_ssa *ssa);
ZEND_API uint32_t zend_get_func_info(
	const zend_call_info *call_info, const zend_ssa *ssa,
	zend_class_entry **ce, bool *ce_is_instanceof);

zend_result zend_func_info_startup(void);
zend_result zend_func_info_shutdown(void);

END_EXTERN_C()

#endif /* ZEND_FUNC_INFO_H */
Zend/zend_globals_macros.h000064400000005431151730543120011630 0ustar00/*
   +----------------------------------------------------------------------+
   | Zend Engine                                                          |
   +----------------------------------------------------------------------+
   | Copyright (c) Zend Technologies Ltd. (http://www.zend.com)           |
   +----------------------------------------------------------------------+
   | This source file is subject to version 2.00 of the Zend license,     |
   | that is bundled with this package in the file LICENSE, and is        |
   | available through the world-wide-web at the following url:           |
   | http://www.zend.com/license/2_00.txt.                                |
   | If you did not receive a copy of the Zend license and are unable to  |
   | obtain it through the world-wide-web, please send a note to          |
   | license@zend.com so we can mail you a copy immediately.              |
   +----------------------------------------------------------------------+
   | Authors: Andi Gutmans <andi@php.net>                                 |
   |          Zeev Suraski <zeev@php.net>                                 |
   +----------------------------------------------------------------------+
*/

#ifndef ZEND_GLOBALS_MACROS_H
#define ZEND_GLOBALS_MACROS_H

#include "zend_portability.h"

typedef struct _zend_compiler_globals zend_compiler_globals;
typedef struct _zend_executor_globals zend_executor_globals;
typedef struct _zend_php_scanner_globals zend_php_scanner_globals;
typedef struct _zend_ini_scanner_globals zend_ini_scanner_globals;

BEGIN_EXTERN_C()

/* Compiler */
#ifdef ZTS
# define CG(v) ZEND_TSRMG_FAST(compiler_globals_offset, zend_compiler_globals *, v)
#else
# define CG(v) (compiler_globals.v)
extern ZEND_API struct _zend_compiler_globals compiler_globals;
#endif
ZEND_API int zendparse(void);


/* Executor */
#ifdef ZTS
# define EG(v) ZEND_TSRMG_FAST(executor_globals_offset, zend_executor_globals *, v)
#else
# define EG(v) (executor_globals.v)
extern ZEND_API zend_executor_globals executor_globals;
#endif

/* Language Scanner */
#ifdef ZTS
# define LANG_SCNG(v) ZEND_TSRMG_FAST(language_scanner_globals_offset, zend_php_scanner_globals *, v)
extern ZEND_API ts_rsrc_id language_scanner_globals_id;
extern ZEND_API size_t language_scanner_globals_offset;
#else
# define LANG_SCNG(v) (language_scanner_globals.v)
extern ZEND_API zend_php_scanner_globals language_scanner_globals;
#endif


/* INI Scanner */
#ifdef ZTS
# define INI_SCNG(v) ZEND_TSRMG_FAST(ini_scanner_globals_offset, zend_ini_scanner_globals *, v)
extern ZEND_API ts_rsrc_id ini_scanner_globals_id;
extern ZEND_API size_t ini_scanner_globals_offset;
#else
# define INI_SCNG(v) (ini_scanner_globals.v)
extern ZEND_API zend_ini_scanner_globals ini_scanner_globals;
#endif

END_EXTERN_C()

#endif /* ZEND_GLOBALS_MACROS_H */
Zend/zend_stack.h000064400000004612151730543120007746 0ustar00/*
   +----------------------------------------------------------------------+
   | Zend Engine                                                          |
   +----------------------------------------------------------------------+
   | Copyright (c) Zend Technologies Ltd. (http://www.zend.com)           |
   +----------------------------------------------------------------------+
   | This source file is subject to version 2.00 of the Zend license,     |
   | that is bundled with this package in the file LICENSE, and is        |
   | available through the world-wide-web at the following url:           |
   | http://www.zend.com/license/2_00.txt.                                |
   | If you did not receive a copy of the Zend license and are unable to  |
   | obtain it through the world-wide-web, please send a note to          |
   | license@zend.com so we can mail you a copy immediately.              |
   +----------------------------------------------------------------------+
   | Authors: Andi Gutmans <andi@php.net>                                 |
   |          Zeev Suraski <zeev@php.net>                                 |
   +----------------------------------------------------------------------+
*/

#ifndef ZEND_STACK_H
#define ZEND_STACK_H

#include "zend_portability.h"

typedef struct _zend_stack {
	int size, top, max;
	void *elements;
} zend_stack;


#define STACK_BLOCK_SIZE 16

typedef enum {
	ZEND_STACK_APPLY_TOPDOWN,
	ZEND_STACK_APPLY_BOTTOMUP,
} zend_stack_apply_direction;

BEGIN_EXTERN_C()
ZEND_API void zend_stack_init(zend_stack *stack, int size);
ZEND_API int zend_stack_push(zend_stack *stack, const void *element);
ZEND_API void *zend_stack_top(const zend_stack *stack);
ZEND_API void zend_stack_del_top(zend_stack *stack);
ZEND_API int zend_stack_int_top(const zend_stack *stack);
ZEND_API bool zend_stack_is_empty(const zend_stack *stack);
ZEND_API void zend_stack_destroy(zend_stack *stack);
ZEND_API void *zend_stack_base(const zend_stack *stack);
ZEND_API int zend_stack_count(const zend_stack *stack);
ZEND_API void zend_stack_apply(zend_stack *stack, int type, int (*apply_function)(void *element));
ZEND_API void zend_stack_apply_with_argument(zend_stack *stack, zend_stack_apply_direction type, int (*apply_function)(void *element, void *arg), void *arg);
ZEND_API void zend_stack_clean(zend_stack *stack, void (*func)(void *), bool free_elements);
END_EXTERN_C()

#endif /* ZEND_STACK_H */
Zend/zend_mmap.h000064400000002750151730543130007575 0ustar00/*
   +----------------------------------------------------------------------+
   | This source file is subject to version 2.00 of the Zend license,     |
   | that is bundled with this package in the file LICENSE, and is        |
   | available through the world-wide-web at the following url:           |
   | http://www.zend.com/license/2_00.txt.                                |
   | If you did not receive a copy of the Zend license and are unable to  |
   | obtain it through the world-wide-web, please send a note to          |
   | license@zend.com so we can mail you a copy immediately.              |
   +----------------------------------------------------------------------+
   | Authors: Max Kellermann <max.kellermann@ionos.com>                   |
   +----------------------------------------------------------------------+
*/

#ifndef ZEND_MMAP_H
#define ZEND_MMAP_H

#include "zend_portability.h"

#ifdef HAVE_PRCTL
# include <sys/prctl.h>

/* fallback definitions if our libc is older than the kernel */
# ifndef PR_SET_VMA
#  define PR_SET_VMA 0x53564d41
# endif
# ifndef PR_SET_VMA_ANON_NAME
#  define PR_SET_VMA_ANON_NAME 0
# endif
#endif // HAVE_PRCTL

/**
 * Set a name for the specified memory area.
 *
 * This feature requires Linux 5.17.
 */
static zend_always_inline void zend_mmap_set_name(const void *start, size_t len, const char *name)
{
#ifdef HAVE_PRCTL
	prctl(PR_SET_VMA, PR_SET_VMA_ANON_NAME, (unsigned long)start, len, (unsigned long)name);
#endif
}

#endif /* ZEND_MMAP_H */
Zend/zend_system_id.h000064400000002620151730543130010637 0ustar00/*
   +----------------------------------------------------------------------+
   | Copyright (c) The PHP Group                                          |
   +----------------------------------------------------------------------+
   | This source file is subject to version 3.01 of the PHP license,      |
   | that is bundled with this package in the file LICENSE, and is        |
   | available through the world-wide-web at the following url:           |
   | https://www.php.net/license/3_01.txt                                 |
   | If you did not receive a copy of the PHP license and are unable to   |
   | obtain it through the world-wide-web, please send a note to          |
   | license@php.net so we can mail you a copy immediately.               |
   +----------------------------------------------------------------------+
   | Author: Sammy Kaye Powers <sammyk@php.net>                           |
   +----------------------------------------------------------------------+
*/

#ifndef ZEND_SYSTEM_ID_H
#define ZEND_SYSTEM_ID_H

#include "zend_types.h"

BEGIN_EXTERN_C()
/* True global; Write-only during MINIT/startup */
extern ZEND_API char zend_system_id[32];

ZEND_API zend_result zend_add_system_entropy(const char *module_name, const char *hook_name, const void *data, size_t size);
END_EXTERN_C()

void zend_startup_system_id(void);
void zend_finalize_system_id(void);

#endif /* ZEND_SYSTEM_ID_H */
Zend/zend_generators.h000064400000016760151730543130011022 0ustar00/*
   +----------------------------------------------------------------------+
   | Zend Engine                                                          |
   +----------------------------------------------------------------------+
   | Copyright (c) Zend Technologies Ltd. (http://www.zend.com)           |
   +----------------------------------------------------------------------+
   | This source file is subject to version 2.00 of the Zend license,     |
   | that is bundled with this package in the file LICENSE, and is        |
   | available through the world-wide-web at the following url:           |
   | http://www.zend.com/license/2_00.txt.                                |
   | If you did not receive a copy of the Zend license and are unable to  |
   | obtain it through the world-wide-web, please send a note to          |
   | license@zend.com so we can mail you a copy immediately.              |
   +----------------------------------------------------------------------+
   | Authors: Nikita Popov <nikic@php.net>                                |
   |          Bob Weinand <bobwei9@hotmail.com>                           |
   +----------------------------------------------------------------------+
*/

#ifndef ZEND_GENERATORS_H
#define ZEND_GENERATORS_H

#include <stdint.h>

#include "zend_compile.h"

BEGIN_EXTERN_C()

extern ZEND_API zend_class_entry *zend_ce_generator;
extern ZEND_API zend_class_entry *zend_ce_ClosedGeneratorException;

typedef struct _zend_generator_node zend_generator_node;
typedef struct _zend_generator zend_generator;

/* The concept of `yield from` exposes problems when accessed at different levels of the chain of delegated generators. We need to be able to reference the currently executed Generator in all cases and still being able to access the return values of finished Generators.
 * The solution to this problem is a doubly-linked tree, which all Generators referenced in maintain a reference to. It should be impossible to avoid walking the tree in all cases. This way, we only need tree walks from leaf to root in case where some part of the `yield from` chain is passed to another `yield from`. (Update of leaf node pointer and list of multi-children nodes needed when leaf gets a child in direct path from leaf to root node.) But only in that case, which should be a fairly rare case (which is then possible, but not totally cheap).
 * The root of the tree is then the currently executed Generator. The subnodes of the tree (all except the root node) are all Generators which do `yield from`. Each node of the tree knows a pointer to one leaf descendant node. Each node with multiple children needs a list of all leaf descendant nodes paired with pointers to their respective child node. (The stack is determined by leaf node pointers) Nodes with only one child just don't need a list, there it is enough to just have a pointer to the child node. Further, leaf nodes store a pointer to the root node.
 * That way, when we advance any generator, we just need to look up a leaf node (which all have a reference to a root node). Then we can see at the root node whether current Generator is finished. If it isn't, all is fine and we can just continue. If the Generator finished, there will be two cases. Either it is a simple node with just one child, then go down to child node. Or it has multiple children and we now will remove the current leaf node from the list of nodes (unnecessary, is microoptimization) and go down to the child node whose reference was paired with current leaf node. Child node is then removed its parent reference and becomes new top node. Or the current node references the Generator we're currently executing, then we can continue from the YIELD_FROM opcode. When a node referenced as root node in a leaf node has a parent, then we go the way up until we find a root node without parent.
 * In case we go into a new `yield from` level, a node is created on top of current root and becomes the new root. Leaf node needs to be updated with new root node then.
 * When a Generator referenced by a node of the tree is added to `yield from`, that node now gets a list of children (we need to walk the descendants of that node and nodes of the tree of the other Generator down to the first multi-children node and copy all the leaf node pointers from there). In case there was no multi-children node (linear tree), we just add a pair (pointer to leaf node, pointer to child node), with the child node being in a direct path from leaf to this node.
 */

struct _zend_generator_node {
	zend_generator *parent; /* NULL for root */
	uint32_t children;
	union {
		HashTable *ht; /* if multiple children */
		zend_generator *single; /* if one child */
	} child;
	/* One generator can cache a direct pointer to the current root.
	 * The leaf member points back to the generator using the root cache. */
	union {
		zend_generator *leaf; /* if parent != NULL */
		zend_generator *root; /* if parent == NULL */
	} ptr;
};

struct _zend_generator {
	zend_object std;

	/* The suspended execution context. */
	zend_execute_data *execute_data;

	/* Frozen call stack for "yield" used in context of other calls */
	zend_execute_data *frozen_call_stack;

	/* Current value */
	zval value;
	/* Current key */
	zval key;
	/* Return value */
	zval retval;
	/* Variable to put sent value into */
	zval *send_target;
	/* Largest used integer key for auto-incrementing keys */
	zend_long largest_used_integer_key;

	/* Values specified by "yield from" to yield from this generator.
	 * This is only used for arrays or non-generator Traversables.
	 * This zval also uses the u2 structure in the same way as
	 * by-value foreach. */
	zval values;

	/* Node of waiting generators when multiple "yield from" expressions
	 * are nested. */
	zend_generator_node node;

	/* Fake execute_data for stacktraces */
	zend_execute_data execute_fake;

	/* The underlying function, equivalent to execute_data->func while
	 * the generator is alive. */
	zend_function *func;

	/* ZEND_GENERATOR_* flags */
	uint8_t flags;
};

static const uint8_t ZEND_GENERATOR_CURRENTLY_RUNNING = 0x1;
static const uint8_t ZEND_GENERATOR_FORCED_CLOSE      = 0x2;
static const uint8_t ZEND_GENERATOR_AT_FIRST_YIELD    = 0x4;
static const uint8_t ZEND_GENERATOR_DO_INIT           = 0x8;
static const uint8_t ZEND_GENERATOR_IN_FIBER          = 0x10;

void zend_register_generator_ce(void);
ZEND_API void zend_generator_close(zend_generator *generator, bool finished_execution);
ZEND_API void zend_generator_resume(zend_generator *generator);

ZEND_API void zend_generator_restore_call_stack(zend_generator *generator);
ZEND_API zend_execute_data* zend_generator_freeze_call_stack(zend_execute_data *execute_data);

void zend_generator_yield_from(zend_generator *generator, zend_generator *from);
ZEND_API zend_execute_data *zend_generator_check_placeholder_frame(zend_execute_data *ptr);

ZEND_API zend_generator *zend_generator_update_current(zend_generator *generator);
ZEND_API zend_generator *zend_generator_update_root(zend_generator *generator);
static zend_always_inline zend_generator *zend_generator_get_current(zend_generator *generator)
{
	if (EXPECTED(generator->node.parent == NULL)) {
		/* we're not in yield from mode */
		return generator;
	}

	zend_generator *root = generator->node.ptr.root;
	if (!root) {
		root = zend_generator_update_root(generator);
	}

	if (EXPECTED(root->execute_data)) {
		/* generator still running */
		return root;
	}

	return zend_generator_update_current(generator);
}

HashTable *zend_generator_frame_gc(zend_get_gc_buffer *gc_buffer, zend_generator *generator);

END_EXTERN_C()

#endif
Zend/zend_hash.h000064400000146366151730543130007602 0ustar00/*
   +----------------------------------------------------------------------+
   | Zend Engine                                                          |
   +----------------------------------------------------------------------+
   | Copyright (c) Zend Technologies Ltd. (http://www.zend.com)           |
   +----------------------------------------------------------------------+
   | This source file is subject to version 2.00 of the Zend license,     |
   | that is bundled with this package in the file LICENSE, and is        |
   | available through the world-wide-web at the following url:           |
   | http://www.zend.com/license/2_00.txt.                                |
   | If you did not receive a copy of the Zend license and are unable to  |
   | obtain it through the world-wide-web, please send a note to          |
   | license@zend.com so we can mail you a copy immediately.              |
   +----------------------------------------------------------------------+
   | Authors: Andi Gutmans <andi@php.net>                                 |
   |          Zeev Suraski <zeev@php.net>                                 |
   |          Dmitry Stogov <dmitry@php.net>                              |
   +----------------------------------------------------------------------+
*/

#ifndef ZEND_HASH_H
#define ZEND_HASH_H

#include "zend_types.h"
#include "zend_gc.h"
#include "zend_string.h"
#include "zend_sort.h"

typedef enum {
	HASH_KEY_IS_STRING = 1,
	HASH_KEY_IS_LONG,
	HASH_KEY_NON_EXISTENT
} zend_hash_key_type;

#define HASH_UPDATE 			(1<<0) /* Create new entry, or update the existing one. */
#define HASH_ADD				(1<<1) /* Create new entry, or fail if it exists. */
#define HASH_UPDATE_INDIRECT	(1<<2) /* If the given ht entry is an indirect zval, unwrap it before writing to it. \
										* When used with HASH_ADD, writing is allowed if the target zval is IS_UNDEF. */
#define HASH_ADD_NEW			(1<<3) /* Used when the offset is known not to exist. */
#define HASH_ADD_NEXT			(1<<4) /* Append to an array. (e.g. $array[] = 42;) */
#define HASH_LOOKUP				(1<<5) /* Look up an existing entry, or create one with a NULL value. */

#define HASH_FLAG_CONSISTENCY      ((1<<0) | (1<<1))
#define HASH_FLAG_PACKED           (1<<2)
#define HASH_FLAG_UNINITIALIZED    (1<<3)
#define HASH_FLAG_STATIC_KEYS      (1<<4) /* long and interned strings */
#define HASH_FLAG_HAS_EMPTY_IND    (1<<5)
#define HASH_FLAG_ALLOW_COW_VIOLATION (1<<6)

/* Only the low byte are real flags */
#define HASH_FLAG_MASK 0xff

#define HT_FLAGS(ht) (ht)->u.flags

#define HT_INVALIDATE(ht) do { \
		HT_FLAGS(ht) = HASH_FLAG_UNINITIALIZED; \
	} while (0)

#define HT_IS_INITIALIZED(ht) \
	((HT_FLAGS(ht) & HASH_FLAG_UNINITIALIZED) == 0)

#define HT_IS_PACKED(ht) \
	((HT_FLAGS(ht) & HASH_FLAG_PACKED) != 0)

#define HT_IS_WITHOUT_HOLES(ht) \
	((ht)->nNumUsed == (ht)->nNumOfElements)

#define HT_HAS_STATIC_KEYS_ONLY(ht) \
	((HT_FLAGS(ht) & (HASH_FLAG_PACKED|HASH_FLAG_STATIC_KEYS)) != 0)

#if ZEND_DEBUG
# define HT_ALLOW_COW_VIOLATION(ht) HT_FLAGS(ht) |= HASH_FLAG_ALLOW_COW_VIOLATION
#else
# define HT_ALLOW_COW_VIOLATION(ht)
#endif

#define HT_ITERATORS_COUNT(ht) (ht)->u.v.nIteratorsCount
#define HT_ITERATORS_OVERFLOW(ht) (HT_ITERATORS_COUNT(ht) == 0xff)
#define HT_HAS_ITERATORS(ht) (HT_ITERATORS_COUNT(ht) != 0)

#define HT_SET_ITERATORS_COUNT(ht, iters) \
	do { HT_ITERATORS_COUNT(ht) = (iters); } while (0)
#define HT_INC_ITERATORS_COUNT(ht) \
	HT_SET_ITERATORS_COUNT(ht, HT_ITERATORS_COUNT(ht) + 1)
#define HT_DEC_ITERATORS_COUNT(ht) \
	HT_SET_ITERATORS_COUNT(ht, HT_ITERATORS_COUNT(ht) - 1)

extern ZEND_API const HashTable zend_empty_array;

#define ZVAL_EMPTY_ARRAY(z) do {						\
		zval *__z = (z);								\
		Z_ARR_P(__z) = (zend_array*)&zend_empty_array;	\
		Z_TYPE_INFO_P(__z) = IS_ARRAY; \
	} while (0)


typedef struct _zend_hash_key {
	zend_ulong h;
	zend_string *key;
} zend_hash_key;

typedef bool (*merge_checker_func_t)(HashTable *target_ht, zval *source_data, zend_hash_key *hash_key, void *pParam);

BEGIN_EXTERN_C()

/* startup/shutdown */
ZEND_API void ZEND_FASTCALL _zend_hash_init(HashTable *ht, uint32_t nSize, dtor_func_t pDestructor, bool persistent);
ZEND_API void ZEND_FASTCALL zend_hash_destroy(HashTable *ht);
ZEND_API void ZEND_FASTCALL zend_hash_clean(HashTable *ht);

#define zend_hash_init(ht, nSize, pHashFunction, pDestructor, persistent) \
	_zend_hash_init((ht), (nSize), (pDestructor), (persistent))

ZEND_API void ZEND_FASTCALL zend_hash_real_init(HashTable *ht, bool packed);
ZEND_API void ZEND_FASTCALL zend_hash_real_init_packed(HashTable *ht);
ZEND_API void ZEND_FASTCALL zend_hash_real_init_mixed(HashTable *ht);
ZEND_API void ZEND_FASTCALL zend_hash_packed_to_hash(HashTable *ht);
ZEND_API void ZEND_FASTCALL zend_hash_to_packed(HashTable *ht);
ZEND_API void ZEND_FASTCALL zend_hash_extend(HashTable *ht, uint32_t nSize, bool packed);
ZEND_API void ZEND_FASTCALL zend_hash_discard(HashTable *ht, uint32_t nNumUsed);
ZEND_API void ZEND_FASTCALL zend_hash_packed_grow(HashTable *ht);

/* additions/updates/changes */
ZEND_API zval* ZEND_FASTCALL zend_hash_add_or_update(HashTable *ht, zend_string *key, zval *pData, uint32_t flag);
ZEND_API zval* ZEND_FASTCALL zend_hash_update(HashTable *ht, zend_string *key,zval *pData);
ZEND_API zval* ZEND_FASTCALL zend_hash_update_ind(HashTable *ht, zend_string *key,zval *pData);
ZEND_API zval* ZEND_FASTCALL zend_hash_add(HashTable *ht, zend_string *key,zval *pData);
ZEND_API zval* ZEND_FASTCALL zend_hash_add_new(HashTable *ht, zend_string *key,zval *pData);

ZEND_API zval* ZEND_FASTCALL zend_hash_str_add_or_update(HashTable *ht, const char *key, size_t len, zval *pData, uint32_t flag);
ZEND_API zval* ZEND_FASTCALL zend_hash_str_update(HashTable *ht, const char *key, size_t len, zval *pData);
ZEND_API zval* ZEND_FASTCALL zend_hash_str_update_ind(HashTable *ht, const char *key, size_t len, zval *pData);
ZEND_API zval* ZEND_FASTCALL zend_hash_str_add(HashTable *ht, const char *key, size_t len, zval *pData);
ZEND_API zval* ZEND_FASTCALL zend_hash_str_add_new(HashTable *ht, const char *key, size_t len, zval *pData);

ZEND_API zval* ZEND_FASTCALL zend_hash_index_add_or_update(HashTable *ht, zend_ulong h, zval *pData, uint32_t flag);
ZEND_API zval* ZEND_FASTCALL zend_hash_index_add(HashTable *ht, zend_ulong h, zval *pData);
ZEND_API zval* ZEND_FASTCALL zend_hash_index_add_new(HashTable *ht, zend_ulong h, zval *pData);
ZEND_API zval* ZEND_FASTCALL zend_hash_index_update(HashTable *ht, zend_ulong h, zval *pData);
ZEND_API zval* ZEND_FASTCALL zend_hash_next_index_insert(HashTable *ht, zval *pData);
ZEND_API zval* ZEND_FASTCALL zend_hash_next_index_insert_new(HashTable *ht, zval *pData);

ZEND_API zval* ZEND_FASTCALL zend_hash_index_add_empty_element(HashTable *ht, zend_ulong h);
ZEND_API zval* ZEND_FASTCALL zend_hash_add_empty_element(HashTable *ht, zend_string *key);
ZEND_API zval* ZEND_FASTCALL zend_hash_str_add_empty_element(HashTable *ht, const char *key, size_t len);

ZEND_API zval* ZEND_FASTCALL zend_hash_set_bucket_key(HashTable *ht, Bucket *p, zend_string *key);

#define ZEND_HASH_APPLY_KEEP				0
#define ZEND_HASH_APPLY_REMOVE				1<<0
#define ZEND_HASH_APPLY_STOP				1<<1

typedef int (*apply_func_t)(zval *pDest);
typedef int (*apply_func_arg_t)(zval *pDest, void *argument);
typedef int (*apply_func_args_t)(zval *pDest, int num_args, va_list args, zend_hash_key *hash_key);

ZEND_API void ZEND_FASTCALL zend_hash_graceful_destroy(HashTable *ht);
ZEND_API void ZEND_FASTCALL zend_hash_graceful_reverse_destroy(HashTable *ht);
ZEND_API void ZEND_FASTCALL zend_hash_apply(HashTable *ht, apply_func_t apply_func);
ZEND_API void ZEND_FASTCALL zend_hash_apply_with_argument(HashTable *ht, apply_func_arg_t apply_func, void *);
ZEND_API void zend_hash_apply_with_arguments(HashTable *ht, apply_func_args_t apply_func, int, ...);

/* This function should be used with special care (in other words,
 * it should usually not be used).  When used with the ZEND_HASH_APPLY_STOP
 * return value, it assumes things about the order of the elements in the hash.
 * Also, it does not provide the same kind of reentrancy protection that
 * the standard apply functions do.
 */
ZEND_API void ZEND_FASTCALL zend_hash_reverse_apply(HashTable *ht, apply_func_t apply_func);


/* Deletes */
ZEND_API zend_result ZEND_FASTCALL zend_hash_del(HashTable *ht, zend_string *key);
ZEND_API zend_result ZEND_FASTCALL zend_hash_del_ind(HashTable *ht, zend_string *key);
ZEND_API zend_result ZEND_FASTCALL zend_hash_str_del(HashTable *ht, const char *key, size_t len);
ZEND_API zend_result ZEND_FASTCALL zend_hash_str_del_ind(HashTable *ht, const char *key, size_t len);
ZEND_API zend_result ZEND_FASTCALL zend_hash_index_del(HashTable *ht, zend_ulong h);
ZEND_API void ZEND_FASTCALL zend_hash_del_bucket(HashTable *ht, Bucket *p);
ZEND_API void ZEND_FASTCALL zend_hash_packed_del_val(HashTable *ht, zval *zv);

/* Data retrieval */
ZEND_API zval* ZEND_FASTCALL zend_hash_find(const HashTable *ht, zend_string *key);
ZEND_API zval* ZEND_FASTCALL zend_hash_str_find(const HashTable *ht, const char *key, size_t len);
ZEND_API zval* ZEND_FASTCALL zend_hash_index_find(const HashTable *ht, zend_ulong h);
ZEND_API zval* ZEND_FASTCALL _zend_hash_index_find(const HashTable *ht, zend_ulong h);

/* The same as zend_hash_find(), but hash value of the key must be already calculated. */
ZEND_API zval* ZEND_FASTCALL zend_hash_find_known_hash(const HashTable *ht, const zend_string *key);

static zend_always_inline zval *zend_hash_find_ex(const HashTable *ht, zend_string *key, bool known_hash)
{
	if (known_hash) {
		return zend_hash_find_known_hash(ht, key);
	} else {
		return zend_hash_find(ht, key);
	}
}

#define ZEND_HASH_INDEX_FIND(_ht, _h, _ret, _not_found) do { \
		if (EXPECTED(HT_IS_PACKED(_ht))) { \
			if (EXPECTED((zend_ulong)(_h) < (zend_ulong)(_ht)->nNumUsed)) { \
				_ret = &_ht->arPacked[_h]; \
				if (UNEXPECTED(Z_TYPE_P(_ret) == IS_UNDEF)) { \
					goto _not_found; \
				} \
			} else { \
				goto _not_found; \
			} \
		} else { \
			_ret = _zend_hash_index_find(_ht, _h); \
			if (UNEXPECTED(_ret == NULL)) { \
				goto _not_found; \
			} \
		} \
	} while (0)


/* Find or add NULL, if doesn't exist */
ZEND_API zval* ZEND_FASTCALL zend_hash_lookup(HashTable *ht, zend_string *key);
ZEND_API zval* ZEND_FASTCALL zend_hash_index_lookup(HashTable *ht, zend_ulong h);

#define ZEND_HASH_INDEX_LOOKUP(_ht, _h, _ret) do { \
		if (EXPECTED(HT_IS_PACKED(_ht))) { \
			if (EXPECTED((zend_ulong)(_h) < (zend_ulong)(_ht)->nNumUsed)) { \
				_ret = &_ht->arPacked[_h]; \
				if (EXPECTED(Z_TYPE_P(_ret) != IS_UNDEF)) { \
					break; \
				} \
			} \
		} \
		_ret = zend_hash_index_lookup(_ht, _h); \
	} while (0)

/* Misc */
static zend_always_inline bool zend_hash_exists(const HashTable *ht, zend_string *key)
{
	return zend_hash_find(ht, key) != NULL;
}

static zend_always_inline bool zend_hash_str_exists(const HashTable *ht, const char *str, size_t len)
{
	return zend_hash_str_find(ht, str, len) != NULL;
}

static zend_always_inline bool zend_hash_index_exists(const HashTable *ht, zend_ulong h)
{
	return zend_hash_index_find(ht, h) != NULL;
}

/* traversing */
ZEND_API HashPosition ZEND_FASTCALL zend_hash_get_current_pos_ex(const HashTable *ht, HashPosition pos);
ZEND_API HashPosition ZEND_FASTCALL zend_hash_get_current_pos(const HashTable *ht);

ZEND_API zend_result   ZEND_FASTCALL zend_hash_move_forward_ex(const HashTable *ht, HashPosition *pos);
ZEND_API zend_result   ZEND_FASTCALL zend_hash_move_backwards_ex(const HashTable *ht, HashPosition *pos);
ZEND_API zend_hash_key_type  ZEND_FASTCALL zend_hash_get_current_key_ex(const HashTable *ht, zend_string **str_index, zend_ulong *num_index, const HashPosition *pos);
ZEND_API void  ZEND_FASTCALL zend_hash_get_current_key_zval_ex(const HashTable *ht, zval *key, const HashPosition *pos);
ZEND_API zend_hash_key_type ZEND_FASTCALL zend_hash_get_current_key_type_ex(const HashTable *ht, const HashPosition *pos);
ZEND_API zval* ZEND_FASTCALL zend_hash_get_current_data_ex(const HashTable *ht, const HashPosition *pos);
ZEND_API void  ZEND_FASTCALL zend_hash_internal_pointer_reset_ex(const HashTable *ht, HashPosition *pos);
ZEND_API void  ZEND_FASTCALL zend_hash_internal_pointer_end_ex(const HashTable *ht, HashPosition *pos);

static zend_always_inline zend_result zend_hash_has_more_elements_ex(const HashTable *ht, const HashPosition *pos) {
	return (zend_hash_get_current_key_type_ex(ht, pos) == HASH_KEY_NON_EXISTENT ? FAILURE : SUCCESS);
}
static zend_always_inline zend_result zend_hash_has_more_elements(const HashTable *ht) {
	return zend_hash_has_more_elements_ex(ht, &ht->nInternalPointer);
}
static zend_always_inline zend_result zend_hash_move_forward(HashTable *ht) {
	return zend_hash_move_forward_ex(ht, &ht->nInternalPointer);
}
static zend_always_inline zend_result zend_hash_move_backwards(HashTable *ht) {
	return zend_hash_move_backwards_ex(ht, &ht->nInternalPointer);
}
static zend_always_inline zend_hash_key_type zend_hash_get_current_key(const HashTable *ht, zend_string **str_index, zend_ulong *num_index) {
	return zend_hash_get_current_key_ex(ht, str_index, num_index, &ht->nInternalPointer);
}
static zend_always_inline void zend_hash_get_current_key_zval(const HashTable *ht, zval *key) {
	zend_hash_get_current_key_zval_ex(ht, key, &ht->nInternalPointer);
}
static zend_always_inline zend_hash_key_type zend_hash_get_current_key_type(const HashTable *ht) {
	return zend_hash_get_current_key_type_ex(ht, &ht->nInternalPointer);
}
static zend_always_inline zval* zend_hash_get_current_data(const HashTable *ht) {
	return zend_hash_get_current_data_ex(ht, &ht->nInternalPointer);
}
static zend_always_inline void zend_hash_internal_pointer_reset(HashTable *ht) {
	zend_hash_internal_pointer_reset_ex(ht, &ht->nInternalPointer);
}
static zend_always_inline void zend_hash_internal_pointer_end(HashTable *ht) {
	zend_hash_internal_pointer_end_ex(ht, &ht->nInternalPointer);
}

/* Copying, merging and sorting */
ZEND_API void  ZEND_FASTCALL zend_hash_copy(HashTable *target, const HashTable *source, copy_ctor_func_t pCopyConstructor);
ZEND_API void  ZEND_FASTCALL zend_hash_merge(HashTable *target, const HashTable *source, copy_ctor_func_t pCopyConstructor, bool overwrite);
ZEND_API void  ZEND_FASTCALL zend_hash_merge_ex(HashTable *target, const HashTable *source, copy_ctor_func_t pCopyConstructor, merge_checker_func_t pMergeSource, void *pParam);
ZEND_API void  zend_hash_bucket_swap(Bucket *p, Bucket *q);
ZEND_API void  zend_hash_bucket_renum_swap(Bucket *p, Bucket *q);
ZEND_API void  zend_hash_bucket_packed_swap(Bucket *p, Bucket *q);

typedef int (*bucket_compare_func_t)(Bucket *a, Bucket *b);
ZEND_API int   zend_hash_compare(HashTable *ht1, HashTable *ht2, compare_func_t compar, bool ordered);
ZEND_API void  ZEND_FASTCALL zend_hash_sort_ex(HashTable *ht, sort_func_t sort_func, bucket_compare_func_t compare_func, bool renumber);
ZEND_API void  ZEND_FASTCALL zend_array_sort_ex(HashTable *ht, sort_func_t sort_func, bucket_compare_func_t compare_func, bool renumber);
ZEND_API zval* ZEND_FASTCALL zend_hash_minmax(const HashTable *ht, compare_func_t compar, uint32_t flag);

static zend_always_inline void ZEND_FASTCALL zend_hash_sort(HashTable *ht, bucket_compare_func_t compare_func, bool renumber) {
	zend_hash_sort_ex(ht, zend_sort, compare_func, renumber);
}

/* Use this variant over zend_hash_sort() when sorting user arrays that may
 * trigger user code. It will ensure the user code cannot free the array during
 * sorting. */
static zend_always_inline void zend_array_sort(HashTable *ht, bucket_compare_func_t compare_func, bool renumber) {
	zend_array_sort_ex(ht, zend_sort, compare_func, renumber);
}

static zend_always_inline uint32_t zend_hash_num_elements(const HashTable *ht) {
	return ht->nNumOfElements;
}

static zend_always_inline zend_long zend_hash_next_free_element(const HashTable *ht) {
	return ht->nNextFreeElement;
}

ZEND_API void ZEND_FASTCALL zend_hash_rehash(HashTable *ht);

#if !ZEND_DEBUG && defined(HAVE_BUILTIN_CONSTANT_P)
# define zend_new_array(size) \
	(__builtin_constant_p(size) ? \
		((((uint32_t)(size)) <= HT_MIN_SIZE) ? \
			_zend_new_array_0() \
		: \
			_zend_new_array((size)) \
		) \
	: \
		_zend_new_array((size)) \
	)
#else
# define zend_new_array(size) \
	_zend_new_array(size)
#endif

ZEND_API HashTable* ZEND_FASTCALL _zend_new_array_0(void);
ZEND_API HashTable* ZEND_FASTCALL _zend_new_array(uint32_t size);
ZEND_API HashTable* ZEND_FASTCALL zend_new_pair(const zval *val1, const zval *val2);
ZEND_API uint32_t zend_array_count(HashTable *ht);
ZEND_API HashTable* ZEND_FASTCALL zend_array_dup(const HashTable *source);
ZEND_API void ZEND_FASTCALL zend_array_destroy(HashTable *ht);
ZEND_API HashTable* zend_array_to_list(const HashTable *source);
ZEND_API void ZEND_FASTCALL zend_symtable_clean(HashTable *ht);
ZEND_API HashTable* ZEND_FASTCALL zend_symtable_to_proptable(HashTable *ht);
ZEND_API HashTable* ZEND_FASTCALL zend_proptable_to_symtable(HashTable *ht, bool always_duplicate);

ZEND_API bool ZEND_FASTCALL _zend_handle_numeric_str_ex(const char *key, size_t length, zend_ulong *idx);

ZEND_API uint32_t     ZEND_FASTCALL zend_hash_iterator_add(HashTable *ht, HashPosition pos);
ZEND_API HashPosition ZEND_FASTCALL zend_hash_iterator_pos(uint32_t idx, HashTable *ht);
ZEND_API HashPosition ZEND_FASTCALL zend_hash_iterator_pos_ex(uint32_t idx, zval *array);
ZEND_API void         ZEND_FASTCALL zend_hash_iterator_del(uint32_t idx);
ZEND_API HashPosition ZEND_FASTCALL zend_hash_iterators_lower_pos(const HashTable *ht, HashPosition start);
ZEND_API void         ZEND_FASTCALL _zend_hash_iterators_update(const HashTable *ht, HashPosition from, HashPosition to);
ZEND_API void         ZEND_FASTCALL zend_hash_iterators_advance(const HashTable *ht, HashPosition step);

static zend_always_inline void zend_hash_iterators_update(const HashTable *ht, HashPosition from, HashPosition to)
{
	if (UNEXPECTED(HT_HAS_ITERATORS(ht))) {
		_zend_hash_iterators_update(ht, from, to);
	}
}

/* For regular arrays (non-persistent, storing zvals). */
static zend_always_inline void zend_array_release(zend_array *array)
{
	if (!(GC_FLAGS(array) & IS_ARRAY_IMMUTABLE)) {
		if (GC_DELREF(array) == 0) {
			zend_array_destroy(array);
		}
	}
}

/* For general hashes (possibly persistent, storing any kind of value). */
static zend_always_inline void zend_hash_release(zend_array *array)
{
	if (!(GC_FLAGS(array) & IS_ARRAY_IMMUTABLE)) {
		if (GC_DELREF(array) == 0) {
			zend_hash_destroy(array);
			pefree(array, GC_FLAGS(array) & IS_ARRAY_PERSISTENT);
		}
	}
}

END_EXTERN_C()

#define ZEND_INIT_SYMTABLE(ht)								\
	ZEND_INIT_SYMTABLE_EX(ht, 8, 0)

#define ZEND_INIT_SYMTABLE_EX(ht, n, persistent)			\
	zend_hash_init(ht, n, NULL, ZVAL_PTR_DTOR, persistent)

static zend_always_inline bool _zend_handle_numeric_str(const char *key, size_t length, zend_ulong *idx)
{
	const char *tmp = key;

	if (EXPECTED(*tmp > '9')) {
		return 0;
	} else if (*tmp < '0') {
		if (*tmp != '-') {
			return 0;
		}
		tmp++;
		if (*tmp > '9' || *tmp < '0') {
			return 0;
		}
	}
	return _zend_handle_numeric_str_ex(key, length, idx);
}

#define ZEND_HANDLE_NUMERIC_STR(key, length, idx) \
	_zend_handle_numeric_str(key, length, &idx)

#define ZEND_HANDLE_NUMERIC(key, idx) \
	ZEND_HANDLE_NUMERIC_STR(ZSTR_VAL(key), ZSTR_LEN(key), idx)


static zend_always_inline zval *zend_hash_find_ind(const HashTable *ht, zend_string *key)
{
	zval *zv;

	zv = zend_hash_find(ht, key);
	return (zv && Z_TYPE_P(zv) == IS_INDIRECT) ?
		((Z_TYPE_P(Z_INDIRECT_P(zv)) != IS_UNDEF) ? Z_INDIRECT_P(zv) : NULL) : zv;
}


static zend_always_inline zval *zend_hash_find_ex_ind(const HashTable *ht, zend_string *key, bool known_hash)
{
	zval *zv;

	zv = zend_hash_find_ex(ht, key, known_hash);
	return (zv && Z_TYPE_P(zv) == IS_INDIRECT) ?
		((Z_TYPE_P(Z_INDIRECT_P(zv)) != IS_UNDEF) ? Z_INDIRECT_P(zv) : NULL) : zv;
}


static zend_always_inline bool zend_hash_exists_ind(const HashTable *ht, zend_string *key)
{
	zval *zv;

	zv = zend_hash_find(ht, key);
	return zv && (Z_TYPE_P(zv) != IS_INDIRECT ||
			Z_TYPE_P(Z_INDIRECT_P(zv)) != IS_UNDEF);
}


static zend_always_inline zval *zend_hash_str_find_ind(const HashTable *ht, const char *str, size_t len)
{
	zval *zv;

	zv = zend_hash_str_find(ht, str, len);
	return (zv && Z_TYPE_P(zv) == IS_INDIRECT) ?
		((Z_TYPE_P(Z_INDIRECT_P(zv)) != IS_UNDEF) ? Z_INDIRECT_P(zv) : NULL) : zv;
}


static zend_always_inline bool zend_hash_str_exists_ind(const HashTable *ht, const char *str, size_t len)
{
	zval *zv;

	zv = zend_hash_str_find(ht, str, len);
	return zv && (Z_TYPE_P(zv) != IS_INDIRECT ||
			Z_TYPE_P(Z_INDIRECT_P(zv)) != IS_UNDEF);
}

static zend_always_inline zval *zend_symtable_add_new(HashTable *ht, zend_string *key, zval *pData)
{
	zend_ulong idx;

	if (ZEND_HANDLE_NUMERIC(key, idx)) {
		return zend_hash_index_add_new(ht, idx, pData);
	} else {
		return zend_hash_add_new(ht, key, pData);
	}
}

static zend_always_inline zval *zend_symtable_update(HashTable *ht, zend_string *key, zval *pData)
{
	zend_ulong idx;

	if (ZEND_HANDLE_NUMERIC(key, idx)) {
		return zend_hash_index_update(ht, idx, pData);
	} else {
		return zend_hash_update(ht, key, pData);
	}
}


static zend_always_inline zval *zend_symtable_update_ind(HashTable *ht, zend_string *key, zval *pData)
{
	zend_ulong idx;

	if (ZEND_HANDLE_NUMERIC(key, idx)) {
		return zend_hash_index_update(ht, idx, pData);
	} else {
		return zend_hash_update_ind(ht, key, pData);
	}
}


static zend_always_inline zend_result zend_symtable_del(HashTable *ht, zend_string *key)
{
	zend_ulong idx;

	if (ZEND_HANDLE_NUMERIC(key, idx)) {
		return zend_hash_index_del(ht, idx);
	} else {
		return zend_hash_del(ht, key);
	}
}


static zend_always_inline zend_result zend_symtable_del_ind(HashTable *ht, zend_string *key)
{
	zend_ulong idx;

	if (ZEND_HANDLE_NUMERIC(key, idx)) {
		return zend_hash_index_del(ht, idx);
	} else {
		return zend_hash_del_ind(ht, key);
	}
}


static zend_always_inline zval *zend_symtable_find(const HashTable *ht, zend_string *key)
{
	zend_ulong idx;

	if (ZEND_HANDLE_NUMERIC(key, idx)) {
		return zend_hash_index_find(ht, idx);
	} else {
		return zend_hash_find(ht, key);
	}
}


static zend_always_inline zval *zend_symtable_find_ind(const HashTable *ht, zend_string *key)
{
	zend_ulong idx;

	if (ZEND_HANDLE_NUMERIC(key, idx)) {
		return zend_hash_index_find(ht, idx);
	} else {
		return zend_hash_find_ind(ht, key);
	}
}


static zend_always_inline bool zend_symtable_exists(const HashTable *ht, zend_string *key)
{
	zend_ulong idx;

	if (ZEND_HANDLE_NUMERIC(key, idx)) {
		return zend_hash_index_exists(ht, idx);
	} else {
		return zend_hash_exists(ht, key);
	}
}


static zend_always_inline bool zend_symtable_exists_ind(const HashTable *ht, zend_string *key)
{
	zend_ulong idx;

	if (ZEND_HANDLE_NUMERIC(key, idx)) {
		return zend_hash_index_exists(ht, idx);
	} else {
		return zend_hash_exists_ind(ht, key);
	}
}


static zend_always_inline zval *zend_symtable_str_update(HashTable *ht, const char *str, size_t len, zval *pData)
{
	zend_ulong idx;

	if (ZEND_HANDLE_NUMERIC_STR(str, len, idx)) {
		return zend_hash_index_update(ht, idx, pData);
	} else {
		return zend_hash_str_update(ht, str, len, pData);
	}
}


static zend_always_inline zval *zend_symtable_str_update_ind(HashTable *ht, const char *str, size_t len, zval *pData)
{
	zend_ulong idx;

	if (ZEND_HANDLE_NUMERIC_STR(str, len, idx)) {
		return zend_hash_index_update(ht, idx, pData);
	} else {
		return zend_hash_str_update_ind(ht, str, len, pData);
	}
}


static zend_always_inline zend_result zend_symtable_str_del(HashTable *ht, const char *str, size_t len)
{
	zend_ulong idx;

	if (ZEND_HANDLE_NUMERIC_STR(str, len, idx)) {
		return zend_hash_index_del(ht, idx);
	} else {
		return zend_hash_str_del(ht, str, len);
	}
}


static zend_always_inline zend_result zend_symtable_str_del_ind(HashTable *ht, const char *str, size_t len)
{
	zend_ulong idx;

	if (ZEND_HANDLE_NUMERIC_STR(str, len, idx)) {
		return zend_hash_index_del(ht, idx);
	} else {
		return zend_hash_str_del_ind(ht, str, len);
	}
}


static zend_always_inline zval *zend_symtable_str_find(HashTable *ht, const char *str, size_t len)
{
	zend_ulong idx;

	if (ZEND_HANDLE_NUMERIC_STR(str, len, idx)) {
		return zend_hash_index_find(ht, idx);
	} else {
		return zend_hash_str_find(ht, str, len);
	}
}


static zend_always_inline bool zend_symtable_str_exists(HashTable *ht, const char *str, size_t len)
{
	zend_ulong idx;

	if (ZEND_HANDLE_NUMERIC_STR(str, len, idx)) {
		return zend_hash_index_exists(ht, idx);
	} else {
		return zend_hash_str_exists(ht, str, len);
	}
}

static zend_always_inline void *zend_hash_add_ptr(HashTable *ht, zend_string *key, void *pData)
{
	zval tmp, *zv;

	ZVAL_PTR(&tmp, pData);
	zv = zend_hash_add(ht, key, &tmp);
	if (zv) {
		ZEND_ASSERT(Z_PTR_P(zv));
		return Z_PTR_P(zv);
	} else {
		return NULL;
	}
}

static zend_always_inline void *zend_hash_add_new_ptr(HashTable *ht, zend_string *key, void *pData)
{
	zval tmp, *zv;

	ZVAL_PTR(&tmp, pData);
	zv = zend_hash_add_new(ht, key, &tmp);
	if (zv) {
		ZEND_ASSERT(Z_PTR_P(zv));
		return Z_PTR_P(zv);
	} else {
		return NULL;
	}
}

static zend_always_inline void *zend_hash_str_add_ptr(HashTable *ht, const char *str, size_t len, void *pData)
{
	zval tmp, *zv;

	ZVAL_PTR(&tmp, pData);
	zv = zend_hash_str_add(ht, str, len, &tmp);
	if (zv) {
		ZEND_ASSERT(Z_PTR_P(zv));
		return Z_PTR_P(zv);
	} else {
		return NULL;
	}
}

static zend_always_inline void *zend_hash_str_add_new_ptr(HashTable *ht, const char *str, size_t len, void *pData)
{
	zval tmp, *zv;

	ZVAL_PTR(&tmp, pData);
	zv = zend_hash_str_add_new(ht, str, len, &tmp);
	if (zv) {
		ZEND_ASSERT(Z_PTR_P(zv));
		return Z_PTR_P(zv);
	} else {
		return NULL;
	}
}

static zend_always_inline void *zend_hash_update_ptr(HashTable *ht, zend_string *key, void *pData)
{
	zval tmp, *zv;

	ZVAL_PTR(&tmp, pData);
	zv = zend_hash_update(ht, key, &tmp);
	ZEND_ASSERT(Z_PTR_P(zv));
	return Z_PTR_P(zv);
}

static zend_always_inline void *zend_hash_str_update_ptr(HashTable *ht, const char *str, size_t len, void *pData)
{
	zval tmp, *zv;

	ZVAL_PTR(&tmp, pData);
	zv = zend_hash_str_update(ht, str, len, &tmp);
	ZEND_ASSERT(Z_PTR_P(zv));
	return Z_PTR_P(zv);
}

static zend_always_inline void *zend_hash_add_mem(HashTable *ht, zend_string *key, void *pData, size_t size)
{
	zval tmp, *zv;

	ZVAL_PTR(&tmp, NULL);
	if ((zv = zend_hash_add(ht, key, &tmp))) {
		Z_PTR_P(zv) = pemalloc(size, GC_FLAGS(ht) & IS_ARRAY_PERSISTENT);
		memcpy(Z_PTR_P(zv), pData, size);
		return Z_PTR_P(zv);
	}
	return NULL;
}

static zend_always_inline void *zend_hash_add_new_mem(HashTable *ht, zend_string *key, void *pData, size_t size)
{
	zval tmp, *zv;

	ZVAL_PTR(&tmp, NULL);
	if ((zv = zend_hash_add_new(ht, key, &tmp))) {
		Z_PTR_P(zv) = pemalloc(size, GC_FLAGS(ht) & IS_ARRAY_PERSISTENT);
		memcpy(Z_PTR_P(zv), pData, size);
		return Z_PTR_P(zv);
	}
	return NULL;
}

static zend_always_inline void *zend_hash_str_add_mem(HashTable *ht, const char *str, size_t len, void *pData, size_t size)
{
	zval tmp, *zv;

	ZVAL_PTR(&tmp, NULL);
	if ((zv = zend_hash_str_add(ht, str, len, &tmp))) {
		Z_PTR_P(zv) = pemalloc(size, GC_FLAGS(ht) & IS_ARRAY_PERSISTENT);
		memcpy(Z_PTR_P(zv), pData, size);
		return Z_PTR_P(zv);
	}
	return NULL;
}

static zend_always_inline void *zend_hash_str_add_new_mem(HashTable *ht, const char *str, size_t len, void *pData, size_t size)
{
	zval tmp, *zv;

	ZVAL_PTR(&tmp, NULL);
	if ((zv = zend_hash_str_add_new(ht, str, len, &tmp))) {
		Z_PTR_P(zv) = pemalloc(size, GC_FLAGS(ht) & IS_ARRAY_PERSISTENT);
		memcpy(Z_PTR_P(zv), pData, size);
		return Z_PTR_P(zv);
	}
	return NULL;
}

static zend_always_inline void *zend_hash_update_mem(HashTable *ht, zend_string *key, void *pData, size_t size)
{
	void *p;

	p = pemalloc(size, GC_FLAGS(ht) & IS_ARRAY_PERSISTENT);
	memcpy(p, pData, size);
	return zend_hash_update_ptr(ht, key, p);
}

static zend_always_inline void *zend_hash_str_update_mem(HashTable *ht, const char *str, size_t len, void *pData, size_t size)
{
	void *p;

	p = pemalloc(size, GC_FLAGS(ht) & IS_ARRAY_PERSISTENT);
	memcpy(p, pData, size);
	return zend_hash_str_update_ptr(ht, str, len, p);
}

static zend_always_inline void *zend_hash_index_add_ptr(HashTable *ht, zend_ulong h, void *pData)
{
	zval tmp, *zv;

	ZVAL_PTR(&tmp, pData);
	zv = zend_hash_index_add(ht, h, &tmp);
	return zv ? Z_PTR_P(zv) : NULL;
}

static zend_always_inline void *zend_hash_index_add_new_ptr(HashTable *ht, zend_ulong h, void *pData)
{
	zval tmp, *zv;

	ZVAL_PTR(&tmp, pData);
	zv = zend_hash_index_add_new(ht, h, &tmp);
	return zv ? Z_PTR_P(zv) : NULL;
}

static zend_always_inline void *zend_hash_index_update_ptr(HashTable *ht, zend_ulong h, void *pData)
{
	zval tmp, *zv;

	ZVAL_PTR(&tmp, pData);
	zv = zend_hash_index_update(ht, h, &tmp);
	ZEND_ASSERT(Z_PTR_P(zv));
	return Z_PTR_P(zv);
}

static zend_always_inline void *zend_hash_index_add_mem(HashTable *ht, zend_ulong h, void *pData, size_t size)
{
	zval tmp, *zv;

	ZVAL_PTR(&tmp, NULL);
	if ((zv = zend_hash_index_add(ht, h, &tmp))) {
		Z_PTR_P(zv) = pemalloc(size, GC_FLAGS(ht) & IS_ARRAY_PERSISTENT);
		memcpy(Z_PTR_P(zv), pData, size);
		return Z_PTR_P(zv);
	}
	return NULL;
}

static zend_always_inline void *zend_hash_next_index_insert_ptr(HashTable *ht, void *pData)
{
	zval tmp, *zv;

	ZVAL_PTR(&tmp, pData);
	zv = zend_hash_next_index_insert(ht, &tmp);
	if (zv) {
		ZEND_ASSERT(Z_PTR_P(zv));
		return Z_PTR_P(zv);
	} else {
		return NULL;
	}
}

static zend_always_inline void *zend_hash_index_update_mem(HashTable *ht, zend_ulong h, void *pData, size_t size)
{
	void *p;

	p = pemalloc(size, GC_FLAGS(ht) & IS_ARRAY_PERSISTENT);
	memcpy(p, pData, size);
	return zend_hash_index_update_ptr(ht, h, p);
}

static zend_always_inline void *zend_hash_next_index_insert_mem(HashTable *ht, void *pData, size_t size)
{
	zval tmp;

	void *p = pemalloc(size, GC_FLAGS(ht) & IS_ARRAY_PERSISTENT);
	memcpy(p, pData, size);
	ZVAL_PTR(&tmp, p);
	if (!zend_hash_next_index_insert(ht, &tmp)) {
		pefree(p, GC_FLAGS(ht) & IS_ARRAY_PERSISTENT);
		return NULL;
	}
	return p;
}

static zend_always_inline void *zend_hash_find_ptr(const HashTable *ht, zend_string *key)
{
	zval *zv;

	zv = zend_hash_find(ht, key);
	if (zv) {
		ZEND_ASSUME(Z_PTR_P(zv));
		return Z_PTR_P(zv);
	} else {
		return NULL;
	}
}

static zend_always_inline void *zend_hash_find_ex_ptr(const HashTable *ht, zend_string *key, bool known_hash)
{
	zval *zv;

	zv = zend_hash_find_ex(ht, key, known_hash);
	if (zv) {
		ZEND_ASSUME(Z_PTR_P(zv));
		return Z_PTR_P(zv);
	} else {
		return NULL;
	}
}

static zend_always_inline void *zend_hash_str_find_ptr(const HashTable *ht, const char *str, size_t len)
{
	zval *zv;

	zv = zend_hash_str_find(ht, str, len);
	if (zv) {
		ZEND_ASSUME(Z_PTR_P(zv));
		return Z_PTR_P(zv);
	} else {
		return NULL;
	}
}

BEGIN_EXTERN_C()

/* Will lowercase the str; use only if you don't need the lowercased string for
 * anything else. If you have a lowered string, use zend_hash_str_find_ptr. */
ZEND_API void *zend_hash_str_find_ptr_lc(const HashTable *ht, const char *str, size_t len);

/* Will lowercase the str; use only if you don't need the lowercased string for
 * anything else. If you have a lowered string, use zend_hash_find_ptr. */
ZEND_API void *zend_hash_find_ptr_lc(const HashTable *ht, zend_string *key);

END_EXTERN_C()

static zend_always_inline void *zend_hash_index_find_ptr(const HashTable *ht, zend_ulong h)
{
	zval *zv;

	zv = zend_hash_index_find(ht, h);
	if (zv) {
		ZEND_ASSUME(Z_PTR_P(zv));
		return Z_PTR_P(zv);
	} else {
		return NULL;
	}
}

static zend_always_inline zval *zend_hash_index_find_deref(const HashTable *ht, zend_ulong h)
{
	zval *zv = zend_hash_index_find(ht, h);
	if (zv) {
		ZVAL_DEREF(zv);
	}
	return zv;
}

static zend_always_inline zval *zend_hash_find_deref(const HashTable *ht, zend_string *str)
{
	zval *zv = zend_hash_find(ht, str);
	if (zv) {
		ZVAL_DEREF(zv);
	}
	return zv;
}

static zend_always_inline zval *zend_hash_str_find_deref(const HashTable *ht, const char *str, size_t len)
{
	zval *zv = zend_hash_str_find(ht, str, len);
	if (zv) {
		ZVAL_DEREF(zv);
	}
	return zv;
}

static zend_always_inline void *zend_symtable_str_find_ptr(const HashTable *ht, const char *str, size_t len)
{
	zend_ulong idx;

	if (ZEND_HANDLE_NUMERIC_STR(str, len, idx)) {
		return zend_hash_index_find_ptr(ht, idx);
	} else {
		return zend_hash_str_find_ptr(ht, str, len);
	}
}

static zend_always_inline void *zend_hash_get_current_data_ptr_ex(const HashTable *ht, const HashPosition *pos)
{
	zval *zv;

	zv = zend_hash_get_current_data_ex(ht, pos);
	if (zv) {
		ZEND_ASSUME(Z_PTR_P(zv));
		return Z_PTR_P(zv);
	} else {
		return NULL;
	}
}

#define zend_hash_get_current_data_ptr(ht) \
	zend_hash_get_current_data_ptr_ex(ht, &(ht)->nInternalPointer)

/* Common hash/packed array iterators */
#if 0
# define ZEND_HASH_ELEMENT_SIZE(__ht) \
	(HT_IS_PACKED(__ht) ? sizeof(zval) : sizeof(Bucket))
#else /* optimized version */
# define ZEND_HASH_ELEMENT_SIZE(__ht) \
	(sizeof(zval) + (~HT_FLAGS(__ht) & HASH_FLAG_PACKED) * ((sizeof(Bucket)-sizeof(zval))/HASH_FLAG_PACKED))
#endif

#define ZEND_HASH_ELEMENT_EX(__ht, _idx, _size) \
	((zval*)(((char*)(__ht)->arPacked) + ((_idx) * (_size))))

#define ZEND_HASH_ELEMENT(__ht, _idx) \
	ZEND_HASH_ELEMENT_EX(__ht, _idx, ZEND_HASH_ELEMENT_SIZE(__ht))

#define ZEND_HASH_NEXT_ELEMENT(_el, _size) \
	((zval*)(((char*)(_el)) + (_size)))

#define ZEND_HASH_PREV_ELEMENT(_el, _size) \
	((zval*)(((char*)(_el)) - (_size)))

#define _ZEND_HASH_FOREACH_VAL(_ht) do { \
		const HashTable *__ht = (_ht); \
		uint32_t _count = __ht->nNumUsed; \
		size_t _size = ZEND_HASH_ELEMENT_SIZE(__ht); \
		zval *_z = __ht->arPacked; \
		for (; _count > 0; _z = ZEND_HASH_NEXT_ELEMENT(_z, _size), _count--) { \
			if (UNEXPECTED(Z_TYPE_P(_z) == IS_UNDEF)) continue;

#define _ZEND_HASH_REVERSE_FOREACH_VAL(_ht) do { \
		const HashTable *__ht = (_ht); \
		uint32_t _idx = __ht->nNumUsed; \
		size_t _size = ZEND_HASH_ELEMENT_SIZE(__ht); \
		zval *_z = ZEND_HASH_ELEMENT_EX(__ht, _idx, _size); \
		for (;_idx > 0; _idx--) { \
			_z = ZEND_HASH_PREV_ELEMENT(_z, _size); \
			if (UNEXPECTED(Z_TYPE_P(_z) == IS_UNDEF)) continue;

#define ZEND_HASH_FOREACH_FROM(_ht, indirect, _from) do { \
		const HashTable *__ht = (_ht); \
		zend_ulong __h; \
		zend_string *__key = NULL; \
		uint32_t _idx = (_from); \
		size_t _size = ZEND_HASH_ELEMENT_SIZE(__ht); \
		zval *__z = ZEND_HASH_ELEMENT_EX(__ht, _idx, _size); \
		uint32_t _count = __ht->nNumUsed - _idx; \
		for (;_count > 0; _count--) { \
			zval *_z = __z; \
			if (HT_IS_PACKED(__ht)) { \
				__z++; \
				__h = _idx; \
				_idx++; \
			} else { \
				Bucket *_p = (Bucket*)__z; \
				__z = &(_p + 1)->val; \
				__h = _p->h; \
				__key = _p->key; \
				if (indirect && Z_TYPE_P(_z) == IS_INDIRECT) { \
					_z = Z_INDIRECT_P(_z); \
				} \
			} \
			(void) __h; (void) __key; (void) _idx; \
			if (UNEXPECTED(Z_TYPE_P(_z) == IS_UNDEF)) continue;

#define ZEND_HASH_FOREACH(_ht, indirect) ZEND_HASH_FOREACH_FROM(_ht, indirect, 0)

#define ZEND_HASH_REVERSE_FOREACH(_ht, indirect) do { \
		const HashTable *__ht = (_ht); \
		uint32_t _idx = __ht->nNumUsed; \
		zval *_z; \
		zend_ulong __h; \
		zend_string *__key = NULL; \
		size_t _size = ZEND_HASH_ELEMENT_SIZE(__ht); \
		zval *__z = ZEND_HASH_ELEMENT_EX(__ht, _idx, _size); \
		for (;_idx > 0; _idx--) { \
			if (HT_IS_PACKED(__ht)) { \
				__z--; \
				_z = __z; \
				__h = _idx - 1; \
			} else { \
				Bucket *_p = (Bucket*)__z; \
				_p--; \
				__z = &_p->val; \
				_z = __z; \
				__h = _p->h; \
				__key = _p->key; \
				if (indirect && Z_TYPE_P(_z) == IS_INDIRECT) { \
					_z = Z_INDIRECT_P(_z); \
				} \
			} \
			(void) __h; (void) __key; (void) __z; \
			if (UNEXPECTED(Z_TYPE_P(_z) == IS_UNDEF)) continue;

#define ZEND_HASH_FOREACH_END() \
		} \
	} while (0)

#define ZEND_HASH_FOREACH_END_DEL() \
	ZEND_HASH_MAP_FOREACH_END_DEL()

#define ZEND_HASH_FOREACH_BUCKET(ht, _bucket) \
	ZEND_HASH_MAP_FOREACH_BUCKET(ht, _bucket)

#define ZEND_HASH_FOREACH_BUCKET_FROM(ht, _bucket, _from) \
	ZEND_HASH_MAP_FOREACH_BUCKET_FROM(ht, _bucket, _from)

#define ZEND_HASH_REVERSE_FOREACH_BUCKET(ht, _bucket) \
	ZEND_HASH_MAP_REVERSE_FOREACH_BUCKET(ht, _bucket)

#define ZEND_HASH_FOREACH_VAL(ht, _val) \
	_ZEND_HASH_FOREACH_VAL(ht); \
	_val = _z;

#define ZEND_HASH_REVERSE_FOREACH_VAL(ht, _val) \
	_ZEND_HASH_REVERSE_FOREACH_VAL(ht); \
	_val = _z;

#define ZEND_HASH_FOREACH_VAL_IND(ht, _val) \
	ZEND_HASH_FOREACH(ht, 1); \
	_val = _z;

#define ZEND_HASH_REVERSE_FOREACH_VAL_IND(ht, _val) \
	ZEND_HASH_REVERSE_FOREACH(ht, 1); \
	_val = _z;

#define ZEND_HASH_FOREACH_PTR(ht, _ptr) \
	_ZEND_HASH_FOREACH_VAL(ht); \
	_ptr = Z_PTR_P(_z);

#define ZEND_HASH_FOREACH_PTR_FROM(ht, _ptr, _from) \
	ZEND_HASH_FOREACH_FROM(ht, 0, _from); \
	_ptr = Z_PTR_P(_z);

#define ZEND_HASH_REVERSE_FOREACH_PTR(ht, _ptr) \
	_ZEND_HASH_REVERSE_FOREACH_VAL(ht); \
	_ptr = Z_PTR_P(_z);

#define ZEND_HASH_FOREACH_NUM_KEY(ht, _h) \
	ZEND_HASH_FOREACH(ht, 0); \
	_h = __h;

#define ZEND_HASH_REVERSE_FOREACH_NUM_KEY(ht, _h) \
	ZEND_HASH_REVERSE_FOREACH(ht, 0); \
	_h = __h;

#define ZEND_HASH_FOREACH_STR_KEY(ht, _key) \
	ZEND_HASH_FOREACH(ht, 0); \
	_key = __key;

#define ZEND_HASH_REVERSE_FOREACH_STR_KEY(ht, _key) \
	ZEND_HASH_REVERSE_FOREACH(ht, 0); \
	_key = __key;

#define ZEND_HASH_FOREACH_KEY(ht, _h, _key) \
	ZEND_HASH_FOREACH(ht, 0); \
	_h = __h; \
	_key = __key;

#define ZEND_HASH_REVERSE_FOREACH_KEY(ht, _h, _key) \
	ZEND_HASH_REVERSE_FOREACH(ht, 0); \
	_h = __h; \
	_key = __key;

#define ZEND_HASH_FOREACH_NUM_KEY_VAL(ht, _h, _val) \
	ZEND_HASH_FOREACH(ht, 0); \
	_h = __h; \
	_val = _z;

#define ZEND_HASH_REVERSE_FOREACH_NUM_KEY_VAL(ht, _h, _val) \
	ZEND_HASH_REVERSE_FOREACH(ht, 0); \
	_h = __h; \
	_val = _z;

#define ZEND_HASH_FOREACH_STR_KEY_VAL(ht, _key, _val) \
	ZEND_HASH_FOREACH(ht, 0); \
	_key = __key; \
	_val = _z;

#define ZEND_HASH_FOREACH_STR_KEY_VAL_FROM(ht, _key, _val, _from) \
	ZEND_HASH_FOREACH_FROM(ht, 0, _from); \
	_key = __key; \
	_val = _z;

#define ZEND_HASH_REVERSE_FOREACH_STR_KEY_VAL(ht, _key, _val) \
	ZEND_HASH_REVERSE_FOREACH(ht, 0); \
	_key = __key; \
	_val = _z;

#define ZEND_HASH_FOREACH_KEY_VAL(ht, _h, _key, _val) \
	ZEND_HASH_FOREACH(ht, 0); \
	_h = __h; \
	_key = __key; \
	_val = _z;

#define ZEND_HASH_REVERSE_FOREACH_KEY_VAL(ht, _h, _key, _val) \
	ZEND_HASH_REVERSE_FOREACH(ht, 0); \
	_h = __h; \
	_key = __key; \
	_val = _z;

#define ZEND_HASH_FOREACH_STR_KEY_VAL_IND(ht, _key, _val) \
	ZEND_HASH_FOREACH(ht, 1); \
	_key = __key; \
	_val = _z;

#define ZEND_HASH_REVERSE_FOREACH_STR_KEY_VAL_IND(ht, _key, _val) \
	ZEND_HASH_REVERSE_FOREACH(ht, 1); \
	_key = __key; \
	_val = _z;

#define ZEND_HASH_FOREACH_KEY_VAL_IND(ht, _h, _key, _val) \
	ZEND_HASH_FOREACH(ht, 1); \
	_h = __h; \
	_key = __key; \
	_val = _z;

#define ZEND_HASH_REVERSE_FOREACH_KEY_VAL_IND(ht, _h, _key, _val) \
	ZEND_HASH_REVERSE_FOREACH(ht, 1); \
	_h = __h; \
	_key = __key; \
	_val = _z;

#define ZEND_HASH_FOREACH_NUM_KEY_PTR(ht, _h, _ptr) \
	ZEND_HASH_FOREACH(ht, 0); \
	_h = __h; \
	_ptr = Z_PTR_P(_z);

#define ZEND_HASH_REVERSE_FOREACH_NUM_KEY_PTR(ht, _h, _ptr) \
	ZEND_HASH_REVERSE_FOREACH(ht, 0); \
	_h = __h; \
	_ptr = Z_PTR_P(_z);

#define ZEND_HASH_FOREACH_STR_KEY_PTR(ht, _key, _ptr) \
	ZEND_HASH_FOREACH(ht, 0); \
	_key = __key; \
	_ptr = Z_PTR_P(_z);

#define ZEND_HASH_REVERSE_FOREACH_STR_KEY_PTR(ht, _key, _ptr) \
	ZEND_HASH_REVERSE_FOREACH(ht, 0); \
	_key = __key; \
	_ptr = Z_PTR_P(_z);

#define ZEND_HASH_FOREACH_KEY_PTR(ht, _h, _key, _ptr) \
	ZEND_HASH_FOREACH(ht, 0); \
	_h = __h; \
	_key = __key; \
	_ptr = Z_PTR_P(_z);

#define ZEND_HASH_REVERSE_FOREACH_KEY_PTR(ht, _h, _key, _ptr) \
	ZEND_HASH_REVERSE_FOREACH(ht, 0); \
	_h = __h; \
	_key = __key; \
	_ptr = Z_PTR_P(_z);

/* Hash array iterators */
#define ZEND_HASH_MAP_FOREACH_FROM(_ht, indirect, _from) do { \
		const HashTable *__ht = (_ht); \
		Bucket *_p = __ht->arData + (_from); \
		const Bucket *_end = __ht->arData + __ht->nNumUsed; \
		ZEND_ASSERT(!HT_IS_PACKED(__ht)); \
		for (; _p != _end; _p++) { \
			zval *_z = &_p->val; \
			if (indirect && Z_TYPE_P(_z) == IS_INDIRECT) { \
				_z = Z_INDIRECT_P(_z); \
			} \
			if (UNEXPECTED(Z_TYPE_P(_z) == IS_UNDEF)) continue;

#define ZEND_HASH_MAP_FOREACH(_ht, indirect) ZEND_HASH_MAP_FOREACH_FROM(_ht, indirect, 0)

#define ZEND_HASH_MAP_REVERSE_FOREACH(_ht, indirect) do { \
		/* const */ HashTable *__ht = (_ht); \
		uint32_t _idx = __ht->nNumUsed; \
		Bucket *_p = __ht->arData + _idx; \
		zval *_z; \
		ZEND_ASSERT(!HT_IS_PACKED(__ht)); \
		for (_idx = __ht->nNumUsed; _idx > 0; _idx--) { \
			_p--; \
			_z = &_p->val; \
			if (indirect && Z_TYPE_P(_z) == IS_INDIRECT) { \
				_z = Z_INDIRECT_P(_z); \
			} \
			if (UNEXPECTED(Z_TYPE_P(_z) == IS_UNDEF)) continue;

#define ZEND_HASH_MAP_FOREACH_END_DEL() \
			ZEND_ASSERT(!HT_IS_PACKED(__ht)); \
			__ht->nNumOfElements--; \
			do { \
				uint32_t j = HT_IDX_TO_HASH(_idx - 1); \
				uint32_t nIndex = _p->h | __ht->nTableMask; \
				uint32_t i = HT_HASH(__ht, nIndex); \
				if (UNEXPECTED(j != i)) { \
					Bucket *prev = HT_HASH_TO_BUCKET(__ht, i); \
					while (Z_NEXT(prev->val) != j) { \
						i = Z_NEXT(prev->val); \
						prev = HT_HASH_TO_BUCKET(__ht, i); \
					} \
					Z_NEXT(prev->val) = Z_NEXT(_p->val); \
				} else { \
					HT_HASH(__ht, nIndex) = Z_NEXT(_p->val); \
				} \
			} while (0); \
		} \
		__ht->nNumUsed = _idx; \
	} while (0)

#define ZEND_HASH_MAP_FOREACH_BUCKET(ht, _bucket) \
	ZEND_HASH_MAP_FOREACH(ht, 0); \
	_bucket = _p;

#define ZEND_HASH_MAP_FOREACH_BUCKET_FROM(ht, _bucket, _from) \
	ZEND_HASH_MAP_FOREACH_FROM(ht, 0, _from); \
	_bucket = _p;

#define ZEND_HASH_MAP_REVERSE_FOREACH_BUCKET(ht, _bucket) \
	ZEND_HASH_MAP_REVERSE_FOREACH(ht, 0); \
	_bucket = _p;

#define ZEND_HASH_MAP_FOREACH_VAL(ht, _val) \
	ZEND_HASH_MAP_FOREACH(ht, 0); \
	_val = _z;

#define ZEND_HASH_MAP_REVERSE_FOREACH_VAL(ht, _val) \
	ZEND_HASH_MAP_REVERSE_FOREACH(ht, 0); \
	_val = _z;

#define ZEND_HASH_MAP_FOREACH_VAL_IND(ht, _val) \
	ZEND_HASH_MAP_FOREACH(ht, 1); \
	_val = _z;

#define ZEND_HASH_MAP_REVERSE_FOREACH_VAL_IND(ht, _val) \
	ZEND_HASH_MAP_REVERSE_FOREACH(ht, 1); \
	_val = _z;

#define ZEND_HASH_MAP_FOREACH_PTR(ht, _ptr) \
	ZEND_HASH_MAP_FOREACH(ht, 0); \
	_ptr = Z_PTR_P(_z);

#define ZEND_HASH_MAP_FOREACH_PTR_FROM(ht, _ptr, _from) \
	ZEND_HASH_MAP_FOREACH_FROM(ht, 0, _from); \
	_ptr = Z_PTR_P(_z);

#define ZEND_HASH_MAP_REVERSE_FOREACH_PTR(ht, _ptr) \
	ZEND_HASH_MAP_REVERSE_FOREACH(ht, 0); \
	_ptr = Z_PTR_P(_z);

#define ZEND_HASH_MAP_FOREACH_NUM_KEY(ht, _h) \
	ZEND_HASH_MAP_FOREACH(ht, 0); \
	_h = _p->h;

#define ZEND_HASH_MAP_REVERSE_FOREACH_NUM_KEY(ht, _h) \
	ZEND_HASH_MAP_REVERSE_FOREACH(ht, 0); \
	_h = _p->h;

#define ZEND_HASH_MAP_FOREACH_STR_KEY(ht, _key) \
	ZEND_HASH_MAP_FOREACH(ht, 0); \
	_key = _p->key;

#define ZEND_HASH_MAP_REVERSE_FOREACH_STR_KEY(ht, _key) \
	ZEND_HASH_MAP_REVERSE_FOREACH(ht, 0); \
	_key = _p->key;

#define ZEND_HASH_MAP_FOREACH_KEY(ht, _h, _key) \
	ZEND_HASH_MAP_FOREACH(ht, 0); \
	_h = _p->h; \
	_key = _p->key;

#define ZEND_HASH_MAP_REVERSE_FOREACH_KEY(ht, _h, _key) \
	ZEND_HASH_MAP_REVERSE_FOREACH(ht, 0); \
	_h = _p->h; \
	_key = _p->key;

#define ZEND_HASH_MAP_FOREACH_NUM_KEY_VAL(ht, _h, _val) \
	ZEND_HASH_MAP_FOREACH(ht, 0); \
	_h = _p->h; \
	_val = _z;

#define ZEND_HASH_MAP_REVERSE_FOREACH_NUM_KEY_VAL(ht, _h, _val) \
	ZEND_HASH_MAP_REVERSE_FOREACH(ht, 0); \
	_h = _p->h; \
	_val = _z;

#define ZEND_HASH_MAP_FOREACH_STR_KEY_VAL(ht, _key, _val) \
	ZEND_HASH_MAP_FOREACH(ht, 0); \
	_key = _p->key; \
	_val = _z;

#define ZEND_HASH_MAP_FOREACH_STR_KEY_VAL_FROM(ht, _key, _val, _from) \
	ZEND_HASH_MAP_FOREACH_FROM(ht, 0, _from); \
	_key = _p->key; \
	_val = _z;

#define ZEND_HASH_MAP_REVERSE_FOREACH_STR_KEY_VAL(ht, _key, _val) \
	ZEND_HASH_MAP_REVERSE_FOREACH(ht, 0); \
	_key = _p->key; \
	_val = _z;

#define ZEND_HASH_MAP_FOREACH_KEY_VAL(ht, _h, _key, _val) \
	ZEND_HASH_MAP_FOREACH(ht, 0); \
	_h = _p->h; \
	_key = _p->key; \
	_val = _z;

#define ZEND_HASH_MAP_REVERSE_FOREACH_KEY_VAL(ht, _h, _key, _val) \
	ZEND_HASH_MAP_REVERSE_FOREACH(ht, 0); \
	_h = _p->h; \
	_key = _p->key; \
	_val = _z;

#define ZEND_HASH_MAP_FOREACH_STR_KEY_VAL_IND(ht, _key, _val) \
	ZEND_HASH_MAP_FOREACH(ht, 1); \
	_key = _p->key; \
	_val = _z;

#define ZEND_HASH_MAP_REVERSE_FOREACH_STR_KEY_VAL_IND(ht, _key, _val) \
	ZEND_HASH_MAP_REVERSE_FOREACH(ht, 1); \
	_key = _p->key; \
	_val = _z;

#define ZEND_HASH_MAP_FOREACH_KEY_VAL_IND(ht, _h, _key, _val) \
	ZEND_HASH_MAP_FOREACH(ht, 1); \
	_h = _p->h; \
	_key = _p->key; \
	_val = _z;

#define ZEND_HASH_MAP_REVERSE_FOREACH_KEY_VAL_IND(ht, _h, _key, _val) \
	ZEND_HASH_MAP_REVERSE_FOREACH(ht, 1); \
	_h = _p->h; \
	_key = _p->key; \
	_val = _z;

#define ZEND_HASH_MAP_FOREACH_NUM_KEY_PTR(ht, _h, _ptr) \
	ZEND_HASH_MAP_FOREACH(ht, 0); \
	_h = _p->h; \
	_ptr = Z_PTR_P(_z);

#define ZEND_HASH_MAP_REVERSE_FOREACH_NUM_KEY_PTR(ht, _h, _ptr) \
	ZEND_HASH_MAP_REVERSE_FOREACH(ht, 0); \
	_h = _p->h; \
	_ptr = Z_PTR_P(_z);

#define ZEND_HASH_MAP_FOREACH_STR_KEY_PTR(ht, _key, _ptr) \
	ZEND_HASH_MAP_FOREACH(ht, 0); \
	_key = _p->key; \
	_ptr = Z_PTR_P(_z);

#define ZEND_HASH_MAP_REVERSE_FOREACH_STR_KEY_PTR(ht, _key, _ptr) \
	ZEND_HASH_MAP_REVERSE_FOREACH(ht, 0); \
	_key = _p->key; \
	_ptr = Z_PTR_P(_z);

#define ZEND_HASH_MAP_FOREACH_KEY_PTR(ht, _h, _key, _ptr) \
	ZEND_HASH_MAP_FOREACH(ht, 0); \
	_h = _p->h; \
	_key = _p->key; \
	_ptr = Z_PTR_P(_z);

#define ZEND_HASH_MAP_REVERSE_FOREACH_KEY_PTR(ht, _h, _key, _ptr) \
	ZEND_HASH_MAP_REVERSE_FOREACH(ht, 0); \
	_h = _p->h; \
	_key = _p->key; \
	_ptr = Z_PTR_P(_z);

/* Packed array iterators */
#define ZEND_HASH_PACKED_FOREACH_FROM(_ht, _from) do { \
		const HashTable *__ht = (_ht); \
		zend_ulong _idx = (_from); \
		zval *_z = __ht->arPacked + (_from); \
		zval *_end = __ht->arPacked + __ht->nNumUsed; \
		ZEND_ASSERT(HT_IS_PACKED(__ht)); \
		for (;_z != _end; _z++, _idx++) { \
			(void) _idx; \
			if (UNEXPECTED(Z_TYPE_P(_z) == IS_UNDEF)) continue;

#define ZEND_HASH_PACKED_FOREACH(_ht) ZEND_HASH_PACKED_FOREACH_FROM(_ht, 0)

#define ZEND_HASH_PACKED_REVERSE_FOREACH(_ht) do { \
		const HashTable *__ht = (_ht); \
		zend_ulong _idx = __ht->nNumUsed; \
		zval *_z = __ht->arPacked + _idx; \
		ZEND_ASSERT(HT_IS_PACKED(__ht)); \
		while (_idx > 0) { \
			_z--; \
			_idx--; \
			(void) _idx; \
			if (UNEXPECTED(Z_TYPE_P(_z) == IS_UNDEF)) continue;

#define ZEND_HASH_PACKED_FOREACH_VAL(ht, _val) \
	ZEND_HASH_PACKED_FOREACH(ht); \
	_val = _z;

#define ZEND_HASH_PACKED_REVERSE_FOREACH_VAL(ht, _val) \
	ZEND_HASH_PACKED_REVERSE_FOREACH(ht); \
	_val = _z;

#define ZEND_HASH_PACKED_FOREACH_PTR(ht, _ptr) \
	ZEND_HASH_PACKED_FOREACH(ht); \
	_ptr = Z_PTR_P(_z);

#define ZEND_HASH_PACKED_REVERSE_FOREACH_PTR(ht, _ptr) \
	ZEND_HASH_PACKED_REVERSE_FOREACH(ht); \
	_ptr = Z_PTR_P(_z);

#define ZEND_HASH_PACKED_FOREACH_KEY(ht, _h) \
	ZEND_HASH_PACKED_FOREACH(ht); \
	_h = _idx;

#define ZEND_HASH_PACKED_REVERSE_FOREACH_KEY(ht, _h) \
	ZEND_HASH_PACKED_REVERSE_FOREACH(ht); \
	_h = _idx;

#define ZEND_HASH_PACKED_FOREACH_KEY_VAL(ht, _h, _val) \
	ZEND_HASH_PACKED_FOREACH(ht); \
	_h = _idx; \
	_val = _z;

#define ZEND_HASH_PACKED_REVERSE_FOREACH_KEY_VAL(ht, _h, _val) \
	ZEND_HASH_PACKED_REVERSE_FOREACH(ht); \
	_h = _idx; \
	_val = _z;

#define ZEND_HASH_PACKED_FOREACH_KEY_PTR(ht, _h, _ptr) \
	ZEND_HASH_PACKED_FOREACH(ht); \
	_h = _idx; \
	_ptr = Z_PTR_P(_z);

#define ZEND_HASH_PACKED_REVERSE_FOREACH_KEY_PTR(ht, _h, _ptr) \
	ZEND_HASH_PACKED_REVERSE_FOREACH(ht); \
	_h = _idx; \
	_ptr = Z_PTR_P(_z);

/* The following macros are useful to insert a sequence of new elements
 * of packed array. They may be used instead of series of
 * zend_hash_next_index_insert_new()
 * (HashTable must have enough free buckets).
 */
#define ZEND_HASH_FILL_PACKED(ht) do { \
		HashTable *__fill_ht = (ht); \
		zval *__fill_val = __fill_ht->arPacked + __fill_ht->nNumUsed; \
		uint32_t __fill_idx = __fill_ht->nNumUsed; \
		ZEND_ASSERT(HT_IS_PACKED(__fill_ht));

#define ZEND_HASH_FILL_GROW() do { \
		if (UNEXPECTED(__fill_idx >= __fill_ht->nTableSize)) { \
			__fill_ht->nNumOfElements += __fill_idx - __fill_ht->nNumUsed; \
			__fill_ht->nNumUsed = __fill_idx; \
			__fill_ht->nNextFreeElement = __fill_idx; \
			zend_hash_packed_grow(__fill_ht); \
			__fill_val = __fill_ht->arPacked + __fill_idx; \
		} \
	} while (0);

#define ZEND_HASH_FILL_SET(_val) \
		ZVAL_COPY_VALUE(__fill_val, _val)

#define ZEND_HASH_FILL_SET_NULL() \
		ZVAL_NULL(__fill_val)

#define ZEND_HASH_FILL_SET_LONG(_val) \
		ZVAL_LONG(__fill_val, _val)

#define ZEND_HASH_FILL_SET_DOUBLE(_val) \
		ZVAL_DOUBLE(__fill_val, _val)

#define ZEND_HASH_FILL_SET_STR(_val) \
		ZVAL_STR(__fill_val, _val)

#define ZEND_HASH_FILL_SET_STR_COPY(_val) \
		ZVAL_STR_COPY(__fill_val, _val)

#define ZEND_HASH_FILL_SET_INTERNED_STR(_val) \
		ZVAL_INTERNED_STR(__fill_val, _val)

#define ZEND_HASH_FILL_NEXT() do {\
		__fill_val++; \
		__fill_idx++; \
	} while (0)

#define ZEND_HASH_FILL_ADD(_val) do { \
		ZEND_HASH_FILL_SET(_val); \
		ZEND_HASH_FILL_NEXT(); \
	} while (0)

#define ZEND_HASH_FILL_FINISH() do { \
		__fill_ht->nNumOfElements += __fill_idx - __fill_ht->nNumUsed; \
		__fill_ht->nNumUsed = __fill_idx; \
		__fill_ht->nNextFreeElement = __fill_idx; \
		__fill_ht->nInternalPointer = 0; \
	} while (0)

#define ZEND_HASH_FILL_END() \
		ZEND_HASH_FILL_FINISH(); \
	} while (0)

/* Check if an array is a list */
static zend_always_inline bool zend_array_is_list(const zend_array *array)
{
	zend_ulong expected_idx = 0;
	zend_ulong num_idx;
	zend_string* str_idx;
	/* Empty arrays are lists */
	if (zend_hash_num_elements(array) == 0) {
		return 1;
	}

	/* Packed arrays are lists */
	if (HT_IS_PACKED(array)) {
		if (HT_IS_WITHOUT_HOLES(array)) {
			return 1;
		}
		/* Check if the list could theoretically be repacked */
		ZEND_HASH_PACKED_FOREACH_KEY(array, num_idx) {
			if (num_idx != expected_idx++) {
				return 0;
			}
		} ZEND_HASH_FOREACH_END();
	} else {
		/* Check if the list could theoretically be repacked */
		ZEND_HASH_MAP_FOREACH_KEY(array, num_idx, str_idx) {
			if (str_idx != NULL || num_idx != expected_idx++) {
				return 0;
			}
		} ZEND_HASH_FOREACH_END();
	}

	return 1;
}


static zend_always_inline zval *_zend_hash_append_ex(HashTable *ht, zend_string *key, zval *zv, bool key_guaranteed_interned)
{
	uint32_t idx = ht->nNumUsed++;
	uint32_t nIndex;
	Bucket *p = ht->arData + idx;

	ZVAL_COPY_VALUE(&p->val, zv);
	ZEND_ASSERT(!key_guaranteed_interned || ZSTR_IS_INTERNED(key));
	if (!key_guaranteed_interned && !ZSTR_IS_INTERNED(key)) {
		HT_FLAGS(ht) &= ~HASH_FLAG_STATIC_KEYS;
		zend_string_addref(key);
		zend_string_hash_val(key);
	}
	p->key = key;
	p->h = ZSTR_H(key);
	nIndex = (uint32_t)p->h | ht->nTableMask;
	Z_NEXT(p->val) = HT_HASH(ht, nIndex);
	HT_HASH(ht, nIndex) = HT_IDX_TO_HASH(idx);
	ht->nNumOfElements++;
	return &p->val;
}

static zend_always_inline zval *_zend_hash_append(HashTable *ht, zend_string *key, zval *zv)
{
	return _zend_hash_append_ex(ht, key, zv, 0);
}

static zend_always_inline zval *_zend_hash_append_ptr_ex(HashTable *ht, zend_string *key, void *ptr, bool key_guaranteed_interned)
{
	uint32_t idx = ht->nNumUsed++;
	uint32_t nIndex;
	Bucket *p = ht->arData + idx;

	ZVAL_PTR(&p->val, ptr);
	ZEND_ASSERT(!key_guaranteed_interned || ZSTR_IS_INTERNED(key));
	if (!key_guaranteed_interned && !ZSTR_IS_INTERNED(key)) {
		HT_FLAGS(ht) &= ~HASH_FLAG_STATIC_KEYS;
		zend_string_addref(key);
		zend_string_hash_val(key);
	}
	p->key = key;
	p->h = ZSTR_H(key);
	nIndex = (uint32_t)p->h | ht->nTableMask;
	Z_NEXT(p->val) = HT_HASH(ht, nIndex);
	HT_HASH(ht, nIndex) = HT_IDX_TO_HASH(idx);
	ht->nNumOfElements++;
	return &p->val;
}

static zend_always_inline zval *_zend_hash_append_ptr(HashTable *ht, zend_string *key, void *ptr)
{
	return _zend_hash_append_ptr_ex(ht, key, ptr, 0);
}

static zend_always_inline void _zend_hash_append_ind(HashTable *ht, zend_string *key, zval *ptr)
{
	uint32_t idx = ht->nNumUsed++;
	uint32_t nIndex;
	Bucket *p = ht->arData + idx;

	ZVAL_INDIRECT(&p->val, ptr);
	if (!ZSTR_IS_INTERNED(key)) {
		HT_FLAGS(ht) &= ~HASH_FLAG_STATIC_KEYS;
		zend_string_addref(key);
		zend_string_hash_val(key);
	}
	p->key = key;
	p->h = ZSTR_H(key);
	nIndex = (uint32_t)p->h | ht->nTableMask;
	Z_NEXT(p->val) = HT_HASH(ht, nIndex);
	HT_HASH(ht, nIndex) = HT_IDX_TO_HASH(idx);
	ht->nNumOfElements++;
}

#endif							/* ZEND_HASH_H */
Zend/zend_ini.h000064400000027643151730543140007433 0ustar00/*
   +----------------------------------------------------------------------+
   | Zend Engine                                                          |
   +----------------------------------------------------------------------+
   | Copyright (c) Zend Technologies Ltd. (http://www.zend.com)           |
   +----------------------------------------------------------------------+
   | This source file is subject to version 2.00 of the Zend license,     |
   | that is bundled with this package in the file LICENSE, and is        |
   | available through the world-wide-web at the following url:           |
   | http://www.zend.com/license/2_00.txt.                                |
   | If you did not receive a copy of the Zend license and are unable to  |
   | obtain it through the world-wide-web, please send a note to          |
   | license@zend.com so we can mail you a copy immediately.              |
   +----------------------------------------------------------------------+
   | Author: Zeev Suraski <zeev@php.net>                                  |
   +----------------------------------------------------------------------+
*/

#ifndef ZEND_INI_H
#define ZEND_INI_H

#include "zend_modules.h"

#define ZEND_INI_USER	(1<<0)
#define ZEND_INI_PERDIR	(1<<1)
#define ZEND_INI_SYSTEM	(1<<2)

#define ZEND_INI_ALL (ZEND_INI_USER|ZEND_INI_PERDIR|ZEND_INI_SYSTEM)

#define ZEND_INI_MH(name) int name(zend_ini_entry *entry, zend_string *new_value, void *mh_arg1, void *mh_arg2, void *mh_arg3, int stage)
#define ZEND_INI_DISP(name) ZEND_COLD void name(zend_ini_entry *ini_entry, int type)

typedef struct _zend_ini_entry_def {
	const char *name;
	ZEND_INI_MH((*on_modify));
	void *mh_arg1;
	void *mh_arg2;
	void *mh_arg3;
	const char *value;
	void (*displayer)(zend_ini_entry *ini_entry, int type);

	uint32_t value_length;
	uint16_t name_length;
	uint8_t modifiable;
} zend_ini_entry_def;

struct _zend_ini_entry {
	zend_string *name;
	ZEND_INI_MH((*on_modify));
	void *mh_arg1;
	void *mh_arg2;
	void *mh_arg3;
	zend_string *value;
	zend_string *orig_value;
	void (*displayer)(zend_ini_entry *ini_entry, int type);

	int module_number;

	uint8_t modifiable;
	uint8_t orig_modifiable;
	uint8_t modified;

	const zend_ini_entry_def *def;
};

BEGIN_EXTERN_C()
ZEND_API void zend_ini_startup(void);
ZEND_API void zend_ini_shutdown(void);
ZEND_API void zend_ini_global_shutdown(void);
ZEND_API void zend_ini_deactivate(void);
ZEND_API void zend_ini_dtor(HashTable *ini_directives);

ZEND_API void zend_copy_ini_directives(void);

ZEND_API void zend_ini_sort_entries(void);

ZEND_API zend_result zend_register_ini_entries(const zend_ini_entry_def *ini_entry, int module_number);
ZEND_API zend_result zend_register_ini_entries_ex(const zend_ini_entry_def *ini_entry, int module_number, int module_type);
ZEND_API void zend_unregister_ini_entries(int module_number);
ZEND_API void zend_unregister_ini_entries_ex(int module_number, int module_type);
ZEND_API void zend_ini_refresh_caches(int stage);
ZEND_API zend_result zend_alter_ini_entry(zend_string *name, zend_string *new_value, int modify_type, int stage);
ZEND_API zend_result zend_alter_ini_entry_ex(zend_string *name, zend_string *new_value, int modify_type, int stage, bool force_change);
ZEND_API zend_result zend_alter_ini_entry_chars(zend_string *name, const char *value, size_t value_length, int modify_type, int stage);
ZEND_API zend_result zend_alter_ini_entry_chars_ex(zend_string *name, const char *value, size_t value_length, int modify_type, int stage, int force_change);
ZEND_API zend_result zend_restore_ini_entry(zend_string *name, int stage);
ZEND_API void display_ini_entries(zend_module_entry *module);

ZEND_API zend_long zend_ini_long(const char *name, size_t name_length, int orig);
ZEND_API double zend_ini_double(const char *name, size_t name_length, int orig);
ZEND_API char *zend_ini_string(const char *name, size_t name_length, int orig);
ZEND_API char *zend_ini_string_ex(const char *name, size_t name_length, int orig, bool *exists);
ZEND_API zend_string *zend_ini_str(const char *name, size_t name_length, bool orig);
ZEND_API zend_string *zend_ini_str_ex(const char *name, size_t name_length, bool orig, bool *exists);
ZEND_API zend_string *zend_ini_get_value(zend_string *name);
ZEND_API bool zend_ini_parse_bool(zend_string *str);

/**
 * Parses an ini quantity
 *
 * The value parameter must be a string in the form
 *
 *     sign? digits ws* multiplier?
 *
 * with
 *
 *     sign: [+-]
 *     digit: [0-9]
 *     digits: digit+
 *     ws: [ \t\n\r\v\f]
 *     multiplier: [KMG]
 *
 * Leading and trailing whitespaces are ignored.
 *
 * If the string is empty or consists only of only whitespaces, 0 is returned.
 *
 * Digits is parsed as decimal unless the first digit is '0', in which case
 * digits is parsed as octal.
 *
 * The multiplier is case-insensitive. K, M, and G multiply the quantity by
 * 2**10, 2**20, and 2**30, respectively.
 *
 * For backwards compatibility, ill-formatted values are handled as follows:
 * - No leading digits: value is treated as '0'
 * - Invalid multiplier: multiplier is ignored
 * - Invalid characters between digits and multiplier: invalid characters are
 *   ignored
 * - Integer overflow: The result of the overflow is returned
 *
 * In any of these cases an error string is stored in *errstr (caller must
 * release it), otherwise *errstr is set to NULL.
 */
ZEND_API zend_long zend_ini_parse_quantity(zend_string *value, zend_string **errstr);

/**
 * Unsigned variant of zend_ini_parse_quantity
 */
ZEND_API zend_ulong zend_ini_parse_uquantity(zend_string *value, zend_string **errstr);

ZEND_API zend_long zend_ini_parse_quantity_warn(zend_string *value, zend_string *setting);

ZEND_API zend_ulong zend_ini_parse_uquantity_warn(zend_string *value, zend_string *setting);

ZEND_API zend_result zend_ini_register_displayer(const char *name, uint32_t name_length, void (*displayer)(zend_ini_entry *ini_entry, int type));

ZEND_API ZEND_INI_DISP(zend_ini_boolean_displayer_cb);
ZEND_API ZEND_INI_DISP(zend_ini_color_displayer_cb);
ZEND_API ZEND_INI_DISP(display_link_numbers);
END_EXTERN_C()

#define ZEND_INI_BEGIN()		static const zend_ini_entry_def ini_entries[] = {
#define ZEND_INI_END()		{ NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0, 0, 0} };

#define ZEND_INI_ENTRY3_EX(name, default_value, modifiable, on_modify, arg1, arg2, arg3, displayer) \
	{ name, on_modify, arg1, arg2, arg3, default_value, displayer, sizeof(default_value)-1, sizeof(name)-1, modifiable },

#define ZEND_INI_ENTRY3(name, default_value, modifiable, on_modify, arg1, arg2, arg3) \
	ZEND_INI_ENTRY3_EX(name, default_value, modifiable, on_modify, arg1, arg2, arg3, NULL)

#define ZEND_INI_ENTRY2_EX(name, default_value, modifiable, on_modify, arg1, arg2, displayer) \
	ZEND_INI_ENTRY3_EX(name, default_value, modifiable, on_modify, arg1, arg2, NULL, displayer)

#define ZEND_INI_ENTRY2(name, default_value, modifiable, on_modify, arg1, arg2) \
	ZEND_INI_ENTRY2_EX(name, default_value, modifiable, on_modify, arg1, arg2, NULL)

#define ZEND_INI_ENTRY1_EX(name, default_value, modifiable, on_modify, arg1, displayer) \
	ZEND_INI_ENTRY3_EX(name, default_value, modifiable, on_modify, arg1, NULL, NULL, displayer)

#define ZEND_INI_ENTRY1(name, default_value, modifiable, on_modify, arg1) \
	ZEND_INI_ENTRY1_EX(name, default_value, modifiable, on_modify, arg1, NULL)

#define ZEND_INI_ENTRY_EX(name, default_value, modifiable, on_modify, displayer) \
	ZEND_INI_ENTRY3_EX(name, default_value, modifiable, on_modify, NULL, NULL, NULL, displayer)

#define ZEND_INI_ENTRY(name, default_value, modifiable, on_modify) \
	ZEND_INI_ENTRY_EX(name, default_value, modifiable, on_modify, NULL)

#ifdef ZTS
#define STD_ZEND_INI_ENTRY(name, default_value, modifiable, on_modify, property_name, struct_type, struct_ptr) \
	ZEND_INI_ENTRY2(name, default_value, modifiable, on_modify, (void *) XtOffsetOf(struct_type, property_name), (void *) &struct_ptr##_id)
#define STD_ZEND_INI_ENTRY_EX(name, default_value, modifiable, on_modify, property_name, struct_type, struct_ptr, displayer) \
	ZEND_INI_ENTRY2_EX(name, default_value, modifiable, on_modify, (void *) XtOffsetOf(struct_type, property_name), (void *) &struct_ptr##_id, displayer)
#define STD_ZEND_INI_BOOLEAN(name, default_value, modifiable, on_modify, property_name, struct_type, struct_ptr) \
	ZEND_INI_ENTRY3_EX(name, default_value, modifiable, on_modify, (void *) XtOffsetOf(struct_type, property_name), (void *) &struct_ptr##_id, NULL, zend_ini_boolean_displayer_cb)
#else
#define STD_ZEND_INI_ENTRY(name, default_value, modifiable, on_modify, property_name, struct_type, struct_ptr) \
	ZEND_INI_ENTRY2(name, default_value, modifiable, on_modify, (void *) XtOffsetOf(struct_type, property_name), (void *) &struct_ptr)
#define STD_ZEND_INI_ENTRY_EX(name, default_value, modifiable, on_modify, property_name, struct_type, struct_ptr, displayer) \
	ZEND_INI_ENTRY2_EX(name, default_value, modifiable, on_modify, (void *) XtOffsetOf(struct_type, property_name), (void *) &struct_ptr, displayer)
#define STD_ZEND_INI_BOOLEAN(name, default_value, modifiable, on_modify, property_name, struct_type, struct_ptr) \
	ZEND_INI_ENTRY3_EX(name, default_value, modifiable, on_modify, (void *) XtOffsetOf(struct_type, property_name), (void *) &struct_ptr, NULL, zend_ini_boolean_displayer_cb)
#endif

#define INI_INT(name) zend_ini_long((name), strlen(name), 0)
#define INI_FLT(name) zend_ini_double((name), strlen(name), 0)
#define INI_STR(name) zend_ini_string_ex((name), strlen(name), 0, NULL)
#define INI_BOOL(name) ((bool) INI_INT(name))

#define INI_ORIG_INT(name)	zend_ini_long((name), strlen(name), 1)
#define INI_ORIG_FLT(name)	zend_ini_double((name), strlen(name), 1)
#define INI_ORIG_STR(name)	zend_ini_string((name), strlen(name), 1)
#define INI_ORIG_BOOL(name) ((bool) INI_ORIG_INT(name))

#define REGISTER_INI_ENTRIES() zend_register_ini_entries_ex(ini_entries, module_number, type)
#define UNREGISTER_INI_ENTRIES() zend_unregister_ini_entries_ex(module_number, type)
#define DISPLAY_INI_ENTRIES() display_ini_entries(zend_module)

#define REGISTER_INI_DISPLAYER(name, displayer) zend_ini_register_displayer((name), strlen(name), displayer)
#define REGISTER_INI_BOOLEAN(name) REGISTER_INI_DISPLAYER(name, zend_ini_boolean_displayer_cb)

/* Standard message handlers */
BEGIN_EXTERN_C()
ZEND_API ZEND_INI_MH(OnUpdateBool);
ZEND_API ZEND_INI_MH(OnUpdateLong);
ZEND_API ZEND_INI_MH(OnUpdateLongGEZero);
ZEND_API ZEND_INI_MH(OnUpdateReal);
/* char* versions */
ZEND_API ZEND_INI_MH(OnUpdateString);
ZEND_API ZEND_INI_MH(OnUpdateStringUnempty);
/* zend_string* versions */
ZEND_API ZEND_INI_MH(OnUpdateStr);
ZEND_API ZEND_INI_MH(OnUpdateStrNotEmpty);
END_EXTERN_C()

#define ZEND_INI_DISPLAY_ORIG	1
#define ZEND_INI_DISPLAY_ACTIVE	2

#define ZEND_INI_STAGE_STARTUP		(1<<0)
#define ZEND_INI_STAGE_SHUTDOWN		(1<<1)
#define ZEND_INI_STAGE_ACTIVATE		(1<<2)
#define ZEND_INI_STAGE_DEACTIVATE	(1<<3)
#define ZEND_INI_STAGE_RUNTIME		(1<<4)
#define ZEND_INI_STAGE_HTACCESS		(1<<5)

#define ZEND_INI_STAGE_IN_REQUEST   (ZEND_INI_STAGE_ACTIVATE|ZEND_INI_STAGE_DEACTIVATE|ZEND_INI_STAGE_RUNTIME|ZEND_INI_STAGE_HTACCESS)

/* INI parsing engine */
typedef void (*zend_ini_parser_cb_t)(zval *arg1, zval *arg2, zval *arg3, int callback_type, void *arg);
BEGIN_EXTERN_C()
ZEND_API zend_result zend_parse_ini_file(zend_file_handle *fh, bool unbuffered_errors, int scanner_mode, zend_ini_parser_cb_t ini_parser_cb, void *arg);
ZEND_API zend_result zend_parse_ini_string(const char *str, bool unbuffered_errors, int scanner_mode, zend_ini_parser_cb_t ini_parser_cb, void *arg);
END_EXTERN_C()

/* INI entries */
#define ZEND_INI_PARSER_ENTRY     1 /* Normal entry: foo = bar */
#define ZEND_INI_PARSER_SECTION	  2 /* Section: [foobar] */
#define ZEND_INI_PARSER_POP_ENTRY 3 /* Offset entry: foo[] = bar */

typedef struct _zend_ini_parser_param {
	zend_ini_parser_cb_t ini_parser_cb;
	void *arg;
} zend_ini_parser_param;

#ifndef ZTS
# define ZEND_INI_GET_BASE() ((char *) mh_arg2)
#else
# define ZEND_INI_GET_BASE() ((char *) ts_resource(*((int *) mh_arg2)))
#endif

#define ZEND_INI_GET_ADDR() (ZEND_INI_GET_BASE() + (size_t) mh_arg1)

#endif /* ZEND_INI_H */
Zend/zend_fibers.h000064400000012444151730543140010117 0ustar00/*
   +----------------------------------------------------------------------+
   | Zend Engine                                                          |
   +----------------------------------------------------------------------+
   | Copyright (c) Zend Technologies Ltd. (http://www.zend.com)           |
   +----------------------------------------------------------------------+
   | This source file is subject to version 2.00 of the Zend license,     |
   | that is bundled with this package in the file LICENSE, and is        |
   | available through the world-wide-web at the following url:           |
   | http://www.zend.com/license/2_00.txt.                                |
   | If you did not receive a copy of the Zend license and are unable to  |
   | obtain it through the world-wide-web, please send a note to          |
   | license@zend.com so we can mail you a copy immediately.              |
   +----------------------------------------------------------------------+
   | Authors: Aaron Piotrowski <aaron@trowski.com>                        |
   |          Martin Schröder <m.schroeder2007@gmail.com>                 |
   +----------------------------------------------------------------------+
*/

#ifndef ZEND_FIBERS_H
#define ZEND_FIBERS_H

#include "zend_API.h"
#include "zend_types.h"

#define ZEND_FIBER_GUARD_PAGES 1

#define ZEND_FIBER_DEFAULT_C_STACK_SIZE (4096 * (((sizeof(void *)) < 8) ? 256 : 512))
#define ZEND_FIBER_VM_STACK_SIZE (1024 * sizeof(zval))

BEGIN_EXTERN_C()

typedef enum {
	ZEND_FIBER_STATUS_INIT,
	ZEND_FIBER_STATUS_RUNNING,
	ZEND_FIBER_STATUS_SUSPENDED,
	ZEND_FIBER_STATUS_DEAD,
} zend_fiber_status;

typedef enum {
	ZEND_FIBER_FLAG_THREW     = 1 << 0,
	ZEND_FIBER_FLAG_BAILOUT   = 1 << 1,
	ZEND_FIBER_FLAG_DESTROYED = 1 << 2,
} zend_fiber_flag;

typedef enum {
	ZEND_FIBER_TRANSFER_FLAG_ERROR = 1 << 0,
	ZEND_FIBER_TRANSFER_FLAG_BAILOUT = 1 << 1
} zend_fiber_transfer_flag;

void zend_register_fiber_ce(void);
void zend_fiber_init(void);
void zend_fiber_shutdown(void);

extern ZEND_API zend_class_entry *zend_ce_fiber;

typedef struct _zend_fiber_stack zend_fiber_stack;

/* Encapsulates data needed for a context switch. */
typedef struct _zend_fiber_transfer {
	/* Fiber that will be switched to / has resumed us. */
	zend_fiber_context *context;

	/* Value to that should be send to (or was received from) a fiber. */
	zval value;

	/* Bitmask of flags defined in enum zend_fiber_transfer_flag. */
	uint8_t flags;
} zend_fiber_transfer;

/* Coroutine functions must populate the given transfer with a new context
 * and (optional) data before they return. */
typedef void (*zend_fiber_coroutine)(zend_fiber_transfer *transfer);
typedef void (*zend_fiber_clean)(zend_fiber_context *context);

struct _zend_fiber_context {
	/* Pointer to boost.context or ucontext_t data. */
	void *handle;

	/* Pointer that identifies the fiber type. */
	void *kind;

	/* Entrypoint function of the fiber. */
	zend_fiber_coroutine function;

	/* Cleanup function for fiber. */
	zend_fiber_clean cleanup;

	/* Assigned C stack. */
	zend_fiber_stack *stack;

	/* Fiber status. */
	zend_fiber_status status;

	/* Observer state */
	zend_execute_data *top_observed_frame;

	/* Reserved for extensions */
	void *reserved[ZEND_MAX_RESERVED_RESOURCES];
};

struct _zend_fiber {
	/* PHP object handle. */
	zend_object std;

	/* Flags are defined in enum zend_fiber_flag. */
	uint8_t flags;

	/* Native C fiber context. */
	zend_fiber_context context;

	/* Fiber that resumed us. */
	zend_fiber_context *caller;

	/* Fiber that suspended us. */
	zend_fiber_context *previous;

	/* Callback and info / cache to be used when fiber is started. */
	zend_fcall_info fci;
	zend_fcall_info_cache fci_cache;

	/* Current Zend VM execute data being run by the fiber. */
	zend_execute_data *execute_data;

	/* Frame on the bottom of the fiber vm stack. */
	zend_execute_data *stack_bottom;

	/* Active fiber vm stack. */
	zend_vm_stack vm_stack;

	/* Storage for fiber return value. */
	zval result;
};

ZEND_API zend_result zend_fiber_start(zend_fiber *fiber, zval *return_value);
ZEND_API void zend_fiber_resume(zend_fiber *fiber, zval *value, zval *return_value);
ZEND_API void zend_fiber_suspend(zend_fiber *fiber, zval *value, zval *return_value);

/* These functions may be used to create custom fiber objects using the bundled fiber switching context. */
ZEND_API zend_result zend_fiber_init_context(zend_fiber_context *context, void *kind, zend_fiber_coroutine coroutine, size_t stack_size);
ZEND_API void zend_fiber_destroy_context(zend_fiber_context *context);
ZEND_API void zend_fiber_switch_context(zend_fiber_transfer *transfer);
#ifdef ZEND_CHECK_STACK_LIMIT
ZEND_API void* zend_fiber_stack_limit(zend_fiber_stack *stack);
ZEND_API void* zend_fiber_stack_base(zend_fiber_stack *stack);
#endif /* ZEND_CHECK_STACK_LIMIT */

ZEND_API void zend_fiber_switch_block(void);
ZEND_API void zend_fiber_switch_unblock(void);
ZEND_API bool zend_fiber_switch_blocked(void);

END_EXTERN_C()

static zend_always_inline zend_fiber *zend_fiber_from_context(zend_fiber_context *context)
{
	ZEND_ASSERT(context->kind == zend_ce_fiber && "Fiber context does not belong to a Zend fiber");

	return (zend_fiber *)(((char *) context) - XtOffsetOf(zend_fiber, context));
}

static zend_always_inline zend_fiber_context *zend_fiber_get_context(zend_fiber *fiber)
{
	return &fiber->context;
}

#endif
Zend/zend_ini_scanner_defs.h000064400000000366151730543140012136 0ustar00/* Generated by re2c 1.1.1 */
#line 3 "Zend/zend_ini_scanner_defs.h"

enum YYCONDTYPE {
	yycINITIAL,
	yycST_OFFSET,
	yycST_SECTION_VALUE,
	yycST_VALUE,
	yycST_SECTION_RAW,
	yycST_DOUBLE_QUOTES,
	yycST_VAR_FALLBACK,
	yycST_VARNAME,
	yycST_RAW,
};
Zend/zend_enum_arginfo.h000064400000003233151730543140011312 0ustar00/* This is a generated file, edit the .stub.php file instead.
 * Stub hash: 7092f1d4ba651f077cff37050899f090f00abf22 */

ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_class_UnitEnum_cases, 0, 0, IS_ARRAY, 0)
ZEND_END_ARG_INFO()

ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_class_BackedEnum_from, 0, 1, IS_STATIC, 0)
	ZEND_ARG_TYPE_MASK(0, value, MAY_BE_LONG|MAY_BE_STRING, NULL)
ZEND_END_ARG_INFO()

ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_class_BackedEnum_tryFrom, 0, 1, IS_STATIC, 1)
	ZEND_ARG_TYPE_MASK(0, value, MAY_BE_LONG|MAY_BE_STRING, NULL)
ZEND_END_ARG_INFO()


static const zend_function_entry class_UnitEnum_methods[] = {
	ZEND_RAW_FENTRY("cases", NULL, arginfo_class_UnitEnum_cases, ZEND_ACC_PUBLIC|ZEND_ACC_STATIC|ZEND_ACC_ABSTRACT, NULL, NULL)
	ZEND_FE_END
};

static const zend_function_entry class_BackedEnum_methods[] = {
	ZEND_RAW_FENTRY("from", NULL, arginfo_class_BackedEnum_from, ZEND_ACC_PUBLIC|ZEND_ACC_STATIC|ZEND_ACC_ABSTRACT, NULL, NULL)
	ZEND_RAW_FENTRY("tryFrom", NULL, arginfo_class_BackedEnum_tryFrom, ZEND_ACC_PUBLIC|ZEND_ACC_STATIC|ZEND_ACC_ABSTRACT, NULL, NULL)
	ZEND_FE_END
};

static zend_class_entry *register_class_UnitEnum(void)
{
	zend_class_entry ce, *class_entry;

	INIT_CLASS_ENTRY(ce, "UnitEnum", class_UnitEnum_methods);
	class_entry = zend_register_internal_interface(&ce);

	return class_entry;
}

static zend_class_entry *register_class_BackedEnum(zend_class_entry *class_entry_UnitEnum)
{
	zend_class_entry ce, *class_entry;

	INIT_CLASS_ENTRY(ce, "BackedEnum", class_BackedEnum_methods);
	class_entry = zend_register_internal_interface(&ce);
	zend_class_implements(class_entry, 1, class_entry_UnitEnum);

	return class_entry;
}
Zend/zend_property_hooks.h000064400000003440151730543150011731 0ustar00/*
   +----------------------------------------------------------------------+
   | Zend Engine                                                          |
   +----------------------------------------------------------------------+
   | Copyright (c) Zend Technologies Ltd. (http://www.zend.com)           |
   +----------------------------------------------------------------------+
   | This source file is subject to version 2.00 of the Zend license,     |
   | that is bundled with this package in the file LICENSE, and is        |
   | available through the world-wide-web at the following url:           |
   | http://www.zend.com/license/2_00.txt.                                |
   | If you did not receive a copy of the Zend license and are unable to  |
   | obtain it through the world-wide-web, please send a note to          |
   | license@zend.com so we can mail you a copy immediately.              |
   +----------------------------------------------------------------------+
   | Authors: Ilija Tovilo <ilutov@php.net>                               |
   +----------------------------------------------------------------------+
*/

#ifndef ZEND_PROPERTY_HOOKS_H
#define ZEND_PROPERTY_HOOKS_H

#include "zend_portability.h"

BEGIN_EXTERN_C()

typedef struct _zend_array zend_array;
typedef struct _zend_class_entry zend_class_entry;
typedef struct _zend_object zend_object;
typedef struct _zend_object_iterator zend_object_iterator;
typedef struct _zval_struct zval;

typedef enum {
	ZEND_PROPERTY_HOOK_GET = 0,
	ZEND_PROPERTY_HOOK_SET = 1,
} zend_property_hook_kind;

ZEND_API zend_object_iterator *zend_hooked_object_get_iterator(zend_class_entry *ce, zval *object, int by_ref);
ZEND_API zend_array *zend_hooked_object_build_properties(zend_object *zobj);

END_EXTERN_C()

#endif /* ZEND_PROPERTY_HOOKS_H */
Zend/zend_vm_handlers.h000064400000265770151730543150011164 0ustar00#define VM_HANDLERS(_) \
	_(0, ZEND_NOP_SPEC) \
	_(1, ZEND_ADD_SPEC_CONST_CONST) \
	_(2, ZEND_ADD_SPEC_CONST_TMPVARCV) \
	_(3, ZEND_ADD_SPEC_CONST_TMPVARCV) \
	_(5, ZEND_ADD_SPEC_CONST_TMPVARCV) \
	_(6, ZEND_ADD_SPEC_TMPVARCV_CONST) \
	_(7, ZEND_ADD_SPEC_TMPVARCV_TMPVARCV) \
	_(8, ZEND_ADD_SPEC_TMPVARCV_TMPVARCV) \
	_(10, ZEND_ADD_SPEC_TMPVARCV_TMPVARCV) \
	_(11, ZEND_ADD_SPEC_TMPVARCV_CONST) \
	_(12, ZEND_ADD_SPEC_TMPVARCV_TMPVARCV) \
	_(13, ZEND_ADD_SPEC_TMPVARCV_TMPVARCV) \
	_(15, ZEND_ADD_SPEC_TMPVARCV_TMPVARCV) \
	_(21, ZEND_ADD_SPEC_TMPVARCV_CONST) \
	_(22, ZEND_ADD_SPEC_TMPVARCV_TMPVARCV) \
	_(23, ZEND_ADD_SPEC_TMPVARCV_TMPVARCV) \
	_(25, ZEND_ADD_SPEC_TMPVARCV_TMPVARCV) \
	_(26, ZEND_SUB_SPEC_CONST_CONST) \
	_(27, ZEND_SUB_SPEC_CONST_TMPVARCV) \
	_(28, ZEND_SUB_SPEC_CONST_TMPVARCV) \
	_(30, ZEND_SUB_SPEC_CONST_TMPVARCV) \
	_(31, ZEND_SUB_SPEC_TMPVARCV_CONST) \
	_(32, ZEND_SUB_SPEC_TMPVARCV_TMPVARCV) \
	_(33, ZEND_SUB_SPEC_TMPVARCV_TMPVARCV) \
	_(35, ZEND_SUB_SPEC_TMPVARCV_TMPVARCV) \
	_(36, ZEND_SUB_SPEC_TMPVARCV_CONST) \
	_(37, ZEND_SUB_SPEC_TMPVARCV_TMPVARCV) \
	_(38, ZEND_SUB_SPEC_TMPVARCV_TMPVARCV) \
	_(40, ZEND_SUB_SPEC_TMPVARCV_TMPVARCV) \
	_(46, ZEND_SUB_SPEC_TMPVARCV_CONST) \
	_(47, ZEND_SUB_SPEC_TMPVARCV_TMPVARCV) \
	_(48, ZEND_SUB_SPEC_TMPVARCV_TMPVARCV) \
	_(50, ZEND_SUB_SPEC_TMPVARCV_TMPVARCV) \
	_(51, ZEND_MUL_SPEC_CONST_CONST) \
	_(56, ZEND_MUL_SPEC_TMPVARCV_CONST) \
	_(57, ZEND_MUL_SPEC_TMPVARCV_TMPVARCV) \
	_(58, ZEND_MUL_SPEC_TMPVARCV_TMPVARCV) \
	_(60, ZEND_MUL_SPEC_TMPVARCV_TMPVARCV) \
	_(61, ZEND_MUL_SPEC_TMPVARCV_CONST) \
	_(62, ZEND_MUL_SPEC_TMPVARCV_TMPVARCV) \
	_(63, ZEND_MUL_SPEC_TMPVARCV_TMPVARCV) \
	_(65, ZEND_MUL_SPEC_TMPVARCV_TMPVARCV) \
	_(71, ZEND_MUL_SPEC_TMPVARCV_CONST) \
	_(72, ZEND_MUL_SPEC_TMPVARCV_TMPVARCV) \
	_(73, ZEND_MUL_SPEC_TMPVARCV_TMPVARCV) \
	_(75, ZEND_MUL_SPEC_TMPVARCV_TMPVARCV) \
	_(76, ZEND_DIV_SPEC_CONST_CONST) \
	_(77, ZEND_DIV_SPEC_CONST_TMPVAR) \
	_(78, ZEND_DIV_SPEC_CONST_TMPVAR) \
	_(80, ZEND_DIV_SPEC_CONST_CV) \
	_(81, ZEND_DIV_SPEC_TMPVAR_CONST) \
	_(82, ZEND_DIV_SPEC_TMPVAR_TMPVAR) \
	_(83, ZEND_DIV_SPEC_TMPVAR_TMPVAR) \
	_(85, ZEND_DIV_SPEC_TMPVAR_CV) \
	_(86, ZEND_DIV_SPEC_TMPVAR_CONST) \
	_(87, ZEND_DIV_SPEC_TMPVAR_TMPVAR) \
	_(88, ZEND_DIV_SPEC_TMPVAR_TMPVAR) \
	_(90, ZEND_DIV_SPEC_TMPVAR_CV) \
	_(96, ZEND_DIV_SPEC_CV_CONST) \
	_(97, ZEND_DIV_SPEC_CV_TMPVAR) \
	_(98, ZEND_DIV_SPEC_CV_TMPVAR) \
	_(100, ZEND_DIV_SPEC_CV_CV) \
	_(101, ZEND_MOD_SPEC_CONST_CONST) \
	_(102, ZEND_MOD_SPEC_CONST_TMPVARCV) \
	_(103, ZEND_MOD_SPEC_CONST_TMPVARCV) \
	_(105, ZEND_MOD_SPEC_CONST_TMPVARCV) \
	_(106, ZEND_MOD_SPEC_TMPVARCV_CONST) \
	_(107, ZEND_MOD_SPEC_TMPVARCV_TMPVARCV) \
	_(108, ZEND_MOD_SPEC_TMPVARCV_TMPVARCV) \
	_(110, ZEND_MOD_SPEC_TMPVARCV_TMPVARCV) \
	_(111, ZEND_MOD_SPEC_TMPVARCV_CONST) \
	_(112, ZEND_MOD_SPEC_TMPVARCV_TMPVARCV) \
	_(113, ZEND_MOD_SPEC_TMPVARCV_TMPVARCV) \
	_(115, ZEND_MOD_SPEC_TMPVARCV_TMPVARCV) \
	_(121, ZEND_MOD_SPEC_TMPVARCV_CONST) \
	_(122, ZEND_MOD_SPEC_TMPVARCV_TMPVARCV) \
	_(123, ZEND_MOD_SPEC_TMPVARCV_TMPVARCV) \
	_(125, ZEND_MOD_SPEC_TMPVARCV_TMPVARCV) \
	_(126, ZEND_SL_SPEC_CONST_CONST) \
	_(127, ZEND_SL_SPEC_CONST_TMPVARCV) \
	_(128, ZEND_SL_SPEC_CONST_TMPVARCV) \
	_(130, ZEND_SL_SPEC_CONST_TMPVARCV) \
	_(131, ZEND_SL_SPEC_TMPVARCV_CONST) \
	_(132, ZEND_SL_SPEC_TMPVARCV_TMPVARCV) \
	_(133, ZEND_SL_SPEC_TMPVARCV_TMPVARCV) \
	_(135, ZEND_SL_SPEC_TMPVARCV_TMPVARCV) \
	_(136, ZEND_SL_SPEC_TMPVARCV_CONST) \
	_(137, ZEND_SL_SPEC_TMPVARCV_TMPVARCV) \
	_(138, ZEND_SL_SPEC_TMPVARCV_TMPVARCV) \
	_(140, ZEND_SL_SPEC_TMPVARCV_TMPVARCV) \
	_(146, ZEND_SL_SPEC_TMPVARCV_CONST) \
	_(147, ZEND_SL_SPEC_TMPVARCV_TMPVARCV) \
	_(148, ZEND_SL_SPEC_TMPVARCV_TMPVARCV) \
	_(150, ZEND_SL_SPEC_TMPVARCV_TMPVARCV) \
	_(151, ZEND_SR_SPEC_CONST_CONST) \
	_(152, ZEND_SR_SPEC_CONST_TMPVARCV) \
	_(153, ZEND_SR_SPEC_CONST_TMPVARCV) \
	_(155, ZEND_SR_SPEC_CONST_TMPVARCV) \
	_(156, ZEND_SR_SPEC_TMPVARCV_CONST) \
	_(157, ZEND_SR_SPEC_TMPVARCV_TMPVARCV) \
	_(158, ZEND_SR_SPEC_TMPVARCV_TMPVARCV) \
	_(160, ZEND_SR_SPEC_TMPVARCV_TMPVARCV) \
	_(161, ZEND_SR_SPEC_TMPVARCV_CONST) \
	_(162, ZEND_SR_SPEC_TMPVARCV_TMPVARCV) \
	_(163, ZEND_SR_SPEC_TMPVARCV_TMPVARCV) \
	_(165, ZEND_SR_SPEC_TMPVARCV_TMPVARCV) \
	_(171, ZEND_SR_SPEC_TMPVARCV_CONST) \
	_(172, ZEND_SR_SPEC_TMPVARCV_TMPVARCV) \
	_(173, ZEND_SR_SPEC_TMPVARCV_TMPVARCV) \
	_(175, ZEND_SR_SPEC_TMPVARCV_TMPVARCV) \
	_(177, ZEND_CONCAT_SPEC_CONST_TMPVAR) \
	_(178, ZEND_CONCAT_SPEC_CONST_TMPVAR) \
	_(180, ZEND_CONCAT_SPEC_CONST_CV) \
	_(181, ZEND_CONCAT_SPEC_TMPVAR_CONST) \
	_(182, ZEND_CONCAT_SPEC_TMPVAR_TMPVAR) \
	_(183, ZEND_CONCAT_SPEC_TMPVAR_TMPVAR) \
	_(185, ZEND_CONCAT_SPEC_TMPVAR_CV) \
	_(186, ZEND_CONCAT_SPEC_TMPVAR_CONST) \
	_(187, ZEND_CONCAT_SPEC_TMPVAR_TMPVAR) \
	_(188, ZEND_CONCAT_SPEC_TMPVAR_TMPVAR) \
	_(190, ZEND_CONCAT_SPEC_TMPVAR_CV) \
	_(196, ZEND_CONCAT_SPEC_CV_CONST) \
	_(197, ZEND_CONCAT_SPEC_CV_TMPVAR) \
	_(198, ZEND_CONCAT_SPEC_CV_TMPVAR) \
	_(200, ZEND_CONCAT_SPEC_CV_CV) \
	_(201, ZEND_BW_OR_SPEC_CONST_CONST) \
	_(206, ZEND_BW_OR_SPEC_TMPVARCV_CONST) \
	_(207, ZEND_BW_OR_SPEC_TMPVARCV_TMPVARCV) \
	_(208, ZEND_BW_OR_SPEC_TMPVARCV_TMPVARCV) \
	_(210, ZEND_BW_OR_SPEC_TMPVARCV_TMPVARCV) \
	_(211, ZEND_BW_OR_SPEC_TMPVARCV_CONST) \
	_(212, ZEND_BW_OR_SPEC_TMPVARCV_TMPVARCV) \
	_(213, ZEND_BW_OR_SPEC_TMPVARCV_TMPVARCV) \
	_(215, ZEND_BW_OR_SPEC_TMPVARCV_TMPVARCV) \
	_(221, ZEND_BW_OR_SPEC_TMPVARCV_CONST) \
	_(222, ZEND_BW_OR_SPEC_TMPVARCV_TMPVARCV) \
	_(223, ZEND_BW_OR_SPEC_TMPVARCV_TMPVARCV) \
	_(225, ZEND_BW_OR_SPEC_TMPVARCV_TMPVARCV) \
	_(226, ZEND_BW_AND_SPEC_CONST_CONST) \
	_(231, ZEND_BW_AND_SPEC_TMPVARCV_CONST) \
	_(232, ZEND_BW_AND_SPEC_TMPVARCV_TMPVARCV) \
	_(233, ZEND_BW_AND_SPEC_TMPVARCV_TMPVARCV) \
	_(235, ZEND_BW_AND_SPEC_TMPVARCV_TMPVARCV) \
	_(236, ZEND_BW_AND_SPEC_TMPVARCV_CONST) \
	_(237, ZEND_BW_AND_SPEC_TMPVARCV_TMPVARCV) \
	_(238, ZEND_BW_AND_SPEC_TMPVARCV_TMPVARCV) \
	_(240, ZEND_BW_AND_SPEC_TMPVARCV_TMPVARCV) \
	_(246, ZEND_BW_AND_SPEC_TMPVARCV_CONST) \
	_(247, ZEND_BW_AND_SPEC_TMPVARCV_TMPVARCV) \
	_(248, ZEND_BW_AND_SPEC_TMPVARCV_TMPVARCV) \
	_(250, ZEND_BW_AND_SPEC_TMPVARCV_TMPVARCV) \
	_(251, ZEND_BW_XOR_SPEC_CONST_CONST) \
	_(256, ZEND_BW_XOR_SPEC_TMPVARCV_CONST) \
	_(257, ZEND_BW_XOR_SPEC_TMPVARCV_TMPVARCV) \
	_(258, ZEND_BW_XOR_SPEC_TMPVARCV_TMPVARCV) \
	_(260, ZEND_BW_XOR_SPEC_TMPVARCV_TMPVARCV) \
	_(261, ZEND_BW_XOR_SPEC_TMPVARCV_CONST) \
	_(262, ZEND_BW_XOR_SPEC_TMPVARCV_TMPVARCV) \
	_(263, ZEND_BW_XOR_SPEC_TMPVARCV_TMPVARCV) \
	_(265, ZEND_BW_XOR_SPEC_TMPVARCV_TMPVARCV) \
	_(271, ZEND_BW_XOR_SPEC_TMPVARCV_CONST) \
	_(272, ZEND_BW_XOR_SPEC_TMPVARCV_TMPVARCV) \
	_(273, ZEND_BW_XOR_SPEC_TMPVARCV_TMPVARCV) \
	_(275, ZEND_BW_XOR_SPEC_TMPVARCV_TMPVARCV) \
	_(276, ZEND_POW_SPEC_CONST_CONST) \
	_(277, ZEND_POW_SPEC_CONST_TMPVAR) \
	_(278, ZEND_POW_SPEC_CONST_TMPVAR) \
	_(280, ZEND_POW_SPEC_CONST_CV) \
	_(281, ZEND_POW_SPEC_TMPVAR_CONST) \
	_(282, ZEND_POW_SPEC_TMPVAR_TMPVAR) \
	_(283, ZEND_POW_SPEC_TMPVAR_TMPVAR) \
	_(285, ZEND_POW_SPEC_TMPVAR_CV) \
	_(286, ZEND_POW_SPEC_TMPVAR_CONST) \
	_(287, ZEND_POW_SPEC_TMPVAR_TMPVAR) \
	_(288, ZEND_POW_SPEC_TMPVAR_TMPVAR) \
	_(290, ZEND_POW_SPEC_TMPVAR_CV) \
	_(296, ZEND_POW_SPEC_CV_CONST) \
	_(297, ZEND_POW_SPEC_CV_TMPVAR) \
	_(298, ZEND_POW_SPEC_CV_TMPVAR) \
	_(300, ZEND_POW_SPEC_CV_CV) \
	_(301, ZEND_BW_NOT_SPEC_CONST) \
	_(302, ZEND_BW_NOT_SPEC_TMPVARCV) \
	_(303, ZEND_BW_NOT_SPEC_TMPVARCV) \
	_(305, ZEND_BW_NOT_SPEC_TMPVARCV) \
	_(306, ZEND_BOOL_NOT_SPEC_CONST) \
	_(307, ZEND_BOOL_NOT_SPEC_TMPVAR) \
	_(308, ZEND_BOOL_NOT_SPEC_TMPVAR) \
	_(310, ZEND_BOOL_NOT_SPEC_CV) \
	_(311, ZEND_BOOL_XOR_SPEC_CONST_CONST) \
	_(316, ZEND_BOOL_XOR_SPEC_TMPVAR_CONST) \
	_(317, ZEND_BOOL_XOR_SPEC_TMPVAR_TMPVAR) \
	_(318, ZEND_BOOL_XOR_SPEC_TMPVAR_TMPVAR) \
	_(321, ZEND_BOOL_XOR_SPEC_TMPVAR_CONST) \
	_(322, ZEND_BOOL_XOR_SPEC_TMPVAR_TMPVAR) \
	_(323, ZEND_BOOL_XOR_SPEC_TMPVAR_TMPVAR) \
	_(331, ZEND_BOOL_XOR_SPEC_CV_CONST) \
	_(332, ZEND_BOOL_XOR_SPEC_CV_TMPVAR) \
	_(333, ZEND_BOOL_XOR_SPEC_CV_TMPVAR) \
	_(335, ZEND_BOOL_XOR_SPEC_CV_CV) \
	_(336, ZEND_IS_IDENTICAL_SPEC_CONST_CONST) \
	_(341, ZEND_IS_IDENTICAL_SPEC_TMP_CONST) \
	_(342, ZEND_IS_IDENTICAL_SPEC_TMP_TMP) \
	_(346, ZEND_IS_IDENTICAL_SPEC_VAR_CONST) \
	_(347, ZEND_IS_IDENTICAL_SPEC_VAR_TMP) \
	_(348, ZEND_IS_IDENTICAL_SPEC_VAR_VAR) \
	_(356, ZEND_IS_IDENTICAL_SPEC_CV_CONST) \
	_(357, ZEND_IS_IDENTICAL_SPEC_CV_TMP) \
	_(358, ZEND_IS_IDENTICAL_SPEC_CV_VAR) \
	_(360, ZEND_IS_IDENTICAL_SPEC_CV_CV) \
	_(361, ZEND_IS_NOT_IDENTICAL_SPEC_CONST_CONST) \
	_(366, ZEND_IS_NOT_IDENTICAL_SPEC_TMP_CONST) \
	_(367, ZEND_IS_NOT_IDENTICAL_SPEC_TMP_TMP) \
	_(371, ZEND_IS_NOT_IDENTICAL_SPEC_VAR_CONST) \
	_(372, ZEND_IS_NOT_IDENTICAL_SPEC_VAR_TMP) \
	_(373, ZEND_IS_NOT_IDENTICAL_SPEC_VAR_VAR) \
	_(381, ZEND_IS_NOT_IDENTICAL_SPEC_CV_CONST) \
	_(382, ZEND_IS_NOT_IDENTICAL_SPEC_CV_TMP) \
	_(383, ZEND_IS_NOT_IDENTICAL_SPEC_CV_VAR) \
	_(385, ZEND_IS_NOT_IDENTICAL_SPEC_CV_CV) \
	_(386, ZEND_IS_EQUAL_SPEC_CONST_CONST) \
	_(387, ZEND_IS_EQUAL_SPEC_CONST_CONST) \
	_(388, ZEND_IS_EQUAL_SPEC_CONST_CONST) \
	_(401, ZEND_IS_EQUAL_SPEC_TMPVAR_CONST) \
	_(402, ZEND_IS_EQUAL_SPEC_TMPVAR_CONST_JMPZ) \
	_(403, ZEND_IS_EQUAL_SPEC_TMPVAR_CONST_JMPNZ) \
	_(404, ZEND_IS_EQUAL_SPEC_TMPVAR_TMPVAR) \
	_(405, ZEND_IS_EQUAL_SPEC_TMPVAR_TMPVAR_JMPZ) \
	_(406, ZEND_IS_EQUAL_SPEC_TMPVAR_TMPVAR_JMPNZ) \
	_(407, ZEND_IS_EQUAL_SPEC_TMPVAR_TMPVAR) \
	_(408, ZEND_IS_EQUAL_SPEC_TMPVAR_TMPVAR_JMPZ) \
	_(409, ZEND_IS_EQUAL_SPEC_TMPVAR_TMPVAR_JMPNZ) \
	_(416, ZEND_IS_EQUAL_SPEC_TMPVAR_CONST) \
	_(417, ZEND_IS_EQUAL_SPEC_TMPVAR_CONST_JMPZ) \
	_(418, ZEND_IS_EQUAL_SPEC_TMPVAR_CONST_JMPNZ) \
	_(419, ZEND_IS_EQUAL_SPEC_TMPVAR_TMPVAR) \
	_(420, ZEND_IS_EQUAL_SPEC_TMPVAR_TMPVAR_JMPZ) \
	_(421, ZEND_IS_EQUAL_SPEC_TMPVAR_TMPVAR_JMPNZ) \
	_(422, ZEND_IS_EQUAL_SPEC_TMPVAR_TMPVAR) \
	_(423, ZEND_IS_EQUAL_SPEC_TMPVAR_TMPVAR_JMPZ) \
	_(424, ZEND_IS_EQUAL_SPEC_TMPVAR_TMPVAR_JMPNZ) \
	_(446, ZEND_IS_EQUAL_SPEC_CV_CONST) \
	_(447, ZEND_IS_EQUAL_SPEC_CV_CONST_JMPZ) \
	_(448, ZEND_IS_EQUAL_SPEC_CV_CONST_JMPNZ) \
	_(449, ZEND_IS_EQUAL_SPEC_CV_TMPVAR) \
	_(450, ZEND_IS_EQUAL_SPEC_CV_TMPVAR_JMPZ) \
	_(451, ZEND_IS_EQUAL_SPEC_CV_TMPVAR_JMPNZ) \
	_(452, ZEND_IS_EQUAL_SPEC_CV_TMPVAR) \
	_(453, ZEND_IS_EQUAL_SPEC_CV_TMPVAR_JMPZ) \
	_(454, ZEND_IS_EQUAL_SPEC_CV_TMPVAR_JMPNZ) \
	_(458, ZEND_IS_EQUAL_SPEC_CV_CV) \
	_(459, ZEND_IS_EQUAL_SPEC_CV_CV_JMPZ) \
	_(460, ZEND_IS_EQUAL_SPEC_CV_CV_JMPNZ) \
	_(461, ZEND_IS_NOT_EQUAL_SPEC_CONST_CONST) \
	_(462, ZEND_IS_NOT_EQUAL_SPEC_CONST_CONST) \
	_(463, ZEND_IS_NOT_EQUAL_SPEC_CONST_CONST) \
	_(476, ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_CONST) \
	_(477, ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_CONST_JMPZ) \
	_(478, ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_CONST_JMPNZ) \
	_(479, ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_TMPVAR) \
	_(480, ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_TMPVAR_JMPZ) \
	_(481, ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_TMPVAR_JMPNZ) \
	_(482, ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_TMPVAR) \
	_(483, ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_TMPVAR_JMPZ) \
	_(484, ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_TMPVAR_JMPNZ) \
	_(491, ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_CONST) \
	_(492, ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_CONST_JMPZ) \
	_(493, ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_CONST_JMPNZ) \
	_(494, ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_TMPVAR) \
	_(495, ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_TMPVAR_JMPZ) \
	_(496, ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_TMPVAR_JMPNZ) \
	_(497, ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_TMPVAR) \
	_(498, ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_TMPVAR_JMPZ) \
	_(499, ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_TMPVAR_JMPNZ) \
	_(521, ZEND_IS_NOT_EQUAL_SPEC_CV_CONST) \
	_(522, ZEND_IS_NOT_EQUAL_SPEC_CV_CONST_JMPZ) \
	_(523, ZEND_IS_NOT_EQUAL_SPEC_CV_CONST_JMPNZ) \
	_(524, ZEND_IS_NOT_EQUAL_SPEC_CV_TMPVAR) \
	_(525, ZEND_IS_NOT_EQUAL_SPEC_CV_TMPVAR_JMPZ) \
	_(526, ZEND_IS_NOT_EQUAL_SPEC_CV_TMPVAR_JMPNZ) \
	_(527, ZEND_IS_NOT_EQUAL_SPEC_CV_TMPVAR) \
	_(528, ZEND_IS_NOT_EQUAL_SPEC_CV_TMPVAR_JMPZ) \
	_(529, ZEND_IS_NOT_EQUAL_SPEC_CV_TMPVAR_JMPNZ) \
	_(533, ZEND_IS_NOT_EQUAL_SPEC_CV_CV) \
	_(534, ZEND_IS_NOT_EQUAL_SPEC_CV_CV_JMPZ) \
	_(535, ZEND_IS_NOT_EQUAL_SPEC_CV_CV_JMPNZ) \
	_(536, ZEND_IS_SMALLER_SPEC_CONST_CONST) \
	_(537, ZEND_IS_SMALLER_SPEC_CONST_CONST) \
	_(538, ZEND_IS_SMALLER_SPEC_CONST_CONST) \
	_(539, ZEND_IS_SMALLER_SPEC_CONST_TMPVARCV) \
	_(540, ZEND_IS_SMALLER_SPEC_CONST_TMPVARCV_JMPZ) \
	_(541, ZEND_IS_SMALLER_SPEC_CONST_TMPVARCV_JMPNZ) \
	_(542, ZEND_IS_SMALLER_SPEC_CONST_TMPVARCV) \
	_(543, ZEND_IS_SMALLER_SPEC_CONST_TMPVARCV_JMPZ) \
	_(544, ZEND_IS_SMALLER_SPEC_CONST_TMPVARCV_JMPNZ) \
	_(548, ZEND_IS_SMALLER_SPEC_CONST_TMPVARCV) \
	_(549, ZEND_IS_SMALLER_SPEC_CONST_TMPVARCV_JMPZ) \
	_(550, ZEND_IS_SMALLER_SPEC_CONST_TMPVARCV_JMPNZ) \
	_(551, ZEND_IS_SMALLER_SPEC_TMPVARCV_CONST) \
	_(552, ZEND_IS_SMALLER_SPEC_TMPVARCV_CONST_JMPZ) \
	_(553, ZEND_IS_SMALLER_SPEC_TMPVARCV_CONST_JMPNZ) \
	_(554, ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV) \
	_(555, ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_JMPZ) \
	_(556, ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \
	_(557, ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV) \
	_(558, ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_JMPZ) \
	_(559, ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \
	_(563, ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV) \
	_(564, ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_JMPZ) \
	_(565, ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \
	_(566, ZEND_IS_SMALLER_SPEC_TMPVARCV_CONST) \
	_(567, ZEND_IS_SMALLER_SPEC_TMPVARCV_CONST_JMPZ) \
	_(568, ZEND_IS_SMALLER_SPEC_TMPVARCV_CONST_JMPNZ) \
	_(569, ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV) \
	_(570, ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_JMPZ) \
	_(571, ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \
	_(572, ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV) \
	_(573, ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_JMPZ) \
	_(574, ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \
	_(578, ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV) \
	_(579, ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_JMPZ) \
	_(580, ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \
	_(596, ZEND_IS_SMALLER_SPEC_TMPVARCV_CONST) \
	_(597, ZEND_IS_SMALLER_SPEC_TMPVARCV_CONST_JMPZ) \
	_(598, ZEND_IS_SMALLER_SPEC_TMPVARCV_CONST_JMPNZ) \
	_(599, ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV) \
	_(600, ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_JMPZ) \
	_(601, ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \
	_(602, ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV) \
	_(603, ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_JMPZ) \
	_(604, ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \
	_(608, ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV) \
	_(609, ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_JMPZ) \
	_(610, ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \
	_(611, ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_CONST) \
	_(612, ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_CONST) \
	_(613, ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_CONST) \
	_(614, ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_TMPVARCV) \
	_(615, ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_TMPVARCV_JMPZ) \
	_(616, ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_TMPVARCV_JMPNZ) \
	_(617, ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_TMPVARCV) \
	_(618, ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_TMPVARCV_JMPZ) \
	_(619, ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_TMPVARCV_JMPNZ) \
	_(623, ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_TMPVARCV) \
	_(624, ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_TMPVARCV_JMPZ) \
	_(625, ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_TMPVARCV_JMPNZ) \
	_(626, ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_CONST) \
	_(627, ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_CONST_JMPZ) \
	_(628, ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_CONST_JMPNZ) \
	_(629, ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV) \
	_(630, ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_JMPZ) \
	_(631, ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \
	_(632, ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV) \
	_(633, ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_JMPZ) \
	_(634, ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \
	_(638, ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV) \
	_(639, ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_JMPZ) \
	_(640, ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \
	_(641, ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_CONST) \
	_(642, ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_CONST_JMPZ) \
	_(643, ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_CONST_JMPNZ) \
	_(644, ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV) \
	_(645, ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_JMPZ) \
	_(646, ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \
	_(647, ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV) \
	_(648, ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_JMPZ) \
	_(649, ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \
	_(653, ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV) \
	_(654, ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_JMPZ) \
	_(655, ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \
	_(671, ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_CONST) \
	_(672, ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_CONST_JMPZ) \
	_(673, ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_CONST_JMPNZ) \
	_(674, ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV) \
	_(675, ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_JMPZ) \
	_(676, ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \
	_(677, ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV) \
	_(678, ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_JMPZ) \
	_(679, ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \
	_(683, ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV) \
	_(684, ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_JMPZ) \
	_(685, ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \
	_(706, ZEND_ASSIGN_SPEC_VAR_CONST_RETVAL_UNUSED) \
	_(707, ZEND_ASSIGN_SPEC_VAR_CONST_RETVAL_USED) \
	_(708, ZEND_ASSIGN_SPEC_VAR_TMP_RETVAL_UNUSED) \
	_(709, ZEND_ASSIGN_SPEC_VAR_TMP_RETVAL_USED) \
	_(710, ZEND_ASSIGN_SPEC_VAR_VAR_RETVAL_UNUSED) \
	_(711, ZEND_ASSIGN_SPEC_VAR_VAR_RETVAL_USED) \
	_(714, ZEND_ASSIGN_SPEC_VAR_CV_RETVAL_UNUSED) \
	_(715, ZEND_ASSIGN_SPEC_VAR_CV_RETVAL_USED) \
	_(726, ZEND_ASSIGN_SPEC_CV_CONST_RETVAL_UNUSED) \
	_(727, ZEND_ASSIGN_SPEC_CV_CONST_RETVAL_USED) \
	_(728, ZEND_ASSIGN_SPEC_CV_TMP_RETVAL_UNUSED) \
	_(729, ZEND_ASSIGN_SPEC_CV_TMP_RETVAL_USED) \
	_(730, ZEND_ASSIGN_SPEC_CV_VAR_RETVAL_UNUSED) \
	_(731, ZEND_ASSIGN_SPEC_CV_VAR_RETVAL_USED) \
	_(734, ZEND_ASSIGN_SPEC_CV_CV_RETVAL_UNUSED) \
	_(735, ZEND_ASSIGN_SPEC_CV_CV_RETVAL_USED) \
	_(786, ZEND_ASSIGN_DIM_SPEC_VAR_CONST_OP_DATA_CONST) \
	_(787, ZEND_ASSIGN_DIM_SPEC_VAR_CONST_OP_DATA_TMP) \
	_(788, ZEND_ASSIGN_DIM_SPEC_VAR_CONST_OP_DATA_VAR) \
	_(790, ZEND_ASSIGN_DIM_SPEC_VAR_CONST_OP_DATA_CV) \
	_(791, ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_DATA_CONST) \
	_(792, ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_DATA_TMP) \
	_(793, ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_DATA_VAR) \
	_(795, ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_DATA_CV) \
	_(796, ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_DATA_CONST) \
	_(797, ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_DATA_TMP) \
	_(798, ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_DATA_VAR) \
	_(800, ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_DATA_CV) \
	_(801, ZEND_ASSIGN_DIM_SPEC_VAR_UNUSED_OP_DATA_CONST) \
	_(802, ZEND_ASSIGN_DIM_SPEC_VAR_UNUSED_OP_DATA_TMP) \
	_(803, ZEND_ASSIGN_DIM_SPEC_VAR_UNUSED_OP_DATA_VAR) \
	_(805, ZEND_ASSIGN_DIM_SPEC_VAR_UNUSED_OP_DATA_CV) \
	_(806, ZEND_ASSIGN_DIM_SPEC_VAR_CV_OP_DATA_CONST) \
	_(807, ZEND_ASSIGN_DIM_SPEC_VAR_CV_OP_DATA_TMP) \
	_(808, ZEND_ASSIGN_DIM_SPEC_VAR_CV_OP_DATA_VAR) \
	_(810, ZEND_ASSIGN_DIM_SPEC_VAR_CV_OP_DATA_CV) \
	_(836, ZEND_ASSIGN_DIM_SPEC_CV_CONST_OP_DATA_CONST) \
	_(837, ZEND_ASSIGN_DIM_SPEC_CV_CONST_OP_DATA_TMP) \
	_(838, ZEND_ASSIGN_DIM_SPEC_CV_CONST_OP_DATA_VAR) \
	_(840, ZEND_ASSIGN_DIM_SPEC_CV_CONST_OP_DATA_CV) \
	_(841, ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_DATA_CONST) \
	_(842, ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_DATA_TMP) \
	_(843, ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_DATA_VAR) \
	_(845, ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_DATA_CV) \
	_(846, ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_DATA_CONST) \
	_(847, ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_DATA_TMP) \
	_(848, ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_DATA_VAR) \
	_(850, ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_DATA_CV) \
	_(851, ZEND_ASSIGN_DIM_SPEC_CV_UNUSED_OP_DATA_CONST) \
	_(852, ZEND_ASSIGN_DIM_SPEC_CV_UNUSED_OP_DATA_TMP) \
	_(853, ZEND_ASSIGN_DIM_SPEC_CV_UNUSED_OP_DATA_VAR) \
	_(855, ZEND_ASSIGN_DIM_SPEC_CV_UNUSED_OP_DATA_CV) \
	_(856, ZEND_ASSIGN_DIM_SPEC_CV_CV_OP_DATA_CONST) \
	_(857, ZEND_ASSIGN_DIM_SPEC_CV_CV_OP_DATA_TMP) \
	_(858, ZEND_ASSIGN_DIM_SPEC_CV_CV_OP_DATA_VAR) \
	_(860, ZEND_ASSIGN_DIM_SPEC_CV_CV_OP_DATA_CV) \
	_(911, ZEND_ASSIGN_OBJ_SPEC_VAR_CONST_OP_DATA_CONST) \
	_(912, ZEND_ASSIGN_OBJ_SPEC_VAR_CONST_OP_DATA_TMP) \
	_(913, ZEND_ASSIGN_OBJ_SPEC_VAR_CONST_OP_DATA_VAR) \
	_(915, ZEND_ASSIGN_OBJ_SPEC_VAR_CONST_OP_DATA_CV) \
	_(916, ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_CONST) \
	_(917, ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_TMP) \
	_(918, ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_VAR) \
	_(920, ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_CV) \
	_(921, ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_CONST) \
	_(922, ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_TMP) \
	_(923, ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_VAR) \
	_(925, ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_CV) \
	_(931, ZEND_ASSIGN_OBJ_SPEC_VAR_CV_OP_DATA_CONST) \
	_(932, ZEND_ASSIGN_OBJ_SPEC_VAR_CV_OP_DATA_TMP) \
	_(933, ZEND_ASSIGN_OBJ_SPEC_VAR_CV_OP_DATA_VAR) \
	_(935, ZEND_ASSIGN_OBJ_SPEC_VAR_CV_OP_DATA_CV) \
	_(936, ZEND_ASSIGN_OBJ_SPEC_UNUSED_CONST_OP_DATA_CONST) \
	_(937, ZEND_ASSIGN_OBJ_SPEC_UNUSED_CONST_OP_DATA_TMP) \
	_(938, ZEND_ASSIGN_OBJ_SPEC_UNUSED_CONST_OP_DATA_VAR) \
	_(940, ZEND_ASSIGN_OBJ_SPEC_UNUSED_CONST_OP_DATA_CV) \
	_(941, ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_OP_DATA_CONST) \
	_(942, ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_OP_DATA_TMP) \
	_(943, ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_OP_DATA_VAR) \
	_(945, ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_OP_DATA_CV) \
	_(946, ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_OP_DATA_CONST) \
	_(947, ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_OP_DATA_TMP) \
	_(948, ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_OP_DATA_VAR) \
	_(950, ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_OP_DATA_CV) \
	_(956, ZEND_ASSIGN_OBJ_SPEC_UNUSED_CV_OP_DATA_CONST) \
	_(957, ZEND_ASSIGN_OBJ_SPEC_UNUSED_CV_OP_DATA_TMP) \
	_(958, ZEND_ASSIGN_OBJ_SPEC_UNUSED_CV_OP_DATA_VAR) \
	_(960, ZEND_ASSIGN_OBJ_SPEC_UNUSED_CV_OP_DATA_CV) \
	_(961, ZEND_ASSIGN_OBJ_SPEC_CV_CONST_OP_DATA_CONST) \
	_(962, ZEND_ASSIGN_OBJ_SPEC_CV_CONST_OP_DATA_TMP) \
	_(963, ZEND_ASSIGN_OBJ_SPEC_CV_CONST_OP_DATA_VAR) \
	_(965, ZEND_ASSIGN_OBJ_SPEC_CV_CONST_OP_DATA_CV) \
	_(966, ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_DATA_CONST) \
	_(967, ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_DATA_TMP) \
	_(968, ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_DATA_VAR) \
	_(970, ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_DATA_CV) \
	_(971, ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_DATA_CONST) \
	_(972, ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_DATA_TMP) \
	_(973, ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_DATA_VAR) \
	_(975, ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_DATA_CV) \
	_(981, ZEND_ASSIGN_OBJ_SPEC_CV_CV_OP_DATA_CONST) \
	_(982, ZEND_ASSIGN_OBJ_SPEC_CV_CV_OP_DATA_TMP) \
	_(983, ZEND_ASSIGN_OBJ_SPEC_CV_CV_OP_DATA_VAR) \
	_(985, ZEND_ASSIGN_OBJ_SPEC_CV_CV_OP_DATA_CV) \
	_(986, ZEND_ASSIGN_STATIC_PROP_SPEC_OP_DATA_CONST) \
	_(987, ZEND_ASSIGN_STATIC_PROP_SPEC_OP_DATA_TMP) \
	_(988, ZEND_ASSIGN_STATIC_PROP_SPEC_OP_DATA_VAR) \
	_(990, ZEND_ASSIGN_STATIC_PROP_SPEC_OP_DATA_CV) \
	_(1001, ZEND_ASSIGN_OP_SPEC_VAR_CONST) \
	_(1002, ZEND_ASSIGN_OP_SPEC_VAR_TMPVAR) \
	_(1003, ZEND_ASSIGN_OP_SPEC_VAR_TMPVAR) \
	_(1005, ZEND_ASSIGN_OP_SPEC_VAR_CV) \
	_(1011, ZEND_ASSIGN_OP_SPEC_CV_CONST) \
	_(1012, ZEND_ASSIGN_OP_SPEC_CV_TMPVAR) \
	_(1013, ZEND_ASSIGN_OP_SPEC_CV_TMPVAR) \
	_(1015, ZEND_ASSIGN_OP_SPEC_CV_CV) \
	_(1026, ZEND_ASSIGN_DIM_OP_SPEC_VAR_CONST) \
	_(1027, ZEND_ASSIGN_DIM_OP_SPEC_VAR_TMPVAR) \
	_(1028, ZEND_ASSIGN_DIM_OP_SPEC_VAR_TMPVAR) \
	_(1029, ZEND_ASSIGN_DIM_OP_SPEC_VAR_UNUSED) \
	_(1030, ZEND_ASSIGN_DIM_OP_SPEC_VAR_CV) \
	_(1036, ZEND_ASSIGN_DIM_OP_SPEC_CV_CONST) \
	_(1037, ZEND_ASSIGN_DIM_OP_SPEC_CV_TMPVAR) \
	_(1038, ZEND_ASSIGN_DIM_OP_SPEC_CV_TMPVAR) \
	_(1039, ZEND_ASSIGN_DIM_OP_SPEC_CV_UNUSED) \
	_(1040, ZEND_ASSIGN_DIM_OP_SPEC_CV_CV) \
	_(1051, ZEND_ASSIGN_OBJ_OP_SPEC_VAR_CONST) \
	_(1052, ZEND_ASSIGN_OBJ_OP_SPEC_VAR_TMPVAR) \
	_(1053, ZEND_ASSIGN_OBJ_OP_SPEC_VAR_TMPVAR) \
	_(1055, ZEND_ASSIGN_OBJ_OP_SPEC_VAR_CV) \
	_(1056, ZEND_ASSIGN_OBJ_OP_SPEC_UNUSED_CONST) \
	_(1057, ZEND_ASSIGN_OBJ_OP_SPEC_UNUSED_TMPVAR) \
	_(1058, ZEND_ASSIGN_OBJ_OP_SPEC_UNUSED_TMPVAR) \
	_(1060, ZEND_ASSIGN_OBJ_OP_SPEC_UNUSED_CV) \
	_(1061, ZEND_ASSIGN_OBJ_OP_SPEC_CV_CONST) \
	_(1062, ZEND_ASSIGN_OBJ_OP_SPEC_CV_TMPVAR) \
	_(1063, ZEND_ASSIGN_OBJ_OP_SPEC_CV_TMPVAR) \
	_(1065, ZEND_ASSIGN_OBJ_OP_SPEC_CV_CV) \
	_(1066, ZEND_ASSIGN_STATIC_PROP_OP_SPEC) \
	_(1079, ZEND_ASSIGN_REF_SPEC_VAR_VAR) \
	_(1081, ZEND_ASSIGN_REF_SPEC_VAR_CV) \
	_(1089, ZEND_ASSIGN_REF_SPEC_CV_VAR) \
	_(1091, ZEND_ASSIGN_REF_SPEC_CV_CV) \
	_(1092, ZEND_QM_ASSIGN_SPEC_CONST) \
	_(1093, ZEND_QM_ASSIGN_SPEC_TMP) \
	_(1094, ZEND_QM_ASSIGN_SPEC_VAR) \
	_(1096, ZEND_QM_ASSIGN_SPEC_CV) \
	_(1149, ZEND_ASSIGN_OBJ_REF_SPEC_VAR_CONST_OP_DATA_VAR) \
	_(1151, ZEND_ASSIGN_OBJ_REF_SPEC_VAR_CONST_OP_DATA_CV) \
	_(1154, ZEND_ASSIGN_OBJ_REF_SPEC_VAR_TMPVAR_OP_DATA_VAR) \
	_(1156, ZEND_ASSIGN_OBJ_REF_SPEC_VAR_TMPVAR_OP_DATA_CV) \
	_(1159, ZEND_ASSIGN_OBJ_REF_SPEC_VAR_TMPVAR_OP_DATA_VAR) \
	_(1161, ZEND_ASSIGN_OBJ_REF_SPEC_VAR_TMPVAR_OP_DATA_CV) \
	_(1169, ZEND_ASSIGN_OBJ_REF_SPEC_VAR_CV_OP_DATA_VAR) \
	_(1171, ZEND_ASSIGN_OBJ_REF_SPEC_VAR_CV_OP_DATA_CV) \
	_(1174, ZEND_ASSIGN_OBJ_REF_SPEC_UNUSED_CONST_OP_DATA_VAR) \
	_(1176, ZEND_ASSIGN_OBJ_REF_SPEC_UNUSED_CONST_OP_DATA_CV) \
	_(1179, ZEND_ASSIGN_OBJ_REF_SPEC_UNUSED_TMPVAR_OP_DATA_VAR) \
	_(1181, ZEND_ASSIGN_OBJ_REF_SPEC_UNUSED_TMPVAR_OP_DATA_CV) \
	_(1184, ZEND_ASSIGN_OBJ_REF_SPEC_UNUSED_TMPVAR_OP_DATA_VAR) \
	_(1186, ZEND_ASSIGN_OBJ_REF_SPEC_UNUSED_TMPVAR_OP_DATA_CV) \
	_(1194, ZEND_ASSIGN_OBJ_REF_SPEC_UNUSED_CV_OP_DATA_VAR) \
	_(1196, ZEND_ASSIGN_OBJ_REF_SPEC_UNUSED_CV_OP_DATA_CV) \
	_(1199, ZEND_ASSIGN_OBJ_REF_SPEC_CV_CONST_OP_DATA_VAR) \
	_(1201, ZEND_ASSIGN_OBJ_REF_SPEC_CV_CONST_OP_DATA_CV) \
	_(1204, ZEND_ASSIGN_OBJ_REF_SPEC_CV_TMPVAR_OP_DATA_VAR) \
	_(1206, ZEND_ASSIGN_OBJ_REF_SPEC_CV_TMPVAR_OP_DATA_CV) \
	_(1209, ZEND_ASSIGN_OBJ_REF_SPEC_CV_TMPVAR_OP_DATA_VAR) \
	_(1211, ZEND_ASSIGN_OBJ_REF_SPEC_CV_TMPVAR_OP_DATA_CV) \
	_(1219, ZEND_ASSIGN_OBJ_REF_SPEC_CV_CV_OP_DATA_VAR) \
	_(1221, ZEND_ASSIGN_OBJ_REF_SPEC_CV_CV_OP_DATA_CV) \
	_(1222, ZEND_ASSIGN_STATIC_PROP_REF_SPEC) \
	_(1227, ZEND_PRE_INC_SPEC_VAR_RETVAL_UNUSED) \
	_(1228, ZEND_PRE_INC_SPEC_VAR_RETVAL_USED) \
	_(1231, ZEND_PRE_INC_SPEC_CV_RETVAL_UNUSED) \
	_(1232, ZEND_PRE_INC_SPEC_CV_RETVAL_USED) \
	_(1237, ZEND_PRE_DEC_SPEC_VAR_RETVAL_UNUSED) \
	_(1238, ZEND_PRE_DEC_SPEC_VAR_RETVAL_USED) \
	_(1241, ZEND_PRE_DEC_SPEC_CV_RETVAL_UNUSED) \
	_(1242, ZEND_PRE_DEC_SPEC_CV_RETVAL_USED) \
	_(1245, ZEND_POST_INC_SPEC_VAR) \
	_(1247, ZEND_POST_INC_SPEC_CV) \
	_(1250, ZEND_POST_DEC_SPEC_VAR) \
	_(1252, ZEND_POST_DEC_SPEC_CV) \
	_(1253, ZEND_PRE_INC_STATIC_PROP_SPEC) \
	_(1254, ZEND_POST_INC_STATIC_PROP_SPEC) \
	_(1255, ZEND_JMP_SPEC) \
	_(1256, ZEND_JMPZ_SPEC_CONST) \
	_(1257, ZEND_JMPZ_SPEC_TMPVAR) \
	_(1258, ZEND_JMPZ_SPEC_TMPVAR) \
	_(1260, ZEND_JMPZ_SPEC_CV) \
	_(1261, ZEND_JMPNZ_SPEC_CONST) \
	_(1262, ZEND_JMPNZ_SPEC_TMPVAR) \
	_(1263, ZEND_JMPNZ_SPEC_TMPVAR) \
	_(1265, ZEND_JMPNZ_SPEC_CV) \
	_(1266, ZEND_JMPZ_EX_SPEC_CONST) \
	_(1267, ZEND_JMPZ_EX_SPEC_TMPVAR) \
	_(1268, ZEND_JMPZ_EX_SPEC_TMPVAR) \
	_(1270, ZEND_JMPZ_EX_SPEC_CV) \
	_(1271, ZEND_JMPNZ_EX_SPEC_CONST) \
	_(1272, ZEND_JMPNZ_EX_SPEC_TMPVAR) \
	_(1273, ZEND_JMPNZ_EX_SPEC_TMPVAR) \
	_(1275, ZEND_JMPNZ_EX_SPEC_CV) \
	_(1276, ZEND_CASE_SPEC_TMPVAR_CONST) \
	_(1277, ZEND_CASE_SPEC_TMPVAR_TMPVAR) \
	_(1278, ZEND_CASE_SPEC_TMPVAR_TMPVAR) \
	_(1280, ZEND_CASE_SPEC_TMPVAR_CV) \
	_(1281, ZEND_CHECK_VAR_SPEC_CV_UNUSED) \
	_(1282, ZEND_SEND_VAR_NO_REF_EX_SPEC_VAR_CONST) \
	_(1283, ZEND_SEND_VAR_NO_REF_EX_SPEC_VAR_CONST) \
	_(1288, ZEND_SEND_VAR_NO_REF_EX_SPEC_VAR_UNUSED) \
	_(1289, ZEND_SEND_VAR_NO_REF_EX_SPEC_VAR_UNUSED_QUICK) \
	_(1292, ZEND_CAST_SPEC_CONST) \
	_(1293, ZEND_CAST_SPEC_TMP) \
	_(1294, ZEND_CAST_SPEC_VAR) \
	_(1296, ZEND_CAST_SPEC_CV) \
	_(1297, ZEND_BOOL_SPEC_CONST) \
	_(1298, ZEND_BOOL_SPEC_TMPVAR) \
	_(1299, ZEND_BOOL_SPEC_TMPVAR) \
	_(1301, ZEND_BOOL_SPEC_CV) \
	_(1302, ZEND_FAST_CONCAT_SPEC_CONST_CONST) \
	_(1303, ZEND_FAST_CONCAT_SPEC_CONST_TMPVAR) \
	_(1304, ZEND_FAST_CONCAT_SPEC_CONST_TMPVAR) \
	_(1306, ZEND_FAST_CONCAT_SPEC_CONST_CV) \
	_(1307, ZEND_FAST_CONCAT_SPEC_TMPVAR_CONST) \
	_(1308, ZEND_FAST_CONCAT_SPEC_TMPVAR_TMPVAR) \
	_(1309, ZEND_FAST_CONCAT_SPEC_TMPVAR_TMPVAR) \
	_(1311, ZEND_FAST_CONCAT_SPEC_TMPVAR_CV) \
	_(1312, ZEND_FAST_CONCAT_SPEC_TMPVAR_CONST) \
	_(1313, ZEND_FAST_CONCAT_SPEC_TMPVAR_TMPVAR) \
	_(1314, ZEND_FAST_CONCAT_SPEC_TMPVAR_TMPVAR) \
	_(1316, ZEND_FAST_CONCAT_SPEC_TMPVAR_CV) \
	_(1322, ZEND_FAST_CONCAT_SPEC_CV_CONST) \
	_(1323, ZEND_FAST_CONCAT_SPEC_CV_TMPVAR) \
	_(1324, ZEND_FAST_CONCAT_SPEC_CV_TMPVAR) \
	_(1326, ZEND_FAST_CONCAT_SPEC_CV_CV) \
	_(1327, ZEND_ROPE_INIT_SPEC_UNUSED_CONST) \
	_(1328, ZEND_ROPE_INIT_SPEC_UNUSED_TMPVAR) \
	_(1329, ZEND_ROPE_INIT_SPEC_UNUSED_TMPVAR) \
	_(1331, ZEND_ROPE_INIT_SPEC_UNUSED_CV) \
	_(1332, ZEND_ROPE_ADD_SPEC_TMP_CONST) \
	_(1333, ZEND_ROPE_ADD_SPEC_TMP_TMPVAR) \
	_(1334, ZEND_ROPE_ADD_SPEC_TMP_TMPVAR) \
	_(1336, ZEND_ROPE_ADD_SPEC_TMP_CV) \
	_(1337, ZEND_ROPE_END_SPEC_TMP_CONST) \
	_(1338, ZEND_ROPE_END_SPEC_TMP_TMPVAR) \
	_(1339, ZEND_ROPE_END_SPEC_TMP_TMPVAR) \
	_(1341, ZEND_ROPE_END_SPEC_TMP_CV) \
	_(1342, ZEND_BEGIN_SILENCE_SPEC) \
	_(1343, ZEND_END_SILENCE_SPEC_TMP) \
	_(1344, ZEND_INIT_FCALL_BY_NAME_SPEC_CONST) \
	_(1345, ZEND_DO_FCALL_SPEC_RETVAL_UNUSED) \
	_(1346, ZEND_DO_FCALL_SPEC_RETVAL_USED) \
	_(1347, ZEND_DO_FCALL_SPEC_OBSERVER) \
	_(1348, ZEND_DO_FCALL_SPEC_OBSERVER) \
	_(1349, ZEND_INIT_FCALL_SPEC_CONST) \
	_(1350, ZEND_RETURN_SPEC_CONST) \
	_(1351, ZEND_RETURN_SPEC_OBSERVER) \
	_(1352, ZEND_RETURN_SPEC_TMP) \
	_(1353, ZEND_RETURN_SPEC_OBSERVER) \
	_(1354, ZEND_RETURN_SPEC_VAR) \
	_(1355, ZEND_RETURN_SPEC_OBSERVER) \
	_(1358, ZEND_RETURN_SPEC_CV) \
	_(1359, ZEND_RETURN_SPEC_OBSERVER) \
	_(1360, ZEND_RECV_SPEC_UNUSED) \
	_(1361, ZEND_RECV_INIT_SPEC_CONST) \
	_(1362, ZEND_SEND_VAL_SPEC_CONST_CONST) \
	_(1365, ZEND_SEND_VAL_SPEC_CONST_UNUSED) \
	_(1367, ZEND_SEND_VAL_SPEC_TMPVAR_CONST) \
	_(1370, ZEND_SEND_VAL_SPEC_TMPVAR_UNUSED) \
	_(1372, ZEND_SEND_VAL_SPEC_TMPVAR_CONST) \
	_(1375, ZEND_SEND_VAL_SPEC_TMPVAR_UNUSED) \
	_(1407, ZEND_SEND_VAR_EX_SPEC_VAR_CONST) \
	_(1408, ZEND_SEND_VAR_EX_SPEC_VAR_CONST) \
	_(1413, ZEND_SEND_VAR_EX_SPEC_VAR_UNUSED) \
	_(1414, ZEND_SEND_VAR_EX_SPEC_VAR_UNUSED_QUICK) \
	_(1427, ZEND_SEND_VAR_EX_SPEC_CV_CONST) \
	_(1428, ZEND_SEND_VAR_EX_SPEC_CV_CONST) \
	_(1433, ZEND_SEND_VAR_EX_SPEC_CV_UNUSED) \
	_(1434, ZEND_SEND_VAR_EX_SPEC_CV_UNUSED_QUICK) \
	_(1447, ZEND_SEND_REF_SPEC_VAR_CONST) \
	_(1450, ZEND_SEND_REF_SPEC_VAR_UNUSED) \
	_(1457, ZEND_SEND_REF_SPEC_CV_CONST) \
	_(1460, ZEND_SEND_REF_SPEC_CV_UNUSED) \
	_(1462, ZEND_NEW_SPEC_CONST_UNUSED) \
	_(1464, ZEND_NEW_SPEC_VAR_UNUSED) \
	_(1465, ZEND_NEW_SPEC_UNUSED_UNUSED) \
	_(1467, ZEND_INIT_NS_FCALL_BY_NAME_SPEC_CONST) \
	_(1468, ZEND_FREE_SPEC_TMPVAR) \
	_(1469, ZEND_INIT_ARRAY_SPEC_CONST_CONST) \
	_(1470, ZEND_INIT_ARRAY_SPEC_CONST_TMPVAR) \
	_(1471, ZEND_INIT_ARRAY_SPEC_CONST_TMPVAR) \
	_(1472, ZEND_INIT_ARRAY_SPEC_CONST_UNUSED) \
	_(1473, ZEND_INIT_ARRAY_SPEC_CONST_CV) \
	_(1474, ZEND_INIT_ARRAY_SPEC_TMP_CONST) \
	_(1475, ZEND_INIT_ARRAY_SPEC_TMP_TMPVAR) \
	_(1476, ZEND_INIT_ARRAY_SPEC_TMP_TMPVAR) \
	_(1477, ZEND_INIT_ARRAY_SPEC_TMP_UNUSED) \
	_(1478, ZEND_INIT_ARRAY_SPEC_TMP_CV) \
	_(1479, ZEND_INIT_ARRAY_SPEC_VAR_CONST) \
	_(1480, ZEND_INIT_ARRAY_SPEC_VAR_TMPVAR) \
	_(1481, ZEND_INIT_ARRAY_SPEC_VAR_TMPVAR) \
	_(1482, ZEND_INIT_ARRAY_SPEC_VAR_UNUSED) \
	_(1483, ZEND_INIT_ARRAY_SPEC_VAR_CV) \
	_(1484, ZEND_INIT_ARRAY_SPEC_UNUSED_CONST) \
	_(1485, ZEND_INIT_ARRAY_SPEC_UNUSED_TMPVAR) \
	_(1486, ZEND_INIT_ARRAY_SPEC_UNUSED_TMPVAR) \
	_(1487, ZEND_INIT_ARRAY_SPEC_UNUSED_UNUSED) \
	_(1488, ZEND_INIT_ARRAY_SPEC_UNUSED_CV) \
	_(1489, ZEND_INIT_ARRAY_SPEC_CV_CONST) \
	_(1490, ZEND_INIT_ARRAY_SPEC_CV_TMPVAR) \
	_(1491, ZEND_INIT_ARRAY_SPEC_CV_TMPVAR) \
	_(1492, ZEND_INIT_ARRAY_SPEC_CV_UNUSED) \
	_(1493, ZEND_INIT_ARRAY_SPEC_CV_CV) \
	_(1494, ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_CONST) \
	_(1495, ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_TMPVAR) \
	_(1496, ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_TMPVAR) \
	_(1497, ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_UNUSED) \
	_(1498, ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_CV) \
	_(1499, ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_CONST) \
	_(1500, ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_TMPVAR) \
	_(1501, ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_TMPVAR) \
	_(1502, ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_UNUSED) \
	_(1503, ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_CV) \
	_(1504, ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_CONST) \
	_(1505, ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_TMPVAR) \
	_(1506, ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_TMPVAR) \
	_(1507, ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_UNUSED) \
	_(1508, ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_CV) \
	_(1514, ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_CONST) \
	_(1515, ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_TMPVAR) \
	_(1516, ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_TMPVAR) \
	_(1517, ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_UNUSED) \
	_(1518, ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_CV) \
	_(1519, ZEND_INCLUDE_OR_EVAL_SPEC_CONST) \
	_(1520, ZEND_INCLUDE_OR_EVAL_SPEC_OBSERVER) \
	_(1521, ZEND_INCLUDE_OR_EVAL_SPEC_TMPVAR) \
	_(1522, ZEND_INCLUDE_OR_EVAL_SPEC_OBSERVER) \
	_(1523, ZEND_INCLUDE_OR_EVAL_SPEC_TMPVAR) \
	_(1524, ZEND_INCLUDE_OR_EVAL_SPEC_OBSERVER) \
	_(1527, ZEND_INCLUDE_OR_EVAL_SPEC_CV) \
	_(1528, ZEND_INCLUDE_OR_EVAL_SPEC_OBSERVER) \
	_(1529, ZEND_UNSET_VAR_SPEC_CONST_UNUSED) \
	_(1530, ZEND_UNSET_VAR_SPEC_TMPVAR_UNUSED) \
	_(1531, ZEND_UNSET_VAR_SPEC_TMPVAR_UNUSED) \
	_(1533, ZEND_UNSET_VAR_SPEC_CV_UNUSED) \
	_(1544, ZEND_UNSET_DIM_SPEC_VAR_CONST) \
	_(1545, ZEND_UNSET_DIM_SPEC_VAR_TMPVAR) \
	_(1546, ZEND_UNSET_DIM_SPEC_VAR_TMPVAR) \
	_(1548, ZEND_UNSET_DIM_SPEC_VAR_CV) \
	_(1554, ZEND_UNSET_DIM_SPEC_CV_CONST) \
	_(1555, ZEND_UNSET_DIM_SPEC_CV_TMPVAR) \
	_(1556, ZEND_UNSET_DIM_SPEC_CV_TMPVAR) \
	_(1558, ZEND_UNSET_DIM_SPEC_CV_CV) \
	_(1569, ZEND_UNSET_OBJ_SPEC_VAR_CONST) \
	_(1570, ZEND_UNSET_OBJ_SPEC_VAR_TMPVAR) \
	_(1571, ZEND_UNSET_OBJ_SPEC_VAR_TMPVAR) \
	_(1573, ZEND_UNSET_OBJ_SPEC_VAR_CV) \
	_(1574, ZEND_UNSET_OBJ_SPEC_UNUSED_CONST) \
	_(1575, ZEND_UNSET_OBJ_SPEC_UNUSED_TMPVAR) \
	_(1576, ZEND_UNSET_OBJ_SPEC_UNUSED_TMPVAR) \
	_(1578, ZEND_UNSET_OBJ_SPEC_UNUSED_CV) \
	_(1579, ZEND_UNSET_OBJ_SPEC_CV_CONST) \
	_(1580, ZEND_UNSET_OBJ_SPEC_CV_TMPVAR) \
	_(1581, ZEND_UNSET_OBJ_SPEC_CV_TMPVAR) \
	_(1583, ZEND_UNSET_OBJ_SPEC_CV_CV) \
	_(1584, ZEND_FE_RESET_R_SPEC_CONST) \
	_(1585, ZEND_FE_RESET_R_SPEC_TMP) \
	_(1586, ZEND_FE_RESET_R_SPEC_VAR) \
	_(1588, ZEND_FE_RESET_R_SPEC_CV) \
	_(1589, ZEND_FE_FETCH_R_SPEC_VAR) \
	_(1590, ZEND_FETCH_R_SPEC_CONST_UNUSED) \
	_(1591, ZEND_FETCH_R_SPEC_TMPVAR_UNUSED) \
	_(1592, ZEND_FETCH_R_SPEC_TMPVAR_UNUSED) \
	_(1594, ZEND_FETCH_R_SPEC_CV_UNUSED) \
	_(1595, ZEND_FETCH_DIM_R_SPEC_CONST_CONST) \
	_(1596, ZEND_FETCH_DIM_R_SPEC_CONST_TMPVAR) \
	_(1597, ZEND_FETCH_DIM_R_SPEC_CONST_TMPVAR) \
	_(1599, ZEND_FETCH_DIM_R_SPEC_CONST_CV) \
	_(1600, ZEND_FETCH_DIM_R_SPEC_TMPVAR_CONST) \
	_(1601, ZEND_FETCH_DIM_R_SPEC_TMPVAR_TMPVAR) \
	_(1602, ZEND_FETCH_DIM_R_SPEC_TMPVAR_TMPVAR) \
	_(1604, ZEND_FETCH_DIM_R_SPEC_TMPVAR_CV) \
	_(1605, ZEND_FETCH_DIM_R_SPEC_TMPVAR_CONST) \
	_(1606, ZEND_FETCH_DIM_R_SPEC_TMPVAR_TMPVAR) \
	_(1607, ZEND_FETCH_DIM_R_SPEC_TMPVAR_TMPVAR) \
	_(1609, ZEND_FETCH_DIM_R_SPEC_TMPVAR_CV) \
	_(1615, ZEND_FETCH_DIM_R_SPEC_CV_CONST) \
	_(1616, ZEND_FETCH_DIM_R_SPEC_CV_TMPVAR) \
	_(1617, ZEND_FETCH_DIM_R_SPEC_CV_TMPVAR) \
	_(1619, ZEND_FETCH_DIM_R_SPEC_CV_CV) \
	_(1620, ZEND_FETCH_OBJ_R_SPEC_CONST_CONST) \
	_(1621, ZEND_FETCH_OBJ_R_SPEC_CONST_TMPVAR) \
	_(1622, ZEND_FETCH_OBJ_R_SPEC_CONST_TMPVAR) \
	_(1624, ZEND_FETCH_OBJ_R_SPEC_CONST_CV) \
	_(1625, ZEND_FETCH_OBJ_R_SPEC_TMPVAR_CONST) \
	_(1626, ZEND_FETCH_OBJ_R_SPEC_TMPVAR_TMPVAR) \
	_(1627, ZEND_FETCH_OBJ_R_SPEC_TMPVAR_TMPVAR) \
	_(1629, ZEND_FETCH_OBJ_R_SPEC_TMPVAR_CV) \
	_(1630, ZEND_FETCH_OBJ_R_SPEC_TMPVAR_CONST) \
	_(1631, ZEND_FETCH_OBJ_R_SPEC_TMPVAR_TMPVAR) \
	_(1632, ZEND_FETCH_OBJ_R_SPEC_TMPVAR_TMPVAR) \
	_(1634, ZEND_FETCH_OBJ_R_SPEC_TMPVAR_CV) \
	_(1635, ZEND_FETCH_OBJ_R_SPEC_UNUSED_CONST) \
	_(1636, ZEND_FETCH_OBJ_R_SPEC_UNUSED_TMPVAR) \
	_(1637, ZEND_FETCH_OBJ_R_SPEC_UNUSED_TMPVAR) \
	_(1639, ZEND_FETCH_OBJ_R_SPEC_UNUSED_CV) \
	_(1640, ZEND_FETCH_OBJ_R_SPEC_CV_CONST) \
	_(1641, ZEND_FETCH_OBJ_R_SPEC_CV_TMPVAR) \
	_(1642, ZEND_FETCH_OBJ_R_SPEC_CV_TMPVAR) \
	_(1644, ZEND_FETCH_OBJ_R_SPEC_CV_CV) \
	_(1645, ZEND_FETCH_W_SPEC_CONST_UNUSED) \
	_(1646, ZEND_FETCH_W_SPEC_TMPVAR_UNUSED) \
	_(1647, ZEND_FETCH_W_SPEC_TMPVAR_UNUSED) \
	_(1649, ZEND_FETCH_W_SPEC_CV_UNUSED) \
	_(1660, ZEND_FETCH_DIM_W_SPEC_VAR_CONST) \
	_(1661, ZEND_FETCH_DIM_W_SPEC_VAR_TMPVAR) \
	_(1662, ZEND_FETCH_DIM_W_SPEC_VAR_TMPVAR) \
	_(1663, ZEND_FETCH_DIM_W_SPEC_VAR_UNUSED) \
	_(1664, ZEND_FETCH_DIM_W_SPEC_VAR_CV) \
	_(1670, ZEND_FETCH_DIM_W_SPEC_CV_CONST) \
	_(1671, ZEND_FETCH_DIM_W_SPEC_CV_TMPVAR) \
	_(1672, ZEND_FETCH_DIM_W_SPEC_CV_TMPVAR) \
	_(1673, ZEND_FETCH_DIM_W_SPEC_CV_UNUSED) \
	_(1674, ZEND_FETCH_DIM_W_SPEC_CV_CV) \
	_(1685, ZEND_FETCH_OBJ_W_SPEC_VAR_CONST) \
	_(1686, ZEND_FETCH_OBJ_W_SPEC_VAR_TMPVAR) \
	_(1687, ZEND_FETCH_OBJ_W_SPEC_VAR_TMPVAR) \
	_(1689, ZEND_FETCH_OBJ_W_SPEC_VAR_CV) \
	_(1690, ZEND_FETCH_OBJ_W_SPEC_UNUSED_CONST) \
	_(1691, ZEND_FETCH_OBJ_W_SPEC_UNUSED_TMPVAR) \
	_(1692, ZEND_FETCH_OBJ_W_SPEC_UNUSED_TMPVAR) \
	_(1694, ZEND_FETCH_OBJ_W_SPEC_UNUSED_CV) \
	_(1695, ZEND_FETCH_OBJ_W_SPEC_CV_CONST) \
	_(1696, ZEND_FETCH_OBJ_W_SPEC_CV_TMPVAR) \
	_(1697, ZEND_FETCH_OBJ_W_SPEC_CV_TMPVAR) \
	_(1699, ZEND_FETCH_OBJ_W_SPEC_CV_CV) \
	_(1700, ZEND_FETCH_RW_SPEC_CONST_UNUSED) \
	_(1701, ZEND_FETCH_RW_SPEC_TMPVAR_UNUSED) \
	_(1702, ZEND_FETCH_RW_SPEC_TMPVAR_UNUSED) \
	_(1704, ZEND_FETCH_RW_SPEC_CV_UNUSED) \
	_(1715, ZEND_FETCH_DIM_RW_SPEC_VAR_CONST) \
	_(1716, ZEND_FETCH_DIM_RW_SPEC_VAR_TMPVAR) \
	_(1717, ZEND_FETCH_DIM_RW_SPEC_VAR_TMPVAR) \
	_(1718, ZEND_FETCH_DIM_RW_SPEC_VAR_UNUSED) \
	_(1719, ZEND_FETCH_DIM_RW_SPEC_VAR_CV) \
	_(1725, ZEND_FETCH_DIM_RW_SPEC_CV_CONST) \
	_(1726, ZEND_FETCH_DIM_RW_SPEC_CV_TMPVAR) \
	_(1727, ZEND_FETCH_DIM_RW_SPEC_CV_TMPVAR) \
	_(1728, ZEND_FETCH_DIM_RW_SPEC_CV_UNUSED) \
	_(1729, ZEND_FETCH_DIM_RW_SPEC_CV_CV) \
	_(1740, ZEND_FETCH_OBJ_RW_SPEC_VAR_CONST) \
	_(1741, ZEND_FETCH_OBJ_RW_SPEC_VAR_TMPVAR) \
	_(1742, ZEND_FETCH_OBJ_RW_SPEC_VAR_TMPVAR) \
	_(1744, ZEND_FETCH_OBJ_RW_SPEC_VAR_CV) \
	_(1745, ZEND_FETCH_OBJ_RW_SPEC_UNUSED_CONST) \
	_(1746, ZEND_FETCH_OBJ_RW_SPEC_UNUSED_TMPVAR) \
	_(1747, ZEND_FETCH_OBJ_RW_SPEC_UNUSED_TMPVAR) \
	_(1749, ZEND_FETCH_OBJ_RW_SPEC_UNUSED_CV) \
	_(1750, ZEND_FETCH_OBJ_RW_SPEC_CV_CONST) \
	_(1751, ZEND_FETCH_OBJ_RW_SPEC_CV_TMPVAR) \
	_(1752, ZEND_FETCH_OBJ_RW_SPEC_CV_TMPVAR) \
	_(1754, ZEND_FETCH_OBJ_RW_SPEC_CV_CV) \
	_(1755, ZEND_FETCH_IS_SPEC_CONST_UNUSED) \
	_(1756, ZEND_FETCH_IS_SPEC_TMPVAR_UNUSED) \
	_(1757, ZEND_FETCH_IS_SPEC_TMPVAR_UNUSED) \
	_(1759, ZEND_FETCH_IS_SPEC_CV_UNUSED) \
	_(1760, ZEND_FETCH_DIM_IS_SPEC_CONST_CONST) \
	_(1761, ZEND_FETCH_DIM_IS_SPEC_CONST_TMPVAR) \
	_(1762, ZEND_FETCH_DIM_IS_SPEC_CONST_TMPVAR) \
	_(1764, ZEND_FETCH_DIM_IS_SPEC_CONST_CV) \
	_(1765, ZEND_FETCH_DIM_IS_SPEC_TMPVAR_CONST) \
	_(1766, ZEND_FETCH_DIM_IS_SPEC_TMPVAR_TMPVAR) \
	_(1767, ZEND_FETCH_DIM_IS_SPEC_TMPVAR_TMPVAR) \
	_(1769, ZEND_FETCH_DIM_IS_SPEC_TMPVAR_CV) \
	_(1770, ZEND_FETCH_DIM_IS_SPEC_TMPVAR_CONST) \
	_(1771, ZEND_FETCH_DIM_IS_SPEC_TMPVAR_TMPVAR) \
	_(1772, ZEND_FETCH_DIM_IS_SPEC_TMPVAR_TMPVAR) \
	_(1774, ZEND_FETCH_DIM_IS_SPEC_TMPVAR_CV) \
	_(1780, ZEND_FETCH_DIM_IS_SPEC_CV_CONST) \
	_(1781, ZEND_FETCH_DIM_IS_SPEC_CV_TMPVAR) \
	_(1782, ZEND_FETCH_DIM_IS_SPEC_CV_TMPVAR) \
	_(1784, ZEND_FETCH_DIM_IS_SPEC_CV_CV) \
	_(1785, ZEND_FETCH_OBJ_IS_SPEC_CONST_CONST) \
	_(1786, ZEND_FETCH_OBJ_IS_SPEC_CONST_TMPVAR) \
	_(1787, ZEND_FETCH_OBJ_IS_SPEC_CONST_TMPVAR) \
	_(1789, ZEND_FETCH_OBJ_IS_SPEC_CONST_CV) \
	_(1790, ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_CONST) \
	_(1791, ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_TMPVAR) \
	_(1792, ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_TMPVAR) \
	_(1794, ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_CV) \
	_(1795, ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_CONST) \
	_(1796, ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_TMPVAR) \
	_(1797, ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_TMPVAR) \
	_(1799, ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_CV) \
	_(1800, ZEND_FETCH_OBJ_IS_SPEC_UNUSED_CONST) \
	_(1801, ZEND_FETCH_OBJ_IS_SPEC_UNUSED_TMPVAR) \
	_(1802, ZEND_FETCH_OBJ_IS_SPEC_UNUSED_TMPVAR) \
	_(1804, ZEND_FETCH_OBJ_IS_SPEC_UNUSED_CV) \
	_(1805, ZEND_FETCH_OBJ_IS_SPEC_CV_CONST) \
	_(1806, ZEND_FETCH_OBJ_IS_SPEC_CV_TMPVAR) \
	_(1807, ZEND_FETCH_OBJ_IS_SPEC_CV_TMPVAR) \
	_(1809, ZEND_FETCH_OBJ_IS_SPEC_CV_CV) \
	_(1810, ZEND_FETCH_FUNC_ARG_SPEC_CONST_UNUSED) \
	_(1811, ZEND_FETCH_FUNC_ARG_SPEC_TMPVAR_UNUSED) \
	_(1812, ZEND_FETCH_FUNC_ARG_SPEC_TMPVAR_UNUSED) \
	_(1814, ZEND_FETCH_FUNC_ARG_SPEC_CV_UNUSED) \
	_(1815, ZEND_FETCH_DIM_FUNC_ARG_SPEC_CONST_CONST) \
	_(1816, ZEND_FETCH_DIM_FUNC_ARG_SPEC_CONST_TMPVAR) \
	_(1817, ZEND_FETCH_DIM_FUNC_ARG_SPEC_CONST_TMPVAR) \
	_(1818, ZEND_FETCH_DIM_FUNC_ARG_SPEC_CONST_UNUSED) \
	_(1819, ZEND_FETCH_DIM_FUNC_ARG_SPEC_CONST_CV) \
	_(1820, ZEND_FETCH_DIM_FUNC_ARG_SPEC_TMP_CONST) \
	_(1821, ZEND_FETCH_DIM_FUNC_ARG_SPEC_TMP_TMPVAR) \
	_(1822, ZEND_FETCH_DIM_FUNC_ARG_SPEC_TMP_TMPVAR) \
	_(1823, ZEND_FETCH_DIM_FUNC_ARG_SPEC_TMP_UNUSED) \
	_(1824, ZEND_FETCH_DIM_FUNC_ARG_SPEC_TMP_CV) \
	_(1825, ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_CONST) \
	_(1826, ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_TMPVAR) \
	_(1827, ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_TMPVAR) \
	_(1828, ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_UNUSED) \
	_(1829, ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_CV) \
	_(1835, ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_CONST) \
	_(1836, ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_TMPVAR) \
	_(1837, ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_TMPVAR) \
	_(1838, ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_UNUSED) \
	_(1839, ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_CV) \
	_(1840, ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CONST_CONST) \
	_(1841, ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CONST_TMPVAR) \
	_(1842, ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CONST_TMPVAR) \
	_(1844, ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CONST_CV) \
	_(1845, ZEND_FETCH_OBJ_FUNC_ARG_SPEC_TMP_CONST) \
	_(1846, ZEND_FETCH_OBJ_FUNC_ARG_SPEC_TMP_TMPVAR) \
	_(1847, ZEND_FETCH_OBJ_FUNC_ARG_SPEC_TMP_TMPVAR) \
	_(1849, ZEND_FETCH_OBJ_FUNC_ARG_SPEC_TMP_CV) \
	_(1850, ZEND_FETCH_OBJ_FUNC_ARG_SPEC_VAR_CONST) \
	_(1851, ZEND_FETCH_OBJ_FUNC_ARG_SPEC_VAR_TMPVAR) \
	_(1852, ZEND_FETCH_OBJ_FUNC_ARG_SPEC_VAR_TMPVAR) \
	_(1854, ZEND_FETCH_OBJ_FUNC_ARG_SPEC_VAR_CV) \
	_(1855, ZEND_FETCH_OBJ_FUNC_ARG_SPEC_UNUSED_CONST) \
	_(1856, ZEND_FETCH_OBJ_FUNC_ARG_SPEC_UNUSED_TMPVAR) \
	_(1857, ZEND_FETCH_OBJ_FUNC_ARG_SPEC_UNUSED_TMPVAR) \
	_(1859, ZEND_FETCH_OBJ_FUNC_ARG_SPEC_UNUSED_CV) \
	_(1860, ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CV_CONST) \
	_(1861, ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CV_TMPVAR) \
	_(1862, ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CV_TMPVAR) \
	_(1864, ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CV_CV) \
	_(1865, ZEND_FETCH_UNSET_SPEC_CONST_UNUSED) \
	_(1866, ZEND_FETCH_UNSET_SPEC_TMPVAR_UNUSED) \
	_(1867, ZEND_FETCH_UNSET_SPEC_TMPVAR_UNUSED) \
	_(1869, ZEND_FETCH_UNSET_SPEC_CV_UNUSED) \
	_(1880, ZEND_FETCH_DIM_UNSET_SPEC_VAR_CONST) \
	_(1881, ZEND_FETCH_DIM_UNSET_SPEC_VAR_TMPVAR) \
	_(1882, ZEND_FETCH_DIM_UNSET_SPEC_VAR_TMPVAR) \
	_(1884, ZEND_FETCH_DIM_UNSET_SPEC_VAR_CV) \
	_(1890, ZEND_FETCH_DIM_UNSET_SPEC_CV_CONST) \
	_(1891, ZEND_FETCH_DIM_UNSET_SPEC_CV_TMPVAR) \
	_(1892, ZEND_FETCH_DIM_UNSET_SPEC_CV_TMPVAR) \
	_(1894, ZEND_FETCH_DIM_UNSET_SPEC_CV_CV) \
	_(1905, ZEND_FETCH_OBJ_UNSET_SPEC_VAR_CONST) \
	_(1906, ZEND_FETCH_OBJ_UNSET_SPEC_VAR_TMPVAR) \
	_(1907, ZEND_FETCH_OBJ_UNSET_SPEC_VAR_TMPVAR) \
	_(1909, ZEND_FETCH_OBJ_UNSET_SPEC_VAR_CV) \
	_(1910, ZEND_FETCH_OBJ_UNSET_SPEC_UNUSED_CONST) \
	_(1911, ZEND_FETCH_OBJ_UNSET_SPEC_UNUSED_TMPVAR) \
	_(1912, ZEND_FETCH_OBJ_UNSET_SPEC_UNUSED_TMPVAR) \
	_(1914, ZEND_FETCH_OBJ_UNSET_SPEC_UNUSED_CV) \
	_(1915, ZEND_FETCH_OBJ_UNSET_SPEC_CV_CONST) \
	_(1916, ZEND_FETCH_OBJ_UNSET_SPEC_CV_TMPVAR) \
	_(1917, ZEND_FETCH_OBJ_UNSET_SPEC_CV_TMPVAR) \
	_(1919, ZEND_FETCH_OBJ_UNSET_SPEC_CV_CV) \
	_(1920, ZEND_FETCH_LIST_R_SPEC_CONST_CONST) \
	_(1921, ZEND_FETCH_LIST_R_SPEC_CONST_TMPVAR) \
	_(1922, ZEND_FETCH_LIST_R_SPEC_CONST_TMPVAR) \
	_(1924, ZEND_FETCH_LIST_R_SPEC_CONST_CV) \
	_(1925, ZEND_FETCH_LIST_R_SPEC_TMPVARCV_CONST) \
	_(1926, ZEND_FETCH_LIST_R_SPEC_TMPVARCV_TMPVAR) \
	_(1927, ZEND_FETCH_LIST_R_SPEC_TMPVARCV_TMPVAR) \
	_(1929, ZEND_FETCH_LIST_R_SPEC_TMPVARCV_CV) \
	_(1930, ZEND_FETCH_LIST_R_SPEC_TMPVARCV_CONST) \
	_(1931, ZEND_FETCH_LIST_R_SPEC_TMPVARCV_TMPVAR) \
	_(1932, ZEND_FETCH_LIST_R_SPEC_TMPVARCV_TMPVAR) \
	_(1934, ZEND_FETCH_LIST_R_SPEC_TMPVARCV_CV) \
	_(1940, ZEND_FETCH_LIST_R_SPEC_TMPVARCV_CONST) \
	_(1941, ZEND_FETCH_LIST_R_SPEC_TMPVARCV_TMPVAR) \
	_(1942, ZEND_FETCH_LIST_R_SPEC_TMPVARCV_TMPVAR) \
	_(1944, ZEND_FETCH_LIST_R_SPEC_TMPVARCV_CV) \
	_(1945, ZEND_FETCH_CONSTANT_SPEC_UNUSED_CONST) \
	_(1946, ZEND_CHECK_FUNC_ARG_SPEC_UNUSED_CONST) \
	_(1947, ZEND_CHECK_FUNC_ARG_SPEC_UNUSED_CONST) \
	_(1952, ZEND_CHECK_FUNC_ARG_SPEC_UNUSED_UNUSED) \
	_(1953, ZEND_CHECK_FUNC_ARG_SPEC_UNUSED_UNUSED_QUICK) \
	_(1956, ZEND_EXT_STMT_SPEC) \
	_(1957, ZEND_EXT_FCALL_BEGIN_SPEC) \
	_(1958, ZEND_EXT_FCALL_END_SPEC) \
	_(1959, ZEND_EXT_NOP_SPEC) \
	_(1960, ZEND_TICKS_SPEC) \
	_(1961, ZEND_SEND_VAR_NO_REF_SPEC_VAR_CONST) \
	_(1964, ZEND_SEND_VAR_NO_REF_SPEC_VAR_UNUSED) \
	_(1966, ZEND_CATCH_SPEC_CONST) \
	_(1967, ZEND_THROW_SPEC_CONST) \
	_(1968, ZEND_THROW_SPEC_TMPVAR) \
	_(1969, ZEND_THROW_SPEC_TMPVAR) \
	_(1971, ZEND_THROW_SPEC_CV) \
	_(1972, ZEND_FETCH_CLASS_SPEC_UNUSED_CONST) \
	_(1973, ZEND_FETCH_CLASS_SPEC_UNUSED_TMPVAR) \
	_(1974, ZEND_FETCH_CLASS_SPEC_UNUSED_TMPVAR) \
	_(1975, ZEND_FETCH_CLASS_SPEC_UNUSED_UNUSED) \
	_(1976, ZEND_FETCH_CLASS_SPEC_UNUSED_CV) \
	_(1977, ZEND_CLONE_SPEC_CONST) \
	_(1978, ZEND_CLONE_SPEC_TMPVAR) \
	_(1979, ZEND_CLONE_SPEC_TMPVAR) \
	_(1980, ZEND_CLONE_SPEC_UNUSED) \
	_(1981, ZEND_CLONE_SPEC_CV) \
	_(1982, ZEND_RETURN_BY_REF_SPEC_CONST) \
	_(1983, ZEND_RETURN_BY_REF_SPEC_OBSERVER) \
	_(1984, ZEND_RETURN_BY_REF_SPEC_TMP) \
	_(1985, ZEND_RETURN_BY_REF_SPEC_OBSERVER) \
	_(1986, ZEND_RETURN_BY_REF_SPEC_VAR) \
	_(1987, ZEND_RETURN_BY_REF_SPEC_OBSERVER) \
	_(1990, ZEND_RETURN_BY_REF_SPEC_CV) \
	_(1991, ZEND_RETURN_BY_REF_SPEC_OBSERVER) \
	_(1992, ZEND_INIT_METHOD_CALL_SPEC_CONST_CONST) \
	_(1993, ZEND_INIT_METHOD_CALL_SPEC_CONST_TMPVAR) \
	_(1994, ZEND_INIT_METHOD_CALL_SPEC_CONST_TMPVAR) \
	_(1996, ZEND_INIT_METHOD_CALL_SPEC_CONST_CV) \
	_(1997, ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_CONST) \
	_(1998, ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_TMPVAR) \
	_(1999, ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_TMPVAR) \
	_(2001, ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_CV) \
	_(2002, ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_CONST) \
	_(2003, ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_TMPVAR) \
	_(2004, ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_TMPVAR) \
	_(2006, ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_CV) \
	_(2007, ZEND_INIT_METHOD_CALL_SPEC_UNUSED_CONST) \
	_(2008, ZEND_INIT_METHOD_CALL_SPEC_UNUSED_TMPVAR) \
	_(2009, ZEND_INIT_METHOD_CALL_SPEC_UNUSED_TMPVAR) \
	_(2011, ZEND_INIT_METHOD_CALL_SPEC_UNUSED_CV) \
	_(2012, ZEND_INIT_METHOD_CALL_SPEC_CV_CONST) \
	_(2013, ZEND_INIT_METHOD_CALL_SPEC_CV_TMPVAR) \
	_(2014, ZEND_INIT_METHOD_CALL_SPEC_CV_TMPVAR) \
	_(2016, ZEND_INIT_METHOD_CALL_SPEC_CV_CV) \
	_(2017, ZEND_INIT_STATIC_METHOD_CALL_SPEC_CONST_CONST) \
	_(2018, ZEND_INIT_STATIC_METHOD_CALL_SPEC_CONST_TMPVAR) \
	_(2019, ZEND_INIT_STATIC_METHOD_CALL_SPEC_CONST_TMPVAR) \
	_(2020, ZEND_INIT_STATIC_METHOD_CALL_SPEC_CONST_UNUSED) \
	_(2021, ZEND_INIT_STATIC_METHOD_CALL_SPEC_CONST_CV) \
	_(2027, ZEND_INIT_STATIC_METHOD_CALL_SPEC_VAR_CONST) \
	_(2028, ZEND_INIT_STATIC_METHOD_CALL_SPEC_VAR_TMPVAR) \
	_(2029, ZEND_INIT_STATIC_METHOD_CALL_SPEC_VAR_TMPVAR) \
	_(2030, ZEND_INIT_STATIC_METHOD_CALL_SPEC_VAR_UNUSED) \
	_(2031, ZEND_INIT_STATIC_METHOD_CALL_SPEC_VAR_CV) \
	_(2032, ZEND_INIT_STATIC_METHOD_CALL_SPEC_UNUSED_CONST) \
	_(2033, ZEND_INIT_STATIC_METHOD_CALL_SPEC_UNUSED_TMPVAR) \
	_(2034, ZEND_INIT_STATIC_METHOD_CALL_SPEC_UNUSED_TMPVAR) \
	_(2035, ZEND_INIT_STATIC_METHOD_CALL_SPEC_UNUSED_UNUSED) \
	_(2036, ZEND_INIT_STATIC_METHOD_CALL_SPEC_UNUSED_CV) \
	_(2042, ZEND_ISSET_ISEMPTY_VAR_SPEC_CONST_UNUSED) \
	_(2043, ZEND_ISSET_ISEMPTY_VAR_SPEC_TMPVAR_UNUSED) \
	_(2044, ZEND_ISSET_ISEMPTY_VAR_SPEC_TMPVAR_UNUSED) \
	_(2046, ZEND_ISSET_ISEMPTY_VAR_SPEC_CV_UNUSED) \
	_(2047, ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CONST_CONST) \
	_(2048, ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CONST_TMPVAR) \
	_(2049, ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CONST_TMPVAR) \
	_(2051, ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CONST_CV) \
	_(2052, ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_TMPVAR_CONST) \
	_(2053, ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_TMPVAR_TMPVAR) \
	_(2054, ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_TMPVAR_TMPVAR) \
	_(2056, ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_TMPVAR_CV) \
	_(2057, ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_TMPVAR_CONST) \
	_(2058, ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_TMPVAR_TMPVAR) \
	_(2059, ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_TMPVAR_TMPVAR) \
	_(2061, ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_TMPVAR_CV) \
	_(2067, ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CV_CONST) \
	_(2068, ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CV_TMPVAR) \
	_(2069, ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CV_TMPVAR) \
	_(2071, ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CV_CV) \
	_(2072, ZEND_SEND_VAL_EX_SPEC_CONST_CONST) \
	_(2073, ZEND_SEND_VAL_EX_SPEC_CONST_CONST) \
	_(2078, ZEND_SEND_VAL_EX_SPEC_CONST_UNUSED) \
	_(2079, ZEND_SEND_VAL_EX_SPEC_CONST_UNUSED_QUICK) \
	_(2082, ZEND_SEND_VAL_EX_SPEC_TMP_CONST) \
	_(2083, ZEND_SEND_VAL_EX_SPEC_TMP_CONST) \
	_(2088, ZEND_SEND_VAL_EX_SPEC_TMP_UNUSED) \
	_(2089, ZEND_SEND_VAL_EX_SPEC_TMP_UNUSED_QUICK) \
	_(2132, ZEND_SEND_VAR_SPEC_VAR_CONST) \
	_(2135, ZEND_SEND_VAR_SPEC_VAR_UNUSED) \
	_(2142, ZEND_SEND_VAR_SPEC_CV_CONST) \
	_(2145, ZEND_SEND_VAR_SPEC_CV_UNUSED) \
	_(2147, ZEND_INIT_USER_CALL_SPEC_CONST_CONST) \
	_(2148, ZEND_INIT_USER_CALL_SPEC_CONST_TMPVAR) \
	_(2149, ZEND_INIT_USER_CALL_SPEC_CONST_TMPVAR) \
	_(2151, ZEND_INIT_USER_CALL_SPEC_CONST_CV) \
	_(2152, ZEND_SEND_ARRAY_SPEC) \
	_(2153, ZEND_SEND_USER_SPEC_CONST) \
	_(2154, ZEND_SEND_USER_SPEC_TMP) \
	_(2155, ZEND_SEND_USER_SPEC_VAR) \
	_(2157, ZEND_SEND_USER_SPEC_CV) \
	_(2158, ZEND_STRLEN_SPEC_CONST) \
	_(2159, ZEND_STRLEN_SPEC_TMPVAR) \
	_(2160, ZEND_STRLEN_SPEC_TMPVAR) \
	_(2162, ZEND_STRLEN_SPEC_CV) \
	_(2163, ZEND_DEFINED_SPEC_CONST) \
	_(2164, ZEND_TYPE_CHECK_SPEC_CONST) \
	_(2165, ZEND_TYPE_CHECK_SPEC_TMPVAR) \
	_(2166, ZEND_TYPE_CHECK_SPEC_TMPVAR) \
	_(2168, ZEND_TYPE_CHECK_SPEC_CV) \
	_(2169, ZEND_VERIFY_RETURN_TYPE_SPEC_CONST_UNUSED) \
	_(2170, ZEND_VERIFY_RETURN_TYPE_SPEC_TMP_UNUSED) \
	_(2171, ZEND_VERIFY_RETURN_TYPE_SPEC_VAR_UNUSED) \
	_(2172, ZEND_VERIFY_RETURN_TYPE_SPEC_UNUSED_UNUSED) \
	_(2173, ZEND_VERIFY_RETURN_TYPE_SPEC_CV_UNUSED) \
	_(2174, ZEND_FE_RESET_RW_SPEC_CONST) \
	_(2175, ZEND_FE_RESET_RW_SPEC_TMP) \
	_(2176, ZEND_FE_RESET_RW_SPEC_VAR) \
	_(2178, ZEND_FE_RESET_RW_SPEC_CV) \
	_(2179, ZEND_FE_FETCH_RW_SPEC_VAR) \
	_(2180, ZEND_FE_FREE_SPEC_TMPVAR) \
	_(2181, ZEND_INIT_DYNAMIC_CALL_SPEC_CONST) \
	_(2182, ZEND_INIT_DYNAMIC_CALL_SPEC_TMPVAR) \
	_(2183, ZEND_INIT_DYNAMIC_CALL_SPEC_TMPVAR) \
	_(2185, ZEND_INIT_DYNAMIC_CALL_SPEC_CV) \
	_(2186, ZEND_DO_ICALL_SPEC_RETVAL_UNUSED) \
	_(2187, ZEND_DO_ICALL_SPEC_RETVAL_USED) \
	_(2188, ZEND_DO_ICALL_SPEC_OBSERVER) \
	_(2189, ZEND_DO_ICALL_SPEC_OBSERVER) \
	_(2190, ZEND_DO_UCALL_SPEC_RETVAL_UNUSED) \
	_(2191, ZEND_DO_UCALL_SPEC_RETVAL_USED) \
	_(2192, ZEND_DO_UCALL_SPEC_OBSERVER) \
	_(2193, ZEND_DO_UCALL_SPEC_OBSERVER) \
	_(2194, ZEND_DO_FCALL_BY_NAME_SPEC_RETVAL_UNUSED) \
	_(2195, ZEND_DO_FCALL_BY_NAME_SPEC_RETVAL_USED) \
	_(2196, ZEND_DO_FCALL_BY_NAME_SPEC_OBSERVER) \
	_(2197, ZEND_DO_FCALL_BY_NAME_SPEC_OBSERVER) \
	_(2208, ZEND_PRE_INC_OBJ_SPEC_VAR_CONST) \
	_(2209, ZEND_PRE_INC_OBJ_SPEC_VAR_TMPVAR) \
	_(2210, ZEND_PRE_INC_OBJ_SPEC_VAR_TMPVAR) \
	_(2212, ZEND_PRE_INC_OBJ_SPEC_VAR_CV) \
	_(2213, ZEND_PRE_INC_OBJ_SPEC_UNUSED_CONST) \
	_(2214, ZEND_PRE_INC_OBJ_SPEC_UNUSED_TMPVAR) \
	_(2215, ZEND_PRE_INC_OBJ_SPEC_UNUSED_TMPVAR) \
	_(2217, ZEND_PRE_INC_OBJ_SPEC_UNUSED_CV) \
	_(2218, ZEND_PRE_INC_OBJ_SPEC_CV_CONST) \
	_(2219, ZEND_PRE_INC_OBJ_SPEC_CV_TMPVAR) \
	_(2220, ZEND_PRE_INC_OBJ_SPEC_CV_TMPVAR) \
	_(2222, ZEND_PRE_INC_OBJ_SPEC_CV_CV) \
	_(2233, ZEND_POST_INC_OBJ_SPEC_VAR_CONST) \
	_(2234, ZEND_POST_INC_OBJ_SPEC_VAR_TMPVAR) \
	_(2235, ZEND_POST_INC_OBJ_SPEC_VAR_TMPVAR) \
	_(2237, ZEND_POST_INC_OBJ_SPEC_VAR_CV) \
	_(2238, ZEND_POST_INC_OBJ_SPEC_UNUSED_CONST) \
	_(2239, ZEND_POST_INC_OBJ_SPEC_UNUSED_TMPVAR) \
	_(2240, ZEND_POST_INC_OBJ_SPEC_UNUSED_TMPVAR) \
	_(2242, ZEND_POST_INC_OBJ_SPEC_UNUSED_CV) \
	_(2243, ZEND_POST_INC_OBJ_SPEC_CV_CONST) \
	_(2244, ZEND_POST_INC_OBJ_SPEC_CV_TMPVAR) \
	_(2245, ZEND_POST_INC_OBJ_SPEC_CV_TMPVAR) \
	_(2247, ZEND_POST_INC_OBJ_SPEC_CV_CV) \
	_(2248, ZEND_ECHO_SPEC_CONST) \
	_(2249, ZEND_ECHO_SPEC_TMPVAR) \
	_(2250, ZEND_ECHO_SPEC_TMPVAR) \
	_(2252, ZEND_ECHO_SPEC_CV) \
	_(2259, ZEND_INSTANCEOF_SPEC_TMPVAR_CONST) \
	_(2261, ZEND_INSTANCEOF_SPEC_TMPVAR_VAR) \
	_(2262, ZEND_INSTANCEOF_SPEC_TMPVAR_UNUSED) \
	_(2264, ZEND_INSTANCEOF_SPEC_TMPVAR_CONST) \
	_(2266, ZEND_INSTANCEOF_SPEC_TMPVAR_VAR) \
	_(2267, ZEND_INSTANCEOF_SPEC_TMPVAR_UNUSED) \
	_(2274, ZEND_INSTANCEOF_SPEC_CV_CONST) \
	_(2276, ZEND_INSTANCEOF_SPEC_CV_VAR) \
	_(2277, ZEND_INSTANCEOF_SPEC_CV_UNUSED) \
	_(2279, ZEND_GENERATOR_CREATE_SPEC) \
	_(2282, ZEND_MAKE_REF_SPEC_VAR_UNUSED) \
	_(2284, ZEND_MAKE_REF_SPEC_CV_UNUSED) \
	_(2285, ZEND_DECLARE_FUNCTION_SPEC) \
	_(2286, ZEND_DECLARE_LAMBDA_FUNCTION_SPEC_CONST) \
	_(2287, ZEND_DECLARE_CONST_SPEC_CONST_CONST) \
	_(2288, ZEND_DECLARE_CLASS_SPEC_CONST) \
	_(2289, ZEND_DECLARE_CLASS_DELAYED_SPEC_CONST_CONST) \
	_(2290, ZEND_DECLARE_ANON_CLASS_SPEC) \
	_(2291, ZEND_ADD_ARRAY_UNPACK_SPEC) \
	_(2292, ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CONST_CONST) \
	_(2293, ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CONST_TMPVAR) \
	_(2294, ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CONST_TMPVAR) \
	_(2296, ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CONST_CV) \
	_(2297, ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TMPVAR_CONST) \
	_(2298, ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TMPVAR_TMPVAR) \
	_(2299, ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TMPVAR_TMPVAR) \
	_(2301, ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TMPVAR_CV) \
	_(2302, ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TMPVAR_CONST) \
	_(2303, ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TMPVAR_TMPVAR) \
	_(2304, ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TMPVAR_TMPVAR) \
	_(2306, ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TMPVAR_CV) \
	_(2307, ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_UNUSED_CONST) \
	_(2308, ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_UNUSED_TMPVAR) \
	_(2309, ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_UNUSED_TMPVAR) \
	_(2311, ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_UNUSED_CV) \
	_(2312, ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CV_CONST) \
	_(2313, ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CV_TMPVAR) \
	_(2314, ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CV_TMPVAR) \
	_(2316, ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CV_CV) \
	_(2317, ZEND_HANDLE_EXCEPTION_SPEC) \
	_(2318, ZEND_USER_OPCODE_SPEC) \
	_(2319, ZEND_ASSERT_CHECK_SPEC) \
	_(2320, ZEND_JMP_SET_SPEC_CONST) \
	_(2321, ZEND_JMP_SET_SPEC_TMP) \
	_(2322, ZEND_JMP_SET_SPEC_VAR) \
	_(2324, ZEND_JMP_SET_SPEC_CV) \
	_(2325, ZEND_UNSET_CV_SPEC_CV_UNUSED) \
	_(2326, ZEND_ISSET_ISEMPTY_CV_SPEC_CV_UNUSED_SET) \
	_(2327, ZEND_ISSET_ISEMPTY_CV_SPEC_CV_UNUSED_EMPTY) \
	_(2328, ZEND_FETCH_LIST_W_SPEC_VAR_CONST) \
	_(2329, ZEND_FETCH_LIST_W_SPEC_VAR_TMPVAR) \
	_(2330, ZEND_FETCH_LIST_W_SPEC_VAR_TMPVAR) \
	_(2332, ZEND_FETCH_LIST_W_SPEC_VAR_CV) \
	_(2333, ZEND_SEPARATE_SPEC_VAR_UNUSED) \
	_(2335, ZEND_FETCH_CLASS_NAME_SPEC_TMPVAR) \
	_(2336, ZEND_FETCH_CLASS_NAME_SPEC_TMPVAR) \
	_(2337, ZEND_FETCH_CLASS_NAME_SPEC_UNUSED) \
	_(2338, ZEND_FETCH_CLASS_NAME_SPEC_CV) \
	_(2339, ZEND_CALL_TRAMPOLINE_SPEC) \
	_(2340, ZEND_CALL_TRAMPOLINE_SPEC_OBSERVER) \
	_(2341, ZEND_DISCARD_EXCEPTION_SPEC) \
	_(2342, ZEND_YIELD_SPEC_CONST_CONST) \
	_(2343, ZEND_YIELD_SPEC_CONST_TMPVAR) \
	_(2344, ZEND_YIELD_SPEC_CONST_TMPVAR) \
	_(2345, ZEND_YIELD_SPEC_CONST_UNUSED) \
	_(2346, ZEND_YIELD_SPEC_CONST_CV) \
	_(2347, ZEND_YIELD_SPEC_TMP_CONST) \
	_(2348, ZEND_YIELD_SPEC_TMP_TMPVAR) \
	_(2349, ZEND_YIELD_SPEC_TMP_TMPVAR) \
	_(2350, ZEND_YIELD_SPEC_TMP_UNUSED) \
	_(2351, ZEND_YIELD_SPEC_TMP_CV) \
	_(2352, ZEND_YIELD_SPEC_VAR_CONST) \
	_(2353, ZEND_YIELD_SPEC_VAR_TMPVAR) \
	_(2354, ZEND_YIELD_SPEC_VAR_TMPVAR) \
	_(2355, ZEND_YIELD_SPEC_VAR_UNUSED) \
	_(2356, ZEND_YIELD_SPEC_VAR_CV) \
	_(2357, ZEND_YIELD_SPEC_UNUSED_CONST) \
	_(2358, ZEND_YIELD_SPEC_UNUSED_TMPVAR) \
	_(2359, ZEND_YIELD_SPEC_UNUSED_TMPVAR) \
	_(2360, ZEND_YIELD_SPEC_UNUSED_UNUSED) \
	_(2361, ZEND_YIELD_SPEC_UNUSED_CV) \
	_(2362, ZEND_YIELD_SPEC_CV_CONST) \
	_(2363, ZEND_YIELD_SPEC_CV_TMPVAR) \
	_(2364, ZEND_YIELD_SPEC_CV_TMPVAR) \
	_(2365, ZEND_YIELD_SPEC_CV_UNUSED) \
	_(2366, ZEND_YIELD_SPEC_CV_CV) \
	_(2367, ZEND_GENERATOR_RETURN_SPEC_CONST) \
	_(2368, ZEND_GENERATOR_RETURN_SPEC_OBSERVER) \
	_(2369, ZEND_GENERATOR_RETURN_SPEC_TMP) \
	_(2370, ZEND_GENERATOR_RETURN_SPEC_OBSERVER) \
	_(2371, ZEND_GENERATOR_RETURN_SPEC_VAR) \
	_(2372, ZEND_GENERATOR_RETURN_SPEC_OBSERVER) \
	_(2375, ZEND_GENERATOR_RETURN_SPEC_CV) \
	_(2376, ZEND_GENERATOR_RETURN_SPEC_OBSERVER) \
	_(2377, ZEND_FAST_CALL_SPEC) \
	_(2378, ZEND_FAST_RET_SPEC) \
	_(2379, ZEND_RECV_VARIADIC_SPEC_UNUSED) \
	_(2380, ZEND_SEND_UNPACK_SPEC) \
	_(2381, ZEND_YIELD_FROM_SPEC_CONST) \
	_(2382, ZEND_YIELD_FROM_SPEC_TMPVAR) \
	_(2383, ZEND_YIELD_FROM_SPEC_TMPVAR) \
	_(2385, ZEND_YIELD_FROM_SPEC_CV) \
	_(2386, ZEND_COPY_TMP_SPEC_TMPVAR_UNUSED) \
	_(2387, ZEND_BIND_GLOBAL_SPEC_CV_CONST) \
	_(2388, ZEND_COALESCE_SPEC_CONST) \
	_(2389, ZEND_COALESCE_SPEC_TMP) \
	_(2390, ZEND_COALESCE_SPEC_VAR) \
	_(2392, ZEND_COALESCE_SPEC_CV) \
	_(2393, ZEND_SPACESHIP_SPEC_CONST_CONST) \
	_(2394, ZEND_SPACESHIP_SPEC_CONST_TMPVAR) \
	_(2395, ZEND_SPACESHIP_SPEC_CONST_TMPVAR) \
	_(2397, ZEND_SPACESHIP_SPEC_CONST_CV) \
	_(2398, ZEND_SPACESHIP_SPEC_TMPVAR_CONST) \
	_(2399, ZEND_SPACESHIP_SPEC_TMPVAR_TMPVAR) \
	_(2400, ZEND_SPACESHIP_SPEC_TMPVAR_TMPVAR) \
	_(2402, ZEND_SPACESHIP_SPEC_TMPVAR_CV) \
	_(2403, ZEND_SPACESHIP_SPEC_TMPVAR_CONST) \
	_(2404, ZEND_SPACESHIP_SPEC_TMPVAR_TMPVAR) \
	_(2405, ZEND_SPACESHIP_SPEC_TMPVAR_TMPVAR) \
	_(2407, ZEND_SPACESHIP_SPEC_TMPVAR_CV) \
	_(2413, ZEND_SPACESHIP_SPEC_CV_CONST) \
	_(2414, ZEND_SPACESHIP_SPEC_CV_TMPVAR) \
	_(2415, ZEND_SPACESHIP_SPEC_CV_TMPVAR) \
	_(2417, ZEND_SPACESHIP_SPEC_CV_CV) \
	_(2418, ZEND_FUNC_NUM_ARGS_SPEC_UNUSED_UNUSED) \
	_(2419, ZEND_FUNC_GET_ARGS_SPEC_CONST_UNUSED) \
	_(2422, ZEND_FUNC_GET_ARGS_SPEC_UNUSED_UNUSED) \
	_(2424, ZEND_FETCH_STATIC_PROP_R_SPEC) \
	_(2425, ZEND_FETCH_STATIC_PROP_W_SPEC) \
	_(2426, ZEND_FETCH_STATIC_PROP_RW_SPEC) \
	_(2427, ZEND_FETCH_STATIC_PROP_IS_SPEC) \
	_(2428, ZEND_FETCH_STATIC_PROP_FUNC_ARG_SPEC) \
	_(2429, ZEND_FETCH_STATIC_PROP_UNSET_SPEC) \
	_(2430, ZEND_UNSET_STATIC_PROP_SPEC) \
	_(2431, ZEND_ISSET_ISEMPTY_STATIC_PROP_SPEC) \
	_(2432, ZEND_FETCH_CLASS_CONSTANT_SPEC_CONST_CONST) \
	_(2433, ZEND_FETCH_CLASS_CONSTANT_SPEC_CONST_TMPVARCV) \
	_(2434, ZEND_FETCH_CLASS_CONSTANT_SPEC_CONST_TMPVARCV) \
	_(2436, ZEND_FETCH_CLASS_CONSTANT_SPEC_CONST_TMPVARCV) \
	_(2442, ZEND_FETCH_CLASS_CONSTANT_SPEC_VAR_CONST) \
	_(2443, ZEND_FETCH_CLASS_CONSTANT_SPEC_VAR_TMPVARCV) \
	_(2444, ZEND_FETCH_CLASS_CONSTANT_SPEC_VAR_TMPVARCV) \
	_(2446, ZEND_FETCH_CLASS_CONSTANT_SPEC_VAR_TMPVARCV) \
	_(2447, ZEND_FETCH_CLASS_CONSTANT_SPEC_UNUSED_CONST) \
	_(2448, ZEND_FETCH_CLASS_CONSTANT_SPEC_UNUSED_TMPVARCV) \
	_(2449, ZEND_FETCH_CLASS_CONSTANT_SPEC_UNUSED_TMPVARCV) \
	_(2451, ZEND_FETCH_CLASS_CONSTANT_SPEC_UNUSED_TMPVARCV) \
	_(2457, ZEND_BIND_LEXICAL_SPEC_TMP_CV) \
	_(2458, ZEND_BIND_STATIC_SPEC_CV) \
	_(2459, ZEND_FETCH_THIS_SPEC_UNUSED_UNUSED) \
	_(2460, ZEND_SEND_FUNC_ARG_SPEC_VAR_CONST) \
	_(2463, ZEND_SEND_FUNC_ARG_SPEC_VAR_UNUSED) \
	_(2465, ZEND_ISSET_ISEMPTY_THIS_SPEC_UNUSED_UNUSED) \
	_(2466, ZEND_SWITCH_LONG_SPEC_CONST_CONST) \
	_(2467, ZEND_SWITCH_LONG_SPEC_TMPVARCV_CONST) \
	_(2468, ZEND_SWITCH_LONG_SPEC_TMPVARCV_CONST) \
	_(2470, ZEND_SWITCH_LONG_SPEC_TMPVARCV_CONST) \
	_(2471, ZEND_SWITCH_STRING_SPEC_CONST_CONST) \
	_(2472, ZEND_SWITCH_STRING_SPEC_TMPVARCV_CONST) \
	_(2473, ZEND_SWITCH_STRING_SPEC_TMPVARCV_CONST) \
	_(2475, ZEND_SWITCH_STRING_SPEC_TMPVARCV_CONST) \
	_(2476, ZEND_IN_ARRAY_SPEC_CONST_CONST) \
	_(2477, ZEND_IN_ARRAY_SPEC_TMP_CONST) \
	_(2478, ZEND_IN_ARRAY_SPEC_VAR_CONST) \
	_(2480, ZEND_IN_ARRAY_SPEC_CV_CONST) \
	_(2481, ZEND_COUNT_SPEC_CONST_UNUSED) \
	_(2482, ZEND_COUNT_SPEC_TMPVAR_UNUSED) \
	_(2483, ZEND_COUNT_SPEC_TMPVAR_UNUSED) \
	_(2485, ZEND_COUNT_SPEC_CV_UNUSED) \
	_(2486, ZEND_GET_CLASS_SPEC_CONST_UNUSED) \
	_(2487, ZEND_GET_CLASS_SPEC_TMPVAR_UNUSED) \
	_(2488, ZEND_GET_CLASS_SPEC_TMPVAR_UNUSED) \
	_(2489, ZEND_GET_CLASS_SPEC_UNUSED_UNUSED) \
	_(2490, ZEND_GET_CLASS_SPEC_CV_UNUSED) \
	_(2491, ZEND_GET_CALLED_CLASS_SPEC_UNUSED_UNUSED) \
	_(2492, ZEND_GET_TYPE_SPEC_CONST_UNUSED) \
	_(2493, ZEND_GET_TYPE_SPEC_TMP_UNUSED) \
	_(2494, ZEND_GET_TYPE_SPEC_VAR_UNUSED) \
	_(2496, ZEND_GET_TYPE_SPEC_CV_UNUSED) \
	_(2497, ZEND_ARRAY_KEY_EXISTS_SPEC_CONST_CONST) \
	_(2498, ZEND_ARRAY_KEY_EXISTS_SPEC_CONST_TMPVAR) \
	_(2499, ZEND_ARRAY_KEY_EXISTS_SPEC_CONST_TMPVAR) \
	_(2501, ZEND_ARRAY_KEY_EXISTS_SPEC_CONST_CV) \
	_(2502, ZEND_ARRAY_KEY_EXISTS_SPEC_TMPVAR_CONST) \
	_(2503, ZEND_ARRAY_KEY_EXISTS_SPEC_TMPVAR_TMPVAR) \
	_(2504, ZEND_ARRAY_KEY_EXISTS_SPEC_TMPVAR_TMPVAR) \
	_(2506, ZEND_ARRAY_KEY_EXISTS_SPEC_TMPVAR_CV) \
	_(2507, ZEND_ARRAY_KEY_EXISTS_SPEC_TMPVAR_CONST) \
	_(2508, ZEND_ARRAY_KEY_EXISTS_SPEC_TMPVAR_TMPVAR) \
	_(2509, ZEND_ARRAY_KEY_EXISTS_SPEC_TMPVAR_TMPVAR) \
	_(2511, ZEND_ARRAY_KEY_EXISTS_SPEC_TMPVAR_CV) \
	_(2517, ZEND_ARRAY_KEY_EXISTS_SPEC_CV_CONST) \
	_(2518, ZEND_ARRAY_KEY_EXISTS_SPEC_CV_TMPVAR) \
	_(2519, ZEND_ARRAY_KEY_EXISTS_SPEC_CV_TMPVAR) \
	_(2521, ZEND_ARRAY_KEY_EXISTS_SPEC_CV_CV) \
	_(2522, ZEND_MATCH_SPEC_CONST_CONST) \
	_(2523, ZEND_MATCH_SPEC_TMPVARCV_CONST) \
	_(2524, ZEND_MATCH_SPEC_TMPVARCV_CONST) \
	_(2526, ZEND_MATCH_SPEC_TMPVARCV_CONST) \
	_(2532, ZEND_CASE_STRICT_SPEC_TMP_CONST) \
	_(2533, ZEND_CASE_STRICT_SPEC_TMP_TMP) \
	_(2534, ZEND_CASE_STRICT_SPEC_TMP_VAR) \
	_(2536, ZEND_CASE_STRICT_SPEC_TMP_CV) \
	_(2537, ZEND_CASE_STRICT_SPEC_VAR_CONST) \
	_(2538, ZEND_CASE_STRICT_SPEC_VAR_TMP) \
	_(2539, ZEND_CASE_STRICT_SPEC_VAR_VAR) \
	_(2541, ZEND_CASE_STRICT_SPEC_VAR_CV) \
	_(2552, ZEND_MATCH_ERROR_SPEC_CONST_UNUSED) \
	_(2553, ZEND_MATCH_ERROR_SPEC_TMPVARCV_UNUSED) \
	_(2554, ZEND_MATCH_ERROR_SPEC_TMPVARCV_UNUSED) \
	_(2556, ZEND_MATCH_ERROR_SPEC_TMPVARCV_UNUSED) \
	_(2557, ZEND_JMP_NULL_SPEC_CONST) \
	_(2558, ZEND_JMP_NULL_SPEC_TMP) \
	_(2559, ZEND_JMP_NULL_SPEC_VAR) \
	_(2561, ZEND_JMP_NULL_SPEC_CV) \
	_(2562, ZEND_CHECK_UNDEF_ARGS_SPEC_UNUSED_UNUSED) \
	_(2563, ZEND_FETCH_GLOBALS_SPEC_UNUSED_UNUSED) \
	_(2564, ZEND_VERIFY_NEVER_TYPE_SPEC_UNUSED_UNUSED) \
	_(2565, ZEND_CALLABLE_CONVERT_SPEC_UNUSED_UNUSED) \
	_(2566, ZEND_BIND_INIT_STATIC_OR_JMP_SPEC_CV) \
	_(2567, ZEND_FRAMELESS_ICALL_0_SPEC_UNUSED_UNUSED) \
	_(2568, ZEND_FRAMELESS_ICALL_0_SPEC_OBSERVER) \
	_(2569, ZEND_FRAMELESS_ICALL_1_SPEC_UNUSED) \
	_(2570, ZEND_FRAMELESS_ICALL_1_SPEC_OBSERVER) \
	_(2571, ZEND_FRAMELESS_ICALL_2_SPEC) \
	_(2572, ZEND_FRAMELESS_ICALL_2_SPEC_OBSERVER) \
	_(2573, ZEND_FRAMELESS_ICALL_3_SPEC) \
	_(2574, ZEND_FRAMELESS_ICALL_3_SPEC_OBSERVER) \
	_(2575, ZEND_JMP_FRAMELESS_SPEC_CONST) \
	_(2576, ZEND_INIT_PARENT_PROPERTY_HOOK_CALL_SPEC_CONST_UNUSED) \
	_(2577, ZEND_DECLARE_ATTRIBUTED_CONST_SPEC_CONST_CONST) \
	_(2578, ZEND_INIT_FCALL_OFFSET_SPEC_CONST) \
	_(2579, ZEND_RECV_NOTYPE_SPEC) \
	_(2581, ZEND_COUNT_ARRAY_SPEC_TMPVAR_UNUSED) \
	_(2582, ZEND_COUNT_ARRAY_SPEC_TMPVAR_UNUSED) \
	_(2584, ZEND_COUNT_ARRAY_SPEC_CV_UNUSED) \
	_(2585, ZEND_JMP_FORWARD_SPEC) \
	_(2591, ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_CONST) \
	_(2592, ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV) \
	_(2593, ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV) \
	_(2595, ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV) \
	_(2596, ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_CONST) \
	_(2597, ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV) \
	_(2598, ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV) \
	_(2600, ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV) \
	_(2606, ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_CONST) \
	_(2607, ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV) \
	_(2608, ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV) \
	_(2610, ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV) \
	_(2616, ZEND_ADD_LONG_SPEC_TMPVARCV_CONST) \
	_(2617, ZEND_ADD_LONG_SPEC_TMPVARCV_TMPVARCV) \
	_(2618, ZEND_ADD_LONG_SPEC_TMPVARCV_TMPVARCV) \
	_(2620, ZEND_ADD_LONG_SPEC_TMPVARCV_TMPVARCV) \
	_(2621, ZEND_ADD_LONG_SPEC_TMPVARCV_CONST) \
	_(2622, ZEND_ADD_LONG_SPEC_TMPVARCV_TMPVARCV) \
	_(2623, ZEND_ADD_LONG_SPEC_TMPVARCV_TMPVARCV) \
	_(2625, ZEND_ADD_LONG_SPEC_TMPVARCV_TMPVARCV) \
	_(2631, ZEND_ADD_LONG_SPEC_TMPVARCV_CONST) \
	_(2632, ZEND_ADD_LONG_SPEC_TMPVARCV_TMPVARCV) \
	_(2633, ZEND_ADD_LONG_SPEC_TMPVARCV_TMPVARCV) \
	_(2635, ZEND_ADD_LONG_SPEC_TMPVARCV_TMPVARCV) \
	_(2641, ZEND_ADD_DOUBLE_SPEC_TMPVARCV_CONST) \
	_(2642, ZEND_ADD_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \
	_(2643, ZEND_ADD_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \
	_(2645, ZEND_ADD_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \
	_(2646, ZEND_ADD_DOUBLE_SPEC_TMPVARCV_CONST) \
	_(2647, ZEND_ADD_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \
	_(2648, ZEND_ADD_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \
	_(2650, ZEND_ADD_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \
	_(2656, ZEND_ADD_DOUBLE_SPEC_TMPVARCV_CONST) \
	_(2657, ZEND_ADD_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \
	_(2658, ZEND_ADD_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \
	_(2660, ZEND_ADD_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \
	_(2662, ZEND_SUB_LONG_NO_OVERFLOW_SPEC_CONST_TMPVARCV) \
	_(2663, ZEND_SUB_LONG_NO_OVERFLOW_SPEC_CONST_TMPVARCV) \
	_(2665, ZEND_SUB_LONG_NO_OVERFLOW_SPEC_CONST_TMPVARCV) \
	_(2666, ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_CONST) \
	_(2667, ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV) \
	_(2668, ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV) \
	_(2670, ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV) \
	_(2671, ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_CONST) \
	_(2672, ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV) \
	_(2673, ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV) \
	_(2675, ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV) \
	_(2681, ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_CONST) \
	_(2682, ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV) \
	_(2683, ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV) \
	_(2685, ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV) \
	_(2687, ZEND_SUB_LONG_SPEC_CONST_TMPVARCV) \
	_(2688, ZEND_SUB_LONG_SPEC_CONST_TMPVARCV) \
	_(2690, ZEND_SUB_LONG_SPEC_CONST_TMPVARCV) \
	_(2691, ZEND_SUB_LONG_SPEC_TMPVARCV_CONST) \
	_(2692, ZEND_SUB_LONG_SPEC_TMPVARCV_TMPVARCV) \
	_(2693, ZEND_SUB_LONG_SPEC_TMPVARCV_TMPVARCV) \
	_(2695, ZEND_SUB_LONG_SPEC_TMPVARCV_TMPVARCV) \
	_(2696, ZEND_SUB_LONG_SPEC_TMPVARCV_CONST) \
	_(2697, ZEND_SUB_LONG_SPEC_TMPVARCV_TMPVARCV) \
	_(2698, ZEND_SUB_LONG_SPEC_TMPVARCV_TMPVARCV) \
	_(2700, ZEND_SUB_LONG_SPEC_TMPVARCV_TMPVARCV) \
	_(2706, ZEND_SUB_LONG_SPEC_TMPVARCV_CONST) \
	_(2707, ZEND_SUB_LONG_SPEC_TMPVARCV_TMPVARCV) \
	_(2708, ZEND_SUB_LONG_SPEC_TMPVARCV_TMPVARCV) \
	_(2710, ZEND_SUB_LONG_SPEC_TMPVARCV_TMPVARCV) \
	_(2712, ZEND_SUB_DOUBLE_SPEC_CONST_TMPVARCV) \
	_(2713, ZEND_SUB_DOUBLE_SPEC_CONST_TMPVARCV) \
	_(2715, ZEND_SUB_DOUBLE_SPEC_CONST_TMPVARCV) \
	_(2716, ZEND_SUB_DOUBLE_SPEC_TMPVARCV_CONST) \
	_(2717, ZEND_SUB_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \
	_(2718, ZEND_SUB_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \
	_(2720, ZEND_SUB_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \
	_(2721, ZEND_SUB_DOUBLE_SPEC_TMPVARCV_CONST) \
	_(2722, ZEND_SUB_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \
	_(2723, ZEND_SUB_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \
	_(2725, ZEND_SUB_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \
	_(2731, ZEND_SUB_DOUBLE_SPEC_TMPVARCV_CONST) \
	_(2732, ZEND_SUB_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \
	_(2733, ZEND_SUB_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \
	_(2735, ZEND_SUB_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \
	_(2741, ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_CONST) \
	_(2742, ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV) \
	_(2743, ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV) \
	_(2745, ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV) \
	_(2746, ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_CONST) \
	_(2747, ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV) \
	_(2748, ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV) \
	_(2750, ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV) \
	_(2756, ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_CONST) \
	_(2757, ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV) \
	_(2758, ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV) \
	_(2760, ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV) \
	_(2766, ZEND_MUL_LONG_SPEC_TMPVARCV_CONST) \
	_(2767, ZEND_MUL_LONG_SPEC_TMPVARCV_TMPVARCV) \
	_(2768, ZEND_MUL_LONG_SPEC_TMPVARCV_TMPVARCV) \
	_(2770, ZEND_MUL_LONG_SPEC_TMPVARCV_TMPVARCV) \
	_(2771, ZEND_MUL_LONG_SPEC_TMPVARCV_CONST) \
	_(2772, ZEND_MUL_LONG_SPEC_TMPVARCV_TMPVARCV) \
	_(2773, ZEND_MUL_LONG_SPEC_TMPVARCV_TMPVARCV) \
	_(2775, ZEND_MUL_LONG_SPEC_TMPVARCV_TMPVARCV) \
	_(2781, ZEND_MUL_LONG_SPEC_TMPVARCV_CONST) \
	_(2782, ZEND_MUL_LONG_SPEC_TMPVARCV_TMPVARCV) \
	_(2783, ZEND_MUL_LONG_SPEC_TMPVARCV_TMPVARCV) \
	_(2785, ZEND_MUL_LONG_SPEC_TMPVARCV_TMPVARCV) \
	_(2791, ZEND_MUL_DOUBLE_SPEC_TMPVARCV_CONST) \
	_(2792, ZEND_MUL_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \
	_(2793, ZEND_MUL_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \
	_(2795, ZEND_MUL_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \
	_(2796, ZEND_MUL_DOUBLE_SPEC_TMPVARCV_CONST) \
	_(2797, ZEND_MUL_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \
	_(2798, ZEND_MUL_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \
	_(2800, ZEND_MUL_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \
	_(2806, ZEND_MUL_DOUBLE_SPEC_TMPVARCV_CONST) \
	_(2807, ZEND_MUL_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \
	_(2808, ZEND_MUL_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \
	_(2810, ZEND_MUL_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \
	_(2826, ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_CONST) \
	_(2827, ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPZ) \
	_(2828, ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPNZ) \
	_(2829, ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV) \
	_(2830, ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ) \
	_(2831, ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \
	_(2832, ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV) \
	_(2833, ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ) \
	_(2834, ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \
	_(2838, ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV) \
	_(2839, ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ) \
	_(2840, ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \
	_(2841, ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_CONST) \
	_(2842, ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPZ) \
	_(2843, ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPNZ) \
	_(2844, ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV) \
	_(2845, ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ) \
	_(2846, ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \
	_(2847, ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV) \
	_(2848, ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ) \
	_(2849, ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \
	_(2853, ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV) \
	_(2854, ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ) \
	_(2855, ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \
	_(2871, ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_CONST) \
	_(2872, ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPZ) \
	_(2873, ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPNZ) \
	_(2874, ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV) \
	_(2875, ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ) \
	_(2876, ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \
	_(2877, ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV) \
	_(2878, ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ) \
	_(2879, ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \
	_(2883, ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV) \
	_(2884, ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ) \
	_(2885, ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \
	_(2901, ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST) \
	_(2902, ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ) \
	_(2903, ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ) \
	_(2904, ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \
	_(2905, ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ) \
	_(2906, ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \
	_(2907, ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \
	_(2908, ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ) \
	_(2909, ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \
	_(2913, ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \
	_(2914, ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ) \
	_(2915, ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \
	_(2916, ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST) \
	_(2917, ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ) \
	_(2918, ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ) \
	_(2919, ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \
	_(2920, ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ) \
	_(2921, ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \
	_(2922, ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \
	_(2923, ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ) \
	_(2924, ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \
	_(2928, ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \
	_(2929, ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ) \
	_(2930, ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \
	_(2946, ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST) \
	_(2947, ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ) \
	_(2948, ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ) \
	_(2949, ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \
	_(2950, ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ) \
	_(2951, ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \
	_(2952, ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \
	_(2953, ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ) \
	_(2954, ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \
	_(2958, ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \
	_(2959, ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ) \
	_(2960, ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \
	_(2976, ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_CONST) \
	_(2977, ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPZ) \
	_(2978, ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPNZ) \
	_(2979, ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV) \
	_(2980, ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ) \
	_(2981, ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \
	_(2982, ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV) \
	_(2983, ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ) \
	_(2984, ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \
	_(2988, ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV) \
	_(2989, ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ) \
	_(2990, ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \
	_(2991, ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_CONST) \
	_(2992, ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPZ) \
	_(2993, ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPNZ) \
	_(2994, ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV) \
	_(2995, ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ) \
	_(2996, ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \
	_(2997, ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV) \
	_(2998, ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ) \
	_(2999, ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \
	_(3003, ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV) \
	_(3004, ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ) \
	_(3005, ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \
	_(3021, ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_CONST) \
	_(3022, ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPZ) \
	_(3023, ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPNZ) \
	_(3024, ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV) \
	_(3025, ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ) \
	_(3026, ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \
	_(3027, ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV) \
	_(3028, ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ) \
	_(3029, ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \
	_(3033, ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV) \
	_(3034, ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ) \
	_(3035, ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \
	_(3051, ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST) \
	_(3052, ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ) \
	_(3053, ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ) \
	_(3054, ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \
	_(3055, ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ) \
	_(3056, ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \
	_(3057, ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \
	_(3058, ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ) \
	_(3059, ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \
	_(3063, ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \
	_(3064, ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ) \
	_(3065, ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \
	_(3066, ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST) \
	_(3067, ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ) \
	_(3068, ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ) \
	_(3069, ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \
	_(3070, ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ) \
	_(3071, ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \
	_(3072, ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \
	_(3073, ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ) \
	_(3074, ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \
	_(3078, ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \
	_(3079, ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ) \
	_(3080, ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \
	_(3096, ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST) \
	_(3097, ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ) \
	_(3098, ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ) \
	_(3099, ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \
	_(3100, ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ) \
	_(3101, ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \
	_(3102, ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \
	_(3103, ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ) \
	_(3104, ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \
	_(3108, ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \
	_(3109, ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ) \
	_(3110, ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \
	_(3111, ZEND_IS_IDENTICAL_EMPTY_ARRAY_SPEC_TMPVARCV_CONST) \
	_(3112, ZEND_IS_IDENTICAL_EMPTY_ARRAY_SPEC_TMPVARCV_CONST_JMPZ) \
	_(3113, ZEND_IS_IDENTICAL_EMPTY_ARRAY_SPEC_TMPVARCV_CONST_JMPNZ) \
	_(3114, ZEND_IS_NOT_IDENTICAL_EMPTY_ARRAY_SPEC_TMPVARCV_CONST) \
	_(3115, ZEND_IS_NOT_IDENTICAL_EMPTY_ARRAY_SPEC_TMPVARCV_CONST_JMPZ) \
	_(3116, ZEND_IS_NOT_IDENTICAL_EMPTY_ARRAY_SPEC_TMPVARCV_CONST_JMPNZ) \
	_(3117, ZEND_IS_IDENTICAL_NOTHROW_SPEC_CV_CONST) \
	_(3121, ZEND_IS_IDENTICAL_NOTHROW_SPEC_CV_CV) \
	_(3122, ZEND_IS_NOT_IDENTICAL_NOTHROW_SPEC_CV_CONST) \
	_(3126, ZEND_IS_NOT_IDENTICAL_NOTHROW_SPEC_CV_CV) \
	_(3130, ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV) \
	_(3131, ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV_JMPZ) \
	_(3132, ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV_JMPNZ) \
	_(3133, ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV) \
	_(3134, ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV_JMPZ) \
	_(3135, ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV_JMPNZ) \
	_(3139, ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV) \
	_(3140, ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV_JMPZ) \
	_(3141, ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV_JMPNZ) \
	_(3142, ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST) \
	_(3143, ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST_JMPZ) \
	_(3144, ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST_JMPNZ) \
	_(3145, ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV) \
	_(3146, ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ) \
	_(3147, ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \
	_(3148, ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV) \
	_(3149, ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ) \
	_(3150, ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \
	_(3154, ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV) \
	_(3155, ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ) \
	_(3156, ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \
	_(3157, ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST) \
	_(3158, ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST_JMPZ) \
	_(3159, ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST_JMPNZ) \
	_(3160, ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV) \
	_(3161, ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ) \
	_(3162, ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \
	_(3163, ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV) \
	_(3164, ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ) \
	_(3165, ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \
	_(3169, ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV) \
	_(3170, ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ) \
	_(3171, ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \
	_(3187, ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST) \
	_(3188, ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST_JMPZ) \
	_(3189, ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST_JMPNZ) \
	_(3190, ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV) \
	_(3191, ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ) \
	_(3192, ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \
	_(3193, ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV) \
	_(3194, ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ) \
	_(3195, ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \
	_(3199, ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV) \
	_(3200, ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ) \
	_(3201, ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \
	_(3205, ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV) \
	_(3206, ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV_JMPZ) \
	_(3207, ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV_JMPNZ) \
	_(3208, ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV) \
	_(3209, ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV_JMPZ) \
	_(3210, ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV_JMPNZ) \
	_(3214, ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV) \
	_(3215, ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV_JMPZ) \
	_(3216, ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV_JMPNZ) \
	_(3217, ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST) \
	_(3218, ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ) \
	_(3219, ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ) \
	_(3220, ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \
	_(3221, ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ) \
	_(3222, ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \
	_(3223, ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \
	_(3224, ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ) \
	_(3225, ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \
	_(3229, ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \
	_(3230, ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ) \
	_(3231, ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \
	_(3232, ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST) \
	_(3233, ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ) \
	_(3234, ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ) \
	_(3235, ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \
	_(3236, ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ) \
	_(3237, ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \
	_(3238, ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \
	_(3239, ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ) \
	_(3240, ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \
	_(3244, ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \
	_(3245, ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ) \
	_(3246, ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \
	_(3262, ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST) \
	_(3263, ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ) \
	_(3264, ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ) \
	_(3265, ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \
	_(3266, ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ) \
	_(3267, ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \
	_(3268, ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \
	_(3269, ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ) \
	_(3270, ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \
	_(3274, ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \
	_(3275, ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ) \
	_(3276, ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \
	_(3280, ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV) \
	_(3281, ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV_JMPZ) \
	_(3282, ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV_JMPNZ) \
	_(3283, ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV) \
	_(3284, ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV_JMPZ) \
	_(3285, ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV_JMPNZ) \
	_(3289, ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV) \
	_(3290, ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV_JMPZ) \
	_(3291, ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV_JMPNZ) \
	_(3292, ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST) \
	_(3293, ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPZ) \
	_(3294, ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPNZ) \
	_(3295, ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV) \
	_(3296, ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ) \
	_(3297, ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \
	_(3298, ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV) \
	_(3299, ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ) \
	_(3300, ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \
	_(3304, ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV) \
	_(3305, ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ) \
	_(3306, ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \
	_(3307, ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST) \
	_(3308, ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPZ) \
	_(3309, ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPNZ) \
	_(3310, ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV) \
	_(3311, ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ) \
	_(3312, ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \
	_(3313, ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV) \
	_(3314, ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ) \
	_(3315, ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \
	_(3319, ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV) \
	_(3320, ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ) \
	_(3321, ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \
	_(3337, ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST) \
	_(3338, ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPZ) \
	_(3339, ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPNZ) \
	_(3340, ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV) \
	_(3341, ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ) \
	_(3342, ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \
	_(3343, ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV) \
	_(3344, ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ) \
	_(3345, ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \
	_(3349, ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV) \
	_(3350, ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ) \
	_(3351, ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \
	_(3355, ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV) \
	_(3356, ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_JMPZ) \
	_(3357, ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_JMPNZ) \
	_(3358, ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV) \
	_(3359, ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_JMPZ) \
	_(3360, ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_JMPNZ) \
	_(3364, ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV) \
	_(3365, ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_JMPZ) \
	_(3366, ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_JMPNZ) \
	_(3367, ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST) \
	_(3368, ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ) \
	_(3369, ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ) \
	_(3370, ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \
	_(3371, ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ) \
	_(3372, ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \
	_(3373, ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \
	_(3374, ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ) \
	_(3375, ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \
	_(3379, ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \
	_(3380, ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ) \
	_(3381, ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \
	_(3382, ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST) \
	_(3383, ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ) \
	_(3384, ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ) \
	_(3385, ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \
	_(3386, ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ) \
	_(3387, ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \
	_(3388, ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \
	_(3389, ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ) \
	_(3390, ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \
	_(3394, ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \
	_(3395, ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ) \
	_(3396, ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \
	_(3412, ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST) \
	_(3413, ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ) \
	_(3414, ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ) \
	_(3415, ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \
	_(3416, ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ) \
	_(3417, ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \
	_(3418, ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \
	_(3419, ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ) \
	_(3420, ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \
	_(3424, ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \
	_(3425, ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ) \
	_(3426, ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \
	_(3427, ZEND_PRE_INC_LONG_NO_OVERFLOW_SPEC_CV_RETVAL_UNUSED) \
	_(3428, ZEND_PRE_INC_LONG_NO_OVERFLOW_SPEC_CV_RETVAL_USED) \
	_(3429, ZEND_PRE_INC_LONG_SPEC_CV_RETVAL_UNUSED) \
	_(3430, ZEND_PRE_INC_LONG_SPEC_CV_RETVAL_USED) \
	_(3431, ZEND_PRE_DEC_LONG_NO_OVERFLOW_SPEC_CV_RETVAL_UNUSED) \
	_(3432, ZEND_PRE_DEC_LONG_NO_OVERFLOW_SPEC_CV_RETVAL_USED) \
	_(3433, ZEND_PRE_DEC_LONG_SPEC_CV_RETVAL_UNUSED) \
	_(3434, ZEND_PRE_DEC_LONG_SPEC_CV_RETVAL_USED) \
	_(3435, ZEND_POST_INC_LONG_NO_OVERFLOW_SPEC_CV) \
	_(3436, ZEND_POST_INC_LONG_SPEC_CV) \
	_(3437, ZEND_POST_DEC_LONG_NO_OVERFLOW_SPEC_CV) \
	_(3438, ZEND_POST_DEC_LONG_SPEC_CV) \
	_(3439, ZEND_QM_ASSIGN_LONG_SPEC_CONST) \
	_(3440, ZEND_QM_ASSIGN_LONG_SPEC_TMPVARCV) \
	_(3441, ZEND_QM_ASSIGN_LONG_SPEC_TMPVARCV) \
	_(3443, ZEND_QM_ASSIGN_LONG_SPEC_TMPVARCV) \
	_(3444, ZEND_QM_ASSIGN_DOUBLE_SPEC_CONST) \
	_(3445, ZEND_QM_ASSIGN_DOUBLE_SPEC_TMPVARCV) \
	_(3446, ZEND_QM_ASSIGN_DOUBLE_SPEC_TMPVARCV) \
	_(3448, ZEND_QM_ASSIGN_DOUBLE_SPEC_TMPVARCV) \
	_(3449, ZEND_QM_ASSIGN_NOREF_SPEC_CONST) \
	_(3450, ZEND_QM_ASSIGN_NOREF_SPEC_TMPVARCV) \
	_(3451, ZEND_QM_ASSIGN_NOREF_SPEC_TMPVARCV) \
	_(3453, ZEND_QM_ASSIGN_NOREF_SPEC_TMPVARCV) \
	_(3455, ZEND_FETCH_DIM_R_INDEX_SPEC_CONST_TMPVARCV) \
	_(3456, ZEND_FETCH_DIM_R_INDEX_SPEC_CONST_TMPVARCV) \
	_(3458, ZEND_FETCH_DIM_R_INDEX_SPEC_CONST_TMPVARCV) \
	_(3459, ZEND_FETCH_DIM_R_INDEX_SPEC_TMPVAR_CONST) \
	_(3460, ZEND_FETCH_DIM_R_INDEX_SPEC_TMPVAR_TMPVARCV) \
	_(3461, ZEND_FETCH_DIM_R_INDEX_SPEC_TMPVAR_TMPVARCV) \
	_(3463, ZEND_FETCH_DIM_R_INDEX_SPEC_TMPVAR_TMPVARCV) \
	_(3464, ZEND_FETCH_DIM_R_INDEX_SPEC_TMPVAR_CONST) \
	_(3465, ZEND_FETCH_DIM_R_INDEX_SPEC_TMPVAR_TMPVARCV) \
	_(3466, ZEND_FETCH_DIM_R_INDEX_SPEC_TMPVAR_TMPVARCV) \
	_(3468, ZEND_FETCH_DIM_R_INDEX_SPEC_TMPVAR_TMPVARCV) \
	_(3474, ZEND_FETCH_DIM_R_INDEX_SPEC_CV_CONST) \
	_(3475, ZEND_FETCH_DIM_R_INDEX_SPEC_CV_TMPVARCV) \
	_(3476, ZEND_FETCH_DIM_R_INDEX_SPEC_CV_TMPVARCV) \
	_(3478, ZEND_FETCH_DIM_R_INDEX_SPEC_CV_TMPVARCV) \
	_(3481, ZEND_SEND_VAR_SIMPLE_SPEC_VAR) \
	_(3483, ZEND_SEND_VAR_SIMPLE_SPEC_CV) \
	_(3486, ZEND_SEND_VAR_EX_SIMPLE_SPEC_VAR_UNUSED) \
	_(3488, ZEND_SEND_VAR_EX_SIMPLE_SPEC_CV_UNUSED) \
	_(3489, ZEND_SEND_VAL_SIMPLE_SPEC_CONST) \
	_(3490, ZEND_SEND_VAL_EX_SIMPLE_SPEC_CONST) \
	_(3491, ZEND_FE_FETCH_R_SIMPLE_SPEC_VAR_CV_RETVAL_UNUSED) \
	_(3492, ZEND_FE_FETCH_R_SIMPLE_SPEC_VAR_CV_RETVAL_USED) \
	_(3492+1, ZEND_NULL)
Zend/zend_dtrace.h000064400000004003151730543150010100 0ustar00/*
   +----------------------------------------------------------------------+
   | Zend Engine                                                          |
   +----------------------------------------------------------------------+
   | Copyright (c) Zend Technologies Ltd. (http://www.zend.com)           |
   +----------------------------------------------------------------------+
   | This source file is subject to version 2.00 of the Zend license,     |
   | that is bundled with this package in the file LICENSE, and is        |
   | available through the world-wide-web at the following url:           |
   | http://www.zend.com/license/2_00.txt.                                |
   | If you did not receive a copy of the Zend license and are unable to  |
   | obtain it through the world-wide-web, please send a note to          |
   | license@zend.com so we can mail you a copy immediately.              |
   +----------------------------------------------------------------------+
   | Authors: David Soria Parra <david.soriaparra@sun.com>                |
   +----------------------------------------------------------------------+
*/

#ifndef	_ZEND_DTRACE_H
#define	_ZEND_DTRACE_H

#ifndef ZEND_WIN32
# include <unistd.h>
#endif

#ifdef	__cplusplus
extern "C" {
#endif

#ifdef HAVE_DTRACE
ZEND_API extern zend_op_array *(*zend_dtrace_compile_file)(zend_file_handle *file_handle, int type);
ZEND_API extern void (*zend_dtrace_execute)(zend_op_array *op_array);
ZEND_API extern void (*zend_dtrace_execute_internal)(zend_execute_data *execute_data, zval *return_value);

ZEND_API zend_op_array *dtrace_compile_file(zend_file_handle *file_handle, int type);
ZEND_API void dtrace_execute_ex(zend_execute_data *execute_data);
ZEND_API void dtrace_execute_internal(zend_execute_data *execute_data, zval *return_value);
#include <zend_dtrace_gen.h>

void dtrace_error_notify_cb(int type, zend_string *error_filename, uint32_t error_lineno, zend_string *message);

#endif /* HAVE_DTRACE */

#ifdef	__cplusplus
}
#endif

#endif	/* _ZEND_DTRACE_H */
Zend/zend_vm.h000064400000004100151730543150007256 0ustar00/*
   +----------------------------------------------------------------------+
   | Zend Engine                                                          |
   +----------------------------------------------------------------------+
   | Copyright (c) Zend Technologies Ltd. (http://www.zend.com)           |
   +----------------------------------------------------------------------+
   | This source file is subject to version 2.00 of the Zend license,     |
   | that is bundled with this package in the file LICENSE, and is        |
   | available through the world-wide-web at the following url:           |
   | http://www.zend.com/license/2_00.txt.                                |
   | If you did not receive a copy of the Zend license and are unable to  |
   | obtain it through the world-wide-web, please send a note to          |
   | license@zend.com so we can mail you a copy immediately.              |
   +----------------------------------------------------------------------+
   | Authors: Dmitry Stogov <dmitry@php.net>                              |
   +----------------------------------------------------------------------+
*/

#ifndef ZEND_VM_H
#define ZEND_VM_H

#include "zend_portability.h"

typedef struct _zend_op zend_op;
typedef struct _zend_execute_data zend_execute_data;

BEGIN_EXTERN_C()

ZEND_API void ZEND_FASTCALL zend_vm_set_opcode_handler(zend_op* opcode);
ZEND_API void ZEND_FASTCALL zend_vm_set_opcode_handler_ex(zend_op* opcode, uint32_t op1_info, uint32_t op2_info, uint32_t res_info);
ZEND_API void ZEND_FASTCALL zend_serialize_opcode_handler(zend_op *op);
ZEND_API void ZEND_FASTCALL zend_deserialize_opcode_handler(zend_op *op);
ZEND_API const void* ZEND_FASTCALL zend_get_opcode_handler_func(const zend_op *op);
ZEND_API const zend_op *zend_get_halt_op(void);
ZEND_API int ZEND_FASTCALL zend_vm_call_opcode_handler(zend_execute_data *ex);
ZEND_API int zend_vm_kind(void);
ZEND_API bool zend_gcc_global_regs(void);

void zend_vm_init(void);
void zend_vm_dtor(void);

END_EXTERN_C()

#define ZEND_VM_SET_OPCODE_HANDLER(opline) zend_vm_set_opcode_handler(opline)

#endif
Zend/zend_frameless_function.h000064400000012616151730543160012536 0ustar00/*
   +----------------------------------------------------------------------+
   | Zend Engine                                                          |
   +----------------------------------------------------------------------+
   | Copyright (c) Zend Technologies Ltd. (http://www.zend.com)           |
   +----------------------------------------------------------------------+
   | This source file is subject to version 2.00 of the Zend license,     |
   | that is bundled with this package in the file LICENSE, and is        |
   | available through the world-wide-web at the following url:           |
   | http://www.zend.com/license/2_00.txt.                                |
   | If you did not receive a copy of the Zend license and are unable to  |
   | obtain it through the world-wide-web, please send a note to          |
   | license@zend.com so we can mail you a copy immediately.              |
   +----------------------------------------------------------------------+
*/

#ifndef ZEND_FRAMELESS_FUNCTION_H
#define ZEND_FRAMELESS_FUNCTION_H

#include <stdint.h>
#include <stddef.h>

#ifdef PHP_WIN32
# include <config.w32.h>
#else
# include <php_config.h>
#endif

#include "zend_portability.h"

#define ZEND_FRAMELESS_FUNCTION_PARAMETERS_0 zval *return_value
#define ZEND_FRAMELESS_FUNCTION_PARAMETERS_1 zval *return_value, zval *arg1
#define ZEND_FRAMELESS_FUNCTION_PARAMETERS_2 zval *return_value, zval *arg1, zval *arg2
#define ZEND_FRAMELESS_FUNCTION_PARAMETERS_3 zval *return_value, zval *arg1, zval *arg2, zval *arg3

#define ZEND_FRAMELESS_FUNCTION_NAME(name, arity) zflf_##name##_##arity
#define ZEND_OP_IS_FRAMELESS_ICALL(opcode) ((opcode) >= ZEND_FRAMELESS_ICALL_0 && (opcode) <= ZEND_FRAMELESS_ICALL_3)
#define ZEND_FLF_NUM_ARGS(opcode) ((opcode) - ZEND_FRAMELESS_ICALL_0)
#define ZEND_FLF_FUNC(opline) (zend_flf_functions[(opline)->extended_value])
#define ZEND_FLF_HANDLER(opline) (zend_flf_handlers[(opline)->extended_value])

#define ZEND_FRAMELESS_FUNCTION(name, arity) \
	void ZEND_FRAMELESS_FUNCTION_NAME(name, arity)(ZEND_FRAMELESS_FUNCTION_PARAMETERS_##arity)

#define Z_FLF_PARAM_ZVAL(arg_num, dest) \
	dest = arg ## arg_num;
#define Z_FLF_PARAM_ARRAY(arg_num, dest) \
	if (!zend_parse_arg_array(arg ## arg_num, &dest, /* null_check */ false, /* or_object */ false)) { \
		zend_wrong_parameter_type_error(arg_num, Z_EXPECTED_ARRAY, arg ## arg_num); \
		goto flf_clean; \
	}
#define Z_FLF_PARAM_ARRAY_OR_NULL(arg_num, dest) \
	if (!zend_parse_arg_array(arg ## arg_num, &dest, /* null_check */ true, /* or_object */ false)) { \
		zend_wrong_parameter_type_error(arg_num, Z_EXPECTED_ARRAY_OR_NULL, arg ## arg_num); \
		goto flf_clean; \
	}
#define Z_FLF_PARAM_ARRAY_HT_OR_STR(arg_num, dest_ht, dest_str, str_tmp) \
	if (Z_TYPE_P(arg ## arg_num) == IS_STRING) { \
		dest_ht = NULL; \
		dest_str = Z_STR_P(arg ## arg_num); \
	} else if (EXPECTED(Z_TYPE_P(arg ## arg_num) == IS_ARRAY)) { \
		dest_ht = Z_ARRVAL_P(arg ## arg_num); \
		dest_str = NULL; \
	} else { \
		dest_ht = NULL; \
		ZVAL_COPY(&str_tmp, arg ## arg_num); \
		arg ## arg_num = &str_tmp; \
		if (!zend_flf_parse_arg_str_slow(arg ## arg_num, &dest_str, arg_num)) { \
			zend_wrong_parameter_type_error(arg_num, Z_EXPECTED_ARRAY_OR_STRING, arg ## arg_num); \
			goto flf_clean; \
		} \
	}
#define Z_FLF_PARAM_BOOL(arg_num, dest) \
	if (!zend_parse_arg_bool_ex(arg ## arg_num, &dest, /* is_null */ NULL, /* null_check */ false, arg_num, /* frameless */ true)) { \
		zend_wrong_parameter_type_error(arg_num, Z_EXPECTED_BOOL, arg ## arg_num); \
		goto flf_clean; \
	}
#define Z_FLF_PARAM_LONG(arg_num, dest) \
	if (!zend_parse_arg_long_ex(arg ## arg_num, &dest, /* is_null */ NULL, /* null_check */ false, arg_num, /* frameless */ true)) { \
		zend_wrong_parameter_type_error(arg_num, Z_EXPECTED_LONG, arg ## arg_num); \
		goto flf_clean; \
	}
#define Z_FLF_PARAM_LONG_OR_NULL(arg_num, is_null, dest) \
	if (!zend_parse_arg_long_ex(arg ## arg_num, &dest, &is_null, /* null_check */ true, arg_num, /* frameless */ true)) { \
		zend_wrong_parameter_type_error(arg_num, Z_EXPECTED_LONG_OR_NULL, arg ## arg_num); \
		goto flf_clean; \
	}
#define Z_FLF_PARAM_STR(arg_num, dest, tmp) \
	if (Z_TYPE_P(arg ## arg_num) == IS_STRING) { \
		dest = Z_STR_P(arg ## arg_num); \
	} else { \
		ZVAL_COPY(&tmp, arg ## arg_num); \
		arg ## arg_num = &tmp; \
		if (!zend_parse_arg_str_ex(arg ## arg_num, &dest, /* null_check */ false, arg_num, /* frameless */ true)) { \
			zend_wrong_parameter_type_error(arg_num, Z_EXPECTED_STRING, arg ## arg_num); \
			goto flf_clean; \
		} \
	}
#define Z_FLF_PARAM_FREE_STR(arg_num, tmp) \
	if (UNEXPECTED(arg ## arg_num == &tmp)) { \
		zval_ptr_dtor(arg ## arg_num); \
	}

BEGIN_EXTERN_C()

typedef struct _zval_struct zval;
typedef struct _zend_op zend_op;
typedef union _zend_function zend_function;

typedef void (*zend_frameless_function_0)(zval *return_value);
typedef void (*zend_frameless_function_1)(zval *return_value, zval *op1);
typedef void (*zend_frameless_function_2)(zval *return_value, zval *op1, zval *op2);
typedef void (*zend_frameless_function_3)(zval *return_value, zval *op1, zval *op2, zval *op3);

extern size_t zend_flf_count;
extern size_t zend_flf_capacity;
ZEND_API extern void **zend_flf_handlers;
ZEND_API extern zend_function **zend_flf_functions;

typedef struct {
	void *handler;
	uint32_t num_args;
} zend_frameless_function_info;

typedef enum {
	ZEND_JMP_FL_UNPRIMED = 0,
	ZEND_JMP_FL_MISS = 1,
	ZEND_JMP_FL_HIT = 2,
} zend_jmp_fl_result;

END_EXTERN_C()

#endif
Zend/zend_call_stack.h000064400000006106151730543160010745 0ustar00/*
   +----------------------------------------------------------------------+
   | Zend Engine                                                          |
   +----------------------------------------------------------------------+
   | Copyright (c) Zend Technologies Ltd. (http://www.zend.com)           |
   +----------------------------------------------------------------------+
   | This source file is subject to version 2.00 of the Zend license,     |
   | that is bundled with this package in the file LICENSE, and is        |
   | available through the world-wide-web at the following url:           |
   | http://www.zend.com/license/2_00.txt.                                |
   | If you did not receive a copy of the Zend license and are unable to  |
   | obtain it through the world-wide-web, please send a note to          |
   | license@zend.com so we can mail you a copy immediately.              |
   +----------------------------------------------------------------------+
   | Authors: Arnaud Le Blanc <arnaud.lb@gmail.com>                       |
   +----------------------------------------------------------------------+
*/

#ifndef ZEND_CALL_STACK_H
#define ZEND_CALL_STACK_H

#include "zend.h"
#include "zend_portability.h"
#ifdef _MSC_VER
# include <intrin.h>
#endif
#ifdef __APPLE__
# include <pthread.h>
#endif

#ifdef _MSC_VER
#include <intrin.h>
#endif

#ifdef ZEND_CHECK_STACK_LIMIT

typedef struct _zend_call_stack {
	void *base; /* high address of the stack */
	size_t max_size;
} zend_call_stack;

ZEND_API void zend_call_stack_init(void);

ZEND_API bool zend_call_stack_get(zend_call_stack *stack);

/** Returns an approximation of the current stack position */
static zend_always_inline void *zend_call_stack_position(void) {
#ifdef _MSC_VER
	return _AddressOfReturnAddress();
#elif defined(PHP_HAVE_BUILTIN_FRAME_ADDRESS)
	return __builtin_frame_address(0);
#else
	void *a;
	void *pos = (void*)&a;
	return pos;
#endif
}

static zend_always_inline bool zend_call_stack_overflowed(void *stack_limit) {
	return (uintptr_t) zend_call_stack_position() <= (uintptr_t) stack_limit;
}

static inline void* zend_call_stack_limit(void *base, size_t size, size_t reserved_size)
{
	if (UNEXPECTED(size > (uintptr_t)base)) {
		return (void*)0;
	}

	base = (int8_t*)base - size;

	if (UNEXPECTED(UINTPTR_MAX - (uintptr_t)base < reserved_size)) {
		return (void*)UINTPTR_MAX;
	}

	return (int8_t*)base + reserved_size;
}

static inline size_t zend_call_stack_default_size(void)
{
#ifdef __linux__
	return 8 * 1024 * 1024;
#endif
#if defined(__FreeBSD__) || defined(__NetBSD__)
	return 4 * 1024 * 1024;
#endif
#if defined(__DragonFly__)
	return 2 * 1024 * 1024;
#endif
#ifdef __OpenBSD__
	return 512 * 1024;
#endif
#ifdef __APPLE__
	// https://developer.apple.com/library/archive/documentation/Cocoa/Conceptual/Multithreading/CreatingThreads/CreatingThreads.html
	if (pthread_main_np()) {
		return 8 * 1024 * 1024;
	}
	return 512 * 1024;
#endif
#ifdef __HAIKU__
	return 64 * 4096;
#endif
#ifdef __sun
	return 8 * 4096;
#endif

	return 2 * 1024 * 1024;
}

#endif /* ZEND_CHECK_STACK_LIMIT */
#endif /* ZEND_CALL_STACK_H */
Zend/zend_multiply.h000064400000024133151730543160010524 0ustar00/*
   +----------------------------------------------------------------------+
   | Zend Engine                                                          |
   +----------------------------------------------------------------------+
   | Copyright (c) Zend Technologies Ltd. (http://www.zend.com)           |
   +----------------------------------------------------------------------+
   | This source file is subject to version 2.00 of the Zend license,     |
   | that is bundled with this package in the file LICENSE, and is        |
   | available through the world-wide-web at the following url:           |
   | http://www.zend.com/license/2_00.txt.                                |
   | If you did not receive a copy of the Zend license and are unable to  |
   | obtain it through the world-wide-web, please send a note to          |
   | license@zend.com so we can mail you a copy immediately.              |
   +----------------------------------------------------------------------+
   | Authors: Sascha Schumann <sascha@schumann.cx>                        |
   |          Ard Biesheuvel <ard.biesheuvel@linaro.org>                  |
   +----------------------------------------------------------------------+
*/

#include "zend_portability.h"

#ifndef ZEND_MULTIPLY_H
#define ZEND_MULTIPLY_H

#if defined(PHP_HAVE_BUILTIN_SMULL_OVERFLOW) && SIZEOF_LONG == SIZEOF_ZEND_LONG

#define ZEND_SIGNED_MULTIPLY_LONG(a, b, lval, dval, usedval) do {	\
	long __tmpvar;		 											\
	if (((usedval) = __builtin_smull_overflow((a), (b), &__tmpvar))) {	\
		(dval) = (double) (a) * (double) (b);						\
	}																\
	else (lval) = __tmpvar;											\
} while (0)

#elif defined(PHP_HAVE_BUILTIN_SMULLL_OVERFLOW) && SIZEOF_LONG_LONG == SIZEOF_ZEND_LONG

#define ZEND_SIGNED_MULTIPLY_LONG(a, b, lval, dval, usedval) do {	\
	long long __tmpvar; 											\
	if (((usedval) = __builtin_smulll_overflow((a), (b), &__tmpvar))) {	\
		(dval) = (double) (a) * (double) (b);						\
	}																\
	else (lval) = __tmpvar;											\
} while (0)

#elif (defined(__i386__) || defined(__x86_64__)) && defined(__GNUC__)

#define ZEND_SIGNED_MULTIPLY_LONG(a, b, lval, dval, usedval) do {	\
	zend_long __tmpvar; 													\
	__asm__ ("imul %3,%0\n"											\
		"adc $0,%1" 												\
			: "=r"(__tmpvar),"=r"(usedval) 							\
			: "0"(a), "r"(b), "1"(0));								\
	if (usedval) (dval) = (double) (a) * (double) (b);				\
	else (lval) = __tmpvar;											\
} while (0)

#elif defined(__arm__) && defined(__GNUC__)

#define ZEND_SIGNED_MULTIPLY_LONG(a, b, lval, dval, usedval) do {	\
	zend_long __tmpvar; 													\
	__asm__("smull %0, %1, %2, %3\n"								\
		"sub %1, %1, %0, asr #31"									\
			: "=r"(__tmpvar), "=r"(usedval)							\
			: "r"(a), "r"(b));										\
	if (usedval) (dval) = (double) (a) * (double) (b);				\
	else (lval) = __tmpvar;											\
} while (0)

#elif defined(__aarch64__) && defined(__GNUC__)

#define ZEND_SIGNED_MULTIPLY_LONG(a, b, lval, dval, usedval) do {	\
	zend_long __tmpvar; 													\
	__asm__("mul %0, %2, %3\n"										\
		"smulh %1, %2, %3\n"										\
		"sub %1, %1, %0, asr #63\n"									\
			: "=&r"(__tmpvar), "=&r"(usedval)						\
			: "r"(a), "r"(b));										\
	if (usedval) (dval) = (double) (a) * (double) (b);				\
	else (lval) = __tmpvar;											\
} while (0)

#elif defined(ZEND_WIN32) && SIZEOF_LONG_LONG == SIZEOF_ZEND_LONG

#define ZEND_SIGNED_MULTIPLY_LONG(a, b, lval, dval, usedval) do {	\
	long long __tmpvar; 											\
	if (((usedval) = FAILED(LongLongMult((a), (b), &__tmpvar)))) {	\
		(dval) = (double) (a) * (double) (b);						\
	}																\
	else (lval) = __tmpvar;											\
} while (0)

#elif defined(ZEND_WIN32) && SIZEOF_LONG == SIZEOF_ZEND_LONG

#define ZEND_SIGNED_MULTIPLY_LONG(a, b, lval, dval, usedval) do {	\
	long __tmpvar; 													\
	if (((usedval) = FAILED(LongMult((a), (b), &__tmpvar)))) {		\
		(dval) = (double) (a) * (double) (b);						\
	}																\
	else (lval) = __tmpvar;											\
} while (0)

#elif defined(__powerpc64__) && defined(__GNUC__)

#define ZEND_SIGNED_MULTIPLY_LONG(a, b, lval, dval, usedval) do {	\
	long __low, __high;						\
	__asm__("mulld %0,%2,%3\n\t"					\
		"mulhd %1,%2,%3\n"					\
		: "=&r"(__low), "=&r"(__high)				\
		: "r"(a), "r"(b));					\
	if ((__low >> 63) != __high) {					\
		(dval) = (double) (a) * (double) (b);			\
		(usedval) = 1;						\
	} else {							\
		(lval) = __low;						\
		(usedval) = 0;						\
	}								\
} while (0)

#elif SIZEOF_ZEND_LONG == 4

#define ZEND_SIGNED_MULTIPLY_LONG(a, b, lval, dval, usedval) do {	\
	int64_t __result = (int64_t) (a) * (int64_t) (b);				\
	if (__result > ZEND_LONG_MAX || __result < ZEND_LONG_MIN) {		\
		(dval) = (double) __result;									\
		(usedval) = 1;												\
	} else {														\
		(lval) = (long) __result;									\
		(usedval) = 0;												\
	}																\
} while (0)

#else

#define ZEND_SIGNED_MULTIPLY_LONG(a, b, lval, dval, usedval) do {	\
	long   __lres  = (a) * (b);										\
	long double __dres  = (long double)(a) * (long double)(b);		\
	long double __delta = (long double) __lres - __dres;			\
	if ( ((usedval) = (( __dres + __delta ) != __dres))) {			\
		(dval) = __dres;											\
	} else {														\
		(lval) = __lres;											\
	}																\
} while (0)

#endif

#if defined(__GNUC__) && (defined(__native_client__) || defined(i386))

static zend_always_inline size_t zend_safe_address(size_t nmemb, size_t size, size_t offset, bool *overflow)
{
	size_t res = nmemb;
	size_t m_overflow = 0;

	if (ZEND_CONST_COND(offset == 0, 0)) {
		__asm__ ("mull %3\n\tadcl $0,%1"
	     : "=&a"(res), "=&d" (m_overflow)
	     : "%0"(res),
	       "rm"(size)
	     : "cc");
	} else {
		__asm__ ("mull %3\n\taddl %4,%0\n\tadcl $0,%1"
	     : "=&a"(res), "=&d" (m_overflow)
	     : "%0"(res),
	       "rm"(size),
	       "rm"(offset)
	     : "cc");
	}

	if (UNEXPECTED(m_overflow)) {
		*overflow = 1;
		return 0;
	}
	*overflow = 0;
	return res;
}

#elif defined(__GNUC__) && defined(__x86_64__)

static zend_always_inline size_t zend_safe_address(size_t nmemb, size_t size, size_t offset, bool *overflow)
{
	size_t res;
	zend_ulong m_overflow = 0;

#ifdef __ILP32__ /* x32 */
# define LP_SUFF "l"
#else /* amd64 */
# define LP_SUFF "q"
#endif

	if (ZEND_CONST_COND(offset == 0, 0)) {
		res = nmemb;
		__asm__ ("mul" LP_SUFF  " %3\n\t"
			"adc $0,%1"
			: "=&a"(res), "=&d" (m_overflow)
			: "%0"(res),
			  "rm"(size)
			: "cc");
	} else if (ZEND_CONST_COND(nmemb == 1, 0)) {
		res = size;
		__asm__ ("add %2, %0\n\t"
			"adc $0,%1"
			: "+r"(res), "+r" (m_overflow)
			: "rm"(offset)
			: "cc");
	} else {
		res = nmemb;
		__asm__ ("mul" LP_SUFF  " %3\n\t"
			"add %4,%0\n\t"
			"adc $0,%1"
			: "=&a"(res), "=&d" (m_overflow)
			: "%0"(res),
			  "rm"(size),
			  "rm"(offset)
			: "cc");
	}
#undef LP_SUFF
	if (UNEXPECTED(m_overflow)) {
		*overflow = 1;
		return 0;
	}
	*overflow = 0;
	return res;
}

#elif defined(__GNUC__) && defined(__arm__)

static zend_always_inline size_t zend_safe_address(size_t nmemb, size_t size, size_t offset, bool *overflow)
{
	size_t res;
	zend_ulong m_overflow;

	__asm__ ("umlal %0,%1,%2,%3"
		: "=r"(res), "=r"(m_overflow)
		: "r"(nmemb),
		  "r"(size),
		  "0"(offset),
		  "1"(0));

	if (UNEXPECTED(m_overflow)) {
		*overflow = 1;
		return 0;
	}
	*overflow = 0;
	return res;
}

#elif defined(__GNUC__) && defined(__aarch64__)

static zend_always_inline size_t zend_safe_address(size_t nmemb, size_t size, size_t offset, bool *overflow)
{
	size_t res;
	zend_ulong m_overflow;

	__asm__ ("mul %0,%2,%3\n\tumulh %1,%2,%3\n\tadds %0,%0,%4\n\tadc %1,%1,xzr"
		: "=&r"(res), "=&r"(m_overflow)
		: "r"(nmemb),
		  "r"(size),
		  "r"(offset)
		: "cc");

	if (UNEXPECTED(m_overflow)) {
		*overflow = 1;
		return 0;
	}
	*overflow = 0;
	return res;
}

#elif defined(__GNUC__) && defined(__powerpc64__)

static zend_always_inline size_t zend_safe_address(size_t nmemb, size_t size, size_t offset, bool *overflow)
{
        size_t res;
        unsigned long m_overflow;

        __asm__ ("mulld %0,%2,%3\n\t"
                 "mulhdu %1,%2,%3\n\t"
                 "addc %0,%0,%4\n\t"
                 "addze %1,%1\n"
             : "=&r"(res), "=&r"(m_overflow)
             : "r"(nmemb),
               "r"(size),
               "r"(offset)
             : "xer");

        if (UNEXPECTED(m_overflow)) {
                *overflow = 1;
                return 0;
        }
        *overflow = 0;
        return res;
}

#elif SIZEOF_SIZE_T == 4

static zend_always_inline size_t zend_safe_address(size_t nmemb, size_t size, size_t offset, bool *overflow)
{
	uint64_t res = (uint64_t) nmemb * (uint64_t) size + (uint64_t) offset;

	if (UNEXPECTED(res > UINT64_C(0xFFFFFFFF))) {
		*overflow = 1;
		return 0;
	}
	*overflow = 0;
	return (size_t) res;
}

#elif defined(_MSC_VER)

static zend_always_inline size_t zend_safe_address(size_t nmemb, size_t size, size_t offset, bool *overflow)
{
	size_t res;
	if (UNEXPECTED(FAILED(ULongLongMult(nmemb, size, &res)) || FAILED(ULongLongAdd(res, offset, &res)))) {
		*overflow = 1;
		return 0;
	}
	*overflow = 0;
	return res;
}

#else

static zend_always_inline size_t zend_safe_address(size_t nmemb, size_t size, size_t offset, bool *overflow)
{
	size_t res = nmemb * size + offset;
	double _d  = (double)nmemb * (double)size + (double)offset;
	double _delta = (double)res - _d;

	if (UNEXPECTED((_d + _delta ) != _d)) {
		*overflow = 1;
		return 0;
	}
	*overflow = 0;
	return res;
}
#endif

static zend_always_inline size_t zend_safe_address_guarded(size_t nmemb, size_t size, size_t offset)
{
	bool overflow;
	size_t ret = zend_safe_address(nmemb, size, offset, &overflow);

	if (UNEXPECTED(overflow)) {
		zend_error_noreturn(E_ERROR, "Possible integer overflow in memory allocation (%zu * %zu + %zu)", nmemb, size, offset);
		return 0;
	}
	return ret;
}

/* A bit more generic version of the same */
static zend_always_inline size_t zend_safe_addmult(size_t nmemb, size_t size, size_t offset, const char *message)
{
	bool overflow;
	size_t ret = zend_safe_address(nmemb, size, offset, &overflow);

	if (UNEXPECTED(overflow)) {
		zend_error_noreturn(E_ERROR, "Possible integer overflow in %s (%zu * %zu + %zu)", message, nmemb, size, offset);
		return 0;
	}
	return ret;
}

#endif /* ZEND_MULTIPLY_H */
Zend/zend_vm_def.h000064400001125522151730543170010113 0ustar00/*
   +----------------------------------------------------------------------+
   | Zend Engine                                                          |
   +----------------------------------------------------------------------+
   | Copyright (c) Zend Technologies Ltd. (http://www.zend.com)           |
   +----------------------------------------------------------------------+
   | This source file is subject to version 2.00 of the Zend license,     |
   | that is bundled with this package in the file LICENSE, and is        |
   | available through the world-wide-web at the following url:           |
   | http://www.zend.com/license/2_00.txt.                                |
   | If you did not receive a copy of the Zend license and are unable to  |
   | obtain it through the world-wide-web, please send a note to          |
   | license@zend.com so we can mail you a copy immediately.              |
   +----------------------------------------------------------------------+
   | Authors: Andi Gutmans <andi@php.net>                                 |
   |          Zeev Suraski <zeev@php.net>                                 |
   |          Dmitry Stogov <dmitry@php.net>                              |
   +----------------------------------------------------------------------+
*/

/* If you change this file, please regenerate the zend_vm_execute.h and
 * zend_vm_opcodes.h files by running:
 * php zend_vm_gen.php
 */

ZEND_VM_HELPER(zend_add_helper, ANY, ANY, zval *op_1, zval *op_2)
{
	USE_OPLINE

	SAVE_OPLINE();
	if (UNEXPECTED(Z_TYPE_INFO_P(op_1) == IS_UNDEF)) {
		op_1 = ZVAL_UNDEFINED_OP1();
	}
	if (UNEXPECTED(Z_TYPE_INFO_P(op_2) == IS_UNDEF)) {
		op_2 = ZVAL_UNDEFINED_OP2();
	}
	add_function(EX_VAR(opline->result.var), op_1, op_2);
	if (OP1_TYPE & (IS_TMP_VAR|IS_VAR)) {
		zval_ptr_dtor_nogc(op_1);
	}
	if (OP2_TYPE & (IS_TMP_VAR|IS_VAR)) {
		zval_ptr_dtor_nogc(op_2);
	}
	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

ZEND_VM_HOT_NOCONSTCONST_HANDLER(1, ZEND_ADD, CONST|TMPVARCV, CONST|TMPVARCV)
{
	USE_OPLINE
	zval *op1, *op2, *result;
	double d1, d2;

	op1 = GET_OP1_ZVAL_PTR_UNDEF(BP_VAR_R);
	op2 = GET_OP2_ZVAL_PTR_UNDEF(BP_VAR_R);
	if (ZEND_VM_SPEC && OP1_TYPE == IS_CONST && OP2_TYPE == IS_CONST) {
		/* pass */
	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
			result = EX_VAR(opline->result.var);
			fast_long_add_function(result, op1, op2);
			ZEND_VM_NEXT_OPCODE();
		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
			d1 = (double)Z_LVAL_P(op1);
			d2 = Z_DVAL_P(op2);
			ZEND_VM_C_GOTO(add_double);
		}
	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
			d1 = Z_DVAL_P(op1);
			d2 = Z_DVAL_P(op2);
ZEND_VM_C_LABEL(add_double):
			result = EX_VAR(opline->result.var);
			ZVAL_DOUBLE(result, d1 + d2);
			ZEND_VM_NEXT_OPCODE();
		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
			d1 = Z_DVAL_P(op1);
			d2 = (double)Z_LVAL_P(op2);
			ZEND_VM_C_GOTO(add_double);
		}
	}

	ZEND_VM_DISPATCH_TO_HELPER(zend_add_helper, op_1, op1, op_2, op2);
}

ZEND_VM_HELPER(zend_sub_helper, ANY, ANY, zval *op_1, zval *op_2)
{
	USE_OPLINE

	SAVE_OPLINE();
	if (UNEXPECTED(Z_TYPE_INFO_P(op_1) == IS_UNDEF)) {
		op_1 = ZVAL_UNDEFINED_OP1();
	}
	if (UNEXPECTED(Z_TYPE_INFO_P(op_2) == IS_UNDEF)) {
		op_2 = ZVAL_UNDEFINED_OP2();
	}
	sub_function(EX_VAR(opline->result.var), op_1, op_2);
	if (OP1_TYPE & (IS_TMP_VAR|IS_VAR)) {
		zval_ptr_dtor_nogc(op_1);
	}
	if (OP2_TYPE & (IS_TMP_VAR|IS_VAR)) {
		zval_ptr_dtor_nogc(op_2);
	}
	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

ZEND_VM_HOT_NOCONSTCONST_HANDLER(2, ZEND_SUB, CONST|TMPVARCV, CONST|TMPVARCV)
{
	USE_OPLINE
	zval *op1, *op2, *result;
	double d1, d2;

	op1 = GET_OP1_ZVAL_PTR_UNDEF(BP_VAR_R);
	op2 = GET_OP2_ZVAL_PTR_UNDEF(BP_VAR_R);
	if (ZEND_VM_SPEC && OP1_TYPE == IS_CONST && OP2_TYPE == IS_CONST) {
		/* pass */
	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
			result = EX_VAR(opline->result.var);
			fast_long_sub_function(result, op1, op2);
			ZEND_VM_NEXT_OPCODE();
		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
			d1 = (double)Z_LVAL_P(op1);
			d2 = Z_DVAL_P(op2);
			ZEND_VM_C_GOTO(sub_double);
		}
	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
			d1 = Z_DVAL_P(op1);
			d2 = Z_DVAL_P(op2);
ZEND_VM_C_LABEL(sub_double):
			result = EX_VAR(opline->result.var);
			ZVAL_DOUBLE(result, d1 - d2);
			ZEND_VM_NEXT_OPCODE();
		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
			d1 = Z_DVAL_P(op1);
			d2 = (double)Z_LVAL_P(op2);
			ZEND_VM_C_GOTO(sub_double);
		}
	}

	ZEND_VM_DISPATCH_TO_HELPER(zend_sub_helper, op_1, op1, op_2, op2);
}

ZEND_VM_HELPER(zend_mul_helper, ANY, ANY, zval *op_1, zval *op_2)
{
	USE_OPLINE

	SAVE_OPLINE();
	if (UNEXPECTED(Z_TYPE_INFO_P(op_1) == IS_UNDEF)) {
		op_1 = ZVAL_UNDEFINED_OP1();
	}
	if (UNEXPECTED(Z_TYPE_INFO_P(op_2) == IS_UNDEF)) {
		op_2 = ZVAL_UNDEFINED_OP2();
	}
	mul_function(EX_VAR(opline->result.var), op_1, op_2);
	if (OP1_TYPE & (IS_TMP_VAR|IS_VAR)) {
		zval_ptr_dtor_nogc(op_1);
	}
	if (OP2_TYPE & (IS_TMP_VAR|IS_VAR)) {
		zval_ptr_dtor_nogc(op_2);
	}
	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

ZEND_VM_COLD_CONSTCONST_HANDLER(3, ZEND_MUL, CONST|TMPVARCV, CONST|TMPVARCV, SPEC(COMMUTATIVE))
{
	USE_OPLINE
	zval *op1, *op2, *result;
	double d1, d2;

	op1 = GET_OP1_ZVAL_PTR_UNDEF(BP_VAR_R);
	op2 = GET_OP2_ZVAL_PTR_UNDEF(BP_VAR_R);
	if (ZEND_VM_SPEC && OP1_TYPE == IS_CONST && OP2_TYPE == IS_CONST) {
		/* pass */
	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
			zend_long overflow;

			result = EX_VAR(opline->result.var);
			ZEND_SIGNED_MULTIPLY_LONG(Z_LVAL_P(op1), Z_LVAL_P(op2), Z_LVAL_P(result), Z_DVAL_P(result), overflow);
			Z_TYPE_INFO_P(result) = overflow ? IS_DOUBLE : IS_LONG;
			ZEND_VM_NEXT_OPCODE();
		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
			d1 = (double)Z_LVAL_P(op1);
			d2 = Z_DVAL_P(op2);
			ZEND_VM_C_GOTO(mul_double);
		}
	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
			d1 = Z_DVAL_P(op1);
			d2 = Z_DVAL_P(op2);
ZEND_VM_C_LABEL(mul_double):
			result = EX_VAR(opline->result.var);
			ZVAL_DOUBLE(result, d1 * d2);
			ZEND_VM_NEXT_OPCODE();
		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
			d1 = Z_DVAL_P(op1);
			d2 = (double)Z_LVAL_P(op2);
			ZEND_VM_C_GOTO(mul_double);
		}
	}

	ZEND_VM_DISPATCH_TO_HELPER(zend_mul_helper, op_1, op1, op_2, op2);
}

ZEND_VM_COLD_CONSTCONST_HANDLER(4, ZEND_DIV, CONST|TMPVAR|CV, CONST|TMPVAR|CV)
{
	USE_OPLINE
	zval *op1, *op2;

	SAVE_OPLINE();
	op1 = GET_OP1_ZVAL_PTR(BP_VAR_R);
	op2 = GET_OP2_ZVAL_PTR(BP_VAR_R);
	div_function(EX_VAR(opline->result.var), op1, op2);
	FREE_OP1();
	FREE_OP2();
	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

ZEND_VM_COLD_HELPER(zend_mod_by_zero_helper, ANY, ANY)
{
	USE_OPLINE

	SAVE_OPLINE();
	zend_throw_exception_ex(zend_ce_division_by_zero_error, 0, "Modulo by zero");
	ZVAL_UNDEF(EX_VAR(opline->result.var));
	HANDLE_EXCEPTION();
}

ZEND_VM_HELPER(zend_mod_helper, ANY, ANY, zval *op_1, zval *op_2)
{
	USE_OPLINE

	SAVE_OPLINE();
	if (UNEXPECTED(Z_TYPE_INFO_P(op_1) == IS_UNDEF)) {
		op_1 = ZVAL_UNDEFINED_OP1();
	}
	if (UNEXPECTED(Z_TYPE_INFO_P(op_2) == IS_UNDEF)) {
		op_2 = ZVAL_UNDEFINED_OP2();
	}
	mod_function(EX_VAR(opline->result.var), op_1, op_2);
	if (OP1_TYPE & (IS_TMP_VAR|IS_VAR)) {
		zval_ptr_dtor_nogc(op_1);
	}
	if (OP2_TYPE & (IS_TMP_VAR|IS_VAR)) {
		zval_ptr_dtor_nogc(op_2);
	}
	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

ZEND_VM_COLD_CONSTCONST_HANDLER(5, ZEND_MOD, CONST|TMPVARCV, CONST|TMPVARCV)
{
	USE_OPLINE
	zval *op1, *op2, *result;

	op1 = GET_OP1_ZVAL_PTR_UNDEF(BP_VAR_R);
	op2 = GET_OP2_ZVAL_PTR_UNDEF(BP_VAR_R);
	if (ZEND_VM_SPEC && OP1_TYPE == IS_CONST && OP2_TYPE == IS_CONST) {
		/* pass */
	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
			result = EX_VAR(opline->result.var);
			if (UNEXPECTED(Z_LVAL_P(op2) == 0)) {
				ZEND_VM_DISPATCH_TO_HELPER(zend_mod_by_zero_helper);
			} else if (UNEXPECTED(Z_LVAL_P(op2) == -1)) {
				/* Prevent overflow error/crash if op1==ZEND_LONG_MIN */
				ZVAL_LONG(result, 0);
			} else {
				ZVAL_LONG(result, Z_LVAL_P(op1) % Z_LVAL_P(op2));
			}
			ZEND_VM_NEXT_OPCODE();
		}
	}

	ZEND_VM_DISPATCH_TO_HELPER(zend_mod_helper, op_1, op1, op_2, op2);
}

ZEND_VM_HELPER(zend_shift_left_helper, ANY, ANY, zval *op_1, zval *op_2)
{
	USE_OPLINE

	SAVE_OPLINE();
	if (UNEXPECTED(Z_TYPE_INFO_P(op_1) == IS_UNDEF)) {
		op_1 = ZVAL_UNDEFINED_OP1();
	}
	if (UNEXPECTED(Z_TYPE_INFO_P(op_2) == IS_UNDEF)) {
		op_2 = ZVAL_UNDEFINED_OP2();
	}
	shift_left_function(EX_VAR(opline->result.var), op_1, op_2);
	if (OP1_TYPE & (IS_TMP_VAR|IS_VAR)) {
		zval_ptr_dtor_nogc(op_1);
	}
	if (OP2_TYPE & (IS_TMP_VAR|IS_VAR)) {
		zval_ptr_dtor_nogc(op_2);
	}
	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

ZEND_VM_COLD_CONSTCONST_HANDLER(6, ZEND_SL, CONST|TMPVARCV, CONST|TMPVARCV)
{
	USE_OPLINE
	zval *op1, *op2;

	op1 = GET_OP1_ZVAL_PTR_UNDEF(BP_VAR_R);
	op2 = GET_OP2_ZVAL_PTR_UNDEF(BP_VAR_R);
	if (ZEND_VM_SPEC && OP1_TYPE == IS_CONST && OP2_TYPE == IS_CONST) {
		/* pass */
	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)
			&& EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)
			&& EXPECTED((zend_ulong)Z_LVAL_P(op2) < SIZEOF_ZEND_LONG * 8)) {
		/* Perform shift on unsigned numbers to get well-defined wrap behavior. */
		ZVAL_LONG(EX_VAR(opline->result.var),
			(zend_long) ((zend_ulong) Z_LVAL_P(op1) << Z_LVAL_P(op2)));
		ZEND_VM_NEXT_OPCODE();
	}

	ZEND_VM_DISPATCH_TO_HELPER(zend_shift_left_helper, op_1, op1, op_2, op2);
}

ZEND_VM_HELPER(zend_shift_right_helper, ANY, ANY, zval *op_1, zval *op_2)
{
	USE_OPLINE

	SAVE_OPLINE();
	if (UNEXPECTED(Z_TYPE_INFO_P(op_1) == IS_UNDEF)) {
		op_1 = ZVAL_UNDEFINED_OP1();
	}
	if (UNEXPECTED(Z_TYPE_INFO_P(op_2) == IS_UNDEF)) {
		op_2 = ZVAL_UNDEFINED_OP2();
	}
	shift_right_function(EX_VAR(opline->result.var), op_1, op_2);
	if (OP1_TYPE & (IS_TMP_VAR|IS_VAR)) {
		zval_ptr_dtor_nogc(op_1);
	}
	if (OP2_TYPE & (IS_TMP_VAR|IS_VAR)) {
		zval_ptr_dtor_nogc(op_2);
	}
	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

ZEND_VM_COLD_CONSTCONST_HANDLER(7, ZEND_SR, CONST|TMPVARCV, CONST|TMPVARCV)
{
	USE_OPLINE
	zval *op1, *op2;

	op1 = GET_OP1_ZVAL_PTR_UNDEF(BP_VAR_R);
	op2 = GET_OP2_ZVAL_PTR_UNDEF(BP_VAR_R);
	if (ZEND_VM_SPEC && OP1_TYPE == IS_CONST && OP2_TYPE == IS_CONST) {
		/* pass */
	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)
			&& EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)
			&& EXPECTED((zend_ulong)Z_LVAL_P(op2) < SIZEOF_ZEND_LONG * 8)) {
		ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(op1) >> Z_LVAL_P(op2));
		ZEND_VM_NEXT_OPCODE();
	}

	ZEND_VM_DISPATCH_TO_HELPER(zend_shift_right_helper, op_1, op1, op_2, op2);
}

ZEND_VM_COLD_CONSTCONST_HANDLER(12, ZEND_POW, CONST|TMPVAR|CV, CONST|TMPVAR|CV)
{
	USE_OPLINE
	zval *op1, *op2;

	SAVE_OPLINE();
	op1 = GET_OP1_ZVAL_PTR(BP_VAR_R);
	op2 = GET_OP2_ZVAL_PTR(BP_VAR_R);
	pow_function(EX_VAR(opline->result.var), op1, op2);
	FREE_OP1();
	FREE_OP2();
	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

ZEND_VM_HANDLER(8, ZEND_CONCAT, CONST|TMPVAR|CV, CONST|TMPVAR|CV, SPEC(NO_CONST_CONST))
{
	USE_OPLINE
	zval *op1, *op2;

	op1 = GET_OP1_ZVAL_PTR_UNDEF(BP_VAR_R);
	op2 = GET_OP2_ZVAL_PTR_UNDEF(BP_VAR_R);

	if ((OP1_TYPE == IS_CONST || EXPECTED(Z_TYPE_P(op1) == IS_STRING)) &&
	    (OP2_TYPE == IS_CONST || EXPECTED(Z_TYPE_P(op2) == IS_STRING))) {
		zend_string *op1_str = Z_STR_P(op1);
		zend_string *op2_str = Z_STR_P(op2);
		zend_string *str;
		uint32_t flags = ZSTR_GET_COPYABLE_CONCAT_PROPERTIES_BOTH(op1_str, op2_str);

		if (OP1_TYPE != IS_CONST && UNEXPECTED(ZSTR_LEN(op1_str) == 0)) {
			if (OP2_TYPE == IS_CONST || OP2_TYPE == IS_CV) {
				ZVAL_STR_COPY(EX_VAR(opline->result.var), op2_str);
			} else {
				ZVAL_STR(EX_VAR(opline->result.var), op2_str);
			}
			if (OP1_TYPE & (IS_TMP_VAR|IS_VAR)) {
				zend_string_release_ex(op1_str, 0);
			}
		} else if (OP2_TYPE != IS_CONST && UNEXPECTED(ZSTR_LEN(op2_str) == 0)) {
			if (OP1_TYPE == IS_CONST || OP1_TYPE == IS_CV) {
				ZVAL_STR_COPY(EX_VAR(opline->result.var), op1_str);
			} else {
				ZVAL_STR(EX_VAR(opline->result.var), op1_str);
			}
			if (OP2_TYPE & (IS_TMP_VAR|IS_VAR)) {
				zend_string_release_ex(op2_str, 0);
			}
		} else if (OP1_TYPE != IS_CONST && OP1_TYPE != IS_CV &&
		    !ZSTR_IS_INTERNED(op1_str) && GC_REFCOUNT(op1_str) == 1) {
			size_t len = ZSTR_LEN(op1_str);

			if (UNEXPECTED(len > ZSTR_MAX_LEN - ZSTR_LEN(op2_str))) {
				zend_error_noreturn(E_ERROR, "Integer overflow in memory allocation");
			}
			str = zend_string_extend(op1_str, len + ZSTR_LEN(op2_str), 0);
			memcpy(ZSTR_VAL(str) + len, ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
			GC_ADD_FLAGS(str, flags);
			ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
			if (OP2_TYPE & (IS_TMP_VAR|IS_VAR)) {
				zend_string_release_ex(op2_str, 0);
			}
		} else {
			str = zend_string_alloc(ZSTR_LEN(op1_str) + ZSTR_LEN(op2_str), 0);
			memcpy(ZSTR_VAL(str), ZSTR_VAL(op1_str), ZSTR_LEN(op1_str));
			memcpy(ZSTR_VAL(str) + ZSTR_LEN(op1_str), ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
			GC_ADD_FLAGS(str, flags);
			ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
			if (OP1_TYPE & (IS_TMP_VAR|IS_VAR)) {
				zend_string_release_ex(op1_str, 0);
			}
			if (OP2_TYPE & (IS_TMP_VAR|IS_VAR)) {
				zend_string_release_ex(op2_str, 0);
			}
		}
		ZEND_VM_NEXT_OPCODE();
	} else {
		SAVE_OPLINE();

		if (OP1_TYPE == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
			op1 = ZVAL_UNDEFINED_OP1();
		}
		if (OP2_TYPE == IS_CV && UNEXPECTED(Z_TYPE_P(op2) == IS_UNDEF)) {
			op2 = ZVAL_UNDEFINED_OP2();
		}
		concat_function(EX_VAR(opline->result.var), op1, op2);
		FREE_OP1();
		FREE_OP2();
		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
	}
}

ZEND_VM_COLD_CONSTCONST_HANDLER(16, ZEND_IS_IDENTICAL, CONST|TMP|VAR|CV, CONST|TMP|VAR|CV, SPEC(COMMUTATIVE))
{
	USE_OPLINE
	zval *op1, *op2;
	bool result;

	SAVE_OPLINE();
	op1 = GET_OP1_ZVAL_PTR_DEREF(BP_VAR_R);
	op2 = GET_OP2_ZVAL_PTR_DEREF(BP_VAR_R);
	result = fast_is_identical_function(op1, op2);
	FREE_OP1();
	FREE_OP2();
	ZEND_VM_SMART_BRANCH(result, 1);
}

ZEND_VM_HANDLER(196, ZEND_CASE_STRICT, TMP|VAR, CONST|TMP|VAR|CV)
{
	USE_OPLINE
	zval *op1, *op2;
	bool result;

	SAVE_OPLINE();
	op1 = GET_OP1_ZVAL_PTR_DEREF(BP_VAR_R);
	op2 = GET_OP2_ZVAL_PTR_DEREF(BP_VAR_R);
	result = fast_is_identical_function(op1, op2);
	FREE_OP2();
	ZEND_VM_SMART_BRANCH(result, 1);
}

ZEND_VM_COLD_CONSTCONST_HANDLER(17, ZEND_IS_NOT_IDENTICAL, CONST|TMP|VAR|CV, CONST|TMP|VAR|CV, SPEC(COMMUTATIVE))
{
	USE_OPLINE
	zval *op1, *op2;
	bool result;

	SAVE_OPLINE();
	op1 = GET_OP1_ZVAL_PTR_DEREF(BP_VAR_R);
	op2 = GET_OP2_ZVAL_PTR_DEREF(BP_VAR_R);
	result = fast_is_not_identical_function(op1, op2);
	FREE_OP1();
	FREE_OP2();
	ZEND_VM_SMART_BRANCH(result, 1);
}

ZEND_VM_HELPER(zend_is_equal_helper, ANY, ANY, zval *op_1, zval *op_2)
{
	int ret;
	USE_OPLINE

	SAVE_OPLINE();
	if (UNEXPECTED(Z_TYPE_INFO_P(op_1) == IS_UNDEF)) {
		op_1 = ZVAL_UNDEFINED_OP1();
	}
	if (UNEXPECTED(Z_TYPE_INFO_P(op_2) == IS_UNDEF)) {
		op_2 = ZVAL_UNDEFINED_OP2();
	}
	ret = zend_compare(op_1, op_2);
	if (OP1_TYPE & (IS_TMP_VAR|IS_VAR)) {
		zval_ptr_dtor_nogc(op_1);
	}
	if (OP2_TYPE & (IS_TMP_VAR|IS_VAR)) {
		zval_ptr_dtor_nogc(op_2);
	}
	ZEND_VM_SMART_BRANCH(ret == 0, 1);
}

ZEND_VM_COLD_CONSTCONST_HANDLER(18, ZEND_IS_EQUAL, CONST|TMPVAR|CV, CONST|TMPVAR|CV, SPEC(SMART_BRANCH,COMMUTATIVE))
{
	USE_OPLINE
	zval *op1, *op2;
	double d1, d2;

	op1 = GET_OP1_ZVAL_PTR_UNDEF(BP_VAR_R);
	op2 = GET_OP2_ZVAL_PTR_UNDEF(BP_VAR_R);
	if (ZEND_VM_SPEC && OP1_TYPE == IS_CONST && OP2_TYPE == IS_CONST) {
		/* pass */
	} else if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
		if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
			if (EXPECTED(Z_LVAL_P(op1) == Z_LVAL_P(op2))) {
ZEND_VM_C_LABEL(is_equal_true):
				ZEND_VM_SMART_BRANCH_TRUE();
			} else {
ZEND_VM_C_LABEL(is_equal_false):
				ZEND_VM_SMART_BRANCH_FALSE();
			}
		} else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
			d1 = (double)Z_LVAL_P(op1);
			d2 = Z_DVAL_P(op2);
			ZEND_VM_C_GOTO(is_equal_double);
		}
	} else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) {
		if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
			d1 = Z_DVAL_P(op1);
			d2 = Z_DVAL_P(op2);
ZEND_VM_C_LABEL(is_equal_double):
			if (d1 == d2) {
				ZEND_VM_C_GOTO(is_equal_true);
			} else {
				ZEND_VM_C_GOTO(is_equal_false);
			}
		} else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
			d1 = Z_DVAL_P(op1);
			d2 = (double)Z_LVAL_P(op2);
			ZEND_VM_C_GOTO(is_equal_double);
		}
	} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
		if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
			bool result = zend_fast_equal_strings(Z_STR_P(op1), Z_STR_P(op2));
			if (OP1_TYPE & (IS_TMP_VAR|IS_VAR)) {
				zval_ptr_dtor_str(op1);
			}
			if (OP2_TYPE & (IS_TMP_VAR|IS_VAR)) {
				zval_ptr_dtor_str(op2);
			}
			if (result) {
				ZEND_VM_C_GOTO(is_equal_true);
			} else {
				ZEND_VM_C_GOTO(is_equal_false);
			}
		}
	}
	ZEND_VM_DISPATCH_TO_HELPER(zend_is_equal_helper, op_1, op1, op_2, op2);
}

ZEND_VM_HELPER(zend_is_not_equal_helper, ANY, ANY, zval *op_1, zval *op_2)
{
	int ret;
	USE_OPLINE

	SAVE_OPLINE();
	if (UNEXPECTED(Z_TYPE_INFO_P(op_1) == IS_UNDEF)) {
		op_1 = ZVAL_UNDEFINED_OP1();
	}
	if (UNEXPECTED(Z_TYPE_INFO_P(op_2) == IS_UNDEF)) {
		op_2 = ZVAL_UNDEFINED_OP2();
	}
	ret = zend_compare(op_1, op_2);
	if (OP1_TYPE & (IS_TMP_VAR|IS_VAR)) {
		zval_ptr_dtor_nogc(op_1);
	}
	if (OP2_TYPE & (IS_TMP_VAR|IS_VAR)) {
		zval_ptr_dtor_nogc(op_2);
	}
	ZEND_VM_SMART_BRANCH(ret != 0, 1);
}

ZEND_VM_COLD_CONSTCONST_HANDLER(19, ZEND_IS_NOT_EQUAL, CONST|TMPVAR|CV, CONST|TMPVAR|CV, SPEC(SMART_BRANCH,COMMUTATIVE))
{
	USE_OPLINE
	zval *op1, *op2;
	double d1, d2;

	op1 = GET_OP1_ZVAL_PTR_UNDEF(BP_VAR_R);
	op2 = GET_OP2_ZVAL_PTR_UNDEF(BP_VAR_R);
	if (ZEND_VM_SPEC && OP1_TYPE == IS_CONST && OP2_TYPE == IS_CONST) {
		/* pass */
	} else if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
		if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
			if (EXPECTED(Z_LVAL_P(op1) != Z_LVAL_P(op2))) {
ZEND_VM_C_LABEL(is_not_equal_true):
				ZEND_VM_SMART_BRANCH_TRUE();
			} else {
ZEND_VM_C_LABEL(is_not_equal_false):
				ZEND_VM_SMART_BRANCH_FALSE();
			}
		} else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
			d1 = (double)Z_LVAL_P(op1);
			d2 = Z_DVAL_P(op2);
			ZEND_VM_C_GOTO(is_not_equal_double);
		}
	} else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) {
		if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
			d1 = Z_DVAL_P(op1);
			d2 = Z_DVAL_P(op2);
ZEND_VM_C_LABEL(is_not_equal_double):
			if (d1 != d2) {
				ZEND_VM_C_GOTO(is_not_equal_true);
			} else {
				ZEND_VM_C_GOTO(is_not_equal_false);
			}
		} else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
			d1 = Z_DVAL_P(op1);
			d2 = (double)Z_LVAL_P(op2);
			ZEND_VM_C_GOTO(is_not_equal_double);
		}
	} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
		if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
			bool result = zend_fast_equal_strings(Z_STR_P(op1), Z_STR_P(op2));
			if (OP1_TYPE & (IS_TMP_VAR|IS_VAR)) {
				zval_ptr_dtor_str(op1);
			}
			if (OP2_TYPE & (IS_TMP_VAR|IS_VAR)) {
				zval_ptr_dtor_str(op2);
			}
			if (!result) {
				ZEND_VM_C_GOTO(is_not_equal_true);
			} else {
				ZEND_VM_C_GOTO(is_not_equal_false);
			}
		}
	}
	ZEND_VM_DISPATCH_TO_HELPER(zend_is_not_equal_helper, op_1, op1, op_2, op2);
}

ZEND_VM_HELPER(zend_is_smaller_helper, ANY, ANY, zval *op_1, zval *op_2)
{
	int ret;
	USE_OPLINE

	SAVE_OPLINE();
	if (UNEXPECTED(Z_TYPE_INFO_P(op_1) == IS_UNDEF)) {
		op_1 = ZVAL_UNDEFINED_OP1();
	}
	if (UNEXPECTED(Z_TYPE_INFO_P(op_2) == IS_UNDEF)) {
		op_2 = ZVAL_UNDEFINED_OP2();
	}
	ret = zend_compare(op_1, op_2);
	if (OP1_TYPE & (IS_TMP_VAR|IS_VAR)) {
		zval_ptr_dtor_nogc(op_1);
	}
	if (OP2_TYPE & (IS_TMP_VAR|IS_VAR)) {
		zval_ptr_dtor_nogc(op_2);
	}
	ZEND_VM_SMART_BRANCH(ret < 0, 1);
}

ZEND_VM_HOT_NOCONSTCONST_HANDLER(20, ZEND_IS_SMALLER, CONST|TMPVARCV, CONST|TMPVARCV, SPEC(SMART_BRANCH))
{
	USE_OPLINE
	zval *op1, *op2;
	double d1, d2;

	op1 = GET_OP1_ZVAL_PTR_UNDEF(BP_VAR_R);
	op2 = GET_OP2_ZVAL_PTR_UNDEF(BP_VAR_R);
	if (ZEND_VM_SPEC && OP1_TYPE == IS_CONST && OP2_TYPE == IS_CONST) {
		/* pass */
	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
			if (EXPECTED(Z_LVAL_P(op1) < Z_LVAL_P(op2))) {
ZEND_VM_C_LABEL(is_smaller_true):
				ZEND_VM_SMART_BRANCH_TRUE();
			} else {
ZEND_VM_C_LABEL(is_smaller_false):
				ZEND_VM_SMART_BRANCH_FALSE();
			}
		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
			d1 = (double)Z_LVAL_P(op1);
			d2 = Z_DVAL_P(op2);
			ZEND_VM_C_GOTO(is_smaller_double);
		}
	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
			d1 = Z_DVAL_P(op1);
			d2 = Z_DVAL_P(op2);
ZEND_VM_C_LABEL(is_smaller_double):
			if (d1 < d2) {
				ZEND_VM_C_GOTO(is_smaller_true);
			} else {
				ZEND_VM_C_GOTO(is_smaller_false);
			}
		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
			d1 = Z_DVAL_P(op1);
			d2 = (double)Z_LVAL_P(op2);
			ZEND_VM_C_GOTO(is_smaller_double);
		}
	}
	ZEND_VM_DISPATCH_TO_HELPER(zend_is_smaller_helper, op_1, op1, op_2, op2);
}

ZEND_VM_HELPER(zend_is_smaller_or_equal_helper, ANY, ANY, zval *op_1, zval *op_2)
{
	int ret;
	USE_OPLINE

	SAVE_OPLINE();
	if (UNEXPECTED(Z_TYPE_INFO_P(op_1) == IS_UNDEF)) {
		op_1 = ZVAL_UNDEFINED_OP1();
	}
	if (UNEXPECTED(Z_TYPE_INFO_P(op_2) == IS_UNDEF)) {
		op_2 = ZVAL_UNDEFINED_OP2();
	}
	ret = zend_compare(op_1, op_2);
	if (OP1_TYPE & (IS_TMP_VAR|IS_VAR)) {
		zval_ptr_dtor_nogc(op_1);
	}
	if (OP2_TYPE & (IS_TMP_VAR|IS_VAR)) {
		zval_ptr_dtor_nogc(op_2);
	}
	ZEND_VM_SMART_BRANCH(ret <= 0, 1);
}

ZEND_VM_HOT_NOCONSTCONST_HANDLER(21, ZEND_IS_SMALLER_OR_EQUAL, CONST|TMPVARCV, CONST|TMPVARCV, SPEC(SMART_BRANCH))
{
	USE_OPLINE
	zval *op1, *op2;
	double d1, d2;

	op1 = GET_OP1_ZVAL_PTR_UNDEF(BP_VAR_R);
	op2 = GET_OP2_ZVAL_PTR_UNDEF(BP_VAR_R);
	if (ZEND_VM_SPEC && OP1_TYPE == IS_CONST && OP2_TYPE == IS_CONST) {
		/* pass */
	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
			if (EXPECTED(Z_LVAL_P(op1) <= Z_LVAL_P(op2))) {
ZEND_VM_C_LABEL(is_smaller_or_equal_true):
				ZEND_VM_SMART_BRANCH_TRUE();
				ZVAL_TRUE(EX_VAR(opline->result.var));
				ZEND_VM_NEXT_OPCODE();
			} else {
ZEND_VM_C_LABEL(is_smaller_or_equal_false):
				ZEND_VM_SMART_BRANCH_FALSE();
				ZVAL_FALSE(EX_VAR(opline->result.var));
				ZEND_VM_NEXT_OPCODE();
			}
		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
			d1 = (double)Z_LVAL_P(op1);
			d2 = Z_DVAL_P(op2);
			ZEND_VM_C_GOTO(is_smaller_or_equal_double);
		}
	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
			d1 = Z_DVAL_P(op1);
			d2 = Z_DVAL_P(op2);
ZEND_VM_C_LABEL(is_smaller_or_equal_double):
			if (d1 <= d2) {
				ZEND_VM_C_GOTO(is_smaller_or_equal_true);
			} else {
				ZEND_VM_C_GOTO(is_smaller_or_equal_false);
			}
		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
			d1 = Z_DVAL_P(op1);
			d2 = (double)Z_LVAL_P(op2);
			ZEND_VM_C_GOTO(is_smaller_or_equal_double);
		}
	}
	ZEND_VM_DISPATCH_TO_HELPER(zend_is_smaller_or_equal_helper, op_1, op1, op_2, op2);
}

ZEND_VM_COLD_CONSTCONST_HANDLER(170, ZEND_SPACESHIP, CONST|TMPVAR|CV, CONST|TMPVAR|CV)
{
	USE_OPLINE
	zval *op1, *op2;

	SAVE_OPLINE();
	op1 = GET_OP1_ZVAL_PTR(BP_VAR_R);
	op2 = GET_OP2_ZVAL_PTR(BP_VAR_R);
	compare_function(EX_VAR(opline->result.var), op1, op2);
	FREE_OP1();
	FREE_OP2();
	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

ZEND_VM_HELPER(zend_bw_or_helper, ANY, ANY, zval *op_1, zval *op_2)
{
	USE_OPLINE

	SAVE_OPLINE();
	if (UNEXPECTED(Z_TYPE_INFO_P(op_1) == IS_UNDEF)) {
		op_1 = ZVAL_UNDEFINED_OP1();
	}
	if (UNEXPECTED(Z_TYPE_INFO_P(op_2) == IS_UNDEF)) {
		op_2 = ZVAL_UNDEFINED_OP2();
	}
	bitwise_or_function(EX_VAR(opline->result.var), op_1, op_2);
	if (OP1_TYPE & (IS_TMP_VAR|IS_VAR)) {
		zval_ptr_dtor_nogc(op_1);
	}
	if (OP2_TYPE & (IS_TMP_VAR|IS_VAR)) {
		zval_ptr_dtor_nogc(op_2);
	}
	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

ZEND_VM_HOT_NOCONSTCONST_HANDLER(9, ZEND_BW_OR, CONST|TMPVARCV, CONST|TMPVARCV, SPEC(COMMUTATIVE))
{
	USE_OPLINE
	zval *op1, *op2;

	op1 = GET_OP1_ZVAL_PTR_UNDEF(BP_VAR_R);
	op2 = GET_OP2_ZVAL_PTR_UNDEF(BP_VAR_R);
	if (ZEND_VM_SPEC && OP1_TYPE == IS_CONST && OP2_TYPE == IS_CONST) {
		/* pass */
	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)
			&& EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
		ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(op1) | Z_LVAL_P(op2));
		ZEND_VM_NEXT_OPCODE();
	}

	ZEND_VM_DISPATCH_TO_HELPER(zend_bw_or_helper, op_1, op1, op_2, op2);
}

ZEND_VM_HELPER(zend_bw_and_helper, ANY, ANY, zval *op_1, zval *op_2)
{
	USE_OPLINE

	SAVE_OPLINE();
	if (UNEXPECTED(Z_TYPE_INFO_P(op_1) == IS_UNDEF)) {
		op_1 = ZVAL_UNDEFINED_OP1();
	}
	if (UNEXPECTED(Z_TYPE_INFO_P(op_2) == IS_UNDEF)) {
		op_2 = ZVAL_UNDEFINED_OP2();
	}
	bitwise_and_function(EX_VAR(opline->result.var), op_1, op_2);
	if (OP1_TYPE & (IS_TMP_VAR|IS_VAR)) {
		zval_ptr_dtor_nogc(op_1);
	}
	if (OP2_TYPE & (IS_TMP_VAR|IS_VAR)) {
		zval_ptr_dtor_nogc(op_2);
	}
	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

ZEND_VM_HOT_NOCONSTCONST_HANDLER(10, ZEND_BW_AND, CONST|TMPVARCV, CONST|TMPVARCV, SPEC(COMMUTATIVE))
{
	USE_OPLINE
	zval *op1, *op2;

	op1 = GET_OP1_ZVAL_PTR_UNDEF(BP_VAR_R);
	op2 = GET_OP2_ZVAL_PTR_UNDEF(BP_VAR_R);
	if (ZEND_VM_SPEC && OP1_TYPE == IS_CONST && OP2_TYPE == IS_CONST) {
		/* pass */
	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)
			&& EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
		ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(op1) & Z_LVAL_P(op2));
		ZEND_VM_NEXT_OPCODE();
	}

	ZEND_VM_DISPATCH_TO_HELPER(zend_bw_and_helper, op_1, op1, op_2, op2);
}

ZEND_VM_HELPER(zend_bw_xor_helper, ANY, ANY, zval *op_1, zval *op_2)
{
	USE_OPLINE

	SAVE_OPLINE();
	if (UNEXPECTED(Z_TYPE_INFO_P(op_1) == IS_UNDEF)) {
		op_1 = ZVAL_UNDEFINED_OP1();
	}
	if (UNEXPECTED(Z_TYPE_INFO_P(op_2) == IS_UNDEF)) {
		op_2 = ZVAL_UNDEFINED_OP2();
	}
	bitwise_xor_function(EX_VAR(opline->result.var), op_1, op_2);
	if (OP1_TYPE & (IS_TMP_VAR|IS_VAR)) {
		zval_ptr_dtor_nogc(op_1);
	}
	if (OP2_TYPE & (IS_TMP_VAR|IS_VAR)) {
		zval_ptr_dtor_nogc(op_2);
	}
	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

ZEND_VM_HOT_NOCONSTCONST_HANDLER(11, ZEND_BW_XOR, CONST|TMPVARCV, CONST|TMPVARCV, SPEC(COMMUTATIVE))
{
	USE_OPLINE
	zval *op1, *op2;

	op1 = GET_OP1_ZVAL_PTR_UNDEF(BP_VAR_R);
	op2 = GET_OP2_ZVAL_PTR_UNDEF(BP_VAR_R);
	if (ZEND_VM_SPEC && OP1_TYPE == IS_CONST && OP2_TYPE == IS_CONST) {
		/* pass */
	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)
			&& EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
		ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(op1) ^ Z_LVAL_P(op2));
		ZEND_VM_NEXT_OPCODE();
	}

	ZEND_VM_DISPATCH_TO_HELPER(zend_bw_xor_helper, op_1, op1, op_2, op2);
}

ZEND_VM_COLD_CONSTCONST_HANDLER(15, ZEND_BOOL_XOR, CONST|TMPVAR|CV, CONST|TMPVAR|CV, SPEC(COMMUTATIVE))
{
	USE_OPLINE
	zval *op1, *op2;

	SAVE_OPLINE();
	op1 = GET_OP1_ZVAL_PTR(BP_VAR_R);
	op2 = GET_OP2_ZVAL_PTR(BP_VAR_R);
	boolean_xor_function(EX_VAR(opline->result.var), op1, op2);
	FREE_OP1();
	FREE_OP2();
	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

ZEND_VM_HELPER(zend_bw_not_helper, ANY, ANY, zval *op_1)
{
	USE_OPLINE

	SAVE_OPLINE();
	if (UNEXPECTED(Z_TYPE_P(op_1) == IS_UNDEF)) {
		op_1 = ZVAL_UNDEFINED_OP1();
	}
	bitwise_not_function(EX_VAR(opline->result.var), op_1);
	FREE_OP1();
	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

ZEND_VM_HOT_NOCONST_HANDLER(13, ZEND_BW_NOT, CONST|TMPVARCV, ANY)
{
	USE_OPLINE
	zval *op1;

	op1 = GET_OP1_ZVAL_PTR_UNDEF(BP_VAR_R);
	if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
		ZVAL_LONG(EX_VAR(opline->result.var), ~Z_LVAL_P(op1));
		ZEND_VM_NEXT_OPCODE();
	}

	ZEND_VM_DISPATCH_TO_HELPER(zend_bw_not_helper, op_1, op1);
}

ZEND_VM_COLD_CONST_HANDLER(14, ZEND_BOOL_NOT, CONST|TMPVAR|CV, ANY)
{
	USE_OPLINE
	zval *val;

	val = GET_OP1_ZVAL_PTR_UNDEF(BP_VAR_R);
	if (Z_TYPE_INFO_P(val) == IS_TRUE) {
		ZVAL_FALSE(EX_VAR(opline->result.var));
	} else if (EXPECTED(Z_TYPE_INFO_P(val) <= IS_TRUE)) {
		/* The result and op1 can be the same cv zval */
		const uint32_t orig_val_type = Z_TYPE_INFO_P(val);
		ZVAL_TRUE(EX_VAR(opline->result.var));
		if (OP1_TYPE == IS_CV && UNEXPECTED(orig_val_type == IS_UNDEF)) {
			SAVE_OPLINE();
			ZVAL_UNDEFINED_OP1();
			ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
		}
	} else {
		SAVE_OPLINE();
		ZVAL_BOOL(EX_VAR(opline->result.var), !i_zend_is_true(val));
		FREE_OP1();
		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
	}
	ZEND_VM_NEXT_OPCODE();
}

ZEND_VM_COLD_HELPER(zend_this_not_in_object_context_helper, ANY, ANY)
{
	USE_OPLINE

	SAVE_OPLINE();
	zend_throw_error(NULL, "Using $this when not in object context");
	UNDEF_RESULT();
	HANDLE_EXCEPTION();
}

ZEND_VM_COLD_HELPER(zend_undefined_function_helper, ANY, ANY)
{
	USE_OPLINE
	zval *function_name;

	SAVE_OPLINE();
	function_name = RT_CONSTANT(opline, opline->op2);
	zend_throw_error(NULL, "Call to undefined function %s()", Z_STRVAL_P(function_name));
	HANDLE_EXCEPTION();
}

ZEND_VM_HANDLER(28, ZEND_ASSIGN_OBJ_OP, VAR|UNUSED|THIS|CV, CONST|TMPVAR|CV, OP)
{
	USE_OPLINE
	zval *object;
	zval *property;
	zval *value;
	zval *zptr;
	void *_cache_slot[3] = {0};
	void **cache_slot;
	zend_property_info *prop_info;
	zend_object *zobj;
	zend_string *name, *tmp_name;

	SAVE_OPLINE();
	object = GET_OP1_OBJ_ZVAL_PTR_PTR_UNDEF(BP_VAR_RW);
	property = GET_OP2_ZVAL_PTR(BP_VAR_R);

	do {
		value = GET_OP_DATA_ZVAL_PTR(BP_VAR_R);

		if (OP1_TYPE != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
			if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
				object = Z_REFVAL_P(object);
				ZEND_VM_C_GOTO(assign_op_object);
			}
			if (OP1_TYPE == IS_CV
			 && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
				ZVAL_UNDEFINED_OP1();
			}
			zend_throw_non_object_error(object, property OPLINE_CC EXECUTE_DATA_CC);
			break;
		}

ZEND_VM_C_LABEL(assign_op_object):
		/* here we are sure we are dealing with an object */
		zobj = Z_OBJ_P(object);
		if (OP2_TYPE == IS_CONST) {
			name = Z_STR_P(property);
		} else {
			name = zval_try_get_tmp_string(property, &tmp_name);
			if (UNEXPECTED(!name)) {
				UNDEF_RESULT();
				break;
			}
		}
		cache_slot = (OP2_TYPE == IS_CONST) ? CACHE_ADDR((opline+1)->extended_value) : _cache_slot;
		if (EXPECTED((zptr = zobj->handlers->get_property_ptr_ptr(zobj, name, BP_VAR_RW, cache_slot)) != NULL)) {
			if (UNEXPECTED(Z_ISERROR_P(zptr))) {
				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
					ZVAL_NULL(EX_VAR(opline->result.var));
				}
			} else {
				zend_reference *ref;

				do {
					if (UNEXPECTED(Z_ISREF_P(zptr))) {
						ref = Z_REF_P(zptr);
						zptr = Z_REFVAL_P(zptr);
						if (UNEXPECTED(ZEND_REF_HAS_TYPE_SOURCES(ref))) {
							zend_binary_assign_op_typed_ref(ref, value OPLINE_CC EXECUTE_DATA_CC);
							break;
						}
					}

					prop_info = (zend_property_info*)CACHED_PTR_EX(cache_slot + 2);
					if (prop_info && ZEND_TYPE_IS_SET(prop_info->type)) {
						/* special case for typed properties */
						zend_binary_assign_op_typed_prop(prop_info, zptr, value OPLINE_CC EXECUTE_DATA_CC);
					} else {
						zend_binary_op(zptr, zptr, value OPLINE_CC);
					}
				} while (0);

				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
					ZVAL_COPY(EX_VAR(opline->result.var), zptr);
				}
			}
		} else {
			zend_assign_op_overloaded_property(zobj, name, cache_slot, value OPLINE_CC EXECUTE_DATA_CC);
		}
		if (OP2_TYPE != IS_CONST) {
			zend_tmp_string_release(tmp_name);
		}
	} while (0);

	FREE_OP_DATA();
	FREE_OP2();
	FREE_OP1();
	/* assign_obj has two opcodes! */
	ZEND_VM_NEXT_OPCODE_EX(1, 2);
}

/* No specialization for op_types (CONST|TMP|VAR|CV, UNUSED|CONST|TMPVAR) */
ZEND_VM_HANDLER(29, ZEND_ASSIGN_STATIC_PROP_OP, ANY, ANY, OP)
{
	/* This helper actually never will receive IS_VAR as second op, and has the same handling for VAR and TMP in the first op, but for interoperability with the other binary_assign_op helpers, it is necessary to "include" it */

	USE_OPLINE
	zval *prop, *value;
	zend_property_info *prop_info;
	zend_reference *ref;

	SAVE_OPLINE();

	prop = zend_fetch_static_property_address(&prop_info, (opline+1)->extended_value, BP_VAR_RW, 0 OPLINE_CC EXECUTE_DATA_CC);
	if (UNEXPECTED(!prop)) {
		UNDEF_RESULT();
		FREE_OP_DATA();
		HANDLE_EXCEPTION();
	}

	if (UNEXPECTED(prop_info->flags & ZEND_ACC_PPP_SET_MASK)
	 && UNEXPECTED(!zend_asymmetric_property_has_set_access(prop_info))) {
		zend_asymmetric_visibility_property_modification_error(prop_info, "indirectly modify");
		UNDEF_RESULT();
		FREE_OP_DATA();
		HANDLE_EXCEPTION();
	}

	value = GET_OP_DATA_ZVAL_PTR(BP_VAR_R);

	do {
		if (UNEXPECTED(Z_ISREF_P(prop))) {
			ref = Z_REF_P(prop);
			prop = Z_REFVAL_P(prop);
			if (UNEXPECTED(ZEND_REF_HAS_TYPE_SOURCES(ref))) {
				zend_binary_assign_op_typed_ref(ref, value OPLINE_CC EXECUTE_DATA_CC);
				break;
			}
		}

		if (ZEND_TYPE_IS_SET(prop_info->type)) {
			/* special case for typed properties */
			zend_binary_assign_op_typed_prop(prop_info, prop, value OPLINE_CC EXECUTE_DATA_CC);
		} else {
			zend_binary_op(prop, prop, value OPLINE_CC);
		}
	} while (0);

	if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
		ZVAL_COPY(EX_VAR(opline->result.var), prop);
	}

	FREE_OP_DATA();
	/* assign_static_prop has two opcodes! */
	ZEND_VM_NEXT_OPCODE_EX(1, 2);
}

ZEND_VM_HANDLER(27, ZEND_ASSIGN_DIM_OP, VAR|CV, CONST|TMPVAR|UNUSED|NEXT|CV, OP)
{
	USE_OPLINE
	zval *var_ptr;
	zval *value, *container, *dim;
	HashTable *ht;

	SAVE_OPLINE();
	container = GET_OP1_OBJ_ZVAL_PTR_PTR_UNDEF(BP_VAR_RW);

	if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
ZEND_VM_C_LABEL(assign_dim_op_array):
		SEPARATE_ARRAY(container);
		ht = Z_ARRVAL_P(container);
ZEND_VM_C_LABEL(assign_dim_op_new_array):
		dim = GET_OP2_ZVAL_PTR_UNDEF(BP_VAR_R);
		if (OP2_TYPE == IS_UNUSED) {
			var_ptr = zend_hash_next_index_insert(ht, &EG(uninitialized_zval));
			if (UNEXPECTED(!var_ptr)) {
				zend_cannot_add_element();
				ZEND_VM_C_GOTO(assign_dim_op_ret_null);
			}
		} else {
			if (OP2_TYPE == IS_CONST) {
				var_ptr = zend_fetch_dimension_address_inner_RW_CONST(ht, dim EXECUTE_DATA_CC);
			} else {
				var_ptr = zend_fetch_dimension_address_inner_RW(ht, dim EXECUTE_DATA_CC);
			}
			if (UNEXPECTED(!var_ptr)) {
				ZEND_VM_C_GOTO(assign_dim_op_ret_null);
			}
		}

		value = get_op_data_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1);

		do {
			if (OP2_TYPE != IS_UNUSED && UNEXPECTED(Z_ISREF_P(var_ptr))) {
				zend_reference *ref = Z_REF_P(var_ptr);
				var_ptr = Z_REFVAL_P(var_ptr);
				if (UNEXPECTED(ZEND_REF_HAS_TYPE_SOURCES(ref))) {
					zend_binary_assign_op_typed_ref(ref, value OPLINE_CC EXECUTE_DATA_CC);
					break;
				}
			}
			zend_binary_op(var_ptr, var_ptr, value OPLINE_CC);
		} while (0);

		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
			ZVAL_COPY(EX_VAR(opline->result.var), var_ptr);
		}
		FREE_OP((opline+1)->op1_type, (opline+1)->op1.var);
	} else {
		if (EXPECTED(Z_ISREF_P(container))) {
			container = Z_REFVAL_P(container);
			if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
				ZEND_VM_C_GOTO(assign_dim_op_array);
			}
		}

		if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
			zend_object *obj = Z_OBJ_P(container);

			dim = GET_OP2_ZVAL_PTR_UNDEF(BP_VAR_R);
			if (OP2_TYPE == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
				dim++;
			}
			zend_binary_assign_op_obj_dim(obj, dim OPLINE_CC EXECUTE_DATA_CC);
		} else if (EXPECTED(Z_TYPE_P(container) <= IS_FALSE)) {
			uint8_t old_type;

			if (OP1_TYPE == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(container) == IS_UNDEF)) {
				ZVAL_UNDEFINED_OP1();
			}
			ht = zend_new_array(8);
			old_type = Z_TYPE_P(container);
			ZVAL_ARR(container, ht);
			if (UNEXPECTED(old_type == IS_FALSE)) {
				GC_ADDREF(ht);
				zend_false_to_array_deprecated();
				if (UNEXPECTED(GC_DELREF(ht) == 0)) {
					zend_array_destroy(ht);
					ZEND_VM_C_GOTO(assign_dim_op_ret_null);
				}
			}
			ZEND_VM_C_GOTO(assign_dim_op_new_array);
		} else {
			dim = GET_OP2_ZVAL_PTR(BP_VAR_R);
			zend_binary_assign_op_dim_slow(container, dim OPLINE_CC EXECUTE_DATA_CC);
ZEND_VM_C_LABEL(assign_dim_op_ret_null):
			FREE_OP_DATA();
			if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
				ZVAL_NULL(EX_VAR(opline->result.var));
			}
		}
	}

	FREE_OP2();
	FREE_OP1();
	ZEND_VM_NEXT_OPCODE_EX(1, 2);
}

ZEND_VM_HANDLER(26, ZEND_ASSIGN_OP, VAR|CV, CONST|TMPVAR|CV, OP)
{
	USE_OPLINE
	zval *var_ptr;
	zval *value;

	SAVE_OPLINE();
	value = GET_OP2_ZVAL_PTR(BP_VAR_R);
	var_ptr = GET_OP1_ZVAL_PTR_PTR(BP_VAR_RW);

	do {
		if (UNEXPECTED(Z_TYPE_P(var_ptr) == IS_REFERENCE)) {
			zend_reference *ref = Z_REF_P(var_ptr);
			var_ptr = Z_REFVAL_P(var_ptr);
			if (UNEXPECTED(ZEND_REF_HAS_TYPE_SOURCES(ref))) {
				zend_binary_assign_op_typed_ref(ref, value OPLINE_CC EXECUTE_DATA_CC);
				break;
			}
		}
		zend_binary_op(var_ptr, var_ptr, value OPLINE_CC);
	} while (0);

	if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
		ZVAL_COPY(EX_VAR(opline->result.var), var_ptr);
	}

	FREE_OP2();
	FREE_OP1();
	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

ZEND_VM_HANDLER(132, ZEND_PRE_INC_OBJ, VAR|UNUSED|THIS|CV, CONST|TMPVAR|CV, CACHE_SLOT)
{
	USE_OPLINE
	zval *object;
	zval *property;
	zval *zptr;
	void *_cache_slot[3] = {0};
	void **cache_slot;
	zend_property_info *prop_info;
	zend_object *zobj;
	zend_string *name, *tmp_name;

	SAVE_OPLINE();
	object = GET_OP1_OBJ_ZVAL_PTR_PTR_UNDEF(BP_VAR_RW);
	property = GET_OP2_ZVAL_PTR(BP_VAR_R);

	do {
		if (OP1_TYPE != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
			if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
				object = Z_REFVAL_P(object);
				ZEND_VM_C_GOTO(pre_incdec_object);
			}
			if (OP1_TYPE == IS_CV
			 && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
				ZVAL_UNDEFINED_OP1();
			}
			zend_throw_non_object_error(object, property OPLINE_CC EXECUTE_DATA_CC);
			break;
		}

ZEND_VM_C_LABEL(pre_incdec_object):
		/* here we are sure we are dealing with an object */
		zobj = Z_OBJ_P(object);
		if (OP2_TYPE == IS_CONST) {
			name = Z_STR_P(property);
		} else {
			name = zval_try_get_tmp_string(property, &tmp_name);
			if (UNEXPECTED(!name)) {
				UNDEF_RESULT();
				break;
			}
		}
		cache_slot = (OP2_TYPE == IS_CONST) ? CACHE_ADDR(opline->extended_value) : _cache_slot;
		if (EXPECTED((zptr = zobj->handlers->get_property_ptr_ptr(zobj, name, BP_VAR_RW, cache_slot)) != NULL)) {
			if (UNEXPECTED(Z_ISERROR_P(zptr))) {
				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
					ZVAL_NULL(EX_VAR(opline->result.var));
				}
			} else {
				prop_info = (zend_property_info *) CACHED_PTR_EX(cache_slot + 2);
				zend_pre_incdec_property_zval(zptr,
					prop_info && ZEND_TYPE_IS_SET(prop_info->type) ? prop_info : NULL OPLINE_CC EXECUTE_DATA_CC);
			}
		} else {
			zend_pre_incdec_overloaded_property(zobj, name, cache_slot OPLINE_CC EXECUTE_DATA_CC);
		}
		if (OP2_TYPE != IS_CONST) {
			zend_tmp_string_release(tmp_name);
		}
	} while (0);

	FREE_OP2();
	FREE_OP1();
	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

ZEND_VM_HANDLER(133, ZEND_PRE_DEC_OBJ, VAR|UNUSED|THIS|CV, CONST|TMPVAR|CV, CACHE_SLOT)
{
	ZEND_VM_DISPATCH_TO_HANDLER(ZEND_PRE_INC_OBJ);
}

ZEND_VM_HANDLER(134, ZEND_POST_INC_OBJ, VAR|UNUSED|THIS|CV, CONST|TMPVAR|CV, CACHE_SLOT)
{
	USE_OPLINE
	zval *object;
	zval *property;
	zval *zptr;
	void *_cache_slot[3] = {0};
	void **cache_slot;
	zend_property_info *prop_info;
	zend_object *zobj;
	zend_string *name, *tmp_name;

	SAVE_OPLINE();
	object = GET_OP1_OBJ_ZVAL_PTR_PTR_UNDEF(BP_VAR_RW);
	property = GET_OP2_ZVAL_PTR(BP_VAR_R);

	do {
		if (OP1_TYPE != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
			if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
				object = Z_REFVAL_P(object);
				ZEND_VM_C_GOTO(post_incdec_object);
			}
			if (OP1_TYPE == IS_CV
			 && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
				ZVAL_UNDEFINED_OP1();
			}
			zend_throw_non_object_error(object, property OPLINE_CC EXECUTE_DATA_CC);
			break;
		}

ZEND_VM_C_LABEL(post_incdec_object):
		/* here we are sure we are dealing with an object */
		zobj = Z_OBJ_P(object);
		if (OP2_TYPE == IS_CONST) {
			name = Z_STR_P(property);
		} else {
			name = zval_try_get_tmp_string(property, &tmp_name);
			if (UNEXPECTED(!name)) {
				ZVAL_UNDEF(EX_VAR(opline->result.var));
				break;
			}
		}
		cache_slot = (OP2_TYPE == IS_CONST) ? CACHE_ADDR(opline->extended_value) : _cache_slot;
		if (EXPECTED((zptr = zobj->handlers->get_property_ptr_ptr(zobj, name, BP_VAR_RW, cache_slot)) != NULL)) {
			if (UNEXPECTED(Z_ISERROR_P(zptr))) {
				ZVAL_NULL(EX_VAR(opline->result.var));
			} else {
				prop_info = (zend_property_info*)CACHED_PTR_EX(cache_slot + 2);
				zend_post_incdec_property_zval(zptr,
					prop_info && ZEND_TYPE_IS_SET(prop_info->type) ? prop_info : NULL OPLINE_CC EXECUTE_DATA_CC);
			}
		} else {
			zend_post_incdec_overloaded_property(zobj, name, cache_slot OPLINE_CC EXECUTE_DATA_CC);
		}
		if (OP2_TYPE != IS_CONST) {
			zend_tmp_string_release(tmp_name);
		}
	} while (0);

	FREE_OP2();
	FREE_OP1();
	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

ZEND_VM_HANDLER(135, ZEND_POST_DEC_OBJ, VAR|UNUSED|THIS|CV, CONST|TMPVAR|CV, CACHE_SLOT)
{
	ZEND_VM_DISPATCH_TO_HANDLER(ZEND_POST_INC_OBJ);
}

/* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CONST|VAR) */
ZEND_VM_HANDLER(38, ZEND_PRE_INC_STATIC_PROP, ANY, ANY, CACHE_SLOT)
{
	USE_OPLINE
	zval *prop;
	zend_property_info *prop_info;

	SAVE_OPLINE();

	prop = zend_fetch_static_property_address(&prop_info, opline->extended_value, BP_VAR_RW, 0 OPLINE_CC EXECUTE_DATA_CC);
	if (UNEXPECTED(!prop)) {
		UNDEF_RESULT();
		HANDLE_EXCEPTION();
	}

	if (UNEXPECTED(prop_info->flags & ZEND_ACC_PPP_SET_MASK)
	 && UNEXPECTED(!zend_asymmetric_property_has_set_access(prop_info))) {
		zend_asymmetric_visibility_property_modification_error(prop_info, "indirectly modify");
		UNDEF_RESULT();
		HANDLE_EXCEPTION();
	}

	zend_pre_incdec_property_zval(prop,
		ZEND_TYPE_IS_SET(prop_info->type) ? prop_info : NULL OPLINE_CC EXECUTE_DATA_CC);

	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

/* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CONST|VAR) */
ZEND_VM_HANDLER(39, ZEND_PRE_DEC_STATIC_PROP, ANY, ANY, CACHE_SLOT)
{
	ZEND_VM_DISPATCH_TO_HANDLER(ZEND_PRE_INC_STATIC_PROP);
}

/* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CONST|VAR) */
ZEND_VM_HANDLER(40, ZEND_POST_INC_STATIC_PROP, ANY, ANY, CACHE_SLOT)
{
	USE_OPLINE
	zval *prop;
	zend_property_info *prop_info;

	SAVE_OPLINE();

	prop = zend_fetch_static_property_address(&prop_info, opline->extended_value, BP_VAR_RW, 0 OPLINE_CC EXECUTE_DATA_CC);
	if (UNEXPECTED(!prop)) {
		UNDEF_RESULT();
		HANDLE_EXCEPTION();
	}

	if (UNEXPECTED(prop_info->flags & ZEND_ACC_PPP_SET_MASK)
	 && UNEXPECTED(!zend_asymmetric_property_has_set_access(prop_info))) {
		zend_asymmetric_visibility_property_modification_error(prop_info, "indirectly modify");
		UNDEF_RESULT();
		HANDLE_EXCEPTION();
	}

	zend_post_incdec_property_zval(prop,
		ZEND_TYPE_IS_SET(prop_info->type) ? prop_info : NULL OPLINE_CC EXECUTE_DATA_CC);

	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

/* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CONST|VAR) */
ZEND_VM_HANDLER(41, ZEND_POST_DEC_STATIC_PROP, ANY, ANY, CACHE_SLOT)
{
	ZEND_VM_DISPATCH_TO_HANDLER(ZEND_POST_INC_STATIC_PROP);
}

ZEND_VM_HELPER(zend_pre_inc_helper, VAR|CV, ANY)
{
	USE_OPLINE
	zval *var_ptr;

	var_ptr = GET_OP1_ZVAL_PTR_PTR_UNDEF(BP_VAR_RW);

	SAVE_OPLINE();
	if (OP1_TYPE == IS_CV && UNEXPECTED(Z_TYPE_P(var_ptr) == IS_UNDEF)) {
		ZVAL_UNDEFINED_OP1();
		ZVAL_NULL(var_ptr);
	}

	do {
		if (UNEXPECTED(Z_TYPE_P(var_ptr) == IS_REFERENCE)) {
			zend_reference *ref = Z_REF_P(var_ptr);
			var_ptr = Z_REFVAL_P(var_ptr);
			if (UNEXPECTED(ZEND_REF_HAS_TYPE_SOURCES(ref))) {
				zend_incdec_typed_ref(ref, NULL OPLINE_CC EXECUTE_DATA_CC);
				break;
			}
		}
		increment_function(var_ptr);
	} while (0);

	if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
		ZVAL_COPY(EX_VAR(opline->result.var), var_ptr);
	}

	FREE_OP1();
	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

ZEND_VM_HOT_HANDLER(34, ZEND_PRE_INC, VAR|CV, ANY, SPEC(RETVAL))
{
	USE_OPLINE
	zval *var_ptr;

	var_ptr = GET_OP1_ZVAL_PTR_PTR_UNDEF(BP_VAR_RW);

	if (EXPECTED(Z_TYPE_P(var_ptr) == IS_LONG)) {
		fast_long_increment_function(var_ptr);
		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
			ZVAL_COPY_VALUE(EX_VAR(opline->result.var), var_ptr);
		}
		ZEND_VM_NEXT_OPCODE();
	}

	ZEND_VM_DISPATCH_TO_HELPER(zend_pre_inc_helper);
}

ZEND_VM_HELPER(zend_pre_dec_helper, VAR|CV, ANY)
{
	USE_OPLINE
	zval *var_ptr;

	var_ptr = GET_OP1_ZVAL_PTR_PTR_UNDEF(BP_VAR_RW);

	SAVE_OPLINE();
	if (OP1_TYPE == IS_CV && UNEXPECTED(Z_TYPE_P(var_ptr) == IS_UNDEF)) {
		ZVAL_UNDEFINED_OP1();
		ZVAL_NULL(var_ptr);
	}

	do {
		if (UNEXPECTED(Z_TYPE_P(var_ptr) == IS_REFERENCE)) {
			zend_reference *ref = Z_REF_P(var_ptr);
			var_ptr = Z_REFVAL_P(var_ptr);

			if (UNEXPECTED(ZEND_REF_HAS_TYPE_SOURCES(ref))) {
				zend_incdec_typed_ref(ref, NULL OPLINE_CC EXECUTE_DATA_CC);
				break;
			}
		}
		decrement_function(var_ptr);
	} while (0);

	if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
		ZVAL_COPY(EX_VAR(opline->result.var), var_ptr);
	}

	FREE_OP1();
	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

ZEND_VM_HOT_HANDLER(35, ZEND_PRE_DEC, VAR|CV, ANY, SPEC(RETVAL))
{
	USE_OPLINE
	zval *var_ptr;

	var_ptr = GET_OP1_ZVAL_PTR_PTR_UNDEF(BP_VAR_RW);

	if (EXPECTED(Z_TYPE_P(var_ptr) == IS_LONG)) {
		fast_long_decrement_function(var_ptr);
		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
			ZVAL_COPY_VALUE(EX_VAR(opline->result.var), var_ptr);
		}
		ZEND_VM_NEXT_OPCODE();
	}

	ZEND_VM_DISPATCH_TO_HELPER(zend_pre_dec_helper);
}

ZEND_VM_HELPER(zend_post_inc_helper, VAR|CV, ANY)
{
	USE_OPLINE
	zval *var_ptr;

	var_ptr = GET_OP1_ZVAL_PTR_PTR_UNDEF(BP_VAR_RW);

	SAVE_OPLINE();
	if (OP1_TYPE == IS_CV && UNEXPECTED(Z_TYPE_P(var_ptr) == IS_UNDEF)) {
		ZVAL_UNDEFINED_OP1();
		ZVAL_NULL(var_ptr);
	}

	do {
		if (UNEXPECTED(Z_TYPE_P(var_ptr) == IS_REFERENCE)) {
			zend_reference *ref = Z_REF_P(var_ptr);
			var_ptr = Z_REFVAL_P(var_ptr);

			if (UNEXPECTED(ZEND_REF_HAS_TYPE_SOURCES(ref))) {
				zend_incdec_typed_ref(ref, EX_VAR(opline->result.var) OPLINE_CC EXECUTE_DATA_CC);
				break;
			}
		}
		ZVAL_COPY(EX_VAR(opline->result.var), var_ptr);

		increment_function(var_ptr);
	} while (0);

	FREE_OP1();
	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

ZEND_VM_HOT_HANDLER(36, ZEND_POST_INC, VAR|CV, ANY)
{
	USE_OPLINE
	zval *var_ptr;

	var_ptr = GET_OP1_ZVAL_PTR_PTR_UNDEF(BP_VAR_RW);

	if (EXPECTED(Z_TYPE_P(var_ptr) == IS_LONG)) {
		ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(var_ptr));
		fast_long_increment_function(var_ptr);
		ZEND_VM_NEXT_OPCODE();
	}

	ZEND_VM_DISPATCH_TO_HELPER(zend_post_inc_helper);
}

ZEND_VM_HELPER(zend_post_dec_helper, VAR|CV, ANY)
{
	USE_OPLINE
	zval *var_ptr;

	var_ptr = GET_OP1_ZVAL_PTR_PTR_UNDEF(BP_VAR_RW);

	SAVE_OPLINE();
	if (OP1_TYPE == IS_CV && UNEXPECTED(Z_TYPE_P(var_ptr) == IS_UNDEF)) {
		ZVAL_UNDEFINED_OP1();
		ZVAL_NULL(var_ptr);
	}

	do {
		if (UNEXPECTED(Z_TYPE_P(var_ptr) == IS_REFERENCE)) {
			zend_reference *ref = Z_REF_P(var_ptr);
			var_ptr = Z_REFVAL_P(var_ptr);

			if (UNEXPECTED(ZEND_REF_HAS_TYPE_SOURCES(ref))) {
				zend_incdec_typed_ref(ref, EX_VAR(opline->result.var) OPLINE_CC EXECUTE_DATA_CC);
				break;
			}
		}
		ZVAL_COPY(EX_VAR(opline->result.var), var_ptr);

		decrement_function(var_ptr);
	} while (0);

	FREE_OP1();
	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

ZEND_VM_HOT_HANDLER(37, ZEND_POST_DEC, VAR|CV, ANY)
{
	USE_OPLINE
	zval *var_ptr;

	var_ptr = GET_OP1_ZVAL_PTR_PTR_UNDEF(BP_VAR_RW);

	if (EXPECTED(Z_TYPE_P(var_ptr) == IS_LONG)) {
		ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(var_ptr));
		fast_long_decrement_function(var_ptr);
		ZEND_VM_NEXT_OPCODE();
	}

	ZEND_VM_DISPATCH_TO_HELPER(zend_post_dec_helper);
}

ZEND_VM_HANDLER(136, ZEND_ECHO, CONST|TMPVAR|CV, ANY)
{
	USE_OPLINE
	zval *z;

	SAVE_OPLINE();
	z = GET_OP1_ZVAL_PTR_UNDEF(BP_VAR_R);

	if (Z_TYPE_P(z) == IS_STRING) {
		zend_string *str = Z_STR_P(z);

		if (ZSTR_LEN(str) != 0) {
			zend_write(ZSTR_VAL(str), ZSTR_LEN(str));
		}
	} else {
		zend_string *str = zval_get_string_func(z);

		if (ZSTR_LEN(str) != 0) {
			zend_write(ZSTR_VAL(str), ZSTR_LEN(str));
		} else if (OP1_TYPE == IS_CV && UNEXPECTED(Z_TYPE_P(z) == IS_UNDEF)) {
			ZVAL_UNDEFINED_OP1();
		}
		zend_string_release_ex(str, 0);
	}

	FREE_OP1();
	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

ZEND_VM_HELPER(zend_fetch_var_address_helper, CONST|TMPVAR|CV, UNUSED, int type)
{
	USE_OPLINE
	zval *varname;
	zval *retval;
	zend_string *name, *tmp_name;
	HashTable *target_symbol_table;

	SAVE_OPLINE();
	varname = GET_OP1_ZVAL_PTR_UNDEF(BP_VAR_R);

	if (OP1_TYPE == IS_CONST) {
		name = Z_STR_P(varname);
	} else if (EXPECTED(Z_TYPE_P(varname) == IS_STRING)) {
		name = Z_STR_P(varname);
		tmp_name = NULL;
	} else {
		if (OP1_TYPE == IS_CV && UNEXPECTED(Z_TYPE_P(varname) == IS_UNDEF)) {
			ZVAL_UNDEFINED_OP1();
		}
		name = zval_try_get_tmp_string(varname, &tmp_name);
		if (UNEXPECTED(!name)) {
			if (!(opline->extended_value & ZEND_FETCH_GLOBAL_LOCK)) {
				FREE_OP1();
			}
			ZVAL_UNDEF(EX_VAR(opline->result.var));
			HANDLE_EXCEPTION();
		}
	}

	target_symbol_table = zend_get_target_symbol_table(opline->extended_value EXECUTE_DATA_CC);
	retval = zend_hash_find_ex(target_symbol_table, name, OP1_TYPE == IS_CONST);
	if (retval == NULL) {
		if (UNEXPECTED(zend_string_equals(name, ZSTR_KNOWN(ZEND_STR_THIS)))) {
ZEND_VM_C_LABEL(fetch_this):
			zend_fetch_this_var(type OPLINE_CC EXECUTE_DATA_CC);
			if (OP1_TYPE != IS_CONST) {
				zend_tmp_string_release(tmp_name);
			}
			ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
		}
		if (type == BP_VAR_W) {
			retval = zend_hash_add_new(target_symbol_table, name, &EG(uninitialized_zval));
		} else if (type == BP_VAR_IS || type == BP_VAR_UNSET) {
			retval = &EG(uninitialized_zval);
		} else {
			if (OP1_TYPE == IS_CV) {
				/* Keep name alive in case an error handler tries to free it. */
				zend_string_addref(name);
			}
			zend_error_unchecked(E_WARNING, "Undefined %svariable $%S",
				(opline->extended_value & ZEND_FETCH_GLOBAL ? "global " : ""), name);
			if (type == BP_VAR_RW && !EG(exception)) {
				retval = zend_hash_update(target_symbol_table, name, &EG(uninitialized_zval));
			} else {
				retval = &EG(uninitialized_zval);
			}
			if (OP1_TYPE == IS_CV) {
				zend_string_release(name);
			}
		}
	/* GLOBAL or $$name variable may be an INDIRECT pointer to CV */
	} else if (Z_TYPE_P(retval) == IS_INDIRECT) {
		retval = Z_INDIRECT_P(retval);
		if (Z_TYPE_P(retval) == IS_UNDEF) {
			if (UNEXPECTED(zend_string_equals(name, ZSTR_KNOWN(ZEND_STR_THIS)))) {
				ZEND_VM_C_GOTO(fetch_this);
			}
			if (type == BP_VAR_W) {
				ZVAL_NULL(retval);
			} else if (type == BP_VAR_IS || type == BP_VAR_UNSET) {
				retval = &EG(uninitialized_zval);
			} else {
				zend_error_unchecked(E_WARNING, "Undefined %svariable $%S",
					(opline->extended_value & ZEND_FETCH_GLOBAL ? "global " : ""), name);
				if (type == BP_VAR_RW && !EG(exception)) {
					ZVAL_NULL(retval);
				} else {
					retval = &EG(uninitialized_zval);
				}
			}
		}
	}

	if (!(opline->extended_value & ZEND_FETCH_GLOBAL_LOCK)) {
		FREE_OP1();
	}

	if (OP1_TYPE != IS_CONST) {
		zend_tmp_string_release(tmp_name);
	}

	ZEND_ASSERT(retval != NULL);
	if (type == BP_VAR_R || type == BP_VAR_IS) {
		ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
	} else {
		ZVAL_INDIRECT(EX_VAR(opline->result.var), retval);
	}
	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

ZEND_VM_HANDLER(80, ZEND_FETCH_R, CONST|TMPVAR|CV, UNUSED, VAR_FETCH)
{
	ZEND_VM_DISPATCH_TO_HELPER(zend_fetch_var_address_helper, type, BP_VAR_R);
}

ZEND_VM_HANDLER(83, ZEND_FETCH_W, CONST|TMPVAR|CV, UNUSED, VAR_FETCH)
{
	ZEND_VM_DISPATCH_TO_HELPER(zend_fetch_var_address_helper, type, BP_VAR_W);
}

ZEND_VM_HANDLER(86, ZEND_FETCH_RW, CONST|TMPVAR|CV, UNUSED, VAR_FETCH)
{
	ZEND_VM_DISPATCH_TO_HELPER(zend_fetch_var_address_helper, type, BP_VAR_RW);
}

ZEND_VM_HANDLER(92, ZEND_FETCH_FUNC_ARG, CONST|TMPVAR|CV, UNUSED, VAR_FETCH)
{
	int fetch_type =
		(UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) ?
			BP_VAR_W : BP_VAR_R;
	ZEND_VM_DISPATCH_TO_HELPER(zend_fetch_var_address_helper, type, fetch_type);
}

ZEND_VM_HANDLER(95, ZEND_FETCH_UNSET, CONST|TMPVAR|CV, UNUSED, VAR_FETCH)
{
	ZEND_VM_DISPATCH_TO_HELPER(zend_fetch_var_address_helper, type, BP_VAR_UNSET);
}

ZEND_VM_HANDLER(89, ZEND_FETCH_IS, CONST|TMPVAR|CV, UNUSED, VAR_FETCH)
{
	ZEND_VM_DISPATCH_TO_HELPER(zend_fetch_var_address_helper, type, BP_VAR_IS);
}

/* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CONST|VAR) */
ZEND_VM_INLINE_HELPER(zend_fetch_static_prop_helper, ANY, ANY, int type)
{
	USE_OPLINE
	zval *prop;
	zend_property_info *prop_info;

	SAVE_OPLINE();

	prop = zend_fetch_static_property_address(
		&prop_info, opline->extended_value & ~ZEND_FETCH_OBJ_FLAGS, type,
		type == BP_VAR_W ? opline->extended_value : 0 OPLINE_CC EXECUTE_DATA_CC);
	if (UNEXPECTED(!prop)) {
		ZEND_ASSERT(EG(exception) || (type == BP_VAR_IS));
		prop = &EG(uninitialized_zval);
	} else if (UNEXPECTED(prop_info->flags & ZEND_ACC_PPP_SET_MASK)
	 && (type == BP_VAR_W || type == BP_VAR_RW || type == BP_VAR_UNSET)
	 && UNEXPECTED(!zend_asymmetric_property_has_set_access(prop_info))) {
		if (Z_TYPE_P(prop) == IS_OBJECT) {
			ZEND_VM_C_GOTO(copy_deref);
		} else if (type != BP_VAR_UNSET || Z_TYPE_P(prop) != IS_UNDEF) {
			zend_asymmetric_visibility_property_modification_error(prop_info, "indirectly modify");
		}
		prop = &EG(uninitialized_zval);
	}

	if (type == BP_VAR_R || type == BP_VAR_IS) {
ZEND_VM_C_LABEL(copy_deref):
		ZVAL_COPY_DEREF(EX_VAR(opline->result.var), prop);
	} else {
		ZVAL_INDIRECT(EX_VAR(opline->result.var), prop);
	}
	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

/* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CLASS_FETCH|CONST|VAR) */
ZEND_VM_HANDLER(173, ZEND_FETCH_STATIC_PROP_R, ANY, CLASS_FETCH, CACHE_SLOT)
{
	ZEND_VM_DISPATCH_TO_HELPER(zend_fetch_static_prop_helper, type, BP_VAR_R);
}

/* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CLASS_FETCH|CONST|VAR) */
ZEND_VM_HANDLER(174, ZEND_FETCH_STATIC_PROP_W, ANY, CLASS_FETCH, FETCH_REF|DIM_WRITE|CACHE_SLOT)
{
	ZEND_VM_DISPATCH_TO_HELPER(zend_fetch_static_prop_helper, type, BP_VAR_W);
}

/* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CLASS_FETCH|CONST|VAR) */
ZEND_VM_HANDLER(175, ZEND_FETCH_STATIC_PROP_RW, ANY, CLASS_FETCH, CACHE_SLOT)
{
	ZEND_VM_DISPATCH_TO_HELPER(zend_fetch_static_prop_helper, type, BP_VAR_RW);
}

/* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CLASS_FETCH|CONST|VAR) */
ZEND_VM_HANDLER(177, ZEND_FETCH_STATIC_PROP_FUNC_ARG, ANY, CLASS_FETCH, FETCH_REF|CACHE_SLOT)
{
	if (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) {
		ZEND_VM_DISPATCH_TO_HANDLER(ZEND_FETCH_STATIC_PROP_W);
	} else {
		ZEND_VM_DISPATCH_TO_HANDLER(ZEND_FETCH_STATIC_PROP_R);
	}
}

/* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CLASS_FETCH|CONST|VAR) */
ZEND_VM_HANDLER(178, ZEND_FETCH_STATIC_PROP_UNSET, ANY, CLASS_FETCH, CACHE_SLOT)
{
	ZEND_VM_DISPATCH_TO_HELPER(zend_fetch_static_prop_helper, type, BP_VAR_UNSET);
}

/* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CLASS_FETCH|CONST|VAR) */
ZEND_VM_HANDLER(176, ZEND_FETCH_STATIC_PROP_IS, ANY, CLASS_FETCH, CACHE_SLOT)
{
	ZEND_VM_DISPATCH_TO_HELPER(zend_fetch_static_prop_helper, type, BP_VAR_IS);
}

ZEND_VM_COLD_CONSTCONST_HANDLER(81, ZEND_FETCH_DIM_R, CONST|TMPVAR|CV, CONST|TMPVAR|CV)
{
	USE_OPLINE
	zval *container, *dim, *value;

	SAVE_OPLINE();
	container = GET_OP1_ZVAL_PTR_UNDEF(BP_VAR_R);
	dim = GET_OP2_ZVAL_PTR_UNDEF(BP_VAR_R);
	if (OP1_TYPE != IS_CONST) {
		if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
ZEND_VM_C_LABEL(fetch_dim_r_array):
			value = zend_fetch_dimension_address_inner(Z_ARRVAL_P(container), dim, OP2_TYPE, BP_VAR_R EXECUTE_DATA_CC);
			ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
		} else if (EXPECTED(Z_TYPE_P(container) == IS_REFERENCE)) {
			container = Z_REFVAL_P(container);
			if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
				ZEND_VM_C_GOTO(fetch_dim_r_array);
			} else {
				ZEND_VM_C_GOTO(fetch_dim_r_slow);
			}
		} else {
ZEND_VM_C_LABEL(fetch_dim_r_slow):
			if (OP2_TYPE == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
				dim++;
			}
			zend_fetch_dimension_address_read_R_slow(container, dim OPLINE_CC EXECUTE_DATA_CC);
		}
	} else {
		zend_fetch_dimension_address_read_R(container, dim, OP2_TYPE OPLINE_CC EXECUTE_DATA_CC);
	}
	FREE_OP2();
	FREE_OP1();
	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

ZEND_VM_HANDLER(84, ZEND_FETCH_DIM_W, VAR|CV, CONST|TMPVAR|UNUSED|NEXT|CV)
{
	USE_OPLINE
	zval *container;

	SAVE_OPLINE();
	container = GET_OP1_ZVAL_PTR_PTR_UNDEF(BP_VAR_W);
	zend_fetch_dimension_address_W(container, GET_OP2_ZVAL_PTR_UNDEF(BP_VAR_R), OP2_TYPE OPLINE_CC EXECUTE_DATA_CC);
	FREE_OP2();
	if (OP1_TYPE == IS_VAR) {
		FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
	}
	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

ZEND_VM_HANDLER(87, ZEND_FETCH_DIM_RW, VAR|CV, CONST|TMPVAR|UNUSED|NEXT|CV)
{
	USE_OPLINE
	zval *container;

	SAVE_OPLINE();
	container = GET_OP1_ZVAL_PTR_PTR_UNDEF(BP_VAR_RW);
	zend_fetch_dimension_address_RW(container, GET_OP2_ZVAL_PTR_UNDEF(BP_VAR_R), OP2_TYPE OPLINE_CC EXECUTE_DATA_CC);
	FREE_OP2();
	if (OP1_TYPE == IS_VAR) {
		FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
	}
	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

ZEND_VM_COLD_CONSTCONST_HANDLER(90, ZEND_FETCH_DIM_IS, CONST|TMPVAR|CV, CONST|TMPVAR|CV)
{
	USE_OPLINE
	zval *container;

	SAVE_OPLINE();
	container = GET_OP1_ZVAL_PTR_UNDEF(BP_VAR_IS);
	zend_fetch_dimension_address_read_IS(container, GET_OP2_ZVAL_PTR_UNDEF(BP_VAR_R), OP2_TYPE OPLINE_CC EXECUTE_DATA_CC);
	FREE_OP2();
	FREE_OP1();
	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

ZEND_VM_COLD_HELPER(zend_use_tmp_in_write_context_helper, ANY, ANY)
{
	USE_OPLINE

	SAVE_OPLINE();
	zend_throw_error(NULL, "Cannot use temporary expression in write context");
	FREE_OP2();
	FREE_OP1();
	ZVAL_UNDEF(EX_VAR(opline->result.var));
	HANDLE_EXCEPTION();
}

ZEND_VM_COLD_HELPER(zend_use_undef_in_read_context_helper, ANY, ANY)
{
	USE_OPLINE

	SAVE_OPLINE();
	zend_throw_error(NULL, "Cannot use [] for reading");
	FREE_OP2();
	FREE_OP1();
	ZVAL_UNDEF(EX_VAR(opline->result.var));
	HANDLE_EXCEPTION();
}

ZEND_VM_COLD_CONSTCONST_HANDLER(93, ZEND_FETCH_DIM_FUNC_ARG, CONST|TMP|VAR|CV, CONST|TMPVAR|UNUSED|NEXT|CV)
{
#if !ZEND_VM_SPEC
	USE_OPLINE
#endif

	if (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) {
		if ((OP1_TYPE & (IS_CONST|IS_TMP_VAR))) {
			ZEND_VM_DISPATCH_TO_HELPER(zend_use_tmp_in_write_context_helper);
		}
		ZEND_VM_DISPATCH_TO_HANDLER(ZEND_FETCH_DIM_W);
	} else {
		if (OP2_TYPE == IS_UNUSED) {
			ZEND_VM_DISPATCH_TO_HELPER(zend_use_undef_in_read_context_helper);
		}
		ZEND_VM_DISPATCH_TO_HANDLER(ZEND_FETCH_DIM_R);
	}
}

ZEND_VM_HANDLER(96, ZEND_FETCH_DIM_UNSET, VAR|CV, CONST|TMPVAR|CV)
{
	USE_OPLINE
	zval *container;

	SAVE_OPLINE();
	container = GET_OP1_ZVAL_PTR_PTR_UNDEF(BP_VAR_UNSET);
	zend_fetch_dimension_address_UNSET(container, GET_OP2_ZVAL_PTR_UNDEF(BP_VAR_R), OP2_TYPE OPLINE_CC EXECUTE_DATA_CC);
	FREE_OP2();
	if (OP1_TYPE == IS_VAR) {
		FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
	}
	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

ZEND_VM_HOT_OBJ_HANDLER(82, ZEND_FETCH_OBJ_R, CONST|TMPVAR|UNUSED|THIS|CV, CONST|TMPVAR|CV, CACHE_SLOT)
{
	USE_OPLINE
	zval *container;
	void **cache_slot = NULL;

	SAVE_OPLINE();
	container = GET_OP1_OBJ_ZVAL_PTR_UNDEF(BP_VAR_R);

	if (OP1_TYPE == IS_CONST ||
	    (OP1_TYPE != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
		do {
			if ((OP1_TYPE & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
				container = Z_REFVAL_P(container);
				if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
					break;
				}
			}
			if (OP1_TYPE == IS_CV && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
				ZVAL_UNDEFINED_OP1();
			}
			zend_wrong_property_read(container, GET_OP2_ZVAL_PTR(BP_VAR_R));
			ZVAL_NULL(EX_VAR(opline->result.var));
			ZEND_VM_C_GOTO(fetch_obj_r_finish);
		} while (0);
	}

	/* here we are sure we are dealing with an object */
	do {
		zend_object *zobj = Z_OBJ_P(container);
		zend_string *name, *tmp_name;
		zval *retval;

		if (OP2_TYPE == IS_CONST) {
			cache_slot = CACHE_ADDR(opline->extended_value & ~ZEND_FETCH_REF /* FUNC_ARG fetch may contain it */);

			if (EXPECTED(zobj->ce == CACHED_PTR_EX(cache_slot))) {
				uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);

				if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
ZEND_VM_C_LABEL(fetch_obj_r_simple):
					retval = OBJ_PROP(zobj, prop_offset);
					if (EXPECTED(Z_TYPE_INFO_P(retval) != IS_UNDEF)) {
						if (!ZEND_VM_SPEC || (OP1_TYPE & (IS_TMP_VAR|IS_VAR)) != 0) {
							ZEND_VM_C_GOTO(fetch_obj_r_copy);
						} else {
ZEND_VM_C_LABEL(fetch_obj_r_fast_copy):
							ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
							ZEND_VM_NEXT_OPCODE();
						}
					}
				} else if (UNEXPECTED(IS_HOOKED_PROPERTY_OFFSET(prop_offset))) {
					zend_property_info *prop_info = CACHED_PTR_EX(cache_slot + 2);
					if (ZEND_IS_PROPERTY_HOOK_SIMPLE_READ(prop_offset)) {
						prop_offset = prop_info->offset;
						ZEND_VM_C_GOTO(fetch_obj_r_simple);
					} else if (EXPECTED(ZEND_IS_PROPERTY_HOOK_SIMPLE_GET(prop_offset))) {
						zend_function *hook = prop_info->hooks[ZEND_PROPERTY_HOOK_GET];
						ZEND_ASSERT(hook->type == ZEND_USER_FUNCTION);
						ZEND_ASSERT(RUN_TIME_CACHE(&hook->op_array));

						uint32_t call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_HAS_THIS;
						if (OP1_TYPE & IS_CV) {
							GC_ADDREF(zobj);
						}
						if (OP1_TYPE & (IS_CV|IS_VAR|IS_TMP_VAR)) {
							call_info |= ZEND_CALL_RELEASE_THIS;
						}
						zend_execute_data *call = zend_vm_stack_push_call_frame(call_info, hook, 0, zobj);
						call->prev_execute_data = execute_data;
						call->call = NULL;
						call->return_value = EX_VAR(opline->result.var);
						call->run_time_cache = RUN_TIME_CACHE(&hook->op_array);

						execute_data = call;
						EG(current_execute_data) = execute_data;
						zend_init_cvs(0, hook->op_array.last_var EXECUTE_DATA_CC);

#if defined(ZEND_VM_IP_GLOBAL_REG) && ((ZEND_VM_KIND == ZEND_VM_KIND_CALL) || (ZEND_VM_KIND == ZEND_VM_KIND_HYBRID))
						opline = hook->op_array.opcodes;
#else
						EX(opline) = hook->op_array.opcodes;
#endif
						LOAD_OPLINE_EX();
						ZEND_OBSERVER_SAVE_OPLINE();
						ZEND_OBSERVER_FCALL_BEGIN(execute_data);

						ZEND_VM_ENTER_EX();
					}
					/* Fall through to read_property for hooks. */
				} else if (EXPECTED(zobj->properties != NULL)) {
					ZEND_ASSERT(IS_DYNAMIC_PROPERTY_OFFSET(prop_offset));
					name = Z_STR_P(GET_OP2_ZVAL_PTR(BP_VAR_R));
					if (!IS_UNKNOWN_DYNAMIC_PROPERTY_OFFSET(prop_offset)) {
						uintptr_t idx = ZEND_DECODE_DYN_PROP_OFFSET(prop_offset);

						if (EXPECTED(idx < zobj->properties->nNumUsed * sizeof(Bucket))) {
							Bucket *p = (Bucket*)((char*)zobj->properties->arData + idx);

							if (EXPECTED(p->key == name) ||
							    (EXPECTED(p->h == ZSTR_H(name)) &&
							     EXPECTED(p->key != NULL) &&
							     EXPECTED(zend_string_equal_content(p->key, name)))) {
								retval = &p->val;
								if (!ZEND_VM_SPEC || (OP1_TYPE & (IS_TMP_VAR|IS_VAR)) != 0) {
									ZEND_VM_C_GOTO(fetch_obj_r_copy);
								} else {
									ZEND_VM_C_GOTO(fetch_obj_r_fast_copy);
								}
							}
						}
						CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_DYNAMIC_PROPERTY_OFFSET);
					}
					retval = zend_hash_find_known_hash(zobj->properties, name);
					if (EXPECTED(retval)) {
						uintptr_t idx = (char*)retval - (char*)zobj->properties->arData;
						CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_ENCODE_DYN_PROP_OFFSET(idx));
						if (!ZEND_VM_SPEC || (OP1_TYPE & (IS_TMP_VAR|IS_VAR)) != 0) {
							ZEND_VM_C_GOTO(fetch_obj_r_copy);
						} else {
							ZEND_VM_C_GOTO(fetch_obj_r_fast_copy);
						}
					}
				}
			}
			name = Z_STR_P(GET_OP2_ZVAL_PTR(BP_VAR_R));
		} else {
			name = zval_try_get_tmp_string(GET_OP2_ZVAL_PTR(BP_VAR_R), &tmp_name);
			if (UNEXPECTED(!name)) {
				ZVAL_UNDEF(EX_VAR(opline->result.var));
				break;
			}
		}

#if ZEND_DEBUG
		/* For non-standard object handlers, verify a declared property type in debug builds.
		 * Fetch prop_info before calling read_property(), as it may deallocate the object. */
		zend_property_info *prop_info = NULL;
		if (zobj->handlers->read_property != zend_std_read_property) {
			prop_info = zend_get_property_info(zobj->ce, name, /* silent */ true);
		}
#endif
		retval = zobj->handlers->read_property(zobj, name, BP_VAR_R, cache_slot, EX_VAR(opline->result.var));
#if ZEND_DEBUG
		if (!EG(exception) && prop_info && prop_info != ZEND_WRONG_PROPERTY_INFO
				&& ZEND_TYPE_IS_SET(prop_info->type)) {
			ZVAL_OPT_DEREF(retval);
			zend_verify_property_type(prop_info, retval, /* strict */ true);
		}
#endif

		if (OP2_TYPE != IS_CONST) {
			zend_tmp_string_release(tmp_name);
		}

		if (retval != EX_VAR(opline->result.var)) {
ZEND_VM_C_LABEL(fetch_obj_r_copy):
			ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
		} else if (UNEXPECTED(Z_ISREF_P(retval))) {
			zend_unwrap_reference(retval);
		}
	} while (0);

ZEND_VM_C_LABEL(fetch_obj_r_finish):
	FREE_OP2();
	FREE_OP1();
	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

ZEND_VM_HANDLER(85, ZEND_FETCH_OBJ_W, VAR|UNUSED|THIS|CV, CONST|TMPVAR|CV, FETCH_REF|DIM_WRITE|CACHE_SLOT)
{
	USE_OPLINE
	zval *property, *container, *result;

	SAVE_OPLINE();

	container = GET_OP1_OBJ_ZVAL_PTR_PTR_UNDEF(BP_VAR_W);
	property = GET_OP2_ZVAL_PTR(BP_VAR_R);
	result = EX_VAR(opline->result.var);
	zend_fetch_property_address(
		result, container, OP1_TYPE, property, OP2_TYPE,
		((OP2_TYPE == IS_CONST) ? CACHE_ADDR(opline->extended_value & ~ZEND_FETCH_OBJ_FLAGS) : NULL),
		BP_VAR_W, opline->extended_value, NULL OPLINE_CC EXECUTE_DATA_CC);
	FREE_OP2();
	if (OP1_TYPE == IS_VAR) {
		FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
	}
	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

ZEND_VM_HANDLER(88, ZEND_FETCH_OBJ_RW, VAR|UNUSED|THIS|CV, CONST|TMPVAR|CV, CACHE_SLOT)
{
	USE_OPLINE
	zval *property, *container, *result;

	SAVE_OPLINE();
	container = GET_OP1_OBJ_ZVAL_PTR_PTR_UNDEF(BP_VAR_RW);
	property = GET_OP2_ZVAL_PTR(BP_VAR_R);
	result = EX_VAR(opline->result.var);
	zend_fetch_property_address(result, container, OP1_TYPE, property, OP2_TYPE, ((OP2_TYPE == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL), BP_VAR_RW, 0, NULL OPLINE_CC EXECUTE_DATA_CC);
	FREE_OP2();
	if (OP1_TYPE == IS_VAR) {
		FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
	}
	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

ZEND_VM_COLD_CONST_HANDLER(91, ZEND_FETCH_OBJ_IS, CONST|TMPVAR|UNUSED|THIS|CV, CONST|TMPVAR|CV, CACHE_SLOT)
{
	USE_OPLINE
	zval *container;
	void **cache_slot = NULL;

	SAVE_OPLINE();
	container = GET_OP1_OBJ_ZVAL_PTR(BP_VAR_IS);

	if (OP1_TYPE == IS_CONST ||
	    (OP1_TYPE != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
		do {
			if ((OP1_TYPE & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
				container = Z_REFVAL_P(container);
				if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
					break;
				}
			}
			if (OP2_TYPE == IS_CV && Z_TYPE_P(EX_VAR(opline->op2.var)) == IS_UNDEF) {
				ZVAL_UNDEFINED_OP2();
			}
			ZVAL_NULL(EX_VAR(opline->result.var));
			ZEND_VM_C_GOTO(fetch_obj_is_finish);
		} while (0);
	}

	/* here we are sure we are dealing with an object */
	do {
		zend_object *zobj = Z_OBJ_P(container);
		zend_string *name, *tmp_name;
		zval *retval;

		if (OP2_TYPE == IS_CONST) {
			cache_slot = CACHE_ADDR(opline->extended_value);

			if (EXPECTED(zobj->ce == CACHED_PTR_EX(cache_slot))) {
				uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);

				if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
ZEND_VM_C_LABEL(fetch_obj_is_simple):
					retval = OBJ_PROP(zobj, prop_offset);
					if (EXPECTED(Z_TYPE_P(retval) != IS_UNDEF)) {
						if (!ZEND_VM_SPEC || (OP1_TYPE & (IS_TMP_VAR|IS_VAR)) != 0) {
							ZEND_VM_C_GOTO(fetch_obj_is_copy);
						} else {
ZEND_VM_C_LABEL(fetch_obj_is_fast_copy):
							ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
							ZEND_VM_NEXT_OPCODE();
						}
					}
				} else if (UNEXPECTED(IS_HOOKED_PROPERTY_OFFSET(prop_offset))) {
					if (ZEND_IS_PROPERTY_HOOK_SIMPLE_READ(prop_offset)) {
						zend_property_info *prop_info = CACHED_PTR_EX(cache_slot + 2);
						prop_offset = prop_info->offset;
						ZEND_VM_C_GOTO(fetch_obj_is_simple);
					}
					/* Fall through to read_property for hooks. */
				} else if (EXPECTED(zobj->properties != NULL)) {
					ZEND_ASSERT(IS_DYNAMIC_PROPERTY_OFFSET(prop_offset));
					name = Z_STR_P(GET_OP2_ZVAL_PTR(BP_VAR_R));
					if (!IS_UNKNOWN_DYNAMIC_PROPERTY_OFFSET(prop_offset)) {
						uintptr_t idx = ZEND_DECODE_DYN_PROP_OFFSET(prop_offset);

						if (EXPECTED(idx < zobj->properties->nNumUsed * sizeof(Bucket))) {
							Bucket *p = (Bucket*)((char*)zobj->properties->arData + idx);

							if (EXPECTED(p->key == name) ||
							    (EXPECTED(p->h == ZSTR_H(name)) &&
							     EXPECTED(p->key != NULL) &&
							     EXPECTED(zend_string_equal_content(p->key, name)))) {
								retval = &p->val;
								if (!ZEND_VM_SPEC || (OP1_TYPE & (IS_TMP_VAR|IS_VAR)) != 0) {
									ZEND_VM_C_GOTO(fetch_obj_is_copy);
								} else {
									ZEND_VM_C_GOTO(fetch_obj_is_fast_copy);
								}
							}
						}
						CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_DYNAMIC_PROPERTY_OFFSET);
					}
					retval = zend_hash_find_known_hash(zobj->properties, name);
					if (EXPECTED(retval)) {
						uintptr_t idx = (char*)retval - (char*)zobj->properties->arData;
						CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_ENCODE_DYN_PROP_OFFSET(idx));
						if (!ZEND_VM_SPEC || (OP1_TYPE & (IS_TMP_VAR|IS_VAR)) != 0) {
							ZEND_VM_C_GOTO(fetch_obj_is_copy);
						} else {
							ZEND_VM_C_GOTO(fetch_obj_is_fast_copy);
						}
					}
				}
			}
			name = Z_STR_P(GET_OP2_ZVAL_PTR(BP_VAR_R));
		} else {
			name = zval_try_get_tmp_string(GET_OP2_ZVAL_PTR(BP_VAR_R), &tmp_name);
			if (UNEXPECTED(!name)) {
				ZVAL_UNDEF(EX_VAR(opline->result.var));
				break;
			}
		}

		retval = zobj->handlers->read_property(zobj, name, BP_VAR_IS, cache_slot, EX_VAR(opline->result.var));

		if (OP2_TYPE != IS_CONST) {
			zend_tmp_string_release(tmp_name);
		}

		if (retval != EX_VAR(opline->result.var)) {
ZEND_VM_C_LABEL(fetch_obj_is_copy):
			ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
		} else if (UNEXPECTED(Z_ISREF_P(retval))) {
			zend_unwrap_reference(retval);
		}
	} while (0);

ZEND_VM_C_LABEL(fetch_obj_is_finish):
	FREE_OP2();
	FREE_OP1();
	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

ZEND_VM_COLD_CONST_HANDLER(94, ZEND_FETCH_OBJ_FUNC_ARG, CONST|TMP|VAR|UNUSED|THIS|CV, CONST|TMPVAR|CV, FETCH_REF|CACHE_SLOT)
{
#if !ZEND_VM_SPEC
	USE_OPLINE
#endif

	if (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) {
		/* Behave like FETCH_OBJ_W */
		if ((OP1_TYPE & (IS_CONST|IS_TMP_VAR))) {
			ZEND_VM_DISPATCH_TO_HELPER(zend_use_tmp_in_write_context_helper);
		}
		ZEND_VM_DISPATCH_TO_HANDLER(ZEND_FETCH_OBJ_W);
	} else {
		ZEND_VM_DISPATCH_TO_HANDLER(ZEND_FETCH_OBJ_R);
	}
}

ZEND_VM_HANDLER(97, ZEND_FETCH_OBJ_UNSET, VAR|UNUSED|THIS|CV, CONST|TMPVAR|CV, CACHE_SLOT)
{
	USE_OPLINE
	zval *container, *property, *result;

	SAVE_OPLINE();
	container = GET_OP1_OBJ_ZVAL_PTR_PTR_UNDEF(BP_VAR_UNSET);
	property = GET_OP2_ZVAL_PTR(BP_VAR_R);
	result = EX_VAR(opline->result.var);
	zend_fetch_property_address(result, container, OP1_TYPE, property, OP2_TYPE, ((OP2_TYPE == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL), BP_VAR_UNSET, 0, NULL OPLINE_CC EXECUTE_DATA_CC);
	FREE_OP2();
	if (OP1_TYPE == IS_VAR) {
		FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
	}
	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

ZEND_VM_HANDLER(98, ZEND_FETCH_LIST_R, CONST|TMPVARCV, CONST|TMPVAR|CV)
{
	USE_OPLINE
	zval *container;

	SAVE_OPLINE();
	container = GET_OP1_ZVAL_PTR_UNDEF(BP_VAR_R);
	zend_fetch_dimension_address_LIST_r(container, GET_OP2_ZVAL_PTR_UNDEF(BP_VAR_R), OP2_TYPE OPLINE_CC EXECUTE_DATA_CC);
	FREE_OP2();
	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

ZEND_VM_HANDLER(155, ZEND_FETCH_LIST_W, VAR, CONST|TMPVAR|CV)
{
	USE_OPLINE
	zval *container, *dim;

	SAVE_OPLINE();
	container = GET_OP1_ZVAL_PTR_PTR_UNDEF(BP_VAR_W);
	dim = GET_OP2_ZVAL_PTR_UNDEF(BP_VAR_R);

	if (OP1_TYPE == IS_VAR
		&& Z_TYPE_P(EX_VAR(opline->op1.var)) != IS_INDIRECT
		&& UNEXPECTED(!Z_ISREF_P(container))
	) {
		zend_error(E_NOTICE, "Attempting to set reference to non referenceable value");
		zend_fetch_dimension_address_LIST_r(container, dim, OP2_TYPE OPLINE_CC EXECUTE_DATA_CC);
	} else {
		zend_fetch_dimension_address_W(container, dim, OP2_TYPE OPLINE_CC EXECUTE_DATA_CC);
	}

	FREE_OP2();
	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

ZEND_VM_HANDLER(24, ZEND_ASSIGN_OBJ, VAR|UNUSED|THIS|CV, CONST|TMPVAR|CV, CACHE_SLOT, SPEC(OP_DATA=CONST|TMP|VAR|CV))
{
	USE_OPLINE
	zval *object, *value, tmp;
	zend_object *zobj;
	zend_string *name, *tmp_name;
	zend_refcounted *garbage = NULL;

	SAVE_OPLINE();
	object = GET_OP1_OBJ_ZVAL_PTR_PTR_UNDEF(BP_VAR_W);
	value = GET_OP_DATA_ZVAL_PTR(BP_VAR_R);

	if (OP1_TYPE != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
		if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
			object = Z_REFVAL_P(object);
			ZEND_VM_C_GOTO(assign_object);
		}
		zend_throw_non_object_error(object, GET_OP2_ZVAL_PTR(BP_VAR_R) OPLINE_CC EXECUTE_DATA_CC);
		value = &EG(uninitialized_zval);
		ZEND_VM_C_GOTO(free_and_exit_assign_obj);
	}

ZEND_VM_C_LABEL(assign_object):
	zobj = Z_OBJ_P(object);
	if (OP2_TYPE == IS_CONST) {
		if (EXPECTED(zobj->ce == CACHED_PTR(opline->extended_value))) {
			void **cache_slot = CACHE_ADDR(opline->extended_value);
			uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
			zval *property_val;
			zend_property_info *prop_info;

			if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
				prop_info = (zend_property_info*) CACHED_PTR_EX(cache_slot + 2);

ZEND_VM_C_LABEL(assign_obj_simple):
				property_val = OBJ_PROP(zobj, prop_offset);
				if (Z_TYPE_P(property_val) != IS_UNDEF) {
					if (prop_info != NULL) {
						value = zend_assign_to_typed_prop(prop_info, property_val, value, &garbage EXECUTE_DATA_CC);
						ZEND_VM_C_GOTO(free_and_exit_assign_obj);
					} else {
ZEND_VM_C_LABEL(fast_assign_obj):
						value = zend_assign_to_variable_ex(property_val, value, OP_DATA_TYPE, EX_USES_STRICT_TYPES(), &garbage);
						if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
							ZVAL_COPY(EX_VAR(opline->result.var), value);
						}
						ZEND_VM_C_GOTO(exit_assign_obj);
					}
				}
			} else if (EXPECTED(IS_DYNAMIC_PROPERTY_OFFSET(prop_offset))) {
				name = Z_STR_P(GET_OP2_ZVAL_PTR(BP_VAR_R));
				if (UNEXPECTED(zend_lazy_object_must_init(zobj))) {
					zobj = zend_lazy_object_init(zobj);
					if (!zobj) {
						value = &EG(uninitialized_zval);
						ZEND_VM_C_GOTO(free_and_exit_assign_obj);
					}
				}
				if (!zobj->ce->__set && (zobj->ce->ce_flags & ZEND_ACC_ALLOW_DYNAMIC_PROPERTIES)) {
					rebuild_object_properties_internal(zobj);
				}
				if (EXPECTED(zobj->properties != NULL)) {
					if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
						if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
							GC_DELREF(zobj->properties);
						}
						zobj->properties = zend_array_dup(zobj->properties);
					}
					property_val = zend_hash_find_known_hash(zobj->properties, name);
					if (property_val) {
						ZEND_VM_C_GOTO(fast_assign_obj);
					}
				}

				if (!zobj->ce->__set && (zobj->ce->ce_flags & ZEND_ACC_ALLOW_DYNAMIC_PROPERTIES)) {
					if (OP_DATA_TYPE == IS_CONST) {
						if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
							Z_ADDREF_P(value);
						}
					} else if (OP_DATA_TYPE != IS_TMP_VAR) {
						if (Z_ISREF_P(value)) {
							if (OP_DATA_TYPE == IS_VAR) {
								zend_reference *ref = Z_REF_P(value);
								if (GC_DELREF(ref) == 0) {
									ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
									efree_size(ref, sizeof(zend_reference));
									value = &tmp;
								} else {
									value = Z_REFVAL_P(value);
									Z_TRY_ADDREF_P(value);
								}
							} else {
								value = Z_REFVAL_P(value);
								Z_TRY_ADDREF_P(value);
							}
						} else if (OP_DATA_TYPE == IS_CV) {
							Z_TRY_ADDREF_P(value);
						}
					}
					zend_hash_add_new(zobj->properties, name, value);
					if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
						ZVAL_COPY(EX_VAR(opline->result.var), value);
					}
					ZEND_VM_C_GOTO(exit_assign_obj);
				}
			} else {
				ZEND_ASSERT(IS_HOOKED_PROPERTY_OFFSET(prop_offset));
				if (ZEND_IS_PROPERTY_HOOK_SIMPLE_WRITE(prop_offset)) {
					prop_info = CACHED_PTR_EX(cache_slot + 2);
					prop_offset = prop_info->offset;
					if (!ZEND_TYPE_IS_SET(prop_info->type)) {
						prop_info = NULL;
					}
					ZEND_VM_C_GOTO(assign_obj_simple);
				}
				/* Fall through to write_property for hooks. */
			}
		}
		name = Z_STR_P(GET_OP2_ZVAL_PTR(BP_VAR_R));
	} else {
		name = zval_try_get_tmp_string(GET_OP2_ZVAL_PTR(BP_VAR_R), &tmp_name);
		if (UNEXPECTED(!name)) {
			FREE_OP_DATA();
			UNDEF_RESULT();
			ZEND_VM_C_GOTO(exit_assign_obj);
		}
	}

	if (OP_DATA_TYPE == IS_CV || OP_DATA_TYPE == IS_VAR) {
		ZVAL_DEREF(value);
	}

	value = zobj->handlers->write_property(zobj, name, value, (OP2_TYPE == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);

	if (OP2_TYPE != IS_CONST) {
		zend_tmp_string_release(tmp_name);
	}

ZEND_VM_C_LABEL(free_and_exit_assign_obj):
	if (UNEXPECTED(RETURN_VALUE_USED(opline)) && value) {
		ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
	}
	FREE_OP_DATA();
ZEND_VM_C_LABEL(exit_assign_obj):
	if (garbage) {
		GC_DTOR_NO_REF(garbage);
	}
	FREE_OP2();
	FREE_OP1();
	/* assign_obj has two opcodes! */
	ZEND_VM_NEXT_OPCODE_EX(1, 2);
}

/* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CONST|VAR) */
ZEND_VM_HANDLER(25, ZEND_ASSIGN_STATIC_PROP, ANY, ANY, CACHE_SLOT, SPEC(OP_DATA=CONST|TMP|VAR|CV))
{
	USE_OPLINE
	zval *prop, *value;
	zend_property_info *prop_info;
	zend_refcounted *garbage = NULL;

	SAVE_OPLINE();

	prop = zend_fetch_static_property_address(&prop_info, opline->extended_value, BP_VAR_W, 0 OPLINE_CC EXECUTE_DATA_CC);
	if (UNEXPECTED(!prop)) {
		FREE_OP_DATA();
		UNDEF_RESULT();
		HANDLE_EXCEPTION();
	}

	value = GET_OP_DATA_ZVAL_PTR(BP_VAR_R);

	if (ZEND_TYPE_IS_SET(prop_info->type)) {
		value = zend_assign_to_typed_prop(prop_info, prop, value, &garbage EXECUTE_DATA_CC);
		FREE_OP_DATA();
	} else {
		value = zend_assign_to_variable_ex(prop, value, OP_DATA_TYPE, EX_USES_STRICT_TYPES(), &garbage);
	}

	if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
		ZVAL_COPY(EX_VAR(opline->result.var), value);
	}

	if (garbage) {
		GC_DTOR_NO_REF(garbage);
	}

	/* assign_static_prop has two opcodes! */
	ZEND_VM_NEXT_OPCODE_EX(1, 2);
}

ZEND_VM_HANDLER(23, ZEND_ASSIGN_DIM, VAR|CV, CONST|TMPVAR|UNUSED|NEXT|CV, SPEC(OP_DATA=CONST|TMP|VAR|CV))
{
	USE_OPLINE
	zval *object_ptr, *orig_object_ptr;
	zval *value;
	zval *variable_ptr;
	zval *dim;
	zend_refcounted *garbage = NULL;

	SAVE_OPLINE();
	orig_object_ptr = object_ptr = GET_OP1_ZVAL_PTR_PTR_UNDEF(BP_VAR_W);

	if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
ZEND_VM_C_LABEL(try_assign_dim_array):
		SEPARATE_ARRAY(object_ptr);
		if (OP2_TYPE == IS_UNUSED) {
			value = GET_OP_DATA_ZVAL_PTR_UNDEF(BP_VAR_R);
			if (OP_DATA_TYPE == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
				HashTable *ht = Z_ARRVAL_P(object_ptr);
				if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE)) {
					GC_ADDREF(ht);
				}
				value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
				if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE) && !GC_DELREF(ht)) {
					zend_array_destroy(ht);
					ZEND_VM_C_GOTO(assign_dim_error);
				}
			}
			if (OP_DATA_TYPE == IS_CV || OP_DATA_TYPE == IS_VAR) {
				ZVAL_DEREF(value);
			}
			value = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), value);
			if (UNEXPECTED(value == NULL)) {
				zend_cannot_add_element();
				ZEND_VM_C_GOTO(assign_dim_error);
			} else if (OP_DATA_TYPE == IS_CV) {
				if (Z_REFCOUNTED_P(value)) {
					Z_ADDREF_P(value);
				}
			} else if (OP_DATA_TYPE == IS_VAR) {
				zval *free_op_data = EX_VAR((opline+1)->op1.var);
				if (Z_ISREF_P(free_op_data)) {
					if (Z_REFCOUNTED_P(value)) {
						Z_ADDREF_P(value);
					}
					zval_ptr_dtor_nogc(free_op_data);
				}
			} else if (OP_DATA_TYPE == IS_CONST) {
				if (UNEXPECTED(Z_REFCOUNTED_P(value))) {
					Z_ADDREF_P(value);
				}
			}
		} else {
			dim = GET_OP2_ZVAL_PTR_UNDEF(BP_VAR_R);
			if (OP2_TYPE == IS_CONST) {
				variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
			} else {
				variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
			}
			if (UNEXPECTED(variable_ptr == NULL)) {
				ZEND_VM_C_GOTO(assign_dim_error);
			}
			value = GET_OP_DATA_ZVAL_PTR(BP_VAR_R);
			value = zend_assign_to_variable_ex(variable_ptr, value, OP_DATA_TYPE, EX_USES_STRICT_TYPES(), &garbage);
		}
		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
			ZVAL_COPY(EX_VAR(opline->result.var), value);
		}
		if (garbage) {
			GC_DTOR_NO_REF(garbage);
		}
	} else {
		if (EXPECTED(Z_ISREF_P(object_ptr))) {
			object_ptr = Z_REFVAL_P(object_ptr);
			if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
				ZEND_VM_C_GOTO(try_assign_dim_array);
			}
		}
		if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) {
			zend_object *obj = Z_OBJ_P(object_ptr);

			GC_ADDREF(obj);
			dim = GET_OP2_ZVAL_PTR_UNDEF(BP_VAR_R);
			if (OP2_TYPE == IS_CV && UNEXPECTED(Z_ISUNDEF_P(dim))) {
				dim = ZVAL_UNDEFINED_OP2();
			} else if (OP2_TYPE == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
				dim++;
			}

			value = GET_OP_DATA_ZVAL_PTR_UNDEF(BP_VAR_R);
			if (OP_DATA_TYPE == IS_CV && UNEXPECTED(Z_ISUNDEF_P(value))) {
				value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
			} else if (OP_DATA_TYPE & (IS_CV|IS_VAR)) {
				ZVAL_DEREF(value);
			}

			zend_assign_to_object_dim(obj, dim, value OPLINE_CC EXECUTE_DATA_CC);

			FREE_OP_DATA();
			if (UNEXPECTED(GC_DELREF(obj) == 0)) {
				zend_objects_store_del(obj);
			}
		} else if (EXPECTED(Z_TYPE_P(object_ptr) == IS_STRING)) {
			if (OP2_TYPE == IS_UNUSED) {
				zend_use_new_element_for_string();
				FREE_OP_DATA();
				UNDEF_RESULT();
			} else {
				dim = GET_OP2_ZVAL_PTR_UNDEF(BP_VAR_R);
				value = GET_OP_DATA_ZVAL_PTR_UNDEF(BP_VAR_R);
				zend_assign_to_string_offset(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC);
				FREE_OP_DATA();
			}
		} else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
			if (Z_ISREF_P(orig_object_ptr)
			 && ZEND_REF_HAS_TYPE_SOURCES(Z_REF_P(orig_object_ptr))
			 && !zend_verify_ref_array_assignable(Z_REF_P(orig_object_ptr))) {
				dim = GET_OP2_ZVAL_PTR(BP_VAR_R);
				FREE_OP_DATA();
				UNDEF_RESULT();
			} else {
				HashTable *ht = zend_new_array(8);
				uint8_t old_type = Z_TYPE_P(object_ptr);

				ZVAL_ARR(object_ptr, ht);
				if (UNEXPECTED(old_type == IS_FALSE)) {
					GC_ADDREF(ht);
					zend_false_to_array_deprecated();
					if (UNEXPECTED(GC_DELREF(ht) == 0)) {
						zend_array_destroy(ht);
						ZEND_VM_C_GOTO(assign_dim_error);
					}
				}
				ZEND_VM_C_GOTO(try_assign_dim_array);
			}
		} else {
			zend_use_scalar_as_array();
			dim = GET_OP2_ZVAL_PTR(BP_VAR_R);
ZEND_VM_C_LABEL(assign_dim_error):
			FREE_OP_DATA();
			if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
				ZVAL_NULL(EX_VAR(opline->result.var));
			}
		}
	}
	if (OP2_TYPE != IS_UNUSED) {
		FREE_OP2();
	}
	FREE_OP1();
	/* assign_dim has two opcodes! */
	ZEND_VM_NEXT_OPCODE_EX(1, 2);
}

ZEND_VM_HANDLER(22, ZEND_ASSIGN, VAR|CV, CONST|TMP|VAR|CV, SPEC(RETVAL))
{
	USE_OPLINE
	zval *value;
	zval *variable_ptr;

	SAVE_OPLINE();
	value = GET_OP2_ZVAL_PTR(BP_VAR_R);
	variable_ptr = GET_OP1_ZVAL_PTR_PTR_UNDEF(BP_VAR_W);

	if (!ZEND_VM_SPEC || UNEXPECTED(RETURN_VALUE_USED(opline))) {
		zend_refcounted *garbage = NULL;

		value = zend_assign_to_variable_ex(variable_ptr, value, OP2_TYPE, EX_USES_STRICT_TYPES(), &garbage);
		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
			ZVAL_COPY(EX_VAR(opline->result.var), value);
		}
		if (garbage) {
			GC_DTOR_NO_REF(garbage);
		}
	} else {
		value = zend_assign_to_variable(variable_ptr, value, OP2_TYPE, EX_USES_STRICT_TYPES());
	}
	FREE_OP1();
	/* zend_assign_to_variable() always takes care of op2, never free it! */

	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

ZEND_VM_HANDLER(30, ZEND_ASSIGN_REF, VAR|CV, VAR|CV, SRC)
{
	USE_OPLINE
	zval *variable_ptr;
	zval *value_ptr;
	zend_refcounted *garbage = NULL;

	SAVE_OPLINE();
	value_ptr = GET_OP2_ZVAL_PTR_PTR(BP_VAR_W);
	variable_ptr = GET_OP1_ZVAL_PTR_PTR_UNDEF(BP_VAR_W);

	if (OP1_TYPE == IS_VAR &&
	           UNEXPECTED(Z_TYPE_P(EX_VAR(opline->op1.var)) != IS_INDIRECT)) {

		zend_throw_error(NULL, "Cannot assign by reference to an array dimension of an object");
		variable_ptr = &EG(uninitialized_zval);
	} else if (OP2_TYPE == IS_VAR &&
	           opline->extended_value == ZEND_RETURNS_FUNCTION &&
			   UNEXPECTED(!Z_ISREF_P(value_ptr))) {

		variable_ptr = zend_wrong_assign_to_variable_reference(
			variable_ptr, value_ptr, &garbage OPLINE_CC EXECUTE_DATA_CC);
	} else {
		zend_assign_to_variable_reference(variable_ptr, value_ptr, &garbage);
	}

	if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
		ZVAL_COPY(EX_VAR(opline->result.var), variable_ptr);
	}

	if (garbage) {
		GC_DTOR(garbage);
	}

	FREE_OP2();
	FREE_OP1();
	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

ZEND_VM_HANDLER(32, ZEND_ASSIGN_OBJ_REF, VAR|UNUSED|THIS|CV, CONST|TMPVAR|CV, CACHE_SLOT|SRC, SPEC(OP_DATA=VAR|CV))
{
	USE_OPLINE
	zval *property, *container, *value_ptr;

	SAVE_OPLINE();

	container = GET_OP1_OBJ_ZVAL_PTR_PTR_UNDEF(BP_VAR_W);
	property = GET_OP2_ZVAL_PTR(BP_VAR_R);

	value_ptr = GET_OP_DATA_ZVAL_PTR_PTR(BP_VAR_W);

	if (ZEND_VM_SPEC) {
		if (OP1_TYPE == IS_UNUSED) {
			if (OP2_TYPE == IS_CONST) {
				zend_assign_to_property_reference_this_const(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
			} else {
				zend_assign_to_property_reference_this_var(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
			}
		} else {
			if (OP2_TYPE == IS_CONST) {
				zend_assign_to_property_reference_var_const(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
			} else {
				zend_assign_to_property_reference_var_var(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
			}
		}
	} else {
		zend_assign_to_property_reference(container, OP1_TYPE, property, OP2_TYPE, value_ptr OPLINE_CC EXECUTE_DATA_CC);
	}

	FREE_OP1();
	FREE_OP2();
	FREE_OP_DATA();
	ZEND_VM_NEXT_OPCODE_EX(1, 2);
}

/* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CONST|VAR) */
ZEND_VM_HANDLER(33, ZEND_ASSIGN_STATIC_PROP_REF, ANY, ANY, CACHE_SLOT|SRC)
{
	USE_OPLINE
	zval *prop, *value_ptr;
	zend_property_info *prop_info;
	zend_refcounted *garbage = NULL;

	SAVE_OPLINE();

	prop = zend_fetch_static_property_address(&prop_info, opline->extended_value & ~ZEND_RETURNS_FUNCTION, BP_VAR_W, 0 OPLINE_CC EXECUTE_DATA_CC);
	if (UNEXPECTED(!prop)) {
		FREE_OP_DATA();
		UNDEF_RESULT();
		HANDLE_EXCEPTION();
	}

	if (UNEXPECTED(prop_info->flags & ZEND_ACC_PPP_SET_MASK)
	 && UNEXPECTED(!zend_asymmetric_property_has_set_access(prop_info))) {
		zend_asymmetric_visibility_property_modification_error(prop_info, "indirectly modify");
		FREE_OP_DATA();
		UNDEF_RESULT();
		HANDLE_EXCEPTION();
	}

	value_ptr = GET_OP_DATA_ZVAL_PTR_PTR(BP_VAR_W);

	if (OP_DATA_TYPE == IS_VAR && (opline->extended_value & ZEND_RETURNS_FUNCTION) && UNEXPECTED(!Z_ISREF_P(value_ptr))) {
		if (UNEXPECTED(!zend_wrong_assign_to_variable_reference(prop, value_ptr, &garbage OPLINE_CC EXECUTE_DATA_CC))) {
			prop = &EG(uninitialized_zval);
		}
	} else if (ZEND_TYPE_IS_SET(prop_info->type)) {
		prop = zend_assign_to_typed_property_reference(prop_info, prop, value_ptr, &garbage EXECUTE_DATA_CC);
	} else {
		zend_assign_to_variable_reference(prop, value_ptr, &garbage);
	}

	if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
		ZVAL_COPY(EX_VAR(opline->result.var), prop);
	}

	if (garbage) {
		GC_DTOR(garbage);
	}

	FREE_OP_DATA();
	ZEND_VM_NEXT_OPCODE_EX(1, 2);
}

ZEND_VM_HOT_HELPER(zend_leave_helper, ANY, ANY)
{
	zend_execute_data *old_execute_data;
	uint32_t call_info = EX_CALL_INFO();
#if ZEND_VM_KIND != ZEND_VM_KIND_TAILCALL
	/* zend_leave_helper may be called with opline=call_leave_op in TAILCALL VM */
	SAVE_OPLINE();
#endif

	if (EXPECTED((call_info & (ZEND_CALL_CODE|ZEND_CALL_TOP|ZEND_CALL_HAS_SYMBOL_TABLE|ZEND_CALL_FREE_EXTRA_ARGS|ZEND_CALL_ALLOCATED|ZEND_CALL_HAS_EXTRA_NAMED_PARAMS)) == 0)) {
		EG(current_execute_data) = EX(prev_execute_data);
		i_free_compiled_variables(execute_data);

#ifdef ZEND_PREFER_RELOAD
		call_info = EX_CALL_INFO();
#endif
		if (UNEXPECTED(call_info & ZEND_CALL_RELEASE_THIS)) {
			OBJ_RELEASE(Z_OBJ(execute_data->This));
		} else if (UNEXPECTED(call_info & ZEND_CALL_CLOSURE)) {
			OBJ_RELEASE(ZEND_CLOSURE_OBJECT(EX(func)));
		}
		EG(vm_stack_top) = (zval*)execute_data;
		execute_data = EX(prev_execute_data);

		if (UNEXPECTED(EG(exception) != NULL)) {
			zend_rethrow_exception(execute_data);
			HANDLE_EXCEPTION_LEAVE();
		}

		LOAD_NEXT_OPLINE();
		ZEND_VM_LEAVE();
	} else if (EXPECTED((call_info & (ZEND_CALL_CODE|ZEND_CALL_TOP)) == 0)) {
		EG(current_execute_data) = EX(prev_execute_data);
		i_free_compiled_variables(execute_data);

#ifdef ZEND_PREFER_RELOAD
		call_info = EX_CALL_INFO();
#endif
		if (UNEXPECTED(call_info & ZEND_CALL_HAS_SYMBOL_TABLE)) {
			zend_clean_and_cache_symbol_table(EX(symbol_table));
		}

		if (UNEXPECTED(call_info & ZEND_CALL_HAS_EXTRA_NAMED_PARAMS)) {
			zend_free_extra_named_params(EX(extra_named_params));
		}

		/* Free extra args before releasing the closure,
		 * as that may free the op_array. */
		zend_vm_stack_free_extra_args_ex(call_info, execute_data);

		if (UNEXPECTED(call_info & ZEND_CALL_RELEASE_THIS)) {
			OBJ_RELEASE(Z_OBJ(execute_data->This));
		} else if (UNEXPECTED(call_info & ZEND_CALL_CLOSURE)) {
			OBJ_RELEASE(ZEND_CLOSURE_OBJECT(EX(func)));
		}

		old_execute_data = execute_data;
		execute_data = EX(prev_execute_data);
		zend_vm_stack_free_call_frame_ex(call_info, old_execute_data);

		if (UNEXPECTED(EG(exception) != NULL)) {
			zend_rethrow_exception(execute_data);
			HANDLE_EXCEPTION_LEAVE();
		}

		LOAD_NEXT_OPLINE();
		ZEND_VM_LEAVE();
	} else if (EXPECTED((call_info & ZEND_CALL_TOP) == 0)) {
		if (EX(func)->op_array.last_var > 0) {
			zend_detach_symbol_table(execute_data);
			call_info |= ZEND_CALL_NEEDS_REATTACH;
		}
		zend_destroy_static_vars(&EX(func)->op_array);
		destroy_op_array(&EX(func)->op_array);
		efree_size(EX(func), sizeof(zend_op_array));
		old_execute_data = execute_data;
		execute_data = EG(current_execute_data) = EX(prev_execute_data);
		zend_vm_stack_free_call_frame_ex(call_info, old_execute_data);

		if (call_info & ZEND_CALL_NEEDS_REATTACH) {
			if (EX(func)->op_array.last_var > 0) {
				zend_attach_symbol_table(execute_data);
			} else {
				ZEND_ADD_CALL_FLAG(execute_data, ZEND_CALL_NEEDS_REATTACH);
			}
		}
		if (UNEXPECTED(EG(exception) != NULL)) {
			zend_rethrow_exception(execute_data);
			HANDLE_EXCEPTION_LEAVE();
		}

		LOAD_NEXT_OPLINE();
		ZEND_VM_LEAVE();
	} else {
		if (EXPECTED((call_info & ZEND_CALL_CODE) == 0)) {
			EG(current_execute_data) = EX(prev_execute_data);
			i_free_compiled_variables(execute_data);
#ifdef ZEND_PREFER_RELOAD
			call_info = EX_CALL_INFO();
#endif
			if (UNEXPECTED(call_info & (ZEND_CALL_HAS_SYMBOL_TABLE|ZEND_CALL_FREE_EXTRA_ARGS|ZEND_CALL_HAS_EXTRA_NAMED_PARAMS))) {
				if (UNEXPECTED(call_info & ZEND_CALL_HAS_SYMBOL_TABLE)) {
					zend_clean_and_cache_symbol_table(EX(symbol_table));
				}
				zend_vm_stack_free_extra_args_ex(call_info, execute_data);
				if (UNEXPECTED(call_info & ZEND_CALL_HAS_EXTRA_NAMED_PARAMS)) {
					zend_free_extra_named_params(EX(extra_named_params));
				}
			}
			if (UNEXPECTED(call_info & ZEND_CALL_CLOSURE)) {
				OBJ_RELEASE(ZEND_CLOSURE_OBJECT(EX(func)));
			}
			ZEND_VM_RETURN();
		} else /* if (call_kind == ZEND_CALL_TOP_CODE) */ {
			zend_array *symbol_table = EX(symbol_table);

			if (EX(func)->op_array.last_var > 0) {
				zend_detach_symbol_table(execute_data);
				call_info |= ZEND_CALL_NEEDS_REATTACH;
			}
			if (call_info & ZEND_CALL_NEEDS_REATTACH) {
				old_execute_data = EX(prev_execute_data);
				while (old_execute_data) {
					if (old_execute_data->func && (ZEND_CALL_INFO(old_execute_data) & ZEND_CALL_HAS_SYMBOL_TABLE)) {
						if (old_execute_data->symbol_table == symbol_table) {
							if (old_execute_data->func->op_array.last_var > 0) {
								zend_attach_symbol_table(old_execute_data);
							} else {
								ZEND_ADD_CALL_FLAG(old_execute_data, ZEND_CALL_NEEDS_REATTACH);
							}
						}
						break;
					}
					old_execute_data = old_execute_data->prev_execute_data;
				}
			}
			EG(current_execute_data) = EX(prev_execute_data);
			ZEND_VM_RETURN();
		}
	}
}

ZEND_VM_HOT_HANDLER(42, ZEND_JMP, JMP_ADDR, ANY)
{
	USE_OPLINE

	ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op1), 0);
}

ZEND_VM_HOT_NOCONST_HANDLER(43, ZEND_JMPZ, CONST|TMPVAR|CV, JMP_ADDR)
{
	USE_OPLINE
	zval *val;
	uint8_t op1_type;

	val = GET_OP1_ZVAL_PTR_UNDEF(BP_VAR_R);

	if (Z_TYPE_INFO_P(val) == IS_TRUE) {
		ZEND_VM_NEXT_OPCODE();
	} else if (EXPECTED(Z_TYPE_INFO_P(val) <= IS_TRUE)) {
		if (OP1_TYPE == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(val) == IS_UNDEF)) {
			SAVE_OPLINE();
			ZVAL_UNDEFINED_OP1();
			if (UNEXPECTED(EG(exception))) {
				HANDLE_EXCEPTION();
			}
		}
		ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0);
	}

	SAVE_OPLINE();
	op1_type = OP1_TYPE;
	if (i_zend_is_true(val)) {
		opline++;
	} else {
		opline = OP_JMP_ADDR(opline, opline->op2);
	}
	if (op1_type & (IS_TMP_VAR|IS_VAR)) {
		zval_ptr_dtor_nogc(val);
	}
	ZEND_VM_JMP(opline);
}

ZEND_VM_HOT_NOCONST_HANDLER(44, ZEND_JMPNZ, CONST|TMPVAR|CV, JMP_ADDR)
{
	USE_OPLINE
	zval *val;
	uint8_t op1_type;

	val = GET_OP1_ZVAL_PTR_UNDEF(BP_VAR_R);

	if (Z_TYPE_INFO_P(val) == IS_TRUE) {
		ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0);
	} else if (EXPECTED(Z_TYPE_INFO_P(val) <= IS_TRUE)) {
		if (OP1_TYPE == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(val) == IS_UNDEF)) {
			SAVE_OPLINE();
			ZVAL_UNDEFINED_OP1();
			if (UNEXPECTED(EG(exception))) {
				HANDLE_EXCEPTION();
			}
		}
		ZEND_VM_NEXT_OPCODE();
	}

	SAVE_OPLINE();
	op1_type = OP1_TYPE;
	if (i_zend_is_true(val)) {
		opline = OP_JMP_ADDR(opline, opline->op2);
	} else {
		opline++;
	}
	if (op1_type & (IS_TMP_VAR|IS_VAR)) {
		zval_ptr_dtor_nogc(val);
	}
	ZEND_VM_JMP(opline);
}

ZEND_VM_COLD_CONST_HANDLER(46, ZEND_JMPZ_EX, CONST|TMPVAR|CV, JMP_ADDR)
{
	USE_OPLINE
	zval *val;
	bool ret;

	val = GET_OP1_ZVAL_PTR_UNDEF(BP_VAR_R);

	if (Z_TYPE_INFO_P(val) == IS_TRUE) {
		ZVAL_TRUE(EX_VAR(opline->result.var));
		ZEND_VM_NEXT_OPCODE();
	} else if (EXPECTED(Z_TYPE_INFO_P(val) <= IS_TRUE)) {
		ZVAL_FALSE(EX_VAR(opline->result.var));
		if (OP1_TYPE == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(val) == IS_UNDEF)) {
			SAVE_OPLINE();
			ZVAL_UNDEFINED_OP1();
			if (UNEXPECTED(EG(exception))) {
				HANDLE_EXCEPTION();
			}
		}
		ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0);
	}

	SAVE_OPLINE();
	ret = i_zend_is_true(val);
	FREE_OP1();
	if (ret) {
		ZVAL_TRUE(EX_VAR(opline->result.var));
		opline++;
	} else {
		ZVAL_FALSE(EX_VAR(opline->result.var));
		opline = OP_JMP_ADDR(opline, opline->op2);
	}
	ZEND_VM_JMP(opline);
}

ZEND_VM_COLD_CONST_HANDLER(47, ZEND_JMPNZ_EX, CONST|TMPVAR|CV, JMP_ADDR)
{
	USE_OPLINE
	zval *val;
	bool ret;

	val = GET_OP1_ZVAL_PTR_UNDEF(BP_VAR_R);

	if (Z_TYPE_INFO_P(val) == IS_TRUE) {
		ZVAL_TRUE(EX_VAR(opline->result.var));
		ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0);
	} else if (EXPECTED(Z_TYPE_INFO_P(val) <= IS_TRUE)) {
		ZVAL_FALSE(EX_VAR(opline->result.var));
		if (OP1_TYPE == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(val) == IS_UNDEF)) {
			SAVE_OPLINE();
			ZVAL_UNDEFINED_OP1();
			ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
		} else {
			ZEND_VM_NEXT_OPCODE();
		}
	}

	SAVE_OPLINE();
	ret = i_zend_is_true(val);
	FREE_OP1();
	if (ret) {
		ZVAL_TRUE(EX_VAR(opline->result.var));
		opline = OP_JMP_ADDR(opline, opline->op2);
	} else {
		ZVAL_FALSE(EX_VAR(opline->result.var));
		opline++;
	}
	ZEND_VM_JMP(opline);
}

ZEND_VM_HANDLER(70, ZEND_FREE, TMPVAR, LOOP_END)
{
	USE_OPLINE

	SAVE_OPLINE();
	FREE_OP1();
	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

ZEND_VM_HOT_HANDLER(127, ZEND_FE_FREE, TMPVAR, LOOP_END)
{
	zval *var;
	USE_OPLINE

	var = EX_VAR(opline->op1.var);
	if (Z_TYPE_P(var) != IS_ARRAY) {
		SAVE_OPLINE();
		if (Z_FE_ITER_P(var) != (uint32_t)-1) {
			zend_hash_iterator_del(Z_FE_ITER_P(var));
		}
		zval_ptr_dtor_nogc(var);
		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
	}

	/* This is freeing an array. Use an inlined version of zval_ptr_dtor_nogc. */
	/* PHP only needs to save the opline and check for an exception if the last reference to the array was garbage collected (destructors of elements in the array could throw an exception) */
	if (Z_REFCOUNTED_P(var) && !Z_DELREF_P(var)) {
		SAVE_OPLINE();
		rc_dtor_func(Z_COUNTED_P(var));
		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
	}
	ZEND_VM_NEXT_OPCODE();
}

ZEND_VM_COLD_CONSTCONST_HANDLER(53, ZEND_FAST_CONCAT, CONST|TMPVAR|CV, CONST|TMPVAR|CV)
{
	USE_OPLINE
	zval *op1, *op2;
	zend_string *op1_str, *op2_str, *str;


	op1 = GET_OP1_ZVAL_PTR_UNDEF(BP_VAR_R);
	op2 = GET_OP2_ZVAL_PTR_UNDEF(BP_VAR_R);
	if ((OP1_TYPE == IS_CONST || EXPECTED(Z_TYPE_P(op1) == IS_STRING)) &&
	    (OP2_TYPE == IS_CONST || EXPECTED(Z_TYPE_P(op2) == IS_STRING))) {
		zend_string *op1_str = Z_STR_P(op1);
		zend_string *op2_str = Z_STR_P(op2);
		zend_string *str;
		uint32_t flags = ZSTR_GET_COPYABLE_CONCAT_PROPERTIES_BOTH(op1_str, op2_str);

		if (OP1_TYPE != IS_CONST && UNEXPECTED(ZSTR_LEN(op1_str) == 0)) {
			if (OP2_TYPE == IS_CONST || OP2_TYPE == IS_CV) {
				ZVAL_STR_COPY(EX_VAR(opline->result.var), op2_str);
			} else {
				ZVAL_STR(EX_VAR(opline->result.var), op2_str);
			}
			if (OP1_TYPE & (IS_TMP_VAR|IS_VAR)) {
				zend_string_release_ex(op1_str, 0);
			}
		} else if (OP2_TYPE != IS_CONST && UNEXPECTED(ZSTR_LEN(op2_str) == 0)) {
			if (OP1_TYPE == IS_CONST || OP1_TYPE == IS_CV) {
				ZVAL_STR_COPY(EX_VAR(opline->result.var), op1_str);
			} else {
				ZVAL_STR(EX_VAR(opline->result.var), op1_str);
			}
			if (OP2_TYPE & (IS_TMP_VAR|IS_VAR)) {
				zend_string_release_ex(op2_str, 0);
			}
		} else if (OP1_TYPE != IS_CONST && OP1_TYPE != IS_CV &&
		    !ZSTR_IS_INTERNED(op1_str) && GC_REFCOUNT(op1_str) == 1) {
			size_t len = ZSTR_LEN(op1_str);

			str = zend_string_extend(op1_str, len + ZSTR_LEN(op2_str), 0);
			memcpy(ZSTR_VAL(str) + len, ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
			GC_ADD_FLAGS(str, flags);
			ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
			if (OP2_TYPE & (IS_TMP_VAR|IS_VAR)) {
				zend_string_release_ex(op2_str, 0);
			}
		} else {
			str = zend_string_alloc(ZSTR_LEN(op1_str) + ZSTR_LEN(op2_str), 0);
			memcpy(ZSTR_VAL(str), ZSTR_VAL(op1_str), ZSTR_LEN(op1_str));
			memcpy(ZSTR_VAL(str) + ZSTR_LEN(op1_str), ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
			GC_ADD_FLAGS(str, flags);
			ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
			if (OP1_TYPE & (IS_TMP_VAR|IS_VAR)) {
				zend_string_release_ex(op1_str, 0);
			}
			if (OP2_TYPE & (IS_TMP_VAR|IS_VAR)) {
				zend_string_release_ex(op2_str, 0);
			}
		}
		ZEND_VM_NEXT_OPCODE();
	}

	SAVE_OPLINE();
	if (OP1_TYPE == IS_CONST) {
		op1_str = Z_STR_P(op1);
	} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
		op1_str = zend_string_copy(Z_STR_P(op1));
	} else {
		if (OP1_TYPE == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
			ZVAL_UNDEFINED_OP1();
		}
		op1_str = zval_get_string_func(op1);
	}
	if (OP2_TYPE == IS_CONST) {
		op2_str = Z_STR_P(op2);
	} else if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
		op2_str = zend_string_copy(Z_STR_P(op2));
	} else {
		if (OP2_TYPE == IS_CV && UNEXPECTED(Z_TYPE_P(op2) == IS_UNDEF)) {
			ZVAL_UNDEFINED_OP2();
		}
		op2_str = zval_get_string_func(op2);
	}
	do {
		if (OP1_TYPE != IS_CONST) {
			if (UNEXPECTED(ZSTR_LEN(op1_str) == 0)) {
				if (OP2_TYPE == IS_CONST) {
					if (UNEXPECTED(Z_REFCOUNTED_P(op2))) {
						GC_ADDREF(op2_str);
					}
				}
				ZVAL_STR(EX_VAR(opline->result.var), op2_str);
				zend_string_release_ex(op1_str, 0);
				break;
			}
		}
		if (OP2_TYPE != IS_CONST) {
			if (UNEXPECTED(ZSTR_LEN(op2_str) == 0)) {
				if (OP1_TYPE == IS_CONST) {
					if (UNEXPECTED(Z_REFCOUNTED_P(op1))) {
						GC_ADDREF(op1_str);
					}
				}
				ZVAL_STR(EX_VAR(opline->result.var), op1_str);
				zend_string_release_ex(op2_str, 0);
				break;
			}
		}
		str = zend_string_alloc(ZSTR_LEN(op1_str) + ZSTR_LEN(op2_str), 0);
		memcpy(ZSTR_VAL(str), ZSTR_VAL(op1_str), ZSTR_LEN(op1_str));
		memcpy(ZSTR_VAL(str) + ZSTR_LEN(op1_str), ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);

		ZSTR_COPY_CONCAT_PROPERTIES_BOTH(str, op1_str, op2_str);
		ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
		if (OP1_TYPE != IS_CONST) {
			zend_string_release_ex(op1_str, 0);
		}
		if (OP2_TYPE != IS_CONST) {
			zend_string_release_ex(op2_str, 0);
		}
	} while (0);
	FREE_OP1();
	FREE_OP2();
	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

ZEND_VM_HANDLER(54, ZEND_ROPE_INIT, UNUSED, CONST|TMPVAR|CV, NUM)
{
	USE_OPLINE
	zend_string **rope;
	zval *var;

	/* Compiler allocates the necessary number of zval slots to keep the rope */
	rope = (zend_string**)EX_VAR(opline->result.var);
	if (OP2_TYPE == IS_CONST) {
		var = GET_OP2_ZVAL_PTR(BP_VAR_R);
		rope[0] = Z_STR_P(var);
		if (UNEXPECTED(Z_REFCOUNTED_P(var))) {
			Z_ADDREF_P(var);
		}
	} else {
		var = GET_OP2_ZVAL_PTR_UNDEF(BP_VAR_R);
		if (EXPECTED(Z_TYPE_P(var) == IS_STRING)) {
			if (OP2_TYPE == IS_CV) {
				rope[0] = zend_string_copy(Z_STR_P(var));
			} else {
				rope[0] = Z_STR_P(var);
			}
		} else {
			SAVE_OPLINE();
			if (OP2_TYPE == IS_CV && UNEXPECTED(Z_TYPE_P(var) == IS_UNDEF)) {
				ZVAL_UNDEFINED_OP2();
			}
			rope[0] = zval_get_string_func(var);
			FREE_OP2();
			ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
		}
	}
	ZEND_VM_NEXT_OPCODE();
}

ZEND_VM_HANDLER(55, ZEND_ROPE_ADD, TMP, CONST|TMPVAR|CV, NUM)
{
	USE_OPLINE
	zend_string **rope;
	zval *var;

	/* op1 and result are the same */
	rope = (zend_string**)EX_VAR(opline->op1.var);
	if (OP2_TYPE == IS_CONST) {
		var = GET_OP2_ZVAL_PTR(BP_VAR_R);
		rope[opline->extended_value] = Z_STR_P(var);
		if (UNEXPECTED(Z_REFCOUNTED_P(var))) {
			Z_ADDREF_P(var);
		}
	} else {
		var = GET_OP2_ZVAL_PTR_UNDEF(BP_VAR_R);
		if (EXPECTED(Z_TYPE_P(var) == IS_STRING)) {
			if (OP2_TYPE == IS_CV) {
				rope[opline->extended_value] = zend_string_copy(Z_STR_P(var));
			} else {
				rope[opline->extended_value] = Z_STR_P(var);
			}
		} else {
			SAVE_OPLINE();
			if (OP2_TYPE == IS_CV && UNEXPECTED(Z_TYPE_P(var) == IS_UNDEF)) {
				ZVAL_UNDEFINED_OP2();
			}
			rope[opline->extended_value] = zval_get_string_func(var);
			FREE_OP2();
			ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
		}
	}
	ZEND_VM_NEXT_OPCODE();
}

ZEND_VM_HANDLER(56, ZEND_ROPE_END, TMP, CONST|TMPVAR|CV, NUM)
{
	USE_OPLINE
	zend_string **rope;
	zval *var, *ret;
	uint32_t i;

	rope = (zend_string**)EX_VAR(opline->op1.var);
	if (OP2_TYPE == IS_CONST) {
		var = GET_OP2_ZVAL_PTR(BP_VAR_R);
		rope[opline->extended_value] = Z_STR_P(var);
		if (UNEXPECTED(Z_REFCOUNTED_P(var))) {
			Z_ADDREF_P(var);
		}
	} else {
		var = GET_OP2_ZVAL_PTR_UNDEF(BP_VAR_R);
		if (EXPECTED(Z_TYPE_P(var) == IS_STRING)) {
			if (OP2_TYPE == IS_CV) {
				rope[opline->extended_value] = zend_string_copy(Z_STR_P(var));
			} else {
				rope[opline->extended_value] = Z_STR_P(var);
			}
		} else {
			SAVE_OPLINE();
			if (OP2_TYPE == IS_CV && UNEXPECTED(Z_TYPE_P(var) == IS_UNDEF)) {
				ZVAL_UNDEFINED_OP2();
			}
			rope[opline->extended_value] = zval_get_string_func(var);
			FREE_OP2();
			if (UNEXPECTED(EG(exception))) {
				for (i = 0; i <= opline->extended_value; i++) {
					zend_string_release_ex(rope[i], 0);
				}
				ZVAL_UNDEF(EX_VAR(opline->result.var));
				HANDLE_EXCEPTION();
			}
		}
	}

	size_t len = 0;
	uint32_t flags = ZSTR_COPYABLE_CONCAT_PROPERTIES;
	for (i = 0; i <= opline->extended_value; i++) {
		flags &= ZSTR_GET_COPYABLE_CONCAT_PROPERTIES(rope[i]);
		len += ZSTR_LEN(rope[i]);
	}
	ret = EX_VAR(opline->result.var);
	ZVAL_STR(ret, zend_string_alloc(len, 0));
	GC_ADD_FLAGS(Z_STR_P(ret), flags);

	char *target = Z_STRVAL_P(ret);
	for (i = 0; i <= opline->extended_value; i++) {
		memcpy(target, ZSTR_VAL(rope[i]), ZSTR_LEN(rope[i]));
		target += ZSTR_LEN(rope[i]);
		zend_string_release_ex(rope[i], 0);
	}
	*target = '\0';

	ZEND_VM_NEXT_OPCODE();
}

ZEND_VM_HANDLER(109, ZEND_FETCH_CLASS, UNUSED|CLASS_FETCH, CONST|TMPVAR|UNUSED|CV, CACHE_SLOT)
{
	zval *class_name;
	USE_OPLINE

	SAVE_OPLINE();
	if (OP2_TYPE == IS_UNUSED) {
		Z_CE_P(EX_VAR(opline->result.var)) = zend_fetch_class(NULL, opline->op1.num);
		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
	} else if (OP2_TYPE == IS_CONST) {
		zend_class_entry *ce = CACHED_PTR(opline->extended_value);

		if (UNEXPECTED(ce == NULL)) {
			class_name = GET_OP2_ZVAL_PTR_UNDEF(BP_VAR_R);
			ce = zend_fetch_class_by_name(Z_STR_P(class_name), Z_STR_P(class_name + 1), opline->op1.num);
			CACHE_PTR(opline->extended_value, ce);
		}
		Z_CE_P(EX_VAR(opline->result.var)) = ce;
	} else {
		class_name = GET_OP2_ZVAL_PTR_UNDEF(BP_VAR_R);
ZEND_VM_C_LABEL(try_class_name):
		if (Z_TYPE_P(class_name) == IS_OBJECT) {
			Z_CE_P(EX_VAR(opline->result.var)) = Z_OBJCE_P(class_name);
		} else if (Z_TYPE_P(class_name) == IS_STRING) {
			Z_CE_P(EX_VAR(opline->result.var)) = zend_fetch_class(Z_STR_P(class_name), opline->op1.num);
		} else if ((OP2_TYPE & (IS_VAR|IS_CV)) && Z_TYPE_P(class_name) == IS_REFERENCE) {
			class_name = Z_REFVAL_P(class_name);
			ZEND_VM_C_GOTO(try_class_name);
		} else {
			if (OP2_TYPE == IS_CV && UNEXPECTED(Z_TYPE_P(class_name) == IS_UNDEF)) {
				ZVAL_UNDEFINED_OP2();
				if (UNEXPECTED(EG(exception) != NULL)) {
					HANDLE_EXCEPTION();
				}
			}
			zend_throw_error(NULL, "Class name must be a valid object or a string");
		}
	}

	FREE_OP2();
	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

ZEND_VM_HOT_OBJ_HANDLER(112, ZEND_INIT_METHOD_CALL, CONST|TMPVAR|UNUSED|THIS|CV, CONST|TMPVAR|CV, NUM|CACHE_SLOT)
{
	USE_OPLINE
	zval *function_name;
	zval *object;
	zend_function *fbc;
	zend_class_entry *called_scope;
	zend_object *obj;
	zend_execute_data *call;
	uint32_t call_info;

	SAVE_OPLINE();

	object = GET_OP1_OBJ_ZVAL_PTR_UNDEF(BP_VAR_R);

	if (OP2_TYPE != IS_CONST) {
		function_name = GET_OP2_ZVAL_PTR_UNDEF(BP_VAR_R);
	}

	if (OP2_TYPE != IS_CONST &&
	    UNEXPECTED(Z_TYPE_P(function_name) != IS_STRING)) {
		do {
			if ((OP2_TYPE & (IS_VAR|IS_CV)) && Z_ISREF_P(function_name)) {
				function_name = Z_REFVAL_P(function_name);
				if (EXPECTED(Z_TYPE_P(function_name) == IS_STRING)) {
					break;
				}
			} else if (OP2_TYPE == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) {
				ZVAL_UNDEFINED_OP2();
				if (UNEXPECTED(EG(exception) != NULL)) {
					FREE_OP1();
					HANDLE_EXCEPTION();
				}
			}
			zend_throw_error(NULL, "Method name must be a string");
			FREE_OP2();
			FREE_OP1();
			HANDLE_EXCEPTION();
		} while (0);
	}

	if (OP1_TYPE == IS_UNUSED) {
		obj = Z_OBJ_P(object);
	} else {
		do {
			if (OP1_TYPE != IS_CONST && EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
				obj = Z_OBJ_P(object);
			} else {
				if ((OP1_TYPE & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(object))) {
					zend_reference *ref = Z_REF_P(object);

					object = &ref->val;
					if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
						obj = Z_OBJ_P(object);
						if (OP1_TYPE & IS_VAR) {
							if (UNEXPECTED(GC_DELREF(ref) == 0)) {
								efree_size(ref, sizeof(zend_reference));
							} else {
								Z_ADDREF_P(object);
							}
						}
						break;
					}
				}
				if (OP1_TYPE == IS_CV && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
					object = ZVAL_UNDEFINED_OP1();
					if (UNEXPECTED(EG(exception) != NULL)) {
						if (OP2_TYPE != IS_CONST) {
							FREE_OP2();
						}
						HANDLE_EXCEPTION();
					}
				}
				if (OP2_TYPE == IS_CONST) {
					function_name = GET_OP2_ZVAL_PTR_UNDEF(BP_VAR_R);
				}
				zend_invalid_method_call(object, function_name);
				FREE_OP2();
				FREE_OP1();
				HANDLE_EXCEPTION();
			}
		} while (0);
	}

	called_scope = obj->ce;

	if (OP2_TYPE == IS_CONST &&
	    EXPECTED(CACHED_PTR(opline->result.num) == called_scope)) {
		fbc = CACHED_PTR(opline->result.num + sizeof(void*));
	} else {
		zend_object *orig_obj = obj;

		if (OP2_TYPE == IS_CONST) {
			function_name = GET_OP2_ZVAL_PTR_UNDEF(BP_VAR_R);
		}

		/* First, locate the function. */
		fbc = obj->handlers->get_method(&obj, Z_STR_P(function_name), ((OP2_TYPE == IS_CONST) ? (RT_CONSTANT(opline, opline->op2) + 1) : NULL));
		if (UNEXPECTED(fbc == NULL)) {
			if (EXPECTED(!EG(exception))) {
				zend_undefined_method(orig_obj->ce, Z_STR_P(function_name));
			}
			FREE_OP2();
			if ((OP1_TYPE & (IS_VAR|IS_TMP_VAR)) && GC_DELREF(orig_obj) == 0) {
				zend_objects_store_del(orig_obj);
			}
			HANDLE_EXCEPTION();
		}
		if (OP2_TYPE == IS_CONST &&
		    EXPECTED(!(fbc->common.fn_flags & (ZEND_ACC_CALL_VIA_TRAMPOLINE|ZEND_ACC_NEVER_CACHE))) &&
		    EXPECTED(obj == orig_obj)) {
			CACHE_POLYMORPHIC_PTR(opline->result.num, called_scope, fbc);
		}
		if ((OP1_TYPE & (IS_VAR|IS_TMP_VAR)) && UNEXPECTED(obj != orig_obj)) {
			GC_ADDREF(obj); /* For $this pointer */
			if (GC_DELREF(orig_obj) == 0) {
				zend_objects_store_del(orig_obj);
			}
		}
		if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!RUN_TIME_CACHE(&fbc->op_array))) {
			init_func_run_time_cache(&fbc->op_array);
		}
	}

	if (OP2_TYPE != IS_CONST) {
		FREE_OP2();
	}

	call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_HAS_THIS;
	if (UNEXPECTED((fbc->common.fn_flags & ZEND_ACC_STATIC) != 0)) {
		if ((OP1_TYPE & (IS_VAR|IS_TMP_VAR)) && GC_DELREF(obj) == 0) {
			zend_objects_store_del(obj);
			if (UNEXPECTED(EG(exception))) {
				HANDLE_EXCEPTION();
			}
		}
		/* call static method */
		obj = (zend_object*)called_scope;
		call_info = ZEND_CALL_NESTED_FUNCTION;
	} else if (OP1_TYPE & (IS_VAR|IS_TMP_VAR|IS_CV)) {
		if (OP1_TYPE == IS_CV) {
			GC_ADDREF(obj); /* For $this pointer */
		}
		/* CV may be changed indirectly (e.g. when it's a reference) */
		call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_HAS_THIS | ZEND_CALL_RELEASE_THIS;
	}

	call = zend_vm_stack_push_call_frame(call_info,
		fbc, opline->extended_value, obj);
	call->prev_execute_data = EX(call);
	EX(call) = call;

	ZEND_VM_NEXT_OPCODE();
}

ZEND_VM_HANDLER(113, ZEND_INIT_STATIC_METHOD_CALL, UNUSED|CLASS_FETCH|CONST|VAR, CONST|TMPVAR|UNUSED|CONSTRUCTOR|CV, NUM|CACHE_SLOT)
{
	USE_OPLINE
	zval *function_name;
	zend_class_entry *ce;
	uint32_t call_info;
	zend_function *fbc;
	zend_execute_data *call;

	SAVE_OPLINE();

	if (OP1_TYPE == IS_CONST) {
		/* no function found. try a static method in class */
		ce = CACHED_PTR(opline->result.num);
		if (UNEXPECTED(ce == NULL)) {
			ce = zend_fetch_class_by_name(Z_STR_P(RT_CONSTANT(opline, opline->op1)), Z_STR_P(RT_CONSTANT(opline, opline->op1) + 1), ZEND_FETCH_CLASS_DEFAULT | ZEND_FETCH_CLASS_EXCEPTION);
			if (UNEXPECTED(ce == NULL)) {
				FREE_OP2();
				HANDLE_EXCEPTION();
			}
			if (OP2_TYPE != IS_CONST) {
				CACHE_PTR(opline->result.num, ce);
			}
		}
	} else if (OP1_TYPE == IS_UNUSED) {
		ce = zend_fetch_class(NULL, opline->op1.num);
		if (UNEXPECTED(ce == NULL)) {
			FREE_OP2();
			HANDLE_EXCEPTION();
		}
	} else {
		ce = Z_CE_P(EX_VAR(opline->op1.var));
	}

	if (OP1_TYPE == IS_CONST &&
	    OP2_TYPE == IS_CONST &&
	    EXPECTED((fbc = CACHED_PTR(opline->result.num + sizeof(void*))) != NULL)) {
		/* nothing to do */
	} else if (OP1_TYPE != IS_CONST &&
	           OP2_TYPE == IS_CONST &&
	           EXPECTED(CACHED_PTR(opline->result.num) == ce)) {
		fbc = CACHED_PTR(opline->result.num + sizeof(void*));
	} else if (OP2_TYPE != IS_UNUSED) {
		function_name = GET_OP2_ZVAL_PTR_UNDEF(BP_VAR_R);
		if (OP2_TYPE != IS_CONST) {
			if (UNEXPECTED(Z_TYPE_P(function_name) != IS_STRING)) {
				do {
					if (OP2_TYPE & (IS_VAR|IS_CV) && Z_ISREF_P(function_name)) {
						function_name = Z_REFVAL_P(function_name);
						if (EXPECTED(Z_TYPE_P(function_name) == IS_STRING)) {
							break;
						}
					} else if (OP2_TYPE == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) {
						ZVAL_UNDEFINED_OP2();
						if (UNEXPECTED(EG(exception) != NULL)) {
							HANDLE_EXCEPTION();
						}
					}
					zend_throw_error(NULL, "Method name must be a string");
					FREE_OP2();
					HANDLE_EXCEPTION();
				} while (0);
			}
		}

		if (ce->get_static_method) {
			fbc = ce->get_static_method(ce, Z_STR_P(function_name));
		} else {
			fbc = zend_std_get_static_method(ce, Z_STR_P(function_name), ((OP2_TYPE == IS_CONST) ? (RT_CONSTANT(opline, opline->op2) + 1) : NULL));
		}
		if (UNEXPECTED(fbc == NULL)) {
			if (EXPECTED(!EG(exception))) {
				zend_undefined_method(ce, Z_STR_P(function_name));
			}
			FREE_OP2();
			HANDLE_EXCEPTION();
		}
		if (OP2_TYPE == IS_CONST &&
		    EXPECTED(!(fbc->common.fn_flags & (ZEND_ACC_CALL_VIA_TRAMPOLINE|ZEND_ACC_NEVER_CACHE))) &&
			EXPECTED(!(fbc->common.scope->ce_flags & ZEND_ACC_TRAIT))) {
			CACHE_POLYMORPHIC_PTR(opline->result.num, ce, fbc);
		}
		if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!RUN_TIME_CACHE(&fbc->op_array))) {
			init_func_run_time_cache(&fbc->op_array);
		}
		if (OP2_TYPE != IS_CONST) {
			FREE_OP2();
		}
	} else {
		if (UNEXPECTED(ce->constructor == NULL)) {
			zend_throw_error(NULL, "Cannot call constructor");
			HANDLE_EXCEPTION();
		}
		if (Z_TYPE(EX(This)) == IS_OBJECT && Z_OBJ(EX(This))->ce != ce->constructor->common.scope && (ce->constructor->common.fn_flags & ZEND_ACC_PRIVATE)) {
			zend_throw_error(NULL, "Cannot call private %s::__construct()", ZSTR_VAL(ce->name));
			HANDLE_EXCEPTION();
		}
		fbc = ce->constructor;
		if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!RUN_TIME_CACHE(&fbc->op_array))) {
			init_func_run_time_cache(&fbc->op_array);
		}
	}

	if (!(fbc->common.fn_flags & ZEND_ACC_STATIC)) {
		if (Z_TYPE(EX(This)) == IS_OBJECT && instanceof_function(Z_OBJCE(EX(This)), ce)) {
			ce = (zend_class_entry*)Z_OBJ(EX(This));
			call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_HAS_THIS;
		} else {
			zend_non_static_method_call(fbc);
			HANDLE_EXCEPTION();
		}
	} else {
		/* previous opcode is ZEND_FETCH_CLASS */
		if (OP1_TYPE == IS_UNUSED
		 && ((opline->op1.num & ZEND_FETCH_CLASS_MASK) == ZEND_FETCH_CLASS_PARENT ||
		     (opline->op1.num & ZEND_FETCH_CLASS_MASK) == ZEND_FETCH_CLASS_SELF)) {
			if (Z_TYPE(EX(This)) == IS_OBJECT) {
				ce = Z_OBJCE(EX(This));
			} else {
				ce = Z_CE(EX(This));
			}
		}
		call_info = ZEND_CALL_NESTED_FUNCTION;
	}

	call = zend_vm_stack_push_call_frame(call_info,
		fbc, opline->extended_value, ce);
	call->prev_execute_data = EX(call);
	EX(call) = call;

	ZEND_VM_NEXT_OPCODE();
}

ZEND_VM_HOT_HANDLER(59, ZEND_INIT_FCALL_BY_NAME, ANY, CONST, NUM|CACHE_SLOT)
{
	USE_OPLINE
	zend_function *fbc;
	zval *function_name, *func;
	zend_execute_data *call;

	fbc = CACHED_PTR(opline->result.num);
	if (UNEXPECTED(fbc == NULL)) {
		function_name = (zval*)RT_CONSTANT(opline, opline->op2);
		func = zend_hash_find_known_hash(EG(function_table), Z_STR_P(function_name+1));
		if (UNEXPECTED(func == NULL)) {
			ZEND_VM_DISPATCH_TO_HELPER(zend_undefined_function_helper);
		}
		fbc = Z_FUNC_P(func);
		if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!RUN_TIME_CACHE(&fbc->op_array))) {
			init_func_run_time_cache(&fbc->op_array);
		}
		CACHE_PTR(opline->result.num, fbc);
	}
	call = _zend_vm_stack_push_call_frame(ZEND_CALL_NESTED_FUNCTION,
		fbc, opline->extended_value, NULL);
	call->prev_execute_data = EX(call);
	EX(call) = call;

	ZEND_VM_NEXT_OPCODE();
}

ZEND_VM_HANDLER(128, ZEND_INIT_DYNAMIC_CALL, ANY, CONST|TMPVAR|CV, NUM)
{
	USE_OPLINE
	zval *function_name;
	zend_execute_data *call;

	SAVE_OPLINE();
	function_name = GET_OP2_ZVAL_PTR_UNDEF(BP_VAR_R);

ZEND_VM_C_LABEL(try_function_name):
	if (OP2_TYPE != IS_CONST && EXPECTED(Z_TYPE_P(function_name) == IS_STRING)) {
		call = zend_init_dynamic_call_string(Z_STR_P(function_name), opline->extended_value);
	} else if (OP2_TYPE != IS_CONST && EXPECTED(Z_TYPE_P(function_name) == IS_OBJECT)) {
		call = zend_init_dynamic_call_object(Z_OBJ_P(function_name), opline->extended_value);
	} else if (EXPECTED(Z_TYPE_P(function_name) == IS_ARRAY)) {
		call = zend_init_dynamic_call_array(Z_ARRVAL_P(function_name), opline->extended_value);
	} else if ((OP2_TYPE & (IS_VAR|IS_CV)) && EXPECTED(Z_TYPE_P(function_name) == IS_REFERENCE)) {
		function_name = Z_REFVAL_P(function_name);
		ZEND_VM_C_GOTO(try_function_name);
	} else {
		if (OP2_TYPE == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) {
			function_name = ZVAL_UNDEFINED_OP2();
			if (UNEXPECTED(EG(exception) != NULL)) {
				HANDLE_EXCEPTION();
			}
		}
		zend_throw_error(NULL, "Value of type %s is not callable",
			zend_zval_type_name(function_name));
		call = NULL;
	}

	if (OP2_TYPE & (IS_VAR|IS_TMP_VAR)) {
		FREE_OP2();
		if (UNEXPECTED(EG(exception))) {
			if (call) {
				 if (call->func->common.fn_flags & ZEND_ACC_CALL_VIA_TRAMPOLINE) {
					zend_string_release_ex(call->func->common.function_name, 0);
					zend_free_trampoline(call->func);
				}
				zend_vm_stack_free_call_frame(call);
			}
			HANDLE_EXCEPTION();
		}
	} else if (!call) {
		HANDLE_EXCEPTION();
	}

	call->prev_execute_data = EX(call);
	EX(call) = call;

	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

ZEND_VM_HANDLER(118, ZEND_INIT_USER_CALL, CONST, CONST|TMPVAR|CV, NUM)
{
	USE_OPLINE
	zval *function_name;
	zend_fcall_info_cache fcc;
	char *error = NULL;
	zend_function *func;
	void *object_or_called_scope;
	zend_execute_data *call;
	uint32_t call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_DYNAMIC;

	SAVE_OPLINE();
	function_name = GET_OP2_ZVAL_PTR(BP_VAR_R);
	if (zend_is_callable_ex(function_name, NULL, 0, NULL, &fcc, &error)) {
		ZEND_ASSERT(!error);

		/* Deprecation can be emitted from zend_is_callable_ex(), which can
		 * invoke a user error handler and throw an exception.
		 * For the CONST and CV case we reuse the same exception block below
		 * to make sure we don't increase VM size too much. */
		if (!(OP2_TYPE & (IS_TMP_VAR|IS_VAR)) && UNEXPECTED(EG(exception))) {
			FREE_OP2();
			HANDLE_EXCEPTION();
		}

		func = fcc.function_handler;
		object_or_called_scope = fcc.called_scope;
		if (func->common.fn_flags & ZEND_ACC_CLOSURE) {
			/* Delay closure destruction until its invocation */
			GC_ADDREF(ZEND_CLOSURE_OBJECT(func));
			call_info |= ZEND_CALL_CLOSURE;
			if (func->common.fn_flags & ZEND_ACC_FAKE_CLOSURE) {
				call_info |= ZEND_CALL_FAKE_CLOSURE;
			}
			if (fcc.object) {
				object_or_called_scope = fcc.object;
				call_info |= ZEND_CALL_HAS_THIS;
			}
		} else if (fcc.object) {
			GC_ADDREF(fcc.object); /* For $this pointer */
			object_or_called_scope = fcc.object;
			call_info |= ZEND_CALL_RELEASE_THIS | ZEND_CALL_HAS_THIS;
		}

		FREE_OP2();
		if ((OP2_TYPE & (IS_TMP_VAR|IS_VAR)) && UNEXPECTED(EG(exception))) {
			if (call_info & ZEND_CALL_CLOSURE) {
				zend_object_release(ZEND_CLOSURE_OBJECT(func));
			} else if (call_info & ZEND_CALL_RELEASE_THIS) {
				zend_object_release(fcc.object);
			}
			HANDLE_EXCEPTION();
		}

		if (EXPECTED(func->type == ZEND_USER_FUNCTION) && UNEXPECTED(!RUN_TIME_CACHE(&func->op_array))) {
			init_func_run_time_cache(&func->op_array);
		}
	} else {
		zend_type_error("%s(): Argument #1 ($callback) must be a valid callback, %s", Z_STRVAL_P(RT_CONSTANT(opline, opline->op1)), error);
		efree(error);
		FREE_OP2();
		HANDLE_EXCEPTION();
	}

	call = zend_vm_stack_push_call_frame(call_info,
		func, opline->extended_value, object_or_called_scope);
	call->prev_execute_data = EX(call);
	EX(call) = call;

	ZEND_VM_NEXT_OPCODE();
}

ZEND_VM_HOT_HANDLER(69, ZEND_INIT_NS_FCALL_BY_NAME, ANY, CONST, NUM|CACHE_SLOT)
{
	USE_OPLINE
	zval *func_name;
	zval *func;
	zend_function *fbc;
	zend_execute_data *call;

	fbc = CACHED_PTR(opline->result.num);
	if (UNEXPECTED(fbc == NULL)) {
		func_name = (zval *)RT_CONSTANT(opline, opline->op2);
		func = zend_hash_find_known_hash(EG(function_table), Z_STR_P(func_name + 1));
		if (func == NULL) {
			func = zend_hash_find_known_hash(EG(function_table), Z_STR_P(func_name + 2));
			if (UNEXPECTED(func == NULL)) {
				ZEND_VM_DISPATCH_TO_HELPER(zend_undefined_function_helper);
			}
		}
		fbc = Z_FUNC_P(func);
		if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!RUN_TIME_CACHE(&fbc->op_array))) {
			init_func_run_time_cache(&fbc->op_array);
		}
		CACHE_PTR(opline->result.num, fbc);
	}

	call = _zend_vm_stack_push_call_frame(ZEND_CALL_NESTED_FUNCTION,
		fbc, opline->extended_value, NULL);
	call->prev_execute_data = EX(call);
	EX(call) = call;

	ZEND_VM_NEXT_OPCODE();
}

ZEND_VM_HOT_HANDLER(61, ZEND_INIT_FCALL, NUM, CONST, NUM|CACHE_SLOT)
{
	USE_OPLINE
	zval *fname;
	zval *func;
	zend_function *fbc;
	zend_execute_data *call;

	fbc = CACHED_PTR(opline->result.num);
	if (UNEXPECTED(fbc == NULL)) {
		fname = (zval*)RT_CONSTANT(opline, opline->op2);
		func = zend_hash_find_known_hash(EG(function_table), Z_STR_P(fname));
		ZEND_ASSERT(func != NULL && "Function existence must be checked at compile time");
		fbc = Z_FUNC_P(func);
		if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!RUN_TIME_CACHE(&fbc->op_array))) {
			init_func_run_time_cache(&fbc->op_array);
		}
		CACHE_PTR(opline->result.num, fbc);
	}

	call = _zend_vm_stack_push_call_frame_ex(
		opline->op1.num, ZEND_CALL_NESTED_FUNCTION,
		fbc, opline->extended_value, NULL);
	call->prev_execute_data = EX(call);
	EX(call) = call;

	ZEND_VM_NEXT_OPCODE();
}

ZEND_VM_HOT_TYPE_SPEC_HANDLER(ZEND_INIT_FCALL, Z_EXTRA_P(RT_CONSTANT(op, op->op2)) != 0, ZEND_INIT_FCALL_OFFSET, NUM, CONST, NUM|CACHE_SLOT)
{
	USE_OPLINE
	zend_function *fbc;
	zend_execute_data *call;
	fbc = CACHED_PTR(opline->result.num);
	if (UNEXPECTED(fbc == NULL)) {
		fbc = Z_PTR(EG(function_table)->arData[Z_EXTRA_P(RT_CONSTANT(opline, opline->op2))].val);
		CACHE_PTR(opline->result.num, fbc);
	}
	call = _zend_vm_stack_push_call_frame_ex(
		opline->op1.num, ZEND_CALL_NESTED_FUNCTION,
		fbc, opline->extended_value, NULL);
	call->prev_execute_data = EX(call);
	EX(call) = call;
	ZEND_VM_NEXT_OPCODE();
}

ZEND_VM_HOT_HANDLER(129, ZEND_DO_ICALL, ANY, ANY, SPEC(RETVAL,OBSERVER))
{
	USE_OPLINE
	zend_execute_data *call = EX(call);
	zend_function *fbc = call->func;
	zval *ret;
	zval retval;

	SAVE_OPLINE();
	EX(call) = call->prev_execute_data;

	call->prev_execute_data = execute_data;
	EG(current_execute_data) = call;

#if ZEND_DEBUG
	bool should_throw = zend_internal_call_should_throw(fbc, call);
#endif

	ret = RETURN_VALUE_USED(opline) ? EX_VAR(opline->result.var) : &retval;
	ZVAL_NULL(ret);

	ZEND_OBSERVER_FCALL_BEGIN(call);
	fbc->internal_function.handler(call, ret);

#if ZEND_DEBUG
	if (!EG(exception) && call->func) {
		if (should_throw) {
			zend_internal_call_arginfo_violation(call->func);
		}
		ZEND_ASSERT(!(call->func->common.fn_flags & ZEND_ACC_HAS_RETURN_TYPE) ||
			zend_verify_internal_return_type(call->func, ret));
		ZEND_ASSERT((call->func->common.fn_flags & ZEND_ACC_RETURN_REFERENCE)
			? Z_ISREF_P(ret) : !Z_ISREF_P(ret));
		zend_verify_internal_func_info(call->func, ret);
	}
#endif
	ZEND_OBSERVER_FCALL_END(call, EG(exception) ? NULL : ret);
	ZEND_VM_FCALL_INTERRUPT_CHECK(call);

	EG(current_execute_data) = execute_data;
	zend_vm_stack_free_args(call);

	uint32_t call_info = ZEND_CALL_INFO(call);
	if (UNEXPECTED(call_info & (ZEND_CALL_HAS_EXTRA_NAMED_PARAMS|ZEND_CALL_ALLOCATED))) {
		if (call_info & ZEND_CALL_HAS_EXTRA_NAMED_PARAMS) {
			zend_free_extra_named_params(call->extra_named_params);
		}
		zend_vm_stack_free_call_frame_ex(call_info, call);
	} else {
		EG(vm_stack_top) = (zval*)call;
	}

	if (!RETURN_VALUE_USED(opline)) {
		i_zval_ptr_dtor(ret);
	}

	if (UNEXPECTED(EG(exception) != NULL)) {
		zend_rethrow_exception(execute_data);
		HANDLE_EXCEPTION();
	}

	ZEND_VM_SET_OPCODE_NO_INTERRUPT(opline + 1);
	ZEND_VM_CONTINUE();
}

ZEND_VM_HOT_HANDLER(130, ZEND_DO_UCALL, ANY, ANY, SPEC(RETVAL,OBSERVER))
{
	USE_OPLINE
	zend_execute_data *call = EX(call);
	zend_function *fbc = call->func;
	zval *ret;

	SAVE_OPLINE();
	EX(call) = call->prev_execute_data;

	ret = NULL;
	if (RETURN_VALUE_USED(opline)) {
		ret = EX_VAR(opline->result.var);
	}

	call->prev_execute_data = execute_data;
	execute_data = call;
	i_init_func_execute_data(&fbc->op_array, ret, 0 EXECUTE_DATA_CC);
	LOAD_OPLINE_EX();
	ZEND_OBSERVER_SAVE_OPLINE();
	ZEND_OBSERVER_FCALL_BEGIN(execute_data);

	ZEND_VM_ENTER_EX();
}

ZEND_VM_HOT_HANDLER(131, ZEND_DO_FCALL_BY_NAME, ANY, ANY, SPEC(RETVAL,OBSERVER))
{
	USE_OPLINE
	zend_execute_data *call = EX(call);
	zend_function *fbc = call->func;
	zval *ret;
	zval retval;

	SAVE_OPLINE();
	EX(call) = call->prev_execute_data;

	const uint32_t no_discard = RETURN_VALUE_USED(opline) ? 0 : ZEND_ACC_NODISCARD;

	if (UNEXPECTED(fbc->common.fn_flags & (ZEND_ACC_DEPRECATED|no_discard))) {
		if (fbc->common.fn_flags & ZEND_ACC_DEPRECATED) {
			zend_deprecated_function(fbc);
		}
		if ((fbc->common.fn_flags & no_discard) && EG(exception) == NULL) {
			zend_nodiscard_function(fbc);
		}
		if (UNEXPECTED(EG(exception) != NULL)) {
			UNDEF_RESULT();
			if (!RETURN_VALUE_USED(opline)) {
				ret = &retval;
				ZVAL_UNDEF(ret);
			}
			ZEND_VM_C_GOTO(fcall_by_name_end);
		}
	}

	if (EXPECTED(fbc->type == ZEND_USER_FUNCTION)) {
		ret = NULL;
		if (RETURN_VALUE_USED(opline)) {
			ret = EX_VAR(opline->result.var);
		}

		call->prev_execute_data = execute_data;
		execute_data = call;
		i_init_func_execute_data(&fbc->op_array, ret, 0 EXECUTE_DATA_CC);
		LOAD_OPLINE_EX();
		ZEND_OBSERVER_SAVE_OPLINE();
		ZEND_OBSERVER_FCALL_BEGIN(execute_data);

		ZEND_VM_ENTER_EX();
	} else {
		ZEND_ASSERT(fbc->type == ZEND_INTERNAL_FUNCTION);
		if (ZEND_OBSERVER_ENABLED) {
			ret = NULL;
		}

		call->prev_execute_data = execute_data;
		EG(current_execute_data) = call;

#if ZEND_DEBUG
		bool should_throw = zend_internal_call_should_throw(fbc, call);
#endif

		ret = RETURN_VALUE_USED(opline) ? EX_VAR(opline->result.var) : &retval;
		ZVAL_NULL(ret);

		ZEND_OBSERVER_FCALL_BEGIN(call);
		fbc->internal_function.handler(call, ret);

#if ZEND_DEBUG
		if (!EG(exception) && call->func) {
			if (should_throw) {
				zend_internal_call_arginfo_violation(call->func);
			}
			ZEND_ASSERT(!(call->func->common.fn_flags & ZEND_ACC_HAS_RETURN_TYPE) ||
				zend_verify_internal_return_type(call->func, ret));
			ZEND_ASSERT((call->func->common.fn_flags & ZEND_ACC_RETURN_REFERENCE)
				? Z_ISREF_P(ret) : !Z_ISREF_P(ret));
			zend_verify_internal_func_info(call->func, ret);
		}
#endif
		ZEND_OBSERVER_FCALL_END(call, EG(exception) ? NULL : ret);
		ZEND_VM_FCALL_INTERRUPT_CHECK(call);

		EG(current_execute_data) = execute_data;

		ZEND_VM_C_GOTO(fcall_by_name_end);
	}

	if (0) {
ZEND_VM_C_LABEL(fcall_by_name_end):

		zend_vm_stack_free_args(call);

		uint32_t call_info = ZEND_CALL_INFO(call);
		if (UNEXPECTED(call_info & (ZEND_CALL_HAS_EXTRA_NAMED_PARAMS|ZEND_CALL_ALLOCATED))) {
			if (call_info & ZEND_CALL_HAS_EXTRA_NAMED_PARAMS) {
				zend_free_extra_named_params(call->extra_named_params);
			}
			zend_vm_stack_free_call_frame_ex(call_info, call);
		} else {
			EG(vm_stack_top) = (zval*)call;
		}

		if (!RETURN_VALUE_USED(opline)) {
			i_zval_ptr_dtor(ret);
		}
	}

	if (UNEXPECTED(EG(exception) != NULL)) {
		zend_rethrow_exception(execute_data);
		HANDLE_EXCEPTION();
	}
	ZEND_VM_SET_OPCODE_NO_INTERRUPT(opline + 1);
	ZEND_VM_CONTINUE();
}

ZEND_VM_HOT_HANDLER(60, ZEND_DO_FCALL, ANY, ANY, SPEC(RETVAL,OBSERVER))
{
	USE_OPLINE
	zend_execute_data *call = EX(call);
	zend_function *fbc = call->func;
	zval *ret;
	zval retval;

	SAVE_OPLINE();
	EX(call) = call->prev_execute_data;

	const uint32_t no_discard = RETURN_VALUE_USED(opline) ? 0 : ZEND_ACC_NODISCARD;

	if (UNEXPECTED(fbc->common.fn_flags & (ZEND_ACC_DEPRECATED|no_discard))) {
		if (fbc->common.fn_flags & ZEND_ACC_DEPRECATED) {
			zend_deprecated_function(fbc);
		}
		if ((fbc->common.fn_flags & no_discard) && EG(exception) == NULL) {
			zend_nodiscard_function(fbc);
		}
		if (UNEXPECTED(EG(exception) != NULL)) {
			if (UNEXPECTED(ZEND_CALL_INFO(call) & ZEND_CALL_CLOSURE)) {
				OBJ_RELEASE(ZEND_CLOSURE_OBJECT(call->func));
			}
			UNDEF_RESULT();
			if (!RETURN_VALUE_USED(opline)) {
				ret = &retval;
				ZVAL_UNDEF(ret);
			}
			ZEND_VM_C_GOTO(fcall_end);
		}
	}

	if (EXPECTED(fbc->type == ZEND_USER_FUNCTION)) {
		ret = NULL;
		if (RETURN_VALUE_USED(opline)) {
			ret = EX_VAR(opline->result.var);
		}

		call->prev_execute_data = execute_data;
		execute_data = call;
		i_init_func_execute_data(&fbc->op_array, ret, 1 EXECUTE_DATA_CC);

		if (EXPECTED(zend_execute_ex == execute_ex)) {
			LOAD_OPLINE_EX();
			ZEND_OBSERVER_SAVE_OPLINE();
			ZEND_OBSERVER_FCALL_BEGIN(execute_data);
			ZEND_VM_ENTER_EX();
		} else {
			SAVE_OPLINE_EX();
			ZEND_OBSERVER_FCALL_BEGIN(execute_data);
			execute_data = EX(prev_execute_data);
			LOAD_OPLINE();
			ZEND_ADD_CALL_FLAG(call, ZEND_CALL_TOP);
			zend_execute_ex(call);
		}
	} else {
		ZEND_ASSERT(fbc->type == ZEND_INTERNAL_FUNCTION);
		if (ZEND_OBSERVER_ENABLED) {
			ret = NULL;
		}

		call->prev_execute_data = execute_data;
		EG(current_execute_data) = call;

#if ZEND_DEBUG
		bool should_throw = zend_internal_call_should_throw(fbc, call);
#endif

		ret = RETURN_VALUE_USED(opline) ? EX_VAR(opline->result.var) : &retval;
		ZVAL_NULL(ret);

		ZEND_OBSERVER_FCALL_BEGIN(call);
		if (!zend_execute_internal) {
			/* saves one function call if zend_execute_internal is not used */
			fbc->internal_function.handler(call, ret);
		} else {
			zend_execute_internal(call, ret);
		}

#if ZEND_DEBUG
		if (!EG(exception) && call->func && !(call->func->common.fn_flags & ZEND_ACC_FAKE_CLOSURE)) {
			if (should_throw) {
				zend_internal_call_arginfo_violation(call->func);
			}
			ZEND_ASSERT(!(call->func->common.fn_flags & ZEND_ACC_HAS_RETURN_TYPE) ||
				zend_verify_internal_return_type(call->func, ret));
			ZEND_ASSERT((call->func->common.fn_flags & ZEND_ACC_RETURN_REFERENCE)
				? Z_ISREF_P(ret) : !Z_ISREF_P(ret));
			zend_verify_internal_func_info(call->func, ret);
		}
#endif
		ZEND_OBSERVER_FCALL_END(call, EG(exception) ? NULL : ret);
		ZEND_VM_FCALL_INTERRUPT_CHECK(call);

		EG(current_execute_data) = execute_data;

		ZEND_VM_C_GOTO(fcall_end);
	}

	if (0) {
ZEND_VM_C_LABEL(fcall_end):

		zend_vm_stack_free_args(call);
		if (UNEXPECTED(ZEND_CALL_INFO(call) & ZEND_CALL_HAS_EXTRA_NAMED_PARAMS)) {
			zend_free_extra_named_params(call->extra_named_params);
		}

		if (!RETURN_VALUE_USED(opline)) {
			i_zval_ptr_dtor(ret);
		}
	}

	if (UNEXPECTED(ZEND_CALL_INFO(call) & ZEND_CALL_RELEASE_THIS)) {
		OBJ_RELEASE(Z_OBJ(call->This));
	}

	zend_vm_stack_free_call_frame(call);
	if (UNEXPECTED(EG(exception) != NULL)) {
		zend_rethrow_exception(execute_data);
		HANDLE_EXCEPTION();
	}
	ZEND_VM_SET_OPCODE_NO_INTERRUPT(opline + 1);
	ZEND_VM_CONTINUE();
}

ZEND_VM_COLD_CONST_HANDLER(124, ZEND_VERIFY_RETURN_TYPE, CONST|TMP|VAR|UNUSED|CV, UNUSED)
{
	if (OP1_TYPE == IS_UNUSED) {
		SAVE_OPLINE();
		zend_verify_missing_return_type(EX(func));
		HANDLE_EXCEPTION();
	} else {
/* prevents "undefined variable opline" errors */
#if !ZEND_VM_SPEC || (OP1_TYPE != IS_UNUSED)
		USE_OPLINE
		zval *retval_ref, *retval_ptr;
		zend_arg_info *ret_info = EX(func)->common.arg_info - 1;
		retval_ref = retval_ptr = GET_OP1_ZVAL_PTR_UNDEF(BP_VAR_R);

		if (OP1_TYPE == IS_CONST) {
			ZVAL_COPY(EX_VAR(opline->result.var), retval_ptr);
			retval_ref = retval_ptr = EX_VAR(opline->result.var);
		} else if (OP1_TYPE == IS_VAR) {
			if (UNEXPECTED(Z_TYPE_P(retval_ptr) == IS_INDIRECT)) {
				retval_ref = retval_ptr = Z_INDIRECT_P(retval_ptr);
			}
			ZVAL_DEREF(retval_ptr);
		} else if (OP1_TYPE == IS_CV) {
			ZVAL_DEREF(retval_ptr);
		}

		if (EXPECTED(ZEND_TYPE_CONTAINS_CODE(ret_info->type, Z_TYPE_P(retval_ptr)))) {
			ZEND_VM_NEXT_OPCODE();
		}

		if (OP1_TYPE == IS_CV && UNEXPECTED(Z_ISUNDEF_P(retval_ptr))) {
			SAVE_OPLINE();
			retval_ref = retval_ptr = ZVAL_UNDEFINED_OP1();
			if (UNEXPECTED(EG(exception))) {
				HANDLE_EXCEPTION();
			}
			if (ZEND_TYPE_FULL_MASK(ret_info->type) & MAY_BE_NULL) {
				ZEND_VM_NEXT_OPCODE();
			}
		}

		zend_reference *ref = NULL;
		if (UNEXPECTED(retval_ref != retval_ptr)) {
			if (UNEXPECTED(EX(func)->op_array.fn_flags & ZEND_ACC_RETURN_REFERENCE)) {
				ref = Z_REF_P(retval_ref);
			} else {
				/* A cast might happen - unwrap the reference if this is a by-value return */
				if (Z_REFCOUNT_P(retval_ref) == 1) {
					ZVAL_UNREF(retval_ref);
				} else {
					Z_DELREF_P(retval_ref);
					ZVAL_COPY(retval_ref, retval_ptr);
				}
				retval_ptr = retval_ref;
			}
		}

		SAVE_OPLINE();
		if (UNEXPECTED(!zend_check_type_slow(&ret_info->type, retval_ptr, ref, 1, 0))) {
			zend_verify_return_error(EX(func), retval_ptr);
			HANDLE_EXCEPTION();
		}
		ZEND_VM_NEXT_OPCODE();
#endif
	}
}

ZEND_VM_COLD_HANDLER(201, ZEND_VERIFY_NEVER_TYPE, UNUSED, UNUSED)
{
	SAVE_OPLINE();
	zend_verify_never_error(EX(func));
	HANDLE_EXCEPTION();
}

ZEND_VM_INLINE_HANDLER(62, ZEND_RETURN, CONST|TMP|VAR|CV, ANY, SPEC(OBSERVER))
{
	USE_OPLINE
	zval *retval_ptr;
	zval *return_value;
	ZEND_OBSERVER_USE_RETVAL;

	retval_ptr = GET_OP1_ZVAL_PTR_UNDEF(BP_VAR_R);
	return_value = EX(return_value);
	ZEND_OBSERVER_SET_RETVAL();
	if (OP1_TYPE == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(retval_ptr) == IS_UNDEF)) {
		SAVE_OPLINE();
		retval_ptr = ZVAL_UNDEFINED_OP1();
		if (return_value) {
			ZVAL_NULL(return_value);
		}
	} else if (!return_value) {
		if (OP1_TYPE & (IS_VAR|IS_TMP_VAR)) {
			if (Z_REFCOUNTED_P(retval_ptr) && !Z_DELREF_P(retval_ptr)) {
				SAVE_OPLINE();
				rc_dtor_func(Z_COUNTED_P(retval_ptr));
			}
		}
	} else {
		if ((OP1_TYPE & (IS_CONST|IS_TMP_VAR))) {
			ZVAL_COPY_VALUE(return_value, retval_ptr);
			if (OP1_TYPE == IS_CONST) {
				if (UNEXPECTED(Z_OPT_REFCOUNTED_P(return_value))) {
					Z_ADDREF_P(return_value);
				}
			}
		} else if (OP1_TYPE == IS_CV) {
			do {
				if (Z_OPT_REFCOUNTED_P(retval_ptr)) {
					if (EXPECTED(!Z_OPT_ISREF_P(retval_ptr))) {
						if (EXPECTED(!(EX_CALL_INFO() & (ZEND_CALL_CODE|ZEND_CALL_OBSERVED)))) {
							zend_refcounted *ref = Z_COUNTED_P(retval_ptr);
							ZVAL_COPY_VALUE(return_value, retval_ptr);
							if (GC_MAY_LEAK(ref)) {
								SAVE_OPLINE();
								gc_possible_root(ref);
							}
							ZVAL_NULL(retval_ptr);
							break;
						} else {
							Z_ADDREF_P(retval_ptr);
						}
					} else {
						retval_ptr = Z_REFVAL_P(retval_ptr);
						if (Z_OPT_REFCOUNTED_P(retval_ptr)) {
							Z_ADDREF_P(retval_ptr);
						}
					}
				}
				ZVAL_COPY_VALUE(return_value, retval_ptr);
			} while (0);
		} else /* if (OP1_TYPE == IS_VAR) */ {
			if (UNEXPECTED(Z_ISREF_P(retval_ptr))) {
				zend_refcounted *ref = Z_COUNTED_P(retval_ptr);

				retval_ptr = Z_REFVAL_P(retval_ptr);
				ZVAL_COPY_VALUE(return_value, retval_ptr);
				if (UNEXPECTED(GC_DELREF(ref) == 0)) {
					efree_size(ref, sizeof(zend_reference));
				} else if (Z_OPT_REFCOUNTED_P(retval_ptr)) {
					Z_ADDREF_P(retval_ptr);
				}
			} else {
				ZVAL_COPY_VALUE(return_value, retval_ptr);
			}
		}
	}
	ZEND_OBSERVER_SAVE_OPLINE();
	ZEND_OBSERVER_FCALL_END(execute_data, return_value);
	ZEND_OBSERVER_FREE_RETVAL();
	ZEND_VM_DISPATCH_TO_HELPER(zend_leave_helper);
}

ZEND_VM_COLD_CONST_HANDLER(111, ZEND_RETURN_BY_REF, CONST|TMP|VAR|CV, ANY, SRC, SPEC(OBSERVER))
{
	USE_OPLINE
	zval *retval_ptr;
	zval *return_value;
	ZEND_OBSERVER_USE_RETVAL;

	SAVE_OPLINE();

	return_value = EX(return_value);
	ZEND_OBSERVER_SET_RETVAL();
	do {
		if ((OP1_TYPE & (IS_CONST|IS_TMP_VAR)) ||
		    (OP1_TYPE == IS_VAR && opline->extended_value == ZEND_RETURNS_VALUE)) {
			/* Not supposed to happen, but we'll allow it */
			zend_error(E_NOTICE, "Only variable references should be returned by reference");

			retval_ptr = GET_OP1_ZVAL_PTR(BP_VAR_R);
			if (!return_value) {
				FREE_OP1();
			} else {
				if (OP1_TYPE == IS_VAR && UNEXPECTED(Z_ISREF_P(retval_ptr))) {
					ZVAL_COPY_VALUE(return_value, retval_ptr);
					break;
				}

				ZVAL_NEW_REF(return_value, retval_ptr);
				if (OP1_TYPE == IS_CONST) {
					Z_TRY_ADDREF_P(retval_ptr);
				}
			}
			break;
		}

		retval_ptr = GET_OP1_ZVAL_PTR_PTR(BP_VAR_W);

		if (OP1_TYPE == IS_VAR) {
			ZEND_ASSERT(retval_ptr != &EG(uninitialized_zval));
			if (opline->extended_value == ZEND_RETURNS_FUNCTION && !Z_ISREF_P(retval_ptr)) {
				zend_error(E_NOTICE, "Only variable references should be returned by reference");
				if (return_value) {
					ZVAL_NEW_REF(return_value, retval_ptr);
				} else {
					FREE_OP1();
				}
				break;
			}
		}

		if (return_value) {
			if (Z_ISREF_P(retval_ptr)) {
				Z_ADDREF_P(retval_ptr);
			} else {
				ZVAL_MAKE_REF_EX(retval_ptr, 2);
			}
			ZVAL_REF(return_value, Z_REF_P(retval_ptr));
		}

		FREE_OP1();
	} while (0);

	ZEND_OBSERVER_FCALL_END(execute_data, return_value);
	ZEND_OBSERVER_FREE_RETVAL();
	ZEND_VM_DISPATCH_TO_HELPER(zend_leave_helper);
}

ZEND_VM_HANDLER(139, ZEND_GENERATOR_CREATE, ANY, ANY)
{
	zval *return_value = EX(return_value);

	if (EXPECTED(return_value)) {
		USE_OPLINE
		zend_generator *generator;
		zend_execute_data *gen_execute_data;
		uint32_t num_args, used_stack, call_info;

		SAVE_OPLINE();
		object_init_ex(return_value, zend_ce_generator);

		/*
		 * Normally the execute_data is allocated on the VM stack (because it does
		 * not actually do any allocation and thus is faster). For generators
		 * though this behavior would be suboptimal, because the (rather large)
		 * structure would have to be copied back and forth every time execution is
		 * suspended or resumed. That's why for generators the execution context
		 * is allocated on heap.
		 */
		num_args = EX_NUM_ARGS();
		if (EXPECTED(num_args <= EX(func)->op_array.num_args)) {
			used_stack = (ZEND_CALL_FRAME_SLOT + EX(func)->op_array.last_var + EX(func)->op_array.T) * sizeof(zval);
			gen_execute_data = (zend_execute_data*)emalloc(used_stack);
			used_stack = (ZEND_CALL_FRAME_SLOT + EX(func)->op_array.last_var) * sizeof(zval);
		} else {
			used_stack = (ZEND_CALL_FRAME_SLOT + num_args + EX(func)->op_array.last_var + EX(func)->op_array.T - EX(func)->op_array.num_args) * sizeof(zval);
			gen_execute_data = (zend_execute_data*)emalloc(used_stack);
		}
		memcpy(gen_execute_data, execute_data, used_stack);

		/* Save execution context in generator object. */
		generator = (zend_generator *) Z_OBJ_P(EX(return_value));
		generator->func = gen_execute_data->func;
		generator->execute_data = gen_execute_data;
		generator->frozen_call_stack = NULL;
		generator->execute_fake.opline = NULL;
		generator->execute_fake.func = NULL;
		generator->execute_fake.prev_execute_data = NULL;
		ZVAL_OBJ(&generator->execute_fake.This, (zend_object *) generator);

		gen_execute_data->opline = opline;
		/* EX(return_value) keeps pointer to zend_object (not a real zval) */
		gen_execute_data->return_value = (zval*)generator;
		call_info = Z_TYPE_INFO(EX(This));
		if ((call_info & Z_TYPE_MASK) == IS_OBJECT
		 && (!(call_info & (ZEND_CALL_CLOSURE|ZEND_CALL_RELEASE_THIS))
			 /* Bug #72523 */
			|| UNEXPECTED(zend_execute_ex != execute_ex))) {
			ZEND_ADD_CALL_FLAG_EX(call_info, ZEND_CALL_RELEASE_THIS);
			Z_ADDREF(gen_execute_data->This);
		}
		ZEND_ADD_CALL_FLAG_EX(call_info, (ZEND_CALL_TOP_FUNCTION | ZEND_CALL_ALLOCATED | ZEND_CALL_GENERATOR));
		Z_TYPE_INFO(gen_execute_data->This) = call_info;
		gen_execute_data->prev_execute_data = NULL;

		call_info = EX_CALL_INFO();
		EG(current_execute_data) = EX(prev_execute_data);
		if (EXPECTED(!(call_info & (ZEND_CALL_TOP|ZEND_CALL_ALLOCATED)))) {
			EG(vm_stack_top) = (zval*)execute_data;
			execute_data = EX(prev_execute_data);
			LOAD_NEXT_OPLINE();
			ZEND_VM_LEAVE();
		} else if (EXPECTED(!(call_info & ZEND_CALL_TOP))) {
			zend_execute_data *old_execute_data = execute_data;
			execute_data = EX(prev_execute_data);
			zend_vm_stack_free_call_frame_ex(call_info, old_execute_data);
			LOAD_NEXT_OPLINE();
			ZEND_VM_LEAVE();
		} else {
			ZEND_VM_RETURN();
		}
	} else {
		ZEND_VM_DISPATCH_TO_HELPER(zend_leave_helper);
	}
}

ZEND_VM_HANDLER(161, ZEND_GENERATOR_RETURN, CONST|TMP|VAR|CV, ANY, SPEC(OBSERVER))
{
	USE_OPLINE
	zval *retval;

	zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C);

	SAVE_OPLINE();
	retval = GET_OP1_ZVAL_PTR(BP_VAR_R);

	/* Copy return value into generator->retval */
	if ((OP1_TYPE & (IS_CONST|IS_TMP_VAR))) {
		ZVAL_COPY_VALUE(&generator->retval, retval);
		if (OP1_TYPE == IS_CONST) {
			if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->retval))) {
				Z_ADDREF(generator->retval);
			}
		}
	} else if (OP1_TYPE == IS_CV) {
		ZVAL_COPY_DEREF(&generator->retval, retval);
	} else /* if (OP1_TYPE == IS_VAR) */ {
		if (UNEXPECTED(Z_ISREF_P(retval))) {
			zend_refcounted *ref = Z_COUNTED_P(retval);

			retval = Z_REFVAL_P(retval);
			ZVAL_COPY_VALUE(&generator->retval, retval);
			if (UNEXPECTED(GC_DELREF(ref) == 0)) {
				efree_size(ref, sizeof(zend_reference));
			} else if (Z_OPT_REFCOUNTED_P(retval)) {
				Z_ADDREF_P(retval);
			}
		} else {
			ZVAL_COPY_VALUE(&generator->retval, retval);
		}
	}

	ZEND_OBSERVER_FCALL_END(generator->execute_data, &generator->retval);

	EG(current_execute_data) = EX(prev_execute_data);

	/* Close the generator to free up resources */
	zend_generator_close(generator, 1);

	/* Pass execution back to handling code */
	ZEND_VM_RETURN();
}

ZEND_VM_COLD_CONST_HANDLER(108, ZEND_THROW, CONST|TMPVAR|CV, ANY)
{
	USE_OPLINE
	zval *value;

	SAVE_OPLINE();
	value = GET_OP1_ZVAL_PTR_UNDEF(BP_VAR_R);

	do {
		if (OP1_TYPE == IS_CONST || UNEXPECTED(Z_TYPE_P(value) != IS_OBJECT)) {
			if ((OP1_TYPE & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) {
				value = Z_REFVAL_P(value);
				if (EXPECTED(Z_TYPE_P(value) == IS_OBJECT)) {
					break;
				}
			}
			if (OP1_TYPE == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
				ZVAL_UNDEFINED_OP1();
				if (UNEXPECTED(EG(exception) != NULL)) {
					HANDLE_EXCEPTION();
				}
			}
			zend_throw_error(NULL, "Can only throw objects");
			FREE_OP1();
			HANDLE_EXCEPTION();
		}
	} while (0);

	zend_exception_save();
	Z_TRY_ADDREF_P(value);
	zend_throw_exception_object(value);
	zend_exception_restore();
	FREE_OP1();
	HANDLE_EXCEPTION();
}

ZEND_VM_HANDLER(107, ZEND_CATCH, CONST, JMP_ADDR, LAST_CATCH|CACHE_SLOT)
{
	USE_OPLINE
	zend_class_entry *ce, *catch_ce;
	zend_object *exception;

	SAVE_OPLINE();
	/* Check whether an exception has been thrown, if not, jump over code */
	zend_exception_restore();
	if (EG(exception) == NULL) {
		ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0);
	}
	catch_ce = CACHED_PTR(opline->extended_value & ~ZEND_LAST_CATCH);
	if (UNEXPECTED(catch_ce == NULL)) {
		catch_ce = zend_fetch_class_by_name(Z_STR_P(RT_CONSTANT(opline, opline->op1)), Z_STR_P(RT_CONSTANT(opline, opline->op1) + 1), ZEND_FETCH_CLASS_NO_AUTOLOAD | ZEND_FETCH_CLASS_SILENT);

		CACHE_PTR(opline->extended_value & ~ZEND_LAST_CATCH, catch_ce);
	}
	ce = EG(exception)->ce;

#ifdef HAVE_DTRACE
	if (DTRACE_EXCEPTION_CAUGHT_ENABLED()) {
		DTRACE_EXCEPTION_CAUGHT((char *)ce->name);
	}
#endif /* HAVE_DTRACE */

	if (ce != catch_ce) {
		if (!catch_ce || !instanceof_function(ce, catch_ce)) {
			if (opline->extended_value & ZEND_LAST_CATCH) {
				zend_rethrow_exception(execute_data);
				HANDLE_EXCEPTION();
			}
			ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0);
		}
	}

	exception = EG(exception);
	EG(exception) = NULL;
	if (RETURN_VALUE_USED(opline)) {
		/* Always perform a strict assignment. There is a reasonable expectation that if you
		 * write "catch (Exception $e)" then $e will actually be instanceof Exception. As such,
		 * we should not permit coercion to string here. */
		zval tmp;
		ZVAL_OBJ(&tmp, exception);
		zend_assign_to_variable(EX_VAR(opline->result.var), &tmp, IS_TMP_VAR, /* strict */ 1);
	} else {
		OBJ_RELEASE(exception);
	}
	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

ZEND_VM_HOT_HANDLER(65, ZEND_SEND_VAL, CONST|TMPVAR, CONST|UNUSED|NUM)
{
	USE_OPLINE
	zval *value, *arg;

	if (OP2_TYPE == IS_CONST) {
		SAVE_OPLINE();
		zend_string *arg_name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
		uint32_t arg_num;
		arg = zend_handle_named_arg(&EX(call), arg_name, &arg_num, CACHE_ADDR(opline->result.num));
		if (UNEXPECTED(!arg)) {
			FREE_OP1();
			HANDLE_EXCEPTION();
		}
	} else {
		arg = ZEND_CALL_VAR(EX(call), opline->result.var);
	}

	value = GET_OP1_ZVAL_PTR(BP_VAR_R);
	ZVAL_COPY_VALUE(arg, value);
	if (OP1_TYPE == IS_CONST) {
		if (UNEXPECTED(Z_OPT_REFCOUNTED_P(arg))) {
			Z_ADDREF_P(arg);
		}
	}
	ZEND_VM_NEXT_OPCODE();
}

ZEND_VM_COLD_HELPER(zend_cannot_pass_by_ref_helper, ANY, ANY, uint32_t _arg_num, zval *_arg)
{
	USE_OPLINE

	SAVE_OPLINE();

	zend_cannot_pass_by_reference(_arg_num);
	FREE_OP1();
	ZVAL_UNDEF(_arg);
	HANDLE_EXCEPTION();
}

ZEND_VM_HOT_SEND_HANDLER(116, ZEND_SEND_VAL_EX, CONST|TMP, CONST|UNUSED|NUM, SPEC(QUICK_ARG))
{
	USE_OPLINE
	zval *value, *arg;
	uint32_t arg_num;

	if (OP2_TYPE == IS_CONST) {
		SAVE_OPLINE();
		zend_string *arg_name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
		arg = zend_handle_named_arg(&EX(call), arg_name, &arg_num, CACHE_ADDR(opline->result.num));
		if (UNEXPECTED(!arg)) {
			FREE_OP1();
			HANDLE_EXCEPTION();
		}
	} else {
		arg = ZEND_CALL_VAR(EX(call), opline->result.var);
		arg_num = opline->op2.num;
	}

	if (EXPECTED(arg_num <= MAX_ARG_FLAG_NUM)) {
		if (QUICK_ARG_MUST_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
			ZEND_VM_C_GOTO(send_val_by_ref);
		}
	} else if (ARG_MUST_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
ZEND_VM_C_LABEL(send_val_by_ref):;
		ZEND_VM_DISPATCH_TO_HELPER(zend_cannot_pass_by_ref_helper, _arg_num, arg_num, _arg, arg);
	}
	value = GET_OP1_ZVAL_PTR(BP_VAR_R);
	ZVAL_COPY_VALUE(arg, value);
	if (OP1_TYPE == IS_CONST) {
		if (UNEXPECTED(Z_OPT_REFCOUNTED_P(arg))) {
			Z_ADDREF_P(arg);
		}
	}
	ZEND_VM_NEXT_OPCODE();
}

ZEND_VM_HOT_HANDLER(117, ZEND_SEND_VAR, VAR|CV, CONST|UNUSED|NUM)
{
	USE_OPLINE
	zval *varptr, *arg;

	if (OP2_TYPE == IS_CONST) {
		SAVE_OPLINE();
		zend_string *arg_name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
		uint32_t arg_num;
		arg = zend_handle_named_arg(&EX(call), arg_name, &arg_num, CACHE_ADDR(opline->result.num));
		if (UNEXPECTED(!arg)) {
			FREE_OP1();
			HANDLE_EXCEPTION();
		}
	} else {
		arg = ZEND_CALL_VAR(EX(call), opline->result.var);
	}

	varptr = GET_OP1_ZVAL_PTR_UNDEF(BP_VAR_R);
	if (OP1_TYPE == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(varptr) == IS_UNDEF)) {
		SAVE_OPLINE();
		ZVAL_UNDEFINED_OP1();
		ZVAL_NULL(arg);
		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
	}

	if (OP1_TYPE == IS_CV) {
		ZVAL_COPY_DEREF(arg, varptr);
	} else /* if (OP1_TYPE == IS_VAR) */ {
		if (UNEXPECTED(Z_ISREF_P(varptr))) {
			zend_refcounted *ref = Z_COUNTED_P(varptr);

			varptr = Z_REFVAL_P(varptr);
			ZVAL_COPY_VALUE(arg, varptr);
			if (UNEXPECTED(GC_DELREF(ref) == 0)) {
				efree_size(ref, sizeof(zend_reference));
			} else if (Z_OPT_REFCOUNTED_P(arg)) {
				Z_ADDREF_P(arg);
			}
		} else {
			ZVAL_COPY_VALUE(arg, varptr);
		}
	}

	ZEND_VM_NEXT_OPCODE();
}

ZEND_VM_HANDLER(106, ZEND_SEND_VAR_NO_REF, VAR, CONST|UNUSED|NUM)
{
	USE_OPLINE
	zval *varptr, *arg;

	if (OP2_TYPE == IS_CONST) {
		SAVE_OPLINE();
		zend_string *arg_name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
		uint32_t arg_num;
		arg = zend_handle_named_arg(&EX(call), arg_name, &arg_num, CACHE_ADDR(opline->result.num));
		if (UNEXPECTED(!arg)) {
			FREE_OP1();
			HANDLE_EXCEPTION();
		}
	} else {
		arg = ZEND_CALL_VAR(EX(call), opline->result.var);
	}

	varptr = GET_OP1_ZVAL_PTR(BP_VAR_R);
	ZVAL_COPY_VALUE(arg, varptr);

	if (EXPECTED(Z_ISREF_P(varptr))) {
		ZEND_VM_NEXT_OPCODE();
	}

	SAVE_OPLINE();
	ZVAL_NEW_REF(arg, arg);
	zend_error(E_NOTICE, "Only variables should be passed by reference");
	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

ZEND_VM_HOT_SEND_HANDLER(50, ZEND_SEND_VAR_NO_REF_EX, VAR, CONST|UNUSED|NUM, SPEC(QUICK_ARG))
{
	USE_OPLINE
	zval *varptr, *arg;
	uint32_t arg_num;

	if (OP2_TYPE == IS_CONST) {
		SAVE_OPLINE();
		zend_string *arg_name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
		arg = zend_handle_named_arg(&EX(call), arg_name, &arg_num, CACHE_ADDR(opline->result.num));
		if (UNEXPECTED(!arg)) {
			FREE_OP1();
			HANDLE_EXCEPTION();
		}
	} else {
		arg = ZEND_CALL_VAR(EX(call), opline->result.var);
		arg_num = opline->op2.num;
	}

	if (EXPECTED(arg_num <= MAX_ARG_FLAG_NUM)) {
		if (!QUICK_ARG_SHOULD_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
			ZEND_VM_C_GOTO(send_var);
		}

		varptr = GET_OP1_ZVAL_PTR(BP_VAR_R);
		ZVAL_COPY_VALUE(arg, varptr);

		if (EXPECTED(Z_ISREF_P(varptr) ||
		    QUICK_ARG_MAY_BE_SENT_BY_REF(EX(call)->func, arg_num))) {
			ZEND_VM_NEXT_OPCODE();
		}
	} else {
		if (!ARG_SHOULD_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
			ZEND_VM_C_GOTO(send_var);
		}

		varptr = GET_OP1_ZVAL_PTR(BP_VAR_R);
		ZVAL_COPY_VALUE(arg, varptr);

		if (EXPECTED(Z_ISREF_P(varptr) ||
		    ARG_MAY_BE_SENT_BY_REF(EX(call)->func, arg_num))) {
			ZEND_VM_NEXT_OPCODE();
		}
	}

	SAVE_OPLINE();
	ZVAL_NEW_REF(arg, arg);
	zend_error(E_NOTICE, "Only variables should be passed by reference");
	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();

ZEND_VM_C_LABEL(send_var):
	varptr = GET_OP1_ZVAL_PTR(BP_VAR_R);
	if (UNEXPECTED(Z_ISREF_P(varptr))) {
		zend_refcounted *ref = Z_COUNTED_P(varptr);

		varptr = Z_REFVAL_P(varptr);
		ZVAL_COPY_VALUE(arg, varptr);
		if (UNEXPECTED(GC_DELREF(ref) == 0)) {
			efree_size(ref, sizeof(zend_reference));
		} else if (Z_OPT_REFCOUNTED_P(arg)) {
			Z_ADDREF_P(arg);
		}
	} else {
		ZVAL_COPY_VALUE(arg, varptr);
	}
	ZEND_VM_NEXT_OPCODE();
}

ZEND_VM_HANDLER(67, ZEND_SEND_REF, VAR|CV, CONST|UNUSED|NUM)
{
	USE_OPLINE
	zval *varptr, *arg;

	SAVE_OPLINE();
	if (OP2_TYPE == IS_CONST) {
		zend_string *arg_name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
		uint32_t arg_num;
		arg = zend_handle_named_arg(&EX(call), arg_name, &arg_num, CACHE_ADDR(opline->result.num));
		if (UNEXPECTED(!arg)) {
			FREE_OP1();
			HANDLE_EXCEPTION();
		}
	} else {
		arg = ZEND_CALL_VAR(EX(call), opline->result.var);
	}

	varptr = GET_OP1_ZVAL_PTR_PTR(BP_VAR_W);
	if (Z_ISREF_P(varptr)) {
		Z_ADDREF_P(varptr);
	} else {
		ZVAL_MAKE_REF_EX(varptr, 2);
	}
	ZVAL_REF(arg, Z_REF_P(varptr));

	FREE_OP1();
	ZEND_VM_NEXT_OPCODE();
}

ZEND_VM_HOT_SEND_HANDLER(66, ZEND_SEND_VAR_EX, VAR|CV, CONST|UNUSED|NUM, SPEC(QUICK_ARG))
{
	USE_OPLINE
	zval *varptr, *arg;
	uint32_t arg_num;

	if (OP2_TYPE == IS_CONST) {
		SAVE_OPLINE();
		zend_string *arg_name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
		arg = zend_handle_named_arg(&EX(call), arg_name, &arg_num, CACHE_ADDR(opline->result.num));
		if (UNEXPECTED(!arg)) {
			FREE_OP1();
			HANDLE_EXCEPTION();
		}
	} else {
		arg = ZEND_CALL_VAR(EX(call), opline->result.var);
		arg_num = opline->op2.num;
	}

	if (EXPECTED(arg_num <= MAX_ARG_FLAG_NUM)) {
		if (QUICK_ARG_SHOULD_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
			ZEND_VM_C_GOTO(send_var_by_ref);
		}
	} else if (ARG_SHOULD_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
ZEND_VM_C_LABEL(send_var_by_ref):
		varptr = GET_OP1_ZVAL_PTR_PTR(BP_VAR_W);
		if (Z_ISREF_P(varptr)) {
			Z_ADDREF_P(varptr);
		} else {
			ZVAL_MAKE_REF_EX(varptr, 2);
		}
		ZVAL_REF(arg, Z_REF_P(varptr));

		FREE_OP1();
		ZEND_VM_NEXT_OPCODE();
	}

	varptr = GET_OP1_ZVAL_PTR_UNDEF(BP_VAR_R);
	if (OP1_TYPE == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(varptr) == IS_UNDEF)) {
		SAVE_OPLINE();
		ZVAL_UNDEFINED_OP1();
		ZVAL_NULL(arg);
		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
	}

	if (OP1_TYPE == IS_CV) {
		ZVAL_COPY_DEREF(arg, varptr);
	} else /* if (OP1_TYPE == IS_VAR) */ {
		if (UNEXPECTED(Z_ISREF_P(varptr))) {
			zend_refcounted *ref = Z_COUNTED_P(varptr);

			varptr = Z_REFVAL_P(varptr);
			ZVAL_COPY_VALUE(arg, varptr);
			if (UNEXPECTED(GC_DELREF(ref) == 0)) {
				efree_size(ref, sizeof(zend_reference));
			} else if (Z_OPT_REFCOUNTED_P(arg)) {
				Z_ADDREF_P(arg);
			}
		} else {
			ZVAL_COPY_VALUE(arg, varptr);
		}
	}

	ZEND_VM_NEXT_OPCODE();
}

ZEND_VM_HOT_SEND_HANDLER(100, ZEND_CHECK_FUNC_ARG, UNUSED, CONST|UNUSED|NUM, SPEC(QUICK_ARG))
{
	USE_OPLINE
	uint32_t arg_num;

	if (OP2_TYPE == IS_CONST) {
		zend_string *arg_name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
		arg_num = zend_get_arg_offset_by_name(
			EX(call)->func, arg_name, CACHE_ADDR(opline->result.num)) + 1;
		if (UNEXPECTED(arg_num == 0)) {
			/* Treat this as a by-value argument, and throw an error during SEND. */
			ZEND_DEL_CALL_FLAG(EX(call), ZEND_CALL_SEND_ARG_BY_REF);
			ZEND_VM_NEXT_OPCODE();
		}
	} else {
		arg_num = opline->op2.num;
	}

	if (EXPECTED(arg_num <= MAX_ARG_FLAG_NUM)) {
		if (QUICK_ARG_SHOULD_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
			ZEND_ADD_CALL_FLAG(EX(call), ZEND_CALL_SEND_ARG_BY_REF);
		} else {
			ZEND_DEL_CALL_FLAG(EX(call), ZEND_CALL_SEND_ARG_BY_REF);
		}
	} else if (ARG_SHOULD_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
		ZEND_ADD_CALL_FLAG(EX(call), ZEND_CALL_SEND_ARG_BY_REF);
	} else {
		ZEND_DEL_CALL_FLAG(EX(call), ZEND_CALL_SEND_ARG_BY_REF);
	}
	ZEND_VM_NEXT_OPCODE();
}

ZEND_VM_HOT_HANDLER(185, ZEND_SEND_FUNC_ARG, VAR, CONST|UNUSED|NUM)
{
	USE_OPLINE
	zval *varptr, *arg;

	if (OP2_TYPE == IS_CONST) {
		// TODO: Would it make sense to share the cache slot with CHECK_FUNC_ARG?
		SAVE_OPLINE();
		zend_string *arg_name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
		uint32_t arg_num;
		arg = zend_handle_named_arg(&EX(call), arg_name, &arg_num, CACHE_ADDR(opline->result.num));
		if (UNEXPECTED(!arg)) {
			FREE_OP1();
			HANDLE_EXCEPTION();
		}
	} else {
		arg = ZEND_CALL_VAR(EX(call), opline->result.var);
	}

	if (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) {
		varptr = GET_OP1_ZVAL_PTR_PTR(BP_VAR_W);
		if (Z_ISREF_P(varptr)) {
			Z_ADDREF_P(varptr);
		} else {
			ZVAL_MAKE_REF_EX(varptr, 2);
		}
		ZVAL_REF(arg, Z_REF_P(varptr));

		FREE_OP1();
		ZEND_VM_NEXT_OPCODE();
	}

	varptr = GET_OP1_ZVAL_PTR_UNDEF(BP_VAR_R);

	if (UNEXPECTED(Z_ISREF_P(varptr))) {
		zend_refcounted *ref = Z_COUNTED_P(varptr);

		varptr = Z_REFVAL_P(varptr);
		ZVAL_COPY_VALUE(arg, varptr);
		if (UNEXPECTED(GC_DELREF(ref) == 0)) {
			efree_size(ref, sizeof(zend_reference));
		} else if (Z_OPT_REFCOUNTED_P(arg)) {
			Z_ADDREF_P(arg);
		}
	} else {
		ZVAL_COPY_VALUE(arg, varptr);
	}

	ZEND_VM_NEXT_OPCODE();
}

ZEND_VM_HANDLER(165, ZEND_SEND_UNPACK, ANY, ANY)
{
	USE_OPLINE
	zval *args;
	uint32_t arg_num;

	SAVE_OPLINE();
	args = GET_OP1_ZVAL_PTR_UNDEF(BP_VAR_R);
	arg_num = ZEND_CALL_NUM_ARGS(EX(call)) + 1;

ZEND_VM_C_LABEL(send_again):
	if (EXPECTED(Z_TYPE_P(args) == IS_ARRAY)) {
		HashTable *ht = Z_ARRVAL_P(args);
		zval *arg, *top;
		zend_string *name;
		bool have_named_params = 0;

		zend_vm_stack_extend_call_frame(&EX(call), arg_num - 1, zend_hash_num_elements(ht));

		// TODO: Speed this up using a flag that specifies whether there are any ref parameters.
		if ((OP1_TYPE & (IS_VAR|IS_CV)) && Z_REFCOUNT_P(args) > 1) {
			uint32_t tmp_arg_num = arg_num;
			bool separate = 0;

			/* check if any of arguments are going to be passed by reference */
			ZEND_HASH_FOREACH_STR_KEY_VAL(ht, name, arg) {
				if (UNEXPECTED(name)) {
					void *cache_slot[2] = {NULL, NULL};
					tmp_arg_num = zend_get_arg_offset_by_name(
						EX(call)->func, name, cache_slot) + 1;
				}
				if (ARG_SHOULD_BE_SENT_BY_REF(EX(call)->func, tmp_arg_num)) {
					separate = 1;
					break;
				}
				tmp_arg_num++;
			} ZEND_HASH_FOREACH_END();
			if (separate) {
				SEPARATE_ARRAY(args);
				ht = Z_ARRVAL_P(args);
			}
		}

		ZEND_HASH_FOREACH_STR_KEY_VAL(ht, name, arg) {
			if (UNEXPECTED(name)) {
				void *cache_slot[2] = {NULL, NULL};
				have_named_params = 1;
				top = zend_handle_named_arg(&EX(call), name, &arg_num, cache_slot);
				if (UNEXPECTED(!top)) {
					FREE_OP1();
					HANDLE_EXCEPTION();
				}
			} else {
				if (have_named_params) {
					zend_throw_error(NULL,
						"Cannot use positional argument after named argument during unpacking");
					FREE_OP1();
					HANDLE_EXCEPTION();
				}

				top = ZEND_CALL_ARG(EX(call), arg_num);
				ZEND_CALL_NUM_ARGS(EX(call))++;
			}

			if (ARG_SHOULD_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
				if (Z_ISREF_P(arg)) {
					Z_ADDREF_P(arg);
					ZVAL_REF(top, Z_REF_P(arg));
				} else if (OP1_TYPE & (IS_VAR|IS_CV)) {
					/* array is already separated above */
					ZVAL_MAKE_REF_EX(arg, 2);
					ZVAL_REF(top, Z_REF_P(arg));
				} else {
					Z_TRY_ADDREF_P(arg);
					ZVAL_NEW_REF(top, arg);
				}
			} else {
				ZVAL_COPY_DEREF(top, arg);
			}

			arg_num++;
		} ZEND_HASH_FOREACH_END();

	} else if (EXPECTED(Z_TYPE_P(args) == IS_OBJECT)) {
		zend_class_entry *ce = Z_OBJCE_P(args);
		zend_object_iterator *iter;
		bool have_named_params = 0;

		if (!ce || !ce->get_iterator) {
			zend_type_error("Only arrays and Traversables can be unpacked, %s given", zend_zval_value_name(args));
		} else {

			iter = ce->get_iterator(ce, args, 0);
			if (UNEXPECTED(!iter)) {
				FREE_OP1();
				if (!EG(exception)) {
					zend_throw_exception_ex(
						NULL, 0, "Object of type %s did not create an Iterator", ZSTR_VAL(ce->name)
					);
				}
				HANDLE_EXCEPTION();
			}

			const zend_object_iterator_funcs *funcs = iter->funcs;
			if (funcs->rewind) {
				funcs->rewind(iter);
			}

			for (; funcs->valid(iter) == SUCCESS; ++arg_num) {
				zval *arg, *top;

				if (UNEXPECTED(EG(exception) != NULL)) {
					break;
				}

				arg = funcs->get_current_data(iter);
				if (UNEXPECTED(EG(exception) != NULL)) {
					break;
				}

				zend_string *name = NULL;
				if (funcs->get_current_key) {
					zval key;
					funcs->get_current_key(iter, &key);
					if (UNEXPECTED(EG(exception) != NULL)) {
						break;
					}

					if (UNEXPECTED(Z_TYPE(key) != IS_LONG)) {
						if (UNEXPECTED(Z_TYPE(key) != IS_STRING)) {
							zend_throw_error(NULL,
								"Keys must be of type int|string during argument unpacking");
							zval_ptr_dtor(&key);
							break;
						}

						name = Z_STR_P(&key);

						zend_ulong tmp;
						if (ZEND_HANDLE_NUMERIC(name, tmp)) {
							name = NULL;
						}
					}
				}

				if (UNEXPECTED(name)) {
					void *cache_slot[2] = {NULL, NULL};
					have_named_params = 1;
					top = zend_handle_named_arg(&EX(call), name, &arg_num, cache_slot);
					if (UNEXPECTED(!top)) {
						zend_string_release(name);
						break;
					}

					ZVAL_DEREF(arg);
					Z_TRY_ADDREF_P(arg);

					if (ARG_MUST_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
						zend_error(
							E_WARNING, "Cannot pass by-reference argument %d of %s%s%s()"
							" by unpacking a Traversable, passing by-value instead", arg_num,
							EX(call)->func->common.scope ? ZSTR_VAL(EX(call)->func->common.scope->name) : "",
							EX(call)->func->common.scope ? "::" : "",
							ZSTR_VAL(EX(call)->func->common.function_name)
						);
						ZVAL_NEW_REF(top, arg);
					} else {
						ZVAL_COPY_VALUE(top, arg);
					}

					zend_string_release(name);
				} else {
					if (have_named_params) {
						zend_throw_error(NULL,
							"Cannot use positional argument after named argument during unpacking");
						break;
					}

					zend_vm_stack_extend_call_frame(&EX(call), arg_num - 1, 1);
					top = ZEND_CALL_ARG(EX(call), arg_num);
					ZVAL_DEREF(arg);
					Z_TRY_ADDREF_P(arg);

					if (ARG_MUST_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
						zend_error(
							E_WARNING, "Cannot pass by-reference argument %d of %s%s%s()"
							" by unpacking a Traversable, passing by-value instead", arg_num,
							EX(call)->func->common.scope ? ZSTR_VAL(EX(call)->func->common.scope->name) : "",
							EX(call)->func->common.scope ? "::" : "",
							ZSTR_VAL(EX(call)->func->common.function_name)
						);
						ZVAL_NEW_REF(top, arg);
					} else {
						ZVAL_COPY_VALUE(top, arg);
					}

					ZEND_CALL_NUM_ARGS(EX(call))++;
				}

				funcs->move_forward(iter);
			}

			zend_iterator_dtor(iter);
		}
	} else if (EXPECTED(Z_ISREF_P(args))) {
		args = Z_REFVAL_P(args);
		ZEND_VM_C_GOTO(send_again);
	} else {
		if (OP1_TYPE == IS_CV && UNEXPECTED(Z_TYPE_P(args) == IS_UNDEF)) {
			ZVAL_UNDEFINED_OP1();
		}
		zend_type_error("Only arrays and Traversables can be unpacked, %s given", zend_zval_value_name(args));
	}

	FREE_OP1();
	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

ZEND_VM_HANDLER(119, ZEND_SEND_ARRAY, ANY, ANY, NUM)
{
	USE_OPLINE
	zval *args;

	SAVE_OPLINE();
	args = GET_OP1_ZVAL_PTR(BP_VAR_R);

	if (UNEXPECTED(Z_TYPE_P(args) != IS_ARRAY)) {
		if ((OP1_TYPE & (IS_VAR|IS_CV)) && Z_ISREF_P(args)) {
			args = Z_REFVAL_P(args);
			if (EXPECTED(Z_TYPE_P(args) == IS_ARRAY)) {
				ZEND_VM_C_GOTO(send_array);
			}
		}
		zend_type_error("call_user_func_array(): Argument #2 ($args) must be of type array, %s given", zend_zval_value_name(args));
		FREE_OP2();
		FREE_OP1();
		HANDLE_EXCEPTION();
	} else {
		uint32_t arg_num;
		HashTable *ht;
		zval *arg, *param;

ZEND_VM_C_LABEL(send_array):
		ht = Z_ARRVAL_P(args);
		if (OP2_TYPE != IS_UNUSED) {
			/* We don't need to handle named params in this case,
			 * because array_slice() is called with $preserve_keys == false. */
			zval *op2 = GET_OP2_ZVAL_PTR_DEREF(BP_VAR_R);
			uint32_t skip = opline->extended_value;
			uint32_t count = zend_hash_num_elements(ht);
			zend_long len;
			if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
				len = Z_LVAL_P(op2);
			} else if (Z_TYPE_P(op2) == IS_NULL) {
				len = count - skip;
			} else if (EX_USES_STRICT_TYPES()
					|| !zend_parse_arg_long_weak(op2, &len, /* arg_num */ 3)) {
				zend_type_error(
					"array_slice(): Argument #3 ($length) must be of type ?int, %s given",
					zend_zval_value_name(op2));
				FREE_OP2();
				FREE_OP1();
				HANDLE_EXCEPTION();
			}

			if (len < 0) {
				len += (zend_long)(count - skip);
			}
			if (skip < count && len > 0) {
				if (len > (zend_long)(count - skip)) {
					len = (zend_long)(count - skip);
				}
				zend_vm_stack_extend_call_frame(&EX(call), 0, len);
				arg_num = 1;
				param = ZEND_CALL_ARG(EX(call), 1);
				ZEND_HASH_FOREACH_VAL(ht, arg) {
					bool must_wrap = 0;
					if (skip > 0) {
						skip--;
						continue;
					} else if ((zend_long)(arg_num - 1) >= len) {
						break;
					} else if (ARG_SHOULD_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
						if (UNEXPECTED(!Z_ISREF_P(arg))) {
							if (!ARG_MAY_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
								/* By-value send is not allowed -- emit a warning,
								 * but still perform the call. */
								zend_param_must_be_ref(EX(call)->func, arg_num);
								must_wrap = 1;
							}
						}
					} else {
						if (Z_ISREF_P(arg) &&
						    !(EX(call)->func->common.fn_flags & ZEND_ACC_CALL_VIA_TRAMPOLINE)) {
							/* don't separate references for __call */
							arg = Z_REFVAL_P(arg);
						}
					}
					if (EXPECTED(!must_wrap)) {
						ZVAL_COPY(param, arg);
					} else {
						Z_TRY_ADDREF_P(arg);
						ZVAL_NEW_REF(param, arg);
					}
					ZEND_CALL_NUM_ARGS(EX(call))++;
					arg_num++;
					param++;
				} ZEND_HASH_FOREACH_END();
			}
			FREE_OP2();
		} else {
			zend_string *name;
			bool have_named_params;
			zend_vm_stack_extend_call_frame(&EX(call), 0, zend_hash_num_elements(ht));
			arg_num = 1;
			param = ZEND_CALL_ARG(EX(call), 1);
			have_named_params = 0;
			ZEND_HASH_FOREACH_STR_KEY_VAL(ht, name, arg) {
				if (name) {
					void *cache_slot[2] = {NULL, NULL};
					have_named_params = 1;
					param = zend_handle_named_arg(&EX(call), name, &arg_num, cache_slot);
					if (!param) {
						FREE_OP1();
						HANDLE_EXCEPTION();
					}
				} else if (have_named_params) {
					zend_throw_error(NULL,
						"Cannot use positional argument after named argument");
					FREE_OP1();
					HANDLE_EXCEPTION();
				}

				bool must_wrap = 0;
				if (ARG_SHOULD_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
					if (UNEXPECTED(!Z_ISREF_P(arg))) {
						if (!ARG_MAY_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
							/* By-value send is not allowed -- emit a warning,
							 * but still perform the call. */
							zend_param_must_be_ref(EX(call)->func, arg_num);
							must_wrap = 1;
						}
					}
				} else {
					if (Z_ISREF_P(arg) &&
					    !(EX(call)->func->common.fn_flags & ZEND_ACC_CALL_VIA_TRAMPOLINE)) {
						/* don't separate references for __call */
						arg = Z_REFVAL_P(arg);
					}
				}

				if (EXPECTED(!must_wrap)) {
					ZVAL_COPY(param, arg);
				} else {
					Z_TRY_ADDREF_P(arg);
					ZVAL_NEW_REF(param, arg);
				}
				if (!name) {
					ZEND_CALL_NUM_ARGS(EX(call))++;
					arg_num++;
					param++;
				}
			} ZEND_HASH_FOREACH_END();
		}
	}
	FREE_OP1();
	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

ZEND_VM_HANDLER(120, ZEND_SEND_USER, CONST|TMP|VAR|CV, NUM)
{
	USE_OPLINE
	zval *arg, *param;

	SAVE_OPLINE();

	arg = GET_OP1_ZVAL_PTR_DEREF(BP_VAR_R);
	param = ZEND_CALL_VAR(EX(call), opline->result.var);
	if (UNEXPECTED(ARG_MUST_BE_SENT_BY_REF(EX(call)->func, opline->op2.num))) {
		zend_param_must_be_ref(EX(call)->func, opline->op2.num);
		Z_TRY_ADDREF_P(arg);
		ZVAL_NEW_REF(param, arg);
	} else {
		ZVAL_COPY(param, arg);
	}

	FREE_OP1();
	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

ZEND_VM_HOT_HANDLER(199, ZEND_CHECK_UNDEF_ARGS, UNUSED, UNUSED)
{
	USE_OPLINE

	zend_execute_data *call = execute_data->call;
	if (EXPECTED(!(ZEND_CALL_INFO(call) & ZEND_CALL_MAY_HAVE_UNDEF))) {
		ZEND_VM_NEXT_OPCODE();
	}

	SAVE_OPLINE();
	zend_handle_undef_args(call);
	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

ZEND_VM_COLD_HELPER(zend_missing_arg_helper, ANY, ANY)
{
	USE_OPLINE

	SAVE_OPLINE();

	zend_missing_arg_error(execute_data);
	HANDLE_EXCEPTION();
}

ZEND_VM_HELPER(zend_verify_recv_arg_type_helper, ANY, ANY, zval *op_1)
{
	USE_OPLINE

	SAVE_OPLINE();
	if (UNEXPECTED(!zend_verify_recv_arg_type(EX(func), opline->op1.num, op_1))) {
		HANDLE_EXCEPTION();
	}

	ZEND_VM_NEXT_OPCODE();
}

ZEND_VM_HOT_HANDLER(63, ZEND_RECV, NUM, UNUSED)
{
	USE_OPLINE
	uint32_t arg_num = opline->op1.num;
	zval *param;

	if (UNEXPECTED(arg_num > EX_NUM_ARGS())) {
		ZEND_VM_DISPATCH_TO_HELPER(zend_missing_arg_helper);
	}

	param = EX_VAR(opline->result.var);

	if (UNEXPECTED(!(opline->op2.num & (1u << Z_TYPE_P(param))))) {
		ZEND_VM_DISPATCH_TO_HELPER(zend_verify_recv_arg_type_helper, op_1, param);
	}

	ZEND_VM_NEXT_OPCODE();
}

ZEND_VM_HOT_TYPE_SPEC_HANDLER(ZEND_RECV, op->op2.num == MAY_BE_ANY, ZEND_RECV_NOTYPE, NUM, NUM)
{
	USE_OPLINE
	uint32_t arg_num = opline->op1.num;

	if (UNEXPECTED(arg_num > EX_NUM_ARGS())) {
		ZEND_VM_DISPATCH_TO_HELPER(zend_missing_arg_helper);
	}

	ZEND_VM_NEXT_OPCODE();
}

ZEND_VM_HOT_HANDLER(64, ZEND_RECV_INIT, NUM, CONST)
{
	USE_OPLINE
	uint32_t arg_num;
	zval *param;

	ZEND_VM_REPEATABLE_OPCODE

	arg_num = opline->op1.num;
	param = EX_VAR(opline->result.var);
	if (arg_num > EX_NUM_ARGS()) {
		zval *default_value = RT_CONSTANT(opline, opline->op2);

		if (Z_OPT_TYPE_P(default_value) == IS_CONSTANT_AST) {
			zval *cache_val = (zval*)CACHE_ADDR(Z_CACHE_SLOT_P(default_value));

			/* we keep in cache only not refcounted values */
			if (Z_TYPE_P(cache_val) != IS_UNDEF) {
				ZVAL_COPY_VALUE(param, cache_val);
			} else {
				SAVE_OPLINE();
				ZVAL_COPY(param, default_value);
				zend_ast_evaluate_ctx ctx = {0};
				if (UNEXPECTED(zval_update_constant_with_ctx(param, EX(func)->op_array.scope, &ctx) != SUCCESS)) {
					zval_ptr_dtor_nogc(param);
					ZVAL_UNDEF(param);
					HANDLE_EXCEPTION();
				}
				if (!Z_REFCOUNTED_P(param) && !ctx.had_side_effects) {
					ZVAL_COPY_VALUE(cache_val, param);
				}
			}
			ZEND_VM_C_GOTO(recv_init_check_type);
		} else {
			ZVAL_COPY(param, default_value);
		}
	} else {
ZEND_VM_C_LABEL(recv_init_check_type):
		if ((EX(func)->op_array.fn_flags & ZEND_ACC_HAS_TYPE_HINTS) != 0) {
			SAVE_OPLINE();
			if (UNEXPECTED(!zend_verify_recv_arg_type(EX(func), arg_num, param))) {
				HANDLE_EXCEPTION();
			}
		}
	}

	ZEND_VM_REPEAT_OPCODE(ZEND_RECV_INIT);
	ZEND_VM_NEXT_OPCODE();
}

ZEND_VM_HANDLER(164, ZEND_RECV_VARIADIC, NUM, UNUSED)
{
	USE_OPLINE
	uint32_t arg_num = opline->op1.num;
	uint32_t arg_count = EX_NUM_ARGS();
	zval *params;

	SAVE_OPLINE();

	params = EX_VAR(opline->result.var);

	if (arg_num <= arg_count) {
		ZEND_ASSERT(EX(func)->common.fn_flags & ZEND_ACC_VARIADIC);
		ZEND_ASSERT(EX(func)->common.num_args == arg_num - 1);
		zend_arg_info *arg_info = &EX(func)->common.arg_info[arg_num - 1];

		array_init_size(params, arg_count - arg_num + 1);
		zend_hash_real_init_packed(Z_ARRVAL_P(params));
		ZEND_HASH_FILL_PACKED(Z_ARRVAL_P(params)) {
			zval *param = EX_VAR_NUM(EX(func)->op_array.last_var + EX(func)->op_array.T);
			if (ZEND_TYPE_IS_SET(arg_info->type)) {
				ZEND_ADD_CALL_FLAG(execute_data, ZEND_CALL_FREE_EXTRA_ARGS);
				do {
					if (UNEXPECTED(!zend_verify_variadic_arg_type(EX(func), arg_info, arg_num, param))) {
						ZEND_HASH_FILL_FINISH();
						HANDLE_EXCEPTION();
					}

					if (Z_OPT_REFCOUNTED_P(param)) Z_ADDREF_P(param);
					ZEND_HASH_FILL_ADD(param);
					param++;
				} while (++arg_num <= arg_count);
			} else {
				do {
					if (Z_OPT_REFCOUNTED_P(param)) Z_ADDREF_P(param);
					ZEND_HASH_FILL_ADD(param);
					param++;
				} while (++arg_num <= arg_count);
			}
		} ZEND_HASH_FILL_END();
	} else {
		ZVAL_EMPTY_ARRAY(params);
	}

	if (EX_CALL_INFO() & ZEND_CALL_HAS_EXTRA_NAMED_PARAMS) {
		zend_string *name;
		zval *param;
		zend_arg_info *arg_info = &EX(func)->common.arg_info[EX(func)->common.num_args];
		if (ZEND_TYPE_IS_SET(arg_info->type)) {
			SEPARATE_ARRAY(params);
			ZEND_HASH_MAP_FOREACH_STR_KEY_VAL(EX(extra_named_params), name, param) {
				if (UNEXPECTED(!zend_verify_variadic_arg_type(EX(func), arg_info, arg_num, param))) {
					HANDLE_EXCEPTION();
				}
				Z_TRY_ADDREF_P(param);
				zend_hash_add_new(Z_ARRVAL_P(params), name, param);
			} ZEND_HASH_FOREACH_END();
		} else if (zend_hash_num_elements(Z_ARRVAL_P(params)) == 0) {
			GC_ADDREF(EX(extra_named_params));
			ZVAL_ARR(params, EX(extra_named_params));
		} else {
			SEPARATE_ARRAY(params);
			ZEND_HASH_MAP_FOREACH_STR_KEY_VAL(EX(extra_named_params), name, param) {
				Z_TRY_ADDREF_P(param);
				zend_hash_add_new(Z_ARRVAL_P(params), name, param);
			} ZEND_HASH_FOREACH_END();
		}
	}

	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

ZEND_VM_COLD_CONST_HANDLER(52, ZEND_BOOL, CONST|TMPVAR|CV, ANY)
{
	USE_OPLINE
	zval *val;

	val = GET_OP1_ZVAL_PTR_UNDEF(BP_VAR_R);
	if (Z_TYPE_INFO_P(val) == IS_TRUE) {
		ZVAL_TRUE(EX_VAR(opline->result.var));
	} else if (EXPECTED(Z_TYPE_INFO_P(val) <= IS_TRUE)) {
		/* The result and op1 can be the same cv zval */
		const uint32_t orig_val_type = Z_TYPE_INFO_P(val);
		ZVAL_FALSE(EX_VAR(opline->result.var));
		if (OP1_TYPE == IS_CV && UNEXPECTED(orig_val_type == IS_UNDEF)) {
			SAVE_OPLINE();
			ZVAL_UNDEFINED_OP1();
			ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
		}
	} else {
		SAVE_OPLINE();
		ZVAL_BOOL(EX_VAR(opline->result.var), i_zend_is_true(val));
		FREE_OP1();
		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
	}
	ZEND_VM_NEXT_OPCODE();
}

ZEND_VM_HELPER(zend_case_helper, ANY, ANY, zval *op_1, zval *op_2)
{
	int ret;
	USE_OPLINE

	SAVE_OPLINE();
	if (UNEXPECTED(Z_TYPE_INFO_P(op_1) == IS_UNDEF)) {
		op_1 = ZVAL_UNDEFINED_OP1();
	}
	if (UNEXPECTED(Z_TYPE_INFO_P(op_2) == IS_UNDEF)) {
		op_2 = ZVAL_UNDEFINED_OP2();
	}
	ret = zend_compare(op_1, op_2);
	if (OP2_TYPE & (IS_TMP_VAR|IS_VAR)) {
		zval_ptr_dtor_nogc(op_2);
	}
	ZEND_VM_SMART_BRANCH(ret == 0, 1);
}

ZEND_VM_HANDLER(48, ZEND_CASE, TMPVAR, CONST|TMPVAR|CV)
{
	USE_OPLINE
	zval *op1, *op2;
	double d1, d2;

	op1 = GET_OP1_ZVAL_PTR_UNDEF(BP_VAR_R);
	op2 = GET_OP2_ZVAL_PTR_UNDEF(BP_VAR_R);
	if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
		if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
			if (EXPECTED(Z_LVAL_P(op1) == Z_LVAL_P(op2))) {
ZEND_VM_C_LABEL(case_true):
				ZEND_VM_SMART_BRANCH_TRUE();
			} else {
ZEND_VM_C_LABEL(case_false):
				ZEND_VM_SMART_BRANCH_FALSE();
			}
		} else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
			d1 = (double)Z_LVAL_P(op1);
			d2 = Z_DVAL_P(op2);
			ZEND_VM_C_GOTO(case_double);
		}
	} else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) {
		if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
			d1 = Z_DVAL_P(op1);
			d2 = Z_DVAL_P(op2);
ZEND_VM_C_LABEL(case_double):
			if (d1 == d2) {
				ZEND_VM_C_GOTO(case_true);
			} else {
				ZEND_VM_C_GOTO(case_false);
			}
		} else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
			d1 = Z_DVAL_P(op1);
			d2 = (double)Z_LVAL_P(op2);
			ZEND_VM_C_GOTO(case_double);
		}
	} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
		if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
			bool result = zend_fast_equal_strings(Z_STR_P(op1), Z_STR_P(op2));
			FREE_OP2();
			if (result) {
				ZEND_VM_C_GOTO(case_true);
			} else {
				ZEND_VM_C_GOTO(case_false);
			}
		}
	}
	ZEND_VM_DISPATCH_TO_HELPER(zend_case_helper, op_1, op1, op_2, op2);
}

ZEND_VM_HANDLER(68, ZEND_NEW, UNUSED|CLASS_FETCH|CONST|VAR, UNUSED|CACHE_SLOT, NUM)
{
	USE_OPLINE
	zval *result;
	zend_function *constructor;
	zend_class_entry *ce;
	zend_execute_data *call;

	SAVE_OPLINE();
	if (OP1_TYPE == IS_CONST) {
		ce = CACHED_PTR(opline->op2.num);
		if (UNEXPECTED(ce == NULL)) {
			ce = zend_fetch_class_by_name(Z_STR_P(RT_CONSTANT(opline, opline->op1)), Z_STR_P(RT_CONSTANT(opline, opline->op1) + 1), ZEND_FETCH_CLASS_DEFAULT | ZEND_FETCH_CLASS_EXCEPTION);
			if (UNEXPECTED(ce == NULL)) {
				ZVAL_UNDEF(EX_VAR(opline->result.var));
				HANDLE_EXCEPTION();
			}
			CACHE_PTR(opline->op2.num, ce);
		}
	} else if (OP1_TYPE == IS_UNUSED) {
		ce = zend_fetch_class(NULL, opline->op1.num);
		if (UNEXPECTED(ce == NULL)) {
			ZVAL_UNDEF(EX_VAR(opline->result.var));
			HANDLE_EXCEPTION();
		}
	} else {
		ce = Z_CE_P(EX_VAR(opline->op1.var));
	}

	result = EX_VAR(opline->result.var);
	if (UNEXPECTED(object_init_ex(result, ce) != SUCCESS)) {
		ZVAL_UNDEF(result);
		HANDLE_EXCEPTION();
	}

	constructor = Z_OBJ_HT_P(result)->get_constructor(Z_OBJ_P(result));
	if (constructor == NULL) {
		/* If there are no arguments, skip over the DO_FCALL opcode. We check if the next
		 * opcode is DO_FCALL in case EXT instructions are used. */
		if (EXPECTED(opline->extended_value == 0 && (opline+1)->opcode == ZEND_DO_FCALL)) {
			ZEND_VM_NEXT_OPCODE_EX(1, 2);
		}

		if (UNEXPECTED(EG(exception))) {
			HANDLE_EXCEPTION();
		}

		/* Perform a dummy function call */
		call = zend_vm_stack_push_call_frame(
			ZEND_CALL_FUNCTION, (zend_function *) &zend_pass_function,
			opline->extended_value, NULL);
	} else {
		if (EXPECTED(constructor->type == ZEND_USER_FUNCTION) && UNEXPECTED(!RUN_TIME_CACHE(&constructor->op_array))) {
			init_func_run_time_cache(&constructor->op_array);
		}
		/* We are not handling overloaded classes right now */
		call = zend_vm_stack_push_call_frame(
			ZEND_CALL_FUNCTION | ZEND_CALL_RELEASE_THIS | ZEND_CALL_HAS_THIS,
			constructor,
			opline->extended_value,
			Z_OBJ_P(result));
		Z_ADDREF_P(result);
	}

	call->prev_execute_data = EX(call);
	EX(call) = call;
	ZEND_VM_NEXT_OPCODE();
}

ZEND_VM_COLD_CONST_HANDLER(110, ZEND_CLONE, CONST|TMPVAR|UNUSED|THIS|CV, ANY)
{
	USE_OPLINE
	zval *obj;
	zend_object *zobj;
	zend_class_entry *ce, *scope;
	zend_function *clone;
	zend_object_clone_obj_t clone_call;

	SAVE_OPLINE();
	obj = GET_OP1_OBJ_ZVAL_PTR_UNDEF(BP_VAR_R);

	/* ZEND_CLONE also exists as the clone() function and both implementations must be kept in sync.
	 * The OPcode intentionally does not support a clone-with property list to keep it simple. */

	do {
		if (OP1_TYPE == IS_CONST ||
		    (OP1_TYPE != IS_UNUSED && UNEXPECTED(Z_TYPE_P(obj) != IS_OBJECT))) {
			if ((OP1_TYPE & (IS_VAR|IS_CV)) && Z_ISREF_P(obj)) {
				obj = Z_REFVAL_P(obj);
				if (EXPECTED(Z_TYPE_P(obj) == IS_OBJECT)) {
					break;
				}
			}
			ZVAL_UNDEF(EX_VAR(opline->result.var));
			if (OP1_TYPE == IS_CV && UNEXPECTED(Z_TYPE_P(obj) == IS_UNDEF)) {
				ZVAL_UNDEFINED_OP1();
				if (UNEXPECTED(EG(exception) != NULL)) {
					HANDLE_EXCEPTION();
				}
			}
			zend_type_error("clone(): Argument #1 ($object) must be of type object, %s given", zend_zval_value_name(obj));
			FREE_OP1();
			HANDLE_EXCEPTION();
		}
	} while (0);

	zobj = Z_OBJ_P(obj);
	ce = zobj->ce;
	clone = ce->clone;
	clone_call = zobj->handlers->clone_obj;
	if (UNEXPECTED(clone_call == NULL)) {
		zend_throw_error(NULL, "Trying to clone an uncloneable object of class %s", ZSTR_VAL(ce->name));
		FREE_OP1();
		ZVAL_UNDEF(EX_VAR(opline->result.var));
		HANDLE_EXCEPTION();
	}

	if (clone && !(clone->common.fn_flags & ZEND_ACC_PUBLIC)) {
		scope = EX(func)->op_array.scope;
		ZEND_ASSERT(!(clone->common.fn_flags & ZEND_ACC_PUBLIC));
		if (!zend_check_method_accessible(clone, scope)) {
			zend_bad_method_call(clone, clone->common.function_name, scope);
			FREE_OP1();
			ZVAL_UNDEF(EX_VAR(opline->result.var));
			HANDLE_EXCEPTION();
		}
	}

	ZVAL_OBJ(EX_VAR(opline->result.var), clone_call(zobj));

	FREE_OP1();
	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

ZEND_VM_HOT_HANDLER(99, ZEND_FETCH_CONSTANT, UNUSED|CONST_FETCH, CONST, CACHE_SLOT)
{
	USE_OPLINE
	zend_constant *c;

	c = CACHED_PTR(opline->extended_value);
	if (EXPECTED(c != NULL) && EXPECTED(!IS_SPECIAL_CACHE_VAL(c))) {
		ZVAL_COPY_OR_DUP(EX_VAR(opline->result.var), &c->value);
		ZEND_VM_NEXT_OPCODE();
	}

	SAVE_OPLINE();
	zend_quick_get_constant(RT_CONSTANT(opline, opline->op2) + 1, opline->op1.num OPLINE_CC EXECUTE_DATA_CC);
	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

ZEND_VM_HANDLER(181, ZEND_FETCH_CLASS_CONSTANT, VAR|CONST|UNUSED|CLASS_FETCH, CONST|TMPVARCV, CACHE_SLOT)
{
	zend_class_entry *ce, *scope;
	zend_class_constant *c;
	zval *value, *zv, *constant_zv;
	zend_string *constant_name;
	USE_OPLINE

	SAVE_OPLINE();

	do {
		if (OP1_TYPE == IS_CONST && OP2_TYPE == IS_CONST) {
			if (EXPECTED(CACHED_PTR(opline->extended_value + sizeof(void*)))) {
				value = CACHED_PTR(opline->extended_value + sizeof(void*));
				break;
			}
		}
		if (OP1_TYPE == IS_CONST) {
			if (EXPECTED(CACHED_PTR(opline->extended_value))) {
				ce = CACHED_PTR(opline->extended_value);
			} else {
				ce = zend_fetch_class_by_name(Z_STR_P(RT_CONSTANT(opline, opline->op1)), Z_STR_P(RT_CONSTANT(opline, opline->op1) + 1), ZEND_FETCH_CLASS_DEFAULT | ZEND_FETCH_CLASS_EXCEPTION);
				if (UNEXPECTED(ce == NULL)) {
					ZVAL_UNDEF(EX_VAR(opline->result.var));
					FREE_OP2();
					HANDLE_EXCEPTION();
				}
				CACHE_PTR(opline->extended_value, ce);
			}
		} else if (OP1_TYPE == IS_UNUSED) {
			ce = zend_fetch_class(NULL, opline->op1.num);
			if (UNEXPECTED(ce == NULL)) {
				ZVAL_UNDEF(EX_VAR(opline->result.var));
				FREE_OP2();
				HANDLE_EXCEPTION();
			}
		} else {
			ce = Z_CE_P(EX_VAR(opline->op1.var));
		}
		if (OP1_TYPE != IS_CONST
			&& OP2_TYPE == IS_CONST
			&& EXPECTED(CACHED_PTR(opline->extended_value) == ce)) {
			value = CACHED_PTR(opline->extended_value + sizeof(void*));
			break;
		}

		constant_zv = GET_OP2_ZVAL_PTR_DEREF(BP_VAR_R);
		if (UNEXPECTED(Z_TYPE_P(constant_zv) != IS_STRING)) {
			zend_invalid_class_constant_type_error(Z_TYPE_P(constant_zv));
			ZVAL_UNDEF(EX_VAR(opline->result.var));
			FREE_OP2();
			HANDLE_EXCEPTION();
		}
		constant_name = Z_STR_P(constant_zv);
		/* Magic 'class' for constant OP2 is caught at compile-time */
		if (OP2_TYPE != IS_CONST && UNEXPECTED(zend_string_equals_literal_ci(constant_name, "class"))) {
			ZVAL_STR_COPY(EX_VAR(opline->result.var), ce->name);
			FREE_OP2();
			ZEND_VM_NEXT_OPCODE();
		}
		zv = OP2_TYPE == IS_CONST
			? zend_hash_find_known_hash(CE_CONSTANTS_TABLE(ce), constant_name)
			: zend_hash_find(CE_CONSTANTS_TABLE(ce), constant_name);

		if (EXPECTED(zv != NULL)) {
			c = Z_PTR_P(zv);
			scope = EX(func)->op_array.scope;
			if (!zend_verify_const_access(c, scope)) {
				zend_throw_error(NULL, "Cannot access %s constant %s::%s", zend_visibility_string(ZEND_CLASS_CONST_FLAGS(c)), ZSTR_VAL(ce->name), ZSTR_VAL(constant_name));
				ZVAL_UNDEF(EX_VAR(opline->result.var));
				FREE_OP2();
				HANDLE_EXCEPTION();
			}

			if (ce->ce_flags & ZEND_ACC_TRAIT) {
				zend_throw_error(NULL, "Cannot access trait constant %s::%s directly", ZSTR_VAL(ce->name), ZSTR_VAL(constant_name));
				ZVAL_UNDEF(EX_VAR(opline->result.var));
				FREE_OP2();
				HANDLE_EXCEPTION();
			}

			bool is_constant_deprecated = ZEND_CLASS_CONST_FLAGS(c) & ZEND_ACC_DEPRECATED;
			if (UNEXPECTED(is_constant_deprecated) && !CONST_IS_RECURSIVE(c)) {
				if (c->ce->type == ZEND_USER_CLASS) {
					/* Recursion protection only applied to user constants, GH-18463 */
					CONST_PROTECT_RECURSION(c);
				}
				zend_deprecated_class_constant(c, constant_name);
				if (c->ce->type == ZEND_USER_CLASS) {
					CONST_UNPROTECT_RECURSION(c);
				}

				if (EG(exception)) {
					ZVAL_UNDEF(EX_VAR(opline->result.var));
					FREE_OP2();
					HANDLE_EXCEPTION();
				}
			}

			value = &c->value;
			// Enums require loading of all class constants to build the backed enum table
			if (ce->ce_flags & ZEND_ACC_ENUM && ce->enum_backing_type != IS_UNDEF && ce->type == ZEND_USER_CLASS && !(ce->ce_flags & ZEND_ACC_CONSTANTS_UPDATED)) {
				if (UNEXPECTED(zend_update_class_constants(ce) == FAILURE)) {
					ZVAL_UNDEF(EX_VAR(opline->result.var));
					FREE_OP2();
					HANDLE_EXCEPTION();
				}
			}
			if (Z_TYPE_P(value) == IS_CONSTANT_AST) {
				if (UNEXPECTED(zend_update_class_constant(c, constant_name, c->ce) != SUCCESS)) {
					ZVAL_UNDEF(EX_VAR(opline->result.var));
					FREE_OP2();
					HANDLE_EXCEPTION();
				}
			}
			if (OP2_TYPE == IS_CONST && !is_constant_deprecated) {
				CACHE_POLYMORPHIC_PTR(opline->extended_value, ce, value);
			}
		} else {
			zend_throw_error(NULL, "Undefined constant %s::%s",
				ZSTR_VAL(ce->name), ZSTR_VAL(constant_name));
			ZVAL_UNDEF(EX_VAR(opline->result.var));
			FREE_OP2();
			HANDLE_EXCEPTION();
		}
	} while (0);

	ZVAL_COPY_OR_DUP(EX_VAR(opline->result.var), value);

	FREE_OP2();
	ZEND_VM_NEXT_OPCODE();
}

ZEND_VM_HANDLER(72, ZEND_ADD_ARRAY_ELEMENT, CONST|TMP|VAR|CV, CONST|TMPVAR|UNUSED|NEXT|CV, REF)
{
	USE_OPLINE
	zval *expr_ptr, new_expr;

	SAVE_OPLINE();
	if ((OP1_TYPE == IS_VAR || OP1_TYPE == IS_CV) &&
	    UNEXPECTED(opline->extended_value & ZEND_ARRAY_ELEMENT_REF)) {
		expr_ptr = GET_OP1_ZVAL_PTR_PTR(BP_VAR_W);
		if (Z_ISREF_P(expr_ptr)) {
			Z_ADDREF_P(expr_ptr);
		} else {
			ZVAL_MAKE_REF_EX(expr_ptr, 2);
		}
		FREE_OP1();
	} else {
		expr_ptr = GET_OP1_ZVAL_PTR(BP_VAR_R);
		if (OP1_TYPE == IS_TMP_VAR) {
			/* pass */
		} else if (OP1_TYPE == IS_CONST) {
			Z_TRY_ADDREF_P(expr_ptr);
		} else if (OP1_TYPE == IS_CV) {
			ZVAL_DEREF(expr_ptr);
			Z_TRY_ADDREF_P(expr_ptr);
		} else /* if (OP1_TYPE == IS_VAR) */ {
			if (UNEXPECTED(Z_ISREF_P(expr_ptr))) {
				zend_refcounted *ref = Z_COUNTED_P(expr_ptr);

				expr_ptr = Z_REFVAL_P(expr_ptr);
				if (UNEXPECTED(GC_DELREF(ref) == 0)) {
					ZVAL_COPY_VALUE(&new_expr, expr_ptr);
					expr_ptr = &new_expr;
					efree_size(ref, sizeof(zend_reference));
				} else if (Z_OPT_REFCOUNTED_P(expr_ptr)) {
					Z_ADDREF_P(expr_ptr);
				}
			}
		}
	}

	if (OP2_TYPE != IS_UNUSED) {
		zval *offset = GET_OP2_ZVAL_PTR_UNDEF(BP_VAR_R);
		zend_string *str;
		zend_ulong hval;

ZEND_VM_C_LABEL(add_again):
		if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) {
			str = Z_STR_P(offset);
			if (OP2_TYPE != IS_CONST) {
				if (ZEND_HANDLE_NUMERIC(str, hval)) {
					ZEND_VM_C_GOTO(num_index);
				}
			}
ZEND_VM_C_LABEL(str_index):
			zend_hash_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), str, expr_ptr);
		} else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
			hval = Z_LVAL_P(offset);
ZEND_VM_C_LABEL(num_index):
			zend_hash_index_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), hval, expr_ptr);
		} else if ((OP2_TYPE & (IS_VAR|IS_CV)) && EXPECTED(Z_TYPE_P(offset) == IS_REFERENCE)) {
			offset = Z_REFVAL_P(offset);
			ZEND_VM_C_GOTO(add_again);
		} else if (UNEXPECTED(Z_TYPE_P(offset) == IS_NULL)) {
			zval tmp;
			if (OP1_TYPE == IS_CV || OP1_TYPE == IS_VAR) {
				ZVAL_COPY(&tmp, expr_ptr);
			}
			zend_error(E_DEPRECATED, "Using null as an array offset is deprecated, use an empty string instead");
			if (OP1_TYPE == IS_CV || OP1_TYPE == IS_VAR) {
				/* A userland error handler can do funky things to the expression, so reset it */
				zval_ptr_dtor(expr_ptr);
				ZVAL_COPY_VALUE(expr_ptr, &tmp);
			}
			if (UNEXPECTED(EG(exception))) {
				zval_ptr_dtor_nogc(expr_ptr);
				HANDLE_EXCEPTION();
			}
			str = ZSTR_EMPTY_ALLOC();
			ZEND_VM_C_GOTO(str_index);
		} else if (Z_TYPE_P(offset) == IS_DOUBLE) {
			hval = zend_dval_to_lval_safe(Z_DVAL_P(offset));
			ZEND_VM_C_GOTO(num_index);
		} else if (Z_TYPE_P(offset) == IS_FALSE) {
			hval = 0;
			ZEND_VM_C_GOTO(num_index);
		} else if (Z_TYPE_P(offset) == IS_TRUE) {
			hval = 1;
			ZEND_VM_C_GOTO(num_index);
		} else if (Z_TYPE_P(offset) == IS_RESOURCE) {
			zend_use_resource_as_offset(offset);
			hval = Z_RES_HANDLE_P(offset);
			ZEND_VM_C_GOTO(num_index);
		} else if (OP2_TYPE == IS_CV && Z_TYPE_P(offset) == IS_UNDEF) {
			ZVAL_UNDEFINED_OP2();
			str = ZSTR_EMPTY_ALLOC();
			ZEND_VM_C_GOTO(str_index);
		} else {
			zend_illegal_array_offset_access(offset);
			zval_ptr_dtor_nogc(expr_ptr);
		}
		FREE_OP2();
	} else {
		if (!zend_hash_next_index_insert(Z_ARRVAL_P(EX_VAR(opline->result.var)), expr_ptr)) {
			zend_cannot_add_element();
			zval_ptr_dtor_nogc(expr_ptr);
		}
	}
	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

ZEND_VM_HANDLER(147, ZEND_ADD_ARRAY_UNPACK, ANY, ANY)
{
	USE_OPLINE
	zval *op1;
	HashTable *result_ht;

	SAVE_OPLINE();
	op1 = GET_OP1_ZVAL_PTR(BP_VAR_R);
	result_ht = Z_ARRVAL_P(EX_VAR(opline->result.var));

ZEND_VM_C_LABEL(add_unpack_again):
	if (EXPECTED(Z_TYPE_P(op1) == IS_ARRAY)) {
		HashTable *ht = Z_ARRVAL_P(op1);
		zval *val;

		if (HT_IS_PACKED(ht) && (zend_hash_num_elements(result_ht) == 0 || HT_IS_PACKED(result_ht))) {
			/* zend_hash_extend() skips initialization when the number of elements is 0,
			 * but the code below expects that result_ht is initialized as packed.
			 * We can just skip the work in that case. */
			if (result_ht->nNumUsed + zend_hash_num_elements(ht) > 0) {
				zend_hash_extend(result_ht, result_ht->nNumUsed + zend_hash_num_elements(ht), 1);
				ZEND_HASH_FILL_PACKED(result_ht) {
					ZEND_HASH_PACKED_FOREACH_VAL(ht, val) {
						if (UNEXPECTED(Z_ISREF_P(val)) &&
							UNEXPECTED(Z_REFCOUNT_P(val) == 1)) {
							val = Z_REFVAL_P(val);
						}
						Z_TRY_ADDREF_P(val);
						ZEND_HASH_FILL_ADD(val);
					} ZEND_HASH_FOREACH_END();
				} ZEND_HASH_FILL_END();
			}
		} else {
			zend_string *key;

			ZEND_HASH_FOREACH_STR_KEY_VAL(ht, key, val) {
				if (UNEXPECTED(Z_ISREF_P(val)) &&
					UNEXPECTED(Z_REFCOUNT_P(val) == 1)) {
					val = Z_REFVAL_P(val);
				}
				Z_TRY_ADDREF_P(val);
				if (key) {
					zend_hash_update(result_ht, key, val);
				} else {
					if (!zend_hash_next_index_insert(result_ht, val)) {
						zend_cannot_add_element();
						zval_ptr_dtor_nogc(val);
						break;
					}
				}
			} ZEND_HASH_FOREACH_END();
		}
	} else if (EXPECTED(Z_TYPE_P(op1) == IS_OBJECT)) {
		zend_class_entry *ce = Z_OBJCE_P(op1);
		zend_object_iterator *iter;

		if (!ce || !ce->get_iterator) {
			zend_type_error("Only arrays and Traversables can be unpacked, %s given", zend_zval_value_name(op1));
		} else {
			iter = ce->get_iterator(ce, op1, 0);
			if (UNEXPECTED(!iter)) {
				FREE_OP1();
				if (!EG(exception)) {
					zend_throw_exception_ex(
						NULL, 0, "Object of type %s did not create an Iterator", ZSTR_VAL(ce->name)
					);
				}
				HANDLE_EXCEPTION();
			}

			const zend_object_iterator_funcs *funcs = iter->funcs;
			if (funcs->rewind) {
				funcs->rewind(iter);
			}

			for (; funcs->valid(iter) == SUCCESS; ) {
				zval *val;

				if (UNEXPECTED(EG(exception) != NULL)) {
					break;
				}

				val = funcs->get_current_data(iter);
				if (UNEXPECTED(EG(exception) != NULL)) {
					break;
				}

				zval key;
				if (funcs->get_current_key) {
					funcs->get_current_key(iter, &key);
					if (UNEXPECTED(EG(exception) != NULL)) {
						break;
					}

					if (UNEXPECTED(Z_TYPE(key) != IS_LONG && Z_TYPE(key) != IS_STRING)) {
						zend_throw_error(NULL,
							"Keys must be of type int|string during array unpacking");
						zval_ptr_dtor(&key);
						break;
					}
				} else {
					ZVAL_UNDEF(&key);
				}

				ZVAL_DEREF(val);
				Z_TRY_ADDREF_P(val);

				zend_ulong num_key;
				if (Z_TYPE(key) == IS_STRING && !ZEND_HANDLE_NUMERIC(Z_STR(key), num_key)) {
					zend_hash_update(result_ht, Z_STR(key), val);
					zval_ptr_dtor_str(&key);
				} else {
					zval_ptr_dtor(&key);
					if (!zend_hash_next_index_insert(result_ht, val)) {
						zend_cannot_add_element();
						zval_ptr_dtor_nogc(val);
						break;
					}
				}

				funcs->move_forward(iter);
				if (UNEXPECTED(EG(exception))) {
					break;
				}
			}

			zend_iterator_dtor(iter);
		}
	} else if (EXPECTED(Z_ISREF_P(op1))) {
		op1 = Z_REFVAL_P(op1);
		ZEND_VM_C_GOTO(add_unpack_again);
	} else {
		zend_throw_error(NULL, "Only arrays and Traversables can be unpacked, %s given", zend_zval_value_name(op1));
	}

	FREE_OP1();
	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

ZEND_VM_HANDLER(71, ZEND_INIT_ARRAY, CONST|TMP|VAR|CV|UNUSED, CONST|TMPVAR|UNUSED|NEXT|CV, ARRAY_INIT|REF)
{
	zval *array;
	uint32_t size;
	USE_OPLINE

	SAVE_OPLINE();
	array = EX_VAR(opline->result.var);
	if (OP1_TYPE != IS_UNUSED) {
		size = opline->extended_value >> ZEND_ARRAY_SIZE_SHIFT;
		ZVAL_ARR(array, zend_new_array(size));
		/* Explicitly initialize array as not-packed if flag is set */
		if (opline->extended_value & ZEND_ARRAY_NOT_PACKED) {
			zend_hash_real_init_mixed(Z_ARRVAL_P(array));
		}
		ZEND_VM_DISPATCH_TO_HANDLER(ZEND_ADD_ARRAY_ELEMENT);
	} else {
		ZVAL_ARR(array, zend_new_array(0));
		ZEND_VM_NEXT_OPCODE();
	}
}

ZEND_VM_COLD_CONST_HANDLER(51, ZEND_CAST, CONST|TMP|VAR|CV, ANY, TYPE)
{
	USE_OPLINE
	zval *expr;
	zval *result = EX_VAR(opline->result.var);

	SAVE_OPLINE();
	expr = GET_OP1_ZVAL_PTR(BP_VAR_R);

	switch (opline->extended_value) {
		case IS_LONG:
			ZVAL_LONG(result, zval_get_long(expr));
			break;
		case IS_DOUBLE:
			ZVAL_DOUBLE(result, zval_get_double(expr));
			break;
		case IS_STRING:
			ZVAL_STR(result, zval_get_string(expr));
			break;
		default:
			ZEND_ASSERT(opline->extended_value != _IS_BOOL && "Must use ZEND_BOOL instead");
			if (OP1_TYPE & (IS_VAR|IS_CV)) {
				ZVAL_DEREF(expr);
			}
			/* If value is already of correct type, return it directly */
			if (Z_TYPE_P(expr) == opline->extended_value) {
				ZVAL_COPY_VALUE(result, expr);
				if (OP1_TYPE == IS_CONST) {
					if (UNEXPECTED(Z_OPT_REFCOUNTED_P(result))) Z_ADDREF_P(result);
				} else if (OP1_TYPE != IS_TMP_VAR) {
					if (Z_OPT_REFCOUNTED_P(result)) Z_ADDREF_P(result);
				}

				FREE_OP1_IF_VAR();
				ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
			}

			if (opline->extended_value == IS_ARRAY) {
				zend_cast_zval_to_array(result, expr, OP1_TYPE);
			} else {
				ZEND_ASSERT(opline->extended_value == IS_OBJECT);
				zend_cast_zval_to_object(result, expr, OP1_TYPE);
			}
	}

	FREE_OP1();
	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

ZEND_VM_HANDLER(73, ZEND_INCLUDE_OR_EVAL, CONST|TMPVAR|CV, ANY, EVAL, SPEC(OBSERVER))
{
	USE_OPLINE
	zend_op_array *new_op_array;
	zval *inc_filename;

	SAVE_OPLINE();
	inc_filename = GET_OP1_ZVAL_PTR(BP_VAR_R);
	new_op_array = zend_include_or_eval(inc_filename, opline->extended_value);
	if (UNEXPECTED(EG(exception) != NULL)) {
		FREE_OP1();
		if (new_op_array != ZEND_FAKE_OP_ARRAY && new_op_array != NULL) {
			destroy_op_array(new_op_array);
			efree_size(new_op_array, sizeof(zend_op_array));
		}
		UNDEF_RESULT();
		HANDLE_EXCEPTION();
	} else if (new_op_array == ZEND_FAKE_OP_ARRAY) {
		if (RETURN_VALUE_USED(opline)) {
			ZVAL_TRUE(EX_VAR(opline->result.var));
		}
	} else if (UNEXPECTED(new_op_array == NULL)) {
		if (RETURN_VALUE_USED(opline)) {
			ZVAL_FALSE(EX_VAR(opline->result.var));
		}
	} else if (new_op_array->last == 1
			&& new_op_array->opcodes[0].opcode == ZEND_RETURN
			&& new_op_array->opcodes[0].op1_type == IS_CONST
			&& EXPECTED(zend_execute_ex == execute_ex)) {
		if (RETURN_VALUE_USED(opline)) {
			const zend_op *op = new_op_array->opcodes;

			ZVAL_COPY(EX_VAR(opline->result.var), RT_CONSTANT(op, op->op1));
		}
		zend_destroy_static_vars(new_op_array);
		destroy_op_array(new_op_array);
		efree_size(new_op_array, sizeof(zend_op_array));
	} else {
		zval *return_value = NULL;
		zend_execute_data *call;
		if (RETURN_VALUE_USED(opline)) {
			return_value = EX_VAR(opline->result.var);
		}

		new_op_array->scope = EX(func)->op_array.scope;

		call = zend_vm_stack_push_call_frame(
			(Z_TYPE_INFO(EX(This)) & ZEND_CALL_HAS_THIS) | ZEND_CALL_NESTED_CODE | ZEND_CALL_HAS_SYMBOL_TABLE,
			(zend_function*)new_op_array, 0,
			Z_PTR(EX(This)));

		if (EX_CALL_INFO() & ZEND_CALL_HAS_SYMBOL_TABLE) {
			call->symbol_table = EX(symbol_table);
		} else {
			call->symbol_table = zend_rebuild_symbol_table();
		}

		call->prev_execute_data = execute_data;
		i_init_code_execute_data(call, new_op_array, return_value);
		ZEND_OBSERVER_FCALL_BEGIN(call);
		if (EXPECTED(zend_execute_ex == execute_ex)) {
			FREE_OP1();
			ZEND_VM_ENTER();
		} else {
			ZEND_ADD_CALL_FLAG(call, ZEND_CALL_TOP);
			zend_execute_ex(call);
			zend_vm_stack_free_call_frame(call);
		}

		zend_destroy_static_vars(new_op_array);
		destroy_op_array(new_op_array);
		efree_size(new_op_array, sizeof(zend_op_array));
		if (UNEXPECTED(EG(exception) != NULL)) {
			zend_rethrow_exception(execute_data);
			FREE_OP1();
			UNDEF_RESULT();
			HANDLE_EXCEPTION();
		}
	}
	FREE_OP1();
	ZEND_VM_NEXT_OPCODE();
}

ZEND_VM_HANDLER(153, ZEND_UNSET_CV, CV, UNUSED)
{
	USE_OPLINE
	zval *var = EX_VAR(opline->op1.var);

	if (Z_REFCOUNTED_P(var)) {
		zend_refcounted *garbage = Z_COUNTED_P(var);

		ZVAL_UNDEF(var);
		SAVE_OPLINE();
		GC_DTOR(garbage);
		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
	} else {
		ZVAL_UNDEF(var);
	}
	ZEND_VM_NEXT_OPCODE();
}

ZEND_VM_HANDLER(74, ZEND_UNSET_VAR, CONST|TMPVAR|CV, UNUSED, VAR_FETCH)
{
	USE_OPLINE
	zval *varname;
	zend_string *name, *tmp_name;
	HashTable *target_symbol_table;

	SAVE_OPLINE();

	varname = GET_OP1_ZVAL_PTR_UNDEF(BP_VAR_R);

	if (OP1_TYPE == IS_CONST) {
		name = Z_STR_P(varname);
	} else if (EXPECTED(Z_TYPE_P(varname) == IS_STRING)) {
		name = Z_STR_P(varname);
		tmp_name = NULL;
	} else {
		if (OP1_TYPE == IS_CV && UNEXPECTED(Z_TYPE_P(varname) == IS_UNDEF)) {
			varname = ZVAL_UNDEFINED_OP1();
		}
		name = zval_try_get_tmp_string(varname, &tmp_name);
		if (UNEXPECTED(!name)) {
			FREE_OP1();
			HANDLE_EXCEPTION();
		}
	}

	target_symbol_table = zend_get_target_symbol_table(opline->extended_value EXECUTE_DATA_CC);
	zend_hash_del_ind(target_symbol_table, name);

	if (OP1_TYPE != IS_CONST) {
		zend_tmp_string_release(tmp_name);
	}
	FREE_OP1();
	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

/* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CLASS_FETCH|CONST|VAR) */
ZEND_VM_COLD_HANDLER(179, ZEND_UNSET_STATIC_PROP, ANY, ANY, CACHE_SLOT)
{
	USE_OPLINE
	zval *varname;
	zend_string *name, *tmp_name = NULL;
	zend_class_entry *ce;

	SAVE_OPLINE();

	if (OP2_TYPE == IS_CONST) {
		ce = CACHED_PTR(opline->extended_value);
		if (UNEXPECTED(ce == NULL)) {
			ce = zend_fetch_class_by_name(Z_STR_P(RT_CONSTANT(opline, opline->op2)), Z_STR_P(RT_CONSTANT(opline, opline->op2) + 1), ZEND_FETCH_CLASS_DEFAULT | ZEND_FETCH_CLASS_EXCEPTION);
			if (UNEXPECTED(ce == NULL)) {
				FREE_OP1();
				HANDLE_EXCEPTION();
			}
			/*CACHE_PTR(opline->extended_value, ce);*/
		}
	} else if (OP2_TYPE == IS_UNUSED) {
		ce = zend_fetch_class(NULL, opline->op2.num);
		if (UNEXPECTED(ce == NULL)) {
			FREE_OP1();
			HANDLE_EXCEPTION();
		}
	} else {
		ce = Z_CE_P(EX_VAR(opline->op2.var));
	}

	varname = GET_OP1_ZVAL_PTR_UNDEF(BP_VAR_R);
	if (OP1_TYPE == IS_CONST) {
		name = Z_STR_P(varname);
	} else if (EXPECTED(Z_TYPE_P(varname) == IS_STRING)) {
		name = Z_STR_P(varname);
	} else {
		if (OP1_TYPE == IS_CV && UNEXPECTED(Z_TYPE_P(varname) == IS_UNDEF)) {
			varname = ZVAL_UNDEFINED_OP1();
		}
		name = zval_try_get_tmp_string(varname, &tmp_name);
		if (UNEXPECTED(!name)) {
			FREE_OP1();
			HANDLE_EXCEPTION();
		}
	}

	zend_std_unset_static_property(ce, name);

	zend_tmp_string_release(tmp_name);
	FREE_OP1();
	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

ZEND_VM_HANDLER(75, ZEND_UNSET_DIM, VAR|CV, CONST|TMPVAR|CV)
{
	USE_OPLINE
	zval *container;
	zval *offset;
	zend_ulong hval;
	zend_string *key;

	SAVE_OPLINE();
	container = GET_OP1_OBJ_ZVAL_PTR_PTR_UNDEF(BP_VAR_UNSET);
	offset = GET_OP2_ZVAL_PTR_UNDEF(BP_VAR_R);

	do {
		if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
			HashTable *ht;

ZEND_VM_C_LABEL(unset_dim_array):
			SEPARATE_ARRAY(container);
			ht = Z_ARRVAL_P(container);
ZEND_VM_C_LABEL(offset_again):
			if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) {
				key = Z_STR_P(offset);
				if (OP2_TYPE != IS_CONST) {
					if (ZEND_HANDLE_NUMERIC(key, hval)) {
						ZEND_VM_C_GOTO(num_index_dim);
					}
				}
ZEND_VM_C_LABEL(str_index_dim):
				ZEND_ASSERT(ht != &EG(symbol_table));
				zend_hash_del(ht, key);
			} else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
				hval = Z_LVAL_P(offset);
ZEND_VM_C_LABEL(num_index_dim):
				zend_hash_index_del(ht, hval);
			} else if ((OP2_TYPE & (IS_VAR|IS_CV)) && EXPECTED(Z_TYPE_P(offset) == IS_REFERENCE)) {
				offset = Z_REFVAL_P(offset);
				ZEND_VM_C_GOTO(offset_again);
			} else if (Z_TYPE_P(offset) == IS_DOUBLE) {
				/* The array may be destroyed while throwing a warning in case the float is not representable as an int.
				 * Temporarily increase the refcount to detect this situation. */
				GC_TRY_ADDREF(ht);
				hval = zend_dval_to_lval_safe(Z_DVAL_P(offset));
				if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE) && !GC_DELREF(ht)) {
					zend_array_destroy(ht);
					break;
				}
				if (EG(exception)) {
					break;
				}
				ZEND_VM_C_GOTO(num_index_dim);
			} else if (Z_TYPE_P(offset) == IS_NULL) {
				key = ZSTR_EMPTY_ALLOC();
				ZEND_VM_C_GOTO(str_index_dim);
			} else if (Z_TYPE_P(offset) == IS_FALSE) {
				hval = 0;
				ZEND_VM_C_GOTO(num_index_dim);
			} else if (Z_TYPE_P(offset) == IS_TRUE) {
				hval = 1;
				ZEND_VM_C_GOTO(num_index_dim);
			} else if (Z_TYPE_P(offset) == IS_RESOURCE) {
				zend_use_resource_as_offset(offset);
				hval = Z_RES_HANDLE_P(offset);
				ZEND_VM_C_GOTO(num_index_dim);
			} else if (OP2_TYPE == IS_CV && Z_TYPE_P(offset) == IS_UNDEF) {
				ZVAL_UNDEFINED_OP2();
				key = ZSTR_EMPTY_ALLOC();
				ZEND_VM_C_GOTO(str_index_dim);
			} else {
				zend_illegal_array_offset_unset(offset);
			}
			break;
		} else if (Z_ISREF_P(container)) {
			container = Z_REFVAL_P(container);
			if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
				ZEND_VM_C_GOTO(unset_dim_array);
			}
		}
		if (OP1_TYPE == IS_CV && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
			container = ZVAL_UNDEFINED_OP1();
		}
		if (OP2_TYPE == IS_CV && UNEXPECTED(Z_TYPE_P(offset) == IS_UNDEF)) {
			offset = ZVAL_UNDEFINED_OP2();
		}
		if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
			if (OP2_TYPE == IS_CONST && Z_EXTRA_P(offset) == ZEND_EXTRA_VALUE) {
				offset++;
			}
			Z_OBJ_HT_P(container)->unset_dimension(Z_OBJ_P(container), offset);
		} else if (UNEXPECTED(Z_TYPE_P(container) == IS_STRING)) {
			zend_throw_error(NULL, "Cannot unset string offsets");
		} else if (UNEXPECTED(Z_TYPE_P(container) > IS_FALSE)) {
			zend_throw_error(NULL, "Cannot unset offset in a non-array variable");
		} else if (UNEXPECTED(Z_TYPE_P(container) == IS_FALSE)) {
			zend_false_to_array_deprecated();
		}
	} while (0);

	FREE_OP2();
	FREE_OP1();
	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

ZEND_VM_HANDLER(76, ZEND_UNSET_OBJ, VAR|UNUSED|THIS|CV, CONST|TMPVAR|CV, CACHE_SLOT)
{
	USE_OPLINE
	zval *container;
	zval *offset;
	zend_string *name, *tmp_name;

	SAVE_OPLINE();
	container = GET_OP1_OBJ_ZVAL_PTR_PTR_UNDEF(BP_VAR_UNSET);
	offset = GET_OP2_ZVAL_PTR(BP_VAR_R);

	do {
		if (OP1_TYPE != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT)) {
			if (Z_ISREF_P(container)) {
				container = Z_REFVAL_P(container);
				if (Z_TYPE_P(container) != IS_OBJECT) {
					if (OP1_TYPE == IS_CV
					 && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
						ZVAL_UNDEFINED_OP1();
					}
					break;
				}
			} else {
				break;
			}
		}
		if (OP2_TYPE == IS_CONST) {
			name = Z_STR_P(offset);
		} else {
			name = zval_try_get_tmp_string(offset, &tmp_name);
			if (UNEXPECTED(!name)) {
				break;
			}
		}
		Z_OBJ_HT_P(container)->unset_property(Z_OBJ_P(container), name, ((OP2_TYPE == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL));
		if (OP2_TYPE != IS_CONST) {
			zend_tmp_string_release(tmp_name);
		}
	} while (0);

	FREE_OP2();
	FREE_OP1();
	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

ZEND_VM_HANDLER(77, ZEND_FE_RESET_R, CONST|TMP|VAR|CV, JMP_ADDR)
{
	USE_OPLINE
	zval *array_ptr, *result;

	SAVE_OPLINE();

	array_ptr = GET_OP1_ZVAL_PTR_DEREF(BP_VAR_R);
	if (EXPECTED(Z_TYPE_P(array_ptr) == IS_ARRAY)) {
		result = EX_VAR(opline->result.var);
		ZVAL_COPY_VALUE(result, array_ptr);
		if (OP1_TYPE != IS_TMP_VAR && Z_OPT_REFCOUNTED_P(result)) {
			Z_ADDREF_P(array_ptr);
		}
		Z_FE_POS_P(result) = 0;

		FREE_OP1_IF_VAR();
		ZEND_VM_NEXT_OPCODE();
	} else if (OP1_TYPE != IS_CONST && EXPECTED(Z_TYPE_P(array_ptr) == IS_OBJECT)) {
		zend_object *zobj = Z_OBJ_P(array_ptr);
		if (!zobj->ce->get_iterator) {
			if (UNEXPECTED(zend_object_is_lazy(zobj))) {
				zobj = zend_lazy_object_init(zobj);
				if (UNEXPECTED(EG(exception))) {
					UNDEF_RESULT();
					FREE_OP1_IF_VAR();
					HANDLE_EXCEPTION();
				}
			}
			HashTable *properties = zobj->properties;
			if (properties) {
				if (UNEXPECTED(GC_REFCOUNT(properties) > 1)) {
					if (EXPECTED(!(GC_FLAGS(properties) & IS_ARRAY_IMMUTABLE))) {
						GC_DELREF(properties);
					}
					properties = zobj->properties = zend_array_dup(properties);
				}
			} else {
				properties = zobj->handlers->get_properties(zobj);
			}

			result = EX_VAR(opline->result.var);
			ZVAL_COPY_VALUE(result, array_ptr);
			if (OP1_TYPE != IS_TMP_VAR) {
				Z_ADDREF_P(array_ptr);
			}

			if (zend_hash_num_elements(properties) == 0) {
				Z_FE_ITER_P(result) = (uint32_t) -1;
				FREE_OP1_IF_VAR();
				ZEND_VM_JMP(OP_JMP_ADDR(opline, opline->op2));
			}

			Z_FE_ITER_P(result) = zend_hash_iterator_add(properties, 0);
			FREE_OP1_IF_VAR();
			ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
		} else {
			bool is_empty = zend_fe_reset_iterator(array_ptr, 0 OPLINE_CC EXECUTE_DATA_CC);

			FREE_OP1();
			if (UNEXPECTED(EG(exception))) {
				HANDLE_EXCEPTION();
			} else if (is_empty) {
				ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0);
			} else {
				ZEND_VM_NEXT_OPCODE();
			}
		}
	} else {
		zend_error(E_WARNING, "foreach() argument must be of type array|object, %s given", zend_zval_value_name(array_ptr));
		ZVAL_UNDEF(EX_VAR(opline->result.var));
		Z_FE_ITER_P(EX_VAR(opline->result.var)) = (uint32_t)-1;
		FREE_OP1();
		ZEND_VM_JMP(OP_JMP_ADDR(opline, opline->op2));
	}
}

ZEND_VM_COLD_CONST_HANDLER(125, ZEND_FE_RESET_RW, CONST|TMP|VAR|CV, JMP_ADDR)
{
	USE_OPLINE
	zval *array_ptr, *array_ref;

	SAVE_OPLINE();

	if (OP1_TYPE == IS_VAR || OP1_TYPE == IS_CV) {
		array_ref = array_ptr = GET_OP1_ZVAL_PTR_PTR(BP_VAR_R);
		if (Z_ISREF_P(array_ref)) {
			array_ptr = Z_REFVAL_P(array_ref);
		}
	} else {
		array_ref = array_ptr = GET_OP1_ZVAL_PTR(BP_VAR_R);
	}

	if (EXPECTED(Z_TYPE_P(array_ptr) == IS_ARRAY)) {
		if (OP1_TYPE == IS_VAR || OP1_TYPE == IS_CV) {
			if (array_ptr == array_ref) {
				ZVAL_NEW_REF(array_ref, array_ref);
				array_ptr = Z_REFVAL_P(array_ref);
			}
			Z_ADDREF_P(array_ref);
			ZVAL_COPY_VALUE(EX_VAR(opline->result.var), array_ref);
		} else {
			array_ref = EX_VAR(opline->result.var);
			ZVAL_NEW_REF(array_ref, array_ptr);
			array_ptr = Z_REFVAL_P(array_ref);
		}
		if (OP1_TYPE == IS_CONST) {
			ZVAL_ARR(array_ptr, zend_array_dup(Z_ARRVAL_P(array_ptr)));
		} else {
			SEPARATE_ARRAY(array_ptr);
		}
		Z_FE_ITER_P(EX_VAR(opline->result.var)) = zend_hash_iterator_add(Z_ARRVAL_P(array_ptr), 0);

		FREE_OP1_IF_VAR();
		ZEND_VM_NEXT_OPCODE();
	} else if (OP1_TYPE != IS_CONST && EXPECTED(Z_TYPE_P(array_ptr) == IS_OBJECT)) {
		if (!Z_OBJCE_P(array_ptr)->get_iterator) {
			zend_object *zobj = Z_OBJ_P(array_ptr);
			HashTable *properties;
			if (UNEXPECTED(zend_object_is_lazy(zobj))) {
				zobj = zend_lazy_object_init(zobj);
				if (UNEXPECTED(EG(exception))) {
					UNDEF_RESULT();
					FREE_OP1_IF_VAR();
					HANDLE_EXCEPTION();
				}
			}
			if (OP1_TYPE == IS_VAR || OP1_TYPE == IS_CV) {
				if (array_ptr == array_ref) {
					ZVAL_NEW_REF(array_ref, array_ref);
					array_ptr = Z_REFVAL_P(array_ref);
				}
				Z_ADDREF_P(array_ref);
				ZVAL_COPY_VALUE(EX_VAR(opline->result.var), array_ref);
			} else {
				array_ptr = EX_VAR(opline->result.var);
				ZVAL_COPY_VALUE(array_ptr, array_ref);
			}
			if (Z_OBJ_P(array_ptr)->properties
			 && UNEXPECTED(GC_REFCOUNT(Z_OBJ_P(array_ptr)->properties) > 1)) {
				if (EXPECTED(!(GC_FLAGS(Z_OBJ_P(array_ptr)->properties) & IS_ARRAY_IMMUTABLE))) {
					GC_DELREF(Z_OBJ_P(array_ptr)->properties);
				}
				Z_OBJ_P(array_ptr)->properties = zend_array_dup(Z_OBJ_P(array_ptr)->properties);
			}

			properties = Z_OBJPROP_P(array_ptr);
			if (zend_hash_num_elements(properties) == 0) {
				Z_FE_ITER_P(EX_VAR(opline->result.var)) = (uint32_t) -1;
				FREE_OP1_IF_VAR();
				ZEND_VM_JMP(OP_JMP_ADDR(opline, opline->op2));
			}

			Z_FE_ITER_P(EX_VAR(opline->result.var)) = zend_hash_iterator_add(properties, 0);
			FREE_OP1_IF_VAR();
			ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
		} else {
			bool is_empty = zend_fe_reset_iterator(array_ptr, 1 OPLINE_CC EXECUTE_DATA_CC);
			FREE_OP1();
			if (UNEXPECTED(EG(exception))) {
				HANDLE_EXCEPTION();
			} else if (is_empty) {
				ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0);
			} else {
				ZEND_VM_NEXT_OPCODE();
			}
		}
	} else {
		zend_error(E_WARNING, "foreach() argument must be of type array|object, %s given", zend_zval_value_name(array_ptr));
		ZVAL_UNDEF(EX_VAR(opline->result.var));
		Z_FE_ITER_P(EX_VAR(opline->result.var)) = (uint32_t)-1;
		FREE_OP1();
		ZEND_VM_JMP(OP_JMP_ADDR(opline, opline->op2));
	}
}

ZEND_VM_HELPER(zend_fe_fetch_object_helper, ANY, ANY)
{
	USE_OPLINE
	zval *array;
	zval *value;
	uint32_t value_type;
	HashTable *fe_ht;
	HashPosition pos;
	Bucket *p;
	zend_object_iterator *iter;

	array = EX_VAR(opline->op1.var);
	SAVE_OPLINE();

	ZEND_ASSERT(Z_TYPE_P(array) == IS_OBJECT);
	if ((iter = zend_iterator_unwrap(array)) == NULL) {
		/* plain object */

		fe_ht = Z_OBJPROP_P(array);
		pos = zend_hash_iterator_pos(Z_FE_ITER_P(array), fe_ht);
		p = fe_ht->arData + pos;
		while (1) {
			if (UNEXPECTED(pos >= fe_ht->nNumUsed)) {
				/* reached end of iteration */
				ZEND_VM_C_GOTO(fe_fetch_r_exit);
			}
			pos++;
			value = &p->val;
			value_type = Z_TYPE_INFO_P(value);
			if (EXPECTED(value_type != IS_UNDEF)) {
				if (UNEXPECTED(value_type == IS_INDIRECT)) {
					value = Z_INDIRECT_P(value);
					value_type = Z_TYPE_INFO_P(value);
					if (EXPECTED(value_type != IS_UNDEF)
					 && EXPECTED(zend_check_property_access(Z_OBJ_P(array), p->key, 0) == SUCCESS)) {
						break;
					}
				} else if (EXPECTED(Z_OBJCE_P(array)->default_properties_count == 0)
						|| !p->key
						|| zend_check_property_access(Z_OBJ_P(array), p->key, 1) == SUCCESS) {
					break;
				}
			}
			p++;
		}
		EG(ht_iterators)[Z_FE_ITER_P(array)].pos = pos;
		if (RETURN_VALUE_USED(opline)) {
			if (UNEXPECTED(!p->key)) {
				ZVAL_LONG(EX_VAR(opline->result.var), p->h);
			} else if (ZSTR_VAL(p->key)[0]) {
				ZVAL_STR_COPY(EX_VAR(opline->result.var), p->key);
			} else {
				const char *class_name, *prop_name;
				size_t prop_name_len;
				zend_unmangle_property_name_ex(
					p->key, &class_name, &prop_name, &prop_name_len);
				ZVAL_STRINGL(EX_VAR(opline->result.var), prop_name, prop_name_len);
			}
		}
	} else {
		const zend_object_iterator_funcs *funcs = iter->funcs;
		if (EXPECTED(++iter->index > 0)) {
			/* This could cause an endless loop if index becomes zero again.
			 * In case that ever happens we need an additional flag. */
			funcs->move_forward(iter);
			if (UNEXPECTED(EG(exception) != NULL)) {
				UNDEF_RESULT();
				HANDLE_EXCEPTION();
			}
			if (UNEXPECTED(funcs->valid(iter) == FAILURE)) {
				/* reached end of iteration */
				if (UNEXPECTED(EG(exception) != NULL)) {
					UNDEF_RESULT();
					HANDLE_EXCEPTION();
				}
ZEND_VM_C_LABEL(fe_fetch_r_exit):
				ZEND_VM_SET_RELATIVE_OPCODE(opline, opline->extended_value);
				ZEND_VM_CONTINUE();
			}
		}
		value = funcs->get_current_data(iter);
		if (UNEXPECTED(EG(exception) != NULL)) {
			UNDEF_RESULT();
			HANDLE_EXCEPTION();
		}
		if (!value) {
			/* failure in get_current_data */
			ZEND_VM_C_GOTO(fe_fetch_r_exit);
		}
		if (RETURN_VALUE_USED(opline)) {
			if (funcs->get_current_key) {
				funcs->get_current_key(iter, EX_VAR(opline->result.var));
				if (UNEXPECTED(EG(exception) != NULL)) {
					UNDEF_RESULT();
					HANDLE_EXCEPTION();
				}
			} else {
				ZVAL_LONG(EX_VAR(opline->result.var), iter->index);
			}
		}
		value_type = Z_TYPE_INFO_P(value);
	}

	if (EXPECTED(OP2_TYPE == IS_CV)) {
		zval *variable_ptr = EX_VAR(opline->op2.var);
		zend_assign_to_variable(variable_ptr, value, IS_CV, EX_USES_STRICT_TYPES());
	} else {
		zval *res = EX_VAR(opline->op2.var);
		zend_refcounted *gc = Z_COUNTED_P(value);

		ZVAL_COPY_VALUE_EX(res, value, gc, value_type);
		if (Z_TYPE_INFO_REFCOUNTED(value_type)) {
			GC_ADDREF(gc);
		}
	}
	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

ZEND_VM_HOT_HANDLER(78, ZEND_FE_FETCH_R, VAR, ANY, JMP_ADDR)
{
	USE_OPLINE
	zval *array;
	zval *value;
	uint32_t value_type;
	HashTable *fe_ht;
	HashPosition pos;

	array = EX_VAR(opline->op1.var);
	if (UNEXPECTED(Z_TYPE_P(array) != IS_ARRAY)) {
		ZEND_VM_DISPATCH_TO_HELPER(zend_fe_fetch_object_helper);
	}
	fe_ht = Z_ARRVAL_P(array);
	pos = Z_FE_POS_P(array);
	if (HT_IS_PACKED(fe_ht)) {
		value = fe_ht->arPacked + pos;
		while (1) {
			if (UNEXPECTED(pos >= fe_ht->nNumUsed)) {
				/* reached end of iteration */
				ZEND_VM_SET_RELATIVE_OPCODE(opline, opline->extended_value);
				ZEND_VM_CONTINUE();
			}
			value_type = Z_TYPE_INFO_P(value);
			ZEND_ASSERT(value_type != IS_INDIRECT);
			if (EXPECTED(value_type != IS_UNDEF)) {
				break;
			}
			pos++;
			value++;
		}
		Z_FE_POS_P(array) = pos + 1;
		if (RETURN_VALUE_USED(opline)) {
			ZVAL_LONG(EX_VAR(opline->result.var), pos);
		}
	} else {
		Bucket *p;

		p = fe_ht->arData + pos;
		while (1) {
			if (UNEXPECTED(pos >= fe_ht->nNumUsed)) {
				/* reached end of iteration */
				ZEND_VM_SET_RELATIVE_OPCODE(opline, opline->extended_value);
				ZEND_VM_CONTINUE();
			}
			pos++;
			value = &p->val;
			value_type = Z_TYPE_INFO_P(value);
			ZEND_ASSERT(value_type != IS_INDIRECT);
			if (EXPECTED(value_type != IS_UNDEF)) {
				break;
			}
			p++;
		}
		Z_FE_POS_P(array) = pos;
		if (RETURN_VALUE_USED(opline)) {
			if (!p->key) {
				ZVAL_LONG(EX_VAR(opline->result.var), p->h);
			} else {
				ZVAL_STR_COPY(EX_VAR(opline->result.var), p->key);
			}
		}
	}
	if (EXPECTED(OP2_TYPE == IS_CV)) {
		zval *variable_ptr = EX_VAR(opline->op2.var);
		SAVE_OPLINE();
		zend_assign_to_variable(variable_ptr, value, IS_CV, EX_USES_STRICT_TYPES());
		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
	} else {
		zval *res = EX_VAR(opline->op2.var);
		zend_refcounted *gc = Z_COUNTED_P(value);

		ZVAL_COPY_VALUE_EX(res, value, gc, value_type);
		if (Z_TYPE_INFO_REFCOUNTED(value_type)) {
			GC_ADDREF(gc);
		}
		ZEND_VM_NEXT_OPCODE();
	}
}

ZEND_VM_HANDLER(126, ZEND_FE_FETCH_RW, VAR, ANY, JMP_ADDR)
{
	USE_OPLINE
	zval *array;
	zval *value;
	uint32_t value_type;
	HashTable *fe_ht;
	HashPosition pos;
	Bucket *p;

	array = EX_VAR(opline->op1.var);
	SAVE_OPLINE();

	ZVAL_DEREF(array);
	if (EXPECTED(Z_TYPE_P(array) == IS_ARRAY)) {
		pos = zend_hash_iterator_pos_ex(Z_FE_ITER_P(EX_VAR(opline->op1.var)), array);
		fe_ht = Z_ARRVAL_P(array);
		if (HT_IS_PACKED(fe_ht)) {
			value = fe_ht->arPacked + pos;
			while (1) {
				if (UNEXPECTED(pos >= fe_ht->nNumUsed)) {
					/* reached end of iteration */
					ZEND_VM_C_GOTO(fe_fetch_w_exit);
				}
				value_type = Z_TYPE_INFO_P(value);
				ZEND_ASSERT(value_type != IS_INDIRECT);
				if (EXPECTED(value_type != IS_UNDEF)) {
					break;
				}
				pos++;
				value++;
			}
			EG(ht_iterators)[Z_FE_ITER_P(EX_VAR(opline->op1.var))].pos = pos + 1;
			if (RETURN_VALUE_USED(opline)) {
				ZVAL_LONG(EX_VAR(opline->result.var), pos);
			}
		} else {
			p = fe_ht->arData + pos;
			while (1) {
				if (UNEXPECTED(pos >= fe_ht->nNumUsed)) {
					/* reached end of iteration */
					ZEND_VM_C_GOTO(fe_fetch_w_exit);
				}
				pos++;
				value = &p->val;
				value_type = Z_TYPE_INFO_P(value);
				ZEND_ASSERT(value_type != IS_INDIRECT);
				if (EXPECTED(value_type != IS_UNDEF)) {
					break;
				}
				p++;
			}
			EG(ht_iterators)[Z_FE_ITER_P(EX_VAR(opline->op1.var))].pos = pos;
			if (RETURN_VALUE_USED(opline)) {
				if (!p->key) {
					ZVAL_LONG(EX_VAR(opline->result.var), p->h);
				} else {
					ZVAL_STR_COPY(EX_VAR(opline->result.var), p->key);
				}
			}
		}
	} else if (EXPECTED(Z_TYPE_P(array) == IS_OBJECT)) {
		zend_object_iterator *iter;

		if ((iter = zend_iterator_unwrap(array)) == NULL) {
			/* plain object */

			fe_ht = Z_OBJPROP_P(array);
			pos = zend_hash_iterator_pos(Z_FE_ITER_P(EX_VAR(opline->op1.var)), fe_ht);
			p = fe_ht->arData + pos;
			while (1) {
				if (UNEXPECTED(pos >= fe_ht->nNumUsed)) {
					/* reached end of iteration */
					ZEND_VM_C_GOTO(fe_fetch_w_exit_exc);
				}
				pos++;
				value = &p->val;
				value_type = Z_TYPE_INFO_P(value);
				if (EXPECTED(value_type != IS_UNDEF)) {
					if (UNEXPECTED(value_type == IS_INDIRECT)) {
						value = Z_INDIRECT_P(value);
						value_type = Z_TYPE_INFO_P(value);
						if (EXPECTED(value_type != IS_UNDEF)
						 && EXPECTED(zend_check_property_access(Z_OBJ_P(array), p->key, 0) == SUCCESS)) {
							if ((value_type & Z_TYPE_MASK) != IS_REFERENCE) {
								zend_property_info *prop_info =
									zend_get_property_info_for_slot(Z_OBJ_P(array), value);
								if (prop_info) {
									if (UNEXPECTED(prop_info->flags & ZEND_ACC_READONLY)) {
										zend_throw_error(NULL,
											"Cannot acquire reference to readonly property %s::$%s",
											ZSTR_VAL(prop_info->ce->name), ZSTR_VAL(p->key));
										UNDEF_RESULT();
										HANDLE_EXCEPTION();
									}
									if (ZEND_TYPE_IS_SET(prop_info->type)) {
										ZVAL_NEW_REF(value, value);
										ZEND_REF_ADD_TYPE_SOURCE(Z_REF_P(value), prop_info);
										value_type = IS_REFERENCE_EX;
									}
								}
							}
							break;
						}
					} else if (EXPECTED(Z_OBJCE_P(array)->default_properties_count == 0)
							|| !p->key
							|| zend_check_property_access(Z_OBJ_P(array), p->key, 1) == SUCCESS) {
						break;
					}
				}
				p++;
			}
			EG(ht_iterators)[Z_FE_ITER_P(EX_VAR(opline->op1.var))].pos = pos;
			if (RETURN_VALUE_USED(opline)) {
				if (UNEXPECTED(!p->key)) {
					ZVAL_LONG(EX_VAR(opline->result.var), p->h);
				} else if (ZSTR_VAL(p->key)[0]) {
					ZVAL_STR_COPY(EX_VAR(opline->result.var), p->key);
				} else {
					const char *class_name, *prop_name;
					size_t prop_name_len;
					zend_unmangle_property_name_ex(
						p->key, &class_name, &prop_name, &prop_name_len);
					ZVAL_STRINGL(EX_VAR(opline->result.var), prop_name, prop_name_len);
				}
			}
		} else {
			const zend_object_iterator_funcs *funcs = iter->funcs;
			if (++iter->index > 0) {
				/* This could cause an endless loop if index becomes zero again.
				 * In case that ever happens we need an additional flag. */
				funcs->move_forward(iter);
				if (UNEXPECTED(EG(exception) != NULL)) {
					UNDEF_RESULT();
					HANDLE_EXCEPTION();
				}
				if (UNEXPECTED(funcs->valid(iter) == FAILURE)) {
					/* reached end of iteration */
					if (UNEXPECTED(EG(exception) != NULL)) {
						UNDEF_RESULT();
						HANDLE_EXCEPTION();
					}
					ZEND_VM_C_GOTO(fe_fetch_w_exit);
				}
			}
			value = funcs->get_current_data(iter);
			if (UNEXPECTED(EG(exception) != NULL)) {
				UNDEF_RESULT();
				HANDLE_EXCEPTION();
			}
			if (!value) {
				/* failure in get_current_data */
				ZEND_VM_C_GOTO(fe_fetch_w_exit);
			}
			if (RETURN_VALUE_USED(opline)) {
				if (funcs->get_current_key) {
					funcs->get_current_key(iter, EX_VAR(opline->result.var));
					if (UNEXPECTED(EG(exception) != NULL)) {
						UNDEF_RESULT();
						HANDLE_EXCEPTION();
					}
				} else {
					ZVAL_LONG(EX_VAR(opline->result.var), iter->index);
				}
			}
			value_type = Z_TYPE_INFO_P(value);
		}
	} else {
		zend_error(E_WARNING, "foreach() argument must be of type array|object, %s given", zend_zval_value_name(array));
ZEND_VM_C_LABEL(fe_fetch_w_exit_exc):
		if (UNEXPECTED(EG(exception))) {
			UNDEF_RESULT();
			HANDLE_EXCEPTION();
		}
ZEND_VM_C_LABEL(fe_fetch_w_exit):
		ZEND_VM_SET_RELATIVE_OPCODE(opline, opline->extended_value);
		ZEND_VM_CONTINUE();
	}

	if (EXPECTED((value_type & Z_TYPE_MASK) != IS_REFERENCE)) {
		zend_refcounted *gc = Z_COUNTED_P(value);
		zval *ref;
		ZVAL_NEW_EMPTY_REF(value);
		ref = Z_REFVAL_P(value);
		ZVAL_COPY_VALUE_EX(ref, value, gc, value_type);
	}
	if (EXPECTED(OP2_TYPE == IS_CV)) {
		zval *variable_ptr = EX_VAR(opline->op2.var);
		if (EXPECTED(variable_ptr != value)) {
			zend_reference *ref;

			ref = Z_REF_P(value);
			GC_ADDREF(ref);
			i_zval_ptr_dtor(variable_ptr);
			ZVAL_REF(variable_ptr, ref);
		}
	} else {
		Z_ADDREF_P(value);
		ZVAL_REF(EX_VAR(opline->op2.var), Z_REF_P(value));
	}
	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

ZEND_VM_HOT_HANDLER(154, ZEND_ISSET_ISEMPTY_CV, CV, UNUSED, ISSET, SPEC(ISSET))
{
	USE_OPLINE
	zval *value;

	value = EX_VAR(opline->op1.var);
	if (!(opline->extended_value & ZEND_ISEMPTY)) {
		if (Z_TYPE_P(value) > IS_NULL &&
		    (!Z_ISREF_P(value) || Z_TYPE_P(Z_REFVAL_P(value)) != IS_NULL)) {
			ZEND_VM_SMART_BRANCH_TRUE();
		} else {
			ZEND_VM_SMART_BRANCH_FALSE();
		}
	} else {
		bool result;

		SAVE_OPLINE();
		result = !i_zend_is_true(value);
		ZEND_VM_SMART_BRANCH(result, 1);
	}
}

ZEND_VM_HANDLER(114, ZEND_ISSET_ISEMPTY_VAR, CONST|TMPVAR|CV, UNUSED, VAR_FETCH|ISSET)
{
	USE_OPLINE
	zval *value;
	bool result;
	zval *varname;
	zend_string *name, *tmp_name;
	HashTable *target_symbol_table;

	SAVE_OPLINE();
	varname = GET_OP1_ZVAL_PTR(BP_VAR_IS);
	if (OP1_TYPE == IS_CONST) {
		name = Z_STR_P(varname);
	} else {
		name = zval_get_tmp_string(varname, &tmp_name);
	}

	target_symbol_table = zend_get_target_symbol_table(opline->extended_value EXECUTE_DATA_CC);
	value = zend_hash_find_ex(target_symbol_table, name, OP1_TYPE == IS_CONST);

	if (OP1_TYPE != IS_CONST) {
		zend_tmp_string_release(tmp_name);
	}
	FREE_OP1();

	if (!value) {
		result = (opline->extended_value & ZEND_ISEMPTY);
	} else {
		if (Z_TYPE_P(value) == IS_INDIRECT) {
			value = Z_INDIRECT_P(value);
		}
		if (!(opline->extended_value & ZEND_ISEMPTY)) {
			if (Z_ISREF_P(value)) {
				value = Z_REFVAL_P(value);
			}
			result = Z_TYPE_P(value) > IS_NULL;
		} else {
			result = !i_zend_is_true(value);
		}
	}

	ZEND_VM_SMART_BRANCH(result, true);
}

/* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CLASS_FETCH|CONST|VAR) */
ZEND_VM_HANDLER(180, ZEND_ISSET_ISEMPTY_STATIC_PROP, ANY, CLASS_FETCH, ISSET|CACHE_SLOT)
{
	USE_OPLINE
	zval *value;
	bool result;

	SAVE_OPLINE();

	value = zend_fetch_static_property_address(NULL, opline->extended_value & ~ZEND_ISEMPTY, BP_VAR_IS, 0 OPLINE_CC EXECUTE_DATA_CC);

	if (!(opline->extended_value & ZEND_ISEMPTY)) {
		result = value != NULL && Z_TYPE_P(value) > IS_NULL &&
		    (!Z_ISREF_P(value) || Z_TYPE_P(Z_REFVAL_P(value)) != IS_NULL);
	} else {
		result = value == NULL || !i_zend_is_true(value);
	}

	ZEND_VM_SMART_BRANCH(result, 1);
}

ZEND_VM_COLD_CONSTCONST_HANDLER(115, ZEND_ISSET_ISEMPTY_DIM_OBJ, CONST|TMPVAR|CV, CONST|TMPVAR|CV, ISSET)
{
	USE_OPLINE
	zval *container;
	bool result;
	zend_ulong hval;
	zval *offset;

	SAVE_OPLINE();
	container = GET_OP1_OBJ_ZVAL_PTR_UNDEF(BP_VAR_IS);
	offset = GET_OP2_ZVAL_PTR_UNDEF(BP_VAR_R);

	if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
		HashTable *ht;
		zval *value;
		zend_string *str;

ZEND_VM_C_LABEL(isset_dim_obj_array):
		ht = Z_ARRVAL_P(container);
ZEND_VM_C_LABEL(isset_again):
		if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) {
			str = Z_STR_P(offset);
			if (OP2_TYPE != IS_CONST) {
				if (ZEND_HANDLE_NUMERIC(str, hval)) {
					ZEND_VM_C_GOTO(num_index_prop);
				}
			}
			value = zend_hash_find_ex(ht, str, OP2_TYPE == IS_CONST);
		} else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
			hval = Z_LVAL_P(offset);
ZEND_VM_C_LABEL(num_index_prop):
			value = zend_hash_index_find(ht, hval);
		} else if ((OP2_TYPE & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(offset))) {
			offset = Z_REFVAL_P(offset);
			ZEND_VM_C_GOTO(isset_again);
		} else {
			value = zend_find_array_dim_slow(ht, offset EXECUTE_DATA_CC);
			if (UNEXPECTED(EG(exception))) {
				result = 0;
				ZEND_VM_C_GOTO(isset_dim_obj_exit);
			}
		}

		if (!(opline->extended_value & ZEND_ISEMPTY)) {
			/* > IS_NULL means not IS_UNDEF and not IS_NULL */
			result = value != NULL && Z_TYPE_P(value) > IS_NULL &&
			    (!Z_ISREF_P(value) || Z_TYPE_P(Z_REFVAL_P(value)) != IS_NULL);

			if (OP1_TYPE & (IS_CONST|IS_CV)) {
				/* avoid exception check */
				FREE_OP2();
				ZEND_VM_SMART_BRANCH(result, 0);
			}
		} else {
			result = (value == NULL || !i_zend_is_true(value));
		}
		ZEND_VM_C_GOTO(isset_dim_obj_exit);
	} else if ((OP1_TYPE & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(container))) {
		container = Z_REFVAL_P(container);
		if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
			ZEND_VM_C_GOTO(isset_dim_obj_array);
		}
	}

	if (OP2_TYPE == IS_CONST && Z_EXTRA_P(offset) == ZEND_EXTRA_VALUE) {
		offset++;
	}
	if (!(opline->extended_value & ZEND_ISEMPTY)) {
		result = zend_isset_dim_slow(container, offset EXECUTE_DATA_CC);
	} else {
		result = zend_isempty_dim_slow(container, offset EXECUTE_DATA_CC);
	}

ZEND_VM_C_LABEL(isset_dim_obj_exit):
	FREE_OP2();
	FREE_OP1();
	ZEND_VM_SMART_BRANCH(result, 1);
}

ZEND_VM_COLD_CONST_HANDLER(148, ZEND_ISSET_ISEMPTY_PROP_OBJ, CONST|TMPVAR|UNUSED|THIS|CV, CONST|TMPVAR|CV, ISSET|CACHE_SLOT)
{
	USE_OPLINE
	zval *container;
	int result;
	zval *offset;
	zend_string *name, *tmp_name;

	SAVE_OPLINE();
	container = GET_OP1_OBJ_ZVAL_PTR(BP_VAR_IS);
	offset = GET_OP2_ZVAL_PTR(BP_VAR_R);

	if (OP1_TYPE == IS_CONST ||
	    (OP1_TYPE != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
		if ((OP1_TYPE & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
			container = Z_REFVAL_P(container);
			if (UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT)) {
				result = (opline->extended_value & ZEND_ISEMPTY);
				ZEND_VM_C_GOTO(isset_object_finish);
			}
		} else {
			result = (opline->extended_value & ZEND_ISEMPTY);
			ZEND_VM_C_GOTO(isset_object_finish);
		}
	}

	if (OP2_TYPE == IS_CONST) {
		name = Z_STR_P(offset);
	} else {
		name = zval_try_get_tmp_string(offset, &tmp_name);
		if (UNEXPECTED(!name)) {
			result = 0;
			ZEND_VM_C_GOTO(isset_object_finish);
		}
	}

	result =
		(opline->extended_value & ZEND_ISEMPTY) ^
		Z_OBJ_HT_P(container)->has_property(Z_OBJ_P(container), name, (opline->extended_value & ZEND_ISEMPTY), ((OP2_TYPE == IS_CONST) ? CACHE_ADDR(opline->extended_value & ~ZEND_ISEMPTY) : NULL));

	if (OP2_TYPE != IS_CONST) {
		zend_tmp_string_release(tmp_name);
	}

ZEND_VM_C_LABEL(isset_object_finish):
	FREE_OP2();
	FREE_OP1();
	ZEND_VM_SMART_BRANCH(result, 1);
}

ZEND_VM_HANDLER(194, ZEND_ARRAY_KEY_EXISTS, CV|TMPVAR|CONST, CV|TMPVAR|CONST)
{
	USE_OPLINE

	zval *key, *subject;
	HashTable *ht;
	bool result;

	SAVE_OPLINE();

	key = GET_OP1_ZVAL_PTR_UNDEF(BP_VAR_R);
	subject = GET_OP2_ZVAL_PTR_UNDEF(BP_VAR_R);

	if (EXPECTED(Z_TYPE_P(subject) == IS_ARRAY)) {
ZEND_VM_C_LABEL(array_key_exists_array):
		ht = Z_ARRVAL_P(subject);
		result = zend_array_key_exists_fast(ht, key OPLINE_CC EXECUTE_DATA_CC);
	} else {
		if ((OP2_TYPE & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(subject))) {
			subject = Z_REFVAL_P(subject);
			if (EXPECTED(Z_TYPE_P(subject) == IS_ARRAY)) {
				ZEND_VM_C_GOTO(array_key_exists_array);
			}
		}
		zend_array_key_exists_error(subject, key OPLINE_CC EXECUTE_DATA_CC);
		result = 0;
	}

	FREE_OP2();
	FREE_OP1();
	ZEND_VM_SMART_BRANCH(result, 1);
}

ZEND_VM_HANDLER(57, ZEND_BEGIN_SILENCE, ANY, ANY)
{
	USE_OPLINE

	ZVAL_LONG(EX_VAR(opline->result.var), EG(error_reporting));

	if (!E_HAS_ONLY_FATAL_ERRORS(EG(error_reporting))) {
		do {
			/* Do not silence fatal errors */
			EG(error_reporting) &= E_FATAL_ERRORS;
			if (!EG(error_reporting_ini_entry)) {
				zval *zv = zend_hash_find_known_hash(EG(ini_directives), ZSTR_KNOWN(ZEND_STR_ERROR_REPORTING));
				if (zv) {
					EG(error_reporting_ini_entry) = (zend_ini_entry *)Z_PTR_P(zv);
				} else {
					break;
				}
			}
			if (!EG(error_reporting_ini_entry)->modified) {
				if (!EG(modified_ini_directives)) {
					ALLOC_HASHTABLE(EG(modified_ini_directives));
					zend_hash_init(EG(modified_ini_directives), 8, NULL, NULL, 0);
				}
				if (EXPECTED(zend_hash_add_ptr(EG(modified_ini_directives), ZSTR_KNOWN(ZEND_STR_ERROR_REPORTING), EG(error_reporting_ini_entry)) != NULL)) {
					EG(error_reporting_ini_entry)->orig_value = EG(error_reporting_ini_entry)->value;
					EG(error_reporting_ini_entry)->orig_modifiable = EG(error_reporting_ini_entry)->modifiable;
					EG(error_reporting_ini_entry)->modified = 1;
				}
			}
		} while (0);
	}
	ZEND_VM_NEXT_OPCODE();
}

ZEND_VM_HANDLER(58, ZEND_END_SILENCE, TMP, ANY)
{
	USE_OPLINE

	if (E_HAS_ONLY_FATAL_ERRORS(EG(error_reporting))
			&& !E_HAS_ONLY_FATAL_ERRORS(Z_LVAL_P(EX_VAR(opline->op1.var)))) {
		EG(error_reporting) = Z_LVAL_P(EX_VAR(opline->op1.var));
	}
	ZEND_VM_NEXT_OPCODE();
}

ZEND_VM_COLD_CONST_HANDLER(152, ZEND_JMP_SET, CONST|TMP|VAR|CV, JMP_ADDR)
{
	USE_OPLINE
	zval *value;
	zend_reference *ref = NULL;
	bool ret;

	SAVE_OPLINE();
	value = GET_OP1_ZVAL_PTR(BP_VAR_R);

	if ((OP1_TYPE == IS_VAR || OP1_TYPE == IS_CV) && Z_ISREF_P(value)) {
		if (OP1_TYPE == IS_VAR) {
			ref = Z_REF_P(value);
		}
		value = Z_REFVAL_P(value);
	}

	ret = i_zend_is_true(value);

	if (UNEXPECTED(EG(exception))) {
		FREE_OP1();
		ZVAL_UNDEF(EX_VAR(opline->result.var));
		HANDLE_EXCEPTION();
	}

	if (ret) {
		zval *result = EX_VAR(opline->result.var);

		ZVAL_COPY_VALUE(result, value);
		if (OP1_TYPE == IS_CONST) {
			if (UNEXPECTED(Z_OPT_REFCOUNTED_P(result))) Z_ADDREF_P(result);
		} else if (OP1_TYPE == IS_CV) {
			if (Z_OPT_REFCOUNTED_P(result)) Z_ADDREF_P(result);
		} else if (OP1_TYPE == IS_VAR && ref) {
			if (UNEXPECTED(GC_DELREF(ref) == 0)) {
				efree_size(ref, sizeof(zend_reference));
			} else if (Z_OPT_REFCOUNTED_P(result)) {
				Z_ADDREF_P(result);
			}
		}
		ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0);
	}

	FREE_OP1();
	ZEND_VM_NEXT_OPCODE();
}

ZEND_VM_COLD_CONST_HANDLER(169, ZEND_COALESCE, CONST|TMP|VAR|CV, JMP_ADDR)
{
	USE_OPLINE
	zval *value;
	zend_reference *ref = NULL;

	SAVE_OPLINE();
	value = GET_OP1_ZVAL_PTR(BP_VAR_IS);

	if ((OP1_TYPE & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) {
		if (OP1_TYPE & IS_VAR) {
			ref = Z_REF_P(value);
		}
		value = Z_REFVAL_P(value);
	}

	if (Z_TYPE_P(value) > IS_NULL) {
		zval *result = EX_VAR(opline->result.var);
		ZVAL_COPY_VALUE(result, value);
		if (OP1_TYPE == IS_CONST) {
			if (UNEXPECTED(Z_OPT_REFCOUNTED_P(result))) Z_ADDREF_P(result);
		} else if (OP1_TYPE == IS_CV) {
			if (Z_OPT_REFCOUNTED_P(result)) Z_ADDREF_P(result);
		} else if ((OP1_TYPE & IS_VAR) && ref) {
			if (UNEXPECTED(GC_DELREF(ref) == 0)) {
				efree_size(ref, sizeof(zend_reference));
			} else if (Z_OPT_REFCOUNTED_P(result)) {
				Z_ADDREF_P(result);
			}
		}
		ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0);
	}

	if ((OP1_TYPE & IS_VAR) && ref) {
		if (UNEXPECTED(GC_DELREF(ref) == 0)) {
			efree_size(ref, sizeof(zend_reference));
		}
	}
	ZEND_VM_NEXT_OPCODE();
}

ZEND_VM_HOT_NOCONST_HANDLER(198, ZEND_JMP_NULL, CONST|TMP|VAR|CV, JMP_ADDR)
{
	USE_OPLINE
	zval *val, *result;

	val = GET_OP1_ZVAL_PTR_UNDEF(BP_VAR_R);

	if (Z_TYPE_P(val) > IS_NULL) {
		do {
			if ((OP1_TYPE == IS_CV || OP1_TYPE == IS_VAR) && Z_TYPE_P(val) == IS_REFERENCE) {
				val = Z_REFVAL_P(val);
				if (Z_TYPE_P(val) <= IS_NULL) {
					FREE_OP1();
					break;
				}
			}
			ZEND_VM_NEXT_OPCODE();
		} while (0);
	}

	result = EX_VAR(opline->result.var);
	uint32_t short_circuiting_type = opline->extended_value & ZEND_SHORT_CIRCUITING_CHAIN_MASK;
	if (EXPECTED(short_circuiting_type == ZEND_SHORT_CIRCUITING_CHAIN_EXPR)) {
		ZVAL_NULL(result);
		if (OP1_TYPE == IS_CV
			&& UNEXPECTED(Z_TYPE_P(val) == IS_UNDEF)
			&& (opline->extended_value & ZEND_JMP_NULL_BP_VAR_IS) == 0
		) {
			SAVE_OPLINE();
			ZVAL_UNDEFINED_OP1();
			if (UNEXPECTED(EG(exception) != NULL)) {
				HANDLE_EXCEPTION();
			}
		}
	} else if (short_circuiting_type == ZEND_SHORT_CIRCUITING_CHAIN_ISSET) {
		ZVAL_FALSE(result);
	} else {
		ZEND_ASSERT(short_circuiting_type == ZEND_SHORT_CIRCUITING_CHAIN_EMPTY);
		ZVAL_TRUE(result);
	}

	ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0);
}

ZEND_VM_HOT_HANDLER(31, ZEND_QM_ASSIGN, CONST|TMP|VAR|CV, ANY)
{
	USE_OPLINE
	zval *value;
	zval *result = EX_VAR(opline->result.var);

	value = GET_OP1_ZVAL_PTR_UNDEF(BP_VAR_R);
	if (OP1_TYPE == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
		SAVE_OPLINE();
		ZVAL_UNDEFINED_OP1();
		ZVAL_NULL(result);
		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
	}

	if (OP1_TYPE == IS_CV) {
		ZVAL_COPY_DEREF(result, value);
	} else if (OP1_TYPE == IS_VAR) {
		if (UNEXPECTED(Z_ISREF_P(value))) {
			ZVAL_COPY_VALUE(result, Z_REFVAL_P(value));
			if (UNEXPECTED(Z_DELREF_P(value) == 0)) {
				efree_size(Z_REF_P(value), sizeof(zend_reference));
			} else if (Z_OPT_REFCOUNTED_P(result)) {
				Z_ADDREF_P(result);
			}
		} else {
			ZVAL_COPY_VALUE(result, value);
		}
	} else {
		ZVAL_COPY_VALUE(result, value);
		if (OP1_TYPE == IS_CONST) {
			if (UNEXPECTED(Z_OPT_REFCOUNTED_P(result))) {
				Z_ADDREF_P(result);
			}
		}
	}
	ZEND_VM_NEXT_OPCODE();
}

ZEND_VM_COLD_HANDLER(101, ZEND_EXT_STMT, ANY, ANY)
{
	USE_OPLINE

	if (!EG(no_extensions)) {
		SAVE_OPLINE();
		zend_llist_apply_with_argument(&zend_extensions, (llist_apply_with_arg_func_t) zend_extension_statement_handler, execute_data);
		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
	}
	ZEND_VM_NEXT_OPCODE();
}

ZEND_VM_COLD_HANDLER(102, ZEND_EXT_FCALL_BEGIN, ANY, ANY)
{
	USE_OPLINE

	if (!EG(no_extensions)) {
		SAVE_OPLINE();
		zend_llist_apply_with_argument(&zend_extensions, (llist_apply_with_arg_func_t) zend_extension_fcall_begin_handler, execute_data);
		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
	}
	ZEND_VM_NEXT_OPCODE();
}

ZEND_VM_COLD_HANDLER(103, ZEND_EXT_FCALL_END, ANY, ANY)
{
	USE_OPLINE

	if (!EG(no_extensions)) {
		SAVE_OPLINE();
		zend_llist_apply_with_argument(&zend_extensions, (llist_apply_with_arg_func_t) zend_extension_fcall_end_handler, execute_data);
		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
	}
	ZEND_VM_NEXT_OPCODE();
}

ZEND_VM_HANDLER(144, ZEND_DECLARE_CLASS, CONST, ANY)
{
	USE_OPLINE

	SAVE_OPLINE();
	do_bind_class(RT_CONSTANT(opline, opline->op1), (OP2_TYPE == IS_CONST) ? Z_STR_P(RT_CONSTANT(opline, opline->op2)) : NULL);
	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

ZEND_VM_HANDLER(145, ZEND_DECLARE_CLASS_DELAYED, CONST, CONST)
{
	USE_OPLINE

	zend_class_entry *ce = CACHED_PTR(opline->extended_value);
	if (ce == NULL) {
		zval *lcname = RT_CONSTANT(opline, opline->op1);
		zval *zv = zend_hash_find_known_hash(EG(class_table), Z_STR_P(lcname + 1));
		if (zv) {
			SAVE_OPLINE();
			ce = zend_bind_class_in_slot(zv, lcname, Z_STR_P(RT_CONSTANT(opline, opline->op2)));
			if (EG(exception)) {
				HANDLE_EXCEPTION();
			}
		}
		CACHE_PTR(opline->extended_value, ce);
	}
	ZEND_VM_NEXT_OPCODE();
}

ZEND_VM_HANDLER(146, ZEND_DECLARE_ANON_CLASS, ANY, ANY, CACHE_SLOT)
{
	zval *zv;
	zend_class_entry *ce;
	USE_OPLINE

	ce = CACHED_PTR(opline->extended_value);
	if (UNEXPECTED(ce == NULL)) {
		zend_string *rtd_key = Z_STR_P(RT_CONSTANT(opline, opline->op1));
		zv = zend_hash_find_known_hash(EG(class_table), rtd_key);
		ZEND_ASSERT(zv != NULL);
		ce = Z_CE_P(zv);
		if (!(ce->ce_flags & ZEND_ACC_LINKED)) {
			SAVE_OPLINE();
			ce = zend_do_link_class(ce, (OP2_TYPE == IS_CONST) ? Z_STR_P(RT_CONSTANT(opline, opline->op2)) : NULL, rtd_key);
			if (EG(exception)) {
				HANDLE_EXCEPTION();
			}
		}
		CACHE_PTR(opline->extended_value, ce);
	}
	Z_CE_P(EX_VAR(opline->result.var)) = ce;
	ZEND_VM_NEXT_OPCODE();
}

ZEND_VM_HANDLER(141, ZEND_DECLARE_FUNCTION, ANY, NUM)
{
	zend_function *func;
	USE_OPLINE

	SAVE_OPLINE();
	func = (zend_function *) EX(func)->op_array.dynamic_func_defs[opline->op2.num];
	do_bind_function(func, RT_CONSTANT(opline, opline->op1));
	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

ZEND_VM_HANDLER(105, ZEND_TICKS, ANY, ANY, NUM)
{
	USE_OPLINE

	if ((uint32_t)++EG(ticks_count) >= opline->extended_value) {
		EG(ticks_count) = 0;
		if (zend_ticks_function) {
			SAVE_OPLINE();
			zend_fiber_switch_block();
			zend_ticks_function(opline->extended_value);
			zend_fiber_switch_unblock();
			ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
		}
	}
	ZEND_VM_NEXT_OPCODE();
}

ZEND_VM_HANDLER(138, ZEND_INSTANCEOF, TMPVAR|CV, UNUSED|CLASS_FETCH|CONST|VAR, CACHE_SLOT)
{
	USE_OPLINE
	zval *expr;
	bool result;

	SAVE_OPLINE();
	expr = GET_OP1_ZVAL_PTR_UNDEF(BP_VAR_R);

ZEND_VM_C_LABEL(try_instanceof):
	if (Z_TYPE_P(expr) == IS_OBJECT) {
		zend_class_entry *ce;

		if (OP2_TYPE == IS_CONST) {
			ce = CACHED_PTR(opline->extended_value);
			if (UNEXPECTED(ce == NULL)) {
				ce = zend_lookup_class_ex(Z_STR_P(RT_CONSTANT(opline, opline->op2)), Z_STR_P(RT_CONSTANT(opline, opline->op2) + 1), ZEND_FETCH_CLASS_NO_AUTOLOAD);
				if (EXPECTED(ce)) {
					CACHE_PTR(opline->extended_value, ce);
				}
			}
		} else if (OP2_TYPE == IS_UNUSED) {
			ce = zend_fetch_class(NULL, opline->op2.num);
			if (UNEXPECTED(ce == NULL)) {
				FREE_OP1();
				ZVAL_UNDEF(EX_VAR(opline->result.var));
				HANDLE_EXCEPTION();
			}
		} else {
			ce = Z_CE_P(EX_VAR(opline->op2.var));
		}
		result = ce && instanceof_function(Z_OBJCE_P(expr), ce);
	} else if ((OP1_TYPE & (IS_VAR|IS_CV)) && Z_TYPE_P(expr) == IS_REFERENCE) {
		expr = Z_REFVAL_P(expr);
		ZEND_VM_C_GOTO(try_instanceof);
	} else {
		if (OP1_TYPE == IS_CV && UNEXPECTED(Z_TYPE_P(expr) == IS_UNDEF)) {
			ZVAL_UNDEFINED_OP1();
		}
		result = 0;
	}
	FREE_OP1();
	ZEND_VM_SMART_BRANCH(result, 1);
}

ZEND_VM_HOT_HANDLER(104, ZEND_EXT_NOP, ANY, ANY)
{
	USE_OPLINE

	ZEND_VM_NEXT_OPCODE();
}

ZEND_VM_HOT_HANDLER(0, ZEND_NOP, ANY, ANY)
{
	USE_OPLINE

	ZEND_VM_NEXT_OPCODE();
}

ZEND_VM_HELPER(zend_dispatch_try_catch_finally_helper, ANY, ANY, uint32_t try_catch_offset, uint32_t op_num)
{
	/* May be NULL during generator closing (only finally blocks are executed) */
	zend_object *ex = EG(exception);

	/* Walk try/catch/finally structures upwards, performing the necessary actions */
	for (; try_catch_offset != (uint32_t) -1; try_catch_offset--) {
		zend_try_catch_element *try_catch =
			&EX(func)->op_array.try_catch_array[try_catch_offset];

		if (op_num < try_catch->catch_op && ex) {
			/* Go to catch block */
			cleanup_live_vars(execute_data, op_num, try_catch->catch_op);
			ZEND_VM_JMP_EX(&EX(func)->op_array.opcodes[try_catch->catch_op], 0);

		} else if (op_num < try_catch->finally_op) {
			if (ex && zend_is_unwind_exit(ex)) {
				/* Don't execute finally blocks on exit (for now) */
				continue;
			}

			/* Go to finally block */
			zval *fast_call = EX_VAR(EX(func)->op_array.opcodes[try_catch->finally_end].op1.var);
			cleanup_live_vars(execute_data, op_num, try_catch->finally_op);
			Z_OBJ_P(fast_call) = EG(exception);
			EG(exception) = NULL;
			Z_OPLINE_NUM_P(fast_call) = (uint32_t)-1;
			ZEND_VM_JMP_EX(&EX(func)->op_array.opcodes[try_catch->finally_op], 0);

		} else if (op_num < try_catch->finally_end) {
			zval *fast_call = EX_VAR(EX(func)->op_array.opcodes[try_catch->finally_end].op1.var);

			/* cleanup incomplete RETURN statement */
			if (Z_OPLINE_NUM_P(fast_call) != (uint32_t)-1
			 && (EX(func)->op_array.opcodes[Z_OPLINE_NUM_P(fast_call)].op2_type & (IS_TMP_VAR | IS_VAR))) {
				zval *return_value = EX_VAR(EX(func)->op_array.opcodes[Z_OPLINE_NUM_P(fast_call)].op2.var);

				zval_ptr_dtor(return_value);
			}

			/* Chain potential exception from wrapping finally block */
			if (Z_OBJ_P(fast_call)) {
				if (ex) {
					if (zend_is_unwind_exit(ex) || zend_is_graceful_exit(ex)) {
						/* discard the previously thrown exception */
						OBJ_RELEASE(Z_OBJ_P(fast_call));
					} else {
						zend_exception_set_previous(ex, Z_OBJ_P(fast_call));
					}
				} else {
					ex = EG(exception) = Z_OBJ_P(fast_call);
				}
			}
		}
	}

	/* Uncaught exception */

	/* Don't use ZEND_OBSERVER_ENABLED because it gets replaced by zend_vm_gen.php. */
	if (zend_observer_fcall_op_array_extension != -1) {
		zend_observer_fcall_end(execute_data, NULL);
	}
	cleanup_live_vars(execute_data, op_num, 0);
	if (UNEXPECTED((EX_CALL_INFO() & ZEND_CALL_GENERATOR) != 0)) {
		zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C);
		EG(current_execute_data) = EX(prev_execute_data);
		zend_generator_close(generator, 1);
		ZEND_VM_RETURN();
	} else {
		/* We didn't execute RETURN, and have to initialize return_value */
		if (EX(return_value)) {
			ZVAL_UNDEF(EX(return_value));
		}
		ZEND_VM_DISPATCH_TO_HELPER(zend_leave_helper);
	}
}

ZEND_VM_HANDLER(149, ZEND_HANDLE_EXCEPTION, ANY, ANY)
{
	const zend_op *throw_op = EG(opline_before_exception);

	/* Exception was thrown before executing any op */
	if (UNEXPECTED(!throw_op)) {
		ZEND_VM_DISPATCH_TO_HELPER(zend_dispatch_try_catch_finally_helper, try_catch_offset, -1, op_num, 0);
	}

	uint32_t throw_op_num = throw_op - EX(func)->op_array.opcodes;
	int i, current_try_catch_offset = -1;

	if ((throw_op->opcode == ZEND_FREE || throw_op->opcode == ZEND_FE_FREE)
		&& throw_op->extended_value & ZEND_FREE_ON_RETURN) {
		/* exceptions thrown because of loop var destruction on return/break/...
		 * are logically thrown at the end of the foreach loop, so adjust the
		 * throw_op_num to the final loop variable FREE.
		 */
		uint32_t new_throw_op_num = throw_op_num + throw_op->op2.opline_num;
		cleanup_live_vars(execute_data, throw_op_num, new_throw_op_num);
		throw_op_num = new_throw_op_num;
	}

	/* Find the innermost try/catch/finally the exception was thrown in */
	for (i = 0; i < EX(func)->op_array.last_try_catch; i++) {
		zend_try_catch_element *try_catch = &EX(func)->op_array.try_catch_array[i];
		if (try_catch->try_op > throw_op_num) {
			/* further blocks will not be relevant... */
			break;
		}
		if (throw_op_num < try_catch->catch_op || throw_op_num < try_catch->finally_end) {
			current_try_catch_offset = i;
		}
	}

	cleanup_unfinished_calls(execute_data, throw_op_num);

	if (throw_op->result_type & (IS_VAR | IS_TMP_VAR)) {
		switch (throw_op->opcode) {
			case ZEND_ADD_ARRAY_ELEMENT:
			case ZEND_ADD_ARRAY_UNPACK:
			case ZEND_ROPE_INIT:
			case ZEND_ROPE_ADD:
				break; /* exception while building structures, live range handling will free those */

			case ZEND_FETCH_CLASS:
			case ZEND_DECLARE_ANON_CLASS:
				break; /* return value is zend_class_entry pointer */

			default:
				/* smart branch opcodes may not initialize result */
				if (!zend_is_smart_branch(throw_op)) {
					zval_ptr_dtor_nogc(EX_VAR(throw_op->result.var));
				}
		}
	}

	ZEND_VM_DISPATCH_TO_HELPER(zend_dispatch_try_catch_finally_helper, try_catch_offset, current_try_catch_offset, op_num, throw_op_num);
}

ZEND_VM_HANDLER(150, ZEND_USER_OPCODE, ANY, ANY)
{
	USE_OPLINE
	int ret;

	SAVE_OPLINE();
	ret = zend_user_opcode_handlers[opline->opcode](execute_data);
	opline = EX(opline);

	switch (ret) {
		case ZEND_USER_OPCODE_CONTINUE:
			ZEND_VM_CONTINUE();
		case ZEND_USER_OPCODE_RETURN:
			if (UNEXPECTED((EX_CALL_INFO() & ZEND_CALL_GENERATOR) != 0)) {
				zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C);
				EG(current_execute_data) = EX(prev_execute_data);
				zend_generator_close(generator, 1);
				ZEND_VM_RETURN();
			} else {
				ZEND_VM_DISPATCH_TO_HELPER(zend_leave_helper);
			}
		case ZEND_USER_OPCODE_ENTER:
			ZEND_VM_ENTER();
		case ZEND_USER_OPCODE_LEAVE:
			ZEND_VM_LEAVE();
		case ZEND_USER_OPCODE_DISPATCH:
			ZEND_VM_DISPATCH(opline->opcode, opline);
		default:
			ZEND_VM_DISPATCH((uint8_t)(ret & 0xff), opline);
	}
}

ZEND_VM_HANDLER(143, ZEND_DECLARE_CONST, CONST, CONST)
{
	USE_OPLINE
	zval *name;
	zval *val;
	zend_constant c;

	SAVE_OPLINE();
	name  = GET_OP1_ZVAL_PTR(BP_VAR_R);
	val   = GET_OP2_ZVAL_PTR(BP_VAR_R);

	ZVAL_COPY(&c.value, val);
	if (Z_OPT_CONSTANT(c.value)) {
		if (UNEXPECTED(zval_update_constant_ex(&c.value, EX(func)->op_array.scope) != SUCCESS)) {
			zval_ptr_dtor_nogc(&c.value);
			FREE_OP1();
			FREE_OP2();
			HANDLE_EXCEPTION();
		}
	}
	/* non persistent, case sensitive */
	ZEND_CONSTANT_SET_FLAGS(&c, 0, PHP_USER_CONSTANT);
	c.name = zend_string_copy(Z_STR_P(name));

	if (zend_register_constant(&c) == NULL) {
	}

	FREE_OP1();
	FREE_OP2();
	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

ZEND_VM_HANDLER(210, ZEND_DECLARE_ATTRIBUTED_CONST, CONST, CONST)
{
	USE_OPLINE
	zval *name;
	zval *val;
	zend_constant c, *registered;

	SAVE_OPLINE();
	name  = GET_OP1_ZVAL_PTR(BP_VAR_R);
	val   = GET_OP2_ZVAL_PTR(BP_VAR_R);

	ZVAL_COPY(&c.value, val);
	if (Z_OPT_CONSTANT(c.value)) {
		if (UNEXPECTED(zval_update_constant_ex(&c.value, EX(func)->op_array.scope) != SUCCESS)) {
			zval_ptr_dtor_nogc(&c.value);
			FREE_OP1();
			FREE_OP2();
			HANDLE_EXCEPTION();
		}
	}
	/* non persistent, case sensitive */
	ZEND_CONSTANT_SET_FLAGS(&c, 0, PHP_USER_CONSTANT);
	c.name = zend_string_copy(Z_STR_P(name));

	registered = zend_register_constant(&c);
	if (registered == NULL) {
		FREE_OP1();
		FREE_OP2();
		/* two opcodes used, second one is the data with attributes */
		ZEND_VM_NEXT_OPCODE_EX(1, 2);
	}

	HashTable *attributes = Z_PTR_P(GET_OP_DATA_ZVAL_PTR(BP_VAR_R));
	ZEND_ASSERT(attributes != NULL);
	zend_constant_add_attributes(registered, attributes);

	FREE_OP1();
	FREE_OP2();
	/* two opcodes used, second one is the data with attributes */
	ZEND_VM_NEXT_OPCODE_EX(1, 2);
}

ZEND_VM_HANDLER(142, ZEND_DECLARE_LAMBDA_FUNCTION, CONST, NUM)
{
	USE_OPLINE
	zend_function *func;
	zval *object;
	zend_class_entry *called_scope;

	func = (zend_function *) EX(func)->op_array.dynamic_func_defs[opline->op2.num];
	if (Z_TYPE(EX(This)) == IS_OBJECT) {
		called_scope = Z_OBJCE(EX(This));
		if (UNEXPECTED((func->common.fn_flags & ZEND_ACC_STATIC) ||
				(EX(func)->common.fn_flags & ZEND_ACC_STATIC))) {
			object = NULL;
		} else {
			object = &EX(This);
		}
	} else {
		called_scope = Z_CE(EX(This));
		object = NULL;
	}
	SAVE_OPLINE();
	zend_create_closure(EX_VAR(opline->result.var), func,
		EX(func)->op_array.scope, called_scope, object);

	ZEND_VM_NEXT_OPCODE();
}

ZEND_VM_HANDLER(156, ZEND_SEPARATE, VAR, UNUSED)
{
	USE_OPLINE
	zval *var_ptr;

	var_ptr = EX_VAR(opline->op1.var);
	if (UNEXPECTED(Z_ISREF_P(var_ptr))) {
		if (UNEXPECTED(Z_REFCOUNT_P(var_ptr) == 1)) {
			ZVAL_UNREF(var_ptr);
		}
	}

	ZEND_VM_NEXT_OPCODE();
}

ZEND_VM_COLD_HELPER(zend_yield_in_closed_generator_helper, ANY, ANY)
{
	USE_OPLINE

	SAVE_OPLINE();
	zend_throw_error(NULL, "Cannot yield from finally in a force-closed generator");
	FREE_OP2();
	FREE_OP1();
	UNDEF_RESULT();
	HANDLE_EXCEPTION();
}

ZEND_VM_HANDLER(160, ZEND_YIELD, CONST|TMP|VAR|CV|UNUSED, CONST|TMPVAR|CV|UNUSED, SRC)
{
	USE_OPLINE

	zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C);

	SAVE_OPLINE();
	if (UNEXPECTED(generator->flags & ZEND_GENERATOR_FORCED_CLOSE)) {
		ZEND_VM_DISPATCH_TO_HELPER(zend_yield_in_closed_generator_helper);
	}

	/* Destroy the previously yielded value */
	zval_ptr_dtor(&generator->value);

	/* Destroy the previously yielded key */
	zval_ptr_dtor(&generator->key);

	/* Set the new yielded value */
	if (OP1_TYPE != IS_UNUSED) {
		if (UNEXPECTED(EX(func)->op_array.fn_flags & ZEND_ACC_RETURN_REFERENCE)) {
			/* Constants and temporary variables aren't yieldable by reference,
			 * but we still allow them with a notice. */
			if (OP1_TYPE & (IS_CONST|IS_TMP_VAR)) {
				zval *value;

				zend_error(E_NOTICE, "Only variable references should be yielded by reference");

				value = GET_OP1_ZVAL_PTR(BP_VAR_R);
				ZVAL_COPY_VALUE(&generator->value, value);
				if (OP1_TYPE == IS_CONST) {
					if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
						Z_ADDREF(generator->value);
					}
				}
			} else {
				zval *value_ptr = GET_OP1_ZVAL_PTR_PTR(BP_VAR_W);

				/* If a function call result is yielded and the function did
				 * not return by reference we throw a notice. */
				do {
					if (OP1_TYPE == IS_VAR) {
						ZEND_ASSERT(value_ptr != &EG(uninitialized_zval));
						if (opline->extended_value == ZEND_RETURNS_FUNCTION
						 && !Z_ISREF_P(value_ptr)) {
							zend_error(E_NOTICE, "Only variable references should be yielded by reference");
							ZVAL_COPY(&generator->value, value_ptr);
							break;
						}
					}
					if (Z_ISREF_P(value_ptr)) {
						Z_ADDREF_P(value_ptr);
					} else {
						ZVAL_MAKE_REF_EX(value_ptr, 2);
					}
					ZVAL_REF(&generator->value, Z_REF_P(value_ptr));
				} while (0);

				FREE_OP1();
			}
		} else {
			zval *value = GET_OP1_ZVAL_PTR(BP_VAR_R);

			/* Consts, temporary variables and references need copying */
			if (OP1_TYPE == IS_CONST) {
				ZVAL_COPY_VALUE(&generator->value, value);
				if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
					Z_ADDREF(generator->value);
				}
			} else if (OP1_TYPE == IS_TMP_VAR) {
				ZVAL_COPY_VALUE(&generator->value, value);
			} else if ((OP1_TYPE & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) {
				ZVAL_COPY(&generator->value, Z_REFVAL_P(value));
				FREE_OP1_IF_VAR();
			} else {
				ZVAL_COPY_VALUE(&generator->value, value);
				if (OP1_TYPE == IS_CV) {
					if (Z_OPT_REFCOUNTED_P(value)) Z_ADDREF_P(value);
				}
			}
		}
	} else {
		/* If no value was specified yield null */
		ZVAL_NULL(&generator->value);
	}

	/* Set the new yielded key */
	if (OP2_TYPE != IS_UNUSED) {
		zval *key = GET_OP2_ZVAL_PTR(BP_VAR_R);
		if ((OP2_TYPE & (IS_CV|IS_VAR)) && UNEXPECTED(Z_TYPE_P(key) == IS_REFERENCE)) {
			key = Z_REFVAL_P(key);
		}
		ZVAL_COPY(&generator->key, key);
		FREE_OP2();

		if (Z_TYPE(generator->key) == IS_LONG
		    && Z_LVAL(generator->key) > generator->largest_used_integer_key
		) {
			generator->largest_used_integer_key = Z_LVAL(generator->key);
		}
	} else {
		/* If no key was specified we use auto-increment keys */
		generator->largest_used_integer_key++;
		ZVAL_LONG(&generator->key, generator->largest_used_integer_key);
	}

	if (RETURN_VALUE_USED(opline)) {
		/* If the return value of yield is used set the send
		 * target and initialize it to NULL */
		generator->send_target = EX_VAR(opline->result.var);
		ZVAL_NULL(generator->send_target);
	} else {
		generator->send_target = NULL;
	}

	/* The GOTO VM uses a local opline variable. We need to set the opline
	 * variable in execute_data so we don't resume at an old position. */
	SAVE_OPLINE();

	ZEND_VM_RETURN();
}

ZEND_VM_HANDLER(166, ZEND_YIELD_FROM, CONST|TMPVAR|CV, ANY)
{
	USE_OPLINE
	zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C);
	zval *val;

	SAVE_OPLINE();
	val = GET_OP1_ZVAL_PTR(BP_VAR_R);

	if (UNEXPECTED(generator->flags & ZEND_GENERATOR_FORCED_CLOSE)) {
		zend_throw_error(NULL, "Cannot use \"yield from\" in a force-closed generator");
		FREE_OP1();
		UNDEF_RESULT();
		HANDLE_EXCEPTION();
	}

ZEND_VM_C_LABEL(yield_from_try_again):
	if (Z_TYPE_P(val) == IS_ARRAY) {
		ZVAL_COPY_VALUE(&generator->values, val);
		if (Z_OPT_REFCOUNTED_P(val)) {
			Z_ADDREF_P(val);
		}
		Z_FE_POS(generator->values) = 0;
		FREE_OP1();
	} else if (OP1_TYPE != IS_CONST && Z_TYPE_P(val) == IS_OBJECT && Z_OBJCE_P(val)->get_iterator) {
		zend_class_entry *ce = Z_OBJCE_P(val);
		if (ce == zend_ce_generator) {
			zend_generator *new_gen = (zend_generator *) Z_OBJ_P(val);

			Z_ADDREF_P(val);
			FREE_OP1();

			if (UNEXPECTED(new_gen->execute_data == NULL)) {
				zend_throw_error(NULL, "Generator passed to yield from was aborted without proper return and is unable to continue");
				zval_ptr_dtor(val);
				UNDEF_RESULT();
				HANDLE_EXCEPTION();
			} else if (Z_ISUNDEF(new_gen->retval)) {
				if (UNEXPECTED(zend_generator_get_current(new_gen) == generator)) {
					zend_throw_error(NULL, "Impossible to yield from the Generator being currently run");
					zval_ptr_dtor(val);
					UNDEF_RESULT();
					HANDLE_EXCEPTION();
				} else {
					zend_generator_yield_from(generator, new_gen);
				}
			} else {
				if (RETURN_VALUE_USED(opline)) {
					ZVAL_COPY(EX_VAR(opline->result.var), &new_gen->retval);
				}
				ZEND_VM_NEXT_OPCODE();
			}
		} else {
			zend_object_iterator *iter = ce->get_iterator(ce, val, 0);
			FREE_OP1();

			if (UNEXPECTED(!iter) || UNEXPECTED(EG(exception))) {
				if (!EG(exception)) {
					zend_throw_error(NULL, "Object of type %s did not create an Iterator", ZSTR_VAL(ce->name));
				}
				UNDEF_RESULT();
				HANDLE_EXCEPTION();
			}

			iter->index = 0;
			if (iter->funcs->rewind) {
				iter->funcs->rewind(iter);
				if (UNEXPECTED(EG(exception) != NULL)) {
					OBJ_RELEASE(&iter->std);
					UNDEF_RESULT();
					HANDLE_EXCEPTION();
				}
			}

			ZVAL_OBJ(&generator->values, &iter->std);
		}
	} else if ((OP1_TYPE & (IS_VAR|IS_CV)) && Z_TYPE_P(val) == IS_REFERENCE) {
		val = Z_REFVAL_P(val);
		ZEND_VM_C_GOTO(yield_from_try_again);
	} else {
		zend_throw_error(NULL, "Can use \"yield from\" only with arrays and Traversables");
		FREE_OP1();
		UNDEF_RESULT();
		HANDLE_EXCEPTION();
	}

	/* This is the default return value
	 * when the expression is a Generator, it will be overwritten in zend_generator_resume() */
	if (RETURN_VALUE_USED(opline)) {
		ZVAL_NULL(EX_VAR(opline->result.var));
	}

	/* This generator has no send target (though the generator we delegate to might have one) */
	generator->send_target = NULL;

	/* The GOTO VM uses a local opline variable. We need to set the opline
	 * variable in execute_data so we don't resume at an old position. */
	SAVE_OPLINE();

	ZEND_VM_RETURN();
}

ZEND_VM_HANDLER(159, ZEND_DISCARD_EXCEPTION, ANY, ANY)
{
	USE_OPLINE
	zval *fast_call = EX_VAR(opline->op1.var);
	SAVE_OPLINE();

	/* cleanup incomplete RETURN statement */
	if (Z_OPLINE_NUM_P(fast_call) != (uint32_t)-1
	 && (EX(func)->op_array.opcodes[Z_OPLINE_NUM_P(fast_call)].op2_type & (IS_TMP_VAR | IS_VAR))) {
		zval *return_value = EX_VAR(EX(func)->op_array.opcodes[Z_OPLINE_NUM_P(fast_call)].op2.var);

		zval_ptr_dtor(return_value);
		/* Clear return value in case we hit both DISCARD_EXCEPTION and
		 * zend_dispatch_try_catch_finally_helper, which will free the return
		 * value again. See OSS-Fuzz #438780145. */
		ZVAL_NULL(return_value);
	}

	/* cleanup delayed exception */
	if (Z_OBJ_P(fast_call) != NULL) {
		/* discard the previously thrown exception */
		OBJ_RELEASE(Z_OBJ_P(fast_call));
		Z_OBJ_P(fast_call) = NULL;
	}

	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

ZEND_VM_HANDLER(162, ZEND_FAST_CALL, JMP_ADDR, ANY)
{
	USE_OPLINE
	zval *fast_call = EX_VAR(opline->result.var);

	Z_OBJ_P(fast_call) = NULL;
	/* set return address */
	Z_OPLINE_NUM_P(fast_call) = opline - EX(func)->op_array.opcodes;
	ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op1), 0);
}

ZEND_VM_HANDLER(163, ZEND_FAST_RET, ANY, TRY_CATCH)
{
	USE_OPLINE
	zval *fast_call = EX_VAR(opline->op1.var);
	uint32_t current_try_catch_offset, current_op_num;

	if (Z_OPLINE_NUM_P(fast_call) != (uint32_t)-1) {
		const zend_op *fast_ret = EX(func)->op_array.opcodes + Z_OPLINE_NUM_P(fast_call);

		ZEND_VM_JMP_EX(fast_ret + 1, 0);
	}

	/* special case for unhandled exceptions */
	EG(exception) = Z_OBJ_P(fast_call);
	Z_OBJ_P(fast_call) = NULL;
	current_try_catch_offset = opline->op2.num;
	current_op_num = opline - EX(func)->op_array.opcodes;
	ZEND_VM_DISPATCH_TO_HELPER(zend_dispatch_try_catch_finally_helper, try_catch_offset, current_try_catch_offset, op_num, current_op_num);
}

ZEND_VM_HOT_HANDLER(168, ZEND_BIND_GLOBAL, CV, CONST, CACHE_SLOT)
{
	USE_OPLINE
	zend_string *varname;
	zval *value;
	zval *variable_ptr;
	uintptr_t idx;
	zend_reference *ref;

	ZEND_VM_REPEATABLE_OPCODE

	varname = Z_STR_P(GET_OP2_ZVAL_PTR(BP_VAR_R));

	/* We store "hash slot index" + 1 (NULL is a mark of uninitialized cache slot) */
	idx = (uintptr_t)CACHED_PTR(opline->extended_value) - 1;
	if (EXPECTED(idx < EG(symbol_table).nNumUsed * sizeof(Bucket))) {
		Bucket *p = (Bucket*)((char*)EG(symbol_table).arData + idx);

		if (EXPECTED(p->key == varname) ||
		    (EXPECTED(p->h == ZSTR_H(varname)) &&
		     EXPECTED(p->key != NULL) &&
		     EXPECTED(zend_string_equal_content(p->key, varname)))) {

			value = (zval*)p; /* value = &p->val; */
			ZEND_VM_C_GOTO(check_indirect);
		}
	}

	value = zend_hash_find_known_hash(&EG(symbol_table), varname);
	if (UNEXPECTED(value == NULL)) {
		value = zend_hash_add_new(&EG(symbol_table), varname, &EG(uninitialized_zval));
		idx = (char*)value - (char*)EG(symbol_table).arData;
		/* Store "hash slot index" + 1 (NULL is a mark of uninitialized cache slot) */
		CACHE_PTR(opline->extended_value, (void*)(idx + 1));
	} else {
		idx = (char*)value - (char*)EG(symbol_table).arData;
		/* Store "hash slot index" + 1 (NULL is a mark of uninitialized cache slot) */
		CACHE_PTR(opline->extended_value, (void*)(idx + 1));
ZEND_VM_C_LABEL(check_indirect):
		/* GLOBAL variable may be an INDIRECT pointer to CV */
		if (UNEXPECTED(Z_TYPE_P(value) == IS_INDIRECT)) {
			value = Z_INDIRECT_P(value);
			if (UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
				ZVAL_NULL(value);
			}
		}
	}

	if (UNEXPECTED(!Z_ISREF_P(value))) {
		ZVAL_MAKE_REF_EX(value, 2);
		ref = Z_REF_P(value);
	} else {
		ref = Z_REF_P(value);
		GC_ADDREF(ref);
	}

	variable_ptr = GET_OP1_ZVAL_PTR_PTR_UNDEF(BP_VAR_W);

	if (UNEXPECTED(Z_REFCOUNTED_P(variable_ptr))) {
		zend_refcounted *garbage = Z_COUNTED_P(variable_ptr);

		ZVAL_REF(variable_ptr, ref);
		SAVE_OPLINE();
		if (GC_DELREF(garbage) == 0) {
			rc_dtor_func(garbage);
			if (UNEXPECTED(EG(exception))) {
				ZVAL_NULL(variable_ptr);
				HANDLE_EXCEPTION();
			}
		} else {
			gc_check_possible_root(garbage);
		}
	} else {
		ZVAL_REF(variable_ptr, ref);
	}

	ZEND_VM_REPEAT_OPCODE(ZEND_BIND_GLOBAL);
	ZEND_VM_NEXT_OPCODE();
}

ZEND_VM_COLD_CONST_HANDLER(121, ZEND_STRLEN, CONST|TMPVAR|CV, ANY)
{
	USE_OPLINE
	zval *value;

	value = GET_OP1_ZVAL_PTR_UNDEF(BP_VAR_R);
	if (EXPECTED(Z_TYPE_P(value) == IS_STRING)) {
		ZVAL_LONG(EX_VAR(opline->result.var), Z_STRLEN_P(value));
		if (OP1_TYPE & (IS_TMP_VAR|IS_VAR)) {
			zval_ptr_dtor_str(value);
		}
		ZEND_VM_NEXT_OPCODE();
	} else {
		bool strict;

		if ((OP1_TYPE & (IS_VAR|IS_CV)) && Z_TYPE_P(value) == IS_REFERENCE) {
			value = Z_REFVAL_P(value);
			if (EXPECTED(Z_TYPE_P(value) == IS_STRING)) {
				ZVAL_LONG(EX_VAR(opline->result.var), Z_STRLEN_P(value));
				FREE_OP1();
				ZEND_VM_NEXT_OPCODE();
			}
		}

		SAVE_OPLINE();
		if (OP1_TYPE == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
			value = ZVAL_UNDEFINED_OP1();
		}
		strict = EX_USES_STRICT_TYPES();
		do {
			if (EXPECTED(!strict)) {
				zend_string *str;
				zval tmp;

				if (UNEXPECTED(Z_TYPE_P(value) == IS_NULL)) {
					zend_error(E_DEPRECATED,
						"strlen(): Passing null to parameter #1 ($string) of type string is deprecated");
					ZVAL_LONG(EX_VAR(opline->result.var), 0);
					if (UNEXPECTED(EG(exception))) {
						HANDLE_EXCEPTION();
					}
					break;
				}

				ZVAL_COPY(&tmp, value);
				if (zend_parse_arg_str_weak(&tmp, &str, 1)) {
					ZVAL_LONG(EX_VAR(opline->result.var), ZSTR_LEN(str));
					zval_ptr_dtor(&tmp);
					break;
				}
				zval_ptr_dtor(&tmp);
			}
			if (!EG(exception)) {
				zend_type_error("strlen(): Argument #1 ($string) must be of type string, %s given", zend_zval_value_name(value));
			}
			ZVAL_UNDEF(EX_VAR(opline->result.var));
		} while (0);
	}
	FREE_OP1();
	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

ZEND_VM_HOT_NOCONST_HANDLER(123, ZEND_TYPE_CHECK, CONST|TMPVAR|CV, ANY, TYPE_MASK)
{
	USE_OPLINE
	zval *value;
	int result = 0;

	value = GET_OP1_ZVAL_PTR_UNDEF(BP_VAR_R);
	if ((opline->extended_value >> (uint32_t)Z_TYPE_P(value)) & 1) {
ZEND_VM_C_LABEL(type_check_resource):
		if (opline->extended_value != MAY_BE_RESOURCE
		 || EXPECTED(NULL != zend_rsrc_list_get_rsrc_type(Z_RES_P(value)))) {
			result = 1;
		}
	} else if ((OP1_TYPE & (IS_CV|IS_VAR)) && Z_ISREF_P(value)) {
		value = Z_REFVAL_P(value);
		if ((opline->extended_value >> (uint32_t)Z_TYPE_P(value)) & 1) {
			ZEND_VM_C_GOTO(type_check_resource);
		}
	} else if (OP1_TYPE == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
		result = ((1 << IS_NULL) & opline->extended_value) != 0;
		SAVE_OPLINE();
		ZVAL_UNDEFINED_OP1();
		if (UNEXPECTED(EG(exception))) {
			ZVAL_UNDEF(EX_VAR(opline->result.var));
			HANDLE_EXCEPTION();
		}
	}
	if (OP1_TYPE & (IS_TMP_VAR|IS_VAR)) {
		SAVE_OPLINE();
		FREE_OP1();
		ZEND_VM_SMART_BRANCH(result, 1);
	} else {
		ZEND_VM_SMART_BRANCH(result, 0);
	}
}

ZEND_VM_HOT_HANDLER(122, ZEND_DEFINED, CONST, ANY, CACHE_SLOT)
{
	USE_OPLINE
	zend_constant *c;

	c = CACHED_PTR(opline->extended_value);
	if (EXPECTED(c != NULL)) {
		if (!IS_SPECIAL_CACHE_VAL(c)) {
ZEND_VM_C_LABEL(defined_true):
			ZEND_VM_SMART_BRANCH_TRUE();
		} else if (EXPECTED(zend_hash_num_elements(EG(zend_constants)) == DECODE_SPECIAL_CACHE_NUM(c))) {
ZEND_VM_C_LABEL(defined_false):
			ZEND_VM_SMART_BRANCH_FALSE();
		}
	}
	if (zend_quick_check_constant(RT_CONSTANT(opline, opline->op1) OPLINE_CC EXECUTE_DATA_CC) != SUCCESS) {
		CACHE_PTR(opline->extended_value, ENCODE_SPECIAL_CACHE_NUM(zend_hash_num_elements(EG(zend_constants))));
		ZEND_VM_C_GOTO(defined_false);
	} else {
		ZEND_VM_C_GOTO(defined_true);
	}
}

ZEND_VM_HANDLER(151, ZEND_ASSERT_CHECK, ANY, JMP_ADDR)
{
	USE_OPLINE

	if (EG(assertions) <= 0) {
		zend_op *target = OP_JMP_ADDR(opline, opline->op2);
		if (RETURN_VALUE_USED(opline)) {
			ZVAL_TRUE(EX_VAR(opline->result.var));
		}
		ZEND_VM_JMP_EX(target, 0);
	} else {
		ZEND_VM_NEXT_OPCODE();
	}
}

ZEND_VM_HANDLER(157, ZEND_FETCH_CLASS_NAME, CV|TMPVAR|UNUSED|CLASS_FETCH, ANY)
{
	uint32_t fetch_type;
	zend_class_entry *called_scope, *scope;
	USE_OPLINE

	if (OP1_TYPE != IS_UNUSED) {
		SAVE_OPLINE();
		zval *op = GET_OP1_ZVAL_PTR(BP_VAR_R);
		if (UNEXPECTED(Z_TYPE_P(op) != IS_OBJECT)) {
			ZVAL_DEREF(op);
			if (Z_TYPE_P(op) != IS_OBJECT) {
				zend_type_error("Cannot use \"::class\" on %s", zend_zval_value_name(op));
				ZVAL_UNDEF(EX_VAR(opline->result.var));
				FREE_OP1();
				HANDLE_EXCEPTION();
			}
		}

		ZVAL_STR_COPY(EX_VAR(opline->result.var), Z_OBJCE_P(op)->name);
		FREE_OP1();
		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
	}

	fetch_type = opline->op1.num;
	scope = EX(func)->op_array.scope;
	if (UNEXPECTED(scope == NULL)) {
		SAVE_OPLINE();
		zend_throw_error(NULL, "Cannot use \"%s\" in the global scope",
			fetch_type == ZEND_FETCH_CLASS_SELF ? "self" :
			fetch_type == ZEND_FETCH_CLASS_PARENT ? "parent" : "static");
		ZVAL_UNDEF(EX_VAR(opline->result.var));
		HANDLE_EXCEPTION();
	}

	switch (fetch_type) {
		case ZEND_FETCH_CLASS_SELF:
			ZVAL_STR_COPY(EX_VAR(opline->result.var), scope->name);
			break;
		case ZEND_FETCH_CLASS_PARENT:
			if (UNEXPECTED(scope->parent == NULL)) {
				SAVE_OPLINE();
				zend_throw_error(NULL,
					"Cannot use \"parent\" when current class scope has no parent");
				ZVAL_UNDEF(EX_VAR(opline->result.var));
				HANDLE_EXCEPTION();
			}
			ZVAL_STR_COPY(EX_VAR(opline->result.var), scope->parent->name);
			break;
		case ZEND_FETCH_CLASS_STATIC:
			if (Z_TYPE(EX(This)) == IS_OBJECT) {
				called_scope = Z_OBJCE(EX(This));
			} else {
				called_scope = Z_CE(EX(This));
			}
			ZVAL_STR_COPY(EX_VAR(opline->result.var), called_scope->name);
			break;
		EMPTY_SWITCH_DEFAULT_CASE()
	}
	ZEND_VM_NEXT_OPCODE();
}

ZEND_VM_HANDLER(158, ZEND_CALL_TRAMPOLINE, ANY, ANY, SPEC(OBSERVER))
{
	zend_array *args = NULL;
	zend_function *fbc = EX(func);
	zval *ret = EX(return_value);
	uint32_t call_info = EX_CALL_INFO() & (ZEND_CALL_NESTED | ZEND_CALL_TOP | ZEND_CALL_RELEASE_THIS | ZEND_CALL_HAS_EXTRA_NAMED_PARAMS);
	uint32_t num_args = EX_NUM_ARGS();
	zend_execute_data *call;

	SAVE_OPLINE();

	if (num_args) {
		zval *p = ZEND_CALL_ARG(execute_data, 1);
		zval *end = p + num_args;

		args = zend_new_array(num_args);
		zend_hash_real_init_packed(args);
		ZEND_HASH_FILL_PACKED(args) {
			do {
				ZEND_HASH_FILL_ADD(p);
				p++;
			} while (p != end);
		} ZEND_HASH_FILL_END();
	}

	call = execute_data;
	execute_data = EG(current_execute_data) = EX(prev_execute_data);

	call->func = (fbc->op_array.fn_flags & ZEND_ACC_STATIC) ? fbc->op_array.scope->__callstatic : fbc->op_array.scope->__call;
	ZEND_ASSERT(zend_vm_calc_used_stack(2, call->func) <= (size_t)(((char*)EG(vm_stack_end)) - (char*)call));
	ZEND_CALL_NUM_ARGS(call) = 2;

	ZVAL_STR(ZEND_CALL_ARG(call, 1), fbc->common.function_name);

	zval *call_args = ZEND_CALL_ARG(call, 2);
	if (args) {
		ZVAL_ARR(call_args, args);
	} else {
		ZVAL_EMPTY_ARRAY(call_args);
	}
	if (UNEXPECTED(call_info & ZEND_CALL_HAS_EXTRA_NAMED_PARAMS)) {
		if (zend_hash_num_elements(Z_ARRVAL_P(call_args)) == 0) {
			GC_ADDREF(call->extra_named_params);
			ZVAL_ARR(call_args, call->extra_named_params);
		} else {
			SEPARATE_ARRAY(call_args);
			zend_hash_copy(Z_ARRVAL_P(call_args), call->extra_named_params, zval_add_ref);
		}
	}
	zend_free_trampoline(fbc);
	fbc = call->func;

	if (EXPECTED(fbc->type == ZEND_USER_FUNCTION)) {
		if (UNEXPECTED(!RUN_TIME_CACHE(&fbc->op_array))) {
			init_func_run_time_cache(&fbc->op_array);
		}
		execute_data = call;
		i_init_func_execute_data(&fbc->op_array, ret, 0 EXECUTE_DATA_CC);
		if (EXPECTED(zend_execute_ex == execute_ex)) {
			LOAD_OPLINE_EX();
			ZEND_OBSERVER_SAVE_OPLINE();
			ZEND_OBSERVER_FCALL_BEGIN(execute_data);
			ZEND_VM_ENTER_EX();
		} else {
			SAVE_OPLINE_EX();
			ZEND_OBSERVER_FCALL_BEGIN(execute_data);
			execute_data = EX(prev_execute_data);
			if (execute_data) {
				LOAD_OPLINE();
			}
			ZEND_ADD_CALL_FLAG(call, ZEND_CALL_TOP);
			zend_execute_ex(call);
		}
	} else {
		zval retval;

		ZEND_ASSERT(fbc->type == ZEND_INTERNAL_FUNCTION);

		EG(current_execute_data) = call;

#if ZEND_DEBUG
		bool should_throw = zend_internal_call_should_throw(fbc, call);
#endif

		if (ret == NULL) {
			ret = &retval;
		}

		ZVAL_NULL(ret);
		ZEND_OBSERVER_FCALL_BEGIN(call);
		if (!zend_execute_internal) {
			/* saves one function call if zend_execute_internal is not used */
			fbc->internal_function.handler(call, ret);
		} else {
			zend_execute_internal(call, ret);
		}

#if ZEND_DEBUG
		if (!EG(exception) && call->func) {
			if (should_throw) {
				zend_internal_call_arginfo_violation(call->func);
			}
			ZEND_ASSERT(!(call->func->common.fn_flags & ZEND_ACC_HAS_RETURN_TYPE) ||
				zend_verify_internal_return_type(call->func, ret));
			ZEND_ASSERT((call->func->common.fn_flags & ZEND_ACC_RETURN_REFERENCE)
				? Z_ISREF_P(ret) : !Z_ISREF_P(ret));
			zend_verify_internal_func_info(call->func, ret);
		}
#endif
		ZEND_OBSERVER_FCALL_END(call, EG(exception) ? NULL : ret);

		EG(current_execute_data) = call->prev_execute_data;

		zend_vm_stack_free_args(call);
		if (UNEXPECTED(call_info & ZEND_CALL_HAS_EXTRA_NAMED_PARAMS)) {
			zend_free_extra_named_params(call->extra_named_params);
		}
		if (ret == &retval) {
			zval_ptr_dtor(ret);
		}
	}

	execute_data = EG(current_execute_data);

	if (!execute_data || !EX(func) || !ZEND_USER_CODE(EX(func)->type) || (call_info & ZEND_CALL_TOP)) {
		ZEND_VM_RETURN();
	}

	if (UNEXPECTED(call_info & ZEND_CALL_RELEASE_THIS)) {
		zend_object *object = Z_OBJ(call->This);
		OBJ_RELEASE(object);
	}
	zend_vm_stack_free_call_frame(call);

	if (UNEXPECTED(EG(exception) != NULL)) {
		zend_rethrow_exception(execute_data);
		HANDLE_EXCEPTION_LEAVE();
	}

	LOAD_OPLINE();
	ZEND_VM_INC_OPCODE();
	ZEND_VM_LEAVE();
}

ZEND_VM_HANDLER(182, ZEND_BIND_LEXICAL, TMP, CV, REF)
{
	USE_OPLINE
	zval *closure, *var;

	closure = GET_OP1_ZVAL_PTR(BP_VAR_R);
	if (opline->extended_value & ZEND_BIND_REF) {
		/* By-ref binding */
		var = GET_OP2_ZVAL_PTR(BP_VAR_W);
		if (Z_ISREF_P(var)) {
			Z_ADDREF_P(var);
		} else {
			ZVAL_MAKE_REF_EX(var, 2);
		}
	} else {
		var = GET_OP2_ZVAL_PTR_UNDEF(BP_VAR_R);
		if (UNEXPECTED(Z_ISUNDEF_P(var)) && !(opline->extended_value & ZEND_BIND_IMPLICIT)) {
			SAVE_OPLINE();
			var = ZVAL_UNDEFINED_OP2();
			if (UNEXPECTED(EG(exception))) {
				HANDLE_EXCEPTION();
			}
		}
		ZVAL_DEREF(var);
		Z_TRY_ADDREF_P(var);
	}

	zend_closure_bind_var_ex(closure,
		(opline->extended_value & ~(ZEND_BIND_REF|ZEND_BIND_IMPLICIT)), var);
	ZEND_VM_NEXT_OPCODE();
}

ZEND_VM_HANDLER(183, ZEND_BIND_STATIC, CV, ANY, REF)
{
	USE_OPLINE
	HashTable *ht;
	zval *value;
	zval *variable_ptr;

	variable_ptr = GET_OP1_ZVAL_PTR_PTR_UNDEF(BP_VAR_W);

	SAVE_OPLINE();

	ht = ZEND_MAP_PTR_GET(EX(func)->op_array.static_variables_ptr);
	if (!ht) {
		ht = zend_array_dup(EX(func)->op_array.static_variables);
		ZEND_MAP_PTR_SET(EX(func)->op_array.static_variables_ptr, ht);
	}
	ZEND_ASSERT(GC_REFCOUNT(ht) == 1);

	value = (zval*)((char*)ht->arData + (opline->extended_value & ~(ZEND_BIND_REF|ZEND_BIND_IMPLICIT|ZEND_BIND_EXPLICIT)));

	if (opline->extended_value & ZEND_BIND_REF) {
		if (UNEXPECTED(!Z_ISREF_P(value))) {
			zend_reference *ref = (zend_reference*)emalloc(sizeof(zend_reference));
			GC_SET_REFCOUNT(ref, 2);
			GC_TYPE_INFO(ref) = GC_REFERENCE;
			if (OP2_TYPE == IS_UNUSED) {
				ZVAL_COPY_VALUE(&ref->val, value);
			} else {
				ZEND_ASSERT(!Z_REFCOUNTED_P(value));
				ZVAL_COPY(&ref->val, GET_OP2_ZVAL_PTR_DEREF(BP_VAR_R));
				FREE_OP2();
			}
			ref->sources.ptr = NULL;
			Z_REF_P(value) = ref;
			Z_TYPE_INFO_P(value) = IS_REFERENCE_EX;
			i_zval_ptr_dtor(variable_ptr);
			ZVAL_REF(variable_ptr, ref);
		} else {
			Z_ADDREF_P(value);
			i_zval_ptr_dtor(variable_ptr);
			ZVAL_REF(variable_ptr, Z_REF_P(value));
			if (OP2_TYPE != IS_UNUSED) {
				FREE_OP2();
			}
		}
	} else {
		i_zval_ptr_dtor(variable_ptr);
		ZVAL_COPY(variable_ptr, value);
	}

	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

ZEND_VM_HANDLER(203, ZEND_BIND_INIT_STATIC_OR_JMP, CV, JMP_ADDR)
{
	USE_OPLINE
	HashTable *ht;
	zval *value;
	zval *variable_ptr;

	variable_ptr = GET_OP1_ZVAL_PTR_PTR_UNDEF(BP_VAR_W);

	ht = ZEND_MAP_PTR_GET(EX(func)->op_array.static_variables_ptr);
	if (!ht) {
		ZEND_VM_NEXT_OPCODE();
	}
	ZEND_ASSERT(GC_REFCOUNT(ht) == 1);

	value = (zval*)((char*)ht->arData + opline->extended_value);
	if (Z_TYPE_P(value) == IS_NULL) {
		ZEND_VM_NEXT_OPCODE();
	} else {
		SAVE_OPLINE();
		zval_ptr_dtor(variable_ptr);
		ZEND_ASSERT(Z_TYPE_P(value) == IS_REFERENCE);
		Z_ADDREF_P(value);
		ZVAL_REF(variable_ptr, Z_REF_P(value));
		ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 1);
	}
}

ZEND_VM_HOT_HANDLER(184, ZEND_FETCH_THIS, UNUSED, UNUSED)
{
	USE_OPLINE

	if (EXPECTED(Z_TYPE(EX(This)) == IS_OBJECT)) {
		zval *result = EX_VAR(opline->result.var);

		ZVAL_OBJ(result, Z_OBJ(EX(This)));
		Z_ADDREF_P(result);
		ZEND_VM_NEXT_OPCODE();
	} else {
		ZEND_VM_DISPATCH_TO_HELPER(zend_this_not_in_object_context_helper);
	}
}

ZEND_VM_HANDLER(200, ZEND_FETCH_GLOBALS, UNUSED, UNUSED)
{
	USE_OPLINE

	/* For symbol tables we need to deal with exactly the same problems as for property tables. */
	ZVAL_ARR(EX_VAR(opline->result.var),
		zend_proptable_to_symtable(&EG(symbol_table), /* always_duplicate */ 1));
	ZEND_VM_NEXT_OPCODE();
}

ZEND_VM_HANDLER(186, ZEND_ISSET_ISEMPTY_THIS, UNUSED, UNUSED)
{
	USE_OPLINE

	ZVAL_BOOL(EX_VAR(opline->result.var),
		(opline->extended_value & ZEND_ISEMPTY) ^
		 (Z_TYPE(EX(This)) == IS_OBJECT));
	ZEND_VM_NEXT_OPCODE();
}

ZEND_VM_HANDLER(49, ZEND_CHECK_VAR, CV, UNUSED)
{
	USE_OPLINE
	zval *op1 = EX_VAR(opline->op1.var);

	if (UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) {
		SAVE_OPLINE();
		ZVAL_UNDEFINED_OP1();
		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
	}
	ZEND_VM_NEXT_OPCODE();
}

ZEND_VM_HANDLER(140, ZEND_MAKE_REF, VAR|CV, UNUSED)
{
	USE_OPLINE
	zval *op1 = EX_VAR(opline->op1.var);

	if (OP1_TYPE == IS_CV) {
		if (UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
			ZVAL_NEW_EMPTY_REF(op1);
			Z_SET_REFCOUNT_P(op1, 2);
			ZVAL_NULL(Z_REFVAL_P(op1));
			ZVAL_REF(EX_VAR(opline->result.var), Z_REF_P(op1));
		} else {
			if (Z_ISREF_P(op1)) {
				Z_ADDREF_P(op1);
			} else {
				ZVAL_MAKE_REF_EX(op1, 2);
			}
			ZVAL_REF(EX_VAR(opline->result.var), Z_REF_P(op1));
		}
	} else if (EXPECTED(Z_TYPE_P(op1) == IS_INDIRECT)) {
		op1 = Z_INDIRECT_P(op1);
		if (EXPECTED(!Z_ISREF_P(op1))) {
			ZVAL_MAKE_REF_EX(op1, 2);
		} else {
			GC_ADDREF(Z_REF_P(op1));
		}
		ZVAL_REF(EX_VAR(opline->result.var), Z_REF_P(op1));
	} else {
		ZVAL_COPY_VALUE(EX_VAR(opline->result.var), op1);
	}
	ZEND_VM_NEXT_OPCODE();
}

ZEND_VM_COLD_CONSTCONST_HANDLER(187, ZEND_SWITCH_LONG, CONST|TMPVARCV, CONST, JMP_ADDR)
{
	USE_OPLINE
	zval *op, *jump_zv;
	HashTable *jumptable;

	op = GET_OP1_ZVAL_PTR_UNDEF(BP_VAR_R);

	if (Z_TYPE_P(op) != IS_LONG) {
		ZVAL_DEREF(op);
		if (Z_TYPE_P(op) != IS_LONG) {
			/* Wrong type, fall back to ZEND_CASE chain */
			ZEND_VM_NEXT_OPCODE();
		}
	}

	jumptable = Z_ARRVAL_P(GET_OP2_ZVAL_PTR(BP_VAR_R));
	jump_zv = zend_hash_index_find(jumptable, Z_LVAL_P(op));
	if (jump_zv != NULL) {
		ZEND_VM_SET_RELATIVE_OPCODE(opline, Z_LVAL_P(jump_zv));
		ZEND_VM_CONTINUE();
	} else {
		/* default */
		ZEND_VM_SET_RELATIVE_OPCODE(opline, opline->extended_value);
		ZEND_VM_CONTINUE();
	}
}

ZEND_VM_COLD_CONSTCONST_HANDLER(188, ZEND_SWITCH_STRING, CONST|TMPVARCV, CONST, JMP_ADDR)
{
	USE_OPLINE
	zval *op, *jump_zv;
	HashTable *jumptable;

	op = GET_OP1_ZVAL_PTR_UNDEF(BP_VAR_R);

	if (Z_TYPE_P(op) != IS_STRING) {
		if (OP1_TYPE == IS_CONST) {
			/* Wrong type, fall back to ZEND_CASE chain */
			ZEND_VM_NEXT_OPCODE();
		} else {
			ZVAL_DEREF(op);
			if (Z_TYPE_P(op) != IS_STRING) {
				/* Wrong type, fall back to ZEND_CASE chain */
				ZEND_VM_NEXT_OPCODE();
			}
		}
	}

	jumptable = Z_ARRVAL_P(GET_OP2_ZVAL_PTR(BP_VAR_R));
	jump_zv = zend_hash_find_ex(jumptable, Z_STR_P(op), OP1_TYPE == IS_CONST);
	if (jump_zv != NULL) {
		ZEND_VM_SET_RELATIVE_OPCODE(opline, Z_LVAL_P(jump_zv));
		ZEND_VM_CONTINUE();
	} else {
		/* default */
		ZEND_VM_SET_RELATIVE_OPCODE(opline, opline->extended_value);
		ZEND_VM_CONTINUE();
	}
}

ZEND_VM_COLD_CONSTCONST_HANDLER(195, ZEND_MATCH, CONST|TMPVARCV, CONST, JMP_ADDR)
{
	USE_OPLINE
	zval *op, *jump_zv;
	HashTable *jumptable;

	op = GET_OP1_ZVAL_PTR_UNDEF(BP_VAR_R);
	jumptable = Z_ARRVAL_P(GET_OP2_ZVAL_PTR(BP_VAR_R));

ZEND_VM_C_LABEL(match_try_again):
	if (Z_TYPE_P(op) == IS_LONG) {
		jump_zv = zend_hash_index_find(jumptable, Z_LVAL_P(op));
	} else if (Z_TYPE_P(op) == IS_STRING) {
		jump_zv = zend_hash_find_ex(jumptable, Z_STR_P(op), OP1_TYPE == IS_CONST);
	} else if (Z_TYPE_P(op) == IS_REFERENCE) {
		op = Z_REFVAL_P(op);
		ZEND_VM_C_GOTO(match_try_again);
	} else {
		if (UNEXPECTED((OP1_TYPE & IS_CV) && Z_TYPE_P(op) == IS_UNDEF)) {
			SAVE_OPLINE();
			op = ZVAL_UNDEFINED_OP1();
			if (UNEXPECTED(EG(exception))) {
				HANDLE_EXCEPTION();
			}
			ZEND_VM_C_GOTO(match_try_again);
		}

		ZEND_VM_C_GOTO(default_branch);
	}

	if (jump_zv != NULL) {
		ZEND_VM_SET_RELATIVE_OPCODE(opline, Z_LVAL_P(jump_zv));
		ZEND_VM_CONTINUE();
	} else {
ZEND_VM_C_LABEL(default_branch):
		/* default */
		ZEND_VM_SET_RELATIVE_OPCODE(opline, opline->extended_value);
		ZEND_VM_CONTINUE();
	}
}

ZEND_VM_COLD_CONST_HANDLER(197, ZEND_MATCH_ERROR, CONST|TMPVARCV, UNUSED)
{
	USE_OPLINE
	zval *op;

	SAVE_OPLINE();
	op = GET_OP1_ZVAL_PTR_UNDEF(BP_VAR_R);
	zend_match_unhandled_error(op);
	HANDLE_EXCEPTION();
}

ZEND_VM_COLD_CONSTCONST_HANDLER(189, ZEND_IN_ARRAY, CONST|TMP|VAR|CV, CONST, NUM)
{
	USE_OPLINE
	zval *op1;
	HashTable *ht = Z_ARRVAL_P(RT_CONSTANT(opline, opline->op2));
	zval *result;

	op1 = GET_OP1_ZVAL_PTR_UNDEF(BP_VAR_R);
	if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
		result = zend_hash_find_ex(ht, Z_STR_P(op1), OP1_TYPE == IS_CONST);
		if (OP1_TYPE & (IS_TMP_VAR|IS_VAR)) {
			zval_ptr_dtor_str(op1);
		}
		ZEND_VM_SMART_BRANCH(result, 0);
	}

	if (opline->extended_value) {
		if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
			result = zend_hash_index_find(ht, Z_LVAL_P(op1));
			ZEND_VM_SMART_BRANCH(result, 0);
		}
		SAVE_OPLINE();
		if ((OP1_TYPE & (IS_VAR|IS_CV)) && Z_TYPE_P(op1) == IS_REFERENCE) {
			op1 = Z_REFVAL_P(op1);
			if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
				result = zend_hash_find(ht, Z_STR_P(op1));
				FREE_OP1();
				ZEND_VM_SMART_BRANCH(result, 0);
			} else if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
				result = zend_hash_index_find(ht, Z_LVAL_P(op1));
				FREE_OP1();
				ZEND_VM_SMART_BRANCH(result, 0);
			}
		} else if (OP1_TYPE == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
			ZVAL_UNDEFINED_OP1();
		}
	} else if (Z_TYPE_P(op1) <= IS_FALSE) {
		if (OP1_TYPE == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
			SAVE_OPLINE();
			ZVAL_UNDEFINED_OP1();
			if (UNEXPECTED(EG(exception) != NULL)) {
				HANDLE_EXCEPTION();
			}
		}
		result = zend_hash_find_known_hash(ht, ZSTR_EMPTY_ALLOC());
		ZEND_VM_SMART_BRANCH(result, 0);
	} else {
		zend_string *key;
		zval key_tmp;

		if ((OP1_TYPE & (IS_VAR|IS_CV)) && Z_TYPE_P(op1) == IS_REFERENCE) {
			op1 = Z_REFVAL_P(op1);
			if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
				result = zend_hash_find(ht, Z_STR_P(op1));
				FREE_OP1();
				ZEND_VM_SMART_BRANCH(result, 0);
			}
		}

		SAVE_OPLINE();
		ZEND_HASH_MAP_FOREACH_STR_KEY(ht, key) {
			ZVAL_STR(&key_tmp, key);
			if (zend_compare(op1, &key_tmp) == 0) {
				FREE_OP1();
				ZEND_VM_SMART_BRANCH(1, 1);
			}
		} ZEND_HASH_FOREACH_END();
	}
	FREE_OP1();
	ZEND_VM_SMART_BRANCH(0, 1);
}

ZEND_VM_COLD_CONST_HANDLER(190, ZEND_COUNT, CONST|TMPVAR|CV, UNUSED)
{
	USE_OPLINE
	zval *op1;
	zend_long count;

	SAVE_OPLINE();
	op1 = GET_OP1_ZVAL_PTR_UNDEF(BP_VAR_R);

	while (1) {
		if (Z_TYPE_P(op1) == IS_ARRAY) {
			count = zend_hash_num_elements(Z_ARRVAL_P(op1));
			break;
		} else if (Z_TYPE_P(op1) == IS_OBJECT) {
			zend_object *zobj = Z_OBJ_P(op1);

			/* first, we check if the handler is defined */
			if (zobj->handlers->count_elements) {
				if (SUCCESS == zobj->handlers->count_elements(zobj, &count)) {
					break;
				}
				if (UNEXPECTED(EG(exception))) {
					count = 0;
					break;
				}
			}

			/* if not and the object implements Countable we call its count() method */
			if (zend_class_implements_interface(zobj->ce, zend_ce_countable)) {
				zval retval;

				zend_function *count_fn = zend_hash_find_ptr(&zobj->ce->function_table, ZSTR_KNOWN(ZEND_STR_COUNT));
				zend_call_known_instance_method_with_0_params(count_fn, zobj, &retval);
				count = zval_get_long(&retval);
				zval_ptr_dtor(&retval);
				break;
			}

			/* If There's no handler and it doesn't implement Countable then emit a TypeError */
		} else if ((OP1_TYPE & (IS_VAR|IS_CV)) != 0 && Z_TYPE_P(op1) == IS_REFERENCE) {
			op1 = Z_REFVAL_P(op1);
			continue;
		} else if (OP1_TYPE == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
			ZVAL_UNDEFINED_OP1();
		}
		count = 0;
		zend_type_error("%s(): Argument #1 ($value) must be of type Countable|array, %s given", opline->extended_value ? "sizeof" : "count", zend_zval_value_name(op1));
		break;
	}

	ZVAL_LONG(EX_VAR(opline->result.var), count);
	FREE_OP1();
	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

ZEND_VM_TYPE_SPEC_HANDLER(ZEND_COUNT, (op1_info & (MAY_BE_ANY|MAY_BE_UNDEF|MAY_BE_REF)) == MAY_BE_ARRAY, ZEND_COUNT_ARRAY, CV|TMPVAR, UNUSED)
{
	USE_OPLINE
	zend_array *ht = Z_ARRVAL_P(GET_OP1_ZVAL_PTR_UNDEF(BP_VAR_R));
	ZVAL_LONG(EX_VAR(opline->result.var), zend_hash_num_elements(ht));
	if (OP1_TYPE & (IS_TMP_VAR|IS_VAR) && !(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE) && !GC_DELREF(ht)) {
		SAVE_OPLINE();
		zend_array_destroy(ht);
		if (EG(exception)) {
			HANDLE_EXCEPTION();
		}
	}
	ZEND_VM_NEXT_OPCODE();
}

ZEND_VM_COLD_CONST_HANDLER(191, ZEND_GET_CLASS, UNUSED|CONST|TMPVAR|CV, UNUSED)
{
	USE_OPLINE

	if (OP1_TYPE == IS_UNUSED) {
		SAVE_OPLINE();
		if (UNEXPECTED(!EX(func)->common.scope)) {
			zend_throw_error(NULL, "get_class() without arguments must be called from within a class");
			ZVAL_UNDEF(EX_VAR(opline->result.var));
			HANDLE_EXCEPTION();
		} else {
			zend_error(E_DEPRECATED, "Calling get_class() without arguments is deprecated");
			ZVAL_STR_COPY(EX_VAR(opline->result.var), EX(func)->common.scope->name);
			if (UNEXPECTED(EG(exception))) {
				HANDLE_EXCEPTION();
			}
			ZEND_VM_NEXT_OPCODE();
		}
	} else {
		zval *op1;

		SAVE_OPLINE();
		op1 = GET_OP1_ZVAL_PTR_UNDEF(BP_VAR_R);
		while (1) {
			if (Z_TYPE_P(op1) == IS_OBJECT) {
				ZVAL_STR_COPY(EX_VAR(opline->result.var), Z_OBJCE_P(op1)->name);
			} else if ((OP1_TYPE & (IS_VAR|IS_CV)) != 0 && Z_TYPE_P(op1) == IS_REFERENCE) {
				op1 = Z_REFVAL_P(op1);
				continue;
			} else {
				if (OP1_TYPE == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
					ZVAL_UNDEFINED_OP1();
				}
				zend_type_error("get_class(): Argument #1 ($object) must be of type object, %s given", zend_zval_value_name(op1));
				ZVAL_UNDEF(EX_VAR(opline->result.var));
			}
			break;
		}
		FREE_OP1();
		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
	}
}

ZEND_VM_HANDLER(192, ZEND_GET_CALLED_CLASS, UNUSED, UNUSED)
{
	USE_OPLINE

	if (Z_TYPE(EX(This)) == IS_OBJECT) {
		ZVAL_STR_COPY(EX_VAR(opline->result.var), Z_OBJCE(EX(This))->name);
	} else if (Z_CE(EX(This))) {
		ZVAL_STR_COPY(EX_VAR(opline->result.var), Z_CE(EX(This))->name);
	} else {
		ZEND_ASSERT(!EX(func)->common.scope);
		SAVE_OPLINE();
		zend_throw_error(NULL, "get_called_class() must be called from within a class");
		ZVAL_UNDEF(EX_VAR(opline->result.var));
		HANDLE_EXCEPTION();
	}
	ZEND_VM_NEXT_OPCODE();
}

ZEND_VM_COLD_CONST_HANDLER(193, ZEND_GET_TYPE, CONST|TMP|VAR|CV, UNUSED)
{
	USE_OPLINE
	zval *op1;
	zend_string *type;

	SAVE_OPLINE();
	op1 = GET_OP1_ZVAL_PTR_DEREF(BP_VAR_R);
	type = zend_zval_get_legacy_type(op1);
	if (EXPECTED(type)) {
		ZVAL_INTERNED_STR(EX_VAR(opline->result.var), type);
	} else {
		ZVAL_STRING(EX_VAR(opline->result.var), "unknown type");
	}
	FREE_OP1();
	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

ZEND_VM_HANDLER(171, ZEND_FUNC_NUM_ARGS, UNUSED, UNUSED)
{
	USE_OPLINE

	ZVAL_LONG(EX_VAR(opline->result.var), EX_NUM_ARGS());
	ZEND_VM_NEXT_OPCODE();
}

ZEND_VM_HANDLER(172, ZEND_FUNC_GET_ARGS, UNUSED|CONST, UNUSED)
{
	USE_OPLINE
	zend_array *ht;
	uint32_t arg_count, result_size, skip;

	arg_count = EX_NUM_ARGS();
	if (OP1_TYPE == IS_CONST) {
		skip = Z_LVAL_P(RT_CONSTANT(opline, opline->op1));
		if (arg_count < skip) {
			result_size = 0;
		} else {
			result_size = arg_count - skip;
		}
	} else {
		skip = 0;
		result_size = arg_count;
	}

	if (result_size) {
		SAVE_OPLINE();
		uint32_t first_extra_arg = EX(func)->op_array.num_args;

		ht = zend_new_array(result_size);
		ZVAL_ARR(EX_VAR(opline->result.var), ht);
		zend_hash_real_init_packed(ht);
		ZEND_HASH_FILL_PACKED(ht) {
			zval *p, *q;
			uint32_t i = skip;
			p = EX_VAR_NUM(i);
			if (arg_count > first_extra_arg) {
				while (i < first_extra_arg) {
					q = p;
					if (EXPECTED(Z_TYPE_INFO_P(q) != IS_UNDEF)) {
						ZVAL_DEREF(q);
						if (Z_OPT_REFCOUNTED_P(q)) {
							Z_ADDREF_P(q);
						}
						ZEND_HASH_FILL_SET(q);
					} else {
						ZEND_HASH_FILL_SET_NULL();
					}
					ZEND_HASH_FILL_NEXT();
					p++;
					i++;
				}
				if (skip < first_extra_arg) {
					skip = 0;
				} else {
					skip -= first_extra_arg;
				}
				p = EX_VAR_NUM(EX(func)->op_array.last_var + EX(func)->op_array.T + skip);
			}
			while (i < arg_count) {
				q = p;
				if (EXPECTED(Z_TYPE_INFO_P(q) != IS_UNDEF)) {
					ZVAL_DEREF(q);
					if (Z_OPT_REFCOUNTED_P(q)) {
						Z_ADDREF_P(q);
					}
					ZEND_HASH_FILL_SET(q);
				} else {
					ZEND_HASH_FILL_SET_NULL();
				}
				ZEND_HASH_FILL_NEXT();
				p++;
				i++;
			}
		} ZEND_HASH_FILL_END();
		ht->nNumOfElements = result_size;
	} else {
		ZVAL_EMPTY_ARRAY(EX_VAR(opline->result.var));
	}
	ZEND_VM_NEXT_OPCODE();
}

/* Contrary to what its name indicates, ZEND_COPY_TMP may receive and define references. */
ZEND_VM_HANDLER(167, ZEND_COPY_TMP, TMPVAR, UNUSED)
{
	USE_OPLINE
	zval *value = GET_OP1_ZVAL_PTR(BP_VAR_R);
	zval *result = EX_VAR(opline->result.var);
	ZVAL_COPY(result, value);
	ZEND_VM_NEXT_OPCODE();
}

ZEND_VM_HANDLER(202, ZEND_CALLABLE_CONVERT, UNUSED, UNUSED)
{
	USE_OPLINE
	zend_execute_data *call = EX(call);

	zend_closure_from_frame(EX_VAR(opline->result.var), call);

	if (ZEND_CALL_INFO(call) & ZEND_CALL_RELEASE_THIS) {
		OBJ_RELEASE(Z_OBJ(call->This));
	}

	EX(call) = call->prev_execute_data;

	zend_vm_stack_free_call_frame(call);

	ZEND_VM_NEXT_OPCODE();
}

ZEND_VM_HANDLER(208, ZEND_JMP_FRAMELESS, CONST, JMP_ADDR, NUM|CACHE_SLOT)
{
	USE_OPLINE
	zend_jmp_fl_result result = (uintptr_t)CACHED_PTR(opline->extended_value);
ZEND_VM_C_LABEL(try_again):
	if (EXPECTED(result == ZEND_JMP_FL_HIT)) {
		OPLINE = OP_JMP_ADDR(opline, opline->op2);
		ZEND_VM_CONTINUE();
	} else if (EXPECTED(result == ZEND_JMP_FL_MISS)) {
		ZEND_VM_NEXT_OPCODE();
	} else {
		ZEND_ASSERT(result == ZEND_JMP_FL_UNPRIMED);
		/* func_name refers to the function in the local namespace, e.g. foo\substr. */
		zval *func_name = (zval *)RT_CONSTANT(opline, opline->op1);
		/* If it cannot be found locally, we must be referring to the global function. */
		zval *func = zend_hash_find_known_hash(EG(function_table), Z_STR_P(func_name));
		/* ZEND_JMP_FL_MISS = 1, ZEND_JMP_FL_HIT = 2 */
		result = (func == NULL) + 1;
		CACHE_PTR(opline->extended_value, (void *)result);
		ZEND_VM_C_GOTO(try_again);
	}
}

ZEND_VM_HANDLER(204, ZEND_FRAMELESS_ICALL_0, UNUSED, UNUSED, SPEC(OBSERVER))
{
	USE_OPLINE
	SAVE_OPLINE();

	zval *result = EX_VAR(opline->result.var);
	ZVAL_NULL(result);

#if !ZEND_VM_SPEC || ZEND_OBSERVER_ENABLED
	if (ZEND_OBSERVER_ENABLED && UNEXPECTED(zend_observer_handler_is_unobserved(ZEND_OBSERVER_DATA(ZEND_FLF_FUNC(opline))) == false)) {
		zend_frameless_observed_call(execute_data);
	} else
#endif
	{
		zend_frameless_function_0 function = (zend_frameless_function_0)ZEND_FLF_HANDLER(opline);
		function(EX_VAR(opline->result.var));
	}
	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

ZEND_VM_HANDLER(205, ZEND_FRAMELESS_ICALL_1, ANY, UNUSED, SPEC(OBSERVER))
{
	USE_OPLINE
	SAVE_OPLINE();

	zval *result = EX_VAR(opline->result.var);
	ZVAL_NULL(result);
	zval *arg1 = GET_OP1_ZVAL_PTR_DEREF(BP_VAR_R);
	if (EG(exception)) {
		FREE_OP1();
		HANDLE_EXCEPTION();
	}

#if !ZEND_VM_SPEC || ZEND_OBSERVER_ENABLED
	if (ZEND_OBSERVER_ENABLED && UNEXPECTED(zend_observer_handler_is_unobserved(ZEND_OBSERVER_DATA(ZEND_FLF_FUNC(opline))) == false)) {
		zend_frameless_observed_call(execute_data);
	} else
#endif
	{
		zend_frameless_function_1 function = (zend_frameless_function_1)ZEND_FLF_HANDLER(opline);
		function(result, arg1);
	}
	FREE_OP1();
	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

ZEND_VM_HANDLER(206, ZEND_FRAMELESS_ICALL_2, ANY, ANY, SPEC(OBSERVER))
{
	USE_OPLINE
	SAVE_OPLINE();

	zval *result = EX_VAR(opline->result.var);
	ZVAL_NULL(result);
	zval *arg1 = GET_OP1_ZVAL_PTR_DEREF(BP_VAR_R);
	zval *arg2 = GET_OP2_ZVAL_PTR_DEREF(BP_VAR_R);
	if (EG(exception)) {
		FREE_OP1();
		FREE_OP2();
		HANDLE_EXCEPTION();
	}

#if !ZEND_VM_SPEC || ZEND_OBSERVER_ENABLED
	if (ZEND_OBSERVER_ENABLED && UNEXPECTED(zend_observer_handler_is_unobserved(ZEND_OBSERVER_DATA(ZEND_FLF_FUNC(opline))) == false)) {
		zend_frameless_observed_call(execute_data);
	} else
#endif
	{
		zend_frameless_function_2 function = (zend_frameless_function_2)ZEND_FLF_HANDLER(opline);
		function(result, arg1, arg2);
	}

	FREE_OP1();
	/* Set OP1 to UNDEF in case FREE_OP2() throws. */
	if (OP1_TYPE & (IS_VAR|IS_TMP_VAR)) {
		ZVAL_UNDEF(EX_VAR(opline->op1.var));
	}
	FREE_OP2();
	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

ZEND_VM_HANDLER(207, ZEND_FRAMELESS_ICALL_3, ANY, ANY, SPEC(OBSERVER))
{
	USE_OPLINE
	SAVE_OPLINE();

	zval *result = EX_VAR(opline->result.var);
	ZVAL_NULL(result);
	zval *arg1 = GET_OP1_ZVAL_PTR_DEREF(BP_VAR_R);
	zval *arg2 = GET_OP2_ZVAL_PTR_DEREF(BP_VAR_R);
	zval *arg3 = GET_OP_DATA_ZVAL_PTR_DEREF(BP_VAR_R);
	if (EG(exception)) {
		FREE_OP1();
		FREE_OP2();
		FREE_OP_DATA();
		HANDLE_EXCEPTION();
	}

#if !ZEND_VM_SPEC || ZEND_OBSERVER_ENABLED
	if (ZEND_OBSERVER_ENABLED && UNEXPECTED(zend_observer_handler_is_unobserved(ZEND_OBSERVER_DATA(ZEND_FLF_FUNC(opline))) == false)) {
		zend_frameless_observed_call(execute_data);
	} else
#endif
	{
		zend_frameless_function_3 function = (zend_frameless_function_3)ZEND_FLF_HANDLER(opline);
		function(result, arg1, arg2, arg3);
	}

	FREE_OP1();
	/* Set to UNDEF in case FREE_OP2() throws. */
	if (OP1_TYPE & (IS_VAR|IS_TMP_VAR)) {
		ZVAL_UNDEF(EX_VAR(opline->op1.var));
	}
	FREE_OP2();
	if (OP2_TYPE & (IS_VAR|IS_TMP_VAR)) {
		ZVAL_UNDEF(EX_VAR(opline->op2.var));
	}
	FREE_OP_DATA();
	ZEND_VM_NEXT_OPCODE_EX(1, 2);
}

ZEND_VM_HANDLER(209, ZEND_INIT_PARENT_PROPERTY_HOOK_CALL, CONST, UNUSED|NUM, NUM)
{
	USE_OPLINE
	SAVE_OPLINE();

	zend_class_entry *ce = EX(func)->common.scope;
	ZEND_ASSERT(ce);

	zend_class_entry *parent_ce = ce->parent;
	if (!parent_ce) {
		zend_throw_error(NULL, "Cannot use \"parent\" when current class scope has no parent");
		UNDEF_RESULT();
		HANDLE_EXCEPTION();
	}

	zend_string *property_name = Z_STR_P(RT_CONSTANT(opline, opline->op1));
	zend_property_hook_kind hook_kind = opline->op2.num;

	zend_property_info *prop_info = zend_hash_find_ptr(&parent_ce->properties_info, property_name);
	if (!prop_info) {
		zend_throw_error(NULL, "Undefined property %s::$%s", ZSTR_VAL(parent_ce->name), ZSTR_VAL(property_name));
		UNDEF_RESULT();
		HANDLE_EXCEPTION();
	}
	if (prop_info->flags & ZEND_ACC_PRIVATE) {
		zend_throw_error(NULL, "Cannot access private property %s::$%s", ZSTR_VAL(parent_ce->name), ZSTR_VAL(property_name));
		UNDEF_RESULT();
		HANDLE_EXCEPTION();
	}

	zend_function **hooks = prop_info->hooks;
	zend_function *hook = hooks ? hooks[hook_kind] : NULL;

	zend_execute_data *call;
	if (hook) {
		call = zend_vm_stack_push_call_frame(
			ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_HAS_THIS,
			hook, opline->extended_value, Z_OBJ_P(ZEND_THIS));
		if (EXPECTED(hook->type == ZEND_USER_FUNCTION)) {
			if (UNEXPECTED(!RUN_TIME_CACHE(&hook->op_array))) {
				init_func_run_time_cache(&hook->op_array);
			}
			call->run_time_cache = RUN_TIME_CACHE(&hook->op_array);
		}
	} else {
		zend_function *fbc = zend_get_property_hook_trampoline(prop_info, hook_kind, property_name);
		call = zend_vm_stack_push_call_frame(
			ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_HAS_THIS,
			fbc, opline->extended_value, Z_OBJ_P(ZEND_THIS));
	}

	call->prev_execute_data = EX(call);
	EX(call) = call;
	ZEND_VM_NEXT_OPCODE();
}

ZEND_VM_HOT_TYPE_SPEC_HANDLER(ZEND_JMP, (OP_JMP_ADDR(op, op->op1) > op), ZEND_JMP_FORWARD, JMP_ADDR, ANY)
{
	USE_OPLINE

	OPLINE = OP_JMP_ADDR(opline, opline->op1);
	ZEND_VM_CONTINUE();
}

ZEND_VM_HOT_TYPE_SPEC_HANDLER(ZEND_ADD, (res_info == MAY_BE_LONG && op1_info == MAY_BE_LONG && op2_info == MAY_BE_LONG), ZEND_ADD_LONG_NO_OVERFLOW, CONST|TMPVARCV, CONST|TMPVARCV, SPEC(NO_CONST_CONST,COMMUTATIVE))
{
	USE_OPLINE
	zval *op1, *op2, *result;

	op1 = GET_OP1_ZVAL_PTR_UNDEF(BP_VAR_R);
	op2 = GET_OP2_ZVAL_PTR_UNDEF(BP_VAR_R);
	result = EX_VAR(opline->result.var);
	ZVAL_LONG(result, Z_LVAL_P(op1) + Z_LVAL_P(op2));
	ZEND_VM_NEXT_OPCODE();
}

ZEND_VM_HOT_TYPE_SPEC_HANDLER(ZEND_ADD, (op1_info == MAY_BE_LONG && op2_info == MAY_BE_LONG), ZEND_ADD_LONG, CONST|TMPVARCV, CONST|TMPVARCV, SPEC(NO_CONST_CONST,COMMUTATIVE))
{
	USE_OPLINE
	zval *op1, *op2, *result;

	op1 = GET_OP1_ZVAL_PTR_UNDEF(BP_VAR_R);
	op2 = GET_OP2_ZVAL_PTR_UNDEF(BP_VAR_R);
	result = EX_VAR(opline->result.var);
	fast_long_add_function(result, op1, op2);
	ZEND_VM_NEXT_OPCODE();
}

ZEND_VM_HOT_TYPE_SPEC_HANDLER(ZEND_ADD, (op1_info == MAY_BE_DOUBLE && op2_info == MAY_BE_DOUBLE), ZEND_ADD_DOUBLE, CONST|TMPVARCV, CONST|TMPVARCV, SPEC(NO_CONST_CONST,COMMUTATIVE))
{
	USE_OPLINE
	zval *op1, *op2, *result;

	op1 = GET_OP1_ZVAL_PTR_UNDEF(BP_VAR_R);
	op2 = GET_OP2_ZVAL_PTR_UNDEF(BP_VAR_R);
	result = EX_VAR(opline->result.var);
	ZVAL_DOUBLE(result, Z_DVAL_P(op1) + Z_DVAL_P(op2));
	ZEND_VM_NEXT_OPCODE();
}

ZEND_VM_HOT_TYPE_SPEC_HANDLER(ZEND_SUB, (res_info == MAY_BE_LONG && op1_info == MAY_BE_LONG && op2_info == MAY_BE_LONG), ZEND_SUB_LONG_NO_OVERFLOW, CONST|TMPVARCV, CONST|TMPVARCV, SPEC(NO_CONST_CONST))
{
	USE_OPLINE
	zval *op1, *op2, *result;

	op1 = GET_OP1_ZVAL_PTR_UNDEF(BP_VAR_R);
	op2 = GET_OP2_ZVAL_PTR_UNDEF(BP_VAR_R);
	result = EX_VAR(opline->result.var);
	ZVAL_LONG(result, Z_LVAL_P(op1) - Z_LVAL_P(op2));
	ZEND_VM_NEXT_OPCODE();
}

ZEND_VM_HOT_TYPE_SPEC_HANDLER(ZEND_SUB, (op1_info == MAY_BE_LONG && op2_info == MAY_BE_LONG), ZEND_SUB_LONG, CONST|TMPVARCV, CONST|TMPVARCV, SPEC(NO_CONST_CONST))
{
	USE_OPLINE
	zval *op1, *op2, *result;

	op1 = GET_OP1_ZVAL_PTR_UNDEF(BP_VAR_R);
	op2 = GET_OP2_ZVAL_PTR_UNDEF(BP_VAR_R);
	result = EX_VAR(opline->result.var);
	fast_long_sub_function(result, op1, op2);
	ZEND_VM_NEXT_OPCODE();
}

ZEND_VM_HOT_TYPE_SPEC_HANDLER(ZEND_SUB, (op1_info == MAY_BE_DOUBLE && op2_info == MAY_BE_DOUBLE), ZEND_SUB_DOUBLE, CONST|TMPVARCV, CONST|TMPVARCV, SPEC(NO_CONST_CONST))
{
	USE_OPLINE
	zval *op1, *op2, *result;

	op1 = GET_OP1_ZVAL_PTR_UNDEF(BP_VAR_R);
	op2 = GET_OP2_ZVAL_PTR_UNDEF(BP_VAR_R);
	result = EX_VAR(opline->result.var);
	ZVAL_DOUBLE(result, Z_DVAL_P(op1) - Z_DVAL_P(op2));
	ZEND_VM_NEXT_OPCODE();
}

ZEND_VM_HOT_TYPE_SPEC_HANDLER(ZEND_MUL, (res_info == MAY_BE_LONG && op1_info == MAY_BE_LONG && op2_info == MAY_BE_LONG), ZEND_MUL_LONG_NO_OVERFLOW, CONST|TMPVARCV, CONST|TMPVARCV, SPEC(NO_CONST_CONST,COMMUTATIVE))
{
	USE_OPLINE
	zval *op1, *op2, *result;

	op1 = GET_OP1_ZVAL_PTR_UNDEF(BP_VAR_R);
	op2 = GET_OP2_ZVAL_PTR_UNDEF(BP_VAR_R);
	result = EX_VAR(opline->result.var);
	ZVAL_LONG(result, Z_LVAL_P(op1) * Z_LVAL_P(op2));
	ZEND_VM_NEXT_OPCODE();
}

ZEND_VM_HOT_TYPE_SPEC_HANDLER(ZEND_MUL, (op1_info == MAY_BE_LONG && op2_info == MAY_BE_LONG), ZEND_MUL_LONG, CONST|TMPVARCV, CONST|TMPVARCV, SPEC(NO_CONST_CONST,COMMUTATIVE))
{
	USE_OPLINE
	zval *op1, *op2, *result;
	zend_long overflow;

	op1 = GET_OP1_ZVAL_PTR_UNDEF(BP_VAR_R);
	op2 = GET_OP2_ZVAL_PTR_UNDEF(BP_VAR_R);
	result = EX_VAR(opline->result.var);
	ZEND_SIGNED_MULTIPLY_LONG(Z_LVAL_P(op1), Z_LVAL_P(op2), Z_LVAL_P(result), Z_DVAL_P(result), overflow);
	Z_TYPE_INFO_P(result) = overflow ? IS_DOUBLE : IS_LONG;
	ZEND_VM_NEXT_OPCODE();
}

ZEND_VM_HOT_TYPE_SPEC_HANDLER(ZEND_MUL, (op1_info == MAY_BE_DOUBLE && op2_info == MAY_BE_DOUBLE), ZEND_MUL_DOUBLE, CONST|TMPVARCV, CONST|TMPVARCV, SPEC(NO_CONST_CONST,COMMUTATIVE))
{
	USE_OPLINE
	zval *op1, *op2, *result;

	op1 = GET_OP1_ZVAL_PTR_UNDEF(BP_VAR_R);
	op2 = GET_OP2_ZVAL_PTR_UNDEF(BP_VAR_R);
	result = EX_VAR(opline->result.var);
	ZVAL_DOUBLE(result, Z_DVAL_P(op1) * Z_DVAL_P(op2));
	ZEND_VM_NEXT_OPCODE();
}

ZEND_VM_HOT_TYPE_SPEC_HANDLER(ZEND_IS_EQUAL|ZEND_IS_IDENTICAL, (op1_info == MAY_BE_LONG && op2_info == MAY_BE_LONG), ZEND_IS_EQUAL_LONG, CONST|TMPVARCV, CONST|TMPVARCV, SPEC(SMART_BRANCH,NO_CONST_CONST,COMMUTATIVE))
{
	USE_OPLINE
	zval *op1, *op2;
	bool result;

	op1 = GET_OP1_ZVAL_PTR_UNDEF(BP_VAR_R);
	op2 = GET_OP2_ZVAL_PTR_UNDEF(BP_VAR_R);
	result = (Z_LVAL_P(op1) == Z_LVAL_P(op2));
	ZEND_VM_SMART_BRANCH(result, 0);
}

ZEND_VM_HOT_TYPE_SPEC_HANDLER(ZEND_IS_EQUAL|ZEND_IS_IDENTICAL, (op1_info == MAY_BE_DOUBLE && op2_info == MAY_BE_DOUBLE), ZEND_IS_EQUAL_DOUBLE, CONST|TMPVARCV, CONST|TMPVARCV, SPEC(SMART_BRANCH,NO_CONST_CONST,COMMUTATIVE))
{
	USE_OPLINE
	zval *op1, *op2;
	bool result;

	op1 = GET_OP1_ZVAL_PTR_UNDEF(BP_VAR_R);
	op2 = GET_OP2_ZVAL_PTR_UNDEF(BP_VAR_R);
	result = (Z_DVAL_P(op1) == Z_DVAL_P(op2));
	ZEND_VM_SMART_BRANCH(result, 0);
}

ZEND_VM_HOT_TYPE_SPEC_HANDLER(ZEND_IS_NOT_EQUAL|ZEND_IS_NOT_IDENTICAL, (op1_info == MAY_BE_LONG && op2_info == MAY_BE_LONG), ZEND_IS_NOT_EQUAL_LONG, CONST|TMPVARCV, CONST|TMPVARCV, SPEC(SMART_BRANCH,NO_CONST_CONST,COMMUTATIVE))
{
	USE_OPLINE
	zval *op1, *op2;
	bool result;

	op1 = GET_OP1_ZVAL_PTR_UNDEF(BP_VAR_R);
	op2 = GET_OP2_ZVAL_PTR_UNDEF(BP_VAR_R);
	result = (Z_LVAL_P(op1) != Z_LVAL_P(op2));
	ZEND_VM_SMART_BRANCH(result, 0);
}

ZEND_VM_HOT_TYPE_SPEC_HANDLER(ZEND_IS_NOT_EQUAL|ZEND_IS_NOT_IDENTICAL, (op1_info == MAY_BE_DOUBLE && op2_info == MAY_BE_DOUBLE), ZEND_IS_NOT_EQUAL_DOUBLE, CONST|TMPVARCV, CONST|TMPVARCV, SPEC(SMART_BRANCH,NO_CONST_CONST,COMMUTATIVE))
{
	USE_OPLINE
	zval *op1, *op2;
	bool result;

	op1 = GET_OP1_ZVAL_PTR_UNDEF(BP_VAR_R);
	op2 = GET_OP2_ZVAL_PTR_UNDEF(BP_VAR_R);
	result = (Z_DVAL_P(op1) != Z_DVAL_P(op2));
	ZEND_VM_SMART_BRANCH(result, 0);
}

ZEND_VM_TYPE_SPEC_HANDLER(ZEND_IS_IDENTICAL, op->op2_type == IS_CONST && (Z_TYPE_P(RT_CONSTANT(op, op->op2)) == IS_ARRAY && zend_hash_num_elements(Z_ARR_P(RT_CONSTANT(op, op->op2))) == 0), ZEND_IS_IDENTICAL_EMPTY_ARRAY, TMPVARCV, CONST, SPEC(SMART_BRANCH,COMMUTATIVE))
{
	USE_OPLINE
	zval *op1;
	bool result;

	op1 = GET_OP1_ZVAL_PTR_DEREF(BP_VAR_R);
	result = Z_TYPE_P(op1) == IS_ARRAY && zend_hash_num_elements(Z_ARR_P(op1)) == 0;
	FREE_OP1();
	FREE_OP2();
	ZEND_VM_SMART_BRANCH(result, 0);
}

ZEND_VM_TYPE_SPEC_HANDLER(ZEND_IS_NOT_IDENTICAL, op->op2_type == IS_CONST && (Z_TYPE_P(RT_CONSTANT(op, op->op2)) == IS_ARRAY && zend_hash_num_elements(Z_ARR_P(RT_CONSTANT(op, op->op2))) == 0), ZEND_IS_NOT_IDENTICAL_EMPTY_ARRAY, TMPVARCV, CONST, SPEC(SMART_BRANCH,COMMUTATIVE))
{
	USE_OPLINE
	zval *op1;
	bool result;

	op1 = GET_OP1_ZVAL_PTR_DEREF(BP_VAR_R);
	result = Z_TYPE_P(op1) != IS_ARRAY || zend_hash_num_elements(Z_ARR_P(op1)) > 0;
	FREE_OP1();
	FREE_OP2();
	ZEND_VM_SMART_BRANCH(result, 0);
}

ZEND_VM_TYPE_SPEC_HANDLER(ZEND_IS_IDENTICAL, op->op1_type == IS_CV && (op->op2_type & (IS_CONST|IS_CV)) && !(op1_info & (MAY_BE_UNDEF|MAY_BE_REF)) && !(op2_info & (MAY_BE_UNDEF|MAY_BE_REF)), ZEND_IS_IDENTICAL_NOTHROW, CV, CONST|CV, SPEC(COMMUTATIVE))
{
	/* This is declared below the specializations for MAY_BE_LONG/MAY_BE_DOUBLE so those will be used instead if possible. */
	/* This optimizes $x === SOME_CONST_EXPR and $x === $y for non-refs and non-undef, which can't throw. */
	/* (Infinite recursion when comparing arrays is an uncatchable fatal error) */
	USE_OPLINE
	zval *op1, *op2;
	bool result;

	op1 = GET_OP1_ZVAL_PTR_UNDEF(BP_VAR_R);
	op2 = GET_OP2_ZVAL_PTR_UNDEF(BP_VAR_R);
	result = fast_is_identical_function(op1, op2);
	/* Free is a no-op for const/cv */
	ZEND_VM_SMART_BRANCH(result, 0);
}

ZEND_VM_TYPE_SPEC_HANDLER(ZEND_IS_NOT_IDENTICAL, op->op1_type == IS_CV && (op->op2_type & (IS_CONST|IS_CV)) && !(op1_info & (MAY_BE_UNDEF|MAY_BE_REF)) && !(op2_info & (MAY_BE_UNDEF|MAY_BE_REF)), ZEND_IS_NOT_IDENTICAL_NOTHROW, CV, CONST|CV, SPEC(COMMUTATIVE))
{
	USE_OPLINE
	zval *op1, *op2;
	bool result;

	op1 = GET_OP1_ZVAL_PTR_UNDEF(BP_VAR_R);
	op2 = GET_OP2_ZVAL_PTR_UNDEF(BP_VAR_R);
	result = fast_is_identical_function(op1, op2);
	/* Free is a no-op for const/cv */
	ZEND_VM_SMART_BRANCH(!result, 0);
}

ZEND_VM_HOT_TYPE_SPEC_HANDLER(ZEND_IS_SMALLER, (op1_info == MAY_BE_LONG && op2_info == MAY_BE_LONG), ZEND_IS_SMALLER_LONG, CONST|TMPVARCV, CONST|TMPVARCV, SPEC(SMART_BRANCH,NO_CONST_CONST))
{
	USE_OPLINE
	zval *op1, *op2;
	bool result;

	op1 = GET_OP1_ZVAL_PTR_UNDEF(BP_VAR_R);
	op2 = GET_OP2_ZVAL_PTR_UNDEF(BP_VAR_R);
	result = (Z_LVAL_P(op1) < Z_LVAL_P(op2));
	ZEND_VM_SMART_BRANCH(result, 0);
}

ZEND_VM_HOT_TYPE_SPEC_HANDLER(ZEND_IS_SMALLER, (op1_info == MAY_BE_DOUBLE && op2_info == MAY_BE_DOUBLE), ZEND_IS_SMALLER_DOUBLE, CONST|TMPVARCV, CONST|TMPVARCV, SPEC(SMART_BRANCH,NO_CONST_CONST))
{
	USE_OPLINE
	zval *op1, *op2;
	bool result;

	op1 = GET_OP1_ZVAL_PTR_UNDEF(BP_VAR_R);
	op2 = GET_OP2_ZVAL_PTR_UNDEF(BP_VAR_R);
	result = (Z_DVAL_P(op1) < Z_DVAL_P(op2));
	ZEND_VM_SMART_BRANCH(result, 0);
}

ZEND_VM_HOT_TYPE_SPEC_HANDLER(ZEND_IS_SMALLER_OR_EQUAL, (op1_info == MAY_BE_LONG && op2_info == MAY_BE_LONG), ZEND_IS_SMALLER_OR_EQUAL_LONG, CONST|TMPVARCV, CONST|TMPVARCV, SPEC(SMART_BRANCH,NO_CONST_CONST))
{
	USE_OPLINE
	zval *op1, *op2;
	bool result;

	op1 = GET_OP1_ZVAL_PTR_UNDEF(BP_VAR_R);
	op2 = GET_OP2_ZVAL_PTR_UNDEF(BP_VAR_R);
	result = (Z_LVAL_P(op1) <= Z_LVAL_P(op2));
	ZEND_VM_SMART_BRANCH(result, 0);
}

ZEND_VM_HOT_TYPE_SPEC_HANDLER(ZEND_IS_SMALLER_OR_EQUAL, (op1_info == MAY_BE_DOUBLE && op2_info == MAY_BE_DOUBLE), ZEND_IS_SMALLER_OR_EQUAL_DOUBLE, CONST|TMPVARCV, CONST|TMPVARCV, SPEC(SMART_BRANCH,NO_CONST_CONST))
{
	USE_OPLINE
	zval *op1, *op2;
	bool result;

	op1 = GET_OP1_ZVAL_PTR_UNDEF(BP_VAR_R);
	op2 = GET_OP2_ZVAL_PTR_UNDEF(BP_VAR_R);
	result = (Z_DVAL_P(op1) <= Z_DVAL_P(op2));
	ZEND_VM_SMART_BRANCH(result, 0);
}

ZEND_VM_HOT_TYPE_SPEC_HANDLER(ZEND_PRE_INC, (res_info == MAY_BE_LONG && op1_info == MAY_BE_LONG), ZEND_PRE_INC_LONG_NO_OVERFLOW, CV, ANY, SPEC(RETVAL))
{
	USE_OPLINE
	zval *var_ptr;

	var_ptr = GET_OP1_ZVAL_PTR_PTR_UNDEF(BP_VAR_RW);
	Z_LVAL_P(var_ptr)++;
	if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
		ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(var_ptr));
	}
	ZEND_VM_NEXT_OPCODE();
}

ZEND_VM_HOT_TYPE_SPEC_HANDLER(ZEND_PRE_INC, (op1_info == MAY_BE_LONG), ZEND_PRE_INC_LONG, CV, ANY, SPEC(RETVAL))
{
	USE_OPLINE
	zval *var_ptr;

	var_ptr = GET_OP1_ZVAL_PTR_PTR_UNDEF(BP_VAR_RW);
	fast_long_increment_function(var_ptr);
	if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
		ZVAL_COPY_VALUE(EX_VAR(opline->result.var), var_ptr);
	}
	ZEND_VM_NEXT_OPCODE();
}

ZEND_VM_HOT_TYPE_SPEC_HANDLER(ZEND_PRE_DEC, (res_info == MAY_BE_LONG && op1_info == MAY_BE_LONG), ZEND_PRE_DEC_LONG_NO_OVERFLOW, CV, ANY, SPEC(RETVAL))
{
	USE_OPLINE
	zval *var_ptr;

	var_ptr = GET_OP1_ZVAL_PTR_PTR_UNDEF(BP_VAR_RW);
	Z_LVAL_P(var_ptr)--;
	if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
		ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(var_ptr));
	}
	ZEND_VM_NEXT_OPCODE();
}

ZEND_VM_HOT_TYPE_SPEC_HANDLER(ZEND_PRE_DEC, (op1_info == MAY_BE_LONG), ZEND_PRE_DEC_LONG, CV, ANY, SPEC(RETVAL))
{
	USE_OPLINE
	zval *var_ptr;

	var_ptr = GET_OP1_ZVAL_PTR_PTR_UNDEF(BP_VAR_RW);
	fast_long_decrement_function(var_ptr);
	if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
		ZVAL_COPY_VALUE(EX_VAR(opline->result.var), var_ptr);
	}
	ZEND_VM_NEXT_OPCODE();
}

ZEND_VM_HOT_TYPE_SPEC_HANDLER(ZEND_POST_INC, (res_info == MAY_BE_LONG && op1_info == MAY_BE_LONG), ZEND_POST_INC_LONG_NO_OVERFLOW, CV, ANY)
{
	USE_OPLINE
	zval *var_ptr;

	var_ptr = GET_OP1_ZVAL_PTR_PTR_UNDEF(BP_VAR_RW);
	ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(var_ptr));
	Z_LVAL_P(var_ptr)++;
	ZEND_VM_NEXT_OPCODE();
}

ZEND_VM_HOT_TYPE_SPEC_HANDLER(ZEND_POST_INC, (op1_info == MAY_BE_LONG), ZEND_POST_INC_LONG, CV, ANY)
{
	USE_OPLINE
	zval *var_ptr;

	var_ptr = GET_OP1_ZVAL_PTR_PTR_UNDEF(BP_VAR_RW);
	ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(var_ptr));
	fast_long_increment_function(var_ptr);
	ZEND_VM_NEXT_OPCODE();
}

ZEND_VM_HOT_TYPE_SPEC_HANDLER(ZEND_POST_DEC, (res_info == MAY_BE_LONG && op1_info == MAY_BE_LONG), ZEND_POST_DEC_LONG_NO_OVERFLOW, CV, ANY)
{
	USE_OPLINE
	zval *var_ptr;

	var_ptr = GET_OP1_ZVAL_PTR_PTR_UNDEF(BP_VAR_RW);
	ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(var_ptr));
	Z_LVAL_P(var_ptr)--;
	ZEND_VM_NEXT_OPCODE();
}

ZEND_VM_HOT_TYPE_SPEC_HANDLER(ZEND_POST_DEC, (op1_info == MAY_BE_LONG), ZEND_POST_DEC_LONG, CV, ANY)
{
	USE_OPLINE
	zval *var_ptr;

	var_ptr = GET_OP1_ZVAL_PTR_PTR_UNDEF(BP_VAR_RW);
	ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(var_ptr));
	fast_long_decrement_function(var_ptr);
	ZEND_VM_NEXT_OPCODE();
}

ZEND_VM_HOT_TYPE_SPEC_HANDLER(ZEND_QM_ASSIGN, (op1_info == MAY_BE_LONG), ZEND_QM_ASSIGN_LONG, CONST|TMPVARCV, ANY)
{
	USE_OPLINE
	zval *value;

	value = GET_OP1_ZVAL_PTR_UNDEF(BP_VAR_R);
	ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(value));
	ZEND_VM_NEXT_OPCODE();
}

ZEND_VM_HOT_TYPE_SPEC_HANDLER(ZEND_QM_ASSIGN, (op1_info == MAY_BE_DOUBLE), ZEND_QM_ASSIGN_DOUBLE, CONST|TMPVARCV, ANY)
{
	USE_OPLINE
	zval *value;

	value = GET_OP1_ZVAL_PTR_UNDEF(BP_VAR_R);
	ZVAL_DOUBLE(EX_VAR(opline->result.var), Z_DVAL_P(value));
	ZEND_VM_NEXT_OPCODE();
}

ZEND_VM_HOT_TYPE_SPEC_HANDLER(ZEND_QM_ASSIGN, ((op->op1_type == IS_CONST) ? !Z_REFCOUNTED_P(RT_CONSTANT(op, op->op1)) : (!(op1_info & ((MAY_BE_ANY|MAY_BE_UNDEF)-(MAY_BE_NULL|MAY_BE_FALSE|MAY_BE_TRUE|MAY_BE_LONG|MAY_BE_DOUBLE))))), ZEND_QM_ASSIGN_NOREF, CONST|TMPVARCV, ANY)
{
	USE_OPLINE
	zval *value;

	value = GET_OP1_ZVAL_PTR_UNDEF(BP_VAR_R);
	ZVAL_COPY_VALUE(EX_VAR(opline->result.var), value);
	ZEND_VM_NEXT_OPCODE();
}

ZEND_VM_HOT_TYPE_SPEC_HANDLER(ZEND_FETCH_DIM_R, (!(op2_info & (MAY_BE_UNDEF|MAY_BE_NULL|MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE|MAY_BE_REF))), ZEND_FETCH_DIM_R_INDEX, CONST|TMPVAR|CV, CONST|TMPVARCV, SPEC(NO_CONST_CONST))
{
	USE_OPLINE
	zval *container, *dim, *value;
	zend_long offset;
	HashTable *ht;

	container = GET_OP1_ZVAL_PTR_UNDEF(BP_VAR_R);
	dim = GET_OP2_ZVAL_PTR_UNDEF(BP_VAR_R);
	if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
ZEND_VM_C_LABEL(fetch_dim_r_index_array):
		if (EXPECTED(Z_TYPE_P(dim) == IS_LONG)) {
			offset = Z_LVAL_P(dim);
		} else {
			SAVE_OPLINE();
			zend_fetch_dimension_address_read_R(container, dim, OP2_TYPE OPLINE_CC EXECUTE_DATA_CC);
			FREE_OP1();
			ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
		}
		ht = Z_ARRVAL_P(container);
		ZEND_HASH_INDEX_FIND(ht, offset, value, ZEND_VM_C_LABEL(fetch_dim_r_index_undef));
		ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
		if (OP1_TYPE & (IS_TMP_VAR|IS_VAR)) {
			SAVE_OPLINE();
			FREE_OP1();
			ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
		} else {
			ZEND_VM_NEXT_OPCODE();
		}
	} else if (OP1_TYPE != IS_CONST && EXPECTED(Z_TYPE_P(container) == IS_REFERENCE)) {
		container = Z_REFVAL_P(container);
		if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
			ZEND_VM_C_GOTO(fetch_dim_r_index_array);
		} else {
			ZEND_VM_C_GOTO(fetch_dim_r_index_slow);
		}
	} else {
ZEND_VM_C_LABEL(fetch_dim_r_index_slow):
		SAVE_OPLINE();
		if (OP2_TYPE == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
			dim++;
		}
		zend_fetch_dimension_address_read_R_slow(container, dim OPLINE_CC EXECUTE_DATA_CC);
		FREE_OP1();
		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
	}

ZEND_VM_C_LABEL(fetch_dim_r_index_undef):
	ZVAL_NULL(EX_VAR(opline->result.var));
	SAVE_OPLINE();
	zend_undefined_offset(offset);
	FREE_OP1();
	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

ZEND_VM_HOT_TYPE_SPEC_HANDLER(ZEND_SEND_VAR, op->op2_type == IS_UNUSED && (op1_info & (MAY_BE_UNDEF|MAY_BE_REF)) == 0, ZEND_SEND_VAR_SIMPLE, CV|VAR, NUM)
{
	USE_OPLINE
	zval *varptr, *arg;

	varptr = GET_OP1_ZVAL_PTR_UNDEF(BP_VAR_R);
	arg = ZEND_CALL_VAR(EX(call), opline->result.var);

	if (OP1_TYPE == IS_CV) {
		ZVAL_COPY(arg, varptr);
	} else /* if (OP1_TYPE == IS_VAR) */ {
		ZVAL_COPY_VALUE(arg, varptr);
	}

	ZEND_VM_NEXT_OPCODE();
}

ZEND_VM_HOT_TYPE_SPEC_HANDLER(ZEND_SEND_VAR_EX, op->op2_type == IS_UNUSED && op->op2.num <= MAX_ARG_FLAG_NUM && (op1_info & (MAY_BE_UNDEF|MAY_BE_REF)) == 0, ZEND_SEND_VAR_EX_SIMPLE, CV|VAR, UNUSED|NUM)
{
	USE_OPLINE
	zval *varptr, *arg;
	uint32_t arg_num = opline->op2.num;

	if (QUICK_ARG_SHOULD_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
		ZEND_VM_DISPATCH_TO_HANDLER(ZEND_SEND_REF);
	}

	varptr = GET_OP1_ZVAL_PTR_UNDEF(BP_VAR_R);
	arg = ZEND_CALL_VAR(EX(call), opline->result.var);

	if (OP1_TYPE == IS_CV) {
		ZVAL_COPY(arg, varptr);
	} else /* if (OP1_TYPE == IS_VAR) */ {
		ZVAL_COPY_VALUE(arg, varptr);
	}

	ZEND_VM_NEXT_OPCODE();
}

ZEND_VM_HOT_TYPE_SPEC_HANDLER(ZEND_SEND_VAL, op->op1_type == IS_CONST && op->op2_type == IS_UNUSED && !Z_REFCOUNTED_P(RT_CONSTANT(op, op->op1)), ZEND_SEND_VAL_SIMPLE, CONST, NUM)
{
	USE_OPLINE
	zval *value, *arg;

	value = GET_OP1_ZVAL_PTR(BP_VAR_R);
	arg = ZEND_CALL_VAR(EX(call), opline->result.var);
	ZVAL_COPY_VALUE(arg, value);
	ZEND_VM_NEXT_OPCODE();
}

ZEND_VM_HOT_TYPE_SPEC_HANDLER(ZEND_SEND_VAL_EX, op->op2_type == IS_UNUSED && op->op2.num <= MAX_ARG_FLAG_NUM && op->op1_type == IS_CONST && !Z_REFCOUNTED_P(RT_CONSTANT(op, op->op1)), ZEND_SEND_VAL_EX_SIMPLE, CONST, NUM)
{
	USE_OPLINE
	zval *value, *arg;
	uint32_t arg_num = opline->op2.num;

	arg = ZEND_CALL_VAR(EX(call), opline->result.var);
	if (QUICK_ARG_MUST_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
		ZEND_VM_DISPATCH_TO_HELPER(zend_cannot_pass_by_ref_helper, _arg_num, arg_num, _arg, arg);
	}
	value = GET_OP1_ZVAL_PTR(BP_VAR_R);
	ZVAL_COPY_VALUE(arg, value);
	ZEND_VM_NEXT_OPCODE();
}

ZEND_VM_HOT_TYPE_SPEC_HANDLER(ZEND_FE_FETCH_R, op->op2_type == IS_CV && (op1_info & (MAY_BE_ANY|MAY_BE_REF)) == MAY_BE_ARRAY, ZEND_FE_FETCH_R_SIMPLE, VAR, CV, JMP_ADDR, SPEC(RETVAL))
{
	USE_OPLINE
	zval *array;
	zval *value, *variable_ptr;
	uint32_t value_type;
	HashTable *fe_ht;
	HashPosition pos;

	array = EX_VAR(opline->op1.var);
	SAVE_OPLINE();
	fe_ht = Z_ARRVAL_P(array);
	pos = Z_FE_POS_P(array);
	if (HT_IS_PACKED(fe_ht)) {
		value = fe_ht->arPacked + pos;
		while (1) {
			if (UNEXPECTED(pos >= fe_ht->nNumUsed)) {
				/* reached end of iteration */
				ZEND_VM_SET_RELATIVE_OPCODE(opline, opline->extended_value);
				ZEND_VM_CONTINUE();
			}
			value_type = Z_TYPE_INFO_P(value);
			ZEND_ASSERT(value_type != IS_INDIRECT);
			if (EXPECTED(value_type != IS_UNDEF)) {
				break;
			}
			pos++;
			value++;
		}
		Z_FE_POS_P(array) = pos + 1;
		if (RETURN_VALUE_USED(opline)) {
			ZVAL_LONG(EX_VAR(opline->result.var), pos);
		}
	} else {
		Bucket *p;

		p = fe_ht->arData + pos;
		while (1) {
			if (UNEXPECTED(pos >= fe_ht->nNumUsed)) {
				/* reached end of iteration */
				ZEND_VM_SET_RELATIVE_OPCODE(opline, opline->extended_value);
				ZEND_VM_CONTINUE();
			}
			pos++;
			value = &p->val;
			value_type = Z_TYPE_INFO_P(value);
			ZEND_ASSERT(value_type != IS_INDIRECT);
			if (EXPECTED(value_type != IS_UNDEF)) {
				break;
			}
			p++;
		}
		Z_FE_POS_P(array) = pos;
		if (RETURN_VALUE_USED(opline)) {
			if (!p->key) {
				ZVAL_LONG(EX_VAR(opline->result.var), p->h);
			} else {
				ZVAL_STR_COPY(EX_VAR(opline->result.var), p->key);
			}
		}
	}

	variable_ptr = EX_VAR(opline->op2.var);
	zend_assign_to_variable(variable_ptr, value, IS_CV, EX_USES_STRICT_TYPES());
	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

ZEND_VM_DEFINE_OP(137, ZEND_OP_DATA);

ZEND_VM_HELPER(zend_interrupt_helper, ANY, ANY)
{
	zend_atomic_bool_store_ex(&EG(vm_interrupt), false);
	SAVE_OPLINE();
	if (zend_atomic_bool_load_ex(&EG(timed_out))) {
		zend_timeout();
	} else if (zend_interrupt_function) {
		zend_interrupt_function(execute_data);
		if (EG(exception)) {
			/* We have to UNDEF result, because ZEND_HANDLE_EXCEPTION is going to free it */
			const zend_op *throw_op = EG(opline_before_exception);

			if (throw_op
			 && throw_op->result_type & (IS_TMP_VAR|IS_VAR)
			 && throw_op->opcode != ZEND_ADD_ARRAY_ELEMENT
			 && throw_op->opcode != ZEND_ADD_ARRAY_UNPACK
			 && throw_op->opcode != ZEND_ROPE_INIT
			 && throw_op->opcode != ZEND_ROPE_ADD) {
				ZVAL_UNDEF(ZEND_CALL_VAR(EG(current_execute_data), throw_op->result.var));

			}
		}
		ZEND_VM_ENTER();
	}
	ZEND_VM_CONTINUE();
}
Zend/zend_arena.h000064400000013701151730543170007733 0ustar00/*
   +----------------------------------------------------------------------+
   | Zend Engine                                                          |
   +----------------------------------------------------------------------+
   | Copyright (c) Zend Technologies Ltd. (http://www.zend.com)           |
   +----------------------------------------------------------------------+
   | This source file is subject to version 2.00 of the Zend license,     |
   | that is bundled with this package in the file LICENSE, and is        |
   | available through the world-wide-web at the following url:           |
   | http://www.zend.com/license/2_00.txt.                                |
   | If you did not receive a copy of the Zend license and are unable to  |
   | obtain it through the world-wide-web, please send a note to          |
   | license@zend.com so we can mail you a copy immediately.              |
   +----------------------------------------------------------------------+
   | Authors: Dmitry Stogov <dmitry@php.net>                              |
   +----------------------------------------------------------------------+
*/

#ifndef _ZEND_ARENA_H_
#define _ZEND_ARENA_H_

#include "zend.h"

#ifndef ZEND_TRACK_ARENA_ALLOC

typedef struct _zend_arena zend_arena;

struct _zend_arena {
	char		*ptr;
	char		*end;
	zend_arena  *prev;
};

static zend_always_inline zend_arena* zend_arena_create(size_t size)
{
	zend_arena *arena = (zend_arena*)emalloc(size);

	arena->ptr = (char*) arena + ZEND_MM_ALIGNED_SIZE(sizeof(zend_arena));
	arena->end = (char*) arena + size;
	arena->prev = NULL;
	return arena;
}

static zend_always_inline void zend_arena_destroy(zend_arena *arena)
{
	do {
		zend_arena *prev = arena->prev;
		efree(arena);
		arena = prev;
	} while (arena);
}

static zend_always_inline void* zend_arena_alloc(zend_arena **arena_ptr, size_t size)
{
	zend_arena *arena = *arena_ptr;
	char *ptr = arena->ptr;

	size = ZEND_MM_ALIGNED_SIZE(size);

	if (EXPECTED(size <= (size_t)(arena->end - ptr))) {
		arena->ptr = ptr + size;
	} else {
		size_t arena_size =
			UNEXPECTED((size + ZEND_MM_ALIGNED_SIZE(sizeof(zend_arena))) > (size_t)(arena->end - (char*) arena)) ?
				(size + ZEND_MM_ALIGNED_SIZE(sizeof(zend_arena))) :
				(size_t)(arena->end - (char*) arena);
		zend_arena *new_arena = (zend_arena*)emalloc(arena_size);

		ptr = (char*) new_arena + ZEND_MM_ALIGNED_SIZE(sizeof(zend_arena));
		new_arena->ptr = (char*) new_arena + ZEND_MM_ALIGNED_SIZE(sizeof(zend_arena)) + size;
		new_arena->end = (char*) new_arena + arena_size;
		new_arena->prev = arena;
		*arena_ptr = new_arena;
	}

	return (void*) ptr;
}

static zend_always_inline void* zend_arena_calloc(zend_arena **arena_ptr, size_t count, size_t unit_size)
{
	bool overflow;
	size_t size;
	void *ret;

	size = zend_safe_address(unit_size, count, 0, &overflow);
	if (UNEXPECTED(overflow)) {
		zend_error_noreturn(E_ERROR, "Possible integer overflow in zend_arena_calloc() (%zu * %zu)", unit_size, count);
	}
	ret = zend_arena_alloc(arena_ptr, size);
	memset(ret, 0, size);
	return ret;
}

static zend_always_inline void* zend_arena_checkpoint(zend_arena *arena)
{
	return arena->ptr;
}

static zend_always_inline void zend_arena_release(zend_arena **arena_ptr, void *checkpoint)
{
	zend_arena *arena = *arena_ptr;

	while (UNEXPECTED((char*)checkpoint > arena->end) ||
	       UNEXPECTED((char*)checkpoint <= (char*)arena)) {
		zend_arena *prev = arena->prev;
		efree(arena);
		*arena_ptr = arena = prev;
	}
	ZEND_ASSERT((char*)checkpoint > (char*)arena && (char*)checkpoint <= arena->end);
	arena->ptr = (char*)checkpoint;
}

static zend_always_inline bool zend_arena_contains(zend_arena *arena, void *ptr)
{
	while (arena) {
		if ((char*)ptr > (char*)arena && (char*)ptr <= arena->ptr) {
			return 1;
		}
		arena = arena->prev;
	}
	return 0;
}

#else

/* Use normal allocations and keep track of them for mass-freeing.
 * This is intended for use with asan/valgrind. */

typedef struct _zend_arena zend_arena;

struct _zend_arena {
	void **ptr;
	void **end;
	struct _zend_arena *prev;
	void *ptrs[0];
};

#define ZEND_TRACKED_ARENA_SIZE 1000

static zend_always_inline zend_arena *zend_arena_create(size_t _size)
{
	zend_arena *arena = (zend_arena*) emalloc(
		sizeof(zend_arena) + sizeof(void *) * ZEND_TRACKED_ARENA_SIZE);
	arena->ptr = &arena->ptrs[0];
	arena->end = &arena->ptrs[ZEND_TRACKED_ARENA_SIZE];
	arena->prev = NULL;
	return arena;
}

static zend_always_inline void zend_arena_destroy(zend_arena *arena)
{
	do {
		zend_arena *prev = arena->prev;
		void **ptr;
		for (ptr = arena->ptrs; ptr < arena->ptr; ptr++) {
			efree(*ptr);
		}
		efree(arena);
		arena = prev;
	} while (arena);
}

static zend_always_inline void *zend_arena_alloc(zend_arena **arena_ptr, size_t size)
{
	zend_arena *arena = *arena_ptr;
	if (arena->ptr == arena->end) {
		*arena_ptr = zend_arena_create(0);
		(*arena_ptr)->prev = arena;
		arena = *arena_ptr;
	}

	return *arena->ptr++ = emalloc(size);
}

static zend_always_inline void* zend_arena_calloc(zend_arena **arena_ptr, size_t count, size_t unit_size)
{
	bool overflow;
	size_t size;
	void *ret;

	size = zend_safe_address(unit_size, count, 0, &overflow);
	if (UNEXPECTED(overflow)) {
		zend_error_noreturn(E_ERROR, "Possible integer overflow in zend_arena_calloc() (%zu * %zu)", unit_size, count);
	}
	ret = zend_arena_alloc(arena_ptr, size);
	memset(ret, 0, size);
	return ret;
}

static zend_always_inline void* zend_arena_checkpoint(zend_arena *arena)
{
	return arena->ptr;
}

static zend_always_inline void zend_arena_release(zend_arena **arena_ptr, void *checkpoint)
{
	while (1) {
		zend_arena *arena = *arena_ptr;
		zend_arena *prev = arena->prev;
		while (1) {
			if (arena->ptr == (void **) checkpoint) {
				return;
			}
			if (arena->ptr == arena->ptrs) {
				break;
			}
			arena->ptr--;
			efree(*arena->ptr);
		}
		efree(arena);
		*arena_ptr = prev;
		ZEND_ASSERT(*arena_ptr);
	}
}

static zend_always_inline bool zend_arena_contains(zend_arena *arena, void *ptr)
{
	/* TODO: Dummy */
	return 1;
}

#endif

#endif /* _ZEND_ARENA_H_ */
Zend/zend_iterators.h000064400000007475151730543200010666 0ustar00/*
   +----------------------------------------------------------------------+
   | Zend Engine                                                          |
   +----------------------------------------------------------------------+
   | Copyright (c) Zend Technologies Ltd. (http://www.zend.com)           |
   +----------------------------------------------------------------------+
   | This source file is subject to version 2.00 of the Zend license,     |
   | that is bundled with this package in the file LICENSE, and is        |
   | available through the world-wide-web at the following url:           |
   | http://www.zend.com/license/2_00.txt.                                |
   | If you did not receive a copy of the Zend license and are unable to  |
   | obtain it through the world-wide-web, please send a note to          |
   | license@zend.com so we can mail you a copy immediately.              |
   +----------------------------------------------------------------------+
   | Author: Wez Furlong <wez@thebrainroom.com>                           |
   |         Marcus Boerger <helly@php.net>                               |
   +----------------------------------------------------------------------+
*/

#ifndef ZEND_ITERATORS_H
#define ZEND_ITERATORS_H

#include "zend_types.h"

/* These iterators were designed to operate within the foreach()
 * structures provided by the engine, but could be extended for use
 * with other iterative engine opcodes.
 * These methods have similar semantics to the zend_hash API functions
 * with similar names.
 * */

typedef struct _zend_object_iterator zend_object_iterator;

typedef struct _zend_object_iterator_funcs {
	/* release all resources associated with this iterator instance */
	void (*dtor)(zend_object_iterator *iter);

	/* check for end of iteration (FAILURE or SUCCESS if data is valid) */
	zend_result (*valid)(zend_object_iterator *iter);

	/* fetch the item data for the current element */
	zval *(*get_current_data)(zend_object_iterator *iter);

	/* fetch the key for the current element (optional, may be NULL). The key
	 * should be written into the provided zval* using the ZVAL_* macros. If
	 * this handler is not provided auto-incrementing integer keys will be
	 * used. */
	void (*get_current_key)(zend_object_iterator *iter, zval *key);

	/* step forwards to next element */
	void (*move_forward)(zend_object_iterator *iter);

	/* rewind to start of data (optional, may be NULL) */
	void (*rewind)(zend_object_iterator *iter);

	/* invalidate current value/key (optional, may be NULL) */
	void (*invalidate_current)(zend_object_iterator *iter);

	/* Expose owned values to GC.
	 * This has the same semantics as the corresponding object handler. */
	HashTable *(*get_gc)(zend_object_iterator *iter, zval **table, int *n);
} zend_object_iterator_funcs;

struct _zend_object_iterator {
	zend_object std;
	zval data;
	const zend_object_iterator_funcs *funcs;
	zend_ulong index; /* private to fe_reset/fe_fetch opcodes */
};

typedef struct _zend_class_iterator_funcs {
	zend_function *zf_new_iterator;
	zend_function *zf_valid;
	zend_function *zf_current;
	zend_function *zf_key;
	zend_function *zf_next;
	zend_function *zf_rewind;
} zend_class_iterator_funcs;

typedef struct _zend_class_arrayaccess_funcs {
	zend_function *zf_offsetget;
	zend_function *zf_offsetexists;
	zend_function *zf_offsetset;
	zend_function *zf_offsetunset;
} zend_class_arrayaccess_funcs;

BEGIN_EXTERN_C()
/* given a zval, returns stuff that can be used to iterate it. */
ZEND_API zend_object_iterator* zend_iterator_unwrap(zval *array_ptr);

/* given an iterator, wrap it up as a zval for use by the engine opcodes */
ZEND_API void zend_iterator_init(zend_object_iterator *iter);
ZEND_API void zend_iterator_dtor(zend_object_iterator *iter);

ZEND_API void zend_register_iterator_wrapper(void);
END_EXTERN_C()

#endif /* ZEND_ITERATORS_H */
Zend/zend_type_info.h000064400000010700151730543200010627 0ustar00/*
   +----------------------------------------------------------------------+
   | Zend Engine                                                          |
   +----------------------------------------------------------------------+
   | Copyright (c) Zend Technologies Ltd. (http://www.zend.com)           |
   +----------------------------------------------------------------------+
   | This source file is subject to version 2.00 of the Zend license,     |
   | that is bundled with this package in the file LICENSE, and is        |
   | available through the world-wide-web at the following url:           |
   | http://www.zend.com/license/2_00.txt.                                |
   | If you did not receive a copy of the Zend license and are unable to  |
   | obtain it through the world-wide-web, please send a note to          |
   | license@zend.com so we can mail you a copy immediately.              |
   +----------------------------------------------------------------------+
   | Authors: Dmitry Stogov <dmitry@php.net>                              |
   +----------------------------------------------------------------------+
*/

#ifndef ZEND_TYPE_INFO_H
#define ZEND_TYPE_INFO_H

#include "zend_types.h"

#define MAY_BE_UNDEF                (1 << IS_UNDEF)
#define MAY_BE_NULL		            (1 << IS_NULL)
#define MAY_BE_FALSE	            (1 << IS_FALSE)
#define MAY_BE_TRUE		            (1 << IS_TRUE)
#define MAY_BE_BOOL                 (MAY_BE_FALSE|MAY_BE_TRUE)
#define MAY_BE_LONG		            (1 << IS_LONG)
#define MAY_BE_DOUBLE	            (1 << IS_DOUBLE)
#define MAY_BE_STRING	            (1 << IS_STRING)
#define MAY_BE_ARRAY	            (1 << IS_ARRAY)
#define MAY_BE_OBJECT	            (1 << IS_OBJECT)
#define MAY_BE_RESOURCE	            (1 << IS_RESOURCE)
#define MAY_BE_ANY                  (MAY_BE_NULL|MAY_BE_FALSE|MAY_BE_TRUE|MAY_BE_LONG|MAY_BE_DOUBLE|MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE)
#define MAY_BE_REF                  (1 << IS_REFERENCE) /* may be reference */

/* These are used in zend_type, but not for type inference.
 * They are allowed to overlap with types used during inference. */
#define MAY_BE_CALLABLE             (1 << IS_CALLABLE)
#define MAY_BE_VOID                 (1 << IS_VOID)
#define MAY_BE_NEVER                (1 << IS_NEVER)
#define MAY_BE_STATIC               (1 << IS_STATIC)

#define MAY_BE_ARRAY_SHIFT          (IS_REFERENCE)

#define MAY_BE_ARRAY_OF_NULL		(MAY_BE_NULL     << MAY_BE_ARRAY_SHIFT)
#define MAY_BE_ARRAY_OF_FALSE		(MAY_BE_FALSE    << MAY_BE_ARRAY_SHIFT)
#define MAY_BE_ARRAY_OF_TRUE		(MAY_BE_TRUE     << MAY_BE_ARRAY_SHIFT)
#define MAY_BE_ARRAY_OF_LONG		(MAY_BE_LONG     << MAY_BE_ARRAY_SHIFT)
#define MAY_BE_ARRAY_OF_DOUBLE		(MAY_BE_DOUBLE   << MAY_BE_ARRAY_SHIFT)
#define MAY_BE_ARRAY_OF_STRING		(MAY_BE_STRING   << MAY_BE_ARRAY_SHIFT)
#define MAY_BE_ARRAY_OF_ARRAY		(MAY_BE_ARRAY    << MAY_BE_ARRAY_SHIFT)
#define MAY_BE_ARRAY_OF_OBJECT		(MAY_BE_OBJECT   << MAY_BE_ARRAY_SHIFT)
#define MAY_BE_ARRAY_OF_RESOURCE	(MAY_BE_RESOURCE << MAY_BE_ARRAY_SHIFT)
#define MAY_BE_ARRAY_OF_ANY			(MAY_BE_ANY      << MAY_BE_ARRAY_SHIFT)
#define MAY_BE_ARRAY_OF_REF			(MAY_BE_REF      << MAY_BE_ARRAY_SHIFT)

#define MAY_BE_ARRAY_PACKED         (1<<21)
#define MAY_BE_ARRAY_NUMERIC_HASH   (1<<22) /* hash with numeric keys */
#define MAY_BE_ARRAY_STRING_HASH    (1<<23) /* hash with string keys */
#define MAY_BE_ARRAY_EMPTY          (1<<29)

#define MAY_BE_ARRAY_KEY_LONG       (MAY_BE_ARRAY_PACKED | MAY_BE_ARRAY_NUMERIC_HASH)
#define MAY_BE_ARRAY_KEY_STRING     MAY_BE_ARRAY_STRING_HASH
#define MAY_BE_ARRAY_KEY_ANY        (MAY_BE_ARRAY_KEY_LONG | MAY_BE_ARRAY_KEY_STRING | MAY_BE_ARRAY_EMPTY)

#define MAY_BE_PACKED(t)            ((t) & MAY_BE_ARRAY_PACKED)
#define MAY_BE_HASH(t)              ((t) & (MAY_BE_ARRAY_NUMERIC_HASH | MAY_BE_ARRAY_KEY_STRING))
#define MAY_BE_PACKED_ONLY(t)       (((t) & MAY_BE_ARRAY_KEY_ANY) == MAY_BE_ARRAY_PACKED)
#define MAY_BE_HASH_ONLY(t)         (MAY_BE_HASH(t) && !((t) & (MAY_BE_ARRAY_PACKED|MAY_BE_ARRAY_EMPTY)))
#define MAY_BE_EMPTY_ONLY(t)        (((t) & MAY_BE_ARRAY_KEY_ANY) == MAY_BE_ARRAY_EMPTY)

#define MAY_BE_CLASS                (1<<24)
#define MAY_BE_INDIRECT             (1<<25)

#define MAY_BE_RC1                  (1<<30) /* may be non-reference with refcount == 1 */
#define MAY_BE_RCN                  (1u<<31) /* may be non-reference with refcount > 1  */


#define MAY_BE_ANY_ARRAY \
	(MAY_BE_ARRAY|MAY_BE_ARRAY_KEY_ANY|MAY_BE_ARRAY_OF_ANY|MAY_BE_ARRAY_OF_REF)

#endif /* ZEND_TYPE_INFO_H */
Zend/zend_errors.h000064400000004560151730543210010157 0ustar00/*
   +----------------------------------------------------------------------+
   | Zend Engine                                                          |
   +----------------------------------------------------------------------+
   | Copyright (c) Zend Technologies Ltd. (http://www.zend.com)           |
   +----------------------------------------------------------------------+
   | This source file is subject to version 2.00 of the Zend license,     |
   | that is bundled with this package in the file LICENSE, and is        |
   | available through the world-wide-web at the following url:           |
   | http://www.zend.com/license/2_00.txt.                                |
   | If you did not receive a copy of the Zend license and are unable to  |
   | obtain it through the world-wide-web, please send a note to          |
   | license@zend.com so we can mail you a copy immediately.              |
   +----------------------------------------------------------------------+
   | Authors: Andi Gutmans <andi@php.net>                                 |
   |          Zeev Suraski <zeev@php.net>                                 |
   +----------------------------------------------------------------------+
*/

#ifndef ZEND_ERRORS_H
#define ZEND_ERRORS_H

#define E_ERROR				(1<<0L)
#define E_WARNING			(1<<1L)
#define E_PARSE				(1<<2L)
#define E_NOTICE			(1<<3L)
#define E_CORE_ERROR		(1<<4L)
#define E_CORE_WARNING		(1<<5L)
#define E_COMPILE_ERROR		(1<<6L)
#define E_COMPILE_WARNING	(1<<7L)
#define E_USER_ERROR		(1<<8L)
#define E_USER_WARNING		(1<<9L)
#define E_USER_NOTICE		(1<<10L)
// TODO: Remove in PHP 9.0
#define E_STRICT			(1<<11L)
#define E_RECOVERABLE_ERROR	(1<<12L)
#define E_DEPRECATED		(1<<13L)
#define E_USER_DEPRECATED	(1<<14L)

/* Indicates that this usually fatal error should not result in a bailout */
#define E_DONT_BAIL			(1<<15L)

#define E_ALL (E_ERROR | E_WARNING | E_PARSE | E_NOTICE | E_CORE_ERROR | E_CORE_WARNING | E_COMPILE_ERROR | E_COMPILE_WARNING | E_USER_ERROR | E_USER_WARNING | E_USER_NOTICE | E_RECOVERABLE_ERROR | E_DEPRECATED | E_USER_DEPRECATED)
#define E_CORE (E_CORE_ERROR | E_CORE_WARNING)

/* Fatal errors that are ignored by the silence operator */
#define E_FATAL_ERRORS (E_ERROR | E_CORE_ERROR | E_COMPILE_ERROR | E_USER_ERROR | E_RECOVERABLE_ERROR | E_PARSE)

#define E_HAS_ONLY_FATAL_ERRORS(mask) !((mask) & ~E_FATAL_ERRORS)

#endif /* ZEND_ERRORS_H */
Zend/zend_ast.h000064400000035000151730543210007423 0ustar00/*
   +----------------------------------------------------------------------+
   | Zend Engine                                                          |
   +----------------------------------------------------------------------+
   | Copyright (c) Zend Technologies Ltd. (http://www.zend.com)           |
   +----------------------------------------------------------------------+
   | This source file is subject to version 2.00 of the Zend license,     |
   | that is bundled with this package in the file LICENSE, and is        |
   | available through the world-wide-web at the following url:           |
   | http://www.zend.com/license/2_00.txt.                                |
   | If you did not receive a copy of the Zend license and are unable to  |
   | obtain it through the world-wide-web, please send a note to          |
   | license@zend.com so we can mail you a copy immediately.              |
   +----------------------------------------------------------------------+
   | Authors: Bob Weinand <bwoebi@php.net>                                |
   |          Dmitry Stogov <dmitry@php.net>                              |
   |          Nikita Popov <nikic@php.net>                                |
   +----------------------------------------------------------------------+
*/

#ifndef ZEND_AST_H
#define ZEND_AST_H

#include "zend_types.h"
#include "zend_map_ptr.h"

#ifndef ZEND_AST_SPEC
# define ZEND_AST_SPEC 1
#endif

#define ZEND_AST_SPECIAL_SHIFT      6
#define ZEND_AST_IS_LIST_SHIFT      7
#define ZEND_AST_NUM_CHILDREN_SHIFT 8

enum _zend_ast_kind {
	/* special nodes */
	ZEND_AST_ZVAL = 1 << ZEND_AST_SPECIAL_SHIFT,
	ZEND_AST_CONSTANT,
	ZEND_AST_OP_ARRAY,
	ZEND_AST_ZNODE,

	/* declaration nodes */
	ZEND_AST_FUNC_DECL,
	ZEND_AST_CLOSURE,
	ZEND_AST_METHOD,
	ZEND_AST_CLASS,
	ZEND_AST_ARROW_FUNC,
	ZEND_AST_PROPERTY_HOOK,

	/* list nodes */
	ZEND_AST_ARG_LIST = 1 << ZEND_AST_IS_LIST_SHIFT,
	ZEND_AST_ARRAY,
	ZEND_AST_ENCAPS_LIST,
	ZEND_AST_EXPR_LIST,
	ZEND_AST_STMT_LIST,
	ZEND_AST_IF,
	ZEND_AST_SWITCH_LIST,
	ZEND_AST_CATCH_LIST,
	ZEND_AST_PARAM_LIST,
	ZEND_AST_CLOSURE_USES,
	ZEND_AST_PROP_DECL,
	ZEND_AST_CONST_DECL,
	ZEND_AST_CLASS_CONST_DECL,
	ZEND_AST_NAME_LIST,
	ZEND_AST_TRAIT_ADAPTATIONS,
	ZEND_AST_USE,
	ZEND_AST_TYPE_UNION,
	ZEND_AST_TYPE_INTERSECTION,
	ZEND_AST_ATTRIBUTE_LIST,
	ZEND_AST_ATTRIBUTE_GROUP,
	ZEND_AST_MATCH_ARM_LIST,
	ZEND_AST_MODIFIER_LIST,

	/* 0 child nodes */
	ZEND_AST_MAGIC_CONST = 0 << ZEND_AST_NUM_CHILDREN_SHIFT,
	ZEND_AST_TYPE,
	ZEND_AST_CONSTANT_CLASS,
	ZEND_AST_CALLABLE_CONVERT,

	/* 1 child node */
	ZEND_AST_VAR = 1 << ZEND_AST_NUM_CHILDREN_SHIFT,
	ZEND_AST_CONST,
	ZEND_AST_UNPACK,
	ZEND_AST_UNARY_PLUS,
	ZEND_AST_UNARY_MINUS,
	ZEND_AST_CAST,
	ZEND_AST_CAST_VOID,
	ZEND_AST_EMPTY,
	ZEND_AST_ISSET,
	ZEND_AST_SILENCE,
	ZEND_AST_SHELL_EXEC,
	ZEND_AST_PRINT,
	ZEND_AST_INCLUDE_OR_EVAL,
	ZEND_AST_UNARY_OP,
	ZEND_AST_PRE_INC,
	ZEND_AST_PRE_DEC,
	ZEND_AST_POST_INC,
	ZEND_AST_POST_DEC,
	ZEND_AST_YIELD_FROM,
	ZEND_AST_CLASS_NAME,

	ZEND_AST_GLOBAL,
	ZEND_AST_UNSET,
	ZEND_AST_RETURN,
	ZEND_AST_LABEL,
	ZEND_AST_REF,
	ZEND_AST_HALT_COMPILER,
	ZEND_AST_ECHO,
	ZEND_AST_THROW,
	ZEND_AST_GOTO,
	ZEND_AST_BREAK,
	ZEND_AST_CONTINUE,
	ZEND_AST_PROPERTY_HOOK_SHORT_BODY,

	/* 2 child nodes */
	ZEND_AST_DIM = 2 << ZEND_AST_NUM_CHILDREN_SHIFT,
	ZEND_AST_PROP,
	ZEND_AST_NULLSAFE_PROP,
	ZEND_AST_STATIC_PROP,
	ZEND_AST_CALL,
	ZEND_AST_CLASS_CONST,
	ZEND_AST_ASSIGN,
	ZEND_AST_ASSIGN_REF,
	ZEND_AST_ASSIGN_OP,
	ZEND_AST_BINARY_OP,
	ZEND_AST_GREATER,
	ZEND_AST_GREATER_EQUAL,
	ZEND_AST_AND,
	ZEND_AST_OR,
	ZEND_AST_ARRAY_ELEM,
	ZEND_AST_NEW,
	ZEND_AST_INSTANCEOF,
	ZEND_AST_YIELD,
	ZEND_AST_COALESCE,
	ZEND_AST_ASSIGN_COALESCE,

	ZEND_AST_STATIC,
	ZEND_AST_WHILE,
	ZEND_AST_DO_WHILE,
	ZEND_AST_IF_ELEM,
	ZEND_AST_SWITCH,
	ZEND_AST_SWITCH_CASE,
	ZEND_AST_DECLARE,
	ZEND_AST_USE_TRAIT,
	ZEND_AST_TRAIT_PRECEDENCE,
	ZEND_AST_METHOD_REFERENCE,
	ZEND_AST_NAMESPACE,
	ZEND_AST_USE_ELEM,
	ZEND_AST_TRAIT_ALIAS,
	ZEND_AST_GROUP_USE,
	ZEND_AST_ATTRIBUTE,
	ZEND_AST_MATCH,
	ZEND_AST_MATCH_ARM,
	ZEND_AST_NAMED_ARG,
	ZEND_AST_PARENT_PROPERTY_HOOK_CALL,
	ZEND_AST_PIPE,

	/* 3 child nodes */
	ZEND_AST_METHOD_CALL = 3 << ZEND_AST_NUM_CHILDREN_SHIFT,
	ZEND_AST_NULLSAFE_METHOD_CALL,
	ZEND_AST_STATIC_CALL,
	ZEND_AST_CONDITIONAL,

	ZEND_AST_TRY,
	ZEND_AST_CATCH,
	ZEND_AST_PROP_GROUP,
	ZEND_AST_CONST_ELEM,
	ZEND_AST_CLASS_CONST_GROUP,

	// Pseudo node for initializing enums
	ZEND_AST_CONST_ENUM_INIT,

	/* 4 child nodes */
	ZEND_AST_FOR = 4 << ZEND_AST_NUM_CHILDREN_SHIFT,
	ZEND_AST_FOREACH,
	ZEND_AST_ENUM_CASE,
	ZEND_AST_PROP_ELEM,

	/* 5 child nodes */

	/* 6 child nodes */
	ZEND_AST_PARAM = 6 << ZEND_AST_NUM_CHILDREN_SHIFT,
};

typedef uint16_t zend_ast_kind;
typedef uint16_t zend_ast_attr;

struct _zend_ast {
	zend_ast_kind kind; /* Type of the node (ZEND_AST_* enum constant) */
	zend_ast_attr attr; /* Additional attribute, use depending on node type */
	uint32_t lineno;    /* Line number */
	zend_ast *child[1]; /* Array of children (using struct hack) */
};

/* Same as zend_ast, but with children count, which is updated dynamically */
typedef struct _zend_ast_list {
	zend_ast_kind kind;
	zend_ast_attr attr;
	uint32_t lineno;
	uint32_t children;
	zend_ast *child[1];
} zend_ast_list;

/* Lineno is stored in val.u2.lineno */
typedef struct _zend_ast_zval {
	zend_ast_kind kind;
	zend_ast_attr attr;
	zval val;
} zend_ast_zval;

typedef struct _zend_op_array zend_op_array;

typedef struct _zend_ast_op_array {
	zend_ast_kind kind;
	zend_ast_attr attr;
	uint32_t lineno;
	zend_op_array *op_array;
} zend_ast_op_array;

/* Separate structure for function and class declaration, as they need extra information. */
typedef struct _zend_ast_decl {
	zend_ast_kind kind;
	zend_ast_attr attr;
	uint32_t start_lineno;
	uint32_t end_lineno;
	uint32_t flags;
	zend_string *doc_comment;
	zend_string *name;
	zend_ast *child[5];
} zend_ast_decl;

typedef struct _zend_ast_fcc {
	zend_ast_kind kind; /* Type of the node (ZEND_AST_* enum constant) */
	zend_ast_attr attr; /* Additional attribute, use depending on node type */
	uint32_t lineno;    /* Line number */
	ZEND_MAP_PTR_DEF(zend_function *, fptr);
} zend_ast_fcc;

typedef void (*zend_ast_process_t)(zend_ast *ast);
extern ZEND_API zend_ast_process_t zend_ast_process;

ZEND_API zend_ast * ZEND_FASTCALL zend_ast_create_zval_with_lineno(const zval *zv, uint32_t lineno);
ZEND_API zend_ast * ZEND_FASTCALL zend_ast_create_zval_ex(const zval *zv, zend_ast_attr attr);
ZEND_API zend_ast * ZEND_FASTCALL zend_ast_create_zval(const zval *zv);
ZEND_API zend_ast * ZEND_FASTCALL zend_ast_create_zval_from_str(zend_string *str);
ZEND_API zend_ast * ZEND_FASTCALL zend_ast_create_zval_from_long(zend_long lval);

ZEND_API zend_ast * ZEND_FASTCALL zend_ast_create_constant(zend_string *name, zend_ast_attr attr);
ZEND_API zend_ast * ZEND_FASTCALL zend_ast_create_class_const_or_name(zend_ast *class_name, zend_ast *name);

ZEND_API zend_ast * ZEND_FASTCALL zend_ast_create_op_array(zend_op_array *op_array);

#if ZEND_AST_SPEC
# define ZEND_AST_SPEC_CALL(name, ...) \
	ZEND_EXPAND_VA(ZEND_AST_SPEC_CALL_(name, __VA_ARGS__, _n, _5, _4, _3, _2, _1, _0)(__VA_ARGS__))
# define ZEND_AST_SPEC_CALL_(name, _, _6, _5, _4, _3, _2, _1, suffix, ...) \
	name ## suffix
# define ZEND_AST_SPEC_CALL_EX(name, ...) \
	ZEND_EXPAND_VA(ZEND_AST_SPEC_CALL_EX_(name, __VA_ARGS__, _n, _5, _4, _3, _2, _1, _0)(__VA_ARGS__))
# define ZEND_AST_SPEC_CALL_EX_(name, _, _7, _6, _5, _4, _3, _2, _1, suffix, ...) \
	name ## suffix

ZEND_API zend_ast * ZEND_FASTCALL zend_ast_create_0(zend_ast_kind kind);
ZEND_API zend_ast * ZEND_FASTCALL zend_ast_create_1(zend_ast_kind kind, zend_ast *child);
ZEND_API zend_ast * ZEND_FASTCALL zend_ast_create_2(zend_ast_kind kind, zend_ast *child1, zend_ast *child2);
ZEND_API zend_ast * ZEND_FASTCALL zend_ast_create_3(zend_ast_kind kind, zend_ast *child1, zend_ast *child2, zend_ast *child3);
ZEND_API zend_ast * ZEND_FASTCALL zend_ast_create_4(zend_ast_kind kind, zend_ast *child1, zend_ast *child2, zend_ast *child3, zend_ast *child4);
ZEND_API zend_ast * ZEND_FASTCALL zend_ast_create_5(zend_ast_kind kind, zend_ast *child1, zend_ast *child2, zend_ast *child3, zend_ast *child4, zend_ast *child5);

ZEND_API zend_ast * ZEND_FASTCALL zend_ast_create_va(zend_ast_kind kind, zend_ast_attr attr, va_list *va);
/* Need to use unsigned args to avoid va promotion UB. */
ZEND_API zend_ast * zend_ast_create_n(unsigned kind, ...);
ZEND_API zend_ast * zend_ast_create_ex_n(zend_ast_kind kind, unsigned attr, ...);

static zend_always_inline zend_ast * zend_ast_create_ex_0(zend_ast_kind kind, zend_ast_attr attr) {
	zend_ast *ast = zend_ast_create_0(kind);
	ast->attr = attr;
	return ast;
}
static zend_always_inline zend_ast * zend_ast_create_ex_1(zend_ast_kind kind, zend_ast_attr attr, zend_ast *child) {
	zend_ast *ast = zend_ast_create_1(kind, child);
	ast->attr = attr;
	return ast;
}
static zend_always_inline zend_ast * zend_ast_create_ex_2(zend_ast_kind kind, zend_ast_attr attr, zend_ast *child1, zend_ast *child2) {
	zend_ast *ast = zend_ast_create_2(kind, child1, child2);
	ast->attr = attr;
	return ast;
}
static zend_always_inline zend_ast * zend_ast_create_ex_3(zend_ast_kind kind, zend_ast_attr attr, zend_ast *child1, zend_ast *child2, zend_ast *child3) {
	zend_ast *ast = zend_ast_create_3(kind, child1, child2, child3);
	ast->attr = attr;
	return ast;
}
static zend_always_inline zend_ast * zend_ast_create_ex_4(zend_ast_kind kind, zend_ast_attr attr, zend_ast *child1, zend_ast *child2, zend_ast *child3, zend_ast *child4) {
	zend_ast *ast = zend_ast_create_4(kind, child1, child2, child3, child4);
	ast->attr = attr;
	return ast;
}
static zend_always_inline zend_ast * zend_ast_create_ex_5(zend_ast_kind kind, zend_ast_attr attr, zend_ast *child1, zend_ast *child2, zend_ast *child3, zend_ast *child4, zend_ast *child5) {
	zend_ast *ast = zend_ast_create_5(kind, child1, child2, child3, child4, child5);
	ast->attr = attr;
	return ast;
}

ZEND_API zend_ast * ZEND_FASTCALL zend_ast_create_list_0(zend_ast_kind kind);
ZEND_API zend_ast * ZEND_FASTCALL zend_ast_create_list_1(zend_ast_kind kind, zend_ast *child);
ZEND_API zend_ast * ZEND_FASTCALL zend_ast_create_list_2(zend_ast_kind kind, zend_ast *child1, zend_ast *child2);

# define zend_ast_create(...) \
	ZEND_AST_SPEC_CALL(zend_ast_create, __VA_ARGS__)
# define zend_ast_create_ex(...) \
	ZEND_AST_SPEC_CALL_EX(zend_ast_create_ex, __VA_ARGS__)
# define zend_ast_create_list(init_children, ...) \
	ZEND_AST_SPEC_CALL(zend_ast_create_list, __VA_ARGS__)

#else
ZEND_API zend_ast *zend_ast_create(zend_ast_kind kind, ...);
ZEND_API zend_ast *zend_ast_create_ex(zend_ast_kind kind, zend_ast_attr attr, ...);
ZEND_API zend_ast *zend_ast_create_list(uint32_t init_children, zend_ast_kind kind, ...);
#endif

ZEND_ATTRIBUTE_NODISCARD ZEND_API zend_ast * ZEND_FASTCALL zend_ast_list_add(zend_ast *list, zend_ast *op);

ZEND_API zend_ast *zend_ast_create_decl(
	zend_ast_kind kind, uint32_t flags, uint32_t start_lineno, zend_string *doc_comment,
	zend_string *name, zend_ast *child0, zend_ast *child1, zend_ast *child2, zend_ast *child3, zend_ast *child4
);

ZEND_API zend_ast * ZEND_FASTCALL zend_ast_create_fcc(void);

typedef struct {
	bool had_side_effects;
} zend_ast_evaluate_ctx;

ZEND_API zend_result ZEND_FASTCALL zend_ast_evaluate(zval *result, zend_ast *ast, zend_class_entry *scope);
ZEND_API zend_result ZEND_FASTCALL zend_ast_evaluate_ex(zval *result, zend_ast *ast, zend_class_entry *scope, bool *short_circuited_ptr, zend_ast_evaluate_ctx *ctx);
ZEND_API zend_string *zend_ast_export(const char *prefix, zend_ast *ast, const char *suffix);

ZEND_API zend_ast_ref * ZEND_FASTCALL zend_ast_copy(zend_ast *ast);
ZEND_API void ZEND_FASTCALL zend_ast_destroy(zend_ast *ast);
ZEND_API void ZEND_FASTCALL zend_ast_ref_destroy(zend_ast_ref *ast);

typedef void (*zend_ast_apply_func)(zend_ast **ast_ptr, void *context);
ZEND_API void zend_ast_apply(zend_ast *ast, zend_ast_apply_func fn, void *context);

static zend_always_inline size_t zend_ast_size(uint32_t children) {
	return XtOffsetOf(zend_ast, child) + (sizeof(zend_ast *) * children);
}

static zend_always_inline bool zend_ast_is_special(const zend_ast *ast) {
	return (ast->kind >> ZEND_AST_SPECIAL_SHIFT) & 1;
}

static zend_always_inline bool zend_ast_is_decl(const zend_ast *ast) {
	return zend_ast_is_special(ast) && ast->kind >= ZEND_AST_FUNC_DECL;
}

static zend_always_inline bool zend_ast_is_list(const zend_ast *ast) {
	return (ast->kind >> ZEND_AST_IS_LIST_SHIFT) & 1;
}
static zend_always_inline zend_ast_list *zend_ast_get_list(zend_ast *ast) {
	ZEND_ASSERT(zend_ast_is_list(ast));
	return (zend_ast_list *) ast;
}

static zend_always_inline zval *zend_ast_get_zval(zend_ast *ast) {
	ZEND_ASSERT(ast->kind == ZEND_AST_ZVAL);
	return &((zend_ast_zval *) ast)->val;
}
static zend_always_inline zend_string *zend_ast_get_str(zend_ast *ast) {
	const zval *zv = zend_ast_get_zval(ast);
	ZEND_ASSERT(Z_TYPE_P(zv) == IS_STRING);
	return Z_STR_P(zv);
}

static zend_always_inline zend_ast_op_array *zend_ast_get_op_array(zend_ast *ast) {
	ZEND_ASSERT(ast->kind == ZEND_AST_OP_ARRAY);
	return (zend_ast_op_array *) ast;
}

static zend_always_inline zend_string *zend_ast_get_constant_name(zend_ast *ast) {
	ZEND_ASSERT(ast->kind == ZEND_AST_CONSTANT);
	ZEND_ASSERT(Z_TYPE(((zend_ast_zval *) ast)->val) == IS_STRING);
	return Z_STR(((zend_ast_zval *) ast)->val);
}

static zend_always_inline uint32_t zend_ast_get_num_children(const zend_ast *ast) {
	ZEND_ASSERT(!zend_ast_is_list(ast));
	ZEND_ASSERT(!zend_ast_is_special(ast));

	return ast->kind >> ZEND_AST_NUM_CHILDREN_SHIFT;
}
static zend_always_inline uint32_t zend_ast_get_lineno(zend_ast *ast) {
	if (ast->kind == ZEND_AST_ZVAL) {
		const zval *zv = zend_ast_get_zval(ast);
		return Z_LINENO_P(zv);
	} else if (ast->kind == ZEND_AST_CONSTANT) {
		const zval *zv = &((const zend_ast_zval *) ast)->val;
		return Z_LINENO_P(zv);
	} else {
		return ast->lineno;
	}
}

static zend_always_inline zend_ast *zend_ast_create_binary_op(uint32_t opcode, zend_ast *op0, zend_ast *op1) {
	return zend_ast_create_ex(ZEND_AST_BINARY_OP, opcode, op0, op1);
}

zend_ast *zend_ast_create_concat_op(zend_ast *op0, zend_ast *op1);

static zend_always_inline zend_ast *zend_ast_create_assign_op(uint32_t opcode, zend_ast *op0, zend_ast *op1) {
	return zend_ast_create_ex(ZEND_AST_ASSIGN_OP, opcode, op0, op1);
}
static zend_always_inline zend_ast *zend_ast_create_cast(uint32_t type, zend_ast *op0) {
	return zend_ast_create_ex(ZEND_AST_CAST, type, op0);
}
static zend_always_inline zend_ast *zend_ast_list_rtrim(zend_ast *ast) {
	zend_ast_list *list = zend_ast_get_list(ast);
	if (list->children && list->child[list->children - 1] == NULL) {
		list->children--;
	}
	return ast;
}

zend_ast * ZEND_FASTCALL zend_ast_with_attributes(zend_ast *ast, zend_ast *attr);

#endif
Zend/zend_multibyte.h000064400000011522151730543210010655 0ustar00/*
   +----------------------------------------------------------------------+
   | Zend Engine                                                          |
   +----------------------------------------------------------------------+
   | Copyright (c) Zend Technologies Ltd. (http://www.zend.com)           |
   +----------------------------------------------------------------------+
   | This source file is subject to version 2.00 of the Zend license,     |
   | that is bundled with this package in the file LICENSE, and is        |
   | available through the world-wide-web at                              |
   | http://www.zend.com/license/2_00.txt.                                |
   | If you did not receive a copy of the Zend license and are unable to  |
   | obtain it through the world-wide-web, please send a note to          |
   | license@zend.com so we can mail you a copy immediately.              |
   +----------------------------------------------------------------------+
   | Authors: Masaki Fujimoto <fujimoto@php.net>                          |
   |          Rui Hirokawa <hirokawa@php.net>                             |
   +----------------------------------------------------------------------+
*/

#ifndef ZEND_MULTIBYTE_H
#define ZEND_MULTIBYTE_H

#include "zend_types.h"

typedef struct _zend_encoding zend_encoding;

typedef size_t (*zend_encoding_filter)(unsigned char **str, size_t *str_length, const unsigned char *buf, size_t length);

typedef const zend_encoding* (*zend_encoding_fetcher)(const char *encoding_name);
typedef const char* (*zend_encoding_name_getter)(const zend_encoding *encoding);
typedef bool (*zend_encoding_lexer_compatibility_checker)(const zend_encoding *encoding);
typedef const zend_encoding *(*zend_encoding_detector)(const unsigned char *string, size_t length, const zend_encoding **list, size_t list_size);
typedef size_t (*zend_encoding_converter)(unsigned char **to, size_t *to_length, const unsigned char *from, size_t from_length, const zend_encoding *encoding_to, const zend_encoding *encoding_from);
typedef zend_result (*zend_encoding_list_parser)(const char *encoding_list, size_t encoding_list_len, const zend_encoding ***return_list, size_t *return_size, bool persistent);
typedef const zend_encoding *(*zend_encoding_internal_encoding_getter)(void);
typedef zend_result (*zend_encoding_internal_encoding_setter)(const zend_encoding *encoding);

typedef struct _zend_multibyte_functions {
    const char *provider_name;
    zend_encoding_fetcher encoding_fetcher;
    zend_encoding_name_getter encoding_name_getter;
    zend_encoding_lexer_compatibility_checker lexer_compatibility_checker;
    zend_encoding_detector encoding_detector;
    zend_encoding_converter encoding_converter;
    zend_encoding_list_parser encoding_list_parser;
    zend_encoding_internal_encoding_getter internal_encoding_getter;
    zend_encoding_internal_encoding_setter internal_encoding_setter;
} zend_multibyte_functions;

/*
 * zend multibyte APIs
 */
BEGIN_EXTERN_C()

ZEND_API extern const zend_encoding *zend_multibyte_encoding_utf32be;
ZEND_API extern const zend_encoding *zend_multibyte_encoding_utf32le;
ZEND_API extern const zend_encoding *zend_multibyte_encoding_utf16be;
ZEND_API extern const zend_encoding *zend_multibyte_encoding_utf16le;
ZEND_API extern const zend_encoding *zend_multibyte_encoding_utf8;

/* multibyte utility functions */
ZEND_API zend_result zend_multibyte_set_functions(const zend_multibyte_functions *functions);
ZEND_API void zend_multibyte_restore_functions(void);
ZEND_API const zend_multibyte_functions *zend_multibyte_get_functions(void);

ZEND_API const zend_encoding *zend_multibyte_fetch_encoding(const char *name);
ZEND_API const char *zend_multibyte_get_encoding_name(const zend_encoding *encoding);
ZEND_API int zend_multibyte_check_lexer_compatibility(const zend_encoding *encoding);
ZEND_API const zend_encoding *zend_multibyte_encoding_detector(const unsigned char *string, size_t length, const zend_encoding **list, size_t list_size);
ZEND_API size_t zend_multibyte_encoding_converter(unsigned char **to, size_t *to_length, const unsigned char *from, size_t from_length, const zend_encoding *encoding_to, const zend_encoding *encoding_from);
ZEND_API zend_result zend_multibyte_parse_encoding_list(const char *encoding_list, size_t encoding_list_len, const zend_encoding ***return_list, size_t *return_size, bool persistent);

ZEND_API const zend_encoding *zend_multibyte_get_internal_encoding(void);
ZEND_API const zend_encoding *zend_multibyte_get_script_encoding(void);
ZEND_API zend_result zend_multibyte_set_script_encoding(const zend_encoding **encoding_list, size_t encoding_list_size);
ZEND_API zend_result zend_multibyte_set_internal_encoding(const zend_encoding *encoding);
ZEND_API zend_result zend_multibyte_set_script_encoding_by_string(const char *new_value, size_t new_value_length);

END_EXTERN_C()

#endif /* ZEND_MULTIBYTE_H */
Zend/zend_llist.h000064400000007700151730543220007772 0ustar00/*
   +----------------------------------------------------------------------+
   | Zend Engine                                                          |
   +----------------------------------------------------------------------+
   | Copyright (c) Zend Technologies Ltd. (http://www.zend.com)           |
   +----------------------------------------------------------------------+
   | This source file is subject to version 2.00 of the Zend license,     |
   | that is bundled with this package in the file LICENSE, and is        |
   | available through the world-wide-web at the following url:           |
   | http://www.zend.com/license/2_00.txt.                                |
   | If you did not receive a copy of the Zend license and are unable to  |
   | obtain it through the world-wide-web, please send a note to          |
   | license@zend.com so we can mail you a copy immediately.              |
   +----------------------------------------------------------------------+
   | Authors: Andi Gutmans <andi@php.net>                                 |
   |          Zeev Suraski <zeev@php.net>                                 |
   +----------------------------------------------------------------------+
*/

#ifndef ZEND_LLIST_H
#define ZEND_LLIST_H

#include "zend_portability.h"

typedef struct _zend_llist_element {
	struct _zend_llist_element *next;
	struct _zend_llist_element *prev;
	char data[1]; /* Needs to always be last in the struct */
} zend_llist_element;

typedef void (*llist_dtor_func_t)(void *);
typedef int (*llist_compare_func_t)(const zend_llist_element **, const zend_llist_element **);
typedef void (*llist_apply_with_args_func_t)(void *data, int num_args, va_list args);
typedef void (*llist_apply_with_arg_func_t)(void *data, void *arg);
typedef void (*llist_apply_func_t)(void *);

typedef struct _zend_llist {
	zend_llist_element *head;
	zend_llist_element *tail;
	size_t count;
	size_t size;
	llist_dtor_func_t dtor;
	unsigned char persistent;
	zend_llist_element *traverse_ptr;
} zend_llist;

typedef zend_llist_element* zend_llist_position;

BEGIN_EXTERN_C()
ZEND_API void zend_llist_init(zend_llist *l, size_t size, llist_dtor_func_t dtor, unsigned char persistent);
ZEND_API void zend_llist_add_element(zend_llist *l, const void *element);
ZEND_API void zend_llist_prepend_element(zend_llist *l, const void *element);
ZEND_API void zend_llist_del_element(zend_llist *l, void *element, int (*compare)(void *element1, void *element2));
ZEND_API void zend_llist_destroy(zend_llist *l);
ZEND_API void zend_llist_clean(zend_llist *l);
ZEND_API void zend_llist_remove_tail(zend_llist *l);
ZEND_API void zend_llist_copy(zend_llist *dst, zend_llist *src);
ZEND_API void zend_llist_apply(zend_llist *l, llist_apply_func_t func);
ZEND_API void zend_llist_apply_with_del(zend_llist *l, int (*func)(void *data));
ZEND_API void zend_llist_apply_with_argument(zend_llist *l, llist_apply_with_arg_func_t func, void *arg);
ZEND_API void zend_llist_apply_with_arguments(zend_llist *l, llist_apply_with_args_func_t func, int num_args, ...);
ZEND_API size_t zend_llist_count(zend_llist *l);
ZEND_API void zend_llist_sort(zend_llist *l, llist_compare_func_t comp_func);

/* traversal */
ZEND_API void *zend_llist_get_first_ex(zend_llist *l, zend_llist_position *pos);
ZEND_API void *zend_llist_get_last_ex(zend_llist *l, zend_llist_position *pos);
ZEND_API void *zend_llist_get_next_ex(zend_llist *l, zend_llist_position *pos);
ZEND_API void *zend_llist_get_prev_ex(zend_llist *l, zend_llist_position *pos);

static zend_always_inline void *zend_llist_get_first(zend_llist *l)
{
	return zend_llist_get_first_ex(l, NULL);
}

static zend_always_inline void *zend_llist_get_last(zend_llist *l)
{
	return zend_llist_get_last_ex(l, NULL);
}

static zend_always_inline void *zend_llist_get_next(zend_llist *l)
{
	return zend_llist_get_next_ex(l, NULL);
}

static zend_always_inline void *zend_llist_get_prev(zend_llist *l)
{
	return zend_llist_get_prev_ex(l, NULL);
}

END_EXTERN_C()

#endif /* ZEND_LLIST_H */
Zend/zend_build.h000064400000003132151730543220007735 0ustar00/*
   +----------------------------------------------------------------------+
   | Zend Engine                                                          |
   +----------------------------------------------------------------------+
   | Copyright (c) Zend Technologies Ltd. (http://www.zend.com)           |
   +----------------------------------------------------------------------+
   | This source file is subject to version 2.00 of the Zend license,     |
   | that is bundled with this package in the file LICENSE, and is        |
   | available through the world-wide-web at the following url:           |
   | http://www.zend.com/license/2_00.txt.                                |
   | If you did not receive a copy of the Zend license and are unable to  |
   | obtain it through the world-wide-web, please send a note to          |
   | license@zend.com so we can mail you a copy immediately.              |
   +----------------------------------------------------------------------+
   | Authors: Stanislav Malyshev <stas@zend.com>                          |
   +----------------------------------------------------------------------+
*/

#ifndef ZEND_BUILD_H
#define ZEND_BUILD_H

#define ZEND_TOSTR_(x) #x
#define ZEND_TOSTR(x) ZEND_TOSTR_(x)

#ifdef ZTS
#define ZEND_BUILD_TS ",TS"
#else
#define ZEND_BUILD_TS ",NTS"
#endif

#if ZEND_DEBUG
#define ZEND_BUILD_DEBUG ",debug"
#else
#define ZEND_BUILD_DEBUG
#endif

#if defined(ZEND_WIN32) && defined(PHP_COMPILER_ID)
#define ZEND_BUILD_SYSTEM "," PHP_COMPILER_ID
#else
#define ZEND_BUILD_SYSTEM
#endif

/* for private applications */
#define ZEND_BUILD_EXTRA

#endif
Zend/zend_modules.h000064400000011332151730543220010307 0ustar00/*
   +----------------------------------------------------------------------+
   | Zend Engine                                                          |
   +----------------------------------------------------------------------+
   | Copyright (c) Zend Technologies Ltd. (http://www.zend.com)           |
   +----------------------------------------------------------------------+
   | This source file is subject to version 2.00 of the Zend license,     |
   | that is bundled with this package in the file LICENSE, and is        |
   | available through the world-wide-web at the following url:           |
   | http://www.zend.com/license/2_00.txt.                                |
   | If you did not receive a copy of the Zend license and are unable to  |
   | obtain it through the world-wide-web, please send a note to          |
   | license@zend.com so we can mail you a copy immediately.              |
   +----------------------------------------------------------------------+
   | Authors: Andi Gutmans <andi@php.net>                                 |
   |          Zeev Suraski <zeev@php.net>                                 |
   +----------------------------------------------------------------------+
*/

#ifndef MODULES_H
#define MODULES_H

#include "zend.h"
#include "zend_compile.h"
#include "zend_build.h"

#define INIT_FUNC_ARGS		int type, int module_number
#define INIT_FUNC_ARGS_PASSTHRU	type, module_number
#define SHUTDOWN_FUNC_ARGS	int type, int module_number
#define SHUTDOWN_FUNC_ARGS_PASSTHRU type, module_number
#define ZEND_MODULE_INFO_FUNC_ARGS zend_module_entry *zend_module
#define ZEND_MODULE_INFO_FUNC_ARGS_PASSTHRU zend_module

#define ZEND_MODULE_API_NO 20250925
#ifdef ZTS
#define USING_ZTS 1
#else
#define USING_ZTS 0
#endif

#define STANDARD_MODULE_HEADER_EX sizeof(zend_module_entry), ZEND_MODULE_API_NO, ZEND_DEBUG, USING_ZTS
#define STANDARD_MODULE_HEADER \
	STANDARD_MODULE_HEADER_EX, NULL, NULL
#define ZE2_STANDARD_MODULE_HEADER \
	STANDARD_MODULE_HEADER_EX, ini_entries, NULL

#define ZEND_MODULE_BUILD_ID "API" ZEND_TOSTR(ZEND_MODULE_API_NO) ZEND_BUILD_TS ZEND_BUILD_DEBUG ZEND_BUILD_SYSTEM ZEND_BUILD_EXTRA

#define STANDARD_MODULE_PROPERTIES_EX 0, 0, NULL, 0, ZEND_MODULE_BUILD_ID

#define NO_MODULE_GLOBALS 0, NULL, NULL, NULL

#ifdef ZTS
# define ZEND_MODULE_GLOBALS(module_name) sizeof(zend_##module_name##_globals), &module_name##_globals_id
#else
# define ZEND_MODULE_GLOBALS(module_name) sizeof(zend_##module_name##_globals), &module_name##_globals
#endif

#define STANDARD_MODULE_PROPERTIES \
	NO_MODULE_GLOBALS, NULL, STANDARD_MODULE_PROPERTIES_EX

#define NO_VERSION_YET NULL

#define MODULE_PERSISTENT 1
#define MODULE_TEMPORARY 2

struct _zend_ini_entry;
typedef struct _zend_module_entry zend_module_entry;
typedef struct _zend_module_dep zend_module_dep;

struct _zend_module_entry {
	unsigned short size;
	unsigned int zend_api;
	unsigned char zend_debug;
	unsigned char zts;
	const struct _zend_ini_entry *ini_entry;
	const struct _zend_module_dep *deps;
	const char *name;
	const struct _zend_function_entry *functions;
	zend_result (*module_startup_func)(INIT_FUNC_ARGS);
	zend_result (*module_shutdown_func)(SHUTDOWN_FUNC_ARGS);
	zend_result (*request_startup_func)(INIT_FUNC_ARGS);
	zend_result (*request_shutdown_func)(SHUTDOWN_FUNC_ARGS);
	void (*info_func)(ZEND_MODULE_INFO_FUNC_ARGS);
	const char *version;
	size_t globals_size;
#ifdef ZTS
	ts_rsrc_id* globals_id_ptr;
#else
	void* globals_ptr;
#endif
	void (*globals_ctor)(void *global);
	void (*globals_dtor)(void *global);
	zend_result (*post_deactivate_func)(void);
	int module_started;
	unsigned char type;
	void *handle;
	int module_number;
	const char *build_id;
};

#define MODULE_DEP_REQUIRED		1
#define MODULE_DEP_CONFLICTS	2
#define MODULE_DEP_OPTIONAL		3

#define ZEND_MOD_REQUIRED_EX(name, rel, ver)	{ name, rel, ver, MODULE_DEP_REQUIRED  },
#define ZEND_MOD_CONFLICTS_EX(name, rel, ver)	{ name, rel, ver, MODULE_DEP_CONFLICTS },
#define ZEND_MOD_OPTIONAL_EX(name, rel, ver)	{ name, rel, ver, MODULE_DEP_OPTIONAL  },

#define ZEND_MOD_REQUIRED(name)		ZEND_MOD_REQUIRED_EX(name, NULL, NULL)
#define ZEND_MOD_CONFLICTS(name)	ZEND_MOD_CONFLICTS_EX(name, NULL, NULL)
#define ZEND_MOD_OPTIONAL(name)		ZEND_MOD_OPTIONAL_EX(name, NULL, NULL)

#define ZEND_MOD_END { NULL, NULL, NULL, 0 }

struct _zend_module_dep {
	const char *name;		/* module name */
	const char *rel;		/* version relationship: NULL (exists), lt|le|eq|ge|gt (to given version) */
	const char *version;	/* version */
	unsigned char type;		/* dependency type */
};

BEGIN_EXTERN_C()
extern ZEND_API HashTable module_registry;

void module_destructor(zend_module_entry *module);
int module_registry_request_startup(zend_module_entry *module);
void module_registry_unload(const zend_module_entry *module);
END_EXTERN_C()

#endif
Zend/zend_exceptions.h000064400000010743151730543230011026 0ustar00/*
   +----------------------------------------------------------------------+
   | Zend Engine                                                          |
   +----------------------------------------------------------------------+
   | Copyright (c) Zend Technologies Ltd. (http://www.zend.com)           |
   +----------------------------------------------------------------------+
   | This source file is subject to version 2.00 of the Zend license,     |
   | that is bundled with this package in the file LICENSE, and is        |
   | available through the world-wide-web at the following url:           |
   | http://www.zend.com/license/2_00.txt.                                |
   | If you did not receive a copy of the Zend license and are unable to  |
   | obtain it through the world-wide-web, please send a note to          |
   | license@zend.com so we can mail you a copy immediately.              |
   +----------------------------------------------------------------------+
   | Authors: Andi Gutmans <andi@php.net>                                 |
   |          Marcus Boerger <helly@php.net>                              |
   |          Sterling Hughes <sterling@php.net>                          |
   |          Zeev Suraski <zeev@php.net>                                 |
   +----------------------------------------------------------------------+
*/

#ifndef ZEND_EXCEPTIONS_H
#define ZEND_EXCEPTIONS_H

#include "zend_types.h"

BEGIN_EXTERN_C()

extern ZEND_API zend_class_entry *zend_ce_throwable;
extern ZEND_API zend_class_entry *zend_ce_exception;
extern ZEND_API zend_class_entry *zend_ce_error_exception;
extern ZEND_API zend_class_entry *zend_ce_error;
extern ZEND_API zend_class_entry *zend_ce_compile_error;
extern ZEND_API zend_class_entry *zend_ce_parse_error;
extern ZEND_API zend_class_entry *zend_ce_type_error;
extern ZEND_API zend_class_entry *zend_ce_argument_count_error;
extern ZEND_API zend_class_entry *zend_ce_value_error;
extern ZEND_API zend_class_entry *zend_ce_arithmetic_error;
extern ZEND_API zend_class_entry *zend_ce_division_by_zero_error;
extern ZEND_API zend_class_entry *zend_ce_unhandled_match_error;
extern ZEND_API zend_class_entry *zend_ce_request_parse_body_exception;

ZEND_API void zend_exception_set_previous(zend_object *exception, zend_object *add_previous);
ZEND_API void zend_exception_save(void);
ZEND_API void zend_exception_restore(void);

ZEND_API ZEND_COLD void zend_throw_exception_internal(zend_object *exception);

void zend_register_default_exception(void);

ZEND_API zend_class_entry *zend_get_exception_base(const zend_object *object);

ZEND_API void zend_register_default_classes(void);

/* exception_ce   NULL, zend_ce_exception, zend_ce_error, or a derived class
 * message        NULL or the message of the exception */
ZEND_API ZEND_COLD zend_object *zend_throw_exception(zend_class_entry *exception_ce, const char *message, zend_long code);
ZEND_API ZEND_COLD zend_object *zend_throw_exception_ex(zend_class_entry *exception_ce, zend_long code, const char *format, ...) ZEND_ATTRIBUTE_FORMAT(printf, 3, 4);
ZEND_API ZEND_COLD void zend_throw_exception_object(zval *exception);
ZEND_API void zend_clear_exception(void);

ZEND_API zend_object *zend_throw_error_exception(zend_class_entry *exception_ce, zend_string *message, zend_long code, int severity);

extern ZEND_API void (*zend_throw_exception_hook)(zend_object *ex);

ZEND_API zend_result zend_update_exception_properties(zend_execute_data *execute_data, zval *return_value, zend_string *message, zend_long code, zval *previous);

/* show an exception using zend_error(severity,...), severity should be E_ERROR */
ZEND_API ZEND_COLD zend_result zend_exception_error(zend_object *exception, int severity);
ZEND_NORETURN void zend_exception_uncaught_error(const char *prefix, ...) ZEND_ATTRIBUTE_FORMAT(printf, 1, 2);
ZEND_API zend_string *zend_trace_to_string(const HashTable *trace, bool include_main);

ZEND_API ZEND_COLD zend_object *zend_create_unwind_exit(void);
ZEND_API ZEND_COLD zend_object *zend_create_graceful_exit(void);
ZEND_API ZEND_COLD void zend_throw_unwind_exit(void);
ZEND_API ZEND_COLD void zend_throw_graceful_exit(void);
ZEND_API bool zend_is_unwind_exit(const zend_object *ex);
ZEND_API bool zend_is_graceful_exit(const zend_object *ex);

#include "zend_globals.h"

static zend_always_inline void zend_rethrow_exception(zend_execute_data *execute_data)
{
	if (EX(opline)->opcode != ZEND_HANDLE_EXCEPTION) {
		EG(opline_before_exception) = EX(opline);
		EX(opline) = EG(exception_op);
	}
}

END_EXTERN_C()

#endif
Zend/zend_signal.h000064400000010011151730543230010106 0ustar00/*
  +----------------------------------------------------------------------+
  | Zend Signal Handling                                                 |
  +----------------------------------------------------------------------+
  | Copyright (c) The PHP Group                                          |
  +----------------------------------------------------------------------+
  | This source file is subject to version 3.01 of the PHP license,      |
  | that is bundled with this package in the file LICENSE, and is        |
  | available through the world-wide-web at the following url:           |
  | https://www.php.net/license/3_01.txt                                 |
  | If you did not receive a copy of the PHP license and are unable to   |
  | obtain it through the world-wide-web, please send a note to          |
  | license@php.net so we can mail you a copy immediately.               |
  +----------------------------------------------------------------------+
  | Authors: Lucas Nealan <lucas@php.net>                                |
  |          Arnaud Le Blanc <lbarnaud@php.net>                          |
  +----------------------------------------------------------------------+

 */

#ifndef ZEND_SIGNAL_H
#define ZEND_SIGNAL_H

#ifdef ZEND_SIGNALS

#include <signal.h>

#include "zend_portability.h"

#ifndef NSIG
#define NSIG 65
#endif

#ifndef ZEND_SIGNAL_QUEUE_SIZE
#define ZEND_SIGNAL_QUEUE_SIZE 64
#endif

/* Signal structs */
typedef struct _zend_signal_entry_t {
	int   flags;          /* sigaction style flags */
	void* handler;      /* signal handler or context */
} zend_signal_entry_t;

typedef struct _zend_signal_t {
	int signo;
	siginfo_t *siginfo;
	void* context;
} zend_signal_t;

typedef struct _zend_signal_queue_t {
	zend_signal_t zend_signal;
	struct _zend_signal_queue_t *next;
} zend_signal_queue_t;

/* Signal Globals */
typedef struct _zend_signal_globals_t {
	int depth;
	int blocked;            /* 1==TRUE, 0==FALSE */
	int running;            /* in signal handler execution */
	int active;             /* internal signal handling is enabled */
	bool check;        /* check for replaced handlers on shutdown */
	bool reset;        /* reset signal handlers on each request */
	zend_signal_entry_t handlers[NSIG];
	zend_signal_queue_t pstorage[ZEND_SIGNAL_QUEUE_SIZE], *phead, *ptail, *pavail; /* pending queue */
} zend_signal_globals_t;

# ifdef ZTS
#  define SIGG(v) ZEND_TSRMG_FAST(zend_signal_globals_offset, zend_signal_globals_t *, v)
BEGIN_EXTERN_C()
ZEND_API extern int zend_signal_globals_id;
ZEND_API extern size_t zend_signal_globals_offset;
END_EXTERN_C()
# else
#  define SIGG(v) (zend_signal_globals.v)
BEGIN_EXTERN_C()
ZEND_API extern zend_signal_globals_t zend_signal_globals;
END_EXTERN_C()
# endif /* not ZTS */

# ifdef ZTS
#  define ZEND_SIGNAL_BLOCK_INTERRUPTIONS() if (EXPECTED(zend_signal_globals_id)) { SIGG(depth)++; }
#  define ZEND_SIGNAL_UNBLOCK_INTERRUPTIONS() if (EXPECTED(zend_signal_globals_id) && UNEXPECTED(((SIGG(depth)--) == SIGG(blocked)))) { zend_signal_handler_unblock(); }
# else /* ZTS */
#  define ZEND_SIGNAL_BLOCK_INTERRUPTIONS()  SIGG(depth)++;
#  define ZEND_SIGNAL_UNBLOCK_INTERRUPTIONS() if (((SIGG(depth)--) == SIGG(blocked))) { zend_signal_handler_unblock(); }
# endif /* not ZTS */

ZEND_API void zend_signal_handler_unblock(void);
void zend_signal_activate(void);
void zend_signal_deactivate(void);
BEGIN_EXTERN_C()
ZEND_API void zend_signal_startup(void);
END_EXTERN_C()
void zend_signal_init(void);

ZEND_API void zend_signal(int signo, void (*handler)(int));
ZEND_API void zend_sigaction(int signo, const struct sigaction *act, struct sigaction *oldact);

#else /* ZEND_SIGNALS */

# define ZEND_SIGNAL_BLOCK_INTERRUPTIONS()
# define ZEND_SIGNAL_UNBLOCK_INTERRUPTIONS()

# define zend_signal_activate()
# define zend_signal_deactivate()
# define zend_signal_startup()
# define zend_signal_init()

# define zend_signal(signo, handler)           signal(signo, handler)
# define zend_sigaction(signo, act, oldact)    sigaction(signo, act, oldact)

#endif /* ZEND_SIGNALS */

#endif /* ZEND_SIGNAL_H */
Zend/zend_extensions.h000064400000014674151730543240011054 0ustar00/*
   +----------------------------------------------------------------------+
   | Zend Engine                                                          |
   +----------------------------------------------------------------------+
   | Copyright (c) Zend Technologies Ltd. (http://www.zend.com)           |
   +----------------------------------------------------------------------+
   | This source file is subject to version 2.00 of the Zend license,     |
   | that is bundled with this package in the file LICENSE, and is        |
   | available through the world-wide-web at the following url:           |
   | http://www.zend.com/license/2_00.txt.                                |
   | If you did not receive a copy of the Zend license and are unable to  |
   | obtain it through the world-wide-web, please send a note to          |
   | license@zend.com so we can mail you a copy immediately.              |
   +----------------------------------------------------------------------+
   | Authors: Andi Gutmans <andi@php.net>                                 |
   |          Zeev Suraski <zeev@php.net>                                 |
   +----------------------------------------------------------------------+
*/

#ifndef ZEND_EXTENSIONS_H
#define ZEND_EXTENSIONS_H

#include "zend_compile.h"
#include "zend_build.h"

/*
The constants below are derived from ext/opcache/ZendAccelerator.h

You can use the following macro to check the extension API version for compatibilities:

#define	ZEND_EXTENSION_API_NO_5_0_X	220040412
#define	ZEND_EXTENSION_API_NO_5_1_X	220051025
#define	ZEND_EXTENSION_API_NO_5_2_X	220060519
#define	ZEND_EXTENSION_API_NO_5_3_X	220090626
#define	ZEND_EXTENSION_API_NO_5_4_X	220100525
#define	ZEND_EXTENSION_API_NO_5_5_X	220121212
#define	ZEND_EXTENSION_API_NO_5_6_X	220131226
#define	ZEND_EXTENSION_API_NO_7_0_X	320151012

#if ZEND_EXTENSION_API_NO < ZEND_EXTENSION_API_NO_5_5_X
   // do something for php versions lower than 5.5.x
#endif
*/

/* The first number is the engine version and the rest is the date (YYYYMMDD).
 * This way engine 2/3 API no. is always greater than engine 1 API no..  */
#define ZEND_EXTENSION_API_NO	420250925

typedef struct _zend_extension_version_info {
	int zend_extension_api_no;
	const char *build_id;
} zend_extension_version_info;

#define ZEND_EXTENSION_BUILD_ID "API" ZEND_TOSTR(ZEND_EXTENSION_API_NO) ZEND_BUILD_TS ZEND_BUILD_DEBUG ZEND_BUILD_SYSTEM ZEND_BUILD_EXTRA

typedef struct _zend_extension zend_extension;

/* Typedef's for zend_extension function pointers */
typedef int (*startup_func_t)(zend_extension *extension);
typedef void (*shutdown_func_t)(zend_extension *extension);
typedef void (*activate_func_t)(void);
typedef void (*deactivate_func_t)(void);

typedef void (*message_handler_func_t)(int message, void *arg);

typedef void (*op_array_handler_func_t)(zend_op_array *op_array);

typedef void (*statement_handler_func_t)(zend_execute_data *frame);
typedef void (*fcall_begin_handler_func_t)(zend_execute_data *frame);
typedef void (*fcall_end_handler_func_t)(zend_execute_data *frame);

typedef void (*op_array_ctor_func_t)(zend_op_array *op_array);
typedef void (*op_array_dtor_func_t)(zend_op_array *op_array);
typedef size_t (*op_array_persist_calc_func_t)(zend_op_array *op_array);
typedef size_t (*op_array_persist_func_t)(zend_op_array *op_array, void *mem);

struct _zend_extension {
	const char *name;
	const char *version;
	const char *author;
	const char *URL;
	const char *copyright;

	startup_func_t startup;
	shutdown_func_t shutdown;
	activate_func_t activate;
	deactivate_func_t deactivate;

	message_handler_func_t message_handler;

	op_array_handler_func_t op_array_handler;

	statement_handler_func_t statement_handler;
	fcall_begin_handler_func_t fcall_begin_handler;
	fcall_end_handler_func_t fcall_end_handler;

	op_array_ctor_func_t op_array_ctor;
	op_array_dtor_func_t op_array_dtor;

	int (*api_no_check)(int api_no);
	int (*build_id_check)(const char* build_id);
	op_array_persist_calc_func_t op_array_persist_calc;
	op_array_persist_func_t op_array_persist;
	void *reserved5;
	void *reserved6;
	void *reserved7;
	void *reserved8;

	DL_HANDLE handle;
	int resource_number;
};

BEGIN_EXTERN_C()
extern ZEND_API int zend_op_array_extension_handles;

ZEND_API int zend_get_resource_handle(const char *module_name);
ZEND_API int zend_get_op_array_extension_handle(const char *module_name);
ZEND_API int zend_get_op_array_extension_handles(const char *module_name, int handles);
ZEND_API int zend_get_internal_function_extension_handle(const char *module_name);
ZEND_API int zend_get_internal_function_extension_handles(const char *module_name, int handles);
ZEND_API void zend_extension_dispatch_message(int message, void *arg);
END_EXTERN_C()

#define ZEND_EXTMSG_NEW_EXTENSION		1


#define ZEND_EXTENSION()	\
	ZEND_EXT_API zend_extension_version_info extension_version_info = { ZEND_EXTENSION_API_NO, ZEND_EXTENSION_BUILD_ID }

#define STANDARD_ZEND_EXTENSION_PROPERTIES       NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, -1
#define COMPAT_ZEND_EXTENSION_PROPERTIES         NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, -1
#define BUILD_COMPAT_ZEND_EXTENSION_PROPERTIES   NULL, NULL, NULL, NULL, NULL, NULL, NULL, -1


ZEND_API extern zend_llist zend_extensions;
ZEND_API extern uint32_t zend_extension_flags;

#define ZEND_EXTENSIONS_HAVE_OP_ARRAY_CTOR         (1<<0)
#define ZEND_EXTENSIONS_HAVE_OP_ARRAY_DTOR         (1<<1)
#define ZEND_EXTENSIONS_HAVE_OP_ARRAY_HANDLER      (1<<2)
#define ZEND_EXTENSIONS_HAVE_OP_ARRAY_PERSIST_CALC (1<<3)
#define ZEND_EXTENSIONS_HAVE_OP_ARRAY_PERSIST      (1<<4)

void zend_extension_dtor(zend_extension *extension);
ZEND_API void zend_append_version_info(const zend_extension *extension);
void zend_startup_extensions_mechanism(void);
void zend_startup_extensions(void);
void zend_shutdown_extensions(void);

ZEND_API size_t zend_internal_run_time_cache_reserved_size(void);
ZEND_API void zend_init_internal_run_time_cache(void);
ZEND_API void zend_reset_internal_run_time_cache(void);

BEGIN_EXTERN_C()
ZEND_API zend_result zend_load_extension(const char *path);
ZEND_API zend_result zend_load_extension_handle(DL_HANDLE handle, const char *path);
ZEND_API void zend_register_extension(zend_extension *new_extension, DL_HANDLE handle);
ZEND_API zend_extension *zend_get_extension(const char *extension_name);
ZEND_API size_t zend_extensions_op_array_persist_calc(zend_op_array *op_array);
ZEND_API size_t zend_extensions_op_array_persist(zend_op_array *op_array, void *mem);
END_EXTERN_C()

#endif /* ZEND_EXTENSIONS_H */
Zend/zend_language_parser.h000064400000014136151730543240012005 0ustar00/* A Bison parser, made by GNU Bison 3.0.4.  */

/* Bison interface for Yacc-like parsers in C

   Copyright (C) 1984, 1989-1990, 2000-2015 Free Software Foundation, Inc.

   This program is free software: you can redistribute it and/or modify
   it under the terms of the GNU General Public License as published by
   the Free Software Foundation, either version 3 of the License, or
   (at your option) any later version.

   This program is distributed in the hope that it will be useful,
   but WITHOUT ANY WARRANTY; without even the implied warranty of
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
   GNU General Public License for more details.

   You should have received a copy of the GNU General Public License
   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */

/* As a special exception, you may create a larger work that contains
   part or all of the Bison parser skeleton and distribute that work
   under terms of your choice, so long as that work isn't itself a
   parser generator using the skeleton or a modified version thereof
   as a parser skeleton.  Alternatively, if you modify or redistribute
   the parser skeleton itself, you may (at your option) remove this
   special exception, which will cause the skeleton and the resulting
   Bison output files to be licensed under the GNU General Public
   License without this special exception.

   This special exception was added by the Free Software Foundation in
   version 2.2 of Bison.  */

#ifndef YY_ZEND_BUILDDIR_BUILD_BUILD_PHP_SRC_PHP_8_5_4_ZEND_ZEND_LANGUAGE_PARSER_H_INCLUDED
# define YY_ZEND_BUILDDIR_BUILD_BUILD_PHP_SRC_PHP_8_5_4_ZEND_ZEND_LANGUAGE_PARSER_H_INCLUDED
/* Debug traces.  */
#ifndef ZENDDEBUG
# if defined YYDEBUG
#if YYDEBUG
#   define ZENDDEBUG 1
#  else
#   define ZENDDEBUG 0
#  endif
# else /* ! defined YYDEBUG */
#  define ZENDDEBUG 0
# endif /* ! defined YYDEBUG */
#endif  /* ! defined ZENDDEBUG */
#if ZENDDEBUG
extern int zenddebug;
#endif
/* "%code requires" blocks.  */
#line 41 "/builddir/build/BUILD/php-src-php-8.5.4/Zend/zend_language_parser.y" /* yacc.c:1909  */

#include "zend_compile.h"

#line 56 "/builddir/build/BUILD/php-src-php-8.5.4/Zend/zend_language_parser.h" /* yacc.c:1909  */

/* Token type.  */
#ifndef ZENDTOKENTYPE
# define ZENDTOKENTYPE
  enum zendtokentype
  {
    END = 0,
    T_THROW = 258,
    PREC_ARROW_FUNCTION = 259,
    T_INCLUDE = 260,
    T_INCLUDE_ONCE = 261,
    T_REQUIRE = 262,
    T_REQUIRE_ONCE = 263,
    T_LOGICAL_OR = 264,
    T_LOGICAL_XOR = 265,
    T_LOGICAL_AND = 266,
    T_PRINT = 267,
    T_YIELD = 268,
    T_DOUBLE_ARROW = 269,
    T_YIELD_FROM = 270,
    T_PLUS_EQUAL = 271,
    T_MINUS_EQUAL = 272,
    T_MUL_EQUAL = 273,
    T_DIV_EQUAL = 274,
    T_CONCAT_EQUAL = 275,
    T_MOD_EQUAL = 276,
    T_AND_EQUAL = 277,
    T_OR_EQUAL = 278,
    T_XOR_EQUAL = 279,
    T_SL_EQUAL = 280,
    T_SR_EQUAL = 281,
    T_POW_EQUAL = 282,
    T_COALESCE_EQUAL = 283,
    T_COALESCE = 284,
    T_BOOLEAN_OR = 285,
    T_BOOLEAN_AND = 286,
    T_AMPERSAND_NOT_FOLLOWED_BY_VAR_OR_VARARG = 287,
    T_AMPERSAND_FOLLOWED_BY_VAR_OR_VARARG = 288,
    T_IS_EQUAL = 289,
    T_IS_NOT_EQUAL = 290,
    T_IS_IDENTICAL = 291,
    T_IS_NOT_IDENTICAL = 292,
    T_SPACESHIP = 293,
    T_IS_SMALLER_OR_EQUAL = 294,
    T_IS_GREATER_OR_EQUAL = 295,
    T_PIPE = 296,
    T_SL = 297,
    T_SR = 298,
    T_INSTANCEOF = 299,
    T_INT_CAST = 300,
    T_DOUBLE_CAST = 301,
    T_STRING_CAST = 302,
    T_ARRAY_CAST = 303,
    T_OBJECT_CAST = 304,
    T_BOOL_CAST = 305,
    T_UNSET_CAST = 306,
    T_POW = 307,
    T_CLONE = 308,
    T_NOELSE = 309,
    T_ELSEIF = 310,
    T_ELSE = 311,
    T_LNUMBER = 312,
    T_DNUMBER = 313,
    T_STRING = 314,
    T_NAME_FULLY_QUALIFIED = 315,
    T_NAME_RELATIVE = 316,
    T_NAME_QUALIFIED = 317,
    T_VARIABLE = 318,
    T_INLINE_HTML = 319,
    T_ENCAPSED_AND_WHITESPACE = 320,
    T_CONSTANT_ENCAPSED_STRING = 321,
    T_STRING_VARNAME = 322,
    T_NUM_STRING = 323,
    T_EVAL = 324,
    T_NEW = 325,
    T_EXIT = 326,
    T_IF = 327,
    T_ENDIF = 328,
    T_ECHO = 329,
    T_DO = 330,
    T_WHILE = 331,
    T_ENDWHILE = 332,
    T_FOR = 333,
    T_ENDFOR = 334,
    T_FOREACH = 335,
    T_ENDFOREACH = 336,
    T_DECLARE = 337,
    T_ENDDECLARE = 338,
    T_AS = 339,
    T_SWITCH = 340,
    T_ENDSWITCH = 341,
    T_CASE = 342,
    T_DEFAULT = 343,
    T_MATCH = 344,
    T_BREAK = 345,
    T_CONTINUE = 346,
    T_GOTO = 347,
    T_FUNCTION = 348,
    T_FN = 349,
    T_CONST = 350,
    T_RETURN = 351,
    T_TRY = 352,
    T_CATCH = 353,
    T_FINALLY = 354,
    T_USE = 355,
    T_INSTEADOF = 356,
    T_GLOBAL = 357,
    T_STATIC = 358,
    T_ABSTRACT = 359,
    T_FINAL = 360,
    T_PRIVATE = 361,
    T_PROTECTED = 362,
    T_PUBLIC = 363,
    T_PRIVATE_SET = 364,
    T_PROTECTED_SET = 365,
    T_PUBLIC_SET = 366,
    T_READONLY = 367,
    T_VAR = 368,
    T_UNSET = 369,
    T_ISSET = 370,
    T_EMPTY = 371,
    T_HALT_COMPILER = 372,
    T_CLASS = 373,
    T_TRAIT = 374,
    T_INTERFACE = 375,
    T_ENUM = 376,
    T_EXTENDS = 377,
    T_IMPLEMENTS = 378,
    T_NAMESPACE = 379,
    T_LIST = 380,
    T_ARRAY = 381,
    T_CALLABLE = 382,
    T_LINE = 383,
    T_FILE = 384,
    T_DIR = 385,
    T_CLASS_C = 386,
    T_TRAIT_C = 387,
    T_METHOD_C = 388,
    T_FUNC_C = 389,
    T_PROPERTY_C = 390,
    T_NS_C = 391,
    T_ATTRIBUTE = 392,
    T_INC = 393,
    T_DEC = 394,
    T_VOID_CAST = 395,
    T_OBJECT_OPERATOR = 396,
    T_NULLSAFE_OBJECT_OPERATOR = 397,
    T_COMMENT = 398,
    T_DOC_COMMENT = 399,
    T_OPEN_TAG = 400,
    T_OPEN_TAG_WITH_ECHO = 401,
    T_CLOSE_TAG = 402,
    T_WHITESPACE = 403,
    T_START_HEREDOC = 404,
    T_END_HEREDOC = 405,
    T_DOLLAR_OPEN_CURLY_BRACES = 406,
    T_CURLY_OPEN = 407,
    T_PAAMAYIM_NEKUDOTAYIM = 408,
    T_NS_SEPARATOR = 409,
    T_ELLIPSIS = 410,
    T_BAD_CHARACTER = 411,
    T_ERROR = 412
  };
#endif

/* Value type.  */
#if ! defined ZENDSTYPE && ! defined ZENDSTYPE_IS_DECLARED
typedef zend_parser_stack_elem ZENDSTYPE;
# define ZENDSTYPE_IS_TRIVIAL 1
# define ZENDSTYPE_IS_DECLARED 1
#endif



ZEND_API int zendparse (void);

#endif /* !YY_ZEND_BUILDDIR_BUILD_BUILD_PHP_SRC_PHP_8_5_4_ZEND_ZEND_LANGUAGE_PARSER_H_INCLUDED  */
Zend/zend_operators.h000064400000107576151730543240010677 0ustar00/*
   +----------------------------------------------------------------------+
   | Zend Engine                                                          |
   +----------------------------------------------------------------------+
   | Copyright (c) Zend Technologies Ltd. (http://www.zend.com)           |
   +----------------------------------------------------------------------+
   | This source file is subject to version 2.00 of the Zend license,     |
   | that is bundled with this package in the file LICENSE, and is        |
   | available through the world-wide-web at the following url:           |
   | http://www.zend.com/license/2_00.txt.                                |
   | If you did not receive a copy of the Zend license and are unable to  |
   | obtain it through the world-wide-web, please send a note to          |
   | license@zend.com so we can mail you a copy immediately.              |
   +----------------------------------------------------------------------+
   | Authors: Andi Gutmans <andi@php.net>                                 |
   |          Zeev Suraski <zeev@php.net>                                 |
   |          Dmitry Stogov <dmitry@php.net>                              |
   +----------------------------------------------------------------------+
*/

#ifndef ZEND_OPERATORS_H
#define ZEND_OPERATORS_H

#include <errno.h>
#include <math.h>
#include <assert.h>
#include <stddef.h>
#include <stdint.h>

#ifdef HAVE_IEEEFP_H
/**
 * On FreeBSD with ubsan/clang we get the following:
 * `/usr/include/machine/ieeefp.h:161:17: runtime error: left shift of negative value -1`
 * `SUMMARY: UndefinedBehaviorSanitizer: undefined-behavior /usr/include/machine/ieeefp.h:161:17`
 * ...
 * `_newcw |= (~_m << FP_MSKS_OFF) & FP_MSKS_FLD;`
**/
# if __has_feature(undefined_behavior_sanitizer) && defined(__FreeBSD__) && defined(__clang__)
#  pragma clang attribute push (__attribute__((no_sanitize("undefined"))), apply_to=function)
# endif
# include <ieeefp.h>
# if __has_feature(undefined_behavior_sanitizer) && defined(__FreeBSD__) && defined(__clang__)
#  pragma clang attribute pop
# endif
#endif

#include "zend_portability.h"
#include "zend_strtod.h"
#include "zend_multiply.h"
#include "zend_object_handlers.h"

#define LONG_SIGN_MASK ZEND_LONG_MIN

BEGIN_EXTERN_C()
ZEND_API zend_result ZEND_FASTCALL add_function(zval *result, zval *op1, zval *op2);
ZEND_API zend_result ZEND_FASTCALL sub_function(zval *result, zval *op1, zval *op2);
ZEND_API zend_result ZEND_FASTCALL mul_function(zval *result, zval *op1, zval *op2);
ZEND_API zend_result ZEND_FASTCALL pow_function(zval *result, zval *op1, zval *op2);
ZEND_API zend_result ZEND_FASTCALL div_function(zval *result, zval *op1, zval *op2);
ZEND_API zend_result ZEND_FASTCALL mod_function(zval *result, zval *op1, zval *op2);
ZEND_API zend_result ZEND_FASTCALL boolean_xor_function(zval *result, zval *op1, zval *op2);
ZEND_API zend_result ZEND_FASTCALL boolean_not_function(zval *result, zval *op1);
ZEND_API zend_result ZEND_FASTCALL bitwise_not_function(zval *result, zval *op1);
ZEND_API zend_result ZEND_FASTCALL bitwise_or_function(zval *result, zval *op1, zval *op2);
ZEND_API zend_result ZEND_FASTCALL bitwise_and_function(zval *result, zval *op1, zval *op2);
ZEND_API zend_result ZEND_FASTCALL bitwise_xor_function(zval *result, zval *op1, zval *op2);
ZEND_API zend_result ZEND_FASTCALL shift_left_function(zval *result, zval *op1, zval *op2);
ZEND_API zend_result ZEND_FASTCALL shift_right_function(zval *result, zval *op1, zval *op2);
ZEND_API zend_result ZEND_FASTCALL concat_function(zval *result, zval *op1, zval *op2);

ZEND_API bool ZEND_FASTCALL zend_is_identical(const zval *op1, const zval *op2);

ZEND_API zend_result ZEND_FASTCALL is_equal_function(zval *result, zval *op1, zval *op2);
ZEND_API zend_result ZEND_FASTCALL is_identical_function(zval *result, zval *op1, zval *op2);
ZEND_API zend_result ZEND_FASTCALL is_not_identical_function(zval *result, zval *op1, zval *op2);
ZEND_API zend_result ZEND_FASTCALL is_not_equal_function(zval *result, zval *op1, zval *op2);
ZEND_API zend_result ZEND_FASTCALL is_smaller_function(zval *result, zval *op1, zval *op2);
ZEND_API zend_result ZEND_FASTCALL is_smaller_or_equal_function(zval *result, zval *op1, zval *op2);

ZEND_API bool ZEND_FASTCALL zend_class_implements_interface(const zend_class_entry *class_ce, const zend_class_entry *interface_ce);
ZEND_API bool ZEND_FASTCALL instanceof_function_slow(const zend_class_entry *instance_ce, const zend_class_entry *ce);

static zend_always_inline bool instanceof_function(
		const zend_class_entry *instance_ce, const zend_class_entry *ce) {
	return instance_ce == ce || instanceof_function_slow(instance_ce, ce);
}

ZEND_API bool zend_string_only_has_ascii_alphanumeric(const zend_string *str);

/**
 * Checks whether the string "str" with length "length" is numeric. The value
 * of allow_errors determines whether it's required to be entirely numeric, or
 * just its prefix. Leading whitespace is allowed.
 *
 * The function returns 0 if the string did not contain a valid number; IS_LONG
 * if it contained a number that fits within the range of a long; or IS_DOUBLE
 * if the number was out of long range or contained a decimal point/exponent.
 * The number's value is returned into the respective pointer, *lval or *dval,
 * if that pointer is not NULL.
 *
 * This variant also gives information if a string that represents an integer
 * could not be represented as such due to overflow. It writes 1 to oflow_info
 * if the integer is larger than ZEND_LONG_MAX and -1 if it's smaller than ZEND_LONG_MIN.
 */
ZEND_API uint8_t ZEND_FASTCALL _is_numeric_string_ex(const char *str, size_t length, zend_long *lval,
	double *dval, bool allow_errors, int *oflow_info, bool *trailing_data);

ZEND_API const char* ZEND_FASTCALL zend_memnstr_ex(const char *haystack, const char *needle, size_t needle_len, const char *end);
ZEND_API const char* ZEND_FASTCALL zend_memnrstr_ex(const char *haystack, const char *needle, size_t needle_len, const char *end);

#if SIZEOF_ZEND_LONG == 4
#	define ZEND_DOUBLE_FITS_LONG(d) (!((d) > (double)ZEND_LONG_MAX || (d) < (double)ZEND_LONG_MIN))
#else
	/* >= as (double)ZEND_LONG_MAX is outside signed range */
#	define ZEND_DOUBLE_FITS_LONG(d) (!((d) >= (double)ZEND_LONG_MAX || (d) < (double)ZEND_LONG_MIN))
#endif

ZEND_API void zend_incompatible_double_to_long_error(double d);
ZEND_API void zend_incompatible_string_to_long_error(const zend_string *s);
ZEND_API void ZEND_COLD zend_oob_double_to_long_error(double d);
ZEND_API void ZEND_COLD zend_oob_string_to_long_error(const zend_string *s);
ZEND_API void ZEND_COLD zend_nan_coerced_to_type_warning(uint8_t type);

ZEND_API zend_long ZEND_FASTCALL zend_dval_to_lval_slow(double d);

static zend_always_inline zend_long zend_dval_to_lval(double d)
{
	if (UNEXPECTED(!zend_finite(d))) {
		zend_oob_double_to_long_error(d);
		return 0;
	} else if (!ZEND_DOUBLE_FITS_LONG(d)) {
		zend_oob_double_to_long_error(d);
		return zend_dval_to_lval_slow(d);
	}
	return (zend_long)d;
}

static zend_always_inline zend_long zend_dval_to_lval_silent(double d)
{
	if (UNEXPECTED(!zend_finite(d))) {
		return 0;
	} else if (!ZEND_DOUBLE_FITS_LONG(d)) {
		return zend_dval_to_lval_slow(d);
	}
	return (zend_long)d;
}

/* Used to convert a string float to integer during an (int) cast */
static zend_always_inline zend_long zend_dval_to_lval_cap(double d, const zend_string *s)
{
	if (UNEXPECTED(!zend_finite(d))) {
		return 0;
	} else if (!ZEND_DOUBLE_FITS_LONG(d)) {
		return (d > 0 ? ZEND_LONG_MAX : ZEND_LONG_MIN);
	}
	return (zend_long)d;
}
/* }}} */

static zend_always_inline bool zend_is_long_compatible(double d, zend_long l) {
	return (double)l == d;
}

static zend_always_inline zend_long zend_dval_to_lval_safe(double d)
{
	zend_long l = zend_dval_to_lval(d);
	if (!zend_is_long_compatible(d, l) && ZEND_DOUBLE_FITS_LONG(d)) {
		zend_incompatible_double_to_long_error(d);
	}
	return l;
}

#define ZEND_IS_DIGIT(c) ((c) >= '0' && (c) <= '9')

static zend_always_inline uint8_t is_numeric_string_ex(const char *str, size_t length, zend_long *lval,
	double *dval, bool allow_errors, int *oflow_info, bool *trailing_data)
{
	if (*str > '9') {
		return 0;
	}
	return _is_numeric_string_ex(str, length, lval, dval, allow_errors, oflow_info, trailing_data);
}

static zend_always_inline uint8_t is_numeric_string(const char *str, size_t length, zend_long *lval, double *dval, bool allow_errors) {
    return is_numeric_string_ex(str, length, lval, dval, allow_errors, NULL, NULL);
}

ZEND_API uint8_t ZEND_FASTCALL is_numeric_str_function(const zend_string *str, zend_long *lval, double *dval);

static zend_always_inline const char *
zend_memnstr(const char *haystack, const char *needle, size_t needle_len, const char *end)
{
	const char *p = haystack;
	size_t off_s;

	ZEND_ASSERT(end >= p);

	if (needle_len == 1) {
		return (const char *)memchr(p, *needle, (end-p));
	} else if (UNEXPECTED(needle_len == 0)) {
		return p;
	}

	off_s = (size_t)(end - p);

	if (needle_len > off_s) {
		return NULL;
	}

	if (EXPECTED(off_s < 1024 || needle_len < 9)) {	/* glibc memchr is faster when needle is too short */
		const char ne = needle[needle_len-1];
		end -= needle_len;

		while (p <= end) {
			if ((p = (const char *)memchr(p, *needle, (end-p+1)))) {
				if (ne == p[needle_len-1] && !memcmp(needle+1, p+1, needle_len-2)) {
					return p;
				}
			} else {
				return NULL;
			}
			p++;
		}

		return NULL;
	} else {
		return zend_memnstr_ex(haystack, needle, needle_len, end);
	}
}

static zend_always_inline const void *zend_memrchr(const void *s, int c, size_t n)
{
#if defined(HAVE_MEMRCHR) && !defined(__i386__)
	/* On x86 memrchr() doesn't use SSE/AVX, so inlined version is faster */
	return (const void*)memrchr(s, c, n);
#else
	const unsigned char *e;
	if (0 == n) {
		return NULL;
	}

	for (e = (const unsigned char *)s + n - 1; e >= (const unsigned char *)s; e--) {
		if (*e == (unsigned char)c) {
			return (const void *)e;
		}
	}
	return NULL;
#endif
}


static zend_always_inline const char *
zend_memnrstr(const char *haystack, const char *needle, size_t needle_len, const char *end)
{
    const char *p = end;
    ptrdiff_t off_p;
    size_t off_s;

	if (needle_len == 0) {
		return p;
	}

    if (needle_len == 1) {
        return (const char *)zend_memrchr(haystack, *needle, (p - haystack));
    }

    off_p = end - haystack;
    off_s = (off_p > 0) ? (size_t)off_p : 0;

    if (needle_len > off_s) {
        return NULL;
    }

	if (EXPECTED(off_s < 1024 || needle_len < 3)) {
		const char ne = needle[needle_len-1];
		p -= needle_len;

		do {
			p = (const char *)zend_memrchr(haystack, *needle, (p - haystack) + 1);
			if (!p) {
				return NULL;
			}
			if (ne == p[needle_len-1] && !memcmp(needle + 1, p + 1, needle_len - 2)) {
				return p;
			}
		} while (p-- >= haystack);

		return NULL;
	} else {
		return zend_memnrstr_ex(haystack, needle, needle_len, end);
	}
}

static zend_always_inline size_t zend_strnlen(const char* s, size_t maxlen)
{
#if defined(HAVE_STRNLEN)
	return strnlen(s, maxlen);
#else
	const char *p = (const char *)memchr(s, '\0', maxlen);
	return p ? p-s : maxlen;
#endif
}

static zend_always_inline void *zend_mempcpy(void *dest, const void *src, size_t n)
{
#if defined(HAVE_MEMPCPY)
	return mempcpy(dest, src, n);
#else
	return (char *)memcpy(dest, src, n) + n;
#endif
}

ZEND_API zend_result ZEND_FASTCALL increment_function(zval *op1);
ZEND_API zend_result ZEND_FASTCALL decrement_function(zval *op2);

ZEND_API void ZEND_FASTCALL convert_scalar_to_number(zval *op);
ZEND_API void ZEND_FASTCALL _convert_to_string(zval *op);
ZEND_API void ZEND_FASTCALL convert_to_long(zval *op);
ZEND_API void ZEND_FASTCALL convert_to_double(zval *op);
ZEND_API void ZEND_FASTCALL convert_to_null(zval *op);
ZEND_API void ZEND_FASTCALL convert_to_boolean(zval *op);
ZEND_API void ZEND_FASTCALL convert_to_array(zval *op);
ZEND_API void ZEND_FASTCALL convert_to_object(zval *op);

ZEND_API zend_long    ZEND_FASTCALL zval_get_long_func(const zval *op, bool is_strict);
ZEND_API zend_long    ZEND_FASTCALL zval_try_get_long(const zval *op, bool *failed);
ZEND_API double       ZEND_FASTCALL zval_get_double_func(const zval *op);
ZEND_API zend_string* ZEND_FASTCALL zval_get_string_func(zval *op);
ZEND_API zend_string* ZEND_FASTCALL zval_try_get_string_func(zval *op);

static zend_always_inline zend_long zval_get_long(const zval *op) {
	return EXPECTED(Z_TYPE_P(op) == IS_LONG) ? Z_LVAL_P(op) : zval_get_long_func(op, false);
}
static zend_always_inline zend_long zval_get_long_ex(const zval *op, bool is_strict) {
	return EXPECTED(Z_TYPE_P(op) == IS_LONG) ? Z_LVAL_P(op) : zval_get_long_func(op, is_strict);
}
static zend_always_inline double zval_get_double(const zval *op) {
	return EXPECTED(Z_TYPE_P(op) == IS_DOUBLE) ? Z_DVAL_P(op) : zval_get_double_func(op);
}
static zend_always_inline zend_string *zval_get_string(zval *op) {
	return EXPECTED(Z_TYPE_P(op) == IS_STRING) ? zend_string_copy(Z_STR_P(op)) : zval_get_string_func(op);
}

static zend_always_inline zend_string *zval_get_tmp_string(zval *op, zend_string **tmp) {
	if (EXPECTED(Z_TYPE_P(op) == IS_STRING)) {
		*tmp = NULL;
		return Z_STR_P(op);
	} else {
		return *tmp = zval_get_string_func(op);
	}
}
static zend_always_inline void zend_tmp_string_release(zend_string *tmp) {
	if (UNEXPECTED(tmp)) {
		zend_string_release_ex(tmp, 0);
	}
}

/* Like zval_get_string, but returns NULL if the conversion fails with an exception. */
static zend_always_inline zend_string *zval_try_get_string(zval *op) {
	if (EXPECTED(Z_TYPE_P(op) == IS_STRING)) {
		zend_string *ret = zend_string_copy(Z_STR_P(op));
		ZEND_ASSUME(ret != NULL);
		return ret;
	} else {
		return zval_try_get_string_func(op);
	}
}

/* Like zval_get_tmp_string, but returns NULL if the conversion fails with an exception. */
static zend_always_inline zend_string *zval_try_get_tmp_string(zval *op, zend_string **tmp) {
	if (EXPECTED(Z_TYPE_P(op) == IS_STRING)) {
		zend_string *ret = Z_STR_P(op);
		*tmp = NULL;
		ZEND_ASSUME(ret != NULL);
		return ret;
	} else {
		return *tmp = zval_try_get_string_func(op);
	}
}

/* Like convert_to_string(), but returns whether the conversion succeeded and does not modify the
 * zval in-place if it fails. */
ZEND_API bool ZEND_FASTCALL _try_convert_to_string(zval *op);
static zend_always_inline bool try_convert_to_string(zval *op) {
	if (Z_TYPE_P(op) == IS_STRING) {
		return 1;
	}
	return _try_convert_to_string(op);
}

/* Compatibility macros for 7.2 and below */
#define _zval_get_long(op) zval_get_long(op)
#define _zval_get_double(op) zval_get_double(op)
#define _zval_get_string(op) zval_get_string(op)
#define _zval_get_long_func(op) zval_get_long_func(op)
#define _zval_get_double_func(op) zval_get_double_func(op)
#define _zval_get_string_func(op) zval_get_string_func(op)

#define convert_to_string(op) if (Z_TYPE_P(op) != IS_STRING) { _convert_to_string((op)); }


ZEND_API bool ZEND_FASTCALL zend_is_true(const zval *op);
ZEND_API bool ZEND_FASTCALL zend_object_is_true(const zval *op);

#define zval_is_true(op) \
	zend_is_true(op)

static zend_always_inline bool i_zend_is_true(const zval *op)
{
	bool result = 0;

again:
	switch (Z_TYPE_P(op)) {
		case IS_TRUE:
			result = 1;
			break;
		case IS_LONG:
			if (Z_LVAL_P(op)) {
				result = 1;
			}
			break;
		case IS_DOUBLE:
			if (UNEXPECTED(zend_isnan(Z_DVAL_P(op)))) {
				zend_nan_coerced_to_type_warning(_IS_BOOL);
			}
			if (Z_DVAL_P(op)) {
				result = 1;
			}
			break;
		case IS_STRING:
			if (Z_STRLEN_P(op) > 1 || (Z_STRLEN_P(op) && Z_STRVAL_P(op)[0] != '0')) {
				result = 1;
			}
			break;
		case IS_ARRAY:
			if (zend_hash_num_elements(Z_ARRVAL_P(op))) {
				result = 1;
			}
			break;
		case IS_OBJECT:
			if (EXPECTED(Z_OBJ_HT_P(op)->cast_object == zend_std_cast_object_tostring)) {
				result = 1;
			} else {
				result = zend_object_is_true(op);
			}
			break;
		case IS_RESOURCE:
			if (EXPECTED(Z_RES_HANDLE_P(op))) {
				result = 1;
			}
			break;
		case IS_REFERENCE:
			op = Z_REFVAL_P(op);
			goto again;
			break;
		default:
			break;
	}
	return result;
}

/* Indicate that two values cannot be compared. This value should be returned for both orderings
 * of the operands. This implies that all of ==, <, <= and >, >= will return false, because we
 * canonicalize >/>= to </<= with swapped operands. */
// TODO: Use a different value to allow an actual distinction here.
#define ZEND_UNCOMPARABLE 1

ZEND_API int ZEND_FASTCALL zend_compare(zval *op1, zval *op2);

ZEND_API zend_result ZEND_FASTCALL compare_function(zval *result, zval *op1, zval *op2);

ZEND_API int ZEND_FASTCALL numeric_compare_function(zval *op1, zval *op2);
ZEND_API int ZEND_FASTCALL string_compare_function_ex(zval *op1, zval *op2, bool case_insensitive);
ZEND_API int ZEND_FASTCALL string_compare_function(zval *op1, zval *op2);
ZEND_API int ZEND_FASTCALL string_case_compare_function(zval *op1, zval *op2);
ZEND_API int ZEND_FASTCALL string_locale_compare_function(zval *op1, zval *op2);

ZEND_API extern const unsigned char zend_tolower_map[256];
ZEND_API extern const unsigned char zend_toupper_map[256];

#define zend_tolower_ascii(c) (zend_tolower_map[(unsigned char)(c)])
#define zend_toupper_ascii(c) (zend_toupper_map[(unsigned char)(c)])

ZEND_API void         ZEND_FASTCALL zend_str_tolower(char *str, size_t length);
ZEND_API void         ZEND_FASTCALL zend_str_toupper(char *str, size_t length);
ZEND_API char*        ZEND_FASTCALL zend_str_tolower_copy(char *dest, const char *source, size_t length);
ZEND_API char*        ZEND_FASTCALL zend_str_toupper_copy(char *dest, const char *source, size_t length);
ZEND_API char*        ZEND_FASTCALL zend_str_tolower_dup(const char *source, size_t length);
ZEND_API char*        ZEND_FASTCALL zend_str_toupper_dup(const char *source, size_t length);
ZEND_API char*        ZEND_FASTCALL zend_str_tolower_dup_ex(const char *source, size_t length);
ZEND_API char*        ZEND_FASTCALL zend_str_toupper_dup_ex(const char *source, size_t length);
ZEND_API zend_string* ZEND_FASTCALL zend_string_tolower_ex(zend_string *str, bool persistent);
ZEND_API zend_string* ZEND_FASTCALL zend_string_toupper_ex(zend_string *str, bool persistent);

static zend_always_inline zend_string* zend_string_tolower(zend_string *str) {
	return zend_string_tolower_ex(str, false);
}
static zend_always_inline zend_string* zend_string_toupper(zend_string *str) {
	return zend_string_toupper_ex(str, false);
}

ZEND_API int ZEND_FASTCALL zend_binary_zval_strcmp(zval *s1, zval *s2);
ZEND_API int ZEND_FASTCALL zend_binary_zval_strncmp(zval *s1, zval *s2, zval *s3);
ZEND_API int ZEND_FASTCALL zend_binary_strcmp(const char *s1, size_t len1, const char *s2, size_t len2);
ZEND_API int ZEND_FASTCALL zend_binary_strncmp(const char *s1, size_t len1, const char *s2, size_t len2, size_t length);
ZEND_API int ZEND_FASTCALL zend_binary_strcasecmp(const char *s1, size_t len1, const char *s2, size_t len2);
ZEND_API int ZEND_FASTCALL zend_binary_strncasecmp(const char *s1, size_t len1, const char *s2, size_t len2, size_t length);
ZEND_API int ZEND_FASTCALL zend_binary_strcasecmp_l(const char *s1, size_t len1, const char *s2, size_t len2);
ZEND_API int ZEND_FASTCALL zend_binary_strncasecmp_l(const char *s1, size_t len1, const char *s2, size_t len2, size_t length);

ZEND_API bool ZEND_FASTCALL zendi_smart_streq(zend_string *s1, zend_string *s2);
ZEND_API int ZEND_FASTCALL zendi_smart_strcmp(zend_string *s1, zend_string *s2);
ZEND_API int ZEND_FASTCALL zend_compare_symbol_tables(HashTable *ht1, HashTable *ht2);
ZEND_API int ZEND_FASTCALL zend_compare_arrays(zval *a1, zval *a2);
ZEND_API int ZEND_FASTCALL zend_compare_objects(zval *o1, zval *o2);

/** Deprecated in favor of ZEND_STRTOL() */
ZEND_ATTRIBUTE_DEPRECATED ZEND_API int ZEND_FASTCALL zend_atoi(const char *str, size_t str_len);

/** Deprecated in favor of ZEND_STRTOL() */
ZEND_ATTRIBUTE_DEPRECATED ZEND_API zend_long ZEND_FASTCALL zend_atol(const char *str, size_t str_len);

#define convert_to_null_ex(zv) convert_to_null(zv)
#define convert_to_boolean_ex(zv) convert_to_boolean(zv)
#define convert_to_long_ex(zv) convert_to_long(zv)
#define convert_to_double_ex(zv) convert_to_double(zv)
#define convert_to_string_ex(zv) convert_to_string(zv)
#define convert_to_array_ex(zv) convert_to_array(zv)
#define convert_to_object_ex(zv) convert_to_object(zv)
#define convert_scalar_to_number_ex(zv) convert_scalar_to_number(zv)

ZEND_API void zend_update_current_locale(void);

ZEND_API void zend_reset_lc_ctype_locale(void);

/* The offset in bytes between the value and type fields of a zval */
#define ZVAL_OFFSETOF_TYPE	\
	(offsetof(zval, u1.type_info) - offsetof(zval, value))

#if defined(HAVE_ASM_GOTO) && !__has_feature(memory_sanitizer)
# define ZEND_USE_ASM_ARITHMETIC 1
#else
# define ZEND_USE_ASM_ARITHMETIC 0
#endif

static zend_always_inline void fast_long_increment_function(zval *op1)
{
#if ZEND_USE_ASM_ARITHMETIC && defined(__i386__) && !(4 == __GNUC__ && 8 == __GNUC_MINOR__)
	__asm__ goto(
		"addl $1,(%0)\n\t"
		"jo  %l1\n"
		:
		: "r"(&op1->value)
		: "cc", "memory"
		: overflow);
	return;
overflow: ZEND_ATTRIBUTE_COLD_LABEL
	ZVAL_DOUBLE(op1, (double)ZEND_LONG_MAX + 1.0);
#elif ZEND_USE_ASM_ARITHMETIC && defined(__x86_64__)
	__asm__ goto(
		"addq $1,(%0)\n\t"
		"jo  %l1\n"
		:
		: "r"(&op1->value)
		: "cc", "memory"
		: overflow);
	return;
overflow: ZEND_ATTRIBUTE_COLD_LABEL
	ZVAL_DOUBLE(op1, (double)ZEND_LONG_MAX + 1.0);
#elif ZEND_USE_ASM_ARITHMETIC && defined(__aarch64__)
	__asm__ goto (
		"ldr x5, [%0]\n\t"
		"adds x5, x5, 1\n\t"
		"bvs %l1\n"
		"str x5, [%0]"
		:
		: "r"(&op1->value)
		: "x5", "cc", "memory"
		: overflow);
	return;
overflow: ZEND_ATTRIBUTE_COLD_LABEL
	ZVAL_DOUBLE(op1, (double)ZEND_LONG_MAX + 1.0);
#elif defined(PHP_HAVE_BUILTIN_SADDL_OVERFLOW) && SIZEOF_LONG == SIZEOF_ZEND_LONG
	long lresult;
	if (UNEXPECTED(__builtin_saddl_overflow(Z_LVAL_P(op1), 1, &lresult))) {
		/* switch to double */
		ZVAL_DOUBLE(op1, (double)ZEND_LONG_MAX + 1.0);
	} else {
		Z_LVAL_P(op1) = lresult;
	}
#elif defined(PHP_HAVE_BUILTIN_SADDLL_OVERFLOW) && SIZEOF_LONG_LONG == SIZEOF_ZEND_LONG
	long long llresult;
	if (UNEXPECTED(__builtin_saddll_overflow(Z_LVAL_P(op1), 1, &llresult))) {
		/* switch to double */
		ZVAL_DOUBLE(op1, (double)ZEND_LONG_MAX + 1.0);
	} else {
		Z_LVAL_P(op1) = llresult;
	}
#elif defined(ZEND_WIN32) && SIZEOF_LONG == SIZEOF_ZEND_LONG
	long lresult;
	if (UNEXPECTED(FAILED(LongAdd(Z_LVAL_P(op1), 1, &lresult)))) {
		/* switch to double */
		ZVAL_DOUBLE(op1, (double)ZEND_LONG_MAX + 1.0);
	} else {
		Z_LVAL_P(op1) = lresult;
	}
#elif defined(ZEND_WIN32) && SIZEOF_LONG_LONG == SIZEOF_ZEND_LONG
	long long llresult;
	if (UNEXPECTED(FAILED(LongLongAdd(Z_LVAL_P(op1), 1, &llresult)))) {
		/* switch to double */
		ZVAL_DOUBLE(op1, (double)ZEND_LONG_MAX + 1.0);
	} else {
		Z_LVAL_P(op1) = llresult;
	}
#else
	if (UNEXPECTED(Z_LVAL_P(op1) == ZEND_LONG_MAX)) {
		/* switch to double */
		ZVAL_DOUBLE(op1, (double)ZEND_LONG_MAX + 1.0);
	} else {
		Z_LVAL_P(op1)++;
	}
#endif
}

static zend_always_inline void fast_long_decrement_function(zval *op1)
{
#if ZEND_USE_ASM_ARITHMETIC && defined(__i386__) && !(4 == __GNUC__ && 8 == __GNUC_MINOR__)
	__asm__ goto(
		"subl $1,(%0)\n\t"
		"jo  %l1\n"
		:
		: "r"(&op1->value)
		: "cc", "memory"
		: overflow);
	return;
overflow: ZEND_ATTRIBUTE_COLD_LABEL
	ZVAL_DOUBLE(op1, (double)ZEND_LONG_MIN - 1.0);
#elif ZEND_USE_ASM_ARITHMETIC && defined(__x86_64__)
	__asm__ goto(
		"subq $1,(%0)\n\t"
		"jo  %l1\n"
		:
		: "r"(&op1->value)
		: "cc", "memory"
		: overflow);
	return;
overflow: ZEND_ATTRIBUTE_COLD_LABEL
	ZVAL_DOUBLE(op1, (double)ZEND_LONG_MIN - 1.0);
#elif ZEND_USE_ASM_ARITHMETIC && defined(__aarch64__)
	__asm__ goto (
		"ldr x5, [%0]\n\t"
		"subs x5 ,x5, 1\n\t"
		"bvs %l1\n"
		"str x5, [%0]"
		:
		: "r"(&op1->value)
		: "x5", "cc", "memory"
		: overflow);
	return;
overflow: ZEND_ATTRIBUTE_COLD_LABEL
	ZVAL_DOUBLE(op1, (double)ZEND_LONG_MIN - 1.0);
#elif defined(PHP_HAVE_BUILTIN_SSUBL_OVERFLOW) && SIZEOF_LONG == SIZEOF_ZEND_LONG
	long lresult;
	if (UNEXPECTED(__builtin_ssubl_overflow(Z_LVAL_P(op1), 1, &lresult))) {
		/* switch to double */
		ZVAL_DOUBLE(op1, (double)ZEND_LONG_MIN - 1.0);
	} else {
		Z_LVAL_P(op1) = lresult;
	}
#elif defined(PHP_HAVE_BUILTIN_SSUBLL_OVERFLOW) && SIZEOF_LONG_LONG == SIZEOF_ZEND_LONG
	long long llresult;
	if (UNEXPECTED(__builtin_ssubll_overflow(Z_LVAL_P(op1), 1, &llresult))) {
		/* switch to double */
		ZVAL_DOUBLE(op1, (double)ZEND_LONG_MIN - 1.0);
	} else {
		Z_LVAL_P(op1) = llresult;
	}
#elif defined(ZEND_WIN32) && SIZEOF_LONG == SIZEOF_ZEND_LONG
	long lresult;
	if (UNEXPECTED(FAILED(LongSub(Z_LVAL_P(op1), 1, &lresult)))) {
		/* switch to double */
		ZVAL_DOUBLE(op1, (double)ZEND_LONG_MIN - 1.0);
	} else {
		Z_LVAL_P(op1) = lresult;
	}
#elif defined(ZEND_WIN32) && SIZEOF_LONG_LONG == SIZEOF_ZEND_LONG
	long long llresult;
	if (UNEXPECTED(FAILED(LongLongSub(Z_LVAL_P(op1), 1, &llresult)))) {
		/* switch to double */
		ZVAL_DOUBLE(op1, (double)ZEND_LONG_MIN - 1.0);
	} else {
		Z_LVAL_P(op1) = llresult;
	}
#else
	if (UNEXPECTED(Z_LVAL_P(op1) == ZEND_LONG_MIN)) {
		/* switch to double */
		ZVAL_DOUBLE(op1, (double)ZEND_LONG_MIN - 1.0);
	} else {
		Z_LVAL_P(op1)--;
	}
#endif
}

static zend_always_inline void fast_long_add_function(zval *result, zval *op1, zval *op2)
{
#if ZEND_USE_ASM_ARITHMETIC && defined(__i386__) && !(4 == __GNUC__ && 8 == __GNUC_MINOR__)
	__asm__ goto(
		"movl	(%1), %%eax\n\t"
		"addl   (%2), %%eax\n\t"
		"jo     %l5\n\t"
		"movl   %%eax, (%0)\n\t"
		"movl   %3, %c4(%0)\n"
		:
		: "r"(&result->value),
		  "r"(&op1->value),
		  "r"(&op2->value),
		  "n"(IS_LONG),
		  "n"(ZVAL_OFFSETOF_TYPE)
		: "eax","cc", "memory"
		: overflow);
	return;
overflow: ZEND_ATTRIBUTE_COLD_LABEL
	ZVAL_DOUBLE(result, (double) Z_LVAL_P(op1) + (double) Z_LVAL_P(op2));
#elif ZEND_USE_ASM_ARITHMETIC && defined(__x86_64__)
	__asm__ goto(
		"movq	(%1), %%rax\n\t"
		"addq   (%2), %%rax\n\t"
		"jo     %l5\n\t"
		"movq   %%rax, (%0)\n\t"
		"movl   %3, %c4(%0)\n"
		:
		: "r"(&result->value),
		  "r"(&op1->value),
		  "r"(&op2->value),
		  "n"(IS_LONG),
		  "n"(ZVAL_OFFSETOF_TYPE)
		: "rax","cc", "memory"
		: overflow);
	return;
overflow: ZEND_ATTRIBUTE_COLD_LABEL
	ZVAL_DOUBLE(result, (double) Z_LVAL_P(op1) + (double) Z_LVAL_P(op2));
#elif ZEND_USE_ASM_ARITHMETIC && defined(__aarch64__)
	__asm__ goto(
		"ldr    x5, [%1]\n\t"
		"ldr    x6, [%2]\n\t"
		"adds	x5, x5, x6\n\t"
		"bvs	%l5\n\t"
		"mov	w6, %3\n\t"
		"str	x5, [%0]\n\t"
		"str	w6, [%0, %c4]\n"
		:
		: "r"(&result->value),
		  "r"(&op1->value),
		  "r"(&op2->value),
		  "n"(IS_LONG),
		  "n"(ZVAL_OFFSETOF_TYPE)
		: "x5", "x6", "cc", "memory"
		: overflow);
	return;
overflow: ZEND_ATTRIBUTE_COLD_LABEL
	ZVAL_DOUBLE(result, (double) Z_LVAL_P(op1) + (double) Z_LVAL_P(op2));
#elif defined(PHP_HAVE_BUILTIN_SADDL_OVERFLOW) && SIZEOF_LONG == SIZEOF_ZEND_LONG
	long lresult;
	if (UNEXPECTED(__builtin_saddl_overflow(Z_LVAL_P(op1), Z_LVAL_P(op2), &lresult))) {
		ZVAL_DOUBLE(result, (double) Z_LVAL_P(op1) + (double) Z_LVAL_P(op2));
	} else {
		ZVAL_LONG(result, lresult);
	}
#elif defined(PHP_HAVE_BUILTIN_SADDLL_OVERFLOW) && SIZEOF_LONG_LONG == SIZEOF_ZEND_LONG
	long long llresult;
	if (UNEXPECTED(__builtin_saddll_overflow(Z_LVAL_P(op1), Z_LVAL_P(op2), &llresult))) {
		ZVAL_DOUBLE(result, (double) Z_LVAL_P(op1) + (double) Z_LVAL_P(op2));
	} else {
		ZVAL_LONG(result, llresult);
	}
#elif defined(ZEND_WIN32) && SIZEOF_LONG == SIZEOF_ZEND_LONG
	long lresult;
	if (UNEXPECTED(FAILED(LongAdd(Z_LVAL_P(op1), Z_LVAL_P(op2), &lresult)))) {
		ZVAL_DOUBLE(result, (double) Z_LVAL_P(op1) + (double) Z_LVAL_P(op2));
	} else {
		ZVAL_LONG(result, lresult);
	}
#elif defined(ZEND_WIN32) && SIZEOF_LONG_LONG == SIZEOF_ZEND_LONG
	long long llresult;
	if (UNEXPECTED(FAILED(LongLongAdd(Z_LVAL_P(op1), Z_LVAL_P(op2), &llresult)))) {
		ZVAL_DOUBLE(result, (double) Z_LVAL_P(op1) + (double) Z_LVAL_P(op2));
	} else {
		ZVAL_LONG(result, llresult);
	}
#else
	/*
	 * 'result' may alias with op1 or op2, so we need to
	 * ensure that 'result' is not updated until after we
	 * have read the values of op1 and op2.
	 */

	zend_long sum = (zend_long) ((zend_ulong) Z_LVAL_P(op1) + (zend_ulong) Z_LVAL_P(op2));

	if (UNEXPECTED((Z_LVAL_P(op1) & LONG_SIGN_MASK) == (Z_LVAL_P(op2) & LONG_SIGN_MASK)
		&& (Z_LVAL_P(op1) & LONG_SIGN_MASK) != (sum & LONG_SIGN_MASK))) {
		ZVAL_DOUBLE(result, (double) Z_LVAL_P(op1) + (double) Z_LVAL_P(op2));
	} else {
		ZVAL_LONG(result, sum);
	}
#endif
}

static zend_always_inline void fast_long_sub_function(zval *result, zval *op1, zval *op2)
{
#if ZEND_USE_ASM_ARITHMETIC && defined(__i386__) && !(4 == __GNUC__ && 8 == __GNUC_MINOR__)
	__asm__ goto(
		"movl	(%1), %%eax\n\t"
		"subl   (%2), %%eax\n\t"
		"jo     %l5\n\t"
		"movl   %%eax, (%0)\n\t"
		"movl   %3, %c4(%0)\n"
		:
		: "r"(&result->value),
		  "r"(&op1->value),
		  "r"(&op2->value),
		  "n"(IS_LONG),
		  "n"(ZVAL_OFFSETOF_TYPE)
		: "eax","cc", "memory"
		: overflow);
	return;
overflow: ZEND_ATTRIBUTE_COLD_LABEL
	ZVAL_DOUBLE(result, (double) Z_LVAL_P(op1) - (double) Z_LVAL_P(op2));
#elif ZEND_USE_ASM_ARITHMETIC && defined(__x86_64__)
	__asm__ goto(
		"movq	(%1), %%rax\n\t"
		"subq   (%2), %%rax\n\t"
		"jo     %l5\n\t"
		"movq   %%rax, (%0)\n\t"
		"movl   %3, %c4(%0)\n"
		:
		: "r"(&result->value),
		  "r"(&op1->value),
		  "r"(&op2->value),
		  "n"(IS_LONG),
		  "n"(ZVAL_OFFSETOF_TYPE)
		: "rax","cc", "memory"
		: overflow);
	return;
overflow: ZEND_ATTRIBUTE_COLD_LABEL
	ZVAL_DOUBLE(result, (double) Z_LVAL_P(op1) - (double) Z_LVAL_P(op2));
#elif ZEND_USE_ASM_ARITHMETIC && defined(__aarch64__)
	__asm__ goto(
		"ldr    x5, [%1]\n\t"
		"ldr    x6, [%2]\n\t"
		"subs	x5, x5, x6\n\t"
		"bvs	%l5\n\t"
		"mov	w6, %3\n\t"
		"str	x5, [%0]\n\t"
		"str	w6, [%0, %c4]\n"
		:
		: "r"(&result->value),
		  "r"(&op1->value),
		  "r"(&op2->value),
		  "n"(IS_LONG),
		  "n"(ZVAL_OFFSETOF_TYPE)
		: "x5", "x6", "cc", "memory"
		: overflow);
	return;
overflow: ZEND_ATTRIBUTE_COLD_LABEL
	ZVAL_DOUBLE(result, (double) Z_LVAL_P(op1) - (double) Z_LVAL_P(op2));
#elif defined(PHP_HAVE_BUILTIN_SSUBL_OVERFLOW) && SIZEOF_LONG == SIZEOF_ZEND_LONG
	long lresult;
	if (UNEXPECTED(__builtin_ssubl_overflow(Z_LVAL_P(op1), Z_LVAL_P(op2), &lresult))) {
		ZVAL_DOUBLE(result, (double) Z_LVAL_P(op1) - (double) Z_LVAL_P(op2));
	} else {
		ZVAL_LONG(result, lresult);
	}
#elif defined(PHP_HAVE_BUILTIN_SSUBLL_OVERFLOW) && SIZEOF_LONG_LONG == SIZEOF_ZEND_LONG
	long long llresult;
	if (UNEXPECTED(__builtin_ssubll_overflow(Z_LVAL_P(op1), Z_LVAL_P(op2), &llresult))) {
		ZVAL_DOUBLE(result, (double) Z_LVAL_P(op1) - (double) Z_LVAL_P(op2));
	} else {
		ZVAL_LONG(result, llresult);
	}
#elif defined(ZEND_WIN32) && SIZEOF_LONG == SIZEOF_ZEND_LONG
	long lresult;
	if (UNEXPECTED(FAILED(LongSub(Z_LVAL_P(op1), Z_LVAL_P(op2), &lresult)))) {
		ZVAL_DOUBLE(result, (double) Z_LVAL_P(op1) - (double) Z_LVAL_P(op2));
	} else {
		ZVAL_LONG(result, lresult);
	}
#elif defined(ZEND_WIN32) && SIZEOF_LONG_LONG == SIZEOF_ZEND_LONG
	long long llresult;
	if (UNEXPECTED(FAILED(LongLongSub(Z_LVAL_P(op1), Z_LVAL_P(op2), &llresult)))) {
		ZVAL_DOUBLE(result, (double) Z_LVAL_P(op1) - (double) Z_LVAL_P(op2));
	} else {
		ZVAL_LONG(result, llresult);
	}
#else
	/*
	 * 'result' may alias with op1 or op2, so we need to
	 * ensure that 'result' is not updated until after we
	 * have read the values of op1 and op2.
	 */

	zend_long sub = (zend_long) ((zend_ulong) Z_LVAL_P(op1) - (zend_ulong) Z_LVAL_P(op2));

	if (UNEXPECTED((Z_LVAL_P(op1) & LONG_SIGN_MASK) != (Z_LVAL_P(op2) & LONG_SIGN_MASK)
		&& (Z_LVAL_P(op1) & LONG_SIGN_MASK) != (sub & LONG_SIGN_MASK))) {
		ZVAL_DOUBLE(result, (double) Z_LVAL_P(op1) - (double) Z_LVAL_P(op2));
	} else {
		ZVAL_LONG(result, sub);
	}
#endif
}

static zend_always_inline bool zend_fast_equal_strings(zend_string *s1, zend_string *s2)
{
	if (s1 == s2) {
		return 1;
	} else if (ZSTR_VAL(s1)[0] > '9' || ZSTR_VAL(s2)[0] > '9') {
		return zend_string_equal_content(s1, s2);
	} else {
		return zendi_smart_streq(s1, s2);
	}
}

static zend_always_inline bool fast_equal_check_function(zval *op1, zval *op2)
{
	if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
		if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
			return Z_LVAL_P(op1) == Z_LVAL_P(op2);
		} else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
			return ((double)Z_LVAL_P(op1)) == Z_DVAL_P(op2);
		}
	} else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) {
		if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
			return Z_DVAL_P(op1) == Z_DVAL_P(op2);
		} else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
			return Z_DVAL_P(op1) == ((double)Z_LVAL_P(op2));
		}
	} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
		if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
			return zend_fast_equal_strings(Z_STR_P(op1), Z_STR_P(op2));
		}
	}
	return zend_compare(op1, op2) == 0;
}

static zend_always_inline bool fast_equal_check_long(zval *op1, zval *op2)
{
	if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
		return Z_LVAL_P(op1) == Z_LVAL_P(op2);
	}
	return zend_compare(op1, op2) == 0;
}

static zend_always_inline bool fast_equal_check_string(zval *op1, zval *op2)
{
	if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
		return zend_fast_equal_strings(Z_STR_P(op1), Z_STR_P(op2));
	}
	return zend_compare(op1, op2) == 0;
}

static zend_always_inline bool fast_is_identical_function(zval *op1, zval *op2)
{
	if (Z_TYPE_P(op1) != Z_TYPE_P(op2)) {
		return 0;
	} else if (Z_TYPE_P(op1) <= IS_TRUE) {
		return 1;
	}
	return zend_is_identical(op1, op2);
}

static zend_always_inline bool fast_is_not_identical_function(zval *op1, zval *op2)
{
	if (Z_TYPE_P(op1) != Z_TYPE_P(op2)) {
		return 1;
	} else if (Z_TYPE_P(op1) <= IS_TRUE) {
		return 0;
	}
	return !zend_is_identical(op1, op2);
}

/* buf points to the END of the buffer */
static zend_always_inline char *zend_print_ulong_to_buf(char *buf, zend_ulong num) {
	*buf = '\0';
	do {
		*--buf = (char) (num % 10) + '0';
		num /= 10;
	} while (num > 0);
	return buf;
}

/* buf points to the END of the buffer */
static zend_always_inline char *zend_print_long_to_buf(char *buf, zend_long num) {
	if (num < 0) {
	    char *result = zend_print_ulong_to_buf(buf, ~((zend_ulong) num) + 1);
	    *--result = '-';
		return result;
	} else {
	    return zend_print_ulong_to_buf(buf, num);
	}
}

ZEND_API zend_string* ZEND_FASTCALL zend_long_to_str(zend_long num);
ZEND_API zend_string* ZEND_FASTCALL zend_ulong_to_str(zend_ulong num);
ZEND_API zend_string* ZEND_FASTCALL zend_u64_to_str(uint64_t num);
ZEND_API zend_string* ZEND_FASTCALL zend_i64_to_str(int64_t num);
ZEND_API zend_string* ZEND_FASTCALL zend_double_to_str(double num);

static zend_always_inline void zend_unwrap_reference(zval *op) /* {{{ */
{
	if (Z_REFCOUNT_P(op) == 1) {
		ZVAL_UNREF(op);
	} else {
		Z_DELREF_P(op);
		ZVAL_COPY(op, Z_REFVAL_P(op));
	}
}
/* }}} */

static zend_always_inline bool zend_strnieq(const char *ptr1, const char *ptr2, size_t num)
{
	const char *end = ptr1 + num;
	while (ptr1 < end) {
		if (zend_tolower_ascii(*ptr1++) != zend_tolower_ascii(*ptr2++)) {
			return 0;
		}
	}
	return 1;
}

static zend_always_inline const char *
zend_memnistr(const char *haystack, const char *needle, size_t needle_len, const char *end)
{
	ZEND_ASSERT(end >= haystack);

	if (UNEXPECTED(needle_len == 0)) {
		return haystack;
	}

	if (UNEXPECTED(needle_len > (size_t)(end - haystack))) {
		return NULL;
	}

	const char first_lower = zend_tolower_ascii(*needle);
	const char first_upper = zend_toupper_ascii(*needle);
	const char *p_lower = (const char *)memchr(haystack, first_lower, end - haystack);
	const char *p_upper = NULL;
	if (first_lower != first_upper) {
		// If the needle length is 1 we don't need to look beyond p_lower as it is a guaranteed match
		size_t upper_search_length = needle_len == 1 && p_lower != NULL ? p_lower - haystack : end - haystack;
		p_upper = (const char *)memchr(haystack, first_upper, upper_search_length);
	}
	const char *p = !p_upper || (p_lower && p_lower < p_upper) ? p_lower : p_upper;

	if (needle_len == 1) {
		return p;
	}

	const char needle_end_lower = zend_tolower_ascii(needle[needle_len - 1]);
	const char needle_end_upper = zend_toupper_ascii(needle[needle_len - 1]);
	end -= needle_len;

	while (p && p <= end) {
		if (needle_end_lower == p[needle_len - 1] || needle_end_upper == p[needle_len - 1]) {
			if (zend_strnieq(needle + 1, p + 1, needle_len - 2)) {
				return p;
			}
		}
		if (p_lower == p) {
			p_lower = (const char *)memchr(p_lower + 1, first_lower, end - p_lower);
		}
		if (p_upper == p) {
			p_upper = (const char *)memchr(p_upper + 1, first_upper, end - p_upper);
		}
		p = !p_upper || (p_lower && p_lower < p_upper) ? p_lower : p_upper;
	}

	return NULL;
}


END_EXTERN_C()

#endif
Zend/zend_simd.h000064400000047216151730543250007610 0ustar00/********************************************************************************
 * MIT License
 * Copyright (c) 2025 Saki Takamachi <saki@sakiot.com>
 *
 * Permission is hereby granted, free of charge, to any person obtaining a copy
 * of this software and associated documentation files (the "Software"), to deal
 * in the Software without restriction, including without limitation the rights
 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
 * copies of the Software, and to permit persons to whom the Software is
 * furnished to do so, subject to the following conditions:
 *
 * The above copyright notice and this permission notice shall be included in all
 * copies or substantial portions of the Software.
 *
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
 * SOFTWARE.
 *********************************************************************************/


 #ifndef XSSE_H
 #define XSSE_H

 #define XSSE_VERSION 10000

 #ifdef _MSC_VER
 #  define XSSE_FORCE_INLINE __forceinline
 #elif defined(__GNUC__) || defined(__clang__)
 #  define XSSE_FORCE_INLINE inline __attribute__((always_inline))
 #  define XSSE_HAS_MACRO_EXTENSION
 #else
 #  define XSSE_FORCE_INLINE inline
 #endif


 #if defined(__SSE2__) || defined(_M_X64) || defined(_M_AMD64)
 #include <emmintrin.h>
 #define XSSE2


 #elif defined(__aarch64__) || defined(_M_ARM64)
 #include <arm_neon.h>
 #define XSSE2

 typedef int8x16_t __m128i;


 /*****************************************************************************
  * Load / Store                                                              *
  *****************************************************************************/

 #define _mm_set_epi8(x0, x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15) \
	 ((int8x16_t) { \
		 (int8_t) (x15), (int8_t) (x14), (int8_t) (x13), (int8_t) (x12), \
		 (int8_t) (x11), (int8_t) (x10), (int8_t) (x9),  (int8_t) (x8), \
		 (int8_t) (x7),  (int8_t) (x6),  (int8_t) (x5),  (int8_t) (x4), \
		 (int8_t) (x3),  (int8_t) (x2),  (int8_t) (x1),  (int8_t) (x0) })
 #define _mm_set_epi16(x0, x1, x2, x3, x4, x5, x6, x7) \
	 (vreinterpretq_s8_s16((int16x8_t) { \
		 (int16_t) (x7), (int16_t) (x6), (int16_t) (x5), (int16_t) (x4), \
		 (int16_t) (x3), (int16_t) (x2), (int16_t) (x1), (int16_t) (x0) }))
 #define _mm_set_epi32(x0, x1, x2, x3) \
	 (vreinterpretq_s8_s32((int32x4_t) { (int32_t) (x3), (int32_t) (x2), (int32_t) (x1), (int32_t) (x0) }))
 #define _mm_set_epi64x(x0, x1) (vreinterpretq_s8_s64((int64x2_t) { (int64_t) (x1), (int64_t) (x0) }))
 #define _mm_set1_epi8(x) (vdupq_n_s8((int8_t) (x)))
 #define _mm_set1_epi16(x) (vreinterpretq_s8_s16(vdupq_n_s16((int16_t) (x))))
 #define _mm_set1_epi32(x) (vreinterpretq_s8_s32(vdupq_n_s32((int32_t) (x))))
 #define _mm_set1_epi64x(x) (vreinterpretq_s8_s64(vdupq_n_s64((int64_t) (x))))

 #define _mm_setr_epi8(x0, x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15) \
	 ((int8x16_t) { \
		 (int8_t) (x0), (int8_t) (x1), (int8_t) (x2), (int8_t) (x3), \
		 (int8_t) (x4), (int8_t) (x5), (int8_t) (x6), (int8_t) (x7), \
		 (int8_t) (x8), (int8_t) (x9), (int8_t) (x10), (int8_t) (x11), \
		 (int8_t) (x12), (int8_t) (x13), (int8_t) (x14), (int8_t) (x15) })
 #define _mm_setr_epi16(x0, x1, x2, x3, x4, x5, x6, x7) \
	 (vreinterpretq_s8_s16((int16x8_t) { \
		 (int16_t) (x0), (int16_t) (x1), (int16_t) (x2), (int16_t) (x3), \
		 (int16_t) (x4), (int16_t) (x5), (int16_t) (x6), (int16_t) (x7) }))
 #define _mm_setr_epi32(x0, x1, x2, x3) \
	 (vreinterpretq_s8_s32((int32x4_t) { (int32_t) (x0), (int32_t) (x1), (int32_t) (x2), (int32_t) (x3) }))

 #define _mm_setzero_si128() (vdupq_n_s8(0))

 #define _mm_load_si128(x) (vld1q_s8((const int8_t *) (x)))
 #define _mm_loadu_si128(x) _mm_load_si128(x)

 #define _mm_store_si128(to, x) (vst1q_s8((int8_t *) (to), x))
 #define _mm_storeu_si128(to, x) _mm_store_si128(to, x)
 #define _mm_stream_si128(to, x) _mm_store_si128(to, x)
 #define _mm_stream_si32(to, x) (*(volatile int32_t *)(to) = (int32_t)(x))


 /*****************************************************************************
  * Bit shift / Bit wise                                                      *
  *****************************************************************************/

 #define _mm_or_si128(a, b) (vorrq_s8((a), (b)))
 #define _mm_xor_si128(a, b) (veorq_s8((a), (b)))
 #define _mm_and_si128(a, b) (vandq_s8((a), (b)))
 #define _mm_andnot_si128(a, b) (vbicq_s8((b), (a)))

 #define _mm_slli_epi16(x, count) (vreinterpretq_s8_u16(vshlq_n_u16(vreinterpretq_u16_s8(x), (count))))
 #define _mm_slli_epi32(x, count) (vreinterpretq_s8_u32(vshlq_n_u32(vreinterpretq_u32_s8(x), (count))))
 #define _mm_slli_epi64(x, count) (vreinterpretq_s8_u64(vshlq_n_u64(vreinterpretq_u64_s8(x), (count))))
 static XSSE_FORCE_INLINE __m128i _mm_sll_epi16(__m128i x, __m128i count)
 {
	 uint16_t shift = (uint16_t) (vgetq_lane_s64(vreinterpretq_s64_s8(count), 0) & 0xFFFF);
	 return vreinterpretq_s8_u16(
		 vshlq_u16(vreinterpretq_u16_s8(x), vdupq_n_s16((int16_t) shift))
	 );
 }
 static XSSE_FORCE_INLINE __m128i _mm_sll_epi32(__m128i x, __m128i count)
 {
	 uint32_t shift = (uint32_t) (vgetq_lane_s64(vreinterpretq_s64_s8(count), 0) & 0xFFFFFFFF);
	 return vreinterpretq_s8_u32(
		 vshlq_u32(vreinterpretq_u32_s8(x), vdupq_n_s32((int32_t) shift))
	 );
 }
 static XSSE_FORCE_INLINE __m128i _mm_sll_epi64(__m128i x, __m128i count)
 {
	 uint64_t shift = (uint64_t) vgetq_lane_s64(vreinterpretq_s64_s8(count), 0);
	 return vreinterpretq_s8_u64(
		 vshlq_u64(vreinterpretq_u64_s8(x), vdupq_n_s64((int64_t) shift))
	 );
 }

 #define _mm_slli_si128(x, imm) \
	 ((imm) >= 16 ? vdupq_n_s8(0) : vreinterpretq_s8_u8(vextq_u8(vdupq_n_u8(0), vreinterpretq_u8_s8(x), 16 - (imm))))

 #define _mm_srai_epi16(x, count) (vreinterpretq_s8_s16(vshrq_n_s16(vreinterpretq_s16_s8(x), (count))))
 #define _mm_srai_epi32(x, count) (vreinterpretq_s8_s32(vshrq_n_s32(vreinterpretq_s32_s8(x), (count))))
 static inline __m128i _mm_sra_epi16(__m128i x, __m128i count)
 {
	 uint16_t shift = (uint16_t) (vgetq_lane_s64(vreinterpretq_s64_s8(count), 0) & 0xFFFF);
	 return vreinterpretq_s8_s16(
		 vshlq_s16(vreinterpretq_s16_s8(x), vdupq_n_s16(-(int16_t) shift))
	 );
 }
 static inline __m128i _mm_sra_epi32(__m128i x, __m128i count)
 {
	 uint32_t shift = (uint32_t) (vgetq_lane_s64(vreinterpretq_s64_s8(count), 0) & 0xFFFFFFFF);
	 return vreinterpretq_s8_s32(
		 vshlq_s32(vreinterpretq_s32_s8(x), vdupq_n_s32(-(int32_t) shift))
	 );
 }

 #define _mm_srli_epi16(x, count) (vreinterpretq_s8_u16(vshrq_n_u16(vreinterpretq_u16_s8(x), (count))))
 #define _mm_srli_epi32(x, count) (vreinterpretq_s8_u32(vshrq_n_u32(vreinterpretq_u32_s8(x), (count))))
 #define _mm_srli_epi64(x, count) (vreinterpretq_s8_u64(vshrq_n_u64(vreinterpretq_u64_s8(x), (count))))
 static XSSE_FORCE_INLINE __m128i _mm_srl_epi16(__m128i x, __m128i count)
 {
	 uint16_t shift = (uint16_t) (vgetq_lane_s64(vreinterpretq_s64_s8(count), 0) & 0xFFFF);
	 return vreinterpretq_s8_u16(
		 vshlq_u16(vreinterpretq_u16_s8(x), vdupq_n_s16(-(int16_t) shift))
	 );
 }
 static XSSE_FORCE_INLINE __m128i _mm_srl_epi32(__m128i x, __m128i count)
 {
	 uint32_t shift = (uint32_t) (vgetq_lane_s64(vreinterpretq_s64_s8(count), 0) & 0xFFFFFFFF);
	 return vreinterpretq_s8_u32(
		 vshlq_u32(vreinterpretq_u32_s8(x), vdupq_n_s32(-(int32_t) shift))
	 );
 }
 static XSSE_FORCE_INLINE __m128i _mm_srl_epi64(__m128i x, __m128i count)
 {
	 uint64_t shift = (uint64_t) vgetq_lane_s64(vreinterpretq_s64_s8(count), 0);
	 return vreinterpretq_s8_u64(
		 vshlq_u64(vreinterpretq_u64_s8(x), vdupq_n_s64(-(int64_t) shift))
	 );
 }

 #define _mm_srli_si128(x, imm) \
	 ((imm) >= 16 ? vdupq_n_s8(0) : vreinterpretq_s8_u8(vextq_u8(vreinterpretq_u8_s8(x), vdupq_n_u8(0), (imm))))


 /*****************************************************************************
  * Integer Arithmetic Operations                                             *
  *****************************************************************************/

 /**
  * In practice, there is no problem, but a runtime error for signed integer overflow is triggered by UBSAN,
  * so perform the calculation as unsigned. Since it is optimized at compile time, there are no unnecessary casts at runtime.
  */
 #define _mm_add_epi8(a, b) (vreinterpretq_s8_u8(vaddq_u8(vreinterpretq_u8_s8(a), vreinterpretq_u8_s8(b))))
 #define _mm_add_epi16(a, b) (vreinterpretq_s8_u16(vaddq_u16(vreinterpretq_u16_s8(a), vreinterpretq_u16_s8(b))))
 #define _mm_add_epi32(a, b) (vreinterpretq_s8_u32(vaddq_u32(vreinterpretq_u32_s8(a), vreinterpretq_u32_s8(b))))
 #define _mm_add_epi64(a, b) (vreinterpretq_s8_u64(vaddq_u64(vreinterpretq_u64_s8(a), vreinterpretq_u64_s8(b))))

 #define _mm_adds_epi8(a, b) (vqaddq_s8((a), (b)))
 #define _mm_adds_epi16(a, b) (vreinterpretq_s8_s16(vqaddq_s16(vreinterpretq_s16_s8(a), vreinterpretq_s16_s8(b))))
 #define _mm_adds_epu8(a, b) (vreinterpretq_s8_u8(vqaddq_u8(vreinterpretq_u8_s8(a), vreinterpretq_u8_s8(b))))
 #define _mm_adds_epu16(a, b) (vreinterpretq_s8_u16(vqaddq_u16(vreinterpretq_u16_s8(a), vreinterpretq_u16_s8(b))))

 #define _mm_avg_epu8(a, b) (vreinterpretq_s8_u8(vrhaddq_u8(vreinterpretq_u8_s8(a), vreinterpretq_u8_s8(b))))
 #define _mm_avg_epu16(a, b) (vreinterpretq_s8_u16(vrhaddq_u16(vreinterpretq_u16_s8(a), vreinterpretq_u16_s8(b))))

 static XSSE_FORCE_INLINE __m128i _mm_madd_epi16(__m128i a, __m128i b)
 {
	 int32x4_t mul_lo = vmull_s16(vget_low_s16(vreinterpretq_s16_s8(a)), vget_low_s16(vreinterpretq_s16_s8(b)));
	 int32x4_t mul_hi = vmull_s16(vget_high_s16(vreinterpretq_s16_s8(a)), vget_high_s16(vreinterpretq_s16_s8(b)));

	 return vreinterpretq_s8_s32(vcombine_s32(
		 vpadd_s32(vget_low_s32(mul_lo), vget_high_s32(mul_lo)),
		 vpadd_s32(vget_low_s32(mul_hi), vget_high_s32(mul_hi))
	 ));
 }

 #define _mm_max_epu8(a, b) (vreinterpretq_s8_u8(vmaxq_u8(vreinterpretq_u8_s8(a), vreinterpretq_u8_s8(b))))
 #define _mm_max_epi16(a, b) (vreinterpretq_s8_s16(vmaxq_s16(vreinterpretq_s16_s8(a), vreinterpretq_s16_s8(b))))
 #define _mm_min_epu8(a, b) (vreinterpretq_s8_u8(vminq_u8(vreinterpretq_u8_s8(a), vreinterpretq_u8_s8(b))))
 #define _mm_min_epi16(a, b) (vreinterpretq_s8_s16(vminq_s16(vreinterpretq_s16_s8(a), vreinterpretq_s16_s8(b))))

 static XSSE_FORCE_INLINE __m128i _mm_mulhi_epi16(__m128i a, __m128i b)
 {
	 int32x4_t lo = vmull_s16(vget_low_s16(vreinterpretq_s16_s8(a)), vget_low_s16(vreinterpretq_s16_s8(b)));
	 int32x4_t hi = vmull_s16(vget_high_s16(vreinterpretq_s16_s8(a)), vget_high_s16(vreinterpretq_s16_s8(b)));
	 return vreinterpretq_s8_s16(vcombine_s16(vshrn_n_s32(lo, 16), vshrn_n_s32(hi, 16)));
 }
 static XSSE_FORCE_INLINE __m128i _mm_mulhi_epu16(__m128i a, __m128i b)
 {
	 uint32x4_t lo = vmull_u16(vget_low_u16(vreinterpretq_u16_s8(a)), vget_low_u16(vreinterpretq_u16_s8(b)));
	 uint32x4_t hi = vmull_u16(vget_high_u16(vreinterpretq_u16_s8(a)), vget_high_u16(vreinterpretq_u16_s8(b)));
	 return vreinterpretq_s8_u16(vcombine_u16(vshrn_n_u32(lo, 16), vshrn_n_u32(hi, 16)));
 }
 static XSSE_FORCE_INLINE __m128i _mm_mullo_epi16(__m128i a, __m128i b)
 {
	 int32x4_t lo = vmull_s16(vget_low_s16(vreinterpretq_s16_s8(a)), vget_low_s16(vreinterpretq_s16_s8(b)));
	 int32x4_t hi = vmull_s16(vget_high_s16(vreinterpretq_s16_s8(a)), vget_high_s16(vreinterpretq_s16_s8(b)));
	 return vreinterpretq_s8_s16(vcombine_s16(vmovn_s32(lo), vmovn_s32(hi)));
 }
 static XSSE_FORCE_INLINE __m128i _mm_mul_epu32(__m128i a, __m128i b)
 {
	 uint32x4_t evens = vuzpq_u32(vreinterpretq_u32_s8(a), vreinterpretq_u32_s8(b)).val[0];
	 return vreinterpretq_s8_u64(vmull_u32(vget_low_u32(evens), vget_high_u32(evens)));
 }
 static XSSE_FORCE_INLINE __m128i _mm_sad_epu8(__m128i a, __m128i b)
 {
	 uint16x8_t abs_diffs_16 = vpaddlq_u8(vabdq_u8(vreinterpretq_u8_s8(a), vreinterpretq_u8_s8(b)));
	 uint32x4_t abs_diffs_32 = vpaddlq_u16(abs_diffs_16);
	 uint64x2_t abs_diffs_64 = vpaddlq_u32(abs_diffs_32);

	 return vreinterpretq_s8_u16((uint16x8_t) {
		 (int16_t) vgetq_lane_u64(abs_diffs_64, 0), 0, 0, 0,
		 (int16_t) vgetq_lane_u64(abs_diffs_64, 1), 0, 0, 0
	 });
 }

 #define _mm_sub_epi8(a, b) (vreinterpretq_s8_u8(vsubq_u8(vreinterpretq_u8_s8(a), vreinterpretq_u8_s8(b))))
 #define _mm_sub_epi16(a, b) (vreinterpretq_s8_u16(vsubq_u16(vreinterpretq_u16_s8(a), vreinterpretq_u16_s8(b))))
 #define _mm_sub_epi32(a, b) (vreinterpretq_s8_u32(vsubq_u32(vreinterpretq_u32_s8(a), vreinterpretq_u32_s8(b))))
 #define _mm_sub_epi64(a, b) (vreinterpretq_s8_u64(vsubq_u64(vreinterpretq_u64_s8(a), vreinterpretq_u64_s8(b))))

 #define _mm_subs_epi8(a, b) (vqsubq_s8((a), (b)))
 #define _mm_subs_epi16(a, b) (vreinterpretq_s8_s16(vqsubq_s16(vreinterpretq_s16_s8(a), vreinterpretq_s16_s8(b))))
 #define _mm_subs_epu8(a, b) (vreinterpretq_s8_u8(vqsubq_u8(vreinterpretq_u8_s8(a), vreinterpretq_u8_s8(b))))
 #define _mm_subs_epu16(a, b) (vreinterpretq_s8_u16(vqsubq_u16(vreinterpretq_u16_s8(a), vreinterpretq_u16_s8(b))))


 /*****************************************************************************
  * Comparison                                                                *
  *****************************************************************************/

 #define _mm_cmpeq_epi8(a, b) (vreinterpretq_s8_u8(vceqq_s8((a), (b))))
 #define _mm_cmpeq_epi16(a, b) (vreinterpretq_s8_u16(vceqq_s16(vreinterpretq_s16_s8(a), vreinterpretq_s16_s8(b))))
 #define _mm_cmpeq_epi32(a, b) (vreinterpretq_s8_u32(vceqq_s32(vreinterpretq_s32_s8(a), vreinterpretq_s32_s8(b))))

 #define _mm_cmplt_epi8(a, b) (vreinterpretq_s8_u8(vcltq_s8((a), (b))))
 #define _mm_cmplt_epi16(a, b) (vreinterpretq_s8_u16(vcltq_s16(vreinterpretq_s16_s8(a), vreinterpretq_s16_s8(b))))
 #define _mm_cmplt_epi32(a, b) (vreinterpretq_s8_u32(vcltq_s32(vreinterpretq_s32_s8(a), vreinterpretq_s32_s8(b))))

 #define _mm_cmpgt_epi8(a, b) (vreinterpretq_s8_u8(vcgtq_s8((a), (b))))
 #define _mm_cmpgt_epi16(a, b) (vreinterpretq_s8_u16(vcgtq_s16(vreinterpretq_s16_s8(a), vreinterpretq_s16_s8(b))))
 #define _mm_cmpgt_epi32(a, b) (vreinterpretq_s8_u32(vcgtq_s32(vreinterpretq_s32_s8(a), vreinterpretq_s32_s8(b))))


 /*****************************************************************************
  * Convert                                                                   *
  *****************************************************************************/

 #define _mm_cvtsi32_si128(x) (vreinterpretq_s8_s32((int32x4_t) { (int32_t) (x), 0, 0, 0 }))
 #define _mm_cvtsi64_si128(x) (vreinterpretq_s8_s64((int64x2_t) { (int64_t) (x), 0 }))
 #define _mm_cvtsi128_si32(x) (vgetq_lane_s32(vreinterpretq_s32_s8(x), 0))
 #define _mm_cvtsi128_si64(x) (vgetq_lane_s64(vreinterpretq_s64_s8(x), 0))


 /*****************************************************************************
  * Others                                                                    *
  *****************************************************************************/

 #define _mm_packs_epi16(a, b) (vcombine_s8(vqmovn_s16(vreinterpretq_s16_s8(a)), vqmovn_s16(vreinterpretq_s16_s8(b))))
 #define _mm_packs_epi32(a, b) \
	 (vreinterpretq_s8_s16(vcombine_s16(vqmovn_s32(vreinterpretq_s32_s8(a)), vqmovn_s32(vreinterpretq_s32_s8(b)))))
 #define _mm_packus_epi16(a, b) \
	 (vreinterpretq_s8_u8(vcombine_u8(vqmovun_s16(vreinterpretq_s16_s8(a)), vqmovun_s16(vreinterpretq_s16_s8(b)))))

 #define _mm_extract_epi16(x, imm) (vgetq_lane_s16(vreinterpretq_s16_s8(x), (imm)))
 #define _mm_insert_epi16(x, val, imm) (vreinterpretq_s8_s16(vsetq_lane_s16((int16_t) (val), vreinterpretq_s16_s8(x), (imm))))

 static XSSE_FORCE_INLINE int _mm_movemask_epi8(__m128i x)
 {
	 /**
	  * based on code from
	  * https://community.arm.com/arm-community-blogs/b/servers-and-cloud-computing-blog/posts/porting-x86-vector-bitmask-optimizations-to-arm-neon
	  */
	 uint16x8_t high_bits = vreinterpretq_u16_u8(vshrq_n_u8(vreinterpretq_u8_s8(x), 7));
	 uint32x4_t paired16 = vreinterpretq_u32_u16(vsraq_n_u16(high_bits, high_bits, 7));
	 uint64x2_t paired32 = vreinterpretq_u64_u32(vsraq_n_u32(paired16, paired16, 14));
	 uint8x16_t paired64 = vreinterpretq_u8_u64(vsraq_n_u64(paired32, paired32, 28));
	 return vgetq_lane_u8(paired64, 0) | ((int) vgetq_lane_u8(paired64, 8) << 8);
 }

 #define _MM_SHUFFLE(a, b, c, d) (((a) << 6) | ((b) << 4) | ((c) << 2) | (d))
 #ifdef XSSE_HAS_MACRO_EXTENSION
 #define _mm_shuffle_epi32(x, imm) __extension__({ \
		 int32x4_t __xsse_tmp = vreinterpretq_s32_s8(x); \
		 vreinterpretq_s8_s32((int32x4_t) { \
			 (int32_t) vgetq_lane_s32(__xsse_tmp, ((imm) >> 0) & 0x3), \
			 (int32_t) vgetq_lane_s32(__xsse_tmp, ((imm) >> 2) & 0x3), \
			 (int32_t) vgetq_lane_s32(__xsse_tmp, ((imm) >> 4) & 0x3), \
			 (int32_t) vgetq_lane_s32(__xsse_tmp, ((imm) >> 6) & 0x3) \
		 }); \
	 })
 #define _mm_shufflehi_epi16(x, imm) __extension__({ \
		 int16x8_t __xsse_tmp = vreinterpretq_s16_s8(x); \
		 vreinterpretq_s8_s16(vcombine_s16( \
			 vget_low_s16(__xsse_tmp), \
			 (int16x4_t) { \
				 (int16_t) vgetq_lane_s16(__xsse_tmp, (((imm) >> 0) & 0x3) + 4), \
				 (int16_t) vgetq_lane_s16(__xsse_tmp, (((imm) >> 2) & 0x3) + 4), \
				 (int16_t) vgetq_lane_s16(__xsse_tmp, (((imm) >> 4) & 0x3) + 4), \
				 (int16_t) vgetq_lane_s16(__xsse_tmp, (((imm) >> 6) & 0x3) + 4) \
			 } \
		 )); \
	 })
 #define _mm_shufflelo_epi16(x, imm) __extension__({ \
		 int16x8_t __xsse_tmp = vreinterpretq_s16_s8(x); \
		 vreinterpretq_s8_s16(vcombine_s16( \
			 (int16x4_t) { \
				 (int16_t) vgetq_lane_s16(__xsse_tmp, (((imm) >> 0) & 0x3)), \
				 (int16_t) vgetq_lane_s16(__xsse_tmp, (((imm) >> 2) & 0x3)), \
				 (int16_t) vgetq_lane_s16(__xsse_tmp, (((imm) >> 4) & 0x3)), \
				 (int16_t) vgetq_lane_s16(__xsse_tmp, (((imm) >> 6) & 0x3)) \
			 }, \
			 vget_high_s16(__xsse_tmp) \
		 )); \
	 })
 #else
 static XSSE_FORCE_INLINE __m128i _mm_shuffle_epi32(__m128i x, int imm)
 {
	 int32x4_t vec = vreinterpretq_s32_s8(x);
	 int32_t arr[4];
	 vst1q_s32(arr, vec);

	 return vreinterpretq_s8_s32((int32x4_t) {
		 arr[(imm >> 0) & 0x3],
		 arr[(imm >> 2) & 0x3],
		 arr[(imm >> 4) & 0x3],
		 arr[(imm >> 6) & 0x3]
	 });
 }
 static XSSE_FORCE_INLINE __m128i _mm_shufflehi_epi16(__m128i x, int imm)
 {
	 int16x8_t vec = vreinterpretq_s16_s8(x);
	 int16_t arr[8];
	 vst1q_s16(arr, vec);

	 return vreinterpretq_s8_s16((int16x8_t) {
		 arr[0], arr[1], arr[2], arr[3],
		 arr[((imm >> 0) & 0x3) + 4],
		 arr[((imm >> 2) & 0x3) + 4],
		 arr[((imm >> 4) & 0x3) + 4],
		 arr[((imm >> 6) & 0x3) + 4]
	 });
 }
 static XSSE_FORCE_INLINE __m128i _mm_shufflelo_epi16(__m128i x, int imm)
 {
	 int16x8_t vec = vreinterpretq_s16_s8(x);
	 int16_t arr[8];
	 vst1q_s16(arr, vec);

	 return vreinterpretq_s8_s16((int16x8_t) {
		 arr[((imm >> 0) & 0x3)],
		 arr[((imm >> 2) & 0x3)],
		 arr[((imm >> 4) & 0x3)],
		 arr[((imm >> 6) & 0x3)],
		 arr[4], arr[5], arr[6], arr[7]
	 });
 }
 #endif

 #define _mm_unpackhi_epi8(a, b) (vzip2q_s8((a), (b)))
 #define _mm_unpackhi_epi16(a, b) (vreinterpretq_s8_s16(vzip2q_s16(vreinterpretq_s16_s8(a), vreinterpretq_s16_s8(b))))
 #define _mm_unpackhi_epi32(a, b) (vreinterpretq_s8_s32(vzip2q_s32(vreinterpretq_s32_s8(a), vreinterpretq_s32_s8(b))))
 #define _mm_unpackhi_epi64(a, b) (vreinterpretq_s8_s64(vzip2q_s64(vreinterpretq_s64_s8(a), vreinterpretq_s64_s8(b))))

 #define _mm_unpacklo_epi8(a, b) (vzip1q_s8((a), (b)))
 #define _mm_unpacklo_epi16(a, b) (vreinterpretq_s8_s16(vzip1q_s16(vreinterpretq_s16_s8(a), vreinterpretq_s16_s8(b))))
 #define _mm_unpacklo_epi32(a, b) (vreinterpretq_s8_s32(vzip1q_s32(vreinterpretq_s32_s8(a), vreinterpretq_s32_s8(b))))
 #define _mm_unpacklo_epi64(a, b) (vreinterpretq_s8_s64(vzip1q_s64(vreinterpretq_s64_s8(a), vreinterpretq_s64_s8(b))))

 #define _mm_move_epi64(x) (vreinterpretq_s8_s64((int64x2_t) { vgetq_lane_s64(vreinterpretq_s64_s8(x), 0), 0 }))

 #endif

 #endif /* XSSE_H */
Zend/zend_bitset.h000064400000017535151730543250010147 0ustar00/*
   +----------------------------------------------------------------------+
   | Zend OPcache JIT                                                     |
   +----------------------------------------------------------------------+
   | Copyright (c) The PHP Group                                          |
   +----------------------------------------------------------------------+
   | This source file is subject to version 3.01 of the PHP license,      |
   | that is bundled with this package in the file LICENSE, and is        |
   | available through the world-wide-web at the following url:           |
   | https://www.php.net/license/3_01.txt                                 |
   | If you did not receive a copy of the PHP license and are unable to   |
   | obtain it through the world-wide-web, please send a note to          |
   | license@php.net so we can mail you a copy immediately.               |
   +----------------------------------------------------------------------+
   | Authors: Dmitry Stogov <dmitry@php.net>                              |
   +----------------------------------------------------------------------+
*/

#ifndef _ZEND_BITSET_H_
#define _ZEND_BITSET_H_

#include <stdint.h>
#include <stdbool.h>
#include <string.h>

#include "zend_portability.h"
#include "zend_long.h"

typedef zend_ulong *zend_bitset;

#define ZEND_BITSET_ELM_SIZE sizeof(zend_ulong)

#if SIZEOF_ZEND_LONG == 4
# define ZEND_BITSET_ELM_NUM(n)		((n) >> 5)
# define ZEND_BITSET_BIT_NUM(n)		((zend_ulong)(n) & Z_UL(0x1f))
#elif SIZEOF_ZEND_LONG == 8
# define ZEND_BITSET_ELM_NUM(n)		((n) >> 6)
# define ZEND_BITSET_BIT_NUM(n)		((zend_ulong)(n) & Z_UL(0x3f))
#else
# define ZEND_BITSET_ELM_NUM(n)		((n) / (sizeof(zend_long) * 8))
# define ZEND_BITSET_BIT_NUM(n)		((n) % (sizeof(zend_long) * 8))
#endif

#define ZEND_BITSET_ALLOCA(n, use_heap) \
	(zend_bitset)do_alloca((n) * ZEND_BITSET_ELM_SIZE, use_heap)

/* Number of trailing zero bits (0x01 -> 0; 0x40 -> 6; 0x00 -> LEN) */
ZEND_ATTRIBUTE_CONST static zend_always_inline int zend_ulong_ntz(zend_ulong num)
{
#if (defined(__GNUC__) || __has_builtin(__builtin_ctzl)) \
	&& SIZEOF_ZEND_LONG == SIZEOF_LONG && defined(PHP_HAVE_BUILTIN_CTZL)
	return __builtin_ctzl(num);
#elif (defined(__GNUC__) || __has_builtin(__builtin_ctzll)) && defined(PHP_HAVE_BUILTIN_CTZLL)
	return __builtin_ctzll(num);
#elif defined(_WIN32)
	unsigned long index;

#if defined(_WIN64)
	if (!BitScanForward64(&index, num)) {
#else
	if (!BitScanForward(&index, num)) {
#endif
		return SIZEOF_ZEND_LONG * 8;
	}

	return (int) index;
#else
	int n;

	if (num == Z_UL(0)) return SIZEOF_ZEND_LONG * 8;

	n = 1;
#if SIZEOF_ZEND_LONG == 8
	if ((num & 0xffffffff) == 0) {n += 32; num = num >> Z_UL(32);}
#endif
	if ((num & 0x0000ffff) == 0) {n += 16; num = num >> 16;}
	if ((num & 0x000000ff) == 0) {n +=  8; num = num >>  8;}
	if ((num & 0x0000000f) == 0) {n +=  4; num = num >>  4;}
	if ((num & 0x00000003) == 0) {n +=  2; num = num >>  2;}
	return n - (num & 1);
#endif
}

/* Number of leading zero bits (Undefined for zero) */
ZEND_ATTRIBUTE_CONST static zend_always_inline int zend_ulong_nlz(zend_ulong num)
{
#if (defined(__GNUC__) || __has_builtin(__builtin_clzl)) \
	&& SIZEOF_ZEND_LONG == SIZEOF_LONG && defined(PHP_HAVE_BUILTIN_CLZL)
	return __builtin_clzl(num);
#elif (defined(__GNUC__) || __has_builtin(__builtin_clzll)) && defined(PHP_HAVE_BUILTIN_CLZLL)
	return __builtin_clzll(num);
#elif defined(_WIN32)
	unsigned long index;

#if defined(_WIN64)
	if (!BitScanReverse64(&index, num)) {
#else
	if (!BitScanReverse(&index, num)) {
#endif
		return SIZEOF_ZEND_LONG * 8;
	}

	return (int) (SIZEOF_ZEND_LONG * 8 - 1)- index;
#else
	zend_ulong x;
	int n;

#if SIZEOF_ZEND_LONG == 8
	n = 64;
	x = num >> 32; if (x != 0) {n -= 32; num = x;}
#else
	n = 32;
#endif
	x = num >> 16; if (x != 0) {n -= 16; num = x;}
	x = num >> 8;  if (x != 0) {n -=  8; num = x;}
	x = num >> 4;  if (x != 0) {n -=  4; num = x;}
	x = num >> 2;  if (x != 0) {n -=  2; num = x;}
	x = num >> 1;  if (x != 0) return n - 2;
	return n - num;
#endif
}

/* Returns the number of zend_ulong words needed to store a bitset that is N
   bits long.  */
static inline uint32_t zend_bitset_len(uint32_t n)
{
	return (n + ((sizeof(zend_long) * 8) - 1)) / (sizeof(zend_long) * 8);
}

static inline bool zend_bitset_in(zend_bitset set, uint32_t n)
{
	return ZEND_BIT_TEST(set, n);
}

static inline void zend_bitset_incl(zend_bitset set, uint32_t n)
{
	set[ZEND_BITSET_ELM_NUM(n)] |= Z_UL(1) << ZEND_BITSET_BIT_NUM(n);
}

static inline void zend_bitset_excl(zend_bitset set, uint32_t n)
{
	set[ZEND_BITSET_ELM_NUM(n)] &= ~(Z_UL(1) << ZEND_BITSET_BIT_NUM(n));
}

static inline void zend_bitset_clear(zend_bitset set, uint32_t len)
{
	memset(set, 0, len * ZEND_BITSET_ELM_SIZE);
}

static inline bool zend_bitset_empty(zend_bitset set, uint32_t len)
{
	uint32_t i;
	for (i = 0; i < len; i++) {
		if (set[i]) {
			return 0;
		}
	}
	return 1;
}

static inline void zend_bitset_fill(zend_bitset set, uint32_t len)
{
	memset(set, 0xff, len * ZEND_BITSET_ELM_SIZE);
}

static inline bool zend_bitset_equal(zend_bitset set1, zend_bitset set2, uint32_t len)
{
    return memcmp(set1, set2, len * ZEND_BITSET_ELM_SIZE) == 0;
}

static inline void zend_bitset_copy(zend_bitset set1, zend_bitset set2, uint32_t len)
{
    memcpy(set1, set2, len * ZEND_BITSET_ELM_SIZE);
}

static inline void zend_bitset_intersection(zend_bitset set1, zend_bitset set2, uint32_t len)
{
    uint32_t i;

    for (i = 0; i < len; i++) {
		set1[i] &= set2[i];
	}
}

static inline void zend_bitset_union(zend_bitset set1, zend_bitset set2, uint32_t len)
{
	uint32_t i;

	for (i = 0; i < len; i++) {
		set1[i] |= set2[i];
	}
}

static inline void zend_bitset_difference(zend_bitset set1, zend_bitset set2, uint32_t len)
{
	uint32_t i;

	for (i = 0; i < len; i++) {
		set1[i] = set1[i] & ~set2[i];
	}
}

static inline void zend_bitset_union_with_intersection(zend_bitset set1, zend_bitset set2, zend_bitset set3, zend_bitset set4, uint32_t len)
{
	uint32_t i;

	for (i = 0; i < len; i++) {
		set1[i] = set2[i] | (set3[i] & set4[i]);
	}
}

static inline void zend_bitset_union_with_difference(zend_bitset set1, zend_bitset set2, zend_bitset set3, zend_bitset set4, uint32_t len)
{
	uint32_t i;

	for (i = 0; i < len; i++) {
		set1[i] = set2[i] | (set3[i] & ~set4[i]);
	}
}

static inline bool zend_bitset_subset(zend_bitset set1, zend_bitset set2, uint32_t len)
{
	uint32_t i;

	for (i = 0; i < len; i++) {
		if (set1[i] & ~set2[i]) {
			return 0;
		}
	}
	return 1;
}

static inline int zend_bitset_first(zend_bitset set, uint32_t len)
{
	uint32_t i;

	for (i = 0; i < len; i++) {
		if (set[i]) {
			return ZEND_BITSET_ELM_SIZE * 8 * i + zend_ulong_ntz(set[i]);
		}
	}
	return -1; /* empty set */
}

static inline int zend_bitset_last(zend_bitset set, uint32_t len)
{
	uint32_t i = len;

	while (i > 0) {
		i--;
		if (set[i]) {
			int j = ZEND_BITSET_ELM_SIZE * 8 * i - 1;
			zend_ulong x = set[i];
			while (x != Z_UL(0)) {
				x = x >> Z_UL(1);
				j++;
			}
			return j;
		}
	}
	return -1; /* empty set */
}

#define ZEND_BITSET_FOREACH(set, len, bit) do { \
	zend_bitset _set = (set); \
	uint32_t _i, _len = (len); \
	for (_i = 0; _i < _len; _i++) { \
		zend_ulong _x = _set[_i]; \
		if (_x) { \
			(bit) = ZEND_BITSET_ELM_SIZE * 8 * _i; \
			for (; _x != 0; _x >>= Z_UL(1), (bit)++) { \
				if (!(_x & Z_UL(1))) continue;

#define ZEND_BITSET_REVERSE_FOREACH(set, len, bit) do { \
	zend_bitset _set = (set); \
	uint32_t _i = (len); \
	zend_ulong _test = Z_UL(1) << (ZEND_BITSET_ELM_SIZE * 8 - 1); \
	while (_i-- > 0) { \
		zend_ulong _x = _set[_i]; \
		if (_x) { \
			(bit) = ZEND_BITSET_ELM_SIZE * 8 * (_i + 1) - 1; \
			for (; _x != 0; _x <<= Z_UL(1), (bit)--) { \
				if (!(_x & _test)) continue; \

#define ZEND_BITSET_FOREACH_END() \
			} \
		} \
	} \
} while (0)

static inline int zend_bitset_pop_first(zend_bitset set, uint32_t len) {
	int i = zend_bitset_first(set, len);
	if (i >= 0) {
		zend_bitset_excl(set, i);
	}
	return i;
}

#endif /* _ZEND_BITSET_H_ */
Zend/zend_ini_parser.h000064400000005276151730543250011007 0ustar00/* A Bison parser, made by GNU Bison 3.0.4.  */

/* Bison interface for Yacc-like parsers in C

   Copyright (C) 1984, 1989-1990, 2000-2015 Free Software Foundation, Inc.

   This program is free software: you can redistribute it and/or modify
   it under the terms of the GNU General Public License as published by
   the Free Software Foundation, either version 3 of the License, or
   (at your option) any later version.

   This program is distributed in the hope that it will be useful,
   but WITHOUT ANY WARRANTY; without even the implied warranty of
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
   GNU General Public License for more details.

   You should have received a copy of the GNU General Public License
   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */

/* As a special exception, you may create a larger work that contains
   part or all of the Bison parser skeleton and distribute that work
   under terms of your choice, so long as that work isn't itself a
   parser generator using the skeleton or a modified version thereof
   as a parser skeleton.  Alternatively, if you modify or redistribute
   the parser skeleton itself, you may (at your option) remove this
   special exception, which will cause the skeleton and the resulting
   Bison output files to be licensed under the GNU General Public
   License without this special exception.

   This special exception was added by the Free Software Foundation in
   version 2.2 of Bison.  */

#ifndef YY_INI_BUILDDIR_BUILD_BUILD_PHP_SRC_PHP_8_5_4_ZEND_ZEND_INI_PARSER_H_INCLUDED
# define YY_INI_BUILDDIR_BUILD_BUILD_PHP_SRC_PHP_8_5_4_ZEND_ZEND_INI_PARSER_H_INCLUDED
/* Debug traces.  */
#ifndef INI_DEBUG
# if defined YYDEBUG
#if YYDEBUG
#   define INI_DEBUG 1
#  else
#   define INI_DEBUG 0
#  endif
# else /* ! defined YYDEBUG */
#  define INI_DEBUG 0
# endif /* ! defined YYDEBUG */
#endif  /* ! defined INI_DEBUG */
#if INI_DEBUG
extern int ini_debug;
#endif

/* Token type.  */
#ifndef INI_TOKENTYPE
# define INI_TOKENTYPE
  enum ini_tokentype
  {
    END = 0,
    TC_SECTION = 258,
    TC_RAW = 259,
    TC_CONSTANT = 260,
    TC_NUMBER = 261,
    TC_STRING = 262,
    TC_WHITESPACE = 263,
    TC_LABEL = 264,
    TC_OFFSET = 265,
    TC_DOLLAR_CURLY = 266,
    TC_VARNAME = 267,
    TC_QUOTED_STRING = 268,
    TC_FALLBACK = 269,
    BOOL_TRUE = 270,
    BOOL_FALSE = 271,
    NULL_NULL = 272,
    END_OF_LINE = 273
  };
#endif

/* Value type.  */
#if ! defined INI_STYPE && ! defined INI_STYPE_IS_DECLARED
typedef zval INI_STYPE;
# define INI_STYPE_IS_TRIVIAL 1
# define INI_STYPE_IS_DECLARED 1
#endif



int ini_parse (void);

#endif /* !YY_INI_BUILDDIR_BUILD_BUILD_PHP_SRC_PHP_8_5_4_ZEND_ZEND_INI_PARSER_H_INCLUDED  */
Zend/zend_weakrefs.h000064400000006604151730543250010457 0ustar00/*
   +----------------------------------------------------------------------+
   | Copyright (c) The PHP Group                                          |
   +----------------------------------------------------------------------+
   | This source file is subject to version 2.00 of the Zend license,     |
   | that is bundled with this package in the file LICENSE, and is        |
   | available through the world-wide-web at the following url:           |
   | http://www.zend.com/license/2_00.txt.                                |
   | If you did not receive a copy of the Zend license and are unable to  |
   | obtain it through the world-wide-web, please send a note to          |
   | license@zend.com so we can mail you a copy immediately.              |
   +----------------------------------------------------------------------+
   | Authors: krakjoe@php.net                                             |
   +----------------------------------------------------------------------+
*/

#ifndef ZEND_WEAKREFS_H
#define ZEND_WEAKREFS_H

#include "zend_alloc.h"

BEGIN_EXTERN_C()

extern ZEND_API zend_class_entry *zend_ce_weakref;

void zend_register_weakref_ce(void);

void zend_weakrefs_init(void);
void zend_weakrefs_shutdown(void);

ZEND_API void zend_weakrefs_notify(zend_object *object);

ZEND_API zval *zend_weakrefs_hash_add(HashTable *ht, zend_object *key, zval *pData);
ZEND_API zend_result zend_weakrefs_hash_del(HashTable *ht, zend_object *key);
static zend_always_inline void *zend_weakrefs_hash_add_ptr(HashTable *ht, zend_object *key, void *ptr) {
	zval tmp, *zv;
	ZVAL_PTR(&tmp, ptr);
	if ((zv = zend_weakrefs_hash_add(ht, key, &tmp))) {
		return Z_PTR_P(zv);
	} else {
		return NULL;
	}
}
ZEND_API void zend_weakrefs_hash_clean(HashTable *ht);
static zend_always_inline void zend_weakrefs_hash_destroy(HashTable *ht) {
	zend_weakrefs_hash_clean(ht);
	ZEND_ASSERT(zend_hash_num_elements(ht) == 0);
	zend_hash_destroy(ht);
}

/* Because php uses the raw numbers as a hash function, raw pointers will lead to hash collisions.
 * We have a guarantee that the lowest ZEND_MM_ALIGNED_OFFSET_LOG2 bits of a pointer are zero.
 *
 * E.g. On most 64-bit platforms, pointers are aligned to 8 bytes, so the least significant 3 bits are always 0 and can be discarded.
 *
 * NOTE: This function is only used for EG(weakrefs) and zend_weakmap->ht.
 * It is not used for the HashTable instances associated with ZEND_WEAKREF_TAG_HT tags (created in zend_weakref_register, which uses ZEND_WEAKREF_ENCODE instead).
 * The ZEND_WEAKREF_TAG_HT instances are used to disambiguate between multiple weak references to the same zend_object.
 */
static zend_always_inline zend_ulong zend_object_to_weakref_key(const zend_object *object)
{
	ZEND_ASSERT(((uintptr_t)object) % ZEND_MM_ALIGNMENT == 0);
	return ((uintptr_t) object) >> ZEND_MM_ALIGNMENT_LOG2;
}

static zend_always_inline zend_object *zend_weakref_key_to_object(zend_ulong key)
{
	return (zend_object *) (((uintptr_t) key) << ZEND_MM_ALIGNMENT_LOG2);
}

HashTable *zend_weakmap_get_gc(zend_object *object, zval **table, int *n);
HashTable *zend_weakmap_get_key_entry_gc(zend_object *object, zval **table, int *n);
HashTable *zend_weakmap_get_entry_gc(zend_object *object, zval **table, int *n);
HashTable *zend_weakmap_get_object_key_entry_gc(zend_object *object, zval **table, int *n);
HashTable *zend_weakmap_get_object_entry_gc(zend_object *object, zval **table, int *n);

END_EXTERN_C()

#endif

Zend/zend_sort.h000064400000003030151730543260007626 0ustar00/*
   +----------------------------------------------------------------------+
   | Zend Engine                                                          |
   +----------------------------------------------------------------------+
   | Copyright (c) Zend Technologies Ltd. (http://www.zend.com)           |
   +----------------------------------------------------------------------+
   | This source file is subject to version 2.00 of the Zend license,     |
   | that is bundled with this package in the file LICENSE, and is        |
   | available through the world-wide-web at the following url:           |
   | http://www.zend.com/license/2_00.txt.                                |
   | If you did not receive a copy of the Zend license and are unable to  |
   | obtain it through the world-wide-web, please send a note to          |
   | license@zend.com so we can mail you a copy immediately.              |
   +----------------------------------------------------------------------+
   | Authors: Xinchen Hui <laruence@php.net>                              |
   |          Sterling Hughes <sterling@php.net>                          |
   +----------------------------------------------------------------------+
*/

#ifndef ZEND_SORT_H
#define ZEND_SORT_H

#include "zend_types.h"

BEGIN_EXTERN_C()
ZEND_API void zend_sort(void *base, size_t nmemb, size_t siz, compare_func_t cmp, swap_func_t swp);
ZEND_API void zend_insert_sort(void *base, size_t nmemb, size_t siz, compare_func_t cmp, swap_func_t swp);
END_EXTERN_C()

#endif       /* ZEND_SORT_H */
Zend/zend_gdb.h000064400000002614151730543260007402 0ustar00/*
   +----------------------------------------------------------------------+
   | Zend Engine                                                          |
   +----------------------------------------------------------------------+
   | Copyright (c) Zend Technologies Ltd. (http://www.zend.com)           |
   +----------------------------------------------------------------------+
   | This source file is subject to version 2.00 of the Zend license,     |
   | that is bundled with this package in the file LICENSE, and is        |
   | available through the world-wide-web at the following url:           |
   | http://www.zend.com/license/2_00.txt.                                |
   | If you did not receive a copy of the Zend license and are unable to  |
   | obtain it through the world-wide-web, please send a note to          |
   | license@zend.com so we can mail you a copy immediately.              |
   +----------------------------------------------------------------------+
   | Authors: Dmitry Stogov <dmitry@zend.com>                             |
   |          Xinchen Hui <laruence@php.net>                              |
   +----------------------------------------------------------------------+
*/

#ifndef ZEND_GDB
#define ZEND_GDB

ZEND_API bool zend_gdb_register_code(const void *object, size_t size);
ZEND_API void zend_gdb_unregister_all(void);
ZEND_API bool zend_gdb_present(void);

#endif
Zend/zend_config.h000064400000000040151730543260010102 0ustar00#include <../main/php_config.h>
Zend/zend_strtod_int.h000064400000005472151730543260011044 0ustar00/*
   +----------------------------------------------------------------------+
   | Zend Engine                                                          |
   +----------------------------------------------------------------------+
   | Copyright (c) Zend Technologies Ltd. (http://www.zend.com)           |
   +----------------------------------------------------------------------+
   | This source file is subject to version 2.00 of the Zend license,     |
   | that is bundled with this package in the file LICENSE, and is        |
   | available through the world-wide-web at the following url:           |
   | http://www.zend.com/license/2_00.txt.                                |
   | If you did not receive a copy of the Zend license and are unable to  |
   | obtain it through the world-wide-web, please send a note to          |
   | license@zend.com so we can mail you a copy immediately.              |
   +----------------------------------------------------------------------+
   | Authors: Anatol Belski <ab@php.net>                                  |
   +----------------------------------------------------------------------+
*/

/* internal header; not supposed to be installed; FIXME but unfortunately is */

#ifndef ZEND_STRTOD_INT_H
#define ZEND_STRTOD_INT_H

#ifdef ZTS
#include <TSRM.h>
#endif

#include <stddef.h>
#include <stdio.h>
#include <ctype.h>
#include <stdarg.h>
#include <math.h>

#ifdef HAVE_SYS_TYPES_H
#include <sys/types.h>
#endif

/* TODO check to undef this option, this might
	make more perf. destroy_freelist()
	should be adapted then. */
#define Omit_Private_Memory 1

/* HEX strings aren't supported as per
	https://wiki.php.net/rfc/remove_hex_support_in_numeric_strings */
#define NO_HEX_FP 1

#include <inttypes.h>

#ifdef USE_LOCALE
#undef USE_LOCALE
#endif

#ifndef NO_INFNAN_CHECK
#define NO_INFNAN_CHECK
#endif

#ifndef NO_ERRNO
#define NO_ERRNO
#endif

#ifdef WORDS_BIGENDIAN
#define IEEE_BIG_ENDIAN 1
#else
#define IEEE_LITTLE_ENDIAN 1
#endif

#if (defined(__APPLE__) || defined(__APPLE_CC__)) && (defined(__BIG_ENDIAN__) || defined(__LITTLE_ENDIAN__))
# if defined(__LITTLE_ENDIAN__)
#  undef WORDS_BIGENDIAN
# else
#  if defined(__BIG_ENDIAN__)
#   define WORDS_BIGENDIAN
#  endif
# endif
#endif

#if defined(__arm__) && !defined(__VFP_FP__)
/*
 *  * Although the CPU is little endian the FP has different
 *   * byte and word endianness. The byte order is still little endian
 *    * but the word order is big endian.
 *     */
#define IEEE_BIG_ENDIAN
#undef IEEE_LITTLE_ENDIAN
#endif

#ifdef __vax__
#define VAX
#undef IEEE_LITTLE_ENDIAN
#endif

#ifdef IEEE_LITTLE_ENDIAN
#define IEEE_8087 1
#endif

#ifdef IEEE_BIG_ENDIAN
#define IEEE_MC68k 1
#endif

#if defined(_MSC_VER)
#ifndef int32_t
#define int32_t __int32
#endif
#ifndef uint32_t
#define uint32_t unsigned __int32
#endif
#endif

#endif /* ZEND_STRTOD_INT_H */
Zend/zend.h000064400000042530151730543260006567 0ustar00/*
   +----------------------------------------------------------------------+
   | Zend Engine                                                          |
   +----------------------------------------------------------------------+
   | Copyright (c) Zend Technologies Ltd. (http://www.zend.com)           |
   +----------------------------------------------------------------------+
   | This source file is subject to version 2.00 of the Zend license,     |
   | that is bundled with this package in the file LICENSE, and is        |
   | available through the world-wide-web at the following url:           |
   | http://www.zend.com/license/2_00.txt.                                |
   | If you did not receive a copy of the Zend license and are unable to  |
   | obtain it through the world-wide-web, please send a note to          |
   | license@zend.com so we can mail you a copy immediately.              |
   +----------------------------------------------------------------------+
   | Authors: Andi Gutmans <andi@php.net>                                 |
   |          Zeev Suraski <zeev@php.net>                                 |
   +----------------------------------------------------------------------+
*/

#ifndef ZEND_H
#define ZEND_H

#define ZEND_VERSION "4.5.4"

#define ZEND_ENGINE_3

#include "zend_types.h"
#include "zend_map_ptr.h"
#include "zend_errors.h"
#include "zend_alloc.h"
#include "zend_llist.h"
#include "zend_string.h"
#include "zend_hash.h"
#include "zend_ast.h"
#include "zend_gc.h"
#include "zend_variables.h"
#include "zend_iterators.h"
#include "zend_stream.h"
#include "zend_smart_str_public.h"
#include "zend_smart_string_public.h"
#include "zend_signal.h"
#include "zend_max_execution_timer.h"

#define zend_sprintf sprintf

#define HANDLE_BLOCK_INTERRUPTIONS()		ZEND_SIGNAL_BLOCK_INTERRUPTIONS()
#define HANDLE_UNBLOCK_INTERRUPTIONS()		ZEND_SIGNAL_UNBLOCK_INTERRUPTIONS()

#define INTERNAL_FUNCTION_PARAMETERS zend_execute_data *execute_data, zval *return_value
#define INTERNAL_FUNCTION_PARAM_PASSTHRU execute_data, return_value

#define USED_RET() \
	(!EX(prev_execute_data) || \
	 !ZEND_USER_CODE(EX(prev_execute_data)->func->common.type) || \
	 (EX(prev_execute_data)->opline->result_type != IS_UNUSED))

#ifdef ZEND_ENABLE_STATIC_TSRMLS_CACHE
#define ZEND_TSRMG TSRMG_STATIC
#define ZEND_TSRMG_FAST TSRMG_FAST_STATIC
#define ZEND_TSRMLS_CACHE_EXTERN() TSRMLS_CACHE_EXTERN()
#define ZEND_TSRMLS_CACHE_DEFINE() TSRMLS_CACHE_DEFINE()
#define ZEND_TSRMLS_CACHE_UPDATE() TSRMLS_CACHE_UPDATE()
#define ZEND_TSRMLS_CACHE TSRMLS_CACHE
#else
#define ZEND_TSRMG TSRMG
#define ZEND_TSRMG_FAST TSRMG_FAST
#define ZEND_TSRMLS_CACHE_EXTERN()
#define ZEND_TSRMLS_CACHE_DEFINE()
#define ZEND_TSRMLS_CACHE_UPDATE()
#define ZEND_TSRMLS_CACHE
#endif

#ifndef ZEND_COMPILE_DL_EXT
TSRMLS_MAIN_CACHE_EXTERN()
#else
ZEND_TSRMLS_CACHE_EXTERN()
#endif

struct _zend_serialize_data;
struct _zend_unserialize_data;

typedef struct _zend_serialize_data zend_serialize_data;
typedef struct _zend_unserialize_data zend_unserialize_data;

typedef struct _zend_class_name {
	zend_string *name;
	zend_string *lc_name;
} zend_class_name;

typedef struct _zend_trait_method_reference {
	zend_string *method_name;
	zend_string *class_name;
} zend_trait_method_reference;

typedef struct _zend_trait_precedence {
	zend_trait_method_reference trait_method;
	uint32_t num_excludes;
	zend_string *exclude_class_names[1];
} zend_trait_precedence;

typedef struct _zend_trait_alias {
	zend_trait_method_reference trait_method;

	/**
	* name for method to be added
	*/
	zend_string *alias;

	/**
	* modifiers to be set on trait method
	*/
	uint32_t modifiers;
} zend_trait_alias;

typedef struct _zend_class_mutable_data {
	zval      *default_properties_table;
	HashTable *constants_table;
	uint32_t   ce_flags;
	HashTable *backed_enum_table;
} zend_class_mutable_data;

typedef struct _zend_class_dependency {
	zend_string      *name;
	zend_class_entry *ce;
} zend_class_dependency;

typedef struct _zend_inheritance_cache_entry zend_inheritance_cache_entry;

typedef struct _zend_error_info {
	int type;
	uint32_t lineno;
	zend_string *filename;
	zend_string *message;
} zend_error_info;

struct _zend_inheritance_cache_entry {
	zend_inheritance_cache_entry *next;
	zend_class_entry             *ce;
	zend_class_entry             *parent;
	zend_class_dependency        *dependencies;
	uint32_t                      dependencies_count;
	uint32_t                      num_warnings;
	zend_error_info             **warnings;
	zend_class_entry             *traits_and_interfaces[1];
};

struct _zend_class_entry {
	char type;
	zend_string *name;
	/* class_entry or string depending on ZEND_ACC_LINKED */
	union {
		zend_class_entry *parent;
		zend_string *parent_name;
	};
	int refcount;
	uint32_t ce_flags;

	int default_properties_count;
	int default_static_members_count;
	zval *default_properties_table;
	zval *default_static_members_table;
	ZEND_MAP_PTR_DEF(zval *, static_members_table);
	HashTable function_table;
	HashTable properties_info;
	HashTable constants_table;

	ZEND_MAP_PTR_DEF(zend_class_mutable_data*, mutable_data);
	zend_inheritance_cache_entry *inheritance_cache;

	struct _zend_property_info **properties_info_table;

	zend_function *constructor;
	zend_function *destructor;
	zend_function *clone;
	zend_function *__get;
	zend_function *__set;
	zend_function *__unset;
	zend_function *__isset;
	zend_function *__call;
	zend_function *__callstatic;
	zend_function *__tostring;
	zend_function *__debugInfo;
	zend_function *__serialize;
	zend_function *__unserialize;

	const zend_object_handlers *default_object_handlers;

	/* allocated only if class implements Iterator or IteratorAggregate interface */
	zend_class_iterator_funcs *iterator_funcs_ptr;
	/* allocated only if class implements ArrayAccess interface */
	zend_class_arrayaccess_funcs *arrayaccess_funcs_ptr;

	/* handlers */
	union {
		zend_object* (*create_object)(zend_class_entry *class_type);
		int (*interface_gets_implemented)(zend_class_entry *iface, zend_class_entry *class_type); /* a class implements this interface */
	};
	zend_object_iterator *(*get_iterator)(zend_class_entry *ce, zval *object, int by_ref);
	zend_function *(*get_static_method)(zend_class_entry *ce, zend_string* method);

	/* serializer callbacks */
	int (*serialize)(zval *object, unsigned char **buffer, size_t *buf_len, zend_serialize_data *data);
	int (*unserialize)(zval *object, zend_class_entry *ce, const unsigned char *buf, size_t buf_len, zend_unserialize_data *data);

	uint32_t num_interfaces;
	uint32_t num_traits;
	uint32_t num_hooked_props;
	uint32_t num_hooked_prop_variance_checks;

	/* class_entry or string(s) depending on ZEND_ACC_LINKED */
	union {
		zend_class_entry **interfaces;
		zend_class_name *interface_names;
	};

	zend_class_name *trait_names;
	zend_trait_alias **trait_aliases;
	zend_trait_precedence **trait_precedences;
	HashTable *attributes;

	uint32_t enum_backing_type;
	HashTable *backed_enum_table;

	zend_string *doc_comment;

	union {
		struct {
			zend_string *filename;
			uint32_t line_start;
			uint32_t line_end;
		} user;
		struct {
			const struct _zend_function_entry *builtin_functions;
			struct _zend_module_entry *module;
		} internal;
	} info;
};

typedef union {
	zend_max_align_t align;
	uint64_t opaque[5];
} zend_random_bytes_insecure_state;

typedef struct _zend_utility_functions {
	void (*error_function)(int type, zend_string *error_filename, const uint32_t error_lineno, zend_string *message);
	size_t (*printf_function)(const char *format, ...) ZEND_ATTRIBUTE_PTR_FORMAT(printf, 1, 2);
	size_t (*write_function)(const char *str, size_t str_length);
	FILE *(*fopen_function)(zend_string *filename, zend_string **opened_path);
	void (*message_handler)(zend_long message, const void *data);
	zval *(*get_configuration_directive)(zend_string *name);
	void (*ticks_function)(int ticks);
	void (*on_timeout)(int seconds);
	zend_result (*stream_open_function)(zend_file_handle *handle);
	void (*printf_to_smart_string_function)(smart_string *buf, const char *format, va_list ap);
	void (*printf_to_smart_str_function)(smart_str *buf, const char *format, va_list ap);
	char *(*getenv_function)(const char *name, size_t name_len);
	zend_string *(*resolve_path_function)(zend_string *filename);
	zend_result (*random_bytes_function)(void *bytes, size_t size, char *errstr, size_t errstr_size);
	void (*random_bytes_insecure_function)(zend_random_bytes_insecure_state *state, void *bytes, size_t size);
} zend_utility_functions;

typedef struct _zend_utility_values {
	bool html_errors;
} zend_utility_values;

typedef size_t (*zend_write_func_t)(const char *str, size_t str_length);

#define zend_bailout()		_zend_bailout(__FILE__, __LINE__)

#define zend_try												\
	{															\
		JMP_BUF *__orig_bailout = EG(bailout);					\
		JMP_BUF __bailout;										\
																\
		EG(bailout) = &__bailout;								\
		if (SETJMP(__bailout)==0) {
#define zend_catch												\
		} else {												\
			EG(bailout) = __orig_bailout;
#define zend_end_try()											\
		}														\
		EG(bailout) = __orig_bailout;							\
	}
#define zend_first_try		EG(bailout)=NULL;	zend_try

BEGIN_EXTERN_C()
void zend_startup(zend_utility_functions *utility_functions);
void zend_shutdown(void);
void zend_register_standard_ini_entries(void);
zend_result zend_post_startup(void);
void zend_set_utility_values(zend_utility_values *utility_values);
void zend_unload_modules(void);

ZEND_API ZEND_COLD ZEND_NORETURN void _zend_bailout(const char *filename, uint32_t lineno);
ZEND_API size_t zend_get_page_size(void);

ZEND_API size_t zend_vspprintf(char **pbuf, size_t max_len, const char *format, va_list ap);
ZEND_API size_t zend_spprintf(char **message, size_t max_len, const char *format, ...) ZEND_ATTRIBUTE_FORMAT(printf, 3, 4);
ZEND_API zend_string *zend_vstrpprintf(size_t max_len, const char *format, va_list ap);
ZEND_API zend_string *zend_strpprintf(size_t max_len, const char *format, ...) ZEND_ATTRIBUTE_FORMAT(printf, 2, 3);

/* Same as zend_spprintf and zend_strpprintf, without checking of format validity.
 * For use with custom printf specifiers such as %H. */
ZEND_API size_t zend_spprintf_unchecked(char **message, size_t max_len, const char *format, ...);
ZEND_API zend_string *zend_strpprintf_unchecked(size_t max_len, const char *format, ...);

ZEND_API const char *get_zend_version(void);
ZEND_API bool zend_make_printable_zval(zval *expr, zval *expr_copy);
ZEND_API size_t zend_print_zval(zval *expr, int indent);
ZEND_API void zend_print_zval_r(zval *expr, int indent);
ZEND_API zend_string *zend_print_zval_r_to_str(zval *expr, int indent);
ZEND_API void zend_print_flat_zval_r(zval *expr);
void zend_print_flat_zval_r_to_buf(smart_str *str, zval *expr);

static zend_always_inline size_t zend_print_variable(zval *var) {
	return zend_print_zval(var, 0);
}

ZEND_API ZEND_COLD void zend_output_debug_string(bool trigger_break, const char *format, ...) ZEND_ATTRIBUTE_FORMAT(printf, 2, 3);

ZEND_API void zend_activate(void);
ZEND_API void zend_deactivate(void);
ZEND_API void zend_call_destructors(void);
ZEND_API void zend_activate_modules(void);
ZEND_API void zend_deactivate_modules(void);
ZEND_API void zend_post_deactivate_modules(void);

ZEND_API void free_estring(char **str_p);

END_EXTERN_C()

/* output support */
#define ZEND_WRITE(str, str_len)		zend_write((str), (str_len))
#define ZEND_WRITE_EX(str, str_len)		write_func((str), (str_len))
#define ZEND_PUTS(str)					zend_write((str), strlen((str)))
#define ZEND_PUTS_EX(str)				write_func((str), strlen((str)))
#define ZEND_PUTC(c)					zend_write(&(c), 1)

BEGIN_EXTERN_C()
extern ZEND_API size_t (*zend_printf)(const char *format, ...) ZEND_ATTRIBUTE_PTR_FORMAT(printf, 1, 2);
extern ZEND_API zend_write_func_t zend_write;
extern ZEND_API FILE *(*zend_fopen)(zend_string *filename, zend_string **opened_path);
extern ZEND_API void (*zend_ticks_function)(int ticks);

/* Called by the VM in certain places like at the loop header, user function
 * entry, and after internal function calls, if EG(vm_interrupt) has been set.
 *
 * If this is used to switch the EG(current_execute_data), such as implementing
 * a coroutine scheduler, then it needs to check the top frame to see if it's
 * an internal function. If an internal function is on top, then the frame
 * shouldn't be switched away.
 *
 * Prior to PHP 8.0, this check was not necessary. In PHP 8.0,
 * zend_call_function started calling zend_interrupt_function, and in 8.4 the
 * DO_*CALL* opcodes started calling the zend_interrupt_function while the
 * internal frame is still on top.
 */
extern ZEND_API void (*zend_interrupt_function)(zend_execute_data *execute_data);

extern ZEND_API void (*zend_error_cb)(int type, zend_string *error_filename, const uint32_t error_lineno, zend_string *message);
extern ZEND_API void (*zend_on_timeout)(int seconds);
extern ZEND_API zend_result (*zend_stream_open_function)(zend_file_handle *handle);
extern void (*zend_printf_to_smart_string)(smart_string *buf, const char *format, va_list ap);
extern void (*zend_printf_to_smart_str)(smart_str *buf, const char *format, va_list ap);
extern ZEND_API char *(*zend_getenv)(const char *name, size_t name_len);
extern ZEND_API zend_string *(*zend_resolve_path)(zend_string *filename);
/* Generate 'size' random bytes into 'bytes' with the OS CSPRNG. */
extern ZEND_ATTRIBUTE_NONNULL ZEND_API zend_result (*zend_random_bytes)(
		void *bytes, size_t size, char *errstr, size_t errstr_size);
/* Generate 'size' random bytes into 'bytes' with a general purpose PRNG (not
 * crypto safe). 'state' must be zeroed before the first call and can be reused.
 */
extern ZEND_ATTRIBUTE_NONNULL ZEND_API void (*zend_random_bytes_insecure)(
		zend_random_bytes_insecure_state *state, void *bytes, size_t size);

/* These two callbacks are especially for opcache */
extern ZEND_API zend_result (*zend_post_startup_cb)(void);
extern ZEND_API void (*zend_post_shutdown_cb)(void);

extern ZEND_API void (*zend_accel_schedule_restart_hook)(int reason);

ZEND_API ZEND_COLD void zend_error(int type, const char *format, ...) ZEND_ATTRIBUTE_FORMAT(printf, 2, 3);
ZEND_API ZEND_COLD ZEND_NORETURN void zend_error_noreturn(int type, const char *format, ...) ZEND_ATTRIBUTE_FORMAT(printf, 2, 3);
ZEND_API ZEND_COLD ZEND_NORETURN void zend_error_noreturn_unchecked(int type, const char *format, ...);
/* For custom format specifiers like H */
ZEND_API ZEND_COLD void zend_error_unchecked(int type, const char *format, ...);
/* If filename is NULL the default filename is used. */
ZEND_API ZEND_COLD void zend_error_at(int type, zend_string *filename, uint32_t lineno, const char *format, ...) ZEND_ATTRIBUTE_FORMAT(printf, 4, 5);
ZEND_API ZEND_COLD ZEND_NORETURN void zend_error_at_noreturn(int type, zend_string *filename, uint32_t lineno, const char *format, ...) ZEND_ATTRIBUTE_FORMAT(printf, 4, 5);
ZEND_API ZEND_COLD void zend_error_zstr(int type, zend_string *message);
ZEND_API ZEND_COLD void zend_error_zstr_at(int type, zend_string *filename, uint32_t lineno, zend_string *message);

ZEND_API ZEND_COLD void zend_throw_error(zend_class_entry *exception_ce, const char *format, ...) ZEND_ATTRIBUTE_FORMAT(printf, 2, 3);
ZEND_API ZEND_COLD void zend_type_error(const char *format, ...) ZEND_ATTRIBUTE_FORMAT(printf, 1, 2);
ZEND_API ZEND_COLD void zend_argument_count_error(const char *format, ...) ZEND_ATTRIBUTE_FORMAT(printf, 1, 2);
ZEND_API ZEND_COLD void zend_value_error(const char *format, ...) ZEND_ATTRIBUTE_FORMAT(printf, 1, 2);
/* type should be one of the BP_VAR_* constants, only special messages happen for isset/empty and unset */
ZEND_API ZEND_COLD void zend_illegal_container_offset(const zend_string *container, const zval *offset, int type);

ZEND_COLD void zenderror(const char *error);

/* For internal C errors */
ZEND_API ZEND_COLD ZEND_NORETURN void zend_strerror_noreturn(int type, int errn, const char *message);

/* The following #define is used for code duality in PHP for Engine 1 & 2 */
#define ZEND_STANDARD_CLASS_DEF_PTR zend_standard_class_def
extern ZEND_API zend_class_entry *zend_standard_class_def;
extern ZEND_API zend_utility_values zend_uv;

/* If DTrace is available and enabled */
extern ZEND_API bool zend_dtrace_enabled;
END_EXTERN_C()

#define ZEND_UV(name) (zend_uv.name)

BEGIN_EXTERN_C()
ZEND_API void zend_message_dispatcher(zend_long message, const void *data);

ZEND_API zval *zend_get_configuration_directive(zend_string *name);
END_EXTERN_C()

/* Messages for applications of Zend */
#define ZMSG_FAILED_INCLUDE_FOPEN		1L
#define ZMSG_FAILED_REQUIRE_FOPEN		2L
#define ZMSG_FAILED_HIGHLIGHT_FOPEN		3L
#define ZMSG_MEMORY_LEAK_DETECTED		4L
#define ZMSG_MEMORY_LEAK_REPEATED		5L
#define ZMSG_LOG_SCRIPT_NAME			6L
#define ZMSG_MEMORY_LEAKS_GRAND_TOTAL	7L

typedef enum {
	EH_NORMAL = 0,
	EH_THROW
} zend_error_handling_t;

typedef struct {
	zend_error_handling_t  handling;
	zend_class_entry       *exception;
} zend_error_handling;

BEGIN_EXTERN_C()
ZEND_API void zend_save_error_handling(zend_error_handling *current);
ZEND_API void zend_replace_error_handling(zend_error_handling_t error_handling, zend_class_entry *exception_class, zend_error_handling *current);
ZEND_API void zend_restore_error_handling(zend_error_handling *saved);
ZEND_API void zend_begin_record_errors(void);
ZEND_API void zend_emit_recorded_errors(void);
ZEND_API void zend_emit_recorded_errors_ex(uint32_t num_errors, zend_error_info **errors);
ZEND_API void zend_free_recorded_errors(void);
END_EXTERN_C()

#define DEBUG_BACKTRACE_PROVIDE_OBJECT (1<<0)
#define DEBUG_BACKTRACE_IGNORE_ARGS    (1<<1)

#include "zend_object_handlers.h"
#include "zend_operators.h"

#endif /* ZEND_H */
Zend/zend_float.h000064400000036154151730543260007761 0ustar00/*
   +----------------------------------------------------------------------+
   | Zend Engine                                                          |
   +----------------------------------------------------------------------+
   | Copyright (c) Zend Technologies Ltd. (http://www.zend.com)           |
   +----------------------------------------------------------------------+
   | This source file is subject to version 2.00 of the Zend license,     |
   | that is bundled with this package in the file LICENSE, and is        |
   | available through the world-wide-web at the following url:           |
   | http://www.zend.com/license/2_00.txt.                                |
   | If you did not receive a copy of the Zend license and are unable to  |
   | obtain it through the world-wide-web, please send a note to          |
   | license@zend.com so we can mail you a copy immediately.              |
   +----------------------------------------------------------------------+
   | Authors: Christian Seiler <chris_se@gmx.net>                         |
   +----------------------------------------------------------------------+
*/

#ifndef ZEND_FLOAT_H
#define ZEND_FLOAT_H

#include "zend_portability.h"

BEGIN_EXTERN_C()

/*
  Define functions for FP initialization and de-initialization.
*/
extern ZEND_API void zend_init_fpu(void);
extern ZEND_API void zend_shutdown_fpu(void);
extern ZEND_API void zend_ensure_fpu_mode(void);

END_EXTERN_C()

/* Copy of the contents of xpfpa.h (which is under public domain)
   See http://wiki.php.net/rfc/rounding for details.

   Cross Platform Floating Point Arithmetics

   This header file defines several platform-dependent macros that ensure
   equal and deterministic floating point behaviour across several platforms,
   compilers and architectures.

   The current macros are currently only used on x86 and x86_64 architectures,
   on every other architecture, these macros expand to NOPs. This assumes that
   other architectures do not have an internal precision and the operand types
   define the computational precision of floating point operations. This
   assumption may be false, in that case, the author is interested in further
   details on the other platform.

   For further details, please visit:
   http://www.christian-seiler.de/projekte/fpmath/

   Version: 20090317 */

/*
 Implementation notes:

 x86_64:
  - Since all x86_64 compilers use SSE by default, we do not define these
    macros there. We ignore the compiler option -mfpmath=i387, because there is
    no reason to use it on x86_64.

 General:
  - It would be nice if one could detect whether SSE if used for math via some
    funky compiler defines and if so, make the macros go to NOPs. Any ideas
    on how to do that?

 MS Visual C:
  - Since MSVC users typically don't use autoconf or CMake, we will detect
    MSVC via compile time define.
*/

/* MSVC detection (MSVC people usually don't use autoconf) */
#if defined(_MSC_VER) && !defined(_WIN64)
#  define HAVE__CONTROLFP_S
#endif /* _MSC_VER */

#if defined(HAVE__CONTROLFP_S) && !defined(__x86_64__)

/* float.h defines _controlfp_s */
# include <float.h>

# define XPFPA_HAVE_CW 1
# define XPFPA_CW_DATATYPE \
            unsigned int

# define XPFPA_STORE_CW(vptr) do { \
            _controlfp_s((unsigned int *)(vptr), 0, 0); \
        } while (0)

# define XPFPA_RESTORE_CW(vptr) do { \
            unsigned int _xpfpa_fpu_cw; \
            _controlfp_s(&_xpfpa_fpu_cw, *((unsigned int *)(vptr)), _MCW_PC); \
        } while (0)

# define XPFPA_DECLARE \
            unsigned int _xpfpa_fpu_oldcw, _xpfpa_fpu_cw;

# define XPFPA_SWITCH_DOUBLE() do { \
            _controlfp_s(&_xpfpa_fpu_cw, 0, 0); \
            _xpfpa_fpu_oldcw = _xpfpa_fpu_cw; \
            _controlfp_s(&_xpfpa_fpu_cw, _PC_53, _MCW_PC); \
        } while (0)
# define XPFPA_SWITCH_SINGLE() do { \
            _controlfp_s(&_xpfpa_fpu_cw, 0, 0); \
            _xpfpa_fpu_oldcw = _xpfpa_fpu_cw; \
            _controlfp_s(&_xpfpa_fpu_cw, _PC_24, _MCW_PC); \
        } while (0)
/* NOTE: This only sets internal precision. MSVC does NOT support double-
   extended precision! */
# define XPFPA_SWITCH_DOUBLE_EXTENDED() do { \
            _controlfp_s(&_xpfpa_fpu_cw, 0, 0); \
            _xpfpa_fpu_oldcw = _xpfpa_fpu_cw; \
            _controlfp_s(&_xpfpa_fpu_cw, _PC_64, _MCW_PC); \
        } while (0)
# define XPFPA_RESTORE() \
            _controlfp_s(&_xpfpa_fpu_cw, _xpfpa_fpu_oldcw, _MCW_PC)
/* We do NOT use the volatile return trick since _controlfp_s is a function
   call and thus FP registers are saved in memory anyway. However, we do use
   a variable to ensure that the expression passed into val will be evaluated
   *before* switching back contexts. */
# define XPFPA_RETURN_DOUBLE(val) \
            do { \
                double _xpfpa_result = (val); \
                XPFPA_RESTORE(); \
                return _xpfpa_result; \
            } while (0)
# define XPFPA_RETURN_SINGLE(val) \
            do { \
                float _xpfpa_result = (val); \
                XPFPA_RESTORE(); \
                return _xpfpa_result; \
            } while (0)
/* This won't work, but we add a macro for it anyway. */
# define XPFPA_RETURN_DOUBLE_EXTENDED(val) \
            do { \
                long double _xpfpa_result = (val); \
                XPFPA_RESTORE(); \
                return _xpfpa_result; \
            } while (0)

#elif defined(HAVE__CONTROLFP) && !defined(__x86_64__)

/* float.h defines _controlfp */
# include <float.h>

# define XPFPA_DECLARE \
            unsigned int _xpfpa_fpu_oldcw;

# define XPFPA_HAVE_CW 1
# define XPFPA_CW_DATATYPE \
            unsigned int

# define XPFPA_STORE_CW(vptr) do { \
            *((unsigned int *)(vptr)) = _controlfp(0, 0); \
        } while (0)

# define XPFPA_RESTORE_CW(vptr) do { \
            _controlfp(*((unsigned int *)(vptr)), _MCW_PC); \
        } while (0)

# define XPFPA_SWITCH_DOUBLE() do { \
            _xpfpa_fpu_oldcw = _controlfp(0, 0); \
            _controlfp(_PC_53, _MCW_PC); \
        } while (0)
# define XPFPA_SWITCH_SINGLE() do { \
            _xpfpa_fpu_oldcw = _controlfp(0, 0); \
            _controlfp(_PC_24, _MCW_PC); \
        } while (0)
/* NOTE: This will only work as expected on MinGW. */
# define XPFPA_SWITCH_DOUBLE_EXTENDED() do { \
            _xpfpa_fpu_oldcw = _controlfp(0, 0); \
            _controlfp(_PC_64, _MCW_PC); \
        } while (0)
# define XPFPA_RESTORE() \
            _controlfp(_xpfpa_fpu_oldcw, _MCW_PC)
/* We do NOT use the volatile return trick since _controlfp is a function
   call and thus FP registers are saved in memory anyway. However, we do use
   a variable to ensure that the expression passed into val will be evaluated
   *before* switching back contexts. */
# define XPFPA_RETURN_DOUBLE(val) \
            do { \
                double _xpfpa_result = (val); \
                XPFPA_RESTORE(); \
                return _xpfpa_result; \
            } while (0)
# define XPFPA_RETURN_SINGLE(val) \
            do { \
                float _xpfpa_result = (val); \
                XPFPA_RESTORE(); \
                return _xpfpa_result; \
            } while (0)
/* This will only work on MinGW */
# define XPFPA_RETURN_DOUBLE_EXTENDED(val) \
            do { \
                long double _xpfpa_result = (val); \
                XPFPA_RESTORE(); \
                return _xpfpa_result; \
            } while (0)

#elif defined(HAVE__FPU_SETCW)  && !defined(__x86_64__) /* glibc systems */

/* fpu_control.h defines _FPU_[GS]ETCW */
# include <fpu_control.h>

# define XPFPA_DECLARE \
            fpu_control_t _xpfpa_fpu_oldcw, _xpfpa_fpu_cw;

# define XPFPA_HAVE_CW 1
# define XPFPA_CW_DATATYPE \
            fpu_control_t

# define XPFPA_STORE_CW(vptr) do { \
            _FPU_GETCW((*((fpu_control_t *)(vptr)))); \
        } while (0)

# define XPFPA_RESTORE_CW(vptr) do { \
            _FPU_SETCW((*((fpu_control_t *)(vptr)))); \
        } while (0)

# define XPFPA_SWITCH_DOUBLE() do { \
            _FPU_GETCW(_xpfpa_fpu_oldcw); \
            _xpfpa_fpu_cw = (_xpfpa_fpu_oldcw & ~_FPU_EXTENDED & ~_FPU_SINGLE) | _FPU_DOUBLE; \
            _FPU_SETCW(_xpfpa_fpu_cw); \
        } while (0)
# define XPFPA_SWITCH_SINGLE() do { \
            _FPU_GETCW(_xpfpa_fpu_oldcw); \
            _xpfpa_fpu_cw = (_xpfpa_fpu_oldcw & ~_FPU_EXTENDED & ~_FPU_DOUBLE) | _FPU_SINGLE; \
            _FPU_SETCW(_xpfpa_fpu_cw); \
        } while (0)
# define XPFPA_SWITCH_DOUBLE_EXTENDED()  do { \
            _FPU_GETCW(_xpfpa_fpu_oldcw); \
            _xpfpa_fpu_cw = (_xpfpa_fpu_oldcw & ~_FPU_SINGLE & ~_FPU_DOUBLE) | _FPU_EXTENDED; \
            _FPU_SETCW(_xpfpa_fpu_cw); \
        } while (0)
# define XPFPA_RESTORE() \
            _FPU_SETCW(_xpfpa_fpu_oldcw)
/* We use a temporary volatile variable (in a new block) in order to ensure
   that the optimizer does not mis-optimize the instructions. Also, a volatile
   variable ensures truncation to correct precision. */
# define XPFPA_RETURN_DOUBLE(val) \
            do { \
                volatile double _xpfpa_result = (val); \
                XPFPA_RESTORE(); \
                return _xpfpa_result; \
            } while (0)
# define XPFPA_RETURN_SINGLE(val) \
            do { \
                volatile float _xpfpa_result = (val); \
                XPFPA_RESTORE(); \
                return _xpfpa_result; \
            } while (0)
# define XPFPA_RETURN_DOUBLE_EXTENDED(val) \
            do { \
                volatile long double _xpfpa_result = (val); \
                XPFPA_RESTORE(); \
                return _xpfpa_result; \
            } while (0)

#elif defined(HAVE_FPSETPREC)  && !defined(__x86_64__) /* FreeBSD */

/* fpu_control.h defines _FPU_[GS]ETCW */
# include <machine/ieeefp.h>

# define XPFPA_DECLARE \
            fp_prec_t _xpfpa_fpu_oldprec;

# define XPFPA_HAVE_CW 1
# define XPFPA_CW_DATATYPE \
            fp_prec_t

# define XPFPA_STORE_CW(vptr) do { \
            *((fp_prec_t *)(vptr)) = fpgetprec(); \
        } while (0)

# define XPFPA_RESTORE_CW(vptr) do { \
            fpsetprec(*((fp_prec_t *)(vptr))); \
        } while (0)

# define XPFPA_SWITCH_DOUBLE() do { \
            _xpfpa_fpu_oldprec = fpgetprec(); \
            fpsetprec(FP_PD); \
        } while (0)
# define XPFPA_SWITCH_SINGLE() do { \
            _xpfpa_fpu_oldprec = fpgetprec(); \
            fpsetprec(FP_PS); \
        } while (0)
# define XPFPA_SWITCH_DOUBLE_EXTENDED() do { \
            _xpfpa_fpu_oldprec = fpgetprec(); \
            fpsetprec(FP_PE); \
        } while (0)
# define XPFPA_RESTORE() \
            fpsetprec(_xpfpa_fpu_oldprec)
/* We use a temporary volatile variable (in a new block) in order to ensure
   that the optimizer does not mis-optimize the instructions. Also, a volatile
   variable ensures truncation to correct precision. */
# define XPFPA_RETURN_DOUBLE(val) \
            do { \
                volatile double _xpfpa_result = (val); \
                XPFPA_RESTORE(); \
                return _xpfpa_result; \
            } while (0)
# define XPFPA_RETURN_SINGLE(val) \
            do { \
                volatile float _xpfpa_result = (val); \
                XPFPA_RESTORE(); \
                return _xpfpa_result; \
            } while (0)
# define XPFPA_RETURN_DOUBLE_EXTENDED(val) \
            do { \
                volatile long double _xpfpa_result = (val); \
                XPFPA_RESTORE(); \
                return _xpfpa_result; \
            } while (0)

#elif defined(HAVE_FPU_INLINE_ASM_X86) && !defined(__x86_64__)

/*
  Custom x86 inline assembler implementation.

  This implementation does not use predefined wrappers of the OS / compiler
  but rather uses x86/x87 inline assembler directly. Basic instructions:

  fnstcw - Store the FPU control word in a variable
  fldcw  - Load the FPU control word from a variable

  Bits (only bits 8 and 9 are relevant, bits 0 to 7 are for other things):
     0x0yy: Single precision
     0x1yy: Reserved
     0x2yy: Double precision
     0x3yy: Double-extended precision

  We use an unsigned int for the datatype. glibc sources add __mode__ (__HI__)
  attribute to it (HI stands for half-integer according to docs). It is unclear
  what the does exactly and how portable it is.

  The assembly syntax works with GNU CC, Intel CC and Sun CC.
*/

# define XPFPA_DECLARE \
            unsigned int _xpfpa_fpu_oldcw, _xpfpa_fpu_cw;

# define XPFPA_HAVE_CW 1
# define XPFPA_CW_DATATYPE \
            unsigned int

# define XPFPA_STORE_CW(vptr) do { \
            __asm__ __volatile__ ("fnstcw %0" : "=m" (*((unsigned int *)(vptr)))); \
        } while (0)

# define XPFPA_RESTORE_CW(vptr) do { \
            __asm__ __volatile__ ("fldcw %0" : : "m" (*((unsigned int *)(vptr)))); \
        } while (0)

# define XPFPA_SWITCH_DOUBLE() do { \
            __asm__ __volatile__ ("fnstcw %0" : "=m" (*&_xpfpa_fpu_oldcw)); \
            _xpfpa_fpu_cw = (_xpfpa_fpu_oldcw & ~0x100) | 0x200; \
            __asm__ __volatile__ ("fldcw %0" : : "m" (*&_xpfpa_fpu_cw)); \
        } while (0)
# define XPFPA_SWITCH_SINGLE() do { \
            __asm__ __volatile__ ("fnstcw %0" : "=m" (*&_xpfpa_fpu_oldcw)); \
            _xpfpa_fpu_cw = (_xpfpa_fpu_oldcw & ~0x300); \
            __asm__ __volatile__ ("fldcw %0" : : "m" (*&_xpfpa_fpu_cw)); \
        } while (0)
# define XPFPA_SWITCH_DOUBLE_EXTENDED() do { \
            __asm__ __volatile__ ("fnstcw %0" : "=m" (*&_xpfpa_fpu_oldcw)); \
            _xpfpa_fpu_cw = _xpfpa_fpu_oldcw | 0x300; \
            __asm__ __volatile__ ("fldcw %0" : : "m" (*&_xpfpa_fpu_cw)); \
        } while (0)
# define XPFPA_RESTORE() \
            __asm__ __volatile__ ("fldcw %0" : : "m" (*&_xpfpa_fpu_oldcw))
/* We use a temporary volatile variable (in a new block) in order to ensure
   that the optimizer does not mis-optimize the instructions. Also, a volatile
   variable ensures truncation to correct precision. */
# define XPFPA_RETURN_DOUBLE(val) \
            do { \
                volatile double _xpfpa_result = (val); \
                XPFPA_RESTORE(); \
                return _xpfpa_result; \
            } while (0)
# define XPFPA_RETURN_SINGLE(val) \
            do { \
                volatile float _xpfpa_result = (val); \
                XPFPA_RESTORE(); \
                return _xpfpa_result; \
            } while (0)
# define XPFPA_RETURN_DOUBLE_EXTENDED(val) \
            do { \
                volatile long double _xpfpa_result = (val); \
                XPFPA_RESTORE(); \
                return _xpfpa_result; \
            } while (0)

#else /* FPU CONTROL */

/*
  This is either not an x87 FPU or the inline assembly syntax was not
  recognized. In any case, default to NOPs for the macros and hope the
  generated code will behave as planned.
*/
# define XPFPA_DECLARE                      /* NOP */
# define XPFPA_HAVE_CW                      0
# define XPFPA_CW_DATATYPE                  unsigned int
# define XPFPA_STORE_CW(variable)           /* NOP */
# define XPFPA_RESTORE_CW(variable)         /* NOP */
# define XPFPA_SWITCH_DOUBLE()              /* NOP */
# define XPFPA_SWITCH_SINGLE()              /* NOP */
# define XPFPA_SWITCH_DOUBLE_EXTENDED()     /* NOP */
# define XPFPA_RESTORE()                    /* NOP */
# define XPFPA_RETURN_DOUBLE(val)           return (val)
# define XPFPA_RETURN_SINGLE(val)           return (val)
# define XPFPA_RETURN_DOUBLE_EXTENDED(val)  return (val)

#endif /* FPU CONTROL */

#endif
Zend/zend_attributes.h000064400000014675151730543270011047 0ustar00/*
   +----------------------------------------------------------------------+
   | Zend Engine                                                          |
   +----------------------------------------------------------------------+
   | Copyright (c) Zend Technologies Ltd. (http://www.zend.com)           |
   +----------------------------------------------------------------------+
   | This source file is subject to version 2.00 of the Zend license,     |
   | that is bundled with this package in the file LICENSE, and is        |
   | available through the world-wide-web at the following url:           |
   | http://www.zend.com/license/2_00.txt.                                |
   | If you did not receive a copy of the Zend license and are unable to  |
   | obtain it through the world-wide-web, please send a note to          |
   | license@zend.com so we can mail you a copy immediately.              |
   +----------------------------------------------------------------------+
   | Authors: Benjamin Eberlei <kontakt@beberlei.de>                      |
   |          Martin Schröder <m.schroeder2007@gmail.com>                 |
   +----------------------------------------------------------------------+
*/

#ifndef ZEND_ATTRIBUTES_H
#define ZEND_ATTRIBUTES_H

#include "zend_compile.h"
#include "zend_constants.h"

#define ZEND_ATTRIBUTE_TARGET_CLASS			(1<<0)
#define ZEND_ATTRIBUTE_TARGET_FUNCTION		(1<<1)
#define ZEND_ATTRIBUTE_TARGET_METHOD		(1<<2)
#define ZEND_ATTRIBUTE_TARGET_PROPERTY		(1<<3)
#define ZEND_ATTRIBUTE_TARGET_CLASS_CONST	(1<<4)
#define ZEND_ATTRIBUTE_TARGET_PARAMETER		(1<<5)
#define ZEND_ATTRIBUTE_TARGET_CONST			(1<<6)
#define ZEND_ATTRIBUTE_TARGET_ALL			((1<<7) - 1)
#define ZEND_ATTRIBUTE_IS_REPEATABLE		(1<<7)
#define ZEND_ATTRIBUTE_FLAGS				((1<<8) - 1)

/* Flags for zend_attribute.flags */
#define ZEND_ATTRIBUTE_PERSISTENT   (1<<0)
#define ZEND_ATTRIBUTE_STRICT_TYPES (1<<1)

#define ZEND_ATTRIBUTE_SIZE(argc) \
	(sizeof(zend_attribute) + sizeof(zend_attribute_arg) * (argc) - sizeof(zend_attribute_arg))

BEGIN_EXTERN_C()

extern ZEND_API zend_class_entry *zend_ce_attribute;
extern ZEND_API zend_class_entry *zend_ce_allow_dynamic_properties;
extern ZEND_API zend_class_entry *zend_ce_sensitive_parameter;
extern ZEND_API zend_class_entry *zend_ce_sensitive_parameter_value;
extern ZEND_API zend_class_entry *zend_ce_override;
extern ZEND_API zend_class_entry *zend_ce_deprecated;
extern ZEND_API zend_class_entry *zend_ce_nodiscard;
extern ZEND_API zend_class_entry *zend_ce_delayed_target_validation;

typedef struct {
	zend_string *name;
	zval value;
} zend_attribute_arg;

typedef struct _zend_attribute {
	zend_string *name;
	zend_string *lcname;
	/* Only non-null for internal attributes with validation errors that are
	 * delayed until runtime via #[\DelayedTargetValidation] */
	zend_string *validation_error;
	uint32_t flags;
	uint32_t lineno;
	/* Parameter offsets start at 1, everything else uses 0. */
	uint32_t offset;
	uint32_t argc;
	zend_attribute_arg args[1];
} zend_attribute;

typedef struct _zend_internal_attribute {
	zend_class_entry *ce;
	uint32_t flags;
	zend_string* (*validator)(zend_attribute *attr, uint32_t target, zend_class_entry *scope);
} zend_internal_attribute;

ZEND_API zend_attribute *zend_get_attribute(HashTable *attributes, zend_string *lcname);
ZEND_API zend_attribute *zend_get_attribute_str(HashTable *attributes, const char *str, size_t len);

ZEND_API zend_attribute *zend_get_parameter_attribute(HashTable *attributes, zend_string *lcname, uint32_t offset);
ZEND_API zend_attribute *zend_get_parameter_attribute_str(HashTable *attributes, const char *str, size_t len, uint32_t offset);

ZEND_API zend_result zend_get_attribute_value(zval *ret, zend_attribute *attr, uint32_t i, zend_class_entry *scope);
ZEND_API zend_result zend_get_attribute_object(zval *out, zend_class_entry *attribute_ce, zend_attribute *attribute_data, zend_class_entry *scope, zend_string *filename);

ZEND_API zend_string *zend_get_attribute_target_names(uint32_t targets);
ZEND_API bool zend_is_attribute_repeated(HashTable *attributes, zend_attribute *attr);

ZEND_API zend_internal_attribute *zend_mark_internal_attribute(zend_class_entry *ce);
ZEND_API zend_internal_attribute *zend_internal_attribute_register(zend_class_entry *ce, uint32_t flags);
ZEND_API zend_internal_attribute *zend_internal_attribute_get(zend_string *lcname);

ZEND_API zend_attribute *zend_add_attribute(
		HashTable **attributes, zend_string *name, uint32_t argc,
		uint32_t flags, uint32_t offset, uint32_t lineno);

uint32_t zend_attribute_attribute_get_flags(zend_attribute *attr, zend_class_entry *scope);

END_EXTERN_C()

static zend_always_inline zend_attribute *zend_add_class_attribute(zend_class_entry *ce, zend_string *name, uint32_t argc)
{
	uint32_t flags = ce->type != ZEND_USER_CLASS ? ZEND_ATTRIBUTE_PERSISTENT : 0;
	return zend_add_attribute(&ce->attributes, name, argc, flags, 0, 0);
}

static zend_always_inline zend_attribute *zend_add_function_attribute(zend_function *func, zend_string *name, uint32_t argc)
{
	uint32_t flags = func->common.type != ZEND_USER_FUNCTION ? ZEND_ATTRIBUTE_PERSISTENT : 0;
	return zend_add_attribute(&func->common.attributes, name, argc, flags, 0, 0);
}

static zend_always_inline zend_attribute *zend_add_parameter_attribute(zend_function *func, uint32_t offset, zend_string *name, uint32_t argc)
{
	uint32_t flags = func->common.type != ZEND_USER_FUNCTION ? ZEND_ATTRIBUTE_PERSISTENT : 0;
	return zend_add_attribute(&func->common.attributes, name, argc, flags, offset + 1, 0);
}

static zend_always_inline zend_attribute *zend_add_property_attribute(zend_class_entry *ce, zend_property_info *info, zend_string *name, uint32_t argc)
{
	uint32_t flags = ce->type != ZEND_USER_CLASS ? ZEND_ATTRIBUTE_PERSISTENT : 0;
	return zend_add_attribute(&info->attributes, name, argc, flags, 0, 0);
}

static zend_always_inline zend_attribute *zend_add_class_constant_attribute(zend_class_entry *ce, zend_class_constant *c, zend_string *name, uint32_t argc)
{
	uint32_t flags = ce->type != ZEND_USER_CLASS ? ZEND_ATTRIBUTE_PERSISTENT : 0;
	return zend_add_attribute(&c->attributes, name, argc, flags, 0, 0);
}

static zend_always_inline zend_attribute *zend_add_global_constant_attribute(zend_constant *c, zend_string *name, uint32_t argc)
{
	uint32_t flags = ZEND_CONSTANT_MODULE_NUMBER(c) == PHP_USER_CONSTANT ? 0 : ZEND_ATTRIBUTE_PERSISTENT;
	return zend_add_attribute(&c->attributes, name, argc, flags, 0, 0);
}

void zend_register_attribute_ce(void);
void zend_attributes_shutdown(void);

#endif
Zend/zend_closures.h000064400000004413151730543270010505 0ustar00/*
   +----------------------------------------------------------------------+
   | Zend Engine                                                          |
   +----------------------------------------------------------------------+
   | Copyright (c) Zend Technologies Ltd. (http://www.zend.com)           |
   +----------------------------------------------------------------------+
   | This source file is subject to version 2.00 of the Zend license,     |
   | that is bundled with this package in the file LICENSE, and is        |
   | available through the world-wide-web at the following url:           |
   | http://www.zend.com/license/2_00.txt.                                |
   | If you did not receive a copy of the Zend license and are unable to  |
   | obtain it through the world-wide-web, please send a note to          |
   | license@zend.com so we can mail you a copy immediately.              |
   +----------------------------------------------------------------------+
   | Authors: Christian Seiler <chris_se@gmx.net>                         |
   |          Dmitry Stogov <dmitry@php.net>                              |
   +----------------------------------------------------------------------+
*/

#ifndef ZEND_CLOSURES_H
#define ZEND_CLOSURES_H

#include "zend_types.h"

BEGIN_EXTERN_C()

/* This macro depends on zend_closure structure layout */
#define ZEND_CLOSURE_OBJECT(op_array) \
	((zend_object*)((char*)(op_array) - sizeof(zend_object)))

void zend_register_closure_ce(void);
void zend_closure_bind_var(zval *closure_zv, zend_string *var_name, zval *var);
void zend_closure_bind_var_ex(zval *closure_zv, uint32_t offset, zval *val);
void zend_closure_from_frame(zval *closure_zv, zend_execute_data *frame);

extern ZEND_API zend_class_entry *zend_ce_closure;

ZEND_API void zend_create_closure(zval *res, zend_function *op_array, zend_class_entry *scope, zend_class_entry *called_scope, zval *this_ptr);
ZEND_API void zend_create_fake_closure(zval *res, zend_function *op_array, zend_class_entry *scope, zend_class_entry *called_scope, zval *this_ptr);
ZEND_API zend_function *zend_get_closure_invoke_method(zend_object *obj);
ZEND_API const zend_function *zend_get_closure_method_def(zend_object *obj);
ZEND_API zval* zend_get_closure_this_ptr(zval *obj);

END_EXTERN_C()

#endif
Zend/zend_generators_arginfo.h000064400000005511151730543270012524 0ustar00/* This is a generated file, edit the .stub.php file instead.
 * Stub hash: d376e984db0db6ccd9356f632f9d7e1382b2afb7 */

ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_class_Generator_rewind, 0, 0, IS_VOID, 0)
ZEND_END_ARG_INFO()

ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_class_Generator_valid, 0, 0, _IS_BOOL, 0)
ZEND_END_ARG_INFO()

ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_class_Generator_current, 0, 0, IS_MIXED, 0)
ZEND_END_ARG_INFO()

#define arginfo_class_Generator_key arginfo_class_Generator_current

#define arginfo_class_Generator_next arginfo_class_Generator_rewind

ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_class_Generator_send, 0, 1, IS_MIXED, 0)
	ZEND_ARG_TYPE_INFO(0, value, IS_MIXED, 0)
ZEND_END_ARG_INFO()

ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_class_Generator_throw, 0, 1, IS_MIXED, 0)
	ZEND_ARG_OBJ_INFO(0, exception, Throwable, 0)
ZEND_END_ARG_INFO()

#define arginfo_class_Generator_getReturn arginfo_class_Generator_current

ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_class_Generator___debugInfo, 0, 0, IS_ARRAY, 0)
ZEND_END_ARG_INFO()

ZEND_METHOD(Generator, rewind);
ZEND_METHOD(Generator, valid);
ZEND_METHOD(Generator, current);
ZEND_METHOD(Generator, key);
ZEND_METHOD(Generator, next);
ZEND_METHOD(Generator, send);
ZEND_METHOD(Generator, throw);
ZEND_METHOD(Generator, getReturn);
ZEND_METHOD(Generator, __debugInfo);

static const zend_function_entry class_Generator_methods[] = {
	ZEND_ME(Generator, rewind, arginfo_class_Generator_rewind, ZEND_ACC_PUBLIC)
	ZEND_ME(Generator, valid, arginfo_class_Generator_valid, ZEND_ACC_PUBLIC)
	ZEND_ME(Generator, current, arginfo_class_Generator_current, ZEND_ACC_PUBLIC)
	ZEND_ME(Generator, key, arginfo_class_Generator_key, ZEND_ACC_PUBLIC)
	ZEND_ME(Generator, next, arginfo_class_Generator_next, ZEND_ACC_PUBLIC)
	ZEND_ME(Generator, send, arginfo_class_Generator_send, ZEND_ACC_PUBLIC)
	ZEND_ME(Generator, throw, arginfo_class_Generator_throw, ZEND_ACC_PUBLIC)
	ZEND_ME(Generator, getReturn, arginfo_class_Generator_getReturn, ZEND_ACC_PUBLIC)
	ZEND_ME(Generator, __debugInfo, arginfo_class_Generator___debugInfo, ZEND_ACC_PUBLIC)
	ZEND_FE_END
};

static zend_class_entry *register_class_Generator(zend_class_entry *class_entry_Iterator)
{
	zend_class_entry ce, *class_entry;

	INIT_CLASS_ENTRY(ce, "Generator", class_Generator_methods);
	class_entry = zend_register_internal_class_with_flags(&ce, NULL, ZEND_ACC_FINAL|ZEND_ACC_NO_DYNAMIC_PROPERTIES|ZEND_ACC_NOT_SERIALIZABLE);
	zend_class_implements(class_entry, 1, class_entry_Iterator);

	return class_entry;
}

static zend_class_entry *register_class_ClosedGeneratorException(zend_class_entry *class_entry_Exception)
{
	zend_class_entry ce, *class_entry;

	INIT_CLASS_ENTRY(ce, "ClosedGeneratorException", NULL);
	class_entry = zend_register_internal_class_with_flags(&ce, class_entry_Exception, 0);

	return class_entry;
}
Zend/zend_smart_string.h000064400000010354151730543270011363 0ustar00/*
   +----------------------------------------------------------------------+
   | Copyright (c) The PHP Group                                          |
   +----------------------------------------------------------------------+
   | This source file is subject to version 3.01 of the PHP license,      |
   | that is bundled with this package in the file LICENSE, and is        |
   | available through the world-wide-web at the following url:           |
   | https://www.php.net/license/3_01.txt                                 |
   | If you did not receive a copy of the PHP license and are unable to   |
   | obtain it through the world-wide-web, please send a note to          |
   | license@php.net so we can mail you a copy immediately.               |
   +----------------------------------------------------------------------+
   | Author: Sascha Schumann <sascha@schumann.cx>                         |
   |         Xinchen Hui <laruence@php.net>                               |
   +----------------------------------------------------------------------+
 */

#ifndef PHP_SMART_STRING_H
#define PHP_SMART_STRING_H

#include "zend_smart_string_public.h"

#include <stdlib.h>
#include <zend.h>

/* wrapper */

#define smart_string_appends_ex(str, src, what) \
	smart_string_appendl_ex((str), (src), strlen(src), (what))
#define smart_string_appends(str, src) \
	smart_string_appendl((str), (src), strlen(src))
#define smart_string_append_ex(str, src, what) \
	smart_string_appendl_ex((str), ((smart_string *)(src))->c, \
		((smart_string *)(src))->len, (what));
#define smart_string_sets(str, src) \
	smart_string_setl((str), (src), strlen(src));

#define smart_string_appendc(str, c) \
	smart_string_appendc_ex((str), (c), 0)
#define smart_string_free(s) \
	smart_string_free_ex((s), 0)
#define smart_string_appendl(str, src, len) \
	smart_string_appendl_ex((str), (src), (len), 0)
#define smart_string_append(str, src) \
	smart_string_append_ex((str), (src), 0)
#define smart_string_append_long(str, val) \
	smart_string_append_long_ex((str), (val), 0)
#define smart_string_append_unsigned(str, val) \
	smart_string_append_unsigned_ex((str), (val), 0)

ZEND_API void smart_string_append_printf(smart_string *dest, const char *format, ...)
	ZEND_ATTRIBUTE_FORMAT(printf, 2, 3);

ZEND_API void ZEND_FASTCALL _smart_string_alloc_persistent(smart_string *str, size_t len);
ZEND_API void ZEND_FASTCALL _smart_string_alloc(smart_string *str, size_t len);

static zend_always_inline size_t smart_string_alloc(smart_string *str, size_t len, bool persistent) {
	if (UNEXPECTED(!str->c) || UNEXPECTED(len >= str->a - str->len)) {
		if (persistent) {
			_smart_string_alloc_persistent(str, len);
		} else {
			_smart_string_alloc(str, len);
		}
	}
	return str->len + len;
}

static zend_always_inline void smart_string_free_ex(smart_string *str, bool persistent) {
	if (str->c) {
		pefree(str->c, persistent);
		str->c = NULL;
	}
	str->a = str->len = 0;
}

static zend_always_inline void smart_string_0(smart_string *str) {
	if (str->c) {
		str->c[str->len] = '\0';
	}
}

static zend_always_inline void smart_string_appendc_ex(smart_string *dest, char ch, bool persistent) {
	dest->len = smart_string_alloc(dest, 1, persistent);
	dest->c[dest->len - 1] = ch;
}

static zend_always_inline void smart_string_appendl_ex(smart_string *dest, const char *str, size_t len, bool persistent) {
	size_t new_len = smart_string_alloc(dest, len, persistent);
	memcpy(dest->c + dest->len, str, len);
	dest->len = new_len;

}

static zend_always_inline void smart_string_append_long_ex(smart_string *dest, zend_long num, bool persistent) {
	char buf[32];
	char *result = zend_print_long_to_buf(buf + sizeof(buf) - 1, num);
	smart_string_appendl_ex(dest, result, buf + sizeof(buf) - 1 - result, persistent);
}

static zend_always_inline void smart_string_append_unsigned_ex(smart_string *dest, zend_ulong num, bool persistent) {
	char buf[32];
	char *result = zend_print_ulong_to_buf(buf + sizeof(buf) - 1, num);
	smart_string_appendl_ex(dest, result, buf + sizeof(buf) - 1 - result, persistent);
}

static zend_always_inline void smart_string_setl(smart_string *dest, char *src, size_t len) {
	dest->len = len;
	dest->a = len + 1;
	dest->c = src;
}

static zend_always_inline void smart_string_reset(smart_string *str) {
	str->len = 0;
}

#endif
Zend/zend_closures_arginfo.h000064400000004403151730543270012211 0ustar00/* This is a generated file, edit the .stub.php file instead.
 * Stub hash: e0626e52adb2d38dad1140c1a28cc7774cc84500 */

ZEND_BEGIN_ARG_INFO_EX(arginfo_class_Closure___construct, 0, 0, 0)
ZEND_END_ARG_INFO()

ZEND_BEGIN_ARG_WITH_RETURN_OBJ_INFO_EX(arginfo_class_Closure_bind, 0, 2, Closure, 1)
	ZEND_ARG_OBJ_INFO(0, closure, Closure, 0)
	ZEND_ARG_TYPE_INFO(0, newThis, IS_OBJECT, 1)
	ZEND_ARG_TYPE_MASK(0, newScope, MAY_BE_OBJECT|MAY_BE_STRING|MAY_BE_NULL, "\"static\"")
ZEND_END_ARG_INFO()

ZEND_BEGIN_ARG_WITH_RETURN_OBJ_INFO_EX(arginfo_class_Closure_bindTo, 0, 1, Closure, 1)
	ZEND_ARG_TYPE_INFO(0, newThis, IS_OBJECT, 1)
	ZEND_ARG_TYPE_MASK(0, newScope, MAY_BE_OBJECT|MAY_BE_STRING|MAY_BE_NULL, "\"static\"")
ZEND_END_ARG_INFO()

ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_class_Closure_call, 0, 1, IS_MIXED, 0)
	ZEND_ARG_TYPE_INFO(0, newThis, IS_OBJECT, 0)
	ZEND_ARG_VARIADIC_TYPE_INFO(0, args, IS_MIXED, 0)
ZEND_END_ARG_INFO()

ZEND_BEGIN_ARG_WITH_RETURN_OBJ_INFO_EX(arginfo_class_Closure_fromCallable, 0, 1, Closure, 0)
	ZEND_ARG_TYPE_INFO(0, callback, IS_CALLABLE, 0)
ZEND_END_ARG_INFO()

ZEND_BEGIN_ARG_WITH_RETURN_OBJ_INFO_EX(arginfo_class_Closure_getCurrent, 0, 0, Closure, 0)
ZEND_END_ARG_INFO()

ZEND_METHOD(Closure, __construct);
ZEND_METHOD(Closure, bind);
ZEND_METHOD(Closure, bindTo);
ZEND_METHOD(Closure, call);
ZEND_METHOD(Closure, fromCallable);
ZEND_METHOD(Closure, getCurrent);

static const zend_function_entry class_Closure_methods[] = {
	ZEND_ME(Closure, __construct, arginfo_class_Closure___construct, ZEND_ACC_PRIVATE)
	ZEND_ME(Closure, bind, arginfo_class_Closure_bind, ZEND_ACC_PUBLIC|ZEND_ACC_STATIC)
	ZEND_ME(Closure, bindTo, arginfo_class_Closure_bindTo, ZEND_ACC_PUBLIC)
	ZEND_ME(Closure, call, arginfo_class_Closure_call, ZEND_ACC_PUBLIC)
	ZEND_ME(Closure, fromCallable, arginfo_class_Closure_fromCallable, ZEND_ACC_PUBLIC|ZEND_ACC_STATIC)
	ZEND_ME(Closure, getCurrent, arginfo_class_Closure_getCurrent, ZEND_ACC_PUBLIC|ZEND_ACC_STATIC)
	ZEND_FE_END
};

static zend_class_entry *register_class_Closure(void)
{
	zend_class_entry ce, *class_entry;

	INIT_CLASS_ENTRY(ce, "Closure", class_Closure_methods);
	class_entry = zend_register_internal_class_with_flags(&ce, NULL, ZEND_ACC_FINAL|ZEND_ACC_NO_DYNAMIC_PROPERTIES|ZEND_ACC_NOT_SERIALIZABLE);

	return class_entry;
}
Zend/zend_cpuinfo.h000064400000022451151730543270010313 0ustar00/*
   +----------------------------------------------------------------------+
   | Zend Engine                                                          |
   +----------------------------------------------------------------------+
   | Copyright (c) Zend Technologies Ltd. (http://www.zend.com)           |
   +----------------------------------------------------------------------+
   | This source file is subject to version 2.00 of the Zend license,     |
   | that is bundled with this package in the file LICENSE, and is        |
   | available through the world-wide-web at the following url:           |
   | http://www.zend.com/license/2_00.txt.                                |
   | If you did not receive a copy of the Zend license and are unable to  |
   | obtain it through the world-wide-web, please send a note to          |
   | license@zend.com so we can mail you a copy immediately.              |
   +----------------------------------------------------------------------+
   | Authors: Xinchen Hui <laruence@php.net>                              |
   +----------------------------------------------------------------------+
*/

#ifndef ZEND_CPU_INFO_H
#define ZEND_CPU_INFO_H

#include "zend.h"

#define ZEND_CPU_EBX_MASK     (1<<30)
#define ZEND_CPU_EDX_MASK     (1U<<31)

typedef enum _zend_cpu_feature {
	/* ECX */
	ZEND_CPU_FEATURE_SSE3			= (1<<0),
	ZEND_CPU_FEATURE_PCLMULQDQ		= (1<<1),
	ZEND_CPU_FEATURE_DTES64			= (1<<2),
	ZEND_CPU_FEATURE_MONITOR		= (1<<3),
	ZEND_CPU_FEATURE_DSCPL			= (1<<4),
	ZEND_CPU_FEATURE_VMX			= (1<<5),
	ZEND_CPU_FEATURE_SMX			= (1<<6),
	ZEND_CPU_FEATURE_EST			= (1<<7),
	ZEND_CPU_FEATURE_TM2			= (1<<8),
	ZEND_CPU_FEATURE_SSSE3			= (1<<9),
	ZEND_CPU_FEATURE_CID			= (1<<10),
	ZEND_CPU_FEATURE_SDBG			= (1<<11),
	ZEND_CPU_FEATURE_FMA			= (1<<12),
	ZEND_CPU_FEATURE_CX16			= (1<<13),
	ZEND_CPU_FEATURE_XTPR			= (1<<14),
	ZEND_CPU_FEATURE_PDCM			= (1<<15),
	/* reserved						= (1<<16),*/
	ZEND_CPU_FEATURE_PCID			= (1<<17),
	ZEND_CPU_FEATURE_DCA			= (1<<18),
	ZEND_CPU_FEATURE_SSE41			= (1<<19),
	ZEND_CPU_FEATURE_SSE42			= (1<<20),
	ZEND_CPU_FEATURE_X2APIC			= (1<<21),
	ZEND_CPU_FEATURE_MOVBE			= (1<<22),
	ZEND_CPU_FEATURE_POPCNT			= (1<<23),
	ZEND_CPU_FEATURE_TSC_DEADLINE 	= (1<<24),
	ZEND_CPU_FEATURE_AES			= (1<<25),
	ZEND_CPU_FEATURE_XSAVE			= (1<<26),
	ZEND_CPU_FEATURE_OSXSAVE		= (1<<27) ,
	ZEND_CPU_FEATURE_AVX			= (1<<28),
	ZEND_CPU_FEATURE_F16C			= (1<<29),
	/* intentionally don't support	= (1<<30) */
	/* intentionally don't support	= (1<<31) */

	/* EBX */
	ZEND_CPU_FEATURE_AVX2			= (1<<5 | ZEND_CPU_EBX_MASK),
	ZEND_CPU_FEATURE_AVX512F		= (1<<16 | ZEND_CPU_EBX_MASK),
	ZEND_CPU_FEATURE_AVX512DQ		= (1<<17 | ZEND_CPU_EBX_MASK),
	ZEND_CPU_FEATURE_AVX512CD		= (1<<28 | ZEND_CPU_EBX_MASK),
	ZEND_CPU_FEATURE_SHA			= (1<<29 | ZEND_CPU_EBX_MASK),
	/* intentionally don't support		= (1<<30 | ZEND_CPU_EBX_MASK) */
	/* intentionally don't support		= (1<<31 | ZEND_CPU_EBX_MASK) */

	/* EDX */
	ZEND_CPU_FEATURE_FPU			= (1<<0 | ZEND_CPU_EDX_MASK),
	ZEND_CPU_FEATURE_VME			= (1<<1 | ZEND_CPU_EDX_MASK),
	ZEND_CPU_FEATURE_DE				= (1<<2 | ZEND_CPU_EDX_MASK),
	ZEND_CPU_FEATURE_PSE			= (1<<3 | ZEND_CPU_EDX_MASK),
	ZEND_CPU_FEATURE_TSC			= (1<<4 | ZEND_CPU_EDX_MASK),
	ZEND_CPU_FEATURE_MSR			= (1<<5 | ZEND_CPU_EDX_MASK),
	ZEND_CPU_FEATURE_PAE			= (1<<6 | ZEND_CPU_EDX_MASK),
	ZEND_CPU_FEATURE_MCE			= (1<<7 | ZEND_CPU_EDX_MASK),
	ZEND_CPU_FEATURE_CX8			= (1<<8 | ZEND_CPU_EDX_MASK),
	ZEND_CPU_FEATURE_APIC			= (1<<9 | ZEND_CPU_EDX_MASK),
	/* reserved						= (1<<10 | ZEND_CPU_EDX_MASK),*/
	ZEND_CPU_FEATURE_SEP			= (1<<11 | ZEND_CPU_EDX_MASK),
	ZEND_CPU_FEATURE_MTRR			= (1<<12 | ZEND_CPU_EDX_MASK),
	ZEND_CPU_FEATURE_PGE			= (1<<13 | ZEND_CPU_EDX_MASK),
	ZEND_CPU_FEATURE_MCA			= (1<<14 | ZEND_CPU_EDX_MASK),
	ZEND_CPU_FEATURE_CMOV			= (1<<15 | ZEND_CPU_EDX_MASK),
	ZEND_CPU_FEATURE_PAT			= (1<<16 | ZEND_CPU_EDX_MASK),
	ZEND_CPU_FEATURE_PSE36			= (1<<17 | ZEND_CPU_EDX_MASK),
	ZEND_CPU_FEATURE_PN				= (1<<18 | ZEND_CPU_EDX_MASK),
	ZEND_CPU_FEATURE_CLFLUSH		= (1<<19 | ZEND_CPU_EDX_MASK),
	/* reserved						= (1<<20 | ZEND_CPU_EDX_MASK),*/
	ZEND_CPU_FEATURE_DS				= (1<<21 | ZEND_CPU_EDX_MASK),
	ZEND_CPU_FEATURE_ACPI			= (1<<22 | ZEND_CPU_EDX_MASK),
	ZEND_CPU_FEATURE_MMX			= (1<<23 | ZEND_CPU_EDX_MASK),
	ZEND_CPU_FEATURE_FXSR			= (1<<24 | ZEND_CPU_EDX_MASK),
	ZEND_CPU_FEATURE_SSE			= (1<<25 | ZEND_CPU_EDX_MASK),
	ZEND_CPU_FEATURE_SSE2			= (1<<26 | ZEND_CPU_EDX_MASK),
	ZEND_CPU_FEATURE_SS				= (1<<27 | ZEND_CPU_EDX_MASK),
	ZEND_CPU_FEATURE_HT				= (1<<28 | ZEND_CPU_EDX_MASK),
	ZEND_CPU_FEATURE_TM				= (1<<29 | ZEND_CPU_EDX_MASK)
	/*intentionally don't support   = (1<<30 | ZEND_CPU_EDX_MASK)*/
	/*intentionally don't support   = (1<<31 | ZEND_CPU_EDX_MASK)*/
} zend_cpu_feature;

void zend_cpu_startup(void);
ZEND_API int zend_cpu_supports(zend_cpu_feature feature);

#ifndef __has_attribute
# define __has_attribute(x) 0
#endif

/* Address sanitizer is incompatible with ifunc resolvers, so exclude the
 * CPU support helpers from asan.
 * See also https://github.com/google/sanitizers/issues/342. */
#if __has_attribute(no_sanitize_address)
# define ZEND_NO_SANITIZE_ADDRESS __attribute__((no_sanitize_address))
#else
# define ZEND_NO_SANITIZE_ADDRESS
#endif

#ifdef PHP_HAVE_BUILTIN_CPU_SUPPORTS
/* NOTE: you should use following inline function in
 * resolver functions (ifunc), as it could be called
 * before all PLT symbols are resolved. in other words,
 * resolver functions should not depend on any external
 * functions */
ZEND_NO_SANITIZE_ADDRESS
static inline int zend_cpu_supports_sse2(void) {
#ifdef __aarch64__
	return 0;
#else
#ifdef PHP_HAVE_BUILTIN_CPU_INIT
	__builtin_cpu_init();
#endif
	return __builtin_cpu_supports("sse2");
#endif
}

ZEND_NO_SANITIZE_ADDRESS
static inline int zend_cpu_supports_sse3(void) {
#ifdef __aarch64__
	return 0;
#else
#ifdef PHP_HAVE_BUILTIN_CPU_INIT
	__builtin_cpu_init();
#endif
	return __builtin_cpu_supports("sse3");
#endif
}

ZEND_NO_SANITIZE_ADDRESS
static inline int zend_cpu_supports_ssse3(void) {
#ifdef __aarch64__
	return 0;
#else
#ifdef PHP_HAVE_BUILTIN_CPU_INIT
	__builtin_cpu_init();
#endif
	return __builtin_cpu_supports("ssse3");
#endif
}

ZEND_NO_SANITIZE_ADDRESS
static inline int zend_cpu_supports_sse41(void) {
#ifdef __aarch64__
	return 0;
#else
#ifdef PHP_HAVE_BUILTIN_CPU_INIT
	__builtin_cpu_init();
#endif
	return __builtin_cpu_supports("sse4.1");
#endif
}

ZEND_NO_SANITIZE_ADDRESS
static inline int zend_cpu_supports_sse42(void) {
#ifdef __aarch64__
	return 0;
#else
#ifdef PHP_HAVE_BUILTIN_CPU_INIT
	__builtin_cpu_init();
#endif
	return __builtin_cpu_supports("sse4.2");
#endif
}

ZEND_NO_SANITIZE_ADDRESS
static inline int zend_cpu_supports_avx(void) {
#ifdef __aarch64__
	return 0;
#else
#ifdef PHP_HAVE_BUILTIN_CPU_INIT
	__builtin_cpu_init();
#endif
	return __builtin_cpu_supports("avx");
#endif
}

ZEND_NO_SANITIZE_ADDRESS
static inline int zend_cpu_supports_avx2(void) {
#ifdef __aarch64__
	return 0;
#else
#ifdef PHP_HAVE_BUILTIN_CPU_INIT
	__builtin_cpu_init();
#endif
	return __builtin_cpu_supports("avx2");
#endif
}

#ifdef PHP_HAVE_AVX512_SUPPORTS
ZEND_NO_SANITIZE_ADDRESS
static inline int zend_cpu_supports_avx512(void) {
#ifdef PHP_HAVE_BUILTIN_CPU_INIT
	__builtin_cpu_init();
#endif
	return __builtin_cpu_supports("avx512f") && __builtin_cpu_supports("avx512dq")
		&& __builtin_cpu_supports("avx512cd") && __builtin_cpu_supports("avx512bw")
		&& __builtin_cpu_supports("avx512vl");
}
#endif

#ifdef PHP_HAVE_AVX512_VBMI_SUPPORTS
ZEND_NO_SANITIZE_ADDRESS
static inline int zend_cpu_supports_avx512_vbmi(void) {
#ifdef PHP_HAVE_BUILTIN_CPU_INIT
	__builtin_cpu_init();
#endif
	return zend_cpu_supports_avx512() && __builtin_cpu_supports("avx512vbmi");
}
#endif

#else

static inline int zend_cpu_supports_sse2(void) {
	return zend_cpu_supports(ZEND_CPU_FEATURE_SSE2);
}

static inline int zend_cpu_supports_sse3(void) {
	return zend_cpu_supports(ZEND_CPU_FEATURE_SSE3);
}

static inline int zend_cpu_supports_ssse3(void) {
	return zend_cpu_supports(ZEND_CPU_FEATURE_SSSE3);
}

static inline int zend_cpu_supports_sse41(void) {
	return zend_cpu_supports(ZEND_CPU_FEATURE_SSE41);
}

static inline int zend_cpu_supports_sse42(void) {
	return zend_cpu_supports(ZEND_CPU_FEATURE_SSE42);
}

static inline int zend_cpu_supports_avx(void) {
	return zend_cpu_supports(ZEND_CPU_FEATURE_AVX);
}

static inline int zend_cpu_supports_avx2(void) {
	return zend_cpu_supports(ZEND_CPU_FEATURE_AVX2);
}

static inline int zend_cpu_supports_avx512(void) {
	/* TODO: avx512_bw/avx512_vl use bit 30/31 which are reserved for mask */
	return 0;
}

static zend_always_inline int zend_cpu_supports_avx512_vbmi(void) {
	/* TODO: avx512_vbmi use ECX of cpuid 7 */
	return 0;
}
#endif

/* __builtin_cpu_supports has pclmul from gcc9 */
#if defined(PHP_HAVE_BUILTIN_CPU_SUPPORTS) && (!defined(__GNUC__) || (ZEND_GCC_VERSION >= 9000))
ZEND_NO_SANITIZE_ADDRESS
static inline int zend_cpu_supports_pclmul(void) {
#ifdef PHP_HAVE_BUILTIN_CPU_INIT
	__builtin_cpu_init();
#endif
	return __builtin_cpu_supports("pclmul");
}
#else
static inline int zend_cpu_supports_pclmul(void) {
	return zend_cpu_supports(ZEND_CPU_FEATURE_PCLMULQDQ);
}
#endif

/* __builtin_cpu_supports has cldemote from gcc11 */
#if defined(PHP_HAVE_BUILTIN_CPU_SUPPORTS) && defined(__GNUC__) && (ZEND_GCC_VERSION >= 11000)
ZEND_NO_SANITIZE_ADDRESS
static inline int zend_cpu_supports_cldemote(void) {
#ifdef PHP_HAVE_BUILTIN_CPU_INIT
	__builtin_cpu_init();
#endif
	return __builtin_cpu_supports("cldemote");
}
#endif

#endif
Zend/zend_fibers_arginfo.h000064400000006712151730543300011623 0ustar00/* This is a generated file, edit the .stub.php file instead.
 * Stub hash: e82bbc8e81fe98873a9a5697a4b38e63a24379da */

ZEND_BEGIN_ARG_INFO_EX(arginfo_class_Fiber___construct, 0, 0, 1)
	ZEND_ARG_TYPE_INFO(0, callback, IS_CALLABLE, 0)
ZEND_END_ARG_INFO()

ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_class_Fiber_start, 0, 0, IS_MIXED, 0)
	ZEND_ARG_VARIADIC_TYPE_INFO(0, args, IS_MIXED, 0)
ZEND_END_ARG_INFO()

ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_class_Fiber_resume, 0, 0, IS_MIXED, 0)
	ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, value, IS_MIXED, 0, "null")
ZEND_END_ARG_INFO()

ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_class_Fiber_throw, 0, 1, IS_MIXED, 0)
	ZEND_ARG_OBJ_INFO(0, exception, Throwable, 0)
ZEND_END_ARG_INFO()

ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_class_Fiber_isStarted, 0, 0, _IS_BOOL, 0)
ZEND_END_ARG_INFO()

#define arginfo_class_Fiber_isSuspended arginfo_class_Fiber_isStarted

#define arginfo_class_Fiber_isRunning arginfo_class_Fiber_isStarted

#define arginfo_class_Fiber_isTerminated arginfo_class_Fiber_isStarted

ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_class_Fiber_getReturn, 0, 0, IS_MIXED, 0)
ZEND_END_ARG_INFO()

ZEND_BEGIN_ARG_WITH_RETURN_OBJ_INFO_EX(arginfo_class_Fiber_getCurrent, 0, 0, Fiber, 1)
ZEND_END_ARG_INFO()

#define arginfo_class_Fiber_suspend arginfo_class_Fiber_resume

ZEND_BEGIN_ARG_INFO_EX(arginfo_class_FiberError___construct, 0, 0, 0)
ZEND_END_ARG_INFO()

ZEND_METHOD(Fiber, __construct);
ZEND_METHOD(Fiber, start);
ZEND_METHOD(Fiber, resume);
ZEND_METHOD(Fiber, throw);
ZEND_METHOD(Fiber, isStarted);
ZEND_METHOD(Fiber, isSuspended);
ZEND_METHOD(Fiber, isRunning);
ZEND_METHOD(Fiber, isTerminated);
ZEND_METHOD(Fiber, getReturn);
ZEND_METHOD(Fiber, getCurrent);
ZEND_METHOD(Fiber, suspend);
ZEND_METHOD(FiberError, __construct);

static const zend_function_entry class_Fiber_methods[] = {
	ZEND_ME(Fiber, __construct, arginfo_class_Fiber___construct, ZEND_ACC_PUBLIC)
	ZEND_ME(Fiber, start, arginfo_class_Fiber_start, ZEND_ACC_PUBLIC)
	ZEND_ME(Fiber, resume, arginfo_class_Fiber_resume, ZEND_ACC_PUBLIC)
	ZEND_ME(Fiber, throw, arginfo_class_Fiber_throw, ZEND_ACC_PUBLIC)
	ZEND_ME(Fiber, isStarted, arginfo_class_Fiber_isStarted, ZEND_ACC_PUBLIC)
	ZEND_ME(Fiber, isSuspended, arginfo_class_Fiber_isSuspended, ZEND_ACC_PUBLIC)
	ZEND_ME(Fiber, isRunning, arginfo_class_Fiber_isRunning, ZEND_ACC_PUBLIC)
	ZEND_ME(Fiber, isTerminated, arginfo_class_Fiber_isTerminated, ZEND_ACC_PUBLIC)
	ZEND_ME(Fiber, getReturn, arginfo_class_Fiber_getReturn, ZEND_ACC_PUBLIC)
	ZEND_ME(Fiber, getCurrent, arginfo_class_Fiber_getCurrent, ZEND_ACC_PUBLIC|ZEND_ACC_STATIC)
	ZEND_ME(Fiber, suspend, arginfo_class_Fiber_suspend, ZEND_ACC_PUBLIC|ZEND_ACC_STATIC)
	ZEND_FE_END
};

static const zend_function_entry class_FiberError_methods[] = {
	ZEND_ME(FiberError, __construct, arginfo_class_FiberError___construct, ZEND_ACC_PUBLIC)
	ZEND_FE_END
};

static zend_class_entry *register_class_Fiber(void)
{
	zend_class_entry ce, *class_entry;

	INIT_CLASS_ENTRY(ce, "Fiber", class_Fiber_methods);
	class_entry = zend_register_internal_class_with_flags(&ce, NULL, ZEND_ACC_FINAL|ZEND_ACC_NO_DYNAMIC_PROPERTIES|ZEND_ACC_NOT_SERIALIZABLE);

	return class_entry;
}

static zend_class_entry *register_class_FiberError(zend_class_entry *class_entry_Error)
{
	zend_class_entry ce, *class_entry;

	INIT_CLASS_ENTRY(ce, "FiberError", class_FiberError_methods);
	class_entry = zend_register_internal_class_with_flags(&ce, class_entry_Error, ZEND_ACC_FINAL);

	return class_entry;
}
Zend/zend_builtin_functions.h000064400000003045151730543300012376 0ustar00/*
   +----------------------------------------------------------------------+
   | Zend Engine                                                          |
   +----------------------------------------------------------------------+
   | Copyright (c) Zend Technologies Ltd. (http://www.zend.com)           |
   +----------------------------------------------------------------------+
   | This source file is subject to version 2.00 of the Zend license,     |
   | that is bundled with this package in the file LICENSE, and is        |
   | available through the world-wide-web at the following url:           |
   | http://www.zend.com/license/2_00.txt.                                |
   | If you did not receive a copy of the Zend license and are unable to  |
   | obtain it through the world-wide-web, please send a note to          |
   | license@zend.com so we can mail you a copy immediately.              |
   +----------------------------------------------------------------------+
   | Authors: Andi Gutmans <andi@php.net>                                 |
   |          Zeev Suraski <zeev@php.net>                                 |
   +----------------------------------------------------------------------+
*/

#ifndef ZEND_BUILTIN_FUNCTIONS_H
#define ZEND_BUILTIN_FUNCTIONS_H

#include "zend_types.h"

typedef struct _zval_struct zval;

zend_result zend_startup_builtin_functions(void);

BEGIN_EXTERN_C()
ZEND_API void zend_fetch_debug_backtrace(zval *return_value, int skip_last, int options, int limit);
END_EXTERN_C()

#endif /* ZEND_BUILTIN_FUNCTIONS_H */
Zend/zend_ini_scanner.h000064400000003672151730543300011136 0ustar00/*
   +----------------------------------------------------------------------+
   | Zend Engine                                                          |
   +----------------------------------------------------------------------+
   | Copyright (c) Zend Technologies Ltd. (http://www.zend.com)           |
   +----------------------------------------------------------------------+
   | This source file is subject to version 2.00 of the Zend license,     |
   | that is bundled with this package in the file LICENSE, and is        |
   | available through the world-wide-web at the following url:           |
   | http://www.zend.com/license/2_00.txt.                                |
   | If you did not receive a copy of the Zend license and are unable to  |
   | obtain it through the world-wide-web, please send a note to          |
   | license@zend.com so we can mail you a copy immediately.              |
   +----------------------------------------------------------------------+
   | Authors: Andi Gutmans <andi@php.net>                                 |
   |          Zeev Suraski <zeev@php.net>                                 |
   +----------------------------------------------------------------------+
*/

#ifndef _ZEND_INI_SCANNER_H
#define _ZEND_INI_SCANNER_H

#include "zend_types.h"

typedef struct _zend_file_handle zend_file_handle;

/* Scanner modes */
#define ZEND_INI_SCANNER_NORMAL 0 /* Normal mode. [DEFAULT] */
#define ZEND_INI_SCANNER_RAW    1 /* Raw mode. Option values are not parsed */
#define ZEND_INI_SCANNER_TYPED  2 /* Typed mode. */

BEGIN_EXTERN_C()
ZEND_COLD int zend_ini_scanner_get_lineno(void);
ZEND_COLD const char *zend_ini_scanner_get_filename(void);
zend_result zend_ini_open_file_for_scanning(zend_file_handle *fh, int scanner_mode);
zend_result zend_ini_prepare_string_for_scanning(const char *str, int scanner_mode);
int ini_lex(zval *ini_lval);
void shutdown_ini_scanner(void);
END_EXTERN_C()

#endif /* _ZEND_INI_SCANNER_H */
Zend/zend_long.h000064400000010203151730543300007571 0ustar00/*
   +----------------------------------------------------------------------+
   | Zend Engine                                                          |
   +----------------------------------------------------------------------+
   | Copyright (c) Zend Technologies Ltd. (http://www.zend.com)           |
   +----------------------------------------------------------------------+
   | This source file is subject to version 2.00 of the Zend license,     |
   | that is bundled with this package in the file LICENSE, and is        |
   | available through the world-wide-web at the following url:           |
   | http://www.zend.com/license/2_00.txt.                                |
   | If you did not receive a copy of the Zend license and are unable to  |
   | obtain it through the world-wide-web, please send a note to          |
   | license@zend.com so we can mail you a copy immediately.              |
   +----------------------------------------------------------------------+
   | Authors: Anatol Belski <ab@php.net>                                  |
   +----------------------------------------------------------------------+
*/

#ifndef ZEND_LONG_H
#define ZEND_LONG_H

#include <inttypes.h>
#include <stdint.h>

/* This is the heart of the whole int64 enablement in zval. */
#if defined(__x86_64__) || defined(__LP64__) || defined(_LP64) || defined(_WIN64)
# define ZEND_ENABLE_ZVAL_LONG64 1
#endif

/* Integer types. */
#ifdef ZEND_ENABLE_ZVAL_LONG64
typedef int64_t zend_long;
typedef uint64_t zend_ulong;
typedef int64_t zend_off_t;
# define ZEND_LONG_MAX INT64_MAX
# define ZEND_LONG_MIN INT64_MIN
# define ZEND_ULONG_MAX UINT64_MAX
# define Z_L(i) INT64_C(i)
# define Z_UL(i) UINT64_C(i)
# define SIZEOF_ZEND_LONG 8
#else
typedef int32_t zend_long;
typedef uint32_t zend_ulong;
typedef int32_t zend_off_t;
# define ZEND_LONG_MAX INT32_MAX
# define ZEND_LONG_MIN INT32_MIN
# define ZEND_ULONG_MAX UINT32_MAX
# define Z_L(i) INT32_C(i)
# define Z_UL(i) UINT32_C(i)
# define SIZEOF_ZEND_LONG 4
#endif


/* Conversion macros. */
#define ZEND_LTOA_BUF_LEN 65

#ifdef ZEND_ENABLE_ZVAL_LONG64
# define ZEND_LONG_FMT "%" PRId64
# define ZEND_ULONG_FMT "%" PRIu64
# define ZEND_XLONG_FMT "%" PRIx64
# define ZEND_LONG_FMT_SPEC PRId64
# define ZEND_ULONG_FMT_SPEC PRIu64
# ifdef ZEND_WIN32
#  define ZEND_LTOA(i, s, len) _i64toa_s((i), (s), (len), 10)
#  define ZEND_ATOL(s) _atoi64((s))
#  define ZEND_STRTOL(s0, s1, base) _strtoi64((s0), (s1), (base))
#  define ZEND_STRTOUL(s0, s1, base) _strtoui64((s0), (s1), (base))
#  define ZEND_STRTOL_PTR _strtoi64
#  define ZEND_STRTOUL_PTR _strtoui64
#  define ZEND_ABS _abs64
# else
#  define ZEND_LTOA(i, s, len) \
	do { \
		int st = snprintf((s), (len), ZEND_LONG_FMT, (i)); \
		(s)[st] = '\0'; \
 	} while (0)
#  define ZEND_ATOL(s) atoll((s))
#  define ZEND_STRTOL(s0, s1, base) strtoll((s0), (s1), (base))
#  define ZEND_STRTOUL(s0, s1, base) strtoull((s0), (s1), (base))
#  define ZEND_STRTOL_PTR strtoll
#  define ZEND_STRTOUL_PTR strtoull
#  define ZEND_ABS imaxabs
# endif
#else
# define ZEND_STRTOL(s0, s1, base) strtol((s0), (s1), (base))
# define ZEND_STRTOUL(s0, s1, base) strtoul((s0), (s1), (base))
# define ZEND_LONG_FMT "%" PRId32
# define ZEND_ULONG_FMT "%" PRIu32
# define ZEND_XLONG_FMT "%" PRIx32
# define ZEND_LONG_FMT_SPEC PRId32
# define ZEND_ULONG_FMT_SPEC PRIu32
# ifdef ZEND_WIN32
#  define ZEND_LTOA(i, s, len) _ltoa_s((i), (s), (len), 10)
#  define ZEND_ATOL(s) atol((s))
# else
#  define ZEND_LTOA(i, s, len) \
	do { \
		int st = snprintf((s), (len), ZEND_LONG_FMT, (i)); \
		(s)[st] = '\0'; \
 	} while (0)
#  define ZEND_ATOL(s) atol((s))
# endif
# define ZEND_STRTOL_PTR strtol
# define ZEND_STRTOUL_PTR strtoul
# define ZEND_ABS abs
#endif

#if SIZEOF_ZEND_LONG == 4
# define MAX_LENGTH_OF_LONG 11
# define LONG_MIN_DIGITS "2147483648"
#elif SIZEOF_ZEND_LONG == 8
# define MAX_LENGTH_OF_LONG 20
# define LONG_MIN_DIGITS "9223372036854775808"
#else
# error "Unknown SIZEOF_ZEND_LONG"
#endif

static const char long_min_digits[] = LONG_MIN_DIGITS;

#if SIZEOF_SIZE_T == 4
# define ZEND_ADDR_FMT "0x%08zx"
#elif SIZEOF_SIZE_T == 8
# define ZEND_ADDR_FMT "0x%016zx"
#else
# error "Unknown SIZEOF_SIZE_T"
#endif

#endif /* ZEND_LONG_H */
Zend/zend_vm_opcodes.h000064400000036137151730543300011006 0ustar00/*
   +----------------------------------------------------------------------+
   | Zend Engine                                                          |
   +----------------------------------------------------------------------+
   | Copyright (c) Zend Technologies Ltd. (http://www.zend.com)           |
   +----------------------------------------------------------------------+
   | This source file is subject to version 2.00 of the Zend license,     |
   | that is bundled with this package in the file LICENSE, and is        |
   | available through the world-wide-web at the following url:           |
   | http://www.zend.com/license/2_00.txt.                                |
   | If you did not receive a copy of the Zend license and are unable to  |
   | obtain it through the world-wide-web, please send a note to          |
   | license@zend.com so we can mail you a copy immediately.              |
   +----------------------------------------------------------------------+
   | Authors: Andi Gutmans <andi@php.net>                                 |
   |          Zeev Suraski <zeev@php.net>                                 |
   |          Dmitry Stogov <dmitry@php.net>                              |
   +----------------------------------------------------------------------+
*/

#ifndef ZEND_VM_OPCODES_H
#define ZEND_VM_OPCODES_H

#include "Zend/zend_portability.h"

#define ZEND_VM_SPEC		1
#define ZEND_VM_LINES		0
#define ZEND_VM_KIND_CALL	1
#define ZEND_VM_KIND_SWITCH	2
#define ZEND_VM_KIND_GOTO	3
#define ZEND_VM_KIND_HYBRID	4
#define ZEND_VM_KIND_TAILCALL	5
static const char *const zend_vm_kind_name[] = {
    NULL,
    "ZEND_VM_KIND_CALL",
    "ZEND_VM_KIND_SWITCH",
    "ZEND_VM_KIND_GOTO",
    "ZEND_VM_KIND_HYBRID",
    "ZEND_VM_KIND_TAILCALL",
};
#if 0
/* HYBRID requires support for computed GOTO and global register variables*/
#elif (defined(__GNUC__) && defined(HAVE_GCC_GLOBAL_REGS))
# define ZEND_VM_KIND		ZEND_VM_KIND_HYBRID
#elif defined(HAVE_MUSTTAIL) && defined(HAVE_PRESERVE_NONE) && (defined(__x86_64__) || defined(__aarch64__))
# define ZEND_VM_KIND		ZEND_VM_KIND_TAILCALL
#else
# define ZEND_VM_KIND		ZEND_VM_KIND_CALL
#endif

#if (ZEND_VM_KIND == ZEND_VM_KIND_HYBRID) && !defined(__SANITIZE_ADDRESS__)
# if ((defined(i386) && !defined(__PIC__)) || defined(__x86_64__) || defined(_M_X64))
#  define ZEND_VM_HYBRID_JIT_RED_ZONE_SIZE 48
# endif
#endif

#if ZEND_VM_KIND == ZEND_VM_KIND_TAILCALL
# define ZEND_OPCODE_HANDLER_CCONV    ZEND_PRESERVE_NONE
# define ZEND_OPCODE_HANDLER_CCONV_EX ZEND_FASTCALL
#elif ZEND_VM_KIND == ZEND_VM_KIND_CALL
# define ZEND_OPCODE_HANDLER_CCONV    ZEND_FASTCALL
# define ZEND_OPCODE_HANDLER_CCONV_EX ZEND_FASTCALL
#endif
#define ZEND_OPCODE_HANDLER_FUNC_CCONV    ZEND_FASTCALL
#define ZEND_OPCODE_HANDLER_FUNC_CCONV_EX ZEND_FASTCALL

#if ZEND_VM_KIND == ZEND_VM_KIND_HYBRID
typedef const void* zend_vm_opcode_handler_t;
typedef void (ZEND_FASTCALL *zend_vm_opcode_handler_func_t)(void);
#elif ZEND_VM_KIND == ZEND_VM_KIND_CALL || ZEND_VM_KIND == ZEND_VM_KIND_TAILCALL
typedef const struct _zend_op *(ZEND_OPCODE_HANDLER_CCONV *zend_vm_opcode_handler_t)(struct _zend_execute_data *execute_data, const struct _zend_op *opline);
typedef const struct _zend_op *(ZEND_OPCODE_HANDLER_FUNC_CCONV *zend_vm_opcode_handler_func_t)(struct _zend_execute_data *execute_data, const struct _zend_op *opline);
#elif ZEND_VM_KIND == ZEND_VM_KIND_SWITCH
typedef int zend_vm_opcode_handler_t;
#elif ZEND_VM_KIND == ZEND_VM_KIND_GOTO
typedef const void* zend_vm_opcode_handler_t;
#else
# error
#endif

#define ZEND_VM_OP_SPEC          0x00000001
#define ZEND_VM_OP_CONST         0x00000002
#define ZEND_VM_OP_TMPVAR        0x00000004
#define ZEND_VM_OP_TMPVARCV      0x00000008
#define ZEND_VM_OP_MASK          0x000000f0
#define ZEND_VM_OP_NUM           0x00000010
#define ZEND_VM_OP_JMP_ADDR      0x00000020
#define ZEND_VM_OP_TRY_CATCH     0x00000030
#define ZEND_VM_OP_LOOP_END      0x00000040
#define ZEND_VM_OP_THIS          0x00000050
#define ZEND_VM_OP_NEXT          0x00000060
#define ZEND_VM_OP_CLASS_FETCH   0x00000070
#define ZEND_VM_OP_CONSTRUCTOR   0x00000080
#define ZEND_VM_OP_CONST_FETCH   0x00000090
#define ZEND_VM_OP_CACHE_SLOT    0x000000a0
#define ZEND_VM_EXT_VAR_FETCH    0x00010000
#define ZEND_VM_EXT_ISSET        0x00020000
#define ZEND_VM_EXT_CACHE_SLOT   0x00040000
#define ZEND_VM_EXT_ARRAY_INIT   0x00080000
#define ZEND_VM_EXT_REF          0x00100000
#define ZEND_VM_EXT_FETCH_REF    0x00200000
#define ZEND_VM_EXT_DIM_WRITE    0x00400000
#define ZEND_VM_EXT_MASK         0x0f000000
#define ZEND_VM_EXT_NUM          0x01000000
#define ZEND_VM_EXT_LAST_CATCH   0x02000000
#define ZEND_VM_EXT_JMP_ADDR     0x03000000
#define ZEND_VM_EXT_OP           0x04000000
#define ZEND_VM_EXT_TYPE         0x07000000
#define ZEND_VM_EXT_EVAL         0x08000000
#define ZEND_VM_EXT_TYPE_MASK    0x09000000
#define ZEND_VM_EXT_SRC          0x0b000000
#define ZEND_VM_NO_CONST_CONST   0x40000000
#define ZEND_VM_COMMUTATIVE      0x80000000
#define ZEND_VM_OP1_FLAGS(flags) (flags & 0xff)
#define ZEND_VM_OP2_FLAGS(flags) ((flags >> 8) & 0xff)

BEGIN_EXTERN_C()

ZEND_API const char* ZEND_FASTCALL zend_get_opcode_name(uint8_t opcode);
ZEND_API uint32_t ZEND_FASTCALL zend_get_opcode_flags(uint8_t opcode);
ZEND_API uint8_t zend_get_opcode_id(const char *name, size_t length);

END_EXTERN_C()

#define ZEND_NOP                              0
#define ZEND_ADD                              1
#define ZEND_SUB                              2
#define ZEND_MUL                              3
#define ZEND_DIV                              4
#define ZEND_MOD                              5
#define ZEND_SL                               6
#define ZEND_SR                               7
#define ZEND_CONCAT                           8
#define ZEND_BW_OR                            9
#define ZEND_BW_AND                          10
#define ZEND_BW_XOR                          11
#define ZEND_POW                             12
#define ZEND_BW_NOT                          13
#define ZEND_BOOL_NOT                        14
#define ZEND_BOOL_XOR                        15
#define ZEND_IS_IDENTICAL                    16
#define ZEND_IS_NOT_IDENTICAL                17
#define ZEND_IS_EQUAL                        18
#define ZEND_IS_NOT_EQUAL                    19
#define ZEND_IS_SMALLER                      20
#define ZEND_IS_SMALLER_OR_EQUAL             21
#define ZEND_ASSIGN                          22
#define ZEND_ASSIGN_DIM                      23
#define ZEND_ASSIGN_OBJ                      24
#define ZEND_ASSIGN_STATIC_PROP              25
#define ZEND_ASSIGN_OP                       26
#define ZEND_ASSIGN_DIM_OP                   27
#define ZEND_ASSIGN_OBJ_OP                   28
#define ZEND_ASSIGN_STATIC_PROP_OP           29
#define ZEND_ASSIGN_REF                      30
#define ZEND_QM_ASSIGN                       31
#define ZEND_ASSIGN_OBJ_REF                  32
#define ZEND_ASSIGN_STATIC_PROP_REF          33
#define ZEND_PRE_INC                         34
#define ZEND_PRE_DEC                         35
#define ZEND_POST_INC                        36
#define ZEND_POST_DEC                        37
#define ZEND_PRE_INC_STATIC_PROP             38
#define ZEND_PRE_DEC_STATIC_PROP             39
#define ZEND_POST_INC_STATIC_PROP            40
#define ZEND_POST_DEC_STATIC_PROP            41
#define ZEND_JMP                             42
#define ZEND_JMPZ                            43
#define ZEND_JMPNZ                           44
#define ZEND_JMPZ_EX                         46
#define ZEND_JMPNZ_EX                        47
#define ZEND_CASE                            48
#define ZEND_CHECK_VAR                       49
#define ZEND_SEND_VAR_NO_REF_EX              50
#define ZEND_CAST                            51
#define ZEND_BOOL                            52
#define ZEND_FAST_CONCAT                     53
#define ZEND_ROPE_INIT                       54
#define ZEND_ROPE_ADD                        55
#define ZEND_ROPE_END                        56
#define ZEND_BEGIN_SILENCE                   57
#define ZEND_END_SILENCE                     58
#define ZEND_INIT_FCALL_BY_NAME              59
#define ZEND_DO_FCALL                        60
#define ZEND_INIT_FCALL                      61
#define ZEND_RETURN                          62
#define ZEND_RECV                            63
#define ZEND_RECV_INIT                       64
#define ZEND_SEND_VAL                        65
#define ZEND_SEND_VAR_EX                     66
#define ZEND_SEND_REF                        67
#define ZEND_NEW                             68
#define ZEND_INIT_NS_FCALL_BY_NAME           69
#define ZEND_FREE                            70
#define ZEND_INIT_ARRAY                      71
#define ZEND_ADD_ARRAY_ELEMENT               72
#define ZEND_INCLUDE_OR_EVAL                 73
#define ZEND_UNSET_VAR                       74
#define ZEND_UNSET_DIM                       75
#define ZEND_UNSET_OBJ                       76
#define ZEND_FE_RESET_R                      77
#define ZEND_FE_FETCH_R                      78
#define ZEND_FETCH_R                         80
#define ZEND_FETCH_DIM_R                     81
#define ZEND_FETCH_OBJ_R                     82
#define ZEND_FETCH_W                         83
#define ZEND_FETCH_DIM_W                     84
#define ZEND_FETCH_OBJ_W                     85
#define ZEND_FETCH_RW                        86
#define ZEND_FETCH_DIM_RW                    87
#define ZEND_FETCH_OBJ_RW                    88
#define ZEND_FETCH_IS                        89
#define ZEND_FETCH_DIM_IS                    90
#define ZEND_FETCH_OBJ_IS                    91
#define ZEND_FETCH_FUNC_ARG                  92
#define ZEND_FETCH_DIM_FUNC_ARG              93
#define ZEND_FETCH_OBJ_FUNC_ARG              94
#define ZEND_FETCH_UNSET                     95
#define ZEND_FETCH_DIM_UNSET                 96
#define ZEND_FETCH_OBJ_UNSET                 97
#define ZEND_FETCH_LIST_R                    98
#define ZEND_FETCH_CONSTANT                  99
#define ZEND_CHECK_FUNC_ARG                 100
#define ZEND_EXT_STMT                       101
#define ZEND_EXT_FCALL_BEGIN                102
#define ZEND_EXT_FCALL_END                  103
#define ZEND_EXT_NOP                        104
#define ZEND_TICKS                          105
#define ZEND_SEND_VAR_NO_REF                106
#define ZEND_CATCH                          107
#define ZEND_THROW                          108
#define ZEND_FETCH_CLASS                    109
#define ZEND_CLONE                          110
#define ZEND_RETURN_BY_REF                  111
#define ZEND_INIT_METHOD_CALL               112
#define ZEND_INIT_STATIC_METHOD_CALL        113
#define ZEND_ISSET_ISEMPTY_VAR              114
#define ZEND_ISSET_ISEMPTY_DIM_OBJ          115
#define ZEND_SEND_VAL_EX                    116
#define ZEND_SEND_VAR                       117
#define ZEND_INIT_USER_CALL                 118
#define ZEND_SEND_ARRAY                     119
#define ZEND_SEND_USER                      120
#define ZEND_STRLEN                         121
#define ZEND_DEFINED                        122
#define ZEND_TYPE_CHECK                     123
#define ZEND_VERIFY_RETURN_TYPE             124
#define ZEND_FE_RESET_RW                    125
#define ZEND_FE_FETCH_RW                    126
#define ZEND_FE_FREE                        127
#define ZEND_INIT_DYNAMIC_CALL              128
#define ZEND_DO_ICALL                       129
#define ZEND_DO_UCALL                       130
#define ZEND_DO_FCALL_BY_NAME               131
#define ZEND_PRE_INC_OBJ                    132
#define ZEND_PRE_DEC_OBJ                    133
#define ZEND_POST_INC_OBJ                   134
#define ZEND_POST_DEC_OBJ                   135
#define ZEND_ECHO                           136
#define ZEND_OP_DATA                        137
#define ZEND_INSTANCEOF                     138
#define ZEND_GENERATOR_CREATE               139
#define ZEND_MAKE_REF                       140
#define ZEND_DECLARE_FUNCTION               141
#define ZEND_DECLARE_LAMBDA_FUNCTION        142
#define ZEND_DECLARE_CONST                  143
#define ZEND_DECLARE_CLASS                  144
#define ZEND_DECLARE_CLASS_DELAYED          145
#define ZEND_DECLARE_ANON_CLASS             146
#define ZEND_ADD_ARRAY_UNPACK               147
#define ZEND_ISSET_ISEMPTY_PROP_OBJ         148
#define ZEND_HANDLE_EXCEPTION               149
#define ZEND_USER_OPCODE                    150
#define ZEND_ASSERT_CHECK                   151
#define ZEND_JMP_SET                        152
#define ZEND_UNSET_CV                       153
#define ZEND_ISSET_ISEMPTY_CV               154
#define ZEND_FETCH_LIST_W                   155
#define ZEND_SEPARATE                       156
#define ZEND_FETCH_CLASS_NAME               157
#define ZEND_CALL_TRAMPOLINE                158
#define ZEND_DISCARD_EXCEPTION              159
#define ZEND_YIELD                          160
#define ZEND_GENERATOR_RETURN               161
#define ZEND_FAST_CALL                      162
#define ZEND_FAST_RET                       163
#define ZEND_RECV_VARIADIC                  164
#define ZEND_SEND_UNPACK                    165
#define ZEND_YIELD_FROM                     166
#define ZEND_COPY_TMP                       167
#define ZEND_BIND_GLOBAL                    168
#define ZEND_COALESCE                       169
#define ZEND_SPACESHIP                      170
#define ZEND_FUNC_NUM_ARGS                  171
#define ZEND_FUNC_GET_ARGS                  172
#define ZEND_FETCH_STATIC_PROP_R            173
#define ZEND_FETCH_STATIC_PROP_W            174
#define ZEND_FETCH_STATIC_PROP_RW           175
#define ZEND_FETCH_STATIC_PROP_IS           176
#define ZEND_FETCH_STATIC_PROP_FUNC_ARG     177
#define ZEND_FETCH_STATIC_PROP_UNSET        178
#define ZEND_UNSET_STATIC_PROP              179
#define ZEND_ISSET_ISEMPTY_STATIC_PROP      180
#define ZEND_FETCH_CLASS_CONSTANT           181
#define ZEND_BIND_LEXICAL                   182
#define ZEND_BIND_STATIC                    183
#define ZEND_FETCH_THIS                     184
#define ZEND_SEND_FUNC_ARG                  185
#define ZEND_ISSET_ISEMPTY_THIS             186
#define ZEND_SWITCH_LONG                    187
#define ZEND_SWITCH_STRING                  188
#define ZEND_IN_ARRAY                       189
#define ZEND_COUNT                          190
#define ZEND_GET_CLASS                      191
#define ZEND_GET_CALLED_CLASS               192
#define ZEND_GET_TYPE                       193
#define ZEND_ARRAY_KEY_EXISTS               194
#define ZEND_MATCH                          195
#define ZEND_CASE_STRICT                    196
#define ZEND_MATCH_ERROR                    197
#define ZEND_JMP_NULL                       198
#define ZEND_CHECK_UNDEF_ARGS               199
#define ZEND_FETCH_GLOBALS                  200
#define ZEND_VERIFY_NEVER_TYPE              201
#define ZEND_CALLABLE_CONVERT               202
#define ZEND_BIND_INIT_STATIC_OR_JMP        203
#define ZEND_FRAMELESS_ICALL_0              204
#define ZEND_FRAMELESS_ICALL_1              205
#define ZEND_FRAMELESS_ICALL_2              206
#define ZEND_FRAMELESS_ICALL_3              207
#define ZEND_JMP_FRAMELESS                  208
#define ZEND_INIT_PARENT_PROPERTY_HOOK_CALL 209
#define ZEND_DECLARE_ATTRIBUTED_CONST       210

#define ZEND_VM_LAST_OPCODE                 210

#endif
Zend/zend_interfaces_arginfo.h000064400000017237151730543300012500 0ustar00/* This is a generated file, edit the .stub.php file instead.
 * Stub hash: a9c915c11e5989d8c7cf2d704ada09ca765670c3 */

ZEND_BEGIN_ARG_WITH_TENTATIVE_RETURN_OBJ_INFO_EX(arginfo_class_IteratorAggregate_getIterator, 0, 0, Traversable, 0)
ZEND_END_ARG_INFO()

ZEND_BEGIN_ARG_WITH_TENTATIVE_RETURN_TYPE_INFO_EX(arginfo_class_Iterator_current, 0, 0, IS_MIXED, 0)
ZEND_END_ARG_INFO()

ZEND_BEGIN_ARG_WITH_TENTATIVE_RETURN_TYPE_INFO_EX(arginfo_class_Iterator_next, 0, 0, IS_VOID, 0)
ZEND_END_ARG_INFO()

#define arginfo_class_Iterator_key arginfo_class_Iterator_current

ZEND_BEGIN_ARG_WITH_TENTATIVE_RETURN_TYPE_INFO_EX(arginfo_class_Iterator_valid, 0, 0, _IS_BOOL, 0)
ZEND_END_ARG_INFO()

#define arginfo_class_Iterator_rewind arginfo_class_Iterator_next

ZEND_BEGIN_ARG_WITH_TENTATIVE_RETURN_TYPE_INFO_EX(arginfo_class_ArrayAccess_offsetExists, 0, 1, _IS_BOOL, 0)
	ZEND_ARG_TYPE_INFO(0, offset, IS_MIXED, 0)
ZEND_END_ARG_INFO()

ZEND_BEGIN_ARG_WITH_TENTATIVE_RETURN_TYPE_INFO_EX(arginfo_class_ArrayAccess_offsetGet, 0, 1, IS_MIXED, 0)
	ZEND_ARG_TYPE_INFO(0, offset, IS_MIXED, 0)
ZEND_END_ARG_INFO()

ZEND_BEGIN_ARG_WITH_TENTATIVE_RETURN_TYPE_INFO_EX(arginfo_class_ArrayAccess_offsetSet, 0, 2, IS_VOID, 0)
	ZEND_ARG_TYPE_INFO(0, offset, IS_MIXED, 0)
	ZEND_ARG_TYPE_INFO(0, value, IS_MIXED, 0)
ZEND_END_ARG_INFO()

ZEND_BEGIN_ARG_WITH_TENTATIVE_RETURN_TYPE_INFO_EX(arginfo_class_ArrayAccess_offsetUnset, 0, 1, IS_VOID, 0)
	ZEND_ARG_TYPE_INFO(0, offset, IS_MIXED, 0)
ZEND_END_ARG_INFO()

ZEND_BEGIN_ARG_INFO_EX(arginfo_class_Serializable_serialize, 0, 0, 0)
ZEND_END_ARG_INFO()

ZEND_BEGIN_ARG_INFO_EX(arginfo_class_Serializable_unserialize, 0, 0, 1)
	ZEND_ARG_TYPE_INFO(0, data, IS_STRING, 0)
ZEND_END_ARG_INFO()

ZEND_BEGIN_ARG_WITH_TENTATIVE_RETURN_TYPE_INFO_EX(arginfo_class_Countable_count, 0, 0, IS_LONG, 0)
ZEND_END_ARG_INFO()

ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_class_Stringable___toString, 0, 0, IS_STRING, 0)
ZEND_END_ARG_INFO()

#define arginfo_class_InternalIterator___construct arginfo_class_Serializable_serialize

ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_class_InternalIterator_current, 0, 0, IS_MIXED, 0)
ZEND_END_ARG_INFO()

#define arginfo_class_InternalIterator_key arginfo_class_InternalIterator_current

ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_class_InternalIterator_next, 0, 0, IS_VOID, 0)
ZEND_END_ARG_INFO()

ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_class_InternalIterator_valid, 0, 0, _IS_BOOL, 0)
ZEND_END_ARG_INFO()

#define arginfo_class_InternalIterator_rewind arginfo_class_InternalIterator_next

ZEND_METHOD(InternalIterator, __construct);
ZEND_METHOD(InternalIterator, current);
ZEND_METHOD(InternalIterator, key);
ZEND_METHOD(InternalIterator, next);
ZEND_METHOD(InternalIterator, valid);
ZEND_METHOD(InternalIterator, rewind);

static const zend_function_entry class_IteratorAggregate_methods[] = {
	ZEND_RAW_FENTRY("getIterator", NULL, arginfo_class_IteratorAggregate_getIterator, ZEND_ACC_PUBLIC|ZEND_ACC_ABSTRACT, NULL, NULL)
	ZEND_FE_END
};

static const zend_function_entry class_Iterator_methods[] = {
	ZEND_RAW_FENTRY("current", NULL, arginfo_class_Iterator_current, ZEND_ACC_PUBLIC|ZEND_ACC_ABSTRACT, NULL, NULL)
	ZEND_RAW_FENTRY("next", NULL, arginfo_class_Iterator_next, ZEND_ACC_PUBLIC|ZEND_ACC_ABSTRACT, NULL, NULL)
	ZEND_RAW_FENTRY("key", NULL, arginfo_class_Iterator_key, ZEND_ACC_PUBLIC|ZEND_ACC_ABSTRACT, NULL, NULL)
	ZEND_RAW_FENTRY("valid", NULL, arginfo_class_Iterator_valid, ZEND_ACC_PUBLIC|ZEND_ACC_ABSTRACT, NULL, NULL)
	ZEND_RAW_FENTRY("rewind", NULL, arginfo_class_Iterator_rewind, ZEND_ACC_PUBLIC|ZEND_ACC_ABSTRACT, NULL, NULL)
	ZEND_FE_END
};

static const zend_function_entry class_ArrayAccess_methods[] = {
	ZEND_RAW_FENTRY("offsetExists", NULL, arginfo_class_ArrayAccess_offsetExists, ZEND_ACC_PUBLIC|ZEND_ACC_ABSTRACT, NULL, NULL)
	ZEND_RAW_FENTRY("offsetGet", NULL, arginfo_class_ArrayAccess_offsetGet, ZEND_ACC_PUBLIC|ZEND_ACC_ABSTRACT, NULL, NULL)
	ZEND_RAW_FENTRY("offsetSet", NULL, arginfo_class_ArrayAccess_offsetSet, ZEND_ACC_PUBLIC|ZEND_ACC_ABSTRACT, NULL, NULL)
	ZEND_RAW_FENTRY("offsetUnset", NULL, arginfo_class_ArrayAccess_offsetUnset, ZEND_ACC_PUBLIC|ZEND_ACC_ABSTRACT, NULL, NULL)
	ZEND_FE_END
};

static const zend_function_entry class_Serializable_methods[] = {
	ZEND_RAW_FENTRY("serialize", NULL, arginfo_class_Serializable_serialize, ZEND_ACC_PUBLIC|ZEND_ACC_ABSTRACT, NULL, NULL)
	ZEND_RAW_FENTRY("unserialize", NULL, arginfo_class_Serializable_unserialize, ZEND_ACC_PUBLIC|ZEND_ACC_ABSTRACT, NULL, NULL)
	ZEND_FE_END
};

static const zend_function_entry class_Countable_methods[] = {
	ZEND_RAW_FENTRY("count", NULL, arginfo_class_Countable_count, ZEND_ACC_PUBLIC|ZEND_ACC_ABSTRACT, NULL, NULL)
	ZEND_FE_END
};

static const zend_function_entry class_Stringable_methods[] = {
	ZEND_RAW_FENTRY("__toString", NULL, arginfo_class_Stringable___toString, ZEND_ACC_PUBLIC|ZEND_ACC_ABSTRACT, NULL, NULL)
	ZEND_FE_END
};

static const zend_function_entry class_InternalIterator_methods[] = {
	ZEND_ME(InternalIterator, __construct, arginfo_class_InternalIterator___construct, ZEND_ACC_PRIVATE)
	ZEND_ME(InternalIterator, current, arginfo_class_InternalIterator_current, ZEND_ACC_PUBLIC)
	ZEND_ME(InternalIterator, key, arginfo_class_InternalIterator_key, ZEND_ACC_PUBLIC)
	ZEND_ME(InternalIterator, next, arginfo_class_InternalIterator_next, ZEND_ACC_PUBLIC)
	ZEND_ME(InternalIterator, valid, arginfo_class_InternalIterator_valid, ZEND_ACC_PUBLIC)
	ZEND_ME(InternalIterator, rewind, arginfo_class_InternalIterator_rewind, ZEND_ACC_PUBLIC)
	ZEND_FE_END
};

static zend_class_entry *register_class_Traversable(void)
{
	zend_class_entry ce, *class_entry;

	INIT_CLASS_ENTRY(ce, "Traversable", NULL);
	class_entry = zend_register_internal_interface(&ce);

	return class_entry;
}

static zend_class_entry *register_class_IteratorAggregate(zend_class_entry *class_entry_Traversable)
{
	zend_class_entry ce, *class_entry;

	INIT_CLASS_ENTRY(ce, "IteratorAggregate", class_IteratorAggregate_methods);
	class_entry = zend_register_internal_interface(&ce);
	zend_class_implements(class_entry, 1, class_entry_Traversable);

	return class_entry;
}

static zend_class_entry *register_class_Iterator(zend_class_entry *class_entry_Traversable)
{
	zend_class_entry ce, *class_entry;

	INIT_CLASS_ENTRY(ce, "Iterator", class_Iterator_methods);
	class_entry = zend_register_internal_interface(&ce);
	zend_class_implements(class_entry, 1, class_entry_Traversable);

	return class_entry;
}

static zend_class_entry *register_class_ArrayAccess(void)
{
	zend_class_entry ce, *class_entry;

	INIT_CLASS_ENTRY(ce, "ArrayAccess", class_ArrayAccess_methods);
	class_entry = zend_register_internal_interface(&ce);

	return class_entry;
}

static zend_class_entry *register_class_Serializable(void)
{
	zend_class_entry ce, *class_entry;

	INIT_CLASS_ENTRY(ce, "Serializable", class_Serializable_methods);
	class_entry = zend_register_internal_interface(&ce);

	return class_entry;
}

static zend_class_entry *register_class_Countable(void)
{
	zend_class_entry ce, *class_entry;

	INIT_CLASS_ENTRY(ce, "Countable", class_Countable_methods);
	class_entry = zend_register_internal_interface(&ce);

	return class_entry;
}

static zend_class_entry *register_class_Stringable(void)
{
	zend_class_entry ce, *class_entry;

	INIT_CLASS_ENTRY(ce, "Stringable", class_Stringable_methods);
	class_entry = zend_register_internal_interface(&ce);

	return class_entry;
}

static zend_class_entry *register_class_InternalIterator(zend_class_entry *class_entry_Iterator)
{
	zend_class_entry ce, *class_entry;

	INIT_CLASS_ENTRY(ce, "InternalIterator", class_InternalIterator_methods);
	class_entry = zend_register_internal_class_with_flags(&ce, NULL, ZEND_ACC_FINAL|ZEND_ACC_NOT_SERIALIZABLE);
	zend_class_implements(class_entry, 1, class_entry_Iterator);

	return class_entry;
}
Zend/zend_vm_execute.h000064400020000411151730543310011001 0ustar00/*
   +----------------------------------------------------------------------+
   | Zend Engine                                                          |
   +----------------------------------------------------------------------+
   | Copyright (c) Zend Technologies Ltd. (http://www.zend.com)           |
   +----------------------------------------------------------------------+
   | This source file is subject to version 2.00 of the Zend license,     |
   | that is bundled with this package in the file LICENSE, and is        |
   | available through the world-wide-web at the following url:           |
   | http://www.zend.com/license/2_00.txt.                                |
   | If you did not receive a copy of the Zend license and are unable to  |
   | obtain it through the world-wide-web, please send a note to          |
   | license@zend.com so we can mail you a copy immediately.              |
   +----------------------------------------------------------------------+
   | Authors: Andi Gutmans <andi@php.net>                                 |
   |          Zeev Suraski <zeev@php.net>                                 |
   |          Dmitry Stogov <dmitry@php.net>                              |
   +----------------------------------------------------------------------+
*/

#ifdef ZEND_WIN32
# pragma warning(disable : 4101)
# pragma warning(once : 6235)
# pragma warning(once : 6237)
# pragma warning(once : 6239)
# pragma warning(once : 6240)
# pragma warning(once : 6285)
# pragma warning(once : 6286)
# pragma warning(once : 6326)
#endif
static user_opcode_handler_t zend_user_opcode_handlers[256] = {
	(user_opcode_handler_t)NULL,
	(user_opcode_handler_t)NULL,
	(user_opcode_handler_t)NULL,
	(user_opcode_handler_t)NULL,
	(user_opcode_handler_t)NULL,
	(user_opcode_handler_t)NULL,
	(user_opcode_handler_t)NULL,
	(user_opcode_handler_t)NULL,
	(user_opcode_handler_t)NULL,
	(user_opcode_handler_t)NULL,
	(user_opcode_handler_t)NULL,
	(user_opcode_handler_t)NULL,
	(user_opcode_handler_t)NULL,
	(user_opcode_handler_t)NULL,
	(user_opcode_handler_t)NULL,
	(user_opcode_handler_t)NULL,
	(user_opcode_handler_t)NULL,
	(user_opcode_handler_t)NULL,
	(user_opcode_handler_t)NULL,
	(user_opcode_handler_t)NULL,
	(user_opcode_handler_t)NULL,
	(user_opcode_handler_t)NULL,
	(user_opcode_handler_t)NULL,
	(user_opcode_handler_t)NULL,
	(user_opcode_handler_t)NULL,
	(user_opcode_handler_t)NULL,
	(user_opcode_handler_t)NULL,
	(user_opcode_handler_t)NULL,
	(user_opcode_handler_t)NULL,
	(user_opcode_handler_t)NULL,
	(user_opcode_handler_t)NULL,
	(user_opcode_handler_t)NULL,
	(user_opcode_handler_t)NULL,
	(user_opcode_handler_t)NULL,
	(user_opcode_handler_t)NULL,
	(user_opcode_handler_t)NULL,
	(user_opcode_handler_t)NULL,
	(user_opcode_handler_t)NULL,
	(user_opcode_handler_t)NULL,
	(user_opcode_handler_t)NULL,
	(user_opcode_handler_t)NULL,
	(user_opcode_handler_t)NULL,
	(user_opcode_handler_t)NULL,
	(user_opcode_handler_t)NULL,
	(user_opcode_handler_t)NULL,
	(user_opcode_handler_t)NULL,
	(user_opcode_handler_t)NULL,
	(user_opcode_handler_t)NULL,
	(user_opcode_handler_t)NULL,
	(user_opcode_handler_t)NULL,
	(user_opcode_handler_t)NULL,
	(user_opcode_handler_t)NULL,
	(user_opcode_handler_t)NULL,
	(user_opcode_handler_t)NULL,
	(user_opcode_handler_t)NULL,
	(user_opcode_handler_t)NULL,
	(user_opcode_handler_t)NULL,
	(user_opcode_handler_t)NULL,
	(user_opcode_handler_t)NULL,
	(user_opcode_handler_t)NULL,
	(user_opcode_handler_t)NULL,
	(user_opcode_handler_t)NULL,
	(user_opcode_handler_t)NULL,
	(user_opcode_handler_t)NULL,
	(user_opcode_handler_t)NULL,
	(user_opcode_handler_t)NULL,
	(user_opcode_handler_t)NULL,
	(user_opcode_handler_t)NULL,
	(user_opcode_handler_t)NULL,
	(user_opcode_handler_t)NULL,
	(user_opcode_handler_t)NULL,
	(user_opcode_handler_t)NULL,
	(user_opcode_handler_t)NULL,
	(user_opcode_handler_t)NULL,
	(user_opcode_handler_t)NULL,
	(user_opcode_handler_t)NULL,
	(user_opcode_handler_t)NULL,
	(user_opcode_handler_t)NULL,
	(user_opcode_handler_t)NULL,
	(user_opcode_handler_t)NULL,
	(user_opcode_handler_t)NULL,
	(user_opcode_handler_t)NULL,
	(user_opcode_handler_t)NULL,
	(user_opcode_handler_t)NULL,
	(user_opcode_handler_t)NULL,
	(user_opcode_handler_t)NULL,
	(user_opcode_handler_t)NULL,
	(user_opcode_handler_t)NULL,
	(user_opcode_handler_t)NULL,
	(user_opcode_handler_t)NULL,
	(user_opcode_handler_t)NULL,
	(user_opcode_handler_t)NULL,
	(user_opcode_handler_t)NULL,
	(user_opcode_handler_t)NULL,
	(user_opcode_handler_t)NULL,
	(user_opcode_handler_t)NULL,
	(user_opcode_handler_t)NULL,
	(user_opcode_handler_t)NULL,
	(user_opcode_handler_t)NULL,
	(user_opcode_handler_t)NULL,
	(user_opcode_handler_t)NULL,
	(user_opcode_handler_t)NULL,
	(user_opcode_handler_t)NULL,
	(user_opcode_handler_t)NULL,
	(user_opcode_handler_t)NULL,
	(user_opcode_handler_t)NULL,
	(user_opcode_handler_t)NULL,
	(user_opcode_handler_t)NULL,
	(user_opcode_handler_t)NULL,
	(user_opcode_handler_t)NULL,
	(user_opcode_handler_t)NULL,
	(user_opcode_handler_t)NULL,
	(user_opcode_handler_t)NULL,
	(user_opcode_handler_t)NULL,
	(user_opcode_handler_t)NULL,
	(user_opcode_handler_t)NULL,
	(user_opcode_handler_t)NULL,
	(user_opcode_handler_t)NULL,
	(user_opcode_handler_t)NULL,
	(user_opcode_handler_t)NULL,
	(user_opcode_handler_t)NULL,
	(user_opcode_handler_t)NULL,
	(user_opcode_handler_t)NULL,
	(user_opcode_handler_t)NULL,
	(user_opcode_handler_t)NULL,
	(user_opcode_handler_t)NULL,
	(user_opcode_handler_t)NULL,
	(user_opcode_handler_t)NULL,
	(user_opcode_handler_t)NULL,
	(user_opcode_handler_t)NULL,
	(user_opcode_handler_t)NULL,
	(user_opcode_handler_t)NULL,
	(user_opcode_handler_t)NULL,
	(user_opcode_handler_t)NULL,
	(user_opcode_handler_t)NULL,
	(user_opcode_handler_t)NULL,
	(user_opcode_handler_t)NULL,
	(user_opcode_handler_t)NULL,
	(user_opcode_handler_t)NULL,
	(user_opcode_handler_t)NULL,
	(user_opcode_handler_t)NULL,
	(user_opcode_handler_t)NULL,
	(user_opcode_handler_t)NULL,
	(user_opcode_handler_t)NULL,
	(user_opcode_handler_t)NULL,
	(user_opcode_handler_t)NULL,
	(user_opcode_handler_t)NULL,
	(user_opcode_handler_t)NULL,
	(user_opcode_handler_t)NULL,
	(user_opcode_handler_t)NULL,
	(user_opcode_handler_t)NULL,
	(user_opcode_handler_t)NULL,
	(user_opcode_handler_t)NULL,
	(user_opcode_handler_t)NULL,
	(user_opcode_handler_t)NULL,
	(user_opcode_handler_t)NULL,
	(user_opcode_handler_t)NULL,
	(user_opcode_handler_t)NULL,
	(user_opcode_handler_t)NULL,
	(user_opcode_handler_t)NULL,
	(user_opcode_handler_t)NULL,
	(user_opcode_handler_t)NULL,
	(user_opcode_handler_t)NULL,
	(user_opcode_handler_t)NULL,
	(user_opcode_handler_t)NULL,
	(user_opcode_handler_t)NULL,
	(user_opcode_handler_t)NULL,
	(user_opcode_handler_t)NULL,
	(user_opcode_handler_t)NULL,
	(user_opcode_handler_t)NULL,
	(user_opcode_handler_t)NULL,
	(user_opcode_handler_t)NULL,
	(user_opcode_handler_t)NULL,
	(user_opcode_handler_t)NULL,
	(user_opcode_handler_t)NULL,
	(user_opcode_handler_t)NULL,
	(user_opcode_handler_t)NULL,
	(user_opcode_handler_t)NULL,
	(user_opcode_handler_t)NULL,
	(user_opcode_handler_t)NULL,
	(user_opcode_handler_t)NULL,
	(user_opcode_handler_t)NULL,
	(user_opcode_handler_t)NULL,
	(user_opcode_handler_t)NULL,
	(user_opcode_handler_t)NULL,
	(user_opcode_handler_t)NULL,
	(user_opcode_handler_t)NULL,
	(user_opcode_handler_t)NULL,
	(user_opcode_handler_t)NULL,
	(user_opcode_handler_t)NULL,
	(user_opcode_handler_t)NULL,
	(user_opcode_handler_t)NULL,
	(user_opcode_handler_t)NULL,
	(user_opcode_handler_t)NULL,
	(user_opcode_handler_t)NULL,
	(user_opcode_handler_t)NULL,
	(user_opcode_handler_t)NULL,
	(user_opcode_handler_t)NULL,
	(user_opcode_handler_t)NULL,
	(user_opcode_handler_t)NULL,
	(user_opcode_handler_t)NULL,
	(user_opcode_handler_t)NULL,
	(user_opcode_handler_t)NULL,
	(user_opcode_handler_t)NULL,
	(user_opcode_handler_t)NULL,
	(user_opcode_handler_t)NULL,
	(user_opcode_handler_t)NULL,
	(user_opcode_handler_t)NULL,
	(user_opcode_handler_t)NULL,
	(user_opcode_handler_t)NULL,
	(user_opcode_handler_t)NULL,
	(user_opcode_handler_t)NULL,
	(user_opcode_handler_t)NULL,
	(user_opcode_handler_t)NULL,
	(user_opcode_handler_t)NULL,
	(user_opcode_handler_t)NULL,
	(user_opcode_handler_t)NULL,
	(user_opcode_handler_t)NULL,
	(user_opcode_handler_t)NULL,
	(user_opcode_handler_t)NULL,
	(user_opcode_handler_t)NULL,
	(user_opcode_handler_t)NULL,
	(user_opcode_handler_t)NULL,
	(user_opcode_handler_t)NULL,
	(user_opcode_handler_t)NULL,
	(user_opcode_handler_t)NULL,
	(user_opcode_handler_t)NULL,
	(user_opcode_handler_t)NULL,
	(user_opcode_handler_t)NULL,
	(user_opcode_handler_t)NULL,
	(user_opcode_handler_t)NULL,
	(user_opcode_handler_t)NULL,
	(user_opcode_handler_t)NULL,
	(user_opcode_handler_t)NULL,
	(user_opcode_handler_t)NULL,
	(user_opcode_handler_t)NULL,
	(user_opcode_handler_t)NULL,
	(user_opcode_handler_t)NULL,
	(user_opcode_handler_t)NULL,
	(user_opcode_handler_t)NULL,
	(user_opcode_handler_t)NULL,
	(user_opcode_handler_t)NULL,
	(user_opcode_handler_t)NULL,
	(user_opcode_handler_t)NULL,
	(user_opcode_handler_t)NULL,
	(user_opcode_handler_t)NULL,
	(user_opcode_handler_t)NULL,
	(user_opcode_handler_t)NULL,
	(user_opcode_handler_t)NULL,
	(user_opcode_handler_t)NULL,
	(user_opcode_handler_t)NULL,
	(user_opcode_handler_t)NULL,
	(user_opcode_handler_t)NULL,
	(user_opcode_handler_t)NULL,
	(user_opcode_handler_t)NULL,
	(user_opcode_handler_t)NULL
};

static uint8_t zend_user_opcodes[256] = {0,
	1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,
	17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,
	33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,
	49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,
	65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,
	81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,
	97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,
	113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,
	129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,
	145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,
	161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,
	177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,
	193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,
	209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,
	225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,
	241,242,243,244,245,246,247,248,249,250,251,252,253,254,255
};

#include "Zend/zend_vm_opcodes.h"

#define SPEC_START_MASK        0x0000ffff
#define SPEC_EXTRA_MASK        0xfffc0000
#define SPEC_RULE_OP1          0x00010000
#define SPEC_RULE_OP2          0x00020000
#define SPEC_RULE_OP_DATA      0x00040000
#define SPEC_RULE_RETVAL       0x00080000
#define SPEC_RULE_QUICK_ARG    0x00100000
#define SPEC_RULE_SMART_BRANCH 0x00200000
#define SPEC_RULE_COMMUTATIVE  0x00800000
#define SPEC_RULE_ISSET        0x01000000
#define SPEC_RULE_OBSERVER     0x02000000

static const uint32_t *zend_spec_handlers;
static zend_vm_opcode_handler_t const *zend_opcode_handlers;
static int zend_handlers_count;
#if (ZEND_VM_KIND == ZEND_VM_KIND_HYBRID)
static zend_vm_opcode_handler_func_t const * zend_opcode_handler_funcs;
static zend_op hybrid_halt_op;
#endif
#if ZEND_VM_KIND == ZEND_VM_KIND_HYBRID || ZEND_VM_KIND == ZEND_VM_KIND_TAILCALL

static zend_vm_opcode_handler_func_t const * zend_opcode_handler_funcs;
#endif
#if (ZEND_VM_KIND != ZEND_VM_KIND_HYBRID && ZEND_VM_KIND != ZEND_VM_KIND_TAILCALL) || !ZEND_VM_SPEC
static zend_vm_opcode_handler_t zend_vm_get_opcode_handler(uint8_t opcode, const zend_op* op);
#endif

#if ZEND_VM_KIND == ZEND_VM_KIND_HYBRID || ZEND_VM_KIND == ZEND_VM_KIND_TAILCALL
static zend_vm_opcode_handler_func_t zend_vm_get_opcode_handler_func(uint8_t opcode, const zend_op* op);
#else
# define zend_vm_get_opcode_handler_func zend_vm_get_opcode_handler
#endif

#ifndef VM_TRACE
# define VM_TRACE(op)
#endif
#ifndef VM_TRACE_OP_END
# define VM_TRACE_OP_END(op)
#endif
#ifndef VM_TRACE_START
# define VM_TRACE_START()
#endif
#ifndef VM_TRACE_END
# define VM_TRACE_END()
#endif
#if (ZEND_VM_KIND == ZEND_VM_KIND_HYBRID)
# if defined(__GNUC__) && defined(__i386__)
#  define HYBRID_JIT_GUARD() __asm__ __volatile__ (""::: "ebx")
# elif defined(__GNUC__) && defined(__x86_64__)
#  define HYBRID_JIT_GUARD() __asm__ __volatile__ (""::: "rbx","r12","r13")
# elif defined(__GNUC__) && defined(__aarch64__)
#  define HYBRID_JIT_GUARD() __asm__ __volatile__ (""::: "x19","x20","x21","x22","x23","x24","x25","x26")
# else
#  define HYBRID_JIT_GUARD()
# endif
#define HYBRID_NEXT()     HYBRID_JIT_GUARD(); goto *(void**)(OPLINE->handler)
#define HYBRID_SWITCH()   HYBRID_NEXT();
#define HYBRID_CASE(op)   op ## _LABEL
#define HYBRID_BREAK()    HYBRID_NEXT()
#define HYBRID_DEFAULT    ZEND_NULL_LABEL
#endif

#ifdef ZEND_VM_FP_GLOBAL_REG
# define ZEND_OPCODE_HANDLER_ARGS void
# define ZEND_OPCODE_HANDLER_ARGS_PASSTHRU
# define ZEND_OPCODE_HANDLER_ARGS_EX
# define ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_EX
#else
# define ZEND_OPCODE_HANDLER_ARGS zend_execute_data *execute_data, const zend_op *opline
# define ZEND_OPCODE_HANDLER_ARGS_PASSTHRU execute_data, opline
# define ZEND_OPCODE_HANDLER_ARGS_EX ZEND_OPCODE_HANDLER_ARGS, 
# define ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_EX ZEND_OPCODE_HANDLER_ARGS_PASSTHRU, 
#endif

#if defined(ZEND_VM_FP_GLOBAL_REG) && defined(ZEND_VM_IP_GLOBAL_REG)
# define ZEND_OPCODE_HANDLER_RET void
# define ZEND_VM_TAIL_CALL(call) call; return
# define ZEND_VM_CONTINUE()      return
# if (ZEND_VM_KIND == ZEND_VM_KIND_HYBRID)
#  define ZEND_VM_RETURN()        opline = &hybrid_halt_op; return
#  define ZEND_VM_HOT             zend_always_inline ZEND_COLD ZEND_OPT_SIZE
#  define ZEND_VM_COLD            ZEND_COLD ZEND_OPT_SIZE
# else
#  define ZEND_VM_RETURN()        opline = NULL; return
#  define ZEND_VM_HOT
#  define ZEND_VM_COLD            ZEND_COLD ZEND_OPT_SIZE
# endif
#else
# define ZEND_OPCODE_HANDLER_RET const zend_op *
# define ZEND_VM_TAIL_CALL(call) return call
# define ZEND_VM_CONTINUE()      return opline
# define ZEND_VM_RETURN()        return (const zend_op*)ZEND_VM_ENTER_BIT
# define ZEND_VM_HOT
# define ZEND_VM_COLD            ZEND_COLD ZEND_OPT_SIZE
#endif
#define ZEND_VM_DISPATCH_TO_HELPER(call) ZEND_VM_TAIL_CALL(call)

#ifdef ZEND_VM_IP_GLOBAL_REG
# define DCL_OPLINE
# define OPLINE opline
# define USE_OPLINE
# define LOAD_OPLINE() opline = EX(opline)
# define LOAD_OPLINE_EX()
# define LOAD_NEXT_OPLINE() opline = EX(opline) + 1
# define SAVE_OPLINE() EX(opline) = opline
# define SAVE_OPLINE_EX() SAVE_OPLINE()
#else
# define DCL_OPLINE const zend_op *opline;
# define OPLINE opline
# define USE_OPLINE
# define LOAD_OPLINE() opline = EX(opline)
# define LOAD_OPLINE_EX() opline = EX(opline)
# define LOAD_NEXT_OPLINE() opline = EX(opline) + 1
# define SAVE_OPLINE() EX(opline) = opline
# define SAVE_OPLINE_EX()
#endif
#define HANDLE_EXCEPTION() ZEND_ASSERT(EG(exception)); LOAD_OPLINE(); ZEND_VM_CONTINUE()
#define HANDLE_EXCEPTION_LEAVE() ZEND_ASSERT(EG(exception)); LOAD_OPLINE(); ZEND_VM_LEAVE()
#if defined(ZEND_VM_FP_GLOBAL_REG)
# define ZEND_VM_ENTER_EX()        ZEND_VM_INTERRUPT_CHECK(); ZEND_VM_CONTINUE()
# define ZEND_VM_ENTER()           execute_data = EG(current_execute_data); LOAD_OPLINE(); ZEND_VM_ENTER_EX()
# define ZEND_VM_LEAVE()           ZEND_VM_CONTINUE()
#elif defined(ZEND_VM_IP_GLOBAL_REG)
# define ZEND_VM_ENTER_EX()        return  1
# define ZEND_VM_ENTER()           opline = EG(current_execute_data)->opline; ZEND_VM_ENTER_EX()
# define ZEND_VM_LEAVE()           return  2
#else
# define ZEND_VM_ENTER_BIT         1ULL
# define ZEND_VM_ENTER_EX()        return (zend_op*)((uintptr_t)opline | ZEND_VM_ENTER_BIT)
# define ZEND_VM_ENTER()           execute_data = EG(current_execute_data); LOAD_OPLINE(); ZEND_VM_ENTER_EX()
# define ZEND_VM_LEAVE()           return (zend_op*)((uintptr_t)opline | ZEND_VM_ENTER_BIT)
#endif
#define ZEND_VM_INTERRUPT()      ZEND_VM_TAIL_CALL(zend_interrupt_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
#ifdef ZEND_VM_FP_GLOBAL_REG
#define ZEND_VM_LOOP_INTERRUPT() zend_interrupt_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
#else
#define ZEND_VM_LOOP_INTERRUPT() opline = (zend_op*)((uintptr_t)zend_interrupt_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU) & ~ZEND_VM_ENTER_BIT);
#endif
#define ZEND_VM_DISPATCH(opcode, opline) return zend_vm_get_opcode_handler_func(opcode, opline)(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV zend_interrupt_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS);
static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_NULL_HANDLER(ZEND_OPCODE_HANDLER_ARGS);

static zend_never_inline ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV_EX  zend_add_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_EX zval *op_1, zval *op_2)
{
	USE_OPLINE

	SAVE_OPLINE();
	if (UNEXPECTED(Z_TYPE_INFO_P(op_1) == IS_UNDEF)) {
		op_1 = ZVAL_UNDEFINED_OP1();
	}
	if (UNEXPECTED(Z_TYPE_INFO_P(op_2) == IS_UNDEF)) {
		op_2 = ZVAL_UNDEFINED_OP2();
	}
	add_function(EX_VAR(opline->result.var), op_1, op_2);
	if (opline->op1_type & (IS_TMP_VAR|IS_VAR)) {
		zval_ptr_dtor_nogc(op_1);
	}
	if (opline->op2_type & (IS_TMP_VAR|IS_VAR)) {
		zval_ptr_dtor_nogc(op_2);
	}
	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static zend_never_inline ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV_EX  zend_sub_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_EX zval *op_1, zval *op_2)
{
	USE_OPLINE

	SAVE_OPLINE();
	if (UNEXPECTED(Z_TYPE_INFO_P(op_1) == IS_UNDEF)) {
		op_1 = ZVAL_UNDEFINED_OP1();
	}
	if (UNEXPECTED(Z_TYPE_INFO_P(op_2) == IS_UNDEF)) {
		op_2 = ZVAL_UNDEFINED_OP2();
	}
	sub_function(EX_VAR(opline->result.var), op_1, op_2);
	if (opline->op1_type & (IS_TMP_VAR|IS_VAR)) {
		zval_ptr_dtor_nogc(op_1);
	}
	if (opline->op2_type & (IS_TMP_VAR|IS_VAR)) {
		zval_ptr_dtor_nogc(op_2);
	}
	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static zend_never_inline ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV_EX  zend_mul_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_EX zval *op_1, zval *op_2)
{
	USE_OPLINE

	SAVE_OPLINE();
	if (UNEXPECTED(Z_TYPE_INFO_P(op_1) == IS_UNDEF)) {
		op_1 = ZVAL_UNDEFINED_OP1();
	}
	if (UNEXPECTED(Z_TYPE_INFO_P(op_2) == IS_UNDEF)) {
		op_2 = ZVAL_UNDEFINED_OP2();
	}
	mul_function(EX_VAR(opline->result.var), op_1, op_2);
	if (opline->op1_type & (IS_TMP_VAR|IS_VAR)) {
		zval_ptr_dtor_nogc(op_1);
	}
	if (opline->op2_type & (IS_TMP_VAR|IS_VAR)) {
		zval_ptr_dtor_nogc(op_2);
	}
	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static zend_never_inline ZEND_COLD ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV  zend_mod_by_zero_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE

	SAVE_OPLINE();
	zend_throw_exception_ex(zend_ce_division_by_zero_error, 0, "Modulo by zero");
	ZVAL_UNDEF(EX_VAR(opline->result.var));
	HANDLE_EXCEPTION();
}

static zend_never_inline ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV_EX  zend_mod_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_EX zval *op_1, zval *op_2)
{
	USE_OPLINE

	SAVE_OPLINE();
	if (UNEXPECTED(Z_TYPE_INFO_P(op_1) == IS_UNDEF)) {
		op_1 = ZVAL_UNDEFINED_OP1();
	}
	if (UNEXPECTED(Z_TYPE_INFO_P(op_2) == IS_UNDEF)) {
		op_2 = ZVAL_UNDEFINED_OP2();
	}
	mod_function(EX_VAR(opline->result.var), op_1, op_2);
	if (opline->op1_type & (IS_TMP_VAR|IS_VAR)) {
		zval_ptr_dtor_nogc(op_1);
	}
	if (opline->op2_type & (IS_TMP_VAR|IS_VAR)) {
		zval_ptr_dtor_nogc(op_2);
	}
	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static zend_never_inline ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV_EX  zend_shift_left_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_EX zval *op_1, zval *op_2)
{
	USE_OPLINE

	SAVE_OPLINE();
	if (UNEXPECTED(Z_TYPE_INFO_P(op_1) == IS_UNDEF)) {
		op_1 = ZVAL_UNDEFINED_OP1();
	}
	if (UNEXPECTED(Z_TYPE_INFO_P(op_2) == IS_UNDEF)) {
		op_2 = ZVAL_UNDEFINED_OP2();
	}
	shift_left_function(EX_VAR(opline->result.var), op_1, op_2);
	if (opline->op1_type & (IS_TMP_VAR|IS_VAR)) {
		zval_ptr_dtor_nogc(op_1);
	}
	if (opline->op2_type & (IS_TMP_VAR|IS_VAR)) {
		zval_ptr_dtor_nogc(op_2);
	}
	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static zend_never_inline ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV_EX  zend_shift_right_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_EX zval *op_1, zval *op_2)
{
	USE_OPLINE

	SAVE_OPLINE();
	if (UNEXPECTED(Z_TYPE_INFO_P(op_1) == IS_UNDEF)) {
		op_1 = ZVAL_UNDEFINED_OP1();
	}
	if (UNEXPECTED(Z_TYPE_INFO_P(op_2) == IS_UNDEF)) {
		op_2 = ZVAL_UNDEFINED_OP2();
	}
	shift_right_function(EX_VAR(opline->result.var), op_1, op_2);
	if (opline->op1_type & (IS_TMP_VAR|IS_VAR)) {
		zval_ptr_dtor_nogc(op_1);
	}
	if (opline->op2_type & (IS_TMP_VAR|IS_VAR)) {
		zval_ptr_dtor_nogc(op_2);
	}
	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static zend_never_inline ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV_EX  zend_is_equal_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_EX zval *op_1, zval *op_2)
{
	int ret;
	USE_OPLINE

	SAVE_OPLINE();
	if (UNEXPECTED(Z_TYPE_INFO_P(op_1) == IS_UNDEF)) {
		op_1 = ZVAL_UNDEFINED_OP1();
	}
	if (UNEXPECTED(Z_TYPE_INFO_P(op_2) == IS_UNDEF)) {
		op_2 = ZVAL_UNDEFINED_OP2();
	}
	ret = zend_compare(op_1, op_2);
	if (opline->op1_type & (IS_TMP_VAR|IS_VAR)) {
		zval_ptr_dtor_nogc(op_1);
	}
	if (opline->op2_type & (IS_TMP_VAR|IS_VAR)) {
		zval_ptr_dtor_nogc(op_2);
	}
	ZEND_VM_SMART_BRANCH(ret == 0, 1);
}

static zend_never_inline ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV_EX  zend_is_not_equal_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_EX zval *op_1, zval *op_2)
{
	int ret;
	USE_OPLINE

	SAVE_OPLINE();
	if (UNEXPECTED(Z_TYPE_INFO_P(op_1) == IS_UNDEF)) {
		op_1 = ZVAL_UNDEFINED_OP1();
	}
	if (UNEXPECTED(Z_TYPE_INFO_P(op_2) == IS_UNDEF)) {
		op_2 = ZVAL_UNDEFINED_OP2();
	}
	ret = zend_compare(op_1, op_2);
	if (opline->op1_type & (IS_TMP_VAR|IS_VAR)) {
		zval_ptr_dtor_nogc(op_1);
	}
	if (opline->op2_type & (IS_TMP_VAR|IS_VAR)) {
		zval_ptr_dtor_nogc(op_2);
	}
	ZEND_VM_SMART_BRANCH(ret != 0, 1);
}

static zend_never_inline ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV_EX  zend_is_smaller_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_EX zval *op_1, zval *op_2)
{
	int ret;
	USE_OPLINE

	SAVE_OPLINE();
	if (UNEXPECTED(Z_TYPE_INFO_P(op_1) == IS_UNDEF)) {
		op_1 = ZVAL_UNDEFINED_OP1();
	}
	if (UNEXPECTED(Z_TYPE_INFO_P(op_2) == IS_UNDEF)) {
		op_2 = ZVAL_UNDEFINED_OP2();
	}
	ret = zend_compare(op_1, op_2);
	if (opline->op1_type & (IS_TMP_VAR|IS_VAR)) {
		zval_ptr_dtor_nogc(op_1);
	}
	if (opline->op2_type & (IS_TMP_VAR|IS_VAR)) {
		zval_ptr_dtor_nogc(op_2);
	}
	ZEND_VM_SMART_BRANCH(ret < 0, 1);
}

static zend_never_inline ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV_EX  zend_is_smaller_or_equal_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_EX zval *op_1, zval *op_2)
{
	int ret;
	USE_OPLINE

	SAVE_OPLINE();
	if (UNEXPECTED(Z_TYPE_INFO_P(op_1) == IS_UNDEF)) {
		op_1 = ZVAL_UNDEFINED_OP1();
	}
	if (UNEXPECTED(Z_TYPE_INFO_P(op_2) == IS_UNDEF)) {
		op_2 = ZVAL_UNDEFINED_OP2();
	}
	ret = zend_compare(op_1, op_2);
	if (opline->op1_type & (IS_TMP_VAR|IS_VAR)) {
		zval_ptr_dtor_nogc(op_1);
	}
	if (opline->op2_type & (IS_TMP_VAR|IS_VAR)) {
		zval_ptr_dtor_nogc(op_2);
	}
	ZEND_VM_SMART_BRANCH(ret <= 0, 1);
}

static zend_never_inline ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV_EX  zend_bw_or_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_EX zval *op_1, zval *op_2)
{
	USE_OPLINE

	SAVE_OPLINE();
	if (UNEXPECTED(Z_TYPE_INFO_P(op_1) == IS_UNDEF)) {
		op_1 = ZVAL_UNDEFINED_OP1();
	}
	if (UNEXPECTED(Z_TYPE_INFO_P(op_2) == IS_UNDEF)) {
		op_2 = ZVAL_UNDEFINED_OP2();
	}
	bitwise_or_function(EX_VAR(opline->result.var), op_1, op_2);
	if (opline->op1_type & (IS_TMP_VAR|IS_VAR)) {
		zval_ptr_dtor_nogc(op_1);
	}
	if (opline->op2_type & (IS_TMP_VAR|IS_VAR)) {
		zval_ptr_dtor_nogc(op_2);
	}
	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static zend_never_inline ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV_EX  zend_bw_and_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_EX zval *op_1, zval *op_2)
{
	USE_OPLINE

	SAVE_OPLINE();
	if (UNEXPECTED(Z_TYPE_INFO_P(op_1) == IS_UNDEF)) {
		op_1 = ZVAL_UNDEFINED_OP1();
	}
	if (UNEXPECTED(Z_TYPE_INFO_P(op_2) == IS_UNDEF)) {
		op_2 = ZVAL_UNDEFINED_OP2();
	}
	bitwise_and_function(EX_VAR(opline->result.var), op_1, op_2);
	if (opline->op1_type & (IS_TMP_VAR|IS_VAR)) {
		zval_ptr_dtor_nogc(op_1);
	}
	if (opline->op2_type & (IS_TMP_VAR|IS_VAR)) {
		zval_ptr_dtor_nogc(op_2);
	}
	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static zend_never_inline ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV_EX  zend_bw_xor_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_EX zval *op_1, zval *op_2)
{
	USE_OPLINE

	SAVE_OPLINE();
	if (UNEXPECTED(Z_TYPE_INFO_P(op_1) == IS_UNDEF)) {
		op_1 = ZVAL_UNDEFINED_OP1();
	}
	if (UNEXPECTED(Z_TYPE_INFO_P(op_2) == IS_UNDEF)) {
		op_2 = ZVAL_UNDEFINED_OP2();
	}
	bitwise_xor_function(EX_VAR(opline->result.var), op_1, op_2);
	if (opline->op1_type & (IS_TMP_VAR|IS_VAR)) {
		zval_ptr_dtor_nogc(op_1);
	}
	if (opline->op2_type & (IS_TMP_VAR|IS_VAR)) {
		zval_ptr_dtor_nogc(op_2);
	}
	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static zend_never_inline ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV_EX  zend_bw_not_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_EX zval *op_1)
{
	USE_OPLINE

	SAVE_OPLINE();
	if (UNEXPECTED(Z_TYPE_P(op_1) == IS_UNDEF)) {
		op_1 = ZVAL_UNDEFINED_OP1();
	}
	bitwise_not_function(EX_VAR(opline->result.var), op_1);
	FREE_OP(opline->op1_type, opline->op1.var);
	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static zend_never_inline ZEND_COLD ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV  zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE

	SAVE_OPLINE();
	zend_throw_error(NULL, "Using $this when not in object context");
	UNDEF_RESULT();
	HANDLE_EXCEPTION();
}

static zend_never_inline ZEND_COLD ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV  zend_undefined_function_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *function_name;

	SAVE_OPLINE();
	function_name = RT_CONSTANT(opline, opline->op2);
	zend_throw_error(NULL, "Call to undefined function %s()", Z_STRVAL_P(function_name));
	HANDLE_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_ASSIGN_STATIC_PROP_OP_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	/* This helper actually never will receive IS_VAR as second op, and has the same handling for VAR and TMP in the first op, but for interoperability with the other binary_assign_op helpers, it is necessary to "include" it */

	USE_OPLINE
	zval *prop, *value;
	zend_property_info *prop_info;
	zend_reference *ref;

	SAVE_OPLINE();

	prop = zend_fetch_static_property_address(&prop_info, (opline+1)->extended_value, BP_VAR_RW, 0 OPLINE_CC EXECUTE_DATA_CC);
	if (UNEXPECTED(!prop)) {
		UNDEF_RESULT();
		FREE_OP((opline+1)->op1_type, (opline+1)->op1.var);
		HANDLE_EXCEPTION();
	}

	if (UNEXPECTED(prop_info->flags & ZEND_ACC_PPP_SET_MASK)
	 && UNEXPECTED(!zend_asymmetric_property_has_set_access(prop_info))) {
		zend_asymmetric_visibility_property_modification_error(prop_info, "indirectly modify");
		UNDEF_RESULT();
		FREE_OP((opline+1)->op1_type, (opline+1)->op1.var);
		HANDLE_EXCEPTION();
	}

	value = get_op_data_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1);

	do {
		if (UNEXPECTED(Z_ISREF_P(prop))) {
			ref = Z_REF_P(prop);
			prop = Z_REFVAL_P(prop);
			if (UNEXPECTED(ZEND_REF_HAS_TYPE_SOURCES(ref))) {
				zend_binary_assign_op_typed_ref(ref, value OPLINE_CC EXECUTE_DATA_CC);
				break;
			}
		}

		if (ZEND_TYPE_IS_SET(prop_info->type)) {
			/* special case for typed properties */
			zend_binary_assign_op_typed_prop(prop_info, prop, value OPLINE_CC EXECUTE_DATA_CC);
		} else {
			zend_binary_op(prop, prop, value OPLINE_CC);
		}
	} while (0);

	if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
		ZVAL_COPY(EX_VAR(opline->result.var), prop);
	}

	FREE_OP((opline+1)->op1_type, (opline+1)->op1.var);
	/* assign_static_prop has two opcodes! */
	ZEND_VM_NEXT_OPCODE_EX(1, 2);
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_PRE_INC_STATIC_PROP_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *prop;
	zend_property_info *prop_info;

	SAVE_OPLINE();

	prop = zend_fetch_static_property_address(&prop_info, opline->extended_value, BP_VAR_RW, 0 OPLINE_CC EXECUTE_DATA_CC);
	if (UNEXPECTED(!prop)) {
		UNDEF_RESULT();
		HANDLE_EXCEPTION();
	}

	if (UNEXPECTED(prop_info->flags & ZEND_ACC_PPP_SET_MASK)
	 && UNEXPECTED(!zend_asymmetric_property_has_set_access(prop_info))) {
		zend_asymmetric_visibility_property_modification_error(prop_info, "indirectly modify");
		UNDEF_RESULT();
		HANDLE_EXCEPTION();
	}

	zend_pre_incdec_property_zval(prop,
		ZEND_TYPE_IS_SET(prop_info->type) ? prop_info : NULL OPLINE_CC EXECUTE_DATA_CC);

	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

/* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CONST|VAR) */
static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_POST_INC_STATIC_PROP_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *prop;
	zend_property_info *prop_info;

	SAVE_OPLINE();

	prop = zend_fetch_static_property_address(&prop_info, opline->extended_value, BP_VAR_RW, 0 OPLINE_CC EXECUTE_DATA_CC);
	if (UNEXPECTED(!prop)) {
		UNDEF_RESULT();
		HANDLE_EXCEPTION();
	}

	if (UNEXPECTED(prop_info->flags & ZEND_ACC_PPP_SET_MASK)
	 && UNEXPECTED(!zend_asymmetric_property_has_set_access(prop_info))) {
		zend_asymmetric_visibility_property_modification_error(prop_info, "indirectly modify");
		UNDEF_RESULT();
		HANDLE_EXCEPTION();
	}

	zend_post_incdec_property_zval(prop,
		ZEND_TYPE_IS_SET(prop_info->type) ? prop_info : NULL OPLINE_CC EXECUTE_DATA_CC);

	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

/* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CONST|VAR) */
static zend_always_inline ZEND_OPCODE_HANDLER_RET zend_fetch_static_prop_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_EX int type)
{
	USE_OPLINE
	zval *prop;
	zend_property_info *prop_info;

	SAVE_OPLINE();

	prop = zend_fetch_static_property_address(
		&prop_info, opline->extended_value & ~ZEND_FETCH_OBJ_FLAGS, type,
		type == BP_VAR_W ? opline->extended_value : 0 OPLINE_CC EXECUTE_DATA_CC);
	if (UNEXPECTED(!prop)) {
		ZEND_ASSERT(EG(exception) || (type == BP_VAR_IS));
		prop = &EG(uninitialized_zval);
	} else if (UNEXPECTED(prop_info->flags & ZEND_ACC_PPP_SET_MASK)
	 && (type == BP_VAR_W || type == BP_VAR_RW || type == BP_VAR_UNSET)
	 && UNEXPECTED(!zend_asymmetric_property_has_set_access(prop_info))) {
		if (Z_TYPE_P(prop) == IS_OBJECT) {
			goto copy_deref;
		} else if (type != BP_VAR_UNSET || Z_TYPE_P(prop) != IS_UNDEF) {
			zend_asymmetric_visibility_property_modification_error(prop_info, "indirectly modify");
		}
		prop = &EG(uninitialized_zval);
	}

	if (type == BP_VAR_R || type == BP_VAR_IS) {
copy_deref:
		ZVAL_COPY_DEREF(EX_VAR(opline->result.var), prop);
	} else {
		ZVAL_INDIRECT(EX_VAR(opline->result.var), prop);
	}
	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

/* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CLASS_FETCH|CONST|VAR) */
static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_FETCH_STATIC_PROP_R_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	ZEND_VM_DISPATCH_TO_HELPER(zend_fetch_static_prop_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_EX BP_VAR_R));
}

/* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CLASS_FETCH|CONST|VAR) */
static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_FETCH_STATIC_PROP_W_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	ZEND_VM_DISPATCH_TO_HELPER(zend_fetch_static_prop_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_EX BP_VAR_W));
}

/* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CLASS_FETCH|CONST|VAR) */
static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_FETCH_STATIC_PROP_RW_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	ZEND_VM_DISPATCH_TO_HELPER(zend_fetch_static_prop_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_EX BP_VAR_RW));
}

/* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CLASS_FETCH|CONST|VAR) */
static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_FETCH_STATIC_PROP_FUNC_ARG_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	if (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) {
		ZEND_VM_TAIL_CALL(ZEND_FETCH_STATIC_PROP_W_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
	} else {
		ZEND_VM_TAIL_CALL(ZEND_FETCH_STATIC_PROP_R_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
	}
}

/* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CLASS_FETCH|CONST|VAR) */
static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_FETCH_STATIC_PROP_UNSET_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	ZEND_VM_DISPATCH_TO_HELPER(zend_fetch_static_prop_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_EX BP_VAR_UNSET));
}

/* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CLASS_FETCH|CONST|VAR) */
static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_FETCH_STATIC_PROP_IS_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	ZEND_VM_DISPATCH_TO_HELPER(zend_fetch_static_prop_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_EX BP_VAR_IS));
}

static zend_never_inline ZEND_COLD ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV  zend_use_tmp_in_write_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE

	SAVE_OPLINE();
	zend_throw_error(NULL, "Cannot use temporary expression in write context");
	FREE_OP(opline->op2_type, opline->op2.var);
	FREE_OP(opline->op1_type, opline->op1.var);
	ZVAL_UNDEF(EX_VAR(opline->result.var));
	HANDLE_EXCEPTION();
}

static zend_never_inline ZEND_COLD ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV  zend_use_undef_in_read_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE

	SAVE_OPLINE();
	zend_throw_error(NULL, "Cannot use [] for reading");
	FREE_OP(opline->op2_type, opline->op2.var);
	FREE_OP(opline->op1_type, opline->op1.var);
	ZVAL_UNDEF(EX_VAR(opline->result.var));
	HANDLE_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_ASSIGN_STATIC_PROP_SPEC_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *prop, *value;
	zend_property_info *prop_info;
	zend_refcounted *garbage = NULL;

	SAVE_OPLINE();

	prop = zend_fetch_static_property_address(&prop_info, opline->extended_value, BP_VAR_W, 0 OPLINE_CC EXECUTE_DATA_CC);
	if (UNEXPECTED(!prop)) {


		UNDEF_RESULT();
		HANDLE_EXCEPTION();
	}

	value = RT_CONSTANT((opline+1), (opline+1)->op1);

	if (ZEND_TYPE_IS_SET(prop_info->type)) {
		value = zend_assign_to_typed_prop(prop_info, prop, value, &garbage EXECUTE_DATA_CC);


	} else {
		value = zend_assign_to_variable_ex(prop, value, IS_CONST, EX_USES_STRICT_TYPES(), &garbage);
	}

	if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
		ZVAL_COPY(EX_VAR(opline->result.var), value);
	}

	if (garbage) {
		GC_DTOR_NO_REF(garbage);
	}

	/* assign_static_prop has two opcodes! */
	ZEND_VM_NEXT_OPCODE_EX(1, 2);
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_ASSIGN_STATIC_PROP_SPEC_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *prop, *value;
	zend_property_info *prop_info;
	zend_refcounted *garbage = NULL;

	SAVE_OPLINE();

	prop = zend_fetch_static_property_address(&prop_info, opline->extended_value, BP_VAR_W, 0 OPLINE_CC EXECUTE_DATA_CC);
	if (UNEXPECTED(!prop)) {
		zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
		UNDEF_RESULT();
		HANDLE_EXCEPTION();
	}

	value = _get_zval_ptr_tmp((opline+1)->op1.var EXECUTE_DATA_CC);

	if (ZEND_TYPE_IS_SET(prop_info->type)) {
		value = zend_assign_to_typed_prop(prop_info, prop, value, &garbage EXECUTE_DATA_CC);
		zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
	} else {
		value = zend_assign_to_variable_ex(prop, value, IS_TMP_VAR, EX_USES_STRICT_TYPES(), &garbage);
	}

	if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
		ZVAL_COPY(EX_VAR(opline->result.var), value);
	}

	if (garbage) {
		GC_DTOR_NO_REF(garbage);
	}

	/* assign_static_prop has two opcodes! */
	ZEND_VM_NEXT_OPCODE_EX(1, 2);
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_ASSIGN_STATIC_PROP_SPEC_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *prop, *value;
	zend_property_info *prop_info;
	zend_refcounted *garbage = NULL;

	SAVE_OPLINE();

	prop = zend_fetch_static_property_address(&prop_info, opline->extended_value, BP_VAR_W, 0 OPLINE_CC EXECUTE_DATA_CC);
	if (UNEXPECTED(!prop)) {
		zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
		UNDEF_RESULT();
		HANDLE_EXCEPTION();
	}

	value = _get_zval_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);

	if (ZEND_TYPE_IS_SET(prop_info->type)) {
		value = zend_assign_to_typed_prop(prop_info, prop, value, &garbage EXECUTE_DATA_CC);
		zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
	} else {
		value = zend_assign_to_variable_ex(prop, value, IS_VAR, EX_USES_STRICT_TYPES(), &garbage);
	}

	if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
		ZVAL_COPY(EX_VAR(opline->result.var), value);
	}

	if (garbage) {
		GC_DTOR_NO_REF(garbage);
	}

	/* assign_static_prop has two opcodes! */
	ZEND_VM_NEXT_OPCODE_EX(1, 2);
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_ASSIGN_STATIC_PROP_SPEC_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *prop, *value;
	zend_property_info *prop_info;
	zend_refcounted *garbage = NULL;

	SAVE_OPLINE();

	prop = zend_fetch_static_property_address(&prop_info, opline->extended_value, BP_VAR_W, 0 OPLINE_CC EXECUTE_DATA_CC);
	if (UNEXPECTED(!prop)) {


		UNDEF_RESULT();
		HANDLE_EXCEPTION();
	}

	value = _get_zval_ptr_cv_BP_VAR_R((opline+1)->op1.var EXECUTE_DATA_CC);

	if (ZEND_TYPE_IS_SET(prop_info->type)) {
		value = zend_assign_to_typed_prop(prop_info, prop, value, &garbage EXECUTE_DATA_CC);


	} else {
		value = zend_assign_to_variable_ex(prop, value, IS_CV, EX_USES_STRICT_TYPES(), &garbage);
	}

	if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
		ZVAL_COPY(EX_VAR(opline->result.var), value);
	}

	if (garbage) {
		GC_DTOR_NO_REF(garbage);
	}

	/* assign_static_prop has two opcodes! */
	ZEND_VM_NEXT_OPCODE_EX(1, 2);
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_ASSIGN_STATIC_PROP_REF_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *prop, *value_ptr;
	zend_property_info *prop_info;
	zend_refcounted *garbage = NULL;

	SAVE_OPLINE();

	prop = zend_fetch_static_property_address(&prop_info, opline->extended_value & ~ZEND_RETURNS_FUNCTION, BP_VAR_W, 0 OPLINE_CC EXECUTE_DATA_CC);
	if (UNEXPECTED(!prop)) {
		FREE_OP((opline+1)->op1_type, (opline+1)->op1.var);
		UNDEF_RESULT();
		HANDLE_EXCEPTION();
	}

	if (UNEXPECTED(prop_info->flags & ZEND_ACC_PPP_SET_MASK)
	 && UNEXPECTED(!zend_asymmetric_property_has_set_access(prop_info))) {
		zend_asymmetric_visibility_property_modification_error(prop_info, "indirectly modify");
		FREE_OP((opline+1)->op1_type, (opline+1)->op1.var);
		UNDEF_RESULT();
		HANDLE_EXCEPTION();
	}

	value_ptr = get_zval_ptr_ptr((opline+1)->op1_type, (opline+1)->op1, BP_VAR_W);

	if ((opline+1)->op1_type == IS_VAR && (opline->extended_value & ZEND_RETURNS_FUNCTION) && UNEXPECTED(!Z_ISREF_P(value_ptr))) {
		if (UNEXPECTED(!zend_wrong_assign_to_variable_reference(prop, value_ptr, &garbage OPLINE_CC EXECUTE_DATA_CC))) {
			prop = &EG(uninitialized_zval);
		}
	} else if (ZEND_TYPE_IS_SET(prop_info->type)) {
		prop = zend_assign_to_typed_property_reference(prop_info, prop, value_ptr, &garbage EXECUTE_DATA_CC);
	} else {
		zend_assign_to_variable_reference(prop, value_ptr, &garbage);
	}

	if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
		ZVAL_COPY(EX_VAR(opline->result.var), prop);
	}

	if (garbage) {
		GC_DTOR(garbage);
	}

	FREE_OP((opline+1)->op1_type, (opline+1)->op1.var);
	ZEND_VM_NEXT_OPCODE_EX(1, 2);
}

static zend_never_inline ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV  zend_leave_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS)
{
	zend_execute_data *old_execute_data;
	uint32_t call_info = EX_CALL_INFO();
#if ZEND_VM_KIND != ZEND_VM_KIND_TAILCALL
	/* zend_leave_helper may be called with opline=call_leave_op in TAILCALL VM */
	SAVE_OPLINE();
#endif

	if (EXPECTED((call_info & (ZEND_CALL_CODE|ZEND_CALL_TOP|ZEND_CALL_HAS_SYMBOL_TABLE|ZEND_CALL_FREE_EXTRA_ARGS|ZEND_CALL_ALLOCATED|ZEND_CALL_HAS_EXTRA_NAMED_PARAMS)) == 0)) {
		EG(current_execute_data) = EX(prev_execute_data);
		i_free_compiled_variables(execute_data);

#ifdef ZEND_PREFER_RELOAD
		call_info = EX_CALL_INFO();
#endif
		if (UNEXPECTED(call_info & ZEND_CALL_RELEASE_THIS)) {
			OBJ_RELEASE(Z_OBJ(execute_data->This));
		} else if (UNEXPECTED(call_info & ZEND_CALL_CLOSURE)) {
			OBJ_RELEASE(ZEND_CLOSURE_OBJECT(EX(func)));
		}
		EG(vm_stack_top) = (zval*)execute_data;
		execute_data = EX(prev_execute_data);

		if (UNEXPECTED(EG(exception) != NULL)) {
			zend_rethrow_exception(execute_data);
			HANDLE_EXCEPTION_LEAVE();
		}

		LOAD_NEXT_OPLINE();
		ZEND_VM_LEAVE();
	} else if (EXPECTED((call_info & (ZEND_CALL_CODE|ZEND_CALL_TOP)) == 0)) {
		EG(current_execute_data) = EX(prev_execute_data);
		i_free_compiled_variables(execute_data);

#ifdef ZEND_PREFER_RELOAD
		call_info = EX_CALL_INFO();
#endif
		if (UNEXPECTED(call_info & ZEND_CALL_HAS_SYMBOL_TABLE)) {
			zend_clean_and_cache_symbol_table(EX(symbol_table));
		}

		if (UNEXPECTED(call_info & ZEND_CALL_HAS_EXTRA_NAMED_PARAMS)) {
			zend_free_extra_named_params(EX(extra_named_params));
		}

		/* Free extra args before releasing the closure,
		 * as that may free the op_array. */
		zend_vm_stack_free_extra_args_ex(call_info, execute_data);

		if (UNEXPECTED(call_info & ZEND_CALL_RELEASE_THIS)) {
			OBJ_RELEASE(Z_OBJ(execute_data->This));
		} else if (UNEXPECTED(call_info & ZEND_CALL_CLOSURE)) {
			OBJ_RELEASE(ZEND_CLOSURE_OBJECT(EX(func)));
		}

		old_execute_data = execute_data;
		execute_data = EX(prev_execute_data);
		zend_vm_stack_free_call_frame_ex(call_info, old_execute_data);

		if (UNEXPECTED(EG(exception) != NULL)) {
			zend_rethrow_exception(execute_data);
			HANDLE_EXCEPTION_LEAVE();
		}

		LOAD_NEXT_OPLINE();
		ZEND_VM_LEAVE();
	} else if (EXPECTED((call_info & ZEND_CALL_TOP) == 0)) {
		if (EX(func)->op_array.last_var > 0) {
			zend_detach_symbol_table(execute_data);
			call_info |= ZEND_CALL_NEEDS_REATTACH;
		}
		zend_destroy_static_vars(&EX(func)->op_array);
		destroy_op_array(&EX(func)->op_array);
		efree_size(EX(func), sizeof(zend_op_array));
		old_execute_data = execute_data;
		execute_data = EG(current_execute_data) = EX(prev_execute_data);
		zend_vm_stack_free_call_frame_ex(call_info, old_execute_data);

		if (call_info & ZEND_CALL_NEEDS_REATTACH) {
			if (EX(func)->op_array.last_var > 0) {
				zend_attach_symbol_table(execute_data);
			} else {
				ZEND_ADD_CALL_FLAG(execute_data, ZEND_CALL_NEEDS_REATTACH);
			}
		}
		if (UNEXPECTED(EG(exception) != NULL)) {
			zend_rethrow_exception(execute_data);
			HANDLE_EXCEPTION_LEAVE();
		}

		LOAD_NEXT_OPLINE();
		ZEND_VM_LEAVE();
	} else {
		if (EXPECTED((call_info & ZEND_CALL_CODE) == 0)) {
			EG(current_execute_data) = EX(prev_execute_data);
			i_free_compiled_variables(execute_data);
#ifdef ZEND_PREFER_RELOAD
			call_info = EX_CALL_INFO();
#endif
			if (UNEXPECTED(call_info & (ZEND_CALL_HAS_SYMBOL_TABLE|ZEND_CALL_FREE_EXTRA_ARGS|ZEND_CALL_HAS_EXTRA_NAMED_PARAMS))) {
				if (UNEXPECTED(call_info & ZEND_CALL_HAS_SYMBOL_TABLE)) {
					zend_clean_and_cache_symbol_table(EX(symbol_table));
				}
				zend_vm_stack_free_extra_args_ex(call_info, execute_data);
				if (UNEXPECTED(call_info & ZEND_CALL_HAS_EXTRA_NAMED_PARAMS)) {
					zend_free_extra_named_params(EX(extra_named_params));
				}
			}
			if (UNEXPECTED(call_info & ZEND_CALL_CLOSURE)) {
				OBJ_RELEASE(ZEND_CLOSURE_OBJECT(EX(func)));
			}
			ZEND_VM_RETURN();
		} else /* if (call_kind == ZEND_CALL_TOP_CODE) */ {
			zend_array *symbol_table = EX(symbol_table);

			if (EX(func)->op_array.last_var > 0) {
				zend_detach_symbol_table(execute_data);
				call_info |= ZEND_CALL_NEEDS_REATTACH;
			}
			if (call_info & ZEND_CALL_NEEDS_REATTACH) {
				old_execute_data = EX(prev_execute_data);
				while (old_execute_data) {
					if (old_execute_data->func && (ZEND_CALL_INFO(old_execute_data) & ZEND_CALL_HAS_SYMBOL_TABLE)) {
						if (old_execute_data->symbol_table == symbol_table) {
							if (old_execute_data->func->op_array.last_var > 0) {
								zend_attach_symbol_table(old_execute_data);
							} else {
								ZEND_ADD_CALL_FLAG(old_execute_data, ZEND_CALL_NEEDS_REATTACH);
							}
						}
						break;
					}
					old_execute_data = old_execute_data->prev_execute_data;
				}
			}
			EG(current_execute_data) = EX(prev_execute_data);
			ZEND_VM_RETURN();
		}
	}
}

static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_JMP_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE

	ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op1), 0);
}

static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_DO_ICALL_SPEC_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zend_execute_data *call = EX(call);
	zend_function *fbc = call->func;
	zval *ret;
	zval retval;

	SAVE_OPLINE();
	EX(call) = call->prev_execute_data;

	call->prev_execute_data = execute_data;
	EG(current_execute_data) = call;

#if ZEND_DEBUG
	bool should_throw = zend_internal_call_should_throw(fbc, call);
#endif

	ret = 0 ? EX_VAR(opline->result.var) : &retval;
	ZVAL_NULL(ret);


	fbc->internal_function.handler(call, ret);

#if ZEND_DEBUG
	if (!EG(exception) && call->func) {
		if (should_throw) {
			zend_internal_call_arginfo_violation(call->func);
		}
		ZEND_ASSERT(!(call->func->common.fn_flags & ZEND_ACC_HAS_RETURN_TYPE) ||
			zend_verify_internal_return_type(call->func, ret));
		ZEND_ASSERT((call->func->common.fn_flags & ZEND_ACC_RETURN_REFERENCE)
			? Z_ISREF_P(ret) : !Z_ISREF_P(ret));
		zend_verify_internal_func_info(call->func, ret);
	}
#endif


	ZEND_VM_FCALL_INTERRUPT_CHECK(call);

	EG(current_execute_data) = execute_data;
	zend_vm_stack_free_args(call);

	uint32_t call_info = ZEND_CALL_INFO(call);
	if (UNEXPECTED(call_info & (ZEND_CALL_HAS_EXTRA_NAMED_PARAMS|ZEND_CALL_ALLOCATED))) {
		if (call_info & ZEND_CALL_HAS_EXTRA_NAMED_PARAMS) {
			zend_free_extra_named_params(call->extra_named_params);
		}
		zend_vm_stack_free_call_frame_ex(call_info, call);
	} else {
		EG(vm_stack_top) = (zval*)call;
	}

	if (!0) {
		i_zval_ptr_dtor(ret);
	}

	if (UNEXPECTED(EG(exception) != NULL)) {
		zend_rethrow_exception(execute_data);
		HANDLE_EXCEPTION();
	}

	ZEND_VM_SET_OPCODE_NO_INTERRUPT(opline + 1);
	ZEND_VM_CONTINUE();
}

static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_DO_ICALL_SPEC_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zend_execute_data *call = EX(call);
	zend_function *fbc = call->func;
	zval *ret;
	zval retval;

	SAVE_OPLINE();
	EX(call) = call->prev_execute_data;

	call->prev_execute_data = execute_data;
	EG(current_execute_data) = call;

#if ZEND_DEBUG
	bool should_throw = zend_internal_call_should_throw(fbc, call);
#endif

	ret = 1 ? EX_VAR(opline->result.var) : &retval;
	ZVAL_NULL(ret);


	fbc->internal_function.handler(call, ret);

#if ZEND_DEBUG
	if (!EG(exception) && call->func) {
		if (should_throw) {
			zend_internal_call_arginfo_violation(call->func);
		}
		ZEND_ASSERT(!(call->func->common.fn_flags & ZEND_ACC_HAS_RETURN_TYPE) ||
			zend_verify_internal_return_type(call->func, ret));
		ZEND_ASSERT((call->func->common.fn_flags & ZEND_ACC_RETURN_REFERENCE)
			? Z_ISREF_P(ret) : !Z_ISREF_P(ret));
		zend_verify_internal_func_info(call->func, ret);
	}
#endif


	ZEND_VM_FCALL_INTERRUPT_CHECK(call);

	EG(current_execute_data) = execute_data;
	zend_vm_stack_free_args(call);

	uint32_t call_info = ZEND_CALL_INFO(call);
	if (UNEXPECTED(call_info & (ZEND_CALL_HAS_EXTRA_NAMED_PARAMS|ZEND_CALL_ALLOCATED))) {
		if (call_info & ZEND_CALL_HAS_EXTRA_NAMED_PARAMS) {
			zend_free_extra_named_params(call->extra_named_params);
		}
		zend_vm_stack_free_call_frame_ex(call_info, call);
	} else {
		EG(vm_stack_top) = (zval*)call;
	}

	if (!1) {
		i_zval_ptr_dtor(ret);
	}

	if (UNEXPECTED(EG(exception) != NULL)) {
		zend_rethrow_exception(execute_data);
		HANDLE_EXCEPTION();
	}

	ZEND_VM_SET_OPCODE_NO_INTERRUPT(opline + 1);
	ZEND_VM_CONTINUE();
}

static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_DO_ICALL_SPEC_OBSERVER_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zend_execute_data *call = EX(call);
	zend_function *fbc = call->func;
	zval *ret;
	zval retval;

	SAVE_OPLINE();
	EX(call) = call->prev_execute_data;

	call->prev_execute_data = execute_data;
	EG(current_execute_data) = call;

#if ZEND_DEBUG
	bool should_throw = zend_internal_call_should_throw(fbc, call);
#endif

	ret = RETURN_VALUE_USED(opline) ? EX_VAR(opline->result.var) : &retval;
	ZVAL_NULL(ret);

	zend_observer_fcall_begin_specialized(call, false);
	fbc->internal_function.handler(call, ret);

#if ZEND_DEBUG
	if (!EG(exception) && call->func) {
		if (should_throw) {
			zend_internal_call_arginfo_violation(call->func);
		}
		ZEND_ASSERT(!(call->func->common.fn_flags & ZEND_ACC_HAS_RETURN_TYPE) ||
			zend_verify_internal_return_type(call->func, ret));
		ZEND_ASSERT((call->func->common.fn_flags & ZEND_ACC_RETURN_REFERENCE)
			? Z_ISREF_P(ret) : !Z_ISREF_P(ret));
		zend_verify_internal_func_info(call->func, ret);
	}
#endif
	zend_observer_fcall_end(call, EG(exception) ? NULL : ret);
	ZEND_VM_FCALL_INTERRUPT_CHECK(call);

	EG(current_execute_data) = execute_data;
	zend_vm_stack_free_args(call);

	uint32_t call_info = ZEND_CALL_INFO(call);
	if (UNEXPECTED(call_info & (ZEND_CALL_HAS_EXTRA_NAMED_PARAMS|ZEND_CALL_ALLOCATED))) {
		if (call_info & ZEND_CALL_HAS_EXTRA_NAMED_PARAMS) {
			zend_free_extra_named_params(call->extra_named_params);
		}
		zend_vm_stack_free_call_frame_ex(call_info, call);
	} else {
		EG(vm_stack_top) = (zval*)call;
	}

	if (!RETURN_VALUE_USED(opline)) {
		i_zval_ptr_dtor(ret);
	}

	if (UNEXPECTED(EG(exception) != NULL)) {
		zend_rethrow_exception(execute_data);
		HANDLE_EXCEPTION();
	}

	ZEND_VM_SET_OPCODE_NO_INTERRUPT(opline + 1);
	ZEND_VM_CONTINUE();
}

static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_DO_UCALL_SPEC_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zend_execute_data *call = EX(call);
	zend_function *fbc = call->func;
	zval *ret;

	SAVE_OPLINE();
	EX(call) = call->prev_execute_data;

	ret = NULL;
	if (0) {
		ret = EX_VAR(opline->result.var);
	}

	call->prev_execute_data = execute_data;
	execute_data = call;
	i_init_func_execute_data(&fbc->op_array, ret, 0 EXECUTE_DATA_CC);
	LOAD_OPLINE_EX();




	ZEND_VM_ENTER_EX();
}

static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_DO_UCALL_SPEC_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zend_execute_data *call = EX(call);
	zend_function *fbc = call->func;
	zval *ret;

	SAVE_OPLINE();
	EX(call) = call->prev_execute_data;

	ret = NULL;
	if (1) {
		ret = EX_VAR(opline->result.var);
	}

	call->prev_execute_data = execute_data;
	execute_data = call;
	i_init_func_execute_data(&fbc->op_array, ret, 0 EXECUTE_DATA_CC);
	LOAD_OPLINE_EX();




	ZEND_VM_ENTER_EX();
}

static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_DO_UCALL_SPEC_OBSERVER_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zend_execute_data *call = EX(call);
	zend_function *fbc = call->func;
	zval *ret;

	SAVE_OPLINE();
	EX(call) = call->prev_execute_data;

	ret = NULL;
	if (RETURN_VALUE_USED(opline)) {
		ret = EX_VAR(opline->result.var);
	}

	call->prev_execute_data = execute_data;
	execute_data = call;
	i_init_func_execute_data(&fbc->op_array, ret, 0 EXECUTE_DATA_CC);
	LOAD_OPLINE_EX();
	SAVE_OPLINE();
	zend_observer_fcall_begin_specialized(execute_data, false);

	ZEND_VM_ENTER_EX();
}

static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_DO_FCALL_BY_NAME_SPEC_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zend_execute_data *call = EX(call);
	zend_function *fbc = call->func;
	zval *ret;
	zval retval;

	SAVE_OPLINE();
	EX(call) = call->prev_execute_data;

	const uint32_t no_discard = 0 ? 0 : ZEND_ACC_NODISCARD;

	if (UNEXPECTED(fbc->common.fn_flags & (ZEND_ACC_DEPRECATED|no_discard))) {
		if (fbc->common.fn_flags & ZEND_ACC_DEPRECATED) {
			zend_deprecated_function(fbc);
		}
		if ((fbc->common.fn_flags & no_discard) && EG(exception) == NULL) {
			zend_nodiscard_function(fbc);
		}
		if (UNEXPECTED(EG(exception) != NULL)) {
			UNDEF_RESULT();
			if (!0) {
				ret = &retval;
				ZVAL_UNDEF(ret);
			}
			goto fcall_by_name_end;
		}
	}

	if (EXPECTED(fbc->type == ZEND_USER_FUNCTION)) {
		ret = NULL;
		if (0) {
			ret = EX_VAR(opline->result.var);
		}

		call->prev_execute_data = execute_data;
		execute_data = call;
		i_init_func_execute_data(&fbc->op_array, ret, 0 EXECUTE_DATA_CC);
		LOAD_OPLINE_EX();




		ZEND_VM_ENTER_EX();
	} else {
		ZEND_ASSERT(fbc->type == ZEND_INTERNAL_FUNCTION);
		if (0) {
			ret = NULL;
		}

		call->prev_execute_data = execute_data;
		EG(current_execute_data) = call;

#if ZEND_DEBUG
		bool should_throw = zend_internal_call_should_throw(fbc, call);
#endif

		ret = 0 ? EX_VAR(opline->result.var) : &retval;
		ZVAL_NULL(ret);


		fbc->internal_function.handler(call, ret);

#if ZEND_DEBUG
		if (!EG(exception) && call->func) {
			if (should_throw) {
				zend_internal_call_arginfo_violation(call->func);
			}
			ZEND_ASSERT(!(call->func->common.fn_flags & ZEND_ACC_HAS_RETURN_TYPE) ||
				zend_verify_internal_return_type(call->func, ret));
			ZEND_ASSERT((call->func->common.fn_flags & ZEND_ACC_RETURN_REFERENCE)
				? Z_ISREF_P(ret) : !Z_ISREF_P(ret));
			zend_verify_internal_func_info(call->func, ret);
		}
#endif


		ZEND_VM_FCALL_INTERRUPT_CHECK(call);

		EG(current_execute_data) = execute_data;

		goto fcall_by_name_end;
	}

	if (0) {
fcall_by_name_end:

		zend_vm_stack_free_args(call);

		uint32_t call_info = ZEND_CALL_INFO(call);
		if (UNEXPECTED(call_info & (ZEND_CALL_HAS_EXTRA_NAMED_PARAMS|ZEND_CALL_ALLOCATED))) {
			if (call_info & ZEND_CALL_HAS_EXTRA_NAMED_PARAMS) {
				zend_free_extra_named_params(call->extra_named_params);
			}
			zend_vm_stack_free_call_frame_ex(call_info, call);
		} else {
			EG(vm_stack_top) = (zval*)call;
		}

		if (!0) {
			i_zval_ptr_dtor(ret);
		}
	}

	if (UNEXPECTED(EG(exception) != NULL)) {
		zend_rethrow_exception(execute_data);
		HANDLE_EXCEPTION();
	}
	ZEND_VM_SET_OPCODE_NO_INTERRUPT(opline + 1);
	ZEND_VM_CONTINUE();
}

static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_DO_FCALL_BY_NAME_SPEC_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zend_execute_data *call = EX(call);
	zend_function *fbc = call->func;
	zval *ret;
	zval retval;

	SAVE_OPLINE();
	EX(call) = call->prev_execute_data;

	const uint32_t no_discard = 1 ? 0 : ZEND_ACC_NODISCARD;

	if (UNEXPECTED(fbc->common.fn_flags & (ZEND_ACC_DEPRECATED|no_discard))) {
		if (fbc->common.fn_flags & ZEND_ACC_DEPRECATED) {
			zend_deprecated_function(fbc);
		}
		if ((fbc->common.fn_flags & no_discard) && EG(exception) == NULL) {
			zend_nodiscard_function(fbc);
		}
		if (UNEXPECTED(EG(exception) != NULL)) {
			UNDEF_RESULT();
			if (!1) {
				ret = &retval;
				ZVAL_UNDEF(ret);
			}
			goto fcall_by_name_end;
		}
	}

	if (EXPECTED(fbc->type == ZEND_USER_FUNCTION)) {
		ret = NULL;
		if (1) {
			ret = EX_VAR(opline->result.var);
		}

		call->prev_execute_data = execute_data;
		execute_data = call;
		i_init_func_execute_data(&fbc->op_array, ret, 0 EXECUTE_DATA_CC);
		LOAD_OPLINE_EX();




		ZEND_VM_ENTER_EX();
	} else {
		ZEND_ASSERT(fbc->type == ZEND_INTERNAL_FUNCTION);
		if (0) {
			ret = NULL;
		}

		call->prev_execute_data = execute_data;
		EG(current_execute_data) = call;

#if ZEND_DEBUG
		bool should_throw = zend_internal_call_should_throw(fbc, call);
#endif

		ret = 1 ? EX_VAR(opline->result.var) : &retval;
		ZVAL_NULL(ret);


		fbc->internal_function.handler(call, ret);

#if ZEND_DEBUG
		if (!EG(exception) && call->func) {
			if (should_throw) {
				zend_internal_call_arginfo_violation(call->func);
			}
			ZEND_ASSERT(!(call->func->common.fn_flags & ZEND_ACC_HAS_RETURN_TYPE) ||
				zend_verify_internal_return_type(call->func, ret));
			ZEND_ASSERT((call->func->common.fn_flags & ZEND_ACC_RETURN_REFERENCE)
				? Z_ISREF_P(ret) : !Z_ISREF_P(ret));
			zend_verify_internal_func_info(call->func, ret);
		}
#endif


		ZEND_VM_FCALL_INTERRUPT_CHECK(call);

		EG(current_execute_data) = execute_data;

		goto fcall_by_name_end;
	}

	if (0) {
fcall_by_name_end:

		zend_vm_stack_free_args(call);

		uint32_t call_info = ZEND_CALL_INFO(call);
		if (UNEXPECTED(call_info & (ZEND_CALL_HAS_EXTRA_NAMED_PARAMS|ZEND_CALL_ALLOCATED))) {
			if (call_info & ZEND_CALL_HAS_EXTRA_NAMED_PARAMS) {
				zend_free_extra_named_params(call->extra_named_params);
			}
			zend_vm_stack_free_call_frame_ex(call_info, call);
		} else {
			EG(vm_stack_top) = (zval*)call;
		}

		if (!1) {
			i_zval_ptr_dtor(ret);
		}
	}

	if (UNEXPECTED(EG(exception) != NULL)) {
		zend_rethrow_exception(execute_data);
		HANDLE_EXCEPTION();
	}
	ZEND_VM_SET_OPCODE_NO_INTERRUPT(opline + 1);
	ZEND_VM_CONTINUE();
}

static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_DO_FCALL_BY_NAME_SPEC_OBSERVER_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zend_execute_data *call = EX(call);
	zend_function *fbc = call->func;
	zval *ret;
	zval retval;

	SAVE_OPLINE();
	EX(call) = call->prev_execute_data;

	const uint32_t no_discard = RETURN_VALUE_USED(opline) ? 0 : ZEND_ACC_NODISCARD;

	if (UNEXPECTED(fbc->common.fn_flags & (ZEND_ACC_DEPRECATED|no_discard))) {
		if (fbc->common.fn_flags & ZEND_ACC_DEPRECATED) {
			zend_deprecated_function(fbc);
		}
		if ((fbc->common.fn_flags & no_discard) && EG(exception) == NULL) {
			zend_nodiscard_function(fbc);
		}
		if (UNEXPECTED(EG(exception) != NULL)) {
			UNDEF_RESULT();
			if (!RETURN_VALUE_USED(opline)) {
				ret = &retval;
				ZVAL_UNDEF(ret);
			}
			goto fcall_by_name_end;
		}
	}

	if (EXPECTED(fbc->type == ZEND_USER_FUNCTION)) {
		ret = NULL;
		if (RETURN_VALUE_USED(opline)) {
			ret = EX_VAR(opline->result.var);
		}

		call->prev_execute_data = execute_data;
		execute_data = call;
		i_init_func_execute_data(&fbc->op_array, ret, 0 EXECUTE_DATA_CC);
		LOAD_OPLINE_EX();
		SAVE_OPLINE();
		zend_observer_fcall_begin_specialized(execute_data, false);

		ZEND_VM_ENTER_EX();
	} else {
		ZEND_ASSERT(fbc->type == ZEND_INTERNAL_FUNCTION);
		if (1) {
			ret = NULL;
		}

		call->prev_execute_data = execute_data;
		EG(current_execute_data) = call;

#if ZEND_DEBUG
		bool should_throw = zend_internal_call_should_throw(fbc, call);
#endif

		ret = RETURN_VALUE_USED(opline) ? EX_VAR(opline->result.var) : &retval;
		ZVAL_NULL(ret);

		zend_observer_fcall_begin_specialized(call, false);
		fbc->internal_function.handler(call, ret);

#if ZEND_DEBUG
		if (!EG(exception) && call->func) {
			if (should_throw) {
				zend_internal_call_arginfo_violation(call->func);
			}
			ZEND_ASSERT(!(call->func->common.fn_flags & ZEND_ACC_HAS_RETURN_TYPE) ||
				zend_verify_internal_return_type(call->func, ret));
			ZEND_ASSERT((call->func->common.fn_flags & ZEND_ACC_RETURN_REFERENCE)
				? Z_ISREF_P(ret) : !Z_ISREF_P(ret));
			zend_verify_internal_func_info(call->func, ret);
		}
#endif
		zend_observer_fcall_end(call, EG(exception) ? NULL : ret);
		ZEND_VM_FCALL_INTERRUPT_CHECK(call);

		EG(current_execute_data) = execute_data;

		goto fcall_by_name_end;
	}

	if (0) {
fcall_by_name_end:

		zend_vm_stack_free_args(call);

		uint32_t call_info = ZEND_CALL_INFO(call);
		if (UNEXPECTED(call_info & (ZEND_CALL_HAS_EXTRA_NAMED_PARAMS|ZEND_CALL_ALLOCATED))) {
			if (call_info & ZEND_CALL_HAS_EXTRA_NAMED_PARAMS) {
				zend_free_extra_named_params(call->extra_named_params);
			}
			zend_vm_stack_free_call_frame_ex(call_info, call);
		} else {
			EG(vm_stack_top) = (zval*)call;
		}

		if (!RETURN_VALUE_USED(opline)) {
			i_zval_ptr_dtor(ret);
		}
	}

	if (UNEXPECTED(EG(exception) != NULL)) {
		zend_rethrow_exception(execute_data);
		HANDLE_EXCEPTION();
	}
	ZEND_VM_SET_OPCODE_NO_INTERRUPT(opline + 1);
	ZEND_VM_CONTINUE();
}

static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_DO_FCALL_SPEC_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zend_execute_data *call = EX(call);
	zend_function *fbc = call->func;
	zval *ret;
	zval retval;

	SAVE_OPLINE();
	EX(call) = call->prev_execute_data;

	const uint32_t no_discard = 0 ? 0 : ZEND_ACC_NODISCARD;

	if (UNEXPECTED(fbc->common.fn_flags & (ZEND_ACC_DEPRECATED|no_discard))) {
		if (fbc->common.fn_flags & ZEND_ACC_DEPRECATED) {
			zend_deprecated_function(fbc);
		}
		if ((fbc->common.fn_flags & no_discard) && EG(exception) == NULL) {
			zend_nodiscard_function(fbc);
		}
		if (UNEXPECTED(EG(exception) != NULL)) {
			if (UNEXPECTED(ZEND_CALL_INFO(call) & ZEND_CALL_CLOSURE)) {
				OBJ_RELEASE(ZEND_CLOSURE_OBJECT(call->func));
			}
			UNDEF_RESULT();
			if (!0) {
				ret = &retval;
				ZVAL_UNDEF(ret);
			}
			goto fcall_end;
		}
	}

	if (EXPECTED(fbc->type == ZEND_USER_FUNCTION)) {
		ret = NULL;
		if (0) {
			ret = EX_VAR(opline->result.var);
		}

		call->prev_execute_data = execute_data;
		execute_data = call;
		i_init_func_execute_data(&fbc->op_array, ret, 1 EXECUTE_DATA_CC);

		if (EXPECTED(zend_execute_ex == execute_ex)) {
			LOAD_OPLINE_EX();




			ZEND_VM_ENTER_EX();
		} else {
			SAVE_OPLINE_EX();


			execute_data = EX(prev_execute_data);
			LOAD_OPLINE();
			ZEND_ADD_CALL_FLAG(call, ZEND_CALL_TOP);
			zend_execute_ex(call);
		}
	} else {
		ZEND_ASSERT(fbc->type == ZEND_INTERNAL_FUNCTION);
		if (0) {
			ret = NULL;
		}

		call->prev_execute_data = execute_data;
		EG(current_execute_data) = call;

#if ZEND_DEBUG
		bool should_throw = zend_internal_call_should_throw(fbc, call);
#endif

		ret = 0 ? EX_VAR(opline->result.var) : &retval;
		ZVAL_NULL(ret);


		if (!zend_execute_internal) {
			/* saves one function call if zend_execute_internal is not used */
			fbc->internal_function.handler(call, ret);
		} else {
			zend_execute_internal(call, ret);
		}

#if ZEND_DEBUG
		if (!EG(exception) && call->func && !(call->func->common.fn_flags & ZEND_ACC_FAKE_CLOSURE)) {
			if (should_throw) {
				zend_internal_call_arginfo_violation(call->func);
			}
			ZEND_ASSERT(!(call->func->common.fn_flags & ZEND_ACC_HAS_RETURN_TYPE) ||
				zend_verify_internal_return_type(call->func, ret));
			ZEND_ASSERT((call->func->common.fn_flags & ZEND_ACC_RETURN_REFERENCE)
				? Z_ISREF_P(ret) : !Z_ISREF_P(ret));
			zend_verify_internal_func_info(call->func, ret);
		}
#endif


		ZEND_VM_FCALL_INTERRUPT_CHECK(call);

		EG(current_execute_data) = execute_data;

		goto fcall_end;
	}

	if (0) {
fcall_end:

		zend_vm_stack_free_args(call);
		if (UNEXPECTED(ZEND_CALL_INFO(call) & ZEND_CALL_HAS_EXTRA_NAMED_PARAMS)) {
			zend_free_extra_named_params(call->extra_named_params);
		}

		if (!0) {
			i_zval_ptr_dtor(ret);
		}
	}

	if (UNEXPECTED(ZEND_CALL_INFO(call) & ZEND_CALL_RELEASE_THIS)) {
		OBJ_RELEASE(Z_OBJ(call->This));
	}

	zend_vm_stack_free_call_frame(call);
	if (UNEXPECTED(EG(exception) != NULL)) {
		zend_rethrow_exception(execute_data);
		HANDLE_EXCEPTION();
	}
	ZEND_VM_SET_OPCODE_NO_INTERRUPT(opline + 1);
	ZEND_VM_CONTINUE();
}

static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_DO_FCALL_SPEC_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zend_execute_data *call = EX(call);
	zend_function *fbc = call->func;
	zval *ret;
	zval retval;

	SAVE_OPLINE();
	EX(call) = call->prev_execute_data;

	const uint32_t no_discard = 1 ? 0 : ZEND_ACC_NODISCARD;

	if (UNEXPECTED(fbc->common.fn_flags & (ZEND_ACC_DEPRECATED|no_discard))) {
		if (fbc->common.fn_flags & ZEND_ACC_DEPRECATED) {
			zend_deprecated_function(fbc);
		}
		if ((fbc->common.fn_flags & no_discard) && EG(exception) == NULL) {
			zend_nodiscard_function(fbc);
		}
		if (UNEXPECTED(EG(exception) != NULL)) {
			if (UNEXPECTED(ZEND_CALL_INFO(call) & ZEND_CALL_CLOSURE)) {
				OBJ_RELEASE(ZEND_CLOSURE_OBJECT(call->func));
			}
			UNDEF_RESULT();
			if (!1) {
				ret = &retval;
				ZVAL_UNDEF(ret);
			}
			goto fcall_end;
		}
	}

	if (EXPECTED(fbc->type == ZEND_USER_FUNCTION)) {
		ret = NULL;
		if (1) {
			ret = EX_VAR(opline->result.var);
		}

		call->prev_execute_data = execute_data;
		execute_data = call;
		i_init_func_execute_data(&fbc->op_array, ret, 1 EXECUTE_DATA_CC);

		if (EXPECTED(zend_execute_ex == execute_ex)) {
			LOAD_OPLINE_EX();




			ZEND_VM_ENTER_EX();
		} else {
			SAVE_OPLINE_EX();


			execute_data = EX(prev_execute_data);
			LOAD_OPLINE();
			ZEND_ADD_CALL_FLAG(call, ZEND_CALL_TOP);
			zend_execute_ex(call);
		}
	} else {
		ZEND_ASSERT(fbc->type == ZEND_INTERNAL_FUNCTION);
		if (0) {
			ret = NULL;
		}

		call->prev_execute_data = execute_data;
		EG(current_execute_data) = call;

#if ZEND_DEBUG
		bool should_throw = zend_internal_call_should_throw(fbc, call);
#endif

		ret = 1 ? EX_VAR(opline->result.var) : &retval;
		ZVAL_NULL(ret);


		if (!zend_execute_internal) {
			/* saves one function call if zend_execute_internal is not used */
			fbc->internal_function.handler(call, ret);
		} else {
			zend_execute_internal(call, ret);
		}

#if ZEND_DEBUG
		if (!EG(exception) && call->func && !(call->func->common.fn_flags & ZEND_ACC_FAKE_CLOSURE)) {
			if (should_throw) {
				zend_internal_call_arginfo_violation(call->func);
			}
			ZEND_ASSERT(!(call->func->common.fn_flags & ZEND_ACC_HAS_RETURN_TYPE) ||
				zend_verify_internal_return_type(call->func, ret));
			ZEND_ASSERT((call->func->common.fn_flags & ZEND_ACC_RETURN_REFERENCE)
				? Z_ISREF_P(ret) : !Z_ISREF_P(ret));
			zend_verify_internal_func_info(call->func, ret);
		}
#endif


		ZEND_VM_FCALL_INTERRUPT_CHECK(call);

		EG(current_execute_data) = execute_data;

		goto fcall_end;
	}

	if (0) {
fcall_end:

		zend_vm_stack_free_args(call);
		if (UNEXPECTED(ZEND_CALL_INFO(call) & ZEND_CALL_HAS_EXTRA_NAMED_PARAMS)) {
			zend_free_extra_named_params(call->extra_named_params);
		}

		if (!1) {
			i_zval_ptr_dtor(ret);
		}
	}

	if (UNEXPECTED(ZEND_CALL_INFO(call) & ZEND_CALL_RELEASE_THIS)) {
		OBJ_RELEASE(Z_OBJ(call->This));
	}

	zend_vm_stack_free_call_frame(call);
	if (UNEXPECTED(EG(exception) != NULL)) {
		zend_rethrow_exception(execute_data);
		HANDLE_EXCEPTION();
	}
	ZEND_VM_SET_OPCODE_NO_INTERRUPT(opline + 1);
	ZEND_VM_CONTINUE();
}

static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_DO_FCALL_SPEC_OBSERVER_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zend_execute_data *call = EX(call);
	zend_function *fbc = call->func;
	zval *ret;
	zval retval;

	SAVE_OPLINE();
	EX(call) = call->prev_execute_data;

	const uint32_t no_discard = RETURN_VALUE_USED(opline) ? 0 : ZEND_ACC_NODISCARD;

	if (UNEXPECTED(fbc->common.fn_flags & (ZEND_ACC_DEPRECATED|no_discard))) {
		if (fbc->common.fn_flags & ZEND_ACC_DEPRECATED) {
			zend_deprecated_function(fbc);
		}
		if ((fbc->common.fn_flags & no_discard) && EG(exception) == NULL) {
			zend_nodiscard_function(fbc);
		}
		if (UNEXPECTED(EG(exception) != NULL)) {
			if (UNEXPECTED(ZEND_CALL_INFO(call) & ZEND_CALL_CLOSURE)) {
				OBJ_RELEASE(ZEND_CLOSURE_OBJECT(call->func));
			}
			UNDEF_RESULT();
			if (!RETURN_VALUE_USED(opline)) {
				ret = &retval;
				ZVAL_UNDEF(ret);
			}
			goto fcall_end;
		}
	}

	if (EXPECTED(fbc->type == ZEND_USER_FUNCTION)) {
		ret = NULL;
		if (RETURN_VALUE_USED(opline)) {
			ret = EX_VAR(opline->result.var);
		}

		call->prev_execute_data = execute_data;
		execute_data = call;
		i_init_func_execute_data(&fbc->op_array, ret, 1 EXECUTE_DATA_CC);

		if (EXPECTED(zend_execute_ex == execute_ex)) {
			LOAD_OPLINE_EX();
			SAVE_OPLINE();
			zend_observer_fcall_begin_specialized(execute_data, false);
			ZEND_VM_ENTER_EX();
		} else {
			SAVE_OPLINE_EX();
			zend_observer_fcall_begin_specialized(execute_data, false);
			execute_data = EX(prev_execute_data);
			LOAD_OPLINE();
			ZEND_ADD_CALL_FLAG(call, ZEND_CALL_TOP);
			zend_execute_ex(call);
		}
	} else {
		ZEND_ASSERT(fbc->type == ZEND_INTERNAL_FUNCTION);
		if (1) {
			ret = NULL;
		}

		call->prev_execute_data = execute_data;
		EG(current_execute_data) = call;

#if ZEND_DEBUG
		bool should_throw = zend_internal_call_should_throw(fbc, call);
#endif

		ret = RETURN_VALUE_USED(opline) ? EX_VAR(opline->result.var) : &retval;
		ZVAL_NULL(ret);

		zend_observer_fcall_begin_specialized(call, false);
		if (!zend_execute_internal) {
			/* saves one function call if zend_execute_internal is not used */
			fbc->internal_function.handler(call, ret);
		} else {
			zend_execute_internal(call, ret);
		}

#if ZEND_DEBUG
		if (!EG(exception) && call->func && !(call->func->common.fn_flags & ZEND_ACC_FAKE_CLOSURE)) {
			if (should_throw) {
				zend_internal_call_arginfo_violation(call->func);
			}
			ZEND_ASSERT(!(call->func->common.fn_flags & ZEND_ACC_HAS_RETURN_TYPE) ||
				zend_verify_internal_return_type(call->func, ret));
			ZEND_ASSERT((call->func->common.fn_flags & ZEND_ACC_RETURN_REFERENCE)
				? Z_ISREF_P(ret) : !Z_ISREF_P(ret));
			zend_verify_internal_func_info(call->func, ret);
		}
#endif
		zend_observer_fcall_end(call, EG(exception) ? NULL : ret);
		ZEND_VM_FCALL_INTERRUPT_CHECK(call);

		EG(current_execute_data) = execute_data;

		goto fcall_end;
	}

	if (0) {
fcall_end:

		zend_vm_stack_free_args(call);
		if (UNEXPECTED(ZEND_CALL_INFO(call) & ZEND_CALL_HAS_EXTRA_NAMED_PARAMS)) {
			zend_free_extra_named_params(call->extra_named_params);
		}

		if (!RETURN_VALUE_USED(opline)) {
			i_zval_ptr_dtor(ret);
		}
	}

	if (UNEXPECTED(ZEND_CALL_INFO(call) & ZEND_CALL_RELEASE_THIS)) {
		OBJ_RELEASE(Z_OBJ(call->This));
	}

	zend_vm_stack_free_call_frame(call);
	if (UNEXPECTED(EG(exception) != NULL)) {
		zend_rethrow_exception(execute_data);
		HANDLE_EXCEPTION();
	}
	ZEND_VM_SET_OPCODE_NO_INTERRUPT(opline + 1);
	ZEND_VM_CONTINUE();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_GENERATOR_CREATE_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	zval *return_value = EX(return_value);

	if (EXPECTED(return_value)) {
		USE_OPLINE
		zend_generator *generator;
		zend_execute_data *gen_execute_data;
		uint32_t num_args, used_stack, call_info;

		SAVE_OPLINE();
		object_init_ex(return_value, zend_ce_generator);

		/*
		 * Normally the execute_data is allocated on the VM stack (because it does
		 * not actually do any allocation and thus is faster). For generators
		 * though this behavior would be suboptimal, because the (rather large)
		 * structure would have to be copied back and forth every time execution is
		 * suspended or resumed. That's why for generators the execution context
		 * is allocated on heap.
		 */
		num_args = EX_NUM_ARGS();
		if (EXPECTED(num_args <= EX(func)->op_array.num_args)) {
			used_stack = (ZEND_CALL_FRAME_SLOT + EX(func)->op_array.last_var + EX(func)->op_array.T) * sizeof(zval);
			gen_execute_data = (zend_execute_data*)emalloc(used_stack);
			used_stack = (ZEND_CALL_FRAME_SLOT + EX(func)->op_array.last_var) * sizeof(zval);
		} else {
			used_stack = (ZEND_CALL_FRAME_SLOT + num_args + EX(func)->op_array.last_var + EX(func)->op_array.T - EX(func)->op_array.num_args) * sizeof(zval);
			gen_execute_data = (zend_execute_data*)emalloc(used_stack);
		}
		memcpy(gen_execute_data, execute_data, used_stack);

		/* Save execution context in generator object. */
		generator = (zend_generator *) Z_OBJ_P(EX(return_value));
		generator->func = gen_execute_data->func;
		generator->execute_data = gen_execute_data;
		generator->frozen_call_stack = NULL;
		generator->execute_fake.opline = NULL;
		generator->execute_fake.func = NULL;
		generator->execute_fake.prev_execute_data = NULL;
		ZVAL_OBJ(&generator->execute_fake.This, (zend_object *) generator);

		gen_execute_data->opline = opline;
		/* EX(return_value) keeps pointer to zend_object (not a real zval) */
		gen_execute_data->return_value = (zval*)generator;
		call_info = Z_TYPE_INFO(EX(This));
		if ((call_info & Z_TYPE_MASK) == IS_OBJECT
		 && (!(call_info & (ZEND_CALL_CLOSURE|ZEND_CALL_RELEASE_THIS))
			 /* Bug #72523 */
			|| UNEXPECTED(zend_execute_ex != execute_ex))) {
			ZEND_ADD_CALL_FLAG_EX(call_info, ZEND_CALL_RELEASE_THIS);
			Z_ADDREF(gen_execute_data->This);
		}
		ZEND_ADD_CALL_FLAG_EX(call_info, (ZEND_CALL_TOP_FUNCTION | ZEND_CALL_ALLOCATED | ZEND_CALL_GENERATOR));
		Z_TYPE_INFO(gen_execute_data->This) = call_info;
		gen_execute_data->prev_execute_data = NULL;

		call_info = EX_CALL_INFO();
		EG(current_execute_data) = EX(prev_execute_data);
		if (EXPECTED(!(call_info & (ZEND_CALL_TOP|ZEND_CALL_ALLOCATED)))) {
			EG(vm_stack_top) = (zval*)execute_data;
			execute_data = EX(prev_execute_data);
			LOAD_NEXT_OPLINE();
			ZEND_VM_LEAVE();
		} else if (EXPECTED(!(call_info & ZEND_CALL_TOP))) {
			zend_execute_data *old_execute_data = execute_data;
			execute_data = EX(prev_execute_data);
			zend_vm_stack_free_call_frame_ex(call_info, old_execute_data);
			LOAD_NEXT_OPLINE();
			ZEND_VM_LEAVE();
		} else {
			ZEND_VM_RETURN();
		}
	} else {
		ZEND_VM_TAIL_CALL(zend_leave_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
	}
}

static zend_never_inline ZEND_COLD ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV_EX  zend_cannot_pass_by_ref_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_EX uint32_t _arg_num, zval *_arg)
{
	USE_OPLINE

	SAVE_OPLINE();

	zend_cannot_pass_by_reference(_arg_num);
	FREE_OP(opline->op1_type, opline->op1.var);
	ZVAL_UNDEF(_arg);
	HANDLE_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_SEND_UNPACK_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *args;
	uint32_t arg_num;

	SAVE_OPLINE();
	args = get_zval_ptr_undef(opline->op1_type, opline->op1, BP_VAR_R);
	arg_num = ZEND_CALL_NUM_ARGS(EX(call)) + 1;

send_again:
	if (EXPECTED(Z_TYPE_P(args) == IS_ARRAY)) {
		HashTable *ht = Z_ARRVAL_P(args);
		zval *arg, *top;
		zend_string *name;
		bool have_named_params = 0;

		zend_vm_stack_extend_call_frame(&EX(call), arg_num - 1, zend_hash_num_elements(ht));

		// TODO: Speed this up using a flag that specifies whether there are any ref parameters.
		if ((opline->op1_type & (IS_VAR|IS_CV)) && Z_REFCOUNT_P(args) > 1) {
			uint32_t tmp_arg_num = arg_num;
			bool separate = 0;

			/* check if any of arguments are going to be passed by reference */
			ZEND_HASH_FOREACH_STR_KEY_VAL(ht, name, arg) {
				if (UNEXPECTED(name)) {
					void *cache_slot[2] = {NULL, NULL};
					tmp_arg_num = zend_get_arg_offset_by_name(
						EX(call)->func, name, cache_slot) + 1;
				}
				if (ARG_SHOULD_BE_SENT_BY_REF(EX(call)->func, tmp_arg_num)) {
					separate = 1;
					break;
				}
				tmp_arg_num++;
			} ZEND_HASH_FOREACH_END();
			if (separate) {
				SEPARATE_ARRAY(args);
				ht = Z_ARRVAL_P(args);
			}
		}

		ZEND_HASH_FOREACH_STR_KEY_VAL(ht, name, arg) {
			if (UNEXPECTED(name)) {
				void *cache_slot[2] = {NULL, NULL};
				have_named_params = 1;
				top = zend_handle_named_arg(&EX(call), name, &arg_num, cache_slot);
				if (UNEXPECTED(!top)) {
					FREE_OP(opline->op1_type, opline->op1.var);
					HANDLE_EXCEPTION();
				}
			} else {
				if (have_named_params) {
					zend_throw_error(NULL,
						"Cannot use positional argument after named argument during unpacking");
					FREE_OP(opline->op1_type, opline->op1.var);
					HANDLE_EXCEPTION();
				}

				top = ZEND_CALL_ARG(EX(call), arg_num);
				ZEND_CALL_NUM_ARGS(EX(call))++;
			}

			if (ARG_SHOULD_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
				if (Z_ISREF_P(arg)) {
					Z_ADDREF_P(arg);
					ZVAL_REF(top, Z_REF_P(arg));
				} else if (opline->op1_type & (IS_VAR|IS_CV)) {
					/* array is already separated above */
					ZVAL_MAKE_REF_EX(arg, 2);
					ZVAL_REF(top, Z_REF_P(arg));
				} else {
					Z_TRY_ADDREF_P(arg);
					ZVAL_NEW_REF(top, arg);
				}
			} else {
				ZVAL_COPY_DEREF(top, arg);
			}

			arg_num++;
		} ZEND_HASH_FOREACH_END();

	} else if (EXPECTED(Z_TYPE_P(args) == IS_OBJECT)) {
		zend_class_entry *ce = Z_OBJCE_P(args);
		zend_object_iterator *iter;
		bool have_named_params = 0;

		if (!ce || !ce->get_iterator) {
			zend_type_error("Only arrays and Traversables can be unpacked, %s given", zend_zval_value_name(args));
		} else {

			iter = ce->get_iterator(ce, args, 0);
			if (UNEXPECTED(!iter)) {
				FREE_OP(opline->op1_type, opline->op1.var);
				if (!EG(exception)) {
					zend_throw_exception_ex(
						NULL, 0, "Object of type %s did not create an Iterator", ZSTR_VAL(ce->name)
					);
				}
				HANDLE_EXCEPTION();
			}

			const zend_object_iterator_funcs *funcs = iter->funcs;
			if (funcs->rewind) {
				funcs->rewind(iter);
			}

			for (; funcs->valid(iter) == SUCCESS; ++arg_num) {
				zval *arg, *top;

				if (UNEXPECTED(EG(exception) != NULL)) {
					break;
				}

				arg = funcs->get_current_data(iter);
				if (UNEXPECTED(EG(exception) != NULL)) {
					break;
				}

				zend_string *name = NULL;
				if (funcs->get_current_key) {
					zval key;
					funcs->get_current_key(iter, &key);
					if (UNEXPECTED(EG(exception) != NULL)) {
						break;
					}

					if (UNEXPECTED(Z_TYPE(key) != IS_LONG)) {
						if (UNEXPECTED(Z_TYPE(key) != IS_STRING)) {
							zend_throw_error(NULL,
								"Keys must be of type int|string during argument unpacking");
							zval_ptr_dtor(&key);
							break;
						}

						name = Z_STR_P(&key);

						zend_ulong tmp;
						if (ZEND_HANDLE_NUMERIC(name, tmp)) {
							name = NULL;
						}
					}
				}

				if (UNEXPECTED(name)) {
					void *cache_slot[2] = {NULL, NULL};
					have_named_params = 1;
					top = zend_handle_named_arg(&EX(call), name, &arg_num, cache_slot);
					if (UNEXPECTED(!top)) {
						zend_string_release(name);
						break;
					}

					ZVAL_DEREF(arg);
					Z_TRY_ADDREF_P(arg);

					if (ARG_MUST_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
						zend_error(
							E_WARNING, "Cannot pass by-reference argument %d of %s%s%s()"
							" by unpacking a Traversable, passing by-value instead", arg_num,
							EX(call)->func->common.scope ? ZSTR_VAL(EX(call)->func->common.scope->name) : "",
							EX(call)->func->common.scope ? "::" : "",
							ZSTR_VAL(EX(call)->func->common.function_name)
						);
						ZVAL_NEW_REF(top, arg);
					} else {
						ZVAL_COPY_VALUE(top, arg);
					}

					zend_string_release(name);
				} else {
					if (have_named_params) {
						zend_throw_error(NULL,
							"Cannot use positional argument after named argument during unpacking");
						break;
					}

					zend_vm_stack_extend_call_frame(&EX(call), arg_num - 1, 1);
					top = ZEND_CALL_ARG(EX(call), arg_num);
					ZVAL_DEREF(arg);
					Z_TRY_ADDREF_P(arg);

					if (ARG_MUST_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
						zend_error(
							E_WARNING, "Cannot pass by-reference argument %d of %s%s%s()"
							" by unpacking a Traversable, passing by-value instead", arg_num,
							EX(call)->func->common.scope ? ZSTR_VAL(EX(call)->func->common.scope->name) : "",
							EX(call)->func->common.scope ? "::" : "",
							ZSTR_VAL(EX(call)->func->common.function_name)
						);
						ZVAL_NEW_REF(top, arg);
					} else {
						ZVAL_COPY_VALUE(top, arg);
					}

					ZEND_CALL_NUM_ARGS(EX(call))++;
				}

				funcs->move_forward(iter);
			}

			zend_iterator_dtor(iter);
		}
	} else if (EXPECTED(Z_ISREF_P(args))) {
		args = Z_REFVAL_P(args);
		goto send_again;
	} else {
		if (opline->op1_type == IS_CV && UNEXPECTED(Z_TYPE_P(args) == IS_UNDEF)) {
			ZVAL_UNDEFINED_OP1();
		}
		zend_type_error("Only arrays and Traversables can be unpacked, %s given", zend_zval_value_name(args));
	}

	FREE_OP(opline->op1_type, opline->op1.var);
	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_SEND_ARRAY_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *args;

	SAVE_OPLINE();
	args = get_zval_ptr(opline->op1_type, opline->op1, BP_VAR_R);

	if (UNEXPECTED(Z_TYPE_P(args) != IS_ARRAY)) {
		if ((opline->op1_type & (IS_VAR|IS_CV)) && Z_ISREF_P(args)) {
			args = Z_REFVAL_P(args);
			if (EXPECTED(Z_TYPE_P(args) == IS_ARRAY)) {
				goto send_array;
			}
		}
		zend_type_error("call_user_func_array(): Argument #2 ($args) must be of type array, %s given", zend_zval_value_name(args));
		FREE_OP(opline->op2_type, opline->op2.var);
		FREE_OP(opline->op1_type, opline->op1.var);
		HANDLE_EXCEPTION();
	} else {
		uint32_t arg_num;
		HashTable *ht;
		zval *arg, *param;

send_array:
		ht = Z_ARRVAL_P(args);
		if (opline->op2_type != IS_UNUSED) {
			/* We don't need to handle named params in this case,
			 * because array_slice() is called with $preserve_keys == false. */
			zval *op2 = get_zval_ptr_deref(opline->op2_type, opline->op2, BP_VAR_R);
			uint32_t skip = opline->extended_value;
			uint32_t count = zend_hash_num_elements(ht);
			zend_long len;
			if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
				len = Z_LVAL_P(op2);
			} else if (Z_TYPE_P(op2) == IS_NULL) {
				len = count - skip;
			} else if (EX_USES_STRICT_TYPES()
					|| !zend_parse_arg_long_weak(op2, &len, /* arg_num */ 3)) {
				zend_type_error(
					"array_slice(): Argument #3 ($length) must be of type ?int, %s given",
					zend_zval_value_name(op2));
				FREE_OP(opline->op2_type, opline->op2.var);
				FREE_OP(opline->op1_type, opline->op1.var);
				HANDLE_EXCEPTION();
			}

			if (len < 0) {
				len += (zend_long)(count - skip);
			}
			if (skip < count && len > 0) {
				if (len > (zend_long)(count - skip)) {
					len = (zend_long)(count - skip);
				}
				zend_vm_stack_extend_call_frame(&EX(call), 0, len);
				arg_num = 1;
				param = ZEND_CALL_ARG(EX(call), 1);
				ZEND_HASH_FOREACH_VAL(ht, arg) {
					bool must_wrap = 0;
					if (skip > 0) {
						skip--;
						continue;
					} else if ((zend_long)(arg_num - 1) >= len) {
						break;
					} else if (ARG_SHOULD_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
						if (UNEXPECTED(!Z_ISREF_P(arg))) {
							if (!ARG_MAY_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
								/* By-value send is not allowed -- emit a warning,
								 * but still perform the call. */
								zend_param_must_be_ref(EX(call)->func, arg_num);
								must_wrap = 1;
							}
						}
					} else {
						if (Z_ISREF_P(arg) &&
						    !(EX(call)->func->common.fn_flags & ZEND_ACC_CALL_VIA_TRAMPOLINE)) {
							/* don't separate references for __call */
							arg = Z_REFVAL_P(arg);
						}
					}
					if (EXPECTED(!must_wrap)) {
						ZVAL_COPY(param, arg);
					} else {
						Z_TRY_ADDREF_P(arg);
						ZVAL_NEW_REF(param, arg);
					}
					ZEND_CALL_NUM_ARGS(EX(call))++;
					arg_num++;
					param++;
				} ZEND_HASH_FOREACH_END();
			}
			FREE_OP(opline->op2_type, opline->op2.var);
		} else {
			zend_string *name;
			bool have_named_params;
			zend_vm_stack_extend_call_frame(&EX(call), 0, zend_hash_num_elements(ht));
			arg_num = 1;
			param = ZEND_CALL_ARG(EX(call), 1);
			have_named_params = 0;
			ZEND_HASH_FOREACH_STR_KEY_VAL(ht, name, arg) {
				if (name) {
					void *cache_slot[2] = {NULL, NULL};
					have_named_params = 1;
					param = zend_handle_named_arg(&EX(call), name, &arg_num, cache_slot);
					if (!param) {
						FREE_OP(opline->op1_type, opline->op1.var);
						HANDLE_EXCEPTION();
					}
				} else if (have_named_params) {
					zend_throw_error(NULL,
						"Cannot use positional argument after named argument");
					FREE_OP(opline->op1_type, opline->op1.var);
					HANDLE_EXCEPTION();
				}

				bool must_wrap = 0;
				if (ARG_SHOULD_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
					if (UNEXPECTED(!Z_ISREF_P(arg))) {
						if (!ARG_MAY_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
							/* By-value send is not allowed -- emit a warning,
							 * but still perform the call. */
							zend_param_must_be_ref(EX(call)->func, arg_num);
							must_wrap = 1;
						}
					}
				} else {
					if (Z_ISREF_P(arg) &&
					    !(EX(call)->func->common.fn_flags & ZEND_ACC_CALL_VIA_TRAMPOLINE)) {
						/* don't separate references for __call */
						arg = Z_REFVAL_P(arg);
					}
				}

				if (EXPECTED(!must_wrap)) {
					ZVAL_COPY(param, arg);
				} else {
					Z_TRY_ADDREF_P(arg);
					ZVAL_NEW_REF(param, arg);
				}
				if (!name) {
					ZEND_CALL_NUM_ARGS(EX(call))++;
					arg_num++;
					param++;
				}
			} ZEND_HASH_FOREACH_END();
		}
	}
	FREE_OP(opline->op1_type, opline->op1.var);
	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static zend_never_inline ZEND_COLD ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV  zend_missing_arg_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE

	SAVE_OPLINE();

	zend_missing_arg_error(execute_data);
	HANDLE_EXCEPTION();
}

static zend_never_inline ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV_EX  zend_verify_recv_arg_type_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_EX zval *op_1)
{
	USE_OPLINE

	SAVE_OPLINE();
	if (UNEXPECTED(!zend_verify_recv_arg_type(EX(func), opline->op1.num, op_1))) {
		HANDLE_EXCEPTION();
	}

	ZEND_VM_NEXT_OPCODE();
}

static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_RECV_NOTYPE_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	uint32_t arg_num = opline->op1.num;

	if (UNEXPECTED(arg_num > EX_NUM_ARGS())) {
		ZEND_VM_TAIL_CALL(zend_missing_arg_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
	}

	ZEND_VM_NEXT_OPCODE();
}

static zend_never_inline ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV_EX  zend_case_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_EX zval *op_1, zval *op_2)
{
	int ret;
	USE_OPLINE

	SAVE_OPLINE();
	if (UNEXPECTED(Z_TYPE_INFO_P(op_1) == IS_UNDEF)) {
		op_1 = ZVAL_UNDEFINED_OP1();
	}
	if (UNEXPECTED(Z_TYPE_INFO_P(op_2) == IS_UNDEF)) {
		op_2 = ZVAL_UNDEFINED_OP2();
	}
	ret = zend_compare(op_1, op_2);
	if (opline->op2_type & (IS_TMP_VAR|IS_VAR)) {
		zval_ptr_dtor_nogc(op_2);
	}
	ZEND_VM_SMART_BRANCH(ret == 0, 1);
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_ADD_ARRAY_UNPACK_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1;
	HashTable *result_ht;

	SAVE_OPLINE();
	op1 = get_zval_ptr(opline->op1_type, opline->op1, BP_VAR_R);
	result_ht = Z_ARRVAL_P(EX_VAR(opline->result.var));

add_unpack_again:
	if (EXPECTED(Z_TYPE_P(op1) == IS_ARRAY)) {
		HashTable *ht = Z_ARRVAL_P(op1);
		zval *val;

		if (HT_IS_PACKED(ht) && (zend_hash_num_elements(result_ht) == 0 || HT_IS_PACKED(result_ht))) {
			/* zend_hash_extend() skips initialization when the number of elements is 0,
			 * but the code below expects that result_ht is initialized as packed.
			 * We can just skip the work in that case. */
			if (result_ht->nNumUsed + zend_hash_num_elements(ht) > 0) {
				zend_hash_extend(result_ht, result_ht->nNumUsed + zend_hash_num_elements(ht), 1);
				ZEND_HASH_FILL_PACKED(result_ht) {
					ZEND_HASH_PACKED_FOREACH_VAL(ht, val) {
						if (UNEXPECTED(Z_ISREF_P(val)) &&
							UNEXPECTED(Z_REFCOUNT_P(val) == 1)) {
							val = Z_REFVAL_P(val);
						}
						Z_TRY_ADDREF_P(val);
						ZEND_HASH_FILL_ADD(val);
					} ZEND_HASH_FOREACH_END();
				} ZEND_HASH_FILL_END();
			}
		} else {
			zend_string *key;

			ZEND_HASH_FOREACH_STR_KEY_VAL(ht, key, val) {
				if (UNEXPECTED(Z_ISREF_P(val)) &&
					UNEXPECTED(Z_REFCOUNT_P(val) == 1)) {
					val = Z_REFVAL_P(val);
				}
				Z_TRY_ADDREF_P(val);
				if (key) {
					zend_hash_update(result_ht, key, val);
				} else {
					if (!zend_hash_next_index_insert(result_ht, val)) {
						zend_cannot_add_element();
						zval_ptr_dtor_nogc(val);
						break;
					}
				}
			} ZEND_HASH_FOREACH_END();
		}
	} else if (EXPECTED(Z_TYPE_P(op1) == IS_OBJECT)) {
		zend_class_entry *ce = Z_OBJCE_P(op1);
		zend_object_iterator *iter;

		if (!ce || !ce->get_iterator) {
			zend_type_error("Only arrays and Traversables can be unpacked, %s given", zend_zval_value_name(op1));
		} else {
			iter = ce->get_iterator(ce, op1, 0);
			if (UNEXPECTED(!iter)) {
				FREE_OP(opline->op1_type, opline->op1.var);
				if (!EG(exception)) {
					zend_throw_exception_ex(
						NULL, 0, "Object of type %s did not create an Iterator", ZSTR_VAL(ce->name)
					);
				}
				HANDLE_EXCEPTION();
			}

			const zend_object_iterator_funcs *funcs = iter->funcs;
			if (funcs->rewind) {
				funcs->rewind(iter);
			}

			for (; funcs->valid(iter) == SUCCESS; ) {
				zval *val;

				if (UNEXPECTED(EG(exception) != NULL)) {
					break;
				}

				val = funcs->get_current_data(iter);
				if (UNEXPECTED(EG(exception) != NULL)) {
					break;
				}

				zval key;
				if (funcs->get_current_key) {
					funcs->get_current_key(iter, &key);
					if (UNEXPECTED(EG(exception) != NULL)) {
						break;
					}

					if (UNEXPECTED(Z_TYPE(key) != IS_LONG && Z_TYPE(key) != IS_STRING)) {
						zend_throw_error(NULL,
							"Keys must be of type int|string during array unpacking");
						zval_ptr_dtor(&key);
						break;
					}
				} else {
					ZVAL_UNDEF(&key);
				}

				ZVAL_DEREF(val);
				Z_TRY_ADDREF_P(val);

				zend_ulong num_key;
				if (Z_TYPE(key) == IS_STRING && !ZEND_HANDLE_NUMERIC(Z_STR(key), num_key)) {
					zend_hash_update(result_ht, Z_STR(key), val);
					zval_ptr_dtor_str(&key);
				} else {
					zval_ptr_dtor(&key);
					if (!zend_hash_next_index_insert(result_ht, val)) {
						zend_cannot_add_element();
						zval_ptr_dtor_nogc(val);
						break;
					}
				}

				funcs->move_forward(iter);
				if (UNEXPECTED(EG(exception))) {
					break;
				}
			}

			zend_iterator_dtor(iter);
		}
	} else if (EXPECTED(Z_ISREF_P(op1))) {
		op1 = Z_REFVAL_P(op1);
		goto add_unpack_again;
	} else {
		zend_throw_error(NULL, "Only arrays and Traversables can be unpacked, %s given", zend_zval_value_name(op1));
	}

	FREE_OP(opline->op1_type, opline->op1.var);
	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_UNSET_STATIC_PROP_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *varname;
	zend_string *name, *tmp_name = NULL;
	zend_class_entry *ce;

	SAVE_OPLINE();

	if (opline->op2_type == IS_CONST) {
		ce = CACHED_PTR(opline->extended_value);
		if (UNEXPECTED(ce == NULL)) {
			ce = zend_fetch_class_by_name(Z_STR_P(RT_CONSTANT(opline, opline->op2)), Z_STR_P(RT_CONSTANT(opline, opline->op2) + 1), ZEND_FETCH_CLASS_DEFAULT | ZEND_FETCH_CLASS_EXCEPTION);
			if (UNEXPECTED(ce == NULL)) {
				FREE_OP(opline->op1_type, opline->op1.var);
				HANDLE_EXCEPTION();
			}
			/*CACHE_PTR(opline->extended_value, ce);*/
		}
	} else if (opline->op2_type == IS_UNUSED) {
		ce = zend_fetch_class(NULL, opline->op2.num);
		if (UNEXPECTED(ce == NULL)) {
			FREE_OP(opline->op1_type, opline->op1.var);
			HANDLE_EXCEPTION();
		}
	} else {
		ce = Z_CE_P(EX_VAR(opline->op2.var));
	}

	varname = get_zval_ptr_undef(opline->op1_type, opline->op1, BP_VAR_R);
	if (opline->op1_type == IS_CONST) {
		name = Z_STR_P(varname);
	} else if (EXPECTED(Z_TYPE_P(varname) == IS_STRING)) {
		name = Z_STR_P(varname);
	} else {
		if (opline->op1_type == IS_CV && UNEXPECTED(Z_TYPE_P(varname) == IS_UNDEF)) {
			varname = ZVAL_UNDEFINED_OP1();
		}
		name = zval_try_get_tmp_string(varname, &tmp_name);
		if (UNEXPECTED(!name)) {
			FREE_OP(opline->op1_type, opline->op1.var);
			HANDLE_EXCEPTION();
		}
	}

	zend_std_unset_static_property(ce, name);

	zend_tmp_string_release(tmp_name);
	FREE_OP(opline->op1_type, opline->op1.var);
	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static zend_never_inline ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV  zend_fe_fetch_object_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *array;
	zval *value;
	uint32_t value_type;
	HashTable *fe_ht;
	HashPosition pos;
	Bucket *p;
	zend_object_iterator *iter;

	array = EX_VAR(opline->op1.var);
	SAVE_OPLINE();

	ZEND_ASSERT(Z_TYPE_P(array) == IS_OBJECT);
	if ((iter = zend_iterator_unwrap(array)) == NULL) {
		/* plain object */

		fe_ht = Z_OBJPROP_P(array);
		pos = zend_hash_iterator_pos(Z_FE_ITER_P(array), fe_ht);
		p = fe_ht->arData + pos;
		while (1) {
			if (UNEXPECTED(pos >= fe_ht->nNumUsed)) {
				/* reached end of iteration */
				goto fe_fetch_r_exit;
			}
			pos++;
			value = &p->val;
			value_type = Z_TYPE_INFO_P(value);
			if (EXPECTED(value_type != IS_UNDEF)) {
				if (UNEXPECTED(value_type == IS_INDIRECT)) {
					value = Z_INDIRECT_P(value);
					value_type = Z_TYPE_INFO_P(value);
					if (EXPECTED(value_type != IS_UNDEF)
					 && EXPECTED(zend_check_property_access(Z_OBJ_P(array), p->key, 0) == SUCCESS)) {
						break;
					}
				} else if (EXPECTED(Z_OBJCE_P(array)->default_properties_count == 0)
						|| !p->key
						|| zend_check_property_access(Z_OBJ_P(array), p->key, 1) == SUCCESS) {
					break;
				}
			}
			p++;
		}
		EG(ht_iterators)[Z_FE_ITER_P(array)].pos = pos;
		if (RETURN_VALUE_USED(opline)) {
			if (UNEXPECTED(!p->key)) {
				ZVAL_LONG(EX_VAR(opline->result.var), p->h);
			} else if (ZSTR_VAL(p->key)[0]) {
				ZVAL_STR_COPY(EX_VAR(opline->result.var), p->key);
			} else {
				const char *class_name, *prop_name;
				size_t prop_name_len;
				zend_unmangle_property_name_ex(
					p->key, &class_name, &prop_name, &prop_name_len);
				ZVAL_STRINGL(EX_VAR(opline->result.var), prop_name, prop_name_len);
			}
		}
	} else {
		const zend_object_iterator_funcs *funcs = iter->funcs;
		if (EXPECTED(++iter->index > 0)) {
			/* This could cause an endless loop if index becomes zero again.
			 * In case that ever happens we need an additional flag. */
			funcs->move_forward(iter);
			if (UNEXPECTED(EG(exception) != NULL)) {
				UNDEF_RESULT();
				HANDLE_EXCEPTION();
			}
			if (UNEXPECTED(funcs->valid(iter) == FAILURE)) {
				/* reached end of iteration */
				if (UNEXPECTED(EG(exception) != NULL)) {
					UNDEF_RESULT();
					HANDLE_EXCEPTION();
				}
fe_fetch_r_exit:
				ZEND_VM_SET_RELATIVE_OPCODE(opline, opline->extended_value);
				ZEND_VM_CONTINUE();
			}
		}
		value = funcs->get_current_data(iter);
		if (UNEXPECTED(EG(exception) != NULL)) {
			UNDEF_RESULT();
			HANDLE_EXCEPTION();
		}
		if (!value) {
			/* failure in get_current_data */
			goto fe_fetch_r_exit;
		}
		if (RETURN_VALUE_USED(opline)) {
			if (funcs->get_current_key) {
				funcs->get_current_key(iter, EX_VAR(opline->result.var));
				if (UNEXPECTED(EG(exception) != NULL)) {
					UNDEF_RESULT();
					HANDLE_EXCEPTION();
				}
			} else {
				ZVAL_LONG(EX_VAR(opline->result.var), iter->index);
			}
		}
		value_type = Z_TYPE_INFO_P(value);
	}

	if (EXPECTED(opline->op2_type == IS_CV)) {
		zval *variable_ptr = EX_VAR(opline->op2.var);
		zend_assign_to_variable(variable_ptr, value, IS_CV, EX_USES_STRICT_TYPES());
	} else {
		zval *res = EX_VAR(opline->op2.var);
		zend_refcounted *gc = Z_COUNTED_P(value);

		ZVAL_COPY_VALUE_EX(res, value, gc, value_type);
		if (Z_TYPE_INFO_REFCOUNTED(value_type)) {
			GC_ADDREF(gc);
		}
	}
	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_ISSET_ISEMPTY_STATIC_PROP_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *value;
	bool result;

	SAVE_OPLINE();

	value = zend_fetch_static_property_address(NULL, opline->extended_value & ~ZEND_ISEMPTY, BP_VAR_IS, 0 OPLINE_CC EXECUTE_DATA_CC);

	if (!(opline->extended_value & ZEND_ISEMPTY)) {
		result = value != NULL && Z_TYPE_P(value) > IS_NULL &&
		    (!Z_ISREF_P(value) || Z_TYPE_P(Z_REFVAL_P(value)) != IS_NULL);
	} else {
		result = value == NULL || !i_zend_is_true(value);
	}

	ZEND_VM_SMART_BRANCH(result, 1);
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_BEGIN_SILENCE_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE

	ZVAL_LONG(EX_VAR(opline->result.var), EG(error_reporting));

	if (!E_HAS_ONLY_FATAL_ERRORS(EG(error_reporting))) {
		do {
			/* Do not silence fatal errors */
			EG(error_reporting) &= E_FATAL_ERRORS;
			if (!EG(error_reporting_ini_entry)) {
				zval *zv = zend_hash_find_known_hash(EG(ini_directives), ZSTR_KNOWN(ZEND_STR_ERROR_REPORTING));
				if (zv) {
					EG(error_reporting_ini_entry) = (zend_ini_entry *)Z_PTR_P(zv);
				} else {
					break;
				}
			}
			if (!EG(error_reporting_ini_entry)->modified) {
				if (!EG(modified_ini_directives)) {
					ALLOC_HASHTABLE(EG(modified_ini_directives));
					zend_hash_init(EG(modified_ini_directives), 8, NULL, NULL, 0);
				}
				if (EXPECTED(zend_hash_add_ptr(EG(modified_ini_directives), ZSTR_KNOWN(ZEND_STR_ERROR_REPORTING), EG(error_reporting_ini_entry)) != NULL)) {
					EG(error_reporting_ini_entry)->orig_value = EG(error_reporting_ini_entry)->value;
					EG(error_reporting_ini_entry)->orig_modifiable = EG(error_reporting_ini_entry)->modifiable;
					EG(error_reporting_ini_entry)->modified = 1;
				}
			}
		} while (0);
	}
	ZEND_VM_NEXT_OPCODE();
}

static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_EXT_STMT_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE

	if (!EG(no_extensions)) {
		SAVE_OPLINE();
		zend_llist_apply_with_argument(&zend_extensions, (llist_apply_with_arg_func_t) zend_extension_statement_handler, execute_data);
		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
	}
	ZEND_VM_NEXT_OPCODE();
}

static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_EXT_FCALL_BEGIN_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE

	if (!EG(no_extensions)) {
		SAVE_OPLINE();
		zend_llist_apply_with_argument(&zend_extensions, (llist_apply_with_arg_func_t) zend_extension_fcall_begin_handler, execute_data);
		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
	}
	ZEND_VM_NEXT_OPCODE();
}

static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_EXT_FCALL_END_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE

	if (!EG(no_extensions)) {
		SAVE_OPLINE();
		zend_llist_apply_with_argument(&zend_extensions, (llist_apply_with_arg_func_t) zend_extension_fcall_end_handler, execute_data);
		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
	}
	ZEND_VM_NEXT_OPCODE();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_DECLARE_ANON_CLASS_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	zval *zv;
	zend_class_entry *ce;
	USE_OPLINE

	ce = CACHED_PTR(opline->extended_value);
	if (UNEXPECTED(ce == NULL)) {
		zend_string *rtd_key = Z_STR_P(RT_CONSTANT(opline, opline->op1));
		zv = zend_hash_find_known_hash(EG(class_table), rtd_key);
		ZEND_ASSERT(zv != NULL);
		ce = Z_CE_P(zv);
		if (!(ce->ce_flags & ZEND_ACC_LINKED)) {
			SAVE_OPLINE();
			ce = zend_do_link_class(ce, (opline->op2_type == IS_CONST) ? Z_STR_P(RT_CONSTANT(opline, opline->op2)) : NULL, rtd_key);
			if (EG(exception)) {
				HANDLE_EXCEPTION();
			}
		}
		CACHE_PTR(opline->extended_value, ce);
	}
	Z_CE_P(EX_VAR(opline->result.var)) = ce;
	ZEND_VM_NEXT_OPCODE();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_DECLARE_FUNCTION_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	zend_function *func;
	USE_OPLINE

	SAVE_OPLINE();
	func = (zend_function *) EX(func)->op_array.dynamic_func_defs[opline->op2.num];
	do_bind_function(func, RT_CONSTANT(opline, opline->op1));
	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_TICKS_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE

	if ((uint32_t)++EG(ticks_count) >= opline->extended_value) {
		EG(ticks_count) = 0;
		if (zend_ticks_function) {
			SAVE_OPLINE();
			zend_fiber_switch_block();
			zend_ticks_function(opline->extended_value);
			zend_fiber_switch_unblock();
			ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
		}
	}
	ZEND_VM_NEXT_OPCODE();
}

static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_EXT_NOP_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE

	ZEND_VM_NEXT_OPCODE();
}

static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_NOP_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE

	ZEND_VM_NEXT_OPCODE();
}

static zend_never_inline ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV_EX  zend_dispatch_try_catch_finally_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_EX uint32_t try_catch_offset, uint32_t op_num)
{
	/* May be NULL during generator closing (only finally blocks are executed) */
	zend_object *ex = EG(exception);

	/* Walk try/catch/finally structures upwards, performing the necessary actions */
	for (; try_catch_offset != (uint32_t) -1; try_catch_offset--) {
		zend_try_catch_element *try_catch =
			&EX(func)->op_array.try_catch_array[try_catch_offset];

		if (op_num < try_catch->catch_op && ex) {
			/* Go to catch block */
			cleanup_live_vars(execute_data, op_num, try_catch->catch_op);
			ZEND_VM_JMP_EX(&EX(func)->op_array.opcodes[try_catch->catch_op], 0);

		} else if (op_num < try_catch->finally_op) {
			if (ex && zend_is_unwind_exit(ex)) {
				/* Don't execute finally blocks on exit (for now) */
				continue;
			}

			/* Go to finally block */
			zval *fast_call = EX_VAR(EX(func)->op_array.opcodes[try_catch->finally_end].op1.var);
			cleanup_live_vars(execute_data, op_num, try_catch->finally_op);
			Z_OBJ_P(fast_call) = EG(exception);
			EG(exception) = NULL;
			Z_OPLINE_NUM_P(fast_call) = (uint32_t)-1;
			ZEND_VM_JMP_EX(&EX(func)->op_array.opcodes[try_catch->finally_op], 0);

		} else if (op_num < try_catch->finally_end) {
			zval *fast_call = EX_VAR(EX(func)->op_array.opcodes[try_catch->finally_end].op1.var);

			/* cleanup incomplete RETURN statement */
			if (Z_OPLINE_NUM_P(fast_call) != (uint32_t)-1
			 && (EX(func)->op_array.opcodes[Z_OPLINE_NUM_P(fast_call)].op2_type & (IS_TMP_VAR | IS_VAR))) {
				zval *return_value = EX_VAR(EX(func)->op_array.opcodes[Z_OPLINE_NUM_P(fast_call)].op2.var);

				zval_ptr_dtor(return_value);
			}

			/* Chain potential exception from wrapping finally block */
			if (Z_OBJ_P(fast_call)) {
				if (ex) {
					if (zend_is_unwind_exit(ex) || zend_is_graceful_exit(ex)) {
						/* discard the previously thrown exception */
						OBJ_RELEASE(Z_OBJ_P(fast_call));
					} else {
						zend_exception_set_previous(ex, Z_OBJ_P(fast_call));
					}
				} else {
					ex = EG(exception) = Z_OBJ_P(fast_call);
				}
			}
		}
	}

	/* Uncaught exception */

	/* Don't use 0 because it gets replaced by zend_vm_gen.php. */
	if (zend_observer_fcall_op_array_extension != -1) {
		zend_observer_fcall_end(execute_data, NULL);
	}
	cleanup_live_vars(execute_data, op_num, 0);
	if (UNEXPECTED((EX_CALL_INFO() & ZEND_CALL_GENERATOR) != 0)) {
		zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C);
		EG(current_execute_data) = EX(prev_execute_data);
		zend_generator_close(generator, 1);
		ZEND_VM_RETURN();
	} else {
		/* We didn't execute RETURN, and have to initialize return_value */
		if (EX(return_value)) {
			ZVAL_UNDEF(EX(return_value));
		}
		ZEND_VM_TAIL_CALL(zend_leave_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
	}
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_HANDLE_EXCEPTION_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	const zend_op *throw_op = EG(opline_before_exception);

	/* Exception was thrown before executing any op */
	if (UNEXPECTED(!throw_op)) {
		ZEND_VM_DISPATCH_TO_HELPER(zend_dispatch_try_catch_finally_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_EX -1, 0));
	}

	uint32_t throw_op_num = throw_op - EX(func)->op_array.opcodes;
	int i, current_try_catch_offset = -1;

	if ((throw_op->opcode == ZEND_FREE || throw_op->opcode == ZEND_FE_FREE)
		&& throw_op->extended_value & ZEND_FREE_ON_RETURN) {
		/* exceptions thrown because of loop var destruction on return/break/...
		 * are logically thrown at the end of the foreach loop, so adjust the
		 * throw_op_num to the final loop variable FREE.
		 */
		uint32_t new_throw_op_num = throw_op_num + throw_op->op2.opline_num;
		cleanup_live_vars(execute_data, throw_op_num, new_throw_op_num);
		throw_op_num = new_throw_op_num;
	}

	/* Find the innermost try/catch/finally the exception was thrown in */
	for (i = 0; i < EX(func)->op_array.last_try_catch; i++) {
		zend_try_catch_element *try_catch = &EX(func)->op_array.try_catch_array[i];
		if (try_catch->try_op > throw_op_num) {
			/* further blocks will not be relevant... */
			break;
		}
		if (throw_op_num < try_catch->catch_op || throw_op_num < try_catch->finally_end) {
			current_try_catch_offset = i;
		}
	}

	cleanup_unfinished_calls(execute_data, throw_op_num);

	if (throw_op->result_type & (IS_VAR | IS_TMP_VAR)) {
		switch (throw_op->opcode) {
			case ZEND_ADD_ARRAY_ELEMENT:
			case ZEND_ADD_ARRAY_UNPACK:
			case ZEND_ROPE_INIT:
			case ZEND_ROPE_ADD:
				break; /* exception while building structures, live range handling will free those */

			case ZEND_FETCH_CLASS:
			case ZEND_DECLARE_ANON_CLASS:
				break; /* return value is zend_class_entry pointer */

			default:
				/* smart branch opcodes may not initialize result */
				if (!zend_is_smart_branch(throw_op)) {
					zval_ptr_dtor_nogc(EX_VAR(throw_op->result.var));
				}
		}
	}

	ZEND_VM_DISPATCH_TO_HELPER(zend_dispatch_try_catch_finally_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_EX current_try_catch_offset, throw_op_num));
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_USER_OPCODE_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	int ret;

	SAVE_OPLINE();
	ret = zend_user_opcode_handlers[opline->opcode](execute_data);
	opline = EX(opline);

	switch (ret) {
		case ZEND_USER_OPCODE_CONTINUE:
			ZEND_VM_CONTINUE();
		case ZEND_USER_OPCODE_RETURN:
			if (UNEXPECTED((EX_CALL_INFO() & ZEND_CALL_GENERATOR) != 0)) {
				zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C);
				EG(current_execute_data) = EX(prev_execute_data);
				zend_generator_close(generator, 1);
				ZEND_VM_RETURN();
			} else {
				ZEND_VM_TAIL_CALL(zend_leave_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
			}
		case ZEND_USER_OPCODE_ENTER:
			ZEND_VM_ENTER();
		case ZEND_USER_OPCODE_LEAVE:
			ZEND_VM_LEAVE();
		case ZEND_USER_OPCODE_DISPATCH:
			ZEND_VM_DISPATCH(opline->opcode, opline);
		default:
			ZEND_VM_DISPATCH((uint8_t)(ret & 0xff), opline);
	}
}

static zend_never_inline ZEND_COLD ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV  zend_yield_in_closed_generator_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE

	SAVE_OPLINE();
	zend_throw_error(NULL, "Cannot yield from finally in a force-closed generator");
	FREE_OP(opline->op2_type, opline->op2.var);
	FREE_OP(opline->op1_type, opline->op1.var);
	UNDEF_RESULT();
	HANDLE_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_DISCARD_EXCEPTION_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *fast_call = EX_VAR(opline->op1.var);
	SAVE_OPLINE();

	/* cleanup incomplete RETURN statement */
	if (Z_OPLINE_NUM_P(fast_call) != (uint32_t)-1
	 && (EX(func)->op_array.opcodes[Z_OPLINE_NUM_P(fast_call)].op2_type & (IS_TMP_VAR | IS_VAR))) {
		zval *return_value = EX_VAR(EX(func)->op_array.opcodes[Z_OPLINE_NUM_P(fast_call)].op2.var);

		zval_ptr_dtor(return_value);
		/* Clear return value in case we hit both DISCARD_EXCEPTION and
		 * zend_dispatch_try_catch_finally_helper, which will free the return
		 * value again. See OSS-Fuzz #438780145. */
		ZVAL_NULL(return_value);
	}

	/* cleanup delayed exception */
	if (Z_OBJ_P(fast_call) != NULL) {
		/* discard the previously thrown exception */
		OBJ_RELEASE(Z_OBJ_P(fast_call));
		Z_OBJ_P(fast_call) = NULL;
	}

	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_FAST_CALL_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *fast_call = EX_VAR(opline->result.var);

	Z_OBJ_P(fast_call) = NULL;
	/* set return address */
	Z_OPLINE_NUM_P(fast_call) = opline - EX(func)->op_array.opcodes;
	ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op1), 0);
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_FAST_RET_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *fast_call = EX_VAR(opline->op1.var);
	uint32_t current_try_catch_offset, current_op_num;

	if (Z_OPLINE_NUM_P(fast_call) != (uint32_t)-1) {
		const zend_op *fast_ret = EX(func)->op_array.opcodes + Z_OPLINE_NUM_P(fast_call);

		ZEND_VM_JMP_EX(fast_ret + 1, 0);
	}

	/* special case for unhandled exceptions */
	EG(exception) = Z_OBJ_P(fast_call);
	Z_OBJ_P(fast_call) = NULL;
	current_try_catch_offset = opline->op2.num;
	current_op_num = opline - EX(func)->op_array.opcodes;
	ZEND_VM_DISPATCH_TO_HELPER(zend_dispatch_try_catch_finally_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_EX current_try_catch_offset, current_op_num));
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_ASSERT_CHECK_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE

	if (EG(assertions) <= 0) {
		zend_op *target = OP_JMP_ADDR(opline, opline->op2);
		if (RETURN_VALUE_USED(opline)) {
			ZVAL_TRUE(EX_VAR(opline->result.var));
		}
		ZEND_VM_JMP_EX(target, 0);
	} else {
		ZEND_VM_NEXT_OPCODE();
	}
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_CALL_TRAMPOLINE_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	zend_array *args = NULL;
	zend_function *fbc = EX(func);
	zval *ret = EX(return_value);
	uint32_t call_info = EX_CALL_INFO() & (ZEND_CALL_NESTED | ZEND_CALL_TOP | ZEND_CALL_RELEASE_THIS | ZEND_CALL_HAS_EXTRA_NAMED_PARAMS);
	uint32_t num_args = EX_NUM_ARGS();
	zend_execute_data *call;

	SAVE_OPLINE();

	if (num_args) {
		zval *p = ZEND_CALL_ARG(execute_data, 1);
		zval *end = p + num_args;

		args = zend_new_array(num_args);
		zend_hash_real_init_packed(args);
		ZEND_HASH_FILL_PACKED(args) {
			do {
				ZEND_HASH_FILL_ADD(p);
				p++;
			} while (p != end);
		} ZEND_HASH_FILL_END();
	}

	call = execute_data;
	execute_data = EG(current_execute_data) = EX(prev_execute_data);

	call->func = (fbc->op_array.fn_flags & ZEND_ACC_STATIC) ? fbc->op_array.scope->__callstatic : fbc->op_array.scope->__call;
	ZEND_ASSERT(zend_vm_calc_used_stack(2, call->func) <= (size_t)(((char*)EG(vm_stack_end)) - (char*)call));
	ZEND_CALL_NUM_ARGS(call) = 2;

	ZVAL_STR(ZEND_CALL_ARG(call, 1), fbc->common.function_name);

	zval *call_args = ZEND_CALL_ARG(call, 2);
	if (args) {
		ZVAL_ARR(call_args, args);
	} else {
		ZVAL_EMPTY_ARRAY(call_args);
	}
	if (UNEXPECTED(call_info & ZEND_CALL_HAS_EXTRA_NAMED_PARAMS)) {
		if (zend_hash_num_elements(Z_ARRVAL_P(call_args)) == 0) {
			GC_ADDREF(call->extra_named_params);
			ZVAL_ARR(call_args, call->extra_named_params);
		} else {
			SEPARATE_ARRAY(call_args);
			zend_hash_copy(Z_ARRVAL_P(call_args), call->extra_named_params, zval_add_ref);
		}
	}
	zend_free_trampoline(fbc);
	fbc = call->func;

	if (EXPECTED(fbc->type == ZEND_USER_FUNCTION)) {
		if (UNEXPECTED(!RUN_TIME_CACHE(&fbc->op_array))) {
			init_func_run_time_cache(&fbc->op_array);
		}
		execute_data = call;
		i_init_func_execute_data(&fbc->op_array, ret, 0 EXECUTE_DATA_CC);
		if (EXPECTED(zend_execute_ex == execute_ex)) {
			LOAD_OPLINE_EX();




			ZEND_VM_ENTER_EX();
		} else {
			SAVE_OPLINE_EX();


			execute_data = EX(prev_execute_data);
			if (execute_data) {
				LOAD_OPLINE();
			}
			ZEND_ADD_CALL_FLAG(call, ZEND_CALL_TOP);
			zend_execute_ex(call);
		}
	} else {
		zval retval;

		ZEND_ASSERT(fbc->type == ZEND_INTERNAL_FUNCTION);

		EG(current_execute_data) = call;

#if ZEND_DEBUG
		bool should_throw = zend_internal_call_should_throw(fbc, call);
#endif

		if (ret == NULL) {
			ret = &retval;
		}

		ZVAL_NULL(ret);


		if (!zend_execute_internal) {
			/* saves one function call if zend_execute_internal is not used */
			fbc->internal_function.handler(call, ret);
		} else {
			zend_execute_internal(call, ret);
		}

#if ZEND_DEBUG
		if (!EG(exception) && call->func) {
			if (should_throw) {
				zend_internal_call_arginfo_violation(call->func);
			}
			ZEND_ASSERT(!(call->func->common.fn_flags & ZEND_ACC_HAS_RETURN_TYPE) ||
				zend_verify_internal_return_type(call->func, ret));
			ZEND_ASSERT((call->func->common.fn_flags & ZEND_ACC_RETURN_REFERENCE)
				? Z_ISREF_P(ret) : !Z_ISREF_P(ret));
			zend_verify_internal_func_info(call->func, ret);
		}
#endif


		EG(current_execute_data) = call->prev_execute_data;

		zend_vm_stack_free_args(call);
		if (UNEXPECTED(call_info & ZEND_CALL_HAS_EXTRA_NAMED_PARAMS)) {
			zend_free_extra_named_params(call->extra_named_params);
		}
		if (ret == &retval) {
			zval_ptr_dtor(ret);
		}
	}

	execute_data = EG(current_execute_data);

	if (!execute_data || !EX(func) || !ZEND_USER_CODE(EX(func)->type) || (call_info & ZEND_CALL_TOP)) {
		ZEND_VM_RETURN();
	}

	if (UNEXPECTED(call_info & ZEND_CALL_RELEASE_THIS)) {
		zend_object *object = Z_OBJ(call->This);
		OBJ_RELEASE(object);
	}
	zend_vm_stack_free_call_frame(call);

	if (UNEXPECTED(EG(exception) != NULL)) {
		zend_rethrow_exception(execute_data);
		HANDLE_EXCEPTION_LEAVE();
	}

	LOAD_OPLINE();
	ZEND_VM_INC_OPCODE();
	ZEND_VM_LEAVE();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_CALL_TRAMPOLINE_SPEC_OBSERVER_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	zend_array *args = NULL;
	zend_function *fbc = EX(func);
	zval *ret = EX(return_value);
	uint32_t call_info = EX_CALL_INFO() & (ZEND_CALL_NESTED | ZEND_CALL_TOP | ZEND_CALL_RELEASE_THIS | ZEND_CALL_HAS_EXTRA_NAMED_PARAMS);
	uint32_t num_args = EX_NUM_ARGS();
	zend_execute_data *call;

	SAVE_OPLINE();

	if (num_args) {
		zval *p = ZEND_CALL_ARG(execute_data, 1);
		zval *end = p + num_args;

		args = zend_new_array(num_args);
		zend_hash_real_init_packed(args);
		ZEND_HASH_FILL_PACKED(args) {
			do {
				ZEND_HASH_FILL_ADD(p);
				p++;
			} while (p != end);
		} ZEND_HASH_FILL_END();
	}

	call = execute_data;
	execute_data = EG(current_execute_data) = EX(prev_execute_data);

	call->func = (fbc->op_array.fn_flags & ZEND_ACC_STATIC) ? fbc->op_array.scope->__callstatic : fbc->op_array.scope->__call;
	ZEND_ASSERT(zend_vm_calc_used_stack(2, call->func) <= (size_t)(((char*)EG(vm_stack_end)) - (char*)call));
	ZEND_CALL_NUM_ARGS(call) = 2;

	ZVAL_STR(ZEND_CALL_ARG(call, 1), fbc->common.function_name);

	zval *call_args = ZEND_CALL_ARG(call, 2);
	if (args) {
		ZVAL_ARR(call_args, args);
	} else {
		ZVAL_EMPTY_ARRAY(call_args);
	}
	if (UNEXPECTED(call_info & ZEND_CALL_HAS_EXTRA_NAMED_PARAMS)) {
		if (zend_hash_num_elements(Z_ARRVAL_P(call_args)) == 0) {
			GC_ADDREF(call->extra_named_params);
			ZVAL_ARR(call_args, call->extra_named_params);
		} else {
			SEPARATE_ARRAY(call_args);
			zend_hash_copy(Z_ARRVAL_P(call_args), call->extra_named_params, zval_add_ref);
		}
	}
	zend_free_trampoline(fbc);
	fbc = call->func;

	if (EXPECTED(fbc->type == ZEND_USER_FUNCTION)) {
		if (UNEXPECTED(!RUN_TIME_CACHE(&fbc->op_array))) {
			init_func_run_time_cache(&fbc->op_array);
		}
		execute_data = call;
		i_init_func_execute_data(&fbc->op_array, ret, 0 EXECUTE_DATA_CC);
		if (EXPECTED(zend_execute_ex == execute_ex)) {
			LOAD_OPLINE_EX();
			SAVE_OPLINE();
			zend_observer_fcall_begin_specialized(execute_data, false);
			ZEND_VM_ENTER_EX();
		} else {
			SAVE_OPLINE_EX();
			zend_observer_fcall_begin_specialized(execute_data, false);
			execute_data = EX(prev_execute_data);
			if (execute_data) {
				LOAD_OPLINE();
			}
			ZEND_ADD_CALL_FLAG(call, ZEND_CALL_TOP);
			zend_execute_ex(call);
		}
	} else {
		zval retval;

		ZEND_ASSERT(fbc->type == ZEND_INTERNAL_FUNCTION);

		EG(current_execute_data) = call;

#if ZEND_DEBUG
		bool should_throw = zend_internal_call_should_throw(fbc, call);
#endif

		if (ret == NULL) {
			ret = &retval;
		}

		ZVAL_NULL(ret);
		zend_observer_fcall_begin_specialized(call, false);
		if (!zend_execute_internal) {
			/* saves one function call if zend_execute_internal is not used */
			fbc->internal_function.handler(call, ret);
		} else {
			zend_execute_internal(call, ret);
		}

#if ZEND_DEBUG
		if (!EG(exception) && call->func) {
			if (should_throw) {
				zend_internal_call_arginfo_violation(call->func);
			}
			ZEND_ASSERT(!(call->func->common.fn_flags & ZEND_ACC_HAS_RETURN_TYPE) ||
				zend_verify_internal_return_type(call->func, ret));
			ZEND_ASSERT((call->func->common.fn_flags & ZEND_ACC_RETURN_REFERENCE)
				? Z_ISREF_P(ret) : !Z_ISREF_P(ret));
			zend_verify_internal_func_info(call->func, ret);
		}
#endif
		zend_observer_fcall_end(call, EG(exception) ? NULL : ret);

		EG(current_execute_data) = call->prev_execute_data;

		zend_vm_stack_free_args(call);
		if (UNEXPECTED(call_info & ZEND_CALL_HAS_EXTRA_NAMED_PARAMS)) {
			zend_free_extra_named_params(call->extra_named_params);
		}
		if (ret == &retval) {
			zval_ptr_dtor(ret);
		}
	}

	execute_data = EG(current_execute_data);

	if (!execute_data || !EX(func) || !ZEND_USER_CODE(EX(func)->type) || (call_info & ZEND_CALL_TOP)) {
		ZEND_VM_RETURN();
	}

	if (UNEXPECTED(call_info & ZEND_CALL_RELEASE_THIS)) {
		zend_object *object = Z_OBJ(call->This);
		OBJ_RELEASE(object);
	}
	zend_vm_stack_free_call_frame(call);

	if (UNEXPECTED(EG(exception) != NULL)) {
		zend_rethrow_exception(execute_data);
		HANDLE_EXCEPTION_LEAVE();
	}

	LOAD_OPLINE();
	ZEND_VM_INC_OPCODE();
	ZEND_VM_LEAVE();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_FRAMELESS_ICALL_2_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	SAVE_OPLINE();

	zval *result = EX_VAR(opline->result.var);
	ZVAL_NULL(result);
	zval *arg1 = get_zval_ptr_deref(opline->op1_type, opline->op1, BP_VAR_R);
	zval *arg2 = get_zval_ptr_deref(opline->op2_type, opline->op2, BP_VAR_R);
	if (EG(exception)) {
		FREE_OP(opline->op1_type, opline->op1.var);
		FREE_OP(opline->op2_type, opline->op2.var);
		HANDLE_EXCEPTION();
	}

#if 0 || 0
	if (0 && UNEXPECTED(zend_observer_handler_is_unobserved(ZEND_OBSERVER_DATA(ZEND_FLF_FUNC(opline))) == false)) {
		zend_frameless_observed_call(execute_data);
	} else
#endif
	{
		zend_frameless_function_2 function = (zend_frameless_function_2)ZEND_FLF_HANDLER(opline);
		function(result, arg1, arg2);
	}

	FREE_OP(opline->op1_type, opline->op1.var);
	/* Set OP1 to UNDEF in case FREE_OP(opline->op2_type, opline->op2.var) throws. */
	if (opline->op1_type & (IS_VAR|IS_TMP_VAR)) {
		ZVAL_UNDEF(EX_VAR(opline->op1.var));
	}
	FREE_OP(opline->op2_type, opline->op2.var);
	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_FRAMELESS_ICALL_2_SPEC_OBSERVER_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	SAVE_OPLINE();

	zval *result = EX_VAR(opline->result.var);
	ZVAL_NULL(result);
	zval *arg1 = get_zval_ptr_deref(opline->op1_type, opline->op1, BP_VAR_R);
	zval *arg2 = get_zval_ptr_deref(opline->op2_type, opline->op2, BP_VAR_R);
	if (EG(exception)) {
		FREE_OP(opline->op1_type, opline->op1.var);
		FREE_OP(opline->op2_type, opline->op2.var);
		HANDLE_EXCEPTION();
	}

#if 0 || 1
	if (1 && UNEXPECTED(zend_observer_handler_is_unobserved(ZEND_OBSERVER_DATA(ZEND_FLF_FUNC(opline))) == false)) {
		zend_frameless_observed_call(execute_data);
	} else
#endif
	{
		zend_frameless_function_2 function = (zend_frameless_function_2)ZEND_FLF_HANDLER(opline);
		function(result, arg1, arg2);
	}

	FREE_OP(opline->op1_type, opline->op1.var);
	/* Set OP1 to UNDEF in case FREE_OP(opline->op2_type, opline->op2.var) throws. */
	if (opline->op1_type & (IS_VAR|IS_TMP_VAR)) {
		ZVAL_UNDEF(EX_VAR(opline->op1.var));
	}
	FREE_OP(opline->op2_type, opline->op2.var);
	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_FRAMELESS_ICALL_3_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	SAVE_OPLINE();

	zval *result = EX_VAR(opline->result.var);
	ZVAL_NULL(result);
	zval *arg1 = get_zval_ptr_deref(opline->op1_type, opline->op1, BP_VAR_R);
	zval *arg2 = get_zval_ptr_deref(opline->op2_type, opline->op2, BP_VAR_R);
	zval *arg3 = get_op_data_zval_ptr_deref_r((opline+1)->op1_type, (opline+1)->op1);
	if (EG(exception)) {
		FREE_OP(opline->op1_type, opline->op1.var);
		FREE_OP(opline->op2_type, opline->op2.var);
		FREE_OP((opline+1)->op1_type, (opline+1)->op1.var);
		HANDLE_EXCEPTION();
	}

#if 0 || 0
	if (0 && UNEXPECTED(zend_observer_handler_is_unobserved(ZEND_OBSERVER_DATA(ZEND_FLF_FUNC(opline))) == false)) {
		zend_frameless_observed_call(execute_data);
	} else
#endif
	{
		zend_frameless_function_3 function = (zend_frameless_function_3)ZEND_FLF_HANDLER(opline);
		function(result, arg1, arg2, arg3);
	}

	FREE_OP(opline->op1_type, opline->op1.var);
	/* Set to UNDEF in case FREE_OP(opline->op2_type, opline->op2.var) throws. */
	if (opline->op1_type & (IS_VAR|IS_TMP_VAR)) {
		ZVAL_UNDEF(EX_VAR(opline->op1.var));
	}
	FREE_OP(opline->op2_type, opline->op2.var);
	if (opline->op2_type & (IS_VAR|IS_TMP_VAR)) {
		ZVAL_UNDEF(EX_VAR(opline->op2.var));
	}
	FREE_OP((opline+1)->op1_type, (opline+1)->op1.var);
	ZEND_VM_NEXT_OPCODE_EX(1, 2);
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_FRAMELESS_ICALL_3_SPEC_OBSERVER_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	SAVE_OPLINE();

	zval *result = EX_VAR(opline->result.var);
	ZVAL_NULL(result);
	zval *arg1 = get_zval_ptr_deref(opline->op1_type, opline->op1, BP_VAR_R);
	zval *arg2 = get_zval_ptr_deref(opline->op2_type, opline->op2, BP_VAR_R);
	zval *arg3 = get_op_data_zval_ptr_deref_r((opline+1)->op1_type, (opline+1)->op1);
	if (EG(exception)) {
		FREE_OP(opline->op1_type, opline->op1.var);
		FREE_OP(opline->op2_type, opline->op2.var);
		FREE_OP((opline+1)->op1_type, (opline+1)->op1.var);
		HANDLE_EXCEPTION();
	}

#if 0 || 1
	if (1 && UNEXPECTED(zend_observer_handler_is_unobserved(ZEND_OBSERVER_DATA(ZEND_FLF_FUNC(opline))) == false)) {
		zend_frameless_observed_call(execute_data);
	} else
#endif
	{
		zend_frameless_function_3 function = (zend_frameless_function_3)ZEND_FLF_HANDLER(opline);
		function(result, arg1, arg2, arg3);
	}

	FREE_OP(opline->op1_type, opline->op1.var);
	/* Set to UNDEF in case FREE_OP(opline->op2_type, opline->op2.var) throws. */
	if (opline->op1_type & (IS_VAR|IS_TMP_VAR)) {
		ZVAL_UNDEF(EX_VAR(opline->op1.var));
	}
	FREE_OP(opline->op2_type, opline->op2.var);
	if (opline->op2_type & (IS_VAR|IS_TMP_VAR)) {
		ZVAL_UNDEF(EX_VAR(opline->op2.var));
	}
	FREE_OP((opline+1)->op1_type, (opline+1)->op1.var);
	ZEND_VM_NEXT_OPCODE_EX(1, 2);
}

static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_JMP_FORWARD_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE

	OPLINE = OP_JMP_ADDR(opline, opline->op1);
	ZEND_VM_CONTINUE();
}

static zend_never_inline ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV  zend_interrupt_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS)
{
	zend_atomic_bool_store_ex(&EG(vm_interrupt), false);
	SAVE_OPLINE();
	if (zend_atomic_bool_load_ex(&EG(timed_out))) {
		zend_timeout();
	} else if (zend_interrupt_function) {
		zend_interrupt_function(execute_data);
		if (EG(exception)) {
			/* We have to UNDEF result, because ZEND_HANDLE_EXCEPTION is going to free it */
			const zend_op *throw_op = EG(opline_before_exception);

			if (throw_op
			 && throw_op->result_type & (IS_TMP_VAR|IS_VAR)
			 && throw_op->opcode != ZEND_ADD_ARRAY_ELEMENT
			 && throw_op->opcode != ZEND_ADD_ARRAY_UNPACK
			 && throw_op->opcode != ZEND_ROPE_INIT
			 && throw_op->opcode != ZEND_ROPE_ADD) {
				ZVAL_UNDEF(ZEND_CALL_VAR(EG(current_execute_data), throw_op->result.var));

			}
		}
		ZEND_VM_ENTER();
	}
	ZEND_VM_CONTINUE();
}
static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_INIT_FCALL_BY_NAME_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zend_function *fbc;
	zval *function_name, *func;
	zend_execute_data *call;

	fbc = CACHED_PTR(opline->result.num);
	if (UNEXPECTED(fbc == NULL)) {
		function_name = (zval*)RT_CONSTANT(opline, opline->op2);
		func = zend_hash_find_known_hash(EG(function_table), Z_STR_P(function_name+1));
		if (UNEXPECTED(func == NULL)) {
			ZEND_VM_TAIL_CALL(zend_undefined_function_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
		}
		fbc = Z_FUNC_P(func);
		if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!RUN_TIME_CACHE(&fbc->op_array))) {
			init_func_run_time_cache(&fbc->op_array);
		}
		CACHE_PTR(opline->result.num, fbc);
	}
	call = _zend_vm_stack_push_call_frame(ZEND_CALL_NESTED_FUNCTION,
		fbc, opline->extended_value, NULL);
	call->prev_execute_data = EX(call);
	EX(call) = call;

	ZEND_VM_NEXT_OPCODE();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_INIT_DYNAMIC_CALL_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *function_name;
	zend_execute_data *call;

	SAVE_OPLINE();
	function_name = RT_CONSTANT(opline, opline->op2);

try_function_name:
	if (IS_CONST != IS_CONST && EXPECTED(Z_TYPE_P(function_name) == IS_STRING)) {
		call = zend_init_dynamic_call_string(Z_STR_P(function_name), opline->extended_value);
	} else if (IS_CONST != IS_CONST && EXPECTED(Z_TYPE_P(function_name) == IS_OBJECT)) {
		call = zend_init_dynamic_call_object(Z_OBJ_P(function_name), opline->extended_value);
	} else if (EXPECTED(Z_TYPE_P(function_name) == IS_ARRAY)) {
		call = zend_init_dynamic_call_array(Z_ARRVAL_P(function_name), opline->extended_value);
	} else if ((IS_CONST & (IS_VAR|IS_CV)) && EXPECTED(Z_TYPE_P(function_name) == IS_REFERENCE)) {
		function_name = Z_REFVAL_P(function_name);
		goto try_function_name;
	} else {
		if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) {
			function_name = ZVAL_UNDEFINED_OP2();
			if (UNEXPECTED(EG(exception) != NULL)) {
				HANDLE_EXCEPTION();
			}
		}
		zend_throw_error(NULL, "Value of type %s is not callable",
			zend_zval_type_name(function_name));
		call = NULL;
	}

	if (IS_CONST & (IS_VAR|IS_TMP_VAR)) {


		if (UNEXPECTED(EG(exception))) {
			if (call) {
				 if (call->func->common.fn_flags & ZEND_ACC_CALL_VIA_TRAMPOLINE) {
					zend_string_release_ex(call->func->common.function_name, 0);
					zend_free_trampoline(call->func);
				}
				zend_vm_stack_free_call_frame(call);
			}
			HANDLE_EXCEPTION();
		}
	} else if (!call) {
		HANDLE_EXCEPTION();
	}

	call->prev_execute_data = EX(call);
	EX(call) = call;

	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_INIT_NS_FCALL_BY_NAME_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *func_name;
	zval *func;
	zend_function *fbc;
	zend_execute_data *call;

	fbc = CACHED_PTR(opline->result.num);
	if (UNEXPECTED(fbc == NULL)) {
		func_name = (zval *)RT_CONSTANT(opline, opline->op2);
		func = zend_hash_find_known_hash(EG(function_table), Z_STR_P(func_name + 1));
		if (func == NULL) {
			func = zend_hash_find_known_hash(EG(function_table), Z_STR_P(func_name + 2));
			if (UNEXPECTED(func == NULL)) {
				ZEND_VM_TAIL_CALL(zend_undefined_function_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
			}
		}
		fbc = Z_FUNC_P(func);
		if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!RUN_TIME_CACHE(&fbc->op_array))) {
			init_func_run_time_cache(&fbc->op_array);
		}
		CACHE_PTR(opline->result.num, fbc);
	}

	call = _zend_vm_stack_push_call_frame(ZEND_CALL_NESTED_FUNCTION,
		fbc, opline->extended_value, NULL);
	call->prev_execute_data = EX(call);
	EX(call) = call;

	ZEND_VM_NEXT_OPCODE();
}

static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_INIT_FCALL_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *fname;
	zval *func;
	zend_function *fbc;
	zend_execute_data *call;

	fbc = CACHED_PTR(opline->result.num);
	if (UNEXPECTED(fbc == NULL)) {
		fname = (zval*)RT_CONSTANT(opline, opline->op2);
		func = zend_hash_find_known_hash(EG(function_table), Z_STR_P(fname));
		ZEND_ASSERT(func != NULL && "Function existence must be checked at compile time");
		fbc = Z_FUNC_P(func);
		if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!RUN_TIME_CACHE(&fbc->op_array))) {
			init_func_run_time_cache(&fbc->op_array);
		}
		CACHE_PTR(opline->result.num, fbc);
	}

	call = _zend_vm_stack_push_call_frame_ex(
		opline->op1.num, ZEND_CALL_NESTED_FUNCTION,
		fbc, opline->extended_value, NULL);
	call->prev_execute_data = EX(call);
	EX(call) = call;

	ZEND_VM_NEXT_OPCODE();
}

static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_INIT_FCALL_OFFSET_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zend_function *fbc;
	zend_execute_data *call;
	fbc = CACHED_PTR(opline->result.num);
	if (UNEXPECTED(fbc == NULL)) {
		fbc = Z_PTR(EG(function_table)->arData[Z_EXTRA_P(RT_CONSTANT(opline, opline->op2))].val);
		CACHE_PTR(opline->result.num, fbc);
	}
	call = _zend_vm_stack_push_call_frame_ex(
		opline->op1.num, ZEND_CALL_NESTED_FUNCTION,
		fbc, opline->extended_value, NULL);
	call->prev_execute_data = EX(call);
	EX(call) = call;
	ZEND_VM_NEXT_OPCODE();
}

static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_RECV_INIT_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	uint32_t arg_num;
	zval *param;

	ZEND_VM_REPEATABLE_OPCODE

	arg_num = opline->op1.num;
	param = EX_VAR(opline->result.var);
	if (arg_num > EX_NUM_ARGS()) {
		zval *default_value = RT_CONSTANT(opline, opline->op2);

		if (Z_OPT_TYPE_P(default_value) == IS_CONSTANT_AST) {
			zval *cache_val = (zval*)CACHE_ADDR(Z_CACHE_SLOT_P(default_value));

			/* we keep in cache only not refcounted values */
			if (Z_TYPE_P(cache_val) != IS_UNDEF) {
				ZVAL_COPY_VALUE(param, cache_val);
			} else {
				SAVE_OPLINE();
				ZVAL_COPY(param, default_value);
				zend_ast_evaluate_ctx ctx = {0};
				if (UNEXPECTED(zval_update_constant_with_ctx(param, EX(func)->op_array.scope, &ctx) != SUCCESS)) {
					zval_ptr_dtor_nogc(param);
					ZVAL_UNDEF(param);
					HANDLE_EXCEPTION();
				}
				if (!Z_REFCOUNTED_P(param) && !ctx.had_side_effects) {
					ZVAL_COPY_VALUE(cache_val, param);
				}
			}
			goto recv_init_check_type;
		} else {
			ZVAL_COPY(param, default_value);
		}
	} else {
recv_init_check_type:
		if ((EX(func)->op_array.fn_flags & ZEND_ACC_HAS_TYPE_HINTS) != 0) {
			SAVE_OPLINE();
			if (UNEXPECTED(!zend_verify_recv_arg_type(EX(func), arg_num, param))) {
				HANDLE_EXCEPTION();
			}
		}
	}

	ZEND_VM_REPEAT_OPCODE(ZEND_RECV_INIT);
	ZEND_VM_NEXT_OPCODE();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_INIT_DYNAMIC_CALL_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *function_name;
	zend_execute_data *call;

	SAVE_OPLINE();
	function_name = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);

try_function_name:
	if ((IS_TMP_VAR|IS_VAR) != IS_CONST && EXPECTED(Z_TYPE_P(function_name) == IS_STRING)) {
		call = zend_init_dynamic_call_string(Z_STR_P(function_name), opline->extended_value);
	} else if ((IS_TMP_VAR|IS_VAR) != IS_CONST && EXPECTED(Z_TYPE_P(function_name) == IS_OBJECT)) {
		call = zend_init_dynamic_call_object(Z_OBJ_P(function_name), opline->extended_value);
	} else if (EXPECTED(Z_TYPE_P(function_name) == IS_ARRAY)) {
		call = zend_init_dynamic_call_array(Z_ARRVAL_P(function_name), opline->extended_value);
	} else if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && EXPECTED(Z_TYPE_P(function_name) == IS_REFERENCE)) {
		function_name = Z_REFVAL_P(function_name);
		goto try_function_name;
	} else {
		if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) {
			function_name = ZVAL_UNDEFINED_OP2();
			if (UNEXPECTED(EG(exception) != NULL)) {
				HANDLE_EXCEPTION();
			}
		}
		zend_throw_error(NULL, "Value of type %s is not callable",
			zend_zval_type_name(function_name));
		call = NULL;
	}

	if ((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_TMP_VAR)) {
		zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
		if (UNEXPECTED(EG(exception))) {
			if (call) {
				 if (call->func->common.fn_flags & ZEND_ACC_CALL_VIA_TRAMPOLINE) {
					zend_string_release_ex(call->func->common.function_name, 0);
					zend_free_trampoline(call->func);
				}
				zend_vm_stack_free_call_frame(call);
			}
			HANDLE_EXCEPTION();
		}
	} else if (!call) {
		HANDLE_EXCEPTION();
	}

	call->prev_execute_data = EX(call);
	EX(call) = call;

	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_RECV_SPEC_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	uint32_t arg_num = opline->op1.num;
	zval *param;

	if (UNEXPECTED(arg_num > EX_NUM_ARGS())) {
		ZEND_VM_TAIL_CALL(zend_missing_arg_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
	}

	param = EX_VAR(opline->result.var);

	if (UNEXPECTED(!(opline->op2.num & (1u << Z_TYPE_P(param))))) {
		ZEND_VM_DISPATCH_TO_HELPER(zend_verify_recv_arg_type_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_EX param));
	}

	ZEND_VM_NEXT_OPCODE();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_RECV_VARIADIC_SPEC_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	uint32_t arg_num = opline->op1.num;
	uint32_t arg_count = EX_NUM_ARGS();
	zval *params;

	SAVE_OPLINE();

	params = EX_VAR(opline->result.var);

	if (arg_num <= arg_count) {
		ZEND_ASSERT(EX(func)->common.fn_flags & ZEND_ACC_VARIADIC);
		ZEND_ASSERT(EX(func)->common.num_args == arg_num - 1);
		zend_arg_info *arg_info = &EX(func)->common.arg_info[arg_num - 1];

		array_init_size(params, arg_count - arg_num + 1);
		zend_hash_real_init_packed(Z_ARRVAL_P(params));
		ZEND_HASH_FILL_PACKED(Z_ARRVAL_P(params)) {
			zval *param = EX_VAR_NUM(EX(func)->op_array.last_var + EX(func)->op_array.T);
			if (ZEND_TYPE_IS_SET(arg_info->type)) {
				ZEND_ADD_CALL_FLAG(execute_data, ZEND_CALL_FREE_EXTRA_ARGS);
				do {
					if (UNEXPECTED(!zend_verify_variadic_arg_type(EX(func), arg_info, arg_num, param))) {
						ZEND_HASH_FILL_FINISH();
						HANDLE_EXCEPTION();
					}

					if (Z_OPT_REFCOUNTED_P(param)) Z_ADDREF_P(param);
					ZEND_HASH_FILL_ADD(param);
					param++;
				} while (++arg_num <= arg_count);
			} else {
				do {
					if (Z_OPT_REFCOUNTED_P(param)) Z_ADDREF_P(param);
					ZEND_HASH_FILL_ADD(param);
					param++;
				} while (++arg_num <= arg_count);
			}
		} ZEND_HASH_FILL_END();
	} else {
		ZVAL_EMPTY_ARRAY(params);
	}

	if (EX_CALL_INFO() & ZEND_CALL_HAS_EXTRA_NAMED_PARAMS) {
		zend_string *name;
		zval *param;
		zend_arg_info *arg_info = &EX(func)->common.arg_info[EX(func)->common.num_args];
		if (ZEND_TYPE_IS_SET(arg_info->type)) {
			SEPARATE_ARRAY(params);
			ZEND_HASH_MAP_FOREACH_STR_KEY_VAL(EX(extra_named_params), name, param) {
				if (UNEXPECTED(!zend_verify_variadic_arg_type(EX(func), arg_info, arg_num, param))) {
					HANDLE_EXCEPTION();
				}
				Z_TRY_ADDREF_P(param);
				zend_hash_add_new(Z_ARRVAL_P(params), name, param);
			} ZEND_HASH_FOREACH_END();
		} else if (zend_hash_num_elements(Z_ARRVAL_P(params)) == 0) {
			GC_ADDREF(EX(extra_named_params));
			ZVAL_ARR(params, EX(extra_named_params));
		} else {
			SEPARATE_ARRAY(params);
			ZEND_HASH_MAP_FOREACH_STR_KEY_VAL(EX(extra_named_params), name, param) {
				Z_TRY_ADDREF_P(param);
				zend_hash_add_new(Z_ARRVAL_P(params), name, param);
			} ZEND_HASH_FOREACH_END();
		}
	}

	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_FRAMELESS_ICALL_1_SPEC_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	SAVE_OPLINE();

	zval *result = EX_VAR(opline->result.var);
	ZVAL_NULL(result);
	zval *arg1 = get_zval_ptr_deref(opline->op1_type, opline->op1, BP_VAR_R);
	if (EG(exception)) {
		FREE_OP(opline->op1_type, opline->op1.var);
		HANDLE_EXCEPTION();
	}

#if 0 || 0
	if (0 && UNEXPECTED(zend_observer_handler_is_unobserved(ZEND_OBSERVER_DATA(ZEND_FLF_FUNC(opline))) == false)) {
		zend_frameless_observed_call(execute_data);
	} else
#endif
	{
		zend_frameless_function_1 function = (zend_frameless_function_1)ZEND_FLF_HANDLER(opline);
		function(result, arg1);
	}
	FREE_OP(opline->op1_type, opline->op1.var);
	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_FRAMELESS_ICALL_1_SPEC_OBSERVER_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	SAVE_OPLINE();

	zval *result = EX_VAR(opline->result.var);
	ZVAL_NULL(result);
	zval *arg1 = get_zval_ptr_deref(opline->op1_type, opline->op1, BP_VAR_R);
	if (EG(exception)) {
		FREE_OP(opline->op1_type, opline->op1.var);
		HANDLE_EXCEPTION();
	}

#if 0 || 1
	if (1 && UNEXPECTED(zend_observer_handler_is_unobserved(ZEND_OBSERVER_DATA(ZEND_FLF_FUNC(opline))) == false)) {
		zend_frameless_observed_call(execute_data);
	} else
#endif
	{
		zend_frameless_function_1 function = (zend_frameless_function_1)ZEND_FLF_HANDLER(opline);
		function(result, arg1);
	}
	FREE_OP(opline->op1_type, opline->op1.var);
	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_INIT_DYNAMIC_CALL_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *function_name;
	zend_execute_data *call;

	SAVE_OPLINE();
	function_name = EX_VAR(opline->op2.var);

try_function_name:
	if (IS_CV != IS_CONST && EXPECTED(Z_TYPE_P(function_name) == IS_STRING)) {
		call = zend_init_dynamic_call_string(Z_STR_P(function_name), opline->extended_value);
	} else if (IS_CV != IS_CONST && EXPECTED(Z_TYPE_P(function_name) == IS_OBJECT)) {
		call = zend_init_dynamic_call_object(Z_OBJ_P(function_name), opline->extended_value);
	} else if (EXPECTED(Z_TYPE_P(function_name) == IS_ARRAY)) {
		call = zend_init_dynamic_call_array(Z_ARRVAL_P(function_name), opline->extended_value);
	} else if ((IS_CV & (IS_VAR|IS_CV)) && EXPECTED(Z_TYPE_P(function_name) == IS_REFERENCE)) {
		function_name = Z_REFVAL_P(function_name);
		goto try_function_name;
	} else {
		if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) {
			function_name = ZVAL_UNDEFINED_OP2();
			if (UNEXPECTED(EG(exception) != NULL)) {
				HANDLE_EXCEPTION();
			}
		}
		zend_throw_error(NULL, "Value of type %s is not callable",
			zend_zval_type_name(function_name));
		call = NULL;
	}

	if (IS_CV & (IS_VAR|IS_TMP_VAR)) {


		if (UNEXPECTED(EG(exception))) {
			if (call) {
				 if (call->func->common.fn_flags & ZEND_ACC_CALL_VIA_TRAMPOLINE) {
					zend_string_release_ex(call->func->common.function_name, 0);
					zend_free_trampoline(call->func);
				}
				zend_vm_stack_free_call_frame(call);
			}
			HANDLE_EXCEPTION();
		}
	} else if (!call) {
		HANDLE_EXCEPTION();
	}

	call->prev_execute_data = EX(call);
	EX(call) = call;

	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_BW_NOT_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1;

	op1 = RT_CONSTANT(opline, opline->op1);
	if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
		ZVAL_LONG(EX_VAR(opline->result.var), ~Z_LVAL_P(op1));
		ZEND_VM_NEXT_OPCODE();
	}

	ZEND_VM_DISPATCH_TO_HELPER(zend_bw_not_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_EX op1));
}

static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_BOOL_NOT_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *val;

	val = RT_CONSTANT(opline, opline->op1);
	if (Z_TYPE_INFO_P(val) == IS_TRUE) {
		ZVAL_FALSE(EX_VAR(opline->result.var));
	} else if (EXPECTED(Z_TYPE_INFO_P(val) <= IS_TRUE)) {
		/* The result and op1 can be the same cv zval */
		const uint32_t orig_val_type = Z_TYPE_INFO_P(val);
		ZVAL_TRUE(EX_VAR(opline->result.var));
		if (IS_CONST == IS_CV && UNEXPECTED(orig_val_type == IS_UNDEF)) {
			SAVE_OPLINE();
			ZVAL_UNDEFINED_OP1();
			ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
		}
	} else {
		SAVE_OPLINE();
		ZVAL_BOOL(EX_VAR(opline->result.var), !i_zend_is_true(val));


		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
	}
	ZEND_VM_NEXT_OPCODE();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_ECHO_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *z;

	SAVE_OPLINE();
	z = RT_CONSTANT(opline, opline->op1);

	if (Z_TYPE_P(z) == IS_STRING) {
		zend_string *str = Z_STR_P(z);

		if (ZSTR_LEN(str) != 0) {
			zend_write(ZSTR_VAL(str), ZSTR_LEN(str));
		}
	} else {
		zend_string *str = zval_get_string_func(z);

		if (ZSTR_LEN(str) != 0) {
			zend_write(ZSTR_VAL(str), ZSTR_LEN(str));
		} else if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(z) == IS_UNDEF)) {
			ZVAL_UNDEFINED_OP1();
		}
		zend_string_release_ex(str, 0);
	}


	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_JMPZ_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *val;
	uint8_t op1_type;

	val = RT_CONSTANT(opline, opline->op1);

	if (Z_TYPE_INFO_P(val) == IS_TRUE) {
		ZEND_VM_NEXT_OPCODE();
	} else if (EXPECTED(Z_TYPE_INFO_P(val) <= IS_TRUE)) {
		if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(val) == IS_UNDEF)) {
			SAVE_OPLINE();
			ZVAL_UNDEFINED_OP1();
			if (UNEXPECTED(EG(exception))) {
				HANDLE_EXCEPTION();
			}
		}
		ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0);
	}

	SAVE_OPLINE();
	op1_type = IS_CONST;
	if (i_zend_is_true(val)) {
		opline++;
	} else {
		opline = OP_JMP_ADDR(opline, opline->op2);
	}
	if (op1_type & (IS_TMP_VAR|IS_VAR)) {
		zval_ptr_dtor_nogc(val);
	}
	ZEND_VM_JMP(opline);
}

static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_JMPNZ_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *val;
	uint8_t op1_type;

	val = RT_CONSTANT(opline, opline->op1);

	if (Z_TYPE_INFO_P(val) == IS_TRUE) {
		ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0);
	} else if (EXPECTED(Z_TYPE_INFO_P(val) <= IS_TRUE)) {
		if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(val) == IS_UNDEF)) {
			SAVE_OPLINE();
			ZVAL_UNDEFINED_OP1();
			if (UNEXPECTED(EG(exception))) {
				HANDLE_EXCEPTION();
			}
		}
		ZEND_VM_NEXT_OPCODE();
	}

	SAVE_OPLINE();
	op1_type = IS_CONST;
	if (i_zend_is_true(val)) {
		opline = OP_JMP_ADDR(opline, opline->op2);
	} else {
		opline++;
	}
	if (op1_type & (IS_TMP_VAR|IS_VAR)) {
		zval_ptr_dtor_nogc(val);
	}
	ZEND_VM_JMP(opline);
}

static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_JMPZ_EX_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *val;
	bool ret;

	val = RT_CONSTANT(opline, opline->op1);

	if (Z_TYPE_INFO_P(val) == IS_TRUE) {
		ZVAL_TRUE(EX_VAR(opline->result.var));
		ZEND_VM_NEXT_OPCODE();
	} else if (EXPECTED(Z_TYPE_INFO_P(val) <= IS_TRUE)) {
		ZVAL_FALSE(EX_VAR(opline->result.var));
		if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(val) == IS_UNDEF)) {
			SAVE_OPLINE();
			ZVAL_UNDEFINED_OP1();
			if (UNEXPECTED(EG(exception))) {
				HANDLE_EXCEPTION();
			}
		}
		ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0);
	}

	SAVE_OPLINE();
	ret = i_zend_is_true(val);


	if (ret) {
		ZVAL_TRUE(EX_VAR(opline->result.var));
		opline++;
	} else {
		ZVAL_FALSE(EX_VAR(opline->result.var));
		opline = OP_JMP_ADDR(opline, opline->op2);
	}
	ZEND_VM_JMP(opline);
}

static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_JMPNZ_EX_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *val;
	bool ret;

	val = RT_CONSTANT(opline, opline->op1);

	if (Z_TYPE_INFO_P(val) == IS_TRUE) {
		ZVAL_TRUE(EX_VAR(opline->result.var));
		ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0);
	} else if (EXPECTED(Z_TYPE_INFO_P(val) <= IS_TRUE)) {
		ZVAL_FALSE(EX_VAR(opline->result.var));
		if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(val) == IS_UNDEF)) {
			SAVE_OPLINE();
			ZVAL_UNDEFINED_OP1();
			ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
		} else {
			ZEND_VM_NEXT_OPCODE();
		}
	}

	SAVE_OPLINE();
	ret = i_zend_is_true(val);


	if (ret) {
		ZVAL_TRUE(EX_VAR(opline->result.var));
		opline = OP_JMP_ADDR(opline, opline->op2);
	} else {
		ZVAL_FALSE(EX_VAR(opline->result.var));
		opline++;
	}
	ZEND_VM_JMP(opline);
}

static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_RETURN_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *retval_ptr;
	zval *return_value;


	retval_ptr = RT_CONSTANT(opline, opline->op1);
	return_value = EX(return_value);


	if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(retval_ptr) == IS_UNDEF)) {
		SAVE_OPLINE();
		retval_ptr = ZVAL_UNDEFINED_OP1();
		if (return_value) {
			ZVAL_NULL(return_value);
		}
	} else if (!return_value) {
		if (IS_CONST & (IS_VAR|IS_TMP_VAR)) {
			if (Z_REFCOUNTED_P(retval_ptr) && !Z_DELREF_P(retval_ptr)) {
				SAVE_OPLINE();
				rc_dtor_func(Z_COUNTED_P(retval_ptr));
			}
		}
	} else {
		if ((IS_CONST & (IS_CONST|IS_TMP_VAR))) {
			ZVAL_COPY_VALUE(return_value, retval_ptr);
			if (IS_CONST == IS_CONST) {
				if (UNEXPECTED(Z_OPT_REFCOUNTED_P(return_value))) {
					Z_ADDREF_P(return_value);
				}
			}
		} else if (IS_CONST == IS_CV) {
			do {
				if (Z_OPT_REFCOUNTED_P(retval_ptr)) {
					if (EXPECTED(!Z_OPT_ISREF_P(retval_ptr))) {
						if (EXPECTED(!(EX_CALL_INFO() & (ZEND_CALL_CODE|ZEND_CALL_OBSERVED)))) {
							zend_refcounted *ref = Z_COUNTED_P(retval_ptr);
							ZVAL_COPY_VALUE(return_value, retval_ptr);
							if (GC_MAY_LEAK(ref)) {
								SAVE_OPLINE();
								gc_possible_root(ref);
							}
							ZVAL_NULL(retval_ptr);
							break;
						} else {
							Z_ADDREF_P(retval_ptr);
						}
					} else {
						retval_ptr = Z_REFVAL_P(retval_ptr);
						if (Z_OPT_REFCOUNTED_P(retval_ptr)) {
							Z_ADDREF_P(retval_ptr);
						}
					}
				}
				ZVAL_COPY_VALUE(return_value, retval_ptr);
			} while (0);
		} else /* if (IS_CONST == IS_VAR) */ {
			if (UNEXPECTED(Z_ISREF_P(retval_ptr))) {
				zend_refcounted *ref = Z_COUNTED_P(retval_ptr);

				retval_ptr = Z_REFVAL_P(retval_ptr);
				ZVAL_COPY_VALUE(return_value, retval_ptr);
				if (UNEXPECTED(GC_DELREF(ref) == 0)) {
					efree_size(ref, sizeof(zend_reference));
				} else if (Z_OPT_REFCOUNTED_P(retval_ptr)) {
					Z_ADDREF_P(retval_ptr);
				}
			} else {
				ZVAL_COPY_VALUE(return_value, retval_ptr);
			}
		}
	}






	ZEND_VM_TAIL_CALL(zend_leave_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
}

static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_RETURN_SPEC_OBSERVER_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *retval_ptr;
	zval *return_value;
	zval observer_retval;

	retval_ptr = get_zval_ptr_undef(opline->op1_type, opline->op1, BP_VAR_R);
	return_value = EX(return_value);
	if (!return_value) { return_value = &observer_retval; };
	if (opline->op1_type == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(retval_ptr) == IS_UNDEF)) {
		SAVE_OPLINE();
		retval_ptr = ZVAL_UNDEFINED_OP1();
		if (return_value) {
			ZVAL_NULL(return_value);
		}
	} else if (!return_value) {
		if (opline->op1_type & (IS_VAR|IS_TMP_VAR)) {
			if (Z_REFCOUNTED_P(retval_ptr) && !Z_DELREF_P(retval_ptr)) {
				SAVE_OPLINE();
				rc_dtor_func(Z_COUNTED_P(retval_ptr));
			}
		}
	} else {
		if ((opline->op1_type & (IS_CONST|IS_TMP_VAR))) {
			ZVAL_COPY_VALUE(return_value, retval_ptr);
			if (opline->op1_type == IS_CONST) {
				if (UNEXPECTED(Z_OPT_REFCOUNTED_P(return_value))) {
					Z_ADDREF_P(return_value);
				}
			}
		} else if (opline->op1_type == IS_CV) {
			do {
				if (Z_OPT_REFCOUNTED_P(retval_ptr)) {
					if (EXPECTED(!Z_OPT_ISREF_P(retval_ptr))) {
						if (EXPECTED(!(EX_CALL_INFO() & (ZEND_CALL_CODE|ZEND_CALL_OBSERVED)))) {
							zend_refcounted *ref = Z_COUNTED_P(retval_ptr);
							ZVAL_COPY_VALUE(return_value, retval_ptr);
							if (GC_MAY_LEAK(ref)) {
								SAVE_OPLINE();
								gc_possible_root(ref);
							}
							ZVAL_NULL(retval_ptr);
							break;
						} else {
							Z_ADDREF_P(retval_ptr);
						}
					} else {
						retval_ptr = Z_REFVAL_P(retval_ptr);
						if (Z_OPT_REFCOUNTED_P(retval_ptr)) {
							Z_ADDREF_P(retval_ptr);
						}
					}
				}
				ZVAL_COPY_VALUE(return_value, retval_ptr);
			} while (0);
		} else /* if (opline->op1_type == IS_VAR) */ {
			if (UNEXPECTED(Z_ISREF_P(retval_ptr))) {
				zend_refcounted *ref = Z_COUNTED_P(retval_ptr);

				retval_ptr = Z_REFVAL_P(retval_ptr);
				ZVAL_COPY_VALUE(return_value, retval_ptr);
				if (UNEXPECTED(GC_DELREF(ref) == 0)) {
					efree_size(ref, sizeof(zend_reference));
				} else if (Z_OPT_REFCOUNTED_P(retval_ptr)) {
					Z_ADDREF_P(retval_ptr);
				}
			} else {
				ZVAL_COPY_VALUE(return_value, retval_ptr);
			}
		}
	}
	SAVE_OPLINE();
	zend_observer_fcall_end(execute_data, return_value);
	if (return_value == &observer_retval) { zval_ptr_dtor_nogc(&observer_retval); };
	ZEND_VM_TAIL_CALL(zend_leave_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
}

static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_RETURN_BY_REF_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *retval_ptr;
	zval *return_value;


	SAVE_OPLINE();

	return_value = EX(return_value);


	do {
		if ((IS_CONST & (IS_CONST|IS_TMP_VAR)) ||
		    (IS_CONST == IS_VAR && opline->extended_value == ZEND_RETURNS_VALUE)) {
			/* Not supposed to happen, but we'll allow it */
			zend_error(E_NOTICE, "Only variable references should be returned by reference");

			retval_ptr = RT_CONSTANT(opline, opline->op1);
			if (!return_value) {


			} else {
				if (IS_CONST == IS_VAR && UNEXPECTED(Z_ISREF_P(retval_ptr))) {
					ZVAL_COPY_VALUE(return_value, retval_ptr);
					break;
				}

				ZVAL_NEW_REF(return_value, retval_ptr);
				if (IS_CONST == IS_CONST) {
					Z_TRY_ADDREF_P(retval_ptr);
				}
			}
			break;
		}

		retval_ptr = zend_get_bad_ptr();

		if (IS_CONST == IS_VAR) {
			ZEND_ASSERT(retval_ptr != &EG(uninitialized_zval));
			if (opline->extended_value == ZEND_RETURNS_FUNCTION && !Z_ISREF_P(retval_ptr)) {
				zend_error(E_NOTICE, "Only variable references should be returned by reference");
				if (return_value) {
					ZVAL_NEW_REF(return_value, retval_ptr);
				} else {


				}
				break;
			}
		}

		if (return_value) {
			if (Z_ISREF_P(retval_ptr)) {
				Z_ADDREF_P(retval_ptr);
			} else {
				ZVAL_MAKE_REF_EX(retval_ptr, 2);
			}
			ZVAL_REF(return_value, Z_REF_P(retval_ptr));
		}


	} while (0);




	ZEND_VM_TAIL_CALL(zend_leave_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
}

static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_RETURN_BY_REF_SPEC_OBSERVER_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *retval_ptr;
	zval *return_value;
	zval observer_retval;

	SAVE_OPLINE();

	return_value = EX(return_value);
	if (!return_value) { return_value = &observer_retval; };
	do {
		if ((opline->op1_type & (IS_CONST|IS_TMP_VAR)) ||
		    (opline->op1_type == IS_VAR && opline->extended_value == ZEND_RETURNS_VALUE)) {
			/* Not supposed to happen, but we'll allow it */
			zend_error(E_NOTICE, "Only variable references should be returned by reference");

			retval_ptr = get_zval_ptr(opline->op1_type, opline->op1, BP_VAR_R);
			if (!return_value) {
				FREE_OP(opline->op1_type, opline->op1.var);
			} else {
				if (opline->op1_type == IS_VAR && UNEXPECTED(Z_ISREF_P(retval_ptr))) {
					ZVAL_COPY_VALUE(return_value, retval_ptr);
					break;
				}

				ZVAL_NEW_REF(return_value, retval_ptr);
				if (opline->op1_type == IS_CONST) {
					Z_TRY_ADDREF_P(retval_ptr);
				}
			}
			break;
		}

		retval_ptr = get_zval_ptr_ptr(opline->op1_type, opline->op1, BP_VAR_W);

		if (opline->op1_type == IS_VAR) {
			ZEND_ASSERT(retval_ptr != &EG(uninitialized_zval));
			if (opline->extended_value == ZEND_RETURNS_FUNCTION && !Z_ISREF_P(retval_ptr)) {
				zend_error(E_NOTICE, "Only variable references should be returned by reference");
				if (return_value) {
					ZVAL_NEW_REF(return_value, retval_ptr);
				} else {
					FREE_OP(opline->op1_type, opline->op1.var);
				}
				break;
			}
		}

		if (return_value) {
			if (Z_ISREF_P(retval_ptr)) {
				Z_ADDREF_P(retval_ptr);
			} else {
				ZVAL_MAKE_REF_EX(retval_ptr, 2);
			}
			ZVAL_REF(return_value, Z_REF_P(retval_ptr));
		}

		FREE_OP(opline->op1_type, opline->op1.var);
	} while (0);

	zend_observer_fcall_end(execute_data, return_value);
	if (return_value == &observer_retval) { zval_ptr_dtor_nogc(&observer_retval); };
	ZEND_VM_TAIL_CALL(zend_leave_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_GENERATOR_RETURN_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *retval;

	zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C);

	SAVE_OPLINE();
	retval = RT_CONSTANT(opline, opline->op1);

	/* Copy return value into generator->retval */
	if ((IS_CONST & (IS_CONST|IS_TMP_VAR))) {
		ZVAL_COPY_VALUE(&generator->retval, retval);
		if (IS_CONST == IS_CONST) {
			if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->retval))) {
				Z_ADDREF(generator->retval);
			}
		}
	} else if (IS_CONST == IS_CV) {
		ZVAL_COPY_DEREF(&generator->retval, retval);
	} else /* if (IS_CONST == IS_VAR) */ {
		if (UNEXPECTED(Z_ISREF_P(retval))) {
			zend_refcounted *ref = Z_COUNTED_P(retval);

			retval = Z_REFVAL_P(retval);
			ZVAL_COPY_VALUE(&generator->retval, retval);
			if (UNEXPECTED(GC_DELREF(ref) == 0)) {
				efree_size(ref, sizeof(zend_reference));
			} else if (Z_OPT_REFCOUNTED_P(retval)) {
				Z_ADDREF_P(retval);
			}
		} else {
			ZVAL_COPY_VALUE(&generator->retval, retval);
		}
	}


	EG(current_execute_data) = EX(prev_execute_data);

	/* Close the generator to free up resources */
	zend_generator_close(generator, 1);

	/* Pass execution back to handling code */
	ZEND_VM_RETURN();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_GENERATOR_RETURN_SPEC_OBSERVER_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *retval;

	zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C);

	SAVE_OPLINE();
	retval = get_zval_ptr(opline->op1_type, opline->op1, BP_VAR_R);

	/* Copy return value into generator->retval */
	if ((opline->op1_type & (IS_CONST|IS_TMP_VAR))) {
		ZVAL_COPY_VALUE(&generator->retval, retval);
		if (opline->op1_type == IS_CONST) {
			if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->retval))) {
				Z_ADDREF(generator->retval);
			}
		}
	} else if (opline->op1_type == IS_CV) {
		ZVAL_COPY_DEREF(&generator->retval, retval);
	} else /* if (opline->op1_type == IS_VAR) */ {
		if (UNEXPECTED(Z_ISREF_P(retval))) {
			zend_refcounted *ref = Z_COUNTED_P(retval);

			retval = Z_REFVAL_P(retval);
			ZVAL_COPY_VALUE(&generator->retval, retval);
			if (UNEXPECTED(GC_DELREF(ref) == 0)) {
				efree_size(ref, sizeof(zend_reference));
			} else if (Z_OPT_REFCOUNTED_P(retval)) {
				Z_ADDREF_P(retval);
			}
		} else {
			ZVAL_COPY_VALUE(&generator->retval, retval);
		}
	}

	zend_observer_fcall_end(generator->execute_data, &generator->retval);

	EG(current_execute_data) = EX(prev_execute_data);

	/* Close the generator to free up resources */
	zend_generator_close(generator, 1);

	/* Pass execution back to handling code */
	ZEND_VM_RETURN();
}

static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_THROW_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *value;

	SAVE_OPLINE();
	value = RT_CONSTANT(opline, opline->op1);

	do {
		if (IS_CONST == IS_CONST || UNEXPECTED(Z_TYPE_P(value) != IS_OBJECT)) {
			if ((IS_CONST & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) {
				value = Z_REFVAL_P(value);
				if (EXPECTED(Z_TYPE_P(value) == IS_OBJECT)) {
					break;
				}
			}
			if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
				ZVAL_UNDEFINED_OP1();
				if (UNEXPECTED(EG(exception) != NULL)) {
					HANDLE_EXCEPTION();
				}
			}
			zend_throw_error(NULL, "Can only throw objects");


			HANDLE_EXCEPTION();
		}
	} while (0);

	zend_exception_save();
	Z_TRY_ADDREF_P(value);
	zend_throw_exception_object(value);
	zend_exception_restore();


	HANDLE_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_CATCH_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zend_class_entry *ce, *catch_ce;
	zend_object *exception;

	SAVE_OPLINE();
	/* Check whether an exception has been thrown, if not, jump over code */
	zend_exception_restore();
	if (EG(exception) == NULL) {
		ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0);
	}
	catch_ce = CACHED_PTR(opline->extended_value & ~ZEND_LAST_CATCH);
	if (UNEXPECTED(catch_ce == NULL)) {
		catch_ce = zend_fetch_class_by_name(Z_STR_P(RT_CONSTANT(opline, opline->op1)), Z_STR_P(RT_CONSTANT(opline, opline->op1) + 1), ZEND_FETCH_CLASS_NO_AUTOLOAD | ZEND_FETCH_CLASS_SILENT);

		CACHE_PTR(opline->extended_value & ~ZEND_LAST_CATCH, catch_ce);
	}
	ce = EG(exception)->ce;

#ifdef HAVE_DTRACE
	if (DTRACE_EXCEPTION_CAUGHT_ENABLED()) {
		DTRACE_EXCEPTION_CAUGHT((char *)ce->name);
	}
#endif /* HAVE_DTRACE */

	if (ce != catch_ce) {
		if (!catch_ce || !instanceof_function(ce, catch_ce)) {
			if (opline->extended_value & ZEND_LAST_CATCH) {
				zend_rethrow_exception(execute_data);
				HANDLE_EXCEPTION();
			}
			ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0);
		}
	}

	exception = EG(exception);
	EG(exception) = NULL;
	if (RETURN_VALUE_USED(opline)) {
		/* Always perform a strict assignment. There is a reasonable expectation that if you
		 * write "catch (Exception $e)" then $e will actually be instanceof Exception. As such,
		 * we should not permit coercion to string here. */
		zval tmp;
		ZVAL_OBJ(&tmp, exception);
		zend_assign_to_variable(EX_VAR(opline->result.var), &tmp, IS_TMP_VAR, /* strict */ 1);
	} else {
		OBJ_RELEASE(exception);
	}
	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_SEND_USER_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *arg, *param;

	SAVE_OPLINE();

	arg = RT_CONSTANT(opline, opline->op1);
	param = ZEND_CALL_VAR(EX(call), opline->result.var);
	if (UNEXPECTED(ARG_MUST_BE_SENT_BY_REF(EX(call)->func, opline->op2.num))) {
		zend_param_must_be_ref(EX(call)->func, opline->op2.num);
		Z_TRY_ADDREF_P(arg);
		ZVAL_NEW_REF(param, arg);
	} else {
		ZVAL_COPY(param, arg);
	}


	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_BOOL_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *val;

	val = RT_CONSTANT(opline, opline->op1);
	if (Z_TYPE_INFO_P(val) == IS_TRUE) {
		ZVAL_TRUE(EX_VAR(opline->result.var));
	} else if (EXPECTED(Z_TYPE_INFO_P(val) <= IS_TRUE)) {
		/* The result and op1 can be the same cv zval */
		const uint32_t orig_val_type = Z_TYPE_INFO_P(val);
		ZVAL_FALSE(EX_VAR(opline->result.var));
		if (IS_CONST == IS_CV && UNEXPECTED(orig_val_type == IS_UNDEF)) {
			SAVE_OPLINE();
			ZVAL_UNDEFINED_OP1();
			ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
		}
	} else {
		SAVE_OPLINE();
		ZVAL_BOOL(EX_VAR(opline->result.var), i_zend_is_true(val));


		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
	}
	ZEND_VM_NEXT_OPCODE();
}

static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_CLONE_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *obj;
	zend_object *zobj;
	zend_class_entry *ce, *scope;
	zend_function *clone;
	zend_object_clone_obj_t clone_call;

	SAVE_OPLINE();
	obj = RT_CONSTANT(opline, opline->op1);

	/* ZEND_CLONE also exists as the clone() function and both implementations must be kept in sync.
	 * The OPcode intentionally does not support a clone-with property list to keep it simple. */

	do {
		if (IS_CONST == IS_CONST ||
		    (IS_CONST != IS_UNUSED && UNEXPECTED(Z_TYPE_P(obj) != IS_OBJECT))) {
			if ((IS_CONST & (IS_VAR|IS_CV)) && Z_ISREF_P(obj)) {
				obj = Z_REFVAL_P(obj);
				if (EXPECTED(Z_TYPE_P(obj) == IS_OBJECT)) {
					break;
				}
			}
			ZVAL_UNDEF(EX_VAR(opline->result.var));
			if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(obj) == IS_UNDEF)) {
				ZVAL_UNDEFINED_OP1();
				if (UNEXPECTED(EG(exception) != NULL)) {
					HANDLE_EXCEPTION();
				}
			}
			zend_type_error("clone(): Argument #1 ($object) must be of type object, %s given", zend_zval_value_name(obj));


			HANDLE_EXCEPTION();
		}
	} while (0);

	zobj = Z_OBJ_P(obj);
	ce = zobj->ce;
	clone = ce->clone;
	clone_call = zobj->handlers->clone_obj;
	if (UNEXPECTED(clone_call == NULL)) {
		zend_throw_error(NULL, "Trying to clone an uncloneable object of class %s", ZSTR_VAL(ce->name));


		ZVAL_UNDEF(EX_VAR(opline->result.var));
		HANDLE_EXCEPTION();
	}

	if (clone && !(clone->common.fn_flags & ZEND_ACC_PUBLIC)) {
		scope = EX(func)->op_array.scope;
		ZEND_ASSERT(!(clone->common.fn_flags & ZEND_ACC_PUBLIC));
		if (!zend_check_method_accessible(clone, scope)) {
			zend_bad_method_call(clone, clone->common.function_name, scope);


			ZVAL_UNDEF(EX_VAR(opline->result.var));
			HANDLE_EXCEPTION();
		}
	}

	ZVAL_OBJ(EX_VAR(opline->result.var), clone_call(zobj));


	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_CAST_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *expr;
	zval *result = EX_VAR(opline->result.var);

	SAVE_OPLINE();
	expr = RT_CONSTANT(opline, opline->op1);

	switch (opline->extended_value) {
		case IS_LONG:
			ZVAL_LONG(result, zval_get_long(expr));
			break;
		case IS_DOUBLE:
			ZVAL_DOUBLE(result, zval_get_double(expr));
			break;
		case IS_STRING:
			ZVAL_STR(result, zval_get_string(expr));
			break;
		default:
			ZEND_ASSERT(opline->extended_value != _IS_BOOL && "Must use ZEND_BOOL instead");
			if (IS_CONST & (IS_VAR|IS_CV)) {
				ZVAL_DEREF(expr);
			}
			/* If value is already of correct type, return it directly */
			if (Z_TYPE_P(expr) == opline->extended_value) {
				ZVAL_COPY_VALUE(result, expr);
				if (IS_CONST == IS_CONST) {
					if (UNEXPECTED(Z_OPT_REFCOUNTED_P(result))) Z_ADDREF_P(result);
				} else if (IS_CONST != IS_TMP_VAR) {
					if (Z_OPT_REFCOUNTED_P(result)) Z_ADDREF_P(result);
				}


				ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
			}

			if (opline->extended_value == IS_ARRAY) {
				zend_cast_zval_to_array(result, expr, IS_CONST);
			} else {
				ZEND_ASSERT(opline->extended_value == IS_OBJECT);
				zend_cast_zval_to_object(result, expr, IS_CONST);
			}
	}


	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_INCLUDE_OR_EVAL_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zend_op_array *new_op_array;
	zval *inc_filename;

	SAVE_OPLINE();
	inc_filename = RT_CONSTANT(opline, opline->op1);
	new_op_array = zend_include_or_eval(inc_filename, opline->extended_value);
	if (UNEXPECTED(EG(exception) != NULL)) {


		if (new_op_array != ZEND_FAKE_OP_ARRAY && new_op_array != NULL) {
			destroy_op_array(new_op_array);
			efree_size(new_op_array, sizeof(zend_op_array));
		}
		UNDEF_RESULT();
		HANDLE_EXCEPTION();
	} else if (new_op_array == ZEND_FAKE_OP_ARRAY) {
		if (RETURN_VALUE_USED(opline)) {
			ZVAL_TRUE(EX_VAR(opline->result.var));
		}
	} else if (UNEXPECTED(new_op_array == NULL)) {
		if (RETURN_VALUE_USED(opline)) {
			ZVAL_FALSE(EX_VAR(opline->result.var));
		}
	} else if (new_op_array->last == 1
			&& new_op_array->opcodes[0].opcode == ZEND_RETURN
			&& new_op_array->opcodes[0].op1_type == IS_CONST
			&& EXPECTED(zend_execute_ex == execute_ex)) {
		if (RETURN_VALUE_USED(opline)) {
			const zend_op *op = new_op_array->opcodes;

			ZVAL_COPY(EX_VAR(opline->result.var), RT_CONSTANT(op, op->op1));
		}
		zend_destroy_static_vars(new_op_array);
		destroy_op_array(new_op_array);
		efree_size(new_op_array, sizeof(zend_op_array));
	} else {
		zval *return_value = NULL;
		zend_execute_data *call;
		if (RETURN_VALUE_USED(opline)) {
			return_value = EX_VAR(opline->result.var);
		}

		new_op_array->scope = EX(func)->op_array.scope;

		call = zend_vm_stack_push_call_frame(
			(Z_TYPE_INFO(EX(This)) & ZEND_CALL_HAS_THIS) | ZEND_CALL_NESTED_CODE | ZEND_CALL_HAS_SYMBOL_TABLE,
			(zend_function*)new_op_array, 0,
			Z_PTR(EX(This)));

		if (EX_CALL_INFO() & ZEND_CALL_HAS_SYMBOL_TABLE) {
			call->symbol_table = EX(symbol_table);
		} else {
			call->symbol_table = zend_rebuild_symbol_table();
		}

		call->prev_execute_data = execute_data;
		i_init_code_execute_data(call, new_op_array, return_value);


		if (EXPECTED(zend_execute_ex == execute_ex)) {


			ZEND_VM_ENTER();
		} else {
			ZEND_ADD_CALL_FLAG(call, ZEND_CALL_TOP);
			zend_execute_ex(call);
			zend_vm_stack_free_call_frame(call);
		}

		zend_destroy_static_vars(new_op_array);
		destroy_op_array(new_op_array);
		efree_size(new_op_array, sizeof(zend_op_array));
		if (UNEXPECTED(EG(exception) != NULL)) {
			zend_rethrow_exception(execute_data);


			UNDEF_RESULT();
			HANDLE_EXCEPTION();
		}
	}


	ZEND_VM_NEXT_OPCODE();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_INCLUDE_OR_EVAL_SPEC_OBSERVER_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zend_op_array *new_op_array;
	zval *inc_filename;

	SAVE_OPLINE();
	inc_filename = get_zval_ptr(opline->op1_type, opline->op1, BP_VAR_R);
	new_op_array = zend_include_or_eval(inc_filename, opline->extended_value);
	if (UNEXPECTED(EG(exception) != NULL)) {
		FREE_OP(opline->op1_type, opline->op1.var);
		if (new_op_array != ZEND_FAKE_OP_ARRAY && new_op_array != NULL) {
			destroy_op_array(new_op_array);
			efree_size(new_op_array, sizeof(zend_op_array));
		}
		UNDEF_RESULT();
		HANDLE_EXCEPTION();
	} else if (new_op_array == ZEND_FAKE_OP_ARRAY) {
		if (RETURN_VALUE_USED(opline)) {
			ZVAL_TRUE(EX_VAR(opline->result.var));
		}
	} else if (UNEXPECTED(new_op_array == NULL)) {
		if (RETURN_VALUE_USED(opline)) {
			ZVAL_FALSE(EX_VAR(opline->result.var));
		}
	} else if (new_op_array->last == 1
			&& new_op_array->opcodes[0].opcode == ZEND_RETURN
			&& new_op_array->opcodes[0].op1_type == IS_CONST
			&& EXPECTED(zend_execute_ex == execute_ex)) {
		if (RETURN_VALUE_USED(opline)) {
			const zend_op *op = new_op_array->opcodes;

			ZVAL_COPY(EX_VAR(opline->result.var), RT_CONSTANT(op, op->op1));
		}
		zend_destroy_static_vars(new_op_array);
		destroy_op_array(new_op_array);
		efree_size(new_op_array, sizeof(zend_op_array));
	} else {
		zval *return_value = NULL;
		zend_execute_data *call;
		if (RETURN_VALUE_USED(opline)) {
			return_value = EX_VAR(opline->result.var);
		}

		new_op_array->scope = EX(func)->op_array.scope;

		call = zend_vm_stack_push_call_frame(
			(Z_TYPE_INFO(EX(This)) & ZEND_CALL_HAS_THIS) | ZEND_CALL_NESTED_CODE | ZEND_CALL_HAS_SYMBOL_TABLE,
			(zend_function*)new_op_array, 0,
			Z_PTR(EX(This)));

		if (EX_CALL_INFO() & ZEND_CALL_HAS_SYMBOL_TABLE) {
			call->symbol_table = EX(symbol_table);
		} else {
			call->symbol_table = zend_rebuild_symbol_table();
		}

		call->prev_execute_data = execute_data;
		i_init_code_execute_data(call, new_op_array, return_value);
		zend_observer_fcall_begin_specialized(call, false);
		if (EXPECTED(zend_execute_ex == execute_ex)) {
			FREE_OP(opline->op1_type, opline->op1.var);
			ZEND_VM_ENTER();
		} else {
			ZEND_ADD_CALL_FLAG(call, ZEND_CALL_TOP);
			zend_execute_ex(call);
			zend_vm_stack_free_call_frame(call);
		}

		zend_destroy_static_vars(new_op_array);
		destroy_op_array(new_op_array);
		efree_size(new_op_array, sizeof(zend_op_array));
		if (UNEXPECTED(EG(exception) != NULL)) {
			zend_rethrow_exception(execute_data);
			FREE_OP(opline->op1_type, opline->op1.var);
			UNDEF_RESULT();
			HANDLE_EXCEPTION();
		}
	}
	FREE_OP(opline->op1_type, opline->op1.var);
	ZEND_VM_NEXT_OPCODE();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_FE_RESET_R_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *array_ptr, *result;

	SAVE_OPLINE();

	array_ptr = RT_CONSTANT(opline, opline->op1);
	if (EXPECTED(Z_TYPE_P(array_ptr) == IS_ARRAY)) {
		result = EX_VAR(opline->result.var);
		ZVAL_COPY_VALUE(result, array_ptr);
		if (IS_CONST != IS_TMP_VAR && Z_OPT_REFCOUNTED_P(result)) {
			Z_ADDREF_P(array_ptr);
		}
		Z_FE_POS_P(result) = 0;


		ZEND_VM_NEXT_OPCODE();
	} else if (IS_CONST != IS_CONST && EXPECTED(Z_TYPE_P(array_ptr) == IS_OBJECT)) {
		zend_object *zobj = Z_OBJ_P(array_ptr);
		if (!zobj->ce->get_iterator) {
			if (UNEXPECTED(zend_object_is_lazy(zobj))) {
				zobj = zend_lazy_object_init(zobj);
				if (UNEXPECTED(EG(exception))) {
					UNDEF_RESULT();


					HANDLE_EXCEPTION();
				}
			}
			HashTable *properties = zobj->properties;
			if (properties) {
				if (UNEXPECTED(GC_REFCOUNT(properties) > 1)) {
					if (EXPECTED(!(GC_FLAGS(properties) & IS_ARRAY_IMMUTABLE))) {
						GC_DELREF(properties);
					}
					properties = zobj->properties = zend_array_dup(properties);
				}
			} else {
				properties = zobj->handlers->get_properties(zobj);
			}

			result = EX_VAR(opline->result.var);
			ZVAL_COPY_VALUE(result, array_ptr);
			if (IS_CONST != IS_TMP_VAR) {
				Z_ADDREF_P(array_ptr);
			}

			if (zend_hash_num_elements(properties) == 0) {
				Z_FE_ITER_P(result) = (uint32_t) -1;


				ZEND_VM_JMP(OP_JMP_ADDR(opline, opline->op2));
			}

			Z_FE_ITER_P(result) = zend_hash_iterator_add(properties, 0);


			ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
		} else {
			bool is_empty = zend_fe_reset_iterator(array_ptr, 0 OPLINE_CC EXECUTE_DATA_CC);


			if (UNEXPECTED(EG(exception))) {
				HANDLE_EXCEPTION();
			} else if (is_empty) {
				ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0);
			} else {
				ZEND_VM_NEXT_OPCODE();
			}
		}
	} else {
		zend_error(E_WARNING, "foreach() argument must be of type array|object, %s given", zend_zval_value_name(array_ptr));
		ZVAL_UNDEF(EX_VAR(opline->result.var));
		Z_FE_ITER_P(EX_VAR(opline->result.var)) = (uint32_t)-1;


		ZEND_VM_JMP(OP_JMP_ADDR(opline, opline->op2));
	}
}

static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_FE_RESET_RW_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *array_ptr, *array_ref;

	SAVE_OPLINE();

	if (IS_CONST == IS_VAR || IS_CONST == IS_CV) {
		array_ref = array_ptr = zend_get_bad_ptr();
		if (Z_ISREF_P(array_ref)) {
			array_ptr = Z_REFVAL_P(array_ref);
		}
	} else {
		array_ref = array_ptr = RT_CONSTANT(opline, opline->op1);
	}

	if (EXPECTED(Z_TYPE_P(array_ptr) == IS_ARRAY)) {
		if (IS_CONST == IS_VAR || IS_CONST == IS_CV) {
			if (array_ptr == array_ref) {
				ZVAL_NEW_REF(array_ref, array_ref);
				array_ptr = Z_REFVAL_P(array_ref);
			}
			Z_ADDREF_P(array_ref);
			ZVAL_COPY_VALUE(EX_VAR(opline->result.var), array_ref);
		} else {
			array_ref = EX_VAR(opline->result.var);
			ZVAL_NEW_REF(array_ref, array_ptr);
			array_ptr = Z_REFVAL_P(array_ref);
		}
		if (IS_CONST == IS_CONST) {
			ZVAL_ARR(array_ptr, zend_array_dup(Z_ARRVAL_P(array_ptr)));
		} else {
			SEPARATE_ARRAY(array_ptr);
		}
		Z_FE_ITER_P(EX_VAR(opline->result.var)) = zend_hash_iterator_add(Z_ARRVAL_P(array_ptr), 0);


		ZEND_VM_NEXT_OPCODE();
	} else if (IS_CONST != IS_CONST && EXPECTED(Z_TYPE_P(array_ptr) == IS_OBJECT)) {
		if (!Z_OBJCE_P(array_ptr)->get_iterator) {
			zend_object *zobj = Z_OBJ_P(array_ptr);
			HashTable *properties;
			if (UNEXPECTED(zend_object_is_lazy(zobj))) {
				zobj = zend_lazy_object_init(zobj);
				if (UNEXPECTED(EG(exception))) {
					UNDEF_RESULT();


					HANDLE_EXCEPTION();
				}
			}
			if (IS_CONST == IS_VAR || IS_CONST == IS_CV) {
				if (array_ptr == array_ref) {
					ZVAL_NEW_REF(array_ref, array_ref);
					array_ptr = Z_REFVAL_P(array_ref);
				}
				Z_ADDREF_P(array_ref);
				ZVAL_COPY_VALUE(EX_VAR(opline->result.var), array_ref);
			} else {
				array_ptr = EX_VAR(opline->result.var);
				ZVAL_COPY_VALUE(array_ptr, array_ref);
			}
			if (Z_OBJ_P(array_ptr)->properties
			 && UNEXPECTED(GC_REFCOUNT(Z_OBJ_P(array_ptr)->properties) > 1)) {
				if (EXPECTED(!(GC_FLAGS(Z_OBJ_P(array_ptr)->properties) & IS_ARRAY_IMMUTABLE))) {
					GC_DELREF(Z_OBJ_P(array_ptr)->properties);
				}
				Z_OBJ_P(array_ptr)->properties = zend_array_dup(Z_OBJ_P(array_ptr)->properties);
			}

			properties = Z_OBJPROP_P(array_ptr);
			if (zend_hash_num_elements(properties) == 0) {
				Z_FE_ITER_P(EX_VAR(opline->result.var)) = (uint32_t) -1;


				ZEND_VM_JMP(OP_JMP_ADDR(opline, opline->op2));
			}

			Z_FE_ITER_P(EX_VAR(opline->result.var)) = zend_hash_iterator_add(properties, 0);


			ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
		} else {
			bool is_empty = zend_fe_reset_iterator(array_ptr, 1 OPLINE_CC EXECUTE_DATA_CC);


			if (UNEXPECTED(EG(exception))) {
				HANDLE_EXCEPTION();
			} else if (is_empty) {
				ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0);
			} else {
				ZEND_VM_NEXT_OPCODE();
			}
		}
	} else {
		zend_error(E_WARNING, "foreach() argument must be of type array|object, %s given", zend_zval_value_name(array_ptr));
		ZVAL_UNDEF(EX_VAR(opline->result.var));
		Z_FE_ITER_P(EX_VAR(opline->result.var)) = (uint32_t)-1;


		ZEND_VM_JMP(OP_JMP_ADDR(opline, opline->op2));
	}
}

static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_JMP_SET_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *value;
	zend_reference *ref = NULL;
	bool ret;

	SAVE_OPLINE();
	value = RT_CONSTANT(opline, opline->op1);

	if ((IS_CONST == IS_VAR || IS_CONST == IS_CV) && Z_ISREF_P(value)) {
		if (IS_CONST == IS_VAR) {
			ref = Z_REF_P(value);
		}
		value = Z_REFVAL_P(value);
	}

	ret = i_zend_is_true(value);

	if (UNEXPECTED(EG(exception))) {


		ZVAL_UNDEF(EX_VAR(opline->result.var));
		HANDLE_EXCEPTION();
	}

	if (ret) {
		zval *result = EX_VAR(opline->result.var);

		ZVAL_COPY_VALUE(result, value);
		if (IS_CONST == IS_CONST) {
			if (UNEXPECTED(Z_OPT_REFCOUNTED_P(result))) Z_ADDREF_P(result);
		} else if (IS_CONST == IS_CV) {
			if (Z_OPT_REFCOUNTED_P(result)) Z_ADDREF_P(result);
		} else if (IS_CONST == IS_VAR && ref) {
			if (UNEXPECTED(GC_DELREF(ref) == 0)) {
				efree_size(ref, sizeof(zend_reference));
			} else if (Z_OPT_REFCOUNTED_P(result)) {
				Z_ADDREF_P(result);
			}
		}
		ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0);
	}


	ZEND_VM_NEXT_OPCODE();
}

static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_COALESCE_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *value;
	zend_reference *ref = NULL;

	SAVE_OPLINE();
	value = RT_CONSTANT(opline, opline->op1);

	if ((IS_CONST & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) {
		if (IS_CONST & IS_VAR) {
			ref = Z_REF_P(value);
		}
		value = Z_REFVAL_P(value);
	}

	if (Z_TYPE_P(value) > IS_NULL) {
		zval *result = EX_VAR(opline->result.var);
		ZVAL_COPY_VALUE(result, value);
		if (IS_CONST == IS_CONST) {
			if (UNEXPECTED(Z_OPT_REFCOUNTED_P(result))) Z_ADDREF_P(result);
		} else if (IS_CONST == IS_CV) {
			if (Z_OPT_REFCOUNTED_P(result)) Z_ADDREF_P(result);
		} else if ((IS_CONST & IS_VAR) && ref) {
			if (UNEXPECTED(GC_DELREF(ref) == 0)) {
				efree_size(ref, sizeof(zend_reference));
			} else if (Z_OPT_REFCOUNTED_P(result)) {
				Z_ADDREF_P(result);
			}
		}
		ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0);
	}

	if ((IS_CONST & IS_VAR) && ref) {
		if (UNEXPECTED(GC_DELREF(ref) == 0)) {
			efree_size(ref, sizeof(zend_reference));
		}
	}
	ZEND_VM_NEXT_OPCODE();
}

static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_JMP_NULL_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *val, *result;

	val = RT_CONSTANT(opline, opline->op1);

	if (Z_TYPE_P(val) > IS_NULL) {
		do {
			if ((IS_CONST == IS_CV || IS_CONST == IS_VAR) && Z_TYPE_P(val) == IS_REFERENCE) {
				val = Z_REFVAL_P(val);
				if (Z_TYPE_P(val) <= IS_NULL) {


					break;
				}
			}
			ZEND_VM_NEXT_OPCODE();
		} while (0);
	}

	result = EX_VAR(opline->result.var);
	uint32_t short_circuiting_type = opline->extended_value & ZEND_SHORT_CIRCUITING_CHAIN_MASK;
	if (EXPECTED(short_circuiting_type == ZEND_SHORT_CIRCUITING_CHAIN_EXPR)) {
		ZVAL_NULL(result);
		if (IS_CONST == IS_CV
			&& UNEXPECTED(Z_TYPE_P(val) == IS_UNDEF)
			&& (opline->extended_value & ZEND_JMP_NULL_BP_VAR_IS) == 0
		) {
			SAVE_OPLINE();
			ZVAL_UNDEFINED_OP1();
			if (UNEXPECTED(EG(exception) != NULL)) {
				HANDLE_EXCEPTION();
			}
		}
	} else if (short_circuiting_type == ZEND_SHORT_CIRCUITING_CHAIN_ISSET) {
		ZVAL_FALSE(result);
	} else {
		ZEND_ASSERT(short_circuiting_type == ZEND_SHORT_CIRCUITING_CHAIN_EMPTY);
		ZVAL_TRUE(result);
	}

	ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0);
}

static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_QM_ASSIGN_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *value;
	zval *result = EX_VAR(opline->result.var);

	value = RT_CONSTANT(opline, opline->op1);
	if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
		SAVE_OPLINE();
		ZVAL_UNDEFINED_OP1();
		ZVAL_NULL(result);
		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
	}

	if (IS_CONST == IS_CV) {
		ZVAL_COPY_DEREF(result, value);
	} else if (IS_CONST == IS_VAR) {
		if (UNEXPECTED(Z_ISREF_P(value))) {
			ZVAL_COPY_VALUE(result, Z_REFVAL_P(value));
			if (UNEXPECTED(Z_DELREF_P(value) == 0)) {
				efree_size(Z_REF_P(value), sizeof(zend_reference));
			} else if (Z_OPT_REFCOUNTED_P(result)) {
				Z_ADDREF_P(result);
			}
		} else {
			ZVAL_COPY_VALUE(result, value);
		}
	} else {
		ZVAL_COPY_VALUE(result, value);
		if (IS_CONST == IS_CONST) {
			if (UNEXPECTED(Z_OPT_REFCOUNTED_P(result))) {
				Z_ADDREF_P(result);
			}
		}
	}
	ZEND_VM_NEXT_OPCODE();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_DECLARE_CLASS_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE

	SAVE_OPLINE();
	do_bind_class(RT_CONSTANT(opline, opline->op1), (opline->op2_type == IS_CONST) ? Z_STR_P(RT_CONSTANT(opline, opline->op2)) : NULL);
	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_DECLARE_LAMBDA_FUNCTION_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zend_function *func;
	zval *object;
	zend_class_entry *called_scope;

	func = (zend_function *) EX(func)->op_array.dynamic_func_defs[opline->op2.num];
	if (Z_TYPE(EX(This)) == IS_OBJECT) {
		called_scope = Z_OBJCE(EX(This));
		if (UNEXPECTED((func->common.fn_flags & ZEND_ACC_STATIC) ||
				(EX(func)->common.fn_flags & ZEND_ACC_STATIC))) {
			object = NULL;
		} else {
			object = &EX(This);
		}
	} else {
		called_scope = Z_CE(EX(This));
		object = NULL;
	}
	SAVE_OPLINE();
	zend_create_closure(EX_VAR(opline->result.var), func,
		EX(func)->op_array.scope, called_scope, object);

	ZEND_VM_NEXT_OPCODE();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_YIELD_FROM_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C);
	zval *val;

	SAVE_OPLINE();
	val = RT_CONSTANT(opline, opline->op1);

	if (UNEXPECTED(generator->flags & ZEND_GENERATOR_FORCED_CLOSE)) {
		zend_throw_error(NULL, "Cannot use \"yield from\" in a force-closed generator");


		UNDEF_RESULT();
		HANDLE_EXCEPTION();
	}

yield_from_try_again:
	if (Z_TYPE_P(val) == IS_ARRAY) {
		ZVAL_COPY_VALUE(&generator->values, val);
		if (Z_OPT_REFCOUNTED_P(val)) {
			Z_ADDREF_P(val);
		}
		Z_FE_POS(generator->values) = 0;


	} else if (IS_CONST != IS_CONST && Z_TYPE_P(val) == IS_OBJECT && Z_OBJCE_P(val)->get_iterator) {
		zend_class_entry *ce = Z_OBJCE_P(val);
		if (ce == zend_ce_generator) {
			zend_generator *new_gen = (zend_generator *) Z_OBJ_P(val);

			Z_ADDREF_P(val);


			if (UNEXPECTED(new_gen->execute_data == NULL)) {
				zend_throw_error(NULL, "Generator passed to yield from was aborted without proper return and is unable to continue");
				zval_ptr_dtor(val);
				UNDEF_RESULT();
				HANDLE_EXCEPTION();
			} else if (Z_ISUNDEF(new_gen->retval)) {
				if (UNEXPECTED(zend_generator_get_current(new_gen) == generator)) {
					zend_throw_error(NULL, "Impossible to yield from the Generator being currently run");
					zval_ptr_dtor(val);
					UNDEF_RESULT();
					HANDLE_EXCEPTION();
				} else {
					zend_generator_yield_from(generator, new_gen);
				}
			} else {
				if (RETURN_VALUE_USED(opline)) {
					ZVAL_COPY(EX_VAR(opline->result.var), &new_gen->retval);
				}
				ZEND_VM_NEXT_OPCODE();
			}
		} else {
			zend_object_iterator *iter = ce->get_iterator(ce, val, 0);


			if (UNEXPECTED(!iter) || UNEXPECTED(EG(exception))) {
				if (!EG(exception)) {
					zend_throw_error(NULL, "Object of type %s did not create an Iterator", ZSTR_VAL(ce->name));
				}
				UNDEF_RESULT();
				HANDLE_EXCEPTION();
			}

			iter->index = 0;
			if (iter->funcs->rewind) {
				iter->funcs->rewind(iter);
				if (UNEXPECTED(EG(exception) != NULL)) {
					OBJ_RELEASE(&iter->std);
					UNDEF_RESULT();
					HANDLE_EXCEPTION();
				}
			}

			ZVAL_OBJ(&generator->values, &iter->std);
		}
	} else if ((IS_CONST & (IS_VAR|IS_CV)) && Z_TYPE_P(val) == IS_REFERENCE) {
		val = Z_REFVAL_P(val);
		goto yield_from_try_again;
	} else {
		zend_throw_error(NULL, "Can use \"yield from\" only with arrays and Traversables");


		UNDEF_RESULT();
		HANDLE_EXCEPTION();
	}

	/* This is the default return value
	 * when the expression is a Generator, it will be overwritten in zend_generator_resume() */
	if (RETURN_VALUE_USED(opline)) {
		ZVAL_NULL(EX_VAR(opline->result.var));
	}

	/* This generator has no send target (though the generator we delegate to might have one) */
	generator->send_target = NULL;

	/* The GOTO VM uses a local opline variable. We need to set the opline
	 * variable in execute_data so we don't resume at an old position. */
	SAVE_OPLINE();

	ZEND_VM_RETURN();
}

static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_STRLEN_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *value;

	value = RT_CONSTANT(opline, opline->op1);
	if (EXPECTED(Z_TYPE_P(value) == IS_STRING)) {
		ZVAL_LONG(EX_VAR(opline->result.var), Z_STRLEN_P(value));
		if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
			zval_ptr_dtor_str(value);
		}
		ZEND_VM_NEXT_OPCODE();
	} else {
		bool strict;

		if ((IS_CONST & (IS_VAR|IS_CV)) && Z_TYPE_P(value) == IS_REFERENCE) {
			value = Z_REFVAL_P(value);
			if (EXPECTED(Z_TYPE_P(value) == IS_STRING)) {
				ZVAL_LONG(EX_VAR(opline->result.var), Z_STRLEN_P(value));


				ZEND_VM_NEXT_OPCODE();
			}
		}

		SAVE_OPLINE();
		if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
			value = ZVAL_UNDEFINED_OP1();
		}
		strict = EX_USES_STRICT_TYPES();
		do {
			if (EXPECTED(!strict)) {
				zend_string *str;
				zval tmp;

				if (UNEXPECTED(Z_TYPE_P(value) == IS_NULL)) {
					zend_error(E_DEPRECATED,
						"strlen(): Passing null to parameter #1 ($string) of type string is deprecated");
					ZVAL_LONG(EX_VAR(opline->result.var), 0);
					if (UNEXPECTED(EG(exception))) {
						HANDLE_EXCEPTION();
					}
					break;
				}

				ZVAL_COPY(&tmp, value);
				if (zend_parse_arg_str_weak(&tmp, &str, 1)) {
					ZVAL_LONG(EX_VAR(opline->result.var), ZSTR_LEN(str));
					zval_ptr_dtor(&tmp);
					break;
				}
				zval_ptr_dtor(&tmp);
			}
			if (!EG(exception)) {
				zend_type_error("strlen(): Argument #1 ($string) must be of type string, %s given", zend_zval_value_name(value));
			}
			ZVAL_UNDEF(EX_VAR(opline->result.var));
		} while (0);
	}


	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_TYPE_CHECK_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *value;
	int result = 0;

	value = RT_CONSTANT(opline, opline->op1);
	if ((opline->extended_value >> (uint32_t)Z_TYPE_P(value)) & 1) {
type_check_resource:
		if (opline->extended_value != MAY_BE_RESOURCE
		 || EXPECTED(NULL != zend_rsrc_list_get_rsrc_type(Z_RES_P(value)))) {
			result = 1;
		}
	} else if ((IS_CONST & (IS_CV|IS_VAR)) && Z_ISREF_P(value)) {
		value = Z_REFVAL_P(value);
		if ((opline->extended_value >> (uint32_t)Z_TYPE_P(value)) & 1) {
			goto type_check_resource;
		}
	} else if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
		result = ((1 << IS_NULL) & opline->extended_value) != 0;
		SAVE_OPLINE();
		ZVAL_UNDEFINED_OP1();
		if (UNEXPECTED(EG(exception))) {
			ZVAL_UNDEF(EX_VAR(opline->result.var));
			HANDLE_EXCEPTION();
		}
	}
	if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
		SAVE_OPLINE();


		ZEND_VM_SMART_BRANCH(result, 1);
	} else {
		ZEND_VM_SMART_BRANCH(result, 0);
	}
}

static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_DEFINED_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zend_constant *c;

	c = CACHED_PTR(opline->extended_value);
	if (EXPECTED(c != NULL)) {
		if (!IS_SPECIAL_CACHE_VAL(c)) {
defined_true:
			ZEND_VM_SMART_BRANCH_TRUE();
		} else if (EXPECTED(zend_hash_num_elements(EG(zend_constants)) == DECODE_SPECIAL_CACHE_NUM(c))) {
defined_false:
			ZEND_VM_SMART_BRANCH_FALSE();
		}
	}
	if (zend_quick_check_constant(RT_CONSTANT(opline, opline->op1) OPLINE_CC EXECUTE_DATA_CC) != SUCCESS) {
		CACHE_PTR(opline->extended_value, ENCODE_SPECIAL_CACHE_NUM(zend_hash_num_elements(EG(zend_constants))));
		goto defined_false;
	} else {
		goto defined_true;
	}
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_JMP_FRAMELESS_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zend_jmp_fl_result result = (uintptr_t)CACHED_PTR(opline->extended_value);
try_again:
	if (EXPECTED(result == ZEND_JMP_FL_HIT)) {
		OPLINE = OP_JMP_ADDR(opline, opline->op2);
		ZEND_VM_CONTINUE();
	} else if (EXPECTED(result == ZEND_JMP_FL_MISS)) {
		ZEND_VM_NEXT_OPCODE();
	} else {
		ZEND_ASSERT(result == ZEND_JMP_FL_UNPRIMED);
		/* func_name refers to the function in the local namespace, e.g. foo\substr. */
		zval *func_name = (zval *)RT_CONSTANT(opline, opline->op1);
		/* If it cannot be found locally, we must be referring to the global function. */
		zval *func = zend_hash_find_known_hash(EG(function_table), Z_STR_P(func_name));
		/* ZEND_JMP_FL_MISS = 1, ZEND_JMP_FL_HIT = 2 */
		result = (func == NULL) + 1;
		CACHE_PTR(opline->extended_value, (void *)result);
		goto try_again;
	}
}

static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_QM_ASSIGN_LONG_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *value;

	value = RT_CONSTANT(opline, opline->op1);
	ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(value));
	ZEND_VM_NEXT_OPCODE();
}

static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_QM_ASSIGN_DOUBLE_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *value;

	value = RT_CONSTANT(opline, opline->op1);
	ZVAL_DOUBLE(EX_VAR(opline->result.var), Z_DVAL_P(value));
	ZEND_VM_NEXT_OPCODE();
}

static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_QM_ASSIGN_NOREF_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *value;

	value = RT_CONSTANT(opline, opline->op1);
	ZVAL_COPY_VALUE(EX_VAR(opline->result.var), value);
	ZEND_VM_NEXT_OPCODE();
}

static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_SEND_VAL_SIMPLE_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *value, *arg;

	value = RT_CONSTANT(opline, opline->op1);
	arg = ZEND_CALL_VAR(EX(call), opline->result.var);
	ZVAL_COPY_VALUE(arg, value);
	ZEND_VM_NEXT_OPCODE();
}

static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_SEND_VAL_EX_SIMPLE_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *value, *arg;
	uint32_t arg_num = opline->op2.num;

	arg = ZEND_CALL_VAR(EX(call), opline->result.var);
	if (QUICK_ARG_MUST_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
		ZEND_VM_DISPATCH_TO_HELPER(zend_cannot_pass_by_ref_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_EX arg_num, arg));
	}
	value = RT_CONSTANT(opline, opline->op1);
	ZVAL_COPY_VALUE(arg, value);
	ZEND_VM_NEXT_OPCODE();
}

static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_ADD_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2, *result;
	double d1, d2;

	op1 = RT_CONSTANT(opline, opline->op1);
	op2 = RT_CONSTANT(opline, opline->op2);
	if (1 && IS_CONST == IS_CONST && IS_CONST == IS_CONST) {
		/* pass */
	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
			result = EX_VAR(opline->result.var);
			fast_long_add_function(result, op1, op2);
			ZEND_VM_NEXT_OPCODE();
		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
			d1 = (double)Z_LVAL_P(op1);
			d2 = Z_DVAL_P(op2);
			goto add_double;
		}
	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
			d1 = Z_DVAL_P(op1);
			d2 = Z_DVAL_P(op2);
add_double:
			result = EX_VAR(opline->result.var);
			ZVAL_DOUBLE(result, d1 + d2);
			ZEND_VM_NEXT_OPCODE();
		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
			d1 = Z_DVAL_P(op1);
			d2 = (double)Z_LVAL_P(op2);
			goto add_double;
		}
	}

	ZEND_VM_DISPATCH_TO_HELPER(zend_add_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_EX op1, op2));
}

static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_SUB_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2, *result;
	double d1, d2;

	op1 = RT_CONSTANT(opline, opline->op1);
	op2 = RT_CONSTANT(opline, opline->op2);
	if (1 && IS_CONST == IS_CONST && IS_CONST == IS_CONST) {
		/* pass */
	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
			result = EX_VAR(opline->result.var);
			fast_long_sub_function(result, op1, op2);
			ZEND_VM_NEXT_OPCODE();
		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
			d1 = (double)Z_LVAL_P(op1);
			d2 = Z_DVAL_P(op2);
			goto sub_double;
		}
	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
			d1 = Z_DVAL_P(op1);
			d2 = Z_DVAL_P(op2);
sub_double:
			result = EX_VAR(opline->result.var);
			ZVAL_DOUBLE(result, d1 - d2);
			ZEND_VM_NEXT_OPCODE();
		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
			d1 = Z_DVAL_P(op1);
			d2 = (double)Z_LVAL_P(op2);
			goto sub_double;
		}
	}

	ZEND_VM_DISPATCH_TO_HELPER(zend_sub_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_EX op1, op2));
}

static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_MUL_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2, *result;
	double d1, d2;

	op1 = RT_CONSTANT(opline, opline->op1);
	op2 = RT_CONSTANT(opline, opline->op2);
	if (1 && IS_CONST == IS_CONST && IS_CONST == IS_CONST) {
		/* pass */
	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
			zend_long overflow;

			result = EX_VAR(opline->result.var);
			ZEND_SIGNED_MULTIPLY_LONG(Z_LVAL_P(op1), Z_LVAL_P(op2), Z_LVAL_P(result), Z_DVAL_P(result), overflow);
			Z_TYPE_INFO_P(result) = overflow ? IS_DOUBLE : IS_LONG;
			ZEND_VM_NEXT_OPCODE();
		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
			d1 = (double)Z_LVAL_P(op1);
			d2 = Z_DVAL_P(op2);
			goto mul_double;
		}
	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
			d1 = Z_DVAL_P(op1);
			d2 = Z_DVAL_P(op2);
mul_double:
			result = EX_VAR(opline->result.var);
			ZVAL_DOUBLE(result, d1 * d2);
			ZEND_VM_NEXT_OPCODE();
		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
			d1 = Z_DVAL_P(op1);
			d2 = (double)Z_LVAL_P(op2);
			goto mul_double;
		}
	}

	ZEND_VM_DISPATCH_TO_HELPER(zend_mul_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_EX op1, op2));
}

static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_DIV_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;

	SAVE_OPLINE();
	op1 = RT_CONSTANT(opline, opline->op1);
	op2 = RT_CONSTANT(opline, opline->op2);
	div_function(EX_VAR(opline->result.var), op1, op2);




	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_MOD_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2, *result;

	op1 = RT_CONSTANT(opline, opline->op1);
	op2 = RT_CONSTANT(opline, opline->op2);
	if (1 && IS_CONST == IS_CONST && IS_CONST == IS_CONST) {
		/* pass */
	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
			result = EX_VAR(opline->result.var);
			if (UNEXPECTED(Z_LVAL_P(op2) == 0)) {
				ZEND_VM_TAIL_CALL(zend_mod_by_zero_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
			} else if (UNEXPECTED(Z_LVAL_P(op2) == -1)) {
				/* Prevent overflow error/crash if op1==ZEND_LONG_MIN */
				ZVAL_LONG(result, 0);
			} else {
				ZVAL_LONG(result, Z_LVAL_P(op1) % Z_LVAL_P(op2));
			}
			ZEND_VM_NEXT_OPCODE();
		}
	}

	ZEND_VM_DISPATCH_TO_HELPER(zend_mod_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_EX op1, op2));
}

static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_SL_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;

	op1 = RT_CONSTANT(opline, opline->op1);
	op2 = RT_CONSTANT(opline, opline->op2);
	if (1 && IS_CONST == IS_CONST && IS_CONST == IS_CONST) {
		/* pass */
	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)
			&& EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)
			&& EXPECTED((zend_ulong)Z_LVAL_P(op2) < SIZEOF_ZEND_LONG * 8)) {
		/* Perform shift on unsigned numbers to get well-defined wrap behavior. */
		ZVAL_LONG(EX_VAR(opline->result.var),
			(zend_long) ((zend_ulong) Z_LVAL_P(op1) << Z_LVAL_P(op2)));
		ZEND_VM_NEXT_OPCODE();
	}

	ZEND_VM_DISPATCH_TO_HELPER(zend_shift_left_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_EX op1, op2));
}

static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_SR_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;

	op1 = RT_CONSTANT(opline, opline->op1);
	op2 = RT_CONSTANT(opline, opline->op2);
	if (1 && IS_CONST == IS_CONST && IS_CONST == IS_CONST) {
		/* pass */
	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)
			&& EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)
			&& EXPECTED((zend_ulong)Z_LVAL_P(op2) < SIZEOF_ZEND_LONG * 8)) {
		ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(op1) >> Z_LVAL_P(op2));
		ZEND_VM_NEXT_OPCODE();
	}

	ZEND_VM_DISPATCH_TO_HELPER(zend_shift_right_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_EX op1, op2));
}

static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_POW_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;

	SAVE_OPLINE();
	op1 = RT_CONSTANT(opline, opline->op1);
	op2 = RT_CONSTANT(opline, opline->op2);
	pow_function(EX_VAR(opline->result.var), op1, op2);




	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_IS_IDENTICAL_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;
	bool result;

	SAVE_OPLINE();
	op1 = RT_CONSTANT(opline, opline->op1);
	op2 = RT_CONSTANT(opline, opline->op2);
	result = fast_is_identical_function(op1, op2);




	ZEND_VM_SMART_BRANCH(result, 1);
}

static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_IS_NOT_IDENTICAL_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;
	bool result;

	SAVE_OPLINE();
	op1 = RT_CONSTANT(opline, opline->op1);
	op2 = RT_CONSTANT(opline, opline->op2);
	result = fast_is_not_identical_function(op1, op2);




	ZEND_VM_SMART_BRANCH(result, 1);
}

static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_IS_EQUAL_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;
	double d1, d2;

	op1 = RT_CONSTANT(opline, opline->op1);
	op2 = RT_CONSTANT(opline, opline->op2);
	if (1 && IS_CONST == IS_CONST && IS_CONST == IS_CONST) {
		/* pass */
	} else if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
		if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
			if (EXPECTED(Z_LVAL_P(op1) == Z_LVAL_P(op2))) {
is_equal_true:
				ZEND_VM_SMART_BRANCH_TRUE();
			} else {
is_equal_false:
				ZEND_VM_SMART_BRANCH_FALSE();
			}
		} else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
			d1 = (double)Z_LVAL_P(op1);
			d2 = Z_DVAL_P(op2);
			goto is_equal_double;
		}
	} else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) {
		if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
			d1 = Z_DVAL_P(op1);
			d2 = Z_DVAL_P(op2);
is_equal_double:
			if (d1 == d2) {
				goto is_equal_true;
			} else {
				goto is_equal_false;
			}
		} else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
			d1 = Z_DVAL_P(op1);
			d2 = (double)Z_LVAL_P(op2);
			goto is_equal_double;
		}
	} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
		if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
			bool result = zend_fast_equal_strings(Z_STR_P(op1), Z_STR_P(op2));
			if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
				zval_ptr_dtor_str(op1);
			}
			if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
				zval_ptr_dtor_str(op2);
			}
			if (result) {
				goto is_equal_true;
			} else {
				goto is_equal_false;
			}
		}
	}
	ZEND_VM_DISPATCH_TO_HELPER(zend_is_equal_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_EX op1, op2));
}

static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_IS_NOT_EQUAL_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;
	double d1, d2;

	op1 = RT_CONSTANT(opline, opline->op1);
	op2 = RT_CONSTANT(opline, opline->op2);
	if (1 && IS_CONST == IS_CONST && IS_CONST == IS_CONST) {
		/* pass */
	} else if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
		if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
			if (EXPECTED(Z_LVAL_P(op1) != Z_LVAL_P(op2))) {
is_not_equal_true:
				ZEND_VM_SMART_BRANCH_TRUE();
			} else {
is_not_equal_false:
				ZEND_VM_SMART_BRANCH_FALSE();
			}
		} else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
			d1 = (double)Z_LVAL_P(op1);
			d2 = Z_DVAL_P(op2);
			goto is_not_equal_double;
		}
	} else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) {
		if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
			d1 = Z_DVAL_P(op1);
			d2 = Z_DVAL_P(op2);
is_not_equal_double:
			if (d1 != d2) {
				goto is_not_equal_true;
			} else {
				goto is_not_equal_false;
			}
		} else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
			d1 = Z_DVAL_P(op1);
			d2 = (double)Z_LVAL_P(op2);
			goto is_not_equal_double;
		}
	} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
		if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
			bool result = zend_fast_equal_strings(Z_STR_P(op1), Z_STR_P(op2));
			if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
				zval_ptr_dtor_str(op1);
			}
			if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
				zval_ptr_dtor_str(op2);
			}
			if (!result) {
				goto is_not_equal_true;
			} else {
				goto is_not_equal_false;
			}
		}
	}
	ZEND_VM_DISPATCH_TO_HELPER(zend_is_not_equal_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_EX op1, op2));
}

static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_IS_SMALLER_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;
	double d1, d2;

	op1 = RT_CONSTANT(opline, opline->op1);
	op2 = RT_CONSTANT(opline, opline->op2);
	if (1 && IS_CONST == IS_CONST && IS_CONST == IS_CONST) {
		/* pass */
	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
			if (EXPECTED(Z_LVAL_P(op1) < Z_LVAL_P(op2))) {
is_smaller_true:
				ZEND_VM_SMART_BRANCH_TRUE();
			} else {
is_smaller_false:
				ZEND_VM_SMART_BRANCH_FALSE();
			}
		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
			d1 = (double)Z_LVAL_P(op1);
			d2 = Z_DVAL_P(op2);
			goto is_smaller_double;
		}
	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
			d1 = Z_DVAL_P(op1);
			d2 = Z_DVAL_P(op2);
is_smaller_double:
			if (d1 < d2) {
				goto is_smaller_true;
			} else {
				goto is_smaller_false;
			}
		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
			d1 = Z_DVAL_P(op1);
			d2 = (double)Z_LVAL_P(op2);
			goto is_smaller_double;
		}
	}
	ZEND_VM_DISPATCH_TO_HELPER(zend_is_smaller_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_EX op1, op2));
}

static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;
	double d1, d2;

	op1 = RT_CONSTANT(opline, opline->op1);
	op2 = RT_CONSTANT(opline, opline->op2);
	if (1 && IS_CONST == IS_CONST && IS_CONST == IS_CONST) {
		/* pass */
	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
			if (EXPECTED(Z_LVAL_P(op1) <= Z_LVAL_P(op2))) {
is_smaller_or_equal_true:
				ZEND_VM_SMART_BRANCH_TRUE();
				ZVAL_TRUE(EX_VAR(opline->result.var));
				ZEND_VM_NEXT_OPCODE();
			} else {
is_smaller_or_equal_false:
				ZEND_VM_SMART_BRANCH_FALSE();
				ZVAL_FALSE(EX_VAR(opline->result.var));
				ZEND_VM_NEXT_OPCODE();
			}
		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
			d1 = (double)Z_LVAL_P(op1);
			d2 = Z_DVAL_P(op2);
			goto is_smaller_or_equal_double;
		}
	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
			d1 = Z_DVAL_P(op1);
			d2 = Z_DVAL_P(op2);
is_smaller_or_equal_double:
			if (d1 <= d2) {
				goto is_smaller_or_equal_true;
			} else {
				goto is_smaller_or_equal_false;
			}
		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
			d1 = Z_DVAL_P(op1);
			d2 = (double)Z_LVAL_P(op2);
			goto is_smaller_or_equal_double;
		}
	}
	ZEND_VM_DISPATCH_TO_HELPER(zend_is_smaller_or_equal_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_EX op1, op2));
}

static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_SPACESHIP_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;

	SAVE_OPLINE();
	op1 = RT_CONSTANT(opline, opline->op1);
	op2 = RT_CONSTANT(opline, opline->op2);
	compare_function(EX_VAR(opline->result.var), op1, op2);




	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_BW_OR_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;

	op1 = RT_CONSTANT(opline, opline->op1);
	op2 = RT_CONSTANT(opline, opline->op2);
	if (1 && IS_CONST == IS_CONST && IS_CONST == IS_CONST) {
		/* pass */
	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)
			&& EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
		ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(op1) | Z_LVAL_P(op2));
		ZEND_VM_NEXT_OPCODE();
	}

	ZEND_VM_DISPATCH_TO_HELPER(zend_bw_or_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_EX op1, op2));
}

static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_BW_AND_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;

	op1 = RT_CONSTANT(opline, opline->op1);
	op2 = RT_CONSTANT(opline, opline->op2);
	if (1 && IS_CONST == IS_CONST && IS_CONST == IS_CONST) {
		/* pass */
	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)
			&& EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
		ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(op1) & Z_LVAL_P(op2));
		ZEND_VM_NEXT_OPCODE();
	}

	ZEND_VM_DISPATCH_TO_HELPER(zend_bw_and_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_EX op1, op2));
}

static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_BW_XOR_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;

	op1 = RT_CONSTANT(opline, opline->op1);
	op2 = RT_CONSTANT(opline, opline->op2);
	if (1 && IS_CONST == IS_CONST && IS_CONST == IS_CONST) {
		/* pass */
	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)
			&& EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
		ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(op1) ^ Z_LVAL_P(op2));
		ZEND_VM_NEXT_OPCODE();
	}

	ZEND_VM_DISPATCH_TO_HELPER(zend_bw_xor_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_EX op1, op2));
}

static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_BOOL_XOR_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;

	SAVE_OPLINE();
	op1 = RT_CONSTANT(opline, opline->op1);
	op2 = RT_CONSTANT(opline, opline->op2);
	boolean_xor_function(EX_VAR(opline->result.var), op1, op2);




	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_FETCH_DIM_R_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *container, *dim, *value;

	SAVE_OPLINE();
	container = RT_CONSTANT(opline, opline->op1);
	dim = RT_CONSTANT(opline, opline->op2);
	if (IS_CONST != IS_CONST) {
		if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
fetch_dim_r_array:
			value = zend_fetch_dimension_address_inner(Z_ARRVAL_P(container), dim, IS_CONST, BP_VAR_R EXECUTE_DATA_CC);
			ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
		} else if (EXPECTED(Z_TYPE_P(container) == IS_REFERENCE)) {
			container = Z_REFVAL_P(container);
			if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
				goto fetch_dim_r_array;
			} else {
				goto fetch_dim_r_slow;
			}
		} else {
fetch_dim_r_slow:
			if (IS_CONST == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
				dim++;
			}
			zend_fetch_dimension_address_read_R_slow(container, dim OPLINE_CC EXECUTE_DATA_CC);
		}
	} else {
		zend_fetch_dimension_address_read_R(container, dim, IS_CONST OPLINE_CC EXECUTE_DATA_CC);
	}




	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_FETCH_DIM_IS_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *container;

	SAVE_OPLINE();
	container = RT_CONSTANT(opline, opline->op1);
	zend_fetch_dimension_address_read_IS(container, RT_CONSTANT(opline, opline->op2), IS_CONST OPLINE_CC EXECUTE_DATA_CC);




	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_FETCH_DIM_FUNC_ARG_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
#if 0
	USE_OPLINE
#endif

	if (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) {
		if ((IS_CONST & (IS_CONST|IS_TMP_VAR))) {
			ZEND_VM_TAIL_CALL(zend_use_tmp_in_write_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
		}
		ZEND_VM_TAIL_CALL(ZEND_NULL_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
	} else {
		if (IS_CONST == IS_UNUSED) {
			ZEND_VM_TAIL_CALL(zend_use_undef_in_read_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
		}
		ZEND_VM_TAIL_CALL(ZEND_FETCH_DIM_R_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
	}
}

static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_FETCH_OBJ_R_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *container;
	void **cache_slot = NULL;

	SAVE_OPLINE();
	container = RT_CONSTANT(opline, opline->op1);

	if (IS_CONST == IS_CONST ||
	    (IS_CONST != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
		do {
			if ((IS_CONST & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
				container = Z_REFVAL_P(container);
				if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
					break;
				}
			}
			if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
				ZVAL_UNDEFINED_OP1();
			}
			zend_wrong_property_read(container, RT_CONSTANT(opline, opline->op2));
			ZVAL_NULL(EX_VAR(opline->result.var));
			goto fetch_obj_r_finish;
		} while (0);
	}

	/* here we are sure we are dealing with an object */
	do {
		zend_object *zobj = Z_OBJ_P(container);
		zend_string *name, *tmp_name;
		zval *retval;

		if (IS_CONST == IS_CONST) {
			cache_slot = CACHE_ADDR(opline->extended_value & ~ZEND_FETCH_REF /* FUNC_ARG fetch may contain it */);

			if (EXPECTED(zobj->ce == CACHED_PTR_EX(cache_slot))) {
				uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);

				if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
fetch_obj_r_simple:
					retval = OBJ_PROP(zobj, prop_offset);
					if (EXPECTED(Z_TYPE_INFO_P(retval) != IS_UNDEF)) {
						if (0 || (IS_CONST & (IS_TMP_VAR|IS_VAR)) != 0) {
							goto fetch_obj_r_copy;
						} else {
fetch_obj_r_fast_copy:
							ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
							ZEND_VM_NEXT_OPCODE();
						}
					}
				} else if (UNEXPECTED(IS_HOOKED_PROPERTY_OFFSET(prop_offset))) {
					zend_property_info *prop_info = CACHED_PTR_EX(cache_slot + 2);
					if (ZEND_IS_PROPERTY_HOOK_SIMPLE_READ(prop_offset)) {
						prop_offset = prop_info->offset;
						goto fetch_obj_r_simple;
					} else if (EXPECTED(ZEND_IS_PROPERTY_HOOK_SIMPLE_GET(prop_offset))) {
						zend_function *hook = prop_info->hooks[ZEND_PROPERTY_HOOK_GET];
						ZEND_ASSERT(hook->type == ZEND_USER_FUNCTION);
						ZEND_ASSERT(RUN_TIME_CACHE(&hook->op_array));

						uint32_t call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_HAS_THIS;
						if (IS_CONST & IS_CV) {
							GC_ADDREF(zobj);
						}
						if (IS_CONST & (IS_CV|IS_VAR|IS_TMP_VAR)) {
							call_info |= ZEND_CALL_RELEASE_THIS;
						}
						zend_execute_data *call = zend_vm_stack_push_call_frame(call_info, hook, 0, zobj);
						call->prev_execute_data = execute_data;
						call->call = NULL;
						call->return_value = EX_VAR(opline->result.var);
						call->run_time_cache = RUN_TIME_CACHE(&hook->op_array);

						execute_data = call;
						EG(current_execute_data) = execute_data;
						zend_init_cvs(0, hook->op_array.last_var EXECUTE_DATA_CC);

#if defined(ZEND_VM_IP_GLOBAL_REG) && ((ZEND_VM_KIND == ZEND_VM_KIND_CALL) || (ZEND_VM_KIND == ZEND_VM_KIND_HYBRID))
						opline = hook->op_array.opcodes;
#else
						EX(opline) = hook->op_array.opcodes;
#endif
						LOAD_OPLINE_EX();




						ZEND_VM_ENTER_EX();
					}
					/* Fall through to read_property for hooks. */
				} else if (EXPECTED(zobj->properties != NULL)) {
					ZEND_ASSERT(IS_DYNAMIC_PROPERTY_OFFSET(prop_offset));
					name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
					if (!IS_UNKNOWN_DYNAMIC_PROPERTY_OFFSET(prop_offset)) {
						uintptr_t idx = ZEND_DECODE_DYN_PROP_OFFSET(prop_offset);

						if (EXPECTED(idx < zobj->properties->nNumUsed * sizeof(Bucket))) {
							Bucket *p = (Bucket*)((char*)zobj->properties->arData + idx);

							if (EXPECTED(p->key == name) ||
							    (EXPECTED(p->h == ZSTR_H(name)) &&
							     EXPECTED(p->key != NULL) &&
							     EXPECTED(zend_string_equal_content(p->key, name)))) {
								retval = &p->val;
								if (0 || (IS_CONST & (IS_TMP_VAR|IS_VAR)) != 0) {
									goto fetch_obj_r_copy;
								} else {
									goto fetch_obj_r_fast_copy;
								}
							}
						}
						CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_DYNAMIC_PROPERTY_OFFSET);
					}
					retval = zend_hash_find_known_hash(zobj->properties, name);
					if (EXPECTED(retval)) {
						uintptr_t idx = (char*)retval - (char*)zobj->properties->arData;
						CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_ENCODE_DYN_PROP_OFFSET(idx));
						if (0 || (IS_CONST & (IS_TMP_VAR|IS_VAR)) != 0) {
							goto fetch_obj_r_copy;
						} else {
							goto fetch_obj_r_fast_copy;
						}
					}
				}
			}
			name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
		} else {
			name = zval_try_get_tmp_string(RT_CONSTANT(opline, opline->op2), &tmp_name);
			if (UNEXPECTED(!name)) {
				ZVAL_UNDEF(EX_VAR(opline->result.var));
				break;
			}
		}

#if ZEND_DEBUG
		/* For non-standard object handlers, verify a declared property type in debug builds.
		 * Fetch prop_info before calling read_property(), as it may deallocate the object. */
		zend_property_info *prop_info = NULL;
		if (zobj->handlers->read_property != zend_std_read_property) {
			prop_info = zend_get_property_info(zobj->ce, name, /* silent */ true);
		}
#endif
		retval = zobj->handlers->read_property(zobj, name, BP_VAR_R, cache_slot, EX_VAR(opline->result.var));
#if ZEND_DEBUG
		if (!EG(exception) && prop_info && prop_info != ZEND_WRONG_PROPERTY_INFO
				&& ZEND_TYPE_IS_SET(prop_info->type)) {
			ZVAL_OPT_DEREF(retval);
			zend_verify_property_type(prop_info, retval, /* strict */ true);
		}
#endif

		if (IS_CONST != IS_CONST) {
			zend_tmp_string_release(tmp_name);
		}

		if (retval != EX_VAR(opline->result.var)) {
fetch_obj_r_copy:
			ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
		} else if (UNEXPECTED(Z_ISREF_P(retval))) {
			zend_unwrap_reference(retval);
		}
	} while (0);

fetch_obj_r_finish:




	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_FETCH_OBJ_IS_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *container;
	void **cache_slot = NULL;

	SAVE_OPLINE();
	container = RT_CONSTANT(opline, opline->op1);

	if (IS_CONST == IS_CONST ||
	    (IS_CONST != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
		do {
			if ((IS_CONST & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
				container = Z_REFVAL_P(container);
				if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
					break;
				}
			}
			if (IS_CONST == IS_CV && Z_TYPE_P(EX_VAR(opline->op2.var)) == IS_UNDEF) {
				ZVAL_UNDEFINED_OP2();
			}
			ZVAL_NULL(EX_VAR(opline->result.var));
			goto fetch_obj_is_finish;
		} while (0);
	}

	/* here we are sure we are dealing with an object */
	do {
		zend_object *zobj = Z_OBJ_P(container);
		zend_string *name, *tmp_name;
		zval *retval;

		if (IS_CONST == IS_CONST) {
			cache_slot = CACHE_ADDR(opline->extended_value);

			if (EXPECTED(zobj->ce == CACHED_PTR_EX(cache_slot))) {
				uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);

				if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
fetch_obj_is_simple:
					retval = OBJ_PROP(zobj, prop_offset);
					if (EXPECTED(Z_TYPE_P(retval) != IS_UNDEF)) {
						if (0 || (IS_CONST & (IS_TMP_VAR|IS_VAR)) != 0) {
							goto fetch_obj_is_copy;
						} else {
fetch_obj_is_fast_copy:
							ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
							ZEND_VM_NEXT_OPCODE();
						}
					}
				} else if (UNEXPECTED(IS_HOOKED_PROPERTY_OFFSET(prop_offset))) {
					if (ZEND_IS_PROPERTY_HOOK_SIMPLE_READ(prop_offset)) {
						zend_property_info *prop_info = CACHED_PTR_EX(cache_slot + 2);
						prop_offset = prop_info->offset;
						goto fetch_obj_is_simple;
					}
					/* Fall through to read_property for hooks. */
				} else if (EXPECTED(zobj->properties != NULL)) {
					ZEND_ASSERT(IS_DYNAMIC_PROPERTY_OFFSET(prop_offset));
					name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
					if (!IS_UNKNOWN_DYNAMIC_PROPERTY_OFFSET(prop_offset)) {
						uintptr_t idx = ZEND_DECODE_DYN_PROP_OFFSET(prop_offset);

						if (EXPECTED(idx < zobj->properties->nNumUsed * sizeof(Bucket))) {
							Bucket *p = (Bucket*)((char*)zobj->properties->arData + idx);

							if (EXPECTED(p->key == name) ||
							    (EXPECTED(p->h == ZSTR_H(name)) &&
							     EXPECTED(p->key != NULL) &&
							     EXPECTED(zend_string_equal_content(p->key, name)))) {
								retval = &p->val;
								if (0 || (IS_CONST & (IS_TMP_VAR|IS_VAR)) != 0) {
									goto fetch_obj_is_copy;
								} else {
									goto fetch_obj_is_fast_copy;
								}
							}
						}
						CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_DYNAMIC_PROPERTY_OFFSET);
					}
					retval = zend_hash_find_known_hash(zobj->properties, name);
					if (EXPECTED(retval)) {
						uintptr_t idx = (char*)retval - (char*)zobj->properties->arData;
						CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_ENCODE_DYN_PROP_OFFSET(idx));
						if (0 || (IS_CONST & (IS_TMP_VAR|IS_VAR)) != 0) {
							goto fetch_obj_is_copy;
						} else {
							goto fetch_obj_is_fast_copy;
						}
					}
				}
			}
			name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
		} else {
			name = zval_try_get_tmp_string(RT_CONSTANT(opline, opline->op2), &tmp_name);
			if (UNEXPECTED(!name)) {
				ZVAL_UNDEF(EX_VAR(opline->result.var));
				break;
			}
		}

		retval = zobj->handlers->read_property(zobj, name, BP_VAR_IS, cache_slot, EX_VAR(opline->result.var));

		if (IS_CONST != IS_CONST) {
			zend_tmp_string_release(tmp_name);
		}

		if (retval != EX_VAR(opline->result.var)) {
fetch_obj_is_copy:
			ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
		} else if (UNEXPECTED(Z_ISREF_P(retval))) {
			zend_unwrap_reference(retval);
		}
	} while (0);

fetch_obj_is_finish:




	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
#if 0
	USE_OPLINE
#endif

	if (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) {
		/* Behave like FETCH_OBJ_W */
		if ((IS_CONST & (IS_CONST|IS_TMP_VAR))) {
			ZEND_VM_TAIL_CALL(zend_use_tmp_in_write_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
		}
		ZEND_VM_TAIL_CALL(ZEND_NULL_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
	} else {
		ZEND_VM_TAIL_CALL(ZEND_FETCH_OBJ_R_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
	}
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_FETCH_LIST_R_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *container;

	SAVE_OPLINE();
	container = RT_CONSTANT(opline, opline->op1);
	zend_fetch_dimension_address_LIST_r(container, RT_CONSTANT(opline, opline->op2), IS_CONST OPLINE_CC EXECUTE_DATA_CC);


	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_FAST_CONCAT_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;
	zend_string *op1_str, *op2_str, *str;


	op1 = RT_CONSTANT(opline, opline->op1);
	op2 = RT_CONSTANT(opline, opline->op2);
	if ((IS_CONST == IS_CONST || EXPECTED(Z_TYPE_P(op1) == IS_STRING)) &&
	    (IS_CONST == IS_CONST || EXPECTED(Z_TYPE_P(op2) == IS_STRING))) {
		zend_string *op1_str = Z_STR_P(op1);
		zend_string *op2_str = Z_STR_P(op2);
		zend_string *str;
		uint32_t flags = ZSTR_GET_COPYABLE_CONCAT_PROPERTIES_BOTH(op1_str, op2_str);

		if (IS_CONST != IS_CONST && UNEXPECTED(ZSTR_LEN(op1_str) == 0)) {
			if (IS_CONST == IS_CONST || IS_CONST == IS_CV) {
				ZVAL_STR_COPY(EX_VAR(opline->result.var), op2_str);
			} else {
				ZVAL_STR(EX_VAR(opline->result.var), op2_str);
			}
			if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
				zend_string_release_ex(op1_str, 0);
			}
		} else if (IS_CONST != IS_CONST && UNEXPECTED(ZSTR_LEN(op2_str) == 0)) {
			if (IS_CONST == IS_CONST || IS_CONST == IS_CV) {
				ZVAL_STR_COPY(EX_VAR(opline->result.var), op1_str);
			} else {
				ZVAL_STR(EX_VAR(opline->result.var), op1_str);
			}
			if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
				zend_string_release_ex(op2_str, 0);
			}
		} else if (IS_CONST != IS_CONST && IS_CONST != IS_CV &&
		    !ZSTR_IS_INTERNED(op1_str) && GC_REFCOUNT(op1_str) == 1) {
			size_t len = ZSTR_LEN(op1_str);

			str = zend_string_extend(op1_str, len + ZSTR_LEN(op2_str), 0);
			memcpy(ZSTR_VAL(str) + len, ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
			GC_ADD_FLAGS(str, flags);
			ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
			if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
				zend_string_release_ex(op2_str, 0);
			}
		} else {
			str = zend_string_alloc(ZSTR_LEN(op1_str) + ZSTR_LEN(op2_str), 0);
			memcpy(ZSTR_VAL(str), ZSTR_VAL(op1_str), ZSTR_LEN(op1_str));
			memcpy(ZSTR_VAL(str) + ZSTR_LEN(op1_str), ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
			GC_ADD_FLAGS(str, flags);
			ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
			if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
				zend_string_release_ex(op1_str, 0);
			}
			if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
				zend_string_release_ex(op2_str, 0);
			}
		}
		ZEND_VM_NEXT_OPCODE();
	}

	SAVE_OPLINE();
	if (IS_CONST == IS_CONST) {
		op1_str = Z_STR_P(op1);
	} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
		op1_str = zend_string_copy(Z_STR_P(op1));
	} else {
		if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
			ZVAL_UNDEFINED_OP1();
		}
		op1_str = zval_get_string_func(op1);
	}
	if (IS_CONST == IS_CONST) {
		op2_str = Z_STR_P(op2);
	} else if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
		op2_str = zend_string_copy(Z_STR_P(op2));
	} else {
		if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(op2) == IS_UNDEF)) {
			ZVAL_UNDEFINED_OP2();
		}
		op2_str = zval_get_string_func(op2);
	}
	do {
		if (IS_CONST != IS_CONST) {
			if (UNEXPECTED(ZSTR_LEN(op1_str) == 0)) {
				if (IS_CONST == IS_CONST) {
					if (UNEXPECTED(Z_REFCOUNTED_P(op2))) {
						GC_ADDREF(op2_str);
					}
				}
				ZVAL_STR(EX_VAR(opline->result.var), op2_str);
				zend_string_release_ex(op1_str, 0);
				break;
			}
		}
		if (IS_CONST != IS_CONST) {
			if (UNEXPECTED(ZSTR_LEN(op2_str) == 0)) {
				if (IS_CONST == IS_CONST) {
					if (UNEXPECTED(Z_REFCOUNTED_P(op1))) {
						GC_ADDREF(op1_str);
					}
				}
				ZVAL_STR(EX_VAR(opline->result.var), op1_str);
				zend_string_release_ex(op2_str, 0);
				break;
			}
		}
		str = zend_string_alloc(ZSTR_LEN(op1_str) + ZSTR_LEN(op2_str), 0);
		memcpy(ZSTR_VAL(str), ZSTR_VAL(op1_str), ZSTR_LEN(op1_str));
		memcpy(ZSTR_VAL(str) + ZSTR_LEN(op1_str), ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);

		ZSTR_COPY_CONCAT_PROPERTIES_BOTH(str, op1_str, op2_str);
		ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
		if (IS_CONST != IS_CONST) {
			zend_string_release_ex(op1_str, 0);
		}
		if (IS_CONST != IS_CONST) {
			zend_string_release_ex(op2_str, 0);
		}
	} while (0);




	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_INIT_METHOD_CALL_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *function_name;
	zval *object;
	zend_function *fbc;
	zend_class_entry *called_scope;
	zend_object *obj;
	zend_execute_data *call;
	uint32_t call_info;

	SAVE_OPLINE();

	object = RT_CONSTANT(opline, opline->op1);

	if (IS_CONST != IS_CONST) {
		function_name = RT_CONSTANT(opline, opline->op2);
	}

	if (IS_CONST != IS_CONST &&
	    UNEXPECTED(Z_TYPE_P(function_name) != IS_STRING)) {
		do {
			if ((IS_CONST & (IS_VAR|IS_CV)) && Z_ISREF_P(function_name)) {
				function_name = Z_REFVAL_P(function_name);
				if (EXPECTED(Z_TYPE_P(function_name) == IS_STRING)) {
					break;
				}
			} else if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) {
				ZVAL_UNDEFINED_OP2();
				if (UNEXPECTED(EG(exception) != NULL)) {


					HANDLE_EXCEPTION();
				}
			}
			zend_throw_error(NULL, "Method name must be a string");




			HANDLE_EXCEPTION();
		} while (0);
	}

	if (IS_CONST == IS_UNUSED) {
		obj = Z_OBJ_P(object);
	} else {
		do {
			if (IS_CONST != IS_CONST && EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
				obj = Z_OBJ_P(object);
			} else {
				if ((IS_CONST & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(object))) {
					zend_reference *ref = Z_REF_P(object);

					object = &ref->val;
					if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
						obj = Z_OBJ_P(object);
						if (IS_CONST & IS_VAR) {
							if (UNEXPECTED(GC_DELREF(ref) == 0)) {
								efree_size(ref, sizeof(zend_reference));
							} else {
								Z_ADDREF_P(object);
							}
						}
						break;
					}
				}
				if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
					object = ZVAL_UNDEFINED_OP1();
					if (UNEXPECTED(EG(exception) != NULL)) {
						if (IS_CONST != IS_CONST) {


						}
						HANDLE_EXCEPTION();
					}
				}
				if (IS_CONST == IS_CONST) {
					function_name = RT_CONSTANT(opline, opline->op2);
				}
				zend_invalid_method_call(object, function_name);




				HANDLE_EXCEPTION();
			}
		} while (0);
	}

	called_scope = obj->ce;

	if (IS_CONST == IS_CONST &&
	    EXPECTED(CACHED_PTR(opline->result.num) == called_scope)) {
		fbc = CACHED_PTR(opline->result.num + sizeof(void*));
	} else {
		zend_object *orig_obj = obj;

		if (IS_CONST == IS_CONST) {
			function_name = RT_CONSTANT(opline, opline->op2);
		}

		/* First, locate the function. */
		fbc = obj->handlers->get_method(&obj, Z_STR_P(function_name), ((IS_CONST == IS_CONST) ? (RT_CONSTANT(opline, opline->op2) + 1) : NULL));
		if (UNEXPECTED(fbc == NULL)) {
			if (EXPECTED(!EG(exception))) {
				zend_undefined_method(orig_obj->ce, Z_STR_P(function_name));
			}


			if ((IS_CONST & (IS_VAR|IS_TMP_VAR)) && GC_DELREF(orig_obj) == 0) {
				zend_objects_store_del(orig_obj);
			}
			HANDLE_EXCEPTION();
		}
		if (IS_CONST == IS_CONST &&
		    EXPECTED(!(fbc->common.fn_flags & (ZEND_ACC_CALL_VIA_TRAMPOLINE|ZEND_ACC_NEVER_CACHE))) &&
		    EXPECTED(obj == orig_obj)) {
			CACHE_POLYMORPHIC_PTR(opline->result.num, called_scope, fbc);
		}
		if ((IS_CONST & (IS_VAR|IS_TMP_VAR)) && UNEXPECTED(obj != orig_obj)) {
			GC_ADDREF(obj); /* For $this pointer */
			if (GC_DELREF(orig_obj) == 0) {
				zend_objects_store_del(orig_obj);
			}
		}
		if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!RUN_TIME_CACHE(&fbc->op_array))) {
			init_func_run_time_cache(&fbc->op_array);
		}
	}

	if (IS_CONST != IS_CONST) {


	}

	call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_HAS_THIS;
	if (UNEXPECTED((fbc->common.fn_flags & ZEND_ACC_STATIC) != 0)) {
		if ((IS_CONST & (IS_VAR|IS_TMP_VAR)) && GC_DELREF(obj) == 0) {
			zend_objects_store_del(obj);
			if (UNEXPECTED(EG(exception))) {
				HANDLE_EXCEPTION();
			}
		}
		/* call static method */
		obj = (zend_object*)called_scope;
		call_info = ZEND_CALL_NESTED_FUNCTION;
	} else if (IS_CONST & (IS_VAR|IS_TMP_VAR|IS_CV)) {
		if (IS_CONST == IS_CV) {
			GC_ADDREF(obj); /* For $this pointer */
		}
		/* CV may be changed indirectly (e.g. when it's a reference) */
		call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_HAS_THIS | ZEND_CALL_RELEASE_THIS;
	}

	call = zend_vm_stack_push_call_frame(call_info,
		fbc, opline->extended_value, obj);
	call->prev_execute_data = EX(call);
	EX(call) = call;

	ZEND_VM_NEXT_OPCODE();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_INIT_STATIC_METHOD_CALL_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *function_name;
	zend_class_entry *ce;
	uint32_t call_info;
	zend_function *fbc;
	zend_execute_data *call;

	SAVE_OPLINE();

	if (IS_CONST == IS_CONST) {
		/* no function found. try a static method in class */
		ce = CACHED_PTR(opline->result.num);
		if (UNEXPECTED(ce == NULL)) {
			ce = zend_fetch_class_by_name(Z_STR_P(RT_CONSTANT(opline, opline->op1)), Z_STR_P(RT_CONSTANT(opline, opline->op1) + 1), ZEND_FETCH_CLASS_DEFAULT | ZEND_FETCH_CLASS_EXCEPTION);
			if (UNEXPECTED(ce == NULL)) {


				HANDLE_EXCEPTION();
			}
			if (IS_CONST != IS_CONST) {
				CACHE_PTR(opline->result.num, ce);
			}
		}
	} else if (IS_CONST == IS_UNUSED) {
		ce = zend_fetch_class(NULL, opline->op1.num);
		if (UNEXPECTED(ce == NULL)) {


			HANDLE_EXCEPTION();
		}
	} else {
		ce = Z_CE_P(EX_VAR(opline->op1.var));
	}

	if (IS_CONST == IS_CONST &&
	    IS_CONST == IS_CONST &&
	    EXPECTED((fbc = CACHED_PTR(opline->result.num + sizeof(void*))) != NULL)) {
		/* nothing to do */
	} else if (IS_CONST != IS_CONST &&
	           IS_CONST == IS_CONST &&
	           EXPECTED(CACHED_PTR(opline->result.num) == ce)) {
		fbc = CACHED_PTR(opline->result.num + sizeof(void*));
	} else if (IS_CONST != IS_UNUSED) {
		function_name = RT_CONSTANT(opline, opline->op2);
		if (IS_CONST != IS_CONST) {
			if (UNEXPECTED(Z_TYPE_P(function_name) != IS_STRING)) {
				do {
					if (IS_CONST & (IS_VAR|IS_CV) && Z_ISREF_P(function_name)) {
						function_name = Z_REFVAL_P(function_name);
						if (EXPECTED(Z_TYPE_P(function_name) == IS_STRING)) {
							break;
						}
					} else if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) {
						ZVAL_UNDEFINED_OP2();
						if (UNEXPECTED(EG(exception) != NULL)) {
							HANDLE_EXCEPTION();
						}
					}
					zend_throw_error(NULL, "Method name must be a string");


					HANDLE_EXCEPTION();
				} while (0);
			}
		}

		if (ce->get_static_method) {
			fbc = ce->get_static_method(ce, Z_STR_P(function_name));
		} else {
			fbc = zend_std_get_static_method(ce, Z_STR_P(function_name), ((IS_CONST == IS_CONST) ? (RT_CONSTANT(opline, opline->op2) + 1) : NULL));
		}
		if (UNEXPECTED(fbc == NULL)) {
			if (EXPECTED(!EG(exception))) {
				zend_undefined_method(ce, Z_STR_P(function_name));
			}


			HANDLE_EXCEPTION();
		}
		if (IS_CONST == IS_CONST &&
		    EXPECTED(!(fbc->common.fn_flags & (ZEND_ACC_CALL_VIA_TRAMPOLINE|ZEND_ACC_NEVER_CACHE))) &&
			EXPECTED(!(fbc->common.scope->ce_flags & ZEND_ACC_TRAIT))) {
			CACHE_POLYMORPHIC_PTR(opline->result.num, ce, fbc);
		}
		if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!RUN_TIME_CACHE(&fbc->op_array))) {
			init_func_run_time_cache(&fbc->op_array);
		}
		if (IS_CONST != IS_CONST) {


		}
	} else {
		if (UNEXPECTED(ce->constructor == NULL)) {
			zend_throw_error(NULL, "Cannot call constructor");
			HANDLE_EXCEPTION();
		}
		if (Z_TYPE(EX(This)) == IS_OBJECT && Z_OBJ(EX(This))->ce != ce->constructor->common.scope && (ce->constructor->common.fn_flags & ZEND_ACC_PRIVATE)) {
			zend_throw_error(NULL, "Cannot call private %s::__construct()", ZSTR_VAL(ce->name));
			HANDLE_EXCEPTION();
		}
		fbc = ce->constructor;
		if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!RUN_TIME_CACHE(&fbc->op_array))) {
			init_func_run_time_cache(&fbc->op_array);
		}
	}

	if (!(fbc->common.fn_flags & ZEND_ACC_STATIC)) {
		if (Z_TYPE(EX(This)) == IS_OBJECT && instanceof_function(Z_OBJCE(EX(This)), ce)) {
			ce = (zend_class_entry*)Z_OBJ(EX(This));
			call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_HAS_THIS;
		} else {
			zend_non_static_method_call(fbc);
			HANDLE_EXCEPTION();
		}
	} else {
		/* previous opcode is ZEND_FETCH_CLASS */
		if (IS_CONST == IS_UNUSED
		 && ((opline->op1.num & ZEND_FETCH_CLASS_MASK) == ZEND_FETCH_CLASS_PARENT ||
		     (opline->op1.num & ZEND_FETCH_CLASS_MASK) == ZEND_FETCH_CLASS_SELF)) {
			if (Z_TYPE(EX(This)) == IS_OBJECT) {
				ce = Z_OBJCE(EX(This));
			} else {
				ce = Z_CE(EX(This));
			}
		}
		call_info = ZEND_CALL_NESTED_FUNCTION;
	}

	call = zend_vm_stack_push_call_frame(call_info,
		fbc, opline->extended_value, ce);
	call->prev_execute_data = EX(call);
	EX(call) = call;

	ZEND_VM_NEXT_OPCODE();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_INIT_USER_CALL_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *function_name;
	zend_fcall_info_cache fcc;
	char *error = NULL;
	zend_function *func;
	void *object_or_called_scope;
	zend_execute_data *call;
	uint32_t call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_DYNAMIC;

	SAVE_OPLINE();
	function_name = RT_CONSTANT(opline, opline->op2);
	if (zend_is_callable_ex(function_name, NULL, 0, NULL, &fcc, &error)) {
		ZEND_ASSERT(!error);

		/* Deprecation can be emitted from zend_is_callable_ex(), which can
		 * invoke a user error handler and throw an exception.
		 * For the CONST and CV case we reuse the same exception block below
		 * to make sure we don't increase VM size too much. */
		if (!(IS_CONST & (IS_TMP_VAR|IS_VAR)) && UNEXPECTED(EG(exception))) {


			HANDLE_EXCEPTION();
		}

		func = fcc.function_handler;
		object_or_called_scope = fcc.called_scope;
		if (func->common.fn_flags & ZEND_ACC_CLOSURE) {
			/* Delay closure destruction until its invocation */
			GC_ADDREF(ZEND_CLOSURE_OBJECT(func));
			call_info |= ZEND_CALL_CLOSURE;
			if (func->common.fn_flags & ZEND_ACC_FAKE_CLOSURE) {
				call_info |= ZEND_CALL_FAKE_CLOSURE;
			}
			if (fcc.object) {
				object_or_called_scope = fcc.object;
				call_info |= ZEND_CALL_HAS_THIS;
			}
		} else if (fcc.object) {
			GC_ADDREF(fcc.object); /* For $this pointer */
			object_or_called_scope = fcc.object;
			call_info |= ZEND_CALL_RELEASE_THIS | ZEND_CALL_HAS_THIS;
		}


		if ((IS_CONST & (IS_TMP_VAR|IS_VAR)) && UNEXPECTED(EG(exception))) {
			if (call_info & ZEND_CALL_CLOSURE) {
				zend_object_release(ZEND_CLOSURE_OBJECT(func));
			} else if (call_info & ZEND_CALL_RELEASE_THIS) {
				zend_object_release(fcc.object);
			}
			HANDLE_EXCEPTION();
		}

		if (EXPECTED(func->type == ZEND_USER_FUNCTION) && UNEXPECTED(!RUN_TIME_CACHE(&func->op_array))) {
			init_func_run_time_cache(&func->op_array);
		}
	} else {
		zend_type_error("%s(): Argument #1 ($callback) must be a valid callback, %s", Z_STRVAL_P(RT_CONSTANT(opline, opline->op1)), error);
		efree(error);


		HANDLE_EXCEPTION();
	}

	call = zend_vm_stack_push_call_frame(call_info,
		func, opline->extended_value, object_or_called_scope);
	call->prev_execute_data = EX(call);
	EX(call) = call;

	ZEND_VM_NEXT_OPCODE();
}

static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_SEND_VAL_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *value, *arg;

	if (IS_CONST == IS_CONST) {
		SAVE_OPLINE();
		zend_string *arg_name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
		uint32_t arg_num;
		arg = zend_handle_named_arg(&EX(call), arg_name, &arg_num, CACHE_ADDR(opline->result.num));
		if (UNEXPECTED(!arg)) {


			HANDLE_EXCEPTION();
		}
	} else {
		arg = ZEND_CALL_VAR(EX(call), opline->result.var);
	}

	value = RT_CONSTANT(opline, opline->op1);
	ZVAL_COPY_VALUE(arg, value);
	if (IS_CONST == IS_CONST) {
		if (UNEXPECTED(Z_OPT_REFCOUNTED_P(arg))) {
			Z_ADDREF_P(arg);
		}
	}
	ZEND_VM_NEXT_OPCODE();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_SEND_VAL_EX_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *value, *arg;
	uint32_t arg_num;

	if (IS_CONST == IS_CONST) {
		SAVE_OPLINE();
		zend_string *arg_name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
		arg = zend_handle_named_arg(&EX(call), arg_name, &arg_num, CACHE_ADDR(opline->result.num));
		if (UNEXPECTED(!arg)) {


			HANDLE_EXCEPTION();
		}
	} else {
		arg = ZEND_CALL_VAR(EX(call), opline->result.var);
		arg_num = opline->op2.num;
	}

	if (EXPECTED(arg_num <= MAX_ARG_FLAG_NUM)) {
		if (QUICK_ARG_MUST_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
			goto send_val_by_ref;
		}
	} else if (ARG_MUST_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
send_val_by_ref:;
		ZEND_VM_DISPATCH_TO_HELPER(zend_cannot_pass_by_ref_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_EX arg_num, arg));
	}
	value = RT_CONSTANT(opline, opline->op1);
	ZVAL_COPY_VALUE(arg, value);
	if (IS_CONST == IS_CONST) {
		if (UNEXPECTED(Z_OPT_REFCOUNTED_P(arg))) {
			Z_ADDREF_P(arg);
		}
	}
	ZEND_VM_NEXT_OPCODE();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_FETCH_CLASS_CONSTANT_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	zend_class_entry *ce, *scope;
	zend_class_constant *c;
	zval *value, *zv, *constant_zv;
	zend_string *constant_name;
	USE_OPLINE

	SAVE_OPLINE();

	do {
		if (IS_CONST == IS_CONST && IS_CONST == IS_CONST) {
			if (EXPECTED(CACHED_PTR(opline->extended_value + sizeof(void*)))) {
				value = CACHED_PTR(opline->extended_value + sizeof(void*));
				break;
			}
		}
		if (IS_CONST == IS_CONST) {
			if (EXPECTED(CACHED_PTR(opline->extended_value))) {
				ce = CACHED_PTR(opline->extended_value);
			} else {
				ce = zend_fetch_class_by_name(Z_STR_P(RT_CONSTANT(opline, opline->op1)), Z_STR_P(RT_CONSTANT(opline, opline->op1) + 1), ZEND_FETCH_CLASS_DEFAULT | ZEND_FETCH_CLASS_EXCEPTION);
				if (UNEXPECTED(ce == NULL)) {
					ZVAL_UNDEF(EX_VAR(opline->result.var));


					HANDLE_EXCEPTION();
				}
				CACHE_PTR(opline->extended_value, ce);
			}
		} else if (IS_CONST == IS_UNUSED) {
			ce = zend_fetch_class(NULL, opline->op1.num);
			if (UNEXPECTED(ce == NULL)) {
				ZVAL_UNDEF(EX_VAR(opline->result.var));


				HANDLE_EXCEPTION();
			}
		} else {
			ce = Z_CE_P(EX_VAR(opline->op1.var));
		}
		if (IS_CONST != IS_CONST
			&& IS_CONST == IS_CONST
			&& EXPECTED(CACHED_PTR(opline->extended_value) == ce)) {
			value = CACHED_PTR(opline->extended_value + sizeof(void*));
			break;
		}

		constant_zv = RT_CONSTANT(opline, opline->op2);
		if (UNEXPECTED(Z_TYPE_P(constant_zv) != IS_STRING)) {
			zend_invalid_class_constant_type_error(Z_TYPE_P(constant_zv));
			ZVAL_UNDEF(EX_VAR(opline->result.var));


			HANDLE_EXCEPTION();
		}
		constant_name = Z_STR_P(constant_zv);
		/* Magic 'class' for constant OP2 is caught at compile-time */
		if (IS_CONST != IS_CONST && UNEXPECTED(zend_string_equals_literal_ci(constant_name, "class"))) {
			ZVAL_STR_COPY(EX_VAR(opline->result.var), ce->name);


			ZEND_VM_NEXT_OPCODE();
		}
		zv = IS_CONST == IS_CONST
			? zend_hash_find_known_hash(CE_CONSTANTS_TABLE(ce), constant_name)
			: zend_hash_find(CE_CONSTANTS_TABLE(ce), constant_name);

		if (EXPECTED(zv != NULL)) {
			c = Z_PTR_P(zv);
			scope = EX(func)->op_array.scope;
			if (!zend_verify_const_access(c, scope)) {
				zend_throw_error(NULL, "Cannot access %s constant %s::%s", zend_visibility_string(ZEND_CLASS_CONST_FLAGS(c)), ZSTR_VAL(ce->name), ZSTR_VAL(constant_name));
				ZVAL_UNDEF(EX_VAR(opline->result.var));


				HANDLE_EXCEPTION();
			}

			if (ce->ce_flags & ZEND_ACC_TRAIT) {
				zend_throw_error(NULL, "Cannot access trait constant %s::%s directly", ZSTR_VAL(ce->name), ZSTR_VAL(constant_name));
				ZVAL_UNDEF(EX_VAR(opline->result.var));


				HANDLE_EXCEPTION();
			}

			bool is_constant_deprecated = ZEND_CLASS_CONST_FLAGS(c) & ZEND_ACC_DEPRECATED;
			if (UNEXPECTED(is_constant_deprecated) && !CONST_IS_RECURSIVE(c)) {
				if (c->ce->type == ZEND_USER_CLASS) {
					/* Recursion protection only applied to user constants, GH-18463 */
					CONST_PROTECT_RECURSION(c);
				}
				zend_deprecated_class_constant(c, constant_name);
				if (c->ce->type == ZEND_USER_CLASS) {
					CONST_UNPROTECT_RECURSION(c);
				}

				if (EG(exception)) {
					ZVAL_UNDEF(EX_VAR(opline->result.var));


					HANDLE_EXCEPTION();
				}
			}

			value = &c->value;
			// Enums require loading of all class constants to build the backed enum table
			if (ce->ce_flags & ZEND_ACC_ENUM && ce->enum_backing_type != IS_UNDEF && ce->type == ZEND_USER_CLASS && !(ce->ce_flags & ZEND_ACC_CONSTANTS_UPDATED)) {
				if (UNEXPECTED(zend_update_class_constants(ce) == FAILURE)) {
					ZVAL_UNDEF(EX_VAR(opline->result.var));


					HANDLE_EXCEPTION();
				}
			}
			if (Z_TYPE_P(value) == IS_CONSTANT_AST) {
				if (UNEXPECTED(zend_update_class_constant(c, constant_name, c->ce) != SUCCESS)) {
					ZVAL_UNDEF(EX_VAR(opline->result.var));


					HANDLE_EXCEPTION();
				}
			}
			if (IS_CONST == IS_CONST && !is_constant_deprecated) {
				CACHE_POLYMORPHIC_PTR(opline->extended_value, ce, value);
			}
		} else {
			zend_throw_error(NULL, "Undefined constant %s::%s",
				ZSTR_VAL(ce->name), ZSTR_VAL(constant_name));
			ZVAL_UNDEF(EX_VAR(opline->result.var));


			HANDLE_EXCEPTION();
		}
	} while (0);

	ZVAL_COPY_OR_DUP(EX_VAR(opline->result.var), value);


	ZEND_VM_NEXT_OPCODE();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *expr_ptr, new_expr;

	SAVE_OPLINE();
	if ((IS_CONST == IS_VAR || IS_CONST == IS_CV) &&
	    UNEXPECTED(opline->extended_value & ZEND_ARRAY_ELEMENT_REF)) {
		expr_ptr = zend_get_bad_ptr();
		if (Z_ISREF_P(expr_ptr)) {
			Z_ADDREF_P(expr_ptr);
		} else {
			ZVAL_MAKE_REF_EX(expr_ptr, 2);
		}


	} else {
		expr_ptr = RT_CONSTANT(opline, opline->op1);
		if (IS_CONST == IS_TMP_VAR) {
			/* pass */
		} else if (IS_CONST == IS_CONST) {
			Z_TRY_ADDREF_P(expr_ptr);
		} else if (IS_CONST == IS_CV) {
			ZVAL_DEREF(expr_ptr);
			Z_TRY_ADDREF_P(expr_ptr);
		} else /* if (IS_CONST == IS_VAR) */ {
			if (UNEXPECTED(Z_ISREF_P(expr_ptr))) {
				zend_refcounted *ref = Z_COUNTED_P(expr_ptr);

				expr_ptr = Z_REFVAL_P(expr_ptr);
				if (UNEXPECTED(GC_DELREF(ref) == 0)) {
					ZVAL_COPY_VALUE(&new_expr, expr_ptr);
					expr_ptr = &new_expr;
					efree_size(ref, sizeof(zend_reference));
				} else if (Z_OPT_REFCOUNTED_P(expr_ptr)) {
					Z_ADDREF_P(expr_ptr);
				}
			}
		}
	}

	if (IS_CONST != IS_UNUSED) {
		zval *offset = RT_CONSTANT(opline, opline->op2);
		zend_string *str;
		zend_ulong hval;

add_again:
		if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) {
			str = Z_STR_P(offset);
			if (IS_CONST != IS_CONST) {
				if (ZEND_HANDLE_NUMERIC(str, hval)) {
					goto num_index;
				}
			}
str_index:
			zend_hash_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), str, expr_ptr);
		} else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
			hval = Z_LVAL_P(offset);
num_index:
			zend_hash_index_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), hval, expr_ptr);
		} else if ((IS_CONST & (IS_VAR|IS_CV)) && EXPECTED(Z_TYPE_P(offset) == IS_REFERENCE)) {
			offset = Z_REFVAL_P(offset);
			goto add_again;
		} else if (UNEXPECTED(Z_TYPE_P(offset) == IS_NULL)) {
			zval tmp;
			if (IS_CONST == IS_CV || IS_CONST == IS_VAR) {
				ZVAL_COPY(&tmp, expr_ptr);
			}
			zend_error(E_DEPRECATED, "Using null as an array offset is deprecated, use an empty string instead");
			if (IS_CONST == IS_CV || IS_CONST == IS_VAR) {
				/* A userland error handler can do funky things to the expression, so reset it */
				zval_ptr_dtor(expr_ptr);
				ZVAL_COPY_VALUE(expr_ptr, &tmp);
			}
			if (UNEXPECTED(EG(exception))) {
				zval_ptr_dtor_nogc(expr_ptr);
				HANDLE_EXCEPTION();
			}
			str = ZSTR_EMPTY_ALLOC();
			goto str_index;
		} else if (Z_TYPE_P(offset) == IS_DOUBLE) {
			hval = zend_dval_to_lval_safe(Z_DVAL_P(offset));
			goto num_index;
		} else if (Z_TYPE_P(offset) == IS_FALSE) {
			hval = 0;
			goto num_index;
		} else if (Z_TYPE_P(offset) == IS_TRUE) {
			hval = 1;
			goto num_index;
		} else if (Z_TYPE_P(offset) == IS_RESOURCE) {
			zend_use_resource_as_offset(offset);
			hval = Z_RES_HANDLE_P(offset);
			goto num_index;
		} else if (IS_CONST == IS_CV && Z_TYPE_P(offset) == IS_UNDEF) {
			ZVAL_UNDEFINED_OP2();
			str = ZSTR_EMPTY_ALLOC();
			goto str_index;
		} else {
			zend_illegal_array_offset_access(offset);
			zval_ptr_dtor_nogc(expr_ptr);
		}


	} else {
		if (!zend_hash_next_index_insert(Z_ARRVAL_P(EX_VAR(opline->result.var)), expr_ptr)) {
			zend_cannot_add_element();
			zval_ptr_dtor_nogc(expr_ptr);
		}
	}
	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_INIT_ARRAY_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	zval *array;
	uint32_t size;
	USE_OPLINE

	SAVE_OPLINE();
	array = EX_VAR(opline->result.var);
	if (IS_CONST != IS_UNUSED) {
		size = opline->extended_value >> ZEND_ARRAY_SIZE_SHIFT;
		ZVAL_ARR(array, zend_new_array(size));
		/* Explicitly initialize array as not-packed if flag is set */
		if (opline->extended_value & ZEND_ARRAY_NOT_PACKED) {
			zend_hash_real_init_mixed(Z_ARRVAL_P(array));
		}
		ZEND_VM_TAIL_CALL(ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
	} else {
		ZVAL_ARR(array, zend_new_array(0));
		ZEND_VM_NEXT_OPCODE();
	}
}

static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *container;
	bool result;
	zend_ulong hval;
	zval *offset;

	SAVE_OPLINE();
	container = RT_CONSTANT(opline, opline->op1);
	offset = RT_CONSTANT(opline, opline->op2);

	if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
		HashTable *ht;
		zval *value;
		zend_string *str;

isset_dim_obj_array:
		ht = Z_ARRVAL_P(container);
isset_again:
		if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) {
			str = Z_STR_P(offset);
			if (IS_CONST != IS_CONST) {
				if (ZEND_HANDLE_NUMERIC(str, hval)) {
					goto num_index_prop;
				}
			}
			value = zend_hash_find_ex(ht, str, IS_CONST == IS_CONST);
		} else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
			hval = Z_LVAL_P(offset);
num_index_prop:
			value = zend_hash_index_find(ht, hval);
		} else if ((IS_CONST & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(offset))) {
			offset = Z_REFVAL_P(offset);
			goto isset_again;
		} else {
			value = zend_find_array_dim_slow(ht, offset EXECUTE_DATA_CC);
			if (UNEXPECTED(EG(exception))) {
				result = 0;
				goto isset_dim_obj_exit;
			}
		}

		if (!(opline->extended_value & ZEND_ISEMPTY)) {
			/* > IS_NULL means not IS_UNDEF and not IS_NULL */
			result = value != NULL && Z_TYPE_P(value) > IS_NULL &&
			    (!Z_ISREF_P(value) || Z_TYPE_P(Z_REFVAL_P(value)) != IS_NULL);

			if (IS_CONST & (IS_CONST|IS_CV)) {
				/* avoid exception check */


				ZEND_VM_SMART_BRANCH(result, 0);
			}
		} else {
			result = (value == NULL || !i_zend_is_true(value));
		}
		goto isset_dim_obj_exit;
	} else if ((IS_CONST & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(container))) {
		container = Z_REFVAL_P(container);
		if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
			goto isset_dim_obj_array;
		}
	}

	if (IS_CONST == IS_CONST && Z_EXTRA_P(offset) == ZEND_EXTRA_VALUE) {
		offset++;
	}
	if (!(opline->extended_value & ZEND_ISEMPTY)) {
		result = zend_isset_dim_slow(container, offset EXECUTE_DATA_CC);
	} else {
		result = zend_isempty_dim_slow(container, offset EXECUTE_DATA_CC);
	}

isset_dim_obj_exit:




	ZEND_VM_SMART_BRANCH(result, 1);
}

static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *container;
	int result;
	zval *offset;
	zend_string *name, *tmp_name;

	SAVE_OPLINE();
	container = RT_CONSTANT(opline, opline->op1);
	offset = RT_CONSTANT(opline, opline->op2);

	if (IS_CONST == IS_CONST ||
	    (IS_CONST != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
		if ((IS_CONST & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
			container = Z_REFVAL_P(container);
			if (UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT)) {
				result = (opline->extended_value & ZEND_ISEMPTY);
				goto isset_object_finish;
			}
		} else {
			result = (opline->extended_value & ZEND_ISEMPTY);
			goto isset_object_finish;
		}
	}

	if (IS_CONST == IS_CONST) {
		name = Z_STR_P(offset);
	} else {
		name = zval_try_get_tmp_string(offset, &tmp_name);
		if (UNEXPECTED(!name)) {
			result = 0;
			goto isset_object_finish;
		}
	}

	result =
		(opline->extended_value & ZEND_ISEMPTY) ^
		Z_OBJ_HT_P(container)->has_property(Z_OBJ_P(container), name, (opline->extended_value & ZEND_ISEMPTY), ((IS_CONST == IS_CONST) ? CACHE_ADDR(opline->extended_value & ~ZEND_ISEMPTY) : NULL));

	if (IS_CONST != IS_CONST) {
		zend_tmp_string_release(tmp_name);
	}

isset_object_finish:




	ZEND_VM_SMART_BRANCH(result, 1);
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_ARRAY_KEY_EXISTS_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE

	zval *key, *subject;
	HashTable *ht;
	bool result;

	SAVE_OPLINE();

	key = RT_CONSTANT(opline, opline->op1);
	subject = RT_CONSTANT(opline, opline->op2);

	if (EXPECTED(Z_TYPE_P(subject) == IS_ARRAY)) {
array_key_exists_array:
		ht = Z_ARRVAL_P(subject);
		result = zend_array_key_exists_fast(ht, key OPLINE_CC EXECUTE_DATA_CC);
	} else {
		if ((IS_CONST & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(subject))) {
			subject = Z_REFVAL_P(subject);
			if (EXPECTED(Z_TYPE_P(subject) == IS_ARRAY)) {
				goto array_key_exists_array;
			}
		}
		zend_array_key_exists_error(subject, key OPLINE_CC EXECUTE_DATA_CC);
		result = 0;
	}




	ZEND_VM_SMART_BRANCH(result, 1);
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_DECLARE_CLASS_DELAYED_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE

	zend_class_entry *ce = CACHED_PTR(opline->extended_value);
	if (ce == NULL) {
		zval *lcname = RT_CONSTANT(opline, opline->op1);
		zval *zv = zend_hash_find_known_hash(EG(class_table), Z_STR_P(lcname + 1));
		if (zv) {
			SAVE_OPLINE();
			ce = zend_bind_class_in_slot(zv, lcname, Z_STR_P(RT_CONSTANT(opline, opline->op2)));
			if (EG(exception)) {
				HANDLE_EXCEPTION();
			}
		}
		CACHE_PTR(opline->extended_value, ce);
	}
	ZEND_VM_NEXT_OPCODE();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_DECLARE_CONST_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *name;
	zval *val;
	zend_constant c;

	SAVE_OPLINE();
	name  = RT_CONSTANT(opline, opline->op1);
	val   = RT_CONSTANT(opline, opline->op2);

	ZVAL_COPY(&c.value, val);
	if (Z_OPT_CONSTANT(c.value)) {
		if (UNEXPECTED(zval_update_constant_ex(&c.value, EX(func)->op_array.scope) != SUCCESS)) {
			zval_ptr_dtor_nogc(&c.value);




			HANDLE_EXCEPTION();
		}
	}
	/* non persistent, case sensitive */
	ZEND_CONSTANT_SET_FLAGS(&c, 0, PHP_USER_CONSTANT);
	c.name = zend_string_copy(Z_STR_P(name));

	if (zend_register_constant(&c) == NULL) {
	}




	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_DECLARE_ATTRIBUTED_CONST_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *name;
	zval *val;
	zend_constant c, *registered;

	SAVE_OPLINE();
	name  = RT_CONSTANT(opline, opline->op1);
	val   = RT_CONSTANT(opline, opline->op2);

	ZVAL_COPY(&c.value, val);
	if (Z_OPT_CONSTANT(c.value)) {
		if (UNEXPECTED(zval_update_constant_ex(&c.value, EX(func)->op_array.scope) != SUCCESS)) {
			zval_ptr_dtor_nogc(&c.value);




			HANDLE_EXCEPTION();
		}
	}
	/* non persistent, case sensitive */
	ZEND_CONSTANT_SET_FLAGS(&c, 0, PHP_USER_CONSTANT);
	c.name = zend_string_copy(Z_STR_P(name));

	registered = zend_register_constant(&c);
	if (registered == NULL) {




		/* two opcodes used, second one is the data with attributes */
		ZEND_VM_NEXT_OPCODE_EX(1, 2);
	}

	HashTable *attributes = Z_PTR_P(get_op_data_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1));
	ZEND_ASSERT(attributes != NULL);
	zend_constant_add_attributes(registered, attributes);




	/* two opcodes used, second one is the data with attributes */
	ZEND_VM_NEXT_OPCODE_EX(1, 2);
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_YIELD_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE

	zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C);

	SAVE_OPLINE();
	if (UNEXPECTED(generator->flags & ZEND_GENERATOR_FORCED_CLOSE)) {
		ZEND_VM_TAIL_CALL(zend_yield_in_closed_generator_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
	}

	/* Destroy the previously yielded value */
	zval_ptr_dtor(&generator->value);

	/* Destroy the previously yielded key */
	zval_ptr_dtor(&generator->key);

	/* Set the new yielded value */
	if (IS_CONST != IS_UNUSED) {
		if (UNEXPECTED(EX(func)->op_array.fn_flags & ZEND_ACC_RETURN_REFERENCE)) {
			/* Constants and temporary variables aren't yieldable by reference,
			 * but we still allow them with a notice. */
			if (IS_CONST & (IS_CONST|IS_TMP_VAR)) {
				zval *value;

				zend_error(E_NOTICE, "Only variable references should be yielded by reference");

				value = RT_CONSTANT(opline, opline->op1);
				ZVAL_COPY_VALUE(&generator->value, value);
				if (IS_CONST == IS_CONST) {
					if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
						Z_ADDREF(generator->value);
					}
				}
			} else {
				zval *value_ptr = zend_get_bad_ptr();

				/* If a function call result is yielded and the function did
				 * not return by reference we throw a notice. */
				do {
					if (IS_CONST == IS_VAR) {
						ZEND_ASSERT(value_ptr != &EG(uninitialized_zval));
						if (opline->extended_value == ZEND_RETURNS_FUNCTION
						 && !Z_ISREF_P(value_ptr)) {
							zend_error(E_NOTICE, "Only variable references should be yielded by reference");
							ZVAL_COPY(&generator->value, value_ptr);
							break;
						}
					}
					if (Z_ISREF_P(value_ptr)) {
						Z_ADDREF_P(value_ptr);
					} else {
						ZVAL_MAKE_REF_EX(value_ptr, 2);
					}
					ZVAL_REF(&generator->value, Z_REF_P(value_ptr));
				} while (0);


			}
		} else {
			zval *value = RT_CONSTANT(opline, opline->op1);

			/* Consts, temporary variables and references need copying */
			if (IS_CONST == IS_CONST) {
				ZVAL_COPY_VALUE(&generator->value, value);
				if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
					Z_ADDREF(generator->value);
				}
			} else if (IS_CONST == IS_TMP_VAR) {
				ZVAL_COPY_VALUE(&generator->value, value);
			} else if ((IS_CONST & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) {
				ZVAL_COPY(&generator->value, Z_REFVAL_P(value));


			} else {
				ZVAL_COPY_VALUE(&generator->value, value);
				if (IS_CONST == IS_CV) {
					if (Z_OPT_REFCOUNTED_P(value)) Z_ADDREF_P(value);
				}
			}
		}
	} else {
		/* If no value was specified yield null */
		ZVAL_NULL(&generator->value);
	}

	/* Set the new yielded key */
	if (IS_CONST != IS_UNUSED) {
		zval *key = RT_CONSTANT(opline, opline->op2);
		if ((IS_CONST & (IS_CV|IS_VAR)) && UNEXPECTED(Z_TYPE_P(key) == IS_REFERENCE)) {
			key = Z_REFVAL_P(key);
		}
		ZVAL_COPY(&generator->key, key);


		if (Z_TYPE(generator->key) == IS_LONG
		    && Z_LVAL(generator->key) > generator->largest_used_integer_key
		) {
			generator->largest_used_integer_key = Z_LVAL(generator->key);
		}
	} else {
		/* If no key was specified we use auto-increment keys */
		generator->largest_used_integer_key++;
		ZVAL_LONG(&generator->key, generator->largest_used_integer_key);
	}

	if (RETURN_VALUE_USED(opline)) {
		/* If the return value of yield is used set the send
		 * target and initialize it to NULL */
		generator->send_target = EX_VAR(opline->result.var);
		ZVAL_NULL(generator->send_target);
	} else {
		generator->send_target = NULL;
	}

	/* The GOTO VM uses a local opline variable. We need to set the opline
	 * variable in execute_data so we don't resume at an old position. */
	SAVE_OPLINE();

	ZEND_VM_RETURN();
}

static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_SWITCH_LONG_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op, *jump_zv;
	HashTable *jumptable;

	op = RT_CONSTANT(opline, opline->op1);

	if (Z_TYPE_P(op) != IS_LONG) {
		ZVAL_DEREF(op);
		if (Z_TYPE_P(op) != IS_LONG) {
			/* Wrong type, fall back to ZEND_CASE chain */
			ZEND_VM_NEXT_OPCODE();
		}
	}

	jumptable = Z_ARRVAL_P(RT_CONSTANT(opline, opline->op2));
	jump_zv = zend_hash_index_find(jumptable, Z_LVAL_P(op));
	if (jump_zv != NULL) {
		ZEND_VM_SET_RELATIVE_OPCODE(opline, Z_LVAL_P(jump_zv));
		ZEND_VM_CONTINUE();
	} else {
		/* default */
		ZEND_VM_SET_RELATIVE_OPCODE(opline, opline->extended_value);
		ZEND_VM_CONTINUE();
	}
}

static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_SWITCH_STRING_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op, *jump_zv;
	HashTable *jumptable;

	op = RT_CONSTANT(opline, opline->op1);

	if (Z_TYPE_P(op) != IS_STRING) {
		if (IS_CONST == IS_CONST) {
			/* Wrong type, fall back to ZEND_CASE chain */
			ZEND_VM_NEXT_OPCODE();
		} else {
			ZVAL_DEREF(op);
			if (Z_TYPE_P(op) != IS_STRING) {
				/* Wrong type, fall back to ZEND_CASE chain */
				ZEND_VM_NEXT_OPCODE();
			}
		}
	}

	jumptable = Z_ARRVAL_P(RT_CONSTANT(opline, opline->op2));
	jump_zv = zend_hash_find_ex(jumptable, Z_STR_P(op), IS_CONST == IS_CONST);
	if (jump_zv != NULL) {
		ZEND_VM_SET_RELATIVE_OPCODE(opline, Z_LVAL_P(jump_zv));
		ZEND_VM_CONTINUE();
	} else {
		/* default */
		ZEND_VM_SET_RELATIVE_OPCODE(opline, opline->extended_value);
		ZEND_VM_CONTINUE();
	}
}

static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_MATCH_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op, *jump_zv;
	HashTable *jumptable;

	op = RT_CONSTANT(opline, opline->op1);
	jumptable = Z_ARRVAL_P(RT_CONSTANT(opline, opline->op2));

match_try_again:
	if (Z_TYPE_P(op) == IS_LONG) {
		jump_zv = zend_hash_index_find(jumptable, Z_LVAL_P(op));
	} else if (Z_TYPE_P(op) == IS_STRING) {
		jump_zv = zend_hash_find_ex(jumptable, Z_STR_P(op), IS_CONST == IS_CONST);
	} else if (Z_TYPE_P(op) == IS_REFERENCE) {
		op = Z_REFVAL_P(op);
		goto match_try_again;
	} else {
		if (UNEXPECTED((IS_CONST & IS_CV) && Z_TYPE_P(op) == IS_UNDEF)) {
			SAVE_OPLINE();
			op = ZVAL_UNDEFINED_OP1();
			if (UNEXPECTED(EG(exception))) {
				HANDLE_EXCEPTION();
			}
			goto match_try_again;
		}

		goto default_branch;
	}

	if (jump_zv != NULL) {
		ZEND_VM_SET_RELATIVE_OPCODE(opline, Z_LVAL_P(jump_zv));
		ZEND_VM_CONTINUE();
	} else {
default_branch:
		/* default */
		ZEND_VM_SET_RELATIVE_OPCODE(opline, opline->extended_value);
		ZEND_VM_CONTINUE();
	}
}

static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_IN_ARRAY_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1;
	HashTable *ht = Z_ARRVAL_P(RT_CONSTANT(opline, opline->op2));
	zval *result;

	op1 = RT_CONSTANT(opline, opline->op1);
	if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
		result = zend_hash_find_ex(ht, Z_STR_P(op1), IS_CONST == IS_CONST);
		if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
			zval_ptr_dtor_str(op1);
		}
		ZEND_VM_SMART_BRANCH(result, 0);
	}

	if (opline->extended_value) {
		if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
			result = zend_hash_index_find(ht, Z_LVAL_P(op1));
			ZEND_VM_SMART_BRANCH(result, 0);
		}
		SAVE_OPLINE();
		if ((IS_CONST & (IS_VAR|IS_CV)) && Z_TYPE_P(op1) == IS_REFERENCE) {
			op1 = Z_REFVAL_P(op1);
			if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
				result = zend_hash_find(ht, Z_STR_P(op1));


				ZEND_VM_SMART_BRANCH(result, 0);
			} else if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
				result = zend_hash_index_find(ht, Z_LVAL_P(op1));


				ZEND_VM_SMART_BRANCH(result, 0);
			}
		} else if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
			ZVAL_UNDEFINED_OP1();
		}
	} else if (Z_TYPE_P(op1) <= IS_FALSE) {
		if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
			SAVE_OPLINE();
			ZVAL_UNDEFINED_OP1();
			if (UNEXPECTED(EG(exception) != NULL)) {
				HANDLE_EXCEPTION();
			}
		}
		result = zend_hash_find_known_hash(ht, ZSTR_EMPTY_ALLOC());
		ZEND_VM_SMART_BRANCH(result, 0);
	} else {
		zend_string *key;
		zval key_tmp;

		if ((IS_CONST & (IS_VAR|IS_CV)) && Z_TYPE_P(op1) == IS_REFERENCE) {
			op1 = Z_REFVAL_P(op1);
			if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
				result = zend_hash_find(ht, Z_STR_P(op1));


				ZEND_VM_SMART_BRANCH(result, 0);
			}
		}

		SAVE_OPLINE();
		ZEND_HASH_MAP_FOREACH_STR_KEY(ht, key) {
			ZVAL_STR(&key_tmp, key);
			if (zend_compare(op1, &key_tmp) == 0) {


				ZEND_VM_SMART_BRANCH(1, 1);
			}
		} ZEND_HASH_FOREACH_END();
	}


	ZEND_VM_SMART_BRANCH(0, 1);
}

static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_ADD_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2, *result;
	double d1, d2;

	op1 = RT_CONSTANT(opline, opline->op1);
	op2 = EX_VAR(opline->op2.var);
	if (1 && IS_CONST == IS_CONST && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST) {
		/* pass */
	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
			result = EX_VAR(opline->result.var);
			fast_long_add_function(result, op1, op2);
			ZEND_VM_NEXT_OPCODE();
		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
			d1 = (double)Z_LVAL_P(op1);
			d2 = Z_DVAL_P(op2);
			goto add_double;
		}
	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
			d1 = Z_DVAL_P(op1);
			d2 = Z_DVAL_P(op2);
add_double:
			result = EX_VAR(opline->result.var);
			ZVAL_DOUBLE(result, d1 + d2);
			ZEND_VM_NEXT_OPCODE();
		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
			d1 = Z_DVAL_P(op1);
			d2 = (double)Z_LVAL_P(op2);
			goto add_double;
		}
	}

	ZEND_VM_DISPATCH_TO_HELPER(zend_add_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_EX op1, op2));
}

static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_SUB_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2, *result;
	double d1, d2;

	op1 = RT_CONSTANT(opline, opline->op1);
	op2 = EX_VAR(opline->op2.var);
	if (1 && IS_CONST == IS_CONST && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST) {
		/* pass */
	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
			result = EX_VAR(opline->result.var);
			fast_long_sub_function(result, op1, op2);
			ZEND_VM_NEXT_OPCODE();
		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
			d1 = (double)Z_LVAL_P(op1);
			d2 = Z_DVAL_P(op2);
			goto sub_double;
		}
	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
			d1 = Z_DVAL_P(op1);
			d2 = Z_DVAL_P(op2);
sub_double:
			result = EX_VAR(opline->result.var);
			ZVAL_DOUBLE(result, d1 - d2);
			ZEND_VM_NEXT_OPCODE();
		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
			d1 = Z_DVAL_P(op1);
			d2 = (double)Z_LVAL_P(op2);
			goto sub_double;
		}
	}

	ZEND_VM_DISPATCH_TO_HELPER(zend_sub_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_EX op1, op2));
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_MOD_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2, *result;

	op1 = RT_CONSTANT(opline, opline->op1);
	op2 = EX_VAR(opline->op2.var);
	if (1 && IS_CONST == IS_CONST && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST) {
		/* pass */
	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
			result = EX_VAR(opline->result.var);
			if (UNEXPECTED(Z_LVAL_P(op2) == 0)) {
				ZEND_VM_TAIL_CALL(zend_mod_by_zero_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
			} else if (UNEXPECTED(Z_LVAL_P(op2) == -1)) {
				/* Prevent overflow error/crash if op1==ZEND_LONG_MIN */
				ZVAL_LONG(result, 0);
			} else {
				ZVAL_LONG(result, Z_LVAL_P(op1) % Z_LVAL_P(op2));
			}
			ZEND_VM_NEXT_OPCODE();
		}
	}

	ZEND_VM_DISPATCH_TO_HELPER(zend_mod_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_EX op1, op2));
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_SL_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;

	op1 = RT_CONSTANT(opline, opline->op1);
	op2 = EX_VAR(opline->op2.var);
	if (1 && IS_CONST == IS_CONST && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST) {
		/* pass */
	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)
			&& EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)
			&& EXPECTED((zend_ulong)Z_LVAL_P(op2) < SIZEOF_ZEND_LONG * 8)) {
		/* Perform shift on unsigned numbers to get well-defined wrap behavior. */
		ZVAL_LONG(EX_VAR(opline->result.var),
			(zend_long) ((zend_ulong) Z_LVAL_P(op1) << Z_LVAL_P(op2)));
		ZEND_VM_NEXT_OPCODE();
	}

	ZEND_VM_DISPATCH_TO_HELPER(zend_shift_left_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_EX op1, op2));
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_SR_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;

	op1 = RT_CONSTANT(opline, opline->op1);
	op2 = EX_VAR(opline->op2.var);
	if (1 && IS_CONST == IS_CONST && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST) {
		/* pass */
	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)
			&& EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)
			&& EXPECTED((zend_ulong)Z_LVAL_P(op2) < SIZEOF_ZEND_LONG * 8)) {
		ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(op1) >> Z_LVAL_P(op2));
		ZEND_VM_NEXT_OPCODE();
	}

	ZEND_VM_DISPATCH_TO_HELPER(zend_shift_right_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_EX op1, op2));
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_IS_SMALLER_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;
	double d1, d2;

	op1 = RT_CONSTANT(opline, opline->op1);
	op2 = EX_VAR(opline->op2.var);
	if (1 && IS_CONST == IS_CONST && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST) {
		/* pass */
	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
			if (EXPECTED(Z_LVAL_P(op1) < Z_LVAL_P(op2))) {
is_smaller_true:
				ZEND_VM_SMART_BRANCH_TRUE_NONE();
			} else {
is_smaller_false:
				ZEND_VM_SMART_BRANCH_FALSE_NONE();
			}
		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
			d1 = (double)Z_LVAL_P(op1);
			d2 = Z_DVAL_P(op2);
			goto is_smaller_double;
		}
	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
			d1 = Z_DVAL_P(op1);
			d2 = Z_DVAL_P(op2);
is_smaller_double:
			if (d1 < d2) {
				goto is_smaller_true;
			} else {
				goto is_smaller_false;
			}
		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
			d1 = Z_DVAL_P(op1);
			d2 = (double)Z_LVAL_P(op2);
			goto is_smaller_double;
		}
	}
	ZEND_VM_DISPATCH_TO_HELPER(zend_is_smaller_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_EX op1, op2));
}

static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_IS_SMALLER_SPEC_CONST_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;
	double d1, d2;

	op1 = RT_CONSTANT(opline, opline->op1);
	op2 = EX_VAR(opline->op2.var);
	if (1 && IS_CONST == IS_CONST && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST) {
		/* pass */
	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
			if (EXPECTED(Z_LVAL_P(op1) < Z_LVAL_P(op2))) {
is_smaller_true:
				ZEND_VM_SMART_BRANCH_TRUE_JMPZ();
			} else {
is_smaller_false:
				ZEND_VM_SMART_BRANCH_FALSE_JMPZ();
			}
		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
			d1 = (double)Z_LVAL_P(op1);
			d2 = Z_DVAL_P(op2);
			goto is_smaller_double;
		}
	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
			d1 = Z_DVAL_P(op1);
			d2 = Z_DVAL_P(op2);
is_smaller_double:
			if (d1 < d2) {
				goto is_smaller_true;
			} else {
				goto is_smaller_false;
			}
		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
			d1 = Z_DVAL_P(op1);
			d2 = (double)Z_LVAL_P(op2);
			goto is_smaller_double;
		}
	}
	ZEND_VM_DISPATCH_TO_HELPER(zend_is_smaller_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_EX op1, op2));
}

static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_IS_SMALLER_SPEC_CONST_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;
	double d1, d2;

	op1 = RT_CONSTANT(opline, opline->op1);
	op2 = EX_VAR(opline->op2.var);
	if (1 && IS_CONST == IS_CONST && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST) {
		/* pass */
	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
			if (EXPECTED(Z_LVAL_P(op1) < Z_LVAL_P(op2))) {
is_smaller_true:
				ZEND_VM_SMART_BRANCH_TRUE_JMPNZ();
			} else {
is_smaller_false:
				ZEND_VM_SMART_BRANCH_FALSE_JMPNZ();
			}
		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
			d1 = (double)Z_LVAL_P(op1);
			d2 = Z_DVAL_P(op2);
			goto is_smaller_double;
		}
	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
			d1 = Z_DVAL_P(op1);
			d2 = Z_DVAL_P(op2);
is_smaller_double:
			if (d1 < d2) {
				goto is_smaller_true;
			} else {
				goto is_smaller_false;
			}
		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
			d1 = Z_DVAL_P(op1);
			d2 = (double)Z_LVAL_P(op2);
			goto is_smaller_double;
		}
	}
	ZEND_VM_DISPATCH_TO_HELPER(zend_is_smaller_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_EX op1, op2));
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;
	double d1, d2;

	op1 = RT_CONSTANT(opline, opline->op1);
	op2 = EX_VAR(opline->op2.var);
	if (1 && IS_CONST == IS_CONST && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST) {
		/* pass */
	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
			if (EXPECTED(Z_LVAL_P(op1) <= Z_LVAL_P(op2))) {
is_smaller_or_equal_true:
				ZEND_VM_SMART_BRANCH_TRUE_NONE();
				ZVAL_TRUE(EX_VAR(opline->result.var));
				ZEND_VM_NEXT_OPCODE();
			} else {
is_smaller_or_equal_false:
				ZEND_VM_SMART_BRANCH_FALSE_NONE();
				ZVAL_FALSE(EX_VAR(opline->result.var));
				ZEND_VM_NEXT_OPCODE();
			}
		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
			d1 = (double)Z_LVAL_P(op1);
			d2 = Z_DVAL_P(op2);
			goto is_smaller_or_equal_double;
		}
	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
			d1 = Z_DVAL_P(op1);
			d2 = Z_DVAL_P(op2);
is_smaller_or_equal_double:
			if (d1 <= d2) {
				goto is_smaller_or_equal_true;
			} else {
				goto is_smaller_or_equal_false;
			}
		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
			d1 = Z_DVAL_P(op1);
			d2 = (double)Z_LVAL_P(op2);
			goto is_smaller_or_equal_double;
		}
	}
	ZEND_VM_DISPATCH_TO_HELPER(zend_is_smaller_or_equal_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_EX op1, op2));
}

static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;
	double d1, d2;

	op1 = RT_CONSTANT(opline, opline->op1);
	op2 = EX_VAR(opline->op2.var);
	if (1 && IS_CONST == IS_CONST && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST) {
		/* pass */
	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
			if (EXPECTED(Z_LVAL_P(op1) <= Z_LVAL_P(op2))) {
is_smaller_or_equal_true:
				ZEND_VM_SMART_BRANCH_TRUE_JMPZ();
				ZVAL_TRUE(EX_VAR(opline->result.var));
				ZEND_VM_NEXT_OPCODE();
			} else {
is_smaller_or_equal_false:
				ZEND_VM_SMART_BRANCH_FALSE_JMPZ();
				ZVAL_FALSE(EX_VAR(opline->result.var));
				ZEND_VM_NEXT_OPCODE();
			}
		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
			d1 = (double)Z_LVAL_P(op1);
			d2 = Z_DVAL_P(op2);
			goto is_smaller_or_equal_double;
		}
	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
			d1 = Z_DVAL_P(op1);
			d2 = Z_DVAL_P(op2);
is_smaller_or_equal_double:
			if (d1 <= d2) {
				goto is_smaller_or_equal_true;
			} else {
				goto is_smaller_or_equal_false;
			}
		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
			d1 = Z_DVAL_P(op1);
			d2 = (double)Z_LVAL_P(op2);
			goto is_smaller_or_equal_double;
		}
	}
	ZEND_VM_DISPATCH_TO_HELPER(zend_is_smaller_or_equal_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_EX op1, op2));
}

static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;
	double d1, d2;

	op1 = RT_CONSTANT(opline, opline->op1);
	op2 = EX_VAR(opline->op2.var);
	if (1 && IS_CONST == IS_CONST && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST) {
		/* pass */
	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
			if (EXPECTED(Z_LVAL_P(op1) <= Z_LVAL_P(op2))) {
is_smaller_or_equal_true:
				ZEND_VM_SMART_BRANCH_TRUE_JMPNZ();
				ZVAL_TRUE(EX_VAR(opline->result.var));
				ZEND_VM_NEXT_OPCODE();
			} else {
is_smaller_or_equal_false:
				ZEND_VM_SMART_BRANCH_FALSE_JMPNZ();
				ZVAL_FALSE(EX_VAR(opline->result.var));
				ZEND_VM_NEXT_OPCODE();
			}
		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
			d1 = (double)Z_LVAL_P(op1);
			d2 = Z_DVAL_P(op2);
			goto is_smaller_or_equal_double;
		}
	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
			d1 = Z_DVAL_P(op1);
			d2 = Z_DVAL_P(op2);
is_smaller_or_equal_double:
			if (d1 <= d2) {
				goto is_smaller_or_equal_true;
			} else {
				goto is_smaller_or_equal_false;
			}
		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
			d1 = Z_DVAL_P(op1);
			d2 = (double)Z_LVAL_P(op2);
			goto is_smaller_or_equal_double;
		}
	}
	ZEND_VM_DISPATCH_TO_HELPER(zend_is_smaller_or_equal_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_EX op1, op2));
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_FETCH_CLASS_CONSTANT_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	zend_class_entry *ce, *scope;
	zend_class_constant *c;
	zval *value, *zv, *constant_zv;
	zend_string *constant_name;
	USE_OPLINE

	SAVE_OPLINE();

	do {
		if (IS_CONST == IS_CONST && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST) {
			if (EXPECTED(CACHED_PTR(opline->extended_value + sizeof(void*)))) {
				value = CACHED_PTR(opline->extended_value + sizeof(void*));
				break;
			}
		}
		if (IS_CONST == IS_CONST) {
			if (EXPECTED(CACHED_PTR(opline->extended_value))) {
				ce = CACHED_PTR(opline->extended_value);
			} else {
				ce = zend_fetch_class_by_name(Z_STR_P(RT_CONSTANT(opline, opline->op1)), Z_STR_P(RT_CONSTANT(opline, opline->op1) + 1), ZEND_FETCH_CLASS_DEFAULT | ZEND_FETCH_CLASS_EXCEPTION);
				if (UNEXPECTED(ce == NULL)) {
					ZVAL_UNDEF(EX_VAR(opline->result.var));
					FREE_OP(opline->op2_type, opline->op2.var);
					HANDLE_EXCEPTION();
				}
				CACHE_PTR(opline->extended_value, ce);
			}
		} else if (IS_CONST == IS_UNUSED) {
			ce = zend_fetch_class(NULL, opline->op1.num);
			if (UNEXPECTED(ce == NULL)) {
				ZVAL_UNDEF(EX_VAR(opline->result.var));
				FREE_OP(opline->op2_type, opline->op2.var);
				HANDLE_EXCEPTION();
			}
		} else {
			ce = Z_CE_P(EX_VAR(opline->op1.var));
		}
		if (IS_CONST != IS_CONST
			&& (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST
			&& EXPECTED(CACHED_PTR(opline->extended_value) == ce)) {
			value = CACHED_PTR(opline->extended_value + sizeof(void*));
			break;
		}

		constant_zv = _get_zval_ptr_tmpvarcv(opline->op2_type, opline->op2, BP_VAR_R EXECUTE_DATA_CC);
		if (UNEXPECTED(Z_TYPE_P(constant_zv) != IS_STRING)) {
			zend_invalid_class_constant_type_error(Z_TYPE_P(constant_zv));
			ZVAL_UNDEF(EX_VAR(opline->result.var));
			FREE_OP(opline->op2_type, opline->op2.var);
			HANDLE_EXCEPTION();
		}
		constant_name = Z_STR_P(constant_zv);
		/* Magic 'class' for constant OP2 is caught at compile-time */
		if ((IS_TMP_VAR|IS_VAR|IS_CV) != IS_CONST && UNEXPECTED(zend_string_equals_literal_ci(constant_name, "class"))) {
			ZVAL_STR_COPY(EX_VAR(opline->result.var), ce->name);
			FREE_OP(opline->op2_type, opline->op2.var);
			ZEND_VM_NEXT_OPCODE();
		}
		zv = (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST
			? zend_hash_find_known_hash(CE_CONSTANTS_TABLE(ce), constant_name)
			: zend_hash_find(CE_CONSTANTS_TABLE(ce), constant_name);

		if (EXPECTED(zv != NULL)) {
			c = Z_PTR_P(zv);
			scope = EX(func)->op_array.scope;
			if (!zend_verify_const_access(c, scope)) {
				zend_throw_error(NULL, "Cannot access %s constant %s::%s", zend_visibility_string(ZEND_CLASS_CONST_FLAGS(c)), ZSTR_VAL(ce->name), ZSTR_VAL(constant_name));
				ZVAL_UNDEF(EX_VAR(opline->result.var));
				FREE_OP(opline->op2_type, opline->op2.var);
				HANDLE_EXCEPTION();
			}

			if (ce->ce_flags & ZEND_ACC_TRAIT) {
				zend_throw_error(NULL, "Cannot access trait constant %s::%s directly", ZSTR_VAL(ce->name), ZSTR_VAL(constant_name));
				ZVAL_UNDEF(EX_VAR(opline->result.var));
				FREE_OP(opline->op2_type, opline->op2.var);
				HANDLE_EXCEPTION();
			}

			bool is_constant_deprecated = ZEND_CLASS_CONST_FLAGS(c) & ZEND_ACC_DEPRECATED;
			if (UNEXPECTED(is_constant_deprecated) && !CONST_IS_RECURSIVE(c)) {
				if (c->ce->type == ZEND_USER_CLASS) {
					/* Recursion protection only applied to user constants, GH-18463 */
					CONST_PROTECT_RECURSION(c);
				}
				zend_deprecated_class_constant(c, constant_name);
				if (c->ce->type == ZEND_USER_CLASS) {
					CONST_UNPROTECT_RECURSION(c);
				}

				if (EG(exception)) {
					ZVAL_UNDEF(EX_VAR(opline->result.var));
					FREE_OP(opline->op2_type, opline->op2.var);
					HANDLE_EXCEPTION();
				}
			}

			value = &c->value;
			// Enums require loading of all class constants to build the backed enum table
			if (ce->ce_flags & ZEND_ACC_ENUM && ce->enum_backing_type != IS_UNDEF && ce->type == ZEND_USER_CLASS && !(ce->ce_flags & ZEND_ACC_CONSTANTS_UPDATED)) {
				if (UNEXPECTED(zend_update_class_constants(ce) == FAILURE)) {
					ZVAL_UNDEF(EX_VAR(opline->result.var));
					FREE_OP(opline->op2_type, opline->op2.var);
					HANDLE_EXCEPTION();
				}
			}
			if (Z_TYPE_P(value) == IS_CONSTANT_AST) {
				if (UNEXPECTED(zend_update_class_constant(c, constant_name, c->ce) != SUCCESS)) {
					ZVAL_UNDEF(EX_VAR(opline->result.var));
					FREE_OP(opline->op2_type, opline->op2.var);
					HANDLE_EXCEPTION();
				}
			}
			if ((IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST && !is_constant_deprecated) {
				CACHE_POLYMORPHIC_PTR(opline->extended_value, ce, value);
			}
		} else {
			zend_throw_error(NULL, "Undefined constant %s::%s",
				ZSTR_VAL(ce->name), ZSTR_VAL(constant_name));
			ZVAL_UNDEF(EX_VAR(opline->result.var));
			FREE_OP(opline->op2_type, opline->op2.var);
			HANDLE_EXCEPTION();
		}
	} while (0);

	ZVAL_COPY_OR_DUP(EX_VAR(opline->result.var), value);

	FREE_OP(opline->op2_type, opline->op2.var);
	ZEND_VM_NEXT_OPCODE();
}

static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_SUB_LONG_NO_OVERFLOW_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2, *result;

	op1 = RT_CONSTANT(opline, opline->op1);
	op2 = EX_VAR(opline->op2.var);
	result = EX_VAR(opline->result.var);
	ZVAL_LONG(result, Z_LVAL_P(op1) - Z_LVAL_P(op2));
	ZEND_VM_NEXT_OPCODE();
}

static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_SUB_LONG_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2, *result;

	op1 = RT_CONSTANT(opline, opline->op1);
	op2 = EX_VAR(opline->op2.var);
	result = EX_VAR(opline->result.var);
	fast_long_sub_function(result, op1, op2);
	ZEND_VM_NEXT_OPCODE();
}

static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_SUB_DOUBLE_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2, *result;

	op1 = RT_CONSTANT(opline, opline->op1);
	op2 = EX_VAR(opline->op2.var);
	result = EX_VAR(opline->result.var);
	ZVAL_DOUBLE(result, Z_DVAL_P(op1) - Z_DVAL_P(op2));
	ZEND_VM_NEXT_OPCODE();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;
	bool result;

	op1 = RT_CONSTANT(opline, opline->op1);
	op2 = EX_VAR(opline->op2.var);
	result = (Z_LVAL_P(op1) < Z_LVAL_P(op2));
	ZEND_VM_SMART_BRANCH_NONE(result, 0);
}

static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;
	bool result;

	op1 = RT_CONSTANT(opline, opline->op1);
	op2 = EX_VAR(opline->op2.var);
	result = (Z_LVAL_P(op1) < Z_LVAL_P(op2));
	ZEND_VM_SMART_BRANCH_JMPZ(result, 0);
}

static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;
	bool result;

	op1 = RT_CONSTANT(opline, opline->op1);
	op2 = EX_VAR(opline->op2.var);
	result = (Z_LVAL_P(op1) < Z_LVAL_P(op2));
	ZEND_VM_SMART_BRANCH_JMPNZ(result, 0);
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;
	bool result;

	op1 = RT_CONSTANT(opline, opline->op1);
	op2 = EX_VAR(opline->op2.var);
	result = (Z_DVAL_P(op1) < Z_DVAL_P(op2));
	ZEND_VM_SMART_BRANCH_NONE(result, 0);
}

static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;
	bool result;

	op1 = RT_CONSTANT(opline, opline->op1);
	op2 = EX_VAR(opline->op2.var);
	result = (Z_DVAL_P(op1) < Z_DVAL_P(op2));
	ZEND_VM_SMART_BRANCH_JMPZ(result, 0);
}

static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;
	bool result;

	op1 = RT_CONSTANT(opline, opline->op1);
	op2 = EX_VAR(opline->op2.var);
	result = (Z_DVAL_P(op1) < Z_DVAL_P(op2));
	ZEND_VM_SMART_BRANCH_JMPNZ(result, 0);
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;
	bool result;

	op1 = RT_CONSTANT(opline, opline->op1);
	op2 = EX_VAR(opline->op2.var);
	result = (Z_LVAL_P(op1) <= Z_LVAL_P(op2));
	ZEND_VM_SMART_BRANCH_NONE(result, 0);
}

static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;
	bool result;

	op1 = RT_CONSTANT(opline, opline->op1);
	op2 = EX_VAR(opline->op2.var);
	result = (Z_LVAL_P(op1) <= Z_LVAL_P(op2));
	ZEND_VM_SMART_BRANCH_JMPZ(result, 0);
}

static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;
	bool result;

	op1 = RT_CONSTANT(opline, opline->op1);
	op2 = EX_VAR(opline->op2.var);
	result = (Z_LVAL_P(op1) <= Z_LVAL_P(op2));
	ZEND_VM_SMART_BRANCH_JMPNZ(result, 0);
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;
	bool result;

	op1 = RT_CONSTANT(opline, opline->op1);
	op2 = EX_VAR(opline->op2.var);
	result = (Z_DVAL_P(op1) <= Z_DVAL_P(op2));
	ZEND_VM_SMART_BRANCH_NONE(result, 0);
}

static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;
	bool result;

	op1 = RT_CONSTANT(opline, opline->op1);
	op2 = EX_VAR(opline->op2.var);
	result = (Z_DVAL_P(op1) <= Z_DVAL_P(op2));
	ZEND_VM_SMART_BRANCH_JMPZ(result, 0);
}

static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;
	bool result;

	op1 = RT_CONSTANT(opline, opline->op1);
	op2 = EX_VAR(opline->op2.var);
	result = (Z_DVAL_P(op1) <= Z_DVAL_P(op2));
	ZEND_VM_SMART_BRANCH_JMPNZ(result, 0);
}

static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_FETCH_DIM_R_INDEX_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *container, *dim, *value;
	zend_long offset;
	HashTable *ht;

	container = RT_CONSTANT(opline, opline->op1);
	dim = EX_VAR(opline->op2.var);
	if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
fetch_dim_r_index_array:
		if (EXPECTED(Z_TYPE_P(dim) == IS_LONG)) {
			offset = Z_LVAL_P(dim);
		} else {
			SAVE_OPLINE();
			zend_fetch_dimension_address_read_R(container, dim, (IS_TMP_VAR|IS_VAR|IS_CV) OPLINE_CC EXECUTE_DATA_CC);


			ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
		}
		ht = Z_ARRVAL_P(container);
		ZEND_HASH_INDEX_FIND(ht, offset, value, fetch_dim_r_index_undef);
		ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
		if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
			SAVE_OPLINE();


			ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
		} else {
			ZEND_VM_NEXT_OPCODE();
		}
	} else if (IS_CONST != IS_CONST && EXPECTED(Z_TYPE_P(container) == IS_REFERENCE)) {
		container = Z_REFVAL_P(container);
		if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
			goto fetch_dim_r_index_array;
		} else {
			goto fetch_dim_r_index_slow;
		}
	} else {
fetch_dim_r_index_slow:
		SAVE_OPLINE();
		if ((IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
			dim++;
		}
		zend_fetch_dimension_address_read_R_slow(container, dim OPLINE_CC EXECUTE_DATA_CC);


		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
	}

fetch_dim_r_index_undef:
	ZVAL_NULL(EX_VAR(opline->result.var));
	SAVE_OPLINE();
	zend_undefined_offset(offset);


	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_DIV_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;

	SAVE_OPLINE();
	op1 = RT_CONSTANT(opline, opline->op1);
	op2 = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
	div_function(EX_VAR(opline->result.var), op1, op2);


	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_POW_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;

	SAVE_OPLINE();
	op1 = RT_CONSTANT(opline, opline->op1);
	op2 = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
	pow_function(EX_VAR(opline->result.var), op1, op2);


	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_CONCAT_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;

	op1 = RT_CONSTANT(opline, opline->op1);
	op2 = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);

	if ((IS_CONST == IS_CONST || EXPECTED(Z_TYPE_P(op1) == IS_STRING)) &&
	    ((IS_TMP_VAR|IS_VAR) == IS_CONST || EXPECTED(Z_TYPE_P(op2) == IS_STRING))) {
		zend_string *op1_str = Z_STR_P(op1);
		zend_string *op2_str = Z_STR_P(op2);
		zend_string *str;
		uint32_t flags = ZSTR_GET_COPYABLE_CONCAT_PROPERTIES_BOTH(op1_str, op2_str);

		if (IS_CONST != IS_CONST && UNEXPECTED(ZSTR_LEN(op1_str) == 0)) {
			if ((IS_TMP_VAR|IS_VAR) == IS_CONST || (IS_TMP_VAR|IS_VAR) == IS_CV) {
				ZVAL_STR_COPY(EX_VAR(opline->result.var), op2_str);
			} else {
				ZVAL_STR(EX_VAR(opline->result.var), op2_str);
			}
			if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
				zend_string_release_ex(op1_str, 0);
			}
		} else if ((IS_TMP_VAR|IS_VAR) != IS_CONST && UNEXPECTED(ZSTR_LEN(op2_str) == 0)) {
			if (IS_CONST == IS_CONST || IS_CONST == IS_CV) {
				ZVAL_STR_COPY(EX_VAR(opline->result.var), op1_str);
			} else {
				ZVAL_STR(EX_VAR(opline->result.var), op1_str);
			}
			if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
				zend_string_release_ex(op2_str, 0);
			}
		} else if (IS_CONST != IS_CONST && IS_CONST != IS_CV &&
		    !ZSTR_IS_INTERNED(op1_str) && GC_REFCOUNT(op1_str) == 1) {
			size_t len = ZSTR_LEN(op1_str);

			if (UNEXPECTED(len > ZSTR_MAX_LEN - ZSTR_LEN(op2_str))) {
				zend_error_noreturn(E_ERROR, "Integer overflow in memory allocation");
			}
			str = zend_string_extend(op1_str, len + ZSTR_LEN(op2_str), 0);
			memcpy(ZSTR_VAL(str) + len, ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
			GC_ADD_FLAGS(str, flags);
			ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
			if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
				zend_string_release_ex(op2_str, 0);
			}
		} else {
			str = zend_string_alloc(ZSTR_LEN(op1_str) + ZSTR_LEN(op2_str), 0);
			memcpy(ZSTR_VAL(str), ZSTR_VAL(op1_str), ZSTR_LEN(op1_str));
			memcpy(ZSTR_VAL(str) + ZSTR_LEN(op1_str), ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
			GC_ADD_FLAGS(str, flags);
			ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
			if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
				zend_string_release_ex(op1_str, 0);
			}
			if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
				zend_string_release_ex(op2_str, 0);
			}
		}
		ZEND_VM_NEXT_OPCODE();
	} else {
		SAVE_OPLINE();

		if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
			op1 = ZVAL_UNDEFINED_OP1();
		}
		if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(op2) == IS_UNDEF)) {
			op2 = ZVAL_UNDEFINED_OP2();
		}
		concat_function(EX_VAR(opline->result.var), op1, op2);


		zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
	}
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_SPACESHIP_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;

	SAVE_OPLINE();
	op1 = RT_CONSTANT(opline, opline->op1);
	op2 = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
	compare_function(EX_VAR(opline->result.var), op1, op2);


	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_FETCH_DIM_R_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *container, *dim, *value;

	SAVE_OPLINE();
	container = RT_CONSTANT(opline, opline->op1);
	dim = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
	if (IS_CONST != IS_CONST) {
		if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
fetch_dim_r_array:
			value = zend_fetch_dimension_address_inner(Z_ARRVAL_P(container), dim, (IS_TMP_VAR|IS_VAR), BP_VAR_R EXECUTE_DATA_CC);
			ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
		} else if (EXPECTED(Z_TYPE_P(container) == IS_REFERENCE)) {
			container = Z_REFVAL_P(container);
			if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
				goto fetch_dim_r_array;
			} else {
				goto fetch_dim_r_slow;
			}
		} else {
fetch_dim_r_slow:
			if ((IS_TMP_VAR|IS_VAR) == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
				dim++;
			}
			zend_fetch_dimension_address_read_R_slow(container, dim OPLINE_CC EXECUTE_DATA_CC);
		}
	} else {
		zend_fetch_dimension_address_read_R(container, dim, (IS_TMP_VAR|IS_VAR) OPLINE_CC EXECUTE_DATA_CC);
	}
	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));


	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_FETCH_DIM_IS_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *container;

	SAVE_OPLINE();
	container = RT_CONSTANT(opline, opline->op1);
	zend_fetch_dimension_address_read_IS(container, _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC), (IS_TMP_VAR|IS_VAR) OPLINE_CC EXECUTE_DATA_CC);
	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));


	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_FETCH_DIM_FUNC_ARG_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
#if 0
	USE_OPLINE
#endif

	if (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) {
		if ((IS_CONST & (IS_CONST|IS_TMP_VAR))) {
			ZEND_VM_TAIL_CALL(zend_use_tmp_in_write_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
		}
		ZEND_VM_TAIL_CALL(ZEND_NULL_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
	} else {
		if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED) {
			ZEND_VM_TAIL_CALL(zend_use_undef_in_read_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
		}
		ZEND_VM_TAIL_CALL(ZEND_FETCH_DIM_R_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
	}
}

static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_FETCH_OBJ_R_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *container;
	void **cache_slot = NULL;

	SAVE_OPLINE();
	container = RT_CONSTANT(opline, opline->op1);

	if (IS_CONST == IS_CONST ||
	    (IS_CONST != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
		do {
			if ((IS_CONST & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
				container = Z_REFVAL_P(container);
				if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
					break;
				}
			}
			if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
				ZVAL_UNDEFINED_OP1();
			}
			zend_wrong_property_read(container, _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC));
			ZVAL_NULL(EX_VAR(opline->result.var));
			goto fetch_obj_r_finish;
		} while (0);
	}

	/* here we are sure we are dealing with an object */
	do {
		zend_object *zobj = Z_OBJ_P(container);
		zend_string *name, *tmp_name;
		zval *retval;

		if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
			cache_slot = CACHE_ADDR(opline->extended_value & ~ZEND_FETCH_REF /* FUNC_ARG fetch may contain it */);

			if (EXPECTED(zobj->ce == CACHED_PTR_EX(cache_slot))) {
				uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);

				if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
fetch_obj_r_simple:
					retval = OBJ_PROP(zobj, prop_offset);
					if (EXPECTED(Z_TYPE_INFO_P(retval) != IS_UNDEF)) {
						if (0 || (IS_CONST & (IS_TMP_VAR|IS_VAR)) != 0) {
							goto fetch_obj_r_copy;
						} else {
fetch_obj_r_fast_copy:
							ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
							ZEND_VM_NEXT_OPCODE();
						}
					}
				} else if (UNEXPECTED(IS_HOOKED_PROPERTY_OFFSET(prop_offset))) {
					zend_property_info *prop_info = CACHED_PTR_EX(cache_slot + 2);
					if (ZEND_IS_PROPERTY_HOOK_SIMPLE_READ(prop_offset)) {
						prop_offset = prop_info->offset;
						goto fetch_obj_r_simple;
					} else if (EXPECTED(ZEND_IS_PROPERTY_HOOK_SIMPLE_GET(prop_offset))) {
						zend_function *hook = prop_info->hooks[ZEND_PROPERTY_HOOK_GET];
						ZEND_ASSERT(hook->type == ZEND_USER_FUNCTION);
						ZEND_ASSERT(RUN_TIME_CACHE(&hook->op_array));

						uint32_t call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_HAS_THIS;
						if (IS_CONST & IS_CV) {
							GC_ADDREF(zobj);
						}
						if (IS_CONST & (IS_CV|IS_VAR|IS_TMP_VAR)) {
							call_info |= ZEND_CALL_RELEASE_THIS;
						}
						zend_execute_data *call = zend_vm_stack_push_call_frame(call_info, hook, 0, zobj);
						call->prev_execute_data = execute_data;
						call->call = NULL;
						call->return_value = EX_VAR(opline->result.var);
						call->run_time_cache = RUN_TIME_CACHE(&hook->op_array);

						execute_data = call;
						EG(current_execute_data) = execute_data;
						zend_init_cvs(0, hook->op_array.last_var EXECUTE_DATA_CC);

#if defined(ZEND_VM_IP_GLOBAL_REG) && ((ZEND_VM_KIND == ZEND_VM_KIND_CALL) || (ZEND_VM_KIND == ZEND_VM_KIND_HYBRID))
						opline = hook->op_array.opcodes;
#else
						EX(opline) = hook->op_array.opcodes;
#endif
						LOAD_OPLINE_EX();




						ZEND_VM_ENTER_EX();
					}
					/* Fall through to read_property for hooks. */
				} else if (EXPECTED(zobj->properties != NULL)) {
					ZEND_ASSERT(IS_DYNAMIC_PROPERTY_OFFSET(prop_offset));
					name = Z_STR_P(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC));
					if (!IS_UNKNOWN_DYNAMIC_PROPERTY_OFFSET(prop_offset)) {
						uintptr_t idx = ZEND_DECODE_DYN_PROP_OFFSET(prop_offset);

						if (EXPECTED(idx < zobj->properties->nNumUsed * sizeof(Bucket))) {
							Bucket *p = (Bucket*)((char*)zobj->properties->arData + idx);

							if (EXPECTED(p->key == name) ||
							    (EXPECTED(p->h == ZSTR_H(name)) &&
							     EXPECTED(p->key != NULL) &&
							     EXPECTED(zend_string_equal_content(p->key, name)))) {
								retval = &p->val;
								if (0 || (IS_CONST & (IS_TMP_VAR|IS_VAR)) != 0) {
									goto fetch_obj_r_copy;
								} else {
									goto fetch_obj_r_fast_copy;
								}
							}
						}
						CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_DYNAMIC_PROPERTY_OFFSET);
					}
					retval = zend_hash_find_known_hash(zobj->properties, name);
					if (EXPECTED(retval)) {
						uintptr_t idx = (char*)retval - (char*)zobj->properties->arData;
						CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_ENCODE_DYN_PROP_OFFSET(idx));
						if (0 || (IS_CONST & (IS_TMP_VAR|IS_VAR)) != 0) {
							goto fetch_obj_r_copy;
						} else {
							goto fetch_obj_r_fast_copy;
						}
					}
				}
			}
			name = Z_STR_P(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC));
		} else {
			name = zval_try_get_tmp_string(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC), &tmp_name);
			if (UNEXPECTED(!name)) {
				ZVAL_UNDEF(EX_VAR(opline->result.var));
				break;
			}
		}

#if ZEND_DEBUG
		/* For non-standard object handlers, verify a declared property type in debug builds.
		 * Fetch prop_info before calling read_property(), as it may deallocate the object. */
		zend_property_info *prop_info = NULL;
		if (zobj->handlers->read_property != zend_std_read_property) {
			prop_info = zend_get_property_info(zobj->ce, name, /* silent */ true);
		}
#endif
		retval = zobj->handlers->read_property(zobj, name, BP_VAR_R, cache_slot, EX_VAR(opline->result.var));
#if ZEND_DEBUG
		if (!EG(exception) && prop_info && prop_info != ZEND_WRONG_PROPERTY_INFO
				&& ZEND_TYPE_IS_SET(prop_info->type)) {
			ZVAL_OPT_DEREF(retval);
			zend_verify_property_type(prop_info, retval, /* strict */ true);
		}
#endif

		if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
			zend_tmp_string_release(tmp_name);
		}

		if (retval != EX_VAR(opline->result.var)) {
fetch_obj_r_copy:
			ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
		} else if (UNEXPECTED(Z_ISREF_P(retval))) {
			zend_unwrap_reference(retval);
		}
	} while (0);

fetch_obj_r_finish:
	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));


	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_FETCH_OBJ_IS_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *container;
	void **cache_slot = NULL;

	SAVE_OPLINE();
	container = RT_CONSTANT(opline, opline->op1);

	if (IS_CONST == IS_CONST ||
	    (IS_CONST != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
		do {
			if ((IS_CONST & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
				container = Z_REFVAL_P(container);
				if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
					break;
				}
			}
			if ((IS_TMP_VAR|IS_VAR) == IS_CV && Z_TYPE_P(EX_VAR(opline->op2.var)) == IS_UNDEF) {
				ZVAL_UNDEFINED_OP2();
			}
			ZVAL_NULL(EX_VAR(opline->result.var));
			goto fetch_obj_is_finish;
		} while (0);
	}

	/* here we are sure we are dealing with an object */
	do {
		zend_object *zobj = Z_OBJ_P(container);
		zend_string *name, *tmp_name;
		zval *retval;

		if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
			cache_slot = CACHE_ADDR(opline->extended_value);

			if (EXPECTED(zobj->ce == CACHED_PTR_EX(cache_slot))) {
				uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);

				if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
fetch_obj_is_simple:
					retval = OBJ_PROP(zobj, prop_offset);
					if (EXPECTED(Z_TYPE_P(retval) != IS_UNDEF)) {
						if (0 || (IS_CONST & (IS_TMP_VAR|IS_VAR)) != 0) {
							goto fetch_obj_is_copy;
						} else {
fetch_obj_is_fast_copy:
							ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
							ZEND_VM_NEXT_OPCODE();
						}
					}
				} else if (UNEXPECTED(IS_HOOKED_PROPERTY_OFFSET(prop_offset))) {
					if (ZEND_IS_PROPERTY_HOOK_SIMPLE_READ(prop_offset)) {
						zend_property_info *prop_info = CACHED_PTR_EX(cache_slot + 2);
						prop_offset = prop_info->offset;
						goto fetch_obj_is_simple;
					}
					/* Fall through to read_property for hooks. */
				} else if (EXPECTED(zobj->properties != NULL)) {
					ZEND_ASSERT(IS_DYNAMIC_PROPERTY_OFFSET(prop_offset));
					name = Z_STR_P(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC));
					if (!IS_UNKNOWN_DYNAMIC_PROPERTY_OFFSET(prop_offset)) {
						uintptr_t idx = ZEND_DECODE_DYN_PROP_OFFSET(prop_offset);

						if (EXPECTED(idx < zobj->properties->nNumUsed * sizeof(Bucket))) {
							Bucket *p = (Bucket*)((char*)zobj->properties->arData + idx);

							if (EXPECTED(p->key == name) ||
							    (EXPECTED(p->h == ZSTR_H(name)) &&
							     EXPECTED(p->key != NULL) &&
							     EXPECTED(zend_string_equal_content(p->key, name)))) {
								retval = &p->val;
								if (0 || (IS_CONST & (IS_TMP_VAR|IS_VAR)) != 0) {
									goto fetch_obj_is_copy;
								} else {
									goto fetch_obj_is_fast_copy;
								}
							}
						}
						CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_DYNAMIC_PROPERTY_OFFSET);
					}
					retval = zend_hash_find_known_hash(zobj->properties, name);
					if (EXPECTED(retval)) {
						uintptr_t idx = (char*)retval - (char*)zobj->properties->arData;
						CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_ENCODE_DYN_PROP_OFFSET(idx));
						if (0 || (IS_CONST & (IS_TMP_VAR|IS_VAR)) != 0) {
							goto fetch_obj_is_copy;
						} else {
							goto fetch_obj_is_fast_copy;
						}
					}
				}
			}
			name = Z_STR_P(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC));
		} else {
			name = zval_try_get_tmp_string(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC), &tmp_name);
			if (UNEXPECTED(!name)) {
				ZVAL_UNDEF(EX_VAR(opline->result.var));
				break;
			}
		}

		retval = zobj->handlers->read_property(zobj, name, BP_VAR_IS, cache_slot, EX_VAR(opline->result.var));

		if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
			zend_tmp_string_release(tmp_name);
		}

		if (retval != EX_VAR(opline->result.var)) {
fetch_obj_is_copy:
			ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
		} else if (UNEXPECTED(Z_ISREF_P(retval))) {
			zend_unwrap_reference(retval);
		}
	} while (0);

fetch_obj_is_finish:
	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));


	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
#if 0
	USE_OPLINE
#endif

	if (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) {
		/* Behave like FETCH_OBJ_W */
		if ((IS_CONST & (IS_CONST|IS_TMP_VAR))) {
			ZEND_VM_TAIL_CALL(zend_use_tmp_in_write_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
		}
		ZEND_VM_TAIL_CALL(ZEND_NULL_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
	} else {
		ZEND_VM_TAIL_CALL(ZEND_FETCH_OBJ_R_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
	}
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_FETCH_LIST_R_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *container;

	SAVE_OPLINE();
	container = RT_CONSTANT(opline, opline->op1);
	zend_fetch_dimension_address_LIST_r(container, _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC), (IS_TMP_VAR|IS_VAR) OPLINE_CC EXECUTE_DATA_CC);
	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_FAST_CONCAT_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;
	zend_string *op1_str, *op2_str, *str;


	op1 = RT_CONSTANT(opline, opline->op1);
	op2 = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
	if ((IS_CONST == IS_CONST || EXPECTED(Z_TYPE_P(op1) == IS_STRING)) &&
	    ((IS_TMP_VAR|IS_VAR) == IS_CONST || EXPECTED(Z_TYPE_P(op2) == IS_STRING))) {
		zend_string *op1_str = Z_STR_P(op1);
		zend_string *op2_str = Z_STR_P(op2);
		zend_string *str;
		uint32_t flags = ZSTR_GET_COPYABLE_CONCAT_PROPERTIES_BOTH(op1_str, op2_str);

		if (IS_CONST != IS_CONST && UNEXPECTED(ZSTR_LEN(op1_str) == 0)) {
			if ((IS_TMP_VAR|IS_VAR) == IS_CONST || (IS_TMP_VAR|IS_VAR) == IS_CV) {
				ZVAL_STR_COPY(EX_VAR(opline->result.var), op2_str);
			} else {
				ZVAL_STR(EX_VAR(opline->result.var), op2_str);
			}
			if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
				zend_string_release_ex(op1_str, 0);
			}
		} else if ((IS_TMP_VAR|IS_VAR) != IS_CONST && UNEXPECTED(ZSTR_LEN(op2_str) == 0)) {
			if (IS_CONST == IS_CONST || IS_CONST == IS_CV) {
				ZVAL_STR_COPY(EX_VAR(opline->result.var), op1_str);
			} else {
				ZVAL_STR(EX_VAR(opline->result.var), op1_str);
			}
			if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
				zend_string_release_ex(op2_str, 0);
			}
		} else if (IS_CONST != IS_CONST && IS_CONST != IS_CV &&
		    !ZSTR_IS_INTERNED(op1_str) && GC_REFCOUNT(op1_str) == 1) {
			size_t len = ZSTR_LEN(op1_str);

			str = zend_string_extend(op1_str, len + ZSTR_LEN(op2_str), 0);
			memcpy(ZSTR_VAL(str) + len, ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
			GC_ADD_FLAGS(str, flags);
			ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
			if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
				zend_string_release_ex(op2_str, 0);
			}
		} else {
			str = zend_string_alloc(ZSTR_LEN(op1_str) + ZSTR_LEN(op2_str), 0);
			memcpy(ZSTR_VAL(str), ZSTR_VAL(op1_str), ZSTR_LEN(op1_str));
			memcpy(ZSTR_VAL(str) + ZSTR_LEN(op1_str), ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
			GC_ADD_FLAGS(str, flags);
			ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
			if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
				zend_string_release_ex(op1_str, 0);
			}
			if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
				zend_string_release_ex(op2_str, 0);
			}
		}
		ZEND_VM_NEXT_OPCODE();
	}

	SAVE_OPLINE();
	if (IS_CONST == IS_CONST) {
		op1_str = Z_STR_P(op1);
	} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
		op1_str = zend_string_copy(Z_STR_P(op1));
	} else {
		if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
			ZVAL_UNDEFINED_OP1();
		}
		op1_str = zval_get_string_func(op1);
	}
	if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
		op2_str = Z_STR_P(op2);
	} else if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
		op2_str = zend_string_copy(Z_STR_P(op2));
	} else {
		if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(op2) == IS_UNDEF)) {
			ZVAL_UNDEFINED_OP2();
		}
		op2_str = zval_get_string_func(op2);
	}
	do {
		if (IS_CONST != IS_CONST) {
			if (UNEXPECTED(ZSTR_LEN(op1_str) == 0)) {
				if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
					if (UNEXPECTED(Z_REFCOUNTED_P(op2))) {
						GC_ADDREF(op2_str);
					}
				}
				ZVAL_STR(EX_VAR(opline->result.var), op2_str);
				zend_string_release_ex(op1_str, 0);
				break;
			}
		}
		if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
			if (UNEXPECTED(ZSTR_LEN(op2_str) == 0)) {
				if (IS_CONST == IS_CONST) {
					if (UNEXPECTED(Z_REFCOUNTED_P(op1))) {
						GC_ADDREF(op1_str);
					}
				}
				ZVAL_STR(EX_VAR(opline->result.var), op1_str);
				zend_string_release_ex(op2_str, 0);
				break;
			}
		}
		str = zend_string_alloc(ZSTR_LEN(op1_str) + ZSTR_LEN(op2_str), 0);
		memcpy(ZSTR_VAL(str), ZSTR_VAL(op1_str), ZSTR_LEN(op1_str));
		memcpy(ZSTR_VAL(str) + ZSTR_LEN(op1_str), ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);

		ZSTR_COPY_CONCAT_PROPERTIES_BOTH(str, op1_str, op2_str);
		ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
		if (IS_CONST != IS_CONST) {
			zend_string_release_ex(op1_str, 0);
		}
		if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
			zend_string_release_ex(op2_str, 0);
		}
	} while (0);


	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_INIT_METHOD_CALL_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *function_name;
	zval *object;
	zend_function *fbc;
	zend_class_entry *called_scope;
	zend_object *obj;
	zend_execute_data *call;
	uint32_t call_info;

	SAVE_OPLINE();

	object = RT_CONSTANT(opline, opline->op1);

	if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
		function_name = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
	}

	if ((IS_TMP_VAR|IS_VAR) != IS_CONST &&
	    UNEXPECTED(Z_TYPE_P(function_name) != IS_STRING)) {
		do {
			if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && Z_ISREF_P(function_name)) {
				function_name = Z_REFVAL_P(function_name);
				if (EXPECTED(Z_TYPE_P(function_name) == IS_STRING)) {
					break;
				}
			} else if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) {
				ZVAL_UNDEFINED_OP2();
				if (UNEXPECTED(EG(exception) != NULL)) {


					HANDLE_EXCEPTION();
				}
			}
			zend_throw_error(NULL, "Method name must be a string");
			zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));


			HANDLE_EXCEPTION();
		} while (0);
	}

	if (IS_CONST == IS_UNUSED) {
		obj = Z_OBJ_P(object);
	} else {
		do {
			if (IS_CONST != IS_CONST && EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
				obj = Z_OBJ_P(object);
			} else {
				if ((IS_CONST & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(object))) {
					zend_reference *ref = Z_REF_P(object);

					object = &ref->val;
					if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
						obj = Z_OBJ_P(object);
						if (IS_CONST & IS_VAR) {
							if (UNEXPECTED(GC_DELREF(ref) == 0)) {
								efree_size(ref, sizeof(zend_reference));
							} else {
								Z_ADDREF_P(object);
							}
						}
						break;
					}
				}
				if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
					object = ZVAL_UNDEFINED_OP1();
					if (UNEXPECTED(EG(exception) != NULL)) {
						if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
							zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
						}
						HANDLE_EXCEPTION();
					}
				}
				if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
					function_name = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
				}
				zend_invalid_method_call(object, function_name);
				zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));


				HANDLE_EXCEPTION();
			}
		} while (0);
	}

	called_scope = obj->ce;

	if ((IS_TMP_VAR|IS_VAR) == IS_CONST &&
	    EXPECTED(CACHED_PTR(opline->result.num) == called_scope)) {
		fbc = CACHED_PTR(opline->result.num + sizeof(void*));
	} else {
		zend_object *orig_obj = obj;

		if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
			function_name = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
		}

		/* First, locate the function. */
		fbc = obj->handlers->get_method(&obj, Z_STR_P(function_name), (((IS_TMP_VAR|IS_VAR) == IS_CONST) ? (RT_CONSTANT(opline, opline->op2) + 1) : NULL));
		if (UNEXPECTED(fbc == NULL)) {
			if (EXPECTED(!EG(exception))) {
				zend_undefined_method(orig_obj->ce, Z_STR_P(function_name));
			}
			zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
			if ((IS_CONST & (IS_VAR|IS_TMP_VAR)) && GC_DELREF(orig_obj) == 0) {
				zend_objects_store_del(orig_obj);
			}
			HANDLE_EXCEPTION();
		}
		if ((IS_TMP_VAR|IS_VAR) == IS_CONST &&
		    EXPECTED(!(fbc->common.fn_flags & (ZEND_ACC_CALL_VIA_TRAMPOLINE|ZEND_ACC_NEVER_CACHE))) &&
		    EXPECTED(obj == orig_obj)) {
			CACHE_POLYMORPHIC_PTR(opline->result.num, called_scope, fbc);
		}
		if ((IS_CONST & (IS_VAR|IS_TMP_VAR)) && UNEXPECTED(obj != orig_obj)) {
			GC_ADDREF(obj); /* For $this pointer */
			if (GC_DELREF(orig_obj) == 0) {
				zend_objects_store_del(orig_obj);
			}
		}
		if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!RUN_TIME_CACHE(&fbc->op_array))) {
			init_func_run_time_cache(&fbc->op_array);
		}
	}

	if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
		zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
	}

	call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_HAS_THIS;
	if (UNEXPECTED((fbc->common.fn_flags & ZEND_ACC_STATIC) != 0)) {
		if ((IS_CONST & (IS_VAR|IS_TMP_VAR)) && GC_DELREF(obj) == 0) {
			zend_objects_store_del(obj);
			if (UNEXPECTED(EG(exception))) {
				HANDLE_EXCEPTION();
			}
		}
		/* call static method */
		obj = (zend_object*)called_scope;
		call_info = ZEND_CALL_NESTED_FUNCTION;
	} else if (IS_CONST & (IS_VAR|IS_TMP_VAR|IS_CV)) {
		if (IS_CONST == IS_CV) {
			GC_ADDREF(obj); /* For $this pointer */
		}
		/* CV may be changed indirectly (e.g. when it's a reference) */
		call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_HAS_THIS | ZEND_CALL_RELEASE_THIS;
	}

	call = zend_vm_stack_push_call_frame(call_info,
		fbc, opline->extended_value, obj);
	call->prev_execute_data = EX(call);
	EX(call) = call;

	ZEND_VM_NEXT_OPCODE();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_INIT_STATIC_METHOD_CALL_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *function_name;
	zend_class_entry *ce;
	uint32_t call_info;
	zend_function *fbc;
	zend_execute_data *call;

	SAVE_OPLINE();

	if (IS_CONST == IS_CONST) {
		/* no function found. try a static method in class */
		ce = CACHED_PTR(opline->result.num);
		if (UNEXPECTED(ce == NULL)) {
			ce = zend_fetch_class_by_name(Z_STR_P(RT_CONSTANT(opline, opline->op1)), Z_STR_P(RT_CONSTANT(opline, opline->op1) + 1), ZEND_FETCH_CLASS_DEFAULT | ZEND_FETCH_CLASS_EXCEPTION);
			if (UNEXPECTED(ce == NULL)) {
				zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
				HANDLE_EXCEPTION();
			}
			if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
				CACHE_PTR(opline->result.num, ce);
			}
		}
	} else if (IS_CONST == IS_UNUSED) {
		ce = zend_fetch_class(NULL, opline->op1.num);
		if (UNEXPECTED(ce == NULL)) {
			zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
			HANDLE_EXCEPTION();
		}
	} else {
		ce = Z_CE_P(EX_VAR(opline->op1.var));
	}

	if (IS_CONST == IS_CONST &&
	    (IS_TMP_VAR|IS_VAR) == IS_CONST &&
	    EXPECTED((fbc = CACHED_PTR(opline->result.num + sizeof(void*))) != NULL)) {
		/* nothing to do */
	} else if (IS_CONST != IS_CONST &&
	           (IS_TMP_VAR|IS_VAR) == IS_CONST &&
	           EXPECTED(CACHED_PTR(opline->result.num) == ce)) {
		fbc = CACHED_PTR(opline->result.num + sizeof(void*));
	} else if ((IS_TMP_VAR|IS_VAR) != IS_UNUSED) {
		function_name = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
		if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
			if (UNEXPECTED(Z_TYPE_P(function_name) != IS_STRING)) {
				do {
					if ((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV) && Z_ISREF_P(function_name)) {
						function_name = Z_REFVAL_P(function_name);
						if (EXPECTED(Z_TYPE_P(function_name) == IS_STRING)) {
							break;
						}
					} else if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) {
						ZVAL_UNDEFINED_OP2();
						if (UNEXPECTED(EG(exception) != NULL)) {
							HANDLE_EXCEPTION();
						}
					}
					zend_throw_error(NULL, "Method name must be a string");
					zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
					HANDLE_EXCEPTION();
				} while (0);
			}
		}

		if (ce->get_static_method) {
			fbc = ce->get_static_method(ce, Z_STR_P(function_name));
		} else {
			fbc = zend_std_get_static_method(ce, Z_STR_P(function_name), (((IS_TMP_VAR|IS_VAR) == IS_CONST) ? (RT_CONSTANT(opline, opline->op2) + 1) : NULL));
		}
		if (UNEXPECTED(fbc == NULL)) {
			if (EXPECTED(!EG(exception))) {
				zend_undefined_method(ce, Z_STR_P(function_name));
			}
			zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
			HANDLE_EXCEPTION();
		}
		if ((IS_TMP_VAR|IS_VAR) == IS_CONST &&
		    EXPECTED(!(fbc->common.fn_flags & (ZEND_ACC_CALL_VIA_TRAMPOLINE|ZEND_ACC_NEVER_CACHE))) &&
			EXPECTED(!(fbc->common.scope->ce_flags & ZEND_ACC_TRAIT))) {
			CACHE_POLYMORPHIC_PTR(opline->result.num, ce, fbc);
		}
		if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!RUN_TIME_CACHE(&fbc->op_array))) {
			init_func_run_time_cache(&fbc->op_array);
		}
		if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
			zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
		}
	} else {
		if (UNEXPECTED(ce->constructor == NULL)) {
			zend_throw_error(NULL, "Cannot call constructor");
			HANDLE_EXCEPTION();
		}
		if (Z_TYPE(EX(This)) == IS_OBJECT && Z_OBJ(EX(This))->ce != ce->constructor->common.scope && (ce->constructor->common.fn_flags & ZEND_ACC_PRIVATE)) {
			zend_throw_error(NULL, "Cannot call private %s::__construct()", ZSTR_VAL(ce->name));
			HANDLE_EXCEPTION();
		}
		fbc = ce->constructor;
		if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!RUN_TIME_CACHE(&fbc->op_array))) {
			init_func_run_time_cache(&fbc->op_array);
		}
	}

	if (!(fbc->common.fn_flags & ZEND_ACC_STATIC)) {
		if (Z_TYPE(EX(This)) == IS_OBJECT && instanceof_function(Z_OBJCE(EX(This)), ce)) {
			ce = (zend_class_entry*)Z_OBJ(EX(This));
			call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_HAS_THIS;
		} else {
			zend_non_static_method_call(fbc);
			HANDLE_EXCEPTION();
		}
	} else {
		/* previous opcode is ZEND_FETCH_CLASS */
		if (IS_CONST == IS_UNUSED
		 && ((opline->op1.num & ZEND_FETCH_CLASS_MASK) == ZEND_FETCH_CLASS_PARENT ||
		     (opline->op1.num & ZEND_FETCH_CLASS_MASK) == ZEND_FETCH_CLASS_SELF)) {
			if (Z_TYPE(EX(This)) == IS_OBJECT) {
				ce = Z_OBJCE(EX(This));
			} else {
				ce = Z_CE(EX(This));
			}
		}
		call_info = ZEND_CALL_NESTED_FUNCTION;
	}

	call = zend_vm_stack_push_call_frame(call_info,
		fbc, opline->extended_value, ce);
	call->prev_execute_data = EX(call);
	EX(call) = call;

	ZEND_VM_NEXT_OPCODE();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_INIT_USER_CALL_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *function_name;
	zend_fcall_info_cache fcc;
	char *error = NULL;
	zend_function *func;
	void *object_or_called_scope;
	zend_execute_data *call;
	uint32_t call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_DYNAMIC;

	SAVE_OPLINE();
	function_name = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
	if (zend_is_callable_ex(function_name, NULL, 0, NULL, &fcc, &error)) {
		ZEND_ASSERT(!error);

		/* Deprecation can be emitted from zend_is_callable_ex(), which can
		 * invoke a user error handler and throw an exception.
		 * For the CONST and CV case we reuse the same exception block below
		 * to make sure we don't increase VM size too much. */
		if (!((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) && UNEXPECTED(EG(exception))) {
			zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
			HANDLE_EXCEPTION();
		}

		func = fcc.function_handler;
		object_or_called_scope = fcc.called_scope;
		if (func->common.fn_flags & ZEND_ACC_CLOSURE) {
			/* Delay closure destruction until its invocation */
			GC_ADDREF(ZEND_CLOSURE_OBJECT(func));
			call_info |= ZEND_CALL_CLOSURE;
			if (func->common.fn_flags & ZEND_ACC_FAKE_CLOSURE) {
				call_info |= ZEND_CALL_FAKE_CLOSURE;
			}
			if (fcc.object) {
				object_or_called_scope = fcc.object;
				call_info |= ZEND_CALL_HAS_THIS;
			}
		} else if (fcc.object) {
			GC_ADDREF(fcc.object); /* For $this pointer */
			object_or_called_scope = fcc.object;
			call_info |= ZEND_CALL_RELEASE_THIS | ZEND_CALL_HAS_THIS;
		}

		zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
		if (((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) && UNEXPECTED(EG(exception))) {
			if (call_info & ZEND_CALL_CLOSURE) {
				zend_object_release(ZEND_CLOSURE_OBJECT(func));
			} else if (call_info & ZEND_CALL_RELEASE_THIS) {
				zend_object_release(fcc.object);
			}
			HANDLE_EXCEPTION();
		}

		if (EXPECTED(func->type == ZEND_USER_FUNCTION) && UNEXPECTED(!RUN_TIME_CACHE(&func->op_array))) {
			init_func_run_time_cache(&func->op_array);
		}
	} else {
		zend_type_error("%s(): Argument #1 ($callback) must be a valid callback, %s", Z_STRVAL_P(RT_CONSTANT(opline, opline->op1)), error);
		efree(error);
		zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
		HANDLE_EXCEPTION();
	}

	call = zend_vm_stack_push_call_frame(call_info,
		func, opline->extended_value, object_or_called_scope);
	call->prev_execute_data = EX(call);
	EX(call) = call;

	ZEND_VM_NEXT_OPCODE();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *expr_ptr, new_expr;

	SAVE_OPLINE();
	if ((IS_CONST == IS_VAR || IS_CONST == IS_CV) &&
	    UNEXPECTED(opline->extended_value & ZEND_ARRAY_ELEMENT_REF)) {
		expr_ptr = zend_get_bad_ptr();
		if (Z_ISREF_P(expr_ptr)) {
			Z_ADDREF_P(expr_ptr);
		} else {
			ZVAL_MAKE_REF_EX(expr_ptr, 2);
		}


	} else {
		expr_ptr = RT_CONSTANT(opline, opline->op1);
		if (IS_CONST == IS_TMP_VAR) {
			/* pass */
		} else if (IS_CONST == IS_CONST) {
			Z_TRY_ADDREF_P(expr_ptr);
		} else if (IS_CONST == IS_CV) {
			ZVAL_DEREF(expr_ptr);
			Z_TRY_ADDREF_P(expr_ptr);
		} else /* if (IS_CONST == IS_VAR) */ {
			if (UNEXPECTED(Z_ISREF_P(expr_ptr))) {
				zend_refcounted *ref = Z_COUNTED_P(expr_ptr);

				expr_ptr = Z_REFVAL_P(expr_ptr);
				if (UNEXPECTED(GC_DELREF(ref) == 0)) {
					ZVAL_COPY_VALUE(&new_expr, expr_ptr);
					expr_ptr = &new_expr;
					efree_size(ref, sizeof(zend_reference));
				} else if (Z_OPT_REFCOUNTED_P(expr_ptr)) {
					Z_ADDREF_P(expr_ptr);
				}
			}
		}
	}

	if ((IS_TMP_VAR|IS_VAR) != IS_UNUSED) {
		zval *offset = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
		zend_string *str;
		zend_ulong hval;

add_again:
		if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) {
			str = Z_STR_P(offset);
			if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
				if (ZEND_HANDLE_NUMERIC(str, hval)) {
					goto num_index;
				}
			}
str_index:
			zend_hash_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), str, expr_ptr);
		} else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
			hval = Z_LVAL_P(offset);
num_index:
			zend_hash_index_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), hval, expr_ptr);
		} else if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && EXPECTED(Z_TYPE_P(offset) == IS_REFERENCE)) {
			offset = Z_REFVAL_P(offset);
			goto add_again;
		} else if (UNEXPECTED(Z_TYPE_P(offset) == IS_NULL)) {
			zval tmp;
			if (IS_CONST == IS_CV || IS_CONST == IS_VAR) {
				ZVAL_COPY(&tmp, expr_ptr);
			}
			zend_error(E_DEPRECATED, "Using null as an array offset is deprecated, use an empty string instead");
			if (IS_CONST == IS_CV || IS_CONST == IS_VAR) {
				/* A userland error handler can do funky things to the expression, so reset it */
				zval_ptr_dtor(expr_ptr);
				ZVAL_COPY_VALUE(expr_ptr, &tmp);
			}
			if (UNEXPECTED(EG(exception))) {
				zval_ptr_dtor_nogc(expr_ptr);
				HANDLE_EXCEPTION();
			}
			str = ZSTR_EMPTY_ALLOC();
			goto str_index;
		} else if (Z_TYPE_P(offset) == IS_DOUBLE) {
			hval = zend_dval_to_lval_safe(Z_DVAL_P(offset));
			goto num_index;
		} else if (Z_TYPE_P(offset) == IS_FALSE) {
			hval = 0;
			goto num_index;
		} else if (Z_TYPE_P(offset) == IS_TRUE) {
			hval = 1;
			goto num_index;
		} else if (Z_TYPE_P(offset) == IS_RESOURCE) {
			zend_use_resource_as_offset(offset);
			hval = Z_RES_HANDLE_P(offset);
			goto num_index;
		} else if ((IS_TMP_VAR|IS_VAR) == IS_CV && Z_TYPE_P(offset) == IS_UNDEF) {
			ZVAL_UNDEFINED_OP2();
			str = ZSTR_EMPTY_ALLOC();
			goto str_index;
		} else {
			zend_illegal_array_offset_access(offset);
			zval_ptr_dtor_nogc(expr_ptr);
		}
		zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
	} else {
		if (!zend_hash_next_index_insert(Z_ARRVAL_P(EX_VAR(opline->result.var)), expr_ptr)) {
			zend_cannot_add_element();
			zval_ptr_dtor_nogc(expr_ptr);
		}
	}
	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_INIT_ARRAY_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	zval *array;
	uint32_t size;
	USE_OPLINE

	SAVE_OPLINE();
	array = EX_VAR(opline->result.var);
	if (IS_CONST != IS_UNUSED) {
		size = opline->extended_value >> ZEND_ARRAY_SIZE_SHIFT;
		ZVAL_ARR(array, zend_new_array(size));
		/* Explicitly initialize array as not-packed if flag is set */
		if (opline->extended_value & ZEND_ARRAY_NOT_PACKED) {
			zend_hash_real_init_mixed(Z_ARRVAL_P(array));
		}
		ZEND_VM_TAIL_CALL(ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
	} else {
		ZVAL_ARR(array, zend_new_array(0));
		ZEND_VM_NEXT_OPCODE();
	}
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *container;
	bool result;
	zend_ulong hval;
	zval *offset;

	SAVE_OPLINE();
	container = RT_CONSTANT(opline, opline->op1);
	offset = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);

	if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
		HashTable *ht;
		zval *value;
		zend_string *str;

isset_dim_obj_array:
		ht = Z_ARRVAL_P(container);
isset_again:
		if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) {
			str = Z_STR_P(offset);
			if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
				if (ZEND_HANDLE_NUMERIC(str, hval)) {
					goto num_index_prop;
				}
			}
			value = zend_hash_find_ex(ht, str, (IS_TMP_VAR|IS_VAR) == IS_CONST);
		} else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
			hval = Z_LVAL_P(offset);
num_index_prop:
			value = zend_hash_index_find(ht, hval);
		} else if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(offset))) {
			offset = Z_REFVAL_P(offset);
			goto isset_again;
		} else {
			value = zend_find_array_dim_slow(ht, offset EXECUTE_DATA_CC);
			if (UNEXPECTED(EG(exception))) {
				result = 0;
				goto isset_dim_obj_exit;
			}
		}

		if (!(opline->extended_value & ZEND_ISEMPTY)) {
			/* > IS_NULL means not IS_UNDEF and not IS_NULL */
			result = value != NULL && Z_TYPE_P(value) > IS_NULL &&
			    (!Z_ISREF_P(value) || Z_TYPE_P(Z_REFVAL_P(value)) != IS_NULL);

			if (IS_CONST & (IS_CONST|IS_CV)) {
				/* avoid exception check */
				zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
				ZEND_VM_SMART_BRANCH(result, 0);
			}
		} else {
			result = (value == NULL || !i_zend_is_true(value));
		}
		goto isset_dim_obj_exit;
	} else if ((IS_CONST & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(container))) {
		container = Z_REFVAL_P(container);
		if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
			goto isset_dim_obj_array;
		}
	}

	if ((IS_TMP_VAR|IS_VAR) == IS_CONST && Z_EXTRA_P(offset) == ZEND_EXTRA_VALUE) {
		offset++;
	}
	if (!(opline->extended_value & ZEND_ISEMPTY)) {
		result = zend_isset_dim_slow(container, offset EXECUTE_DATA_CC);
	} else {
		result = zend_isempty_dim_slow(container, offset EXECUTE_DATA_CC);
	}

isset_dim_obj_exit:
	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));


	ZEND_VM_SMART_BRANCH(result, 1);
}

static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *container;
	int result;
	zval *offset;
	zend_string *name, *tmp_name;

	SAVE_OPLINE();
	container = RT_CONSTANT(opline, opline->op1);
	offset = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);

	if (IS_CONST == IS_CONST ||
	    (IS_CONST != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
		if ((IS_CONST & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
			container = Z_REFVAL_P(container);
			if (UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT)) {
				result = (opline->extended_value & ZEND_ISEMPTY);
				goto isset_object_finish;
			}
		} else {
			result = (opline->extended_value & ZEND_ISEMPTY);
			goto isset_object_finish;
		}
	}

	if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
		name = Z_STR_P(offset);
	} else {
		name = zval_try_get_tmp_string(offset, &tmp_name);
		if (UNEXPECTED(!name)) {
			result = 0;
			goto isset_object_finish;
		}
	}

	result =
		(opline->extended_value & ZEND_ISEMPTY) ^
		Z_OBJ_HT_P(container)->has_property(Z_OBJ_P(container), name, (opline->extended_value & ZEND_ISEMPTY), (((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(opline->extended_value & ~ZEND_ISEMPTY) : NULL));

	if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
		zend_tmp_string_release(tmp_name);
	}

isset_object_finish:
	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));


	ZEND_VM_SMART_BRANCH(result, 1);
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_ARRAY_KEY_EXISTS_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE

	zval *key, *subject;
	HashTable *ht;
	bool result;

	SAVE_OPLINE();

	key = RT_CONSTANT(opline, opline->op1);
	subject = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);

	if (EXPECTED(Z_TYPE_P(subject) == IS_ARRAY)) {
array_key_exists_array:
		ht = Z_ARRVAL_P(subject);
		result = zend_array_key_exists_fast(ht, key OPLINE_CC EXECUTE_DATA_CC);
	} else {
		if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(subject))) {
			subject = Z_REFVAL_P(subject);
			if (EXPECTED(Z_TYPE_P(subject) == IS_ARRAY)) {
				goto array_key_exists_array;
			}
		}
		zend_array_key_exists_error(subject, key OPLINE_CC EXECUTE_DATA_CC);
		result = 0;
	}

	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));


	ZEND_VM_SMART_BRANCH(result, 1);
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_YIELD_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE

	zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C);

	SAVE_OPLINE();
	if (UNEXPECTED(generator->flags & ZEND_GENERATOR_FORCED_CLOSE)) {
		ZEND_VM_TAIL_CALL(zend_yield_in_closed_generator_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
	}

	/* Destroy the previously yielded value */
	zval_ptr_dtor(&generator->value);

	/* Destroy the previously yielded key */
	zval_ptr_dtor(&generator->key);

	/* Set the new yielded value */
	if (IS_CONST != IS_UNUSED) {
		if (UNEXPECTED(EX(func)->op_array.fn_flags & ZEND_ACC_RETURN_REFERENCE)) {
			/* Constants and temporary variables aren't yieldable by reference,
			 * but we still allow them with a notice. */
			if (IS_CONST & (IS_CONST|IS_TMP_VAR)) {
				zval *value;

				zend_error(E_NOTICE, "Only variable references should be yielded by reference");

				value = RT_CONSTANT(opline, opline->op1);
				ZVAL_COPY_VALUE(&generator->value, value);
				if (IS_CONST == IS_CONST) {
					if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
						Z_ADDREF(generator->value);
					}
				}
			} else {
				zval *value_ptr = zend_get_bad_ptr();

				/* If a function call result is yielded and the function did
				 * not return by reference we throw a notice. */
				do {
					if (IS_CONST == IS_VAR) {
						ZEND_ASSERT(value_ptr != &EG(uninitialized_zval));
						if (opline->extended_value == ZEND_RETURNS_FUNCTION
						 && !Z_ISREF_P(value_ptr)) {
							zend_error(E_NOTICE, "Only variable references should be yielded by reference");
							ZVAL_COPY(&generator->value, value_ptr);
							break;
						}
					}
					if (Z_ISREF_P(value_ptr)) {
						Z_ADDREF_P(value_ptr);
					} else {
						ZVAL_MAKE_REF_EX(value_ptr, 2);
					}
					ZVAL_REF(&generator->value, Z_REF_P(value_ptr));
				} while (0);


			}
		} else {
			zval *value = RT_CONSTANT(opline, opline->op1);

			/* Consts, temporary variables and references need copying */
			if (IS_CONST == IS_CONST) {
				ZVAL_COPY_VALUE(&generator->value, value);
				if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
					Z_ADDREF(generator->value);
				}
			} else if (IS_CONST == IS_TMP_VAR) {
				ZVAL_COPY_VALUE(&generator->value, value);
			} else if ((IS_CONST & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) {
				ZVAL_COPY(&generator->value, Z_REFVAL_P(value));


			} else {
				ZVAL_COPY_VALUE(&generator->value, value);
				if (IS_CONST == IS_CV) {
					if (Z_OPT_REFCOUNTED_P(value)) Z_ADDREF_P(value);
				}
			}
		}
	} else {
		/* If no value was specified yield null */
		ZVAL_NULL(&generator->value);
	}

	/* Set the new yielded key */
	if ((IS_TMP_VAR|IS_VAR) != IS_UNUSED) {
		zval *key = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
		if (((IS_TMP_VAR|IS_VAR) & (IS_CV|IS_VAR)) && UNEXPECTED(Z_TYPE_P(key) == IS_REFERENCE)) {
			key = Z_REFVAL_P(key);
		}
		ZVAL_COPY(&generator->key, key);
		zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));

		if (Z_TYPE(generator->key) == IS_LONG
		    && Z_LVAL(generator->key) > generator->largest_used_integer_key
		) {
			generator->largest_used_integer_key = Z_LVAL(generator->key);
		}
	} else {
		/* If no key was specified we use auto-increment keys */
		generator->largest_used_integer_key++;
		ZVAL_LONG(&generator->key, generator->largest_used_integer_key);
	}

	if (RETURN_VALUE_USED(opline)) {
		/* If the return value of yield is used set the send
		 * target and initialize it to NULL */
		generator->send_target = EX_VAR(opline->result.var);
		ZVAL_NULL(generator->send_target);
	} else {
		generator->send_target = NULL;
	}

	/* The GOTO VM uses a local opline variable. We need to set the opline
	 * variable in execute_data so we don't resume at an old position. */
	SAVE_OPLINE();

	ZEND_VM_RETURN();
}

static zend_never_inline ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV_EX  zend_fetch_var_address_helper_SPEC_CONST_UNUSED(ZEND_OPCODE_HANDLER_ARGS_EX int type)
{
	USE_OPLINE
	zval *varname;
	zval *retval;
	zend_string *name, *tmp_name;
	HashTable *target_symbol_table;

	SAVE_OPLINE();
	varname = RT_CONSTANT(opline, opline->op1);

	if (IS_CONST == IS_CONST) {
		name = Z_STR_P(varname);
	} else if (EXPECTED(Z_TYPE_P(varname) == IS_STRING)) {
		name = Z_STR_P(varname);
		tmp_name = NULL;
	} else {
		if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(varname) == IS_UNDEF)) {
			ZVAL_UNDEFINED_OP1();
		}
		name = zval_try_get_tmp_string(varname, &tmp_name);
		if (UNEXPECTED(!name)) {
			if (!(opline->extended_value & ZEND_FETCH_GLOBAL_LOCK)) {


			}
			ZVAL_UNDEF(EX_VAR(opline->result.var));
			HANDLE_EXCEPTION();
		}
	}

	target_symbol_table = zend_get_target_symbol_table(opline->extended_value EXECUTE_DATA_CC);
	retval = zend_hash_find_ex(target_symbol_table, name, IS_CONST == IS_CONST);
	if (retval == NULL) {
		if (UNEXPECTED(zend_string_equals(name, ZSTR_KNOWN(ZEND_STR_THIS)))) {
fetch_this:
			zend_fetch_this_var(type OPLINE_CC EXECUTE_DATA_CC);
			if (IS_CONST != IS_CONST) {
				zend_tmp_string_release(tmp_name);
			}
			ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
		}
		if (type == BP_VAR_W) {
			retval = zend_hash_add_new(target_symbol_table, name, &EG(uninitialized_zval));
		} else if (type == BP_VAR_IS || type == BP_VAR_UNSET) {
			retval = &EG(uninitialized_zval);
		} else {
			if (IS_CONST == IS_CV) {
				/* Keep name alive in case an error handler tries to free it. */
				zend_string_addref(name);
			}
			zend_error_unchecked(E_WARNING, "Undefined %svariable $%S",
				(opline->extended_value & ZEND_FETCH_GLOBAL ? "global " : ""), name);
			if (type == BP_VAR_RW && !EG(exception)) {
				retval = zend_hash_update(target_symbol_table, name, &EG(uninitialized_zval));
			} else {
				retval = &EG(uninitialized_zval);
			}
			if (IS_CONST == IS_CV) {
				zend_string_release(name);
			}
		}
	/* GLOBAL or $$name variable may be an INDIRECT pointer to CV */
	} else if (Z_TYPE_P(retval) == IS_INDIRECT) {
		retval = Z_INDIRECT_P(retval);
		if (Z_TYPE_P(retval) == IS_UNDEF) {
			if (UNEXPECTED(zend_string_equals(name, ZSTR_KNOWN(ZEND_STR_THIS)))) {
				goto fetch_this;
			}
			if (type == BP_VAR_W) {
				ZVAL_NULL(retval);
			} else if (type == BP_VAR_IS || type == BP_VAR_UNSET) {
				retval = &EG(uninitialized_zval);
			} else {
				zend_error_unchecked(E_WARNING, "Undefined %svariable $%S",
					(opline->extended_value & ZEND_FETCH_GLOBAL ? "global " : ""), name);
				if (type == BP_VAR_RW && !EG(exception)) {
					ZVAL_NULL(retval);
				} else {
					retval = &EG(uninitialized_zval);
				}
			}
		}
	}

	if (!(opline->extended_value & ZEND_FETCH_GLOBAL_LOCK)) {


	}

	if (IS_CONST != IS_CONST) {
		zend_tmp_string_release(tmp_name);
	}

	ZEND_ASSERT(retval != NULL);
	if (type == BP_VAR_R || type == BP_VAR_IS) {
		ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
	} else {
		ZVAL_INDIRECT(EX_VAR(opline->result.var), retval);
	}
	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_FETCH_R_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	ZEND_VM_DISPATCH_TO_HELPER(zend_fetch_var_address_helper_SPEC_CONST_UNUSED(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_EX BP_VAR_R));
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_FETCH_W_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	ZEND_VM_DISPATCH_TO_HELPER(zend_fetch_var_address_helper_SPEC_CONST_UNUSED(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_EX BP_VAR_W));
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_FETCH_RW_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	ZEND_VM_DISPATCH_TO_HELPER(zend_fetch_var_address_helper_SPEC_CONST_UNUSED(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_EX BP_VAR_RW));
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_FETCH_FUNC_ARG_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	int fetch_type =
		(UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) ?
			BP_VAR_W : BP_VAR_R;
	ZEND_VM_DISPATCH_TO_HELPER(zend_fetch_var_address_helper_SPEC_CONST_UNUSED(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_EX fetch_type));
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_FETCH_UNSET_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	ZEND_VM_DISPATCH_TO_HELPER(zend_fetch_var_address_helper_SPEC_CONST_UNUSED(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_EX BP_VAR_UNSET));
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_FETCH_IS_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	ZEND_VM_DISPATCH_TO_HELPER(zend_fetch_var_address_helper_SPEC_CONST_UNUSED(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_EX BP_VAR_IS));
}

/* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CONST|VAR) */
static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_FETCH_DIM_FUNC_ARG_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
#if 0
	USE_OPLINE
#endif

	if (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) {
		if ((IS_CONST & (IS_CONST|IS_TMP_VAR))) {
			ZEND_VM_TAIL_CALL(zend_use_tmp_in_write_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
		}
		ZEND_VM_TAIL_CALL(ZEND_NULL_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
	} else {
		if (IS_UNUSED == IS_UNUSED) {
			ZEND_VM_TAIL_CALL(zend_use_undef_in_read_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
		}
		ZEND_VM_TAIL_CALL(ZEND_NULL_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
	}
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_INIT_STATIC_METHOD_CALL_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *function_name;
	zend_class_entry *ce;
	uint32_t call_info;
	zend_function *fbc;
	zend_execute_data *call;

	SAVE_OPLINE();

	if (IS_CONST == IS_CONST) {
		/* no function found. try a static method in class */
		ce = CACHED_PTR(opline->result.num);
		if (UNEXPECTED(ce == NULL)) {
			ce = zend_fetch_class_by_name(Z_STR_P(RT_CONSTANT(opline, opline->op1)), Z_STR_P(RT_CONSTANT(opline, opline->op1) + 1), ZEND_FETCH_CLASS_DEFAULT | ZEND_FETCH_CLASS_EXCEPTION);
			if (UNEXPECTED(ce == NULL)) {


				HANDLE_EXCEPTION();
			}
			if (IS_UNUSED != IS_CONST) {
				CACHE_PTR(opline->result.num, ce);
			}
		}
	} else if (IS_CONST == IS_UNUSED) {
		ce = zend_fetch_class(NULL, opline->op1.num);
		if (UNEXPECTED(ce == NULL)) {


			HANDLE_EXCEPTION();
		}
	} else {
		ce = Z_CE_P(EX_VAR(opline->op1.var));
	}

	if (IS_CONST == IS_CONST &&
	    IS_UNUSED == IS_CONST &&
	    EXPECTED((fbc = CACHED_PTR(opline->result.num + sizeof(void*))) != NULL)) {
		/* nothing to do */
	} else if (IS_CONST != IS_CONST &&
	           IS_UNUSED == IS_CONST &&
	           EXPECTED(CACHED_PTR(opline->result.num) == ce)) {
		fbc = CACHED_PTR(opline->result.num + sizeof(void*));
	} else if (IS_UNUSED != IS_UNUSED) {
		function_name = NULL;
		if (IS_UNUSED != IS_CONST) {
			if (UNEXPECTED(Z_TYPE_P(function_name) != IS_STRING)) {
				do {
					if (IS_UNUSED & (IS_VAR|IS_CV) && Z_ISREF_P(function_name)) {
						function_name = Z_REFVAL_P(function_name);
						if (EXPECTED(Z_TYPE_P(function_name) == IS_STRING)) {
							break;
						}
					} else if (IS_UNUSED == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) {
						ZVAL_UNDEFINED_OP2();
						if (UNEXPECTED(EG(exception) != NULL)) {
							HANDLE_EXCEPTION();
						}
					}
					zend_throw_error(NULL, "Method name must be a string");


					HANDLE_EXCEPTION();
				} while (0);
			}
		}

		if (ce->get_static_method) {
			fbc = ce->get_static_method(ce, Z_STR_P(function_name));
		} else {
			fbc = zend_std_get_static_method(ce, Z_STR_P(function_name), ((IS_UNUSED == IS_CONST) ? (RT_CONSTANT(opline, opline->op2) + 1) : NULL));
		}
		if (UNEXPECTED(fbc == NULL)) {
			if (EXPECTED(!EG(exception))) {
				zend_undefined_method(ce, Z_STR_P(function_name));
			}


			HANDLE_EXCEPTION();
		}
		if (IS_UNUSED == IS_CONST &&
		    EXPECTED(!(fbc->common.fn_flags & (ZEND_ACC_CALL_VIA_TRAMPOLINE|ZEND_ACC_NEVER_CACHE))) &&
			EXPECTED(!(fbc->common.scope->ce_flags & ZEND_ACC_TRAIT))) {
			CACHE_POLYMORPHIC_PTR(opline->result.num, ce, fbc);
		}
		if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!RUN_TIME_CACHE(&fbc->op_array))) {
			init_func_run_time_cache(&fbc->op_array);
		}
		if (IS_UNUSED != IS_CONST) {


		}
	} else {
		if (UNEXPECTED(ce->constructor == NULL)) {
			zend_throw_error(NULL, "Cannot call constructor");
			HANDLE_EXCEPTION();
		}
		if (Z_TYPE(EX(This)) == IS_OBJECT && Z_OBJ(EX(This))->ce != ce->constructor->common.scope && (ce->constructor->common.fn_flags & ZEND_ACC_PRIVATE)) {
			zend_throw_error(NULL, "Cannot call private %s::__construct()", ZSTR_VAL(ce->name));
			HANDLE_EXCEPTION();
		}
		fbc = ce->constructor;
		if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!RUN_TIME_CACHE(&fbc->op_array))) {
			init_func_run_time_cache(&fbc->op_array);
		}
	}

	if (!(fbc->common.fn_flags & ZEND_ACC_STATIC)) {
		if (Z_TYPE(EX(This)) == IS_OBJECT && instanceof_function(Z_OBJCE(EX(This)), ce)) {
			ce = (zend_class_entry*)Z_OBJ(EX(This));
			call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_HAS_THIS;
		} else {
			zend_non_static_method_call(fbc);
			HANDLE_EXCEPTION();
		}
	} else {
		/* previous opcode is ZEND_FETCH_CLASS */
		if (IS_CONST == IS_UNUSED
		 && ((opline->op1.num & ZEND_FETCH_CLASS_MASK) == ZEND_FETCH_CLASS_PARENT ||
		     (opline->op1.num & ZEND_FETCH_CLASS_MASK) == ZEND_FETCH_CLASS_SELF)) {
			if (Z_TYPE(EX(This)) == IS_OBJECT) {
				ce = Z_OBJCE(EX(This));
			} else {
				ce = Z_CE(EX(This));
			}
		}
		call_info = ZEND_CALL_NESTED_FUNCTION;
	}

	call = zend_vm_stack_push_call_frame(call_info,
		fbc, opline->extended_value, ce);
	call->prev_execute_data = EX(call);
	EX(call) = call;

	ZEND_VM_NEXT_OPCODE();
}

static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_VERIFY_RETURN_TYPE_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	if (IS_CONST == IS_UNUSED) {
		SAVE_OPLINE();
		zend_verify_missing_return_type(EX(func));
		HANDLE_EXCEPTION();
	} else {
/* prevents "undefined variable opline" errors */
#if 0 || (IS_CONST != IS_UNUSED)
		USE_OPLINE
		zval *retval_ref, *retval_ptr;
		zend_arg_info *ret_info = EX(func)->common.arg_info - 1;
		retval_ref = retval_ptr = RT_CONSTANT(opline, opline->op1);

		if (IS_CONST == IS_CONST) {
			ZVAL_COPY(EX_VAR(opline->result.var), retval_ptr);
			retval_ref = retval_ptr = EX_VAR(opline->result.var);
		} else if (IS_CONST == IS_VAR) {
			if (UNEXPECTED(Z_TYPE_P(retval_ptr) == IS_INDIRECT)) {
				retval_ref = retval_ptr = Z_INDIRECT_P(retval_ptr);
			}
			ZVAL_DEREF(retval_ptr);
		} else if (IS_CONST == IS_CV) {
			ZVAL_DEREF(retval_ptr);
		}

		if (EXPECTED(ZEND_TYPE_CONTAINS_CODE(ret_info->type, Z_TYPE_P(retval_ptr)))) {
			ZEND_VM_NEXT_OPCODE();
		}

		if (IS_CONST == IS_CV && UNEXPECTED(Z_ISUNDEF_P(retval_ptr))) {
			SAVE_OPLINE();
			retval_ref = retval_ptr = ZVAL_UNDEFINED_OP1();
			if (UNEXPECTED(EG(exception))) {
				HANDLE_EXCEPTION();
			}
			if (ZEND_TYPE_FULL_MASK(ret_info->type) & MAY_BE_NULL) {
				ZEND_VM_NEXT_OPCODE();
			}
		}

		zend_reference *ref = NULL;
		if (UNEXPECTED(retval_ref != retval_ptr)) {
			if (UNEXPECTED(EX(func)->op_array.fn_flags & ZEND_ACC_RETURN_REFERENCE)) {
				ref = Z_REF_P(retval_ref);
			} else {
				/* A cast might happen - unwrap the reference if this is a by-value return */
				if (Z_REFCOUNT_P(retval_ref) == 1) {
					ZVAL_UNREF(retval_ref);
				} else {
					Z_DELREF_P(retval_ref);
					ZVAL_COPY(retval_ref, retval_ptr);
				}
				retval_ptr = retval_ref;
			}
		}

		SAVE_OPLINE();
		if (UNEXPECTED(!zend_check_type_slow(&ret_info->type, retval_ptr, ref, 1, 0))) {
			zend_verify_return_error(EX(func), retval_ptr);
			HANDLE_EXCEPTION();
		}
		ZEND_VM_NEXT_OPCODE();
#endif
	}
}

static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_SEND_VAL_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *value, *arg;

	if (IS_UNUSED == IS_CONST) {
		SAVE_OPLINE();
		zend_string *arg_name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
		uint32_t arg_num;
		arg = zend_handle_named_arg(&EX(call), arg_name, &arg_num, CACHE_ADDR(opline->result.num));
		if (UNEXPECTED(!arg)) {


			HANDLE_EXCEPTION();
		}
	} else {
		arg = ZEND_CALL_VAR(EX(call), opline->result.var);
	}

	value = RT_CONSTANT(opline, opline->op1);
	ZVAL_COPY_VALUE(arg, value);
	if (IS_CONST == IS_CONST) {
		if (UNEXPECTED(Z_OPT_REFCOUNTED_P(arg))) {
			Z_ADDREF_P(arg);
		}
	}
	ZEND_VM_NEXT_OPCODE();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_SEND_VAL_EX_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *value, *arg;
	uint32_t arg_num;

	if (IS_UNUSED == IS_CONST) {
		SAVE_OPLINE();
		zend_string *arg_name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
		arg = zend_handle_named_arg(&EX(call), arg_name, &arg_num, CACHE_ADDR(opline->result.num));
		if (UNEXPECTED(!arg)) {


			HANDLE_EXCEPTION();
		}
	} else {
		arg = ZEND_CALL_VAR(EX(call), opline->result.var);
		arg_num = opline->op2.num;
	}

	if (EXPECTED(0)) {
		if (QUICK_ARG_MUST_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
			goto send_val_by_ref;
		}
	} else if (ARG_MUST_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
send_val_by_ref:;
		ZEND_VM_DISPATCH_TO_HELPER(zend_cannot_pass_by_ref_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_EX arg_num, arg));
	}
	value = RT_CONSTANT(opline, opline->op1);
	ZVAL_COPY_VALUE(arg, value);
	if (IS_CONST == IS_CONST) {
		if (UNEXPECTED(Z_OPT_REFCOUNTED_P(arg))) {
			Z_ADDREF_P(arg);
		}
	}
	ZEND_VM_NEXT_OPCODE();
}

static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_SEND_VAL_EX_SPEC_CONST_UNUSED_QUICK_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *value, *arg;
	uint32_t arg_num;

	if (IS_UNUSED == IS_CONST) {
		SAVE_OPLINE();
		zend_string *arg_name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
		arg = zend_handle_named_arg(&EX(call), arg_name, &arg_num, CACHE_ADDR(opline->result.num));
		if (UNEXPECTED(!arg)) {


			HANDLE_EXCEPTION();
		}
	} else {
		arg = ZEND_CALL_VAR(EX(call), opline->result.var);
		arg_num = opline->op2.num;
	}

	if (EXPECTED(1)) {
		if (QUICK_ARG_MUST_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
			goto send_val_by_ref;
		}
	} else if (ARG_MUST_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
send_val_by_ref:;
		ZEND_VM_DISPATCH_TO_HELPER(zend_cannot_pass_by_ref_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_EX arg_num, arg));
	}
	value = RT_CONSTANT(opline, opline->op1);
	ZVAL_COPY_VALUE(arg, value);
	if (IS_CONST == IS_CONST) {
		if (UNEXPECTED(Z_OPT_REFCOUNTED_P(arg))) {
			Z_ADDREF_P(arg);
		}
	}
	ZEND_VM_NEXT_OPCODE();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_NEW_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *result;
	zend_function *constructor;
	zend_class_entry *ce;
	zend_execute_data *call;

	SAVE_OPLINE();
	if (IS_CONST == IS_CONST) {
		ce = CACHED_PTR(opline->op2.num);
		if (UNEXPECTED(ce == NULL)) {
			ce = zend_fetch_class_by_name(Z_STR_P(RT_CONSTANT(opline, opline->op1)), Z_STR_P(RT_CONSTANT(opline, opline->op1) + 1), ZEND_FETCH_CLASS_DEFAULT | ZEND_FETCH_CLASS_EXCEPTION);
			if (UNEXPECTED(ce == NULL)) {
				ZVAL_UNDEF(EX_VAR(opline->result.var));
				HANDLE_EXCEPTION();
			}
			CACHE_PTR(opline->op2.num, ce);
		}
	} else if (IS_CONST == IS_UNUSED) {
		ce = zend_fetch_class(NULL, opline->op1.num);
		if (UNEXPECTED(ce == NULL)) {
			ZVAL_UNDEF(EX_VAR(opline->result.var));
			HANDLE_EXCEPTION();
		}
	} else {
		ce = Z_CE_P(EX_VAR(opline->op1.var));
	}

	result = EX_VAR(opline->result.var);
	if (UNEXPECTED(object_init_ex(result, ce) != SUCCESS)) {
		ZVAL_UNDEF(result);
		HANDLE_EXCEPTION();
	}

	constructor = Z_OBJ_HT_P(result)->get_constructor(Z_OBJ_P(result));
	if (constructor == NULL) {
		/* If there are no arguments, skip over the DO_FCALL opcode. We check if the next
		 * opcode is DO_FCALL in case EXT instructions are used. */
		if (EXPECTED(opline->extended_value == 0 && (opline+1)->opcode == ZEND_DO_FCALL)) {
			ZEND_VM_NEXT_OPCODE_EX(1, 2);
		}

		if (UNEXPECTED(EG(exception))) {
			HANDLE_EXCEPTION();
		}

		/* Perform a dummy function call */
		call = zend_vm_stack_push_call_frame(
			ZEND_CALL_FUNCTION, (zend_function *) &zend_pass_function,
			opline->extended_value, NULL);
	} else {
		if (EXPECTED(constructor->type == ZEND_USER_FUNCTION) && UNEXPECTED(!RUN_TIME_CACHE(&constructor->op_array))) {
			init_func_run_time_cache(&constructor->op_array);
		}
		/* We are not handling overloaded classes right now */
		call = zend_vm_stack_push_call_frame(
			ZEND_CALL_FUNCTION | ZEND_CALL_RELEASE_THIS | ZEND_CALL_HAS_THIS,
			constructor,
			opline->extended_value,
			Z_OBJ_P(result));
		Z_ADDREF_P(result);
	}

	call->prev_execute_data = EX(call);
	EX(call) = call;
	ZEND_VM_NEXT_OPCODE();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *expr_ptr, new_expr;

	SAVE_OPLINE();
	if ((IS_CONST == IS_VAR || IS_CONST == IS_CV) &&
	    UNEXPECTED(opline->extended_value & ZEND_ARRAY_ELEMENT_REF)) {
		expr_ptr = zend_get_bad_ptr();
		if (Z_ISREF_P(expr_ptr)) {
			Z_ADDREF_P(expr_ptr);
		} else {
			ZVAL_MAKE_REF_EX(expr_ptr, 2);
		}


	} else {
		expr_ptr = RT_CONSTANT(opline, opline->op1);
		if (IS_CONST == IS_TMP_VAR) {
			/* pass */
		} else if (IS_CONST == IS_CONST) {
			Z_TRY_ADDREF_P(expr_ptr);
		} else if (IS_CONST == IS_CV) {
			ZVAL_DEREF(expr_ptr);
			Z_TRY_ADDREF_P(expr_ptr);
		} else /* if (IS_CONST == IS_VAR) */ {
			if (UNEXPECTED(Z_ISREF_P(expr_ptr))) {
				zend_refcounted *ref = Z_COUNTED_P(expr_ptr);

				expr_ptr = Z_REFVAL_P(expr_ptr);
				if (UNEXPECTED(GC_DELREF(ref) == 0)) {
					ZVAL_COPY_VALUE(&new_expr, expr_ptr);
					expr_ptr = &new_expr;
					efree_size(ref, sizeof(zend_reference));
				} else if (Z_OPT_REFCOUNTED_P(expr_ptr)) {
					Z_ADDREF_P(expr_ptr);
				}
			}
		}
	}

	if (IS_UNUSED != IS_UNUSED) {
		zval *offset = NULL;
		zend_string *str;
		zend_ulong hval;

add_again:
		if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) {
			str = Z_STR_P(offset);
			if (IS_UNUSED != IS_CONST) {
				if (ZEND_HANDLE_NUMERIC(str, hval)) {
					goto num_index;
				}
			}
str_index:
			zend_hash_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), str, expr_ptr);
		} else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
			hval = Z_LVAL_P(offset);
num_index:
			zend_hash_index_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), hval, expr_ptr);
		} else if ((IS_UNUSED & (IS_VAR|IS_CV)) && EXPECTED(Z_TYPE_P(offset) == IS_REFERENCE)) {
			offset = Z_REFVAL_P(offset);
			goto add_again;
		} else if (UNEXPECTED(Z_TYPE_P(offset) == IS_NULL)) {
			zval tmp;
			if (IS_CONST == IS_CV || IS_CONST == IS_VAR) {
				ZVAL_COPY(&tmp, expr_ptr);
			}
			zend_error(E_DEPRECATED, "Using null as an array offset is deprecated, use an empty string instead");
			if (IS_CONST == IS_CV || IS_CONST == IS_VAR) {
				/* A userland error handler can do funky things to the expression, so reset it */
				zval_ptr_dtor(expr_ptr);
				ZVAL_COPY_VALUE(expr_ptr, &tmp);
			}
			if (UNEXPECTED(EG(exception))) {
				zval_ptr_dtor_nogc(expr_ptr);
				HANDLE_EXCEPTION();
			}
			str = ZSTR_EMPTY_ALLOC();
			goto str_index;
		} else if (Z_TYPE_P(offset) == IS_DOUBLE) {
			hval = zend_dval_to_lval_safe(Z_DVAL_P(offset));
			goto num_index;
		} else if (Z_TYPE_P(offset) == IS_FALSE) {
			hval = 0;
			goto num_index;
		} else if (Z_TYPE_P(offset) == IS_TRUE) {
			hval = 1;
			goto num_index;
		} else if (Z_TYPE_P(offset) == IS_RESOURCE) {
			zend_use_resource_as_offset(offset);
			hval = Z_RES_HANDLE_P(offset);
			goto num_index;
		} else if (IS_UNUSED == IS_CV && Z_TYPE_P(offset) == IS_UNDEF) {
			ZVAL_UNDEFINED_OP2();
			str = ZSTR_EMPTY_ALLOC();
			goto str_index;
		} else {
			zend_illegal_array_offset_access(offset);
			zval_ptr_dtor_nogc(expr_ptr);
		}


	} else {
		if (!zend_hash_next_index_insert(Z_ARRVAL_P(EX_VAR(opline->result.var)), expr_ptr)) {
			zend_cannot_add_element();
			zval_ptr_dtor_nogc(expr_ptr);
		}
	}
	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_INIT_ARRAY_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	zval *array;
	uint32_t size;
	USE_OPLINE

	SAVE_OPLINE();
	array = EX_VAR(opline->result.var);
	if (IS_CONST != IS_UNUSED) {
		size = opline->extended_value >> ZEND_ARRAY_SIZE_SHIFT;
		ZVAL_ARR(array, zend_new_array(size));
		/* Explicitly initialize array as not-packed if flag is set */
		if (opline->extended_value & ZEND_ARRAY_NOT_PACKED) {
			zend_hash_real_init_mixed(Z_ARRVAL_P(array));
		}
		ZEND_VM_TAIL_CALL(ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
	} else {
		ZVAL_ARR(array, zend_new_array(0));
		ZEND_VM_NEXT_OPCODE();
	}
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_UNSET_VAR_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *varname;
	zend_string *name, *tmp_name;
	HashTable *target_symbol_table;

	SAVE_OPLINE();

	varname = RT_CONSTANT(opline, opline->op1);

	if (IS_CONST == IS_CONST) {
		name = Z_STR_P(varname);
	} else if (EXPECTED(Z_TYPE_P(varname) == IS_STRING)) {
		name = Z_STR_P(varname);
		tmp_name = NULL;
	} else {
		if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(varname) == IS_UNDEF)) {
			varname = ZVAL_UNDEFINED_OP1();
		}
		name = zval_try_get_tmp_string(varname, &tmp_name);
		if (UNEXPECTED(!name)) {


			HANDLE_EXCEPTION();
		}
	}

	target_symbol_table = zend_get_target_symbol_table(opline->extended_value EXECUTE_DATA_CC);
	zend_hash_del_ind(target_symbol_table, name);

	if (IS_CONST != IS_CONST) {
		zend_tmp_string_release(tmp_name);
	}


	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

/* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CLASS_FETCH|CONST|VAR) */
static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_ISSET_ISEMPTY_VAR_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *value;
	bool result;
	zval *varname;
	zend_string *name, *tmp_name;
	HashTable *target_symbol_table;

	SAVE_OPLINE();
	varname = RT_CONSTANT(opline, opline->op1);
	if (IS_CONST == IS_CONST) {
		name = Z_STR_P(varname);
	} else {
		name = zval_get_tmp_string(varname, &tmp_name);
	}

	target_symbol_table = zend_get_target_symbol_table(opline->extended_value EXECUTE_DATA_CC);
	value = zend_hash_find_ex(target_symbol_table, name, IS_CONST == IS_CONST);

	if (IS_CONST != IS_CONST) {
		zend_tmp_string_release(tmp_name);
	}


	if (!value) {
		result = (opline->extended_value & ZEND_ISEMPTY);
	} else {
		if (Z_TYPE_P(value) == IS_INDIRECT) {
			value = Z_INDIRECT_P(value);
		}
		if (!(opline->extended_value & ZEND_ISEMPTY)) {
			if (Z_ISREF_P(value)) {
				value = Z_REFVAL_P(value);
			}
			result = Z_TYPE_P(value) > IS_NULL;
		} else {
			result = !i_zend_is_true(value);
		}
	}

	ZEND_VM_SMART_BRANCH(result, true);
}

/* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CLASS_FETCH|CONST|VAR) */
static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_YIELD_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE

	zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C);

	SAVE_OPLINE();
	if (UNEXPECTED(generator->flags & ZEND_GENERATOR_FORCED_CLOSE)) {
		ZEND_VM_TAIL_CALL(zend_yield_in_closed_generator_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
	}

	/* Destroy the previously yielded value */
	zval_ptr_dtor(&generator->value);

	/* Destroy the previously yielded key */
	zval_ptr_dtor(&generator->key);

	/* Set the new yielded value */
	if (IS_CONST != IS_UNUSED) {
		if (UNEXPECTED(EX(func)->op_array.fn_flags & ZEND_ACC_RETURN_REFERENCE)) {
			/* Constants and temporary variables aren't yieldable by reference,
			 * but we still allow them with a notice. */
			if (IS_CONST & (IS_CONST|IS_TMP_VAR)) {
				zval *value;

				zend_error(E_NOTICE, "Only variable references should be yielded by reference");

				value = RT_CONSTANT(opline, opline->op1);
				ZVAL_COPY_VALUE(&generator->value, value);
				if (IS_CONST == IS_CONST) {
					if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
						Z_ADDREF(generator->value);
					}
				}
			} else {
				zval *value_ptr = zend_get_bad_ptr();

				/* If a function call result is yielded and the function did
				 * not return by reference we throw a notice. */
				do {
					if (IS_CONST == IS_VAR) {
						ZEND_ASSERT(value_ptr != &EG(uninitialized_zval));
						if (opline->extended_value == ZEND_RETURNS_FUNCTION
						 && !Z_ISREF_P(value_ptr)) {
							zend_error(E_NOTICE, "Only variable references should be yielded by reference");
							ZVAL_COPY(&generator->value, value_ptr);
							break;
						}
					}
					if (Z_ISREF_P(value_ptr)) {
						Z_ADDREF_P(value_ptr);
					} else {
						ZVAL_MAKE_REF_EX(value_ptr, 2);
					}
					ZVAL_REF(&generator->value, Z_REF_P(value_ptr));
				} while (0);


			}
		} else {
			zval *value = RT_CONSTANT(opline, opline->op1);

			/* Consts, temporary variables and references need copying */
			if (IS_CONST == IS_CONST) {
				ZVAL_COPY_VALUE(&generator->value, value);
				if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
					Z_ADDREF(generator->value);
				}
			} else if (IS_CONST == IS_TMP_VAR) {
				ZVAL_COPY_VALUE(&generator->value, value);
			} else if ((IS_CONST & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) {
				ZVAL_COPY(&generator->value, Z_REFVAL_P(value));


			} else {
				ZVAL_COPY_VALUE(&generator->value, value);
				if (IS_CONST == IS_CV) {
					if (Z_OPT_REFCOUNTED_P(value)) Z_ADDREF_P(value);
				}
			}
		}
	} else {
		/* If no value was specified yield null */
		ZVAL_NULL(&generator->value);
	}

	/* Set the new yielded key */
	if (IS_UNUSED != IS_UNUSED) {
		zval *key = NULL;
		if ((IS_UNUSED & (IS_CV|IS_VAR)) && UNEXPECTED(Z_TYPE_P(key) == IS_REFERENCE)) {
			key = Z_REFVAL_P(key);
		}
		ZVAL_COPY(&generator->key, key);


		if (Z_TYPE(generator->key) == IS_LONG
		    && Z_LVAL(generator->key) > generator->largest_used_integer_key
		) {
			generator->largest_used_integer_key = Z_LVAL(generator->key);
		}
	} else {
		/* If no key was specified we use auto-increment keys */
		generator->largest_used_integer_key++;
		ZVAL_LONG(&generator->key, generator->largest_used_integer_key);
	}

	if (RETURN_VALUE_USED(opline)) {
		/* If the return value of yield is used set the send
		 * target and initialize it to NULL */
		generator->send_target = EX_VAR(opline->result.var);
		ZVAL_NULL(generator->send_target);
	} else {
		generator->send_target = NULL;
	}

	/* The GOTO VM uses a local opline variable. We need to set the opline
	 * variable in execute_data so we don't resume at an old position. */
	SAVE_OPLINE();

	ZEND_VM_RETURN();
}

static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_MATCH_ERROR_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op;

	SAVE_OPLINE();
	op = RT_CONSTANT(opline, opline->op1);
	zend_match_unhandled_error(op);
	HANDLE_EXCEPTION();
}

static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_COUNT_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1;
	zend_long count;

	SAVE_OPLINE();
	op1 = RT_CONSTANT(opline, opline->op1);

	while (1) {
		if (Z_TYPE_P(op1) == IS_ARRAY) {
			count = zend_hash_num_elements(Z_ARRVAL_P(op1));
			break;
		} else if (Z_TYPE_P(op1) == IS_OBJECT) {
			zend_object *zobj = Z_OBJ_P(op1);

			/* first, we check if the handler is defined */
			if (zobj->handlers->count_elements) {
				if (SUCCESS == zobj->handlers->count_elements(zobj, &count)) {
					break;
				}
				if (UNEXPECTED(EG(exception))) {
					count = 0;
					break;
				}
			}

			/* if not and the object implements Countable we call its count() method */
			if (zend_class_implements_interface(zobj->ce, zend_ce_countable)) {
				zval retval;

				zend_function *count_fn = zend_hash_find_ptr(&zobj->ce->function_table, ZSTR_KNOWN(ZEND_STR_COUNT));
				zend_call_known_instance_method_with_0_params(count_fn, zobj, &retval);
				count = zval_get_long(&retval);
				zval_ptr_dtor(&retval);
				break;
			}

			/* If There's no handler and it doesn't implement Countable then emit a TypeError */
		} else if ((IS_CONST & (IS_VAR|IS_CV)) != 0 && Z_TYPE_P(op1) == IS_REFERENCE) {
			op1 = Z_REFVAL_P(op1);
			continue;
		} else if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
			ZVAL_UNDEFINED_OP1();
		}
		count = 0;
		zend_type_error("%s(): Argument #1 ($value) must be of type Countable|array, %s given", opline->extended_value ? "sizeof" : "count", zend_zval_value_name(op1));
		break;
	}

	ZVAL_LONG(EX_VAR(opline->result.var), count);


	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_GET_CLASS_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE

	if (IS_CONST == IS_UNUSED) {
		SAVE_OPLINE();
		if (UNEXPECTED(!EX(func)->common.scope)) {
			zend_throw_error(NULL, "get_class() without arguments must be called from within a class");
			ZVAL_UNDEF(EX_VAR(opline->result.var));
			HANDLE_EXCEPTION();
		} else {
			zend_error(E_DEPRECATED, "Calling get_class() without arguments is deprecated");
			ZVAL_STR_COPY(EX_VAR(opline->result.var), EX(func)->common.scope->name);
			if (UNEXPECTED(EG(exception))) {
				HANDLE_EXCEPTION();
			}
			ZEND_VM_NEXT_OPCODE();
		}
	} else {
		zval *op1;

		SAVE_OPLINE();
		op1 = RT_CONSTANT(opline, opline->op1);
		while (1) {
			if (Z_TYPE_P(op1) == IS_OBJECT) {
				ZVAL_STR_COPY(EX_VAR(opline->result.var), Z_OBJCE_P(op1)->name);
			} else if ((IS_CONST & (IS_VAR|IS_CV)) != 0 && Z_TYPE_P(op1) == IS_REFERENCE) {
				op1 = Z_REFVAL_P(op1);
				continue;
			} else {
				if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
					ZVAL_UNDEFINED_OP1();
				}
				zend_type_error("get_class(): Argument #1 ($object) must be of type object, %s given", zend_zval_value_name(op1));
				ZVAL_UNDEF(EX_VAR(opline->result.var));
			}
			break;
		}


		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
	}
}

static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_GET_TYPE_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1;
	zend_string *type;

	SAVE_OPLINE();
	op1 = RT_CONSTANT(opline, opline->op1);
	type = zend_zval_get_legacy_type(op1);
	if (EXPECTED(type)) {
		ZVAL_INTERNED_STR(EX_VAR(opline->result.var), type);
	} else {
		ZVAL_STRING(EX_VAR(opline->result.var), "unknown type");
	}


	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_FUNC_GET_ARGS_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zend_array *ht;
	uint32_t arg_count, result_size, skip;

	arg_count = EX_NUM_ARGS();
	if (IS_CONST == IS_CONST) {
		skip = Z_LVAL_P(RT_CONSTANT(opline, opline->op1));
		if (arg_count < skip) {
			result_size = 0;
		} else {
			result_size = arg_count - skip;
		}
	} else {
		skip = 0;
		result_size = arg_count;
	}

	if (result_size) {
		SAVE_OPLINE();
		uint32_t first_extra_arg = EX(func)->op_array.num_args;

		ht = zend_new_array(result_size);
		ZVAL_ARR(EX_VAR(opline->result.var), ht);
		zend_hash_real_init_packed(ht);
		ZEND_HASH_FILL_PACKED(ht) {
			zval *p, *q;
			uint32_t i = skip;
			p = EX_VAR_NUM(i);
			if (arg_count > first_extra_arg) {
				while (i < first_extra_arg) {
					q = p;
					if (EXPECTED(Z_TYPE_INFO_P(q) != IS_UNDEF)) {
						ZVAL_DEREF(q);
						if (Z_OPT_REFCOUNTED_P(q)) {
							Z_ADDREF_P(q);
						}
						ZEND_HASH_FILL_SET(q);
					} else {
						ZEND_HASH_FILL_SET_NULL();
					}
					ZEND_HASH_FILL_NEXT();
					p++;
					i++;
				}
				if (skip < first_extra_arg) {
					skip = 0;
				} else {
					skip -= first_extra_arg;
				}
				p = EX_VAR_NUM(EX(func)->op_array.last_var + EX(func)->op_array.T + skip);
			}
			while (i < arg_count) {
				q = p;
				if (EXPECTED(Z_TYPE_INFO_P(q) != IS_UNDEF)) {
					ZVAL_DEREF(q);
					if (Z_OPT_REFCOUNTED_P(q)) {
						Z_ADDREF_P(q);
					}
					ZEND_HASH_FILL_SET(q);
				} else {
					ZEND_HASH_FILL_SET_NULL();
				}
				ZEND_HASH_FILL_NEXT();
				p++;
				i++;
			}
		} ZEND_HASH_FILL_END();
		ht->nNumOfElements = result_size;
	} else {
		ZVAL_EMPTY_ARRAY(EX_VAR(opline->result.var));
	}
	ZEND_VM_NEXT_OPCODE();
}

/* Contrary to what its name indicates, ZEND_COPY_TMP may receive and define references. */
static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_INIT_PARENT_PROPERTY_HOOK_CALL_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	SAVE_OPLINE();

	zend_class_entry *ce = EX(func)->common.scope;
	ZEND_ASSERT(ce);

	zend_class_entry *parent_ce = ce->parent;
	if (!parent_ce) {
		zend_throw_error(NULL, "Cannot use \"parent\" when current class scope has no parent");
		UNDEF_RESULT();
		HANDLE_EXCEPTION();
	}

	zend_string *property_name = Z_STR_P(RT_CONSTANT(opline, opline->op1));
	zend_property_hook_kind hook_kind = opline->op2.num;

	zend_property_info *prop_info = zend_hash_find_ptr(&parent_ce->properties_info, property_name);
	if (!prop_info) {
		zend_throw_error(NULL, "Undefined property %s::$%s", ZSTR_VAL(parent_ce->name), ZSTR_VAL(property_name));
		UNDEF_RESULT();
		HANDLE_EXCEPTION();
	}
	if (prop_info->flags & ZEND_ACC_PRIVATE) {
		zend_throw_error(NULL, "Cannot access private property %s::$%s", ZSTR_VAL(parent_ce->name), ZSTR_VAL(property_name));
		UNDEF_RESULT();
		HANDLE_EXCEPTION();
	}

	zend_function **hooks = prop_info->hooks;
	zend_function *hook = hooks ? hooks[hook_kind] : NULL;

	zend_execute_data *call;
	if (hook) {
		call = zend_vm_stack_push_call_frame(
			ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_HAS_THIS,
			hook, opline->extended_value, Z_OBJ_P(ZEND_THIS));
		if (EXPECTED(hook->type == ZEND_USER_FUNCTION)) {
			if (UNEXPECTED(!RUN_TIME_CACHE(&hook->op_array))) {
				init_func_run_time_cache(&hook->op_array);
			}
			call->run_time_cache = RUN_TIME_CACHE(&hook->op_array);
		}
	} else {
		zend_function *fbc = zend_get_property_hook_trampoline(prop_info, hook_kind, property_name);
		call = zend_vm_stack_push_call_frame(
			ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_HAS_THIS,
			fbc, opline->extended_value, Z_OBJ_P(ZEND_THIS));
	}

	call->prev_execute_data = EX(call);
	EX(call) = call;
	ZEND_VM_NEXT_OPCODE();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_DIV_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;

	SAVE_OPLINE();
	op1 = RT_CONSTANT(opline, opline->op1);
	op2 = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
	div_function(EX_VAR(opline->result.var), op1, op2);




	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_POW_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;

	SAVE_OPLINE();
	op1 = RT_CONSTANT(opline, opline->op1);
	op2 = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
	pow_function(EX_VAR(opline->result.var), op1, op2);




	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_CONCAT_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;

	op1 = RT_CONSTANT(opline, opline->op1);
	op2 = EX_VAR(opline->op2.var);

	if ((IS_CONST == IS_CONST || EXPECTED(Z_TYPE_P(op1) == IS_STRING)) &&
	    (IS_CV == IS_CONST || EXPECTED(Z_TYPE_P(op2) == IS_STRING))) {
		zend_string *op1_str = Z_STR_P(op1);
		zend_string *op2_str = Z_STR_P(op2);
		zend_string *str;
		uint32_t flags = ZSTR_GET_COPYABLE_CONCAT_PROPERTIES_BOTH(op1_str, op2_str);

		if (IS_CONST != IS_CONST && UNEXPECTED(ZSTR_LEN(op1_str) == 0)) {
			if (IS_CV == IS_CONST || IS_CV == IS_CV) {
				ZVAL_STR_COPY(EX_VAR(opline->result.var), op2_str);
			} else {
				ZVAL_STR(EX_VAR(opline->result.var), op2_str);
			}
			if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
				zend_string_release_ex(op1_str, 0);
			}
		} else if (IS_CV != IS_CONST && UNEXPECTED(ZSTR_LEN(op2_str) == 0)) {
			if (IS_CONST == IS_CONST || IS_CONST == IS_CV) {
				ZVAL_STR_COPY(EX_VAR(opline->result.var), op1_str);
			} else {
				ZVAL_STR(EX_VAR(opline->result.var), op1_str);
			}
			if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
				zend_string_release_ex(op2_str, 0);
			}
		} else if (IS_CONST != IS_CONST && IS_CONST != IS_CV &&
		    !ZSTR_IS_INTERNED(op1_str) && GC_REFCOUNT(op1_str) == 1) {
			size_t len = ZSTR_LEN(op1_str);

			if (UNEXPECTED(len > ZSTR_MAX_LEN - ZSTR_LEN(op2_str))) {
				zend_error_noreturn(E_ERROR, "Integer overflow in memory allocation");
			}
			str = zend_string_extend(op1_str, len + ZSTR_LEN(op2_str), 0);
			memcpy(ZSTR_VAL(str) + len, ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
			GC_ADD_FLAGS(str, flags);
			ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
			if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
				zend_string_release_ex(op2_str, 0);
			}
		} else {
			str = zend_string_alloc(ZSTR_LEN(op1_str) + ZSTR_LEN(op2_str), 0);
			memcpy(ZSTR_VAL(str), ZSTR_VAL(op1_str), ZSTR_LEN(op1_str));
			memcpy(ZSTR_VAL(str) + ZSTR_LEN(op1_str), ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
			GC_ADD_FLAGS(str, flags);
			ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
			if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
				zend_string_release_ex(op1_str, 0);
			}
			if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
				zend_string_release_ex(op2_str, 0);
			}
		}
		ZEND_VM_NEXT_OPCODE();
	} else {
		SAVE_OPLINE();

		if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
			op1 = ZVAL_UNDEFINED_OP1();
		}
		if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(op2) == IS_UNDEF)) {
			op2 = ZVAL_UNDEFINED_OP2();
		}
		concat_function(EX_VAR(opline->result.var), op1, op2);




		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
	}
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_SPACESHIP_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;

	SAVE_OPLINE();
	op1 = RT_CONSTANT(opline, opline->op1);
	op2 = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
	compare_function(EX_VAR(opline->result.var), op1, op2);




	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_FETCH_DIM_R_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *container, *dim, *value;

	SAVE_OPLINE();
	container = RT_CONSTANT(opline, opline->op1);
	dim = EX_VAR(opline->op2.var);
	if (IS_CONST != IS_CONST) {
		if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
fetch_dim_r_array:
			value = zend_fetch_dimension_address_inner(Z_ARRVAL_P(container), dim, IS_CV, BP_VAR_R EXECUTE_DATA_CC);
			ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
		} else if (EXPECTED(Z_TYPE_P(container) == IS_REFERENCE)) {
			container = Z_REFVAL_P(container);
			if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
				goto fetch_dim_r_array;
			} else {
				goto fetch_dim_r_slow;
			}
		} else {
fetch_dim_r_slow:
			if (IS_CV == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
				dim++;
			}
			zend_fetch_dimension_address_read_R_slow(container, dim OPLINE_CC EXECUTE_DATA_CC);
		}
	} else {
		zend_fetch_dimension_address_read_R(container, dim, IS_CV OPLINE_CC EXECUTE_DATA_CC);
	}




	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_FETCH_DIM_IS_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *container;

	SAVE_OPLINE();
	container = RT_CONSTANT(opline, opline->op1);
	zend_fetch_dimension_address_read_IS(container, EX_VAR(opline->op2.var), IS_CV OPLINE_CC EXECUTE_DATA_CC);




	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_FETCH_DIM_FUNC_ARG_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
#if 0
	USE_OPLINE
#endif

	if (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) {
		if ((IS_CONST & (IS_CONST|IS_TMP_VAR))) {
			ZEND_VM_TAIL_CALL(zend_use_tmp_in_write_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
		}
		ZEND_VM_TAIL_CALL(ZEND_NULL_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
	} else {
		if (IS_CV == IS_UNUSED) {
			ZEND_VM_TAIL_CALL(zend_use_undef_in_read_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
		}
		ZEND_VM_TAIL_CALL(ZEND_FETCH_DIM_R_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
	}
}

static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_FETCH_OBJ_R_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *container;
	void **cache_slot = NULL;

	SAVE_OPLINE();
	container = RT_CONSTANT(opline, opline->op1);

	if (IS_CONST == IS_CONST ||
	    (IS_CONST != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
		do {
			if ((IS_CONST & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
				container = Z_REFVAL_P(container);
				if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
					break;
				}
			}
			if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
				ZVAL_UNDEFINED_OP1();
			}
			zend_wrong_property_read(container, _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC));
			ZVAL_NULL(EX_VAR(opline->result.var));
			goto fetch_obj_r_finish;
		} while (0);
	}

	/* here we are sure we are dealing with an object */
	do {
		zend_object *zobj = Z_OBJ_P(container);
		zend_string *name, *tmp_name;
		zval *retval;

		if (IS_CV == IS_CONST) {
			cache_slot = CACHE_ADDR(opline->extended_value & ~ZEND_FETCH_REF /* FUNC_ARG fetch may contain it */);

			if (EXPECTED(zobj->ce == CACHED_PTR_EX(cache_slot))) {
				uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);

				if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
fetch_obj_r_simple:
					retval = OBJ_PROP(zobj, prop_offset);
					if (EXPECTED(Z_TYPE_INFO_P(retval) != IS_UNDEF)) {
						if (0 || (IS_CONST & (IS_TMP_VAR|IS_VAR)) != 0) {
							goto fetch_obj_r_copy;
						} else {
fetch_obj_r_fast_copy:
							ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
							ZEND_VM_NEXT_OPCODE();
						}
					}
				} else if (UNEXPECTED(IS_HOOKED_PROPERTY_OFFSET(prop_offset))) {
					zend_property_info *prop_info = CACHED_PTR_EX(cache_slot + 2);
					if (ZEND_IS_PROPERTY_HOOK_SIMPLE_READ(prop_offset)) {
						prop_offset = prop_info->offset;
						goto fetch_obj_r_simple;
					} else if (EXPECTED(ZEND_IS_PROPERTY_HOOK_SIMPLE_GET(prop_offset))) {
						zend_function *hook = prop_info->hooks[ZEND_PROPERTY_HOOK_GET];
						ZEND_ASSERT(hook->type == ZEND_USER_FUNCTION);
						ZEND_ASSERT(RUN_TIME_CACHE(&hook->op_array));

						uint32_t call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_HAS_THIS;
						if (IS_CONST & IS_CV) {
							GC_ADDREF(zobj);
						}
						if (IS_CONST & (IS_CV|IS_VAR|IS_TMP_VAR)) {
							call_info |= ZEND_CALL_RELEASE_THIS;
						}
						zend_execute_data *call = zend_vm_stack_push_call_frame(call_info, hook, 0, zobj);
						call->prev_execute_data = execute_data;
						call->call = NULL;
						call->return_value = EX_VAR(opline->result.var);
						call->run_time_cache = RUN_TIME_CACHE(&hook->op_array);

						execute_data = call;
						EG(current_execute_data) = execute_data;
						zend_init_cvs(0, hook->op_array.last_var EXECUTE_DATA_CC);

#if defined(ZEND_VM_IP_GLOBAL_REG) && ((ZEND_VM_KIND == ZEND_VM_KIND_CALL) || (ZEND_VM_KIND == ZEND_VM_KIND_HYBRID))
						opline = hook->op_array.opcodes;
#else
						EX(opline) = hook->op_array.opcodes;
#endif
						LOAD_OPLINE_EX();




						ZEND_VM_ENTER_EX();
					}
					/* Fall through to read_property for hooks. */
				} else if (EXPECTED(zobj->properties != NULL)) {
					ZEND_ASSERT(IS_DYNAMIC_PROPERTY_OFFSET(prop_offset));
					name = Z_STR_P(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC));
					if (!IS_UNKNOWN_DYNAMIC_PROPERTY_OFFSET(prop_offset)) {
						uintptr_t idx = ZEND_DECODE_DYN_PROP_OFFSET(prop_offset);

						if (EXPECTED(idx < zobj->properties->nNumUsed * sizeof(Bucket))) {
							Bucket *p = (Bucket*)((char*)zobj->properties->arData + idx);

							if (EXPECTED(p->key == name) ||
							    (EXPECTED(p->h == ZSTR_H(name)) &&
							     EXPECTED(p->key != NULL) &&
							     EXPECTED(zend_string_equal_content(p->key, name)))) {
								retval = &p->val;
								if (0 || (IS_CONST & (IS_TMP_VAR|IS_VAR)) != 0) {
									goto fetch_obj_r_copy;
								} else {
									goto fetch_obj_r_fast_copy;
								}
							}
						}
						CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_DYNAMIC_PROPERTY_OFFSET);
					}
					retval = zend_hash_find_known_hash(zobj->properties, name);
					if (EXPECTED(retval)) {
						uintptr_t idx = (char*)retval - (char*)zobj->properties->arData;
						CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_ENCODE_DYN_PROP_OFFSET(idx));
						if (0 || (IS_CONST & (IS_TMP_VAR|IS_VAR)) != 0) {
							goto fetch_obj_r_copy;
						} else {
							goto fetch_obj_r_fast_copy;
						}
					}
				}
			}
			name = Z_STR_P(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC));
		} else {
			name = zval_try_get_tmp_string(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC), &tmp_name);
			if (UNEXPECTED(!name)) {
				ZVAL_UNDEF(EX_VAR(opline->result.var));
				break;
			}
		}

#if ZEND_DEBUG
		/* For non-standard object handlers, verify a declared property type in debug builds.
		 * Fetch prop_info before calling read_property(), as it may deallocate the object. */
		zend_property_info *prop_info = NULL;
		if (zobj->handlers->read_property != zend_std_read_property) {
			prop_info = zend_get_property_info(zobj->ce, name, /* silent */ true);
		}
#endif
		retval = zobj->handlers->read_property(zobj, name, BP_VAR_R, cache_slot, EX_VAR(opline->result.var));
#if ZEND_DEBUG
		if (!EG(exception) && prop_info && prop_info != ZEND_WRONG_PROPERTY_INFO
				&& ZEND_TYPE_IS_SET(prop_info->type)) {
			ZVAL_OPT_DEREF(retval);
			zend_verify_property_type(prop_info, retval, /* strict */ true);
		}
#endif

		if (IS_CV != IS_CONST) {
			zend_tmp_string_release(tmp_name);
		}

		if (retval != EX_VAR(opline->result.var)) {
fetch_obj_r_copy:
			ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
		} else if (UNEXPECTED(Z_ISREF_P(retval))) {
			zend_unwrap_reference(retval);
		}
	} while (0);

fetch_obj_r_finish:




	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_FETCH_OBJ_IS_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *container;
	void **cache_slot = NULL;

	SAVE_OPLINE();
	container = RT_CONSTANT(opline, opline->op1);

	if (IS_CONST == IS_CONST ||
	    (IS_CONST != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
		do {
			if ((IS_CONST & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
				container = Z_REFVAL_P(container);
				if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
					break;
				}
			}
			if (IS_CV == IS_CV && Z_TYPE_P(EX_VAR(opline->op2.var)) == IS_UNDEF) {
				ZVAL_UNDEFINED_OP2();
			}
			ZVAL_NULL(EX_VAR(opline->result.var));
			goto fetch_obj_is_finish;
		} while (0);
	}

	/* here we are sure we are dealing with an object */
	do {
		zend_object *zobj = Z_OBJ_P(container);
		zend_string *name, *tmp_name;
		zval *retval;

		if (IS_CV == IS_CONST) {
			cache_slot = CACHE_ADDR(opline->extended_value);

			if (EXPECTED(zobj->ce == CACHED_PTR_EX(cache_slot))) {
				uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);

				if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
fetch_obj_is_simple:
					retval = OBJ_PROP(zobj, prop_offset);
					if (EXPECTED(Z_TYPE_P(retval) != IS_UNDEF)) {
						if (0 || (IS_CONST & (IS_TMP_VAR|IS_VAR)) != 0) {
							goto fetch_obj_is_copy;
						} else {
fetch_obj_is_fast_copy:
							ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
							ZEND_VM_NEXT_OPCODE();
						}
					}
				} else if (UNEXPECTED(IS_HOOKED_PROPERTY_OFFSET(prop_offset))) {
					if (ZEND_IS_PROPERTY_HOOK_SIMPLE_READ(prop_offset)) {
						zend_property_info *prop_info = CACHED_PTR_EX(cache_slot + 2);
						prop_offset = prop_info->offset;
						goto fetch_obj_is_simple;
					}
					/* Fall through to read_property for hooks. */
				} else if (EXPECTED(zobj->properties != NULL)) {
					ZEND_ASSERT(IS_DYNAMIC_PROPERTY_OFFSET(prop_offset));
					name = Z_STR_P(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC));
					if (!IS_UNKNOWN_DYNAMIC_PROPERTY_OFFSET(prop_offset)) {
						uintptr_t idx = ZEND_DECODE_DYN_PROP_OFFSET(prop_offset);

						if (EXPECTED(idx < zobj->properties->nNumUsed * sizeof(Bucket))) {
							Bucket *p = (Bucket*)((char*)zobj->properties->arData + idx);

							if (EXPECTED(p->key == name) ||
							    (EXPECTED(p->h == ZSTR_H(name)) &&
							     EXPECTED(p->key != NULL) &&
							     EXPECTED(zend_string_equal_content(p->key, name)))) {
								retval = &p->val;
								if (0 || (IS_CONST & (IS_TMP_VAR|IS_VAR)) != 0) {
									goto fetch_obj_is_copy;
								} else {
									goto fetch_obj_is_fast_copy;
								}
							}
						}
						CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_DYNAMIC_PROPERTY_OFFSET);
					}
					retval = zend_hash_find_known_hash(zobj->properties, name);
					if (EXPECTED(retval)) {
						uintptr_t idx = (char*)retval - (char*)zobj->properties->arData;
						CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_ENCODE_DYN_PROP_OFFSET(idx));
						if (0 || (IS_CONST & (IS_TMP_VAR|IS_VAR)) != 0) {
							goto fetch_obj_is_copy;
						} else {
							goto fetch_obj_is_fast_copy;
						}
					}
				}
			}
			name = Z_STR_P(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC));
		} else {
			name = zval_try_get_tmp_string(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC), &tmp_name);
			if (UNEXPECTED(!name)) {
				ZVAL_UNDEF(EX_VAR(opline->result.var));
				break;
			}
		}

		retval = zobj->handlers->read_property(zobj, name, BP_VAR_IS, cache_slot, EX_VAR(opline->result.var));

		if (IS_CV != IS_CONST) {
			zend_tmp_string_release(tmp_name);
		}

		if (retval != EX_VAR(opline->result.var)) {
fetch_obj_is_copy:
			ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
		} else if (UNEXPECTED(Z_ISREF_P(retval))) {
			zend_unwrap_reference(retval);
		}
	} while (0);

fetch_obj_is_finish:




	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
#if 0
	USE_OPLINE
#endif

	if (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) {
		/* Behave like FETCH_OBJ_W */
		if ((IS_CONST & (IS_CONST|IS_TMP_VAR))) {
			ZEND_VM_TAIL_CALL(zend_use_tmp_in_write_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
		}
		ZEND_VM_TAIL_CALL(ZEND_NULL_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
	} else {
		ZEND_VM_TAIL_CALL(ZEND_FETCH_OBJ_R_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
	}
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_FETCH_LIST_R_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *container;

	SAVE_OPLINE();
	container = RT_CONSTANT(opline, opline->op1);
	zend_fetch_dimension_address_LIST_r(container, EX_VAR(opline->op2.var), IS_CV OPLINE_CC EXECUTE_DATA_CC);


	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_FAST_CONCAT_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;
	zend_string *op1_str, *op2_str, *str;


	op1 = RT_CONSTANT(opline, opline->op1);
	op2 = EX_VAR(opline->op2.var);
	if ((IS_CONST == IS_CONST || EXPECTED(Z_TYPE_P(op1) == IS_STRING)) &&
	    (IS_CV == IS_CONST || EXPECTED(Z_TYPE_P(op2) == IS_STRING))) {
		zend_string *op1_str = Z_STR_P(op1);
		zend_string *op2_str = Z_STR_P(op2);
		zend_string *str;
		uint32_t flags = ZSTR_GET_COPYABLE_CONCAT_PROPERTIES_BOTH(op1_str, op2_str);

		if (IS_CONST != IS_CONST && UNEXPECTED(ZSTR_LEN(op1_str) == 0)) {
			if (IS_CV == IS_CONST || IS_CV == IS_CV) {
				ZVAL_STR_COPY(EX_VAR(opline->result.var), op2_str);
			} else {
				ZVAL_STR(EX_VAR(opline->result.var), op2_str);
			}
			if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
				zend_string_release_ex(op1_str, 0);
			}
		} else if (IS_CV != IS_CONST && UNEXPECTED(ZSTR_LEN(op2_str) == 0)) {
			if (IS_CONST == IS_CONST || IS_CONST == IS_CV) {
				ZVAL_STR_COPY(EX_VAR(opline->result.var), op1_str);
			} else {
				ZVAL_STR(EX_VAR(opline->result.var), op1_str);
			}
			if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
				zend_string_release_ex(op2_str, 0);
			}
		} else if (IS_CONST != IS_CONST && IS_CONST != IS_CV &&
		    !ZSTR_IS_INTERNED(op1_str) && GC_REFCOUNT(op1_str) == 1) {
			size_t len = ZSTR_LEN(op1_str);

			str = zend_string_extend(op1_str, len + ZSTR_LEN(op2_str), 0);
			memcpy(ZSTR_VAL(str) + len, ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
			GC_ADD_FLAGS(str, flags);
			ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
			if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
				zend_string_release_ex(op2_str, 0);
			}
		} else {
			str = zend_string_alloc(ZSTR_LEN(op1_str) + ZSTR_LEN(op2_str), 0);
			memcpy(ZSTR_VAL(str), ZSTR_VAL(op1_str), ZSTR_LEN(op1_str));
			memcpy(ZSTR_VAL(str) + ZSTR_LEN(op1_str), ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
			GC_ADD_FLAGS(str, flags);
			ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
			if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
				zend_string_release_ex(op1_str, 0);
			}
			if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
				zend_string_release_ex(op2_str, 0);
			}
		}
		ZEND_VM_NEXT_OPCODE();
	}

	SAVE_OPLINE();
	if (IS_CONST == IS_CONST) {
		op1_str = Z_STR_P(op1);
	} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
		op1_str = zend_string_copy(Z_STR_P(op1));
	} else {
		if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
			ZVAL_UNDEFINED_OP1();
		}
		op1_str = zval_get_string_func(op1);
	}
	if (IS_CV == IS_CONST) {
		op2_str = Z_STR_P(op2);
	} else if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
		op2_str = zend_string_copy(Z_STR_P(op2));
	} else {
		if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(op2) == IS_UNDEF)) {
			ZVAL_UNDEFINED_OP2();
		}
		op2_str = zval_get_string_func(op2);
	}
	do {
		if (IS_CONST != IS_CONST) {
			if (UNEXPECTED(ZSTR_LEN(op1_str) == 0)) {
				if (IS_CV == IS_CONST) {
					if (UNEXPECTED(Z_REFCOUNTED_P(op2))) {
						GC_ADDREF(op2_str);
					}
				}
				ZVAL_STR(EX_VAR(opline->result.var), op2_str);
				zend_string_release_ex(op1_str, 0);
				break;
			}
		}
		if (IS_CV != IS_CONST) {
			if (UNEXPECTED(ZSTR_LEN(op2_str) == 0)) {
				if (IS_CONST == IS_CONST) {
					if (UNEXPECTED(Z_REFCOUNTED_P(op1))) {
						GC_ADDREF(op1_str);
					}
				}
				ZVAL_STR(EX_VAR(opline->result.var), op1_str);
				zend_string_release_ex(op2_str, 0);
				break;
			}
		}
		str = zend_string_alloc(ZSTR_LEN(op1_str) + ZSTR_LEN(op2_str), 0);
		memcpy(ZSTR_VAL(str), ZSTR_VAL(op1_str), ZSTR_LEN(op1_str));
		memcpy(ZSTR_VAL(str) + ZSTR_LEN(op1_str), ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);

		ZSTR_COPY_CONCAT_PROPERTIES_BOTH(str, op1_str, op2_str);
		ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
		if (IS_CONST != IS_CONST) {
			zend_string_release_ex(op1_str, 0);
		}
		if (IS_CV != IS_CONST) {
			zend_string_release_ex(op2_str, 0);
		}
	} while (0);




	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_INIT_METHOD_CALL_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *function_name;
	zval *object;
	zend_function *fbc;
	zend_class_entry *called_scope;
	zend_object *obj;
	zend_execute_data *call;
	uint32_t call_info;

	SAVE_OPLINE();

	object = RT_CONSTANT(opline, opline->op1);

	if (IS_CV != IS_CONST) {
		function_name = EX_VAR(opline->op2.var);
	}

	if (IS_CV != IS_CONST &&
	    UNEXPECTED(Z_TYPE_P(function_name) != IS_STRING)) {
		do {
			if ((IS_CV & (IS_VAR|IS_CV)) && Z_ISREF_P(function_name)) {
				function_name = Z_REFVAL_P(function_name);
				if (EXPECTED(Z_TYPE_P(function_name) == IS_STRING)) {
					break;
				}
			} else if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) {
				ZVAL_UNDEFINED_OP2();
				if (UNEXPECTED(EG(exception) != NULL)) {


					HANDLE_EXCEPTION();
				}
			}
			zend_throw_error(NULL, "Method name must be a string");




			HANDLE_EXCEPTION();
		} while (0);
	}

	if (IS_CONST == IS_UNUSED) {
		obj = Z_OBJ_P(object);
	} else {
		do {
			if (IS_CONST != IS_CONST && EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
				obj = Z_OBJ_P(object);
			} else {
				if ((IS_CONST & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(object))) {
					zend_reference *ref = Z_REF_P(object);

					object = &ref->val;
					if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
						obj = Z_OBJ_P(object);
						if (IS_CONST & IS_VAR) {
							if (UNEXPECTED(GC_DELREF(ref) == 0)) {
								efree_size(ref, sizeof(zend_reference));
							} else {
								Z_ADDREF_P(object);
							}
						}
						break;
					}
				}
				if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
					object = ZVAL_UNDEFINED_OP1();
					if (UNEXPECTED(EG(exception) != NULL)) {
						if (IS_CV != IS_CONST) {


						}
						HANDLE_EXCEPTION();
					}
				}
				if (IS_CV == IS_CONST) {
					function_name = EX_VAR(opline->op2.var);
				}
				zend_invalid_method_call(object, function_name);




				HANDLE_EXCEPTION();
			}
		} while (0);
	}

	called_scope = obj->ce;

	if (IS_CV == IS_CONST &&
	    EXPECTED(CACHED_PTR(opline->result.num) == called_scope)) {
		fbc = CACHED_PTR(opline->result.num + sizeof(void*));
	} else {
		zend_object *orig_obj = obj;

		if (IS_CV == IS_CONST) {
			function_name = EX_VAR(opline->op2.var);
		}

		/* First, locate the function. */
		fbc = obj->handlers->get_method(&obj, Z_STR_P(function_name), ((IS_CV == IS_CONST) ? (RT_CONSTANT(opline, opline->op2) + 1) : NULL));
		if (UNEXPECTED(fbc == NULL)) {
			if (EXPECTED(!EG(exception))) {
				zend_undefined_method(orig_obj->ce, Z_STR_P(function_name));
			}


			if ((IS_CONST & (IS_VAR|IS_TMP_VAR)) && GC_DELREF(orig_obj) == 0) {
				zend_objects_store_del(orig_obj);
			}
			HANDLE_EXCEPTION();
		}
		if (IS_CV == IS_CONST &&
		    EXPECTED(!(fbc->common.fn_flags & (ZEND_ACC_CALL_VIA_TRAMPOLINE|ZEND_ACC_NEVER_CACHE))) &&
		    EXPECTED(obj == orig_obj)) {
			CACHE_POLYMORPHIC_PTR(opline->result.num, called_scope, fbc);
		}
		if ((IS_CONST & (IS_VAR|IS_TMP_VAR)) && UNEXPECTED(obj != orig_obj)) {
			GC_ADDREF(obj); /* For $this pointer */
			if (GC_DELREF(orig_obj) == 0) {
				zend_objects_store_del(orig_obj);
			}
		}
		if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!RUN_TIME_CACHE(&fbc->op_array))) {
			init_func_run_time_cache(&fbc->op_array);
		}
	}

	if (IS_CV != IS_CONST) {


	}

	call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_HAS_THIS;
	if (UNEXPECTED((fbc->common.fn_flags & ZEND_ACC_STATIC) != 0)) {
		if ((IS_CONST & (IS_VAR|IS_TMP_VAR)) && GC_DELREF(obj) == 0) {
			zend_objects_store_del(obj);
			if (UNEXPECTED(EG(exception))) {
				HANDLE_EXCEPTION();
			}
		}
		/* call static method */
		obj = (zend_object*)called_scope;
		call_info = ZEND_CALL_NESTED_FUNCTION;
	} else if (IS_CONST & (IS_VAR|IS_TMP_VAR|IS_CV)) {
		if (IS_CONST == IS_CV) {
			GC_ADDREF(obj); /* For $this pointer */
		}
		/* CV may be changed indirectly (e.g. when it's a reference) */
		call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_HAS_THIS | ZEND_CALL_RELEASE_THIS;
	}

	call = zend_vm_stack_push_call_frame(call_info,
		fbc, opline->extended_value, obj);
	call->prev_execute_data = EX(call);
	EX(call) = call;

	ZEND_VM_NEXT_OPCODE();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_INIT_STATIC_METHOD_CALL_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *function_name;
	zend_class_entry *ce;
	uint32_t call_info;
	zend_function *fbc;
	zend_execute_data *call;

	SAVE_OPLINE();

	if (IS_CONST == IS_CONST) {
		/* no function found. try a static method in class */
		ce = CACHED_PTR(opline->result.num);
		if (UNEXPECTED(ce == NULL)) {
			ce = zend_fetch_class_by_name(Z_STR_P(RT_CONSTANT(opline, opline->op1)), Z_STR_P(RT_CONSTANT(opline, opline->op1) + 1), ZEND_FETCH_CLASS_DEFAULT | ZEND_FETCH_CLASS_EXCEPTION);
			if (UNEXPECTED(ce == NULL)) {


				HANDLE_EXCEPTION();
			}
			if (IS_CV != IS_CONST) {
				CACHE_PTR(opline->result.num, ce);
			}
		}
	} else if (IS_CONST == IS_UNUSED) {
		ce = zend_fetch_class(NULL, opline->op1.num);
		if (UNEXPECTED(ce == NULL)) {


			HANDLE_EXCEPTION();
		}
	} else {
		ce = Z_CE_P(EX_VAR(opline->op1.var));
	}

	if (IS_CONST == IS_CONST &&
	    IS_CV == IS_CONST &&
	    EXPECTED((fbc = CACHED_PTR(opline->result.num + sizeof(void*))) != NULL)) {
		/* nothing to do */
	} else if (IS_CONST != IS_CONST &&
	           IS_CV == IS_CONST &&
	           EXPECTED(CACHED_PTR(opline->result.num) == ce)) {
		fbc = CACHED_PTR(opline->result.num + sizeof(void*));
	} else if (IS_CV != IS_UNUSED) {
		function_name = EX_VAR(opline->op2.var);
		if (IS_CV != IS_CONST) {
			if (UNEXPECTED(Z_TYPE_P(function_name) != IS_STRING)) {
				do {
					if (IS_CV & (IS_VAR|IS_CV) && Z_ISREF_P(function_name)) {
						function_name = Z_REFVAL_P(function_name);
						if (EXPECTED(Z_TYPE_P(function_name) == IS_STRING)) {
							break;
						}
					} else if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) {
						ZVAL_UNDEFINED_OP2();
						if (UNEXPECTED(EG(exception) != NULL)) {
							HANDLE_EXCEPTION();
						}
					}
					zend_throw_error(NULL, "Method name must be a string");


					HANDLE_EXCEPTION();
				} while (0);
			}
		}

		if (ce->get_static_method) {
			fbc = ce->get_static_method(ce, Z_STR_P(function_name));
		} else {
			fbc = zend_std_get_static_method(ce, Z_STR_P(function_name), ((IS_CV == IS_CONST) ? (RT_CONSTANT(opline, opline->op2) + 1) : NULL));
		}
		if (UNEXPECTED(fbc == NULL)) {
			if (EXPECTED(!EG(exception))) {
				zend_undefined_method(ce, Z_STR_P(function_name));
			}


			HANDLE_EXCEPTION();
		}
		if (IS_CV == IS_CONST &&
		    EXPECTED(!(fbc->common.fn_flags & (ZEND_ACC_CALL_VIA_TRAMPOLINE|ZEND_ACC_NEVER_CACHE))) &&
			EXPECTED(!(fbc->common.scope->ce_flags & ZEND_ACC_TRAIT))) {
			CACHE_POLYMORPHIC_PTR(opline->result.num, ce, fbc);
		}
		if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!RUN_TIME_CACHE(&fbc->op_array))) {
			init_func_run_time_cache(&fbc->op_array);
		}
		if (IS_CV != IS_CONST) {


		}
	} else {
		if (UNEXPECTED(ce->constructor == NULL)) {
			zend_throw_error(NULL, "Cannot call constructor");
			HANDLE_EXCEPTION();
		}
		if (Z_TYPE(EX(This)) == IS_OBJECT && Z_OBJ(EX(This))->ce != ce->constructor->common.scope && (ce->constructor->common.fn_flags & ZEND_ACC_PRIVATE)) {
			zend_throw_error(NULL, "Cannot call private %s::__construct()", ZSTR_VAL(ce->name));
			HANDLE_EXCEPTION();
		}
		fbc = ce->constructor;
		if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!RUN_TIME_CACHE(&fbc->op_array))) {
			init_func_run_time_cache(&fbc->op_array);
		}
	}

	if (!(fbc->common.fn_flags & ZEND_ACC_STATIC)) {
		if (Z_TYPE(EX(This)) == IS_OBJECT && instanceof_function(Z_OBJCE(EX(This)), ce)) {
			ce = (zend_class_entry*)Z_OBJ(EX(This));
			call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_HAS_THIS;
		} else {
			zend_non_static_method_call(fbc);
			HANDLE_EXCEPTION();
		}
	} else {
		/* previous opcode is ZEND_FETCH_CLASS */
		if (IS_CONST == IS_UNUSED
		 && ((opline->op1.num & ZEND_FETCH_CLASS_MASK) == ZEND_FETCH_CLASS_PARENT ||
		     (opline->op1.num & ZEND_FETCH_CLASS_MASK) == ZEND_FETCH_CLASS_SELF)) {
			if (Z_TYPE(EX(This)) == IS_OBJECT) {
				ce = Z_OBJCE(EX(This));
			} else {
				ce = Z_CE(EX(This));
			}
		}
		call_info = ZEND_CALL_NESTED_FUNCTION;
	}

	call = zend_vm_stack_push_call_frame(call_info,
		fbc, opline->extended_value, ce);
	call->prev_execute_data = EX(call);
	EX(call) = call;

	ZEND_VM_NEXT_OPCODE();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_INIT_USER_CALL_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *function_name;
	zend_fcall_info_cache fcc;
	char *error = NULL;
	zend_function *func;
	void *object_or_called_scope;
	zend_execute_data *call;
	uint32_t call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_DYNAMIC;

	SAVE_OPLINE();
	function_name = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
	if (zend_is_callable_ex(function_name, NULL, 0, NULL, &fcc, &error)) {
		ZEND_ASSERT(!error);

		/* Deprecation can be emitted from zend_is_callable_ex(), which can
		 * invoke a user error handler and throw an exception.
		 * For the CONST and CV case we reuse the same exception block below
		 * to make sure we don't increase VM size too much. */
		if (!(IS_CV & (IS_TMP_VAR|IS_VAR)) && UNEXPECTED(EG(exception))) {


			HANDLE_EXCEPTION();
		}

		func = fcc.function_handler;
		object_or_called_scope = fcc.called_scope;
		if (func->common.fn_flags & ZEND_ACC_CLOSURE) {
			/* Delay closure destruction until its invocation */
			GC_ADDREF(ZEND_CLOSURE_OBJECT(func));
			call_info |= ZEND_CALL_CLOSURE;
			if (func->common.fn_flags & ZEND_ACC_FAKE_CLOSURE) {
				call_info |= ZEND_CALL_FAKE_CLOSURE;
			}
			if (fcc.object) {
				object_or_called_scope = fcc.object;
				call_info |= ZEND_CALL_HAS_THIS;
			}
		} else if (fcc.object) {
			GC_ADDREF(fcc.object); /* For $this pointer */
			object_or_called_scope = fcc.object;
			call_info |= ZEND_CALL_RELEASE_THIS | ZEND_CALL_HAS_THIS;
		}


		if ((IS_CV & (IS_TMP_VAR|IS_VAR)) && UNEXPECTED(EG(exception))) {
			if (call_info & ZEND_CALL_CLOSURE) {
				zend_object_release(ZEND_CLOSURE_OBJECT(func));
			} else if (call_info & ZEND_CALL_RELEASE_THIS) {
				zend_object_release(fcc.object);
			}
			HANDLE_EXCEPTION();
		}

		if (EXPECTED(func->type == ZEND_USER_FUNCTION) && UNEXPECTED(!RUN_TIME_CACHE(&func->op_array))) {
			init_func_run_time_cache(&func->op_array);
		}
	} else {
		zend_type_error("%s(): Argument #1 ($callback) must be a valid callback, %s", Z_STRVAL_P(RT_CONSTANT(opline, opline->op1)), error);
		efree(error);


		HANDLE_EXCEPTION();
	}

	call = zend_vm_stack_push_call_frame(call_info,
		func, opline->extended_value, object_or_called_scope);
	call->prev_execute_data = EX(call);
	EX(call) = call;

	ZEND_VM_NEXT_OPCODE();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *expr_ptr, new_expr;

	SAVE_OPLINE();
	if ((IS_CONST == IS_VAR || IS_CONST == IS_CV) &&
	    UNEXPECTED(opline->extended_value & ZEND_ARRAY_ELEMENT_REF)) {
		expr_ptr = zend_get_bad_ptr();
		if (Z_ISREF_P(expr_ptr)) {
			Z_ADDREF_P(expr_ptr);
		} else {
			ZVAL_MAKE_REF_EX(expr_ptr, 2);
		}


	} else {
		expr_ptr = RT_CONSTANT(opline, opline->op1);
		if (IS_CONST == IS_TMP_VAR) {
			/* pass */
		} else if (IS_CONST == IS_CONST) {
			Z_TRY_ADDREF_P(expr_ptr);
		} else if (IS_CONST == IS_CV) {
			ZVAL_DEREF(expr_ptr);
			Z_TRY_ADDREF_P(expr_ptr);
		} else /* if (IS_CONST == IS_VAR) */ {
			if (UNEXPECTED(Z_ISREF_P(expr_ptr))) {
				zend_refcounted *ref = Z_COUNTED_P(expr_ptr);

				expr_ptr = Z_REFVAL_P(expr_ptr);
				if (UNEXPECTED(GC_DELREF(ref) == 0)) {
					ZVAL_COPY_VALUE(&new_expr, expr_ptr);
					expr_ptr = &new_expr;
					efree_size(ref, sizeof(zend_reference));
				} else if (Z_OPT_REFCOUNTED_P(expr_ptr)) {
					Z_ADDREF_P(expr_ptr);
				}
			}
		}
	}

	if (IS_CV != IS_UNUSED) {
		zval *offset = EX_VAR(opline->op2.var);
		zend_string *str;
		zend_ulong hval;

add_again:
		if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) {
			str = Z_STR_P(offset);
			if (IS_CV != IS_CONST) {
				if (ZEND_HANDLE_NUMERIC(str, hval)) {
					goto num_index;
				}
			}
str_index:
			zend_hash_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), str, expr_ptr);
		} else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
			hval = Z_LVAL_P(offset);
num_index:
			zend_hash_index_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), hval, expr_ptr);
		} else if ((IS_CV & (IS_VAR|IS_CV)) && EXPECTED(Z_TYPE_P(offset) == IS_REFERENCE)) {
			offset = Z_REFVAL_P(offset);
			goto add_again;
		} else if (UNEXPECTED(Z_TYPE_P(offset) == IS_NULL)) {
			zval tmp;
			if (IS_CONST == IS_CV || IS_CONST == IS_VAR) {
				ZVAL_COPY(&tmp, expr_ptr);
			}
			zend_error(E_DEPRECATED, "Using null as an array offset is deprecated, use an empty string instead");
			if (IS_CONST == IS_CV || IS_CONST == IS_VAR) {
				/* A userland error handler can do funky things to the expression, so reset it */
				zval_ptr_dtor(expr_ptr);
				ZVAL_COPY_VALUE(expr_ptr, &tmp);
			}
			if (UNEXPECTED(EG(exception))) {
				zval_ptr_dtor_nogc(expr_ptr);
				HANDLE_EXCEPTION();
			}
			str = ZSTR_EMPTY_ALLOC();
			goto str_index;
		} else if (Z_TYPE_P(offset) == IS_DOUBLE) {
			hval = zend_dval_to_lval_safe(Z_DVAL_P(offset));
			goto num_index;
		} else if (Z_TYPE_P(offset) == IS_FALSE) {
			hval = 0;
			goto num_index;
		} else if (Z_TYPE_P(offset) == IS_TRUE) {
			hval = 1;
			goto num_index;
		} else if (Z_TYPE_P(offset) == IS_RESOURCE) {
			zend_use_resource_as_offset(offset);
			hval = Z_RES_HANDLE_P(offset);
			goto num_index;
		} else if (IS_CV == IS_CV && Z_TYPE_P(offset) == IS_UNDEF) {
			ZVAL_UNDEFINED_OP2();
			str = ZSTR_EMPTY_ALLOC();
			goto str_index;
		} else {
			zend_illegal_array_offset_access(offset);
			zval_ptr_dtor_nogc(expr_ptr);
		}


	} else {
		if (!zend_hash_next_index_insert(Z_ARRVAL_P(EX_VAR(opline->result.var)), expr_ptr)) {
			zend_cannot_add_element();
			zval_ptr_dtor_nogc(expr_ptr);
		}
	}
	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_INIT_ARRAY_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	zval *array;
	uint32_t size;
	USE_OPLINE

	SAVE_OPLINE();
	array = EX_VAR(opline->result.var);
	if (IS_CONST != IS_UNUSED) {
		size = opline->extended_value >> ZEND_ARRAY_SIZE_SHIFT;
		ZVAL_ARR(array, zend_new_array(size));
		/* Explicitly initialize array as not-packed if flag is set */
		if (opline->extended_value & ZEND_ARRAY_NOT_PACKED) {
			zend_hash_real_init_mixed(Z_ARRVAL_P(array));
		}
		ZEND_VM_TAIL_CALL(ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
	} else {
		ZVAL_ARR(array, zend_new_array(0));
		ZEND_VM_NEXT_OPCODE();
	}
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *container;
	bool result;
	zend_ulong hval;
	zval *offset;

	SAVE_OPLINE();
	container = RT_CONSTANT(opline, opline->op1);
	offset = EX_VAR(opline->op2.var);

	if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
		HashTable *ht;
		zval *value;
		zend_string *str;

isset_dim_obj_array:
		ht = Z_ARRVAL_P(container);
isset_again:
		if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) {
			str = Z_STR_P(offset);
			if (IS_CV != IS_CONST) {
				if (ZEND_HANDLE_NUMERIC(str, hval)) {
					goto num_index_prop;
				}
			}
			value = zend_hash_find_ex(ht, str, IS_CV == IS_CONST);
		} else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
			hval = Z_LVAL_P(offset);
num_index_prop:
			value = zend_hash_index_find(ht, hval);
		} else if ((IS_CV & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(offset))) {
			offset = Z_REFVAL_P(offset);
			goto isset_again;
		} else {
			value = zend_find_array_dim_slow(ht, offset EXECUTE_DATA_CC);
			if (UNEXPECTED(EG(exception))) {
				result = 0;
				goto isset_dim_obj_exit;
			}
		}

		if (!(opline->extended_value & ZEND_ISEMPTY)) {
			/* > IS_NULL means not IS_UNDEF and not IS_NULL */
			result = value != NULL && Z_TYPE_P(value) > IS_NULL &&
			    (!Z_ISREF_P(value) || Z_TYPE_P(Z_REFVAL_P(value)) != IS_NULL);

			if (IS_CONST & (IS_CONST|IS_CV)) {
				/* avoid exception check */


				ZEND_VM_SMART_BRANCH(result, 0);
			}
		} else {
			result = (value == NULL || !i_zend_is_true(value));
		}
		goto isset_dim_obj_exit;
	} else if ((IS_CONST & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(container))) {
		container = Z_REFVAL_P(container);
		if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
			goto isset_dim_obj_array;
		}
	}

	if (IS_CV == IS_CONST && Z_EXTRA_P(offset) == ZEND_EXTRA_VALUE) {
		offset++;
	}
	if (!(opline->extended_value & ZEND_ISEMPTY)) {
		result = zend_isset_dim_slow(container, offset EXECUTE_DATA_CC);
	} else {
		result = zend_isempty_dim_slow(container, offset EXECUTE_DATA_CC);
	}

isset_dim_obj_exit:




	ZEND_VM_SMART_BRANCH(result, 1);
}

static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *container;
	int result;
	zval *offset;
	zend_string *name, *tmp_name;

	SAVE_OPLINE();
	container = RT_CONSTANT(opline, opline->op1);
	offset = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);

	if (IS_CONST == IS_CONST ||
	    (IS_CONST != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
		if ((IS_CONST & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
			container = Z_REFVAL_P(container);
			if (UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT)) {
				result = (opline->extended_value & ZEND_ISEMPTY);
				goto isset_object_finish;
			}
		} else {
			result = (opline->extended_value & ZEND_ISEMPTY);
			goto isset_object_finish;
		}
	}

	if (IS_CV == IS_CONST) {
		name = Z_STR_P(offset);
	} else {
		name = zval_try_get_tmp_string(offset, &tmp_name);
		if (UNEXPECTED(!name)) {
			result = 0;
			goto isset_object_finish;
		}
	}

	result =
		(opline->extended_value & ZEND_ISEMPTY) ^
		Z_OBJ_HT_P(container)->has_property(Z_OBJ_P(container), name, (opline->extended_value & ZEND_ISEMPTY), ((IS_CV == IS_CONST) ? CACHE_ADDR(opline->extended_value & ~ZEND_ISEMPTY) : NULL));

	if (IS_CV != IS_CONST) {
		zend_tmp_string_release(tmp_name);
	}

isset_object_finish:




	ZEND_VM_SMART_BRANCH(result, 1);
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_ARRAY_KEY_EXISTS_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE

	zval *key, *subject;
	HashTable *ht;
	bool result;

	SAVE_OPLINE();

	key = RT_CONSTANT(opline, opline->op1);
	subject = EX_VAR(opline->op2.var);

	if (EXPECTED(Z_TYPE_P(subject) == IS_ARRAY)) {
array_key_exists_array:
		ht = Z_ARRVAL_P(subject);
		result = zend_array_key_exists_fast(ht, key OPLINE_CC EXECUTE_DATA_CC);
	} else {
		if ((IS_CV & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(subject))) {
			subject = Z_REFVAL_P(subject);
			if (EXPECTED(Z_TYPE_P(subject) == IS_ARRAY)) {
				goto array_key_exists_array;
			}
		}
		zend_array_key_exists_error(subject, key OPLINE_CC EXECUTE_DATA_CC);
		result = 0;
	}




	ZEND_VM_SMART_BRANCH(result, 1);
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_YIELD_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE

	zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C);

	SAVE_OPLINE();
	if (UNEXPECTED(generator->flags & ZEND_GENERATOR_FORCED_CLOSE)) {
		ZEND_VM_TAIL_CALL(zend_yield_in_closed_generator_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
	}

	/* Destroy the previously yielded value */
	zval_ptr_dtor(&generator->value);

	/* Destroy the previously yielded key */
	zval_ptr_dtor(&generator->key);

	/* Set the new yielded value */
	if (IS_CONST != IS_UNUSED) {
		if (UNEXPECTED(EX(func)->op_array.fn_flags & ZEND_ACC_RETURN_REFERENCE)) {
			/* Constants and temporary variables aren't yieldable by reference,
			 * but we still allow them with a notice. */
			if (IS_CONST & (IS_CONST|IS_TMP_VAR)) {
				zval *value;

				zend_error(E_NOTICE, "Only variable references should be yielded by reference");

				value = RT_CONSTANT(opline, opline->op1);
				ZVAL_COPY_VALUE(&generator->value, value);
				if (IS_CONST == IS_CONST) {
					if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
						Z_ADDREF(generator->value);
					}
				}
			} else {
				zval *value_ptr = zend_get_bad_ptr();

				/* If a function call result is yielded and the function did
				 * not return by reference we throw a notice. */
				do {
					if (IS_CONST == IS_VAR) {
						ZEND_ASSERT(value_ptr != &EG(uninitialized_zval));
						if (opline->extended_value == ZEND_RETURNS_FUNCTION
						 && !Z_ISREF_P(value_ptr)) {
							zend_error(E_NOTICE, "Only variable references should be yielded by reference");
							ZVAL_COPY(&generator->value, value_ptr);
							break;
						}
					}
					if (Z_ISREF_P(value_ptr)) {
						Z_ADDREF_P(value_ptr);
					} else {
						ZVAL_MAKE_REF_EX(value_ptr, 2);
					}
					ZVAL_REF(&generator->value, Z_REF_P(value_ptr));
				} while (0);


			}
		} else {
			zval *value = RT_CONSTANT(opline, opline->op1);

			/* Consts, temporary variables and references need copying */
			if (IS_CONST == IS_CONST) {
				ZVAL_COPY_VALUE(&generator->value, value);
				if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
					Z_ADDREF(generator->value);
				}
			} else if (IS_CONST == IS_TMP_VAR) {
				ZVAL_COPY_VALUE(&generator->value, value);
			} else if ((IS_CONST & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) {
				ZVAL_COPY(&generator->value, Z_REFVAL_P(value));


			} else {
				ZVAL_COPY_VALUE(&generator->value, value);
				if (IS_CONST == IS_CV) {
					if (Z_OPT_REFCOUNTED_P(value)) Z_ADDREF_P(value);
				}
			}
		}
	} else {
		/* If no value was specified yield null */
		ZVAL_NULL(&generator->value);
	}

	/* Set the new yielded key */
	if (IS_CV != IS_UNUSED) {
		zval *key = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
		if ((IS_CV & (IS_CV|IS_VAR)) && UNEXPECTED(Z_TYPE_P(key) == IS_REFERENCE)) {
			key = Z_REFVAL_P(key);
		}
		ZVAL_COPY(&generator->key, key);


		if (Z_TYPE(generator->key) == IS_LONG
		    && Z_LVAL(generator->key) > generator->largest_used_integer_key
		) {
			generator->largest_used_integer_key = Z_LVAL(generator->key);
		}
	} else {
		/* If no key was specified we use auto-increment keys */
		generator->largest_used_integer_key++;
		ZVAL_LONG(&generator->key, generator->largest_used_integer_key);
	}

	if (RETURN_VALUE_USED(opline)) {
		/* If the return value of yield is used set the send
		 * target and initialize it to NULL */
		generator->send_target = EX_VAR(opline->result.var);
		ZVAL_NULL(generator->send_target);
	} else {
		generator->send_target = NULL;
	}

	/* The GOTO VM uses a local opline variable. We need to set the opline
	 * variable in execute_data so we don't resume at an old position. */
	SAVE_OPLINE();

	ZEND_VM_RETURN();
}

static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_BW_NOT_SPEC_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1;

	op1 = EX_VAR(opline->op1.var);
	if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
		ZVAL_LONG(EX_VAR(opline->result.var), ~Z_LVAL_P(op1));
		ZEND_VM_NEXT_OPCODE();
	}

	ZEND_VM_DISPATCH_TO_HELPER(zend_bw_not_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_EX op1));
}

static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_QM_ASSIGN_LONG_SPEC_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *value;

	value = EX_VAR(opline->op1.var);
	ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(value));
	ZEND_VM_NEXT_OPCODE();
}

static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_QM_ASSIGN_DOUBLE_SPEC_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *value;

	value = EX_VAR(opline->op1.var);
	ZVAL_DOUBLE(EX_VAR(opline->result.var), Z_DVAL_P(value));
	ZEND_VM_NEXT_OPCODE();
}

static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_QM_ASSIGN_NOREF_SPEC_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *value;

	value = EX_VAR(opline->op1.var);
	ZVAL_COPY_VALUE(EX_VAR(opline->result.var), value);
	ZEND_VM_NEXT_OPCODE();
}

static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_ADD_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2, *result;
	double d1, d2;

	op1 = EX_VAR(opline->op1.var);
	op2 = RT_CONSTANT(opline, opline->op2);
	if (1 && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST && IS_CONST == IS_CONST) {
		/* pass */
	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
			result = EX_VAR(opline->result.var);
			fast_long_add_function(result, op1, op2);
			ZEND_VM_NEXT_OPCODE();
		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
			d1 = (double)Z_LVAL_P(op1);
			d2 = Z_DVAL_P(op2);
			goto add_double;
		}
	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
			d1 = Z_DVAL_P(op1);
			d2 = Z_DVAL_P(op2);
add_double:
			result = EX_VAR(opline->result.var);
			ZVAL_DOUBLE(result, d1 + d2);
			ZEND_VM_NEXT_OPCODE();
		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
			d1 = Z_DVAL_P(op1);
			d2 = (double)Z_LVAL_P(op2);
			goto add_double;
		}
	}

	ZEND_VM_DISPATCH_TO_HELPER(zend_add_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_EX op1, op2));
}

static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_SUB_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2, *result;
	double d1, d2;

	op1 = EX_VAR(opline->op1.var);
	op2 = RT_CONSTANT(opline, opline->op2);
	if (1 && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST && IS_CONST == IS_CONST) {
		/* pass */
	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
			result = EX_VAR(opline->result.var);
			fast_long_sub_function(result, op1, op2);
			ZEND_VM_NEXT_OPCODE();
		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
			d1 = (double)Z_LVAL_P(op1);
			d2 = Z_DVAL_P(op2);
			goto sub_double;
		}
	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
			d1 = Z_DVAL_P(op1);
			d2 = Z_DVAL_P(op2);
sub_double:
			result = EX_VAR(opline->result.var);
			ZVAL_DOUBLE(result, d1 - d2);
			ZEND_VM_NEXT_OPCODE();
		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
			d1 = Z_DVAL_P(op1);
			d2 = (double)Z_LVAL_P(op2);
			goto sub_double;
		}
	}

	ZEND_VM_DISPATCH_TO_HELPER(zend_sub_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_EX op1, op2));
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_MUL_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2, *result;
	double d1, d2;

	op1 = EX_VAR(opline->op1.var);
	op2 = RT_CONSTANT(opline, opline->op2);
	if (1 && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST && IS_CONST == IS_CONST) {
		/* pass */
	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
			zend_long overflow;

			result = EX_VAR(opline->result.var);
			ZEND_SIGNED_MULTIPLY_LONG(Z_LVAL_P(op1), Z_LVAL_P(op2), Z_LVAL_P(result), Z_DVAL_P(result), overflow);
			Z_TYPE_INFO_P(result) = overflow ? IS_DOUBLE : IS_LONG;
			ZEND_VM_NEXT_OPCODE();
		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
			d1 = (double)Z_LVAL_P(op1);
			d2 = Z_DVAL_P(op2);
			goto mul_double;
		}
	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
			d1 = Z_DVAL_P(op1);
			d2 = Z_DVAL_P(op2);
mul_double:
			result = EX_VAR(opline->result.var);
			ZVAL_DOUBLE(result, d1 * d2);
			ZEND_VM_NEXT_OPCODE();
		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
			d1 = Z_DVAL_P(op1);
			d2 = (double)Z_LVAL_P(op2);
			goto mul_double;
		}
	}

	ZEND_VM_DISPATCH_TO_HELPER(zend_mul_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_EX op1, op2));
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_MOD_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2, *result;

	op1 = EX_VAR(opline->op1.var);
	op2 = RT_CONSTANT(opline, opline->op2);
	if (1 && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST && IS_CONST == IS_CONST) {
		/* pass */
	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
			result = EX_VAR(opline->result.var);
			if (UNEXPECTED(Z_LVAL_P(op2) == 0)) {
				ZEND_VM_TAIL_CALL(zend_mod_by_zero_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
			} else if (UNEXPECTED(Z_LVAL_P(op2) == -1)) {
				/* Prevent overflow error/crash if op1==ZEND_LONG_MIN */
				ZVAL_LONG(result, 0);
			} else {
				ZVAL_LONG(result, Z_LVAL_P(op1) % Z_LVAL_P(op2));
			}
			ZEND_VM_NEXT_OPCODE();
		}
	}

	ZEND_VM_DISPATCH_TO_HELPER(zend_mod_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_EX op1, op2));
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_SL_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;

	op1 = EX_VAR(opline->op1.var);
	op2 = RT_CONSTANT(opline, opline->op2);
	if (1 && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST && IS_CONST == IS_CONST) {
		/* pass */
	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)
			&& EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)
			&& EXPECTED((zend_ulong)Z_LVAL_P(op2) < SIZEOF_ZEND_LONG * 8)) {
		/* Perform shift on unsigned numbers to get well-defined wrap behavior. */
		ZVAL_LONG(EX_VAR(opline->result.var),
			(zend_long) ((zend_ulong) Z_LVAL_P(op1) << Z_LVAL_P(op2)));
		ZEND_VM_NEXT_OPCODE();
	}

	ZEND_VM_DISPATCH_TO_HELPER(zend_shift_left_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_EX op1, op2));
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_SR_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;

	op1 = EX_VAR(opline->op1.var);
	op2 = RT_CONSTANT(opline, opline->op2);
	if (1 && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST && IS_CONST == IS_CONST) {
		/* pass */
	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)
			&& EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)
			&& EXPECTED((zend_ulong)Z_LVAL_P(op2) < SIZEOF_ZEND_LONG * 8)) {
		ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(op1) >> Z_LVAL_P(op2));
		ZEND_VM_NEXT_OPCODE();
	}

	ZEND_VM_DISPATCH_TO_HELPER(zend_shift_right_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_EX op1, op2));
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_IS_SMALLER_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;
	double d1, d2;

	op1 = EX_VAR(opline->op1.var);
	op2 = RT_CONSTANT(opline, opline->op2);
	if (1 && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST && IS_CONST == IS_CONST) {
		/* pass */
	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
			if (EXPECTED(Z_LVAL_P(op1) < Z_LVAL_P(op2))) {
is_smaller_true:
				ZEND_VM_SMART_BRANCH_TRUE_NONE();
			} else {
is_smaller_false:
				ZEND_VM_SMART_BRANCH_FALSE_NONE();
			}
		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
			d1 = (double)Z_LVAL_P(op1);
			d2 = Z_DVAL_P(op2);
			goto is_smaller_double;
		}
	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
			d1 = Z_DVAL_P(op1);
			d2 = Z_DVAL_P(op2);
is_smaller_double:
			if (d1 < d2) {
				goto is_smaller_true;
			} else {
				goto is_smaller_false;
			}
		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
			d1 = Z_DVAL_P(op1);
			d2 = (double)Z_LVAL_P(op2);
			goto is_smaller_double;
		}
	}
	ZEND_VM_DISPATCH_TO_HELPER(zend_is_smaller_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_EX op1, op2));
}

static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_IS_SMALLER_SPEC_TMPVARCV_CONST_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;
	double d1, d2;

	op1 = EX_VAR(opline->op1.var);
	op2 = RT_CONSTANT(opline, opline->op2);
	if (1 && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST && IS_CONST == IS_CONST) {
		/* pass */
	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
			if (EXPECTED(Z_LVAL_P(op1) < Z_LVAL_P(op2))) {
is_smaller_true:
				ZEND_VM_SMART_BRANCH_TRUE_JMPZ();
			} else {
is_smaller_false:
				ZEND_VM_SMART_BRANCH_FALSE_JMPZ();
			}
		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
			d1 = (double)Z_LVAL_P(op1);
			d2 = Z_DVAL_P(op2);
			goto is_smaller_double;
		}
	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
			d1 = Z_DVAL_P(op1);
			d2 = Z_DVAL_P(op2);
is_smaller_double:
			if (d1 < d2) {
				goto is_smaller_true;
			} else {
				goto is_smaller_false;
			}
		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
			d1 = Z_DVAL_P(op1);
			d2 = (double)Z_LVAL_P(op2);
			goto is_smaller_double;
		}
	}
	ZEND_VM_DISPATCH_TO_HELPER(zend_is_smaller_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_EX op1, op2));
}

static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_IS_SMALLER_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;
	double d1, d2;

	op1 = EX_VAR(opline->op1.var);
	op2 = RT_CONSTANT(opline, opline->op2);
	if (1 && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST && IS_CONST == IS_CONST) {
		/* pass */
	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
			if (EXPECTED(Z_LVAL_P(op1) < Z_LVAL_P(op2))) {
is_smaller_true:
				ZEND_VM_SMART_BRANCH_TRUE_JMPNZ();
			} else {
is_smaller_false:
				ZEND_VM_SMART_BRANCH_FALSE_JMPNZ();
			}
		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
			d1 = (double)Z_LVAL_P(op1);
			d2 = Z_DVAL_P(op2);
			goto is_smaller_double;
		}
	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
			d1 = Z_DVAL_P(op1);
			d2 = Z_DVAL_P(op2);
is_smaller_double:
			if (d1 < d2) {
				goto is_smaller_true;
			} else {
				goto is_smaller_false;
			}
		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
			d1 = Z_DVAL_P(op1);
			d2 = (double)Z_LVAL_P(op2);
			goto is_smaller_double;
		}
	}
	ZEND_VM_DISPATCH_TO_HELPER(zend_is_smaller_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_EX op1, op2));
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;
	double d1, d2;

	op1 = EX_VAR(opline->op1.var);
	op2 = RT_CONSTANT(opline, opline->op2);
	if (1 && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST && IS_CONST == IS_CONST) {
		/* pass */
	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
			if (EXPECTED(Z_LVAL_P(op1) <= Z_LVAL_P(op2))) {
is_smaller_or_equal_true:
				ZEND_VM_SMART_BRANCH_TRUE_NONE();
				ZVAL_TRUE(EX_VAR(opline->result.var));
				ZEND_VM_NEXT_OPCODE();
			} else {
is_smaller_or_equal_false:
				ZEND_VM_SMART_BRANCH_FALSE_NONE();
				ZVAL_FALSE(EX_VAR(opline->result.var));
				ZEND_VM_NEXT_OPCODE();
			}
		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
			d1 = (double)Z_LVAL_P(op1);
			d2 = Z_DVAL_P(op2);
			goto is_smaller_or_equal_double;
		}
	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
			d1 = Z_DVAL_P(op1);
			d2 = Z_DVAL_P(op2);
is_smaller_or_equal_double:
			if (d1 <= d2) {
				goto is_smaller_or_equal_true;
			} else {
				goto is_smaller_or_equal_false;
			}
		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
			d1 = Z_DVAL_P(op1);
			d2 = (double)Z_LVAL_P(op2);
			goto is_smaller_or_equal_double;
		}
	}
	ZEND_VM_DISPATCH_TO_HELPER(zend_is_smaller_or_equal_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_EX op1, op2));
}

static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_CONST_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;
	double d1, d2;

	op1 = EX_VAR(opline->op1.var);
	op2 = RT_CONSTANT(opline, opline->op2);
	if (1 && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST && IS_CONST == IS_CONST) {
		/* pass */
	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
			if (EXPECTED(Z_LVAL_P(op1) <= Z_LVAL_P(op2))) {
is_smaller_or_equal_true:
				ZEND_VM_SMART_BRANCH_TRUE_JMPZ();
				ZVAL_TRUE(EX_VAR(opline->result.var));
				ZEND_VM_NEXT_OPCODE();
			} else {
is_smaller_or_equal_false:
				ZEND_VM_SMART_BRANCH_FALSE_JMPZ();
				ZVAL_FALSE(EX_VAR(opline->result.var));
				ZEND_VM_NEXT_OPCODE();
			}
		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
			d1 = (double)Z_LVAL_P(op1);
			d2 = Z_DVAL_P(op2);
			goto is_smaller_or_equal_double;
		}
	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
			d1 = Z_DVAL_P(op1);
			d2 = Z_DVAL_P(op2);
is_smaller_or_equal_double:
			if (d1 <= d2) {
				goto is_smaller_or_equal_true;
			} else {
				goto is_smaller_or_equal_false;
			}
		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
			d1 = Z_DVAL_P(op1);
			d2 = (double)Z_LVAL_P(op2);
			goto is_smaller_or_equal_double;
		}
	}
	ZEND_VM_DISPATCH_TO_HELPER(zend_is_smaller_or_equal_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_EX op1, op2));
}

static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;
	double d1, d2;

	op1 = EX_VAR(opline->op1.var);
	op2 = RT_CONSTANT(opline, opline->op2);
	if (1 && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST && IS_CONST == IS_CONST) {
		/* pass */
	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
			if (EXPECTED(Z_LVAL_P(op1) <= Z_LVAL_P(op2))) {
is_smaller_or_equal_true:
				ZEND_VM_SMART_BRANCH_TRUE_JMPNZ();
				ZVAL_TRUE(EX_VAR(opline->result.var));
				ZEND_VM_NEXT_OPCODE();
			} else {
is_smaller_or_equal_false:
				ZEND_VM_SMART_BRANCH_FALSE_JMPNZ();
				ZVAL_FALSE(EX_VAR(opline->result.var));
				ZEND_VM_NEXT_OPCODE();
			}
		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
			d1 = (double)Z_LVAL_P(op1);
			d2 = Z_DVAL_P(op2);
			goto is_smaller_or_equal_double;
		}
	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
			d1 = Z_DVAL_P(op1);
			d2 = Z_DVAL_P(op2);
is_smaller_or_equal_double:
			if (d1 <= d2) {
				goto is_smaller_or_equal_true;
			} else {
				goto is_smaller_or_equal_false;
			}
		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
			d1 = Z_DVAL_P(op1);
			d2 = (double)Z_LVAL_P(op2);
			goto is_smaller_or_equal_double;
		}
	}
	ZEND_VM_DISPATCH_TO_HELPER(zend_is_smaller_or_equal_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_EX op1, op2));
}

static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_BW_OR_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;

	op1 = EX_VAR(opline->op1.var);
	op2 = RT_CONSTANT(opline, opline->op2);
	if (1 && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST && IS_CONST == IS_CONST) {
		/* pass */
	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)
			&& EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
		ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(op1) | Z_LVAL_P(op2));
		ZEND_VM_NEXT_OPCODE();
	}

	ZEND_VM_DISPATCH_TO_HELPER(zend_bw_or_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_EX op1, op2));
}

static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_BW_AND_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;

	op1 = EX_VAR(opline->op1.var);
	op2 = RT_CONSTANT(opline, opline->op2);
	if (1 && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST && IS_CONST == IS_CONST) {
		/* pass */
	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)
			&& EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
		ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(op1) & Z_LVAL_P(op2));
		ZEND_VM_NEXT_OPCODE();
	}

	ZEND_VM_DISPATCH_TO_HELPER(zend_bw_and_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_EX op1, op2));
}

static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_BW_XOR_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;

	op1 = EX_VAR(opline->op1.var);
	op2 = RT_CONSTANT(opline, opline->op2);
	if (1 && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST && IS_CONST == IS_CONST) {
		/* pass */
	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)
			&& EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
		ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(op1) ^ Z_LVAL_P(op2));
		ZEND_VM_NEXT_OPCODE();
	}

	ZEND_VM_DISPATCH_TO_HELPER(zend_bw_xor_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_EX op1, op2));
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_FETCH_LIST_R_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *container;

	SAVE_OPLINE();
	container = EX_VAR(opline->op1.var);
	zend_fetch_dimension_address_LIST_r(container, RT_CONSTANT(opline, opline->op2), IS_CONST OPLINE_CC EXECUTE_DATA_CC);


	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_SWITCH_LONG_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op, *jump_zv;
	HashTable *jumptable;

	op = EX_VAR(opline->op1.var);

	if (Z_TYPE_P(op) != IS_LONG) {
		ZVAL_DEREF(op);
		if (Z_TYPE_P(op) != IS_LONG) {
			/* Wrong type, fall back to ZEND_CASE chain */
			ZEND_VM_NEXT_OPCODE();
		}
	}

	jumptable = Z_ARRVAL_P(RT_CONSTANT(opline, opline->op2));
	jump_zv = zend_hash_index_find(jumptable, Z_LVAL_P(op));
	if (jump_zv != NULL) {
		ZEND_VM_SET_RELATIVE_OPCODE(opline, Z_LVAL_P(jump_zv));
		ZEND_VM_CONTINUE();
	} else {
		/* default */
		ZEND_VM_SET_RELATIVE_OPCODE(opline, opline->extended_value);
		ZEND_VM_CONTINUE();
	}
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_SWITCH_STRING_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op, *jump_zv;
	HashTable *jumptable;

	op = EX_VAR(opline->op1.var);

	if (Z_TYPE_P(op) != IS_STRING) {
		if ((IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST) {
			/* Wrong type, fall back to ZEND_CASE chain */
			ZEND_VM_NEXT_OPCODE();
		} else {
			ZVAL_DEREF(op);
			if (Z_TYPE_P(op) != IS_STRING) {
				/* Wrong type, fall back to ZEND_CASE chain */
				ZEND_VM_NEXT_OPCODE();
			}
		}
	}

	jumptable = Z_ARRVAL_P(RT_CONSTANT(opline, opline->op2));
	jump_zv = zend_hash_find_ex(jumptable, Z_STR_P(op), (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST);
	if (jump_zv != NULL) {
		ZEND_VM_SET_RELATIVE_OPCODE(opline, Z_LVAL_P(jump_zv));
		ZEND_VM_CONTINUE();
	} else {
		/* default */
		ZEND_VM_SET_RELATIVE_OPCODE(opline, opline->extended_value);
		ZEND_VM_CONTINUE();
	}
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_MATCH_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op, *jump_zv;
	HashTable *jumptable;

	op = EX_VAR(opline->op1.var);
	jumptable = Z_ARRVAL_P(RT_CONSTANT(opline, opline->op2));

match_try_again:
	if (Z_TYPE_P(op) == IS_LONG) {
		jump_zv = zend_hash_index_find(jumptable, Z_LVAL_P(op));
	} else if (Z_TYPE_P(op) == IS_STRING) {
		jump_zv = zend_hash_find_ex(jumptable, Z_STR_P(op), (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST);
	} else if (Z_TYPE_P(op) == IS_REFERENCE) {
		op = Z_REFVAL_P(op);
		goto match_try_again;
	} else {
		if (UNEXPECTED(((IS_TMP_VAR|IS_VAR|IS_CV) & IS_CV) && Z_TYPE_P(op) == IS_UNDEF)) {
			SAVE_OPLINE();
			op = ZVAL_UNDEFINED_OP1();
			if (UNEXPECTED(EG(exception))) {
				HANDLE_EXCEPTION();
			}
			goto match_try_again;
		}

		goto default_branch;
	}

	if (jump_zv != NULL) {
		ZEND_VM_SET_RELATIVE_OPCODE(opline, Z_LVAL_P(jump_zv));
		ZEND_VM_CONTINUE();
	} else {
default_branch:
		/* default */
		ZEND_VM_SET_RELATIVE_OPCODE(opline, opline->extended_value);
		ZEND_VM_CONTINUE();
	}
}

static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2, *result;

	op1 = EX_VAR(opline->op1.var);
	op2 = RT_CONSTANT(opline, opline->op2);
	result = EX_VAR(opline->result.var);
	ZVAL_LONG(result, Z_LVAL_P(op1) + Z_LVAL_P(op2));
	ZEND_VM_NEXT_OPCODE();
}

static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_ADD_LONG_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2, *result;

	op1 = EX_VAR(opline->op1.var);
	op2 = RT_CONSTANT(opline, opline->op2);
	result = EX_VAR(opline->result.var);
	fast_long_add_function(result, op1, op2);
	ZEND_VM_NEXT_OPCODE();
}

static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_ADD_DOUBLE_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2, *result;

	op1 = EX_VAR(opline->op1.var);
	op2 = RT_CONSTANT(opline, opline->op2);
	result = EX_VAR(opline->result.var);
	ZVAL_DOUBLE(result, Z_DVAL_P(op1) + Z_DVAL_P(op2));
	ZEND_VM_NEXT_OPCODE();
}

static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2, *result;

	op1 = EX_VAR(opline->op1.var);
	op2 = RT_CONSTANT(opline, opline->op2);
	result = EX_VAR(opline->result.var);
	ZVAL_LONG(result, Z_LVAL_P(op1) - Z_LVAL_P(op2));
	ZEND_VM_NEXT_OPCODE();
}

static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_SUB_LONG_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2, *result;

	op1 = EX_VAR(opline->op1.var);
	op2 = RT_CONSTANT(opline, opline->op2);
	result = EX_VAR(opline->result.var);
	fast_long_sub_function(result, op1, op2);
	ZEND_VM_NEXT_OPCODE();
}

static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_SUB_DOUBLE_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2, *result;

	op1 = EX_VAR(opline->op1.var);
	op2 = RT_CONSTANT(opline, opline->op2);
	result = EX_VAR(opline->result.var);
	ZVAL_DOUBLE(result, Z_DVAL_P(op1) - Z_DVAL_P(op2));
	ZEND_VM_NEXT_OPCODE();
}

static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2, *result;

	op1 = EX_VAR(opline->op1.var);
	op2 = RT_CONSTANT(opline, opline->op2);
	result = EX_VAR(opline->result.var);
	ZVAL_LONG(result, Z_LVAL_P(op1) * Z_LVAL_P(op2));
	ZEND_VM_NEXT_OPCODE();
}

static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_MUL_LONG_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2, *result;
	zend_long overflow;

	op1 = EX_VAR(opline->op1.var);
	op2 = RT_CONSTANT(opline, opline->op2);
	result = EX_VAR(opline->result.var);
	ZEND_SIGNED_MULTIPLY_LONG(Z_LVAL_P(op1), Z_LVAL_P(op2), Z_LVAL_P(result), Z_DVAL_P(result), overflow);
	Z_TYPE_INFO_P(result) = overflow ? IS_DOUBLE : IS_LONG;
	ZEND_VM_NEXT_OPCODE();
}

static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_MUL_DOUBLE_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2, *result;

	op1 = EX_VAR(opline->op1.var);
	op2 = RT_CONSTANT(opline, opline->op2);
	result = EX_VAR(opline->result.var);
	ZVAL_DOUBLE(result, Z_DVAL_P(op1) * Z_DVAL_P(op2));
	ZEND_VM_NEXT_OPCODE();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;
	bool result;

	op1 = EX_VAR(opline->op1.var);
	op2 = RT_CONSTANT(opline, opline->op2);
	result = (Z_LVAL_P(op1) == Z_LVAL_P(op2));
	ZEND_VM_SMART_BRANCH_NONE(result, 0);
}

static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;
	bool result;

	op1 = EX_VAR(opline->op1.var);
	op2 = RT_CONSTANT(opline, opline->op2);
	result = (Z_LVAL_P(op1) == Z_LVAL_P(op2));
	ZEND_VM_SMART_BRANCH_JMPZ(result, 0);
}

static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;
	bool result;

	op1 = EX_VAR(opline->op1.var);
	op2 = RT_CONSTANT(opline, opline->op2);
	result = (Z_LVAL_P(op1) == Z_LVAL_P(op2));
	ZEND_VM_SMART_BRANCH_JMPNZ(result, 0);
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;
	bool result;

	op1 = EX_VAR(opline->op1.var);
	op2 = RT_CONSTANT(opline, opline->op2);
	result = (Z_DVAL_P(op1) == Z_DVAL_P(op2));
	ZEND_VM_SMART_BRANCH_NONE(result, 0);
}

static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;
	bool result;

	op1 = EX_VAR(opline->op1.var);
	op2 = RT_CONSTANT(opline, opline->op2);
	result = (Z_DVAL_P(op1) == Z_DVAL_P(op2));
	ZEND_VM_SMART_BRANCH_JMPZ(result, 0);
}

static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;
	bool result;

	op1 = EX_VAR(opline->op1.var);
	op2 = RT_CONSTANT(opline, opline->op2);
	result = (Z_DVAL_P(op1) == Z_DVAL_P(op2));
	ZEND_VM_SMART_BRANCH_JMPNZ(result, 0);
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;
	bool result;

	op1 = EX_VAR(opline->op1.var);
	op2 = RT_CONSTANT(opline, opline->op2);
	result = (Z_LVAL_P(op1) != Z_LVAL_P(op2));
	ZEND_VM_SMART_BRANCH_NONE(result, 0);
}

static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;
	bool result;

	op1 = EX_VAR(opline->op1.var);
	op2 = RT_CONSTANT(opline, opline->op2);
	result = (Z_LVAL_P(op1) != Z_LVAL_P(op2));
	ZEND_VM_SMART_BRANCH_JMPZ(result, 0);
}

static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;
	bool result;

	op1 = EX_VAR(opline->op1.var);
	op2 = RT_CONSTANT(opline, opline->op2);
	result = (Z_LVAL_P(op1) != Z_LVAL_P(op2));
	ZEND_VM_SMART_BRANCH_JMPNZ(result, 0);
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;
	bool result;

	op1 = EX_VAR(opline->op1.var);
	op2 = RT_CONSTANT(opline, opline->op2);
	result = (Z_DVAL_P(op1) != Z_DVAL_P(op2));
	ZEND_VM_SMART_BRANCH_NONE(result, 0);
}

static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;
	bool result;

	op1 = EX_VAR(opline->op1.var);
	op2 = RT_CONSTANT(opline, opline->op2);
	result = (Z_DVAL_P(op1) != Z_DVAL_P(op2));
	ZEND_VM_SMART_BRANCH_JMPZ(result, 0);
}

static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;
	bool result;

	op1 = EX_VAR(opline->op1.var);
	op2 = RT_CONSTANT(opline, opline->op2);
	result = (Z_DVAL_P(op1) != Z_DVAL_P(op2));
	ZEND_VM_SMART_BRANCH_JMPNZ(result, 0);
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_IS_IDENTICAL_EMPTY_ARRAY_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1;
	bool result;

	op1 = _get_zval_ptr_tmpvarcv(opline->op1_type, opline->op1, BP_VAR_R EXECUTE_DATA_CC);
	result = Z_TYPE_P(op1) == IS_ARRAY && zend_hash_num_elements(Z_ARR_P(op1)) == 0;
	FREE_OP(opline->op1_type, opline->op1.var);


	ZEND_VM_SMART_BRANCH_NONE(result, 0);
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_IS_IDENTICAL_EMPTY_ARRAY_SPEC_TMPVARCV_CONST_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1;
	bool result;

	op1 = _get_zval_ptr_tmpvarcv(opline->op1_type, opline->op1, BP_VAR_R EXECUTE_DATA_CC);
	result = Z_TYPE_P(op1) == IS_ARRAY && zend_hash_num_elements(Z_ARR_P(op1)) == 0;
	FREE_OP(opline->op1_type, opline->op1.var);


	ZEND_VM_SMART_BRANCH_JMPZ(result, 0);
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_IS_IDENTICAL_EMPTY_ARRAY_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1;
	bool result;

	op1 = _get_zval_ptr_tmpvarcv(opline->op1_type, opline->op1, BP_VAR_R EXECUTE_DATA_CC);
	result = Z_TYPE_P(op1) == IS_ARRAY && zend_hash_num_elements(Z_ARR_P(op1)) == 0;
	FREE_OP(opline->op1_type, opline->op1.var);


	ZEND_VM_SMART_BRANCH_JMPNZ(result, 0);
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_IS_NOT_IDENTICAL_EMPTY_ARRAY_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1;
	bool result;

	op1 = _get_zval_ptr_tmpvarcv(opline->op1_type, opline->op1, BP_VAR_R EXECUTE_DATA_CC);
	result = Z_TYPE_P(op1) != IS_ARRAY || zend_hash_num_elements(Z_ARR_P(op1)) > 0;
	FREE_OP(opline->op1_type, opline->op1.var);


	ZEND_VM_SMART_BRANCH_NONE(result, 0);
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_IS_NOT_IDENTICAL_EMPTY_ARRAY_SPEC_TMPVARCV_CONST_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1;
	bool result;

	op1 = _get_zval_ptr_tmpvarcv(opline->op1_type, opline->op1, BP_VAR_R EXECUTE_DATA_CC);
	result = Z_TYPE_P(op1) != IS_ARRAY || zend_hash_num_elements(Z_ARR_P(op1)) > 0;
	FREE_OP(opline->op1_type, opline->op1.var);


	ZEND_VM_SMART_BRANCH_JMPZ(result, 0);
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_IS_NOT_IDENTICAL_EMPTY_ARRAY_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1;
	bool result;

	op1 = _get_zval_ptr_tmpvarcv(opline->op1_type, opline->op1, BP_VAR_R EXECUTE_DATA_CC);
	result = Z_TYPE_P(op1) != IS_ARRAY || zend_hash_num_elements(Z_ARR_P(op1)) > 0;
	FREE_OP(opline->op1_type, opline->op1.var);


	ZEND_VM_SMART_BRANCH_JMPNZ(result, 0);
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;
	bool result;

	op1 = EX_VAR(opline->op1.var);
	op2 = RT_CONSTANT(opline, opline->op2);
	result = (Z_LVAL_P(op1) < Z_LVAL_P(op2));
	ZEND_VM_SMART_BRANCH_NONE(result, 0);
}

static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;
	bool result;

	op1 = EX_VAR(opline->op1.var);
	op2 = RT_CONSTANT(opline, opline->op2);
	result = (Z_LVAL_P(op1) < Z_LVAL_P(op2));
	ZEND_VM_SMART_BRANCH_JMPZ(result, 0);
}

static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;
	bool result;

	op1 = EX_VAR(opline->op1.var);
	op2 = RT_CONSTANT(opline, opline->op2);
	result = (Z_LVAL_P(op1) < Z_LVAL_P(op2));
	ZEND_VM_SMART_BRANCH_JMPNZ(result, 0);
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;
	bool result;

	op1 = EX_VAR(opline->op1.var);
	op2 = RT_CONSTANT(opline, opline->op2);
	result = (Z_DVAL_P(op1) < Z_DVAL_P(op2));
	ZEND_VM_SMART_BRANCH_NONE(result, 0);
}

static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;
	bool result;

	op1 = EX_VAR(opline->op1.var);
	op2 = RT_CONSTANT(opline, opline->op2);
	result = (Z_DVAL_P(op1) < Z_DVAL_P(op2));
	ZEND_VM_SMART_BRANCH_JMPZ(result, 0);
}

static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;
	bool result;

	op1 = EX_VAR(opline->op1.var);
	op2 = RT_CONSTANT(opline, opline->op2);
	result = (Z_DVAL_P(op1) < Z_DVAL_P(op2));
	ZEND_VM_SMART_BRANCH_JMPNZ(result, 0);
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;
	bool result;

	op1 = EX_VAR(opline->op1.var);
	op2 = RT_CONSTANT(opline, opline->op2);
	result = (Z_LVAL_P(op1) <= Z_LVAL_P(op2));
	ZEND_VM_SMART_BRANCH_NONE(result, 0);
}

static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;
	bool result;

	op1 = EX_VAR(opline->op1.var);
	op2 = RT_CONSTANT(opline, opline->op2);
	result = (Z_LVAL_P(op1) <= Z_LVAL_P(op2));
	ZEND_VM_SMART_BRANCH_JMPZ(result, 0);
}

static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;
	bool result;

	op1 = EX_VAR(opline->op1.var);
	op2 = RT_CONSTANT(opline, opline->op2);
	result = (Z_LVAL_P(op1) <= Z_LVAL_P(op2));
	ZEND_VM_SMART_BRANCH_JMPNZ(result, 0);
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;
	bool result;

	op1 = EX_VAR(opline->op1.var);
	op2 = RT_CONSTANT(opline, opline->op2);
	result = (Z_DVAL_P(op1) <= Z_DVAL_P(op2));
	ZEND_VM_SMART_BRANCH_NONE(result, 0);
}

static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;
	bool result;

	op1 = EX_VAR(opline->op1.var);
	op2 = RT_CONSTANT(opline, opline->op2);
	result = (Z_DVAL_P(op1) <= Z_DVAL_P(op2));
	ZEND_VM_SMART_BRANCH_JMPZ(result, 0);
}

static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;
	bool result;

	op1 = EX_VAR(opline->op1.var);
	op2 = RT_CONSTANT(opline, opline->op2);
	result = (Z_DVAL_P(op1) <= Z_DVAL_P(op2));
	ZEND_VM_SMART_BRANCH_JMPNZ(result, 0);
}

static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_ADD_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2, *result;
	double d1, d2;

	op1 = EX_VAR(opline->op1.var);
	op2 = EX_VAR(opline->op2.var);
	if (1 && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST) {
		/* pass */
	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
			result = EX_VAR(opline->result.var);
			fast_long_add_function(result, op1, op2);
			ZEND_VM_NEXT_OPCODE();
		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
			d1 = (double)Z_LVAL_P(op1);
			d2 = Z_DVAL_P(op2);
			goto add_double;
		}
	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
			d1 = Z_DVAL_P(op1);
			d2 = Z_DVAL_P(op2);
add_double:
			result = EX_VAR(opline->result.var);
			ZVAL_DOUBLE(result, d1 + d2);
			ZEND_VM_NEXT_OPCODE();
		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
			d1 = Z_DVAL_P(op1);
			d2 = (double)Z_LVAL_P(op2);
			goto add_double;
		}
	}

	ZEND_VM_DISPATCH_TO_HELPER(zend_add_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_EX op1, op2));
}

static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_SUB_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2, *result;
	double d1, d2;

	op1 = EX_VAR(opline->op1.var);
	op2 = EX_VAR(opline->op2.var);
	if (1 && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST) {
		/* pass */
	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
			result = EX_VAR(opline->result.var);
			fast_long_sub_function(result, op1, op2);
			ZEND_VM_NEXT_OPCODE();
		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
			d1 = (double)Z_LVAL_P(op1);
			d2 = Z_DVAL_P(op2);
			goto sub_double;
		}
	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
			d1 = Z_DVAL_P(op1);
			d2 = Z_DVAL_P(op2);
sub_double:
			result = EX_VAR(opline->result.var);
			ZVAL_DOUBLE(result, d1 - d2);
			ZEND_VM_NEXT_OPCODE();
		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
			d1 = Z_DVAL_P(op1);
			d2 = (double)Z_LVAL_P(op2);
			goto sub_double;
		}
	}

	ZEND_VM_DISPATCH_TO_HELPER(zend_sub_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_EX op1, op2));
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_MUL_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2, *result;
	double d1, d2;

	op1 = EX_VAR(opline->op1.var);
	op2 = EX_VAR(opline->op2.var);
	if (1 && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST) {
		/* pass */
	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
			zend_long overflow;

			result = EX_VAR(opline->result.var);
			ZEND_SIGNED_MULTIPLY_LONG(Z_LVAL_P(op1), Z_LVAL_P(op2), Z_LVAL_P(result), Z_DVAL_P(result), overflow);
			Z_TYPE_INFO_P(result) = overflow ? IS_DOUBLE : IS_LONG;
			ZEND_VM_NEXT_OPCODE();
		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
			d1 = (double)Z_LVAL_P(op1);
			d2 = Z_DVAL_P(op2);
			goto mul_double;
		}
	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
			d1 = Z_DVAL_P(op1);
			d2 = Z_DVAL_P(op2);
mul_double:
			result = EX_VAR(opline->result.var);
			ZVAL_DOUBLE(result, d1 * d2);
			ZEND_VM_NEXT_OPCODE();
		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
			d1 = Z_DVAL_P(op1);
			d2 = (double)Z_LVAL_P(op2);
			goto mul_double;
		}
	}

	ZEND_VM_DISPATCH_TO_HELPER(zend_mul_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_EX op1, op2));
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_MOD_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2, *result;

	op1 = EX_VAR(opline->op1.var);
	op2 = EX_VAR(opline->op2.var);
	if (1 && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST) {
		/* pass */
	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
			result = EX_VAR(opline->result.var);
			if (UNEXPECTED(Z_LVAL_P(op2) == 0)) {
				ZEND_VM_TAIL_CALL(zend_mod_by_zero_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
			} else if (UNEXPECTED(Z_LVAL_P(op2) == -1)) {
				/* Prevent overflow error/crash if op1==ZEND_LONG_MIN */
				ZVAL_LONG(result, 0);
			} else {
				ZVAL_LONG(result, Z_LVAL_P(op1) % Z_LVAL_P(op2));
			}
			ZEND_VM_NEXT_OPCODE();
		}
	}

	ZEND_VM_DISPATCH_TO_HELPER(zend_mod_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_EX op1, op2));
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_SL_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;

	op1 = EX_VAR(opline->op1.var);
	op2 = EX_VAR(opline->op2.var);
	if (1 && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST) {
		/* pass */
	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)
			&& EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)
			&& EXPECTED((zend_ulong)Z_LVAL_P(op2) < SIZEOF_ZEND_LONG * 8)) {
		/* Perform shift on unsigned numbers to get well-defined wrap behavior. */
		ZVAL_LONG(EX_VAR(opline->result.var),
			(zend_long) ((zend_ulong) Z_LVAL_P(op1) << Z_LVAL_P(op2)));
		ZEND_VM_NEXT_OPCODE();
	}

	ZEND_VM_DISPATCH_TO_HELPER(zend_shift_left_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_EX op1, op2));
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_SR_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;

	op1 = EX_VAR(opline->op1.var);
	op2 = EX_VAR(opline->op2.var);
	if (1 && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST) {
		/* pass */
	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)
			&& EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)
			&& EXPECTED((zend_ulong)Z_LVAL_P(op2) < SIZEOF_ZEND_LONG * 8)) {
		ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(op1) >> Z_LVAL_P(op2));
		ZEND_VM_NEXT_OPCODE();
	}

	ZEND_VM_DISPATCH_TO_HELPER(zend_shift_right_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_EX op1, op2));
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;
	double d1, d2;

	op1 = EX_VAR(opline->op1.var);
	op2 = EX_VAR(opline->op2.var);
	if (1 && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST) {
		/* pass */
	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
			if (EXPECTED(Z_LVAL_P(op1) < Z_LVAL_P(op2))) {
is_smaller_true:
				ZEND_VM_SMART_BRANCH_TRUE_NONE();
			} else {
is_smaller_false:
				ZEND_VM_SMART_BRANCH_FALSE_NONE();
			}
		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
			d1 = (double)Z_LVAL_P(op1);
			d2 = Z_DVAL_P(op2);
			goto is_smaller_double;
		}
	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
			d1 = Z_DVAL_P(op1);
			d2 = Z_DVAL_P(op2);
is_smaller_double:
			if (d1 < d2) {
				goto is_smaller_true;
			} else {
				goto is_smaller_false;
			}
		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
			d1 = Z_DVAL_P(op1);
			d2 = (double)Z_LVAL_P(op2);
			goto is_smaller_double;
		}
	}
	ZEND_VM_DISPATCH_TO_HELPER(zend_is_smaller_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_EX op1, op2));
}

static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;
	double d1, d2;

	op1 = EX_VAR(opline->op1.var);
	op2 = EX_VAR(opline->op2.var);
	if (1 && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST) {
		/* pass */
	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
			if (EXPECTED(Z_LVAL_P(op1) < Z_LVAL_P(op2))) {
is_smaller_true:
				ZEND_VM_SMART_BRANCH_TRUE_JMPZ();
			} else {
is_smaller_false:
				ZEND_VM_SMART_BRANCH_FALSE_JMPZ();
			}
		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
			d1 = (double)Z_LVAL_P(op1);
			d2 = Z_DVAL_P(op2);
			goto is_smaller_double;
		}
	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
			d1 = Z_DVAL_P(op1);
			d2 = Z_DVAL_P(op2);
is_smaller_double:
			if (d1 < d2) {
				goto is_smaller_true;
			} else {
				goto is_smaller_false;
			}
		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
			d1 = Z_DVAL_P(op1);
			d2 = (double)Z_LVAL_P(op2);
			goto is_smaller_double;
		}
	}
	ZEND_VM_DISPATCH_TO_HELPER(zend_is_smaller_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_EX op1, op2));
}

static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;
	double d1, d2;

	op1 = EX_VAR(opline->op1.var);
	op2 = EX_VAR(opline->op2.var);
	if (1 && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST) {
		/* pass */
	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
			if (EXPECTED(Z_LVAL_P(op1) < Z_LVAL_P(op2))) {
is_smaller_true:
				ZEND_VM_SMART_BRANCH_TRUE_JMPNZ();
			} else {
is_smaller_false:
				ZEND_VM_SMART_BRANCH_FALSE_JMPNZ();
			}
		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
			d1 = (double)Z_LVAL_P(op1);
			d2 = Z_DVAL_P(op2);
			goto is_smaller_double;
		}
	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
			d1 = Z_DVAL_P(op1);
			d2 = Z_DVAL_P(op2);
is_smaller_double:
			if (d1 < d2) {
				goto is_smaller_true;
			} else {
				goto is_smaller_false;
			}
		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
			d1 = Z_DVAL_P(op1);
			d2 = (double)Z_LVAL_P(op2);
			goto is_smaller_double;
		}
	}
	ZEND_VM_DISPATCH_TO_HELPER(zend_is_smaller_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_EX op1, op2));
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;
	double d1, d2;

	op1 = EX_VAR(opline->op1.var);
	op2 = EX_VAR(opline->op2.var);
	if (1 && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST) {
		/* pass */
	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
			if (EXPECTED(Z_LVAL_P(op1) <= Z_LVAL_P(op2))) {
is_smaller_or_equal_true:
				ZEND_VM_SMART_BRANCH_TRUE_NONE();
				ZVAL_TRUE(EX_VAR(opline->result.var));
				ZEND_VM_NEXT_OPCODE();
			} else {
is_smaller_or_equal_false:
				ZEND_VM_SMART_BRANCH_FALSE_NONE();
				ZVAL_FALSE(EX_VAR(opline->result.var));
				ZEND_VM_NEXT_OPCODE();
			}
		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
			d1 = (double)Z_LVAL_P(op1);
			d2 = Z_DVAL_P(op2);
			goto is_smaller_or_equal_double;
		}
	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
			d1 = Z_DVAL_P(op1);
			d2 = Z_DVAL_P(op2);
is_smaller_or_equal_double:
			if (d1 <= d2) {
				goto is_smaller_or_equal_true;
			} else {
				goto is_smaller_or_equal_false;
			}
		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
			d1 = Z_DVAL_P(op1);
			d2 = (double)Z_LVAL_P(op2);
			goto is_smaller_or_equal_double;
		}
	}
	ZEND_VM_DISPATCH_TO_HELPER(zend_is_smaller_or_equal_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_EX op1, op2));
}

static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;
	double d1, d2;

	op1 = EX_VAR(opline->op1.var);
	op2 = EX_VAR(opline->op2.var);
	if (1 && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST) {
		/* pass */
	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
			if (EXPECTED(Z_LVAL_P(op1) <= Z_LVAL_P(op2))) {
is_smaller_or_equal_true:
				ZEND_VM_SMART_BRANCH_TRUE_JMPZ();
				ZVAL_TRUE(EX_VAR(opline->result.var));
				ZEND_VM_NEXT_OPCODE();
			} else {
is_smaller_or_equal_false:
				ZEND_VM_SMART_BRANCH_FALSE_JMPZ();
				ZVAL_FALSE(EX_VAR(opline->result.var));
				ZEND_VM_NEXT_OPCODE();
			}
		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
			d1 = (double)Z_LVAL_P(op1);
			d2 = Z_DVAL_P(op2);
			goto is_smaller_or_equal_double;
		}
	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
			d1 = Z_DVAL_P(op1);
			d2 = Z_DVAL_P(op2);
is_smaller_or_equal_double:
			if (d1 <= d2) {
				goto is_smaller_or_equal_true;
			} else {
				goto is_smaller_or_equal_false;
			}
		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
			d1 = Z_DVAL_P(op1);
			d2 = (double)Z_LVAL_P(op2);
			goto is_smaller_or_equal_double;
		}
	}
	ZEND_VM_DISPATCH_TO_HELPER(zend_is_smaller_or_equal_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_EX op1, op2));
}

static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;
	double d1, d2;

	op1 = EX_VAR(opline->op1.var);
	op2 = EX_VAR(opline->op2.var);
	if (1 && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST) {
		/* pass */
	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
			if (EXPECTED(Z_LVAL_P(op1) <= Z_LVAL_P(op2))) {
is_smaller_or_equal_true:
				ZEND_VM_SMART_BRANCH_TRUE_JMPNZ();
				ZVAL_TRUE(EX_VAR(opline->result.var));
				ZEND_VM_NEXT_OPCODE();
			} else {
is_smaller_or_equal_false:
				ZEND_VM_SMART_BRANCH_FALSE_JMPNZ();
				ZVAL_FALSE(EX_VAR(opline->result.var));
				ZEND_VM_NEXT_OPCODE();
			}
		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
			d1 = (double)Z_LVAL_P(op1);
			d2 = Z_DVAL_P(op2);
			goto is_smaller_or_equal_double;
		}
	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
			d1 = Z_DVAL_P(op1);
			d2 = Z_DVAL_P(op2);
is_smaller_or_equal_double:
			if (d1 <= d2) {
				goto is_smaller_or_equal_true;
			} else {
				goto is_smaller_or_equal_false;
			}
		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
			d1 = Z_DVAL_P(op1);
			d2 = (double)Z_LVAL_P(op2);
			goto is_smaller_or_equal_double;
		}
	}
	ZEND_VM_DISPATCH_TO_HELPER(zend_is_smaller_or_equal_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_EX op1, op2));
}

static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_BW_OR_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;

	op1 = EX_VAR(opline->op1.var);
	op2 = EX_VAR(opline->op2.var);
	if (1 && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST) {
		/* pass */
	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)
			&& EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
		ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(op1) | Z_LVAL_P(op2));
		ZEND_VM_NEXT_OPCODE();
	}

	ZEND_VM_DISPATCH_TO_HELPER(zend_bw_or_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_EX op1, op2));
}

static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_BW_AND_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;

	op1 = EX_VAR(opline->op1.var);
	op2 = EX_VAR(opline->op2.var);
	if (1 && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST) {
		/* pass */
	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)
			&& EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
		ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(op1) & Z_LVAL_P(op2));
		ZEND_VM_NEXT_OPCODE();
	}

	ZEND_VM_DISPATCH_TO_HELPER(zend_bw_and_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_EX op1, op2));
}

static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_BW_XOR_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;

	op1 = EX_VAR(opline->op1.var);
	op2 = EX_VAR(opline->op2.var);
	if (1 && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST) {
		/* pass */
	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)
			&& EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
		ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(op1) ^ Z_LVAL_P(op2));
		ZEND_VM_NEXT_OPCODE();
	}

	ZEND_VM_DISPATCH_TO_HELPER(zend_bw_xor_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_EX op1, op2));
}

static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2, *result;

	op1 = EX_VAR(opline->op1.var);
	op2 = EX_VAR(opline->op2.var);
	result = EX_VAR(opline->result.var);
	ZVAL_LONG(result, Z_LVAL_P(op1) + Z_LVAL_P(op2));
	ZEND_VM_NEXT_OPCODE();
}

static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_ADD_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2, *result;

	op1 = EX_VAR(opline->op1.var);
	op2 = EX_VAR(opline->op2.var);
	result = EX_VAR(opline->result.var);
	fast_long_add_function(result, op1, op2);
	ZEND_VM_NEXT_OPCODE();
}

static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_ADD_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2, *result;

	op1 = EX_VAR(opline->op1.var);
	op2 = EX_VAR(opline->op2.var);
	result = EX_VAR(opline->result.var);
	ZVAL_DOUBLE(result, Z_DVAL_P(op1) + Z_DVAL_P(op2));
	ZEND_VM_NEXT_OPCODE();
}

static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2, *result;

	op1 = EX_VAR(opline->op1.var);
	op2 = EX_VAR(opline->op2.var);
	result = EX_VAR(opline->result.var);
	ZVAL_LONG(result, Z_LVAL_P(op1) - Z_LVAL_P(op2));
	ZEND_VM_NEXT_OPCODE();
}

static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_SUB_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2, *result;

	op1 = EX_VAR(opline->op1.var);
	op2 = EX_VAR(opline->op2.var);
	result = EX_VAR(opline->result.var);
	fast_long_sub_function(result, op1, op2);
	ZEND_VM_NEXT_OPCODE();
}

static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_SUB_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2, *result;

	op1 = EX_VAR(opline->op1.var);
	op2 = EX_VAR(opline->op2.var);
	result = EX_VAR(opline->result.var);
	ZVAL_DOUBLE(result, Z_DVAL_P(op1) - Z_DVAL_P(op2));
	ZEND_VM_NEXT_OPCODE();
}

static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2, *result;

	op1 = EX_VAR(opline->op1.var);
	op2 = EX_VAR(opline->op2.var);
	result = EX_VAR(opline->result.var);
	ZVAL_LONG(result, Z_LVAL_P(op1) * Z_LVAL_P(op2));
	ZEND_VM_NEXT_OPCODE();
}

static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_MUL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2, *result;
	zend_long overflow;

	op1 = EX_VAR(opline->op1.var);
	op2 = EX_VAR(opline->op2.var);
	result = EX_VAR(opline->result.var);
	ZEND_SIGNED_MULTIPLY_LONG(Z_LVAL_P(op1), Z_LVAL_P(op2), Z_LVAL_P(result), Z_DVAL_P(result), overflow);
	Z_TYPE_INFO_P(result) = overflow ? IS_DOUBLE : IS_LONG;
	ZEND_VM_NEXT_OPCODE();
}

static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_MUL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2, *result;

	op1 = EX_VAR(opline->op1.var);
	op2 = EX_VAR(opline->op2.var);
	result = EX_VAR(opline->result.var);
	ZVAL_DOUBLE(result, Z_DVAL_P(op1) * Z_DVAL_P(op2));
	ZEND_VM_NEXT_OPCODE();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;
	bool result;

	op1 = EX_VAR(opline->op1.var);
	op2 = EX_VAR(opline->op2.var);
	result = (Z_LVAL_P(op1) == Z_LVAL_P(op2));
	ZEND_VM_SMART_BRANCH_NONE(result, 0);
}

static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;
	bool result;

	op1 = EX_VAR(opline->op1.var);
	op2 = EX_VAR(opline->op2.var);
	result = (Z_LVAL_P(op1) == Z_LVAL_P(op2));
	ZEND_VM_SMART_BRANCH_JMPZ(result, 0);
}

static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;
	bool result;

	op1 = EX_VAR(opline->op1.var);
	op2 = EX_VAR(opline->op2.var);
	result = (Z_LVAL_P(op1) == Z_LVAL_P(op2));
	ZEND_VM_SMART_BRANCH_JMPNZ(result, 0);
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;
	bool result;

	op1 = EX_VAR(opline->op1.var);
	op2 = EX_VAR(opline->op2.var);
	result = (Z_DVAL_P(op1) == Z_DVAL_P(op2));
	ZEND_VM_SMART_BRANCH_NONE(result, 0);
}

static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;
	bool result;

	op1 = EX_VAR(opline->op1.var);
	op2 = EX_VAR(opline->op2.var);
	result = (Z_DVAL_P(op1) == Z_DVAL_P(op2));
	ZEND_VM_SMART_BRANCH_JMPZ(result, 0);
}

static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;
	bool result;

	op1 = EX_VAR(opline->op1.var);
	op2 = EX_VAR(opline->op2.var);
	result = (Z_DVAL_P(op1) == Z_DVAL_P(op2));
	ZEND_VM_SMART_BRANCH_JMPNZ(result, 0);
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;
	bool result;

	op1 = EX_VAR(opline->op1.var);
	op2 = EX_VAR(opline->op2.var);
	result = (Z_LVAL_P(op1) != Z_LVAL_P(op2));
	ZEND_VM_SMART_BRANCH_NONE(result, 0);
}

static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;
	bool result;

	op1 = EX_VAR(opline->op1.var);
	op2 = EX_VAR(opline->op2.var);
	result = (Z_LVAL_P(op1) != Z_LVAL_P(op2));
	ZEND_VM_SMART_BRANCH_JMPZ(result, 0);
}

static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;
	bool result;

	op1 = EX_VAR(opline->op1.var);
	op2 = EX_VAR(opline->op2.var);
	result = (Z_LVAL_P(op1) != Z_LVAL_P(op2));
	ZEND_VM_SMART_BRANCH_JMPNZ(result, 0);
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;
	bool result;

	op1 = EX_VAR(opline->op1.var);
	op2 = EX_VAR(opline->op2.var);
	result = (Z_DVAL_P(op1) != Z_DVAL_P(op2));
	ZEND_VM_SMART_BRANCH_NONE(result, 0);
}

static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;
	bool result;

	op1 = EX_VAR(opline->op1.var);
	op2 = EX_VAR(opline->op2.var);
	result = (Z_DVAL_P(op1) != Z_DVAL_P(op2));
	ZEND_VM_SMART_BRANCH_JMPZ(result, 0);
}

static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;
	bool result;

	op1 = EX_VAR(opline->op1.var);
	op2 = EX_VAR(opline->op2.var);
	result = (Z_DVAL_P(op1) != Z_DVAL_P(op2));
	ZEND_VM_SMART_BRANCH_JMPNZ(result, 0);
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;
	bool result;

	op1 = EX_VAR(opline->op1.var);
	op2 = EX_VAR(opline->op2.var);
	result = (Z_LVAL_P(op1) < Z_LVAL_P(op2));
	ZEND_VM_SMART_BRANCH_NONE(result, 0);
}

static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;
	bool result;

	op1 = EX_VAR(opline->op1.var);
	op2 = EX_VAR(opline->op2.var);
	result = (Z_LVAL_P(op1) < Z_LVAL_P(op2));
	ZEND_VM_SMART_BRANCH_JMPZ(result, 0);
}

static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;
	bool result;

	op1 = EX_VAR(opline->op1.var);
	op2 = EX_VAR(opline->op2.var);
	result = (Z_LVAL_P(op1) < Z_LVAL_P(op2));
	ZEND_VM_SMART_BRANCH_JMPNZ(result, 0);
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;
	bool result;

	op1 = EX_VAR(opline->op1.var);
	op2 = EX_VAR(opline->op2.var);
	result = (Z_DVAL_P(op1) < Z_DVAL_P(op2));
	ZEND_VM_SMART_BRANCH_NONE(result, 0);
}

static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;
	bool result;

	op1 = EX_VAR(opline->op1.var);
	op2 = EX_VAR(opline->op2.var);
	result = (Z_DVAL_P(op1) < Z_DVAL_P(op2));
	ZEND_VM_SMART_BRANCH_JMPZ(result, 0);
}

static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;
	bool result;

	op1 = EX_VAR(opline->op1.var);
	op2 = EX_VAR(opline->op2.var);
	result = (Z_DVAL_P(op1) < Z_DVAL_P(op2));
	ZEND_VM_SMART_BRANCH_JMPNZ(result, 0);
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;
	bool result;

	op1 = EX_VAR(opline->op1.var);
	op2 = EX_VAR(opline->op2.var);
	result = (Z_LVAL_P(op1) <= Z_LVAL_P(op2));
	ZEND_VM_SMART_BRANCH_NONE(result, 0);
}

static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;
	bool result;

	op1 = EX_VAR(opline->op1.var);
	op2 = EX_VAR(opline->op2.var);
	result = (Z_LVAL_P(op1) <= Z_LVAL_P(op2));
	ZEND_VM_SMART_BRANCH_JMPZ(result, 0);
}

static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;
	bool result;

	op1 = EX_VAR(opline->op1.var);
	op2 = EX_VAR(opline->op2.var);
	result = (Z_LVAL_P(op1) <= Z_LVAL_P(op2));
	ZEND_VM_SMART_BRANCH_JMPNZ(result, 0);
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;
	bool result;

	op1 = EX_VAR(opline->op1.var);
	op2 = EX_VAR(opline->op2.var);
	result = (Z_DVAL_P(op1) <= Z_DVAL_P(op2));
	ZEND_VM_SMART_BRANCH_NONE(result, 0);
}

static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;
	bool result;

	op1 = EX_VAR(opline->op1.var);
	op2 = EX_VAR(opline->op2.var);
	result = (Z_DVAL_P(op1) <= Z_DVAL_P(op2));
	ZEND_VM_SMART_BRANCH_JMPZ(result, 0);
}

static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;
	bool result;

	op1 = EX_VAR(opline->op1.var);
	op2 = EX_VAR(opline->op2.var);
	result = (Z_DVAL_P(op1) <= Z_DVAL_P(op2));
	ZEND_VM_SMART_BRANCH_JMPNZ(result, 0);
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_FETCH_LIST_R_SPEC_TMPVARCV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *container;

	SAVE_OPLINE();
	container = EX_VAR(opline->op1.var);
	zend_fetch_dimension_address_LIST_r(container, _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC), (IS_TMP_VAR|IS_VAR) OPLINE_CC EXECUTE_DATA_CC);
	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_MATCH_ERROR_SPEC_TMPVARCV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op;

	SAVE_OPLINE();
	op = EX_VAR(opline->op1.var);
	zend_match_unhandled_error(op);
	HANDLE_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_FETCH_LIST_R_SPEC_TMPVARCV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *container;

	SAVE_OPLINE();
	container = EX_VAR(opline->op1.var);
	zend_fetch_dimension_address_LIST_r(container, EX_VAR(opline->op2.var), IS_CV OPLINE_CC EXECUTE_DATA_CC);


	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_BOOL_NOT_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *val;

	val = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
	if (Z_TYPE_INFO_P(val) == IS_TRUE) {
		ZVAL_FALSE(EX_VAR(opline->result.var));
	} else if (EXPECTED(Z_TYPE_INFO_P(val) <= IS_TRUE)) {
		/* The result and op1 can be the same cv zval */
		const uint32_t orig_val_type = Z_TYPE_INFO_P(val);
		ZVAL_TRUE(EX_VAR(opline->result.var));
		if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(orig_val_type == IS_UNDEF)) {
			SAVE_OPLINE();
			ZVAL_UNDEFINED_OP1();
			ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
		}
	} else {
		SAVE_OPLINE();
		ZVAL_BOOL(EX_VAR(opline->result.var), !i_zend_is_true(val));
		zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
	}
	ZEND_VM_NEXT_OPCODE();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_ECHO_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *z;

	SAVE_OPLINE();
	z = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);

	if (Z_TYPE_P(z) == IS_STRING) {
		zend_string *str = Z_STR_P(z);

		if (ZSTR_LEN(str) != 0) {
			zend_write(ZSTR_VAL(str), ZSTR_LEN(str));
		}
	} else {
		zend_string *str = zval_get_string_func(z);

		if (ZSTR_LEN(str) != 0) {
			zend_write(ZSTR_VAL(str), ZSTR_LEN(str));
		} else if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(z) == IS_UNDEF)) {
			ZVAL_UNDEFINED_OP1();
		}
		zend_string_release_ex(str, 0);
	}

	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_JMPZ_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *val;
	uint8_t op1_type;

	val = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);

	if (Z_TYPE_INFO_P(val) == IS_TRUE) {
		ZEND_VM_NEXT_OPCODE();
	} else if (EXPECTED(Z_TYPE_INFO_P(val) <= IS_TRUE)) {
		if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(val) == IS_UNDEF)) {
			SAVE_OPLINE();
			ZVAL_UNDEFINED_OP1();
			if (UNEXPECTED(EG(exception))) {
				HANDLE_EXCEPTION();
			}
		}
		ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0);
	}

	SAVE_OPLINE();
	op1_type = (IS_TMP_VAR|IS_VAR);
	if (i_zend_is_true(val)) {
		opline++;
	} else {
		opline = OP_JMP_ADDR(opline, opline->op2);
	}
	if (op1_type & (IS_TMP_VAR|IS_VAR)) {
		zval_ptr_dtor_nogc(val);
	}
	ZEND_VM_JMP(opline);
}

static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_JMPNZ_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *val;
	uint8_t op1_type;

	val = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);

	if (Z_TYPE_INFO_P(val) == IS_TRUE) {
		ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0);
	} else if (EXPECTED(Z_TYPE_INFO_P(val) <= IS_TRUE)) {
		if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(val) == IS_UNDEF)) {
			SAVE_OPLINE();
			ZVAL_UNDEFINED_OP1();
			if (UNEXPECTED(EG(exception))) {
				HANDLE_EXCEPTION();
			}
		}
		ZEND_VM_NEXT_OPCODE();
	}

	SAVE_OPLINE();
	op1_type = (IS_TMP_VAR|IS_VAR);
	if (i_zend_is_true(val)) {
		opline = OP_JMP_ADDR(opline, opline->op2);
	} else {
		opline++;
	}
	if (op1_type & (IS_TMP_VAR|IS_VAR)) {
		zval_ptr_dtor_nogc(val);
	}
	ZEND_VM_JMP(opline);
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_JMPZ_EX_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *val;
	bool ret;

	val = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);

	if (Z_TYPE_INFO_P(val) == IS_TRUE) {
		ZVAL_TRUE(EX_VAR(opline->result.var));
		ZEND_VM_NEXT_OPCODE();
	} else if (EXPECTED(Z_TYPE_INFO_P(val) <= IS_TRUE)) {
		ZVAL_FALSE(EX_VAR(opline->result.var));
		if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(val) == IS_UNDEF)) {
			SAVE_OPLINE();
			ZVAL_UNDEFINED_OP1();
			if (UNEXPECTED(EG(exception))) {
				HANDLE_EXCEPTION();
			}
		}
		ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0);
	}

	SAVE_OPLINE();
	ret = i_zend_is_true(val);
	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
	if (ret) {
		ZVAL_TRUE(EX_VAR(opline->result.var));
		opline++;
	} else {
		ZVAL_FALSE(EX_VAR(opline->result.var));
		opline = OP_JMP_ADDR(opline, opline->op2);
	}
	ZEND_VM_JMP(opline);
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_JMPNZ_EX_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *val;
	bool ret;

	val = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);

	if (Z_TYPE_INFO_P(val) == IS_TRUE) {
		ZVAL_TRUE(EX_VAR(opline->result.var));
		ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0);
	} else if (EXPECTED(Z_TYPE_INFO_P(val) <= IS_TRUE)) {
		ZVAL_FALSE(EX_VAR(opline->result.var));
		if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(val) == IS_UNDEF)) {
			SAVE_OPLINE();
			ZVAL_UNDEFINED_OP1();
			ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
		} else {
			ZEND_VM_NEXT_OPCODE();
		}
	}

	SAVE_OPLINE();
	ret = i_zend_is_true(val);
	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
	if (ret) {
		ZVAL_TRUE(EX_VAR(opline->result.var));
		opline = OP_JMP_ADDR(opline, opline->op2);
	} else {
		ZVAL_FALSE(EX_VAR(opline->result.var));
		opline++;
	}
	ZEND_VM_JMP(opline);
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_FREE_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE

	SAVE_OPLINE();
	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_FE_FREE_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	zval *var;
	USE_OPLINE

	var = EX_VAR(opline->op1.var);
	if (Z_TYPE_P(var) != IS_ARRAY) {
		SAVE_OPLINE();
		if (Z_FE_ITER_P(var) != (uint32_t)-1) {
			zend_hash_iterator_del(Z_FE_ITER_P(var));
		}
		zval_ptr_dtor_nogc(var);
		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
	}

	/* This is freeing an array. Use an inlined version of zval_ptr_dtor_nogc. */
	/* PHP only needs to save the opline and check for an exception if the last reference to the array was garbage collected (destructors of elements in the array could throw an exception) */
	if (Z_REFCOUNTED_P(var) && !Z_DELREF_P(var)) {
		SAVE_OPLINE();
		rc_dtor_func(Z_COUNTED_P(var));
		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
	}
	ZEND_VM_NEXT_OPCODE();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_THROW_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *value;

	SAVE_OPLINE();
	value = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);

	do {
		if ((IS_TMP_VAR|IS_VAR) == IS_CONST || UNEXPECTED(Z_TYPE_P(value) != IS_OBJECT)) {
			if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) {
				value = Z_REFVAL_P(value);
				if (EXPECTED(Z_TYPE_P(value) == IS_OBJECT)) {
					break;
				}
			}
			if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
				ZVAL_UNDEFINED_OP1();
				if (UNEXPECTED(EG(exception) != NULL)) {
					HANDLE_EXCEPTION();
				}
			}
			zend_throw_error(NULL, "Can only throw objects");
			zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
			HANDLE_EXCEPTION();
		}
	} while (0);

	zend_exception_save();
	Z_TRY_ADDREF_P(value);
	zend_throw_exception_object(value);
	zend_exception_restore();
	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
	HANDLE_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_BOOL_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *val;

	val = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
	if (Z_TYPE_INFO_P(val) == IS_TRUE) {
		ZVAL_TRUE(EX_VAR(opline->result.var));
	} else if (EXPECTED(Z_TYPE_INFO_P(val) <= IS_TRUE)) {
		/* The result and op1 can be the same cv zval */
		const uint32_t orig_val_type = Z_TYPE_INFO_P(val);
		ZVAL_FALSE(EX_VAR(opline->result.var));
		if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(orig_val_type == IS_UNDEF)) {
			SAVE_OPLINE();
			ZVAL_UNDEFINED_OP1();
			ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
		}
	} else {
		SAVE_OPLINE();
		ZVAL_BOOL(EX_VAR(opline->result.var), i_zend_is_true(val));
		zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
	}
	ZEND_VM_NEXT_OPCODE();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_CLONE_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *obj;
	zend_object *zobj;
	zend_class_entry *ce, *scope;
	zend_function *clone;
	zend_object_clone_obj_t clone_call;

	SAVE_OPLINE();
	obj = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);

	/* ZEND_CLONE also exists as the clone() function and both implementations must be kept in sync.
	 * The OPcode intentionally does not support a clone-with property list to keep it simple. */

	do {
		if ((IS_TMP_VAR|IS_VAR) == IS_CONST ||
		    ((IS_TMP_VAR|IS_VAR) != IS_UNUSED && UNEXPECTED(Z_TYPE_P(obj) != IS_OBJECT))) {
			if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && Z_ISREF_P(obj)) {
				obj = Z_REFVAL_P(obj);
				if (EXPECTED(Z_TYPE_P(obj) == IS_OBJECT)) {
					break;
				}
			}
			ZVAL_UNDEF(EX_VAR(opline->result.var));
			if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(obj) == IS_UNDEF)) {
				ZVAL_UNDEFINED_OP1();
				if (UNEXPECTED(EG(exception) != NULL)) {
					HANDLE_EXCEPTION();
				}
			}
			zend_type_error("clone(): Argument #1 ($object) must be of type object, %s given", zend_zval_value_name(obj));
			zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
			HANDLE_EXCEPTION();
		}
	} while (0);

	zobj = Z_OBJ_P(obj);
	ce = zobj->ce;
	clone = ce->clone;
	clone_call = zobj->handlers->clone_obj;
	if (UNEXPECTED(clone_call == NULL)) {
		zend_throw_error(NULL, "Trying to clone an uncloneable object of class %s", ZSTR_VAL(ce->name));
		zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
		ZVAL_UNDEF(EX_VAR(opline->result.var));
		HANDLE_EXCEPTION();
	}

	if (clone && !(clone->common.fn_flags & ZEND_ACC_PUBLIC)) {
		scope = EX(func)->op_array.scope;
		ZEND_ASSERT(!(clone->common.fn_flags & ZEND_ACC_PUBLIC));
		if (!zend_check_method_accessible(clone, scope)) {
			zend_bad_method_call(clone, clone->common.function_name, scope);
			zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
			ZVAL_UNDEF(EX_VAR(opline->result.var));
			HANDLE_EXCEPTION();
		}
	}

	ZVAL_OBJ(EX_VAR(opline->result.var), clone_call(zobj));

	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_INCLUDE_OR_EVAL_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zend_op_array *new_op_array;
	zval *inc_filename;

	SAVE_OPLINE();
	inc_filename = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
	new_op_array = zend_include_or_eval(inc_filename, opline->extended_value);
	if (UNEXPECTED(EG(exception) != NULL)) {
		zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
		if (new_op_array != ZEND_FAKE_OP_ARRAY && new_op_array != NULL) {
			destroy_op_array(new_op_array);
			efree_size(new_op_array, sizeof(zend_op_array));
		}
		UNDEF_RESULT();
		HANDLE_EXCEPTION();
	} else if (new_op_array == ZEND_FAKE_OP_ARRAY) {
		if (RETURN_VALUE_USED(opline)) {
			ZVAL_TRUE(EX_VAR(opline->result.var));
		}
	} else if (UNEXPECTED(new_op_array == NULL)) {
		if (RETURN_VALUE_USED(opline)) {
			ZVAL_FALSE(EX_VAR(opline->result.var));
		}
	} else if (new_op_array->last == 1
			&& new_op_array->opcodes[0].opcode == ZEND_RETURN
			&& new_op_array->opcodes[0].op1_type == IS_CONST
			&& EXPECTED(zend_execute_ex == execute_ex)) {
		if (RETURN_VALUE_USED(opline)) {
			const zend_op *op = new_op_array->opcodes;

			ZVAL_COPY(EX_VAR(opline->result.var), RT_CONSTANT(op, op->op1));
		}
		zend_destroy_static_vars(new_op_array);
		destroy_op_array(new_op_array);
		efree_size(new_op_array, sizeof(zend_op_array));
	} else {
		zval *return_value = NULL;
		zend_execute_data *call;
		if (RETURN_VALUE_USED(opline)) {
			return_value = EX_VAR(opline->result.var);
		}

		new_op_array->scope = EX(func)->op_array.scope;

		call = zend_vm_stack_push_call_frame(
			(Z_TYPE_INFO(EX(This)) & ZEND_CALL_HAS_THIS) | ZEND_CALL_NESTED_CODE | ZEND_CALL_HAS_SYMBOL_TABLE,
			(zend_function*)new_op_array, 0,
			Z_PTR(EX(This)));

		if (EX_CALL_INFO() & ZEND_CALL_HAS_SYMBOL_TABLE) {
			call->symbol_table = EX(symbol_table);
		} else {
			call->symbol_table = zend_rebuild_symbol_table();
		}

		call->prev_execute_data = execute_data;
		i_init_code_execute_data(call, new_op_array, return_value);


		if (EXPECTED(zend_execute_ex == execute_ex)) {
			zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
			ZEND_VM_ENTER();
		} else {
			ZEND_ADD_CALL_FLAG(call, ZEND_CALL_TOP);
			zend_execute_ex(call);
			zend_vm_stack_free_call_frame(call);
		}

		zend_destroy_static_vars(new_op_array);
		destroy_op_array(new_op_array);
		efree_size(new_op_array, sizeof(zend_op_array));
		if (UNEXPECTED(EG(exception) != NULL)) {
			zend_rethrow_exception(execute_data);
			zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
			UNDEF_RESULT();
			HANDLE_EXCEPTION();
		}
	}
	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
	ZEND_VM_NEXT_OPCODE();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_YIELD_FROM_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C);
	zval *val;

	SAVE_OPLINE();
	val = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);

	if (UNEXPECTED(generator->flags & ZEND_GENERATOR_FORCED_CLOSE)) {
		zend_throw_error(NULL, "Cannot use \"yield from\" in a force-closed generator");
		zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
		UNDEF_RESULT();
		HANDLE_EXCEPTION();
	}

yield_from_try_again:
	if (Z_TYPE_P(val) == IS_ARRAY) {
		ZVAL_COPY_VALUE(&generator->values, val);
		if (Z_OPT_REFCOUNTED_P(val)) {
			Z_ADDREF_P(val);
		}
		Z_FE_POS(generator->values) = 0;
		zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
	} else if ((IS_TMP_VAR|IS_VAR) != IS_CONST && Z_TYPE_P(val) == IS_OBJECT && Z_OBJCE_P(val)->get_iterator) {
		zend_class_entry *ce = Z_OBJCE_P(val);
		if (ce == zend_ce_generator) {
			zend_generator *new_gen = (zend_generator *) Z_OBJ_P(val);

			Z_ADDREF_P(val);
			zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));

			if (UNEXPECTED(new_gen->execute_data == NULL)) {
				zend_throw_error(NULL, "Generator passed to yield from was aborted without proper return and is unable to continue");
				zval_ptr_dtor(val);
				UNDEF_RESULT();
				HANDLE_EXCEPTION();
			} else if (Z_ISUNDEF(new_gen->retval)) {
				if (UNEXPECTED(zend_generator_get_current(new_gen) == generator)) {
					zend_throw_error(NULL, "Impossible to yield from the Generator being currently run");
					zval_ptr_dtor(val);
					UNDEF_RESULT();
					HANDLE_EXCEPTION();
				} else {
					zend_generator_yield_from(generator, new_gen);
				}
			} else {
				if (RETURN_VALUE_USED(opline)) {
					ZVAL_COPY(EX_VAR(opline->result.var), &new_gen->retval);
				}
				ZEND_VM_NEXT_OPCODE();
			}
		} else {
			zend_object_iterator *iter = ce->get_iterator(ce, val, 0);
			zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));

			if (UNEXPECTED(!iter) || UNEXPECTED(EG(exception))) {
				if (!EG(exception)) {
					zend_throw_error(NULL, "Object of type %s did not create an Iterator", ZSTR_VAL(ce->name));
				}
				UNDEF_RESULT();
				HANDLE_EXCEPTION();
			}

			iter->index = 0;
			if (iter->funcs->rewind) {
				iter->funcs->rewind(iter);
				if (UNEXPECTED(EG(exception) != NULL)) {
					OBJ_RELEASE(&iter->std);
					UNDEF_RESULT();
					HANDLE_EXCEPTION();
				}
			}

			ZVAL_OBJ(&generator->values, &iter->std);
		}
	} else if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && Z_TYPE_P(val) == IS_REFERENCE) {
		val = Z_REFVAL_P(val);
		goto yield_from_try_again;
	} else {
		zend_throw_error(NULL, "Can use \"yield from\" only with arrays and Traversables");
		zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
		UNDEF_RESULT();
		HANDLE_EXCEPTION();
	}

	/* This is the default return value
	 * when the expression is a Generator, it will be overwritten in zend_generator_resume() */
	if (RETURN_VALUE_USED(opline)) {
		ZVAL_NULL(EX_VAR(opline->result.var));
	}

	/* This generator has no send target (though the generator we delegate to might have one) */
	generator->send_target = NULL;

	/* The GOTO VM uses a local opline variable. We need to set the opline
	 * variable in execute_data so we don't resume at an old position. */
	SAVE_OPLINE();

	ZEND_VM_RETURN();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_STRLEN_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *value;

	value = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
	if (EXPECTED(Z_TYPE_P(value) == IS_STRING)) {
		ZVAL_LONG(EX_VAR(opline->result.var), Z_STRLEN_P(value));
		if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
			zval_ptr_dtor_str(value);
		}
		ZEND_VM_NEXT_OPCODE();
	} else {
		bool strict;

		if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && Z_TYPE_P(value) == IS_REFERENCE) {
			value = Z_REFVAL_P(value);
			if (EXPECTED(Z_TYPE_P(value) == IS_STRING)) {
				ZVAL_LONG(EX_VAR(opline->result.var), Z_STRLEN_P(value));
				zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
				ZEND_VM_NEXT_OPCODE();
			}
		}

		SAVE_OPLINE();
		if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
			value = ZVAL_UNDEFINED_OP1();
		}
		strict = EX_USES_STRICT_TYPES();
		do {
			if (EXPECTED(!strict)) {
				zend_string *str;
				zval tmp;

				if (UNEXPECTED(Z_TYPE_P(value) == IS_NULL)) {
					zend_error(E_DEPRECATED,
						"strlen(): Passing null to parameter #1 ($string) of type string is deprecated");
					ZVAL_LONG(EX_VAR(opline->result.var), 0);
					if (UNEXPECTED(EG(exception))) {
						HANDLE_EXCEPTION();
					}
					break;
				}

				ZVAL_COPY(&tmp, value);
				if (zend_parse_arg_str_weak(&tmp, &str, 1)) {
					ZVAL_LONG(EX_VAR(opline->result.var), ZSTR_LEN(str));
					zval_ptr_dtor(&tmp);
					break;
				}
				zval_ptr_dtor(&tmp);
			}
			if (!EG(exception)) {
				zend_type_error("strlen(): Argument #1 ($string) must be of type string, %s given", zend_zval_value_name(value));
			}
			ZVAL_UNDEF(EX_VAR(opline->result.var));
		} while (0);
	}
	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_TYPE_CHECK_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *value;
	int result = 0;

	value = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
	if ((opline->extended_value >> (uint32_t)Z_TYPE_P(value)) & 1) {
type_check_resource:
		if (opline->extended_value != MAY_BE_RESOURCE
		 || EXPECTED(NULL != zend_rsrc_list_get_rsrc_type(Z_RES_P(value)))) {
			result = 1;
		}
	} else if (((IS_TMP_VAR|IS_VAR) & (IS_CV|IS_VAR)) && Z_ISREF_P(value)) {
		value = Z_REFVAL_P(value);
		if ((opline->extended_value >> (uint32_t)Z_TYPE_P(value)) & 1) {
			goto type_check_resource;
		}
	} else if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
		result = ((1 << IS_NULL) & opline->extended_value) != 0;
		SAVE_OPLINE();
		ZVAL_UNDEFINED_OP1();
		if (UNEXPECTED(EG(exception))) {
			ZVAL_UNDEF(EX_VAR(opline->result.var));
			HANDLE_EXCEPTION();
		}
	}
	if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
		SAVE_OPLINE();
		zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
		ZEND_VM_SMART_BRANCH(result, 1);
	} else {
		ZEND_VM_SMART_BRANCH(result, 0);
	}
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_FETCH_CLASS_NAME_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	uint32_t fetch_type;
	zend_class_entry *called_scope, *scope;
	USE_OPLINE

	if ((IS_TMP_VAR|IS_VAR) != IS_UNUSED) {
		SAVE_OPLINE();
		zval *op = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
		if (UNEXPECTED(Z_TYPE_P(op) != IS_OBJECT)) {
			ZVAL_DEREF(op);
			if (Z_TYPE_P(op) != IS_OBJECT) {
				zend_type_error("Cannot use \"::class\" on %s", zend_zval_value_name(op));
				ZVAL_UNDEF(EX_VAR(opline->result.var));
				zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
				HANDLE_EXCEPTION();
			}
		}

		ZVAL_STR_COPY(EX_VAR(opline->result.var), Z_OBJCE_P(op)->name);
		zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
	}

	fetch_type = opline->op1.num;
	scope = EX(func)->op_array.scope;
	if (UNEXPECTED(scope == NULL)) {
		SAVE_OPLINE();
		zend_throw_error(NULL, "Cannot use \"%s\" in the global scope",
			fetch_type == ZEND_FETCH_CLASS_SELF ? "self" :
			fetch_type == ZEND_FETCH_CLASS_PARENT ? "parent" : "static");
		ZVAL_UNDEF(EX_VAR(opline->result.var));
		HANDLE_EXCEPTION();
	}

	switch (fetch_type) {
		case ZEND_FETCH_CLASS_SELF:
			ZVAL_STR_COPY(EX_VAR(opline->result.var), scope->name);
			break;
		case ZEND_FETCH_CLASS_PARENT:
			if (UNEXPECTED(scope->parent == NULL)) {
				SAVE_OPLINE();
				zend_throw_error(NULL,
					"Cannot use \"parent\" when current class scope has no parent");
				ZVAL_UNDEF(EX_VAR(opline->result.var));
				HANDLE_EXCEPTION();
			}
			ZVAL_STR_COPY(EX_VAR(opline->result.var), scope->parent->name);
			break;
		case ZEND_FETCH_CLASS_STATIC:
			if (Z_TYPE(EX(This)) == IS_OBJECT) {
				called_scope = Z_OBJCE(EX(This));
			} else {
				called_scope = Z_CE(EX(This));
			}
			ZVAL_STR_COPY(EX_VAR(opline->result.var), called_scope->name);
			break;
		EMPTY_SWITCH_DEFAULT_CASE()
	}
	ZEND_VM_NEXT_OPCODE();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_DIV_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;

	SAVE_OPLINE();
	op1 = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
	op2 = RT_CONSTANT(opline, opline->op2);
	div_function(EX_VAR(opline->result.var), op1, op2);
	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));


	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_POW_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;

	SAVE_OPLINE();
	op1 = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
	op2 = RT_CONSTANT(opline, opline->op2);
	pow_function(EX_VAR(opline->result.var), op1, op2);
	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));


	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_CONCAT_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;

	op1 = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
	op2 = RT_CONSTANT(opline, opline->op2);

	if (((IS_TMP_VAR|IS_VAR) == IS_CONST || EXPECTED(Z_TYPE_P(op1) == IS_STRING)) &&
	    (IS_CONST == IS_CONST || EXPECTED(Z_TYPE_P(op2) == IS_STRING))) {
		zend_string *op1_str = Z_STR_P(op1);
		zend_string *op2_str = Z_STR_P(op2);
		zend_string *str;
		uint32_t flags = ZSTR_GET_COPYABLE_CONCAT_PROPERTIES_BOTH(op1_str, op2_str);

		if ((IS_TMP_VAR|IS_VAR) != IS_CONST && UNEXPECTED(ZSTR_LEN(op1_str) == 0)) {
			if (IS_CONST == IS_CONST || IS_CONST == IS_CV) {
				ZVAL_STR_COPY(EX_VAR(opline->result.var), op2_str);
			} else {
				ZVAL_STR(EX_VAR(opline->result.var), op2_str);
			}
			if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
				zend_string_release_ex(op1_str, 0);
			}
		} else if (IS_CONST != IS_CONST && UNEXPECTED(ZSTR_LEN(op2_str) == 0)) {
			if ((IS_TMP_VAR|IS_VAR) == IS_CONST || (IS_TMP_VAR|IS_VAR) == IS_CV) {
				ZVAL_STR_COPY(EX_VAR(opline->result.var), op1_str);
			} else {
				ZVAL_STR(EX_VAR(opline->result.var), op1_str);
			}
			if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
				zend_string_release_ex(op2_str, 0);
			}
		} else if ((IS_TMP_VAR|IS_VAR) != IS_CONST && (IS_TMP_VAR|IS_VAR) != IS_CV &&
		    !ZSTR_IS_INTERNED(op1_str) && GC_REFCOUNT(op1_str) == 1) {
			size_t len = ZSTR_LEN(op1_str);

			if (UNEXPECTED(len > ZSTR_MAX_LEN - ZSTR_LEN(op2_str))) {
				zend_error_noreturn(E_ERROR, "Integer overflow in memory allocation");
			}
			str = zend_string_extend(op1_str, len + ZSTR_LEN(op2_str), 0);
			memcpy(ZSTR_VAL(str) + len, ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
			GC_ADD_FLAGS(str, flags);
			ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
			if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
				zend_string_release_ex(op2_str, 0);
			}
		} else {
			str = zend_string_alloc(ZSTR_LEN(op1_str) + ZSTR_LEN(op2_str), 0);
			memcpy(ZSTR_VAL(str), ZSTR_VAL(op1_str), ZSTR_LEN(op1_str));
			memcpy(ZSTR_VAL(str) + ZSTR_LEN(op1_str), ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
			GC_ADD_FLAGS(str, flags);
			ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
			if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
				zend_string_release_ex(op1_str, 0);
			}
			if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
				zend_string_release_ex(op2_str, 0);
			}
		}
		ZEND_VM_NEXT_OPCODE();
	} else {
		SAVE_OPLINE();

		if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
			op1 = ZVAL_UNDEFINED_OP1();
		}
		if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(op2) == IS_UNDEF)) {
			op2 = ZVAL_UNDEFINED_OP2();
		}
		concat_function(EX_VAR(opline->result.var), op1, op2);
		zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));


		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
	}
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_IS_EQUAL_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;
	double d1, d2;

	op1 = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
	op2 = RT_CONSTANT(opline, opline->op2);
	if (1 && (IS_TMP_VAR|IS_VAR) == IS_CONST && IS_CONST == IS_CONST) {
		/* pass */
	} else if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
		if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
			if (EXPECTED(Z_LVAL_P(op1) == Z_LVAL_P(op2))) {
is_equal_true:
				ZEND_VM_SMART_BRANCH_TRUE_NONE();
			} else {
is_equal_false:
				ZEND_VM_SMART_BRANCH_FALSE_NONE();
			}
		} else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
			d1 = (double)Z_LVAL_P(op1);
			d2 = Z_DVAL_P(op2);
			goto is_equal_double;
		}
	} else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) {
		if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
			d1 = Z_DVAL_P(op1);
			d2 = Z_DVAL_P(op2);
is_equal_double:
			if (d1 == d2) {
				goto is_equal_true;
			} else {
				goto is_equal_false;
			}
		} else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
			d1 = Z_DVAL_P(op1);
			d2 = (double)Z_LVAL_P(op2);
			goto is_equal_double;
		}
	} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
		if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
			bool result = zend_fast_equal_strings(Z_STR_P(op1), Z_STR_P(op2));
			if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
				zval_ptr_dtor_str(op1);
			}
			if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
				zval_ptr_dtor_str(op2);
			}
			if (result) {
				goto is_equal_true;
			} else {
				goto is_equal_false;
			}
		}
	}
	ZEND_VM_DISPATCH_TO_HELPER(zend_is_equal_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_EX op1, op2));
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_IS_EQUAL_SPEC_TMPVAR_CONST_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;
	double d1, d2;

	op1 = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
	op2 = RT_CONSTANT(opline, opline->op2);
	if (1 && (IS_TMP_VAR|IS_VAR) == IS_CONST && IS_CONST == IS_CONST) {
		/* pass */
	} else if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
		if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
			if (EXPECTED(Z_LVAL_P(op1) == Z_LVAL_P(op2))) {
is_equal_true:
				ZEND_VM_SMART_BRANCH_TRUE_JMPZ();
			} else {
is_equal_false:
				ZEND_VM_SMART_BRANCH_FALSE_JMPZ();
			}
		} else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
			d1 = (double)Z_LVAL_P(op1);
			d2 = Z_DVAL_P(op2);
			goto is_equal_double;
		}
	} else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) {
		if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
			d1 = Z_DVAL_P(op1);
			d2 = Z_DVAL_P(op2);
is_equal_double:
			if (d1 == d2) {
				goto is_equal_true;
			} else {
				goto is_equal_false;
			}
		} else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
			d1 = Z_DVAL_P(op1);
			d2 = (double)Z_LVAL_P(op2);
			goto is_equal_double;
		}
	} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
		if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
			bool result = zend_fast_equal_strings(Z_STR_P(op1), Z_STR_P(op2));
			if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
				zval_ptr_dtor_str(op1);
			}
			if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
				zval_ptr_dtor_str(op2);
			}
			if (result) {
				goto is_equal_true;
			} else {
				goto is_equal_false;
			}
		}
	}
	ZEND_VM_DISPATCH_TO_HELPER(zend_is_equal_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_EX op1, op2));
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_IS_EQUAL_SPEC_TMPVAR_CONST_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;
	double d1, d2;

	op1 = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
	op2 = RT_CONSTANT(opline, opline->op2);
	if (1 && (IS_TMP_VAR|IS_VAR) == IS_CONST && IS_CONST == IS_CONST) {
		/* pass */
	} else if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
		if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
			if (EXPECTED(Z_LVAL_P(op1) == Z_LVAL_P(op2))) {
is_equal_true:
				ZEND_VM_SMART_BRANCH_TRUE_JMPNZ();
			} else {
is_equal_false:
				ZEND_VM_SMART_BRANCH_FALSE_JMPNZ();
			}
		} else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
			d1 = (double)Z_LVAL_P(op1);
			d2 = Z_DVAL_P(op2);
			goto is_equal_double;
		}
	} else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) {
		if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
			d1 = Z_DVAL_P(op1);
			d2 = Z_DVAL_P(op2);
is_equal_double:
			if (d1 == d2) {
				goto is_equal_true;
			} else {
				goto is_equal_false;
			}
		} else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
			d1 = Z_DVAL_P(op1);
			d2 = (double)Z_LVAL_P(op2);
			goto is_equal_double;
		}
	} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
		if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
			bool result = zend_fast_equal_strings(Z_STR_P(op1), Z_STR_P(op2));
			if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
				zval_ptr_dtor_str(op1);
			}
			if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
				zval_ptr_dtor_str(op2);
			}
			if (result) {
				goto is_equal_true;
			} else {
				goto is_equal_false;
			}
		}
	}
	ZEND_VM_DISPATCH_TO_HELPER(zend_is_equal_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_EX op1, op2));
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;
	double d1, d2;

	op1 = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
	op2 = RT_CONSTANT(opline, opline->op2);
	if (1 && (IS_TMP_VAR|IS_VAR) == IS_CONST && IS_CONST == IS_CONST) {
		/* pass */
	} else if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
		if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
			if (EXPECTED(Z_LVAL_P(op1) != Z_LVAL_P(op2))) {
is_not_equal_true:
				ZEND_VM_SMART_BRANCH_TRUE_NONE();
			} else {
is_not_equal_false:
				ZEND_VM_SMART_BRANCH_FALSE_NONE();
			}
		} else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
			d1 = (double)Z_LVAL_P(op1);
			d2 = Z_DVAL_P(op2);
			goto is_not_equal_double;
		}
	} else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) {
		if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
			d1 = Z_DVAL_P(op1);
			d2 = Z_DVAL_P(op2);
is_not_equal_double:
			if (d1 != d2) {
				goto is_not_equal_true;
			} else {
				goto is_not_equal_false;
			}
		} else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
			d1 = Z_DVAL_P(op1);
			d2 = (double)Z_LVAL_P(op2);
			goto is_not_equal_double;
		}
	} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
		if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
			bool result = zend_fast_equal_strings(Z_STR_P(op1), Z_STR_P(op2));
			if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
				zval_ptr_dtor_str(op1);
			}
			if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
				zval_ptr_dtor_str(op2);
			}
			if (!result) {
				goto is_not_equal_true;
			} else {
				goto is_not_equal_false;
			}
		}
	}
	ZEND_VM_DISPATCH_TO_HELPER(zend_is_not_equal_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_EX op1, op2));
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_CONST_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;
	double d1, d2;

	op1 = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
	op2 = RT_CONSTANT(opline, opline->op2);
	if (1 && (IS_TMP_VAR|IS_VAR) == IS_CONST && IS_CONST == IS_CONST) {
		/* pass */
	} else if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
		if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
			if (EXPECTED(Z_LVAL_P(op1) != Z_LVAL_P(op2))) {
is_not_equal_true:
				ZEND_VM_SMART_BRANCH_TRUE_JMPZ();
			} else {
is_not_equal_false:
				ZEND_VM_SMART_BRANCH_FALSE_JMPZ();
			}
		} else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
			d1 = (double)Z_LVAL_P(op1);
			d2 = Z_DVAL_P(op2);
			goto is_not_equal_double;
		}
	} else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) {
		if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
			d1 = Z_DVAL_P(op1);
			d2 = Z_DVAL_P(op2);
is_not_equal_double:
			if (d1 != d2) {
				goto is_not_equal_true;
			} else {
				goto is_not_equal_false;
			}
		} else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
			d1 = Z_DVAL_P(op1);
			d2 = (double)Z_LVAL_P(op2);
			goto is_not_equal_double;
		}
	} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
		if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
			bool result = zend_fast_equal_strings(Z_STR_P(op1), Z_STR_P(op2));
			if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
				zval_ptr_dtor_str(op1);
			}
			if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
				zval_ptr_dtor_str(op2);
			}
			if (!result) {
				goto is_not_equal_true;
			} else {
				goto is_not_equal_false;
			}
		}
	}
	ZEND_VM_DISPATCH_TO_HELPER(zend_is_not_equal_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_EX op1, op2));
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_CONST_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;
	double d1, d2;

	op1 = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
	op2 = RT_CONSTANT(opline, opline->op2);
	if (1 && (IS_TMP_VAR|IS_VAR) == IS_CONST && IS_CONST == IS_CONST) {
		/* pass */
	} else if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
		if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
			if (EXPECTED(Z_LVAL_P(op1) != Z_LVAL_P(op2))) {
is_not_equal_true:
				ZEND_VM_SMART_BRANCH_TRUE_JMPNZ();
			} else {
is_not_equal_false:
				ZEND_VM_SMART_BRANCH_FALSE_JMPNZ();
			}
		} else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
			d1 = (double)Z_LVAL_P(op1);
			d2 = Z_DVAL_P(op2);
			goto is_not_equal_double;
		}
	} else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) {
		if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
			d1 = Z_DVAL_P(op1);
			d2 = Z_DVAL_P(op2);
is_not_equal_double:
			if (d1 != d2) {
				goto is_not_equal_true;
			} else {
				goto is_not_equal_false;
			}
		} else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
			d1 = Z_DVAL_P(op1);
			d2 = (double)Z_LVAL_P(op2);
			goto is_not_equal_double;
		}
	} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
		if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
			bool result = zend_fast_equal_strings(Z_STR_P(op1), Z_STR_P(op2));
			if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
				zval_ptr_dtor_str(op1);
			}
			if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
				zval_ptr_dtor_str(op2);
			}
			if (!result) {
				goto is_not_equal_true;
			} else {
				goto is_not_equal_false;
			}
		}
	}
	ZEND_VM_DISPATCH_TO_HELPER(zend_is_not_equal_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_EX op1, op2));
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_SPACESHIP_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;

	SAVE_OPLINE();
	op1 = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
	op2 = RT_CONSTANT(opline, opline->op2);
	compare_function(EX_VAR(opline->result.var), op1, op2);
	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));


	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_BOOL_XOR_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;

	SAVE_OPLINE();
	op1 = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
	op2 = RT_CONSTANT(opline, opline->op2);
	boolean_xor_function(EX_VAR(opline->result.var), op1, op2);
	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));


	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_FETCH_DIM_R_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *container, *dim, *value;

	SAVE_OPLINE();
	container = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
	dim = RT_CONSTANT(opline, opline->op2);
	if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
		if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
fetch_dim_r_array:
			value = zend_fetch_dimension_address_inner(Z_ARRVAL_P(container), dim, IS_CONST, BP_VAR_R EXECUTE_DATA_CC);
			ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
		} else if (EXPECTED(Z_TYPE_P(container) == IS_REFERENCE)) {
			container = Z_REFVAL_P(container);
			if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
				goto fetch_dim_r_array;
			} else {
				goto fetch_dim_r_slow;
			}
		} else {
fetch_dim_r_slow:
			if (IS_CONST == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
				dim++;
			}
			zend_fetch_dimension_address_read_R_slow(container, dim OPLINE_CC EXECUTE_DATA_CC);
		}
	} else {
		zend_fetch_dimension_address_read_R(container, dim, IS_CONST OPLINE_CC EXECUTE_DATA_CC);
	}


	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_FETCH_DIM_IS_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *container;

	SAVE_OPLINE();
	container = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
	zend_fetch_dimension_address_read_IS(container, RT_CONSTANT(opline, opline->op2), IS_CONST OPLINE_CC EXECUTE_DATA_CC);


	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_FETCH_OBJ_R_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *container;
	void **cache_slot = NULL;

	SAVE_OPLINE();
	container = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);

	if ((IS_TMP_VAR|IS_VAR) == IS_CONST ||
	    ((IS_TMP_VAR|IS_VAR) != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
		do {
			if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
				container = Z_REFVAL_P(container);
				if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
					break;
				}
			}
			if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
				ZVAL_UNDEFINED_OP1();
			}
			zend_wrong_property_read(container, RT_CONSTANT(opline, opline->op2));
			ZVAL_NULL(EX_VAR(opline->result.var));
			goto fetch_obj_r_finish;
		} while (0);
	}

	/* here we are sure we are dealing with an object */
	do {
		zend_object *zobj = Z_OBJ_P(container);
		zend_string *name, *tmp_name;
		zval *retval;

		if (IS_CONST == IS_CONST) {
			cache_slot = CACHE_ADDR(opline->extended_value & ~ZEND_FETCH_REF /* FUNC_ARG fetch may contain it */);

			if (EXPECTED(zobj->ce == CACHED_PTR_EX(cache_slot))) {
				uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);

				if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
fetch_obj_r_simple:
					retval = OBJ_PROP(zobj, prop_offset);
					if (EXPECTED(Z_TYPE_INFO_P(retval) != IS_UNDEF)) {
						if (0 || ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) != 0) {
							goto fetch_obj_r_copy;
						} else {
fetch_obj_r_fast_copy:
							ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
							ZEND_VM_NEXT_OPCODE();
						}
					}
				} else if (UNEXPECTED(IS_HOOKED_PROPERTY_OFFSET(prop_offset))) {
					zend_property_info *prop_info = CACHED_PTR_EX(cache_slot + 2);
					if (ZEND_IS_PROPERTY_HOOK_SIMPLE_READ(prop_offset)) {
						prop_offset = prop_info->offset;
						goto fetch_obj_r_simple;
					} else if (EXPECTED(ZEND_IS_PROPERTY_HOOK_SIMPLE_GET(prop_offset))) {
						zend_function *hook = prop_info->hooks[ZEND_PROPERTY_HOOK_GET];
						ZEND_ASSERT(hook->type == ZEND_USER_FUNCTION);
						ZEND_ASSERT(RUN_TIME_CACHE(&hook->op_array));

						uint32_t call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_HAS_THIS;
						if ((IS_TMP_VAR|IS_VAR) & IS_CV) {
							GC_ADDREF(zobj);
						}
						if ((IS_TMP_VAR|IS_VAR) & (IS_CV|IS_VAR|IS_TMP_VAR)) {
							call_info |= ZEND_CALL_RELEASE_THIS;
						}
						zend_execute_data *call = zend_vm_stack_push_call_frame(call_info, hook, 0, zobj);
						call->prev_execute_data = execute_data;
						call->call = NULL;
						call->return_value = EX_VAR(opline->result.var);
						call->run_time_cache = RUN_TIME_CACHE(&hook->op_array);

						execute_data = call;
						EG(current_execute_data) = execute_data;
						zend_init_cvs(0, hook->op_array.last_var EXECUTE_DATA_CC);

#if defined(ZEND_VM_IP_GLOBAL_REG) && ((ZEND_VM_KIND == ZEND_VM_KIND_CALL) || (ZEND_VM_KIND == ZEND_VM_KIND_HYBRID))
						opline = hook->op_array.opcodes;
#else
						EX(opline) = hook->op_array.opcodes;
#endif
						LOAD_OPLINE_EX();




						ZEND_VM_ENTER_EX();
					}
					/* Fall through to read_property for hooks. */
				} else if (EXPECTED(zobj->properties != NULL)) {
					ZEND_ASSERT(IS_DYNAMIC_PROPERTY_OFFSET(prop_offset));
					name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
					if (!IS_UNKNOWN_DYNAMIC_PROPERTY_OFFSET(prop_offset)) {
						uintptr_t idx = ZEND_DECODE_DYN_PROP_OFFSET(prop_offset);

						if (EXPECTED(idx < zobj->properties->nNumUsed * sizeof(Bucket))) {
							Bucket *p = (Bucket*)((char*)zobj->properties->arData + idx);

							if (EXPECTED(p->key == name) ||
							    (EXPECTED(p->h == ZSTR_H(name)) &&
							     EXPECTED(p->key != NULL) &&
							     EXPECTED(zend_string_equal_content(p->key, name)))) {
								retval = &p->val;
								if (0 || ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) != 0) {
									goto fetch_obj_r_copy;
								} else {
									goto fetch_obj_r_fast_copy;
								}
							}
						}
						CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_DYNAMIC_PROPERTY_OFFSET);
					}
					retval = zend_hash_find_known_hash(zobj->properties, name);
					if (EXPECTED(retval)) {
						uintptr_t idx = (char*)retval - (char*)zobj->properties->arData;
						CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_ENCODE_DYN_PROP_OFFSET(idx));
						if (0 || ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) != 0) {
							goto fetch_obj_r_copy;
						} else {
							goto fetch_obj_r_fast_copy;
						}
					}
				}
			}
			name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
		} else {
			name = zval_try_get_tmp_string(RT_CONSTANT(opline, opline->op2), &tmp_name);
			if (UNEXPECTED(!name)) {
				ZVAL_UNDEF(EX_VAR(opline->result.var));
				break;
			}
		}

#if ZEND_DEBUG
		/* For non-standard object handlers, verify a declared property type in debug builds.
		 * Fetch prop_info before calling read_property(), as it may deallocate the object. */
		zend_property_info *prop_info = NULL;
		if (zobj->handlers->read_property != zend_std_read_property) {
			prop_info = zend_get_property_info(zobj->ce, name, /* silent */ true);
		}
#endif
		retval = zobj->handlers->read_property(zobj, name, BP_VAR_R, cache_slot, EX_VAR(opline->result.var));
#if ZEND_DEBUG
		if (!EG(exception) && prop_info && prop_info != ZEND_WRONG_PROPERTY_INFO
				&& ZEND_TYPE_IS_SET(prop_info->type)) {
			ZVAL_OPT_DEREF(retval);
			zend_verify_property_type(prop_info, retval, /* strict */ true);
		}
#endif

		if (IS_CONST != IS_CONST) {
			zend_tmp_string_release(tmp_name);
		}

		if (retval != EX_VAR(opline->result.var)) {
fetch_obj_r_copy:
			ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
		} else if (UNEXPECTED(Z_ISREF_P(retval))) {
			zend_unwrap_reference(retval);
		}
	} while (0);

fetch_obj_r_finish:


	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *container;
	void **cache_slot = NULL;

	SAVE_OPLINE();
	container = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);

	if ((IS_TMP_VAR|IS_VAR) == IS_CONST ||
	    ((IS_TMP_VAR|IS_VAR) != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
		do {
			if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
				container = Z_REFVAL_P(container);
				if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
					break;
				}
			}
			if (IS_CONST == IS_CV && Z_TYPE_P(EX_VAR(opline->op2.var)) == IS_UNDEF) {
				ZVAL_UNDEFINED_OP2();
			}
			ZVAL_NULL(EX_VAR(opline->result.var));
			goto fetch_obj_is_finish;
		} while (0);
	}

	/* here we are sure we are dealing with an object */
	do {
		zend_object *zobj = Z_OBJ_P(container);
		zend_string *name, *tmp_name;
		zval *retval;

		if (IS_CONST == IS_CONST) {
			cache_slot = CACHE_ADDR(opline->extended_value);

			if (EXPECTED(zobj->ce == CACHED_PTR_EX(cache_slot))) {
				uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);

				if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
fetch_obj_is_simple:
					retval = OBJ_PROP(zobj, prop_offset);
					if (EXPECTED(Z_TYPE_P(retval) != IS_UNDEF)) {
						if (0 || ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) != 0) {
							goto fetch_obj_is_copy;
						} else {
fetch_obj_is_fast_copy:
							ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
							ZEND_VM_NEXT_OPCODE();
						}
					}
				} else if (UNEXPECTED(IS_HOOKED_PROPERTY_OFFSET(prop_offset))) {
					if (ZEND_IS_PROPERTY_HOOK_SIMPLE_READ(prop_offset)) {
						zend_property_info *prop_info = CACHED_PTR_EX(cache_slot + 2);
						prop_offset = prop_info->offset;
						goto fetch_obj_is_simple;
					}
					/* Fall through to read_property for hooks. */
				} else if (EXPECTED(zobj->properties != NULL)) {
					ZEND_ASSERT(IS_DYNAMIC_PROPERTY_OFFSET(prop_offset));
					name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
					if (!IS_UNKNOWN_DYNAMIC_PROPERTY_OFFSET(prop_offset)) {
						uintptr_t idx = ZEND_DECODE_DYN_PROP_OFFSET(prop_offset);

						if (EXPECTED(idx < zobj->properties->nNumUsed * sizeof(Bucket))) {
							Bucket *p = (Bucket*)((char*)zobj->properties->arData + idx);

							if (EXPECTED(p->key == name) ||
							    (EXPECTED(p->h == ZSTR_H(name)) &&
							     EXPECTED(p->key != NULL) &&
							     EXPECTED(zend_string_equal_content(p->key, name)))) {
								retval = &p->val;
								if (0 || ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) != 0) {
									goto fetch_obj_is_copy;
								} else {
									goto fetch_obj_is_fast_copy;
								}
							}
						}
						CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_DYNAMIC_PROPERTY_OFFSET);
					}
					retval = zend_hash_find_known_hash(zobj->properties, name);
					if (EXPECTED(retval)) {
						uintptr_t idx = (char*)retval - (char*)zobj->properties->arData;
						CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_ENCODE_DYN_PROP_OFFSET(idx));
						if (0 || ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) != 0) {
							goto fetch_obj_is_copy;
						} else {
							goto fetch_obj_is_fast_copy;
						}
					}
				}
			}
			name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
		} else {
			name = zval_try_get_tmp_string(RT_CONSTANT(opline, opline->op2), &tmp_name);
			if (UNEXPECTED(!name)) {
				ZVAL_UNDEF(EX_VAR(opline->result.var));
				break;
			}
		}

		retval = zobj->handlers->read_property(zobj, name, BP_VAR_IS, cache_slot, EX_VAR(opline->result.var));

		if (IS_CONST != IS_CONST) {
			zend_tmp_string_release(tmp_name);
		}

		if (retval != EX_VAR(opline->result.var)) {
fetch_obj_is_copy:
			ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
		} else if (UNEXPECTED(Z_ISREF_P(retval))) {
			zend_unwrap_reference(retval);
		}
	} while (0);

fetch_obj_is_finish:


	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_FAST_CONCAT_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;
	zend_string *op1_str, *op2_str, *str;


	op1 = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
	op2 = RT_CONSTANT(opline, opline->op2);
	if (((IS_TMP_VAR|IS_VAR) == IS_CONST || EXPECTED(Z_TYPE_P(op1) == IS_STRING)) &&
	    (IS_CONST == IS_CONST || EXPECTED(Z_TYPE_P(op2) == IS_STRING))) {
		zend_string *op1_str = Z_STR_P(op1);
		zend_string *op2_str = Z_STR_P(op2);
		zend_string *str;
		uint32_t flags = ZSTR_GET_COPYABLE_CONCAT_PROPERTIES_BOTH(op1_str, op2_str);

		if ((IS_TMP_VAR|IS_VAR) != IS_CONST && UNEXPECTED(ZSTR_LEN(op1_str) == 0)) {
			if (IS_CONST == IS_CONST || IS_CONST == IS_CV) {
				ZVAL_STR_COPY(EX_VAR(opline->result.var), op2_str);
			} else {
				ZVAL_STR(EX_VAR(opline->result.var), op2_str);
			}
			if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
				zend_string_release_ex(op1_str, 0);
			}
		} else if (IS_CONST != IS_CONST && UNEXPECTED(ZSTR_LEN(op2_str) == 0)) {
			if ((IS_TMP_VAR|IS_VAR) == IS_CONST || (IS_TMP_VAR|IS_VAR) == IS_CV) {
				ZVAL_STR_COPY(EX_VAR(opline->result.var), op1_str);
			} else {
				ZVAL_STR(EX_VAR(opline->result.var), op1_str);
			}
			if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
				zend_string_release_ex(op2_str, 0);
			}
		} else if ((IS_TMP_VAR|IS_VAR) != IS_CONST && (IS_TMP_VAR|IS_VAR) != IS_CV &&
		    !ZSTR_IS_INTERNED(op1_str) && GC_REFCOUNT(op1_str) == 1) {
			size_t len = ZSTR_LEN(op1_str);

			str = zend_string_extend(op1_str, len + ZSTR_LEN(op2_str), 0);
			memcpy(ZSTR_VAL(str) + len, ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
			GC_ADD_FLAGS(str, flags);
			ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
			if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
				zend_string_release_ex(op2_str, 0);
			}
		} else {
			str = zend_string_alloc(ZSTR_LEN(op1_str) + ZSTR_LEN(op2_str), 0);
			memcpy(ZSTR_VAL(str), ZSTR_VAL(op1_str), ZSTR_LEN(op1_str));
			memcpy(ZSTR_VAL(str) + ZSTR_LEN(op1_str), ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
			GC_ADD_FLAGS(str, flags);
			ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
			if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
				zend_string_release_ex(op1_str, 0);
			}
			if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
				zend_string_release_ex(op2_str, 0);
			}
		}
		ZEND_VM_NEXT_OPCODE();
	}

	SAVE_OPLINE();
	if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
		op1_str = Z_STR_P(op1);
	} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
		op1_str = zend_string_copy(Z_STR_P(op1));
	} else {
		if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
			ZVAL_UNDEFINED_OP1();
		}
		op1_str = zval_get_string_func(op1);
	}
	if (IS_CONST == IS_CONST) {
		op2_str = Z_STR_P(op2);
	} else if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
		op2_str = zend_string_copy(Z_STR_P(op2));
	} else {
		if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(op2) == IS_UNDEF)) {
			ZVAL_UNDEFINED_OP2();
		}
		op2_str = zval_get_string_func(op2);
	}
	do {
		if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
			if (UNEXPECTED(ZSTR_LEN(op1_str) == 0)) {
				if (IS_CONST == IS_CONST) {
					if (UNEXPECTED(Z_REFCOUNTED_P(op2))) {
						GC_ADDREF(op2_str);
					}
				}
				ZVAL_STR(EX_VAR(opline->result.var), op2_str);
				zend_string_release_ex(op1_str, 0);
				break;
			}
		}
		if (IS_CONST != IS_CONST) {
			if (UNEXPECTED(ZSTR_LEN(op2_str) == 0)) {
				if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
					if (UNEXPECTED(Z_REFCOUNTED_P(op1))) {
						GC_ADDREF(op1_str);
					}
				}
				ZVAL_STR(EX_VAR(opline->result.var), op1_str);
				zend_string_release_ex(op2_str, 0);
				break;
			}
		}
		str = zend_string_alloc(ZSTR_LEN(op1_str) + ZSTR_LEN(op2_str), 0);
		memcpy(ZSTR_VAL(str), ZSTR_VAL(op1_str), ZSTR_LEN(op1_str));
		memcpy(ZSTR_VAL(str) + ZSTR_LEN(op1_str), ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);

		ZSTR_COPY_CONCAT_PROPERTIES_BOTH(str, op1_str, op2_str);
		ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
		if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
			zend_string_release_ex(op1_str, 0);
		}
		if (IS_CONST != IS_CONST) {
			zend_string_release_ex(op2_str, 0);
		}
	} while (0);
	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));


	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *function_name;
	zval *object;
	zend_function *fbc;
	zend_class_entry *called_scope;
	zend_object *obj;
	zend_execute_data *call;
	uint32_t call_info;

	SAVE_OPLINE();

	object = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);

	if (IS_CONST != IS_CONST) {
		function_name = RT_CONSTANT(opline, opline->op2);
	}

	if (IS_CONST != IS_CONST &&
	    UNEXPECTED(Z_TYPE_P(function_name) != IS_STRING)) {
		do {
			if ((IS_CONST & (IS_VAR|IS_CV)) && Z_ISREF_P(function_name)) {
				function_name = Z_REFVAL_P(function_name);
				if (EXPECTED(Z_TYPE_P(function_name) == IS_STRING)) {
					break;
				}
			} else if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) {
				ZVAL_UNDEFINED_OP2();
				if (UNEXPECTED(EG(exception) != NULL)) {
					zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
					HANDLE_EXCEPTION();
				}
			}
			zend_throw_error(NULL, "Method name must be a string");


			zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
			HANDLE_EXCEPTION();
		} while (0);
	}

	if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED) {
		obj = Z_OBJ_P(object);
	} else {
		do {
			if ((IS_TMP_VAR|IS_VAR) != IS_CONST && EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
				obj = Z_OBJ_P(object);
			} else {
				if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(object))) {
					zend_reference *ref = Z_REF_P(object);

					object = &ref->val;
					if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
						obj = Z_OBJ_P(object);
						if ((IS_TMP_VAR|IS_VAR) & IS_VAR) {
							if (UNEXPECTED(GC_DELREF(ref) == 0)) {
								efree_size(ref, sizeof(zend_reference));
							} else {
								Z_ADDREF_P(object);
							}
						}
						break;
					}
				}
				if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
					object = ZVAL_UNDEFINED_OP1();
					if (UNEXPECTED(EG(exception) != NULL)) {
						if (IS_CONST != IS_CONST) {


						}
						HANDLE_EXCEPTION();
					}
				}
				if (IS_CONST == IS_CONST) {
					function_name = RT_CONSTANT(opline, opline->op2);
				}
				zend_invalid_method_call(object, function_name);


				zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
				HANDLE_EXCEPTION();
			}
		} while (0);
	}

	called_scope = obj->ce;

	if (IS_CONST == IS_CONST &&
	    EXPECTED(CACHED_PTR(opline->result.num) == called_scope)) {
		fbc = CACHED_PTR(opline->result.num + sizeof(void*));
	} else {
		zend_object *orig_obj = obj;

		if (IS_CONST == IS_CONST) {
			function_name = RT_CONSTANT(opline, opline->op2);
		}

		/* First, locate the function. */
		fbc = obj->handlers->get_method(&obj, Z_STR_P(function_name), ((IS_CONST == IS_CONST) ? (RT_CONSTANT(opline, opline->op2) + 1) : NULL));
		if (UNEXPECTED(fbc == NULL)) {
			if (EXPECTED(!EG(exception))) {
				zend_undefined_method(orig_obj->ce, Z_STR_P(function_name));
			}


			if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_TMP_VAR)) && GC_DELREF(orig_obj) == 0) {
				zend_objects_store_del(orig_obj);
			}
			HANDLE_EXCEPTION();
		}
		if (IS_CONST == IS_CONST &&
		    EXPECTED(!(fbc->common.fn_flags & (ZEND_ACC_CALL_VIA_TRAMPOLINE|ZEND_ACC_NEVER_CACHE))) &&
		    EXPECTED(obj == orig_obj)) {
			CACHE_POLYMORPHIC_PTR(opline->result.num, called_scope, fbc);
		}
		if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_TMP_VAR)) && UNEXPECTED(obj != orig_obj)) {
			GC_ADDREF(obj); /* For $this pointer */
			if (GC_DELREF(orig_obj) == 0) {
				zend_objects_store_del(orig_obj);
			}
		}
		if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!RUN_TIME_CACHE(&fbc->op_array))) {
			init_func_run_time_cache(&fbc->op_array);
		}
	}

	if (IS_CONST != IS_CONST) {


	}

	call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_HAS_THIS;
	if (UNEXPECTED((fbc->common.fn_flags & ZEND_ACC_STATIC) != 0)) {
		if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_TMP_VAR)) && GC_DELREF(obj) == 0) {
			zend_objects_store_del(obj);
			if (UNEXPECTED(EG(exception))) {
				HANDLE_EXCEPTION();
			}
		}
		/* call static method */
		obj = (zend_object*)called_scope;
		call_info = ZEND_CALL_NESTED_FUNCTION;
	} else if ((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_TMP_VAR|IS_CV)) {
		if ((IS_TMP_VAR|IS_VAR) == IS_CV) {
			GC_ADDREF(obj); /* For $this pointer */
		}
		/* CV may be changed indirectly (e.g. when it's a reference) */
		call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_HAS_THIS | ZEND_CALL_RELEASE_THIS;
	}

	call = zend_vm_stack_push_call_frame(call_info,
		fbc, opline->extended_value, obj);
	call->prev_execute_data = EX(call);
	EX(call) = call;

	ZEND_VM_NEXT_OPCODE();
}

static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_SEND_VAL_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *value, *arg;

	if (IS_CONST == IS_CONST) {
		SAVE_OPLINE();
		zend_string *arg_name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
		uint32_t arg_num;
		arg = zend_handle_named_arg(&EX(call), arg_name, &arg_num, CACHE_ADDR(opline->result.num));
		if (UNEXPECTED(!arg)) {
			zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
			HANDLE_EXCEPTION();
		}
	} else {
		arg = ZEND_CALL_VAR(EX(call), opline->result.var);
	}

	value = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
	ZVAL_COPY_VALUE(arg, value);
	if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
		if (UNEXPECTED(Z_OPT_REFCOUNTED_P(arg))) {
			Z_ADDREF_P(arg);
		}
	}
	ZEND_VM_NEXT_OPCODE();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_CASE_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;
	double d1, d2;

	op1 = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
	op2 = RT_CONSTANT(opline, opline->op2);
	if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
		if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
			if (EXPECTED(Z_LVAL_P(op1) == Z_LVAL_P(op2))) {
case_true:
				ZEND_VM_SMART_BRANCH_TRUE();
			} else {
case_false:
				ZEND_VM_SMART_BRANCH_FALSE();
			}
		} else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
			d1 = (double)Z_LVAL_P(op1);
			d2 = Z_DVAL_P(op2);
			goto case_double;
		}
	} else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) {
		if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
			d1 = Z_DVAL_P(op1);
			d2 = Z_DVAL_P(op2);
case_double:
			if (d1 == d2) {
				goto case_true;
			} else {
				goto case_false;
			}
		} else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
			d1 = Z_DVAL_P(op1);
			d2 = (double)Z_LVAL_P(op2);
			goto case_double;
		}
	} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
		if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
			bool result = zend_fast_equal_strings(Z_STR_P(op1), Z_STR_P(op2));


			if (result) {
				goto case_true;
			} else {
				goto case_false;
			}
		}
	}
	ZEND_VM_DISPATCH_TO_HELPER(zend_case_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_EX op1, op2));
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *container;
	bool result;
	zend_ulong hval;
	zval *offset;

	SAVE_OPLINE();
	container = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
	offset = RT_CONSTANT(opline, opline->op2);

	if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
		HashTable *ht;
		zval *value;
		zend_string *str;

isset_dim_obj_array:
		ht = Z_ARRVAL_P(container);
isset_again:
		if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) {
			str = Z_STR_P(offset);
			if (IS_CONST != IS_CONST) {
				if (ZEND_HANDLE_NUMERIC(str, hval)) {
					goto num_index_prop;
				}
			}
			value = zend_hash_find_ex(ht, str, IS_CONST == IS_CONST);
		} else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
			hval = Z_LVAL_P(offset);
num_index_prop:
			value = zend_hash_index_find(ht, hval);
		} else if ((IS_CONST & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(offset))) {
			offset = Z_REFVAL_P(offset);
			goto isset_again;
		} else {
			value = zend_find_array_dim_slow(ht, offset EXECUTE_DATA_CC);
			if (UNEXPECTED(EG(exception))) {
				result = 0;
				goto isset_dim_obj_exit;
			}
		}

		if (!(opline->extended_value & ZEND_ISEMPTY)) {
			/* > IS_NULL means not IS_UNDEF and not IS_NULL */
			result = value != NULL && Z_TYPE_P(value) > IS_NULL &&
			    (!Z_ISREF_P(value) || Z_TYPE_P(Z_REFVAL_P(value)) != IS_NULL);

			if ((IS_TMP_VAR|IS_VAR) & (IS_CONST|IS_CV)) {
				/* avoid exception check */


				ZEND_VM_SMART_BRANCH(result, 0);
			}
		} else {
			result = (value == NULL || !i_zend_is_true(value));
		}
		goto isset_dim_obj_exit;
	} else if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(container))) {
		container = Z_REFVAL_P(container);
		if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
			goto isset_dim_obj_array;
		}
	}

	if (IS_CONST == IS_CONST && Z_EXTRA_P(offset) == ZEND_EXTRA_VALUE) {
		offset++;
	}
	if (!(opline->extended_value & ZEND_ISEMPTY)) {
		result = zend_isset_dim_slow(container, offset EXECUTE_DATA_CC);
	} else {
		result = zend_isempty_dim_slow(container, offset EXECUTE_DATA_CC);
	}

isset_dim_obj_exit:


	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
	ZEND_VM_SMART_BRANCH(result, 1);
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *container;
	int result;
	zval *offset;
	zend_string *name, *tmp_name;

	SAVE_OPLINE();
	container = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
	offset = RT_CONSTANT(opline, opline->op2);

	if ((IS_TMP_VAR|IS_VAR) == IS_CONST ||
	    ((IS_TMP_VAR|IS_VAR) != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
		if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
			container = Z_REFVAL_P(container);
			if (UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT)) {
				result = (opline->extended_value & ZEND_ISEMPTY);
				goto isset_object_finish;
			}
		} else {
			result = (opline->extended_value & ZEND_ISEMPTY);
			goto isset_object_finish;
		}
	}

	if (IS_CONST == IS_CONST) {
		name = Z_STR_P(offset);
	} else {
		name = zval_try_get_tmp_string(offset, &tmp_name);
		if (UNEXPECTED(!name)) {
			result = 0;
			goto isset_object_finish;
		}
	}

	result =
		(opline->extended_value & ZEND_ISEMPTY) ^
		Z_OBJ_HT_P(container)->has_property(Z_OBJ_P(container), name, (opline->extended_value & ZEND_ISEMPTY), ((IS_CONST == IS_CONST) ? CACHE_ADDR(opline->extended_value & ~ZEND_ISEMPTY) : NULL));

	if (IS_CONST != IS_CONST) {
		zend_tmp_string_release(tmp_name);
	}

isset_object_finish:


	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
	ZEND_VM_SMART_BRANCH(result, 1);
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_ARRAY_KEY_EXISTS_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE

	zval *key, *subject;
	HashTable *ht;
	bool result;

	SAVE_OPLINE();

	key = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
	subject = RT_CONSTANT(opline, opline->op2);

	if (EXPECTED(Z_TYPE_P(subject) == IS_ARRAY)) {
array_key_exists_array:
		ht = Z_ARRVAL_P(subject);
		result = zend_array_key_exists_fast(ht, key OPLINE_CC EXECUTE_DATA_CC);
	} else {
		if ((IS_CONST & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(subject))) {
			subject = Z_REFVAL_P(subject);
			if (EXPECTED(Z_TYPE_P(subject) == IS_ARRAY)) {
				goto array_key_exists_array;
			}
		}
		zend_array_key_exists_error(subject, key OPLINE_CC EXECUTE_DATA_CC);
		result = 0;
	}


	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
	ZEND_VM_SMART_BRANCH(result, 1);
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_INSTANCEOF_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *expr;
	bool result;

	SAVE_OPLINE();
	expr = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);

try_instanceof:
	if (Z_TYPE_P(expr) == IS_OBJECT) {
		zend_class_entry *ce;

		if (IS_CONST == IS_CONST) {
			ce = CACHED_PTR(opline->extended_value);
			if (UNEXPECTED(ce == NULL)) {
				ce = zend_lookup_class_ex(Z_STR_P(RT_CONSTANT(opline, opline->op2)), Z_STR_P(RT_CONSTANT(opline, opline->op2) + 1), ZEND_FETCH_CLASS_NO_AUTOLOAD);
				if (EXPECTED(ce)) {
					CACHE_PTR(opline->extended_value, ce);
				}
			}
		} else if (IS_CONST == IS_UNUSED) {
			ce = zend_fetch_class(NULL, opline->op2.num);
			if (UNEXPECTED(ce == NULL)) {
				zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
				ZVAL_UNDEF(EX_VAR(opline->result.var));
				HANDLE_EXCEPTION();
			}
		} else {
			ce = Z_CE_P(EX_VAR(opline->op2.var));
		}
		result = ce && instanceof_function(Z_OBJCE_P(expr), ce);
	} else if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && Z_TYPE_P(expr) == IS_REFERENCE) {
		expr = Z_REFVAL_P(expr);
		goto try_instanceof;
	} else {
		if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(expr) == IS_UNDEF)) {
			ZVAL_UNDEFINED_OP1();
		}
		result = 0;
	}
	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
	ZEND_VM_SMART_BRANCH(result, 1);
}

static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_FETCH_DIM_R_INDEX_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *container, *dim, *value;
	zend_long offset;
	HashTable *ht;

	container = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
	dim = RT_CONSTANT(opline, opline->op2);
	if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
fetch_dim_r_index_array:
		if (EXPECTED(Z_TYPE_P(dim) == IS_LONG)) {
			offset = Z_LVAL_P(dim);
		} else {
			SAVE_OPLINE();
			zend_fetch_dimension_address_read_R(container, dim, IS_CONST OPLINE_CC EXECUTE_DATA_CC);
			zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
			ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
		}
		ht = Z_ARRVAL_P(container);
		ZEND_HASH_INDEX_FIND(ht, offset, value, fetch_dim_r_index_undef);
		ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
		if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
			SAVE_OPLINE();
			zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
			ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
		} else {
			ZEND_VM_NEXT_OPCODE();
		}
	} else if ((IS_TMP_VAR|IS_VAR) != IS_CONST && EXPECTED(Z_TYPE_P(container) == IS_REFERENCE)) {
		container = Z_REFVAL_P(container);
		if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
			goto fetch_dim_r_index_array;
		} else {
			goto fetch_dim_r_index_slow;
		}
	} else {
fetch_dim_r_index_slow:
		SAVE_OPLINE();
		if (IS_CONST == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
			dim++;
		}
		zend_fetch_dimension_address_read_R_slow(container, dim OPLINE_CC EXECUTE_DATA_CC);
		zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
	}

fetch_dim_r_index_undef:
	ZVAL_NULL(EX_VAR(opline->result.var));
	SAVE_OPLINE();
	zend_undefined_offset(offset);
	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_FETCH_DIM_R_INDEX_SPEC_TMPVAR_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *container, *dim, *value;
	zend_long offset;
	HashTable *ht;

	container = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
	dim = EX_VAR(opline->op2.var);
	if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
fetch_dim_r_index_array:
		if (EXPECTED(Z_TYPE_P(dim) == IS_LONG)) {
			offset = Z_LVAL_P(dim);
		} else {
			SAVE_OPLINE();
			zend_fetch_dimension_address_read_R(container, dim, (IS_TMP_VAR|IS_VAR|IS_CV) OPLINE_CC EXECUTE_DATA_CC);
			zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
			ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
		}
		ht = Z_ARRVAL_P(container);
		ZEND_HASH_INDEX_FIND(ht, offset, value, fetch_dim_r_index_undef);
		ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
		if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
			SAVE_OPLINE();
			zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
			ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
		} else {
			ZEND_VM_NEXT_OPCODE();
		}
	} else if ((IS_TMP_VAR|IS_VAR) != IS_CONST && EXPECTED(Z_TYPE_P(container) == IS_REFERENCE)) {
		container = Z_REFVAL_P(container);
		if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
			goto fetch_dim_r_index_array;
		} else {
			goto fetch_dim_r_index_slow;
		}
	} else {
fetch_dim_r_index_slow:
		SAVE_OPLINE();
		if ((IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
			dim++;
		}
		zend_fetch_dimension_address_read_R_slow(container, dim OPLINE_CC EXECUTE_DATA_CC);
		zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
	}

fetch_dim_r_index_undef:
	ZVAL_NULL(EX_VAR(opline->result.var));
	SAVE_OPLINE();
	zend_undefined_offset(offset);
	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_DIV_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;

	SAVE_OPLINE();
	op1 = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
	op2 = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
	div_function(EX_VAR(opline->result.var), op1, op2);
	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_POW_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;

	SAVE_OPLINE();
	op1 = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
	op2 = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
	pow_function(EX_VAR(opline->result.var), op1, op2);
	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_CONCAT_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;

	op1 = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
	op2 = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);

	if (((IS_TMP_VAR|IS_VAR) == IS_CONST || EXPECTED(Z_TYPE_P(op1) == IS_STRING)) &&
	    ((IS_TMP_VAR|IS_VAR) == IS_CONST || EXPECTED(Z_TYPE_P(op2) == IS_STRING))) {
		zend_string *op1_str = Z_STR_P(op1);
		zend_string *op2_str = Z_STR_P(op2);
		zend_string *str;
		uint32_t flags = ZSTR_GET_COPYABLE_CONCAT_PROPERTIES_BOTH(op1_str, op2_str);

		if ((IS_TMP_VAR|IS_VAR) != IS_CONST && UNEXPECTED(ZSTR_LEN(op1_str) == 0)) {
			if ((IS_TMP_VAR|IS_VAR) == IS_CONST || (IS_TMP_VAR|IS_VAR) == IS_CV) {
				ZVAL_STR_COPY(EX_VAR(opline->result.var), op2_str);
			} else {
				ZVAL_STR(EX_VAR(opline->result.var), op2_str);
			}
			if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
				zend_string_release_ex(op1_str, 0);
			}
		} else if ((IS_TMP_VAR|IS_VAR) != IS_CONST && UNEXPECTED(ZSTR_LEN(op2_str) == 0)) {
			if ((IS_TMP_VAR|IS_VAR) == IS_CONST || (IS_TMP_VAR|IS_VAR) == IS_CV) {
				ZVAL_STR_COPY(EX_VAR(opline->result.var), op1_str);
			} else {
				ZVAL_STR(EX_VAR(opline->result.var), op1_str);
			}
			if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
				zend_string_release_ex(op2_str, 0);
			}
		} else if ((IS_TMP_VAR|IS_VAR) != IS_CONST && (IS_TMP_VAR|IS_VAR) != IS_CV &&
		    !ZSTR_IS_INTERNED(op1_str) && GC_REFCOUNT(op1_str) == 1) {
			size_t len = ZSTR_LEN(op1_str);

			if (UNEXPECTED(len > ZSTR_MAX_LEN - ZSTR_LEN(op2_str))) {
				zend_error_noreturn(E_ERROR, "Integer overflow in memory allocation");
			}
			str = zend_string_extend(op1_str, len + ZSTR_LEN(op2_str), 0);
			memcpy(ZSTR_VAL(str) + len, ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
			GC_ADD_FLAGS(str, flags);
			ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
			if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
				zend_string_release_ex(op2_str, 0);
			}
		} else {
			str = zend_string_alloc(ZSTR_LEN(op1_str) + ZSTR_LEN(op2_str), 0);
			memcpy(ZSTR_VAL(str), ZSTR_VAL(op1_str), ZSTR_LEN(op1_str));
			memcpy(ZSTR_VAL(str) + ZSTR_LEN(op1_str), ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
			GC_ADD_FLAGS(str, flags);
			ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
			if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
				zend_string_release_ex(op1_str, 0);
			}
			if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
				zend_string_release_ex(op2_str, 0);
			}
		}
		ZEND_VM_NEXT_OPCODE();
	} else {
		SAVE_OPLINE();

		if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
			op1 = ZVAL_UNDEFINED_OP1();
		}
		if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(op2) == IS_UNDEF)) {
			op2 = ZVAL_UNDEFINED_OP2();
		}
		concat_function(EX_VAR(opline->result.var), op1, op2);
		zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
		zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
	}
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_IS_EQUAL_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;
	double d1, d2;

	op1 = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
	op2 = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
	if (1 && (IS_TMP_VAR|IS_VAR) == IS_CONST && (IS_TMP_VAR|IS_VAR) == IS_CONST) {
		/* pass */
	} else if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
		if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
			if (EXPECTED(Z_LVAL_P(op1) == Z_LVAL_P(op2))) {
is_equal_true:
				ZEND_VM_SMART_BRANCH_TRUE_NONE();
			} else {
is_equal_false:
				ZEND_VM_SMART_BRANCH_FALSE_NONE();
			}
		} else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
			d1 = (double)Z_LVAL_P(op1);
			d2 = Z_DVAL_P(op2);
			goto is_equal_double;
		}
	} else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) {
		if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
			d1 = Z_DVAL_P(op1);
			d2 = Z_DVAL_P(op2);
is_equal_double:
			if (d1 == d2) {
				goto is_equal_true;
			} else {
				goto is_equal_false;
			}
		} else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
			d1 = Z_DVAL_P(op1);
			d2 = (double)Z_LVAL_P(op2);
			goto is_equal_double;
		}
	} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
		if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
			bool result = zend_fast_equal_strings(Z_STR_P(op1), Z_STR_P(op2));
			if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
				zval_ptr_dtor_str(op1);
			}
			if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
				zval_ptr_dtor_str(op2);
			}
			if (result) {
				goto is_equal_true;
			} else {
				goto is_equal_false;
			}
		}
	}
	ZEND_VM_DISPATCH_TO_HELPER(zend_is_equal_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_EX op1, op2));
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_IS_EQUAL_SPEC_TMPVAR_TMPVAR_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;
	double d1, d2;

	op1 = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
	op2 = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
	if (1 && (IS_TMP_VAR|IS_VAR) == IS_CONST && (IS_TMP_VAR|IS_VAR) == IS_CONST) {
		/* pass */
	} else if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
		if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
			if (EXPECTED(Z_LVAL_P(op1) == Z_LVAL_P(op2))) {
is_equal_true:
				ZEND_VM_SMART_BRANCH_TRUE_JMPZ();
			} else {
is_equal_false:
				ZEND_VM_SMART_BRANCH_FALSE_JMPZ();
			}
		} else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
			d1 = (double)Z_LVAL_P(op1);
			d2 = Z_DVAL_P(op2);
			goto is_equal_double;
		}
	} else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) {
		if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
			d1 = Z_DVAL_P(op1);
			d2 = Z_DVAL_P(op2);
is_equal_double:
			if (d1 == d2) {
				goto is_equal_true;
			} else {
				goto is_equal_false;
			}
		} else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
			d1 = Z_DVAL_P(op1);
			d2 = (double)Z_LVAL_P(op2);
			goto is_equal_double;
		}
	} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
		if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
			bool result = zend_fast_equal_strings(Z_STR_P(op1), Z_STR_P(op2));
			if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
				zval_ptr_dtor_str(op1);
			}
			if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
				zval_ptr_dtor_str(op2);
			}
			if (result) {
				goto is_equal_true;
			} else {
				goto is_equal_false;
			}
		}
	}
	ZEND_VM_DISPATCH_TO_HELPER(zend_is_equal_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_EX op1, op2));
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_IS_EQUAL_SPEC_TMPVAR_TMPVAR_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;
	double d1, d2;

	op1 = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
	op2 = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
	if (1 && (IS_TMP_VAR|IS_VAR) == IS_CONST && (IS_TMP_VAR|IS_VAR) == IS_CONST) {
		/* pass */
	} else if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
		if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
			if (EXPECTED(Z_LVAL_P(op1) == Z_LVAL_P(op2))) {
is_equal_true:
				ZEND_VM_SMART_BRANCH_TRUE_JMPNZ();
			} else {
is_equal_false:
				ZEND_VM_SMART_BRANCH_FALSE_JMPNZ();
			}
		} else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
			d1 = (double)Z_LVAL_P(op1);
			d2 = Z_DVAL_P(op2);
			goto is_equal_double;
		}
	} else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) {
		if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
			d1 = Z_DVAL_P(op1);
			d2 = Z_DVAL_P(op2);
is_equal_double:
			if (d1 == d2) {
				goto is_equal_true;
			} else {
				goto is_equal_false;
			}
		} else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
			d1 = Z_DVAL_P(op1);
			d2 = (double)Z_LVAL_P(op2);
			goto is_equal_double;
		}
	} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
		if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
			bool result = zend_fast_equal_strings(Z_STR_P(op1), Z_STR_P(op2));
			if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
				zval_ptr_dtor_str(op1);
			}
			if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
				zval_ptr_dtor_str(op2);
			}
			if (result) {
				goto is_equal_true;
			} else {
				goto is_equal_false;
			}
		}
	}
	ZEND_VM_DISPATCH_TO_HELPER(zend_is_equal_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_EX op1, op2));
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;
	double d1, d2;

	op1 = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
	op2 = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
	if (1 && (IS_TMP_VAR|IS_VAR) == IS_CONST && (IS_TMP_VAR|IS_VAR) == IS_CONST) {
		/* pass */
	} else if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
		if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
			if (EXPECTED(Z_LVAL_P(op1) != Z_LVAL_P(op2))) {
is_not_equal_true:
				ZEND_VM_SMART_BRANCH_TRUE_NONE();
			} else {
is_not_equal_false:
				ZEND_VM_SMART_BRANCH_FALSE_NONE();
			}
		} else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
			d1 = (double)Z_LVAL_P(op1);
			d2 = Z_DVAL_P(op2);
			goto is_not_equal_double;
		}
	} else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) {
		if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
			d1 = Z_DVAL_P(op1);
			d2 = Z_DVAL_P(op2);
is_not_equal_double:
			if (d1 != d2) {
				goto is_not_equal_true;
			} else {
				goto is_not_equal_false;
			}
		} else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
			d1 = Z_DVAL_P(op1);
			d2 = (double)Z_LVAL_P(op2);
			goto is_not_equal_double;
		}
	} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
		if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
			bool result = zend_fast_equal_strings(Z_STR_P(op1), Z_STR_P(op2));
			if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
				zval_ptr_dtor_str(op1);
			}
			if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
				zval_ptr_dtor_str(op2);
			}
			if (!result) {
				goto is_not_equal_true;
			} else {
				goto is_not_equal_false;
			}
		}
	}
	ZEND_VM_DISPATCH_TO_HELPER(zend_is_not_equal_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_EX op1, op2));
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_TMPVAR_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;
	double d1, d2;

	op1 = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
	op2 = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
	if (1 && (IS_TMP_VAR|IS_VAR) == IS_CONST && (IS_TMP_VAR|IS_VAR) == IS_CONST) {
		/* pass */
	} else if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
		if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
			if (EXPECTED(Z_LVAL_P(op1) != Z_LVAL_P(op2))) {
is_not_equal_true:
				ZEND_VM_SMART_BRANCH_TRUE_JMPZ();
			} else {
is_not_equal_false:
				ZEND_VM_SMART_BRANCH_FALSE_JMPZ();
			}
		} else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
			d1 = (double)Z_LVAL_P(op1);
			d2 = Z_DVAL_P(op2);
			goto is_not_equal_double;
		}
	} else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) {
		if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
			d1 = Z_DVAL_P(op1);
			d2 = Z_DVAL_P(op2);
is_not_equal_double:
			if (d1 != d2) {
				goto is_not_equal_true;
			} else {
				goto is_not_equal_false;
			}
		} else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
			d1 = Z_DVAL_P(op1);
			d2 = (double)Z_LVAL_P(op2);
			goto is_not_equal_double;
		}
	} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
		if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
			bool result = zend_fast_equal_strings(Z_STR_P(op1), Z_STR_P(op2));
			if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
				zval_ptr_dtor_str(op1);
			}
			if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
				zval_ptr_dtor_str(op2);
			}
			if (!result) {
				goto is_not_equal_true;
			} else {
				goto is_not_equal_false;
			}
		}
	}
	ZEND_VM_DISPATCH_TO_HELPER(zend_is_not_equal_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_EX op1, op2));
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_TMPVAR_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;
	double d1, d2;

	op1 = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
	op2 = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
	if (1 && (IS_TMP_VAR|IS_VAR) == IS_CONST && (IS_TMP_VAR|IS_VAR) == IS_CONST) {
		/* pass */
	} else if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
		if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
			if (EXPECTED(Z_LVAL_P(op1) != Z_LVAL_P(op2))) {
is_not_equal_true:
				ZEND_VM_SMART_BRANCH_TRUE_JMPNZ();
			} else {
is_not_equal_false:
				ZEND_VM_SMART_BRANCH_FALSE_JMPNZ();
			}
		} else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
			d1 = (double)Z_LVAL_P(op1);
			d2 = Z_DVAL_P(op2);
			goto is_not_equal_double;
		}
	} else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) {
		if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
			d1 = Z_DVAL_P(op1);
			d2 = Z_DVAL_P(op2);
is_not_equal_double:
			if (d1 != d2) {
				goto is_not_equal_true;
			} else {
				goto is_not_equal_false;
			}
		} else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
			d1 = Z_DVAL_P(op1);
			d2 = (double)Z_LVAL_P(op2);
			goto is_not_equal_double;
		}
	} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
		if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
			bool result = zend_fast_equal_strings(Z_STR_P(op1), Z_STR_P(op2));
			if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
				zval_ptr_dtor_str(op1);
			}
			if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
				zval_ptr_dtor_str(op2);
			}
			if (!result) {
				goto is_not_equal_true;
			} else {
				goto is_not_equal_false;
			}
		}
	}
	ZEND_VM_DISPATCH_TO_HELPER(zend_is_not_equal_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_EX op1, op2));
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_SPACESHIP_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;

	SAVE_OPLINE();
	op1 = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
	op2 = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
	compare_function(EX_VAR(opline->result.var), op1, op2);
	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_BOOL_XOR_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;

	SAVE_OPLINE();
	op1 = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
	op2 = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
	boolean_xor_function(EX_VAR(opline->result.var), op1, op2);
	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_FETCH_DIM_R_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *container, *dim, *value;

	SAVE_OPLINE();
	container = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
	dim = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
	if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
		if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
fetch_dim_r_array:
			value = zend_fetch_dimension_address_inner(Z_ARRVAL_P(container), dim, (IS_TMP_VAR|IS_VAR), BP_VAR_R EXECUTE_DATA_CC);
			ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
		} else if (EXPECTED(Z_TYPE_P(container) == IS_REFERENCE)) {
			container = Z_REFVAL_P(container);
			if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
				goto fetch_dim_r_array;
			} else {
				goto fetch_dim_r_slow;
			}
		} else {
fetch_dim_r_slow:
			if ((IS_TMP_VAR|IS_VAR) == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
				dim++;
			}
			zend_fetch_dimension_address_read_R_slow(container, dim OPLINE_CC EXECUTE_DATA_CC);
		}
	} else {
		zend_fetch_dimension_address_read_R(container, dim, (IS_TMP_VAR|IS_VAR) OPLINE_CC EXECUTE_DATA_CC);
	}
	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_FETCH_DIM_IS_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *container;

	SAVE_OPLINE();
	container = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
	zend_fetch_dimension_address_read_IS(container, _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC), (IS_TMP_VAR|IS_VAR) OPLINE_CC EXECUTE_DATA_CC);
	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_FETCH_OBJ_R_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *container;
	void **cache_slot = NULL;

	SAVE_OPLINE();
	container = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);

	if ((IS_TMP_VAR|IS_VAR) == IS_CONST ||
	    ((IS_TMP_VAR|IS_VAR) != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
		do {
			if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
				container = Z_REFVAL_P(container);
				if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
					break;
				}
			}
			if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
				ZVAL_UNDEFINED_OP1();
			}
			zend_wrong_property_read(container, _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC));
			ZVAL_NULL(EX_VAR(opline->result.var));
			goto fetch_obj_r_finish;
		} while (0);
	}

	/* here we are sure we are dealing with an object */
	do {
		zend_object *zobj = Z_OBJ_P(container);
		zend_string *name, *tmp_name;
		zval *retval;

		if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
			cache_slot = CACHE_ADDR(opline->extended_value & ~ZEND_FETCH_REF /* FUNC_ARG fetch may contain it */);

			if (EXPECTED(zobj->ce == CACHED_PTR_EX(cache_slot))) {
				uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);

				if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
fetch_obj_r_simple:
					retval = OBJ_PROP(zobj, prop_offset);
					if (EXPECTED(Z_TYPE_INFO_P(retval) != IS_UNDEF)) {
						if (0 || ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) != 0) {
							goto fetch_obj_r_copy;
						} else {
fetch_obj_r_fast_copy:
							ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
							ZEND_VM_NEXT_OPCODE();
						}
					}
				} else if (UNEXPECTED(IS_HOOKED_PROPERTY_OFFSET(prop_offset))) {
					zend_property_info *prop_info = CACHED_PTR_EX(cache_slot + 2);
					if (ZEND_IS_PROPERTY_HOOK_SIMPLE_READ(prop_offset)) {
						prop_offset = prop_info->offset;
						goto fetch_obj_r_simple;
					} else if (EXPECTED(ZEND_IS_PROPERTY_HOOK_SIMPLE_GET(prop_offset))) {
						zend_function *hook = prop_info->hooks[ZEND_PROPERTY_HOOK_GET];
						ZEND_ASSERT(hook->type == ZEND_USER_FUNCTION);
						ZEND_ASSERT(RUN_TIME_CACHE(&hook->op_array));

						uint32_t call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_HAS_THIS;
						if ((IS_TMP_VAR|IS_VAR) & IS_CV) {
							GC_ADDREF(zobj);
						}
						if ((IS_TMP_VAR|IS_VAR) & (IS_CV|IS_VAR|IS_TMP_VAR)) {
							call_info |= ZEND_CALL_RELEASE_THIS;
						}
						zend_execute_data *call = zend_vm_stack_push_call_frame(call_info, hook, 0, zobj);
						call->prev_execute_data = execute_data;
						call->call = NULL;
						call->return_value = EX_VAR(opline->result.var);
						call->run_time_cache = RUN_TIME_CACHE(&hook->op_array);

						execute_data = call;
						EG(current_execute_data) = execute_data;
						zend_init_cvs(0, hook->op_array.last_var EXECUTE_DATA_CC);

#if defined(ZEND_VM_IP_GLOBAL_REG) && ((ZEND_VM_KIND == ZEND_VM_KIND_CALL) || (ZEND_VM_KIND == ZEND_VM_KIND_HYBRID))
						opline = hook->op_array.opcodes;
#else
						EX(opline) = hook->op_array.opcodes;
#endif
						LOAD_OPLINE_EX();




						ZEND_VM_ENTER_EX();
					}
					/* Fall through to read_property for hooks. */
				} else if (EXPECTED(zobj->properties != NULL)) {
					ZEND_ASSERT(IS_DYNAMIC_PROPERTY_OFFSET(prop_offset));
					name = Z_STR_P(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC));
					if (!IS_UNKNOWN_DYNAMIC_PROPERTY_OFFSET(prop_offset)) {
						uintptr_t idx = ZEND_DECODE_DYN_PROP_OFFSET(prop_offset);

						if (EXPECTED(idx < zobj->properties->nNumUsed * sizeof(Bucket))) {
							Bucket *p = (Bucket*)((char*)zobj->properties->arData + idx);

							if (EXPECTED(p->key == name) ||
							    (EXPECTED(p->h == ZSTR_H(name)) &&
							     EXPECTED(p->key != NULL) &&
							     EXPECTED(zend_string_equal_content(p->key, name)))) {
								retval = &p->val;
								if (0 || ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) != 0) {
									goto fetch_obj_r_copy;
								} else {
									goto fetch_obj_r_fast_copy;
								}
							}
						}
						CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_DYNAMIC_PROPERTY_OFFSET);
					}
					retval = zend_hash_find_known_hash(zobj->properties, name);
					if (EXPECTED(retval)) {
						uintptr_t idx = (char*)retval - (char*)zobj->properties->arData;
						CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_ENCODE_DYN_PROP_OFFSET(idx));
						if (0 || ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) != 0) {
							goto fetch_obj_r_copy;
						} else {
							goto fetch_obj_r_fast_copy;
						}
					}
				}
			}
			name = Z_STR_P(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC));
		} else {
			name = zval_try_get_tmp_string(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC), &tmp_name);
			if (UNEXPECTED(!name)) {
				ZVAL_UNDEF(EX_VAR(opline->result.var));
				break;
			}
		}

#if ZEND_DEBUG
		/* For non-standard object handlers, verify a declared property type in debug builds.
		 * Fetch prop_info before calling read_property(), as it may deallocate the object. */
		zend_property_info *prop_info = NULL;
		if (zobj->handlers->read_property != zend_std_read_property) {
			prop_info = zend_get_property_info(zobj->ce, name, /* silent */ true);
		}
#endif
		retval = zobj->handlers->read_property(zobj, name, BP_VAR_R, cache_slot, EX_VAR(opline->result.var));
#if ZEND_DEBUG
		if (!EG(exception) && prop_info && prop_info != ZEND_WRONG_PROPERTY_INFO
				&& ZEND_TYPE_IS_SET(prop_info->type)) {
			ZVAL_OPT_DEREF(retval);
			zend_verify_property_type(prop_info, retval, /* strict */ true);
		}
#endif

		if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
			zend_tmp_string_release(tmp_name);
		}

		if (retval != EX_VAR(opline->result.var)) {
fetch_obj_r_copy:
			ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
		} else if (UNEXPECTED(Z_ISREF_P(retval))) {
			zend_unwrap_reference(retval);
		}
	} while (0);

fetch_obj_r_finish:
	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *container;
	void **cache_slot = NULL;

	SAVE_OPLINE();
	container = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);

	if ((IS_TMP_VAR|IS_VAR) == IS_CONST ||
	    ((IS_TMP_VAR|IS_VAR) != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
		do {
			if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
				container = Z_REFVAL_P(container);
				if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
					break;
				}
			}
			if ((IS_TMP_VAR|IS_VAR) == IS_CV && Z_TYPE_P(EX_VAR(opline->op2.var)) == IS_UNDEF) {
				ZVAL_UNDEFINED_OP2();
			}
			ZVAL_NULL(EX_VAR(opline->result.var));
			goto fetch_obj_is_finish;
		} while (0);
	}

	/* here we are sure we are dealing with an object */
	do {
		zend_object *zobj = Z_OBJ_P(container);
		zend_string *name, *tmp_name;
		zval *retval;

		if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
			cache_slot = CACHE_ADDR(opline->extended_value);

			if (EXPECTED(zobj->ce == CACHED_PTR_EX(cache_slot))) {
				uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);

				if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
fetch_obj_is_simple:
					retval = OBJ_PROP(zobj, prop_offset);
					if (EXPECTED(Z_TYPE_P(retval) != IS_UNDEF)) {
						if (0 || ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) != 0) {
							goto fetch_obj_is_copy;
						} else {
fetch_obj_is_fast_copy:
							ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
							ZEND_VM_NEXT_OPCODE();
						}
					}
				} else if (UNEXPECTED(IS_HOOKED_PROPERTY_OFFSET(prop_offset))) {
					if (ZEND_IS_PROPERTY_HOOK_SIMPLE_READ(prop_offset)) {
						zend_property_info *prop_info = CACHED_PTR_EX(cache_slot + 2);
						prop_offset = prop_info->offset;
						goto fetch_obj_is_simple;
					}
					/* Fall through to read_property for hooks. */
				} else if (EXPECTED(zobj->properties != NULL)) {
					ZEND_ASSERT(IS_DYNAMIC_PROPERTY_OFFSET(prop_offset));
					name = Z_STR_P(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC));
					if (!IS_UNKNOWN_DYNAMIC_PROPERTY_OFFSET(prop_offset)) {
						uintptr_t idx = ZEND_DECODE_DYN_PROP_OFFSET(prop_offset);

						if (EXPECTED(idx < zobj->properties->nNumUsed * sizeof(Bucket))) {
							Bucket *p = (Bucket*)((char*)zobj->properties->arData + idx);

							if (EXPECTED(p->key == name) ||
							    (EXPECTED(p->h == ZSTR_H(name)) &&
							     EXPECTED(p->key != NULL) &&
							     EXPECTED(zend_string_equal_content(p->key, name)))) {
								retval = &p->val;
								if (0 || ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) != 0) {
									goto fetch_obj_is_copy;
								} else {
									goto fetch_obj_is_fast_copy;
								}
							}
						}
						CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_DYNAMIC_PROPERTY_OFFSET);
					}
					retval = zend_hash_find_known_hash(zobj->properties, name);
					if (EXPECTED(retval)) {
						uintptr_t idx = (char*)retval - (char*)zobj->properties->arData;
						CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_ENCODE_DYN_PROP_OFFSET(idx));
						if (0 || ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) != 0) {
							goto fetch_obj_is_copy;
						} else {
							goto fetch_obj_is_fast_copy;
						}
					}
				}
			}
			name = Z_STR_P(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC));
		} else {
			name = zval_try_get_tmp_string(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC), &tmp_name);
			if (UNEXPECTED(!name)) {
				ZVAL_UNDEF(EX_VAR(opline->result.var));
				break;
			}
		}

		retval = zobj->handlers->read_property(zobj, name, BP_VAR_IS, cache_slot, EX_VAR(opline->result.var));

		if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
			zend_tmp_string_release(tmp_name);
		}

		if (retval != EX_VAR(opline->result.var)) {
fetch_obj_is_copy:
			ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
		} else if (UNEXPECTED(Z_ISREF_P(retval))) {
			zend_unwrap_reference(retval);
		}
	} while (0);

fetch_obj_is_finish:
	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_FAST_CONCAT_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;
	zend_string *op1_str, *op2_str, *str;


	op1 = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
	op2 = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
	if (((IS_TMP_VAR|IS_VAR) == IS_CONST || EXPECTED(Z_TYPE_P(op1) == IS_STRING)) &&
	    ((IS_TMP_VAR|IS_VAR) == IS_CONST || EXPECTED(Z_TYPE_P(op2) == IS_STRING))) {
		zend_string *op1_str = Z_STR_P(op1);
		zend_string *op2_str = Z_STR_P(op2);
		zend_string *str;
		uint32_t flags = ZSTR_GET_COPYABLE_CONCAT_PROPERTIES_BOTH(op1_str, op2_str);

		if ((IS_TMP_VAR|IS_VAR) != IS_CONST && UNEXPECTED(ZSTR_LEN(op1_str) == 0)) {
			if ((IS_TMP_VAR|IS_VAR) == IS_CONST || (IS_TMP_VAR|IS_VAR) == IS_CV) {
				ZVAL_STR_COPY(EX_VAR(opline->result.var), op2_str);
			} else {
				ZVAL_STR(EX_VAR(opline->result.var), op2_str);
			}
			if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
				zend_string_release_ex(op1_str, 0);
			}
		} else if ((IS_TMP_VAR|IS_VAR) != IS_CONST && UNEXPECTED(ZSTR_LEN(op2_str) == 0)) {
			if ((IS_TMP_VAR|IS_VAR) == IS_CONST || (IS_TMP_VAR|IS_VAR) == IS_CV) {
				ZVAL_STR_COPY(EX_VAR(opline->result.var), op1_str);
			} else {
				ZVAL_STR(EX_VAR(opline->result.var), op1_str);
			}
			if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
				zend_string_release_ex(op2_str, 0);
			}
		} else if ((IS_TMP_VAR|IS_VAR) != IS_CONST && (IS_TMP_VAR|IS_VAR) != IS_CV &&
		    !ZSTR_IS_INTERNED(op1_str) && GC_REFCOUNT(op1_str) == 1) {
			size_t len = ZSTR_LEN(op1_str);

			str = zend_string_extend(op1_str, len + ZSTR_LEN(op2_str), 0);
			memcpy(ZSTR_VAL(str) + len, ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
			GC_ADD_FLAGS(str, flags);
			ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
			if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
				zend_string_release_ex(op2_str, 0);
			}
		} else {
			str = zend_string_alloc(ZSTR_LEN(op1_str) + ZSTR_LEN(op2_str), 0);
			memcpy(ZSTR_VAL(str), ZSTR_VAL(op1_str), ZSTR_LEN(op1_str));
			memcpy(ZSTR_VAL(str) + ZSTR_LEN(op1_str), ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
			GC_ADD_FLAGS(str, flags);
			ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
			if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
				zend_string_release_ex(op1_str, 0);
			}
			if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
				zend_string_release_ex(op2_str, 0);
			}
		}
		ZEND_VM_NEXT_OPCODE();
	}

	SAVE_OPLINE();
	if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
		op1_str = Z_STR_P(op1);
	} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
		op1_str = zend_string_copy(Z_STR_P(op1));
	} else {
		if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
			ZVAL_UNDEFINED_OP1();
		}
		op1_str = zval_get_string_func(op1);
	}
	if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
		op2_str = Z_STR_P(op2);
	} else if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
		op2_str = zend_string_copy(Z_STR_P(op2));
	} else {
		if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(op2) == IS_UNDEF)) {
			ZVAL_UNDEFINED_OP2();
		}
		op2_str = zval_get_string_func(op2);
	}
	do {
		if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
			if (UNEXPECTED(ZSTR_LEN(op1_str) == 0)) {
				if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
					if (UNEXPECTED(Z_REFCOUNTED_P(op2))) {
						GC_ADDREF(op2_str);
					}
				}
				ZVAL_STR(EX_VAR(opline->result.var), op2_str);
				zend_string_release_ex(op1_str, 0);
				break;
			}
		}
		if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
			if (UNEXPECTED(ZSTR_LEN(op2_str) == 0)) {
				if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
					if (UNEXPECTED(Z_REFCOUNTED_P(op1))) {
						GC_ADDREF(op1_str);
					}
				}
				ZVAL_STR(EX_VAR(opline->result.var), op1_str);
				zend_string_release_ex(op2_str, 0);
				break;
			}
		}
		str = zend_string_alloc(ZSTR_LEN(op1_str) + ZSTR_LEN(op2_str), 0);
		memcpy(ZSTR_VAL(str), ZSTR_VAL(op1_str), ZSTR_LEN(op1_str));
		memcpy(ZSTR_VAL(str) + ZSTR_LEN(op1_str), ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);

		ZSTR_COPY_CONCAT_PROPERTIES_BOTH(str, op1_str, op2_str);
		ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
		if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
			zend_string_release_ex(op1_str, 0);
		}
		if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
			zend_string_release_ex(op2_str, 0);
		}
	} while (0);
	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *function_name;
	zval *object;
	zend_function *fbc;
	zend_class_entry *called_scope;
	zend_object *obj;
	zend_execute_data *call;
	uint32_t call_info;

	SAVE_OPLINE();

	object = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);

	if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
		function_name = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
	}

	if ((IS_TMP_VAR|IS_VAR) != IS_CONST &&
	    UNEXPECTED(Z_TYPE_P(function_name) != IS_STRING)) {
		do {
			if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && Z_ISREF_P(function_name)) {
				function_name = Z_REFVAL_P(function_name);
				if (EXPECTED(Z_TYPE_P(function_name) == IS_STRING)) {
					break;
				}
			} else if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) {
				ZVAL_UNDEFINED_OP2();
				if (UNEXPECTED(EG(exception) != NULL)) {
					zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
					HANDLE_EXCEPTION();
				}
			}
			zend_throw_error(NULL, "Method name must be a string");
			zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
			zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
			HANDLE_EXCEPTION();
		} while (0);
	}

	if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED) {
		obj = Z_OBJ_P(object);
	} else {
		do {
			if ((IS_TMP_VAR|IS_VAR) != IS_CONST && EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
				obj = Z_OBJ_P(object);
			} else {
				if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(object))) {
					zend_reference *ref = Z_REF_P(object);

					object = &ref->val;
					if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
						obj = Z_OBJ_P(object);
						if ((IS_TMP_VAR|IS_VAR) & IS_VAR) {
							if (UNEXPECTED(GC_DELREF(ref) == 0)) {
								efree_size(ref, sizeof(zend_reference));
							} else {
								Z_ADDREF_P(object);
							}
						}
						break;
					}
				}
				if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
					object = ZVAL_UNDEFINED_OP1();
					if (UNEXPECTED(EG(exception) != NULL)) {
						if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
							zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
						}
						HANDLE_EXCEPTION();
					}
				}
				if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
					function_name = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
				}
				zend_invalid_method_call(object, function_name);
				zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
				zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
				HANDLE_EXCEPTION();
			}
		} while (0);
	}

	called_scope = obj->ce;

	if ((IS_TMP_VAR|IS_VAR) == IS_CONST &&
	    EXPECTED(CACHED_PTR(opline->result.num) == called_scope)) {
		fbc = CACHED_PTR(opline->result.num + sizeof(void*));
	} else {
		zend_object *orig_obj = obj;

		if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
			function_name = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
		}

		/* First, locate the function. */
		fbc = obj->handlers->get_method(&obj, Z_STR_P(function_name), (((IS_TMP_VAR|IS_VAR) == IS_CONST) ? (RT_CONSTANT(opline, opline->op2) + 1) : NULL));
		if (UNEXPECTED(fbc == NULL)) {
			if (EXPECTED(!EG(exception))) {
				zend_undefined_method(orig_obj->ce, Z_STR_P(function_name));
			}
			zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
			if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_TMP_VAR)) && GC_DELREF(orig_obj) == 0) {
				zend_objects_store_del(orig_obj);
			}
			HANDLE_EXCEPTION();
		}
		if ((IS_TMP_VAR|IS_VAR) == IS_CONST &&
		    EXPECTED(!(fbc->common.fn_flags & (ZEND_ACC_CALL_VIA_TRAMPOLINE|ZEND_ACC_NEVER_CACHE))) &&
		    EXPECTED(obj == orig_obj)) {
			CACHE_POLYMORPHIC_PTR(opline->result.num, called_scope, fbc);
		}
		if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_TMP_VAR)) && UNEXPECTED(obj != orig_obj)) {
			GC_ADDREF(obj); /* For $this pointer */
			if (GC_DELREF(orig_obj) == 0) {
				zend_objects_store_del(orig_obj);
			}
		}
		if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!RUN_TIME_CACHE(&fbc->op_array))) {
			init_func_run_time_cache(&fbc->op_array);
		}
	}

	if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
		zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
	}

	call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_HAS_THIS;
	if (UNEXPECTED((fbc->common.fn_flags & ZEND_ACC_STATIC) != 0)) {
		if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_TMP_VAR)) && GC_DELREF(obj) == 0) {
			zend_objects_store_del(obj);
			if (UNEXPECTED(EG(exception))) {
				HANDLE_EXCEPTION();
			}
		}
		/* call static method */
		obj = (zend_object*)called_scope;
		call_info = ZEND_CALL_NESTED_FUNCTION;
	} else if ((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_TMP_VAR|IS_CV)) {
		if ((IS_TMP_VAR|IS_VAR) == IS_CV) {
			GC_ADDREF(obj); /* For $this pointer */
		}
		/* CV may be changed indirectly (e.g. when it's a reference) */
		call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_HAS_THIS | ZEND_CALL_RELEASE_THIS;
	}

	call = zend_vm_stack_push_call_frame(call_info,
		fbc, opline->extended_value, obj);
	call->prev_execute_data = EX(call);
	EX(call) = call;

	ZEND_VM_NEXT_OPCODE();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_CASE_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;
	double d1, d2;

	op1 = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
	op2 = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
	if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
		if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
			if (EXPECTED(Z_LVAL_P(op1) == Z_LVAL_P(op2))) {
case_true:
				ZEND_VM_SMART_BRANCH_TRUE();
			} else {
case_false:
				ZEND_VM_SMART_BRANCH_FALSE();
			}
		} else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
			d1 = (double)Z_LVAL_P(op1);
			d2 = Z_DVAL_P(op2);
			goto case_double;
		}
	} else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) {
		if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
			d1 = Z_DVAL_P(op1);
			d2 = Z_DVAL_P(op2);
case_double:
			if (d1 == d2) {
				goto case_true;
			} else {
				goto case_false;
			}
		} else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
			d1 = Z_DVAL_P(op1);
			d2 = (double)Z_LVAL_P(op2);
			goto case_double;
		}
	} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
		if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
			bool result = zend_fast_equal_strings(Z_STR_P(op1), Z_STR_P(op2));
			zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
			if (result) {
				goto case_true;
			} else {
				goto case_false;
			}
		}
	}
	ZEND_VM_DISPATCH_TO_HELPER(zend_case_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_EX op1, op2));
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *container;
	bool result;
	zend_ulong hval;
	zval *offset;

	SAVE_OPLINE();
	container = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
	offset = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);

	if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
		HashTable *ht;
		zval *value;
		zend_string *str;

isset_dim_obj_array:
		ht = Z_ARRVAL_P(container);
isset_again:
		if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) {
			str = Z_STR_P(offset);
			if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
				if (ZEND_HANDLE_NUMERIC(str, hval)) {
					goto num_index_prop;
				}
			}
			value = zend_hash_find_ex(ht, str, (IS_TMP_VAR|IS_VAR) == IS_CONST);
		} else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
			hval = Z_LVAL_P(offset);
num_index_prop:
			value = zend_hash_index_find(ht, hval);
		} else if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(offset))) {
			offset = Z_REFVAL_P(offset);
			goto isset_again;
		} else {
			value = zend_find_array_dim_slow(ht, offset EXECUTE_DATA_CC);
			if (UNEXPECTED(EG(exception))) {
				result = 0;
				goto isset_dim_obj_exit;
			}
		}

		if (!(opline->extended_value & ZEND_ISEMPTY)) {
			/* > IS_NULL means not IS_UNDEF and not IS_NULL */
			result = value != NULL && Z_TYPE_P(value) > IS_NULL &&
			    (!Z_ISREF_P(value) || Z_TYPE_P(Z_REFVAL_P(value)) != IS_NULL);

			if ((IS_TMP_VAR|IS_VAR) & (IS_CONST|IS_CV)) {
				/* avoid exception check */
				zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
				ZEND_VM_SMART_BRANCH(result, 0);
			}
		} else {
			result = (value == NULL || !i_zend_is_true(value));
		}
		goto isset_dim_obj_exit;
	} else if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(container))) {
		container = Z_REFVAL_P(container);
		if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
			goto isset_dim_obj_array;
		}
	}

	if ((IS_TMP_VAR|IS_VAR) == IS_CONST && Z_EXTRA_P(offset) == ZEND_EXTRA_VALUE) {
		offset++;
	}
	if (!(opline->extended_value & ZEND_ISEMPTY)) {
		result = zend_isset_dim_slow(container, offset EXECUTE_DATA_CC);
	} else {
		result = zend_isempty_dim_slow(container, offset EXECUTE_DATA_CC);
	}

isset_dim_obj_exit:
	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
	ZEND_VM_SMART_BRANCH(result, 1);
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *container;
	int result;
	zval *offset;
	zend_string *name, *tmp_name;

	SAVE_OPLINE();
	container = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
	offset = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);

	if ((IS_TMP_VAR|IS_VAR) == IS_CONST ||
	    ((IS_TMP_VAR|IS_VAR) != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
		if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
			container = Z_REFVAL_P(container);
			if (UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT)) {
				result = (opline->extended_value & ZEND_ISEMPTY);
				goto isset_object_finish;
			}
		} else {
			result = (opline->extended_value & ZEND_ISEMPTY);
			goto isset_object_finish;
		}
	}

	if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
		name = Z_STR_P(offset);
	} else {
		name = zval_try_get_tmp_string(offset, &tmp_name);
		if (UNEXPECTED(!name)) {
			result = 0;
			goto isset_object_finish;
		}
	}

	result =
		(opline->extended_value & ZEND_ISEMPTY) ^
		Z_OBJ_HT_P(container)->has_property(Z_OBJ_P(container), name, (opline->extended_value & ZEND_ISEMPTY), (((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(opline->extended_value & ~ZEND_ISEMPTY) : NULL));

	if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
		zend_tmp_string_release(tmp_name);
	}

isset_object_finish:
	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
	ZEND_VM_SMART_BRANCH(result, 1);
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_ARRAY_KEY_EXISTS_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE

	zval *key, *subject;
	HashTable *ht;
	bool result;

	SAVE_OPLINE();

	key = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
	subject = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);

	if (EXPECTED(Z_TYPE_P(subject) == IS_ARRAY)) {
array_key_exists_array:
		ht = Z_ARRVAL_P(subject);
		result = zend_array_key_exists_fast(ht, key OPLINE_CC EXECUTE_DATA_CC);
	} else {
		if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(subject))) {
			subject = Z_REFVAL_P(subject);
			if (EXPECTED(Z_TYPE_P(subject) == IS_ARRAY)) {
				goto array_key_exists_array;
			}
		}
		zend_array_key_exists_error(subject, key OPLINE_CC EXECUTE_DATA_CC);
		result = 0;
	}

	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
	ZEND_VM_SMART_BRANCH(result, 1);
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_INSTANCEOF_SPEC_TMPVAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *expr;
	bool result;

	SAVE_OPLINE();
	expr = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);

try_instanceof:
	if (Z_TYPE_P(expr) == IS_OBJECT) {
		zend_class_entry *ce;

		if (IS_VAR == IS_CONST) {
			ce = CACHED_PTR(opline->extended_value);
			if (UNEXPECTED(ce == NULL)) {
				ce = zend_lookup_class_ex(Z_STR_P(RT_CONSTANT(opline, opline->op2)), Z_STR_P(RT_CONSTANT(opline, opline->op2) + 1), ZEND_FETCH_CLASS_NO_AUTOLOAD);
				if (EXPECTED(ce)) {
					CACHE_PTR(opline->extended_value, ce);
				}
			}
		} else if (IS_VAR == IS_UNUSED) {
			ce = zend_fetch_class(NULL, opline->op2.num);
			if (UNEXPECTED(ce == NULL)) {
				zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
				ZVAL_UNDEF(EX_VAR(opline->result.var));
				HANDLE_EXCEPTION();
			}
		} else {
			ce = Z_CE_P(EX_VAR(opline->op2.var));
		}
		result = ce && instanceof_function(Z_OBJCE_P(expr), ce);
	} else if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && Z_TYPE_P(expr) == IS_REFERENCE) {
		expr = Z_REFVAL_P(expr);
		goto try_instanceof;
	} else {
		if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(expr) == IS_UNDEF)) {
			ZVAL_UNDEFINED_OP1();
		}
		result = 0;
	}
	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
	ZEND_VM_SMART_BRANCH(result, 1);
}

static zend_never_inline ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV_EX  zend_fetch_var_address_helper_SPEC_TMPVAR_UNUSED(ZEND_OPCODE_HANDLER_ARGS_EX int type)
{
	USE_OPLINE
	zval *varname;
	zval *retval;
	zend_string *name, *tmp_name;
	HashTable *target_symbol_table;

	SAVE_OPLINE();
	varname = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);

	if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
		name = Z_STR_P(varname);
	} else if (EXPECTED(Z_TYPE_P(varname) == IS_STRING)) {
		name = Z_STR_P(varname);
		tmp_name = NULL;
	} else {
		if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(varname) == IS_UNDEF)) {
			ZVAL_UNDEFINED_OP1();
		}
		name = zval_try_get_tmp_string(varname, &tmp_name);
		if (UNEXPECTED(!name)) {
			if (!(opline->extended_value & ZEND_FETCH_GLOBAL_LOCK)) {
				zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
			}
			ZVAL_UNDEF(EX_VAR(opline->result.var));
			HANDLE_EXCEPTION();
		}
	}

	target_symbol_table = zend_get_target_symbol_table(opline->extended_value EXECUTE_DATA_CC);
	retval = zend_hash_find_ex(target_symbol_table, name, (IS_TMP_VAR|IS_VAR) == IS_CONST);
	if (retval == NULL) {
		if (UNEXPECTED(zend_string_equals(name, ZSTR_KNOWN(ZEND_STR_THIS)))) {
fetch_this:
			zend_fetch_this_var(type OPLINE_CC EXECUTE_DATA_CC);
			if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
				zend_tmp_string_release(tmp_name);
			}
			ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
		}
		if (type == BP_VAR_W) {
			retval = zend_hash_add_new(target_symbol_table, name, &EG(uninitialized_zval));
		} else if (type == BP_VAR_IS || type == BP_VAR_UNSET) {
			retval = &EG(uninitialized_zval);
		} else {
			if ((IS_TMP_VAR|IS_VAR) == IS_CV) {
				/* Keep name alive in case an error handler tries to free it. */
				zend_string_addref(name);
			}
			zend_error_unchecked(E_WARNING, "Undefined %svariable $%S",
				(opline->extended_value & ZEND_FETCH_GLOBAL ? "global " : ""), name);
			if (type == BP_VAR_RW && !EG(exception)) {
				retval = zend_hash_update(target_symbol_table, name, &EG(uninitialized_zval));
			} else {
				retval = &EG(uninitialized_zval);
			}
			if ((IS_TMP_VAR|IS_VAR) == IS_CV) {
				zend_string_release(name);
			}
		}
	/* GLOBAL or $$name variable may be an INDIRECT pointer to CV */
	} else if (Z_TYPE_P(retval) == IS_INDIRECT) {
		retval = Z_INDIRECT_P(retval);
		if (Z_TYPE_P(retval) == IS_UNDEF) {
			if (UNEXPECTED(zend_string_equals(name, ZSTR_KNOWN(ZEND_STR_THIS)))) {
				goto fetch_this;
			}
			if (type == BP_VAR_W) {
				ZVAL_NULL(retval);
			} else if (type == BP_VAR_IS || type == BP_VAR_UNSET) {
				retval = &EG(uninitialized_zval);
			} else {
				zend_error_unchecked(E_WARNING, "Undefined %svariable $%S",
					(opline->extended_value & ZEND_FETCH_GLOBAL ? "global " : ""), name);
				if (type == BP_VAR_RW && !EG(exception)) {
					ZVAL_NULL(retval);
				} else {
					retval = &EG(uninitialized_zval);
				}
			}
		}
	}

	if (!(opline->extended_value & ZEND_FETCH_GLOBAL_LOCK)) {
		zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
	}

	if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
		zend_tmp_string_release(tmp_name);
	}

	ZEND_ASSERT(retval != NULL);
	if (type == BP_VAR_R || type == BP_VAR_IS) {
		ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
	} else {
		ZVAL_INDIRECT(EX_VAR(opline->result.var), retval);
	}
	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_FETCH_R_SPEC_TMPVAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	ZEND_VM_DISPATCH_TO_HELPER(zend_fetch_var_address_helper_SPEC_TMPVAR_UNUSED(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_EX BP_VAR_R));
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_FETCH_W_SPEC_TMPVAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	ZEND_VM_DISPATCH_TO_HELPER(zend_fetch_var_address_helper_SPEC_TMPVAR_UNUSED(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_EX BP_VAR_W));
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_FETCH_RW_SPEC_TMPVAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	ZEND_VM_DISPATCH_TO_HELPER(zend_fetch_var_address_helper_SPEC_TMPVAR_UNUSED(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_EX BP_VAR_RW));
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_FETCH_FUNC_ARG_SPEC_TMPVAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	int fetch_type =
		(UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) ?
			BP_VAR_W : BP_VAR_R;
	ZEND_VM_DISPATCH_TO_HELPER(zend_fetch_var_address_helper_SPEC_TMPVAR_UNUSED(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_EX fetch_type));
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_FETCH_UNSET_SPEC_TMPVAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	ZEND_VM_DISPATCH_TO_HELPER(zend_fetch_var_address_helper_SPEC_TMPVAR_UNUSED(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_EX BP_VAR_UNSET));
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_FETCH_IS_SPEC_TMPVAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	ZEND_VM_DISPATCH_TO_HELPER(zend_fetch_var_address_helper_SPEC_TMPVAR_UNUSED(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_EX BP_VAR_IS));
}

/* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CONST|VAR) */
static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_SEND_VAL_SPEC_TMPVAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *value, *arg;

	if (IS_UNUSED == IS_CONST) {
		SAVE_OPLINE();
		zend_string *arg_name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
		uint32_t arg_num;
		arg = zend_handle_named_arg(&EX(call), arg_name, &arg_num, CACHE_ADDR(opline->result.num));
		if (UNEXPECTED(!arg)) {
			zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
			HANDLE_EXCEPTION();
		}
	} else {
		arg = ZEND_CALL_VAR(EX(call), opline->result.var);
	}

	value = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
	ZVAL_COPY_VALUE(arg, value);
	if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
		if (UNEXPECTED(Z_OPT_REFCOUNTED_P(arg))) {
			Z_ADDREF_P(arg);
		}
	}
	ZEND_VM_NEXT_OPCODE();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_UNSET_VAR_SPEC_TMPVAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *varname;
	zend_string *name, *tmp_name;
	HashTable *target_symbol_table;

	SAVE_OPLINE();

	varname = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);

	if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
		name = Z_STR_P(varname);
	} else if (EXPECTED(Z_TYPE_P(varname) == IS_STRING)) {
		name = Z_STR_P(varname);
		tmp_name = NULL;
	} else {
		if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(varname) == IS_UNDEF)) {
			varname = ZVAL_UNDEFINED_OP1();
		}
		name = zval_try_get_tmp_string(varname, &tmp_name);
		if (UNEXPECTED(!name)) {
			zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
			HANDLE_EXCEPTION();
		}
	}

	target_symbol_table = zend_get_target_symbol_table(opline->extended_value EXECUTE_DATA_CC);
	zend_hash_del_ind(target_symbol_table, name);

	if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
		zend_tmp_string_release(tmp_name);
	}
	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

/* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CLASS_FETCH|CONST|VAR) */
static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_ISSET_ISEMPTY_VAR_SPEC_TMPVAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *value;
	bool result;
	zval *varname;
	zend_string *name, *tmp_name;
	HashTable *target_symbol_table;

	SAVE_OPLINE();
	varname = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
	if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
		name = Z_STR_P(varname);
	} else {
		name = zval_get_tmp_string(varname, &tmp_name);
	}

	target_symbol_table = zend_get_target_symbol_table(opline->extended_value EXECUTE_DATA_CC);
	value = zend_hash_find_ex(target_symbol_table, name, (IS_TMP_VAR|IS_VAR) == IS_CONST);

	if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
		zend_tmp_string_release(tmp_name);
	}
	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));

	if (!value) {
		result = (opline->extended_value & ZEND_ISEMPTY);
	} else {
		if (Z_TYPE_P(value) == IS_INDIRECT) {
			value = Z_INDIRECT_P(value);
		}
		if (!(opline->extended_value & ZEND_ISEMPTY)) {
			if (Z_ISREF_P(value)) {
				value = Z_REFVAL_P(value);
			}
			result = Z_TYPE_P(value) > IS_NULL;
		} else {
			result = !i_zend_is_true(value);
		}
	}

	ZEND_VM_SMART_BRANCH(result, true);
}

/* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CLASS_FETCH|CONST|VAR) */
static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_INSTANCEOF_SPEC_TMPVAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *expr;
	bool result;

	SAVE_OPLINE();
	expr = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);

try_instanceof:
	if (Z_TYPE_P(expr) == IS_OBJECT) {
		zend_class_entry *ce;

		if (IS_UNUSED == IS_CONST) {
			ce = CACHED_PTR(opline->extended_value);
			if (UNEXPECTED(ce == NULL)) {
				ce = zend_lookup_class_ex(Z_STR_P(RT_CONSTANT(opline, opline->op2)), Z_STR_P(RT_CONSTANT(opline, opline->op2) + 1), ZEND_FETCH_CLASS_NO_AUTOLOAD);
				if (EXPECTED(ce)) {
					CACHE_PTR(opline->extended_value, ce);
				}
			}
		} else if (IS_UNUSED == IS_UNUSED) {
			ce = zend_fetch_class(NULL, opline->op2.num);
			if (UNEXPECTED(ce == NULL)) {
				zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
				ZVAL_UNDEF(EX_VAR(opline->result.var));
				HANDLE_EXCEPTION();
			}
		} else {
			ce = Z_CE_P(EX_VAR(opline->op2.var));
		}
		result = ce && instanceof_function(Z_OBJCE_P(expr), ce);
	} else if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && Z_TYPE_P(expr) == IS_REFERENCE) {
		expr = Z_REFVAL_P(expr);
		goto try_instanceof;
	} else {
		if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(expr) == IS_UNDEF)) {
			ZVAL_UNDEFINED_OP1();
		}
		result = 0;
	}
	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
	ZEND_VM_SMART_BRANCH(result, 1);
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_COUNT_SPEC_TMPVAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1;
	zend_long count;

	SAVE_OPLINE();
	op1 = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);

	while (1) {
		if (Z_TYPE_P(op1) == IS_ARRAY) {
			count = zend_hash_num_elements(Z_ARRVAL_P(op1));
			break;
		} else if (Z_TYPE_P(op1) == IS_OBJECT) {
			zend_object *zobj = Z_OBJ_P(op1);

			/* first, we check if the handler is defined */
			if (zobj->handlers->count_elements) {
				if (SUCCESS == zobj->handlers->count_elements(zobj, &count)) {
					break;
				}
				if (UNEXPECTED(EG(exception))) {
					count = 0;
					break;
				}
			}

			/* if not and the object implements Countable we call its count() method */
			if (zend_class_implements_interface(zobj->ce, zend_ce_countable)) {
				zval retval;

				zend_function *count_fn = zend_hash_find_ptr(&zobj->ce->function_table, ZSTR_KNOWN(ZEND_STR_COUNT));
				zend_call_known_instance_method_with_0_params(count_fn, zobj, &retval);
				count = zval_get_long(&retval);
				zval_ptr_dtor(&retval);
				break;
			}

			/* If There's no handler and it doesn't implement Countable then emit a TypeError */
		} else if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) != 0 && Z_TYPE_P(op1) == IS_REFERENCE) {
			op1 = Z_REFVAL_P(op1);
			continue;
		} else if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
			ZVAL_UNDEFINED_OP1();
		}
		count = 0;
		zend_type_error("%s(): Argument #1 ($value) must be of type Countable|array, %s given", opline->extended_value ? "sizeof" : "count", zend_zval_value_name(op1));
		break;
	}

	ZVAL_LONG(EX_VAR(opline->result.var), count);
	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_COUNT_ARRAY_SPEC_TMPVAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zend_array *ht = Z_ARRVAL_P(_get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC));
	ZVAL_LONG(EX_VAR(opline->result.var), zend_hash_num_elements(ht));
	if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR) && !(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE) && !GC_DELREF(ht)) {
		SAVE_OPLINE();
		zend_array_destroy(ht);
		if (EG(exception)) {
			HANDLE_EXCEPTION();
		}
	}
	ZEND_VM_NEXT_OPCODE();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_GET_CLASS_SPEC_TMPVAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE

	if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED) {
		SAVE_OPLINE();
		if (UNEXPECTED(!EX(func)->common.scope)) {
			zend_throw_error(NULL, "get_class() without arguments must be called from within a class");
			ZVAL_UNDEF(EX_VAR(opline->result.var));
			HANDLE_EXCEPTION();
		} else {
			zend_error(E_DEPRECATED, "Calling get_class() without arguments is deprecated");
			ZVAL_STR_COPY(EX_VAR(opline->result.var), EX(func)->common.scope->name);
			if (UNEXPECTED(EG(exception))) {
				HANDLE_EXCEPTION();
			}
			ZEND_VM_NEXT_OPCODE();
		}
	} else {
		zval *op1;

		SAVE_OPLINE();
		op1 = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
		while (1) {
			if (Z_TYPE_P(op1) == IS_OBJECT) {
				ZVAL_STR_COPY(EX_VAR(opline->result.var), Z_OBJCE_P(op1)->name);
			} else if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) != 0 && Z_TYPE_P(op1) == IS_REFERENCE) {
				op1 = Z_REFVAL_P(op1);
				continue;
			} else {
				if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
					ZVAL_UNDEFINED_OP1();
				}
				zend_type_error("get_class(): Argument #1 ($object) must be of type object, %s given", zend_zval_value_name(op1));
				ZVAL_UNDEF(EX_VAR(opline->result.var));
			}
			break;
		}
		zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
	}
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_COPY_TMP_SPEC_TMPVAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *value = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
	zval *result = EX_VAR(opline->result.var);
	ZVAL_COPY(result, value);
	ZEND_VM_NEXT_OPCODE();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_DIV_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;

	SAVE_OPLINE();
	op1 = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
	op2 = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
	div_function(EX_VAR(opline->result.var), op1, op2);
	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));


	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_POW_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;

	SAVE_OPLINE();
	op1 = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
	op2 = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
	pow_function(EX_VAR(opline->result.var), op1, op2);
	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));


	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_CONCAT_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;

	op1 = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
	op2 = EX_VAR(opline->op2.var);

	if (((IS_TMP_VAR|IS_VAR) == IS_CONST || EXPECTED(Z_TYPE_P(op1) == IS_STRING)) &&
	    (IS_CV == IS_CONST || EXPECTED(Z_TYPE_P(op2) == IS_STRING))) {
		zend_string *op1_str = Z_STR_P(op1);
		zend_string *op2_str = Z_STR_P(op2);
		zend_string *str;
		uint32_t flags = ZSTR_GET_COPYABLE_CONCAT_PROPERTIES_BOTH(op1_str, op2_str);

		if ((IS_TMP_VAR|IS_VAR) != IS_CONST && UNEXPECTED(ZSTR_LEN(op1_str) == 0)) {
			if (IS_CV == IS_CONST || IS_CV == IS_CV) {
				ZVAL_STR_COPY(EX_VAR(opline->result.var), op2_str);
			} else {
				ZVAL_STR(EX_VAR(opline->result.var), op2_str);
			}
			if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
				zend_string_release_ex(op1_str, 0);
			}
		} else if (IS_CV != IS_CONST && UNEXPECTED(ZSTR_LEN(op2_str) == 0)) {
			if ((IS_TMP_VAR|IS_VAR) == IS_CONST || (IS_TMP_VAR|IS_VAR) == IS_CV) {
				ZVAL_STR_COPY(EX_VAR(opline->result.var), op1_str);
			} else {
				ZVAL_STR(EX_VAR(opline->result.var), op1_str);
			}
			if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
				zend_string_release_ex(op2_str, 0);
			}
		} else if ((IS_TMP_VAR|IS_VAR) != IS_CONST && (IS_TMP_VAR|IS_VAR) != IS_CV &&
		    !ZSTR_IS_INTERNED(op1_str) && GC_REFCOUNT(op1_str) == 1) {
			size_t len = ZSTR_LEN(op1_str);

			if (UNEXPECTED(len > ZSTR_MAX_LEN - ZSTR_LEN(op2_str))) {
				zend_error_noreturn(E_ERROR, "Integer overflow in memory allocation");
			}
			str = zend_string_extend(op1_str, len + ZSTR_LEN(op2_str), 0);
			memcpy(ZSTR_VAL(str) + len, ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
			GC_ADD_FLAGS(str, flags);
			ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
			if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
				zend_string_release_ex(op2_str, 0);
			}
		} else {
			str = zend_string_alloc(ZSTR_LEN(op1_str) + ZSTR_LEN(op2_str), 0);
			memcpy(ZSTR_VAL(str), ZSTR_VAL(op1_str), ZSTR_LEN(op1_str));
			memcpy(ZSTR_VAL(str) + ZSTR_LEN(op1_str), ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
			GC_ADD_FLAGS(str, flags);
			ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
			if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
				zend_string_release_ex(op1_str, 0);
			}
			if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
				zend_string_release_ex(op2_str, 0);
			}
		}
		ZEND_VM_NEXT_OPCODE();
	} else {
		SAVE_OPLINE();

		if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
			op1 = ZVAL_UNDEFINED_OP1();
		}
		if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(op2) == IS_UNDEF)) {
			op2 = ZVAL_UNDEFINED_OP2();
		}
		concat_function(EX_VAR(opline->result.var), op1, op2);
		zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));


		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
	}
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_SPACESHIP_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;

	SAVE_OPLINE();
	op1 = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
	op2 = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
	compare_function(EX_VAR(opline->result.var), op1, op2);
	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));


	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_FETCH_DIM_R_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *container, *dim, *value;

	SAVE_OPLINE();
	container = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
	dim = EX_VAR(opline->op2.var);
	if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
		if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
fetch_dim_r_array:
			value = zend_fetch_dimension_address_inner(Z_ARRVAL_P(container), dim, IS_CV, BP_VAR_R EXECUTE_DATA_CC);
			ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
		} else if (EXPECTED(Z_TYPE_P(container) == IS_REFERENCE)) {
			container = Z_REFVAL_P(container);
			if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
				goto fetch_dim_r_array;
			} else {
				goto fetch_dim_r_slow;
			}
		} else {
fetch_dim_r_slow:
			if (IS_CV == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
				dim++;
			}
			zend_fetch_dimension_address_read_R_slow(container, dim OPLINE_CC EXECUTE_DATA_CC);
		}
	} else {
		zend_fetch_dimension_address_read_R(container, dim, IS_CV OPLINE_CC EXECUTE_DATA_CC);
	}


	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_FETCH_DIM_IS_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *container;

	SAVE_OPLINE();
	container = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
	zend_fetch_dimension_address_read_IS(container, EX_VAR(opline->op2.var), IS_CV OPLINE_CC EXECUTE_DATA_CC);


	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_FETCH_OBJ_R_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *container;
	void **cache_slot = NULL;

	SAVE_OPLINE();
	container = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);

	if ((IS_TMP_VAR|IS_VAR) == IS_CONST ||
	    ((IS_TMP_VAR|IS_VAR) != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
		do {
			if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
				container = Z_REFVAL_P(container);
				if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
					break;
				}
			}
			if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
				ZVAL_UNDEFINED_OP1();
			}
			zend_wrong_property_read(container, _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC));
			ZVAL_NULL(EX_VAR(opline->result.var));
			goto fetch_obj_r_finish;
		} while (0);
	}

	/* here we are sure we are dealing with an object */
	do {
		zend_object *zobj = Z_OBJ_P(container);
		zend_string *name, *tmp_name;
		zval *retval;

		if (IS_CV == IS_CONST) {
			cache_slot = CACHE_ADDR(opline->extended_value & ~ZEND_FETCH_REF /* FUNC_ARG fetch may contain it */);

			if (EXPECTED(zobj->ce == CACHED_PTR_EX(cache_slot))) {
				uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);

				if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
fetch_obj_r_simple:
					retval = OBJ_PROP(zobj, prop_offset);
					if (EXPECTED(Z_TYPE_INFO_P(retval) != IS_UNDEF)) {
						if (0 || ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) != 0) {
							goto fetch_obj_r_copy;
						} else {
fetch_obj_r_fast_copy:
							ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
							ZEND_VM_NEXT_OPCODE();
						}
					}
				} else if (UNEXPECTED(IS_HOOKED_PROPERTY_OFFSET(prop_offset))) {
					zend_property_info *prop_info = CACHED_PTR_EX(cache_slot + 2);
					if (ZEND_IS_PROPERTY_HOOK_SIMPLE_READ(prop_offset)) {
						prop_offset = prop_info->offset;
						goto fetch_obj_r_simple;
					} else if (EXPECTED(ZEND_IS_PROPERTY_HOOK_SIMPLE_GET(prop_offset))) {
						zend_function *hook = prop_info->hooks[ZEND_PROPERTY_HOOK_GET];
						ZEND_ASSERT(hook->type == ZEND_USER_FUNCTION);
						ZEND_ASSERT(RUN_TIME_CACHE(&hook->op_array));

						uint32_t call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_HAS_THIS;
						if ((IS_TMP_VAR|IS_VAR) & IS_CV) {
							GC_ADDREF(zobj);
						}
						if ((IS_TMP_VAR|IS_VAR) & (IS_CV|IS_VAR|IS_TMP_VAR)) {
							call_info |= ZEND_CALL_RELEASE_THIS;
						}
						zend_execute_data *call = zend_vm_stack_push_call_frame(call_info, hook, 0, zobj);
						call->prev_execute_data = execute_data;
						call->call = NULL;
						call->return_value = EX_VAR(opline->result.var);
						call->run_time_cache = RUN_TIME_CACHE(&hook->op_array);

						execute_data = call;
						EG(current_execute_data) = execute_data;
						zend_init_cvs(0, hook->op_array.last_var EXECUTE_DATA_CC);

#if defined(ZEND_VM_IP_GLOBAL_REG) && ((ZEND_VM_KIND == ZEND_VM_KIND_CALL) || (ZEND_VM_KIND == ZEND_VM_KIND_HYBRID))
						opline = hook->op_array.opcodes;
#else
						EX(opline) = hook->op_array.opcodes;
#endif
						LOAD_OPLINE_EX();




						ZEND_VM_ENTER_EX();
					}
					/* Fall through to read_property for hooks. */
				} else if (EXPECTED(zobj->properties != NULL)) {
					ZEND_ASSERT(IS_DYNAMIC_PROPERTY_OFFSET(prop_offset));
					name = Z_STR_P(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC));
					if (!IS_UNKNOWN_DYNAMIC_PROPERTY_OFFSET(prop_offset)) {
						uintptr_t idx = ZEND_DECODE_DYN_PROP_OFFSET(prop_offset);

						if (EXPECTED(idx < zobj->properties->nNumUsed * sizeof(Bucket))) {
							Bucket *p = (Bucket*)((char*)zobj->properties->arData + idx);

							if (EXPECTED(p->key == name) ||
							    (EXPECTED(p->h == ZSTR_H(name)) &&
							     EXPECTED(p->key != NULL) &&
							     EXPECTED(zend_string_equal_content(p->key, name)))) {
								retval = &p->val;
								if (0 || ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) != 0) {
									goto fetch_obj_r_copy;
								} else {
									goto fetch_obj_r_fast_copy;
								}
							}
						}
						CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_DYNAMIC_PROPERTY_OFFSET);
					}
					retval = zend_hash_find_known_hash(zobj->properties, name);
					if (EXPECTED(retval)) {
						uintptr_t idx = (char*)retval - (char*)zobj->properties->arData;
						CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_ENCODE_DYN_PROP_OFFSET(idx));
						if (0 || ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) != 0) {
							goto fetch_obj_r_copy;
						} else {
							goto fetch_obj_r_fast_copy;
						}
					}
				}
			}
			name = Z_STR_P(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC));
		} else {
			name = zval_try_get_tmp_string(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC), &tmp_name);
			if (UNEXPECTED(!name)) {
				ZVAL_UNDEF(EX_VAR(opline->result.var));
				break;
			}
		}

#if ZEND_DEBUG
		/* For non-standard object handlers, verify a declared property type in debug builds.
		 * Fetch prop_info before calling read_property(), as it may deallocate the object. */
		zend_property_info *prop_info = NULL;
		if (zobj->handlers->read_property != zend_std_read_property) {
			prop_info = zend_get_property_info(zobj->ce, name, /* silent */ true);
		}
#endif
		retval = zobj->handlers->read_property(zobj, name, BP_VAR_R, cache_slot, EX_VAR(opline->result.var));
#if ZEND_DEBUG
		if (!EG(exception) && prop_info && prop_info != ZEND_WRONG_PROPERTY_INFO
				&& ZEND_TYPE_IS_SET(prop_info->type)) {
			ZVAL_OPT_DEREF(retval);
			zend_verify_property_type(prop_info, retval, /* strict */ true);
		}
#endif

		if (IS_CV != IS_CONST) {
			zend_tmp_string_release(tmp_name);
		}

		if (retval != EX_VAR(opline->result.var)) {
fetch_obj_r_copy:
			ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
		} else if (UNEXPECTED(Z_ISREF_P(retval))) {
			zend_unwrap_reference(retval);
		}
	} while (0);

fetch_obj_r_finish:


	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *container;
	void **cache_slot = NULL;

	SAVE_OPLINE();
	container = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);

	if ((IS_TMP_VAR|IS_VAR) == IS_CONST ||
	    ((IS_TMP_VAR|IS_VAR) != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
		do {
			if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
				container = Z_REFVAL_P(container);
				if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
					break;
				}
			}
			if (IS_CV == IS_CV && Z_TYPE_P(EX_VAR(opline->op2.var)) == IS_UNDEF) {
				ZVAL_UNDEFINED_OP2();
			}
			ZVAL_NULL(EX_VAR(opline->result.var));
			goto fetch_obj_is_finish;
		} while (0);
	}

	/* here we are sure we are dealing with an object */
	do {
		zend_object *zobj = Z_OBJ_P(container);
		zend_string *name, *tmp_name;
		zval *retval;

		if (IS_CV == IS_CONST) {
			cache_slot = CACHE_ADDR(opline->extended_value);

			if (EXPECTED(zobj->ce == CACHED_PTR_EX(cache_slot))) {
				uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);

				if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
fetch_obj_is_simple:
					retval = OBJ_PROP(zobj, prop_offset);
					if (EXPECTED(Z_TYPE_P(retval) != IS_UNDEF)) {
						if (0 || ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) != 0) {
							goto fetch_obj_is_copy;
						} else {
fetch_obj_is_fast_copy:
							ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
							ZEND_VM_NEXT_OPCODE();
						}
					}
				} else if (UNEXPECTED(IS_HOOKED_PROPERTY_OFFSET(prop_offset))) {
					if (ZEND_IS_PROPERTY_HOOK_SIMPLE_READ(prop_offset)) {
						zend_property_info *prop_info = CACHED_PTR_EX(cache_slot + 2);
						prop_offset = prop_info->offset;
						goto fetch_obj_is_simple;
					}
					/* Fall through to read_property for hooks. */
				} else if (EXPECTED(zobj->properties != NULL)) {
					ZEND_ASSERT(IS_DYNAMIC_PROPERTY_OFFSET(prop_offset));
					name = Z_STR_P(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC));
					if (!IS_UNKNOWN_DYNAMIC_PROPERTY_OFFSET(prop_offset)) {
						uintptr_t idx = ZEND_DECODE_DYN_PROP_OFFSET(prop_offset);

						if (EXPECTED(idx < zobj->properties->nNumUsed * sizeof(Bucket))) {
							Bucket *p = (Bucket*)((char*)zobj->properties->arData + idx);

							if (EXPECTED(p->key == name) ||
							    (EXPECTED(p->h == ZSTR_H(name)) &&
							     EXPECTED(p->key != NULL) &&
							     EXPECTED(zend_string_equal_content(p->key, name)))) {
								retval = &p->val;
								if (0 || ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) != 0) {
									goto fetch_obj_is_copy;
								} else {
									goto fetch_obj_is_fast_copy;
								}
							}
						}
						CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_DYNAMIC_PROPERTY_OFFSET);
					}
					retval = zend_hash_find_known_hash(zobj->properties, name);
					if (EXPECTED(retval)) {
						uintptr_t idx = (char*)retval - (char*)zobj->properties->arData;
						CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_ENCODE_DYN_PROP_OFFSET(idx));
						if (0 || ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) != 0) {
							goto fetch_obj_is_copy;
						} else {
							goto fetch_obj_is_fast_copy;
						}
					}
				}
			}
			name = Z_STR_P(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC));
		} else {
			name = zval_try_get_tmp_string(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC), &tmp_name);
			if (UNEXPECTED(!name)) {
				ZVAL_UNDEF(EX_VAR(opline->result.var));
				break;
			}
		}

		retval = zobj->handlers->read_property(zobj, name, BP_VAR_IS, cache_slot, EX_VAR(opline->result.var));

		if (IS_CV != IS_CONST) {
			zend_tmp_string_release(tmp_name);
		}

		if (retval != EX_VAR(opline->result.var)) {
fetch_obj_is_copy:
			ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
		} else if (UNEXPECTED(Z_ISREF_P(retval))) {
			zend_unwrap_reference(retval);
		}
	} while (0);

fetch_obj_is_finish:


	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_FAST_CONCAT_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;
	zend_string *op1_str, *op2_str, *str;


	op1 = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
	op2 = EX_VAR(opline->op2.var);
	if (((IS_TMP_VAR|IS_VAR) == IS_CONST || EXPECTED(Z_TYPE_P(op1) == IS_STRING)) &&
	    (IS_CV == IS_CONST || EXPECTED(Z_TYPE_P(op2) == IS_STRING))) {
		zend_string *op1_str = Z_STR_P(op1);
		zend_string *op2_str = Z_STR_P(op2);
		zend_string *str;
		uint32_t flags = ZSTR_GET_COPYABLE_CONCAT_PROPERTIES_BOTH(op1_str, op2_str);

		if ((IS_TMP_VAR|IS_VAR) != IS_CONST && UNEXPECTED(ZSTR_LEN(op1_str) == 0)) {
			if (IS_CV == IS_CONST || IS_CV == IS_CV) {
				ZVAL_STR_COPY(EX_VAR(opline->result.var), op2_str);
			} else {
				ZVAL_STR(EX_VAR(opline->result.var), op2_str);
			}
			if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
				zend_string_release_ex(op1_str, 0);
			}
		} else if (IS_CV != IS_CONST && UNEXPECTED(ZSTR_LEN(op2_str) == 0)) {
			if ((IS_TMP_VAR|IS_VAR) == IS_CONST || (IS_TMP_VAR|IS_VAR) == IS_CV) {
				ZVAL_STR_COPY(EX_VAR(opline->result.var), op1_str);
			} else {
				ZVAL_STR(EX_VAR(opline->result.var), op1_str);
			}
			if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
				zend_string_release_ex(op2_str, 0);
			}
		} else if ((IS_TMP_VAR|IS_VAR) != IS_CONST && (IS_TMP_VAR|IS_VAR) != IS_CV &&
		    !ZSTR_IS_INTERNED(op1_str) && GC_REFCOUNT(op1_str) == 1) {
			size_t len = ZSTR_LEN(op1_str);

			str = zend_string_extend(op1_str, len + ZSTR_LEN(op2_str), 0);
			memcpy(ZSTR_VAL(str) + len, ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
			GC_ADD_FLAGS(str, flags);
			ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
			if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
				zend_string_release_ex(op2_str, 0);
			}
		} else {
			str = zend_string_alloc(ZSTR_LEN(op1_str) + ZSTR_LEN(op2_str), 0);
			memcpy(ZSTR_VAL(str), ZSTR_VAL(op1_str), ZSTR_LEN(op1_str));
			memcpy(ZSTR_VAL(str) + ZSTR_LEN(op1_str), ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
			GC_ADD_FLAGS(str, flags);
			ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
			if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
				zend_string_release_ex(op1_str, 0);
			}
			if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
				zend_string_release_ex(op2_str, 0);
			}
		}
		ZEND_VM_NEXT_OPCODE();
	}

	SAVE_OPLINE();
	if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
		op1_str = Z_STR_P(op1);
	} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
		op1_str = zend_string_copy(Z_STR_P(op1));
	} else {
		if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
			ZVAL_UNDEFINED_OP1();
		}
		op1_str = zval_get_string_func(op1);
	}
	if (IS_CV == IS_CONST) {
		op2_str = Z_STR_P(op2);
	} else if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
		op2_str = zend_string_copy(Z_STR_P(op2));
	} else {
		if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(op2) == IS_UNDEF)) {
			ZVAL_UNDEFINED_OP2();
		}
		op2_str = zval_get_string_func(op2);
	}
	do {
		if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
			if (UNEXPECTED(ZSTR_LEN(op1_str) == 0)) {
				if (IS_CV == IS_CONST) {
					if (UNEXPECTED(Z_REFCOUNTED_P(op2))) {
						GC_ADDREF(op2_str);
					}
				}
				ZVAL_STR(EX_VAR(opline->result.var), op2_str);
				zend_string_release_ex(op1_str, 0);
				break;
			}
		}
		if (IS_CV != IS_CONST) {
			if (UNEXPECTED(ZSTR_LEN(op2_str) == 0)) {
				if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
					if (UNEXPECTED(Z_REFCOUNTED_P(op1))) {
						GC_ADDREF(op1_str);
					}
				}
				ZVAL_STR(EX_VAR(opline->result.var), op1_str);
				zend_string_release_ex(op2_str, 0);
				break;
			}
		}
		str = zend_string_alloc(ZSTR_LEN(op1_str) + ZSTR_LEN(op2_str), 0);
		memcpy(ZSTR_VAL(str), ZSTR_VAL(op1_str), ZSTR_LEN(op1_str));
		memcpy(ZSTR_VAL(str) + ZSTR_LEN(op1_str), ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);

		ZSTR_COPY_CONCAT_PROPERTIES_BOTH(str, op1_str, op2_str);
		ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
		if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
			zend_string_release_ex(op1_str, 0);
		}
		if (IS_CV != IS_CONST) {
			zend_string_release_ex(op2_str, 0);
		}
	} while (0);
	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));


	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *function_name;
	zval *object;
	zend_function *fbc;
	zend_class_entry *called_scope;
	zend_object *obj;
	zend_execute_data *call;
	uint32_t call_info;

	SAVE_OPLINE();

	object = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);

	if (IS_CV != IS_CONST) {
		function_name = EX_VAR(opline->op2.var);
	}

	if (IS_CV != IS_CONST &&
	    UNEXPECTED(Z_TYPE_P(function_name) != IS_STRING)) {
		do {
			if ((IS_CV & (IS_VAR|IS_CV)) && Z_ISREF_P(function_name)) {
				function_name = Z_REFVAL_P(function_name);
				if (EXPECTED(Z_TYPE_P(function_name) == IS_STRING)) {
					break;
				}
			} else if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) {
				ZVAL_UNDEFINED_OP2();
				if (UNEXPECTED(EG(exception) != NULL)) {
					zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
					HANDLE_EXCEPTION();
				}
			}
			zend_throw_error(NULL, "Method name must be a string");


			zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
			HANDLE_EXCEPTION();
		} while (0);
	}

	if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED) {
		obj = Z_OBJ_P(object);
	} else {
		do {
			if ((IS_TMP_VAR|IS_VAR) != IS_CONST && EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
				obj = Z_OBJ_P(object);
			} else {
				if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(object))) {
					zend_reference *ref = Z_REF_P(object);

					object = &ref->val;
					if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
						obj = Z_OBJ_P(object);
						if ((IS_TMP_VAR|IS_VAR) & IS_VAR) {
							if (UNEXPECTED(GC_DELREF(ref) == 0)) {
								efree_size(ref, sizeof(zend_reference));
							} else {
								Z_ADDREF_P(object);
							}
						}
						break;
					}
				}
				if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
					object = ZVAL_UNDEFINED_OP1();
					if (UNEXPECTED(EG(exception) != NULL)) {
						if (IS_CV != IS_CONST) {


						}
						HANDLE_EXCEPTION();
					}
				}
				if (IS_CV == IS_CONST) {
					function_name = EX_VAR(opline->op2.var);
				}
				zend_invalid_method_call(object, function_name);


				zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
				HANDLE_EXCEPTION();
			}
		} while (0);
	}

	called_scope = obj->ce;

	if (IS_CV == IS_CONST &&
	    EXPECTED(CACHED_PTR(opline->result.num) == called_scope)) {
		fbc = CACHED_PTR(opline->result.num + sizeof(void*));
	} else {
		zend_object *orig_obj = obj;

		if (IS_CV == IS_CONST) {
			function_name = EX_VAR(opline->op2.var);
		}

		/* First, locate the function. */
		fbc = obj->handlers->get_method(&obj, Z_STR_P(function_name), ((IS_CV == IS_CONST) ? (RT_CONSTANT(opline, opline->op2) + 1) : NULL));
		if (UNEXPECTED(fbc == NULL)) {
			if (EXPECTED(!EG(exception))) {
				zend_undefined_method(orig_obj->ce, Z_STR_P(function_name));
			}


			if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_TMP_VAR)) && GC_DELREF(orig_obj) == 0) {
				zend_objects_store_del(orig_obj);
			}
			HANDLE_EXCEPTION();
		}
		if (IS_CV == IS_CONST &&
		    EXPECTED(!(fbc->common.fn_flags & (ZEND_ACC_CALL_VIA_TRAMPOLINE|ZEND_ACC_NEVER_CACHE))) &&
		    EXPECTED(obj == orig_obj)) {
			CACHE_POLYMORPHIC_PTR(opline->result.num, called_scope, fbc);
		}
		if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_TMP_VAR)) && UNEXPECTED(obj != orig_obj)) {
			GC_ADDREF(obj); /* For $this pointer */
			if (GC_DELREF(orig_obj) == 0) {
				zend_objects_store_del(orig_obj);
			}
		}
		if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!RUN_TIME_CACHE(&fbc->op_array))) {
			init_func_run_time_cache(&fbc->op_array);
		}
	}

	if (IS_CV != IS_CONST) {


	}

	call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_HAS_THIS;
	if (UNEXPECTED((fbc->common.fn_flags & ZEND_ACC_STATIC) != 0)) {
		if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_TMP_VAR)) && GC_DELREF(obj) == 0) {
			zend_objects_store_del(obj);
			if (UNEXPECTED(EG(exception))) {
				HANDLE_EXCEPTION();
			}
		}
		/* call static method */
		obj = (zend_object*)called_scope;
		call_info = ZEND_CALL_NESTED_FUNCTION;
	} else if ((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_TMP_VAR|IS_CV)) {
		if ((IS_TMP_VAR|IS_VAR) == IS_CV) {
			GC_ADDREF(obj); /* For $this pointer */
		}
		/* CV may be changed indirectly (e.g. when it's a reference) */
		call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_HAS_THIS | ZEND_CALL_RELEASE_THIS;
	}

	call = zend_vm_stack_push_call_frame(call_info,
		fbc, opline->extended_value, obj);
	call->prev_execute_data = EX(call);
	EX(call) = call;

	ZEND_VM_NEXT_OPCODE();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_CASE_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;
	double d1, d2;

	op1 = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
	op2 = EX_VAR(opline->op2.var);
	if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
		if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
			if (EXPECTED(Z_LVAL_P(op1) == Z_LVAL_P(op2))) {
case_true:
				ZEND_VM_SMART_BRANCH_TRUE();
			} else {
case_false:
				ZEND_VM_SMART_BRANCH_FALSE();
			}
		} else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
			d1 = (double)Z_LVAL_P(op1);
			d2 = Z_DVAL_P(op2);
			goto case_double;
		}
	} else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) {
		if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
			d1 = Z_DVAL_P(op1);
			d2 = Z_DVAL_P(op2);
case_double:
			if (d1 == d2) {
				goto case_true;
			} else {
				goto case_false;
			}
		} else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
			d1 = Z_DVAL_P(op1);
			d2 = (double)Z_LVAL_P(op2);
			goto case_double;
		}
	} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
		if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
			bool result = zend_fast_equal_strings(Z_STR_P(op1), Z_STR_P(op2));


			if (result) {
				goto case_true;
			} else {
				goto case_false;
			}
		}
	}
	ZEND_VM_DISPATCH_TO_HELPER(zend_case_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_EX op1, op2));
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *container;
	bool result;
	zend_ulong hval;
	zval *offset;

	SAVE_OPLINE();
	container = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
	offset = EX_VAR(opline->op2.var);

	if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
		HashTable *ht;
		zval *value;
		zend_string *str;

isset_dim_obj_array:
		ht = Z_ARRVAL_P(container);
isset_again:
		if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) {
			str = Z_STR_P(offset);
			if (IS_CV != IS_CONST) {
				if (ZEND_HANDLE_NUMERIC(str, hval)) {
					goto num_index_prop;
				}
			}
			value = zend_hash_find_ex(ht, str, IS_CV == IS_CONST);
		} else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
			hval = Z_LVAL_P(offset);
num_index_prop:
			value = zend_hash_index_find(ht, hval);
		} else if ((IS_CV & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(offset))) {
			offset = Z_REFVAL_P(offset);
			goto isset_again;
		} else {
			value = zend_find_array_dim_slow(ht, offset EXECUTE_DATA_CC);
			if (UNEXPECTED(EG(exception))) {
				result = 0;
				goto isset_dim_obj_exit;
			}
		}

		if (!(opline->extended_value & ZEND_ISEMPTY)) {
			/* > IS_NULL means not IS_UNDEF and not IS_NULL */
			result = value != NULL && Z_TYPE_P(value) > IS_NULL &&
			    (!Z_ISREF_P(value) || Z_TYPE_P(Z_REFVAL_P(value)) != IS_NULL);

			if ((IS_TMP_VAR|IS_VAR) & (IS_CONST|IS_CV)) {
				/* avoid exception check */


				ZEND_VM_SMART_BRANCH(result, 0);
			}
		} else {
			result = (value == NULL || !i_zend_is_true(value));
		}
		goto isset_dim_obj_exit;
	} else if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(container))) {
		container = Z_REFVAL_P(container);
		if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
			goto isset_dim_obj_array;
		}
	}

	if (IS_CV == IS_CONST && Z_EXTRA_P(offset) == ZEND_EXTRA_VALUE) {
		offset++;
	}
	if (!(opline->extended_value & ZEND_ISEMPTY)) {
		result = zend_isset_dim_slow(container, offset EXECUTE_DATA_CC);
	} else {
		result = zend_isempty_dim_slow(container, offset EXECUTE_DATA_CC);
	}

isset_dim_obj_exit:


	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
	ZEND_VM_SMART_BRANCH(result, 1);
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *container;
	int result;
	zval *offset;
	zend_string *name, *tmp_name;

	SAVE_OPLINE();
	container = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
	offset = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);

	if ((IS_TMP_VAR|IS_VAR) == IS_CONST ||
	    ((IS_TMP_VAR|IS_VAR) != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
		if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
			container = Z_REFVAL_P(container);
			if (UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT)) {
				result = (opline->extended_value & ZEND_ISEMPTY);
				goto isset_object_finish;
			}
		} else {
			result = (opline->extended_value & ZEND_ISEMPTY);
			goto isset_object_finish;
		}
	}

	if (IS_CV == IS_CONST) {
		name = Z_STR_P(offset);
	} else {
		name = zval_try_get_tmp_string(offset, &tmp_name);
		if (UNEXPECTED(!name)) {
			result = 0;
			goto isset_object_finish;
		}
	}

	result =
		(opline->extended_value & ZEND_ISEMPTY) ^
		Z_OBJ_HT_P(container)->has_property(Z_OBJ_P(container), name, (opline->extended_value & ZEND_ISEMPTY), ((IS_CV == IS_CONST) ? CACHE_ADDR(opline->extended_value & ~ZEND_ISEMPTY) : NULL));

	if (IS_CV != IS_CONST) {
		zend_tmp_string_release(tmp_name);
	}

isset_object_finish:


	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
	ZEND_VM_SMART_BRANCH(result, 1);
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_ARRAY_KEY_EXISTS_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE

	zval *key, *subject;
	HashTable *ht;
	bool result;

	SAVE_OPLINE();

	key = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
	subject = EX_VAR(opline->op2.var);

	if (EXPECTED(Z_TYPE_P(subject) == IS_ARRAY)) {
array_key_exists_array:
		ht = Z_ARRVAL_P(subject);
		result = zend_array_key_exists_fast(ht, key OPLINE_CC EXECUTE_DATA_CC);
	} else {
		if ((IS_CV & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(subject))) {
			subject = Z_REFVAL_P(subject);
			if (EXPECTED(Z_TYPE_P(subject) == IS_ARRAY)) {
				goto array_key_exists_array;
			}
		}
		zend_array_key_exists_error(subject, key OPLINE_CC EXECUTE_DATA_CC);
		result = 0;
	}


	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
	ZEND_VM_SMART_BRANCH(result, 1);
}

static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_RETURN_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *retval_ptr;
	zval *return_value;


	retval_ptr = _get_zval_ptr_tmp(opline->op1.var EXECUTE_DATA_CC);
	return_value = EX(return_value);


	if (IS_TMP_VAR == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(retval_ptr) == IS_UNDEF)) {
		SAVE_OPLINE();
		retval_ptr = ZVAL_UNDEFINED_OP1();
		if (return_value) {
			ZVAL_NULL(return_value);
		}
	} else if (!return_value) {
		if (IS_TMP_VAR & (IS_VAR|IS_TMP_VAR)) {
			if (Z_REFCOUNTED_P(retval_ptr) && !Z_DELREF_P(retval_ptr)) {
				SAVE_OPLINE();
				rc_dtor_func(Z_COUNTED_P(retval_ptr));
			}
		}
	} else {
		if ((IS_TMP_VAR & (IS_CONST|IS_TMP_VAR))) {
			ZVAL_COPY_VALUE(return_value, retval_ptr);
			if (IS_TMP_VAR == IS_CONST) {
				if (UNEXPECTED(Z_OPT_REFCOUNTED_P(return_value))) {
					Z_ADDREF_P(return_value);
				}
			}
		} else if (IS_TMP_VAR == IS_CV) {
			do {
				if (Z_OPT_REFCOUNTED_P(retval_ptr)) {
					if (EXPECTED(!Z_OPT_ISREF_P(retval_ptr))) {
						if (EXPECTED(!(EX_CALL_INFO() & (ZEND_CALL_CODE|ZEND_CALL_OBSERVED)))) {
							zend_refcounted *ref = Z_COUNTED_P(retval_ptr);
							ZVAL_COPY_VALUE(return_value, retval_ptr);
							if (GC_MAY_LEAK(ref)) {
								SAVE_OPLINE();
								gc_possible_root(ref);
							}
							ZVAL_NULL(retval_ptr);
							break;
						} else {
							Z_ADDREF_P(retval_ptr);
						}
					} else {
						retval_ptr = Z_REFVAL_P(retval_ptr);
						if (Z_OPT_REFCOUNTED_P(retval_ptr)) {
							Z_ADDREF_P(retval_ptr);
						}
					}
				}
				ZVAL_COPY_VALUE(return_value, retval_ptr);
			} while (0);
		} else /* if (IS_TMP_VAR == IS_VAR) */ {
			if (UNEXPECTED(Z_ISREF_P(retval_ptr))) {
				zend_refcounted *ref = Z_COUNTED_P(retval_ptr);

				retval_ptr = Z_REFVAL_P(retval_ptr);
				ZVAL_COPY_VALUE(return_value, retval_ptr);
				if (UNEXPECTED(GC_DELREF(ref) == 0)) {
					efree_size(ref, sizeof(zend_reference));
				} else if (Z_OPT_REFCOUNTED_P(retval_ptr)) {
					Z_ADDREF_P(retval_ptr);
				}
			} else {
				ZVAL_COPY_VALUE(return_value, retval_ptr);
			}
		}
	}






	ZEND_VM_TAIL_CALL(zend_leave_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_RETURN_BY_REF_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *retval_ptr;
	zval *return_value;


	SAVE_OPLINE();

	return_value = EX(return_value);


	do {
		if ((IS_TMP_VAR & (IS_CONST|IS_TMP_VAR)) ||
		    (IS_TMP_VAR == IS_VAR && opline->extended_value == ZEND_RETURNS_VALUE)) {
			/* Not supposed to happen, but we'll allow it */
			zend_error(E_NOTICE, "Only variable references should be returned by reference");

			retval_ptr = _get_zval_ptr_tmp(opline->op1.var EXECUTE_DATA_CC);
			if (!return_value) {
				zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
			} else {
				if (IS_TMP_VAR == IS_VAR && UNEXPECTED(Z_ISREF_P(retval_ptr))) {
					ZVAL_COPY_VALUE(return_value, retval_ptr);
					break;
				}

				ZVAL_NEW_REF(return_value, retval_ptr);
				if (IS_TMP_VAR == IS_CONST) {
					Z_TRY_ADDREF_P(retval_ptr);
				}
			}
			break;
		}

		retval_ptr = zend_get_bad_ptr();

		if (IS_TMP_VAR == IS_VAR) {
			ZEND_ASSERT(retval_ptr != &EG(uninitialized_zval));
			if (opline->extended_value == ZEND_RETURNS_FUNCTION && !Z_ISREF_P(retval_ptr)) {
				zend_error(E_NOTICE, "Only variable references should be returned by reference");
				if (return_value) {
					ZVAL_NEW_REF(return_value, retval_ptr);
				} else {
					zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
				}
				break;
			}
		}

		if (return_value) {
			if (Z_ISREF_P(retval_ptr)) {
				Z_ADDREF_P(retval_ptr);
			} else {
				ZVAL_MAKE_REF_EX(retval_ptr, 2);
			}
			ZVAL_REF(return_value, Z_REF_P(retval_ptr));
		}

		zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
	} while (0);




	ZEND_VM_TAIL_CALL(zend_leave_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_GENERATOR_RETURN_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *retval;

	zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C);

	SAVE_OPLINE();
	retval = _get_zval_ptr_tmp(opline->op1.var EXECUTE_DATA_CC);

	/* Copy return value into generator->retval */
	if ((IS_TMP_VAR & (IS_CONST|IS_TMP_VAR))) {
		ZVAL_COPY_VALUE(&generator->retval, retval);
		if (IS_TMP_VAR == IS_CONST) {
			if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->retval))) {
				Z_ADDREF(generator->retval);
			}
		}
	} else if (IS_TMP_VAR == IS_CV) {
		ZVAL_COPY_DEREF(&generator->retval, retval);
	} else /* if (IS_TMP_VAR == IS_VAR) */ {
		if (UNEXPECTED(Z_ISREF_P(retval))) {
			zend_refcounted *ref = Z_COUNTED_P(retval);

			retval = Z_REFVAL_P(retval);
			ZVAL_COPY_VALUE(&generator->retval, retval);
			if (UNEXPECTED(GC_DELREF(ref) == 0)) {
				efree_size(ref, sizeof(zend_reference));
			} else if (Z_OPT_REFCOUNTED_P(retval)) {
				Z_ADDREF_P(retval);
			}
		} else {
			ZVAL_COPY_VALUE(&generator->retval, retval);
		}
	}


	EG(current_execute_data) = EX(prev_execute_data);

	/* Close the generator to free up resources */
	zend_generator_close(generator, 1);

	/* Pass execution back to handling code */
	ZEND_VM_RETURN();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_SEND_USER_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *arg, *param;

	SAVE_OPLINE();

	arg = _get_zval_ptr_tmp(opline->op1.var EXECUTE_DATA_CC);
	param = ZEND_CALL_VAR(EX(call), opline->result.var);
	if (UNEXPECTED(ARG_MUST_BE_SENT_BY_REF(EX(call)->func, opline->op2.num))) {
		zend_param_must_be_ref(EX(call)->func, opline->op2.num);
		Z_TRY_ADDREF_P(arg);
		ZVAL_NEW_REF(param, arg);
	} else {
		ZVAL_COPY(param, arg);
	}

	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_CAST_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *expr;
	zval *result = EX_VAR(opline->result.var);

	SAVE_OPLINE();
	expr = _get_zval_ptr_tmp(opline->op1.var EXECUTE_DATA_CC);

	switch (opline->extended_value) {
		case IS_LONG:
			ZVAL_LONG(result, zval_get_long(expr));
			break;
		case IS_DOUBLE:
			ZVAL_DOUBLE(result, zval_get_double(expr));
			break;
		case IS_STRING:
			ZVAL_STR(result, zval_get_string(expr));
			break;
		default:
			ZEND_ASSERT(opline->extended_value != _IS_BOOL && "Must use ZEND_BOOL instead");
			if (IS_TMP_VAR & (IS_VAR|IS_CV)) {
				ZVAL_DEREF(expr);
			}
			/* If value is already of correct type, return it directly */
			if (Z_TYPE_P(expr) == opline->extended_value) {
				ZVAL_COPY_VALUE(result, expr);
				if (IS_TMP_VAR == IS_CONST) {
					if (UNEXPECTED(Z_OPT_REFCOUNTED_P(result))) Z_ADDREF_P(result);
				} else if (IS_TMP_VAR != IS_TMP_VAR) {
					if (Z_OPT_REFCOUNTED_P(result)) Z_ADDREF_P(result);
				}


				ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
			}

			if (opline->extended_value == IS_ARRAY) {
				zend_cast_zval_to_array(result, expr, IS_TMP_VAR);
			} else {
				ZEND_ASSERT(opline->extended_value == IS_OBJECT);
				zend_cast_zval_to_object(result, expr, IS_TMP_VAR);
			}
	}

	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_FE_RESET_R_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *array_ptr, *result;

	SAVE_OPLINE();

	array_ptr = _get_zval_ptr_tmp(opline->op1.var EXECUTE_DATA_CC);
	if (EXPECTED(Z_TYPE_P(array_ptr) == IS_ARRAY)) {
		result = EX_VAR(opline->result.var);
		ZVAL_COPY_VALUE(result, array_ptr);
		if (IS_TMP_VAR != IS_TMP_VAR && Z_OPT_REFCOUNTED_P(result)) {
			Z_ADDREF_P(array_ptr);
		}
		Z_FE_POS_P(result) = 0;


		ZEND_VM_NEXT_OPCODE();
	} else if (IS_TMP_VAR != IS_CONST && EXPECTED(Z_TYPE_P(array_ptr) == IS_OBJECT)) {
		zend_object *zobj = Z_OBJ_P(array_ptr);
		if (!zobj->ce->get_iterator) {
			if (UNEXPECTED(zend_object_is_lazy(zobj))) {
				zobj = zend_lazy_object_init(zobj);
				if (UNEXPECTED(EG(exception))) {
					UNDEF_RESULT();


					HANDLE_EXCEPTION();
				}
			}
			HashTable *properties = zobj->properties;
			if (properties) {
				if (UNEXPECTED(GC_REFCOUNT(properties) > 1)) {
					if (EXPECTED(!(GC_FLAGS(properties) & IS_ARRAY_IMMUTABLE))) {
						GC_DELREF(properties);
					}
					properties = zobj->properties = zend_array_dup(properties);
				}
			} else {
				properties = zobj->handlers->get_properties(zobj);
			}

			result = EX_VAR(opline->result.var);
			ZVAL_COPY_VALUE(result, array_ptr);
			if (IS_TMP_VAR != IS_TMP_VAR) {
				Z_ADDREF_P(array_ptr);
			}

			if (zend_hash_num_elements(properties) == 0) {
				Z_FE_ITER_P(result) = (uint32_t) -1;


				ZEND_VM_JMP(OP_JMP_ADDR(opline, opline->op2));
			}

			Z_FE_ITER_P(result) = zend_hash_iterator_add(properties, 0);


			ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
		} else {
			bool is_empty = zend_fe_reset_iterator(array_ptr, 0 OPLINE_CC EXECUTE_DATA_CC);

			zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
			if (UNEXPECTED(EG(exception))) {
				HANDLE_EXCEPTION();
			} else if (is_empty) {
				ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0);
			} else {
				ZEND_VM_NEXT_OPCODE();
			}
		}
	} else {
		zend_error(E_WARNING, "foreach() argument must be of type array|object, %s given", zend_zval_value_name(array_ptr));
		ZVAL_UNDEF(EX_VAR(opline->result.var));
		Z_FE_ITER_P(EX_VAR(opline->result.var)) = (uint32_t)-1;
		zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
		ZEND_VM_JMP(OP_JMP_ADDR(opline, opline->op2));
	}
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_FE_RESET_RW_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *array_ptr, *array_ref;

	SAVE_OPLINE();

	if (IS_TMP_VAR == IS_VAR || IS_TMP_VAR == IS_CV) {
		array_ref = array_ptr = zend_get_bad_ptr();
		if (Z_ISREF_P(array_ref)) {
			array_ptr = Z_REFVAL_P(array_ref);
		}
	} else {
		array_ref = array_ptr = _get_zval_ptr_tmp(opline->op1.var EXECUTE_DATA_CC);
	}

	if (EXPECTED(Z_TYPE_P(array_ptr) == IS_ARRAY)) {
		if (IS_TMP_VAR == IS_VAR || IS_TMP_VAR == IS_CV) {
			if (array_ptr == array_ref) {
				ZVAL_NEW_REF(array_ref, array_ref);
				array_ptr = Z_REFVAL_P(array_ref);
			}
			Z_ADDREF_P(array_ref);
			ZVAL_COPY_VALUE(EX_VAR(opline->result.var), array_ref);
		} else {
			array_ref = EX_VAR(opline->result.var);
			ZVAL_NEW_REF(array_ref, array_ptr);
			array_ptr = Z_REFVAL_P(array_ref);
		}
		if (IS_TMP_VAR == IS_CONST) {
			ZVAL_ARR(array_ptr, zend_array_dup(Z_ARRVAL_P(array_ptr)));
		} else {
			SEPARATE_ARRAY(array_ptr);
		}
		Z_FE_ITER_P(EX_VAR(opline->result.var)) = zend_hash_iterator_add(Z_ARRVAL_P(array_ptr), 0);


		ZEND_VM_NEXT_OPCODE();
	} else if (IS_TMP_VAR != IS_CONST && EXPECTED(Z_TYPE_P(array_ptr) == IS_OBJECT)) {
		if (!Z_OBJCE_P(array_ptr)->get_iterator) {
			zend_object *zobj = Z_OBJ_P(array_ptr);
			HashTable *properties;
			if (UNEXPECTED(zend_object_is_lazy(zobj))) {
				zobj = zend_lazy_object_init(zobj);
				if (UNEXPECTED(EG(exception))) {
					UNDEF_RESULT();


					HANDLE_EXCEPTION();
				}
			}
			if (IS_TMP_VAR == IS_VAR || IS_TMP_VAR == IS_CV) {
				if (array_ptr == array_ref) {
					ZVAL_NEW_REF(array_ref, array_ref);
					array_ptr = Z_REFVAL_P(array_ref);
				}
				Z_ADDREF_P(array_ref);
				ZVAL_COPY_VALUE(EX_VAR(opline->result.var), array_ref);
			} else {
				array_ptr = EX_VAR(opline->result.var);
				ZVAL_COPY_VALUE(array_ptr, array_ref);
			}
			if (Z_OBJ_P(array_ptr)->properties
			 && UNEXPECTED(GC_REFCOUNT(Z_OBJ_P(array_ptr)->properties) > 1)) {
				if (EXPECTED(!(GC_FLAGS(Z_OBJ_P(array_ptr)->properties) & IS_ARRAY_IMMUTABLE))) {
					GC_DELREF(Z_OBJ_P(array_ptr)->properties);
				}
				Z_OBJ_P(array_ptr)->properties = zend_array_dup(Z_OBJ_P(array_ptr)->properties);
			}

			properties = Z_OBJPROP_P(array_ptr);
			if (zend_hash_num_elements(properties) == 0) {
				Z_FE_ITER_P(EX_VAR(opline->result.var)) = (uint32_t) -1;


				ZEND_VM_JMP(OP_JMP_ADDR(opline, opline->op2));
			}

			Z_FE_ITER_P(EX_VAR(opline->result.var)) = zend_hash_iterator_add(properties, 0);


			ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
		} else {
			bool is_empty = zend_fe_reset_iterator(array_ptr, 1 OPLINE_CC EXECUTE_DATA_CC);
			zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
			if (UNEXPECTED(EG(exception))) {
				HANDLE_EXCEPTION();
			} else if (is_empty) {
				ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0);
			} else {
				ZEND_VM_NEXT_OPCODE();
			}
		}
	} else {
		zend_error(E_WARNING, "foreach() argument must be of type array|object, %s given", zend_zval_value_name(array_ptr));
		ZVAL_UNDEF(EX_VAR(opline->result.var));
		Z_FE_ITER_P(EX_VAR(opline->result.var)) = (uint32_t)-1;
		zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
		ZEND_VM_JMP(OP_JMP_ADDR(opline, opline->op2));
	}
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_END_SILENCE_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE

	if (E_HAS_ONLY_FATAL_ERRORS(EG(error_reporting))
			&& !E_HAS_ONLY_FATAL_ERRORS(Z_LVAL_P(EX_VAR(opline->op1.var)))) {
		EG(error_reporting) = Z_LVAL_P(EX_VAR(opline->op1.var));
	}
	ZEND_VM_NEXT_OPCODE();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_JMP_SET_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *value;
	zend_reference *ref = NULL;
	bool ret;

	SAVE_OPLINE();
	value = _get_zval_ptr_tmp(opline->op1.var EXECUTE_DATA_CC);

	if ((IS_TMP_VAR == IS_VAR || IS_TMP_VAR == IS_CV) && Z_ISREF_P(value)) {
		if (IS_TMP_VAR == IS_VAR) {
			ref = Z_REF_P(value);
		}
		value = Z_REFVAL_P(value);
	}

	ret = i_zend_is_true(value);

	if (UNEXPECTED(EG(exception))) {
		zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
		ZVAL_UNDEF(EX_VAR(opline->result.var));
		HANDLE_EXCEPTION();
	}

	if (ret) {
		zval *result = EX_VAR(opline->result.var);

		ZVAL_COPY_VALUE(result, value);
		if (IS_TMP_VAR == IS_CONST) {
			if (UNEXPECTED(Z_OPT_REFCOUNTED_P(result))) Z_ADDREF_P(result);
		} else if (IS_TMP_VAR == IS_CV) {
			if (Z_OPT_REFCOUNTED_P(result)) Z_ADDREF_P(result);
		} else if (IS_TMP_VAR == IS_VAR && ref) {
			if (UNEXPECTED(GC_DELREF(ref) == 0)) {
				efree_size(ref, sizeof(zend_reference));
			} else if (Z_OPT_REFCOUNTED_P(result)) {
				Z_ADDREF_P(result);
			}
		}
		ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0);
	}

	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
	ZEND_VM_NEXT_OPCODE();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_COALESCE_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *value;
	zend_reference *ref = NULL;

	SAVE_OPLINE();
	value = _get_zval_ptr_tmp(opline->op1.var EXECUTE_DATA_CC);

	if ((IS_TMP_VAR & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) {
		if (IS_TMP_VAR & IS_VAR) {
			ref = Z_REF_P(value);
		}
		value = Z_REFVAL_P(value);
	}

	if (Z_TYPE_P(value) > IS_NULL) {
		zval *result = EX_VAR(opline->result.var);
		ZVAL_COPY_VALUE(result, value);
		if (IS_TMP_VAR == IS_CONST) {
			if (UNEXPECTED(Z_OPT_REFCOUNTED_P(result))) Z_ADDREF_P(result);
		} else if (IS_TMP_VAR == IS_CV) {
			if (Z_OPT_REFCOUNTED_P(result)) Z_ADDREF_P(result);
		} else if ((IS_TMP_VAR & IS_VAR) && ref) {
			if (UNEXPECTED(GC_DELREF(ref) == 0)) {
				efree_size(ref, sizeof(zend_reference));
			} else if (Z_OPT_REFCOUNTED_P(result)) {
				Z_ADDREF_P(result);
			}
		}
		ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0);
	}

	if ((IS_TMP_VAR & IS_VAR) && ref) {
		if (UNEXPECTED(GC_DELREF(ref) == 0)) {
			efree_size(ref, sizeof(zend_reference));
		}
	}
	ZEND_VM_NEXT_OPCODE();
}

static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_JMP_NULL_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *val, *result;

	val = _get_zval_ptr_tmp(opline->op1.var EXECUTE_DATA_CC);

	if (Z_TYPE_P(val) > IS_NULL) {
		do {
			if ((IS_TMP_VAR == IS_CV || IS_TMP_VAR == IS_VAR) && Z_TYPE_P(val) == IS_REFERENCE) {
				val = Z_REFVAL_P(val);
				if (Z_TYPE_P(val) <= IS_NULL) {
					zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
					break;
				}
			}
			ZEND_VM_NEXT_OPCODE();
		} while (0);
	}

	result = EX_VAR(opline->result.var);
	uint32_t short_circuiting_type = opline->extended_value & ZEND_SHORT_CIRCUITING_CHAIN_MASK;
	if (EXPECTED(short_circuiting_type == ZEND_SHORT_CIRCUITING_CHAIN_EXPR)) {
		ZVAL_NULL(result);
		if (IS_TMP_VAR == IS_CV
			&& UNEXPECTED(Z_TYPE_P(val) == IS_UNDEF)
			&& (opline->extended_value & ZEND_JMP_NULL_BP_VAR_IS) == 0
		) {
			SAVE_OPLINE();
			ZVAL_UNDEFINED_OP1();
			if (UNEXPECTED(EG(exception) != NULL)) {
				HANDLE_EXCEPTION();
			}
		}
	} else if (short_circuiting_type == ZEND_SHORT_CIRCUITING_CHAIN_ISSET) {
		ZVAL_FALSE(result);
	} else {
		ZEND_ASSERT(short_circuiting_type == ZEND_SHORT_CIRCUITING_CHAIN_EMPTY);
		ZVAL_TRUE(result);
	}

	ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0);
}

static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_QM_ASSIGN_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *value;
	zval *result = EX_VAR(opline->result.var);

	value = _get_zval_ptr_tmp(opline->op1.var EXECUTE_DATA_CC);
	if (IS_TMP_VAR == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
		SAVE_OPLINE();
		ZVAL_UNDEFINED_OP1();
		ZVAL_NULL(result);
		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
	}

	if (IS_TMP_VAR == IS_CV) {
		ZVAL_COPY_DEREF(result, value);
	} else if (IS_TMP_VAR == IS_VAR) {
		if (UNEXPECTED(Z_ISREF_P(value))) {
			ZVAL_COPY_VALUE(result, Z_REFVAL_P(value));
			if (UNEXPECTED(Z_DELREF_P(value) == 0)) {
				efree_size(Z_REF_P(value), sizeof(zend_reference));
			} else if (Z_OPT_REFCOUNTED_P(result)) {
				Z_ADDREF_P(result);
			}
		} else {
			ZVAL_COPY_VALUE(result, value);
		}
	} else {
		ZVAL_COPY_VALUE(result, value);
		if (IS_TMP_VAR == IS_CONST) {
			if (UNEXPECTED(Z_OPT_REFCOUNTED_P(result))) {
				Z_ADDREF_P(result);
			}
		}
	}
	ZEND_VM_NEXT_OPCODE();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_IS_IDENTICAL_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;
	bool result;

	SAVE_OPLINE();
	op1 = _get_zval_ptr_tmp(opline->op1.var EXECUTE_DATA_CC);
	op2 = RT_CONSTANT(opline, opline->op2);
	result = fast_is_identical_function(op1, op2);
	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));


	ZEND_VM_SMART_BRANCH(result, 1);
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_CASE_STRICT_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;
	bool result;

	SAVE_OPLINE();
	op1 = _get_zval_ptr_tmp(opline->op1.var EXECUTE_DATA_CC);
	op2 = RT_CONSTANT(opline, opline->op2);
	result = fast_is_identical_function(op1, op2);


	ZEND_VM_SMART_BRANCH(result, 1);
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_IS_NOT_IDENTICAL_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;
	bool result;

	SAVE_OPLINE();
	op1 = _get_zval_ptr_tmp(opline->op1.var EXECUTE_DATA_CC);
	op2 = RT_CONSTANT(opline, opline->op2);
	result = fast_is_not_identical_function(op1, op2);
	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));


	ZEND_VM_SMART_BRANCH(result, 1);
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_FETCH_DIM_FUNC_ARG_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
#if 0
	USE_OPLINE
#endif

	if (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) {
		if ((IS_TMP_VAR & (IS_CONST|IS_TMP_VAR))) {
			ZEND_VM_TAIL_CALL(zend_use_tmp_in_write_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
		}
		ZEND_VM_TAIL_CALL(ZEND_NULL_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
	} else {
		if (IS_CONST == IS_UNUSED) {
			ZEND_VM_TAIL_CALL(zend_use_undef_in_read_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
		}
		ZEND_VM_TAIL_CALL(ZEND_FETCH_DIM_R_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
	}
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_FETCH_OBJ_FUNC_ARG_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
#if 0
	USE_OPLINE
#endif

	if (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) {
		/* Behave like FETCH_OBJ_W */
		if ((IS_TMP_VAR & (IS_CONST|IS_TMP_VAR))) {
			ZEND_VM_TAIL_CALL(zend_use_tmp_in_write_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
		}
		ZEND_VM_TAIL_CALL(ZEND_NULL_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
	} else {
		ZEND_VM_TAIL_CALL(ZEND_FETCH_OBJ_R_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
	}
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_ROPE_ADD_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zend_string **rope;
	zval *var;

	/* op1 and result are the same */
	rope = (zend_string**)EX_VAR(opline->op1.var);
	if (IS_CONST == IS_CONST) {
		var = RT_CONSTANT(opline, opline->op2);
		rope[opline->extended_value] = Z_STR_P(var);
		if (UNEXPECTED(Z_REFCOUNTED_P(var))) {
			Z_ADDREF_P(var);
		}
	} else {
		var = RT_CONSTANT(opline, opline->op2);
		if (EXPECTED(Z_TYPE_P(var) == IS_STRING)) {
			if (IS_CONST == IS_CV) {
				rope[opline->extended_value] = zend_string_copy(Z_STR_P(var));
			} else {
				rope[opline->extended_value] = Z_STR_P(var);
			}
		} else {
			SAVE_OPLINE();
			if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(var) == IS_UNDEF)) {
				ZVAL_UNDEFINED_OP2();
			}
			rope[opline->extended_value] = zval_get_string_func(var);


			ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
		}
	}
	ZEND_VM_NEXT_OPCODE();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_ROPE_END_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zend_string **rope;
	zval *var, *ret;
	uint32_t i;

	rope = (zend_string**)EX_VAR(opline->op1.var);
	if (IS_CONST == IS_CONST) {
		var = RT_CONSTANT(opline, opline->op2);
		rope[opline->extended_value] = Z_STR_P(var);
		if (UNEXPECTED(Z_REFCOUNTED_P(var))) {
			Z_ADDREF_P(var);
		}
	} else {
		var = RT_CONSTANT(opline, opline->op2);
		if (EXPECTED(Z_TYPE_P(var) == IS_STRING)) {
			if (IS_CONST == IS_CV) {
				rope[opline->extended_value] = zend_string_copy(Z_STR_P(var));
			} else {
				rope[opline->extended_value] = Z_STR_P(var);
			}
		} else {
			SAVE_OPLINE();
			if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(var) == IS_UNDEF)) {
				ZVAL_UNDEFINED_OP2();
			}
			rope[opline->extended_value] = zval_get_string_func(var);


			if (UNEXPECTED(EG(exception))) {
				for (i = 0; i <= opline->extended_value; i++) {
					zend_string_release_ex(rope[i], 0);
				}
				ZVAL_UNDEF(EX_VAR(opline->result.var));
				HANDLE_EXCEPTION();
			}
		}
	}

	size_t len = 0;
	uint32_t flags = ZSTR_COPYABLE_CONCAT_PROPERTIES;
	for (i = 0; i <= opline->extended_value; i++) {
		flags &= ZSTR_GET_COPYABLE_CONCAT_PROPERTIES(rope[i]);
		len += ZSTR_LEN(rope[i]);
	}
	ret = EX_VAR(opline->result.var);
	ZVAL_STR(ret, zend_string_alloc(len, 0));
	GC_ADD_FLAGS(Z_STR_P(ret), flags);

	char *target = Z_STRVAL_P(ret);
	for (i = 0; i <= opline->extended_value; i++) {
		memcpy(target, ZSTR_VAL(rope[i]), ZSTR_LEN(rope[i]));
		target += ZSTR_LEN(rope[i]);
		zend_string_release_ex(rope[i], 0);
	}
	*target = '\0';

	ZEND_VM_NEXT_OPCODE();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_SEND_VAL_EX_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *value, *arg;
	uint32_t arg_num;

	if (IS_CONST == IS_CONST) {
		SAVE_OPLINE();
		zend_string *arg_name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
		arg = zend_handle_named_arg(&EX(call), arg_name, &arg_num, CACHE_ADDR(opline->result.num));
		if (UNEXPECTED(!arg)) {
			zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
			HANDLE_EXCEPTION();
		}
	} else {
		arg = ZEND_CALL_VAR(EX(call), opline->result.var);
		arg_num = opline->op2.num;
	}

	if (EXPECTED(arg_num <= MAX_ARG_FLAG_NUM)) {
		if (QUICK_ARG_MUST_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
			goto send_val_by_ref;
		}
	} else if (ARG_MUST_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
send_val_by_ref:;
		ZEND_VM_DISPATCH_TO_HELPER(zend_cannot_pass_by_ref_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_EX arg_num, arg));
	}
	value = _get_zval_ptr_tmp(opline->op1.var EXECUTE_DATA_CC);
	ZVAL_COPY_VALUE(arg, value);
	if (IS_TMP_VAR == IS_CONST) {
		if (UNEXPECTED(Z_OPT_REFCOUNTED_P(arg))) {
			Z_ADDREF_P(arg);
		}
	}
	ZEND_VM_NEXT_OPCODE();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *expr_ptr, new_expr;

	SAVE_OPLINE();
	if ((IS_TMP_VAR == IS_VAR || IS_TMP_VAR == IS_CV) &&
	    UNEXPECTED(opline->extended_value & ZEND_ARRAY_ELEMENT_REF)) {
		expr_ptr = zend_get_bad_ptr();
		if (Z_ISREF_P(expr_ptr)) {
			Z_ADDREF_P(expr_ptr);
		} else {
			ZVAL_MAKE_REF_EX(expr_ptr, 2);
		}
		zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
	} else {
		expr_ptr = _get_zval_ptr_tmp(opline->op1.var EXECUTE_DATA_CC);
		if (IS_TMP_VAR == IS_TMP_VAR) {
			/* pass */
		} else if (IS_TMP_VAR == IS_CONST) {
			Z_TRY_ADDREF_P(expr_ptr);
		} else if (IS_TMP_VAR == IS_CV) {
			ZVAL_DEREF(expr_ptr);
			Z_TRY_ADDREF_P(expr_ptr);
		} else /* if (IS_TMP_VAR == IS_VAR) */ {
			if (UNEXPECTED(Z_ISREF_P(expr_ptr))) {
				zend_refcounted *ref = Z_COUNTED_P(expr_ptr);

				expr_ptr = Z_REFVAL_P(expr_ptr);
				if (UNEXPECTED(GC_DELREF(ref) == 0)) {
					ZVAL_COPY_VALUE(&new_expr, expr_ptr);
					expr_ptr = &new_expr;
					efree_size(ref, sizeof(zend_reference));
				} else if (Z_OPT_REFCOUNTED_P(expr_ptr)) {
					Z_ADDREF_P(expr_ptr);
				}
			}
		}
	}

	if (IS_CONST != IS_UNUSED) {
		zval *offset = RT_CONSTANT(opline, opline->op2);
		zend_string *str;
		zend_ulong hval;

add_again:
		if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) {
			str = Z_STR_P(offset);
			if (IS_CONST != IS_CONST) {
				if (ZEND_HANDLE_NUMERIC(str, hval)) {
					goto num_index;
				}
			}
str_index:
			zend_hash_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), str, expr_ptr);
		} else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
			hval = Z_LVAL_P(offset);
num_index:
			zend_hash_index_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), hval, expr_ptr);
		} else if ((IS_CONST & (IS_VAR|IS_CV)) && EXPECTED(Z_TYPE_P(offset) == IS_REFERENCE)) {
			offset = Z_REFVAL_P(offset);
			goto add_again;
		} else if (UNEXPECTED(Z_TYPE_P(offset) == IS_NULL)) {
			zval tmp;
			if (IS_TMP_VAR == IS_CV || IS_TMP_VAR == IS_VAR) {
				ZVAL_COPY(&tmp, expr_ptr);
			}
			zend_error(E_DEPRECATED, "Using null as an array offset is deprecated, use an empty string instead");
			if (IS_TMP_VAR == IS_CV || IS_TMP_VAR == IS_VAR) {
				/* A userland error handler can do funky things to the expression, so reset it */
				zval_ptr_dtor(expr_ptr);
				ZVAL_COPY_VALUE(expr_ptr, &tmp);
			}
			if (UNEXPECTED(EG(exception))) {
				zval_ptr_dtor_nogc(expr_ptr);
				HANDLE_EXCEPTION();
			}
			str = ZSTR_EMPTY_ALLOC();
			goto str_index;
		} else if (Z_TYPE_P(offset) == IS_DOUBLE) {
			hval = zend_dval_to_lval_safe(Z_DVAL_P(offset));
			goto num_index;
		} else if (Z_TYPE_P(offset) == IS_FALSE) {
			hval = 0;
			goto num_index;
		} else if (Z_TYPE_P(offset) == IS_TRUE) {
			hval = 1;
			goto num_index;
		} else if (Z_TYPE_P(offset) == IS_RESOURCE) {
			zend_use_resource_as_offset(offset);
			hval = Z_RES_HANDLE_P(offset);
			goto num_index;
		} else if (IS_CONST == IS_CV && Z_TYPE_P(offset) == IS_UNDEF) {
			ZVAL_UNDEFINED_OP2();
			str = ZSTR_EMPTY_ALLOC();
			goto str_index;
		} else {
			zend_illegal_array_offset_access(offset);
			zval_ptr_dtor_nogc(expr_ptr);
		}


	} else {
		if (!zend_hash_next_index_insert(Z_ARRVAL_P(EX_VAR(opline->result.var)), expr_ptr)) {
			zend_cannot_add_element();
			zval_ptr_dtor_nogc(expr_ptr);
		}
	}
	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_INIT_ARRAY_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	zval *array;
	uint32_t size;
	USE_OPLINE

	SAVE_OPLINE();
	array = EX_VAR(opline->result.var);
	if (IS_TMP_VAR != IS_UNUSED) {
		size = opline->extended_value >> ZEND_ARRAY_SIZE_SHIFT;
		ZVAL_ARR(array, zend_new_array(size));
		/* Explicitly initialize array as not-packed if flag is set */
		if (opline->extended_value & ZEND_ARRAY_NOT_PACKED) {
			zend_hash_real_init_mixed(Z_ARRVAL_P(array));
		}
		ZEND_VM_TAIL_CALL(ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
	} else {
		ZVAL_ARR(array, zend_new_array(0));
		ZEND_VM_NEXT_OPCODE();
	}
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_YIELD_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE

	zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C);

	SAVE_OPLINE();
	if (UNEXPECTED(generator->flags & ZEND_GENERATOR_FORCED_CLOSE)) {
		ZEND_VM_TAIL_CALL(zend_yield_in_closed_generator_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
	}

	/* Destroy the previously yielded value */
	zval_ptr_dtor(&generator->value);

	/* Destroy the previously yielded key */
	zval_ptr_dtor(&generator->key);

	/* Set the new yielded value */
	if (IS_TMP_VAR != IS_UNUSED) {
		if (UNEXPECTED(EX(func)->op_array.fn_flags & ZEND_ACC_RETURN_REFERENCE)) {
			/* Constants and temporary variables aren't yieldable by reference,
			 * but we still allow them with a notice. */
			if (IS_TMP_VAR & (IS_CONST|IS_TMP_VAR)) {
				zval *value;

				zend_error(E_NOTICE, "Only variable references should be yielded by reference");

				value = _get_zval_ptr_tmp(opline->op1.var EXECUTE_DATA_CC);
				ZVAL_COPY_VALUE(&generator->value, value);
				if (IS_TMP_VAR == IS_CONST) {
					if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
						Z_ADDREF(generator->value);
					}
				}
			} else {
				zval *value_ptr = zend_get_bad_ptr();

				/* If a function call result is yielded and the function did
				 * not return by reference we throw a notice. */
				do {
					if (IS_TMP_VAR == IS_VAR) {
						ZEND_ASSERT(value_ptr != &EG(uninitialized_zval));
						if (opline->extended_value == ZEND_RETURNS_FUNCTION
						 && !Z_ISREF_P(value_ptr)) {
							zend_error(E_NOTICE, "Only variable references should be yielded by reference");
							ZVAL_COPY(&generator->value, value_ptr);
							break;
						}
					}
					if (Z_ISREF_P(value_ptr)) {
						Z_ADDREF_P(value_ptr);
					} else {
						ZVAL_MAKE_REF_EX(value_ptr, 2);
					}
					ZVAL_REF(&generator->value, Z_REF_P(value_ptr));
				} while (0);

				zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
			}
		} else {
			zval *value = _get_zval_ptr_tmp(opline->op1.var EXECUTE_DATA_CC);

			/* Consts, temporary variables and references need copying */
			if (IS_TMP_VAR == IS_CONST) {
				ZVAL_COPY_VALUE(&generator->value, value);
				if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
					Z_ADDREF(generator->value);
				}
			} else if (IS_TMP_VAR == IS_TMP_VAR) {
				ZVAL_COPY_VALUE(&generator->value, value);
			} else if ((IS_TMP_VAR & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) {
				ZVAL_COPY(&generator->value, Z_REFVAL_P(value));


			} else {
				ZVAL_COPY_VALUE(&generator->value, value);
				if (IS_TMP_VAR == IS_CV) {
					if (Z_OPT_REFCOUNTED_P(value)) Z_ADDREF_P(value);
				}
			}
		}
	} else {
		/* If no value was specified yield null */
		ZVAL_NULL(&generator->value);
	}

	/* Set the new yielded key */
	if (IS_CONST != IS_UNUSED) {
		zval *key = RT_CONSTANT(opline, opline->op2);
		if ((IS_CONST & (IS_CV|IS_VAR)) && UNEXPECTED(Z_TYPE_P(key) == IS_REFERENCE)) {
			key = Z_REFVAL_P(key);
		}
		ZVAL_COPY(&generator->key, key);


		if (Z_TYPE(generator->key) == IS_LONG
		    && Z_LVAL(generator->key) > generator->largest_used_integer_key
		) {
			generator->largest_used_integer_key = Z_LVAL(generator->key);
		}
	} else {
		/* If no key was specified we use auto-increment keys */
		generator->largest_used_integer_key++;
		ZVAL_LONG(&generator->key, generator->largest_used_integer_key);
	}

	if (RETURN_VALUE_USED(opline)) {
		/* If the return value of yield is used set the send
		 * target and initialize it to NULL */
		generator->send_target = EX_VAR(opline->result.var);
		ZVAL_NULL(generator->send_target);
	} else {
		generator->send_target = NULL;
	}

	/* The GOTO VM uses a local opline variable. We need to set the opline
	 * variable in execute_data so we don't resume at an old position. */
	SAVE_OPLINE();

	ZEND_VM_RETURN();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_IN_ARRAY_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1;
	HashTable *ht = Z_ARRVAL_P(RT_CONSTANT(opline, opline->op2));
	zval *result;

	op1 = _get_zval_ptr_tmp(opline->op1.var EXECUTE_DATA_CC);
	if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
		result = zend_hash_find_ex(ht, Z_STR_P(op1), IS_TMP_VAR == IS_CONST);
		if (IS_TMP_VAR & (IS_TMP_VAR|IS_VAR)) {
			zval_ptr_dtor_str(op1);
		}
		ZEND_VM_SMART_BRANCH(result, 0);
	}

	if (opline->extended_value) {
		if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
			result = zend_hash_index_find(ht, Z_LVAL_P(op1));
			ZEND_VM_SMART_BRANCH(result, 0);
		}
		SAVE_OPLINE();
		if ((IS_TMP_VAR & (IS_VAR|IS_CV)) && Z_TYPE_P(op1) == IS_REFERENCE) {
			op1 = Z_REFVAL_P(op1);
			if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
				result = zend_hash_find(ht, Z_STR_P(op1));
				zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
				ZEND_VM_SMART_BRANCH(result, 0);
			} else if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
				result = zend_hash_index_find(ht, Z_LVAL_P(op1));
				zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
				ZEND_VM_SMART_BRANCH(result, 0);
			}
		} else if (IS_TMP_VAR == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
			ZVAL_UNDEFINED_OP1();
		}
	} else if (Z_TYPE_P(op1) <= IS_FALSE) {
		if (IS_TMP_VAR == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
			SAVE_OPLINE();
			ZVAL_UNDEFINED_OP1();
			if (UNEXPECTED(EG(exception) != NULL)) {
				HANDLE_EXCEPTION();
			}
		}
		result = zend_hash_find_known_hash(ht, ZSTR_EMPTY_ALLOC());
		ZEND_VM_SMART_BRANCH(result, 0);
	} else {
		zend_string *key;
		zval key_tmp;

		if ((IS_TMP_VAR & (IS_VAR|IS_CV)) && Z_TYPE_P(op1) == IS_REFERENCE) {
			op1 = Z_REFVAL_P(op1);
			if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
				result = zend_hash_find(ht, Z_STR_P(op1));
				zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
				ZEND_VM_SMART_BRANCH(result, 0);
			}
		}

		SAVE_OPLINE();
		ZEND_HASH_MAP_FOREACH_STR_KEY(ht, key) {
			ZVAL_STR(&key_tmp, key);
			if (zend_compare(op1, &key_tmp) == 0) {
				zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
				ZEND_VM_SMART_BRANCH(1, 1);
			}
		} ZEND_HASH_FOREACH_END();
	}
	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
	ZEND_VM_SMART_BRANCH(0, 1);
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_FETCH_DIM_FUNC_ARG_SPEC_TMP_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
#if 0
	USE_OPLINE
#endif

	if (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) {
		if ((IS_TMP_VAR & (IS_CONST|IS_TMP_VAR))) {
			ZEND_VM_TAIL_CALL(zend_use_tmp_in_write_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
		}
		ZEND_VM_TAIL_CALL(ZEND_NULL_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
	} else {
		if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED) {
			ZEND_VM_TAIL_CALL(zend_use_undef_in_read_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
		}
		ZEND_VM_TAIL_CALL(ZEND_FETCH_DIM_R_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
	}
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_FETCH_OBJ_FUNC_ARG_SPEC_TMP_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
#if 0
	USE_OPLINE
#endif

	if (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) {
		/* Behave like FETCH_OBJ_W */
		if ((IS_TMP_VAR & (IS_CONST|IS_TMP_VAR))) {
			ZEND_VM_TAIL_CALL(zend_use_tmp_in_write_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
		}
		ZEND_VM_TAIL_CALL(ZEND_NULL_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
	} else {
		ZEND_VM_TAIL_CALL(ZEND_FETCH_OBJ_R_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
	}
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_ROPE_ADD_SPEC_TMP_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zend_string **rope;
	zval *var;

	/* op1 and result are the same */
	rope = (zend_string**)EX_VAR(opline->op1.var);
	if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
		var = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
		rope[opline->extended_value] = Z_STR_P(var);
		if (UNEXPECTED(Z_REFCOUNTED_P(var))) {
			Z_ADDREF_P(var);
		}
	} else {
		var = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
		if (EXPECTED(Z_TYPE_P(var) == IS_STRING)) {
			if ((IS_TMP_VAR|IS_VAR) == IS_CV) {
				rope[opline->extended_value] = zend_string_copy(Z_STR_P(var));
			} else {
				rope[opline->extended_value] = Z_STR_P(var);
			}
		} else {
			SAVE_OPLINE();
			if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(var) == IS_UNDEF)) {
				ZVAL_UNDEFINED_OP2();
			}
			rope[opline->extended_value] = zval_get_string_func(var);
			zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
			ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
		}
	}
	ZEND_VM_NEXT_OPCODE();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_ROPE_END_SPEC_TMP_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zend_string **rope;
	zval *var, *ret;
	uint32_t i;

	rope = (zend_string**)EX_VAR(opline->op1.var);
	if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
		var = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
		rope[opline->extended_value] = Z_STR_P(var);
		if (UNEXPECTED(Z_REFCOUNTED_P(var))) {
			Z_ADDREF_P(var);
		}
	} else {
		var = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
		if (EXPECTED(Z_TYPE_P(var) == IS_STRING)) {
			if ((IS_TMP_VAR|IS_VAR) == IS_CV) {
				rope[opline->extended_value] = zend_string_copy(Z_STR_P(var));
			} else {
				rope[opline->extended_value] = Z_STR_P(var);
			}
		} else {
			SAVE_OPLINE();
			if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(var) == IS_UNDEF)) {
				ZVAL_UNDEFINED_OP2();
			}
			rope[opline->extended_value] = zval_get_string_func(var);
			zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
			if (UNEXPECTED(EG(exception))) {
				for (i = 0; i <= opline->extended_value; i++) {
					zend_string_release_ex(rope[i], 0);
				}
				ZVAL_UNDEF(EX_VAR(opline->result.var));
				HANDLE_EXCEPTION();
			}
		}
	}

	size_t len = 0;
	uint32_t flags = ZSTR_COPYABLE_CONCAT_PROPERTIES;
	for (i = 0; i <= opline->extended_value; i++) {
		flags &= ZSTR_GET_COPYABLE_CONCAT_PROPERTIES(rope[i]);
		len += ZSTR_LEN(rope[i]);
	}
	ret = EX_VAR(opline->result.var);
	ZVAL_STR(ret, zend_string_alloc(len, 0));
	GC_ADD_FLAGS(Z_STR_P(ret), flags);

	char *target = Z_STRVAL_P(ret);
	for (i = 0; i <= opline->extended_value; i++) {
		memcpy(target, ZSTR_VAL(rope[i]), ZSTR_LEN(rope[i]));
		target += ZSTR_LEN(rope[i]);
		zend_string_release_ex(rope[i], 0);
	}
	*target = '\0';

	ZEND_VM_NEXT_OPCODE();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *expr_ptr, new_expr;

	SAVE_OPLINE();
	if ((IS_TMP_VAR == IS_VAR || IS_TMP_VAR == IS_CV) &&
	    UNEXPECTED(opline->extended_value & ZEND_ARRAY_ELEMENT_REF)) {
		expr_ptr = zend_get_bad_ptr();
		if (Z_ISREF_P(expr_ptr)) {
			Z_ADDREF_P(expr_ptr);
		} else {
			ZVAL_MAKE_REF_EX(expr_ptr, 2);
		}
		zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
	} else {
		expr_ptr = _get_zval_ptr_tmp(opline->op1.var EXECUTE_DATA_CC);
		if (IS_TMP_VAR == IS_TMP_VAR) {
			/* pass */
		} else if (IS_TMP_VAR == IS_CONST) {
			Z_TRY_ADDREF_P(expr_ptr);
		} else if (IS_TMP_VAR == IS_CV) {
			ZVAL_DEREF(expr_ptr);
			Z_TRY_ADDREF_P(expr_ptr);
		} else /* if (IS_TMP_VAR == IS_VAR) */ {
			if (UNEXPECTED(Z_ISREF_P(expr_ptr))) {
				zend_refcounted *ref = Z_COUNTED_P(expr_ptr);

				expr_ptr = Z_REFVAL_P(expr_ptr);
				if (UNEXPECTED(GC_DELREF(ref) == 0)) {
					ZVAL_COPY_VALUE(&new_expr, expr_ptr);
					expr_ptr = &new_expr;
					efree_size(ref, sizeof(zend_reference));
				} else if (Z_OPT_REFCOUNTED_P(expr_ptr)) {
					Z_ADDREF_P(expr_ptr);
				}
			}
		}
	}

	if ((IS_TMP_VAR|IS_VAR) != IS_UNUSED) {
		zval *offset = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
		zend_string *str;
		zend_ulong hval;

add_again:
		if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) {
			str = Z_STR_P(offset);
			if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
				if (ZEND_HANDLE_NUMERIC(str, hval)) {
					goto num_index;
				}
			}
str_index:
			zend_hash_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), str, expr_ptr);
		} else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
			hval = Z_LVAL_P(offset);
num_index:
			zend_hash_index_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), hval, expr_ptr);
		} else if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && EXPECTED(Z_TYPE_P(offset) == IS_REFERENCE)) {
			offset = Z_REFVAL_P(offset);
			goto add_again;
		} else if (UNEXPECTED(Z_TYPE_P(offset) == IS_NULL)) {
			zval tmp;
			if (IS_TMP_VAR == IS_CV || IS_TMP_VAR == IS_VAR) {
				ZVAL_COPY(&tmp, expr_ptr);
			}
			zend_error(E_DEPRECATED, "Using null as an array offset is deprecated, use an empty string instead");
			if (IS_TMP_VAR == IS_CV || IS_TMP_VAR == IS_VAR) {
				/* A userland error handler can do funky things to the expression, so reset it */
				zval_ptr_dtor(expr_ptr);
				ZVAL_COPY_VALUE(expr_ptr, &tmp);
			}
			if (UNEXPECTED(EG(exception))) {
				zval_ptr_dtor_nogc(expr_ptr);
				HANDLE_EXCEPTION();
			}
			str = ZSTR_EMPTY_ALLOC();
			goto str_index;
		} else if (Z_TYPE_P(offset) == IS_DOUBLE) {
			hval = zend_dval_to_lval_safe(Z_DVAL_P(offset));
			goto num_index;
		} else if (Z_TYPE_P(offset) == IS_FALSE) {
			hval = 0;
			goto num_index;
		} else if (Z_TYPE_P(offset) == IS_TRUE) {
			hval = 1;
			goto num_index;
		} else if (Z_TYPE_P(offset) == IS_RESOURCE) {
			zend_use_resource_as_offset(offset);
			hval = Z_RES_HANDLE_P(offset);
			goto num_index;
		} else if ((IS_TMP_VAR|IS_VAR) == IS_CV && Z_TYPE_P(offset) == IS_UNDEF) {
			ZVAL_UNDEFINED_OP2();
			str = ZSTR_EMPTY_ALLOC();
			goto str_index;
		} else {
			zend_illegal_array_offset_access(offset);
			zval_ptr_dtor_nogc(expr_ptr);
		}
		zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
	} else {
		if (!zend_hash_next_index_insert(Z_ARRVAL_P(EX_VAR(opline->result.var)), expr_ptr)) {
			zend_cannot_add_element();
			zval_ptr_dtor_nogc(expr_ptr);
		}
	}
	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_INIT_ARRAY_SPEC_TMP_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	zval *array;
	uint32_t size;
	USE_OPLINE

	SAVE_OPLINE();
	array = EX_VAR(opline->result.var);
	if (IS_TMP_VAR != IS_UNUSED) {
		size = opline->extended_value >> ZEND_ARRAY_SIZE_SHIFT;
		ZVAL_ARR(array, zend_new_array(size));
		/* Explicitly initialize array as not-packed if flag is set */
		if (opline->extended_value & ZEND_ARRAY_NOT_PACKED) {
			zend_hash_real_init_mixed(Z_ARRVAL_P(array));
		}
		ZEND_VM_TAIL_CALL(ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
	} else {
		ZVAL_ARR(array, zend_new_array(0));
		ZEND_VM_NEXT_OPCODE();
	}
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_YIELD_SPEC_TMP_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE

	zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C);

	SAVE_OPLINE();
	if (UNEXPECTED(generator->flags & ZEND_GENERATOR_FORCED_CLOSE)) {
		ZEND_VM_TAIL_CALL(zend_yield_in_closed_generator_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
	}

	/* Destroy the previously yielded value */
	zval_ptr_dtor(&generator->value);

	/* Destroy the previously yielded key */
	zval_ptr_dtor(&generator->key);

	/* Set the new yielded value */
	if (IS_TMP_VAR != IS_UNUSED) {
		if (UNEXPECTED(EX(func)->op_array.fn_flags & ZEND_ACC_RETURN_REFERENCE)) {
			/* Constants and temporary variables aren't yieldable by reference,
			 * but we still allow them with a notice. */
			if (IS_TMP_VAR & (IS_CONST|IS_TMP_VAR)) {
				zval *value;

				zend_error(E_NOTICE, "Only variable references should be yielded by reference");

				value = _get_zval_ptr_tmp(opline->op1.var EXECUTE_DATA_CC);
				ZVAL_COPY_VALUE(&generator->value, value);
				if (IS_TMP_VAR == IS_CONST) {
					if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
						Z_ADDREF(generator->value);
					}
				}
			} else {
				zval *value_ptr = zend_get_bad_ptr();

				/* If a function call result is yielded and the function did
				 * not return by reference we throw a notice. */
				do {
					if (IS_TMP_VAR == IS_VAR) {
						ZEND_ASSERT(value_ptr != &EG(uninitialized_zval));
						if (opline->extended_value == ZEND_RETURNS_FUNCTION
						 && !Z_ISREF_P(value_ptr)) {
							zend_error(E_NOTICE, "Only variable references should be yielded by reference");
							ZVAL_COPY(&generator->value, value_ptr);
							break;
						}
					}
					if (Z_ISREF_P(value_ptr)) {
						Z_ADDREF_P(value_ptr);
					} else {
						ZVAL_MAKE_REF_EX(value_ptr, 2);
					}
					ZVAL_REF(&generator->value, Z_REF_P(value_ptr));
				} while (0);

				zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
			}
		} else {
			zval *value = _get_zval_ptr_tmp(opline->op1.var EXECUTE_DATA_CC);

			/* Consts, temporary variables and references need copying */
			if (IS_TMP_VAR == IS_CONST) {
				ZVAL_COPY_VALUE(&generator->value, value);
				if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
					Z_ADDREF(generator->value);
				}
			} else if (IS_TMP_VAR == IS_TMP_VAR) {
				ZVAL_COPY_VALUE(&generator->value, value);
			} else if ((IS_TMP_VAR & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) {
				ZVAL_COPY(&generator->value, Z_REFVAL_P(value));


			} else {
				ZVAL_COPY_VALUE(&generator->value, value);
				if (IS_TMP_VAR == IS_CV) {
					if (Z_OPT_REFCOUNTED_P(value)) Z_ADDREF_P(value);
				}
			}
		}
	} else {
		/* If no value was specified yield null */
		ZVAL_NULL(&generator->value);
	}

	/* Set the new yielded key */
	if ((IS_TMP_VAR|IS_VAR) != IS_UNUSED) {
		zval *key = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
		if (((IS_TMP_VAR|IS_VAR) & (IS_CV|IS_VAR)) && UNEXPECTED(Z_TYPE_P(key) == IS_REFERENCE)) {
			key = Z_REFVAL_P(key);
		}
		ZVAL_COPY(&generator->key, key);
		zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));

		if (Z_TYPE(generator->key) == IS_LONG
		    && Z_LVAL(generator->key) > generator->largest_used_integer_key
		) {
			generator->largest_used_integer_key = Z_LVAL(generator->key);
		}
	} else {
		/* If no key was specified we use auto-increment keys */
		generator->largest_used_integer_key++;
		ZVAL_LONG(&generator->key, generator->largest_used_integer_key);
	}

	if (RETURN_VALUE_USED(opline)) {
		/* If the return value of yield is used set the send
		 * target and initialize it to NULL */
		generator->send_target = EX_VAR(opline->result.var);
		ZVAL_NULL(generator->send_target);
	} else {
		generator->send_target = NULL;
	}

	/* The GOTO VM uses a local opline variable. We need to set the opline
	 * variable in execute_data so we don't resume at an old position. */
	SAVE_OPLINE();

	ZEND_VM_RETURN();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_IS_IDENTICAL_SPEC_TMP_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;
	bool result;

	SAVE_OPLINE();
	op1 = _get_zval_ptr_tmp(opline->op1.var EXECUTE_DATA_CC);
	op2 = _get_zval_ptr_tmp(opline->op2.var EXECUTE_DATA_CC);
	result = fast_is_identical_function(op1, op2);
	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
	ZEND_VM_SMART_BRANCH(result, 1);
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_CASE_STRICT_SPEC_TMP_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;
	bool result;

	SAVE_OPLINE();
	op1 = _get_zval_ptr_tmp(opline->op1.var EXECUTE_DATA_CC);
	op2 = _get_zval_ptr_tmp(opline->op2.var EXECUTE_DATA_CC);
	result = fast_is_identical_function(op1, op2);
	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
	ZEND_VM_SMART_BRANCH(result, 1);
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_IS_NOT_IDENTICAL_SPEC_TMP_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;
	bool result;

	SAVE_OPLINE();
	op1 = _get_zval_ptr_tmp(opline->op1.var EXECUTE_DATA_CC);
	op2 = _get_zval_ptr_tmp(opline->op2.var EXECUTE_DATA_CC);
	result = fast_is_not_identical_function(op1, op2);
	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
	ZEND_VM_SMART_BRANCH(result, 1);
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_CASE_STRICT_SPEC_TMP_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;
	bool result;

	SAVE_OPLINE();
	op1 = _get_zval_ptr_tmp(opline->op1.var EXECUTE_DATA_CC);
	op2 = _get_zval_ptr_var_deref(opline->op2.var EXECUTE_DATA_CC);
	result = fast_is_identical_function(op1, op2);
	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
	ZEND_VM_SMART_BRANCH(result, 1);
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_FETCH_DIM_FUNC_ARG_SPEC_TMP_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
#if 0
	USE_OPLINE
#endif

	if (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) {
		if ((IS_TMP_VAR & (IS_CONST|IS_TMP_VAR))) {
			ZEND_VM_TAIL_CALL(zend_use_tmp_in_write_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
		}
		ZEND_VM_TAIL_CALL(ZEND_NULL_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
	} else {
		if (IS_UNUSED == IS_UNUSED) {
			ZEND_VM_TAIL_CALL(zend_use_undef_in_read_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
		}
		ZEND_VM_TAIL_CALL(ZEND_NULL_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
	}
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_VERIFY_RETURN_TYPE_SPEC_TMP_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	if (IS_TMP_VAR == IS_UNUSED) {
		SAVE_OPLINE();
		zend_verify_missing_return_type(EX(func));
		HANDLE_EXCEPTION();
	} else {
/* prevents "undefined variable opline" errors */
#if 0 || (IS_TMP_VAR != IS_UNUSED)
		USE_OPLINE
		zval *retval_ref, *retval_ptr;
		zend_arg_info *ret_info = EX(func)->common.arg_info - 1;
		retval_ref = retval_ptr = _get_zval_ptr_tmp(opline->op1.var EXECUTE_DATA_CC);

		if (IS_TMP_VAR == IS_CONST) {
			ZVAL_COPY(EX_VAR(opline->result.var), retval_ptr);
			retval_ref = retval_ptr = EX_VAR(opline->result.var);
		} else if (IS_TMP_VAR == IS_VAR) {
			if (UNEXPECTED(Z_TYPE_P(retval_ptr) == IS_INDIRECT)) {
				retval_ref = retval_ptr = Z_INDIRECT_P(retval_ptr);
			}
			ZVAL_DEREF(retval_ptr);
		} else if (IS_TMP_VAR == IS_CV) {
			ZVAL_DEREF(retval_ptr);
		}

		if (EXPECTED(ZEND_TYPE_CONTAINS_CODE(ret_info->type, Z_TYPE_P(retval_ptr)))) {
			ZEND_VM_NEXT_OPCODE();
		}

		if (IS_TMP_VAR == IS_CV && UNEXPECTED(Z_ISUNDEF_P(retval_ptr))) {
			SAVE_OPLINE();
			retval_ref = retval_ptr = ZVAL_UNDEFINED_OP1();
			if (UNEXPECTED(EG(exception))) {
				HANDLE_EXCEPTION();
			}
			if (ZEND_TYPE_FULL_MASK(ret_info->type) & MAY_BE_NULL) {
				ZEND_VM_NEXT_OPCODE();
			}
		}

		zend_reference *ref = NULL;
		if (UNEXPECTED(retval_ref != retval_ptr)) {
			if (UNEXPECTED(EX(func)->op_array.fn_flags & ZEND_ACC_RETURN_REFERENCE)) {
				ref = Z_REF_P(retval_ref);
			} else {
				/* A cast might happen - unwrap the reference if this is a by-value return */
				if (Z_REFCOUNT_P(retval_ref) == 1) {
					ZVAL_UNREF(retval_ref);
				} else {
					Z_DELREF_P(retval_ref);
					ZVAL_COPY(retval_ref, retval_ptr);
				}
				retval_ptr = retval_ref;
			}
		}

		SAVE_OPLINE();
		if (UNEXPECTED(!zend_check_type_slow(&ret_info->type, retval_ptr, ref, 1, 0))) {
			zend_verify_return_error(EX(func), retval_ptr);
			HANDLE_EXCEPTION();
		}
		ZEND_VM_NEXT_OPCODE();
#endif
	}
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_SEND_VAL_EX_SPEC_TMP_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *value, *arg;
	uint32_t arg_num;

	if (IS_UNUSED == IS_CONST) {
		SAVE_OPLINE();
		zend_string *arg_name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
		arg = zend_handle_named_arg(&EX(call), arg_name, &arg_num, CACHE_ADDR(opline->result.num));
		if (UNEXPECTED(!arg)) {
			zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
			HANDLE_EXCEPTION();
		}
	} else {
		arg = ZEND_CALL_VAR(EX(call), opline->result.var);
		arg_num = opline->op2.num;
	}

	if (EXPECTED(0)) {
		if (QUICK_ARG_MUST_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
			goto send_val_by_ref;
		}
	} else if (ARG_MUST_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
send_val_by_ref:;
		ZEND_VM_DISPATCH_TO_HELPER(zend_cannot_pass_by_ref_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_EX arg_num, arg));
	}
	value = _get_zval_ptr_tmp(opline->op1.var EXECUTE_DATA_CC);
	ZVAL_COPY_VALUE(arg, value);
	if (IS_TMP_VAR == IS_CONST) {
		if (UNEXPECTED(Z_OPT_REFCOUNTED_P(arg))) {
			Z_ADDREF_P(arg);
		}
	}
	ZEND_VM_NEXT_OPCODE();
}

static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_SEND_VAL_EX_SPEC_TMP_UNUSED_QUICK_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *value, *arg;
	uint32_t arg_num;

	if (IS_UNUSED == IS_CONST) {
		SAVE_OPLINE();
		zend_string *arg_name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
		arg = zend_handle_named_arg(&EX(call), arg_name, &arg_num, CACHE_ADDR(opline->result.num));
		if (UNEXPECTED(!arg)) {
			zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
			HANDLE_EXCEPTION();
		}
	} else {
		arg = ZEND_CALL_VAR(EX(call), opline->result.var);
		arg_num = opline->op2.num;
	}

	if (EXPECTED(1)) {
		if (QUICK_ARG_MUST_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
			goto send_val_by_ref;
		}
	} else if (ARG_MUST_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
send_val_by_ref:;
		ZEND_VM_DISPATCH_TO_HELPER(zend_cannot_pass_by_ref_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_EX arg_num, arg));
	}
	value = _get_zval_ptr_tmp(opline->op1.var EXECUTE_DATA_CC);
	ZVAL_COPY_VALUE(arg, value);
	if (IS_TMP_VAR == IS_CONST) {
		if (UNEXPECTED(Z_OPT_REFCOUNTED_P(arg))) {
			Z_ADDREF_P(arg);
		}
	}
	ZEND_VM_NEXT_OPCODE();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *expr_ptr, new_expr;

	SAVE_OPLINE();
	if ((IS_TMP_VAR == IS_VAR || IS_TMP_VAR == IS_CV) &&
	    UNEXPECTED(opline->extended_value & ZEND_ARRAY_ELEMENT_REF)) {
		expr_ptr = zend_get_bad_ptr();
		if (Z_ISREF_P(expr_ptr)) {
			Z_ADDREF_P(expr_ptr);
		} else {
			ZVAL_MAKE_REF_EX(expr_ptr, 2);
		}
		zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
	} else {
		expr_ptr = _get_zval_ptr_tmp(opline->op1.var EXECUTE_DATA_CC);
		if (IS_TMP_VAR == IS_TMP_VAR) {
			/* pass */
		} else if (IS_TMP_VAR == IS_CONST) {
			Z_TRY_ADDREF_P(expr_ptr);
		} else if (IS_TMP_VAR == IS_CV) {
			ZVAL_DEREF(expr_ptr);
			Z_TRY_ADDREF_P(expr_ptr);
		} else /* if (IS_TMP_VAR == IS_VAR) */ {
			if (UNEXPECTED(Z_ISREF_P(expr_ptr))) {
				zend_refcounted *ref = Z_COUNTED_P(expr_ptr);

				expr_ptr = Z_REFVAL_P(expr_ptr);
				if (UNEXPECTED(GC_DELREF(ref) == 0)) {
					ZVAL_COPY_VALUE(&new_expr, expr_ptr);
					expr_ptr = &new_expr;
					efree_size(ref, sizeof(zend_reference));
				} else if (Z_OPT_REFCOUNTED_P(expr_ptr)) {
					Z_ADDREF_P(expr_ptr);
				}
			}
		}
	}

	if (IS_UNUSED != IS_UNUSED) {
		zval *offset = NULL;
		zend_string *str;
		zend_ulong hval;

add_again:
		if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) {
			str = Z_STR_P(offset);
			if (IS_UNUSED != IS_CONST) {
				if (ZEND_HANDLE_NUMERIC(str, hval)) {
					goto num_index;
				}
			}
str_index:
			zend_hash_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), str, expr_ptr);
		} else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
			hval = Z_LVAL_P(offset);
num_index:
			zend_hash_index_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), hval, expr_ptr);
		} else if ((IS_UNUSED & (IS_VAR|IS_CV)) && EXPECTED(Z_TYPE_P(offset) == IS_REFERENCE)) {
			offset = Z_REFVAL_P(offset);
			goto add_again;
		} else if (UNEXPECTED(Z_TYPE_P(offset) == IS_NULL)) {
			zval tmp;
			if (IS_TMP_VAR == IS_CV || IS_TMP_VAR == IS_VAR) {
				ZVAL_COPY(&tmp, expr_ptr);
			}
			zend_error(E_DEPRECATED, "Using null as an array offset is deprecated, use an empty string instead");
			if (IS_TMP_VAR == IS_CV || IS_TMP_VAR == IS_VAR) {
				/* A userland error handler can do funky things to the expression, so reset it */
				zval_ptr_dtor(expr_ptr);
				ZVAL_COPY_VALUE(expr_ptr, &tmp);
			}
			if (UNEXPECTED(EG(exception))) {
				zval_ptr_dtor_nogc(expr_ptr);
				HANDLE_EXCEPTION();
			}
			str = ZSTR_EMPTY_ALLOC();
			goto str_index;
		} else if (Z_TYPE_P(offset) == IS_DOUBLE) {
			hval = zend_dval_to_lval_safe(Z_DVAL_P(offset));
			goto num_index;
		} else if (Z_TYPE_P(offset) == IS_FALSE) {
			hval = 0;
			goto num_index;
		} else if (Z_TYPE_P(offset) == IS_TRUE) {
			hval = 1;
			goto num_index;
		} else if (Z_TYPE_P(offset) == IS_RESOURCE) {
			zend_use_resource_as_offset(offset);
			hval = Z_RES_HANDLE_P(offset);
			goto num_index;
		} else if (IS_UNUSED == IS_CV && Z_TYPE_P(offset) == IS_UNDEF) {
			ZVAL_UNDEFINED_OP2();
			str = ZSTR_EMPTY_ALLOC();
			goto str_index;
		} else {
			zend_illegal_array_offset_access(offset);
			zval_ptr_dtor_nogc(expr_ptr);
		}


	} else {
		if (!zend_hash_next_index_insert(Z_ARRVAL_P(EX_VAR(opline->result.var)), expr_ptr)) {
			zend_cannot_add_element();
			zval_ptr_dtor_nogc(expr_ptr);
		}
	}
	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_INIT_ARRAY_SPEC_TMP_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	zval *array;
	uint32_t size;
	USE_OPLINE

	SAVE_OPLINE();
	array = EX_VAR(opline->result.var);
	if (IS_TMP_VAR != IS_UNUSED) {
		size = opline->extended_value >> ZEND_ARRAY_SIZE_SHIFT;
		ZVAL_ARR(array, zend_new_array(size));
		/* Explicitly initialize array as not-packed if flag is set */
		if (opline->extended_value & ZEND_ARRAY_NOT_PACKED) {
			zend_hash_real_init_mixed(Z_ARRVAL_P(array));
		}
		ZEND_VM_TAIL_CALL(ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
	} else {
		ZVAL_ARR(array, zend_new_array(0));
		ZEND_VM_NEXT_OPCODE();
	}
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_YIELD_SPEC_TMP_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE

	zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C);

	SAVE_OPLINE();
	if (UNEXPECTED(generator->flags & ZEND_GENERATOR_FORCED_CLOSE)) {
		ZEND_VM_TAIL_CALL(zend_yield_in_closed_generator_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
	}

	/* Destroy the previously yielded value */
	zval_ptr_dtor(&generator->value);

	/* Destroy the previously yielded key */
	zval_ptr_dtor(&generator->key);

	/* Set the new yielded value */
	if (IS_TMP_VAR != IS_UNUSED) {
		if (UNEXPECTED(EX(func)->op_array.fn_flags & ZEND_ACC_RETURN_REFERENCE)) {
			/* Constants and temporary variables aren't yieldable by reference,
			 * but we still allow them with a notice. */
			if (IS_TMP_VAR & (IS_CONST|IS_TMP_VAR)) {
				zval *value;

				zend_error(E_NOTICE, "Only variable references should be yielded by reference");

				value = _get_zval_ptr_tmp(opline->op1.var EXECUTE_DATA_CC);
				ZVAL_COPY_VALUE(&generator->value, value);
				if (IS_TMP_VAR == IS_CONST) {
					if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
						Z_ADDREF(generator->value);
					}
				}
			} else {
				zval *value_ptr = zend_get_bad_ptr();

				/* If a function call result is yielded and the function did
				 * not return by reference we throw a notice. */
				do {
					if (IS_TMP_VAR == IS_VAR) {
						ZEND_ASSERT(value_ptr != &EG(uninitialized_zval));
						if (opline->extended_value == ZEND_RETURNS_FUNCTION
						 && !Z_ISREF_P(value_ptr)) {
							zend_error(E_NOTICE, "Only variable references should be yielded by reference");
							ZVAL_COPY(&generator->value, value_ptr);
							break;
						}
					}
					if (Z_ISREF_P(value_ptr)) {
						Z_ADDREF_P(value_ptr);
					} else {
						ZVAL_MAKE_REF_EX(value_ptr, 2);
					}
					ZVAL_REF(&generator->value, Z_REF_P(value_ptr));
				} while (0);

				zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
			}
		} else {
			zval *value = _get_zval_ptr_tmp(opline->op1.var EXECUTE_DATA_CC);

			/* Consts, temporary variables and references need copying */
			if (IS_TMP_VAR == IS_CONST) {
				ZVAL_COPY_VALUE(&generator->value, value);
				if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
					Z_ADDREF(generator->value);
				}
			} else if (IS_TMP_VAR == IS_TMP_VAR) {
				ZVAL_COPY_VALUE(&generator->value, value);
			} else if ((IS_TMP_VAR & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) {
				ZVAL_COPY(&generator->value, Z_REFVAL_P(value));


			} else {
				ZVAL_COPY_VALUE(&generator->value, value);
				if (IS_TMP_VAR == IS_CV) {
					if (Z_OPT_REFCOUNTED_P(value)) Z_ADDREF_P(value);
				}
			}
		}
	} else {
		/* If no value was specified yield null */
		ZVAL_NULL(&generator->value);
	}

	/* Set the new yielded key */
	if (IS_UNUSED != IS_UNUSED) {
		zval *key = NULL;
		if ((IS_UNUSED & (IS_CV|IS_VAR)) && UNEXPECTED(Z_TYPE_P(key) == IS_REFERENCE)) {
			key = Z_REFVAL_P(key);
		}
		ZVAL_COPY(&generator->key, key);


		if (Z_TYPE(generator->key) == IS_LONG
		    && Z_LVAL(generator->key) > generator->largest_used_integer_key
		) {
			generator->largest_used_integer_key = Z_LVAL(generator->key);
		}
	} else {
		/* If no key was specified we use auto-increment keys */
		generator->largest_used_integer_key++;
		ZVAL_LONG(&generator->key, generator->largest_used_integer_key);
	}

	if (RETURN_VALUE_USED(opline)) {
		/* If the return value of yield is used set the send
		 * target and initialize it to NULL */
		generator->send_target = EX_VAR(opline->result.var);
		ZVAL_NULL(generator->send_target);
	} else {
		generator->send_target = NULL;
	}

	/* The GOTO VM uses a local opline variable. We need to set the opline
	 * variable in execute_data so we don't resume at an old position. */
	SAVE_OPLINE();

	ZEND_VM_RETURN();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_GET_TYPE_SPEC_TMP_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1;
	zend_string *type;

	SAVE_OPLINE();
	op1 = _get_zval_ptr_tmp(opline->op1.var EXECUTE_DATA_CC);
	type = zend_zval_get_legacy_type(op1);
	if (EXPECTED(type)) {
		ZVAL_INTERNED_STR(EX_VAR(opline->result.var), type);
	} else {
		ZVAL_STRING(EX_VAR(opline->result.var), "unknown type");
	}
	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_CASE_STRICT_SPEC_TMP_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;
	bool result;

	SAVE_OPLINE();
	op1 = _get_zval_ptr_tmp(opline->op1.var EXECUTE_DATA_CC);
	op2 = _get_zval_ptr_cv_deref_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
	result = fast_is_identical_function(op1, op2);


	ZEND_VM_SMART_BRANCH(result, 1);
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_FETCH_DIM_FUNC_ARG_SPEC_TMP_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
#if 0
	USE_OPLINE
#endif

	if (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) {
		if ((IS_TMP_VAR & (IS_CONST|IS_TMP_VAR))) {
			ZEND_VM_TAIL_CALL(zend_use_tmp_in_write_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
		}
		ZEND_VM_TAIL_CALL(ZEND_NULL_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
	} else {
		if (IS_CV == IS_UNUSED) {
			ZEND_VM_TAIL_CALL(zend_use_undef_in_read_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
		}
		ZEND_VM_TAIL_CALL(ZEND_FETCH_DIM_R_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
	}
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_FETCH_OBJ_FUNC_ARG_SPEC_TMP_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
#if 0
	USE_OPLINE
#endif

	if (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) {
		/* Behave like FETCH_OBJ_W */
		if ((IS_TMP_VAR & (IS_CONST|IS_TMP_VAR))) {
			ZEND_VM_TAIL_CALL(zend_use_tmp_in_write_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
		}
		ZEND_VM_TAIL_CALL(ZEND_NULL_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
	} else {
		ZEND_VM_TAIL_CALL(ZEND_FETCH_OBJ_R_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
	}
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_ROPE_ADD_SPEC_TMP_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zend_string **rope;
	zval *var;

	/* op1 and result are the same */
	rope = (zend_string**)EX_VAR(opline->op1.var);
	if (IS_CV == IS_CONST) {
		var = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
		rope[opline->extended_value] = Z_STR_P(var);
		if (UNEXPECTED(Z_REFCOUNTED_P(var))) {
			Z_ADDREF_P(var);
		}
	} else {
		var = EX_VAR(opline->op2.var);
		if (EXPECTED(Z_TYPE_P(var) == IS_STRING)) {
			if (IS_CV == IS_CV) {
				rope[opline->extended_value] = zend_string_copy(Z_STR_P(var));
			} else {
				rope[opline->extended_value] = Z_STR_P(var);
			}
		} else {
			SAVE_OPLINE();
			if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(var) == IS_UNDEF)) {
				ZVAL_UNDEFINED_OP2();
			}
			rope[opline->extended_value] = zval_get_string_func(var);


			ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
		}
	}
	ZEND_VM_NEXT_OPCODE();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_ROPE_END_SPEC_TMP_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zend_string **rope;
	zval *var, *ret;
	uint32_t i;

	rope = (zend_string**)EX_VAR(opline->op1.var);
	if (IS_CV == IS_CONST) {
		var = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
		rope[opline->extended_value] = Z_STR_P(var);
		if (UNEXPECTED(Z_REFCOUNTED_P(var))) {
			Z_ADDREF_P(var);
		}
	} else {
		var = EX_VAR(opline->op2.var);
		if (EXPECTED(Z_TYPE_P(var) == IS_STRING)) {
			if (IS_CV == IS_CV) {
				rope[opline->extended_value] = zend_string_copy(Z_STR_P(var));
			} else {
				rope[opline->extended_value] = Z_STR_P(var);
			}
		} else {
			SAVE_OPLINE();
			if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(var) == IS_UNDEF)) {
				ZVAL_UNDEFINED_OP2();
			}
			rope[opline->extended_value] = zval_get_string_func(var);


			if (UNEXPECTED(EG(exception))) {
				for (i = 0; i <= opline->extended_value; i++) {
					zend_string_release_ex(rope[i], 0);
				}
				ZVAL_UNDEF(EX_VAR(opline->result.var));
				HANDLE_EXCEPTION();
			}
		}
	}

	size_t len = 0;
	uint32_t flags = ZSTR_COPYABLE_CONCAT_PROPERTIES;
	for (i = 0; i <= opline->extended_value; i++) {
		flags &= ZSTR_GET_COPYABLE_CONCAT_PROPERTIES(rope[i]);
		len += ZSTR_LEN(rope[i]);
	}
	ret = EX_VAR(opline->result.var);
	ZVAL_STR(ret, zend_string_alloc(len, 0));
	GC_ADD_FLAGS(Z_STR_P(ret), flags);

	char *target = Z_STRVAL_P(ret);
	for (i = 0; i <= opline->extended_value; i++) {
		memcpy(target, ZSTR_VAL(rope[i]), ZSTR_LEN(rope[i]));
		target += ZSTR_LEN(rope[i]);
		zend_string_release_ex(rope[i], 0);
	}
	*target = '\0';

	ZEND_VM_NEXT_OPCODE();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *expr_ptr, new_expr;

	SAVE_OPLINE();
	if ((IS_TMP_VAR == IS_VAR || IS_TMP_VAR == IS_CV) &&
	    UNEXPECTED(opline->extended_value & ZEND_ARRAY_ELEMENT_REF)) {
		expr_ptr = zend_get_bad_ptr();
		if (Z_ISREF_P(expr_ptr)) {
			Z_ADDREF_P(expr_ptr);
		} else {
			ZVAL_MAKE_REF_EX(expr_ptr, 2);
		}
		zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
	} else {
		expr_ptr = _get_zval_ptr_tmp(opline->op1.var EXECUTE_DATA_CC);
		if (IS_TMP_VAR == IS_TMP_VAR) {
			/* pass */
		} else if (IS_TMP_VAR == IS_CONST) {
			Z_TRY_ADDREF_P(expr_ptr);
		} else if (IS_TMP_VAR == IS_CV) {
			ZVAL_DEREF(expr_ptr);
			Z_TRY_ADDREF_P(expr_ptr);
		} else /* if (IS_TMP_VAR == IS_VAR) */ {
			if (UNEXPECTED(Z_ISREF_P(expr_ptr))) {
				zend_refcounted *ref = Z_COUNTED_P(expr_ptr);

				expr_ptr = Z_REFVAL_P(expr_ptr);
				if (UNEXPECTED(GC_DELREF(ref) == 0)) {
					ZVAL_COPY_VALUE(&new_expr, expr_ptr);
					expr_ptr = &new_expr;
					efree_size(ref, sizeof(zend_reference));
				} else if (Z_OPT_REFCOUNTED_P(expr_ptr)) {
					Z_ADDREF_P(expr_ptr);
				}
			}
		}
	}

	if (IS_CV != IS_UNUSED) {
		zval *offset = EX_VAR(opline->op2.var);
		zend_string *str;
		zend_ulong hval;

add_again:
		if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) {
			str = Z_STR_P(offset);
			if (IS_CV != IS_CONST) {
				if (ZEND_HANDLE_NUMERIC(str, hval)) {
					goto num_index;
				}
			}
str_index:
			zend_hash_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), str, expr_ptr);
		} else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
			hval = Z_LVAL_P(offset);
num_index:
			zend_hash_index_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), hval, expr_ptr);
		} else if ((IS_CV & (IS_VAR|IS_CV)) && EXPECTED(Z_TYPE_P(offset) == IS_REFERENCE)) {
			offset = Z_REFVAL_P(offset);
			goto add_again;
		} else if (UNEXPECTED(Z_TYPE_P(offset) == IS_NULL)) {
			zval tmp;
			if (IS_TMP_VAR == IS_CV || IS_TMP_VAR == IS_VAR) {
				ZVAL_COPY(&tmp, expr_ptr);
			}
			zend_error(E_DEPRECATED, "Using null as an array offset is deprecated, use an empty string instead");
			if (IS_TMP_VAR == IS_CV || IS_TMP_VAR == IS_VAR) {
				/* A userland error handler can do funky things to the expression, so reset it */
				zval_ptr_dtor(expr_ptr);
				ZVAL_COPY_VALUE(expr_ptr, &tmp);
			}
			if (UNEXPECTED(EG(exception))) {
				zval_ptr_dtor_nogc(expr_ptr);
				HANDLE_EXCEPTION();
			}
			str = ZSTR_EMPTY_ALLOC();
			goto str_index;
		} else if (Z_TYPE_P(offset) == IS_DOUBLE) {
			hval = zend_dval_to_lval_safe(Z_DVAL_P(offset));
			goto num_index;
		} else if (Z_TYPE_P(offset) == IS_FALSE) {
			hval = 0;
			goto num_index;
		} else if (Z_TYPE_P(offset) == IS_TRUE) {
			hval = 1;
			goto num_index;
		} else if (Z_TYPE_P(offset) == IS_RESOURCE) {
			zend_use_resource_as_offset(offset);
			hval = Z_RES_HANDLE_P(offset);
			goto num_index;
		} else if (IS_CV == IS_CV && Z_TYPE_P(offset) == IS_UNDEF) {
			ZVAL_UNDEFINED_OP2();
			str = ZSTR_EMPTY_ALLOC();
			goto str_index;
		} else {
			zend_illegal_array_offset_access(offset);
			zval_ptr_dtor_nogc(expr_ptr);
		}


	} else {
		if (!zend_hash_next_index_insert(Z_ARRVAL_P(EX_VAR(opline->result.var)), expr_ptr)) {
			zend_cannot_add_element();
			zval_ptr_dtor_nogc(expr_ptr);
		}
	}
	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_INIT_ARRAY_SPEC_TMP_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	zval *array;
	uint32_t size;
	USE_OPLINE

	SAVE_OPLINE();
	array = EX_VAR(opline->result.var);
	if (IS_TMP_VAR != IS_UNUSED) {
		size = opline->extended_value >> ZEND_ARRAY_SIZE_SHIFT;
		ZVAL_ARR(array, zend_new_array(size));
		/* Explicitly initialize array as not-packed if flag is set */
		if (opline->extended_value & ZEND_ARRAY_NOT_PACKED) {
			zend_hash_real_init_mixed(Z_ARRVAL_P(array));
		}
		ZEND_VM_TAIL_CALL(ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
	} else {
		ZVAL_ARR(array, zend_new_array(0));
		ZEND_VM_NEXT_OPCODE();
	}
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_YIELD_SPEC_TMP_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE

	zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C);

	SAVE_OPLINE();
	if (UNEXPECTED(generator->flags & ZEND_GENERATOR_FORCED_CLOSE)) {
		ZEND_VM_TAIL_CALL(zend_yield_in_closed_generator_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
	}

	/* Destroy the previously yielded value */
	zval_ptr_dtor(&generator->value);

	/* Destroy the previously yielded key */
	zval_ptr_dtor(&generator->key);

	/* Set the new yielded value */
	if (IS_TMP_VAR != IS_UNUSED) {
		if (UNEXPECTED(EX(func)->op_array.fn_flags & ZEND_ACC_RETURN_REFERENCE)) {
			/* Constants and temporary variables aren't yieldable by reference,
			 * but we still allow them with a notice. */
			if (IS_TMP_VAR & (IS_CONST|IS_TMP_VAR)) {
				zval *value;

				zend_error(E_NOTICE, "Only variable references should be yielded by reference");

				value = _get_zval_ptr_tmp(opline->op1.var EXECUTE_DATA_CC);
				ZVAL_COPY_VALUE(&generator->value, value);
				if (IS_TMP_VAR == IS_CONST) {
					if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
						Z_ADDREF(generator->value);
					}
				}
			} else {
				zval *value_ptr = zend_get_bad_ptr();

				/* If a function call result is yielded and the function did
				 * not return by reference we throw a notice. */
				do {
					if (IS_TMP_VAR == IS_VAR) {
						ZEND_ASSERT(value_ptr != &EG(uninitialized_zval));
						if (opline->extended_value == ZEND_RETURNS_FUNCTION
						 && !Z_ISREF_P(value_ptr)) {
							zend_error(E_NOTICE, "Only variable references should be yielded by reference");
							ZVAL_COPY(&generator->value, value_ptr);
							break;
						}
					}
					if (Z_ISREF_P(value_ptr)) {
						Z_ADDREF_P(value_ptr);
					} else {
						ZVAL_MAKE_REF_EX(value_ptr, 2);
					}
					ZVAL_REF(&generator->value, Z_REF_P(value_ptr));
				} while (0);

				zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
			}
		} else {
			zval *value = _get_zval_ptr_tmp(opline->op1.var EXECUTE_DATA_CC);

			/* Consts, temporary variables and references need copying */
			if (IS_TMP_VAR == IS_CONST) {
				ZVAL_COPY_VALUE(&generator->value, value);
				if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
					Z_ADDREF(generator->value);
				}
			} else if (IS_TMP_VAR == IS_TMP_VAR) {
				ZVAL_COPY_VALUE(&generator->value, value);
			} else if ((IS_TMP_VAR & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) {
				ZVAL_COPY(&generator->value, Z_REFVAL_P(value));


			} else {
				ZVAL_COPY_VALUE(&generator->value, value);
				if (IS_TMP_VAR == IS_CV) {
					if (Z_OPT_REFCOUNTED_P(value)) Z_ADDREF_P(value);
				}
			}
		}
	} else {
		/* If no value was specified yield null */
		ZVAL_NULL(&generator->value);
	}

	/* Set the new yielded key */
	if (IS_CV != IS_UNUSED) {
		zval *key = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
		if ((IS_CV & (IS_CV|IS_VAR)) && UNEXPECTED(Z_TYPE_P(key) == IS_REFERENCE)) {
			key = Z_REFVAL_P(key);
		}
		ZVAL_COPY(&generator->key, key);


		if (Z_TYPE(generator->key) == IS_LONG
		    && Z_LVAL(generator->key) > generator->largest_used_integer_key
		) {
			generator->largest_used_integer_key = Z_LVAL(generator->key);
		}
	} else {
		/* If no key was specified we use auto-increment keys */
		generator->largest_used_integer_key++;
		ZVAL_LONG(&generator->key, generator->largest_used_integer_key);
	}

	if (RETURN_VALUE_USED(opline)) {
		/* If the return value of yield is used set the send
		 * target and initialize it to NULL */
		generator->send_target = EX_VAR(opline->result.var);
		ZVAL_NULL(generator->send_target);
	} else {
		generator->send_target = NULL;
	}

	/* The GOTO VM uses a local opline variable. We need to set the opline
	 * variable in execute_data so we don't resume at an old position. */
	SAVE_OPLINE();

	ZEND_VM_RETURN();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_BIND_LEXICAL_SPEC_TMP_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *closure, *var;

	closure = _get_zval_ptr_tmp(opline->op1.var EXECUTE_DATA_CC);
	if (opline->extended_value & ZEND_BIND_REF) {
		/* By-ref binding */
		var = _get_zval_ptr_cv_BP_VAR_W(opline->op2.var EXECUTE_DATA_CC);
		if (Z_ISREF_P(var)) {
			Z_ADDREF_P(var);
		} else {
			ZVAL_MAKE_REF_EX(var, 2);
		}
	} else {
		var = EX_VAR(opline->op2.var);
		if (UNEXPECTED(Z_ISUNDEF_P(var)) && !(opline->extended_value & ZEND_BIND_IMPLICIT)) {
			SAVE_OPLINE();
			var = ZVAL_UNDEFINED_OP2();
			if (UNEXPECTED(EG(exception))) {
				HANDLE_EXCEPTION();
			}
		}
		ZVAL_DEREF(var);
		Z_TRY_ADDREF_P(var);
	}

	zend_closure_bind_var_ex(closure,
		(opline->extended_value & ~(ZEND_BIND_REF|ZEND_BIND_IMPLICIT)), var);
	ZEND_VM_NEXT_OPCODE();
}

static zend_never_inline ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV  zend_pre_inc_helper_SPEC_VAR(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *var_ptr;

	var_ptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);

	SAVE_OPLINE();
	if (IS_VAR == IS_CV && UNEXPECTED(Z_TYPE_P(var_ptr) == IS_UNDEF)) {
		ZVAL_UNDEFINED_OP1();
		ZVAL_NULL(var_ptr);
	}

	do {
		if (UNEXPECTED(Z_TYPE_P(var_ptr) == IS_REFERENCE)) {
			zend_reference *ref = Z_REF_P(var_ptr);
			var_ptr = Z_REFVAL_P(var_ptr);
			if (UNEXPECTED(ZEND_REF_HAS_TYPE_SOURCES(ref))) {
				zend_incdec_typed_ref(ref, NULL OPLINE_CC EXECUTE_DATA_CC);
				break;
			}
		}
		increment_function(var_ptr);
	} while (0);

	if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
		ZVAL_COPY(EX_VAR(opline->result.var), var_ptr);
	}

	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_PRE_INC_SPEC_VAR_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *var_ptr;

	var_ptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);

	if (EXPECTED(Z_TYPE_P(var_ptr) == IS_LONG)) {
		fast_long_increment_function(var_ptr);
		if (UNEXPECTED(0)) {
			ZVAL_COPY_VALUE(EX_VAR(opline->result.var), var_ptr);
		}
		ZEND_VM_NEXT_OPCODE();
	}

	ZEND_VM_TAIL_CALL(zend_pre_inc_helper_SPEC_VAR(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
}

static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_PRE_INC_SPEC_VAR_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *var_ptr;

	var_ptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);

	if (EXPECTED(Z_TYPE_P(var_ptr) == IS_LONG)) {
		fast_long_increment_function(var_ptr);
		if (UNEXPECTED(1)) {
			ZVAL_COPY_VALUE(EX_VAR(opline->result.var), var_ptr);
		}
		ZEND_VM_NEXT_OPCODE();
	}

	ZEND_VM_TAIL_CALL(zend_pre_inc_helper_SPEC_VAR(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
}

static zend_never_inline ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV  zend_pre_dec_helper_SPEC_VAR(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *var_ptr;

	var_ptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);

	SAVE_OPLINE();
	if (IS_VAR == IS_CV && UNEXPECTED(Z_TYPE_P(var_ptr) == IS_UNDEF)) {
		ZVAL_UNDEFINED_OP1();
		ZVAL_NULL(var_ptr);
	}

	do {
		if (UNEXPECTED(Z_TYPE_P(var_ptr) == IS_REFERENCE)) {
			zend_reference *ref = Z_REF_P(var_ptr);
			var_ptr = Z_REFVAL_P(var_ptr);

			if (UNEXPECTED(ZEND_REF_HAS_TYPE_SOURCES(ref))) {
				zend_incdec_typed_ref(ref, NULL OPLINE_CC EXECUTE_DATA_CC);
				break;
			}
		}
		decrement_function(var_ptr);
	} while (0);

	if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
		ZVAL_COPY(EX_VAR(opline->result.var), var_ptr);
	}

	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_PRE_DEC_SPEC_VAR_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *var_ptr;

	var_ptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);

	if (EXPECTED(Z_TYPE_P(var_ptr) == IS_LONG)) {
		fast_long_decrement_function(var_ptr);
		if (UNEXPECTED(0)) {
			ZVAL_COPY_VALUE(EX_VAR(opline->result.var), var_ptr);
		}
		ZEND_VM_NEXT_OPCODE();
	}

	ZEND_VM_TAIL_CALL(zend_pre_dec_helper_SPEC_VAR(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
}

static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_PRE_DEC_SPEC_VAR_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *var_ptr;

	var_ptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);

	if (EXPECTED(Z_TYPE_P(var_ptr) == IS_LONG)) {
		fast_long_decrement_function(var_ptr);
		if (UNEXPECTED(1)) {
			ZVAL_COPY_VALUE(EX_VAR(opline->result.var), var_ptr);
		}
		ZEND_VM_NEXT_OPCODE();
	}

	ZEND_VM_TAIL_CALL(zend_pre_dec_helper_SPEC_VAR(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
}

static zend_never_inline ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV  zend_post_inc_helper_SPEC_VAR(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *var_ptr;

	var_ptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);

	SAVE_OPLINE();
	if (IS_VAR == IS_CV && UNEXPECTED(Z_TYPE_P(var_ptr) == IS_UNDEF)) {
		ZVAL_UNDEFINED_OP1();
		ZVAL_NULL(var_ptr);
	}

	do {
		if (UNEXPECTED(Z_TYPE_P(var_ptr) == IS_REFERENCE)) {
			zend_reference *ref = Z_REF_P(var_ptr);
			var_ptr = Z_REFVAL_P(var_ptr);

			if (UNEXPECTED(ZEND_REF_HAS_TYPE_SOURCES(ref))) {
				zend_incdec_typed_ref(ref, EX_VAR(opline->result.var) OPLINE_CC EXECUTE_DATA_CC);
				break;
			}
		}
		ZVAL_COPY(EX_VAR(opline->result.var), var_ptr);

		increment_function(var_ptr);
	} while (0);

	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_POST_INC_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *var_ptr;

	var_ptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);

	if (EXPECTED(Z_TYPE_P(var_ptr) == IS_LONG)) {
		ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(var_ptr));
		fast_long_increment_function(var_ptr);
		ZEND_VM_NEXT_OPCODE();
	}

	ZEND_VM_TAIL_CALL(zend_post_inc_helper_SPEC_VAR(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
}

static zend_never_inline ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV  zend_post_dec_helper_SPEC_VAR(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *var_ptr;

	var_ptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);

	SAVE_OPLINE();
	if (IS_VAR == IS_CV && UNEXPECTED(Z_TYPE_P(var_ptr) == IS_UNDEF)) {
		ZVAL_UNDEFINED_OP1();
		ZVAL_NULL(var_ptr);
	}

	do {
		if (UNEXPECTED(Z_TYPE_P(var_ptr) == IS_REFERENCE)) {
			zend_reference *ref = Z_REF_P(var_ptr);
			var_ptr = Z_REFVAL_P(var_ptr);

			if (UNEXPECTED(ZEND_REF_HAS_TYPE_SOURCES(ref))) {
				zend_incdec_typed_ref(ref, EX_VAR(opline->result.var) OPLINE_CC EXECUTE_DATA_CC);
				break;
			}
		}
		ZVAL_COPY(EX_VAR(opline->result.var), var_ptr);

		decrement_function(var_ptr);
	} while (0);

	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_POST_DEC_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *var_ptr;

	var_ptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);

	if (EXPECTED(Z_TYPE_P(var_ptr) == IS_LONG)) {
		ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(var_ptr));
		fast_long_decrement_function(var_ptr);
		ZEND_VM_NEXT_OPCODE();
	}

	ZEND_VM_TAIL_CALL(zend_post_dec_helper_SPEC_VAR(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
}

static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_RETURN_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *retval_ptr;
	zval *return_value;


	retval_ptr = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
	return_value = EX(return_value);


	if (IS_VAR == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(retval_ptr) == IS_UNDEF)) {
		SAVE_OPLINE();
		retval_ptr = ZVAL_UNDEFINED_OP1();
		if (return_value) {
			ZVAL_NULL(return_value);
		}
	} else if (!return_value) {
		if (IS_VAR & (IS_VAR|IS_TMP_VAR)) {
			if (Z_REFCOUNTED_P(retval_ptr) && !Z_DELREF_P(retval_ptr)) {
				SAVE_OPLINE();
				rc_dtor_func(Z_COUNTED_P(retval_ptr));
			}
		}
	} else {
		if ((IS_VAR & (IS_CONST|IS_TMP_VAR))) {
			ZVAL_COPY_VALUE(return_value, retval_ptr);
			if (IS_VAR == IS_CONST) {
				if (UNEXPECTED(Z_OPT_REFCOUNTED_P(return_value))) {
					Z_ADDREF_P(return_value);
				}
			}
		} else if (IS_VAR == IS_CV) {
			do {
				if (Z_OPT_REFCOUNTED_P(retval_ptr)) {
					if (EXPECTED(!Z_OPT_ISREF_P(retval_ptr))) {
						if (EXPECTED(!(EX_CALL_INFO() & (ZEND_CALL_CODE|ZEND_CALL_OBSERVED)))) {
							zend_refcounted *ref = Z_COUNTED_P(retval_ptr);
							ZVAL_COPY_VALUE(return_value, retval_ptr);
							if (GC_MAY_LEAK(ref)) {
								SAVE_OPLINE();
								gc_possible_root(ref);
							}
							ZVAL_NULL(retval_ptr);
							break;
						} else {
							Z_ADDREF_P(retval_ptr);
						}
					} else {
						retval_ptr = Z_REFVAL_P(retval_ptr);
						if (Z_OPT_REFCOUNTED_P(retval_ptr)) {
							Z_ADDREF_P(retval_ptr);
						}
					}
				}
				ZVAL_COPY_VALUE(return_value, retval_ptr);
			} while (0);
		} else /* if (IS_VAR == IS_VAR) */ {
			if (UNEXPECTED(Z_ISREF_P(retval_ptr))) {
				zend_refcounted *ref = Z_COUNTED_P(retval_ptr);

				retval_ptr = Z_REFVAL_P(retval_ptr);
				ZVAL_COPY_VALUE(return_value, retval_ptr);
				if (UNEXPECTED(GC_DELREF(ref) == 0)) {
					efree_size(ref, sizeof(zend_reference));
				} else if (Z_OPT_REFCOUNTED_P(retval_ptr)) {
					Z_ADDREF_P(retval_ptr);
				}
			} else {
				ZVAL_COPY_VALUE(return_value, retval_ptr);
			}
		}
	}






	ZEND_VM_TAIL_CALL(zend_leave_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_RETURN_BY_REF_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *retval_ptr;
	zval *return_value;


	SAVE_OPLINE();

	return_value = EX(return_value);


	do {
		if ((IS_VAR & (IS_CONST|IS_TMP_VAR)) ||
		    (IS_VAR == IS_VAR && opline->extended_value == ZEND_RETURNS_VALUE)) {
			/* Not supposed to happen, but we'll allow it */
			zend_error(E_NOTICE, "Only variable references should be returned by reference");

			retval_ptr = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
			if (!return_value) {
				zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
			} else {
				if (IS_VAR == IS_VAR && UNEXPECTED(Z_ISREF_P(retval_ptr))) {
					ZVAL_COPY_VALUE(return_value, retval_ptr);
					break;
				}

				ZVAL_NEW_REF(return_value, retval_ptr);
				if (IS_VAR == IS_CONST) {
					Z_TRY_ADDREF_P(retval_ptr);
				}
			}
			break;
		}

		retval_ptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);

		if (IS_VAR == IS_VAR) {
			ZEND_ASSERT(retval_ptr != &EG(uninitialized_zval));
			if (opline->extended_value == ZEND_RETURNS_FUNCTION && !Z_ISREF_P(retval_ptr)) {
				zend_error(E_NOTICE, "Only variable references should be returned by reference");
				if (return_value) {
					ZVAL_NEW_REF(return_value, retval_ptr);
				} else {
					zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
				}
				break;
			}
		}

		if (return_value) {
			if (Z_ISREF_P(retval_ptr)) {
				Z_ADDREF_P(retval_ptr);
			} else {
				ZVAL_MAKE_REF_EX(retval_ptr, 2);
			}
			ZVAL_REF(return_value, Z_REF_P(retval_ptr));
		}

		zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
	} while (0);




	ZEND_VM_TAIL_CALL(zend_leave_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_GENERATOR_RETURN_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *retval;

	zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C);

	SAVE_OPLINE();
	retval = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);

	/* Copy return value into generator->retval */
	if ((IS_VAR & (IS_CONST|IS_TMP_VAR))) {
		ZVAL_COPY_VALUE(&generator->retval, retval);
		if (IS_VAR == IS_CONST) {
			if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->retval))) {
				Z_ADDREF(generator->retval);
			}
		}
	} else if (IS_VAR == IS_CV) {
		ZVAL_COPY_DEREF(&generator->retval, retval);
	} else /* if (IS_VAR == IS_VAR) */ {
		if (UNEXPECTED(Z_ISREF_P(retval))) {
			zend_refcounted *ref = Z_COUNTED_P(retval);

			retval = Z_REFVAL_P(retval);
			ZVAL_COPY_VALUE(&generator->retval, retval);
			if (UNEXPECTED(GC_DELREF(ref) == 0)) {
				efree_size(ref, sizeof(zend_reference));
			} else if (Z_OPT_REFCOUNTED_P(retval)) {
				Z_ADDREF_P(retval);
			}
		} else {
			ZVAL_COPY_VALUE(&generator->retval, retval);
		}
	}


	EG(current_execute_data) = EX(prev_execute_data);

	/* Close the generator to free up resources */
	zend_generator_close(generator, 1);

	/* Pass execution back to handling code */
	ZEND_VM_RETURN();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_SEND_USER_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *arg, *param;

	SAVE_OPLINE();

	arg = _get_zval_ptr_var_deref(opline->op1.var EXECUTE_DATA_CC);
	param = ZEND_CALL_VAR(EX(call), opline->result.var);
	if (UNEXPECTED(ARG_MUST_BE_SENT_BY_REF(EX(call)->func, opline->op2.num))) {
		zend_param_must_be_ref(EX(call)->func, opline->op2.num);
		Z_TRY_ADDREF_P(arg);
		ZVAL_NEW_REF(param, arg);
	} else {
		ZVAL_COPY(param, arg);
	}

	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_CAST_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *expr;
	zval *result = EX_VAR(opline->result.var);

	SAVE_OPLINE();
	expr = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);

	switch (opline->extended_value) {
		case IS_LONG:
			ZVAL_LONG(result, zval_get_long(expr));
			break;
		case IS_DOUBLE:
			ZVAL_DOUBLE(result, zval_get_double(expr));
			break;
		case IS_STRING:
			ZVAL_STR(result, zval_get_string(expr));
			break;
		default:
			ZEND_ASSERT(opline->extended_value != _IS_BOOL && "Must use ZEND_BOOL instead");
			if (IS_VAR & (IS_VAR|IS_CV)) {
				ZVAL_DEREF(expr);
			}
			/* If value is already of correct type, return it directly */
			if (Z_TYPE_P(expr) == opline->extended_value) {
				ZVAL_COPY_VALUE(result, expr);
				if (IS_VAR == IS_CONST) {
					if (UNEXPECTED(Z_OPT_REFCOUNTED_P(result))) Z_ADDREF_P(result);
				} else if (IS_VAR != IS_TMP_VAR) {
					if (Z_OPT_REFCOUNTED_P(result)) Z_ADDREF_P(result);
				}

				zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
				ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
			}

			if (opline->extended_value == IS_ARRAY) {
				zend_cast_zval_to_array(result, expr, IS_VAR);
			} else {
				ZEND_ASSERT(opline->extended_value == IS_OBJECT);
				zend_cast_zval_to_object(result, expr, IS_VAR);
			}
	}

	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_FE_RESET_R_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *array_ptr, *result;

	SAVE_OPLINE();

	array_ptr = _get_zval_ptr_var_deref(opline->op1.var EXECUTE_DATA_CC);
	if (EXPECTED(Z_TYPE_P(array_ptr) == IS_ARRAY)) {
		result = EX_VAR(opline->result.var);
		ZVAL_COPY_VALUE(result, array_ptr);
		if (IS_VAR != IS_TMP_VAR && Z_OPT_REFCOUNTED_P(result)) {
			Z_ADDREF_P(array_ptr);
		}
		Z_FE_POS_P(result) = 0;

		zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
		ZEND_VM_NEXT_OPCODE();
	} else if (IS_VAR != IS_CONST && EXPECTED(Z_TYPE_P(array_ptr) == IS_OBJECT)) {
		zend_object *zobj = Z_OBJ_P(array_ptr);
		if (!zobj->ce->get_iterator) {
			if (UNEXPECTED(zend_object_is_lazy(zobj))) {
				zobj = zend_lazy_object_init(zobj);
				if (UNEXPECTED(EG(exception))) {
					UNDEF_RESULT();
					zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
					HANDLE_EXCEPTION();
				}
			}
			HashTable *properties = zobj->properties;
			if (properties) {
				if (UNEXPECTED(GC_REFCOUNT(properties) > 1)) {
					if (EXPECTED(!(GC_FLAGS(properties) & IS_ARRAY_IMMUTABLE))) {
						GC_DELREF(properties);
					}
					properties = zobj->properties = zend_array_dup(properties);
				}
			} else {
				properties = zobj->handlers->get_properties(zobj);
			}

			result = EX_VAR(opline->result.var);
			ZVAL_COPY_VALUE(result, array_ptr);
			if (IS_VAR != IS_TMP_VAR) {
				Z_ADDREF_P(array_ptr);
			}

			if (zend_hash_num_elements(properties) == 0) {
				Z_FE_ITER_P(result) = (uint32_t) -1;
				zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
				ZEND_VM_JMP(OP_JMP_ADDR(opline, opline->op2));
			}

			Z_FE_ITER_P(result) = zend_hash_iterator_add(properties, 0);
			zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
			ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
		} else {
			bool is_empty = zend_fe_reset_iterator(array_ptr, 0 OPLINE_CC EXECUTE_DATA_CC);

			zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
			if (UNEXPECTED(EG(exception))) {
				HANDLE_EXCEPTION();
			} else if (is_empty) {
				ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0);
			} else {
				ZEND_VM_NEXT_OPCODE();
			}
		}
	} else {
		zend_error(E_WARNING, "foreach() argument must be of type array|object, %s given", zend_zval_value_name(array_ptr));
		ZVAL_UNDEF(EX_VAR(opline->result.var));
		Z_FE_ITER_P(EX_VAR(opline->result.var)) = (uint32_t)-1;
		zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
		ZEND_VM_JMP(OP_JMP_ADDR(opline, opline->op2));
	}
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_FE_RESET_RW_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *array_ptr, *array_ref;

	SAVE_OPLINE();

	if (IS_VAR == IS_VAR || IS_VAR == IS_CV) {
		array_ref = array_ptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
		if (Z_ISREF_P(array_ref)) {
			array_ptr = Z_REFVAL_P(array_ref);
		}
	} else {
		array_ref = array_ptr = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
	}

	if (EXPECTED(Z_TYPE_P(array_ptr) == IS_ARRAY)) {
		if (IS_VAR == IS_VAR || IS_VAR == IS_CV) {
			if (array_ptr == array_ref) {
				ZVAL_NEW_REF(array_ref, array_ref);
				array_ptr = Z_REFVAL_P(array_ref);
			}
			Z_ADDREF_P(array_ref);
			ZVAL_COPY_VALUE(EX_VAR(opline->result.var), array_ref);
		} else {
			array_ref = EX_VAR(opline->result.var);
			ZVAL_NEW_REF(array_ref, array_ptr);
			array_ptr = Z_REFVAL_P(array_ref);
		}
		if (IS_VAR == IS_CONST) {
			ZVAL_ARR(array_ptr, zend_array_dup(Z_ARRVAL_P(array_ptr)));
		} else {
			SEPARATE_ARRAY(array_ptr);
		}
		Z_FE_ITER_P(EX_VAR(opline->result.var)) = zend_hash_iterator_add(Z_ARRVAL_P(array_ptr), 0);

		zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
		ZEND_VM_NEXT_OPCODE();
	} else if (IS_VAR != IS_CONST && EXPECTED(Z_TYPE_P(array_ptr) == IS_OBJECT)) {
		if (!Z_OBJCE_P(array_ptr)->get_iterator) {
			zend_object *zobj = Z_OBJ_P(array_ptr);
			HashTable *properties;
			if (UNEXPECTED(zend_object_is_lazy(zobj))) {
				zobj = zend_lazy_object_init(zobj);
				if (UNEXPECTED(EG(exception))) {
					UNDEF_RESULT();
					zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
					HANDLE_EXCEPTION();
				}
			}
			if (IS_VAR == IS_VAR || IS_VAR == IS_CV) {
				if (array_ptr == array_ref) {
					ZVAL_NEW_REF(array_ref, array_ref);
					array_ptr = Z_REFVAL_P(array_ref);
				}
				Z_ADDREF_P(array_ref);
				ZVAL_COPY_VALUE(EX_VAR(opline->result.var), array_ref);
			} else {
				array_ptr = EX_VAR(opline->result.var);
				ZVAL_COPY_VALUE(array_ptr, array_ref);
			}
			if (Z_OBJ_P(array_ptr)->properties
			 && UNEXPECTED(GC_REFCOUNT(Z_OBJ_P(array_ptr)->properties) > 1)) {
				if (EXPECTED(!(GC_FLAGS(Z_OBJ_P(array_ptr)->properties) & IS_ARRAY_IMMUTABLE))) {
					GC_DELREF(Z_OBJ_P(array_ptr)->properties);
				}
				Z_OBJ_P(array_ptr)->properties = zend_array_dup(Z_OBJ_P(array_ptr)->properties);
			}

			properties = Z_OBJPROP_P(array_ptr);
			if (zend_hash_num_elements(properties) == 0) {
				Z_FE_ITER_P(EX_VAR(opline->result.var)) = (uint32_t) -1;
				zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
				ZEND_VM_JMP(OP_JMP_ADDR(opline, opline->op2));
			}

			Z_FE_ITER_P(EX_VAR(opline->result.var)) = zend_hash_iterator_add(properties, 0);
			zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
			ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
		} else {
			bool is_empty = zend_fe_reset_iterator(array_ptr, 1 OPLINE_CC EXECUTE_DATA_CC);
			zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
			if (UNEXPECTED(EG(exception))) {
				HANDLE_EXCEPTION();
			} else if (is_empty) {
				ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0);
			} else {
				ZEND_VM_NEXT_OPCODE();
			}
		}
	} else {
		zend_error(E_WARNING, "foreach() argument must be of type array|object, %s given", zend_zval_value_name(array_ptr));
		ZVAL_UNDEF(EX_VAR(opline->result.var));
		Z_FE_ITER_P(EX_VAR(opline->result.var)) = (uint32_t)-1;
		zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
		ZEND_VM_JMP(OP_JMP_ADDR(opline, opline->op2));
	}
}

static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_FE_FETCH_R_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *array;
	zval *value;
	uint32_t value_type;
	HashTable *fe_ht;
	HashPosition pos;

	array = EX_VAR(opline->op1.var);
	if (UNEXPECTED(Z_TYPE_P(array) != IS_ARRAY)) {
		ZEND_VM_TAIL_CALL(zend_fe_fetch_object_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
	}
	fe_ht = Z_ARRVAL_P(array);
	pos = Z_FE_POS_P(array);
	if (HT_IS_PACKED(fe_ht)) {
		value = fe_ht->arPacked + pos;
		while (1) {
			if (UNEXPECTED(pos >= fe_ht->nNumUsed)) {
				/* reached end of iteration */
				ZEND_VM_SET_RELATIVE_OPCODE(opline, opline->extended_value);
				ZEND_VM_CONTINUE();
			}
			value_type = Z_TYPE_INFO_P(value);
			ZEND_ASSERT(value_type != IS_INDIRECT);
			if (EXPECTED(value_type != IS_UNDEF)) {
				break;
			}
			pos++;
			value++;
		}
		Z_FE_POS_P(array) = pos + 1;
		if (RETURN_VALUE_USED(opline)) {
			ZVAL_LONG(EX_VAR(opline->result.var), pos);
		}
	} else {
		Bucket *p;

		p = fe_ht->arData + pos;
		while (1) {
			if (UNEXPECTED(pos >= fe_ht->nNumUsed)) {
				/* reached end of iteration */
				ZEND_VM_SET_RELATIVE_OPCODE(opline, opline->extended_value);
				ZEND_VM_CONTINUE();
			}
			pos++;
			value = &p->val;
			value_type = Z_TYPE_INFO_P(value);
			ZEND_ASSERT(value_type != IS_INDIRECT);
			if (EXPECTED(value_type != IS_UNDEF)) {
				break;
			}
			p++;
		}
		Z_FE_POS_P(array) = pos;
		if (RETURN_VALUE_USED(opline)) {
			if (!p->key) {
				ZVAL_LONG(EX_VAR(opline->result.var), p->h);
			} else {
				ZVAL_STR_COPY(EX_VAR(opline->result.var), p->key);
			}
		}
	}
	if (EXPECTED(opline->op2_type == IS_CV)) {
		zval *variable_ptr = EX_VAR(opline->op2.var);
		SAVE_OPLINE();
		zend_assign_to_variable(variable_ptr, value, IS_CV, EX_USES_STRICT_TYPES());
		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
	} else {
		zval *res = EX_VAR(opline->op2.var);
		zend_refcounted *gc = Z_COUNTED_P(value);

		ZVAL_COPY_VALUE_EX(res, value, gc, value_type);
		if (Z_TYPE_INFO_REFCOUNTED(value_type)) {
			GC_ADDREF(gc);
		}
		ZEND_VM_NEXT_OPCODE();
	}
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_FE_FETCH_RW_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *array;
	zval *value;
	uint32_t value_type;
	HashTable *fe_ht;
	HashPosition pos;
	Bucket *p;

	array = EX_VAR(opline->op1.var);
	SAVE_OPLINE();

	ZVAL_DEREF(array);
	if (EXPECTED(Z_TYPE_P(array) == IS_ARRAY)) {
		pos = zend_hash_iterator_pos_ex(Z_FE_ITER_P(EX_VAR(opline->op1.var)), array);
		fe_ht = Z_ARRVAL_P(array);
		if (HT_IS_PACKED(fe_ht)) {
			value = fe_ht->arPacked + pos;
			while (1) {
				if (UNEXPECTED(pos >= fe_ht->nNumUsed)) {
					/* reached end of iteration */
					goto fe_fetch_w_exit;
				}
				value_type = Z_TYPE_INFO_P(value);
				ZEND_ASSERT(value_type != IS_INDIRECT);
				if (EXPECTED(value_type != IS_UNDEF)) {
					break;
				}
				pos++;
				value++;
			}
			EG(ht_iterators)[Z_FE_ITER_P(EX_VAR(opline->op1.var))].pos = pos + 1;
			if (RETURN_VALUE_USED(opline)) {
				ZVAL_LONG(EX_VAR(opline->result.var), pos);
			}
		} else {
			p = fe_ht->arData + pos;
			while (1) {
				if (UNEXPECTED(pos >= fe_ht->nNumUsed)) {
					/* reached end of iteration */
					goto fe_fetch_w_exit;
				}
				pos++;
				value = &p->val;
				value_type = Z_TYPE_INFO_P(value);
				ZEND_ASSERT(value_type != IS_INDIRECT);
				if (EXPECTED(value_type != IS_UNDEF)) {
					break;
				}
				p++;
			}
			EG(ht_iterators)[Z_FE_ITER_P(EX_VAR(opline->op1.var))].pos = pos;
			if (RETURN_VALUE_USED(opline)) {
				if (!p->key) {
					ZVAL_LONG(EX_VAR(opline->result.var), p->h);
				} else {
					ZVAL_STR_COPY(EX_VAR(opline->result.var), p->key);
				}
			}
		}
	} else if (EXPECTED(Z_TYPE_P(array) == IS_OBJECT)) {
		zend_object_iterator *iter;

		if ((iter = zend_iterator_unwrap(array)) == NULL) {
			/* plain object */

			fe_ht = Z_OBJPROP_P(array);
			pos = zend_hash_iterator_pos(Z_FE_ITER_P(EX_VAR(opline->op1.var)), fe_ht);
			p = fe_ht->arData + pos;
			while (1) {
				if (UNEXPECTED(pos >= fe_ht->nNumUsed)) {
					/* reached end of iteration */
					goto fe_fetch_w_exit_exc;
				}
				pos++;
				value = &p->val;
				value_type = Z_TYPE_INFO_P(value);
				if (EXPECTED(value_type != IS_UNDEF)) {
					if (UNEXPECTED(value_type == IS_INDIRECT)) {
						value = Z_INDIRECT_P(value);
						value_type = Z_TYPE_INFO_P(value);
						if (EXPECTED(value_type != IS_UNDEF)
						 && EXPECTED(zend_check_property_access(Z_OBJ_P(array), p->key, 0) == SUCCESS)) {
							if ((value_type & Z_TYPE_MASK) != IS_REFERENCE) {
								zend_property_info *prop_info =
									zend_get_property_info_for_slot(Z_OBJ_P(array), value);
								if (prop_info) {
									if (UNEXPECTED(prop_info->flags & ZEND_ACC_READONLY)) {
										zend_throw_error(NULL,
											"Cannot acquire reference to readonly property %s::$%s",
											ZSTR_VAL(prop_info->ce->name), ZSTR_VAL(p->key));
										UNDEF_RESULT();
										HANDLE_EXCEPTION();
									}
									if (ZEND_TYPE_IS_SET(prop_info->type)) {
										ZVAL_NEW_REF(value, value);
										ZEND_REF_ADD_TYPE_SOURCE(Z_REF_P(value), prop_info);
										value_type = IS_REFERENCE_EX;
									}
								}
							}
							break;
						}
					} else if (EXPECTED(Z_OBJCE_P(array)->default_properties_count == 0)
							|| !p->key
							|| zend_check_property_access(Z_OBJ_P(array), p->key, 1) == SUCCESS) {
						break;
					}
				}
				p++;
			}
			EG(ht_iterators)[Z_FE_ITER_P(EX_VAR(opline->op1.var))].pos = pos;
			if (RETURN_VALUE_USED(opline)) {
				if (UNEXPECTED(!p->key)) {
					ZVAL_LONG(EX_VAR(opline->result.var), p->h);
				} else if (ZSTR_VAL(p->key)[0]) {
					ZVAL_STR_COPY(EX_VAR(opline->result.var), p->key);
				} else {
					const char *class_name, *prop_name;
					size_t prop_name_len;
					zend_unmangle_property_name_ex(
						p->key, &class_name, &prop_name, &prop_name_len);
					ZVAL_STRINGL(EX_VAR(opline->result.var), prop_name, prop_name_len);
				}
			}
		} else {
			const zend_object_iterator_funcs *funcs = iter->funcs;
			if (++iter->index > 0) {
				/* This could cause an endless loop if index becomes zero again.
				 * In case that ever happens we need an additional flag. */
				funcs->move_forward(iter);
				if (UNEXPECTED(EG(exception) != NULL)) {
					UNDEF_RESULT();
					HANDLE_EXCEPTION();
				}
				if (UNEXPECTED(funcs->valid(iter) == FAILURE)) {
					/* reached end of iteration */
					if (UNEXPECTED(EG(exception) != NULL)) {
						UNDEF_RESULT();
						HANDLE_EXCEPTION();
					}
					goto fe_fetch_w_exit;
				}
			}
			value = funcs->get_current_data(iter);
			if (UNEXPECTED(EG(exception) != NULL)) {
				UNDEF_RESULT();
				HANDLE_EXCEPTION();
			}
			if (!value) {
				/* failure in get_current_data */
				goto fe_fetch_w_exit;
			}
			if (RETURN_VALUE_USED(opline)) {
				if (funcs->get_current_key) {
					funcs->get_current_key(iter, EX_VAR(opline->result.var));
					if (UNEXPECTED(EG(exception) != NULL)) {
						UNDEF_RESULT();
						HANDLE_EXCEPTION();
					}
				} else {
					ZVAL_LONG(EX_VAR(opline->result.var), iter->index);
				}
			}
			value_type = Z_TYPE_INFO_P(value);
		}
	} else {
		zend_error(E_WARNING, "foreach() argument must be of type array|object, %s given", zend_zval_value_name(array));
fe_fetch_w_exit_exc:
		if (UNEXPECTED(EG(exception))) {
			UNDEF_RESULT();
			HANDLE_EXCEPTION();
		}
fe_fetch_w_exit:
		ZEND_VM_SET_RELATIVE_OPCODE(opline, opline->extended_value);
		ZEND_VM_CONTINUE();
	}

	if (EXPECTED((value_type & Z_TYPE_MASK) != IS_REFERENCE)) {
		zend_refcounted *gc = Z_COUNTED_P(value);
		zval *ref;
		ZVAL_NEW_EMPTY_REF(value);
		ref = Z_REFVAL_P(value);
		ZVAL_COPY_VALUE_EX(ref, value, gc, value_type);
	}
	if (EXPECTED(opline->op2_type == IS_CV)) {
		zval *variable_ptr = EX_VAR(opline->op2.var);
		if (EXPECTED(variable_ptr != value)) {
			zend_reference *ref;

			ref = Z_REF_P(value);
			GC_ADDREF(ref);
			i_zval_ptr_dtor(variable_ptr);
			ZVAL_REF(variable_ptr, ref);
		}
	} else {
		Z_ADDREF_P(value);
		ZVAL_REF(EX_VAR(opline->op2.var), Z_REF_P(value));
	}
	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_JMP_SET_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *value;
	zend_reference *ref = NULL;
	bool ret;

	SAVE_OPLINE();
	value = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);

	if ((IS_VAR == IS_VAR || IS_VAR == IS_CV) && Z_ISREF_P(value)) {
		if (IS_VAR == IS_VAR) {
			ref = Z_REF_P(value);
		}
		value = Z_REFVAL_P(value);
	}

	ret = i_zend_is_true(value);

	if (UNEXPECTED(EG(exception))) {
		zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
		ZVAL_UNDEF(EX_VAR(opline->result.var));
		HANDLE_EXCEPTION();
	}

	if (ret) {
		zval *result = EX_VAR(opline->result.var);

		ZVAL_COPY_VALUE(result, value);
		if (IS_VAR == IS_CONST) {
			if (UNEXPECTED(Z_OPT_REFCOUNTED_P(result))) Z_ADDREF_P(result);
		} else if (IS_VAR == IS_CV) {
			if (Z_OPT_REFCOUNTED_P(result)) Z_ADDREF_P(result);
		} else if (IS_VAR == IS_VAR && ref) {
			if (UNEXPECTED(GC_DELREF(ref) == 0)) {
				efree_size(ref, sizeof(zend_reference));
			} else if (Z_OPT_REFCOUNTED_P(result)) {
				Z_ADDREF_P(result);
			}
		}
		ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0);
	}

	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
	ZEND_VM_NEXT_OPCODE();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_COALESCE_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *value;
	zend_reference *ref = NULL;

	SAVE_OPLINE();
	value = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);

	if ((IS_VAR & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) {
		if (IS_VAR & IS_VAR) {
			ref = Z_REF_P(value);
		}
		value = Z_REFVAL_P(value);
	}

	if (Z_TYPE_P(value) > IS_NULL) {
		zval *result = EX_VAR(opline->result.var);
		ZVAL_COPY_VALUE(result, value);
		if (IS_VAR == IS_CONST) {
			if (UNEXPECTED(Z_OPT_REFCOUNTED_P(result))) Z_ADDREF_P(result);
		} else if (IS_VAR == IS_CV) {
			if (Z_OPT_REFCOUNTED_P(result)) Z_ADDREF_P(result);
		} else if ((IS_VAR & IS_VAR) && ref) {
			if (UNEXPECTED(GC_DELREF(ref) == 0)) {
				efree_size(ref, sizeof(zend_reference));
			} else if (Z_OPT_REFCOUNTED_P(result)) {
				Z_ADDREF_P(result);
			}
		}
		ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0);
	}

	if ((IS_VAR & IS_VAR) && ref) {
		if (UNEXPECTED(GC_DELREF(ref) == 0)) {
			efree_size(ref, sizeof(zend_reference));
		}
	}
	ZEND_VM_NEXT_OPCODE();
}

static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_JMP_NULL_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *val, *result;

	val = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);

	if (Z_TYPE_P(val) > IS_NULL) {
		do {
			if ((IS_VAR == IS_CV || IS_VAR == IS_VAR) && Z_TYPE_P(val) == IS_REFERENCE) {
				val = Z_REFVAL_P(val);
				if (Z_TYPE_P(val) <= IS_NULL) {
					zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
					break;
				}
			}
			ZEND_VM_NEXT_OPCODE();
		} while (0);
	}

	result = EX_VAR(opline->result.var);
	uint32_t short_circuiting_type = opline->extended_value & ZEND_SHORT_CIRCUITING_CHAIN_MASK;
	if (EXPECTED(short_circuiting_type == ZEND_SHORT_CIRCUITING_CHAIN_EXPR)) {
		ZVAL_NULL(result);
		if (IS_VAR == IS_CV
			&& UNEXPECTED(Z_TYPE_P(val) == IS_UNDEF)
			&& (opline->extended_value & ZEND_JMP_NULL_BP_VAR_IS) == 0
		) {
			SAVE_OPLINE();
			ZVAL_UNDEFINED_OP1();
			if (UNEXPECTED(EG(exception) != NULL)) {
				HANDLE_EXCEPTION();
			}
		}
	} else if (short_circuiting_type == ZEND_SHORT_CIRCUITING_CHAIN_ISSET) {
		ZVAL_FALSE(result);
	} else {
		ZEND_ASSERT(short_circuiting_type == ZEND_SHORT_CIRCUITING_CHAIN_EMPTY);
		ZVAL_TRUE(result);
	}

	ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0);
}

static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_QM_ASSIGN_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *value;
	zval *result = EX_VAR(opline->result.var);

	value = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
	if (IS_VAR == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
		SAVE_OPLINE();
		ZVAL_UNDEFINED_OP1();
		ZVAL_NULL(result);
		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
	}

	if (IS_VAR == IS_CV) {
		ZVAL_COPY_DEREF(result, value);
	} else if (IS_VAR == IS_VAR) {
		if (UNEXPECTED(Z_ISREF_P(value))) {
			ZVAL_COPY_VALUE(result, Z_REFVAL_P(value));
			if (UNEXPECTED(Z_DELREF_P(value) == 0)) {
				efree_size(Z_REF_P(value), sizeof(zend_reference));
			} else if (Z_OPT_REFCOUNTED_P(result)) {
				Z_ADDREF_P(result);
			}
		} else {
			ZVAL_COPY_VALUE(result, value);
		}
	} else {
		ZVAL_COPY_VALUE(result, value);
		if (IS_VAR == IS_CONST) {
			if (UNEXPECTED(Z_OPT_REFCOUNTED_P(result))) {
				Z_ADDREF_P(result);
			}
		}
	}
	ZEND_VM_NEXT_OPCODE();
}

static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_SEND_VAR_SIMPLE_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *varptr, *arg;

	varptr = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
	arg = ZEND_CALL_VAR(EX(call), opline->result.var);

	if (IS_VAR == IS_CV) {
		ZVAL_COPY(arg, varptr);
	} else /* if (IS_VAR == IS_VAR) */ {
		ZVAL_COPY_VALUE(arg, varptr);
	}

	ZEND_VM_NEXT_OPCODE();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_IS_IDENTICAL_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;
	bool result;

	SAVE_OPLINE();
	op1 = _get_zval_ptr_var_deref(opline->op1.var EXECUTE_DATA_CC);
	op2 = RT_CONSTANT(opline, opline->op2);
	result = fast_is_identical_function(op1, op2);
	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));


	ZEND_VM_SMART_BRANCH(result, 1);
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_CASE_STRICT_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;
	bool result;

	SAVE_OPLINE();
	op1 = _get_zval_ptr_var_deref(opline->op1.var EXECUTE_DATA_CC);
	op2 = RT_CONSTANT(opline, opline->op2);
	result = fast_is_identical_function(op1, op2);


	ZEND_VM_SMART_BRANCH(result, 1);
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_IS_NOT_IDENTICAL_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;
	bool result;

	SAVE_OPLINE();
	op1 = _get_zval_ptr_var_deref(opline->op1.var EXECUTE_DATA_CC);
	op2 = RT_CONSTANT(opline, opline->op2);
	result = fast_is_not_identical_function(op1, op2);
	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));


	ZEND_VM_SMART_BRANCH(result, 1);
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_ASSIGN_OBJ_OP_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *object;
	zval *property;
	zval *value;
	zval *zptr;
	void *_cache_slot[3] = {0};
	void **cache_slot;
	zend_property_info *prop_info;
	zend_object *zobj;
	zend_string *name, *tmp_name;

	SAVE_OPLINE();
	object = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
	property = RT_CONSTANT(opline, opline->op2);

	do {
		value = get_op_data_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1);

		if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
			if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
				object = Z_REFVAL_P(object);
				goto assign_op_object;
			}
			if (IS_VAR == IS_CV
			 && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
				ZVAL_UNDEFINED_OP1();
			}
			zend_throw_non_object_error(object, property OPLINE_CC EXECUTE_DATA_CC);
			break;
		}

assign_op_object:
		/* here we are sure we are dealing with an object */
		zobj = Z_OBJ_P(object);
		if (IS_CONST == IS_CONST) {
			name = Z_STR_P(property);
		} else {
			name = zval_try_get_tmp_string(property, &tmp_name);
			if (UNEXPECTED(!name)) {
				UNDEF_RESULT();
				break;
			}
		}
		cache_slot = (IS_CONST == IS_CONST) ? CACHE_ADDR((opline+1)->extended_value) : _cache_slot;
		if (EXPECTED((zptr = zobj->handlers->get_property_ptr_ptr(zobj, name, BP_VAR_RW, cache_slot)) != NULL)) {
			if (UNEXPECTED(Z_ISERROR_P(zptr))) {
				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
					ZVAL_NULL(EX_VAR(opline->result.var));
				}
			} else {
				zend_reference *ref;

				do {
					if (UNEXPECTED(Z_ISREF_P(zptr))) {
						ref = Z_REF_P(zptr);
						zptr = Z_REFVAL_P(zptr);
						if (UNEXPECTED(ZEND_REF_HAS_TYPE_SOURCES(ref))) {
							zend_binary_assign_op_typed_ref(ref, value OPLINE_CC EXECUTE_DATA_CC);
							break;
						}
					}

					prop_info = (zend_property_info*)CACHED_PTR_EX(cache_slot + 2);
					if (prop_info && ZEND_TYPE_IS_SET(prop_info->type)) {
						/* special case for typed properties */
						zend_binary_assign_op_typed_prop(prop_info, zptr, value OPLINE_CC EXECUTE_DATA_CC);
					} else {
						zend_binary_op(zptr, zptr, value OPLINE_CC);
					}
				} while (0);

				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
					ZVAL_COPY(EX_VAR(opline->result.var), zptr);
				}
			}
		} else {
			zend_assign_op_overloaded_property(zobj, name, cache_slot, value OPLINE_CC EXECUTE_DATA_CC);
		}
		if (IS_CONST != IS_CONST) {
			zend_tmp_string_release(tmp_name);
		}
	} while (0);

	FREE_OP((opline+1)->op1_type, (opline+1)->op1.var);


	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
	/* assign_obj has two opcodes! */
	ZEND_VM_NEXT_OPCODE_EX(1, 2);
}

/* No specialization for op_types (CONST|TMP|VAR|CV, UNUSED|CONST|TMPVAR) */
static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_ASSIGN_DIM_OP_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *var_ptr;
	zval *value, *container, *dim;
	HashTable *ht;

	SAVE_OPLINE();
	container = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);

	if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
assign_dim_op_array:
		SEPARATE_ARRAY(container);
		ht = Z_ARRVAL_P(container);
assign_dim_op_new_array:
		dim = RT_CONSTANT(opline, opline->op2);
		if (IS_CONST == IS_UNUSED) {
			var_ptr = zend_hash_next_index_insert(ht, &EG(uninitialized_zval));
			if (UNEXPECTED(!var_ptr)) {
				zend_cannot_add_element();
				goto assign_dim_op_ret_null;
			}
		} else {
			if (IS_CONST == IS_CONST) {
				var_ptr = zend_fetch_dimension_address_inner_RW_CONST(ht, dim EXECUTE_DATA_CC);
			} else {
				var_ptr = zend_fetch_dimension_address_inner_RW(ht, dim EXECUTE_DATA_CC);
			}
			if (UNEXPECTED(!var_ptr)) {
				goto assign_dim_op_ret_null;
			}
		}

		value = get_op_data_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1);

		do {
			if (IS_CONST != IS_UNUSED && UNEXPECTED(Z_ISREF_P(var_ptr))) {
				zend_reference *ref = Z_REF_P(var_ptr);
				var_ptr = Z_REFVAL_P(var_ptr);
				if (UNEXPECTED(ZEND_REF_HAS_TYPE_SOURCES(ref))) {
					zend_binary_assign_op_typed_ref(ref, value OPLINE_CC EXECUTE_DATA_CC);
					break;
				}
			}
			zend_binary_op(var_ptr, var_ptr, value OPLINE_CC);
		} while (0);

		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
			ZVAL_COPY(EX_VAR(opline->result.var), var_ptr);
		}
		FREE_OP((opline+1)->op1_type, (opline+1)->op1.var);
	} else {
		if (EXPECTED(Z_ISREF_P(container))) {
			container = Z_REFVAL_P(container);
			if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
				goto assign_dim_op_array;
			}
		}

		if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
			zend_object *obj = Z_OBJ_P(container);

			dim = RT_CONSTANT(opline, opline->op2);
			if (IS_CONST == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
				dim++;
			}
			zend_binary_assign_op_obj_dim(obj, dim OPLINE_CC EXECUTE_DATA_CC);
		} else if (EXPECTED(Z_TYPE_P(container) <= IS_FALSE)) {
			uint8_t old_type;

			if (IS_VAR == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(container) == IS_UNDEF)) {
				ZVAL_UNDEFINED_OP1();
			}
			ht = zend_new_array(8);
			old_type = Z_TYPE_P(container);
			ZVAL_ARR(container, ht);
			if (UNEXPECTED(old_type == IS_FALSE)) {
				GC_ADDREF(ht);
				zend_false_to_array_deprecated();
				if (UNEXPECTED(GC_DELREF(ht) == 0)) {
					zend_array_destroy(ht);
					goto assign_dim_op_ret_null;
				}
			}
			goto assign_dim_op_new_array;
		} else {
			dim = RT_CONSTANT(opline, opline->op2);
			zend_binary_assign_op_dim_slow(container, dim OPLINE_CC EXECUTE_DATA_CC);
assign_dim_op_ret_null:
			FREE_OP((opline+1)->op1_type, (opline+1)->op1.var);
			if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
				ZVAL_NULL(EX_VAR(opline->result.var));
			}
		}
	}


	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
	ZEND_VM_NEXT_OPCODE_EX(1, 2);
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_ASSIGN_OP_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *var_ptr;
	zval *value;

	SAVE_OPLINE();
	value = RT_CONSTANT(opline, opline->op2);
	var_ptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);

	do {
		if (UNEXPECTED(Z_TYPE_P(var_ptr) == IS_REFERENCE)) {
			zend_reference *ref = Z_REF_P(var_ptr);
			var_ptr = Z_REFVAL_P(var_ptr);
			if (UNEXPECTED(ZEND_REF_HAS_TYPE_SOURCES(ref))) {
				zend_binary_assign_op_typed_ref(ref, value OPLINE_CC EXECUTE_DATA_CC);
				break;
			}
		}
		zend_binary_op(var_ptr, var_ptr, value OPLINE_CC);
	} while (0);

	if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
		ZVAL_COPY(EX_VAR(opline->result.var), var_ptr);
	}


	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_PRE_INC_OBJ_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *object;
	zval *property;
	zval *zptr;
	void *_cache_slot[3] = {0};
	void **cache_slot;
	zend_property_info *prop_info;
	zend_object *zobj;
	zend_string *name, *tmp_name;

	SAVE_OPLINE();
	object = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
	property = RT_CONSTANT(opline, opline->op2);

	do {
		if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
			if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
				object = Z_REFVAL_P(object);
				goto pre_incdec_object;
			}
			if (IS_VAR == IS_CV
			 && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
				ZVAL_UNDEFINED_OP1();
			}
			zend_throw_non_object_error(object, property OPLINE_CC EXECUTE_DATA_CC);
			break;
		}

pre_incdec_object:
		/* here we are sure we are dealing with an object */
		zobj = Z_OBJ_P(object);
		if (IS_CONST == IS_CONST) {
			name = Z_STR_P(property);
		} else {
			name = zval_try_get_tmp_string(property, &tmp_name);
			if (UNEXPECTED(!name)) {
				UNDEF_RESULT();
				break;
			}
		}
		cache_slot = (IS_CONST == IS_CONST) ? CACHE_ADDR(opline->extended_value) : _cache_slot;
		if (EXPECTED((zptr = zobj->handlers->get_property_ptr_ptr(zobj, name, BP_VAR_RW, cache_slot)) != NULL)) {
			if (UNEXPECTED(Z_ISERROR_P(zptr))) {
				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
					ZVAL_NULL(EX_VAR(opline->result.var));
				}
			} else {
				prop_info = (zend_property_info *) CACHED_PTR_EX(cache_slot + 2);
				zend_pre_incdec_property_zval(zptr,
					prop_info && ZEND_TYPE_IS_SET(prop_info->type) ? prop_info : NULL OPLINE_CC EXECUTE_DATA_CC);
			}
		} else {
			zend_pre_incdec_overloaded_property(zobj, name, cache_slot OPLINE_CC EXECUTE_DATA_CC);
		}
		if (IS_CONST != IS_CONST) {
			zend_tmp_string_release(tmp_name);
		}
	} while (0);


	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_POST_INC_OBJ_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *object;
	zval *property;
	zval *zptr;
	void *_cache_slot[3] = {0};
	void **cache_slot;
	zend_property_info *prop_info;
	zend_object *zobj;
	zend_string *name, *tmp_name;

	SAVE_OPLINE();
	object = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
	property = RT_CONSTANT(opline, opline->op2);

	do {
		if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
			if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
				object = Z_REFVAL_P(object);
				goto post_incdec_object;
			}
			if (IS_VAR == IS_CV
			 && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
				ZVAL_UNDEFINED_OP1();
			}
			zend_throw_non_object_error(object, property OPLINE_CC EXECUTE_DATA_CC);
			break;
		}

post_incdec_object:
		/* here we are sure we are dealing with an object */
		zobj = Z_OBJ_P(object);
		if (IS_CONST == IS_CONST) {
			name = Z_STR_P(property);
		} else {
			name = zval_try_get_tmp_string(property, &tmp_name);
			if (UNEXPECTED(!name)) {
				ZVAL_UNDEF(EX_VAR(opline->result.var));
				break;
			}
		}
		cache_slot = (IS_CONST == IS_CONST) ? CACHE_ADDR(opline->extended_value) : _cache_slot;
		if (EXPECTED((zptr = zobj->handlers->get_property_ptr_ptr(zobj, name, BP_VAR_RW, cache_slot)) != NULL)) {
			if (UNEXPECTED(Z_ISERROR_P(zptr))) {
				ZVAL_NULL(EX_VAR(opline->result.var));
			} else {
				prop_info = (zend_property_info*)CACHED_PTR_EX(cache_slot + 2);
				zend_post_incdec_property_zval(zptr,
					prop_info && ZEND_TYPE_IS_SET(prop_info->type) ? prop_info : NULL OPLINE_CC EXECUTE_DATA_CC);
			}
		} else {
			zend_post_incdec_overloaded_property(zobj, name, cache_slot OPLINE_CC EXECUTE_DATA_CC);
		}
		if (IS_CONST != IS_CONST) {
			zend_tmp_string_release(tmp_name);
		}
	} while (0);


	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_FETCH_DIM_W_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *container;

	SAVE_OPLINE();
	container = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
	zend_fetch_dimension_address_W(container, RT_CONSTANT(opline, opline->op2), IS_CONST OPLINE_CC EXECUTE_DATA_CC);


	if (IS_VAR == IS_VAR) {
		FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
	}
	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_FETCH_DIM_RW_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *container;

	SAVE_OPLINE();
	container = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
	zend_fetch_dimension_address_RW(container, RT_CONSTANT(opline, opline->op2), IS_CONST OPLINE_CC EXECUTE_DATA_CC);


	if (IS_VAR == IS_VAR) {
		FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
	}
	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
#if 0
	USE_OPLINE
#endif

	if (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) {
		if ((IS_VAR & (IS_CONST|IS_TMP_VAR))) {
			ZEND_VM_TAIL_CALL(zend_use_tmp_in_write_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
		}
		ZEND_VM_TAIL_CALL(ZEND_FETCH_DIM_W_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
	} else {
		if (IS_CONST == IS_UNUSED) {
			ZEND_VM_TAIL_CALL(zend_use_undef_in_read_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
		}
		ZEND_VM_TAIL_CALL(ZEND_FETCH_DIM_R_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
	}
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_FETCH_DIM_UNSET_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *container;

	SAVE_OPLINE();
	container = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
	zend_fetch_dimension_address_UNSET(container, RT_CONSTANT(opline, opline->op2), IS_CONST OPLINE_CC EXECUTE_DATA_CC);


	if (IS_VAR == IS_VAR) {
		FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
	}
	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_FETCH_OBJ_W_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *property, *container, *result;

	SAVE_OPLINE();

	container = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
	property = RT_CONSTANT(opline, opline->op2);
	result = EX_VAR(opline->result.var);
	zend_fetch_property_address(
		result, container, IS_VAR, property, IS_CONST,
		((IS_CONST == IS_CONST) ? CACHE_ADDR(opline->extended_value & ~ZEND_FETCH_OBJ_FLAGS) : NULL),
		BP_VAR_W, opline->extended_value, NULL OPLINE_CC EXECUTE_DATA_CC);


	if (IS_VAR == IS_VAR) {
		FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
	}
	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_FETCH_OBJ_RW_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *property, *container, *result;

	SAVE_OPLINE();
	container = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
	property = RT_CONSTANT(opline, opline->op2);
	result = EX_VAR(opline->result.var);
	zend_fetch_property_address(result, container, IS_VAR, property, IS_CONST, ((IS_CONST == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL), BP_VAR_RW, 0, NULL OPLINE_CC EXECUTE_DATA_CC);


	if (IS_VAR == IS_VAR) {
		FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
	}
	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_FETCH_OBJ_FUNC_ARG_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
#if 0
	USE_OPLINE
#endif

	if (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) {
		/* Behave like FETCH_OBJ_W */
		if ((IS_VAR & (IS_CONST|IS_TMP_VAR))) {
			ZEND_VM_TAIL_CALL(zend_use_tmp_in_write_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
		}
		ZEND_VM_TAIL_CALL(ZEND_FETCH_OBJ_W_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
	} else {
		ZEND_VM_TAIL_CALL(ZEND_FETCH_OBJ_R_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
	}
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_FETCH_OBJ_UNSET_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *container, *property, *result;

	SAVE_OPLINE();
	container = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
	property = RT_CONSTANT(opline, opline->op2);
	result = EX_VAR(opline->result.var);
	zend_fetch_property_address(result, container, IS_VAR, property, IS_CONST, ((IS_CONST == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL), BP_VAR_UNSET, 0, NULL OPLINE_CC EXECUTE_DATA_CC);


	if (IS_VAR == IS_VAR) {
		FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
	}
	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_FETCH_LIST_W_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *container, *dim;

	SAVE_OPLINE();
	container = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
	dim = RT_CONSTANT(opline, opline->op2);

	if (IS_VAR == IS_VAR
		&& Z_TYPE_P(EX_VAR(opline->op1.var)) != IS_INDIRECT
		&& UNEXPECTED(!Z_ISREF_P(container))
	) {
		zend_error(E_NOTICE, "Attempting to set reference to non referenceable value");
		zend_fetch_dimension_address_LIST_r(container, dim, IS_CONST OPLINE_CC EXECUTE_DATA_CC);
	} else {
		zend_fetch_dimension_address_W(container, dim, IS_CONST OPLINE_CC EXECUTE_DATA_CC);
	}


	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_ASSIGN_OBJ_SPEC_VAR_CONST_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *object, *value, tmp;
	zend_object *zobj;
	zend_string *name, *tmp_name;
	zend_refcounted *garbage = NULL;

	SAVE_OPLINE();
	object = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
	value = RT_CONSTANT((opline+1), (opline+1)->op1);

	if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
		if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
			object = Z_REFVAL_P(object);
			goto assign_object;
		}
		zend_throw_non_object_error(object, RT_CONSTANT(opline, opline->op2) OPLINE_CC EXECUTE_DATA_CC);
		value = &EG(uninitialized_zval);
		goto free_and_exit_assign_obj;
	}

assign_object:
	zobj = Z_OBJ_P(object);
	if (IS_CONST == IS_CONST) {
		if (EXPECTED(zobj->ce == CACHED_PTR(opline->extended_value))) {
			void **cache_slot = CACHE_ADDR(opline->extended_value);
			uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
			zval *property_val;
			zend_property_info *prop_info;

			if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
				prop_info = (zend_property_info*) CACHED_PTR_EX(cache_slot + 2);

assign_obj_simple:
				property_val = OBJ_PROP(zobj, prop_offset);
				if (Z_TYPE_P(property_val) != IS_UNDEF) {
					if (prop_info != NULL) {
						value = zend_assign_to_typed_prop(prop_info, property_val, value, &garbage EXECUTE_DATA_CC);
						goto free_and_exit_assign_obj;
					} else {
fast_assign_obj:
						value = zend_assign_to_variable_ex(property_val, value, IS_CONST, EX_USES_STRICT_TYPES(), &garbage);
						if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
							ZVAL_COPY(EX_VAR(opline->result.var), value);
						}
						goto exit_assign_obj;
					}
				}
			} else if (EXPECTED(IS_DYNAMIC_PROPERTY_OFFSET(prop_offset))) {
				name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
				if (UNEXPECTED(zend_lazy_object_must_init(zobj))) {
					zobj = zend_lazy_object_init(zobj);
					if (!zobj) {
						value = &EG(uninitialized_zval);
						goto free_and_exit_assign_obj;
					}
				}
				if (!zobj->ce->__set && (zobj->ce->ce_flags & ZEND_ACC_ALLOW_DYNAMIC_PROPERTIES)) {
					rebuild_object_properties_internal(zobj);
				}
				if (EXPECTED(zobj->properties != NULL)) {
					if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
						if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
							GC_DELREF(zobj->properties);
						}
						zobj->properties = zend_array_dup(zobj->properties);
					}
					property_val = zend_hash_find_known_hash(zobj->properties, name);
					if (property_val) {
						goto fast_assign_obj;
					}
				}

				if (!zobj->ce->__set && (zobj->ce->ce_flags & ZEND_ACC_ALLOW_DYNAMIC_PROPERTIES)) {
					if (IS_CONST == IS_CONST) {
						if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
							Z_ADDREF_P(value);
						}
					} else if (IS_CONST != IS_TMP_VAR) {
						if (Z_ISREF_P(value)) {
							if (IS_CONST == IS_VAR) {
								zend_reference *ref = Z_REF_P(value);
								if (GC_DELREF(ref) == 0) {
									ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
									efree_size(ref, sizeof(zend_reference));
									value = &tmp;
								} else {
									value = Z_REFVAL_P(value);
									Z_TRY_ADDREF_P(value);
								}
							} else {
								value = Z_REFVAL_P(value);
								Z_TRY_ADDREF_P(value);
							}
						} else if (IS_CONST == IS_CV) {
							Z_TRY_ADDREF_P(value);
						}
					}
					zend_hash_add_new(zobj->properties, name, value);
					if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
						ZVAL_COPY(EX_VAR(opline->result.var), value);
					}
					goto exit_assign_obj;
				}
			} else {
				ZEND_ASSERT(IS_HOOKED_PROPERTY_OFFSET(prop_offset));
				if (ZEND_IS_PROPERTY_HOOK_SIMPLE_WRITE(prop_offset)) {
					prop_info = CACHED_PTR_EX(cache_slot + 2);
					prop_offset = prop_info->offset;
					if (!ZEND_TYPE_IS_SET(prop_info->type)) {
						prop_info = NULL;
					}
					goto assign_obj_simple;
				}
				/* Fall through to write_property for hooks. */
			}
		}
		name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
	} else {
		name = zval_try_get_tmp_string(RT_CONSTANT(opline, opline->op2), &tmp_name);
		if (UNEXPECTED(!name)) {


			UNDEF_RESULT();
			goto exit_assign_obj;
		}
	}

	if (IS_CONST == IS_CV || IS_CONST == IS_VAR) {
		ZVAL_DEREF(value);
	}

	value = zobj->handlers->write_property(zobj, name, value, (IS_CONST == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);

	if (IS_CONST != IS_CONST) {
		zend_tmp_string_release(tmp_name);
	}

free_and_exit_assign_obj:
	if (UNEXPECTED(RETURN_VALUE_USED(opline)) && value) {
		ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
	}


exit_assign_obj:
	if (garbage) {
		GC_DTOR_NO_REF(garbage);
	}


	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
	/* assign_obj has two opcodes! */
	ZEND_VM_NEXT_OPCODE_EX(1, 2);
}

/* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CONST|VAR) */
static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_ASSIGN_OBJ_SPEC_VAR_CONST_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *object, *value, tmp;
	zend_object *zobj;
	zend_string *name, *tmp_name;
	zend_refcounted *garbage = NULL;

	SAVE_OPLINE();
	object = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
	value = _get_zval_ptr_tmp((opline+1)->op1.var EXECUTE_DATA_CC);

	if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
		if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
			object = Z_REFVAL_P(object);
			goto assign_object;
		}
		zend_throw_non_object_error(object, RT_CONSTANT(opline, opline->op2) OPLINE_CC EXECUTE_DATA_CC);
		value = &EG(uninitialized_zval);
		goto free_and_exit_assign_obj;
	}

assign_object:
	zobj = Z_OBJ_P(object);
	if (IS_CONST == IS_CONST) {
		if (EXPECTED(zobj->ce == CACHED_PTR(opline->extended_value))) {
			void **cache_slot = CACHE_ADDR(opline->extended_value);
			uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
			zval *property_val;
			zend_property_info *prop_info;

			if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
				prop_info = (zend_property_info*) CACHED_PTR_EX(cache_slot + 2);

assign_obj_simple:
				property_val = OBJ_PROP(zobj, prop_offset);
				if (Z_TYPE_P(property_val) != IS_UNDEF) {
					if (prop_info != NULL) {
						value = zend_assign_to_typed_prop(prop_info, property_val, value, &garbage EXECUTE_DATA_CC);
						goto free_and_exit_assign_obj;
					} else {
fast_assign_obj:
						value = zend_assign_to_variable_ex(property_val, value, IS_TMP_VAR, EX_USES_STRICT_TYPES(), &garbage);
						if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
							ZVAL_COPY(EX_VAR(opline->result.var), value);
						}
						goto exit_assign_obj;
					}
				}
			} else if (EXPECTED(IS_DYNAMIC_PROPERTY_OFFSET(prop_offset))) {
				name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
				if (UNEXPECTED(zend_lazy_object_must_init(zobj))) {
					zobj = zend_lazy_object_init(zobj);
					if (!zobj) {
						value = &EG(uninitialized_zval);
						goto free_and_exit_assign_obj;
					}
				}
				if (!zobj->ce->__set && (zobj->ce->ce_flags & ZEND_ACC_ALLOW_DYNAMIC_PROPERTIES)) {
					rebuild_object_properties_internal(zobj);
				}
				if (EXPECTED(zobj->properties != NULL)) {
					if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
						if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
							GC_DELREF(zobj->properties);
						}
						zobj->properties = zend_array_dup(zobj->properties);
					}
					property_val = zend_hash_find_known_hash(zobj->properties, name);
					if (property_val) {
						goto fast_assign_obj;
					}
				}

				if (!zobj->ce->__set && (zobj->ce->ce_flags & ZEND_ACC_ALLOW_DYNAMIC_PROPERTIES)) {
					if (IS_TMP_VAR == IS_CONST) {
						if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
							Z_ADDREF_P(value);
						}
					} else if (IS_TMP_VAR != IS_TMP_VAR) {
						if (Z_ISREF_P(value)) {
							if (IS_TMP_VAR == IS_VAR) {
								zend_reference *ref = Z_REF_P(value);
								if (GC_DELREF(ref) == 0) {
									ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
									efree_size(ref, sizeof(zend_reference));
									value = &tmp;
								} else {
									value = Z_REFVAL_P(value);
									Z_TRY_ADDREF_P(value);
								}
							} else {
								value = Z_REFVAL_P(value);
								Z_TRY_ADDREF_P(value);
							}
						} else if (IS_TMP_VAR == IS_CV) {
							Z_TRY_ADDREF_P(value);
						}
					}
					zend_hash_add_new(zobj->properties, name, value);
					if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
						ZVAL_COPY(EX_VAR(opline->result.var), value);
					}
					goto exit_assign_obj;
				}
			} else {
				ZEND_ASSERT(IS_HOOKED_PROPERTY_OFFSET(prop_offset));
				if (ZEND_IS_PROPERTY_HOOK_SIMPLE_WRITE(prop_offset)) {
					prop_info = CACHED_PTR_EX(cache_slot + 2);
					prop_offset = prop_info->offset;
					if (!ZEND_TYPE_IS_SET(prop_info->type)) {
						prop_info = NULL;
					}
					goto assign_obj_simple;
				}
				/* Fall through to write_property for hooks. */
			}
		}
		name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
	} else {
		name = zval_try_get_tmp_string(RT_CONSTANT(opline, opline->op2), &tmp_name);
		if (UNEXPECTED(!name)) {
			zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
			UNDEF_RESULT();
			goto exit_assign_obj;
		}
	}

	if (IS_TMP_VAR == IS_CV || IS_TMP_VAR == IS_VAR) {
		ZVAL_DEREF(value);
	}

	value = zobj->handlers->write_property(zobj, name, value, (IS_CONST == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);

	if (IS_CONST != IS_CONST) {
		zend_tmp_string_release(tmp_name);
	}

free_and_exit_assign_obj:
	if (UNEXPECTED(RETURN_VALUE_USED(opline)) && value) {
		ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
	}
	zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
exit_assign_obj:
	if (garbage) {
		GC_DTOR_NO_REF(garbage);
	}


	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
	/* assign_obj has two opcodes! */
	ZEND_VM_NEXT_OPCODE_EX(1, 2);
}

/* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CONST|VAR) */
static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_ASSIGN_OBJ_SPEC_VAR_CONST_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *object, *value, tmp;
	zend_object *zobj;
	zend_string *name, *tmp_name;
	zend_refcounted *garbage = NULL;

	SAVE_OPLINE();
	object = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
	value = _get_zval_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);

	if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
		if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
			object = Z_REFVAL_P(object);
			goto assign_object;
		}
		zend_throw_non_object_error(object, RT_CONSTANT(opline, opline->op2) OPLINE_CC EXECUTE_DATA_CC);
		value = &EG(uninitialized_zval);
		goto free_and_exit_assign_obj;
	}

assign_object:
	zobj = Z_OBJ_P(object);
	if (IS_CONST == IS_CONST) {
		if (EXPECTED(zobj->ce == CACHED_PTR(opline->extended_value))) {
			void **cache_slot = CACHE_ADDR(opline->extended_value);
			uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
			zval *property_val;
			zend_property_info *prop_info;

			if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
				prop_info = (zend_property_info*) CACHED_PTR_EX(cache_slot + 2);

assign_obj_simple:
				property_val = OBJ_PROP(zobj, prop_offset);
				if (Z_TYPE_P(property_val) != IS_UNDEF) {
					if (prop_info != NULL) {
						value = zend_assign_to_typed_prop(prop_info, property_val, value, &garbage EXECUTE_DATA_CC);
						goto free_and_exit_assign_obj;
					} else {
fast_assign_obj:
						value = zend_assign_to_variable_ex(property_val, value, IS_VAR, EX_USES_STRICT_TYPES(), &garbage);
						if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
							ZVAL_COPY(EX_VAR(opline->result.var), value);
						}
						goto exit_assign_obj;
					}
				}
			} else if (EXPECTED(IS_DYNAMIC_PROPERTY_OFFSET(prop_offset))) {
				name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
				if (UNEXPECTED(zend_lazy_object_must_init(zobj))) {
					zobj = zend_lazy_object_init(zobj);
					if (!zobj) {
						value = &EG(uninitialized_zval);
						goto free_and_exit_assign_obj;
					}
				}
				if (!zobj->ce->__set && (zobj->ce->ce_flags & ZEND_ACC_ALLOW_DYNAMIC_PROPERTIES)) {
					rebuild_object_properties_internal(zobj);
				}
				if (EXPECTED(zobj->properties != NULL)) {
					if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
						if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
							GC_DELREF(zobj->properties);
						}
						zobj->properties = zend_array_dup(zobj->properties);
					}
					property_val = zend_hash_find_known_hash(zobj->properties, name);
					if (property_val) {
						goto fast_assign_obj;
					}
				}

				if (!zobj->ce->__set && (zobj->ce->ce_flags & ZEND_ACC_ALLOW_DYNAMIC_PROPERTIES)) {
					if (IS_VAR == IS_CONST) {
						if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
							Z_ADDREF_P(value);
						}
					} else if (IS_VAR != IS_TMP_VAR) {
						if (Z_ISREF_P(value)) {
							if (IS_VAR == IS_VAR) {
								zend_reference *ref = Z_REF_P(value);
								if (GC_DELREF(ref) == 0) {
									ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
									efree_size(ref, sizeof(zend_reference));
									value = &tmp;
								} else {
									value = Z_REFVAL_P(value);
									Z_TRY_ADDREF_P(value);
								}
							} else {
								value = Z_REFVAL_P(value);
								Z_TRY_ADDREF_P(value);
							}
						} else if (IS_VAR == IS_CV) {
							Z_TRY_ADDREF_P(value);
						}
					}
					zend_hash_add_new(zobj->properties, name, value);
					if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
						ZVAL_COPY(EX_VAR(opline->result.var), value);
					}
					goto exit_assign_obj;
				}
			} else {
				ZEND_ASSERT(IS_HOOKED_PROPERTY_OFFSET(prop_offset));
				if (ZEND_IS_PROPERTY_HOOK_SIMPLE_WRITE(prop_offset)) {
					prop_info = CACHED_PTR_EX(cache_slot + 2);
					prop_offset = prop_info->offset;
					if (!ZEND_TYPE_IS_SET(prop_info->type)) {
						prop_info = NULL;
					}
					goto assign_obj_simple;
				}
				/* Fall through to write_property for hooks. */
			}
		}
		name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
	} else {
		name = zval_try_get_tmp_string(RT_CONSTANT(opline, opline->op2), &tmp_name);
		if (UNEXPECTED(!name)) {
			zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
			UNDEF_RESULT();
			goto exit_assign_obj;
		}
	}

	if (IS_VAR == IS_CV || IS_VAR == IS_VAR) {
		ZVAL_DEREF(value);
	}

	value = zobj->handlers->write_property(zobj, name, value, (IS_CONST == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);

	if (IS_CONST != IS_CONST) {
		zend_tmp_string_release(tmp_name);
	}

free_and_exit_assign_obj:
	if (UNEXPECTED(RETURN_VALUE_USED(opline)) && value) {
		ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
	}
	zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
exit_assign_obj:
	if (garbage) {
		GC_DTOR_NO_REF(garbage);
	}


	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
	/* assign_obj has two opcodes! */
	ZEND_VM_NEXT_OPCODE_EX(1, 2);
}

/* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CONST|VAR) */
static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_ASSIGN_OBJ_SPEC_VAR_CONST_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *object, *value, tmp;
	zend_object *zobj;
	zend_string *name, *tmp_name;
	zend_refcounted *garbage = NULL;

	SAVE_OPLINE();
	object = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
	value = _get_zval_ptr_cv_BP_VAR_R((opline+1)->op1.var EXECUTE_DATA_CC);

	if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
		if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
			object = Z_REFVAL_P(object);
			goto assign_object;
		}
		zend_throw_non_object_error(object, RT_CONSTANT(opline, opline->op2) OPLINE_CC EXECUTE_DATA_CC);
		value = &EG(uninitialized_zval);
		goto free_and_exit_assign_obj;
	}

assign_object:
	zobj = Z_OBJ_P(object);
	if (IS_CONST == IS_CONST) {
		if (EXPECTED(zobj->ce == CACHED_PTR(opline->extended_value))) {
			void **cache_slot = CACHE_ADDR(opline->extended_value);
			uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
			zval *property_val;
			zend_property_info *prop_info;

			if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
				prop_info = (zend_property_info*) CACHED_PTR_EX(cache_slot + 2);

assign_obj_simple:
				property_val = OBJ_PROP(zobj, prop_offset);
				if (Z_TYPE_P(property_val) != IS_UNDEF) {
					if (prop_info != NULL) {
						value = zend_assign_to_typed_prop(prop_info, property_val, value, &garbage EXECUTE_DATA_CC);
						goto free_and_exit_assign_obj;
					} else {
fast_assign_obj:
						value = zend_assign_to_variable_ex(property_val, value, IS_CV, EX_USES_STRICT_TYPES(), &garbage);
						if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
							ZVAL_COPY(EX_VAR(opline->result.var), value);
						}
						goto exit_assign_obj;
					}
				}
			} else if (EXPECTED(IS_DYNAMIC_PROPERTY_OFFSET(prop_offset))) {
				name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
				if (UNEXPECTED(zend_lazy_object_must_init(zobj))) {
					zobj = zend_lazy_object_init(zobj);
					if (!zobj) {
						value = &EG(uninitialized_zval);
						goto free_and_exit_assign_obj;
					}
				}
				if (!zobj->ce->__set && (zobj->ce->ce_flags & ZEND_ACC_ALLOW_DYNAMIC_PROPERTIES)) {
					rebuild_object_properties_internal(zobj);
				}
				if (EXPECTED(zobj->properties != NULL)) {
					if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
						if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
							GC_DELREF(zobj->properties);
						}
						zobj->properties = zend_array_dup(zobj->properties);
					}
					property_val = zend_hash_find_known_hash(zobj->properties, name);
					if (property_val) {
						goto fast_assign_obj;
					}
				}

				if (!zobj->ce->__set && (zobj->ce->ce_flags & ZEND_ACC_ALLOW_DYNAMIC_PROPERTIES)) {
					if (IS_CV == IS_CONST) {
						if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
							Z_ADDREF_P(value);
						}
					} else if (IS_CV != IS_TMP_VAR) {
						if (Z_ISREF_P(value)) {
							if (IS_CV == IS_VAR) {
								zend_reference *ref = Z_REF_P(value);
								if (GC_DELREF(ref) == 0) {
									ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
									efree_size(ref, sizeof(zend_reference));
									value = &tmp;
								} else {
									value = Z_REFVAL_P(value);
									Z_TRY_ADDREF_P(value);
								}
							} else {
								value = Z_REFVAL_P(value);
								Z_TRY_ADDREF_P(value);
							}
						} else if (IS_CV == IS_CV) {
							Z_TRY_ADDREF_P(value);
						}
					}
					zend_hash_add_new(zobj->properties, name, value);
					if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
						ZVAL_COPY(EX_VAR(opline->result.var), value);
					}
					goto exit_assign_obj;
				}
			} else {
				ZEND_ASSERT(IS_HOOKED_PROPERTY_OFFSET(prop_offset));
				if (ZEND_IS_PROPERTY_HOOK_SIMPLE_WRITE(prop_offset)) {
					prop_info = CACHED_PTR_EX(cache_slot + 2);
					prop_offset = prop_info->offset;
					if (!ZEND_TYPE_IS_SET(prop_info->type)) {
						prop_info = NULL;
					}
					goto assign_obj_simple;
				}
				/* Fall through to write_property for hooks. */
			}
		}
		name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
	} else {
		name = zval_try_get_tmp_string(RT_CONSTANT(opline, opline->op2), &tmp_name);
		if (UNEXPECTED(!name)) {


			UNDEF_RESULT();
			goto exit_assign_obj;
		}
	}

	if (IS_CV == IS_CV || IS_CV == IS_VAR) {
		ZVAL_DEREF(value);
	}

	value = zobj->handlers->write_property(zobj, name, value, (IS_CONST == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);

	if (IS_CONST != IS_CONST) {
		zend_tmp_string_release(tmp_name);
	}

free_and_exit_assign_obj:
	if (UNEXPECTED(RETURN_VALUE_USED(opline)) && value) {
		ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
	}


exit_assign_obj:
	if (garbage) {
		GC_DTOR_NO_REF(garbage);
	}


	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
	/* assign_obj has two opcodes! */
	ZEND_VM_NEXT_OPCODE_EX(1, 2);
}

/* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CONST|VAR) */
static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_ASSIGN_DIM_SPEC_VAR_CONST_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *object_ptr, *orig_object_ptr;
	zval *value;
	zval *variable_ptr;
	zval *dim;
	zend_refcounted *garbage = NULL;

	SAVE_OPLINE();
	orig_object_ptr = object_ptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);

	if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
try_assign_dim_array:
		SEPARATE_ARRAY(object_ptr);
		if (IS_CONST == IS_UNUSED) {
			value = RT_CONSTANT((opline+1), (opline+1)->op1);
			if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
				HashTable *ht = Z_ARRVAL_P(object_ptr);
				if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE)) {
					GC_ADDREF(ht);
				}
				value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
				if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE) && !GC_DELREF(ht)) {
					zend_array_destroy(ht);
					goto assign_dim_error;
				}
			}
			if (IS_CONST == IS_CV || IS_CONST == IS_VAR) {
				ZVAL_DEREF(value);
			}
			value = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), value);
			if (UNEXPECTED(value == NULL)) {
				zend_cannot_add_element();
				goto assign_dim_error;
			} else if (IS_CONST == IS_CV) {
				if (Z_REFCOUNTED_P(value)) {
					Z_ADDREF_P(value);
				}
			} else if (IS_CONST == IS_VAR) {
				zval *free_op_data = EX_VAR((opline+1)->op1.var);
				if (Z_ISREF_P(free_op_data)) {
					if (Z_REFCOUNTED_P(value)) {
						Z_ADDREF_P(value);
					}
					zval_ptr_dtor_nogc(free_op_data);
				}
			} else if (IS_CONST == IS_CONST) {
				if (UNEXPECTED(Z_REFCOUNTED_P(value))) {
					Z_ADDREF_P(value);
				}
			}
		} else {
			dim = RT_CONSTANT(opline, opline->op2);
			if (IS_CONST == IS_CONST) {
				variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
			} else {
				variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
			}
			if (UNEXPECTED(variable_ptr == NULL)) {
				goto assign_dim_error;
			}
			value = RT_CONSTANT((opline+1), (opline+1)->op1);
			value = zend_assign_to_variable_ex(variable_ptr, value, IS_CONST, EX_USES_STRICT_TYPES(), &garbage);
		}
		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
			ZVAL_COPY(EX_VAR(opline->result.var), value);
		}
		if (garbage) {
			GC_DTOR_NO_REF(garbage);
		}
	} else {
		if (EXPECTED(Z_ISREF_P(object_ptr))) {
			object_ptr = Z_REFVAL_P(object_ptr);
			if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
				goto try_assign_dim_array;
			}
		}
		if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) {
			zend_object *obj = Z_OBJ_P(object_ptr);

			GC_ADDREF(obj);
			dim = RT_CONSTANT(opline, opline->op2);
			if (IS_CONST == IS_CV && UNEXPECTED(Z_ISUNDEF_P(dim))) {
				dim = ZVAL_UNDEFINED_OP2();
			} else if (IS_CONST == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
				dim++;
			}

			value = RT_CONSTANT((opline+1), (opline+1)->op1);
			if (IS_CONST == IS_CV && UNEXPECTED(Z_ISUNDEF_P(value))) {
				value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
			} else if (IS_CONST & (IS_CV|IS_VAR)) {
				ZVAL_DEREF(value);
			}

			zend_assign_to_object_dim(obj, dim, value OPLINE_CC EXECUTE_DATA_CC);


			if (UNEXPECTED(GC_DELREF(obj) == 0)) {
				zend_objects_store_del(obj);
			}
		} else if (EXPECTED(Z_TYPE_P(object_ptr) == IS_STRING)) {
			if (IS_CONST == IS_UNUSED) {
				zend_use_new_element_for_string();


				UNDEF_RESULT();
			} else {
				dim = RT_CONSTANT(opline, opline->op2);
				value = RT_CONSTANT((opline+1), (opline+1)->op1);
				zend_assign_to_string_offset(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC);


			}
		} else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
			if (Z_ISREF_P(orig_object_ptr)
			 && ZEND_REF_HAS_TYPE_SOURCES(Z_REF_P(orig_object_ptr))
			 && !zend_verify_ref_array_assignable(Z_REF_P(orig_object_ptr))) {
				dim = RT_CONSTANT(opline, opline->op2);


				UNDEF_RESULT();
			} else {
				HashTable *ht = zend_new_array(8);
				uint8_t old_type = Z_TYPE_P(object_ptr);

				ZVAL_ARR(object_ptr, ht);
				if (UNEXPECTED(old_type == IS_FALSE)) {
					GC_ADDREF(ht);
					zend_false_to_array_deprecated();
					if (UNEXPECTED(GC_DELREF(ht) == 0)) {
						zend_array_destroy(ht);
						goto assign_dim_error;
					}
				}
				goto try_assign_dim_array;
			}
		} else {
			zend_use_scalar_as_array();
			dim = RT_CONSTANT(opline, opline->op2);
assign_dim_error:


			if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
				ZVAL_NULL(EX_VAR(opline->result.var));
			}
		}
	}
	if (IS_CONST != IS_UNUSED) {


	}
	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
	/* assign_dim has two opcodes! */
	ZEND_VM_NEXT_OPCODE_EX(1, 2);
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_ASSIGN_DIM_SPEC_VAR_CONST_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *object_ptr, *orig_object_ptr;
	zval *value;
	zval *variable_ptr;
	zval *dim;
	zend_refcounted *garbage = NULL;

	SAVE_OPLINE();
	orig_object_ptr = object_ptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);

	if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
try_assign_dim_array:
		SEPARATE_ARRAY(object_ptr);
		if (IS_CONST == IS_UNUSED) {
			value = _get_zval_ptr_tmp((opline+1)->op1.var EXECUTE_DATA_CC);
			if (IS_TMP_VAR == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
				HashTable *ht = Z_ARRVAL_P(object_ptr);
				if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE)) {
					GC_ADDREF(ht);
				}
				value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
				if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE) && !GC_DELREF(ht)) {
					zend_array_destroy(ht);
					goto assign_dim_error;
				}
			}
			if (IS_TMP_VAR == IS_CV || IS_TMP_VAR == IS_VAR) {
				ZVAL_DEREF(value);
			}
			value = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), value);
			if (UNEXPECTED(value == NULL)) {
				zend_cannot_add_element();
				goto assign_dim_error;
			} else if (IS_TMP_VAR == IS_CV) {
				if (Z_REFCOUNTED_P(value)) {
					Z_ADDREF_P(value);
				}
			} else if (IS_TMP_VAR == IS_VAR) {
				zval *free_op_data = EX_VAR((opline+1)->op1.var);
				if (Z_ISREF_P(free_op_data)) {
					if (Z_REFCOUNTED_P(value)) {
						Z_ADDREF_P(value);
					}
					zval_ptr_dtor_nogc(free_op_data);
				}
			} else if (IS_TMP_VAR == IS_CONST) {
				if (UNEXPECTED(Z_REFCOUNTED_P(value))) {
					Z_ADDREF_P(value);
				}
			}
		} else {
			dim = RT_CONSTANT(opline, opline->op2);
			if (IS_CONST == IS_CONST) {
				variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
			} else {
				variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
			}
			if (UNEXPECTED(variable_ptr == NULL)) {
				goto assign_dim_error;
			}
			value = _get_zval_ptr_tmp((opline+1)->op1.var EXECUTE_DATA_CC);
			value = zend_assign_to_variable_ex(variable_ptr, value, IS_TMP_VAR, EX_USES_STRICT_TYPES(), &garbage);
		}
		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
			ZVAL_COPY(EX_VAR(opline->result.var), value);
		}
		if (garbage) {
			GC_DTOR_NO_REF(garbage);
		}
	} else {
		if (EXPECTED(Z_ISREF_P(object_ptr))) {
			object_ptr = Z_REFVAL_P(object_ptr);
			if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
				goto try_assign_dim_array;
			}
		}
		if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) {
			zend_object *obj = Z_OBJ_P(object_ptr);

			GC_ADDREF(obj);
			dim = RT_CONSTANT(opline, opline->op2);
			if (IS_CONST == IS_CV && UNEXPECTED(Z_ISUNDEF_P(dim))) {
				dim = ZVAL_UNDEFINED_OP2();
			} else if (IS_CONST == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
				dim++;
			}

			value = _get_zval_ptr_tmp((opline+1)->op1.var EXECUTE_DATA_CC);
			if (IS_TMP_VAR == IS_CV && UNEXPECTED(Z_ISUNDEF_P(value))) {
				value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
			} else if (IS_TMP_VAR & (IS_CV|IS_VAR)) {
				ZVAL_DEREF(value);
			}

			zend_assign_to_object_dim(obj, dim, value OPLINE_CC EXECUTE_DATA_CC);

			zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
			if (UNEXPECTED(GC_DELREF(obj) == 0)) {
				zend_objects_store_del(obj);
			}
		} else if (EXPECTED(Z_TYPE_P(object_ptr) == IS_STRING)) {
			if (IS_CONST == IS_UNUSED) {
				zend_use_new_element_for_string();
				zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
				UNDEF_RESULT();
			} else {
				dim = RT_CONSTANT(opline, opline->op2);
				value = _get_zval_ptr_tmp((opline+1)->op1.var EXECUTE_DATA_CC);
				zend_assign_to_string_offset(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC);
				zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
			}
		} else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
			if (Z_ISREF_P(orig_object_ptr)
			 && ZEND_REF_HAS_TYPE_SOURCES(Z_REF_P(orig_object_ptr))
			 && !zend_verify_ref_array_assignable(Z_REF_P(orig_object_ptr))) {
				dim = RT_CONSTANT(opline, opline->op2);
				zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
				UNDEF_RESULT();
			} else {
				HashTable *ht = zend_new_array(8);
				uint8_t old_type = Z_TYPE_P(object_ptr);

				ZVAL_ARR(object_ptr, ht);
				if (UNEXPECTED(old_type == IS_FALSE)) {
					GC_ADDREF(ht);
					zend_false_to_array_deprecated();
					if (UNEXPECTED(GC_DELREF(ht) == 0)) {
						zend_array_destroy(ht);
						goto assign_dim_error;
					}
				}
				goto try_assign_dim_array;
			}
		} else {
			zend_use_scalar_as_array();
			dim = RT_CONSTANT(opline, opline->op2);
assign_dim_error:
			zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
			if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
				ZVAL_NULL(EX_VAR(opline->result.var));
			}
		}
	}
	if (IS_CONST != IS_UNUSED) {


	}
	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
	/* assign_dim has two opcodes! */
	ZEND_VM_NEXT_OPCODE_EX(1, 2);
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_ASSIGN_DIM_SPEC_VAR_CONST_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *object_ptr, *orig_object_ptr;
	zval *value;
	zval *variable_ptr;
	zval *dim;
	zend_refcounted *garbage = NULL;

	SAVE_OPLINE();
	orig_object_ptr = object_ptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);

	if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
try_assign_dim_array:
		SEPARATE_ARRAY(object_ptr);
		if (IS_CONST == IS_UNUSED) {
			value = _get_zval_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);
			if (IS_VAR == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
				HashTable *ht = Z_ARRVAL_P(object_ptr);
				if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE)) {
					GC_ADDREF(ht);
				}
				value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
				if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE) && !GC_DELREF(ht)) {
					zend_array_destroy(ht);
					goto assign_dim_error;
				}
			}
			if (IS_VAR == IS_CV || IS_VAR == IS_VAR) {
				ZVAL_DEREF(value);
			}
			value = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), value);
			if (UNEXPECTED(value == NULL)) {
				zend_cannot_add_element();
				goto assign_dim_error;
			} else if (IS_VAR == IS_CV) {
				if (Z_REFCOUNTED_P(value)) {
					Z_ADDREF_P(value);
				}
			} else if (IS_VAR == IS_VAR) {
				zval *free_op_data = EX_VAR((opline+1)->op1.var);
				if (Z_ISREF_P(free_op_data)) {
					if (Z_REFCOUNTED_P(value)) {
						Z_ADDREF_P(value);
					}
					zval_ptr_dtor_nogc(free_op_data);
				}
			} else if (IS_VAR == IS_CONST) {
				if (UNEXPECTED(Z_REFCOUNTED_P(value))) {
					Z_ADDREF_P(value);
				}
			}
		} else {
			dim = RT_CONSTANT(opline, opline->op2);
			if (IS_CONST == IS_CONST) {
				variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
			} else {
				variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
			}
			if (UNEXPECTED(variable_ptr == NULL)) {
				goto assign_dim_error;
			}
			value = _get_zval_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);
			value = zend_assign_to_variable_ex(variable_ptr, value, IS_VAR, EX_USES_STRICT_TYPES(), &garbage);
		}
		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
			ZVAL_COPY(EX_VAR(opline->result.var), value);
		}
		if (garbage) {
			GC_DTOR_NO_REF(garbage);
		}
	} else {
		if (EXPECTED(Z_ISREF_P(object_ptr))) {
			object_ptr = Z_REFVAL_P(object_ptr);
			if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
				goto try_assign_dim_array;
			}
		}
		if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) {
			zend_object *obj = Z_OBJ_P(object_ptr);

			GC_ADDREF(obj);
			dim = RT_CONSTANT(opline, opline->op2);
			if (IS_CONST == IS_CV && UNEXPECTED(Z_ISUNDEF_P(dim))) {
				dim = ZVAL_UNDEFINED_OP2();
			} else if (IS_CONST == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
				dim++;
			}

			value = _get_zval_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);
			if (IS_VAR == IS_CV && UNEXPECTED(Z_ISUNDEF_P(value))) {
				value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
			} else if (IS_VAR & (IS_CV|IS_VAR)) {
				ZVAL_DEREF(value);
			}

			zend_assign_to_object_dim(obj, dim, value OPLINE_CC EXECUTE_DATA_CC);

			zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
			if (UNEXPECTED(GC_DELREF(obj) == 0)) {
				zend_objects_store_del(obj);
			}
		} else if (EXPECTED(Z_TYPE_P(object_ptr) == IS_STRING)) {
			if (IS_CONST == IS_UNUSED) {
				zend_use_new_element_for_string();
				zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
				UNDEF_RESULT();
			} else {
				dim = RT_CONSTANT(opline, opline->op2);
				value = _get_zval_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);
				zend_assign_to_string_offset(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC);
				zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
			}
		} else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
			if (Z_ISREF_P(orig_object_ptr)
			 && ZEND_REF_HAS_TYPE_SOURCES(Z_REF_P(orig_object_ptr))
			 && !zend_verify_ref_array_assignable(Z_REF_P(orig_object_ptr))) {
				dim = RT_CONSTANT(opline, opline->op2);
				zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
				UNDEF_RESULT();
			} else {
				HashTable *ht = zend_new_array(8);
				uint8_t old_type = Z_TYPE_P(object_ptr);

				ZVAL_ARR(object_ptr, ht);
				if (UNEXPECTED(old_type == IS_FALSE)) {
					GC_ADDREF(ht);
					zend_false_to_array_deprecated();
					if (UNEXPECTED(GC_DELREF(ht) == 0)) {
						zend_array_destroy(ht);
						goto assign_dim_error;
					}
				}
				goto try_assign_dim_array;
			}
		} else {
			zend_use_scalar_as_array();
			dim = RT_CONSTANT(opline, opline->op2);
assign_dim_error:
			zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
			if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
				ZVAL_NULL(EX_VAR(opline->result.var));
			}
		}
	}
	if (IS_CONST != IS_UNUSED) {


	}
	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
	/* assign_dim has two opcodes! */
	ZEND_VM_NEXT_OPCODE_EX(1, 2);
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_ASSIGN_DIM_SPEC_VAR_CONST_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *object_ptr, *orig_object_ptr;
	zval *value;
	zval *variable_ptr;
	zval *dim;
	zend_refcounted *garbage = NULL;

	SAVE_OPLINE();
	orig_object_ptr = object_ptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);

	if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
try_assign_dim_array:
		SEPARATE_ARRAY(object_ptr);
		if (IS_CONST == IS_UNUSED) {
			value = EX_VAR((opline+1)->op1.var);
			if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
				HashTable *ht = Z_ARRVAL_P(object_ptr);
				if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE)) {
					GC_ADDREF(ht);
				}
				value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
				if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE) && !GC_DELREF(ht)) {
					zend_array_destroy(ht);
					goto assign_dim_error;
				}
			}
			if (IS_CV == IS_CV || IS_CV == IS_VAR) {
				ZVAL_DEREF(value);
			}
			value = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), value);
			if (UNEXPECTED(value == NULL)) {
				zend_cannot_add_element();
				goto assign_dim_error;
			} else if (IS_CV == IS_CV) {
				if (Z_REFCOUNTED_P(value)) {
					Z_ADDREF_P(value);
				}
			} else if (IS_CV == IS_VAR) {
				zval *free_op_data = EX_VAR((opline+1)->op1.var);
				if (Z_ISREF_P(free_op_data)) {
					if (Z_REFCOUNTED_P(value)) {
						Z_ADDREF_P(value);
					}
					zval_ptr_dtor_nogc(free_op_data);
				}
			} else if (IS_CV == IS_CONST) {
				if (UNEXPECTED(Z_REFCOUNTED_P(value))) {
					Z_ADDREF_P(value);
				}
			}
		} else {
			dim = RT_CONSTANT(opline, opline->op2);
			if (IS_CONST == IS_CONST) {
				variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
			} else {
				variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
			}
			if (UNEXPECTED(variable_ptr == NULL)) {
				goto assign_dim_error;
			}
			value = _get_zval_ptr_cv_BP_VAR_R((opline+1)->op1.var EXECUTE_DATA_CC);
			value = zend_assign_to_variable_ex(variable_ptr, value, IS_CV, EX_USES_STRICT_TYPES(), &garbage);
		}
		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
			ZVAL_COPY(EX_VAR(opline->result.var), value);
		}
		if (garbage) {
			GC_DTOR_NO_REF(garbage);
		}
	} else {
		if (EXPECTED(Z_ISREF_P(object_ptr))) {
			object_ptr = Z_REFVAL_P(object_ptr);
			if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
				goto try_assign_dim_array;
			}
		}
		if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) {
			zend_object *obj = Z_OBJ_P(object_ptr);

			GC_ADDREF(obj);
			dim = RT_CONSTANT(opline, opline->op2);
			if (IS_CONST == IS_CV && UNEXPECTED(Z_ISUNDEF_P(dim))) {
				dim = ZVAL_UNDEFINED_OP2();
			} else if (IS_CONST == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
				dim++;
			}

			value = EX_VAR((opline+1)->op1.var);
			if (IS_CV == IS_CV && UNEXPECTED(Z_ISUNDEF_P(value))) {
				value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
			} else if (IS_CV & (IS_CV|IS_VAR)) {
				ZVAL_DEREF(value);
			}

			zend_assign_to_object_dim(obj, dim, value OPLINE_CC EXECUTE_DATA_CC);


			if (UNEXPECTED(GC_DELREF(obj) == 0)) {
				zend_objects_store_del(obj);
			}
		} else if (EXPECTED(Z_TYPE_P(object_ptr) == IS_STRING)) {
			if (IS_CONST == IS_UNUSED) {
				zend_use_new_element_for_string();


				UNDEF_RESULT();
			} else {
				dim = RT_CONSTANT(opline, opline->op2);
				value = EX_VAR((opline+1)->op1.var);
				zend_assign_to_string_offset(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC);


			}
		} else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
			if (Z_ISREF_P(orig_object_ptr)
			 && ZEND_REF_HAS_TYPE_SOURCES(Z_REF_P(orig_object_ptr))
			 && !zend_verify_ref_array_assignable(Z_REF_P(orig_object_ptr))) {
				dim = RT_CONSTANT(opline, opline->op2);


				UNDEF_RESULT();
			} else {
				HashTable *ht = zend_new_array(8);
				uint8_t old_type = Z_TYPE_P(object_ptr);

				ZVAL_ARR(object_ptr, ht);
				if (UNEXPECTED(old_type == IS_FALSE)) {
					GC_ADDREF(ht);
					zend_false_to_array_deprecated();
					if (UNEXPECTED(GC_DELREF(ht) == 0)) {
						zend_array_destroy(ht);
						goto assign_dim_error;
					}
				}
				goto try_assign_dim_array;
			}
		} else {
			zend_use_scalar_as_array();
			dim = RT_CONSTANT(opline, opline->op2);
assign_dim_error:


			if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
				ZVAL_NULL(EX_VAR(opline->result.var));
			}
		}
	}
	if (IS_CONST != IS_UNUSED) {


	}
	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
	/* assign_dim has two opcodes! */
	ZEND_VM_NEXT_OPCODE_EX(1, 2);
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_ASSIGN_SPEC_VAR_CONST_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *value;
	zval *variable_ptr;

	SAVE_OPLINE();
	value = RT_CONSTANT(opline, opline->op2);
	variable_ptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);

	if (0 || UNEXPECTED(0)) {
		zend_refcounted *garbage = NULL;

		value = zend_assign_to_variable_ex(variable_ptr, value, IS_CONST, EX_USES_STRICT_TYPES(), &garbage);
		if (UNEXPECTED(0)) {
			ZVAL_COPY(EX_VAR(opline->result.var), value);
		}
		if (garbage) {
			GC_DTOR_NO_REF(garbage);
		}
	} else {
		value = zend_assign_to_variable(variable_ptr, value, IS_CONST, EX_USES_STRICT_TYPES());
	}
	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
	/* zend_assign_to_variable() always takes care of op2, never free it! */

	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_ASSIGN_SPEC_VAR_CONST_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *value;
	zval *variable_ptr;

	SAVE_OPLINE();
	value = RT_CONSTANT(opline, opline->op2);
	variable_ptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);

	if (0 || UNEXPECTED(1)) {
		zend_refcounted *garbage = NULL;

		value = zend_assign_to_variable_ex(variable_ptr, value, IS_CONST, EX_USES_STRICT_TYPES(), &garbage);
		if (UNEXPECTED(1)) {
			ZVAL_COPY(EX_VAR(opline->result.var), value);
		}
		if (garbage) {
			GC_DTOR_NO_REF(garbage);
		}
	} else {
		value = zend_assign_to_variable(variable_ptr, value, IS_CONST, EX_USES_STRICT_TYPES());
	}
	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
	/* zend_assign_to_variable() always takes care of op2, never free it! */

	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_ASSIGN_OBJ_REF_SPEC_VAR_CONST_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *property, *container, *value_ptr;

	SAVE_OPLINE();

	container = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
	property = RT_CONSTANT(opline, opline->op2);

	value_ptr = _get_zval_ptr_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);

	if (1) {
		if (IS_VAR == IS_UNUSED) {
			if (IS_CONST == IS_CONST) {
				zend_assign_to_property_reference_this_const(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
			} else {
				zend_assign_to_property_reference_this_var(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
			}
		} else {
			if (IS_CONST == IS_CONST) {
				zend_assign_to_property_reference_var_const(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
			} else {
				zend_assign_to_property_reference_var_var(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
			}
		}
	} else {
		zend_assign_to_property_reference(container, IS_VAR, property, IS_CONST, value_ptr OPLINE_CC EXECUTE_DATA_CC);
	}

	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));


	zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
	ZEND_VM_NEXT_OPCODE_EX(1, 2);
}

/* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CONST|VAR) */
static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_ASSIGN_OBJ_REF_SPEC_VAR_CONST_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *property, *container, *value_ptr;

	SAVE_OPLINE();

	container = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
	property = RT_CONSTANT(opline, opline->op2);

	value_ptr = _get_zval_ptr_cv_BP_VAR_W((opline+1)->op1.var EXECUTE_DATA_CC);

	if (1) {
		if (IS_VAR == IS_UNUSED) {
			if (IS_CONST == IS_CONST) {
				zend_assign_to_property_reference_this_const(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
			} else {
				zend_assign_to_property_reference_this_var(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
			}
		} else {
			if (IS_CONST == IS_CONST) {
				zend_assign_to_property_reference_var_const(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
			} else {
				zend_assign_to_property_reference_var_var(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
			}
		}
	} else {
		zend_assign_to_property_reference(container, IS_VAR, property, IS_CONST, value_ptr OPLINE_CC EXECUTE_DATA_CC);
	}

	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));




	ZEND_VM_NEXT_OPCODE_EX(1, 2);
}

/* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CONST|VAR) */
static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_INIT_STATIC_METHOD_CALL_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *function_name;
	zend_class_entry *ce;
	uint32_t call_info;
	zend_function *fbc;
	zend_execute_data *call;

	SAVE_OPLINE();

	if (IS_VAR == IS_CONST) {
		/* no function found. try a static method in class */
		ce = CACHED_PTR(opline->result.num);
		if (UNEXPECTED(ce == NULL)) {
			ce = zend_fetch_class_by_name(Z_STR_P(RT_CONSTANT(opline, opline->op1)), Z_STR_P(RT_CONSTANT(opline, opline->op1) + 1), ZEND_FETCH_CLASS_DEFAULT | ZEND_FETCH_CLASS_EXCEPTION);
			if (UNEXPECTED(ce == NULL)) {


				HANDLE_EXCEPTION();
			}
			if (IS_CONST != IS_CONST) {
				CACHE_PTR(opline->result.num, ce);
			}
		}
	} else if (IS_VAR == IS_UNUSED) {
		ce = zend_fetch_class(NULL, opline->op1.num);
		if (UNEXPECTED(ce == NULL)) {


			HANDLE_EXCEPTION();
		}
	} else {
		ce = Z_CE_P(EX_VAR(opline->op1.var));
	}

	if (IS_VAR == IS_CONST &&
	    IS_CONST == IS_CONST &&
	    EXPECTED((fbc = CACHED_PTR(opline->result.num + sizeof(void*))) != NULL)) {
		/* nothing to do */
	} else if (IS_VAR != IS_CONST &&
	           IS_CONST == IS_CONST &&
	           EXPECTED(CACHED_PTR(opline->result.num) == ce)) {
		fbc = CACHED_PTR(opline->result.num + sizeof(void*));
	} else if (IS_CONST != IS_UNUSED) {
		function_name = RT_CONSTANT(opline, opline->op2);
		if (IS_CONST != IS_CONST) {
			if (UNEXPECTED(Z_TYPE_P(function_name) != IS_STRING)) {
				do {
					if (IS_CONST & (IS_VAR|IS_CV) && Z_ISREF_P(function_name)) {
						function_name = Z_REFVAL_P(function_name);
						if (EXPECTED(Z_TYPE_P(function_name) == IS_STRING)) {
							break;
						}
					} else if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) {
						ZVAL_UNDEFINED_OP2();
						if (UNEXPECTED(EG(exception) != NULL)) {
							HANDLE_EXCEPTION();
						}
					}
					zend_throw_error(NULL, "Method name must be a string");


					HANDLE_EXCEPTION();
				} while (0);
			}
		}

		if (ce->get_static_method) {
			fbc = ce->get_static_method(ce, Z_STR_P(function_name));
		} else {
			fbc = zend_std_get_static_method(ce, Z_STR_P(function_name), ((IS_CONST == IS_CONST) ? (RT_CONSTANT(opline, opline->op2) + 1) : NULL));
		}
		if (UNEXPECTED(fbc == NULL)) {
			if (EXPECTED(!EG(exception))) {
				zend_undefined_method(ce, Z_STR_P(function_name));
			}


			HANDLE_EXCEPTION();
		}
		if (IS_CONST == IS_CONST &&
		    EXPECTED(!(fbc->common.fn_flags & (ZEND_ACC_CALL_VIA_TRAMPOLINE|ZEND_ACC_NEVER_CACHE))) &&
			EXPECTED(!(fbc->common.scope->ce_flags & ZEND_ACC_TRAIT))) {
			CACHE_POLYMORPHIC_PTR(opline->result.num, ce, fbc);
		}
		if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!RUN_TIME_CACHE(&fbc->op_array))) {
			init_func_run_time_cache(&fbc->op_array);
		}
		if (IS_CONST != IS_CONST) {


		}
	} else {
		if (UNEXPECTED(ce->constructor == NULL)) {
			zend_throw_error(NULL, "Cannot call constructor");
			HANDLE_EXCEPTION();
		}
		if (Z_TYPE(EX(This)) == IS_OBJECT && Z_OBJ(EX(This))->ce != ce->constructor->common.scope && (ce->constructor->common.fn_flags & ZEND_ACC_PRIVATE)) {
			zend_throw_error(NULL, "Cannot call private %s::__construct()", ZSTR_VAL(ce->name));
			HANDLE_EXCEPTION();
		}
		fbc = ce->constructor;
		if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!RUN_TIME_CACHE(&fbc->op_array))) {
			init_func_run_time_cache(&fbc->op_array);
		}
	}

	if (!(fbc->common.fn_flags & ZEND_ACC_STATIC)) {
		if (Z_TYPE(EX(This)) == IS_OBJECT && instanceof_function(Z_OBJCE(EX(This)), ce)) {
			ce = (zend_class_entry*)Z_OBJ(EX(This));
			call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_HAS_THIS;
		} else {
			zend_non_static_method_call(fbc);
			HANDLE_EXCEPTION();
		}
	} else {
		/* previous opcode is ZEND_FETCH_CLASS */
		if (IS_VAR == IS_UNUSED
		 && ((opline->op1.num & ZEND_FETCH_CLASS_MASK) == ZEND_FETCH_CLASS_PARENT ||
		     (opline->op1.num & ZEND_FETCH_CLASS_MASK) == ZEND_FETCH_CLASS_SELF)) {
			if (Z_TYPE(EX(This)) == IS_OBJECT) {
				ce = Z_OBJCE(EX(This));
			} else {
				ce = Z_CE(EX(This));
			}
		}
		call_info = ZEND_CALL_NESTED_FUNCTION;
	}

	call = zend_vm_stack_push_call_frame(call_info,
		fbc, opline->extended_value, ce);
	call->prev_execute_data = EX(call);
	EX(call) = call;

	ZEND_VM_NEXT_OPCODE();
}

static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_SEND_VAR_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *varptr, *arg;

	if (IS_CONST == IS_CONST) {
		SAVE_OPLINE();
		zend_string *arg_name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
		uint32_t arg_num;
		arg = zend_handle_named_arg(&EX(call), arg_name, &arg_num, CACHE_ADDR(opline->result.num));
		if (UNEXPECTED(!arg)) {
			zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
			HANDLE_EXCEPTION();
		}
	} else {
		arg = ZEND_CALL_VAR(EX(call), opline->result.var);
	}

	varptr = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
	if (IS_VAR == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(varptr) == IS_UNDEF)) {
		SAVE_OPLINE();
		ZVAL_UNDEFINED_OP1();
		ZVAL_NULL(arg);
		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
	}

	if (IS_VAR == IS_CV) {
		ZVAL_COPY_DEREF(arg, varptr);
	} else /* if (IS_VAR == IS_VAR) */ {
		if (UNEXPECTED(Z_ISREF_P(varptr))) {
			zend_refcounted *ref = Z_COUNTED_P(varptr);

			varptr = Z_REFVAL_P(varptr);
			ZVAL_COPY_VALUE(arg, varptr);
			if (UNEXPECTED(GC_DELREF(ref) == 0)) {
				efree_size(ref, sizeof(zend_reference));
			} else if (Z_OPT_REFCOUNTED_P(arg)) {
				Z_ADDREF_P(arg);
			}
		} else {
			ZVAL_COPY_VALUE(arg, varptr);
		}
	}

	ZEND_VM_NEXT_OPCODE();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_SEND_VAR_NO_REF_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *varptr, *arg;

	if (IS_CONST == IS_CONST) {
		SAVE_OPLINE();
		zend_string *arg_name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
		uint32_t arg_num;
		arg = zend_handle_named_arg(&EX(call), arg_name, &arg_num, CACHE_ADDR(opline->result.num));
		if (UNEXPECTED(!arg)) {
			zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
			HANDLE_EXCEPTION();
		}
	} else {
		arg = ZEND_CALL_VAR(EX(call), opline->result.var);
	}

	varptr = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
	ZVAL_COPY_VALUE(arg, varptr);

	if (EXPECTED(Z_ISREF_P(varptr))) {
		ZEND_VM_NEXT_OPCODE();
	}

	SAVE_OPLINE();
	ZVAL_NEW_REF(arg, arg);
	zend_error(E_NOTICE, "Only variables should be passed by reference");
	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_SEND_VAR_NO_REF_EX_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *varptr, *arg;
	uint32_t arg_num;

	if (IS_CONST == IS_CONST) {
		SAVE_OPLINE();
		zend_string *arg_name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
		arg = zend_handle_named_arg(&EX(call), arg_name, &arg_num, CACHE_ADDR(opline->result.num));
		if (UNEXPECTED(!arg)) {
			zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
			HANDLE_EXCEPTION();
		}
	} else {
		arg = ZEND_CALL_VAR(EX(call), opline->result.var);
		arg_num = opline->op2.num;
	}

	if (EXPECTED(arg_num <= MAX_ARG_FLAG_NUM)) {
		if (!QUICK_ARG_SHOULD_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
			goto send_var;
		}

		varptr = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
		ZVAL_COPY_VALUE(arg, varptr);

		if (EXPECTED(Z_ISREF_P(varptr) ||
		    QUICK_ARG_MAY_BE_SENT_BY_REF(EX(call)->func, arg_num))) {
			ZEND_VM_NEXT_OPCODE();
		}
	} else {
		if (!ARG_SHOULD_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
			goto send_var;
		}

		varptr = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
		ZVAL_COPY_VALUE(arg, varptr);

		if (EXPECTED(Z_ISREF_P(varptr) ||
		    ARG_MAY_BE_SENT_BY_REF(EX(call)->func, arg_num))) {
			ZEND_VM_NEXT_OPCODE();
		}
	}

	SAVE_OPLINE();
	ZVAL_NEW_REF(arg, arg);
	zend_error(E_NOTICE, "Only variables should be passed by reference");
	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();

send_var:
	varptr = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
	if (UNEXPECTED(Z_ISREF_P(varptr))) {
		zend_refcounted *ref = Z_COUNTED_P(varptr);

		varptr = Z_REFVAL_P(varptr);
		ZVAL_COPY_VALUE(arg, varptr);
		if (UNEXPECTED(GC_DELREF(ref) == 0)) {
			efree_size(ref, sizeof(zend_reference));
		} else if (Z_OPT_REFCOUNTED_P(arg)) {
			Z_ADDREF_P(arg);
		}
	} else {
		ZVAL_COPY_VALUE(arg, varptr);
	}
	ZEND_VM_NEXT_OPCODE();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_SEND_REF_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *varptr, *arg;

	SAVE_OPLINE();
	if (IS_CONST == IS_CONST) {
		zend_string *arg_name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
		uint32_t arg_num;
		arg = zend_handle_named_arg(&EX(call), arg_name, &arg_num, CACHE_ADDR(opline->result.num));
		if (UNEXPECTED(!arg)) {
			zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
			HANDLE_EXCEPTION();
		}
	} else {
		arg = ZEND_CALL_VAR(EX(call), opline->result.var);
	}

	varptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
	if (Z_ISREF_P(varptr)) {
		Z_ADDREF_P(varptr);
	} else {
		ZVAL_MAKE_REF_EX(varptr, 2);
	}
	ZVAL_REF(arg, Z_REF_P(varptr));

	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
	ZEND_VM_NEXT_OPCODE();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_SEND_VAR_EX_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *varptr, *arg;
	uint32_t arg_num;

	if (IS_CONST == IS_CONST) {
		SAVE_OPLINE();
		zend_string *arg_name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
		arg = zend_handle_named_arg(&EX(call), arg_name, &arg_num, CACHE_ADDR(opline->result.num));
		if (UNEXPECTED(!arg)) {
			zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
			HANDLE_EXCEPTION();
		}
	} else {
		arg = ZEND_CALL_VAR(EX(call), opline->result.var);
		arg_num = opline->op2.num;
	}

	if (EXPECTED(arg_num <= MAX_ARG_FLAG_NUM)) {
		if (QUICK_ARG_SHOULD_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
			goto send_var_by_ref;
		}
	} else if (ARG_SHOULD_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
send_var_by_ref:
		varptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
		if (Z_ISREF_P(varptr)) {
			Z_ADDREF_P(varptr);
		} else {
			ZVAL_MAKE_REF_EX(varptr, 2);
		}
		ZVAL_REF(arg, Z_REF_P(varptr));

		zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
		ZEND_VM_NEXT_OPCODE();
	}

	varptr = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
	if (IS_VAR == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(varptr) == IS_UNDEF)) {
		SAVE_OPLINE();
		ZVAL_UNDEFINED_OP1();
		ZVAL_NULL(arg);
		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
	}

	if (IS_VAR == IS_CV) {
		ZVAL_COPY_DEREF(arg, varptr);
	} else /* if (IS_VAR == IS_VAR) */ {
		if (UNEXPECTED(Z_ISREF_P(varptr))) {
			zend_refcounted *ref = Z_COUNTED_P(varptr);

			varptr = Z_REFVAL_P(varptr);
			ZVAL_COPY_VALUE(arg, varptr);
			if (UNEXPECTED(GC_DELREF(ref) == 0)) {
				efree_size(ref, sizeof(zend_reference));
			} else if (Z_OPT_REFCOUNTED_P(arg)) {
				Z_ADDREF_P(arg);
			}
		} else {
			ZVAL_COPY_VALUE(arg, varptr);
		}
	}

	ZEND_VM_NEXT_OPCODE();
}

static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_SEND_FUNC_ARG_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *varptr, *arg;

	if (IS_CONST == IS_CONST) {
		// TODO: Would it make sense to share the cache slot with CHECK_FUNC_ARG?
		SAVE_OPLINE();
		zend_string *arg_name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
		uint32_t arg_num;
		arg = zend_handle_named_arg(&EX(call), arg_name, &arg_num, CACHE_ADDR(opline->result.num));
		if (UNEXPECTED(!arg)) {
			zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
			HANDLE_EXCEPTION();
		}
	} else {
		arg = ZEND_CALL_VAR(EX(call), opline->result.var);
	}

	if (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) {
		varptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
		if (Z_ISREF_P(varptr)) {
			Z_ADDREF_P(varptr);
		} else {
			ZVAL_MAKE_REF_EX(varptr, 2);
		}
		ZVAL_REF(arg, Z_REF_P(varptr));

		zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
		ZEND_VM_NEXT_OPCODE();
	}

	varptr = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);

	if (UNEXPECTED(Z_ISREF_P(varptr))) {
		zend_refcounted *ref = Z_COUNTED_P(varptr);

		varptr = Z_REFVAL_P(varptr);
		ZVAL_COPY_VALUE(arg, varptr);
		if (UNEXPECTED(GC_DELREF(ref) == 0)) {
			efree_size(ref, sizeof(zend_reference));
		} else if (Z_OPT_REFCOUNTED_P(arg)) {
			Z_ADDREF_P(arg);
		}
	} else {
		ZVAL_COPY_VALUE(arg, varptr);
	}

	ZEND_VM_NEXT_OPCODE();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_FETCH_CLASS_CONSTANT_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	zend_class_entry *ce, *scope;
	zend_class_constant *c;
	zval *value, *zv, *constant_zv;
	zend_string *constant_name;
	USE_OPLINE

	SAVE_OPLINE();

	do {
		if (IS_VAR == IS_CONST && IS_CONST == IS_CONST) {
			if (EXPECTED(CACHED_PTR(opline->extended_value + sizeof(void*)))) {
				value = CACHED_PTR(opline->extended_value + sizeof(void*));
				break;
			}
		}
		if (IS_VAR == IS_CONST) {
			if (EXPECTED(CACHED_PTR(opline->extended_value))) {
				ce = CACHED_PTR(opline->extended_value);
			} else {
				ce = zend_fetch_class_by_name(Z_STR_P(RT_CONSTANT(opline, opline->op1)), Z_STR_P(RT_CONSTANT(opline, opline->op1) + 1), ZEND_FETCH_CLASS_DEFAULT | ZEND_FETCH_CLASS_EXCEPTION);
				if (UNEXPECTED(ce == NULL)) {
					ZVAL_UNDEF(EX_VAR(opline->result.var));


					HANDLE_EXCEPTION();
				}
				CACHE_PTR(opline->extended_value, ce);
			}
		} else if (IS_VAR == IS_UNUSED) {
			ce = zend_fetch_class(NULL, opline->op1.num);
			if (UNEXPECTED(ce == NULL)) {
				ZVAL_UNDEF(EX_VAR(opline->result.var));


				HANDLE_EXCEPTION();
			}
		} else {
			ce = Z_CE_P(EX_VAR(opline->op1.var));
		}
		if (IS_VAR != IS_CONST
			&& IS_CONST == IS_CONST
			&& EXPECTED(CACHED_PTR(opline->extended_value) == ce)) {
			value = CACHED_PTR(opline->extended_value + sizeof(void*));
			break;
		}

		constant_zv = RT_CONSTANT(opline, opline->op2);
		if (UNEXPECTED(Z_TYPE_P(constant_zv) != IS_STRING)) {
			zend_invalid_class_constant_type_error(Z_TYPE_P(constant_zv));
			ZVAL_UNDEF(EX_VAR(opline->result.var));


			HANDLE_EXCEPTION();
		}
		constant_name = Z_STR_P(constant_zv);
		/* Magic 'class' for constant OP2 is caught at compile-time */
		if (IS_CONST != IS_CONST && UNEXPECTED(zend_string_equals_literal_ci(constant_name, "class"))) {
			ZVAL_STR_COPY(EX_VAR(opline->result.var), ce->name);


			ZEND_VM_NEXT_OPCODE();
		}
		zv = IS_CONST == IS_CONST
			? zend_hash_find_known_hash(CE_CONSTANTS_TABLE(ce), constant_name)
			: zend_hash_find(CE_CONSTANTS_TABLE(ce), constant_name);

		if (EXPECTED(zv != NULL)) {
			c = Z_PTR_P(zv);
			scope = EX(func)->op_array.scope;
			if (!zend_verify_const_access(c, scope)) {
				zend_throw_error(NULL, "Cannot access %s constant %s::%s", zend_visibility_string(ZEND_CLASS_CONST_FLAGS(c)), ZSTR_VAL(ce->name), ZSTR_VAL(constant_name));
				ZVAL_UNDEF(EX_VAR(opline->result.var));


				HANDLE_EXCEPTION();
			}

			if (ce->ce_flags & ZEND_ACC_TRAIT) {
				zend_throw_error(NULL, "Cannot access trait constant %s::%s directly", ZSTR_VAL(ce->name), ZSTR_VAL(constant_name));
				ZVAL_UNDEF(EX_VAR(opline->result.var));


				HANDLE_EXCEPTION();
			}

			bool is_constant_deprecated = ZEND_CLASS_CONST_FLAGS(c) & ZEND_ACC_DEPRECATED;
			if (UNEXPECTED(is_constant_deprecated) && !CONST_IS_RECURSIVE(c)) {
				if (c->ce->type == ZEND_USER_CLASS) {
					/* Recursion protection only applied to user constants, GH-18463 */
					CONST_PROTECT_RECURSION(c);
				}
				zend_deprecated_class_constant(c, constant_name);
				if (c->ce->type == ZEND_USER_CLASS) {
					CONST_UNPROTECT_RECURSION(c);
				}

				if (EG(exception)) {
					ZVAL_UNDEF(EX_VAR(opline->result.var));


					HANDLE_EXCEPTION();
				}
			}

			value = &c->value;
			// Enums require loading of all class constants to build the backed enum table
			if (ce->ce_flags & ZEND_ACC_ENUM && ce->enum_backing_type != IS_UNDEF && ce->type == ZEND_USER_CLASS && !(ce->ce_flags & ZEND_ACC_CONSTANTS_UPDATED)) {
				if (UNEXPECTED(zend_update_class_constants(ce) == FAILURE)) {
					ZVAL_UNDEF(EX_VAR(opline->result.var));


					HANDLE_EXCEPTION();
				}
			}
			if (Z_TYPE_P(value) == IS_CONSTANT_AST) {
				if (UNEXPECTED(zend_update_class_constant(c, constant_name, c->ce) != SUCCESS)) {
					ZVAL_UNDEF(EX_VAR(opline->result.var));


					HANDLE_EXCEPTION();
				}
			}
			if (IS_CONST == IS_CONST && !is_constant_deprecated) {
				CACHE_POLYMORPHIC_PTR(opline->extended_value, ce, value);
			}
		} else {
			zend_throw_error(NULL, "Undefined constant %s::%s",
				ZSTR_VAL(ce->name), ZSTR_VAL(constant_name));
			ZVAL_UNDEF(EX_VAR(opline->result.var));


			HANDLE_EXCEPTION();
		}
	} while (0);

	ZVAL_COPY_OR_DUP(EX_VAR(opline->result.var), value);


	ZEND_VM_NEXT_OPCODE();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *expr_ptr, new_expr;

	SAVE_OPLINE();
	if ((IS_VAR == IS_VAR || IS_VAR == IS_CV) &&
	    UNEXPECTED(opline->extended_value & ZEND_ARRAY_ELEMENT_REF)) {
		expr_ptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
		if (Z_ISREF_P(expr_ptr)) {
			Z_ADDREF_P(expr_ptr);
		} else {
			ZVAL_MAKE_REF_EX(expr_ptr, 2);
		}
		zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
	} else {
		expr_ptr = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
		if (IS_VAR == IS_TMP_VAR) {
			/* pass */
		} else if (IS_VAR == IS_CONST) {
			Z_TRY_ADDREF_P(expr_ptr);
		} else if (IS_VAR == IS_CV) {
			ZVAL_DEREF(expr_ptr);
			Z_TRY_ADDREF_P(expr_ptr);
		} else /* if (IS_VAR == IS_VAR) */ {
			if (UNEXPECTED(Z_ISREF_P(expr_ptr))) {
				zend_refcounted *ref = Z_COUNTED_P(expr_ptr);

				expr_ptr = Z_REFVAL_P(expr_ptr);
				if (UNEXPECTED(GC_DELREF(ref) == 0)) {
					ZVAL_COPY_VALUE(&new_expr, expr_ptr);
					expr_ptr = &new_expr;
					efree_size(ref, sizeof(zend_reference));
				} else if (Z_OPT_REFCOUNTED_P(expr_ptr)) {
					Z_ADDREF_P(expr_ptr);
				}
			}
		}
	}

	if (IS_CONST != IS_UNUSED) {
		zval *offset = RT_CONSTANT(opline, opline->op2);
		zend_string *str;
		zend_ulong hval;

add_again:
		if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) {
			str = Z_STR_P(offset);
			if (IS_CONST != IS_CONST) {
				if (ZEND_HANDLE_NUMERIC(str, hval)) {
					goto num_index;
				}
			}
str_index:
			zend_hash_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), str, expr_ptr);
		} else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
			hval = Z_LVAL_P(offset);
num_index:
			zend_hash_index_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), hval, expr_ptr);
		} else if ((IS_CONST & (IS_VAR|IS_CV)) && EXPECTED(Z_TYPE_P(offset) == IS_REFERENCE)) {
			offset = Z_REFVAL_P(offset);
			goto add_again;
		} else if (UNEXPECTED(Z_TYPE_P(offset) == IS_NULL)) {
			zval tmp;
			if (IS_VAR == IS_CV || IS_VAR == IS_VAR) {
				ZVAL_COPY(&tmp, expr_ptr);
			}
			zend_error(E_DEPRECATED, "Using null as an array offset is deprecated, use an empty string instead");
			if (IS_VAR == IS_CV || IS_VAR == IS_VAR) {
				/* A userland error handler can do funky things to the expression, so reset it */
				zval_ptr_dtor(expr_ptr);
				ZVAL_COPY_VALUE(expr_ptr, &tmp);
			}
			if (UNEXPECTED(EG(exception))) {
				zval_ptr_dtor_nogc(expr_ptr);
				HANDLE_EXCEPTION();
			}
			str = ZSTR_EMPTY_ALLOC();
			goto str_index;
		} else if (Z_TYPE_P(offset) == IS_DOUBLE) {
			hval = zend_dval_to_lval_safe(Z_DVAL_P(offset));
			goto num_index;
		} else if (Z_TYPE_P(offset) == IS_FALSE) {
			hval = 0;
			goto num_index;
		} else if (Z_TYPE_P(offset) == IS_TRUE) {
			hval = 1;
			goto num_index;
		} else if (Z_TYPE_P(offset) == IS_RESOURCE) {
			zend_use_resource_as_offset(offset);
			hval = Z_RES_HANDLE_P(offset);
			goto num_index;
		} else if (IS_CONST == IS_CV && Z_TYPE_P(offset) == IS_UNDEF) {
			ZVAL_UNDEFINED_OP2();
			str = ZSTR_EMPTY_ALLOC();
			goto str_index;
		} else {
			zend_illegal_array_offset_access(offset);
			zval_ptr_dtor_nogc(expr_ptr);
		}


	} else {
		if (!zend_hash_next_index_insert(Z_ARRVAL_P(EX_VAR(opline->result.var)), expr_ptr)) {
			zend_cannot_add_element();
			zval_ptr_dtor_nogc(expr_ptr);
		}
	}
	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_INIT_ARRAY_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	zval *array;
	uint32_t size;
	USE_OPLINE

	SAVE_OPLINE();
	array = EX_VAR(opline->result.var);
	if (IS_VAR != IS_UNUSED) {
		size = opline->extended_value >> ZEND_ARRAY_SIZE_SHIFT;
		ZVAL_ARR(array, zend_new_array(size));
		/* Explicitly initialize array as not-packed if flag is set */
		if (opline->extended_value & ZEND_ARRAY_NOT_PACKED) {
			zend_hash_real_init_mixed(Z_ARRVAL_P(array));
		}
		ZEND_VM_TAIL_CALL(ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
	} else {
		ZVAL_ARR(array, zend_new_array(0));
		ZEND_VM_NEXT_OPCODE();
	}
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_UNSET_DIM_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *container;
	zval *offset;
	zend_ulong hval;
	zend_string *key;

	SAVE_OPLINE();
	container = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
	offset = RT_CONSTANT(opline, opline->op2);

	do {
		if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
			HashTable *ht;

unset_dim_array:
			SEPARATE_ARRAY(container);
			ht = Z_ARRVAL_P(container);
offset_again:
			if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) {
				key = Z_STR_P(offset);
				if (IS_CONST != IS_CONST) {
					if (ZEND_HANDLE_NUMERIC(key, hval)) {
						goto num_index_dim;
					}
				}
str_index_dim:
				ZEND_ASSERT(ht != &EG(symbol_table));
				zend_hash_del(ht, key);
			} else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
				hval = Z_LVAL_P(offset);
num_index_dim:
				zend_hash_index_del(ht, hval);
			} else if ((IS_CONST & (IS_VAR|IS_CV)) && EXPECTED(Z_TYPE_P(offset) == IS_REFERENCE)) {
				offset = Z_REFVAL_P(offset);
				goto offset_again;
			} else if (Z_TYPE_P(offset) == IS_DOUBLE) {
				/* The array may be destroyed while throwing a warning in case the float is not representable as an int.
				 * Temporarily increase the refcount to detect this situation. */
				GC_TRY_ADDREF(ht);
				hval = zend_dval_to_lval_safe(Z_DVAL_P(offset));
				if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE) && !GC_DELREF(ht)) {
					zend_array_destroy(ht);
					break;
				}
				if (EG(exception)) {
					break;
				}
				goto num_index_dim;
			} else if (Z_TYPE_P(offset) == IS_NULL) {
				key = ZSTR_EMPTY_ALLOC();
				goto str_index_dim;
			} else if (Z_TYPE_P(offset) == IS_FALSE) {
				hval = 0;
				goto num_index_dim;
			} else if (Z_TYPE_P(offset) == IS_TRUE) {
				hval = 1;
				goto num_index_dim;
			} else if (Z_TYPE_P(offset) == IS_RESOURCE) {
				zend_use_resource_as_offset(offset);
				hval = Z_RES_HANDLE_P(offset);
				goto num_index_dim;
			} else if (IS_CONST == IS_CV && Z_TYPE_P(offset) == IS_UNDEF) {
				ZVAL_UNDEFINED_OP2();
				key = ZSTR_EMPTY_ALLOC();
				goto str_index_dim;
			} else {
				zend_illegal_array_offset_unset(offset);
			}
			break;
		} else if (Z_ISREF_P(container)) {
			container = Z_REFVAL_P(container);
			if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
				goto unset_dim_array;
			}
		}
		if (IS_VAR == IS_CV && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
			container = ZVAL_UNDEFINED_OP1();
		}
		if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(offset) == IS_UNDEF)) {
			offset = ZVAL_UNDEFINED_OP2();
		}
		if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
			if (IS_CONST == IS_CONST && Z_EXTRA_P(offset) == ZEND_EXTRA_VALUE) {
				offset++;
			}
			Z_OBJ_HT_P(container)->unset_dimension(Z_OBJ_P(container), offset);
		} else if (UNEXPECTED(Z_TYPE_P(container) == IS_STRING)) {
			zend_throw_error(NULL, "Cannot unset string offsets");
		} else if (UNEXPECTED(Z_TYPE_P(container) > IS_FALSE)) {
			zend_throw_error(NULL, "Cannot unset offset in a non-array variable");
		} else if (UNEXPECTED(Z_TYPE_P(container) == IS_FALSE)) {
			zend_false_to_array_deprecated();
		}
	} while (0);


	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_UNSET_OBJ_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *container;
	zval *offset;
	zend_string *name, *tmp_name;

	SAVE_OPLINE();
	container = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
	offset = RT_CONSTANT(opline, opline->op2);

	do {
		if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT)) {
			if (Z_ISREF_P(container)) {
				container = Z_REFVAL_P(container);
				if (Z_TYPE_P(container) != IS_OBJECT) {
					if (IS_VAR == IS_CV
					 && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
						ZVAL_UNDEFINED_OP1();
					}
					break;
				}
			} else {
				break;
			}
		}
		if (IS_CONST == IS_CONST) {
			name = Z_STR_P(offset);
		} else {
			name = zval_try_get_tmp_string(offset, &tmp_name);
			if (UNEXPECTED(!name)) {
				break;
			}
		}
		Z_OBJ_HT_P(container)->unset_property(Z_OBJ_P(container), name, ((IS_CONST == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL));
		if (IS_CONST != IS_CONST) {
			zend_tmp_string_release(tmp_name);
		}
	} while (0);


	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_YIELD_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE

	zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C);

	SAVE_OPLINE();
	if (UNEXPECTED(generator->flags & ZEND_GENERATOR_FORCED_CLOSE)) {
		ZEND_VM_TAIL_CALL(zend_yield_in_closed_generator_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
	}

	/* Destroy the previously yielded value */
	zval_ptr_dtor(&generator->value);

	/* Destroy the previously yielded key */
	zval_ptr_dtor(&generator->key);

	/* Set the new yielded value */
	if (IS_VAR != IS_UNUSED) {
		if (UNEXPECTED(EX(func)->op_array.fn_flags & ZEND_ACC_RETURN_REFERENCE)) {
			/* Constants and temporary variables aren't yieldable by reference,
			 * but we still allow them with a notice. */
			if (IS_VAR & (IS_CONST|IS_TMP_VAR)) {
				zval *value;

				zend_error(E_NOTICE, "Only variable references should be yielded by reference");

				value = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
				ZVAL_COPY_VALUE(&generator->value, value);
				if (IS_VAR == IS_CONST) {
					if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
						Z_ADDREF(generator->value);
					}
				}
			} else {
				zval *value_ptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);

				/* If a function call result is yielded and the function did
				 * not return by reference we throw a notice. */
				do {
					if (IS_VAR == IS_VAR) {
						ZEND_ASSERT(value_ptr != &EG(uninitialized_zval));
						if (opline->extended_value == ZEND_RETURNS_FUNCTION
						 && !Z_ISREF_P(value_ptr)) {
							zend_error(E_NOTICE, "Only variable references should be yielded by reference");
							ZVAL_COPY(&generator->value, value_ptr);
							break;
						}
					}
					if (Z_ISREF_P(value_ptr)) {
						Z_ADDREF_P(value_ptr);
					} else {
						ZVAL_MAKE_REF_EX(value_ptr, 2);
					}
					ZVAL_REF(&generator->value, Z_REF_P(value_ptr));
				} while (0);

				zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
			}
		} else {
			zval *value = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);

			/* Consts, temporary variables and references need copying */
			if (IS_VAR == IS_CONST) {
				ZVAL_COPY_VALUE(&generator->value, value);
				if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
					Z_ADDREF(generator->value);
				}
			} else if (IS_VAR == IS_TMP_VAR) {
				ZVAL_COPY_VALUE(&generator->value, value);
			} else if ((IS_VAR & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) {
				ZVAL_COPY(&generator->value, Z_REFVAL_P(value));
				zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
			} else {
				ZVAL_COPY_VALUE(&generator->value, value);
				if (IS_VAR == IS_CV) {
					if (Z_OPT_REFCOUNTED_P(value)) Z_ADDREF_P(value);
				}
			}
		}
	} else {
		/* If no value was specified yield null */
		ZVAL_NULL(&generator->value);
	}

	/* Set the new yielded key */
	if (IS_CONST != IS_UNUSED) {
		zval *key = RT_CONSTANT(opline, opline->op2);
		if ((IS_CONST & (IS_CV|IS_VAR)) && UNEXPECTED(Z_TYPE_P(key) == IS_REFERENCE)) {
			key = Z_REFVAL_P(key);
		}
		ZVAL_COPY(&generator->key, key);


		if (Z_TYPE(generator->key) == IS_LONG
		    && Z_LVAL(generator->key) > generator->largest_used_integer_key
		) {
			generator->largest_used_integer_key = Z_LVAL(generator->key);
		}
	} else {
		/* If no key was specified we use auto-increment keys */
		generator->largest_used_integer_key++;
		ZVAL_LONG(&generator->key, generator->largest_used_integer_key);
	}

	if (RETURN_VALUE_USED(opline)) {
		/* If the return value of yield is used set the send
		 * target and initialize it to NULL */
		generator->send_target = EX_VAR(opline->result.var);
		ZVAL_NULL(generator->send_target);
	} else {
		generator->send_target = NULL;
	}

	/* The GOTO VM uses a local opline variable. We need to set the opline
	 * variable in execute_data so we don't resume at an old position. */
	SAVE_OPLINE();

	ZEND_VM_RETURN();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_IN_ARRAY_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1;
	HashTable *ht = Z_ARRVAL_P(RT_CONSTANT(opline, opline->op2));
	zval *result;

	op1 = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
	if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
		result = zend_hash_find_ex(ht, Z_STR_P(op1), IS_VAR == IS_CONST);
		if (IS_VAR & (IS_TMP_VAR|IS_VAR)) {
			zval_ptr_dtor_str(op1);
		}
		ZEND_VM_SMART_BRANCH(result, 0);
	}

	if (opline->extended_value) {
		if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
			result = zend_hash_index_find(ht, Z_LVAL_P(op1));
			ZEND_VM_SMART_BRANCH(result, 0);
		}
		SAVE_OPLINE();
		if ((IS_VAR & (IS_VAR|IS_CV)) && Z_TYPE_P(op1) == IS_REFERENCE) {
			op1 = Z_REFVAL_P(op1);
			if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
				result = zend_hash_find(ht, Z_STR_P(op1));
				zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
				ZEND_VM_SMART_BRANCH(result, 0);
			} else if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
				result = zend_hash_index_find(ht, Z_LVAL_P(op1));
				zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
				ZEND_VM_SMART_BRANCH(result, 0);
			}
		} else if (IS_VAR == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
			ZVAL_UNDEFINED_OP1();
		}
	} else if (Z_TYPE_P(op1) <= IS_FALSE) {
		if (IS_VAR == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
			SAVE_OPLINE();
			ZVAL_UNDEFINED_OP1();
			if (UNEXPECTED(EG(exception) != NULL)) {
				HANDLE_EXCEPTION();
			}
		}
		result = zend_hash_find_known_hash(ht, ZSTR_EMPTY_ALLOC());
		ZEND_VM_SMART_BRANCH(result, 0);
	} else {
		zend_string *key;
		zval key_tmp;

		if ((IS_VAR & (IS_VAR|IS_CV)) && Z_TYPE_P(op1) == IS_REFERENCE) {
			op1 = Z_REFVAL_P(op1);
			if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
				result = zend_hash_find(ht, Z_STR_P(op1));
				zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
				ZEND_VM_SMART_BRANCH(result, 0);
			}
		}

		SAVE_OPLINE();
		ZEND_HASH_MAP_FOREACH_STR_KEY(ht, key) {
			ZVAL_STR(&key_tmp, key);
			if (zend_compare(op1, &key_tmp) == 0) {
				zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
				ZEND_VM_SMART_BRANCH(1, 1);
			}
		} ZEND_HASH_FOREACH_END();
	}
	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
	ZEND_VM_SMART_BRANCH(0, 1);
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_FETCH_CLASS_CONSTANT_SPEC_VAR_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	zend_class_entry *ce, *scope;
	zend_class_constant *c;
	zval *value, *zv, *constant_zv;
	zend_string *constant_name;
	USE_OPLINE

	SAVE_OPLINE();

	do {
		if (IS_VAR == IS_CONST && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST) {
			if (EXPECTED(CACHED_PTR(opline->extended_value + sizeof(void*)))) {
				value = CACHED_PTR(opline->extended_value + sizeof(void*));
				break;
			}
		}
		if (IS_VAR == IS_CONST) {
			if (EXPECTED(CACHED_PTR(opline->extended_value))) {
				ce = CACHED_PTR(opline->extended_value);
			} else {
				ce = zend_fetch_class_by_name(Z_STR_P(RT_CONSTANT(opline, opline->op1)), Z_STR_P(RT_CONSTANT(opline, opline->op1) + 1), ZEND_FETCH_CLASS_DEFAULT | ZEND_FETCH_CLASS_EXCEPTION);
				if (UNEXPECTED(ce == NULL)) {
					ZVAL_UNDEF(EX_VAR(opline->result.var));
					FREE_OP(opline->op2_type, opline->op2.var);
					HANDLE_EXCEPTION();
				}
				CACHE_PTR(opline->extended_value, ce);
			}
		} else if (IS_VAR == IS_UNUSED) {
			ce = zend_fetch_class(NULL, opline->op1.num);
			if (UNEXPECTED(ce == NULL)) {
				ZVAL_UNDEF(EX_VAR(opline->result.var));
				FREE_OP(opline->op2_type, opline->op2.var);
				HANDLE_EXCEPTION();
			}
		} else {
			ce = Z_CE_P(EX_VAR(opline->op1.var));
		}
		if (IS_VAR != IS_CONST
			&& (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST
			&& EXPECTED(CACHED_PTR(opline->extended_value) == ce)) {
			value = CACHED_PTR(opline->extended_value + sizeof(void*));
			break;
		}

		constant_zv = _get_zval_ptr_tmpvarcv(opline->op2_type, opline->op2, BP_VAR_R EXECUTE_DATA_CC);
		if (UNEXPECTED(Z_TYPE_P(constant_zv) != IS_STRING)) {
			zend_invalid_class_constant_type_error(Z_TYPE_P(constant_zv));
			ZVAL_UNDEF(EX_VAR(opline->result.var));
			FREE_OP(opline->op2_type, opline->op2.var);
			HANDLE_EXCEPTION();
		}
		constant_name = Z_STR_P(constant_zv);
		/* Magic 'class' for constant OP2 is caught at compile-time */
		if ((IS_TMP_VAR|IS_VAR|IS_CV) != IS_CONST && UNEXPECTED(zend_string_equals_literal_ci(constant_name, "class"))) {
			ZVAL_STR_COPY(EX_VAR(opline->result.var), ce->name);
			FREE_OP(opline->op2_type, opline->op2.var);
			ZEND_VM_NEXT_OPCODE();
		}
		zv = (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST
			? zend_hash_find_known_hash(CE_CONSTANTS_TABLE(ce), constant_name)
			: zend_hash_find(CE_CONSTANTS_TABLE(ce), constant_name);

		if (EXPECTED(zv != NULL)) {
			c = Z_PTR_P(zv);
			scope = EX(func)->op_array.scope;
			if (!zend_verify_const_access(c, scope)) {
				zend_throw_error(NULL, "Cannot access %s constant %s::%s", zend_visibility_string(ZEND_CLASS_CONST_FLAGS(c)), ZSTR_VAL(ce->name), ZSTR_VAL(constant_name));
				ZVAL_UNDEF(EX_VAR(opline->result.var));
				FREE_OP(opline->op2_type, opline->op2.var);
				HANDLE_EXCEPTION();
			}

			if (ce->ce_flags & ZEND_ACC_TRAIT) {
				zend_throw_error(NULL, "Cannot access trait constant %s::%s directly", ZSTR_VAL(ce->name), ZSTR_VAL(constant_name));
				ZVAL_UNDEF(EX_VAR(opline->result.var));
				FREE_OP(opline->op2_type, opline->op2.var);
				HANDLE_EXCEPTION();
			}

			bool is_constant_deprecated = ZEND_CLASS_CONST_FLAGS(c) & ZEND_ACC_DEPRECATED;
			if (UNEXPECTED(is_constant_deprecated) && !CONST_IS_RECURSIVE(c)) {
				if (c->ce->type == ZEND_USER_CLASS) {
					/* Recursion protection only applied to user constants, GH-18463 */
					CONST_PROTECT_RECURSION(c);
				}
				zend_deprecated_class_constant(c, constant_name);
				if (c->ce->type == ZEND_USER_CLASS) {
					CONST_UNPROTECT_RECURSION(c);
				}

				if (EG(exception)) {
					ZVAL_UNDEF(EX_VAR(opline->result.var));
					FREE_OP(opline->op2_type, opline->op2.var);
					HANDLE_EXCEPTION();
				}
			}

			value = &c->value;
			// Enums require loading of all class constants to build the backed enum table
			if (ce->ce_flags & ZEND_ACC_ENUM && ce->enum_backing_type != IS_UNDEF && ce->type == ZEND_USER_CLASS && !(ce->ce_flags & ZEND_ACC_CONSTANTS_UPDATED)) {
				if (UNEXPECTED(zend_update_class_constants(ce) == FAILURE)) {
					ZVAL_UNDEF(EX_VAR(opline->result.var));
					FREE_OP(opline->op2_type, opline->op2.var);
					HANDLE_EXCEPTION();
				}
			}
			if (Z_TYPE_P(value) == IS_CONSTANT_AST) {
				if (UNEXPECTED(zend_update_class_constant(c, constant_name, c->ce) != SUCCESS)) {
					ZVAL_UNDEF(EX_VAR(opline->result.var));
					FREE_OP(opline->op2_type, opline->op2.var);
					HANDLE_EXCEPTION();
				}
			}
			if ((IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST && !is_constant_deprecated) {
				CACHE_POLYMORPHIC_PTR(opline->extended_value, ce, value);
			}
		} else {
			zend_throw_error(NULL, "Undefined constant %s::%s",
				ZSTR_VAL(ce->name), ZSTR_VAL(constant_name));
			ZVAL_UNDEF(EX_VAR(opline->result.var));
			FREE_OP(opline->op2_type, opline->op2.var);
			HANDLE_EXCEPTION();
		}
	} while (0);

	ZVAL_COPY_OR_DUP(EX_VAR(opline->result.var), value);

	FREE_OP(opline->op2_type, opline->op2.var);
	ZEND_VM_NEXT_OPCODE();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_ASSIGN_OBJ_OP_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *object;
	zval *property;
	zval *value;
	zval *zptr;
	void *_cache_slot[3] = {0};
	void **cache_slot;
	zend_property_info *prop_info;
	zend_object *zobj;
	zend_string *name, *tmp_name;

	SAVE_OPLINE();
	object = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
	property = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);

	do {
		value = get_op_data_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1);

		if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
			if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
				object = Z_REFVAL_P(object);
				goto assign_op_object;
			}
			if (IS_VAR == IS_CV
			 && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
				ZVAL_UNDEFINED_OP1();
			}
			zend_throw_non_object_error(object, property OPLINE_CC EXECUTE_DATA_CC);
			break;
		}

assign_op_object:
		/* here we are sure we are dealing with an object */
		zobj = Z_OBJ_P(object);
		if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
			name = Z_STR_P(property);
		} else {
			name = zval_try_get_tmp_string(property, &tmp_name);
			if (UNEXPECTED(!name)) {
				UNDEF_RESULT();
				break;
			}
		}
		cache_slot = ((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR((opline+1)->extended_value) : _cache_slot;
		if (EXPECTED((zptr = zobj->handlers->get_property_ptr_ptr(zobj, name, BP_VAR_RW, cache_slot)) != NULL)) {
			if (UNEXPECTED(Z_ISERROR_P(zptr))) {
				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
					ZVAL_NULL(EX_VAR(opline->result.var));
				}
			} else {
				zend_reference *ref;

				do {
					if (UNEXPECTED(Z_ISREF_P(zptr))) {
						ref = Z_REF_P(zptr);
						zptr = Z_REFVAL_P(zptr);
						if (UNEXPECTED(ZEND_REF_HAS_TYPE_SOURCES(ref))) {
							zend_binary_assign_op_typed_ref(ref, value OPLINE_CC EXECUTE_DATA_CC);
							break;
						}
					}

					prop_info = (zend_property_info*)CACHED_PTR_EX(cache_slot + 2);
					if (prop_info && ZEND_TYPE_IS_SET(prop_info->type)) {
						/* special case for typed properties */
						zend_binary_assign_op_typed_prop(prop_info, zptr, value OPLINE_CC EXECUTE_DATA_CC);
					} else {
						zend_binary_op(zptr, zptr, value OPLINE_CC);
					}
				} while (0);

				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
					ZVAL_COPY(EX_VAR(opline->result.var), zptr);
				}
			}
		} else {
			zend_assign_op_overloaded_property(zobj, name, cache_slot, value OPLINE_CC EXECUTE_DATA_CC);
		}
		if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
			zend_tmp_string_release(tmp_name);
		}
	} while (0);

	FREE_OP((opline+1)->op1_type, (opline+1)->op1.var);
	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
	/* assign_obj has two opcodes! */
	ZEND_VM_NEXT_OPCODE_EX(1, 2);
}

/* No specialization for op_types (CONST|TMP|VAR|CV, UNUSED|CONST|TMPVAR) */
static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_ASSIGN_DIM_OP_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *var_ptr;
	zval *value, *container, *dim;
	HashTable *ht;

	SAVE_OPLINE();
	container = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);

	if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
assign_dim_op_array:
		SEPARATE_ARRAY(container);
		ht = Z_ARRVAL_P(container);
assign_dim_op_new_array:
		dim = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
		if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED) {
			var_ptr = zend_hash_next_index_insert(ht, &EG(uninitialized_zval));
			if (UNEXPECTED(!var_ptr)) {
				zend_cannot_add_element();
				goto assign_dim_op_ret_null;
			}
		} else {
			if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
				var_ptr = zend_fetch_dimension_address_inner_RW_CONST(ht, dim EXECUTE_DATA_CC);
			} else {
				var_ptr = zend_fetch_dimension_address_inner_RW(ht, dim EXECUTE_DATA_CC);
			}
			if (UNEXPECTED(!var_ptr)) {
				goto assign_dim_op_ret_null;
			}
		}

		value = get_op_data_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1);

		do {
			if ((IS_TMP_VAR|IS_VAR) != IS_UNUSED && UNEXPECTED(Z_ISREF_P(var_ptr))) {
				zend_reference *ref = Z_REF_P(var_ptr);
				var_ptr = Z_REFVAL_P(var_ptr);
				if (UNEXPECTED(ZEND_REF_HAS_TYPE_SOURCES(ref))) {
					zend_binary_assign_op_typed_ref(ref, value OPLINE_CC EXECUTE_DATA_CC);
					break;
				}
			}
			zend_binary_op(var_ptr, var_ptr, value OPLINE_CC);
		} while (0);

		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
			ZVAL_COPY(EX_VAR(opline->result.var), var_ptr);
		}
		FREE_OP((opline+1)->op1_type, (opline+1)->op1.var);
	} else {
		if (EXPECTED(Z_ISREF_P(container))) {
			container = Z_REFVAL_P(container);
			if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
				goto assign_dim_op_array;
			}
		}

		if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
			zend_object *obj = Z_OBJ_P(container);

			dim = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
			if ((IS_TMP_VAR|IS_VAR) == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
				dim++;
			}
			zend_binary_assign_op_obj_dim(obj, dim OPLINE_CC EXECUTE_DATA_CC);
		} else if (EXPECTED(Z_TYPE_P(container) <= IS_FALSE)) {
			uint8_t old_type;

			if (IS_VAR == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(container) == IS_UNDEF)) {
				ZVAL_UNDEFINED_OP1();
			}
			ht = zend_new_array(8);
			old_type = Z_TYPE_P(container);
			ZVAL_ARR(container, ht);
			if (UNEXPECTED(old_type == IS_FALSE)) {
				GC_ADDREF(ht);
				zend_false_to_array_deprecated();
				if (UNEXPECTED(GC_DELREF(ht) == 0)) {
					zend_array_destroy(ht);
					goto assign_dim_op_ret_null;
				}
			}
			goto assign_dim_op_new_array;
		} else {
			dim = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
			zend_binary_assign_op_dim_slow(container, dim OPLINE_CC EXECUTE_DATA_CC);
assign_dim_op_ret_null:
			FREE_OP((opline+1)->op1_type, (opline+1)->op1.var);
			if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
				ZVAL_NULL(EX_VAR(opline->result.var));
			}
		}
	}

	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
	ZEND_VM_NEXT_OPCODE_EX(1, 2);
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_ASSIGN_OP_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *var_ptr;
	zval *value;

	SAVE_OPLINE();
	value = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
	var_ptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);

	do {
		if (UNEXPECTED(Z_TYPE_P(var_ptr) == IS_REFERENCE)) {
			zend_reference *ref = Z_REF_P(var_ptr);
			var_ptr = Z_REFVAL_P(var_ptr);
			if (UNEXPECTED(ZEND_REF_HAS_TYPE_SOURCES(ref))) {
				zend_binary_assign_op_typed_ref(ref, value OPLINE_CC EXECUTE_DATA_CC);
				break;
			}
		}
		zend_binary_op(var_ptr, var_ptr, value OPLINE_CC);
	} while (0);

	if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
		ZVAL_COPY(EX_VAR(opline->result.var), var_ptr);
	}

	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_PRE_INC_OBJ_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *object;
	zval *property;
	zval *zptr;
	void *_cache_slot[3] = {0};
	void **cache_slot;
	zend_property_info *prop_info;
	zend_object *zobj;
	zend_string *name, *tmp_name;

	SAVE_OPLINE();
	object = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
	property = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);

	do {
		if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
			if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
				object = Z_REFVAL_P(object);
				goto pre_incdec_object;
			}
			if (IS_VAR == IS_CV
			 && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
				ZVAL_UNDEFINED_OP1();
			}
			zend_throw_non_object_error(object, property OPLINE_CC EXECUTE_DATA_CC);
			break;
		}

pre_incdec_object:
		/* here we are sure we are dealing with an object */
		zobj = Z_OBJ_P(object);
		if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
			name = Z_STR_P(property);
		} else {
			name = zval_try_get_tmp_string(property, &tmp_name);
			if (UNEXPECTED(!name)) {
				UNDEF_RESULT();
				break;
			}
		}
		cache_slot = ((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(opline->extended_value) : _cache_slot;
		if (EXPECTED((zptr = zobj->handlers->get_property_ptr_ptr(zobj, name, BP_VAR_RW, cache_slot)) != NULL)) {
			if (UNEXPECTED(Z_ISERROR_P(zptr))) {
				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
					ZVAL_NULL(EX_VAR(opline->result.var));
				}
			} else {
				prop_info = (zend_property_info *) CACHED_PTR_EX(cache_slot + 2);
				zend_pre_incdec_property_zval(zptr,
					prop_info && ZEND_TYPE_IS_SET(prop_info->type) ? prop_info : NULL OPLINE_CC EXECUTE_DATA_CC);
			}
		} else {
			zend_pre_incdec_overloaded_property(zobj, name, cache_slot OPLINE_CC EXECUTE_DATA_CC);
		}
		if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
			zend_tmp_string_release(tmp_name);
		}
	} while (0);

	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_POST_INC_OBJ_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *object;
	zval *property;
	zval *zptr;
	void *_cache_slot[3] = {0};
	void **cache_slot;
	zend_property_info *prop_info;
	zend_object *zobj;
	zend_string *name, *tmp_name;

	SAVE_OPLINE();
	object = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
	property = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);

	do {
		if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
			if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
				object = Z_REFVAL_P(object);
				goto post_incdec_object;
			}
			if (IS_VAR == IS_CV
			 && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
				ZVAL_UNDEFINED_OP1();
			}
			zend_throw_non_object_error(object, property OPLINE_CC EXECUTE_DATA_CC);
			break;
		}

post_incdec_object:
		/* here we are sure we are dealing with an object */
		zobj = Z_OBJ_P(object);
		if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
			name = Z_STR_P(property);
		} else {
			name = zval_try_get_tmp_string(property, &tmp_name);
			if (UNEXPECTED(!name)) {
				ZVAL_UNDEF(EX_VAR(opline->result.var));
				break;
			}
		}
		cache_slot = ((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(opline->extended_value) : _cache_slot;
		if (EXPECTED((zptr = zobj->handlers->get_property_ptr_ptr(zobj, name, BP_VAR_RW, cache_slot)) != NULL)) {
			if (UNEXPECTED(Z_ISERROR_P(zptr))) {
				ZVAL_NULL(EX_VAR(opline->result.var));
			} else {
				prop_info = (zend_property_info*)CACHED_PTR_EX(cache_slot + 2);
				zend_post_incdec_property_zval(zptr,
					prop_info && ZEND_TYPE_IS_SET(prop_info->type) ? prop_info : NULL OPLINE_CC EXECUTE_DATA_CC);
			}
		} else {
			zend_post_incdec_overloaded_property(zobj, name, cache_slot OPLINE_CC EXECUTE_DATA_CC);
		}
		if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
			zend_tmp_string_release(tmp_name);
		}
	} while (0);

	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_FETCH_DIM_W_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *container;

	SAVE_OPLINE();
	container = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
	zend_fetch_dimension_address_W(container, _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC), (IS_TMP_VAR|IS_VAR) OPLINE_CC EXECUTE_DATA_CC);
	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
	if (IS_VAR == IS_VAR) {
		FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
	}
	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_FETCH_DIM_RW_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *container;

	SAVE_OPLINE();
	container = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
	zend_fetch_dimension_address_RW(container, _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC), (IS_TMP_VAR|IS_VAR) OPLINE_CC EXECUTE_DATA_CC);
	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
	if (IS_VAR == IS_VAR) {
		FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
	}
	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
#if 0
	USE_OPLINE
#endif

	if (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) {
		if ((IS_VAR & (IS_CONST|IS_TMP_VAR))) {
			ZEND_VM_TAIL_CALL(zend_use_tmp_in_write_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
		}
		ZEND_VM_TAIL_CALL(ZEND_FETCH_DIM_W_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
	} else {
		if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED) {
			ZEND_VM_TAIL_CALL(zend_use_undef_in_read_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
		}
		ZEND_VM_TAIL_CALL(ZEND_FETCH_DIM_R_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
	}
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_FETCH_DIM_UNSET_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *container;

	SAVE_OPLINE();
	container = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
	zend_fetch_dimension_address_UNSET(container, _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC), (IS_TMP_VAR|IS_VAR) OPLINE_CC EXECUTE_DATA_CC);
	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
	if (IS_VAR == IS_VAR) {
		FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
	}
	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_FETCH_OBJ_W_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *property, *container, *result;

	SAVE_OPLINE();

	container = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
	property = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
	result = EX_VAR(opline->result.var);
	zend_fetch_property_address(
		result, container, IS_VAR, property, (IS_TMP_VAR|IS_VAR),
		(((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(opline->extended_value & ~ZEND_FETCH_OBJ_FLAGS) : NULL),
		BP_VAR_W, opline->extended_value, NULL OPLINE_CC EXECUTE_DATA_CC);
	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
	if (IS_VAR == IS_VAR) {
		FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
	}
	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_FETCH_OBJ_RW_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *property, *container, *result;

	SAVE_OPLINE();
	container = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
	property = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
	result = EX_VAR(opline->result.var);
	zend_fetch_property_address(result, container, IS_VAR, property, (IS_TMP_VAR|IS_VAR), (((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL), BP_VAR_RW, 0, NULL OPLINE_CC EXECUTE_DATA_CC);
	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
	if (IS_VAR == IS_VAR) {
		FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
	}
	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_FETCH_OBJ_FUNC_ARG_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
#if 0
	USE_OPLINE
#endif

	if (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) {
		/* Behave like FETCH_OBJ_W */
		if ((IS_VAR & (IS_CONST|IS_TMP_VAR))) {
			ZEND_VM_TAIL_CALL(zend_use_tmp_in_write_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
		}
		ZEND_VM_TAIL_CALL(ZEND_FETCH_OBJ_W_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
	} else {
		ZEND_VM_TAIL_CALL(ZEND_FETCH_OBJ_R_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
	}
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_FETCH_OBJ_UNSET_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *container, *property, *result;

	SAVE_OPLINE();
	container = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
	property = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
	result = EX_VAR(opline->result.var);
	zend_fetch_property_address(result, container, IS_VAR, property, (IS_TMP_VAR|IS_VAR), (((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL), BP_VAR_UNSET, 0, NULL OPLINE_CC EXECUTE_DATA_CC);
	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
	if (IS_VAR == IS_VAR) {
		FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
	}
	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_FETCH_LIST_W_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *container, *dim;

	SAVE_OPLINE();
	container = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
	dim = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);

	if (IS_VAR == IS_VAR
		&& Z_TYPE_P(EX_VAR(opline->op1.var)) != IS_INDIRECT
		&& UNEXPECTED(!Z_ISREF_P(container))
	) {
		zend_error(E_NOTICE, "Attempting to set reference to non referenceable value");
		zend_fetch_dimension_address_LIST_r(container, dim, (IS_TMP_VAR|IS_VAR) OPLINE_CC EXECUTE_DATA_CC);
	} else {
		zend_fetch_dimension_address_W(container, dim, (IS_TMP_VAR|IS_VAR) OPLINE_CC EXECUTE_DATA_CC);
	}

	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *object, *value, tmp;
	zend_object *zobj;
	zend_string *name, *tmp_name;
	zend_refcounted *garbage = NULL;

	SAVE_OPLINE();
	object = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
	value = RT_CONSTANT((opline+1), (opline+1)->op1);

	if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
		if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
			object = Z_REFVAL_P(object);
			goto assign_object;
		}
		zend_throw_non_object_error(object, _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC) OPLINE_CC EXECUTE_DATA_CC);
		value = &EG(uninitialized_zval);
		goto free_and_exit_assign_obj;
	}

assign_object:
	zobj = Z_OBJ_P(object);
	if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
		if (EXPECTED(zobj->ce == CACHED_PTR(opline->extended_value))) {
			void **cache_slot = CACHE_ADDR(opline->extended_value);
			uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
			zval *property_val;
			zend_property_info *prop_info;

			if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
				prop_info = (zend_property_info*) CACHED_PTR_EX(cache_slot + 2);

assign_obj_simple:
				property_val = OBJ_PROP(zobj, prop_offset);
				if (Z_TYPE_P(property_val) != IS_UNDEF) {
					if (prop_info != NULL) {
						value = zend_assign_to_typed_prop(prop_info, property_val, value, &garbage EXECUTE_DATA_CC);
						goto free_and_exit_assign_obj;
					} else {
fast_assign_obj:
						value = zend_assign_to_variable_ex(property_val, value, IS_CONST, EX_USES_STRICT_TYPES(), &garbage);
						if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
							ZVAL_COPY(EX_VAR(opline->result.var), value);
						}
						goto exit_assign_obj;
					}
				}
			} else if (EXPECTED(IS_DYNAMIC_PROPERTY_OFFSET(prop_offset))) {
				name = Z_STR_P(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC));
				if (UNEXPECTED(zend_lazy_object_must_init(zobj))) {
					zobj = zend_lazy_object_init(zobj);
					if (!zobj) {
						value = &EG(uninitialized_zval);
						goto free_and_exit_assign_obj;
					}
				}
				if (!zobj->ce->__set && (zobj->ce->ce_flags & ZEND_ACC_ALLOW_DYNAMIC_PROPERTIES)) {
					rebuild_object_properties_internal(zobj);
				}
				if (EXPECTED(zobj->properties != NULL)) {
					if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
						if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
							GC_DELREF(zobj->properties);
						}
						zobj->properties = zend_array_dup(zobj->properties);
					}
					property_val = zend_hash_find_known_hash(zobj->properties, name);
					if (property_val) {
						goto fast_assign_obj;
					}
				}

				if (!zobj->ce->__set && (zobj->ce->ce_flags & ZEND_ACC_ALLOW_DYNAMIC_PROPERTIES)) {
					if (IS_CONST == IS_CONST) {
						if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
							Z_ADDREF_P(value);
						}
					} else if (IS_CONST != IS_TMP_VAR) {
						if (Z_ISREF_P(value)) {
							if (IS_CONST == IS_VAR) {
								zend_reference *ref = Z_REF_P(value);
								if (GC_DELREF(ref) == 0) {
									ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
									efree_size(ref, sizeof(zend_reference));
									value = &tmp;
								} else {
									value = Z_REFVAL_P(value);
									Z_TRY_ADDREF_P(value);
								}
							} else {
								value = Z_REFVAL_P(value);
								Z_TRY_ADDREF_P(value);
							}
						} else if (IS_CONST == IS_CV) {
							Z_TRY_ADDREF_P(value);
						}
					}
					zend_hash_add_new(zobj->properties, name, value);
					if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
						ZVAL_COPY(EX_VAR(opline->result.var), value);
					}
					goto exit_assign_obj;
				}
			} else {
				ZEND_ASSERT(IS_HOOKED_PROPERTY_OFFSET(prop_offset));
				if (ZEND_IS_PROPERTY_HOOK_SIMPLE_WRITE(prop_offset)) {
					prop_info = CACHED_PTR_EX(cache_slot + 2);
					prop_offset = prop_info->offset;
					if (!ZEND_TYPE_IS_SET(prop_info->type)) {
						prop_info = NULL;
					}
					goto assign_obj_simple;
				}
				/* Fall through to write_property for hooks. */
			}
		}
		name = Z_STR_P(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC));
	} else {
		name = zval_try_get_tmp_string(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC), &tmp_name);
		if (UNEXPECTED(!name)) {


			UNDEF_RESULT();
			goto exit_assign_obj;
		}
	}

	if (IS_CONST == IS_CV || IS_CONST == IS_VAR) {
		ZVAL_DEREF(value);
	}

	value = zobj->handlers->write_property(zobj, name, value, ((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);

	if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
		zend_tmp_string_release(tmp_name);
	}

free_and_exit_assign_obj:
	if (UNEXPECTED(RETURN_VALUE_USED(opline)) && value) {
		ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
	}


exit_assign_obj:
	if (garbage) {
		GC_DTOR_NO_REF(garbage);
	}
	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
	/* assign_obj has two opcodes! */
	ZEND_VM_NEXT_OPCODE_EX(1, 2);
}

/* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CONST|VAR) */
static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *object, *value, tmp;
	zend_object *zobj;
	zend_string *name, *tmp_name;
	zend_refcounted *garbage = NULL;

	SAVE_OPLINE();
	object = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
	value = _get_zval_ptr_tmp((opline+1)->op1.var EXECUTE_DATA_CC);

	if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
		if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
			object = Z_REFVAL_P(object);
			goto assign_object;
		}
		zend_throw_non_object_error(object, _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC) OPLINE_CC EXECUTE_DATA_CC);
		value = &EG(uninitialized_zval);
		goto free_and_exit_assign_obj;
	}

assign_object:
	zobj = Z_OBJ_P(object);
	if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
		if (EXPECTED(zobj->ce == CACHED_PTR(opline->extended_value))) {
			void **cache_slot = CACHE_ADDR(opline->extended_value);
			uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
			zval *property_val;
			zend_property_info *prop_info;

			if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
				prop_info = (zend_property_info*) CACHED_PTR_EX(cache_slot + 2);

assign_obj_simple:
				property_val = OBJ_PROP(zobj, prop_offset);
				if (Z_TYPE_P(property_val) != IS_UNDEF) {
					if (prop_info != NULL) {
						value = zend_assign_to_typed_prop(prop_info, property_val, value, &garbage EXECUTE_DATA_CC);
						goto free_and_exit_assign_obj;
					} else {
fast_assign_obj:
						value = zend_assign_to_variable_ex(property_val, value, IS_TMP_VAR, EX_USES_STRICT_TYPES(), &garbage);
						if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
							ZVAL_COPY(EX_VAR(opline->result.var), value);
						}
						goto exit_assign_obj;
					}
				}
			} else if (EXPECTED(IS_DYNAMIC_PROPERTY_OFFSET(prop_offset))) {
				name = Z_STR_P(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC));
				if (UNEXPECTED(zend_lazy_object_must_init(zobj))) {
					zobj = zend_lazy_object_init(zobj);
					if (!zobj) {
						value = &EG(uninitialized_zval);
						goto free_and_exit_assign_obj;
					}
				}
				if (!zobj->ce->__set && (zobj->ce->ce_flags & ZEND_ACC_ALLOW_DYNAMIC_PROPERTIES)) {
					rebuild_object_properties_internal(zobj);
				}
				if (EXPECTED(zobj->properties != NULL)) {
					if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
						if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
							GC_DELREF(zobj->properties);
						}
						zobj->properties = zend_array_dup(zobj->properties);
					}
					property_val = zend_hash_find_known_hash(zobj->properties, name);
					if (property_val) {
						goto fast_assign_obj;
					}
				}

				if (!zobj->ce->__set && (zobj->ce->ce_flags & ZEND_ACC_ALLOW_DYNAMIC_PROPERTIES)) {
					if (IS_TMP_VAR == IS_CONST) {
						if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
							Z_ADDREF_P(value);
						}
					} else if (IS_TMP_VAR != IS_TMP_VAR) {
						if (Z_ISREF_P(value)) {
							if (IS_TMP_VAR == IS_VAR) {
								zend_reference *ref = Z_REF_P(value);
								if (GC_DELREF(ref) == 0) {
									ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
									efree_size(ref, sizeof(zend_reference));
									value = &tmp;
								} else {
									value = Z_REFVAL_P(value);
									Z_TRY_ADDREF_P(value);
								}
							} else {
								value = Z_REFVAL_P(value);
								Z_TRY_ADDREF_P(value);
							}
						} else if (IS_TMP_VAR == IS_CV) {
							Z_TRY_ADDREF_P(value);
						}
					}
					zend_hash_add_new(zobj->properties, name, value);
					if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
						ZVAL_COPY(EX_VAR(opline->result.var), value);
					}
					goto exit_assign_obj;
				}
			} else {
				ZEND_ASSERT(IS_HOOKED_PROPERTY_OFFSET(prop_offset));
				if (ZEND_IS_PROPERTY_HOOK_SIMPLE_WRITE(prop_offset)) {
					prop_info = CACHED_PTR_EX(cache_slot + 2);
					prop_offset = prop_info->offset;
					if (!ZEND_TYPE_IS_SET(prop_info->type)) {
						prop_info = NULL;
					}
					goto assign_obj_simple;
				}
				/* Fall through to write_property for hooks. */
			}
		}
		name = Z_STR_P(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC));
	} else {
		name = zval_try_get_tmp_string(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC), &tmp_name);
		if (UNEXPECTED(!name)) {
			zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
			UNDEF_RESULT();
			goto exit_assign_obj;
		}
	}

	if (IS_TMP_VAR == IS_CV || IS_TMP_VAR == IS_VAR) {
		ZVAL_DEREF(value);
	}

	value = zobj->handlers->write_property(zobj, name, value, ((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);

	if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
		zend_tmp_string_release(tmp_name);
	}

free_and_exit_assign_obj:
	if (UNEXPECTED(RETURN_VALUE_USED(opline)) && value) {
		ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
	}
	zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
exit_assign_obj:
	if (garbage) {
		GC_DTOR_NO_REF(garbage);
	}
	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
	/* assign_obj has two opcodes! */
	ZEND_VM_NEXT_OPCODE_EX(1, 2);
}

/* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CONST|VAR) */
static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *object, *value, tmp;
	zend_object *zobj;
	zend_string *name, *tmp_name;
	zend_refcounted *garbage = NULL;

	SAVE_OPLINE();
	object = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
	value = _get_zval_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);

	if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
		if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
			object = Z_REFVAL_P(object);
			goto assign_object;
		}
		zend_throw_non_object_error(object, _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC) OPLINE_CC EXECUTE_DATA_CC);
		value = &EG(uninitialized_zval);
		goto free_and_exit_assign_obj;
	}

assign_object:
	zobj = Z_OBJ_P(object);
	if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
		if (EXPECTED(zobj->ce == CACHED_PTR(opline->extended_value))) {
			void **cache_slot = CACHE_ADDR(opline->extended_value);
			uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
			zval *property_val;
			zend_property_info *prop_info;

			if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
				prop_info = (zend_property_info*) CACHED_PTR_EX(cache_slot + 2);

assign_obj_simple:
				property_val = OBJ_PROP(zobj, prop_offset);
				if (Z_TYPE_P(property_val) != IS_UNDEF) {
					if (prop_info != NULL) {
						value = zend_assign_to_typed_prop(prop_info, property_val, value, &garbage EXECUTE_DATA_CC);
						goto free_and_exit_assign_obj;
					} else {
fast_assign_obj:
						value = zend_assign_to_variable_ex(property_val, value, IS_VAR, EX_USES_STRICT_TYPES(), &garbage);
						if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
							ZVAL_COPY(EX_VAR(opline->result.var), value);
						}
						goto exit_assign_obj;
					}
				}
			} else if (EXPECTED(IS_DYNAMIC_PROPERTY_OFFSET(prop_offset))) {
				name = Z_STR_P(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC));
				if (UNEXPECTED(zend_lazy_object_must_init(zobj))) {
					zobj = zend_lazy_object_init(zobj);
					if (!zobj) {
						value = &EG(uninitialized_zval);
						goto free_and_exit_assign_obj;
					}
				}
				if (!zobj->ce->__set && (zobj->ce->ce_flags & ZEND_ACC_ALLOW_DYNAMIC_PROPERTIES)) {
					rebuild_object_properties_internal(zobj);
				}
				if (EXPECTED(zobj->properties != NULL)) {
					if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
						if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
							GC_DELREF(zobj->properties);
						}
						zobj->properties = zend_array_dup(zobj->properties);
					}
					property_val = zend_hash_find_known_hash(zobj->properties, name);
					if (property_val) {
						goto fast_assign_obj;
					}
				}

				if (!zobj->ce->__set && (zobj->ce->ce_flags & ZEND_ACC_ALLOW_DYNAMIC_PROPERTIES)) {
					if (IS_VAR == IS_CONST) {
						if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
							Z_ADDREF_P(value);
						}
					} else if (IS_VAR != IS_TMP_VAR) {
						if (Z_ISREF_P(value)) {
							if (IS_VAR == IS_VAR) {
								zend_reference *ref = Z_REF_P(value);
								if (GC_DELREF(ref) == 0) {
									ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
									efree_size(ref, sizeof(zend_reference));
									value = &tmp;
								} else {
									value = Z_REFVAL_P(value);
									Z_TRY_ADDREF_P(value);
								}
							} else {
								value = Z_REFVAL_P(value);
								Z_TRY_ADDREF_P(value);
							}
						} else if (IS_VAR == IS_CV) {
							Z_TRY_ADDREF_P(value);
						}
					}
					zend_hash_add_new(zobj->properties, name, value);
					if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
						ZVAL_COPY(EX_VAR(opline->result.var), value);
					}
					goto exit_assign_obj;
				}
			} else {
				ZEND_ASSERT(IS_HOOKED_PROPERTY_OFFSET(prop_offset));
				if (ZEND_IS_PROPERTY_HOOK_SIMPLE_WRITE(prop_offset)) {
					prop_info = CACHED_PTR_EX(cache_slot + 2);
					prop_offset = prop_info->offset;
					if (!ZEND_TYPE_IS_SET(prop_info->type)) {
						prop_info = NULL;
					}
					goto assign_obj_simple;
				}
				/* Fall through to write_property for hooks. */
			}
		}
		name = Z_STR_P(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC));
	} else {
		name = zval_try_get_tmp_string(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC), &tmp_name);
		if (UNEXPECTED(!name)) {
			zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
			UNDEF_RESULT();
			goto exit_assign_obj;
		}
	}

	if (IS_VAR == IS_CV || IS_VAR == IS_VAR) {
		ZVAL_DEREF(value);
	}

	value = zobj->handlers->write_property(zobj, name, value, ((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);

	if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
		zend_tmp_string_release(tmp_name);
	}

free_and_exit_assign_obj:
	if (UNEXPECTED(RETURN_VALUE_USED(opline)) && value) {
		ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
	}
	zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
exit_assign_obj:
	if (garbage) {
		GC_DTOR_NO_REF(garbage);
	}
	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
	/* assign_obj has two opcodes! */
	ZEND_VM_NEXT_OPCODE_EX(1, 2);
}

/* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CONST|VAR) */
static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *object, *value, tmp;
	zend_object *zobj;
	zend_string *name, *tmp_name;
	zend_refcounted *garbage = NULL;

	SAVE_OPLINE();
	object = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
	value = _get_zval_ptr_cv_BP_VAR_R((opline+1)->op1.var EXECUTE_DATA_CC);

	if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
		if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
			object = Z_REFVAL_P(object);
			goto assign_object;
		}
		zend_throw_non_object_error(object, _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC) OPLINE_CC EXECUTE_DATA_CC);
		value = &EG(uninitialized_zval);
		goto free_and_exit_assign_obj;
	}

assign_object:
	zobj = Z_OBJ_P(object);
	if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
		if (EXPECTED(zobj->ce == CACHED_PTR(opline->extended_value))) {
			void **cache_slot = CACHE_ADDR(opline->extended_value);
			uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
			zval *property_val;
			zend_property_info *prop_info;

			if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
				prop_info = (zend_property_info*) CACHED_PTR_EX(cache_slot + 2);

assign_obj_simple:
				property_val = OBJ_PROP(zobj, prop_offset);
				if (Z_TYPE_P(property_val) != IS_UNDEF) {
					if (prop_info != NULL) {
						value = zend_assign_to_typed_prop(prop_info, property_val, value, &garbage EXECUTE_DATA_CC);
						goto free_and_exit_assign_obj;
					} else {
fast_assign_obj:
						value = zend_assign_to_variable_ex(property_val, value, IS_CV, EX_USES_STRICT_TYPES(), &garbage);
						if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
							ZVAL_COPY(EX_VAR(opline->result.var), value);
						}
						goto exit_assign_obj;
					}
				}
			} else if (EXPECTED(IS_DYNAMIC_PROPERTY_OFFSET(prop_offset))) {
				name = Z_STR_P(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC));
				if (UNEXPECTED(zend_lazy_object_must_init(zobj))) {
					zobj = zend_lazy_object_init(zobj);
					if (!zobj) {
						value = &EG(uninitialized_zval);
						goto free_and_exit_assign_obj;
					}
				}
				if (!zobj->ce->__set && (zobj->ce->ce_flags & ZEND_ACC_ALLOW_DYNAMIC_PROPERTIES)) {
					rebuild_object_properties_internal(zobj);
				}
				if (EXPECTED(zobj->properties != NULL)) {
					if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
						if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
							GC_DELREF(zobj->properties);
						}
						zobj->properties = zend_array_dup(zobj->properties);
					}
					property_val = zend_hash_find_known_hash(zobj->properties, name);
					if (property_val) {
						goto fast_assign_obj;
					}
				}

				if (!zobj->ce->__set && (zobj->ce->ce_flags & ZEND_ACC_ALLOW_DYNAMIC_PROPERTIES)) {
					if (IS_CV == IS_CONST) {
						if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
							Z_ADDREF_P(value);
						}
					} else if (IS_CV != IS_TMP_VAR) {
						if (Z_ISREF_P(value)) {
							if (IS_CV == IS_VAR) {
								zend_reference *ref = Z_REF_P(value);
								if (GC_DELREF(ref) == 0) {
									ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
									efree_size(ref, sizeof(zend_reference));
									value = &tmp;
								} else {
									value = Z_REFVAL_P(value);
									Z_TRY_ADDREF_P(value);
								}
							} else {
								value = Z_REFVAL_P(value);
								Z_TRY_ADDREF_P(value);
							}
						} else if (IS_CV == IS_CV) {
							Z_TRY_ADDREF_P(value);
						}
					}
					zend_hash_add_new(zobj->properties, name, value);
					if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
						ZVAL_COPY(EX_VAR(opline->result.var), value);
					}
					goto exit_assign_obj;
				}
			} else {
				ZEND_ASSERT(IS_HOOKED_PROPERTY_OFFSET(prop_offset));
				if (ZEND_IS_PROPERTY_HOOK_SIMPLE_WRITE(prop_offset)) {
					prop_info = CACHED_PTR_EX(cache_slot + 2);
					prop_offset = prop_info->offset;
					if (!ZEND_TYPE_IS_SET(prop_info->type)) {
						prop_info = NULL;
					}
					goto assign_obj_simple;
				}
				/* Fall through to write_property for hooks. */
			}
		}
		name = Z_STR_P(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC));
	} else {
		name = zval_try_get_tmp_string(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC), &tmp_name);
		if (UNEXPECTED(!name)) {


			UNDEF_RESULT();
			goto exit_assign_obj;
		}
	}

	if (IS_CV == IS_CV || IS_CV == IS_VAR) {
		ZVAL_DEREF(value);
	}

	value = zobj->handlers->write_property(zobj, name, value, ((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);

	if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
		zend_tmp_string_release(tmp_name);
	}

free_and_exit_assign_obj:
	if (UNEXPECTED(RETURN_VALUE_USED(opline)) && value) {
		ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
	}


exit_assign_obj:
	if (garbage) {
		GC_DTOR_NO_REF(garbage);
	}
	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
	/* assign_obj has two opcodes! */
	ZEND_VM_NEXT_OPCODE_EX(1, 2);
}

/* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CONST|VAR) */
static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *object_ptr, *orig_object_ptr;
	zval *value;
	zval *variable_ptr;
	zval *dim;
	zend_refcounted *garbage = NULL;

	SAVE_OPLINE();
	orig_object_ptr = object_ptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);

	if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
try_assign_dim_array:
		SEPARATE_ARRAY(object_ptr);
		if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED) {
			value = RT_CONSTANT((opline+1), (opline+1)->op1);
			if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
				HashTable *ht = Z_ARRVAL_P(object_ptr);
				if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE)) {
					GC_ADDREF(ht);
				}
				value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
				if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE) && !GC_DELREF(ht)) {
					zend_array_destroy(ht);
					goto assign_dim_error;
				}
			}
			if (IS_CONST == IS_CV || IS_CONST == IS_VAR) {
				ZVAL_DEREF(value);
			}
			value = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), value);
			if (UNEXPECTED(value == NULL)) {
				zend_cannot_add_element();
				goto assign_dim_error;
			} else if (IS_CONST == IS_CV) {
				if (Z_REFCOUNTED_P(value)) {
					Z_ADDREF_P(value);
				}
			} else if (IS_CONST == IS_VAR) {
				zval *free_op_data = EX_VAR((opline+1)->op1.var);
				if (Z_ISREF_P(free_op_data)) {
					if (Z_REFCOUNTED_P(value)) {
						Z_ADDREF_P(value);
					}
					zval_ptr_dtor_nogc(free_op_data);
				}
			} else if (IS_CONST == IS_CONST) {
				if (UNEXPECTED(Z_REFCOUNTED_P(value))) {
					Z_ADDREF_P(value);
				}
			}
		} else {
			dim = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
			if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
				variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
			} else {
				variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
			}
			if (UNEXPECTED(variable_ptr == NULL)) {
				goto assign_dim_error;
			}
			value = RT_CONSTANT((opline+1), (opline+1)->op1);
			value = zend_assign_to_variable_ex(variable_ptr, value, IS_CONST, EX_USES_STRICT_TYPES(), &garbage);
		}
		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
			ZVAL_COPY(EX_VAR(opline->result.var), value);
		}
		if (garbage) {
			GC_DTOR_NO_REF(garbage);
		}
	} else {
		if (EXPECTED(Z_ISREF_P(object_ptr))) {
			object_ptr = Z_REFVAL_P(object_ptr);
			if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
				goto try_assign_dim_array;
			}
		}
		if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) {
			zend_object *obj = Z_OBJ_P(object_ptr);

			GC_ADDREF(obj);
			dim = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
			if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_ISUNDEF_P(dim))) {
				dim = ZVAL_UNDEFINED_OP2();
			} else if ((IS_TMP_VAR|IS_VAR) == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
				dim++;
			}

			value = RT_CONSTANT((opline+1), (opline+1)->op1);
			if (IS_CONST == IS_CV && UNEXPECTED(Z_ISUNDEF_P(value))) {
				value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
			} else if (IS_CONST & (IS_CV|IS_VAR)) {
				ZVAL_DEREF(value);
			}

			zend_assign_to_object_dim(obj, dim, value OPLINE_CC EXECUTE_DATA_CC);


			if (UNEXPECTED(GC_DELREF(obj) == 0)) {
				zend_objects_store_del(obj);
			}
		} else if (EXPECTED(Z_TYPE_P(object_ptr) == IS_STRING)) {
			if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED) {
				zend_use_new_element_for_string();


				UNDEF_RESULT();
			} else {
				dim = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
				value = RT_CONSTANT((opline+1), (opline+1)->op1);
				zend_assign_to_string_offset(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC);


			}
		} else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
			if (Z_ISREF_P(orig_object_ptr)
			 && ZEND_REF_HAS_TYPE_SOURCES(Z_REF_P(orig_object_ptr))
			 && !zend_verify_ref_array_assignable(Z_REF_P(orig_object_ptr))) {
				dim = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);


				UNDEF_RESULT();
			} else {
				HashTable *ht = zend_new_array(8);
				uint8_t old_type = Z_TYPE_P(object_ptr);

				ZVAL_ARR(object_ptr, ht);
				if (UNEXPECTED(old_type == IS_FALSE)) {
					GC_ADDREF(ht);
					zend_false_to_array_deprecated();
					if (UNEXPECTED(GC_DELREF(ht) == 0)) {
						zend_array_destroy(ht);
						goto assign_dim_error;
					}
				}
				goto try_assign_dim_array;
			}
		} else {
			zend_use_scalar_as_array();
			dim = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
assign_dim_error:


			if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
				ZVAL_NULL(EX_VAR(opline->result.var));
			}
		}
	}
	if ((IS_TMP_VAR|IS_VAR) != IS_UNUSED) {
		zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
	}
	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
	/* assign_dim has two opcodes! */
	ZEND_VM_NEXT_OPCODE_EX(1, 2);
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *object_ptr, *orig_object_ptr;
	zval *value;
	zval *variable_ptr;
	zval *dim;
	zend_refcounted *garbage = NULL;

	SAVE_OPLINE();
	orig_object_ptr = object_ptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);

	if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
try_assign_dim_array:
		SEPARATE_ARRAY(object_ptr);
		if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED) {
			value = _get_zval_ptr_tmp((opline+1)->op1.var EXECUTE_DATA_CC);
			if (IS_TMP_VAR == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
				HashTable *ht = Z_ARRVAL_P(object_ptr);
				if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE)) {
					GC_ADDREF(ht);
				}
				value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
				if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE) && !GC_DELREF(ht)) {
					zend_array_destroy(ht);
					goto assign_dim_error;
				}
			}
			if (IS_TMP_VAR == IS_CV || IS_TMP_VAR == IS_VAR) {
				ZVAL_DEREF(value);
			}
			value = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), value);
			if (UNEXPECTED(value == NULL)) {
				zend_cannot_add_element();
				goto assign_dim_error;
			} else if (IS_TMP_VAR == IS_CV) {
				if (Z_REFCOUNTED_P(value)) {
					Z_ADDREF_P(value);
				}
			} else if (IS_TMP_VAR == IS_VAR) {
				zval *free_op_data = EX_VAR((opline+1)->op1.var);
				if (Z_ISREF_P(free_op_data)) {
					if (Z_REFCOUNTED_P(value)) {
						Z_ADDREF_P(value);
					}
					zval_ptr_dtor_nogc(free_op_data);
				}
			} else if (IS_TMP_VAR == IS_CONST) {
				if (UNEXPECTED(Z_REFCOUNTED_P(value))) {
					Z_ADDREF_P(value);
				}
			}
		} else {
			dim = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
			if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
				variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
			} else {
				variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
			}
			if (UNEXPECTED(variable_ptr == NULL)) {
				goto assign_dim_error;
			}
			value = _get_zval_ptr_tmp((opline+1)->op1.var EXECUTE_DATA_CC);
			value = zend_assign_to_variable_ex(variable_ptr, value, IS_TMP_VAR, EX_USES_STRICT_TYPES(), &garbage);
		}
		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
			ZVAL_COPY(EX_VAR(opline->result.var), value);
		}
		if (garbage) {
			GC_DTOR_NO_REF(garbage);
		}
	} else {
		if (EXPECTED(Z_ISREF_P(object_ptr))) {
			object_ptr = Z_REFVAL_P(object_ptr);
			if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
				goto try_assign_dim_array;
			}
		}
		if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) {
			zend_object *obj = Z_OBJ_P(object_ptr);

			GC_ADDREF(obj);
			dim = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
			if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_ISUNDEF_P(dim))) {
				dim = ZVAL_UNDEFINED_OP2();
			} else if ((IS_TMP_VAR|IS_VAR) == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
				dim++;
			}

			value = _get_zval_ptr_tmp((opline+1)->op1.var EXECUTE_DATA_CC);
			if (IS_TMP_VAR == IS_CV && UNEXPECTED(Z_ISUNDEF_P(value))) {
				value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
			} else if (IS_TMP_VAR & (IS_CV|IS_VAR)) {
				ZVAL_DEREF(value);
			}

			zend_assign_to_object_dim(obj, dim, value OPLINE_CC EXECUTE_DATA_CC);

			zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
			if (UNEXPECTED(GC_DELREF(obj) == 0)) {
				zend_objects_store_del(obj);
			}
		} else if (EXPECTED(Z_TYPE_P(object_ptr) == IS_STRING)) {
			if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED) {
				zend_use_new_element_for_string();
				zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
				UNDEF_RESULT();
			} else {
				dim = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
				value = _get_zval_ptr_tmp((opline+1)->op1.var EXECUTE_DATA_CC);
				zend_assign_to_string_offset(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC);
				zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
			}
		} else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
			if (Z_ISREF_P(orig_object_ptr)
			 && ZEND_REF_HAS_TYPE_SOURCES(Z_REF_P(orig_object_ptr))
			 && !zend_verify_ref_array_assignable(Z_REF_P(orig_object_ptr))) {
				dim = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
				zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
				UNDEF_RESULT();
			} else {
				HashTable *ht = zend_new_array(8);
				uint8_t old_type = Z_TYPE_P(object_ptr);

				ZVAL_ARR(object_ptr, ht);
				if (UNEXPECTED(old_type == IS_FALSE)) {
					GC_ADDREF(ht);
					zend_false_to_array_deprecated();
					if (UNEXPECTED(GC_DELREF(ht) == 0)) {
						zend_array_destroy(ht);
						goto assign_dim_error;
					}
				}
				goto try_assign_dim_array;
			}
		} else {
			zend_use_scalar_as_array();
			dim = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
assign_dim_error:
			zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
			if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
				ZVAL_NULL(EX_VAR(opline->result.var));
			}
		}
	}
	if ((IS_TMP_VAR|IS_VAR) != IS_UNUSED) {
		zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
	}
	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
	/* assign_dim has two opcodes! */
	ZEND_VM_NEXT_OPCODE_EX(1, 2);
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *object_ptr, *orig_object_ptr;
	zval *value;
	zval *variable_ptr;
	zval *dim;
	zend_refcounted *garbage = NULL;

	SAVE_OPLINE();
	orig_object_ptr = object_ptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);

	if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
try_assign_dim_array:
		SEPARATE_ARRAY(object_ptr);
		if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED) {
			value = _get_zval_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);
			if (IS_VAR == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
				HashTable *ht = Z_ARRVAL_P(object_ptr);
				if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE)) {
					GC_ADDREF(ht);
				}
				value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
				if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE) && !GC_DELREF(ht)) {
					zend_array_destroy(ht);
					goto assign_dim_error;
				}
			}
			if (IS_VAR == IS_CV || IS_VAR == IS_VAR) {
				ZVAL_DEREF(value);
			}
			value = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), value);
			if (UNEXPECTED(value == NULL)) {
				zend_cannot_add_element();
				goto assign_dim_error;
			} else if (IS_VAR == IS_CV) {
				if (Z_REFCOUNTED_P(value)) {
					Z_ADDREF_P(value);
				}
			} else if (IS_VAR == IS_VAR) {
				zval *free_op_data = EX_VAR((opline+1)->op1.var);
				if (Z_ISREF_P(free_op_data)) {
					if (Z_REFCOUNTED_P(value)) {
						Z_ADDREF_P(value);
					}
					zval_ptr_dtor_nogc(free_op_data);
				}
			} else if (IS_VAR == IS_CONST) {
				if (UNEXPECTED(Z_REFCOUNTED_P(value))) {
					Z_ADDREF_P(value);
				}
			}
		} else {
			dim = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
			if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
				variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
			} else {
				variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
			}
			if (UNEXPECTED(variable_ptr == NULL)) {
				goto assign_dim_error;
			}
			value = _get_zval_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);
			value = zend_assign_to_variable_ex(variable_ptr, value, IS_VAR, EX_USES_STRICT_TYPES(), &garbage);
		}
		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
			ZVAL_COPY(EX_VAR(opline->result.var), value);
		}
		if (garbage) {
			GC_DTOR_NO_REF(garbage);
		}
	} else {
		if (EXPECTED(Z_ISREF_P(object_ptr))) {
			object_ptr = Z_REFVAL_P(object_ptr);
			if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
				goto try_assign_dim_array;
			}
		}
		if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) {
			zend_object *obj = Z_OBJ_P(object_ptr);

			GC_ADDREF(obj);
			dim = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
			if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_ISUNDEF_P(dim))) {
				dim = ZVAL_UNDEFINED_OP2();
			} else if ((IS_TMP_VAR|IS_VAR) == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
				dim++;
			}

			value = _get_zval_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);
			if (IS_VAR == IS_CV && UNEXPECTED(Z_ISUNDEF_P(value))) {
				value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
			} else if (IS_VAR & (IS_CV|IS_VAR)) {
				ZVAL_DEREF(value);
			}

			zend_assign_to_object_dim(obj, dim, value OPLINE_CC EXECUTE_DATA_CC);

			zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
			if (UNEXPECTED(GC_DELREF(obj) == 0)) {
				zend_objects_store_del(obj);
			}
		} else if (EXPECTED(Z_TYPE_P(object_ptr) == IS_STRING)) {
			if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED) {
				zend_use_new_element_for_string();
				zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
				UNDEF_RESULT();
			} else {
				dim = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
				value = _get_zval_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);
				zend_assign_to_string_offset(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC);
				zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
			}
		} else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
			if (Z_ISREF_P(orig_object_ptr)
			 && ZEND_REF_HAS_TYPE_SOURCES(Z_REF_P(orig_object_ptr))
			 && !zend_verify_ref_array_assignable(Z_REF_P(orig_object_ptr))) {
				dim = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
				zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
				UNDEF_RESULT();
			} else {
				HashTable *ht = zend_new_array(8);
				uint8_t old_type = Z_TYPE_P(object_ptr);

				ZVAL_ARR(object_ptr, ht);
				if (UNEXPECTED(old_type == IS_FALSE)) {
					GC_ADDREF(ht);
					zend_false_to_array_deprecated();
					if (UNEXPECTED(GC_DELREF(ht) == 0)) {
						zend_array_destroy(ht);
						goto assign_dim_error;
					}
				}
				goto try_assign_dim_array;
			}
		} else {
			zend_use_scalar_as_array();
			dim = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
assign_dim_error:
			zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
			if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
				ZVAL_NULL(EX_VAR(opline->result.var));
			}
		}
	}
	if ((IS_TMP_VAR|IS_VAR) != IS_UNUSED) {
		zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
	}
	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
	/* assign_dim has two opcodes! */
	ZEND_VM_NEXT_OPCODE_EX(1, 2);
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *object_ptr, *orig_object_ptr;
	zval *value;
	zval *variable_ptr;
	zval *dim;
	zend_refcounted *garbage = NULL;

	SAVE_OPLINE();
	orig_object_ptr = object_ptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);

	if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
try_assign_dim_array:
		SEPARATE_ARRAY(object_ptr);
		if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED) {
			value = EX_VAR((opline+1)->op1.var);
			if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
				HashTable *ht = Z_ARRVAL_P(object_ptr);
				if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE)) {
					GC_ADDREF(ht);
				}
				value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
				if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE) && !GC_DELREF(ht)) {
					zend_array_destroy(ht);
					goto assign_dim_error;
				}
			}
			if (IS_CV == IS_CV || IS_CV == IS_VAR) {
				ZVAL_DEREF(value);
			}
			value = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), value);
			if (UNEXPECTED(value == NULL)) {
				zend_cannot_add_element();
				goto assign_dim_error;
			} else if (IS_CV == IS_CV) {
				if (Z_REFCOUNTED_P(value)) {
					Z_ADDREF_P(value);
				}
			} else if (IS_CV == IS_VAR) {
				zval *free_op_data = EX_VAR((opline+1)->op1.var);
				if (Z_ISREF_P(free_op_data)) {
					if (Z_REFCOUNTED_P(value)) {
						Z_ADDREF_P(value);
					}
					zval_ptr_dtor_nogc(free_op_data);
				}
			} else if (IS_CV == IS_CONST) {
				if (UNEXPECTED(Z_REFCOUNTED_P(value))) {
					Z_ADDREF_P(value);
				}
			}
		} else {
			dim = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
			if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
				variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
			} else {
				variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
			}
			if (UNEXPECTED(variable_ptr == NULL)) {
				goto assign_dim_error;
			}
			value = _get_zval_ptr_cv_BP_VAR_R((opline+1)->op1.var EXECUTE_DATA_CC);
			value = zend_assign_to_variable_ex(variable_ptr, value, IS_CV, EX_USES_STRICT_TYPES(), &garbage);
		}
		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
			ZVAL_COPY(EX_VAR(opline->result.var), value);
		}
		if (garbage) {
			GC_DTOR_NO_REF(garbage);
		}
	} else {
		if (EXPECTED(Z_ISREF_P(object_ptr))) {
			object_ptr = Z_REFVAL_P(object_ptr);
			if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
				goto try_assign_dim_array;
			}
		}
		if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) {
			zend_object *obj = Z_OBJ_P(object_ptr);

			GC_ADDREF(obj);
			dim = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
			if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_ISUNDEF_P(dim))) {
				dim = ZVAL_UNDEFINED_OP2();
			} else if ((IS_TMP_VAR|IS_VAR) == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
				dim++;
			}

			value = EX_VAR((opline+1)->op1.var);
			if (IS_CV == IS_CV && UNEXPECTED(Z_ISUNDEF_P(value))) {
				value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
			} else if (IS_CV & (IS_CV|IS_VAR)) {
				ZVAL_DEREF(value);
			}

			zend_assign_to_object_dim(obj, dim, value OPLINE_CC EXECUTE_DATA_CC);


			if (UNEXPECTED(GC_DELREF(obj) == 0)) {
				zend_objects_store_del(obj);
			}
		} else if (EXPECTED(Z_TYPE_P(object_ptr) == IS_STRING)) {
			if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED) {
				zend_use_new_element_for_string();


				UNDEF_RESULT();
			} else {
				dim = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
				value = EX_VAR((opline+1)->op1.var);
				zend_assign_to_string_offset(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC);


			}
		} else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
			if (Z_ISREF_P(orig_object_ptr)
			 && ZEND_REF_HAS_TYPE_SOURCES(Z_REF_P(orig_object_ptr))
			 && !zend_verify_ref_array_assignable(Z_REF_P(orig_object_ptr))) {
				dim = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);


				UNDEF_RESULT();
			} else {
				HashTable *ht = zend_new_array(8);
				uint8_t old_type = Z_TYPE_P(object_ptr);

				ZVAL_ARR(object_ptr, ht);
				if (UNEXPECTED(old_type == IS_FALSE)) {
					GC_ADDREF(ht);
					zend_false_to_array_deprecated();
					if (UNEXPECTED(GC_DELREF(ht) == 0)) {
						zend_array_destroy(ht);
						goto assign_dim_error;
					}
				}
				goto try_assign_dim_array;
			}
		} else {
			zend_use_scalar_as_array();
			dim = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
assign_dim_error:


			if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
				ZVAL_NULL(EX_VAR(opline->result.var));
			}
		}
	}
	if ((IS_TMP_VAR|IS_VAR) != IS_UNUSED) {
		zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
	}
	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
	/* assign_dim has two opcodes! */
	ZEND_VM_NEXT_OPCODE_EX(1, 2);
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_ASSIGN_OBJ_REF_SPEC_VAR_TMPVAR_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *property, *container, *value_ptr;

	SAVE_OPLINE();

	container = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
	property = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);

	value_ptr = _get_zval_ptr_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);

	if (1) {
		if (IS_VAR == IS_UNUSED) {
			if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
				zend_assign_to_property_reference_this_const(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
			} else {
				zend_assign_to_property_reference_this_var(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
			}
		} else {
			if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
				zend_assign_to_property_reference_var_const(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
			} else {
				zend_assign_to_property_reference_var_var(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
			}
		}
	} else {
		zend_assign_to_property_reference(container, IS_VAR, property, (IS_TMP_VAR|IS_VAR), value_ptr OPLINE_CC EXECUTE_DATA_CC);
	}

	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
	zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
	ZEND_VM_NEXT_OPCODE_EX(1, 2);
}

/* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CONST|VAR) */
static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_ASSIGN_OBJ_REF_SPEC_VAR_TMPVAR_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *property, *container, *value_ptr;

	SAVE_OPLINE();

	container = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
	property = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);

	value_ptr = _get_zval_ptr_cv_BP_VAR_W((opline+1)->op1.var EXECUTE_DATA_CC);

	if (1) {
		if (IS_VAR == IS_UNUSED) {
			if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
				zend_assign_to_property_reference_this_const(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
			} else {
				zend_assign_to_property_reference_this_var(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
			}
		} else {
			if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
				zend_assign_to_property_reference_var_const(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
			} else {
				zend_assign_to_property_reference_var_var(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
			}
		}
	} else {
		zend_assign_to_property_reference(container, IS_VAR, property, (IS_TMP_VAR|IS_VAR), value_ptr OPLINE_CC EXECUTE_DATA_CC);
	}

	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));


	ZEND_VM_NEXT_OPCODE_EX(1, 2);
}

/* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CONST|VAR) */
static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_INIT_STATIC_METHOD_CALL_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *function_name;
	zend_class_entry *ce;
	uint32_t call_info;
	zend_function *fbc;
	zend_execute_data *call;

	SAVE_OPLINE();

	if (IS_VAR == IS_CONST) {
		/* no function found. try a static method in class */
		ce = CACHED_PTR(opline->result.num);
		if (UNEXPECTED(ce == NULL)) {
			ce = zend_fetch_class_by_name(Z_STR_P(RT_CONSTANT(opline, opline->op1)), Z_STR_P(RT_CONSTANT(opline, opline->op1) + 1), ZEND_FETCH_CLASS_DEFAULT | ZEND_FETCH_CLASS_EXCEPTION);
			if (UNEXPECTED(ce == NULL)) {
				zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
				HANDLE_EXCEPTION();
			}
			if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
				CACHE_PTR(opline->result.num, ce);
			}
		}
	} else if (IS_VAR == IS_UNUSED) {
		ce = zend_fetch_class(NULL, opline->op1.num);
		if (UNEXPECTED(ce == NULL)) {
			zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
			HANDLE_EXCEPTION();
		}
	} else {
		ce = Z_CE_P(EX_VAR(opline->op1.var));
	}

	if (IS_VAR == IS_CONST &&
	    (IS_TMP_VAR|IS_VAR) == IS_CONST &&
	    EXPECTED((fbc = CACHED_PTR(opline->result.num + sizeof(void*))) != NULL)) {
		/* nothing to do */
	} else if (IS_VAR != IS_CONST &&
	           (IS_TMP_VAR|IS_VAR) == IS_CONST &&
	           EXPECTED(CACHED_PTR(opline->result.num) == ce)) {
		fbc = CACHED_PTR(opline->result.num + sizeof(void*));
	} else if ((IS_TMP_VAR|IS_VAR) != IS_UNUSED) {
		function_name = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
		if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
			if (UNEXPECTED(Z_TYPE_P(function_name) != IS_STRING)) {
				do {
					if ((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV) && Z_ISREF_P(function_name)) {
						function_name = Z_REFVAL_P(function_name);
						if (EXPECTED(Z_TYPE_P(function_name) == IS_STRING)) {
							break;
						}
					} else if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) {
						ZVAL_UNDEFINED_OP2();
						if (UNEXPECTED(EG(exception) != NULL)) {
							HANDLE_EXCEPTION();
						}
					}
					zend_throw_error(NULL, "Method name must be a string");
					zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
					HANDLE_EXCEPTION();
				} while (0);
			}
		}

		if (ce->get_static_method) {
			fbc = ce->get_static_method(ce, Z_STR_P(function_name));
		} else {
			fbc = zend_std_get_static_method(ce, Z_STR_P(function_name), (((IS_TMP_VAR|IS_VAR) == IS_CONST) ? (RT_CONSTANT(opline, opline->op2) + 1) : NULL));
		}
		if (UNEXPECTED(fbc == NULL)) {
			if (EXPECTED(!EG(exception))) {
				zend_undefined_method(ce, Z_STR_P(function_name));
			}
			zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
			HANDLE_EXCEPTION();
		}
		if ((IS_TMP_VAR|IS_VAR) == IS_CONST &&
		    EXPECTED(!(fbc->common.fn_flags & (ZEND_ACC_CALL_VIA_TRAMPOLINE|ZEND_ACC_NEVER_CACHE))) &&
			EXPECTED(!(fbc->common.scope->ce_flags & ZEND_ACC_TRAIT))) {
			CACHE_POLYMORPHIC_PTR(opline->result.num, ce, fbc);
		}
		if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!RUN_TIME_CACHE(&fbc->op_array))) {
			init_func_run_time_cache(&fbc->op_array);
		}
		if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
			zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
		}
	} else {
		if (UNEXPECTED(ce->constructor == NULL)) {
			zend_throw_error(NULL, "Cannot call constructor");
			HANDLE_EXCEPTION();
		}
		if (Z_TYPE(EX(This)) == IS_OBJECT && Z_OBJ(EX(This))->ce != ce->constructor->common.scope && (ce->constructor->common.fn_flags & ZEND_ACC_PRIVATE)) {
			zend_throw_error(NULL, "Cannot call private %s::__construct()", ZSTR_VAL(ce->name));
			HANDLE_EXCEPTION();
		}
		fbc = ce->constructor;
		if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!RUN_TIME_CACHE(&fbc->op_array))) {
			init_func_run_time_cache(&fbc->op_array);
		}
	}

	if (!(fbc->common.fn_flags & ZEND_ACC_STATIC)) {
		if (Z_TYPE(EX(This)) == IS_OBJECT && instanceof_function(Z_OBJCE(EX(This)), ce)) {
			ce = (zend_class_entry*)Z_OBJ(EX(This));
			call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_HAS_THIS;
		} else {
			zend_non_static_method_call(fbc);
			HANDLE_EXCEPTION();
		}
	} else {
		/* previous opcode is ZEND_FETCH_CLASS */
		if (IS_VAR == IS_UNUSED
		 && ((opline->op1.num & ZEND_FETCH_CLASS_MASK) == ZEND_FETCH_CLASS_PARENT ||
		     (opline->op1.num & ZEND_FETCH_CLASS_MASK) == ZEND_FETCH_CLASS_SELF)) {
			if (Z_TYPE(EX(This)) == IS_OBJECT) {
				ce = Z_OBJCE(EX(This));
			} else {
				ce = Z_CE(EX(This));
			}
		}
		call_info = ZEND_CALL_NESTED_FUNCTION;
	}

	call = zend_vm_stack_push_call_frame(call_info,
		fbc, opline->extended_value, ce);
	call->prev_execute_data = EX(call);
	EX(call) = call;

	ZEND_VM_NEXT_OPCODE();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *expr_ptr, new_expr;

	SAVE_OPLINE();
	if ((IS_VAR == IS_VAR || IS_VAR == IS_CV) &&
	    UNEXPECTED(opline->extended_value & ZEND_ARRAY_ELEMENT_REF)) {
		expr_ptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
		if (Z_ISREF_P(expr_ptr)) {
			Z_ADDREF_P(expr_ptr);
		} else {
			ZVAL_MAKE_REF_EX(expr_ptr, 2);
		}
		zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
	} else {
		expr_ptr = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
		if (IS_VAR == IS_TMP_VAR) {
			/* pass */
		} else if (IS_VAR == IS_CONST) {
			Z_TRY_ADDREF_P(expr_ptr);
		} else if (IS_VAR == IS_CV) {
			ZVAL_DEREF(expr_ptr);
			Z_TRY_ADDREF_P(expr_ptr);
		} else /* if (IS_VAR == IS_VAR) */ {
			if (UNEXPECTED(Z_ISREF_P(expr_ptr))) {
				zend_refcounted *ref = Z_COUNTED_P(expr_ptr);

				expr_ptr = Z_REFVAL_P(expr_ptr);
				if (UNEXPECTED(GC_DELREF(ref) == 0)) {
					ZVAL_COPY_VALUE(&new_expr, expr_ptr);
					expr_ptr = &new_expr;
					efree_size(ref, sizeof(zend_reference));
				} else if (Z_OPT_REFCOUNTED_P(expr_ptr)) {
					Z_ADDREF_P(expr_ptr);
				}
			}
		}
	}

	if ((IS_TMP_VAR|IS_VAR) != IS_UNUSED) {
		zval *offset = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
		zend_string *str;
		zend_ulong hval;

add_again:
		if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) {
			str = Z_STR_P(offset);
			if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
				if (ZEND_HANDLE_NUMERIC(str, hval)) {
					goto num_index;
				}
			}
str_index:
			zend_hash_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), str, expr_ptr);
		} else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
			hval = Z_LVAL_P(offset);
num_index:
			zend_hash_index_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), hval, expr_ptr);
		} else if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && EXPECTED(Z_TYPE_P(offset) == IS_REFERENCE)) {
			offset = Z_REFVAL_P(offset);
			goto add_again;
		} else if (UNEXPECTED(Z_TYPE_P(offset) == IS_NULL)) {
			zval tmp;
			if (IS_VAR == IS_CV || IS_VAR == IS_VAR) {
				ZVAL_COPY(&tmp, expr_ptr);
			}
			zend_error(E_DEPRECATED, "Using null as an array offset is deprecated, use an empty string instead");
			if (IS_VAR == IS_CV || IS_VAR == IS_VAR) {
				/* A userland error handler can do funky things to the expression, so reset it */
				zval_ptr_dtor(expr_ptr);
				ZVAL_COPY_VALUE(expr_ptr, &tmp);
			}
			if (UNEXPECTED(EG(exception))) {
				zval_ptr_dtor_nogc(expr_ptr);
				HANDLE_EXCEPTION();
			}
			str = ZSTR_EMPTY_ALLOC();
			goto str_index;
		} else if (Z_TYPE_P(offset) == IS_DOUBLE) {
			hval = zend_dval_to_lval_safe(Z_DVAL_P(offset));
			goto num_index;
		} else if (Z_TYPE_P(offset) == IS_FALSE) {
			hval = 0;
			goto num_index;
		} else if (Z_TYPE_P(offset) == IS_TRUE) {
			hval = 1;
			goto num_index;
		} else if (Z_TYPE_P(offset) == IS_RESOURCE) {
			zend_use_resource_as_offset(offset);
			hval = Z_RES_HANDLE_P(offset);
			goto num_index;
		} else if ((IS_TMP_VAR|IS_VAR) == IS_CV && Z_TYPE_P(offset) == IS_UNDEF) {
			ZVAL_UNDEFINED_OP2();
			str = ZSTR_EMPTY_ALLOC();
			goto str_index;
		} else {
			zend_illegal_array_offset_access(offset);
			zval_ptr_dtor_nogc(expr_ptr);
		}
		zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
	} else {
		if (!zend_hash_next_index_insert(Z_ARRVAL_P(EX_VAR(opline->result.var)), expr_ptr)) {
			zend_cannot_add_element();
			zval_ptr_dtor_nogc(expr_ptr);
		}
	}
	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_INIT_ARRAY_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	zval *array;
	uint32_t size;
	USE_OPLINE

	SAVE_OPLINE();
	array = EX_VAR(opline->result.var);
	if (IS_VAR != IS_UNUSED) {
		size = opline->extended_value >> ZEND_ARRAY_SIZE_SHIFT;
		ZVAL_ARR(array, zend_new_array(size));
		/* Explicitly initialize array as not-packed if flag is set */
		if (opline->extended_value & ZEND_ARRAY_NOT_PACKED) {
			zend_hash_real_init_mixed(Z_ARRVAL_P(array));
		}
		ZEND_VM_TAIL_CALL(ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
	} else {
		ZVAL_ARR(array, zend_new_array(0));
		ZEND_VM_NEXT_OPCODE();
	}
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_UNSET_DIM_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *container;
	zval *offset;
	zend_ulong hval;
	zend_string *key;

	SAVE_OPLINE();
	container = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
	offset = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);

	do {
		if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
			HashTable *ht;

unset_dim_array:
			SEPARATE_ARRAY(container);
			ht = Z_ARRVAL_P(container);
offset_again:
			if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) {
				key = Z_STR_P(offset);
				if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
					if (ZEND_HANDLE_NUMERIC(key, hval)) {
						goto num_index_dim;
					}
				}
str_index_dim:
				ZEND_ASSERT(ht != &EG(symbol_table));
				zend_hash_del(ht, key);
			} else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
				hval = Z_LVAL_P(offset);
num_index_dim:
				zend_hash_index_del(ht, hval);
			} else if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && EXPECTED(Z_TYPE_P(offset) == IS_REFERENCE)) {
				offset = Z_REFVAL_P(offset);
				goto offset_again;
			} else if (Z_TYPE_P(offset) == IS_DOUBLE) {
				/* The array may be destroyed while throwing a warning in case the float is not representable as an int.
				 * Temporarily increase the refcount to detect this situation. */
				GC_TRY_ADDREF(ht);
				hval = zend_dval_to_lval_safe(Z_DVAL_P(offset));
				if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE) && !GC_DELREF(ht)) {
					zend_array_destroy(ht);
					break;
				}
				if (EG(exception)) {
					break;
				}
				goto num_index_dim;
			} else if (Z_TYPE_P(offset) == IS_NULL) {
				key = ZSTR_EMPTY_ALLOC();
				goto str_index_dim;
			} else if (Z_TYPE_P(offset) == IS_FALSE) {
				hval = 0;
				goto num_index_dim;
			} else if (Z_TYPE_P(offset) == IS_TRUE) {
				hval = 1;
				goto num_index_dim;
			} else if (Z_TYPE_P(offset) == IS_RESOURCE) {
				zend_use_resource_as_offset(offset);
				hval = Z_RES_HANDLE_P(offset);
				goto num_index_dim;
			} else if ((IS_TMP_VAR|IS_VAR) == IS_CV && Z_TYPE_P(offset) == IS_UNDEF) {
				ZVAL_UNDEFINED_OP2();
				key = ZSTR_EMPTY_ALLOC();
				goto str_index_dim;
			} else {
				zend_illegal_array_offset_unset(offset);
			}
			break;
		} else if (Z_ISREF_P(container)) {
			container = Z_REFVAL_P(container);
			if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
				goto unset_dim_array;
			}
		}
		if (IS_VAR == IS_CV && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
			container = ZVAL_UNDEFINED_OP1();
		}
		if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(offset) == IS_UNDEF)) {
			offset = ZVAL_UNDEFINED_OP2();
		}
		if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
			if ((IS_TMP_VAR|IS_VAR) == IS_CONST && Z_EXTRA_P(offset) == ZEND_EXTRA_VALUE) {
				offset++;
			}
			Z_OBJ_HT_P(container)->unset_dimension(Z_OBJ_P(container), offset);
		} else if (UNEXPECTED(Z_TYPE_P(container) == IS_STRING)) {
			zend_throw_error(NULL, "Cannot unset string offsets");
		} else if (UNEXPECTED(Z_TYPE_P(container) > IS_FALSE)) {
			zend_throw_error(NULL, "Cannot unset offset in a non-array variable");
		} else if (UNEXPECTED(Z_TYPE_P(container) == IS_FALSE)) {
			zend_false_to_array_deprecated();
		}
	} while (0);

	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_UNSET_OBJ_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *container;
	zval *offset;
	zend_string *name, *tmp_name;

	SAVE_OPLINE();
	container = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
	offset = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);

	do {
		if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT)) {
			if (Z_ISREF_P(container)) {
				container = Z_REFVAL_P(container);
				if (Z_TYPE_P(container) != IS_OBJECT) {
					if (IS_VAR == IS_CV
					 && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
						ZVAL_UNDEFINED_OP1();
					}
					break;
				}
			} else {
				break;
			}
		}
		if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
			name = Z_STR_P(offset);
		} else {
			name = zval_try_get_tmp_string(offset, &tmp_name);
			if (UNEXPECTED(!name)) {
				break;
			}
		}
		Z_OBJ_HT_P(container)->unset_property(Z_OBJ_P(container), name, (((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL));
		if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
			zend_tmp_string_release(tmp_name);
		}
	} while (0);

	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_YIELD_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE

	zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C);

	SAVE_OPLINE();
	if (UNEXPECTED(generator->flags & ZEND_GENERATOR_FORCED_CLOSE)) {
		ZEND_VM_TAIL_CALL(zend_yield_in_closed_generator_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
	}

	/* Destroy the previously yielded value */
	zval_ptr_dtor(&generator->value);

	/* Destroy the previously yielded key */
	zval_ptr_dtor(&generator->key);

	/* Set the new yielded value */
	if (IS_VAR != IS_UNUSED) {
		if (UNEXPECTED(EX(func)->op_array.fn_flags & ZEND_ACC_RETURN_REFERENCE)) {
			/* Constants and temporary variables aren't yieldable by reference,
			 * but we still allow them with a notice. */
			if (IS_VAR & (IS_CONST|IS_TMP_VAR)) {
				zval *value;

				zend_error(E_NOTICE, "Only variable references should be yielded by reference");

				value = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
				ZVAL_COPY_VALUE(&generator->value, value);
				if (IS_VAR == IS_CONST) {
					if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
						Z_ADDREF(generator->value);
					}
				}
			} else {
				zval *value_ptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);

				/* If a function call result is yielded and the function did
				 * not return by reference we throw a notice. */
				do {
					if (IS_VAR == IS_VAR) {
						ZEND_ASSERT(value_ptr != &EG(uninitialized_zval));
						if (opline->extended_value == ZEND_RETURNS_FUNCTION
						 && !Z_ISREF_P(value_ptr)) {
							zend_error(E_NOTICE, "Only variable references should be yielded by reference");
							ZVAL_COPY(&generator->value, value_ptr);
							break;
						}
					}
					if (Z_ISREF_P(value_ptr)) {
						Z_ADDREF_P(value_ptr);
					} else {
						ZVAL_MAKE_REF_EX(value_ptr, 2);
					}
					ZVAL_REF(&generator->value, Z_REF_P(value_ptr));
				} while (0);

				zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
			}
		} else {
			zval *value = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);

			/* Consts, temporary variables and references need copying */
			if (IS_VAR == IS_CONST) {
				ZVAL_COPY_VALUE(&generator->value, value);
				if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
					Z_ADDREF(generator->value);
				}
			} else if (IS_VAR == IS_TMP_VAR) {
				ZVAL_COPY_VALUE(&generator->value, value);
			} else if ((IS_VAR & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) {
				ZVAL_COPY(&generator->value, Z_REFVAL_P(value));
				zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
			} else {
				ZVAL_COPY_VALUE(&generator->value, value);
				if (IS_VAR == IS_CV) {
					if (Z_OPT_REFCOUNTED_P(value)) Z_ADDREF_P(value);
				}
			}
		}
	} else {
		/* If no value was specified yield null */
		ZVAL_NULL(&generator->value);
	}

	/* Set the new yielded key */
	if ((IS_TMP_VAR|IS_VAR) != IS_UNUSED) {
		zval *key = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
		if (((IS_TMP_VAR|IS_VAR) & (IS_CV|IS_VAR)) && UNEXPECTED(Z_TYPE_P(key) == IS_REFERENCE)) {
			key = Z_REFVAL_P(key);
		}
		ZVAL_COPY(&generator->key, key);
		zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));

		if (Z_TYPE(generator->key) == IS_LONG
		    && Z_LVAL(generator->key) > generator->largest_used_integer_key
		) {
			generator->largest_used_integer_key = Z_LVAL(generator->key);
		}
	} else {
		/* If no key was specified we use auto-increment keys */
		generator->largest_used_integer_key++;
		ZVAL_LONG(&generator->key, generator->largest_used_integer_key);
	}

	if (RETURN_VALUE_USED(opline)) {
		/* If the return value of yield is used set the send
		 * target and initialize it to NULL */
		generator->send_target = EX_VAR(opline->result.var);
		ZVAL_NULL(generator->send_target);
	} else {
		generator->send_target = NULL;
	}

	/* The GOTO VM uses a local opline variable. We need to set the opline
	 * variable in execute_data so we don't resume at an old position. */
	SAVE_OPLINE();

	ZEND_VM_RETURN();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_IS_IDENTICAL_SPEC_VAR_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;
	bool result;

	SAVE_OPLINE();
	op1 = _get_zval_ptr_var_deref(opline->op1.var EXECUTE_DATA_CC);
	op2 = _get_zval_ptr_tmp(opline->op2.var EXECUTE_DATA_CC);
	result = fast_is_identical_function(op1, op2);
	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
	ZEND_VM_SMART_BRANCH(result, 1);
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_CASE_STRICT_SPEC_VAR_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;
	bool result;

	SAVE_OPLINE();
	op1 = _get_zval_ptr_var_deref(opline->op1.var EXECUTE_DATA_CC);
	op2 = _get_zval_ptr_tmp(opline->op2.var EXECUTE_DATA_CC);
	result = fast_is_identical_function(op1, op2);
	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
	ZEND_VM_SMART_BRANCH(result, 1);
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_IS_NOT_IDENTICAL_SPEC_VAR_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;
	bool result;

	SAVE_OPLINE();
	op1 = _get_zval_ptr_var_deref(opline->op1.var EXECUTE_DATA_CC);
	op2 = _get_zval_ptr_tmp(opline->op2.var EXECUTE_DATA_CC);
	result = fast_is_not_identical_function(op1, op2);
	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
	ZEND_VM_SMART_BRANCH(result, 1);
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_ASSIGN_SPEC_VAR_TMP_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *value;
	zval *variable_ptr;

	SAVE_OPLINE();
	value = _get_zval_ptr_tmp(opline->op2.var EXECUTE_DATA_CC);
	variable_ptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);

	if (0 || UNEXPECTED(0)) {
		zend_refcounted *garbage = NULL;

		value = zend_assign_to_variable_ex(variable_ptr, value, IS_TMP_VAR, EX_USES_STRICT_TYPES(), &garbage);
		if (UNEXPECTED(0)) {
			ZVAL_COPY(EX_VAR(opline->result.var), value);
		}
		if (garbage) {
			GC_DTOR_NO_REF(garbage);
		}
	} else {
		value = zend_assign_to_variable(variable_ptr, value, IS_TMP_VAR, EX_USES_STRICT_TYPES());
	}
	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
	/* zend_assign_to_variable() always takes care of op2, never free it! */

	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_ASSIGN_SPEC_VAR_TMP_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *value;
	zval *variable_ptr;

	SAVE_OPLINE();
	value = _get_zval_ptr_tmp(opline->op2.var EXECUTE_DATA_CC);
	variable_ptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);

	if (0 || UNEXPECTED(1)) {
		zend_refcounted *garbage = NULL;

		value = zend_assign_to_variable_ex(variable_ptr, value, IS_TMP_VAR, EX_USES_STRICT_TYPES(), &garbage);
		if (UNEXPECTED(1)) {
			ZVAL_COPY(EX_VAR(opline->result.var), value);
		}
		if (garbage) {
			GC_DTOR_NO_REF(garbage);
		}
	} else {
		value = zend_assign_to_variable(variable_ptr, value, IS_TMP_VAR, EX_USES_STRICT_TYPES());
	}
	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
	/* zend_assign_to_variable() always takes care of op2, never free it! */

	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_IS_IDENTICAL_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;
	bool result;

	SAVE_OPLINE();
	op1 = _get_zval_ptr_var_deref(opline->op1.var EXECUTE_DATA_CC);
	op2 = _get_zval_ptr_var_deref(opline->op2.var EXECUTE_DATA_CC);
	result = fast_is_identical_function(op1, op2);
	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
	ZEND_VM_SMART_BRANCH(result, 1);
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_CASE_STRICT_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;
	bool result;

	SAVE_OPLINE();
	op1 = _get_zval_ptr_var_deref(opline->op1.var EXECUTE_DATA_CC);
	op2 = _get_zval_ptr_var_deref(opline->op2.var EXECUTE_DATA_CC);
	result = fast_is_identical_function(op1, op2);
	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
	ZEND_VM_SMART_BRANCH(result, 1);
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_IS_NOT_IDENTICAL_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;
	bool result;

	SAVE_OPLINE();
	op1 = _get_zval_ptr_var_deref(opline->op1.var EXECUTE_DATA_CC);
	op2 = _get_zval_ptr_var_deref(opline->op2.var EXECUTE_DATA_CC);
	result = fast_is_not_identical_function(op1, op2);
	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
	ZEND_VM_SMART_BRANCH(result, 1);
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_ASSIGN_SPEC_VAR_VAR_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *value;
	zval *variable_ptr;

	SAVE_OPLINE();
	value = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
	variable_ptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);

	if (0 || UNEXPECTED(0)) {
		zend_refcounted *garbage = NULL;

		value = zend_assign_to_variable_ex(variable_ptr, value, IS_VAR, EX_USES_STRICT_TYPES(), &garbage);
		if (UNEXPECTED(0)) {
			ZVAL_COPY(EX_VAR(opline->result.var), value);
		}
		if (garbage) {
			GC_DTOR_NO_REF(garbage);
		}
	} else {
		value = zend_assign_to_variable(variable_ptr, value, IS_VAR, EX_USES_STRICT_TYPES());
	}
	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
	/* zend_assign_to_variable() always takes care of op2, never free it! */

	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_ASSIGN_SPEC_VAR_VAR_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *value;
	zval *variable_ptr;

	SAVE_OPLINE();
	value = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
	variable_ptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);

	if (0 || UNEXPECTED(1)) {
		zend_refcounted *garbage = NULL;

		value = zend_assign_to_variable_ex(variable_ptr, value, IS_VAR, EX_USES_STRICT_TYPES(), &garbage);
		if (UNEXPECTED(1)) {
			ZVAL_COPY(EX_VAR(opline->result.var), value);
		}
		if (garbage) {
			GC_DTOR_NO_REF(garbage);
		}
	} else {
		value = zend_assign_to_variable(variable_ptr, value, IS_VAR, EX_USES_STRICT_TYPES());
	}
	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
	/* zend_assign_to_variable() always takes care of op2, never free it! */

	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_ASSIGN_REF_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *variable_ptr;
	zval *value_ptr;
	zend_refcounted *garbage = NULL;

	SAVE_OPLINE();
	value_ptr = _get_zval_ptr_ptr_var(opline->op2.var EXECUTE_DATA_CC);
	variable_ptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);

	if (IS_VAR == IS_VAR &&
	           UNEXPECTED(Z_TYPE_P(EX_VAR(opline->op1.var)) != IS_INDIRECT)) {

		zend_throw_error(NULL, "Cannot assign by reference to an array dimension of an object");
		variable_ptr = &EG(uninitialized_zval);
	} else if (IS_VAR == IS_VAR &&
	           opline->extended_value == ZEND_RETURNS_FUNCTION &&
			   UNEXPECTED(!Z_ISREF_P(value_ptr))) {

		variable_ptr = zend_wrong_assign_to_variable_reference(
			variable_ptr, value_ptr, &garbage OPLINE_CC EXECUTE_DATA_CC);
	} else {
		zend_assign_to_variable_reference(variable_ptr, value_ptr, &garbage);
	}

	if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
		ZVAL_COPY(EX_VAR(opline->result.var), variable_ptr);
	}

	if (garbage) {
		GC_DTOR(garbage);
	}

	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_ASSIGN_DIM_OP_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *var_ptr;
	zval *value, *container, *dim;
	HashTable *ht;

	SAVE_OPLINE();
	container = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);

	if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
assign_dim_op_array:
		SEPARATE_ARRAY(container);
		ht = Z_ARRVAL_P(container);
assign_dim_op_new_array:
		dim = NULL;
		if (IS_UNUSED == IS_UNUSED) {
			var_ptr = zend_hash_next_index_insert(ht, &EG(uninitialized_zval));
			if (UNEXPECTED(!var_ptr)) {
				zend_cannot_add_element();
				goto assign_dim_op_ret_null;
			}
		} else {
			if (IS_UNUSED == IS_CONST) {
				var_ptr = zend_fetch_dimension_address_inner_RW_CONST(ht, dim EXECUTE_DATA_CC);
			} else {
				var_ptr = zend_fetch_dimension_address_inner_RW(ht, dim EXECUTE_DATA_CC);
			}
			if (UNEXPECTED(!var_ptr)) {
				goto assign_dim_op_ret_null;
			}
		}

		value = get_op_data_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1);

		do {
			if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_ISREF_P(var_ptr))) {
				zend_reference *ref = Z_REF_P(var_ptr);
				var_ptr = Z_REFVAL_P(var_ptr);
				if (UNEXPECTED(ZEND_REF_HAS_TYPE_SOURCES(ref))) {
					zend_binary_assign_op_typed_ref(ref, value OPLINE_CC EXECUTE_DATA_CC);
					break;
				}
			}
			zend_binary_op(var_ptr, var_ptr, value OPLINE_CC);
		} while (0);

		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
			ZVAL_COPY(EX_VAR(opline->result.var), var_ptr);
		}
		FREE_OP((opline+1)->op1_type, (opline+1)->op1.var);
	} else {
		if (EXPECTED(Z_ISREF_P(container))) {
			container = Z_REFVAL_P(container);
			if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
				goto assign_dim_op_array;
			}
		}

		if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
			zend_object *obj = Z_OBJ_P(container);

			dim = NULL;
			if (IS_UNUSED == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
				dim++;
			}
			zend_binary_assign_op_obj_dim(obj, dim OPLINE_CC EXECUTE_DATA_CC);
		} else if (EXPECTED(Z_TYPE_P(container) <= IS_FALSE)) {
			uint8_t old_type;

			if (IS_VAR == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(container) == IS_UNDEF)) {
				ZVAL_UNDEFINED_OP1();
			}
			ht = zend_new_array(8);
			old_type = Z_TYPE_P(container);
			ZVAL_ARR(container, ht);
			if (UNEXPECTED(old_type == IS_FALSE)) {
				GC_ADDREF(ht);
				zend_false_to_array_deprecated();
				if (UNEXPECTED(GC_DELREF(ht) == 0)) {
					zend_array_destroy(ht);
					goto assign_dim_op_ret_null;
				}
			}
			goto assign_dim_op_new_array;
		} else {
			dim = NULL;
			zend_binary_assign_op_dim_slow(container, dim OPLINE_CC EXECUTE_DATA_CC);
assign_dim_op_ret_null:
			FREE_OP((opline+1)->op1_type, (opline+1)->op1.var);
			if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
				ZVAL_NULL(EX_VAR(opline->result.var));
			}
		}
	}


	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
	ZEND_VM_NEXT_OPCODE_EX(1, 2);
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_FETCH_DIM_W_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *container;

	SAVE_OPLINE();
	container = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
	zend_fetch_dimension_address_W(container, NULL, IS_UNUSED OPLINE_CC EXECUTE_DATA_CC);


	if (IS_VAR == IS_VAR) {
		FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
	}
	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_FETCH_DIM_RW_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *container;

	SAVE_OPLINE();
	container = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
	zend_fetch_dimension_address_RW(container, NULL, IS_UNUSED OPLINE_CC EXECUTE_DATA_CC);


	if (IS_VAR == IS_VAR) {
		FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
	}
	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
#if 0
	USE_OPLINE
#endif

	if (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) {
		if ((IS_VAR & (IS_CONST|IS_TMP_VAR))) {
			ZEND_VM_TAIL_CALL(zend_use_tmp_in_write_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
		}
		ZEND_VM_TAIL_CALL(ZEND_FETCH_DIM_W_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
	} else {
		if (IS_UNUSED == IS_UNUSED) {
			ZEND_VM_TAIL_CALL(zend_use_undef_in_read_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
		}
		ZEND_VM_TAIL_CALL(ZEND_NULL_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
	}
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_ASSIGN_DIM_SPEC_VAR_UNUSED_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *object_ptr, *orig_object_ptr;
	zval *value;
	zval *variable_ptr;
	zval *dim;
	zend_refcounted *garbage = NULL;

	SAVE_OPLINE();
	orig_object_ptr = object_ptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);

	if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
try_assign_dim_array:
		SEPARATE_ARRAY(object_ptr);
		if (IS_UNUSED == IS_UNUSED) {
			value = RT_CONSTANT((opline+1), (opline+1)->op1);
			if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
				HashTable *ht = Z_ARRVAL_P(object_ptr);
				if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE)) {
					GC_ADDREF(ht);
				}
				value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
				if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE) && !GC_DELREF(ht)) {
					zend_array_destroy(ht);
					goto assign_dim_error;
				}
			}
			if (IS_CONST == IS_CV || IS_CONST == IS_VAR) {
				ZVAL_DEREF(value);
			}
			value = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), value);
			if (UNEXPECTED(value == NULL)) {
				zend_cannot_add_element();
				goto assign_dim_error;
			} else if (IS_CONST == IS_CV) {
				if (Z_REFCOUNTED_P(value)) {
					Z_ADDREF_P(value);
				}
			} else if (IS_CONST == IS_VAR) {
				zval *free_op_data = EX_VAR((opline+1)->op1.var);
				if (Z_ISREF_P(free_op_data)) {
					if (Z_REFCOUNTED_P(value)) {
						Z_ADDREF_P(value);
					}
					zval_ptr_dtor_nogc(free_op_data);
				}
			} else if (IS_CONST == IS_CONST) {
				if (UNEXPECTED(Z_REFCOUNTED_P(value))) {
					Z_ADDREF_P(value);
				}
			}
		} else {
			dim = NULL;
			if (IS_UNUSED == IS_CONST) {
				variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
			} else {
				variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
			}
			if (UNEXPECTED(variable_ptr == NULL)) {
				goto assign_dim_error;
			}
			value = RT_CONSTANT((opline+1), (opline+1)->op1);
			value = zend_assign_to_variable_ex(variable_ptr, value, IS_CONST, EX_USES_STRICT_TYPES(), &garbage);
		}
		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
			ZVAL_COPY(EX_VAR(opline->result.var), value);
		}
		if (garbage) {
			GC_DTOR_NO_REF(garbage);
		}
	} else {
		if (EXPECTED(Z_ISREF_P(object_ptr))) {
			object_ptr = Z_REFVAL_P(object_ptr);
			if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
				goto try_assign_dim_array;
			}
		}
		if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) {
			zend_object *obj = Z_OBJ_P(object_ptr);

			GC_ADDREF(obj);
			dim = NULL;
			if (IS_UNUSED == IS_CV && UNEXPECTED(Z_ISUNDEF_P(dim))) {
				dim = ZVAL_UNDEFINED_OP2();
			} else if (IS_UNUSED == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
				dim++;
			}

			value = RT_CONSTANT((opline+1), (opline+1)->op1);
			if (IS_CONST == IS_CV && UNEXPECTED(Z_ISUNDEF_P(value))) {
				value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
			} else if (IS_CONST & (IS_CV|IS_VAR)) {
				ZVAL_DEREF(value);
			}

			zend_assign_to_object_dim(obj, dim, value OPLINE_CC EXECUTE_DATA_CC);


			if (UNEXPECTED(GC_DELREF(obj) == 0)) {
				zend_objects_store_del(obj);
			}
		} else if (EXPECTED(Z_TYPE_P(object_ptr) == IS_STRING)) {
			if (IS_UNUSED == IS_UNUSED) {
				zend_use_new_element_for_string();


				UNDEF_RESULT();
			} else {
				dim = NULL;
				value = RT_CONSTANT((opline+1), (opline+1)->op1);
				zend_assign_to_string_offset(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC);


			}
		} else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
			if (Z_ISREF_P(orig_object_ptr)
			 && ZEND_REF_HAS_TYPE_SOURCES(Z_REF_P(orig_object_ptr))
			 && !zend_verify_ref_array_assignable(Z_REF_P(orig_object_ptr))) {
				dim = NULL;


				UNDEF_RESULT();
			} else {
				HashTable *ht = zend_new_array(8);
				uint8_t old_type = Z_TYPE_P(object_ptr);

				ZVAL_ARR(object_ptr, ht);
				if (UNEXPECTED(old_type == IS_FALSE)) {
					GC_ADDREF(ht);
					zend_false_to_array_deprecated();
					if (UNEXPECTED(GC_DELREF(ht) == 0)) {
						zend_array_destroy(ht);
						goto assign_dim_error;
					}
				}
				goto try_assign_dim_array;
			}
		} else {
			zend_use_scalar_as_array();
			dim = NULL;
assign_dim_error:


			if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
				ZVAL_NULL(EX_VAR(opline->result.var));
			}
		}
	}
	if (IS_UNUSED != IS_UNUSED) {


	}
	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
	/* assign_dim has two opcodes! */
	ZEND_VM_NEXT_OPCODE_EX(1, 2);
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_ASSIGN_DIM_SPEC_VAR_UNUSED_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *object_ptr, *orig_object_ptr;
	zval *value;
	zval *variable_ptr;
	zval *dim;
	zend_refcounted *garbage = NULL;

	SAVE_OPLINE();
	orig_object_ptr = object_ptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);

	if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
try_assign_dim_array:
		SEPARATE_ARRAY(object_ptr);
		if (IS_UNUSED == IS_UNUSED) {
			value = _get_zval_ptr_tmp((opline+1)->op1.var EXECUTE_DATA_CC);
			if (IS_TMP_VAR == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
				HashTable *ht = Z_ARRVAL_P(object_ptr);
				if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE)) {
					GC_ADDREF(ht);
				}
				value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
				if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE) && !GC_DELREF(ht)) {
					zend_array_destroy(ht);
					goto assign_dim_error;
				}
			}
			if (IS_TMP_VAR == IS_CV || IS_TMP_VAR == IS_VAR) {
				ZVAL_DEREF(value);
			}
			value = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), value);
			if (UNEXPECTED(value == NULL)) {
				zend_cannot_add_element();
				goto assign_dim_error;
			} else if (IS_TMP_VAR == IS_CV) {
				if (Z_REFCOUNTED_P(value)) {
					Z_ADDREF_P(value);
				}
			} else if (IS_TMP_VAR == IS_VAR) {
				zval *free_op_data = EX_VAR((opline+1)->op1.var);
				if (Z_ISREF_P(free_op_data)) {
					if (Z_REFCOUNTED_P(value)) {
						Z_ADDREF_P(value);
					}
					zval_ptr_dtor_nogc(free_op_data);
				}
			} else if (IS_TMP_VAR == IS_CONST) {
				if (UNEXPECTED(Z_REFCOUNTED_P(value))) {
					Z_ADDREF_P(value);
				}
			}
		} else {
			dim = NULL;
			if (IS_UNUSED == IS_CONST) {
				variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
			} else {
				variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
			}
			if (UNEXPECTED(variable_ptr == NULL)) {
				goto assign_dim_error;
			}
			value = _get_zval_ptr_tmp((opline+1)->op1.var EXECUTE_DATA_CC);
			value = zend_assign_to_variable_ex(variable_ptr, value, IS_TMP_VAR, EX_USES_STRICT_TYPES(), &garbage);
		}
		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
			ZVAL_COPY(EX_VAR(opline->result.var), value);
		}
		if (garbage) {
			GC_DTOR_NO_REF(garbage);
		}
	} else {
		if (EXPECTED(Z_ISREF_P(object_ptr))) {
			object_ptr = Z_REFVAL_P(object_ptr);
			if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
				goto try_assign_dim_array;
			}
		}
		if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) {
			zend_object *obj = Z_OBJ_P(object_ptr);

			GC_ADDREF(obj);
			dim = NULL;
			if (IS_UNUSED == IS_CV && UNEXPECTED(Z_ISUNDEF_P(dim))) {
				dim = ZVAL_UNDEFINED_OP2();
			} else if (IS_UNUSED == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
				dim++;
			}

			value = _get_zval_ptr_tmp((opline+1)->op1.var EXECUTE_DATA_CC);
			if (IS_TMP_VAR == IS_CV && UNEXPECTED(Z_ISUNDEF_P(value))) {
				value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
			} else if (IS_TMP_VAR & (IS_CV|IS_VAR)) {
				ZVAL_DEREF(value);
			}

			zend_assign_to_object_dim(obj, dim, value OPLINE_CC EXECUTE_DATA_CC);

			zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
			if (UNEXPECTED(GC_DELREF(obj) == 0)) {
				zend_objects_store_del(obj);
			}
		} else if (EXPECTED(Z_TYPE_P(object_ptr) == IS_STRING)) {
			if (IS_UNUSED == IS_UNUSED) {
				zend_use_new_element_for_string();
				zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
				UNDEF_RESULT();
			} else {
				dim = NULL;
				value = _get_zval_ptr_tmp((opline+1)->op1.var EXECUTE_DATA_CC);
				zend_assign_to_string_offset(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC);
				zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
			}
		} else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
			if (Z_ISREF_P(orig_object_ptr)
			 && ZEND_REF_HAS_TYPE_SOURCES(Z_REF_P(orig_object_ptr))
			 && !zend_verify_ref_array_assignable(Z_REF_P(orig_object_ptr))) {
				dim = NULL;
				zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
				UNDEF_RESULT();
			} else {
				HashTable *ht = zend_new_array(8);
				uint8_t old_type = Z_TYPE_P(object_ptr);

				ZVAL_ARR(object_ptr, ht);
				if (UNEXPECTED(old_type == IS_FALSE)) {
					GC_ADDREF(ht);
					zend_false_to_array_deprecated();
					if (UNEXPECTED(GC_DELREF(ht) == 0)) {
						zend_array_destroy(ht);
						goto assign_dim_error;
					}
				}
				goto try_assign_dim_array;
			}
		} else {
			zend_use_scalar_as_array();
			dim = NULL;
assign_dim_error:
			zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
			if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
				ZVAL_NULL(EX_VAR(opline->result.var));
			}
		}
	}
	if (IS_UNUSED != IS_UNUSED) {


	}
	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
	/* assign_dim has two opcodes! */
	ZEND_VM_NEXT_OPCODE_EX(1, 2);
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_ASSIGN_DIM_SPEC_VAR_UNUSED_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *object_ptr, *orig_object_ptr;
	zval *value;
	zval *variable_ptr;
	zval *dim;
	zend_refcounted *garbage = NULL;

	SAVE_OPLINE();
	orig_object_ptr = object_ptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);

	if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
try_assign_dim_array:
		SEPARATE_ARRAY(object_ptr);
		if (IS_UNUSED == IS_UNUSED) {
			value = _get_zval_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);
			if (IS_VAR == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
				HashTable *ht = Z_ARRVAL_P(object_ptr);
				if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE)) {
					GC_ADDREF(ht);
				}
				value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
				if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE) && !GC_DELREF(ht)) {
					zend_array_destroy(ht);
					goto assign_dim_error;
				}
			}
			if (IS_VAR == IS_CV || IS_VAR == IS_VAR) {
				ZVAL_DEREF(value);
			}
			value = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), value);
			if (UNEXPECTED(value == NULL)) {
				zend_cannot_add_element();
				goto assign_dim_error;
			} else if (IS_VAR == IS_CV) {
				if (Z_REFCOUNTED_P(value)) {
					Z_ADDREF_P(value);
				}
			} else if (IS_VAR == IS_VAR) {
				zval *free_op_data = EX_VAR((opline+1)->op1.var);
				if (Z_ISREF_P(free_op_data)) {
					if (Z_REFCOUNTED_P(value)) {
						Z_ADDREF_P(value);
					}
					zval_ptr_dtor_nogc(free_op_data);
				}
			} else if (IS_VAR == IS_CONST) {
				if (UNEXPECTED(Z_REFCOUNTED_P(value))) {
					Z_ADDREF_P(value);
				}
			}
		} else {
			dim = NULL;
			if (IS_UNUSED == IS_CONST) {
				variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
			} else {
				variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
			}
			if (UNEXPECTED(variable_ptr == NULL)) {
				goto assign_dim_error;
			}
			value = _get_zval_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);
			value = zend_assign_to_variable_ex(variable_ptr, value, IS_VAR, EX_USES_STRICT_TYPES(), &garbage);
		}
		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
			ZVAL_COPY(EX_VAR(opline->result.var), value);
		}
		if (garbage) {
			GC_DTOR_NO_REF(garbage);
		}
	} else {
		if (EXPECTED(Z_ISREF_P(object_ptr))) {
			object_ptr = Z_REFVAL_P(object_ptr);
			if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
				goto try_assign_dim_array;
			}
		}
		if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) {
			zend_object *obj = Z_OBJ_P(object_ptr);

			GC_ADDREF(obj);
			dim = NULL;
			if (IS_UNUSED == IS_CV && UNEXPECTED(Z_ISUNDEF_P(dim))) {
				dim = ZVAL_UNDEFINED_OP2();
			} else if (IS_UNUSED == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
				dim++;
			}

			value = _get_zval_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);
			if (IS_VAR == IS_CV && UNEXPECTED(Z_ISUNDEF_P(value))) {
				value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
			} else if (IS_VAR & (IS_CV|IS_VAR)) {
				ZVAL_DEREF(value);
			}

			zend_assign_to_object_dim(obj, dim, value OPLINE_CC EXECUTE_DATA_CC);

			zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
			if (UNEXPECTED(GC_DELREF(obj) == 0)) {
				zend_objects_store_del(obj);
			}
		} else if (EXPECTED(Z_TYPE_P(object_ptr) == IS_STRING)) {
			if (IS_UNUSED == IS_UNUSED) {
				zend_use_new_element_for_string();
				zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
				UNDEF_RESULT();
			} else {
				dim = NULL;
				value = _get_zval_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);
				zend_assign_to_string_offset(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC);
				zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
			}
		} else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
			if (Z_ISREF_P(orig_object_ptr)
			 && ZEND_REF_HAS_TYPE_SOURCES(Z_REF_P(orig_object_ptr))
			 && !zend_verify_ref_array_assignable(Z_REF_P(orig_object_ptr))) {
				dim = NULL;
				zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
				UNDEF_RESULT();
			} else {
				HashTable *ht = zend_new_array(8);
				uint8_t old_type = Z_TYPE_P(object_ptr);

				ZVAL_ARR(object_ptr, ht);
				if (UNEXPECTED(old_type == IS_FALSE)) {
					GC_ADDREF(ht);
					zend_false_to_array_deprecated();
					if (UNEXPECTED(GC_DELREF(ht) == 0)) {
						zend_array_destroy(ht);
						goto assign_dim_error;
					}
				}
				goto try_assign_dim_array;
			}
		} else {
			zend_use_scalar_as_array();
			dim = NULL;
assign_dim_error:
			zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
			if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
				ZVAL_NULL(EX_VAR(opline->result.var));
			}
		}
	}
	if (IS_UNUSED != IS_UNUSED) {


	}
	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
	/* assign_dim has two opcodes! */
	ZEND_VM_NEXT_OPCODE_EX(1, 2);
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_ASSIGN_DIM_SPEC_VAR_UNUSED_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *object_ptr, *orig_object_ptr;
	zval *value;
	zval *variable_ptr;
	zval *dim;
	zend_refcounted *garbage = NULL;

	SAVE_OPLINE();
	orig_object_ptr = object_ptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);

	if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
try_assign_dim_array:
		SEPARATE_ARRAY(object_ptr);
		if (IS_UNUSED == IS_UNUSED) {
			value = EX_VAR((opline+1)->op1.var);
			if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
				HashTable *ht = Z_ARRVAL_P(object_ptr);
				if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE)) {
					GC_ADDREF(ht);
				}
				value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
				if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE) && !GC_DELREF(ht)) {
					zend_array_destroy(ht);
					goto assign_dim_error;
				}
			}
			if (IS_CV == IS_CV || IS_CV == IS_VAR) {
				ZVAL_DEREF(value);
			}
			value = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), value);
			if (UNEXPECTED(value == NULL)) {
				zend_cannot_add_element();
				goto assign_dim_error;
			} else if (IS_CV == IS_CV) {
				if (Z_REFCOUNTED_P(value)) {
					Z_ADDREF_P(value);
				}
			} else if (IS_CV == IS_VAR) {
				zval *free_op_data = EX_VAR((opline+1)->op1.var);
				if (Z_ISREF_P(free_op_data)) {
					if (Z_REFCOUNTED_P(value)) {
						Z_ADDREF_P(value);
					}
					zval_ptr_dtor_nogc(free_op_data);
				}
			} else if (IS_CV == IS_CONST) {
				if (UNEXPECTED(Z_REFCOUNTED_P(value))) {
					Z_ADDREF_P(value);
				}
			}
		} else {
			dim = NULL;
			if (IS_UNUSED == IS_CONST) {
				variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
			} else {
				variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
			}
			if (UNEXPECTED(variable_ptr == NULL)) {
				goto assign_dim_error;
			}
			value = _get_zval_ptr_cv_BP_VAR_R((opline+1)->op1.var EXECUTE_DATA_CC);
			value = zend_assign_to_variable_ex(variable_ptr, value, IS_CV, EX_USES_STRICT_TYPES(), &garbage);
		}
		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
			ZVAL_COPY(EX_VAR(opline->result.var), value);
		}
		if (garbage) {
			GC_DTOR_NO_REF(garbage);
		}
	} else {
		if (EXPECTED(Z_ISREF_P(object_ptr))) {
			object_ptr = Z_REFVAL_P(object_ptr);
			if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
				goto try_assign_dim_array;
			}
		}
		if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) {
			zend_object *obj = Z_OBJ_P(object_ptr);

			GC_ADDREF(obj);
			dim = NULL;
			if (IS_UNUSED == IS_CV && UNEXPECTED(Z_ISUNDEF_P(dim))) {
				dim = ZVAL_UNDEFINED_OP2();
			} else if (IS_UNUSED == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
				dim++;
			}

			value = EX_VAR((opline+1)->op1.var);
			if (IS_CV == IS_CV && UNEXPECTED(Z_ISUNDEF_P(value))) {
				value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
			} else if (IS_CV & (IS_CV|IS_VAR)) {
				ZVAL_DEREF(value);
			}

			zend_assign_to_object_dim(obj, dim, value OPLINE_CC EXECUTE_DATA_CC);


			if (UNEXPECTED(GC_DELREF(obj) == 0)) {
				zend_objects_store_del(obj);
			}
		} else if (EXPECTED(Z_TYPE_P(object_ptr) == IS_STRING)) {
			if (IS_UNUSED == IS_UNUSED) {
				zend_use_new_element_for_string();


				UNDEF_RESULT();
			} else {
				dim = NULL;
				value = EX_VAR((opline+1)->op1.var);
				zend_assign_to_string_offset(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC);


			}
		} else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
			if (Z_ISREF_P(orig_object_ptr)
			 && ZEND_REF_HAS_TYPE_SOURCES(Z_REF_P(orig_object_ptr))
			 && !zend_verify_ref_array_assignable(Z_REF_P(orig_object_ptr))) {
				dim = NULL;


				UNDEF_RESULT();
			} else {
				HashTable *ht = zend_new_array(8);
				uint8_t old_type = Z_TYPE_P(object_ptr);

				ZVAL_ARR(object_ptr, ht);
				if (UNEXPECTED(old_type == IS_FALSE)) {
					GC_ADDREF(ht);
					zend_false_to_array_deprecated();
					if (UNEXPECTED(GC_DELREF(ht) == 0)) {
						zend_array_destroy(ht);
						goto assign_dim_error;
					}
				}
				goto try_assign_dim_array;
			}
		} else {
			zend_use_scalar_as_array();
			dim = NULL;
assign_dim_error:


			if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
				ZVAL_NULL(EX_VAR(opline->result.var));
			}
		}
	}
	if (IS_UNUSED != IS_UNUSED) {


	}
	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
	/* assign_dim has two opcodes! */
	ZEND_VM_NEXT_OPCODE_EX(1, 2);
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_INIT_STATIC_METHOD_CALL_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *function_name;
	zend_class_entry *ce;
	uint32_t call_info;
	zend_function *fbc;
	zend_execute_data *call;

	SAVE_OPLINE();

	if (IS_VAR == IS_CONST) {
		/* no function found. try a static method in class */
		ce = CACHED_PTR(opline->result.num);
		if (UNEXPECTED(ce == NULL)) {
			ce = zend_fetch_class_by_name(Z_STR_P(RT_CONSTANT(opline, opline->op1)), Z_STR_P(RT_CONSTANT(opline, opline->op1) + 1), ZEND_FETCH_CLASS_DEFAULT | ZEND_FETCH_CLASS_EXCEPTION);
			if (UNEXPECTED(ce == NULL)) {


				HANDLE_EXCEPTION();
			}
			if (IS_UNUSED != IS_CONST) {
				CACHE_PTR(opline->result.num, ce);
			}
		}
	} else if (IS_VAR == IS_UNUSED) {
		ce = zend_fetch_class(NULL, opline->op1.num);
		if (UNEXPECTED(ce == NULL)) {


			HANDLE_EXCEPTION();
		}
	} else {
		ce = Z_CE_P(EX_VAR(opline->op1.var));
	}

	if (IS_VAR == IS_CONST &&
	    IS_UNUSED == IS_CONST &&
	    EXPECTED((fbc = CACHED_PTR(opline->result.num + sizeof(void*))) != NULL)) {
		/* nothing to do */
	} else if (IS_VAR != IS_CONST &&
	           IS_UNUSED == IS_CONST &&
	           EXPECTED(CACHED_PTR(opline->result.num) == ce)) {
		fbc = CACHED_PTR(opline->result.num + sizeof(void*));
	} else if (IS_UNUSED != IS_UNUSED) {
		function_name = NULL;
		if (IS_UNUSED != IS_CONST) {
			if (UNEXPECTED(Z_TYPE_P(function_name) != IS_STRING)) {
				do {
					if (IS_UNUSED & (IS_VAR|IS_CV) && Z_ISREF_P(function_name)) {
						function_name = Z_REFVAL_P(function_name);
						if (EXPECTED(Z_TYPE_P(function_name) == IS_STRING)) {
							break;
						}
					} else if (IS_UNUSED == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) {
						ZVAL_UNDEFINED_OP2();
						if (UNEXPECTED(EG(exception) != NULL)) {
							HANDLE_EXCEPTION();
						}
					}
					zend_throw_error(NULL, "Method name must be a string");


					HANDLE_EXCEPTION();
				} while (0);
			}
		}

		if (ce->get_static_method) {
			fbc = ce->get_static_method(ce, Z_STR_P(function_name));
		} else {
			fbc = zend_std_get_static_method(ce, Z_STR_P(function_name), ((IS_UNUSED == IS_CONST) ? (RT_CONSTANT(opline, opline->op2) + 1) : NULL));
		}
		if (UNEXPECTED(fbc == NULL)) {
			if (EXPECTED(!EG(exception))) {
				zend_undefined_method(ce, Z_STR_P(function_name));
			}


			HANDLE_EXCEPTION();
		}
		if (IS_UNUSED == IS_CONST &&
		    EXPECTED(!(fbc->common.fn_flags & (ZEND_ACC_CALL_VIA_TRAMPOLINE|ZEND_ACC_NEVER_CACHE))) &&
			EXPECTED(!(fbc->common.scope->ce_flags & ZEND_ACC_TRAIT))) {
			CACHE_POLYMORPHIC_PTR(opline->result.num, ce, fbc);
		}
		if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!RUN_TIME_CACHE(&fbc->op_array))) {
			init_func_run_time_cache(&fbc->op_array);
		}
		if (IS_UNUSED != IS_CONST) {


		}
	} else {
		if (UNEXPECTED(ce->constructor == NULL)) {
			zend_throw_error(NULL, "Cannot call constructor");
			HANDLE_EXCEPTION();
		}
		if (Z_TYPE(EX(This)) == IS_OBJECT && Z_OBJ(EX(This))->ce != ce->constructor->common.scope && (ce->constructor->common.fn_flags & ZEND_ACC_PRIVATE)) {
			zend_throw_error(NULL, "Cannot call private %s::__construct()", ZSTR_VAL(ce->name));
			HANDLE_EXCEPTION();
		}
		fbc = ce->constructor;
		if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!RUN_TIME_CACHE(&fbc->op_array))) {
			init_func_run_time_cache(&fbc->op_array);
		}
	}

	if (!(fbc->common.fn_flags & ZEND_ACC_STATIC)) {
		if (Z_TYPE(EX(This)) == IS_OBJECT && instanceof_function(Z_OBJCE(EX(This)), ce)) {
			ce = (zend_class_entry*)Z_OBJ(EX(This));
			call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_HAS_THIS;
		} else {
			zend_non_static_method_call(fbc);
			HANDLE_EXCEPTION();
		}
	} else {
		/* previous opcode is ZEND_FETCH_CLASS */
		if (IS_VAR == IS_UNUSED
		 && ((opline->op1.num & ZEND_FETCH_CLASS_MASK) == ZEND_FETCH_CLASS_PARENT ||
		     (opline->op1.num & ZEND_FETCH_CLASS_MASK) == ZEND_FETCH_CLASS_SELF)) {
			if (Z_TYPE(EX(This)) == IS_OBJECT) {
				ce = Z_OBJCE(EX(This));
			} else {
				ce = Z_CE(EX(This));
			}
		}
		call_info = ZEND_CALL_NESTED_FUNCTION;
	}

	call = zend_vm_stack_push_call_frame(call_info,
		fbc, opline->extended_value, ce);
	call->prev_execute_data = EX(call);
	EX(call) = call;

	ZEND_VM_NEXT_OPCODE();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_VERIFY_RETURN_TYPE_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	if (IS_VAR == IS_UNUSED) {
		SAVE_OPLINE();
		zend_verify_missing_return_type(EX(func));
		HANDLE_EXCEPTION();
	} else {
/* prevents "undefined variable opline" errors */
#if 0 || (IS_VAR != IS_UNUSED)
		USE_OPLINE
		zval *retval_ref, *retval_ptr;
		zend_arg_info *ret_info = EX(func)->common.arg_info - 1;
		retval_ref = retval_ptr = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);

		if (IS_VAR == IS_CONST) {
			ZVAL_COPY(EX_VAR(opline->result.var), retval_ptr);
			retval_ref = retval_ptr = EX_VAR(opline->result.var);
		} else if (IS_VAR == IS_VAR) {
			if (UNEXPECTED(Z_TYPE_P(retval_ptr) == IS_INDIRECT)) {
				retval_ref = retval_ptr = Z_INDIRECT_P(retval_ptr);
			}
			ZVAL_DEREF(retval_ptr);
		} else if (IS_VAR == IS_CV) {
			ZVAL_DEREF(retval_ptr);
		}

		if (EXPECTED(ZEND_TYPE_CONTAINS_CODE(ret_info->type, Z_TYPE_P(retval_ptr)))) {
			ZEND_VM_NEXT_OPCODE();
		}

		if (IS_VAR == IS_CV && UNEXPECTED(Z_ISUNDEF_P(retval_ptr))) {
			SAVE_OPLINE();
			retval_ref = retval_ptr = ZVAL_UNDEFINED_OP1();
			if (UNEXPECTED(EG(exception))) {
				HANDLE_EXCEPTION();
			}
			if (ZEND_TYPE_FULL_MASK(ret_info->type) & MAY_BE_NULL) {
				ZEND_VM_NEXT_OPCODE();
			}
		}

		zend_reference *ref = NULL;
		if (UNEXPECTED(retval_ref != retval_ptr)) {
			if (UNEXPECTED(EX(func)->op_array.fn_flags & ZEND_ACC_RETURN_REFERENCE)) {
				ref = Z_REF_P(retval_ref);
			} else {
				/* A cast might happen - unwrap the reference if this is a by-value return */
				if (Z_REFCOUNT_P(retval_ref) == 1) {
					ZVAL_UNREF(retval_ref);
				} else {
					Z_DELREF_P(retval_ref);
					ZVAL_COPY(retval_ref, retval_ptr);
				}
				retval_ptr = retval_ref;
			}
		}

		SAVE_OPLINE();
		if (UNEXPECTED(!zend_check_type_slow(&ret_info->type, retval_ptr, ref, 1, 0))) {
			zend_verify_return_error(EX(func), retval_ptr);
			HANDLE_EXCEPTION();
		}
		ZEND_VM_NEXT_OPCODE();
#endif
	}
}

static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_SEND_VAR_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *varptr, *arg;

	if (IS_UNUSED == IS_CONST) {
		SAVE_OPLINE();
		zend_string *arg_name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
		uint32_t arg_num;
		arg = zend_handle_named_arg(&EX(call), arg_name, &arg_num, CACHE_ADDR(opline->result.num));
		if (UNEXPECTED(!arg)) {
			zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
			HANDLE_EXCEPTION();
		}
	} else {
		arg = ZEND_CALL_VAR(EX(call), opline->result.var);
	}

	varptr = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
	if (IS_VAR == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(varptr) == IS_UNDEF)) {
		SAVE_OPLINE();
		ZVAL_UNDEFINED_OP1();
		ZVAL_NULL(arg);
		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
	}

	if (IS_VAR == IS_CV) {
		ZVAL_COPY_DEREF(arg, varptr);
	} else /* if (IS_VAR == IS_VAR) */ {
		if (UNEXPECTED(Z_ISREF_P(varptr))) {
			zend_refcounted *ref = Z_COUNTED_P(varptr);

			varptr = Z_REFVAL_P(varptr);
			ZVAL_COPY_VALUE(arg, varptr);
			if (UNEXPECTED(GC_DELREF(ref) == 0)) {
				efree_size(ref, sizeof(zend_reference));
			} else if (Z_OPT_REFCOUNTED_P(arg)) {
				Z_ADDREF_P(arg);
			}
		} else {
			ZVAL_COPY_VALUE(arg, varptr);
		}
	}

	ZEND_VM_NEXT_OPCODE();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_SEND_VAR_NO_REF_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *varptr, *arg;

	if (IS_UNUSED == IS_CONST) {
		SAVE_OPLINE();
		zend_string *arg_name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
		uint32_t arg_num;
		arg = zend_handle_named_arg(&EX(call), arg_name, &arg_num, CACHE_ADDR(opline->result.num));
		if (UNEXPECTED(!arg)) {
			zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
			HANDLE_EXCEPTION();
		}
	} else {
		arg = ZEND_CALL_VAR(EX(call), opline->result.var);
	}

	varptr = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
	ZVAL_COPY_VALUE(arg, varptr);

	if (EXPECTED(Z_ISREF_P(varptr))) {
		ZEND_VM_NEXT_OPCODE();
	}

	SAVE_OPLINE();
	ZVAL_NEW_REF(arg, arg);
	zend_error(E_NOTICE, "Only variables should be passed by reference");
	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_SEND_VAR_NO_REF_EX_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *varptr, *arg;
	uint32_t arg_num;

	if (IS_UNUSED == IS_CONST) {
		SAVE_OPLINE();
		zend_string *arg_name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
		arg = zend_handle_named_arg(&EX(call), arg_name, &arg_num, CACHE_ADDR(opline->result.num));
		if (UNEXPECTED(!arg)) {
			zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
			HANDLE_EXCEPTION();
		}
	} else {
		arg = ZEND_CALL_VAR(EX(call), opline->result.var);
		arg_num = opline->op2.num;
	}

	if (EXPECTED(0)) {
		if (!QUICK_ARG_SHOULD_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
			goto send_var;
		}

		varptr = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
		ZVAL_COPY_VALUE(arg, varptr);

		if (EXPECTED(Z_ISREF_P(varptr) ||
		    QUICK_ARG_MAY_BE_SENT_BY_REF(EX(call)->func, arg_num))) {
			ZEND_VM_NEXT_OPCODE();
		}
	} else {
		if (!ARG_SHOULD_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
			goto send_var;
		}

		varptr = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
		ZVAL_COPY_VALUE(arg, varptr);

		if (EXPECTED(Z_ISREF_P(varptr) ||
		    ARG_MAY_BE_SENT_BY_REF(EX(call)->func, arg_num))) {
			ZEND_VM_NEXT_OPCODE();
		}
	}

	SAVE_OPLINE();
	ZVAL_NEW_REF(arg, arg);
	zend_error(E_NOTICE, "Only variables should be passed by reference");
	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();

send_var:
	varptr = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
	if (UNEXPECTED(Z_ISREF_P(varptr))) {
		zend_refcounted *ref = Z_COUNTED_P(varptr);

		varptr = Z_REFVAL_P(varptr);
		ZVAL_COPY_VALUE(arg, varptr);
		if (UNEXPECTED(GC_DELREF(ref) == 0)) {
			efree_size(ref, sizeof(zend_reference));
		} else if (Z_OPT_REFCOUNTED_P(arg)) {
			Z_ADDREF_P(arg);
		}
	} else {
		ZVAL_COPY_VALUE(arg, varptr);
	}
	ZEND_VM_NEXT_OPCODE();
}

static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_SEND_VAR_NO_REF_EX_SPEC_VAR_UNUSED_QUICK_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *varptr, *arg;
	uint32_t arg_num;

	if (IS_UNUSED == IS_CONST) {
		SAVE_OPLINE();
		zend_string *arg_name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
		arg = zend_handle_named_arg(&EX(call), arg_name, &arg_num, CACHE_ADDR(opline->result.num));
		if (UNEXPECTED(!arg)) {
			zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
			HANDLE_EXCEPTION();
		}
	} else {
		arg = ZEND_CALL_VAR(EX(call), opline->result.var);
		arg_num = opline->op2.num;
	}

	if (EXPECTED(1)) {
		if (!QUICK_ARG_SHOULD_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
			goto send_var;
		}

		varptr = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
		ZVAL_COPY_VALUE(arg, varptr);

		if (EXPECTED(Z_ISREF_P(varptr) ||
		    QUICK_ARG_MAY_BE_SENT_BY_REF(EX(call)->func, arg_num))) {
			ZEND_VM_NEXT_OPCODE();
		}
	} else {
		if (!ARG_SHOULD_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
			goto send_var;
		}

		varptr = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
		ZVAL_COPY_VALUE(arg, varptr);

		if (EXPECTED(Z_ISREF_P(varptr) ||
		    ARG_MAY_BE_SENT_BY_REF(EX(call)->func, arg_num))) {
			ZEND_VM_NEXT_OPCODE();
		}
	}

	SAVE_OPLINE();
	ZVAL_NEW_REF(arg, arg);
	zend_error(E_NOTICE, "Only variables should be passed by reference");
	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();

send_var:
	varptr = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
	if (UNEXPECTED(Z_ISREF_P(varptr))) {
		zend_refcounted *ref = Z_COUNTED_P(varptr);

		varptr = Z_REFVAL_P(varptr);
		ZVAL_COPY_VALUE(arg, varptr);
		if (UNEXPECTED(GC_DELREF(ref) == 0)) {
			efree_size(ref, sizeof(zend_reference));
		} else if (Z_OPT_REFCOUNTED_P(arg)) {
			Z_ADDREF_P(arg);
		}
	} else {
		ZVAL_COPY_VALUE(arg, varptr);
	}
	ZEND_VM_NEXT_OPCODE();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_SEND_REF_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *varptr, *arg;

	SAVE_OPLINE();
	if (IS_UNUSED == IS_CONST) {
		zend_string *arg_name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
		uint32_t arg_num;
		arg = zend_handle_named_arg(&EX(call), arg_name, &arg_num, CACHE_ADDR(opline->result.num));
		if (UNEXPECTED(!arg)) {
			zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
			HANDLE_EXCEPTION();
		}
	} else {
		arg = ZEND_CALL_VAR(EX(call), opline->result.var);
	}

	varptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
	if (Z_ISREF_P(varptr)) {
		Z_ADDREF_P(varptr);
	} else {
		ZVAL_MAKE_REF_EX(varptr, 2);
	}
	ZVAL_REF(arg, Z_REF_P(varptr));

	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
	ZEND_VM_NEXT_OPCODE();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_SEND_VAR_EX_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *varptr, *arg;
	uint32_t arg_num;

	if (IS_UNUSED == IS_CONST) {
		SAVE_OPLINE();
		zend_string *arg_name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
		arg = zend_handle_named_arg(&EX(call), arg_name, &arg_num, CACHE_ADDR(opline->result.num));
		if (UNEXPECTED(!arg)) {
			zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
			HANDLE_EXCEPTION();
		}
	} else {
		arg = ZEND_CALL_VAR(EX(call), opline->result.var);
		arg_num = opline->op2.num;
	}

	if (EXPECTED(0)) {
		if (QUICK_ARG_SHOULD_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
			goto send_var_by_ref;
		}
	} else if (ARG_SHOULD_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
send_var_by_ref:
		varptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
		if (Z_ISREF_P(varptr)) {
			Z_ADDREF_P(varptr);
		} else {
			ZVAL_MAKE_REF_EX(varptr, 2);
		}
		ZVAL_REF(arg, Z_REF_P(varptr));

		zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
		ZEND_VM_NEXT_OPCODE();
	}

	varptr = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
	if (IS_VAR == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(varptr) == IS_UNDEF)) {
		SAVE_OPLINE();
		ZVAL_UNDEFINED_OP1();
		ZVAL_NULL(arg);
		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
	}

	if (IS_VAR == IS_CV) {
		ZVAL_COPY_DEREF(arg, varptr);
	} else /* if (IS_VAR == IS_VAR) */ {
		if (UNEXPECTED(Z_ISREF_P(varptr))) {
			zend_refcounted *ref = Z_COUNTED_P(varptr);

			varptr = Z_REFVAL_P(varptr);
			ZVAL_COPY_VALUE(arg, varptr);
			if (UNEXPECTED(GC_DELREF(ref) == 0)) {
				efree_size(ref, sizeof(zend_reference));
			} else if (Z_OPT_REFCOUNTED_P(arg)) {
				Z_ADDREF_P(arg);
			}
		} else {
			ZVAL_COPY_VALUE(arg, varptr);
		}
	}

	ZEND_VM_NEXT_OPCODE();
}

static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_SEND_VAR_EX_SPEC_VAR_UNUSED_QUICK_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *varptr, *arg;
	uint32_t arg_num;

	if (IS_UNUSED == IS_CONST) {
		SAVE_OPLINE();
		zend_string *arg_name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
		arg = zend_handle_named_arg(&EX(call), arg_name, &arg_num, CACHE_ADDR(opline->result.num));
		if (UNEXPECTED(!arg)) {
			zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
			HANDLE_EXCEPTION();
		}
	} else {
		arg = ZEND_CALL_VAR(EX(call), opline->result.var);
		arg_num = opline->op2.num;
	}

	if (EXPECTED(1)) {
		if (QUICK_ARG_SHOULD_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
			goto send_var_by_ref;
		}
	} else if (ARG_SHOULD_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
send_var_by_ref:
		varptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
		if (Z_ISREF_P(varptr)) {
			Z_ADDREF_P(varptr);
		} else {
			ZVAL_MAKE_REF_EX(varptr, 2);
		}
		ZVAL_REF(arg, Z_REF_P(varptr));

		zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
		ZEND_VM_NEXT_OPCODE();
	}

	varptr = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
	if (IS_VAR == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(varptr) == IS_UNDEF)) {
		SAVE_OPLINE();
		ZVAL_UNDEFINED_OP1();
		ZVAL_NULL(arg);
		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
	}

	if (IS_VAR == IS_CV) {
		ZVAL_COPY_DEREF(arg, varptr);
	} else /* if (IS_VAR == IS_VAR) */ {
		if (UNEXPECTED(Z_ISREF_P(varptr))) {
			zend_refcounted *ref = Z_COUNTED_P(varptr);

			varptr = Z_REFVAL_P(varptr);
			ZVAL_COPY_VALUE(arg, varptr);
			if (UNEXPECTED(GC_DELREF(ref) == 0)) {
				efree_size(ref, sizeof(zend_reference));
			} else if (Z_OPT_REFCOUNTED_P(arg)) {
				Z_ADDREF_P(arg);
			}
		} else {
			ZVAL_COPY_VALUE(arg, varptr);
		}
	}

	ZEND_VM_NEXT_OPCODE();
}

static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_SEND_FUNC_ARG_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *varptr, *arg;

	if (IS_UNUSED == IS_CONST) {
		// TODO: Would it make sense to share the cache slot with CHECK_FUNC_ARG?
		SAVE_OPLINE();
		zend_string *arg_name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
		uint32_t arg_num;
		arg = zend_handle_named_arg(&EX(call), arg_name, &arg_num, CACHE_ADDR(opline->result.num));
		if (UNEXPECTED(!arg)) {
			zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
			HANDLE_EXCEPTION();
		}
	} else {
		arg = ZEND_CALL_VAR(EX(call), opline->result.var);
	}

	if (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) {
		varptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
		if (Z_ISREF_P(varptr)) {
			Z_ADDREF_P(varptr);
		} else {
			ZVAL_MAKE_REF_EX(varptr, 2);
		}
		ZVAL_REF(arg, Z_REF_P(varptr));

		zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
		ZEND_VM_NEXT_OPCODE();
	}

	varptr = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);

	if (UNEXPECTED(Z_ISREF_P(varptr))) {
		zend_refcounted *ref = Z_COUNTED_P(varptr);

		varptr = Z_REFVAL_P(varptr);
		ZVAL_COPY_VALUE(arg, varptr);
		if (UNEXPECTED(GC_DELREF(ref) == 0)) {
			efree_size(ref, sizeof(zend_reference));
		} else if (Z_OPT_REFCOUNTED_P(arg)) {
			Z_ADDREF_P(arg);
		}
	} else {
		ZVAL_COPY_VALUE(arg, varptr);
	}

	ZEND_VM_NEXT_OPCODE();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_NEW_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *result;
	zend_function *constructor;
	zend_class_entry *ce;
	zend_execute_data *call;

	SAVE_OPLINE();
	if (IS_VAR == IS_CONST) {
		ce = CACHED_PTR(opline->op2.num);
		if (UNEXPECTED(ce == NULL)) {
			ce = zend_fetch_class_by_name(Z_STR_P(RT_CONSTANT(opline, opline->op1)), Z_STR_P(RT_CONSTANT(opline, opline->op1) + 1), ZEND_FETCH_CLASS_DEFAULT | ZEND_FETCH_CLASS_EXCEPTION);
			if (UNEXPECTED(ce == NULL)) {
				ZVAL_UNDEF(EX_VAR(opline->result.var));
				HANDLE_EXCEPTION();
			}
			CACHE_PTR(opline->op2.num, ce);
		}
	} else if (IS_VAR == IS_UNUSED) {
		ce = zend_fetch_class(NULL, opline->op1.num);
		if (UNEXPECTED(ce == NULL)) {
			ZVAL_UNDEF(EX_VAR(opline->result.var));
			HANDLE_EXCEPTION();
		}
	} else {
		ce = Z_CE_P(EX_VAR(opline->op1.var));
	}

	result = EX_VAR(opline->result.var);
	if (UNEXPECTED(object_init_ex(result, ce) != SUCCESS)) {
		ZVAL_UNDEF(result);
		HANDLE_EXCEPTION();
	}

	constructor = Z_OBJ_HT_P(result)->get_constructor(Z_OBJ_P(result));
	if (constructor == NULL) {
		/* If there are no arguments, skip over the DO_FCALL opcode. We check if the next
		 * opcode is DO_FCALL in case EXT instructions are used. */
		if (EXPECTED(opline->extended_value == 0 && (opline+1)->opcode == ZEND_DO_FCALL)) {
			ZEND_VM_NEXT_OPCODE_EX(1, 2);
		}

		if (UNEXPECTED(EG(exception))) {
			HANDLE_EXCEPTION();
		}

		/* Perform a dummy function call */
		call = zend_vm_stack_push_call_frame(
			ZEND_CALL_FUNCTION, (zend_function *) &zend_pass_function,
			opline->extended_value, NULL);
	} else {
		if (EXPECTED(constructor->type == ZEND_USER_FUNCTION) && UNEXPECTED(!RUN_TIME_CACHE(&constructor->op_array))) {
			init_func_run_time_cache(&constructor->op_array);
		}
		/* We are not handling overloaded classes right now */
		call = zend_vm_stack_push_call_frame(
			ZEND_CALL_FUNCTION | ZEND_CALL_RELEASE_THIS | ZEND_CALL_HAS_THIS,
			constructor,
			opline->extended_value,
			Z_OBJ_P(result));
		Z_ADDREF_P(result);
	}

	call->prev_execute_data = EX(call);
	EX(call) = call;
	ZEND_VM_NEXT_OPCODE();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *expr_ptr, new_expr;

	SAVE_OPLINE();
	if ((IS_VAR == IS_VAR || IS_VAR == IS_CV) &&
	    UNEXPECTED(opline->extended_value & ZEND_ARRAY_ELEMENT_REF)) {
		expr_ptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
		if (Z_ISREF_P(expr_ptr)) {
			Z_ADDREF_P(expr_ptr);
		} else {
			ZVAL_MAKE_REF_EX(expr_ptr, 2);
		}
		zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
	} else {
		expr_ptr = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
		if (IS_VAR == IS_TMP_VAR) {
			/* pass */
		} else if (IS_VAR == IS_CONST) {
			Z_TRY_ADDREF_P(expr_ptr);
		} else if (IS_VAR == IS_CV) {
			ZVAL_DEREF(expr_ptr);
			Z_TRY_ADDREF_P(expr_ptr);
		} else /* if (IS_VAR == IS_VAR) */ {
			if (UNEXPECTED(Z_ISREF_P(expr_ptr))) {
				zend_refcounted *ref = Z_COUNTED_P(expr_ptr);

				expr_ptr = Z_REFVAL_P(expr_ptr);
				if (UNEXPECTED(GC_DELREF(ref) == 0)) {
					ZVAL_COPY_VALUE(&new_expr, expr_ptr);
					expr_ptr = &new_expr;
					efree_size(ref, sizeof(zend_reference));
				} else if (Z_OPT_REFCOUNTED_P(expr_ptr)) {
					Z_ADDREF_P(expr_ptr);
				}
			}
		}
	}

	if (IS_UNUSED != IS_UNUSED) {
		zval *offset = NULL;
		zend_string *str;
		zend_ulong hval;

add_again:
		if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) {
			str = Z_STR_P(offset);
			if (IS_UNUSED != IS_CONST) {
				if (ZEND_HANDLE_NUMERIC(str, hval)) {
					goto num_index;
				}
			}
str_index:
			zend_hash_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), str, expr_ptr);
		} else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
			hval = Z_LVAL_P(offset);
num_index:
			zend_hash_index_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), hval, expr_ptr);
		} else if ((IS_UNUSED & (IS_VAR|IS_CV)) && EXPECTED(Z_TYPE_P(offset) == IS_REFERENCE)) {
			offset = Z_REFVAL_P(offset);
			goto add_again;
		} else if (UNEXPECTED(Z_TYPE_P(offset) == IS_NULL)) {
			zval tmp;
			if (IS_VAR == IS_CV || IS_VAR == IS_VAR) {
				ZVAL_COPY(&tmp, expr_ptr);
			}
			zend_error(E_DEPRECATED, "Using null as an array offset is deprecated, use an empty string instead");
			if (IS_VAR == IS_CV || IS_VAR == IS_VAR) {
				/* A userland error handler can do funky things to the expression, so reset it */
				zval_ptr_dtor(expr_ptr);
				ZVAL_COPY_VALUE(expr_ptr, &tmp);
			}
			if (UNEXPECTED(EG(exception))) {
				zval_ptr_dtor_nogc(expr_ptr);
				HANDLE_EXCEPTION();
			}
			str = ZSTR_EMPTY_ALLOC();
			goto str_index;
		} else if (Z_TYPE_P(offset) == IS_DOUBLE) {
			hval = zend_dval_to_lval_safe(Z_DVAL_P(offset));
			goto num_index;
		} else if (Z_TYPE_P(offset) == IS_FALSE) {
			hval = 0;
			goto num_index;
		} else if (Z_TYPE_P(offset) == IS_TRUE) {
			hval = 1;
			goto num_index;
		} else if (Z_TYPE_P(offset) == IS_RESOURCE) {
			zend_use_resource_as_offset(offset);
			hval = Z_RES_HANDLE_P(offset);
			goto num_index;
		} else if (IS_UNUSED == IS_CV && Z_TYPE_P(offset) == IS_UNDEF) {
			ZVAL_UNDEFINED_OP2();
			str = ZSTR_EMPTY_ALLOC();
			goto str_index;
		} else {
			zend_illegal_array_offset_access(offset);
			zval_ptr_dtor_nogc(expr_ptr);
		}


	} else {
		if (!zend_hash_next_index_insert(Z_ARRVAL_P(EX_VAR(opline->result.var)), expr_ptr)) {
			zend_cannot_add_element();
			zval_ptr_dtor_nogc(expr_ptr);
		}
	}
	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_INIT_ARRAY_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	zval *array;
	uint32_t size;
	USE_OPLINE

	SAVE_OPLINE();
	array = EX_VAR(opline->result.var);
	if (IS_VAR != IS_UNUSED) {
		size = opline->extended_value >> ZEND_ARRAY_SIZE_SHIFT;
		ZVAL_ARR(array, zend_new_array(size));
		/* Explicitly initialize array as not-packed if flag is set */
		if (opline->extended_value & ZEND_ARRAY_NOT_PACKED) {
			zend_hash_real_init_mixed(Z_ARRVAL_P(array));
		}
		ZEND_VM_TAIL_CALL(ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
	} else {
		ZVAL_ARR(array, zend_new_array(0));
		ZEND_VM_NEXT_OPCODE();
	}
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_SEPARATE_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *var_ptr;

	var_ptr = EX_VAR(opline->op1.var);
	if (UNEXPECTED(Z_ISREF_P(var_ptr))) {
		if (UNEXPECTED(Z_REFCOUNT_P(var_ptr) == 1)) {
			ZVAL_UNREF(var_ptr);
		}
	}

	ZEND_VM_NEXT_OPCODE();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_YIELD_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE

	zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C);

	SAVE_OPLINE();
	if (UNEXPECTED(generator->flags & ZEND_GENERATOR_FORCED_CLOSE)) {
		ZEND_VM_TAIL_CALL(zend_yield_in_closed_generator_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
	}

	/* Destroy the previously yielded value */
	zval_ptr_dtor(&generator->value);

	/* Destroy the previously yielded key */
	zval_ptr_dtor(&generator->key);

	/* Set the new yielded value */
	if (IS_VAR != IS_UNUSED) {
		if (UNEXPECTED(EX(func)->op_array.fn_flags & ZEND_ACC_RETURN_REFERENCE)) {
			/* Constants and temporary variables aren't yieldable by reference,
			 * but we still allow them with a notice. */
			if (IS_VAR & (IS_CONST|IS_TMP_VAR)) {
				zval *value;

				zend_error(E_NOTICE, "Only variable references should be yielded by reference");

				value = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
				ZVAL_COPY_VALUE(&generator->value, value);
				if (IS_VAR == IS_CONST) {
					if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
						Z_ADDREF(generator->value);
					}
				}
			} else {
				zval *value_ptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);

				/* If a function call result is yielded and the function did
				 * not return by reference we throw a notice. */
				do {
					if (IS_VAR == IS_VAR) {
						ZEND_ASSERT(value_ptr != &EG(uninitialized_zval));
						if (opline->extended_value == ZEND_RETURNS_FUNCTION
						 && !Z_ISREF_P(value_ptr)) {
							zend_error(E_NOTICE, "Only variable references should be yielded by reference");
							ZVAL_COPY(&generator->value, value_ptr);
							break;
						}
					}
					if (Z_ISREF_P(value_ptr)) {
						Z_ADDREF_P(value_ptr);
					} else {
						ZVAL_MAKE_REF_EX(value_ptr, 2);
					}
					ZVAL_REF(&generator->value, Z_REF_P(value_ptr));
				} while (0);

				zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
			}
		} else {
			zval *value = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);

			/* Consts, temporary variables and references need copying */
			if (IS_VAR == IS_CONST) {
				ZVAL_COPY_VALUE(&generator->value, value);
				if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
					Z_ADDREF(generator->value);
				}
			} else if (IS_VAR == IS_TMP_VAR) {
				ZVAL_COPY_VALUE(&generator->value, value);
			} else if ((IS_VAR & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) {
				ZVAL_COPY(&generator->value, Z_REFVAL_P(value));
				zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
			} else {
				ZVAL_COPY_VALUE(&generator->value, value);
				if (IS_VAR == IS_CV) {
					if (Z_OPT_REFCOUNTED_P(value)) Z_ADDREF_P(value);
				}
			}
		}
	} else {
		/* If no value was specified yield null */
		ZVAL_NULL(&generator->value);
	}

	/* Set the new yielded key */
	if (IS_UNUSED != IS_UNUSED) {
		zval *key = NULL;
		if ((IS_UNUSED & (IS_CV|IS_VAR)) && UNEXPECTED(Z_TYPE_P(key) == IS_REFERENCE)) {
			key = Z_REFVAL_P(key);
		}
		ZVAL_COPY(&generator->key, key);


		if (Z_TYPE(generator->key) == IS_LONG
		    && Z_LVAL(generator->key) > generator->largest_used_integer_key
		) {
			generator->largest_used_integer_key = Z_LVAL(generator->key);
		}
	} else {
		/* If no key was specified we use auto-increment keys */
		generator->largest_used_integer_key++;
		ZVAL_LONG(&generator->key, generator->largest_used_integer_key);
	}

	if (RETURN_VALUE_USED(opline)) {
		/* If the return value of yield is used set the send
		 * target and initialize it to NULL */
		generator->send_target = EX_VAR(opline->result.var);
		ZVAL_NULL(generator->send_target);
	} else {
		generator->send_target = NULL;
	}

	/* The GOTO VM uses a local opline variable. We need to set the opline
	 * variable in execute_data so we don't resume at an old position. */
	SAVE_OPLINE();

	ZEND_VM_RETURN();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_MAKE_REF_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1 = EX_VAR(opline->op1.var);

	if (IS_VAR == IS_CV) {
		if (UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
			ZVAL_NEW_EMPTY_REF(op1);
			Z_SET_REFCOUNT_P(op1, 2);
			ZVAL_NULL(Z_REFVAL_P(op1));
			ZVAL_REF(EX_VAR(opline->result.var), Z_REF_P(op1));
		} else {
			if (Z_ISREF_P(op1)) {
				Z_ADDREF_P(op1);
			} else {
				ZVAL_MAKE_REF_EX(op1, 2);
			}
			ZVAL_REF(EX_VAR(opline->result.var), Z_REF_P(op1));
		}
	} else if (EXPECTED(Z_TYPE_P(op1) == IS_INDIRECT)) {
		op1 = Z_INDIRECT_P(op1);
		if (EXPECTED(!Z_ISREF_P(op1))) {
			ZVAL_MAKE_REF_EX(op1, 2);
		} else {
			GC_ADDREF(Z_REF_P(op1));
		}
		ZVAL_REF(EX_VAR(opline->result.var), Z_REF_P(op1));
	} else {
		ZVAL_COPY_VALUE(EX_VAR(opline->result.var), op1);
	}
	ZEND_VM_NEXT_OPCODE();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_GET_TYPE_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1;
	zend_string *type;

	SAVE_OPLINE();
	op1 = _get_zval_ptr_var_deref(opline->op1.var EXECUTE_DATA_CC);
	type = zend_zval_get_legacy_type(op1);
	if (EXPECTED(type)) {
		ZVAL_INTERNED_STR(EX_VAR(opline->result.var), type);
	} else {
		ZVAL_STRING(EX_VAR(opline->result.var), "unknown type");
	}
	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_SEND_VAR_EX_SIMPLE_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *varptr, *arg;
	uint32_t arg_num = opline->op2.num;

	if (QUICK_ARG_SHOULD_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
		ZEND_VM_TAIL_CALL(ZEND_SEND_REF_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
	}

	varptr = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
	arg = ZEND_CALL_VAR(EX(call), opline->result.var);

	if (IS_VAR == IS_CV) {
		ZVAL_COPY(arg, varptr);
	} else /* if (IS_VAR == IS_VAR) */ {
		ZVAL_COPY_VALUE(arg, varptr);
	}

	ZEND_VM_NEXT_OPCODE();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_CASE_STRICT_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;
	bool result;

	SAVE_OPLINE();
	op1 = _get_zval_ptr_var_deref(opline->op1.var EXECUTE_DATA_CC);
	op2 = _get_zval_ptr_cv_deref_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
	result = fast_is_identical_function(op1, op2);


	ZEND_VM_SMART_BRANCH(result, 1);
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_ASSIGN_OBJ_OP_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *object;
	zval *property;
	zval *value;
	zval *zptr;
	void *_cache_slot[3] = {0};
	void **cache_slot;
	zend_property_info *prop_info;
	zend_object *zobj;
	zend_string *name, *tmp_name;

	SAVE_OPLINE();
	object = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
	property = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);

	do {
		value = get_op_data_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1);

		if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
			if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
				object = Z_REFVAL_P(object);
				goto assign_op_object;
			}
			if (IS_VAR == IS_CV
			 && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
				ZVAL_UNDEFINED_OP1();
			}
			zend_throw_non_object_error(object, property OPLINE_CC EXECUTE_DATA_CC);
			break;
		}

assign_op_object:
		/* here we are sure we are dealing with an object */
		zobj = Z_OBJ_P(object);
		if (IS_CV == IS_CONST) {
			name = Z_STR_P(property);
		} else {
			name = zval_try_get_tmp_string(property, &tmp_name);
			if (UNEXPECTED(!name)) {
				UNDEF_RESULT();
				break;
			}
		}
		cache_slot = (IS_CV == IS_CONST) ? CACHE_ADDR((opline+1)->extended_value) : _cache_slot;
		if (EXPECTED((zptr = zobj->handlers->get_property_ptr_ptr(zobj, name, BP_VAR_RW, cache_slot)) != NULL)) {
			if (UNEXPECTED(Z_ISERROR_P(zptr))) {
				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
					ZVAL_NULL(EX_VAR(opline->result.var));
				}
			} else {
				zend_reference *ref;

				do {
					if (UNEXPECTED(Z_ISREF_P(zptr))) {
						ref = Z_REF_P(zptr);
						zptr = Z_REFVAL_P(zptr);
						if (UNEXPECTED(ZEND_REF_HAS_TYPE_SOURCES(ref))) {
							zend_binary_assign_op_typed_ref(ref, value OPLINE_CC EXECUTE_DATA_CC);
							break;
						}
					}

					prop_info = (zend_property_info*)CACHED_PTR_EX(cache_slot + 2);
					if (prop_info && ZEND_TYPE_IS_SET(prop_info->type)) {
						/* special case for typed properties */
						zend_binary_assign_op_typed_prop(prop_info, zptr, value OPLINE_CC EXECUTE_DATA_CC);
					} else {
						zend_binary_op(zptr, zptr, value OPLINE_CC);
					}
				} while (0);

				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
					ZVAL_COPY(EX_VAR(opline->result.var), zptr);
				}
			}
		} else {
			zend_assign_op_overloaded_property(zobj, name, cache_slot, value OPLINE_CC EXECUTE_DATA_CC);
		}
		if (IS_CV != IS_CONST) {
			zend_tmp_string_release(tmp_name);
		}
	} while (0);

	FREE_OP((opline+1)->op1_type, (opline+1)->op1.var);


	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
	/* assign_obj has two opcodes! */
	ZEND_VM_NEXT_OPCODE_EX(1, 2);
}

/* No specialization for op_types (CONST|TMP|VAR|CV, UNUSED|CONST|TMPVAR) */
static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_ASSIGN_DIM_OP_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *var_ptr;
	zval *value, *container, *dim;
	HashTable *ht;

	SAVE_OPLINE();
	container = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);

	if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
assign_dim_op_array:
		SEPARATE_ARRAY(container);
		ht = Z_ARRVAL_P(container);
assign_dim_op_new_array:
		dim = EX_VAR(opline->op2.var);
		if (IS_CV == IS_UNUSED) {
			var_ptr = zend_hash_next_index_insert(ht, &EG(uninitialized_zval));
			if (UNEXPECTED(!var_ptr)) {
				zend_cannot_add_element();
				goto assign_dim_op_ret_null;
			}
		} else {
			if (IS_CV == IS_CONST) {
				var_ptr = zend_fetch_dimension_address_inner_RW_CONST(ht, dim EXECUTE_DATA_CC);
			} else {
				var_ptr = zend_fetch_dimension_address_inner_RW(ht, dim EXECUTE_DATA_CC);
			}
			if (UNEXPECTED(!var_ptr)) {
				goto assign_dim_op_ret_null;
			}
		}

		value = get_op_data_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1);

		do {
			if (IS_CV != IS_UNUSED && UNEXPECTED(Z_ISREF_P(var_ptr))) {
				zend_reference *ref = Z_REF_P(var_ptr);
				var_ptr = Z_REFVAL_P(var_ptr);
				if (UNEXPECTED(ZEND_REF_HAS_TYPE_SOURCES(ref))) {
					zend_binary_assign_op_typed_ref(ref, value OPLINE_CC EXECUTE_DATA_CC);
					break;
				}
			}
			zend_binary_op(var_ptr, var_ptr, value OPLINE_CC);
		} while (0);

		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
			ZVAL_COPY(EX_VAR(opline->result.var), var_ptr);
		}
		FREE_OP((opline+1)->op1_type, (opline+1)->op1.var);
	} else {
		if (EXPECTED(Z_ISREF_P(container))) {
			container = Z_REFVAL_P(container);
			if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
				goto assign_dim_op_array;
			}
		}

		if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
			zend_object *obj = Z_OBJ_P(container);

			dim = EX_VAR(opline->op2.var);
			if (IS_CV == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
				dim++;
			}
			zend_binary_assign_op_obj_dim(obj, dim OPLINE_CC EXECUTE_DATA_CC);
		} else if (EXPECTED(Z_TYPE_P(container) <= IS_FALSE)) {
			uint8_t old_type;

			if (IS_VAR == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(container) == IS_UNDEF)) {
				ZVAL_UNDEFINED_OP1();
			}
			ht = zend_new_array(8);
			old_type = Z_TYPE_P(container);
			ZVAL_ARR(container, ht);
			if (UNEXPECTED(old_type == IS_FALSE)) {
				GC_ADDREF(ht);
				zend_false_to_array_deprecated();
				if (UNEXPECTED(GC_DELREF(ht) == 0)) {
					zend_array_destroy(ht);
					goto assign_dim_op_ret_null;
				}
			}
			goto assign_dim_op_new_array;
		} else {
			dim = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
			zend_binary_assign_op_dim_slow(container, dim OPLINE_CC EXECUTE_DATA_CC);
assign_dim_op_ret_null:
			FREE_OP((opline+1)->op1_type, (opline+1)->op1.var);
			if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
				ZVAL_NULL(EX_VAR(opline->result.var));
			}
		}
	}


	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
	ZEND_VM_NEXT_OPCODE_EX(1, 2);
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_ASSIGN_OP_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *var_ptr;
	zval *value;

	SAVE_OPLINE();
	value = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
	var_ptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);

	do {
		if (UNEXPECTED(Z_TYPE_P(var_ptr) == IS_REFERENCE)) {
			zend_reference *ref = Z_REF_P(var_ptr);
			var_ptr = Z_REFVAL_P(var_ptr);
			if (UNEXPECTED(ZEND_REF_HAS_TYPE_SOURCES(ref))) {
				zend_binary_assign_op_typed_ref(ref, value OPLINE_CC EXECUTE_DATA_CC);
				break;
			}
		}
		zend_binary_op(var_ptr, var_ptr, value OPLINE_CC);
	} while (0);

	if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
		ZVAL_COPY(EX_VAR(opline->result.var), var_ptr);
	}


	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_PRE_INC_OBJ_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *object;
	zval *property;
	zval *zptr;
	void *_cache_slot[3] = {0};
	void **cache_slot;
	zend_property_info *prop_info;
	zend_object *zobj;
	zend_string *name, *tmp_name;

	SAVE_OPLINE();
	object = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
	property = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);

	do {
		if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
			if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
				object = Z_REFVAL_P(object);
				goto pre_incdec_object;
			}
			if (IS_VAR == IS_CV
			 && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
				ZVAL_UNDEFINED_OP1();
			}
			zend_throw_non_object_error(object, property OPLINE_CC EXECUTE_DATA_CC);
			break;
		}

pre_incdec_object:
		/* here we are sure we are dealing with an object */
		zobj = Z_OBJ_P(object);
		if (IS_CV == IS_CONST) {
			name = Z_STR_P(property);
		} else {
			name = zval_try_get_tmp_string(property, &tmp_name);
			if (UNEXPECTED(!name)) {
				UNDEF_RESULT();
				break;
			}
		}
		cache_slot = (IS_CV == IS_CONST) ? CACHE_ADDR(opline->extended_value) : _cache_slot;
		if (EXPECTED((zptr = zobj->handlers->get_property_ptr_ptr(zobj, name, BP_VAR_RW, cache_slot)) != NULL)) {
			if (UNEXPECTED(Z_ISERROR_P(zptr))) {
				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
					ZVAL_NULL(EX_VAR(opline->result.var));
				}
			} else {
				prop_info = (zend_property_info *) CACHED_PTR_EX(cache_slot + 2);
				zend_pre_incdec_property_zval(zptr,
					prop_info && ZEND_TYPE_IS_SET(prop_info->type) ? prop_info : NULL OPLINE_CC EXECUTE_DATA_CC);
			}
		} else {
			zend_pre_incdec_overloaded_property(zobj, name, cache_slot OPLINE_CC EXECUTE_DATA_CC);
		}
		if (IS_CV != IS_CONST) {
			zend_tmp_string_release(tmp_name);
		}
	} while (0);


	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_POST_INC_OBJ_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *object;
	zval *property;
	zval *zptr;
	void *_cache_slot[3] = {0};
	void **cache_slot;
	zend_property_info *prop_info;
	zend_object *zobj;
	zend_string *name, *tmp_name;

	SAVE_OPLINE();
	object = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
	property = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);

	do {
		if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
			if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
				object = Z_REFVAL_P(object);
				goto post_incdec_object;
			}
			if (IS_VAR == IS_CV
			 && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
				ZVAL_UNDEFINED_OP1();
			}
			zend_throw_non_object_error(object, property OPLINE_CC EXECUTE_DATA_CC);
			break;
		}

post_incdec_object:
		/* here we are sure we are dealing with an object */
		zobj = Z_OBJ_P(object);
		if (IS_CV == IS_CONST) {
			name = Z_STR_P(property);
		} else {
			name = zval_try_get_tmp_string(property, &tmp_name);
			if (UNEXPECTED(!name)) {
				ZVAL_UNDEF(EX_VAR(opline->result.var));
				break;
			}
		}
		cache_slot = (IS_CV == IS_CONST) ? CACHE_ADDR(opline->extended_value) : _cache_slot;
		if (EXPECTED((zptr = zobj->handlers->get_property_ptr_ptr(zobj, name, BP_VAR_RW, cache_slot)) != NULL)) {
			if (UNEXPECTED(Z_ISERROR_P(zptr))) {
				ZVAL_NULL(EX_VAR(opline->result.var));
			} else {
				prop_info = (zend_property_info*)CACHED_PTR_EX(cache_slot + 2);
				zend_post_incdec_property_zval(zptr,
					prop_info && ZEND_TYPE_IS_SET(prop_info->type) ? prop_info : NULL OPLINE_CC EXECUTE_DATA_CC);
			}
		} else {
			zend_post_incdec_overloaded_property(zobj, name, cache_slot OPLINE_CC EXECUTE_DATA_CC);
		}
		if (IS_CV != IS_CONST) {
			zend_tmp_string_release(tmp_name);
		}
	} while (0);


	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_FETCH_DIM_W_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *container;

	SAVE_OPLINE();
	container = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
	zend_fetch_dimension_address_W(container, EX_VAR(opline->op2.var), IS_CV OPLINE_CC EXECUTE_DATA_CC);


	if (IS_VAR == IS_VAR) {
		FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
	}
	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_FETCH_DIM_RW_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *container;

	SAVE_OPLINE();
	container = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
	zend_fetch_dimension_address_RW(container, EX_VAR(opline->op2.var), IS_CV OPLINE_CC EXECUTE_DATA_CC);


	if (IS_VAR == IS_VAR) {
		FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
	}
	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
#if 0
	USE_OPLINE
#endif

	if (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) {
		if ((IS_VAR & (IS_CONST|IS_TMP_VAR))) {
			ZEND_VM_TAIL_CALL(zend_use_tmp_in_write_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
		}
		ZEND_VM_TAIL_CALL(ZEND_FETCH_DIM_W_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
	} else {
		if (IS_CV == IS_UNUSED) {
			ZEND_VM_TAIL_CALL(zend_use_undef_in_read_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
		}
		ZEND_VM_TAIL_CALL(ZEND_FETCH_DIM_R_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
	}
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_FETCH_DIM_UNSET_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *container;

	SAVE_OPLINE();
	container = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
	zend_fetch_dimension_address_UNSET(container, EX_VAR(opline->op2.var), IS_CV OPLINE_CC EXECUTE_DATA_CC);


	if (IS_VAR == IS_VAR) {
		FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
	}
	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_FETCH_OBJ_W_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *property, *container, *result;

	SAVE_OPLINE();

	container = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
	property = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
	result = EX_VAR(opline->result.var);
	zend_fetch_property_address(
		result, container, IS_VAR, property, IS_CV,
		((IS_CV == IS_CONST) ? CACHE_ADDR(opline->extended_value & ~ZEND_FETCH_OBJ_FLAGS) : NULL),
		BP_VAR_W, opline->extended_value, NULL OPLINE_CC EXECUTE_DATA_CC);


	if (IS_VAR == IS_VAR) {
		FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
	}
	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_FETCH_OBJ_RW_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *property, *container, *result;

	SAVE_OPLINE();
	container = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
	property = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
	result = EX_VAR(opline->result.var);
	zend_fetch_property_address(result, container, IS_VAR, property, IS_CV, ((IS_CV == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL), BP_VAR_RW, 0, NULL OPLINE_CC EXECUTE_DATA_CC);


	if (IS_VAR == IS_VAR) {
		FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
	}
	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_FETCH_OBJ_FUNC_ARG_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
#if 0
	USE_OPLINE
#endif

	if (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) {
		/* Behave like FETCH_OBJ_W */
		if ((IS_VAR & (IS_CONST|IS_TMP_VAR))) {
			ZEND_VM_TAIL_CALL(zend_use_tmp_in_write_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
		}
		ZEND_VM_TAIL_CALL(ZEND_FETCH_OBJ_W_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
	} else {
		ZEND_VM_TAIL_CALL(ZEND_FETCH_OBJ_R_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
	}
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_FETCH_OBJ_UNSET_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *container, *property, *result;

	SAVE_OPLINE();
	container = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
	property = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
	result = EX_VAR(opline->result.var);
	zend_fetch_property_address(result, container, IS_VAR, property, IS_CV, ((IS_CV == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL), BP_VAR_UNSET, 0, NULL OPLINE_CC EXECUTE_DATA_CC);


	if (IS_VAR == IS_VAR) {
		FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
	}
	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_FETCH_LIST_W_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *container, *dim;

	SAVE_OPLINE();
	container = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
	dim = EX_VAR(opline->op2.var);

	if (IS_VAR == IS_VAR
		&& Z_TYPE_P(EX_VAR(opline->op1.var)) != IS_INDIRECT
		&& UNEXPECTED(!Z_ISREF_P(container))
	) {
		zend_error(E_NOTICE, "Attempting to set reference to non referenceable value");
		zend_fetch_dimension_address_LIST_r(container, dim, IS_CV OPLINE_CC EXECUTE_DATA_CC);
	} else {
		zend_fetch_dimension_address_W(container, dim, IS_CV OPLINE_CC EXECUTE_DATA_CC);
	}


	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_ASSIGN_OBJ_SPEC_VAR_CV_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *object, *value, tmp;
	zend_object *zobj;
	zend_string *name, *tmp_name;
	zend_refcounted *garbage = NULL;

	SAVE_OPLINE();
	object = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
	value = RT_CONSTANT((opline+1), (opline+1)->op1);

	if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
		if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
			object = Z_REFVAL_P(object);
			goto assign_object;
		}
		zend_throw_non_object_error(object, _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC) OPLINE_CC EXECUTE_DATA_CC);
		value = &EG(uninitialized_zval);
		goto free_and_exit_assign_obj;
	}

assign_object:
	zobj = Z_OBJ_P(object);
	if (IS_CV == IS_CONST) {
		if (EXPECTED(zobj->ce == CACHED_PTR(opline->extended_value))) {
			void **cache_slot = CACHE_ADDR(opline->extended_value);
			uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
			zval *property_val;
			zend_property_info *prop_info;

			if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
				prop_info = (zend_property_info*) CACHED_PTR_EX(cache_slot + 2);

assign_obj_simple:
				property_val = OBJ_PROP(zobj, prop_offset);
				if (Z_TYPE_P(property_val) != IS_UNDEF) {
					if (prop_info != NULL) {
						value = zend_assign_to_typed_prop(prop_info, property_val, value, &garbage EXECUTE_DATA_CC);
						goto free_and_exit_assign_obj;
					} else {
fast_assign_obj:
						value = zend_assign_to_variable_ex(property_val, value, IS_CONST, EX_USES_STRICT_TYPES(), &garbage);
						if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
							ZVAL_COPY(EX_VAR(opline->result.var), value);
						}
						goto exit_assign_obj;
					}
				}
			} else if (EXPECTED(IS_DYNAMIC_PROPERTY_OFFSET(prop_offset))) {
				name = Z_STR_P(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC));
				if (UNEXPECTED(zend_lazy_object_must_init(zobj))) {
					zobj = zend_lazy_object_init(zobj);
					if (!zobj) {
						value = &EG(uninitialized_zval);
						goto free_and_exit_assign_obj;
					}
				}
				if (!zobj->ce->__set && (zobj->ce->ce_flags & ZEND_ACC_ALLOW_DYNAMIC_PROPERTIES)) {
					rebuild_object_properties_internal(zobj);
				}
				if (EXPECTED(zobj->properties != NULL)) {
					if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
						if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
							GC_DELREF(zobj->properties);
						}
						zobj->properties = zend_array_dup(zobj->properties);
					}
					property_val = zend_hash_find_known_hash(zobj->properties, name);
					if (property_val) {
						goto fast_assign_obj;
					}
				}

				if (!zobj->ce->__set && (zobj->ce->ce_flags & ZEND_ACC_ALLOW_DYNAMIC_PROPERTIES)) {
					if (IS_CONST == IS_CONST) {
						if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
							Z_ADDREF_P(value);
						}
					} else if (IS_CONST != IS_TMP_VAR) {
						if (Z_ISREF_P(value)) {
							if (IS_CONST == IS_VAR) {
								zend_reference *ref = Z_REF_P(value);
								if (GC_DELREF(ref) == 0) {
									ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
									efree_size(ref, sizeof(zend_reference));
									value = &tmp;
								} else {
									value = Z_REFVAL_P(value);
									Z_TRY_ADDREF_P(value);
								}
							} else {
								value = Z_REFVAL_P(value);
								Z_TRY_ADDREF_P(value);
							}
						} else if (IS_CONST == IS_CV) {
							Z_TRY_ADDREF_P(value);
						}
					}
					zend_hash_add_new(zobj->properties, name, value);
					if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
						ZVAL_COPY(EX_VAR(opline->result.var), value);
					}
					goto exit_assign_obj;
				}
			} else {
				ZEND_ASSERT(IS_HOOKED_PROPERTY_OFFSET(prop_offset));
				if (ZEND_IS_PROPERTY_HOOK_SIMPLE_WRITE(prop_offset)) {
					prop_info = CACHED_PTR_EX(cache_slot + 2);
					prop_offset = prop_info->offset;
					if (!ZEND_TYPE_IS_SET(prop_info->type)) {
						prop_info = NULL;
					}
					goto assign_obj_simple;
				}
				/* Fall through to write_property for hooks. */
			}
		}
		name = Z_STR_P(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC));
	} else {
		name = zval_try_get_tmp_string(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC), &tmp_name);
		if (UNEXPECTED(!name)) {


			UNDEF_RESULT();
			goto exit_assign_obj;
		}
	}

	if (IS_CONST == IS_CV || IS_CONST == IS_VAR) {
		ZVAL_DEREF(value);
	}

	value = zobj->handlers->write_property(zobj, name, value, (IS_CV == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);

	if (IS_CV != IS_CONST) {
		zend_tmp_string_release(tmp_name);
	}

free_and_exit_assign_obj:
	if (UNEXPECTED(RETURN_VALUE_USED(opline)) && value) {
		ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
	}


exit_assign_obj:
	if (garbage) {
		GC_DTOR_NO_REF(garbage);
	}


	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
	/* assign_obj has two opcodes! */
	ZEND_VM_NEXT_OPCODE_EX(1, 2);
}

/* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CONST|VAR) */
static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_ASSIGN_OBJ_SPEC_VAR_CV_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *object, *value, tmp;
	zend_object *zobj;
	zend_string *name, *tmp_name;
	zend_refcounted *garbage = NULL;

	SAVE_OPLINE();
	object = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
	value = _get_zval_ptr_tmp((opline+1)->op1.var EXECUTE_DATA_CC);

	if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
		if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
			object = Z_REFVAL_P(object);
			goto assign_object;
		}
		zend_throw_non_object_error(object, _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC) OPLINE_CC EXECUTE_DATA_CC);
		value = &EG(uninitialized_zval);
		goto free_and_exit_assign_obj;
	}

assign_object:
	zobj = Z_OBJ_P(object);
	if (IS_CV == IS_CONST) {
		if (EXPECTED(zobj->ce == CACHED_PTR(opline->extended_value))) {
			void **cache_slot = CACHE_ADDR(opline->extended_value);
			uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
			zval *property_val;
			zend_property_info *prop_info;

			if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
				prop_info = (zend_property_info*) CACHED_PTR_EX(cache_slot + 2);

assign_obj_simple:
				property_val = OBJ_PROP(zobj, prop_offset);
				if (Z_TYPE_P(property_val) != IS_UNDEF) {
					if (prop_info != NULL) {
						value = zend_assign_to_typed_prop(prop_info, property_val, value, &garbage EXECUTE_DATA_CC);
						goto free_and_exit_assign_obj;
					} else {
fast_assign_obj:
						value = zend_assign_to_variable_ex(property_val, value, IS_TMP_VAR, EX_USES_STRICT_TYPES(), &garbage);
						if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
							ZVAL_COPY(EX_VAR(opline->result.var), value);
						}
						goto exit_assign_obj;
					}
				}
			} else if (EXPECTED(IS_DYNAMIC_PROPERTY_OFFSET(prop_offset))) {
				name = Z_STR_P(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC));
				if (UNEXPECTED(zend_lazy_object_must_init(zobj))) {
					zobj = zend_lazy_object_init(zobj);
					if (!zobj) {
						value = &EG(uninitialized_zval);
						goto free_and_exit_assign_obj;
					}
				}
				if (!zobj->ce->__set && (zobj->ce->ce_flags & ZEND_ACC_ALLOW_DYNAMIC_PROPERTIES)) {
					rebuild_object_properties_internal(zobj);
				}
				if (EXPECTED(zobj->properties != NULL)) {
					if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
						if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
							GC_DELREF(zobj->properties);
						}
						zobj->properties = zend_array_dup(zobj->properties);
					}
					property_val = zend_hash_find_known_hash(zobj->properties, name);
					if (property_val) {
						goto fast_assign_obj;
					}
				}

				if (!zobj->ce->__set && (zobj->ce->ce_flags & ZEND_ACC_ALLOW_DYNAMIC_PROPERTIES)) {
					if (IS_TMP_VAR == IS_CONST) {
						if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
							Z_ADDREF_P(value);
						}
					} else if (IS_TMP_VAR != IS_TMP_VAR) {
						if (Z_ISREF_P(value)) {
							if (IS_TMP_VAR == IS_VAR) {
								zend_reference *ref = Z_REF_P(value);
								if (GC_DELREF(ref) == 0) {
									ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
									efree_size(ref, sizeof(zend_reference));
									value = &tmp;
								} else {
									value = Z_REFVAL_P(value);
									Z_TRY_ADDREF_P(value);
								}
							} else {
								value = Z_REFVAL_P(value);
								Z_TRY_ADDREF_P(value);
							}
						} else if (IS_TMP_VAR == IS_CV) {
							Z_TRY_ADDREF_P(value);
						}
					}
					zend_hash_add_new(zobj->properties, name, value);
					if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
						ZVAL_COPY(EX_VAR(opline->result.var), value);
					}
					goto exit_assign_obj;
				}
			} else {
				ZEND_ASSERT(IS_HOOKED_PROPERTY_OFFSET(prop_offset));
				if (ZEND_IS_PROPERTY_HOOK_SIMPLE_WRITE(prop_offset)) {
					prop_info = CACHED_PTR_EX(cache_slot + 2);
					prop_offset = prop_info->offset;
					if (!ZEND_TYPE_IS_SET(prop_info->type)) {
						prop_info = NULL;
					}
					goto assign_obj_simple;
				}
				/* Fall through to write_property for hooks. */
			}
		}
		name = Z_STR_P(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC));
	} else {
		name = zval_try_get_tmp_string(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC), &tmp_name);
		if (UNEXPECTED(!name)) {
			zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
			UNDEF_RESULT();
			goto exit_assign_obj;
		}
	}

	if (IS_TMP_VAR == IS_CV || IS_TMP_VAR == IS_VAR) {
		ZVAL_DEREF(value);
	}

	value = zobj->handlers->write_property(zobj, name, value, (IS_CV == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);

	if (IS_CV != IS_CONST) {
		zend_tmp_string_release(tmp_name);
	}

free_and_exit_assign_obj:
	if (UNEXPECTED(RETURN_VALUE_USED(opline)) && value) {
		ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
	}
	zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
exit_assign_obj:
	if (garbage) {
		GC_DTOR_NO_REF(garbage);
	}


	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
	/* assign_obj has two opcodes! */
	ZEND_VM_NEXT_OPCODE_EX(1, 2);
}

/* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CONST|VAR) */
static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_ASSIGN_OBJ_SPEC_VAR_CV_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *object, *value, tmp;
	zend_object *zobj;
	zend_string *name, *tmp_name;
	zend_refcounted *garbage = NULL;

	SAVE_OPLINE();
	object = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
	value = _get_zval_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);

	if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
		if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
			object = Z_REFVAL_P(object);
			goto assign_object;
		}
		zend_throw_non_object_error(object, _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC) OPLINE_CC EXECUTE_DATA_CC);
		value = &EG(uninitialized_zval);
		goto free_and_exit_assign_obj;
	}

assign_object:
	zobj = Z_OBJ_P(object);
	if (IS_CV == IS_CONST) {
		if (EXPECTED(zobj->ce == CACHED_PTR(opline->extended_value))) {
			void **cache_slot = CACHE_ADDR(opline->extended_value);
			uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
			zval *property_val;
			zend_property_info *prop_info;

			if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
				prop_info = (zend_property_info*) CACHED_PTR_EX(cache_slot + 2);

assign_obj_simple:
				property_val = OBJ_PROP(zobj, prop_offset);
				if (Z_TYPE_P(property_val) != IS_UNDEF) {
					if (prop_info != NULL) {
						value = zend_assign_to_typed_prop(prop_info, property_val, value, &garbage EXECUTE_DATA_CC);
						goto free_and_exit_assign_obj;
					} else {
fast_assign_obj:
						value = zend_assign_to_variable_ex(property_val, value, IS_VAR, EX_USES_STRICT_TYPES(), &garbage);
						if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
							ZVAL_COPY(EX_VAR(opline->result.var), value);
						}
						goto exit_assign_obj;
					}
				}
			} else if (EXPECTED(IS_DYNAMIC_PROPERTY_OFFSET(prop_offset))) {
				name = Z_STR_P(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC));
				if (UNEXPECTED(zend_lazy_object_must_init(zobj))) {
					zobj = zend_lazy_object_init(zobj);
					if (!zobj) {
						value = &EG(uninitialized_zval);
						goto free_and_exit_assign_obj;
					}
				}
				if (!zobj->ce->__set && (zobj->ce->ce_flags & ZEND_ACC_ALLOW_DYNAMIC_PROPERTIES)) {
					rebuild_object_properties_internal(zobj);
				}
				if (EXPECTED(zobj->properties != NULL)) {
					if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
						if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
							GC_DELREF(zobj->properties);
						}
						zobj->properties = zend_array_dup(zobj->properties);
					}
					property_val = zend_hash_find_known_hash(zobj->properties, name);
					if (property_val) {
						goto fast_assign_obj;
					}
				}

				if (!zobj->ce->__set && (zobj->ce->ce_flags & ZEND_ACC_ALLOW_DYNAMIC_PROPERTIES)) {
					if (IS_VAR == IS_CONST) {
						if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
							Z_ADDREF_P(value);
						}
					} else if (IS_VAR != IS_TMP_VAR) {
						if (Z_ISREF_P(value)) {
							if (IS_VAR == IS_VAR) {
								zend_reference *ref = Z_REF_P(value);
								if (GC_DELREF(ref) == 0) {
									ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
									efree_size(ref, sizeof(zend_reference));
									value = &tmp;
								} else {
									value = Z_REFVAL_P(value);
									Z_TRY_ADDREF_P(value);
								}
							} else {
								value = Z_REFVAL_P(value);
								Z_TRY_ADDREF_P(value);
							}
						} else if (IS_VAR == IS_CV) {
							Z_TRY_ADDREF_P(value);
						}
					}
					zend_hash_add_new(zobj->properties, name, value);
					if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
						ZVAL_COPY(EX_VAR(opline->result.var), value);
					}
					goto exit_assign_obj;
				}
			} else {
				ZEND_ASSERT(IS_HOOKED_PROPERTY_OFFSET(prop_offset));
				if (ZEND_IS_PROPERTY_HOOK_SIMPLE_WRITE(prop_offset)) {
					prop_info = CACHED_PTR_EX(cache_slot + 2);
					prop_offset = prop_info->offset;
					if (!ZEND_TYPE_IS_SET(prop_info->type)) {
						prop_info = NULL;
					}
					goto assign_obj_simple;
				}
				/* Fall through to write_property for hooks. */
			}
		}
		name = Z_STR_P(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC));
	} else {
		name = zval_try_get_tmp_string(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC), &tmp_name);
		if (UNEXPECTED(!name)) {
			zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
			UNDEF_RESULT();
			goto exit_assign_obj;
		}
	}

	if (IS_VAR == IS_CV || IS_VAR == IS_VAR) {
		ZVAL_DEREF(value);
	}

	value = zobj->handlers->write_property(zobj, name, value, (IS_CV == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);

	if (IS_CV != IS_CONST) {
		zend_tmp_string_release(tmp_name);
	}

free_and_exit_assign_obj:
	if (UNEXPECTED(RETURN_VALUE_USED(opline)) && value) {
		ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
	}
	zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
exit_assign_obj:
	if (garbage) {
		GC_DTOR_NO_REF(garbage);
	}


	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
	/* assign_obj has two opcodes! */
	ZEND_VM_NEXT_OPCODE_EX(1, 2);
}

/* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CONST|VAR) */
static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_ASSIGN_OBJ_SPEC_VAR_CV_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *object, *value, tmp;
	zend_object *zobj;
	zend_string *name, *tmp_name;
	zend_refcounted *garbage = NULL;

	SAVE_OPLINE();
	object = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
	value = _get_zval_ptr_cv_BP_VAR_R((opline+1)->op1.var EXECUTE_DATA_CC);

	if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
		if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
			object = Z_REFVAL_P(object);
			goto assign_object;
		}
		zend_throw_non_object_error(object, _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC) OPLINE_CC EXECUTE_DATA_CC);
		value = &EG(uninitialized_zval);
		goto free_and_exit_assign_obj;
	}

assign_object:
	zobj = Z_OBJ_P(object);
	if (IS_CV == IS_CONST) {
		if (EXPECTED(zobj->ce == CACHED_PTR(opline->extended_value))) {
			void **cache_slot = CACHE_ADDR(opline->extended_value);
			uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
			zval *property_val;
			zend_property_info *prop_info;

			if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
				prop_info = (zend_property_info*) CACHED_PTR_EX(cache_slot + 2);

assign_obj_simple:
				property_val = OBJ_PROP(zobj, prop_offset);
				if (Z_TYPE_P(property_val) != IS_UNDEF) {
					if (prop_info != NULL) {
						value = zend_assign_to_typed_prop(prop_info, property_val, value, &garbage EXECUTE_DATA_CC);
						goto free_and_exit_assign_obj;
					} else {
fast_assign_obj:
						value = zend_assign_to_variable_ex(property_val, value, IS_CV, EX_USES_STRICT_TYPES(), &garbage);
						if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
							ZVAL_COPY(EX_VAR(opline->result.var), value);
						}
						goto exit_assign_obj;
					}
				}
			} else if (EXPECTED(IS_DYNAMIC_PROPERTY_OFFSET(prop_offset))) {
				name = Z_STR_P(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC));
				if (UNEXPECTED(zend_lazy_object_must_init(zobj))) {
					zobj = zend_lazy_object_init(zobj);
					if (!zobj) {
						value = &EG(uninitialized_zval);
						goto free_and_exit_assign_obj;
					}
				}
				if (!zobj->ce->__set && (zobj->ce->ce_flags & ZEND_ACC_ALLOW_DYNAMIC_PROPERTIES)) {
					rebuild_object_properties_internal(zobj);
				}
				if (EXPECTED(zobj->properties != NULL)) {
					if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
						if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
							GC_DELREF(zobj->properties);
						}
						zobj->properties = zend_array_dup(zobj->properties);
					}
					property_val = zend_hash_find_known_hash(zobj->properties, name);
					if (property_val) {
						goto fast_assign_obj;
					}
				}

				if (!zobj->ce->__set && (zobj->ce->ce_flags & ZEND_ACC_ALLOW_DYNAMIC_PROPERTIES)) {
					if (IS_CV == IS_CONST) {
						if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
							Z_ADDREF_P(value);
						}
					} else if (IS_CV != IS_TMP_VAR) {
						if (Z_ISREF_P(value)) {
							if (IS_CV == IS_VAR) {
								zend_reference *ref = Z_REF_P(value);
								if (GC_DELREF(ref) == 0) {
									ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
									efree_size(ref, sizeof(zend_reference));
									value = &tmp;
								} else {
									value = Z_REFVAL_P(value);
									Z_TRY_ADDREF_P(value);
								}
							} else {
								value = Z_REFVAL_P(value);
								Z_TRY_ADDREF_P(value);
							}
						} else if (IS_CV == IS_CV) {
							Z_TRY_ADDREF_P(value);
						}
					}
					zend_hash_add_new(zobj->properties, name, value);
					if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
						ZVAL_COPY(EX_VAR(opline->result.var), value);
					}
					goto exit_assign_obj;
				}
			} else {
				ZEND_ASSERT(IS_HOOKED_PROPERTY_OFFSET(prop_offset));
				if (ZEND_IS_PROPERTY_HOOK_SIMPLE_WRITE(prop_offset)) {
					prop_info = CACHED_PTR_EX(cache_slot + 2);
					prop_offset = prop_info->offset;
					if (!ZEND_TYPE_IS_SET(prop_info->type)) {
						prop_info = NULL;
					}
					goto assign_obj_simple;
				}
				/* Fall through to write_property for hooks. */
			}
		}
		name = Z_STR_P(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC));
	} else {
		name = zval_try_get_tmp_string(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC), &tmp_name);
		if (UNEXPECTED(!name)) {


			UNDEF_RESULT();
			goto exit_assign_obj;
		}
	}

	if (IS_CV == IS_CV || IS_CV == IS_VAR) {
		ZVAL_DEREF(value);
	}

	value = zobj->handlers->write_property(zobj, name, value, (IS_CV == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);

	if (IS_CV != IS_CONST) {
		zend_tmp_string_release(tmp_name);
	}

free_and_exit_assign_obj:
	if (UNEXPECTED(RETURN_VALUE_USED(opline)) && value) {
		ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
	}


exit_assign_obj:
	if (garbage) {
		GC_DTOR_NO_REF(garbage);
	}


	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
	/* assign_obj has two opcodes! */
	ZEND_VM_NEXT_OPCODE_EX(1, 2);
}

/* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CONST|VAR) */
static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_ASSIGN_DIM_SPEC_VAR_CV_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *object_ptr, *orig_object_ptr;
	zval *value;
	zval *variable_ptr;
	zval *dim;
	zend_refcounted *garbage = NULL;

	SAVE_OPLINE();
	orig_object_ptr = object_ptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);

	if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
try_assign_dim_array:
		SEPARATE_ARRAY(object_ptr);
		if (IS_CV == IS_UNUSED) {
			value = RT_CONSTANT((opline+1), (opline+1)->op1);
			if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
				HashTable *ht = Z_ARRVAL_P(object_ptr);
				if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE)) {
					GC_ADDREF(ht);
				}
				value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
				if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE) && !GC_DELREF(ht)) {
					zend_array_destroy(ht);
					goto assign_dim_error;
				}
			}
			if (IS_CONST == IS_CV || IS_CONST == IS_VAR) {
				ZVAL_DEREF(value);
			}
			value = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), value);
			if (UNEXPECTED(value == NULL)) {
				zend_cannot_add_element();
				goto assign_dim_error;
			} else if (IS_CONST == IS_CV) {
				if (Z_REFCOUNTED_P(value)) {
					Z_ADDREF_P(value);
				}
			} else if (IS_CONST == IS_VAR) {
				zval *free_op_data = EX_VAR((opline+1)->op1.var);
				if (Z_ISREF_P(free_op_data)) {
					if (Z_REFCOUNTED_P(value)) {
						Z_ADDREF_P(value);
					}
					zval_ptr_dtor_nogc(free_op_data);
				}
			} else if (IS_CONST == IS_CONST) {
				if (UNEXPECTED(Z_REFCOUNTED_P(value))) {
					Z_ADDREF_P(value);
				}
			}
		} else {
			dim = EX_VAR(opline->op2.var);
			if (IS_CV == IS_CONST) {
				variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
			} else {
				variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
			}
			if (UNEXPECTED(variable_ptr == NULL)) {
				goto assign_dim_error;
			}
			value = RT_CONSTANT((opline+1), (opline+1)->op1);
			value = zend_assign_to_variable_ex(variable_ptr, value, IS_CONST, EX_USES_STRICT_TYPES(), &garbage);
		}
		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
			ZVAL_COPY(EX_VAR(opline->result.var), value);
		}
		if (garbage) {
			GC_DTOR_NO_REF(garbage);
		}
	} else {
		if (EXPECTED(Z_ISREF_P(object_ptr))) {
			object_ptr = Z_REFVAL_P(object_ptr);
			if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
				goto try_assign_dim_array;
			}
		}
		if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) {
			zend_object *obj = Z_OBJ_P(object_ptr);

			GC_ADDREF(obj);
			dim = EX_VAR(opline->op2.var);
			if (IS_CV == IS_CV && UNEXPECTED(Z_ISUNDEF_P(dim))) {
				dim = ZVAL_UNDEFINED_OP2();
			} else if (IS_CV == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
				dim++;
			}

			value = RT_CONSTANT((opline+1), (opline+1)->op1);
			if (IS_CONST == IS_CV && UNEXPECTED(Z_ISUNDEF_P(value))) {
				value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
			} else if (IS_CONST & (IS_CV|IS_VAR)) {
				ZVAL_DEREF(value);
			}

			zend_assign_to_object_dim(obj, dim, value OPLINE_CC EXECUTE_DATA_CC);


			if (UNEXPECTED(GC_DELREF(obj) == 0)) {
				zend_objects_store_del(obj);
			}
		} else if (EXPECTED(Z_TYPE_P(object_ptr) == IS_STRING)) {
			if (IS_CV == IS_UNUSED) {
				zend_use_new_element_for_string();


				UNDEF_RESULT();
			} else {
				dim = EX_VAR(opline->op2.var);
				value = RT_CONSTANT((opline+1), (opline+1)->op1);
				zend_assign_to_string_offset(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC);


			}
		} else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
			if (Z_ISREF_P(orig_object_ptr)
			 && ZEND_REF_HAS_TYPE_SOURCES(Z_REF_P(orig_object_ptr))
			 && !zend_verify_ref_array_assignable(Z_REF_P(orig_object_ptr))) {
				dim = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);


				UNDEF_RESULT();
			} else {
				HashTable *ht = zend_new_array(8);
				uint8_t old_type = Z_TYPE_P(object_ptr);

				ZVAL_ARR(object_ptr, ht);
				if (UNEXPECTED(old_type == IS_FALSE)) {
					GC_ADDREF(ht);
					zend_false_to_array_deprecated();
					if (UNEXPECTED(GC_DELREF(ht) == 0)) {
						zend_array_destroy(ht);
						goto assign_dim_error;
					}
				}
				goto try_assign_dim_array;
			}
		} else {
			zend_use_scalar_as_array();
			dim = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
assign_dim_error:


			if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
				ZVAL_NULL(EX_VAR(opline->result.var));
			}
		}
	}
	if (IS_CV != IS_UNUSED) {


	}
	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
	/* assign_dim has two opcodes! */
	ZEND_VM_NEXT_OPCODE_EX(1, 2);
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_ASSIGN_DIM_SPEC_VAR_CV_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *object_ptr, *orig_object_ptr;
	zval *value;
	zval *variable_ptr;
	zval *dim;
	zend_refcounted *garbage = NULL;

	SAVE_OPLINE();
	orig_object_ptr = object_ptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);

	if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
try_assign_dim_array:
		SEPARATE_ARRAY(object_ptr);
		if (IS_CV == IS_UNUSED) {
			value = _get_zval_ptr_tmp((opline+1)->op1.var EXECUTE_DATA_CC);
			if (IS_TMP_VAR == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
				HashTable *ht = Z_ARRVAL_P(object_ptr);
				if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE)) {
					GC_ADDREF(ht);
				}
				value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
				if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE) && !GC_DELREF(ht)) {
					zend_array_destroy(ht);
					goto assign_dim_error;
				}
			}
			if (IS_TMP_VAR == IS_CV || IS_TMP_VAR == IS_VAR) {
				ZVAL_DEREF(value);
			}
			value = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), value);
			if (UNEXPECTED(value == NULL)) {
				zend_cannot_add_element();
				goto assign_dim_error;
			} else if (IS_TMP_VAR == IS_CV) {
				if (Z_REFCOUNTED_P(value)) {
					Z_ADDREF_P(value);
				}
			} else if (IS_TMP_VAR == IS_VAR) {
				zval *free_op_data = EX_VAR((opline+1)->op1.var);
				if (Z_ISREF_P(free_op_data)) {
					if (Z_REFCOUNTED_P(value)) {
						Z_ADDREF_P(value);
					}
					zval_ptr_dtor_nogc(free_op_data);
				}
			} else if (IS_TMP_VAR == IS_CONST) {
				if (UNEXPECTED(Z_REFCOUNTED_P(value))) {
					Z_ADDREF_P(value);
				}
			}
		} else {
			dim = EX_VAR(opline->op2.var);
			if (IS_CV == IS_CONST) {
				variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
			} else {
				variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
			}
			if (UNEXPECTED(variable_ptr == NULL)) {
				goto assign_dim_error;
			}
			value = _get_zval_ptr_tmp((opline+1)->op1.var EXECUTE_DATA_CC);
			value = zend_assign_to_variable_ex(variable_ptr, value, IS_TMP_VAR, EX_USES_STRICT_TYPES(), &garbage);
		}
		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
			ZVAL_COPY(EX_VAR(opline->result.var), value);
		}
		if (garbage) {
			GC_DTOR_NO_REF(garbage);
		}
	} else {
		if (EXPECTED(Z_ISREF_P(object_ptr))) {
			object_ptr = Z_REFVAL_P(object_ptr);
			if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
				goto try_assign_dim_array;
			}
		}
		if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) {
			zend_object *obj = Z_OBJ_P(object_ptr);

			GC_ADDREF(obj);
			dim = EX_VAR(opline->op2.var);
			if (IS_CV == IS_CV && UNEXPECTED(Z_ISUNDEF_P(dim))) {
				dim = ZVAL_UNDEFINED_OP2();
			} else if (IS_CV == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
				dim++;
			}

			value = _get_zval_ptr_tmp((opline+1)->op1.var EXECUTE_DATA_CC);
			if (IS_TMP_VAR == IS_CV && UNEXPECTED(Z_ISUNDEF_P(value))) {
				value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
			} else if (IS_TMP_VAR & (IS_CV|IS_VAR)) {
				ZVAL_DEREF(value);
			}

			zend_assign_to_object_dim(obj, dim, value OPLINE_CC EXECUTE_DATA_CC);

			zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
			if (UNEXPECTED(GC_DELREF(obj) == 0)) {
				zend_objects_store_del(obj);
			}
		} else if (EXPECTED(Z_TYPE_P(object_ptr) == IS_STRING)) {
			if (IS_CV == IS_UNUSED) {
				zend_use_new_element_for_string();
				zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
				UNDEF_RESULT();
			} else {
				dim = EX_VAR(opline->op2.var);
				value = _get_zval_ptr_tmp((opline+1)->op1.var EXECUTE_DATA_CC);
				zend_assign_to_string_offset(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC);
				zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
			}
		} else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
			if (Z_ISREF_P(orig_object_ptr)
			 && ZEND_REF_HAS_TYPE_SOURCES(Z_REF_P(orig_object_ptr))
			 && !zend_verify_ref_array_assignable(Z_REF_P(orig_object_ptr))) {
				dim = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
				zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
				UNDEF_RESULT();
			} else {
				HashTable *ht = zend_new_array(8);
				uint8_t old_type = Z_TYPE_P(object_ptr);

				ZVAL_ARR(object_ptr, ht);
				if (UNEXPECTED(old_type == IS_FALSE)) {
					GC_ADDREF(ht);
					zend_false_to_array_deprecated();
					if (UNEXPECTED(GC_DELREF(ht) == 0)) {
						zend_array_destroy(ht);
						goto assign_dim_error;
					}
				}
				goto try_assign_dim_array;
			}
		} else {
			zend_use_scalar_as_array();
			dim = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
assign_dim_error:
			zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
			if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
				ZVAL_NULL(EX_VAR(opline->result.var));
			}
		}
	}
	if (IS_CV != IS_UNUSED) {


	}
	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
	/* assign_dim has two opcodes! */
	ZEND_VM_NEXT_OPCODE_EX(1, 2);
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_ASSIGN_DIM_SPEC_VAR_CV_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *object_ptr, *orig_object_ptr;
	zval *value;
	zval *variable_ptr;
	zval *dim;
	zend_refcounted *garbage = NULL;

	SAVE_OPLINE();
	orig_object_ptr = object_ptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);

	if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
try_assign_dim_array:
		SEPARATE_ARRAY(object_ptr);
		if (IS_CV == IS_UNUSED) {
			value = _get_zval_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);
			if (IS_VAR == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
				HashTable *ht = Z_ARRVAL_P(object_ptr);
				if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE)) {
					GC_ADDREF(ht);
				}
				value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
				if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE) && !GC_DELREF(ht)) {
					zend_array_destroy(ht);
					goto assign_dim_error;
				}
			}
			if (IS_VAR == IS_CV || IS_VAR == IS_VAR) {
				ZVAL_DEREF(value);
			}
			value = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), value);
			if (UNEXPECTED(value == NULL)) {
				zend_cannot_add_element();
				goto assign_dim_error;
			} else if (IS_VAR == IS_CV) {
				if (Z_REFCOUNTED_P(value)) {
					Z_ADDREF_P(value);
				}
			} else if (IS_VAR == IS_VAR) {
				zval *free_op_data = EX_VAR((opline+1)->op1.var);
				if (Z_ISREF_P(free_op_data)) {
					if (Z_REFCOUNTED_P(value)) {
						Z_ADDREF_P(value);
					}
					zval_ptr_dtor_nogc(free_op_data);
				}
			} else if (IS_VAR == IS_CONST) {
				if (UNEXPECTED(Z_REFCOUNTED_P(value))) {
					Z_ADDREF_P(value);
				}
			}
		} else {
			dim = EX_VAR(opline->op2.var);
			if (IS_CV == IS_CONST) {
				variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
			} else {
				variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
			}
			if (UNEXPECTED(variable_ptr == NULL)) {
				goto assign_dim_error;
			}
			value = _get_zval_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);
			value = zend_assign_to_variable_ex(variable_ptr, value, IS_VAR, EX_USES_STRICT_TYPES(), &garbage);
		}
		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
			ZVAL_COPY(EX_VAR(opline->result.var), value);
		}
		if (garbage) {
			GC_DTOR_NO_REF(garbage);
		}
	} else {
		if (EXPECTED(Z_ISREF_P(object_ptr))) {
			object_ptr = Z_REFVAL_P(object_ptr);
			if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
				goto try_assign_dim_array;
			}
		}
		if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) {
			zend_object *obj = Z_OBJ_P(object_ptr);

			GC_ADDREF(obj);
			dim = EX_VAR(opline->op2.var);
			if (IS_CV == IS_CV && UNEXPECTED(Z_ISUNDEF_P(dim))) {
				dim = ZVAL_UNDEFINED_OP2();
			} else if (IS_CV == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
				dim++;
			}

			value = _get_zval_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);
			if (IS_VAR == IS_CV && UNEXPECTED(Z_ISUNDEF_P(value))) {
				value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
			} else if (IS_VAR & (IS_CV|IS_VAR)) {
				ZVAL_DEREF(value);
			}

			zend_assign_to_object_dim(obj, dim, value OPLINE_CC EXECUTE_DATA_CC);

			zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
			if (UNEXPECTED(GC_DELREF(obj) == 0)) {
				zend_objects_store_del(obj);
			}
		} else if (EXPECTED(Z_TYPE_P(object_ptr) == IS_STRING)) {
			if (IS_CV == IS_UNUSED) {
				zend_use_new_element_for_string();
				zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
				UNDEF_RESULT();
			} else {
				dim = EX_VAR(opline->op2.var);
				value = _get_zval_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);
				zend_assign_to_string_offset(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC);
				zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
			}
		} else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
			if (Z_ISREF_P(orig_object_ptr)
			 && ZEND_REF_HAS_TYPE_SOURCES(Z_REF_P(orig_object_ptr))
			 && !zend_verify_ref_array_assignable(Z_REF_P(orig_object_ptr))) {
				dim = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
				zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
				UNDEF_RESULT();
			} else {
				HashTable *ht = zend_new_array(8);
				uint8_t old_type = Z_TYPE_P(object_ptr);

				ZVAL_ARR(object_ptr, ht);
				if (UNEXPECTED(old_type == IS_FALSE)) {
					GC_ADDREF(ht);
					zend_false_to_array_deprecated();
					if (UNEXPECTED(GC_DELREF(ht) == 0)) {
						zend_array_destroy(ht);
						goto assign_dim_error;
					}
				}
				goto try_assign_dim_array;
			}
		} else {
			zend_use_scalar_as_array();
			dim = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
assign_dim_error:
			zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
			if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
				ZVAL_NULL(EX_VAR(opline->result.var));
			}
		}
	}
	if (IS_CV != IS_UNUSED) {


	}
	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
	/* assign_dim has two opcodes! */
	ZEND_VM_NEXT_OPCODE_EX(1, 2);
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_ASSIGN_DIM_SPEC_VAR_CV_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *object_ptr, *orig_object_ptr;
	zval *value;
	zval *variable_ptr;
	zval *dim;
	zend_refcounted *garbage = NULL;

	SAVE_OPLINE();
	orig_object_ptr = object_ptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);

	if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
try_assign_dim_array:
		SEPARATE_ARRAY(object_ptr);
		if (IS_CV == IS_UNUSED) {
			value = EX_VAR((opline+1)->op1.var);
			if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
				HashTable *ht = Z_ARRVAL_P(object_ptr);
				if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE)) {
					GC_ADDREF(ht);
				}
				value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
				if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE) && !GC_DELREF(ht)) {
					zend_array_destroy(ht);
					goto assign_dim_error;
				}
			}
			if (IS_CV == IS_CV || IS_CV == IS_VAR) {
				ZVAL_DEREF(value);
			}
			value = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), value);
			if (UNEXPECTED(value == NULL)) {
				zend_cannot_add_element();
				goto assign_dim_error;
			} else if (IS_CV == IS_CV) {
				if (Z_REFCOUNTED_P(value)) {
					Z_ADDREF_P(value);
				}
			} else if (IS_CV == IS_VAR) {
				zval *free_op_data = EX_VAR((opline+1)->op1.var);
				if (Z_ISREF_P(free_op_data)) {
					if (Z_REFCOUNTED_P(value)) {
						Z_ADDREF_P(value);
					}
					zval_ptr_dtor_nogc(free_op_data);
				}
			} else if (IS_CV == IS_CONST) {
				if (UNEXPECTED(Z_REFCOUNTED_P(value))) {
					Z_ADDREF_P(value);
				}
			}
		} else {
			dim = EX_VAR(opline->op2.var);
			if (IS_CV == IS_CONST) {
				variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
			} else {
				variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
			}
			if (UNEXPECTED(variable_ptr == NULL)) {
				goto assign_dim_error;
			}
			value = _get_zval_ptr_cv_BP_VAR_R((opline+1)->op1.var EXECUTE_DATA_CC);
			value = zend_assign_to_variable_ex(variable_ptr, value, IS_CV, EX_USES_STRICT_TYPES(), &garbage);
		}
		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
			ZVAL_COPY(EX_VAR(opline->result.var), value);
		}
		if (garbage) {
			GC_DTOR_NO_REF(garbage);
		}
	} else {
		if (EXPECTED(Z_ISREF_P(object_ptr))) {
			object_ptr = Z_REFVAL_P(object_ptr);
			if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
				goto try_assign_dim_array;
			}
		}
		if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) {
			zend_object *obj = Z_OBJ_P(object_ptr);

			GC_ADDREF(obj);
			dim = EX_VAR(opline->op2.var);
			if (IS_CV == IS_CV && UNEXPECTED(Z_ISUNDEF_P(dim))) {
				dim = ZVAL_UNDEFINED_OP2();
			} else if (IS_CV == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
				dim++;
			}

			value = EX_VAR((opline+1)->op1.var);
			if (IS_CV == IS_CV && UNEXPECTED(Z_ISUNDEF_P(value))) {
				value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
			} else if (IS_CV & (IS_CV|IS_VAR)) {
				ZVAL_DEREF(value);
			}

			zend_assign_to_object_dim(obj, dim, value OPLINE_CC EXECUTE_DATA_CC);


			if (UNEXPECTED(GC_DELREF(obj) == 0)) {
				zend_objects_store_del(obj);
			}
		} else if (EXPECTED(Z_TYPE_P(object_ptr) == IS_STRING)) {
			if (IS_CV == IS_UNUSED) {
				zend_use_new_element_for_string();


				UNDEF_RESULT();
			} else {
				dim = EX_VAR(opline->op2.var);
				value = EX_VAR((opline+1)->op1.var);
				zend_assign_to_string_offset(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC);


			}
		} else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
			if (Z_ISREF_P(orig_object_ptr)
			 && ZEND_REF_HAS_TYPE_SOURCES(Z_REF_P(orig_object_ptr))
			 && !zend_verify_ref_array_assignable(Z_REF_P(orig_object_ptr))) {
				dim = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);


				UNDEF_RESULT();
			} else {
				HashTable *ht = zend_new_array(8);
				uint8_t old_type = Z_TYPE_P(object_ptr);

				ZVAL_ARR(object_ptr, ht);
				if (UNEXPECTED(old_type == IS_FALSE)) {
					GC_ADDREF(ht);
					zend_false_to_array_deprecated();
					if (UNEXPECTED(GC_DELREF(ht) == 0)) {
						zend_array_destroy(ht);
						goto assign_dim_error;
					}
				}
				goto try_assign_dim_array;
			}
		} else {
			zend_use_scalar_as_array();
			dim = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
assign_dim_error:


			if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
				ZVAL_NULL(EX_VAR(opline->result.var));
			}
		}
	}
	if (IS_CV != IS_UNUSED) {


	}
	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
	/* assign_dim has two opcodes! */
	ZEND_VM_NEXT_OPCODE_EX(1, 2);
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_ASSIGN_SPEC_VAR_CV_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *value;
	zval *variable_ptr;

	SAVE_OPLINE();
	value = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
	variable_ptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);

	if (0 || UNEXPECTED(0)) {
		zend_refcounted *garbage = NULL;

		value = zend_assign_to_variable_ex(variable_ptr, value, IS_CV, EX_USES_STRICT_TYPES(), &garbage);
		if (UNEXPECTED(0)) {
			ZVAL_COPY(EX_VAR(opline->result.var), value);
		}
		if (garbage) {
			GC_DTOR_NO_REF(garbage);
		}
	} else {
		value = zend_assign_to_variable(variable_ptr, value, IS_CV, EX_USES_STRICT_TYPES());
	}
	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
	/* zend_assign_to_variable() always takes care of op2, never free it! */

	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_ASSIGN_SPEC_VAR_CV_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *value;
	zval *variable_ptr;

	SAVE_OPLINE();
	value = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
	variable_ptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);

	if (0 || UNEXPECTED(1)) {
		zend_refcounted *garbage = NULL;

		value = zend_assign_to_variable_ex(variable_ptr, value, IS_CV, EX_USES_STRICT_TYPES(), &garbage);
		if (UNEXPECTED(1)) {
			ZVAL_COPY(EX_VAR(opline->result.var), value);
		}
		if (garbage) {
			GC_DTOR_NO_REF(garbage);
		}
	} else {
		value = zend_assign_to_variable(variable_ptr, value, IS_CV, EX_USES_STRICT_TYPES());
	}
	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
	/* zend_assign_to_variable() always takes care of op2, never free it! */

	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_ASSIGN_REF_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *variable_ptr;
	zval *value_ptr;
	zend_refcounted *garbage = NULL;

	SAVE_OPLINE();
	value_ptr = _get_zval_ptr_cv_BP_VAR_W(opline->op2.var EXECUTE_DATA_CC);
	variable_ptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);

	if (IS_VAR == IS_VAR &&
	           UNEXPECTED(Z_TYPE_P(EX_VAR(opline->op1.var)) != IS_INDIRECT)) {

		zend_throw_error(NULL, "Cannot assign by reference to an array dimension of an object");
		variable_ptr = &EG(uninitialized_zval);
	} else if (IS_CV == IS_VAR &&
	           opline->extended_value == ZEND_RETURNS_FUNCTION &&
			   UNEXPECTED(!Z_ISREF_P(value_ptr))) {

		variable_ptr = zend_wrong_assign_to_variable_reference(
			variable_ptr, value_ptr, &garbage OPLINE_CC EXECUTE_DATA_CC);
	} else {
		zend_assign_to_variable_reference(variable_ptr, value_ptr, &garbage);
	}

	if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
		ZVAL_COPY(EX_VAR(opline->result.var), variable_ptr);
	}

	if (garbage) {
		GC_DTOR(garbage);
	}


	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_ASSIGN_OBJ_REF_SPEC_VAR_CV_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *property, *container, *value_ptr;

	SAVE_OPLINE();

	container = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
	property = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);

	value_ptr = _get_zval_ptr_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);

	if (1) {
		if (IS_VAR == IS_UNUSED) {
			if (IS_CV == IS_CONST) {
				zend_assign_to_property_reference_this_const(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
			} else {
				zend_assign_to_property_reference_this_var(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
			}
		} else {
			if (IS_CV == IS_CONST) {
				zend_assign_to_property_reference_var_const(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
			} else {
				zend_assign_to_property_reference_var_var(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
			}
		}
	} else {
		zend_assign_to_property_reference(container, IS_VAR, property, IS_CV, value_ptr OPLINE_CC EXECUTE_DATA_CC);
	}

	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));


	zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
	ZEND_VM_NEXT_OPCODE_EX(1, 2);
}

/* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CONST|VAR) */
static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_ASSIGN_OBJ_REF_SPEC_VAR_CV_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *property, *container, *value_ptr;

	SAVE_OPLINE();

	container = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
	property = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);

	value_ptr = _get_zval_ptr_cv_BP_VAR_W((opline+1)->op1.var EXECUTE_DATA_CC);

	if (1) {
		if (IS_VAR == IS_UNUSED) {
			if (IS_CV == IS_CONST) {
				zend_assign_to_property_reference_this_const(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
			} else {
				zend_assign_to_property_reference_this_var(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
			}
		} else {
			if (IS_CV == IS_CONST) {
				zend_assign_to_property_reference_var_const(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
			} else {
				zend_assign_to_property_reference_var_var(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
			}
		}
	} else {
		zend_assign_to_property_reference(container, IS_VAR, property, IS_CV, value_ptr OPLINE_CC EXECUTE_DATA_CC);
	}

	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));




	ZEND_VM_NEXT_OPCODE_EX(1, 2);
}

/* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CONST|VAR) */
static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_INIT_STATIC_METHOD_CALL_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *function_name;
	zend_class_entry *ce;
	uint32_t call_info;
	zend_function *fbc;
	zend_execute_data *call;

	SAVE_OPLINE();

	if (IS_VAR == IS_CONST) {
		/* no function found. try a static method in class */
		ce = CACHED_PTR(opline->result.num);
		if (UNEXPECTED(ce == NULL)) {
			ce = zend_fetch_class_by_name(Z_STR_P(RT_CONSTANT(opline, opline->op1)), Z_STR_P(RT_CONSTANT(opline, opline->op1) + 1), ZEND_FETCH_CLASS_DEFAULT | ZEND_FETCH_CLASS_EXCEPTION);
			if (UNEXPECTED(ce == NULL)) {


				HANDLE_EXCEPTION();
			}
			if (IS_CV != IS_CONST) {
				CACHE_PTR(opline->result.num, ce);
			}
		}
	} else if (IS_VAR == IS_UNUSED) {
		ce = zend_fetch_class(NULL, opline->op1.num);
		if (UNEXPECTED(ce == NULL)) {


			HANDLE_EXCEPTION();
		}
	} else {
		ce = Z_CE_P(EX_VAR(opline->op1.var));
	}

	if (IS_VAR == IS_CONST &&
	    IS_CV == IS_CONST &&
	    EXPECTED((fbc = CACHED_PTR(opline->result.num + sizeof(void*))) != NULL)) {
		/* nothing to do */
	} else if (IS_VAR != IS_CONST &&
	           IS_CV == IS_CONST &&
	           EXPECTED(CACHED_PTR(opline->result.num) == ce)) {
		fbc = CACHED_PTR(opline->result.num + sizeof(void*));
	} else if (IS_CV != IS_UNUSED) {
		function_name = EX_VAR(opline->op2.var);
		if (IS_CV != IS_CONST) {
			if (UNEXPECTED(Z_TYPE_P(function_name) != IS_STRING)) {
				do {
					if (IS_CV & (IS_VAR|IS_CV) && Z_ISREF_P(function_name)) {
						function_name = Z_REFVAL_P(function_name);
						if (EXPECTED(Z_TYPE_P(function_name) == IS_STRING)) {
							break;
						}
					} else if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) {
						ZVAL_UNDEFINED_OP2();
						if (UNEXPECTED(EG(exception) != NULL)) {
							HANDLE_EXCEPTION();
						}
					}
					zend_throw_error(NULL, "Method name must be a string");


					HANDLE_EXCEPTION();
				} while (0);
			}
		}

		if (ce->get_static_method) {
			fbc = ce->get_static_method(ce, Z_STR_P(function_name));
		} else {
			fbc = zend_std_get_static_method(ce, Z_STR_P(function_name), ((IS_CV == IS_CONST) ? (RT_CONSTANT(opline, opline->op2) + 1) : NULL));
		}
		if (UNEXPECTED(fbc == NULL)) {
			if (EXPECTED(!EG(exception))) {
				zend_undefined_method(ce, Z_STR_P(function_name));
			}


			HANDLE_EXCEPTION();
		}
		if (IS_CV == IS_CONST &&
		    EXPECTED(!(fbc->common.fn_flags & (ZEND_ACC_CALL_VIA_TRAMPOLINE|ZEND_ACC_NEVER_CACHE))) &&
			EXPECTED(!(fbc->common.scope->ce_flags & ZEND_ACC_TRAIT))) {
			CACHE_POLYMORPHIC_PTR(opline->result.num, ce, fbc);
		}
		if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!RUN_TIME_CACHE(&fbc->op_array))) {
			init_func_run_time_cache(&fbc->op_array);
		}
		if (IS_CV != IS_CONST) {


		}
	} else {
		if (UNEXPECTED(ce->constructor == NULL)) {
			zend_throw_error(NULL, "Cannot call constructor");
			HANDLE_EXCEPTION();
		}
		if (Z_TYPE(EX(This)) == IS_OBJECT && Z_OBJ(EX(This))->ce != ce->constructor->common.scope && (ce->constructor->common.fn_flags & ZEND_ACC_PRIVATE)) {
			zend_throw_error(NULL, "Cannot call private %s::__construct()", ZSTR_VAL(ce->name));
			HANDLE_EXCEPTION();
		}
		fbc = ce->constructor;
		if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!RUN_TIME_CACHE(&fbc->op_array))) {
			init_func_run_time_cache(&fbc->op_array);
		}
	}

	if (!(fbc->common.fn_flags & ZEND_ACC_STATIC)) {
		if (Z_TYPE(EX(This)) == IS_OBJECT && instanceof_function(Z_OBJCE(EX(This)), ce)) {
			ce = (zend_class_entry*)Z_OBJ(EX(This));
			call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_HAS_THIS;
		} else {
			zend_non_static_method_call(fbc);
			HANDLE_EXCEPTION();
		}
	} else {
		/* previous opcode is ZEND_FETCH_CLASS */
		if (IS_VAR == IS_UNUSED
		 && ((opline->op1.num & ZEND_FETCH_CLASS_MASK) == ZEND_FETCH_CLASS_PARENT ||
		     (opline->op1.num & ZEND_FETCH_CLASS_MASK) == ZEND_FETCH_CLASS_SELF)) {
			if (Z_TYPE(EX(This)) == IS_OBJECT) {
				ce = Z_OBJCE(EX(This));
			} else {
				ce = Z_CE(EX(This));
			}
		}
		call_info = ZEND_CALL_NESTED_FUNCTION;
	}

	call = zend_vm_stack_push_call_frame(call_info,
		fbc, opline->extended_value, ce);
	call->prev_execute_data = EX(call);
	EX(call) = call;

	ZEND_VM_NEXT_OPCODE();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *expr_ptr, new_expr;

	SAVE_OPLINE();
	if ((IS_VAR == IS_VAR || IS_VAR == IS_CV) &&
	    UNEXPECTED(opline->extended_value & ZEND_ARRAY_ELEMENT_REF)) {
		expr_ptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
		if (Z_ISREF_P(expr_ptr)) {
			Z_ADDREF_P(expr_ptr);
		} else {
			ZVAL_MAKE_REF_EX(expr_ptr, 2);
		}
		zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
	} else {
		expr_ptr = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
		if (IS_VAR == IS_TMP_VAR) {
			/* pass */
		} else if (IS_VAR == IS_CONST) {
			Z_TRY_ADDREF_P(expr_ptr);
		} else if (IS_VAR == IS_CV) {
			ZVAL_DEREF(expr_ptr);
			Z_TRY_ADDREF_P(expr_ptr);
		} else /* if (IS_VAR == IS_VAR) */ {
			if (UNEXPECTED(Z_ISREF_P(expr_ptr))) {
				zend_refcounted *ref = Z_COUNTED_P(expr_ptr);

				expr_ptr = Z_REFVAL_P(expr_ptr);
				if (UNEXPECTED(GC_DELREF(ref) == 0)) {
					ZVAL_COPY_VALUE(&new_expr, expr_ptr);
					expr_ptr = &new_expr;
					efree_size(ref, sizeof(zend_reference));
				} else if (Z_OPT_REFCOUNTED_P(expr_ptr)) {
					Z_ADDREF_P(expr_ptr);
				}
			}
		}
	}

	if (IS_CV != IS_UNUSED) {
		zval *offset = EX_VAR(opline->op2.var);
		zend_string *str;
		zend_ulong hval;

add_again:
		if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) {
			str = Z_STR_P(offset);
			if (IS_CV != IS_CONST) {
				if (ZEND_HANDLE_NUMERIC(str, hval)) {
					goto num_index;
				}
			}
str_index:
			zend_hash_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), str, expr_ptr);
		} else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
			hval = Z_LVAL_P(offset);
num_index:
			zend_hash_index_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), hval, expr_ptr);
		} else if ((IS_CV & (IS_VAR|IS_CV)) && EXPECTED(Z_TYPE_P(offset) == IS_REFERENCE)) {
			offset = Z_REFVAL_P(offset);
			goto add_again;
		} else if (UNEXPECTED(Z_TYPE_P(offset) == IS_NULL)) {
			zval tmp;
			if (IS_VAR == IS_CV || IS_VAR == IS_VAR) {
				ZVAL_COPY(&tmp, expr_ptr);
			}
			zend_error(E_DEPRECATED, "Using null as an array offset is deprecated, use an empty string instead");
			if (IS_VAR == IS_CV || IS_VAR == IS_VAR) {
				/* A userland error handler can do funky things to the expression, so reset it */
				zval_ptr_dtor(expr_ptr);
				ZVAL_COPY_VALUE(expr_ptr, &tmp);
			}
			if (UNEXPECTED(EG(exception))) {
				zval_ptr_dtor_nogc(expr_ptr);
				HANDLE_EXCEPTION();
			}
			str = ZSTR_EMPTY_ALLOC();
			goto str_index;
		} else if (Z_TYPE_P(offset) == IS_DOUBLE) {
			hval = zend_dval_to_lval_safe(Z_DVAL_P(offset));
			goto num_index;
		} else if (Z_TYPE_P(offset) == IS_FALSE) {
			hval = 0;
			goto num_index;
		} else if (Z_TYPE_P(offset) == IS_TRUE) {
			hval = 1;
			goto num_index;
		} else if (Z_TYPE_P(offset) == IS_RESOURCE) {
			zend_use_resource_as_offset(offset);
			hval = Z_RES_HANDLE_P(offset);
			goto num_index;
		} else if (IS_CV == IS_CV && Z_TYPE_P(offset) == IS_UNDEF) {
			ZVAL_UNDEFINED_OP2();
			str = ZSTR_EMPTY_ALLOC();
			goto str_index;
		} else {
			zend_illegal_array_offset_access(offset);
			zval_ptr_dtor_nogc(expr_ptr);
		}


	} else {
		if (!zend_hash_next_index_insert(Z_ARRVAL_P(EX_VAR(opline->result.var)), expr_ptr)) {
			zend_cannot_add_element();
			zval_ptr_dtor_nogc(expr_ptr);
		}
	}
	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_INIT_ARRAY_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	zval *array;
	uint32_t size;
	USE_OPLINE

	SAVE_OPLINE();
	array = EX_VAR(opline->result.var);
	if (IS_VAR != IS_UNUSED) {
		size = opline->extended_value >> ZEND_ARRAY_SIZE_SHIFT;
		ZVAL_ARR(array, zend_new_array(size));
		/* Explicitly initialize array as not-packed if flag is set */
		if (opline->extended_value & ZEND_ARRAY_NOT_PACKED) {
			zend_hash_real_init_mixed(Z_ARRVAL_P(array));
		}
		ZEND_VM_TAIL_CALL(ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
	} else {
		ZVAL_ARR(array, zend_new_array(0));
		ZEND_VM_NEXT_OPCODE();
	}
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_UNSET_DIM_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *container;
	zval *offset;
	zend_ulong hval;
	zend_string *key;

	SAVE_OPLINE();
	container = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
	offset = EX_VAR(opline->op2.var);

	do {
		if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
			HashTable *ht;

unset_dim_array:
			SEPARATE_ARRAY(container);
			ht = Z_ARRVAL_P(container);
offset_again:
			if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) {
				key = Z_STR_P(offset);
				if (IS_CV != IS_CONST) {
					if (ZEND_HANDLE_NUMERIC(key, hval)) {
						goto num_index_dim;
					}
				}
str_index_dim:
				ZEND_ASSERT(ht != &EG(symbol_table));
				zend_hash_del(ht, key);
			} else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
				hval = Z_LVAL_P(offset);
num_index_dim:
				zend_hash_index_del(ht, hval);
			} else if ((IS_CV & (IS_VAR|IS_CV)) && EXPECTED(Z_TYPE_P(offset) == IS_REFERENCE)) {
				offset = Z_REFVAL_P(offset);
				goto offset_again;
			} else if (Z_TYPE_P(offset) == IS_DOUBLE) {
				/* The array may be destroyed while throwing a warning in case the float is not representable as an int.
				 * Temporarily increase the refcount to detect this situation. */
				GC_TRY_ADDREF(ht);
				hval = zend_dval_to_lval_safe(Z_DVAL_P(offset));
				if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE) && !GC_DELREF(ht)) {
					zend_array_destroy(ht);
					break;
				}
				if (EG(exception)) {
					break;
				}
				goto num_index_dim;
			} else if (Z_TYPE_P(offset) == IS_NULL) {
				key = ZSTR_EMPTY_ALLOC();
				goto str_index_dim;
			} else if (Z_TYPE_P(offset) == IS_FALSE) {
				hval = 0;
				goto num_index_dim;
			} else if (Z_TYPE_P(offset) == IS_TRUE) {
				hval = 1;
				goto num_index_dim;
			} else if (Z_TYPE_P(offset) == IS_RESOURCE) {
				zend_use_resource_as_offset(offset);
				hval = Z_RES_HANDLE_P(offset);
				goto num_index_dim;
			} else if (IS_CV == IS_CV && Z_TYPE_P(offset) == IS_UNDEF) {
				ZVAL_UNDEFINED_OP2();
				key = ZSTR_EMPTY_ALLOC();
				goto str_index_dim;
			} else {
				zend_illegal_array_offset_unset(offset);
			}
			break;
		} else if (Z_ISREF_P(container)) {
			container = Z_REFVAL_P(container);
			if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
				goto unset_dim_array;
			}
		}
		if (IS_VAR == IS_CV && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
			container = ZVAL_UNDEFINED_OP1();
		}
		if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(offset) == IS_UNDEF)) {
			offset = ZVAL_UNDEFINED_OP2();
		}
		if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
			if (IS_CV == IS_CONST && Z_EXTRA_P(offset) == ZEND_EXTRA_VALUE) {
				offset++;
			}
			Z_OBJ_HT_P(container)->unset_dimension(Z_OBJ_P(container), offset);
		} else if (UNEXPECTED(Z_TYPE_P(container) == IS_STRING)) {
			zend_throw_error(NULL, "Cannot unset string offsets");
		} else if (UNEXPECTED(Z_TYPE_P(container) > IS_FALSE)) {
			zend_throw_error(NULL, "Cannot unset offset in a non-array variable");
		} else if (UNEXPECTED(Z_TYPE_P(container) == IS_FALSE)) {
			zend_false_to_array_deprecated();
		}
	} while (0);


	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_UNSET_OBJ_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *container;
	zval *offset;
	zend_string *name, *tmp_name;

	SAVE_OPLINE();
	container = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
	offset = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);

	do {
		if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT)) {
			if (Z_ISREF_P(container)) {
				container = Z_REFVAL_P(container);
				if (Z_TYPE_P(container) != IS_OBJECT) {
					if (IS_VAR == IS_CV
					 && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
						ZVAL_UNDEFINED_OP1();
					}
					break;
				}
			} else {
				break;
			}
		}
		if (IS_CV == IS_CONST) {
			name = Z_STR_P(offset);
		} else {
			name = zval_try_get_tmp_string(offset, &tmp_name);
			if (UNEXPECTED(!name)) {
				break;
			}
		}
		Z_OBJ_HT_P(container)->unset_property(Z_OBJ_P(container), name, ((IS_CV == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL));
		if (IS_CV != IS_CONST) {
			zend_tmp_string_release(tmp_name);
		}
	} while (0);


	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_YIELD_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE

	zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C);

	SAVE_OPLINE();
	if (UNEXPECTED(generator->flags & ZEND_GENERATOR_FORCED_CLOSE)) {
		ZEND_VM_TAIL_CALL(zend_yield_in_closed_generator_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
	}

	/* Destroy the previously yielded value */
	zval_ptr_dtor(&generator->value);

	/* Destroy the previously yielded key */
	zval_ptr_dtor(&generator->key);

	/* Set the new yielded value */
	if (IS_VAR != IS_UNUSED) {
		if (UNEXPECTED(EX(func)->op_array.fn_flags & ZEND_ACC_RETURN_REFERENCE)) {
			/* Constants and temporary variables aren't yieldable by reference,
			 * but we still allow them with a notice. */
			if (IS_VAR & (IS_CONST|IS_TMP_VAR)) {
				zval *value;

				zend_error(E_NOTICE, "Only variable references should be yielded by reference");

				value = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
				ZVAL_COPY_VALUE(&generator->value, value);
				if (IS_VAR == IS_CONST) {
					if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
						Z_ADDREF(generator->value);
					}
				}
			} else {
				zval *value_ptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);

				/* If a function call result is yielded and the function did
				 * not return by reference we throw a notice. */
				do {
					if (IS_VAR == IS_VAR) {
						ZEND_ASSERT(value_ptr != &EG(uninitialized_zval));
						if (opline->extended_value == ZEND_RETURNS_FUNCTION
						 && !Z_ISREF_P(value_ptr)) {
							zend_error(E_NOTICE, "Only variable references should be yielded by reference");
							ZVAL_COPY(&generator->value, value_ptr);
							break;
						}
					}
					if (Z_ISREF_P(value_ptr)) {
						Z_ADDREF_P(value_ptr);
					} else {
						ZVAL_MAKE_REF_EX(value_ptr, 2);
					}
					ZVAL_REF(&generator->value, Z_REF_P(value_ptr));
				} while (0);

				zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
			}
		} else {
			zval *value = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);

			/* Consts, temporary variables and references need copying */
			if (IS_VAR == IS_CONST) {
				ZVAL_COPY_VALUE(&generator->value, value);
				if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
					Z_ADDREF(generator->value);
				}
			} else if (IS_VAR == IS_TMP_VAR) {
				ZVAL_COPY_VALUE(&generator->value, value);
			} else if ((IS_VAR & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) {
				ZVAL_COPY(&generator->value, Z_REFVAL_P(value));
				zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
			} else {
				ZVAL_COPY_VALUE(&generator->value, value);
				if (IS_VAR == IS_CV) {
					if (Z_OPT_REFCOUNTED_P(value)) Z_ADDREF_P(value);
				}
			}
		}
	} else {
		/* If no value was specified yield null */
		ZVAL_NULL(&generator->value);
	}

	/* Set the new yielded key */
	if (IS_CV != IS_UNUSED) {
		zval *key = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
		if ((IS_CV & (IS_CV|IS_VAR)) && UNEXPECTED(Z_TYPE_P(key) == IS_REFERENCE)) {
			key = Z_REFVAL_P(key);
		}
		ZVAL_COPY(&generator->key, key);


		if (Z_TYPE(generator->key) == IS_LONG
		    && Z_LVAL(generator->key) > generator->largest_used_integer_key
		) {
			generator->largest_used_integer_key = Z_LVAL(generator->key);
		}
	} else {
		/* If no key was specified we use auto-increment keys */
		generator->largest_used_integer_key++;
		ZVAL_LONG(&generator->key, generator->largest_used_integer_key);
	}

	if (RETURN_VALUE_USED(opline)) {
		/* If the return value of yield is used set the send
		 * target and initialize it to NULL */
		generator->send_target = EX_VAR(opline->result.var);
		ZVAL_NULL(generator->send_target);
	} else {
		generator->send_target = NULL;
	}

	/* The GOTO VM uses a local opline variable. We need to set the opline
	 * variable in execute_data so we don't resume at an old position. */
	SAVE_OPLINE();

	ZEND_VM_RETURN();
}

static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_FE_FETCH_R_SIMPLE_SPEC_VAR_CV_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *array;
	zval *value, *variable_ptr;
	uint32_t value_type;
	HashTable *fe_ht;
	HashPosition pos;

	array = EX_VAR(opline->op1.var);
	SAVE_OPLINE();
	fe_ht = Z_ARRVAL_P(array);
	pos = Z_FE_POS_P(array);
	if (HT_IS_PACKED(fe_ht)) {
		value = fe_ht->arPacked + pos;
		while (1) {
			if (UNEXPECTED(pos >= fe_ht->nNumUsed)) {
				/* reached end of iteration */
				ZEND_VM_SET_RELATIVE_OPCODE(opline, opline->extended_value);
				ZEND_VM_CONTINUE();
			}
			value_type = Z_TYPE_INFO_P(value);
			ZEND_ASSERT(value_type != IS_INDIRECT);
			if (EXPECTED(value_type != IS_UNDEF)) {
				break;
			}
			pos++;
			value++;
		}
		Z_FE_POS_P(array) = pos + 1;
		if (0) {
			ZVAL_LONG(EX_VAR(opline->result.var), pos);
		}
	} else {
		Bucket *p;

		p = fe_ht->arData + pos;
		while (1) {
			if (UNEXPECTED(pos >= fe_ht->nNumUsed)) {
				/* reached end of iteration */
				ZEND_VM_SET_RELATIVE_OPCODE(opline, opline->extended_value);
				ZEND_VM_CONTINUE();
			}
			pos++;
			value = &p->val;
			value_type = Z_TYPE_INFO_P(value);
			ZEND_ASSERT(value_type != IS_INDIRECT);
			if (EXPECTED(value_type != IS_UNDEF)) {
				break;
			}
			p++;
		}
		Z_FE_POS_P(array) = pos;
		if (0) {
			if (!p->key) {
				ZVAL_LONG(EX_VAR(opline->result.var), p->h);
			} else {
				ZVAL_STR_COPY(EX_VAR(opline->result.var), p->key);
			}
		}
	}

	variable_ptr = EX_VAR(opline->op2.var);
	zend_assign_to_variable(variable_ptr, value, IS_CV, EX_USES_STRICT_TYPES());
	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}


static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_FE_FETCH_R_SIMPLE_SPEC_VAR_CV_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *array;
	zval *value, *variable_ptr;
	uint32_t value_type;
	HashTable *fe_ht;
	HashPosition pos;

	array = EX_VAR(opline->op1.var);
	SAVE_OPLINE();
	fe_ht = Z_ARRVAL_P(array);
	pos = Z_FE_POS_P(array);
	if (HT_IS_PACKED(fe_ht)) {
		value = fe_ht->arPacked + pos;
		while (1) {
			if (UNEXPECTED(pos >= fe_ht->nNumUsed)) {
				/* reached end of iteration */
				ZEND_VM_SET_RELATIVE_OPCODE(opline, opline->extended_value);
				ZEND_VM_CONTINUE();
			}
			value_type = Z_TYPE_INFO_P(value);
			ZEND_ASSERT(value_type != IS_INDIRECT);
			if (EXPECTED(value_type != IS_UNDEF)) {
				break;
			}
			pos++;
			value++;
		}
		Z_FE_POS_P(array) = pos + 1;
		if (1) {
			ZVAL_LONG(EX_VAR(opline->result.var), pos);
		}
	} else {
		Bucket *p;

		p = fe_ht->arData + pos;
		while (1) {
			if (UNEXPECTED(pos >= fe_ht->nNumUsed)) {
				/* reached end of iteration */
				ZEND_VM_SET_RELATIVE_OPCODE(opline, opline->extended_value);
				ZEND_VM_CONTINUE();
			}
			pos++;
			value = &p->val;
			value_type = Z_TYPE_INFO_P(value);
			ZEND_ASSERT(value_type != IS_INDIRECT);
			if (EXPECTED(value_type != IS_UNDEF)) {
				break;
			}
			p++;
		}
		Z_FE_POS_P(array) = pos;
		if (1) {
			if (!p->key) {
				ZVAL_LONG(EX_VAR(opline->result.var), p->h);
			} else {
				ZVAL_STR_COPY(EX_VAR(opline->result.var), p->key);
			}
		}
	}

	variable_ptr = EX_VAR(opline->op2.var);
	zend_assign_to_variable(variable_ptr, value, IS_CV, EX_USES_STRICT_TYPES());
	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}


static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_CLONE_SPEC_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *obj;
	zend_object *zobj;
	zend_class_entry *ce, *scope;
	zend_function *clone;
	zend_object_clone_obj_t clone_call;

	SAVE_OPLINE();
	obj = &EX(This);

	/* ZEND_CLONE also exists as the clone() function and both implementations must be kept in sync.
	 * The OPcode intentionally does not support a clone-with property list to keep it simple. */

	do {
		if (IS_UNUSED == IS_CONST ||
		    (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(obj) != IS_OBJECT))) {
			if ((IS_UNUSED & (IS_VAR|IS_CV)) && Z_ISREF_P(obj)) {
				obj = Z_REFVAL_P(obj);
				if (EXPECTED(Z_TYPE_P(obj) == IS_OBJECT)) {
					break;
				}
			}
			ZVAL_UNDEF(EX_VAR(opline->result.var));
			if (IS_UNUSED == IS_CV && UNEXPECTED(Z_TYPE_P(obj) == IS_UNDEF)) {
				ZVAL_UNDEFINED_OP1();
				if (UNEXPECTED(EG(exception) != NULL)) {
					HANDLE_EXCEPTION();
				}
			}
			zend_type_error("clone(): Argument #1 ($object) must be of type object, %s given", zend_zval_value_name(obj));


			HANDLE_EXCEPTION();
		}
	} while (0);

	zobj = Z_OBJ_P(obj);
	ce = zobj->ce;
	clone = ce->clone;
	clone_call = zobj->handlers->clone_obj;
	if (UNEXPECTED(clone_call == NULL)) {
		zend_throw_error(NULL, "Trying to clone an uncloneable object of class %s", ZSTR_VAL(ce->name));


		ZVAL_UNDEF(EX_VAR(opline->result.var));
		HANDLE_EXCEPTION();
	}

	if (clone && !(clone->common.fn_flags & ZEND_ACC_PUBLIC)) {
		scope = EX(func)->op_array.scope;
		ZEND_ASSERT(!(clone->common.fn_flags & ZEND_ACC_PUBLIC));
		if (!zend_check_method_accessible(clone, scope)) {
			zend_bad_method_call(clone, clone->common.function_name, scope);


			ZVAL_UNDEF(EX_VAR(opline->result.var));
			HANDLE_EXCEPTION();
		}
	}

	ZVAL_OBJ(EX_VAR(opline->result.var), clone_call(zobj));


	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_FETCH_CLASS_NAME_SPEC_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	uint32_t fetch_type;
	zend_class_entry *called_scope, *scope;
	USE_OPLINE

	if (IS_UNUSED != IS_UNUSED) {
		SAVE_OPLINE();
		zval *op = NULL;
		if (UNEXPECTED(Z_TYPE_P(op) != IS_OBJECT)) {
			ZVAL_DEREF(op);
			if (Z_TYPE_P(op) != IS_OBJECT) {
				zend_type_error("Cannot use \"::class\" on %s", zend_zval_value_name(op));
				ZVAL_UNDEF(EX_VAR(opline->result.var));


				HANDLE_EXCEPTION();
			}
		}

		ZVAL_STR_COPY(EX_VAR(opline->result.var), Z_OBJCE_P(op)->name);


		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
	}

	fetch_type = opline->op1.num;
	scope = EX(func)->op_array.scope;
	if (UNEXPECTED(scope == NULL)) {
		SAVE_OPLINE();
		zend_throw_error(NULL, "Cannot use \"%s\" in the global scope",
			fetch_type == ZEND_FETCH_CLASS_SELF ? "self" :
			fetch_type == ZEND_FETCH_CLASS_PARENT ? "parent" : "static");
		ZVAL_UNDEF(EX_VAR(opline->result.var));
		HANDLE_EXCEPTION();
	}

	switch (fetch_type) {
		case ZEND_FETCH_CLASS_SELF:
			ZVAL_STR_COPY(EX_VAR(opline->result.var), scope->name);
			break;
		case ZEND_FETCH_CLASS_PARENT:
			if (UNEXPECTED(scope->parent == NULL)) {
				SAVE_OPLINE();
				zend_throw_error(NULL,
					"Cannot use \"parent\" when current class scope has no parent");
				ZVAL_UNDEF(EX_VAR(opline->result.var));
				HANDLE_EXCEPTION();
			}
			ZVAL_STR_COPY(EX_VAR(opline->result.var), scope->parent->name);
			break;
		case ZEND_FETCH_CLASS_STATIC:
			if (Z_TYPE(EX(This)) == IS_OBJECT) {
				called_scope = Z_OBJCE(EX(This));
			} else {
				called_scope = Z_CE(EX(This));
			}
			ZVAL_STR_COPY(EX_VAR(opline->result.var), called_scope->name);
			break;
		EMPTY_SWITCH_DEFAULT_CASE()
	}
	ZEND_VM_NEXT_OPCODE();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_ASSIGN_OBJ_OP_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *object;
	zval *property;
	zval *value;
	zval *zptr;
	void *_cache_slot[3] = {0};
	void **cache_slot;
	zend_property_info *prop_info;
	zend_object *zobj;
	zend_string *name, *tmp_name;

	SAVE_OPLINE();
	object = &EX(This);
	property = RT_CONSTANT(opline, opline->op2);

	do {
		value = get_op_data_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1);

		if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
			if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
				object = Z_REFVAL_P(object);
				goto assign_op_object;
			}
			if (IS_UNUSED == IS_CV
			 && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
				ZVAL_UNDEFINED_OP1();
			}
			zend_throw_non_object_error(object, property OPLINE_CC EXECUTE_DATA_CC);
			break;
		}

assign_op_object:
		/* here we are sure we are dealing with an object */
		zobj = Z_OBJ_P(object);
		if (IS_CONST == IS_CONST) {
			name = Z_STR_P(property);
		} else {
			name = zval_try_get_tmp_string(property, &tmp_name);
			if (UNEXPECTED(!name)) {
				UNDEF_RESULT();
				break;
			}
		}
		cache_slot = (IS_CONST == IS_CONST) ? CACHE_ADDR((opline+1)->extended_value) : _cache_slot;
		if (EXPECTED((zptr = zobj->handlers->get_property_ptr_ptr(zobj, name, BP_VAR_RW, cache_slot)) != NULL)) {
			if (UNEXPECTED(Z_ISERROR_P(zptr))) {
				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
					ZVAL_NULL(EX_VAR(opline->result.var));
				}
			} else {
				zend_reference *ref;

				do {
					if (UNEXPECTED(Z_ISREF_P(zptr))) {
						ref = Z_REF_P(zptr);
						zptr = Z_REFVAL_P(zptr);
						if (UNEXPECTED(ZEND_REF_HAS_TYPE_SOURCES(ref))) {
							zend_binary_assign_op_typed_ref(ref, value OPLINE_CC EXECUTE_DATA_CC);
							break;
						}
					}

					prop_info = (zend_property_info*)CACHED_PTR_EX(cache_slot + 2);
					if (prop_info && ZEND_TYPE_IS_SET(prop_info->type)) {
						/* special case for typed properties */
						zend_binary_assign_op_typed_prop(prop_info, zptr, value OPLINE_CC EXECUTE_DATA_CC);
					} else {
						zend_binary_op(zptr, zptr, value OPLINE_CC);
					}
				} while (0);

				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
					ZVAL_COPY(EX_VAR(opline->result.var), zptr);
				}
			}
		} else {
			zend_assign_op_overloaded_property(zobj, name, cache_slot, value OPLINE_CC EXECUTE_DATA_CC);
		}
		if (IS_CONST != IS_CONST) {
			zend_tmp_string_release(tmp_name);
		}
	} while (0);

	FREE_OP((opline+1)->op1_type, (opline+1)->op1.var);




	/* assign_obj has two opcodes! */
	ZEND_VM_NEXT_OPCODE_EX(1, 2);
}

/* No specialization for op_types (CONST|TMP|VAR|CV, UNUSED|CONST|TMPVAR) */
static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_PRE_INC_OBJ_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *object;
	zval *property;
	zval *zptr;
	void *_cache_slot[3] = {0};
	void **cache_slot;
	zend_property_info *prop_info;
	zend_object *zobj;
	zend_string *name, *tmp_name;

	SAVE_OPLINE();
	object = &EX(This);
	property = RT_CONSTANT(opline, opline->op2);

	do {
		if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
			if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
				object = Z_REFVAL_P(object);
				goto pre_incdec_object;
			}
			if (IS_UNUSED == IS_CV
			 && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
				ZVAL_UNDEFINED_OP1();
			}
			zend_throw_non_object_error(object, property OPLINE_CC EXECUTE_DATA_CC);
			break;
		}

pre_incdec_object:
		/* here we are sure we are dealing with an object */
		zobj = Z_OBJ_P(object);
		if (IS_CONST == IS_CONST) {
			name = Z_STR_P(property);
		} else {
			name = zval_try_get_tmp_string(property, &tmp_name);
			if (UNEXPECTED(!name)) {
				UNDEF_RESULT();
				break;
			}
		}
		cache_slot = (IS_CONST == IS_CONST) ? CACHE_ADDR(opline->extended_value) : _cache_slot;
		if (EXPECTED((zptr = zobj->handlers->get_property_ptr_ptr(zobj, name, BP_VAR_RW, cache_slot)) != NULL)) {
			if (UNEXPECTED(Z_ISERROR_P(zptr))) {
				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
					ZVAL_NULL(EX_VAR(opline->result.var));
				}
			} else {
				prop_info = (zend_property_info *) CACHED_PTR_EX(cache_slot + 2);
				zend_pre_incdec_property_zval(zptr,
					prop_info && ZEND_TYPE_IS_SET(prop_info->type) ? prop_info : NULL OPLINE_CC EXECUTE_DATA_CC);
			}
		} else {
			zend_pre_incdec_overloaded_property(zobj, name, cache_slot OPLINE_CC EXECUTE_DATA_CC);
		}
		if (IS_CONST != IS_CONST) {
			zend_tmp_string_release(tmp_name);
		}
	} while (0);




	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_POST_INC_OBJ_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *object;
	zval *property;
	zval *zptr;
	void *_cache_slot[3] = {0};
	void **cache_slot;
	zend_property_info *prop_info;
	zend_object *zobj;
	zend_string *name, *tmp_name;

	SAVE_OPLINE();
	object = &EX(This);
	property = RT_CONSTANT(opline, opline->op2);

	do {
		if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
			if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
				object = Z_REFVAL_P(object);
				goto post_incdec_object;
			}
			if (IS_UNUSED == IS_CV
			 && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
				ZVAL_UNDEFINED_OP1();
			}
			zend_throw_non_object_error(object, property OPLINE_CC EXECUTE_DATA_CC);
			break;
		}

post_incdec_object:
		/* here we are sure we are dealing with an object */
		zobj = Z_OBJ_P(object);
		if (IS_CONST == IS_CONST) {
			name = Z_STR_P(property);
		} else {
			name = zval_try_get_tmp_string(property, &tmp_name);
			if (UNEXPECTED(!name)) {
				ZVAL_UNDEF(EX_VAR(opline->result.var));
				break;
			}
		}
		cache_slot = (IS_CONST == IS_CONST) ? CACHE_ADDR(opline->extended_value) : _cache_slot;
		if (EXPECTED((zptr = zobj->handlers->get_property_ptr_ptr(zobj, name, BP_VAR_RW, cache_slot)) != NULL)) {
			if (UNEXPECTED(Z_ISERROR_P(zptr))) {
				ZVAL_NULL(EX_VAR(opline->result.var));
			} else {
				prop_info = (zend_property_info*)CACHED_PTR_EX(cache_slot + 2);
				zend_post_incdec_property_zval(zptr,
					prop_info && ZEND_TYPE_IS_SET(prop_info->type) ? prop_info : NULL OPLINE_CC EXECUTE_DATA_CC);
			}
		} else {
			zend_post_incdec_overloaded_property(zobj, name, cache_slot OPLINE_CC EXECUTE_DATA_CC);
		}
		if (IS_CONST != IS_CONST) {
			zend_tmp_string_release(tmp_name);
		}
	} while (0);




	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static zend_always_inline ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_FETCH_OBJ_R_SPEC_UNUSED_CONST_INLINE_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *container;
	void **cache_slot = NULL;

	SAVE_OPLINE();
	container = &EX(This);

	if (IS_UNUSED == IS_CONST ||
	    (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
		do {
			if ((IS_UNUSED & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
				container = Z_REFVAL_P(container);
				if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
					break;
				}
			}
			if (IS_UNUSED == IS_CV && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
				ZVAL_UNDEFINED_OP1();
			}
			zend_wrong_property_read(container, RT_CONSTANT(opline, opline->op2));
			ZVAL_NULL(EX_VAR(opline->result.var));
			goto fetch_obj_r_finish;
		} while (0);
	}

	/* here we are sure we are dealing with an object */
	do {
		zend_object *zobj = Z_OBJ_P(container);
		zend_string *name, *tmp_name;
		zval *retval;

		if (IS_CONST == IS_CONST) {
			cache_slot = CACHE_ADDR(opline->extended_value & ~ZEND_FETCH_REF /* FUNC_ARG fetch may contain it */);

			if (EXPECTED(zobj->ce == CACHED_PTR_EX(cache_slot))) {
				uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);

				if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
fetch_obj_r_simple:
					retval = OBJ_PROP(zobj, prop_offset);
					if (EXPECTED(Z_TYPE_INFO_P(retval) != IS_UNDEF)) {
						if (0 || (IS_UNUSED & (IS_TMP_VAR|IS_VAR)) != 0) {
							goto fetch_obj_r_copy;
						} else {
fetch_obj_r_fast_copy:
							ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
							ZEND_VM_NEXT_OPCODE();
						}
					}
				} else if (UNEXPECTED(IS_HOOKED_PROPERTY_OFFSET(prop_offset))) {
					zend_property_info *prop_info = CACHED_PTR_EX(cache_slot + 2);
					if (ZEND_IS_PROPERTY_HOOK_SIMPLE_READ(prop_offset)) {
						prop_offset = prop_info->offset;
						goto fetch_obj_r_simple;
					} else if (EXPECTED(ZEND_IS_PROPERTY_HOOK_SIMPLE_GET(prop_offset))) {
						zend_function *hook = prop_info->hooks[ZEND_PROPERTY_HOOK_GET];
						ZEND_ASSERT(hook->type == ZEND_USER_FUNCTION);
						ZEND_ASSERT(RUN_TIME_CACHE(&hook->op_array));

						uint32_t call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_HAS_THIS;
						if (IS_UNUSED & IS_CV) {
							GC_ADDREF(zobj);
						}
						if (IS_UNUSED & (IS_CV|IS_VAR|IS_TMP_VAR)) {
							call_info |= ZEND_CALL_RELEASE_THIS;
						}
						zend_execute_data *call = zend_vm_stack_push_call_frame(call_info, hook, 0, zobj);
						call->prev_execute_data = execute_data;
						call->call = NULL;
						call->return_value = EX_VAR(opline->result.var);
						call->run_time_cache = RUN_TIME_CACHE(&hook->op_array);

						execute_data = call;
						EG(current_execute_data) = execute_data;
						zend_init_cvs(0, hook->op_array.last_var EXECUTE_DATA_CC);

#if defined(ZEND_VM_IP_GLOBAL_REG) && ((ZEND_VM_KIND == ZEND_VM_KIND_CALL) || (ZEND_VM_KIND == ZEND_VM_KIND_HYBRID))
						opline = hook->op_array.opcodes;
#else
						EX(opline) = hook->op_array.opcodes;
#endif
						LOAD_OPLINE_EX();




						ZEND_VM_ENTER_EX();
					}
					/* Fall through to read_property for hooks. */
				} else if (EXPECTED(zobj->properties != NULL)) {
					ZEND_ASSERT(IS_DYNAMIC_PROPERTY_OFFSET(prop_offset));
					name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
					if (!IS_UNKNOWN_DYNAMIC_PROPERTY_OFFSET(prop_offset)) {
						uintptr_t idx = ZEND_DECODE_DYN_PROP_OFFSET(prop_offset);

						if (EXPECTED(idx < zobj->properties->nNumUsed * sizeof(Bucket))) {
							Bucket *p = (Bucket*)((char*)zobj->properties->arData + idx);

							if (EXPECTED(p->key == name) ||
							    (EXPECTED(p->h == ZSTR_H(name)) &&
							     EXPECTED(p->key != NULL) &&
							     EXPECTED(zend_string_equal_content(p->key, name)))) {
								retval = &p->val;
								if (0 || (IS_UNUSED & (IS_TMP_VAR|IS_VAR)) != 0) {
									goto fetch_obj_r_copy;
								} else {
									goto fetch_obj_r_fast_copy;
								}
							}
						}
						CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_DYNAMIC_PROPERTY_OFFSET);
					}
					retval = zend_hash_find_known_hash(zobj->properties, name);
					if (EXPECTED(retval)) {
						uintptr_t idx = (char*)retval - (char*)zobj->properties->arData;
						CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_ENCODE_DYN_PROP_OFFSET(idx));
						if (0 || (IS_UNUSED & (IS_TMP_VAR|IS_VAR)) != 0) {
							goto fetch_obj_r_copy;
						} else {
							goto fetch_obj_r_fast_copy;
						}
					}
				}
			}
			name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
		} else {
			name = zval_try_get_tmp_string(RT_CONSTANT(opline, opline->op2), &tmp_name);
			if (UNEXPECTED(!name)) {
				ZVAL_UNDEF(EX_VAR(opline->result.var));
				break;
			}
		}

#if ZEND_DEBUG
		/* For non-standard object handlers, verify a declared property type in debug builds.
		 * Fetch prop_info before calling read_property(), as it may deallocate the object. */
		zend_property_info *prop_info = NULL;
		if (zobj->handlers->read_property != zend_std_read_property) {
			prop_info = zend_get_property_info(zobj->ce, name, /* silent */ true);
		}
#endif
		retval = zobj->handlers->read_property(zobj, name, BP_VAR_R, cache_slot, EX_VAR(opline->result.var));
#if ZEND_DEBUG
		if (!EG(exception) && prop_info && prop_info != ZEND_WRONG_PROPERTY_INFO
				&& ZEND_TYPE_IS_SET(prop_info->type)) {
			ZVAL_OPT_DEREF(retval);
			zend_verify_property_type(prop_info, retval, /* strict */ true);
		}
#endif

		if (IS_CONST != IS_CONST) {
			zend_tmp_string_release(tmp_name);
		}

		if (retval != EX_VAR(opline->result.var)) {
fetch_obj_r_copy:
			ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
		} else if (UNEXPECTED(Z_ISREF_P(retval))) {
			zend_unwrap_reference(retval);
		}
	} while (0);

fetch_obj_r_finish:




	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_FETCH_OBJ_R_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	ZEND_VM_TAIL_CALL(ZEND_FETCH_OBJ_R_SPEC_UNUSED_CONST_INLINE_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_FETCH_OBJ_W_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *property, *container, *result;

	SAVE_OPLINE();

	container = &EX(This);
	property = RT_CONSTANT(opline, opline->op2);
	result = EX_VAR(opline->result.var);
	zend_fetch_property_address(
		result, container, IS_UNUSED, property, IS_CONST,
		((IS_CONST == IS_CONST) ? CACHE_ADDR(opline->extended_value & ~ZEND_FETCH_OBJ_FLAGS) : NULL),
		BP_VAR_W, opline->extended_value, NULL OPLINE_CC EXECUTE_DATA_CC);


	if (IS_UNUSED == IS_VAR) {
		FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
	}
	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_FETCH_OBJ_RW_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *property, *container, *result;

	SAVE_OPLINE();
	container = &EX(This);
	property = RT_CONSTANT(opline, opline->op2);
	result = EX_VAR(opline->result.var);
	zend_fetch_property_address(result, container, IS_UNUSED, property, IS_CONST, ((IS_CONST == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL), BP_VAR_RW, 0, NULL OPLINE_CC EXECUTE_DATA_CC);


	if (IS_UNUSED == IS_VAR) {
		FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
	}
	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_FETCH_OBJ_IS_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *container;
	void **cache_slot = NULL;

	SAVE_OPLINE();
	container = &EX(This);

	if (IS_UNUSED == IS_CONST ||
	    (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
		do {
			if ((IS_UNUSED & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
				container = Z_REFVAL_P(container);
				if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
					break;
				}
			}
			if (IS_CONST == IS_CV && Z_TYPE_P(EX_VAR(opline->op2.var)) == IS_UNDEF) {
				ZVAL_UNDEFINED_OP2();
			}
			ZVAL_NULL(EX_VAR(opline->result.var));
			goto fetch_obj_is_finish;
		} while (0);
	}

	/* here we are sure we are dealing with an object */
	do {
		zend_object *zobj = Z_OBJ_P(container);
		zend_string *name, *tmp_name;
		zval *retval;

		if (IS_CONST == IS_CONST) {
			cache_slot = CACHE_ADDR(opline->extended_value);

			if (EXPECTED(zobj->ce == CACHED_PTR_EX(cache_slot))) {
				uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);

				if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
fetch_obj_is_simple:
					retval = OBJ_PROP(zobj, prop_offset);
					if (EXPECTED(Z_TYPE_P(retval) != IS_UNDEF)) {
						if (0 || (IS_UNUSED & (IS_TMP_VAR|IS_VAR)) != 0) {
							goto fetch_obj_is_copy;
						} else {
fetch_obj_is_fast_copy:
							ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
							ZEND_VM_NEXT_OPCODE();
						}
					}
				} else if (UNEXPECTED(IS_HOOKED_PROPERTY_OFFSET(prop_offset))) {
					if (ZEND_IS_PROPERTY_HOOK_SIMPLE_READ(prop_offset)) {
						zend_property_info *prop_info = CACHED_PTR_EX(cache_slot + 2);
						prop_offset = prop_info->offset;
						goto fetch_obj_is_simple;
					}
					/* Fall through to read_property for hooks. */
				} else if (EXPECTED(zobj->properties != NULL)) {
					ZEND_ASSERT(IS_DYNAMIC_PROPERTY_OFFSET(prop_offset));
					name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
					if (!IS_UNKNOWN_DYNAMIC_PROPERTY_OFFSET(prop_offset)) {
						uintptr_t idx = ZEND_DECODE_DYN_PROP_OFFSET(prop_offset);

						if (EXPECTED(idx < zobj->properties->nNumUsed * sizeof(Bucket))) {
							Bucket *p = (Bucket*)((char*)zobj->properties->arData + idx);

							if (EXPECTED(p->key == name) ||
							    (EXPECTED(p->h == ZSTR_H(name)) &&
							     EXPECTED(p->key != NULL) &&
							     EXPECTED(zend_string_equal_content(p->key, name)))) {
								retval = &p->val;
								if (0 || (IS_UNUSED & (IS_TMP_VAR|IS_VAR)) != 0) {
									goto fetch_obj_is_copy;
								} else {
									goto fetch_obj_is_fast_copy;
								}
							}
						}
						CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_DYNAMIC_PROPERTY_OFFSET);
					}
					retval = zend_hash_find_known_hash(zobj->properties, name);
					if (EXPECTED(retval)) {
						uintptr_t idx = (char*)retval - (char*)zobj->properties->arData;
						CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_ENCODE_DYN_PROP_OFFSET(idx));
						if (0 || (IS_UNUSED & (IS_TMP_VAR|IS_VAR)) != 0) {
							goto fetch_obj_is_copy;
						} else {
							goto fetch_obj_is_fast_copy;
						}
					}
				}
			}
			name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
		} else {
			name = zval_try_get_tmp_string(RT_CONSTANT(opline, opline->op2), &tmp_name);
			if (UNEXPECTED(!name)) {
				ZVAL_UNDEF(EX_VAR(opline->result.var));
				break;
			}
		}

		retval = zobj->handlers->read_property(zobj, name, BP_VAR_IS, cache_slot, EX_VAR(opline->result.var));

		if (IS_CONST != IS_CONST) {
			zend_tmp_string_release(tmp_name);
		}

		if (retval != EX_VAR(opline->result.var)) {
fetch_obj_is_copy:
			ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
		} else if (UNEXPECTED(Z_ISREF_P(retval))) {
			zend_unwrap_reference(retval);
		}
	} while (0);

fetch_obj_is_finish:




	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_FETCH_OBJ_FUNC_ARG_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
#if 0
	USE_OPLINE
#endif

	if (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) {
		/* Behave like FETCH_OBJ_W */
		if ((IS_UNUSED & (IS_CONST|IS_TMP_VAR))) {
			ZEND_VM_TAIL_CALL(zend_use_tmp_in_write_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
		}
		ZEND_VM_TAIL_CALL(ZEND_FETCH_OBJ_W_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
	} else {
		ZEND_VM_TAIL_CALL(ZEND_FETCH_OBJ_R_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
	}
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_FETCH_OBJ_UNSET_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *container, *property, *result;

	SAVE_OPLINE();
	container = &EX(This);
	property = RT_CONSTANT(opline, opline->op2);
	result = EX_VAR(opline->result.var);
	zend_fetch_property_address(result, container, IS_UNUSED, property, IS_CONST, ((IS_CONST == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL), BP_VAR_UNSET, 0, NULL OPLINE_CC EXECUTE_DATA_CC);


	if (IS_UNUSED == IS_VAR) {
		FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
	}
	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_ASSIGN_OBJ_SPEC_UNUSED_CONST_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *object, *value, tmp;
	zend_object *zobj;
	zend_string *name, *tmp_name;
	zend_refcounted *garbage = NULL;

	SAVE_OPLINE();
	object = &EX(This);
	value = RT_CONSTANT((opline+1), (opline+1)->op1);

	if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
		if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
			object = Z_REFVAL_P(object);
			goto assign_object;
		}
		zend_throw_non_object_error(object, RT_CONSTANT(opline, opline->op2) OPLINE_CC EXECUTE_DATA_CC);
		value = &EG(uninitialized_zval);
		goto free_and_exit_assign_obj;
	}

assign_object:
	zobj = Z_OBJ_P(object);
	if (IS_CONST == IS_CONST) {
		if (EXPECTED(zobj->ce == CACHED_PTR(opline->extended_value))) {
			void **cache_slot = CACHE_ADDR(opline->extended_value);
			uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
			zval *property_val;
			zend_property_info *prop_info;

			if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
				prop_info = (zend_property_info*) CACHED_PTR_EX(cache_slot + 2);

assign_obj_simple:
				property_val = OBJ_PROP(zobj, prop_offset);
				if (Z_TYPE_P(property_val) != IS_UNDEF) {
					if (prop_info != NULL) {
						value = zend_assign_to_typed_prop(prop_info, property_val, value, &garbage EXECUTE_DATA_CC);
						goto free_and_exit_assign_obj;
					} else {
fast_assign_obj:
						value = zend_assign_to_variable_ex(property_val, value, IS_CONST, EX_USES_STRICT_TYPES(), &garbage);
						if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
							ZVAL_COPY(EX_VAR(opline->result.var), value);
						}
						goto exit_assign_obj;
					}
				}
			} else if (EXPECTED(IS_DYNAMIC_PROPERTY_OFFSET(prop_offset))) {
				name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
				if (UNEXPECTED(zend_lazy_object_must_init(zobj))) {
					zobj = zend_lazy_object_init(zobj);
					if (!zobj) {
						value = &EG(uninitialized_zval);
						goto free_and_exit_assign_obj;
					}
				}
				if (!zobj->ce->__set && (zobj->ce->ce_flags & ZEND_ACC_ALLOW_DYNAMIC_PROPERTIES)) {
					rebuild_object_properties_internal(zobj);
				}
				if (EXPECTED(zobj->properties != NULL)) {
					if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
						if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
							GC_DELREF(zobj->properties);
						}
						zobj->properties = zend_array_dup(zobj->properties);
					}
					property_val = zend_hash_find_known_hash(zobj->properties, name);
					if (property_val) {
						goto fast_assign_obj;
					}
				}

				if (!zobj->ce->__set && (zobj->ce->ce_flags & ZEND_ACC_ALLOW_DYNAMIC_PROPERTIES)) {
					if (IS_CONST == IS_CONST) {
						if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
							Z_ADDREF_P(value);
						}
					} else if (IS_CONST != IS_TMP_VAR) {
						if (Z_ISREF_P(value)) {
							if (IS_CONST == IS_VAR) {
								zend_reference *ref = Z_REF_P(value);
								if (GC_DELREF(ref) == 0) {
									ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
									efree_size(ref, sizeof(zend_reference));
									value = &tmp;
								} else {
									value = Z_REFVAL_P(value);
									Z_TRY_ADDREF_P(value);
								}
							} else {
								value = Z_REFVAL_P(value);
								Z_TRY_ADDREF_P(value);
							}
						} else if (IS_CONST == IS_CV) {
							Z_TRY_ADDREF_P(value);
						}
					}
					zend_hash_add_new(zobj->properties, name, value);
					if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
						ZVAL_COPY(EX_VAR(opline->result.var), value);
					}
					goto exit_assign_obj;
				}
			} else {
				ZEND_ASSERT(IS_HOOKED_PROPERTY_OFFSET(prop_offset));
				if (ZEND_IS_PROPERTY_HOOK_SIMPLE_WRITE(prop_offset)) {
					prop_info = CACHED_PTR_EX(cache_slot + 2);
					prop_offset = prop_info->offset;
					if (!ZEND_TYPE_IS_SET(prop_info->type)) {
						prop_info = NULL;
					}
					goto assign_obj_simple;
				}
				/* Fall through to write_property for hooks. */
			}
		}
		name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
	} else {
		name = zval_try_get_tmp_string(RT_CONSTANT(opline, opline->op2), &tmp_name);
		if (UNEXPECTED(!name)) {


			UNDEF_RESULT();
			goto exit_assign_obj;
		}
	}

	if (IS_CONST == IS_CV || IS_CONST == IS_VAR) {
		ZVAL_DEREF(value);
	}

	value = zobj->handlers->write_property(zobj, name, value, (IS_CONST == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);

	if (IS_CONST != IS_CONST) {
		zend_tmp_string_release(tmp_name);
	}

free_and_exit_assign_obj:
	if (UNEXPECTED(RETURN_VALUE_USED(opline)) && value) {
		ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
	}


exit_assign_obj:
	if (garbage) {
		GC_DTOR_NO_REF(garbage);
	}




	/* assign_obj has two opcodes! */
	ZEND_VM_NEXT_OPCODE_EX(1, 2);
}

/* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CONST|VAR) */
static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_ASSIGN_OBJ_SPEC_UNUSED_CONST_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *object, *value, tmp;
	zend_object *zobj;
	zend_string *name, *tmp_name;
	zend_refcounted *garbage = NULL;

	SAVE_OPLINE();
	object = &EX(This);
	value = _get_zval_ptr_tmp((opline+1)->op1.var EXECUTE_DATA_CC);

	if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
		if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
			object = Z_REFVAL_P(object);
			goto assign_object;
		}
		zend_throw_non_object_error(object, RT_CONSTANT(opline, opline->op2) OPLINE_CC EXECUTE_DATA_CC);
		value = &EG(uninitialized_zval);
		goto free_and_exit_assign_obj;
	}

assign_object:
	zobj = Z_OBJ_P(object);
	if (IS_CONST == IS_CONST) {
		if (EXPECTED(zobj->ce == CACHED_PTR(opline->extended_value))) {
			void **cache_slot = CACHE_ADDR(opline->extended_value);
			uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
			zval *property_val;
			zend_property_info *prop_info;

			if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
				prop_info = (zend_property_info*) CACHED_PTR_EX(cache_slot + 2);

assign_obj_simple:
				property_val = OBJ_PROP(zobj, prop_offset);
				if (Z_TYPE_P(property_val) != IS_UNDEF) {
					if (prop_info != NULL) {
						value = zend_assign_to_typed_prop(prop_info, property_val, value, &garbage EXECUTE_DATA_CC);
						goto free_and_exit_assign_obj;
					} else {
fast_assign_obj:
						value = zend_assign_to_variable_ex(property_val, value, IS_TMP_VAR, EX_USES_STRICT_TYPES(), &garbage);
						if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
							ZVAL_COPY(EX_VAR(opline->result.var), value);
						}
						goto exit_assign_obj;
					}
				}
			} else if (EXPECTED(IS_DYNAMIC_PROPERTY_OFFSET(prop_offset))) {
				name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
				if (UNEXPECTED(zend_lazy_object_must_init(zobj))) {
					zobj = zend_lazy_object_init(zobj);
					if (!zobj) {
						value = &EG(uninitialized_zval);
						goto free_and_exit_assign_obj;
					}
				}
				if (!zobj->ce->__set && (zobj->ce->ce_flags & ZEND_ACC_ALLOW_DYNAMIC_PROPERTIES)) {
					rebuild_object_properties_internal(zobj);
				}
				if (EXPECTED(zobj->properties != NULL)) {
					if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
						if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
							GC_DELREF(zobj->properties);
						}
						zobj->properties = zend_array_dup(zobj->properties);
					}
					property_val = zend_hash_find_known_hash(zobj->properties, name);
					if (property_val) {
						goto fast_assign_obj;
					}
				}

				if (!zobj->ce->__set && (zobj->ce->ce_flags & ZEND_ACC_ALLOW_DYNAMIC_PROPERTIES)) {
					if (IS_TMP_VAR == IS_CONST) {
						if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
							Z_ADDREF_P(value);
						}
					} else if (IS_TMP_VAR != IS_TMP_VAR) {
						if (Z_ISREF_P(value)) {
							if (IS_TMP_VAR == IS_VAR) {
								zend_reference *ref = Z_REF_P(value);
								if (GC_DELREF(ref) == 0) {
									ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
									efree_size(ref, sizeof(zend_reference));
									value = &tmp;
								} else {
									value = Z_REFVAL_P(value);
									Z_TRY_ADDREF_P(value);
								}
							} else {
								value = Z_REFVAL_P(value);
								Z_TRY_ADDREF_P(value);
							}
						} else if (IS_TMP_VAR == IS_CV) {
							Z_TRY_ADDREF_P(value);
						}
					}
					zend_hash_add_new(zobj->properties, name, value);
					if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
						ZVAL_COPY(EX_VAR(opline->result.var), value);
					}
					goto exit_assign_obj;
				}
			} else {
				ZEND_ASSERT(IS_HOOKED_PROPERTY_OFFSET(prop_offset));
				if (ZEND_IS_PROPERTY_HOOK_SIMPLE_WRITE(prop_offset)) {
					prop_info = CACHED_PTR_EX(cache_slot + 2);
					prop_offset = prop_info->offset;
					if (!ZEND_TYPE_IS_SET(prop_info->type)) {
						prop_info = NULL;
					}
					goto assign_obj_simple;
				}
				/* Fall through to write_property for hooks. */
			}
		}
		name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
	} else {
		name = zval_try_get_tmp_string(RT_CONSTANT(opline, opline->op2), &tmp_name);
		if (UNEXPECTED(!name)) {
			zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
			UNDEF_RESULT();
			goto exit_assign_obj;
		}
	}

	if (IS_TMP_VAR == IS_CV || IS_TMP_VAR == IS_VAR) {
		ZVAL_DEREF(value);
	}

	value = zobj->handlers->write_property(zobj, name, value, (IS_CONST == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);

	if (IS_CONST != IS_CONST) {
		zend_tmp_string_release(tmp_name);
	}

free_and_exit_assign_obj:
	if (UNEXPECTED(RETURN_VALUE_USED(opline)) && value) {
		ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
	}
	zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
exit_assign_obj:
	if (garbage) {
		GC_DTOR_NO_REF(garbage);
	}




	/* assign_obj has two opcodes! */
	ZEND_VM_NEXT_OPCODE_EX(1, 2);
}

/* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CONST|VAR) */
static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_ASSIGN_OBJ_SPEC_UNUSED_CONST_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *object, *value, tmp;
	zend_object *zobj;
	zend_string *name, *tmp_name;
	zend_refcounted *garbage = NULL;

	SAVE_OPLINE();
	object = &EX(This);
	value = _get_zval_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);

	if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
		if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
			object = Z_REFVAL_P(object);
			goto assign_object;
		}
		zend_throw_non_object_error(object, RT_CONSTANT(opline, opline->op2) OPLINE_CC EXECUTE_DATA_CC);
		value = &EG(uninitialized_zval);
		goto free_and_exit_assign_obj;
	}

assign_object:
	zobj = Z_OBJ_P(object);
	if (IS_CONST == IS_CONST) {
		if (EXPECTED(zobj->ce == CACHED_PTR(opline->extended_value))) {
			void **cache_slot = CACHE_ADDR(opline->extended_value);
			uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
			zval *property_val;
			zend_property_info *prop_info;

			if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
				prop_info = (zend_property_info*) CACHED_PTR_EX(cache_slot + 2);

assign_obj_simple:
				property_val = OBJ_PROP(zobj, prop_offset);
				if (Z_TYPE_P(property_val) != IS_UNDEF) {
					if (prop_info != NULL) {
						value = zend_assign_to_typed_prop(prop_info, property_val, value, &garbage EXECUTE_DATA_CC);
						goto free_and_exit_assign_obj;
					} else {
fast_assign_obj:
						value = zend_assign_to_variable_ex(property_val, value, IS_VAR, EX_USES_STRICT_TYPES(), &garbage);
						if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
							ZVAL_COPY(EX_VAR(opline->result.var), value);
						}
						goto exit_assign_obj;
					}
				}
			} else if (EXPECTED(IS_DYNAMIC_PROPERTY_OFFSET(prop_offset))) {
				name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
				if (UNEXPECTED(zend_lazy_object_must_init(zobj))) {
					zobj = zend_lazy_object_init(zobj);
					if (!zobj) {
						value = &EG(uninitialized_zval);
						goto free_and_exit_assign_obj;
					}
				}
				if (!zobj->ce->__set && (zobj->ce->ce_flags & ZEND_ACC_ALLOW_DYNAMIC_PROPERTIES)) {
					rebuild_object_properties_internal(zobj);
				}
				if (EXPECTED(zobj->properties != NULL)) {
					if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
						if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
							GC_DELREF(zobj->properties);
						}
						zobj->properties = zend_array_dup(zobj->properties);
					}
					property_val = zend_hash_find_known_hash(zobj->properties, name);
					if (property_val) {
						goto fast_assign_obj;
					}
				}

				if (!zobj->ce->__set && (zobj->ce->ce_flags & ZEND_ACC_ALLOW_DYNAMIC_PROPERTIES)) {
					if (IS_VAR == IS_CONST) {
						if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
							Z_ADDREF_P(value);
						}
					} else if (IS_VAR != IS_TMP_VAR) {
						if (Z_ISREF_P(value)) {
							if (IS_VAR == IS_VAR) {
								zend_reference *ref = Z_REF_P(value);
								if (GC_DELREF(ref) == 0) {
									ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
									efree_size(ref, sizeof(zend_reference));
									value = &tmp;
								} else {
									value = Z_REFVAL_P(value);
									Z_TRY_ADDREF_P(value);
								}
							} else {
								value = Z_REFVAL_P(value);
								Z_TRY_ADDREF_P(value);
							}
						} else if (IS_VAR == IS_CV) {
							Z_TRY_ADDREF_P(value);
						}
					}
					zend_hash_add_new(zobj->properties, name, value);
					if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
						ZVAL_COPY(EX_VAR(opline->result.var), value);
					}
					goto exit_assign_obj;
				}
			} else {
				ZEND_ASSERT(IS_HOOKED_PROPERTY_OFFSET(prop_offset));
				if (ZEND_IS_PROPERTY_HOOK_SIMPLE_WRITE(prop_offset)) {
					prop_info = CACHED_PTR_EX(cache_slot + 2);
					prop_offset = prop_info->offset;
					if (!ZEND_TYPE_IS_SET(prop_info->type)) {
						prop_info = NULL;
					}
					goto assign_obj_simple;
				}
				/* Fall through to write_property for hooks. */
			}
		}
		name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
	} else {
		name = zval_try_get_tmp_string(RT_CONSTANT(opline, opline->op2), &tmp_name);
		if (UNEXPECTED(!name)) {
			zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
			UNDEF_RESULT();
			goto exit_assign_obj;
		}
	}

	if (IS_VAR == IS_CV || IS_VAR == IS_VAR) {
		ZVAL_DEREF(value);
	}

	value = zobj->handlers->write_property(zobj, name, value, (IS_CONST == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);

	if (IS_CONST != IS_CONST) {
		zend_tmp_string_release(tmp_name);
	}

free_and_exit_assign_obj:
	if (UNEXPECTED(RETURN_VALUE_USED(opline)) && value) {
		ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
	}
	zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
exit_assign_obj:
	if (garbage) {
		GC_DTOR_NO_REF(garbage);
	}




	/* assign_obj has two opcodes! */
	ZEND_VM_NEXT_OPCODE_EX(1, 2);
}

/* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CONST|VAR) */
static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_ASSIGN_OBJ_SPEC_UNUSED_CONST_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *object, *value, tmp;
	zend_object *zobj;
	zend_string *name, *tmp_name;
	zend_refcounted *garbage = NULL;

	SAVE_OPLINE();
	object = &EX(This);
	value = _get_zval_ptr_cv_BP_VAR_R((opline+1)->op1.var EXECUTE_DATA_CC);

	if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
		if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
			object = Z_REFVAL_P(object);
			goto assign_object;
		}
		zend_throw_non_object_error(object, RT_CONSTANT(opline, opline->op2) OPLINE_CC EXECUTE_DATA_CC);
		value = &EG(uninitialized_zval);
		goto free_and_exit_assign_obj;
	}

assign_object:
	zobj = Z_OBJ_P(object);
	if (IS_CONST == IS_CONST) {
		if (EXPECTED(zobj->ce == CACHED_PTR(opline->extended_value))) {
			void **cache_slot = CACHE_ADDR(opline->extended_value);
			uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
			zval *property_val;
			zend_property_info *prop_info;

			if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
				prop_info = (zend_property_info*) CACHED_PTR_EX(cache_slot + 2);

assign_obj_simple:
				property_val = OBJ_PROP(zobj, prop_offset);
				if (Z_TYPE_P(property_val) != IS_UNDEF) {
					if (prop_info != NULL) {
						value = zend_assign_to_typed_prop(prop_info, property_val, value, &garbage EXECUTE_DATA_CC);
						goto free_and_exit_assign_obj;
					} else {
fast_assign_obj:
						value = zend_assign_to_variable_ex(property_val, value, IS_CV, EX_USES_STRICT_TYPES(), &garbage);
						if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
							ZVAL_COPY(EX_VAR(opline->result.var), value);
						}
						goto exit_assign_obj;
					}
				}
			} else if (EXPECTED(IS_DYNAMIC_PROPERTY_OFFSET(prop_offset))) {
				name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
				if (UNEXPECTED(zend_lazy_object_must_init(zobj))) {
					zobj = zend_lazy_object_init(zobj);
					if (!zobj) {
						value = &EG(uninitialized_zval);
						goto free_and_exit_assign_obj;
					}
				}
				if (!zobj->ce->__set && (zobj->ce->ce_flags & ZEND_ACC_ALLOW_DYNAMIC_PROPERTIES)) {
					rebuild_object_properties_internal(zobj);
				}
				if (EXPECTED(zobj->properties != NULL)) {
					if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
						if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
							GC_DELREF(zobj->properties);
						}
						zobj->properties = zend_array_dup(zobj->properties);
					}
					property_val = zend_hash_find_known_hash(zobj->properties, name);
					if (property_val) {
						goto fast_assign_obj;
					}
				}

				if (!zobj->ce->__set && (zobj->ce->ce_flags & ZEND_ACC_ALLOW_DYNAMIC_PROPERTIES)) {
					if (IS_CV == IS_CONST) {
						if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
							Z_ADDREF_P(value);
						}
					} else if (IS_CV != IS_TMP_VAR) {
						if (Z_ISREF_P(value)) {
							if (IS_CV == IS_VAR) {
								zend_reference *ref = Z_REF_P(value);
								if (GC_DELREF(ref) == 0) {
									ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
									efree_size(ref, sizeof(zend_reference));
									value = &tmp;
								} else {
									value = Z_REFVAL_P(value);
									Z_TRY_ADDREF_P(value);
								}
							} else {
								value = Z_REFVAL_P(value);
								Z_TRY_ADDREF_P(value);
							}
						} else if (IS_CV == IS_CV) {
							Z_TRY_ADDREF_P(value);
						}
					}
					zend_hash_add_new(zobj->properties, name, value);
					if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
						ZVAL_COPY(EX_VAR(opline->result.var), value);
					}
					goto exit_assign_obj;
				}
			} else {
				ZEND_ASSERT(IS_HOOKED_PROPERTY_OFFSET(prop_offset));
				if (ZEND_IS_PROPERTY_HOOK_SIMPLE_WRITE(prop_offset)) {
					prop_info = CACHED_PTR_EX(cache_slot + 2);
					prop_offset = prop_info->offset;
					if (!ZEND_TYPE_IS_SET(prop_info->type)) {
						prop_info = NULL;
					}
					goto assign_obj_simple;
				}
				/* Fall through to write_property for hooks. */
			}
		}
		name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
	} else {
		name = zval_try_get_tmp_string(RT_CONSTANT(opline, opline->op2), &tmp_name);
		if (UNEXPECTED(!name)) {


			UNDEF_RESULT();
			goto exit_assign_obj;
		}
	}

	if (IS_CV == IS_CV || IS_CV == IS_VAR) {
		ZVAL_DEREF(value);
	}

	value = zobj->handlers->write_property(zobj, name, value, (IS_CONST == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);

	if (IS_CONST != IS_CONST) {
		zend_tmp_string_release(tmp_name);
	}

free_and_exit_assign_obj:
	if (UNEXPECTED(RETURN_VALUE_USED(opline)) && value) {
		ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
	}


exit_assign_obj:
	if (garbage) {
		GC_DTOR_NO_REF(garbage);
	}




	/* assign_obj has two opcodes! */
	ZEND_VM_NEXT_OPCODE_EX(1, 2);
}

/* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CONST|VAR) */
static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_ASSIGN_OBJ_REF_SPEC_UNUSED_CONST_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *property, *container, *value_ptr;

	SAVE_OPLINE();

	container = &EX(This);
	property = RT_CONSTANT(opline, opline->op2);

	value_ptr = _get_zval_ptr_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);

	if (1) {
		if (IS_UNUSED == IS_UNUSED) {
			if (IS_CONST == IS_CONST) {
				zend_assign_to_property_reference_this_const(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
			} else {
				zend_assign_to_property_reference_this_var(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
			}
		} else {
			if (IS_CONST == IS_CONST) {
				zend_assign_to_property_reference_var_const(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
			} else {
				zend_assign_to_property_reference_var_var(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
			}
		}
	} else {
		zend_assign_to_property_reference(container, IS_UNUSED, property, IS_CONST, value_ptr OPLINE_CC EXECUTE_DATA_CC);
	}




	zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
	ZEND_VM_NEXT_OPCODE_EX(1, 2);
}

/* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CONST|VAR) */
static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_ASSIGN_OBJ_REF_SPEC_UNUSED_CONST_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *property, *container, *value_ptr;

	SAVE_OPLINE();

	container = &EX(This);
	property = RT_CONSTANT(opline, opline->op2);

	value_ptr = _get_zval_ptr_cv_BP_VAR_W((opline+1)->op1.var EXECUTE_DATA_CC);

	if (1) {
		if (IS_UNUSED == IS_UNUSED) {
			if (IS_CONST == IS_CONST) {
				zend_assign_to_property_reference_this_const(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
			} else {
				zend_assign_to_property_reference_this_var(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
			}
		} else {
			if (IS_CONST == IS_CONST) {
				zend_assign_to_property_reference_var_const(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
			} else {
				zend_assign_to_property_reference_var_var(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
			}
		}
	} else {
		zend_assign_to_property_reference(container, IS_UNUSED, property, IS_CONST, value_ptr OPLINE_CC EXECUTE_DATA_CC);
	}






	ZEND_VM_NEXT_OPCODE_EX(1, 2);
}

/* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CONST|VAR) */
static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_ROPE_INIT_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zend_string **rope;
	zval *var;

	/* Compiler allocates the necessary number of zval slots to keep the rope */
	rope = (zend_string**)EX_VAR(opline->result.var);
	if (IS_CONST == IS_CONST) {
		var = RT_CONSTANT(opline, opline->op2);
		rope[0] = Z_STR_P(var);
		if (UNEXPECTED(Z_REFCOUNTED_P(var))) {
			Z_ADDREF_P(var);
		}
	} else {
		var = RT_CONSTANT(opline, opline->op2);
		if (EXPECTED(Z_TYPE_P(var) == IS_STRING)) {
			if (IS_CONST == IS_CV) {
				rope[0] = zend_string_copy(Z_STR_P(var));
			} else {
				rope[0] = Z_STR_P(var);
			}
		} else {
			SAVE_OPLINE();
			if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(var) == IS_UNDEF)) {
				ZVAL_UNDEFINED_OP2();
			}
			rope[0] = zval_get_string_func(var);


			ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
		}
	}
	ZEND_VM_NEXT_OPCODE();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_FETCH_CLASS_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	zval *class_name;
	USE_OPLINE

	SAVE_OPLINE();
	if (IS_CONST == IS_UNUSED) {
		Z_CE_P(EX_VAR(opline->result.var)) = zend_fetch_class(NULL, opline->op1.num);
		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
	} else if (IS_CONST == IS_CONST) {
		zend_class_entry *ce = CACHED_PTR(opline->extended_value);

		if (UNEXPECTED(ce == NULL)) {
			class_name = RT_CONSTANT(opline, opline->op2);
			ce = zend_fetch_class_by_name(Z_STR_P(class_name), Z_STR_P(class_name + 1), opline->op1.num);
			CACHE_PTR(opline->extended_value, ce);
		}
		Z_CE_P(EX_VAR(opline->result.var)) = ce;
	} else {
		class_name = RT_CONSTANT(opline, opline->op2);
try_class_name:
		if (Z_TYPE_P(class_name) == IS_OBJECT) {
			Z_CE_P(EX_VAR(opline->result.var)) = Z_OBJCE_P(class_name);
		} else if (Z_TYPE_P(class_name) == IS_STRING) {
			Z_CE_P(EX_VAR(opline->result.var)) = zend_fetch_class(Z_STR_P(class_name), opline->op1.num);
		} else if ((IS_CONST & (IS_VAR|IS_CV)) && Z_TYPE_P(class_name) == IS_REFERENCE) {
			class_name = Z_REFVAL_P(class_name);
			goto try_class_name;
		} else {
			if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(class_name) == IS_UNDEF)) {
				ZVAL_UNDEFINED_OP2();
				if (UNEXPECTED(EG(exception) != NULL)) {
					HANDLE_EXCEPTION();
				}
			}
			zend_throw_error(NULL, "Class name must be a valid object or a string");
		}
	}


	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_INIT_METHOD_CALL_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *function_name;
	zval *object;
	zend_function *fbc;
	zend_class_entry *called_scope;
	zend_object *obj;
	zend_execute_data *call;
	uint32_t call_info;

	SAVE_OPLINE();

	object = &EX(This);

	if (IS_CONST != IS_CONST) {
		function_name = RT_CONSTANT(opline, opline->op2);
	}

	if (IS_CONST != IS_CONST &&
	    UNEXPECTED(Z_TYPE_P(function_name) != IS_STRING)) {
		do {
			if ((IS_CONST & (IS_VAR|IS_CV)) && Z_ISREF_P(function_name)) {
				function_name = Z_REFVAL_P(function_name);
				if (EXPECTED(Z_TYPE_P(function_name) == IS_STRING)) {
					break;
				}
			} else if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) {
				ZVAL_UNDEFINED_OP2();
				if (UNEXPECTED(EG(exception) != NULL)) {


					HANDLE_EXCEPTION();
				}
			}
			zend_throw_error(NULL, "Method name must be a string");




			HANDLE_EXCEPTION();
		} while (0);
	}

	if (IS_UNUSED == IS_UNUSED) {
		obj = Z_OBJ_P(object);
	} else {
		do {
			if (IS_UNUSED != IS_CONST && EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
				obj = Z_OBJ_P(object);
			} else {
				if ((IS_UNUSED & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(object))) {
					zend_reference *ref = Z_REF_P(object);

					object = &ref->val;
					if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
						obj = Z_OBJ_P(object);
						if (IS_UNUSED & IS_VAR) {
							if (UNEXPECTED(GC_DELREF(ref) == 0)) {
								efree_size(ref, sizeof(zend_reference));
							} else {
								Z_ADDREF_P(object);
							}
						}
						break;
					}
				}
				if (IS_UNUSED == IS_CV && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
					object = ZVAL_UNDEFINED_OP1();
					if (UNEXPECTED(EG(exception) != NULL)) {
						if (IS_CONST != IS_CONST) {


						}
						HANDLE_EXCEPTION();
					}
				}
				if (IS_CONST == IS_CONST) {
					function_name = RT_CONSTANT(opline, opline->op2);
				}
				zend_invalid_method_call(object, function_name);




				HANDLE_EXCEPTION();
			}
		} while (0);
	}

	called_scope = obj->ce;

	if (IS_CONST == IS_CONST &&
	    EXPECTED(CACHED_PTR(opline->result.num) == called_scope)) {
		fbc = CACHED_PTR(opline->result.num + sizeof(void*));
	} else {
		zend_object *orig_obj = obj;

		if (IS_CONST == IS_CONST) {
			function_name = RT_CONSTANT(opline, opline->op2);
		}

		/* First, locate the function. */
		fbc = obj->handlers->get_method(&obj, Z_STR_P(function_name), ((IS_CONST == IS_CONST) ? (RT_CONSTANT(opline, opline->op2) + 1) : NULL));
		if (UNEXPECTED(fbc == NULL)) {
			if (EXPECTED(!EG(exception))) {
				zend_undefined_method(orig_obj->ce, Z_STR_P(function_name));
			}


			if ((IS_UNUSED & (IS_VAR|IS_TMP_VAR)) && GC_DELREF(orig_obj) == 0) {
				zend_objects_store_del(orig_obj);
			}
			HANDLE_EXCEPTION();
		}
		if (IS_CONST == IS_CONST &&
		    EXPECTED(!(fbc->common.fn_flags & (ZEND_ACC_CALL_VIA_TRAMPOLINE|ZEND_ACC_NEVER_CACHE))) &&
		    EXPECTED(obj == orig_obj)) {
			CACHE_POLYMORPHIC_PTR(opline->result.num, called_scope, fbc);
		}
		if ((IS_UNUSED & (IS_VAR|IS_TMP_VAR)) && UNEXPECTED(obj != orig_obj)) {
			GC_ADDREF(obj); /* For $this pointer */
			if (GC_DELREF(orig_obj) == 0) {
				zend_objects_store_del(orig_obj);
			}
		}
		if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!RUN_TIME_CACHE(&fbc->op_array))) {
			init_func_run_time_cache(&fbc->op_array);
		}
	}

	if (IS_CONST != IS_CONST) {


	}

	call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_HAS_THIS;
	if (UNEXPECTED((fbc->common.fn_flags & ZEND_ACC_STATIC) != 0)) {
		if ((IS_UNUSED & (IS_VAR|IS_TMP_VAR)) && GC_DELREF(obj) == 0) {
			zend_objects_store_del(obj);
			if (UNEXPECTED(EG(exception))) {
				HANDLE_EXCEPTION();
			}
		}
		/* call static method */
		obj = (zend_object*)called_scope;
		call_info = ZEND_CALL_NESTED_FUNCTION;
	} else if (IS_UNUSED & (IS_VAR|IS_TMP_VAR|IS_CV)) {
		if (IS_UNUSED == IS_CV) {
			GC_ADDREF(obj); /* For $this pointer */
		}
		/* CV may be changed indirectly (e.g. when it's a reference) */
		call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_HAS_THIS | ZEND_CALL_RELEASE_THIS;
	}

	call = zend_vm_stack_push_call_frame(call_info,
		fbc, opline->extended_value, obj);
	call->prev_execute_data = EX(call);
	EX(call) = call;

	ZEND_VM_NEXT_OPCODE();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_INIT_STATIC_METHOD_CALL_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *function_name;
	zend_class_entry *ce;
	uint32_t call_info;
	zend_function *fbc;
	zend_execute_data *call;

	SAVE_OPLINE();

	if (IS_UNUSED == IS_CONST) {
		/* no function found. try a static method in class */
		ce = CACHED_PTR(opline->result.num);
		if (UNEXPECTED(ce == NULL)) {
			ce = zend_fetch_class_by_name(Z_STR_P(RT_CONSTANT(opline, opline->op1)), Z_STR_P(RT_CONSTANT(opline, opline->op1) + 1), ZEND_FETCH_CLASS_DEFAULT | ZEND_FETCH_CLASS_EXCEPTION);
			if (UNEXPECTED(ce == NULL)) {


				HANDLE_EXCEPTION();
			}
			if (IS_CONST != IS_CONST) {
				CACHE_PTR(opline->result.num, ce);
			}
		}
	} else if (IS_UNUSED == IS_UNUSED) {
		ce = zend_fetch_class(NULL, opline->op1.num);
		if (UNEXPECTED(ce == NULL)) {


			HANDLE_EXCEPTION();
		}
	} else {
		ce = Z_CE_P(EX_VAR(opline->op1.var));
	}

	if (IS_UNUSED == IS_CONST &&
	    IS_CONST == IS_CONST &&
	    EXPECTED((fbc = CACHED_PTR(opline->result.num + sizeof(void*))) != NULL)) {
		/* nothing to do */
	} else if (IS_UNUSED != IS_CONST &&
	           IS_CONST == IS_CONST &&
	           EXPECTED(CACHED_PTR(opline->result.num) == ce)) {
		fbc = CACHED_PTR(opline->result.num + sizeof(void*));
	} else if (IS_CONST != IS_UNUSED) {
		function_name = RT_CONSTANT(opline, opline->op2);
		if (IS_CONST != IS_CONST) {
			if (UNEXPECTED(Z_TYPE_P(function_name) != IS_STRING)) {
				do {
					if (IS_CONST & (IS_VAR|IS_CV) && Z_ISREF_P(function_name)) {
						function_name = Z_REFVAL_P(function_name);
						if (EXPECTED(Z_TYPE_P(function_name) == IS_STRING)) {
							break;
						}
					} else if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) {
						ZVAL_UNDEFINED_OP2();
						if (UNEXPECTED(EG(exception) != NULL)) {
							HANDLE_EXCEPTION();
						}
					}
					zend_throw_error(NULL, "Method name must be a string");


					HANDLE_EXCEPTION();
				} while (0);
			}
		}

		if (ce->get_static_method) {
			fbc = ce->get_static_method(ce, Z_STR_P(function_name));
		} else {
			fbc = zend_std_get_static_method(ce, Z_STR_P(function_name), ((IS_CONST == IS_CONST) ? (RT_CONSTANT(opline, opline->op2) + 1) : NULL));
		}
		if (UNEXPECTED(fbc == NULL)) {
			if (EXPECTED(!EG(exception))) {
				zend_undefined_method(ce, Z_STR_P(function_name));
			}


			HANDLE_EXCEPTION();
		}
		if (IS_CONST == IS_CONST &&
		    EXPECTED(!(fbc->common.fn_flags & (ZEND_ACC_CALL_VIA_TRAMPOLINE|ZEND_ACC_NEVER_CACHE))) &&
			EXPECTED(!(fbc->common.scope->ce_flags & ZEND_ACC_TRAIT))) {
			CACHE_POLYMORPHIC_PTR(opline->result.num, ce, fbc);
		}
		if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!RUN_TIME_CACHE(&fbc->op_array))) {
			init_func_run_time_cache(&fbc->op_array);
		}
		if (IS_CONST != IS_CONST) {


		}
	} else {
		if (UNEXPECTED(ce->constructor == NULL)) {
			zend_throw_error(NULL, "Cannot call constructor");
			HANDLE_EXCEPTION();
		}
		if (Z_TYPE(EX(This)) == IS_OBJECT && Z_OBJ(EX(This))->ce != ce->constructor->common.scope && (ce->constructor->common.fn_flags & ZEND_ACC_PRIVATE)) {
			zend_throw_error(NULL, "Cannot call private %s::__construct()", ZSTR_VAL(ce->name));
			HANDLE_EXCEPTION();
		}
		fbc = ce->constructor;
		if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!RUN_TIME_CACHE(&fbc->op_array))) {
			init_func_run_time_cache(&fbc->op_array);
		}
	}

	if (!(fbc->common.fn_flags & ZEND_ACC_STATIC)) {
		if (Z_TYPE(EX(This)) == IS_OBJECT && instanceof_function(Z_OBJCE(EX(This)), ce)) {
			ce = (zend_class_entry*)Z_OBJ(EX(This));
			call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_HAS_THIS;
		} else {
			zend_non_static_method_call(fbc);
			HANDLE_EXCEPTION();
		}
	} else {
		/* previous opcode is ZEND_FETCH_CLASS */
		if (IS_UNUSED == IS_UNUSED
		 && ((opline->op1.num & ZEND_FETCH_CLASS_MASK) == ZEND_FETCH_CLASS_PARENT ||
		     (opline->op1.num & ZEND_FETCH_CLASS_MASK) == ZEND_FETCH_CLASS_SELF)) {
			if (Z_TYPE(EX(This)) == IS_OBJECT) {
				ce = Z_OBJCE(EX(This));
			} else {
				ce = Z_CE(EX(This));
			}
		}
		call_info = ZEND_CALL_NESTED_FUNCTION;
	}

	call = zend_vm_stack_push_call_frame(call_info,
		fbc, opline->extended_value, ce);
	call->prev_execute_data = EX(call);
	EX(call) = call;

	ZEND_VM_NEXT_OPCODE();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_CHECK_FUNC_ARG_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	uint32_t arg_num;

	if (IS_CONST == IS_CONST) {
		zend_string *arg_name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
		arg_num = zend_get_arg_offset_by_name(
			EX(call)->func, arg_name, CACHE_ADDR(opline->result.num)) + 1;
		if (UNEXPECTED(arg_num == 0)) {
			/* Treat this as a by-value argument, and throw an error during SEND. */
			ZEND_DEL_CALL_FLAG(EX(call), ZEND_CALL_SEND_ARG_BY_REF);
			ZEND_VM_NEXT_OPCODE();
		}
	} else {
		arg_num = opline->op2.num;
	}

	if (EXPECTED(arg_num <= MAX_ARG_FLAG_NUM)) {
		if (QUICK_ARG_SHOULD_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
			ZEND_ADD_CALL_FLAG(EX(call), ZEND_CALL_SEND_ARG_BY_REF);
		} else {
			ZEND_DEL_CALL_FLAG(EX(call), ZEND_CALL_SEND_ARG_BY_REF);
		}
	} else if (ARG_SHOULD_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
		ZEND_ADD_CALL_FLAG(EX(call), ZEND_CALL_SEND_ARG_BY_REF);
	} else {
		ZEND_DEL_CALL_FLAG(EX(call), ZEND_CALL_SEND_ARG_BY_REF);
	}
	ZEND_VM_NEXT_OPCODE();
}

static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_FETCH_CONSTANT_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zend_constant *c;

	c = CACHED_PTR(opline->extended_value);
	if (EXPECTED(c != NULL) && EXPECTED(!IS_SPECIAL_CACHE_VAL(c))) {
		ZVAL_COPY_OR_DUP(EX_VAR(opline->result.var), &c->value);
		ZEND_VM_NEXT_OPCODE();
	}

	SAVE_OPLINE();
	zend_quick_get_constant(RT_CONSTANT(opline, opline->op2) + 1, opline->op1.num OPLINE_CC EXECUTE_DATA_CC);
	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_FETCH_CLASS_CONSTANT_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	zend_class_entry *ce, *scope;
	zend_class_constant *c;
	zval *value, *zv, *constant_zv;
	zend_string *constant_name;
	USE_OPLINE

	SAVE_OPLINE();

	do {
		if (IS_UNUSED == IS_CONST && IS_CONST == IS_CONST) {
			if (EXPECTED(CACHED_PTR(opline->extended_value + sizeof(void*)))) {
				value = CACHED_PTR(opline->extended_value + sizeof(void*));
				break;
			}
		}
		if (IS_UNUSED == IS_CONST) {
			if (EXPECTED(CACHED_PTR(opline->extended_value))) {
				ce = CACHED_PTR(opline->extended_value);
			} else {
				ce = zend_fetch_class_by_name(Z_STR_P(RT_CONSTANT(opline, opline->op1)), Z_STR_P(RT_CONSTANT(opline, opline->op1) + 1), ZEND_FETCH_CLASS_DEFAULT | ZEND_FETCH_CLASS_EXCEPTION);
				if (UNEXPECTED(ce == NULL)) {
					ZVAL_UNDEF(EX_VAR(opline->result.var));


					HANDLE_EXCEPTION();
				}
				CACHE_PTR(opline->extended_value, ce);
			}
		} else if (IS_UNUSED == IS_UNUSED) {
			ce = zend_fetch_class(NULL, opline->op1.num);
			if (UNEXPECTED(ce == NULL)) {
				ZVAL_UNDEF(EX_VAR(opline->result.var));


				HANDLE_EXCEPTION();
			}
		} else {
			ce = Z_CE_P(EX_VAR(opline->op1.var));
		}
		if (IS_UNUSED != IS_CONST
			&& IS_CONST == IS_CONST
			&& EXPECTED(CACHED_PTR(opline->extended_value) == ce)) {
			value = CACHED_PTR(opline->extended_value + sizeof(void*));
			break;
		}

		constant_zv = RT_CONSTANT(opline, opline->op2);
		if (UNEXPECTED(Z_TYPE_P(constant_zv) != IS_STRING)) {
			zend_invalid_class_constant_type_error(Z_TYPE_P(constant_zv));
			ZVAL_UNDEF(EX_VAR(opline->result.var));


			HANDLE_EXCEPTION();
		}
		constant_name = Z_STR_P(constant_zv);
		/* Magic 'class' for constant OP2 is caught at compile-time */
		if (IS_CONST != IS_CONST && UNEXPECTED(zend_string_equals_literal_ci(constant_name, "class"))) {
			ZVAL_STR_COPY(EX_VAR(opline->result.var), ce->name);


			ZEND_VM_NEXT_OPCODE();
		}
		zv = IS_CONST == IS_CONST
			? zend_hash_find_known_hash(CE_CONSTANTS_TABLE(ce), constant_name)
			: zend_hash_find(CE_CONSTANTS_TABLE(ce), constant_name);

		if (EXPECTED(zv != NULL)) {
			c = Z_PTR_P(zv);
			scope = EX(func)->op_array.scope;
			if (!zend_verify_const_access(c, scope)) {
				zend_throw_error(NULL, "Cannot access %s constant %s::%s", zend_visibility_string(ZEND_CLASS_CONST_FLAGS(c)), ZSTR_VAL(ce->name), ZSTR_VAL(constant_name));
				ZVAL_UNDEF(EX_VAR(opline->result.var));


				HANDLE_EXCEPTION();
			}

			if (ce->ce_flags & ZEND_ACC_TRAIT) {
				zend_throw_error(NULL, "Cannot access trait constant %s::%s directly", ZSTR_VAL(ce->name), ZSTR_VAL(constant_name));
				ZVAL_UNDEF(EX_VAR(opline->result.var));


				HANDLE_EXCEPTION();
			}

			bool is_constant_deprecated = ZEND_CLASS_CONST_FLAGS(c) & ZEND_ACC_DEPRECATED;
			if (UNEXPECTED(is_constant_deprecated) && !CONST_IS_RECURSIVE(c)) {
				if (c->ce->type == ZEND_USER_CLASS) {
					/* Recursion protection only applied to user constants, GH-18463 */
					CONST_PROTECT_RECURSION(c);
				}
				zend_deprecated_class_constant(c, constant_name);
				if (c->ce->type == ZEND_USER_CLASS) {
					CONST_UNPROTECT_RECURSION(c);
				}

				if (EG(exception)) {
					ZVAL_UNDEF(EX_VAR(opline->result.var));


					HANDLE_EXCEPTION();
				}
			}

			value = &c->value;
			// Enums require loading of all class constants to build the backed enum table
			if (ce->ce_flags & ZEND_ACC_ENUM && ce->enum_backing_type != IS_UNDEF && ce->type == ZEND_USER_CLASS && !(ce->ce_flags & ZEND_ACC_CONSTANTS_UPDATED)) {
				if (UNEXPECTED(zend_update_class_constants(ce) == FAILURE)) {
					ZVAL_UNDEF(EX_VAR(opline->result.var));


					HANDLE_EXCEPTION();
				}
			}
			if (Z_TYPE_P(value) == IS_CONSTANT_AST) {
				if (UNEXPECTED(zend_update_class_constant(c, constant_name, c->ce) != SUCCESS)) {
					ZVAL_UNDEF(EX_VAR(opline->result.var));


					HANDLE_EXCEPTION();
				}
			}
			if (IS_CONST == IS_CONST && !is_constant_deprecated) {
				CACHE_POLYMORPHIC_PTR(opline->extended_value, ce, value);
			}
		} else {
			zend_throw_error(NULL, "Undefined constant %s::%s",
				ZSTR_VAL(ce->name), ZSTR_VAL(constant_name));
			ZVAL_UNDEF(EX_VAR(opline->result.var));


			HANDLE_EXCEPTION();
		}
	} while (0);

	ZVAL_COPY_OR_DUP(EX_VAR(opline->result.var), value);


	ZEND_VM_NEXT_OPCODE();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_INIT_ARRAY_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	zval *array;
	uint32_t size;
	USE_OPLINE

	SAVE_OPLINE();
	array = EX_VAR(opline->result.var);
	if (IS_UNUSED != IS_UNUSED) {
		size = opline->extended_value >> ZEND_ARRAY_SIZE_SHIFT;
		ZVAL_ARR(array, zend_new_array(size));
		/* Explicitly initialize array as not-packed if flag is set */
		if (opline->extended_value & ZEND_ARRAY_NOT_PACKED) {
			zend_hash_real_init_mixed(Z_ARRVAL_P(array));
		}
		ZEND_VM_TAIL_CALL(ZEND_NULL_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
	} else {
		ZVAL_ARR(array, zend_new_array(0));
		ZEND_VM_NEXT_OPCODE();
	}
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_UNSET_OBJ_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *container;
	zval *offset;
	zend_string *name, *tmp_name;

	SAVE_OPLINE();
	container = &EX(This);
	offset = RT_CONSTANT(opline, opline->op2);

	do {
		if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT)) {
			if (Z_ISREF_P(container)) {
				container = Z_REFVAL_P(container);
				if (Z_TYPE_P(container) != IS_OBJECT) {
					if (IS_UNUSED == IS_CV
					 && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
						ZVAL_UNDEFINED_OP1();
					}
					break;
				}
			} else {
				break;
			}
		}
		if (IS_CONST == IS_CONST) {
			name = Z_STR_P(offset);
		} else {
			name = zval_try_get_tmp_string(offset, &tmp_name);
			if (UNEXPECTED(!name)) {
				break;
			}
		}
		Z_OBJ_HT_P(container)->unset_property(Z_OBJ_P(container), name, ((IS_CONST == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL));
		if (IS_CONST != IS_CONST) {
			zend_tmp_string_release(tmp_name);
		}
	} while (0);




	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *container;
	int result;
	zval *offset;
	zend_string *name, *tmp_name;

	SAVE_OPLINE();
	container = &EX(This);
	offset = RT_CONSTANT(opline, opline->op2);

	if (IS_UNUSED == IS_CONST ||
	    (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
		if ((IS_UNUSED & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
			container = Z_REFVAL_P(container);
			if (UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT)) {
				result = (opline->extended_value & ZEND_ISEMPTY);
				goto isset_object_finish;
			}
		} else {
			result = (opline->extended_value & ZEND_ISEMPTY);
			goto isset_object_finish;
		}
	}

	if (IS_CONST == IS_CONST) {
		name = Z_STR_P(offset);
	} else {
		name = zval_try_get_tmp_string(offset, &tmp_name);
		if (UNEXPECTED(!name)) {
			result = 0;
			goto isset_object_finish;
		}
	}

	result =
		(opline->extended_value & ZEND_ISEMPTY) ^
		Z_OBJ_HT_P(container)->has_property(Z_OBJ_P(container), name, (opline->extended_value & ZEND_ISEMPTY), ((IS_CONST == IS_CONST) ? CACHE_ADDR(opline->extended_value & ~ZEND_ISEMPTY) : NULL));

	if (IS_CONST != IS_CONST) {
		zend_tmp_string_release(tmp_name);
	}

isset_object_finish:




	ZEND_VM_SMART_BRANCH(result, 1);
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_YIELD_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE

	zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C);

	SAVE_OPLINE();
	if (UNEXPECTED(generator->flags & ZEND_GENERATOR_FORCED_CLOSE)) {
		ZEND_VM_TAIL_CALL(zend_yield_in_closed_generator_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
	}

	/* Destroy the previously yielded value */
	zval_ptr_dtor(&generator->value);

	/* Destroy the previously yielded key */
	zval_ptr_dtor(&generator->key);

	/* Set the new yielded value */
	if (IS_UNUSED != IS_UNUSED) {
		if (UNEXPECTED(EX(func)->op_array.fn_flags & ZEND_ACC_RETURN_REFERENCE)) {
			/* Constants and temporary variables aren't yieldable by reference,
			 * but we still allow them with a notice. */
			if (IS_UNUSED & (IS_CONST|IS_TMP_VAR)) {
				zval *value;

				zend_error(E_NOTICE, "Only variable references should be yielded by reference");

				value = NULL;
				ZVAL_COPY_VALUE(&generator->value, value);
				if (IS_UNUSED == IS_CONST) {
					if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
						Z_ADDREF(generator->value);
					}
				}
			} else {
				zval *value_ptr = NULL;

				/* If a function call result is yielded and the function did
				 * not return by reference we throw a notice. */
				do {
					if (IS_UNUSED == IS_VAR) {
						ZEND_ASSERT(value_ptr != &EG(uninitialized_zval));
						if (opline->extended_value == ZEND_RETURNS_FUNCTION
						 && !Z_ISREF_P(value_ptr)) {
							zend_error(E_NOTICE, "Only variable references should be yielded by reference");
							ZVAL_COPY(&generator->value, value_ptr);
							break;
						}
					}
					if (Z_ISREF_P(value_ptr)) {
						Z_ADDREF_P(value_ptr);
					} else {
						ZVAL_MAKE_REF_EX(value_ptr, 2);
					}
					ZVAL_REF(&generator->value, Z_REF_P(value_ptr));
				} while (0);


			}
		} else {
			zval *value = NULL;

			/* Consts, temporary variables and references need copying */
			if (IS_UNUSED == IS_CONST) {
				ZVAL_COPY_VALUE(&generator->value, value);
				if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
					Z_ADDREF(generator->value);
				}
			} else if (IS_UNUSED == IS_TMP_VAR) {
				ZVAL_COPY_VALUE(&generator->value, value);
			} else if ((IS_UNUSED & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) {
				ZVAL_COPY(&generator->value, Z_REFVAL_P(value));


			} else {
				ZVAL_COPY_VALUE(&generator->value, value);
				if (IS_UNUSED == IS_CV) {
					if (Z_OPT_REFCOUNTED_P(value)) Z_ADDREF_P(value);
				}
			}
		}
	} else {
		/* If no value was specified yield null */
		ZVAL_NULL(&generator->value);
	}

	/* Set the new yielded key */
	if (IS_CONST != IS_UNUSED) {
		zval *key = RT_CONSTANT(opline, opline->op2);
		if ((IS_CONST & (IS_CV|IS_VAR)) && UNEXPECTED(Z_TYPE_P(key) == IS_REFERENCE)) {
			key = Z_REFVAL_P(key);
		}
		ZVAL_COPY(&generator->key, key);


		if (Z_TYPE(generator->key) == IS_LONG
		    && Z_LVAL(generator->key) > generator->largest_used_integer_key
		) {
			generator->largest_used_integer_key = Z_LVAL(generator->key);
		}
	} else {
		/* If no key was specified we use auto-increment keys */
		generator->largest_used_integer_key++;
		ZVAL_LONG(&generator->key, generator->largest_used_integer_key);
	}

	if (RETURN_VALUE_USED(opline)) {
		/* If the return value of yield is used set the send
		 * target and initialize it to NULL */
		generator->send_target = EX_VAR(opline->result.var);
		ZVAL_NULL(generator->send_target);
	} else {
		generator->send_target = NULL;
	}

	/* The GOTO VM uses a local opline variable. We need to set the opline
	 * variable in execute_data so we don't resume at an old position. */
	SAVE_OPLINE();

	ZEND_VM_RETURN();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_FETCH_CLASS_CONSTANT_SPEC_UNUSED_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	zend_class_entry *ce, *scope;
	zend_class_constant *c;
	zval *value, *zv, *constant_zv;
	zend_string *constant_name;
	USE_OPLINE

	SAVE_OPLINE();

	do {
		if (IS_UNUSED == IS_CONST && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST) {
			if (EXPECTED(CACHED_PTR(opline->extended_value + sizeof(void*)))) {
				value = CACHED_PTR(opline->extended_value + sizeof(void*));
				break;
			}
		}
		if (IS_UNUSED == IS_CONST) {
			if (EXPECTED(CACHED_PTR(opline->extended_value))) {
				ce = CACHED_PTR(opline->extended_value);
			} else {
				ce = zend_fetch_class_by_name(Z_STR_P(RT_CONSTANT(opline, opline->op1)), Z_STR_P(RT_CONSTANT(opline, opline->op1) + 1), ZEND_FETCH_CLASS_DEFAULT | ZEND_FETCH_CLASS_EXCEPTION);
				if (UNEXPECTED(ce == NULL)) {
					ZVAL_UNDEF(EX_VAR(opline->result.var));
					FREE_OP(opline->op2_type, opline->op2.var);
					HANDLE_EXCEPTION();
				}
				CACHE_PTR(opline->extended_value, ce);
			}
		} else if (IS_UNUSED == IS_UNUSED) {
			ce = zend_fetch_class(NULL, opline->op1.num);
			if (UNEXPECTED(ce == NULL)) {
				ZVAL_UNDEF(EX_VAR(opline->result.var));
				FREE_OP(opline->op2_type, opline->op2.var);
				HANDLE_EXCEPTION();
			}
		} else {
			ce = Z_CE_P(EX_VAR(opline->op1.var));
		}
		if (IS_UNUSED != IS_CONST
			&& (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST
			&& EXPECTED(CACHED_PTR(opline->extended_value) == ce)) {
			value = CACHED_PTR(opline->extended_value + sizeof(void*));
			break;
		}

		constant_zv = _get_zval_ptr_tmpvarcv(opline->op2_type, opline->op2, BP_VAR_R EXECUTE_DATA_CC);
		if (UNEXPECTED(Z_TYPE_P(constant_zv) != IS_STRING)) {
			zend_invalid_class_constant_type_error(Z_TYPE_P(constant_zv));
			ZVAL_UNDEF(EX_VAR(opline->result.var));
			FREE_OP(opline->op2_type, opline->op2.var);
			HANDLE_EXCEPTION();
		}
		constant_name = Z_STR_P(constant_zv);
		/* Magic 'class' for constant OP2 is caught at compile-time */
		if ((IS_TMP_VAR|IS_VAR|IS_CV) != IS_CONST && UNEXPECTED(zend_string_equals_literal_ci(constant_name, "class"))) {
			ZVAL_STR_COPY(EX_VAR(opline->result.var), ce->name);
			FREE_OP(opline->op2_type, opline->op2.var);
			ZEND_VM_NEXT_OPCODE();
		}
		zv = (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST
			? zend_hash_find_known_hash(CE_CONSTANTS_TABLE(ce), constant_name)
			: zend_hash_find(CE_CONSTANTS_TABLE(ce), constant_name);

		if (EXPECTED(zv != NULL)) {
			c = Z_PTR_P(zv);
			scope = EX(func)->op_array.scope;
			if (!zend_verify_const_access(c, scope)) {
				zend_throw_error(NULL, "Cannot access %s constant %s::%s", zend_visibility_string(ZEND_CLASS_CONST_FLAGS(c)), ZSTR_VAL(ce->name), ZSTR_VAL(constant_name));
				ZVAL_UNDEF(EX_VAR(opline->result.var));
				FREE_OP(opline->op2_type, opline->op2.var);
				HANDLE_EXCEPTION();
			}

			if (ce->ce_flags & ZEND_ACC_TRAIT) {
				zend_throw_error(NULL, "Cannot access trait constant %s::%s directly", ZSTR_VAL(ce->name), ZSTR_VAL(constant_name));
				ZVAL_UNDEF(EX_VAR(opline->result.var));
				FREE_OP(opline->op2_type, opline->op2.var);
				HANDLE_EXCEPTION();
			}

			bool is_constant_deprecated = ZEND_CLASS_CONST_FLAGS(c) & ZEND_ACC_DEPRECATED;
			if (UNEXPECTED(is_constant_deprecated) && !CONST_IS_RECURSIVE(c)) {
				if (c->ce->type == ZEND_USER_CLASS) {
					/* Recursion protection only applied to user constants, GH-18463 */
					CONST_PROTECT_RECURSION(c);
				}
				zend_deprecated_class_constant(c, constant_name);
				if (c->ce->type == ZEND_USER_CLASS) {
					CONST_UNPROTECT_RECURSION(c);
				}

				if (EG(exception)) {
					ZVAL_UNDEF(EX_VAR(opline->result.var));
					FREE_OP(opline->op2_type, opline->op2.var);
					HANDLE_EXCEPTION();
				}
			}

			value = &c->value;
			// Enums require loading of all class constants to build the backed enum table
			if (ce->ce_flags & ZEND_ACC_ENUM && ce->enum_backing_type != IS_UNDEF && ce->type == ZEND_USER_CLASS && !(ce->ce_flags & ZEND_ACC_CONSTANTS_UPDATED)) {
				if (UNEXPECTED(zend_update_class_constants(ce) == FAILURE)) {
					ZVAL_UNDEF(EX_VAR(opline->result.var));
					FREE_OP(opline->op2_type, opline->op2.var);
					HANDLE_EXCEPTION();
				}
			}
			if (Z_TYPE_P(value) == IS_CONSTANT_AST) {
				if (UNEXPECTED(zend_update_class_constant(c, constant_name, c->ce) != SUCCESS)) {
					ZVAL_UNDEF(EX_VAR(opline->result.var));
					FREE_OP(opline->op2_type, opline->op2.var);
					HANDLE_EXCEPTION();
				}
			}
			if ((IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST && !is_constant_deprecated) {
				CACHE_POLYMORPHIC_PTR(opline->extended_value, ce, value);
			}
		} else {
			zend_throw_error(NULL, "Undefined constant %s::%s",
				ZSTR_VAL(ce->name), ZSTR_VAL(constant_name));
			ZVAL_UNDEF(EX_VAR(opline->result.var));
			FREE_OP(opline->op2_type, opline->op2.var);
			HANDLE_EXCEPTION();
		}
	} while (0);

	ZVAL_COPY_OR_DUP(EX_VAR(opline->result.var), value);

	FREE_OP(opline->op2_type, opline->op2.var);
	ZEND_VM_NEXT_OPCODE();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_ASSIGN_OBJ_OP_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *object;
	zval *property;
	zval *value;
	zval *zptr;
	void *_cache_slot[3] = {0};
	void **cache_slot;
	zend_property_info *prop_info;
	zend_object *zobj;
	zend_string *name, *tmp_name;

	SAVE_OPLINE();
	object = &EX(This);
	property = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);

	do {
		value = get_op_data_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1);

		if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
			if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
				object = Z_REFVAL_P(object);
				goto assign_op_object;
			}
			if (IS_UNUSED == IS_CV
			 && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
				ZVAL_UNDEFINED_OP1();
			}
			zend_throw_non_object_error(object, property OPLINE_CC EXECUTE_DATA_CC);
			break;
		}

assign_op_object:
		/* here we are sure we are dealing with an object */
		zobj = Z_OBJ_P(object);
		if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
			name = Z_STR_P(property);
		} else {
			name = zval_try_get_tmp_string(property, &tmp_name);
			if (UNEXPECTED(!name)) {
				UNDEF_RESULT();
				break;
			}
		}
		cache_slot = ((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR((opline+1)->extended_value) : _cache_slot;
		if (EXPECTED((zptr = zobj->handlers->get_property_ptr_ptr(zobj, name, BP_VAR_RW, cache_slot)) != NULL)) {
			if (UNEXPECTED(Z_ISERROR_P(zptr))) {
				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
					ZVAL_NULL(EX_VAR(opline->result.var));
				}
			} else {
				zend_reference *ref;

				do {
					if (UNEXPECTED(Z_ISREF_P(zptr))) {
						ref = Z_REF_P(zptr);
						zptr = Z_REFVAL_P(zptr);
						if (UNEXPECTED(ZEND_REF_HAS_TYPE_SOURCES(ref))) {
							zend_binary_assign_op_typed_ref(ref, value OPLINE_CC EXECUTE_DATA_CC);
							break;
						}
					}

					prop_info = (zend_property_info*)CACHED_PTR_EX(cache_slot + 2);
					if (prop_info && ZEND_TYPE_IS_SET(prop_info->type)) {
						/* special case for typed properties */
						zend_binary_assign_op_typed_prop(prop_info, zptr, value OPLINE_CC EXECUTE_DATA_CC);
					} else {
						zend_binary_op(zptr, zptr, value OPLINE_CC);
					}
				} while (0);

				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
					ZVAL_COPY(EX_VAR(opline->result.var), zptr);
				}
			}
		} else {
			zend_assign_op_overloaded_property(zobj, name, cache_slot, value OPLINE_CC EXECUTE_DATA_CC);
		}
		if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
			zend_tmp_string_release(tmp_name);
		}
	} while (0);

	FREE_OP((opline+1)->op1_type, (opline+1)->op1.var);
	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));


	/* assign_obj has two opcodes! */
	ZEND_VM_NEXT_OPCODE_EX(1, 2);
}

/* No specialization for op_types (CONST|TMP|VAR|CV, UNUSED|CONST|TMPVAR) */
static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_PRE_INC_OBJ_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *object;
	zval *property;
	zval *zptr;
	void *_cache_slot[3] = {0};
	void **cache_slot;
	zend_property_info *prop_info;
	zend_object *zobj;
	zend_string *name, *tmp_name;

	SAVE_OPLINE();
	object = &EX(This);
	property = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);

	do {
		if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
			if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
				object = Z_REFVAL_P(object);
				goto pre_incdec_object;
			}
			if (IS_UNUSED == IS_CV
			 && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
				ZVAL_UNDEFINED_OP1();
			}
			zend_throw_non_object_error(object, property OPLINE_CC EXECUTE_DATA_CC);
			break;
		}

pre_incdec_object:
		/* here we are sure we are dealing with an object */
		zobj = Z_OBJ_P(object);
		if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
			name = Z_STR_P(property);
		} else {
			name = zval_try_get_tmp_string(property, &tmp_name);
			if (UNEXPECTED(!name)) {
				UNDEF_RESULT();
				break;
			}
		}
		cache_slot = ((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(opline->extended_value) : _cache_slot;
		if (EXPECTED((zptr = zobj->handlers->get_property_ptr_ptr(zobj, name, BP_VAR_RW, cache_slot)) != NULL)) {
			if (UNEXPECTED(Z_ISERROR_P(zptr))) {
				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
					ZVAL_NULL(EX_VAR(opline->result.var));
				}
			} else {
				prop_info = (zend_property_info *) CACHED_PTR_EX(cache_slot + 2);
				zend_pre_incdec_property_zval(zptr,
					prop_info && ZEND_TYPE_IS_SET(prop_info->type) ? prop_info : NULL OPLINE_CC EXECUTE_DATA_CC);
			}
		} else {
			zend_pre_incdec_overloaded_property(zobj, name, cache_slot OPLINE_CC EXECUTE_DATA_CC);
		}
		if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
			zend_tmp_string_release(tmp_name);
		}
	} while (0);

	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));


	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_POST_INC_OBJ_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *object;
	zval *property;
	zval *zptr;
	void *_cache_slot[3] = {0};
	void **cache_slot;
	zend_property_info *prop_info;
	zend_object *zobj;
	zend_string *name, *tmp_name;

	SAVE_OPLINE();
	object = &EX(This);
	property = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);

	do {
		if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
			if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
				object = Z_REFVAL_P(object);
				goto post_incdec_object;
			}
			if (IS_UNUSED == IS_CV
			 && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
				ZVAL_UNDEFINED_OP1();
			}
			zend_throw_non_object_error(object, property OPLINE_CC EXECUTE_DATA_CC);
			break;
		}

post_incdec_object:
		/* here we are sure we are dealing with an object */
		zobj = Z_OBJ_P(object);
		if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
			name = Z_STR_P(property);
		} else {
			name = zval_try_get_tmp_string(property, &tmp_name);
			if (UNEXPECTED(!name)) {
				ZVAL_UNDEF(EX_VAR(opline->result.var));
				break;
			}
		}
		cache_slot = ((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(opline->extended_value) : _cache_slot;
		if (EXPECTED((zptr = zobj->handlers->get_property_ptr_ptr(zobj, name, BP_VAR_RW, cache_slot)) != NULL)) {
			if (UNEXPECTED(Z_ISERROR_P(zptr))) {
				ZVAL_NULL(EX_VAR(opline->result.var));
			} else {
				prop_info = (zend_property_info*)CACHED_PTR_EX(cache_slot + 2);
				zend_post_incdec_property_zval(zptr,
					prop_info && ZEND_TYPE_IS_SET(prop_info->type) ? prop_info : NULL OPLINE_CC EXECUTE_DATA_CC);
			}
		} else {
			zend_post_incdec_overloaded_property(zobj, name, cache_slot OPLINE_CC EXECUTE_DATA_CC);
		}
		if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
			zend_tmp_string_release(tmp_name);
		}
	} while (0);

	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));


	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_FETCH_OBJ_R_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *container;
	void **cache_slot = NULL;

	SAVE_OPLINE();
	container = &EX(This);

	if (IS_UNUSED == IS_CONST ||
	    (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
		do {
			if ((IS_UNUSED & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
				container = Z_REFVAL_P(container);
				if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
					break;
				}
			}
			if (IS_UNUSED == IS_CV && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
				ZVAL_UNDEFINED_OP1();
			}
			zend_wrong_property_read(container, _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC));
			ZVAL_NULL(EX_VAR(opline->result.var));
			goto fetch_obj_r_finish;
		} while (0);
	}

	/* here we are sure we are dealing with an object */
	do {
		zend_object *zobj = Z_OBJ_P(container);
		zend_string *name, *tmp_name;
		zval *retval;

		if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
			cache_slot = CACHE_ADDR(opline->extended_value & ~ZEND_FETCH_REF /* FUNC_ARG fetch may contain it */);

			if (EXPECTED(zobj->ce == CACHED_PTR_EX(cache_slot))) {
				uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);

				if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
fetch_obj_r_simple:
					retval = OBJ_PROP(zobj, prop_offset);
					if (EXPECTED(Z_TYPE_INFO_P(retval) != IS_UNDEF)) {
						if (0 || (IS_UNUSED & (IS_TMP_VAR|IS_VAR)) != 0) {
							goto fetch_obj_r_copy;
						} else {
fetch_obj_r_fast_copy:
							ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
							ZEND_VM_NEXT_OPCODE();
						}
					}
				} else if (UNEXPECTED(IS_HOOKED_PROPERTY_OFFSET(prop_offset))) {
					zend_property_info *prop_info = CACHED_PTR_EX(cache_slot + 2);
					if (ZEND_IS_PROPERTY_HOOK_SIMPLE_READ(prop_offset)) {
						prop_offset = prop_info->offset;
						goto fetch_obj_r_simple;
					} else if (EXPECTED(ZEND_IS_PROPERTY_HOOK_SIMPLE_GET(prop_offset))) {
						zend_function *hook = prop_info->hooks[ZEND_PROPERTY_HOOK_GET];
						ZEND_ASSERT(hook->type == ZEND_USER_FUNCTION);
						ZEND_ASSERT(RUN_TIME_CACHE(&hook->op_array));

						uint32_t call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_HAS_THIS;
						if (IS_UNUSED & IS_CV) {
							GC_ADDREF(zobj);
						}
						if (IS_UNUSED & (IS_CV|IS_VAR|IS_TMP_VAR)) {
							call_info |= ZEND_CALL_RELEASE_THIS;
						}
						zend_execute_data *call = zend_vm_stack_push_call_frame(call_info, hook, 0, zobj);
						call->prev_execute_data = execute_data;
						call->call = NULL;
						call->return_value = EX_VAR(opline->result.var);
						call->run_time_cache = RUN_TIME_CACHE(&hook->op_array);

						execute_data = call;
						EG(current_execute_data) = execute_data;
						zend_init_cvs(0, hook->op_array.last_var EXECUTE_DATA_CC);

#if defined(ZEND_VM_IP_GLOBAL_REG) && ((ZEND_VM_KIND == ZEND_VM_KIND_CALL) || (ZEND_VM_KIND == ZEND_VM_KIND_HYBRID))
						opline = hook->op_array.opcodes;
#else
						EX(opline) = hook->op_array.opcodes;
#endif
						LOAD_OPLINE_EX();




						ZEND_VM_ENTER_EX();
					}
					/* Fall through to read_property for hooks. */
				} else if (EXPECTED(zobj->properties != NULL)) {
					ZEND_ASSERT(IS_DYNAMIC_PROPERTY_OFFSET(prop_offset));
					name = Z_STR_P(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC));
					if (!IS_UNKNOWN_DYNAMIC_PROPERTY_OFFSET(prop_offset)) {
						uintptr_t idx = ZEND_DECODE_DYN_PROP_OFFSET(prop_offset);

						if (EXPECTED(idx < zobj->properties->nNumUsed * sizeof(Bucket))) {
							Bucket *p = (Bucket*)((char*)zobj->properties->arData + idx);

							if (EXPECTED(p->key == name) ||
							    (EXPECTED(p->h == ZSTR_H(name)) &&
							     EXPECTED(p->key != NULL) &&
							     EXPECTED(zend_string_equal_content(p->key, name)))) {
								retval = &p->val;
								if (0 || (IS_UNUSED & (IS_TMP_VAR|IS_VAR)) != 0) {
									goto fetch_obj_r_copy;
								} else {
									goto fetch_obj_r_fast_copy;
								}
							}
						}
						CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_DYNAMIC_PROPERTY_OFFSET);
					}
					retval = zend_hash_find_known_hash(zobj->properties, name);
					if (EXPECTED(retval)) {
						uintptr_t idx = (char*)retval - (char*)zobj->properties->arData;
						CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_ENCODE_DYN_PROP_OFFSET(idx));
						if (0 || (IS_UNUSED & (IS_TMP_VAR|IS_VAR)) != 0) {
							goto fetch_obj_r_copy;
						} else {
							goto fetch_obj_r_fast_copy;
						}
					}
				}
			}
			name = Z_STR_P(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC));
		} else {
			name = zval_try_get_tmp_string(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC), &tmp_name);
			if (UNEXPECTED(!name)) {
				ZVAL_UNDEF(EX_VAR(opline->result.var));
				break;
			}
		}

#if ZEND_DEBUG
		/* For non-standard object handlers, verify a declared property type in debug builds.
		 * Fetch prop_info before calling read_property(), as it may deallocate the object. */
		zend_property_info *prop_info = NULL;
		if (zobj->handlers->read_property != zend_std_read_property) {
			prop_info = zend_get_property_info(zobj->ce, name, /* silent */ true);
		}
#endif
		retval = zobj->handlers->read_property(zobj, name, BP_VAR_R, cache_slot, EX_VAR(opline->result.var));
#if ZEND_DEBUG
		if (!EG(exception) && prop_info && prop_info != ZEND_WRONG_PROPERTY_INFO
				&& ZEND_TYPE_IS_SET(prop_info->type)) {
			ZVAL_OPT_DEREF(retval);
			zend_verify_property_type(prop_info, retval, /* strict */ true);
		}
#endif

		if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
			zend_tmp_string_release(tmp_name);
		}

		if (retval != EX_VAR(opline->result.var)) {
fetch_obj_r_copy:
			ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
		} else if (UNEXPECTED(Z_ISREF_P(retval))) {
			zend_unwrap_reference(retval);
		}
	} while (0);

fetch_obj_r_finish:
	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));


	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_FETCH_OBJ_W_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *property, *container, *result;

	SAVE_OPLINE();

	container = &EX(This);
	property = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
	result = EX_VAR(opline->result.var);
	zend_fetch_property_address(
		result, container, IS_UNUSED, property, (IS_TMP_VAR|IS_VAR),
		(((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(opline->extended_value & ~ZEND_FETCH_OBJ_FLAGS) : NULL),
		BP_VAR_W, opline->extended_value, NULL OPLINE_CC EXECUTE_DATA_CC);
	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
	if (IS_UNUSED == IS_VAR) {
		FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
	}
	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_FETCH_OBJ_RW_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *property, *container, *result;

	SAVE_OPLINE();
	container = &EX(This);
	property = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
	result = EX_VAR(opline->result.var);
	zend_fetch_property_address(result, container, IS_UNUSED, property, (IS_TMP_VAR|IS_VAR), (((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL), BP_VAR_RW, 0, NULL OPLINE_CC EXECUTE_DATA_CC);
	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
	if (IS_UNUSED == IS_VAR) {
		FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
	}
	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_FETCH_OBJ_IS_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *container;
	void **cache_slot = NULL;

	SAVE_OPLINE();
	container = &EX(This);

	if (IS_UNUSED == IS_CONST ||
	    (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
		do {
			if ((IS_UNUSED & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
				container = Z_REFVAL_P(container);
				if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
					break;
				}
			}
			if ((IS_TMP_VAR|IS_VAR) == IS_CV && Z_TYPE_P(EX_VAR(opline->op2.var)) == IS_UNDEF) {
				ZVAL_UNDEFINED_OP2();
			}
			ZVAL_NULL(EX_VAR(opline->result.var));
			goto fetch_obj_is_finish;
		} while (0);
	}

	/* here we are sure we are dealing with an object */
	do {
		zend_object *zobj = Z_OBJ_P(container);
		zend_string *name, *tmp_name;
		zval *retval;

		if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
			cache_slot = CACHE_ADDR(opline->extended_value);

			if (EXPECTED(zobj->ce == CACHED_PTR_EX(cache_slot))) {
				uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);

				if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
fetch_obj_is_simple:
					retval = OBJ_PROP(zobj, prop_offset);
					if (EXPECTED(Z_TYPE_P(retval) != IS_UNDEF)) {
						if (0 || (IS_UNUSED & (IS_TMP_VAR|IS_VAR)) != 0) {
							goto fetch_obj_is_copy;
						} else {
fetch_obj_is_fast_copy:
							ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
							ZEND_VM_NEXT_OPCODE();
						}
					}
				} else if (UNEXPECTED(IS_HOOKED_PROPERTY_OFFSET(prop_offset))) {
					if (ZEND_IS_PROPERTY_HOOK_SIMPLE_READ(prop_offset)) {
						zend_property_info *prop_info = CACHED_PTR_EX(cache_slot + 2);
						prop_offset = prop_info->offset;
						goto fetch_obj_is_simple;
					}
					/* Fall through to read_property for hooks. */
				} else if (EXPECTED(zobj->properties != NULL)) {
					ZEND_ASSERT(IS_DYNAMIC_PROPERTY_OFFSET(prop_offset));
					name = Z_STR_P(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC));
					if (!IS_UNKNOWN_DYNAMIC_PROPERTY_OFFSET(prop_offset)) {
						uintptr_t idx = ZEND_DECODE_DYN_PROP_OFFSET(prop_offset);

						if (EXPECTED(idx < zobj->properties->nNumUsed * sizeof(Bucket))) {
							Bucket *p = (Bucket*)((char*)zobj->properties->arData + idx);

							if (EXPECTED(p->key == name) ||
							    (EXPECTED(p->h == ZSTR_H(name)) &&
							     EXPECTED(p->key != NULL) &&
							     EXPECTED(zend_string_equal_content(p->key, name)))) {
								retval = &p->val;
								if (0 || (IS_UNUSED & (IS_TMP_VAR|IS_VAR)) != 0) {
									goto fetch_obj_is_copy;
								} else {
									goto fetch_obj_is_fast_copy;
								}
							}
						}
						CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_DYNAMIC_PROPERTY_OFFSET);
					}
					retval = zend_hash_find_known_hash(zobj->properties, name);
					if (EXPECTED(retval)) {
						uintptr_t idx = (char*)retval - (char*)zobj->properties->arData;
						CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_ENCODE_DYN_PROP_OFFSET(idx));
						if (0 || (IS_UNUSED & (IS_TMP_VAR|IS_VAR)) != 0) {
							goto fetch_obj_is_copy;
						} else {
							goto fetch_obj_is_fast_copy;
						}
					}
				}
			}
			name = Z_STR_P(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC));
		} else {
			name = zval_try_get_tmp_string(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC), &tmp_name);
			if (UNEXPECTED(!name)) {
				ZVAL_UNDEF(EX_VAR(opline->result.var));
				break;
			}
		}

		retval = zobj->handlers->read_property(zobj, name, BP_VAR_IS, cache_slot, EX_VAR(opline->result.var));

		if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
			zend_tmp_string_release(tmp_name);
		}

		if (retval != EX_VAR(opline->result.var)) {
fetch_obj_is_copy:
			ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
		} else if (UNEXPECTED(Z_ISREF_P(retval))) {
			zend_unwrap_reference(retval);
		}
	} while (0);

fetch_obj_is_finish:
	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));


	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_FETCH_OBJ_FUNC_ARG_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
#if 0
	USE_OPLINE
#endif

	if (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) {
		/* Behave like FETCH_OBJ_W */
		if ((IS_UNUSED & (IS_CONST|IS_TMP_VAR))) {
			ZEND_VM_TAIL_CALL(zend_use_tmp_in_write_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
		}
		ZEND_VM_TAIL_CALL(ZEND_FETCH_OBJ_W_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
	} else {
		ZEND_VM_TAIL_CALL(ZEND_FETCH_OBJ_R_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
	}
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_FETCH_OBJ_UNSET_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *container, *property, *result;

	SAVE_OPLINE();
	container = &EX(This);
	property = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
	result = EX_VAR(opline->result.var);
	zend_fetch_property_address(result, container, IS_UNUSED, property, (IS_TMP_VAR|IS_VAR), (((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL), BP_VAR_UNSET, 0, NULL OPLINE_CC EXECUTE_DATA_CC);
	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
	if (IS_UNUSED == IS_VAR) {
		FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
	}
	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *object, *value, tmp;
	zend_object *zobj;
	zend_string *name, *tmp_name;
	zend_refcounted *garbage = NULL;

	SAVE_OPLINE();
	object = &EX(This);
	value = RT_CONSTANT((opline+1), (opline+1)->op1);

	if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
		if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
			object = Z_REFVAL_P(object);
			goto assign_object;
		}
		zend_throw_non_object_error(object, _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC) OPLINE_CC EXECUTE_DATA_CC);
		value = &EG(uninitialized_zval);
		goto free_and_exit_assign_obj;
	}

assign_object:
	zobj = Z_OBJ_P(object);
	if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
		if (EXPECTED(zobj->ce == CACHED_PTR(opline->extended_value))) {
			void **cache_slot = CACHE_ADDR(opline->extended_value);
			uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
			zval *property_val;
			zend_property_info *prop_info;

			if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
				prop_info = (zend_property_info*) CACHED_PTR_EX(cache_slot + 2);

assign_obj_simple:
				property_val = OBJ_PROP(zobj, prop_offset);
				if (Z_TYPE_P(property_val) != IS_UNDEF) {
					if (prop_info != NULL) {
						value = zend_assign_to_typed_prop(prop_info, property_val, value, &garbage EXECUTE_DATA_CC);
						goto free_and_exit_assign_obj;
					} else {
fast_assign_obj:
						value = zend_assign_to_variable_ex(property_val, value, IS_CONST, EX_USES_STRICT_TYPES(), &garbage);
						if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
							ZVAL_COPY(EX_VAR(opline->result.var), value);
						}
						goto exit_assign_obj;
					}
				}
			} else if (EXPECTED(IS_DYNAMIC_PROPERTY_OFFSET(prop_offset))) {
				name = Z_STR_P(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC));
				if (UNEXPECTED(zend_lazy_object_must_init(zobj))) {
					zobj = zend_lazy_object_init(zobj);
					if (!zobj) {
						value = &EG(uninitialized_zval);
						goto free_and_exit_assign_obj;
					}
				}
				if (!zobj->ce->__set && (zobj->ce->ce_flags & ZEND_ACC_ALLOW_DYNAMIC_PROPERTIES)) {
					rebuild_object_properties_internal(zobj);
				}
				if (EXPECTED(zobj->properties != NULL)) {
					if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
						if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
							GC_DELREF(zobj->properties);
						}
						zobj->properties = zend_array_dup(zobj->properties);
					}
					property_val = zend_hash_find_known_hash(zobj->properties, name);
					if (property_val) {
						goto fast_assign_obj;
					}
				}

				if (!zobj->ce->__set && (zobj->ce->ce_flags & ZEND_ACC_ALLOW_DYNAMIC_PROPERTIES)) {
					if (IS_CONST == IS_CONST) {
						if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
							Z_ADDREF_P(value);
						}
					} else if (IS_CONST != IS_TMP_VAR) {
						if (Z_ISREF_P(value)) {
							if (IS_CONST == IS_VAR) {
								zend_reference *ref = Z_REF_P(value);
								if (GC_DELREF(ref) == 0) {
									ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
									efree_size(ref, sizeof(zend_reference));
									value = &tmp;
								} else {
									value = Z_REFVAL_P(value);
									Z_TRY_ADDREF_P(value);
								}
							} else {
								value = Z_REFVAL_P(value);
								Z_TRY_ADDREF_P(value);
							}
						} else if (IS_CONST == IS_CV) {
							Z_TRY_ADDREF_P(value);
						}
					}
					zend_hash_add_new(zobj->properties, name, value);
					if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
						ZVAL_COPY(EX_VAR(opline->result.var), value);
					}
					goto exit_assign_obj;
				}
			} else {
				ZEND_ASSERT(IS_HOOKED_PROPERTY_OFFSET(prop_offset));
				if (ZEND_IS_PROPERTY_HOOK_SIMPLE_WRITE(prop_offset)) {
					prop_info = CACHED_PTR_EX(cache_slot + 2);
					prop_offset = prop_info->offset;
					if (!ZEND_TYPE_IS_SET(prop_info->type)) {
						prop_info = NULL;
					}
					goto assign_obj_simple;
				}
				/* Fall through to write_property for hooks. */
			}
		}
		name = Z_STR_P(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC));
	} else {
		name = zval_try_get_tmp_string(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC), &tmp_name);
		if (UNEXPECTED(!name)) {


			UNDEF_RESULT();
			goto exit_assign_obj;
		}
	}

	if (IS_CONST == IS_CV || IS_CONST == IS_VAR) {
		ZVAL_DEREF(value);
	}

	value = zobj->handlers->write_property(zobj, name, value, ((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);

	if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
		zend_tmp_string_release(tmp_name);
	}

free_and_exit_assign_obj:
	if (UNEXPECTED(RETURN_VALUE_USED(opline)) && value) {
		ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
	}


exit_assign_obj:
	if (garbage) {
		GC_DTOR_NO_REF(garbage);
	}
	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));


	/* assign_obj has two opcodes! */
	ZEND_VM_NEXT_OPCODE_EX(1, 2);
}

/* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CONST|VAR) */
static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *object, *value, tmp;
	zend_object *zobj;
	zend_string *name, *tmp_name;
	zend_refcounted *garbage = NULL;

	SAVE_OPLINE();
	object = &EX(This);
	value = _get_zval_ptr_tmp((opline+1)->op1.var EXECUTE_DATA_CC);

	if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
		if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
			object = Z_REFVAL_P(object);
			goto assign_object;
		}
		zend_throw_non_object_error(object, _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC) OPLINE_CC EXECUTE_DATA_CC);
		value = &EG(uninitialized_zval);
		goto free_and_exit_assign_obj;
	}

assign_object:
	zobj = Z_OBJ_P(object);
	if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
		if (EXPECTED(zobj->ce == CACHED_PTR(opline->extended_value))) {
			void **cache_slot = CACHE_ADDR(opline->extended_value);
			uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
			zval *property_val;
			zend_property_info *prop_info;

			if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
				prop_info = (zend_property_info*) CACHED_PTR_EX(cache_slot + 2);

assign_obj_simple:
				property_val = OBJ_PROP(zobj, prop_offset);
				if (Z_TYPE_P(property_val) != IS_UNDEF) {
					if (prop_info != NULL) {
						value = zend_assign_to_typed_prop(prop_info, property_val, value, &garbage EXECUTE_DATA_CC);
						goto free_and_exit_assign_obj;
					} else {
fast_assign_obj:
						value = zend_assign_to_variable_ex(property_val, value, IS_TMP_VAR, EX_USES_STRICT_TYPES(), &garbage);
						if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
							ZVAL_COPY(EX_VAR(opline->result.var), value);
						}
						goto exit_assign_obj;
					}
				}
			} else if (EXPECTED(IS_DYNAMIC_PROPERTY_OFFSET(prop_offset))) {
				name = Z_STR_P(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC));
				if (UNEXPECTED(zend_lazy_object_must_init(zobj))) {
					zobj = zend_lazy_object_init(zobj);
					if (!zobj) {
						value = &EG(uninitialized_zval);
						goto free_and_exit_assign_obj;
					}
				}
				if (!zobj->ce->__set && (zobj->ce->ce_flags & ZEND_ACC_ALLOW_DYNAMIC_PROPERTIES)) {
					rebuild_object_properties_internal(zobj);
				}
				if (EXPECTED(zobj->properties != NULL)) {
					if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
						if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
							GC_DELREF(zobj->properties);
						}
						zobj->properties = zend_array_dup(zobj->properties);
					}
					property_val = zend_hash_find_known_hash(zobj->properties, name);
					if (property_val) {
						goto fast_assign_obj;
					}
				}

				if (!zobj->ce->__set && (zobj->ce->ce_flags & ZEND_ACC_ALLOW_DYNAMIC_PROPERTIES)) {
					if (IS_TMP_VAR == IS_CONST) {
						if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
							Z_ADDREF_P(value);
						}
					} else if (IS_TMP_VAR != IS_TMP_VAR) {
						if (Z_ISREF_P(value)) {
							if (IS_TMP_VAR == IS_VAR) {
								zend_reference *ref = Z_REF_P(value);
								if (GC_DELREF(ref) == 0) {
									ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
									efree_size(ref, sizeof(zend_reference));
									value = &tmp;
								} else {
									value = Z_REFVAL_P(value);
									Z_TRY_ADDREF_P(value);
								}
							} else {
								value = Z_REFVAL_P(value);
								Z_TRY_ADDREF_P(value);
							}
						} else if (IS_TMP_VAR == IS_CV) {
							Z_TRY_ADDREF_P(value);
						}
					}
					zend_hash_add_new(zobj->properties, name, value);
					if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
						ZVAL_COPY(EX_VAR(opline->result.var), value);
					}
					goto exit_assign_obj;
				}
			} else {
				ZEND_ASSERT(IS_HOOKED_PROPERTY_OFFSET(prop_offset));
				if (ZEND_IS_PROPERTY_HOOK_SIMPLE_WRITE(prop_offset)) {
					prop_info = CACHED_PTR_EX(cache_slot + 2);
					prop_offset = prop_info->offset;
					if (!ZEND_TYPE_IS_SET(prop_info->type)) {
						prop_info = NULL;
					}
					goto assign_obj_simple;
				}
				/* Fall through to write_property for hooks. */
			}
		}
		name = Z_STR_P(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC));
	} else {
		name = zval_try_get_tmp_string(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC), &tmp_name);
		if (UNEXPECTED(!name)) {
			zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
			UNDEF_RESULT();
			goto exit_assign_obj;
		}
	}

	if (IS_TMP_VAR == IS_CV || IS_TMP_VAR == IS_VAR) {
		ZVAL_DEREF(value);
	}

	value = zobj->handlers->write_property(zobj, name, value, ((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);

	if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
		zend_tmp_string_release(tmp_name);
	}

free_and_exit_assign_obj:
	if (UNEXPECTED(RETURN_VALUE_USED(opline)) && value) {
		ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
	}
	zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
exit_assign_obj:
	if (garbage) {
		GC_DTOR_NO_REF(garbage);
	}
	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));


	/* assign_obj has two opcodes! */
	ZEND_VM_NEXT_OPCODE_EX(1, 2);
}

/* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CONST|VAR) */
static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *object, *value, tmp;
	zend_object *zobj;
	zend_string *name, *tmp_name;
	zend_refcounted *garbage = NULL;

	SAVE_OPLINE();
	object = &EX(This);
	value = _get_zval_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);

	if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
		if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
			object = Z_REFVAL_P(object);
			goto assign_object;
		}
		zend_throw_non_object_error(object, _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC) OPLINE_CC EXECUTE_DATA_CC);
		value = &EG(uninitialized_zval);
		goto free_and_exit_assign_obj;
	}

assign_object:
	zobj = Z_OBJ_P(object);
	if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
		if (EXPECTED(zobj->ce == CACHED_PTR(opline->extended_value))) {
			void **cache_slot = CACHE_ADDR(opline->extended_value);
			uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
			zval *property_val;
			zend_property_info *prop_info;

			if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
				prop_info = (zend_property_info*) CACHED_PTR_EX(cache_slot + 2);

assign_obj_simple:
				property_val = OBJ_PROP(zobj, prop_offset);
				if (Z_TYPE_P(property_val) != IS_UNDEF) {
					if (prop_info != NULL) {
						value = zend_assign_to_typed_prop(prop_info, property_val, value, &garbage EXECUTE_DATA_CC);
						goto free_and_exit_assign_obj;
					} else {
fast_assign_obj:
						value = zend_assign_to_variable_ex(property_val, value, IS_VAR, EX_USES_STRICT_TYPES(), &garbage);
						if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
							ZVAL_COPY(EX_VAR(opline->result.var), value);
						}
						goto exit_assign_obj;
					}
				}
			} else if (EXPECTED(IS_DYNAMIC_PROPERTY_OFFSET(prop_offset))) {
				name = Z_STR_P(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC));
				if (UNEXPECTED(zend_lazy_object_must_init(zobj))) {
					zobj = zend_lazy_object_init(zobj);
					if (!zobj) {
						value = &EG(uninitialized_zval);
						goto free_and_exit_assign_obj;
					}
				}
				if (!zobj->ce->__set && (zobj->ce->ce_flags & ZEND_ACC_ALLOW_DYNAMIC_PROPERTIES)) {
					rebuild_object_properties_internal(zobj);
				}
				if (EXPECTED(zobj->properties != NULL)) {
					if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
						if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
							GC_DELREF(zobj->properties);
						}
						zobj->properties = zend_array_dup(zobj->properties);
					}
					property_val = zend_hash_find_known_hash(zobj->properties, name);
					if (property_val) {
						goto fast_assign_obj;
					}
				}

				if (!zobj->ce->__set && (zobj->ce->ce_flags & ZEND_ACC_ALLOW_DYNAMIC_PROPERTIES)) {
					if (IS_VAR == IS_CONST) {
						if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
							Z_ADDREF_P(value);
						}
					} else if (IS_VAR != IS_TMP_VAR) {
						if (Z_ISREF_P(value)) {
							if (IS_VAR == IS_VAR) {
								zend_reference *ref = Z_REF_P(value);
								if (GC_DELREF(ref) == 0) {
									ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
									efree_size(ref, sizeof(zend_reference));
									value = &tmp;
								} else {
									value = Z_REFVAL_P(value);
									Z_TRY_ADDREF_P(value);
								}
							} else {
								value = Z_REFVAL_P(value);
								Z_TRY_ADDREF_P(value);
							}
						} else if (IS_VAR == IS_CV) {
							Z_TRY_ADDREF_P(value);
						}
					}
					zend_hash_add_new(zobj->properties, name, value);
					if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
						ZVAL_COPY(EX_VAR(opline->result.var), value);
					}
					goto exit_assign_obj;
				}
			} else {
				ZEND_ASSERT(IS_HOOKED_PROPERTY_OFFSET(prop_offset));
				if (ZEND_IS_PROPERTY_HOOK_SIMPLE_WRITE(prop_offset)) {
					prop_info = CACHED_PTR_EX(cache_slot + 2);
					prop_offset = prop_info->offset;
					if (!ZEND_TYPE_IS_SET(prop_info->type)) {
						prop_info = NULL;
					}
					goto assign_obj_simple;
				}
				/* Fall through to write_property for hooks. */
			}
		}
		name = Z_STR_P(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC));
	} else {
		name = zval_try_get_tmp_string(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC), &tmp_name);
		if (UNEXPECTED(!name)) {
			zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
			UNDEF_RESULT();
			goto exit_assign_obj;
		}
	}

	if (IS_VAR == IS_CV || IS_VAR == IS_VAR) {
		ZVAL_DEREF(value);
	}

	value = zobj->handlers->write_property(zobj, name, value, ((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);

	if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
		zend_tmp_string_release(tmp_name);
	}

free_and_exit_assign_obj:
	if (UNEXPECTED(RETURN_VALUE_USED(opline)) && value) {
		ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
	}
	zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
exit_assign_obj:
	if (garbage) {
		GC_DTOR_NO_REF(garbage);
	}
	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));


	/* assign_obj has two opcodes! */
	ZEND_VM_NEXT_OPCODE_EX(1, 2);
}

/* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CONST|VAR) */
static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *object, *value, tmp;
	zend_object *zobj;
	zend_string *name, *tmp_name;
	zend_refcounted *garbage = NULL;

	SAVE_OPLINE();
	object = &EX(This);
	value = _get_zval_ptr_cv_BP_VAR_R((opline+1)->op1.var EXECUTE_DATA_CC);

	if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
		if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
			object = Z_REFVAL_P(object);
			goto assign_object;
		}
		zend_throw_non_object_error(object, _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC) OPLINE_CC EXECUTE_DATA_CC);
		value = &EG(uninitialized_zval);
		goto free_and_exit_assign_obj;
	}

assign_object:
	zobj = Z_OBJ_P(object);
	if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
		if (EXPECTED(zobj->ce == CACHED_PTR(opline->extended_value))) {
			void **cache_slot = CACHE_ADDR(opline->extended_value);
			uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
			zval *property_val;
			zend_property_info *prop_info;

			if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
				prop_info = (zend_property_info*) CACHED_PTR_EX(cache_slot + 2);

assign_obj_simple:
				property_val = OBJ_PROP(zobj, prop_offset);
				if (Z_TYPE_P(property_val) != IS_UNDEF) {
					if (prop_info != NULL) {
						value = zend_assign_to_typed_prop(prop_info, property_val, value, &garbage EXECUTE_DATA_CC);
						goto free_and_exit_assign_obj;
					} else {
fast_assign_obj:
						value = zend_assign_to_variable_ex(property_val, value, IS_CV, EX_USES_STRICT_TYPES(), &garbage);
						if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
							ZVAL_COPY(EX_VAR(opline->result.var), value);
						}
						goto exit_assign_obj;
					}
				}
			} else if (EXPECTED(IS_DYNAMIC_PROPERTY_OFFSET(prop_offset))) {
				name = Z_STR_P(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC));
				if (UNEXPECTED(zend_lazy_object_must_init(zobj))) {
					zobj = zend_lazy_object_init(zobj);
					if (!zobj) {
						value = &EG(uninitialized_zval);
						goto free_and_exit_assign_obj;
					}
				}
				if (!zobj->ce->__set && (zobj->ce->ce_flags & ZEND_ACC_ALLOW_DYNAMIC_PROPERTIES)) {
					rebuild_object_properties_internal(zobj);
				}
				if (EXPECTED(zobj->properties != NULL)) {
					if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
						if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
							GC_DELREF(zobj->properties);
						}
						zobj->properties = zend_array_dup(zobj->properties);
					}
					property_val = zend_hash_find_known_hash(zobj->properties, name);
					if (property_val) {
						goto fast_assign_obj;
					}
				}

				if (!zobj->ce->__set && (zobj->ce->ce_flags & ZEND_ACC_ALLOW_DYNAMIC_PROPERTIES)) {
					if (IS_CV == IS_CONST) {
						if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
							Z_ADDREF_P(value);
						}
					} else if (IS_CV != IS_TMP_VAR) {
						if (Z_ISREF_P(value)) {
							if (IS_CV == IS_VAR) {
								zend_reference *ref = Z_REF_P(value);
								if (GC_DELREF(ref) == 0) {
									ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
									efree_size(ref, sizeof(zend_reference));
									value = &tmp;
								} else {
									value = Z_REFVAL_P(value);
									Z_TRY_ADDREF_P(value);
								}
							} else {
								value = Z_REFVAL_P(value);
								Z_TRY_ADDREF_P(value);
							}
						} else if (IS_CV == IS_CV) {
							Z_TRY_ADDREF_P(value);
						}
					}
					zend_hash_add_new(zobj->properties, name, value);
					if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
						ZVAL_COPY(EX_VAR(opline->result.var), value);
					}
					goto exit_assign_obj;
				}
			} else {
				ZEND_ASSERT(IS_HOOKED_PROPERTY_OFFSET(prop_offset));
				if (ZEND_IS_PROPERTY_HOOK_SIMPLE_WRITE(prop_offset)) {
					prop_info = CACHED_PTR_EX(cache_slot + 2);
					prop_offset = prop_info->offset;
					if (!ZEND_TYPE_IS_SET(prop_info->type)) {
						prop_info = NULL;
					}
					goto assign_obj_simple;
				}
				/* Fall through to write_property for hooks. */
			}
		}
		name = Z_STR_P(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC));
	} else {
		name = zval_try_get_tmp_string(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC), &tmp_name);
		if (UNEXPECTED(!name)) {


			UNDEF_RESULT();
			goto exit_assign_obj;
		}
	}

	if (IS_CV == IS_CV || IS_CV == IS_VAR) {
		ZVAL_DEREF(value);
	}

	value = zobj->handlers->write_property(zobj, name, value, ((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);

	if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
		zend_tmp_string_release(tmp_name);
	}

free_and_exit_assign_obj:
	if (UNEXPECTED(RETURN_VALUE_USED(opline)) && value) {
		ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
	}


exit_assign_obj:
	if (garbage) {
		GC_DTOR_NO_REF(garbage);
	}
	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));


	/* assign_obj has two opcodes! */
	ZEND_VM_NEXT_OPCODE_EX(1, 2);
}

/* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CONST|VAR) */
static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_ASSIGN_OBJ_REF_SPEC_UNUSED_TMPVAR_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *property, *container, *value_ptr;

	SAVE_OPLINE();

	container = &EX(This);
	property = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);

	value_ptr = _get_zval_ptr_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);

	if (1) {
		if (IS_UNUSED == IS_UNUSED) {
			if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
				zend_assign_to_property_reference_this_const(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
			} else {
				zend_assign_to_property_reference_this_var(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
			}
		} else {
			if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
				zend_assign_to_property_reference_var_const(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
			} else {
				zend_assign_to_property_reference_var_var(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
			}
		}
	} else {
		zend_assign_to_property_reference(container, IS_UNUSED, property, (IS_TMP_VAR|IS_VAR), value_ptr OPLINE_CC EXECUTE_DATA_CC);
	}


	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
	zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
	ZEND_VM_NEXT_OPCODE_EX(1, 2);
}

/* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CONST|VAR) */
static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_ASSIGN_OBJ_REF_SPEC_UNUSED_TMPVAR_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *property, *container, *value_ptr;

	SAVE_OPLINE();

	container = &EX(This);
	property = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);

	value_ptr = _get_zval_ptr_cv_BP_VAR_W((opline+1)->op1.var EXECUTE_DATA_CC);

	if (1) {
		if (IS_UNUSED == IS_UNUSED) {
			if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
				zend_assign_to_property_reference_this_const(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
			} else {
				zend_assign_to_property_reference_this_var(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
			}
		} else {
			if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
				zend_assign_to_property_reference_var_const(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
			} else {
				zend_assign_to_property_reference_var_var(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
			}
		}
	} else {
		zend_assign_to_property_reference(container, IS_UNUSED, property, (IS_TMP_VAR|IS_VAR), value_ptr OPLINE_CC EXECUTE_DATA_CC);
	}


	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));


	ZEND_VM_NEXT_OPCODE_EX(1, 2);
}

/* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CONST|VAR) */
static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_ROPE_INIT_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zend_string **rope;
	zval *var;

	/* Compiler allocates the necessary number of zval slots to keep the rope */
	rope = (zend_string**)EX_VAR(opline->result.var);
	if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
		var = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
		rope[0] = Z_STR_P(var);
		if (UNEXPECTED(Z_REFCOUNTED_P(var))) {
			Z_ADDREF_P(var);
		}
	} else {
		var = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
		if (EXPECTED(Z_TYPE_P(var) == IS_STRING)) {
			if ((IS_TMP_VAR|IS_VAR) == IS_CV) {
				rope[0] = zend_string_copy(Z_STR_P(var));
			} else {
				rope[0] = Z_STR_P(var);
			}
		} else {
			SAVE_OPLINE();
			if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(var) == IS_UNDEF)) {
				ZVAL_UNDEFINED_OP2();
			}
			rope[0] = zval_get_string_func(var);
			zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
			ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
		}
	}
	ZEND_VM_NEXT_OPCODE();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_FETCH_CLASS_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	zval *class_name;
	USE_OPLINE

	SAVE_OPLINE();
	if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED) {
		Z_CE_P(EX_VAR(opline->result.var)) = zend_fetch_class(NULL, opline->op1.num);
		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
	} else if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
		zend_class_entry *ce = CACHED_PTR(opline->extended_value);

		if (UNEXPECTED(ce == NULL)) {
			class_name = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
			ce = zend_fetch_class_by_name(Z_STR_P(class_name), Z_STR_P(class_name + 1), opline->op1.num);
			CACHE_PTR(opline->extended_value, ce);
		}
		Z_CE_P(EX_VAR(opline->result.var)) = ce;
	} else {
		class_name = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
try_class_name:
		if (Z_TYPE_P(class_name) == IS_OBJECT) {
			Z_CE_P(EX_VAR(opline->result.var)) = Z_OBJCE_P(class_name);
		} else if (Z_TYPE_P(class_name) == IS_STRING) {
			Z_CE_P(EX_VAR(opline->result.var)) = zend_fetch_class(Z_STR_P(class_name), opline->op1.num);
		} else if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && Z_TYPE_P(class_name) == IS_REFERENCE) {
			class_name = Z_REFVAL_P(class_name);
			goto try_class_name;
		} else {
			if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(class_name) == IS_UNDEF)) {
				ZVAL_UNDEFINED_OP2();
				if (UNEXPECTED(EG(exception) != NULL)) {
					HANDLE_EXCEPTION();
				}
			}
			zend_throw_error(NULL, "Class name must be a valid object or a string");
		}
	}

	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_INIT_METHOD_CALL_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *function_name;
	zval *object;
	zend_function *fbc;
	zend_class_entry *called_scope;
	zend_object *obj;
	zend_execute_data *call;
	uint32_t call_info;

	SAVE_OPLINE();

	object = &EX(This);

	if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
		function_name = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
	}

	if ((IS_TMP_VAR|IS_VAR) != IS_CONST &&
	    UNEXPECTED(Z_TYPE_P(function_name) != IS_STRING)) {
		do {
			if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && Z_ISREF_P(function_name)) {
				function_name = Z_REFVAL_P(function_name);
				if (EXPECTED(Z_TYPE_P(function_name) == IS_STRING)) {
					break;
				}
			} else if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) {
				ZVAL_UNDEFINED_OP2();
				if (UNEXPECTED(EG(exception) != NULL)) {


					HANDLE_EXCEPTION();
				}
			}
			zend_throw_error(NULL, "Method name must be a string");
			zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));


			HANDLE_EXCEPTION();
		} while (0);
	}

	if (IS_UNUSED == IS_UNUSED) {
		obj = Z_OBJ_P(object);
	} else {
		do {
			if (IS_UNUSED != IS_CONST && EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
				obj = Z_OBJ_P(object);
			} else {
				if ((IS_UNUSED & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(object))) {
					zend_reference *ref = Z_REF_P(object);

					object = &ref->val;
					if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
						obj = Z_OBJ_P(object);
						if (IS_UNUSED & IS_VAR) {
							if (UNEXPECTED(GC_DELREF(ref) == 0)) {
								efree_size(ref, sizeof(zend_reference));
							} else {
								Z_ADDREF_P(object);
							}
						}
						break;
					}
				}
				if (IS_UNUSED == IS_CV && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
					object = ZVAL_UNDEFINED_OP1();
					if (UNEXPECTED(EG(exception) != NULL)) {
						if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
							zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
						}
						HANDLE_EXCEPTION();
					}
				}
				if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
					function_name = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
				}
				zend_invalid_method_call(object, function_name);
				zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));


				HANDLE_EXCEPTION();
			}
		} while (0);
	}

	called_scope = obj->ce;

	if ((IS_TMP_VAR|IS_VAR) == IS_CONST &&
	    EXPECTED(CACHED_PTR(opline->result.num) == called_scope)) {
		fbc = CACHED_PTR(opline->result.num + sizeof(void*));
	} else {
		zend_object *orig_obj = obj;

		if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
			function_name = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
		}

		/* First, locate the function. */
		fbc = obj->handlers->get_method(&obj, Z_STR_P(function_name), (((IS_TMP_VAR|IS_VAR) == IS_CONST) ? (RT_CONSTANT(opline, opline->op2) + 1) : NULL));
		if (UNEXPECTED(fbc == NULL)) {
			if (EXPECTED(!EG(exception))) {
				zend_undefined_method(orig_obj->ce, Z_STR_P(function_name));
			}
			zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
			if ((IS_UNUSED & (IS_VAR|IS_TMP_VAR)) && GC_DELREF(orig_obj) == 0) {
				zend_objects_store_del(orig_obj);
			}
			HANDLE_EXCEPTION();
		}
		if ((IS_TMP_VAR|IS_VAR) == IS_CONST &&
		    EXPECTED(!(fbc->common.fn_flags & (ZEND_ACC_CALL_VIA_TRAMPOLINE|ZEND_ACC_NEVER_CACHE))) &&
		    EXPECTED(obj == orig_obj)) {
			CACHE_POLYMORPHIC_PTR(opline->result.num, called_scope, fbc);
		}
		if ((IS_UNUSED & (IS_VAR|IS_TMP_VAR)) && UNEXPECTED(obj != orig_obj)) {
			GC_ADDREF(obj); /* For $this pointer */
			if (GC_DELREF(orig_obj) == 0) {
				zend_objects_store_del(orig_obj);
			}
		}
		if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!RUN_TIME_CACHE(&fbc->op_array))) {
			init_func_run_time_cache(&fbc->op_array);
		}
	}

	if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
		zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
	}

	call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_HAS_THIS;
	if (UNEXPECTED((fbc->common.fn_flags & ZEND_ACC_STATIC) != 0)) {
		if ((IS_UNUSED & (IS_VAR|IS_TMP_VAR)) && GC_DELREF(obj) == 0) {
			zend_objects_store_del(obj);
			if (UNEXPECTED(EG(exception))) {
				HANDLE_EXCEPTION();
			}
		}
		/* call static method */
		obj = (zend_object*)called_scope;
		call_info = ZEND_CALL_NESTED_FUNCTION;
	} else if (IS_UNUSED & (IS_VAR|IS_TMP_VAR|IS_CV)) {
		if (IS_UNUSED == IS_CV) {
			GC_ADDREF(obj); /* For $this pointer */
		}
		/* CV may be changed indirectly (e.g. when it's a reference) */
		call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_HAS_THIS | ZEND_CALL_RELEASE_THIS;
	}

	call = zend_vm_stack_push_call_frame(call_info,
		fbc, opline->extended_value, obj);
	call->prev_execute_data = EX(call);
	EX(call) = call;

	ZEND_VM_NEXT_OPCODE();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_INIT_STATIC_METHOD_CALL_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *function_name;
	zend_class_entry *ce;
	uint32_t call_info;
	zend_function *fbc;
	zend_execute_data *call;

	SAVE_OPLINE();

	if (IS_UNUSED == IS_CONST) {
		/* no function found. try a static method in class */
		ce = CACHED_PTR(opline->result.num);
		if (UNEXPECTED(ce == NULL)) {
			ce = zend_fetch_class_by_name(Z_STR_P(RT_CONSTANT(opline, opline->op1)), Z_STR_P(RT_CONSTANT(opline, opline->op1) + 1), ZEND_FETCH_CLASS_DEFAULT | ZEND_FETCH_CLASS_EXCEPTION);
			if (UNEXPECTED(ce == NULL)) {
				zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
				HANDLE_EXCEPTION();
			}
			if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
				CACHE_PTR(opline->result.num, ce);
			}
		}
	} else if (IS_UNUSED == IS_UNUSED) {
		ce = zend_fetch_class(NULL, opline->op1.num);
		if (UNEXPECTED(ce == NULL)) {
			zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
			HANDLE_EXCEPTION();
		}
	} else {
		ce = Z_CE_P(EX_VAR(opline->op1.var));
	}

	if (IS_UNUSED == IS_CONST &&
	    (IS_TMP_VAR|IS_VAR) == IS_CONST &&
	    EXPECTED((fbc = CACHED_PTR(opline->result.num + sizeof(void*))) != NULL)) {
		/* nothing to do */
	} else if (IS_UNUSED != IS_CONST &&
	           (IS_TMP_VAR|IS_VAR) == IS_CONST &&
	           EXPECTED(CACHED_PTR(opline->result.num) == ce)) {
		fbc = CACHED_PTR(opline->result.num + sizeof(void*));
	} else if ((IS_TMP_VAR|IS_VAR) != IS_UNUSED) {
		function_name = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
		if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
			if (UNEXPECTED(Z_TYPE_P(function_name) != IS_STRING)) {
				do {
					if ((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV) && Z_ISREF_P(function_name)) {
						function_name = Z_REFVAL_P(function_name);
						if (EXPECTED(Z_TYPE_P(function_name) == IS_STRING)) {
							break;
						}
					} else if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) {
						ZVAL_UNDEFINED_OP2();
						if (UNEXPECTED(EG(exception) != NULL)) {
							HANDLE_EXCEPTION();
						}
					}
					zend_throw_error(NULL, "Method name must be a string");
					zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
					HANDLE_EXCEPTION();
				} while (0);
			}
		}

		if (ce->get_static_method) {
			fbc = ce->get_static_method(ce, Z_STR_P(function_name));
		} else {
			fbc = zend_std_get_static_method(ce, Z_STR_P(function_name), (((IS_TMP_VAR|IS_VAR) == IS_CONST) ? (RT_CONSTANT(opline, opline->op2) + 1) : NULL));
		}
		if (UNEXPECTED(fbc == NULL)) {
			if (EXPECTED(!EG(exception))) {
				zend_undefined_method(ce, Z_STR_P(function_name));
			}
			zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
			HANDLE_EXCEPTION();
		}
		if ((IS_TMP_VAR|IS_VAR) == IS_CONST &&
		    EXPECTED(!(fbc->common.fn_flags & (ZEND_ACC_CALL_VIA_TRAMPOLINE|ZEND_ACC_NEVER_CACHE))) &&
			EXPECTED(!(fbc->common.scope->ce_flags & ZEND_ACC_TRAIT))) {
			CACHE_POLYMORPHIC_PTR(opline->result.num, ce, fbc);
		}
		if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!RUN_TIME_CACHE(&fbc->op_array))) {
			init_func_run_time_cache(&fbc->op_array);
		}
		if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
			zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
		}
	} else {
		if (UNEXPECTED(ce->constructor == NULL)) {
			zend_throw_error(NULL, "Cannot call constructor");
			HANDLE_EXCEPTION();
		}
		if (Z_TYPE(EX(This)) == IS_OBJECT && Z_OBJ(EX(This))->ce != ce->constructor->common.scope && (ce->constructor->common.fn_flags & ZEND_ACC_PRIVATE)) {
			zend_throw_error(NULL, "Cannot call private %s::__construct()", ZSTR_VAL(ce->name));
			HANDLE_EXCEPTION();
		}
		fbc = ce->constructor;
		if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!RUN_TIME_CACHE(&fbc->op_array))) {
			init_func_run_time_cache(&fbc->op_array);
		}
	}

	if (!(fbc->common.fn_flags & ZEND_ACC_STATIC)) {
		if (Z_TYPE(EX(This)) == IS_OBJECT && instanceof_function(Z_OBJCE(EX(This)), ce)) {
			ce = (zend_class_entry*)Z_OBJ(EX(This));
			call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_HAS_THIS;
		} else {
			zend_non_static_method_call(fbc);
			HANDLE_EXCEPTION();
		}
	} else {
		/* previous opcode is ZEND_FETCH_CLASS */
		if (IS_UNUSED == IS_UNUSED
		 && ((opline->op1.num & ZEND_FETCH_CLASS_MASK) == ZEND_FETCH_CLASS_PARENT ||
		     (opline->op1.num & ZEND_FETCH_CLASS_MASK) == ZEND_FETCH_CLASS_SELF)) {
			if (Z_TYPE(EX(This)) == IS_OBJECT) {
				ce = Z_OBJCE(EX(This));
			} else {
				ce = Z_CE(EX(This));
			}
		}
		call_info = ZEND_CALL_NESTED_FUNCTION;
	}

	call = zend_vm_stack_push_call_frame(call_info,
		fbc, opline->extended_value, ce);
	call->prev_execute_data = EX(call);
	EX(call) = call;

	ZEND_VM_NEXT_OPCODE();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_INIT_ARRAY_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	zval *array;
	uint32_t size;
	USE_OPLINE

	SAVE_OPLINE();
	array = EX_VAR(opline->result.var);
	if (IS_UNUSED != IS_UNUSED) {
		size = opline->extended_value >> ZEND_ARRAY_SIZE_SHIFT;
		ZVAL_ARR(array, zend_new_array(size));
		/* Explicitly initialize array as not-packed if flag is set */
		if (opline->extended_value & ZEND_ARRAY_NOT_PACKED) {
			zend_hash_real_init_mixed(Z_ARRVAL_P(array));
		}
		ZEND_VM_TAIL_CALL(ZEND_NULL_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
	} else {
		ZVAL_ARR(array, zend_new_array(0));
		ZEND_VM_NEXT_OPCODE();
	}
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_UNSET_OBJ_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *container;
	zval *offset;
	zend_string *name, *tmp_name;

	SAVE_OPLINE();
	container = &EX(This);
	offset = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);

	do {
		if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT)) {
			if (Z_ISREF_P(container)) {
				container = Z_REFVAL_P(container);
				if (Z_TYPE_P(container) != IS_OBJECT) {
					if (IS_UNUSED == IS_CV
					 && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
						ZVAL_UNDEFINED_OP1();
					}
					break;
				}
			} else {
				break;
			}
		}
		if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
			name = Z_STR_P(offset);
		} else {
			name = zval_try_get_tmp_string(offset, &tmp_name);
			if (UNEXPECTED(!name)) {
				break;
			}
		}
		Z_OBJ_HT_P(container)->unset_property(Z_OBJ_P(container), name, (((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL));
		if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
			zend_tmp_string_release(tmp_name);
		}
	} while (0);

	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));


	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *container;
	int result;
	zval *offset;
	zend_string *name, *tmp_name;

	SAVE_OPLINE();
	container = &EX(This);
	offset = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);

	if (IS_UNUSED == IS_CONST ||
	    (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
		if ((IS_UNUSED & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
			container = Z_REFVAL_P(container);
			if (UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT)) {
				result = (opline->extended_value & ZEND_ISEMPTY);
				goto isset_object_finish;
			}
		} else {
			result = (opline->extended_value & ZEND_ISEMPTY);
			goto isset_object_finish;
		}
	}

	if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
		name = Z_STR_P(offset);
	} else {
		name = zval_try_get_tmp_string(offset, &tmp_name);
		if (UNEXPECTED(!name)) {
			result = 0;
			goto isset_object_finish;
		}
	}

	result =
		(opline->extended_value & ZEND_ISEMPTY) ^
		Z_OBJ_HT_P(container)->has_property(Z_OBJ_P(container), name, (opline->extended_value & ZEND_ISEMPTY), (((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(opline->extended_value & ~ZEND_ISEMPTY) : NULL));

	if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
		zend_tmp_string_release(tmp_name);
	}

isset_object_finish:
	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));


	ZEND_VM_SMART_BRANCH(result, 1);
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_YIELD_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE

	zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C);

	SAVE_OPLINE();
	if (UNEXPECTED(generator->flags & ZEND_GENERATOR_FORCED_CLOSE)) {
		ZEND_VM_TAIL_CALL(zend_yield_in_closed_generator_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
	}

	/* Destroy the previously yielded value */
	zval_ptr_dtor(&generator->value);

	/* Destroy the previously yielded key */
	zval_ptr_dtor(&generator->key);

	/* Set the new yielded value */
	if (IS_UNUSED != IS_UNUSED) {
		if (UNEXPECTED(EX(func)->op_array.fn_flags & ZEND_ACC_RETURN_REFERENCE)) {
			/* Constants and temporary variables aren't yieldable by reference,
			 * but we still allow them with a notice. */
			if (IS_UNUSED & (IS_CONST|IS_TMP_VAR)) {
				zval *value;

				zend_error(E_NOTICE, "Only variable references should be yielded by reference");

				value = NULL;
				ZVAL_COPY_VALUE(&generator->value, value);
				if (IS_UNUSED == IS_CONST) {
					if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
						Z_ADDREF(generator->value);
					}
				}
			} else {
				zval *value_ptr = NULL;

				/* If a function call result is yielded and the function did
				 * not return by reference we throw a notice. */
				do {
					if (IS_UNUSED == IS_VAR) {
						ZEND_ASSERT(value_ptr != &EG(uninitialized_zval));
						if (opline->extended_value == ZEND_RETURNS_FUNCTION
						 && !Z_ISREF_P(value_ptr)) {
							zend_error(E_NOTICE, "Only variable references should be yielded by reference");
							ZVAL_COPY(&generator->value, value_ptr);
							break;
						}
					}
					if (Z_ISREF_P(value_ptr)) {
						Z_ADDREF_P(value_ptr);
					} else {
						ZVAL_MAKE_REF_EX(value_ptr, 2);
					}
					ZVAL_REF(&generator->value, Z_REF_P(value_ptr));
				} while (0);


			}
		} else {
			zval *value = NULL;

			/* Consts, temporary variables and references need copying */
			if (IS_UNUSED == IS_CONST) {
				ZVAL_COPY_VALUE(&generator->value, value);
				if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
					Z_ADDREF(generator->value);
				}
			} else if (IS_UNUSED == IS_TMP_VAR) {
				ZVAL_COPY_VALUE(&generator->value, value);
			} else if ((IS_UNUSED & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) {
				ZVAL_COPY(&generator->value, Z_REFVAL_P(value));


			} else {
				ZVAL_COPY_VALUE(&generator->value, value);
				if (IS_UNUSED == IS_CV) {
					if (Z_OPT_REFCOUNTED_P(value)) Z_ADDREF_P(value);
				}
			}
		}
	} else {
		/* If no value was specified yield null */
		ZVAL_NULL(&generator->value);
	}

	/* Set the new yielded key */
	if ((IS_TMP_VAR|IS_VAR) != IS_UNUSED) {
		zval *key = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
		if (((IS_TMP_VAR|IS_VAR) & (IS_CV|IS_VAR)) && UNEXPECTED(Z_TYPE_P(key) == IS_REFERENCE)) {
			key = Z_REFVAL_P(key);
		}
		ZVAL_COPY(&generator->key, key);
		zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));

		if (Z_TYPE(generator->key) == IS_LONG
		    && Z_LVAL(generator->key) > generator->largest_used_integer_key
		) {
			generator->largest_used_integer_key = Z_LVAL(generator->key);
		}
	} else {
		/* If no key was specified we use auto-increment keys */
		generator->largest_used_integer_key++;
		ZVAL_LONG(&generator->key, generator->largest_used_integer_key);
	}

	if (RETURN_VALUE_USED(opline)) {
		/* If the return value of yield is used set the send
		 * target and initialize it to NULL */
		generator->send_target = EX_VAR(opline->result.var);
		ZVAL_NULL(generator->send_target);
	} else {
		generator->send_target = NULL;
	}

	/* The GOTO VM uses a local opline variable. We need to set the opline
	 * variable in execute_data so we don't resume at an old position. */
	SAVE_OPLINE();

	ZEND_VM_RETURN();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_FETCH_CLASS_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	zval *class_name;
	USE_OPLINE

	SAVE_OPLINE();
	if (IS_UNUSED == IS_UNUSED) {
		Z_CE_P(EX_VAR(opline->result.var)) = zend_fetch_class(NULL, opline->op1.num);
		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
	} else if (IS_UNUSED == IS_CONST) {
		zend_class_entry *ce = CACHED_PTR(opline->extended_value);

		if (UNEXPECTED(ce == NULL)) {
			class_name = NULL;
			ce = zend_fetch_class_by_name(Z_STR_P(class_name), Z_STR_P(class_name + 1), opline->op1.num);
			CACHE_PTR(opline->extended_value, ce);
		}
		Z_CE_P(EX_VAR(opline->result.var)) = ce;
	} else {
		class_name = NULL;
try_class_name:
		if (Z_TYPE_P(class_name) == IS_OBJECT) {
			Z_CE_P(EX_VAR(opline->result.var)) = Z_OBJCE_P(class_name);
		} else if (Z_TYPE_P(class_name) == IS_STRING) {
			Z_CE_P(EX_VAR(opline->result.var)) = zend_fetch_class(Z_STR_P(class_name), opline->op1.num);
		} else if ((IS_UNUSED & (IS_VAR|IS_CV)) && Z_TYPE_P(class_name) == IS_REFERENCE) {
			class_name = Z_REFVAL_P(class_name);
			goto try_class_name;
		} else {
			if (IS_UNUSED == IS_CV && UNEXPECTED(Z_TYPE_P(class_name) == IS_UNDEF)) {
				ZVAL_UNDEFINED_OP2();
				if (UNEXPECTED(EG(exception) != NULL)) {
					HANDLE_EXCEPTION();
				}
			}
			zend_throw_error(NULL, "Class name must be a valid object or a string");
		}
	}


	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_INIT_STATIC_METHOD_CALL_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *function_name;
	zend_class_entry *ce;
	uint32_t call_info;
	zend_function *fbc;
	zend_execute_data *call;

	SAVE_OPLINE();

	if (IS_UNUSED == IS_CONST) {
		/* no function found. try a static method in class */
		ce = CACHED_PTR(opline->result.num);
		if (UNEXPECTED(ce == NULL)) {
			ce = zend_fetch_class_by_name(Z_STR_P(RT_CONSTANT(opline, opline->op1)), Z_STR_P(RT_CONSTANT(opline, opline->op1) + 1), ZEND_FETCH_CLASS_DEFAULT | ZEND_FETCH_CLASS_EXCEPTION);
			if (UNEXPECTED(ce == NULL)) {


				HANDLE_EXCEPTION();
			}
			if (IS_UNUSED != IS_CONST) {
				CACHE_PTR(opline->result.num, ce);
			}
		}
	} else if (IS_UNUSED == IS_UNUSED) {
		ce = zend_fetch_class(NULL, opline->op1.num);
		if (UNEXPECTED(ce == NULL)) {


			HANDLE_EXCEPTION();
		}
	} else {
		ce = Z_CE_P(EX_VAR(opline->op1.var));
	}

	if (IS_UNUSED == IS_CONST &&
	    IS_UNUSED == IS_CONST &&
	    EXPECTED((fbc = CACHED_PTR(opline->result.num + sizeof(void*))) != NULL)) {
		/* nothing to do */
	} else if (IS_UNUSED != IS_CONST &&
	           IS_UNUSED == IS_CONST &&
	           EXPECTED(CACHED_PTR(opline->result.num) == ce)) {
		fbc = CACHED_PTR(opline->result.num + sizeof(void*));
	} else if (IS_UNUSED != IS_UNUSED) {
		function_name = NULL;
		if (IS_UNUSED != IS_CONST) {
			if (UNEXPECTED(Z_TYPE_P(function_name) != IS_STRING)) {
				do {
					if (IS_UNUSED & (IS_VAR|IS_CV) && Z_ISREF_P(function_name)) {
						function_name = Z_REFVAL_P(function_name);
						if (EXPECTED(Z_TYPE_P(function_name) == IS_STRING)) {
							break;
						}
					} else if (IS_UNUSED == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) {
						ZVAL_UNDEFINED_OP2();
						if (UNEXPECTED(EG(exception) != NULL)) {
							HANDLE_EXCEPTION();
						}
					}
					zend_throw_error(NULL, "Method name must be a string");


					HANDLE_EXCEPTION();
				} while (0);
			}
		}

		if (ce->get_static_method) {
			fbc = ce->get_static_method(ce, Z_STR_P(function_name));
		} else {
			fbc = zend_std_get_static_method(ce, Z_STR_P(function_name), ((IS_UNUSED == IS_CONST) ? (RT_CONSTANT(opline, opline->op2) + 1) : NULL));
		}
		if (UNEXPECTED(fbc == NULL)) {
			if (EXPECTED(!EG(exception))) {
				zend_undefined_method(ce, Z_STR_P(function_name));
			}


			HANDLE_EXCEPTION();
		}
		if (IS_UNUSED == IS_CONST &&
		    EXPECTED(!(fbc->common.fn_flags & (ZEND_ACC_CALL_VIA_TRAMPOLINE|ZEND_ACC_NEVER_CACHE))) &&
			EXPECTED(!(fbc->common.scope->ce_flags & ZEND_ACC_TRAIT))) {
			CACHE_POLYMORPHIC_PTR(opline->result.num, ce, fbc);
		}
		if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!RUN_TIME_CACHE(&fbc->op_array))) {
			init_func_run_time_cache(&fbc->op_array);
		}
		if (IS_UNUSED != IS_CONST) {


		}
	} else {
		if (UNEXPECTED(ce->constructor == NULL)) {
			zend_throw_error(NULL, "Cannot call constructor");
			HANDLE_EXCEPTION();
		}
		if (Z_TYPE(EX(This)) == IS_OBJECT && Z_OBJ(EX(This))->ce != ce->constructor->common.scope && (ce->constructor->common.fn_flags & ZEND_ACC_PRIVATE)) {
			zend_throw_error(NULL, "Cannot call private %s::__construct()", ZSTR_VAL(ce->name));
			HANDLE_EXCEPTION();
		}
		fbc = ce->constructor;
		if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!RUN_TIME_CACHE(&fbc->op_array))) {
			init_func_run_time_cache(&fbc->op_array);
		}
	}

	if (!(fbc->common.fn_flags & ZEND_ACC_STATIC)) {
		if (Z_TYPE(EX(This)) == IS_OBJECT && instanceof_function(Z_OBJCE(EX(This)), ce)) {
			ce = (zend_class_entry*)Z_OBJ(EX(This));
			call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_HAS_THIS;
		} else {
			zend_non_static_method_call(fbc);
			HANDLE_EXCEPTION();
		}
	} else {
		/* previous opcode is ZEND_FETCH_CLASS */
		if (IS_UNUSED == IS_UNUSED
		 && ((opline->op1.num & ZEND_FETCH_CLASS_MASK) == ZEND_FETCH_CLASS_PARENT ||
		     (opline->op1.num & ZEND_FETCH_CLASS_MASK) == ZEND_FETCH_CLASS_SELF)) {
			if (Z_TYPE(EX(This)) == IS_OBJECT) {
				ce = Z_OBJCE(EX(This));
			} else {
				ce = Z_CE(EX(This));
			}
		}
		call_info = ZEND_CALL_NESTED_FUNCTION;
	}

	call = zend_vm_stack_push_call_frame(call_info,
		fbc, opline->extended_value, ce);
	call->prev_execute_data = EX(call);
	EX(call) = call;

	ZEND_VM_NEXT_OPCODE();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_VERIFY_RETURN_TYPE_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	if (IS_UNUSED == IS_UNUSED) {
		SAVE_OPLINE();
		zend_verify_missing_return_type(EX(func));
		HANDLE_EXCEPTION();
	} else {
/* prevents "undefined variable opline" errors */
#if 0 || (IS_UNUSED != IS_UNUSED)
		USE_OPLINE
		zval *retval_ref, *retval_ptr;
		zend_arg_info *ret_info = EX(func)->common.arg_info - 1;
		retval_ref = retval_ptr = NULL;

		if (IS_UNUSED == IS_CONST) {
			ZVAL_COPY(EX_VAR(opline->result.var), retval_ptr);
			retval_ref = retval_ptr = EX_VAR(opline->result.var);
		} else if (IS_UNUSED == IS_VAR) {
			if (UNEXPECTED(Z_TYPE_P(retval_ptr) == IS_INDIRECT)) {
				retval_ref = retval_ptr = Z_INDIRECT_P(retval_ptr);
			}
			ZVAL_DEREF(retval_ptr);
		} else if (IS_UNUSED == IS_CV) {
			ZVAL_DEREF(retval_ptr);
		}

		if (EXPECTED(ZEND_TYPE_CONTAINS_CODE(ret_info->type, Z_TYPE_P(retval_ptr)))) {
			ZEND_VM_NEXT_OPCODE();
		}

		if (IS_UNUSED == IS_CV && UNEXPECTED(Z_ISUNDEF_P(retval_ptr))) {
			SAVE_OPLINE();
			retval_ref = retval_ptr = ZVAL_UNDEFINED_OP1();
			if (UNEXPECTED(EG(exception))) {
				HANDLE_EXCEPTION();
			}
			if (ZEND_TYPE_FULL_MASK(ret_info->type) & MAY_BE_NULL) {
				ZEND_VM_NEXT_OPCODE();
			}
		}

		zend_reference *ref = NULL;
		if (UNEXPECTED(retval_ref != retval_ptr)) {
			if (UNEXPECTED(EX(func)->op_array.fn_flags & ZEND_ACC_RETURN_REFERENCE)) {
				ref = Z_REF_P(retval_ref);
			} else {
				/* A cast might happen - unwrap the reference if this is a by-value return */
				if (Z_REFCOUNT_P(retval_ref) == 1) {
					ZVAL_UNREF(retval_ref);
				} else {
					Z_DELREF_P(retval_ref);
					ZVAL_COPY(retval_ref, retval_ptr);
				}
				retval_ptr = retval_ref;
			}
		}

		SAVE_OPLINE();
		if (UNEXPECTED(!zend_check_type_slow(&ret_info->type, retval_ptr, ref, 1, 0))) {
			zend_verify_return_error(EX(func), retval_ptr);
			HANDLE_EXCEPTION();
		}
		ZEND_VM_NEXT_OPCODE();
#endif
	}
}

static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_VERIFY_NEVER_TYPE_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	SAVE_OPLINE();
	zend_verify_never_error(EX(func));
	HANDLE_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_CHECK_FUNC_ARG_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	uint32_t arg_num;

	if (IS_UNUSED == IS_CONST) {
		zend_string *arg_name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
		arg_num = zend_get_arg_offset_by_name(
			EX(call)->func, arg_name, CACHE_ADDR(opline->result.num)) + 1;
		if (UNEXPECTED(arg_num == 0)) {
			/* Treat this as a by-value argument, and throw an error during SEND. */
			ZEND_DEL_CALL_FLAG(EX(call), ZEND_CALL_SEND_ARG_BY_REF);
			ZEND_VM_NEXT_OPCODE();
		}
	} else {
		arg_num = opline->op2.num;
	}

	if (EXPECTED(0)) {
		if (QUICK_ARG_SHOULD_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
			ZEND_ADD_CALL_FLAG(EX(call), ZEND_CALL_SEND_ARG_BY_REF);
		} else {
			ZEND_DEL_CALL_FLAG(EX(call), ZEND_CALL_SEND_ARG_BY_REF);
		}
	} else if (ARG_SHOULD_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
		ZEND_ADD_CALL_FLAG(EX(call), ZEND_CALL_SEND_ARG_BY_REF);
	} else {
		ZEND_DEL_CALL_FLAG(EX(call), ZEND_CALL_SEND_ARG_BY_REF);
	}
	ZEND_VM_NEXT_OPCODE();
}

static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_CHECK_FUNC_ARG_SPEC_UNUSED_UNUSED_QUICK_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	uint32_t arg_num;

	if (IS_UNUSED == IS_CONST) {
		zend_string *arg_name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
		arg_num = zend_get_arg_offset_by_name(
			EX(call)->func, arg_name, CACHE_ADDR(opline->result.num)) + 1;
		if (UNEXPECTED(arg_num == 0)) {
			/* Treat this as a by-value argument, and throw an error during SEND. */
			ZEND_DEL_CALL_FLAG(EX(call), ZEND_CALL_SEND_ARG_BY_REF);
			ZEND_VM_NEXT_OPCODE();
		}
	} else {
		arg_num = opline->op2.num;
	}

	if (EXPECTED(1)) {
		if (QUICK_ARG_SHOULD_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
			ZEND_ADD_CALL_FLAG(EX(call), ZEND_CALL_SEND_ARG_BY_REF);
		} else {
			ZEND_DEL_CALL_FLAG(EX(call), ZEND_CALL_SEND_ARG_BY_REF);
		}
	} else if (ARG_SHOULD_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
		ZEND_ADD_CALL_FLAG(EX(call), ZEND_CALL_SEND_ARG_BY_REF);
	} else {
		ZEND_DEL_CALL_FLAG(EX(call), ZEND_CALL_SEND_ARG_BY_REF);
	}
	ZEND_VM_NEXT_OPCODE();
}

static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_CHECK_UNDEF_ARGS_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE

	zend_execute_data *call = execute_data->call;
	if (EXPECTED(!(ZEND_CALL_INFO(call) & ZEND_CALL_MAY_HAVE_UNDEF))) {
		ZEND_VM_NEXT_OPCODE();
	}

	SAVE_OPLINE();
	zend_handle_undef_args(call);
	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_NEW_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *result;
	zend_function *constructor;
	zend_class_entry *ce;
	zend_execute_data *call;

	SAVE_OPLINE();
	if (IS_UNUSED == IS_CONST) {
		ce = CACHED_PTR(opline->op2.num);
		if (UNEXPECTED(ce == NULL)) {
			ce = zend_fetch_class_by_name(Z_STR_P(RT_CONSTANT(opline, opline->op1)), Z_STR_P(RT_CONSTANT(opline, opline->op1) + 1), ZEND_FETCH_CLASS_DEFAULT | ZEND_FETCH_CLASS_EXCEPTION);
			if (UNEXPECTED(ce == NULL)) {
				ZVAL_UNDEF(EX_VAR(opline->result.var));
				HANDLE_EXCEPTION();
			}
			CACHE_PTR(opline->op2.num, ce);
		}
	} else if (IS_UNUSED == IS_UNUSED) {
		ce = zend_fetch_class(NULL, opline->op1.num);
		if (UNEXPECTED(ce == NULL)) {
			ZVAL_UNDEF(EX_VAR(opline->result.var));
			HANDLE_EXCEPTION();
		}
	} else {
		ce = Z_CE_P(EX_VAR(opline->op1.var));
	}

	result = EX_VAR(opline->result.var);
	if (UNEXPECTED(object_init_ex(result, ce) != SUCCESS)) {
		ZVAL_UNDEF(result);
		HANDLE_EXCEPTION();
	}

	constructor = Z_OBJ_HT_P(result)->get_constructor(Z_OBJ_P(result));
	if (constructor == NULL) {
		/* If there are no arguments, skip over the DO_FCALL opcode. We check if the next
		 * opcode is DO_FCALL in case EXT instructions are used. */
		if (EXPECTED(opline->extended_value == 0 && (opline+1)->opcode == ZEND_DO_FCALL)) {
			ZEND_VM_NEXT_OPCODE_EX(1, 2);
		}

		if (UNEXPECTED(EG(exception))) {
			HANDLE_EXCEPTION();
		}

		/* Perform a dummy function call */
		call = zend_vm_stack_push_call_frame(
			ZEND_CALL_FUNCTION, (zend_function *) &zend_pass_function,
			opline->extended_value, NULL);
	} else {
		if (EXPECTED(constructor->type == ZEND_USER_FUNCTION) && UNEXPECTED(!RUN_TIME_CACHE(&constructor->op_array))) {
			init_func_run_time_cache(&constructor->op_array);
		}
		/* We are not handling overloaded classes right now */
		call = zend_vm_stack_push_call_frame(
			ZEND_CALL_FUNCTION | ZEND_CALL_RELEASE_THIS | ZEND_CALL_HAS_THIS,
			constructor,
			opline->extended_value,
			Z_OBJ_P(result));
		Z_ADDREF_P(result);
	}

	call->prev_execute_data = EX(call);
	EX(call) = call;
	ZEND_VM_NEXT_OPCODE();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_INIT_ARRAY_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	zval *array;
	uint32_t size;
	USE_OPLINE

	SAVE_OPLINE();
	array = EX_VAR(opline->result.var);
	if (IS_UNUSED != IS_UNUSED) {
		size = opline->extended_value >> ZEND_ARRAY_SIZE_SHIFT;
		ZVAL_ARR(array, zend_new_array(size));
		/* Explicitly initialize array as not-packed if flag is set */
		if (opline->extended_value & ZEND_ARRAY_NOT_PACKED) {
			zend_hash_real_init_mixed(Z_ARRVAL_P(array));
		}
		ZEND_VM_TAIL_CALL(ZEND_NULL_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
	} else {
		ZVAL_ARR(array, zend_new_array(0));
		ZEND_VM_NEXT_OPCODE();
	}
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_YIELD_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE

	zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C);

	SAVE_OPLINE();
	if (UNEXPECTED(generator->flags & ZEND_GENERATOR_FORCED_CLOSE)) {
		ZEND_VM_TAIL_CALL(zend_yield_in_closed_generator_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
	}

	/* Destroy the previously yielded value */
	zval_ptr_dtor(&generator->value);

	/* Destroy the previously yielded key */
	zval_ptr_dtor(&generator->key);

	/* Set the new yielded value */
	if (IS_UNUSED != IS_UNUSED) {
		if (UNEXPECTED(EX(func)->op_array.fn_flags & ZEND_ACC_RETURN_REFERENCE)) {
			/* Constants and temporary variables aren't yieldable by reference,
			 * but we still allow them with a notice. */
			if (IS_UNUSED & (IS_CONST|IS_TMP_VAR)) {
				zval *value;

				zend_error(E_NOTICE, "Only variable references should be yielded by reference");

				value = NULL;
				ZVAL_COPY_VALUE(&generator->value, value);
				if (IS_UNUSED == IS_CONST) {
					if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
						Z_ADDREF(generator->value);
					}
				}
			} else {
				zval *value_ptr = NULL;

				/* If a function call result is yielded and the function did
				 * not return by reference we throw a notice. */
				do {
					if (IS_UNUSED == IS_VAR) {
						ZEND_ASSERT(value_ptr != &EG(uninitialized_zval));
						if (opline->extended_value == ZEND_RETURNS_FUNCTION
						 && !Z_ISREF_P(value_ptr)) {
							zend_error(E_NOTICE, "Only variable references should be yielded by reference");
							ZVAL_COPY(&generator->value, value_ptr);
							break;
						}
					}
					if (Z_ISREF_P(value_ptr)) {
						Z_ADDREF_P(value_ptr);
					} else {
						ZVAL_MAKE_REF_EX(value_ptr, 2);
					}
					ZVAL_REF(&generator->value, Z_REF_P(value_ptr));
				} while (0);


			}
		} else {
			zval *value = NULL;

			/* Consts, temporary variables and references need copying */
			if (IS_UNUSED == IS_CONST) {
				ZVAL_COPY_VALUE(&generator->value, value);
				if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
					Z_ADDREF(generator->value);
				}
			} else if (IS_UNUSED == IS_TMP_VAR) {
				ZVAL_COPY_VALUE(&generator->value, value);
			} else if ((IS_UNUSED & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) {
				ZVAL_COPY(&generator->value, Z_REFVAL_P(value));


			} else {
				ZVAL_COPY_VALUE(&generator->value, value);
				if (IS_UNUSED == IS_CV) {
					if (Z_OPT_REFCOUNTED_P(value)) Z_ADDREF_P(value);
				}
			}
		}
	} else {
		/* If no value was specified yield null */
		ZVAL_NULL(&generator->value);
	}

	/* Set the new yielded key */
	if (IS_UNUSED != IS_UNUSED) {
		zval *key = NULL;
		if ((IS_UNUSED & (IS_CV|IS_VAR)) && UNEXPECTED(Z_TYPE_P(key) == IS_REFERENCE)) {
			key = Z_REFVAL_P(key);
		}
		ZVAL_COPY(&generator->key, key);


		if (Z_TYPE(generator->key) == IS_LONG
		    && Z_LVAL(generator->key) > generator->largest_used_integer_key
		) {
			generator->largest_used_integer_key = Z_LVAL(generator->key);
		}
	} else {
		/* If no key was specified we use auto-increment keys */
		generator->largest_used_integer_key++;
		ZVAL_LONG(&generator->key, generator->largest_used_integer_key);
	}

	if (RETURN_VALUE_USED(opline)) {
		/* If the return value of yield is used set the send
		 * target and initialize it to NULL */
		generator->send_target = EX_VAR(opline->result.var);
		ZVAL_NULL(generator->send_target);
	} else {
		generator->send_target = NULL;
	}

	/* The GOTO VM uses a local opline variable. We need to set the opline
	 * variable in execute_data so we don't resume at an old position. */
	SAVE_OPLINE();

	ZEND_VM_RETURN();
}

static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_FETCH_THIS_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE

	if (EXPECTED(Z_TYPE(EX(This)) == IS_OBJECT)) {
		zval *result = EX_VAR(opline->result.var);

		ZVAL_OBJ(result, Z_OBJ(EX(This)));
		Z_ADDREF_P(result);
		ZEND_VM_NEXT_OPCODE();
	} else {
		ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
	}
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_FETCH_GLOBALS_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE

	/* For symbol tables we need to deal with exactly the same problems as for property tables. */
	ZVAL_ARR(EX_VAR(opline->result.var),
		zend_proptable_to_symtable(&EG(symbol_table), /* always_duplicate */ 1));
	ZEND_VM_NEXT_OPCODE();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_ISSET_ISEMPTY_THIS_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE

	ZVAL_BOOL(EX_VAR(opline->result.var),
		(opline->extended_value & ZEND_ISEMPTY) ^
		 (Z_TYPE(EX(This)) == IS_OBJECT));
	ZEND_VM_NEXT_OPCODE();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_GET_CLASS_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE

	if (IS_UNUSED == IS_UNUSED) {
		SAVE_OPLINE();
		if (UNEXPECTED(!EX(func)->common.scope)) {
			zend_throw_error(NULL, "get_class() without arguments must be called from within a class");
			ZVAL_UNDEF(EX_VAR(opline->result.var));
			HANDLE_EXCEPTION();
		} else {
			zend_error(E_DEPRECATED, "Calling get_class() without arguments is deprecated");
			ZVAL_STR_COPY(EX_VAR(opline->result.var), EX(func)->common.scope->name);
			if (UNEXPECTED(EG(exception))) {
				HANDLE_EXCEPTION();
			}
			ZEND_VM_NEXT_OPCODE();
		}
	} else {
		zval *op1;

		SAVE_OPLINE();
		op1 = NULL;
		while (1) {
			if (Z_TYPE_P(op1) == IS_OBJECT) {
				ZVAL_STR_COPY(EX_VAR(opline->result.var), Z_OBJCE_P(op1)->name);
			} else if ((IS_UNUSED & (IS_VAR|IS_CV)) != 0 && Z_TYPE_P(op1) == IS_REFERENCE) {
				op1 = Z_REFVAL_P(op1);
				continue;
			} else {
				if (IS_UNUSED == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
					ZVAL_UNDEFINED_OP1();
				}
				zend_type_error("get_class(): Argument #1 ($object) must be of type object, %s given", zend_zval_value_name(op1));
				ZVAL_UNDEF(EX_VAR(opline->result.var));
			}
			break;
		}


		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
	}
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_GET_CALLED_CLASS_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE

	if (Z_TYPE(EX(This)) == IS_OBJECT) {
		ZVAL_STR_COPY(EX_VAR(opline->result.var), Z_OBJCE(EX(This))->name);
	} else if (Z_CE(EX(This))) {
		ZVAL_STR_COPY(EX_VAR(opline->result.var), Z_CE(EX(This))->name);
	} else {
		ZEND_ASSERT(!EX(func)->common.scope);
		SAVE_OPLINE();
		zend_throw_error(NULL, "get_called_class() must be called from within a class");
		ZVAL_UNDEF(EX_VAR(opline->result.var));
		HANDLE_EXCEPTION();
	}
	ZEND_VM_NEXT_OPCODE();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_FUNC_NUM_ARGS_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE

	ZVAL_LONG(EX_VAR(opline->result.var), EX_NUM_ARGS());
	ZEND_VM_NEXT_OPCODE();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_FUNC_GET_ARGS_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zend_array *ht;
	uint32_t arg_count, result_size, skip;

	arg_count = EX_NUM_ARGS();
	if (IS_UNUSED == IS_CONST) {
		skip = Z_LVAL_P(RT_CONSTANT(opline, opline->op1));
		if (arg_count < skip) {
			result_size = 0;
		} else {
			result_size = arg_count - skip;
		}
	} else {
		skip = 0;
		result_size = arg_count;
	}

	if (result_size) {
		SAVE_OPLINE();
		uint32_t first_extra_arg = EX(func)->op_array.num_args;

		ht = zend_new_array(result_size);
		ZVAL_ARR(EX_VAR(opline->result.var), ht);
		zend_hash_real_init_packed(ht);
		ZEND_HASH_FILL_PACKED(ht) {
			zval *p, *q;
			uint32_t i = skip;
			p = EX_VAR_NUM(i);
			if (arg_count > first_extra_arg) {
				while (i < first_extra_arg) {
					q = p;
					if (EXPECTED(Z_TYPE_INFO_P(q) != IS_UNDEF)) {
						ZVAL_DEREF(q);
						if (Z_OPT_REFCOUNTED_P(q)) {
							Z_ADDREF_P(q);
						}
						ZEND_HASH_FILL_SET(q);
					} else {
						ZEND_HASH_FILL_SET_NULL();
					}
					ZEND_HASH_FILL_NEXT();
					p++;
					i++;
				}
				if (skip < first_extra_arg) {
					skip = 0;
				} else {
					skip -= first_extra_arg;
				}
				p = EX_VAR_NUM(EX(func)->op_array.last_var + EX(func)->op_array.T + skip);
			}
			while (i < arg_count) {
				q = p;
				if (EXPECTED(Z_TYPE_INFO_P(q) != IS_UNDEF)) {
					ZVAL_DEREF(q);
					if (Z_OPT_REFCOUNTED_P(q)) {
						Z_ADDREF_P(q);
					}
					ZEND_HASH_FILL_SET(q);
				} else {
					ZEND_HASH_FILL_SET_NULL();
				}
				ZEND_HASH_FILL_NEXT();
				p++;
				i++;
			}
		} ZEND_HASH_FILL_END();
		ht->nNumOfElements = result_size;
	} else {
		ZVAL_EMPTY_ARRAY(EX_VAR(opline->result.var));
	}
	ZEND_VM_NEXT_OPCODE();
}

/* Contrary to what its name indicates, ZEND_COPY_TMP may receive and define references. */
static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_CALLABLE_CONVERT_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zend_execute_data *call = EX(call);

	zend_closure_from_frame(EX_VAR(opline->result.var), call);

	if (ZEND_CALL_INFO(call) & ZEND_CALL_RELEASE_THIS) {
		OBJ_RELEASE(Z_OBJ(call->This));
	}

	EX(call) = call->prev_execute_data;

	zend_vm_stack_free_call_frame(call);

	ZEND_VM_NEXT_OPCODE();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_FRAMELESS_ICALL_0_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	SAVE_OPLINE();

	zval *result = EX_VAR(opline->result.var);
	ZVAL_NULL(result);

#if 0 || 0
	if (0 && UNEXPECTED(zend_observer_handler_is_unobserved(ZEND_OBSERVER_DATA(ZEND_FLF_FUNC(opline))) == false)) {
		zend_frameless_observed_call(execute_data);
	} else
#endif
	{
		zend_frameless_function_0 function = (zend_frameless_function_0)ZEND_FLF_HANDLER(opline);
		function(EX_VAR(opline->result.var));
	}
	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_FRAMELESS_ICALL_0_SPEC_OBSERVER_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	SAVE_OPLINE();

	zval *result = EX_VAR(opline->result.var);
	ZVAL_NULL(result);

#if 0 || 1
	if (1 && UNEXPECTED(zend_observer_handler_is_unobserved(ZEND_OBSERVER_DATA(ZEND_FLF_FUNC(opline))) == false)) {
		zend_frameless_observed_call(execute_data);
	} else
#endif
	{
		zend_frameless_function_0 function = (zend_frameless_function_0)ZEND_FLF_HANDLER(opline);
		function(EX_VAR(opline->result.var));
	}
	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_ASSIGN_OBJ_OP_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *object;
	zval *property;
	zval *value;
	zval *zptr;
	void *_cache_slot[3] = {0};
	void **cache_slot;
	zend_property_info *prop_info;
	zend_object *zobj;
	zend_string *name, *tmp_name;

	SAVE_OPLINE();
	object = &EX(This);
	property = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);

	do {
		value = get_op_data_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1);

		if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
			if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
				object = Z_REFVAL_P(object);
				goto assign_op_object;
			}
			if (IS_UNUSED == IS_CV
			 && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
				ZVAL_UNDEFINED_OP1();
			}
			zend_throw_non_object_error(object, property OPLINE_CC EXECUTE_DATA_CC);
			break;
		}

assign_op_object:
		/* here we are sure we are dealing with an object */
		zobj = Z_OBJ_P(object);
		if (IS_CV == IS_CONST) {
			name = Z_STR_P(property);
		} else {
			name = zval_try_get_tmp_string(property, &tmp_name);
			if (UNEXPECTED(!name)) {
				UNDEF_RESULT();
				break;
			}
		}
		cache_slot = (IS_CV == IS_CONST) ? CACHE_ADDR((opline+1)->extended_value) : _cache_slot;
		if (EXPECTED((zptr = zobj->handlers->get_property_ptr_ptr(zobj, name, BP_VAR_RW, cache_slot)) != NULL)) {
			if (UNEXPECTED(Z_ISERROR_P(zptr))) {
				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
					ZVAL_NULL(EX_VAR(opline->result.var));
				}
			} else {
				zend_reference *ref;

				do {
					if (UNEXPECTED(Z_ISREF_P(zptr))) {
						ref = Z_REF_P(zptr);
						zptr = Z_REFVAL_P(zptr);
						if (UNEXPECTED(ZEND_REF_HAS_TYPE_SOURCES(ref))) {
							zend_binary_assign_op_typed_ref(ref, value OPLINE_CC EXECUTE_DATA_CC);
							break;
						}
					}

					prop_info = (zend_property_info*)CACHED_PTR_EX(cache_slot + 2);
					if (prop_info && ZEND_TYPE_IS_SET(prop_info->type)) {
						/* special case for typed properties */
						zend_binary_assign_op_typed_prop(prop_info, zptr, value OPLINE_CC EXECUTE_DATA_CC);
					} else {
						zend_binary_op(zptr, zptr, value OPLINE_CC);
					}
				} while (0);

				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
					ZVAL_COPY(EX_VAR(opline->result.var), zptr);
				}
			}
		} else {
			zend_assign_op_overloaded_property(zobj, name, cache_slot, value OPLINE_CC EXECUTE_DATA_CC);
		}
		if (IS_CV != IS_CONST) {
			zend_tmp_string_release(tmp_name);
		}
	} while (0);

	FREE_OP((opline+1)->op1_type, (opline+1)->op1.var);




	/* assign_obj has two opcodes! */
	ZEND_VM_NEXT_OPCODE_EX(1, 2);
}

/* No specialization for op_types (CONST|TMP|VAR|CV, UNUSED|CONST|TMPVAR) */
static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_PRE_INC_OBJ_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *object;
	zval *property;
	zval *zptr;
	void *_cache_slot[3] = {0};
	void **cache_slot;
	zend_property_info *prop_info;
	zend_object *zobj;
	zend_string *name, *tmp_name;

	SAVE_OPLINE();
	object = &EX(This);
	property = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);

	do {
		if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
			if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
				object = Z_REFVAL_P(object);
				goto pre_incdec_object;
			}
			if (IS_UNUSED == IS_CV
			 && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
				ZVAL_UNDEFINED_OP1();
			}
			zend_throw_non_object_error(object, property OPLINE_CC EXECUTE_DATA_CC);
			break;
		}

pre_incdec_object:
		/* here we are sure we are dealing with an object */
		zobj = Z_OBJ_P(object);
		if (IS_CV == IS_CONST) {
			name = Z_STR_P(property);
		} else {
			name = zval_try_get_tmp_string(property, &tmp_name);
			if (UNEXPECTED(!name)) {
				UNDEF_RESULT();
				break;
			}
		}
		cache_slot = (IS_CV == IS_CONST) ? CACHE_ADDR(opline->extended_value) : _cache_slot;
		if (EXPECTED((zptr = zobj->handlers->get_property_ptr_ptr(zobj, name, BP_VAR_RW, cache_slot)) != NULL)) {
			if (UNEXPECTED(Z_ISERROR_P(zptr))) {
				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
					ZVAL_NULL(EX_VAR(opline->result.var));
				}
			} else {
				prop_info = (zend_property_info *) CACHED_PTR_EX(cache_slot + 2);
				zend_pre_incdec_property_zval(zptr,
					prop_info && ZEND_TYPE_IS_SET(prop_info->type) ? prop_info : NULL OPLINE_CC EXECUTE_DATA_CC);
			}
		} else {
			zend_pre_incdec_overloaded_property(zobj, name, cache_slot OPLINE_CC EXECUTE_DATA_CC);
		}
		if (IS_CV != IS_CONST) {
			zend_tmp_string_release(tmp_name);
		}
	} while (0);




	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_POST_INC_OBJ_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *object;
	zval *property;
	zval *zptr;
	void *_cache_slot[3] = {0};
	void **cache_slot;
	zend_property_info *prop_info;
	zend_object *zobj;
	zend_string *name, *tmp_name;

	SAVE_OPLINE();
	object = &EX(This);
	property = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);

	do {
		if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
			if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
				object = Z_REFVAL_P(object);
				goto post_incdec_object;
			}
			if (IS_UNUSED == IS_CV
			 && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
				ZVAL_UNDEFINED_OP1();
			}
			zend_throw_non_object_error(object, property OPLINE_CC EXECUTE_DATA_CC);
			break;
		}

post_incdec_object:
		/* here we are sure we are dealing with an object */
		zobj = Z_OBJ_P(object);
		if (IS_CV == IS_CONST) {
			name = Z_STR_P(property);
		} else {
			name = zval_try_get_tmp_string(property, &tmp_name);
			if (UNEXPECTED(!name)) {
				ZVAL_UNDEF(EX_VAR(opline->result.var));
				break;
			}
		}
		cache_slot = (IS_CV == IS_CONST) ? CACHE_ADDR(opline->extended_value) : _cache_slot;
		if (EXPECTED((zptr = zobj->handlers->get_property_ptr_ptr(zobj, name, BP_VAR_RW, cache_slot)) != NULL)) {
			if (UNEXPECTED(Z_ISERROR_P(zptr))) {
				ZVAL_NULL(EX_VAR(opline->result.var));
			} else {
				prop_info = (zend_property_info*)CACHED_PTR_EX(cache_slot + 2);
				zend_post_incdec_property_zval(zptr,
					prop_info && ZEND_TYPE_IS_SET(prop_info->type) ? prop_info : NULL OPLINE_CC EXECUTE_DATA_CC);
			}
		} else {
			zend_post_incdec_overloaded_property(zobj, name, cache_slot OPLINE_CC EXECUTE_DATA_CC);
		}
		if (IS_CV != IS_CONST) {
			zend_tmp_string_release(tmp_name);
		}
	} while (0);




	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_FETCH_OBJ_R_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *container;
	void **cache_slot = NULL;

	SAVE_OPLINE();
	container = &EX(This);

	if (IS_UNUSED == IS_CONST ||
	    (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
		do {
			if ((IS_UNUSED & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
				container = Z_REFVAL_P(container);
				if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
					break;
				}
			}
			if (IS_UNUSED == IS_CV && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
				ZVAL_UNDEFINED_OP1();
			}
			zend_wrong_property_read(container, _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC));
			ZVAL_NULL(EX_VAR(opline->result.var));
			goto fetch_obj_r_finish;
		} while (0);
	}

	/* here we are sure we are dealing with an object */
	do {
		zend_object *zobj = Z_OBJ_P(container);
		zend_string *name, *tmp_name;
		zval *retval;

		if (IS_CV == IS_CONST) {
			cache_slot = CACHE_ADDR(opline->extended_value & ~ZEND_FETCH_REF /* FUNC_ARG fetch may contain it */);

			if (EXPECTED(zobj->ce == CACHED_PTR_EX(cache_slot))) {
				uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);

				if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
fetch_obj_r_simple:
					retval = OBJ_PROP(zobj, prop_offset);
					if (EXPECTED(Z_TYPE_INFO_P(retval) != IS_UNDEF)) {
						if (0 || (IS_UNUSED & (IS_TMP_VAR|IS_VAR)) != 0) {
							goto fetch_obj_r_copy;
						} else {
fetch_obj_r_fast_copy:
							ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
							ZEND_VM_NEXT_OPCODE();
						}
					}
				} else if (UNEXPECTED(IS_HOOKED_PROPERTY_OFFSET(prop_offset))) {
					zend_property_info *prop_info = CACHED_PTR_EX(cache_slot + 2);
					if (ZEND_IS_PROPERTY_HOOK_SIMPLE_READ(prop_offset)) {
						prop_offset = prop_info->offset;
						goto fetch_obj_r_simple;
					} else if (EXPECTED(ZEND_IS_PROPERTY_HOOK_SIMPLE_GET(prop_offset))) {
						zend_function *hook = prop_info->hooks[ZEND_PROPERTY_HOOK_GET];
						ZEND_ASSERT(hook->type == ZEND_USER_FUNCTION);
						ZEND_ASSERT(RUN_TIME_CACHE(&hook->op_array));

						uint32_t call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_HAS_THIS;
						if (IS_UNUSED & IS_CV) {
							GC_ADDREF(zobj);
						}
						if (IS_UNUSED & (IS_CV|IS_VAR|IS_TMP_VAR)) {
							call_info |= ZEND_CALL_RELEASE_THIS;
						}
						zend_execute_data *call = zend_vm_stack_push_call_frame(call_info, hook, 0, zobj);
						call->prev_execute_data = execute_data;
						call->call = NULL;
						call->return_value = EX_VAR(opline->result.var);
						call->run_time_cache = RUN_TIME_CACHE(&hook->op_array);

						execute_data = call;
						EG(current_execute_data) = execute_data;
						zend_init_cvs(0, hook->op_array.last_var EXECUTE_DATA_CC);

#if defined(ZEND_VM_IP_GLOBAL_REG) && ((ZEND_VM_KIND == ZEND_VM_KIND_CALL) || (ZEND_VM_KIND == ZEND_VM_KIND_HYBRID))
						opline = hook->op_array.opcodes;
#else
						EX(opline) = hook->op_array.opcodes;
#endif
						LOAD_OPLINE_EX();




						ZEND_VM_ENTER_EX();
					}
					/* Fall through to read_property for hooks. */
				} else if (EXPECTED(zobj->properties != NULL)) {
					ZEND_ASSERT(IS_DYNAMIC_PROPERTY_OFFSET(prop_offset));
					name = Z_STR_P(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC));
					if (!IS_UNKNOWN_DYNAMIC_PROPERTY_OFFSET(prop_offset)) {
						uintptr_t idx = ZEND_DECODE_DYN_PROP_OFFSET(prop_offset);

						if (EXPECTED(idx < zobj->properties->nNumUsed * sizeof(Bucket))) {
							Bucket *p = (Bucket*)((char*)zobj->properties->arData + idx);

							if (EXPECTED(p->key == name) ||
							    (EXPECTED(p->h == ZSTR_H(name)) &&
							     EXPECTED(p->key != NULL) &&
							     EXPECTED(zend_string_equal_content(p->key, name)))) {
								retval = &p->val;
								if (0 || (IS_UNUSED & (IS_TMP_VAR|IS_VAR)) != 0) {
									goto fetch_obj_r_copy;
								} else {
									goto fetch_obj_r_fast_copy;
								}
							}
						}
						CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_DYNAMIC_PROPERTY_OFFSET);
					}
					retval = zend_hash_find_known_hash(zobj->properties, name);
					if (EXPECTED(retval)) {
						uintptr_t idx = (char*)retval - (char*)zobj->properties->arData;
						CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_ENCODE_DYN_PROP_OFFSET(idx));
						if (0 || (IS_UNUSED & (IS_TMP_VAR|IS_VAR)) != 0) {
							goto fetch_obj_r_copy;
						} else {
							goto fetch_obj_r_fast_copy;
						}
					}
				}
			}
			name = Z_STR_P(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC));
		} else {
			name = zval_try_get_tmp_string(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC), &tmp_name);
			if (UNEXPECTED(!name)) {
				ZVAL_UNDEF(EX_VAR(opline->result.var));
				break;
			}
		}

#if ZEND_DEBUG
		/* For non-standard object handlers, verify a declared property type in debug builds.
		 * Fetch prop_info before calling read_property(), as it may deallocate the object. */
		zend_property_info *prop_info = NULL;
		if (zobj->handlers->read_property != zend_std_read_property) {
			prop_info = zend_get_property_info(zobj->ce, name, /* silent */ true);
		}
#endif
		retval = zobj->handlers->read_property(zobj, name, BP_VAR_R, cache_slot, EX_VAR(opline->result.var));
#if ZEND_DEBUG
		if (!EG(exception) && prop_info && prop_info != ZEND_WRONG_PROPERTY_INFO
				&& ZEND_TYPE_IS_SET(prop_info->type)) {
			ZVAL_OPT_DEREF(retval);
			zend_verify_property_type(prop_info, retval, /* strict */ true);
		}
#endif

		if (IS_CV != IS_CONST) {
			zend_tmp_string_release(tmp_name);
		}

		if (retval != EX_VAR(opline->result.var)) {
fetch_obj_r_copy:
			ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
		} else if (UNEXPECTED(Z_ISREF_P(retval))) {
			zend_unwrap_reference(retval);
		}
	} while (0);

fetch_obj_r_finish:




	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_FETCH_OBJ_W_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *property, *container, *result;

	SAVE_OPLINE();

	container = &EX(This);
	property = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
	result = EX_VAR(opline->result.var);
	zend_fetch_property_address(
		result, container, IS_UNUSED, property, IS_CV,
		((IS_CV == IS_CONST) ? CACHE_ADDR(opline->extended_value & ~ZEND_FETCH_OBJ_FLAGS) : NULL),
		BP_VAR_W, opline->extended_value, NULL OPLINE_CC EXECUTE_DATA_CC);


	if (IS_UNUSED == IS_VAR) {
		FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
	}
	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_FETCH_OBJ_RW_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *property, *container, *result;

	SAVE_OPLINE();
	container = &EX(This);
	property = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
	result = EX_VAR(opline->result.var);
	zend_fetch_property_address(result, container, IS_UNUSED, property, IS_CV, ((IS_CV == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL), BP_VAR_RW, 0, NULL OPLINE_CC EXECUTE_DATA_CC);


	if (IS_UNUSED == IS_VAR) {
		FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
	}
	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_FETCH_OBJ_IS_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *container;
	void **cache_slot = NULL;

	SAVE_OPLINE();
	container = &EX(This);

	if (IS_UNUSED == IS_CONST ||
	    (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
		do {
			if ((IS_UNUSED & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
				container = Z_REFVAL_P(container);
				if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
					break;
				}
			}
			if (IS_CV == IS_CV && Z_TYPE_P(EX_VAR(opline->op2.var)) == IS_UNDEF) {
				ZVAL_UNDEFINED_OP2();
			}
			ZVAL_NULL(EX_VAR(opline->result.var));
			goto fetch_obj_is_finish;
		} while (0);
	}

	/* here we are sure we are dealing with an object */
	do {
		zend_object *zobj = Z_OBJ_P(container);
		zend_string *name, *tmp_name;
		zval *retval;

		if (IS_CV == IS_CONST) {
			cache_slot = CACHE_ADDR(opline->extended_value);

			if (EXPECTED(zobj->ce == CACHED_PTR_EX(cache_slot))) {
				uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);

				if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
fetch_obj_is_simple:
					retval = OBJ_PROP(zobj, prop_offset);
					if (EXPECTED(Z_TYPE_P(retval) != IS_UNDEF)) {
						if (0 || (IS_UNUSED & (IS_TMP_VAR|IS_VAR)) != 0) {
							goto fetch_obj_is_copy;
						} else {
fetch_obj_is_fast_copy:
							ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
							ZEND_VM_NEXT_OPCODE();
						}
					}
				} else if (UNEXPECTED(IS_HOOKED_PROPERTY_OFFSET(prop_offset))) {
					if (ZEND_IS_PROPERTY_HOOK_SIMPLE_READ(prop_offset)) {
						zend_property_info *prop_info = CACHED_PTR_EX(cache_slot + 2);
						prop_offset = prop_info->offset;
						goto fetch_obj_is_simple;
					}
					/* Fall through to read_property for hooks. */
				} else if (EXPECTED(zobj->properties != NULL)) {
					ZEND_ASSERT(IS_DYNAMIC_PROPERTY_OFFSET(prop_offset));
					name = Z_STR_P(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC));
					if (!IS_UNKNOWN_DYNAMIC_PROPERTY_OFFSET(prop_offset)) {
						uintptr_t idx = ZEND_DECODE_DYN_PROP_OFFSET(prop_offset);

						if (EXPECTED(idx < zobj->properties->nNumUsed * sizeof(Bucket))) {
							Bucket *p = (Bucket*)((char*)zobj->properties->arData + idx);

							if (EXPECTED(p->key == name) ||
							    (EXPECTED(p->h == ZSTR_H(name)) &&
							     EXPECTED(p->key != NULL) &&
							     EXPECTED(zend_string_equal_content(p->key, name)))) {
								retval = &p->val;
								if (0 || (IS_UNUSED & (IS_TMP_VAR|IS_VAR)) != 0) {
									goto fetch_obj_is_copy;
								} else {
									goto fetch_obj_is_fast_copy;
								}
							}
						}
						CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_DYNAMIC_PROPERTY_OFFSET);
					}
					retval = zend_hash_find_known_hash(zobj->properties, name);
					if (EXPECTED(retval)) {
						uintptr_t idx = (char*)retval - (char*)zobj->properties->arData;
						CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_ENCODE_DYN_PROP_OFFSET(idx));
						if (0 || (IS_UNUSED & (IS_TMP_VAR|IS_VAR)) != 0) {
							goto fetch_obj_is_copy;
						} else {
							goto fetch_obj_is_fast_copy;
						}
					}
				}
			}
			name = Z_STR_P(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC));
		} else {
			name = zval_try_get_tmp_string(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC), &tmp_name);
			if (UNEXPECTED(!name)) {
				ZVAL_UNDEF(EX_VAR(opline->result.var));
				break;
			}
		}

		retval = zobj->handlers->read_property(zobj, name, BP_VAR_IS, cache_slot, EX_VAR(opline->result.var));

		if (IS_CV != IS_CONST) {
			zend_tmp_string_release(tmp_name);
		}

		if (retval != EX_VAR(opline->result.var)) {
fetch_obj_is_copy:
			ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
		} else if (UNEXPECTED(Z_ISREF_P(retval))) {
			zend_unwrap_reference(retval);
		}
	} while (0);

fetch_obj_is_finish:




	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_FETCH_OBJ_FUNC_ARG_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
#if 0
	USE_OPLINE
#endif

	if (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) {
		/* Behave like FETCH_OBJ_W */
		if ((IS_UNUSED & (IS_CONST|IS_TMP_VAR))) {
			ZEND_VM_TAIL_CALL(zend_use_tmp_in_write_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
		}
		ZEND_VM_TAIL_CALL(ZEND_FETCH_OBJ_W_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
	} else {
		ZEND_VM_TAIL_CALL(ZEND_FETCH_OBJ_R_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
	}
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_FETCH_OBJ_UNSET_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *container, *property, *result;

	SAVE_OPLINE();
	container = &EX(This);
	property = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
	result = EX_VAR(opline->result.var);
	zend_fetch_property_address(result, container, IS_UNUSED, property, IS_CV, ((IS_CV == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL), BP_VAR_UNSET, 0, NULL OPLINE_CC EXECUTE_DATA_CC);


	if (IS_UNUSED == IS_VAR) {
		FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
	}
	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_ASSIGN_OBJ_SPEC_UNUSED_CV_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *object, *value, tmp;
	zend_object *zobj;
	zend_string *name, *tmp_name;
	zend_refcounted *garbage = NULL;

	SAVE_OPLINE();
	object = &EX(This);
	value = RT_CONSTANT((opline+1), (opline+1)->op1);

	if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
		if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
			object = Z_REFVAL_P(object);
			goto assign_object;
		}
		zend_throw_non_object_error(object, _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC) OPLINE_CC EXECUTE_DATA_CC);
		value = &EG(uninitialized_zval);
		goto free_and_exit_assign_obj;
	}

assign_object:
	zobj = Z_OBJ_P(object);
	if (IS_CV == IS_CONST) {
		if (EXPECTED(zobj->ce == CACHED_PTR(opline->extended_value))) {
			void **cache_slot = CACHE_ADDR(opline->extended_value);
			uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
			zval *property_val;
			zend_property_info *prop_info;

			if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
				prop_info = (zend_property_info*) CACHED_PTR_EX(cache_slot + 2);

assign_obj_simple:
				property_val = OBJ_PROP(zobj, prop_offset);
				if (Z_TYPE_P(property_val) != IS_UNDEF) {
					if (prop_info != NULL) {
						value = zend_assign_to_typed_prop(prop_info, property_val, value, &garbage EXECUTE_DATA_CC);
						goto free_and_exit_assign_obj;
					} else {
fast_assign_obj:
						value = zend_assign_to_variable_ex(property_val, value, IS_CONST, EX_USES_STRICT_TYPES(), &garbage);
						if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
							ZVAL_COPY(EX_VAR(opline->result.var), value);
						}
						goto exit_assign_obj;
					}
				}
			} else if (EXPECTED(IS_DYNAMIC_PROPERTY_OFFSET(prop_offset))) {
				name = Z_STR_P(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC));
				if (UNEXPECTED(zend_lazy_object_must_init(zobj))) {
					zobj = zend_lazy_object_init(zobj);
					if (!zobj) {
						value = &EG(uninitialized_zval);
						goto free_and_exit_assign_obj;
					}
				}
				if (!zobj->ce->__set && (zobj->ce->ce_flags & ZEND_ACC_ALLOW_DYNAMIC_PROPERTIES)) {
					rebuild_object_properties_internal(zobj);
				}
				if (EXPECTED(zobj->properties != NULL)) {
					if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
						if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
							GC_DELREF(zobj->properties);
						}
						zobj->properties = zend_array_dup(zobj->properties);
					}
					property_val = zend_hash_find_known_hash(zobj->properties, name);
					if (property_val) {
						goto fast_assign_obj;
					}
				}

				if (!zobj->ce->__set && (zobj->ce->ce_flags & ZEND_ACC_ALLOW_DYNAMIC_PROPERTIES)) {
					if (IS_CONST == IS_CONST) {
						if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
							Z_ADDREF_P(value);
						}
					} else if (IS_CONST != IS_TMP_VAR) {
						if (Z_ISREF_P(value)) {
							if (IS_CONST == IS_VAR) {
								zend_reference *ref = Z_REF_P(value);
								if (GC_DELREF(ref) == 0) {
									ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
									efree_size(ref, sizeof(zend_reference));
									value = &tmp;
								} else {
									value = Z_REFVAL_P(value);
									Z_TRY_ADDREF_P(value);
								}
							} else {
								value = Z_REFVAL_P(value);
								Z_TRY_ADDREF_P(value);
							}
						} else if (IS_CONST == IS_CV) {
							Z_TRY_ADDREF_P(value);
						}
					}
					zend_hash_add_new(zobj->properties, name, value);
					if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
						ZVAL_COPY(EX_VAR(opline->result.var), value);
					}
					goto exit_assign_obj;
				}
			} else {
				ZEND_ASSERT(IS_HOOKED_PROPERTY_OFFSET(prop_offset));
				if (ZEND_IS_PROPERTY_HOOK_SIMPLE_WRITE(prop_offset)) {
					prop_info = CACHED_PTR_EX(cache_slot + 2);
					prop_offset = prop_info->offset;
					if (!ZEND_TYPE_IS_SET(prop_info->type)) {
						prop_info = NULL;
					}
					goto assign_obj_simple;
				}
				/* Fall through to write_property for hooks. */
			}
		}
		name = Z_STR_P(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC));
	} else {
		name = zval_try_get_tmp_string(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC), &tmp_name);
		if (UNEXPECTED(!name)) {


			UNDEF_RESULT();
			goto exit_assign_obj;
		}
	}

	if (IS_CONST == IS_CV || IS_CONST == IS_VAR) {
		ZVAL_DEREF(value);
	}

	value = zobj->handlers->write_property(zobj, name, value, (IS_CV == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);

	if (IS_CV != IS_CONST) {
		zend_tmp_string_release(tmp_name);
	}

free_and_exit_assign_obj:
	if (UNEXPECTED(RETURN_VALUE_USED(opline)) && value) {
		ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
	}


exit_assign_obj:
	if (garbage) {
		GC_DTOR_NO_REF(garbage);
	}




	/* assign_obj has two opcodes! */
	ZEND_VM_NEXT_OPCODE_EX(1, 2);
}

/* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CONST|VAR) */
static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_ASSIGN_OBJ_SPEC_UNUSED_CV_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *object, *value, tmp;
	zend_object *zobj;
	zend_string *name, *tmp_name;
	zend_refcounted *garbage = NULL;

	SAVE_OPLINE();
	object = &EX(This);
	value = _get_zval_ptr_tmp((opline+1)->op1.var EXECUTE_DATA_CC);

	if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
		if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
			object = Z_REFVAL_P(object);
			goto assign_object;
		}
		zend_throw_non_object_error(object, _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC) OPLINE_CC EXECUTE_DATA_CC);
		value = &EG(uninitialized_zval);
		goto free_and_exit_assign_obj;
	}

assign_object:
	zobj = Z_OBJ_P(object);
	if (IS_CV == IS_CONST) {
		if (EXPECTED(zobj->ce == CACHED_PTR(opline->extended_value))) {
			void **cache_slot = CACHE_ADDR(opline->extended_value);
			uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
			zval *property_val;
			zend_property_info *prop_info;

			if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
				prop_info = (zend_property_info*) CACHED_PTR_EX(cache_slot + 2);

assign_obj_simple:
				property_val = OBJ_PROP(zobj, prop_offset);
				if (Z_TYPE_P(property_val) != IS_UNDEF) {
					if (prop_info != NULL) {
						value = zend_assign_to_typed_prop(prop_info, property_val, value, &garbage EXECUTE_DATA_CC);
						goto free_and_exit_assign_obj;
					} else {
fast_assign_obj:
						value = zend_assign_to_variable_ex(property_val, value, IS_TMP_VAR, EX_USES_STRICT_TYPES(), &garbage);
						if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
							ZVAL_COPY(EX_VAR(opline->result.var), value);
						}
						goto exit_assign_obj;
					}
				}
			} else if (EXPECTED(IS_DYNAMIC_PROPERTY_OFFSET(prop_offset))) {
				name = Z_STR_P(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC));
				if (UNEXPECTED(zend_lazy_object_must_init(zobj))) {
					zobj = zend_lazy_object_init(zobj);
					if (!zobj) {
						value = &EG(uninitialized_zval);
						goto free_and_exit_assign_obj;
					}
				}
				if (!zobj->ce->__set && (zobj->ce->ce_flags & ZEND_ACC_ALLOW_DYNAMIC_PROPERTIES)) {
					rebuild_object_properties_internal(zobj);
				}
				if (EXPECTED(zobj->properties != NULL)) {
					if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
						if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
							GC_DELREF(zobj->properties);
						}
						zobj->properties = zend_array_dup(zobj->properties);
					}
					property_val = zend_hash_find_known_hash(zobj->properties, name);
					if (property_val) {
						goto fast_assign_obj;
					}
				}

				if (!zobj->ce->__set && (zobj->ce->ce_flags & ZEND_ACC_ALLOW_DYNAMIC_PROPERTIES)) {
					if (IS_TMP_VAR == IS_CONST) {
						if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
							Z_ADDREF_P(value);
						}
					} else if (IS_TMP_VAR != IS_TMP_VAR) {
						if (Z_ISREF_P(value)) {
							if (IS_TMP_VAR == IS_VAR) {
								zend_reference *ref = Z_REF_P(value);
								if (GC_DELREF(ref) == 0) {
									ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
									efree_size(ref, sizeof(zend_reference));
									value = &tmp;
								} else {
									value = Z_REFVAL_P(value);
									Z_TRY_ADDREF_P(value);
								}
							} else {
								value = Z_REFVAL_P(value);
								Z_TRY_ADDREF_P(value);
							}
						} else if (IS_TMP_VAR == IS_CV) {
							Z_TRY_ADDREF_P(value);
						}
					}
					zend_hash_add_new(zobj->properties, name, value);
					if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
						ZVAL_COPY(EX_VAR(opline->result.var), value);
					}
					goto exit_assign_obj;
				}
			} else {
				ZEND_ASSERT(IS_HOOKED_PROPERTY_OFFSET(prop_offset));
				if (ZEND_IS_PROPERTY_HOOK_SIMPLE_WRITE(prop_offset)) {
					prop_info = CACHED_PTR_EX(cache_slot + 2);
					prop_offset = prop_info->offset;
					if (!ZEND_TYPE_IS_SET(prop_info->type)) {
						prop_info = NULL;
					}
					goto assign_obj_simple;
				}
				/* Fall through to write_property for hooks. */
			}
		}
		name = Z_STR_P(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC));
	} else {
		name = zval_try_get_tmp_string(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC), &tmp_name);
		if (UNEXPECTED(!name)) {
			zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
			UNDEF_RESULT();
			goto exit_assign_obj;
		}
	}

	if (IS_TMP_VAR == IS_CV || IS_TMP_VAR == IS_VAR) {
		ZVAL_DEREF(value);
	}

	value = zobj->handlers->write_property(zobj, name, value, (IS_CV == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);

	if (IS_CV != IS_CONST) {
		zend_tmp_string_release(tmp_name);
	}

free_and_exit_assign_obj:
	if (UNEXPECTED(RETURN_VALUE_USED(opline)) && value) {
		ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
	}
	zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
exit_assign_obj:
	if (garbage) {
		GC_DTOR_NO_REF(garbage);
	}




	/* assign_obj has two opcodes! */
	ZEND_VM_NEXT_OPCODE_EX(1, 2);
}

/* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CONST|VAR) */
static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_ASSIGN_OBJ_SPEC_UNUSED_CV_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *object, *value, tmp;
	zend_object *zobj;
	zend_string *name, *tmp_name;
	zend_refcounted *garbage = NULL;

	SAVE_OPLINE();
	object = &EX(This);
	value = _get_zval_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);

	if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
		if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
			object = Z_REFVAL_P(object);
			goto assign_object;
		}
		zend_throw_non_object_error(object, _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC) OPLINE_CC EXECUTE_DATA_CC);
		value = &EG(uninitialized_zval);
		goto free_and_exit_assign_obj;
	}

assign_object:
	zobj = Z_OBJ_P(object);
	if (IS_CV == IS_CONST) {
		if (EXPECTED(zobj->ce == CACHED_PTR(opline->extended_value))) {
			void **cache_slot = CACHE_ADDR(opline->extended_value);
			uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
			zval *property_val;
			zend_property_info *prop_info;

			if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
				prop_info = (zend_property_info*) CACHED_PTR_EX(cache_slot + 2);

assign_obj_simple:
				property_val = OBJ_PROP(zobj, prop_offset);
				if (Z_TYPE_P(property_val) != IS_UNDEF) {
					if (prop_info != NULL) {
						value = zend_assign_to_typed_prop(prop_info, property_val, value, &garbage EXECUTE_DATA_CC);
						goto free_and_exit_assign_obj;
					} else {
fast_assign_obj:
						value = zend_assign_to_variable_ex(property_val, value, IS_VAR, EX_USES_STRICT_TYPES(), &garbage);
						if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
							ZVAL_COPY(EX_VAR(opline->result.var), value);
						}
						goto exit_assign_obj;
					}
				}
			} else if (EXPECTED(IS_DYNAMIC_PROPERTY_OFFSET(prop_offset))) {
				name = Z_STR_P(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC));
				if (UNEXPECTED(zend_lazy_object_must_init(zobj))) {
					zobj = zend_lazy_object_init(zobj);
					if (!zobj) {
						value = &EG(uninitialized_zval);
						goto free_and_exit_assign_obj;
					}
				}
				if (!zobj->ce->__set && (zobj->ce->ce_flags & ZEND_ACC_ALLOW_DYNAMIC_PROPERTIES)) {
					rebuild_object_properties_internal(zobj);
				}
				if (EXPECTED(zobj->properties != NULL)) {
					if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
						if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
							GC_DELREF(zobj->properties);
						}
						zobj->properties = zend_array_dup(zobj->properties);
					}
					property_val = zend_hash_find_known_hash(zobj->properties, name);
					if (property_val) {
						goto fast_assign_obj;
					}
				}

				if (!zobj->ce->__set && (zobj->ce->ce_flags & ZEND_ACC_ALLOW_DYNAMIC_PROPERTIES)) {
					if (IS_VAR == IS_CONST) {
						if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
							Z_ADDREF_P(value);
						}
					} else if (IS_VAR != IS_TMP_VAR) {
						if (Z_ISREF_P(value)) {
							if (IS_VAR == IS_VAR) {
								zend_reference *ref = Z_REF_P(value);
								if (GC_DELREF(ref) == 0) {
									ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
									efree_size(ref, sizeof(zend_reference));
									value = &tmp;
								} else {
									value = Z_REFVAL_P(value);
									Z_TRY_ADDREF_P(value);
								}
							} else {
								value = Z_REFVAL_P(value);
								Z_TRY_ADDREF_P(value);
							}
						} else if (IS_VAR == IS_CV) {
							Z_TRY_ADDREF_P(value);
						}
					}
					zend_hash_add_new(zobj->properties, name, value);
					if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
						ZVAL_COPY(EX_VAR(opline->result.var), value);
					}
					goto exit_assign_obj;
				}
			} else {
				ZEND_ASSERT(IS_HOOKED_PROPERTY_OFFSET(prop_offset));
				if (ZEND_IS_PROPERTY_HOOK_SIMPLE_WRITE(prop_offset)) {
					prop_info = CACHED_PTR_EX(cache_slot + 2);
					prop_offset = prop_info->offset;
					if (!ZEND_TYPE_IS_SET(prop_info->type)) {
						prop_info = NULL;
					}
					goto assign_obj_simple;
				}
				/* Fall through to write_property for hooks. */
			}
		}
		name = Z_STR_P(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC));
	} else {
		name = zval_try_get_tmp_string(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC), &tmp_name);
		if (UNEXPECTED(!name)) {
			zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
			UNDEF_RESULT();
			goto exit_assign_obj;
		}
	}

	if (IS_VAR == IS_CV || IS_VAR == IS_VAR) {
		ZVAL_DEREF(value);
	}

	value = zobj->handlers->write_property(zobj, name, value, (IS_CV == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);

	if (IS_CV != IS_CONST) {
		zend_tmp_string_release(tmp_name);
	}

free_and_exit_assign_obj:
	if (UNEXPECTED(RETURN_VALUE_USED(opline)) && value) {
		ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
	}
	zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
exit_assign_obj:
	if (garbage) {
		GC_DTOR_NO_REF(garbage);
	}




	/* assign_obj has two opcodes! */
	ZEND_VM_NEXT_OPCODE_EX(1, 2);
}

/* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CONST|VAR) */
static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_ASSIGN_OBJ_SPEC_UNUSED_CV_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *object, *value, tmp;
	zend_object *zobj;
	zend_string *name, *tmp_name;
	zend_refcounted *garbage = NULL;

	SAVE_OPLINE();
	object = &EX(This);
	value = _get_zval_ptr_cv_BP_VAR_R((opline+1)->op1.var EXECUTE_DATA_CC);

	if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
		if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
			object = Z_REFVAL_P(object);
			goto assign_object;
		}
		zend_throw_non_object_error(object, _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC) OPLINE_CC EXECUTE_DATA_CC);
		value = &EG(uninitialized_zval);
		goto free_and_exit_assign_obj;
	}

assign_object:
	zobj = Z_OBJ_P(object);
	if (IS_CV == IS_CONST) {
		if (EXPECTED(zobj->ce == CACHED_PTR(opline->extended_value))) {
			void **cache_slot = CACHE_ADDR(opline->extended_value);
			uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
			zval *property_val;
			zend_property_info *prop_info;

			if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
				prop_info = (zend_property_info*) CACHED_PTR_EX(cache_slot + 2);

assign_obj_simple:
				property_val = OBJ_PROP(zobj, prop_offset);
				if (Z_TYPE_P(property_val) != IS_UNDEF) {
					if (prop_info != NULL) {
						value = zend_assign_to_typed_prop(prop_info, property_val, value, &garbage EXECUTE_DATA_CC);
						goto free_and_exit_assign_obj;
					} else {
fast_assign_obj:
						value = zend_assign_to_variable_ex(property_val, value, IS_CV, EX_USES_STRICT_TYPES(), &garbage);
						if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
							ZVAL_COPY(EX_VAR(opline->result.var), value);
						}
						goto exit_assign_obj;
					}
				}
			} else if (EXPECTED(IS_DYNAMIC_PROPERTY_OFFSET(prop_offset))) {
				name = Z_STR_P(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC));
				if (UNEXPECTED(zend_lazy_object_must_init(zobj))) {
					zobj = zend_lazy_object_init(zobj);
					if (!zobj) {
						value = &EG(uninitialized_zval);
						goto free_and_exit_assign_obj;
					}
				}
				if (!zobj->ce->__set && (zobj->ce->ce_flags & ZEND_ACC_ALLOW_DYNAMIC_PROPERTIES)) {
					rebuild_object_properties_internal(zobj);
				}
				if (EXPECTED(zobj->properties != NULL)) {
					if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
						if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
							GC_DELREF(zobj->properties);
						}
						zobj->properties = zend_array_dup(zobj->properties);
					}
					property_val = zend_hash_find_known_hash(zobj->properties, name);
					if (property_val) {
						goto fast_assign_obj;
					}
				}

				if (!zobj->ce->__set && (zobj->ce->ce_flags & ZEND_ACC_ALLOW_DYNAMIC_PROPERTIES)) {
					if (IS_CV == IS_CONST) {
						if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
							Z_ADDREF_P(value);
						}
					} else if (IS_CV != IS_TMP_VAR) {
						if (Z_ISREF_P(value)) {
							if (IS_CV == IS_VAR) {
								zend_reference *ref = Z_REF_P(value);
								if (GC_DELREF(ref) == 0) {
									ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
									efree_size(ref, sizeof(zend_reference));
									value = &tmp;
								} else {
									value = Z_REFVAL_P(value);
									Z_TRY_ADDREF_P(value);
								}
							} else {
								value = Z_REFVAL_P(value);
								Z_TRY_ADDREF_P(value);
							}
						} else if (IS_CV == IS_CV) {
							Z_TRY_ADDREF_P(value);
						}
					}
					zend_hash_add_new(zobj->properties, name, value);
					if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
						ZVAL_COPY(EX_VAR(opline->result.var), value);
					}
					goto exit_assign_obj;
				}
			} else {
				ZEND_ASSERT(IS_HOOKED_PROPERTY_OFFSET(prop_offset));
				if (ZEND_IS_PROPERTY_HOOK_SIMPLE_WRITE(prop_offset)) {
					prop_info = CACHED_PTR_EX(cache_slot + 2);
					prop_offset = prop_info->offset;
					if (!ZEND_TYPE_IS_SET(prop_info->type)) {
						prop_info = NULL;
					}
					goto assign_obj_simple;
				}
				/* Fall through to write_property for hooks. */
			}
		}
		name = Z_STR_P(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC));
	} else {
		name = zval_try_get_tmp_string(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC), &tmp_name);
		if (UNEXPECTED(!name)) {


			UNDEF_RESULT();
			goto exit_assign_obj;
		}
	}

	if (IS_CV == IS_CV || IS_CV == IS_VAR) {
		ZVAL_DEREF(value);
	}

	value = zobj->handlers->write_property(zobj, name, value, (IS_CV == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);

	if (IS_CV != IS_CONST) {
		zend_tmp_string_release(tmp_name);
	}

free_and_exit_assign_obj:
	if (UNEXPECTED(RETURN_VALUE_USED(opline)) && value) {
		ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
	}


exit_assign_obj:
	if (garbage) {
		GC_DTOR_NO_REF(garbage);
	}




	/* assign_obj has two opcodes! */
	ZEND_VM_NEXT_OPCODE_EX(1, 2);
}

/* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CONST|VAR) */
static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_ASSIGN_OBJ_REF_SPEC_UNUSED_CV_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *property, *container, *value_ptr;

	SAVE_OPLINE();

	container = &EX(This);
	property = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);

	value_ptr = _get_zval_ptr_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);

	if (1) {
		if (IS_UNUSED == IS_UNUSED) {
			if (IS_CV == IS_CONST) {
				zend_assign_to_property_reference_this_const(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
			} else {
				zend_assign_to_property_reference_this_var(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
			}
		} else {
			if (IS_CV == IS_CONST) {
				zend_assign_to_property_reference_var_const(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
			} else {
				zend_assign_to_property_reference_var_var(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
			}
		}
	} else {
		zend_assign_to_property_reference(container, IS_UNUSED, property, IS_CV, value_ptr OPLINE_CC EXECUTE_DATA_CC);
	}




	zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
	ZEND_VM_NEXT_OPCODE_EX(1, 2);
}

/* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CONST|VAR) */
static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_ASSIGN_OBJ_REF_SPEC_UNUSED_CV_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *property, *container, *value_ptr;

	SAVE_OPLINE();

	container = &EX(This);
	property = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);

	value_ptr = _get_zval_ptr_cv_BP_VAR_W((opline+1)->op1.var EXECUTE_DATA_CC);

	if (1) {
		if (IS_UNUSED == IS_UNUSED) {
			if (IS_CV == IS_CONST) {
				zend_assign_to_property_reference_this_const(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
			} else {
				zend_assign_to_property_reference_this_var(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
			}
		} else {
			if (IS_CV == IS_CONST) {
				zend_assign_to_property_reference_var_const(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
			} else {
				zend_assign_to_property_reference_var_var(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
			}
		}
	} else {
		zend_assign_to_property_reference(container, IS_UNUSED, property, IS_CV, value_ptr OPLINE_CC EXECUTE_DATA_CC);
	}






	ZEND_VM_NEXT_OPCODE_EX(1, 2);
}

/* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CONST|VAR) */
static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_ROPE_INIT_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zend_string **rope;
	zval *var;

	/* Compiler allocates the necessary number of zval slots to keep the rope */
	rope = (zend_string**)EX_VAR(opline->result.var);
	if (IS_CV == IS_CONST) {
		var = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
		rope[0] = Z_STR_P(var);
		if (UNEXPECTED(Z_REFCOUNTED_P(var))) {
			Z_ADDREF_P(var);
		}
	} else {
		var = EX_VAR(opline->op2.var);
		if (EXPECTED(Z_TYPE_P(var) == IS_STRING)) {
			if (IS_CV == IS_CV) {
				rope[0] = zend_string_copy(Z_STR_P(var));
			} else {
				rope[0] = Z_STR_P(var);
			}
		} else {
			SAVE_OPLINE();
			if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(var) == IS_UNDEF)) {
				ZVAL_UNDEFINED_OP2();
			}
			rope[0] = zval_get_string_func(var);


			ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
		}
	}
	ZEND_VM_NEXT_OPCODE();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_FETCH_CLASS_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	zval *class_name;
	USE_OPLINE

	SAVE_OPLINE();
	if (IS_CV == IS_UNUSED) {
		Z_CE_P(EX_VAR(opline->result.var)) = zend_fetch_class(NULL, opline->op1.num);
		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
	} else if (IS_CV == IS_CONST) {
		zend_class_entry *ce = CACHED_PTR(opline->extended_value);

		if (UNEXPECTED(ce == NULL)) {
			class_name = EX_VAR(opline->op2.var);
			ce = zend_fetch_class_by_name(Z_STR_P(class_name), Z_STR_P(class_name + 1), opline->op1.num);
			CACHE_PTR(opline->extended_value, ce);
		}
		Z_CE_P(EX_VAR(opline->result.var)) = ce;
	} else {
		class_name = EX_VAR(opline->op2.var);
try_class_name:
		if (Z_TYPE_P(class_name) == IS_OBJECT) {
			Z_CE_P(EX_VAR(opline->result.var)) = Z_OBJCE_P(class_name);
		} else if (Z_TYPE_P(class_name) == IS_STRING) {
			Z_CE_P(EX_VAR(opline->result.var)) = zend_fetch_class(Z_STR_P(class_name), opline->op1.num);
		} else if ((IS_CV & (IS_VAR|IS_CV)) && Z_TYPE_P(class_name) == IS_REFERENCE) {
			class_name = Z_REFVAL_P(class_name);
			goto try_class_name;
		} else {
			if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(class_name) == IS_UNDEF)) {
				ZVAL_UNDEFINED_OP2();
				if (UNEXPECTED(EG(exception) != NULL)) {
					HANDLE_EXCEPTION();
				}
			}
			zend_throw_error(NULL, "Class name must be a valid object or a string");
		}
	}


	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_INIT_METHOD_CALL_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *function_name;
	zval *object;
	zend_function *fbc;
	zend_class_entry *called_scope;
	zend_object *obj;
	zend_execute_data *call;
	uint32_t call_info;

	SAVE_OPLINE();

	object = &EX(This);

	if (IS_CV != IS_CONST) {
		function_name = EX_VAR(opline->op2.var);
	}

	if (IS_CV != IS_CONST &&
	    UNEXPECTED(Z_TYPE_P(function_name) != IS_STRING)) {
		do {
			if ((IS_CV & (IS_VAR|IS_CV)) && Z_ISREF_P(function_name)) {
				function_name = Z_REFVAL_P(function_name);
				if (EXPECTED(Z_TYPE_P(function_name) == IS_STRING)) {
					break;
				}
			} else if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) {
				ZVAL_UNDEFINED_OP2();
				if (UNEXPECTED(EG(exception) != NULL)) {


					HANDLE_EXCEPTION();
				}
			}
			zend_throw_error(NULL, "Method name must be a string");




			HANDLE_EXCEPTION();
		} while (0);
	}

	if (IS_UNUSED == IS_UNUSED) {
		obj = Z_OBJ_P(object);
	} else {
		do {
			if (IS_UNUSED != IS_CONST && EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
				obj = Z_OBJ_P(object);
			} else {
				if ((IS_UNUSED & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(object))) {
					zend_reference *ref = Z_REF_P(object);

					object = &ref->val;
					if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
						obj = Z_OBJ_P(object);
						if (IS_UNUSED & IS_VAR) {
							if (UNEXPECTED(GC_DELREF(ref) == 0)) {
								efree_size(ref, sizeof(zend_reference));
							} else {
								Z_ADDREF_P(object);
							}
						}
						break;
					}
				}
				if (IS_UNUSED == IS_CV && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
					object = ZVAL_UNDEFINED_OP1();
					if (UNEXPECTED(EG(exception) != NULL)) {
						if (IS_CV != IS_CONST) {


						}
						HANDLE_EXCEPTION();
					}
				}
				if (IS_CV == IS_CONST) {
					function_name = EX_VAR(opline->op2.var);
				}
				zend_invalid_method_call(object, function_name);




				HANDLE_EXCEPTION();
			}
		} while (0);
	}

	called_scope = obj->ce;

	if (IS_CV == IS_CONST &&
	    EXPECTED(CACHED_PTR(opline->result.num) == called_scope)) {
		fbc = CACHED_PTR(opline->result.num + sizeof(void*));
	} else {
		zend_object *orig_obj = obj;

		if (IS_CV == IS_CONST) {
			function_name = EX_VAR(opline->op2.var);
		}

		/* First, locate the function. */
		fbc = obj->handlers->get_method(&obj, Z_STR_P(function_name), ((IS_CV == IS_CONST) ? (RT_CONSTANT(opline, opline->op2) + 1) : NULL));
		if (UNEXPECTED(fbc == NULL)) {
			if (EXPECTED(!EG(exception))) {
				zend_undefined_method(orig_obj->ce, Z_STR_P(function_name));
			}


			if ((IS_UNUSED & (IS_VAR|IS_TMP_VAR)) && GC_DELREF(orig_obj) == 0) {
				zend_objects_store_del(orig_obj);
			}
			HANDLE_EXCEPTION();
		}
		if (IS_CV == IS_CONST &&
		    EXPECTED(!(fbc->common.fn_flags & (ZEND_ACC_CALL_VIA_TRAMPOLINE|ZEND_ACC_NEVER_CACHE))) &&
		    EXPECTED(obj == orig_obj)) {
			CACHE_POLYMORPHIC_PTR(opline->result.num, called_scope, fbc);
		}
		if ((IS_UNUSED & (IS_VAR|IS_TMP_VAR)) && UNEXPECTED(obj != orig_obj)) {
			GC_ADDREF(obj); /* For $this pointer */
			if (GC_DELREF(orig_obj) == 0) {
				zend_objects_store_del(orig_obj);
			}
		}
		if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!RUN_TIME_CACHE(&fbc->op_array))) {
			init_func_run_time_cache(&fbc->op_array);
		}
	}

	if (IS_CV != IS_CONST) {


	}

	call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_HAS_THIS;
	if (UNEXPECTED((fbc->common.fn_flags & ZEND_ACC_STATIC) != 0)) {
		if ((IS_UNUSED & (IS_VAR|IS_TMP_VAR)) && GC_DELREF(obj) == 0) {
			zend_objects_store_del(obj);
			if (UNEXPECTED(EG(exception))) {
				HANDLE_EXCEPTION();
			}
		}
		/* call static method */
		obj = (zend_object*)called_scope;
		call_info = ZEND_CALL_NESTED_FUNCTION;
	} else if (IS_UNUSED & (IS_VAR|IS_TMP_VAR|IS_CV)) {
		if (IS_UNUSED == IS_CV) {
			GC_ADDREF(obj); /* For $this pointer */
		}
		/* CV may be changed indirectly (e.g. when it's a reference) */
		call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_HAS_THIS | ZEND_CALL_RELEASE_THIS;
	}

	call = zend_vm_stack_push_call_frame(call_info,
		fbc, opline->extended_value, obj);
	call->prev_execute_data = EX(call);
	EX(call) = call;

	ZEND_VM_NEXT_OPCODE();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_INIT_STATIC_METHOD_CALL_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *function_name;
	zend_class_entry *ce;
	uint32_t call_info;
	zend_function *fbc;
	zend_execute_data *call;

	SAVE_OPLINE();

	if (IS_UNUSED == IS_CONST) {
		/* no function found. try a static method in class */
		ce = CACHED_PTR(opline->result.num);
		if (UNEXPECTED(ce == NULL)) {
			ce = zend_fetch_class_by_name(Z_STR_P(RT_CONSTANT(opline, opline->op1)), Z_STR_P(RT_CONSTANT(opline, opline->op1) + 1), ZEND_FETCH_CLASS_DEFAULT | ZEND_FETCH_CLASS_EXCEPTION);
			if (UNEXPECTED(ce == NULL)) {


				HANDLE_EXCEPTION();
			}
			if (IS_CV != IS_CONST) {
				CACHE_PTR(opline->result.num, ce);
			}
		}
	} else if (IS_UNUSED == IS_UNUSED) {
		ce = zend_fetch_class(NULL, opline->op1.num);
		if (UNEXPECTED(ce == NULL)) {


			HANDLE_EXCEPTION();
		}
	} else {
		ce = Z_CE_P(EX_VAR(opline->op1.var));
	}

	if (IS_UNUSED == IS_CONST &&
	    IS_CV == IS_CONST &&
	    EXPECTED((fbc = CACHED_PTR(opline->result.num + sizeof(void*))) != NULL)) {
		/* nothing to do */
	} else if (IS_UNUSED != IS_CONST &&
	           IS_CV == IS_CONST &&
	           EXPECTED(CACHED_PTR(opline->result.num) == ce)) {
		fbc = CACHED_PTR(opline->result.num + sizeof(void*));
	} else if (IS_CV != IS_UNUSED) {
		function_name = EX_VAR(opline->op2.var);
		if (IS_CV != IS_CONST) {
			if (UNEXPECTED(Z_TYPE_P(function_name) != IS_STRING)) {
				do {
					if (IS_CV & (IS_VAR|IS_CV) && Z_ISREF_P(function_name)) {
						function_name = Z_REFVAL_P(function_name);
						if (EXPECTED(Z_TYPE_P(function_name) == IS_STRING)) {
							break;
						}
					} else if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) {
						ZVAL_UNDEFINED_OP2();
						if (UNEXPECTED(EG(exception) != NULL)) {
							HANDLE_EXCEPTION();
						}
					}
					zend_throw_error(NULL, "Method name must be a string");


					HANDLE_EXCEPTION();
				} while (0);
			}
		}

		if (ce->get_static_method) {
			fbc = ce->get_static_method(ce, Z_STR_P(function_name));
		} else {
			fbc = zend_std_get_static_method(ce, Z_STR_P(function_name), ((IS_CV == IS_CONST) ? (RT_CONSTANT(opline, opline->op2) + 1) : NULL));
		}
		if (UNEXPECTED(fbc == NULL)) {
			if (EXPECTED(!EG(exception))) {
				zend_undefined_method(ce, Z_STR_P(function_name));
			}


			HANDLE_EXCEPTION();
		}
		if (IS_CV == IS_CONST &&
		    EXPECTED(!(fbc->common.fn_flags & (ZEND_ACC_CALL_VIA_TRAMPOLINE|ZEND_ACC_NEVER_CACHE))) &&
			EXPECTED(!(fbc->common.scope->ce_flags & ZEND_ACC_TRAIT))) {
			CACHE_POLYMORPHIC_PTR(opline->result.num, ce, fbc);
		}
		if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!RUN_TIME_CACHE(&fbc->op_array))) {
			init_func_run_time_cache(&fbc->op_array);
		}
		if (IS_CV != IS_CONST) {


		}
	} else {
		if (UNEXPECTED(ce->constructor == NULL)) {
			zend_throw_error(NULL, "Cannot call constructor");
			HANDLE_EXCEPTION();
		}
		if (Z_TYPE(EX(This)) == IS_OBJECT && Z_OBJ(EX(This))->ce != ce->constructor->common.scope && (ce->constructor->common.fn_flags & ZEND_ACC_PRIVATE)) {
			zend_throw_error(NULL, "Cannot call private %s::__construct()", ZSTR_VAL(ce->name));
			HANDLE_EXCEPTION();
		}
		fbc = ce->constructor;
		if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!RUN_TIME_CACHE(&fbc->op_array))) {
			init_func_run_time_cache(&fbc->op_array);
		}
	}

	if (!(fbc->common.fn_flags & ZEND_ACC_STATIC)) {
		if (Z_TYPE(EX(This)) == IS_OBJECT && instanceof_function(Z_OBJCE(EX(This)), ce)) {
			ce = (zend_class_entry*)Z_OBJ(EX(This));
			call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_HAS_THIS;
		} else {
			zend_non_static_method_call(fbc);
			HANDLE_EXCEPTION();
		}
	} else {
		/* previous opcode is ZEND_FETCH_CLASS */
		if (IS_UNUSED == IS_UNUSED
		 && ((opline->op1.num & ZEND_FETCH_CLASS_MASK) == ZEND_FETCH_CLASS_PARENT ||
		     (opline->op1.num & ZEND_FETCH_CLASS_MASK) == ZEND_FETCH_CLASS_SELF)) {
			if (Z_TYPE(EX(This)) == IS_OBJECT) {
				ce = Z_OBJCE(EX(This));
			} else {
				ce = Z_CE(EX(This));
			}
		}
		call_info = ZEND_CALL_NESTED_FUNCTION;
	}

	call = zend_vm_stack_push_call_frame(call_info,
		fbc, opline->extended_value, ce);
	call->prev_execute_data = EX(call);
	EX(call) = call;

	ZEND_VM_NEXT_OPCODE();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_INIT_ARRAY_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	zval *array;
	uint32_t size;
	USE_OPLINE

	SAVE_OPLINE();
	array = EX_VAR(opline->result.var);
	if (IS_UNUSED != IS_UNUSED) {
		size = opline->extended_value >> ZEND_ARRAY_SIZE_SHIFT;
		ZVAL_ARR(array, zend_new_array(size));
		/* Explicitly initialize array as not-packed if flag is set */
		if (opline->extended_value & ZEND_ARRAY_NOT_PACKED) {
			zend_hash_real_init_mixed(Z_ARRVAL_P(array));
		}
		ZEND_VM_TAIL_CALL(ZEND_NULL_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
	} else {
		ZVAL_ARR(array, zend_new_array(0));
		ZEND_VM_NEXT_OPCODE();
	}
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_UNSET_OBJ_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *container;
	zval *offset;
	zend_string *name, *tmp_name;

	SAVE_OPLINE();
	container = &EX(This);
	offset = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);

	do {
		if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT)) {
			if (Z_ISREF_P(container)) {
				container = Z_REFVAL_P(container);
				if (Z_TYPE_P(container) != IS_OBJECT) {
					if (IS_UNUSED == IS_CV
					 && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
						ZVAL_UNDEFINED_OP1();
					}
					break;
				}
			} else {
				break;
			}
		}
		if (IS_CV == IS_CONST) {
			name = Z_STR_P(offset);
		} else {
			name = zval_try_get_tmp_string(offset, &tmp_name);
			if (UNEXPECTED(!name)) {
				break;
			}
		}
		Z_OBJ_HT_P(container)->unset_property(Z_OBJ_P(container), name, ((IS_CV == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL));
		if (IS_CV != IS_CONST) {
			zend_tmp_string_release(tmp_name);
		}
	} while (0);




	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *container;
	int result;
	zval *offset;
	zend_string *name, *tmp_name;

	SAVE_OPLINE();
	container = &EX(This);
	offset = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);

	if (IS_UNUSED == IS_CONST ||
	    (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
		if ((IS_UNUSED & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
			container = Z_REFVAL_P(container);
			if (UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT)) {
				result = (opline->extended_value & ZEND_ISEMPTY);
				goto isset_object_finish;
			}
		} else {
			result = (opline->extended_value & ZEND_ISEMPTY);
			goto isset_object_finish;
		}
	}

	if (IS_CV == IS_CONST) {
		name = Z_STR_P(offset);
	} else {
		name = zval_try_get_tmp_string(offset, &tmp_name);
		if (UNEXPECTED(!name)) {
			result = 0;
			goto isset_object_finish;
		}
	}

	result =
		(opline->extended_value & ZEND_ISEMPTY) ^
		Z_OBJ_HT_P(container)->has_property(Z_OBJ_P(container), name, (opline->extended_value & ZEND_ISEMPTY), ((IS_CV == IS_CONST) ? CACHE_ADDR(opline->extended_value & ~ZEND_ISEMPTY) : NULL));

	if (IS_CV != IS_CONST) {
		zend_tmp_string_release(tmp_name);
	}

isset_object_finish:




	ZEND_VM_SMART_BRANCH(result, 1);
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_YIELD_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE

	zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C);

	SAVE_OPLINE();
	if (UNEXPECTED(generator->flags & ZEND_GENERATOR_FORCED_CLOSE)) {
		ZEND_VM_TAIL_CALL(zend_yield_in_closed_generator_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
	}

	/* Destroy the previously yielded value */
	zval_ptr_dtor(&generator->value);

	/* Destroy the previously yielded key */
	zval_ptr_dtor(&generator->key);

	/* Set the new yielded value */
	if (IS_UNUSED != IS_UNUSED) {
		if (UNEXPECTED(EX(func)->op_array.fn_flags & ZEND_ACC_RETURN_REFERENCE)) {
			/* Constants and temporary variables aren't yieldable by reference,
			 * but we still allow them with a notice. */
			if (IS_UNUSED & (IS_CONST|IS_TMP_VAR)) {
				zval *value;

				zend_error(E_NOTICE, "Only variable references should be yielded by reference");

				value = NULL;
				ZVAL_COPY_VALUE(&generator->value, value);
				if (IS_UNUSED == IS_CONST) {
					if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
						Z_ADDREF(generator->value);
					}
				}
			} else {
				zval *value_ptr = NULL;

				/* If a function call result is yielded and the function did
				 * not return by reference we throw a notice. */
				do {
					if (IS_UNUSED == IS_VAR) {
						ZEND_ASSERT(value_ptr != &EG(uninitialized_zval));
						if (opline->extended_value == ZEND_RETURNS_FUNCTION
						 && !Z_ISREF_P(value_ptr)) {
							zend_error(E_NOTICE, "Only variable references should be yielded by reference");
							ZVAL_COPY(&generator->value, value_ptr);
							break;
						}
					}
					if (Z_ISREF_P(value_ptr)) {
						Z_ADDREF_P(value_ptr);
					} else {
						ZVAL_MAKE_REF_EX(value_ptr, 2);
					}
					ZVAL_REF(&generator->value, Z_REF_P(value_ptr));
				} while (0);


			}
		} else {
			zval *value = NULL;

			/* Consts, temporary variables and references need copying */
			if (IS_UNUSED == IS_CONST) {
				ZVAL_COPY_VALUE(&generator->value, value);
				if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
					Z_ADDREF(generator->value);
				}
			} else if (IS_UNUSED == IS_TMP_VAR) {
				ZVAL_COPY_VALUE(&generator->value, value);
			} else if ((IS_UNUSED & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) {
				ZVAL_COPY(&generator->value, Z_REFVAL_P(value));


			} else {
				ZVAL_COPY_VALUE(&generator->value, value);
				if (IS_UNUSED == IS_CV) {
					if (Z_OPT_REFCOUNTED_P(value)) Z_ADDREF_P(value);
				}
			}
		}
	} else {
		/* If no value was specified yield null */
		ZVAL_NULL(&generator->value);
	}

	/* Set the new yielded key */
	if (IS_CV != IS_UNUSED) {
		zval *key = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
		if ((IS_CV & (IS_CV|IS_VAR)) && UNEXPECTED(Z_TYPE_P(key) == IS_REFERENCE)) {
			key = Z_REFVAL_P(key);
		}
		ZVAL_COPY(&generator->key, key);


		if (Z_TYPE(generator->key) == IS_LONG
		    && Z_LVAL(generator->key) > generator->largest_used_integer_key
		) {
			generator->largest_used_integer_key = Z_LVAL(generator->key);
		}
	} else {
		/* If no key was specified we use auto-increment keys */
		generator->largest_used_integer_key++;
		ZVAL_LONG(&generator->key, generator->largest_used_integer_key);
	}

	if (RETURN_VALUE_USED(opline)) {
		/* If the return value of yield is used set the send
		 * target and initialize it to NULL */
		generator->send_target = EX_VAR(opline->result.var);
		ZVAL_NULL(generator->send_target);
	} else {
		generator->send_target = NULL;
	}

	/* The GOTO VM uses a local opline variable. We need to set the opline
	 * variable in execute_data so we don't resume at an old position. */
	SAVE_OPLINE();

	ZEND_VM_RETURN();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_BOOL_NOT_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *val;

	val = EX_VAR(opline->op1.var);
	if (Z_TYPE_INFO_P(val) == IS_TRUE) {
		ZVAL_FALSE(EX_VAR(opline->result.var));
	} else if (EXPECTED(Z_TYPE_INFO_P(val) <= IS_TRUE)) {
		/* The result and op1 can be the same cv zval */
		const uint32_t orig_val_type = Z_TYPE_INFO_P(val);
		ZVAL_TRUE(EX_VAR(opline->result.var));
		if (IS_CV == IS_CV && UNEXPECTED(orig_val_type == IS_UNDEF)) {
			SAVE_OPLINE();
			ZVAL_UNDEFINED_OP1();
			ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
		}
	} else {
		SAVE_OPLINE();
		ZVAL_BOOL(EX_VAR(opline->result.var), !i_zend_is_true(val));


		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
	}
	ZEND_VM_NEXT_OPCODE();
}

static zend_never_inline ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV  zend_pre_inc_helper_SPEC_CV(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *var_ptr;

	var_ptr = EX_VAR(opline->op1.var);

	SAVE_OPLINE();
	if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(var_ptr) == IS_UNDEF)) {
		ZVAL_UNDEFINED_OP1();
		ZVAL_NULL(var_ptr);
	}

	do {
		if (UNEXPECTED(Z_TYPE_P(var_ptr) == IS_REFERENCE)) {
			zend_reference *ref = Z_REF_P(var_ptr);
			var_ptr = Z_REFVAL_P(var_ptr);
			if (UNEXPECTED(ZEND_REF_HAS_TYPE_SOURCES(ref))) {
				zend_incdec_typed_ref(ref, NULL OPLINE_CC EXECUTE_DATA_CC);
				break;
			}
		}
		increment_function(var_ptr);
	} while (0);

	if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
		ZVAL_COPY(EX_VAR(opline->result.var), var_ptr);
	}


	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_PRE_INC_SPEC_CV_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *var_ptr;

	var_ptr = EX_VAR(opline->op1.var);

	if (EXPECTED(Z_TYPE_P(var_ptr) == IS_LONG)) {
		fast_long_increment_function(var_ptr);
		if (UNEXPECTED(0)) {
			ZVAL_COPY_VALUE(EX_VAR(opline->result.var), var_ptr);
		}
		ZEND_VM_NEXT_OPCODE();
	}

	ZEND_VM_TAIL_CALL(zend_pre_inc_helper_SPEC_CV(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
}

static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_PRE_INC_SPEC_CV_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *var_ptr;

	var_ptr = EX_VAR(opline->op1.var);

	if (EXPECTED(Z_TYPE_P(var_ptr) == IS_LONG)) {
		fast_long_increment_function(var_ptr);
		if (UNEXPECTED(1)) {
			ZVAL_COPY_VALUE(EX_VAR(opline->result.var), var_ptr);
		}
		ZEND_VM_NEXT_OPCODE();
	}

	ZEND_VM_TAIL_CALL(zend_pre_inc_helper_SPEC_CV(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
}

static zend_never_inline ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV  zend_pre_dec_helper_SPEC_CV(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *var_ptr;

	var_ptr = EX_VAR(opline->op1.var);

	SAVE_OPLINE();
	if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(var_ptr) == IS_UNDEF)) {
		ZVAL_UNDEFINED_OP1();
		ZVAL_NULL(var_ptr);
	}

	do {
		if (UNEXPECTED(Z_TYPE_P(var_ptr) == IS_REFERENCE)) {
			zend_reference *ref = Z_REF_P(var_ptr);
			var_ptr = Z_REFVAL_P(var_ptr);

			if (UNEXPECTED(ZEND_REF_HAS_TYPE_SOURCES(ref))) {
				zend_incdec_typed_ref(ref, NULL OPLINE_CC EXECUTE_DATA_CC);
				break;
			}
		}
		decrement_function(var_ptr);
	} while (0);

	if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
		ZVAL_COPY(EX_VAR(opline->result.var), var_ptr);
	}


	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_PRE_DEC_SPEC_CV_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *var_ptr;

	var_ptr = EX_VAR(opline->op1.var);

	if (EXPECTED(Z_TYPE_P(var_ptr) == IS_LONG)) {
		fast_long_decrement_function(var_ptr);
		if (UNEXPECTED(0)) {
			ZVAL_COPY_VALUE(EX_VAR(opline->result.var), var_ptr);
		}
		ZEND_VM_NEXT_OPCODE();
	}

	ZEND_VM_TAIL_CALL(zend_pre_dec_helper_SPEC_CV(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
}

static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_PRE_DEC_SPEC_CV_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *var_ptr;

	var_ptr = EX_VAR(opline->op1.var);

	if (EXPECTED(Z_TYPE_P(var_ptr) == IS_LONG)) {
		fast_long_decrement_function(var_ptr);
		if (UNEXPECTED(1)) {
			ZVAL_COPY_VALUE(EX_VAR(opline->result.var), var_ptr);
		}
		ZEND_VM_NEXT_OPCODE();
	}

	ZEND_VM_TAIL_CALL(zend_pre_dec_helper_SPEC_CV(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
}

static zend_never_inline ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV  zend_post_inc_helper_SPEC_CV(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *var_ptr;

	var_ptr = EX_VAR(opline->op1.var);

	SAVE_OPLINE();
	if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(var_ptr) == IS_UNDEF)) {
		ZVAL_UNDEFINED_OP1();
		ZVAL_NULL(var_ptr);
	}

	do {
		if (UNEXPECTED(Z_TYPE_P(var_ptr) == IS_REFERENCE)) {
			zend_reference *ref = Z_REF_P(var_ptr);
			var_ptr = Z_REFVAL_P(var_ptr);

			if (UNEXPECTED(ZEND_REF_HAS_TYPE_SOURCES(ref))) {
				zend_incdec_typed_ref(ref, EX_VAR(opline->result.var) OPLINE_CC EXECUTE_DATA_CC);
				break;
			}
		}
		ZVAL_COPY(EX_VAR(opline->result.var), var_ptr);

		increment_function(var_ptr);
	} while (0);


	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_POST_INC_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *var_ptr;

	var_ptr = EX_VAR(opline->op1.var);

	if (EXPECTED(Z_TYPE_P(var_ptr) == IS_LONG)) {
		ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(var_ptr));
		fast_long_increment_function(var_ptr);
		ZEND_VM_NEXT_OPCODE();
	}

	ZEND_VM_TAIL_CALL(zend_post_inc_helper_SPEC_CV(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
}

static zend_never_inline ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV  zend_post_dec_helper_SPEC_CV(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *var_ptr;

	var_ptr = EX_VAR(opline->op1.var);

	SAVE_OPLINE();
	if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(var_ptr) == IS_UNDEF)) {
		ZVAL_UNDEFINED_OP1();
		ZVAL_NULL(var_ptr);
	}

	do {
		if (UNEXPECTED(Z_TYPE_P(var_ptr) == IS_REFERENCE)) {
			zend_reference *ref = Z_REF_P(var_ptr);
			var_ptr = Z_REFVAL_P(var_ptr);

			if (UNEXPECTED(ZEND_REF_HAS_TYPE_SOURCES(ref))) {
				zend_incdec_typed_ref(ref, EX_VAR(opline->result.var) OPLINE_CC EXECUTE_DATA_CC);
				break;
			}
		}
		ZVAL_COPY(EX_VAR(opline->result.var), var_ptr);

		decrement_function(var_ptr);
	} while (0);


	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_POST_DEC_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *var_ptr;

	var_ptr = EX_VAR(opline->op1.var);

	if (EXPECTED(Z_TYPE_P(var_ptr) == IS_LONG)) {
		ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(var_ptr));
		fast_long_decrement_function(var_ptr);
		ZEND_VM_NEXT_OPCODE();
	}

	ZEND_VM_TAIL_CALL(zend_post_dec_helper_SPEC_CV(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_ECHO_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *z;

	SAVE_OPLINE();
	z = EX_VAR(opline->op1.var);

	if (Z_TYPE_P(z) == IS_STRING) {
		zend_string *str = Z_STR_P(z);

		if (ZSTR_LEN(str) != 0) {
			zend_write(ZSTR_VAL(str), ZSTR_LEN(str));
		}
	} else {
		zend_string *str = zval_get_string_func(z);

		if (ZSTR_LEN(str) != 0) {
			zend_write(ZSTR_VAL(str), ZSTR_LEN(str));
		} else if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(z) == IS_UNDEF)) {
			ZVAL_UNDEFINED_OP1();
		}
		zend_string_release_ex(str, 0);
	}


	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_JMPZ_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *val;
	uint8_t op1_type;

	val = EX_VAR(opline->op1.var);

	if (Z_TYPE_INFO_P(val) == IS_TRUE) {
		ZEND_VM_NEXT_OPCODE();
	} else if (EXPECTED(Z_TYPE_INFO_P(val) <= IS_TRUE)) {
		if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(val) == IS_UNDEF)) {
			SAVE_OPLINE();
			ZVAL_UNDEFINED_OP1();
			if (UNEXPECTED(EG(exception))) {
				HANDLE_EXCEPTION();
			}
		}
		ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0);
	}

	SAVE_OPLINE();
	op1_type = IS_CV;
	if (i_zend_is_true(val)) {
		opline++;
	} else {
		opline = OP_JMP_ADDR(opline, opline->op2);
	}
	if (op1_type & (IS_TMP_VAR|IS_VAR)) {
		zval_ptr_dtor_nogc(val);
	}
	ZEND_VM_JMP(opline);
}

static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_JMPNZ_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *val;
	uint8_t op1_type;

	val = EX_VAR(opline->op1.var);

	if (Z_TYPE_INFO_P(val) == IS_TRUE) {
		ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0);
	} else if (EXPECTED(Z_TYPE_INFO_P(val) <= IS_TRUE)) {
		if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(val) == IS_UNDEF)) {
			SAVE_OPLINE();
			ZVAL_UNDEFINED_OP1();
			if (UNEXPECTED(EG(exception))) {
				HANDLE_EXCEPTION();
			}
		}
		ZEND_VM_NEXT_OPCODE();
	}

	SAVE_OPLINE();
	op1_type = IS_CV;
	if (i_zend_is_true(val)) {
		opline = OP_JMP_ADDR(opline, opline->op2);
	} else {
		opline++;
	}
	if (op1_type & (IS_TMP_VAR|IS_VAR)) {
		zval_ptr_dtor_nogc(val);
	}
	ZEND_VM_JMP(opline);
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_JMPZ_EX_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *val;
	bool ret;

	val = EX_VAR(opline->op1.var);

	if (Z_TYPE_INFO_P(val) == IS_TRUE) {
		ZVAL_TRUE(EX_VAR(opline->result.var));
		ZEND_VM_NEXT_OPCODE();
	} else if (EXPECTED(Z_TYPE_INFO_P(val) <= IS_TRUE)) {
		ZVAL_FALSE(EX_VAR(opline->result.var));
		if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(val) == IS_UNDEF)) {
			SAVE_OPLINE();
			ZVAL_UNDEFINED_OP1();
			if (UNEXPECTED(EG(exception))) {
				HANDLE_EXCEPTION();
			}
		}
		ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0);
	}

	SAVE_OPLINE();
	ret = i_zend_is_true(val);


	if (ret) {
		ZVAL_TRUE(EX_VAR(opline->result.var));
		opline++;
	} else {
		ZVAL_FALSE(EX_VAR(opline->result.var));
		opline = OP_JMP_ADDR(opline, opline->op2);
	}
	ZEND_VM_JMP(opline);
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_JMPNZ_EX_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *val;
	bool ret;

	val = EX_VAR(opline->op1.var);

	if (Z_TYPE_INFO_P(val) == IS_TRUE) {
		ZVAL_TRUE(EX_VAR(opline->result.var));
		ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0);
	} else if (EXPECTED(Z_TYPE_INFO_P(val) <= IS_TRUE)) {
		ZVAL_FALSE(EX_VAR(opline->result.var));
		if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(val) == IS_UNDEF)) {
			SAVE_OPLINE();
			ZVAL_UNDEFINED_OP1();
			ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
		} else {
			ZEND_VM_NEXT_OPCODE();
		}
	}

	SAVE_OPLINE();
	ret = i_zend_is_true(val);


	if (ret) {
		ZVAL_TRUE(EX_VAR(opline->result.var));
		opline = OP_JMP_ADDR(opline, opline->op2);
	} else {
		ZVAL_FALSE(EX_VAR(opline->result.var));
		opline++;
	}
	ZEND_VM_JMP(opline);
}

static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_RETURN_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *retval_ptr;
	zval *return_value;


	retval_ptr = EX_VAR(opline->op1.var);
	return_value = EX(return_value);


	if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(retval_ptr) == IS_UNDEF)) {
		SAVE_OPLINE();
		retval_ptr = ZVAL_UNDEFINED_OP1();
		if (return_value) {
			ZVAL_NULL(return_value);
		}
	} else if (!return_value) {
		if (IS_CV & (IS_VAR|IS_TMP_VAR)) {
			if (Z_REFCOUNTED_P(retval_ptr) && !Z_DELREF_P(retval_ptr)) {
				SAVE_OPLINE();
				rc_dtor_func(Z_COUNTED_P(retval_ptr));
			}
		}
	} else {
		if ((IS_CV & (IS_CONST|IS_TMP_VAR))) {
			ZVAL_COPY_VALUE(return_value, retval_ptr);
			if (IS_CV == IS_CONST) {
				if (UNEXPECTED(Z_OPT_REFCOUNTED_P(return_value))) {
					Z_ADDREF_P(return_value);
				}
			}
		} else if (IS_CV == IS_CV) {
			do {
				if (Z_OPT_REFCOUNTED_P(retval_ptr)) {
					if (EXPECTED(!Z_OPT_ISREF_P(retval_ptr))) {
						if (EXPECTED(!(EX_CALL_INFO() & (ZEND_CALL_CODE|ZEND_CALL_OBSERVED)))) {
							zend_refcounted *ref = Z_COUNTED_P(retval_ptr);
							ZVAL_COPY_VALUE(return_value, retval_ptr);
							if (GC_MAY_LEAK(ref)) {
								SAVE_OPLINE();
								gc_possible_root(ref);
							}
							ZVAL_NULL(retval_ptr);
							break;
						} else {
							Z_ADDREF_P(retval_ptr);
						}
					} else {
						retval_ptr = Z_REFVAL_P(retval_ptr);
						if (Z_OPT_REFCOUNTED_P(retval_ptr)) {
							Z_ADDREF_P(retval_ptr);
						}
					}
				}
				ZVAL_COPY_VALUE(return_value, retval_ptr);
			} while (0);
		} else /* if (IS_CV == IS_VAR) */ {
			if (UNEXPECTED(Z_ISREF_P(retval_ptr))) {
				zend_refcounted *ref = Z_COUNTED_P(retval_ptr);

				retval_ptr = Z_REFVAL_P(retval_ptr);
				ZVAL_COPY_VALUE(return_value, retval_ptr);
				if (UNEXPECTED(GC_DELREF(ref) == 0)) {
					efree_size(ref, sizeof(zend_reference));
				} else if (Z_OPT_REFCOUNTED_P(retval_ptr)) {
					Z_ADDREF_P(retval_ptr);
				}
			} else {
				ZVAL_COPY_VALUE(return_value, retval_ptr);
			}
		}
	}






	ZEND_VM_TAIL_CALL(zend_leave_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_RETURN_BY_REF_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *retval_ptr;
	zval *return_value;


	SAVE_OPLINE();

	return_value = EX(return_value);


	do {
		if ((IS_CV & (IS_CONST|IS_TMP_VAR)) ||
		    (IS_CV == IS_VAR && opline->extended_value == ZEND_RETURNS_VALUE)) {
			/* Not supposed to happen, but we'll allow it */
			zend_error(E_NOTICE, "Only variable references should be returned by reference");

			retval_ptr = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
			if (!return_value) {


			} else {
				if (IS_CV == IS_VAR && UNEXPECTED(Z_ISREF_P(retval_ptr))) {
					ZVAL_COPY_VALUE(return_value, retval_ptr);
					break;
				}

				ZVAL_NEW_REF(return_value, retval_ptr);
				if (IS_CV == IS_CONST) {
					Z_TRY_ADDREF_P(retval_ptr);
				}
			}
			break;
		}

		retval_ptr = _get_zval_ptr_cv_BP_VAR_W(opline->op1.var EXECUTE_DATA_CC);

		if (IS_CV == IS_VAR) {
			ZEND_ASSERT(retval_ptr != &EG(uninitialized_zval));
			if (opline->extended_value == ZEND_RETURNS_FUNCTION && !Z_ISREF_P(retval_ptr)) {
				zend_error(E_NOTICE, "Only variable references should be returned by reference");
				if (return_value) {
					ZVAL_NEW_REF(return_value, retval_ptr);
				} else {


				}
				break;
			}
		}

		if (return_value) {
			if (Z_ISREF_P(retval_ptr)) {
				Z_ADDREF_P(retval_ptr);
			} else {
				ZVAL_MAKE_REF_EX(retval_ptr, 2);
			}
			ZVAL_REF(return_value, Z_REF_P(retval_ptr));
		}


	} while (0);




	ZEND_VM_TAIL_CALL(zend_leave_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_GENERATOR_RETURN_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *retval;

	zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C);

	SAVE_OPLINE();
	retval = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);

	/* Copy return value into generator->retval */
	if ((IS_CV & (IS_CONST|IS_TMP_VAR))) {
		ZVAL_COPY_VALUE(&generator->retval, retval);
		if (IS_CV == IS_CONST) {
			if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->retval))) {
				Z_ADDREF(generator->retval);
			}
		}
	} else if (IS_CV == IS_CV) {
		ZVAL_COPY_DEREF(&generator->retval, retval);
	} else /* if (IS_CV == IS_VAR) */ {
		if (UNEXPECTED(Z_ISREF_P(retval))) {
			zend_refcounted *ref = Z_COUNTED_P(retval);

			retval = Z_REFVAL_P(retval);
			ZVAL_COPY_VALUE(&generator->retval, retval);
			if (UNEXPECTED(GC_DELREF(ref) == 0)) {
				efree_size(ref, sizeof(zend_reference));
			} else if (Z_OPT_REFCOUNTED_P(retval)) {
				Z_ADDREF_P(retval);
			}
		} else {
			ZVAL_COPY_VALUE(&generator->retval, retval);
		}
	}


	EG(current_execute_data) = EX(prev_execute_data);

	/* Close the generator to free up resources */
	zend_generator_close(generator, 1);

	/* Pass execution back to handling code */
	ZEND_VM_RETURN();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_THROW_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *value;

	SAVE_OPLINE();
	value = EX_VAR(opline->op1.var);

	do {
		if (IS_CV == IS_CONST || UNEXPECTED(Z_TYPE_P(value) != IS_OBJECT)) {
			if ((IS_CV & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) {
				value = Z_REFVAL_P(value);
				if (EXPECTED(Z_TYPE_P(value) == IS_OBJECT)) {
					break;
				}
			}
			if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
				ZVAL_UNDEFINED_OP1();
				if (UNEXPECTED(EG(exception) != NULL)) {
					HANDLE_EXCEPTION();
				}
			}
			zend_throw_error(NULL, "Can only throw objects");


			HANDLE_EXCEPTION();
		}
	} while (0);

	zend_exception_save();
	Z_TRY_ADDREF_P(value);
	zend_throw_exception_object(value);
	zend_exception_restore();


	HANDLE_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_SEND_USER_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *arg, *param;

	SAVE_OPLINE();

	arg = _get_zval_ptr_cv_deref_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
	param = ZEND_CALL_VAR(EX(call), opline->result.var);
	if (UNEXPECTED(ARG_MUST_BE_SENT_BY_REF(EX(call)->func, opline->op2.num))) {
		zend_param_must_be_ref(EX(call)->func, opline->op2.num);
		Z_TRY_ADDREF_P(arg);
		ZVAL_NEW_REF(param, arg);
	} else {
		ZVAL_COPY(param, arg);
	}


	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_BOOL_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *val;

	val = EX_VAR(opline->op1.var);
	if (Z_TYPE_INFO_P(val) == IS_TRUE) {
		ZVAL_TRUE(EX_VAR(opline->result.var));
	} else if (EXPECTED(Z_TYPE_INFO_P(val) <= IS_TRUE)) {
		/* The result and op1 can be the same cv zval */
		const uint32_t orig_val_type = Z_TYPE_INFO_P(val);
		ZVAL_FALSE(EX_VAR(opline->result.var));
		if (IS_CV == IS_CV && UNEXPECTED(orig_val_type == IS_UNDEF)) {
			SAVE_OPLINE();
			ZVAL_UNDEFINED_OP1();
			ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
		}
	} else {
		SAVE_OPLINE();
		ZVAL_BOOL(EX_VAR(opline->result.var), i_zend_is_true(val));


		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
	}
	ZEND_VM_NEXT_OPCODE();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_CLONE_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *obj;
	zend_object *zobj;
	zend_class_entry *ce, *scope;
	zend_function *clone;
	zend_object_clone_obj_t clone_call;

	SAVE_OPLINE();
	obj = EX_VAR(opline->op1.var);

	/* ZEND_CLONE also exists as the clone() function and both implementations must be kept in sync.
	 * The OPcode intentionally does not support a clone-with property list to keep it simple. */

	do {
		if (IS_CV == IS_CONST ||
		    (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(obj) != IS_OBJECT))) {
			if ((IS_CV & (IS_VAR|IS_CV)) && Z_ISREF_P(obj)) {
				obj = Z_REFVAL_P(obj);
				if (EXPECTED(Z_TYPE_P(obj) == IS_OBJECT)) {
					break;
				}
			}
			ZVAL_UNDEF(EX_VAR(opline->result.var));
			if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(obj) == IS_UNDEF)) {
				ZVAL_UNDEFINED_OP1();
				if (UNEXPECTED(EG(exception) != NULL)) {
					HANDLE_EXCEPTION();
				}
			}
			zend_type_error("clone(): Argument #1 ($object) must be of type object, %s given", zend_zval_value_name(obj));


			HANDLE_EXCEPTION();
		}
	} while (0);

	zobj = Z_OBJ_P(obj);
	ce = zobj->ce;
	clone = ce->clone;
	clone_call = zobj->handlers->clone_obj;
	if (UNEXPECTED(clone_call == NULL)) {
		zend_throw_error(NULL, "Trying to clone an uncloneable object of class %s", ZSTR_VAL(ce->name));


		ZVAL_UNDEF(EX_VAR(opline->result.var));
		HANDLE_EXCEPTION();
	}

	if (clone && !(clone->common.fn_flags & ZEND_ACC_PUBLIC)) {
		scope = EX(func)->op_array.scope;
		ZEND_ASSERT(!(clone->common.fn_flags & ZEND_ACC_PUBLIC));
		if (!zend_check_method_accessible(clone, scope)) {
			zend_bad_method_call(clone, clone->common.function_name, scope);


			ZVAL_UNDEF(EX_VAR(opline->result.var));
			HANDLE_EXCEPTION();
		}
	}

	ZVAL_OBJ(EX_VAR(opline->result.var), clone_call(zobj));


	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_CAST_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *expr;
	zval *result = EX_VAR(opline->result.var);

	SAVE_OPLINE();
	expr = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);

	switch (opline->extended_value) {
		case IS_LONG:
			ZVAL_LONG(result, zval_get_long(expr));
			break;
		case IS_DOUBLE:
			ZVAL_DOUBLE(result, zval_get_double(expr));
			break;
		case IS_STRING:
			ZVAL_STR(result, zval_get_string(expr));
			break;
		default:
			ZEND_ASSERT(opline->extended_value != _IS_BOOL && "Must use ZEND_BOOL instead");
			if (IS_CV & (IS_VAR|IS_CV)) {
				ZVAL_DEREF(expr);
			}
			/* If value is already of correct type, return it directly */
			if (Z_TYPE_P(expr) == opline->extended_value) {
				ZVAL_COPY_VALUE(result, expr);
				if (IS_CV == IS_CONST) {
					if (UNEXPECTED(Z_OPT_REFCOUNTED_P(result))) Z_ADDREF_P(result);
				} else if (IS_CV != IS_TMP_VAR) {
					if (Z_OPT_REFCOUNTED_P(result)) Z_ADDREF_P(result);
				}


				ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
			}

			if (opline->extended_value == IS_ARRAY) {
				zend_cast_zval_to_array(result, expr, IS_CV);
			} else {
				ZEND_ASSERT(opline->extended_value == IS_OBJECT);
				zend_cast_zval_to_object(result, expr, IS_CV);
			}
	}


	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_INCLUDE_OR_EVAL_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zend_op_array *new_op_array;
	zval *inc_filename;

	SAVE_OPLINE();
	inc_filename = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
	new_op_array = zend_include_or_eval(inc_filename, opline->extended_value);
	if (UNEXPECTED(EG(exception) != NULL)) {


		if (new_op_array != ZEND_FAKE_OP_ARRAY && new_op_array != NULL) {
			destroy_op_array(new_op_array);
			efree_size(new_op_array, sizeof(zend_op_array));
		}
		UNDEF_RESULT();
		HANDLE_EXCEPTION();
	} else if (new_op_array == ZEND_FAKE_OP_ARRAY) {
		if (RETURN_VALUE_USED(opline)) {
			ZVAL_TRUE(EX_VAR(opline->result.var));
		}
	} else if (UNEXPECTED(new_op_array == NULL)) {
		if (RETURN_VALUE_USED(opline)) {
			ZVAL_FALSE(EX_VAR(opline->result.var));
		}
	} else if (new_op_array->last == 1
			&& new_op_array->opcodes[0].opcode == ZEND_RETURN
			&& new_op_array->opcodes[0].op1_type == IS_CONST
			&& EXPECTED(zend_execute_ex == execute_ex)) {
		if (RETURN_VALUE_USED(opline)) {
			const zend_op *op = new_op_array->opcodes;

			ZVAL_COPY(EX_VAR(opline->result.var), RT_CONSTANT(op, op->op1));
		}
		zend_destroy_static_vars(new_op_array);
		destroy_op_array(new_op_array);
		efree_size(new_op_array, sizeof(zend_op_array));
	} else {
		zval *return_value = NULL;
		zend_execute_data *call;
		if (RETURN_VALUE_USED(opline)) {
			return_value = EX_VAR(opline->result.var);
		}

		new_op_array->scope = EX(func)->op_array.scope;

		call = zend_vm_stack_push_call_frame(
			(Z_TYPE_INFO(EX(This)) & ZEND_CALL_HAS_THIS) | ZEND_CALL_NESTED_CODE | ZEND_CALL_HAS_SYMBOL_TABLE,
			(zend_function*)new_op_array, 0,
			Z_PTR(EX(This)));

		if (EX_CALL_INFO() & ZEND_CALL_HAS_SYMBOL_TABLE) {
			call->symbol_table = EX(symbol_table);
		} else {
			call->symbol_table = zend_rebuild_symbol_table();
		}

		call->prev_execute_data = execute_data;
		i_init_code_execute_data(call, new_op_array, return_value);


		if (EXPECTED(zend_execute_ex == execute_ex)) {


			ZEND_VM_ENTER();
		} else {
			ZEND_ADD_CALL_FLAG(call, ZEND_CALL_TOP);
			zend_execute_ex(call);
			zend_vm_stack_free_call_frame(call);
		}

		zend_destroy_static_vars(new_op_array);
		destroy_op_array(new_op_array);
		efree_size(new_op_array, sizeof(zend_op_array));
		if (UNEXPECTED(EG(exception) != NULL)) {
			zend_rethrow_exception(execute_data);


			UNDEF_RESULT();
			HANDLE_EXCEPTION();
		}
	}


	ZEND_VM_NEXT_OPCODE();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_FE_RESET_R_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *array_ptr, *result;

	SAVE_OPLINE();

	array_ptr = _get_zval_ptr_cv_deref_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
	if (EXPECTED(Z_TYPE_P(array_ptr) == IS_ARRAY)) {
		result = EX_VAR(opline->result.var);
		ZVAL_COPY_VALUE(result, array_ptr);
		if (IS_CV != IS_TMP_VAR && Z_OPT_REFCOUNTED_P(result)) {
			Z_ADDREF_P(array_ptr);
		}
		Z_FE_POS_P(result) = 0;


		ZEND_VM_NEXT_OPCODE();
	} else if (IS_CV != IS_CONST && EXPECTED(Z_TYPE_P(array_ptr) == IS_OBJECT)) {
		zend_object *zobj = Z_OBJ_P(array_ptr);
		if (!zobj->ce->get_iterator) {
			if (UNEXPECTED(zend_object_is_lazy(zobj))) {
				zobj = zend_lazy_object_init(zobj);
				if (UNEXPECTED(EG(exception))) {
					UNDEF_RESULT();


					HANDLE_EXCEPTION();
				}
			}
			HashTable *properties = zobj->properties;
			if (properties) {
				if (UNEXPECTED(GC_REFCOUNT(properties) > 1)) {
					if (EXPECTED(!(GC_FLAGS(properties) & IS_ARRAY_IMMUTABLE))) {
						GC_DELREF(properties);
					}
					properties = zobj->properties = zend_array_dup(properties);
				}
			} else {
				properties = zobj->handlers->get_properties(zobj);
			}

			result = EX_VAR(opline->result.var);
			ZVAL_COPY_VALUE(result, array_ptr);
			if (IS_CV != IS_TMP_VAR) {
				Z_ADDREF_P(array_ptr);
			}

			if (zend_hash_num_elements(properties) == 0) {
				Z_FE_ITER_P(result) = (uint32_t) -1;


				ZEND_VM_JMP(OP_JMP_ADDR(opline, opline->op2));
			}

			Z_FE_ITER_P(result) = zend_hash_iterator_add(properties, 0);


			ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
		} else {
			bool is_empty = zend_fe_reset_iterator(array_ptr, 0 OPLINE_CC EXECUTE_DATA_CC);


			if (UNEXPECTED(EG(exception))) {
				HANDLE_EXCEPTION();
			} else if (is_empty) {
				ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0);
			} else {
				ZEND_VM_NEXT_OPCODE();
			}
		}
	} else {
		zend_error(E_WARNING, "foreach() argument must be of type array|object, %s given", zend_zval_value_name(array_ptr));
		ZVAL_UNDEF(EX_VAR(opline->result.var));
		Z_FE_ITER_P(EX_VAR(opline->result.var)) = (uint32_t)-1;


		ZEND_VM_JMP(OP_JMP_ADDR(opline, opline->op2));
	}
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_FE_RESET_RW_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *array_ptr, *array_ref;

	SAVE_OPLINE();

	if (IS_CV == IS_VAR || IS_CV == IS_CV) {
		array_ref = array_ptr = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
		if (Z_ISREF_P(array_ref)) {
			array_ptr = Z_REFVAL_P(array_ref);
		}
	} else {
		array_ref = array_ptr = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
	}

	if (EXPECTED(Z_TYPE_P(array_ptr) == IS_ARRAY)) {
		if (IS_CV == IS_VAR || IS_CV == IS_CV) {
			if (array_ptr == array_ref) {
				ZVAL_NEW_REF(array_ref, array_ref);
				array_ptr = Z_REFVAL_P(array_ref);
			}
			Z_ADDREF_P(array_ref);
			ZVAL_COPY_VALUE(EX_VAR(opline->result.var), array_ref);
		} else {
			array_ref = EX_VAR(opline->result.var);
			ZVAL_NEW_REF(array_ref, array_ptr);
			array_ptr = Z_REFVAL_P(array_ref);
		}
		if (IS_CV == IS_CONST) {
			ZVAL_ARR(array_ptr, zend_array_dup(Z_ARRVAL_P(array_ptr)));
		} else {
			SEPARATE_ARRAY(array_ptr);
		}
		Z_FE_ITER_P(EX_VAR(opline->result.var)) = zend_hash_iterator_add(Z_ARRVAL_P(array_ptr), 0);


		ZEND_VM_NEXT_OPCODE();
	} else if (IS_CV != IS_CONST && EXPECTED(Z_TYPE_P(array_ptr) == IS_OBJECT)) {
		if (!Z_OBJCE_P(array_ptr)->get_iterator) {
			zend_object *zobj = Z_OBJ_P(array_ptr);
			HashTable *properties;
			if (UNEXPECTED(zend_object_is_lazy(zobj))) {
				zobj = zend_lazy_object_init(zobj);
				if (UNEXPECTED(EG(exception))) {
					UNDEF_RESULT();


					HANDLE_EXCEPTION();
				}
			}
			if (IS_CV == IS_VAR || IS_CV == IS_CV) {
				if (array_ptr == array_ref) {
					ZVAL_NEW_REF(array_ref, array_ref);
					array_ptr = Z_REFVAL_P(array_ref);
				}
				Z_ADDREF_P(array_ref);
				ZVAL_COPY_VALUE(EX_VAR(opline->result.var), array_ref);
			} else {
				array_ptr = EX_VAR(opline->result.var);
				ZVAL_COPY_VALUE(array_ptr, array_ref);
			}
			if (Z_OBJ_P(array_ptr)->properties
			 && UNEXPECTED(GC_REFCOUNT(Z_OBJ_P(array_ptr)->properties) > 1)) {
				if (EXPECTED(!(GC_FLAGS(Z_OBJ_P(array_ptr)->properties) & IS_ARRAY_IMMUTABLE))) {
					GC_DELREF(Z_OBJ_P(array_ptr)->properties);
				}
				Z_OBJ_P(array_ptr)->properties = zend_array_dup(Z_OBJ_P(array_ptr)->properties);
			}

			properties = Z_OBJPROP_P(array_ptr);
			if (zend_hash_num_elements(properties) == 0) {
				Z_FE_ITER_P(EX_VAR(opline->result.var)) = (uint32_t) -1;


				ZEND_VM_JMP(OP_JMP_ADDR(opline, opline->op2));
			}

			Z_FE_ITER_P(EX_VAR(opline->result.var)) = zend_hash_iterator_add(properties, 0);


			ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
		} else {
			bool is_empty = zend_fe_reset_iterator(array_ptr, 1 OPLINE_CC EXECUTE_DATA_CC);


			if (UNEXPECTED(EG(exception))) {
				HANDLE_EXCEPTION();
			} else if (is_empty) {
				ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0);
			} else {
				ZEND_VM_NEXT_OPCODE();
			}
		}
	} else {
		zend_error(E_WARNING, "foreach() argument must be of type array|object, %s given", zend_zval_value_name(array_ptr));
		ZVAL_UNDEF(EX_VAR(opline->result.var));
		Z_FE_ITER_P(EX_VAR(opline->result.var)) = (uint32_t)-1;


		ZEND_VM_JMP(OP_JMP_ADDR(opline, opline->op2));
	}
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_JMP_SET_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *value;
	zend_reference *ref = NULL;
	bool ret;

	SAVE_OPLINE();
	value = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);

	if ((IS_CV == IS_VAR || IS_CV == IS_CV) && Z_ISREF_P(value)) {
		if (IS_CV == IS_VAR) {
			ref = Z_REF_P(value);
		}
		value = Z_REFVAL_P(value);
	}

	ret = i_zend_is_true(value);

	if (UNEXPECTED(EG(exception))) {


		ZVAL_UNDEF(EX_VAR(opline->result.var));
		HANDLE_EXCEPTION();
	}

	if (ret) {
		zval *result = EX_VAR(opline->result.var);

		ZVAL_COPY_VALUE(result, value);
		if (IS_CV == IS_CONST) {
			if (UNEXPECTED(Z_OPT_REFCOUNTED_P(result))) Z_ADDREF_P(result);
		} else if (IS_CV == IS_CV) {
			if (Z_OPT_REFCOUNTED_P(result)) Z_ADDREF_P(result);
		} else if (IS_CV == IS_VAR && ref) {
			if (UNEXPECTED(GC_DELREF(ref) == 0)) {
				efree_size(ref, sizeof(zend_reference));
			} else if (Z_OPT_REFCOUNTED_P(result)) {
				Z_ADDREF_P(result);
			}
		}
		ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0);
	}


	ZEND_VM_NEXT_OPCODE();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_COALESCE_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *value;
	zend_reference *ref = NULL;

	SAVE_OPLINE();
	value = _get_zval_ptr_cv_BP_VAR_IS(opline->op1.var EXECUTE_DATA_CC);

	if ((IS_CV & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) {
		if (IS_CV & IS_VAR) {
			ref = Z_REF_P(value);
		}
		value = Z_REFVAL_P(value);
	}

	if (Z_TYPE_P(value) > IS_NULL) {
		zval *result = EX_VAR(opline->result.var);
		ZVAL_COPY_VALUE(result, value);
		if (IS_CV == IS_CONST) {
			if (UNEXPECTED(Z_OPT_REFCOUNTED_P(result))) Z_ADDREF_P(result);
		} else if (IS_CV == IS_CV) {
			if (Z_OPT_REFCOUNTED_P(result)) Z_ADDREF_P(result);
		} else if ((IS_CV & IS_VAR) && ref) {
			if (UNEXPECTED(GC_DELREF(ref) == 0)) {
				efree_size(ref, sizeof(zend_reference));
			} else if (Z_OPT_REFCOUNTED_P(result)) {
				Z_ADDREF_P(result);
			}
		}
		ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0);
	}

	if ((IS_CV & IS_VAR) && ref) {
		if (UNEXPECTED(GC_DELREF(ref) == 0)) {
			efree_size(ref, sizeof(zend_reference));
		}
	}
	ZEND_VM_NEXT_OPCODE();
}

static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_JMP_NULL_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *val, *result;

	val = EX_VAR(opline->op1.var);

	if (Z_TYPE_P(val) > IS_NULL) {
		do {
			if ((IS_CV == IS_CV || IS_CV == IS_VAR) && Z_TYPE_P(val) == IS_REFERENCE) {
				val = Z_REFVAL_P(val);
				if (Z_TYPE_P(val) <= IS_NULL) {


					break;
				}
			}
			ZEND_VM_NEXT_OPCODE();
		} while (0);
	}

	result = EX_VAR(opline->result.var);
	uint32_t short_circuiting_type = opline->extended_value & ZEND_SHORT_CIRCUITING_CHAIN_MASK;
	if (EXPECTED(short_circuiting_type == ZEND_SHORT_CIRCUITING_CHAIN_EXPR)) {
		ZVAL_NULL(result);
		if (IS_CV == IS_CV
			&& UNEXPECTED(Z_TYPE_P(val) == IS_UNDEF)
			&& (opline->extended_value & ZEND_JMP_NULL_BP_VAR_IS) == 0
		) {
			SAVE_OPLINE();
			ZVAL_UNDEFINED_OP1();
			if (UNEXPECTED(EG(exception) != NULL)) {
				HANDLE_EXCEPTION();
			}
		}
	} else if (short_circuiting_type == ZEND_SHORT_CIRCUITING_CHAIN_ISSET) {
		ZVAL_FALSE(result);
	} else {
		ZEND_ASSERT(short_circuiting_type == ZEND_SHORT_CIRCUITING_CHAIN_EMPTY);
		ZVAL_TRUE(result);
	}

	ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0);
}

static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_QM_ASSIGN_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *value;
	zval *result = EX_VAR(opline->result.var);

	value = EX_VAR(opline->op1.var);
	if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
		SAVE_OPLINE();
		ZVAL_UNDEFINED_OP1();
		ZVAL_NULL(result);
		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
	}

	if (IS_CV == IS_CV) {
		ZVAL_COPY_DEREF(result, value);
	} else if (IS_CV == IS_VAR) {
		if (UNEXPECTED(Z_ISREF_P(value))) {
			ZVAL_COPY_VALUE(result, Z_REFVAL_P(value));
			if (UNEXPECTED(Z_DELREF_P(value) == 0)) {
				efree_size(Z_REF_P(value), sizeof(zend_reference));
			} else if (Z_OPT_REFCOUNTED_P(result)) {
				Z_ADDREF_P(result);
			}
		} else {
			ZVAL_COPY_VALUE(result, value);
		}
	} else {
		ZVAL_COPY_VALUE(result, value);
		if (IS_CV == IS_CONST) {
			if (UNEXPECTED(Z_OPT_REFCOUNTED_P(result))) {
				Z_ADDREF_P(result);
			}
		}
	}
	ZEND_VM_NEXT_OPCODE();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_YIELD_FROM_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C);
	zval *val;

	SAVE_OPLINE();
	val = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);

	if (UNEXPECTED(generator->flags & ZEND_GENERATOR_FORCED_CLOSE)) {
		zend_throw_error(NULL, "Cannot use \"yield from\" in a force-closed generator");


		UNDEF_RESULT();
		HANDLE_EXCEPTION();
	}

yield_from_try_again:
	if (Z_TYPE_P(val) == IS_ARRAY) {
		ZVAL_COPY_VALUE(&generator->values, val);
		if (Z_OPT_REFCOUNTED_P(val)) {
			Z_ADDREF_P(val);
		}
		Z_FE_POS(generator->values) = 0;


	} else if (IS_CV != IS_CONST && Z_TYPE_P(val) == IS_OBJECT && Z_OBJCE_P(val)->get_iterator) {
		zend_class_entry *ce = Z_OBJCE_P(val);
		if (ce == zend_ce_generator) {
			zend_generator *new_gen = (zend_generator *) Z_OBJ_P(val);

			Z_ADDREF_P(val);


			if (UNEXPECTED(new_gen->execute_data == NULL)) {
				zend_throw_error(NULL, "Generator passed to yield from was aborted without proper return and is unable to continue");
				zval_ptr_dtor(val);
				UNDEF_RESULT();
				HANDLE_EXCEPTION();
			} else if (Z_ISUNDEF(new_gen->retval)) {
				if (UNEXPECTED(zend_generator_get_current(new_gen) == generator)) {
					zend_throw_error(NULL, "Impossible to yield from the Generator being currently run");
					zval_ptr_dtor(val);
					UNDEF_RESULT();
					HANDLE_EXCEPTION();
				} else {
					zend_generator_yield_from(generator, new_gen);
				}
			} else {
				if (RETURN_VALUE_USED(opline)) {
					ZVAL_COPY(EX_VAR(opline->result.var), &new_gen->retval);
				}
				ZEND_VM_NEXT_OPCODE();
			}
		} else {
			zend_object_iterator *iter = ce->get_iterator(ce, val, 0);


			if (UNEXPECTED(!iter) || UNEXPECTED(EG(exception))) {
				if (!EG(exception)) {
					zend_throw_error(NULL, "Object of type %s did not create an Iterator", ZSTR_VAL(ce->name));
				}
				UNDEF_RESULT();
				HANDLE_EXCEPTION();
			}

			iter->index = 0;
			if (iter->funcs->rewind) {
				iter->funcs->rewind(iter);
				if (UNEXPECTED(EG(exception) != NULL)) {
					OBJ_RELEASE(&iter->std);
					UNDEF_RESULT();
					HANDLE_EXCEPTION();
				}
			}

			ZVAL_OBJ(&generator->values, &iter->std);
		}
	} else if ((IS_CV & (IS_VAR|IS_CV)) && Z_TYPE_P(val) == IS_REFERENCE) {
		val = Z_REFVAL_P(val);
		goto yield_from_try_again;
	} else {
		zend_throw_error(NULL, "Can use \"yield from\" only with arrays and Traversables");


		UNDEF_RESULT();
		HANDLE_EXCEPTION();
	}

	/* This is the default return value
	 * when the expression is a Generator, it will be overwritten in zend_generator_resume() */
	if (RETURN_VALUE_USED(opline)) {
		ZVAL_NULL(EX_VAR(opline->result.var));
	}

	/* This generator has no send target (though the generator we delegate to might have one) */
	generator->send_target = NULL;

	/* The GOTO VM uses a local opline variable. We need to set the opline
	 * variable in execute_data so we don't resume at an old position. */
	SAVE_OPLINE();

	ZEND_VM_RETURN();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_STRLEN_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *value;

	value = EX_VAR(opline->op1.var);
	if (EXPECTED(Z_TYPE_P(value) == IS_STRING)) {
		ZVAL_LONG(EX_VAR(opline->result.var), Z_STRLEN_P(value));
		if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
			zval_ptr_dtor_str(value);
		}
		ZEND_VM_NEXT_OPCODE();
	} else {
		bool strict;

		if ((IS_CV & (IS_VAR|IS_CV)) && Z_TYPE_P(value) == IS_REFERENCE) {
			value = Z_REFVAL_P(value);
			if (EXPECTED(Z_TYPE_P(value) == IS_STRING)) {
				ZVAL_LONG(EX_VAR(opline->result.var), Z_STRLEN_P(value));


				ZEND_VM_NEXT_OPCODE();
			}
		}

		SAVE_OPLINE();
		if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
			value = ZVAL_UNDEFINED_OP1();
		}
		strict = EX_USES_STRICT_TYPES();
		do {
			if (EXPECTED(!strict)) {
				zend_string *str;
				zval tmp;

				if (UNEXPECTED(Z_TYPE_P(value) == IS_NULL)) {
					zend_error(E_DEPRECATED,
						"strlen(): Passing null to parameter #1 ($string) of type string is deprecated");
					ZVAL_LONG(EX_VAR(opline->result.var), 0);
					if (UNEXPECTED(EG(exception))) {
						HANDLE_EXCEPTION();
					}
					break;
				}

				ZVAL_COPY(&tmp, value);
				if (zend_parse_arg_str_weak(&tmp, &str, 1)) {
					ZVAL_LONG(EX_VAR(opline->result.var), ZSTR_LEN(str));
					zval_ptr_dtor(&tmp);
					break;
				}
				zval_ptr_dtor(&tmp);
			}
			if (!EG(exception)) {
				zend_type_error("strlen(): Argument #1 ($string) must be of type string, %s given", zend_zval_value_name(value));
			}
			ZVAL_UNDEF(EX_VAR(opline->result.var));
		} while (0);
	}


	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_TYPE_CHECK_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *value;
	int result = 0;

	value = EX_VAR(opline->op1.var);
	if ((opline->extended_value >> (uint32_t)Z_TYPE_P(value)) & 1) {
type_check_resource:
		if (opline->extended_value != MAY_BE_RESOURCE
		 || EXPECTED(NULL != zend_rsrc_list_get_rsrc_type(Z_RES_P(value)))) {
			result = 1;
		}
	} else if ((IS_CV & (IS_CV|IS_VAR)) && Z_ISREF_P(value)) {
		value = Z_REFVAL_P(value);
		if ((opline->extended_value >> (uint32_t)Z_TYPE_P(value)) & 1) {
			goto type_check_resource;
		}
	} else if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
		result = ((1 << IS_NULL) & opline->extended_value) != 0;
		SAVE_OPLINE();
		ZVAL_UNDEFINED_OP1();
		if (UNEXPECTED(EG(exception))) {
			ZVAL_UNDEF(EX_VAR(opline->result.var));
			HANDLE_EXCEPTION();
		}
	}
	if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
		SAVE_OPLINE();


		ZEND_VM_SMART_BRANCH(result, 1);
	} else {
		ZEND_VM_SMART_BRANCH(result, 0);
	}
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_FETCH_CLASS_NAME_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	uint32_t fetch_type;
	zend_class_entry *called_scope, *scope;
	USE_OPLINE

	if (IS_CV != IS_UNUSED) {
		SAVE_OPLINE();
		zval *op = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
		if (UNEXPECTED(Z_TYPE_P(op) != IS_OBJECT)) {
			ZVAL_DEREF(op);
			if (Z_TYPE_P(op) != IS_OBJECT) {
				zend_type_error("Cannot use \"::class\" on %s", zend_zval_value_name(op));
				ZVAL_UNDEF(EX_VAR(opline->result.var));


				HANDLE_EXCEPTION();
			}
		}

		ZVAL_STR_COPY(EX_VAR(opline->result.var), Z_OBJCE_P(op)->name);


		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
	}

	fetch_type = opline->op1.num;
	scope = EX(func)->op_array.scope;
	if (UNEXPECTED(scope == NULL)) {
		SAVE_OPLINE();
		zend_throw_error(NULL, "Cannot use \"%s\" in the global scope",
			fetch_type == ZEND_FETCH_CLASS_SELF ? "self" :
			fetch_type == ZEND_FETCH_CLASS_PARENT ? "parent" : "static");
		ZVAL_UNDEF(EX_VAR(opline->result.var));
		HANDLE_EXCEPTION();
	}

	switch (fetch_type) {
		case ZEND_FETCH_CLASS_SELF:
			ZVAL_STR_COPY(EX_VAR(opline->result.var), scope->name);
			break;
		case ZEND_FETCH_CLASS_PARENT:
			if (UNEXPECTED(scope->parent == NULL)) {
				SAVE_OPLINE();
				zend_throw_error(NULL,
					"Cannot use \"parent\" when current class scope has no parent");
				ZVAL_UNDEF(EX_VAR(opline->result.var));
				HANDLE_EXCEPTION();
			}
			ZVAL_STR_COPY(EX_VAR(opline->result.var), scope->parent->name);
			break;
		case ZEND_FETCH_CLASS_STATIC:
			if (Z_TYPE(EX(This)) == IS_OBJECT) {
				called_scope = Z_OBJCE(EX(This));
			} else {
				called_scope = Z_CE(EX(This));
			}
			ZVAL_STR_COPY(EX_VAR(opline->result.var), called_scope->name);
			break;
		EMPTY_SWITCH_DEFAULT_CASE()
	}
	ZEND_VM_NEXT_OPCODE();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_BIND_STATIC_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	HashTable *ht;
	zval *value;
	zval *variable_ptr;

	variable_ptr = EX_VAR(opline->op1.var);

	SAVE_OPLINE();

	ht = ZEND_MAP_PTR_GET(EX(func)->op_array.static_variables_ptr);
	if (!ht) {
		ht = zend_array_dup(EX(func)->op_array.static_variables);
		ZEND_MAP_PTR_SET(EX(func)->op_array.static_variables_ptr, ht);
	}
	ZEND_ASSERT(GC_REFCOUNT(ht) == 1);

	value = (zval*)((char*)ht->arData + (opline->extended_value & ~(ZEND_BIND_REF|ZEND_BIND_IMPLICIT|ZEND_BIND_EXPLICIT)));

	if (opline->extended_value & ZEND_BIND_REF) {
		if (UNEXPECTED(!Z_ISREF_P(value))) {
			zend_reference *ref = (zend_reference*)emalloc(sizeof(zend_reference));
			GC_SET_REFCOUNT(ref, 2);
			GC_TYPE_INFO(ref) = GC_REFERENCE;
			if (opline->op2_type == IS_UNUSED) {
				ZVAL_COPY_VALUE(&ref->val, value);
			} else {
				ZEND_ASSERT(!Z_REFCOUNTED_P(value));
				ZVAL_COPY(&ref->val, get_zval_ptr_deref(opline->op2_type, opline->op2, BP_VAR_R));
				FREE_OP(opline->op2_type, opline->op2.var);
			}
			ref->sources.ptr = NULL;
			Z_REF_P(value) = ref;
			Z_TYPE_INFO_P(value) = IS_REFERENCE_EX;
			i_zval_ptr_dtor(variable_ptr);
			ZVAL_REF(variable_ptr, ref);
		} else {
			Z_ADDREF_P(value);
			i_zval_ptr_dtor(variable_ptr);
			ZVAL_REF(variable_ptr, Z_REF_P(value));
			if (opline->op2_type != IS_UNUSED) {
				FREE_OP(opline->op2_type, opline->op2.var);
			}
		}
	} else {
		i_zval_ptr_dtor(variable_ptr);
		ZVAL_COPY(variable_ptr, value);
	}

	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_BIND_INIT_STATIC_OR_JMP_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	HashTable *ht;
	zval *value;
	zval *variable_ptr;

	variable_ptr = EX_VAR(opline->op1.var);

	ht = ZEND_MAP_PTR_GET(EX(func)->op_array.static_variables_ptr);
	if (!ht) {
		ZEND_VM_NEXT_OPCODE();
	}
	ZEND_ASSERT(GC_REFCOUNT(ht) == 1);

	value = (zval*)((char*)ht->arData + opline->extended_value);
	if (Z_TYPE_P(value) == IS_NULL) {
		ZEND_VM_NEXT_OPCODE();
	} else {
		SAVE_OPLINE();
		zval_ptr_dtor(variable_ptr);
		ZEND_ASSERT(Z_TYPE_P(value) == IS_REFERENCE);
		Z_ADDREF_P(value);
		ZVAL_REF(variable_ptr, Z_REF_P(value));
		ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 1);
	}
}

static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_PRE_INC_LONG_NO_OVERFLOW_SPEC_CV_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *var_ptr;

	var_ptr = EX_VAR(opline->op1.var);
	Z_LVAL_P(var_ptr)++;
	if (UNEXPECTED(0)) {
		ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(var_ptr));
	}
	ZEND_VM_NEXT_OPCODE();
}

static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_PRE_INC_LONG_NO_OVERFLOW_SPEC_CV_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *var_ptr;

	var_ptr = EX_VAR(opline->op1.var);
	Z_LVAL_P(var_ptr)++;
	if (UNEXPECTED(1)) {
		ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(var_ptr));
	}
	ZEND_VM_NEXT_OPCODE();
}

static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_PRE_INC_LONG_SPEC_CV_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *var_ptr;

	var_ptr = EX_VAR(opline->op1.var);
	fast_long_increment_function(var_ptr);
	if (UNEXPECTED(0)) {
		ZVAL_COPY_VALUE(EX_VAR(opline->result.var), var_ptr);
	}
	ZEND_VM_NEXT_OPCODE();
}

static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_PRE_INC_LONG_SPEC_CV_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *var_ptr;

	var_ptr = EX_VAR(opline->op1.var);
	fast_long_increment_function(var_ptr);
	if (UNEXPECTED(1)) {
		ZVAL_COPY_VALUE(EX_VAR(opline->result.var), var_ptr);
	}
	ZEND_VM_NEXT_OPCODE();
}

static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_PRE_DEC_LONG_NO_OVERFLOW_SPEC_CV_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *var_ptr;

	var_ptr = EX_VAR(opline->op1.var);
	Z_LVAL_P(var_ptr)--;
	if (UNEXPECTED(0)) {
		ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(var_ptr));
	}
	ZEND_VM_NEXT_OPCODE();
}

static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_PRE_DEC_LONG_NO_OVERFLOW_SPEC_CV_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *var_ptr;

	var_ptr = EX_VAR(opline->op1.var);
	Z_LVAL_P(var_ptr)--;
	if (UNEXPECTED(1)) {
		ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(var_ptr));
	}
	ZEND_VM_NEXT_OPCODE();
}

static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_PRE_DEC_LONG_SPEC_CV_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *var_ptr;

	var_ptr = EX_VAR(opline->op1.var);
	fast_long_decrement_function(var_ptr);
	if (UNEXPECTED(0)) {
		ZVAL_COPY_VALUE(EX_VAR(opline->result.var), var_ptr);
	}
	ZEND_VM_NEXT_OPCODE();
}

static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_PRE_DEC_LONG_SPEC_CV_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *var_ptr;

	var_ptr = EX_VAR(opline->op1.var);
	fast_long_decrement_function(var_ptr);
	if (UNEXPECTED(1)) {
		ZVAL_COPY_VALUE(EX_VAR(opline->result.var), var_ptr);
	}
	ZEND_VM_NEXT_OPCODE();
}

static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_POST_INC_LONG_NO_OVERFLOW_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *var_ptr;

	var_ptr = EX_VAR(opline->op1.var);
	ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(var_ptr));
	Z_LVAL_P(var_ptr)++;
	ZEND_VM_NEXT_OPCODE();
}

static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_POST_INC_LONG_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *var_ptr;

	var_ptr = EX_VAR(opline->op1.var);
	ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(var_ptr));
	fast_long_increment_function(var_ptr);
	ZEND_VM_NEXT_OPCODE();
}

static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_POST_DEC_LONG_NO_OVERFLOW_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *var_ptr;

	var_ptr = EX_VAR(opline->op1.var);
	ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(var_ptr));
	Z_LVAL_P(var_ptr)--;
	ZEND_VM_NEXT_OPCODE();
}

static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_POST_DEC_LONG_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *var_ptr;

	var_ptr = EX_VAR(opline->op1.var);
	ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(var_ptr));
	fast_long_decrement_function(var_ptr);
	ZEND_VM_NEXT_OPCODE();
}

static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_SEND_VAR_SIMPLE_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *varptr, *arg;

	varptr = EX_VAR(opline->op1.var);
	arg = ZEND_CALL_VAR(EX(call), opline->result.var);

	if (IS_CV == IS_CV) {
		ZVAL_COPY(arg, varptr);
	} else /* if (IS_CV == IS_VAR) */ {
		ZVAL_COPY_VALUE(arg, varptr);
	}

	ZEND_VM_NEXT_OPCODE();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_DIV_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;

	SAVE_OPLINE();
	op1 = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
	op2 = RT_CONSTANT(opline, opline->op2);
	div_function(EX_VAR(opline->result.var), op1, op2);




	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_POW_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;

	SAVE_OPLINE();
	op1 = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
	op2 = RT_CONSTANT(opline, opline->op2);
	pow_function(EX_VAR(opline->result.var), op1, op2);




	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_CONCAT_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;

	op1 = EX_VAR(opline->op1.var);
	op2 = RT_CONSTANT(opline, opline->op2);

	if ((IS_CV == IS_CONST || EXPECTED(Z_TYPE_P(op1) == IS_STRING)) &&
	    (IS_CONST == IS_CONST || EXPECTED(Z_TYPE_P(op2) == IS_STRING))) {
		zend_string *op1_str = Z_STR_P(op1);
		zend_string *op2_str = Z_STR_P(op2);
		zend_string *str;
		uint32_t flags = ZSTR_GET_COPYABLE_CONCAT_PROPERTIES_BOTH(op1_str, op2_str);

		if (IS_CV != IS_CONST && UNEXPECTED(ZSTR_LEN(op1_str) == 0)) {
			if (IS_CONST == IS_CONST || IS_CONST == IS_CV) {
				ZVAL_STR_COPY(EX_VAR(opline->result.var), op2_str);
			} else {
				ZVAL_STR(EX_VAR(opline->result.var), op2_str);
			}
			if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
				zend_string_release_ex(op1_str, 0);
			}
		} else if (IS_CONST != IS_CONST && UNEXPECTED(ZSTR_LEN(op2_str) == 0)) {
			if (IS_CV == IS_CONST || IS_CV == IS_CV) {
				ZVAL_STR_COPY(EX_VAR(opline->result.var), op1_str);
			} else {
				ZVAL_STR(EX_VAR(opline->result.var), op1_str);
			}
			if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
				zend_string_release_ex(op2_str, 0);
			}
		} else if (IS_CV != IS_CONST && IS_CV != IS_CV &&
		    !ZSTR_IS_INTERNED(op1_str) && GC_REFCOUNT(op1_str) == 1) {
			size_t len = ZSTR_LEN(op1_str);

			if (UNEXPECTED(len > ZSTR_MAX_LEN - ZSTR_LEN(op2_str))) {
				zend_error_noreturn(E_ERROR, "Integer overflow in memory allocation");
			}
			str = zend_string_extend(op1_str, len + ZSTR_LEN(op2_str), 0);
			memcpy(ZSTR_VAL(str) + len, ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
			GC_ADD_FLAGS(str, flags);
			ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
			if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
				zend_string_release_ex(op2_str, 0);
			}
		} else {
			str = zend_string_alloc(ZSTR_LEN(op1_str) + ZSTR_LEN(op2_str), 0);
			memcpy(ZSTR_VAL(str), ZSTR_VAL(op1_str), ZSTR_LEN(op1_str));
			memcpy(ZSTR_VAL(str) + ZSTR_LEN(op1_str), ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
			GC_ADD_FLAGS(str, flags);
			ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
			if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
				zend_string_release_ex(op1_str, 0);
			}
			if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
				zend_string_release_ex(op2_str, 0);
			}
		}
		ZEND_VM_NEXT_OPCODE();
	} else {
		SAVE_OPLINE();

		if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
			op1 = ZVAL_UNDEFINED_OP1();
		}
		if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(op2) == IS_UNDEF)) {
			op2 = ZVAL_UNDEFINED_OP2();
		}
		concat_function(EX_VAR(opline->result.var), op1, op2);




		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
	}
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_IS_IDENTICAL_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;
	bool result;

	SAVE_OPLINE();
	op1 = _get_zval_ptr_cv_deref_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
	op2 = RT_CONSTANT(opline, opline->op2);
	result = fast_is_identical_function(op1, op2);




	ZEND_VM_SMART_BRANCH(result, 1);
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_IS_NOT_IDENTICAL_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;
	bool result;

	SAVE_OPLINE();
	op1 = _get_zval_ptr_cv_deref_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
	op2 = RT_CONSTANT(opline, opline->op2);
	result = fast_is_not_identical_function(op1, op2);




	ZEND_VM_SMART_BRANCH(result, 1);
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_IS_EQUAL_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;
	double d1, d2;

	op1 = EX_VAR(opline->op1.var);
	op2 = RT_CONSTANT(opline, opline->op2);
	if (1 && IS_CV == IS_CONST && IS_CONST == IS_CONST) {
		/* pass */
	} else if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
		if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
			if (EXPECTED(Z_LVAL_P(op1) == Z_LVAL_P(op2))) {
is_equal_true:
				ZEND_VM_SMART_BRANCH_TRUE_NONE();
			} else {
is_equal_false:
				ZEND_VM_SMART_BRANCH_FALSE_NONE();
			}
		} else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
			d1 = (double)Z_LVAL_P(op1);
			d2 = Z_DVAL_P(op2);
			goto is_equal_double;
		}
	} else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) {
		if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
			d1 = Z_DVAL_P(op1);
			d2 = Z_DVAL_P(op2);
is_equal_double:
			if (d1 == d2) {
				goto is_equal_true;
			} else {
				goto is_equal_false;
			}
		} else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
			d1 = Z_DVAL_P(op1);
			d2 = (double)Z_LVAL_P(op2);
			goto is_equal_double;
		}
	} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
		if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
			bool result = zend_fast_equal_strings(Z_STR_P(op1), Z_STR_P(op2));
			if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
				zval_ptr_dtor_str(op1);
			}
			if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
				zval_ptr_dtor_str(op2);
			}
			if (result) {
				goto is_equal_true;
			} else {
				goto is_equal_false;
			}
		}
	}
	ZEND_VM_DISPATCH_TO_HELPER(zend_is_equal_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_EX op1, op2));
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_IS_EQUAL_SPEC_CV_CONST_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;
	double d1, d2;

	op1 = EX_VAR(opline->op1.var);
	op2 = RT_CONSTANT(opline, opline->op2);
	if (1 && IS_CV == IS_CONST && IS_CONST == IS_CONST) {
		/* pass */
	} else if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
		if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
			if (EXPECTED(Z_LVAL_P(op1) == Z_LVAL_P(op2))) {
is_equal_true:
				ZEND_VM_SMART_BRANCH_TRUE_JMPZ();
			} else {
is_equal_false:
				ZEND_VM_SMART_BRANCH_FALSE_JMPZ();
			}
		} else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
			d1 = (double)Z_LVAL_P(op1);
			d2 = Z_DVAL_P(op2);
			goto is_equal_double;
		}
	} else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) {
		if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
			d1 = Z_DVAL_P(op1);
			d2 = Z_DVAL_P(op2);
is_equal_double:
			if (d1 == d2) {
				goto is_equal_true;
			} else {
				goto is_equal_false;
			}
		} else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
			d1 = Z_DVAL_P(op1);
			d2 = (double)Z_LVAL_P(op2);
			goto is_equal_double;
		}
	} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
		if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
			bool result = zend_fast_equal_strings(Z_STR_P(op1), Z_STR_P(op2));
			if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
				zval_ptr_dtor_str(op1);
			}
			if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
				zval_ptr_dtor_str(op2);
			}
			if (result) {
				goto is_equal_true;
			} else {
				goto is_equal_false;
			}
		}
	}
	ZEND_VM_DISPATCH_TO_HELPER(zend_is_equal_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_EX op1, op2));
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_IS_EQUAL_SPEC_CV_CONST_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;
	double d1, d2;

	op1 = EX_VAR(opline->op1.var);
	op2 = RT_CONSTANT(opline, opline->op2);
	if (1 && IS_CV == IS_CONST && IS_CONST == IS_CONST) {
		/* pass */
	} else if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
		if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
			if (EXPECTED(Z_LVAL_P(op1) == Z_LVAL_P(op2))) {
is_equal_true:
				ZEND_VM_SMART_BRANCH_TRUE_JMPNZ();
			} else {
is_equal_false:
				ZEND_VM_SMART_BRANCH_FALSE_JMPNZ();
			}
		} else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
			d1 = (double)Z_LVAL_P(op1);
			d2 = Z_DVAL_P(op2);
			goto is_equal_double;
		}
	} else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) {
		if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
			d1 = Z_DVAL_P(op1);
			d2 = Z_DVAL_P(op2);
is_equal_double:
			if (d1 == d2) {
				goto is_equal_true;
			} else {
				goto is_equal_false;
			}
		} else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
			d1 = Z_DVAL_P(op1);
			d2 = (double)Z_LVAL_P(op2);
			goto is_equal_double;
		}
	} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
		if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
			bool result = zend_fast_equal_strings(Z_STR_P(op1), Z_STR_P(op2));
			if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
				zval_ptr_dtor_str(op1);
			}
			if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
				zval_ptr_dtor_str(op2);
			}
			if (result) {
				goto is_equal_true;
			} else {
				goto is_equal_false;
			}
		}
	}
	ZEND_VM_DISPATCH_TO_HELPER(zend_is_equal_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_EX op1, op2));
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_IS_NOT_EQUAL_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;
	double d1, d2;

	op1 = EX_VAR(opline->op1.var);
	op2 = RT_CONSTANT(opline, opline->op2);
	if (1 && IS_CV == IS_CONST && IS_CONST == IS_CONST) {
		/* pass */
	} else if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
		if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
			if (EXPECTED(Z_LVAL_P(op1) != Z_LVAL_P(op2))) {
is_not_equal_true:
				ZEND_VM_SMART_BRANCH_TRUE_NONE();
			} else {
is_not_equal_false:
				ZEND_VM_SMART_BRANCH_FALSE_NONE();
			}
		} else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
			d1 = (double)Z_LVAL_P(op1);
			d2 = Z_DVAL_P(op2);
			goto is_not_equal_double;
		}
	} else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) {
		if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
			d1 = Z_DVAL_P(op1);
			d2 = Z_DVAL_P(op2);
is_not_equal_double:
			if (d1 != d2) {
				goto is_not_equal_true;
			} else {
				goto is_not_equal_false;
			}
		} else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
			d1 = Z_DVAL_P(op1);
			d2 = (double)Z_LVAL_P(op2);
			goto is_not_equal_double;
		}
	} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
		if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
			bool result = zend_fast_equal_strings(Z_STR_P(op1), Z_STR_P(op2));
			if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
				zval_ptr_dtor_str(op1);
			}
			if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
				zval_ptr_dtor_str(op2);
			}
			if (!result) {
				goto is_not_equal_true;
			} else {
				goto is_not_equal_false;
			}
		}
	}
	ZEND_VM_DISPATCH_TO_HELPER(zend_is_not_equal_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_EX op1, op2));
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_IS_NOT_EQUAL_SPEC_CV_CONST_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;
	double d1, d2;

	op1 = EX_VAR(opline->op1.var);
	op2 = RT_CONSTANT(opline, opline->op2);
	if (1 && IS_CV == IS_CONST && IS_CONST == IS_CONST) {
		/* pass */
	} else if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
		if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
			if (EXPECTED(Z_LVAL_P(op1) != Z_LVAL_P(op2))) {
is_not_equal_true:
				ZEND_VM_SMART_BRANCH_TRUE_JMPZ();
			} else {
is_not_equal_false:
				ZEND_VM_SMART_BRANCH_FALSE_JMPZ();
			}
		} else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
			d1 = (double)Z_LVAL_P(op1);
			d2 = Z_DVAL_P(op2);
			goto is_not_equal_double;
		}
	} else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) {
		if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
			d1 = Z_DVAL_P(op1);
			d2 = Z_DVAL_P(op2);
is_not_equal_double:
			if (d1 != d2) {
				goto is_not_equal_true;
			} else {
				goto is_not_equal_false;
			}
		} else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
			d1 = Z_DVAL_P(op1);
			d2 = (double)Z_LVAL_P(op2);
			goto is_not_equal_double;
		}
	} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
		if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
			bool result = zend_fast_equal_strings(Z_STR_P(op1), Z_STR_P(op2));
			if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
				zval_ptr_dtor_str(op1);
			}
			if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
				zval_ptr_dtor_str(op2);
			}
			if (!result) {
				goto is_not_equal_true;
			} else {
				goto is_not_equal_false;
			}
		}
	}
	ZEND_VM_DISPATCH_TO_HELPER(zend_is_not_equal_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_EX op1, op2));
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_IS_NOT_EQUAL_SPEC_CV_CONST_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;
	double d1, d2;

	op1 = EX_VAR(opline->op1.var);
	op2 = RT_CONSTANT(opline, opline->op2);
	if (1 && IS_CV == IS_CONST && IS_CONST == IS_CONST) {
		/* pass */
	} else if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
		if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
			if (EXPECTED(Z_LVAL_P(op1) != Z_LVAL_P(op2))) {
is_not_equal_true:
				ZEND_VM_SMART_BRANCH_TRUE_JMPNZ();
			} else {
is_not_equal_false:
				ZEND_VM_SMART_BRANCH_FALSE_JMPNZ();
			}
		} else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
			d1 = (double)Z_LVAL_P(op1);
			d2 = Z_DVAL_P(op2);
			goto is_not_equal_double;
		}
	} else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) {
		if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
			d1 = Z_DVAL_P(op1);
			d2 = Z_DVAL_P(op2);
is_not_equal_double:
			if (d1 != d2) {
				goto is_not_equal_true;
			} else {
				goto is_not_equal_false;
			}
		} else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
			d1 = Z_DVAL_P(op1);
			d2 = (double)Z_LVAL_P(op2);
			goto is_not_equal_double;
		}
	} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
		if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
			bool result = zend_fast_equal_strings(Z_STR_P(op1), Z_STR_P(op2));
			if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
				zval_ptr_dtor_str(op1);
			}
			if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
				zval_ptr_dtor_str(op2);
			}
			if (!result) {
				goto is_not_equal_true;
			} else {
				goto is_not_equal_false;
			}
		}
	}
	ZEND_VM_DISPATCH_TO_HELPER(zend_is_not_equal_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_EX op1, op2));
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_SPACESHIP_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;

	SAVE_OPLINE();
	op1 = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
	op2 = RT_CONSTANT(opline, opline->op2);
	compare_function(EX_VAR(opline->result.var), op1, op2);




	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_BOOL_XOR_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;

	SAVE_OPLINE();
	op1 = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
	op2 = RT_CONSTANT(opline, opline->op2);
	boolean_xor_function(EX_VAR(opline->result.var), op1, op2);




	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_ASSIGN_OBJ_OP_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *object;
	zval *property;
	zval *value;
	zval *zptr;
	void *_cache_slot[3] = {0};
	void **cache_slot;
	zend_property_info *prop_info;
	zend_object *zobj;
	zend_string *name, *tmp_name;

	SAVE_OPLINE();
	object = EX_VAR(opline->op1.var);
	property = RT_CONSTANT(opline, opline->op2);

	do {
		value = get_op_data_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1);

		if (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
			if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
				object = Z_REFVAL_P(object);
				goto assign_op_object;
			}
			if (IS_CV == IS_CV
			 && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
				ZVAL_UNDEFINED_OP1();
			}
			zend_throw_non_object_error(object, property OPLINE_CC EXECUTE_DATA_CC);
			break;
		}

assign_op_object:
		/* here we are sure we are dealing with an object */
		zobj = Z_OBJ_P(object);
		if (IS_CONST == IS_CONST) {
			name = Z_STR_P(property);
		} else {
			name = zval_try_get_tmp_string(property, &tmp_name);
			if (UNEXPECTED(!name)) {
				UNDEF_RESULT();
				break;
			}
		}
		cache_slot = (IS_CONST == IS_CONST) ? CACHE_ADDR((opline+1)->extended_value) : _cache_slot;
		if (EXPECTED((zptr = zobj->handlers->get_property_ptr_ptr(zobj, name, BP_VAR_RW, cache_slot)) != NULL)) {
			if (UNEXPECTED(Z_ISERROR_P(zptr))) {
				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
					ZVAL_NULL(EX_VAR(opline->result.var));
				}
			} else {
				zend_reference *ref;

				do {
					if (UNEXPECTED(Z_ISREF_P(zptr))) {
						ref = Z_REF_P(zptr);
						zptr = Z_REFVAL_P(zptr);
						if (UNEXPECTED(ZEND_REF_HAS_TYPE_SOURCES(ref))) {
							zend_binary_assign_op_typed_ref(ref, value OPLINE_CC EXECUTE_DATA_CC);
							break;
						}
					}

					prop_info = (zend_property_info*)CACHED_PTR_EX(cache_slot + 2);
					if (prop_info && ZEND_TYPE_IS_SET(prop_info->type)) {
						/* special case for typed properties */
						zend_binary_assign_op_typed_prop(prop_info, zptr, value OPLINE_CC EXECUTE_DATA_CC);
					} else {
						zend_binary_op(zptr, zptr, value OPLINE_CC);
					}
				} while (0);

				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
					ZVAL_COPY(EX_VAR(opline->result.var), zptr);
				}
			}
		} else {
			zend_assign_op_overloaded_property(zobj, name, cache_slot, value OPLINE_CC EXECUTE_DATA_CC);
		}
		if (IS_CONST != IS_CONST) {
			zend_tmp_string_release(tmp_name);
		}
	} while (0);

	FREE_OP((opline+1)->op1_type, (opline+1)->op1.var);




	/* assign_obj has two opcodes! */
	ZEND_VM_NEXT_OPCODE_EX(1, 2);
}

/* No specialization for op_types (CONST|TMP|VAR|CV, UNUSED|CONST|TMPVAR) */
static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_ASSIGN_DIM_OP_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *var_ptr;
	zval *value, *container, *dim;
	HashTable *ht;

	SAVE_OPLINE();
	container = EX_VAR(opline->op1.var);

	if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
assign_dim_op_array:
		SEPARATE_ARRAY(container);
		ht = Z_ARRVAL_P(container);
assign_dim_op_new_array:
		dim = RT_CONSTANT(opline, opline->op2);
		if (IS_CONST == IS_UNUSED) {
			var_ptr = zend_hash_next_index_insert(ht, &EG(uninitialized_zval));
			if (UNEXPECTED(!var_ptr)) {
				zend_cannot_add_element();
				goto assign_dim_op_ret_null;
			}
		} else {
			if (IS_CONST == IS_CONST) {
				var_ptr = zend_fetch_dimension_address_inner_RW_CONST(ht, dim EXECUTE_DATA_CC);
			} else {
				var_ptr = zend_fetch_dimension_address_inner_RW(ht, dim EXECUTE_DATA_CC);
			}
			if (UNEXPECTED(!var_ptr)) {
				goto assign_dim_op_ret_null;
			}
		}

		value = get_op_data_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1);

		do {
			if (IS_CONST != IS_UNUSED && UNEXPECTED(Z_ISREF_P(var_ptr))) {
				zend_reference *ref = Z_REF_P(var_ptr);
				var_ptr = Z_REFVAL_P(var_ptr);
				if (UNEXPECTED(ZEND_REF_HAS_TYPE_SOURCES(ref))) {
					zend_binary_assign_op_typed_ref(ref, value OPLINE_CC EXECUTE_DATA_CC);
					break;
				}
			}
			zend_binary_op(var_ptr, var_ptr, value OPLINE_CC);
		} while (0);

		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
			ZVAL_COPY(EX_VAR(opline->result.var), var_ptr);
		}
		FREE_OP((opline+1)->op1_type, (opline+1)->op1.var);
	} else {
		if (EXPECTED(Z_ISREF_P(container))) {
			container = Z_REFVAL_P(container);
			if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
				goto assign_dim_op_array;
			}
		}

		if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
			zend_object *obj = Z_OBJ_P(container);

			dim = RT_CONSTANT(opline, opline->op2);
			if (IS_CONST == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
				dim++;
			}
			zend_binary_assign_op_obj_dim(obj, dim OPLINE_CC EXECUTE_DATA_CC);
		} else if (EXPECTED(Z_TYPE_P(container) <= IS_FALSE)) {
			uint8_t old_type;

			if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(container) == IS_UNDEF)) {
				ZVAL_UNDEFINED_OP1();
			}
			ht = zend_new_array(8);
			old_type = Z_TYPE_P(container);
			ZVAL_ARR(container, ht);
			if (UNEXPECTED(old_type == IS_FALSE)) {
				GC_ADDREF(ht);
				zend_false_to_array_deprecated();
				if (UNEXPECTED(GC_DELREF(ht) == 0)) {
					zend_array_destroy(ht);
					goto assign_dim_op_ret_null;
				}
			}
			goto assign_dim_op_new_array;
		} else {
			dim = RT_CONSTANT(opline, opline->op2);
			zend_binary_assign_op_dim_slow(container, dim OPLINE_CC EXECUTE_DATA_CC);
assign_dim_op_ret_null:
			FREE_OP((opline+1)->op1_type, (opline+1)->op1.var);
			if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
				ZVAL_NULL(EX_VAR(opline->result.var));
			}
		}
	}




	ZEND_VM_NEXT_OPCODE_EX(1, 2);
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_ASSIGN_OP_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *var_ptr;
	zval *value;

	SAVE_OPLINE();
	value = RT_CONSTANT(opline, opline->op2);
	var_ptr = _get_zval_ptr_cv_BP_VAR_RW(opline->op1.var EXECUTE_DATA_CC);

	do {
		if (UNEXPECTED(Z_TYPE_P(var_ptr) == IS_REFERENCE)) {
			zend_reference *ref = Z_REF_P(var_ptr);
			var_ptr = Z_REFVAL_P(var_ptr);
			if (UNEXPECTED(ZEND_REF_HAS_TYPE_SOURCES(ref))) {
				zend_binary_assign_op_typed_ref(ref, value OPLINE_CC EXECUTE_DATA_CC);
				break;
			}
		}
		zend_binary_op(var_ptr, var_ptr, value OPLINE_CC);
	} while (0);

	if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
		ZVAL_COPY(EX_VAR(opline->result.var), var_ptr);
	}




	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_PRE_INC_OBJ_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *object;
	zval *property;
	zval *zptr;
	void *_cache_slot[3] = {0};
	void **cache_slot;
	zend_property_info *prop_info;
	zend_object *zobj;
	zend_string *name, *tmp_name;

	SAVE_OPLINE();
	object = EX_VAR(opline->op1.var);
	property = RT_CONSTANT(opline, opline->op2);

	do {
		if (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
			if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
				object = Z_REFVAL_P(object);
				goto pre_incdec_object;
			}
			if (IS_CV == IS_CV
			 && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
				ZVAL_UNDEFINED_OP1();
			}
			zend_throw_non_object_error(object, property OPLINE_CC EXECUTE_DATA_CC);
			break;
		}

pre_incdec_object:
		/* here we are sure we are dealing with an object */
		zobj = Z_OBJ_P(object);
		if (IS_CONST == IS_CONST) {
			name = Z_STR_P(property);
		} else {
			name = zval_try_get_tmp_string(property, &tmp_name);
			if (UNEXPECTED(!name)) {
				UNDEF_RESULT();
				break;
			}
		}
		cache_slot = (IS_CONST == IS_CONST) ? CACHE_ADDR(opline->extended_value) : _cache_slot;
		if (EXPECTED((zptr = zobj->handlers->get_property_ptr_ptr(zobj, name, BP_VAR_RW, cache_slot)) != NULL)) {
			if (UNEXPECTED(Z_ISERROR_P(zptr))) {
				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
					ZVAL_NULL(EX_VAR(opline->result.var));
				}
			} else {
				prop_info = (zend_property_info *) CACHED_PTR_EX(cache_slot + 2);
				zend_pre_incdec_property_zval(zptr,
					prop_info && ZEND_TYPE_IS_SET(prop_info->type) ? prop_info : NULL OPLINE_CC EXECUTE_DATA_CC);
			}
		} else {
			zend_pre_incdec_overloaded_property(zobj, name, cache_slot OPLINE_CC EXECUTE_DATA_CC);
		}
		if (IS_CONST != IS_CONST) {
			zend_tmp_string_release(tmp_name);
		}
	} while (0);




	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_POST_INC_OBJ_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *object;
	zval *property;
	zval *zptr;
	void *_cache_slot[3] = {0};
	void **cache_slot;
	zend_property_info *prop_info;
	zend_object *zobj;
	zend_string *name, *tmp_name;

	SAVE_OPLINE();
	object = EX_VAR(opline->op1.var);
	property = RT_CONSTANT(opline, opline->op2);

	do {
		if (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
			if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
				object = Z_REFVAL_P(object);
				goto post_incdec_object;
			}
			if (IS_CV == IS_CV
			 && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
				ZVAL_UNDEFINED_OP1();
			}
			zend_throw_non_object_error(object, property OPLINE_CC EXECUTE_DATA_CC);
			break;
		}

post_incdec_object:
		/* here we are sure we are dealing with an object */
		zobj = Z_OBJ_P(object);
		if (IS_CONST == IS_CONST) {
			name = Z_STR_P(property);
		} else {
			name = zval_try_get_tmp_string(property, &tmp_name);
			if (UNEXPECTED(!name)) {
				ZVAL_UNDEF(EX_VAR(opline->result.var));
				break;
			}
		}
		cache_slot = (IS_CONST == IS_CONST) ? CACHE_ADDR(opline->extended_value) : _cache_slot;
		if (EXPECTED((zptr = zobj->handlers->get_property_ptr_ptr(zobj, name, BP_VAR_RW, cache_slot)) != NULL)) {
			if (UNEXPECTED(Z_ISERROR_P(zptr))) {
				ZVAL_NULL(EX_VAR(opline->result.var));
			} else {
				prop_info = (zend_property_info*)CACHED_PTR_EX(cache_slot + 2);
				zend_post_incdec_property_zval(zptr,
					prop_info && ZEND_TYPE_IS_SET(prop_info->type) ? prop_info : NULL OPLINE_CC EXECUTE_DATA_CC);
			}
		} else {
			zend_post_incdec_overloaded_property(zobj, name, cache_slot OPLINE_CC EXECUTE_DATA_CC);
		}
		if (IS_CONST != IS_CONST) {
			zend_tmp_string_release(tmp_name);
		}
	} while (0);




	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_FETCH_DIM_R_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *container, *dim, *value;

	SAVE_OPLINE();
	container = EX_VAR(opline->op1.var);
	dim = RT_CONSTANT(opline, opline->op2);
	if (IS_CV != IS_CONST) {
		if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
fetch_dim_r_array:
			value = zend_fetch_dimension_address_inner(Z_ARRVAL_P(container), dim, IS_CONST, BP_VAR_R EXECUTE_DATA_CC);
			ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
		} else if (EXPECTED(Z_TYPE_P(container) == IS_REFERENCE)) {
			container = Z_REFVAL_P(container);
			if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
				goto fetch_dim_r_array;
			} else {
				goto fetch_dim_r_slow;
			}
		} else {
fetch_dim_r_slow:
			if (IS_CONST == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
				dim++;
			}
			zend_fetch_dimension_address_read_R_slow(container, dim OPLINE_CC EXECUTE_DATA_CC);
		}
	} else {
		zend_fetch_dimension_address_read_R(container, dim, IS_CONST OPLINE_CC EXECUTE_DATA_CC);
	}




	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_FETCH_DIM_W_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *container;

	SAVE_OPLINE();
	container = EX_VAR(opline->op1.var);
	zend_fetch_dimension_address_W(container, RT_CONSTANT(opline, opline->op2), IS_CONST OPLINE_CC EXECUTE_DATA_CC);


	if (IS_CV == IS_VAR) {
		FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
	}
	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_FETCH_DIM_RW_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *container;

	SAVE_OPLINE();
	container = EX_VAR(opline->op1.var);
	zend_fetch_dimension_address_RW(container, RT_CONSTANT(opline, opline->op2), IS_CONST OPLINE_CC EXECUTE_DATA_CC);


	if (IS_CV == IS_VAR) {
		FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
	}
	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_FETCH_DIM_IS_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *container;

	SAVE_OPLINE();
	container = EX_VAR(opline->op1.var);
	zend_fetch_dimension_address_read_IS(container, RT_CONSTANT(opline, opline->op2), IS_CONST OPLINE_CC EXECUTE_DATA_CC);




	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
#if 0
	USE_OPLINE
#endif

	if (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) {
		if ((IS_CV & (IS_CONST|IS_TMP_VAR))) {
			ZEND_VM_TAIL_CALL(zend_use_tmp_in_write_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
		}
		ZEND_VM_TAIL_CALL(ZEND_FETCH_DIM_W_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
	} else {
		if (IS_CONST == IS_UNUSED) {
			ZEND_VM_TAIL_CALL(zend_use_undef_in_read_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
		}
		ZEND_VM_TAIL_CALL(ZEND_FETCH_DIM_R_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
	}
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_FETCH_DIM_UNSET_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *container;

	SAVE_OPLINE();
	container = EX_VAR(opline->op1.var);
	zend_fetch_dimension_address_UNSET(container, RT_CONSTANT(opline, opline->op2), IS_CONST OPLINE_CC EXECUTE_DATA_CC);


	if (IS_CV == IS_VAR) {
		FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
	}
	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static zend_always_inline ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_FETCH_OBJ_R_SPEC_CV_CONST_INLINE_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *container;
	void **cache_slot = NULL;

	SAVE_OPLINE();
	container = EX_VAR(opline->op1.var);

	if (IS_CV == IS_CONST ||
	    (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
		do {
			if ((IS_CV & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
				container = Z_REFVAL_P(container);
				if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
					break;
				}
			}
			if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
				ZVAL_UNDEFINED_OP1();
			}
			zend_wrong_property_read(container, RT_CONSTANT(opline, opline->op2));
			ZVAL_NULL(EX_VAR(opline->result.var));
			goto fetch_obj_r_finish;
		} while (0);
	}

	/* here we are sure we are dealing with an object */
	do {
		zend_object *zobj = Z_OBJ_P(container);
		zend_string *name, *tmp_name;
		zval *retval;

		if (IS_CONST == IS_CONST) {
			cache_slot = CACHE_ADDR(opline->extended_value & ~ZEND_FETCH_REF /* FUNC_ARG fetch may contain it */);

			if (EXPECTED(zobj->ce == CACHED_PTR_EX(cache_slot))) {
				uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);

				if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
fetch_obj_r_simple:
					retval = OBJ_PROP(zobj, prop_offset);
					if (EXPECTED(Z_TYPE_INFO_P(retval) != IS_UNDEF)) {
						if (0 || (IS_CV & (IS_TMP_VAR|IS_VAR)) != 0) {
							goto fetch_obj_r_copy;
						} else {
fetch_obj_r_fast_copy:
							ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
							ZEND_VM_NEXT_OPCODE();
						}
					}
				} else if (UNEXPECTED(IS_HOOKED_PROPERTY_OFFSET(prop_offset))) {
					zend_property_info *prop_info = CACHED_PTR_EX(cache_slot + 2);
					if (ZEND_IS_PROPERTY_HOOK_SIMPLE_READ(prop_offset)) {
						prop_offset = prop_info->offset;
						goto fetch_obj_r_simple;
					} else if (EXPECTED(ZEND_IS_PROPERTY_HOOK_SIMPLE_GET(prop_offset))) {
						zend_function *hook = prop_info->hooks[ZEND_PROPERTY_HOOK_GET];
						ZEND_ASSERT(hook->type == ZEND_USER_FUNCTION);
						ZEND_ASSERT(RUN_TIME_CACHE(&hook->op_array));

						uint32_t call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_HAS_THIS;
						if (IS_CV & IS_CV) {
							GC_ADDREF(zobj);
						}
						if (IS_CV & (IS_CV|IS_VAR|IS_TMP_VAR)) {
							call_info |= ZEND_CALL_RELEASE_THIS;
						}
						zend_execute_data *call = zend_vm_stack_push_call_frame(call_info, hook, 0, zobj);
						call->prev_execute_data = execute_data;
						call->call = NULL;
						call->return_value = EX_VAR(opline->result.var);
						call->run_time_cache = RUN_TIME_CACHE(&hook->op_array);

						execute_data = call;
						EG(current_execute_data) = execute_data;
						zend_init_cvs(0, hook->op_array.last_var EXECUTE_DATA_CC);

#if defined(ZEND_VM_IP_GLOBAL_REG) && ((ZEND_VM_KIND == ZEND_VM_KIND_CALL) || (ZEND_VM_KIND == ZEND_VM_KIND_HYBRID))
						opline = hook->op_array.opcodes;
#else
						EX(opline) = hook->op_array.opcodes;
#endif
						LOAD_OPLINE_EX();




						ZEND_VM_ENTER_EX();
					}
					/* Fall through to read_property for hooks. */
				} else if (EXPECTED(zobj->properties != NULL)) {
					ZEND_ASSERT(IS_DYNAMIC_PROPERTY_OFFSET(prop_offset));
					name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
					if (!IS_UNKNOWN_DYNAMIC_PROPERTY_OFFSET(prop_offset)) {
						uintptr_t idx = ZEND_DECODE_DYN_PROP_OFFSET(prop_offset);

						if (EXPECTED(idx < zobj->properties->nNumUsed * sizeof(Bucket))) {
							Bucket *p = (Bucket*)((char*)zobj->properties->arData + idx);

							if (EXPECTED(p->key == name) ||
							    (EXPECTED(p->h == ZSTR_H(name)) &&
							     EXPECTED(p->key != NULL) &&
							     EXPECTED(zend_string_equal_content(p->key, name)))) {
								retval = &p->val;
								if (0 || (IS_CV & (IS_TMP_VAR|IS_VAR)) != 0) {
									goto fetch_obj_r_copy;
								} else {
									goto fetch_obj_r_fast_copy;
								}
							}
						}
						CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_DYNAMIC_PROPERTY_OFFSET);
					}
					retval = zend_hash_find_known_hash(zobj->properties, name);
					if (EXPECTED(retval)) {
						uintptr_t idx = (char*)retval - (char*)zobj->properties->arData;
						CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_ENCODE_DYN_PROP_OFFSET(idx));
						if (0 || (IS_CV & (IS_TMP_VAR|IS_VAR)) != 0) {
							goto fetch_obj_r_copy;
						} else {
							goto fetch_obj_r_fast_copy;
						}
					}
				}
			}
			name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
		} else {
			name = zval_try_get_tmp_string(RT_CONSTANT(opline, opline->op2), &tmp_name);
			if (UNEXPECTED(!name)) {
				ZVAL_UNDEF(EX_VAR(opline->result.var));
				break;
			}
		}

#if ZEND_DEBUG
		/* For non-standard object handlers, verify a declared property type in debug builds.
		 * Fetch prop_info before calling read_property(), as it may deallocate the object. */
		zend_property_info *prop_info = NULL;
		if (zobj->handlers->read_property != zend_std_read_property) {
			prop_info = zend_get_property_info(zobj->ce, name, /* silent */ true);
		}
#endif
		retval = zobj->handlers->read_property(zobj, name, BP_VAR_R, cache_slot, EX_VAR(opline->result.var));
#if ZEND_DEBUG
		if (!EG(exception) && prop_info && prop_info != ZEND_WRONG_PROPERTY_INFO
				&& ZEND_TYPE_IS_SET(prop_info->type)) {
			ZVAL_OPT_DEREF(retval);
			zend_verify_property_type(prop_info, retval, /* strict */ true);
		}
#endif

		if (IS_CONST != IS_CONST) {
			zend_tmp_string_release(tmp_name);
		}

		if (retval != EX_VAR(opline->result.var)) {
fetch_obj_r_copy:
			ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
		} else if (UNEXPECTED(Z_ISREF_P(retval))) {
			zend_unwrap_reference(retval);
		}
	} while (0);

fetch_obj_r_finish:




	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_FETCH_OBJ_R_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	ZEND_VM_TAIL_CALL(ZEND_FETCH_OBJ_R_SPEC_CV_CONST_INLINE_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_FETCH_OBJ_W_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *property, *container, *result;

	SAVE_OPLINE();

	container = EX_VAR(opline->op1.var);
	property = RT_CONSTANT(opline, opline->op2);
	result = EX_VAR(opline->result.var);
	zend_fetch_property_address(
		result, container, IS_CV, property, IS_CONST,
		((IS_CONST == IS_CONST) ? CACHE_ADDR(opline->extended_value & ~ZEND_FETCH_OBJ_FLAGS) : NULL),
		BP_VAR_W, opline->extended_value, NULL OPLINE_CC EXECUTE_DATA_CC);


	if (IS_CV == IS_VAR) {
		FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
	}
	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_FETCH_OBJ_RW_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *property, *container, *result;

	SAVE_OPLINE();
	container = EX_VAR(opline->op1.var);
	property = RT_CONSTANT(opline, opline->op2);
	result = EX_VAR(opline->result.var);
	zend_fetch_property_address(result, container, IS_CV, property, IS_CONST, ((IS_CONST == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL), BP_VAR_RW, 0, NULL OPLINE_CC EXECUTE_DATA_CC);


	if (IS_CV == IS_VAR) {
		FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
	}
	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_FETCH_OBJ_IS_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *container;
	void **cache_slot = NULL;

	SAVE_OPLINE();
	container = _get_zval_ptr_cv_BP_VAR_IS(opline->op1.var EXECUTE_DATA_CC);

	if (IS_CV == IS_CONST ||
	    (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
		do {
			if ((IS_CV & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
				container = Z_REFVAL_P(container);
				if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
					break;
				}
			}
			if (IS_CONST == IS_CV && Z_TYPE_P(EX_VAR(opline->op2.var)) == IS_UNDEF) {
				ZVAL_UNDEFINED_OP2();
			}
			ZVAL_NULL(EX_VAR(opline->result.var));
			goto fetch_obj_is_finish;
		} while (0);
	}

	/* here we are sure we are dealing with an object */
	do {
		zend_object *zobj = Z_OBJ_P(container);
		zend_string *name, *tmp_name;
		zval *retval;

		if (IS_CONST == IS_CONST) {
			cache_slot = CACHE_ADDR(opline->extended_value);

			if (EXPECTED(zobj->ce == CACHED_PTR_EX(cache_slot))) {
				uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);

				if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
fetch_obj_is_simple:
					retval = OBJ_PROP(zobj, prop_offset);
					if (EXPECTED(Z_TYPE_P(retval) != IS_UNDEF)) {
						if (0 || (IS_CV & (IS_TMP_VAR|IS_VAR)) != 0) {
							goto fetch_obj_is_copy;
						} else {
fetch_obj_is_fast_copy:
							ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
							ZEND_VM_NEXT_OPCODE();
						}
					}
				} else if (UNEXPECTED(IS_HOOKED_PROPERTY_OFFSET(prop_offset))) {
					if (ZEND_IS_PROPERTY_HOOK_SIMPLE_READ(prop_offset)) {
						zend_property_info *prop_info = CACHED_PTR_EX(cache_slot + 2);
						prop_offset = prop_info->offset;
						goto fetch_obj_is_simple;
					}
					/* Fall through to read_property for hooks. */
				} else if (EXPECTED(zobj->properties != NULL)) {
					ZEND_ASSERT(IS_DYNAMIC_PROPERTY_OFFSET(prop_offset));
					name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
					if (!IS_UNKNOWN_DYNAMIC_PROPERTY_OFFSET(prop_offset)) {
						uintptr_t idx = ZEND_DECODE_DYN_PROP_OFFSET(prop_offset);

						if (EXPECTED(idx < zobj->properties->nNumUsed * sizeof(Bucket))) {
							Bucket *p = (Bucket*)((char*)zobj->properties->arData + idx);

							if (EXPECTED(p->key == name) ||
							    (EXPECTED(p->h == ZSTR_H(name)) &&
							     EXPECTED(p->key != NULL) &&
							     EXPECTED(zend_string_equal_content(p->key, name)))) {
								retval = &p->val;
								if (0 || (IS_CV & (IS_TMP_VAR|IS_VAR)) != 0) {
									goto fetch_obj_is_copy;
								} else {
									goto fetch_obj_is_fast_copy;
								}
							}
						}
						CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_DYNAMIC_PROPERTY_OFFSET);
					}
					retval = zend_hash_find_known_hash(zobj->properties, name);
					if (EXPECTED(retval)) {
						uintptr_t idx = (char*)retval - (char*)zobj->properties->arData;
						CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_ENCODE_DYN_PROP_OFFSET(idx));
						if (0 || (IS_CV & (IS_TMP_VAR|IS_VAR)) != 0) {
							goto fetch_obj_is_copy;
						} else {
							goto fetch_obj_is_fast_copy;
						}
					}
				}
			}
			name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
		} else {
			name = zval_try_get_tmp_string(RT_CONSTANT(opline, opline->op2), &tmp_name);
			if (UNEXPECTED(!name)) {
				ZVAL_UNDEF(EX_VAR(opline->result.var));
				break;
			}
		}

		retval = zobj->handlers->read_property(zobj, name, BP_VAR_IS, cache_slot, EX_VAR(opline->result.var));

		if (IS_CONST != IS_CONST) {
			zend_tmp_string_release(tmp_name);
		}

		if (retval != EX_VAR(opline->result.var)) {
fetch_obj_is_copy:
			ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
		} else if (UNEXPECTED(Z_ISREF_P(retval))) {
			zend_unwrap_reference(retval);
		}
	} while (0);

fetch_obj_is_finish:




	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
#if 0
	USE_OPLINE
#endif

	if (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) {
		/* Behave like FETCH_OBJ_W */
		if ((IS_CV & (IS_CONST|IS_TMP_VAR))) {
			ZEND_VM_TAIL_CALL(zend_use_tmp_in_write_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
		}
		ZEND_VM_TAIL_CALL(ZEND_FETCH_OBJ_W_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
	} else {
		ZEND_VM_TAIL_CALL(ZEND_FETCH_OBJ_R_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
	}
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_FETCH_OBJ_UNSET_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *container, *property, *result;

	SAVE_OPLINE();
	container = EX_VAR(opline->op1.var);
	property = RT_CONSTANT(opline, opline->op2);
	result = EX_VAR(opline->result.var);
	zend_fetch_property_address(result, container, IS_CV, property, IS_CONST, ((IS_CONST == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL), BP_VAR_UNSET, 0, NULL OPLINE_CC EXECUTE_DATA_CC);


	if (IS_CV == IS_VAR) {
		FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
	}
	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_ASSIGN_OBJ_SPEC_CV_CONST_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *object, *value, tmp;
	zend_object *zobj;
	zend_string *name, *tmp_name;
	zend_refcounted *garbage = NULL;

	SAVE_OPLINE();
	object = EX_VAR(opline->op1.var);
	value = RT_CONSTANT((opline+1), (opline+1)->op1);

	if (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
		if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
			object = Z_REFVAL_P(object);
			goto assign_object;
		}
		zend_throw_non_object_error(object, RT_CONSTANT(opline, opline->op2) OPLINE_CC EXECUTE_DATA_CC);
		value = &EG(uninitialized_zval);
		goto free_and_exit_assign_obj;
	}

assign_object:
	zobj = Z_OBJ_P(object);
	if (IS_CONST == IS_CONST) {
		if (EXPECTED(zobj->ce == CACHED_PTR(opline->extended_value))) {
			void **cache_slot = CACHE_ADDR(opline->extended_value);
			uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
			zval *property_val;
			zend_property_info *prop_info;

			if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
				prop_info = (zend_property_info*) CACHED_PTR_EX(cache_slot + 2);

assign_obj_simple:
				property_val = OBJ_PROP(zobj, prop_offset);
				if (Z_TYPE_P(property_val) != IS_UNDEF) {
					if (prop_info != NULL) {
						value = zend_assign_to_typed_prop(prop_info, property_val, value, &garbage EXECUTE_DATA_CC);
						goto free_and_exit_assign_obj;
					} else {
fast_assign_obj:
						value = zend_assign_to_variable_ex(property_val, value, IS_CONST, EX_USES_STRICT_TYPES(), &garbage);
						if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
							ZVAL_COPY(EX_VAR(opline->result.var), value);
						}
						goto exit_assign_obj;
					}
				}
			} else if (EXPECTED(IS_DYNAMIC_PROPERTY_OFFSET(prop_offset))) {
				name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
				if (UNEXPECTED(zend_lazy_object_must_init(zobj))) {
					zobj = zend_lazy_object_init(zobj);
					if (!zobj) {
						value = &EG(uninitialized_zval);
						goto free_and_exit_assign_obj;
					}
				}
				if (!zobj->ce->__set && (zobj->ce->ce_flags & ZEND_ACC_ALLOW_DYNAMIC_PROPERTIES)) {
					rebuild_object_properties_internal(zobj);
				}
				if (EXPECTED(zobj->properties != NULL)) {
					if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
						if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
							GC_DELREF(zobj->properties);
						}
						zobj->properties = zend_array_dup(zobj->properties);
					}
					property_val = zend_hash_find_known_hash(zobj->properties, name);
					if (property_val) {
						goto fast_assign_obj;
					}
				}

				if (!zobj->ce->__set && (zobj->ce->ce_flags & ZEND_ACC_ALLOW_DYNAMIC_PROPERTIES)) {
					if (IS_CONST == IS_CONST) {
						if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
							Z_ADDREF_P(value);
						}
					} else if (IS_CONST != IS_TMP_VAR) {
						if (Z_ISREF_P(value)) {
							if (IS_CONST == IS_VAR) {
								zend_reference *ref = Z_REF_P(value);
								if (GC_DELREF(ref) == 0) {
									ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
									efree_size(ref, sizeof(zend_reference));
									value = &tmp;
								} else {
									value = Z_REFVAL_P(value);
									Z_TRY_ADDREF_P(value);
								}
							} else {
								value = Z_REFVAL_P(value);
								Z_TRY_ADDREF_P(value);
							}
						} else if (IS_CONST == IS_CV) {
							Z_TRY_ADDREF_P(value);
						}
					}
					zend_hash_add_new(zobj->properties, name, value);
					if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
						ZVAL_COPY(EX_VAR(opline->result.var), value);
					}
					goto exit_assign_obj;
				}
			} else {
				ZEND_ASSERT(IS_HOOKED_PROPERTY_OFFSET(prop_offset));
				if (ZEND_IS_PROPERTY_HOOK_SIMPLE_WRITE(prop_offset)) {
					prop_info = CACHED_PTR_EX(cache_slot + 2);
					prop_offset = prop_info->offset;
					if (!ZEND_TYPE_IS_SET(prop_info->type)) {
						prop_info = NULL;
					}
					goto assign_obj_simple;
				}
				/* Fall through to write_property for hooks. */
			}
		}
		name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
	} else {
		name = zval_try_get_tmp_string(RT_CONSTANT(opline, opline->op2), &tmp_name);
		if (UNEXPECTED(!name)) {


			UNDEF_RESULT();
			goto exit_assign_obj;
		}
	}

	if (IS_CONST == IS_CV || IS_CONST == IS_VAR) {
		ZVAL_DEREF(value);
	}

	value = zobj->handlers->write_property(zobj, name, value, (IS_CONST == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);

	if (IS_CONST != IS_CONST) {
		zend_tmp_string_release(tmp_name);
	}

free_and_exit_assign_obj:
	if (UNEXPECTED(RETURN_VALUE_USED(opline)) && value) {
		ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
	}


exit_assign_obj:
	if (garbage) {
		GC_DTOR_NO_REF(garbage);
	}




	/* assign_obj has two opcodes! */
	ZEND_VM_NEXT_OPCODE_EX(1, 2);
}

/* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CONST|VAR) */
static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_ASSIGN_OBJ_SPEC_CV_CONST_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *object, *value, tmp;
	zend_object *zobj;
	zend_string *name, *tmp_name;
	zend_refcounted *garbage = NULL;

	SAVE_OPLINE();
	object = EX_VAR(opline->op1.var);
	value = _get_zval_ptr_tmp((opline+1)->op1.var EXECUTE_DATA_CC);

	if (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
		if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
			object = Z_REFVAL_P(object);
			goto assign_object;
		}
		zend_throw_non_object_error(object, RT_CONSTANT(opline, opline->op2) OPLINE_CC EXECUTE_DATA_CC);
		value = &EG(uninitialized_zval);
		goto free_and_exit_assign_obj;
	}

assign_object:
	zobj = Z_OBJ_P(object);
	if (IS_CONST == IS_CONST) {
		if (EXPECTED(zobj->ce == CACHED_PTR(opline->extended_value))) {
			void **cache_slot = CACHE_ADDR(opline->extended_value);
			uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
			zval *property_val;
			zend_property_info *prop_info;

			if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
				prop_info = (zend_property_info*) CACHED_PTR_EX(cache_slot + 2);

assign_obj_simple:
				property_val = OBJ_PROP(zobj, prop_offset);
				if (Z_TYPE_P(property_val) != IS_UNDEF) {
					if (prop_info != NULL) {
						value = zend_assign_to_typed_prop(prop_info, property_val, value, &garbage EXECUTE_DATA_CC);
						goto free_and_exit_assign_obj;
					} else {
fast_assign_obj:
						value = zend_assign_to_variable_ex(property_val, value, IS_TMP_VAR, EX_USES_STRICT_TYPES(), &garbage);
						if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
							ZVAL_COPY(EX_VAR(opline->result.var), value);
						}
						goto exit_assign_obj;
					}
				}
			} else if (EXPECTED(IS_DYNAMIC_PROPERTY_OFFSET(prop_offset))) {
				name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
				if (UNEXPECTED(zend_lazy_object_must_init(zobj))) {
					zobj = zend_lazy_object_init(zobj);
					if (!zobj) {
						value = &EG(uninitialized_zval);
						goto free_and_exit_assign_obj;
					}
				}
				if (!zobj->ce->__set && (zobj->ce->ce_flags & ZEND_ACC_ALLOW_DYNAMIC_PROPERTIES)) {
					rebuild_object_properties_internal(zobj);
				}
				if (EXPECTED(zobj->properties != NULL)) {
					if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
						if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
							GC_DELREF(zobj->properties);
						}
						zobj->properties = zend_array_dup(zobj->properties);
					}
					property_val = zend_hash_find_known_hash(zobj->properties, name);
					if (property_val) {
						goto fast_assign_obj;
					}
				}

				if (!zobj->ce->__set && (zobj->ce->ce_flags & ZEND_ACC_ALLOW_DYNAMIC_PROPERTIES)) {
					if (IS_TMP_VAR == IS_CONST) {
						if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
							Z_ADDREF_P(value);
						}
					} else if (IS_TMP_VAR != IS_TMP_VAR) {
						if (Z_ISREF_P(value)) {
							if (IS_TMP_VAR == IS_VAR) {
								zend_reference *ref = Z_REF_P(value);
								if (GC_DELREF(ref) == 0) {
									ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
									efree_size(ref, sizeof(zend_reference));
									value = &tmp;
								} else {
									value = Z_REFVAL_P(value);
									Z_TRY_ADDREF_P(value);
								}
							} else {
								value = Z_REFVAL_P(value);
								Z_TRY_ADDREF_P(value);
							}
						} else if (IS_TMP_VAR == IS_CV) {
							Z_TRY_ADDREF_P(value);
						}
					}
					zend_hash_add_new(zobj->properties, name, value);
					if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
						ZVAL_COPY(EX_VAR(opline->result.var), value);
					}
					goto exit_assign_obj;
				}
			} else {
				ZEND_ASSERT(IS_HOOKED_PROPERTY_OFFSET(prop_offset));
				if (ZEND_IS_PROPERTY_HOOK_SIMPLE_WRITE(prop_offset)) {
					prop_info = CACHED_PTR_EX(cache_slot + 2);
					prop_offset = prop_info->offset;
					if (!ZEND_TYPE_IS_SET(prop_info->type)) {
						prop_info = NULL;
					}
					goto assign_obj_simple;
				}
				/* Fall through to write_property for hooks. */
			}
		}
		name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
	} else {
		name = zval_try_get_tmp_string(RT_CONSTANT(opline, opline->op2), &tmp_name);
		if (UNEXPECTED(!name)) {
			zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
			UNDEF_RESULT();
			goto exit_assign_obj;
		}
	}

	if (IS_TMP_VAR == IS_CV || IS_TMP_VAR == IS_VAR) {
		ZVAL_DEREF(value);
	}

	value = zobj->handlers->write_property(zobj, name, value, (IS_CONST == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);

	if (IS_CONST != IS_CONST) {
		zend_tmp_string_release(tmp_name);
	}

free_and_exit_assign_obj:
	if (UNEXPECTED(RETURN_VALUE_USED(opline)) && value) {
		ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
	}
	zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
exit_assign_obj:
	if (garbage) {
		GC_DTOR_NO_REF(garbage);
	}




	/* assign_obj has two opcodes! */
	ZEND_VM_NEXT_OPCODE_EX(1, 2);
}

/* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CONST|VAR) */
static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_ASSIGN_OBJ_SPEC_CV_CONST_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *object, *value, tmp;
	zend_object *zobj;
	zend_string *name, *tmp_name;
	zend_refcounted *garbage = NULL;

	SAVE_OPLINE();
	object = EX_VAR(opline->op1.var);
	value = _get_zval_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);

	if (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
		if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
			object = Z_REFVAL_P(object);
			goto assign_object;
		}
		zend_throw_non_object_error(object, RT_CONSTANT(opline, opline->op2) OPLINE_CC EXECUTE_DATA_CC);
		value = &EG(uninitialized_zval);
		goto free_and_exit_assign_obj;
	}

assign_object:
	zobj = Z_OBJ_P(object);
	if (IS_CONST == IS_CONST) {
		if (EXPECTED(zobj->ce == CACHED_PTR(opline->extended_value))) {
			void **cache_slot = CACHE_ADDR(opline->extended_value);
			uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
			zval *property_val;
			zend_property_info *prop_info;

			if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
				prop_info = (zend_property_info*) CACHED_PTR_EX(cache_slot + 2);

assign_obj_simple:
				property_val = OBJ_PROP(zobj, prop_offset);
				if (Z_TYPE_P(property_val) != IS_UNDEF) {
					if (prop_info != NULL) {
						value = zend_assign_to_typed_prop(prop_info, property_val, value, &garbage EXECUTE_DATA_CC);
						goto free_and_exit_assign_obj;
					} else {
fast_assign_obj:
						value = zend_assign_to_variable_ex(property_val, value, IS_VAR, EX_USES_STRICT_TYPES(), &garbage);
						if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
							ZVAL_COPY(EX_VAR(opline->result.var), value);
						}
						goto exit_assign_obj;
					}
				}
			} else if (EXPECTED(IS_DYNAMIC_PROPERTY_OFFSET(prop_offset))) {
				name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
				if (UNEXPECTED(zend_lazy_object_must_init(zobj))) {
					zobj = zend_lazy_object_init(zobj);
					if (!zobj) {
						value = &EG(uninitialized_zval);
						goto free_and_exit_assign_obj;
					}
				}
				if (!zobj->ce->__set && (zobj->ce->ce_flags & ZEND_ACC_ALLOW_DYNAMIC_PROPERTIES)) {
					rebuild_object_properties_internal(zobj);
				}
				if (EXPECTED(zobj->properties != NULL)) {
					if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
						if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
							GC_DELREF(zobj->properties);
						}
						zobj->properties = zend_array_dup(zobj->properties);
					}
					property_val = zend_hash_find_known_hash(zobj->properties, name);
					if (property_val) {
						goto fast_assign_obj;
					}
				}

				if (!zobj->ce->__set && (zobj->ce->ce_flags & ZEND_ACC_ALLOW_DYNAMIC_PROPERTIES)) {
					if (IS_VAR == IS_CONST) {
						if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
							Z_ADDREF_P(value);
						}
					} else if (IS_VAR != IS_TMP_VAR) {
						if (Z_ISREF_P(value)) {
							if (IS_VAR == IS_VAR) {
								zend_reference *ref = Z_REF_P(value);
								if (GC_DELREF(ref) == 0) {
									ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
									efree_size(ref, sizeof(zend_reference));
									value = &tmp;
								} else {
									value = Z_REFVAL_P(value);
									Z_TRY_ADDREF_P(value);
								}
							} else {
								value = Z_REFVAL_P(value);
								Z_TRY_ADDREF_P(value);
							}
						} else if (IS_VAR == IS_CV) {
							Z_TRY_ADDREF_P(value);
						}
					}
					zend_hash_add_new(zobj->properties, name, value);
					if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
						ZVAL_COPY(EX_VAR(opline->result.var), value);
					}
					goto exit_assign_obj;
				}
			} else {
				ZEND_ASSERT(IS_HOOKED_PROPERTY_OFFSET(prop_offset));
				if (ZEND_IS_PROPERTY_HOOK_SIMPLE_WRITE(prop_offset)) {
					prop_info = CACHED_PTR_EX(cache_slot + 2);
					prop_offset = prop_info->offset;
					if (!ZEND_TYPE_IS_SET(prop_info->type)) {
						prop_info = NULL;
					}
					goto assign_obj_simple;
				}
				/* Fall through to write_property for hooks. */
			}
		}
		name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
	} else {
		name = zval_try_get_tmp_string(RT_CONSTANT(opline, opline->op2), &tmp_name);
		if (UNEXPECTED(!name)) {
			zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
			UNDEF_RESULT();
			goto exit_assign_obj;
		}
	}

	if (IS_VAR == IS_CV || IS_VAR == IS_VAR) {
		ZVAL_DEREF(value);
	}

	value = zobj->handlers->write_property(zobj, name, value, (IS_CONST == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);

	if (IS_CONST != IS_CONST) {
		zend_tmp_string_release(tmp_name);
	}

free_and_exit_assign_obj:
	if (UNEXPECTED(RETURN_VALUE_USED(opline)) && value) {
		ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
	}
	zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
exit_assign_obj:
	if (garbage) {
		GC_DTOR_NO_REF(garbage);
	}




	/* assign_obj has two opcodes! */
	ZEND_VM_NEXT_OPCODE_EX(1, 2);
}

/* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CONST|VAR) */
static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_ASSIGN_OBJ_SPEC_CV_CONST_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *object, *value, tmp;
	zend_object *zobj;
	zend_string *name, *tmp_name;
	zend_refcounted *garbage = NULL;

	SAVE_OPLINE();
	object = EX_VAR(opline->op1.var);
	value = _get_zval_ptr_cv_BP_VAR_R((opline+1)->op1.var EXECUTE_DATA_CC);

	if (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
		if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
			object = Z_REFVAL_P(object);
			goto assign_object;
		}
		zend_throw_non_object_error(object, RT_CONSTANT(opline, opline->op2) OPLINE_CC EXECUTE_DATA_CC);
		value = &EG(uninitialized_zval);
		goto free_and_exit_assign_obj;
	}

assign_object:
	zobj = Z_OBJ_P(object);
	if (IS_CONST == IS_CONST) {
		if (EXPECTED(zobj->ce == CACHED_PTR(opline->extended_value))) {
			void **cache_slot = CACHE_ADDR(opline->extended_value);
			uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
			zval *property_val;
			zend_property_info *prop_info;

			if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
				prop_info = (zend_property_info*) CACHED_PTR_EX(cache_slot + 2);

assign_obj_simple:
				property_val = OBJ_PROP(zobj, prop_offset);
				if (Z_TYPE_P(property_val) != IS_UNDEF) {
					if (prop_info != NULL) {
						value = zend_assign_to_typed_prop(prop_info, property_val, value, &garbage EXECUTE_DATA_CC);
						goto free_and_exit_assign_obj;
					} else {
fast_assign_obj:
						value = zend_assign_to_variable_ex(property_val, value, IS_CV, EX_USES_STRICT_TYPES(), &garbage);
						if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
							ZVAL_COPY(EX_VAR(opline->result.var), value);
						}
						goto exit_assign_obj;
					}
				}
			} else if (EXPECTED(IS_DYNAMIC_PROPERTY_OFFSET(prop_offset))) {
				name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
				if (UNEXPECTED(zend_lazy_object_must_init(zobj))) {
					zobj = zend_lazy_object_init(zobj);
					if (!zobj) {
						value = &EG(uninitialized_zval);
						goto free_and_exit_assign_obj;
					}
				}
				if (!zobj->ce->__set && (zobj->ce->ce_flags & ZEND_ACC_ALLOW_DYNAMIC_PROPERTIES)) {
					rebuild_object_properties_internal(zobj);
				}
				if (EXPECTED(zobj->properties != NULL)) {
					if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
						if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
							GC_DELREF(zobj->properties);
						}
						zobj->properties = zend_array_dup(zobj->properties);
					}
					property_val = zend_hash_find_known_hash(zobj->properties, name);
					if (property_val) {
						goto fast_assign_obj;
					}
				}

				if (!zobj->ce->__set && (zobj->ce->ce_flags & ZEND_ACC_ALLOW_DYNAMIC_PROPERTIES)) {
					if (IS_CV == IS_CONST) {
						if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
							Z_ADDREF_P(value);
						}
					} else if (IS_CV != IS_TMP_VAR) {
						if (Z_ISREF_P(value)) {
							if (IS_CV == IS_VAR) {
								zend_reference *ref = Z_REF_P(value);
								if (GC_DELREF(ref) == 0) {
									ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
									efree_size(ref, sizeof(zend_reference));
									value = &tmp;
								} else {
									value = Z_REFVAL_P(value);
									Z_TRY_ADDREF_P(value);
								}
							} else {
								value = Z_REFVAL_P(value);
								Z_TRY_ADDREF_P(value);
							}
						} else if (IS_CV == IS_CV) {
							Z_TRY_ADDREF_P(value);
						}
					}
					zend_hash_add_new(zobj->properties, name, value);
					if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
						ZVAL_COPY(EX_VAR(opline->result.var), value);
					}
					goto exit_assign_obj;
				}
			} else {
				ZEND_ASSERT(IS_HOOKED_PROPERTY_OFFSET(prop_offset));
				if (ZEND_IS_PROPERTY_HOOK_SIMPLE_WRITE(prop_offset)) {
					prop_info = CACHED_PTR_EX(cache_slot + 2);
					prop_offset = prop_info->offset;
					if (!ZEND_TYPE_IS_SET(prop_info->type)) {
						prop_info = NULL;
					}
					goto assign_obj_simple;
				}
				/* Fall through to write_property for hooks. */
			}
		}
		name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
	} else {
		name = zval_try_get_tmp_string(RT_CONSTANT(opline, opline->op2), &tmp_name);
		if (UNEXPECTED(!name)) {


			UNDEF_RESULT();
			goto exit_assign_obj;
		}
	}

	if (IS_CV == IS_CV || IS_CV == IS_VAR) {
		ZVAL_DEREF(value);
	}

	value = zobj->handlers->write_property(zobj, name, value, (IS_CONST == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);

	if (IS_CONST != IS_CONST) {
		zend_tmp_string_release(tmp_name);
	}

free_and_exit_assign_obj:
	if (UNEXPECTED(RETURN_VALUE_USED(opline)) && value) {
		ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
	}


exit_assign_obj:
	if (garbage) {
		GC_DTOR_NO_REF(garbage);
	}




	/* assign_obj has two opcodes! */
	ZEND_VM_NEXT_OPCODE_EX(1, 2);
}

/* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CONST|VAR) */
static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_ASSIGN_DIM_SPEC_CV_CONST_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *object_ptr, *orig_object_ptr;
	zval *value;
	zval *variable_ptr;
	zval *dim;
	zend_refcounted *garbage = NULL;

	SAVE_OPLINE();
	orig_object_ptr = object_ptr = EX_VAR(opline->op1.var);

	if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
try_assign_dim_array:
		SEPARATE_ARRAY(object_ptr);
		if (IS_CONST == IS_UNUSED) {
			value = RT_CONSTANT((opline+1), (opline+1)->op1);
			if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
				HashTable *ht = Z_ARRVAL_P(object_ptr);
				if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE)) {
					GC_ADDREF(ht);
				}
				value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
				if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE) && !GC_DELREF(ht)) {
					zend_array_destroy(ht);
					goto assign_dim_error;
				}
			}
			if (IS_CONST == IS_CV || IS_CONST == IS_VAR) {
				ZVAL_DEREF(value);
			}
			value = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), value);
			if (UNEXPECTED(value == NULL)) {
				zend_cannot_add_element();
				goto assign_dim_error;
			} else if (IS_CONST == IS_CV) {
				if (Z_REFCOUNTED_P(value)) {
					Z_ADDREF_P(value);
				}
			} else if (IS_CONST == IS_VAR) {
				zval *free_op_data = EX_VAR((opline+1)->op1.var);
				if (Z_ISREF_P(free_op_data)) {
					if (Z_REFCOUNTED_P(value)) {
						Z_ADDREF_P(value);
					}
					zval_ptr_dtor_nogc(free_op_data);
				}
			} else if (IS_CONST == IS_CONST) {
				if (UNEXPECTED(Z_REFCOUNTED_P(value))) {
					Z_ADDREF_P(value);
				}
			}
		} else {
			dim = RT_CONSTANT(opline, opline->op2);
			if (IS_CONST == IS_CONST) {
				variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
			} else {
				variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
			}
			if (UNEXPECTED(variable_ptr == NULL)) {
				goto assign_dim_error;
			}
			value = RT_CONSTANT((opline+1), (opline+1)->op1);
			value = zend_assign_to_variable_ex(variable_ptr, value, IS_CONST, EX_USES_STRICT_TYPES(), &garbage);
		}
		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
			ZVAL_COPY(EX_VAR(opline->result.var), value);
		}
		if (garbage) {
			GC_DTOR_NO_REF(garbage);
		}
	} else {
		if (EXPECTED(Z_ISREF_P(object_ptr))) {
			object_ptr = Z_REFVAL_P(object_ptr);
			if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
				goto try_assign_dim_array;
			}
		}
		if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) {
			zend_object *obj = Z_OBJ_P(object_ptr);

			GC_ADDREF(obj);
			dim = RT_CONSTANT(opline, opline->op2);
			if (IS_CONST == IS_CV && UNEXPECTED(Z_ISUNDEF_P(dim))) {
				dim = ZVAL_UNDEFINED_OP2();
			} else if (IS_CONST == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
				dim++;
			}

			value = RT_CONSTANT((opline+1), (opline+1)->op1);
			if (IS_CONST == IS_CV && UNEXPECTED(Z_ISUNDEF_P(value))) {
				value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
			} else if (IS_CONST & (IS_CV|IS_VAR)) {
				ZVAL_DEREF(value);
			}

			zend_assign_to_object_dim(obj, dim, value OPLINE_CC EXECUTE_DATA_CC);


			if (UNEXPECTED(GC_DELREF(obj) == 0)) {
				zend_objects_store_del(obj);
			}
		} else if (EXPECTED(Z_TYPE_P(object_ptr) == IS_STRING)) {
			if (IS_CONST == IS_UNUSED) {
				zend_use_new_element_for_string();


				UNDEF_RESULT();
			} else {
				dim = RT_CONSTANT(opline, opline->op2);
				value = RT_CONSTANT((opline+1), (opline+1)->op1);
				zend_assign_to_string_offset(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC);


			}
		} else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
			if (Z_ISREF_P(orig_object_ptr)
			 && ZEND_REF_HAS_TYPE_SOURCES(Z_REF_P(orig_object_ptr))
			 && !zend_verify_ref_array_assignable(Z_REF_P(orig_object_ptr))) {
				dim = RT_CONSTANT(opline, opline->op2);


				UNDEF_RESULT();
			} else {
				HashTable *ht = zend_new_array(8);
				uint8_t old_type = Z_TYPE_P(object_ptr);

				ZVAL_ARR(object_ptr, ht);
				if (UNEXPECTED(old_type == IS_FALSE)) {
					GC_ADDREF(ht);
					zend_false_to_array_deprecated();
					if (UNEXPECTED(GC_DELREF(ht) == 0)) {
						zend_array_destroy(ht);
						goto assign_dim_error;
					}
				}
				goto try_assign_dim_array;
			}
		} else {
			zend_use_scalar_as_array();
			dim = RT_CONSTANT(opline, opline->op2);
assign_dim_error:


			if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
				ZVAL_NULL(EX_VAR(opline->result.var));
			}
		}
	}
	if (IS_CONST != IS_UNUSED) {


	}


	/* assign_dim has two opcodes! */
	ZEND_VM_NEXT_OPCODE_EX(1, 2);
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_ASSIGN_DIM_SPEC_CV_CONST_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *object_ptr, *orig_object_ptr;
	zval *value;
	zval *variable_ptr;
	zval *dim;
	zend_refcounted *garbage = NULL;

	SAVE_OPLINE();
	orig_object_ptr = object_ptr = EX_VAR(opline->op1.var);

	if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
try_assign_dim_array:
		SEPARATE_ARRAY(object_ptr);
		if (IS_CONST == IS_UNUSED) {
			value = _get_zval_ptr_tmp((opline+1)->op1.var EXECUTE_DATA_CC);
			if (IS_TMP_VAR == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
				HashTable *ht = Z_ARRVAL_P(object_ptr);
				if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE)) {
					GC_ADDREF(ht);
				}
				value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
				if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE) && !GC_DELREF(ht)) {
					zend_array_destroy(ht);
					goto assign_dim_error;
				}
			}
			if (IS_TMP_VAR == IS_CV || IS_TMP_VAR == IS_VAR) {
				ZVAL_DEREF(value);
			}
			value = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), value);
			if (UNEXPECTED(value == NULL)) {
				zend_cannot_add_element();
				goto assign_dim_error;
			} else if (IS_TMP_VAR == IS_CV) {
				if (Z_REFCOUNTED_P(value)) {
					Z_ADDREF_P(value);
				}
			} else if (IS_TMP_VAR == IS_VAR) {
				zval *free_op_data = EX_VAR((opline+1)->op1.var);
				if (Z_ISREF_P(free_op_data)) {
					if (Z_REFCOUNTED_P(value)) {
						Z_ADDREF_P(value);
					}
					zval_ptr_dtor_nogc(free_op_data);
				}
			} else if (IS_TMP_VAR == IS_CONST) {
				if (UNEXPECTED(Z_REFCOUNTED_P(value))) {
					Z_ADDREF_P(value);
				}
			}
		} else {
			dim = RT_CONSTANT(opline, opline->op2);
			if (IS_CONST == IS_CONST) {
				variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
			} else {
				variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
			}
			if (UNEXPECTED(variable_ptr == NULL)) {
				goto assign_dim_error;
			}
			value = _get_zval_ptr_tmp((opline+1)->op1.var EXECUTE_DATA_CC);
			value = zend_assign_to_variable_ex(variable_ptr, value, IS_TMP_VAR, EX_USES_STRICT_TYPES(), &garbage);
		}
		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
			ZVAL_COPY(EX_VAR(opline->result.var), value);
		}
		if (garbage) {
			GC_DTOR_NO_REF(garbage);
		}
	} else {
		if (EXPECTED(Z_ISREF_P(object_ptr))) {
			object_ptr = Z_REFVAL_P(object_ptr);
			if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
				goto try_assign_dim_array;
			}
		}
		if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) {
			zend_object *obj = Z_OBJ_P(object_ptr);

			GC_ADDREF(obj);
			dim = RT_CONSTANT(opline, opline->op2);
			if (IS_CONST == IS_CV && UNEXPECTED(Z_ISUNDEF_P(dim))) {
				dim = ZVAL_UNDEFINED_OP2();
			} else if (IS_CONST == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
				dim++;
			}

			value = _get_zval_ptr_tmp((opline+1)->op1.var EXECUTE_DATA_CC);
			if (IS_TMP_VAR == IS_CV && UNEXPECTED(Z_ISUNDEF_P(value))) {
				value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
			} else if (IS_TMP_VAR & (IS_CV|IS_VAR)) {
				ZVAL_DEREF(value);
			}

			zend_assign_to_object_dim(obj, dim, value OPLINE_CC EXECUTE_DATA_CC);

			zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
			if (UNEXPECTED(GC_DELREF(obj) == 0)) {
				zend_objects_store_del(obj);
			}
		} else if (EXPECTED(Z_TYPE_P(object_ptr) == IS_STRING)) {
			if (IS_CONST == IS_UNUSED) {
				zend_use_new_element_for_string();
				zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
				UNDEF_RESULT();
			} else {
				dim = RT_CONSTANT(opline, opline->op2);
				value = _get_zval_ptr_tmp((opline+1)->op1.var EXECUTE_DATA_CC);
				zend_assign_to_string_offset(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC);
				zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
			}
		} else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
			if (Z_ISREF_P(orig_object_ptr)
			 && ZEND_REF_HAS_TYPE_SOURCES(Z_REF_P(orig_object_ptr))
			 && !zend_verify_ref_array_assignable(Z_REF_P(orig_object_ptr))) {
				dim = RT_CONSTANT(opline, opline->op2);
				zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
				UNDEF_RESULT();
			} else {
				HashTable *ht = zend_new_array(8);
				uint8_t old_type = Z_TYPE_P(object_ptr);

				ZVAL_ARR(object_ptr, ht);
				if (UNEXPECTED(old_type == IS_FALSE)) {
					GC_ADDREF(ht);
					zend_false_to_array_deprecated();
					if (UNEXPECTED(GC_DELREF(ht) == 0)) {
						zend_array_destroy(ht);
						goto assign_dim_error;
					}
				}
				goto try_assign_dim_array;
			}
		} else {
			zend_use_scalar_as_array();
			dim = RT_CONSTANT(opline, opline->op2);
assign_dim_error:
			zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
			if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
				ZVAL_NULL(EX_VAR(opline->result.var));
			}
		}
	}
	if (IS_CONST != IS_UNUSED) {


	}


	/* assign_dim has two opcodes! */
	ZEND_VM_NEXT_OPCODE_EX(1, 2);
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_ASSIGN_DIM_SPEC_CV_CONST_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *object_ptr, *orig_object_ptr;
	zval *value;
	zval *variable_ptr;
	zval *dim;
	zend_refcounted *garbage = NULL;

	SAVE_OPLINE();
	orig_object_ptr = object_ptr = EX_VAR(opline->op1.var);

	if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
try_assign_dim_array:
		SEPARATE_ARRAY(object_ptr);
		if (IS_CONST == IS_UNUSED) {
			value = _get_zval_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);
			if (IS_VAR == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
				HashTable *ht = Z_ARRVAL_P(object_ptr);
				if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE)) {
					GC_ADDREF(ht);
				}
				value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
				if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE) && !GC_DELREF(ht)) {
					zend_array_destroy(ht);
					goto assign_dim_error;
				}
			}
			if (IS_VAR == IS_CV || IS_VAR == IS_VAR) {
				ZVAL_DEREF(value);
			}
			value = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), value);
			if (UNEXPECTED(value == NULL)) {
				zend_cannot_add_element();
				goto assign_dim_error;
			} else if (IS_VAR == IS_CV) {
				if (Z_REFCOUNTED_P(value)) {
					Z_ADDREF_P(value);
				}
			} else if (IS_VAR == IS_VAR) {
				zval *free_op_data = EX_VAR((opline+1)->op1.var);
				if (Z_ISREF_P(free_op_data)) {
					if (Z_REFCOUNTED_P(value)) {
						Z_ADDREF_P(value);
					}
					zval_ptr_dtor_nogc(free_op_data);
				}
			} else if (IS_VAR == IS_CONST) {
				if (UNEXPECTED(Z_REFCOUNTED_P(value))) {
					Z_ADDREF_P(value);
				}
			}
		} else {
			dim = RT_CONSTANT(opline, opline->op2);
			if (IS_CONST == IS_CONST) {
				variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
			} else {
				variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
			}
			if (UNEXPECTED(variable_ptr == NULL)) {
				goto assign_dim_error;
			}
			value = _get_zval_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);
			value = zend_assign_to_variable_ex(variable_ptr, value, IS_VAR, EX_USES_STRICT_TYPES(), &garbage);
		}
		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
			ZVAL_COPY(EX_VAR(opline->result.var), value);
		}
		if (garbage) {
			GC_DTOR_NO_REF(garbage);
		}
	} else {
		if (EXPECTED(Z_ISREF_P(object_ptr))) {
			object_ptr = Z_REFVAL_P(object_ptr);
			if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
				goto try_assign_dim_array;
			}
		}
		if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) {
			zend_object *obj = Z_OBJ_P(object_ptr);

			GC_ADDREF(obj);
			dim = RT_CONSTANT(opline, opline->op2);
			if (IS_CONST == IS_CV && UNEXPECTED(Z_ISUNDEF_P(dim))) {
				dim = ZVAL_UNDEFINED_OP2();
			} else if (IS_CONST == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
				dim++;
			}

			value = _get_zval_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);
			if (IS_VAR == IS_CV && UNEXPECTED(Z_ISUNDEF_P(value))) {
				value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
			} else if (IS_VAR & (IS_CV|IS_VAR)) {
				ZVAL_DEREF(value);
			}

			zend_assign_to_object_dim(obj, dim, value OPLINE_CC EXECUTE_DATA_CC);

			zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
			if (UNEXPECTED(GC_DELREF(obj) == 0)) {
				zend_objects_store_del(obj);
			}
		} else if (EXPECTED(Z_TYPE_P(object_ptr) == IS_STRING)) {
			if (IS_CONST == IS_UNUSED) {
				zend_use_new_element_for_string();
				zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
				UNDEF_RESULT();
			} else {
				dim = RT_CONSTANT(opline, opline->op2);
				value = _get_zval_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);
				zend_assign_to_string_offset(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC);
				zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
			}
		} else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
			if (Z_ISREF_P(orig_object_ptr)
			 && ZEND_REF_HAS_TYPE_SOURCES(Z_REF_P(orig_object_ptr))
			 && !zend_verify_ref_array_assignable(Z_REF_P(orig_object_ptr))) {
				dim = RT_CONSTANT(opline, opline->op2);
				zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
				UNDEF_RESULT();
			} else {
				HashTable *ht = zend_new_array(8);
				uint8_t old_type = Z_TYPE_P(object_ptr);

				ZVAL_ARR(object_ptr, ht);
				if (UNEXPECTED(old_type == IS_FALSE)) {
					GC_ADDREF(ht);
					zend_false_to_array_deprecated();
					if (UNEXPECTED(GC_DELREF(ht) == 0)) {
						zend_array_destroy(ht);
						goto assign_dim_error;
					}
				}
				goto try_assign_dim_array;
			}
		} else {
			zend_use_scalar_as_array();
			dim = RT_CONSTANT(opline, opline->op2);
assign_dim_error:
			zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
			if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
				ZVAL_NULL(EX_VAR(opline->result.var));
			}
		}
	}
	if (IS_CONST != IS_UNUSED) {


	}


	/* assign_dim has two opcodes! */
	ZEND_VM_NEXT_OPCODE_EX(1, 2);
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_ASSIGN_DIM_SPEC_CV_CONST_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *object_ptr, *orig_object_ptr;
	zval *value;
	zval *variable_ptr;
	zval *dim;
	zend_refcounted *garbage = NULL;

	SAVE_OPLINE();
	orig_object_ptr = object_ptr = EX_VAR(opline->op1.var);

	if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
try_assign_dim_array:
		SEPARATE_ARRAY(object_ptr);
		if (IS_CONST == IS_UNUSED) {
			value = EX_VAR((opline+1)->op1.var);
			if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
				HashTable *ht = Z_ARRVAL_P(object_ptr);
				if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE)) {
					GC_ADDREF(ht);
				}
				value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
				if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE) && !GC_DELREF(ht)) {
					zend_array_destroy(ht);
					goto assign_dim_error;
				}
			}
			if (IS_CV == IS_CV || IS_CV == IS_VAR) {
				ZVAL_DEREF(value);
			}
			value = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), value);
			if (UNEXPECTED(value == NULL)) {
				zend_cannot_add_element();
				goto assign_dim_error;
			} else if (IS_CV == IS_CV) {
				if (Z_REFCOUNTED_P(value)) {
					Z_ADDREF_P(value);
				}
			} else if (IS_CV == IS_VAR) {
				zval *free_op_data = EX_VAR((opline+1)->op1.var);
				if (Z_ISREF_P(free_op_data)) {
					if (Z_REFCOUNTED_P(value)) {
						Z_ADDREF_P(value);
					}
					zval_ptr_dtor_nogc(free_op_data);
				}
			} else if (IS_CV == IS_CONST) {
				if (UNEXPECTED(Z_REFCOUNTED_P(value))) {
					Z_ADDREF_P(value);
				}
			}
		} else {
			dim = RT_CONSTANT(opline, opline->op2);
			if (IS_CONST == IS_CONST) {
				variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
			} else {
				variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
			}
			if (UNEXPECTED(variable_ptr == NULL)) {
				goto assign_dim_error;
			}
			value = _get_zval_ptr_cv_BP_VAR_R((opline+1)->op1.var EXECUTE_DATA_CC);
			value = zend_assign_to_variable_ex(variable_ptr, value, IS_CV, EX_USES_STRICT_TYPES(), &garbage);
		}
		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
			ZVAL_COPY(EX_VAR(opline->result.var), value);
		}
		if (garbage) {
			GC_DTOR_NO_REF(garbage);
		}
	} else {
		if (EXPECTED(Z_ISREF_P(object_ptr))) {
			object_ptr = Z_REFVAL_P(object_ptr);
			if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
				goto try_assign_dim_array;
			}
		}
		if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) {
			zend_object *obj = Z_OBJ_P(object_ptr);

			GC_ADDREF(obj);
			dim = RT_CONSTANT(opline, opline->op2);
			if (IS_CONST == IS_CV && UNEXPECTED(Z_ISUNDEF_P(dim))) {
				dim = ZVAL_UNDEFINED_OP2();
			} else if (IS_CONST == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
				dim++;
			}

			value = EX_VAR((opline+1)->op1.var);
			if (IS_CV == IS_CV && UNEXPECTED(Z_ISUNDEF_P(value))) {
				value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
			} else if (IS_CV & (IS_CV|IS_VAR)) {
				ZVAL_DEREF(value);
			}

			zend_assign_to_object_dim(obj, dim, value OPLINE_CC EXECUTE_DATA_CC);


			if (UNEXPECTED(GC_DELREF(obj) == 0)) {
				zend_objects_store_del(obj);
			}
		} else if (EXPECTED(Z_TYPE_P(object_ptr) == IS_STRING)) {
			if (IS_CONST == IS_UNUSED) {
				zend_use_new_element_for_string();


				UNDEF_RESULT();
			} else {
				dim = RT_CONSTANT(opline, opline->op2);
				value = EX_VAR((opline+1)->op1.var);
				zend_assign_to_string_offset(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC);


			}
		} else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
			if (Z_ISREF_P(orig_object_ptr)
			 && ZEND_REF_HAS_TYPE_SOURCES(Z_REF_P(orig_object_ptr))
			 && !zend_verify_ref_array_assignable(Z_REF_P(orig_object_ptr))) {
				dim = RT_CONSTANT(opline, opline->op2);


				UNDEF_RESULT();
			} else {
				HashTable *ht = zend_new_array(8);
				uint8_t old_type = Z_TYPE_P(object_ptr);

				ZVAL_ARR(object_ptr, ht);
				if (UNEXPECTED(old_type == IS_FALSE)) {
					GC_ADDREF(ht);
					zend_false_to_array_deprecated();
					if (UNEXPECTED(GC_DELREF(ht) == 0)) {
						zend_array_destroy(ht);
						goto assign_dim_error;
					}
				}
				goto try_assign_dim_array;
			}
		} else {
			zend_use_scalar_as_array();
			dim = RT_CONSTANT(opline, opline->op2);
assign_dim_error:


			if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
				ZVAL_NULL(EX_VAR(opline->result.var));
			}
		}
	}
	if (IS_CONST != IS_UNUSED) {


	}


	/* assign_dim has two opcodes! */
	ZEND_VM_NEXT_OPCODE_EX(1, 2);
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_ASSIGN_SPEC_CV_CONST_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *value;
	zval *variable_ptr;

	SAVE_OPLINE();
	value = RT_CONSTANT(opline, opline->op2);
	variable_ptr = EX_VAR(opline->op1.var);

	if (0 || UNEXPECTED(0)) {
		zend_refcounted *garbage = NULL;

		value = zend_assign_to_variable_ex(variable_ptr, value, IS_CONST, EX_USES_STRICT_TYPES(), &garbage);
		if (UNEXPECTED(0)) {
			ZVAL_COPY(EX_VAR(opline->result.var), value);
		}
		if (garbage) {
			GC_DTOR_NO_REF(garbage);
		}
	} else {
		value = zend_assign_to_variable(variable_ptr, value, IS_CONST, EX_USES_STRICT_TYPES());
	}


	/* zend_assign_to_variable() always takes care of op2, never free it! */

	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_ASSIGN_SPEC_CV_CONST_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *value;
	zval *variable_ptr;

	SAVE_OPLINE();
	value = RT_CONSTANT(opline, opline->op2);
	variable_ptr = EX_VAR(opline->op1.var);

	if (0 || UNEXPECTED(1)) {
		zend_refcounted *garbage = NULL;

		value = zend_assign_to_variable_ex(variable_ptr, value, IS_CONST, EX_USES_STRICT_TYPES(), &garbage);
		if (UNEXPECTED(1)) {
			ZVAL_COPY(EX_VAR(opline->result.var), value);
		}
		if (garbage) {
			GC_DTOR_NO_REF(garbage);
		}
	} else {
		value = zend_assign_to_variable(variable_ptr, value, IS_CONST, EX_USES_STRICT_TYPES());
	}


	/* zend_assign_to_variable() always takes care of op2, never free it! */

	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_ASSIGN_OBJ_REF_SPEC_CV_CONST_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *property, *container, *value_ptr;

	SAVE_OPLINE();

	container = EX_VAR(opline->op1.var);
	property = RT_CONSTANT(opline, opline->op2);

	value_ptr = _get_zval_ptr_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);

	if (1) {
		if (IS_CV == IS_UNUSED) {
			if (IS_CONST == IS_CONST) {
				zend_assign_to_property_reference_this_const(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
			} else {
				zend_assign_to_property_reference_this_var(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
			}
		} else {
			if (IS_CONST == IS_CONST) {
				zend_assign_to_property_reference_var_const(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
			} else {
				zend_assign_to_property_reference_var_var(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
			}
		}
	} else {
		zend_assign_to_property_reference(container, IS_CV, property, IS_CONST, value_ptr OPLINE_CC EXECUTE_DATA_CC);
	}




	zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
	ZEND_VM_NEXT_OPCODE_EX(1, 2);
}

/* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CONST|VAR) */
static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_ASSIGN_OBJ_REF_SPEC_CV_CONST_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *property, *container, *value_ptr;

	SAVE_OPLINE();

	container = EX_VAR(opline->op1.var);
	property = RT_CONSTANT(opline, opline->op2);

	value_ptr = _get_zval_ptr_cv_BP_VAR_W((opline+1)->op1.var EXECUTE_DATA_CC);

	if (1) {
		if (IS_CV == IS_UNUSED) {
			if (IS_CONST == IS_CONST) {
				zend_assign_to_property_reference_this_const(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
			} else {
				zend_assign_to_property_reference_this_var(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
			}
		} else {
			if (IS_CONST == IS_CONST) {
				zend_assign_to_property_reference_var_const(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
			} else {
				zend_assign_to_property_reference_var_var(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
			}
		}
	} else {
		zend_assign_to_property_reference(container, IS_CV, property, IS_CONST, value_ptr OPLINE_CC EXECUTE_DATA_CC);
	}






	ZEND_VM_NEXT_OPCODE_EX(1, 2);
}

/* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CONST|VAR) */
static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_FAST_CONCAT_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;
	zend_string *op1_str, *op2_str, *str;


	op1 = EX_VAR(opline->op1.var);
	op2 = RT_CONSTANT(opline, opline->op2);
	if ((IS_CV == IS_CONST || EXPECTED(Z_TYPE_P(op1) == IS_STRING)) &&
	    (IS_CONST == IS_CONST || EXPECTED(Z_TYPE_P(op2) == IS_STRING))) {
		zend_string *op1_str = Z_STR_P(op1);
		zend_string *op2_str = Z_STR_P(op2);
		zend_string *str;
		uint32_t flags = ZSTR_GET_COPYABLE_CONCAT_PROPERTIES_BOTH(op1_str, op2_str);

		if (IS_CV != IS_CONST && UNEXPECTED(ZSTR_LEN(op1_str) == 0)) {
			if (IS_CONST == IS_CONST || IS_CONST == IS_CV) {
				ZVAL_STR_COPY(EX_VAR(opline->result.var), op2_str);
			} else {
				ZVAL_STR(EX_VAR(opline->result.var), op2_str);
			}
			if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
				zend_string_release_ex(op1_str, 0);
			}
		} else if (IS_CONST != IS_CONST && UNEXPECTED(ZSTR_LEN(op2_str) == 0)) {
			if (IS_CV == IS_CONST || IS_CV == IS_CV) {
				ZVAL_STR_COPY(EX_VAR(opline->result.var), op1_str);
			} else {
				ZVAL_STR(EX_VAR(opline->result.var), op1_str);
			}
			if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
				zend_string_release_ex(op2_str, 0);
			}
		} else if (IS_CV != IS_CONST && IS_CV != IS_CV &&
		    !ZSTR_IS_INTERNED(op1_str) && GC_REFCOUNT(op1_str) == 1) {
			size_t len = ZSTR_LEN(op1_str);

			str = zend_string_extend(op1_str, len + ZSTR_LEN(op2_str), 0);
			memcpy(ZSTR_VAL(str) + len, ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
			GC_ADD_FLAGS(str, flags);
			ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
			if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
				zend_string_release_ex(op2_str, 0);
			}
		} else {
			str = zend_string_alloc(ZSTR_LEN(op1_str) + ZSTR_LEN(op2_str), 0);
			memcpy(ZSTR_VAL(str), ZSTR_VAL(op1_str), ZSTR_LEN(op1_str));
			memcpy(ZSTR_VAL(str) + ZSTR_LEN(op1_str), ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
			GC_ADD_FLAGS(str, flags);
			ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
			if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
				zend_string_release_ex(op1_str, 0);
			}
			if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
				zend_string_release_ex(op2_str, 0);
			}
		}
		ZEND_VM_NEXT_OPCODE();
	}

	SAVE_OPLINE();
	if (IS_CV == IS_CONST) {
		op1_str = Z_STR_P(op1);
	} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
		op1_str = zend_string_copy(Z_STR_P(op1));
	} else {
		if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
			ZVAL_UNDEFINED_OP1();
		}
		op1_str = zval_get_string_func(op1);
	}
	if (IS_CONST == IS_CONST) {
		op2_str = Z_STR_P(op2);
	} else if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
		op2_str = zend_string_copy(Z_STR_P(op2));
	} else {
		if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(op2) == IS_UNDEF)) {
			ZVAL_UNDEFINED_OP2();
		}
		op2_str = zval_get_string_func(op2);
	}
	do {
		if (IS_CV != IS_CONST) {
			if (UNEXPECTED(ZSTR_LEN(op1_str) == 0)) {
				if (IS_CONST == IS_CONST) {
					if (UNEXPECTED(Z_REFCOUNTED_P(op2))) {
						GC_ADDREF(op2_str);
					}
				}
				ZVAL_STR(EX_VAR(opline->result.var), op2_str);
				zend_string_release_ex(op1_str, 0);
				break;
			}
		}
		if (IS_CONST != IS_CONST) {
			if (UNEXPECTED(ZSTR_LEN(op2_str) == 0)) {
				if (IS_CV == IS_CONST) {
					if (UNEXPECTED(Z_REFCOUNTED_P(op1))) {
						GC_ADDREF(op1_str);
					}
				}
				ZVAL_STR(EX_VAR(opline->result.var), op1_str);
				zend_string_release_ex(op2_str, 0);
				break;
			}
		}
		str = zend_string_alloc(ZSTR_LEN(op1_str) + ZSTR_LEN(op2_str), 0);
		memcpy(ZSTR_VAL(str), ZSTR_VAL(op1_str), ZSTR_LEN(op1_str));
		memcpy(ZSTR_VAL(str) + ZSTR_LEN(op1_str), ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);

		ZSTR_COPY_CONCAT_PROPERTIES_BOTH(str, op1_str, op2_str);
		ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
		if (IS_CV != IS_CONST) {
			zend_string_release_ex(op1_str, 0);
		}
		if (IS_CONST != IS_CONST) {
			zend_string_release_ex(op2_str, 0);
		}
	} while (0);




	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_INIT_METHOD_CALL_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *function_name;
	zval *object;
	zend_function *fbc;
	zend_class_entry *called_scope;
	zend_object *obj;
	zend_execute_data *call;
	uint32_t call_info;

	SAVE_OPLINE();

	object = EX_VAR(opline->op1.var);

	if (IS_CONST != IS_CONST) {
		function_name = RT_CONSTANT(opline, opline->op2);
	}

	if (IS_CONST != IS_CONST &&
	    UNEXPECTED(Z_TYPE_P(function_name) != IS_STRING)) {
		do {
			if ((IS_CONST & (IS_VAR|IS_CV)) && Z_ISREF_P(function_name)) {
				function_name = Z_REFVAL_P(function_name);
				if (EXPECTED(Z_TYPE_P(function_name) == IS_STRING)) {
					break;
				}
			} else if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) {
				ZVAL_UNDEFINED_OP2();
				if (UNEXPECTED(EG(exception) != NULL)) {


					HANDLE_EXCEPTION();
				}
			}
			zend_throw_error(NULL, "Method name must be a string");




			HANDLE_EXCEPTION();
		} while (0);
	}

	if (IS_CV == IS_UNUSED) {
		obj = Z_OBJ_P(object);
	} else {
		do {
			if (IS_CV != IS_CONST && EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
				obj = Z_OBJ_P(object);
			} else {
				if ((IS_CV & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(object))) {
					zend_reference *ref = Z_REF_P(object);

					object = &ref->val;
					if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
						obj = Z_OBJ_P(object);
						if (IS_CV & IS_VAR) {
							if (UNEXPECTED(GC_DELREF(ref) == 0)) {
								efree_size(ref, sizeof(zend_reference));
							} else {
								Z_ADDREF_P(object);
							}
						}
						break;
					}
				}
				if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
					object = ZVAL_UNDEFINED_OP1();
					if (UNEXPECTED(EG(exception) != NULL)) {
						if (IS_CONST != IS_CONST) {


						}
						HANDLE_EXCEPTION();
					}
				}
				if (IS_CONST == IS_CONST) {
					function_name = RT_CONSTANT(opline, opline->op2);
				}
				zend_invalid_method_call(object, function_name);




				HANDLE_EXCEPTION();
			}
		} while (0);
	}

	called_scope = obj->ce;

	if (IS_CONST == IS_CONST &&
	    EXPECTED(CACHED_PTR(opline->result.num) == called_scope)) {
		fbc = CACHED_PTR(opline->result.num + sizeof(void*));
	} else {
		zend_object *orig_obj = obj;

		if (IS_CONST == IS_CONST) {
			function_name = RT_CONSTANT(opline, opline->op2);
		}

		/* First, locate the function. */
		fbc = obj->handlers->get_method(&obj, Z_STR_P(function_name), ((IS_CONST == IS_CONST) ? (RT_CONSTANT(opline, opline->op2) + 1) : NULL));
		if (UNEXPECTED(fbc == NULL)) {
			if (EXPECTED(!EG(exception))) {
				zend_undefined_method(orig_obj->ce, Z_STR_P(function_name));
			}


			if ((IS_CV & (IS_VAR|IS_TMP_VAR)) && GC_DELREF(orig_obj) == 0) {
				zend_objects_store_del(orig_obj);
			}
			HANDLE_EXCEPTION();
		}
		if (IS_CONST == IS_CONST &&
		    EXPECTED(!(fbc->common.fn_flags & (ZEND_ACC_CALL_VIA_TRAMPOLINE|ZEND_ACC_NEVER_CACHE))) &&
		    EXPECTED(obj == orig_obj)) {
			CACHE_POLYMORPHIC_PTR(opline->result.num, called_scope, fbc);
		}
		if ((IS_CV & (IS_VAR|IS_TMP_VAR)) && UNEXPECTED(obj != orig_obj)) {
			GC_ADDREF(obj); /* For $this pointer */
			if (GC_DELREF(orig_obj) == 0) {
				zend_objects_store_del(orig_obj);
			}
		}
		if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!RUN_TIME_CACHE(&fbc->op_array))) {
			init_func_run_time_cache(&fbc->op_array);
		}
	}

	if (IS_CONST != IS_CONST) {


	}

	call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_HAS_THIS;
	if (UNEXPECTED((fbc->common.fn_flags & ZEND_ACC_STATIC) != 0)) {
		if ((IS_CV & (IS_VAR|IS_TMP_VAR)) && GC_DELREF(obj) == 0) {
			zend_objects_store_del(obj);
			if (UNEXPECTED(EG(exception))) {
				HANDLE_EXCEPTION();
			}
		}
		/* call static method */
		obj = (zend_object*)called_scope;
		call_info = ZEND_CALL_NESTED_FUNCTION;
	} else if (IS_CV & (IS_VAR|IS_TMP_VAR|IS_CV)) {
		if (IS_CV == IS_CV) {
			GC_ADDREF(obj); /* For $this pointer */
		}
		/* CV may be changed indirectly (e.g. when it's a reference) */
		call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_HAS_THIS | ZEND_CALL_RELEASE_THIS;
	}

	call = zend_vm_stack_push_call_frame(call_info,
		fbc, opline->extended_value, obj);
	call->prev_execute_data = EX(call);
	EX(call) = call;

	ZEND_VM_NEXT_OPCODE();
}

static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_SEND_VAR_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *varptr, *arg;

	if (IS_CONST == IS_CONST) {
		SAVE_OPLINE();
		zend_string *arg_name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
		uint32_t arg_num;
		arg = zend_handle_named_arg(&EX(call), arg_name, &arg_num, CACHE_ADDR(opline->result.num));
		if (UNEXPECTED(!arg)) {


			HANDLE_EXCEPTION();
		}
	} else {
		arg = ZEND_CALL_VAR(EX(call), opline->result.var);
	}

	varptr = EX_VAR(opline->op1.var);
	if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(varptr) == IS_UNDEF)) {
		SAVE_OPLINE();
		ZVAL_UNDEFINED_OP1();
		ZVAL_NULL(arg);
		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
	}

	if (IS_CV == IS_CV) {
		ZVAL_COPY_DEREF(arg, varptr);
	} else /* if (IS_CV == IS_VAR) */ {
		if (UNEXPECTED(Z_ISREF_P(varptr))) {
			zend_refcounted *ref = Z_COUNTED_P(varptr);

			varptr = Z_REFVAL_P(varptr);
			ZVAL_COPY_VALUE(arg, varptr);
			if (UNEXPECTED(GC_DELREF(ref) == 0)) {
				efree_size(ref, sizeof(zend_reference));
			} else if (Z_OPT_REFCOUNTED_P(arg)) {
				Z_ADDREF_P(arg);
			}
		} else {
			ZVAL_COPY_VALUE(arg, varptr);
		}
	}

	ZEND_VM_NEXT_OPCODE();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_SEND_REF_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *varptr, *arg;

	SAVE_OPLINE();
	if (IS_CONST == IS_CONST) {
		zend_string *arg_name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
		uint32_t arg_num;
		arg = zend_handle_named_arg(&EX(call), arg_name, &arg_num, CACHE_ADDR(opline->result.num));
		if (UNEXPECTED(!arg)) {


			HANDLE_EXCEPTION();
		}
	} else {
		arg = ZEND_CALL_VAR(EX(call), opline->result.var);
	}

	varptr = _get_zval_ptr_cv_BP_VAR_W(opline->op1.var EXECUTE_DATA_CC);
	if (Z_ISREF_P(varptr)) {
		Z_ADDREF_P(varptr);
	} else {
		ZVAL_MAKE_REF_EX(varptr, 2);
	}
	ZVAL_REF(arg, Z_REF_P(varptr));


	ZEND_VM_NEXT_OPCODE();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_SEND_VAR_EX_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *varptr, *arg;
	uint32_t arg_num;

	if (IS_CONST == IS_CONST) {
		SAVE_OPLINE();
		zend_string *arg_name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
		arg = zend_handle_named_arg(&EX(call), arg_name, &arg_num, CACHE_ADDR(opline->result.num));
		if (UNEXPECTED(!arg)) {


			HANDLE_EXCEPTION();
		}
	} else {
		arg = ZEND_CALL_VAR(EX(call), opline->result.var);
		arg_num = opline->op2.num;
	}

	if (EXPECTED(arg_num <= MAX_ARG_FLAG_NUM)) {
		if (QUICK_ARG_SHOULD_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
			goto send_var_by_ref;
		}
	} else if (ARG_SHOULD_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
send_var_by_ref:
		varptr = _get_zval_ptr_cv_BP_VAR_W(opline->op1.var EXECUTE_DATA_CC);
		if (Z_ISREF_P(varptr)) {
			Z_ADDREF_P(varptr);
		} else {
			ZVAL_MAKE_REF_EX(varptr, 2);
		}
		ZVAL_REF(arg, Z_REF_P(varptr));


		ZEND_VM_NEXT_OPCODE();
	}

	varptr = EX_VAR(opline->op1.var);
	if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(varptr) == IS_UNDEF)) {
		SAVE_OPLINE();
		ZVAL_UNDEFINED_OP1();
		ZVAL_NULL(arg);
		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
	}

	if (IS_CV == IS_CV) {
		ZVAL_COPY_DEREF(arg, varptr);
	} else /* if (IS_CV == IS_VAR) */ {
		if (UNEXPECTED(Z_ISREF_P(varptr))) {
			zend_refcounted *ref = Z_COUNTED_P(varptr);

			varptr = Z_REFVAL_P(varptr);
			ZVAL_COPY_VALUE(arg, varptr);
			if (UNEXPECTED(GC_DELREF(ref) == 0)) {
				efree_size(ref, sizeof(zend_reference));
			} else if (Z_OPT_REFCOUNTED_P(arg)) {
				Z_ADDREF_P(arg);
			}
		} else {
			ZVAL_COPY_VALUE(arg, varptr);
		}
	}

	ZEND_VM_NEXT_OPCODE();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *expr_ptr, new_expr;

	SAVE_OPLINE();
	if ((IS_CV == IS_VAR || IS_CV == IS_CV) &&
	    UNEXPECTED(opline->extended_value & ZEND_ARRAY_ELEMENT_REF)) {
		expr_ptr = _get_zval_ptr_cv_BP_VAR_W(opline->op1.var EXECUTE_DATA_CC);
		if (Z_ISREF_P(expr_ptr)) {
			Z_ADDREF_P(expr_ptr);
		} else {
			ZVAL_MAKE_REF_EX(expr_ptr, 2);
		}


	} else {
		expr_ptr = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
		if (IS_CV == IS_TMP_VAR) {
			/* pass */
		} else if (IS_CV == IS_CONST) {
			Z_TRY_ADDREF_P(expr_ptr);
		} else if (IS_CV == IS_CV) {
			ZVAL_DEREF(expr_ptr);
			Z_TRY_ADDREF_P(expr_ptr);
		} else /* if (IS_CV == IS_VAR) */ {
			if (UNEXPECTED(Z_ISREF_P(expr_ptr))) {
				zend_refcounted *ref = Z_COUNTED_P(expr_ptr);

				expr_ptr = Z_REFVAL_P(expr_ptr);
				if (UNEXPECTED(GC_DELREF(ref) == 0)) {
					ZVAL_COPY_VALUE(&new_expr, expr_ptr);
					expr_ptr = &new_expr;
					efree_size(ref, sizeof(zend_reference));
				} else if (Z_OPT_REFCOUNTED_P(expr_ptr)) {
					Z_ADDREF_P(expr_ptr);
				}
			}
		}
	}

	if (IS_CONST != IS_UNUSED) {
		zval *offset = RT_CONSTANT(opline, opline->op2);
		zend_string *str;
		zend_ulong hval;

add_again:
		if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) {
			str = Z_STR_P(offset);
			if (IS_CONST != IS_CONST) {
				if (ZEND_HANDLE_NUMERIC(str, hval)) {
					goto num_index;
				}
			}
str_index:
			zend_hash_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), str, expr_ptr);
		} else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
			hval = Z_LVAL_P(offset);
num_index:
			zend_hash_index_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), hval, expr_ptr);
		} else if ((IS_CONST & (IS_VAR|IS_CV)) && EXPECTED(Z_TYPE_P(offset) == IS_REFERENCE)) {
			offset = Z_REFVAL_P(offset);
			goto add_again;
		} else if (UNEXPECTED(Z_TYPE_P(offset) == IS_NULL)) {
			zval tmp;
			if (IS_CV == IS_CV || IS_CV == IS_VAR) {
				ZVAL_COPY(&tmp, expr_ptr);
			}
			zend_error(E_DEPRECATED, "Using null as an array offset is deprecated, use an empty string instead");
			if (IS_CV == IS_CV || IS_CV == IS_VAR) {
				/* A userland error handler can do funky things to the expression, so reset it */
				zval_ptr_dtor(expr_ptr);
				ZVAL_COPY_VALUE(expr_ptr, &tmp);
			}
			if (UNEXPECTED(EG(exception))) {
				zval_ptr_dtor_nogc(expr_ptr);
				HANDLE_EXCEPTION();
			}
			str = ZSTR_EMPTY_ALLOC();
			goto str_index;
		} else if (Z_TYPE_P(offset) == IS_DOUBLE) {
			hval = zend_dval_to_lval_safe(Z_DVAL_P(offset));
			goto num_index;
		} else if (Z_TYPE_P(offset) == IS_FALSE) {
			hval = 0;
			goto num_index;
		} else if (Z_TYPE_P(offset) == IS_TRUE) {
			hval = 1;
			goto num_index;
		} else if (Z_TYPE_P(offset) == IS_RESOURCE) {
			zend_use_resource_as_offset(offset);
			hval = Z_RES_HANDLE_P(offset);
			goto num_index;
		} else if (IS_CONST == IS_CV && Z_TYPE_P(offset) == IS_UNDEF) {
			ZVAL_UNDEFINED_OP2();
			str = ZSTR_EMPTY_ALLOC();
			goto str_index;
		} else {
			zend_illegal_array_offset_access(offset);
			zval_ptr_dtor_nogc(expr_ptr);
		}


	} else {
		if (!zend_hash_next_index_insert(Z_ARRVAL_P(EX_VAR(opline->result.var)), expr_ptr)) {
			zend_cannot_add_element();
			zval_ptr_dtor_nogc(expr_ptr);
		}
	}
	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_INIT_ARRAY_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	zval *array;
	uint32_t size;
	USE_OPLINE

	SAVE_OPLINE();
	array = EX_VAR(opline->result.var);
	if (IS_CV != IS_UNUSED) {
		size = opline->extended_value >> ZEND_ARRAY_SIZE_SHIFT;
		ZVAL_ARR(array, zend_new_array(size));
		/* Explicitly initialize array as not-packed if flag is set */
		if (opline->extended_value & ZEND_ARRAY_NOT_PACKED) {
			zend_hash_real_init_mixed(Z_ARRVAL_P(array));
		}
		ZEND_VM_TAIL_CALL(ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
	} else {
		ZVAL_ARR(array, zend_new_array(0));
		ZEND_VM_NEXT_OPCODE();
	}
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_UNSET_DIM_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *container;
	zval *offset;
	zend_ulong hval;
	zend_string *key;

	SAVE_OPLINE();
	container = EX_VAR(opline->op1.var);
	offset = RT_CONSTANT(opline, opline->op2);

	do {
		if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
			HashTable *ht;

unset_dim_array:
			SEPARATE_ARRAY(container);
			ht = Z_ARRVAL_P(container);
offset_again:
			if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) {
				key = Z_STR_P(offset);
				if (IS_CONST != IS_CONST) {
					if (ZEND_HANDLE_NUMERIC(key, hval)) {
						goto num_index_dim;
					}
				}
str_index_dim:
				ZEND_ASSERT(ht != &EG(symbol_table));
				zend_hash_del(ht, key);
			} else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
				hval = Z_LVAL_P(offset);
num_index_dim:
				zend_hash_index_del(ht, hval);
			} else if ((IS_CONST & (IS_VAR|IS_CV)) && EXPECTED(Z_TYPE_P(offset) == IS_REFERENCE)) {
				offset = Z_REFVAL_P(offset);
				goto offset_again;
			} else if (Z_TYPE_P(offset) == IS_DOUBLE) {
				/* The array may be destroyed while throwing a warning in case the float is not representable as an int.
				 * Temporarily increase the refcount to detect this situation. */
				GC_TRY_ADDREF(ht);
				hval = zend_dval_to_lval_safe(Z_DVAL_P(offset));
				if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE) && !GC_DELREF(ht)) {
					zend_array_destroy(ht);
					break;
				}
				if (EG(exception)) {
					break;
				}
				goto num_index_dim;
			} else if (Z_TYPE_P(offset) == IS_NULL) {
				key = ZSTR_EMPTY_ALLOC();
				goto str_index_dim;
			} else if (Z_TYPE_P(offset) == IS_FALSE) {
				hval = 0;
				goto num_index_dim;
			} else if (Z_TYPE_P(offset) == IS_TRUE) {
				hval = 1;
				goto num_index_dim;
			} else if (Z_TYPE_P(offset) == IS_RESOURCE) {
				zend_use_resource_as_offset(offset);
				hval = Z_RES_HANDLE_P(offset);
				goto num_index_dim;
			} else if (IS_CONST == IS_CV && Z_TYPE_P(offset) == IS_UNDEF) {
				ZVAL_UNDEFINED_OP2();
				key = ZSTR_EMPTY_ALLOC();
				goto str_index_dim;
			} else {
				zend_illegal_array_offset_unset(offset);
			}
			break;
		} else if (Z_ISREF_P(container)) {
			container = Z_REFVAL_P(container);
			if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
				goto unset_dim_array;
			}
		}
		if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
			container = ZVAL_UNDEFINED_OP1();
		}
		if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(offset) == IS_UNDEF)) {
			offset = ZVAL_UNDEFINED_OP2();
		}
		if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
			if (IS_CONST == IS_CONST && Z_EXTRA_P(offset) == ZEND_EXTRA_VALUE) {
				offset++;
			}
			Z_OBJ_HT_P(container)->unset_dimension(Z_OBJ_P(container), offset);
		} else if (UNEXPECTED(Z_TYPE_P(container) == IS_STRING)) {
			zend_throw_error(NULL, "Cannot unset string offsets");
		} else if (UNEXPECTED(Z_TYPE_P(container) > IS_FALSE)) {
			zend_throw_error(NULL, "Cannot unset offset in a non-array variable");
		} else if (UNEXPECTED(Z_TYPE_P(container) == IS_FALSE)) {
			zend_false_to_array_deprecated();
		}
	} while (0);




	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_UNSET_OBJ_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *container;
	zval *offset;
	zend_string *name, *tmp_name;

	SAVE_OPLINE();
	container = EX_VAR(opline->op1.var);
	offset = RT_CONSTANT(opline, opline->op2);

	do {
		if (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT)) {
			if (Z_ISREF_P(container)) {
				container = Z_REFVAL_P(container);
				if (Z_TYPE_P(container) != IS_OBJECT) {
					if (IS_CV == IS_CV
					 && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
						ZVAL_UNDEFINED_OP1();
					}
					break;
				}
			} else {
				break;
			}
		}
		if (IS_CONST == IS_CONST) {
			name = Z_STR_P(offset);
		} else {
			name = zval_try_get_tmp_string(offset, &tmp_name);
			if (UNEXPECTED(!name)) {
				break;
			}
		}
		Z_OBJ_HT_P(container)->unset_property(Z_OBJ_P(container), name, ((IS_CONST == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL));
		if (IS_CONST != IS_CONST) {
			zend_tmp_string_release(tmp_name);
		}
	} while (0);




	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *container;
	bool result;
	zend_ulong hval;
	zval *offset;

	SAVE_OPLINE();
	container = EX_VAR(opline->op1.var);
	offset = RT_CONSTANT(opline, opline->op2);

	if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
		HashTable *ht;
		zval *value;
		zend_string *str;

isset_dim_obj_array:
		ht = Z_ARRVAL_P(container);
isset_again:
		if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) {
			str = Z_STR_P(offset);
			if (IS_CONST != IS_CONST) {
				if (ZEND_HANDLE_NUMERIC(str, hval)) {
					goto num_index_prop;
				}
			}
			value = zend_hash_find_ex(ht, str, IS_CONST == IS_CONST);
		} else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
			hval = Z_LVAL_P(offset);
num_index_prop:
			value = zend_hash_index_find(ht, hval);
		} else if ((IS_CONST & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(offset))) {
			offset = Z_REFVAL_P(offset);
			goto isset_again;
		} else {
			value = zend_find_array_dim_slow(ht, offset EXECUTE_DATA_CC);
			if (UNEXPECTED(EG(exception))) {
				result = 0;
				goto isset_dim_obj_exit;
			}
		}

		if (!(opline->extended_value & ZEND_ISEMPTY)) {
			/* > IS_NULL means not IS_UNDEF and not IS_NULL */
			result = value != NULL && Z_TYPE_P(value) > IS_NULL &&
			    (!Z_ISREF_P(value) || Z_TYPE_P(Z_REFVAL_P(value)) != IS_NULL);

			if (IS_CV & (IS_CONST|IS_CV)) {
				/* avoid exception check */


				ZEND_VM_SMART_BRANCH(result, 0);
			}
		} else {
			result = (value == NULL || !i_zend_is_true(value));
		}
		goto isset_dim_obj_exit;
	} else if ((IS_CV & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(container))) {
		container = Z_REFVAL_P(container);
		if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
			goto isset_dim_obj_array;
		}
	}

	if (IS_CONST == IS_CONST && Z_EXTRA_P(offset) == ZEND_EXTRA_VALUE) {
		offset++;
	}
	if (!(opline->extended_value & ZEND_ISEMPTY)) {
		result = zend_isset_dim_slow(container, offset EXECUTE_DATA_CC);
	} else {
		result = zend_isempty_dim_slow(container, offset EXECUTE_DATA_CC);
	}

isset_dim_obj_exit:




	ZEND_VM_SMART_BRANCH(result, 1);
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *container;
	int result;
	zval *offset;
	zend_string *name, *tmp_name;

	SAVE_OPLINE();
	container = _get_zval_ptr_cv_BP_VAR_IS(opline->op1.var EXECUTE_DATA_CC);
	offset = RT_CONSTANT(opline, opline->op2);

	if (IS_CV == IS_CONST ||
	    (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
		if ((IS_CV & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
			container = Z_REFVAL_P(container);
			if (UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT)) {
				result = (opline->extended_value & ZEND_ISEMPTY);
				goto isset_object_finish;
			}
		} else {
			result = (opline->extended_value & ZEND_ISEMPTY);
			goto isset_object_finish;
		}
	}

	if (IS_CONST == IS_CONST) {
		name = Z_STR_P(offset);
	} else {
		name = zval_try_get_tmp_string(offset, &tmp_name);
		if (UNEXPECTED(!name)) {
			result = 0;
			goto isset_object_finish;
		}
	}

	result =
		(opline->extended_value & ZEND_ISEMPTY) ^
		Z_OBJ_HT_P(container)->has_property(Z_OBJ_P(container), name, (opline->extended_value & ZEND_ISEMPTY), ((IS_CONST == IS_CONST) ? CACHE_ADDR(opline->extended_value & ~ZEND_ISEMPTY) : NULL));

	if (IS_CONST != IS_CONST) {
		zend_tmp_string_release(tmp_name);
	}

isset_object_finish:




	ZEND_VM_SMART_BRANCH(result, 1);
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_ARRAY_KEY_EXISTS_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE

	zval *key, *subject;
	HashTable *ht;
	bool result;

	SAVE_OPLINE();

	key = EX_VAR(opline->op1.var);
	subject = RT_CONSTANT(opline, opline->op2);

	if (EXPECTED(Z_TYPE_P(subject) == IS_ARRAY)) {
array_key_exists_array:
		ht = Z_ARRVAL_P(subject);
		result = zend_array_key_exists_fast(ht, key OPLINE_CC EXECUTE_DATA_CC);
	} else {
		if ((IS_CONST & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(subject))) {
			subject = Z_REFVAL_P(subject);
			if (EXPECTED(Z_TYPE_P(subject) == IS_ARRAY)) {
				goto array_key_exists_array;
			}
		}
		zend_array_key_exists_error(subject, key OPLINE_CC EXECUTE_DATA_CC);
		result = 0;
	}




	ZEND_VM_SMART_BRANCH(result, 1);
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_INSTANCEOF_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *expr;
	bool result;

	SAVE_OPLINE();
	expr = EX_VAR(opline->op1.var);

try_instanceof:
	if (Z_TYPE_P(expr) == IS_OBJECT) {
		zend_class_entry *ce;

		if (IS_CONST == IS_CONST) {
			ce = CACHED_PTR(opline->extended_value);
			if (UNEXPECTED(ce == NULL)) {
				ce = zend_lookup_class_ex(Z_STR_P(RT_CONSTANT(opline, opline->op2)), Z_STR_P(RT_CONSTANT(opline, opline->op2) + 1), ZEND_FETCH_CLASS_NO_AUTOLOAD);
				if (EXPECTED(ce)) {
					CACHE_PTR(opline->extended_value, ce);
				}
			}
		} else if (IS_CONST == IS_UNUSED) {
			ce = zend_fetch_class(NULL, opline->op2.num);
			if (UNEXPECTED(ce == NULL)) {


				ZVAL_UNDEF(EX_VAR(opline->result.var));
				HANDLE_EXCEPTION();
			}
		} else {
			ce = Z_CE_P(EX_VAR(opline->op2.var));
		}
		result = ce && instanceof_function(Z_OBJCE_P(expr), ce);
	} else if ((IS_CV & (IS_VAR|IS_CV)) && Z_TYPE_P(expr) == IS_REFERENCE) {
		expr = Z_REFVAL_P(expr);
		goto try_instanceof;
	} else {
		if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(expr) == IS_UNDEF)) {
			ZVAL_UNDEFINED_OP1();
		}
		result = 0;
	}


	ZEND_VM_SMART_BRANCH(result, 1);
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_YIELD_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE

	zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C);

	SAVE_OPLINE();
	if (UNEXPECTED(generator->flags & ZEND_GENERATOR_FORCED_CLOSE)) {
		ZEND_VM_TAIL_CALL(zend_yield_in_closed_generator_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
	}

	/* Destroy the previously yielded value */
	zval_ptr_dtor(&generator->value);

	/* Destroy the previously yielded key */
	zval_ptr_dtor(&generator->key);

	/* Set the new yielded value */
	if (IS_CV != IS_UNUSED) {
		if (UNEXPECTED(EX(func)->op_array.fn_flags & ZEND_ACC_RETURN_REFERENCE)) {
			/* Constants and temporary variables aren't yieldable by reference,
			 * but we still allow them with a notice. */
			if (IS_CV & (IS_CONST|IS_TMP_VAR)) {
				zval *value;

				zend_error(E_NOTICE, "Only variable references should be yielded by reference");

				value = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
				ZVAL_COPY_VALUE(&generator->value, value);
				if (IS_CV == IS_CONST) {
					if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
						Z_ADDREF(generator->value);
					}
				}
			} else {
				zval *value_ptr = _get_zval_ptr_cv_BP_VAR_W(opline->op1.var EXECUTE_DATA_CC);

				/* If a function call result is yielded and the function did
				 * not return by reference we throw a notice. */
				do {
					if (IS_CV == IS_VAR) {
						ZEND_ASSERT(value_ptr != &EG(uninitialized_zval));
						if (opline->extended_value == ZEND_RETURNS_FUNCTION
						 && !Z_ISREF_P(value_ptr)) {
							zend_error(E_NOTICE, "Only variable references should be yielded by reference");
							ZVAL_COPY(&generator->value, value_ptr);
							break;
						}
					}
					if (Z_ISREF_P(value_ptr)) {
						Z_ADDREF_P(value_ptr);
					} else {
						ZVAL_MAKE_REF_EX(value_ptr, 2);
					}
					ZVAL_REF(&generator->value, Z_REF_P(value_ptr));
				} while (0);


			}
		} else {
			zval *value = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);

			/* Consts, temporary variables and references need copying */
			if (IS_CV == IS_CONST) {
				ZVAL_COPY_VALUE(&generator->value, value);
				if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
					Z_ADDREF(generator->value);
				}
			} else if (IS_CV == IS_TMP_VAR) {
				ZVAL_COPY_VALUE(&generator->value, value);
			} else if ((IS_CV & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) {
				ZVAL_COPY(&generator->value, Z_REFVAL_P(value));


			} else {
				ZVAL_COPY_VALUE(&generator->value, value);
				if (IS_CV == IS_CV) {
					if (Z_OPT_REFCOUNTED_P(value)) Z_ADDREF_P(value);
				}
			}
		}
	} else {
		/* If no value was specified yield null */
		ZVAL_NULL(&generator->value);
	}

	/* Set the new yielded key */
	if (IS_CONST != IS_UNUSED) {
		zval *key = RT_CONSTANT(opline, opline->op2);
		if ((IS_CONST & (IS_CV|IS_VAR)) && UNEXPECTED(Z_TYPE_P(key) == IS_REFERENCE)) {
			key = Z_REFVAL_P(key);
		}
		ZVAL_COPY(&generator->key, key);


		if (Z_TYPE(generator->key) == IS_LONG
		    && Z_LVAL(generator->key) > generator->largest_used_integer_key
		) {
			generator->largest_used_integer_key = Z_LVAL(generator->key);
		}
	} else {
		/* If no key was specified we use auto-increment keys */
		generator->largest_used_integer_key++;
		ZVAL_LONG(&generator->key, generator->largest_used_integer_key);
	}

	if (RETURN_VALUE_USED(opline)) {
		/* If the return value of yield is used set the send
		 * target and initialize it to NULL */
		generator->send_target = EX_VAR(opline->result.var);
		ZVAL_NULL(generator->send_target);
	} else {
		generator->send_target = NULL;
	}

	/* The GOTO VM uses a local opline variable. We need to set the opline
	 * variable in execute_data so we don't resume at an old position. */
	SAVE_OPLINE();

	ZEND_VM_RETURN();
}

static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_BIND_GLOBAL_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zend_string *varname;
	zval *value;
	zval *variable_ptr;
	uintptr_t idx;
	zend_reference *ref;

	ZEND_VM_REPEATABLE_OPCODE

	varname = Z_STR_P(RT_CONSTANT(opline, opline->op2));

	/* We store "hash slot index" + 1 (NULL is a mark of uninitialized cache slot) */
	idx = (uintptr_t)CACHED_PTR(opline->extended_value) - 1;
	if (EXPECTED(idx < EG(symbol_table).nNumUsed * sizeof(Bucket))) {
		Bucket *p = (Bucket*)((char*)EG(symbol_table).arData + idx);

		if (EXPECTED(p->key == varname) ||
		    (EXPECTED(p->h == ZSTR_H(varname)) &&
		     EXPECTED(p->key != NULL) &&
		     EXPECTED(zend_string_equal_content(p->key, varname)))) {

			value = (zval*)p; /* value = &p->val; */
			goto check_indirect;
		}
	}

	value = zend_hash_find_known_hash(&EG(symbol_table), varname);
	if (UNEXPECTED(value == NULL)) {
		value = zend_hash_add_new(&EG(symbol_table), varname, &EG(uninitialized_zval));
		idx = (char*)value - (char*)EG(symbol_table).arData;
		/* Store "hash slot index" + 1 (NULL is a mark of uninitialized cache slot) */
		CACHE_PTR(opline->extended_value, (void*)(idx + 1));
	} else {
		idx = (char*)value - (char*)EG(symbol_table).arData;
		/* Store "hash slot index" + 1 (NULL is a mark of uninitialized cache slot) */
		CACHE_PTR(opline->extended_value, (void*)(idx + 1));
check_indirect:
		/* GLOBAL variable may be an INDIRECT pointer to CV */
		if (UNEXPECTED(Z_TYPE_P(value) == IS_INDIRECT)) {
			value = Z_INDIRECT_P(value);
			if (UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
				ZVAL_NULL(value);
			}
		}
	}

	if (UNEXPECTED(!Z_ISREF_P(value))) {
		ZVAL_MAKE_REF_EX(value, 2);
		ref = Z_REF_P(value);
	} else {
		ref = Z_REF_P(value);
		GC_ADDREF(ref);
	}

	variable_ptr = EX_VAR(opline->op1.var);

	if (UNEXPECTED(Z_REFCOUNTED_P(variable_ptr))) {
		zend_refcounted *garbage = Z_COUNTED_P(variable_ptr);

		ZVAL_REF(variable_ptr, ref);
		SAVE_OPLINE();
		if (GC_DELREF(garbage) == 0) {
			rc_dtor_func(garbage);
			if (UNEXPECTED(EG(exception))) {
				ZVAL_NULL(variable_ptr);
				HANDLE_EXCEPTION();
			}
		} else {
			gc_check_possible_root(garbage);
		}
	} else {
		ZVAL_REF(variable_ptr, ref);
	}

	ZEND_VM_REPEAT_OPCODE(ZEND_BIND_GLOBAL);
	ZEND_VM_NEXT_OPCODE();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_IN_ARRAY_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1;
	HashTable *ht = Z_ARRVAL_P(RT_CONSTANT(opline, opline->op2));
	zval *result;

	op1 = EX_VAR(opline->op1.var);
	if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
		result = zend_hash_find_ex(ht, Z_STR_P(op1), IS_CV == IS_CONST);
		if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
			zval_ptr_dtor_str(op1);
		}
		ZEND_VM_SMART_BRANCH(result, 0);
	}

	if (opline->extended_value) {
		if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
			result = zend_hash_index_find(ht, Z_LVAL_P(op1));
			ZEND_VM_SMART_BRANCH(result, 0);
		}
		SAVE_OPLINE();
		if ((IS_CV & (IS_VAR|IS_CV)) && Z_TYPE_P(op1) == IS_REFERENCE) {
			op1 = Z_REFVAL_P(op1);
			if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
				result = zend_hash_find(ht, Z_STR_P(op1));


				ZEND_VM_SMART_BRANCH(result, 0);
			} else if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
				result = zend_hash_index_find(ht, Z_LVAL_P(op1));


				ZEND_VM_SMART_BRANCH(result, 0);
			}
		} else if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
			ZVAL_UNDEFINED_OP1();
		}
	} else if (Z_TYPE_P(op1) <= IS_FALSE) {
		if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
			SAVE_OPLINE();
			ZVAL_UNDEFINED_OP1();
			if (UNEXPECTED(EG(exception) != NULL)) {
				HANDLE_EXCEPTION();
			}
		}
		result = zend_hash_find_known_hash(ht, ZSTR_EMPTY_ALLOC());
		ZEND_VM_SMART_BRANCH(result, 0);
	} else {
		zend_string *key;
		zval key_tmp;

		if ((IS_CV & (IS_VAR|IS_CV)) && Z_TYPE_P(op1) == IS_REFERENCE) {
			op1 = Z_REFVAL_P(op1);
			if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
				result = zend_hash_find(ht, Z_STR_P(op1));


				ZEND_VM_SMART_BRANCH(result, 0);
			}
		}

		SAVE_OPLINE();
		ZEND_HASH_MAP_FOREACH_STR_KEY(ht, key) {
			ZVAL_STR(&key_tmp, key);
			if (zend_compare(op1, &key_tmp) == 0) {


				ZEND_VM_SMART_BRANCH(1, 1);
			}
		} ZEND_HASH_FOREACH_END();
	}


	ZEND_VM_SMART_BRANCH(0, 1);
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_IS_IDENTICAL_NOTHROW_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	/* This is declared below the specializations for MAY_BE_LONG/MAY_BE_DOUBLE so those will be used instead if possible. */
	/* This optimizes $x === SOME_CONST_EXPR and $x === $y for non-refs and non-undef, which can't throw. */
	/* (Infinite recursion when comparing arrays is an uncatchable fatal error) */
	USE_OPLINE
	zval *op1, *op2;
	bool result;

	op1 = EX_VAR(opline->op1.var);
	op2 = RT_CONSTANT(opline, opline->op2);
	result = fast_is_identical_function(op1, op2);
	/* Free is a no-op for const/cv */
	ZEND_VM_SMART_BRANCH(result, 0);
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_IS_NOT_IDENTICAL_NOTHROW_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;
	bool result;

	op1 = EX_VAR(opline->op1.var);
	op2 = RT_CONSTANT(opline, opline->op2);
	result = fast_is_identical_function(op1, op2);
	/* Free is a no-op for const/cv */
	ZEND_VM_SMART_BRANCH(!result, 0);
}

static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_FETCH_DIM_R_INDEX_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *container, *dim, *value;
	zend_long offset;
	HashTable *ht;

	container = EX_VAR(opline->op1.var);
	dim = RT_CONSTANT(opline, opline->op2);
	if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
fetch_dim_r_index_array:
		if (EXPECTED(Z_TYPE_P(dim) == IS_LONG)) {
			offset = Z_LVAL_P(dim);
		} else {
			SAVE_OPLINE();
			zend_fetch_dimension_address_read_R(container, dim, IS_CONST OPLINE_CC EXECUTE_DATA_CC);


			ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
		}
		ht = Z_ARRVAL_P(container);
		ZEND_HASH_INDEX_FIND(ht, offset, value, fetch_dim_r_index_undef);
		ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
		if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
			SAVE_OPLINE();


			ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
		} else {
			ZEND_VM_NEXT_OPCODE();
		}
	} else if (IS_CV != IS_CONST && EXPECTED(Z_TYPE_P(container) == IS_REFERENCE)) {
		container = Z_REFVAL_P(container);
		if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
			goto fetch_dim_r_index_array;
		} else {
			goto fetch_dim_r_index_slow;
		}
	} else {
fetch_dim_r_index_slow:
		SAVE_OPLINE();
		if (IS_CONST == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
			dim++;
		}
		zend_fetch_dimension_address_read_R_slow(container, dim OPLINE_CC EXECUTE_DATA_CC);


		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
	}

fetch_dim_r_index_undef:
	ZVAL_NULL(EX_VAR(opline->result.var));
	SAVE_OPLINE();
	zend_undefined_offset(offset);


	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_FETCH_DIM_R_INDEX_SPEC_CV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *container, *dim, *value;
	zend_long offset;
	HashTable *ht;

	container = EX_VAR(opline->op1.var);
	dim = EX_VAR(opline->op2.var);
	if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
fetch_dim_r_index_array:
		if (EXPECTED(Z_TYPE_P(dim) == IS_LONG)) {
			offset = Z_LVAL_P(dim);
		} else {
			SAVE_OPLINE();
			zend_fetch_dimension_address_read_R(container, dim, (IS_TMP_VAR|IS_VAR|IS_CV) OPLINE_CC EXECUTE_DATA_CC);


			ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
		}
		ht = Z_ARRVAL_P(container);
		ZEND_HASH_INDEX_FIND(ht, offset, value, fetch_dim_r_index_undef);
		ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
		if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
			SAVE_OPLINE();


			ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
		} else {
			ZEND_VM_NEXT_OPCODE();
		}
	} else if (IS_CV != IS_CONST && EXPECTED(Z_TYPE_P(container) == IS_REFERENCE)) {
		container = Z_REFVAL_P(container);
		if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
			goto fetch_dim_r_index_array;
		} else {
			goto fetch_dim_r_index_slow;
		}
	} else {
fetch_dim_r_index_slow:
		SAVE_OPLINE();
		if ((IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
			dim++;
		}
		zend_fetch_dimension_address_read_R_slow(container, dim OPLINE_CC EXECUTE_DATA_CC);


		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
	}

fetch_dim_r_index_undef:
	ZVAL_NULL(EX_VAR(opline->result.var));
	SAVE_OPLINE();
	zend_undefined_offset(offset);


	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_DIV_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;

	SAVE_OPLINE();
	op1 = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
	op2 = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
	div_function(EX_VAR(opline->result.var), op1, op2);


	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_POW_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;

	SAVE_OPLINE();
	op1 = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
	op2 = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
	pow_function(EX_VAR(opline->result.var), op1, op2);


	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_CONCAT_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;

	op1 = EX_VAR(opline->op1.var);
	op2 = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);

	if ((IS_CV == IS_CONST || EXPECTED(Z_TYPE_P(op1) == IS_STRING)) &&
	    ((IS_TMP_VAR|IS_VAR) == IS_CONST || EXPECTED(Z_TYPE_P(op2) == IS_STRING))) {
		zend_string *op1_str = Z_STR_P(op1);
		zend_string *op2_str = Z_STR_P(op2);
		zend_string *str;
		uint32_t flags = ZSTR_GET_COPYABLE_CONCAT_PROPERTIES_BOTH(op1_str, op2_str);

		if (IS_CV != IS_CONST && UNEXPECTED(ZSTR_LEN(op1_str) == 0)) {
			if ((IS_TMP_VAR|IS_VAR) == IS_CONST || (IS_TMP_VAR|IS_VAR) == IS_CV) {
				ZVAL_STR_COPY(EX_VAR(opline->result.var), op2_str);
			} else {
				ZVAL_STR(EX_VAR(opline->result.var), op2_str);
			}
			if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
				zend_string_release_ex(op1_str, 0);
			}
		} else if ((IS_TMP_VAR|IS_VAR) != IS_CONST && UNEXPECTED(ZSTR_LEN(op2_str) == 0)) {
			if (IS_CV == IS_CONST || IS_CV == IS_CV) {
				ZVAL_STR_COPY(EX_VAR(opline->result.var), op1_str);
			} else {
				ZVAL_STR(EX_VAR(opline->result.var), op1_str);
			}
			if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
				zend_string_release_ex(op2_str, 0);
			}
		} else if (IS_CV != IS_CONST && IS_CV != IS_CV &&
		    !ZSTR_IS_INTERNED(op1_str) && GC_REFCOUNT(op1_str) == 1) {
			size_t len = ZSTR_LEN(op1_str);

			if (UNEXPECTED(len > ZSTR_MAX_LEN - ZSTR_LEN(op2_str))) {
				zend_error_noreturn(E_ERROR, "Integer overflow in memory allocation");
			}
			str = zend_string_extend(op1_str, len + ZSTR_LEN(op2_str), 0);
			memcpy(ZSTR_VAL(str) + len, ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
			GC_ADD_FLAGS(str, flags);
			ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
			if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
				zend_string_release_ex(op2_str, 0);
			}
		} else {
			str = zend_string_alloc(ZSTR_LEN(op1_str) + ZSTR_LEN(op2_str), 0);
			memcpy(ZSTR_VAL(str), ZSTR_VAL(op1_str), ZSTR_LEN(op1_str));
			memcpy(ZSTR_VAL(str) + ZSTR_LEN(op1_str), ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
			GC_ADD_FLAGS(str, flags);
			ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
			if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
				zend_string_release_ex(op1_str, 0);
			}
			if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
				zend_string_release_ex(op2_str, 0);
			}
		}
		ZEND_VM_NEXT_OPCODE();
	} else {
		SAVE_OPLINE();

		if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
			op1 = ZVAL_UNDEFINED_OP1();
		}
		if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(op2) == IS_UNDEF)) {
			op2 = ZVAL_UNDEFINED_OP2();
		}
		concat_function(EX_VAR(opline->result.var), op1, op2);


		zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
	}
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_IS_EQUAL_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;
	double d1, d2;

	op1 = EX_VAR(opline->op1.var);
	op2 = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
	if (1 && IS_CV == IS_CONST && (IS_TMP_VAR|IS_VAR) == IS_CONST) {
		/* pass */
	} else if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
		if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
			if (EXPECTED(Z_LVAL_P(op1) == Z_LVAL_P(op2))) {
is_equal_true:
				ZEND_VM_SMART_BRANCH_TRUE_NONE();
			} else {
is_equal_false:
				ZEND_VM_SMART_BRANCH_FALSE_NONE();
			}
		} else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
			d1 = (double)Z_LVAL_P(op1);
			d2 = Z_DVAL_P(op2);
			goto is_equal_double;
		}
	} else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) {
		if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
			d1 = Z_DVAL_P(op1);
			d2 = Z_DVAL_P(op2);
is_equal_double:
			if (d1 == d2) {
				goto is_equal_true;
			} else {
				goto is_equal_false;
			}
		} else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
			d1 = Z_DVAL_P(op1);
			d2 = (double)Z_LVAL_P(op2);
			goto is_equal_double;
		}
	} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
		if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
			bool result = zend_fast_equal_strings(Z_STR_P(op1), Z_STR_P(op2));
			if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
				zval_ptr_dtor_str(op1);
			}
			if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
				zval_ptr_dtor_str(op2);
			}
			if (result) {
				goto is_equal_true;
			} else {
				goto is_equal_false;
			}
		}
	}
	ZEND_VM_DISPATCH_TO_HELPER(zend_is_equal_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_EX op1, op2));
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_IS_EQUAL_SPEC_CV_TMPVAR_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;
	double d1, d2;

	op1 = EX_VAR(opline->op1.var);
	op2 = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
	if (1 && IS_CV == IS_CONST && (IS_TMP_VAR|IS_VAR) == IS_CONST) {
		/* pass */
	} else if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
		if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
			if (EXPECTED(Z_LVAL_P(op1) == Z_LVAL_P(op2))) {
is_equal_true:
				ZEND_VM_SMART_BRANCH_TRUE_JMPZ();
			} else {
is_equal_false:
				ZEND_VM_SMART_BRANCH_FALSE_JMPZ();
			}
		} else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
			d1 = (double)Z_LVAL_P(op1);
			d2 = Z_DVAL_P(op2);
			goto is_equal_double;
		}
	} else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) {
		if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
			d1 = Z_DVAL_P(op1);
			d2 = Z_DVAL_P(op2);
is_equal_double:
			if (d1 == d2) {
				goto is_equal_true;
			} else {
				goto is_equal_false;
			}
		} else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
			d1 = Z_DVAL_P(op1);
			d2 = (double)Z_LVAL_P(op2);
			goto is_equal_double;
		}
	} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
		if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
			bool result = zend_fast_equal_strings(Z_STR_P(op1), Z_STR_P(op2));
			if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
				zval_ptr_dtor_str(op1);
			}
			if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
				zval_ptr_dtor_str(op2);
			}
			if (result) {
				goto is_equal_true;
			} else {
				goto is_equal_false;
			}
		}
	}
	ZEND_VM_DISPATCH_TO_HELPER(zend_is_equal_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_EX op1, op2));
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_IS_EQUAL_SPEC_CV_TMPVAR_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;
	double d1, d2;

	op1 = EX_VAR(opline->op1.var);
	op2 = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
	if (1 && IS_CV == IS_CONST && (IS_TMP_VAR|IS_VAR) == IS_CONST) {
		/* pass */
	} else if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
		if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
			if (EXPECTED(Z_LVAL_P(op1) == Z_LVAL_P(op2))) {
is_equal_true:
				ZEND_VM_SMART_BRANCH_TRUE_JMPNZ();
			} else {
is_equal_false:
				ZEND_VM_SMART_BRANCH_FALSE_JMPNZ();
			}
		} else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
			d1 = (double)Z_LVAL_P(op1);
			d2 = Z_DVAL_P(op2);
			goto is_equal_double;
		}
	} else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) {
		if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
			d1 = Z_DVAL_P(op1);
			d2 = Z_DVAL_P(op2);
is_equal_double:
			if (d1 == d2) {
				goto is_equal_true;
			} else {
				goto is_equal_false;
			}
		} else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
			d1 = Z_DVAL_P(op1);
			d2 = (double)Z_LVAL_P(op2);
			goto is_equal_double;
		}
	} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
		if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
			bool result = zend_fast_equal_strings(Z_STR_P(op1), Z_STR_P(op2));
			if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
				zval_ptr_dtor_str(op1);
			}
			if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
				zval_ptr_dtor_str(op2);
			}
			if (result) {
				goto is_equal_true;
			} else {
				goto is_equal_false;
			}
		}
	}
	ZEND_VM_DISPATCH_TO_HELPER(zend_is_equal_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_EX op1, op2));
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_IS_NOT_EQUAL_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;
	double d1, d2;

	op1 = EX_VAR(opline->op1.var);
	op2 = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
	if (1 && IS_CV == IS_CONST && (IS_TMP_VAR|IS_VAR) == IS_CONST) {
		/* pass */
	} else if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
		if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
			if (EXPECTED(Z_LVAL_P(op1) != Z_LVAL_P(op2))) {
is_not_equal_true:
				ZEND_VM_SMART_BRANCH_TRUE_NONE();
			} else {
is_not_equal_false:
				ZEND_VM_SMART_BRANCH_FALSE_NONE();
			}
		} else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
			d1 = (double)Z_LVAL_P(op1);
			d2 = Z_DVAL_P(op2);
			goto is_not_equal_double;
		}
	} else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) {
		if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
			d1 = Z_DVAL_P(op1);
			d2 = Z_DVAL_P(op2);
is_not_equal_double:
			if (d1 != d2) {
				goto is_not_equal_true;
			} else {
				goto is_not_equal_false;
			}
		} else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
			d1 = Z_DVAL_P(op1);
			d2 = (double)Z_LVAL_P(op2);
			goto is_not_equal_double;
		}
	} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
		if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
			bool result = zend_fast_equal_strings(Z_STR_P(op1), Z_STR_P(op2));
			if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
				zval_ptr_dtor_str(op1);
			}
			if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
				zval_ptr_dtor_str(op2);
			}
			if (!result) {
				goto is_not_equal_true;
			} else {
				goto is_not_equal_false;
			}
		}
	}
	ZEND_VM_DISPATCH_TO_HELPER(zend_is_not_equal_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_EX op1, op2));
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_IS_NOT_EQUAL_SPEC_CV_TMPVAR_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;
	double d1, d2;

	op1 = EX_VAR(opline->op1.var);
	op2 = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
	if (1 && IS_CV == IS_CONST && (IS_TMP_VAR|IS_VAR) == IS_CONST) {
		/* pass */
	} else if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
		if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
			if (EXPECTED(Z_LVAL_P(op1) != Z_LVAL_P(op2))) {
is_not_equal_true:
				ZEND_VM_SMART_BRANCH_TRUE_JMPZ();
			} else {
is_not_equal_false:
				ZEND_VM_SMART_BRANCH_FALSE_JMPZ();
			}
		} else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
			d1 = (double)Z_LVAL_P(op1);
			d2 = Z_DVAL_P(op2);
			goto is_not_equal_double;
		}
	} else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) {
		if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
			d1 = Z_DVAL_P(op1);
			d2 = Z_DVAL_P(op2);
is_not_equal_double:
			if (d1 != d2) {
				goto is_not_equal_true;
			} else {
				goto is_not_equal_false;
			}
		} else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
			d1 = Z_DVAL_P(op1);
			d2 = (double)Z_LVAL_P(op2);
			goto is_not_equal_double;
		}
	} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
		if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
			bool result = zend_fast_equal_strings(Z_STR_P(op1), Z_STR_P(op2));
			if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
				zval_ptr_dtor_str(op1);
			}
			if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
				zval_ptr_dtor_str(op2);
			}
			if (!result) {
				goto is_not_equal_true;
			} else {
				goto is_not_equal_false;
			}
		}
	}
	ZEND_VM_DISPATCH_TO_HELPER(zend_is_not_equal_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_EX op1, op2));
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_IS_NOT_EQUAL_SPEC_CV_TMPVAR_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;
	double d1, d2;

	op1 = EX_VAR(opline->op1.var);
	op2 = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
	if (1 && IS_CV == IS_CONST && (IS_TMP_VAR|IS_VAR) == IS_CONST) {
		/* pass */
	} else if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
		if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
			if (EXPECTED(Z_LVAL_P(op1) != Z_LVAL_P(op2))) {
is_not_equal_true:
				ZEND_VM_SMART_BRANCH_TRUE_JMPNZ();
			} else {
is_not_equal_false:
				ZEND_VM_SMART_BRANCH_FALSE_JMPNZ();
			}
		} else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
			d1 = (double)Z_LVAL_P(op1);
			d2 = Z_DVAL_P(op2);
			goto is_not_equal_double;
		}
	} else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) {
		if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
			d1 = Z_DVAL_P(op1);
			d2 = Z_DVAL_P(op2);
is_not_equal_double:
			if (d1 != d2) {
				goto is_not_equal_true;
			} else {
				goto is_not_equal_false;
			}
		} else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
			d1 = Z_DVAL_P(op1);
			d2 = (double)Z_LVAL_P(op2);
			goto is_not_equal_double;
		}
	} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
		if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
			bool result = zend_fast_equal_strings(Z_STR_P(op1), Z_STR_P(op2));
			if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
				zval_ptr_dtor_str(op1);
			}
			if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
				zval_ptr_dtor_str(op2);
			}
			if (!result) {
				goto is_not_equal_true;
			} else {
				goto is_not_equal_false;
			}
		}
	}
	ZEND_VM_DISPATCH_TO_HELPER(zend_is_not_equal_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_EX op1, op2));
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_SPACESHIP_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;

	SAVE_OPLINE();
	op1 = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
	op2 = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
	compare_function(EX_VAR(opline->result.var), op1, op2);


	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_BOOL_XOR_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;

	SAVE_OPLINE();
	op1 = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
	op2 = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
	boolean_xor_function(EX_VAR(opline->result.var), op1, op2);


	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_ASSIGN_OBJ_OP_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *object;
	zval *property;
	zval *value;
	zval *zptr;
	void *_cache_slot[3] = {0};
	void **cache_slot;
	zend_property_info *prop_info;
	zend_object *zobj;
	zend_string *name, *tmp_name;

	SAVE_OPLINE();
	object = EX_VAR(opline->op1.var);
	property = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);

	do {
		value = get_op_data_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1);

		if (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
			if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
				object = Z_REFVAL_P(object);
				goto assign_op_object;
			}
			if (IS_CV == IS_CV
			 && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
				ZVAL_UNDEFINED_OP1();
			}
			zend_throw_non_object_error(object, property OPLINE_CC EXECUTE_DATA_CC);
			break;
		}

assign_op_object:
		/* here we are sure we are dealing with an object */
		zobj = Z_OBJ_P(object);
		if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
			name = Z_STR_P(property);
		} else {
			name = zval_try_get_tmp_string(property, &tmp_name);
			if (UNEXPECTED(!name)) {
				UNDEF_RESULT();
				break;
			}
		}
		cache_slot = ((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR((opline+1)->extended_value) : _cache_slot;
		if (EXPECTED((zptr = zobj->handlers->get_property_ptr_ptr(zobj, name, BP_VAR_RW, cache_slot)) != NULL)) {
			if (UNEXPECTED(Z_ISERROR_P(zptr))) {
				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
					ZVAL_NULL(EX_VAR(opline->result.var));
				}
			} else {
				zend_reference *ref;

				do {
					if (UNEXPECTED(Z_ISREF_P(zptr))) {
						ref = Z_REF_P(zptr);
						zptr = Z_REFVAL_P(zptr);
						if (UNEXPECTED(ZEND_REF_HAS_TYPE_SOURCES(ref))) {
							zend_binary_assign_op_typed_ref(ref, value OPLINE_CC EXECUTE_DATA_CC);
							break;
						}
					}

					prop_info = (zend_property_info*)CACHED_PTR_EX(cache_slot + 2);
					if (prop_info && ZEND_TYPE_IS_SET(prop_info->type)) {
						/* special case for typed properties */
						zend_binary_assign_op_typed_prop(prop_info, zptr, value OPLINE_CC EXECUTE_DATA_CC);
					} else {
						zend_binary_op(zptr, zptr, value OPLINE_CC);
					}
				} while (0);

				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
					ZVAL_COPY(EX_VAR(opline->result.var), zptr);
				}
			}
		} else {
			zend_assign_op_overloaded_property(zobj, name, cache_slot, value OPLINE_CC EXECUTE_DATA_CC);
		}
		if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
			zend_tmp_string_release(tmp_name);
		}
	} while (0);

	FREE_OP((opline+1)->op1_type, (opline+1)->op1.var);
	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));


	/* assign_obj has two opcodes! */
	ZEND_VM_NEXT_OPCODE_EX(1, 2);
}

/* No specialization for op_types (CONST|TMP|VAR|CV, UNUSED|CONST|TMPVAR) */
static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_ASSIGN_DIM_OP_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *var_ptr;
	zval *value, *container, *dim;
	HashTable *ht;

	SAVE_OPLINE();
	container = EX_VAR(opline->op1.var);

	if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
assign_dim_op_array:
		SEPARATE_ARRAY(container);
		ht = Z_ARRVAL_P(container);
assign_dim_op_new_array:
		dim = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
		if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED) {
			var_ptr = zend_hash_next_index_insert(ht, &EG(uninitialized_zval));
			if (UNEXPECTED(!var_ptr)) {
				zend_cannot_add_element();
				goto assign_dim_op_ret_null;
			}
		} else {
			if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
				var_ptr = zend_fetch_dimension_address_inner_RW_CONST(ht, dim EXECUTE_DATA_CC);
			} else {
				var_ptr = zend_fetch_dimension_address_inner_RW(ht, dim EXECUTE_DATA_CC);
			}
			if (UNEXPECTED(!var_ptr)) {
				goto assign_dim_op_ret_null;
			}
		}

		value = get_op_data_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1);

		do {
			if ((IS_TMP_VAR|IS_VAR) != IS_UNUSED && UNEXPECTED(Z_ISREF_P(var_ptr))) {
				zend_reference *ref = Z_REF_P(var_ptr);
				var_ptr = Z_REFVAL_P(var_ptr);
				if (UNEXPECTED(ZEND_REF_HAS_TYPE_SOURCES(ref))) {
					zend_binary_assign_op_typed_ref(ref, value OPLINE_CC EXECUTE_DATA_CC);
					break;
				}
			}
			zend_binary_op(var_ptr, var_ptr, value OPLINE_CC);
		} while (0);

		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
			ZVAL_COPY(EX_VAR(opline->result.var), var_ptr);
		}
		FREE_OP((opline+1)->op1_type, (opline+1)->op1.var);
	} else {
		if (EXPECTED(Z_ISREF_P(container))) {
			container = Z_REFVAL_P(container);
			if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
				goto assign_dim_op_array;
			}
		}

		if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
			zend_object *obj = Z_OBJ_P(container);

			dim = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
			if ((IS_TMP_VAR|IS_VAR) == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
				dim++;
			}
			zend_binary_assign_op_obj_dim(obj, dim OPLINE_CC EXECUTE_DATA_CC);
		} else if (EXPECTED(Z_TYPE_P(container) <= IS_FALSE)) {
			uint8_t old_type;

			if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(container) == IS_UNDEF)) {
				ZVAL_UNDEFINED_OP1();
			}
			ht = zend_new_array(8);
			old_type = Z_TYPE_P(container);
			ZVAL_ARR(container, ht);
			if (UNEXPECTED(old_type == IS_FALSE)) {
				GC_ADDREF(ht);
				zend_false_to_array_deprecated();
				if (UNEXPECTED(GC_DELREF(ht) == 0)) {
					zend_array_destroy(ht);
					goto assign_dim_op_ret_null;
				}
			}
			goto assign_dim_op_new_array;
		} else {
			dim = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
			zend_binary_assign_op_dim_slow(container, dim OPLINE_CC EXECUTE_DATA_CC);
assign_dim_op_ret_null:
			FREE_OP((opline+1)->op1_type, (opline+1)->op1.var);
			if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
				ZVAL_NULL(EX_VAR(opline->result.var));
			}
		}
	}

	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));


	ZEND_VM_NEXT_OPCODE_EX(1, 2);
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_ASSIGN_OP_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *var_ptr;
	zval *value;

	SAVE_OPLINE();
	value = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
	var_ptr = _get_zval_ptr_cv_BP_VAR_RW(opline->op1.var EXECUTE_DATA_CC);

	do {
		if (UNEXPECTED(Z_TYPE_P(var_ptr) == IS_REFERENCE)) {
			zend_reference *ref = Z_REF_P(var_ptr);
			var_ptr = Z_REFVAL_P(var_ptr);
			if (UNEXPECTED(ZEND_REF_HAS_TYPE_SOURCES(ref))) {
				zend_binary_assign_op_typed_ref(ref, value OPLINE_CC EXECUTE_DATA_CC);
				break;
			}
		}
		zend_binary_op(var_ptr, var_ptr, value OPLINE_CC);
	} while (0);

	if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
		ZVAL_COPY(EX_VAR(opline->result.var), var_ptr);
	}

	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));


	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_PRE_INC_OBJ_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *object;
	zval *property;
	zval *zptr;
	void *_cache_slot[3] = {0};
	void **cache_slot;
	zend_property_info *prop_info;
	zend_object *zobj;
	zend_string *name, *tmp_name;

	SAVE_OPLINE();
	object = EX_VAR(opline->op1.var);
	property = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);

	do {
		if (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
			if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
				object = Z_REFVAL_P(object);
				goto pre_incdec_object;
			}
			if (IS_CV == IS_CV
			 && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
				ZVAL_UNDEFINED_OP1();
			}
			zend_throw_non_object_error(object, property OPLINE_CC EXECUTE_DATA_CC);
			break;
		}

pre_incdec_object:
		/* here we are sure we are dealing with an object */
		zobj = Z_OBJ_P(object);
		if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
			name = Z_STR_P(property);
		} else {
			name = zval_try_get_tmp_string(property, &tmp_name);
			if (UNEXPECTED(!name)) {
				UNDEF_RESULT();
				break;
			}
		}
		cache_slot = ((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(opline->extended_value) : _cache_slot;
		if (EXPECTED((zptr = zobj->handlers->get_property_ptr_ptr(zobj, name, BP_VAR_RW, cache_slot)) != NULL)) {
			if (UNEXPECTED(Z_ISERROR_P(zptr))) {
				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
					ZVAL_NULL(EX_VAR(opline->result.var));
				}
			} else {
				prop_info = (zend_property_info *) CACHED_PTR_EX(cache_slot + 2);
				zend_pre_incdec_property_zval(zptr,
					prop_info && ZEND_TYPE_IS_SET(prop_info->type) ? prop_info : NULL OPLINE_CC EXECUTE_DATA_CC);
			}
		} else {
			zend_pre_incdec_overloaded_property(zobj, name, cache_slot OPLINE_CC EXECUTE_DATA_CC);
		}
		if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
			zend_tmp_string_release(tmp_name);
		}
	} while (0);

	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));


	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_POST_INC_OBJ_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *object;
	zval *property;
	zval *zptr;
	void *_cache_slot[3] = {0};
	void **cache_slot;
	zend_property_info *prop_info;
	zend_object *zobj;
	zend_string *name, *tmp_name;

	SAVE_OPLINE();
	object = EX_VAR(opline->op1.var);
	property = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);

	do {
		if (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
			if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
				object = Z_REFVAL_P(object);
				goto post_incdec_object;
			}
			if (IS_CV == IS_CV
			 && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
				ZVAL_UNDEFINED_OP1();
			}
			zend_throw_non_object_error(object, property OPLINE_CC EXECUTE_DATA_CC);
			break;
		}

post_incdec_object:
		/* here we are sure we are dealing with an object */
		zobj = Z_OBJ_P(object);
		if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
			name = Z_STR_P(property);
		} else {
			name = zval_try_get_tmp_string(property, &tmp_name);
			if (UNEXPECTED(!name)) {
				ZVAL_UNDEF(EX_VAR(opline->result.var));
				break;
			}
		}
		cache_slot = ((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(opline->extended_value) : _cache_slot;
		if (EXPECTED((zptr = zobj->handlers->get_property_ptr_ptr(zobj, name, BP_VAR_RW, cache_slot)) != NULL)) {
			if (UNEXPECTED(Z_ISERROR_P(zptr))) {
				ZVAL_NULL(EX_VAR(opline->result.var));
			} else {
				prop_info = (zend_property_info*)CACHED_PTR_EX(cache_slot + 2);
				zend_post_incdec_property_zval(zptr,
					prop_info && ZEND_TYPE_IS_SET(prop_info->type) ? prop_info : NULL OPLINE_CC EXECUTE_DATA_CC);
			}
		} else {
			zend_post_incdec_overloaded_property(zobj, name, cache_slot OPLINE_CC EXECUTE_DATA_CC);
		}
		if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
			zend_tmp_string_release(tmp_name);
		}
	} while (0);

	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));


	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_FETCH_DIM_R_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *container, *dim, *value;

	SAVE_OPLINE();
	container = EX_VAR(opline->op1.var);
	dim = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
	if (IS_CV != IS_CONST) {
		if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
fetch_dim_r_array:
			value = zend_fetch_dimension_address_inner(Z_ARRVAL_P(container), dim, (IS_TMP_VAR|IS_VAR), BP_VAR_R EXECUTE_DATA_CC);
			ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
		} else if (EXPECTED(Z_TYPE_P(container) == IS_REFERENCE)) {
			container = Z_REFVAL_P(container);
			if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
				goto fetch_dim_r_array;
			} else {
				goto fetch_dim_r_slow;
			}
		} else {
fetch_dim_r_slow:
			if ((IS_TMP_VAR|IS_VAR) == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
				dim++;
			}
			zend_fetch_dimension_address_read_R_slow(container, dim OPLINE_CC EXECUTE_DATA_CC);
		}
	} else {
		zend_fetch_dimension_address_read_R(container, dim, (IS_TMP_VAR|IS_VAR) OPLINE_CC EXECUTE_DATA_CC);
	}
	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));


	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_FETCH_DIM_W_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *container;

	SAVE_OPLINE();
	container = EX_VAR(opline->op1.var);
	zend_fetch_dimension_address_W(container, _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC), (IS_TMP_VAR|IS_VAR) OPLINE_CC EXECUTE_DATA_CC);
	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
	if (IS_CV == IS_VAR) {
		FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
	}
	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_FETCH_DIM_RW_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *container;

	SAVE_OPLINE();
	container = EX_VAR(opline->op1.var);
	zend_fetch_dimension_address_RW(container, _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC), (IS_TMP_VAR|IS_VAR) OPLINE_CC EXECUTE_DATA_CC);
	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
	if (IS_CV == IS_VAR) {
		FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
	}
	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_FETCH_DIM_IS_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *container;

	SAVE_OPLINE();
	container = EX_VAR(opline->op1.var);
	zend_fetch_dimension_address_read_IS(container, _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC), (IS_TMP_VAR|IS_VAR) OPLINE_CC EXECUTE_DATA_CC);
	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));


	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
#if 0
	USE_OPLINE
#endif

	if (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) {
		if ((IS_CV & (IS_CONST|IS_TMP_VAR))) {
			ZEND_VM_TAIL_CALL(zend_use_tmp_in_write_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
		}
		ZEND_VM_TAIL_CALL(ZEND_FETCH_DIM_W_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
	} else {
		if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED) {
			ZEND_VM_TAIL_CALL(zend_use_undef_in_read_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
		}
		ZEND_VM_TAIL_CALL(ZEND_FETCH_DIM_R_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
	}
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_FETCH_DIM_UNSET_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *container;

	SAVE_OPLINE();
	container = EX_VAR(opline->op1.var);
	zend_fetch_dimension_address_UNSET(container, _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC), (IS_TMP_VAR|IS_VAR) OPLINE_CC EXECUTE_DATA_CC);
	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
	if (IS_CV == IS_VAR) {
		FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
	}
	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_FETCH_OBJ_R_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *container;
	void **cache_slot = NULL;

	SAVE_OPLINE();
	container = EX_VAR(opline->op1.var);

	if (IS_CV == IS_CONST ||
	    (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
		do {
			if ((IS_CV & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
				container = Z_REFVAL_P(container);
				if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
					break;
				}
			}
			if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
				ZVAL_UNDEFINED_OP1();
			}
			zend_wrong_property_read(container, _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC));
			ZVAL_NULL(EX_VAR(opline->result.var));
			goto fetch_obj_r_finish;
		} while (0);
	}

	/* here we are sure we are dealing with an object */
	do {
		zend_object *zobj = Z_OBJ_P(container);
		zend_string *name, *tmp_name;
		zval *retval;

		if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
			cache_slot = CACHE_ADDR(opline->extended_value & ~ZEND_FETCH_REF /* FUNC_ARG fetch may contain it */);

			if (EXPECTED(zobj->ce == CACHED_PTR_EX(cache_slot))) {
				uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);

				if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
fetch_obj_r_simple:
					retval = OBJ_PROP(zobj, prop_offset);
					if (EXPECTED(Z_TYPE_INFO_P(retval) != IS_UNDEF)) {
						if (0 || (IS_CV & (IS_TMP_VAR|IS_VAR)) != 0) {
							goto fetch_obj_r_copy;
						} else {
fetch_obj_r_fast_copy:
							ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
							ZEND_VM_NEXT_OPCODE();
						}
					}
				} else if (UNEXPECTED(IS_HOOKED_PROPERTY_OFFSET(prop_offset))) {
					zend_property_info *prop_info = CACHED_PTR_EX(cache_slot + 2);
					if (ZEND_IS_PROPERTY_HOOK_SIMPLE_READ(prop_offset)) {
						prop_offset = prop_info->offset;
						goto fetch_obj_r_simple;
					} else if (EXPECTED(ZEND_IS_PROPERTY_HOOK_SIMPLE_GET(prop_offset))) {
						zend_function *hook = prop_info->hooks[ZEND_PROPERTY_HOOK_GET];
						ZEND_ASSERT(hook->type == ZEND_USER_FUNCTION);
						ZEND_ASSERT(RUN_TIME_CACHE(&hook->op_array));

						uint32_t call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_HAS_THIS;
						if (IS_CV & IS_CV) {
							GC_ADDREF(zobj);
						}
						if (IS_CV & (IS_CV|IS_VAR|IS_TMP_VAR)) {
							call_info |= ZEND_CALL_RELEASE_THIS;
						}
						zend_execute_data *call = zend_vm_stack_push_call_frame(call_info, hook, 0, zobj);
						call->prev_execute_data = execute_data;
						call->call = NULL;
						call->return_value = EX_VAR(opline->result.var);
						call->run_time_cache = RUN_TIME_CACHE(&hook->op_array);

						execute_data = call;
						EG(current_execute_data) = execute_data;
						zend_init_cvs(0, hook->op_array.last_var EXECUTE_DATA_CC);

#if defined(ZEND_VM_IP_GLOBAL_REG) && ((ZEND_VM_KIND == ZEND_VM_KIND_CALL) || (ZEND_VM_KIND == ZEND_VM_KIND_HYBRID))
						opline = hook->op_array.opcodes;
#else
						EX(opline) = hook->op_array.opcodes;
#endif
						LOAD_OPLINE_EX();




						ZEND_VM_ENTER_EX();
					}
					/* Fall through to read_property for hooks. */
				} else if (EXPECTED(zobj->properties != NULL)) {
					ZEND_ASSERT(IS_DYNAMIC_PROPERTY_OFFSET(prop_offset));
					name = Z_STR_P(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC));
					if (!IS_UNKNOWN_DYNAMIC_PROPERTY_OFFSET(prop_offset)) {
						uintptr_t idx = ZEND_DECODE_DYN_PROP_OFFSET(prop_offset);

						if (EXPECTED(idx < zobj->properties->nNumUsed * sizeof(Bucket))) {
							Bucket *p = (Bucket*)((char*)zobj->properties->arData + idx);

							if (EXPECTED(p->key == name) ||
							    (EXPECTED(p->h == ZSTR_H(name)) &&
							     EXPECTED(p->key != NULL) &&
							     EXPECTED(zend_string_equal_content(p->key, name)))) {
								retval = &p->val;
								if (0 || (IS_CV & (IS_TMP_VAR|IS_VAR)) != 0) {
									goto fetch_obj_r_copy;
								} else {
									goto fetch_obj_r_fast_copy;
								}
							}
						}
						CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_DYNAMIC_PROPERTY_OFFSET);
					}
					retval = zend_hash_find_known_hash(zobj->properties, name);
					if (EXPECTED(retval)) {
						uintptr_t idx = (char*)retval - (char*)zobj->properties->arData;
						CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_ENCODE_DYN_PROP_OFFSET(idx));
						if (0 || (IS_CV & (IS_TMP_VAR|IS_VAR)) != 0) {
							goto fetch_obj_r_copy;
						} else {
							goto fetch_obj_r_fast_copy;
						}
					}
				}
			}
			name = Z_STR_P(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC));
		} else {
			name = zval_try_get_tmp_string(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC), &tmp_name);
			if (UNEXPECTED(!name)) {
				ZVAL_UNDEF(EX_VAR(opline->result.var));
				break;
			}
		}

#if ZEND_DEBUG
		/* For non-standard object handlers, verify a declared property type in debug builds.
		 * Fetch prop_info before calling read_property(), as it may deallocate the object. */
		zend_property_info *prop_info = NULL;
		if (zobj->handlers->read_property != zend_std_read_property) {
			prop_info = zend_get_property_info(zobj->ce, name, /* silent */ true);
		}
#endif
		retval = zobj->handlers->read_property(zobj, name, BP_VAR_R, cache_slot, EX_VAR(opline->result.var));
#if ZEND_DEBUG
		if (!EG(exception) && prop_info && prop_info != ZEND_WRONG_PROPERTY_INFO
				&& ZEND_TYPE_IS_SET(prop_info->type)) {
			ZVAL_OPT_DEREF(retval);
			zend_verify_property_type(prop_info, retval, /* strict */ true);
		}
#endif

		if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
			zend_tmp_string_release(tmp_name);
		}

		if (retval != EX_VAR(opline->result.var)) {
fetch_obj_r_copy:
			ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
		} else if (UNEXPECTED(Z_ISREF_P(retval))) {
			zend_unwrap_reference(retval);
		}
	} while (0);

fetch_obj_r_finish:
	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));


	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_FETCH_OBJ_W_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *property, *container, *result;

	SAVE_OPLINE();

	container = EX_VAR(opline->op1.var);
	property = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
	result = EX_VAR(opline->result.var);
	zend_fetch_property_address(
		result, container, IS_CV, property, (IS_TMP_VAR|IS_VAR),
		(((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(opline->extended_value & ~ZEND_FETCH_OBJ_FLAGS) : NULL),
		BP_VAR_W, opline->extended_value, NULL OPLINE_CC EXECUTE_DATA_CC);
	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
	if (IS_CV == IS_VAR) {
		FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
	}
	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_FETCH_OBJ_RW_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *property, *container, *result;

	SAVE_OPLINE();
	container = EX_VAR(opline->op1.var);
	property = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
	result = EX_VAR(opline->result.var);
	zend_fetch_property_address(result, container, IS_CV, property, (IS_TMP_VAR|IS_VAR), (((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL), BP_VAR_RW, 0, NULL OPLINE_CC EXECUTE_DATA_CC);
	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
	if (IS_CV == IS_VAR) {
		FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
	}
	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_FETCH_OBJ_IS_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *container;
	void **cache_slot = NULL;

	SAVE_OPLINE();
	container = _get_zval_ptr_cv_BP_VAR_IS(opline->op1.var EXECUTE_DATA_CC);

	if (IS_CV == IS_CONST ||
	    (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
		do {
			if ((IS_CV & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
				container = Z_REFVAL_P(container);
				if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
					break;
				}
			}
			if ((IS_TMP_VAR|IS_VAR) == IS_CV && Z_TYPE_P(EX_VAR(opline->op2.var)) == IS_UNDEF) {
				ZVAL_UNDEFINED_OP2();
			}
			ZVAL_NULL(EX_VAR(opline->result.var));
			goto fetch_obj_is_finish;
		} while (0);
	}

	/* here we are sure we are dealing with an object */
	do {
		zend_object *zobj = Z_OBJ_P(container);
		zend_string *name, *tmp_name;
		zval *retval;

		if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
			cache_slot = CACHE_ADDR(opline->extended_value);

			if (EXPECTED(zobj->ce == CACHED_PTR_EX(cache_slot))) {
				uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);

				if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
fetch_obj_is_simple:
					retval = OBJ_PROP(zobj, prop_offset);
					if (EXPECTED(Z_TYPE_P(retval) != IS_UNDEF)) {
						if (0 || (IS_CV & (IS_TMP_VAR|IS_VAR)) != 0) {
							goto fetch_obj_is_copy;
						} else {
fetch_obj_is_fast_copy:
							ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
							ZEND_VM_NEXT_OPCODE();
						}
					}
				} else if (UNEXPECTED(IS_HOOKED_PROPERTY_OFFSET(prop_offset))) {
					if (ZEND_IS_PROPERTY_HOOK_SIMPLE_READ(prop_offset)) {
						zend_property_info *prop_info = CACHED_PTR_EX(cache_slot + 2);
						prop_offset = prop_info->offset;
						goto fetch_obj_is_simple;
					}
					/* Fall through to read_property for hooks. */
				} else if (EXPECTED(zobj->properties != NULL)) {
					ZEND_ASSERT(IS_DYNAMIC_PROPERTY_OFFSET(prop_offset));
					name = Z_STR_P(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC));
					if (!IS_UNKNOWN_DYNAMIC_PROPERTY_OFFSET(prop_offset)) {
						uintptr_t idx = ZEND_DECODE_DYN_PROP_OFFSET(prop_offset);

						if (EXPECTED(idx < zobj->properties->nNumUsed * sizeof(Bucket))) {
							Bucket *p = (Bucket*)((char*)zobj->properties->arData + idx);

							if (EXPECTED(p->key == name) ||
							    (EXPECTED(p->h == ZSTR_H(name)) &&
							     EXPECTED(p->key != NULL) &&
							     EXPECTED(zend_string_equal_content(p->key, name)))) {
								retval = &p->val;
								if (0 || (IS_CV & (IS_TMP_VAR|IS_VAR)) != 0) {
									goto fetch_obj_is_copy;
								} else {
									goto fetch_obj_is_fast_copy;
								}
							}
						}
						CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_DYNAMIC_PROPERTY_OFFSET);
					}
					retval = zend_hash_find_known_hash(zobj->properties, name);
					if (EXPECTED(retval)) {
						uintptr_t idx = (char*)retval - (char*)zobj->properties->arData;
						CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_ENCODE_DYN_PROP_OFFSET(idx));
						if (0 || (IS_CV & (IS_TMP_VAR|IS_VAR)) != 0) {
							goto fetch_obj_is_copy;
						} else {
							goto fetch_obj_is_fast_copy;
						}
					}
				}
			}
			name = Z_STR_P(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC));
		} else {
			name = zval_try_get_tmp_string(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC), &tmp_name);
			if (UNEXPECTED(!name)) {
				ZVAL_UNDEF(EX_VAR(opline->result.var));
				break;
			}
		}

		retval = zobj->handlers->read_property(zobj, name, BP_VAR_IS, cache_slot, EX_VAR(opline->result.var));

		if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
			zend_tmp_string_release(tmp_name);
		}

		if (retval != EX_VAR(opline->result.var)) {
fetch_obj_is_copy:
			ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
		} else if (UNEXPECTED(Z_ISREF_P(retval))) {
			zend_unwrap_reference(retval);
		}
	} while (0);

fetch_obj_is_finish:
	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));


	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
#if 0
	USE_OPLINE
#endif

	if (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) {
		/* Behave like FETCH_OBJ_W */
		if ((IS_CV & (IS_CONST|IS_TMP_VAR))) {
			ZEND_VM_TAIL_CALL(zend_use_tmp_in_write_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
		}
		ZEND_VM_TAIL_CALL(ZEND_FETCH_OBJ_W_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
	} else {
		ZEND_VM_TAIL_CALL(ZEND_FETCH_OBJ_R_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
	}
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_FETCH_OBJ_UNSET_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *container, *property, *result;

	SAVE_OPLINE();
	container = EX_VAR(opline->op1.var);
	property = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
	result = EX_VAR(opline->result.var);
	zend_fetch_property_address(result, container, IS_CV, property, (IS_TMP_VAR|IS_VAR), (((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL), BP_VAR_UNSET, 0, NULL OPLINE_CC EXECUTE_DATA_CC);
	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
	if (IS_CV == IS_VAR) {
		FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
	}
	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *object, *value, tmp;
	zend_object *zobj;
	zend_string *name, *tmp_name;
	zend_refcounted *garbage = NULL;

	SAVE_OPLINE();
	object = EX_VAR(opline->op1.var);
	value = RT_CONSTANT((opline+1), (opline+1)->op1);

	if (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
		if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
			object = Z_REFVAL_P(object);
			goto assign_object;
		}
		zend_throw_non_object_error(object, _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC) OPLINE_CC EXECUTE_DATA_CC);
		value = &EG(uninitialized_zval);
		goto free_and_exit_assign_obj;
	}

assign_object:
	zobj = Z_OBJ_P(object);
	if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
		if (EXPECTED(zobj->ce == CACHED_PTR(opline->extended_value))) {
			void **cache_slot = CACHE_ADDR(opline->extended_value);
			uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
			zval *property_val;
			zend_property_info *prop_info;

			if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
				prop_info = (zend_property_info*) CACHED_PTR_EX(cache_slot + 2);

assign_obj_simple:
				property_val = OBJ_PROP(zobj, prop_offset);
				if (Z_TYPE_P(property_val) != IS_UNDEF) {
					if (prop_info != NULL) {
						value = zend_assign_to_typed_prop(prop_info, property_val, value, &garbage EXECUTE_DATA_CC);
						goto free_and_exit_assign_obj;
					} else {
fast_assign_obj:
						value = zend_assign_to_variable_ex(property_val, value, IS_CONST, EX_USES_STRICT_TYPES(), &garbage);
						if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
							ZVAL_COPY(EX_VAR(opline->result.var), value);
						}
						goto exit_assign_obj;
					}
				}
			} else if (EXPECTED(IS_DYNAMIC_PROPERTY_OFFSET(prop_offset))) {
				name = Z_STR_P(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC));
				if (UNEXPECTED(zend_lazy_object_must_init(zobj))) {
					zobj = zend_lazy_object_init(zobj);
					if (!zobj) {
						value = &EG(uninitialized_zval);
						goto free_and_exit_assign_obj;
					}
				}
				if (!zobj->ce->__set && (zobj->ce->ce_flags & ZEND_ACC_ALLOW_DYNAMIC_PROPERTIES)) {
					rebuild_object_properties_internal(zobj);
				}
				if (EXPECTED(zobj->properties != NULL)) {
					if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
						if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
							GC_DELREF(zobj->properties);
						}
						zobj->properties = zend_array_dup(zobj->properties);
					}
					property_val = zend_hash_find_known_hash(zobj->properties, name);
					if (property_val) {
						goto fast_assign_obj;
					}
				}

				if (!zobj->ce->__set && (zobj->ce->ce_flags & ZEND_ACC_ALLOW_DYNAMIC_PROPERTIES)) {
					if (IS_CONST == IS_CONST) {
						if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
							Z_ADDREF_P(value);
						}
					} else if (IS_CONST != IS_TMP_VAR) {
						if (Z_ISREF_P(value)) {
							if (IS_CONST == IS_VAR) {
								zend_reference *ref = Z_REF_P(value);
								if (GC_DELREF(ref) == 0) {
									ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
									efree_size(ref, sizeof(zend_reference));
									value = &tmp;
								} else {
									value = Z_REFVAL_P(value);
									Z_TRY_ADDREF_P(value);
								}
							} else {
								value = Z_REFVAL_P(value);
								Z_TRY_ADDREF_P(value);
							}
						} else if (IS_CONST == IS_CV) {
							Z_TRY_ADDREF_P(value);
						}
					}
					zend_hash_add_new(zobj->properties, name, value);
					if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
						ZVAL_COPY(EX_VAR(opline->result.var), value);
					}
					goto exit_assign_obj;
				}
			} else {
				ZEND_ASSERT(IS_HOOKED_PROPERTY_OFFSET(prop_offset));
				if (ZEND_IS_PROPERTY_HOOK_SIMPLE_WRITE(prop_offset)) {
					prop_info = CACHED_PTR_EX(cache_slot + 2);
					prop_offset = prop_info->offset;
					if (!ZEND_TYPE_IS_SET(prop_info->type)) {
						prop_info = NULL;
					}
					goto assign_obj_simple;
				}
				/* Fall through to write_property for hooks. */
			}
		}
		name = Z_STR_P(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC));
	} else {
		name = zval_try_get_tmp_string(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC), &tmp_name);
		if (UNEXPECTED(!name)) {


			UNDEF_RESULT();
			goto exit_assign_obj;
		}
	}

	if (IS_CONST == IS_CV || IS_CONST == IS_VAR) {
		ZVAL_DEREF(value);
	}

	value = zobj->handlers->write_property(zobj, name, value, ((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);

	if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
		zend_tmp_string_release(tmp_name);
	}

free_and_exit_assign_obj:
	if (UNEXPECTED(RETURN_VALUE_USED(opline)) && value) {
		ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
	}


exit_assign_obj:
	if (garbage) {
		GC_DTOR_NO_REF(garbage);
	}
	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));


	/* assign_obj has two opcodes! */
	ZEND_VM_NEXT_OPCODE_EX(1, 2);
}

/* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CONST|VAR) */
static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *object, *value, tmp;
	zend_object *zobj;
	zend_string *name, *tmp_name;
	zend_refcounted *garbage = NULL;

	SAVE_OPLINE();
	object = EX_VAR(opline->op1.var);
	value = _get_zval_ptr_tmp((opline+1)->op1.var EXECUTE_DATA_CC);

	if (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
		if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
			object = Z_REFVAL_P(object);
			goto assign_object;
		}
		zend_throw_non_object_error(object, _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC) OPLINE_CC EXECUTE_DATA_CC);
		value = &EG(uninitialized_zval);
		goto free_and_exit_assign_obj;
	}

assign_object:
	zobj = Z_OBJ_P(object);
	if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
		if (EXPECTED(zobj->ce == CACHED_PTR(opline->extended_value))) {
			void **cache_slot = CACHE_ADDR(opline->extended_value);
			uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
			zval *property_val;
			zend_property_info *prop_info;

			if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
				prop_info = (zend_property_info*) CACHED_PTR_EX(cache_slot + 2);

assign_obj_simple:
				property_val = OBJ_PROP(zobj, prop_offset);
				if (Z_TYPE_P(property_val) != IS_UNDEF) {
					if (prop_info != NULL) {
						value = zend_assign_to_typed_prop(prop_info, property_val, value, &garbage EXECUTE_DATA_CC);
						goto free_and_exit_assign_obj;
					} else {
fast_assign_obj:
						value = zend_assign_to_variable_ex(property_val, value, IS_TMP_VAR, EX_USES_STRICT_TYPES(), &garbage);
						if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
							ZVAL_COPY(EX_VAR(opline->result.var), value);
						}
						goto exit_assign_obj;
					}
				}
			} else if (EXPECTED(IS_DYNAMIC_PROPERTY_OFFSET(prop_offset))) {
				name = Z_STR_P(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC));
				if (UNEXPECTED(zend_lazy_object_must_init(zobj))) {
					zobj = zend_lazy_object_init(zobj);
					if (!zobj) {
						value = &EG(uninitialized_zval);
						goto free_and_exit_assign_obj;
					}
				}
				if (!zobj->ce->__set && (zobj->ce->ce_flags & ZEND_ACC_ALLOW_DYNAMIC_PROPERTIES)) {
					rebuild_object_properties_internal(zobj);
				}
				if (EXPECTED(zobj->properties != NULL)) {
					if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
						if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
							GC_DELREF(zobj->properties);
						}
						zobj->properties = zend_array_dup(zobj->properties);
					}
					property_val = zend_hash_find_known_hash(zobj->properties, name);
					if (property_val) {
						goto fast_assign_obj;
					}
				}

				if (!zobj->ce->__set && (zobj->ce->ce_flags & ZEND_ACC_ALLOW_DYNAMIC_PROPERTIES)) {
					if (IS_TMP_VAR == IS_CONST) {
						if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
							Z_ADDREF_P(value);
						}
					} else if (IS_TMP_VAR != IS_TMP_VAR) {
						if (Z_ISREF_P(value)) {
							if (IS_TMP_VAR == IS_VAR) {
								zend_reference *ref = Z_REF_P(value);
								if (GC_DELREF(ref) == 0) {
									ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
									efree_size(ref, sizeof(zend_reference));
									value = &tmp;
								} else {
									value = Z_REFVAL_P(value);
									Z_TRY_ADDREF_P(value);
								}
							} else {
								value = Z_REFVAL_P(value);
								Z_TRY_ADDREF_P(value);
							}
						} else if (IS_TMP_VAR == IS_CV) {
							Z_TRY_ADDREF_P(value);
						}
					}
					zend_hash_add_new(zobj->properties, name, value);
					if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
						ZVAL_COPY(EX_VAR(opline->result.var), value);
					}
					goto exit_assign_obj;
				}
			} else {
				ZEND_ASSERT(IS_HOOKED_PROPERTY_OFFSET(prop_offset));
				if (ZEND_IS_PROPERTY_HOOK_SIMPLE_WRITE(prop_offset)) {
					prop_info = CACHED_PTR_EX(cache_slot + 2);
					prop_offset = prop_info->offset;
					if (!ZEND_TYPE_IS_SET(prop_info->type)) {
						prop_info = NULL;
					}
					goto assign_obj_simple;
				}
				/* Fall through to write_property for hooks. */
			}
		}
		name = Z_STR_P(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC));
	} else {
		name = zval_try_get_tmp_string(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC), &tmp_name);
		if (UNEXPECTED(!name)) {
			zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
			UNDEF_RESULT();
			goto exit_assign_obj;
		}
	}

	if (IS_TMP_VAR == IS_CV || IS_TMP_VAR == IS_VAR) {
		ZVAL_DEREF(value);
	}

	value = zobj->handlers->write_property(zobj, name, value, ((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);

	if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
		zend_tmp_string_release(tmp_name);
	}

free_and_exit_assign_obj:
	if (UNEXPECTED(RETURN_VALUE_USED(opline)) && value) {
		ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
	}
	zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
exit_assign_obj:
	if (garbage) {
		GC_DTOR_NO_REF(garbage);
	}
	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));


	/* assign_obj has two opcodes! */
	ZEND_VM_NEXT_OPCODE_EX(1, 2);
}

/* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CONST|VAR) */
static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *object, *value, tmp;
	zend_object *zobj;
	zend_string *name, *tmp_name;
	zend_refcounted *garbage = NULL;

	SAVE_OPLINE();
	object = EX_VAR(opline->op1.var);
	value = _get_zval_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);

	if (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
		if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
			object = Z_REFVAL_P(object);
			goto assign_object;
		}
		zend_throw_non_object_error(object, _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC) OPLINE_CC EXECUTE_DATA_CC);
		value = &EG(uninitialized_zval);
		goto free_and_exit_assign_obj;
	}

assign_object:
	zobj = Z_OBJ_P(object);
	if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
		if (EXPECTED(zobj->ce == CACHED_PTR(opline->extended_value))) {
			void **cache_slot = CACHE_ADDR(opline->extended_value);
			uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
			zval *property_val;
			zend_property_info *prop_info;

			if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
				prop_info = (zend_property_info*) CACHED_PTR_EX(cache_slot + 2);

assign_obj_simple:
				property_val = OBJ_PROP(zobj, prop_offset);
				if (Z_TYPE_P(property_val) != IS_UNDEF) {
					if (prop_info != NULL) {
						value = zend_assign_to_typed_prop(prop_info, property_val, value, &garbage EXECUTE_DATA_CC);
						goto free_and_exit_assign_obj;
					} else {
fast_assign_obj:
						value = zend_assign_to_variable_ex(property_val, value, IS_VAR, EX_USES_STRICT_TYPES(), &garbage);
						if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
							ZVAL_COPY(EX_VAR(opline->result.var), value);
						}
						goto exit_assign_obj;
					}
				}
			} else if (EXPECTED(IS_DYNAMIC_PROPERTY_OFFSET(prop_offset))) {
				name = Z_STR_P(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC));
				if (UNEXPECTED(zend_lazy_object_must_init(zobj))) {
					zobj = zend_lazy_object_init(zobj);
					if (!zobj) {
						value = &EG(uninitialized_zval);
						goto free_and_exit_assign_obj;
					}
				}
				if (!zobj->ce->__set && (zobj->ce->ce_flags & ZEND_ACC_ALLOW_DYNAMIC_PROPERTIES)) {
					rebuild_object_properties_internal(zobj);
				}
				if (EXPECTED(zobj->properties != NULL)) {
					if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
						if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
							GC_DELREF(zobj->properties);
						}
						zobj->properties = zend_array_dup(zobj->properties);
					}
					property_val = zend_hash_find_known_hash(zobj->properties, name);
					if (property_val) {
						goto fast_assign_obj;
					}
				}

				if (!zobj->ce->__set && (zobj->ce->ce_flags & ZEND_ACC_ALLOW_DYNAMIC_PROPERTIES)) {
					if (IS_VAR == IS_CONST) {
						if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
							Z_ADDREF_P(value);
						}
					} else if (IS_VAR != IS_TMP_VAR) {
						if (Z_ISREF_P(value)) {
							if (IS_VAR == IS_VAR) {
								zend_reference *ref = Z_REF_P(value);
								if (GC_DELREF(ref) == 0) {
									ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
									efree_size(ref, sizeof(zend_reference));
									value = &tmp;
								} else {
									value = Z_REFVAL_P(value);
									Z_TRY_ADDREF_P(value);
								}
							} else {
								value = Z_REFVAL_P(value);
								Z_TRY_ADDREF_P(value);
							}
						} else if (IS_VAR == IS_CV) {
							Z_TRY_ADDREF_P(value);
						}
					}
					zend_hash_add_new(zobj->properties, name, value);
					if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
						ZVAL_COPY(EX_VAR(opline->result.var), value);
					}
					goto exit_assign_obj;
				}
			} else {
				ZEND_ASSERT(IS_HOOKED_PROPERTY_OFFSET(prop_offset));
				if (ZEND_IS_PROPERTY_HOOK_SIMPLE_WRITE(prop_offset)) {
					prop_info = CACHED_PTR_EX(cache_slot + 2);
					prop_offset = prop_info->offset;
					if (!ZEND_TYPE_IS_SET(prop_info->type)) {
						prop_info = NULL;
					}
					goto assign_obj_simple;
				}
				/* Fall through to write_property for hooks. */
			}
		}
		name = Z_STR_P(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC));
	} else {
		name = zval_try_get_tmp_string(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC), &tmp_name);
		if (UNEXPECTED(!name)) {
			zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
			UNDEF_RESULT();
			goto exit_assign_obj;
		}
	}

	if (IS_VAR == IS_CV || IS_VAR == IS_VAR) {
		ZVAL_DEREF(value);
	}

	value = zobj->handlers->write_property(zobj, name, value, ((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);

	if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
		zend_tmp_string_release(tmp_name);
	}

free_and_exit_assign_obj:
	if (UNEXPECTED(RETURN_VALUE_USED(opline)) && value) {
		ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
	}
	zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
exit_assign_obj:
	if (garbage) {
		GC_DTOR_NO_REF(garbage);
	}
	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));


	/* assign_obj has two opcodes! */
	ZEND_VM_NEXT_OPCODE_EX(1, 2);
}

/* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CONST|VAR) */
static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *object, *value, tmp;
	zend_object *zobj;
	zend_string *name, *tmp_name;
	zend_refcounted *garbage = NULL;

	SAVE_OPLINE();
	object = EX_VAR(opline->op1.var);
	value = _get_zval_ptr_cv_BP_VAR_R((opline+1)->op1.var EXECUTE_DATA_CC);

	if (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
		if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
			object = Z_REFVAL_P(object);
			goto assign_object;
		}
		zend_throw_non_object_error(object, _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC) OPLINE_CC EXECUTE_DATA_CC);
		value = &EG(uninitialized_zval);
		goto free_and_exit_assign_obj;
	}

assign_object:
	zobj = Z_OBJ_P(object);
	if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
		if (EXPECTED(zobj->ce == CACHED_PTR(opline->extended_value))) {
			void **cache_slot = CACHE_ADDR(opline->extended_value);
			uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
			zval *property_val;
			zend_property_info *prop_info;

			if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
				prop_info = (zend_property_info*) CACHED_PTR_EX(cache_slot + 2);

assign_obj_simple:
				property_val = OBJ_PROP(zobj, prop_offset);
				if (Z_TYPE_P(property_val) != IS_UNDEF) {
					if (prop_info != NULL) {
						value = zend_assign_to_typed_prop(prop_info, property_val, value, &garbage EXECUTE_DATA_CC);
						goto free_and_exit_assign_obj;
					} else {
fast_assign_obj:
						value = zend_assign_to_variable_ex(property_val, value, IS_CV, EX_USES_STRICT_TYPES(), &garbage);
						if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
							ZVAL_COPY(EX_VAR(opline->result.var), value);
						}
						goto exit_assign_obj;
					}
				}
			} else if (EXPECTED(IS_DYNAMIC_PROPERTY_OFFSET(prop_offset))) {
				name = Z_STR_P(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC));
				if (UNEXPECTED(zend_lazy_object_must_init(zobj))) {
					zobj = zend_lazy_object_init(zobj);
					if (!zobj) {
						value = &EG(uninitialized_zval);
						goto free_and_exit_assign_obj;
					}
				}
				if (!zobj->ce->__set && (zobj->ce->ce_flags & ZEND_ACC_ALLOW_DYNAMIC_PROPERTIES)) {
					rebuild_object_properties_internal(zobj);
				}
				if (EXPECTED(zobj->properties != NULL)) {
					if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
						if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
							GC_DELREF(zobj->properties);
						}
						zobj->properties = zend_array_dup(zobj->properties);
					}
					property_val = zend_hash_find_known_hash(zobj->properties, name);
					if (property_val) {
						goto fast_assign_obj;
					}
				}

				if (!zobj->ce->__set && (zobj->ce->ce_flags & ZEND_ACC_ALLOW_DYNAMIC_PROPERTIES)) {
					if (IS_CV == IS_CONST) {
						if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
							Z_ADDREF_P(value);
						}
					} else if (IS_CV != IS_TMP_VAR) {
						if (Z_ISREF_P(value)) {
							if (IS_CV == IS_VAR) {
								zend_reference *ref = Z_REF_P(value);
								if (GC_DELREF(ref) == 0) {
									ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
									efree_size(ref, sizeof(zend_reference));
									value = &tmp;
								} else {
									value = Z_REFVAL_P(value);
									Z_TRY_ADDREF_P(value);
								}
							} else {
								value = Z_REFVAL_P(value);
								Z_TRY_ADDREF_P(value);
							}
						} else if (IS_CV == IS_CV) {
							Z_TRY_ADDREF_P(value);
						}
					}
					zend_hash_add_new(zobj->properties, name, value);
					if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
						ZVAL_COPY(EX_VAR(opline->result.var), value);
					}
					goto exit_assign_obj;
				}
			} else {
				ZEND_ASSERT(IS_HOOKED_PROPERTY_OFFSET(prop_offset));
				if (ZEND_IS_PROPERTY_HOOK_SIMPLE_WRITE(prop_offset)) {
					prop_info = CACHED_PTR_EX(cache_slot + 2);
					prop_offset = prop_info->offset;
					if (!ZEND_TYPE_IS_SET(prop_info->type)) {
						prop_info = NULL;
					}
					goto assign_obj_simple;
				}
				/* Fall through to write_property for hooks. */
			}
		}
		name = Z_STR_P(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC));
	} else {
		name = zval_try_get_tmp_string(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC), &tmp_name);
		if (UNEXPECTED(!name)) {


			UNDEF_RESULT();
			goto exit_assign_obj;
		}
	}

	if (IS_CV == IS_CV || IS_CV == IS_VAR) {
		ZVAL_DEREF(value);
	}

	value = zobj->handlers->write_property(zobj, name, value, ((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);

	if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
		zend_tmp_string_release(tmp_name);
	}

free_and_exit_assign_obj:
	if (UNEXPECTED(RETURN_VALUE_USED(opline)) && value) {
		ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
	}


exit_assign_obj:
	if (garbage) {
		GC_DTOR_NO_REF(garbage);
	}
	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));


	/* assign_obj has two opcodes! */
	ZEND_VM_NEXT_OPCODE_EX(1, 2);
}

/* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CONST|VAR) */
static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *object_ptr, *orig_object_ptr;
	zval *value;
	zval *variable_ptr;
	zval *dim;
	zend_refcounted *garbage = NULL;

	SAVE_OPLINE();
	orig_object_ptr = object_ptr = EX_VAR(opline->op1.var);

	if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
try_assign_dim_array:
		SEPARATE_ARRAY(object_ptr);
		if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED) {
			value = RT_CONSTANT((opline+1), (opline+1)->op1);
			if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
				HashTable *ht = Z_ARRVAL_P(object_ptr);
				if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE)) {
					GC_ADDREF(ht);
				}
				value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
				if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE) && !GC_DELREF(ht)) {
					zend_array_destroy(ht);
					goto assign_dim_error;
				}
			}
			if (IS_CONST == IS_CV || IS_CONST == IS_VAR) {
				ZVAL_DEREF(value);
			}
			value = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), value);
			if (UNEXPECTED(value == NULL)) {
				zend_cannot_add_element();
				goto assign_dim_error;
			} else if (IS_CONST == IS_CV) {
				if (Z_REFCOUNTED_P(value)) {
					Z_ADDREF_P(value);
				}
			} else if (IS_CONST == IS_VAR) {
				zval *free_op_data = EX_VAR((opline+1)->op1.var);
				if (Z_ISREF_P(free_op_data)) {
					if (Z_REFCOUNTED_P(value)) {
						Z_ADDREF_P(value);
					}
					zval_ptr_dtor_nogc(free_op_data);
				}
			} else if (IS_CONST == IS_CONST) {
				if (UNEXPECTED(Z_REFCOUNTED_P(value))) {
					Z_ADDREF_P(value);
				}
			}
		} else {
			dim = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
			if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
				variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
			} else {
				variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
			}
			if (UNEXPECTED(variable_ptr == NULL)) {
				goto assign_dim_error;
			}
			value = RT_CONSTANT((opline+1), (opline+1)->op1);
			value = zend_assign_to_variable_ex(variable_ptr, value, IS_CONST, EX_USES_STRICT_TYPES(), &garbage);
		}
		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
			ZVAL_COPY(EX_VAR(opline->result.var), value);
		}
		if (garbage) {
			GC_DTOR_NO_REF(garbage);
		}
	} else {
		if (EXPECTED(Z_ISREF_P(object_ptr))) {
			object_ptr = Z_REFVAL_P(object_ptr);
			if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
				goto try_assign_dim_array;
			}
		}
		if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) {
			zend_object *obj = Z_OBJ_P(object_ptr);

			GC_ADDREF(obj);
			dim = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
			if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_ISUNDEF_P(dim))) {
				dim = ZVAL_UNDEFINED_OP2();
			} else if ((IS_TMP_VAR|IS_VAR) == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
				dim++;
			}

			value = RT_CONSTANT((opline+1), (opline+1)->op1);
			if (IS_CONST == IS_CV && UNEXPECTED(Z_ISUNDEF_P(value))) {
				value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
			} else if (IS_CONST & (IS_CV|IS_VAR)) {
				ZVAL_DEREF(value);
			}

			zend_assign_to_object_dim(obj, dim, value OPLINE_CC EXECUTE_DATA_CC);


			if (UNEXPECTED(GC_DELREF(obj) == 0)) {
				zend_objects_store_del(obj);
			}
		} else if (EXPECTED(Z_TYPE_P(object_ptr) == IS_STRING)) {
			if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED) {
				zend_use_new_element_for_string();


				UNDEF_RESULT();
			} else {
				dim = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
				value = RT_CONSTANT((opline+1), (opline+1)->op1);
				zend_assign_to_string_offset(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC);


			}
		} else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
			if (Z_ISREF_P(orig_object_ptr)
			 && ZEND_REF_HAS_TYPE_SOURCES(Z_REF_P(orig_object_ptr))
			 && !zend_verify_ref_array_assignable(Z_REF_P(orig_object_ptr))) {
				dim = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);


				UNDEF_RESULT();
			} else {
				HashTable *ht = zend_new_array(8);
				uint8_t old_type = Z_TYPE_P(object_ptr);

				ZVAL_ARR(object_ptr, ht);
				if (UNEXPECTED(old_type == IS_FALSE)) {
					GC_ADDREF(ht);
					zend_false_to_array_deprecated();
					if (UNEXPECTED(GC_DELREF(ht) == 0)) {
						zend_array_destroy(ht);
						goto assign_dim_error;
					}
				}
				goto try_assign_dim_array;
			}
		} else {
			zend_use_scalar_as_array();
			dim = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
assign_dim_error:


			if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
				ZVAL_NULL(EX_VAR(opline->result.var));
			}
		}
	}
	if ((IS_TMP_VAR|IS_VAR) != IS_UNUSED) {
		zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
	}


	/* assign_dim has two opcodes! */
	ZEND_VM_NEXT_OPCODE_EX(1, 2);
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *object_ptr, *orig_object_ptr;
	zval *value;
	zval *variable_ptr;
	zval *dim;
	zend_refcounted *garbage = NULL;

	SAVE_OPLINE();
	orig_object_ptr = object_ptr = EX_VAR(opline->op1.var);

	if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
try_assign_dim_array:
		SEPARATE_ARRAY(object_ptr);
		if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED) {
			value = _get_zval_ptr_tmp((opline+1)->op1.var EXECUTE_DATA_CC);
			if (IS_TMP_VAR == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
				HashTable *ht = Z_ARRVAL_P(object_ptr);
				if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE)) {
					GC_ADDREF(ht);
				}
				value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
				if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE) && !GC_DELREF(ht)) {
					zend_array_destroy(ht);
					goto assign_dim_error;
				}
			}
			if (IS_TMP_VAR == IS_CV || IS_TMP_VAR == IS_VAR) {
				ZVAL_DEREF(value);
			}
			value = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), value);
			if (UNEXPECTED(value == NULL)) {
				zend_cannot_add_element();
				goto assign_dim_error;
			} else if (IS_TMP_VAR == IS_CV) {
				if (Z_REFCOUNTED_P(value)) {
					Z_ADDREF_P(value);
				}
			} else if (IS_TMP_VAR == IS_VAR) {
				zval *free_op_data = EX_VAR((opline+1)->op1.var);
				if (Z_ISREF_P(free_op_data)) {
					if (Z_REFCOUNTED_P(value)) {
						Z_ADDREF_P(value);
					}
					zval_ptr_dtor_nogc(free_op_data);
				}
			} else if (IS_TMP_VAR == IS_CONST) {
				if (UNEXPECTED(Z_REFCOUNTED_P(value))) {
					Z_ADDREF_P(value);
				}
			}
		} else {
			dim = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
			if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
				variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
			} else {
				variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
			}
			if (UNEXPECTED(variable_ptr == NULL)) {
				goto assign_dim_error;
			}
			value = _get_zval_ptr_tmp((opline+1)->op1.var EXECUTE_DATA_CC);
			value = zend_assign_to_variable_ex(variable_ptr, value, IS_TMP_VAR, EX_USES_STRICT_TYPES(), &garbage);
		}
		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
			ZVAL_COPY(EX_VAR(opline->result.var), value);
		}
		if (garbage) {
			GC_DTOR_NO_REF(garbage);
		}
	} else {
		if (EXPECTED(Z_ISREF_P(object_ptr))) {
			object_ptr = Z_REFVAL_P(object_ptr);
			if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
				goto try_assign_dim_array;
			}
		}
		if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) {
			zend_object *obj = Z_OBJ_P(object_ptr);

			GC_ADDREF(obj);
			dim = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
			if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_ISUNDEF_P(dim))) {
				dim = ZVAL_UNDEFINED_OP2();
			} else if ((IS_TMP_VAR|IS_VAR) == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
				dim++;
			}

			value = _get_zval_ptr_tmp((opline+1)->op1.var EXECUTE_DATA_CC);
			if (IS_TMP_VAR == IS_CV && UNEXPECTED(Z_ISUNDEF_P(value))) {
				value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
			} else if (IS_TMP_VAR & (IS_CV|IS_VAR)) {
				ZVAL_DEREF(value);
			}

			zend_assign_to_object_dim(obj, dim, value OPLINE_CC EXECUTE_DATA_CC);

			zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
			if (UNEXPECTED(GC_DELREF(obj) == 0)) {
				zend_objects_store_del(obj);
			}
		} else if (EXPECTED(Z_TYPE_P(object_ptr) == IS_STRING)) {
			if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED) {
				zend_use_new_element_for_string();
				zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
				UNDEF_RESULT();
			} else {
				dim = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
				value = _get_zval_ptr_tmp((opline+1)->op1.var EXECUTE_DATA_CC);
				zend_assign_to_string_offset(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC);
				zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
			}
		} else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
			if (Z_ISREF_P(orig_object_ptr)
			 && ZEND_REF_HAS_TYPE_SOURCES(Z_REF_P(orig_object_ptr))
			 && !zend_verify_ref_array_assignable(Z_REF_P(orig_object_ptr))) {
				dim = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
				zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
				UNDEF_RESULT();
			} else {
				HashTable *ht = zend_new_array(8);
				uint8_t old_type = Z_TYPE_P(object_ptr);

				ZVAL_ARR(object_ptr, ht);
				if (UNEXPECTED(old_type == IS_FALSE)) {
					GC_ADDREF(ht);
					zend_false_to_array_deprecated();
					if (UNEXPECTED(GC_DELREF(ht) == 0)) {
						zend_array_destroy(ht);
						goto assign_dim_error;
					}
				}
				goto try_assign_dim_array;
			}
		} else {
			zend_use_scalar_as_array();
			dim = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
assign_dim_error:
			zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
			if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
				ZVAL_NULL(EX_VAR(opline->result.var));
			}
		}
	}
	if ((IS_TMP_VAR|IS_VAR) != IS_UNUSED) {
		zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
	}


	/* assign_dim has two opcodes! */
	ZEND_VM_NEXT_OPCODE_EX(1, 2);
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *object_ptr, *orig_object_ptr;
	zval *value;
	zval *variable_ptr;
	zval *dim;
	zend_refcounted *garbage = NULL;

	SAVE_OPLINE();
	orig_object_ptr = object_ptr = EX_VAR(opline->op1.var);

	if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
try_assign_dim_array:
		SEPARATE_ARRAY(object_ptr);
		if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED) {
			value = _get_zval_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);
			if (IS_VAR == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
				HashTable *ht = Z_ARRVAL_P(object_ptr);
				if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE)) {
					GC_ADDREF(ht);
				}
				value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
				if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE) && !GC_DELREF(ht)) {
					zend_array_destroy(ht);
					goto assign_dim_error;
				}
			}
			if (IS_VAR == IS_CV || IS_VAR == IS_VAR) {
				ZVAL_DEREF(value);
			}
			value = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), value);
			if (UNEXPECTED(value == NULL)) {
				zend_cannot_add_element();
				goto assign_dim_error;
			} else if (IS_VAR == IS_CV) {
				if (Z_REFCOUNTED_P(value)) {
					Z_ADDREF_P(value);
				}
			} else if (IS_VAR == IS_VAR) {
				zval *free_op_data = EX_VAR((opline+1)->op1.var);
				if (Z_ISREF_P(free_op_data)) {
					if (Z_REFCOUNTED_P(value)) {
						Z_ADDREF_P(value);
					}
					zval_ptr_dtor_nogc(free_op_data);
				}
			} else if (IS_VAR == IS_CONST) {
				if (UNEXPECTED(Z_REFCOUNTED_P(value))) {
					Z_ADDREF_P(value);
				}
			}
		} else {
			dim = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
			if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
				variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
			} else {
				variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
			}
			if (UNEXPECTED(variable_ptr == NULL)) {
				goto assign_dim_error;
			}
			value = _get_zval_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);
			value = zend_assign_to_variable_ex(variable_ptr, value, IS_VAR, EX_USES_STRICT_TYPES(), &garbage);
		}
		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
			ZVAL_COPY(EX_VAR(opline->result.var), value);
		}
		if (garbage) {
			GC_DTOR_NO_REF(garbage);
		}
	} else {
		if (EXPECTED(Z_ISREF_P(object_ptr))) {
			object_ptr = Z_REFVAL_P(object_ptr);
			if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
				goto try_assign_dim_array;
			}
		}
		if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) {
			zend_object *obj = Z_OBJ_P(object_ptr);

			GC_ADDREF(obj);
			dim = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
			if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_ISUNDEF_P(dim))) {
				dim = ZVAL_UNDEFINED_OP2();
			} else if ((IS_TMP_VAR|IS_VAR) == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
				dim++;
			}

			value = _get_zval_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);
			if (IS_VAR == IS_CV && UNEXPECTED(Z_ISUNDEF_P(value))) {
				value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
			} else if (IS_VAR & (IS_CV|IS_VAR)) {
				ZVAL_DEREF(value);
			}

			zend_assign_to_object_dim(obj, dim, value OPLINE_CC EXECUTE_DATA_CC);

			zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
			if (UNEXPECTED(GC_DELREF(obj) == 0)) {
				zend_objects_store_del(obj);
			}
		} else if (EXPECTED(Z_TYPE_P(object_ptr) == IS_STRING)) {
			if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED) {
				zend_use_new_element_for_string();
				zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
				UNDEF_RESULT();
			} else {
				dim = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
				value = _get_zval_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);
				zend_assign_to_string_offset(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC);
				zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
			}
		} else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
			if (Z_ISREF_P(orig_object_ptr)
			 && ZEND_REF_HAS_TYPE_SOURCES(Z_REF_P(orig_object_ptr))
			 && !zend_verify_ref_array_assignable(Z_REF_P(orig_object_ptr))) {
				dim = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
				zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
				UNDEF_RESULT();
			} else {
				HashTable *ht = zend_new_array(8);
				uint8_t old_type = Z_TYPE_P(object_ptr);

				ZVAL_ARR(object_ptr, ht);
				if (UNEXPECTED(old_type == IS_FALSE)) {
					GC_ADDREF(ht);
					zend_false_to_array_deprecated();
					if (UNEXPECTED(GC_DELREF(ht) == 0)) {
						zend_array_destroy(ht);
						goto assign_dim_error;
					}
				}
				goto try_assign_dim_array;
			}
		} else {
			zend_use_scalar_as_array();
			dim = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
assign_dim_error:
			zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
			if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
				ZVAL_NULL(EX_VAR(opline->result.var));
			}
		}
	}
	if ((IS_TMP_VAR|IS_VAR) != IS_UNUSED) {
		zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
	}


	/* assign_dim has two opcodes! */
	ZEND_VM_NEXT_OPCODE_EX(1, 2);
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *object_ptr, *orig_object_ptr;
	zval *value;
	zval *variable_ptr;
	zval *dim;
	zend_refcounted *garbage = NULL;

	SAVE_OPLINE();
	orig_object_ptr = object_ptr = EX_VAR(opline->op1.var);

	if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
try_assign_dim_array:
		SEPARATE_ARRAY(object_ptr);
		if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED) {
			value = EX_VAR((opline+1)->op1.var);
			if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
				HashTable *ht = Z_ARRVAL_P(object_ptr);
				if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE)) {
					GC_ADDREF(ht);
				}
				value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
				if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE) && !GC_DELREF(ht)) {
					zend_array_destroy(ht);
					goto assign_dim_error;
				}
			}
			if (IS_CV == IS_CV || IS_CV == IS_VAR) {
				ZVAL_DEREF(value);
			}
			value = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), value);
			if (UNEXPECTED(value == NULL)) {
				zend_cannot_add_element();
				goto assign_dim_error;
			} else if (IS_CV == IS_CV) {
				if (Z_REFCOUNTED_P(value)) {
					Z_ADDREF_P(value);
				}
			} else if (IS_CV == IS_VAR) {
				zval *free_op_data = EX_VAR((opline+1)->op1.var);
				if (Z_ISREF_P(free_op_data)) {
					if (Z_REFCOUNTED_P(value)) {
						Z_ADDREF_P(value);
					}
					zval_ptr_dtor_nogc(free_op_data);
				}
			} else if (IS_CV == IS_CONST) {
				if (UNEXPECTED(Z_REFCOUNTED_P(value))) {
					Z_ADDREF_P(value);
				}
			}
		} else {
			dim = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
			if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
				variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
			} else {
				variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
			}
			if (UNEXPECTED(variable_ptr == NULL)) {
				goto assign_dim_error;
			}
			value = _get_zval_ptr_cv_BP_VAR_R((opline+1)->op1.var EXECUTE_DATA_CC);
			value = zend_assign_to_variable_ex(variable_ptr, value, IS_CV, EX_USES_STRICT_TYPES(), &garbage);
		}
		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
			ZVAL_COPY(EX_VAR(opline->result.var), value);
		}
		if (garbage) {
			GC_DTOR_NO_REF(garbage);
		}
	} else {
		if (EXPECTED(Z_ISREF_P(object_ptr))) {
			object_ptr = Z_REFVAL_P(object_ptr);
			if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
				goto try_assign_dim_array;
			}
		}
		if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) {
			zend_object *obj = Z_OBJ_P(object_ptr);

			GC_ADDREF(obj);
			dim = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
			if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_ISUNDEF_P(dim))) {
				dim = ZVAL_UNDEFINED_OP2();
			} else if ((IS_TMP_VAR|IS_VAR) == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
				dim++;
			}

			value = EX_VAR((opline+1)->op1.var);
			if (IS_CV == IS_CV && UNEXPECTED(Z_ISUNDEF_P(value))) {
				value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
			} else if (IS_CV & (IS_CV|IS_VAR)) {
				ZVAL_DEREF(value);
			}

			zend_assign_to_object_dim(obj, dim, value OPLINE_CC EXECUTE_DATA_CC);


			if (UNEXPECTED(GC_DELREF(obj) == 0)) {
				zend_objects_store_del(obj);
			}
		} else if (EXPECTED(Z_TYPE_P(object_ptr) == IS_STRING)) {
			if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED) {
				zend_use_new_element_for_string();


				UNDEF_RESULT();
			} else {
				dim = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
				value = EX_VAR((opline+1)->op1.var);
				zend_assign_to_string_offset(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC);


			}
		} else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
			if (Z_ISREF_P(orig_object_ptr)
			 && ZEND_REF_HAS_TYPE_SOURCES(Z_REF_P(orig_object_ptr))
			 && !zend_verify_ref_array_assignable(Z_REF_P(orig_object_ptr))) {
				dim = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);


				UNDEF_RESULT();
			} else {
				HashTable *ht = zend_new_array(8);
				uint8_t old_type = Z_TYPE_P(object_ptr);

				ZVAL_ARR(object_ptr, ht);
				if (UNEXPECTED(old_type == IS_FALSE)) {
					GC_ADDREF(ht);
					zend_false_to_array_deprecated();
					if (UNEXPECTED(GC_DELREF(ht) == 0)) {
						zend_array_destroy(ht);
						goto assign_dim_error;
					}
				}
				goto try_assign_dim_array;
			}
		} else {
			zend_use_scalar_as_array();
			dim = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
assign_dim_error:


			if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
				ZVAL_NULL(EX_VAR(opline->result.var));
			}
		}
	}
	if ((IS_TMP_VAR|IS_VAR) != IS_UNUSED) {
		zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
	}


	/* assign_dim has two opcodes! */
	ZEND_VM_NEXT_OPCODE_EX(1, 2);
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_ASSIGN_OBJ_REF_SPEC_CV_TMPVAR_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *property, *container, *value_ptr;

	SAVE_OPLINE();

	container = EX_VAR(opline->op1.var);
	property = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);

	value_ptr = _get_zval_ptr_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);

	if (1) {
		if (IS_CV == IS_UNUSED) {
			if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
				zend_assign_to_property_reference_this_const(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
			} else {
				zend_assign_to_property_reference_this_var(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
			}
		} else {
			if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
				zend_assign_to_property_reference_var_const(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
			} else {
				zend_assign_to_property_reference_var_var(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
			}
		}
	} else {
		zend_assign_to_property_reference(container, IS_CV, property, (IS_TMP_VAR|IS_VAR), value_ptr OPLINE_CC EXECUTE_DATA_CC);
	}


	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
	zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
	ZEND_VM_NEXT_OPCODE_EX(1, 2);
}

/* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CONST|VAR) */
static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_ASSIGN_OBJ_REF_SPEC_CV_TMPVAR_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *property, *container, *value_ptr;

	SAVE_OPLINE();

	container = EX_VAR(opline->op1.var);
	property = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);

	value_ptr = _get_zval_ptr_cv_BP_VAR_W((opline+1)->op1.var EXECUTE_DATA_CC);

	if (1) {
		if (IS_CV == IS_UNUSED) {
			if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
				zend_assign_to_property_reference_this_const(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
			} else {
				zend_assign_to_property_reference_this_var(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
			}
		} else {
			if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
				zend_assign_to_property_reference_var_const(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
			} else {
				zend_assign_to_property_reference_var_var(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
			}
		}
	} else {
		zend_assign_to_property_reference(container, IS_CV, property, (IS_TMP_VAR|IS_VAR), value_ptr OPLINE_CC EXECUTE_DATA_CC);
	}


	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));


	ZEND_VM_NEXT_OPCODE_EX(1, 2);
}

/* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CONST|VAR) */
static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_FAST_CONCAT_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;
	zend_string *op1_str, *op2_str, *str;


	op1 = EX_VAR(opline->op1.var);
	op2 = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
	if ((IS_CV == IS_CONST || EXPECTED(Z_TYPE_P(op1) == IS_STRING)) &&
	    ((IS_TMP_VAR|IS_VAR) == IS_CONST || EXPECTED(Z_TYPE_P(op2) == IS_STRING))) {
		zend_string *op1_str = Z_STR_P(op1);
		zend_string *op2_str = Z_STR_P(op2);
		zend_string *str;
		uint32_t flags = ZSTR_GET_COPYABLE_CONCAT_PROPERTIES_BOTH(op1_str, op2_str);

		if (IS_CV != IS_CONST && UNEXPECTED(ZSTR_LEN(op1_str) == 0)) {
			if ((IS_TMP_VAR|IS_VAR) == IS_CONST || (IS_TMP_VAR|IS_VAR) == IS_CV) {
				ZVAL_STR_COPY(EX_VAR(opline->result.var), op2_str);
			} else {
				ZVAL_STR(EX_VAR(opline->result.var), op2_str);
			}
			if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
				zend_string_release_ex(op1_str, 0);
			}
		} else if ((IS_TMP_VAR|IS_VAR) != IS_CONST && UNEXPECTED(ZSTR_LEN(op2_str) == 0)) {
			if (IS_CV == IS_CONST || IS_CV == IS_CV) {
				ZVAL_STR_COPY(EX_VAR(opline->result.var), op1_str);
			} else {
				ZVAL_STR(EX_VAR(opline->result.var), op1_str);
			}
			if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
				zend_string_release_ex(op2_str, 0);
			}
		} else if (IS_CV != IS_CONST && IS_CV != IS_CV &&
		    !ZSTR_IS_INTERNED(op1_str) && GC_REFCOUNT(op1_str) == 1) {
			size_t len = ZSTR_LEN(op1_str);

			str = zend_string_extend(op1_str, len + ZSTR_LEN(op2_str), 0);
			memcpy(ZSTR_VAL(str) + len, ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
			GC_ADD_FLAGS(str, flags);
			ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
			if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
				zend_string_release_ex(op2_str, 0);
			}
		} else {
			str = zend_string_alloc(ZSTR_LEN(op1_str) + ZSTR_LEN(op2_str), 0);
			memcpy(ZSTR_VAL(str), ZSTR_VAL(op1_str), ZSTR_LEN(op1_str));
			memcpy(ZSTR_VAL(str) + ZSTR_LEN(op1_str), ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
			GC_ADD_FLAGS(str, flags);
			ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
			if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
				zend_string_release_ex(op1_str, 0);
			}
			if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
				zend_string_release_ex(op2_str, 0);
			}
		}
		ZEND_VM_NEXT_OPCODE();
	}

	SAVE_OPLINE();
	if (IS_CV == IS_CONST) {
		op1_str = Z_STR_P(op1);
	} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
		op1_str = zend_string_copy(Z_STR_P(op1));
	} else {
		if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
			ZVAL_UNDEFINED_OP1();
		}
		op1_str = zval_get_string_func(op1);
	}
	if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
		op2_str = Z_STR_P(op2);
	} else if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
		op2_str = zend_string_copy(Z_STR_P(op2));
	} else {
		if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(op2) == IS_UNDEF)) {
			ZVAL_UNDEFINED_OP2();
		}
		op2_str = zval_get_string_func(op2);
	}
	do {
		if (IS_CV != IS_CONST) {
			if (UNEXPECTED(ZSTR_LEN(op1_str) == 0)) {
				if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
					if (UNEXPECTED(Z_REFCOUNTED_P(op2))) {
						GC_ADDREF(op2_str);
					}
				}
				ZVAL_STR(EX_VAR(opline->result.var), op2_str);
				zend_string_release_ex(op1_str, 0);
				break;
			}
		}
		if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
			if (UNEXPECTED(ZSTR_LEN(op2_str) == 0)) {
				if (IS_CV == IS_CONST) {
					if (UNEXPECTED(Z_REFCOUNTED_P(op1))) {
						GC_ADDREF(op1_str);
					}
				}
				ZVAL_STR(EX_VAR(opline->result.var), op1_str);
				zend_string_release_ex(op2_str, 0);
				break;
			}
		}
		str = zend_string_alloc(ZSTR_LEN(op1_str) + ZSTR_LEN(op2_str), 0);
		memcpy(ZSTR_VAL(str), ZSTR_VAL(op1_str), ZSTR_LEN(op1_str));
		memcpy(ZSTR_VAL(str) + ZSTR_LEN(op1_str), ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);

		ZSTR_COPY_CONCAT_PROPERTIES_BOTH(str, op1_str, op2_str);
		ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
		if (IS_CV != IS_CONST) {
			zend_string_release_ex(op1_str, 0);
		}
		if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
			zend_string_release_ex(op2_str, 0);
		}
	} while (0);


	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_INIT_METHOD_CALL_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *function_name;
	zval *object;
	zend_function *fbc;
	zend_class_entry *called_scope;
	zend_object *obj;
	zend_execute_data *call;
	uint32_t call_info;

	SAVE_OPLINE();

	object = EX_VAR(opline->op1.var);

	if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
		function_name = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
	}

	if ((IS_TMP_VAR|IS_VAR) != IS_CONST &&
	    UNEXPECTED(Z_TYPE_P(function_name) != IS_STRING)) {
		do {
			if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && Z_ISREF_P(function_name)) {
				function_name = Z_REFVAL_P(function_name);
				if (EXPECTED(Z_TYPE_P(function_name) == IS_STRING)) {
					break;
				}
			} else if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) {
				ZVAL_UNDEFINED_OP2();
				if (UNEXPECTED(EG(exception) != NULL)) {


					HANDLE_EXCEPTION();
				}
			}
			zend_throw_error(NULL, "Method name must be a string");
			zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));


			HANDLE_EXCEPTION();
		} while (0);
	}

	if (IS_CV == IS_UNUSED) {
		obj = Z_OBJ_P(object);
	} else {
		do {
			if (IS_CV != IS_CONST && EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
				obj = Z_OBJ_P(object);
			} else {
				if ((IS_CV & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(object))) {
					zend_reference *ref = Z_REF_P(object);

					object = &ref->val;
					if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
						obj = Z_OBJ_P(object);
						if (IS_CV & IS_VAR) {
							if (UNEXPECTED(GC_DELREF(ref) == 0)) {
								efree_size(ref, sizeof(zend_reference));
							} else {
								Z_ADDREF_P(object);
							}
						}
						break;
					}
				}
				if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
					object = ZVAL_UNDEFINED_OP1();
					if (UNEXPECTED(EG(exception) != NULL)) {
						if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
							zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
						}
						HANDLE_EXCEPTION();
					}
				}
				if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
					function_name = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
				}
				zend_invalid_method_call(object, function_name);
				zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));


				HANDLE_EXCEPTION();
			}
		} while (0);
	}

	called_scope = obj->ce;

	if ((IS_TMP_VAR|IS_VAR) == IS_CONST &&
	    EXPECTED(CACHED_PTR(opline->result.num) == called_scope)) {
		fbc = CACHED_PTR(opline->result.num + sizeof(void*));
	} else {
		zend_object *orig_obj = obj;

		if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
			function_name = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
		}

		/* First, locate the function. */
		fbc = obj->handlers->get_method(&obj, Z_STR_P(function_name), (((IS_TMP_VAR|IS_VAR) == IS_CONST) ? (RT_CONSTANT(opline, opline->op2) + 1) : NULL));
		if (UNEXPECTED(fbc == NULL)) {
			if (EXPECTED(!EG(exception))) {
				zend_undefined_method(orig_obj->ce, Z_STR_P(function_name));
			}
			zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
			if ((IS_CV & (IS_VAR|IS_TMP_VAR)) && GC_DELREF(orig_obj) == 0) {
				zend_objects_store_del(orig_obj);
			}
			HANDLE_EXCEPTION();
		}
		if ((IS_TMP_VAR|IS_VAR) == IS_CONST &&
		    EXPECTED(!(fbc->common.fn_flags & (ZEND_ACC_CALL_VIA_TRAMPOLINE|ZEND_ACC_NEVER_CACHE))) &&
		    EXPECTED(obj == orig_obj)) {
			CACHE_POLYMORPHIC_PTR(opline->result.num, called_scope, fbc);
		}
		if ((IS_CV & (IS_VAR|IS_TMP_VAR)) && UNEXPECTED(obj != orig_obj)) {
			GC_ADDREF(obj); /* For $this pointer */
			if (GC_DELREF(orig_obj) == 0) {
				zend_objects_store_del(orig_obj);
			}
		}
		if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!RUN_TIME_CACHE(&fbc->op_array))) {
			init_func_run_time_cache(&fbc->op_array);
		}
	}

	if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
		zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
	}

	call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_HAS_THIS;
	if (UNEXPECTED((fbc->common.fn_flags & ZEND_ACC_STATIC) != 0)) {
		if ((IS_CV & (IS_VAR|IS_TMP_VAR)) && GC_DELREF(obj) == 0) {
			zend_objects_store_del(obj);
			if (UNEXPECTED(EG(exception))) {
				HANDLE_EXCEPTION();
			}
		}
		/* call static method */
		obj = (zend_object*)called_scope;
		call_info = ZEND_CALL_NESTED_FUNCTION;
	} else if (IS_CV & (IS_VAR|IS_TMP_VAR|IS_CV)) {
		if (IS_CV == IS_CV) {
			GC_ADDREF(obj); /* For $this pointer */
		}
		/* CV may be changed indirectly (e.g. when it's a reference) */
		call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_HAS_THIS | ZEND_CALL_RELEASE_THIS;
	}

	call = zend_vm_stack_push_call_frame(call_info,
		fbc, opline->extended_value, obj);
	call->prev_execute_data = EX(call);
	EX(call) = call;

	ZEND_VM_NEXT_OPCODE();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *expr_ptr, new_expr;

	SAVE_OPLINE();
	if ((IS_CV == IS_VAR || IS_CV == IS_CV) &&
	    UNEXPECTED(opline->extended_value & ZEND_ARRAY_ELEMENT_REF)) {
		expr_ptr = _get_zval_ptr_cv_BP_VAR_W(opline->op1.var EXECUTE_DATA_CC);
		if (Z_ISREF_P(expr_ptr)) {
			Z_ADDREF_P(expr_ptr);
		} else {
			ZVAL_MAKE_REF_EX(expr_ptr, 2);
		}


	} else {
		expr_ptr = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
		if (IS_CV == IS_TMP_VAR) {
			/* pass */
		} else if (IS_CV == IS_CONST) {
			Z_TRY_ADDREF_P(expr_ptr);
		} else if (IS_CV == IS_CV) {
			ZVAL_DEREF(expr_ptr);
			Z_TRY_ADDREF_P(expr_ptr);
		} else /* if (IS_CV == IS_VAR) */ {
			if (UNEXPECTED(Z_ISREF_P(expr_ptr))) {
				zend_refcounted *ref = Z_COUNTED_P(expr_ptr);

				expr_ptr = Z_REFVAL_P(expr_ptr);
				if (UNEXPECTED(GC_DELREF(ref) == 0)) {
					ZVAL_COPY_VALUE(&new_expr, expr_ptr);
					expr_ptr = &new_expr;
					efree_size(ref, sizeof(zend_reference));
				} else if (Z_OPT_REFCOUNTED_P(expr_ptr)) {
					Z_ADDREF_P(expr_ptr);
				}
			}
		}
	}

	if ((IS_TMP_VAR|IS_VAR) != IS_UNUSED) {
		zval *offset = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
		zend_string *str;
		zend_ulong hval;

add_again:
		if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) {
			str = Z_STR_P(offset);
			if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
				if (ZEND_HANDLE_NUMERIC(str, hval)) {
					goto num_index;
				}
			}
str_index:
			zend_hash_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), str, expr_ptr);
		} else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
			hval = Z_LVAL_P(offset);
num_index:
			zend_hash_index_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), hval, expr_ptr);
		} else if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && EXPECTED(Z_TYPE_P(offset) == IS_REFERENCE)) {
			offset = Z_REFVAL_P(offset);
			goto add_again;
		} else if (UNEXPECTED(Z_TYPE_P(offset) == IS_NULL)) {
			zval tmp;
			if (IS_CV == IS_CV || IS_CV == IS_VAR) {
				ZVAL_COPY(&tmp, expr_ptr);
			}
			zend_error(E_DEPRECATED, "Using null as an array offset is deprecated, use an empty string instead");
			if (IS_CV == IS_CV || IS_CV == IS_VAR) {
				/* A userland error handler can do funky things to the expression, so reset it */
				zval_ptr_dtor(expr_ptr);
				ZVAL_COPY_VALUE(expr_ptr, &tmp);
			}
			if (UNEXPECTED(EG(exception))) {
				zval_ptr_dtor_nogc(expr_ptr);
				HANDLE_EXCEPTION();
			}
			str = ZSTR_EMPTY_ALLOC();
			goto str_index;
		} else if (Z_TYPE_P(offset) == IS_DOUBLE) {
			hval = zend_dval_to_lval_safe(Z_DVAL_P(offset));
			goto num_index;
		} else if (Z_TYPE_P(offset) == IS_FALSE) {
			hval = 0;
			goto num_index;
		} else if (Z_TYPE_P(offset) == IS_TRUE) {
			hval = 1;
			goto num_index;
		} else if (Z_TYPE_P(offset) == IS_RESOURCE) {
			zend_use_resource_as_offset(offset);
			hval = Z_RES_HANDLE_P(offset);
			goto num_index;
		} else if ((IS_TMP_VAR|IS_VAR) == IS_CV && Z_TYPE_P(offset) == IS_UNDEF) {
			ZVAL_UNDEFINED_OP2();
			str = ZSTR_EMPTY_ALLOC();
			goto str_index;
		} else {
			zend_illegal_array_offset_access(offset);
			zval_ptr_dtor_nogc(expr_ptr);
		}
		zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
	} else {
		if (!zend_hash_next_index_insert(Z_ARRVAL_P(EX_VAR(opline->result.var)), expr_ptr)) {
			zend_cannot_add_element();
			zval_ptr_dtor_nogc(expr_ptr);
		}
	}
	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_INIT_ARRAY_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	zval *array;
	uint32_t size;
	USE_OPLINE

	SAVE_OPLINE();
	array = EX_VAR(opline->result.var);
	if (IS_CV != IS_UNUSED) {
		size = opline->extended_value >> ZEND_ARRAY_SIZE_SHIFT;
		ZVAL_ARR(array, zend_new_array(size));
		/* Explicitly initialize array as not-packed if flag is set */
		if (opline->extended_value & ZEND_ARRAY_NOT_PACKED) {
			zend_hash_real_init_mixed(Z_ARRVAL_P(array));
		}
		ZEND_VM_TAIL_CALL(ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
	} else {
		ZVAL_ARR(array, zend_new_array(0));
		ZEND_VM_NEXT_OPCODE();
	}
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_UNSET_DIM_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *container;
	zval *offset;
	zend_ulong hval;
	zend_string *key;

	SAVE_OPLINE();
	container = EX_VAR(opline->op1.var);
	offset = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);

	do {
		if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
			HashTable *ht;

unset_dim_array:
			SEPARATE_ARRAY(container);
			ht = Z_ARRVAL_P(container);
offset_again:
			if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) {
				key = Z_STR_P(offset);
				if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
					if (ZEND_HANDLE_NUMERIC(key, hval)) {
						goto num_index_dim;
					}
				}
str_index_dim:
				ZEND_ASSERT(ht != &EG(symbol_table));
				zend_hash_del(ht, key);
			} else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
				hval = Z_LVAL_P(offset);
num_index_dim:
				zend_hash_index_del(ht, hval);
			} else if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && EXPECTED(Z_TYPE_P(offset) == IS_REFERENCE)) {
				offset = Z_REFVAL_P(offset);
				goto offset_again;
			} else if (Z_TYPE_P(offset) == IS_DOUBLE) {
				/* The array may be destroyed while throwing a warning in case the float is not representable as an int.
				 * Temporarily increase the refcount to detect this situation. */
				GC_TRY_ADDREF(ht);
				hval = zend_dval_to_lval_safe(Z_DVAL_P(offset));
				if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE) && !GC_DELREF(ht)) {
					zend_array_destroy(ht);
					break;
				}
				if (EG(exception)) {
					break;
				}
				goto num_index_dim;
			} else if (Z_TYPE_P(offset) == IS_NULL) {
				key = ZSTR_EMPTY_ALLOC();
				goto str_index_dim;
			} else if (Z_TYPE_P(offset) == IS_FALSE) {
				hval = 0;
				goto num_index_dim;
			} else if (Z_TYPE_P(offset) == IS_TRUE) {
				hval = 1;
				goto num_index_dim;
			} else if (Z_TYPE_P(offset) == IS_RESOURCE) {
				zend_use_resource_as_offset(offset);
				hval = Z_RES_HANDLE_P(offset);
				goto num_index_dim;
			} else if ((IS_TMP_VAR|IS_VAR) == IS_CV && Z_TYPE_P(offset) == IS_UNDEF) {
				ZVAL_UNDEFINED_OP2();
				key = ZSTR_EMPTY_ALLOC();
				goto str_index_dim;
			} else {
				zend_illegal_array_offset_unset(offset);
			}
			break;
		} else if (Z_ISREF_P(container)) {
			container = Z_REFVAL_P(container);
			if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
				goto unset_dim_array;
			}
		}
		if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
			container = ZVAL_UNDEFINED_OP1();
		}
		if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(offset) == IS_UNDEF)) {
			offset = ZVAL_UNDEFINED_OP2();
		}
		if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
			if ((IS_TMP_VAR|IS_VAR) == IS_CONST && Z_EXTRA_P(offset) == ZEND_EXTRA_VALUE) {
				offset++;
			}
			Z_OBJ_HT_P(container)->unset_dimension(Z_OBJ_P(container), offset);
		} else if (UNEXPECTED(Z_TYPE_P(container) == IS_STRING)) {
			zend_throw_error(NULL, "Cannot unset string offsets");
		} else if (UNEXPECTED(Z_TYPE_P(container) > IS_FALSE)) {
			zend_throw_error(NULL, "Cannot unset offset in a non-array variable");
		} else if (UNEXPECTED(Z_TYPE_P(container) == IS_FALSE)) {
			zend_false_to_array_deprecated();
		}
	} while (0);

	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));


	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_UNSET_OBJ_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *container;
	zval *offset;
	zend_string *name, *tmp_name;

	SAVE_OPLINE();
	container = EX_VAR(opline->op1.var);
	offset = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);

	do {
		if (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT)) {
			if (Z_ISREF_P(container)) {
				container = Z_REFVAL_P(container);
				if (Z_TYPE_P(container) != IS_OBJECT) {
					if (IS_CV == IS_CV
					 && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
						ZVAL_UNDEFINED_OP1();
					}
					break;
				}
			} else {
				break;
			}
		}
		if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
			name = Z_STR_P(offset);
		} else {
			name = zval_try_get_tmp_string(offset, &tmp_name);
			if (UNEXPECTED(!name)) {
				break;
			}
		}
		Z_OBJ_HT_P(container)->unset_property(Z_OBJ_P(container), name, (((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL));
		if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
			zend_tmp_string_release(tmp_name);
		}
	} while (0);

	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));


	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *container;
	bool result;
	zend_ulong hval;
	zval *offset;

	SAVE_OPLINE();
	container = EX_VAR(opline->op1.var);
	offset = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);

	if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
		HashTable *ht;
		zval *value;
		zend_string *str;

isset_dim_obj_array:
		ht = Z_ARRVAL_P(container);
isset_again:
		if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) {
			str = Z_STR_P(offset);
			if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
				if (ZEND_HANDLE_NUMERIC(str, hval)) {
					goto num_index_prop;
				}
			}
			value = zend_hash_find_ex(ht, str, (IS_TMP_VAR|IS_VAR) == IS_CONST);
		} else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
			hval = Z_LVAL_P(offset);
num_index_prop:
			value = zend_hash_index_find(ht, hval);
		} else if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(offset))) {
			offset = Z_REFVAL_P(offset);
			goto isset_again;
		} else {
			value = zend_find_array_dim_slow(ht, offset EXECUTE_DATA_CC);
			if (UNEXPECTED(EG(exception))) {
				result = 0;
				goto isset_dim_obj_exit;
			}
		}

		if (!(opline->extended_value & ZEND_ISEMPTY)) {
			/* > IS_NULL means not IS_UNDEF and not IS_NULL */
			result = value != NULL && Z_TYPE_P(value) > IS_NULL &&
			    (!Z_ISREF_P(value) || Z_TYPE_P(Z_REFVAL_P(value)) != IS_NULL);

			if (IS_CV & (IS_CONST|IS_CV)) {
				/* avoid exception check */
				zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
				ZEND_VM_SMART_BRANCH(result, 0);
			}
		} else {
			result = (value == NULL || !i_zend_is_true(value));
		}
		goto isset_dim_obj_exit;
	} else if ((IS_CV & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(container))) {
		container = Z_REFVAL_P(container);
		if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
			goto isset_dim_obj_array;
		}
	}

	if ((IS_TMP_VAR|IS_VAR) == IS_CONST && Z_EXTRA_P(offset) == ZEND_EXTRA_VALUE) {
		offset++;
	}
	if (!(opline->extended_value & ZEND_ISEMPTY)) {
		result = zend_isset_dim_slow(container, offset EXECUTE_DATA_CC);
	} else {
		result = zend_isempty_dim_slow(container, offset EXECUTE_DATA_CC);
	}

isset_dim_obj_exit:
	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));


	ZEND_VM_SMART_BRANCH(result, 1);
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *container;
	int result;
	zval *offset;
	zend_string *name, *tmp_name;

	SAVE_OPLINE();
	container = _get_zval_ptr_cv_BP_VAR_IS(opline->op1.var EXECUTE_DATA_CC);
	offset = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);

	if (IS_CV == IS_CONST ||
	    (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
		if ((IS_CV & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
			container = Z_REFVAL_P(container);
			if (UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT)) {
				result = (opline->extended_value & ZEND_ISEMPTY);
				goto isset_object_finish;
			}
		} else {
			result = (opline->extended_value & ZEND_ISEMPTY);
			goto isset_object_finish;
		}
	}

	if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
		name = Z_STR_P(offset);
	} else {
		name = zval_try_get_tmp_string(offset, &tmp_name);
		if (UNEXPECTED(!name)) {
			result = 0;
			goto isset_object_finish;
		}
	}

	result =
		(opline->extended_value & ZEND_ISEMPTY) ^
		Z_OBJ_HT_P(container)->has_property(Z_OBJ_P(container), name, (opline->extended_value & ZEND_ISEMPTY), (((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(opline->extended_value & ~ZEND_ISEMPTY) : NULL));

	if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
		zend_tmp_string_release(tmp_name);
	}

isset_object_finish:
	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));


	ZEND_VM_SMART_BRANCH(result, 1);
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_ARRAY_KEY_EXISTS_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE

	zval *key, *subject;
	HashTable *ht;
	bool result;

	SAVE_OPLINE();

	key = EX_VAR(opline->op1.var);
	subject = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);

	if (EXPECTED(Z_TYPE_P(subject) == IS_ARRAY)) {
array_key_exists_array:
		ht = Z_ARRVAL_P(subject);
		result = zend_array_key_exists_fast(ht, key OPLINE_CC EXECUTE_DATA_CC);
	} else {
		if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(subject))) {
			subject = Z_REFVAL_P(subject);
			if (EXPECTED(Z_TYPE_P(subject) == IS_ARRAY)) {
				goto array_key_exists_array;
			}
		}
		zend_array_key_exists_error(subject, key OPLINE_CC EXECUTE_DATA_CC);
		result = 0;
	}

	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));


	ZEND_VM_SMART_BRANCH(result, 1);
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_YIELD_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE

	zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C);

	SAVE_OPLINE();
	if (UNEXPECTED(generator->flags & ZEND_GENERATOR_FORCED_CLOSE)) {
		ZEND_VM_TAIL_CALL(zend_yield_in_closed_generator_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
	}

	/* Destroy the previously yielded value */
	zval_ptr_dtor(&generator->value);

	/* Destroy the previously yielded key */
	zval_ptr_dtor(&generator->key);

	/* Set the new yielded value */
	if (IS_CV != IS_UNUSED) {
		if (UNEXPECTED(EX(func)->op_array.fn_flags & ZEND_ACC_RETURN_REFERENCE)) {
			/* Constants and temporary variables aren't yieldable by reference,
			 * but we still allow them with a notice. */
			if (IS_CV & (IS_CONST|IS_TMP_VAR)) {
				zval *value;

				zend_error(E_NOTICE, "Only variable references should be yielded by reference");

				value = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
				ZVAL_COPY_VALUE(&generator->value, value);
				if (IS_CV == IS_CONST) {
					if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
						Z_ADDREF(generator->value);
					}
				}
			} else {
				zval *value_ptr = _get_zval_ptr_cv_BP_VAR_W(opline->op1.var EXECUTE_DATA_CC);

				/* If a function call result is yielded and the function did
				 * not return by reference we throw a notice. */
				do {
					if (IS_CV == IS_VAR) {
						ZEND_ASSERT(value_ptr != &EG(uninitialized_zval));
						if (opline->extended_value == ZEND_RETURNS_FUNCTION
						 && !Z_ISREF_P(value_ptr)) {
							zend_error(E_NOTICE, "Only variable references should be yielded by reference");
							ZVAL_COPY(&generator->value, value_ptr);
							break;
						}
					}
					if (Z_ISREF_P(value_ptr)) {
						Z_ADDREF_P(value_ptr);
					} else {
						ZVAL_MAKE_REF_EX(value_ptr, 2);
					}
					ZVAL_REF(&generator->value, Z_REF_P(value_ptr));
				} while (0);


			}
		} else {
			zval *value = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);

			/* Consts, temporary variables and references need copying */
			if (IS_CV == IS_CONST) {
				ZVAL_COPY_VALUE(&generator->value, value);
				if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
					Z_ADDREF(generator->value);
				}
			} else if (IS_CV == IS_TMP_VAR) {
				ZVAL_COPY_VALUE(&generator->value, value);
			} else if ((IS_CV & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) {
				ZVAL_COPY(&generator->value, Z_REFVAL_P(value));


			} else {
				ZVAL_COPY_VALUE(&generator->value, value);
				if (IS_CV == IS_CV) {
					if (Z_OPT_REFCOUNTED_P(value)) Z_ADDREF_P(value);
				}
			}
		}
	} else {
		/* If no value was specified yield null */
		ZVAL_NULL(&generator->value);
	}

	/* Set the new yielded key */
	if ((IS_TMP_VAR|IS_VAR) != IS_UNUSED) {
		zval *key = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
		if (((IS_TMP_VAR|IS_VAR) & (IS_CV|IS_VAR)) && UNEXPECTED(Z_TYPE_P(key) == IS_REFERENCE)) {
			key = Z_REFVAL_P(key);
		}
		ZVAL_COPY(&generator->key, key);
		zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));

		if (Z_TYPE(generator->key) == IS_LONG
		    && Z_LVAL(generator->key) > generator->largest_used_integer_key
		) {
			generator->largest_used_integer_key = Z_LVAL(generator->key);
		}
	} else {
		/* If no key was specified we use auto-increment keys */
		generator->largest_used_integer_key++;
		ZVAL_LONG(&generator->key, generator->largest_used_integer_key);
	}

	if (RETURN_VALUE_USED(opline)) {
		/* If the return value of yield is used set the send
		 * target and initialize it to NULL */
		generator->send_target = EX_VAR(opline->result.var);
		ZVAL_NULL(generator->send_target);
	} else {
		generator->send_target = NULL;
	}

	/* The GOTO VM uses a local opline variable. We need to set the opline
	 * variable in execute_data so we don't resume at an old position. */
	SAVE_OPLINE();

	ZEND_VM_RETURN();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_IS_IDENTICAL_SPEC_CV_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;
	bool result;

	SAVE_OPLINE();
	op1 = _get_zval_ptr_cv_deref_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
	op2 = _get_zval_ptr_tmp(opline->op2.var EXECUTE_DATA_CC);
	result = fast_is_identical_function(op1, op2);


	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
	ZEND_VM_SMART_BRANCH(result, 1);
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_IS_NOT_IDENTICAL_SPEC_CV_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;
	bool result;

	SAVE_OPLINE();
	op1 = _get_zval_ptr_cv_deref_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
	op2 = _get_zval_ptr_tmp(opline->op2.var EXECUTE_DATA_CC);
	result = fast_is_not_identical_function(op1, op2);


	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
	ZEND_VM_SMART_BRANCH(result, 1);
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_ASSIGN_SPEC_CV_TMP_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *value;
	zval *variable_ptr;

	SAVE_OPLINE();
	value = _get_zval_ptr_tmp(opline->op2.var EXECUTE_DATA_CC);
	variable_ptr = EX_VAR(opline->op1.var);

	if (0 || UNEXPECTED(0)) {
		zend_refcounted *garbage = NULL;

		value = zend_assign_to_variable_ex(variable_ptr, value, IS_TMP_VAR, EX_USES_STRICT_TYPES(), &garbage);
		if (UNEXPECTED(0)) {
			ZVAL_COPY(EX_VAR(opline->result.var), value);
		}
		if (garbage) {
			GC_DTOR_NO_REF(garbage);
		}
	} else {
		value = zend_assign_to_variable(variable_ptr, value, IS_TMP_VAR, EX_USES_STRICT_TYPES());
	}


	/* zend_assign_to_variable() always takes care of op2, never free it! */

	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_ASSIGN_SPEC_CV_TMP_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *value;
	zval *variable_ptr;

	SAVE_OPLINE();
	value = _get_zval_ptr_tmp(opline->op2.var EXECUTE_DATA_CC);
	variable_ptr = EX_VAR(opline->op1.var);

	if (0 || UNEXPECTED(1)) {
		zend_refcounted *garbage = NULL;

		value = zend_assign_to_variable_ex(variable_ptr, value, IS_TMP_VAR, EX_USES_STRICT_TYPES(), &garbage);
		if (UNEXPECTED(1)) {
			ZVAL_COPY(EX_VAR(opline->result.var), value);
		}
		if (garbage) {
			GC_DTOR_NO_REF(garbage);
		}
	} else {
		value = zend_assign_to_variable(variable_ptr, value, IS_TMP_VAR, EX_USES_STRICT_TYPES());
	}


	/* zend_assign_to_variable() always takes care of op2, never free it! */

	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_IS_IDENTICAL_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;
	bool result;

	SAVE_OPLINE();
	op1 = _get_zval_ptr_cv_deref_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
	op2 = _get_zval_ptr_var_deref(opline->op2.var EXECUTE_DATA_CC);
	result = fast_is_identical_function(op1, op2);


	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
	ZEND_VM_SMART_BRANCH(result, 1);
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_IS_NOT_IDENTICAL_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;
	bool result;

	SAVE_OPLINE();
	op1 = _get_zval_ptr_cv_deref_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
	op2 = _get_zval_ptr_var_deref(opline->op2.var EXECUTE_DATA_CC);
	result = fast_is_not_identical_function(op1, op2);


	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
	ZEND_VM_SMART_BRANCH(result, 1);
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_ASSIGN_SPEC_CV_VAR_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *value;
	zval *variable_ptr;

	SAVE_OPLINE();
	value = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
	variable_ptr = EX_VAR(opline->op1.var);

	if (0 || UNEXPECTED(0)) {
		zend_refcounted *garbage = NULL;

		value = zend_assign_to_variable_ex(variable_ptr, value, IS_VAR, EX_USES_STRICT_TYPES(), &garbage);
		if (UNEXPECTED(0)) {
			ZVAL_COPY(EX_VAR(opline->result.var), value);
		}
		if (garbage) {
			GC_DTOR_NO_REF(garbage);
		}
	} else {
		value = zend_assign_to_variable(variable_ptr, value, IS_VAR, EX_USES_STRICT_TYPES());
	}


	/* zend_assign_to_variable() always takes care of op2, never free it! */

	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_ASSIGN_SPEC_CV_VAR_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *value;
	zval *variable_ptr;

	SAVE_OPLINE();
	value = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
	variable_ptr = EX_VAR(opline->op1.var);

	if (0 || UNEXPECTED(1)) {
		zend_refcounted *garbage = NULL;

		value = zend_assign_to_variable_ex(variable_ptr, value, IS_VAR, EX_USES_STRICT_TYPES(), &garbage);
		if (UNEXPECTED(1)) {
			ZVAL_COPY(EX_VAR(opline->result.var), value);
		}
		if (garbage) {
			GC_DTOR_NO_REF(garbage);
		}
	} else {
		value = zend_assign_to_variable(variable_ptr, value, IS_VAR, EX_USES_STRICT_TYPES());
	}


	/* zend_assign_to_variable() always takes care of op2, never free it! */

	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_ASSIGN_REF_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *variable_ptr;
	zval *value_ptr;
	zend_refcounted *garbage = NULL;

	SAVE_OPLINE();
	value_ptr = _get_zval_ptr_ptr_var(opline->op2.var EXECUTE_DATA_CC);
	variable_ptr = EX_VAR(opline->op1.var);

	if (IS_CV == IS_VAR &&
	           UNEXPECTED(Z_TYPE_P(EX_VAR(opline->op1.var)) != IS_INDIRECT)) {

		zend_throw_error(NULL, "Cannot assign by reference to an array dimension of an object");
		variable_ptr = &EG(uninitialized_zval);
	} else if (IS_VAR == IS_VAR &&
	           opline->extended_value == ZEND_RETURNS_FUNCTION &&
			   UNEXPECTED(!Z_ISREF_P(value_ptr))) {

		variable_ptr = zend_wrong_assign_to_variable_reference(
			variable_ptr, value_ptr, &garbage OPLINE_CC EXECUTE_DATA_CC);
	} else {
		zend_assign_to_variable_reference(variable_ptr, value_ptr, &garbage);
	}

	if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
		ZVAL_COPY(EX_VAR(opline->result.var), variable_ptr);
	}

	if (garbage) {
		GC_DTOR(garbage);
	}

	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));


	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_INSTANCEOF_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *expr;
	bool result;

	SAVE_OPLINE();
	expr = EX_VAR(opline->op1.var);

try_instanceof:
	if (Z_TYPE_P(expr) == IS_OBJECT) {
		zend_class_entry *ce;

		if (IS_VAR == IS_CONST) {
			ce = CACHED_PTR(opline->extended_value);
			if (UNEXPECTED(ce == NULL)) {
				ce = zend_lookup_class_ex(Z_STR_P(RT_CONSTANT(opline, opline->op2)), Z_STR_P(RT_CONSTANT(opline, opline->op2) + 1), ZEND_FETCH_CLASS_NO_AUTOLOAD);
				if (EXPECTED(ce)) {
					CACHE_PTR(opline->extended_value, ce);
				}
			}
		} else if (IS_VAR == IS_UNUSED) {
			ce = zend_fetch_class(NULL, opline->op2.num);
			if (UNEXPECTED(ce == NULL)) {


				ZVAL_UNDEF(EX_VAR(opline->result.var));
				HANDLE_EXCEPTION();
			}
		} else {
			ce = Z_CE_P(EX_VAR(opline->op2.var));
		}
		result = ce && instanceof_function(Z_OBJCE_P(expr), ce);
	} else if ((IS_CV & (IS_VAR|IS_CV)) && Z_TYPE_P(expr) == IS_REFERENCE) {
		expr = Z_REFVAL_P(expr);
		goto try_instanceof;
	} else {
		if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(expr) == IS_UNDEF)) {
			ZVAL_UNDEFINED_OP1();
		}
		result = 0;
	}


	ZEND_VM_SMART_BRANCH(result, 1);
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_ASSIGN_DIM_OP_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *var_ptr;
	zval *value, *container, *dim;
	HashTable *ht;

	SAVE_OPLINE();
	container = EX_VAR(opline->op1.var);

	if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
assign_dim_op_array:
		SEPARATE_ARRAY(container);
		ht = Z_ARRVAL_P(container);
assign_dim_op_new_array:
		dim = NULL;
		if (IS_UNUSED == IS_UNUSED) {
			var_ptr = zend_hash_next_index_insert(ht, &EG(uninitialized_zval));
			if (UNEXPECTED(!var_ptr)) {
				zend_cannot_add_element();
				goto assign_dim_op_ret_null;
			}
		} else {
			if (IS_UNUSED == IS_CONST) {
				var_ptr = zend_fetch_dimension_address_inner_RW_CONST(ht, dim EXECUTE_DATA_CC);
			} else {
				var_ptr = zend_fetch_dimension_address_inner_RW(ht, dim EXECUTE_DATA_CC);
			}
			if (UNEXPECTED(!var_ptr)) {
				goto assign_dim_op_ret_null;
			}
		}

		value = get_op_data_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1);

		do {
			if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_ISREF_P(var_ptr))) {
				zend_reference *ref = Z_REF_P(var_ptr);
				var_ptr = Z_REFVAL_P(var_ptr);
				if (UNEXPECTED(ZEND_REF_HAS_TYPE_SOURCES(ref))) {
					zend_binary_assign_op_typed_ref(ref, value OPLINE_CC EXECUTE_DATA_CC);
					break;
				}
			}
			zend_binary_op(var_ptr, var_ptr, value OPLINE_CC);
		} while (0);

		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
			ZVAL_COPY(EX_VAR(opline->result.var), var_ptr);
		}
		FREE_OP((opline+1)->op1_type, (opline+1)->op1.var);
	} else {
		if (EXPECTED(Z_ISREF_P(container))) {
			container = Z_REFVAL_P(container);
			if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
				goto assign_dim_op_array;
			}
		}

		if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
			zend_object *obj = Z_OBJ_P(container);

			dim = NULL;
			if (IS_UNUSED == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
				dim++;
			}
			zend_binary_assign_op_obj_dim(obj, dim OPLINE_CC EXECUTE_DATA_CC);
		} else if (EXPECTED(Z_TYPE_P(container) <= IS_FALSE)) {
			uint8_t old_type;

			if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(container) == IS_UNDEF)) {
				ZVAL_UNDEFINED_OP1();
			}
			ht = zend_new_array(8);
			old_type = Z_TYPE_P(container);
			ZVAL_ARR(container, ht);
			if (UNEXPECTED(old_type == IS_FALSE)) {
				GC_ADDREF(ht);
				zend_false_to_array_deprecated();
				if (UNEXPECTED(GC_DELREF(ht) == 0)) {
					zend_array_destroy(ht);
					goto assign_dim_op_ret_null;
				}
			}
			goto assign_dim_op_new_array;
		} else {
			dim = NULL;
			zend_binary_assign_op_dim_slow(container, dim OPLINE_CC EXECUTE_DATA_CC);
assign_dim_op_ret_null:
			FREE_OP((opline+1)->op1_type, (opline+1)->op1.var);
			if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
				ZVAL_NULL(EX_VAR(opline->result.var));
			}
		}
	}




	ZEND_VM_NEXT_OPCODE_EX(1, 2);
}

static zend_never_inline ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV_EX  zend_fetch_var_address_helper_SPEC_CV_UNUSED(ZEND_OPCODE_HANDLER_ARGS_EX int type)
{
	USE_OPLINE
	zval *varname;
	zval *retval;
	zend_string *name, *tmp_name;
	HashTable *target_symbol_table;

	SAVE_OPLINE();
	varname = EX_VAR(opline->op1.var);

	if (IS_CV == IS_CONST) {
		name = Z_STR_P(varname);
	} else if (EXPECTED(Z_TYPE_P(varname) == IS_STRING)) {
		name = Z_STR_P(varname);
		tmp_name = NULL;
	} else {
		if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(varname) == IS_UNDEF)) {
			ZVAL_UNDEFINED_OP1();
		}
		name = zval_try_get_tmp_string(varname, &tmp_name);
		if (UNEXPECTED(!name)) {
			if (!(opline->extended_value & ZEND_FETCH_GLOBAL_LOCK)) {


			}
			ZVAL_UNDEF(EX_VAR(opline->result.var));
			HANDLE_EXCEPTION();
		}
	}

	target_symbol_table = zend_get_target_symbol_table(opline->extended_value EXECUTE_DATA_CC);
	retval = zend_hash_find_ex(target_symbol_table, name, IS_CV == IS_CONST);
	if (retval == NULL) {
		if (UNEXPECTED(zend_string_equals(name, ZSTR_KNOWN(ZEND_STR_THIS)))) {
fetch_this:
			zend_fetch_this_var(type OPLINE_CC EXECUTE_DATA_CC);
			if (IS_CV != IS_CONST) {
				zend_tmp_string_release(tmp_name);
			}
			ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
		}
		if (type == BP_VAR_W) {
			retval = zend_hash_add_new(target_symbol_table, name, &EG(uninitialized_zval));
		} else if (type == BP_VAR_IS || type == BP_VAR_UNSET) {
			retval = &EG(uninitialized_zval);
		} else {
			if (IS_CV == IS_CV) {
				/* Keep name alive in case an error handler tries to free it. */
				zend_string_addref(name);
			}
			zend_error_unchecked(E_WARNING, "Undefined %svariable $%S",
				(opline->extended_value & ZEND_FETCH_GLOBAL ? "global " : ""), name);
			if (type == BP_VAR_RW && !EG(exception)) {
				retval = zend_hash_update(target_symbol_table, name, &EG(uninitialized_zval));
			} else {
				retval = &EG(uninitialized_zval);
			}
			if (IS_CV == IS_CV) {
				zend_string_release(name);
			}
		}
	/* GLOBAL or $$name variable may be an INDIRECT pointer to CV */
	} else if (Z_TYPE_P(retval) == IS_INDIRECT) {
		retval = Z_INDIRECT_P(retval);
		if (Z_TYPE_P(retval) == IS_UNDEF) {
			if (UNEXPECTED(zend_string_equals(name, ZSTR_KNOWN(ZEND_STR_THIS)))) {
				goto fetch_this;
			}
			if (type == BP_VAR_W) {
				ZVAL_NULL(retval);
			} else if (type == BP_VAR_IS || type == BP_VAR_UNSET) {
				retval = &EG(uninitialized_zval);
			} else {
				zend_error_unchecked(E_WARNING, "Undefined %svariable $%S",
					(opline->extended_value & ZEND_FETCH_GLOBAL ? "global " : ""), name);
				if (type == BP_VAR_RW && !EG(exception)) {
					ZVAL_NULL(retval);
				} else {
					retval = &EG(uninitialized_zval);
				}
			}
		}
	}

	if (!(opline->extended_value & ZEND_FETCH_GLOBAL_LOCK)) {


	}

	if (IS_CV != IS_CONST) {
		zend_tmp_string_release(tmp_name);
	}

	ZEND_ASSERT(retval != NULL);
	if (type == BP_VAR_R || type == BP_VAR_IS) {
		ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
	} else {
		ZVAL_INDIRECT(EX_VAR(opline->result.var), retval);
	}
	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_FETCH_R_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	ZEND_VM_DISPATCH_TO_HELPER(zend_fetch_var_address_helper_SPEC_CV_UNUSED(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_EX BP_VAR_R));
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_FETCH_W_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	ZEND_VM_DISPATCH_TO_HELPER(zend_fetch_var_address_helper_SPEC_CV_UNUSED(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_EX BP_VAR_W));
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_FETCH_RW_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	ZEND_VM_DISPATCH_TO_HELPER(zend_fetch_var_address_helper_SPEC_CV_UNUSED(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_EX BP_VAR_RW));
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_FETCH_FUNC_ARG_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	int fetch_type =
		(UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) ?
			BP_VAR_W : BP_VAR_R;
	ZEND_VM_DISPATCH_TO_HELPER(zend_fetch_var_address_helper_SPEC_CV_UNUSED(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_EX fetch_type));
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_FETCH_UNSET_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	ZEND_VM_DISPATCH_TO_HELPER(zend_fetch_var_address_helper_SPEC_CV_UNUSED(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_EX BP_VAR_UNSET));
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_FETCH_IS_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	ZEND_VM_DISPATCH_TO_HELPER(zend_fetch_var_address_helper_SPEC_CV_UNUSED(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_EX BP_VAR_IS));
}

/* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CONST|VAR) */
static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_FETCH_DIM_W_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *container;

	SAVE_OPLINE();
	container = EX_VAR(opline->op1.var);
	zend_fetch_dimension_address_W(container, NULL, IS_UNUSED OPLINE_CC EXECUTE_DATA_CC);


	if (IS_CV == IS_VAR) {
		FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
	}
	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_FETCH_DIM_RW_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *container;

	SAVE_OPLINE();
	container = EX_VAR(opline->op1.var);
	zend_fetch_dimension_address_RW(container, NULL, IS_UNUSED OPLINE_CC EXECUTE_DATA_CC);


	if (IS_CV == IS_VAR) {
		FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
	}
	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
#if 0
	USE_OPLINE
#endif

	if (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) {
		if ((IS_CV & (IS_CONST|IS_TMP_VAR))) {
			ZEND_VM_TAIL_CALL(zend_use_tmp_in_write_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
		}
		ZEND_VM_TAIL_CALL(ZEND_FETCH_DIM_W_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
	} else {
		if (IS_UNUSED == IS_UNUSED) {
			ZEND_VM_TAIL_CALL(zend_use_undef_in_read_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
		}
		ZEND_VM_TAIL_CALL(ZEND_NULL_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
	}
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_ASSIGN_DIM_SPEC_CV_UNUSED_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *object_ptr, *orig_object_ptr;
	zval *value;
	zval *variable_ptr;
	zval *dim;
	zend_refcounted *garbage = NULL;

	SAVE_OPLINE();
	orig_object_ptr = object_ptr = EX_VAR(opline->op1.var);

	if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
try_assign_dim_array:
		SEPARATE_ARRAY(object_ptr);
		if (IS_UNUSED == IS_UNUSED) {
			value = RT_CONSTANT((opline+1), (opline+1)->op1);
			if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
				HashTable *ht = Z_ARRVAL_P(object_ptr);
				if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE)) {
					GC_ADDREF(ht);
				}
				value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
				if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE) && !GC_DELREF(ht)) {
					zend_array_destroy(ht);
					goto assign_dim_error;
				}
			}
			if (IS_CONST == IS_CV || IS_CONST == IS_VAR) {
				ZVAL_DEREF(value);
			}
			value = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), value);
			if (UNEXPECTED(value == NULL)) {
				zend_cannot_add_element();
				goto assign_dim_error;
			} else if (IS_CONST == IS_CV) {
				if (Z_REFCOUNTED_P(value)) {
					Z_ADDREF_P(value);
				}
			} else if (IS_CONST == IS_VAR) {
				zval *free_op_data = EX_VAR((opline+1)->op1.var);
				if (Z_ISREF_P(free_op_data)) {
					if (Z_REFCOUNTED_P(value)) {
						Z_ADDREF_P(value);
					}
					zval_ptr_dtor_nogc(free_op_data);
				}
			} else if (IS_CONST == IS_CONST) {
				if (UNEXPECTED(Z_REFCOUNTED_P(value))) {
					Z_ADDREF_P(value);
				}
			}
		} else {
			dim = NULL;
			if (IS_UNUSED == IS_CONST) {
				variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
			} else {
				variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
			}
			if (UNEXPECTED(variable_ptr == NULL)) {
				goto assign_dim_error;
			}
			value = RT_CONSTANT((opline+1), (opline+1)->op1);
			value = zend_assign_to_variable_ex(variable_ptr, value, IS_CONST, EX_USES_STRICT_TYPES(), &garbage);
		}
		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
			ZVAL_COPY(EX_VAR(opline->result.var), value);
		}
		if (garbage) {
			GC_DTOR_NO_REF(garbage);
		}
	} else {
		if (EXPECTED(Z_ISREF_P(object_ptr))) {
			object_ptr = Z_REFVAL_P(object_ptr);
			if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
				goto try_assign_dim_array;
			}
		}
		if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) {
			zend_object *obj = Z_OBJ_P(object_ptr);

			GC_ADDREF(obj);
			dim = NULL;
			if (IS_UNUSED == IS_CV && UNEXPECTED(Z_ISUNDEF_P(dim))) {
				dim = ZVAL_UNDEFINED_OP2();
			} else if (IS_UNUSED == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
				dim++;
			}

			value = RT_CONSTANT((opline+1), (opline+1)->op1);
			if (IS_CONST == IS_CV && UNEXPECTED(Z_ISUNDEF_P(value))) {
				value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
			} else if (IS_CONST & (IS_CV|IS_VAR)) {
				ZVAL_DEREF(value);
			}

			zend_assign_to_object_dim(obj, dim, value OPLINE_CC EXECUTE_DATA_CC);


			if (UNEXPECTED(GC_DELREF(obj) == 0)) {
				zend_objects_store_del(obj);
			}
		} else if (EXPECTED(Z_TYPE_P(object_ptr) == IS_STRING)) {
			if (IS_UNUSED == IS_UNUSED) {
				zend_use_new_element_for_string();


				UNDEF_RESULT();
			} else {
				dim = NULL;
				value = RT_CONSTANT((opline+1), (opline+1)->op1);
				zend_assign_to_string_offset(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC);


			}
		} else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
			if (Z_ISREF_P(orig_object_ptr)
			 && ZEND_REF_HAS_TYPE_SOURCES(Z_REF_P(orig_object_ptr))
			 && !zend_verify_ref_array_assignable(Z_REF_P(orig_object_ptr))) {
				dim = NULL;


				UNDEF_RESULT();
			} else {
				HashTable *ht = zend_new_array(8);
				uint8_t old_type = Z_TYPE_P(object_ptr);

				ZVAL_ARR(object_ptr, ht);
				if (UNEXPECTED(old_type == IS_FALSE)) {
					GC_ADDREF(ht);
					zend_false_to_array_deprecated();
					if (UNEXPECTED(GC_DELREF(ht) == 0)) {
						zend_array_destroy(ht);
						goto assign_dim_error;
					}
				}
				goto try_assign_dim_array;
			}
		} else {
			zend_use_scalar_as_array();
			dim = NULL;
assign_dim_error:


			if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
				ZVAL_NULL(EX_VAR(opline->result.var));
			}
		}
	}
	if (IS_UNUSED != IS_UNUSED) {


	}


	/* assign_dim has two opcodes! */
	ZEND_VM_NEXT_OPCODE_EX(1, 2);
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_ASSIGN_DIM_SPEC_CV_UNUSED_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *object_ptr, *orig_object_ptr;
	zval *value;
	zval *variable_ptr;
	zval *dim;
	zend_refcounted *garbage = NULL;

	SAVE_OPLINE();
	orig_object_ptr = object_ptr = EX_VAR(opline->op1.var);

	if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
try_assign_dim_array:
		SEPARATE_ARRAY(object_ptr);
		if (IS_UNUSED == IS_UNUSED) {
			value = _get_zval_ptr_tmp((opline+1)->op1.var EXECUTE_DATA_CC);
			if (IS_TMP_VAR == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
				HashTable *ht = Z_ARRVAL_P(object_ptr);
				if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE)) {
					GC_ADDREF(ht);
				}
				value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
				if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE) && !GC_DELREF(ht)) {
					zend_array_destroy(ht);
					goto assign_dim_error;
				}
			}
			if (IS_TMP_VAR == IS_CV || IS_TMP_VAR == IS_VAR) {
				ZVAL_DEREF(value);
			}
			value = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), value);
			if (UNEXPECTED(value == NULL)) {
				zend_cannot_add_element();
				goto assign_dim_error;
			} else if (IS_TMP_VAR == IS_CV) {
				if (Z_REFCOUNTED_P(value)) {
					Z_ADDREF_P(value);
				}
			} else if (IS_TMP_VAR == IS_VAR) {
				zval *free_op_data = EX_VAR((opline+1)->op1.var);
				if (Z_ISREF_P(free_op_data)) {
					if (Z_REFCOUNTED_P(value)) {
						Z_ADDREF_P(value);
					}
					zval_ptr_dtor_nogc(free_op_data);
				}
			} else if (IS_TMP_VAR == IS_CONST) {
				if (UNEXPECTED(Z_REFCOUNTED_P(value))) {
					Z_ADDREF_P(value);
				}
			}
		} else {
			dim = NULL;
			if (IS_UNUSED == IS_CONST) {
				variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
			} else {
				variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
			}
			if (UNEXPECTED(variable_ptr == NULL)) {
				goto assign_dim_error;
			}
			value = _get_zval_ptr_tmp((opline+1)->op1.var EXECUTE_DATA_CC);
			value = zend_assign_to_variable_ex(variable_ptr, value, IS_TMP_VAR, EX_USES_STRICT_TYPES(), &garbage);
		}
		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
			ZVAL_COPY(EX_VAR(opline->result.var), value);
		}
		if (garbage) {
			GC_DTOR_NO_REF(garbage);
		}
	} else {
		if (EXPECTED(Z_ISREF_P(object_ptr))) {
			object_ptr = Z_REFVAL_P(object_ptr);
			if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
				goto try_assign_dim_array;
			}
		}
		if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) {
			zend_object *obj = Z_OBJ_P(object_ptr);

			GC_ADDREF(obj);
			dim = NULL;
			if (IS_UNUSED == IS_CV && UNEXPECTED(Z_ISUNDEF_P(dim))) {
				dim = ZVAL_UNDEFINED_OP2();
			} else if (IS_UNUSED == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
				dim++;
			}

			value = _get_zval_ptr_tmp((opline+1)->op1.var EXECUTE_DATA_CC);
			if (IS_TMP_VAR == IS_CV && UNEXPECTED(Z_ISUNDEF_P(value))) {
				value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
			} else if (IS_TMP_VAR & (IS_CV|IS_VAR)) {
				ZVAL_DEREF(value);
			}

			zend_assign_to_object_dim(obj, dim, value OPLINE_CC EXECUTE_DATA_CC);

			zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
			if (UNEXPECTED(GC_DELREF(obj) == 0)) {
				zend_objects_store_del(obj);
			}
		} else if (EXPECTED(Z_TYPE_P(object_ptr) == IS_STRING)) {
			if (IS_UNUSED == IS_UNUSED) {
				zend_use_new_element_for_string();
				zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
				UNDEF_RESULT();
			} else {
				dim = NULL;
				value = _get_zval_ptr_tmp((opline+1)->op1.var EXECUTE_DATA_CC);
				zend_assign_to_string_offset(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC);
				zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
			}
		} else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
			if (Z_ISREF_P(orig_object_ptr)
			 && ZEND_REF_HAS_TYPE_SOURCES(Z_REF_P(orig_object_ptr))
			 && !zend_verify_ref_array_assignable(Z_REF_P(orig_object_ptr))) {
				dim = NULL;
				zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
				UNDEF_RESULT();
			} else {
				HashTable *ht = zend_new_array(8);
				uint8_t old_type = Z_TYPE_P(object_ptr);

				ZVAL_ARR(object_ptr, ht);
				if (UNEXPECTED(old_type == IS_FALSE)) {
					GC_ADDREF(ht);
					zend_false_to_array_deprecated();
					if (UNEXPECTED(GC_DELREF(ht) == 0)) {
						zend_array_destroy(ht);
						goto assign_dim_error;
					}
				}
				goto try_assign_dim_array;
			}
		} else {
			zend_use_scalar_as_array();
			dim = NULL;
assign_dim_error:
			zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
			if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
				ZVAL_NULL(EX_VAR(opline->result.var));
			}
		}
	}
	if (IS_UNUSED != IS_UNUSED) {


	}


	/* assign_dim has two opcodes! */
	ZEND_VM_NEXT_OPCODE_EX(1, 2);
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_ASSIGN_DIM_SPEC_CV_UNUSED_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *object_ptr, *orig_object_ptr;
	zval *value;
	zval *variable_ptr;
	zval *dim;
	zend_refcounted *garbage = NULL;

	SAVE_OPLINE();
	orig_object_ptr = object_ptr = EX_VAR(opline->op1.var);

	if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
try_assign_dim_array:
		SEPARATE_ARRAY(object_ptr);
		if (IS_UNUSED == IS_UNUSED) {
			value = _get_zval_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);
			if (IS_VAR == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
				HashTable *ht = Z_ARRVAL_P(object_ptr);
				if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE)) {
					GC_ADDREF(ht);
				}
				value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
				if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE) && !GC_DELREF(ht)) {
					zend_array_destroy(ht);
					goto assign_dim_error;
				}
			}
			if (IS_VAR == IS_CV || IS_VAR == IS_VAR) {
				ZVAL_DEREF(value);
			}
			value = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), value);
			if (UNEXPECTED(value == NULL)) {
				zend_cannot_add_element();
				goto assign_dim_error;
			} else if (IS_VAR == IS_CV) {
				if (Z_REFCOUNTED_P(value)) {
					Z_ADDREF_P(value);
				}
			} else if (IS_VAR == IS_VAR) {
				zval *free_op_data = EX_VAR((opline+1)->op1.var);
				if (Z_ISREF_P(free_op_data)) {
					if (Z_REFCOUNTED_P(value)) {
						Z_ADDREF_P(value);
					}
					zval_ptr_dtor_nogc(free_op_data);
				}
			} else if (IS_VAR == IS_CONST) {
				if (UNEXPECTED(Z_REFCOUNTED_P(value))) {
					Z_ADDREF_P(value);
				}
			}
		} else {
			dim = NULL;
			if (IS_UNUSED == IS_CONST) {
				variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
			} else {
				variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
			}
			if (UNEXPECTED(variable_ptr == NULL)) {
				goto assign_dim_error;
			}
			value = _get_zval_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);
			value = zend_assign_to_variable_ex(variable_ptr, value, IS_VAR, EX_USES_STRICT_TYPES(), &garbage);
		}
		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
			ZVAL_COPY(EX_VAR(opline->result.var), value);
		}
		if (garbage) {
			GC_DTOR_NO_REF(garbage);
		}
	} else {
		if (EXPECTED(Z_ISREF_P(object_ptr))) {
			object_ptr = Z_REFVAL_P(object_ptr);
			if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
				goto try_assign_dim_array;
			}
		}
		if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) {
			zend_object *obj = Z_OBJ_P(object_ptr);

			GC_ADDREF(obj);
			dim = NULL;
			if (IS_UNUSED == IS_CV && UNEXPECTED(Z_ISUNDEF_P(dim))) {
				dim = ZVAL_UNDEFINED_OP2();
			} else if (IS_UNUSED == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
				dim++;
			}

			value = _get_zval_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);
			if (IS_VAR == IS_CV && UNEXPECTED(Z_ISUNDEF_P(value))) {
				value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
			} else if (IS_VAR & (IS_CV|IS_VAR)) {
				ZVAL_DEREF(value);
			}

			zend_assign_to_object_dim(obj, dim, value OPLINE_CC EXECUTE_DATA_CC);

			zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
			if (UNEXPECTED(GC_DELREF(obj) == 0)) {
				zend_objects_store_del(obj);
			}
		} else if (EXPECTED(Z_TYPE_P(object_ptr) == IS_STRING)) {
			if (IS_UNUSED == IS_UNUSED) {
				zend_use_new_element_for_string();
				zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
				UNDEF_RESULT();
			} else {
				dim = NULL;
				value = _get_zval_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);
				zend_assign_to_string_offset(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC);
				zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
			}
		} else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
			if (Z_ISREF_P(orig_object_ptr)
			 && ZEND_REF_HAS_TYPE_SOURCES(Z_REF_P(orig_object_ptr))
			 && !zend_verify_ref_array_assignable(Z_REF_P(orig_object_ptr))) {
				dim = NULL;
				zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
				UNDEF_RESULT();
			} else {
				HashTable *ht = zend_new_array(8);
				uint8_t old_type = Z_TYPE_P(object_ptr);

				ZVAL_ARR(object_ptr, ht);
				if (UNEXPECTED(old_type == IS_FALSE)) {
					GC_ADDREF(ht);
					zend_false_to_array_deprecated();
					if (UNEXPECTED(GC_DELREF(ht) == 0)) {
						zend_array_destroy(ht);
						goto assign_dim_error;
					}
				}
				goto try_assign_dim_array;
			}
		} else {
			zend_use_scalar_as_array();
			dim = NULL;
assign_dim_error:
			zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
			if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
				ZVAL_NULL(EX_VAR(opline->result.var));
			}
		}
	}
	if (IS_UNUSED != IS_UNUSED) {


	}


	/* assign_dim has two opcodes! */
	ZEND_VM_NEXT_OPCODE_EX(1, 2);
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_ASSIGN_DIM_SPEC_CV_UNUSED_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *object_ptr, *orig_object_ptr;
	zval *value;
	zval *variable_ptr;
	zval *dim;
	zend_refcounted *garbage = NULL;

	SAVE_OPLINE();
	orig_object_ptr = object_ptr = EX_VAR(opline->op1.var);

	if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
try_assign_dim_array:
		SEPARATE_ARRAY(object_ptr);
		if (IS_UNUSED == IS_UNUSED) {
			value = EX_VAR((opline+1)->op1.var);
			if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
				HashTable *ht = Z_ARRVAL_P(object_ptr);
				if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE)) {
					GC_ADDREF(ht);
				}
				value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
				if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE) && !GC_DELREF(ht)) {
					zend_array_destroy(ht);
					goto assign_dim_error;
				}
			}
			if (IS_CV == IS_CV || IS_CV == IS_VAR) {
				ZVAL_DEREF(value);
			}
			value = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), value);
			if (UNEXPECTED(value == NULL)) {
				zend_cannot_add_element();
				goto assign_dim_error;
			} else if (IS_CV == IS_CV) {
				if (Z_REFCOUNTED_P(value)) {
					Z_ADDREF_P(value);
				}
			} else if (IS_CV == IS_VAR) {
				zval *free_op_data = EX_VAR((opline+1)->op1.var);
				if (Z_ISREF_P(free_op_data)) {
					if (Z_REFCOUNTED_P(value)) {
						Z_ADDREF_P(value);
					}
					zval_ptr_dtor_nogc(free_op_data);
				}
			} else if (IS_CV == IS_CONST) {
				if (UNEXPECTED(Z_REFCOUNTED_P(value))) {
					Z_ADDREF_P(value);
				}
			}
		} else {
			dim = NULL;
			if (IS_UNUSED == IS_CONST) {
				variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
			} else {
				variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
			}
			if (UNEXPECTED(variable_ptr == NULL)) {
				goto assign_dim_error;
			}
			value = _get_zval_ptr_cv_BP_VAR_R((opline+1)->op1.var EXECUTE_DATA_CC);
			value = zend_assign_to_variable_ex(variable_ptr, value, IS_CV, EX_USES_STRICT_TYPES(), &garbage);
		}
		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
			ZVAL_COPY(EX_VAR(opline->result.var), value);
		}
		if (garbage) {
			GC_DTOR_NO_REF(garbage);
		}
	} else {
		if (EXPECTED(Z_ISREF_P(object_ptr))) {
			object_ptr = Z_REFVAL_P(object_ptr);
			if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
				goto try_assign_dim_array;
			}
		}
		if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) {
			zend_object *obj = Z_OBJ_P(object_ptr);

			GC_ADDREF(obj);
			dim = NULL;
			if (IS_UNUSED == IS_CV && UNEXPECTED(Z_ISUNDEF_P(dim))) {
				dim = ZVAL_UNDEFINED_OP2();
			} else if (IS_UNUSED == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
				dim++;
			}

			value = EX_VAR((opline+1)->op1.var);
			if (IS_CV == IS_CV && UNEXPECTED(Z_ISUNDEF_P(value))) {
				value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
			} else if (IS_CV & (IS_CV|IS_VAR)) {
				ZVAL_DEREF(value);
			}

			zend_assign_to_object_dim(obj, dim, value OPLINE_CC EXECUTE_DATA_CC);


			if (UNEXPECTED(GC_DELREF(obj) == 0)) {
				zend_objects_store_del(obj);
			}
		} else if (EXPECTED(Z_TYPE_P(object_ptr) == IS_STRING)) {
			if (IS_UNUSED == IS_UNUSED) {
				zend_use_new_element_for_string();


				UNDEF_RESULT();
			} else {
				dim = NULL;
				value = EX_VAR((opline+1)->op1.var);
				zend_assign_to_string_offset(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC);


			}
		} else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
			if (Z_ISREF_P(orig_object_ptr)
			 && ZEND_REF_HAS_TYPE_SOURCES(Z_REF_P(orig_object_ptr))
			 && !zend_verify_ref_array_assignable(Z_REF_P(orig_object_ptr))) {
				dim = NULL;


				UNDEF_RESULT();
			} else {
				HashTable *ht = zend_new_array(8);
				uint8_t old_type = Z_TYPE_P(object_ptr);

				ZVAL_ARR(object_ptr, ht);
				if (UNEXPECTED(old_type == IS_FALSE)) {
					GC_ADDREF(ht);
					zend_false_to_array_deprecated();
					if (UNEXPECTED(GC_DELREF(ht) == 0)) {
						zend_array_destroy(ht);
						goto assign_dim_error;
					}
				}
				goto try_assign_dim_array;
			}
		} else {
			zend_use_scalar_as_array();
			dim = NULL;
assign_dim_error:


			if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
				ZVAL_NULL(EX_VAR(opline->result.var));
			}
		}
	}
	if (IS_UNUSED != IS_UNUSED) {


	}


	/* assign_dim has two opcodes! */
	ZEND_VM_NEXT_OPCODE_EX(1, 2);
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_VERIFY_RETURN_TYPE_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	if (IS_CV == IS_UNUSED) {
		SAVE_OPLINE();
		zend_verify_missing_return_type(EX(func));
		HANDLE_EXCEPTION();
	} else {
/* prevents "undefined variable opline" errors */
#if 0 || (IS_CV != IS_UNUSED)
		USE_OPLINE
		zval *retval_ref, *retval_ptr;
		zend_arg_info *ret_info = EX(func)->common.arg_info - 1;
		retval_ref = retval_ptr = EX_VAR(opline->op1.var);

		if (IS_CV == IS_CONST) {
			ZVAL_COPY(EX_VAR(opline->result.var), retval_ptr);
			retval_ref = retval_ptr = EX_VAR(opline->result.var);
		} else if (IS_CV == IS_VAR) {
			if (UNEXPECTED(Z_TYPE_P(retval_ptr) == IS_INDIRECT)) {
				retval_ref = retval_ptr = Z_INDIRECT_P(retval_ptr);
			}
			ZVAL_DEREF(retval_ptr);
		} else if (IS_CV == IS_CV) {
			ZVAL_DEREF(retval_ptr);
		}

		if (EXPECTED(ZEND_TYPE_CONTAINS_CODE(ret_info->type, Z_TYPE_P(retval_ptr)))) {
			ZEND_VM_NEXT_OPCODE();
		}

		if (IS_CV == IS_CV && UNEXPECTED(Z_ISUNDEF_P(retval_ptr))) {
			SAVE_OPLINE();
			retval_ref = retval_ptr = ZVAL_UNDEFINED_OP1();
			if (UNEXPECTED(EG(exception))) {
				HANDLE_EXCEPTION();
			}
			if (ZEND_TYPE_FULL_MASK(ret_info->type) & MAY_BE_NULL) {
				ZEND_VM_NEXT_OPCODE();
			}
		}

		zend_reference *ref = NULL;
		if (UNEXPECTED(retval_ref != retval_ptr)) {
			if (UNEXPECTED(EX(func)->op_array.fn_flags & ZEND_ACC_RETURN_REFERENCE)) {
				ref = Z_REF_P(retval_ref);
			} else {
				/* A cast might happen - unwrap the reference if this is a by-value return */
				if (Z_REFCOUNT_P(retval_ref) == 1) {
					ZVAL_UNREF(retval_ref);
				} else {
					Z_DELREF_P(retval_ref);
					ZVAL_COPY(retval_ref, retval_ptr);
				}
				retval_ptr = retval_ref;
			}
		}

		SAVE_OPLINE();
		if (UNEXPECTED(!zend_check_type_slow(&ret_info->type, retval_ptr, ref, 1, 0))) {
			zend_verify_return_error(EX(func), retval_ptr);
			HANDLE_EXCEPTION();
		}
		ZEND_VM_NEXT_OPCODE();
#endif
	}
}

static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_SEND_VAR_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *varptr, *arg;

	if (IS_UNUSED == IS_CONST) {
		SAVE_OPLINE();
		zend_string *arg_name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
		uint32_t arg_num;
		arg = zend_handle_named_arg(&EX(call), arg_name, &arg_num, CACHE_ADDR(opline->result.num));
		if (UNEXPECTED(!arg)) {


			HANDLE_EXCEPTION();
		}
	} else {
		arg = ZEND_CALL_VAR(EX(call), opline->result.var);
	}

	varptr = EX_VAR(opline->op1.var);
	if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(varptr) == IS_UNDEF)) {
		SAVE_OPLINE();
		ZVAL_UNDEFINED_OP1();
		ZVAL_NULL(arg);
		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
	}

	if (IS_CV == IS_CV) {
		ZVAL_COPY_DEREF(arg, varptr);
	} else /* if (IS_CV == IS_VAR) */ {
		if (UNEXPECTED(Z_ISREF_P(varptr))) {
			zend_refcounted *ref = Z_COUNTED_P(varptr);

			varptr = Z_REFVAL_P(varptr);
			ZVAL_COPY_VALUE(arg, varptr);
			if (UNEXPECTED(GC_DELREF(ref) == 0)) {
				efree_size(ref, sizeof(zend_reference));
			} else if (Z_OPT_REFCOUNTED_P(arg)) {
				Z_ADDREF_P(arg);
			}
		} else {
			ZVAL_COPY_VALUE(arg, varptr);
		}
	}

	ZEND_VM_NEXT_OPCODE();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_SEND_REF_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *varptr, *arg;

	SAVE_OPLINE();
	if (IS_UNUSED == IS_CONST) {
		zend_string *arg_name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
		uint32_t arg_num;
		arg = zend_handle_named_arg(&EX(call), arg_name, &arg_num, CACHE_ADDR(opline->result.num));
		if (UNEXPECTED(!arg)) {


			HANDLE_EXCEPTION();
		}
	} else {
		arg = ZEND_CALL_VAR(EX(call), opline->result.var);
	}

	varptr = _get_zval_ptr_cv_BP_VAR_W(opline->op1.var EXECUTE_DATA_CC);
	if (Z_ISREF_P(varptr)) {
		Z_ADDREF_P(varptr);
	} else {
		ZVAL_MAKE_REF_EX(varptr, 2);
	}
	ZVAL_REF(arg, Z_REF_P(varptr));


	ZEND_VM_NEXT_OPCODE();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_SEND_VAR_EX_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *varptr, *arg;
	uint32_t arg_num;

	if (IS_UNUSED == IS_CONST) {
		SAVE_OPLINE();
		zend_string *arg_name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
		arg = zend_handle_named_arg(&EX(call), arg_name, &arg_num, CACHE_ADDR(opline->result.num));
		if (UNEXPECTED(!arg)) {


			HANDLE_EXCEPTION();
		}
	} else {
		arg = ZEND_CALL_VAR(EX(call), opline->result.var);
		arg_num = opline->op2.num;
	}

	if (EXPECTED(0)) {
		if (QUICK_ARG_SHOULD_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
			goto send_var_by_ref;
		}
	} else if (ARG_SHOULD_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
send_var_by_ref:
		varptr = _get_zval_ptr_cv_BP_VAR_W(opline->op1.var EXECUTE_DATA_CC);
		if (Z_ISREF_P(varptr)) {
			Z_ADDREF_P(varptr);
		} else {
			ZVAL_MAKE_REF_EX(varptr, 2);
		}
		ZVAL_REF(arg, Z_REF_P(varptr));


		ZEND_VM_NEXT_OPCODE();
	}

	varptr = EX_VAR(opline->op1.var);
	if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(varptr) == IS_UNDEF)) {
		SAVE_OPLINE();
		ZVAL_UNDEFINED_OP1();
		ZVAL_NULL(arg);
		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
	}

	if (IS_CV == IS_CV) {
		ZVAL_COPY_DEREF(arg, varptr);
	} else /* if (IS_CV == IS_VAR) */ {
		if (UNEXPECTED(Z_ISREF_P(varptr))) {
			zend_refcounted *ref = Z_COUNTED_P(varptr);

			varptr = Z_REFVAL_P(varptr);
			ZVAL_COPY_VALUE(arg, varptr);
			if (UNEXPECTED(GC_DELREF(ref) == 0)) {
				efree_size(ref, sizeof(zend_reference));
			} else if (Z_OPT_REFCOUNTED_P(arg)) {
				Z_ADDREF_P(arg);
			}
		} else {
			ZVAL_COPY_VALUE(arg, varptr);
		}
	}

	ZEND_VM_NEXT_OPCODE();
}

static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_SEND_VAR_EX_SPEC_CV_UNUSED_QUICK_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *varptr, *arg;
	uint32_t arg_num;

	if (IS_UNUSED == IS_CONST) {
		SAVE_OPLINE();
		zend_string *arg_name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
		arg = zend_handle_named_arg(&EX(call), arg_name, &arg_num, CACHE_ADDR(opline->result.num));
		if (UNEXPECTED(!arg)) {


			HANDLE_EXCEPTION();
		}
	} else {
		arg = ZEND_CALL_VAR(EX(call), opline->result.var);
		arg_num = opline->op2.num;
	}

	if (EXPECTED(1)) {
		if (QUICK_ARG_SHOULD_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
			goto send_var_by_ref;
		}
	} else if (ARG_SHOULD_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
send_var_by_ref:
		varptr = _get_zval_ptr_cv_BP_VAR_W(opline->op1.var EXECUTE_DATA_CC);
		if (Z_ISREF_P(varptr)) {
			Z_ADDREF_P(varptr);
		} else {
			ZVAL_MAKE_REF_EX(varptr, 2);
		}
		ZVAL_REF(arg, Z_REF_P(varptr));


		ZEND_VM_NEXT_OPCODE();
	}

	varptr = EX_VAR(opline->op1.var);
	if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(varptr) == IS_UNDEF)) {
		SAVE_OPLINE();
		ZVAL_UNDEFINED_OP1();
		ZVAL_NULL(arg);
		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
	}

	if (IS_CV == IS_CV) {
		ZVAL_COPY_DEREF(arg, varptr);
	} else /* if (IS_CV == IS_VAR) */ {
		if (UNEXPECTED(Z_ISREF_P(varptr))) {
			zend_refcounted *ref = Z_COUNTED_P(varptr);

			varptr = Z_REFVAL_P(varptr);
			ZVAL_COPY_VALUE(arg, varptr);
			if (UNEXPECTED(GC_DELREF(ref) == 0)) {
				efree_size(ref, sizeof(zend_reference));
			} else if (Z_OPT_REFCOUNTED_P(arg)) {
				Z_ADDREF_P(arg);
			}
		} else {
			ZVAL_COPY_VALUE(arg, varptr);
		}
	}

	ZEND_VM_NEXT_OPCODE();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *expr_ptr, new_expr;

	SAVE_OPLINE();
	if ((IS_CV == IS_VAR || IS_CV == IS_CV) &&
	    UNEXPECTED(opline->extended_value & ZEND_ARRAY_ELEMENT_REF)) {
		expr_ptr = _get_zval_ptr_cv_BP_VAR_W(opline->op1.var EXECUTE_DATA_CC);
		if (Z_ISREF_P(expr_ptr)) {
			Z_ADDREF_P(expr_ptr);
		} else {
			ZVAL_MAKE_REF_EX(expr_ptr, 2);
		}


	} else {
		expr_ptr = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
		if (IS_CV == IS_TMP_VAR) {
			/* pass */
		} else if (IS_CV == IS_CONST) {
			Z_TRY_ADDREF_P(expr_ptr);
		} else if (IS_CV == IS_CV) {
			ZVAL_DEREF(expr_ptr);
			Z_TRY_ADDREF_P(expr_ptr);
		} else /* if (IS_CV == IS_VAR) */ {
			if (UNEXPECTED(Z_ISREF_P(expr_ptr))) {
				zend_refcounted *ref = Z_COUNTED_P(expr_ptr);

				expr_ptr = Z_REFVAL_P(expr_ptr);
				if (UNEXPECTED(GC_DELREF(ref) == 0)) {
					ZVAL_COPY_VALUE(&new_expr, expr_ptr);
					expr_ptr = &new_expr;
					efree_size(ref, sizeof(zend_reference));
				} else if (Z_OPT_REFCOUNTED_P(expr_ptr)) {
					Z_ADDREF_P(expr_ptr);
				}
			}
		}
	}

	if (IS_UNUSED != IS_UNUSED) {
		zval *offset = NULL;
		zend_string *str;
		zend_ulong hval;

add_again:
		if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) {
			str = Z_STR_P(offset);
			if (IS_UNUSED != IS_CONST) {
				if (ZEND_HANDLE_NUMERIC(str, hval)) {
					goto num_index;
				}
			}
str_index:
			zend_hash_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), str, expr_ptr);
		} else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
			hval = Z_LVAL_P(offset);
num_index:
			zend_hash_index_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), hval, expr_ptr);
		} else if ((IS_UNUSED & (IS_VAR|IS_CV)) && EXPECTED(Z_TYPE_P(offset) == IS_REFERENCE)) {
			offset = Z_REFVAL_P(offset);
			goto add_again;
		} else if (UNEXPECTED(Z_TYPE_P(offset) == IS_NULL)) {
			zval tmp;
			if (IS_CV == IS_CV || IS_CV == IS_VAR) {
				ZVAL_COPY(&tmp, expr_ptr);
			}
			zend_error(E_DEPRECATED, "Using null as an array offset is deprecated, use an empty string instead");
			if (IS_CV == IS_CV || IS_CV == IS_VAR) {
				/* A userland error handler can do funky things to the expression, so reset it */
				zval_ptr_dtor(expr_ptr);
				ZVAL_COPY_VALUE(expr_ptr, &tmp);
			}
			if (UNEXPECTED(EG(exception))) {
				zval_ptr_dtor_nogc(expr_ptr);
				HANDLE_EXCEPTION();
			}
			str = ZSTR_EMPTY_ALLOC();
			goto str_index;
		} else if (Z_TYPE_P(offset) == IS_DOUBLE) {
			hval = zend_dval_to_lval_safe(Z_DVAL_P(offset));
			goto num_index;
		} else if (Z_TYPE_P(offset) == IS_FALSE) {
			hval = 0;
			goto num_index;
		} else if (Z_TYPE_P(offset) == IS_TRUE) {
			hval = 1;
			goto num_index;
		} else if (Z_TYPE_P(offset) == IS_RESOURCE) {
			zend_use_resource_as_offset(offset);
			hval = Z_RES_HANDLE_P(offset);
			goto num_index;
		} else if (IS_UNUSED == IS_CV && Z_TYPE_P(offset) == IS_UNDEF) {
			ZVAL_UNDEFINED_OP2();
			str = ZSTR_EMPTY_ALLOC();
			goto str_index;
		} else {
			zend_illegal_array_offset_access(offset);
			zval_ptr_dtor_nogc(expr_ptr);
		}


	} else {
		if (!zend_hash_next_index_insert(Z_ARRVAL_P(EX_VAR(opline->result.var)), expr_ptr)) {
			zend_cannot_add_element();
			zval_ptr_dtor_nogc(expr_ptr);
		}
	}
	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_INIT_ARRAY_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	zval *array;
	uint32_t size;
	USE_OPLINE

	SAVE_OPLINE();
	array = EX_VAR(opline->result.var);
	if (IS_CV != IS_UNUSED) {
		size = opline->extended_value >> ZEND_ARRAY_SIZE_SHIFT;
		ZVAL_ARR(array, zend_new_array(size));
		/* Explicitly initialize array as not-packed if flag is set */
		if (opline->extended_value & ZEND_ARRAY_NOT_PACKED) {
			zend_hash_real_init_mixed(Z_ARRVAL_P(array));
		}
		ZEND_VM_TAIL_CALL(ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
	} else {
		ZVAL_ARR(array, zend_new_array(0));
		ZEND_VM_NEXT_OPCODE();
	}
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_UNSET_CV_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *var = EX_VAR(opline->op1.var);

	if (Z_REFCOUNTED_P(var)) {
		zend_refcounted *garbage = Z_COUNTED_P(var);

		ZVAL_UNDEF(var);
		SAVE_OPLINE();
		GC_DTOR(garbage);
		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
	} else {
		ZVAL_UNDEF(var);
	}
	ZEND_VM_NEXT_OPCODE();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_UNSET_VAR_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *varname;
	zend_string *name, *tmp_name;
	HashTable *target_symbol_table;

	SAVE_OPLINE();

	varname = EX_VAR(opline->op1.var);

	if (IS_CV == IS_CONST) {
		name = Z_STR_P(varname);
	} else if (EXPECTED(Z_TYPE_P(varname) == IS_STRING)) {
		name = Z_STR_P(varname);
		tmp_name = NULL;
	} else {
		if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(varname) == IS_UNDEF)) {
			varname = ZVAL_UNDEFINED_OP1();
		}
		name = zval_try_get_tmp_string(varname, &tmp_name);
		if (UNEXPECTED(!name)) {


			HANDLE_EXCEPTION();
		}
	}

	target_symbol_table = zend_get_target_symbol_table(opline->extended_value EXECUTE_DATA_CC);
	zend_hash_del_ind(target_symbol_table, name);

	if (IS_CV != IS_CONST) {
		zend_tmp_string_release(tmp_name);
	}


	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

/* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CLASS_FETCH|CONST|VAR) */
static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_ISSET_ISEMPTY_CV_SPEC_CV_UNUSED_SET_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *value;

	value = EX_VAR(opline->op1.var);
	if (!(0)) {
		if (Z_TYPE_P(value) > IS_NULL &&
		    (!Z_ISREF_P(value) || Z_TYPE_P(Z_REFVAL_P(value)) != IS_NULL)) {
			ZEND_VM_SMART_BRANCH_TRUE();
		} else {
			ZEND_VM_SMART_BRANCH_FALSE();
		}
	} else {
		bool result;

		SAVE_OPLINE();
		result = !i_zend_is_true(value);
		ZEND_VM_SMART_BRANCH(result, 1);
	}
}

static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_ISSET_ISEMPTY_CV_SPEC_CV_UNUSED_EMPTY_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *value;

	value = EX_VAR(opline->op1.var);
	if (!(1)) {
		if (Z_TYPE_P(value) > IS_NULL &&
		    (!Z_ISREF_P(value) || Z_TYPE_P(Z_REFVAL_P(value)) != IS_NULL)) {
			ZEND_VM_SMART_BRANCH_TRUE();
		} else {
			ZEND_VM_SMART_BRANCH_FALSE();
		}
	} else {
		bool result;

		SAVE_OPLINE();
		result = !i_zend_is_true(value);
		ZEND_VM_SMART_BRANCH(result, 1);
	}
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_ISSET_ISEMPTY_VAR_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *value;
	bool result;
	zval *varname;
	zend_string *name, *tmp_name;
	HashTable *target_symbol_table;

	SAVE_OPLINE();
	varname = _get_zval_ptr_cv_BP_VAR_IS(opline->op1.var EXECUTE_DATA_CC);
	if (IS_CV == IS_CONST) {
		name = Z_STR_P(varname);
	} else {
		name = zval_get_tmp_string(varname, &tmp_name);
	}

	target_symbol_table = zend_get_target_symbol_table(opline->extended_value EXECUTE_DATA_CC);
	value = zend_hash_find_ex(target_symbol_table, name, IS_CV == IS_CONST);

	if (IS_CV != IS_CONST) {
		zend_tmp_string_release(tmp_name);
	}


	if (!value) {
		result = (opline->extended_value & ZEND_ISEMPTY);
	} else {
		if (Z_TYPE_P(value) == IS_INDIRECT) {
			value = Z_INDIRECT_P(value);
		}
		if (!(opline->extended_value & ZEND_ISEMPTY)) {
			if (Z_ISREF_P(value)) {
				value = Z_REFVAL_P(value);
			}
			result = Z_TYPE_P(value) > IS_NULL;
		} else {
			result = !i_zend_is_true(value);
		}
	}

	ZEND_VM_SMART_BRANCH(result, true);
}

/* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CLASS_FETCH|CONST|VAR) */
static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_INSTANCEOF_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *expr;
	bool result;

	SAVE_OPLINE();
	expr = EX_VAR(opline->op1.var);

try_instanceof:
	if (Z_TYPE_P(expr) == IS_OBJECT) {
		zend_class_entry *ce;

		if (IS_UNUSED == IS_CONST) {
			ce = CACHED_PTR(opline->extended_value);
			if (UNEXPECTED(ce == NULL)) {
				ce = zend_lookup_class_ex(Z_STR_P(RT_CONSTANT(opline, opline->op2)), Z_STR_P(RT_CONSTANT(opline, opline->op2) + 1), ZEND_FETCH_CLASS_NO_AUTOLOAD);
				if (EXPECTED(ce)) {
					CACHE_PTR(opline->extended_value, ce);
				}
			}
		} else if (IS_UNUSED == IS_UNUSED) {
			ce = zend_fetch_class(NULL, opline->op2.num);
			if (UNEXPECTED(ce == NULL)) {


				ZVAL_UNDEF(EX_VAR(opline->result.var));
				HANDLE_EXCEPTION();
			}
		} else {
			ce = Z_CE_P(EX_VAR(opline->op2.var));
		}
		result = ce && instanceof_function(Z_OBJCE_P(expr), ce);
	} else if ((IS_CV & (IS_VAR|IS_CV)) && Z_TYPE_P(expr) == IS_REFERENCE) {
		expr = Z_REFVAL_P(expr);
		goto try_instanceof;
	} else {
		if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(expr) == IS_UNDEF)) {
			ZVAL_UNDEFINED_OP1();
		}
		result = 0;
	}


	ZEND_VM_SMART_BRANCH(result, 1);
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_YIELD_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE

	zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C);

	SAVE_OPLINE();
	if (UNEXPECTED(generator->flags & ZEND_GENERATOR_FORCED_CLOSE)) {
		ZEND_VM_TAIL_CALL(zend_yield_in_closed_generator_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
	}

	/* Destroy the previously yielded value */
	zval_ptr_dtor(&generator->value);

	/* Destroy the previously yielded key */
	zval_ptr_dtor(&generator->key);

	/* Set the new yielded value */
	if (IS_CV != IS_UNUSED) {
		if (UNEXPECTED(EX(func)->op_array.fn_flags & ZEND_ACC_RETURN_REFERENCE)) {
			/* Constants and temporary variables aren't yieldable by reference,
			 * but we still allow them with a notice. */
			if (IS_CV & (IS_CONST|IS_TMP_VAR)) {
				zval *value;

				zend_error(E_NOTICE, "Only variable references should be yielded by reference");

				value = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
				ZVAL_COPY_VALUE(&generator->value, value);
				if (IS_CV == IS_CONST) {
					if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
						Z_ADDREF(generator->value);
					}
				}
			} else {
				zval *value_ptr = _get_zval_ptr_cv_BP_VAR_W(opline->op1.var EXECUTE_DATA_CC);

				/* If a function call result is yielded and the function did
				 * not return by reference we throw a notice. */
				do {
					if (IS_CV == IS_VAR) {
						ZEND_ASSERT(value_ptr != &EG(uninitialized_zval));
						if (opline->extended_value == ZEND_RETURNS_FUNCTION
						 && !Z_ISREF_P(value_ptr)) {
							zend_error(E_NOTICE, "Only variable references should be yielded by reference");
							ZVAL_COPY(&generator->value, value_ptr);
							break;
						}
					}
					if (Z_ISREF_P(value_ptr)) {
						Z_ADDREF_P(value_ptr);
					} else {
						ZVAL_MAKE_REF_EX(value_ptr, 2);
					}
					ZVAL_REF(&generator->value, Z_REF_P(value_ptr));
				} while (0);


			}
		} else {
			zval *value = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);

			/* Consts, temporary variables and references need copying */
			if (IS_CV == IS_CONST) {
				ZVAL_COPY_VALUE(&generator->value, value);
				if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
					Z_ADDREF(generator->value);
				}
			} else if (IS_CV == IS_TMP_VAR) {
				ZVAL_COPY_VALUE(&generator->value, value);
			} else if ((IS_CV & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) {
				ZVAL_COPY(&generator->value, Z_REFVAL_P(value));


			} else {
				ZVAL_COPY_VALUE(&generator->value, value);
				if (IS_CV == IS_CV) {
					if (Z_OPT_REFCOUNTED_P(value)) Z_ADDREF_P(value);
				}
			}
		}
	} else {
		/* If no value was specified yield null */
		ZVAL_NULL(&generator->value);
	}

	/* Set the new yielded key */
	if (IS_UNUSED != IS_UNUSED) {
		zval *key = NULL;
		if ((IS_UNUSED & (IS_CV|IS_VAR)) && UNEXPECTED(Z_TYPE_P(key) == IS_REFERENCE)) {
			key = Z_REFVAL_P(key);
		}
		ZVAL_COPY(&generator->key, key);


		if (Z_TYPE(generator->key) == IS_LONG
		    && Z_LVAL(generator->key) > generator->largest_used_integer_key
		) {
			generator->largest_used_integer_key = Z_LVAL(generator->key);
		}
	} else {
		/* If no key was specified we use auto-increment keys */
		generator->largest_used_integer_key++;
		ZVAL_LONG(&generator->key, generator->largest_used_integer_key);
	}

	if (RETURN_VALUE_USED(opline)) {
		/* If the return value of yield is used set the send
		 * target and initialize it to NULL */
		generator->send_target = EX_VAR(opline->result.var);
		ZVAL_NULL(generator->send_target);
	} else {
		generator->send_target = NULL;
	}

	/* The GOTO VM uses a local opline variable. We need to set the opline
	 * variable in execute_data so we don't resume at an old position. */
	SAVE_OPLINE();

	ZEND_VM_RETURN();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_CHECK_VAR_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1 = EX_VAR(opline->op1.var);

	if (UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) {
		SAVE_OPLINE();
		ZVAL_UNDEFINED_OP1();
		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
	}
	ZEND_VM_NEXT_OPCODE();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_MAKE_REF_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1 = EX_VAR(opline->op1.var);

	if (IS_CV == IS_CV) {
		if (UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
			ZVAL_NEW_EMPTY_REF(op1);
			Z_SET_REFCOUNT_P(op1, 2);
			ZVAL_NULL(Z_REFVAL_P(op1));
			ZVAL_REF(EX_VAR(opline->result.var), Z_REF_P(op1));
		} else {
			if (Z_ISREF_P(op1)) {
				Z_ADDREF_P(op1);
			} else {
				ZVAL_MAKE_REF_EX(op1, 2);
			}
			ZVAL_REF(EX_VAR(opline->result.var), Z_REF_P(op1));
		}
	} else if (EXPECTED(Z_TYPE_P(op1) == IS_INDIRECT)) {
		op1 = Z_INDIRECT_P(op1);
		if (EXPECTED(!Z_ISREF_P(op1))) {
			ZVAL_MAKE_REF_EX(op1, 2);
		} else {
			GC_ADDREF(Z_REF_P(op1));
		}
		ZVAL_REF(EX_VAR(opline->result.var), Z_REF_P(op1));
	} else {
		ZVAL_COPY_VALUE(EX_VAR(opline->result.var), op1);
	}
	ZEND_VM_NEXT_OPCODE();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_COUNT_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1;
	zend_long count;

	SAVE_OPLINE();
	op1 = EX_VAR(opline->op1.var);

	while (1) {
		if (Z_TYPE_P(op1) == IS_ARRAY) {
			count = zend_hash_num_elements(Z_ARRVAL_P(op1));
			break;
		} else if (Z_TYPE_P(op1) == IS_OBJECT) {
			zend_object *zobj = Z_OBJ_P(op1);

			/* first, we check if the handler is defined */
			if (zobj->handlers->count_elements) {
				if (SUCCESS == zobj->handlers->count_elements(zobj, &count)) {
					break;
				}
				if (UNEXPECTED(EG(exception))) {
					count = 0;
					break;
				}
			}

			/* if not and the object implements Countable we call its count() method */
			if (zend_class_implements_interface(zobj->ce, zend_ce_countable)) {
				zval retval;

				zend_function *count_fn = zend_hash_find_ptr(&zobj->ce->function_table, ZSTR_KNOWN(ZEND_STR_COUNT));
				zend_call_known_instance_method_with_0_params(count_fn, zobj, &retval);
				count = zval_get_long(&retval);
				zval_ptr_dtor(&retval);
				break;
			}

			/* If There's no handler and it doesn't implement Countable then emit a TypeError */
		} else if ((IS_CV & (IS_VAR|IS_CV)) != 0 && Z_TYPE_P(op1) == IS_REFERENCE) {
			op1 = Z_REFVAL_P(op1);
			continue;
		} else if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
			ZVAL_UNDEFINED_OP1();
		}
		count = 0;
		zend_type_error("%s(): Argument #1 ($value) must be of type Countable|array, %s given", opline->extended_value ? "sizeof" : "count", zend_zval_value_name(op1));
		break;
	}

	ZVAL_LONG(EX_VAR(opline->result.var), count);


	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_COUNT_ARRAY_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zend_array *ht = Z_ARRVAL_P(EX_VAR(opline->op1.var));
	ZVAL_LONG(EX_VAR(opline->result.var), zend_hash_num_elements(ht));
	if (IS_CV & (IS_TMP_VAR|IS_VAR) && !(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE) && !GC_DELREF(ht)) {
		SAVE_OPLINE();
		zend_array_destroy(ht);
		if (EG(exception)) {
			HANDLE_EXCEPTION();
		}
	}
	ZEND_VM_NEXT_OPCODE();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_GET_CLASS_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE

	if (IS_CV == IS_UNUSED) {
		SAVE_OPLINE();
		if (UNEXPECTED(!EX(func)->common.scope)) {
			zend_throw_error(NULL, "get_class() without arguments must be called from within a class");
			ZVAL_UNDEF(EX_VAR(opline->result.var));
			HANDLE_EXCEPTION();
		} else {
			zend_error(E_DEPRECATED, "Calling get_class() without arguments is deprecated");
			ZVAL_STR_COPY(EX_VAR(opline->result.var), EX(func)->common.scope->name);
			if (UNEXPECTED(EG(exception))) {
				HANDLE_EXCEPTION();
			}
			ZEND_VM_NEXT_OPCODE();
		}
	} else {
		zval *op1;

		SAVE_OPLINE();
		op1 = EX_VAR(opline->op1.var);
		while (1) {
			if (Z_TYPE_P(op1) == IS_OBJECT) {
				ZVAL_STR_COPY(EX_VAR(opline->result.var), Z_OBJCE_P(op1)->name);
			} else if ((IS_CV & (IS_VAR|IS_CV)) != 0 && Z_TYPE_P(op1) == IS_REFERENCE) {
				op1 = Z_REFVAL_P(op1);
				continue;
			} else {
				if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
					ZVAL_UNDEFINED_OP1();
				}
				zend_type_error("get_class(): Argument #1 ($object) must be of type object, %s given", zend_zval_value_name(op1));
				ZVAL_UNDEF(EX_VAR(opline->result.var));
			}
			break;
		}


		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
	}
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_GET_TYPE_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1;
	zend_string *type;

	SAVE_OPLINE();
	op1 = _get_zval_ptr_cv_deref_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
	type = zend_zval_get_legacy_type(op1);
	if (EXPECTED(type)) {
		ZVAL_INTERNED_STR(EX_VAR(opline->result.var), type);
	} else {
		ZVAL_STRING(EX_VAR(opline->result.var), "unknown type");
	}


	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_SEND_VAR_EX_SIMPLE_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *varptr, *arg;
	uint32_t arg_num = opline->op2.num;

	if (QUICK_ARG_SHOULD_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
		ZEND_VM_TAIL_CALL(ZEND_SEND_REF_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
	}

	varptr = EX_VAR(opline->op1.var);
	arg = ZEND_CALL_VAR(EX(call), opline->result.var);

	if (IS_CV == IS_CV) {
		ZVAL_COPY(arg, varptr);
	} else /* if (IS_CV == IS_VAR) */ {
		ZVAL_COPY_VALUE(arg, varptr);
	}

	ZEND_VM_NEXT_OPCODE();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_DIV_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;

	SAVE_OPLINE();
	op1 = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
	op2 = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
	div_function(EX_VAR(opline->result.var), op1, op2);




	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_POW_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;

	SAVE_OPLINE();
	op1 = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
	op2 = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
	pow_function(EX_VAR(opline->result.var), op1, op2);




	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_CONCAT_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;

	op1 = EX_VAR(opline->op1.var);
	op2 = EX_VAR(opline->op2.var);

	if ((IS_CV == IS_CONST || EXPECTED(Z_TYPE_P(op1) == IS_STRING)) &&
	    (IS_CV == IS_CONST || EXPECTED(Z_TYPE_P(op2) == IS_STRING))) {
		zend_string *op1_str = Z_STR_P(op1);
		zend_string *op2_str = Z_STR_P(op2);
		zend_string *str;
		uint32_t flags = ZSTR_GET_COPYABLE_CONCAT_PROPERTIES_BOTH(op1_str, op2_str);

		if (IS_CV != IS_CONST && UNEXPECTED(ZSTR_LEN(op1_str) == 0)) {
			if (IS_CV == IS_CONST || IS_CV == IS_CV) {
				ZVAL_STR_COPY(EX_VAR(opline->result.var), op2_str);
			} else {
				ZVAL_STR(EX_VAR(opline->result.var), op2_str);
			}
			if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
				zend_string_release_ex(op1_str, 0);
			}
		} else if (IS_CV != IS_CONST && UNEXPECTED(ZSTR_LEN(op2_str) == 0)) {
			if (IS_CV == IS_CONST || IS_CV == IS_CV) {
				ZVAL_STR_COPY(EX_VAR(opline->result.var), op1_str);
			} else {
				ZVAL_STR(EX_VAR(opline->result.var), op1_str);
			}
			if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
				zend_string_release_ex(op2_str, 0);
			}
		} else if (IS_CV != IS_CONST && IS_CV != IS_CV &&
		    !ZSTR_IS_INTERNED(op1_str) && GC_REFCOUNT(op1_str) == 1) {
			size_t len = ZSTR_LEN(op1_str);

			if (UNEXPECTED(len > ZSTR_MAX_LEN - ZSTR_LEN(op2_str))) {
				zend_error_noreturn(E_ERROR, "Integer overflow in memory allocation");
			}
			str = zend_string_extend(op1_str, len + ZSTR_LEN(op2_str), 0);
			memcpy(ZSTR_VAL(str) + len, ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
			GC_ADD_FLAGS(str, flags);
			ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
			if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
				zend_string_release_ex(op2_str, 0);
			}
		} else {
			str = zend_string_alloc(ZSTR_LEN(op1_str) + ZSTR_LEN(op2_str), 0);
			memcpy(ZSTR_VAL(str), ZSTR_VAL(op1_str), ZSTR_LEN(op1_str));
			memcpy(ZSTR_VAL(str) + ZSTR_LEN(op1_str), ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
			GC_ADD_FLAGS(str, flags);
			ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
			if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
				zend_string_release_ex(op1_str, 0);
			}
			if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
				zend_string_release_ex(op2_str, 0);
			}
		}
		ZEND_VM_NEXT_OPCODE();
	} else {
		SAVE_OPLINE();

		if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
			op1 = ZVAL_UNDEFINED_OP1();
		}
		if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(op2) == IS_UNDEF)) {
			op2 = ZVAL_UNDEFINED_OP2();
		}
		concat_function(EX_VAR(opline->result.var), op1, op2);




		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
	}
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_IS_IDENTICAL_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;
	bool result;

	SAVE_OPLINE();
	op1 = _get_zval_ptr_cv_deref_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
	op2 = _get_zval_ptr_cv_deref_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
	result = fast_is_identical_function(op1, op2);




	ZEND_VM_SMART_BRANCH(result, 1);
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_IS_NOT_IDENTICAL_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;
	bool result;

	SAVE_OPLINE();
	op1 = _get_zval_ptr_cv_deref_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
	op2 = _get_zval_ptr_cv_deref_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
	result = fast_is_not_identical_function(op1, op2);




	ZEND_VM_SMART_BRANCH(result, 1);
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_IS_EQUAL_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;
	double d1, d2;

	op1 = EX_VAR(opline->op1.var);
	op2 = EX_VAR(opline->op2.var);
	if (1 && IS_CV == IS_CONST && IS_CV == IS_CONST) {
		/* pass */
	} else if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
		if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
			if (EXPECTED(Z_LVAL_P(op1) == Z_LVAL_P(op2))) {
is_equal_true:
				ZEND_VM_SMART_BRANCH_TRUE_NONE();
			} else {
is_equal_false:
				ZEND_VM_SMART_BRANCH_FALSE_NONE();
			}
		} else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
			d1 = (double)Z_LVAL_P(op1);
			d2 = Z_DVAL_P(op2);
			goto is_equal_double;
		}
	} else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) {
		if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
			d1 = Z_DVAL_P(op1);
			d2 = Z_DVAL_P(op2);
is_equal_double:
			if (d1 == d2) {
				goto is_equal_true;
			} else {
				goto is_equal_false;
			}
		} else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
			d1 = Z_DVAL_P(op1);
			d2 = (double)Z_LVAL_P(op2);
			goto is_equal_double;
		}
	} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
		if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
			bool result = zend_fast_equal_strings(Z_STR_P(op1), Z_STR_P(op2));
			if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
				zval_ptr_dtor_str(op1);
			}
			if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
				zval_ptr_dtor_str(op2);
			}
			if (result) {
				goto is_equal_true;
			} else {
				goto is_equal_false;
			}
		}
	}
	ZEND_VM_DISPATCH_TO_HELPER(zend_is_equal_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_EX op1, op2));
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_IS_EQUAL_SPEC_CV_CV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;
	double d1, d2;

	op1 = EX_VAR(opline->op1.var);
	op2 = EX_VAR(opline->op2.var);
	if (1 && IS_CV == IS_CONST && IS_CV == IS_CONST) {
		/* pass */
	} else if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
		if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
			if (EXPECTED(Z_LVAL_P(op1) == Z_LVAL_P(op2))) {
is_equal_true:
				ZEND_VM_SMART_BRANCH_TRUE_JMPZ();
			} else {
is_equal_false:
				ZEND_VM_SMART_BRANCH_FALSE_JMPZ();
			}
		} else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
			d1 = (double)Z_LVAL_P(op1);
			d2 = Z_DVAL_P(op2);
			goto is_equal_double;
		}
	} else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) {
		if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
			d1 = Z_DVAL_P(op1);
			d2 = Z_DVAL_P(op2);
is_equal_double:
			if (d1 == d2) {
				goto is_equal_true;
			} else {
				goto is_equal_false;
			}
		} else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
			d1 = Z_DVAL_P(op1);
			d2 = (double)Z_LVAL_P(op2);
			goto is_equal_double;
		}
	} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
		if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
			bool result = zend_fast_equal_strings(Z_STR_P(op1), Z_STR_P(op2));
			if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
				zval_ptr_dtor_str(op1);
			}
			if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
				zval_ptr_dtor_str(op2);
			}
			if (result) {
				goto is_equal_true;
			} else {
				goto is_equal_false;
			}
		}
	}
	ZEND_VM_DISPATCH_TO_HELPER(zend_is_equal_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_EX op1, op2));
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_IS_EQUAL_SPEC_CV_CV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;
	double d1, d2;

	op1 = EX_VAR(opline->op1.var);
	op2 = EX_VAR(opline->op2.var);
	if (1 && IS_CV == IS_CONST && IS_CV == IS_CONST) {
		/* pass */
	} else if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
		if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
			if (EXPECTED(Z_LVAL_P(op1) == Z_LVAL_P(op2))) {
is_equal_true:
				ZEND_VM_SMART_BRANCH_TRUE_JMPNZ();
			} else {
is_equal_false:
				ZEND_VM_SMART_BRANCH_FALSE_JMPNZ();
			}
		} else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
			d1 = (double)Z_LVAL_P(op1);
			d2 = Z_DVAL_P(op2);
			goto is_equal_double;
		}
	} else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) {
		if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
			d1 = Z_DVAL_P(op1);
			d2 = Z_DVAL_P(op2);
is_equal_double:
			if (d1 == d2) {
				goto is_equal_true;
			} else {
				goto is_equal_false;
			}
		} else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
			d1 = Z_DVAL_P(op1);
			d2 = (double)Z_LVAL_P(op2);
			goto is_equal_double;
		}
	} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
		if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
			bool result = zend_fast_equal_strings(Z_STR_P(op1), Z_STR_P(op2));
			if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
				zval_ptr_dtor_str(op1);
			}
			if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
				zval_ptr_dtor_str(op2);
			}
			if (result) {
				goto is_equal_true;
			} else {
				goto is_equal_false;
			}
		}
	}
	ZEND_VM_DISPATCH_TO_HELPER(zend_is_equal_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_EX op1, op2));
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_IS_NOT_EQUAL_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;
	double d1, d2;

	op1 = EX_VAR(opline->op1.var);
	op2 = EX_VAR(opline->op2.var);
	if (1 && IS_CV == IS_CONST && IS_CV == IS_CONST) {
		/* pass */
	} else if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
		if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
			if (EXPECTED(Z_LVAL_P(op1) != Z_LVAL_P(op2))) {
is_not_equal_true:
				ZEND_VM_SMART_BRANCH_TRUE_NONE();
			} else {
is_not_equal_false:
				ZEND_VM_SMART_BRANCH_FALSE_NONE();
			}
		} else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
			d1 = (double)Z_LVAL_P(op1);
			d2 = Z_DVAL_P(op2);
			goto is_not_equal_double;
		}
	} else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) {
		if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
			d1 = Z_DVAL_P(op1);
			d2 = Z_DVAL_P(op2);
is_not_equal_double:
			if (d1 != d2) {
				goto is_not_equal_true;
			} else {
				goto is_not_equal_false;
			}
		} else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
			d1 = Z_DVAL_P(op1);
			d2 = (double)Z_LVAL_P(op2);
			goto is_not_equal_double;
		}
	} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
		if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
			bool result = zend_fast_equal_strings(Z_STR_P(op1), Z_STR_P(op2));
			if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
				zval_ptr_dtor_str(op1);
			}
			if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
				zval_ptr_dtor_str(op2);
			}
			if (!result) {
				goto is_not_equal_true;
			} else {
				goto is_not_equal_false;
			}
		}
	}
	ZEND_VM_DISPATCH_TO_HELPER(zend_is_not_equal_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_EX op1, op2));
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_IS_NOT_EQUAL_SPEC_CV_CV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;
	double d1, d2;

	op1 = EX_VAR(opline->op1.var);
	op2 = EX_VAR(opline->op2.var);
	if (1 && IS_CV == IS_CONST && IS_CV == IS_CONST) {
		/* pass */
	} else if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
		if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
			if (EXPECTED(Z_LVAL_P(op1) != Z_LVAL_P(op2))) {
is_not_equal_true:
				ZEND_VM_SMART_BRANCH_TRUE_JMPZ();
			} else {
is_not_equal_false:
				ZEND_VM_SMART_BRANCH_FALSE_JMPZ();
			}
		} else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
			d1 = (double)Z_LVAL_P(op1);
			d2 = Z_DVAL_P(op2);
			goto is_not_equal_double;
		}
	} else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) {
		if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
			d1 = Z_DVAL_P(op1);
			d2 = Z_DVAL_P(op2);
is_not_equal_double:
			if (d1 != d2) {
				goto is_not_equal_true;
			} else {
				goto is_not_equal_false;
			}
		} else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
			d1 = Z_DVAL_P(op1);
			d2 = (double)Z_LVAL_P(op2);
			goto is_not_equal_double;
		}
	} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
		if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
			bool result = zend_fast_equal_strings(Z_STR_P(op1), Z_STR_P(op2));
			if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
				zval_ptr_dtor_str(op1);
			}
			if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
				zval_ptr_dtor_str(op2);
			}
			if (!result) {
				goto is_not_equal_true;
			} else {
				goto is_not_equal_false;
			}
		}
	}
	ZEND_VM_DISPATCH_TO_HELPER(zend_is_not_equal_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_EX op1, op2));
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_IS_NOT_EQUAL_SPEC_CV_CV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;
	double d1, d2;

	op1 = EX_VAR(opline->op1.var);
	op2 = EX_VAR(opline->op2.var);
	if (1 && IS_CV == IS_CONST && IS_CV == IS_CONST) {
		/* pass */
	} else if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
		if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
			if (EXPECTED(Z_LVAL_P(op1) != Z_LVAL_P(op2))) {
is_not_equal_true:
				ZEND_VM_SMART_BRANCH_TRUE_JMPNZ();
			} else {
is_not_equal_false:
				ZEND_VM_SMART_BRANCH_FALSE_JMPNZ();
			}
		} else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
			d1 = (double)Z_LVAL_P(op1);
			d2 = Z_DVAL_P(op2);
			goto is_not_equal_double;
		}
	} else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) {
		if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
			d1 = Z_DVAL_P(op1);
			d2 = Z_DVAL_P(op2);
is_not_equal_double:
			if (d1 != d2) {
				goto is_not_equal_true;
			} else {
				goto is_not_equal_false;
			}
		} else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
			d1 = Z_DVAL_P(op1);
			d2 = (double)Z_LVAL_P(op2);
			goto is_not_equal_double;
		}
	} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
		if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
			bool result = zend_fast_equal_strings(Z_STR_P(op1), Z_STR_P(op2));
			if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
				zval_ptr_dtor_str(op1);
			}
			if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
				zval_ptr_dtor_str(op2);
			}
			if (!result) {
				goto is_not_equal_true;
			} else {
				goto is_not_equal_false;
			}
		}
	}
	ZEND_VM_DISPATCH_TO_HELPER(zend_is_not_equal_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_EX op1, op2));
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_SPACESHIP_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;

	SAVE_OPLINE();
	op1 = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
	op2 = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
	compare_function(EX_VAR(opline->result.var), op1, op2);




	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_BOOL_XOR_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;

	SAVE_OPLINE();
	op1 = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
	op2 = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
	boolean_xor_function(EX_VAR(opline->result.var), op1, op2);




	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_ASSIGN_OBJ_OP_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *object;
	zval *property;
	zval *value;
	zval *zptr;
	void *_cache_slot[3] = {0};
	void **cache_slot;
	zend_property_info *prop_info;
	zend_object *zobj;
	zend_string *name, *tmp_name;

	SAVE_OPLINE();
	object = EX_VAR(opline->op1.var);
	property = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);

	do {
		value = get_op_data_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1);

		if (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
			if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
				object = Z_REFVAL_P(object);
				goto assign_op_object;
			}
			if (IS_CV == IS_CV
			 && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
				ZVAL_UNDEFINED_OP1();
			}
			zend_throw_non_object_error(object, property OPLINE_CC EXECUTE_DATA_CC);
			break;
		}

assign_op_object:
		/* here we are sure we are dealing with an object */
		zobj = Z_OBJ_P(object);
		if (IS_CV == IS_CONST) {
			name = Z_STR_P(property);
		} else {
			name = zval_try_get_tmp_string(property, &tmp_name);
			if (UNEXPECTED(!name)) {
				UNDEF_RESULT();
				break;
			}
		}
		cache_slot = (IS_CV == IS_CONST) ? CACHE_ADDR((opline+1)->extended_value) : _cache_slot;
		if (EXPECTED((zptr = zobj->handlers->get_property_ptr_ptr(zobj, name, BP_VAR_RW, cache_slot)) != NULL)) {
			if (UNEXPECTED(Z_ISERROR_P(zptr))) {
				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
					ZVAL_NULL(EX_VAR(opline->result.var));
				}
			} else {
				zend_reference *ref;

				do {
					if (UNEXPECTED(Z_ISREF_P(zptr))) {
						ref = Z_REF_P(zptr);
						zptr = Z_REFVAL_P(zptr);
						if (UNEXPECTED(ZEND_REF_HAS_TYPE_SOURCES(ref))) {
							zend_binary_assign_op_typed_ref(ref, value OPLINE_CC EXECUTE_DATA_CC);
							break;
						}
					}

					prop_info = (zend_property_info*)CACHED_PTR_EX(cache_slot + 2);
					if (prop_info && ZEND_TYPE_IS_SET(prop_info->type)) {
						/* special case for typed properties */
						zend_binary_assign_op_typed_prop(prop_info, zptr, value OPLINE_CC EXECUTE_DATA_CC);
					} else {
						zend_binary_op(zptr, zptr, value OPLINE_CC);
					}
				} while (0);

				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
					ZVAL_COPY(EX_VAR(opline->result.var), zptr);
				}
			}
		} else {
			zend_assign_op_overloaded_property(zobj, name, cache_slot, value OPLINE_CC EXECUTE_DATA_CC);
		}
		if (IS_CV != IS_CONST) {
			zend_tmp_string_release(tmp_name);
		}
	} while (0);

	FREE_OP((opline+1)->op1_type, (opline+1)->op1.var);




	/* assign_obj has two opcodes! */
	ZEND_VM_NEXT_OPCODE_EX(1, 2);
}

/* No specialization for op_types (CONST|TMP|VAR|CV, UNUSED|CONST|TMPVAR) */
static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_ASSIGN_DIM_OP_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *var_ptr;
	zval *value, *container, *dim;
	HashTable *ht;

	SAVE_OPLINE();
	container = EX_VAR(opline->op1.var);

	if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
assign_dim_op_array:
		SEPARATE_ARRAY(container);
		ht = Z_ARRVAL_P(container);
assign_dim_op_new_array:
		dim = EX_VAR(opline->op2.var);
		if (IS_CV == IS_UNUSED) {
			var_ptr = zend_hash_next_index_insert(ht, &EG(uninitialized_zval));
			if (UNEXPECTED(!var_ptr)) {
				zend_cannot_add_element();
				goto assign_dim_op_ret_null;
			}
		} else {
			if (IS_CV == IS_CONST) {
				var_ptr = zend_fetch_dimension_address_inner_RW_CONST(ht, dim EXECUTE_DATA_CC);
			} else {
				var_ptr = zend_fetch_dimension_address_inner_RW(ht, dim EXECUTE_DATA_CC);
			}
			if (UNEXPECTED(!var_ptr)) {
				goto assign_dim_op_ret_null;
			}
		}

		value = get_op_data_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1);

		do {
			if (IS_CV != IS_UNUSED && UNEXPECTED(Z_ISREF_P(var_ptr))) {
				zend_reference *ref = Z_REF_P(var_ptr);
				var_ptr = Z_REFVAL_P(var_ptr);
				if (UNEXPECTED(ZEND_REF_HAS_TYPE_SOURCES(ref))) {
					zend_binary_assign_op_typed_ref(ref, value OPLINE_CC EXECUTE_DATA_CC);
					break;
				}
			}
			zend_binary_op(var_ptr, var_ptr, value OPLINE_CC);
		} while (0);

		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
			ZVAL_COPY(EX_VAR(opline->result.var), var_ptr);
		}
		FREE_OP((opline+1)->op1_type, (opline+1)->op1.var);
	} else {
		if (EXPECTED(Z_ISREF_P(container))) {
			container = Z_REFVAL_P(container);
			if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
				goto assign_dim_op_array;
			}
		}

		if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
			zend_object *obj = Z_OBJ_P(container);

			dim = EX_VAR(opline->op2.var);
			if (IS_CV == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
				dim++;
			}
			zend_binary_assign_op_obj_dim(obj, dim OPLINE_CC EXECUTE_DATA_CC);
		} else if (EXPECTED(Z_TYPE_P(container) <= IS_FALSE)) {
			uint8_t old_type;

			if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(container) == IS_UNDEF)) {
				ZVAL_UNDEFINED_OP1();
			}
			ht = zend_new_array(8);
			old_type = Z_TYPE_P(container);
			ZVAL_ARR(container, ht);
			if (UNEXPECTED(old_type == IS_FALSE)) {
				GC_ADDREF(ht);
				zend_false_to_array_deprecated();
				if (UNEXPECTED(GC_DELREF(ht) == 0)) {
					zend_array_destroy(ht);
					goto assign_dim_op_ret_null;
				}
			}
			goto assign_dim_op_new_array;
		} else {
			dim = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
			zend_binary_assign_op_dim_slow(container, dim OPLINE_CC EXECUTE_DATA_CC);
assign_dim_op_ret_null:
			FREE_OP((opline+1)->op1_type, (opline+1)->op1.var);
			if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
				ZVAL_NULL(EX_VAR(opline->result.var));
			}
		}
	}




	ZEND_VM_NEXT_OPCODE_EX(1, 2);
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_ASSIGN_OP_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *var_ptr;
	zval *value;

	SAVE_OPLINE();
	value = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
	var_ptr = _get_zval_ptr_cv_BP_VAR_RW(opline->op1.var EXECUTE_DATA_CC);

	do {
		if (UNEXPECTED(Z_TYPE_P(var_ptr) == IS_REFERENCE)) {
			zend_reference *ref = Z_REF_P(var_ptr);
			var_ptr = Z_REFVAL_P(var_ptr);
			if (UNEXPECTED(ZEND_REF_HAS_TYPE_SOURCES(ref))) {
				zend_binary_assign_op_typed_ref(ref, value OPLINE_CC EXECUTE_DATA_CC);
				break;
			}
		}
		zend_binary_op(var_ptr, var_ptr, value OPLINE_CC);
	} while (0);

	if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
		ZVAL_COPY(EX_VAR(opline->result.var), var_ptr);
	}




	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_PRE_INC_OBJ_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *object;
	zval *property;
	zval *zptr;
	void *_cache_slot[3] = {0};
	void **cache_slot;
	zend_property_info *prop_info;
	zend_object *zobj;
	zend_string *name, *tmp_name;

	SAVE_OPLINE();
	object = EX_VAR(opline->op1.var);
	property = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);

	do {
		if (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
			if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
				object = Z_REFVAL_P(object);
				goto pre_incdec_object;
			}
			if (IS_CV == IS_CV
			 && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
				ZVAL_UNDEFINED_OP1();
			}
			zend_throw_non_object_error(object, property OPLINE_CC EXECUTE_DATA_CC);
			break;
		}

pre_incdec_object:
		/* here we are sure we are dealing with an object */
		zobj = Z_OBJ_P(object);
		if (IS_CV == IS_CONST) {
			name = Z_STR_P(property);
		} else {
			name = zval_try_get_tmp_string(property, &tmp_name);
			if (UNEXPECTED(!name)) {
				UNDEF_RESULT();
				break;
			}
		}
		cache_slot = (IS_CV == IS_CONST) ? CACHE_ADDR(opline->extended_value) : _cache_slot;
		if (EXPECTED((zptr = zobj->handlers->get_property_ptr_ptr(zobj, name, BP_VAR_RW, cache_slot)) != NULL)) {
			if (UNEXPECTED(Z_ISERROR_P(zptr))) {
				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
					ZVAL_NULL(EX_VAR(opline->result.var));
				}
			} else {
				prop_info = (zend_property_info *) CACHED_PTR_EX(cache_slot + 2);
				zend_pre_incdec_property_zval(zptr,
					prop_info && ZEND_TYPE_IS_SET(prop_info->type) ? prop_info : NULL OPLINE_CC EXECUTE_DATA_CC);
			}
		} else {
			zend_pre_incdec_overloaded_property(zobj, name, cache_slot OPLINE_CC EXECUTE_DATA_CC);
		}
		if (IS_CV != IS_CONST) {
			zend_tmp_string_release(tmp_name);
		}
	} while (0);




	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_POST_INC_OBJ_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *object;
	zval *property;
	zval *zptr;
	void *_cache_slot[3] = {0};
	void **cache_slot;
	zend_property_info *prop_info;
	zend_object *zobj;
	zend_string *name, *tmp_name;

	SAVE_OPLINE();
	object = EX_VAR(opline->op1.var);
	property = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);

	do {
		if (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
			if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
				object = Z_REFVAL_P(object);
				goto post_incdec_object;
			}
			if (IS_CV == IS_CV
			 && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
				ZVAL_UNDEFINED_OP1();
			}
			zend_throw_non_object_error(object, property OPLINE_CC EXECUTE_DATA_CC);
			break;
		}

post_incdec_object:
		/* here we are sure we are dealing with an object */
		zobj = Z_OBJ_P(object);
		if (IS_CV == IS_CONST) {
			name = Z_STR_P(property);
		} else {
			name = zval_try_get_tmp_string(property, &tmp_name);
			if (UNEXPECTED(!name)) {
				ZVAL_UNDEF(EX_VAR(opline->result.var));
				break;
			}
		}
		cache_slot = (IS_CV == IS_CONST) ? CACHE_ADDR(opline->extended_value) : _cache_slot;
		if (EXPECTED((zptr = zobj->handlers->get_property_ptr_ptr(zobj, name, BP_VAR_RW, cache_slot)) != NULL)) {
			if (UNEXPECTED(Z_ISERROR_P(zptr))) {
				ZVAL_NULL(EX_VAR(opline->result.var));
			} else {
				prop_info = (zend_property_info*)CACHED_PTR_EX(cache_slot + 2);
				zend_post_incdec_property_zval(zptr,
					prop_info && ZEND_TYPE_IS_SET(prop_info->type) ? prop_info : NULL OPLINE_CC EXECUTE_DATA_CC);
			}
		} else {
			zend_post_incdec_overloaded_property(zobj, name, cache_slot OPLINE_CC EXECUTE_DATA_CC);
		}
		if (IS_CV != IS_CONST) {
			zend_tmp_string_release(tmp_name);
		}
	} while (0);




	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_FETCH_DIM_R_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *container, *dim, *value;

	SAVE_OPLINE();
	container = EX_VAR(opline->op1.var);
	dim = EX_VAR(opline->op2.var);
	if (IS_CV != IS_CONST) {
		if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
fetch_dim_r_array:
			value = zend_fetch_dimension_address_inner(Z_ARRVAL_P(container), dim, IS_CV, BP_VAR_R EXECUTE_DATA_CC);
			ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
		} else if (EXPECTED(Z_TYPE_P(container) == IS_REFERENCE)) {
			container = Z_REFVAL_P(container);
			if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
				goto fetch_dim_r_array;
			} else {
				goto fetch_dim_r_slow;
			}
		} else {
fetch_dim_r_slow:
			if (IS_CV == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
				dim++;
			}
			zend_fetch_dimension_address_read_R_slow(container, dim OPLINE_CC EXECUTE_DATA_CC);
		}
	} else {
		zend_fetch_dimension_address_read_R(container, dim, IS_CV OPLINE_CC EXECUTE_DATA_CC);
	}




	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_FETCH_DIM_W_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *container;

	SAVE_OPLINE();
	container = EX_VAR(opline->op1.var);
	zend_fetch_dimension_address_W(container, EX_VAR(opline->op2.var), IS_CV OPLINE_CC EXECUTE_DATA_CC);


	if (IS_CV == IS_VAR) {
		FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
	}
	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_FETCH_DIM_RW_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *container;

	SAVE_OPLINE();
	container = EX_VAR(opline->op1.var);
	zend_fetch_dimension_address_RW(container, EX_VAR(opline->op2.var), IS_CV OPLINE_CC EXECUTE_DATA_CC);


	if (IS_CV == IS_VAR) {
		FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
	}
	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_FETCH_DIM_IS_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *container;

	SAVE_OPLINE();
	container = EX_VAR(opline->op1.var);
	zend_fetch_dimension_address_read_IS(container, EX_VAR(opline->op2.var), IS_CV OPLINE_CC EXECUTE_DATA_CC);




	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
#if 0
	USE_OPLINE
#endif

	if (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) {
		if ((IS_CV & (IS_CONST|IS_TMP_VAR))) {
			ZEND_VM_TAIL_CALL(zend_use_tmp_in_write_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
		}
		ZEND_VM_TAIL_CALL(ZEND_FETCH_DIM_W_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
	} else {
		if (IS_CV == IS_UNUSED) {
			ZEND_VM_TAIL_CALL(zend_use_undef_in_read_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
		}
		ZEND_VM_TAIL_CALL(ZEND_FETCH_DIM_R_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
	}
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_FETCH_DIM_UNSET_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *container;

	SAVE_OPLINE();
	container = EX_VAR(opline->op1.var);
	zend_fetch_dimension_address_UNSET(container, EX_VAR(opline->op2.var), IS_CV OPLINE_CC EXECUTE_DATA_CC);


	if (IS_CV == IS_VAR) {
		FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
	}
	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_FETCH_OBJ_R_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *container;
	void **cache_slot = NULL;

	SAVE_OPLINE();
	container = EX_VAR(opline->op1.var);

	if (IS_CV == IS_CONST ||
	    (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
		do {
			if ((IS_CV & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
				container = Z_REFVAL_P(container);
				if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
					break;
				}
			}
			if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
				ZVAL_UNDEFINED_OP1();
			}
			zend_wrong_property_read(container, _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC));
			ZVAL_NULL(EX_VAR(opline->result.var));
			goto fetch_obj_r_finish;
		} while (0);
	}

	/* here we are sure we are dealing with an object */
	do {
		zend_object *zobj = Z_OBJ_P(container);
		zend_string *name, *tmp_name;
		zval *retval;

		if (IS_CV == IS_CONST) {
			cache_slot = CACHE_ADDR(opline->extended_value & ~ZEND_FETCH_REF /* FUNC_ARG fetch may contain it */);

			if (EXPECTED(zobj->ce == CACHED_PTR_EX(cache_slot))) {
				uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);

				if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
fetch_obj_r_simple:
					retval = OBJ_PROP(zobj, prop_offset);
					if (EXPECTED(Z_TYPE_INFO_P(retval) != IS_UNDEF)) {
						if (0 || (IS_CV & (IS_TMP_VAR|IS_VAR)) != 0) {
							goto fetch_obj_r_copy;
						} else {
fetch_obj_r_fast_copy:
							ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
							ZEND_VM_NEXT_OPCODE();
						}
					}
				} else if (UNEXPECTED(IS_HOOKED_PROPERTY_OFFSET(prop_offset))) {
					zend_property_info *prop_info = CACHED_PTR_EX(cache_slot + 2);
					if (ZEND_IS_PROPERTY_HOOK_SIMPLE_READ(prop_offset)) {
						prop_offset = prop_info->offset;
						goto fetch_obj_r_simple;
					} else if (EXPECTED(ZEND_IS_PROPERTY_HOOK_SIMPLE_GET(prop_offset))) {
						zend_function *hook = prop_info->hooks[ZEND_PROPERTY_HOOK_GET];
						ZEND_ASSERT(hook->type == ZEND_USER_FUNCTION);
						ZEND_ASSERT(RUN_TIME_CACHE(&hook->op_array));

						uint32_t call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_HAS_THIS;
						if (IS_CV & IS_CV) {
							GC_ADDREF(zobj);
						}
						if (IS_CV & (IS_CV|IS_VAR|IS_TMP_VAR)) {
							call_info |= ZEND_CALL_RELEASE_THIS;
						}
						zend_execute_data *call = zend_vm_stack_push_call_frame(call_info, hook, 0, zobj);
						call->prev_execute_data = execute_data;
						call->call = NULL;
						call->return_value = EX_VAR(opline->result.var);
						call->run_time_cache = RUN_TIME_CACHE(&hook->op_array);

						execute_data = call;
						EG(current_execute_data) = execute_data;
						zend_init_cvs(0, hook->op_array.last_var EXECUTE_DATA_CC);

#if defined(ZEND_VM_IP_GLOBAL_REG) && ((ZEND_VM_KIND == ZEND_VM_KIND_CALL) || (ZEND_VM_KIND == ZEND_VM_KIND_HYBRID))
						opline = hook->op_array.opcodes;
#else
						EX(opline) = hook->op_array.opcodes;
#endif
						LOAD_OPLINE_EX();




						ZEND_VM_ENTER_EX();
					}
					/* Fall through to read_property for hooks. */
				} else if (EXPECTED(zobj->properties != NULL)) {
					ZEND_ASSERT(IS_DYNAMIC_PROPERTY_OFFSET(prop_offset));
					name = Z_STR_P(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC));
					if (!IS_UNKNOWN_DYNAMIC_PROPERTY_OFFSET(prop_offset)) {
						uintptr_t idx = ZEND_DECODE_DYN_PROP_OFFSET(prop_offset);

						if (EXPECTED(idx < zobj->properties->nNumUsed * sizeof(Bucket))) {
							Bucket *p = (Bucket*)((char*)zobj->properties->arData + idx);

							if (EXPECTED(p->key == name) ||
							    (EXPECTED(p->h == ZSTR_H(name)) &&
							     EXPECTED(p->key != NULL) &&
							     EXPECTED(zend_string_equal_content(p->key, name)))) {
								retval = &p->val;
								if (0 || (IS_CV & (IS_TMP_VAR|IS_VAR)) != 0) {
									goto fetch_obj_r_copy;
								} else {
									goto fetch_obj_r_fast_copy;
								}
							}
						}
						CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_DYNAMIC_PROPERTY_OFFSET);
					}
					retval = zend_hash_find_known_hash(zobj->properties, name);
					if (EXPECTED(retval)) {
						uintptr_t idx = (char*)retval - (char*)zobj->properties->arData;
						CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_ENCODE_DYN_PROP_OFFSET(idx));
						if (0 || (IS_CV & (IS_TMP_VAR|IS_VAR)) != 0) {
							goto fetch_obj_r_copy;
						} else {
							goto fetch_obj_r_fast_copy;
						}
					}
				}
			}
			name = Z_STR_P(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC));
		} else {
			name = zval_try_get_tmp_string(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC), &tmp_name);
			if (UNEXPECTED(!name)) {
				ZVAL_UNDEF(EX_VAR(opline->result.var));
				break;
			}
		}

#if ZEND_DEBUG
		/* For non-standard object handlers, verify a declared property type in debug builds.
		 * Fetch prop_info before calling read_property(), as it may deallocate the object. */
		zend_property_info *prop_info = NULL;
		if (zobj->handlers->read_property != zend_std_read_property) {
			prop_info = zend_get_property_info(zobj->ce, name, /* silent */ true);
		}
#endif
		retval = zobj->handlers->read_property(zobj, name, BP_VAR_R, cache_slot, EX_VAR(opline->result.var));
#if ZEND_DEBUG
		if (!EG(exception) && prop_info && prop_info != ZEND_WRONG_PROPERTY_INFO
				&& ZEND_TYPE_IS_SET(prop_info->type)) {
			ZVAL_OPT_DEREF(retval);
			zend_verify_property_type(prop_info, retval, /* strict */ true);
		}
#endif

		if (IS_CV != IS_CONST) {
			zend_tmp_string_release(tmp_name);
		}

		if (retval != EX_VAR(opline->result.var)) {
fetch_obj_r_copy:
			ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
		} else if (UNEXPECTED(Z_ISREF_P(retval))) {
			zend_unwrap_reference(retval);
		}
	} while (0);

fetch_obj_r_finish:




	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_FETCH_OBJ_W_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *property, *container, *result;

	SAVE_OPLINE();

	container = EX_VAR(opline->op1.var);
	property = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
	result = EX_VAR(opline->result.var);
	zend_fetch_property_address(
		result, container, IS_CV, property, IS_CV,
		((IS_CV == IS_CONST) ? CACHE_ADDR(opline->extended_value & ~ZEND_FETCH_OBJ_FLAGS) : NULL),
		BP_VAR_W, opline->extended_value, NULL OPLINE_CC EXECUTE_DATA_CC);


	if (IS_CV == IS_VAR) {
		FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
	}
	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_FETCH_OBJ_RW_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *property, *container, *result;

	SAVE_OPLINE();
	container = EX_VAR(opline->op1.var);
	property = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
	result = EX_VAR(opline->result.var);
	zend_fetch_property_address(result, container, IS_CV, property, IS_CV, ((IS_CV == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL), BP_VAR_RW, 0, NULL OPLINE_CC EXECUTE_DATA_CC);


	if (IS_CV == IS_VAR) {
		FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
	}
	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_FETCH_OBJ_IS_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *container;
	void **cache_slot = NULL;

	SAVE_OPLINE();
	container = _get_zval_ptr_cv_BP_VAR_IS(opline->op1.var EXECUTE_DATA_CC);

	if (IS_CV == IS_CONST ||
	    (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
		do {
			if ((IS_CV & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
				container = Z_REFVAL_P(container);
				if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
					break;
				}
			}
			if (IS_CV == IS_CV && Z_TYPE_P(EX_VAR(opline->op2.var)) == IS_UNDEF) {
				ZVAL_UNDEFINED_OP2();
			}
			ZVAL_NULL(EX_VAR(opline->result.var));
			goto fetch_obj_is_finish;
		} while (0);
	}

	/* here we are sure we are dealing with an object */
	do {
		zend_object *zobj = Z_OBJ_P(container);
		zend_string *name, *tmp_name;
		zval *retval;

		if (IS_CV == IS_CONST) {
			cache_slot = CACHE_ADDR(opline->extended_value);

			if (EXPECTED(zobj->ce == CACHED_PTR_EX(cache_slot))) {
				uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);

				if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
fetch_obj_is_simple:
					retval = OBJ_PROP(zobj, prop_offset);
					if (EXPECTED(Z_TYPE_P(retval) != IS_UNDEF)) {
						if (0 || (IS_CV & (IS_TMP_VAR|IS_VAR)) != 0) {
							goto fetch_obj_is_copy;
						} else {
fetch_obj_is_fast_copy:
							ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
							ZEND_VM_NEXT_OPCODE();
						}
					}
				} else if (UNEXPECTED(IS_HOOKED_PROPERTY_OFFSET(prop_offset))) {
					if (ZEND_IS_PROPERTY_HOOK_SIMPLE_READ(prop_offset)) {
						zend_property_info *prop_info = CACHED_PTR_EX(cache_slot + 2);
						prop_offset = prop_info->offset;
						goto fetch_obj_is_simple;
					}
					/* Fall through to read_property for hooks. */
				} else if (EXPECTED(zobj->properties != NULL)) {
					ZEND_ASSERT(IS_DYNAMIC_PROPERTY_OFFSET(prop_offset));
					name = Z_STR_P(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC));
					if (!IS_UNKNOWN_DYNAMIC_PROPERTY_OFFSET(prop_offset)) {
						uintptr_t idx = ZEND_DECODE_DYN_PROP_OFFSET(prop_offset);

						if (EXPECTED(idx < zobj->properties->nNumUsed * sizeof(Bucket))) {
							Bucket *p = (Bucket*)((char*)zobj->properties->arData + idx);

							if (EXPECTED(p->key == name) ||
							    (EXPECTED(p->h == ZSTR_H(name)) &&
							     EXPECTED(p->key != NULL) &&
							     EXPECTED(zend_string_equal_content(p->key, name)))) {
								retval = &p->val;
								if (0 || (IS_CV & (IS_TMP_VAR|IS_VAR)) != 0) {
									goto fetch_obj_is_copy;
								} else {
									goto fetch_obj_is_fast_copy;
								}
							}
						}
						CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_DYNAMIC_PROPERTY_OFFSET);
					}
					retval = zend_hash_find_known_hash(zobj->properties, name);
					if (EXPECTED(retval)) {
						uintptr_t idx = (char*)retval - (char*)zobj->properties->arData;
						CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_ENCODE_DYN_PROP_OFFSET(idx));
						if (0 || (IS_CV & (IS_TMP_VAR|IS_VAR)) != 0) {
							goto fetch_obj_is_copy;
						} else {
							goto fetch_obj_is_fast_copy;
						}
					}
				}
			}
			name = Z_STR_P(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC));
		} else {
			name = zval_try_get_tmp_string(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC), &tmp_name);
			if (UNEXPECTED(!name)) {
				ZVAL_UNDEF(EX_VAR(opline->result.var));
				break;
			}
		}

		retval = zobj->handlers->read_property(zobj, name, BP_VAR_IS, cache_slot, EX_VAR(opline->result.var));

		if (IS_CV != IS_CONST) {
			zend_tmp_string_release(tmp_name);
		}

		if (retval != EX_VAR(opline->result.var)) {
fetch_obj_is_copy:
			ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
		} else if (UNEXPECTED(Z_ISREF_P(retval))) {
			zend_unwrap_reference(retval);
		}
	} while (0);

fetch_obj_is_finish:




	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
#if 0
	USE_OPLINE
#endif

	if (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) {
		/* Behave like FETCH_OBJ_W */
		if ((IS_CV & (IS_CONST|IS_TMP_VAR))) {
			ZEND_VM_TAIL_CALL(zend_use_tmp_in_write_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
		}
		ZEND_VM_TAIL_CALL(ZEND_FETCH_OBJ_W_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
	} else {
		ZEND_VM_TAIL_CALL(ZEND_FETCH_OBJ_R_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
	}
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_FETCH_OBJ_UNSET_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *container, *property, *result;

	SAVE_OPLINE();
	container = EX_VAR(opline->op1.var);
	property = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
	result = EX_VAR(opline->result.var);
	zend_fetch_property_address(result, container, IS_CV, property, IS_CV, ((IS_CV == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL), BP_VAR_UNSET, 0, NULL OPLINE_CC EXECUTE_DATA_CC);


	if (IS_CV == IS_VAR) {
		FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
	}
	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_ASSIGN_OBJ_SPEC_CV_CV_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *object, *value, tmp;
	zend_object *zobj;
	zend_string *name, *tmp_name;
	zend_refcounted *garbage = NULL;

	SAVE_OPLINE();
	object = EX_VAR(opline->op1.var);
	value = RT_CONSTANT((opline+1), (opline+1)->op1);

	if (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
		if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
			object = Z_REFVAL_P(object);
			goto assign_object;
		}
		zend_throw_non_object_error(object, _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC) OPLINE_CC EXECUTE_DATA_CC);
		value = &EG(uninitialized_zval);
		goto free_and_exit_assign_obj;
	}

assign_object:
	zobj = Z_OBJ_P(object);
	if (IS_CV == IS_CONST) {
		if (EXPECTED(zobj->ce == CACHED_PTR(opline->extended_value))) {
			void **cache_slot = CACHE_ADDR(opline->extended_value);
			uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
			zval *property_val;
			zend_property_info *prop_info;

			if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
				prop_info = (zend_property_info*) CACHED_PTR_EX(cache_slot + 2);

assign_obj_simple:
				property_val = OBJ_PROP(zobj, prop_offset);
				if (Z_TYPE_P(property_val) != IS_UNDEF) {
					if (prop_info != NULL) {
						value = zend_assign_to_typed_prop(prop_info, property_val, value, &garbage EXECUTE_DATA_CC);
						goto free_and_exit_assign_obj;
					} else {
fast_assign_obj:
						value = zend_assign_to_variable_ex(property_val, value, IS_CONST, EX_USES_STRICT_TYPES(), &garbage);
						if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
							ZVAL_COPY(EX_VAR(opline->result.var), value);
						}
						goto exit_assign_obj;
					}
				}
			} else if (EXPECTED(IS_DYNAMIC_PROPERTY_OFFSET(prop_offset))) {
				name = Z_STR_P(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC));
				if (UNEXPECTED(zend_lazy_object_must_init(zobj))) {
					zobj = zend_lazy_object_init(zobj);
					if (!zobj) {
						value = &EG(uninitialized_zval);
						goto free_and_exit_assign_obj;
					}
				}
				if (!zobj->ce->__set && (zobj->ce->ce_flags & ZEND_ACC_ALLOW_DYNAMIC_PROPERTIES)) {
					rebuild_object_properties_internal(zobj);
				}
				if (EXPECTED(zobj->properties != NULL)) {
					if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
						if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
							GC_DELREF(zobj->properties);
						}
						zobj->properties = zend_array_dup(zobj->properties);
					}
					property_val = zend_hash_find_known_hash(zobj->properties, name);
					if (property_val) {
						goto fast_assign_obj;
					}
				}

				if (!zobj->ce->__set && (zobj->ce->ce_flags & ZEND_ACC_ALLOW_DYNAMIC_PROPERTIES)) {
					if (IS_CONST == IS_CONST) {
						if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
							Z_ADDREF_P(value);
						}
					} else if (IS_CONST != IS_TMP_VAR) {
						if (Z_ISREF_P(value)) {
							if (IS_CONST == IS_VAR) {
								zend_reference *ref = Z_REF_P(value);
								if (GC_DELREF(ref) == 0) {
									ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
									efree_size(ref, sizeof(zend_reference));
									value = &tmp;
								} else {
									value = Z_REFVAL_P(value);
									Z_TRY_ADDREF_P(value);
								}
							} else {
								value = Z_REFVAL_P(value);
								Z_TRY_ADDREF_P(value);
							}
						} else if (IS_CONST == IS_CV) {
							Z_TRY_ADDREF_P(value);
						}
					}
					zend_hash_add_new(zobj->properties, name, value);
					if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
						ZVAL_COPY(EX_VAR(opline->result.var), value);
					}
					goto exit_assign_obj;
				}
			} else {
				ZEND_ASSERT(IS_HOOKED_PROPERTY_OFFSET(prop_offset));
				if (ZEND_IS_PROPERTY_HOOK_SIMPLE_WRITE(prop_offset)) {
					prop_info = CACHED_PTR_EX(cache_slot + 2);
					prop_offset = prop_info->offset;
					if (!ZEND_TYPE_IS_SET(prop_info->type)) {
						prop_info = NULL;
					}
					goto assign_obj_simple;
				}
				/* Fall through to write_property for hooks. */
			}
		}
		name = Z_STR_P(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC));
	} else {
		name = zval_try_get_tmp_string(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC), &tmp_name);
		if (UNEXPECTED(!name)) {


			UNDEF_RESULT();
			goto exit_assign_obj;
		}
	}

	if (IS_CONST == IS_CV || IS_CONST == IS_VAR) {
		ZVAL_DEREF(value);
	}

	value = zobj->handlers->write_property(zobj, name, value, (IS_CV == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);

	if (IS_CV != IS_CONST) {
		zend_tmp_string_release(tmp_name);
	}

free_and_exit_assign_obj:
	if (UNEXPECTED(RETURN_VALUE_USED(opline)) && value) {
		ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
	}


exit_assign_obj:
	if (garbage) {
		GC_DTOR_NO_REF(garbage);
	}




	/* assign_obj has two opcodes! */
	ZEND_VM_NEXT_OPCODE_EX(1, 2);
}

/* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CONST|VAR) */
static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_ASSIGN_OBJ_SPEC_CV_CV_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *object, *value, tmp;
	zend_object *zobj;
	zend_string *name, *tmp_name;
	zend_refcounted *garbage = NULL;

	SAVE_OPLINE();
	object = EX_VAR(opline->op1.var);
	value = _get_zval_ptr_tmp((opline+1)->op1.var EXECUTE_DATA_CC);

	if (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
		if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
			object = Z_REFVAL_P(object);
			goto assign_object;
		}
		zend_throw_non_object_error(object, _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC) OPLINE_CC EXECUTE_DATA_CC);
		value = &EG(uninitialized_zval);
		goto free_and_exit_assign_obj;
	}

assign_object:
	zobj = Z_OBJ_P(object);
	if (IS_CV == IS_CONST) {
		if (EXPECTED(zobj->ce == CACHED_PTR(opline->extended_value))) {
			void **cache_slot = CACHE_ADDR(opline->extended_value);
			uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
			zval *property_val;
			zend_property_info *prop_info;

			if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
				prop_info = (zend_property_info*) CACHED_PTR_EX(cache_slot + 2);

assign_obj_simple:
				property_val = OBJ_PROP(zobj, prop_offset);
				if (Z_TYPE_P(property_val) != IS_UNDEF) {
					if (prop_info != NULL) {
						value = zend_assign_to_typed_prop(prop_info, property_val, value, &garbage EXECUTE_DATA_CC);
						goto free_and_exit_assign_obj;
					} else {
fast_assign_obj:
						value = zend_assign_to_variable_ex(property_val, value, IS_TMP_VAR, EX_USES_STRICT_TYPES(), &garbage);
						if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
							ZVAL_COPY(EX_VAR(opline->result.var), value);
						}
						goto exit_assign_obj;
					}
				}
			} else if (EXPECTED(IS_DYNAMIC_PROPERTY_OFFSET(prop_offset))) {
				name = Z_STR_P(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC));
				if (UNEXPECTED(zend_lazy_object_must_init(zobj))) {
					zobj = zend_lazy_object_init(zobj);
					if (!zobj) {
						value = &EG(uninitialized_zval);
						goto free_and_exit_assign_obj;
					}
				}
				if (!zobj->ce->__set && (zobj->ce->ce_flags & ZEND_ACC_ALLOW_DYNAMIC_PROPERTIES)) {
					rebuild_object_properties_internal(zobj);
				}
				if (EXPECTED(zobj->properties != NULL)) {
					if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
						if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
							GC_DELREF(zobj->properties);
						}
						zobj->properties = zend_array_dup(zobj->properties);
					}
					property_val = zend_hash_find_known_hash(zobj->properties, name);
					if (property_val) {
						goto fast_assign_obj;
					}
				}

				if (!zobj->ce->__set && (zobj->ce->ce_flags & ZEND_ACC_ALLOW_DYNAMIC_PROPERTIES)) {
					if (IS_TMP_VAR == IS_CONST) {
						if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
							Z_ADDREF_P(value);
						}
					} else if (IS_TMP_VAR != IS_TMP_VAR) {
						if (Z_ISREF_P(value)) {
							if (IS_TMP_VAR == IS_VAR) {
								zend_reference *ref = Z_REF_P(value);
								if (GC_DELREF(ref) == 0) {
									ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
									efree_size(ref, sizeof(zend_reference));
									value = &tmp;
								} else {
									value = Z_REFVAL_P(value);
									Z_TRY_ADDREF_P(value);
								}
							} else {
								value = Z_REFVAL_P(value);
								Z_TRY_ADDREF_P(value);
							}
						} else if (IS_TMP_VAR == IS_CV) {
							Z_TRY_ADDREF_P(value);
						}
					}
					zend_hash_add_new(zobj->properties, name, value);
					if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
						ZVAL_COPY(EX_VAR(opline->result.var), value);
					}
					goto exit_assign_obj;
				}
			} else {
				ZEND_ASSERT(IS_HOOKED_PROPERTY_OFFSET(prop_offset));
				if (ZEND_IS_PROPERTY_HOOK_SIMPLE_WRITE(prop_offset)) {
					prop_info = CACHED_PTR_EX(cache_slot + 2);
					prop_offset = prop_info->offset;
					if (!ZEND_TYPE_IS_SET(prop_info->type)) {
						prop_info = NULL;
					}
					goto assign_obj_simple;
				}
				/* Fall through to write_property for hooks. */
			}
		}
		name = Z_STR_P(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC));
	} else {
		name = zval_try_get_tmp_string(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC), &tmp_name);
		if (UNEXPECTED(!name)) {
			zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
			UNDEF_RESULT();
			goto exit_assign_obj;
		}
	}

	if (IS_TMP_VAR == IS_CV || IS_TMP_VAR == IS_VAR) {
		ZVAL_DEREF(value);
	}

	value = zobj->handlers->write_property(zobj, name, value, (IS_CV == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);

	if (IS_CV != IS_CONST) {
		zend_tmp_string_release(tmp_name);
	}

free_and_exit_assign_obj:
	if (UNEXPECTED(RETURN_VALUE_USED(opline)) && value) {
		ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
	}
	zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
exit_assign_obj:
	if (garbage) {
		GC_DTOR_NO_REF(garbage);
	}




	/* assign_obj has two opcodes! */
	ZEND_VM_NEXT_OPCODE_EX(1, 2);
}

/* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CONST|VAR) */
static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_ASSIGN_OBJ_SPEC_CV_CV_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *object, *value, tmp;
	zend_object *zobj;
	zend_string *name, *tmp_name;
	zend_refcounted *garbage = NULL;

	SAVE_OPLINE();
	object = EX_VAR(opline->op1.var);
	value = _get_zval_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);

	if (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
		if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
			object = Z_REFVAL_P(object);
			goto assign_object;
		}
		zend_throw_non_object_error(object, _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC) OPLINE_CC EXECUTE_DATA_CC);
		value = &EG(uninitialized_zval);
		goto free_and_exit_assign_obj;
	}

assign_object:
	zobj = Z_OBJ_P(object);
	if (IS_CV == IS_CONST) {
		if (EXPECTED(zobj->ce == CACHED_PTR(opline->extended_value))) {
			void **cache_slot = CACHE_ADDR(opline->extended_value);
			uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
			zval *property_val;
			zend_property_info *prop_info;

			if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
				prop_info = (zend_property_info*) CACHED_PTR_EX(cache_slot + 2);

assign_obj_simple:
				property_val = OBJ_PROP(zobj, prop_offset);
				if (Z_TYPE_P(property_val) != IS_UNDEF) {
					if (prop_info != NULL) {
						value = zend_assign_to_typed_prop(prop_info, property_val, value, &garbage EXECUTE_DATA_CC);
						goto free_and_exit_assign_obj;
					} else {
fast_assign_obj:
						value = zend_assign_to_variable_ex(property_val, value, IS_VAR, EX_USES_STRICT_TYPES(), &garbage);
						if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
							ZVAL_COPY(EX_VAR(opline->result.var), value);
						}
						goto exit_assign_obj;
					}
				}
			} else if (EXPECTED(IS_DYNAMIC_PROPERTY_OFFSET(prop_offset))) {
				name = Z_STR_P(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC));
				if (UNEXPECTED(zend_lazy_object_must_init(zobj))) {
					zobj = zend_lazy_object_init(zobj);
					if (!zobj) {
						value = &EG(uninitialized_zval);
						goto free_and_exit_assign_obj;
					}
				}
				if (!zobj->ce->__set && (zobj->ce->ce_flags & ZEND_ACC_ALLOW_DYNAMIC_PROPERTIES)) {
					rebuild_object_properties_internal(zobj);
				}
				if (EXPECTED(zobj->properties != NULL)) {
					if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
						if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
							GC_DELREF(zobj->properties);
						}
						zobj->properties = zend_array_dup(zobj->properties);
					}
					property_val = zend_hash_find_known_hash(zobj->properties, name);
					if (property_val) {
						goto fast_assign_obj;
					}
				}

				if (!zobj->ce->__set && (zobj->ce->ce_flags & ZEND_ACC_ALLOW_DYNAMIC_PROPERTIES)) {
					if (IS_VAR == IS_CONST) {
						if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
							Z_ADDREF_P(value);
						}
					} else if (IS_VAR != IS_TMP_VAR) {
						if (Z_ISREF_P(value)) {
							if (IS_VAR == IS_VAR) {
								zend_reference *ref = Z_REF_P(value);
								if (GC_DELREF(ref) == 0) {
									ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
									efree_size(ref, sizeof(zend_reference));
									value = &tmp;
								} else {
									value = Z_REFVAL_P(value);
									Z_TRY_ADDREF_P(value);
								}
							} else {
								value = Z_REFVAL_P(value);
								Z_TRY_ADDREF_P(value);
							}
						} else if (IS_VAR == IS_CV) {
							Z_TRY_ADDREF_P(value);
						}
					}
					zend_hash_add_new(zobj->properties, name, value);
					if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
						ZVAL_COPY(EX_VAR(opline->result.var), value);
					}
					goto exit_assign_obj;
				}
			} else {
				ZEND_ASSERT(IS_HOOKED_PROPERTY_OFFSET(prop_offset));
				if (ZEND_IS_PROPERTY_HOOK_SIMPLE_WRITE(prop_offset)) {
					prop_info = CACHED_PTR_EX(cache_slot + 2);
					prop_offset = prop_info->offset;
					if (!ZEND_TYPE_IS_SET(prop_info->type)) {
						prop_info = NULL;
					}
					goto assign_obj_simple;
				}
				/* Fall through to write_property for hooks. */
			}
		}
		name = Z_STR_P(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC));
	} else {
		name = zval_try_get_tmp_string(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC), &tmp_name);
		if (UNEXPECTED(!name)) {
			zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
			UNDEF_RESULT();
			goto exit_assign_obj;
		}
	}

	if (IS_VAR == IS_CV || IS_VAR == IS_VAR) {
		ZVAL_DEREF(value);
	}

	value = zobj->handlers->write_property(zobj, name, value, (IS_CV == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);

	if (IS_CV != IS_CONST) {
		zend_tmp_string_release(tmp_name);
	}

free_and_exit_assign_obj:
	if (UNEXPECTED(RETURN_VALUE_USED(opline)) && value) {
		ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
	}
	zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
exit_assign_obj:
	if (garbage) {
		GC_DTOR_NO_REF(garbage);
	}




	/* assign_obj has two opcodes! */
	ZEND_VM_NEXT_OPCODE_EX(1, 2);
}

/* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CONST|VAR) */
static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_ASSIGN_OBJ_SPEC_CV_CV_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *object, *value, tmp;
	zend_object *zobj;
	zend_string *name, *tmp_name;
	zend_refcounted *garbage = NULL;

	SAVE_OPLINE();
	object = EX_VAR(opline->op1.var);
	value = _get_zval_ptr_cv_BP_VAR_R((opline+1)->op1.var EXECUTE_DATA_CC);

	if (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
		if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
			object = Z_REFVAL_P(object);
			goto assign_object;
		}
		zend_throw_non_object_error(object, _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC) OPLINE_CC EXECUTE_DATA_CC);
		value = &EG(uninitialized_zval);
		goto free_and_exit_assign_obj;
	}

assign_object:
	zobj = Z_OBJ_P(object);
	if (IS_CV == IS_CONST) {
		if (EXPECTED(zobj->ce == CACHED_PTR(opline->extended_value))) {
			void **cache_slot = CACHE_ADDR(opline->extended_value);
			uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
			zval *property_val;
			zend_property_info *prop_info;

			if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
				prop_info = (zend_property_info*) CACHED_PTR_EX(cache_slot + 2);

assign_obj_simple:
				property_val = OBJ_PROP(zobj, prop_offset);
				if (Z_TYPE_P(property_val) != IS_UNDEF) {
					if (prop_info != NULL) {
						value = zend_assign_to_typed_prop(prop_info, property_val, value, &garbage EXECUTE_DATA_CC);
						goto free_and_exit_assign_obj;
					} else {
fast_assign_obj:
						value = zend_assign_to_variable_ex(property_val, value, IS_CV, EX_USES_STRICT_TYPES(), &garbage);
						if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
							ZVAL_COPY(EX_VAR(opline->result.var), value);
						}
						goto exit_assign_obj;
					}
				}
			} else if (EXPECTED(IS_DYNAMIC_PROPERTY_OFFSET(prop_offset))) {
				name = Z_STR_P(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC));
				if (UNEXPECTED(zend_lazy_object_must_init(zobj))) {
					zobj = zend_lazy_object_init(zobj);
					if (!zobj) {
						value = &EG(uninitialized_zval);
						goto free_and_exit_assign_obj;
					}
				}
				if (!zobj->ce->__set && (zobj->ce->ce_flags & ZEND_ACC_ALLOW_DYNAMIC_PROPERTIES)) {
					rebuild_object_properties_internal(zobj);
				}
				if (EXPECTED(zobj->properties != NULL)) {
					if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
						if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
							GC_DELREF(zobj->properties);
						}
						zobj->properties = zend_array_dup(zobj->properties);
					}
					property_val = zend_hash_find_known_hash(zobj->properties, name);
					if (property_val) {
						goto fast_assign_obj;
					}
				}

				if (!zobj->ce->__set && (zobj->ce->ce_flags & ZEND_ACC_ALLOW_DYNAMIC_PROPERTIES)) {
					if (IS_CV == IS_CONST) {
						if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
							Z_ADDREF_P(value);
						}
					} else if (IS_CV != IS_TMP_VAR) {
						if (Z_ISREF_P(value)) {
							if (IS_CV == IS_VAR) {
								zend_reference *ref = Z_REF_P(value);
								if (GC_DELREF(ref) == 0) {
									ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
									efree_size(ref, sizeof(zend_reference));
									value = &tmp;
								} else {
									value = Z_REFVAL_P(value);
									Z_TRY_ADDREF_P(value);
								}
							} else {
								value = Z_REFVAL_P(value);
								Z_TRY_ADDREF_P(value);
							}
						} else if (IS_CV == IS_CV) {
							Z_TRY_ADDREF_P(value);
						}
					}
					zend_hash_add_new(zobj->properties, name, value);
					if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
						ZVAL_COPY(EX_VAR(opline->result.var), value);
					}
					goto exit_assign_obj;
				}
			} else {
				ZEND_ASSERT(IS_HOOKED_PROPERTY_OFFSET(prop_offset));
				if (ZEND_IS_PROPERTY_HOOK_SIMPLE_WRITE(prop_offset)) {
					prop_info = CACHED_PTR_EX(cache_slot + 2);
					prop_offset = prop_info->offset;
					if (!ZEND_TYPE_IS_SET(prop_info->type)) {
						prop_info = NULL;
					}
					goto assign_obj_simple;
				}
				/* Fall through to write_property for hooks. */
			}
		}
		name = Z_STR_P(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC));
	} else {
		name = zval_try_get_tmp_string(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC), &tmp_name);
		if (UNEXPECTED(!name)) {


			UNDEF_RESULT();
			goto exit_assign_obj;
		}
	}

	if (IS_CV == IS_CV || IS_CV == IS_VAR) {
		ZVAL_DEREF(value);
	}

	value = zobj->handlers->write_property(zobj, name, value, (IS_CV == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);

	if (IS_CV != IS_CONST) {
		zend_tmp_string_release(tmp_name);
	}

free_and_exit_assign_obj:
	if (UNEXPECTED(RETURN_VALUE_USED(opline)) && value) {
		ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
	}


exit_assign_obj:
	if (garbage) {
		GC_DTOR_NO_REF(garbage);
	}




	/* assign_obj has two opcodes! */
	ZEND_VM_NEXT_OPCODE_EX(1, 2);
}

/* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CONST|VAR) */
static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_ASSIGN_DIM_SPEC_CV_CV_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *object_ptr, *orig_object_ptr;
	zval *value;
	zval *variable_ptr;
	zval *dim;
	zend_refcounted *garbage = NULL;

	SAVE_OPLINE();
	orig_object_ptr = object_ptr = EX_VAR(opline->op1.var);

	if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
try_assign_dim_array:
		SEPARATE_ARRAY(object_ptr);
		if (IS_CV == IS_UNUSED) {
			value = RT_CONSTANT((opline+1), (opline+1)->op1);
			if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
				HashTable *ht = Z_ARRVAL_P(object_ptr);
				if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE)) {
					GC_ADDREF(ht);
				}
				value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
				if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE) && !GC_DELREF(ht)) {
					zend_array_destroy(ht);
					goto assign_dim_error;
				}
			}
			if (IS_CONST == IS_CV || IS_CONST == IS_VAR) {
				ZVAL_DEREF(value);
			}
			value = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), value);
			if (UNEXPECTED(value == NULL)) {
				zend_cannot_add_element();
				goto assign_dim_error;
			} else if (IS_CONST == IS_CV) {
				if (Z_REFCOUNTED_P(value)) {
					Z_ADDREF_P(value);
				}
			} else if (IS_CONST == IS_VAR) {
				zval *free_op_data = EX_VAR((opline+1)->op1.var);
				if (Z_ISREF_P(free_op_data)) {
					if (Z_REFCOUNTED_P(value)) {
						Z_ADDREF_P(value);
					}
					zval_ptr_dtor_nogc(free_op_data);
				}
			} else if (IS_CONST == IS_CONST) {
				if (UNEXPECTED(Z_REFCOUNTED_P(value))) {
					Z_ADDREF_P(value);
				}
			}
		} else {
			dim = EX_VAR(opline->op2.var);
			if (IS_CV == IS_CONST) {
				variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
			} else {
				variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
			}
			if (UNEXPECTED(variable_ptr == NULL)) {
				goto assign_dim_error;
			}
			value = RT_CONSTANT((opline+1), (opline+1)->op1);
			value = zend_assign_to_variable_ex(variable_ptr, value, IS_CONST, EX_USES_STRICT_TYPES(), &garbage);
		}
		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
			ZVAL_COPY(EX_VAR(opline->result.var), value);
		}
		if (garbage) {
			GC_DTOR_NO_REF(garbage);
		}
	} else {
		if (EXPECTED(Z_ISREF_P(object_ptr))) {
			object_ptr = Z_REFVAL_P(object_ptr);
			if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
				goto try_assign_dim_array;
			}
		}
		if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) {
			zend_object *obj = Z_OBJ_P(object_ptr);

			GC_ADDREF(obj);
			dim = EX_VAR(opline->op2.var);
			if (IS_CV == IS_CV && UNEXPECTED(Z_ISUNDEF_P(dim))) {
				dim = ZVAL_UNDEFINED_OP2();
			} else if (IS_CV == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
				dim++;
			}

			value = RT_CONSTANT((opline+1), (opline+1)->op1);
			if (IS_CONST == IS_CV && UNEXPECTED(Z_ISUNDEF_P(value))) {
				value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
			} else if (IS_CONST & (IS_CV|IS_VAR)) {
				ZVAL_DEREF(value);
			}

			zend_assign_to_object_dim(obj, dim, value OPLINE_CC EXECUTE_DATA_CC);


			if (UNEXPECTED(GC_DELREF(obj) == 0)) {
				zend_objects_store_del(obj);
			}
		} else if (EXPECTED(Z_TYPE_P(object_ptr) == IS_STRING)) {
			if (IS_CV == IS_UNUSED) {
				zend_use_new_element_for_string();


				UNDEF_RESULT();
			} else {
				dim = EX_VAR(opline->op2.var);
				value = RT_CONSTANT((opline+1), (opline+1)->op1);
				zend_assign_to_string_offset(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC);


			}
		} else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
			if (Z_ISREF_P(orig_object_ptr)
			 && ZEND_REF_HAS_TYPE_SOURCES(Z_REF_P(orig_object_ptr))
			 && !zend_verify_ref_array_assignable(Z_REF_P(orig_object_ptr))) {
				dim = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);


				UNDEF_RESULT();
			} else {
				HashTable *ht = zend_new_array(8);
				uint8_t old_type = Z_TYPE_P(object_ptr);

				ZVAL_ARR(object_ptr, ht);
				if (UNEXPECTED(old_type == IS_FALSE)) {
					GC_ADDREF(ht);
					zend_false_to_array_deprecated();
					if (UNEXPECTED(GC_DELREF(ht) == 0)) {
						zend_array_destroy(ht);
						goto assign_dim_error;
					}
				}
				goto try_assign_dim_array;
			}
		} else {
			zend_use_scalar_as_array();
			dim = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
assign_dim_error:


			if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
				ZVAL_NULL(EX_VAR(opline->result.var));
			}
		}
	}
	if (IS_CV != IS_UNUSED) {


	}


	/* assign_dim has two opcodes! */
	ZEND_VM_NEXT_OPCODE_EX(1, 2);
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_ASSIGN_DIM_SPEC_CV_CV_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *object_ptr, *orig_object_ptr;
	zval *value;
	zval *variable_ptr;
	zval *dim;
	zend_refcounted *garbage = NULL;

	SAVE_OPLINE();
	orig_object_ptr = object_ptr = EX_VAR(opline->op1.var);

	if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
try_assign_dim_array:
		SEPARATE_ARRAY(object_ptr);
		if (IS_CV == IS_UNUSED) {
			value = _get_zval_ptr_tmp((opline+1)->op1.var EXECUTE_DATA_CC);
			if (IS_TMP_VAR == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
				HashTable *ht = Z_ARRVAL_P(object_ptr);
				if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE)) {
					GC_ADDREF(ht);
				}
				value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
				if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE) && !GC_DELREF(ht)) {
					zend_array_destroy(ht);
					goto assign_dim_error;
				}
			}
			if (IS_TMP_VAR == IS_CV || IS_TMP_VAR == IS_VAR) {
				ZVAL_DEREF(value);
			}
			value = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), value);
			if (UNEXPECTED(value == NULL)) {
				zend_cannot_add_element();
				goto assign_dim_error;
			} else if (IS_TMP_VAR == IS_CV) {
				if (Z_REFCOUNTED_P(value)) {
					Z_ADDREF_P(value);
				}
			} else if (IS_TMP_VAR == IS_VAR) {
				zval *free_op_data = EX_VAR((opline+1)->op1.var);
				if (Z_ISREF_P(free_op_data)) {
					if (Z_REFCOUNTED_P(value)) {
						Z_ADDREF_P(value);
					}
					zval_ptr_dtor_nogc(free_op_data);
				}
			} else if (IS_TMP_VAR == IS_CONST) {
				if (UNEXPECTED(Z_REFCOUNTED_P(value))) {
					Z_ADDREF_P(value);
				}
			}
		} else {
			dim = EX_VAR(opline->op2.var);
			if (IS_CV == IS_CONST) {
				variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
			} else {
				variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
			}
			if (UNEXPECTED(variable_ptr == NULL)) {
				goto assign_dim_error;
			}
			value = _get_zval_ptr_tmp((opline+1)->op1.var EXECUTE_DATA_CC);
			value = zend_assign_to_variable_ex(variable_ptr, value, IS_TMP_VAR, EX_USES_STRICT_TYPES(), &garbage);
		}
		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
			ZVAL_COPY(EX_VAR(opline->result.var), value);
		}
		if (garbage) {
			GC_DTOR_NO_REF(garbage);
		}
	} else {
		if (EXPECTED(Z_ISREF_P(object_ptr))) {
			object_ptr = Z_REFVAL_P(object_ptr);
			if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
				goto try_assign_dim_array;
			}
		}
		if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) {
			zend_object *obj = Z_OBJ_P(object_ptr);

			GC_ADDREF(obj);
			dim = EX_VAR(opline->op2.var);
			if (IS_CV == IS_CV && UNEXPECTED(Z_ISUNDEF_P(dim))) {
				dim = ZVAL_UNDEFINED_OP2();
			} else if (IS_CV == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
				dim++;
			}

			value = _get_zval_ptr_tmp((opline+1)->op1.var EXECUTE_DATA_CC);
			if (IS_TMP_VAR == IS_CV && UNEXPECTED(Z_ISUNDEF_P(value))) {
				value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
			} else if (IS_TMP_VAR & (IS_CV|IS_VAR)) {
				ZVAL_DEREF(value);
			}

			zend_assign_to_object_dim(obj, dim, value OPLINE_CC EXECUTE_DATA_CC);

			zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
			if (UNEXPECTED(GC_DELREF(obj) == 0)) {
				zend_objects_store_del(obj);
			}
		} else if (EXPECTED(Z_TYPE_P(object_ptr) == IS_STRING)) {
			if (IS_CV == IS_UNUSED) {
				zend_use_new_element_for_string();
				zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
				UNDEF_RESULT();
			} else {
				dim = EX_VAR(opline->op2.var);
				value = _get_zval_ptr_tmp((opline+1)->op1.var EXECUTE_DATA_CC);
				zend_assign_to_string_offset(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC);
				zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
			}
		} else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
			if (Z_ISREF_P(orig_object_ptr)
			 && ZEND_REF_HAS_TYPE_SOURCES(Z_REF_P(orig_object_ptr))
			 && !zend_verify_ref_array_assignable(Z_REF_P(orig_object_ptr))) {
				dim = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
				zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
				UNDEF_RESULT();
			} else {
				HashTable *ht = zend_new_array(8);
				uint8_t old_type = Z_TYPE_P(object_ptr);

				ZVAL_ARR(object_ptr, ht);
				if (UNEXPECTED(old_type == IS_FALSE)) {
					GC_ADDREF(ht);
					zend_false_to_array_deprecated();
					if (UNEXPECTED(GC_DELREF(ht) == 0)) {
						zend_array_destroy(ht);
						goto assign_dim_error;
					}
				}
				goto try_assign_dim_array;
			}
		} else {
			zend_use_scalar_as_array();
			dim = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
assign_dim_error:
			zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
			if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
				ZVAL_NULL(EX_VAR(opline->result.var));
			}
		}
	}
	if (IS_CV != IS_UNUSED) {


	}


	/* assign_dim has two opcodes! */
	ZEND_VM_NEXT_OPCODE_EX(1, 2);
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_ASSIGN_DIM_SPEC_CV_CV_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *object_ptr, *orig_object_ptr;
	zval *value;
	zval *variable_ptr;
	zval *dim;
	zend_refcounted *garbage = NULL;

	SAVE_OPLINE();
	orig_object_ptr = object_ptr = EX_VAR(opline->op1.var);

	if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
try_assign_dim_array:
		SEPARATE_ARRAY(object_ptr);
		if (IS_CV == IS_UNUSED) {
			value = _get_zval_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);
			if (IS_VAR == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
				HashTable *ht = Z_ARRVAL_P(object_ptr);
				if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE)) {
					GC_ADDREF(ht);
				}
				value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
				if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE) && !GC_DELREF(ht)) {
					zend_array_destroy(ht);
					goto assign_dim_error;
				}
			}
			if (IS_VAR == IS_CV || IS_VAR == IS_VAR) {
				ZVAL_DEREF(value);
			}
			value = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), value);
			if (UNEXPECTED(value == NULL)) {
				zend_cannot_add_element();
				goto assign_dim_error;
			} else if (IS_VAR == IS_CV) {
				if (Z_REFCOUNTED_P(value)) {
					Z_ADDREF_P(value);
				}
			} else if (IS_VAR == IS_VAR) {
				zval *free_op_data = EX_VAR((opline+1)->op1.var);
				if (Z_ISREF_P(free_op_data)) {
					if (Z_REFCOUNTED_P(value)) {
						Z_ADDREF_P(value);
					}
					zval_ptr_dtor_nogc(free_op_data);
				}
			} else if (IS_VAR == IS_CONST) {
				if (UNEXPECTED(Z_REFCOUNTED_P(value))) {
					Z_ADDREF_P(value);
				}
			}
		} else {
			dim = EX_VAR(opline->op2.var);
			if (IS_CV == IS_CONST) {
				variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
			} else {
				variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
			}
			if (UNEXPECTED(variable_ptr == NULL)) {
				goto assign_dim_error;
			}
			value = _get_zval_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);
			value = zend_assign_to_variable_ex(variable_ptr, value, IS_VAR, EX_USES_STRICT_TYPES(), &garbage);
		}
		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
			ZVAL_COPY(EX_VAR(opline->result.var), value);
		}
		if (garbage) {
			GC_DTOR_NO_REF(garbage);
		}
	} else {
		if (EXPECTED(Z_ISREF_P(object_ptr))) {
			object_ptr = Z_REFVAL_P(object_ptr);
			if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
				goto try_assign_dim_array;
			}
		}
		if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) {
			zend_object *obj = Z_OBJ_P(object_ptr);

			GC_ADDREF(obj);
			dim = EX_VAR(opline->op2.var);
			if (IS_CV == IS_CV && UNEXPECTED(Z_ISUNDEF_P(dim))) {
				dim = ZVAL_UNDEFINED_OP2();
			} else if (IS_CV == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
				dim++;
			}

			value = _get_zval_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);
			if (IS_VAR == IS_CV && UNEXPECTED(Z_ISUNDEF_P(value))) {
				value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
			} else if (IS_VAR & (IS_CV|IS_VAR)) {
				ZVAL_DEREF(value);
			}

			zend_assign_to_object_dim(obj, dim, value OPLINE_CC EXECUTE_DATA_CC);

			zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
			if (UNEXPECTED(GC_DELREF(obj) == 0)) {
				zend_objects_store_del(obj);
			}
		} else if (EXPECTED(Z_TYPE_P(object_ptr) == IS_STRING)) {
			if (IS_CV == IS_UNUSED) {
				zend_use_new_element_for_string();
				zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
				UNDEF_RESULT();
			} else {
				dim = EX_VAR(opline->op2.var);
				value = _get_zval_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);
				zend_assign_to_string_offset(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC);
				zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
			}
		} else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
			if (Z_ISREF_P(orig_object_ptr)
			 && ZEND_REF_HAS_TYPE_SOURCES(Z_REF_P(orig_object_ptr))
			 && !zend_verify_ref_array_assignable(Z_REF_P(orig_object_ptr))) {
				dim = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
				zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
				UNDEF_RESULT();
			} else {
				HashTable *ht = zend_new_array(8);
				uint8_t old_type = Z_TYPE_P(object_ptr);

				ZVAL_ARR(object_ptr, ht);
				if (UNEXPECTED(old_type == IS_FALSE)) {
					GC_ADDREF(ht);
					zend_false_to_array_deprecated();
					if (UNEXPECTED(GC_DELREF(ht) == 0)) {
						zend_array_destroy(ht);
						goto assign_dim_error;
					}
				}
				goto try_assign_dim_array;
			}
		} else {
			zend_use_scalar_as_array();
			dim = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
assign_dim_error:
			zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
			if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
				ZVAL_NULL(EX_VAR(opline->result.var));
			}
		}
	}
	if (IS_CV != IS_UNUSED) {


	}


	/* assign_dim has two opcodes! */
	ZEND_VM_NEXT_OPCODE_EX(1, 2);
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_ASSIGN_DIM_SPEC_CV_CV_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *object_ptr, *orig_object_ptr;
	zval *value;
	zval *variable_ptr;
	zval *dim;
	zend_refcounted *garbage = NULL;

	SAVE_OPLINE();
	orig_object_ptr = object_ptr = EX_VAR(opline->op1.var);

	if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
try_assign_dim_array:
		SEPARATE_ARRAY(object_ptr);
		if (IS_CV == IS_UNUSED) {
			value = EX_VAR((opline+1)->op1.var);
			if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
				HashTable *ht = Z_ARRVAL_P(object_ptr);
				if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE)) {
					GC_ADDREF(ht);
				}
				value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
				if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE) && !GC_DELREF(ht)) {
					zend_array_destroy(ht);
					goto assign_dim_error;
				}
			}
			if (IS_CV == IS_CV || IS_CV == IS_VAR) {
				ZVAL_DEREF(value);
			}
			value = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), value);
			if (UNEXPECTED(value == NULL)) {
				zend_cannot_add_element();
				goto assign_dim_error;
			} else if (IS_CV == IS_CV) {
				if (Z_REFCOUNTED_P(value)) {
					Z_ADDREF_P(value);
				}
			} else if (IS_CV == IS_VAR) {
				zval *free_op_data = EX_VAR((opline+1)->op1.var);
				if (Z_ISREF_P(free_op_data)) {
					if (Z_REFCOUNTED_P(value)) {
						Z_ADDREF_P(value);
					}
					zval_ptr_dtor_nogc(free_op_data);
				}
			} else if (IS_CV == IS_CONST) {
				if (UNEXPECTED(Z_REFCOUNTED_P(value))) {
					Z_ADDREF_P(value);
				}
			}
		} else {
			dim = EX_VAR(opline->op2.var);
			if (IS_CV == IS_CONST) {
				variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
			} else {
				variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
			}
			if (UNEXPECTED(variable_ptr == NULL)) {
				goto assign_dim_error;
			}
			value = _get_zval_ptr_cv_BP_VAR_R((opline+1)->op1.var EXECUTE_DATA_CC);
			value = zend_assign_to_variable_ex(variable_ptr, value, IS_CV, EX_USES_STRICT_TYPES(), &garbage);
		}
		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
			ZVAL_COPY(EX_VAR(opline->result.var), value);
		}
		if (garbage) {
			GC_DTOR_NO_REF(garbage);
		}
	} else {
		if (EXPECTED(Z_ISREF_P(object_ptr))) {
			object_ptr = Z_REFVAL_P(object_ptr);
			if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
				goto try_assign_dim_array;
			}
		}
		if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) {
			zend_object *obj = Z_OBJ_P(object_ptr);

			GC_ADDREF(obj);
			dim = EX_VAR(opline->op2.var);
			if (IS_CV == IS_CV && UNEXPECTED(Z_ISUNDEF_P(dim))) {
				dim = ZVAL_UNDEFINED_OP2();
			} else if (IS_CV == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
				dim++;
			}

			value = EX_VAR((opline+1)->op1.var);
			if (IS_CV == IS_CV && UNEXPECTED(Z_ISUNDEF_P(value))) {
				value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
			} else if (IS_CV & (IS_CV|IS_VAR)) {
				ZVAL_DEREF(value);
			}

			zend_assign_to_object_dim(obj, dim, value OPLINE_CC EXECUTE_DATA_CC);


			if (UNEXPECTED(GC_DELREF(obj) == 0)) {
				zend_objects_store_del(obj);
			}
		} else if (EXPECTED(Z_TYPE_P(object_ptr) == IS_STRING)) {
			if (IS_CV == IS_UNUSED) {
				zend_use_new_element_for_string();


				UNDEF_RESULT();
			} else {
				dim = EX_VAR(opline->op2.var);
				value = EX_VAR((opline+1)->op1.var);
				zend_assign_to_string_offset(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC);


			}
		} else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
			if (Z_ISREF_P(orig_object_ptr)
			 && ZEND_REF_HAS_TYPE_SOURCES(Z_REF_P(orig_object_ptr))
			 && !zend_verify_ref_array_assignable(Z_REF_P(orig_object_ptr))) {
				dim = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);


				UNDEF_RESULT();
			} else {
				HashTable *ht = zend_new_array(8);
				uint8_t old_type = Z_TYPE_P(object_ptr);

				ZVAL_ARR(object_ptr, ht);
				if (UNEXPECTED(old_type == IS_FALSE)) {
					GC_ADDREF(ht);
					zend_false_to_array_deprecated();
					if (UNEXPECTED(GC_DELREF(ht) == 0)) {
						zend_array_destroy(ht);
						goto assign_dim_error;
					}
				}
				goto try_assign_dim_array;
			}
		} else {
			zend_use_scalar_as_array();
			dim = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
assign_dim_error:


			if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
				ZVAL_NULL(EX_VAR(opline->result.var));
			}
		}
	}
	if (IS_CV != IS_UNUSED) {


	}


	/* assign_dim has two opcodes! */
	ZEND_VM_NEXT_OPCODE_EX(1, 2);
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_ASSIGN_SPEC_CV_CV_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *value;
	zval *variable_ptr;

	SAVE_OPLINE();
	value = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
	variable_ptr = EX_VAR(opline->op1.var);

	if (0 || UNEXPECTED(0)) {
		zend_refcounted *garbage = NULL;

		value = zend_assign_to_variable_ex(variable_ptr, value, IS_CV, EX_USES_STRICT_TYPES(), &garbage);
		if (UNEXPECTED(0)) {
			ZVAL_COPY(EX_VAR(opline->result.var), value);
		}
		if (garbage) {
			GC_DTOR_NO_REF(garbage);
		}
	} else {
		value = zend_assign_to_variable(variable_ptr, value, IS_CV, EX_USES_STRICT_TYPES());
	}


	/* zend_assign_to_variable() always takes care of op2, never free it! */

	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_ASSIGN_SPEC_CV_CV_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *value;
	zval *variable_ptr;

	SAVE_OPLINE();
	value = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
	variable_ptr = EX_VAR(opline->op1.var);

	if (0 || UNEXPECTED(1)) {
		zend_refcounted *garbage = NULL;

		value = zend_assign_to_variable_ex(variable_ptr, value, IS_CV, EX_USES_STRICT_TYPES(), &garbage);
		if (UNEXPECTED(1)) {
			ZVAL_COPY(EX_VAR(opline->result.var), value);
		}
		if (garbage) {
			GC_DTOR_NO_REF(garbage);
		}
	} else {
		value = zend_assign_to_variable(variable_ptr, value, IS_CV, EX_USES_STRICT_TYPES());
	}


	/* zend_assign_to_variable() always takes care of op2, never free it! */

	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_ASSIGN_REF_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *variable_ptr;
	zval *value_ptr;
	zend_refcounted *garbage = NULL;

	SAVE_OPLINE();
	value_ptr = _get_zval_ptr_cv_BP_VAR_W(opline->op2.var EXECUTE_DATA_CC);
	variable_ptr = EX_VAR(opline->op1.var);

	if (IS_CV == IS_VAR &&
	           UNEXPECTED(Z_TYPE_P(EX_VAR(opline->op1.var)) != IS_INDIRECT)) {

		zend_throw_error(NULL, "Cannot assign by reference to an array dimension of an object");
		variable_ptr = &EG(uninitialized_zval);
	} else if (IS_CV == IS_VAR &&
	           opline->extended_value == ZEND_RETURNS_FUNCTION &&
			   UNEXPECTED(!Z_ISREF_P(value_ptr))) {

		variable_ptr = zend_wrong_assign_to_variable_reference(
			variable_ptr, value_ptr, &garbage OPLINE_CC EXECUTE_DATA_CC);
	} else {
		zend_assign_to_variable_reference(variable_ptr, value_ptr, &garbage);
	}

	if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
		ZVAL_COPY(EX_VAR(opline->result.var), variable_ptr);
	}

	if (garbage) {
		GC_DTOR(garbage);
	}




	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_ASSIGN_OBJ_REF_SPEC_CV_CV_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *property, *container, *value_ptr;

	SAVE_OPLINE();

	container = EX_VAR(opline->op1.var);
	property = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);

	value_ptr = _get_zval_ptr_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);

	if (1) {
		if (IS_CV == IS_UNUSED) {
			if (IS_CV == IS_CONST) {
				zend_assign_to_property_reference_this_const(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
			} else {
				zend_assign_to_property_reference_this_var(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
			}
		} else {
			if (IS_CV == IS_CONST) {
				zend_assign_to_property_reference_var_const(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
			} else {
				zend_assign_to_property_reference_var_var(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
			}
		}
	} else {
		zend_assign_to_property_reference(container, IS_CV, property, IS_CV, value_ptr OPLINE_CC EXECUTE_DATA_CC);
	}




	zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
	ZEND_VM_NEXT_OPCODE_EX(1, 2);
}

/* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CONST|VAR) */
static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_ASSIGN_OBJ_REF_SPEC_CV_CV_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *property, *container, *value_ptr;

	SAVE_OPLINE();

	container = EX_VAR(opline->op1.var);
	property = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);

	value_ptr = _get_zval_ptr_cv_BP_VAR_W((opline+1)->op1.var EXECUTE_DATA_CC);

	if (1) {
		if (IS_CV == IS_UNUSED) {
			if (IS_CV == IS_CONST) {
				zend_assign_to_property_reference_this_const(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
			} else {
				zend_assign_to_property_reference_this_var(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
			}
		} else {
			if (IS_CV == IS_CONST) {
				zend_assign_to_property_reference_var_const(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
			} else {
				zend_assign_to_property_reference_var_var(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
			}
		}
	} else {
		zend_assign_to_property_reference(container, IS_CV, property, IS_CV, value_ptr OPLINE_CC EXECUTE_DATA_CC);
	}






	ZEND_VM_NEXT_OPCODE_EX(1, 2);
}

/* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CONST|VAR) */
static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_FAST_CONCAT_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;
	zend_string *op1_str, *op2_str, *str;


	op1 = EX_VAR(opline->op1.var);
	op2 = EX_VAR(opline->op2.var);
	if ((IS_CV == IS_CONST || EXPECTED(Z_TYPE_P(op1) == IS_STRING)) &&
	    (IS_CV == IS_CONST || EXPECTED(Z_TYPE_P(op2) == IS_STRING))) {
		zend_string *op1_str = Z_STR_P(op1);
		zend_string *op2_str = Z_STR_P(op2);
		zend_string *str;
		uint32_t flags = ZSTR_GET_COPYABLE_CONCAT_PROPERTIES_BOTH(op1_str, op2_str);

		if (IS_CV != IS_CONST && UNEXPECTED(ZSTR_LEN(op1_str) == 0)) {
			if (IS_CV == IS_CONST || IS_CV == IS_CV) {
				ZVAL_STR_COPY(EX_VAR(opline->result.var), op2_str);
			} else {
				ZVAL_STR(EX_VAR(opline->result.var), op2_str);
			}
			if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
				zend_string_release_ex(op1_str, 0);
			}
		} else if (IS_CV != IS_CONST && UNEXPECTED(ZSTR_LEN(op2_str) == 0)) {
			if (IS_CV == IS_CONST || IS_CV == IS_CV) {
				ZVAL_STR_COPY(EX_VAR(opline->result.var), op1_str);
			} else {
				ZVAL_STR(EX_VAR(opline->result.var), op1_str);
			}
			if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
				zend_string_release_ex(op2_str, 0);
			}
		} else if (IS_CV != IS_CONST && IS_CV != IS_CV &&
		    !ZSTR_IS_INTERNED(op1_str) && GC_REFCOUNT(op1_str) == 1) {
			size_t len = ZSTR_LEN(op1_str);

			str = zend_string_extend(op1_str, len + ZSTR_LEN(op2_str), 0);
			memcpy(ZSTR_VAL(str) + len, ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
			GC_ADD_FLAGS(str, flags);
			ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
			if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
				zend_string_release_ex(op2_str, 0);
			}
		} else {
			str = zend_string_alloc(ZSTR_LEN(op1_str) + ZSTR_LEN(op2_str), 0);
			memcpy(ZSTR_VAL(str), ZSTR_VAL(op1_str), ZSTR_LEN(op1_str));
			memcpy(ZSTR_VAL(str) + ZSTR_LEN(op1_str), ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
			GC_ADD_FLAGS(str, flags);
			ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
			if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
				zend_string_release_ex(op1_str, 0);
			}
			if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
				zend_string_release_ex(op2_str, 0);
			}
		}
		ZEND_VM_NEXT_OPCODE();
	}

	SAVE_OPLINE();
	if (IS_CV == IS_CONST) {
		op1_str = Z_STR_P(op1);
	} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
		op1_str = zend_string_copy(Z_STR_P(op1));
	} else {
		if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
			ZVAL_UNDEFINED_OP1();
		}
		op1_str = zval_get_string_func(op1);
	}
	if (IS_CV == IS_CONST) {
		op2_str = Z_STR_P(op2);
	} else if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
		op2_str = zend_string_copy(Z_STR_P(op2));
	} else {
		if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(op2) == IS_UNDEF)) {
			ZVAL_UNDEFINED_OP2();
		}
		op2_str = zval_get_string_func(op2);
	}
	do {
		if (IS_CV != IS_CONST) {
			if (UNEXPECTED(ZSTR_LEN(op1_str) == 0)) {
				if (IS_CV == IS_CONST) {
					if (UNEXPECTED(Z_REFCOUNTED_P(op2))) {
						GC_ADDREF(op2_str);
					}
				}
				ZVAL_STR(EX_VAR(opline->result.var), op2_str);
				zend_string_release_ex(op1_str, 0);
				break;
			}
		}
		if (IS_CV != IS_CONST) {
			if (UNEXPECTED(ZSTR_LEN(op2_str) == 0)) {
				if (IS_CV == IS_CONST) {
					if (UNEXPECTED(Z_REFCOUNTED_P(op1))) {
						GC_ADDREF(op1_str);
					}
				}
				ZVAL_STR(EX_VAR(opline->result.var), op1_str);
				zend_string_release_ex(op2_str, 0);
				break;
			}
		}
		str = zend_string_alloc(ZSTR_LEN(op1_str) + ZSTR_LEN(op2_str), 0);
		memcpy(ZSTR_VAL(str), ZSTR_VAL(op1_str), ZSTR_LEN(op1_str));
		memcpy(ZSTR_VAL(str) + ZSTR_LEN(op1_str), ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);

		ZSTR_COPY_CONCAT_PROPERTIES_BOTH(str, op1_str, op2_str);
		ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
		if (IS_CV != IS_CONST) {
			zend_string_release_ex(op1_str, 0);
		}
		if (IS_CV != IS_CONST) {
			zend_string_release_ex(op2_str, 0);
		}
	} while (0);




	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_INIT_METHOD_CALL_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *function_name;
	zval *object;
	zend_function *fbc;
	zend_class_entry *called_scope;
	zend_object *obj;
	zend_execute_data *call;
	uint32_t call_info;

	SAVE_OPLINE();

	object = EX_VAR(opline->op1.var);

	if (IS_CV != IS_CONST) {
		function_name = EX_VAR(opline->op2.var);
	}

	if (IS_CV != IS_CONST &&
	    UNEXPECTED(Z_TYPE_P(function_name) != IS_STRING)) {
		do {
			if ((IS_CV & (IS_VAR|IS_CV)) && Z_ISREF_P(function_name)) {
				function_name = Z_REFVAL_P(function_name);
				if (EXPECTED(Z_TYPE_P(function_name) == IS_STRING)) {
					break;
				}
			} else if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) {
				ZVAL_UNDEFINED_OP2();
				if (UNEXPECTED(EG(exception) != NULL)) {


					HANDLE_EXCEPTION();
				}
			}
			zend_throw_error(NULL, "Method name must be a string");




			HANDLE_EXCEPTION();
		} while (0);
	}

	if (IS_CV == IS_UNUSED) {
		obj = Z_OBJ_P(object);
	} else {
		do {
			if (IS_CV != IS_CONST && EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
				obj = Z_OBJ_P(object);
			} else {
				if ((IS_CV & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(object))) {
					zend_reference *ref = Z_REF_P(object);

					object = &ref->val;
					if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
						obj = Z_OBJ_P(object);
						if (IS_CV & IS_VAR) {
							if (UNEXPECTED(GC_DELREF(ref) == 0)) {
								efree_size(ref, sizeof(zend_reference));
							} else {
								Z_ADDREF_P(object);
							}
						}
						break;
					}
				}
				if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
					object = ZVAL_UNDEFINED_OP1();
					if (UNEXPECTED(EG(exception) != NULL)) {
						if (IS_CV != IS_CONST) {


						}
						HANDLE_EXCEPTION();
					}
				}
				if (IS_CV == IS_CONST) {
					function_name = EX_VAR(opline->op2.var);
				}
				zend_invalid_method_call(object, function_name);




				HANDLE_EXCEPTION();
			}
		} while (0);
	}

	called_scope = obj->ce;

	if (IS_CV == IS_CONST &&
	    EXPECTED(CACHED_PTR(opline->result.num) == called_scope)) {
		fbc = CACHED_PTR(opline->result.num + sizeof(void*));
	} else {
		zend_object *orig_obj = obj;

		if (IS_CV == IS_CONST) {
			function_name = EX_VAR(opline->op2.var);
		}

		/* First, locate the function. */
		fbc = obj->handlers->get_method(&obj, Z_STR_P(function_name), ((IS_CV == IS_CONST) ? (RT_CONSTANT(opline, opline->op2) + 1) : NULL));
		if (UNEXPECTED(fbc == NULL)) {
			if (EXPECTED(!EG(exception))) {
				zend_undefined_method(orig_obj->ce, Z_STR_P(function_name));
			}


			if ((IS_CV & (IS_VAR|IS_TMP_VAR)) && GC_DELREF(orig_obj) == 0) {
				zend_objects_store_del(orig_obj);
			}
			HANDLE_EXCEPTION();
		}
		if (IS_CV == IS_CONST &&
		    EXPECTED(!(fbc->common.fn_flags & (ZEND_ACC_CALL_VIA_TRAMPOLINE|ZEND_ACC_NEVER_CACHE))) &&
		    EXPECTED(obj == orig_obj)) {
			CACHE_POLYMORPHIC_PTR(opline->result.num, called_scope, fbc);
		}
		if ((IS_CV & (IS_VAR|IS_TMP_VAR)) && UNEXPECTED(obj != orig_obj)) {
			GC_ADDREF(obj); /* For $this pointer */
			if (GC_DELREF(orig_obj) == 0) {
				zend_objects_store_del(orig_obj);
			}
		}
		if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!RUN_TIME_CACHE(&fbc->op_array))) {
			init_func_run_time_cache(&fbc->op_array);
		}
	}

	if (IS_CV != IS_CONST) {


	}

	call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_HAS_THIS;
	if (UNEXPECTED((fbc->common.fn_flags & ZEND_ACC_STATIC) != 0)) {
		if ((IS_CV & (IS_VAR|IS_TMP_VAR)) && GC_DELREF(obj) == 0) {
			zend_objects_store_del(obj);
			if (UNEXPECTED(EG(exception))) {
				HANDLE_EXCEPTION();
			}
		}
		/* call static method */
		obj = (zend_object*)called_scope;
		call_info = ZEND_CALL_NESTED_FUNCTION;
	} else if (IS_CV & (IS_VAR|IS_TMP_VAR|IS_CV)) {
		if (IS_CV == IS_CV) {
			GC_ADDREF(obj); /* For $this pointer */
		}
		/* CV may be changed indirectly (e.g. when it's a reference) */
		call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_HAS_THIS | ZEND_CALL_RELEASE_THIS;
	}

	call = zend_vm_stack_push_call_frame(call_info,
		fbc, opline->extended_value, obj);
	call->prev_execute_data = EX(call);
	EX(call) = call;

	ZEND_VM_NEXT_OPCODE();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *expr_ptr, new_expr;

	SAVE_OPLINE();
	if ((IS_CV == IS_VAR || IS_CV == IS_CV) &&
	    UNEXPECTED(opline->extended_value & ZEND_ARRAY_ELEMENT_REF)) {
		expr_ptr = _get_zval_ptr_cv_BP_VAR_W(opline->op1.var EXECUTE_DATA_CC);
		if (Z_ISREF_P(expr_ptr)) {
			Z_ADDREF_P(expr_ptr);
		} else {
			ZVAL_MAKE_REF_EX(expr_ptr, 2);
		}


	} else {
		expr_ptr = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
		if (IS_CV == IS_TMP_VAR) {
			/* pass */
		} else if (IS_CV == IS_CONST) {
			Z_TRY_ADDREF_P(expr_ptr);
		} else if (IS_CV == IS_CV) {
			ZVAL_DEREF(expr_ptr);
			Z_TRY_ADDREF_P(expr_ptr);
		} else /* if (IS_CV == IS_VAR) */ {
			if (UNEXPECTED(Z_ISREF_P(expr_ptr))) {
				zend_refcounted *ref = Z_COUNTED_P(expr_ptr);

				expr_ptr = Z_REFVAL_P(expr_ptr);
				if (UNEXPECTED(GC_DELREF(ref) == 0)) {
					ZVAL_COPY_VALUE(&new_expr, expr_ptr);
					expr_ptr = &new_expr;
					efree_size(ref, sizeof(zend_reference));
				} else if (Z_OPT_REFCOUNTED_P(expr_ptr)) {
					Z_ADDREF_P(expr_ptr);
				}
			}
		}
	}

	if (IS_CV != IS_UNUSED) {
		zval *offset = EX_VAR(opline->op2.var);
		zend_string *str;
		zend_ulong hval;

add_again:
		if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) {
			str = Z_STR_P(offset);
			if (IS_CV != IS_CONST) {
				if (ZEND_HANDLE_NUMERIC(str, hval)) {
					goto num_index;
				}
			}
str_index:
			zend_hash_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), str, expr_ptr);
		} else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
			hval = Z_LVAL_P(offset);
num_index:
			zend_hash_index_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), hval, expr_ptr);
		} else if ((IS_CV & (IS_VAR|IS_CV)) && EXPECTED(Z_TYPE_P(offset) == IS_REFERENCE)) {
			offset = Z_REFVAL_P(offset);
			goto add_again;
		} else if (UNEXPECTED(Z_TYPE_P(offset) == IS_NULL)) {
			zval tmp;
			if (IS_CV == IS_CV || IS_CV == IS_VAR) {
				ZVAL_COPY(&tmp, expr_ptr);
			}
			zend_error(E_DEPRECATED, "Using null as an array offset is deprecated, use an empty string instead");
			if (IS_CV == IS_CV || IS_CV == IS_VAR) {
				/* A userland error handler can do funky things to the expression, so reset it */
				zval_ptr_dtor(expr_ptr);
				ZVAL_COPY_VALUE(expr_ptr, &tmp);
			}
			if (UNEXPECTED(EG(exception))) {
				zval_ptr_dtor_nogc(expr_ptr);
				HANDLE_EXCEPTION();
			}
			str = ZSTR_EMPTY_ALLOC();
			goto str_index;
		} else if (Z_TYPE_P(offset) == IS_DOUBLE) {
			hval = zend_dval_to_lval_safe(Z_DVAL_P(offset));
			goto num_index;
		} else if (Z_TYPE_P(offset) == IS_FALSE) {
			hval = 0;
			goto num_index;
		} else if (Z_TYPE_P(offset) == IS_TRUE) {
			hval = 1;
			goto num_index;
		} else if (Z_TYPE_P(offset) == IS_RESOURCE) {
			zend_use_resource_as_offset(offset);
			hval = Z_RES_HANDLE_P(offset);
			goto num_index;
		} else if (IS_CV == IS_CV && Z_TYPE_P(offset) == IS_UNDEF) {
			ZVAL_UNDEFINED_OP2();
			str = ZSTR_EMPTY_ALLOC();
			goto str_index;
		} else {
			zend_illegal_array_offset_access(offset);
			zval_ptr_dtor_nogc(expr_ptr);
		}


	} else {
		if (!zend_hash_next_index_insert(Z_ARRVAL_P(EX_VAR(opline->result.var)), expr_ptr)) {
			zend_cannot_add_element();
			zval_ptr_dtor_nogc(expr_ptr);
		}
	}
	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_INIT_ARRAY_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	zval *array;
	uint32_t size;
	USE_OPLINE

	SAVE_OPLINE();
	array = EX_VAR(opline->result.var);
	if (IS_CV != IS_UNUSED) {
		size = opline->extended_value >> ZEND_ARRAY_SIZE_SHIFT;
		ZVAL_ARR(array, zend_new_array(size));
		/* Explicitly initialize array as not-packed if flag is set */
		if (opline->extended_value & ZEND_ARRAY_NOT_PACKED) {
			zend_hash_real_init_mixed(Z_ARRVAL_P(array));
		}
		ZEND_VM_TAIL_CALL(ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
	} else {
		ZVAL_ARR(array, zend_new_array(0));
		ZEND_VM_NEXT_OPCODE();
	}
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_UNSET_DIM_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *container;
	zval *offset;
	zend_ulong hval;
	zend_string *key;

	SAVE_OPLINE();
	container = EX_VAR(opline->op1.var);
	offset = EX_VAR(opline->op2.var);

	do {
		if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
			HashTable *ht;

unset_dim_array:
			SEPARATE_ARRAY(container);
			ht = Z_ARRVAL_P(container);
offset_again:
			if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) {
				key = Z_STR_P(offset);
				if (IS_CV != IS_CONST) {
					if (ZEND_HANDLE_NUMERIC(key, hval)) {
						goto num_index_dim;
					}
				}
str_index_dim:
				ZEND_ASSERT(ht != &EG(symbol_table));
				zend_hash_del(ht, key);
			} else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
				hval = Z_LVAL_P(offset);
num_index_dim:
				zend_hash_index_del(ht, hval);
			} else if ((IS_CV & (IS_VAR|IS_CV)) && EXPECTED(Z_TYPE_P(offset) == IS_REFERENCE)) {
				offset = Z_REFVAL_P(offset);
				goto offset_again;
			} else if (Z_TYPE_P(offset) == IS_DOUBLE) {
				/* The array may be destroyed while throwing a warning in case the float is not representable as an int.
				 * Temporarily increase the refcount to detect this situation. */
				GC_TRY_ADDREF(ht);
				hval = zend_dval_to_lval_safe(Z_DVAL_P(offset));
				if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE) && !GC_DELREF(ht)) {
					zend_array_destroy(ht);
					break;
				}
				if (EG(exception)) {
					break;
				}
				goto num_index_dim;
			} else if (Z_TYPE_P(offset) == IS_NULL) {
				key = ZSTR_EMPTY_ALLOC();
				goto str_index_dim;
			} else if (Z_TYPE_P(offset) == IS_FALSE) {
				hval = 0;
				goto num_index_dim;
			} else if (Z_TYPE_P(offset) == IS_TRUE) {
				hval = 1;
				goto num_index_dim;
			} else if (Z_TYPE_P(offset) == IS_RESOURCE) {
				zend_use_resource_as_offset(offset);
				hval = Z_RES_HANDLE_P(offset);
				goto num_index_dim;
			} else if (IS_CV == IS_CV && Z_TYPE_P(offset) == IS_UNDEF) {
				ZVAL_UNDEFINED_OP2();
				key = ZSTR_EMPTY_ALLOC();
				goto str_index_dim;
			} else {
				zend_illegal_array_offset_unset(offset);
			}
			break;
		} else if (Z_ISREF_P(container)) {
			container = Z_REFVAL_P(container);
			if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
				goto unset_dim_array;
			}
		}
		if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
			container = ZVAL_UNDEFINED_OP1();
		}
		if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(offset) == IS_UNDEF)) {
			offset = ZVAL_UNDEFINED_OP2();
		}
		if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
			if (IS_CV == IS_CONST && Z_EXTRA_P(offset) == ZEND_EXTRA_VALUE) {
				offset++;
			}
			Z_OBJ_HT_P(container)->unset_dimension(Z_OBJ_P(container), offset);
		} else if (UNEXPECTED(Z_TYPE_P(container) == IS_STRING)) {
			zend_throw_error(NULL, "Cannot unset string offsets");
		} else if (UNEXPECTED(Z_TYPE_P(container) > IS_FALSE)) {
			zend_throw_error(NULL, "Cannot unset offset in a non-array variable");
		} else if (UNEXPECTED(Z_TYPE_P(container) == IS_FALSE)) {
			zend_false_to_array_deprecated();
		}
	} while (0);




	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_UNSET_OBJ_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *container;
	zval *offset;
	zend_string *name, *tmp_name;

	SAVE_OPLINE();
	container = EX_VAR(opline->op1.var);
	offset = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);

	do {
		if (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT)) {
			if (Z_ISREF_P(container)) {
				container = Z_REFVAL_P(container);
				if (Z_TYPE_P(container) != IS_OBJECT) {
					if (IS_CV == IS_CV
					 && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
						ZVAL_UNDEFINED_OP1();
					}
					break;
				}
			} else {
				break;
			}
		}
		if (IS_CV == IS_CONST) {
			name = Z_STR_P(offset);
		} else {
			name = zval_try_get_tmp_string(offset, &tmp_name);
			if (UNEXPECTED(!name)) {
				break;
			}
		}
		Z_OBJ_HT_P(container)->unset_property(Z_OBJ_P(container), name, ((IS_CV == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL));
		if (IS_CV != IS_CONST) {
			zend_tmp_string_release(tmp_name);
		}
	} while (0);




	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *container;
	bool result;
	zend_ulong hval;
	zval *offset;

	SAVE_OPLINE();
	container = EX_VAR(opline->op1.var);
	offset = EX_VAR(opline->op2.var);

	if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
		HashTable *ht;
		zval *value;
		zend_string *str;

isset_dim_obj_array:
		ht = Z_ARRVAL_P(container);
isset_again:
		if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) {
			str = Z_STR_P(offset);
			if (IS_CV != IS_CONST) {
				if (ZEND_HANDLE_NUMERIC(str, hval)) {
					goto num_index_prop;
				}
			}
			value = zend_hash_find_ex(ht, str, IS_CV == IS_CONST);
		} else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
			hval = Z_LVAL_P(offset);
num_index_prop:
			value = zend_hash_index_find(ht, hval);
		} else if ((IS_CV & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(offset))) {
			offset = Z_REFVAL_P(offset);
			goto isset_again;
		} else {
			value = zend_find_array_dim_slow(ht, offset EXECUTE_DATA_CC);
			if (UNEXPECTED(EG(exception))) {
				result = 0;
				goto isset_dim_obj_exit;
			}
		}

		if (!(opline->extended_value & ZEND_ISEMPTY)) {
			/* > IS_NULL means not IS_UNDEF and not IS_NULL */
			result = value != NULL && Z_TYPE_P(value) > IS_NULL &&
			    (!Z_ISREF_P(value) || Z_TYPE_P(Z_REFVAL_P(value)) != IS_NULL);

			if (IS_CV & (IS_CONST|IS_CV)) {
				/* avoid exception check */


				ZEND_VM_SMART_BRANCH(result, 0);
			}
		} else {
			result = (value == NULL || !i_zend_is_true(value));
		}
		goto isset_dim_obj_exit;
	} else if ((IS_CV & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(container))) {
		container = Z_REFVAL_P(container);
		if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
			goto isset_dim_obj_array;
		}
	}

	if (IS_CV == IS_CONST && Z_EXTRA_P(offset) == ZEND_EXTRA_VALUE) {
		offset++;
	}
	if (!(opline->extended_value & ZEND_ISEMPTY)) {
		result = zend_isset_dim_slow(container, offset EXECUTE_DATA_CC);
	} else {
		result = zend_isempty_dim_slow(container, offset EXECUTE_DATA_CC);
	}

isset_dim_obj_exit:




	ZEND_VM_SMART_BRANCH(result, 1);
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *container;
	int result;
	zval *offset;
	zend_string *name, *tmp_name;

	SAVE_OPLINE();
	container = _get_zval_ptr_cv_BP_VAR_IS(opline->op1.var EXECUTE_DATA_CC);
	offset = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);

	if (IS_CV == IS_CONST ||
	    (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
		if ((IS_CV & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
			container = Z_REFVAL_P(container);
			if (UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT)) {
				result = (opline->extended_value & ZEND_ISEMPTY);
				goto isset_object_finish;
			}
		} else {
			result = (opline->extended_value & ZEND_ISEMPTY);
			goto isset_object_finish;
		}
	}

	if (IS_CV == IS_CONST) {
		name = Z_STR_P(offset);
	} else {
		name = zval_try_get_tmp_string(offset, &tmp_name);
		if (UNEXPECTED(!name)) {
			result = 0;
			goto isset_object_finish;
		}
	}

	result =
		(opline->extended_value & ZEND_ISEMPTY) ^
		Z_OBJ_HT_P(container)->has_property(Z_OBJ_P(container), name, (opline->extended_value & ZEND_ISEMPTY), ((IS_CV == IS_CONST) ? CACHE_ADDR(opline->extended_value & ~ZEND_ISEMPTY) : NULL));

	if (IS_CV != IS_CONST) {
		zend_tmp_string_release(tmp_name);
	}

isset_object_finish:




	ZEND_VM_SMART_BRANCH(result, 1);
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_ARRAY_KEY_EXISTS_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE

	zval *key, *subject;
	HashTable *ht;
	bool result;

	SAVE_OPLINE();

	key = EX_VAR(opline->op1.var);
	subject = EX_VAR(opline->op2.var);

	if (EXPECTED(Z_TYPE_P(subject) == IS_ARRAY)) {
array_key_exists_array:
		ht = Z_ARRVAL_P(subject);
		result = zend_array_key_exists_fast(ht, key OPLINE_CC EXECUTE_DATA_CC);
	} else {
		if ((IS_CV & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(subject))) {
			subject = Z_REFVAL_P(subject);
			if (EXPECTED(Z_TYPE_P(subject) == IS_ARRAY)) {
				goto array_key_exists_array;
			}
		}
		zend_array_key_exists_error(subject, key OPLINE_CC EXECUTE_DATA_CC);
		result = 0;
	}




	ZEND_VM_SMART_BRANCH(result, 1);
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_YIELD_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE

	zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C);

	SAVE_OPLINE();
	if (UNEXPECTED(generator->flags & ZEND_GENERATOR_FORCED_CLOSE)) {
		ZEND_VM_TAIL_CALL(zend_yield_in_closed_generator_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
	}

	/* Destroy the previously yielded value */
	zval_ptr_dtor(&generator->value);

	/* Destroy the previously yielded key */
	zval_ptr_dtor(&generator->key);

	/* Set the new yielded value */
	if (IS_CV != IS_UNUSED) {
		if (UNEXPECTED(EX(func)->op_array.fn_flags & ZEND_ACC_RETURN_REFERENCE)) {
			/* Constants and temporary variables aren't yieldable by reference,
			 * but we still allow them with a notice. */
			if (IS_CV & (IS_CONST|IS_TMP_VAR)) {
				zval *value;

				zend_error(E_NOTICE, "Only variable references should be yielded by reference");

				value = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
				ZVAL_COPY_VALUE(&generator->value, value);
				if (IS_CV == IS_CONST) {
					if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
						Z_ADDREF(generator->value);
					}
				}
			} else {
				zval *value_ptr = _get_zval_ptr_cv_BP_VAR_W(opline->op1.var EXECUTE_DATA_CC);

				/* If a function call result is yielded and the function did
				 * not return by reference we throw a notice. */
				do {
					if (IS_CV == IS_VAR) {
						ZEND_ASSERT(value_ptr != &EG(uninitialized_zval));
						if (opline->extended_value == ZEND_RETURNS_FUNCTION
						 && !Z_ISREF_P(value_ptr)) {
							zend_error(E_NOTICE, "Only variable references should be yielded by reference");
							ZVAL_COPY(&generator->value, value_ptr);
							break;
						}
					}
					if (Z_ISREF_P(value_ptr)) {
						Z_ADDREF_P(value_ptr);
					} else {
						ZVAL_MAKE_REF_EX(value_ptr, 2);
					}
					ZVAL_REF(&generator->value, Z_REF_P(value_ptr));
				} while (0);


			}
		} else {
			zval *value = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);

			/* Consts, temporary variables and references need copying */
			if (IS_CV == IS_CONST) {
				ZVAL_COPY_VALUE(&generator->value, value);
				if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
					Z_ADDREF(generator->value);
				}
			} else if (IS_CV == IS_TMP_VAR) {
				ZVAL_COPY_VALUE(&generator->value, value);
			} else if ((IS_CV & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) {
				ZVAL_COPY(&generator->value, Z_REFVAL_P(value));


			} else {
				ZVAL_COPY_VALUE(&generator->value, value);
				if (IS_CV == IS_CV) {
					if (Z_OPT_REFCOUNTED_P(value)) Z_ADDREF_P(value);
				}
			}
		}
	} else {
		/* If no value was specified yield null */
		ZVAL_NULL(&generator->value);
	}

	/* Set the new yielded key */
	if (IS_CV != IS_UNUSED) {
		zval *key = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
		if ((IS_CV & (IS_CV|IS_VAR)) && UNEXPECTED(Z_TYPE_P(key) == IS_REFERENCE)) {
			key = Z_REFVAL_P(key);
		}
		ZVAL_COPY(&generator->key, key);


		if (Z_TYPE(generator->key) == IS_LONG
		    && Z_LVAL(generator->key) > generator->largest_used_integer_key
		) {
			generator->largest_used_integer_key = Z_LVAL(generator->key);
		}
	} else {
		/* If no key was specified we use auto-increment keys */
		generator->largest_used_integer_key++;
		ZVAL_LONG(&generator->key, generator->largest_used_integer_key);
	}

	if (RETURN_VALUE_USED(opline)) {
		/* If the return value of yield is used set the send
		 * target and initialize it to NULL */
		generator->send_target = EX_VAR(opline->result.var);
		ZVAL_NULL(generator->send_target);
	} else {
		generator->send_target = NULL;
	}

	/* The GOTO VM uses a local opline variable. We need to set the opline
	 * variable in execute_data so we don't resume at an old position. */
	SAVE_OPLINE();

	ZEND_VM_RETURN();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_IS_IDENTICAL_NOTHROW_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	/* This is declared below the specializations for MAY_BE_LONG/MAY_BE_DOUBLE so those will be used instead if possible. */
	/* This optimizes $x === SOME_CONST_EXPR and $x === $y for non-refs and non-undef, which can't throw. */
	/* (Infinite recursion when comparing arrays is an uncatchable fatal error) */
	USE_OPLINE
	zval *op1, *op2;
	bool result;

	op1 = EX_VAR(opline->op1.var);
	op2 = EX_VAR(opline->op2.var);
	result = fast_is_identical_function(op1, op2);
	/* Free is a no-op for const/cv */
	ZEND_VM_SMART_BRANCH(result, 0);
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_IS_NOT_IDENTICAL_NOTHROW_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;
	bool result;

	op1 = EX_VAR(opline->op1.var);
	op2 = EX_VAR(opline->op2.var);
	result = fast_is_identical_function(op1, op2);
	/* Free is a no-op for const/cv */
	ZEND_VM_SMART_BRANCH(!result, 0);
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_NULL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE

	SAVE_OPLINE();
	zend_error_noreturn(E_ERROR, "Invalid opcode %d/%d/%d.", OPLINE->opcode, OPLINE->op1_type, OPLINE->op2_type);
	ZEND_VM_NEXT_OPCODE(); /* Never reached */
}


#if (ZEND_VM_KIND == ZEND_VM_KIND_HYBRID)
# undef ZEND_VM_TAIL_CALL
# undef ZEND_VM_CONTINUE
# undef ZEND_VM_RETURN

# define ZEND_VM_TAIL_CALL(call) call; ZEND_VM_CONTINUE()
# define ZEND_VM_CONTINUE()      HYBRID_NEXT()
# define ZEND_VM_RETURN()        goto HYBRID_HALT_LABEL
#endif

#if ZEND_VM_KIND == ZEND_VM_KIND_TAILCALL

# undef ZEND_VM_TAIL_CALL
# undef ZEND_VM_CONTINUE
# undef ZEND_VM_RETURN
# undef ZEND_VM_DISPATCH_TO_HELPER
# undef ZEND_VM_INTERRUPT

# define ZEND_VM_TAIL_CALL(call)               ZEND_MUSTTAIL return call
# define ZEND_VM_CONTINUE()                    ZEND_VM_TAIL_CALL(opline->handler(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU))
# define ZEND_VM_RETURN()                      opline = &call_halt_op; ZEND_VM_CONTINUE()
# define ZEND_VM_DISPATCH_TO_HELPER(call) \
    do { \
        opline = call; \
        ZEND_VM_TAIL_CALL(opline->handler(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)); \
    } while (0)
# define ZEND_VM_DISPATCH_TO_LEAVE_HELPER(helper) opline = &call_leave_op; SAVE_OPLINE(); ZEND_VM_CONTINUE()
# define ZEND_VM_INTERRUPT()        ZEND_VM_TAIL_CALL(zend_interrupt_helper_SPEC_TAILCALL(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU))

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV zend_interrupt_helper_SPEC_TAILCALL(ZEND_OPCODE_HANDLER_ARGS);
static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_NULL_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS);
static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_HALT_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS);
static zend_never_inline const zend_op *ZEND_OPCODE_HANDLER_CCONV zend_leave_helper_SPEC_TAILCALL(zend_execute_data *ex, const zend_op *opline);

static const zend_op call_halt_op = {
    .handler = ZEND_HALT_TAILCALL_HANDLER,
};
static const zend_op call_leave_op = {
    .handler = zend_leave_helper_SPEC_TAILCALL,
};

static zend_never_inline ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV_EX  zend_add_helper_SPEC_TAILCALL(ZEND_OPCODE_HANDLER_ARGS_EX zval *op_1, zval *op_2);
static zend_never_inline ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV_EX  zend_sub_helper_SPEC_TAILCALL(ZEND_OPCODE_HANDLER_ARGS_EX zval *op_1, zval *op_2);
static zend_never_inline ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV_EX  zend_mul_helper_SPEC_TAILCALL(ZEND_OPCODE_HANDLER_ARGS_EX zval *op_1, zval *op_2);
static zend_never_inline ZEND_COLD ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV  zend_mod_by_zero_helper_SPEC_TAILCALL(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE

	SAVE_OPLINE();
	zend_throw_exception_ex(zend_ce_division_by_zero_error, 0, "Modulo by zero");
	ZVAL_UNDEF(EX_VAR(opline->result.var));
	HANDLE_EXCEPTION();
}

static zend_never_inline ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV_EX  zend_mod_helper_SPEC_TAILCALL(ZEND_OPCODE_HANDLER_ARGS_EX zval *op_1, zval *op_2);
static zend_never_inline ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV_EX  zend_shift_left_helper_SPEC_TAILCALL(ZEND_OPCODE_HANDLER_ARGS_EX zval *op_1, zval *op_2);
static zend_never_inline ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV_EX  zend_shift_right_helper_SPEC_TAILCALL(ZEND_OPCODE_HANDLER_ARGS_EX zval *op_1, zval *op_2);
static zend_never_inline ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV_EX  zend_is_equal_helper_SPEC_TAILCALL(ZEND_OPCODE_HANDLER_ARGS_EX zval *op_1, zval *op_2);
static zend_never_inline ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV_EX  zend_is_not_equal_helper_SPEC_TAILCALL(ZEND_OPCODE_HANDLER_ARGS_EX zval *op_1, zval *op_2);
static zend_never_inline ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV_EX  zend_is_smaller_helper_SPEC_TAILCALL(ZEND_OPCODE_HANDLER_ARGS_EX zval *op_1, zval *op_2);
static zend_never_inline ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV_EX  zend_is_smaller_or_equal_helper_SPEC_TAILCALL(ZEND_OPCODE_HANDLER_ARGS_EX zval *op_1, zval *op_2);
static zend_never_inline ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV_EX  zend_bw_or_helper_SPEC_TAILCALL(ZEND_OPCODE_HANDLER_ARGS_EX zval *op_1, zval *op_2);
static zend_never_inline ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV_EX  zend_bw_and_helper_SPEC_TAILCALL(ZEND_OPCODE_HANDLER_ARGS_EX zval *op_1, zval *op_2);
static zend_never_inline ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV_EX  zend_bw_xor_helper_SPEC_TAILCALL(ZEND_OPCODE_HANDLER_ARGS_EX zval *op_1, zval *op_2);
static zend_never_inline ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV_EX  zend_bw_not_helper_SPEC_TAILCALL(ZEND_OPCODE_HANDLER_ARGS_EX zval *op_1);
static zend_never_inline ZEND_COLD ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV  zend_this_not_in_object_context_helper_SPEC_TAILCALL(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE

	SAVE_OPLINE();
	zend_throw_error(NULL, "Using $this when not in object context");
	UNDEF_RESULT();
	HANDLE_EXCEPTION();
}

static zend_never_inline ZEND_COLD ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV  zend_undefined_function_helper_SPEC_TAILCALL(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *function_name;

	SAVE_OPLINE();
	function_name = RT_CONSTANT(opline, opline->op2);
	zend_throw_error(NULL, "Call to undefined function %s()", Z_STRVAL_P(function_name));
	HANDLE_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_ASSIGN_STATIC_PROP_OP_SPEC_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	/* This helper actually never will receive IS_VAR as second op, and has the same handling for VAR and TMP in the first op, but for interoperability with the other binary_assign_op helpers, it is necessary to "include" it */

	USE_OPLINE
	zval *prop, *value;
	zend_property_info *prop_info;
	zend_reference *ref;

	SAVE_OPLINE();

	prop = zend_fetch_static_property_address(&prop_info, (opline+1)->extended_value, BP_VAR_RW, 0 OPLINE_CC EXECUTE_DATA_CC);
	if (UNEXPECTED(!prop)) {
		UNDEF_RESULT();
		FREE_OP((opline+1)->op1_type, (opline+1)->op1.var);
		HANDLE_EXCEPTION();
	}

	if (UNEXPECTED(prop_info->flags & ZEND_ACC_PPP_SET_MASK)
	 && UNEXPECTED(!zend_asymmetric_property_has_set_access(prop_info))) {
		zend_asymmetric_visibility_property_modification_error(prop_info, "indirectly modify");
		UNDEF_RESULT();
		FREE_OP((opline+1)->op1_type, (opline+1)->op1.var);
		HANDLE_EXCEPTION();
	}

	value = get_op_data_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1);

	do {
		if (UNEXPECTED(Z_ISREF_P(prop))) {
			ref = Z_REF_P(prop);
			prop = Z_REFVAL_P(prop);
			if (UNEXPECTED(ZEND_REF_HAS_TYPE_SOURCES(ref))) {
				zend_binary_assign_op_typed_ref(ref, value OPLINE_CC EXECUTE_DATA_CC);
				break;
			}
		}

		if (ZEND_TYPE_IS_SET(prop_info->type)) {
			/* special case for typed properties */
			zend_binary_assign_op_typed_prop(prop_info, prop, value OPLINE_CC EXECUTE_DATA_CC);
		} else {
			zend_binary_op(prop, prop, value OPLINE_CC);
		}
	} while (0);

	if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
		ZVAL_COPY(EX_VAR(opline->result.var), prop);
	}

	FREE_OP((opline+1)->op1_type, (opline+1)->op1.var);
	/* assign_static_prop has two opcodes! */
	ZEND_VM_NEXT_OPCODE_EX(1, 2);
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_PRE_INC_STATIC_PROP_SPEC_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *prop;
	zend_property_info *prop_info;

	SAVE_OPLINE();

	prop = zend_fetch_static_property_address(&prop_info, opline->extended_value, BP_VAR_RW, 0 OPLINE_CC EXECUTE_DATA_CC);
	if (UNEXPECTED(!prop)) {
		UNDEF_RESULT();
		HANDLE_EXCEPTION();
	}

	if (UNEXPECTED(prop_info->flags & ZEND_ACC_PPP_SET_MASK)
	 && UNEXPECTED(!zend_asymmetric_property_has_set_access(prop_info))) {
		zend_asymmetric_visibility_property_modification_error(prop_info, "indirectly modify");
		UNDEF_RESULT();
		HANDLE_EXCEPTION();
	}

	zend_pre_incdec_property_zval(prop,
		ZEND_TYPE_IS_SET(prop_info->type) ? prop_info : NULL OPLINE_CC EXECUTE_DATA_CC);

	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

/* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CONST|VAR) */
static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_POST_INC_STATIC_PROP_SPEC_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *prop;
	zend_property_info *prop_info;

	SAVE_OPLINE();

	prop = zend_fetch_static_property_address(&prop_info, opline->extended_value, BP_VAR_RW, 0 OPLINE_CC EXECUTE_DATA_CC);
	if (UNEXPECTED(!prop)) {
		UNDEF_RESULT();
		HANDLE_EXCEPTION();
	}

	if (UNEXPECTED(prop_info->flags & ZEND_ACC_PPP_SET_MASK)
	 && UNEXPECTED(!zend_asymmetric_property_has_set_access(prop_info))) {
		zend_asymmetric_visibility_property_modification_error(prop_info, "indirectly modify");
		UNDEF_RESULT();
		HANDLE_EXCEPTION();
	}

	zend_post_incdec_property_zval(prop,
		ZEND_TYPE_IS_SET(prop_info->type) ? prop_info : NULL OPLINE_CC EXECUTE_DATA_CC);

	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

/* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CONST|VAR) */
static zend_always_inline ZEND_OPCODE_HANDLER_RET zend_fetch_static_prop_helper_SPEC_TAILCALL(ZEND_OPCODE_HANDLER_ARGS_EX int type);
static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_FETCH_STATIC_PROP_R_SPEC_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	ZEND_VM_DISPATCH_TO_HELPER(zend_fetch_static_prop_helper_SPEC_TAILCALL(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_EX BP_VAR_R));
}

/* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CLASS_FETCH|CONST|VAR) */
static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_FETCH_STATIC_PROP_W_SPEC_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	ZEND_VM_DISPATCH_TO_HELPER(zend_fetch_static_prop_helper_SPEC_TAILCALL(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_EX BP_VAR_W));
}

/* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CLASS_FETCH|CONST|VAR) */
static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_FETCH_STATIC_PROP_RW_SPEC_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	ZEND_VM_DISPATCH_TO_HELPER(zend_fetch_static_prop_helper_SPEC_TAILCALL(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_EX BP_VAR_RW));
}

/* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CLASS_FETCH|CONST|VAR) */
static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_FETCH_STATIC_PROP_FUNC_ARG_SPEC_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	if (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) {
		ZEND_VM_TAIL_CALL(ZEND_FETCH_STATIC_PROP_W_SPEC_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
	} else {
		ZEND_VM_TAIL_CALL(ZEND_FETCH_STATIC_PROP_R_SPEC_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
	}
}

/* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CLASS_FETCH|CONST|VAR) */
static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_FETCH_STATIC_PROP_UNSET_SPEC_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	ZEND_VM_DISPATCH_TO_HELPER(zend_fetch_static_prop_helper_SPEC_TAILCALL(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_EX BP_VAR_UNSET));
}

/* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CLASS_FETCH|CONST|VAR) */
static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_FETCH_STATIC_PROP_IS_SPEC_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	ZEND_VM_DISPATCH_TO_HELPER(zend_fetch_static_prop_helper_SPEC_TAILCALL(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_EX BP_VAR_IS));
}

static zend_never_inline ZEND_COLD ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV  zend_use_tmp_in_write_context_helper_SPEC_TAILCALL(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE

	SAVE_OPLINE();
	zend_throw_error(NULL, "Cannot use temporary expression in write context");
	FREE_OP(opline->op2_type, opline->op2.var);
	FREE_OP(opline->op1_type, opline->op1.var);
	ZVAL_UNDEF(EX_VAR(opline->result.var));
	HANDLE_EXCEPTION();
}

static zend_never_inline ZEND_COLD ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV  zend_use_undef_in_read_context_helper_SPEC_TAILCALL(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE

	SAVE_OPLINE();
	zend_throw_error(NULL, "Cannot use [] for reading");
	FREE_OP(opline->op2_type, opline->op2.var);
	FREE_OP(opline->op1_type, opline->op1.var);
	ZVAL_UNDEF(EX_VAR(opline->result.var));
	HANDLE_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_ASSIGN_STATIC_PROP_SPEC_OP_DATA_CONST_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *prop, *value;
	zend_property_info *prop_info;
	zend_refcounted *garbage = NULL;

	SAVE_OPLINE();

	prop = zend_fetch_static_property_address(&prop_info, opline->extended_value, BP_VAR_W, 0 OPLINE_CC EXECUTE_DATA_CC);
	if (UNEXPECTED(!prop)) {


		UNDEF_RESULT();
		HANDLE_EXCEPTION();
	}

	value = RT_CONSTANT((opline+1), (opline+1)->op1);

	if (ZEND_TYPE_IS_SET(prop_info->type)) {
		value = zend_assign_to_typed_prop(prop_info, prop, value, &garbage EXECUTE_DATA_CC);


	} else {
		value = zend_assign_to_variable_ex(prop, value, IS_CONST, EX_USES_STRICT_TYPES(), &garbage);
	}

	if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
		ZVAL_COPY(EX_VAR(opline->result.var), value);
	}

	if (garbage) {
		GC_DTOR_NO_REF(garbage);
	}

	/* assign_static_prop has two opcodes! */
	ZEND_VM_NEXT_OPCODE_EX(1, 2);
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_ASSIGN_STATIC_PROP_SPEC_OP_DATA_TMP_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *prop, *value;
	zend_property_info *prop_info;
	zend_refcounted *garbage = NULL;

	SAVE_OPLINE();

	prop = zend_fetch_static_property_address(&prop_info, opline->extended_value, BP_VAR_W, 0 OPLINE_CC EXECUTE_DATA_CC);
	if (UNEXPECTED(!prop)) {
		zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
		UNDEF_RESULT();
		HANDLE_EXCEPTION();
	}

	value = _get_zval_ptr_tmp((opline+1)->op1.var EXECUTE_DATA_CC);

	if (ZEND_TYPE_IS_SET(prop_info->type)) {
		value = zend_assign_to_typed_prop(prop_info, prop, value, &garbage EXECUTE_DATA_CC);
		zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
	} else {
		value = zend_assign_to_variable_ex(prop, value, IS_TMP_VAR, EX_USES_STRICT_TYPES(), &garbage);
	}

	if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
		ZVAL_COPY(EX_VAR(opline->result.var), value);
	}

	if (garbage) {
		GC_DTOR_NO_REF(garbage);
	}

	/* assign_static_prop has two opcodes! */
	ZEND_VM_NEXT_OPCODE_EX(1, 2);
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_ASSIGN_STATIC_PROP_SPEC_OP_DATA_VAR_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *prop, *value;
	zend_property_info *prop_info;
	zend_refcounted *garbage = NULL;

	SAVE_OPLINE();

	prop = zend_fetch_static_property_address(&prop_info, opline->extended_value, BP_VAR_W, 0 OPLINE_CC EXECUTE_DATA_CC);
	if (UNEXPECTED(!prop)) {
		zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
		UNDEF_RESULT();
		HANDLE_EXCEPTION();
	}

	value = _get_zval_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);

	if (ZEND_TYPE_IS_SET(prop_info->type)) {
		value = zend_assign_to_typed_prop(prop_info, prop, value, &garbage EXECUTE_DATA_CC);
		zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
	} else {
		value = zend_assign_to_variable_ex(prop, value, IS_VAR, EX_USES_STRICT_TYPES(), &garbage);
	}

	if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
		ZVAL_COPY(EX_VAR(opline->result.var), value);
	}

	if (garbage) {
		GC_DTOR_NO_REF(garbage);
	}

	/* assign_static_prop has two opcodes! */
	ZEND_VM_NEXT_OPCODE_EX(1, 2);
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_ASSIGN_STATIC_PROP_SPEC_OP_DATA_CV_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *prop, *value;
	zend_property_info *prop_info;
	zend_refcounted *garbage = NULL;

	SAVE_OPLINE();

	prop = zend_fetch_static_property_address(&prop_info, opline->extended_value, BP_VAR_W, 0 OPLINE_CC EXECUTE_DATA_CC);
	if (UNEXPECTED(!prop)) {


		UNDEF_RESULT();
		HANDLE_EXCEPTION();
	}

	value = _get_zval_ptr_cv_BP_VAR_R((opline+1)->op1.var EXECUTE_DATA_CC);

	if (ZEND_TYPE_IS_SET(prop_info->type)) {
		value = zend_assign_to_typed_prop(prop_info, prop, value, &garbage EXECUTE_DATA_CC);


	} else {
		value = zend_assign_to_variable_ex(prop, value, IS_CV, EX_USES_STRICT_TYPES(), &garbage);
	}

	if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
		ZVAL_COPY(EX_VAR(opline->result.var), value);
	}

	if (garbage) {
		GC_DTOR_NO_REF(garbage);
	}

	/* assign_static_prop has two opcodes! */
	ZEND_VM_NEXT_OPCODE_EX(1, 2);
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_ASSIGN_STATIC_PROP_REF_SPEC_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *prop, *value_ptr;
	zend_property_info *prop_info;
	zend_refcounted *garbage = NULL;

	SAVE_OPLINE();

	prop = zend_fetch_static_property_address(&prop_info, opline->extended_value & ~ZEND_RETURNS_FUNCTION, BP_VAR_W, 0 OPLINE_CC EXECUTE_DATA_CC);
	if (UNEXPECTED(!prop)) {
		FREE_OP((opline+1)->op1_type, (opline+1)->op1.var);
		UNDEF_RESULT();
		HANDLE_EXCEPTION();
	}

	if (UNEXPECTED(prop_info->flags & ZEND_ACC_PPP_SET_MASK)
	 && UNEXPECTED(!zend_asymmetric_property_has_set_access(prop_info))) {
		zend_asymmetric_visibility_property_modification_error(prop_info, "indirectly modify");
		FREE_OP((opline+1)->op1_type, (opline+1)->op1.var);
		UNDEF_RESULT();
		HANDLE_EXCEPTION();
	}

	value_ptr = get_zval_ptr_ptr((opline+1)->op1_type, (opline+1)->op1, BP_VAR_W);

	if ((opline+1)->op1_type == IS_VAR && (opline->extended_value & ZEND_RETURNS_FUNCTION) && UNEXPECTED(!Z_ISREF_P(value_ptr))) {
		if (UNEXPECTED(!zend_wrong_assign_to_variable_reference(prop, value_ptr, &garbage OPLINE_CC EXECUTE_DATA_CC))) {
			prop = &EG(uninitialized_zval);
		}
	} else if (ZEND_TYPE_IS_SET(prop_info->type)) {
		prop = zend_assign_to_typed_property_reference(prop_info, prop, value_ptr, &garbage EXECUTE_DATA_CC);
	} else {
		zend_assign_to_variable_reference(prop, value_ptr, &garbage);
	}

	if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
		ZVAL_COPY(EX_VAR(opline->result.var), prop);
	}

	if (garbage) {
		GC_DTOR(garbage);
	}

	FREE_OP((opline+1)->op1_type, (opline+1)->op1.var);
	ZEND_VM_NEXT_OPCODE_EX(1, 2);
}

static zend_never_inline ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV  zend_leave_helper_SPEC_TAILCALL(ZEND_OPCODE_HANDLER_ARGS)
{
	zend_execute_data *old_execute_data;
	uint32_t call_info = EX_CALL_INFO();
#if ZEND_VM_KIND != ZEND_VM_KIND_TAILCALL
	/* zend_leave_helper may be called with opline=call_leave_op in TAILCALL VM */
	SAVE_OPLINE();
#endif

	if (EXPECTED((call_info & (ZEND_CALL_CODE|ZEND_CALL_TOP|ZEND_CALL_HAS_SYMBOL_TABLE|ZEND_CALL_FREE_EXTRA_ARGS|ZEND_CALL_ALLOCATED|ZEND_CALL_HAS_EXTRA_NAMED_PARAMS)) == 0)) {
		EG(current_execute_data) = EX(prev_execute_data);
		i_free_compiled_variables(execute_data);

#ifdef ZEND_PREFER_RELOAD
		call_info = EX_CALL_INFO();
#endif
		if (UNEXPECTED(call_info & ZEND_CALL_RELEASE_THIS)) {
			OBJ_RELEASE(Z_OBJ(execute_data->This));
		} else if (UNEXPECTED(call_info & ZEND_CALL_CLOSURE)) {
			OBJ_RELEASE(ZEND_CLOSURE_OBJECT(EX(func)));
		}
		EG(vm_stack_top) = (zval*)execute_data;
		execute_data = EX(prev_execute_data);

		if (UNEXPECTED(EG(exception) != NULL)) {
			zend_rethrow_exception(execute_data);
			HANDLE_EXCEPTION_LEAVE();
		}

		LOAD_NEXT_OPLINE();
		ZEND_VM_LEAVE();
	} else if (EXPECTED((call_info & (ZEND_CALL_CODE|ZEND_CALL_TOP)) == 0)) {
		EG(current_execute_data) = EX(prev_execute_data);
		i_free_compiled_variables(execute_data);

#ifdef ZEND_PREFER_RELOAD
		call_info = EX_CALL_INFO();
#endif
		if (UNEXPECTED(call_info & ZEND_CALL_HAS_SYMBOL_TABLE)) {
			zend_clean_and_cache_symbol_table(EX(symbol_table));
		}

		if (UNEXPECTED(call_info & ZEND_CALL_HAS_EXTRA_NAMED_PARAMS)) {
			zend_free_extra_named_params(EX(extra_named_params));
		}

		/* Free extra args before releasing the closure,
		 * as that may free the op_array. */
		zend_vm_stack_free_extra_args_ex(call_info, execute_data);

		if (UNEXPECTED(call_info & ZEND_CALL_RELEASE_THIS)) {
			OBJ_RELEASE(Z_OBJ(execute_data->This));
		} else if (UNEXPECTED(call_info & ZEND_CALL_CLOSURE)) {
			OBJ_RELEASE(ZEND_CLOSURE_OBJECT(EX(func)));
		}

		old_execute_data = execute_data;
		execute_data = EX(prev_execute_data);
		zend_vm_stack_free_call_frame_ex(call_info, old_execute_data);

		if (UNEXPECTED(EG(exception) != NULL)) {
			zend_rethrow_exception(execute_data);
			HANDLE_EXCEPTION_LEAVE();
		}

		LOAD_NEXT_OPLINE();
		ZEND_VM_LEAVE();
	} else if (EXPECTED((call_info & ZEND_CALL_TOP) == 0)) {
		if (EX(func)->op_array.last_var > 0) {
			zend_detach_symbol_table(execute_data);
			call_info |= ZEND_CALL_NEEDS_REATTACH;
		}
		zend_destroy_static_vars(&EX(func)->op_array);
		destroy_op_array(&EX(func)->op_array);
		efree_size(EX(func), sizeof(zend_op_array));
		old_execute_data = execute_data;
		execute_data = EG(current_execute_data) = EX(prev_execute_data);
		zend_vm_stack_free_call_frame_ex(call_info, old_execute_data);

		if (call_info & ZEND_CALL_NEEDS_REATTACH) {
			if (EX(func)->op_array.last_var > 0) {
				zend_attach_symbol_table(execute_data);
			} else {
				ZEND_ADD_CALL_FLAG(execute_data, ZEND_CALL_NEEDS_REATTACH);
			}
		}
		if (UNEXPECTED(EG(exception) != NULL)) {
			zend_rethrow_exception(execute_data);
			HANDLE_EXCEPTION_LEAVE();
		}

		LOAD_NEXT_OPLINE();
		ZEND_VM_LEAVE();
	} else {
		if (EXPECTED((call_info & ZEND_CALL_CODE) == 0)) {
			EG(current_execute_data) = EX(prev_execute_data);
			i_free_compiled_variables(execute_data);
#ifdef ZEND_PREFER_RELOAD
			call_info = EX_CALL_INFO();
#endif
			if (UNEXPECTED(call_info & (ZEND_CALL_HAS_SYMBOL_TABLE|ZEND_CALL_FREE_EXTRA_ARGS|ZEND_CALL_HAS_EXTRA_NAMED_PARAMS))) {
				if (UNEXPECTED(call_info & ZEND_CALL_HAS_SYMBOL_TABLE)) {
					zend_clean_and_cache_symbol_table(EX(symbol_table));
				}
				zend_vm_stack_free_extra_args_ex(call_info, execute_data);
				if (UNEXPECTED(call_info & ZEND_CALL_HAS_EXTRA_NAMED_PARAMS)) {
					zend_free_extra_named_params(EX(extra_named_params));
				}
			}
			if (UNEXPECTED(call_info & ZEND_CALL_CLOSURE)) {
				OBJ_RELEASE(ZEND_CLOSURE_OBJECT(EX(func)));
			}
			ZEND_VM_RETURN();
		} else /* if (call_kind == ZEND_CALL_TOP_CODE) */ {
			zend_array *symbol_table = EX(symbol_table);

			if (EX(func)->op_array.last_var > 0) {
				zend_detach_symbol_table(execute_data);
				call_info |= ZEND_CALL_NEEDS_REATTACH;
			}
			if (call_info & ZEND_CALL_NEEDS_REATTACH) {
				old_execute_data = EX(prev_execute_data);
				while (old_execute_data) {
					if (old_execute_data->func && (ZEND_CALL_INFO(old_execute_data) & ZEND_CALL_HAS_SYMBOL_TABLE)) {
						if (old_execute_data->symbol_table == symbol_table) {
							if (old_execute_data->func->op_array.last_var > 0) {
								zend_attach_symbol_table(old_execute_data);
							} else {
								ZEND_ADD_CALL_FLAG(old_execute_data, ZEND_CALL_NEEDS_REATTACH);
							}
						}
						break;
					}
					old_execute_data = old_execute_data->prev_execute_data;
				}
			}
			EG(current_execute_data) = EX(prev_execute_data);
			ZEND_VM_RETURN();
		}
	}
}

static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_JMP_SPEC_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE

	ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op1), 0);
}

static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_DO_ICALL_SPEC_RETVAL_UNUSED_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zend_execute_data *call = EX(call);
	zend_function *fbc = call->func;
	zval *ret;
	zval retval;

	SAVE_OPLINE();
	EX(call) = call->prev_execute_data;

	call->prev_execute_data = execute_data;
	EG(current_execute_data) = call;

#if ZEND_DEBUG
	bool should_throw = zend_internal_call_should_throw(fbc, call);
#endif

	ret = 0 ? EX_VAR(opline->result.var) : &retval;
	ZVAL_NULL(ret);


	fbc->internal_function.handler(call, ret);

#if ZEND_DEBUG
	if (!EG(exception) && call->func) {
		if (should_throw) {
			zend_internal_call_arginfo_violation(call->func);
		}
		ZEND_ASSERT(!(call->func->common.fn_flags & ZEND_ACC_HAS_RETURN_TYPE) ||
			zend_verify_internal_return_type(call->func, ret));
		ZEND_ASSERT((call->func->common.fn_flags & ZEND_ACC_RETURN_REFERENCE)
			? Z_ISREF_P(ret) : !Z_ISREF_P(ret));
		zend_verify_internal_func_info(call->func, ret);
	}
#endif


	ZEND_VM_FCALL_INTERRUPT_CHECK(call);

	EG(current_execute_data) = execute_data;
	zend_vm_stack_free_args(call);

	uint32_t call_info = ZEND_CALL_INFO(call);
	if (UNEXPECTED(call_info & (ZEND_CALL_HAS_EXTRA_NAMED_PARAMS|ZEND_CALL_ALLOCATED))) {
		if (call_info & ZEND_CALL_HAS_EXTRA_NAMED_PARAMS) {
			zend_free_extra_named_params(call->extra_named_params);
		}
		zend_vm_stack_free_call_frame_ex(call_info, call);
	} else {
		EG(vm_stack_top) = (zval*)call;
	}

	if (!0) {
		i_zval_ptr_dtor(ret);
	}

	if (UNEXPECTED(EG(exception) != NULL)) {
		zend_rethrow_exception(execute_data);
		HANDLE_EXCEPTION();
	}

	ZEND_VM_SET_OPCODE_NO_INTERRUPT(opline + 1);
	ZEND_VM_CONTINUE();
}

static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_DO_ICALL_SPEC_RETVAL_USED_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zend_execute_data *call = EX(call);
	zend_function *fbc = call->func;
	zval *ret;
	zval retval;

	SAVE_OPLINE();
	EX(call) = call->prev_execute_data;

	call->prev_execute_data = execute_data;
	EG(current_execute_data) = call;

#if ZEND_DEBUG
	bool should_throw = zend_internal_call_should_throw(fbc, call);
#endif

	ret = 1 ? EX_VAR(opline->result.var) : &retval;
	ZVAL_NULL(ret);


	fbc->internal_function.handler(call, ret);

#if ZEND_DEBUG
	if (!EG(exception) && call->func) {
		if (should_throw) {
			zend_internal_call_arginfo_violation(call->func);
		}
		ZEND_ASSERT(!(call->func->common.fn_flags & ZEND_ACC_HAS_RETURN_TYPE) ||
			zend_verify_internal_return_type(call->func, ret));
		ZEND_ASSERT((call->func->common.fn_flags & ZEND_ACC_RETURN_REFERENCE)
			? Z_ISREF_P(ret) : !Z_ISREF_P(ret));
		zend_verify_internal_func_info(call->func, ret);
	}
#endif


	ZEND_VM_FCALL_INTERRUPT_CHECK(call);

	EG(current_execute_data) = execute_data;
	zend_vm_stack_free_args(call);

	uint32_t call_info = ZEND_CALL_INFO(call);
	if (UNEXPECTED(call_info & (ZEND_CALL_HAS_EXTRA_NAMED_PARAMS|ZEND_CALL_ALLOCATED))) {
		if (call_info & ZEND_CALL_HAS_EXTRA_NAMED_PARAMS) {
			zend_free_extra_named_params(call->extra_named_params);
		}
		zend_vm_stack_free_call_frame_ex(call_info, call);
	} else {
		EG(vm_stack_top) = (zval*)call;
	}

	if (!1) {
		i_zval_ptr_dtor(ret);
	}

	if (UNEXPECTED(EG(exception) != NULL)) {
		zend_rethrow_exception(execute_data);
		HANDLE_EXCEPTION();
	}

	ZEND_VM_SET_OPCODE_NO_INTERRUPT(opline + 1);
	ZEND_VM_CONTINUE();
}

static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_DO_ICALL_SPEC_OBSERVER_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zend_execute_data *call = EX(call);
	zend_function *fbc = call->func;
	zval *ret;
	zval retval;

	SAVE_OPLINE();
	EX(call) = call->prev_execute_data;

	call->prev_execute_data = execute_data;
	EG(current_execute_data) = call;

#if ZEND_DEBUG
	bool should_throw = zend_internal_call_should_throw(fbc, call);
#endif

	ret = RETURN_VALUE_USED(opline) ? EX_VAR(opline->result.var) : &retval;
	ZVAL_NULL(ret);

	zend_observer_fcall_begin_specialized(call, false);
	fbc->internal_function.handler(call, ret);

#if ZEND_DEBUG
	if (!EG(exception) && call->func) {
		if (should_throw) {
			zend_internal_call_arginfo_violation(call->func);
		}
		ZEND_ASSERT(!(call->func->common.fn_flags & ZEND_ACC_HAS_RETURN_TYPE) ||
			zend_verify_internal_return_type(call->func, ret));
		ZEND_ASSERT((call->func->common.fn_flags & ZEND_ACC_RETURN_REFERENCE)
			? Z_ISREF_P(ret) : !Z_ISREF_P(ret));
		zend_verify_internal_func_info(call->func, ret);
	}
#endif
	zend_observer_fcall_end(call, EG(exception) ? NULL : ret);
	ZEND_VM_FCALL_INTERRUPT_CHECK(call);

	EG(current_execute_data) = execute_data;
	zend_vm_stack_free_args(call);

	uint32_t call_info = ZEND_CALL_INFO(call);
	if (UNEXPECTED(call_info & (ZEND_CALL_HAS_EXTRA_NAMED_PARAMS|ZEND_CALL_ALLOCATED))) {
		if (call_info & ZEND_CALL_HAS_EXTRA_NAMED_PARAMS) {
			zend_free_extra_named_params(call->extra_named_params);
		}
		zend_vm_stack_free_call_frame_ex(call_info, call);
	} else {
		EG(vm_stack_top) = (zval*)call;
	}

	if (!RETURN_VALUE_USED(opline)) {
		i_zval_ptr_dtor(ret);
	}

	if (UNEXPECTED(EG(exception) != NULL)) {
		zend_rethrow_exception(execute_data);
		HANDLE_EXCEPTION();
	}

	ZEND_VM_SET_OPCODE_NO_INTERRUPT(opline + 1);
	ZEND_VM_CONTINUE();
}

static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_DO_UCALL_SPEC_RETVAL_UNUSED_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zend_execute_data *call = EX(call);
	zend_function *fbc = call->func;
	zval *ret;

	SAVE_OPLINE();
	EX(call) = call->prev_execute_data;

	ret = NULL;
	if (0) {
		ret = EX_VAR(opline->result.var);
	}

	call->prev_execute_data = execute_data;
	execute_data = call;
	i_init_func_execute_data(&fbc->op_array, ret, 0 EXECUTE_DATA_CC);
	LOAD_OPLINE_EX();




	ZEND_VM_ENTER_EX();
}

static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_DO_UCALL_SPEC_RETVAL_USED_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zend_execute_data *call = EX(call);
	zend_function *fbc = call->func;
	zval *ret;

	SAVE_OPLINE();
	EX(call) = call->prev_execute_data;

	ret = NULL;
	if (1) {
		ret = EX_VAR(opline->result.var);
	}

	call->prev_execute_data = execute_data;
	execute_data = call;
	i_init_func_execute_data(&fbc->op_array, ret, 0 EXECUTE_DATA_CC);
	LOAD_OPLINE_EX();




	ZEND_VM_ENTER_EX();
}

static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_DO_UCALL_SPEC_OBSERVER_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zend_execute_data *call = EX(call);
	zend_function *fbc = call->func;
	zval *ret;

	SAVE_OPLINE();
	EX(call) = call->prev_execute_data;

	ret = NULL;
	if (RETURN_VALUE_USED(opline)) {
		ret = EX_VAR(opline->result.var);
	}

	call->prev_execute_data = execute_data;
	execute_data = call;
	i_init_func_execute_data(&fbc->op_array, ret, 0 EXECUTE_DATA_CC);
	LOAD_OPLINE_EX();
	SAVE_OPLINE();
	zend_observer_fcall_begin_specialized(execute_data, false);

	ZEND_VM_ENTER_EX();
}

static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_DO_FCALL_BY_NAME_SPEC_RETVAL_UNUSED_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zend_execute_data *call = EX(call);
	zend_function *fbc = call->func;
	zval *ret;
	zval retval;

	SAVE_OPLINE();
	EX(call) = call->prev_execute_data;

	const uint32_t no_discard = 0 ? 0 : ZEND_ACC_NODISCARD;

	if (UNEXPECTED(fbc->common.fn_flags & (ZEND_ACC_DEPRECATED|no_discard))) {
		if (fbc->common.fn_flags & ZEND_ACC_DEPRECATED) {
			zend_deprecated_function(fbc);
		}
		if ((fbc->common.fn_flags & no_discard) && EG(exception) == NULL) {
			zend_nodiscard_function(fbc);
		}
		if (UNEXPECTED(EG(exception) != NULL)) {
			UNDEF_RESULT();
			if (!0) {
				ret = &retval;
				ZVAL_UNDEF(ret);
			}
			goto fcall_by_name_end;
		}
	}

	if (EXPECTED(fbc->type == ZEND_USER_FUNCTION)) {
		ret = NULL;
		if (0) {
			ret = EX_VAR(opline->result.var);
		}

		call->prev_execute_data = execute_data;
		execute_data = call;
		i_init_func_execute_data(&fbc->op_array, ret, 0 EXECUTE_DATA_CC);
		LOAD_OPLINE_EX();




		ZEND_VM_ENTER_EX();
	} else {
		ZEND_ASSERT(fbc->type == ZEND_INTERNAL_FUNCTION);
		if (0) {
			ret = NULL;
		}

		call->prev_execute_data = execute_data;
		EG(current_execute_data) = call;

#if ZEND_DEBUG
		bool should_throw = zend_internal_call_should_throw(fbc, call);
#endif

		ret = 0 ? EX_VAR(opline->result.var) : &retval;
		ZVAL_NULL(ret);


		fbc->internal_function.handler(call, ret);

#if ZEND_DEBUG
		if (!EG(exception) && call->func) {
			if (should_throw) {
				zend_internal_call_arginfo_violation(call->func);
			}
			ZEND_ASSERT(!(call->func->common.fn_flags & ZEND_ACC_HAS_RETURN_TYPE) ||
				zend_verify_internal_return_type(call->func, ret));
			ZEND_ASSERT((call->func->common.fn_flags & ZEND_ACC_RETURN_REFERENCE)
				? Z_ISREF_P(ret) : !Z_ISREF_P(ret));
			zend_verify_internal_func_info(call->func, ret);
		}
#endif


		ZEND_VM_FCALL_INTERRUPT_CHECK(call);

		EG(current_execute_data) = execute_data;

		goto fcall_by_name_end;
	}

	if (0) {
fcall_by_name_end:

		zend_vm_stack_free_args(call);

		uint32_t call_info = ZEND_CALL_INFO(call);
		if (UNEXPECTED(call_info & (ZEND_CALL_HAS_EXTRA_NAMED_PARAMS|ZEND_CALL_ALLOCATED))) {
			if (call_info & ZEND_CALL_HAS_EXTRA_NAMED_PARAMS) {
				zend_free_extra_named_params(call->extra_named_params);
			}
			zend_vm_stack_free_call_frame_ex(call_info, call);
		} else {
			EG(vm_stack_top) = (zval*)call;
		}

		if (!0) {
			i_zval_ptr_dtor(ret);
		}
	}

	if (UNEXPECTED(EG(exception) != NULL)) {
		zend_rethrow_exception(execute_data);
		HANDLE_EXCEPTION();
	}
	ZEND_VM_SET_OPCODE_NO_INTERRUPT(opline + 1);
	ZEND_VM_CONTINUE();
}

static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_DO_FCALL_BY_NAME_SPEC_RETVAL_USED_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zend_execute_data *call = EX(call);
	zend_function *fbc = call->func;
	zval *ret;
	zval retval;

	SAVE_OPLINE();
	EX(call) = call->prev_execute_data;

	const uint32_t no_discard = 1 ? 0 : ZEND_ACC_NODISCARD;

	if (UNEXPECTED(fbc->common.fn_flags & (ZEND_ACC_DEPRECATED|no_discard))) {
		if (fbc->common.fn_flags & ZEND_ACC_DEPRECATED) {
			zend_deprecated_function(fbc);
		}
		if ((fbc->common.fn_flags & no_discard) && EG(exception) == NULL) {
			zend_nodiscard_function(fbc);
		}
		if (UNEXPECTED(EG(exception) != NULL)) {
			UNDEF_RESULT();
			if (!1) {
				ret = &retval;
				ZVAL_UNDEF(ret);
			}
			goto fcall_by_name_end;
		}
	}

	if (EXPECTED(fbc->type == ZEND_USER_FUNCTION)) {
		ret = NULL;
		if (1) {
			ret = EX_VAR(opline->result.var);
		}

		call->prev_execute_data = execute_data;
		execute_data = call;
		i_init_func_execute_data(&fbc->op_array, ret, 0 EXECUTE_DATA_CC);
		LOAD_OPLINE_EX();




		ZEND_VM_ENTER_EX();
	} else {
		ZEND_ASSERT(fbc->type == ZEND_INTERNAL_FUNCTION);
		if (0) {
			ret = NULL;
		}

		call->prev_execute_data = execute_data;
		EG(current_execute_data) = call;

#if ZEND_DEBUG
		bool should_throw = zend_internal_call_should_throw(fbc, call);
#endif

		ret = 1 ? EX_VAR(opline->result.var) : &retval;
		ZVAL_NULL(ret);


		fbc->internal_function.handler(call, ret);

#if ZEND_DEBUG
		if (!EG(exception) && call->func) {
			if (should_throw) {
				zend_internal_call_arginfo_violation(call->func);
			}
			ZEND_ASSERT(!(call->func->common.fn_flags & ZEND_ACC_HAS_RETURN_TYPE) ||
				zend_verify_internal_return_type(call->func, ret));
			ZEND_ASSERT((call->func->common.fn_flags & ZEND_ACC_RETURN_REFERENCE)
				? Z_ISREF_P(ret) : !Z_ISREF_P(ret));
			zend_verify_internal_func_info(call->func, ret);
		}
#endif


		ZEND_VM_FCALL_INTERRUPT_CHECK(call);

		EG(current_execute_data) = execute_data;

		goto fcall_by_name_end;
	}

	if (0) {
fcall_by_name_end:

		zend_vm_stack_free_args(call);

		uint32_t call_info = ZEND_CALL_INFO(call);
		if (UNEXPECTED(call_info & (ZEND_CALL_HAS_EXTRA_NAMED_PARAMS|ZEND_CALL_ALLOCATED))) {
			if (call_info & ZEND_CALL_HAS_EXTRA_NAMED_PARAMS) {
				zend_free_extra_named_params(call->extra_named_params);
			}
			zend_vm_stack_free_call_frame_ex(call_info, call);
		} else {
			EG(vm_stack_top) = (zval*)call;
		}

		if (!1) {
			i_zval_ptr_dtor(ret);
		}
	}

	if (UNEXPECTED(EG(exception) != NULL)) {
		zend_rethrow_exception(execute_data);
		HANDLE_EXCEPTION();
	}
	ZEND_VM_SET_OPCODE_NO_INTERRUPT(opline + 1);
	ZEND_VM_CONTINUE();
}

static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_DO_FCALL_BY_NAME_SPEC_OBSERVER_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zend_execute_data *call = EX(call);
	zend_function *fbc = call->func;
	zval *ret;
	zval retval;

	SAVE_OPLINE();
	EX(call) = call->prev_execute_data;

	const uint32_t no_discard = RETURN_VALUE_USED(opline) ? 0 : ZEND_ACC_NODISCARD;

	if (UNEXPECTED(fbc->common.fn_flags & (ZEND_ACC_DEPRECATED|no_discard))) {
		if (fbc->common.fn_flags & ZEND_ACC_DEPRECATED) {
			zend_deprecated_function(fbc);
		}
		if ((fbc->common.fn_flags & no_discard) && EG(exception) == NULL) {
			zend_nodiscard_function(fbc);
		}
		if (UNEXPECTED(EG(exception) != NULL)) {
			UNDEF_RESULT();
			if (!RETURN_VALUE_USED(opline)) {
				ret = &retval;
				ZVAL_UNDEF(ret);
			}
			goto fcall_by_name_end;
		}
	}

	if (EXPECTED(fbc->type == ZEND_USER_FUNCTION)) {
		ret = NULL;
		if (RETURN_VALUE_USED(opline)) {
			ret = EX_VAR(opline->result.var);
		}

		call->prev_execute_data = execute_data;
		execute_data = call;
		i_init_func_execute_data(&fbc->op_array, ret, 0 EXECUTE_DATA_CC);
		LOAD_OPLINE_EX();
		SAVE_OPLINE();
		zend_observer_fcall_begin_specialized(execute_data, false);

		ZEND_VM_ENTER_EX();
	} else {
		ZEND_ASSERT(fbc->type == ZEND_INTERNAL_FUNCTION);
		if (1) {
			ret = NULL;
		}

		call->prev_execute_data = execute_data;
		EG(current_execute_data) = call;

#if ZEND_DEBUG
		bool should_throw = zend_internal_call_should_throw(fbc, call);
#endif

		ret = RETURN_VALUE_USED(opline) ? EX_VAR(opline->result.var) : &retval;
		ZVAL_NULL(ret);

		zend_observer_fcall_begin_specialized(call, false);
		fbc->internal_function.handler(call, ret);

#if ZEND_DEBUG
		if (!EG(exception) && call->func) {
			if (should_throw) {
				zend_internal_call_arginfo_violation(call->func);
			}
			ZEND_ASSERT(!(call->func->common.fn_flags & ZEND_ACC_HAS_RETURN_TYPE) ||
				zend_verify_internal_return_type(call->func, ret));
			ZEND_ASSERT((call->func->common.fn_flags & ZEND_ACC_RETURN_REFERENCE)
				? Z_ISREF_P(ret) : !Z_ISREF_P(ret));
			zend_verify_internal_func_info(call->func, ret);
		}
#endif
		zend_observer_fcall_end(call, EG(exception) ? NULL : ret);
		ZEND_VM_FCALL_INTERRUPT_CHECK(call);

		EG(current_execute_data) = execute_data;

		goto fcall_by_name_end;
	}

	if (0) {
fcall_by_name_end:

		zend_vm_stack_free_args(call);

		uint32_t call_info = ZEND_CALL_INFO(call);
		if (UNEXPECTED(call_info & (ZEND_CALL_HAS_EXTRA_NAMED_PARAMS|ZEND_CALL_ALLOCATED))) {
			if (call_info & ZEND_CALL_HAS_EXTRA_NAMED_PARAMS) {
				zend_free_extra_named_params(call->extra_named_params);
			}
			zend_vm_stack_free_call_frame_ex(call_info, call);
		} else {
			EG(vm_stack_top) = (zval*)call;
		}

		if (!RETURN_VALUE_USED(opline)) {
			i_zval_ptr_dtor(ret);
		}
	}

	if (UNEXPECTED(EG(exception) != NULL)) {
		zend_rethrow_exception(execute_data);
		HANDLE_EXCEPTION();
	}
	ZEND_VM_SET_OPCODE_NO_INTERRUPT(opline + 1);
	ZEND_VM_CONTINUE();
}

static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_DO_FCALL_SPEC_RETVAL_UNUSED_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zend_execute_data *call = EX(call);
	zend_function *fbc = call->func;
	zval *ret;
	zval retval;

	SAVE_OPLINE();
	EX(call) = call->prev_execute_data;

	const uint32_t no_discard = 0 ? 0 : ZEND_ACC_NODISCARD;

	if (UNEXPECTED(fbc->common.fn_flags & (ZEND_ACC_DEPRECATED|no_discard))) {
		if (fbc->common.fn_flags & ZEND_ACC_DEPRECATED) {
			zend_deprecated_function(fbc);
		}
		if ((fbc->common.fn_flags & no_discard) && EG(exception) == NULL) {
			zend_nodiscard_function(fbc);
		}
		if (UNEXPECTED(EG(exception) != NULL)) {
			if (UNEXPECTED(ZEND_CALL_INFO(call) & ZEND_CALL_CLOSURE)) {
				OBJ_RELEASE(ZEND_CLOSURE_OBJECT(call->func));
			}
			UNDEF_RESULT();
			if (!0) {
				ret = &retval;
				ZVAL_UNDEF(ret);
			}
			goto fcall_end;
		}
	}

	if (EXPECTED(fbc->type == ZEND_USER_FUNCTION)) {
		ret = NULL;
		if (0) {
			ret = EX_VAR(opline->result.var);
		}

		call->prev_execute_data = execute_data;
		execute_data = call;
		i_init_func_execute_data(&fbc->op_array, ret, 1 EXECUTE_DATA_CC);

		if (EXPECTED(zend_execute_ex == execute_ex)) {
			LOAD_OPLINE_EX();




			ZEND_VM_ENTER_EX();
		} else {
			SAVE_OPLINE_EX();


			execute_data = EX(prev_execute_data);
			LOAD_OPLINE();
			ZEND_ADD_CALL_FLAG(call, ZEND_CALL_TOP);
			zend_execute_ex(call);
		}
	} else {
		ZEND_ASSERT(fbc->type == ZEND_INTERNAL_FUNCTION);
		if (0) {
			ret = NULL;
		}

		call->prev_execute_data = execute_data;
		EG(current_execute_data) = call;

#if ZEND_DEBUG
		bool should_throw = zend_internal_call_should_throw(fbc, call);
#endif

		ret = 0 ? EX_VAR(opline->result.var) : &retval;
		ZVAL_NULL(ret);


		if (!zend_execute_internal) {
			/* saves one function call if zend_execute_internal is not used */
			fbc->internal_function.handler(call, ret);
		} else {
			zend_execute_internal(call, ret);
		}

#if ZEND_DEBUG
		if (!EG(exception) && call->func && !(call->func->common.fn_flags & ZEND_ACC_FAKE_CLOSURE)) {
			if (should_throw) {
				zend_internal_call_arginfo_violation(call->func);
			}
			ZEND_ASSERT(!(call->func->common.fn_flags & ZEND_ACC_HAS_RETURN_TYPE) ||
				zend_verify_internal_return_type(call->func, ret));
			ZEND_ASSERT((call->func->common.fn_flags & ZEND_ACC_RETURN_REFERENCE)
				? Z_ISREF_P(ret) : !Z_ISREF_P(ret));
			zend_verify_internal_func_info(call->func, ret);
		}
#endif


		ZEND_VM_FCALL_INTERRUPT_CHECK(call);

		EG(current_execute_data) = execute_data;

		goto fcall_end;
	}

	if (0) {
fcall_end:

		zend_vm_stack_free_args(call);
		if (UNEXPECTED(ZEND_CALL_INFO(call) & ZEND_CALL_HAS_EXTRA_NAMED_PARAMS)) {
			zend_free_extra_named_params(call->extra_named_params);
		}

		if (!0) {
			i_zval_ptr_dtor(ret);
		}
	}

	if (UNEXPECTED(ZEND_CALL_INFO(call) & ZEND_CALL_RELEASE_THIS)) {
		OBJ_RELEASE(Z_OBJ(call->This));
	}

	zend_vm_stack_free_call_frame(call);
	if (UNEXPECTED(EG(exception) != NULL)) {
		zend_rethrow_exception(execute_data);
		HANDLE_EXCEPTION();
	}
	ZEND_VM_SET_OPCODE_NO_INTERRUPT(opline + 1);
	ZEND_VM_CONTINUE();
}

static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_DO_FCALL_SPEC_RETVAL_USED_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zend_execute_data *call = EX(call);
	zend_function *fbc = call->func;
	zval *ret;
	zval retval;

	SAVE_OPLINE();
	EX(call) = call->prev_execute_data;

	const uint32_t no_discard = 1 ? 0 : ZEND_ACC_NODISCARD;

	if (UNEXPECTED(fbc->common.fn_flags & (ZEND_ACC_DEPRECATED|no_discard))) {
		if (fbc->common.fn_flags & ZEND_ACC_DEPRECATED) {
			zend_deprecated_function(fbc);
		}
		if ((fbc->common.fn_flags & no_discard) && EG(exception) == NULL) {
			zend_nodiscard_function(fbc);
		}
		if (UNEXPECTED(EG(exception) != NULL)) {
			if (UNEXPECTED(ZEND_CALL_INFO(call) & ZEND_CALL_CLOSURE)) {
				OBJ_RELEASE(ZEND_CLOSURE_OBJECT(call->func));
			}
			UNDEF_RESULT();
			if (!1) {
				ret = &retval;
				ZVAL_UNDEF(ret);
			}
			goto fcall_end;
		}
	}

	if (EXPECTED(fbc->type == ZEND_USER_FUNCTION)) {
		ret = NULL;
		if (1) {
			ret = EX_VAR(opline->result.var);
		}

		call->prev_execute_data = execute_data;
		execute_data = call;
		i_init_func_execute_data(&fbc->op_array, ret, 1 EXECUTE_DATA_CC);

		if (EXPECTED(zend_execute_ex == execute_ex)) {
			LOAD_OPLINE_EX();




			ZEND_VM_ENTER_EX();
		} else {
			SAVE_OPLINE_EX();


			execute_data = EX(prev_execute_data);
			LOAD_OPLINE();
			ZEND_ADD_CALL_FLAG(call, ZEND_CALL_TOP);
			zend_execute_ex(call);
		}
	} else {
		ZEND_ASSERT(fbc->type == ZEND_INTERNAL_FUNCTION);
		if (0) {
			ret = NULL;
		}

		call->prev_execute_data = execute_data;
		EG(current_execute_data) = call;

#if ZEND_DEBUG
		bool should_throw = zend_internal_call_should_throw(fbc, call);
#endif

		ret = 1 ? EX_VAR(opline->result.var) : &retval;
		ZVAL_NULL(ret);


		if (!zend_execute_internal) {
			/* saves one function call if zend_execute_internal is not used */
			fbc->internal_function.handler(call, ret);
		} else {
			zend_execute_internal(call, ret);
		}

#if ZEND_DEBUG
		if (!EG(exception) && call->func && !(call->func->common.fn_flags & ZEND_ACC_FAKE_CLOSURE)) {
			if (should_throw) {
				zend_internal_call_arginfo_violation(call->func);
			}
			ZEND_ASSERT(!(call->func->common.fn_flags & ZEND_ACC_HAS_RETURN_TYPE) ||
				zend_verify_internal_return_type(call->func, ret));
			ZEND_ASSERT((call->func->common.fn_flags & ZEND_ACC_RETURN_REFERENCE)
				? Z_ISREF_P(ret) : !Z_ISREF_P(ret));
			zend_verify_internal_func_info(call->func, ret);
		}
#endif


		ZEND_VM_FCALL_INTERRUPT_CHECK(call);

		EG(current_execute_data) = execute_data;

		goto fcall_end;
	}

	if (0) {
fcall_end:

		zend_vm_stack_free_args(call);
		if (UNEXPECTED(ZEND_CALL_INFO(call) & ZEND_CALL_HAS_EXTRA_NAMED_PARAMS)) {
			zend_free_extra_named_params(call->extra_named_params);
		}

		if (!1) {
			i_zval_ptr_dtor(ret);
		}
	}

	if (UNEXPECTED(ZEND_CALL_INFO(call) & ZEND_CALL_RELEASE_THIS)) {
		OBJ_RELEASE(Z_OBJ(call->This));
	}

	zend_vm_stack_free_call_frame(call);
	if (UNEXPECTED(EG(exception) != NULL)) {
		zend_rethrow_exception(execute_data);
		HANDLE_EXCEPTION();
	}
	ZEND_VM_SET_OPCODE_NO_INTERRUPT(opline + 1);
	ZEND_VM_CONTINUE();
}

static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_DO_FCALL_SPEC_OBSERVER_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zend_execute_data *call = EX(call);
	zend_function *fbc = call->func;
	zval *ret;
	zval retval;

	SAVE_OPLINE();
	EX(call) = call->prev_execute_data;

	const uint32_t no_discard = RETURN_VALUE_USED(opline) ? 0 : ZEND_ACC_NODISCARD;

	if (UNEXPECTED(fbc->common.fn_flags & (ZEND_ACC_DEPRECATED|no_discard))) {
		if (fbc->common.fn_flags & ZEND_ACC_DEPRECATED) {
			zend_deprecated_function(fbc);
		}
		if ((fbc->common.fn_flags & no_discard) && EG(exception) == NULL) {
			zend_nodiscard_function(fbc);
		}
		if (UNEXPECTED(EG(exception) != NULL)) {
			if (UNEXPECTED(ZEND_CALL_INFO(call) & ZEND_CALL_CLOSURE)) {
				OBJ_RELEASE(ZEND_CLOSURE_OBJECT(call->func));
			}
			UNDEF_RESULT();
			if (!RETURN_VALUE_USED(opline)) {
				ret = &retval;
				ZVAL_UNDEF(ret);
			}
			goto fcall_end;
		}
	}

	if (EXPECTED(fbc->type == ZEND_USER_FUNCTION)) {
		ret = NULL;
		if (RETURN_VALUE_USED(opline)) {
			ret = EX_VAR(opline->result.var);
		}

		call->prev_execute_data = execute_data;
		execute_data = call;
		i_init_func_execute_data(&fbc->op_array, ret, 1 EXECUTE_DATA_CC);

		if (EXPECTED(zend_execute_ex == execute_ex)) {
			LOAD_OPLINE_EX();
			SAVE_OPLINE();
			zend_observer_fcall_begin_specialized(execute_data, false);
			ZEND_VM_ENTER_EX();
		} else {
			SAVE_OPLINE_EX();
			zend_observer_fcall_begin_specialized(execute_data, false);
			execute_data = EX(prev_execute_data);
			LOAD_OPLINE();
			ZEND_ADD_CALL_FLAG(call, ZEND_CALL_TOP);
			zend_execute_ex(call);
		}
	} else {
		ZEND_ASSERT(fbc->type == ZEND_INTERNAL_FUNCTION);
		if (1) {
			ret = NULL;
		}

		call->prev_execute_data = execute_data;
		EG(current_execute_data) = call;

#if ZEND_DEBUG
		bool should_throw = zend_internal_call_should_throw(fbc, call);
#endif

		ret = RETURN_VALUE_USED(opline) ? EX_VAR(opline->result.var) : &retval;
		ZVAL_NULL(ret);

		zend_observer_fcall_begin_specialized(call, false);
		if (!zend_execute_internal) {
			/* saves one function call if zend_execute_internal is not used */
			fbc->internal_function.handler(call, ret);
		} else {
			zend_execute_internal(call, ret);
		}

#if ZEND_DEBUG
		if (!EG(exception) && call->func && !(call->func->common.fn_flags & ZEND_ACC_FAKE_CLOSURE)) {
			if (should_throw) {
				zend_internal_call_arginfo_violation(call->func);
			}
			ZEND_ASSERT(!(call->func->common.fn_flags & ZEND_ACC_HAS_RETURN_TYPE) ||
				zend_verify_internal_return_type(call->func, ret));
			ZEND_ASSERT((call->func->common.fn_flags & ZEND_ACC_RETURN_REFERENCE)
				? Z_ISREF_P(ret) : !Z_ISREF_P(ret));
			zend_verify_internal_func_info(call->func, ret);
		}
#endif
		zend_observer_fcall_end(call, EG(exception) ? NULL : ret);
		ZEND_VM_FCALL_INTERRUPT_CHECK(call);

		EG(current_execute_data) = execute_data;

		goto fcall_end;
	}

	if (0) {
fcall_end:

		zend_vm_stack_free_args(call);
		if (UNEXPECTED(ZEND_CALL_INFO(call) & ZEND_CALL_HAS_EXTRA_NAMED_PARAMS)) {
			zend_free_extra_named_params(call->extra_named_params);
		}

		if (!RETURN_VALUE_USED(opline)) {
			i_zval_ptr_dtor(ret);
		}
	}

	if (UNEXPECTED(ZEND_CALL_INFO(call) & ZEND_CALL_RELEASE_THIS)) {
		OBJ_RELEASE(Z_OBJ(call->This));
	}

	zend_vm_stack_free_call_frame(call);
	if (UNEXPECTED(EG(exception) != NULL)) {
		zend_rethrow_exception(execute_data);
		HANDLE_EXCEPTION();
	}
	ZEND_VM_SET_OPCODE_NO_INTERRUPT(opline + 1);
	ZEND_VM_CONTINUE();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_GENERATOR_CREATE_SPEC_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	zval *return_value = EX(return_value);

	if (EXPECTED(return_value)) {
		USE_OPLINE
		zend_generator *generator;
		zend_execute_data *gen_execute_data;
		uint32_t num_args, used_stack, call_info;

		SAVE_OPLINE();
		object_init_ex(return_value, zend_ce_generator);

		/*
		 * Normally the execute_data is allocated on the VM stack (because it does
		 * not actually do any allocation and thus is faster). For generators
		 * though this behavior would be suboptimal, because the (rather large)
		 * structure would have to be copied back and forth every time execution is
		 * suspended or resumed. That's why for generators the execution context
		 * is allocated on heap.
		 */
		num_args = EX_NUM_ARGS();
		if (EXPECTED(num_args <= EX(func)->op_array.num_args)) {
			used_stack = (ZEND_CALL_FRAME_SLOT + EX(func)->op_array.last_var + EX(func)->op_array.T) * sizeof(zval);
			gen_execute_data = (zend_execute_data*)emalloc(used_stack);
			used_stack = (ZEND_CALL_FRAME_SLOT + EX(func)->op_array.last_var) * sizeof(zval);
		} else {
			used_stack = (ZEND_CALL_FRAME_SLOT + num_args + EX(func)->op_array.last_var + EX(func)->op_array.T - EX(func)->op_array.num_args) * sizeof(zval);
			gen_execute_data = (zend_execute_data*)emalloc(used_stack);
		}
		memcpy(gen_execute_data, execute_data, used_stack);

		/* Save execution context in generator object. */
		generator = (zend_generator *) Z_OBJ_P(EX(return_value));
		generator->func = gen_execute_data->func;
		generator->execute_data = gen_execute_data;
		generator->frozen_call_stack = NULL;
		generator->execute_fake.opline = NULL;
		generator->execute_fake.func = NULL;
		generator->execute_fake.prev_execute_data = NULL;
		ZVAL_OBJ(&generator->execute_fake.This, (zend_object *) generator);

		gen_execute_data->opline = opline;
		/* EX(return_value) keeps pointer to zend_object (not a real zval) */
		gen_execute_data->return_value = (zval*)generator;
		call_info = Z_TYPE_INFO(EX(This));
		if ((call_info & Z_TYPE_MASK) == IS_OBJECT
		 && (!(call_info & (ZEND_CALL_CLOSURE|ZEND_CALL_RELEASE_THIS))
			 /* Bug #72523 */
			|| UNEXPECTED(zend_execute_ex != execute_ex))) {
			ZEND_ADD_CALL_FLAG_EX(call_info, ZEND_CALL_RELEASE_THIS);
			Z_ADDREF(gen_execute_data->This);
		}
		ZEND_ADD_CALL_FLAG_EX(call_info, (ZEND_CALL_TOP_FUNCTION | ZEND_CALL_ALLOCATED | ZEND_CALL_GENERATOR));
		Z_TYPE_INFO(gen_execute_data->This) = call_info;
		gen_execute_data->prev_execute_data = NULL;

		call_info = EX_CALL_INFO();
		EG(current_execute_data) = EX(prev_execute_data);
		if (EXPECTED(!(call_info & (ZEND_CALL_TOP|ZEND_CALL_ALLOCATED)))) {
			EG(vm_stack_top) = (zval*)execute_data;
			execute_data = EX(prev_execute_data);
			LOAD_NEXT_OPLINE();
			ZEND_VM_LEAVE();
		} else if (EXPECTED(!(call_info & ZEND_CALL_TOP))) {
			zend_execute_data *old_execute_data = execute_data;
			execute_data = EX(prev_execute_data);
			zend_vm_stack_free_call_frame_ex(call_info, old_execute_data);
			LOAD_NEXT_OPLINE();
			ZEND_VM_LEAVE();
		} else {
			ZEND_VM_RETURN();
		}
	} else {
		ZEND_VM_DISPATCH_TO_LEAVE_HELPER(zend_leave_helper_SPEC_TAILCALL);
	}
}

static zend_never_inline ZEND_COLD ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV_EX  zend_cannot_pass_by_ref_helper_SPEC_TAILCALL(ZEND_OPCODE_HANDLER_ARGS_EX uint32_t _arg_num, zval *_arg);
static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_SEND_UNPACK_SPEC_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *args;
	uint32_t arg_num;

	SAVE_OPLINE();
	args = get_zval_ptr_undef(opline->op1_type, opline->op1, BP_VAR_R);
	arg_num = ZEND_CALL_NUM_ARGS(EX(call)) + 1;

send_again:
	if (EXPECTED(Z_TYPE_P(args) == IS_ARRAY)) {
		HashTable *ht = Z_ARRVAL_P(args);
		zval *arg, *top;
		zend_string *name;
		bool have_named_params = 0;

		zend_vm_stack_extend_call_frame(&EX(call), arg_num - 1, zend_hash_num_elements(ht));

		// TODO: Speed this up using a flag that specifies whether there are any ref parameters.
		if ((opline->op1_type & (IS_VAR|IS_CV)) && Z_REFCOUNT_P(args) > 1) {
			uint32_t tmp_arg_num = arg_num;
			bool separate = 0;

			/* check if any of arguments are going to be passed by reference */
			ZEND_HASH_FOREACH_STR_KEY_VAL(ht, name, arg) {
				if (UNEXPECTED(name)) {
					void *cache_slot[2] = {NULL, NULL};
					tmp_arg_num = zend_get_arg_offset_by_name(
						EX(call)->func, name, cache_slot) + 1;
				}
				if (ARG_SHOULD_BE_SENT_BY_REF(EX(call)->func, tmp_arg_num)) {
					separate = 1;
					break;
				}
				tmp_arg_num++;
			} ZEND_HASH_FOREACH_END();
			if (separate) {
				SEPARATE_ARRAY(args);
				ht = Z_ARRVAL_P(args);
			}
		}

		ZEND_HASH_FOREACH_STR_KEY_VAL(ht, name, arg) {
			if (UNEXPECTED(name)) {
				void *cache_slot[2] = {NULL, NULL};
				have_named_params = 1;
				top = zend_handle_named_arg(&EX(call), name, &arg_num, cache_slot);
				if (UNEXPECTED(!top)) {
					FREE_OP(opline->op1_type, opline->op1.var);
					HANDLE_EXCEPTION();
				}
			} else {
				if (have_named_params) {
					zend_throw_error(NULL,
						"Cannot use positional argument after named argument during unpacking");
					FREE_OP(opline->op1_type, opline->op1.var);
					HANDLE_EXCEPTION();
				}

				top = ZEND_CALL_ARG(EX(call), arg_num);
				ZEND_CALL_NUM_ARGS(EX(call))++;
			}

			if (ARG_SHOULD_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
				if (Z_ISREF_P(arg)) {
					Z_ADDREF_P(arg);
					ZVAL_REF(top, Z_REF_P(arg));
				} else if (opline->op1_type & (IS_VAR|IS_CV)) {
					/* array is already separated above */
					ZVAL_MAKE_REF_EX(arg, 2);
					ZVAL_REF(top, Z_REF_P(arg));
				} else {
					Z_TRY_ADDREF_P(arg);
					ZVAL_NEW_REF(top, arg);
				}
			} else {
				ZVAL_COPY_DEREF(top, arg);
			}

			arg_num++;
		} ZEND_HASH_FOREACH_END();

	} else if (EXPECTED(Z_TYPE_P(args) == IS_OBJECT)) {
		zend_class_entry *ce = Z_OBJCE_P(args);
		zend_object_iterator *iter;
		bool have_named_params = 0;

		if (!ce || !ce->get_iterator) {
			zend_type_error("Only arrays and Traversables can be unpacked, %s given", zend_zval_value_name(args));
		} else {

			iter = ce->get_iterator(ce, args, 0);
			if (UNEXPECTED(!iter)) {
				FREE_OP(opline->op1_type, opline->op1.var);
				if (!EG(exception)) {
					zend_throw_exception_ex(
						NULL, 0, "Object of type %s did not create an Iterator", ZSTR_VAL(ce->name)
					);
				}
				HANDLE_EXCEPTION();
			}

			const zend_object_iterator_funcs *funcs = iter->funcs;
			if (funcs->rewind) {
				funcs->rewind(iter);
			}

			for (; funcs->valid(iter) == SUCCESS; ++arg_num) {
				zval *arg, *top;

				if (UNEXPECTED(EG(exception) != NULL)) {
					break;
				}

				arg = funcs->get_current_data(iter);
				if (UNEXPECTED(EG(exception) != NULL)) {
					break;
				}

				zend_string *name = NULL;
				if (funcs->get_current_key) {
					zval key;
					funcs->get_current_key(iter, &key);
					if (UNEXPECTED(EG(exception) != NULL)) {
						break;
					}

					if (UNEXPECTED(Z_TYPE(key) != IS_LONG)) {
						if (UNEXPECTED(Z_TYPE(key) != IS_STRING)) {
							zend_throw_error(NULL,
								"Keys must be of type int|string during argument unpacking");
							zval_ptr_dtor(&key);
							break;
						}

						name = Z_STR_P(&key);

						zend_ulong tmp;
						if (ZEND_HANDLE_NUMERIC(name, tmp)) {
							name = NULL;
						}
					}
				}

				if (UNEXPECTED(name)) {
					void *cache_slot[2] = {NULL, NULL};
					have_named_params = 1;
					top = zend_handle_named_arg(&EX(call), name, &arg_num, cache_slot);
					if (UNEXPECTED(!top)) {
						zend_string_release(name);
						break;
					}

					ZVAL_DEREF(arg);
					Z_TRY_ADDREF_P(arg);

					if (ARG_MUST_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
						zend_error(
							E_WARNING, "Cannot pass by-reference argument %d of %s%s%s()"
							" by unpacking a Traversable, passing by-value instead", arg_num,
							EX(call)->func->common.scope ? ZSTR_VAL(EX(call)->func->common.scope->name) : "",
							EX(call)->func->common.scope ? "::" : "",
							ZSTR_VAL(EX(call)->func->common.function_name)
						);
						ZVAL_NEW_REF(top, arg);
					} else {
						ZVAL_COPY_VALUE(top, arg);
					}

					zend_string_release(name);
				} else {
					if (have_named_params) {
						zend_throw_error(NULL,
							"Cannot use positional argument after named argument during unpacking");
						break;
					}

					zend_vm_stack_extend_call_frame(&EX(call), arg_num - 1, 1);
					top = ZEND_CALL_ARG(EX(call), arg_num);
					ZVAL_DEREF(arg);
					Z_TRY_ADDREF_P(arg);

					if (ARG_MUST_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
						zend_error(
							E_WARNING, "Cannot pass by-reference argument %d of %s%s%s()"
							" by unpacking a Traversable, passing by-value instead", arg_num,
							EX(call)->func->common.scope ? ZSTR_VAL(EX(call)->func->common.scope->name) : "",
							EX(call)->func->common.scope ? "::" : "",
							ZSTR_VAL(EX(call)->func->common.function_name)
						);
						ZVAL_NEW_REF(top, arg);
					} else {
						ZVAL_COPY_VALUE(top, arg);
					}

					ZEND_CALL_NUM_ARGS(EX(call))++;
				}

				funcs->move_forward(iter);
			}

			zend_iterator_dtor(iter);
		}
	} else if (EXPECTED(Z_ISREF_P(args))) {
		args = Z_REFVAL_P(args);
		goto send_again;
	} else {
		if (opline->op1_type == IS_CV && UNEXPECTED(Z_TYPE_P(args) == IS_UNDEF)) {
			ZVAL_UNDEFINED_OP1();
		}
		zend_type_error("Only arrays and Traversables can be unpacked, %s given", zend_zval_value_name(args));
	}

	FREE_OP(opline->op1_type, opline->op1.var);
	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_SEND_ARRAY_SPEC_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *args;

	SAVE_OPLINE();
	args = get_zval_ptr(opline->op1_type, opline->op1, BP_VAR_R);

	if (UNEXPECTED(Z_TYPE_P(args) != IS_ARRAY)) {
		if ((opline->op1_type & (IS_VAR|IS_CV)) && Z_ISREF_P(args)) {
			args = Z_REFVAL_P(args);
			if (EXPECTED(Z_TYPE_P(args) == IS_ARRAY)) {
				goto send_array;
			}
		}
		zend_type_error("call_user_func_array(): Argument #2 ($args) must be of type array, %s given", zend_zval_value_name(args));
		FREE_OP(opline->op2_type, opline->op2.var);
		FREE_OP(opline->op1_type, opline->op1.var);
		HANDLE_EXCEPTION();
	} else {
		uint32_t arg_num;
		HashTable *ht;
		zval *arg, *param;

send_array:
		ht = Z_ARRVAL_P(args);
		if (opline->op2_type != IS_UNUSED) {
			/* We don't need to handle named params in this case,
			 * because array_slice() is called with $preserve_keys == false. */
			zval *op2 = get_zval_ptr_deref(opline->op2_type, opline->op2, BP_VAR_R);
			uint32_t skip = opline->extended_value;
			uint32_t count = zend_hash_num_elements(ht);
			zend_long len;
			if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
				len = Z_LVAL_P(op2);
			} else if (Z_TYPE_P(op2) == IS_NULL) {
				len = count - skip;
			} else if (EX_USES_STRICT_TYPES()
					|| !zend_parse_arg_long_weak(op2, &len, /* arg_num */ 3)) {
				zend_type_error(
					"array_slice(): Argument #3 ($length) must be of type ?int, %s given",
					zend_zval_value_name(op2));
				FREE_OP(opline->op2_type, opline->op2.var);
				FREE_OP(opline->op1_type, opline->op1.var);
				HANDLE_EXCEPTION();
			}

			if (len < 0) {
				len += (zend_long)(count - skip);
			}
			if (skip < count && len > 0) {
				if (len > (zend_long)(count - skip)) {
					len = (zend_long)(count - skip);
				}
				zend_vm_stack_extend_call_frame(&EX(call), 0, len);
				arg_num = 1;
				param = ZEND_CALL_ARG(EX(call), 1);
				ZEND_HASH_FOREACH_VAL(ht, arg) {
					bool must_wrap = 0;
					if (skip > 0) {
						skip--;
						continue;
					} else if ((zend_long)(arg_num - 1) >= len) {
						break;
					} else if (ARG_SHOULD_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
						if (UNEXPECTED(!Z_ISREF_P(arg))) {
							if (!ARG_MAY_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
								/* By-value send is not allowed -- emit a warning,
								 * but still perform the call. */
								zend_param_must_be_ref(EX(call)->func, arg_num);
								must_wrap = 1;
							}
						}
					} else {
						if (Z_ISREF_P(arg) &&
						    !(EX(call)->func->common.fn_flags & ZEND_ACC_CALL_VIA_TRAMPOLINE)) {
							/* don't separate references for __call */
							arg = Z_REFVAL_P(arg);
						}
					}
					if (EXPECTED(!must_wrap)) {
						ZVAL_COPY(param, arg);
					} else {
						Z_TRY_ADDREF_P(arg);
						ZVAL_NEW_REF(param, arg);
					}
					ZEND_CALL_NUM_ARGS(EX(call))++;
					arg_num++;
					param++;
				} ZEND_HASH_FOREACH_END();
			}
			FREE_OP(opline->op2_type, opline->op2.var);
		} else {
			zend_string *name;
			bool have_named_params;
			zend_vm_stack_extend_call_frame(&EX(call), 0, zend_hash_num_elements(ht));
			arg_num = 1;
			param = ZEND_CALL_ARG(EX(call), 1);
			have_named_params = 0;
			ZEND_HASH_FOREACH_STR_KEY_VAL(ht, name, arg) {
				if (name) {
					void *cache_slot[2] = {NULL, NULL};
					have_named_params = 1;
					param = zend_handle_named_arg(&EX(call), name, &arg_num, cache_slot);
					if (!param) {
						FREE_OP(opline->op1_type, opline->op1.var);
						HANDLE_EXCEPTION();
					}
				} else if (have_named_params) {
					zend_throw_error(NULL,
						"Cannot use positional argument after named argument");
					FREE_OP(opline->op1_type, opline->op1.var);
					HANDLE_EXCEPTION();
				}

				bool must_wrap = 0;
				if (ARG_SHOULD_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
					if (UNEXPECTED(!Z_ISREF_P(arg))) {
						if (!ARG_MAY_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
							/* By-value send is not allowed -- emit a warning,
							 * but still perform the call. */
							zend_param_must_be_ref(EX(call)->func, arg_num);
							must_wrap = 1;
						}
					}
				} else {
					if (Z_ISREF_P(arg) &&
					    !(EX(call)->func->common.fn_flags & ZEND_ACC_CALL_VIA_TRAMPOLINE)) {
						/* don't separate references for __call */
						arg = Z_REFVAL_P(arg);
					}
				}

				if (EXPECTED(!must_wrap)) {
					ZVAL_COPY(param, arg);
				} else {
					Z_TRY_ADDREF_P(arg);
					ZVAL_NEW_REF(param, arg);
				}
				if (!name) {
					ZEND_CALL_NUM_ARGS(EX(call))++;
					arg_num++;
					param++;
				}
			} ZEND_HASH_FOREACH_END();
		}
	}
	FREE_OP(opline->op1_type, opline->op1.var);
	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static zend_never_inline ZEND_COLD ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV  zend_missing_arg_helper_SPEC_TAILCALL(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE

	SAVE_OPLINE();

	zend_missing_arg_error(execute_data);
	HANDLE_EXCEPTION();
}

static zend_never_inline ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV_EX  zend_verify_recv_arg_type_helper_SPEC_TAILCALL(ZEND_OPCODE_HANDLER_ARGS_EX zval *op_1);
static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_RECV_NOTYPE_SPEC_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	uint32_t arg_num = opline->op1.num;

	if (UNEXPECTED(arg_num > EX_NUM_ARGS())) {
		ZEND_VM_TAIL_CALL(zend_missing_arg_helper_SPEC_TAILCALL(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
	}

	ZEND_VM_NEXT_OPCODE();
}

static zend_never_inline ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV_EX  zend_case_helper_SPEC_TAILCALL(ZEND_OPCODE_HANDLER_ARGS_EX zval *op_1, zval *op_2);
static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_ADD_ARRAY_UNPACK_SPEC_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1;
	HashTable *result_ht;

	SAVE_OPLINE();
	op1 = get_zval_ptr(opline->op1_type, opline->op1, BP_VAR_R);
	result_ht = Z_ARRVAL_P(EX_VAR(opline->result.var));

add_unpack_again:
	if (EXPECTED(Z_TYPE_P(op1) == IS_ARRAY)) {
		HashTable *ht = Z_ARRVAL_P(op1);
		zval *val;

		if (HT_IS_PACKED(ht) && (zend_hash_num_elements(result_ht) == 0 || HT_IS_PACKED(result_ht))) {
			/* zend_hash_extend() skips initialization when the number of elements is 0,
			 * but the code below expects that result_ht is initialized as packed.
			 * We can just skip the work in that case. */
			if (result_ht->nNumUsed + zend_hash_num_elements(ht) > 0) {
				zend_hash_extend(result_ht, result_ht->nNumUsed + zend_hash_num_elements(ht), 1);
				ZEND_HASH_FILL_PACKED(result_ht) {
					ZEND_HASH_PACKED_FOREACH_VAL(ht, val) {
						if (UNEXPECTED(Z_ISREF_P(val)) &&
							UNEXPECTED(Z_REFCOUNT_P(val) == 1)) {
							val = Z_REFVAL_P(val);
						}
						Z_TRY_ADDREF_P(val);
						ZEND_HASH_FILL_ADD(val);
					} ZEND_HASH_FOREACH_END();
				} ZEND_HASH_FILL_END();
			}
		} else {
			zend_string *key;

			ZEND_HASH_FOREACH_STR_KEY_VAL(ht, key, val) {
				if (UNEXPECTED(Z_ISREF_P(val)) &&
					UNEXPECTED(Z_REFCOUNT_P(val) == 1)) {
					val = Z_REFVAL_P(val);
				}
				Z_TRY_ADDREF_P(val);
				if (key) {
					zend_hash_update(result_ht, key, val);
				} else {
					if (!zend_hash_next_index_insert(result_ht, val)) {
						zend_cannot_add_element();
						zval_ptr_dtor_nogc(val);
						break;
					}
				}
			} ZEND_HASH_FOREACH_END();
		}
	} else if (EXPECTED(Z_TYPE_P(op1) == IS_OBJECT)) {
		zend_class_entry *ce = Z_OBJCE_P(op1);
		zend_object_iterator *iter;

		if (!ce || !ce->get_iterator) {
			zend_type_error("Only arrays and Traversables can be unpacked, %s given", zend_zval_value_name(op1));
		} else {
			iter = ce->get_iterator(ce, op1, 0);
			if (UNEXPECTED(!iter)) {
				FREE_OP(opline->op1_type, opline->op1.var);
				if (!EG(exception)) {
					zend_throw_exception_ex(
						NULL, 0, "Object of type %s did not create an Iterator", ZSTR_VAL(ce->name)
					);
				}
				HANDLE_EXCEPTION();
			}

			const zend_object_iterator_funcs *funcs = iter->funcs;
			if (funcs->rewind) {
				funcs->rewind(iter);
			}

			for (; funcs->valid(iter) == SUCCESS; ) {
				zval *val;

				if (UNEXPECTED(EG(exception) != NULL)) {
					break;
				}

				val = funcs->get_current_data(iter);
				if (UNEXPECTED(EG(exception) != NULL)) {
					break;
				}

				zval key;
				if (funcs->get_current_key) {
					funcs->get_current_key(iter, &key);
					if (UNEXPECTED(EG(exception) != NULL)) {
						break;
					}

					if (UNEXPECTED(Z_TYPE(key) != IS_LONG && Z_TYPE(key) != IS_STRING)) {
						zend_throw_error(NULL,
							"Keys must be of type int|string during array unpacking");
						zval_ptr_dtor(&key);
						break;
					}
				} else {
					ZVAL_UNDEF(&key);
				}

				ZVAL_DEREF(val);
				Z_TRY_ADDREF_P(val);

				zend_ulong num_key;
				if (Z_TYPE(key) == IS_STRING && !ZEND_HANDLE_NUMERIC(Z_STR(key), num_key)) {
					zend_hash_update(result_ht, Z_STR(key), val);
					zval_ptr_dtor_str(&key);
				} else {
					zval_ptr_dtor(&key);
					if (!zend_hash_next_index_insert(result_ht, val)) {
						zend_cannot_add_element();
						zval_ptr_dtor_nogc(val);
						break;
					}
				}

				funcs->move_forward(iter);
				if (UNEXPECTED(EG(exception))) {
					break;
				}
			}

			zend_iterator_dtor(iter);
		}
	} else if (EXPECTED(Z_ISREF_P(op1))) {
		op1 = Z_REFVAL_P(op1);
		goto add_unpack_again;
	} else {
		zend_throw_error(NULL, "Only arrays and Traversables can be unpacked, %s given", zend_zval_value_name(op1));
	}

	FREE_OP(opline->op1_type, opline->op1.var);
	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_UNSET_STATIC_PROP_SPEC_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *varname;
	zend_string *name, *tmp_name = NULL;
	zend_class_entry *ce;

	SAVE_OPLINE();

	if (opline->op2_type == IS_CONST) {
		ce = CACHED_PTR(opline->extended_value);
		if (UNEXPECTED(ce == NULL)) {
			ce = zend_fetch_class_by_name(Z_STR_P(RT_CONSTANT(opline, opline->op2)), Z_STR_P(RT_CONSTANT(opline, opline->op2) + 1), ZEND_FETCH_CLASS_DEFAULT | ZEND_FETCH_CLASS_EXCEPTION);
			if (UNEXPECTED(ce == NULL)) {
				FREE_OP(opline->op1_type, opline->op1.var);
				HANDLE_EXCEPTION();
			}
			/*CACHE_PTR(opline->extended_value, ce);*/
		}
	} else if (opline->op2_type == IS_UNUSED) {
		ce = zend_fetch_class(NULL, opline->op2.num);
		if (UNEXPECTED(ce == NULL)) {
			FREE_OP(opline->op1_type, opline->op1.var);
			HANDLE_EXCEPTION();
		}
	} else {
		ce = Z_CE_P(EX_VAR(opline->op2.var));
	}

	varname = get_zval_ptr_undef(opline->op1_type, opline->op1, BP_VAR_R);
	if (opline->op1_type == IS_CONST) {
		name = Z_STR_P(varname);
	} else if (EXPECTED(Z_TYPE_P(varname) == IS_STRING)) {
		name = Z_STR_P(varname);
	} else {
		if (opline->op1_type == IS_CV && UNEXPECTED(Z_TYPE_P(varname) == IS_UNDEF)) {
			varname = ZVAL_UNDEFINED_OP1();
		}
		name = zval_try_get_tmp_string(varname, &tmp_name);
		if (UNEXPECTED(!name)) {
			FREE_OP(opline->op1_type, opline->op1.var);
			HANDLE_EXCEPTION();
		}
	}

	zend_std_unset_static_property(ce, name);

	zend_tmp_string_release(tmp_name);
	FREE_OP(opline->op1_type, opline->op1.var);
	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static zend_never_inline ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV  zend_fe_fetch_object_helper_SPEC_TAILCALL(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *array;
	zval *value;
	uint32_t value_type;
	HashTable *fe_ht;
	HashPosition pos;
	Bucket *p;
	zend_object_iterator *iter;

	array = EX_VAR(opline->op1.var);
	SAVE_OPLINE();

	ZEND_ASSERT(Z_TYPE_P(array) == IS_OBJECT);
	if ((iter = zend_iterator_unwrap(array)) == NULL) {
		/* plain object */

		fe_ht = Z_OBJPROP_P(array);
		pos = zend_hash_iterator_pos(Z_FE_ITER_P(array), fe_ht);
		p = fe_ht->arData + pos;
		while (1) {
			if (UNEXPECTED(pos >= fe_ht->nNumUsed)) {
				/* reached end of iteration */
				goto fe_fetch_r_exit;
			}
			pos++;
			value = &p->val;
			value_type = Z_TYPE_INFO_P(value);
			if (EXPECTED(value_type != IS_UNDEF)) {
				if (UNEXPECTED(value_type == IS_INDIRECT)) {
					value = Z_INDIRECT_P(value);
					value_type = Z_TYPE_INFO_P(value);
					if (EXPECTED(value_type != IS_UNDEF)
					 && EXPECTED(zend_check_property_access(Z_OBJ_P(array), p->key, 0) == SUCCESS)) {
						break;
					}
				} else if (EXPECTED(Z_OBJCE_P(array)->default_properties_count == 0)
						|| !p->key
						|| zend_check_property_access(Z_OBJ_P(array), p->key, 1) == SUCCESS) {
					break;
				}
			}
			p++;
		}
		EG(ht_iterators)[Z_FE_ITER_P(array)].pos = pos;
		if (RETURN_VALUE_USED(opline)) {
			if (UNEXPECTED(!p->key)) {
				ZVAL_LONG(EX_VAR(opline->result.var), p->h);
			} else if (ZSTR_VAL(p->key)[0]) {
				ZVAL_STR_COPY(EX_VAR(opline->result.var), p->key);
			} else {
				const char *class_name, *prop_name;
				size_t prop_name_len;
				zend_unmangle_property_name_ex(
					p->key, &class_name, &prop_name, &prop_name_len);
				ZVAL_STRINGL(EX_VAR(opline->result.var), prop_name, prop_name_len);
			}
		}
	} else {
		const zend_object_iterator_funcs *funcs = iter->funcs;
		if (EXPECTED(++iter->index > 0)) {
			/* This could cause an endless loop if index becomes zero again.
			 * In case that ever happens we need an additional flag. */
			funcs->move_forward(iter);
			if (UNEXPECTED(EG(exception) != NULL)) {
				UNDEF_RESULT();
				HANDLE_EXCEPTION();
			}
			if (UNEXPECTED(funcs->valid(iter) == FAILURE)) {
				/* reached end of iteration */
				if (UNEXPECTED(EG(exception) != NULL)) {
					UNDEF_RESULT();
					HANDLE_EXCEPTION();
				}
fe_fetch_r_exit:
				ZEND_VM_SET_RELATIVE_OPCODE(opline, opline->extended_value);
				ZEND_VM_CONTINUE();
			}
		}
		value = funcs->get_current_data(iter);
		if (UNEXPECTED(EG(exception) != NULL)) {
			UNDEF_RESULT();
			HANDLE_EXCEPTION();
		}
		if (!value) {
			/* failure in get_current_data */
			goto fe_fetch_r_exit;
		}
		if (RETURN_VALUE_USED(opline)) {
			if (funcs->get_current_key) {
				funcs->get_current_key(iter, EX_VAR(opline->result.var));
				if (UNEXPECTED(EG(exception) != NULL)) {
					UNDEF_RESULT();
					HANDLE_EXCEPTION();
				}
			} else {
				ZVAL_LONG(EX_VAR(opline->result.var), iter->index);
			}
		}
		value_type = Z_TYPE_INFO_P(value);
	}

	if (EXPECTED(opline->op2_type == IS_CV)) {
		zval *variable_ptr = EX_VAR(opline->op2.var);
		zend_assign_to_variable(variable_ptr, value, IS_CV, EX_USES_STRICT_TYPES());
	} else {
		zval *res = EX_VAR(opline->op2.var);
		zend_refcounted *gc = Z_COUNTED_P(value);

		ZVAL_COPY_VALUE_EX(res, value, gc, value_type);
		if (Z_TYPE_INFO_REFCOUNTED(value_type)) {
			GC_ADDREF(gc);
		}
	}
	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_ISSET_ISEMPTY_STATIC_PROP_SPEC_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *value;
	bool result;

	SAVE_OPLINE();

	value = zend_fetch_static_property_address(NULL, opline->extended_value & ~ZEND_ISEMPTY, BP_VAR_IS, 0 OPLINE_CC EXECUTE_DATA_CC);

	if (!(opline->extended_value & ZEND_ISEMPTY)) {
		result = value != NULL && Z_TYPE_P(value) > IS_NULL &&
		    (!Z_ISREF_P(value) || Z_TYPE_P(Z_REFVAL_P(value)) != IS_NULL);
	} else {
		result = value == NULL || !i_zend_is_true(value);
	}

	ZEND_VM_SMART_BRANCH(result, 1);
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_BEGIN_SILENCE_SPEC_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE

	ZVAL_LONG(EX_VAR(opline->result.var), EG(error_reporting));

	if (!E_HAS_ONLY_FATAL_ERRORS(EG(error_reporting))) {
		do {
			/* Do not silence fatal errors */
			EG(error_reporting) &= E_FATAL_ERRORS;
			if (!EG(error_reporting_ini_entry)) {
				zval *zv = zend_hash_find_known_hash(EG(ini_directives), ZSTR_KNOWN(ZEND_STR_ERROR_REPORTING));
				if (zv) {
					EG(error_reporting_ini_entry) = (zend_ini_entry *)Z_PTR_P(zv);
				} else {
					break;
				}
			}
			if (!EG(error_reporting_ini_entry)->modified) {
				if (!EG(modified_ini_directives)) {
					ALLOC_HASHTABLE(EG(modified_ini_directives));
					zend_hash_init(EG(modified_ini_directives), 8, NULL, NULL, 0);
				}
				if (EXPECTED(zend_hash_add_ptr(EG(modified_ini_directives), ZSTR_KNOWN(ZEND_STR_ERROR_REPORTING), EG(error_reporting_ini_entry)) != NULL)) {
					EG(error_reporting_ini_entry)->orig_value = EG(error_reporting_ini_entry)->value;
					EG(error_reporting_ini_entry)->orig_modifiable = EG(error_reporting_ini_entry)->modifiable;
					EG(error_reporting_ini_entry)->modified = 1;
				}
			}
		} while (0);
	}
	ZEND_VM_NEXT_OPCODE();
}

static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_EXT_STMT_SPEC_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE

	if (!EG(no_extensions)) {
		SAVE_OPLINE();
		zend_llist_apply_with_argument(&zend_extensions, (llist_apply_with_arg_func_t) zend_extension_statement_handler, execute_data);
		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
	}
	ZEND_VM_NEXT_OPCODE();
}

static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_EXT_FCALL_BEGIN_SPEC_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE

	if (!EG(no_extensions)) {
		SAVE_OPLINE();
		zend_llist_apply_with_argument(&zend_extensions, (llist_apply_with_arg_func_t) zend_extension_fcall_begin_handler, execute_data);
		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
	}
	ZEND_VM_NEXT_OPCODE();
}

static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_EXT_FCALL_END_SPEC_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE

	if (!EG(no_extensions)) {
		SAVE_OPLINE();
		zend_llist_apply_with_argument(&zend_extensions, (llist_apply_with_arg_func_t) zend_extension_fcall_end_handler, execute_data);
		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
	}
	ZEND_VM_NEXT_OPCODE();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_DECLARE_ANON_CLASS_SPEC_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	zval *zv;
	zend_class_entry *ce;
	USE_OPLINE

	ce = CACHED_PTR(opline->extended_value);
	if (UNEXPECTED(ce == NULL)) {
		zend_string *rtd_key = Z_STR_P(RT_CONSTANT(opline, opline->op1));
		zv = zend_hash_find_known_hash(EG(class_table), rtd_key);
		ZEND_ASSERT(zv != NULL);
		ce = Z_CE_P(zv);
		if (!(ce->ce_flags & ZEND_ACC_LINKED)) {
			SAVE_OPLINE();
			ce = zend_do_link_class(ce, (opline->op2_type == IS_CONST) ? Z_STR_P(RT_CONSTANT(opline, opline->op2)) : NULL, rtd_key);
			if (EG(exception)) {
				HANDLE_EXCEPTION();
			}
		}
		CACHE_PTR(opline->extended_value, ce);
	}
	Z_CE_P(EX_VAR(opline->result.var)) = ce;
	ZEND_VM_NEXT_OPCODE();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_DECLARE_FUNCTION_SPEC_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	zend_function *func;
	USE_OPLINE

	SAVE_OPLINE();
	func = (zend_function *) EX(func)->op_array.dynamic_func_defs[opline->op2.num];
	do_bind_function(func, RT_CONSTANT(opline, opline->op1));
	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_TICKS_SPEC_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE

	if ((uint32_t)++EG(ticks_count) >= opline->extended_value) {
		EG(ticks_count) = 0;
		if (zend_ticks_function) {
			SAVE_OPLINE();
			zend_fiber_switch_block();
			zend_ticks_function(opline->extended_value);
			zend_fiber_switch_unblock();
			ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
		}
	}
	ZEND_VM_NEXT_OPCODE();
}

static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_EXT_NOP_SPEC_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE

	ZEND_VM_NEXT_OPCODE();
}

static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_NOP_SPEC_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE

	ZEND_VM_NEXT_OPCODE();
}

static zend_never_inline ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV_EX  zend_dispatch_try_catch_finally_helper_SPEC_TAILCALL(ZEND_OPCODE_HANDLER_ARGS_EX uint32_t try_catch_offset, uint32_t op_num);
static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_HANDLE_EXCEPTION_SPEC_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	const zend_op *throw_op = EG(opline_before_exception);

	/* Exception was thrown before executing any op */
	if (UNEXPECTED(!throw_op)) {
		ZEND_VM_DISPATCH_TO_HELPER(zend_dispatch_try_catch_finally_helper_SPEC_TAILCALL(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_EX -1, 0));
	}

	uint32_t throw_op_num = throw_op - EX(func)->op_array.opcodes;
	int i, current_try_catch_offset = -1;

	if ((throw_op->opcode == ZEND_FREE || throw_op->opcode == ZEND_FE_FREE)
		&& throw_op->extended_value & ZEND_FREE_ON_RETURN) {
		/* exceptions thrown because of loop var destruction on return/break/...
		 * are logically thrown at the end of the foreach loop, so adjust the
		 * throw_op_num to the final loop variable FREE.
		 */
		uint32_t new_throw_op_num = throw_op_num + throw_op->op2.opline_num;
		cleanup_live_vars(execute_data, throw_op_num, new_throw_op_num);
		throw_op_num = new_throw_op_num;
	}

	/* Find the innermost try/catch/finally the exception was thrown in */
	for (i = 0; i < EX(func)->op_array.last_try_catch; i++) {
		zend_try_catch_element *try_catch = &EX(func)->op_array.try_catch_array[i];
		if (try_catch->try_op > throw_op_num) {
			/* further blocks will not be relevant... */
			break;
		}
		if (throw_op_num < try_catch->catch_op || throw_op_num < try_catch->finally_end) {
			current_try_catch_offset = i;
		}
	}

	cleanup_unfinished_calls(execute_data, throw_op_num);

	if (throw_op->result_type & (IS_VAR | IS_TMP_VAR)) {
		switch (throw_op->opcode) {
			case ZEND_ADD_ARRAY_ELEMENT:
			case ZEND_ADD_ARRAY_UNPACK:
			case ZEND_ROPE_INIT:
			case ZEND_ROPE_ADD:
				break; /* exception while building structures, live range handling will free those */

			case ZEND_FETCH_CLASS:
			case ZEND_DECLARE_ANON_CLASS:
				break; /* return value is zend_class_entry pointer */

			default:
				/* smart branch opcodes may not initialize result */
				if (!zend_is_smart_branch(throw_op)) {
					zval_ptr_dtor_nogc(EX_VAR(throw_op->result.var));
				}
		}
	}

	ZEND_VM_DISPATCH_TO_HELPER(zend_dispatch_try_catch_finally_helper_SPEC_TAILCALL(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_EX current_try_catch_offset, throw_op_num));
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_USER_OPCODE_SPEC_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	int ret;

	SAVE_OPLINE();
	ret = zend_user_opcode_handlers[opline->opcode](execute_data);
	opline = EX(opline);

	switch (ret) {
		case ZEND_USER_OPCODE_CONTINUE:
			ZEND_VM_CONTINUE();
		case ZEND_USER_OPCODE_RETURN:
			if (UNEXPECTED((EX_CALL_INFO() & ZEND_CALL_GENERATOR) != 0)) {
				zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C);
				EG(current_execute_data) = EX(prev_execute_data);
				zend_generator_close(generator, 1);
				ZEND_VM_RETURN();
			} else {
				ZEND_VM_DISPATCH_TO_LEAVE_HELPER(zend_leave_helper_SPEC_TAILCALL);
			}
		case ZEND_USER_OPCODE_ENTER:
			ZEND_VM_ENTER();
		case ZEND_USER_OPCODE_LEAVE:
			ZEND_VM_LEAVE();
		case ZEND_USER_OPCODE_DISPATCH:
			ZEND_VM_DISPATCH(opline->opcode, opline);
		default:
			ZEND_VM_DISPATCH((uint8_t)(ret & 0xff), opline);
	}
}

static zend_never_inline ZEND_COLD ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV  zend_yield_in_closed_generator_helper_SPEC_TAILCALL(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE

	SAVE_OPLINE();
	zend_throw_error(NULL, "Cannot yield from finally in a force-closed generator");
	FREE_OP(opline->op2_type, opline->op2.var);
	FREE_OP(opline->op1_type, opline->op1.var);
	UNDEF_RESULT();
	HANDLE_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_DISCARD_EXCEPTION_SPEC_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *fast_call = EX_VAR(opline->op1.var);
	SAVE_OPLINE();

	/* cleanup incomplete RETURN statement */
	if (Z_OPLINE_NUM_P(fast_call) != (uint32_t)-1
	 && (EX(func)->op_array.opcodes[Z_OPLINE_NUM_P(fast_call)].op2_type & (IS_TMP_VAR | IS_VAR))) {
		zval *return_value = EX_VAR(EX(func)->op_array.opcodes[Z_OPLINE_NUM_P(fast_call)].op2.var);

		zval_ptr_dtor(return_value);
		/* Clear return value in case we hit both DISCARD_EXCEPTION and
		 * zend_dispatch_try_catch_finally_helper, which will free the return
		 * value again. See OSS-Fuzz #438780145. */
		ZVAL_NULL(return_value);
	}

	/* cleanup delayed exception */
	if (Z_OBJ_P(fast_call) != NULL) {
		/* discard the previously thrown exception */
		OBJ_RELEASE(Z_OBJ_P(fast_call));
		Z_OBJ_P(fast_call) = NULL;
	}

	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_FAST_CALL_SPEC_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *fast_call = EX_VAR(opline->result.var);

	Z_OBJ_P(fast_call) = NULL;
	/* set return address */
	Z_OPLINE_NUM_P(fast_call) = opline - EX(func)->op_array.opcodes;
	ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op1), 0);
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_FAST_RET_SPEC_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *fast_call = EX_VAR(opline->op1.var);
	uint32_t current_try_catch_offset, current_op_num;

	if (Z_OPLINE_NUM_P(fast_call) != (uint32_t)-1) {
		const zend_op *fast_ret = EX(func)->op_array.opcodes + Z_OPLINE_NUM_P(fast_call);

		ZEND_VM_JMP_EX(fast_ret + 1, 0);
	}

	/* special case for unhandled exceptions */
	EG(exception) = Z_OBJ_P(fast_call);
	Z_OBJ_P(fast_call) = NULL;
	current_try_catch_offset = opline->op2.num;
	current_op_num = opline - EX(func)->op_array.opcodes;
	ZEND_VM_DISPATCH_TO_HELPER(zend_dispatch_try_catch_finally_helper_SPEC_TAILCALL(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_EX current_try_catch_offset, current_op_num));
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_ASSERT_CHECK_SPEC_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE

	if (EG(assertions) <= 0) {
		zend_op *target = OP_JMP_ADDR(opline, opline->op2);
		if (RETURN_VALUE_USED(opline)) {
			ZVAL_TRUE(EX_VAR(opline->result.var));
		}
		ZEND_VM_JMP_EX(target, 0);
	} else {
		ZEND_VM_NEXT_OPCODE();
	}
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_CALL_TRAMPOLINE_SPEC_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	zend_array *args = NULL;
	zend_function *fbc = EX(func);
	zval *ret = EX(return_value);
	uint32_t call_info = EX_CALL_INFO() & (ZEND_CALL_NESTED | ZEND_CALL_TOP | ZEND_CALL_RELEASE_THIS | ZEND_CALL_HAS_EXTRA_NAMED_PARAMS);
	uint32_t num_args = EX_NUM_ARGS();
	zend_execute_data *call;

	SAVE_OPLINE();

	if (num_args) {
		zval *p = ZEND_CALL_ARG(execute_data, 1);
		zval *end = p + num_args;

		args = zend_new_array(num_args);
		zend_hash_real_init_packed(args);
		ZEND_HASH_FILL_PACKED(args) {
			do {
				ZEND_HASH_FILL_ADD(p);
				p++;
			} while (p != end);
		} ZEND_HASH_FILL_END();
	}

	call = execute_data;
	execute_data = EG(current_execute_data) = EX(prev_execute_data);

	call->func = (fbc->op_array.fn_flags & ZEND_ACC_STATIC) ? fbc->op_array.scope->__callstatic : fbc->op_array.scope->__call;
	ZEND_ASSERT(zend_vm_calc_used_stack(2, call->func) <= (size_t)(((char*)EG(vm_stack_end)) - (char*)call));
	ZEND_CALL_NUM_ARGS(call) = 2;

	ZVAL_STR(ZEND_CALL_ARG(call, 1), fbc->common.function_name);

	zval *call_args = ZEND_CALL_ARG(call, 2);
	if (args) {
		ZVAL_ARR(call_args, args);
	} else {
		ZVAL_EMPTY_ARRAY(call_args);
	}
	if (UNEXPECTED(call_info & ZEND_CALL_HAS_EXTRA_NAMED_PARAMS)) {
		if (zend_hash_num_elements(Z_ARRVAL_P(call_args)) == 0) {
			GC_ADDREF(call->extra_named_params);
			ZVAL_ARR(call_args, call->extra_named_params);
		} else {
			SEPARATE_ARRAY(call_args);
			zend_hash_copy(Z_ARRVAL_P(call_args), call->extra_named_params, zval_add_ref);
		}
	}
	zend_free_trampoline(fbc);
	fbc = call->func;

	if (EXPECTED(fbc->type == ZEND_USER_FUNCTION)) {
		if (UNEXPECTED(!RUN_TIME_CACHE(&fbc->op_array))) {
			init_func_run_time_cache(&fbc->op_array);
		}
		execute_data = call;
		i_init_func_execute_data(&fbc->op_array, ret, 0 EXECUTE_DATA_CC);
		if (EXPECTED(zend_execute_ex == execute_ex)) {
			LOAD_OPLINE_EX();




			ZEND_VM_ENTER_EX();
		} else {
			SAVE_OPLINE_EX();


			execute_data = EX(prev_execute_data);
			if (execute_data) {
				LOAD_OPLINE();
			}
			ZEND_ADD_CALL_FLAG(call, ZEND_CALL_TOP);
			zend_execute_ex(call);
		}
	} else {
		zval retval;

		ZEND_ASSERT(fbc->type == ZEND_INTERNAL_FUNCTION);

		EG(current_execute_data) = call;

#if ZEND_DEBUG
		bool should_throw = zend_internal_call_should_throw(fbc, call);
#endif

		if (ret == NULL) {
			ret = &retval;
		}

		ZVAL_NULL(ret);


		if (!zend_execute_internal) {
			/* saves one function call if zend_execute_internal is not used */
			fbc->internal_function.handler(call, ret);
		} else {
			zend_execute_internal(call, ret);
		}

#if ZEND_DEBUG
		if (!EG(exception) && call->func) {
			if (should_throw) {
				zend_internal_call_arginfo_violation(call->func);
			}
			ZEND_ASSERT(!(call->func->common.fn_flags & ZEND_ACC_HAS_RETURN_TYPE) ||
				zend_verify_internal_return_type(call->func, ret));
			ZEND_ASSERT((call->func->common.fn_flags & ZEND_ACC_RETURN_REFERENCE)
				? Z_ISREF_P(ret) : !Z_ISREF_P(ret));
			zend_verify_internal_func_info(call->func, ret);
		}
#endif


		EG(current_execute_data) = call->prev_execute_data;

		zend_vm_stack_free_args(call);
		if (UNEXPECTED(call_info & ZEND_CALL_HAS_EXTRA_NAMED_PARAMS)) {
			zend_free_extra_named_params(call->extra_named_params);
		}
		if (ret == &retval) {
			zval_ptr_dtor(ret);
		}
	}

	execute_data = EG(current_execute_data);

	if (!execute_data || !EX(func) || !ZEND_USER_CODE(EX(func)->type) || (call_info & ZEND_CALL_TOP)) {
		ZEND_VM_RETURN();
	}

	if (UNEXPECTED(call_info & ZEND_CALL_RELEASE_THIS)) {
		zend_object *object = Z_OBJ(call->This);
		OBJ_RELEASE(object);
	}
	zend_vm_stack_free_call_frame(call);

	if (UNEXPECTED(EG(exception) != NULL)) {
		zend_rethrow_exception(execute_data);
		HANDLE_EXCEPTION_LEAVE();
	}

	LOAD_OPLINE();
	ZEND_VM_INC_OPCODE();
	ZEND_VM_LEAVE();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_CALL_TRAMPOLINE_SPEC_OBSERVER_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	zend_array *args = NULL;
	zend_function *fbc = EX(func);
	zval *ret = EX(return_value);
	uint32_t call_info = EX_CALL_INFO() & (ZEND_CALL_NESTED | ZEND_CALL_TOP | ZEND_CALL_RELEASE_THIS | ZEND_CALL_HAS_EXTRA_NAMED_PARAMS);
	uint32_t num_args = EX_NUM_ARGS();
	zend_execute_data *call;

	SAVE_OPLINE();

	if (num_args) {
		zval *p = ZEND_CALL_ARG(execute_data, 1);
		zval *end = p + num_args;

		args = zend_new_array(num_args);
		zend_hash_real_init_packed(args);
		ZEND_HASH_FILL_PACKED(args) {
			do {
				ZEND_HASH_FILL_ADD(p);
				p++;
			} while (p != end);
		} ZEND_HASH_FILL_END();
	}

	call = execute_data;
	execute_data = EG(current_execute_data) = EX(prev_execute_data);

	call->func = (fbc->op_array.fn_flags & ZEND_ACC_STATIC) ? fbc->op_array.scope->__callstatic : fbc->op_array.scope->__call;
	ZEND_ASSERT(zend_vm_calc_used_stack(2, call->func) <= (size_t)(((char*)EG(vm_stack_end)) - (char*)call));
	ZEND_CALL_NUM_ARGS(call) = 2;

	ZVAL_STR(ZEND_CALL_ARG(call, 1), fbc->common.function_name);

	zval *call_args = ZEND_CALL_ARG(call, 2);
	if (args) {
		ZVAL_ARR(call_args, args);
	} else {
		ZVAL_EMPTY_ARRAY(call_args);
	}
	if (UNEXPECTED(call_info & ZEND_CALL_HAS_EXTRA_NAMED_PARAMS)) {
		if (zend_hash_num_elements(Z_ARRVAL_P(call_args)) == 0) {
			GC_ADDREF(call->extra_named_params);
			ZVAL_ARR(call_args, call->extra_named_params);
		} else {
			SEPARATE_ARRAY(call_args);
			zend_hash_copy(Z_ARRVAL_P(call_args), call->extra_named_params, zval_add_ref);
		}
	}
	zend_free_trampoline(fbc);
	fbc = call->func;

	if (EXPECTED(fbc->type == ZEND_USER_FUNCTION)) {
		if (UNEXPECTED(!RUN_TIME_CACHE(&fbc->op_array))) {
			init_func_run_time_cache(&fbc->op_array);
		}
		execute_data = call;
		i_init_func_execute_data(&fbc->op_array, ret, 0 EXECUTE_DATA_CC);
		if (EXPECTED(zend_execute_ex == execute_ex)) {
			LOAD_OPLINE_EX();
			SAVE_OPLINE();
			zend_observer_fcall_begin_specialized(execute_data, false);
			ZEND_VM_ENTER_EX();
		} else {
			SAVE_OPLINE_EX();
			zend_observer_fcall_begin_specialized(execute_data, false);
			execute_data = EX(prev_execute_data);
			if (execute_data) {
				LOAD_OPLINE();
			}
			ZEND_ADD_CALL_FLAG(call, ZEND_CALL_TOP);
			zend_execute_ex(call);
		}
	} else {
		zval retval;

		ZEND_ASSERT(fbc->type == ZEND_INTERNAL_FUNCTION);

		EG(current_execute_data) = call;

#if ZEND_DEBUG
		bool should_throw = zend_internal_call_should_throw(fbc, call);
#endif

		if (ret == NULL) {
			ret = &retval;
		}

		ZVAL_NULL(ret);
		zend_observer_fcall_begin_specialized(call, false);
		if (!zend_execute_internal) {
			/* saves one function call if zend_execute_internal is not used */
			fbc->internal_function.handler(call, ret);
		} else {
			zend_execute_internal(call, ret);
		}

#if ZEND_DEBUG
		if (!EG(exception) && call->func) {
			if (should_throw) {
				zend_internal_call_arginfo_violation(call->func);
			}
			ZEND_ASSERT(!(call->func->common.fn_flags & ZEND_ACC_HAS_RETURN_TYPE) ||
				zend_verify_internal_return_type(call->func, ret));
			ZEND_ASSERT((call->func->common.fn_flags & ZEND_ACC_RETURN_REFERENCE)
				? Z_ISREF_P(ret) : !Z_ISREF_P(ret));
			zend_verify_internal_func_info(call->func, ret);
		}
#endif
		zend_observer_fcall_end(call, EG(exception) ? NULL : ret);

		EG(current_execute_data) = call->prev_execute_data;

		zend_vm_stack_free_args(call);
		if (UNEXPECTED(call_info & ZEND_CALL_HAS_EXTRA_NAMED_PARAMS)) {
			zend_free_extra_named_params(call->extra_named_params);
		}
		if (ret == &retval) {
			zval_ptr_dtor(ret);
		}
	}

	execute_data = EG(current_execute_data);

	if (!execute_data || !EX(func) || !ZEND_USER_CODE(EX(func)->type) || (call_info & ZEND_CALL_TOP)) {
		ZEND_VM_RETURN();
	}

	if (UNEXPECTED(call_info & ZEND_CALL_RELEASE_THIS)) {
		zend_object *object = Z_OBJ(call->This);
		OBJ_RELEASE(object);
	}
	zend_vm_stack_free_call_frame(call);

	if (UNEXPECTED(EG(exception) != NULL)) {
		zend_rethrow_exception(execute_data);
		HANDLE_EXCEPTION_LEAVE();
	}

	LOAD_OPLINE();
	ZEND_VM_INC_OPCODE();
	ZEND_VM_LEAVE();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_FRAMELESS_ICALL_2_SPEC_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	SAVE_OPLINE();

	zval *result = EX_VAR(opline->result.var);
	ZVAL_NULL(result);
	zval *arg1 = get_zval_ptr_deref(opline->op1_type, opline->op1, BP_VAR_R);
	zval *arg2 = get_zval_ptr_deref(opline->op2_type, opline->op2, BP_VAR_R);
	if (EG(exception)) {
		FREE_OP(opline->op1_type, opline->op1.var);
		FREE_OP(opline->op2_type, opline->op2.var);
		HANDLE_EXCEPTION();
	}

#if 0 || 0
	if (0 && UNEXPECTED(zend_observer_handler_is_unobserved(ZEND_OBSERVER_DATA(ZEND_FLF_FUNC(opline))) == false)) {
		zend_frameless_observed_call(execute_data);
	} else
#endif
	{
		zend_frameless_function_2 function = (zend_frameless_function_2)ZEND_FLF_HANDLER(opline);
		function(result, arg1, arg2);
	}

	FREE_OP(opline->op1_type, opline->op1.var);
	/* Set OP1 to UNDEF in case FREE_OP(opline->op2_type, opline->op2.var) throws. */
	if (opline->op1_type & (IS_VAR|IS_TMP_VAR)) {
		ZVAL_UNDEF(EX_VAR(opline->op1.var));
	}
	FREE_OP(opline->op2_type, opline->op2.var);
	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_FRAMELESS_ICALL_2_SPEC_OBSERVER_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	SAVE_OPLINE();

	zval *result = EX_VAR(opline->result.var);
	ZVAL_NULL(result);
	zval *arg1 = get_zval_ptr_deref(opline->op1_type, opline->op1, BP_VAR_R);
	zval *arg2 = get_zval_ptr_deref(opline->op2_type, opline->op2, BP_VAR_R);
	if (EG(exception)) {
		FREE_OP(opline->op1_type, opline->op1.var);
		FREE_OP(opline->op2_type, opline->op2.var);
		HANDLE_EXCEPTION();
	}

#if 0 || 1
	if (1 && UNEXPECTED(zend_observer_handler_is_unobserved(ZEND_OBSERVER_DATA(ZEND_FLF_FUNC(opline))) == false)) {
		zend_frameless_observed_call(execute_data);
	} else
#endif
	{
		zend_frameless_function_2 function = (zend_frameless_function_2)ZEND_FLF_HANDLER(opline);
		function(result, arg1, arg2);
	}

	FREE_OP(opline->op1_type, opline->op1.var);
	/* Set OP1 to UNDEF in case FREE_OP(opline->op2_type, opline->op2.var) throws. */
	if (opline->op1_type & (IS_VAR|IS_TMP_VAR)) {
		ZVAL_UNDEF(EX_VAR(opline->op1.var));
	}
	FREE_OP(opline->op2_type, opline->op2.var);
	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_FRAMELESS_ICALL_3_SPEC_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	SAVE_OPLINE();

	zval *result = EX_VAR(opline->result.var);
	ZVAL_NULL(result);
	zval *arg1 = get_zval_ptr_deref(opline->op1_type, opline->op1, BP_VAR_R);
	zval *arg2 = get_zval_ptr_deref(opline->op2_type, opline->op2, BP_VAR_R);
	zval *arg3 = get_op_data_zval_ptr_deref_r((opline+1)->op1_type, (opline+1)->op1);
	if (EG(exception)) {
		FREE_OP(opline->op1_type, opline->op1.var);
		FREE_OP(opline->op2_type, opline->op2.var);
		FREE_OP((opline+1)->op1_type, (opline+1)->op1.var);
		HANDLE_EXCEPTION();
	}

#if 0 || 0
	if (0 && UNEXPECTED(zend_observer_handler_is_unobserved(ZEND_OBSERVER_DATA(ZEND_FLF_FUNC(opline))) == false)) {
		zend_frameless_observed_call(execute_data);
	} else
#endif
	{
		zend_frameless_function_3 function = (zend_frameless_function_3)ZEND_FLF_HANDLER(opline);
		function(result, arg1, arg2, arg3);
	}

	FREE_OP(opline->op1_type, opline->op1.var);
	/* Set to UNDEF in case FREE_OP(opline->op2_type, opline->op2.var) throws. */
	if (opline->op1_type & (IS_VAR|IS_TMP_VAR)) {
		ZVAL_UNDEF(EX_VAR(opline->op1.var));
	}
	FREE_OP(opline->op2_type, opline->op2.var);
	if (opline->op2_type & (IS_VAR|IS_TMP_VAR)) {
		ZVAL_UNDEF(EX_VAR(opline->op2.var));
	}
	FREE_OP((opline+1)->op1_type, (opline+1)->op1.var);
	ZEND_VM_NEXT_OPCODE_EX(1, 2);
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_FRAMELESS_ICALL_3_SPEC_OBSERVER_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	SAVE_OPLINE();

	zval *result = EX_VAR(opline->result.var);
	ZVAL_NULL(result);
	zval *arg1 = get_zval_ptr_deref(opline->op1_type, opline->op1, BP_VAR_R);
	zval *arg2 = get_zval_ptr_deref(opline->op2_type, opline->op2, BP_VAR_R);
	zval *arg3 = get_op_data_zval_ptr_deref_r((opline+1)->op1_type, (opline+1)->op1);
	if (EG(exception)) {
		FREE_OP(opline->op1_type, opline->op1.var);
		FREE_OP(opline->op2_type, opline->op2.var);
		FREE_OP((opline+1)->op1_type, (opline+1)->op1.var);
		HANDLE_EXCEPTION();
	}

#if 0 || 1
	if (1 && UNEXPECTED(zend_observer_handler_is_unobserved(ZEND_OBSERVER_DATA(ZEND_FLF_FUNC(opline))) == false)) {
		zend_frameless_observed_call(execute_data);
	} else
#endif
	{
		zend_frameless_function_3 function = (zend_frameless_function_3)ZEND_FLF_HANDLER(opline);
		function(result, arg1, arg2, arg3);
	}

	FREE_OP(opline->op1_type, opline->op1.var);
	/* Set to UNDEF in case FREE_OP(opline->op2_type, opline->op2.var) throws. */
	if (opline->op1_type & (IS_VAR|IS_TMP_VAR)) {
		ZVAL_UNDEF(EX_VAR(opline->op1.var));
	}
	FREE_OP(opline->op2_type, opline->op2.var);
	if (opline->op2_type & (IS_VAR|IS_TMP_VAR)) {
		ZVAL_UNDEF(EX_VAR(opline->op2.var));
	}
	FREE_OP((opline+1)->op1_type, (opline+1)->op1.var);
	ZEND_VM_NEXT_OPCODE_EX(1, 2);
}

static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_JMP_FORWARD_SPEC_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE

	OPLINE = OP_JMP_ADDR(opline, opline->op1);
	ZEND_VM_CONTINUE();
}

static zend_never_inline ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV  zend_interrupt_helper_SPEC_TAILCALL(ZEND_OPCODE_HANDLER_ARGS)
{
	zend_atomic_bool_store_ex(&EG(vm_interrupt), false);
	SAVE_OPLINE();
	if (zend_atomic_bool_load_ex(&EG(timed_out))) {
		zend_timeout();
	} else if (zend_interrupt_function) {
		zend_interrupt_function(execute_data);
		if (EG(exception)) {
			/* We have to UNDEF result, because ZEND_HANDLE_EXCEPTION is going to free it */
			const zend_op *throw_op = EG(opline_before_exception);

			if (throw_op
			 && throw_op->result_type & (IS_TMP_VAR|IS_VAR)
			 && throw_op->opcode != ZEND_ADD_ARRAY_ELEMENT
			 && throw_op->opcode != ZEND_ADD_ARRAY_UNPACK
			 && throw_op->opcode != ZEND_ROPE_INIT
			 && throw_op->opcode != ZEND_ROPE_ADD) {
				ZVAL_UNDEF(ZEND_CALL_VAR(EG(current_execute_data), throw_op->result.var));

			}
		}
		ZEND_VM_ENTER();
	}
	ZEND_VM_CONTINUE();
}
static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_INIT_FCALL_BY_NAME_SPEC_CONST_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zend_function *fbc;
	zval *function_name, *func;
	zend_execute_data *call;

	fbc = CACHED_PTR(opline->result.num);
	if (UNEXPECTED(fbc == NULL)) {
		function_name = (zval*)RT_CONSTANT(opline, opline->op2);
		func = zend_hash_find_known_hash(EG(function_table), Z_STR_P(function_name+1));
		if (UNEXPECTED(func == NULL)) {
			ZEND_VM_TAIL_CALL(zend_undefined_function_helper_SPEC_TAILCALL(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
		}
		fbc = Z_FUNC_P(func);
		if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!RUN_TIME_CACHE(&fbc->op_array))) {
			init_func_run_time_cache(&fbc->op_array);
		}
		CACHE_PTR(opline->result.num, fbc);
	}
	call = _zend_vm_stack_push_call_frame(ZEND_CALL_NESTED_FUNCTION,
		fbc, opline->extended_value, NULL);
	call->prev_execute_data = EX(call);
	EX(call) = call;

	ZEND_VM_NEXT_OPCODE();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_INIT_DYNAMIC_CALL_SPEC_CONST_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *function_name;
	zend_execute_data *call;

	SAVE_OPLINE();
	function_name = RT_CONSTANT(opline, opline->op2);

try_function_name:
	if (IS_CONST != IS_CONST && EXPECTED(Z_TYPE_P(function_name) == IS_STRING)) {
		call = zend_init_dynamic_call_string(Z_STR_P(function_name), opline->extended_value);
	} else if (IS_CONST != IS_CONST && EXPECTED(Z_TYPE_P(function_name) == IS_OBJECT)) {
		call = zend_init_dynamic_call_object(Z_OBJ_P(function_name), opline->extended_value);
	} else if (EXPECTED(Z_TYPE_P(function_name) == IS_ARRAY)) {
		call = zend_init_dynamic_call_array(Z_ARRVAL_P(function_name), opline->extended_value);
	} else if ((IS_CONST & (IS_VAR|IS_CV)) && EXPECTED(Z_TYPE_P(function_name) == IS_REFERENCE)) {
		function_name = Z_REFVAL_P(function_name);
		goto try_function_name;
	} else {
		if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) {
			function_name = ZVAL_UNDEFINED_OP2();
			if (UNEXPECTED(EG(exception) != NULL)) {
				HANDLE_EXCEPTION();
			}
		}
		zend_throw_error(NULL, "Value of type %s is not callable",
			zend_zval_type_name(function_name));
		call = NULL;
	}

	if (IS_CONST & (IS_VAR|IS_TMP_VAR)) {


		if (UNEXPECTED(EG(exception))) {
			if (call) {
				 if (call->func->common.fn_flags & ZEND_ACC_CALL_VIA_TRAMPOLINE) {
					zend_string_release_ex(call->func->common.function_name, 0);
					zend_free_trampoline(call->func);
				}
				zend_vm_stack_free_call_frame(call);
			}
			HANDLE_EXCEPTION();
		}
	} else if (!call) {
		HANDLE_EXCEPTION();
	}

	call->prev_execute_data = EX(call);
	EX(call) = call;

	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_INIT_NS_FCALL_BY_NAME_SPEC_CONST_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *func_name;
	zval *func;
	zend_function *fbc;
	zend_execute_data *call;

	fbc = CACHED_PTR(opline->result.num);
	if (UNEXPECTED(fbc == NULL)) {
		func_name = (zval *)RT_CONSTANT(opline, opline->op2);
		func = zend_hash_find_known_hash(EG(function_table), Z_STR_P(func_name + 1));
		if (func == NULL) {
			func = zend_hash_find_known_hash(EG(function_table), Z_STR_P(func_name + 2));
			if (UNEXPECTED(func == NULL)) {
				ZEND_VM_TAIL_CALL(zend_undefined_function_helper_SPEC_TAILCALL(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
			}
		}
		fbc = Z_FUNC_P(func);
		if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!RUN_TIME_CACHE(&fbc->op_array))) {
			init_func_run_time_cache(&fbc->op_array);
		}
		CACHE_PTR(opline->result.num, fbc);
	}

	call = _zend_vm_stack_push_call_frame(ZEND_CALL_NESTED_FUNCTION,
		fbc, opline->extended_value, NULL);
	call->prev_execute_data = EX(call);
	EX(call) = call;

	ZEND_VM_NEXT_OPCODE();
}

static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_INIT_FCALL_SPEC_CONST_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *fname;
	zval *func;
	zend_function *fbc;
	zend_execute_data *call;

	fbc = CACHED_PTR(opline->result.num);
	if (UNEXPECTED(fbc == NULL)) {
		fname = (zval*)RT_CONSTANT(opline, opline->op2);
		func = zend_hash_find_known_hash(EG(function_table), Z_STR_P(fname));
		ZEND_ASSERT(func != NULL && "Function existence must be checked at compile time");
		fbc = Z_FUNC_P(func);
		if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!RUN_TIME_CACHE(&fbc->op_array))) {
			init_func_run_time_cache(&fbc->op_array);
		}
		CACHE_PTR(opline->result.num, fbc);
	}

	call = _zend_vm_stack_push_call_frame_ex(
		opline->op1.num, ZEND_CALL_NESTED_FUNCTION,
		fbc, opline->extended_value, NULL);
	call->prev_execute_data = EX(call);
	EX(call) = call;

	ZEND_VM_NEXT_OPCODE();
}

static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_INIT_FCALL_OFFSET_SPEC_CONST_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zend_function *fbc;
	zend_execute_data *call;
	fbc = CACHED_PTR(opline->result.num);
	if (UNEXPECTED(fbc == NULL)) {
		fbc = Z_PTR(EG(function_table)->arData[Z_EXTRA_P(RT_CONSTANT(opline, opline->op2))].val);
		CACHE_PTR(opline->result.num, fbc);
	}
	call = _zend_vm_stack_push_call_frame_ex(
		opline->op1.num, ZEND_CALL_NESTED_FUNCTION,
		fbc, opline->extended_value, NULL);
	call->prev_execute_data = EX(call);
	EX(call) = call;
	ZEND_VM_NEXT_OPCODE();
}

static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_RECV_INIT_SPEC_CONST_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	uint32_t arg_num;
	zval *param;

	ZEND_VM_REPEATABLE_OPCODE

	arg_num = opline->op1.num;
	param = EX_VAR(opline->result.var);
	if (arg_num > EX_NUM_ARGS()) {
		zval *default_value = RT_CONSTANT(opline, opline->op2);

		if (Z_OPT_TYPE_P(default_value) == IS_CONSTANT_AST) {
			zval *cache_val = (zval*)CACHE_ADDR(Z_CACHE_SLOT_P(default_value));

			/* we keep in cache only not refcounted values */
			if (Z_TYPE_P(cache_val) != IS_UNDEF) {
				ZVAL_COPY_VALUE(param, cache_val);
			} else {
				SAVE_OPLINE();
				ZVAL_COPY(param, default_value);
				zend_ast_evaluate_ctx ctx = {0};
				if (UNEXPECTED(zval_update_constant_with_ctx(param, EX(func)->op_array.scope, &ctx) != SUCCESS)) {
					zval_ptr_dtor_nogc(param);
					ZVAL_UNDEF(param);
					HANDLE_EXCEPTION();
				}
				if (!Z_REFCOUNTED_P(param) && !ctx.had_side_effects) {
					ZVAL_COPY_VALUE(cache_val, param);
				}
			}
			goto recv_init_check_type;
		} else {
			ZVAL_COPY(param, default_value);
		}
	} else {
recv_init_check_type:
		if ((EX(func)->op_array.fn_flags & ZEND_ACC_HAS_TYPE_HINTS) != 0) {
			SAVE_OPLINE();
			if (UNEXPECTED(!zend_verify_recv_arg_type(EX(func), arg_num, param))) {
				HANDLE_EXCEPTION();
			}
		}
	}

	ZEND_VM_REPEAT_OPCODE(ZEND_RECV_INIT);
	ZEND_VM_NEXT_OPCODE();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_INIT_DYNAMIC_CALL_SPEC_TMPVAR_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *function_name;
	zend_execute_data *call;

	SAVE_OPLINE();
	function_name = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);

try_function_name:
	if ((IS_TMP_VAR|IS_VAR) != IS_CONST && EXPECTED(Z_TYPE_P(function_name) == IS_STRING)) {
		call = zend_init_dynamic_call_string(Z_STR_P(function_name), opline->extended_value);
	} else if ((IS_TMP_VAR|IS_VAR) != IS_CONST && EXPECTED(Z_TYPE_P(function_name) == IS_OBJECT)) {
		call = zend_init_dynamic_call_object(Z_OBJ_P(function_name), opline->extended_value);
	} else if (EXPECTED(Z_TYPE_P(function_name) == IS_ARRAY)) {
		call = zend_init_dynamic_call_array(Z_ARRVAL_P(function_name), opline->extended_value);
	} else if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && EXPECTED(Z_TYPE_P(function_name) == IS_REFERENCE)) {
		function_name = Z_REFVAL_P(function_name);
		goto try_function_name;
	} else {
		if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) {
			function_name = ZVAL_UNDEFINED_OP2();
			if (UNEXPECTED(EG(exception) != NULL)) {
				HANDLE_EXCEPTION();
			}
		}
		zend_throw_error(NULL, "Value of type %s is not callable",
			zend_zval_type_name(function_name));
		call = NULL;
	}

	if ((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_TMP_VAR)) {
		zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
		if (UNEXPECTED(EG(exception))) {
			if (call) {
				 if (call->func->common.fn_flags & ZEND_ACC_CALL_VIA_TRAMPOLINE) {
					zend_string_release_ex(call->func->common.function_name, 0);
					zend_free_trampoline(call->func);
				}
				zend_vm_stack_free_call_frame(call);
			}
			HANDLE_EXCEPTION();
		}
	} else if (!call) {
		HANDLE_EXCEPTION();
	}

	call->prev_execute_data = EX(call);
	EX(call) = call;

	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_RECV_SPEC_UNUSED_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	uint32_t arg_num = opline->op1.num;
	zval *param;

	if (UNEXPECTED(arg_num > EX_NUM_ARGS())) {
		ZEND_VM_TAIL_CALL(zend_missing_arg_helper_SPEC_TAILCALL(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
	}

	param = EX_VAR(opline->result.var);

	if (UNEXPECTED(!(opline->op2.num & (1u << Z_TYPE_P(param))))) {
		ZEND_VM_DISPATCH_TO_HELPER(zend_verify_recv_arg_type_helper_SPEC_TAILCALL(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_EX param));
	}

	ZEND_VM_NEXT_OPCODE();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_RECV_VARIADIC_SPEC_UNUSED_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	uint32_t arg_num = opline->op1.num;
	uint32_t arg_count = EX_NUM_ARGS();
	zval *params;

	SAVE_OPLINE();

	params = EX_VAR(opline->result.var);

	if (arg_num <= arg_count) {
		ZEND_ASSERT(EX(func)->common.fn_flags & ZEND_ACC_VARIADIC);
		ZEND_ASSERT(EX(func)->common.num_args == arg_num - 1);
		zend_arg_info *arg_info = &EX(func)->common.arg_info[arg_num - 1];

		array_init_size(params, arg_count - arg_num + 1);
		zend_hash_real_init_packed(Z_ARRVAL_P(params));
		ZEND_HASH_FILL_PACKED(Z_ARRVAL_P(params)) {
			zval *param = EX_VAR_NUM(EX(func)->op_array.last_var + EX(func)->op_array.T);
			if (ZEND_TYPE_IS_SET(arg_info->type)) {
				ZEND_ADD_CALL_FLAG(execute_data, ZEND_CALL_FREE_EXTRA_ARGS);
				do {
					if (UNEXPECTED(!zend_verify_variadic_arg_type(EX(func), arg_info, arg_num, param))) {
						ZEND_HASH_FILL_FINISH();
						HANDLE_EXCEPTION();
					}

					if (Z_OPT_REFCOUNTED_P(param)) Z_ADDREF_P(param);
					ZEND_HASH_FILL_ADD(param);
					param++;
				} while (++arg_num <= arg_count);
			} else {
				do {
					if (Z_OPT_REFCOUNTED_P(param)) Z_ADDREF_P(param);
					ZEND_HASH_FILL_ADD(param);
					param++;
				} while (++arg_num <= arg_count);
			}
		} ZEND_HASH_FILL_END();
	} else {
		ZVAL_EMPTY_ARRAY(params);
	}

	if (EX_CALL_INFO() & ZEND_CALL_HAS_EXTRA_NAMED_PARAMS) {
		zend_string *name;
		zval *param;
		zend_arg_info *arg_info = &EX(func)->common.arg_info[EX(func)->common.num_args];
		if (ZEND_TYPE_IS_SET(arg_info->type)) {
			SEPARATE_ARRAY(params);
			ZEND_HASH_MAP_FOREACH_STR_KEY_VAL(EX(extra_named_params), name, param) {
				if (UNEXPECTED(!zend_verify_variadic_arg_type(EX(func), arg_info, arg_num, param))) {
					HANDLE_EXCEPTION();
				}
				Z_TRY_ADDREF_P(param);
				zend_hash_add_new(Z_ARRVAL_P(params), name, param);
			} ZEND_HASH_FOREACH_END();
		} else if (zend_hash_num_elements(Z_ARRVAL_P(params)) == 0) {
			GC_ADDREF(EX(extra_named_params));
			ZVAL_ARR(params, EX(extra_named_params));
		} else {
			SEPARATE_ARRAY(params);
			ZEND_HASH_MAP_FOREACH_STR_KEY_VAL(EX(extra_named_params), name, param) {
				Z_TRY_ADDREF_P(param);
				zend_hash_add_new(Z_ARRVAL_P(params), name, param);
			} ZEND_HASH_FOREACH_END();
		}
	}

	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_FRAMELESS_ICALL_1_SPEC_UNUSED_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	SAVE_OPLINE();

	zval *result = EX_VAR(opline->result.var);
	ZVAL_NULL(result);
	zval *arg1 = get_zval_ptr_deref(opline->op1_type, opline->op1, BP_VAR_R);
	if (EG(exception)) {
		FREE_OP(opline->op1_type, opline->op1.var);
		HANDLE_EXCEPTION();
	}

#if 0 || 0
	if (0 && UNEXPECTED(zend_observer_handler_is_unobserved(ZEND_OBSERVER_DATA(ZEND_FLF_FUNC(opline))) == false)) {
		zend_frameless_observed_call(execute_data);
	} else
#endif
	{
		zend_frameless_function_1 function = (zend_frameless_function_1)ZEND_FLF_HANDLER(opline);
		function(result, arg1);
	}
	FREE_OP(opline->op1_type, opline->op1.var);
	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_FRAMELESS_ICALL_1_SPEC_OBSERVER_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	SAVE_OPLINE();

	zval *result = EX_VAR(opline->result.var);
	ZVAL_NULL(result);
	zval *arg1 = get_zval_ptr_deref(opline->op1_type, opline->op1, BP_VAR_R);
	if (EG(exception)) {
		FREE_OP(opline->op1_type, opline->op1.var);
		HANDLE_EXCEPTION();
	}

#if 0 || 1
	if (1 && UNEXPECTED(zend_observer_handler_is_unobserved(ZEND_OBSERVER_DATA(ZEND_FLF_FUNC(opline))) == false)) {
		zend_frameless_observed_call(execute_data);
	} else
#endif
	{
		zend_frameless_function_1 function = (zend_frameless_function_1)ZEND_FLF_HANDLER(opline);
		function(result, arg1);
	}
	FREE_OP(opline->op1_type, opline->op1.var);
	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_INIT_DYNAMIC_CALL_SPEC_CV_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *function_name;
	zend_execute_data *call;

	SAVE_OPLINE();
	function_name = EX_VAR(opline->op2.var);

try_function_name:
	if (IS_CV != IS_CONST && EXPECTED(Z_TYPE_P(function_name) == IS_STRING)) {
		call = zend_init_dynamic_call_string(Z_STR_P(function_name), opline->extended_value);
	} else if (IS_CV != IS_CONST && EXPECTED(Z_TYPE_P(function_name) == IS_OBJECT)) {
		call = zend_init_dynamic_call_object(Z_OBJ_P(function_name), opline->extended_value);
	} else if (EXPECTED(Z_TYPE_P(function_name) == IS_ARRAY)) {
		call = zend_init_dynamic_call_array(Z_ARRVAL_P(function_name), opline->extended_value);
	} else if ((IS_CV & (IS_VAR|IS_CV)) && EXPECTED(Z_TYPE_P(function_name) == IS_REFERENCE)) {
		function_name = Z_REFVAL_P(function_name);
		goto try_function_name;
	} else {
		if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) {
			function_name = ZVAL_UNDEFINED_OP2();
			if (UNEXPECTED(EG(exception) != NULL)) {
				HANDLE_EXCEPTION();
			}
		}
		zend_throw_error(NULL, "Value of type %s is not callable",
			zend_zval_type_name(function_name));
		call = NULL;
	}

	if (IS_CV & (IS_VAR|IS_TMP_VAR)) {


		if (UNEXPECTED(EG(exception))) {
			if (call) {
				 if (call->func->common.fn_flags & ZEND_ACC_CALL_VIA_TRAMPOLINE) {
					zend_string_release_ex(call->func->common.function_name, 0);
					zend_free_trampoline(call->func);
				}
				zend_vm_stack_free_call_frame(call);
			}
			HANDLE_EXCEPTION();
		}
	} else if (!call) {
		HANDLE_EXCEPTION();
	}

	call->prev_execute_data = EX(call);
	EX(call) = call;

	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_BW_NOT_SPEC_CONST_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1;

	op1 = RT_CONSTANT(opline, opline->op1);
	if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
		ZVAL_LONG(EX_VAR(opline->result.var), ~Z_LVAL_P(op1));
		ZEND_VM_NEXT_OPCODE();
	}

	ZEND_VM_DISPATCH_TO_HELPER(zend_bw_not_helper_SPEC_TAILCALL(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_EX op1));
}

static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_BOOL_NOT_SPEC_CONST_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *val;

	val = RT_CONSTANT(opline, opline->op1);
	if (Z_TYPE_INFO_P(val) == IS_TRUE) {
		ZVAL_FALSE(EX_VAR(opline->result.var));
	} else if (EXPECTED(Z_TYPE_INFO_P(val) <= IS_TRUE)) {
		/* The result and op1 can be the same cv zval */
		const uint32_t orig_val_type = Z_TYPE_INFO_P(val);
		ZVAL_TRUE(EX_VAR(opline->result.var));
		if (IS_CONST == IS_CV && UNEXPECTED(orig_val_type == IS_UNDEF)) {
			SAVE_OPLINE();
			ZVAL_UNDEFINED_OP1();
			ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
		}
	} else {
		SAVE_OPLINE();
		ZVAL_BOOL(EX_VAR(opline->result.var), !i_zend_is_true(val));


		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
	}
	ZEND_VM_NEXT_OPCODE();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_ECHO_SPEC_CONST_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *z;

	SAVE_OPLINE();
	z = RT_CONSTANT(opline, opline->op1);

	if (Z_TYPE_P(z) == IS_STRING) {
		zend_string *str = Z_STR_P(z);

		if (ZSTR_LEN(str) != 0) {
			zend_write(ZSTR_VAL(str), ZSTR_LEN(str));
		}
	} else {
		zend_string *str = zval_get_string_func(z);

		if (ZSTR_LEN(str) != 0) {
			zend_write(ZSTR_VAL(str), ZSTR_LEN(str));
		} else if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(z) == IS_UNDEF)) {
			ZVAL_UNDEFINED_OP1();
		}
		zend_string_release_ex(str, 0);
	}


	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_JMPZ_SPEC_CONST_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *val;
	uint8_t op1_type;

	val = RT_CONSTANT(opline, opline->op1);

	if (Z_TYPE_INFO_P(val) == IS_TRUE) {
		ZEND_VM_NEXT_OPCODE();
	} else if (EXPECTED(Z_TYPE_INFO_P(val) <= IS_TRUE)) {
		if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(val) == IS_UNDEF)) {
			SAVE_OPLINE();
			ZVAL_UNDEFINED_OP1();
			if (UNEXPECTED(EG(exception))) {
				HANDLE_EXCEPTION();
			}
		}
		ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0);
	}

	SAVE_OPLINE();
	op1_type = IS_CONST;
	if (i_zend_is_true(val)) {
		opline++;
	} else {
		opline = OP_JMP_ADDR(opline, opline->op2);
	}
	if (op1_type & (IS_TMP_VAR|IS_VAR)) {
		zval_ptr_dtor_nogc(val);
	}
	ZEND_VM_JMP(opline);
}

static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_JMPNZ_SPEC_CONST_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *val;
	uint8_t op1_type;

	val = RT_CONSTANT(opline, opline->op1);

	if (Z_TYPE_INFO_P(val) == IS_TRUE) {
		ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0);
	} else if (EXPECTED(Z_TYPE_INFO_P(val) <= IS_TRUE)) {
		if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(val) == IS_UNDEF)) {
			SAVE_OPLINE();
			ZVAL_UNDEFINED_OP1();
			if (UNEXPECTED(EG(exception))) {
				HANDLE_EXCEPTION();
			}
		}
		ZEND_VM_NEXT_OPCODE();
	}

	SAVE_OPLINE();
	op1_type = IS_CONST;
	if (i_zend_is_true(val)) {
		opline = OP_JMP_ADDR(opline, opline->op2);
	} else {
		opline++;
	}
	if (op1_type & (IS_TMP_VAR|IS_VAR)) {
		zval_ptr_dtor_nogc(val);
	}
	ZEND_VM_JMP(opline);
}

static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_JMPZ_EX_SPEC_CONST_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *val;
	bool ret;

	val = RT_CONSTANT(opline, opline->op1);

	if (Z_TYPE_INFO_P(val) == IS_TRUE) {
		ZVAL_TRUE(EX_VAR(opline->result.var));
		ZEND_VM_NEXT_OPCODE();
	} else if (EXPECTED(Z_TYPE_INFO_P(val) <= IS_TRUE)) {
		ZVAL_FALSE(EX_VAR(opline->result.var));
		if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(val) == IS_UNDEF)) {
			SAVE_OPLINE();
			ZVAL_UNDEFINED_OP1();
			if (UNEXPECTED(EG(exception))) {
				HANDLE_EXCEPTION();
			}
		}
		ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0);
	}

	SAVE_OPLINE();
	ret = i_zend_is_true(val);


	if (ret) {
		ZVAL_TRUE(EX_VAR(opline->result.var));
		opline++;
	} else {
		ZVAL_FALSE(EX_VAR(opline->result.var));
		opline = OP_JMP_ADDR(opline, opline->op2);
	}
	ZEND_VM_JMP(opline);
}

static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_JMPNZ_EX_SPEC_CONST_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *val;
	bool ret;

	val = RT_CONSTANT(opline, opline->op1);

	if (Z_TYPE_INFO_P(val) == IS_TRUE) {
		ZVAL_TRUE(EX_VAR(opline->result.var));
		ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0);
	} else if (EXPECTED(Z_TYPE_INFO_P(val) <= IS_TRUE)) {
		ZVAL_FALSE(EX_VAR(opline->result.var));
		if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(val) == IS_UNDEF)) {
			SAVE_OPLINE();
			ZVAL_UNDEFINED_OP1();
			ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
		} else {
			ZEND_VM_NEXT_OPCODE();
		}
	}

	SAVE_OPLINE();
	ret = i_zend_is_true(val);


	if (ret) {
		ZVAL_TRUE(EX_VAR(opline->result.var));
		opline = OP_JMP_ADDR(opline, opline->op2);
	} else {
		ZVAL_FALSE(EX_VAR(opline->result.var));
		opline++;
	}
	ZEND_VM_JMP(opline);
}

static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_RETURN_SPEC_CONST_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *retval_ptr;
	zval *return_value;


	retval_ptr = RT_CONSTANT(opline, opline->op1);
	return_value = EX(return_value);


	if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(retval_ptr) == IS_UNDEF)) {
		SAVE_OPLINE();
		retval_ptr = ZVAL_UNDEFINED_OP1();
		if (return_value) {
			ZVAL_NULL(return_value);
		}
	} else if (!return_value) {
		if (IS_CONST & (IS_VAR|IS_TMP_VAR)) {
			if (Z_REFCOUNTED_P(retval_ptr) && !Z_DELREF_P(retval_ptr)) {
				SAVE_OPLINE();
				rc_dtor_func(Z_COUNTED_P(retval_ptr));
			}
		}
	} else {
		if ((IS_CONST & (IS_CONST|IS_TMP_VAR))) {
			ZVAL_COPY_VALUE(return_value, retval_ptr);
			if (IS_CONST == IS_CONST) {
				if (UNEXPECTED(Z_OPT_REFCOUNTED_P(return_value))) {
					Z_ADDREF_P(return_value);
				}
			}
		} else if (IS_CONST == IS_CV) {
			do {
				if (Z_OPT_REFCOUNTED_P(retval_ptr)) {
					if (EXPECTED(!Z_OPT_ISREF_P(retval_ptr))) {
						if (EXPECTED(!(EX_CALL_INFO() & (ZEND_CALL_CODE|ZEND_CALL_OBSERVED)))) {
							zend_refcounted *ref = Z_COUNTED_P(retval_ptr);
							ZVAL_COPY_VALUE(return_value, retval_ptr);
							if (GC_MAY_LEAK(ref)) {
								SAVE_OPLINE();
								gc_possible_root(ref);
							}
							ZVAL_NULL(retval_ptr);
							break;
						} else {
							Z_ADDREF_P(retval_ptr);
						}
					} else {
						retval_ptr = Z_REFVAL_P(retval_ptr);
						if (Z_OPT_REFCOUNTED_P(retval_ptr)) {
							Z_ADDREF_P(retval_ptr);
						}
					}
				}
				ZVAL_COPY_VALUE(return_value, retval_ptr);
			} while (0);
		} else /* if (IS_CONST == IS_VAR) */ {
			if (UNEXPECTED(Z_ISREF_P(retval_ptr))) {
				zend_refcounted *ref = Z_COUNTED_P(retval_ptr);

				retval_ptr = Z_REFVAL_P(retval_ptr);
				ZVAL_COPY_VALUE(return_value, retval_ptr);
				if (UNEXPECTED(GC_DELREF(ref) == 0)) {
					efree_size(ref, sizeof(zend_reference));
				} else if (Z_OPT_REFCOUNTED_P(retval_ptr)) {
					Z_ADDREF_P(retval_ptr);
				}
			} else {
				ZVAL_COPY_VALUE(return_value, retval_ptr);
			}
		}
	}






	ZEND_VM_DISPATCH_TO_LEAVE_HELPER(zend_leave_helper_SPEC_TAILCALL);
}

static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_RETURN_SPEC_OBSERVER_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *retval_ptr;
	zval *return_value;
	zval observer_retval;

	retval_ptr = get_zval_ptr_undef(opline->op1_type, opline->op1, BP_VAR_R);
	return_value = EX(return_value);
	if (!return_value) { return_value = &observer_retval; };
	if (opline->op1_type == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(retval_ptr) == IS_UNDEF)) {
		SAVE_OPLINE();
		retval_ptr = ZVAL_UNDEFINED_OP1();
		if (return_value) {
			ZVAL_NULL(return_value);
		}
	} else if (!return_value) {
		if (opline->op1_type & (IS_VAR|IS_TMP_VAR)) {
			if (Z_REFCOUNTED_P(retval_ptr) && !Z_DELREF_P(retval_ptr)) {
				SAVE_OPLINE();
				rc_dtor_func(Z_COUNTED_P(retval_ptr));
			}
		}
	} else {
		if ((opline->op1_type & (IS_CONST|IS_TMP_VAR))) {
			ZVAL_COPY_VALUE(return_value, retval_ptr);
			if (opline->op1_type == IS_CONST) {
				if (UNEXPECTED(Z_OPT_REFCOUNTED_P(return_value))) {
					Z_ADDREF_P(return_value);
				}
			}
		} else if (opline->op1_type == IS_CV) {
			do {
				if (Z_OPT_REFCOUNTED_P(retval_ptr)) {
					if (EXPECTED(!Z_OPT_ISREF_P(retval_ptr))) {
						if (EXPECTED(!(EX_CALL_INFO() & (ZEND_CALL_CODE|ZEND_CALL_OBSERVED)))) {
							zend_refcounted *ref = Z_COUNTED_P(retval_ptr);
							ZVAL_COPY_VALUE(return_value, retval_ptr);
							if (GC_MAY_LEAK(ref)) {
								SAVE_OPLINE();
								gc_possible_root(ref);
							}
							ZVAL_NULL(retval_ptr);
							break;
						} else {
							Z_ADDREF_P(retval_ptr);
						}
					} else {
						retval_ptr = Z_REFVAL_P(retval_ptr);
						if (Z_OPT_REFCOUNTED_P(retval_ptr)) {
							Z_ADDREF_P(retval_ptr);
						}
					}
				}
				ZVAL_COPY_VALUE(return_value, retval_ptr);
			} while (0);
		} else /* if (opline->op1_type == IS_VAR) */ {
			if (UNEXPECTED(Z_ISREF_P(retval_ptr))) {
				zend_refcounted *ref = Z_COUNTED_P(retval_ptr);

				retval_ptr = Z_REFVAL_P(retval_ptr);
				ZVAL_COPY_VALUE(return_value, retval_ptr);
				if (UNEXPECTED(GC_DELREF(ref) == 0)) {
					efree_size(ref, sizeof(zend_reference));
				} else if (Z_OPT_REFCOUNTED_P(retval_ptr)) {
					Z_ADDREF_P(retval_ptr);
				}
			} else {
				ZVAL_COPY_VALUE(return_value, retval_ptr);
			}
		}
	}
	SAVE_OPLINE();
	zend_observer_fcall_end(execute_data, return_value);
	if (return_value == &observer_retval) { zval_ptr_dtor_nogc(&observer_retval); };
	ZEND_VM_DISPATCH_TO_LEAVE_HELPER(zend_leave_helper_SPEC_TAILCALL);
}

static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_RETURN_BY_REF_SPEC_CONST_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *retval_ptr;
	zval *return_value;


	SAVE_OPLINE();

	return_value = EX(return_value);


	do {
		if ((IS_CONST & (IS_CONST|IS_TMP_VAR)) ||
		    (IS_CONST == IS_VAR && opline->extended_value == ZEND_RETURNS_VALUE)) {
			/* Not supposed to happen, but we'll allow it */
			zend_error(E_NOTICE, "Only variable references should be returned by reference");

			retval_ptr = RT_CONSTANT(opline, opline->op1);
			if (!return_value) {


			} else {
				if (IS_CONST == IS_VAR && UNEXPECTED(Z_ISREF_P(retval_ptr))) {
					ZVAL_COPY_VALUE(return_value, retval_ptr);
					break;
				}

				ZVAL_NEW_REF(return_value, retval_ptr);
				if (IS_CONST == IS_CONST) {
					Z_TRY_ADDREF_P(retval_ptr);
				}
			}
			break;
		}

		retval_ptr = zend_get_bad_ptr();

		if (IS_CONST == IS_VAR) {
			ZEND_ASSERT(retval_ptr != &EG(uninitialized_zval));
			if (opline->extended_value == ZEND_RETURNS_FUNCTION && !Z_ISREF_P(retval_ptr)) {
				zend_error(E_NOTICE, "Only variable references should be returned by reference");
				if (return_value) {
					ZVAL_NEW_REF(return_value, retval_ptr);
				} else {


				}
				break;
			}
		}

		if (return_value) {
			if (Z_ISREF_P(retval_ptr)) {
				Z_ADDREF_P(retval_ptr);
			} else {
				ZVAL_MAKE_REF_EX(retval_ptr, 2);
			}
			ZVAL_REF(return_value, Z_REF_P(retval_ptr));
		}


	} while (0);




	ZEND_VM_DISPATCH_TO_LEAVE_HELPER(zend_leave_helper_SPEC_TAILCALL);
}

static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_RETURN_BY_REF_SPEC_OBSERVER_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *retval_ptr;
	zval *return_value;
	zval observer_retval;

	SAVE_OPLINE();

	return_value = EX(return_value);
	if (!return_value) { return_value = &observer_retval; };
	do {
		if ((opline->op1_type & (IS_CONST|IS_TMP_VAR)) ||
		    (opline->op1_type == IS_VAR && opline->extended_value == ZEND_RETURNS_VALUE)) {
			/* Not supposed to happen, but we'll allow it */
			zend_error(E_NOTICE, "Only variable references should be returned by reference");

			retval_ptr = get_zval_ptr(opline->op1_type, opline->op1, BP_VAR_R);
			if (!return_value) {
				FREE_OP(opline->op1_type, opline->op1.var);
			} else {
				if (opline->op1_type == IS_VAR && UNEXPECTED(Z_ISREF_P(retval_ptr))) {
					ZVAL_COPY_VALUE(return_value, retval_ptr);
					break;
				}

				ZVAL_NEW_REF(return_value, retval_ptr);
				if (opline->op1_type == IS_CONST) {
					Z_TRY_ADDREF_P(retval_ptr);
				}
			}
			break;
		}

		retval_ptr = get_zval_ptr_ptr(opline->op1_type, opline->op1, BP_VAR_W);

		if (opline->op1_type == IS_VAR) {
			ZEND_ASSERT(retval_ptr != &EG(uninitialized_zval));
			if (opline->extended_value == ZEND_RETURNS_FUNCTION && !Z_ISREF_P(retval_ptr)) {
				zend_error(E_NOTICE, "Only variable references should be returned by reference");
				if (return_value) {
					ZVAL_NEW_REF(return_value, retval_ptr);
				} else {
					FREE_OP(opline->op1_type, opline->op1.var);
				}
				break;
			}
		}

		if (return_value) {
			if (Z_ISREF_P(retval_ptr)) {
				Z_ADDREF_P(retval_ptr);
			} else {
				ZVAL_MAKE_REF_EX(retval_ptr, 2);
			}
			ZVAL_REF(return_value, Z_REF_P(retval_ptr));
		}

		FREE_OP(opline->op1_type, opline->op1.var);
	} while (0);

	zend_observer_fcall_end(execute_data, return_value);
	if (return_value == &observer_retval) { zval_ptr_dtor_nogc(&observer_retval); };
	ZEND_VM_DISPATCH_TO_LEAVE_HELPER(zend_leave_helper_SPEC_TAILCALL);
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_GENERATOR_RETURN_SPEC_CONST_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *retval;

	zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C);

	SAVE_OPLINE();
	retval = RT_CONSTANT(opline, opline->op1);

	/* Copy return value into generator->retval */
	if ((IS_CONST & (IS_CONST|IS_TMP_VAR))) {
		ZVAL_COPY_VALUE(&generator->retval, retval);
		if (IS_CONST == IS_CONST) {
			if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->retval))) {
				Z_ADDREF(generator->retval);
			}
		}
	} else if (IS_CONST == IS_CV) {
		ZVAL_COPY_DEREF(&generator->retval, retval);
	} else /* if (IS_CONST == IS_VAR) */ {
		if (UNEXPECTED(Z_ISREF_P(retval))) {
			zend_refcounted *ref = Z_COUNTED_P(retval);

			retval = Z_REFVAL_P(retval);
			ZVAL_COPY_VALUE(&generator->retval, retval);
			if (UNEXPECTED(GC_DELREF(ref) == 0)) {
				efree_size(ref, sizeof(zend_reference));
			} else if (Z_OPT_REFCOUNTED_P(retval)) {
				Z_ADDREF_P(retval);
			}
		} else {
			ZVAL_COPY_VALUE(&generator->retval, retval);
		}
	}


	EG(current_execute_data) = EX(prev_execute_data);

	/* Close the generator to free up resources */
	zend_generator_close(generator, 1);

	/* Pass execution back to handling code */
	ZEND_VM_RETURN();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_GENERATOR_RETURN_SPEC_OBSERVER_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *retval;

	zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C);

	SAVE_OPLINE();
	retval = get_zval_ptr(opline->op1_type, opline->op1, BP_VAR_R);

	/* Copy return value into generator->retval */
	if ((opline->op1_type & (IS_CONST|IS_TMP_VAR))) {
		ZVAL_COPY_VALUE(&generator->retval, retval);
		if (opline->op1_type == IS_CONST) {
			if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->retval))) {
				Z_ADDREF(generator->retval);
			}
		}
	} else if (opline->op1_type == IS_CV) {
		ZVAL_COPY_DEREF(&generator->retval, retval);
	} else /* if (opline->op1_type == IS_VAR) */ {
		if (UNEXPECTED(Z_ISREF_P(retval))) {
			zend_refcounted *ref = Z_COUNTED_P(retval);

			retval = Z_REFVAL_P(retval);
			ZVAL_COPY_VALUE(&generator->retval, retval);
			if (UNEXPECTED(GC_DELREF(ref) == 0)) {
				efree_size(ref, sizeof(zend_reference));
			} else if (Z_OPT_REFCOUNTED_P(retval)) {
				Z_ADDREF_P(retval);
			}
		} else {
			ZVAL_COPY_VALUE(&generator->retval, retval);
		}
	}

	zend_observer_fcall_end(generator->execute_data, &generator->retval);

	EG(current_execute_data) = EX(prev_execute_data);

	/* Close the generator to free up resources */
	zend_generator_close(generator, 1);

	/* Pass execution back to handling code */
	ZEND_VM_RETURN();
}

static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_THROW_SPEC_CONST_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *value;

	SAVE_OPLINE();
	value = RT_CONSTANT(opline, opline->op1);

	do {
		if (IS_CONST == IS_CONST || UNEXPECTED(Z_TYPE_P(value) != IS_OBJECT)) {
			if ((IS_CONST & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) {
				value = Z_REFVAL_P(value);
				if (EXPECTED(Z_TYPE_P(value) == IS_OBJECT)) {
					break;
				}
			}
			if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
				ZVAL_UNDEFINED_OP1();
				if (UNEXPECTED(EG(exception) != NULL)) {
					HANDLE_EXCEPTION();
				}
			}
			zend_throw_error(NULL, "Can only throw objects");


			HANDLE_EXCEPTION();
		}
	} while (0);

	zend_exception_save();
	Z_TRY_ADDREF_P(value);
	zend_throw_exception_object(value);
	zend_exception_restore();


	HANDLE_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_CATCH_SPEC_CONST_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zend_class_entry *ce, *catch_ce;
	zend_object *exception;

	SAVE_OPLINE();
	/* Check whether an exception has been thrown, if not, jump over code */
	zend_exception_restore();
	if (EG(exception) == NULL) {
		ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0);
	}
	catch_ce = CACHED_PTR(opline->extended_value & ~ZEND_LAST_CATCH);
	if (UNEXPECTED(catch_ce == NULL)) {
		catch_ce = zend_fetch_class_by_name(Z_STR_P(RT_CONSTANT(opline, opline->op1)), Z_STR_P(RT_CONSTANT(opline, opline->op1) + 1), ZEND_FETCH_CLASS_NO_AUTOLOAD | ZEND_FETCH_CLASS_SILENT);

		CACHE_PTR(opline->extended_value & ~ZEND_LAST_CATCH, catch_ce);
	}
	ce = EG(exception)->ce;

#ifdef HAVE_DTRACE
	if (DTRACE_EXCEPTION_CAUGHT_ENABLED()) {
		DTRACE_EXCEPTION_CAUGHT((char *)ce->name);
	}
#endif /* HAVE_DTRACE */

	if (ce != catch_ce) {
		if (!catch_ce || !instanceof_function(ce, catch_ce)) {
			if (opline->extended_value & ZEND_LAST_CATCH) {
				zend_rethrow_exception(execute_data);
				HANDLE_EXCEPTION();
			}
			ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0);
		}
	}

	exception = EG(exception);
	EG(exception) = NULL;
	if (RETURN_VALUE_USED(opline)) {
		/* Always perform a strict assignment. There is a reasonable expectation that if you
		 * write "catch (Exception $e)" then $e will actually be instanceof Exception. As such,
		 * we should not permit coercion to string here. */
		zval tmp;
		ZVAL_OBJ(&tmp, exception);
		zend_assign_to_variable(EX_VAR(opline->result.var), &tmp, IS_TMP_VAR, /* strict */ 1);
	} else {
		OBJ_RELEASE(exception);
	}
	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_SEND_USER_SPEC_CONST_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *arg, *param;

	SAVE_OPLINE();

	arg = RT_CONSTANT(opline, opline->op1);
	param = ZEND_CALL_VAR(EX(call), opline->result.var);
	if (UNEXPECTED(ARG_MUST_BE_SENT_BY_REF(EX(call)->func, opline->op2.num))) {
		zend_param_must_be_ref(EX(call)->func, opline->op2.num);
		Z_TRY_ADDREF_P(arg);
		ZVAL_NEW_REF(param, arg);
	} else {
		ZVAL_COPY(param, arg);
	}


	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_BOOL_SPEC_CONST_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *val;

	val = RT_CONSTANT(opline, opline->op1);
	if (Z_TYPE_INFO_P(val) == IS_TRUE) {
		ZVAL_TRUE(EX_VAR(opline->result.var));
	} else if (EXPECTED(Z_TYPE_INFO_P(val) <= IS_TRUE)) {
		/* The result and op1 can be the same cv zval */
		const uint32_t orig_val_type = Z_TYPE_INFO_P(val);
		ZVAL_FALSE(EX_VAR(opline->result.var));
		if (IS_CONST == IS_CV && UNEXPECTED(orig_val_type == IS_UNDEF)) {
			SAVE_OPLINE();
			ZVAL_UNDEFINED_OP1();
			ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
		}
	} else {
		SAVE_OPLINE();
		ZVAL_BOOL(EX_VAR(opline->result.var), i_zend_is_true(val));


		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
	}
	ZEND_VM_NEXT_OPCODE();
}

static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_CLONE_SPEC_CONST_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *obj;
	zend_object *zobj;
	zend_class_entry *ce, *scope;
	zend_function *clone;
	zend_object_clone_obj_t clone_call;

	SAVE_OPLINE();
	obj = RT_CONSTANT(opline, opline->op1);

	/* ZEND_CLONE also exists as the clone() function and both implementations must be kept in sync.
	 * The OPcode intentionally does not support a clone-with property list to keep it simple. */

	do {
		if (IS_CONST == IS_CONST ||
		    (IS_CONST != IS_UNUSED && UNEXPECTED(Z_TYPE_P(obj) != IS_OBJECT))) {
			if ((IS_CONST & (IS_VAR|IS_CV)) && Z_ISREF_P(obj)) {
				obj = Z_REFVAL_P(obj);
				if (EXPECTED(Z_TYPE_P(obj) == IS_OBJECT)) {
					break;
				}
			}
			ZVAL_UNDEF(EX_VAR(opline->result.var));
			if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(obj) == IS_UNDEF)) {
				ZVAL_UNDEFINED_OP1();
				if (UNEXPECTED(EG(exception) != NULL)) {
					HANDLE_EXCEPTION();
				}
			}
			zend_type_error("clone(): Argument #1 ($object) must be of type object, %s given", zend_zval_value_name(obj));


			HANDLE_EXCEPTION();
		}
	} while (0);

	zobj = Z_OBJ_P(obj);
	ce = zobj->ce;
	clone = ce->clone;
	clone_call = zobj->handlers->clone_obj;
	if (UNEXPECTED(clone_call == NULL)) {
		zend_throw_error(NULL, "Trying to clone an uncloneable object of class %s", ZSTR_VAL(ce->name));


		ZVAL_UNDEF(EX_VAR(opline->result.var));
		HANDLE_EXCEPTION();
	}

	if (clone && !(clone->common.fn_flags & ZEND_ACC_PUBLIC)) {
		scope = EX(func)->op_array.scope;
		ZEND_ASSERT(!(clone->common.fn_flags & ZEND_ACC_PUBLIC));
		if (!zend_check_method_accessible(clone, scope)) {
			zend_bad_method_call(clone, clone->common.function_name, scope);


			ZVAL_UNDEF(EX_VAR(opline->result.var));
			HANDLE_EXCEPTION();
		}
	}

	ZVAL_OBJ(EX_VAR(opline->result.var), clone_call(zobj));


	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_CAST_SPEC_CONST_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *expr;
	zval *result = EX_VAR(opline->result.var);

	SAVE_OPLINE();
	expr = RT_CONSTANT(opline, opline->op1);

	switch (opline->extended_value) {
		case IS_LONG:
			ZVAL_LONG(result, zval_get_long(expr));
			break;
		case IS_DOUBLE:
			ZVAL_DOUBLE(result, zval_get_double(expr));
			break;
		case IS_STRING:
			ZVAL_STR(result, zval_get_string(expr));
			break;
		default:
			ZEND_ASSERT(opline->extended_value != _IS_BOOL && "Must use ZEND_BOOL instead");
			if (IS_CONST & (IS_VAR|IS_CV)) {
				ZVAL_DEREF(expr);
			}
			/* If value is already of correct type, return it directly */
			if (Z_TYPE_P(expr) == opline->extended_value) {
				ZVAL_COPY_VALUE(result, expr);
				if (IS_CONST == IS_CONST) {
					if (UNEXPECTED(Z_OPT_REFCOUNTED_P(result))) Z_ADDREF_P(result);
				} else if (IS_CONST != IS_TMP_VAR) {
					if (Z_OPT_REFCOUNTED_P(result)) Z_ADDREF_P(result);
				}


				ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
			}

			if (opline->extended_value == IS_ARRAY) {
				zend_cast_zval_to_array(result, expr, IS_CONST);
			} else {
				ZEND_ASSERT(opline->extended_value == IS_OBJECT);
				zend_cast_zval_to_object(result, expr, IS_CONST);
			}
	}


	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_INCLUDE_OR_EVAL_SPEC_CONST_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zend_op_array *new_op_array;
	zval *inc_filename;

	SAVE_OPLINE();
	inc_filename = RT_CONSTANT(opline, opline->op1);
	new_op_array = zend_include_or_eval(inc_filename, opline->extended_value);
	if (UNEXPECTED(EG(exception) != NULL)) {


		if (new_op_array != ZEND_FAKE_OP_ARRAY && new_op_array != NULL) {
			destroy_op_array(new_op_array);
			efree_size(new_op_array, sizeof(zend_op_array));
		}
		UNDEF_RESULT();
		HANDLE_EXCEPTION();
	} else if (new_op_array == ZEND_FAKE_OP_ARRAY) {
		if (RETURN_VALUE_USED(opline)) {
			ZVAL_TRUE(EX_VAR(opline->result.var));
		}
	} else if (UNEXPECTED(new_op_array == NULL)) {
		if (RETURN_VALUE_USED(opline)) {
			ZVAL_FALSE(EX_VAR(opline->result.var));
		}
	} else if (new_op_array->last == 1
			&& new_op_array->opcodes[0].opcode == ZEND_RETURN
			&& new_op_array->opcodes[0].op1_type == IS_CONST
			&& EXPECTED(zend_execute_ex == execute_ex)) {
		if (RETURN_VALUE_USED(opline)) {
			const zend_op *op = new_op_array->opcodes;

			ZVAL_COPY(EX_VAR(opline->result.var), RT_CONSTANT(op, op->op1));
		}
		zend_destroy_static_vars(new_op_array);
		destroy_op_array(new_op_array);
		efree_size(new_op_array, sizeof(zend_op_array));
	} else {
		zval *return_value = NULL;
		zend_execute_data *call;
		if (RETURN_VALUE_USED(opline)) {
			return_value = EX_VAR(opline->result.var);
		}

		new_op_array->scope = EX(func)->op_array.scope;

		call = zend_vm_stack_push_call_frame(
			(Z_TYPE_INFO(EX(This)) & ZEND_CALL_HAS_THIS) | ZEND_CALL_NESTED_CODE | ZEND_CALL_HAS_SYMBOL_TABLE,
			(zend_function*)new_op_array, 0,
			Z_PTR(EX(This)));

		if (EX_CALL_INFO() & ZEND_CALL_HAS_SYMBOL_TABLE) {
			call->symbol_table = EX(symbol_table);
		} else {
			call->symbol_table = zend_rebuild_symbol_table();
		}

		call->prev_execute_data = execute_data;
		i_init_code_execute_data(call, new_op_array, return_value);


		if (EXPECTED(zend_execute_ex == execute_ex)) {


			ZEND_VM_ENTER();
		} else {
			ZEND_ADD_CALL_FLAG(call, ZEND_CALL_TOP);
			zend_execute_ex(call);
			zend_vm_stack_free_call_frame(call);
		}

		zend_destroy_static_vars(new_op_array);
		destroy_op_array(new_op_array);
		efree_size(new_op_array, sizeof(zend_op_array));
		if (UNEXPECTED(EG(exception) != NULL)) {
			zend_rethrow_exception(execute_data);


			UNDEF_RESULT();
			HANDLE_EXCEPTION();
		}
	}


	ZEND_VM_NEXT_OPCODE();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_INCLUDE_OR_EVAL_SPEC_OBSERVER_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zend_op_array *new_op_array;
	zval *inc_filename;

	SAVE_OPLINE();
	inc_filename = get_zval_ptr(opline->op1_type, opline->op1, BP_VAR_R);
	new_op_array = zend_include_or_eval(inc_filename, opline->extended_value);
	if (UNEXPECTED(EG(exception) != NULL)) {
		FREE_OP(opline->op1_type, opline->op1.var);
		if (new_op_array != ZEND_FAKE_OP_ARRAY && new_op_array != NULL) {
			destroy_op_array(new_op_array);
			efree_size(new_op_array, sizeof(zend_op_array));
		}
		UNDEF_RESULT();
		HANDLE_EXCEPTION();
	} else if (new_op_array == ZEND_FAKE_OP_ARRAY) {
		if (RETURN_VALUE_USED(opline)) {
			ZVAL_TRUE(EX_VAR(opline->result.var));
		}
	} else if (UNEXPECTED(new_op_array == NULL)) {
		if (RETURN_VALUE_USED(opline)) {
			ZVAL_FALSE(EX_VAR(opline->result.var));
		}
	} else if (new_op_array->last == 1
			&& new_op_array->opcodes[0].opcode == ZEND_RETURN
			&& new_op_array->opcodes[0].op1_type == IS_CONST
			&& EXPECTED(zend_execute_ex == execute_ex)) {
		if (RETURN_VALUE_USED(opline)) {
			const zend_op *op = new_op_array->opcodes;

			ZVAL_COPY(EX_VAR(opline->result.var), RT_CONSTANT(op, op->op1));
		}
		zend_destroy_static_vars(new_op_array);
		destroy_op_array(new_op_array);
		efree_size(new_op_array, sizeof(zend_op_array));
	} else {
		zval *return_value = NULL;
		zend_execute_data *call;
		if (RETURN_VALUE_USED(opline)) {
			return_value = EX_VAR(opline->result.var);
		}

		new_op_array->scope = EX(func)->op_array.scope;

		call = zend_vm_stack_push_call_frame(
			(Z_TYPE_INFO(EX(This)) & ZEND_CALL_HAS_THIS) | ZEND_CALL_NESTED_CODE | ZEND_CALL_HAS_SYMBOL_TABLE,
			(zend_function*)new_op_array, 0,
			Z_PTR(EX(This)));

		if (EX_CALL_INFO() & ZEND_CALL_HAS_SYMBOL_TABLE) {
			call->symbol_table = EX(symbol_table);
		} else {
			call->symbol_table = zend_rebuild_symbol_table();
		}

		call->prev_execute_data = execute_data;
		i_init_code_execute_data(call, new_op_array, return_value);
		zend_observer_fcall_begin_specialized(call, false);
		if (EXPECTED(zend_execute_ex == execute_ex)) {
			FREE_OP(opline->op1_type, opline->op1.var);
			ZEND_VM_ENTER();
		} else {
			ZEND_ADD_CALL_FLAG(call, ZEND_CALL_TOP);
			zend_execute_ex(call);
			zend_vm_stack_free_call_frame(call);
		}

		zend_destroy_static_vars(new_op_array);
		destroy_op_array(new_op_array);
		efree_size(new_op_array, sizeof(zend_op_array));
		if (UNEXPECTED(EG(exception) != NULL)) {
			zend_rethrow_exception(execute_data);
			FREE_OP(opline->op1_type, opline->op1.var);
			UNDEF_RESULT();
			HANDLE_EXCEPTION();
		}
	}
	FREE_OP(opline->op1_type, opline->op1.var);
	ZEND_VM_NEXT_OPCODE();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_FE_RESET_R_SPEC_CONST_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *array_ptr, *result;

	SAVE_OPLINE();

	array_ptr = RT_CONSTANT(opline, opline->op1);
	if (EXPECTED(Z_TYPE_P(array_ptr) == IS_ARRAY)) {
		result = EX_VAR(opline->result.var);
		ZVAL_COPY_VALUE(result, array_ptr);
		if (IS_CONST != IS_TMP_VAR && Z_OPT_REFCOUNTED_P(result)) {
			Z_ADDREF_P(array_ptr);
		}
		Z_FE_POS_P(result) = 0;


		ZEND_VM_NEXT_OPCODE();
	} else if (IS_CONST != IS_CONST && EXPECTED(Z_TYPE_P(array_ptr) == IS_OBJECT)) {
		zend_object *zobj = Z_OBJ_P(array_ptr);
		if (!zobj->ce->get_iterator) {
			if (UNEXPECTED(zend_object_is_lazy(zobj))) {
				zobj = zend_lazy_object_init(zobj);
				if (UNEXPECTED(EG(exception))) {
					UNDEF_RESULT();


					HANDLE_EXCEPTION();
				}
			}
			HashTable *properties = zobj->properties;
			if (properties) {
				if (UNEXPECTED(GC_REFCOUNT(properties) > 1)) {
					if (EXPECTED(!(GC_FLAGS(properties) & IS_ARRAY_IMMUTABLE))) {
						GC_DELREF(properties);
					}
					properties = zobj->properties = zend_array_dup(properties);
				}
			} else {
				properties = zobj->handlers->get_properties(zobj);
			}

			result = EX_VAR(opline->result.var);
			ZVAL_COPY_VALUE(result, array_ptr);
			if (IS_CONST != IS_TMP_VAR) {
				Z_ADDREF_P(array_ptr);
			}

			if (zend_hash_num_elements(properties) == 0) {
				Z_FE_ITER_P(result) = (uint32_t) -1;


				ZEND_VM_JMP(OP_JMP_ADDR(opline, opline->op2));
			}

			Z_FE_ITER_P(result) = zend_hash_iterator_add(properties, 0);


			ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
		} else {
			bool is_empty = zend_fe_reset_iterator(array_ptr, 0 OPLINE_CC EXECUTE_DATA_CC);


			if (UNEXPECTED(EG(exception))) {
				HANDLE_EXCEPTION();
			} else if (is_empty) {
				ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0);
			} else {
				ZEND_VM_NEXT_OPCODE();
			}
		}
	} else {
		zend_error(E_WARNING, "foreach() argument must be of type array|object, %s given", zend_zval_value_name(array_ptr));
		ZVAL_UNDEF(EX_VAR(opline->result.var));
		Z_FE_ITER_P(EX_VAR(opline->result.var)) = (uint32_t)-1;


		ZEND_VM_JMP(OP_JMP_ADDR(opline, opline->op2));
	}
}

static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_FE_RESET_RW_SPEC_CONST_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *array_ptr, *array_ref;

	SAVE_OPLINE();

	if (IS_CONST == IS_VAR || IS_CONST == IS_CV) {
		array_ref = array_ptr = zend_get_bad_ptr();
		if (Z_ISREF_P(array_ref)) {
			array_ptr = Z_REFVAL_P(array_ref);
		}
	} else {
		array_ref = array_ptr = RT_CONSTANT(opline, opline->op1);
	}

	if (EXPECTED(Z_TYPE_P(array_ptr) == IS_ARRAY)) {
		if (IS_CONST == IS_VAR || IS_CONST == IS_CV) {
			if (array_ptr == array_ref) {
				ZVAL_NEW_REF(array_ref, array_ref);
				array_ptr = Z_REFVAL_P(array_ref);
			}
			Z_ADDREF_P(array_ref);
			ZVAL_COPY_VALUE(EX_VAR(opline->result.var), array_ref);
		} else {
			array_ref = EX_VAR(opline->result.var);
			ZVAL_NEW_REF(array_ref, array_ptr);
			array_ptr = Z_REFVAL_P(array_ref);
		}
		if (IS_CONST == IS_CONST) {
			ZVAL_ARR(array_ptr, zend_array_dup(Z_ARRVAL_P(array_ptr)));
		} else {
			SEPARATE_ARRAY(array_ptr);
		}
		Z_FE_ITER_P(EX_VAR(opline->result.var)) = zend_hash_iterator_add(Z_ARRVAL_P(array_ptr), 0);


		ZEND_VM_NEXT_OPCODE();
	} else if (IS_CONST != IS_CONST && EXPECTED(Z_TYPE_P(array_ptr) == IS_OBJECT)) {
		if (!Z_OBJCE_P(array_ptr)->get_iterator) {
			zend_object *zobj = Z_OBJ_P(array_ptr);
			HashTable *properties;
			if (UNEXPECTED(zend_object_is_lazy(zobj))) {
				zobj = zend_lazy_object_init(zobj);
				if (UNEXPECTED(EG(exception))) {
					UNDEF_RESULT();


					HANDLE_EXCEPTION();
				}
			}
			if (IS_CONST == IS_VAR || IS_CONST == IS_CV) {
				if (array_ptr == array_ref) {
					ZVAL_NEW_REF(array_ref, array_ref);
					array_ptr = Z_REFVAL_P(array_ref);
				}
				Z_ADDREF_P(array_ref);
				ZVAL_COPY_VALUE(EX_VAR(opline->result.var), array_ref);
			} else {
				array_ptr = EX_VAR(opline->result.var);
				ZVAL_COPY_VALUE(array_ptr, array_ref);
			}
			if (Z_OBJ_P(array_ptr)->properties
			 && UNEXPECTED(GC_REFCOUNT(Z_OBJ_P(array_ptr)->properties) > 1)) {
				if (EXPECTED(!(GC_FLAGS(Z_OBJ_P(array_ptr)->properties) & IS_ARRAY_IMMUTABLE))) {
					GC_DELREF(Z_OBJ_P(array_ptr)->properties);
				}
				Z_OBJ_P(array_ptr)->properties = zend_array_dup(Z_OBJ_P(array_ptr)->properties);
			}

			properties = Z_OBJPROP_P(array_ptr);
			if (zend_hash_num_elements(properties) == 0) {
				Z_FE_ITER_P(EX_VAR(opline->result.var)) = (uint32_t) -1;


				ZEND_VM_JMP(OP_JMP_ADDR(opline, opline->op2));
			}

			Z_FE_ITER_P(EX_VAR(opline->result.var)) = zend_hash_iterator_add(properties, 0);


			ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
		} else {
			bool is_empty = zend_fe_reset_iterator(array_ptr, 1 OPLINE_CC EXECUTE_DATA_CC);


			if (UNEXPECTED(EG(exception))) {
				HANDLE_EXCEPTION();
			} else if (is_empty) {
				ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0);
			} else {
				ZEND_VM_NEXT_OPCODE();
			}
		}
	} else {
		zend_error(E_WARNING, "foreach() argument must be of type array|object, %s given", zend_zval_value_name(array_ptr));
		ZVAL_UNDEF(EX_VAR(opline->result.var));
		Z_FE_ITER_P(EX_VAR(opline->result.var)) = (uint32_t)-1;


		ZEND_VM_JMP(OP_JMP_ADDR(opline, opline->op2));
	}
}

static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_JMP_SET_SPEC_CONST_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *value;
	zend_reference *ref = NULL;
	bool ret;

	SAVE_OPLINE();
	value = RT_CONSTANT(opline, opline->op1);

	if ((IS_CONST == IS_VAR || IS_CONST == IS_CV) && Z_ISREF_P(value)) {
		if (IS_CONST == IS_VAR) {
			ref = Z_REF_P(value);
		}
		value = Z_REFVAL_P(value);
	}

	ret = i_zend_is_true(value);

	if (UNEXPECTED(EG(exception))) {


		ZVAL_UNDEF(EX_VAR(opline->result.var));
		HANDLE_EXCEPTION();
	}

	if (ret) {
		zval *result = EX_VAR(opline->result.var);

		ZVAL_COPY_VALUE(result, value);
		if (IS_CONST == IS_CONST) {
			if (UNEXPECTED(Z_OPT_REFCOUNTED_P(result))) Z_ADDREF_P(result);
		} else if (IS_CONST == IS_CV) {
			if (Z_OPT_REFCOUNTED_P(result)) Z_ADDREF_P(result);
		} else if (IS_CONST == IS_VAR && ref) {
			if (UNEXPECTED(GC_DELREF(ref) == 0)) {
				efree_size(ref, sizeof(zend_reference));
			} else if (Z_OPT_REFCOUNTED_P(result)) {
				Z_ADDREF_P(result);
			}
		}
		ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0);
	}


	ZEND_VM_NEXT_OPCODE();
}

static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_COALESCE_SPEC_CONST_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *value;
	zend_reference *ref = NULL;

	SAVE_OPLINE();
	value = RT_CONSTANT(opline, opline->op1);

	if ((IS_CONST & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) {
		if (IS_CONST & IS_VAR) {
			ref = Z_REF_P(value);
		}
		value = Z_REFVAL_P(value);
	}

	if (Z_TYPE_P(value) > IS_NULL) {
		zval *result = EX_VAR(opline->result.var);
		ZVAL_COPY_VALUE(result, value);
		if (IS_CONST == IS_CONST) {
			if (UNEXPECTED(Z_OPT_REFCOUNTED_P(result))) Z_ADDREF_P(result);
		} else if (IS_CONST == IS_CV) {
			if (Z_OPT_REFCOUNTED_P(result)) Z_ADDREF_P(result);
		} else if ((IS_CONST & IS_VAR) && ref) {
			if (UNEXPECTED(GC_DELREF(ref) == 0)) {
				efree_size(ref, sizeof(zend_reference));
			} else if (Z_OPT_REFCOUNTED_P(result)) {
				Z_ADDREF_P(result);
			}
		}
		ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0);
	}

	if ((IS_CONST & IS_VAR) && ref) {
		if (UNEXPECTED(GC_DELREF(ref) == 0)) {
			efree_size(ref, sizeof(zend_reference));
		}
	}
	ZEND_VM_NEXT_OPCODE();
}

static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_JMP_NULL_SPEC_CONST_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *val, *result;

	val = RT_CONSTANT(opline, opline->op1);

	if (Z_TYPE_P(val) > IS_NULL) {
		do {
			if ((IS_CONST == IS_CV || IS_CONST == IS_VAR) && Z_TYPE_P(val) == IS_REFERENCE) {
				val = Z_REFVAL_P(val);
				if (Z_TYPE_P(val) <= IS_NULL) {


					break;
				}
			}
			ZEND_VM_NEXT_OPCODE();
		} while (0);
	}

	result = EX_VAR(opline->result.var);
	uint32_t short_circuiting_type = opline->extended_value & ZEND_SHORT_CIRCUITING_CHAIN_MASK;
	if (EXPECTED(short_circuiting_type == ZEND_SHORT_CIRCUITING_CHAIN_EXPR)) {
		ZVAL_NULL(result);
		if (IS_CONST == IS_CV
			&& UNEXPECTED(Z_TYPE_P(val) == IS_UNDEF)
			&& (opline->extended_value & ZEND_JMP_NULL_BP_VAR_IS) == 0
		) {
			SAVE_OPLINE();
			ZVAL_UNDEFINED_OP1();
			if (UNEXPECTED(EG(exception) != NULL)) {
				HANDLE_EXCEPTION();
			}
		}
	} else if (short_circuiting_type == ZEND_SHORT_CIRCUITING_CHAIN_ISSET) {
		ZVAL_FALSE(result);
	} else {
		ZEND_ASSERT(short_circuiting_type == ZEND_SHORT_CIRCUITING_CHAIN_EMPTY);
		ZVAL_TRUE(result);
	}

	ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0);
}

static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_QM_ASSIGN_SPEC_CONST_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *value;
	zval *result = EX_VAR(opline->result.var);

	value = RT_CONSTANT(opline, opline->op1);
	if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
		SAVE_OPLINE();
		ZVAL_UNDEFINED_OP1();
		ZVAL_NULL(result);
		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
	}

	if (IS_CONST == IS_CV) {
		ZVAL_COPY_DEREF(result, value);
	} else if (IS_CONST == IS_VAR) {
		if (UNEXPECTED(Z_ISREF_P(value))) {
			ZVAL_COPY_VALUE(result, Z_REFVAL_P(value));
			if (UNEXPECTED(Z_DELREF_P(value) == 0)) {
				efree_size(Z_REF_P(value), sizeof(zend_reference));
			} else if (Z_OPT_REFCOUNTED_P(result)) {
				Z_ADDREF_P(result);
			}
		} else {
			ZVAL_COPY_VALUE(result, value);
		}
	} else {
		ZVAL_COPY_VALUE(result, value);
		if (IS_CONST == IS_CONST) {
			if (UNEXPECTED(Z_OPT_REFCOUNTED_P(result))) {
				Z_ADDREF_P(result);
			}
		}
	}
	ZEND_VM_NEXT_OPCODE();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_DECLARE_CLASS_SPEC_CONST_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE

	SAVE_OPLINE();
	do_bind_class(RT_CONSTANT(opline, opline->op1), (opline->op2_type == IS_CONST) ? Z_STR_P(RT_CONSTANT(opline, opline->op2)) : NULL);
	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_DECLARE_LAMBDA_FUNCTION_SPEC_CONST_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zend_function *func;
	zval *object;
	zend_class_entry *called_scope;

	func = (zend_function *) EX(func)->op_array.dynamic_func_defs[opline->op2.num];
	if (Z_TYPE(EX(This)) == IS_OBJECT) {
		called_scope = Z_OBJCE(EX(This));
		if (UNEXPECTED((func->common.fn_flags & ZEND_ACC_STATIC) ||
				(EX(func)->common.fn_flags & ZEND_ACC_STATIC))) {
			object = NULL;
		} else {
			object = &EX(This);
		}
	} else {
		called_scope = Z_CE(EX(This));
		object = NULL;
	}
	SAVE_OPLINE();
	zend_create_closure(EX_VAR(opline->result.var), func,
		EX(func)->op_array.scope, called_scope, object);

	ZEND_VM_NEXT_OPCODE();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_YIELD_FROM_SPEC_CONST_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C);
	zval *val;

	SAVE_OPLINE();
	val = RT_CONSTANT(opline, opline->op1);

	if (UNEXPECTED(generator->flags & ZEND_GENERATOR_FORCED_CLOSE)) {
		zend_throw_error(NULL, "Cannot use \"yield from\" in a force-closed generator");


		UNDEF_RESULT();
		HANDLE_EXCEPTION();
	}

yield_from_try_again:
	if (Z_TYPE_P(val) == IS_ARRAY) {
		ZVAL_COPY_VALUE(&generator->values, val);
		if (Z_OPT_REFCOUNTED_P(val)) {
			Z_ADDREF_P(val);
		}
		Z_FE_POS(generator->values) = 0;


	} else if (IS_CONST != IS_CONST && Z_TYPE_P(val) == IS_OBJECT && Z_OBJCE_P(val)->get_iterator) {
		zend_class_entry *ce = Z_OBJCE_P(val);
		if (ce == zend_ce_generator) {
			zend_generator *new_gen = (zend_generator *) Z_OBJ_P(val);

			Z_ADDREF_P(val);


			if (UNEXPECTED(new_gen->execute_data == NULL)) {
				zend_throw_error(NULL, "Generator passed to yield from was aborted without proper return and is unable to continue");
				zval_ptr_dtor(val);
				UNDEF_RESULT();
				HANDLE_EXCEPTION();
			} else if (Z_ISUNDEF(new_gen->retval)) {
				if (UNEXPECTED(zend_generator_get_current(new_gen) == generator)) {
					zend_throw_error(NULL, "Impossible to yield from the Generator being currently run");
					zval_ptr_dtor(val);
					UNDEF_RESULT();
					HANDLE_EXCEPTION();
				} else {
					zend_generator_yield_from(generator, new_gen);
				}
			} else {
				if (RETURN_VALUE_USED(opline)) {
					ZVAL_COPY(EX_VAR(opline->result.var), &new_gen->retval);
				}
				ZEND_VM_NEXT_OPCODE();
			}
		} else {
			zend_object_iterator *iter = ce->get_iterator(ce, val, 0);


			if (UNEXPECTED(!iter) || UNEXPECTED(EG(exception))) {
				if (!EG(exception)) {
					zend_throw_error(NULL, "Object of type %s did not create an Iterator", ZSTR_VAL(ce->name));
				}
				UNDEF_RESULT();
				HANDLE_EXCEPTION();
			}

			iter->index = 0;
			if (iter->funcs->rewind) {
				iter->funcs->rewind(iter);
				if (UNEXPECTED(EG(exception) != NULL)) {
					OBJ_RELEASE(&iter->std);
					UNDEF_RESULT();
					HANDLE_EXCEPTION();
				}
			}

			ZVAL_OBJ(&generator->values, &iter->std);
		}
	} else if ((IS_CONST & (IS_VAR|IS_CV)) && Z_TYPE_P(val) == IS_REFERENCE) {
		val = Z_REFVAL_P(val);
		goto yield_from_try_again;
	} else {
		zend_throw_error(NULL, "Can use \"yield from\" only with arrays and Traversables");


		UNDEF_RESULT();
		HANDLE_EXCEPTION();
	}

	/* This is the default return value
	 * when the expression is a Generator, it will be overwritten in zend_generator_resume() */
	if (RETURN_VALUE_USED(opline)) {
		ZVAL_NULL(EX_VAR(opline->result.var));
	}

	/* This generator has no send target (though the generator we delegate to might have one) */
	generator->send_target = NULL;

	/* The GOTO VM uses a local opline variable. We need to set the opline
	 * variable in execute_data so we don't resume at an old position. */
	SAVE_OPLINE();

	ZEND_VM_RETURN();
}

static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_STRLEN_SPEC_CONST_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *value;

	value = RT_CONSTANT(opline, opline->op1);
	if (EXPECTED(Z_TYPE_P(value) == IS_STRING)) {
		ZVAL_LONG(EX_VAR(opline->result.var), Z_STRLEN_P(value));
		if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
			zval_ptr_dtor_str(value);
		}
		ZEND_VM_NEXT_OPCODE();
	} else {
		bool strict;

		if ((IS_CONST & (IS_VAR|IS_CV)) && Z_TYPE_P(value) == IS_REFERENCE) {
			value = Z_REFVAL_P(value);
			if (EXPECTED(Z_TYPE_P(value) == IS_STRING)) {
				ZVAL_LONG(EX_VAR(opline->result.var), Z_STRLEN_P(value));


				ZEND_VM_NEXT_OPCODE();
			}
		}

		SAVE_OPLINE();
		if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
			value = ZVAL_UNDEFINED_OP1();
		}
		strict = EX_USES_STRICT_TYPES();
		do {
			if (EXPECTED(!strict)) {
				zend_string *str;
				zval tmp;

				if (UNEXPECTED(Z_TYPE_P(value) == IS_NULL)) {
					zend_error(E_DEPRECATED,
						"strlen(): Passing null to parameter #1 ($string) of type string is deprecated");
					ZVAL_LONG(EX_VAR(opline->result.var), 0);
					if (UNEXPECTED(EG(exception))) {
						HANDLE_EXCEPTION();
					}
					break;
				}

				ZVAL_COPY(&tmp, value);
				if (zend_parse_arg_str_weak(&tmp, &str, 1)) {
					ZVAL_LONG(EX_VAR(opline->result.var), ZSTR_LEN(str));
					zval_ptr_dtor(&tmp);
					break;
				}
				zval_ptr_dtor(&tmp);
			}
			if (!EG(exception)) {
				zend_type_error("strlen(): Argument #1 ($string) must be of type string, %s given", zend_zval_value_name(value));
			}
			ZVAL_UNDEF(EX_VAR(opline->result.var));
		} while (0);
	}


	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_TYPE_CHECK_SPEC_CONST_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *value;
	int result = 0;

	value = RT_CONSTANT(opline, opline->op1);
	if ((opline->extended_value >> (uint32_t)Z_TYPE_P(value)) & 1) {
type_check_resource:
		if (opline->extended_value != MAY_BE_RESOURCE
		 || EXPECTED(NULL != zend_rsrc_list_get_rsrc_type(Z_RES_P(value)))) {
			result = 1;
		}
	} else if ((IS_CONST & (IS_CV|IS_VAR)) && Z_ISREF_P(value)) {
		value = Z_REFVAL_P(value);
		if ((opline->extended_value >> (uint32_t)Z_TYPE_P(value)) & 1) {
			goto type_check_resource;
		}
	} else if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
		result = ((1 << IS_NULL) & opline->extended_value) != 0;
		SAVE_OPLINE();
		ZVAL_UNDEFINED_OP1();
		if (UNEXPECTED(EG(exception))) {
			ZVAL_UNDEF(EX_VAR(opline->result.var));
			HANDLE_EXCEPTION();
		}
	}
	if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
		SAVE_OPLINE();


		ZEND_VM_SMART_BRANCH(result, 1);
	} else {
		ZEND_VM_SMART_BRANCH(result, 0);
	}
}

static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_DEFINED_SPEC_CONST_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zend_constant *c;

	c = CACHED_PTR(opline->extended_value);
	if (EXPECTED(c != NULL)) {
		if (!IS_SPECIAL_CACHE_VAL(c)) {
defined_true:
			ZEND_VM_SMART_BRANCH_TRUE();
		} else if (EXPECTED(zend_hash_num_elements(EG(zend_constants)) == DECODE_SPECIAL_CACHE_NUM(c))) {
defined_false:
			ZEND_VM_SMART_BRANCH_FALSE();
		}
	}
	if (zend_quick_check_constant(RT_CONSTANT(opline, opline->op1) OPLINE_CC EXECUTE_DATA_CC) != SUCCESS) {
		CACHE_PTR(opline->extended_value, ENCODE_SPECIAL_CACHE_NUM(zend_hash_num_elements(EG(zend_constants))));
		goto defined_false;
	} else {
		goto defined_true;
	}
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_JMP_FRAMELESS_SPEC_CONST_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zend_jmp_fl_result result = (uintptr_t)CACHED_PTR(opline->extended_value);
try_again:
	if (EXPECTED(result == ZEND_JMP_FL_HIT)) {
		OPLINE = OP_JMP_ADDR(opline, opline->op2);
		ZEND_VM_CONTINUE();
	} else if (EXPECTED(result == ZEND_JMP_FL_MISS)) {
		ZEND_VM_NEXT_OPCODE();
	} else {
		ZEND_ASSERT(result == ZEND_JMP_FL_UNPRIMED);
		/* func_name refers to the function in the local namespace, e.g. foo\substr. */
		zval *func_name = (zval *)RT_CONSTANT(opline, opline->op1);
		/* If it cannot be found locally, we must be referring to the global function. */
		zval *func = zend_hash_find_known_hash(EG(function_table), Z_STR_P(func_name));
		/* ZEND_JMP_FL_MISS = 1, ZEND_JMP_FL_HIT = 2 */
		result = (func == NULL) + 1;
		CACHE_PTR(opline->extended_value, (void *)result);
		goto try_again;
	}
}

static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_QM_ASSIGN_LONG_SPEC_CONST_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *value;

	value = RT_CONSTANT(opline, opline->op1);
	ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(value));
	ZEND_VM_NEXT_OPCODE();
}

static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_QM_ASSIGN_DOUBLE_SPEC_CONST_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *value;

	value = RT_CONSTANT(opline, opline->op1);
	ZVAL_DOUBLE(EX_VAR(opline->result.var), Z_DVAL_P(value));
	ZEND_VM_NEXT_OPCODE();
}

static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_QM_ASSIGN_NOREF_SPEC_CONST_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *value;

	value = RT_CONSTANT(opline, opline->op1);
	ZVAL_COPY_VALUE(EX_VAR(opline->result.var), value);
	ZEND_VM_NEXT_OPCODE();
}

static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_SEND_VAL_SIMPLE_SPEC_CONST_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *value, *arg;

	value = RT_CONSTANT(opline, opline->op1);
	arg = ZEND_CALL_VAR(EX(call), opline->result.var);
	ZVAL_COPY_VALUE(arg, value);
	ZEND_VM_NEXT_OPCODE();
}

static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_SEND_VAL_EX_SIMPLE_SPEC_CONST_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *value, *arg;
	uint32_t arg_num = opline->op2.num;

	arg = ZEND_CALL_VAR(EX(call), opline->result.var);
	if (QUICK_ARG_MUST_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
		ZEND_VM_DISPATCH_TO_HELPER(zend_cannot_pass_by_ref_helper_SPEC_TAILCALL(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_EX arg_num, arg));
	}
	value = RT_CONSTANT(opline, opline->op1);
	ZVAL_COPY_VALUE(arg, value);
	ZEND_VM_NEXT_OPCODE();
}

static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_ADD_SPEC_CONST_CONST_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2, *result;
	double d1, d2;

	op1 = RT_CONSTANT(opline, opline->op1);
	op2 = RT_CONSTANT(opline, opline->op2);
	if (1 && IS_CONST == IS_CONST && IS_CONST == IS_CONST) {
		/* pass */
	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
			result = EX_VAR(opline->result.var);
			fast_long_add_function(result, op1, op2);
			ZEND_VM_NEXT_OPCODE();
		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
			d1 = (double)Z_LVAL_P(op1);
			d2 = Z_DVAL_P(op2);
			goto add_double;
		}
	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
			d1 = Z_DVAL_P(op1);
			d2 = Z_DVAL_P(op2);
add_double:
			result = EX_VAR(opline->result.var);
			ZVAL_DOUBLE(result, d1 + d2);
			ZEND_VM_NEXT_OPCODE();
		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
			d1 = Z_DVAL_P(op1);
			d2 = (double)Z_LVAL_P(op2);
			goto add_double;
		}
	}

	ZEND_VM_DISPATCH_TO_HELPER(zend_add_helper_SPEC_TAILCALL(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_EX op1, op2));
}

static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_SUB_SPEC_CONST_CONST_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2, *result;
	double d1, d2;

	op1 = RT_CONSTANT(opline, opline->op1);
	op2 = RT_CONSTANT(opline, opline->op2);
	if (1 && IS_CONST == IS_CONST && IS_CONST == IS_CONST) {
		/* pass */
	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
			result = EX_VAR(opline->result.var);
			fast_long_sub_function(result, op1, op2);
			ZEND_VM_NEXT_OPCODE();
		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
			d1 = (double)Z_LVAL_P(op1);
			d2 = Z_DVAL_P(op2);
			goto sub_double;
		}
	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
			d1 = Z_DVAL_P(op1);
			d2 = Z_DVAL_P(op2);
sub_double:
			result = EX_VAR(opline->result.var);
			ZVAL_DOUBLE(result, d1 - d2);
			ZEND_VM_NEXT_OPCODE();
		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
			d1 = Z_DVAL_P(op1);
			d2 = (double)Z_LVAL_P(op2);
			goto sub_double;
		}
	}

	ZEND_VM_DISPATCH_TO_HELPER(zend_sub_helper_SPEC_TAILCALL(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_EX op1, op2));
}

static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_MUL_SPEC_CONST_CONST_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2, *result;
	double d1, d2;

	op1 = RT_CONSTANT(opline, opline->op1);
	op2 = RT_CONSTANT(opline, opline->op2);
	if (1 && IS_CONST == IS_CONST && IS_CONST == IS_CONST) {
		/* pass */
	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
			zend_long overflow;

			result = EX_VAR(opline->result.var);
			ZEND_SIGNED_MULTIPLY_LONG(Z_LVAL_P(op1), Z_LVAL_P(op2), Z_LVAL_P(result), Z_DVAL_P(result), overflow);
			Z_TYPE_INFO_P(result) = overflow ? IS_DOUBLE : IS_LONG;
			ZEND_VM_NEXT_OPCODE();
		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
			d1 = (double)Z_LVAL_P(op1);
			d2 = Z_DVAL_P(op2);
			goto mul_double;
		}
	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
			d1 = Z_DVAL_P(op1);
			d2 = Z_DVAL_P(op2);
mul_double:
			result = EX_VAR(opline->result.var);
			ZVAL_DOUBLE(result, d1 * d2);
			ZEND_VM_NEXT_OPCODE();
		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
			d1 = Z_DVAL_P(op1);
			d2 = (double)Z_LVAL_P(op2);
			goto mul_double;
		}
	}

	ZEND_VM_DISPATCH_TO_HELPER(zend_mul_helper_SPEC_TAILCALL(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_EX op1, op2));
}

static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_DIV_SPEC_CONST_CONST_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;

	SAVE_OPLINE();
	op1 = RT_CONSTANT(opline, opline->op1);
	op2 = RT_CONSTANT(opline, opline->op2);
	div_function(EX_VAR(opline->result.var), op1, op2);




	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_MOD_SPEC_CONST_CONST_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2, *result;

	op1 = RT_CONSTANT(opline, opline->op1);
	op2 = RT_CONSTANT(opline, opline->op2);
	if (1 && IS_CONST == IS_CONST && IS_CONST == IS_CONST) {
		/* pass */
	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
			result = EX_VAR(opline->result.var);
			if (UNEXPECTED(Z_LVAL_P(op2) == 0)) {
				ZEND_VM_TAIL_CALL(zend_mod_by_zero_helper_SPEC_TAILCALL(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
			} else if (UNEXPECTED(Z_LVAL_P(op2) == -1)) {
				/* Prevent overflow error/crash if op1==ZEND_LONG_MIN */
				ZVAL_LONG(result, 0);
			} else {
				ZVAL_LONG(result, Z_LVAL_P(op1) % Z_LVAL_P(op2));
			}
			ZEND_VM_NEXT_OPCODE();
		}
	}

	ZEND_VM_DISPATCH_TO_HELPER(zend_mod_helper_SPEC_TAILCALL(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_EX op1, op2));
}

static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_SL_SPEC_CONST_CONST_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;

	op1 = RT_CONSTANT(opline, opline->op1);
	op2 = RT_CONSTANT(opline, opline->op2);
	if (1 && IS_CONST == IS_CONST && IS_CONST == IS_CONST) {
		/* pass */
	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)
			&& EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)
			&& EXPECTED((zend_ulong)Z_LVAL_P(op2) < SIZEOF_ZEND_LONG * 8)) {
		/* Perform shift on unsigned numbers to get well-defined wrap behavior. */
		ZVAL_LONG(EX_VAR(opline->result.var),
			(zend_long) ((zend_ulong) Z_LVAL_P(op1) << Z_LVAL_P(op2)));
		ZEND_VM_NEXT_OPCODE();
	}

	ZEND_VM_DISPATCH_TO_HELPER(zend_shift_left_helper_SPEC_TAILCALL(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_EX op1, op2));
}

static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_SR_SPEC_CONST_CONST_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;

	op1 = RT_CONSTANT(opline, opline->op1);
	op2 = RT_CONSTANT(opline, opline->op2);
	if (1 && IS_CONST == IS_CONST && IS_CONST == IS_CONST) {
		/* pass */
	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)
			&& EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)
			&& EXPECTED((zend_ulong)Z_LVAL_P(op2) < SIZEOF_ZEND_LONG * 8)) {
		ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(op1) >> Z_LVAL_P(op2));
		ZEND_VM_NEXT_OPCODE();
	}

	ZEND_VM_DISPATCH_TO_HELPER(zend_shift_right_helper_SPEC_TAILCALL(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_EX op1, op2));
}

static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_POW_SPEC_CONST_CONST_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;

	SAVE_OPLINE();
	op1 = RT_CONSTANT(opline, opline->op1);
	op2 = RT_CONSTANT(opline, opline->op2);
	pow_function(EX_VAR(opline->result.var), op1, op2);




	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_IS_IDENTICAL_SPEC_CONST_CONST_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;
	bool result;

	SAVE_OPLINE();
	op1 = RT_CONSTANT(opline, opline->op1);
	op2 = RT_CONSTANT(opline, opline->op2);
	result = fast_is_identical_function(op1, op2);




	ZEND_VM_SMART_BRANCH(result, 1);
}

static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_IS_NOT_IDENTICAL_SPEC_CONST_CONST_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;
	bool result;

	SAVE_OPLINE();
	op1 = RT_CONSTANT(opline, opline->op1);
	op2 = RT_CONSTANT(opline, opline->op2);
	result = fast_is_not_identical_function(op1, op2);




	ZEND_VM_SMART_BRANCH(result, 1);
}

static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_IS_EQUAL_SPEC_CONST_CONST_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;
	double d1, d2;

	op1 = RT_CONSTANT(opline, opline->op1);
	op2 = RT_CONSTANT(opline, opline->op2);
	if (1 && IS_CONST == IS_CONST && IS_CONST == IS_CONST) {
		/* pass */
	} else if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
		if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
			if (EXPECTED(Z_LVAL_P(op1) == Z_LVAL_P(op2))) {
is_equal_true:
				ZEND_VM_SMART_BRANCH_TRUE();
			} else {
is_equal_false:
				ZEND_VM_SMART_BRANCH_FALSE();
			}
		} else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
			d1 = (double)Z_LVAL_P(op1);
			d2 = Z_DVAL_P(op2);
			goto is_equal_double;
		}
	} else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) {
		if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
			d1 = Z_DVAL_P(op1);
			d2 = Z_DVAL_P(op2);
is_equal_double:
			if (d1 == d2) {
				goto is_equal_true;
			} else {
				goto is_equal_false;
			}
		} else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
			d1 = Z_DVAL_P(op1);
			d2 = (double)Z_LVAL_P(op2);
			goto is_equal_double;
		}
	} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
		if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
			bool result = zend_fast_equal_strings(Z_STR_P(op1), Z_STR_P(op2));
			if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
				zval_ptr_dtor_str(op1);
			}
			if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
				zval_ptr_dtor_str(op2);
			}
			if (result) {
				goto is_equal_true;
			} else {
				goto is_equal_false;
			}
		}
	}
	ZEND_VM_DISPATCH_TO_HELPER(zend_is_equal_helper_SPEC_TAILCALL(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_EX op1, op2));
}

static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_IS_NOT_EQUAL_SPEC_CONST_CONST_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;
	double d1, d2;

	op1 = RT_CONSTANT(opline, opline->op1);
	op2 = RT_CONSTANT(opline, opline->op2);
	if (1 && IS_CONST == IS_CONST && IS_CONST == IS_CONST) {
		/* pass */
	} else if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
		if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
			if (EXPECTED(Z_LVAL_P(op1) != Z_LVAL_P(op2))) {
is_not_equal_true:
				ZEND_VM_SMART_BRANCH_TRUE();
			} else {
is_not_equal_false:
				ZEND_VM_SMART_BRANCH_FALSE();
			}
		} else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
			d1 = (double)Z_LVAL_P(op1);
			d2 = Z_DVAL_P(op2);
			goto is_not_equal_double;
		}
	} else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) {
		if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
			d1 = Z_DVAL_P(op1);
			d2 = Z_DVAL_P(op2);
is_not_equal_double:
			if (d1 != d2) {
				goto is_not_equal_true;
			} else {
				goto is_not_equal_false;
			}
		} else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
			d1 = Z_DVAL_P(op1);
			d2 = (double)Z_LVAL_P(op2);
			goto is_not_equal_double;
		}
	} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
		if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
			bool result = zend_fast_equal_strings(Z_STR_P(op1), Z_STR_P(op2));
			if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
				zval_ptr_dtor_str(op1);
			}
			if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
				zval_ptr_dtor_str(op2);
			}
			if (!result) {
				goto is_not_equal_true;
			} else {
				goto is_not_equal_false;
			}
		}
	}
	ZEND_VM_DISPATCH_TO_HELPER(zend_is_not_equal_helper_SPEC_TAILCALL(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_EX op1, op2));
}

static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_IS_SMALLER_SPEC_CONST_CONST_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;
	double d1, d2;

	op1 = RT_CONSTANT(opline, opline->op1);
	op2 = RT_CONSTANT(opline, opline->op2);
	if (1 && IS_CONST == IS_CONST && IS_CONST == IS_CONST) {
		/* pass */
	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
			if (EXPECTED(Z_LVAL_P(op1) < Z_LVAL_P(op2))) {
is_smaller_true:
				ZEND_VM_SMART_BRANCH_TRUE();
			} else {
is_smaller_false:
				ZEND_VM_SMART_BRANCH_FALSE();
			}
		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
			d1 = (double)Z_LVAL_P(op1);
			d2 = Z_DVAL_P(op2);
			goto is_smaller_double;
		}
	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
			d1 = Z_DVAL_P(op1);
			d2 = Z_DVAL_P(op2);
is_smaller_double:
			if (d1 < d2) {
				goto is_smaller_true;
			} else {
				goto is_smaller_false;
			}
		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
			d1 = Z_DVAL_P(op1);
			d2 = (double)Z_LVAL_P(op2);
			goto is_smaller_double;
		}
	}
	ZEND_VM_DISPATCH_TO_HELPER(zend_is_smaller_helper_SPEC_TAILCALL(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_EX op1, op2));
}

static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_CONST_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;
	double d1, d2;

	op1 = RT_CONSTANT(opline, opline->op1);
	op2 = RT_CONSTANT(opline, opline->op2);
	if (1 && IS_CONST == IS_CONST && IS_CONST == IS_CONST) {
		/* pass */
	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
			if (EXPECTED(Z_LVAL_P(op1) <= Z_LVAL_P(op2))) {
is_smaller_or_equal_true:
				ZEND_VM_SMART_BRANCH_TRUE();
				ZVAL_TRUE(EX_VAR(opline->result.var));
				ZEND_VM_NEXT_OPCODE();
			} else {
is_smaller_or_equal_false:
				ZEND_VM_SMART_BRANCH_FALSE();
				ZVAL_FALSE(EX_VAR(opline->result.var));
				ZEND_VM_NEXT_OPCODE();
			}
		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
			d1 = (double)Z_LVAL_P(op1);
			d2 = Z_DVAL_P(op2);
			goto is_smaller_or_equal_double;
		}
	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
			d1 = Z_DVAL_P(op1);
			d2 = Z_DVAL_P(op2);
is_smaller_or_equal_double:
			if (d1 <= d2) {
				goto is_smaller_or_equal_true;
			} else {
				goto is_smaller_or_equal_false;
			}
		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
			d1 = Z_DVAL_P(op1);
			d2 = (double)Z_LVAL_P(op2);
			goto is_smaller_or_equal_double;
		}
	}
	ZEND_VM_DISPATCH_TO_HELPER(zend_is_smaller_or_equal_helper_SPEC_TAILCALL(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_EX op1, op2));
}

static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_SPACESHIP_SPEC_CONST_CONST_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;

	SAVE_OPLINE();
	op1 = RT_CONSTANT(opline, opline->op1);
	op2 = RT_CONSTANT(opline, opline->op2);
	compare_function(EX_VAR(opline->result.var), op1, op2);




	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_BW_OR_SPEC_CONST_CONST_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;

	op1 = RT_CONSTANT(opline, opline->op1);
	op2 = RT_CONSTANT(opline, opline->op2);
	if (1 && IS_CONST == IS_CONST && IS_CONST == IS_CONST) {
		/* pass */
	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)
			&& EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
		ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(op1) | Z_LVAL_P(op2));
		ZEND_VM_NEXT_OPCODE();
	}

	ZEND_VM_DISPATCH_TO_HELPER(zend_bw_or_helper_SPEC_TAILCALL(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_EX op1, op2));
}

static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_BW_AND_SPEC_CONST_CONST_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;

	op1 = RT_CONSTANT(opline, opline->op1);
	op2 = RT_CONSTANT(opline, opline->op2);
	if (1 && IS_CONST == IS_CONST && IS_CONST == IS_CONST) {
		/* pass */
	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)
			&& EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
		ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(op1) & Z_LVAL_P(op2));
		ZEND_VM_NEXT_OPCODE();
	}

	ZEND_VM_DISPATCH_TO_HELPER(zend_bw_and_helper_SPEC_TAILCALL(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_EX op1, op2));
}

static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_BW_XOR_SPEC_CONST_CONST_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;

	op1 = RT_CONSTANT(opline, opline->op1);
	op2 = RT_CONSTANT(opline, opline->op2);
	if (1 && IS_CONST == IS_CONST && IS_CONST == IS_CONST) {
		/* pass */
	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)
			&& EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
		ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(op1) ^ Z_LVAL_P(op2));
		ZEND_VM_NEXT_OPCODE();
	}

	ZEND_VM_DISPATCH_TO_HELPER(zend_bw_xor_helper_SPEC_TAILCALL(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_EX op1, op2));
}

static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_BOOL_XOR_SPEC_CONST_CONST_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;

	SAVE_OPLINE();
	op1 = RT_CONSTANT(opline, opline->op1);
	op2 = RT_CONSTANT(opline, opline->op2);
	boolean_xor_function(EX_VAR(opline->result.var), op1, op2);




	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_FETCH_DIM_R_SPEC_CONST_CONST_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *container, *dim, *value;

	SAVE_OPLINE();
	container = RT_CONSTANT(opline, opline->op1);
	dim = RT_CONSTANT(opline, opline->op2);
	if (IS_CONST != IS_CONST) {
		if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
fetch_dim_r_array:
			value = zend_fetch_dimension_address_inner(Z_ARRVAL_P(container), dim, IS_CONST, BP_VAR_R EXECUTE_DATA_CC);
			ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
		} else if (EXPECTED(Z_TYPE_P(container) == IS_REFERENCE)) {
			container = Z_REFVAL_P(container);
			if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
				goto fetch_dim_r_array;
			} else {
				goto fetch_dim_r_slow;
			}
		} else {
fetch_dim_r_slow:
			if (IS_CONST == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
				dim++;
			}
			zend_fetch_dimension_address_read_R_slow(container, dim OPLINE_CC EXECUTE_DATA_CC);
		}
	} else {
		zend_fetch_dimension_address_read_R(container, dim, IS_CONST OPLINE_CC EXECUTE_DATA_CC);
	}




	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_FETCH_DIM_IS_SPEC_CONST_CONST_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *container;

	SAVE_OPLINE();
	container = RT_CONSTANT(opline, opline->op1);
	zend_fetch_dimension_address_read_IS(container, RT_CONSTANT(opline, opline->op2), IS_CONST OPLINE_CC EXECUTE_DATA_CC);




	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_FETCH_DIM_FUNC_ARG_SPEC_CONST_CONST_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
#if 0
	USE_OPLINE
#endif

	if (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) {
		if ((IS_CONST & (IS_CONST|IS_TMP_VAR))) {
			ZEND_VM_TAIL_CALL(zend_use_tmp_in_write_context_helper_SPEC_TAILCALL(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
		}
		ZEND_VM_TAIL_CALL(ZEND_NULL_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
	} else {
		if (IS_CONST == IS_UNUSED) {
			ZEND_VM_TAIL_CALL(zend_use_undef_in_read_context_helper_SPEC_TAILCALL(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
		}
		ZEND_VM_TAIL_CALL(ZEND_FETCH_DIM_R_SPEC_CONST_CONST_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
	}
}

static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_FETCH_OBJ_R_SPEC_CONST_CONST_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *container;
	void **cache_slot = NULL;

	SAVE_OPLINE();
	container = RT_CONSTANT(opline, opline->op1);

	if (IS_CONST == IS_CONST ||
	    (IS_CONST != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
		do {
			if ((IS_CONST & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
				container = Z_REFVAL_P(container);
				if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
					break;
				}
			}
			if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
				ZVAL_UNDEFINED_OP1();
			}
			zend_wrong_property_read(container, RT_CONSTANT(opline, opline->op2));
			ZVAL_NULL(EX_VAR(opline->result.var));
			goto fetch_obj_r_finish;
		} while (0);
	}

	/* here we are sure we are dealing with an object */
	do {
		zend_object *zobj = Z_OBJ_P(container);
		zend_string *name, *tmp_name;
		zval *retval;

		if (IS_CONST == IS_CONST) {
			cache_slot = CACHE_ADDR(opline->extended_value & ~ZEND_FETCH_REF /* FUNC_ARG fetch may contain it */);

			if (EXPECTED(zobj->ce == CACHED_PTR_EX(cache_slot))) {
				uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);

				if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
fetch_obj_r_simple:
					retval = OBJ_PROP(zobj, prop_offset);
					if (EXPECTED(Z_TYPE_INFO_P(retval) != IS_UNDEF)) {
						if (0 || (IS_CONST & (IS_TMP_VAR|IS_VAR)) != 0) {
							goto fetch_obj_r_copy;
						} else {
fetch_obj_r_fast_copy:
							ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
							ZEND_VM_NEXT_OPCODE();
						}
					}
				} else if (UNEXPECTED(IS_HOOKED_PROPERTY_OFFSET(prop_offset))) {
					zend_property_info *prop_info = CACHED_PTR_EX(cache_slot + 2);
					if (ZEND_IS_PROPERTY_HOOK_SIMPLE_READ(prop_offset)) {
						prop_offset = prop_info->offset;
						goto fetch_obj_r_simple;
					} else if (EXPECTED(ZEND_IS_PROPERTY_HOOK_SIMPLE_GET(prop_offset))) {
						zend_function *hook = prop_info->hooks[ZEND_PROPERTY_HOOK_GET];
						ZEND_ASSERT(hook->type == ZEND_USER_FUNCTION);
						ZEND_ASSERT(RUN_TIME_CACHE(&hook->op_array));

						uint32_t call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_HAS_THIS;
						if (IS_CONST & IS_CV) {
							GC_ADDREF(zobj);
						}
						if (IS_CONST & (IS_CV|IS_VAR|IS_TMP_VAR)) {
							call_info |= ZEND_CALL_RELEASE_THIS;
						}
						zend_execute_data *call = zend_vm_stack_push_call_frame(call_info, hook, 0, zobj);
						call->prev_execute_data = execute_data;
						call->call = NULL;
						call->return_value = EX_VAR(opline->result.var);
						call->run_time_cache = RUN_TIME_CACHE(&hook->op_array);

						execute_data = call;
						EG(current_execute_data) = execute_data;
						zend_init_cvs(0, hook->op_array.last_var EXECUTE_DATA_CC);

#if defined(ZEND_VM_IP_GLOBAL_REG) && ((ZEND_VM_KIND == ZEND_VM_KIND_CALL) || (ZEND_VM_KIND == ZEND_VM_KIND_HYBRID))
						opline = hook->op_array.opcodes;
#else
						EX(opline) = hook->op_array.opcodes;
#endif
						LOAD_OPLINE_EX();




						ZEND_VM_ENTER_EX();
					}
					/* Fall through to read_property for hooks. */
				} else if (EXPECTED(zobj->properties != NULL)) {
					ZEND_ASSERT(IS_DYNAMIC_PROPERTY_OFFSET(prop_offset));
					name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
					if (!IS_UNKNOWN_DYNAMIC_PROPERTY_OFFSET(prop_offset)) {
						uintptr_t idx = ZEND_DECODE_DYN_PROP_OFFSET(prop_offset);

						if (EXPECTED(idx < zobj->properties->nNumUsed * sizeof(Bucket))) {
							Bucket *p = (Bucket*)((char*)zobj->properties->arData + idx);

							if (EXPECTED(p->key == name) ||
							    (EXPECTED(p->h == ZSTR_H(name)) &&
							     EXPECTED(p->key != NULL) &&
							     EXPECTED(zend_string_equal_content(p->key, name)))) {
								retval = &p->val;
								if (0 || (IS_CONST & (IS_TMP_VAR|IS_VAR)) != 0) {
									goto fetch_obj_r_copy;
								} else {
									goto fetch_obj_r_fast_copy;
								}
							}
						}
						CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_DYNAMIC_PROPERTY_OFFSET);
					}
					retval = zend_hash_find_known_hash(zobj->properties, name);
					if (EXPECTED(retval)) {
						uintptr_t idx = (char*)retval - (char*)zobj->properties->arData;
						CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_ENCODE_DYN_PROP_OFFSET(idx));
						if (0 || (IS_CONST & (IS_TMP_VAR|IS_VAR)) != 0) {
							goto fetch_obj_r_copy;
						} else {
							goto fetch_obj_r_fast_copy;
						}
					}
				}
			}
			name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
		} else {
			name = zval_try_get_tmp_string(RT_CONSTANT(opline, opline->op2), &tmp_name);
			if (UNEXPECTED(!name)) {
				ZVAL_UNDEF(EX_VAR(opline->result.var));
				break;
			}
		}

#if ZEND_DEBUG
		/* For non-standard object handlers, verify a declared property type in debug builds.
		 * Fetch prop_info before calling read_property(), as it may deallocate the object. */
		zend_property_info *prop_info = NULL;
		if (zobj->handlers->read_property != zend_std_read_property) {
			prop_info = zend_get_property_info(zobj->ce, name, /* silent */ true);
		}
#endif
		retval = zobj->handlers->read_property(zobj, name, BP_VAR_R, cache_slot, EX_VAR(opline->result.var));
#if ZEND_DEBUG
		if (!EG(exception) && prop_info && prop_info != ZEND_WRONG_PROPERTY_INFO
				&& ZEND_TYPE_IS_SET(prop_info->type)) {
			ZVAL_OPT_DEREF(retval);
			zend_verify_property_type(prop_info, retval, /* strict */ true);
		}
#endif

		if (IS_CONST != IS_CONST) {
			zend_tmp_string_release(tmp_name);
		}

		if (retval != EX_VAR(opline->result.var)) {
fetch_obj_r_copy:
			ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
		} else if (UNEXPECTED(Z_ISREF_P(retval))) {
			zend_unwrap_reference(retval);
		}
	} while (0);

fetch_obj_r_finish:




	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_FETCH_OBJ_IS_SPEC_CONST_CONST_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *container;
	void **cache_slot = NULL;

	SAVE_OPLINE();
	container = RT_CONSTANT(opline, opline->op1);

	if (IS_CONST == IS_CONST ||
	    (IS_CONST != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
		do {
			if ((IS_CONST & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
				container = Z_REFVAL_P(container);
				if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
					break;
				}
			}
			if (IS_CONST == IS_CV && Z_TYPE_P(EX_VAR(opline->op2.var)) == IS_UNDEF) {
				ZVAL_UNDEFINED_OP2();
			}
			ZVAL_NULL(EX_VAR(opline->result.var));
			goto fetch_obj_is_finish;
		} while (0);
	}

	/* here we are sure we are dealing with an object */
	do {
		zend_object *zobj = Z_OBJ_P(container);
		zend_string *name, *tmp_name;
		zval *retval;

		if (IS_CONST == IS_CONST) {
			cache_slot = CACHE_ADDR(opline->extended_value);

			if (EXPECTED(zobj->ce == CACHED_PTR_EX(cache_slot))) {
				uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);

				if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
fetch_obj_is_simple:
					retval = OBJ_PROP(zobj, prop_offset);
					if (EXPECTED(Z_TYPE_P(retval) != IS_UNDEF)) {
						if (0 || (IS_CONST & (IS_TMP_VAR|IS_VAR)) != 0) {
							goto fetch_obj_is_copy;
						} else {
fetch_obj_is_fast_copy:
							ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
							ZEND_VM_NEXT_OPCODE();
						}
					}
				} else if (UNEXPECTED(IS_HOOKED_PROPERTY_OFFSET(prop_offset))) {
					if (ZEND_IS_PROPERTY_HOOK_SIMPLE_READ(prop_offset)) {
						zend_property_info *prop_info = CACHED_PTR_EX(cache_slot + 2);
						prop_offset = prop_info->offset;
						goto fetch_obj_is_simple;
					}
					/* Fall through to read_property for hooks. */
				} else if (EXPECTED(zobj->properties != NULL)) {
					ZEND_ASSERT(IS_DYNAMIC_PROPERTY_OFFSET(prop_offset));
					name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
					if (!IS_UNKNOWN_DYNAMIC_PROPERTY_OFFSET(prop_offset)) {
						uintptr_t idx = ZEND_DECODE_DYN_PROP_OFFSET(prop_offset);

						if (EXPECTED(idx < zobj->properties->nNumUsed * sizeof(Bucket))) {
							Bucket *p = (Bucket*)((char*)zobj->properties->arData + idx);

							if (EXPECTED(p->key == name) ||
							    (EXPECTED(p->h == ZSTR_H(name)) &&
							     EXPECTED(p->key != NULL) &&
							     EXPECTED(zend_string_equal_content(p->key, name)))) {
								retval = &p->val;
								if (0 || (IS_CONST & (IS_TMP_VAR|IS_VAR)) != 0) {
									goto fetch_obj_is_copy;
								} else {
									goto fetch_obj_is_fast_copy;
								}
							}
						}
						CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_DYNAMIC_PROPERTY_OFFSET);
					}
					retval = zend_hash_find_known_hash(zobj->properties, name);
					if (EXPECTED(retval)) {
						uintptr_t idx = (char*)retval - (char*)zobj->properties->arData;
						CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_ENCODE_DYN_PROP_OFFSET(idx));
						if (0 || (IS_CONST & (IS_TMP_VAR|IS_VAR)) != 0) {
							goto fetch_obj_is_copy;
						} else {
							goto fetch_obj_is_fast_copy;
						}
					}
				}
			}
			name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
		} else {
			name = zval_try_get_tmp_string(RT_CONSTANT(opline, opline->op2), &tmp_name);
			if (UNEXPECTED(!name)) {
				ZVAL_UNDEF(EX_VAR(opline->result.var));
				break;
			}
		}

		retval = zobj->handlers->read_property(zobj, name, BP_VAR_IS, cache_slot, EX_VAR(opline->result.var));

		if (IS_CONST != IS_CONST) {
			zend_tmp_string_release(tmp_name);
		}

		if (retval != EX_VAR(opline->result.var)) {
fetch_obj_is_copy:
			ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
		} else if (UNEXPECTED(Z_ISREF_P(retval))) {
			zend_unwrap_reference(retval);
		}
	} while (0);

fetch_obj_is_finish:




	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CONST_CONST_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
#if 0
	USE_OPLINE
#endif

	if (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) {
		/* Behave like FETCH_OBJ_W */
		if ((IS_CONST & (IS_CONST|IS_TMP_VAR))) {
			ZEND_VM_TAIL_CALL(zend_use_tmp_in_write_context_helper_SPEC_TAILCALL(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
		}
		ZEND_VM_TAIL_CALL(ZEND_NULL_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
	} else {
		ZEND_VM_TAIL_CALL(ZEND_FETCH_OBJ_R_SPEC_CONST_CONST_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
	}
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_FETCH_LIST_R_SPEC_CONST_CONST_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *container;

	SAVE_OPLINE();
	container = RT_CONSTANT(opline, opline->op1);
	zend_fetch_dimension_address_LIST_r(container, RT_CONSTANT(opline, opline->op2), IS_CONST OPLINE_CC EXECUTE_DATA_CC);


	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_FAST_CONCAT_SPEC_CONST_CONST_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;
	zend_string *op1_str, *op2_str, *str;


	op1 = RT_CONSTANT(opline, opline->op1);
	op2 = RT_CONSTANT(opline, opline->op2);
	if ((IS_CONST == IS_CONST || EXPECTED(Z_TYPE_P(op1) == IS_STRING)) &&
	    (IS_CONST == IS_CONST || EXPECTED(Z_TYPE_P(op2) == IS_STRING))) {
		zend_string *op1_str = Z_STR_P(op1);
		zend_string *op2_str = Z_STR_P(op2);
		zend_string *str;
		uint32_t flags = ZSTR_GET_COPYABLE_CONCAT_PROPERTIES_BOTH(op1_str, op2_str);

		if (IS_CONST != IS_CONST && UNEXPECTED(ZSTR_LEN(op1_str) == 0)) {
			if (IS_CONST == IS_CONST || IS_CONST == IS_CV) {
				ZVAL_STR_COPY(EX_VAR(opline->result.var), op2_str);
			} else {
				ZVAL_STR(EX_VAR(opline->result.var), op2_str);
			}
			if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
				zend_string_release_ex(op1_str, 0);
			}
		} else if (IS_CONST != IS_CONST && UNEXPECTED(ZSTR_LEN(op2_str) == 0)) {
			if (IS_CONST == IS_CONST || IS_CONST == IS_CV) {
				ZVAL_STR_COPY(EX_VAR(opline->result.var), op1_str);
			} else {
				ZVAL_STR(EX_VAR(opline->result.var), op1_str);
			}
			if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
				zend_string_release_ex(op2_str, 0);
			}
		} else if (IS_CONST != IS_CONST && IS_CONST != IS_CV &&
		    !ZSTR_IS_INTERNED(op1_str) && GC_REFCOUNT(op1_str) == 1) {
			size_t len = ZSTR_LEN(op1_str);

			str = zend_string_extend(op1_str, len + ZSTR_LEN(op2_str), 0);
			memcpy(ZSTR_VAL(str) + len, ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
			GC_ADD_FLAGS(str, flags);
			ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
			if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
				zend_string_release_ex(op2_str, 0);
			}
		} else {
			str = zend_string_alloc(ZSTR_LEN(op1_str) + ZSTR_LEN(op2_str), 0);
			memcpy(ZSTR_VAL(str), ZSTR_VAL(op1_str), ZSTR_LEN(op1_str));
			memcpy(ZSTR_VAL(str) + ZSTR_LEN(op1_str), ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
			GC_ADD_FLAGS(str, flags);
			ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
			if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
				zend_string_release_ex(op1_str, 0);
			}
			if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
				zend_string_release_ex(op2_str, 0);
			}
		}
		ZEND_VM_NEXT_OPCODE();
	}

	SAVE_OPLINE();
	if (IS_CONST == IS_CONST) {
		op1_str = Z_STR_P(op1);
	} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
		op1_str = zend_string_copy(Z_STR_P(op1));
	} else {
		if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
			ZVAL_UNDEFINED_OP1();
		}
		op1_str = zval_get_string_func(op1);
	}
	if (IS_CONST == IS_CONST) {
		op2_str = Z_STR_P(op2);
	} else if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
		op2_str = zend_string_copy(Z_STR_P(op2));
	} else {
		if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(op2) == IS_UNDEF)) {
			ZVAL_UNDEFINED_OP2();
		}
		op2_str = zval_get_string_func(op2);
	}
	do {
		if (IS_CONST != IS_CONST) {
			if (UNEXPECTED(ZSTR_LEN(op1_str) == 0)) {
				if (IS_CONST == IS_CONST) {
					if (UNEXPECTED(Z_REFCOUNTED_P(op2))) {
						GC_ADDREF(op2_str);
					}
				}
				ZVAL_STR(EX_VAR(opline->result.var), op2_str);
				zend_string_release_ex(op1_str, 0);
				break;
			}
		}
		if (IS_CONST != IS_CONST) {
			if (UNEXPECTED(ZSTR_LEN(op2_str) == 0)) {
				if (IS_CONST == IS_CONST) {
					if (UNEXPECTED(Z_REFCOUNTED_P(op1))) {
						GC_ADDREF(op1_str);
					}
				}
				ZVAL_STR(EX_VAR(opline->result.var), op1_str);
				zend_string_release_ex(op2_str, 0);
				break;
			}
		}
		str = zend_string_alloc(ZSTR_LEN(op1_str) + ZSTR_LEN(op2_str), 0);
		memcpy(ZSTR_VAL(str), ZSTR_VAL(op1_str), ZSTR_LEN(op1_str));
		memcpy(ZSTR_VAL(str) + ZSTR_LEN(op1_str), ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);

		ZSTR_COPY_CONCAT_PROPERTIES_BOTH(str, op1_str, op2_str);
		ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
		if (IS_CONST != IS_CONST) {
			zend_string_release_ex(op1_str, 0);
		}
		if (IS_CONST != IS_CONST) {
			zend_string_release_ex(op2_str, 0);
		}
	} while (0);




	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_INIT_METHOD_CALL_SPEC_CONST_CONST_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *function_name;
	zval *object;
	zend_function *fbc;
	zend_class_entry *called_scope;
	zend_object *obj;
	zend_execute_data *call;
	uint32_t call_info;

	SAVE_OPLINE();

	object = RT_CONSTANT(opline, opline->op1);

	if (IS_CONST != IS_CONST) {
		function_name = RT_CONSTANT(opline, opline->op2);
	}

	if (IS_CONST != IS_CONST &&
	    UNEXPECTED(Z_TYPE_P(function_name) != IS_STRING)) {
		do {
			if ((IS_CONST & (IS_VAR|IS_CV)) && Z_ISREF_P(function_name)) {
				function_name = Z_REFVAL_P(function_name);
				if (EXPECTED(Z_TYPE_P(function_name) == IS_STRING)) {
					break;
				}
			} else if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) {
				ZVAL_UNDEFINED_OP2();
				if (UNEXPECTED(EG(exception) != NULL)) {


					HANDLE_EXCEPTION();
				}
			}
			zend_throw_error(NULL, "Method name must be a string");




			HANDLE_EXCEPTION();
		} while (0);
	}

	if (IS_CONST == IS_UNUSED) {
		obj = Z_OBJ_P(object);
	} else {
		do {
			if (IS_CONST != IS_CONST && EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
				obj = Z_OBJ_P(object);
			} else {
				if ((IS_CONST & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(object))) {
					zend_reference *ref = Z_REF_P(object);

					object = &ref->val;
					if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
						obj = Z_OBJ_P(object);
						if (IS_CONST & IS_VAR) {
							if (UNEXPECTED(GC_DELREF(ref) == 0)) {
								efree_size(ref, sizeof(zend_reference));
							} else {
								Z_ADDREF_P(object);
							}
						}
						break;
					}
				}
				if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
					object = ZVAL_UNDEFINED_OP1();
					if (UNEXPECTED(EG(exception) != NULL)) {
						if (IS_CONST != IS_CONST) {


						}
						HANDLE_EXCEPTION();
					}
				}
				if (IS_CONST == IS_CONST) {
					function_name = RT_CONSTANT(opline, opline->op2);
				}
				zend_invalid_method_call(object, function_name);




				HANDLE_EXCEPTION();
			}
		} while (0);
	}

	called_scope = obj->ce;

	if (IS_CONST == IS_CONST &&
	    EXPECTED(CACHED_PTR(opline->result.num) == called_scope)) {
		fbc = CACHED_PTR(opline->result.num + sizeof(void*));
	} else {
		zend_object *orig_obj = obj;

		if (IS_CONST == IS_CONST) {
			function_name = RT_CONSTANT(opline, opline->op2);
		}

		/* First, locate the function. */
		fbc = obj->handlers->get_method(&obj, Z_STR_P(function_name), ((IS_CONST == IS_CONST) ? (RT_CONSTANT(opline, opline->op2) + 1) : NULL));
		if (UNEXPECTED(fbc == NULL)) {
			if (EXPECTED(!EG(exception))) {
				zend_undefined_method(orig_obj->ce, Z_STR_P(function_name));
			}


			if ((IS_CONST & (IS_VAR|IS_TMP_VAR)) && GC_DELREF(orig_obj) == 0) {
				zend_objects_store_del(orig_obj);
			}
			HANDLE_EXCEPTION();
		}
		if (IS_CONST == IS_CONST &&
		    EXPECTED(!(fbc->common.fn_flags & (ZEND_ACC_CALL_VIA_TRAMPOLINE|ZEND_ACC_NEVER_CACHE))) &&
		    EXPECTED(obj == orig_obj)) {
			CACHE_POLYMORPHIC_PTR(opline->result.num, called_scope, fbc);
		}
		if ((IS_CONST & (IS_VAR|IS_TMP_VAR)) && UNEXPECTED(obj != orig_obj)) {
			GC_ADDREF(obj); /* For $this pointer */
			if (GC_DELREF(orig_obj) == 0) {
				zend_objects_store_del(orig_obj);
			}
		}
		if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!RUN_TIME_CACHE(&fbc->op_array))) {
			init_func_run_time_cache(&fbc->op_array);
		}
	}

	if (IS_CONST != IS_CONST) {


	}

	call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_HAS_THIS;
	if (UNEXPECTED((fbc->common.fn_flags & ZEND_ACC_STATIC) != 0)) {
		if ((IS_CONST & (IS_VAR|IS_TMP_VAR)) && GC_DELREF(obj) == 0) {
			zend_objects_store_del(obj);
			if (UNEXPECTED(EG(exception))) {
				HANDLE_EXCEPTION();
			}
		}
		/* call static method */
		obj = (zend_object*)called_scope;
		call_info = ZEND_CALL_NESTED_FUNCTION;
	} else if (IS_CONST & (IS_VAR|IS_TMP_VAR|IS_CV)) {
		if (IS_CONST == IS_CV) {
			GC_ADDREF(obj); /* For $this pointer */
		}
		/* CV may be changed indirectly (e.g. when it's a reference) */
		call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_HAS_THIS | ZEND_CALL_RELEASE_THIS;
	}

	call = zend_vm_stack_push_call_frame(call_info,
		fbc, opline->extended_value, obj);
	call->prev_execute_data = EX(call);
	EX(call) = call;

	ZEND_VM_NEXT_OPCODE();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_INIT_STATIC_METHOD_CALL_SPEC_CONST_CONST_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *function_name;
	zend_class_entry *ce;
	uint32_t call_info;
	zend_function *fbc;
	zend_execute_data *call;

	SAVE_OPLINE();

	if (IS_CONST == IS_CONST) {
		/* no function found. try a static method in class */
		ce = CACHED_PTR(opline->result.num);
		if (UNEXPECTED(ce == NULL)) {
			ce = zend_fetch_class_by_name(Z_STR_P(RT_CONSTANT(opline, opline->op1)), Z_STR_P(RT_CONSTANT(opline, opline->op1) + 1), ZEND_FETCH_CLASS_DEFAULT | ZEND_FETCH_CLASS_EXCEPTION);
			if (UNEXPECTED(ce == NULL)) {


				HANDLE_EXCEPTION();
			}
			if (IS_CONST != IS_CONST) {
				CACHE_PTR(opline->result.num, ce);
			}
		}
	} else if (IS_CONST == IS_UNUSED) {
		ce = zend_fetch_class(NULL, opline->op1.num);
		if (UNEXPECTED(ce == NULL)) {


			HANDLE_EXCEPTION();
		}
	} else {
		ce = Z_CE_P(EX_VAR(opline->op1.var));
	}

	if (IS_CONST == IS_CONST &&
	    IS_CONST == IS_CONST &&
	    EXPECTED((fbc = CACHED_PTR(opline->result.num + sizeof(void*))) != NULL)) {
		/* nothing to do */
	} else if (IS_CONST != IS_CONST &&
	           IS_CONST == IS_CONST &&
	           EXPECTED(CACHED_PTR(opline->result.num) == ce)) {
		fbc = CACHED_PTR(opline->result.num + sizeof(void*));
	} else if (IS_CONST != IS_UNUSED) {
		function_name = RT_CONSTANT(opline, opline->op2);
		if (IS_CONST != IS_CONST) {
			if (UNEXPECTED(Z_TYPE_P(function_name) != IS_STRING)) {
				do {
					if (IS_CONST & (IS_VAR|IS_CV) && Z_ISREF_P(function_name)) {
						function_name = Z_REFVAL_P(function_name);
						if (EXPECTED(Z_TYPE_P(function_name) == IS_STRING)) {
							break;
						}
					} else if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) {
						ZVAL_UNDEFINED_OP2();
						if (UNEXPECTED(EG(exception) != NULL)) {
							HANDLE_EXCEPTION();
						}
					}
					zend_throw_error(NULL, "Method name must be a string");


					HANDLE_EXCEPTION();
				} while (0);
			}
		}

		if (ce->get_static_method) {
			fbc = ce->get_static_method(ce, Z_STR_P(function_name));
		} else {
			fbc = zend_std_get_static_method(ce, Z_STR_P(function_name), ((IS_CONST == IS_CONST) ? (RT_CONSTANT(opline, opline->op2) + 1) : NULL));
		}
		if (UNEXPECTED(fbc == NULL)) {
			if (EXPECTED(!EG(exception))) {
				zend_undefined_method(ce, Z_STR_P(function_name));
			}


			HANDLE_EXCEPTION();
		}
		if (IS_CONST == IS_CONST &&
		    EXPECTED(!(fbc->common.fn_flags & (ZEND_ACC_CALL_VIA_TRAMPOLINE|ZEND_ACC_NEVER_CACHE))) &&
			EXPECTED(!(fbc->common.scope->ce_flags & ZEND_ACC_TRAIT))) {
			CACHE_POLYMORPHIC_PTR(opline->result.num, ce, fbc);
		}
		if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!RUN_TIME_CACHE(&fbc->op_array))) {
			init_func_run_time_cache(&fbc->op_array);
		}
		if (IS_CONST != IS_CONST) {


		}
	} else {
		if (UNEXPECTED(ce->constructor == NULL)) {
			zend_throw_error(NULL, "Cannot call constructor");
			HANDLE_EXCEPTION();
		}
		if (Z_TYPE(EX(This)) == IS_OBJECT && Z_OBJ(EX(This))->ce != ce->constructor->common.scope && (ce->constructor->common.fn_flags & ZEND_ACC_PRIVATE)) {
			zend_throw_error(NULL, "Cannot call private %s::__construct()", ZSTR_VAL(ce->name));
			HANDLE_EXCEPTION();
		}
		fbc = ce->constructor;
		if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!RUN_TIME_CACHE(&fbc->op_array))) {
			init_func_run_time_cache(&fbc->op_array);
		}
	}

	if (!(fbc->common.fn_flags & ZEND_ACC_STATIC)) {
		if (Z_TYPE(EX(This)) == IS_OBJECT && instanceof_function(Z_OBJCE(EX(This)), ce)) {
			ce = (zend_class_entry*)Z_OBJ(EX(This));
			call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_HAS_THIS;
		} else {
			zend_non_static_method_call(fbc);
			HANDLE_EXCEPTION();
		}
	} else {
		/* previous opcode is ZEND_FETCH_CLASS */
		if (IS_CONST == IS_UNUSED
		 && ((opline->op1.num & ZEND_FETCH_CLASS_MASK) == ZEND_FETCH_CLASS_PARENT ||
		     (opline->op1.num & ZEND_FETCH_CLASS_MASK) == ZEND_FETCH_CLASS_SELF)) {
			if (Z_TYPE(EX(This)) == IS_OBJECT) {
				ce = Z_OBJCE(EX(This));
			} else {
				ce = Z_CE(EX(This));
			}
		}
		call_info = ZEND_CALL_NESTED_FUNCTION;
	}

	call = zend_vm_stack_push_call_frame(call_info,
		fbc, opline->extended_value, ce);
	call->prev_execute_data = EX(call);
	EX(call) = call;

	ZEND_VM_NEXT_OPCODE();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_INIT_USER_CALL_SPEC_CONST_CONST_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *function_name;
	zend_fcall_info_cache fcc;
	char *error = NULL;
	zend_function *func;
	void *object_or_called_scope;
	zend_execute_data *call;
	uint32_t call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_DYNAMIC;

	SAVE_OPLINE();
	function_name = RT_CONSTANT(opline, opline->op2);
	if (zend_is_callable_ex(function_name, NULL, 0, NULL, &fcc, &error)) {
		ZEND_ASSERT(!error);

		/* Deprecation can be emitted from zend_is_callable_ex(), which can
		 * invoke a user error handler and throw an exception.
		 * For the CONST and CV case we reuse the same exception block below
		 * to make sure we don't increase VM size too much. */
		if (!(IS_CONST & (IS_TMP_VAR|IS_VAR)) && UNEXPECTED(EG(exception))) {


			HANDLE_EXCEPTION();
		}

		func = fcc.function_handler;
		object_or_called_scope = fcc.called_scope;
		if (func->common.fn_flags & ZEND_ACC_CLOSURE) {
			/* Delay closure destruction until its invocation */
			GC_ADDREF(ZEND_CLOSURE_OBJECT(func));
			call_info |= ZEND_CALL_CLOSURE;
			if (func->common.fn_flags & ZEND_ACC_FAKE_CLOSURE) {
				call_info |= ZEND_CALL_FAKE_CLOSURE;
			}
			if (fcc.object) {
				object_or_called_scope = fcc.object;
				call_info |= ZEND_CALL_HAS_THIS;
			}
		} else if (fcc.object) {
			GC_ADDREF(fcc.object); /* For $this pointer */
			object_or_called_scope = fcc.object;
			call_info |= ZEND_CALL_RELEASE_THIS | ZEND_CALL_HAS_THIS;
		}


		if ((IS_CONST & (IS_TMP_VAR|IS_VAR)) && UNEXPECTED(EG(exception))) {
			if (call_info & ZEND_CALL_CLOSURE) {
				zend_object_release(ZEND_CLOSURE_OBJECT(func));
			} else if (call_info & ZEND_CALL_RELEASE_THIS) {
				zend_object_release(fcc.object);
			}
			HANDLE_EXCEPTION();
		}

		if (EXPECTED(func->type == ZEND_USER_FUNCTION) && UNEXPECTED(!RUN_TIME_CACHE(&func->op_array))) {
			init_func_run_time_cache(&func->op_array);
		}
	} else {
		zend_type_error("%s(): Argument #1 ($callback) must be a valid callback, %s", Z_STRVAL_P(RT_CONSTANT(opline, opline->op1)), error);
		efree(error);


		HANDLE_EXCEPTION();
	}

	call = zend_vm_stack_push_call_frame(call_info,
		func, opline->extended_value, object_or_called_scope);
	call->prev_execute_data = EX(call);
	EX(call) = call;

	ZEND_VM_NEXT_OPCODE();
}

static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_SEND_VAL_SPEC_CONST_CONST_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *value, *arg;

	if (IS_CONST == IS_CONST) {
		SAVE_OPLINE();
		zend_string *arg_name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
		uint32_t arg_num;
		arg = zend_handle_named_arg(&EX(call), arg_name, &arg_num, CACHE_ADDR(opline->result.num));
		if (UNEXPECTED(!arg)) {


			HANDLE_EXCEPTION();
		}
	} else {
		arg = ZEND_CALL_VAR(EX(call), opline->result.var);
	}

	value = RT_CONSTANT(opline, opline->op1);
	ZVAL_COPY_VALUE(arg, value);
	if (IS_CONST == IS_CONST) {
		if (UNEXPECTED(Z_OPT_REFCOUNTED_P(arg))) {
			Z_ADDREF_P(arg);
		}
	}
	ZEND_VM_NEXT_OPCODE();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_SEND_VAL_EX_SPEC_CONST_CONST_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *value, *arg;
	uint32_t arg_num;

	if (IS_CONST == IS_CONST) {
		SAVE_OPLINE();
		zend_string *arg_name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
		arg = zend_handle_named_arg(&EX(call), arg_name, &arg_num, CACHE_ADDR(opline->result.num));
		if (UNEXPECTED(!arg)) {


			HANDLE_EXCEPTION();
		}
	} else {
		arg = ZEND_CALL_VAR(EX(call), opline->result.var);
		arg_num = opline->op2.num;
	}

	if (EXPECTED(arg_num <= MAX_ARG_FLAG_NUM)) {
		if (QUICK_ARG_MUST_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
			goto send_val_by_ref;
		}
	} else if (ARG_MUST_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
send_val_by_ref:;
		ZEND_VM_DISPATCH_TO_HELPER(zend_cannot_pass_by_ref_helper_SPEC_TAILCALL(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_EX arg_num, arg));
	}
	value = RT_CONSTANT(opline, opline->op1);
	ZVAL_COPY_VALUE(arg, value);
	if (IS_CONST == IS_CONST) {
		if (UNEXPECTED(Z_OPT_REFCOUNTED_P(arg))) {
			Z_ADDREF_P(arg);
		}
	}
	ZEND_VM_NEXT_OPCODE();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_FETCH_CLASS_CONSTANT_SPEC_CONST_CONST_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	zend_class_entry *ce, *scope;
	zend_class_constant *c;
	zval *value, *zv, *constant_zv;
	zend_string *constant_name;
	USE_OPLINE

	SAVE_OPLINE();

	do {
		if (IS_CONST == IS_CONST && IS_CONST == IS_CONST) {
			if (EXPECTED(CACHED_PTR(opline->extended_value + sizeof(void*)))) {
				value = CACHED_PTR(opline->extended_value + sizeof(void*));
				break;
			}
		}
		if (IS_CONST == IS_CONST) {
			if (EXPECTED(CACHED_PTR(opline->extended_value))) {
				ce = CACHED_PTR(opline->extended_value);
			} else {
				ce = zend_fetch_class_by_name(Z_STR_P(RT_CONSTANT(opline, opline->op1)), Z_STR_P(RT_CONSTANT(opline, opline->op1) + 1), ZEND_FETCH_CLASS_DEFAULT | ZEND_FETCH_CLASS_EXCEPTION);
				if (UNEXPECTED(ce == NULL)) {
					ZVAL_UNDEF(EX_VAR(opline->result.var));


					HANDLE_EXCEPTION();
				}
				CACHE_PTR(opline->extended_value, ce);
			}
		} else if (IS_CONST == IS_UNUSED) {
			ce = zend_fetch_class(NULL, opline->op1.num);
			if (UNEXPECTED(ce == NULL)) {
				ZVAL_UNDEF(EX_VAR(opline->result.var));


				HANDLE_EXCEPTION();
			}
		} else {
			ce = Z_CE_P(EX_VAR(opline->op1.var));
		}
		if (IS_CONST != IS_CONST
			&& IS_CONST == IS_CONST
			&& EXPECTED(CACHED_PTR(opline->extended_value) == ce)) {
			value = CACHED_PTR(opline->extended_value + sizeof(void*));
			break;
		}

		constant_zv = RT_CONSTANT(opline, opline->op2);
		if (UNEXPECTED(Z_TYPE_P(constant_zv) != IS_STRING)) {
			zend_invalid_class_constant_type_error(Z_TYPE_P(constant_zv));
			ZVAL_UNDEF(EX_VAR(opline->result.var));


			HANDLE_EXCEPTION();
		}
		constant_name = Z_STR_P(constant_zv);
		/* Magic 'class' for constant OP2 is caught at compile-time */
		if (IS_CONST != IS_CONST && UNEXPECTED(zend_string_equals_literal_ci(constant_name, "class"))) {
			ZVAL_STR_COPY(EX_VAR(opline->result.var), ce->name);


			ZEND_VM_NEXT_OPCODE();
		}
		zv = IS_CONST == IS_CONST
			? zend_hash_find_known_hash(CE_CONSTANTS_TABLE(ce), constant_name)
			: zend_hash_find(CE_CONSTANTS_TABLE(ce), constant_name);

		if (EXPECTED(zv != NULL)) {
			c = Z_PTR_P(zv);
			scope = EX(func)->op_array.scope;
			if (!zend_verify_const_access(c, scope)) {
				zend_throw_error(NULL, "Cannot access %s constant %s::%s", zend_visibility_string(ZEND_CLASS_CONST_FLAGS(c)), ZSTR_VAL(ce->name), ZSTR_VAL(constant_name));
				ZVAL_UNDEF(EX_VAR(opline->result.var));


				HANDLE_EXCEPTION();
			}

			if (ce->ce_flags & ZEND_ACC_TRAIT) {
				zend_throw_error(NULL, "Cannot access trait constant %s::%s directly", ZSTR_VAL(ce->name), ZSTR_VAL(constant_name));
				ZVAL_UNDEF(EX_VAR(opline->result.var));


				HANDLE_EXCEPTION();
			}

			bool is_constant_deprecated = ZEND_CLASS_CONST_FLAGS(c) & ZEND_ACC_DEPRECATED;
			if (UNEXPECTED(is_constant_deprecated) && !CONST_IS_RECURSIVE(c)) {
				if (c->ce->type == ZEND_USER_CLASS) {
					/* Recursion protection only applied to user constants, GH-18463 */
					CONST_PROTECT_RECURSION(c);
				}
				zend_deprecated_class_constant(c, constant_name);
				if (c->ce->type == ZEND_USER_CLASS) {
					CONST_UNPROTECT_RECURSION(c);
				}

				if (EG(exception)) {
					ZVAL_UNDEF(EX_VAR(opline->result.var));


					HANDLE_EXCEPTION();
				}
			}

			value = &c->value;
			// Enums require loading of all class constants to build the backed enum table
			if (ce->ce_flags & ZEND_ACC_ENUM && ce->enum_backing_type != IS_UNDEF && ce->type == ZEND_USER_CLASS && !(ce->ce_flags & ZEND_ACC_CONSTANTS_UPDATED)) {
				if (UNEXPECTED(zend_update_class_constants(ce) == FAILURE)) {
					ZVAL_UNDEF(EX_VAR(opline->result.var));


					HANDLE_EXCEPTION();
				}
			}
			if (Z_TYPE_P(value) == IS_CONSTANT_AST) {
				if (UNEXPECTED(zend_update_class_constant(c, constant_name, c->ce) != SUCCESS)) {
					ZVAL_UNDEF(EX_VAR(opline->result.var));


					HANDLE_EXCEPTION();
				}
			}
			if (IS_CONST == IS_CONST && !is_constant_deprecated) {
				CACHE_POLYMORPHIC_PTR(opline->extended_value, ce, value);
			}
		} else {
			zend_throw_error(NULL, "Undefined constant %s::%s",
				ZSTR_VAL(ce->name), ZSTR_VAL(constant_name));
			ZVAL_UNDEF(EX_VAR(opline->result.var));


			HANDLE_EXCEPTION();
		}
	} while (0);

	ZVAL_COPY_OR_DUP(EX_VAR(opline->result.var), value);


	ZEND_VM_NEXT_OPCODE();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_CONST_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *expr_ptr, new_expr;

	SAVE_OPLINE();
	if ((IS_CONST == IS_VAR || IS_CONST == IS_CV) &&
	    UNEXPECTED(opline->extended_value & ZEND_ARRAY_ELEMENT_REF)) {
		expr_ptr = zend_get_bad_ptr();
		if (Z_ISREF_P(expr_ptr)) {
			Z_ADDREF_P(expr_ptr);
		} else {
			ZVAL_MAKE_REF_EX(expr_ptr, 2);
		}


	} else {
		expr_ptr = RT_CONSTANT(opline, opline->op1);
		if (IS_CONST == IS_TMP_VAR) {
			/* pass */
		} else if (IS_CONST == IS_CONST) {
			Z_TRY_ADDREF_P(expr_ptr);
		} else if (IS_CONST == IS_CV) {
			ZVAL_DEREF(expr_ptr);
			Z_TRY_ADDREF_P(expr_ptr);
		} else /* if (IS_CONST == IS_VAR) */ {
			if (UNEXPECTED(Z_ISREF_P(expr_ptr))) {
				zend_refcounted *ref = Z_COUNTED_P(expr_ptr);

				expr_ptr = Z_REFVAL_P(expr_ptr);
				if (UNEXPECTED(GC_DELREF(ref) == 0)) {
					ZVAL_COPY_VALUE(&new_expr, expr_ptr);
					expr_ptr = &new_expr;
					efree_size(ref, sizeof(zend_reference));
				} else if (Z_OPT_REFCOUNTED_P(expr_ptr)) {
					Z_ADDREF_P(expr_ptr);
				}
			}
		}
	}

	if (IS_CONST != IS_UNUSED) {
		zval *offset = RT_CONSTANT(opline, opline->op2);
		zend_string *str;
		zend_ulong hval;

add_again:
		if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) {
			str = Z_STR_P(offset);
			if (IS_CONST != IS_CONST) {
				if (ZEND_HANDLE_NUMERIC(str, hval)) {
					goto num_index;
				}
			}
str_index:
			zend_hash_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), str, expr_ptr);
		} else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
			hval = Z_LVAL_P(offset);
num_index:
			zend_hash_index_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), hval, expr_ptr);
		} else if ((IS_CONST & (IS_VAR|IS_CV)) && EXPECTED(Z_TYPE_P(offset) == IS_REFERENCE)) {
			offset = Z_REFVAL_P(offset);
			goto add_again;
		} else if (UNEXPECTED(Z_TYPE_P(offset) == IS_NULL)) {
			zval tmp;
			if (IS_CONST == IS_CV || IS_CONST == IS_VAR) {
				ZVAL_COPY(&tmp, expr_ptr);
			}
			zend_error(E_DEPRECATED, "Using null as an array offset is deprecated, use an empty string instead");
			if (IS_CONST == IS_CV || IS_CONST == IS_VAR) {
				/* A userland error handler can do funky things to the expression, so reset it */
				zval_ptr_dtor(expr_ptr);
				ZVAL_COPY_VALUE(expr_ptr, &tmp);
			}
			if (UNEXPECTED(EG(exception))) {
				zval_ptr_dtor_nogc(expr_ptr);
				HANDLE_EXCEPTION();
			}
			str = ZSTR_EMPTY_ALLOC();
			goto str_index;
		} else if (Z_TYPE_P(offset) == IS_DOUBLE) {
			hval = zend_dval_to_lval_safe(Z_DVAL_P(offset));
			goto num_index;
		} else if (Z_TYPE_P(offset) == IS_FALSE) {
			hval = 0;
			goto num_index;
		} else if (Z_TYPE_P(offset) == IS_TRUE) {
			hval = 1;
			goto num_index;
		} else if (Z_TYPE_P(offset) == IS_RESOURCE) {
			zend_use_resource_as_offset(offset);
			hval = Z_RES_HANDLE_P(offset);
			goto num_index;
		} else if (IS_CONST == IS_CV && Z_TYPE_P(offset) == IS_UNDEF) {
			ZVAL_UNDEFINED_OP2();
			str = ZSTR_EMPTY_ALLOC();
			goto str_index;
		} else {
			zend_illegal_array_offset_access(offset);
			zval_ptr_dtor_nogc(expr_ptr);
		}


	} else {
		if (!zend_hash_next_index_insert(Z_ARRVAL_P(EX_VAR(opline->result.var)), expr_ptr)) {
			zend_cannot_add_element();
			zval_ptr_dtor_nogc(expr_ptr);
		}
	}
	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_INIT_ARRAY_SPEC_CONST_CONST_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	zval *array;
	uint32_t size;
	USE_OPLINE

	SAVE_OPLINE();
	array = EX_VAR(opline->result.var);
	if (IS_CONST != IS_UNUSED) {
		size = opline->extended_value >> ZEND_ARRAY_SIZE_SHIFT;
		ZVAL_ARR(array, zend_new_array(size));
		/* Explicitly initialize array as not-packed if flag is set */
		if (opline->extended_value & ZEND_ARRAY_NOT_PACKED) {
			zend_hash_real_init_mixed(Z_ARRVAL_P(array));
		}
		ZEND_VM_TAIL_CALL(ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_CONST_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
	} else {
		ZVAL_ARR(array, zend_new_array(0));
		ZEND_VM_NEXT_OPCODE();
	}
}

static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CONST_CONST_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *container;
	bool result;
	zend_ulong hval;
	zval *offset;

	SAVE_OPLINE();
	container = RT_CONSTANT(opline, opline->op1);
	offset = RT_CONSTANT(opline, opline->op2);

	if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
		HashTable *ht;
		zval *value;
		zend_string *str;

isset_dim_obj_array:
		ht = Z_ARRVAL_P(container);
isset_again:
		if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) {
			str = Z_STR_P(offset);
			if (IS_CONST != IS_CONST) {
				if (ZEND_HANDLE_NUMERIC(str, hval)) {
					goto num_index_prop;
				}
			}
			value = zend_hash_find_ex(ht, str, IS_CONST == IS_CONST);
		} else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
			hval = Z_LVAL_P(offset);
num_index_prop:
			value = zend_hash_index_find(ht, hval);
		} else if ((IS_CONST & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(offset))) {
			offset = Z_REFVAL_P(offset);
			goto isset_again;
		} else {
			value = zend_find_array_dim_slow(ht, offset EXECUTE_DATA_CC);
			if (UNEXPECTED(EG(exception))) {
				result = 0;
				goto isset_dim_obj_exit;
			}
		}

		if (!(opline->extended_value & ZEND_ISEMPTY)) {
			/* > IS_NULL means not IS_UNDEF and not IS_NULL */
			result = value != NULL && Z_TYPE_P(value) > IS_NULL &&
			    (!Z_ISREF_P(value) || Z_TYPE_P(Z_REFVAL_P(value)) != IS_NULL);

			if (IS_CONST & (IS_CONST|IS_CV)) {
				/* avoid exception check */


				ZEND_VM_SMART_BRANCH(result, 0);
			}
		} else {
			result = (value == NULL || !i_zend_is_true(value));
		}
		goto isset_dim_obj_exit;
	} else if ((IS_CONST & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(container))) {
		container = Z_REFVAL_P(container);
		if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
			goto isset_dim_obj_array;
		}
	}

	if (IS_CONST == IS_CONST && Z_EXTRA_P(offset) == ZEND_EXTRA_VALUE) {
		offset++;
	}
	if (!(opline->extended_value & ZEND_ISEMPTY)) {
		result = zend_isset_dim_slow(container, offset EXECUTE_DATA_CC);
	} else {
		result = zend_isempty_dim_slow(container, offset EXECUTE_DATA_CC);
	}

isset_dim_obj_exit:




	ZEND_VM_SMART_BRANCH(result, 1);
}

static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CONST_CONST_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *container;
	int result;
	zval *offset;
	zend_string *name, *tmp_name;

	SAVE_OPLINE();
	container = RT_CONSTANT(opline, opline->op1);
	offset = RT_CONSTANT(opline, opline->op2);

	if (IS_CONST == IS_CONST ||
	    (IS_CONST != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
		if ((IS_CONST & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
			container = Z_REFVAL_P(container);
			if (UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT)) {
				result = (opline->extended_value & ZEND_ISEMPTY);
				goto isset_object_finish;
			}
		} else {
			result = (opline->extended_value & ZEND_ISEMPTY);
			goto isset_object_finish;
		}
	}

	if (IS_CONST == IS_CONST) {
		name = Z_STR_P(offset);
	} else {
		name = zval_try_get_tmp_string(offset, &tmp_name);
		if (UNEXPECTED(!name)) {
			result = 0;
			goto isset_object_finish;
		}
	}

	result =
		(opline->extended_value & ZEND_ISEMPTY) ^
		Z_OBJ_HT_P(container)->has_property(Z_OBJ_P(container), name, (opline->extended_value & ZEND_ISEMPTY), ((IS_CONST == IS_CONST) ? CACHE_ADDR(opline->extended_value & ~ZEND_ISEMPTY) : NULL));

	if (IS_CONST != IS_CONST) {
		zend_tmp_string_release(tmp_name);
	}

isset_object_finish:




	ZEND_VM_SMART_BRANCH(result, 1);
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_ARRAY_KEY_EXISTS_SPEC_CONST_CONST_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE

	zval *key, *subject;
	HashTable *ht;
	bool result;

	SAVE_OPLINE();

	key = RT_CONSTANT(opline, opline->op1);
	subject = RT_CONSTANT(opline, opline->op2);

	if (EXPECTED(Z_TYPE_P(subject) == IS_ARRAY)) {
array_key_exists_array:
		ht = Z_ARRVAL_P(subject);
		result = zend_array_key_exists_fast(ht, key OPLINE_CC EXECUTE_DATA_CC);
	} else {
		if ((IS_CONST & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(subject))) {
			subject = Z_REFVAL_P(subject);
			if (EXPECTED(Z_TYPE_P(subject) == IS_ARRAY)) {
				goto array_key_exists_array;
			}
		}
		zend_array_key_exists_error(subject, key OPLINE_CC EXECUTE_DATA_CC);
		result = 0;
	}




	ZEND_VM_SMART_BRANCH(result, 1);
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_DECLARE_CLASS_DELAYED_SPEC_CONST_CONST_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE

	zend_class_entry *ce = CACHED_PTR(opline->extended_value);
	if (ce == NULL) {
		zval *lcname = RT_CONSTANT(opline, opline->op1);
		zval *zv = zend_hash_find_known_hash(EG(class_table), Z_STR_P(lcname + 1));
		if (zv) {
			SAVE_OPLINE();
			ce = zend_bind_class_in_slot(zv, lcname, Z_STR_P(RT_CONSTANT(opline, opline->op2)));
			if (EG(exception)) {
				HANDLE_EXCEPTION();
			}
		}
		CACHE_PTR(opline->extended_value, ce);
	}
	ZEND_VM_NEXT_OPCODE();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_DECLARE_CONST_SPEC_CONST_CONST_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *name;
	zval *val;
	zend_constant c;

	SAVE_OPLINE();
	name  = RT_CONSTANT(opline, opline->op1);
	val   = RT_CONSTANT(opline, opline->op2);

	ZVAL_COPY(&c.value, val);
	if (Z_OPT_CONSTANT(c.value)) {
		if (UNEXPECTED(zval_update_constant_ex(&c.value, EX(func)->op_array.scope) != SUCCESS)) {
			zval_ptr_dtor_nogc(&c.value);




			HANDLE_EXCEPTION();
		}
	}
	/* non persistent, case sensitive */
	ZEND_CONSTANT_SET_FLAGS(&c, 0, PHP_USER_CONSTANT);
	c.name = zend_string_copy(Z_STR_P(name));

	if (zend_register_constant(&c) == NULL) {
	}




	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_DECLARE_ATTRIBUTED_CONST_SPEC_CONST_CONST_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *name;
	zval *val;
	zend_constant c, *registered;

	SAVE_OPLINE();
	name  = RT_CONSTANT(opline, opline->op1);
	val   = RT_CONSTANT(opline, opline->op2);

	ZVAL_COPY(&c.value, val);
	if (Z_OPT_CONSTANT(c.value)) {
		if (UNEXPECTED(zval_update_constant_ex(&c.value, EX(func)->op_array.scope) != SUCCESS)) {
			zval_ptr_dtor_nogc(&c.value);




			HANDLE_EXCEPTION();
		}
	}
	/* non persistent, case sensitive */
	ZEND_CONSTANT_SET_FLAGS(&c, 0, PHP_USER_CONSTANT);
	c.name = zend_string_copy(Z_STR_P(name));

	registered = zend_register_constant(&c);
	if (registered == NULL) {




		/* two opcodes used, second one is the data with attributes */
		ZEND_VM_NEXT_OPCODE_EX(1, 2);
	}

	HashTable *attributes = Z_PTR_P(get_op_data_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1));
	ZEND_ASSERT(attributes != NULL);
	zend_constant_add_attributes(registered, attributes);




	/* two opcodes used, second one is the data with attributes */
	ZEND_VM_NEXT_OPCODE_EX(1, 2);
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_YIELD_SPEC_CONST_CONST_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE

	zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C);

	SAVE_OPLINE();
	if (UNEXPECTED(generator->flags & ZEND_GENERATOR_FORCED_CLOSE)) {
		ZEND_VM_TAIL_CALL(zend_yield_in_closed_generator_helper_SPEC_TAILCALL(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
	}

	/* Destroy the previously yielded value */
	zval_ptr_dtor(&generator->value);

	/* Destroy the previously yielded key */
	zval_ptr_dtor(&generator->key);

	/* Set the new yielded value */
	if (IS_CONST != IS_UNUSED) {
		if (UNEXPECTED(EX(func)->op_array.fn_flags & ZEND_ACC_RETURN_REFERENCE)) {
			/* Constants and temporary variables aren't yieldable by reference,
			 * but we still allow them with a notice. */
			if (IS_CONST & (IS_CONST|IS_TMP_VAR)) {
				zval *value;

				zend_error(E_NOTICE, "Only variable references should be yielded by reference");

				value = RT_CONSTANT(opline, opline->op1);
				ZVAL_COPY_VALUE(&generator->value, value);
				if (IS_CONST == IS_CONST) {
					if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
						Z_ADDREF(generator->value);
					}
				}
			} else {
				zval *value_ptr = zend_get_bad_ptr();

				/* If a function call result is yielded and the function did
				 * not return by reference we throw a notice. */
				do {
					if (IS_CONST == IS_VAR) {
						ZEND_ASSERT(value_ptr != &EG(uninitialized_zval));
						if (opline->extended_value == ZEND_RETURNS_FUNCTION
						 && !Z_ISREF_P(value_ptr)) {
							zend_error(E_NOTICE, "Only variable references should be yielded by reference");
							ZVAL_COPY(&generator->value, value_ptr);
							break;
						}
					}
					if (Z_ISREF_P(value_ptr)) {
						Z_ADDREF_P(value_ptr);
					} else {
						ZVAL_MAKE_REF_EX(value_ptr, 2);
					}
					ZVAL_REF(&generator->value, Z_REF_P(value_ptr));
				} while (0);


			}
		} else {
			zval *value = RT_CONSTANT(opline, opline->op1);

			/* Consts, temporary variables and references need copying */
			if (IS_CONST == IS_CONST) {
				ZVAL_COPY_VALUE(&generator->value, value);
				if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
					Z_ADDREF(generator->value);
				}
			} else if (IS_CONST == IS_TMP_VAR) {
				ZVAL_COPY_VALUE(&generator->value, value);
			} else if ((IS_CONST & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) {
				ZVAL_COPY(&generator->value, Z_REFVAL_P(value));


			} else {
				ZVAL_COPY_VALUE(&generator->value, value);
				if (IS_CONST == IS_CV) {
					if (Z_OPT_REFCOUNTED_P(value)) Z_ADDREF_P(value);
				}
			}
		}
	} else {
		/* If no value was specified yield null */
		ZVAL_NULL(&generator->value);
	}

	/* Set the new yielded key */
	if (IS_CONST != IS_UNUSED) {
		zval *key = RT_CONSTANT(opline, opline->op2);
		if ((IS_CONST & (IS_CV|IS_VAR)) && UNEXPECTED(Z_TYPE_P(key) == IS_REFERENCE)) {
			key = Z_REFVAL_P(key);
		}
		ZVAL_COPY(&generator->key, key);


		if (Z_TYPE(generator->key) == IS_LONG
		    && Z_LVAL(generator->key) > generator->largest_used_integer_key
		) {
			generator->largest_used_integer_key = Z_LVAL(generator->key);
		}
	} else {
		/* If no key was specified we use auto-increment keys */
		generator->largest_used_integer_key++;
		ZVAL_LONG(&generator->key, generator->largest_used_integer_key);
	}

	if (RETURN_VALUE_USED(opline)) {
		/* If the return value of yield is used set the send
		 * target and initialize it to NULL */
		generator->send_target = EX_VAR(opline->result.var);
		ZVAL_NULL(generator->send_target);
	} else {
		generator->send_target = NULL;
	}

	/* The GOTO VM uses a local opline variable. We need to set the opline
	 * variable in execute_data so we don't resume at an old position. */
	SAVE_OPLINE();

	ZEND_VM_RETURN();
}

static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_SWITCH_LONG_SPEC_CONST_CONST_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op, *jump_zv;
	HashTable *jumptable;

	op = RT_CONSTANT(opline, opline->op1);

	if (Z_TYPE_P(op) != IS_LONG) {
		ZVAL_DEREF(op);
		if (Z_TYPE_P(op) != IS_LONG) {
			/* Wrong type, fall back to ZEND_CASE chain */
			ZEND_VM_NEXT_OPCODE();
		}
	}

	jumptable = Z_ARRVAL_P(RT_CONSTANT(opline, opline->op2));
	jump_zv = zend_hash_index_find(jumptable, Z_LVAL_P(op));
	if (jump_zv != NULL) {
		ZEND_VM_SET_RELATIVE_OPCODE(opline, Z_LVAL_P(jump_zv));
		ZEND_VM_CONTINUE();
	} else {
		/* default */
		ZEND_VM_SET_RELATIVE_OPCODE(opline, opline->extended_value);
		ZEND_VM_CONTINUE();
	}
}

static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_SWITCH_STRING_SPEC_CONST_CONST_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op, *jump_zv;
	HashTable *jumptable;

	op = RT_CONSTANT(opline, opline->op1);

	if (Z_TYPE_P(op) != IS_STRING) {
		if (IS_CONST == IS_CONST) {
			/* Wrong type, fall back to ZEND_CASE chain */
			ZEND_VM_NEXT_OPCODE();
		} else {
			ZVAL_DEREF(op);
			if (Z_TYPE_P(op) != IS_STRING) {
				/* Wrong type, fall back to ZEND_CASE chain */
				ZEND_VM_NEXT_OPCODE();
			}
		}
	}

	jumptable = Z_ARRVAL_P(RT_CONSTANT(opline, opline->op2));
	jump_zv = zend_hash_find_ex(jumptable, Z_STR_P(op), IS_CONST == IS_CONST);
	if (jump_zv != NULL) {
		ZEND_VM_SET_RELATIVE_OPCODE(opline, Z_LVAL_P(jump_zv));
		ZEND_VM_CONTINUE();
	} else {
		/* default */
		ZEND_VM_SET_RELATIVE_OPCODE(opline, opline->extended_value);
		ZEND_VM_CONTINUE();
	}
}

static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_MATCH_SPEC_CONST_CONST_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op, *jump_zv;
	HashTable *jumptable;

	op = RT_CONSTANT(opline, opline->op1);
	jumptable = Z_ARRVAL_P(RT_CONSTANT(opline, opline->op2));

match_try_again:
	if (Z_TYPE_P(op) == IS_LONG) {
		jump_zv = zend_hash_index_find(jumptable, Z_LVAL_P(op));
	} else if (Z_TYPE_P(op) == IS_STRING) {
		jump_zv = zend_hash_find_ex(jumptable, Z_STR_P(op), IS_CONST == IS_CONST);
	} else if (Z_TYPE_P(op) == IS_REFERENCE) {
		op = Z_REFVAL_P(op);
		goto match_try_again;
	} else {
		if (UNEXPECTED((IS_CONST & IS_CV) && Z_TYPE_P(op) == IS_UNDEF)) {
			SAVE_OPLINE();
			op = ZVAL_UNDEFINED_OP1();
			if (UNEXPECTED(EG(exception))) {
				HANDLE_EXCEPTION();
			}
			goto match_try_again;
		}

		goto default_branch;
	}

	if (jump_zv != NULL) {
		ZEND_VM_SET_RELATIVE_OPCODE(opline, Z_LVAL_P(jump_zv));
		ZEND_VM_CONTINUE();
	} else {
default_branch:
		/* default */
		ZEND_VM_SET_RELATIVE_OPCODE(opline, opline->extended_value);
		ZEND_VM_CONTINUE();
	}
}

static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_IN_ARRAY_SPEC_CONST_CONST_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1;
	HashTable *ht = Z_ARRVAL_P(RT_CONSTANT(opline, opline->op2));
	zval *result;

	op1 = RT_CONSTANT(opline, opline->op1);
	if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
		result = zend_hash_find_ex(ht, Z_STR_P(op1), IS_CONST == IS_CONST);
		if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
			zval_ptr_dtor_str(op1);
		}
		ZEND_VM_SMART_BRANCH(result, 0);
	}

	if (opline->extended_value) {
		if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
			result = zend_hash_index_find(ht, Z_LVAL_P(op1));
			ZEND_VM_SMART_BRANCH(result, 0);
		}
		SAVE_OPLINE();
		if ((IS_CONST & (IS_VAR|IS_CV)) && Z_TYPE_P(op1) == IS_REFERENCE) {
			op1 = Z_REFVAL_P(op1);
			if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
				result = zend_hash_find(ht, Z_STR_P(op1));


				ZEND_VM_SMART_BRANCH(result, 0);
			} else if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
				result = zend_hash_index_find(ht, Z_LVAL_P(op1));


				ZEND_VM_SMART_BRANCH(result, 0);
			}
		} else if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
			ZVAL_UNDEFINED_OP1();
		}
	} else if (Z_TYPE_P(op1) <= IS_FALSE) {
		if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
			SAVE_OPLINE();
			ZVAL_UNDEFINED_OP1();
			if (UNEXPECTED(EG(exception) != NULL)) {
				HANDLE_EXCEPTION();
			}
		}
		result = zend_hash_find_known_hash(ht, ZSTR_EMPTY_ALLOC());
		ZEND_VM_SMART_BRANCH(result, 0);
	} else {
		zend_string *key;
		zval key_tmp;

		if ((IS_CONST & (IS_VAR|IS_CV)) && Z_TYPE_P(op1) == IS_REFERENCE) {
			op1 = Z_REFVAL_P(op1);
			if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
				result = zend_hash_find(ht, Z_STR_P(op1));


				ZEND_VM_SMART_BRANCH(result, 0);
			}
		}

		SAVE_OPLINE();
		ZEND_HASH_MAP_FOREACH_STR_KEY(ht, key) {
			ZVAL_STR(&key_tmp, key);
			if (zend_compare(op1, &key_tmp) == 0) {


				ZEND_VM_SMART_BRANCH(1, 1);
			}
		} ZEND_HASH_FOREACH_END();
	}


	ZEND_VM_SMART_BRANCH(0, 1);
}

static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_ADD_SPEC_CONST_TMPVARCV_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2, *result;
	double d1, d2;

	op1 = RT_CONSTANT(opline, opline->op1);
	op2 = EX_VAR(opline->op2.var);
	if (1 && IS_CONST == IS_CONST && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST) {
		/* pass */
	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
			result = EX_VAR(opline->result.var);
			fast_long_add_function(result, op1, op2);
			ZEND_VM_NEXT_OPCODE();
		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
			d1 = (double)Z_LVAL_P(op1);
			d2 = Z_DVAL_P(op2);
			goto add_double;
		}
	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
			d1 = Z_DVAL_P(op1);
			d2 = Z_DVAL_P(op2);
add_double:
			result = EX_VAR(opline->result.var);
			ZVAL_DOUBLE(result, d1 + d2);
			ZEND_VM_NEXT_OPCODE();
		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
			d1 = Z_DVAL_P(op1);
			d2 = (double)Z_LVAL_P(op2);
			goto add_double;
		}
	}

	ZEND_VM_DISPATCH_TO_HELPER(zend_add_helper_SPEC_TAILCALL(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_EX op1, op2));
}

static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_SUB_SPEC_CONST_TMPVARCV_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2, *result;
	double d1, d2;

	op1 = RT_CONSTANT(opline, opline->op1);
	op2 = EX_VAR(opline->op2.var);
	if (1 && IS_CONST == IS_CONST && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST) {
		/* pass */
	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
			result = EX_VAR(opline->result.var);
			fast_long_sub_function(result, op1, op2);
			ZEND_VM_NEXT_OPCODE();
		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
			d1 = (double)Z_LVAL_P(op1);
			d2 = Z_DVAL_P(op2);
			goto sub_double;
		}
	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
			d1 = Z_DVAL_P(op1);
			d2 = Z_DVAL_P(op2);
sub_double:
			result = EX_VAR(opline->result.var);
			ZVAL_DOUBLE(result, d1 - d2);
			ZEND_VM_NEXT_OPCODE();
		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
			d1 = Z_DVAL_P(op1);
			d2 = (double)Z_LVAL_P(op2);
			goto sub_double;
		}
	}

	ZEND_VM_DISPATCH_TO_HELPER(zend_sub_helper_SPEC_TAILCALL(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_EX op1, op2));
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_MOD_SPEC_CONST_TMPVARCV_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2, *result;

	op1 = RT_CONSTANT(opline, opline->op1);
	op2 = EX_VAR(opline->op2.var);
	if (1 && IS_CONST == IS_CONST && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST) {
		/* pass */
	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
			result = EX_VAR(opline->result.var);
			if (UNEXPECTED(Z_LVAL_P(op2) == 0)) {
				ZEND_VM_TAIL_CALL(zend_mod_by_zero_helper_SPEC_TAILCALL(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
			} else if (UNEXPECTED(Z_LVAL_P(op2) == -1)) {
				/* Prevent overflow error/crash if op1==ZEND_LONG_MIN */
				ZVAL_LONG(result, 0);
			} else {
				ZVAL_LONG(result, Z_LVAL_P(op1) % Z_LVAL_P(op2));
			}
			ZEND_VM_NEXT_OPCODE();
		}
	}

	ZEND_VM_DISPATCH_TO_HELPER(zend_mod_helper_SPEC_TAILCALL(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_EX op1, op2));
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_SL_SPEC_CONST_TMPVARCV_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;

	op1 = RT_CONSTANT(opline, opline->op1);
	op2 = EX_VAR(opline->op2.var);
	if (1 && IS_CONST == IS_CONST && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST) {
		/* pass */
	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)
			&& EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)
			&& EXPECTED((zend_ulong)Z_LVAL_P(op2) < SIZEOF_ZEND_LONG * 8)) {
		/* Perform shift on unsigned numbers to get well-defined wrap behavior. */
		ZVAL_LONG(EX_VAR(opline->result.var),
			(zend_long) ((zend_ulong) Z_LVAL_P(op1) << Z_LVAL_P(op2)));
		ZEND_VM_NEXT_OPCODE();
	}

	ZEND_VM_DISPATCH_TO_HELPER(zend_shift_left_helper_SPEC_TAILCALL(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_EX op1, op2));
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_SR_SPEC_CONST_TMPVARCV_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;

	op1 = RT_CONSTANT(opline, opline->op1);
	op2 = EX_VAR(opline->op2.var);
	if (1 && IS_CONST == IS_CONST && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST) {
		/* pass */
	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)
			&& EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)
			&& EXPECTED((zend_ulong)Z_LVAL_P(op2) < SIZEOF_ZEND_LONG * 8)) {
		ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(op1) >> Z_LVAL_P(op2));
		ZEND_VM_NEXT_OPCODE();
	}

	ZEND_VM_DISPATCH_TO_HELPER(zend_shift_right_helper_SPEC_TAILCALL(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_EX op1, op2));
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_IS_SMALLER_SPEC_CONST_TMPVARCV_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;
	double d1, d2;

	op1 = RT_CONSTANT(opline, opline->op1);
	op2 = EX_VAR(opline->op2.var);
	if (1 && IS_CONST == IS_CONST && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST) {
		/* pass */
	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
			if (EXPECTED(Z_LVAL_P(op1) < Z_LVAL_P(op2))) {
is_smaller_true:
				ZEND_VM_SMART_BRANCH_TRUE_NONE();
			} else {
is_smaller_false:
				ZEND_VM_SMART_BRANCH_FALSE_NONE();
			}
		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
			d1 = (double)Z_LVAL_P(op1);
			d2 = Z_DVAL_P(op2);
			goto is_smaller_double;
		}
	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
			d1 = Z_DVAL_P(op1);
			d2 = Z_DVAL_P(op2);
is_smaller_double:
			if (d1 < d2) {
				goto is_smaller_true;
			} else {
				goto is_smaller_false;
			}
		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
			d1 = Z_DVAL_P(op1);
			d2 = (double)Z_LVAL_P(op2);
			goto is_smaller_double;
		}
	}
	ZEND_VM_DISPATCH_TO_HELPER(zend_is_smaller_helper_SPEC_TAILCALL(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_EX op1, op2));
}

static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_IS_SMALLER_SPEC_CONST_TMPVARCV_JMPZ_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;
	double d1, d2;

	op1 = RT_CONSTANT(opline, opline->op1);
	op2 = EX_VAR(opline->op2.var);
	if (1 && IS_CONST == IS_CONST && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST) {
		/* pass */
	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
			if (EXPECTED(Z_LVAL_P(op1) < Z_LVAL_P(op2))) {
is_smaller_true:
				ZEND_VM_SMART_BRANCH_TRUE_JMPZ();
			} else {
is_smaller_false:
				ZEND_VM_SMART_BRANCH_FALSE_JMPZ();
			}
		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
			d1 = (double)Z_LVAL_P(op1);
			d2 = Z_DVAL_P(op2);
			goto is_smaller_double;
		}
	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
			d1 = Z_DVAL_P(op1);
			d2 = Z_DVAL_P(op2);
is_smaller_double:
			if (d1 < d2) {
				goto is_smaller_true;
			} else {
				goto is_smaller_false;
			}
		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
			d1 = Z_DVAL_P(op1);
			d2 = (double)Z_LVAL_P(op2);
			goto is_smaller_double;
		}
	}
	ZEND_VM_DISPATCH_TO_HELPER(zend_is_smaller_helper_SPEC_TAILCALL(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_EX op1, op2));
}

static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_IS_SMALLER_SPEC_CONST_TMPVARCV_JMPNZ_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;
	double d1, d2;

	op1 = RT_CONSTANT(opline, opline->op1);
	op2 = EX_VAR(opline->op2.var);
	if (1 && IS_CONST == IS_CONST && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST) {
		/* pass */
	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
			if (EXPECTED(Z_LVAL_P(op1) < Z_LVAL_P(op2))) {
is_smaller_true:
				ZEND_VM_SMART_BRANCH_TRUE_JMPNZ();
			} else {
is_smaller_false:
				ZEND_VM_SMART_BRANCH_FALSE_JMPNZ();
			}
		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
			d1 = (double)Z_LVAL_P(op1);
			d2 = Z_DVAL_P(op2);
			goto is_smaller_double;
		}
	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
			d1 = Z_DVAL_P(op1);
			d2 = Z_DVAL_P(op2);
is_smaller_double:
			if (d1 < d2) {
				goto is_smaller_true;
			} else {
				goto is_smaller_false;
			}
		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
			d1 = Z_DVAL_P(op1);
			d2 = (double)Z_LVAL_P(op2);
			goto is_smaller_double;
		}
	}
	ZEND_VM_DISPATCH_TO_HELPER(zend_is_smaller_helper_SPEC_TAILCALL(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_EX op1, op2));
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_TMPVARCV_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;
	double d1, d2;

	op1 = RT_CONSTANT(opline, opline->op1);
	op2 = EX_VAR(opline->op2.var);
	if (1 && IS_CONST == IS_CONST && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST) {
		/* pass */
	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
			if (EXPECTED(Z_LVAL_P(op1) <= Z_LVAL_P(op2))) {
is_smaller_or_equal_true:
				ZEND_VM_SMART_BRANCH_TRUE_NONE();
				ZVAL_TRUE(EX_VAR(opline->result.var));
				ZEND_VM_NEXT_OPCODE();
			} else {
is_smaller_or_equal_false:
				ZEND_VM_SMART_BRANCH_FALSE_NONE();
				ZVAL_FALSE(EX_VAR(opline->result.var));
				ZEND_VM_NEXT_OPCODE();
			}
		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
			d1 = (double)Z_LVAL_P(op1);
			d2 = Z_DVAL_P(op2);
			goto is_smaller_or_equal_double;
		}
	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
			d1 = Z_DVAL_P(op1);
			d2 = Z_DVAL_P(op2);
is_smaller_or_equal_double:
			if (d1 <= d2) {
				goto is_smaller_or_equal_true;
			} else {
				goto is_smaller_or_equal_false;
			}
		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
			d1 = Z_DVAL_P(op1);
			d2 = (double)Z_LVAL_P(op2);
			goto is_smaller_or_equal_double;
		}
	}
	ZEND_VM_DISPATCH_TO_HELPER(zend_is_smaller_or_equal_helper_SPEC_TAILCALL(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_EX op1, op2));
}

static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_TMPVARCV_JMPZ_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;
	double d1, d2;

	op1 = RT_CONSTANT(opline, opline->op1);
	op2 = EX_VAR(opline->op2.var);
	if (1 && IS_CONST == IS_CONST && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST) {
		/* pass */
	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
			if (EXPECTED(Z_LVAL_P(op1) <= Z_LVAL_P(op2))) {
is_smaller_or_equal_true:
				ZEND_VM_SMART_BRANCH_TRUE_JMPZ();
				ZVAL_TRUE(EX_VAR(opline->result.var));
				ZEND_VM_NEXT_OPCODE();
			} else {
is_smaller_or_equal_false:
				ZEND_VM_SMART_BRANCH_FALSE_JMPZ();
				ZVAL_FALSE(EX_VAR(opline->result.var));
				ZEND_VM_NEXT_OPCODE();
			}
		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
			d1 = (double)Z_LVAL_P(op1);
			d2 = Z_DVAL_P(op2);
			goto is_smaller_or_equal_double;
		}
	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
			d1 = Z_DVAL_P(op1);
			d2 = Z_DVAL_P(op2);
is_smaller_or_equal_double:
			if (d1 <= d2) {
				goto is_smaller_or_equal_true;
			} else {
				goto is_smaller_or_equal_false;
			}
		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
			d1 = Z_DVAL_P(op1);
			d2 = (double)Z_LVAL_P(op2);
			goto is_smaller_or_equal_double;
		}
	}
	ZEND_VM_DISPATCH_TO_HELPER(zend_is_smaller_or_equal_helper_SPEC_TAILCALL(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_EX op1, op2));
}

static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_TMPVARCV_JMPNZ_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;
	double d1, d2;

	op1 = RT_CONSTANT(opline, opline->op1);
	op2 = EX_VAR(opline->op2.var);
	if (1 && IS_CONST == IS_CONST && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST) {
		/* pass */
	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
			if (EXPECTED(Z_LVAL_P(op1) <= Z_LVAL_P(op2))) {
is_smaller_or_equal_true:
				ZEND_VM_SMART_BRANCH_TRUE_JMPNZ();
				ZVAL_TRUE(EX_VAR(opline->result.var));
				ZEND_VM_NEXT_OPCODE();
			} else {
is_smaller_or_equal_false:
				ZEND_VM_SMART_BRANCH_FALSE_JMPNZ();
				ZVAL_FALSE(EX_VAR(opline->result.var));
				ZEND_VM_NEXT_OPCODE();
			}
		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
			d1 = (double)Z_LVAL_P(op1);
			d2 = Z_DVAL_P(op2);
			goto is_smaller_or_equal_double;
		}
	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
			d1 = Z_DVAL_P(op1);
			d2 = Z_DVAL_P(op2);
is_smaller_or_equal_double:
			if (d1 <= d2) {
				goto is_smaller_or_equal_true;
			} else {
				goto is_smaller_or_equal_false;
			}
		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
			d1 = Z_DVAL_P(op1);
			d2 = (double)Z_LVAL_P(op2);
			goto is_smaller_or_equal_double;
		}
	}
	ZEND_VM_DISPATCH_TO_HELPER(zend_is_smaller_or_equal_helper_SPEC_TAILCALL(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_EX op1, op2));
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_FETCH_CLASS_CONSTANT_SPEC_CONST_TMPVARCV_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	zend_class_entry *ce, *scope;
	zend_class_constant *c;
	zval *value, *zv, *constant_zv;
	zend_string *constant_name;
	USE_OPLINE

	SAVE_OPLINE();

	do {
		if (IS_CONST == IS_CONST && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST) {
			if (EXPECTED(CACHED_PTR(opline->extended_value + sizeof(void*)))) {
				value = CACHED_PTR(opline->extended_value + sizeof(void*));
				break;
			}
		}
		if (IS_CONST == IS_CONST) {
			if (EXPECTED(CACHED_PTR(opline->extended_value))) {
				ce = CACHED_PTR(opline->extended_value);
			} else {
				ce = zend_fetch_class_by_name(Z_STR_P(RT_CONSTANT(opline, opline->op1)), Z_STR_P(RT_CONSTANT(opline, opline->op1) + 1), ZEND_FETCH_CLASS_DEFAULT | ZEND_FETCH_CLASS_EXCEPTION);
				if (UNEXPECTED(ce == NULL)) {
					ZVAL_UNDEF(EX_VAR(opline->result.var));
					FREE_OP(opline->op2_type, opline->op2.var);
					HANDLE_EXCEPTION();
				}
				CACHE_PTR(opline->extended_value, ce);
			}
		} else if (IS_CONST == IS_UNUSED) {
			ce = zend_fetch_class(NULL, opline->op1.num);
			if (UNEXPECTED(ce == NULL)) {
				ZVAL_UNDEF(EX_VAR(opline->result.var));
				FREE_OP(opline->op2_type, opline->op2.var);
				HANDLE_EXCEPTION();
			}
		} else {
			ce = Z_CE_P(EX_VAR(opline->op1.var));
		}
		if (IS_CONST != IS_CONST
			&& (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST
			&& EXPECTED(CACHED_PTR(opline->extended_value) == ce)) {
			value = CACHED_PTR(opline->extended_value + sizeof(void*));
			break;
		}

		constant_zv = _get_zval_ptr_tmpvarcv(opline->op2_type, opline->op2, BP_VAR_R EXECUTE_DATA_CC);
		if (UNEXPECTED(Z_TYPE_P(constant_zv) != IS_STRING)) {
			zend_invalid_class_constant_type_error(Z_TYPE_P(constant_zv));
			ZVAL_UNDEF(EX_VAR(opline->result.var));
			FREE_OP(opline->op2_type, opline->op2.var);
			HANDLE_EXCEPTION();
		}
		constant_name = Z_STR_P(constant_zv);
		/* Magic 'class' for constant OP2 is caught at compile-time */
		if ((IS_TMP_VAR|IS_VAR|IS_CV) != IS_CONST && UNEXPECTED(zend_string_equals_literal_ci(constant_name, "class"))) {
			ZVAL_STR_COPY(EX_VAR(opline->result.var), ce->name);
			FREE_OP(opline->op2_type, opline->op2.var);
			ZEND_VM_NEXT_OPCODE();
		}
		zv = (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST
			? zend_hash_find_known_hash(CE_CONSTANTS_TABLE(ce), constant_name)
			: zend_hash_find(CE_CONSTANTS_TABLE(ce), constant_name);

		if (EXPECTED(zv != NULL)) {
			c = Z_PTR_P(zv);
			scope = EX(func)->op_array.scope;
			if (!zend_verify_const_access(c, scope)) {
				zend_throw_error(NULL, "Cannot access %s constant %s::%s", zend_visibility_string(ZEND_CLASS_CONST_FLAGS(c)), ZSTR_VAL(ce->name), ZSTR_VAL(constant_name));
				ZVAL_UNDEF(EX_VAR(opline->result.var));
				FREE_OP(opline->op2_type, opline->op2.var);
				HANDLE_EXCEPTION();
			}

			if (ce->ce_flags & ZEND_ACC_TRAIT) {
				zend_throw_error(NULL, "Cannot access trait constant %s::%s directly", ZSTR_VAL(ce->name), ZSTR_VAL(constant_name));
				ZVAL_UNDEF(EX_VAR(opline->result.var));
				FREE_OP(opline->op2_type, opline->op2.var);
				HANDLE_EXCEPTION();
			}

			bool is_constant_deprecated = ZEND_CLASS_CONST_FLAGS(c) & ZEND_ACC_DEPRECATED;
			if (UNEXPECTED(is_constant_deprecated) && !CONST_IS_RECURSIVE(c)) {
				if (c->ce->type == ZEND_USER_CLASS) {
					/* Recursion protection only applied to user constants, GH-18463 */
					CONST_PROTECT_RECURSION(c);
				}
				zend_deprecated_class_constant(c, constant_name);
				if (c->ce->type == ZEND_USER_CLASS) {
					CONST_UNPROTECT_RECURSION(c);
				}

				if (EG(exception)) {
					ZVAL_UNDEF(EX_VAR(opline->result.var));
					FREE_OP(opline->op2_type, opline->op2.var);
					HANDLE_EXCEPTION();
				}
			}

			value = &c->value;
			// Enums require loading of all class constants to build the backed enum table
			if (ce->ce_flags & ZEND_ACC_ENUM && ce->enum_backing_type != IS_UNDEF && ce->type == ZEND_USER_CLASS && !(ce->ce_flags & ZEND_ACC_CONSTANTS_UPDATED)) {
				if (UNEXPECTED(zend_update_class_constants(ce) == FAILURE)) {
					ZVAL_UNDEF(EX_VAR(opline->result.var));
					FREE_OP(opline->op2_type, opline->op2.var);
					HANDLE_EXCEPTION();
				}
			}
			if (Z_TYPE_P(value) == IS_CONSTANT_AST) {
				if (UNEXPECTED(zend_update_class_constant(c, constant_name, c->ce) != SUCCESS)) {
					ZVAL_UNDEF(EX_VAR(opline->result.var));
					FREE_OP(opline->op2_type, opline->op2.var);
					HANDLE_EXCEPTION();
				}
			}
			if ((IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST && !is_constant_deprecated) {
				CACHE_POLYMORPHIC_PTR(opline->extended_value, ce, value);
			}
		} else {
			zend_throw_error(NULL, "Undefined constant %s::%s",
				ZSTR_VAL(ce->name), ZSTR_VAL(constant_name));
			ZVAL_UNDEF(EX_VAR(opline->result.var));
			FREE_OP(opline->op2_type, opline->op2.var);
			HANDLE_EXCEPTION();
		}
	} while (0);

	ZVAL_COPY_OR_DUP(EX_VAR(opline->result.var), value);

	FREE_OP(opline->op2_type, opline->op2.var);
	ZEND_VM_NEXT_OPCODE();
}

static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_SUB_LONG_NO_OVERFLOW_SPEC_CONST_TMPVARCV_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2, *result;

	op1 = RT_CONSTANT(opline, opline->op1);
	op2 = EX_VAR(opline->op2.var);
	result = EX_VAR(opline->result.var);
	ZVAL_LONG(result, Z_LVAL_P(op1) - Z_LVAL_P(op2));
	ZEND_VM_NEXT_OPCODE();
}

static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_SUB_LONG_SPEC_CONST_TMPVARCV_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2, *result;

	op1 = RT_CONSTANT(opline, opline->op1);
	op2 = EX_VAR(opline->op2.var);
	result = EX_VAR(opline->result.var);
	fast_long_sub_function(result, op1, op2);
	ZEND_VM_NEXT_OPCODE();
}

static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_SUB_DOUBLE_SPEC_CONST_TMPVARCV_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2, *result;

	op1 = RT_CONSTANT(opline, opline->op1);
	op2 = EX_VAR(opline->op2.var);
	result = EX_VAR(opline->result.var);
	ZVAL_DOUBLE(result, Z_DVAL_P(op1) - Z_DVAL_P(op2));
	ZEND_VM_NEXT_OPCODE();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;
	bool result;

	op1 = RT_CONSTANT(opline, opline->op1);
	op2 = EX_VAR(opline->op2.var);
	result = (Z_LVAL_P(op1) < Z_LVAL_P(op2));
	ZEND_VM_SMART_BRANCH_NONE(result, 0);
}

static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV_JMPZ_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;
	bool result;

	op1 = RT_CONSTANT(opline, opline->op1);
	op2 = EX_VAR(opline->op2.var);
	result = (Z_LVAL_P(op1) < Z_LVAL_P(op2));
	ZEND_VM_SMART_BRANCH_JMPZ(result, 0);
}

static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV_JMPNZ_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;
	bool result;

	op1 = RT_CONSTANT(opline, opline->op1);
	op2 = EX_VAR(opline->op2.var);
	result = (Z_LVAL_P(op1) < Z_LVAL_P(op2));
	ZEND_VM_SMART_BRANCH_JMPNZ(result, 0);
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;
	bool result;

	op1 = RT_CONSTANT(opline, opline->op1);
	op2 = EX_VAR(opline->op2.var);
	result = (Z_DVAL_P(op1) < Z_DVAL_P(op2));
	ZEND_VM_SMART_BRANCH_NONE(result, 0);
}

static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV_JMPZ_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;
	bool result;

	op1 = RT_CONSTANT(opline, opline->op1);
	op2 = EX_VAR(opline->op2.var);
	result = (Z_DVAL_P(op1) < Z_DVAL_P(op2));
	ZEND_VM_SMART_BRANCH_JMPZ(result, 0);
}

static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV_JMPNZ_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;
	bool result;

	op1 = RT_CONSTANT(opline, opline->op1);
	op2 = EX_VAR(opline->op2.var);
	result = (Z_DVAL_P(op1) < Z_DVAL_P(op2));
	ZEND_VM_SMART_BRANCH_JMPNZ(result, 0);
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;
	bool result;

	op1 = RT_CONSTANT(opline, opline->op1);
	op2 = EX_VAR(opline->op2.var);
	result = (Z_LVAL_P(op1) <= Z_LVAL_P(op2));
	ZEND_VM_SMART_BRANCH_NONE(result, 0);
}

static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV_JMPZ_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;
	bool result;

	op1 = RT_CONSTANT(opline, opline->op1);
	op2 = EX_VAR(opline->op2.var);
	result = (Z_LVAL_P(op1) <= Z_LVAL_P(op2));
	ZEND_VM_SMART_BRANCH_JMPZ(result, 0);
}

static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV_JMPNZ_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;
	bool result;

	op1 = RT_CONSTANT(opline, opline->op1);
	op2 = EX_VAR(opline->op2.var);
	result = (Z_LVAL_P(op1) <= Z_LVAL_P(op2));
	ZEND_VM_SMART_BRANCH_JMPNZ(result, 0);
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;
	bool result;

	op1 = RT_CONSTANT(opline, opline->op1);
	op2 = EX_VAR(opline->op2.var);
	result = (Z_DVAL_P(op1) <= Z_DVAL_P(op2));
	ZEND_VM_SMART_BRANCH_NONE(result, 0);
}

static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_JMPZ_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;
	bool result;

	op1 = RT_CONSTANT(opline, opline->op1);
	op2 = EX_VAR(opline->op2.var);
	result = (Z_DVAL_P(op1) <= Z_DVAL_P(op2));
	ZEND_VM_SMART_BRANCH_JMPZ(result, 0);
}

static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_JMPNZ_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;
	bool result;

	op1 = RT_CONSTANT(opline, opline->op1);
	op2 = EX_VAR(opline->op2.var);
	result = (Z_DVAL_P(op1) <= Z_DVAL_P(op2));
	ZEND_VM_SMART_BRANCH_JMPNZ(result, 0);
}

static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_FETCH_DIM_R_INDEX_SPEC_CONST_TMPVARCV_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *container, *dim, *value;
	zend_long offset;
	HashTable *ht;

	container = RT_CONSTANT(opline, opline->op1);
	dim = EX_VAR(opline->op2.var);
	if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
fetch_dim_r_index_array:
		if (EXPECTED(Z_TYPE_P(dim) == IS_LONG)) {
			offset = Z_LVAL_P(dim);
		} else {
			SAVE_OPLINE();
			zend_fetch_dimension_address_read_R(container, dim, (IS_TMP_VAR|IS_VAR|IS_CV) OPLINE_CC EXECUTE_DATA_CC);


			ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
		}
		ht = Z_ARRVAL_P(container);
		ZEND_HASH_INDEX_FIND(ht, offset, value, fetch_dim_r_index_undef);
		ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
		if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
			SAVE_OPLINE();


			ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
		} else {
			ZEND_VM_NEXT_OPCODE();
		}
	} else if (IS_CONST != IS_CONST && EXPECTED(Z_TYPE_P(container) == IS_REFERENCE)) {
		container = Z_REFVAL_P(container);
		if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
			goto fetch_dim_r_index_array;
		} else {
			goto fetch_dim_r_index_slow;
		}
	} else {
fetch_dim_r_index_slow:
		SAVE_OPLINE();
		if ((IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
			dim++;
		}
		zend_fetch_dimension_address_read_R_slow(container, dim OPLINE_CC EXECUTE_DATA_CC);


		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
	}

fetch_dim_r_index_undef:
	ZVAL_NULL(EX_VAR(opline->result.var));
	SAVE_OPLINE();
	zend_undefined_offset(offset);


	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_DIV_SPEC_CONST_TMPVAR_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;

	SAVE_OPLINE();
	op1 = RT_CONSTANT(opline, opline->op1);
	op2 = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
	div_function(EX_VAR(opline->result.var), op1, op2);


	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_POW_SPEC_CONST_TMPVAR_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;

	SAVE_OPLINE();
	op1 = RT_CONSTANT(opline, opline->op1);
	op2 = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
	pow_function(EX_VAR(opline->result.var), op1, op2);


	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_CONCAT_SPEC_CONST_TMPVAR_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;

	op1 = RT_CONSTANT(opline, opline->op1);
	op2 = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);

	if ((IS_CONST == IS_CONST || EXPECTED(Z_TYPE_P(op1) == IS_STRING)) &&
	    ((IS_TMP_VAR|IS_VAR) == IS_CONST || EXPECTED(Z_TYPE_P(op2) == IS_STRING))) {
		zend_string *op1_str = Z_STR_P(op1);
		zend_string *op2_str = Z_STR_P(op2);
		zend_string *str;
		uint32_t flags = ZSTR_GET_COPYABLE_CONCAT_PROPERTIES_BOTH(op1_str, op2_str);

		if (IS_CONST != IS_CONST && UNEXPECTED(ZSTR_LEN(op1_str) == 0)) {
			if ((IS_TMP_VAR|IS_VAR) == IS_CONST || (IS_TMP_VAR|IS_VAR) == IS_CV) {
				ZVAL_STR_COPY(EX_VAR(opline->result.var), op2_str);
			} else {
				ZVAL_STR(EX_VAR(opline->result.var), op2_str);
			}
			if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
				zend_string_release_ex(op1_str, 0);
			}
		} else if ((IS_TMP_VAR|IS_VAR) != IS_CONST && UNEXPECTED(ZSTR_LEN(op2_str) == 0)) {
			if (IS_CONST == IS_CONST || IS_CONST == IS_CV) {
				ZVAL_STR_COPY(EX_VAR(opline->result.var), op1_str);
			} else {
				ZVAL_STR(EX_VAR(opline->result.var), op1_str);
			}
			if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
				zend_string_release_ex(op2_str, 0);
			}
		} else if (IS_CONST != IS_CONST && IS_CONST != IS_CV &&
		    !ZSTR_IS_INTERNED(op1_str) && GC_REFCOUNT(op1_str) == 1) {
			size_t len = ZSTR_LEN(op1_str);

			if (UNEXPECTED(len > ZSTR_MAX_LEN - ZSTR_LEN(op2_str))) {
				zend_error_noreturn(E_ERROR, "Integer overflow in memory allocation");
			}
			str = zend_string_extend(op1_str, len + ZSTR_LEN(op2_str), 0);
			memcpy(ZSTR_VAL(str) + len, ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
			GC_ADD_FLAGS(str, flags);
			ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
			if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
				zend_string_release_ex(op2_str, 0);
			}
		} else {
			str = zend_string_alloc(ZSTR_LEN(op1_str) + ZSTR_LEN(op2_str), 0);
			memcpy(ZSTR_VAL(str), ZSTR_VAL(op1_str), ZSTR_LEN(op1_str));
			memcpy(ZSTR_VAL(str) + ZSTR_LEN(op1_str), ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
			GC_ADD_FLAGS(str, flags);
			ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
			if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
				zend_string_release_ex(op1_str, 0);
			}
			if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
				zend_string_release_ex(op2_str, 0);
			}
		}
		ZEND_VM_NEXT_OPCODE();
	} else {
		SAVE_OPLINE();

		if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
			op1 = ZVAL_UNDEFINED_OP1();
		}
		if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(op2) == IS_UNDEF)) {
			op2 = ZVAL_UNDEFINED_OP2();
		}
		concat_function(EX_VAR(opline->result.var), op1, op2);


		zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
	}
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_SPACESHIP_SPEC_CONST_TMPVAR_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;

	SAVE_OPLINE();
	op1 = RT_CONSTANT(opline, opline->op1);
	op2 = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
	compare_function(EX_VAR(opline->result.var), op1, op2);


	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_FETCH_DIM_R_SPEC_CONST_TMPVAR_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *container, *dim, *value;

	SAVE_OPLINE();
	container = RT_CONSTANT(opline, opline->op1);
	dim = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
	if (IS_CONST != IS_CONST) {
		if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
fetch_dim_r_array:
			value = zend_fetch_dimension_address_inner(Z_ARRVAL_P(container), dim, (IS_TMP_VAR|IS_VAR), BP_VAR_R EXECUTE_DATA_CC);
			ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
		} else if (EXPECTED(Z_TYPE_P(container) == IS_REFERENCE)) {
			container = Z_REFVAL_P(container);
			if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
				goto fetch_dim_r_array;
			} else {
				goto fetch_dim_r_slow;
			}
		} else {
fetch_dim_r_slow:
			if ((IS_TMP_VAR|IS_VAR) == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
				dim++;
			}
			zend_fetch_dimension_address_read_R_slow(container, dim OPLINE_CC EXECUTE_DATA_CC);
		}
	} else {
		zend_fetch_dimension_address_read_R(container, dim, (IS_TMP_VAR|IS_VAR) OPLINE_CC EXECUTE_DATA_CC);
	}
	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));


	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_FETCH_DIM_IS_SPEC_CONST_TMPVAR_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *container;

	SAVE_OPLINE();
	container = RT_CONSTANT(opline, opline->op1);
	zend_fetch_dimension_address_read_IS(container, _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC), (IS_TMP_VAR|IS_VAR) OPLINE_CC EXECUTE_DATA_CC);
	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));


	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_FETCH_DIM_FUNC_ARG_SPEC_CONST_TMPVAR_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
#if 0
	USE_OPLINE
#endif

	if (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) {
		if ((IS_CONST & (IS_CONST|IS_TMP_VAR))) {
			ZEND_VM_TAIL_CALL(zend_use_tmp_in_write_context_helper_SPEC_TAILCALL(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
		}
		ZEND_VM_TAIL_CALL(ZEND_NULL_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
	} else {
		if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED) {
			ZEND_VM_TAIL_CALL(zend_use_undef_in_read_context_helper_SPEC_TAILCALL(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
		}
		ZEND_VM_TAIL_CALL(ZEND_FETCH_DIM_R_SPEC_CONST_TMPVAR_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
	}
}

static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_FETCH_OBJ_R_SPEC_CONST_TMPVAR_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *container;
	void **cache_slot = NULL;

	SAVE_OPLINE();
	container = RT_CONSTANT(opline, opline->op1);

	if (IS_CONST == IS_CONST ||
	    (IS_CONST != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
		do {
			if ((IS_CONST & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
				container = Z_REFVAL_P(container);
				if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
					break;
				}
			}
			if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
				ZVAL_UNDEFINED_OP1();
			}
			zend_wrong_property_read(container, _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC));
			ZVAL_NULL(EX_VAR(opline->result.var));
			goto fetch_obj_r_finish;
		} while (0);
	}

	/* here we are sure we are dealing with an object */
	do {
		zend_object *zobj = Z_OBJ_P(container);
		zend_string *name, *tmp_name;
		zval *retval;

		if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
			cache_slot = CACHE_ADDR(opline->extended_value & ~ZEND_FETCH_REF /* FUNC_ARG fetch may contain it */);

			if (EXPECTED(zobj->ce == CACHED_PTR_EX(cache_slot))) {
				uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);

				if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
fetch_obj_r_simple:
					retval = OBJ_PROP(zobj, prop_offset);
					if (EXPECTED(Z_TYPE_INFO_P(retval) != IS_UNDEF)) {
						if (0 || (IS_CONST & (IS_TMP_VAR|IS_VAR)) != 0) {
							goto fetch_obj_r_copy;
						} else {
fetch_obj_r_fast_copy:
							ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
							ZEND_VM_NEXT_OPCODE();
						}
					}
				} else if (UNEXPECTED(IS_HOOKED_PROPERTY_OFFSET(prop_offset))) {
					zend_property_info *prop_info = CACHED_PTR_EX(cache_slot + 2);
					if (ZEND_IS_PROPERTY_HOOK_SIMPLE_READ(prop_offset)) {
						prop_offset = prop_info->offset;
						goto fetch_obj_r_simple;
					} else if (EXPECTED(ZEND_IS_PROPERTY_HOOK_SIMPLE_GET(prop_offset))) {
						zend_function *hook = prop_info->hooks[ZEND_PROPERTY_HOOK_GET];
						ZEND_ASSERT(hook->type == ZEND_USER_FUNCTION);
						ZEND_ASSERT(RUN_TIME_CACHE(&hook->op_array));

						uint32_t call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_HAS_THIS;
						if (IS_CONST & IS_CV) {
							GC_ADDREF(zobj);
						}
						if (IS_CONST & (IS_CV|IS_VAR|IS_TMP_VAR)) {
							call_info |= ZEND_CALL_RELEASE_THIS;
						}
						zend_execute_data *call = zend_vm_stack_push_call_frame(call_info, hook, 0, zobj);
						call->prev_execute_data = execute_data;
						call->call = NULL;
						call->return_value = EX_VAR(opline->result.var);
						call->run_time_cache = RUN_TIME_CACHE(&hook->op_array);

						execute_data = call;
						EG(current_execute_data) = execute_data;
						zend_init_cvs(0, hook->op_array.last_var EXECUTE_DATA_CC);

#if defined(ZEND_VM_IP_GLOBAL_REG) && ((ZEND_VM_KIND == ZEND_VM_KIND_CALL) || (ZEND_VM_KIND == ZEND_VM_KIND_HYBRID))
						opline = hook->op_array.opcodes;
#else
						EX(opline) = hook->op_array.opcodes;
#endif
						LOAD_OPLINE_EX();




						ZEND_VM_ENTER_EX();
					}
					/* Fall through to read_property for hooks. */
				} else if (EXPECTED(zobj->properties != NULL)) {
					ZEND_ASSERT(IS_DYNAMIC_PROPERTY_OFFSET(prop_offset));
					name = Z_STR_P(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC));
					if (!IS_UNKNOWN_DYNAMIC_PROPERTY_OFFSET(prop_offset)) {
						uintptr_t idx = ZEND_DECODE_DYN_PROP_OFFSET(prop_offset);

						if (EXPECTED(idx < zobj->properties->nNumUsed * sizeof(Bucket))) {
							Bucket *p = (Bucket*)((char*)zobj->properties->arData + idx);

							if (EXPECTED(p->key == name) ||
							    (EXPECTED(p->h == ZSTR_H(name)) &&
							     EXPECTED(p->key != NULL) &&
							     EXPECTED(zend_string_equal_content(p->key, name)))) {
								retval = &p->val;
								if (0 || (IS_CONST & (IS_TMP_VAR|IS_VAR)) != 0) {
									goto fetch_obj_r_copy;
								} else {
									goto fetch_obj_r_fast_copy;
								}
							}
						}
						CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_DYNAMIC_PROPERTY_OFFSET);
					}
					retval = zend_hash_find_known_hash(zobj->properties, name);
					if (EXPECTED(retval)) {
						uintptr_t idx = (char*)retval - (char*)zobj->properties->arData;
						CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_ENCODE_DYN_PROP_OFFSET(idx));
						if (0 || (IS_CONST & (IS_TMP_VAR|IS_VAR)) != 0) {
							goto fetch_obj_r_copy;
						} else {
							goto fetch_obj_r_fast_copy;
						}
					}
				}
			}
			name = Z_STR_P(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC));
		} else {
			name = zval_try_get_tmp_string(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC), &tmp_name);
			if (UNEXPECTED(!name)) {
				ZVAL_UNDEF(EX_VAR(opline->result.var));
				break;
			}
		}

#if ZEND_DEBUG
		/* For non-standard object handlers, verify a declared property type in debug builds.
		 * Fetch prop_info before calling read_property(), as it may deallocate the object. */
		zend_property_info *prop_info = NULL;
		if (zobj->handlers->read_property != zend_std_read_property) {
			prop_info = zend_get_property_info(zobj->ce, name, /* silent */ true);
		}
#endif
		retval = zobj->handlers->read_property(zobj, name, BP_VAR_R, cache_slot, EX_VAR(opline->result.var));
#if ZEND_DEBUG
		if (!EG(exception) && prop_info && prop_info != ZEND_WRONG_PROPERTY_INFO
				&& ZEND_TYPE_IS_SET(prop_info->type)) {
			ZVAL_OPT_DEREF(retval);
			zend_verify_property_type(prop_info, retval, /* strict */ true);
		}
#endif

		if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
			zend_tmp_string_release(tmp_name);
		}

		if (retval != EX_VAR(opline->result.var)) {
fetch_obj_r_copy:
			ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
		} else if (UNEXPECTED(Z_ISREF_P(retval))) {
			zend_unwrap_reference(retval);
		}
	} while (0);

fetch_obj_r_finish:
	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));


	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_FETCH_OBJ_IS_SPEC_CONST_TMPVAR_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *container;
	void **cache_slot = NULL;

	SAVE_OPLINE();
	container = RT_CONSTANT(opline, opline->op1);

	if (IS_CONST == IS_CONST ||
	    (IS_CONST != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
		do {
			if ((IS_CONST & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
				container = Z_REFVAL_P(container);
				if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
					break;
				}
			}
			if ((IS_TMP_VAR|IS_VAR) == IS_CV && Z_TYPE_P(EX_VAR(opline->op2.var)) == IS_UNDEF) {
				ZVAL_UNDEFINED_OP2();
			}
			ZVAL_NULL(EX_VAR(opline->result.var));
			goto fetch_obj_is_finish;
		} while (0);
	}

	/* here we are sure we are dealing with an object */
	do {
		zend_object *zobj = Z_OBJ_P(container);
		zend_string *name, *tmp_name;
		zval *retval;

		if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
			cache_slot = CACHE_ADDR(opline->extended_value);

			if (EXPECTED(zobj->ce == CACHED_PTR_EX(cache_slot))) {
				uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);

				if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
fetch_obj_is_simple:
					retval = OBJ_PROP(zobj, prop_offset);
					if (EXPECTED(Z_TYPE_P(retval) != IS_UNDEF)) {
						if (0 || (IS_CONST & (IS_TMP_VAR|IS_VAR)) != 0) {
							goto fetch_obj_is_copy;
						} else {
fetch_obj_is_fast_copy:
							ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
							ZEND_VM_NEXT_OPCODE();
						}
					}
				} else if (UNEXPECTED(IS_HOOKED_PROPERTY_OFFSET(prop_offset))) {
					if (ZEND_IS_PROPERTY_HOOK_SIMPLE_READ(prop_offset)) {
						zend_property_info *prop_info = CACHED_PTR_EX(cache_slot + 2);
						prop_offset = prop_info->offset;
						goto fetch_obj_is_simple;
					}
					/* Fall through to read_property for hooks. */
				} else if (EXPECTED(zobj->properties != NULL)) {
					ZEND_ASSERT(IS_DYNAMIC_PROPERTY_OFFSET(prop_offset));
					name = Z_STR_P(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC));
					if (!IS_UNKNOWN_DYNAMIC_PROPERTY_OFFSET(prop_offset)) {
						uintptr_t idx = ZEND_DECODE_DYN_PROP_OFFSET(prop_offset);

						if (EXPECTED(idx < zobj->properties->nNumUsed * sizeof(Bucket))) {
							Bucket *p = (Bucket*)((char*)zobj->properties->arData + idx);

							if (EXPECTED(p->key == name) ||
							    (EXPECTED(p->h == ZSTR_H(name)) &&
							     EXPECTED(p->key != NULL) &&
							     EXPECTED(zend_string_equal_content(p->key, name)))) {
								retval = &p->val;
								if (0 || (IS_CONST & (IS_TMP_VAR|IS_VAR)) != 0) {
									goto fetch_obj_is_copy;
								} else {
									goto fetch_obj_is_fast_copy;
								}
							}
						}
						CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_DYNAMIC_PROPERTY_OFFSET);
					}
					retval = zend_hash_find_known_hash(zobj->properties, name);
					if (EXPECTED(retval)) {
						uintptr_t idx = (char*)retval - (char*)zobj->properties->arData;
						CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_ENCODE_DYN_PROP_OFFSET(idx));
						if (0 || (IS_CONST & (IS_TMP_VAR|IS_VAR)) != 0) {
							goto fetch_obj_is_copy;
						} else {
							goto fetch_obj_is_fast_copy;
						}
					}
				}
			}
			name = Z_STR_P(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC));
		} else {
			name = zval_try_get_tmp_string(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC), &tmp_name);
			if (UNEXPECTED(!name)) {
				ZVAL_UNDEF(EX_VAR(opline->result.var));
				break;
			}
		}

		retval = zobj->handlers->read_property(zobj, name, BP_VAR_IS, cache_slot, EX_VAR(opline->result.var));

		if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
			zend_tmp_string_release(tmp_name);
		}

		if (retval != EX_VAR(opline->result.var)) {
fetch_obj_is_copy:
			ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
		} else if (UNEXPECTED(Z_ISREF_P(retval))) {
			zend_unwrap_reference(retval);
		}
	} while (0);

fetch_obj_is_finish:
	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));


	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CONST_TMPVAR_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
#if 0
	USE_OPLINE
#endif

	if (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) {
		/* Behave like FETCH_OBJ_W */
		if ((IS_CONST & (IS_CONST|IS_TMP_VAR))) {
			ZEND_VM_TAIL_CALL(zend_use_tmp_in_write_context_helper_SPEC_TAILCALL(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
		}
		ZEND_VM_TAIL_CALL(ZEND_NULL_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
	} else {
		ZEND_VM_TAIL_CALL(ZEND_FETCH_OBJ_R_SPEC_CONST_TMPVAR_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
	}
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_FETCH_LIST_R_SPEC_CONST_TMPVAR_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *container;

	SAVE_OPLINE();
	container = RT_CONSTANT(opline, opline->op1);
	zend_fetch_dimension_address_LIST_r(container, _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC), (IS_TMP_VAR|IS_VAR) OPLINE_CC EXECUTE_DATA_CC);
	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_FAST_CONCAT_SPEC_CONST_TMPVAR_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;
	zend_string *op1_str, *op2_str, *str;


	op1 = RT_CONSTANT(opline, opline->op1);
	op2 = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
	if ((IS_CONST == IS_CONST || EXPECTED(Z_TYPE_P(op1) == IS_STRING)) &&
	    ((IS_TMP_VAR|IS_VAR) == IS_CONST || EXPECTED(Z_TYPE_P(op2) == IS_STRING))) {
		zend_string *op1_str = Z_STR_P(op1);
		zend_string *op2_str = Z_STR_P(op2);
		zend_string *str;
		uint32_t flags = ZSTR_GET_COPYABLE_CONCAT_PROPERTIES_BOTH(op1_str, op2_str);

		if (IS_CONST != IS_CONST && UNEXPECTED(ZSTR_LEN(op1_str) == 0)) {
			if ((IS_TMP_VAR|IS_VAR) == IS_CONST || (IS_TMP_VAR|IS_VAR) == IS_CV) {
				ZVAL_STR_COPY(EX_VAR(opline->result.var), op2_str);
			} else {
				ZVAL_STR(EX_VAR(opline->result.var), op2_str);
			}
			if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
				zend_string_release_ex(op1_str, 0);
			}
		} else if ((IS_TMP_VAR|IS_VAR) != IS_CONST && UNEXPECTED(ZSTR_LEN(op2_str) == 0)) {
			if (IS_CONST == IS_CONST || IS_CONST == IS_CV) {
				ZVAL_STR_COPY(EX_VAR(opline->result.var), op1_str);
			} else {
				ZVAL_STR(EX_VAR(opline->result.var), op1_str);
			}
			if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
				zend_string_release_ex(op2_str, 0);
			}
		} else if (IS_CONST != IS_CONST && IS_CONST != IS_CV &&
		    !ZSTR_IS_INTERNED(op1_str) && GC_REFCOUNT(op1_str) == 1) {
			size_t len = ZSTR_LEN(op1_str);

			str = zend_string_extend(op1_str, len + ZSTR_LEN(op2_str), 0);
			memcpy(ZSTR_VAL(str) + len, ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
			GC_ADD_FLAGS(str, flags);
			ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
			if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
				zend_string_release_ex(op2_str, 0);
			}
		} else {
			str = zend_string_alloc(ZSTR_LEN(op1_str) + ZSTR_LEN(op2_str), 0);
			memcpy(ZSTR_VAL(str), ZSTR_VAL(op1_str), ZSTR_LEN(op1_str));
			memcpy(ZSTR_VAL(str) + ZSTR_LEN(op1_str), ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
			GC_ADD_FLAGS(str, flags);
			ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
			if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
				zend_string_release_ex(op1_str, 0);
			}
			if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
				zend_string_release_ex(op2_str, 0);
			}
		}
		ZEND_VM_NEXT_OPCODE();
	}

	SAVE_OPLINE();
	if (IS_CONST == IS_CONST) {
		op1_str = Z_STR_P(op1);
	} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
		op1_str = zend_string_copy(Z_STR_P(op1));
	} else {
		if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
			ZVAL_UNDEFINED_OP1();
		}
		op1_str = zval_get_string_func(op1);
	}
	if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
		op2_str = Z_STR_P(op2);
	} else if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
		op2_str = zend_string_copy(Z_STR_P(op2));
	} else {
		if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(op2) == IS_UNDEF)) {
			ZVAL_UNDEFINED_OP2();
		}
		op2_str = zval_get_string_func(op2);
	}
	do {
		if (IS_CONST != IS_CONST) {
			if (UNEXPECTED(ZSTR_LEN(op1_str) == 0)) {
				if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
					if (UNEXPECTED(Z_REFCOUNTED_P(op2))) {
						GC_ADDREF(op2_str);
					}
				}
				ZVAL_STR(EX_VAR(opline->result.var), op2_str);
				zend_string_release_ex(op1_str, 0);
				break;
			}
		}
		if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
			if (UNEXPECTED(ZSTR_LEN(op2_str) == 0)) {
				if (IS_CONST == IS_CONST) {
					if (UNEXPECTED(Z_REFCOUNTED_P(op1))) {
						GC_ADDREF(op1_str);
					}
				}
				ZVAL_STR(EX_VAR(opline->result.var), op1_str);
				zend_string_release_ex(op2_str, 0);
				break;
			}
		}
		str = zend_string_alloc(ZSTR_LEN(op1_str) + ZSTR_LEN(op2_str), 0);
		memcpy(ZSTR_VAL(str), ZSTR_VAL(op1_str), ZSTR_LEN(op1_str));
		memcpy(ZSTR_VAL(str) + ZSTR_LEN(op1_str), ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);

		ZSTR_COPY_CONCAT_PROPERTIES_BOTH(str, op1_str, op2_str);
		ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
		if (IS_CONST != IS_CONST) {
			zend_string_release_ex(op1_str, 0);
		}
		if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
			zend_string_release_ex(op2_str, 0);
		}
	} while (0);


	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_INIT_METHOD_CALL_SPEC_CONST_TMPVAR_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *function_name;
	zval *object;
	zend_function *fbc;
	zend_class_entry *called_scope;
	zend_object *obj;
	zend_execute_data *call;
	uint32_t call_info;

	SAVE_OPLINE();

	object = RT_CONSTANT(opline, opline->op1);

	if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
		function_name = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
	}

	if ((IS_TMP_VAR|IS_VAR) != IS_CONST &&
	    UNEXPECTED(Z_TYPE_P(function_name) != IS_STRING)) {
		do {
			if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && Z_ISREF_P(function_name)) {
				function_name = Z_REFVAL_P(function_name);
				if (EXPECTED(Z_TYPE_P(function_name) == IS_STRING)) {
					break;
				}
			} else if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) {
				ZVAL_UNDEFINED_OP2();
				if (UNEXPECTED(EG(exception) != NULL)) {


					HANDLE_EXCEPTION();
				}
			}
			zend_throw_error(NULL, "Method name must be a string");
			zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));


			HANDLE_EXCEPTION();
		} while (0);
	}

	if (IS_CONST == IS_UNUSED) {
		obj = Z_OBJ_P(object);
	} else {
		do {
			if (IS_CONST != IS_CONST && EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
				obj = Z_OBJ_P(object);
			} else {
				if ((IS_CONST & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(object))) {
					zend_reference *ref = Z_REF_P(object);

					object = &ref->val;
					if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
						obj = Z_OBJ_P(object);
						if (IS_CONST & IS_VAR) {
							if (UNEXPECTED(GC_DELREF(ref) == 0)) {
								efree_size(ref, sizeof(zend_reference));
							} else {
								Z_ADDREF_P(object);
							}
						}
						break;
					}
				}
				if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
					object = ZVAL_UNDEFINED_OP1();
					if (UNEXPECTED(EG(exception) != NULL)) {
						if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
							zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
						}
						HANDLE_EXCEPTION();
					}
				}
				if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
					function_name = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
				}
				zend_invalid_method_call(object, function_name);
				zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));


				HANDLE_EXCEPTION();
			}
		} while (0);
	}

	called_scope = obj->ce;

	if ((IS_TMP_VAR|IS_VAR) == IS_CONST &&
	    EXPECTED(CACHED_PTR(opline->result.num) == called_scope)) {
		fbc = CACHED_PTR(opline->result.num + sizeof(void*));
	} else {
		zend_object *orig_obj = obj;

		if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
			function_name = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
		}

		/* First, locate the function. */
		fbc = obj->handlers->get_method(&obj, Z_STR_P(function_name), (((IS_TMP_VAR|IS_VAR) == IS_CONST) ? (RT_CONSTANT(opline, opline->op2) + 1) : NULL));
		if (UNEXPECTED(fbc == NULL)) {
			if (EXPECTED(!EG(exception))) {
				zend_undefined_method(orig_obj->ce, Z_STR_P(function_name));
			}
			zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
			if ((IS_CONST & (IS_VAR|IS_TMP_VAR)) && GC_DELREF(orig_obj) == 0) {
				zend_objects_store_del(orig_obj);
			}
			HANDLE_EXCEPTION();
		}
		if ((IS_TMP_VAR|IS_VAR) == IS_CONST &&
		    EXPECTED(!(fbc->common.fn_flags & (ZEND_ACC_CALL_VIA_TRAMPOLINE|ZEND_ACC_NEVER_CACHE))) &&
		    EXPECTED(obj == orig_obj)) {
			CACHE_POLYMORPHIC_PTR(opline->result.num, called_scope, fbc);
		}
		if ((IS_CONST & (IS_VAR|IS_TMP_VAR)) && UNEXPECTED(obj != orig_obj)) {
			GC_ADDREF(obj); /* For $this pointer */
			if (GC_DELREF(orig_obj) == 0) {
				zend_objects_store_del(orig_obj);
			}
		}
		if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!RUN_TIME_CACHE(&fbc->op_array))) {
			init_func_run_time_cache(&fbc->op_array);
		}
	}

	if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
		zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
	}

	call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_HAS_THIS;
	if (UNEXPECTED((fbc->common.fn_flags & ZEND_ACC_STATIC) != 0)) {
		if ((IS_CONST & (IS_VAR|IS_TMP_VAR)) && GC_DELREF(obj) == 0) {
			zend_objects_store_del(obj);
			if (UNEXPECTED(EG(exception))) {
				HANDLE_EXCEPTION();
			}
		}
		/* call static method */
		obj = (zend_object*)called_scope;
		call_info = ZEND_CALL_NESTED_FUNCTION;
	} else if (IS_CONST & (IS_VAR|IS_TMP_VAR|IS_CV)) {
		if (IS_CONST == IS_CV) {
			GC_ADDREF(obj); /* For $this pointer */
		}
		/* CV may be changed indirectly (e.g. when it's a reference) */
		call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_HAS_THIS | ZEND_CALL_RELEASE_THIS;
	}

	call = zend_vm_stack_push_call_frame(call_info,
		fbc, opline->extended_value, obj);
	call->prev_execute_data = EX(call);
	EX(call) = call;

	ZEND_VM_NEXT_OPCODE();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_INIT_STATIC_METHOD_CALL_SPEC_CONST_TMPVAR_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *function_name;
	zend_class_entry *ce;
	uint32_t call_info;
	zend_function *fbc;
	zend_execute_data *call;

	SAVE_OPLINE();

	if (IS_CONST == IS_CONST) {
		/* no function found. try a static method in class */
		ce = CACHED_PTR(opline->result.num);
		if (UNEXPECTED(ce == NULL)) {
			ce = zend_fetch_class_by_name(Z_STR_P(RT_CONSTANT(opline, opline->op1)), Z_STR_P(RT_CONSTANT(opline, opline->op1) + 1), ZEND_FETCH_CLASS_DEFAULT | ZEND_FETCH_CLASS_EXCEPTION);
			if (UNEXPECTED(ce == NULL)) {
				zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
				HANDLE_EXCEPTION();
			}
			if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
				CACHE_PTR(opline->result.num, ce);
			}
		}
	} else if (IS_CONST == IS_UNUSED) {
		ce = zend_fetch_class(NULL, opline->op1.num);
		if (UNEXPECTED(ce == NULL)) {
			zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
			HANDLE_EXCEPTION();
		}
	} else {
		ce = Z_CE_P(EX_VAR(opline->op1.var));
	}

	if (IS_CONST == IS_CONST &&
	    (IS_TMP_VAR|IS_VAR) == IS_CONST &&
	    EXPECTED((fbc = CACHED_PTR(opline->result.num + sizeof(void*))) != NULL)) {
		/* nothing to do */
	} else if (IS_CONST != IS_CONST &&
	           (IS_TMP_VAR|IS_VAR) == IS_CONST &&
	           EXPECTED(CACHED_PTR(opline->result.num) == ce)) {
		fbc = CACHED_PTR(opline->result.num + sizeof(void*));
	} else if ((IS_TMP_VAR|IS_VAR) != IS_UNUSED) {
		function_name = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
		if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
			if (UNEXPECTED(Z_TYPE_P(function_name) != IS_STRING)) {
				do {
					if ((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV) && Z_ISREF_P(function_name)) {
						function_name = Z_REFVAL_P(function_name);
						if (EXPECTED(Z_TYPE_P(function_name) == IS_STRING)) {
							break;
						}
					} else if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) {
						ZVAL_UNDEFINED_OP2();
						if (UNEXPECTED(EG(exception) != NULL)) {
							HANDLE_EXCEPTION();
						}
					}
					zend_throw_error(NULL, "Method name must be a string");
					zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
					HANDLE_EXCEPTION();
				} while (0);
			}
		}

		if (ce->get_static_method) {
			fbc = ce->get_static_method(ce, Z_STR_P(function_name));
		} else {
			fbc = zend_std_get_static_method(ce, Z_STR_P(function_name), (((IS_TMP_VAR|IS_VAR) == IS_CONST) ? (RT_CONSTANT(opline, opline->op2) + 1) : NULL));
		}
		if (UNEXPECTED(fbc == NULL)) {
			if (EXPECTED(!EG(exception))) {
				zend_undefined_method(ce, Z_STR_P(function_name));
			}
			zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
			HANDLE_EXCEPTION();
		}
		if ((IS_TMP_VAR|IS_VAR) == IS_CONST &&
		    EXPECTED(!(fbc->common.fn_flags & (ZEND_ACC_CALL_VIA_TRAMPOLINE|ZEND_ACC_NEVER_CACHE))) &&
			EXPECTED(!(fbc->common.scope->ce_flags & ZEND_ACC_TRAIT))) {
			CACHE_POLYMORPHIC_PTR(opline->result.num, ce, fbc);
		}
		if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!RUN_TIME_CACHE(&fbc->op_array))) {
			init_func_run_time_cache(&fbc->op_array);
		}
		if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
			zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
		}
	} else {
		if (UNEXPECTED(ce->constructor == NULL)) {
			zend_throw_error(NULL, "Cannot call constructor");
			HANDLE_EXCEPTION();
		}
		if (Z_TYPE(EX(This)) == IS_OBJECT && Z_OBJ(EX(This))->ce != ce->constructor->common.scope && (ce->constructor->common.fn_flags & ZEND_ACC_PRIVATE)) {
			zend_throw_error(NULL, "Cannot call private %s::__construct()", ZSTR_VAL(ce->name));
			HANDLE_EXCEPTION();
		}
		fbc = ce->constructor;
		if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!RUN_TIME_CACHE(&fbc->op_array))) {
			init_func_run_time_cache(&fbc->op_array);
		}
	}

	if (!(fbc->common.fn_flags & ZEND_ACC_STATIC)) {
		if (Z_TYPE(EX(This)) == IS_OBJECT && instanceof_function(Z_OBJCE(EX(This)), ce)) {
			ce = (zend_class_entry*)Z_OBJ(EX(This));
			call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_HAS_THIS;
		} else {
			zend_non_static_method_call(fbc);
			HANDLE_EXCEPTION();
		}
	} else {
		/* previous opcode is ZEND_FETCH_CLASS */
		if (IS_CONST == IS_UNUSED
		 && ((opline->op1.num & ZEND_FETCH_CLASS_MASK) == ZEND_FETCH_CLASS_PARENT ||
		     (opline->op1.num & ZEND_FETCH_CLASS_MASK) == ZEND_FETCH_CLASS_SELF)) {
			if (Z_TYPE(EX(This)) == IS_OBJECT) {
				ce = Z_OBJCE(EX(This));
			} else {
				ce = Z_CE(EX(This));
			}
		}
		call_info = ZEND_CALL_NESTED_FUNCTION;
	}

	call = zend_vm_stack_push_call_frame(call_info,
		fbc, opline->extended_value, ce);
	call->prev_execute_data = EX(call);
	EX(call) = call;

	ZEND_VM_NEXT_OPCODE();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_INIT_USER_CALL_SPEC_CONST_TMPVAR_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *function_name;
	zend_fcall_info_cache fcc;
	char *error = NULL;
	zend_function *func;
	void *object_or_called_scope;
	zend_execute_data *call;
	uint32_t call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_DYNAMIC;

	SAVE_OPLINE();
	function_name = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
	if (zend_is_callable_ex(function_name, NULL, 0, NULL, &fcc, &error)) {
		ZEND_ASSERT(!error);

		/* Deprecation can be emitted from zend_is_callable_ex(), which can
		 * invoke a user error handler and throw an exception.
		 * For the CONST and CV case we reuse the same exception block below
		 * to make sure we don't increase VM size too much. */
		if (!((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) && UNEXPECTED(EG(exception))) {
			zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
			HANDLE_EXCEPTION();
		}

		func = fcc.function_handler;
		object_or_called_scope = fcc.called_scope;
		if (func->common.fn_flags & ZEND_ACC_CLOSURE) {
			/* Delay closure destruction until its invocation */
			GC_ADDREF(ZEND_CLOSURE_OBJECT(func));
			call_info |= ZEND_CALL_CLOSURE;
			if (func->common.fn_flags & ZEND_ACC_FAKE_CLOSURE) {
				call_info |= ZEND_CALL_FAKE_CLOSURE;
			}
			if (fcc.object) {
				object_or_called_scope = fcc.object;
				call_info |= ZEND_CALL_HAS_THIS;
			}
		} else if (fcc.object) {
			GC_ADDREF(fcc.object); /* For $this pointer */
			object_or_called_scope = fcc.object;
			call_info |= ZEND_CALL_RELEASE_THIS | ZEND_CALL_HAS_THIS;
		}

		zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
		if (((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) && UNEXPECTED(EG(exception))) {
			if (call_info & ZEND_CALL_CLOSURE) {
				zend_object_release(ZEND_CLOSURE_OBJECT(func));
			} else if (call_info & ZEND_CALL_RELEASE_THIS) {
				zend_object_release(fcc.object);
			}
			HANDLE_EXCEPTION();
		}

		if (EXPECTED(func->type == ZEND_USER_FUNCTION) && UNEXPECTED(!RUN_TIME_CACHE(&func->op_array))) {
			init_func_run_time_cache(&func->op_array);
		}
	} else {
		zend_type_error("%s(): Argument #1 ($callback) must be a valid callback, %s", Z_STRVAL_P(RT_CONSTANT(opline, opline->op1)), error);
		efree(error);
		zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
		HANDLE_EXCEPTION();
	}

	call = zend_vm_stack_push_call_frame(call_info,
		func, opline->extended_value, object_or_called_scope);
	call->prev_execute_data = EX(call);
	EX(call) = call;

	ZEND_VM_NEXT_OPCODE();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_TMPVAR_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *expr_ptr, new_expr;

	SAVE_OPLINE();
	if ((IS_CONST == IS_VAR || IS_CONST == IS_CV) &&
	    UNEXPECTED(opline->extended_value & ZEND_ARRAY_ELEMENT_REF)) {
		expr_ptr = zend_get_bad_ptr();
		if (Z_ISREF_P(expr_ptr)) {
			Z_ADDREF_P(expr_ptr);
		} else {
			ZVAL_MAKE_REF_EX(expr_ptr, 2);
		}


	} else {
		expr_ptr = RT_CONSTANT(opline, opline->op1);
		if (IS_CONST == IS_TMP_VAR) {
			/* pass */
		} else if (IS_CONST == IS_CONST) {
			Z_TRY_ADDREF_P(expr_ptr);
		} else if (IS_CONST == IS_CV) {
			ZVAL_DEREF(expr_ptr);
			Z_TRY_ADDREF_P(expr_ptr);
		} else /* if (IS_CONST == IS_VAR) */ {
			if (UNEXPECTED(Z_ISREF_P(expr_ptr))) {
				zend_refcounted *ref = Z_COUNTED_P(expr_ptr);

				expr_ptr = Z_REFVAL_P(expr_ptr);
				if (UNEXPECTED(GC_DELREF(ref) == 0)) {
					ZVAL_COPY_VALUE(&new_expr, expr_ptr);
					expr_ptr = &new_expr;
					efree_size(ref, sizeof(zend_reference));
				} else if (Z_OPT_REFCOUNTED_P(expr_ptr)) {
					Z_ADDREF_P(expr_ptr);
				}
			}
		}
	}

	if ((IS_TMP_VAR|IS_VAR) != IS_UNUSED) {
		zval *offset = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
		zend_string *str;
		zend_ulong hval;

add_again:
		if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) {
			str = Z_STR_P(offset);
			if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
				if (ZEND_HANDLE_NUMERIC(str, hval)) {
					goto num_index;
				}
			}
str_index:
			zend_hash_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), str, expr_ptr);
		} else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
			hval = Z_LVAL_P(offset);
num_index:
			zend_hash_index_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), hval, expr_ptr);
		} else if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && EXPECTED(Z_TYPE_P(offset) == IS_REFERENCE)) {
			offset = Z_REFVAL_P(offset);
			goto add_again;
		} else if (UNEXPECTED(Z_TYPE_P(offset) == IS_NULL)) {
			zval tmp;
			if (IS_CONST == IS_CV || IS_CONST == IS_VAR) {
				ZVAL_COPY(&tmp, expr_ptr);
			}
			zend_error(E_DEPRECATED, "Using null as an array offset is deprecated, use an empty string instead");
			if (IS_CONST == IS_CV || IS_CONST == IS_VAR) {
				/* A userland error handler can do funky things to the expression, so reset it */
				zval_ptr_dtor(expr_ptr);
				ZVAL_COPY_VALUE(expr_ptr, &tmp);
			}
			if (UNEXPECTED(EG(exception))) {
				zval_ptr_dtor_nogc(expr_ptr);
				HANDLE_EXCEPTION();
			}
			str = ZSTR_EMPTY_ALLOC();
			goto str_index;
		} else if (Z_TYPE_P(offset) == IS_DOUBLE) {
			hval = zend_dval_to_lval_safe(Z_DVAL_P(offset));
			goto num_index;
		} else if (Z_TYPE_P(offset) == IS_FALSE) {
			hval = 0;
			goto num_index;
		} else if (Z_TYPE_P(offset) == IS_TRUE) {
			hval = 1;
			goto num_index;
		} else if (Z_TYPE_P(offset) == IS_RESOURCE) {
			zend_use_resource_as_offset(offset);
			hval = Z_RES_HANDLE_P(offset);
			goto num_index;
		} else if ((IS_TMP_VAR|IS_VAR) == IS_CV && Z_TYPE_P(offset) == IS_UNDEF) {
			ZVAL_UNDEFINED_OP2();
			str = ZSTR_EMPTY_ALLOC();
			goto str_index;
		} else {
			zend_illegal_array_offset_access(offset);
			zval_ptr_dtor_nogc(expr_ptr);
		}
		zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
	} else {
		if (!zend_hash_next_index_insert(Z_ARRVAL_P(EX_VAR(opline->result.var)), expr_ptr)) {
			zend_cannot_add_element();
			zval_ptr_dtor_nogc(expr_ptr);
		}
	}
	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_INIT_ARRAY_SPEC_CONST_TMPVAR_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	zval *array;
	uint32_t size;
	USE_OPLINE

	SAVE_OPLINE();
	array = EX_VAR(opline->result.var);
	if (IS_CONST != IS_UNUSED) {
		size = opline->extended_value >> ZEND_ARRAY_SIZE_SHIFT;
		ZVAL_ARR(array, zend_new_array(size));
		/* Explicitly initialize array as not-packed if flag is set */
		if (opline->extended_value & ZEND_ARRAY_NOT_PACKED) {
			zend_hash_real_init_mixed(Z_ARRVAL_P(array));
		}
		ZEND_VM_TAIL_CALL(ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_TMPVAR_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
	} else {
		ZVAL_ARR(array, zend_new_array(0));
		ZEND_VM_NEXT_OPCODE();
	}
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CONST_TMPVAR_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *container;
	bool result;
	zend_ulong hval;
	zval *offset;

	SAVE_OPLINE();
	container = RT_CONSTANT(opline, opline->op1);
	offset = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);

	if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
		HashTable *ht;
		zval *value;
		zend_string *str;

isset_dim_obj_array:
		ht = Z_ARRVAL_P(container);
isset_again:
		if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) {
			str = Z_STR_P(offset);
			if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
				if (ZEND_HANDLE_NUMERIC(str, hval)) {
					goto num_index_prop;
				}
			}
			value = zend_hash_find_ex(ht, str, (IS_TMP_VAR|IS_VAR) == IS_CONST);
		} else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
			hval = Z_LVAL_P(offset);
num_index_prop:
			value = zend_hash_index_find(ht, hval);
		} else if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(offset))) {
			offset = Z_REFVAL_P(offset);
			goto isset_again;
		} else {
			value = zend_find_array_dim_slow(ht, offset EXECUTE_DATA_CC);
			if (UNEXPECTED(EG(exception))) {
				result = 0;
				goto isset_dim_obj_exit;
			}
		}

		if (!(opline->extended_value & ZEND_ISEMPTY)) {
			/* > IS_NULL means not IS_UNDEF and not IS_NULL */
			result = value != NULL && Z_TYPE_P(value) > IS_NULL &&
			    (!Z_ISREF_P(value) || Z_TYPE_P(Z_REFVAL_P(value)) != IS_NULL);

			if (IS_CONST & (IS_CONST|IS_CV)) {
				/* avoid exception check */
				zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
				ZEND_VM_SMART_BRANCH(result, 0);
			}
		} else {
			result = (value == NULL || !i_zend_is_true(value));
		}
		goto isset_dim_obj_exit;
	} else if ((IS_CONST & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(container))) {
		container = Z_REFVAL_P(container);
		if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
			goto isset_dim_obj_array;
		}
	}

	if ((IS_TMP_VAR|IS_VAR) == IS_CONST && Z_EXTRA_P(offset) == ZEND_EXTRA_VALUE) {
		offset++;
	}
	if (!(opline->extended_value & ZEND_ISEMPTY)) {
		result = zend_isset_dim_slow(container, offset EXECUTE_DATA_CC);
	} else {
		result = zend_isempty_dim_slow(container, offset EXECUTE_DATA_CC);
	}

isset_dim_obj_exit:
	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));


	ZEND_VM_SMART_BRANCH(result, 1);
}

static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CONST_TMPVAR_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *container;
	int result;
	zval *offset;
	zend_string *name, *tmp_name;

	SAVE_OPLINE();
	container = RT_CONSTANT(opline, opline->op1);
	offset = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);

	if (IS_CONST == IS_CONST ||
	    (IS_CONST != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
		if ((IS_CONST & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
			container = Z_REFVAL_P(container);
			if (UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT)) {
				result = (opline->extended_value & ZEND_ISEMPTY);
				goto isset_object_finish;
			}
		} else {
			result = (opline->extended_value & ZEND_ISEMPTY);
			goto isset_object_finish;
		}
	}

	if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
		name = Z_STR_P(offset);
	} else {
		name = zval_try_get_tmp_string(offset, &tmp_name);
		if (UNEXPECTED(!name)) {
			result = 0;
			goto isset_object_finish;
		}
	}

	result =
		(opline->extended_value & ZEND_ISEMPTY) ^
		Z_OBJ_HT_P(container)->has_property(Z_OBJ_P(container), name, (opline->extended_value & ZEND_ISEMPTY), (((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(opline->extended_value & ~ZEND_ISEMPTY) : NULL));

	if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
		zend_tmp_string_release(tmp_name);
	}

isset_object_finish:
	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));


	ZEND_VM_SMART_BRANCH(result, 1);
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_ARRAY_KEY_EXISTS_SPEC_CONST_TMPVAR_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE

	zval *key, *subject;
	HashTable *ht;
	bool result;

	SAVE_OPLINE();

	key = RT_CONSTANT(opline, opline->op1);
	subject = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);

	if (EXPECTED(Z_TYPE_P(subject) == IS_ARRAY)) {
array_key_exists_array:
		ht = Z_ARRVAL_P(subject);
		result = zend_array_key_exists_fast(ht, key OPLINE_CC EXECUTE_DATA_CC);
	} else {
		if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(subject))) {
			subject = Z_REFVAL_P(subject);
			if (EXPECTED(Z_TYPE_P(subject) == IS_ARRAY)) {
				goto array_key_exists_array;
			}
		}
		zend_array_key_exists_error(subject, key OPLINE_CC EXECUTE_DATA_CC);
		result = 0;
	}

	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));


	ZEND_VM_SMART_BRANCH(result, 1);
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_YIELD_SPEC_CONST_TMPVAR_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE

	zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C);

	SAVE_OPLINE();
	if (UNEXPECTED(generator->flags & ZEND_GENERATOR_FORCED_CLOSE)) {
		ZEND_VM_TAIL_CALL(zend_yield_in_closed_generator_helper_SPEC_TAILCALL(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
	}

	/* Destroy the previously yielded value */
	zval_ptr_dtor(&generator->value);

	/* Destroy the previously yielded key */
	zval_ptr_dtor(&generator->key);

	/* Set the new yielded value */
	if (IS_CONST != IS_UNUSED) {
		if (UNEXPECTED(EX(func)->op_array.fn_flags & ZEND_ACC_RETURN_REFERENCE)) {
			/* Constants and temporary variables aren't yieldable by reference,
			 * but we still allow them with a notice. */
			if (IS_CONST & (IS_CONST|IS_TMP_VAR)) {
				zval *value;

				zend_error(E_NOTICE, "Only variable references should be yielded by reference");

				value = RT_CONSTANT(opline, opline->op1);
				ZVAL_COPY_VALUE(&generator->value, value);
				if (IS_CONST == IS_CONST) {
					if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
						Z_ADDREF(generator->value);
					}
				}
			} else {
				zval *value_ptr = zend_get_bad_ptr();

				/* If a function call result is yielded and the function did
				 * not return by reference we throw a notice. */
				do {
					if (IS_CONST == IS_VAR) {
						ZEND_ASSERT(value_ptr != &EG(uninitialized_zval));
						if (opline->extended_value == ZEND_RETURNS_FUNCTION
						 && !Z_ISREF_P(value_ptr)) {
							zend_error(E_NOTICE, "Only variable references should be yielded by reference");
							ZVAL_COPY(&generator->value, value_ptr);
							break;
						}
					}
					if (Z_ISREF_P(value_ptr)) {
						Z_ADDREF_P(value_ptr);
					} else {
						ZVAL_MAKE_REF_EX(value_ptr, 2);
					}
					ZVAL_REF(&generator->value, Z_REF_P(value_ptr));
				} while (0);


			}
		} else {
			zval *value = RT_CONSTANT(opline, opline->op1);

			/* Consts, temporary variables and references need copying */
			if (IS_CONST == IS_CONST) {
				ZVAL_COPY_VALUE(&generator->value, value);
				if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
					Z_ADDREF(generator->value);
				}
			} else if (IS_CONST == IS_TMP_VAR) {
				ZVAL_COPY_VALUE(&generator->value, value);
			} else if ((IS_CONST & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) {
				ZVAL_COPY(&generator->value, Z_REFVAL_P(value));


			} else {
				ZVAL_COPY_VALUE(&generator->value, value);
				if (IS_CONST == IS_CV) {
					if (Z_OPT_REFCOUNTED_P(value)) Z_ADDREF_P(value);
				}
			}
		}
	} else {
		/* If no value was specified yield null */
		ZVAL_NULL(&generator->value);
	}

	/* Set the new yielded key */
	if ((IS_TMP_VAR|IS_VAR) != IS_UNUSED) {
		zval *key = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
		if (((IS_TMP_VAR|IS_VAR) & (IS_CV|IS_VAR)) && UNEXPECTED(Z_TYPE_P(key) == IS_REFERENCE)) {
			key = Z_REFVAL_P(key);
		}
		ZVAL_COPY(&generator->key, key);
		zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));

		if (Z_TYPE(generator->key) == IS_LONG
		    && Z_LVAL(generator->key) > generator->largest_used_integer_key
		) {
			generator->largest_used_integer_key = Z_LVAL(generator->key);
		}
	} else {
		/* If no key was specified we use auto-increment keys */
		generator->largest_used_integer_key++;
		ZVAL_LONG(&generator->key, generator->largest_used_integer_key);
	}

	if (RETURN_VALUE_USED(opline)) {
		/* If the return value of yield is used set the send
		 * target and initialize it to NULL */
		generator->send_target = EX_VAR(opline->result.var);
		ZVAL_NULL(generator->send_target);
	} else {
		generator->send_target = NULL;
	}

	/* The GOTO VM uses a local opline variable. We need to set the opline
	 * variable in execute_data so we don't resume at an old position. */
	SAVE_OPLINE();

	ZEND_VM_RETURN();
}

static zend_never_inline ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV_EX  zend_fetch_var_address_helper_SPEC_CONST_UNUSED_TAILCALL(ZEND_OPCODE_HANDLER_ARGS_EX int type);
static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_FETCH_R_SPEC_CONST_UNUSED_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	ZEND_VM_DISPATCH_TO_HELPER(zend_fetch_var_address_helper_SPEC_CONST_UNUSED_TAILCALL(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_EX BP_VAR_R));
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_FETCH_W_SPEC_CONST_UNUSED_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	ZEND_VM_DISPATCH_TO_HELPER(zend_fetch_var_address_helper_SPEC_CONST_UNUSED_TAILCALL(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_EX BP_VAR_W));
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_FETCH_RW_SPEC_CONST_UNUSED_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	ZEND_VM_DISPATCH_TO_HELPER(zend_fetch_var_address_helper_SPEC_CONST_UNUSED_TAILCALL(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_EX BP_VAR_RW));
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_FETCH_FUNC_ARG_SPEC_CONST_UNUSED_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	int fetch_type =
		(UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) ?
			BP_VAR_W : BP_VAR_R;
	ZEND_VM_DISPATCH_TO_HELPER(zend_fetch_var_address_helper_SPEC_CONST_UNUSED_TAILCALL(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_EX fetch_type));
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_FETCH_UNSET_SPEC_CONST_UNUSED_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	ZEND_VM_DISPATCH_TO_HELPER(zend_fetch_var_address_helper_SPEC_CONST_UNUSED_TAILCALL(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_EX BP_VAR_UNSET));
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_FETCH_IS_SPEC_CONST_UNUSED_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	ZEND_VM_DISPATCH_TO_HELPER(zend_fetch_var_address_helper_SPEC_CONST_UNUSED_TAILCALL(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_EX BP_VAR_IS));
}

/* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CONST|VAR) */
static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_FETCH_DIM_FUNC_ARG_SPEC_CONST_UNUSED_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
#if 0
	USE_OPLINE
#endif

	if (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) {
		if ((IS_CONST & (IS_CONST|IS_TMP_VAR))) {
			ZEND_VM_TAIL_CALL(zend_use_tmp_in_write_context_helper_SPEC_TAILCALL(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
		}
		ZEND_VM_TAIL_CALL(ZEND_NULL_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
	} else {
		if (IS_UNUSED == IS_UNUSED) {
			ZEND_VM_TAIL_CALL(zend_use_undef_in_read_context_helper_SPEC_TAILCALL(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
		}
		ZEND_VM_TAIL_CALL(ZEND_NULL_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
	}
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_INIT_STATIC_METHOD_CALL_SPEC_CONST_UNUSED_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *function_name;
	zend_class_entry *ce;
	uint32_t call_info;
	zend_function *fbc;
	zend_execute_data *call;

	SAVE_OPLINE();

	if (IS_CONST == IS_CONST) {
		/* no function found. try a static method in class */
		ce = CACHED_PTR(opline->result.num);
		if (UNEXPECTED(ce == NULL)) {
			ce = zend_fetch_class_by_name(Z_STR_P(RT_CONSTANT(opline, opline->op1)), Z_STR_P(RT_CONSTANT(opline, opline->op1) + 1), ZEND_FETCH_CLASS_DEFAULT | ZEND_FETCH_CLASS_EXCEPTION);
			if (UNEXPECTED(ce == NULL)) {


				HANDLE_EXCEPTION();
			}
			if (IS_UNUSED != IS_CONST) {
				CACHE_PTR(opline->result.num, ce);
			}
		}
	} else if (IS_CONST == IS_UNUSED) {
		ce = zend_fetch_class(NULL, opline->op1.num);
		if (UNEXPECTED(ce == NULL)) {


			HANDLE_EXCEPTION();
		}
	} else {
		ce = Z_CE_P(EX_VAR(opline->op1.var));
	}

	if (IS_CONST == IS_CONST &&
	    IS_UNUSED == IS_CONST &&
	    EXPECTED((fbc = CACHED_PTR(opline->result.num + sizeof(void*))) != NULL)) {
		/* nothing to do */
	} else if (IS_CONST != IS_CONST &&
	           IS_UNUSED == IS_CONST &&
	           EXPECTED(CACHED_PTR(opline->result.num) == ce)) {
		fbc = CACHED_PTR(opline->result.num + sizeof(void*));
	} else if (IS_UNUSED != IS_UNUSED) {
		function_name = NULL;
		if (IS_UNUSED != IS_CONST) {
			if (UNEXPECTED(Z_TYPE_P(function_name) != IS_STRING)) {
				do {
					if (IS_UNUSED & (IS_VAR|IS_CV) && Z_ISREF_P(function_name)) {
						function_name = Z_REFVAL_P(function_name);
						if (EXPECTED(Z_TYPE_P(function_name) == IS_STRING)) {
							break;
						}
					} else if (IS_UNUSED == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) {
						ZVAL_UNDEFINED_OP2();
						if (UNEXPECTED(EG(exception) != NULL)) {
							HANDLE_EXCEPTION();
						}
					}
					zend_throw_error(NULL, "Method name must be a string");


					HANDLE_EXCEPTION();
				} while (0);
			}
		}

		if (ce->get_static_method) {
			fbc = ce->get_static_method(ce, Z_STR_P(function_name));
		} else {
			fbc = zend_std_get_static_method(ce, Z_STR_P(function_name), ((IS_UNUSED == IS_CONST) ? (RT_CONSTANT(opline, opline->op2) + 1) : NULL));
		}
		if (UNEXPECTED(fbc == NULL)) {
			if (EXPECTED(!EG(exception))) {
				zend_undefined_method(ce, Z_STR_P(function_name));
			}


			HANDLE_EXCEPTION();
		}
		if (IS_UNUSED == IS_CONST &&
		    EXPECTED(!(fbc->common.fn_flags & (ZEND_ACC_CALL_VIA_TRAMPOLINE|ZEND_ACC_NEVER_CACHE))) &&
			EXPECTED(!(fbc->common.scope->ce_flags & ZEND_ACC_TRAIT))) {
			CACHE_POLYMORPHIC_PTR(opline->result.num, ce, fbc);
		}
		if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!RUN_TIME_CACHE(&fbc->op_array))) {
			init_func_run_time_cache(&fbc->op_array);
		}
		if (IS_UNUSED != IS_CONST) {


		}
	} else {
		if (UNEXPECTED(ce->constructor == NULL)) {
			zend_throw_error(NULL, "Cannot call constructor");
			HANDLE_EXCEPTION();
		}
		if (Z_TYPE(EX(This)) == IS_OBJECT && Z_OBJ(EX(This))->ce != ce->constructor->common.scope && (ce->constructor->common.fn_flags & ZEND_ACC_PRIVATE)) {
			zend_throw_error(NULL, "Cannot call private %s::__construct()", ZSTR_VAL(ce->name));
			HANDLE_EXCEPTION();
		}
		fbc = ce->constructor;
		if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!RUN_TIME_CACHE(&fbc->op_array))) {
			init_func_run_time_cache(&fbc->op_array);
		}
	}

	if (!(fbc->common.fn_flags & ZEND_ACC_STATIC)) {
		if (Z_TYPE(EX(This)) == IS_OBJECT && instanceof_function(Z_OBJCE(EX(This)), ce)) {
			ce = (zend_class_entry*)Z_OBJ(EX(This));
			call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_HAS_THIS;
		} else {
			zend_non_static_method_call(fbc);
			HANDLE_EXCEPTION();
		}
	} else {
		/* previous opcode is ZEND_FETCH_CLASS */
		if (IS_CONST == IS_UNUSED
		 && ((opline->op1.num & ZEND_FETCH_CLASS_MASK) == ZEND_FETCH_CLASS_PARENT ||
		     (opline->op1.num & ZEND_FETCH_CLASS_MASK) == ZEND_FETCH_CLASS_SELF)) {
			if (Z_TYPE(EX(This)) == IS_OBJECT) {
				ce = Z_OBJCE(EX(This));
			} else {
				ce = Z_CE(EX(This));
			}
		}
		call_info = ZEND_CALL_NESTED_FUNCTION;
	}

	call = zend_vm_stack_push_call_frame(call_info,
		fbc, opline->extended_value, ce);
	call->prev_execute_data = EX(call);
	EX(call) = call;

	ZEND_VM_NEXT_OPCODE();
}

static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_VERIFY_RETURN_TYPE_SPEC_CONST_UNUSED_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	if (IS_CONST == IS_UNUSED) {
		SAVE_OPLINE();
		zend_verify_missing_return_type(EX(func));
		HANDLE_EXCEPTION();
	} else {
/* prevents "undefined variable opline" errors */
#if 0 || (IS_CONST != IS_UNUSED)
		USE_OPLINE
		zval *retval_ref, *retval_ptr;
		zend_arg_info *ret_info = EX(func)->common.arg_info - 1;
		retval_ref = retval_ptr = RT_CONSTANT(opline, opline->op1);

		if (IS_CONST == IS_CONST) {
			ZVAL_COPY(EX_VAR(opline->result.var), retval_ptr);
			retval_ref = retval_ptr = EX_VAR(opline->result.var);
		} else if (IS_CONST == IS_VAR) {
			if (UNEXPECTED(Z_TYPE_P(retval_ptr) == IS_INDIRECT)) {
				retval_ref = retval_ptr = Z_INDIRECT_P(retval_ptr);
			}
			ZVAL_DEREF(retval_ptr);
		} else if (IS_CONST == IS_CV) {
			ZVAL_DEREF(retval_ptr);
		}

		if (EXPECTED(ZEND_TYPE_CONTAINS_CODE(ret_info->type, Z_TYPE_P(retval_ptr)))) {
			ZEND_VM_NEXT_OPCODE();
		}

		if (IS_CONST == IS_CV && UNEXPECTED(Z_ISUNDEF_P(retval_ptr))) {
			SAVE_OPLINE();
			retval_ref = retval_ptr = ZVAL_UNDEFINED_OP1();
			if (UNEXPECTED(EG(exception))) {
				HANDLE_EXCEPTION();
			}
			if (ZEND_TYPE_FULL_MASK(ret_info->type) & MAY_BE_NULL) {
				ZEND_VM_NEXT_OPCODE();
			}
		}

		zend_reference *ref = NULL;
		if (UNEXPECTED(retval_ref != retval_ptr)) {
			if (UNEXPECTED(EX(func)->op_array.fn_flags & ZEND_ACC_RETURN_REFERENCE)) {
				ref = Z_REF_P(retval_ref);
			} else {
				/* A cast might happen - unwrap the reference if this is a by-value return */
				if (Z_REFCOUNT_P(retval_ref) == 1) {
					ZVAL_UNREF(retval_ref);
				} else {
					Z_DELREF_P(retval_ref);
					ZVAL_COPY(retval_ref, retval_ptr);
				}
				retval_ptr = retval_ref;
			}
		}

		SAVE_OPLINE();
		if (UNEXPECTED(!zend_check_type_slow(&ret_info->type, retval_ptr, ref, 1, 0))) {
			zend_verify_return_error(EX(func), retval_ptr);
			HANDLE_EXCEPTION();
		}
		ZEND_VM_NEXT_OPCODE();
#endif
	}
}

static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_SEND_VAL_SPEC_CONST_UNUSED_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *value, *arg;

	if (IS_UNUSED == IS_CONST) {
		SAVE_OPLINE();
		zend_string *arg_name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
		uint32_t arg_num;
		arg = zend_handle_named_arg(&EX(call), arg_name, &arg_num, CACHE_ADDR(opline->result.num));
		if (UNEXPECTED(!arg)) {


			HANDLE_EXCEPTION();
		}
	} else {
		arg = ZEND_CALL_VAR(EX(call), opline->result.var);
	}

	value = RT_CONSTANT(opline, opline->op1);
	ZVAL_COPY_VALUE(arg, value);
	if (IS_CONST == IS_CONST) {
		if (UNEXPECTED(Z_OPT_REFCOUNTED_P(arg))) {
			Z_ADDREF_P(arg);
		}
	}
	ZEND_VM_NEXT_OPCODE();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_SEND_VAL_EX_SPEC_CONST_UNUSED_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *value, *arg;
	uint32_t arg_num;

	if (IS_UNUSED == IS_CONST) {
		SAVE_OPLINE();
		zend_string *arg_name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
		arg = zend_handle_named_arg(&EX(call), arg_name, &arg_num, CACHE_ADDR(opline->result.num));
		if (UNEXPECTED(!arg)) {


			HANDLE_EXCEPTION();
		}
	} else {
		arg = ZEND_CALL_VAR(EX(call), opline->result.var);
		arg_num = opline->op2.num;
	}

	if (EXPECTED(0)) {
		if (QUICK_ARG_MUST_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
			goto send_val_by_ref;
		}
	} else if (ARG_MUST_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
send_val_by_ref:;
		ZEND_VM_DISPATCH_TO_HELPER(zend_cannot_pass_by_ref_helper_SPEC_TAILCALL(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_EX arg_num, arg));
	}
	value = RT_CONSTANT(opline, opline->op1);
	ZVAL_COPY_VALUE(arg, value);
	if (IS_CONST == IS_CONST) {
		if (UNEXPECTED(Z_OPT_REFCOUNTED_P(arg))) {
			Z_ADDREF_P(arg);
		}
	}
	ZEND_VM_NEXT_OPCODE();
}

static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_SEND_VAL_EX_SPEC_CONST_UNUSED_QUICK_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *value, *arg;
	uint32_t arg_num;

	if (IS_UNUSED == IS_CONST) {
		SAVE_OPLINE();
		zend_string *arg_name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
		arg = zend_handle_named_arg(&EX(call), arg_name, &arg_num, CACHE_ADDR(opline->result.num));
		if (UNEXPECTED(!arg)) {


			HANDLE_EXCEPTION();
		}
	} else {
		arg = ZEND_CALL_VAR(EX(call), opline->result.var);
		arg_num = opline->op2.num;
	}

	if (EXPECTED(1)) {
		if (QUICK_ARG_MUST_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
			goto send_val_by_ref;
		}
	} else if (ARG_MUST_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
send_val_by_ref:;
		ZEND_VM_DISPATCH_TO_HELPER(zend_cannot_pass_by_ref_helper_SPEC_TAILCALL(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_EX arg_num, arg));
	}
	value = RT_CONSTANT(opline, opline->op1);
	ZVAL_COPY_VALUE(arg, value);
	if (IS_CONST == IS_CONST) {
		if (UNEXPECTED(Z_OPT_REFCOUNTED_P(arg))) {
			Z_ADDREF_P(arg);
		}
	}
	ZEND_VM_NEXT_OPCODE();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_NEW_SPEC_CONST_UNUSED_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *result;
	zend_function *constructor;
	zend_class_entry *ce;
	zend_execute_data *call;

	SAVE_OPLINE();
	if (IS_CONST == IS_CONST) {
		ce = CACHED_PTR(opline->op2.num);
		if (UNEXPECTED(ce == NULL)) {
			ce = zend_fetch_class_by_name(Z_STR_P(RT_CONSTANT(opline, opline->op1)), Z_STR_P(RT_CONSTANT(opline, opline->op1) + 1), ZEND_FETCH_CLASS_DEFAULT | ZEND_FETCH_CLASS_EXCEPTION);
			if (UNEXPECTED(ce == NULL)) {
				ZVAL_UNDEF(EX_VAR(opline->result.var));
				HANDLE_EXCEPTION();
			}
			CACHE_PTR(opline->op2.num, ce);
		}
	} else if (IS_CONST == IS_UNUSED) {
		ce = zend_fetch_class(NULL, opline->op1.num);
		if (UNEXPECTED(ce == NULL)) {
			ZVAL_UNDEF(EX_VAR(opline->result.var));
			HANDLE_EXCEPTION();
		}
	} else {
		ce = Z_CE_P(EX_VAR(opline->op1.var));
	}

	result = EX_VAR(opline->result.var);
	if (UNEXPECTED(object_init_ex(result, ce) != SUCCESS)) {
		ZVAL_UNDEF(result);
		HANDLE_EXCEPTION();
	}

	constructor = Z_OBJ_HT_P(result)->get_constructor(Z_OBJ_P(result));
	if (constructor == NULL) {
		/* If there are no arguments, skip over the DO_FCALL opcode. We check if the next
		 * opcode is DO_FCALL in case EXT instructions are used. */
		if (EXPECTED(opline->extended_value == 0 && (opline+1)->opcode == ZEND_DO_FCALL)) {
			ZEND_VM_NEXT_OPCODE_EX(1, 2);
		}

		if (UNEXPECTED(EG(exception))) {
			HANDLE_EXCEPTION();
		}

		/* Perform a dummy function call */
		call = zend_vm_stack_push_call_frame(
			ZEND_CALL_FUNCTION, (zend_function *) &zend_pass_function,
			opline->extended_value, NULL);
	} else {
		if (EXPECTED(constructor->type == ZEND_USER_FUNCTION) && UNEXPECTED(!RUN_TIME_CACHE(&constructor->op_array))) {
			init_func_run_time_cache(&constructor->op_array);
		}
		/* We are not handling overloaded classes right now */
		call = zend_vm_stack_push_call_frame(
			ZEND_CALL_FUNCTION | ZEND_CALL_RELEASE_THIS | ZEND_CALL_HAS_THIS,
			constructor,
			opline->extended_value,
			Z_OBJ_P(result));
		Z_ADDREF_P(result);
	}

	call->prev_execute_data = EX(call);
	EX(call) = call;
	ZEND_VM_NEXT_OPCODE();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_UNUSED_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *expr_ptr, new_expr;

	SAVE_OPLINE();
	if ((IS_CONST == IS_VAR || IS_CONST == IS_CV) &&
	    UNEXPECTED(opline->extended_value & ZEND_ARRAY_ELEMENT_REF)) {
		expr_ptr = zend_get_bad_ptr();
		if (Z_ISREF_P(expr_ptr)) {
			Z_ADDREF_P(expr_ptr);
		} else {
			ZVAL_MAKE_REF_EX(expr_ptr, 2);
		}


	} else {
		expr_ptr = RT_CONSTANT(opline, opline->op1);
		if (IS_CONST == IS_TMP_VAR) {
			/* pass */
		} else if (IS_CONST == IS_CONST) {
			Z_TRY_ADDREF_P(expr_ptr);
		} else if (IS_CONST == IS_CV) {
			ZVAL_DEREF(expr_ptr);
			Z_TRY_ADDREF_P(expr_ptr);
		} else /* if (IS_CONST == IS_VAR) */ {
			if (UNEXPECTED(Z_ISREF_P(expr_ptr))) {
				zend_refcounted *ref = Z_COUNTED_P(expr_ptr);

				expr_ptr = Z_REFVAL_P(expr_ptr);
				if (UNEXPECTED(GC_DELREF(ref) == 0)) {
					ZVAL_COPY_VALUE(&new_expr, expr_ptr);
					expr_ptr = &new_expr;
					efree_size(ref, sizeof(zend_reference));
				} else if (Z_OPT_REFCOUNTED_P(expr_ptr)) {
					Z_ADDREF_P(expr_ptr);
				}
			}
		}
	}

	if (IS_UNUSED != IS_UNUSED) {
		zval *offset = NULL;
		zend_string *str;
		zend_ulong hval;

add_again:
		if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) {
			str = Z_STR_P(offset);
			if (IS_UNUSED != IS_CONST) {
				if (ZEND_HANDLE_NUMERIC(str, hval)) {
					goto num_index;
				}
			}
str_index:
			zend_hash_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), str, expr_ptr);
		} else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
			hval = Z_LVAL_P(offset);
num_index:
			zend_hash_index_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), hval, expr_ptr);
		} else if ((IS_UNUSED & (IS_VAR|IS_CV)) && EXPECTED(Z_TYPE_P(offset) == IS_REFERENCE)) {
			offset = Z_REFVAL_P(offset);
			goto add_again;
		} else if (UNEXPECTED(Z_TYPE_P(offset) == IS_NULL)) {
			zval tmp;
			if (IS_CONST == IS_CV || IS_CONST == IS_VAR) {
				ZVAL_COPY(&tmp, expr_ptr);
			}
			zend_error(E_DEPRECATED, "Using null as an array offset is deprecated, use an empty string instead");
			if (IS_CONST == IS_CV || IS_CONST == IS_VAR) {
				/* A userland error handler can do funky things to the expression, so reset it */
				zval_ptr_dtor(expr_ptr);
				ZVAL_COPY_VALUE(expr_ptr, &tmp);
			}
			if (UNEXPECTED(EG(exception))) {
				zval_ptr_dtor_nogc(expr_ptr);
				HANDLE_EXCEPTION();
			}
			str = ZSTR_EMPTY_ALLOC();
			goto str_index;
		} else if (Z_TYPE_P(offset) == IS_DOUBLE) {
			hval = zend_dval_to_lval_safe(Z_DVAL_P(offset));
			goto num_index;
		} else if (Z_TYPE_P(offset) == IS_FALSE) {
			hval = 0;
			goto num_index;
		} else if (Z_TYPE_P(offset) == IS_TRUE) {
			hval = 1;
			goto num_index;
		} else if (Z_TYPE_P(offset) == IS_RESOURCE) {
			zend_use_resource_as_offset(offset);
			hval = Z_RES_HANDLE_P(offset);
			goto num_index;
		} else if (IS_UNUSED == IS_CV && Z_TYPE_P(offset) == IS_UNDEF) {
			ZVAL_UNDEFINED_OP2();
			str = ZSTR_EMPTY_ALLOC();
			goto str_index;
		} else {
			zend_illegal_array_offset_access(offset);
			zval_ptr_dtor_nogc(expr_ptr);
		}


	} else {
		if (!zend_hash_next_index_insert(Z_ARRVAL_P(EX_VAR(opline->result.var)), expr_ptr)) {
			zend_cannot_add_element();
			zval_ptr_dtor_nogc(expr_ptr);
		}
	}
	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_INIT_ARRAY_SPEC_CONST_UNUSED_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	zval *array;
	uint32_t size;
	USE_OPLINE

	SAVE_OPLINE();
	array = EX_VAR(opline->result.var);
	if (IS_CONST != IS_UNUSED) {
		size = opline->extended_value >> ZEND_ARRAY_SIZE_SHIFT;
		ZVAL_ARR(array, zend_new_array(size));
		/* Explicitly initialize array as not-packed if flag is set */
		if (opline->extended_value & ZEND_ARRAY_NOT_PACKED) {
			zend_hash_real_init_mixed(Z_ARRVAL_P(array));
		}
		ZEND_VM_TAIL_CALL(ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_UNUSED_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
	} else {
		ZVAL_ARR(array, zend_new_array(0));
		ZEND_VM_NEXT_OPCODE();
	}
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_UNSET_VAR_SPEC_CONST_UNUSED_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *varname;
	zend_string *name, *tmp_name;
	HashTable *target_symbol_table;

	SAVE_OPLINE();

	varname = RT_CONSTANT(opline, opline->op1);

	if (IS_CONST == IS_CONST) {
		name = Z_STR_P(varname);
	} else if (EXPECTED(Z_TYPE_P(varname) == IS_STRING)) {
		name = Z_STR_P(varname);
		tmp_name = NULL;
	} else {
		if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(varname) == IS_UNDEF)) {
			varname = ZVAL_UNDEFINED_OP1();
		}
		name = zval_try_get_tmp_string(varname, &tmp_name);
		if (UNEXPECTED(!name)) {


			HANDLE_EXCEPTION();
		}
	}

	target_symbol_table = zend_get_target_symbol_table(opline->extended_value EXECUTE_DATA_CC);
	zend_hash_del_ind(target_symbol_table, name);

	if (IS_CONST != IS_CONST) {
		zend_tmp_string_release(tmp_name);
	}


	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

/* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CLASS_FETCH|CONST|VAR) */
static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_ISSET_ISEMPTY_VAR_SPEC_CONST_UNUSED_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *value;
	bool result;
	zval *varname;
	zend_string *name, *tmp_name;
	HashTable *target_symbol_table;

	SAVE_OPLINE();
	varname = RT_CONSTANT(opline, opline->op1);
	if (IS_CONST == IS_CONST) {
		name = Z_STR_P(varname);
	} else {
		name = zval_get_tmp_string(varname, &tmp_name);
	}

	target_symbol_table = zend_get_target_symbol_table(opline->extended_value EXECUTE_DATA_CC);
	value = zend_hash_find_ex(target_symbol_table, name, IS_CONST == IS_CONST);

	if (IS_CONST != IS_CONST) {
		zend_tmp_string_release(tmp_name);
	}


	if (!value) {
		result = (opline->extended_value & ZEND_ISEMPTY);
	} else {
		if (Z_TYPE_P(value) == IS_INDIRECT) {
			value = Z_INDIRECT_P(value);
		}
		if (!(opline->extended_value & ZEND_ISEMPTY)) {
			if (Z_ISREF_P(value)) {
				value = Z_REFVAL_P(value);
			}
			result = Z_TYPE_P(value) > IS_NULL;
		} else {
			result = !i_zend_is_true(value);
		}
	}

	ZEND_VM_SMART_BRANCH(result, true);
}

/* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CLASS_FETCH|CONST|VAR) */
static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_YIELD_SPEC_CONST_UNUSED_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE

	zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C);

	SAVE_OPLINE();
	if (UNEXPECTED(generator->flags & ZEND_GENERATOR_FORCED_CLOSE)) {
		ZEND_VM_TAIL_CALL(zend_yield_in_closed_generator_helper_SPEC_TAILCALL(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
	}

	/* Destroy the previously yielded value */
	zval_ptr_dtor(&generator->value);

	/* Destroy the previously yielded key */
	zval_ptr_dtor(&generator->key);

	/* Set the new yielded value */
	if (IS_CONST != IS_UNUSED) {
		if (UNEXPECTED(EX(func)->op_array.fn_flags & ZEND_ACC_RETURN_REFERENCE)) {
			/* Constants and temporary variables aren't yieldable by reference,
			 * but we still allow them with a notice. */
			if (IS_CONST & (IS_CONST|IS_TMP_VAR)) {
				zval *value;

				zend_error(E_NOTICE, "Only variable references should be yielded by reference");

				value = RT_CONSTANT(opline, opline->op1);
				ZVAL_COPY_VALUE(&generator->value, value);
				if (IS_CONST == IS_CONST) {
					if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
						Z_ADDREF(generator->value);
					}
				}
			} else {
				zval *value_ptr = zend_get_bad_ptr();

				/* If a function call result is yielded and the function did
				 * not return by reference we throw a notice. */
				do {
					if (IS_CONST == IS_VAR) {
						ZEND_ASSERT(value_ptr != &EG(uninitialized_zval));
						if (opline->extended_value == ZEND_RETURNS_FUNCTION
						 && !Z_ISREF_P(value_ptr)) {
							zend_error(E_NOTICE, "Only variable references should be yielded by reference");
							ZVAL_COPY(&generator->value, value_ptr);
							break;
						}
					}
					if (Z_ISREF_P(value_ptr)) {
						Z_ADDREF_P(value_ptr);
					} else {
						ZVAL_MAKE_REF_EX(value_ptr, 2);
					}
					ZVAL_REF(&generator->value, Z_REF_P(value_ptr));
				} while (0);


			}
		} else {
			zval *value = RT_CONSTANT(opline, opline->op1);

			/* Consts, temporary variables and references need copying */
			if (IS_CONST == IS_CONST) {
				ZVAL_COPY_VALUE(&generator->value, value);
				if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
					Z_ADDREF(generator->value);
				}
			} else if (IS_CONST == IS_TMP_VAR) {
				ZVAL_COPY_VALUE(&generator->value, value);
			} else if ((IS_CONST & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) {
				ZVAL_COPY(&generator->value, Z_REFVAL_P(value));


			} else {
				ZVAL_COPY_VALUE(&generator->value, value);
				if (IS_CONST == IS_CV) {
					if (Z_OPT_REFCOUNTED_P(value)) Z_ADDREF_P(value);
				}
			}
		}
	} else {
		/* If no value was specified yield null */
		ZVAL_NULL(&generator->value);
	}

	/* Set the new yielded key */
	if (IS_UNUSED != IS_UNUSED) {
		zval *key = NULL;
		if ((IS_UNUSED & (IS_CV|IS_VAR)) && UNEXPECTED(Z_TYPE_P(key) == IS_REFERENCE)) {
			key = Z_REFVAL_P(key);
		}
		ZVAL_COPY(&generator->key, key);


		if (Z_TYPE(generator->key) == IS_LONG
		    && Z_LVAL(generator->key) > generator->largest_used_integer_key
		) {
			generator->largest_used_integer_key = Z_LVAL(generator->key);
		}
	} else {
		/* If no key was specified we use auto-increment keys */
		generator->largest_used_integer_key++;
		ZVAL_LONG(&generator->key, generator->largest_used_integer_key);
	}

	if (RETURN_VALUE_USED(opline)) {
		/* If the return value of yield is used set the send
		 * target and initialize it to NULL */
		generator->send_target = EX_VAR(opline->result.var);
		ZVAL_NULL(generator->send_target);
	} else {
		generator->send_target = NULL;
	}

	/* The GOTO VM uses a local opline variable. We need to set the opline
	 * variable in execute_data so we don't resume at an old position. */
	SAVE_OPLINE();

	ZEND_VM_RETURN();
}

static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_MATCH_ERROR_SPEC_CONST_UNUSED_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op;

	SAVE_OPLINE();
	op = RT_CONSTANT(opline, opline->op1);
	zend_match_unhandled_error(op);
	HANDLE_EXCEPTION();
}

static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_COUNT_SPEC_CONST_UNUSED_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1;
	zend_long count;

	SAVE_OPLINE();
	op1 = RT_CONSTANT(opline, opline->op1);

	while (1) {
		if (Z_TYPE_P(op1) == IS_ARRAY) {
			count = zend_hash_num_elements(Z_ARRVAL_P(op1));
			break;
		} else if (Z_TYPE_P(op1) == IS_OBJECT) {
			zend_object *zobj = Z_OBJ_P(op1);

			/* first, we check if the handler is defined */
			if (zobj->handlers->count_elements) {
				if (SUCCESS == zobj->handlers->count_elements(zobj, &count)) {
					break;
				}
				if (UNEXPECTED(EG(exception))) {
					count = 0;
					break;
				}
			}

			/* if not and the object implements Countable we call its count() method */
			if (zend_class_implements_interface(zobj->ce, zend_ce_countable)) {
				zval retval;

				zend_function *count_fn = zend_hash_find_ptr(&zobj->ce->function_table, ZSTR_KNOWN(ZEND_STR_COUNT));
				zend_call_known_instance_method_with_0_params(count_fn, zobj, &retval);
				count = zval_get_long(&retval);
				zval_ptr_dtor(&retval);
				break;
			}

			/* If There's no handler and it doesn't implement Countable then emit a TypeError */
		} else if ((IS_CONST & (IS_VAR|IS_CV)) != 0 && Z_TYPE_P(op1) == IS_REFERENCE) {
			op1 = Z_REFVAL_P(op1);
			continue;
		} else if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
			ZVAL_UNDEFINED_OP1();
		}
		count = 0;
		zend_type_error("%s(): Argument #1 ($value) must be of type Countable|array, %s given", opline->extended_value ? "sizeof" : "count", zend_zval_value_name(op1));
		break;
	}

	ZVAL_LONG(EX_VAR(opline->result.var), count);


	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_GET_CLASS_SPEC_CONST_UNUSED_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE

	if (IS_CONST == IS_UNUSED) {
		SAVE_OPLINE();
		if (UNEXPECTED(!EX(func)->common.scope)) {
			zend_throw_error(NULL, "get_class() without arguments must be called from within a class");
			ZVAL_UNDEF(EX_VAR(opline->result.var));
			HANDLE_EXCEPTION();
		} else {
			zend_error(E_DEPRECATED, "Calling get_class() without arguments is deprecated");
			ZVAL_STR_COPY(EX_VAR(opline->result.var), EX(func)->common.scope->name);
			if (UNEXPECTED(EG(exception))) {
				HANDLE_EXCEPTION();
			}
			ZEND_VM_NEXT_OPCODE();
		}
	} else {
		zval *op1;

		SAVE_OPLINE();
		op1 = RT_CONSTANT(opline, opline->op1);
		while (1) {
			if (Z_TYPE_P(op1) == IS_OBJECT) {
				ZVAL_STR_COPY(EX_VAR(opline->result.var), Z_OBJCE_P(op1)->name);
			} else if ((IS_CONST & (IS_VAR|IS_CV)) != 0 && Z_TYPE_P(op1) == IS_REFERENCE) {
				op1 = Z_REFVAL_P(op1);
				continue;
			} else {
				if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
					ZVAL_UNDEFINED_OP1();
				}
				zend_type_error("get_class(): Argument #1 ($object) must be of type object, %s given", zend_zval_value_name(op1));
				ZVAL_UNDEF(EX_VAR(opline->result.var));
			}
			break;
		}


		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
	}
}

static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_GET_TYPE_SPEC_CONST_UNUSED_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1;
	zend_string *type;

	SAVE_OPLINE();
	op1 = RT_CONSTANT(opline, opline->op1);
	type = zend_zval_get_legacy_type(op1);
	if (EXPECTED(type)) {
		ZVAL_INTERNED_STR(EX_VAR(opline->result.var), type);
	} else {
		ZVAL_STRING(EX_VAR(opline->result.var), "unknown type");
	}


	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_FUNC_GET_ARGS_SPEC_CONST_UNUSED_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zend_array *ht;
	uint32_t arg_count, result_size, skip;

	arg_count = EX_NUM_ARGS();
	if (IS_CONST == IS_CONST) {
		skip = Z_LVAL_P(RT_CONSTANT(opline, opline->op1));
		if (arg_count < skip) {
			result_size = 0;
		} else {
			result_size = arg_count - skip;
		}
	} else {
		skip = 0;
		result_size = arg_count;
	}

	if (result_size) {
		SAVE_OPLINE();
		uint32_t first_extra_arg = EX(func)->op_array.num_args;

		ht = zend_new_array(result_size);
		ZVAL_ARR(EX_VAR(opline->result.var), ht);
		zend_hash_real_init_packed(ht);
		ZEND_HASH_FILL_PACKED(ht) {
			zval *p, *q;
			uint32_t i = skip;
			p = EX_VAR_NUM(i);
			if (arg_count > first_extra_arg) {
				while (i < first_extra_arg) {
					q = p;
					if (EXPECTED(Z_TYPE_INFO_P(q) != IS_UNDEF)) {
						ZVAL_DEREF(q);
						if (Z_OPT_REFCOUNTED_P(q)) {
							Z_ADDREF_P(q);
						}
						ZEND_HASH_FILL_SET(q);
					} else {
						ZEND_HASH_FILL_SET_NULL();
					}
					ZEND_HASH_FILL_NEXT();
					p++;
					i++;
				}
				if (skip < first_extra_arg) {
					skip = 0;
				} else {
					skip -= first_extra_arg;
				}
				p = EX_VAR_NUM(EX(func)->op_array.last_var + EX(func)->op_array.T + skip);
			}
			while (i < arg_count) {
				q = p;
				if (EXPECTED(Z_TYPE_INFO_P(q) != IS_UNDEF)) {
					ZVAL_DEREF(q);
					if (Z_OPT_REFCOUNTED_P(q)) {
						Z_ADDREF_P(q);
					}
					ZEND_HASH_FILL_SET(q);
				} else {
					ZEND_HASH_FILL_SET_NULL();
				}
				ZEND_HASH_FILL_NEXT();
				p++;
				i++;
			}
		} ZEND_HASH_FILL_END();
		ht->nNumOfElements = result_size;
	} else {
		ZVAL_EMPTY_ARRAY(EX_VAR(opline->result.var));
	}
	ZEND_VM_NEXT_OPCODE();
}

/* Contrary to what its name indicates, ZEND_COPY_TMP may receive and define references. */
static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_INIT_PARENT_PROPERTY_HOOK_CALL_SPEC_CONST_UNUSED_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	SAVE_OPLINE();

	zend_class_entry *ce = EX(func)->common.scope;
	ZEND_ASSERT(ce);

	zend_class_entry *parent_ce = ce->parent;
	if (!parent_ce) {
		zend_throw_error(NULL, "Cannot use \"parent\" when current class scope has no parent");
		UNDEF_RESULT();
		HANDLE_EXCEPTION();
	}

	zend_string *property_name = Z_STR_P(RT_CONSTANT(opline, opline->op1));
	zend_property_hook_kind hook_kind = opline->op2.num;

	zend_property_info *prop_info = zend_hash_find_ptr(&parent_ce->properties_info, property_name);
	if (!prop_info) {
		zend_throw_error(NULL, "Undefined property %s::$%s", ZSTR_VAL(parent_ce->name), ZSTR_VAL(property_name));
		UNDEF_RESULT();
		HANDLE_EXCEPTION();
	}
	if (prop_info->flags & ZEND_ACC_PRIVATE) {
		zend_throw_error(NULL, "Cannot access private property %s::$%s", ZSTR_VAL(parent_ce->name), ZSTR_VAL(property_name));
		UNDEF_RESULT();
		HANDLE_EXCEPTION();
	}

	zend_function **hooks = prop_info->hooks;
	zend_function *hook = hooks ? hooks[hook_kind] : NULL;

	zend_execute_data *call;
	if (hook) {
		call = zend_vm_stack_push_call_frame(
			ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_HAS_THIS,
			hook, opline->extended_value, Z_OBJ_P(ZEND_THIS));
		if (EXPECTED(hook->type == ZEND_USER_FUNCTION)) {
			if (UNEXPECTED(!RUN_TIME_CACHE(&hook->op_array))) {
				init_func_run_time_cache(&hook->op_array);
			}
			call->run_time_cache = RUN_TIME_CACHE(&hook->op_array);
		}
	} else {
		zend_function *fbc = zend_get_property_hook_trampoline(prop_info, hook_kind, property_name);
		call = zend_vm_stack_push_call_frame(
			ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_HAS_THIS,
			fbc, opline->extended_value, Z_OBJ_P(ZEND_THIS));
	}

	call->prev_execute_data = EX(call);
	EX(call) = call;
	ZEND_VM_NEXT_OPCODE();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_DIV_SPEC_CONST_CV_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;

	SAVE_OPLINE();
	op1 = RT_CONSTANT(opline, opline->op1);
	op2 = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
	div_function(EX_VAR(opline->result.var), op1, op2);




	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_POW_SPEC_CONST_CV_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;

	SAVE_OPLINE();
	op1 = RT_CONSTANT(opline, opline->op1);
	op2 = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
	pow_function(EX_VAR(opline->result.var), op1, op2);




	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_CONCAT_SPEC_CONST_CV_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;

	op1 = RT_CONSTANT(opline, opline->op1);
	op2 = EX_VAR(opline->op2.var);

	if ((IS_CONST == IS_CONST || EXPECTED(Z_TYPE_P(op1) == IS_STRING)) &&
	    (IS_CV == IS_CONST || EXPECTED(Z_TYPE_P(op2) == IS_STRING))) {
		zend_string *op1_str = Z_STR_P(op1);
		zend_string *op2_str = Z_STR_P(op2);
		zend_string *str;
		uint32_t flags = ZSTR_GET_COPYABLE_CONCAT_PROPERTIES_BOTH(op1_str, op2_str);

		if (IS_CONST != IS_CONST && UNEXPECTED(ZSTR_LEN(op1_str) == 0)) {
			if (IS_CV == IS_CONST || IS_CV == IS_CV) {
				ZVAL_STR_COPY(EX_VAR(opline->result.var), op2_str);
			} else {
				ZVAL_STR(EX_VAR(opline->result.var), op2_str);
			}
			if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
				zend_string_release_ex(op1_str, 0);
			}
		} else if (IS_CV != IS_CONST && UNEXPECTED(ZSTR_LEN(op2_str) == 0)) {
			if (IS_CONST == IS_CONST || IS_CONST == IS_CV) {
				ZVAL_STR_COPY(EX_VAR(opline->result.var), op1_str);
			} else {
				ZVAL_STR(EX_VAR(opline->result.var), op1_str);
			}
			if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
				zend_string_release_ex(op2_str, 0);
			}
		} else if (IS_CONST != IS_CONST && IS_CONST != IS_CV &&
		    !ZSTR_IS_INTERNED(op1_str) && GC_REFCOUNT(op1_str) == 1) {
			size_t len = ZSTR_LEN(op1_str);

			if (UNEXPECTED(len > ZSTR_MAX_LEN - ZSTR_LEN(op2_str))) {
				zend_error_noreturn(E_ERROR, "Integer overflow in memory allocation");
			}
			str = zend_string_extend(op1_str, len + ZSTR_LEN(op2_str), 0);
			memcpy(ZSTR_VAL(str) + len, ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
			GC_ADD_FLAGS(str, flags);
			ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
			if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
				zend_string_release_ex(op2_str, 0);
			}
		} else {
			str = zend_string_alloc(ZSTR_LEN(op1_str) + ZSTR_LEN(op2_str), 0);
			memcpy(ZSTR_VAL(str), ZSTR_VAL(op1_str), ZSTR_LEN(op1_str));
			memcpy(ZSTR_VAL(str) + ZSTR_LEN(op1_str), ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
			GC_ADD_FLAGS(str, flags);
			ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
			if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
				zend_string_release_ex(op1_str, 0);
			}
			if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
				zend_string_release_ex(op2_str, 0);
			}
		}
		ZEND_VM_NEXT_OPCODE();
	} else {
		SAVE_OPLINE();

		if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
			op1 = ZVAL_UNDEFINED_OP1();
		}
		if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(op2) == IS_UNDEF)) {
			op2 = ZVAL_UNDEFINED_OP2();
		}
		concat_function(EX_VAR(opline->result.var), op1, op2);




		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
	}
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_SPACESHIP_SPEC_CONST_CV_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;

	SAVE_OPLINE();
	op1 = RT_CONSTANT(opline, opline->op1);
	op2 = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
	compare_function(EX_VAR(opline->result.var), op1, op2);




	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_FETCH_DIM_R_SPEC_CONST_CV_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *container, *dim, *value;

	SAVE_OPLINE();
	container = RT_CONSTANT(opline, opline->op1);
	dim = EX_VAR(opline->op2.var);
	if (IS_CONST != IS_CONST) {
		if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
fetch_dim_r_array:
			value = zend_fetch_dimension_address_inner(Z_ARRVAL_P(container), dim, IS_CV, BP_VAR_R EXECUTE_DATA_CC);
			ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
		} else if (EXPECTED(Z_TYPE_P(container) == IS_REFERENCE)) {
			container = Z_REFVAL_P(container);
			if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
				goto fetch_dim_r_array;
			} else {
				goto fetch_dim_r_slow;
			}
		} else {
fetch_dim_r_slow:
			if (IS_CV == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
				dim++;
			}
			zend_fetch_dimension_address_read_R_slow(container, dim OPLINE_CC EXECUTE_DATA_CC);
		}
	} else {
		zend_fetch_dimension_address_read_R(container, dim, IS_CV OPLINE_CC EXECUTE_DATA_CC);
	}




	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_FETCH_DIM_IS_SPEC_CONST_CV_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *container;

	SAVE_OPLINE();
	container = RT_CONSTANT(opline, opline->op1);
	zend_fetch_dimension_address_read_IS(container, EX_VAR(opline->op2.var), IS_CV OPLINE_CC EXECUTE_DATA_CC);




	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_FETCH_DIM_FUNC_ARG_SPEC_CONST_CV_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
#if 0
	USE_OPLINE
#endif

	if (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) {
		if ((IS_CONST & (IS_CONST|IS_TMP_VAR))) {
			ZEND_VM_TAIL_CALL(zend_use_tmp_in_write_context_helper_SPEC_TAILCALL(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
		}
		ZEND_VM_TAIL_CALL(ZEND_NULL_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
	} else {
		if (IS_CV == IS_UNUSED) {
			ZEND_VM_TAIL_CALL(zend_use_undef_in_read_context_helper_SPEC_TAILCALL(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
		}
		ZEND_VM_TAIL_CALL(ZEND_FETCH_DIM_R_SPEC_CONST_CV_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
	}
}

static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_FETCH_OBJ_R_SPEC_CONST_CV_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *container;
	void **cache_slot = NULL;

	SAVE_OPLINE();
	container = RT_CONSTANT(opline, opline->op1);

	if (IS_CONST == IS_CONST ||
	    (IS_CONST != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
		do {
			if ((IS_CONST & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
				container = Z_REFVAL_P(container);
				if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
					break;
				}
			}
			if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
				ZVAL_UNDEFINED_OP1();
			}
			zend_wrong_property_read(container, _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC));
			ZVAL_NULL(EX_VAR(opline->result.var));
			goto fetch_obj_r_finish;
		} while (0);
	}

	/* here we are sure we are dealing with an object */
	do {
		zend_object *zobj = Z_OBJ_P(container);
		zend_string *name, *tmp_name;
		zval *retval;

		if (IS_CV == IS_CONST) {
			cache_slot = CACHE_ADDR(opline->extended_value & ~ZEND_FETCH_REF /* FUNC_ARG fetch may contain it */);

			if (EXPECTED(zobj->ce == CACHED_PTR_EX(cache_slot))) {
				uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);

				if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
fetch_obj_r_simple:
					retval = OBJ_PROP(zobj, prop_offset);
					if (EXPECTED(Z_TYPE_INFO_P(retval) != IS_UNDEF)) {
						if (0 || (IS_CONST & (IS_TMP_VAR|IS_VAR)) != 0) {
							goto fetch_obj_r_copy;
						} else {
fetch_obj_r_fast_copy:
							ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
							ZEND_VM_NEXT_OPCODE();
						}
					}
				} else if (UNEXPECTED(IS_HOOKED_PROPERTY_OFFSET(prop_offset))) {
					zend_property_info *prop_info = CACHED_PTR_EX(cache_slot + 2);
					if (ZEND_IS_PROPERTY_HOOK_SIMPLE_READ(prop_offset)) {
						prop_offset = prop_info->offset;
						goto fetch_obj_r_simple;
					} else if (EXPECTED(ZEND_IS_PROPERTY_HOOK_SIMPLE_GET(prop_offset))) {
						zend_function *hook = prop_info->hooks[ZEND_PROPERTY_HOOK_GET];
						ZEND_ASSERT(hook->type == ZEND_USER_FUNCTION);
						ZEND_ASSERT(RUN_TIME_CACHE(&hook->op_array));

						uint32_t call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_HAS_THIS;
						if (IS_CONST & IS_CV) {
							GC_ADDREF(zobj);
						}
						if (IS_CONST & (IS_CV|IS_VAR|IS_TMP_VAR)) {
							call_info |= ZEND_CALL_RELEASE_THIS;
						}
						zend_execute_data *call = zend_vm_stack_push_call_frame(call_info, hook, 0, zobj);
						call->prev_execute_data = execute_data;
						call->call = NULL;
						call->return_value = EX_VAR(opline->result.var);
						call->run_time_cache = RUN_TIME_CACHE(&hook->op_array);

						execute_data = call;
						EG(current_execute_data) = execute_data;
						zend_init_cvs(0, hook->op_array.last_var EXECUTE_DATA_CC);

#if defined(ZEND_VM_IP_GLOBAL_REG) && ((ZEND_VM_KIND == ZEND_VM_KIND_CALL) || (ZEND_VM_KIND == ZEND_VM_KIND_HYBRID))
						opline = hook->op_array.opcodes;
#else
						EX(opline) = hook->op_array.opcodes;
#endif
						LOAD_OPLINE_EX();




						ZEND_VM_ENTER_EX();
					}
					/* Fall through to read_property for hooks. */
				} else if (EXPECTED(zobj->properties != NULL)) {
					ZEND_ASSERT(IS_DYNAMIC_PROPERTY_OFFSET(prop_offset));
					name = Z_STR_P(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC));
					if (!IS_UNKNOWN_DYNAMIC_PROPERTY_OFFSET(prop_offset)) {
						uintptr_t idx = ZEND_DECODE_DYN_PROP_OFFSET(prop_offset);

						if (EXPECTED(idx < zobj->properties->nNumUsed * sizeof(Bucket))) {
							Bucket *p = (Bucket*)((char*)zobj->properties->arData + idx);

							if (EXPECTED(p->key == name) ||
							    (EXPECTED(p->h == ZSTR_H(name)) &&
							     EXPECTED(p->key != NULL) &&
							     EXPECTED(zend_string_equal_content(p->key, name)))) {
								retval = &p->val;
								if (0 || (IS_CONST & (IS_TMP_VAR|IS_VAR)) != 0) {
									goto fetch_obj_r_copy;
								} else {
									goto fetch_obj_r_fast_copy;
								}
							}
						}
						CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_DYNAMIC_PROPERTY_OFFSET);
					}
					retval = zend_hash_find_known_hash(zobj->properties, name);
					if (EXPECTED(retval)) {
						uintptr_t idx = (char*)retval - (char*)zobj->properties->arData;
						CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_ENCODE_DYN_PROP_OFFSET(idx));
						if (0 || (IS_CONST & (IS_TMP_VAR|IS_VAR)) != 0) {
							goto fetch_obj_r_copy;
						} else {
							goto fetch_obj_r_fast_copy;
						}
					}
				}
			}
			name = Z_STR_P(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC));
		} else {
			name = zval_try_get_tmp_string(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC), &tmp_name);
			if (UNEXPECTED(!name)) {
				ZVAL_UNDEF(EX_VAR(opline->result.var));
				break;
			}
		}

#if ZEND_DEBUG
		/* For non-standard object handlers, verify a declared property type in debug builds.
		 * Fetch prop_info before calling read_property(), as it may deallocate the object. */
		zend_property_info *prop_info = NULL;
		if (zobj->handlers->read_property != zend_std_read_property) {
			prop_info = zend_get_property_info(zobj->ce, name, /* silent */ true);
		}
#endif
		retval = zobj->handlers->read_property(zobj, name, BP_VAR_R, cache_slot, EX_VAR(opline->result.var));
#if ZEND_DEBUG
		if (!EG(exception) && prop_info && prop_info != ZEND_WRONG_PROPERTY_INFO
				&& ZEND_TYPE_IS_SET(prop_info->type)) {
			ZVAL_OPT_DEREF(retval);
			zend_verify_property_type(prop_info, retval, /* strict */ true);
		}
#endif

		if (IS_CV != IS_CONST) {
			zend_tmp_string_release(tmp_name);
		}

		if (retval != EX_VAR(opline->result.var)) {
fetch_obj_r_copy:
			ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
		} else if (UNEXPECTED(Z_ISREF_P(retval))) {
			zend_unwrap_reference(retval);
		}
	} while (0);

fetch_obj_r_finish:




	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_FETCH_OBJ_IS_SPEC_CONST_CV_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *container;
	void **cache_slot = NULL;

	SAVE_OPLINE();
	container = RT_CONSTANT(opline, opline->op1);

	if (IS_CONST == IS_CONST ||
	    (IS_CONST != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
		do {
			if ((IS_CONST & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
				container = Z_REFVAL_P(container);
				if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
					break;
				}
			}
			if (IS_CV == IS_CV && Z_TYPE_P(EX_VAR(opline->op2.var)) == IS_UNDEF) {
				ZVAL_UNDEFINED_OP2();
			}
			ZVAL_NULL(EX_VAR(opline->result.var));
			goto fetch_obj_is_finish;
		} while (0);
	}

	/* here we are sure we are dealing with an object */
	do {
		zend_object *zobj = Z_OBJ_P(container);
		zend_string *name, *tmp_name;
		zval *retval;

		if (IS_CV == IS_CONST) {
			cache_slot = CACHE_ADDR(opline->extended_value);

			if (EXPECTED(zobj->ce == CACHED_PTR_EX(cache_slot))) {
				uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);

				if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
fetch_obj_is_simple:
					retval = OBJ_PROP(zobj, prop_offset);
					if (EXPECTED(Z_TYPE_P(retval) != IS_UNDEF)) {
						if (0 || (IS_CONST & (IS_TMP_VAR|IS_VAR)) != 0) {
							goto fetch_obj_is_copy;
						} else {
fetch_obj_is_fast_copy:
							ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
							ZEND_VM_NEXT_OPCODE();
						}
					}
				} else if (UNEXPECTED(IS_HOOKED_PROPERTY_OFFSET(prop_offset))) {
					if (ZEND_IS_PROPERTY_HOOK_SIMPLE_READ(prop_offset)) {
						zend_property_info *prop_info = CACHED_PTR_EX(cache_slot + 2);
						prop_offset = prop_info->offset;
						goto fetch_obj_is_simple;
					}
					/* Fall through to read_property for hooks. */
				} else if (EXPECTED(zobj->properties != NULL)) {
					ZEND_ASSERT(IS_DYNAMIC_PROPERTY_OFFSET(prop_offset));
					name = Z_STR_P(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC));
					if (!IS_UNKNOWN_DYNAMIC_PROPERTY_OFFSET(prop_offset)) {
						uintptr_t idx = ZEND_DECODE_DYN_PROP_OFFSET(prop_offset);

						if (EXPECTED(idx < zobj->properties->nNumUsed * sizeof(Bucket))) {
							Bucket *p = (Bucket*)((char*)zobj->properties->arData + idx);

							if (EXPECTED(p->key == name) ||
							    (EXPECTED(p->h == ZSTR_H(name)) &&
							     EXPECTED(p->key != NULL) &&
							     EXPECTED(zend_string_equal_content(p->key, name)))) {
								retval = &p->val;
								if (0 || (IS_CONST & (IS_TMP_VAR|IS_VAR)) != 0) {
									goto fetch_obj_is_copy;
								} else {
									goto fetch_obj_is_fast_copy;
								}
							}
						}
						CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_DYNAMIC_PROPERTY_OFFSET);
					}
					retval = zend_hash_find_known_hash(zobj->properties, name);
					if (EXPECTED(retval)) {
						uintptr_t idx = (char*)retval - (char*)zobj->properties->arData;
						CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_ENCODE_DYN_PROP_OFFSET(idx));
						if (0 || (IS_CONST & (IS_TMP_VAR|IS_VAR)) != 0) {
							goto fetch_obj_is_copy;
						} else {
							goto fetch_obj_is_fast_copy;
						}
					}
				}
			}
			name = Z_STR_P(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC));
		} else {
			name = zval_try_get_tmp_string(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC), &tmp_name);
			if (UNEXPECTED(!name)) {
				ZVAL_UNDEF(EX_VAR(opline->result.var));
				break;
			}
		}

		retval = zobj->handlers->read_property(zobj, name, BP_VAR_IS, cache_slot, EX_VAR(opline->result.var));

		if (IS_CV != IS_CONST) {
			zend_tmp_string_release(tmp_name);
		}

		if (retval != EX_VAR(opline->result.var)) {
fetch_obj_is_copy:
			ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
		} else if (UNEXPECTED(Z_ISREF_P(retval))) {
			zend_unwrap_reference(retval);
		}
	} while (0);

fetch_obj_is_finish:




	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CONST_CV_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
#if 0
	USE_OPLINE
#endif

	if (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) {
		/* Behave like FETCH_OBJ_W */
		if ((IS_CONST & (IS_CONST|IS_TMP_VAR))) {
			ZEND_VM_TAIL_CALL(zend_use_tmp_in_write_context_helper_SPEC_TAILCALL(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
		}
		ZEND_VM_TAIL_CALL(ZEND_NULL_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
	} else {
		ZEND_VM_TAIL_CALL(ZEND_FETCH_OBJ_R_SPEC_CONST_CV_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
	}
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_FETCH_LIST_R_SPEC_CONST_CV_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *container;

	SAVE_OPLINE();
	container = RT_CONSTANT(opline, opline->op1);
	zend_fetch_dimension_address_LIST_r(container, EX_VAR(opline->op2.var), IS_CV OPLINE_CC EXECUTE_DATA_CC);


	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_FAST_CONCAT_SPEC_CONST_CV_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;
	zend_string *op1_str, *op2_str, *str;


	op1 = RT_CONSTANT(opline, opline->op1);
	op2 = EX_VAR(opline->op2.var);
	if ((IS_CONST == IS_CONST || EXPECTED(Z_TYPE_P(op1) == IS_STRING)) &&
	    (IS_CV == IS_CONST || EXPECTED(Z_TYPE_P(op2) == IS_STRING))) {
		zend_string *op1_str = Z_STR_P(op1);
		zend_string *op2_str = Z_STR_P(op2);
		zend_string *str;
		uint32_t flags = ZSTR_GET_COPYABLE_CONCAT_PROPERTIES_BOTH(op1_str, op2_str);

		if (IS_CONST != IS_CONST && UNEXPECTED(ZSTR_LEN(op1_str) == 0)) {
			if (IS_CV == IS_CONST || IS_CV == IS_CV) {
				ZVAL_STR_COPY(EX_VAR(opline->result.var), op2_str);
			} else {
				ZVAL_STR(EX_VAR(opline->result.var), op2_str);
			}
			if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
				zend_string_release_ex(op1_str, 0);
			}
		} else if (IS_CV != IS_CONST && UNEXPECTED(ZSTR_LEN(op2_str) == 0)) {
			if (IS_CONST == IS_CONST || IS_CONST == IS_CV) {
				ZVAL_STR_COPY(EX_VAR(opline->result.var), op1_str);
			} else {
				ZVAL_STR(EX_VAR(opline->result.var), op1_str);
			}
			if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
				zend_string_release_ex(op2_str, 0);
			}
		} else if (IS_CONST != IS_CONST && IS_CONST != IS_CV &&
		    !ZSTR_IS_INTERNED(op1_str) && GC_REFCOUNT(op1_str) == 1) {
			size_t len = ZSTR_LEN(op1_str);

			str = zend_string_extend(op1_str, len + ZSTR_LEN(op2_str), 0);
			memcpy(ZSTR_VAL(str) + len, ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
			GC_ADD_FLAGS(str, flags);
			ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
			if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
				zend_string_release_ex(op2_str, 0);
			}
		} else {
			str = zend_string_alloc(ZSTR_LEN(op1_str) + ZSTR_LEN(op2_str), 0);
			memcpy(ZSTR_VAL(str), ZSTR_VAL(op1_str), ZSTR_LEN(op1_str));
			memcpy(ZSTR_VAL(str) + ZSTR_LEN(op1_str), ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
			GC_ADD_FLAGS(str, flags);
			ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
			if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
				zend_string_release_ex(op1_str, 0);
			}
			if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
				zend_string_release_ex(op2_str, 0);
			}
		}
		ZEND_VM_NEXT_OPCODE();
	}

	SAVE_OPLINE();
	if (IS_CONST == IS_CONST) {
		op1_str = Z_STR_P(op1);
	} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
		op1_str = zend_string_copy(Z_STR_P(op1));
	} else {
		if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
			ZVAL_UNDEFINED_OP1();
		}
		op1_str = zval_get_string_func(op1);
	}
	if (IS_CV == IS_CONST) {
		op2_str = Z_STR_P(op2);
	} else if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
		op2_str = zend_string_copy(Z_STR_P(op2));
	} else {
		if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(op2) == IS_UNDEF)) {
			ZVAL_UNDEFINED_OP2();
		}
		op2_str = zval_get_string_func(op2);
	}
	do {
		if (IS_CONST != IS_CONST) {
			if (UNEXPECTED(ZSTR_LEN(op1_str) == 0)) {
				if (IS_CV == IS_CONST) {
					if (UNEXPECTED(Z_REFCOUNTED_P(op2))) {
						GC_ADDREF(op2_str);
					}
				}
				ZVAL_STR(EX_VAR(opline->result.var), op2_str);
				zend_string_release_ex(op1_str, 0);
				break;
			}
		}
		if (IS_CV != IS_CONST) {
			if (UNEXPECTED(ZSTR_LEN(op2_str) == 0)) {
				if (IS_CONST == IS_CONST) {
					if (UNEXPECTED(Z_REFCOUNTED_P(op1))) {
						GC_ADDREF(op1_str);
					}
				}
				ZVAL_STR(EX_VAR(opline->result.var), op1_str);
				zend_string_release_ex(op2_str, 0);
				break;
			}
		}
		str = zend_string_alloc(ZSTR_LEN(op1_str) + ZSTR_LEN(op2_str), 0);
		memcpy(ZSTR_VAL(str), ZSTR_VAL(op1_str), ZSTR_LEN(op1_str));
		memcpy(ZSTR_VAL(str) + ZSTR_LEN(op1_str), ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);

		ZSTR_COPY_CONCAT_PROPERTIES_BOTH(str, op1_str, op2_str);
		ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
		if (IS_CONST != IS_CONST) {
			zend_string_release_ex(op1_str, 0);
		}
		if (IS_CV != IS_CONST) {
			zend_string_release_ex(op2_str, 0);
		}
	} while (0);




	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_INIT_METHOD_CALL_SPEC_CONST_CV_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *function_name;
	zval *object;
	zend_function *fbc;
	zend_class_entry *called_scope;
	zend_object *obj;
	zend_execute_data *call;
	uint32_t call_info;

	SAVE_OPLINE();

	object = RT_CONSTANT(opline, opline->op1);

	if (IS_CV != IS_CONST) {
		function_name = EX_VAR(opline->op2.var);
	}

	if (IS_CV != IS_CONST &&
	    UNEXPECTED(Z_TYPE_P(function_name) != IS_STRING)) {
		do {
			if ((IS_CV & (IS_VAR|IS_CV)) && Z_ISREF_P(function_name)) {
				function_name = Z_REFVAL_P(function_name);
				if (EXPECTED(Z_TYPE_P(function_name) == IS_STRING)) {
					break;
				}
			} else if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) {
				ZVAL_UNDEFINED_OP2();
				if (UNEXPECTED(EG(exception) != NULL)) {


					HANDLE_EXCEPTION();
				}
			}
			zend_throw_error(NULL, "Method name must be a string");




			HANDLE_EXCEPTION();
		} while (0);
	}

	if (IS_CONST == IS_UNUSED) {
		obj = Z_OBJ_P(object);
	} else {
		do {
			if (IS_CONST != IS_CONST && EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
				obj = Z_OBJ_P(object);
			} else {
				if ((IS_CONST & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(object))) {
					zend_reference *ref = Z_REF_P(object);

					object = &ref->val;
					if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
						obj = Z_OBJ_P(object);
						if (IS_CONST & IS_VAR) {
							if (UNEXPECTED(GC_DELREF(ref) == 0)) {
								efree_size(ref, sizeof(zend_reference));
							} else {
								Z_ADDREF_P(object);
							}
						}
						break;
					}
				}
				if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
					object = ZVAL_UNDEFINED_OP1();
					if (UNEXPECTED(EG(exception) != NULL)) {
						if (IS_CV != IS_CONST) {


						}
						HANDLE_EXCEPTION();
					}
				}
				if (IS_CV == IS_CONST) {
					function_name = EX_VAR(opline->op2.var);
				}
				zend_invalid_method_call(object, function_name);




				HANDLE_EXCEPTION();
			}
		} while (0);
	}

	called_scope = obj->ce;

	if (IS_CV == IS_CONST &&
	    EXPECTED(CACHED_PTR(opline->result.num) == called_scope)) {
		fbc = CACHED_PTR(opline->result.num + sizeof(void*));
	} else {
		zend_object *orig_obj = obj;

		if (IS_CV == IS_CONST) {
			function_name = EX_VAR(opline->op2.var);
		}

		/* First, locate the function. */
		fbc = obj->handlers->get_method(&obj, Z_STR_P(function_name), ((IS_CV == IS_CONST) ? (RT_CONSTANT(opline, opline->op2) + 1) : NULL));
		if (UNEXPECTED(fbc == NULL)) {
			if (EXPECTED(!EG(exception))) {
				zend_undefined_method(orig_obj->ce, Z_STR_P(function_name));
			}


			if ((IS_CONST & (IS_VAR|IS_TMP_VAR)) && GC_DELREF(orig_obj) == 0) {
				zend_objects_store_del(orig_obj);
			}
			HANDLE_EXCEPTION();
		}
		if (IS_CV == IS_CONST &&
		    EXPECTED(!(fbc->common.fn_flags & (ZEND_ACC_CALL_VIA_TRAMPOLINE|ZEND_ACC_NEVER_CACHE))) &&
		    EXPECTED(obj == orig_obj)) {
			CACHE_POLYMORPHIC_PTR(opline->result.num, called_scope, fbc);
		}
		if ((IS_CONST & (IS_VAR|IS_TMP_VAR)) && UNEXPECTED(obj != orig_obj)) {
			GC_ADDREF(obj); /* For $this pointer */
			if (GC_DELREF(orig_obj) == 0) {
				zend_objects_store_del(orig_obj);
			}
		}
		if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!RUN_TIME_CACHE(&fbc->op_array))) {
			init_func_run_time_cache(&fbc->op_array);
		}
	}

	if (IS_CV != IS_CONST) {


	}

	call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_HAS_THIS;
	if (UNEXPECTED((fbc->common.fn_flags & ZEND_ACC_STATIC) != 0)) {
		if ((IS_CONST & (IS_VAR|IS_TMP_VAR)) && GC_DELREF(obj) == 0) {
			zend_objects_store_del(obj);
			if (UNEXPECTED(EG(exception))) {
				HANDLE_EXCEPTION();
			}
		}
		/* call static method */
		obj = (zend_object*)called_scope;
		call_info = ZEND_CALL_NESTED_FUNCTION;
	} else if (IS_CONST & (IS_VAR|IS_TMP_VAR|IS_CV)) {
		if (IS_CONST == IS_CV) {
			GC_ADDREF(obj); /* For $this pointer */
		}
		/* CV may be changed indirectly (e.g. when it's a reference) */
		call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_HAS_THIS | ZEND_CALL_RELEASE_THIS;
	}

	call = zend_vm_stack_push_call_frame(call_info,
		fbc, opline->extended_value, obj);
	call->prev_execute_data = EX(call);
	EX(call) = call;

	ZEND_VM_NEXT_OPCODE();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_INIT_STATIC_METHOD_CALL_SPEC_CONST_CV_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *function_name;
	zend_class_entry *ce;
	uint32_t call_info;
	zend_function *fbc;
	zend_execute_data *call;

	SAVE_OPLINE();

	if (IS_CONST == IS_CONST) {
		/* no function found. try a static method in class */
		ce = CACHED_PTR(opline->result.num);
		if (UNEXPECTED(ce == NULL)) {
			ce = zend_fetch_class_by_name(Z_STR_P(RT_CONSTANT(opline, opline->op1)), Z_STR_P(RT_CONSTANT(opline, opline->op1) + 1), ZEND_FETCH_CLASS_DEFAULT | ZEND_FETCH_CLASS_EXCEPTION);
			if (UNEXPECTED(ce == NULL)) {


				HANDLE_EXCEPTION();
			}
			if (IS_CV != IS_CONST) {
				CACHE_PTR(opline->result.num, ce);
			}
		}
	} else if (IS_CONST == IS_UNUSED) {
		ce = zend_fetch_class(NULL, opline->op1.num);
		if (UNEXPECTED(ce == NULL)) {


			HANDLE_EXCEPTION();
		}
	} else {
		ce = Z_CE_P(EX_VAR(opline->op1.var));
	}

	if (IS_CONST == IS_CONST &&
	    IS_CV == IS_CONST &&
	    EXPECTED((fbc = CACHED_PTR(opline->result.num + sizeof(void*))) != NULL)) {
		/* nothing to do */
	} else if (IS_CONST != IS_CONST &&
	           IS_CV == IS_CONST &&
	           EXPECTED(CACHED_PTR(opline->result.num) == ce)) {
		fbc = CACHED_PTR(opline->result.num + sizeof(void*));
	} else if (IS_CV != IS_UNUSED) {
		function_name = EX_VAR(opline->op2.var);
		if (IS_CV != IS_CONST) {
			if (UNEXPECTED(Z_TYPE_P(function_name) != IS_STRING)) {
				do {
					if (IS_CV & (IS_VAR|IS_CV) && Z_ISREF_P(function_name)) {
						function_name = Z_REFVAL_P(function_name);
						if (EXPECTED(Z_TYPE_P(function_name) == IS_STRING)) {
							break;
						}
					} else if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) {
						ZVAL_UNDEFINED_OP2();
						if (UNEXPECTED(EG(exception) != NULL)) {
							HANDLE_EXCEPTION();
						}
					}
					zend_throw_error(NULL, "Method name must be a string");


					HANDLE_EXCEPTION();
				} while (0);
			}
		}

		if (ce->get_static_method) {
			fbc = ce->get_static_method(ce, Z_STR_P(function_name));
		} else {
			fbc = zend_std_get_static_method(ce, Z_STR_P(function_name), ((IS_CV == IS_CONST) ? (RT_CONSTANT(opline, opline->op2) + 1) : NULL));
		}
		if (UNEXPECTED(fbc == NULL)) {
			if (EXPECTED(!EG(exception))) {
				zend_undefined_method(ce, Z_STR_P(function_name));
			}


			HANDLE_EXCEPTION();
		}
		if (IS_CV == IS_CONST &&
		    EXPECTED(!(fbc->common.fn_flags & (ZEND_ACC_CALL_VIA_TRAMPOLINE|ZEND_ACC_NEVER_CACHE))) &&
			EXPECTED(!(fbc->common.scope->ce_flags & ZEND_ACC_TRAIT))) {
			CACHE_POLYMORPHIC_PTR(opline->result.num, ce, fbc);
		}
		if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!RUN_TIME_CACHE(&fbc->op_array))) {
			init_func_run_time_cache(&fbc->op_array);
		}
		if (IS_CV != IS_CONST) {


		}
	} else {
		if (UNEXPECTED(ce->constructor == NULL)) {
			zend_throw_error(NULL, "Cannot call constructor");
			HANDLE_EXCEPTION();
		}
		if (Z_TYPE(EX(This)) == IS_OBJECT && Z_OBJ(EX(This))->ce != ce->constructor->common.scope && (ce->constructor->common.fn_flags & ZEND_ACC_PRIVATE)) {
			zend_throw_error(NULL, "Cannot call private %s::__construct()", ZSTR_VAL(ce->name));
			HANDLE_EXCEPTION();
		}
		fbc = ce->constructor;
		if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!RUN_TIME_CACHE(&fbc->op_array))) {
			init_func_run_time_cache(&fbc->op_array);
		}
	}

	if (!(fbc->common.fn_flags & ZEND_ACC_STATIC)) {
		if (Z_TYPE(EX(This)) == IS_OBJECT && instanceof_function(Z_OBJCE(EX(This)), ce)) {
			ce = (zend_class_entry*)Z_OBJ(EX(This));
			call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_HAS_THIS;
		} else {
			zend_non_static_method_call(fbc);
			HANDLE_EXCEPTION();
		}
	} else {
		/* previous opcode is ZEND_FETCH_CLASS */
		if (IS_CONST == IS_UNUSED
		 && ((opline->op1.num & ZEND_FETCH_CLASS_MASK) == ZEND_FETCH_CLASS_PARENT ||
		     (opline->op1.num & ZEND_FETCH_CLASS_MASK) == ZEND_FETCH_CLASS_SELF)) {
			if (Z_TYPE(EX(This)) == IS_OBJECT) {
				ce = Z_OBJCE(EX(This));
			} else {
				ce = Z_CE(EX(This));
			}
		}
		call_info = ZEND_CALL_NESTED_FUNCTION;
	}

	call = zend_vm_stack_push_call_frame(call_info,
		fbc, opline->extended_value, ce);
	call->prev_execute_data = EX(call);
	EX(call) = call;

	ZEND_VM_NEXT_OPCODE();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_INIT_USER_CALL_SPEC_CONST_CV_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *function_name;
	zend_fcall_info_cache fcc;
	char *error = NULL;
	zend_function *func;
	void *object_or_called_scope;
	zend_execute_data *call;
	uint32_t call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_DYNAMIC;

	SAVE_OPLINE();
	function_name = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
	if (zend_is_callable_ex(function_name, NULL, 0, NULL, &fcc, &error)) {
		ZEND_ASSERT(!error);

		/* Deprecation can be emitted from zend_is_callable_ex(), which can
		 * invoke a user error handler and throw an exception.
		 * For the CONST and CV case we reuse the same exception block below
		 * to make sure we don't increase VM size too much. */
		if (!(IS_CV & (IS_TMP_VAR|IS_VAR)) && UNEXPECTED(EG(exception))) {


			HANDLE_EXCEPTION();
		}

		func = fcc.function_handler;
		object_or_called_scope = fcc.called_scope;
		if (func->common.fn_flags & ZEND_ACC_CLOSURE) {
			/* Delay closure destruction until its invocation */
			GC_ADDREF(ZEND_CLOSURE_OBJECT(func));
			call_info |= ZEND_CALL_CLOSURE;
			if (func->common.fn_flags & ZEND_ACC_FAKE_CLOSURE) {
				call_info |= ZEND_CALL_FAKE_CLOSURE;
			}
			if (fcc.object) {
				object_or_called_scope = fcc.object;
				call_info |= ZEND_CALL_HAS_THIS;
			}
		} else if (fcc.object) {
			GC_ADDREF(fcc.object); /* For $this pointer */
			object_or_called_scope = fcc.object;
			call_info |= ZEND_CALL_RELEASE_THIS | ZEND_CALL_HAS_THIS;
		}


		if ((IS_CV & (IS_TMP_VAR|IS_VAR)) && UNEXPECTED(EG(exception))) {
			if (call_info & ZEND_CALL_CLOSURE) {
				zend_object_release(ZEND_CLOSURE_OBJECT(func));
			} else if (call_info & ZEND_CALL_RELEASE_THIS) {
				zend_object_release(fcc.object);
			}
			HANDLE_EXCEPTION();
		}

		if (EXPECTED(func->type == ZEND_USER_FUNCTION) && UNEXPECTED(!RUN_TIME_CACHE(&func->op_array))) {
			init_func_run_time_cache(&func->op_array);
		}
	} else {
		zend_type_error("%s(): Argument #1 ($callback) must be a valid callback, %s", Z_STRVAL_P(RT_CONSTANT(opline, opline->op1)), error);
		efree(error);


		HANDLE_EXCEPTION();
	}

	call = zend_vm_stack_push_call_frame(call_info,
		func, opline->extended_value, object_or_called_scope);
	call->prev_execute_data = EX(call);
	EX(call) = call;

	ZEND_VM_NEXT_OPCODE();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_CV_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *expr_ptr, new_expr;

	SAVE_OPLINE();
	if ((IS_CONST == IS_VAR || IS_CONST == IS_CV) &&
	    UNEXPECTED(opline->extended_value & ZEND_ARRAY_ELEMENT_REF)) {
		expr_ptr = zend_get_bad_ptr();
		if (Z_ISREF_P(expr_ptr)) {
			Z_ADDREF_P(expr_ptr);
		} else {
			ZVAL_MAKE_REF_EX(expr_ptr, 2);
		}


	} else {
		expr_ptr = RT_CONSTANT(opline, opline->op1);
		if (IS_CONST == IS_TMP_VAR) {
			/* pass */
		} else if (IS_CONST == IS_CONST) {
			Z_TRY_ADDREF_P(expr_ptr);
		} else if (IS_CONST == IS_CV) {
			ZVAL_DEREF(expr_ptr);
			Z_TRY_ADDREF_P(expr_ptr);
		} else /* if (IS_CONST == IS_VAR) */ {
			if (UNEXPECTED(Z_ISREF_P(expr_ptr))) {
				zend_refcounted *ref = Z_COUNTED_P(expr_ptr);

				expr_ptr = Z_REFVAL_P(expr_ptr);
				if (UNEXPECTED(GC_DELREF(ref) == 0)) {
					ZVAL_COPY_VALUE(&new_expr, expr_ptr);
					expr_ptr = &new_expr;
					efree_size(ref, sizeof(zend_reference));
				} else if (Z_OPT_REFCOUNTED_P(expr_ptr)) {
					Z_ADDREF_P(expr_ptr);
				}
			}
		}
	}

	if (IS_CV != IS_UNUSED) {
		zval *offset = EX_VAR(opline->op2.var);
		zend_string *str;
		zend_ulong hval;

add_again:
		if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) {
			str = Z_STR_P(offset);
			if (IS_CV != IS_CONST) {
				if (ZEND_HANDLE_NUMERIC(str, hval)) {
					goto num_index;
				}
			}
str_index:
			zend_hash_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), str, expr_ptr);
		} else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
			hval = Z_LVAL_P(offset);
num_index:
			zend_hash_index_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), hval, expr_ptr);
		} else if ((IS_CV & (IS_VAR|IS_CV)) && EXPECTED(Z_TYPE_P(offset) == IS_REFERENCE)) {
			offset = Z_REFVAL_P(offset);
			goto add_again;
		} else if (UNEXPECTED(Z_TYPE_P(offset) == IS_NULL)) {
			zval tmp;
			if (IS_CONST == IS_CV || IS_CONST == IS_VAR) {
				ZVAL_COPY(&tmp, expr_ptr);
			}
			zend_error(E_DEPRECATED, "Using null as an array offset is deprecated, use an empty string instead");
			if (IS_CONST == IS_CV || IS_CONST == IS_VAR) {
				/* A userland error handler can do funky things to the expression, so reset it */
				zval_ptr_dtor(expr_ptr);
				ZVAL_COPY_VALUE(expr_ptr, &tmp);
			}
			if (UNEXPECTED(EG(exception))) {
				zval_ptr_dtor_nogc(expr_ptr);
				HANDLE_EXCEPTION();
			}
			str = ZSTR_EMPTY_ALLOC();
			goto str_index;
		} else if (Z_TYPE_P(offset) == IS_DOUBLE) {
			hval = zend_dval_to_lval_safe(Z_DVAL_P(offset));
			goto num_index;
		} else if (Z_TYPE_P(offset) == IS_FALSE) {
			hval = 0;
			goto num_index;
		} else if (Z_TYPE_P(offset) == IS_TRUE) {
			hval = 1;
			goto num_index;
		} else if (Z_TYPE_P(offset) == IS_RESOURCE) {
			zend_use_resource_as_offset(offset);
			hval = Z_RES_HANDLE_P(offset);
			goto num_index;
		} else if (IS_CV == IS_CV && Z_TYPE_P(offset) == IS_UNDEF) {
			ZVAL_UNDEFINED_OP2();
			str = ZSTR_EMPTY_ALLOC();
			goto str_index;
		} else {
			zend_illegal_array_offset_access(offset);
			zval_ptr_dtor_nogc(expr_ptr);
		}


	} else {
		if (!zend_hash_next_index_insert(Z_ARRVAL_P(EX_VAR(opline->result.var)), expr_ptr)) {
			zend_cannot_add_element();
			zval_ptr_dtor_nogc(expr_ptr);
		}
	}
	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_INIT_ARRAY_SPEC_CONST_CV_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	zval *array;
	uint32_t size;
	USE_OPLINE

	SAVE_OPLINE();
	array = EX_VAR(opline->result.var);
	if (IS_CONST != IS_UNUSED) {
		size = opline->extended_value >> ZEND_ARRAY_SIZE_SHIFT;
		ZVAL_ARR(array, zend_new_array(size));
		/* Explicitly initialize array as not-packed if flag is set */
		if (opline->extended_value & ZEND_ARRAY_NOT_PACKED) {
			zend_hash_real_init_mixed(Z_ARRVAL_P(array));
		}
		ZEND_VM_TAIL_CALL(ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_CV_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
	} else {
		ZVAL_ARR(array, zend_new_array(0));
		ZEND_VM_NEXT_OPCODE();
	}
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CONST_CV_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *container;
	bool result;
	zend_ulong hval;
	zval *offset;

	SAVE_OPLINE();
	container = RT_CONSTANT(opline, opline->op1);
	offset = EX_VAR(opline->op2.var);

	if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
		HashTable *ht;
		zval *value;
		zend_string *str;

isset_dim_obj_array:
		ht = Z_ARRVAL_P(container);
isset_again:
		if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) {
			str = Z_STR_P(offset);
			if (IS_CV != IS_CONST) {
				if (ZEND_HANDLE_NUMERIC(str, hval)) {
					goto num_index_prop;
				}
			}
			value = zend_hash_find_ex(ht, str, IS_CV == IS_CONST);
		} else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
			hval = Z_LVAL_P(offset);
num_index_prop:
			value = zend_hash_index_find(ht, hval);
		} else if ((IS_CV & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(offset))) {
			offset = Z_REFVAL_P(offset);
			goto isset_again;
		} else {
			value = zend_find_array_dim_slow(ht, offset EXECUTE_DATA_CC);
			if (UNEXPECTED(EG(exception))) {
				result = 0;
				goto isset_dim_obj_exit;
			}
		}

		if (!(opline->extended_value & ZEND_ISEMPTY)) {
			/* > IS_NULL means not IS_UNDEF and not IS_NULL */
			result = value != NULL && Z_TYPE_P(value) > IS_NULL &&
			    (!Z_ISREF_P(value) || Z_TYPE_P(Z_REFVAL_P(value)) != IS_NULL);

			if (IS_CONST & (IS_CONST|IS_CV)) {
				/* avoid exception check */


				ZEND_VM_SMART_BRANCH(result, 0);
			}
		} else {
			result = (value == NULL || !i_zend_is_true(value));
		}
		goto isset_dim_obj_exit;
	} else if ((IS_CONST & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(container))) {
		container = Z_REFVAL_P(container);
		if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
			goto isset_dim_obj_array;
		}
	}

	if (IS_CV == IS_CONST && Z_EXTRA_P(offset) == ZEND_EXTRA_VALUE) {
		offset++;
	}
	if (!(opline->extended_value & ZEND_ISEMPTY)) {
		result = zend_isset_dim_slow(container, offset EXECUTE_DATA_CC);
	} else {
		result = zend_isempty_dim_slow(container, offset EXECUTE_DATA_CC);
	}

isset_dim_obj_exit:




	ZEND_VM_SMART_BRANCH(result, 1);
}

static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CONST_CV_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *container;
	int result;
	zval *offset;
	zend_string *name, *tmp_name;

	SAVE_OPLINE();
	container = RT_CONSTANT(opline, opline->op1);
	offset = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);

	if (IS_CONST == IS_CONST ||
	    (IS_CONST != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
		if ((IS_CONST & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
			container = Z_REFVAL_P(container);
			if (UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT)) {
				result = (opline->extended_value & ZEND_ISEMPTY);
				goto isset_object_finish;
			}
		} else {
			result = (opline->extended_value & ZEND_ISEMPTY);
			goto isset_object_finish;
		}
	}

	if (IS_CV == IS_CONST) {
		name = Z_STR_P(offset);
	} else {
		name = zval_try_get_tmp_string(offset, &tmp_name);
		if (UNEXPECTED(!name)) {
			result = 0;
			goto isset_object_finish;
		}
	}

	result =
		(opline->extended_value & ZEND_ISEMPTY) ^
		Z_OBJ_HT_P(container)->has_property(Z_OBJ_P(container), name, (opline->extended_value & ZEND_ISEMPTY), ((IS_CV == IS_CONST) ? CACHE_ADDR(opline->extended_value & ~ZEND_ISEMPTY) : NULL));

	if (IS_CV != IS_CONST) {
		zend_tmp_string_release(tmp_name);
	}

isset_object_finish:




	ZEND_VM_SMART_BRANCH(result, 1);
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_ARRAY_KEY_EXISTS_SPEC_CONST_CV_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE

	zval *key, *subject;
	HashTable *ht;
	bool result;

	SAVE_OPLINE();

	key = RT_CONSTANT(opline, opline->op1);
	subject = EX_VAR(opline->op2.var);

	if (EXPECTED(Z_TYPE_P(subject) == IS_ARRAY)) {
array_key_exists_array:
		ht = Z_ARRVAL_P(subject);
		result = zend_array_key_exists_fast(ht, key OPLINE_CC EXECUTE_DATA_CC);
	} else {
		if ((IS_CV & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(subject))) {
			subject = Z_REFVAL_P(subject);
			if (EXPECTED(Z_TYPE_P(subject) == IS_ARRAY)) {
				goto array_key_exists_array;
			}
		}
		zend_array_key_exists_error(subject, key OPLINE_CC EXECUTE_DATA_CC);
		result = 0;
	}




	ZEND_VM_SMART_BRANCH(result, 1);
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_YIELD_SPEC_CONST_CV_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE

	zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C);

	SAVE_OPLINE();
	if (UNEXPECTED(generator->flags & ZEND_GENERATOR_FORCED_CLOSE)) {
		ZEND_VM_TAIL_CALL(zend_yield_in_closed_generator_helper_SPEC_TAILCALL(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
	}

	/* Destroy the previously yielded value */
	zval_ptr_dtor(&generator->value);

	/* Destroy the previously yielded key */
	zval_ptr_dtor(&generator->key);

	/* Set the new yielded value */
	if (IS_CONST != IS_UNUSED) {
		if (UNEXPECTED(EX(func)->op_array.fn_flags & ZEND_ACC_RETURN_REFERENCE)) {
			/* Constants and temporary variables aren't yieldable by reference,
			 * but we still allow them with a notice. */
			if (IS_CONST & (IS_CONST|IS_TMP_VAR)) {
				zval *value;

				zend_error(E_NOTICE, "Only variable references should be yielded by reference");

				value = RT_CONSTANT(opline, opline->op1);
				ZVAL_COPY_VALUE(&generator->value, value);
				if (IS_CONST == IS_CONST) {
					if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
						Z_ADDREF(generator->value);
					}
				}
			} else {
				zval *value_ptr = zend_get_bad_ptr();

				/* If a function call result is yielded and the function did
				 * not return by reference we throw a notice. */
				do {
					if (IS_CONST == IS_VAR) {
						ZEND_ASSERT(value_ptr != &EG(uninitialized_zval));
						if (opline->extended_value == ZEND_RETURNS_FUNCTION
						 && !Z_ISREF_P(value_ptr)) {
							zend_error(E_NOTICE, "Only variable references should be yielded by reference");
							ZVAL_COPY(&generator->value, value_ptr);
							break;
						}
					}
					if (Z_ISREF_P(value_ptr)) {
						Z_ADDREF_P(value_ptr);
					} else {
						ZVAL_MAKE_REF_EX(value_ptr, 2);
					}
					ZVAL_REF(&generator->value, Z_REF_P(value_ptr));
				} while (0);


			}
		} else {
			zval *value = RT_CONSTANT(opline, opline->op1);

			/* Consts, temporary variables and references need copying */
			if (IS_CONST == IS_CONST) {
				ZVAL_COPY_VALUE(&generator->value, value);
				if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
					Z_ADDREF(generator->value);
				}
			} else if (IS_CONST == IS_TMP_VAR) {
				ZVAL_COPY_VALUE(&generator->value, value);
			} else if ((IS_CONST & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) {
				ZVAL_COPY(&generator->value, Z_REFVAL_P(value));


			} else {
				ZVAL_COPY_VALUE(&generator->value, value);
				if (IS_CONST == IS_CV) {
					if (Z_OPT_REFCOUNTED_P(value)) Z_ADDREF_P(value);
				}
			}
		}
	} else {
		/* If no value was specified yield null */
		ZVAL_NULL(&generator->value);
	}

	/* Set the new yielded key */
	if (IS_CV != IS_UNUSED) {
		zval *key = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
		if ((IS_CV & (IS_CV|IS_VAR)) && UNEXPECTED(Z_TYPE_P(key) == IS_REFERENCE)) {
			key = Z_REFVAL_P(key);
		}
		ZVAL_COPY(&generator->key, key);


		if (Z_TYPE(generator->key) == IS_LONG
		    && Z_LVAL(generator->key) > generator->largest_used_integer_key
		) {
			generator->largest_used_integer_key = Z_LVAL(generator->key);
		}
	} else {
		/* If no key was specified we use auto-increment keys */
		generator->largest_used_integer_key++;
		ZVAL_LONG(&generator->key, generator->largest_used_integer_key);
	}

	if (RETURN_VALUE_USED(opline)) {
		/* If the return value of yield is used set the send
		 * target and initialize it to NULL */
		generator->send_target = EX_VAR(opline->result.var);
		ZVAL_NULL(generator->send_target);
	} else {
		generator->send_target = NULL;
	}

	/* The GOTO VM uses a local opline variable. We need to set the opline
	 * variable in execute_data so we don't resume at an old position. */
	SAVE_OPLINE();

	ZEND_VM_RETURN();
}

static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_BW_NOT_SPEC_TMPVARCV_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1;

	op1 = EX_VAR(opline->op1.var);
	if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
		ZVAL_LONG(EX_VAR(opline->result.var), ~Z_LVAL_P(op1));
		ZEND_VM_NEXT_OPCODE();
	}

	ZEND_VM_DISPATCH_TO_HELPER(zend_bw_not_helper_SPEC_TAILCALL(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_EX op1));
}

static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_QM_ASSIGN_LONG_SPEC_TMPVARCV_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *value;

	value = EX_VAR(opline->op1.var);
	ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(value));
	ZEND_VM_NEXT_OPCODE();
}

static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_QM_ASSIGN_DOUBLE_SPEC_TMPVARCV_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *value;

	value = EX_VAR(opline->op1.var);
	ZVAL_DOUBLE(EX_VAR(opline->result.var), Z_DVAL_P(value));
	ZEND_VM_NEXT_OPCODE();
}

static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_QM_ASSIGN_NOREF_SPEC_TMPVARCV_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *value;

	value = EX_VAR(opline->op1.var);
	ZVAL_COPY_VALUE(EX_VAR(opline->result.var), value);
	ZEND_VM_NEXT_OPCODE();
}

static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_ADD_SPEC_TMPVARCV_CONST_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2, *result;
	double d1, d2;

	op1 = EX_VAR(opline->op1.var);
	op2 = RT_CONSTANT(opline, opline->op2);
	if (1 && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST && IS_CONST == IS_CONST) {
		/* pass */
	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
			result = EX_VAR(opline->result.var);
			fast_long_add_function(result, op1, op2);
			ZEND_VM_NEXT_OPCODE();
		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
			d1 = (double)Z_LVAL_P(op1);
			d2 = Z_DVAL_P(op2);
			goto add_double;
		}
	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
			d1 = Z_DVAL_P(op1);
			d2 = Z_DVAL_P(op2);
add_double:
			result = EX_VAR(opline->result.var);
			ZVAL_DOUBLE(result, d1 + d2);
			ZEND_VM_NEXT_OPCODE();
		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
			d1 = Z_DVAL_P(op1);
			d2 = (double)Z_LVAL_P(op2);
			goto add_double;
		}
	}

	ZEND_VM_DISPATCH_TO_HELPER(zend_add_helper_SPEC_TAILCALL(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_EX op1, op2));
}

static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_SUB_SPEC_TMPVARCV_CONST_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2, *result;
	double d1, d2;

	op1 = EX_VAR(opline->op1.var);
	op2 = RT_CONSTANT(opline, opline->op2);
	if (1 && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST && IS_CONST == IS_CONST) {
		/* pass */
	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
			result = EX_VAR(opline->result.var);
			fast_long_sub_function(result, op1, op2);
			ZEND_VM_NEXT_OPCODE();
		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
			d1 = (double)Z_LVAL_P(op1);
			d2 = Z_DVAL_P(op2);
			goto sub_double;
		}
	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
			d1 = Z_DVAL_P(op1);
			d2 = Z_DVAL_P(op2);
sub_double:
			result = EX_VAR(opline->result.var);
			ZVAL_DOUBLE(result, d1 - d2);
			ZEND_VM_NEXT_OPCODE();
		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
			d1 = Z_DVAL_P(op1);
			d2 = (double)Z_LVAL_P(op2);
			goto sub_double;
		}
	}

	ZEND_VM_DISPATCH_TO_HELPER(zend_sub_helper_SPEC_TAILCALL(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_EX op1, op2));
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_MUL_SPEC_TMPVARCV_CONST_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2, *result;
	double d1, d2;

	op1 = EX_VAR(opline->op1.var);
	op2 = RT_CONSTANT(opline, opline->op2);
	if (1 && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST && IS_CONST == IS_CONST) {
		/* pass */
	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
			zend_long overflow;

			result = EX_VAR(opline->result.var);
			ZEND_SIGNED_MULTIPLY_LONG(Z_LVAL_P(op1), Z_LVAL_P(op2), Z_LVAL_P(result), Z_DVAL_P(result), overflow);
			Z_TYPE_INFO_P(result) = overflow ? IS_DOUBLE : IS_LONG;
			ZEND_VM_NEXT_OPCODE();
		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
			d1 = (double)Z_LVAL_P(op1);
			d2 = Z_DVAL_P(op2);
			goto mul_double;
		}
	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
			d1 = Z_DVAL_P(op1);
			d2 = Z_DVAL_P(op2);
mul_double:
			result = EX_VAR(opline->result.var);
			ZVAL_DOUBLE(result, d1 * d2);
			ZEND_VM_NEXT_OPCODE();
		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
			d1 = Z_DVAL_P(op1);
			d2 = (double)Z_LVAL_P(op2);
			goto mul_double;
		}
	}

	ZEND_VM_DISPATCH_TO_HELPER(zend_mul_helper_SPEC_TAILCALL(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_EX op1, op2));
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_MOD_SPEC_TMPVARCV_CONST_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2, *result;

	op1 = EX_VAR(opline->op1.var);
	op2 = RT_CONSTANT(opline, opline->op2);
	if (1 && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST && IS_CONST == IS_CONST) {
		/* pass */
	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
			result = EX_VAR(opline->result.var);
			if (UNEXPECTED(Z_LVAL_P(op2) == 0)) {
				ZEND_VM_TAIL_CALL(zend_mod_by_zero_helper_SPEC_TAILCALL(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
			} else if (UNEXPECTED(Z_LVAL_P(op2) == -1)) {
				/* Prevent overflow error/crash if op1==ZEND_LONG_MIN */
				ZVAL_LONG(result, 0);
			} else {
				ZVAL_LONG(result, Z_LVAL_P(op1) % Z_LVAL_P(op2));
			}
			ZEND_VM_NEXT_OPCODE();
		}
	}

	ZEND_VM_DISPATCH_TO_HELPER(zend_mod_helper_SPEC_TAILCALL(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_EX op1, op2));
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_SL_SPEC_TMPVARCV_CONST_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;

	op1 = EX_VAR(opline->op1.var);
	op2 = RT_CONSTANT(opline, opline->op2);
	if (1 && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST && IS_CONST == IS_CONST) {
		/* pass */
	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)
			&& EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)
			&& EXPECTED((zend_ulong)Z_LVAL_P(op2) < SIZEOF_ZEND_LONG * 8)) {
		/* Perform shift on unsigned numbers to get well-defined wrap behavior. */
		ZVAL_LONG(EX_VAR(opline->result.var),
			(zend_long) ((zend_ulong) Z_LVAL_P(op1) << Z_LVAL_P(op2)));
		ZEND_VM_NEXT_OPCODE();
	}

	ZEND_VM_DISPATCH_TO_HELPER(zend_shift_left_helper_SPEC_TAILCALL(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_EX op1, op2));
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_SR_SPEC_TMPVARCV_CONST_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;

	op1 = EX_VAR(opline->op1.var);
	op2 = RT_CONSTANT(opline, opline->op2);
	if (1 && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST && IS_CONST == IS_CONST) {
		/* pass */
	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)
			&& EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)
			&& EXPECTED((zend_ulong)Z_LVAL_P(op2) < SIZEOF_ZEND_LONG * 8)) {
		ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(op1) >> Z_LVAL_P(op2));
		ZEND_VM_NEXT_OPCODE();
	}

	ZEND_VM_DISPATCH_TO_HELPER(zend_shift_right_helper_SPEC_TAILCALL(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_EX op1, op2));
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_IS_SMALLER_SPEC_TMPVARCV_CONST_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;
	double d1, d2;

	op1 = EX_VAR(opline->op1.var);
	op2 = RT_CONSTANT(opline, opline->op2);
	if (1 && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST && IS_CONST == IS_CONST) {
		/* pass */
	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
			if (EXPECTED(Z_LVAL_P(op1) < Z_LVAL_P(op2))) {
is_smaller_true:
				ZEND_VM_SMART_BRANCH_TRUE_NONE();
			} else {
is_smaller_false:
				ZEND_VM_SMART_BRANCH_FALSE_NONE();
			}
		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
			d1 = (double)Z_LVAL_P(op1);
			d2 = Z_DVAL_P(op2);
			goto is_smaller_double;
		}
	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
			d1 = Z_DVAL_P(op1);
			d2 = Z_DVAL_P(op2);
is_smaller_double:
			if (d1 < d2) {
				goto is_smaller_true;
			} else {
				goto is_smaller_false;
			}
		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
			d1 = Z_DVAL_P(op1);
			d2 = (double)Z_LVAL_P(op2);
			goto is_smaller_double;
		}
	}
	ZEND_VM_DISPATCH_TO_HELPER(zend_is_smaller_helper_SPEC_TAILCALL(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_EX op1, op2));
}

static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_IS_SMALLER_SPEC_TMPVARCV_CONST_JMPZ_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;
	double d1, d2;

	op1 = EX_VAR(opline->op1.var);
	op2 = RT_CONSTANT(opline, opline->op2);
	if (1 && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST && IS_CONST == IS_CONST) {
		/* pass */
	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
			if (EXPECTED(Z_LVAL_P(op1) < Z_LVAL_P(op2))) {
is_smaller_true:
				ZEND_VM_SMART_BRANCH_TRUE_JMPZ();
			} else {
is_smaller_false:
				ZEND_VM_SMART_BRANCH_FALSE_JMPZ();
			}
		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
			d1 = (double)Z_LVAL_P(op1);
			d2 = Z_DVAL_P(op2);
			goto is_smaller_double;
		}
	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
			d1 = Z_DVAL_P(op1);
			d2 = Z_DVAL_P(op2);
is_smaller_double:
			if (d1 < d2) {
				goto is_smaller_true;
			} else {
				goto is_smaller_false;
			}
		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
			d1 = Z_DVAL_P(op1);
			d2 = (double)Z_LVAL_P(op2);
			goto is_smaller_double;
		}
	}
	ZEND_VM_DISPATCH_TO_HELPER(zend_is_smaller_helper_SPEC_TAILCALL(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_EX op1, op2));
}

static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_IS_SMALLER_SPEC_TMPVARCV_CONST_JMPNZ_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;
	double d1, d2;

	op1 = EX_VAR(opline->op1.var);
	op2 = RT_CONSTANT(opline, opline->op2);
	if (1 && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST && IS_CONST == IS_CONST) {
		/* pass */
	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
			if (EXPECTED(Z_LVAL_P(op1) < Z_LVAL_P(op2))) {
is_smaller_true:
				ZEND_VM_SMART_BRANCH_TRUE_JMPNZ();
			} else {
is_smaller_false:
				ZEND_VM_SMART_BRANCH_FALSE_JMPNZ();
			}
		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
			d1 = (double)Z_LVAL_P(op1);
			d2 = Z_DVAL_P(op2);
			goto is_smaller_double;
		}
	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
			d1 = Z_DVAL_P(op1);
			d2 = Z_DVAL_P(op2);
is_smaller_double:
			if (d1 < d2) {
				goto is_smaller_true;
			} else {
				goto is_smaller_false;
			}
		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
			d1 = Z_DVAL_P(op1);
			d2 = (double)Z_LVAL_P(op2);
			goto is_smaller_double;
		}
	}
	ZEND_VM_DISPATCH_TO_HELPER(zend_is_smaller_helper_SPEC_TAILCALL(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_EX op1, op2));
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_CONST_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;
	double d1, d2;

	op1 = EX_VAR(opline->op1.var);
	op2 = RT_CONSTANT(opline, opline->op2);
	if (1 && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST && IS_CONST == IS_CONST) {
		/* pass */
	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
			if (EXPECTED(Z_LVAL_P(op1) <= Z_LVAL_P(op2))) {
is_smaller_or_equal_true:
				ZEND_VM_SMART_BRANCH_TRUE_NONE();
				ZVAL_TRUE(EX_VAR(opline->result.var));
				ZEND_VM_NEXT_OPCODE();
			} else {
is_smaller_or_equal_false:
				ZEND_VM_SMART_BRANCH_FALSE_NONE();
				ZVAL_FALSE(EX_VAR(opline->result.var));
				ZEND_VM_NEXT_OPCODE();
			}
		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
			d1 = (double)Z_LVAL_P(op1);
			d2 = Z_DVAL_P(op2);
			goto is_smaller_or_equal_double;
		}
	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
			d1 = Z_DVAL_P(op1);
			d2 = Z_DVAL_P(op2);
is_smaller_or_equal_double:
			if (d1 <= d2) {
				goto is_smaller_or_equal_true;
			} else {
				goto is_smaller_or_equal_false;
			}
		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
			d1 = Z_DVAL_P(op1);
			d2 = (double)Z_LVAL_P(op2);
			goto is_smaller_or_equal_double;
		}
	}
	ZEND_VM_DISPATCH_TO_HELPER(zend_is_smaller_or_equal_helper_SPEC_TAILCALL(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_EX op1, op2));
}

static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_CONST_JMPZ_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;
	double d1, d2;

	op1 = EX_VAR(opline->op1.var);
	op2 = RT_CONSTANT(opline, opline->op2);
	if (1 && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST && IS_CONST == IS_CONST) {
		/* pass */
	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
			if (EXPECTED(Z_LVAL_P(op1) <= Z_LVAL_P(op2))) {
is_smaller_or_equal_true:
				ZEND_VM_SMART_BRANCH_TRUE_JMPZ();
				ZVAL_TRUE(EX_VAR(opline->result.var));
				ZEND_VM_NEXT_OPCODE();
			} else {
is_smaller_or_equal_false:
				ZEND_VM_SMART_BRANCH_FALSE_JMPZ();
				ZVAL_FALSE(EX_VAR(opline->result.var));
				ZEND_VM_NEXT_OPCODE();
			}
		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
			d1 = (double)Z_LVAL_P(op1);
			d2 = Z_DVAL_P(op2);
			goto is_smaller_or_equal_double;
		}
	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
			d1 = Z_DVAL_P(op1);
			d2 = Z_DVAL_P(op2);
is_smaller_or_equal_double:
			if (d1 <= d2) {
				goto is_smaller_or_equal_true;
			} else {
				goto is_smaller_or_equal_false;
			}
		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
			d1 = Z_DVAL_P(op1);
			d2 = (double)Z_LVAL_P(op2);
			goto is_smaller_or_equal_double;
		}
	}
	ZEND_VM_DISPATCH_TO_HELPER(zend_is_smaller_or_equal_helper_SPEC_TAILCALL(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_EX op1, op2));
}

static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_CONST_JMPNZ_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;
	double d1, d2;

	op1 = EX_VAR(opline->op1.var);
	op2 = RT_CONSTANT(opline, opline->op2);
	if (1 && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST && IS_CONST == IS_CONST) {
		/* pass */
	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
			if (EXPECTED(Z_LVAL_P(op1) <= Z_LVAL_P(op2))) {
is_smaller_or_equal_true:
				ZEND_VM_SMART_BRANCH_TRUE_JMPNZ();
				ZVAL_TRUE(EX_VAR(opline->result.var));
				ZEND_VM_NEXT_OPCODE();
			} else {
is_smaller_or_equal_false:
				ZEND_VM_SMART_BRANCH_FALSE_JMPNZ();
				ZVAL_FALSE(EX_VAR(opline->result.var));
				ZEND_VM_NEXT_OPCODE();
			}
		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
			d1 = (double)Z_LVAL_P(op1);
			d2 = Z_DVAL_P(op2);
			goto is_smaller_or_equal_double;
		}
	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
			d1 = Z_DVAL_P(op1);
			d2 = Z_DVAL_P(op2);
is_smaller_or_equal_double:
			if (d1 <= d2) {
				goto is_smaller_or_equal_true;
			} else {
				goto is_smaller_or_equal_false;
			}
		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
			d1 = Z_DVAL_P(op1);
			d2 = (double)Z_LVAL_P(op2);
			goto is_smaller_or_equal_double;
		}
	}
	ZEND_VM_DISPATCH_TO_HELPER(zend_is_smaller_or_equal_helper_SPEC_TAILCALL(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_EX op1, op2));
}

static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_BW_OR_SPEC_TMPVARCV_CONST_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;

	op1 = EX_VAR(opline->op1.var);
	op2 = RT_CONSTANT(opline, opline->op2);
	if (1 && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST && IS_CONST == IS_CONST) {
		/* pass */
	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)
			&& EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
		ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(op1) | Z_LVAL_P(op2));
		ZEND_VM_NEXT_OPCODE();
	}

	ZEND_VM_DISPATCH_TO_HELPER(zend_bw_or_helper_SPEC_TAILCALL(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_EX op1, op2));
}

static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_BW_AND_SPEC_TMPVARCV_CONST_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;

	op1 = EX_VAR(opline->op1.var);
	op2 = RT_CONSTANT(opline, opline->op2);
	if (1 && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST && IS_CONST == IS_CONST) {
		/* pass */
	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)
			&& EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
		ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(op1) & Z_LVAL_P(op2));
		ZEND_VM_NEXT_OPCODE();
	}

	ZEND_VM_DISPATCH_TO_HELPER(zend_bw_and_helper_SPEC_TAILCALL(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_EX op1, op2));
}

static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_BW_XOR_SPEC_TMPVARCV_CONST_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;

	op1 = EX_VAR(opline->op1.var);
	op2 = RT_CONSTANT(opline, opline->op2);
	if (1 && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST && IS_CONST == IS_CONST) {
		/* pass */
	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)
			&& EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
		ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(op1) ^ Z_LVAL_P(op2));
		ZEND_VM_NEXT_OPCODE();
	}

	ZEND_VM_DISPATCH_TO_HELPER(zend_bw_xor_helper_SPEC_TAILCALL(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_EX op1, op2));
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_FETCH_LIST_R_SPEC_TMPVARCV_CONST_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *container;

	SAVE_OPLINE();
	container = EX_VAR(opline->op1.var);
	zend_fetch_dimension_address_LIST_r(container, RT_CONSTANT(opline, opline->op2), IS_CONST OPLINE_CC EXECUTE_DATA_CC);


	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_SWITCH_LONG_SPEC_TMPVARCV_CONST_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op, *jump_zv;
	HashTable *jumptable;

	op = EX_VAR(opline->op1.var);

	if (Z_TYPE_P(op) != IS_LONG) {
		ZVAL_DEREF(op);
		if (Z_TYPE_P(op) != IS_LONG) {
			/* Wrong type, fall back to ZEND_CASE chain */
			ZEND_VM_NEXT_OPCODE();
		}
	}

	jumptable = Z_ARRVAL_P(RT_CONSTANT(opline, opline->op2));
	jump_zv = zend_hash_index_find(jumptable, Z_LVAL_P(op));
	if (jump_zv != NULL) {
		ZEND_VM_SET_RELATIVE_OPCODE(opline, Z_LVAL_P(jump_zv));
		ZEND_VM_CONTINUE();
	} else {
		/* default */
		ZEND_VM_SET_RELATIVE_OPCODE(opline, opline->extended_value);
		ZEND_VM_CONTINUE();
	}
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_SWITCH_STRING_SPEC_TMPVARCV_CONST_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op, *jump_zv;
	HashTable *jumptable;

	op = EX_VAR(opline->op1.var);

	if (Z_TYPE_P(op) != IS_STRING) {
		if ((IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST) {
			/* Wrong type, fall back to ZEND_CASE chain */
			ZEND_VM_NEXT_OPCODE();
		} else {
			ZVAL_DEREF(op);
			if (Z_TYPE_P(op) != IS_STRING) {
				/* Wrong type, fall back to ZEND_CASE chain */
				ZEND_VM_NEXT_OPCODE();
			}
		}
	}

	jumptable = Z_ARRVAL_P(RT_CONSTANT(opline, opline->op2));
	jump_zv = zend_hash_find_ex(jumptable, Z_STR_P(op), (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST);
	if (jump_zv != NULL) {
		ZEND_VM_SET_RELATIVE_OPCODE(opline, Z_LVAL_P(jump_zv));
		ZEND_VM_CONTINUE();
	} else {
		/* default */
		ZEND_VM_SET_RELATIVE_OPCODE(opline, opline->extended_value);
		ZEND_VM_CONTINUE();
	}
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_MATCH_SPEC_TMPVARCV_CONST_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op, *jump_zv;
	HashTable *jumptable;

	op = EX_VAR(opline->op1.var);
	jumptable = Z_ARRVAL_P(RT_CONSTANT(opline, opline->op2));

match_try_again:
	if (Z_TYPE_P(op) == IS_LONG) {
		jump_zv = zend_hash_index_find(jumptable, Z_LVAL_P(op));
	} else if (Z_TYPE_P(op) == IS_STRING) {
		jump_zv = zend_hash_find_ex(jumptable, Z_STR_P(op), (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST);
	} else if (Z_TYPE_P(op) == IS_REFERENCE) {
		op = Z_REFVAL_P(op);
		goto match_try_again;
	} else {
		if (UNEXPECTED(((IS_TMP_VAR|IS_VAR|IS_CV) & IS_CV) && Z_TYPE_P(op) == IS_UNDEF)) {
			SAVE_OPLINE();
			op = ZVAL_UNDEFINED_OP1();
			if (UNEXPECTED(EG(exception))) {
				HANDLE_EXCEPTION();
			}
			goto match_try_again;
		}

		goto default_branch;
	}

	if (jump_zv != NULL) {
		ZEND_VM_SET_RELATIVE_OPCODE(opline, Z_LVAL_P(jump_zv));
		ZEND_VM_CONTINUE();
	} else {
default_branch:
		/* default */
		ZEND_VM_SET_RELATIVE_OPCODE(opline, opline->extended_value);
		ZEND_VM_CONTINUE();
	}
}

static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_CONST_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2, *result;

	op1 = EX_VAR(opline->op1.var);
	op2 = RT_CONSTANT(opline, opline->op2);
	result = EX_VAR(opline->result.var);
	ZVAL_LONG(result, Z_LVAL_P(op1) + Z_LVAL_P(op2));
	ZEND_VM_NEXT_OPCODE();
}

static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_ADD_LONG_SPEC_TMPVARCV_CONST_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2, *result;

	op1 = EX_VAR(opline->op1.var);
	op2 = RT_CONSTANT(opline, opline->op2);
	result = EX_VAR(opline->result.var);
	fast_long_add_function(result, op1, op2);
	ZEND_VM_NEXT_OPCODE();
}

static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_ADD_DOUBLE_SPEC_TMPVARCV_CONST_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2, *result;

	op1 = EX_VAR(opline->op1.var);
	op2 = RT_CONSTANT(opline, opline->op2);
	result = EX_VAR(opline->result.var);
	ZVAL_DOUBLE(result, Z_DVAL_P(op1) + Z_DVAL_P(op2));
	ZEND_VM_NEXT_OPCODE();
}

static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_CONST_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2, *result;

	op1 = EX_VAR(opline->op1.var);
	op2 = RT_CONSTANT(opline, opline->op2);
	result = EX_VAR(opline->result.var);
	ZVAL_LONG(result, Z_LVAL_P(op1) - Z_LVAL_P(op2));
	ZEND_VM_NEXT_OPCODE();
}

static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_SUB_LONG_SPEC_TMPVARCV_CONST_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2, *result;

	op1 = EX_VAR(opline->op1.var);
	op2 = RT_CONSTANT(opline, opline->op2);
	result = EX_VAR(opline->result.var);
	fast_long_sub_function(result, op1, op2);
	ZEND_VM_NEXT_OPCODE();
}

static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_SUB_DOUBLE_SPEC_TMPVARCV_CONST_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2, *result;

	op1 = EX_VAR(opline->op1.var);
	op2 = RT_CONSTANT(opline, opline->op2);
	result = EX_VAR(opline->result.var);
	ZVAL_DOUBLE(result, Z_DVAL_P(op1) - Z_DVAL_P(op2));
	ZEND_VM_NEXT_OPCODE();
}

static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_CONST_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2, *result;

	op1 = EX_VAR(opline->op1.var);
	op2 = RT_CONSTANT(opline, opline->op2);
	result = EX_VAR(opline->result.var);
	ZVAL_LONG(result, Z_LVAL_P(op1) * Z_LVAL_P(op2));
	ZEND_VM_NEXT_OPCODE();
}

static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_MUL_LONG_SPEC_TMPVARCV_CONST_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2, *result;
	zend_long overflow;

	op1 = EX_VAR(opline->op1.var);
	op2 = RT_CONSTANT(opline, opline->op2);
	result = EX_VAR(opline->result.var);
	ZEND_SIGNED_MULTIPLY_LONG(Z_LVAL_P(op1), Z_LVAL_P(op2), Z_LVAL_P(result), Z_DVAL_P(result), overflow);
	Z_TYPE_INFO_P(result) = overflow ? IS_DOUBLE : IS_LONG;
	ZEND_VM_NEXT_OPCODE();
}

static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_MUL_DOUBLE_SPEC_TMPVARCV_CONST_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2, *result;

	op1 = EX_VAR(opline->op1.var);
	op2 = RT_CONSTANT(opline, opline->op2);
	result = EX_VAR(opline->result.var);
	ZVAL_DOUBLE(result, Z_DVAL_P(op1) * Z_DVAL_P(op2));
	ZEND_VM_NEXT_OPCODE();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_CONST_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;
	bool result;

	op1 = EX_VAR(opline->op1.var);
	op2 = RT_CONSTANT(opline, opline->op2);
	result = (Z_LVAL_P(op1) == Z_LVAL_P(op2));
	ZEND_VM_SMART_BRANCH_NONE(result, 0);
}

static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPZ_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;
	bool result;

	op1 = EX_VAR(opline->op1.var);
	op2 = RT_CONSTANT(opline, opline->op2);
	result = (Z_LVAL_P(op1) == Z_LVAL_P(op2));
	ZEND_VM_SMART_BRANCH_JMPZ(result, 0);
}

static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPNZ_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;
	bool result;

	op1 = EX_VAR(opline->op1.var);
	op2 = RT_CONSTANT(opline, opline->op2);
	result = (Z_LVAL_P(op1) == Z_LVAL_P(op2));
	ZEND_VM_SMART_BRANCH_JMPNZ(result, 0);
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;
	bool result;

	op1 = EX_VAR(opline->op1.var);
	op2 = RT_CONSTANT(opline, opline->op2);
	result = (Z_DVAL_P(op1) == Z_DVAL_P(op2));
	ZEND_VM_SMART_BRANCH_NONE(result, 0);
}

static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;
	bool result;

	op1 = EX_VAR(opline->op1.var);
	op2 = RT_CONSTANT(opline, opline->op2);
	result = (Z_DVAL_P(op1) == Z_DVAL_P(op2));
	ZEND_VM_SMART_BRANCH_JMPZ(result, 0);
}

static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;
	bool result;

	op1 = EX_VAR(opline->op1.var);
	op2 = RT_CONSTANT(opline, opline->op2);
	result = (Z_DVAL_P(op1) == Z_DVAL_P(op2));
	ZEND_VM_SMART_BRANCH_JMPNZ(result, 0);
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_CONST_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;
	bool result;

	op1 = EX_VAR(opline->op1.var);
	op2 = RT_CONSTANT(opline, opline->op2);
	result = (Z_LVAL_P(op1) != Z_LVAL_P(op2));
	ZEND_VM_SMART_BRANCH_NONE(result, 0);
}

static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPZ_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;
	bool result;

	op1 = EX_VAR(opline->op1.var);
	op2 = RT_CONSTANT(opline, opline->op2);
	result = (Z_LVAL_P(op1) != Z_LVAL_P(op2));
	ZEND_VM_SMART_BRANCH_JMPZ(result, 0);
}

static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPNZ_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;
	bool result;

	op1 = EX_VAR(opline->op1.var);
	op2 = RT_CONSTANT(opline, opline->op2);
	result = (Z_LVAL_P(op1) != Z_LVAL_P(op2));
	ZEND_VM_SMART_BRANCH_JMPNZ(result, 0);
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;
	bool result;

	op1 = EX_VAR(opline->op1.var);
	op2 = RT_CONSTANT(opline, opline->op2);
	result = (Z_DVAL_P(op1) != Z_DVAL_P(op2));
	ZEND_VM_SMART_BRANCH_NONE(result, 0);
}

static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;
	bool result;

	op1 = EX_VAR(opline->op1.var);
	op2 = RT_CONSTANT(opline, opline->op2);
	result = (Z_DVAL_P(op1) != Z_DVAL_P(op2));
	ZEND_VM_SMART_BRANCH_JMPZ(result, 0);
}

static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;
	bool result;

	op1 = EX_VAR(opline->op1.var);
	op2 = RT_CONSTANT(opline, opline->op2);
	result = (Z_DVAL_P(op1) != Z_DVAL_P(op2));
	ZEND_VM_SMART_BRANCH_JMPNZ(result, 0);
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_IS_IDENTICAL_EMPTY_ARRAY_SPEC_TMPVARCV_CONST_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1;
	bool result;

	op1 = _get_zval_ptr_tmpvarcv(opline->op1_type, opline->op1, BP_VAR_R EXECUTE_DATA_CC);
	result = Z_TYPE_P(op1) == IS_ARRAY && zend_hash_num_elements(Z_ARR_P(op1)) == 0;
	FREE_OP(opline->op1_type, opline->op1.var);


	ZEND_VM_SMART_BRANCH_NONE(result, 0);
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_IS_IDENTICAL_EMPTY_ARRAY_SPEC_TMPVARCV_CONST_JMPZ_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1;
	bool result;

	op1 = _get_zval_ptr_tmpvarcv(opline->op1_type, opline->op1, BP_VAR_R EXECUTE_DATA_CC);
	result = Z_TYPE_P(op1) == IS_ARRAY && zend_hash_num_elements(Z_ARR_P(op1)) == 0;
	FREE_OP(opline->op1_type, opline->op1.var);


	ZEND_VM_SMART_BRANCH_JMPZ(result, 0);
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_IS_IDENTICAL_EMPTY_ARRAY_SPEC_TMPVARCV_CONST_JMPNZ_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1;
	bool result;

	op1 = _get_zval_ptr_tmpvarcv(opline->op1_type, opline->op1, BP_VAR_R EXECUTE_DATA_CC);
	result = Z_TYPE_P(op1) == IS_ARRAY && zend_hash_num_elements(Z_ARR_P(op1)) == 0;
	FREE_OP(opline->op1_type, opline->op1.var);


	ZEND_VM_SMART_BRANCH_JMPNZ(result, 0);
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_IS_NOT_IDENTICAL_EMPTY_ARRAY_SPEC_TMPVARCV_CONST_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1;
	bool result;

	op1 = _get_zval_ptr_tmpvarcv(opline->op1_type, opline->op1, BP_VAR_R EXECUTE_DATA_CC);
	result = Z_TYPE_P(op1) != IS_ARRAY || zend_hash_num_elements(Z_ARR_P(op1)) > 0;
	FREE_OP(opline->op1_type, opline->op1.var);


	ZEND_VM_SMART_BRANCH_NONE(result, 0);
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_IS_NOT_IDENTICAL_EMPTY_ARRAY_SPEC_TMPVARCV_CONST_JMPZ_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1;
	bool result;

	op1 = _get_zval_ptr_tmpvarcv(opline->op1_type, opline->op1, BP_VAR_R EXECUTE_DATA_CC);
	result = Z_TYPE_P(op1) != IS_ARRAY || zend_hash_num_elements(Z_ARR_P(op1)) > 0;
	FREE_OP(opline->op1_type, opline->op1.var);


	ZEND_VM_SMART_BRANCH_JMPZ(result, 0);
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_IS_NOT_IDENTICAL_EMPTY_ARRAY_SPEC_TMPVARCV_CONST_JMPNZ_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1;
	bool result;

	op1 = _get_zval_ptr_tmpvarcv(opline->op1_type, opline->op1, BP_VAR_R EXECUTE_DATA_CC);
	result = Z_TYPE_P(op1) != IS_ARRAY || zend_hash_num_elements(Z_ARR_P(op1)) > 0;
	FREE_OP(opline->op1_type, opline->op1.var);


	ZEND_VM_SMART_BRANCH_JMPNZ(result, 0);
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;
	bool result;

	op1 = EX_VAR(opline->op1.var);
	op2 = RT_CONSTANT(opline, opline->op2);
	result = (Z_LVAL_P(op1) < Z_LVAL_P(op2));
	ZEND_VM_SMART_BRANCH_NONE(result, 0);
}

static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST_JMPZ_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;
	bool result;

	op1 = EX_VAR(opline->op1.var);
	op2 = RT_CONSTANT(opline, opline->op2);
	result = (Z_LVAL_P(op1) < Z_LVAL_P(op2));
	ZEND_VM_SMART_BRANCH_JMPZ(result, 0);
}

static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST_JMPNZ_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;
	bool result;

	op1 = EX_VAR(opline->op1.var);
	op2 = RT_CONSTANT(opline, opline->op2);
	result = (Z_LVAL_P(op1) < Z_LVAL_P(op2));
	ZEND_VM_SMART_BRANCH_JMPNZ(result, 0);
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;
	bool result;

	op1 = EX_VAR(opline->op1.var);
	op2 = RT_CONSTANT(opline, opline->op2);
	result = (Z_DVAL_P(op1) < Z_DVAL_P(op2));
	ZEND_VM_SMART_BRANCH_NONE(result, 0);
}

static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;
	bool result;

	op1 = EX_VAR(opline->op1.var);
	op2 = RT_CONSTANT(opline, opline->op2);
	result = (Z_DVAL_P(op1) < Z_DVAL_P(op2));
	ZEND_VM_SMART_BRANCH_JMPZ(result, 0);
}

static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;
	bool result;

	op1 = EX_VAR(opline->op1.var);
	op2 = RT_CONSTANT(opline, opline->op2);
	result = (Z_DVAL_P(op1) < Z_DVAL_P(op2));
	ZEND_VM_SMART_BRANCH_JMPNZ(result, 0);
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;
	bool result;

	op1 = EX_VAR(opline->op1.var);
	op2 = RT_CONSTANT(opline, opline->op2);
	result = (Z_LVAL_P(op1) <= Z_LVAL_P(op2));
	ZEND_VM_SMART_BRANCH_NONE(result, 0);
}

static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPZ_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;
	bool result;

	op1 = EX_VAR(opline->op1.var);
	op2 = RT_CONSTANT(opline, opline->op2);
	result = (Z_LVAL_P(op1) <= Z_LVAL_P(op2));
	ZEND_VM_SMART_BRANCH_JMPZ(result, 0);
}

static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPNZ_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;
	bool result;

	op1 = EX_VAR(opline->op1.var);
	op2 = RT_CONSTANT(opline, opline->op2);
	result = (Z_LVAL_P(op1) <= Z_LVAL_P(op2));
	ZEND_VM_SMART_BRANCH_JMPNZ(result, 0);
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;
	bool result;

	op1 = EX_VAR(opline->op1.var);
	op2 = RT_CONSTANT(opline, opline->op2);
	result = (Z_DVAL_P(op1) <= Z_DVAL_P(op2));
	ZEND_VM_SMART_BRANCH_NONE(result, 0);
}

static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;
	bool result;

	op1 = EX_VAR(opline->op1.var);
	op2 = RT_CONSTANT(opline, opline->op2);
	result = (Z_DVAL_P(op1) <= Z_DVAL_P(op2));
	ZEND_VM_SMART_BRANCH_JMPZ(result, 0);
}

static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;
	bool result;

	op1 = EX_VAR(opline->op1.var);
	op2 = RT_CONSTANT(opline, opline->op2);
	result = (Z_DVAL_P(op1) <= Z_DVAL_P(op2));
	ZEND_VM_SMART_BRANCH_JMPNZ(result, 0);
}

static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_ADD_SPEC_TMPVARCV_TMPVARCV_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2, *result;
	double d1, d2;

	op1 = EX_VAR(opline->op1.var);
	op2 = EX_VAR(opline->op2.var);
	if (1 && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST) {
		/* pass */
	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
			result = EX_VAR(opline->result.var);
			fast_long_add_function(result, op1, op2);
			ZEND_VM_NEXT_OPCODE();
		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
			d1 = (double)Z_LVAL_P(op1);
			d2 = Z_DVAL_P(op2);
			goto add_double;
		}
	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
			d1 = Z_DVAL_P(op1);
			d2 = Z_DVAL_P(op2);
add_double:
			result = EX_VAR(opline->result.var);
			ZVAL_DOUBLE(result, d1 + d2);
			ZEND_VM_NEXT_OPCODE();
		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
			d1 = Z_DVAL_P(op1);
			d2 = (double)Z_LVAL_P(op2);
			goto add_double;
		}
	}

	ZEND_VM_DISPATCH_TO_HELPER(zend_add_helper_SPEC_TAILCALL(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_EX op1, op2));
}

static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_SUB_SPEC_TMPVARCV_TMPVARCV_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2, *result;
	double d1, d2;

	op1 = EX_VAR(opline->op1.var);
	op2 = EX_VAR(opline->op2.var);
	if (1 && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST) {
		/* pass */
	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
			result = EX_VAR(opline->result.var);
			fast_long_sub_function(result, op1, op2);
			ZEND_VM_NEXT_OPCODE();
		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
			d1 = (double)Z_LVAL_P(op1);
			d2 = Z_DVAL_P(op2);
			goto sub_double;
		}
	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
			d1 = Z_DVAL_P(op1);
			d2 = Z_DVAL_P(op2);
sub_double:
			result = EX_VAR(opline->result.var);
			ZVAL_DOUBLE(result, d1 - d2);
			ZEND_VM_NEXT_OPCODE();
		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
			d1 = Z_DVAL_P(op1);
			d2 = (double)Z_LVAL_P(op2);
			goto sub_double;
		}
	}

	ZEND_VM_DISPATCH_TO_HELPER(zend_sub_helper_SPEC_TAILCALL(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_EX op1, op2));
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_MUL_SPEC_TMPVARCV_TMPVARCV_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2, *result;
	double d1, d2;

	op1 = EX_VAR(opline->op1.var);
	op2 = EX_VAR(opline->op2.var);
	if (1 && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST) {
		/* pass */
	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
			zend_long overflow;

			result = EX_VAR(opline->result.var);
			ZEND_SIGNED_MULTIPLY_LONG(Z_LVAL_P(op1), Z_LVAL_P(op2), Z_LVAL_P(result), Z_DVAL_P(result), overflow);
			Z_TYPE_INFO_P(result) = overflow ? IS_DOUBLE : IS_LONG;
			ZEND_VM_NEXT_OPCODE();
		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
			d1 = (double)Z_LVAL_P(op1);
			d2 = Z_DVAL_P(op2);
			goto mul_double;
		}
	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
			d1 = Z_DVAL_P(op1);
			d2 = Z_DVAL_P(op2);
mul_double:
			result = EX_VAR(opline->result.var);
			ZVAL_DOUBLE(result, d1 * d2);
			ZEND_VM_NEXT_OPCODE();
		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
			d1 = Z_DVAL_P(op1);
			d2 = (double)Z_LVAL_P(op2);
			goto mul_double;
		}
	}

	ZEND_VM_DISPATCH_TO_HELPER(zend_mul_helper_SPEC_TAILCALL(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_EX op1, op2));
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_MOD_SPEC_TMPVARCV_TMPVARCV_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2, *result;

	op1 = EX_VAR(opline->op1.var);
	op2 = EX_VAR(opline->op2.var);
	if (1 && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST) {
		/* pass */
	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
			result = EX_VAR(opline->result.var);
			if (UNEXPECTED(Z_LVAL_P(op2) == 0)) {
				ZEND_VM_TAIL_CALL(zend_mod_by_zero_helper_SPEC_TAILCALL(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
			} else if (UNEXPECTED(Z_LVAL_P(op2) == -1)) {
				/* Prevent overflow error/crash if op1==ZEND_LONG_MIN */
				ZVAL_LONG(result, 0);
			} else {
				ZVAL_LONG(result, Z_LVAL_P(op1) % Z_LVAL_P(op2));
			}
			ZEND_VM_NEXT_OPCODE();
		}
	}

	ZEND_VM_DISPATCH_TO_HELPER(zend_mod_helper_SPEC_TAILCALL(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_EX op1, op2));
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_SL_SPEC_TMPVARCV_TMPVARCV_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;

	op1 = EX_VAR(opline->op1.var);
	op2 = EX_VAR(opline->op2.var);
	if (1 && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST) {
		/* pass */
	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)
			&& EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)
			&& EXPECTED((zend_ulong)Z_LVAL_P(op2) < SIZEOF_ZEND_LONG * 8)) {
		/* Perform shift on unsigned numbers to get well-defined wrap behavior. */
		ZVAL_LONG(EX_VAR(opline->result.var),
			(zend_long) ((zend_ulong) Z_LVAL_P(op1) << Z_LVAL_P(op2)));
		ZEND_VM_NEXT_OPCODE();
	}

	ZEND_VM_DISPATCH_TO_HELPER(zend_shift_left_helper_SPEC_TAILCALL(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_EX op1, op2));
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_SR_SPEC_TMPVARCV_TMPVARCV_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;

	op1 = EX_VAR(opline->op1.var);
	op2 = EX_VAR(opline->op2.var);
	if (1 && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST) {
		/* pass */
	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)
			&& EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)
			&& EXPECTED((zend_ulong)Z_LVAL_P(op2) < SIZEOF_ZEND_LONG * 8)) {
		ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(op1) >> Z_LVAL_P(op2));
		ZEND_VM_NEXT_OPCODE();
	}

	ZEND_VM_DISPATCH_TO_HELPER(zend_shift_right_helper_SPEC_TAILCALL(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_EX op1, op2));
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;
	double d1, d2;

	op1 = EX_VAR(opline->op1.var);
	op2 = EX_VAR(opline->op2.var);
	if (1 && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST) {
		/* pass */
	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
			if (EXPECTED(Z_LVAL_P(op1) < Z_LVAL_P(op2))) {
is_smaller_true:
				ZEND_VM_SMART_BRANCH_TRUE_NONE();
			} else {
is_smaller_false:
				ZEND_VM_SMART_BRANCH_FALSE_NONE();
			}
		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
			d1 = (double)Z_LVAL_P(op1);
			d2 = Z_DVAL_P(op2);
			goto is_smaller_double;
		}
	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
			d1 = Z_DVAL_P(op1);
			d2 = Z_DVAL_P(op2);
is_smaller_double:
			if (d1 < d2) {
				goto is_smaller_true;
			} else {
				goto is_smaller_false;
			}
		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
			d1 = Z_DVAL_P(op1);
			d2 = (double)Z_LVAL_P(op2);
			goto is_smaller_double;
		}
	}
	ZEND_VM_DISPATCH_TO_HELPER(zend_is_smaller_helper_SPEC_TAILCALL(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_EX op1, op2));
}

static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_JMPZ_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;
	double d1, d2;

	op1 = EX_VAR(opline->op1.var);
	op2 = EX_VAR(opline->op2.var);
	if (1 && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST) {
		/* pass */
	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
			if (EXPECTED(Z_LVAL_P(op1) < Z_LVAL_P(op2))) {
is_smaller_true:
				ZEND_VM_SMART_BRANCH_TRUE_JMPZ();
			} else {
is_smaller_false:
				ZEND_VM_SMART_BRANCH_FALSE_JMPZ();
			}
		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
			d1 = (double)Z_LVAL_P(op1);
			d2 = Z_DVAL_P(op2);
			goto is_smaller_double;
		}
	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
			d1 = Z_DVAL_P(op1);
			d2 = Z_DVAL_P(op2);
is_smaller_double:
			if (d1 < d2) {
				goto is_smaller_true;
			} else {
				goto is_smaller_false;
			}
		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
			d1 = Z_DVAL_P(op1);
			d2 = (double)Z_LVAL_P(op2);
			goto is_smaller_double;
		}
	}
	ZEND_VM_DISPATCH_TO_HELPER(zend_is_smaller_helper_SPEC_TAILCALL(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_EX op1, op2));
}

static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_JMPNZ_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;
	double d1, d2;

	op1 = EX_VAR(opline->op1.var);
	op2 = EX_VAR(opline->op2.var);
	if (1 && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST) {
		/* pass */
	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
			if (EXPECTED(Z_LVAL_P(op1) < Z_LVAL_P(op2))) {
is_smaller_true:
				ZEND_VM_SMART_BRANCH_TRUE_JMPNZ();
			} else {
is_smaller_false:
				ZEND_VM_SMART_BRANCH_FALSE_JMPNZ();
			}
		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
			d1 = (double)Z_LVAL_P(op1);
			d2 = Z_DVAL_P(op2);
			goto is_smaller_double;
		}
	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
			d1 = Z_DVAL_P(op1);
			d2 = Z_DVAL_P(op2);
is_smaller_double:
			if (d1 < d2) {
				goto is_smaller_true;
			} else {
				goto is_smaller_false;
			}
		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
			d1 = Z_DVAL_P(op1);
			d2 = (double)Z_LVAL_P(op2);
			goto is_smaller_double;
		}
	}
	ZEND_VM_DISPATCH_TO_HELPER(zend_is_smaller_helper_SPEC_TAILCALL(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_EX op1, op2));
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;
	double d1, d2;

	op1 = EX_VAR(opline->op1.var);
	op2 = EX_VAR(opline->op2.var);
	if (1 && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST) {
		/* pass */
	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
			if (EXPECTED(Z_LVAL_P(op1) <= Z_LVAL_P(op2))) {
is_smaller_or_equal_true:
				ZEND_VM_SMART_BRANCH_TRUE_NONE();
				ZVAL_TRUE(EX_VAR(opline->result.var));
				ZEND_VM_NEXT_OPCODE();
			} else {
is_smaller_or_equal_false:
				ZEND_VM_SMART_BRANCH_FALSE_NONE();
				ZVAL_FALSE(EX_VAR(opline->result.var));
				ZEND_VM_NEXT_OPCODE();
			}
		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
			d1 = (double)Z_LVAL_P(op1);
			d2 = Z_DVAL_P(op2);
			goto is_smaller_or_equal_double;
		}
	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
			d1 = Z_DVAL_P(op1);
			d2 = Z_DVAL_P(op2);
is_smaller_or_equal_double:
			if (d1 <= d2) {
				goto is_smaller_or_equal_true;
			} else {
				goto is_smaller_or_equal_false;
			}
		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
			d1 = Z_DVAL_P(op1);
			d2 = (double)Z_LVAL_P(op2);
			goto is_smaller_or_equal_double;
		}
	}
	ZEND_VM_DISPATCH_TO_HELPER(zend_is_smaller_or_equal_helper_SPEC_TAILCALL(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_EX op1, op2));
}

static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_JMPZ_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;
	double d1, d2;

	op1 = EX_VAR(opline->op1.var);
	op2 = EX_VAR(opline->op2.var);
	if (1 && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST) {
		/* pass */
	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
			if (EXPECTED(Z_LVAL_P(op1) <= Z_LVAL_P(op2))) {
is_smaller_or_equal_true:
				ZEND_VM_SMART_BRANCH_TRUE_JMPZ();
				ZVAL_TRUE(EX_VAR(opline->result.var));
				ZEND_VM_NEXT_OPCODE();
			} else {
is_smaller_or_equal_false:
				ZEND_VM_SMART_BRANCH_FALSE_JMPZ();
				ZVAL_FALSE(EX_VAR(opline->result.var));
				ZEND_VM_NEXT_OPCODE();
			}
		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
			d1 = (double)Z_LVAL_P(op1);
			d2 = Z_DVAL_P(op2);
			goto is_smaller_or_equal_double;
		}
	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
			d1 = Z_DVAL_P(op1);
			d2 = Z_DVAL_P(op2);
is_smaller_or_equal_double:
			if (d1 <= d2) {
				goto is_smaller_or_equal_true;
			} else {
				goto is_smaller_or_equal_false;
			}
		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
			d1 = Z_DVAL_P(op1);
			d2 = (double)Z_LVAL_P(op2);
			goto is_smaller_or_equal_double;
		}
	}
	ZEND_VM_DISPATCH_TO_HELPER(zend_is_smaller_or_equal_helper_SPEC_TAILCALL(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_EX op1, op2));
}

static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_JMPNZ_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;
	double d1, d2;

	op1 = EX_VAR(opline->op1.var);
	op2 = EX_VAR(opline->op2.var);
	if (1 && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST) {
		/* pass */
	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
			if (EXPECTED(Z_LVAL_P(op1) <= Z_LVAL_P(op2))) {
is_smaller_or_equal_true:
				ZEND_VM_SMART_BRANCH_TRUE_JMPNZ();
				ZVAL_TRUE(EX_VAR(opline->result.var));
				ZEND_VM_NEXT_OPCODE();
			} else {
is_smaller_or_equal_false:
				ZEND_VM_SMART_BRANCH_FALSE_JMPNZ();
				ZVAL_FALSE(EX_VAR(opline->result.var));
				ZEND_VM_NEXT_OPCODE();
			}
		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
			d1 = (double)Z_LVAL_P(op1);
			d2 = Z_DVAL_P(op2);
			goto is_smaller_or_equal_double;
		}
	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
			d1 = Z_DVAL_P(op1);
			d2 = Z_DVAL_P(op2);
is_smaller_or_equal_double:
			if (d1 <= d2) {
				goto is_smaller_or_equal_true;
			} else {
				goto is_smaller_or_equal_false;
			}
		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
			d1 = Z_DVAL_P(op1);
			d2 = (double)Z_LVAL_P(op2);
			goto is_smaller_or_equal_double;
		}
	}
	ZEND_VM_DISPATCH_TO_HELPER(zend_is_smaller_or_equal_helper_SPEC_TAILCALL(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_EX op1, op2));
}

static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_BW_OR_SPEC_TMPVARCV_TMPVARCV_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;

	op1 = EX_VAR(opline->op1.var);
	op2 = EX_VAR(opline->op2.var);
	if (1 && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST) {
		/* pass */
	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)
			&& EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
		ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(op1) | Z_LVAL_P(op2));
		ZEND_VM_NEXT_OPCODE();
	}

	ZEND_VM_DISPATCH_TO_HELPER(zend_bw_or_helper_SPEC_TAILCALL(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_EX op1, op2));
}

static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_BW_AND_SPEC_TMPVARCV_TMPVARCV_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;

	op1 = EX_VAR(opline->op1.var);
	op2 = EX_VAR(opline->op2.var);
	if (1 && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST) {
		/* pass */
	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)
			&& EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
		ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(op1) & Z_LVAL_P(op2));
		ZEND_VM_NEXT_OPCODE();
	}

	ZEND_VM_DISPATCH_TO_HELPER(zend_bw_and_helper_SPEC_TAILCALL(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_EX op1, op2));
}

static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_BW_XOR_SPEC_TMPVARCV_TMPVARCV_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;

	op1 = EX_VAR(opline->op1.var);
	op2 = EX_VAR(opline->op2.var);
	if (1 && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST) {
		/* pass */
	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)
			&& EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
		ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(op1) ^ Z_LVAL_P(op2));
		ZEND_VM_NEXT_OPCODE();
	}

	ZEND_VM_DISPATCH_TO_HELPER(zend_bw_xor_helper_SPEC_TAILCALL(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_EX op1, op2));
}

static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2, *result;

	op1 = EX_VAR(opline->op1.var);
	op2 = EX_VAR(opline->op2.var);
	result = EX_VAR(opline->result.var);
	ZVAL_LONG(result, Z_LVAL_P(op1) + Z_LVAL_P(op2));
	ZEND_VM_NEXT_OPCODE();
}

static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_ADD_LONG_SPEC_TMPVARCV_TMPVARCV_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2, *result;

	op1 = EX_VAR(opline->op1.var);
	op2 = EX_VAR(opline->op2.var);
	result = EX_VAR(opline->result.var);
	fast_long_add_function(result, op1, op2);
	ZEND_VM_NEXT_OPCODE();
}

static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_ADD_DOUBLE_SPEC_TMPVARCV_TMPVARCV_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2, *result;

	op1 = EX_VAR(opline->op1.var);
	op2 = EX_VAR(opline->op2.var);
	result = EX_VAR(opline->result.var);
	ZVAL_DOUBLE(result, Z_DVAL_P(op1) + Z_DVAL_P(op2));
	ZEND_VM_NEXT_OPCODE();
}

static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2, *result;

	op1 = EX_VAR(opline->op1.var);
	op2 = EX_VAR(opline->op2.var);
	result = EX_VAR(opline->result.var);
	ZVAL_LONG(result, Z_LVAL_P(op1) - Z_LVAL_P(op2));
	ZEND_VM_NEXT_OPCODE();
}

static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_SUB_LONG_SPEC_TMPVARCV_TMPVARCV_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2, *result;

	op1 = EX_VAR(opline->op1.var);
	op2 = EX_VAR(opline->op2.var);
	result = EX_VAR(opline->result.var);
	fast_long_sub_function(result, op1, op2);
	ZEND_VM_NEXT_OPCODE();
}

static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_SUB_DOUBLE_SPEC_TMPVARCV_TMPVARCV_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2, *result;

	op1 = EX_VAR(opline->op1.var);
	op2 = EX_VAR(opline->op2.var);
	result = EX_VAR(opline->result.var);
	ZVAL_DOUBLE(result, Z_DVAL_P(op1) - Z_DVAL_P(op2));
	ZEND_VM_NEXT_OPCODE();
}

static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2, *result;

	op1 = EX_VAR(opline->op1.var);
	op2 = EX_VAR(opline->op2.var);
	result = EX_VAR(opline->result.var);
	ZVAL_LONG(result, Z_LVAL_P(op1) * Z_LVAL_P(op2));
	ZEND_VM_NEXT_OPCODE();
}

static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_MUL_LONG_SPEC_TMPVARCV_TMPVARCV_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2, *result;
	zend_long overflow;

	op1 = EX_VAR(opline->op1.var);
	op2 = EX_VAR(opline->op2.var);
	result = EX_VAR(opline->result.var);
	ZEND_SIGNED_MULTIPLY_LONG(Z_LVAL_P(op1), Z_LVAL_P(op2), Z_LVAL_P(result), Z_DVAL_P(result), overflow);
	Z_TYPE_INFO_P(result) = overflow ? IS_DOUBLE : IS_LONG;
	ZEND_VM_NEXT_OPCODE();
}

static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_MUL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2, *result;

	op1 = EX_VAR(opline->op1.var);
	op2 = EX_VAR(opline->op2.var);
	result = EX_VAR(opline->result.var);
	ZVAL_DOUBLE(result, Z_DVAL_P(op1) * Z_DVAL_P(op2));
	ZEND_VM_NEXT_OPCODE();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;
	bool result;

	op1 = EX_VAR(opline->op1.var);
	op2 = EX_VAR(opline->op2.var);
	result = (Z_LVAL_P(op1) == Z_LVAL_P(op2));
	ZEND_VM_SMART_BRANCH_NONE(result, 0);
}

static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;
	bool result;

	op1 = EX_VAR(opline->op1.var);
	op2 = EX_VAR(opline->op2.var);
	result = (Z_LVAL_P(op1) == Z_LVAL_P(op2));
	ZEND_VM_SMART_BRANCH_JMPZ(result, 0);
}

static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;
	bool result;

	op1 = EX_VAR(opline->op1.var);
	op2 = EX_VAR(opline->op2.var);
	result = (Z_LVAL_P(op1) == Z_LVAL_P(op2));
	ZEND_VM_SMART_BRANCH_JMPNZ(result, 0);
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;
	bool result;

	op1 = EX_VAR(opline->op1.var);
	op2 = EX_VAR(opline->op2.var);
	result = (Z_DVAL_P(op1) == Z_DVAL_P(op2));
	ZEND_VM_SMART_BRANCH_NONE(result, 0);
}

static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;
	bool result;

	op1 = EX_VAR(opline->op1.var);
	op2 = EX_VAR(opline->op2.var);
	result = (Z_DVAL_P(op1) == Z_DVAL_P(op2));
	ZEND_VM_SMART_BRANCH_JMPZ(result, 0);
}

static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;
	bool result;

	op1 = EX_VAR(opline->op1.var);
	op2 = EX_VAR(opline->op2.var);
	result = (Z_DVAL_P(op1) == Z_DVAL_P(op2));
	ZEND_VM_SMART_BRANCH_JMPNZ(result, 0);
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;
	bool result;

	op1 = EX_VAR(opline->op1.var);
	op2 = EX_VAR(opline->op2.var);
	result = (Z_LVAL_P(op1) != Z_LVAL_P(op2));
	ZEND_VM_SMART_BRANCH_NONE(result, 0);
}

static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;
	bool result;

	op1 = EX_VAR(opline->op1.var);
	op2 = EX_VAR(opline->op2.var);
	result = (Z_LVAL_P(op1) != Z_LVAL_P(op2));
	ZEND_VM_SMART_BRANCH_JMPZ(result, 0);
}

static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;
	bool result;

	op1 = EX_VAR(opline->op1.var);
	op2 = EX_VAR(opline->op2.var);
	result = (Z_LVAL_P(op1) != Z_LVAL_P(op2));
	ZEND_VM_SMART_BRANCH_JMPNZ(result, 0);
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;
	bool result;

	op1 = EX_VAR(opline->op1.var);
	op2 = EX_VAR(opline->op2.var);
	result = (Z_DVAL_P(op1) != Z_DVAL_P(op2));
	ZEND_VM_SMART_BRANCH_NONE(result, 0);
}

static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;
	bool result;

	op1 = EX_VAR(opline->op1.var);
	op2 = EX_VAR(opline->op2.var);
	result = (Z_DVAL_P(op1) != Z_DVAL_P(op2));
	ZEND_VM_SMART_BRANCH_JMPZ(result, 0);
}

static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;
	bool result;

	op1 = EX_VAR(opline->op1.var);
	op2 = EX_VAR(opline->op2.var);
	result = (Z_DVAL_P(op1) != Z_DVAL_P(op2));
	ZEND_VM_SMART_BRANCH_JMPNZ(result, 0);
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;
	bool result;

	op1 = EX_VAR(opline->op1.var);
	op2 = EX_VAR(opline->op2.var);
	result = (Z_LVAL_P(op1) < Z_LVAL_P(op2));
	ZEND_VM_SMART_BRANCH_NONE(result, 0);
}

static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;
	bool result;

	op1 = EX_VAR(opline->op1.var);
	op2 = EX_VAR(opline->op2.var);
	result = (Z_LVAL_P(op1) < Z_LVAL_P(op2));
	ZEND_VM_SMART_BRANCH_JMPZ(result, 0);
}

static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;
	bool result;

	op1 = EX_VAR(opline->op1.var);
	op2 = EX_VAR(opline->op2.var);
	result = (Z_LVAL_P(op1) < Z_LVAL_P(op2));
	ZEND_VM_SMART_BRANCH_JMPNZ(result, 0);
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;
	bool result;

	op1 = EX_VAR(opline->op1.var);
	op2 = EX_VAR(opline->op2.var);
	result = (Z_DVAL_P(op1) < Z_DVAL_P(op2));
	ZEND_VM_SMART_BRANCH_NONE(result, 0);
}

static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;
	bool result;

	op1 = EX_VAR(opline->op1.var);
	op2 = EX_VAR(opline->op2.var);
	result = (Z_DVAL_P(op1) < Z_DVAL_P(op2));
	ZEND_VM_SMART_BRANCH_JMPZ(result, 0);
}

static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;
	bool result;

	op1 = EX_VAR(opline->op1.var);
	op2 = EX_VAR(opline->op2.var);
	result = (Z_DVAL_P(op1) < Z_DVAL_P(op2));
	ZEND_VM_SMART_BRANCH_JMPNZ(result, 0);
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;
	bool result;

	op1 = EX_VAR(opline->op1.var);
	op2 = EX_VAR(opline->op2.var);
	result = (Z_LVAL_P(op1) <= Z_LVAL_P(op2));
	ZEND_VM_SMART_BRANCH_NONE(result, 0);
}

static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;
	bool result;

	op1 = EX_VAR(opline->op1.var);
	op2 = EX_VAR(opline->op2.var);
	result = (Z_LVAL_P(op1) <= Z_LVAL_P(op2));
	ZEND_VM_SMART_BRANCH_JMPZ(result, 0);
}

static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;
	bool result;

	op1 = EX_VAR(opline->op1.var);
	op2 = EX_VAR(opline->op2.var);
	result = (Z_LVAL_P(op1) <= Z_LVAL_P(op2));
	ZEND_VM_SMART_BRANCH_JMPNZ(result, 0);
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;
	bool result;

	op1 = EX_VAR(opline->op1.var);
	op2 = EX_VAR(opline->op2.var);
	result = (Z_DVAL_P(op1) <= Z_DVAL_P(op2));
	ZEND_VM_SMART_BRANCH_NONE(result, 0);
}

static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;
	bool result;

	op1 = EX_VAR(opline->op1.var);
	op2 = EX_VAR(opline->op2.var);
	result = (Z_DVAL_P(op1) <= Z_DVAL_P(op2));
	ZEND_VM_SMART_BRANCH_JMPZ(result, 0);
}

static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;
	bool result;

	op1 = EX_VAR(opline->op1.var);
	op2 = EX_VAR(opline->op2.var);
	result = (Z_DVAL_P(op1) <= Z_DVAL_P(op2));
	ZEND_VM_SMART_BRANCH_JMPNZ(result, 0);
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_FETCH_LIST_R_SPEC_TMPVARCV_TMPVAR_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *container;

	SAVE_OPLINE();
	container = EX_VAR(opline->op1.var);
	zend_fetch_dimension_address_LIST_r(container, _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC), (IS_TMP_VAR|IS_VAR) OPLINE_CC EXECUTE_DATA_CC);
	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_MATCH_ERROR_SPEC_TMPVARCV_UNUSED_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op;

	SAVE_OPLINE();
	op = EX_VAR(opline->op1.var);
	zend_match_unhandled_error(op);
	HANDLE_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_FETCH_LIST_R_SPEC_TMPVARCV_CV_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *container;

	SAVE_OPLINE();
	container = EX_VAR(opline->op1.var);
	zend_fetch_dimension_address_LIST_r(container, EX_VAR(opline->op2.var), IS_CV OPLINE_CC EXECUTE_DATA_CC);


	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_BOOL_NOT_SPEC_TMPVAR_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *val;

	val = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
	if (Z_TYPE_INFO_P(val) == IS_TRUE) {
		ZVAL_FALSE(EX_VAR(opline->result.var));
	} else if (EXPECTED(Z_TYPE_INFO_P(val) <= IS_TRUE)) {
		/* The result and op1 can be the same cv zval */
		const uint32_t orig_val_type = Z_TYPE_INFO_P(val);
		ZVAL_TRUE(EX_VAR(opline->result.var));
		if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(orig_val_type == IS_UNDEF)) {
			SAVE_OPLINE();
			ZVAL_UNDEFINED_OP1();
			ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
		}
	} else {
		SAVE_OPLINE();
		ZVAL_BOOL(EX_VAR(opline->result.var), !i_zend_is_true(val));
		zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
	}
	ZEND_VM_NEXT_OPCODE();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_ECHO_SPEC_TMPVAR_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *z;

	SAVE_OPLINE();
	z = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);

	if (Z_TYPE_P(z) == IS_STRING) {
		zend_string *str = Z_STR_P(z);

		if (ZSTR_LEN(str) != 0) {
			zend_write(ZSTR_VAL(str), ZSTR_LEN(str));
		}
	} else {
		zend_string *str = zval_get_string_func(z);

		if (ZSTR_LEN(str) != 0) {
			zend_write(ZSTR_VAL(str), ZSTR_LEN(str));
		} else if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(z) == IS_UNDEF)) {
			ZVAL_UNDEFINED_OP1();
		}
		zend_string_release_ex(str, 0);
	}

	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_JMPZ_SPEC_TMPVAR_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *val;
	uint8_t op1_type;

	val = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);

	if (Z_TYPE_INFO_P(val) == IS_TRUE) {
		ZEND_VM_NEXT_OPCODE();
	} else if (EXPECTED(Z_TYPE_INFO_P(val) <= IS_TRUE)) {
		if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(val) == IS_UNDEF)) {
			SAVE_OPLINE();
			ZVAL_UNDEFINED_OP1();
			if (UNEXPECTED(EG(exception))) {
				HANDLE_EXCEPTION();
			}
		}
		ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0);
	}

	SAVE_OPLINE();
	op1_type = (IS_TMP_VAR|IS_VAR);
	if (i_zend_is_true(val)) {
		opline++;
	} else {
		opline = OP_JMP_ADDR(opline, opline->op2);
	}
	if (op1_type & (IS_TMP_VAR|IS_VAR)) {
		zval_ptr_dtor_nogc(val);
	}
	ZEND_VM_JMP(opline);
}

static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_JMPNZ_SPEC_TMPVAR_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *val;
	uint8_t op1_type;

	val = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);

	if (Z_TYPE_INFO_P(val) == IS_TRUE) {
		ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0);
	} else if (EXPECTED(Z_TYPE_INFO_P(val) <= IS_TRUE)) {
		if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(val) == IS_UNDEF)) {
			SAVE_OPLINE();
			ZVAL_UNDEFINED_OP1();
			if (UNEXPECTED(EG(exception))) {
				HANDLE_EXCEPTION();
			}
		}
		ZEND_VM_NEXT_OPCODE();
	}

	SAVE_OPLINE();
	op1_type = (IS_TMP_VAR|IS_VAR);
	if (i_zend_is_true(val)) {
		opline = OP_JMP_ADDR(opline, opline->op2);
	} else {
		opline++;
	}
	if (op1_type & (IS_TMP_VAR|IS_VAR)) {
		zval_ptr_dtor_nogc(val);
	}
	ZEND_VM_JMP(opline);
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_JMPZ_EX_SPEC_TMPVAR_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *val;
	bool ret;

	val = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);

	if (Z_TYPE_INFO_P(val) == IS_TRUE) {
		ZVAL_TRUE(EX_VAR(opline->result.var));
		ZEND_VM_NEXT_OPCODE();
	} else if (EXPECTED(Z_TYPE_INFO_P(val) <= IS_TRUE)) {
		ZVAL_FALSE(EX_VAR(opline->result.var));
		if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(val) == IS_UNDEF)) {
			SAVE_OPLINE();
			ZVAL_UNDEFINED_OP1();
			if (UNEXPECTED(EG(exception))) {
				HANDLE_EXCEPTION();
			}
		}
		ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0);
	}

	SAVE_OPLINE();
	ret = i_zend_is_true(val);
	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
	if (ret) {
		ZVAL_TRUE(EX_VAR(opline->result.var));
		opline++;
	} else {
		ZVAL_FALSE(EX_VAR(opline->result.var));
		opline = OP_JMP_ADDR(opline, opline->op2);
	}
	ZEND_VM_JMP(opline);
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_JMPNZ_EX_SPEC_TMPVAR_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *val;
	bool ret;

	val = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);

	if (Z_TYPE_INFO_P(val) == IS_TRUE) {
		ZVAL_TRUE(EX_VAR(opline->result.var));
		ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0);
	} else if (EXPECTED(Z_TYPE_INFO_P(val) <= IS_TRUE)) {
		ZVAL_FALSE(EX_VAR(opline->result.var));
		if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(val) == IS_UNDEF)) {
			SAVE_OPLINE();
			ZVAL_UNDEFINED_OP1();
			ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
		} else {
			ZEND_VM_NEXT_OPCODE();
		}
	}

	SAVE_OPLINE();
	ret = i_zend_is_true(val);
	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
	if (ret) {
		ZVAL_TRUE(EX_VAR(opline->result.var));
		opline = OP_JMP_ADDR(opline, opline->op2);
	} else {
		ZVAL_FALSE(EX_VAR(opline->result.var));
		opline++;
	}
	ZEND_VM_JMP(opline);
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_FREE_SPEC_TMPVAR_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE

	SAVE_OPLINE();
	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_FE_FREE_SPEC_TMPVAR_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	zval *var;
	USE_OPLINE

	var = EX_VAR(opline->op1.var);
	if (Z_TYPE_P(var) != IS_ARRAY) {
		SAVE_OPLINE();
		if (Z_FE_ITER_P(var) != (uint32_t)-1) {
			zend_hash_iterator_del(Z_FE_ITER_P(var));
		}
		zval_ptr_dtor_nogc(var);
		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
	}

	/* This is freeing an array. Use an inlined version of zval_ptr_dtor_nogc. */
	/* PHP only needs to save the opline and check for an exception if the last reference to the array was garbage collected (destructors of elements in the array could throw an exception) */
	if (Z_REFCOUNTED_P(var) && !Z_DELREF_P(var)) {
		SAVE_OPLINE();
		rc_dtor_func(Z_COUNTED_P(var));
		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
	}
	ZEND_VM_NEXT_OPCODE();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_THROW_SPEC_TMPVAR_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *value;

	SAVE_OPLINE();
	value = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);

	do {
		if ((IS_TMP_VAR|IS_VAR) == IS_CONST || UNEXPECTED(Z_TYPE_P(value) != IS_OBJECT)) {
			if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) {
				value = Z_REFVAL_P(value);
				if (EXPECTED(Z_TYPE_P(value) == IS_OBJECT)) {
					break;
				}
			}
			if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
				ZVAL_UNDEFINED_OP1();
				if (UNEXPECTED(EG(exception) != NULL)) {
					HANDLE_EXCEPTION();
				}
			}
			zend_throw_error(NULL, "Can only throw objects");
			zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
			HANDLE_EXCEPTION();
		}
	} while (0);

	zend_exception_save();
	Z_TRY_ADDREF_P(value);
	zend_throw_exception_object(value);
	zend_exception_restore();
	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
	HANDLE_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_BOOL_SPEC_TMPVAR_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *val;

	val = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
	if (Z_TYPE_INFO_P(val) == IS_TRUE) {
		ZVAL_TRUE(EX_VAR(opline->result.var));
	} else if (EXPECTED(Z_TYPE_INFO_P(val) <= IS_TRUE)) {
		/* The result and op1 can be the same cv zval */
		const uint32_t orig_val_type = Z_TYPE_INFO_P(val);
		ZVAL_FALSE(EX_VAR(opline->result.var));
		if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(orig_val_type == IS_UNDEF)) {
			SAVE_OPLINE();
			ZVAL_UNDEFINED_OP1();
			ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
		}
	} else {
		SAVE_OPLINE();
		ZVAL_BOOL(EX_VAR(opline->result.var), i_zend_is_true(val));
		zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
	}
	ZEND_VM_NEXT_OPCODE();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_CLONE_SPEC_TMPVAR_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *obj;
	zend_object *zobj;
	zend_class_entry *ce, *scope;
	zend_function *clone;
	zend_object_clone_obj_t clone_call;

	SAVE_OPLINE();
	obj = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);

	/* ZEND_CLONE also exists as the clone() function and both implementations must be kept in sync.
	 * The OPcode intentionally does not support a clone-with property list to keep it simple. */

	do {
		if ((IS_TMP_VAR|IS_VAR) == IS_CONST ||
		    ((IS_TMP_VAR|IS_VAR) != IS_UNUSED && UNEXPECTED(Z_TYPE_P(obj) != IS_OBJECT))) {
			if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && Z_ISREF_P(obj)) {
				obj = Z_REFVAL_P(obj);
				if (EXPECTED(Z_TYPE_P(obj) == IS_OBJECT)) {
					break;
				}
			}
			ZVAL_UNDEF(EX_VAR(opline->result.var));
			if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(obj) == IS_UNDEF)) {
				ZVAL_UNDEFINED_OP1();
				if (UNEXPECTED(EG(exception) != NULL)) {
					HANDLE_EXCEPTION();
				}
			}
			zend_type_error("clone(): Argument #1 ($object) must be of type object, %s given", zend_zval_value_name(obj));
			zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
			HANDLE_EXCEPTION();
		}
	} while (0);

	zobj = Z_OBJ_P(obj);
	ce = zobj->ce;
	clone = ce->clone;
	clone_call = zobj->handlers->clone_obj;
	if (UNEXPECTED(clone_call == NULL)) {
		zend_throw_error(NULL, "Trying to clone an uncloneable object of class %s", ZSTR_VAL(ce->name));
		zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
		ZVAL_UNDEF(EX_VAR(opline->result.var));
		HANDLE_EXCEPTION();
	}

	if (clone && !(clone->common.fn_flags & ZEND_ACC_PUBLIC)) {
		scope = EX(func)->op_array.scope;
		ZEND_ASSERT(!(clone->common.fn_flags & ZEND_ACC_PUBLIC));
		if (!zend_check_method_accessible(clone, scope)) {
			zend_bad_method_call(clone, clone->common.function_name, scope);
			zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
			ZVAL_UNDEF(EX_VAR(opline->result.var));
			HANDLE_EXCEPTION();
		}
	}

	ZVAL_OBJ(EX_VAR(opline->result.var), clone_call(zobj));

	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_INCLUDE_OR_EVAL_SPEC_TMPVAR_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zend_op_array *new_op_array;
	zval *inc_filename;

	SAVE_OPLINE();
	inc_filename = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
	new_op_array = zend_include_or_eval(inc_filename, opline->extended_value);
	if (UNEXPECTED(EG(exception) != NULL)) {
		zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
		if (new_op_array != ZEND_FAKE_OP_ARRAY && new_op_array != NULL) {
			destroy_op_array(new_op_array);
			efree_size(new_op_array, sizeof(zend_op_array));
		}
		UNDEF_RESULT();
		HANDLE_EXCEPTION();
	} else if (new_op_array == ZEND_FAKE_OP_ARRAY) {
		if (RETURN_VALUE_USED(opline)) {
			ZVAL_TRUE(EX_VAR(opline->result.var));
		}
	} else if (UNEXPECTED(new_op_array == NULL)) {
		if (RETURN_VALUE_USED(opline)) {
			ZVAL_FALSE(EX_VAR(opline->result.var));
		}
	} else if (new_op_array->last == 1
			&& new_op_array->opcodes[0].opcode == ZEND_RETURN
			&& new_op_array->opcodes[0].op1_type == IS_CONST
			&& EXPECTED(zend_execute_ex == execute_ex)) {
		if (RETURN_VALUE_USED(opline)) {
			const zend_op *op = new_op_array->opcodes;

			ZVAL_COPY(EX_VAR(opline->result.var), RT_CONSTANT(op, op->op1));
		}
		zend_destroy_static_vars(new_op_array);
		destroy_op_array(new_op_array);
		efree_size(new_op_array, sizeof(zend_op_array));
	} else {
		zval *return_value = NULL;
		zend_execute_data *call;
		if (RETURN_VALUE_USED(opline)) {
			return_value = EX_VAR(opline->result.var);
		}

		new_op_array->scope = EX(func)->op_array.scope;

		call = zend_vm_stack_push_call_frame(
			(Z_TYPE_INFO(EX(This)) & ZEND_CALL_HAS_THIS) | ZEND_CALL_NESTED_CODE | ZEND_CALL_HAS_SYMBOL_TABLE,
			(zend_function*)new_op_array, 0,
			Z_PTR(EX(This)));

		if (EX_CALL_INFO() & ZEND_CALL_HAS_SYMBOL_TABLE) {
			call->symbol_table = EX(symbol_table);
		} else {
			call->symbol_table = zend_rebuild_symbol_table();
		}

		call->prev_execute_data = execute_data;
		i_init_code_execute_data(call, new_op_array, return_value);


		if (EXPECTED(zend_execute_ex == execute_ex)) {
			zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
			ZEND_VM_ENTER();
		} else {
			ZEND_ADD_CALL_FLAG(call, ZEND_CALL_TOP);
			zend_execute_ex(call);
			zend_vm_stack_free_call_frame(call);
		}

		zend_destroy_static_vars(new_op_array);
		destroy_op_array(new_op_array);
		efree_size(new_op_array, sizeof(zend_op_array));
		if (UNEXPECTED(EG(exception) != NULL)) {
			zend_rethrow_exception(execute_data);
			zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
			UNDEF_RESULT();
			HANDLE_EXCEPTION();
		}
	}
	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
	ZEND_VM_NEXT_OPCODE();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_YIELD_FROM_SPEC_TMPVAR_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C);
	zval *val;

	SAVE_OPLINE();
	val = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);

	if (UNEXPECTED(generator->flags & ZEND_GENERATOR_FORCED_CLOSE)) {
		zend_throw_error(NULL, "Cannot use \"yield from\" in a force-closed generator");
		zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
		UNDEF_RESULT();
		HANDLE_EXCEPTION();
	}

yield_from_try_again:
	if (Z_TYPE_P(val) == IS_ARRAY) {
		ZVAL_COPY_VALUE(&generator->values, val);
		if (Z_OPT_REFCOUNTED_P(val)) {
			Z_ADDREF_P(val);
		}
		Z_FE_POS(generator->values) = 0;
		zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
	} else if ((IS_TMP_VAR|IS_VAR) != IS_CONST && Z_TYPE_P(val) == IS_OBJECT && Z_OBJCE_P(val)->get_iterator) {
		zend_class_entry *ce = Z_OBJCE_P(val);
		if (ce == zend_ce_generator) {
			zend_generator *new_gen = (zend_generator *) Z_OBJ_P(val);

			Z_ADDREF_P(val);
			zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));

			if (UNEXPECTED(new_gen->execute_data == NULL)) {
				zend_throw_error(NULL, "Generator passed to yield from was aborted without proper return and is unable to continue");
				zval_ptr_dtor(val);
				UNDEF_RESULT();
				HANDLE_EXCEPTION();
			} else if (Z_ISUNDEF(new_gen->retval)) {
				if (UNEXPECTED(zend_generator_get_current(new_gen) == generator)) {
					zend_throw_error(NULL, "Impossible to yield from the Generator being currently run");
					zval_ptr_dtor(val);
					UNDEF_RESULT();
					HANDLE_EXCEPTION();
				} else {
					zend_generator_yield_from(generator, new_gen);
				}
			} else {
				if (RETURN_VALUE_USED(opline)) {
					ZVAL_COPY(EX_VAR(opline->result.var), &new_gen->retval);
				}
				ZEND_VM_NEXT_OPCODE();
			}
		} else {
			zend_object_iterator *iter = ce->get_iterator(ce, val, 0);
			zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));

			if (UNEXPECTED(!iter) || UNEXPECTED(EG(exception))) {
				if (!EG(exception)) {
					zend_throw_error(NULL, "Object of type %s did not create an Iterator", ZSTR_VAL(ce->name));
				}
				UNDEF_RESULT();
				HANDLE_EXCEPTION();
			}

			iter->index = 0;
			if (iter->funcs->rewind) {
				iter->funcs->rewind(iter);
				if (UNEXPECTED(EG(exception) != NULL)) {
					OBJ_RELEASE(&iter->std);
					UNDEF_RESULT();
					HANDLE_EXCEPTION();
				}
			}

			ZVAL_OBJ(&generator->values, &iter->std);
		}
	} else if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && Z_TYPE_P(val) == IS_REFERENCE) {
		val = Z_REFVAL_P(val);
		goto yield_from_try_again;
	} else {
		zend_throw_error(NULL, "Can use \"yield from\" only with arrays and Traversables");
		zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
		UNDEF_RESULT();
		HANDLE_EXCEPTION();
	}

	/* This is the default return value
	 * when the expression is a Generator, it will be overwritten in zend_generator_resume() */
	if (RETURN_VALUE_USED(opline)) {
		ZVAL_NULL(EX_VAR(opline->result.var));
	}

	/* This generator has no send target (though the generator we delegate to might have one) */
	generator->send_target = NULL;

	/* The GOTO VM uses a local opline variable. We need to set the opline
	 * variable in execute_data so we don't resume at an old position. */
	SAVE_OPLINE();

	ZEND_VM_RETURN();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_STRLEN_SPEC_TMPVAR_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *value;

	value = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
	if (EXPECTED(Z_TYPE_P(value) == IS_STRING)) {
		ZVAL_LONG(EX_VAR(opline->result.var), Z_STRLEN_P(value));
		if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
			zval_ptr_dtor_str(value);
		}
		ZEND_VM_NEXT_OPCODE();
	} else {
		bool strict;

		if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && Z_TYPE_P(value) == IS_REFERENCE) {
			value = Z_REFVAL_P(value);
			if (EXPECTED(Z_TYPE_P(value) == IS_STRING)) {
				ZVAL_LONG(EX_VAR(opline->result.var), Z_STRLEN_P(value));
				zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
				ZEND_VM_NEXT_OPCODE();
			}
		}

		SAVE_OPLINE();
		if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
			value = ZVAL_UNDEFINED_OP1();
		}
		strict = EX_USES_STRICT_TYPES();
		do {
			if (EXPECTED(!strict)) {
				zend_string *str;
				zval tmp;

				if (UNEXPECTED(Z_TYPE_P(value) == IS_NULL)) {
					zend_error(E_DEPRECATED,
						"strlen(): Passing null to parameter #1 ($string) of type string is deprecated");
					ZVAL_LONG(EX_VAR(opline->result.var), 0);
					if (UNEXPECTED(EG(exception))) {
						HANDLE_EXCEPTION();
					}
					break;
				}

				ZVAL_COPY(&tmp, value);
				if (zend_parse_arg_str_weak(&tmp, &str, 1)) {
					ZVAL_LONG(EX_VAR(opline->result.var), ZSTR_LEN(str));
					zval_ptr_dtor(&tmp);
					break;
				}
				zval_ptr_dtor(&tmp);
			}
			if (!EG(exception)) {
				zend_type_error("strlen(): Argument #1 ($string) must be of type string, %s given", zend_zval_value_name(value));
			}
			ZVAL_UNDEF(EX_VAR(opline->result.var));
		} while (0);
	}
	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_TYPE_CHECK_SPEC_TMPVAR_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *value;
	int result = 0;

	value = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
	if ((opline->extended_value >> (uint32_t)Z_TYPE_P(value)) & 1) {
type_check_resource:
		if (opline->extended_value != MAY_BE_RESOURCE
		 || EXPECTED(NULL != zend_rsrc_list_get_rsrc_type(Z_RES_P(value)))) {
			result = 1;
		}
	} else if (((IS_TMP_VAR|IS_VAR) & (IS_CV|IS_VAR)) && Z_ISREF_P(value)) {
		value = Z_REFVAL_P(value);
		if ((opline->extended_value >> (uint32_t)Z_TYPE_P(value)) & 1) {
			goto type_check_resource;
		}
	} else if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
		result = ((1 << IS_NULL) & opline->extended_value) != 0;
		SAVE_OPLINE();
		ZVAL_UNDEFINED_OP1();
		if (UNEXPECTED(EG(exception))) {
			ZVAL_UNDEF(EX_VAR(opline->result.var));
			HANDLE_EXCEPTION();
		}
	}
	if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
		SAVE_OPLINE();
		zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
		ZEND_VM_SMART_BRANCH(result, 1);
	} else {
		ZEND_VM_SMART_BRANCH(result, 0);
	}
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_FETCH_CLASS_NAME_SPEC_TMPVAR_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	uint32_t fetch_type;
	zend_class_entry *called_scope, *scope;
	USE_OPLINE

	if ((IS_TMP_VAR|IS_VAR) != IS_UNUSED) {
		SAVE_OPLINE();
		zval *op = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
		if (UNEXPECTED(Z_TYPE_P(op) != IS_OBJECT)) {
			ZVAL_DEREF(op);
			if (Z_TYPE_P(op) != IS_OBJECT) {
				zend_type_error("Cannot use \"::class\" on %s", zend_zval_value_name(op));
				ZVAL_UNDEF(EX_VAR(opline->result.var));
				zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
				HANDLE_EXCEPTION();
			}
		}

		ZVAL_STR_COPY(EX_VAR(opline->result.var), Z_OBJCE_P(op)->name);
		zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
	}

	fetch_type = opline->op1.num;
	scope = EX(func)->op_array.scope;
	if (UNEXPECTED(scope == NULL)) {
		SAVE_OPLINE();
		zend_throw_error(NULL, "Cannot use \"%s\" in the global scope",
			fetch_type == ZEND_FETCH_CLASS_SELF ? "self" :
			fetch_type == ZEND_FETCH_CLASS_PARENT ? "parent" : "static");
		ZVAL_UNDEF(EX_VAR(opline->result.var));
		HANDLE_EXCEPTION();
	}

	switch (fetch_type) {
		case ZEND_FETCH_CLASS_SELF:
			ZVAL_STR_COPY(EX_VAR(opline->result.var), scope->name);
			break;
		case ZEND_FETCH_CLASS_PARENT:
			if (UNEXPECTED(scope->parent == NULL)) {
				SAVE_OPLINE();
				zend_throw_error(NULL,
					"Cannot use \"parent\" when current class scope has no parent");
				ZVAL_UNDEF(EX_VAR(opline->result.var));
				HANDLE_EXCEPTION();
			}
			ZVAL_STR_COPY(EX_VAR(opline->result.var), scope->parent->name);
			break;
		case ZEND_FETCH_CLASS_STATIC:
			if (Z_TYPE(EX(This)) == IS_OBJECT) {
				called_scope = Z_OBJCE(EX(This));
			} else {
				called_scope = Z_CE(EX(This));
			}
			ZVAL_STR_COPY(EX_VAR(opline->result.var), called_scope->name);
			break;
		EMPTY_SWITCH_DEFAULT_CASE()
	}
	ZEND_VM_NEXT_OPCODE();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_DIV_SPEC_TMPVAR_CONST_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;

	SAVE_OPLINE();
	op1 = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
	op2 = RT_CONSTANT(opline, opline->op2);
	div_function(EX_VAR(opline->result.var), op1, op2);
	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));


	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_POW_SPEC_TMPVAR_CONST_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;

	SAVE_OPLINE();
	op1 = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
	op2 = RT_CONSTANT(opline, opline->op2);
	pow_function(EX_VAR(opline->result.var), op1, op2);
	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));


	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_CONCAT_SPEC_TMPVAR_CONST_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;

	op1 = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
	op2 = RT_CONSTANT(opline, opline->op2);

	if (((IS_TMP_VAR|IS_VAR) == IS_CONST || EXPECTED(Z_TYPE_P(op1) == IS_STRING)) &&
	    (IS_CONST == IS_CONST || EXPECTED(Z_TYPE_P(op2) == IS_STRING))) {
		zend_string *op1_str = Z_STR_P(op1);
		zend_string *op2_str = Z_STR_P(op2);
		zend_string *str;
		uint32_t flags = ZSTR_GET_COPYABLE_CONCAT_PROPERTIES_BOTH(op1_str, op2_str);

		if ((IS_TMP_VAR|IS_VAR) != IS_CONST && UNEXPECTED(ZSTR_LEN(op1_str) == 0)) {
			if (IS_CONST == IS_CONST || IS_CONST == IS_CV) {
				ZVAL_STR_COPY(EX_VAR(opline->result.var), op2_str);
			} else {
				ZVAL_STR(EX_VAR(opline->result.var), op2_str);
			}
			if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
				zend_string_release_ex(op1_str, 0);
			}
		} else if (IS_CONST != IS_CONST && UNEXPECTED(ZSTR_LEN(op2_str) == 0)) {
			if ((IS_TMP_VAR|IS_VAR) == IS_CONST || (IS_TMP_VAR|IS_VAR) == IS_CV) {
				ZVAL_STR_COPY(EX_VAR(opline->result.var), op1_str);
			} else {
				ZVAL_STR(EX_VAR(opline->result.var), op1_str);
			}
			if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
				zend_string_release_ex(op2_str, 0);
			}
		} else if ((IS_TMP_VAR|IS_VAR) != IS_CONST && (IS_TMP_VAR|IS_VAR) != IS_CV &&
		    !ZSTR_IS_INTERNED(op1_str) && GC_REFCOUNT(op1_str) == 1) {
			size_t len = ZSTR_LEN(op1_str);

			if (UNEXPECTED(len > ZSTR_MAX_LEN - ZSTR_LEN(op2_str))) {
				zend_error_noreturn(E_ERROR, "Integer overflow in memory allocation");
			}
			str = zend_string_extend(op1_str, len + ZSTR_LEN(op2_str), 0);
			memcpy(ZSTR_VAL(str) + len, ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
			GC_ADD_FLAGS(str, flags);
			ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
			if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
				zend_string_release_ex(op2_str, 0);
			}
		} else {
			str = zend_string_alloc(ZSTR_LEN(op1_str) + ZSTR_LEN(op2_str), 0);
			memcpy(ZSTR_VAL(str), ZSTR_VAL(op1_str), ZSTR_LEN(op1_str));
			memcpy(ZSTR_VAL(str) + ZSTR_LEN(op1_str), ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
			GC_ADD_FLAGS(str, flags);
			ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
			if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
				zend_string_release_ex(op1_str, 0);
			}
			if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
				zend_string_release_ex(op2_str, 0);
			}
		}
		ZEND_VM_NEXT_OPCODE();
	} else {
		SAVE_OPLINE();

		if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
			op1 = ZVAL_UNDEFINED_OP1();
		}
		if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(op2) == IS_UNDEF)) {
			op2 = ZVAL_UNDEFINED_OP2();
		}
		concat_function(EX_VAR(opline->result.var), op1, op2);
		zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));


		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
	}
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_IS_EQUAL_SPEC_TMPVAR_CONST_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;
	double d1, d2;

	op1 = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
	op2 = RT_CONSTANT(opline, opline->op2);
	if (1 && (IS_TMP_VAR|IS_VAR) == IS_CONST && IS_CONST == IS_CONST) {
		/* pass */
	} else if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
		if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
			if (EXPECTED(Z_LVAL_P(op1) == Z_LVAL_P(op2))) {
is_equal_true:
				ZEND_VM_SMART_BRANCH_TRUE_NONE();
			} else {
is_equal_false:
				ZEND_VM_SMART_BRANCH_FALSE_NONE();
			}
		} else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
			d1 = (double)Z_LVAL_P(op1);
			d2 = Z_DVAL_P(op2);
			goto is_equal_double;
		}
	} else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) {
		if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
			d1 = Z_DVAL_P(op1);
			d2 = Z_DVAL_P(op2);
is_equal_double:
			if (d1 == d2) {
				goto is_equal_true;
			} else {
				goto is_equal_false;
			}
		} else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
			d1 = Z_DVAL_P(op1);
			d2 = (double)Z_LVAL_P(op2);
			goto is_equal_double;
		}
	} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
		if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
			bool result = zend_fast_equal_strings(Z_STR_P(op1), Z_STR_P(op2));
			if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
				zval_ptr_dtor_str(op1);
			}
			if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
				zval_ptr_dtor_str(op2);
			}
			if (result) {
				goto is_equal_true;
			} else {
				goto is_equal_false;
			}
		}
	}
	ZEND_VM_DISPATCH_TO_HELPER(zend_is_equal_helper_SPEC_TAILCALL(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_EX op1, op2));
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_IS_EQUAL_SPEC_TMPVAR_CONST_JMPZ_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;
	double d1, d2;

	op1 = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
	op2 = RT_CONSTANT(opline, opline->op2);
	if (1 && (IS_TMP_VAR|IS_VAR) == IS_CONST && IS_CONST == IS_CONST) {
		/* pass */
	} else if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
		if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
			if (EXPECTED(Z_LVAL_P(op1) == Z_LVAL_P(op2))) {
is_equal_true:
				ZEND_VM_SMART_BRANCH_TRUE_JMPZ();
			} else {
is_equal_false:
				ZEND_VM_SMART_BRANCH_FALSE_JMPZ();
			}
		} else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
			d1 = (double)Z_LVAL_P(op1);
			d2 = Z_DVAL_P(op2);
			goto is_equal_double;
		}
	} else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) {
		if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
			d1 = Z_DVAL_P(op1);
			d2 = Z_DVAL_P(op2);
is_equal_double:
			if (d1 == d2) {
				goto is_equal_true;
			} else {
				goto is_equal_false;
			}
		} else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
			d1 = Z_DVAL_P(op1);
			d2 = (double)Z_LVAL_P(op2);
			goto is_equal_double;
		}
	} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
		if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
			bool result = zend_fast_equal_strings(Z_STR_P(op1), Z_STR_P(op2));
			if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
				zval_ptr_dtor_str(op1);
			}
			if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
				zval_ptr_dtor_str(op2);
			}
			if (result) {
				goto is_equal_true;
			} else {
				goto is_equal_false;
			}
		}
	}
	ZEND_VM_DISPATCH_TO_HELPER(zend_is_equal_helper_SPEC_TAILCALL(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_EX op1, op2));
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_IS_EQUAL_SPEC_TMPVAR_CONST_JMPNZ_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;
	double d1, d2;

	op1 = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
	op2 = RT_CONSTANT(opline, opline->op2);
	if (1 && (IS_TMP_VAR|IS_VAR) == IS_CONST && IS_CONST == IS_CONST) {
		/* pass */
	} else if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
		if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
			if (EXPECTED(Z_LVAL_P(op1) == Z_LVAL_P(op2))) {
is_equal_true:
				ZEND_VM_SMART_BRANCH_TRUE_JMPNZ();
			} else {
is_equal_false:
				ZEND_VM_SMART_BRANCH_FALSE_JMPNZ();
			}
		} else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
			d1 = (double)Z_LVAL_P(op1);
			d2 = Z_DVAL_P(op2);
			goto is_equal_double;
		}
	} else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) {
		if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
			d1 = Z_DVAL_P(op1);
			d2 = Z_DVAL_P(op2);
is_equal_double:
			if (d1 == d2) {
				goto is_equal_true;
			} else {
				goto is_equal_false;
			}
		} else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
			d1 = Z_DVAL_P(op1);
			d2 = (double)Z_LVAL_P(op2);
			goto is_equal_double;
		}
	} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
		if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
			bool result = zend_fast_equal_strings(Z_STR_P(op1), Z_STR_P(op2));
			if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
				zval_ptr_dtor_str(op1);
			}
			if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
				zval_ptr_dtor_str(op2);
			}
			if (result) {
				goto is_equal_true;
			} else {
				goto is_equal_false;
			}
		}
	}
	ZEND_VM_DISPATCH_TO_HELPER(zend_is_equal_helper_SPEC_TAILCALL(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_EX op1, op2));
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_CONST_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;
	double d1, d2;

	op1 = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
	op2 = RT_CONSTANT(opline, opline->op2);
	if (1 && (IS_TMP_VAR|IS_VAR) == IS_CONST && IS_CONST == IS_CONST) {
		/* pass */
	} else if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
		if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
			if (EXPECTED(Z_LVAL_P(op1) != Z_LVAL_P(op2))) {
is_not_equal_true:
				ZEND_VM_SMART_BRANCH_TRUE_NONE();
			} else {
is_not_equal_false:
				ZEND_VM_SMART_BRANCH_FALSE_NONE();
			}
		} else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
			d1 = (double)Z_LVAL_P(op1);
			d2 = Z_DVAL_P(op2);
			goto is_not_equal_double;
		}
	} else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) {
		if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
			d1 = Z_DVAL_P(op1);
			d2 = Z_DVAL_P(op2);
is_not_equal_double:
			if (d1 != d2) {
				goto is_not_equal_true;
			} else {
				goto is_not_equal_false;
			}
		} else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
			d1 = Z_DVAL_P(op1);
			d2 = (double)Z_LVAL_P(op2);
			goto is_not_equal_double;
		}
	} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
		if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
			bool result = zend_fast_equal_strings(Z_STR_P(op1), Z_STR_P(op2));
			if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
				zval_ptr_dtor_str(op1);
			}
			if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
				zval_ptr_dtor_str(op2);
			}
			if (!result) {
				goto is_not_equal_true;
			} else {
				goto is_not_equal_false;
			}
		}
	}
	ZEND_VM_DISPATCH_TO_HELPER(zend_is_not_equal_helper_SPEC_TAILCALL(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_EX op1, op2));
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_CONST_JMPZ_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;
	double d1, d2;

	op1 = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
	op2 = RT_CONSTANT(opline, opline->op2);
	if (1 && (IS_TMP_VAR|IS_VAR) == IS_CONST && IS_CONST == IS_CONST) {
		/* pass */
	} else if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
		if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
			if (EXPECTED(Z_LVAL_P(op1) != Z_LVAL_P(op2))) {
is_not_equal_true:
				ZEND_VM_SMART_BRANCH_TRUE_JMPZ();
			} else {
is_not_equal_false:
				ZEND_VM_SMART_BRANCH_FALSE_JMPZ();
			}
		} else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
			d1 = (double)Z_LVAL_P(op1);
			d2 = Z_DVAL_P(op2);
			goto is_not_equal_double;
		}
	} else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) {
		if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
			d1 = Z_DVAL_P(op1);
			d2 = Z_DVAL_P(op2);
is_not_equal_double:
			if (d1 != d2) {
				goto is_not_equal_true;
			} else {
				goto is_not_equal_false;
			}
		} else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
			d1 = Z_DVAL_P(op1);
			d2 = (double)Z_LVAL_P(op2);
			goto is_not_equal_double;
		}
	} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
		if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
			bool result = zend_fast_equal_strings(Z_STR_P(op1), Z_STR_P(op2));
			if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
				zval_ptr_dtor_str(op1);
			}
			if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
				zval_ptr_dtor_str(op2);
			}
			if (!result) {
				goto is_not_equal_true;
			} else {
				goto is_not_equal_false;
			}
		}
	}
	ZEND_VM_DISPATCH_TO_HELPER(zend_is_not_equal_helper_SPEC_TAILCALL(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_EX op1, op2));
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_CONST_JMPNZ_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;
	double d1, d2;

	op1 = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
	op2 = RT_CONSTANT(opline, opline->op2);
	if (1 && (IS_TMP_VAR|IS_VAR) == IS_CONST && IS_CONST == IS_CONST) {
		/* pass */
	} else if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
		if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
			if (EXPECTED(Z_LVAL_P(op1) != Z_LVAL_P(op2))) {
is_not_equal_true:
				ZEND_VM_SMART_BRANCH_TRUE_JMPNZ();
			} else {
is_not_equal_false:
				ZEND_VM_SMART_BRANCH_FALSE_JMPNZ();
			}
		} else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
			d1 = (double)Z_LVAL_P(op1);
			d2 = Z_DVAL_P(op2);
			goto is_not_equal_double;
		}
	} else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) {
		if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
			d1 = Z_DVAL_P(op1);
			d2 = Z_DVAL_P(op2);
is_not_equal_double:
			if (d1 != d2) {
				goto is_not_equal_true;
			} else {
				goto is_not_equal_false;
			}
		} else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
			d1 = Z_DVAL_P(op1);
			d2 = (double)Z_LVAL_P(op2);
			goto is_not_equal_double;
		}
	} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
		if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
			bool result = zend_fast_equal_strings(Z_STR_P(op1), Z_STR_P(op2));
			if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
				zval_ptr_dtor_str(op1);
			}
			if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
				zval_ptr_dtor_str(op2);
			}
			if (!result) {
				goto is_not_equal_true;
			} else {
				goto is_not_equal_false;
			}
		}
	}
	ZEND_VM_DISPATCH_TO_HELPER(zend_is_not_equal_helper_SPEC_TAILCALL(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_EX op1, op2));
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_SPACESHIP_SPEC_TMPVAR_CONST_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;

	SAVE_OPLINE();
	op1 = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
	op2 = RT_CONSTANT(opline, opline->op2);
	compare_function(EX_VAR(opline->result.var), op1, op2);
	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));


	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_BOOL_XOR_SPEC_TMPVAR_CONST_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;

	SAVE_OPLINE();
	op1 = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
	op2 = RT_CONSTANT(opline, opline->op2);
	boolean_xor_function(EX_VAR(opline->result.var), op1, op2);
	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));


	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_FETCH_DIM_R_SPEC_TMPVAR_CONST_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *container, *dim, *value;

	SAVE_OPLINE();
	container = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
	dim = RT_CONSTANT(opline, opline->op2);
	if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
		if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
fetch_dim_r_array:
			value = zend_fetch_dimension_address_inner(Z_ARRVAL_P(container), dim, IS_CONST, BP_VAR_R EXECUTE_DATA_CC);
			ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
		} else if (EXPECTED(Z_TYPE_P(container) == IS_REFERENCE)) {
			container = Z_REFVAL_P(container);
			if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
				goto fetch_dim_r_array;
			} else {
				goto fetch_dim_r_slow;
			}
		} else {
fetch_dim_r_slow:
			if (IS_CONST == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
				dim++;
			}
			zend_fetch_dimension_address_read_R_slow(container, dim OPLINE_CC EXECUTE_DATA_CC);
		}
	} else {
		zend_fetch_dimension_address_read_R(container, dim, IS_CONST OPLINE_CC EXECUTE_DATA_CC);
	}


	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_FETCH_DIM_IS_SPEC_TMPVAR_CONST_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *container;

	SAVE_OPLINE();
	container = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
	zend_fetch_dimension_address_read_IS(container, RT_CONSTANT(opline, opline->op2), IS_CONST OPLINE_CC EXECUTE_DATA_CC);


	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_FETCH_OBJ_R_SPEC_TMPVAR_CONST_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *container;
	void **cache_slot = NULL;

	SAVE_OPLINE();
	container = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);

	if ((IS_TMP_VAR|IS_VAR) == IS_CONST ||
	    ((IS_TMP_VAR|IS_VAR) != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
		do {
			if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
				container = Z_REFVAL_P(container);
				if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
					break;
				}
			}
			if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
				ZVAL_UNDEFINED_OP1();
			}
			zend_wrong_property_read(container, RT_CONSTANT(opline, opline->op2));
			ZVAL_NULL(EX_VAR(opline->result.var));
			goto fetch_obj_r_finish;
		} while (0);
	}

	/* here we are sure we are dealing with an object */
	do {
		zend_object *zobj = Z_OBJ_P(container);
		zend_string *name, *tmp_name;
		zval *retval;

		if (IS_CONST == IS_CONST) {
			cache_slot = CACHE_ADDR(opline->extended_value & ~ZEND_FETCH_REF /* FUNC_ARG fetch may contain it */);

			if (EXPECTED(zobj->ce == CACHED_PTR_EX(cache_slot))) {
				uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);

				if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
fetch_obj_r_simple:
					retval = OBJ_PROP(zobj, prop_offset);
					if (EXPECTED(Z_TYPE_INFO_P(retval) != IS_UNDEF)) {
						if (0 || ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) != 0) {
							goto fetch_obj_r_copy;
						} else {
fetch_obj_r_fast_copy:
							ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
							ZEND_VM_NEXT_OPCODE();
						}
					}
				} else if (UNEXPECTED(IS_HOOKED_PROPERTY_OFFSET(prop_offset))) {
					zend_property_info *prop_info = CACHED_PTR_EX(cache_slot + 2);
					if (ZEND_IS_PROPERTY_HOOK_SIMPLE_READ(prop_offset)) {
						prop_offset = prop_info->offset;
						goto fetch_obj_r_simple;
					} else if (EXPECTED(ZEND_IS_PROPERTY_HOOK_SIMPLE_GET(prop_offset))) {
						zend_function *hook = prop_info->hooks[ZEND_PROPERTY_HOOK_GET];
						ZEND_ASSERT(hook->type == ZEND_USER_FUNCTION);
						ZEND_ASSERT(RUN_TIME_CACHE(&hook->op_array));

						uint32_t call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_HAS_THIS;
						if ((IS_TMP_VAR|IS_VAR) & IS_CV) {
							GC_ADDREF(zobj);
						}
						if ((IS_TMP_VAR|IS_VAR) & (IS_CV|IS_VAR|IS_TMP_VAR)) {
							call_info |= ZEND_CALL_RELEASE_THIS;
						}
						zend_execute_data *call = zend_vm_stack_push_call_frame(call_info, hook, 0, zobj);
						call->prev_execute_data = execute_data;
						call->call = NULL;
						call->return_value = EX_VAR(opline->result.var);
						call->run_time_cache = RUN_TIME_CACHE(&hook->op_array);

						execute_data = call;
						EG(current_execute_data) = execute_data;
						zend_init_cvs(0, hook->op_array.last_var EXECUTE_DATA_CC);

#if defined(ZEND_VM_IP_GLOBAL_REG) && ((ZEND_VM_KIND == ZEND_VM_KIND_CALL) || (ZEND_VM_KIND == ZEND_VM_KIND_HYBRID))
						opline = hook->op_array.opcodes;
#else
						EX(opline) = hook->op_array.opcodes;
#endif
						LOAD_OPLINE_EX();




						ZEND_VM_ENTER_EX();
					}
					/* Fall through to read_property for hooks. */
				} else if (EXPECTED(zobj->properties != NULL)) {
					ZEND_ASSERT(IS_DYNAMIC_PROPERTY_OFFSET(prop_offset));
					name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
					if (!IS_UNKNOWN_DYNAMIC_PROPERTY_OFFSET(prop_offset)) {
						uintptr_t idx = ZEND_DECODE_DYN_PROP_OFFSET(prop_offset);

						if (EXPECTED(idx < zobj->properties->nNumUsed * sizeof(Bucket))) {
							Bucket *p = (Bucket*)((char*)zobj->properties->arData + idx);

							if (EXPECTED(p->key == name) ||
							    (EXPECTED(p->h == ZSTR_H(name)) &&
							     EXPECTED(p->key != NULL) &&
							     EXPECTED(zend_string_equal_content(p->key, name)))) {
								retval = &p->val;
								if (0 || ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) != 0) {
									goto fetch_obj_r_copy;
								} else {
									goto fetch_obj_r_fast_copy;
								}
							}
						}
						CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_DYNAMIC_PROPERTY_OFFSET);
					}
					retval = zend_hash_find_known_hash(zobj->properties, name);
					if (EXPECTED(retval)) {
						uintptr_t idx = (char*)retval - (char*)zobj->properties->arData;
						CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_ENCODE_DYN_PROP_OFFSET(idx));
						if (0 || ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) != 0) {
							goto fetch_obj_r_copy;
						} else {
							goto fetch_obj_r_fast_copy;
						}
					}
				}
			}
			name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
		} else {
			name = zval_try_get_tmp_string(RT_CONSTANT(opline, opline->op2), &tmp_name);
			if (UNEXPECTED(!name)) {
				ZVAL_UNDEF(EX_VAR(opline->result.var));
				break;
			}
		}

#if ZEND_DEBUG
		/* For non-standard object handlers, verify a declared property type in debug builds.
		 * Fetch prop_info before calling read_property(), as it may deallocate the object. */
		zend_property_info *prop_info = NULL;
		if (zobj->handlers->read_property != zend_std_read_property) {
			prop_info = zend_get_property_info(zobj->ce, name, /* silent */ true);
		}
#endif
		retval = zobj->handlers->read_property(zobj, name, BP_VAR_R, cache_slot, EX_VAR(opline->result.var));
#if ZEND_DEBUG
		if (!EG(exception) && prop_info && prop_info != ZEND_WRONG_PROPERTY_INFO
				&& ZEND_TYPE_IS_SET(prop_info->type)) {
			ZVAL_OPT_DEREF(retval);
			zend_verify_property_type(prop_info, retval, /* strict */ true);
		}
#endif

		if (IS_CONST != IS_CONST) {
			zend_tmp_string_release(tmp_name);
		}

		if (retval != EX_VAR(opline->result.var)) {
fetch_obj_r_copy:
			ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
		} else if (UNEXPECTED(Z_ISREF_P(retval))) {
			zend_unwrap_reference(retval);
		}
	} while (0);

fetch_obj_r_finish:


	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_CONST_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *container;
	void **cache_slot = NULL;

	SAVE_OPLINE();
	container = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);

	if ((IS_TMP_VAR|IS_VAR) == IS_CONST ||
	    ((IS_TMP_VAR|IS_VAR) != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
		do {
			if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
				container = Z_REFVAL_P(container);
				if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
					break;
				}
			}
			if (IS_CONST == IS_CV && Z_TYPE_P(EX_VAR(opline->op2.var)) == IS_UNDEF) {
				ZVAL_UNDEFINED_OP2();
			}
			ZVAL_NULL(EX_VAR(opline->result.var));
			goto fetch_obj_is_finish;
		} while (0);
	}

	/* here we are sure we are dealing with an object */
	do {
		zend_object *zobj = Z_OBJ_P(container);
		zend_string *name, *tmp_name;
		zval *retval;

		if (IS_CONST == IS_CONST) {
			cache_slot = CACHE_ADDR(opline->extended_value);

			if (EXPECTED(zobj->ce == CACHED_PTR_EX(cache_slot))) {
				uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);

				if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
fetch_obj_is_simple:
					retval = OBJ_PROP(zobj, prop_offset);
					if (EXPECTED(Z_TYPE_P(retval) != IS_UNDEF)) {
						if (0 || ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) != 0) {
							goto fetch_obj_is_copy;
						} else {
fetch_obj_is_fast_copy:
							ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
							ZEND_VM_NEXT_OPCODE();
						}
					}
				} else if (UNEXPECTED(IS_HOOKED_PROPERTY_OFFSET(prop_offset))) {
					if (ZEND_IS_PROPERTY_HOOK_SIMPLE_READ(prop_offset)) {
						zend_property_info *prop_info = CACHED_PTR_EX(cache_slot + 2);
						prop_offset = prop_info->offset;
						goto fetch_obj_is_simple;
					}
					/* Fall through to read_property for hooks. */
				} else if (EXPECTED(zobj->properties != NULL)) {
					ZEND_ASSERT(IS_DYNAMIC_PROPERTY_OFFSET(prop_offset));
					name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
					if (!IS_UNKNOWN_DYNAMIC_PROPERTY_OFFSET(prop_offset)) {
						uintptr_t idx = ZEND_DECODE_DYN_PROP_OFFSET(prop_offset);

						if (EXPECTED(idx < zobj->properties->nNumUsed * sizeof(Bucket))) {
							Bucket *p = (Bucket*)((char*)zobj->properties->arData + idx);

							if (EXPECTED(p->key == name) ||
							    (EXPECTED(p->h == ZSTR_H(name)) &&
							     EXPECTED(p->key != NULL) &&
							     EXPECTED(zend_string_equal_content(p->key, name)))) {
								retval = &p->val;
								if (0 || ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) != 0) {
									goto fetch_obj_is_copy;
								} else {
									goto fetch_obj_is_fast_copy;
								}
							}
						}
						CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_DYNAMIC_PROPERTY_OFFSET);
					}
					retval = zend_hash_find_known_hash(zobj->properties, name);
					if (EXPECTED(retval)) {
						uintptr_t idx = (char*)retval - (char*)zobj->properties->arData;
						CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_ENCODE_DYN_PROP_OFFSET(idx));
						if (0 || ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) != 0) {
							goto fetch_obj_is_copy;
						} else {
							goto fetch_obj_is_fast_copy;
						}
					}
				}
			}
			name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
		} else {
			name = zval_try_get_tmp_string(RT_CONSTANT(opline, opline->op2), &tmp_name);
			if (UNEXPECTED(!name)) {
				ZVAL_UNDEF(EX_VAR(opline->result.var));
				break;
			}
		}

		retval = zobj->handlers->read_property(zobj, name, BP_VAR_IS, cache_slot, EX_VAR(opline->result.var));

		if (IS_CONST != IS_CONST) {
			zend_tmp_string_release(tmp_name);
		}

		if (retval != EX_VAR(opline->result.var)) {
fetch_obj_is_copy:
			ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
		} else if (UNEXPECTED(Z_ISREF_P(retval))) {
			zend_unwrap_reference(retval);
		}
	} while (0);

fetch_obj_is_finish:


	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_FAST_CONCAT_SPEC_TMPVAR_CONST_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;
	zend_string *op1_str, *op2_str, *str;


	op1 = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
	op2 = RT_CONSTANT(opline, opline->op2);
	if (((IS_TMP_VAR|IS_VAR) == IS_CONST || EXPECTED(Z_TYPE_P(op1) == IS_STRING)) &&
	    (IS_CONST == IS_CONST || EXPECTED(Z_TYPE_P(op2) == IS_STRING))) {
		zend_string *op1_str = Z_STR_P(op1);
		zend_string *op2_str = Z_STR_P(op2);
		zend_string *str;
		uint32_t flags = ZSTR_GET_COPYABLE_CONCAT_PROPERTIES_BOTH(op1_str, op2_str);

		if ((IS_TMP_VAR|IS_VAR) != IS_CONST && UNEXPECTED(ZSTR_LEN(op1_str) == 0)) {
			if (IS_CONST == IS_CONST || IS_CONST == IS_CV) {
				ZVAL_STR_COPY(EX_VAR(opline->result.var), op2_str);
			} else {
				ZVAL_STR(EX_VAR(opline->result.var), op2_str);
			}
			if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
				zend_string_release_ex(op1_str, 0);
			}
		} else if (IS_CONST != IS_CONST && UNEXPECTED(ZSTR_LEN(op2_str) == 0)) {
			if ((IS_TMP_VAR|IS_VAR) == IS_CONST || (IS_TMP_VAR|IS_VAR) == IS_CV) {
				ZVAL_STR_COPY(EX_VAR(opline->result.var), op1_str);
			} else {
				ZVAL_STR(EX_VAR(opline->result.var), op1_str);
			}
			if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
				zend_string_release_ex(op2_str, 0);
			}
		} else if ((IS_TMP_VAR|IS_VAR) != IS_CONST && (IS_TMP_VAR|IS_VAR) != IS_CV &&
		    !ZSTR_IS_INTERNED(op1_str) && GC_REFCOUNT(op1_str) == 1) {
			size_t len = ZSTR_LEN(op1_str);

			str = zend_string_extend(op1_str, len + ZSTR_LEN(op2_str), 0);
			memcpy(ZSTR_VAL(str) + len, ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
			GC_ADD_FLAGS(str, flags);
			ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
			if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
				zend_string_release_ex(op2_str, 0);
			}
		} else {
			str = zend_string_alloc(ZSTR_LEN(op1_str) + ZSTR_LEN(op2_str), 0);
			memcpy(ZSTR_VAL(str), ZSTR_VAL(op1_str), ZSTR_LEN(op1_str));
			memcpy(ZSTR_VAL(str) + ZSTR_LEN(op1_str), ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
			GC_ADD_FLAGS(str, flags);
			ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
			if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
				zend_string_release_ex(op1_str, 0);
			}
			if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
				zend_string_release_ex(op2_str, 0);
			}
		}
		ZEND_VM_NEXT_OPCODE();
	}

	SAVE_OPLINE();
	if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
		op1_str = Z_STR_P(op1);
	} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
		op1_str = zend_string_copy(Z_STR_P(op1));
	} else {
		if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
			ZVAL_UNDEFINED_OP1();
		}
		op1_str = zval_get_string_func(op1);
	}
	if (IS_CONST == IS_CONST) {
		op2_str = Z_STR_P(op2);
	} else if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
		op2_str = zend_string_copy(Z_STR_P(op2));
	} else {
		if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(op2) == IS_UNDEF)) {
			ZVAL_UNDEFINED_OP2();
		}
		op2_str = zval_get_string_func(op2);
	}
	do {
		if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
			if (UNEXPECTED(ZSTR_LEN(op1_str) == 0)) {
				if (IS_CONST == IS_CONST) {
					if (UNEXPECTED(Z_REFCOUNTED_P(op2))) {
						GC_ADDREF(op2_str);
					}
				}
				ZVAL_STR(EX_VAR(opline->result.var), op2_str);
				zend_string_release_ex(op1_str, 0);
				break;
			}
		}
		if (IS_CONST != IS_CONST) {
			if (UNEXPECTED(ZSTR_LEN(op2_str) == 0)) {
				if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
					if (UNEXPECTED(Z_REFCOUNTED_P(op1))) {
						GC_ADDREF(op1_str);
					}
				}
				ZVAL_STR(EX_VAR(opline->result.var), op1_str);
				zend_string_release_ex(op2_str, 0);
				break;
			}
		}
		str = zend_string_alloc(ZSTR_LEN(op1_str) + ZSTR_LEN(op2_str), 0);
		memcpy(ZSTR_VAL(str), ZSTR_VAL(op1_str), ZSTR_LEN(op1_str));
		memcpy(ZSTR_VAL(str) + ZSTR_LEN(op1_str), ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);

		ZSTR_COPY_CONCAT_PROPERTIES_BOTH(str, op1_str, op2_str);
		ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
		if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
			zend_string_release_ex(op1_str, 0);
		}
		if (IS_CONST != IS_CONST) {
			zend_string_release_ex(op2_str, 0);
		}
	} while (0);
	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));


	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_CONST_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *function_name;
	zval *object;
	zend_function *fbc;
	zend_class_entry *called_scope;
	zend_object *obj;
	zend_execute_data *call;
	uint32_t call_info;

	SAVE_OPLINE();

	object = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);

	if (IS_CONST != IS_CONST) {
		function_name = RT_CONSTANT(opline, opline->op2);
	}

	if (IS_CONST != IS_CONST &&
	    UNEXPECTED(Z_TYPE_P(function_name) != IS_STRING)) {
		do {
			if ((IS_CONST & (IS_VAR|IS_CV)) && Z_ISREF_P(function_name)) {
				function_name = Z_REFVAL_P(function_name);
				if (EXPECTED(Z_TYPE_P(function_name) == IS_STRING)) {
					break;
				}
			} else if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) {
				ZVAL_UNDEFINED_OP2();
				if (UNEXPECTED(EG(exception) != NULL)) {
					zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
					HANDLE_EXCEPTION();
				}
			}
			zend_throw_error(NULL, "Method name must be a string");


			zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
			HANDLE_EXCEPTION();
		} while (0);
	}

	if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED) {
		obj = Z_OBJ_P(object);
	} else {
		do {
			if ((IS_TMP_VAR|IS_VAR) != IS_CONST && EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
				obj = Z_OBJ_P(object);
			} else {
				if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(object))) {
					zend_reference *ref = Z_REF_P(object);

					object = &ref->val;
					if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
						obj = Z_OBJ_P(object);
						if ((IS_TMP_VAR|IS_VAR) & IS_VAR) {
							if (UNEXPECTED(GC_DELREF(ref) == 0)) {
								efree_size(ref, sizeof(zend_reference));
							} else {
								Z_ADDREF_P(object);
							}
						}
						break;
					}
				}
				if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
					object = ZVAL_UNDEFINED_OP1();
					if (UNEXPECTED(EG(exception) != NULL)) {
						if (IS_CONST != IS_CONST) {


						}
						HANDLE_EXCEPTION();
					}
				}
				if (IS_CONST == IS_CONST) {
					function_name = RT_CONSTANT(opline, opline->op2);
				}
				zend_invalid_method_call(object, function_name);


				zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
				HANDLE_EXCEPTION();
			}
		} while (0);
	}

	called_scope = obj->ce;

	if (IS_CONST == IS_CONST &&
	    EXPECTED(CACHED_PTR(opline->result.num) == called_scope)) {
		fbc = CACHED_PTR(opline->result.num + sizeof(void*));
	} else {
		zend_object *orig_obj = obj;

		if (IS_CONST == IS_CONST) {
			function_name = RT_CONSTANT(opline, opline->op2);
		}

		/* First, locate the function. */
		fbc = obj->handlers->get_method(&obj, Z_STR_P(function_name), ((IS_CONST == IS_CONST) ? (RT_CONSTANT(opline, opline->op2) + 1) : NULL));
		if (UNEXPECTED(fbc == NULL)) {
			if (EXPECTED(!EG(exception))) {
				zend_undefined_method(orig_obj->ce, Z_STR_P(function_name));
			}


			if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_TMP_VAR)) && GC_DELREF(orig_obj) == 0) {
				zend_objects_store_del(orig_obj);
			}
			HANDLE_EXCEPTION();
		}
		if (IS_CONST == IS_CONST &&
		    EXPECTED(!(fbc->common.fn_flags & (ZEND_ACC_CALL_VIA_TRAMPOLINE|ZEND_ACC_NEVER_CACHE))) &&
		    EXPECTED(obj == orig_obj)) {
			CACHE_POLYMORPHIC_PTR(opline->result.num, called_scope, fbc);
		}
		if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_TMP_VAR)) && UNEXPECTED(obj != orig_obj)) {
			GC_ADDREF(obj); /* For $this pointer */
			if (GC_DELREF(orig_obj) == 0) {
				zend_objects_store_del(orig_obj);
			}
		}
		if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!RUN_TIME_CACHE(&fbc->op_array))) {
			init_func_run_time_cache(&fbc->op_array);
		}
	}

	if (IS_CONST != IS_CONST) {


	}

	call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_HAS_THIS;
	if (UNEXPECTED((fbc->common.fn_flags & ZEND_ACC_STATIC) != 0)) {
		if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_TMP_VAR)) && GC_DELREF(obj) == 0) {
			zend_objects_store_del(obj);
			if (UNEXPECTED(EG(exception))) {
				HANDLE_EXCEPTION();
			}
		}
		/* call static method */
		obj = (zend_object*)called_scope;
		call_info = ZEND_CALL_NESTED_FUNCTION;
	} else if ((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_TMP_VAR|IS_CV)) {
		if ((IS_TMP_VAR|IS_VAR) == IS_CV) {
			GC_ADDREF(obj); /* For $this pointer */
		}
		/* CV may be changed indirectly (e.g. when it's a reference) */
		call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_HAS_THIS | ZEND_CALL_RELEASE_THIS;
	}

	call = zend_vm_stack_push_call_frame(call_info,
		fbc, opline->extended_value, obj);
	call->prev_execute_data = EX(call);
	EX(call) = call;

	ZEND_VM_NEXT_OPCODE();
}

static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_SEND_VAL_SPEC_TMPVAR_CONST_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *value, *arg;

	if (IS_CONST == IS_CONST) {
		SAVE_OPLINE();
		zend_string *arg_name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
		uint32_t arg_num;
		arg = zend_handle_named_arg(&EX(call), arg_name, &arg_num, CACHE_ADDR(opline->result.num));
		if (UNEXPECTED(!arg)) {
			zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
			HANDLE_EXCEPTION();
		}
	} else {
		arg = ZEND_CALL_VAR(EX(call), opline->result.var);
	}

	value = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
	ZVAL_COPY_VALUE(arg, value);
	if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
		if (UNEXPECTED(Z_OPT_REFCOUNTED_P(arg))) {
			Z_ADDREF_P(arg);
		}
	}
	ZEND_VM_NEXT_OPCODE();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_CASE_SPEC_TMPVAR_CONST_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;
	double d1, d2;

	op1 = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
	op2 = RT_CONSTANT(opline, opline->op2);
	if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
		if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
			if (EXPECTED(Z_LVAL_P(op1) == Z_LVAL_P(op2))) {
case_true:
				ZEND_VM_SMART_BRANCH_TRUE();
			} else {
case_false:
				ZEND_VM_SMART_BRANCH_FALSE();
			}
		} else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
			d1 = (double)Z_LVAL_P(op1);
			d2 = Z_DVAL_P(op2);
			goto case_double;
		}
	} else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) {
		if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
			d1 = Z_DVAL_P(op1);
			d2 = Z_DVAL_P(op2);
case_double:
			if (d1 == d2) {
				goto case_true;
			} else {
				goto case_false;
			}
		} else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
			d1 = Z_DVAL_P(op1);
			d2 = (double)Z_LVAL_P(op2);
			goto case_double;
		}
	} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
		if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
			bool result = zend_fast_equal_strings(Z_STR_P(op1), Z_STR_P(op2));


			if (result) {
				goto case_true;
			} else {
				goto case_false;
			}
		}
	}
	ZEND_VM_DISPATCH_TO_HELPER(zend_case_helper_SPEC_TAILCALL(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_EX op1, op2));
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_TMPVAR_CONST_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *container;
	bool result;
	zend_ulong hval;
	zval *offset;

	SAVE_OPLINE();
	container = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
	offset = RT_CONSTANT(opline, opline->op2);

	if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
		HashTable *ht;
		zval *value;
		zend_string *str;

isset_dim_obj_array:
		ht = Z_ARRVAL_P(container);
isset_again:
		if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) {
			str = Z_STR_P(offset);
			if (IS_CONST != IS_CONST) {
				if (ZEND_HANDLE_NUMERIC(str, hval)) {
					goto num_index_prop;
				}
			}
			value = zend_hash_find_ex(ht, str, IS_CONST == IS_CONST);
		} else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
			hval = Z_LVAL_P(offset);
num_index_prop:
			value = zend_hash_index_find(ht, hval);
		} else if ((IS_CONST & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(offset))) {
			offset = Z_REFVAL_P(offset);
			goto isset_again;
		} else {
			value = zend_find_array_dim_slow(ht, offset EXECUTE_DATA_CC);
			if (UNEXPECTED(EG(exception))) {
				result = 0;
				goto isset_dim_obj_exit;
			}
		}

		if (!(opline->extended_value & ZEND_ISEMPTY)) {
			/* > IS_NULL means not IS_UNDEF and not IS_NULL */
			result = value != NULL && Z_TYPE_P(value) > IS_NULL &&
			    (!Z_ISREF_P(value) || Z_TYPE_P(Z_REFVAL_P(value)) != IS_NULL);

			if ((IS_TMP_VAR|IS_VAR) & (IS_CONST|IS_CV)) {
				/* avoid exception check */


				ZEND_VM_SMART_BRANCH(result, 0);
			}
		} else {
			result = (value == NULL || !i_zend_is_true(value));
		}
		goto isset_dim_obj_exit;
	} else if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(container))) {
		container = Z_REFVAL_P(container);
		if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
			goto isset_dim_obj_array;
		}
	}

	if (IS_CONST == IS_CONST && Z_EXTRA_P(offset) == ZEND_EXTRA_VALUE) {
		offset++;
	}
	if (!(opline->extended_value & ZEND_ISEMPTY)) {
		result = zend_isset_dim_slow(container, offset EXECUTE_DATA_CC);
	} else {
		result = zend_isempty_dim_slow(container, offset EXECUTE_DATA_CC);
	}

isset_dim_obj_exit:


	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
	ZEND_VM_SMART_BRANCH(result, 1);
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TMPVAR_CONST_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *container;
	int result;
	zval *offset;
	zend_string *name, *tmp_name;

	SAVE_OPLINE();
	container = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
	offset = RT_CONSTANT(opline, opline->op2);

	if ((IS_TMP_VAR|IS_VAR) == IS_CONST ||
	    ((IS_TMP_VAR|IS_VAR) != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
		if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
			container = Z_REFVAL_P(container);
			if (UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT)) {
				result = (opline->extended_value & ZEND_ISEMPTY);
				goto isset_object_finish;
			}
		} else {
			result = (opline->extended_value & ZEND_ISEMPTY);
			goto isset_object_finish;
		}
	}

	if (IS_CONST == IS_CONST) {
		name = Z_STR_P(offset);
	} else {
		name = zval_try_get_tmp_string(offset, &tmp_name);
		if (UNEXPECTED(!name)) {
			result = 0;
			goto isset_object_finish;
		}
	}

	result =
		(opline->extended_value & ZEND_ISEMPTY) ^
		Z_OBJ_HT_P(container)->has_property(Z_OBJ_P(container), name, (opline->extended_value & ZEND_ISEMPTY), ((IS_CONST == IS_CONST) ? CACHE_ADDR(opline->extended_value & ~ZEND_ISEMPTY) : NULL));

	if (IS_CONST != IS_CONST) {
		zend_tmp_string_release(tmp_name);
	}

isset_object_finish:


	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
	ZEND_VM_SMART_BRANCH(result, 1);
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_ARRAY_KEY_EXISTS_SPEC_TMPVAR_CONST_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE

	zval *key, *subject;
	HashTable *ht;
	bool result;

	SAVE_OPLINE();

	key = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
	subject = RT_CONSTANT(opline, opline->op2);

	if (EXPECTED(Z_TYPE_P(subject) == IS_ARRAY)) {
array_key_exists_array:
		ht = Z_ARRVAL_P(subject);
		result = zend_array_key_exists_fast(ht, key OPLINE_CC EXECUTE_DATA_CC);
	} else {
		if ((IS_CONST & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(subject))) {
			subject = Z_REFVAL_P(subject);
			if (EXPECTED(Z_TYPE_P(subject) == IS_ARRAY)) {
				goto array_key_exists_array;
			}
		}
		zend_array_key_exists_error(subject, key OPLINE_CC EXECUTE_DATA_CC);
		result = 0;
	}


	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
	ZEND_VM_SMART_BRANCH(result, 1);
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_INSTANCEOF_SPEC_TMPVAR_CONST_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *expr;
	bool result;

	SAVE_OPLINE();
	expr = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);

try_instanceof:
	if (Z_TYPE_P(expr) == IS_OBJECT) {
		zend_class_entry *ce;

		if (IS_CONST == IS_CONST) {
			ce = CACHED_PTR(opline->extended_value);
			if (UNEXPECTED(ce == NULL)) {
				ce = zend_lookup_class_ex(Z_STR_P(RT_CONSTANT(opline, opline->op2)), Z_STR_P(RT_CONSTANT(opline, opline->op2) + 1), ZEND_FETCH_CLASS_NO_AUTOLOAD);
				if (EXPECTED(ce)) {
					CACHE_PTR(opline->extended_value, ce);
				}
			}
		} else if (IS_CONST == IS_UNUSED) {
			ce = zend_fetch_class(NULL, opline->op2.num);
			if (UNEXPECTED(ce == NULL)) {
				zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
				ZVAL_UNDEF(EX_VAR(opline->result.var));
				HANDLE_EXCEPTION();
			}
		} else {
			ce = Z_CE_P(EX_VAR(opline->op2.var));
		}
		result = ce && instanceof_function(Z_OBJCE_P(expr), ce);
	} else if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && Z_TYPE_P(expr) == IS_REFERENCE) {
		expr = Z_REFVAL_P(expr);
		goto try_instanceof;
	} else {
		if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(expr) == IS_UNDEF)) {
			ZVAL_UNDEFINED_OP1();
		}
		result = 0;
	}
	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
	ZEND_VM_SMART_BRANCH(result, 1);
}

static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_FETCH_DIM_R_INDEX_SPEC_TMPVAR_CONST_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *container, *dim, *value;
	zend_long offset;
	HashTable *ht;

	container = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
	dim = RT_CONSTANT(opline, opline->op2);
	if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
fetch_dim_r_index_array:
		if (EXPECTED(Z_TYPE_P(dim) == IS_LONG)) {
			offset = Z_LVAL_P(dim);
		} else {
			SAVE_OPLINE();
			zend_fetch_dimension_address_read_R(container, dim, IS_CONST OPLINE_CC EXECUTE_DATA_CC);
			zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
			ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
		}
		ht = Z_ARRVAL_P(container);
		ZEND_HASH_INDEX_FIND(ht, offset, value, fetch_dim_r_index_undef);
		ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
		if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
			SAVE_OPLINE();
			zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
			ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
		} else {
			ZEND_VM_NEXT_OPCODE();
		}
	} else if ((IS_TMP_VAR|IS_VAR) != IS_CONST && EXPECTED(Z_TYPE_P(container) == IS_REFERENCE)) {
		container = Z_REFVAL_P(container);
		if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
			goto fetch_dim_r_index_array;
		} else {
			goto fetch_dim_r_index_slow;
		}
	} else {
fetch_dim_r_index_slow:
		SAVE_OPLINE();
		if (IS_CONST == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
			dim++;
		}
		zend_fetch_dimension_address_read_R_slow(container, dim OPLINE_CC EXECUTE_DATA_CC);
		zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
	}

fetch_dim_r_index_undef:
	ZVAL_NULL(EX_VAR(opline->result.var));
	SAVE_OPLINE();
	zend_undefined_offset(offset);
	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_FETCH_DIM_R_INDEX_SPEC_TMPVAR_TMPVARCV_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *container, *dim, *value;
	zend_long offset;
	HashTable *ht;

	container = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
	dim = EX_VAR(opline->op2.var);
	if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
fetch_dim_r_index_array:
		if (EXPECTED(Z_TYPE_P(dim) == IS_LONG)) {
			offset = Z_LVAL_P(dim);
		} else {
			SAVE_OPLINE();
			zend_fetch_dimension_address_read_R(container, dim, (IS_TMP_VAR|IS_VAR|IS_CV) OPLINE_CC EXECUTE_DATA_CC);
			zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
			ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
		}
		ht = Z_ARRVAL_P(container);
		ZEND_HASH_INDEX_FIND(ht, offset, value, fetch_dim_r_index_undef);
		ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
		if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
			SAVE_OPLINE();
			zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
			ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
		} else {
			ZEND_VM_NEXT_OPCODE();
		}
	} else if ((IS_TMP_VAR|IS_VAR) != IS_CONST && EXPECTED(Z_TYPE_P(container) == IS_REFERENCE)) {
		container = Z_REFVAL_P(container);
		if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
			goto fetch_dim_r_index_array;
		} else {
			goto fetch_dim_r_index_slow;
		}
	} else {
fetch_dim_r_index_slow:
		SAVE_OPLINE();
		if ((IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
			dim++;
		}
		zend_fetch_dimension_address_read_R_slow(container, dim OPLINE_CC EXECUTE_DATA_CC);
		zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
	}

fetch_dim_r_index_undef:
	ZVAL_NULL(EX_VAR(opline->result.var));
	SAVE_OPLINE();
	zend_undefined_offset(offset);
	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_DIV_SPEC_TMPVAR_TMPVAR_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;

	SAVE_OPLINE();
	op1 = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
	op2 = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
	div_function(EX_VAR(opline->result.var), op1, op2);
	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_POW_SPEC_TMPVAR_TMPVAR_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;

	SAVE_OPLINE();
	op1 = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
	op2 = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
	pow_function(EX_VAR(opline->result.var), op1, op2);
	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_CONCAT_SPEC_TMPVAR_TMPVAR_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;

	op1 = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
	op2 = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);

	if (((IS_TMP_VAR|IS_VAR) == IS_CONST || EXPECTED(Z_TYPE_P(op1) == IS_STRING)) &&
	    ((IS_TMP_VAR|IS_VAR) == IS_CONST || EXPECTED(Z_TYPE_P(op2) == IS_STRING))) {
		zend_string *op1_str = Z_STR_P(op1);
		zend_string *op2_str = Z_STR_P(op2);
		zend_string *str;
		uint32_t flags = ZSTR_GET_COPYABLE_CONCAT_PROPERTIES_BOTH(op1_str, op2_str);

		if ((IS_TMP_VAR|IS_VAR) != IS_CONST && UNEXPECTED(ZSTR_LEN(op1_str) == 0)) {
			if ((IS_TMP_VAR|IS_VAR) == IS_CONST || (IS_TMP_VAR|IS_VAR) == IS_CV) {
				ZVAL_STR_COPY(EX_VAR(opline->result.var), op2_str);
			} else {
				ZVAL_STR(EX_VAR(opline->result.var), op2_str);
			}
			if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
				zend_string_release_ex(op1_str, 0);
			}
		} else if ((IS_TMP_VAR|IS_VAR) != IS_CONST && UNEXPECTED(ZSTR_LEN(op2_str) == 0)) {
			if ((IS_TMP_VAR|IS_VAR) == IS_CONST || (IS_TMP_VAR|IS_VAR) == IS_CV) {
				ZVAL_STR_COPY(EX_VAR(opline->result.var), op1_str);
			} else {
				ZVAL_STR(EX_VAR(opline->result.var), op1_str);
			}
			if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
				zend_string_release_ex(op2_str, 0);
			}
		} else if ((IS_TMP_VAR|IS_VAR) != IS_CONST && (IS_TMP_VAR|IS_VAR) != IS_CV &&
		    !ZSTR_IS_INTERNED(op1_str) && GC_REFCOUNT(op1_str) == 1) {
			size_t len = ZSTR_LEN(op1_str);

			if (UNEXPECTED(len > ZSTR_MAX_LEN - ZSTR_LEN(op2_str))) {
				zend_error_noreturn(E_ERROR, "Integer overflow in memory allocation");
			}
			str = zend_string_extend(op1_str, len + ZSTR_LEN(op2_str), 0);
			memcpy(ZSTR_VAL(str) + len, ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
			GC_ADD_FLAGS(str, flags);
			ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
			if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
				zend_string_release_ex(op2_str, 0);
			}
		} else {
			str = zend_string_alloc(ZSTR_LEN(op1_str) + ZSTR_LEN(op2_str), 0);
			memcpy(ZSTR_VAL(str), ZSTR_VAL(op1_str), ZSTR_LEN(op1_str));
			memcpy(ZSTR_VAL(str) + ZSTR_LEN(op1_str), ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
			GC_ADD_FLAGS(str, flags);
			ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
			if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
				zend_string_release_ex(op1_str, 0);
			}
			if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
				zend_string_release_ex(op2_str, 0);
			}
		}
		ZEND_VM_NEXT_OPCODE();
	} else {
		SAVE_OPLINE();

		if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
			op1 = ZVAL_UNDEFINED_OP1();
		}
		if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(op2) == IS_UNDEF)) {
			op2 = ZVAL_UNDEFINED_OP2();
		}
		concat_function(EX_VAR(opline->result.var), op1, op2);
		zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
		zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
	}
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_IS_EQUAL_SPEC_TMPVAR_TMPVAR_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;
	double d1, d2;

	op1 = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
	op2 = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
	if (1 && (IS_TMP_VAR|IS_VAR) == IS_CONST && (IS_TMP_VAR|IS_VAR) == IS_CONST) {
		/* pass */
	} else if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
		if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
			if (EXPECTED(Z_LVAL_P(op1) == Z_LVAL_P(op2))) {
is_equal_true:
				ZEND_VM_SMART_BRANCH_TRUE_NONE();
			} else {
is_equal_false:
				ZEND_VM_SMART_BRANCH_FALSE_NONE();
			}
		} else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
			d1 = (double)Z_LVAL_P(op1);
			d2 = Z_DVAL_P(op2);
			goto is_equal_double;
		}
	} else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) {
		if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
			d1 = Z_DVAL_P(op1);
			d2 = Z_DVAL_P(op2);
is_equal_double:
			if (d1 == d2) {
				goto is_equal_true;
			} else {
				goto is_equal_false;
			}
		} else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
			d1 = Z_DVAL_P(op1);
			d2 = (double)Z_LVAL_P(op2);
			goto is_equal_double;
		}
	} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
		if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
			bool result = zend_fast_equal_strings(Z_STR_P(op1), Z_STR_P(op2));
			if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
				zval_ptr_dtor_str(op1);
			}
			if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
				zval_ptr_dtor_str(op2);
			}
			if (result) {
				goto is_equal_true;
			} else {
				goto is_equal_false;
			}
		}
	}
	ZEND_VM_DISPATCH_TO_HELPER(zend_is_equal_helper_SPEC_TAILCALL(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_EX op1, op2));
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_IS_EQUAL_SPEC_TMPVAR_TMPVAR_JMPZ_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;
	double d1, d2;

	op1 = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
	op2 = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
	if (1 && (IS_TMP_VAR|IS_VAR) == IS_CONST && (IS_TMP_VAR|IS_VAR) == IS_CONST) {
		/* pass */
	} else if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
		if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
			if (EXPECTED(Z_LVAL_P(op1) == Z_LVAL_P(op2))) {
is_equal_true:
				ZEND_VM_SMART_BRANCH_TRUE_JMPZ();
			} else {
is_equal_false:
				ZEND_VM_SMART_BRANCH_FALSE_JMPZ();
			}
		} else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
			d1 = (double)Z_LVAL_P(op1);
			d2 = Z_DVAL_P(op2);
			goto is_equal_double;
		}
	} else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) {
		if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
			d1 = Z_DVAL_P(op1);
			d2 = Z_DVAL_P(op2);
is_equal_double:
			if (d1 == d2) {
				goto is_equal_true;
			} else {
				goto is_equal_false;
			}
		} else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
			d1 = Z_DVAL_P(op1);
			d2 = (double)Z_LVAL_P(op2);
			goto is_equal_double;
		}
	} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
		if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
			bool result = zend_fast_equal_strings(Z_STR_P(op1), Z_STR_P(op2));
			if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
				zval_ptr_dtor_str(op1);
			}
			if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
				zval_ptr_dtor_str(op2);
			}
			if (result) {
				goto is_equal_true;
			} else {
				goto is_equal_false;
			}
		}
	}
	ZEND_VM_DISPATCH_TO_HELPER(zend_is_equal_helper_SPEC_TAILCALL(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_EX op1, op2));
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_IS_EQUAL_SPEC_TMPVAR_TMPVAR_JMPNZ_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;
	double d1, d2;

	op1 = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
	op2 = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
	if (1 && (IS_TMP_VAR|IS_VAR) == IS_CONST && (IS_TMP_VAR|IS_VAR) == IS_CONST) {
		/* pass */
	} else if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
		if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
			if (EXPECTED(Z_LVAL_P(op1) == Z_LVAL_P(op2))) {
is_equal_true:
				ZEND_VM_SMART_BRANCH_TRUE_JMPNZ();
			} else {
is_equal_false:
				ZEND_VM_SMART_BRANCH_FALSE_JMPNZ();
			}
		} else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
			d1 = (double)Z_LVAL_P(op1);
			d2 = Z_DVAL_P(op2);
			goto is_equal_double;
		}
	} else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) {
		if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
			d1 = Z_DVAL_P(op1);
			d2 = Z_DVAL_P(op2);
is_equal_double:
			if (d1 == d2) {
				goto is_equal_true;
			} else {
				goto is_equal_false;
			}
		} else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
			d1 = Z_DVAL_P(op1);
			d2 = (double)Z_LVAL_P(op2);
			goto is_equal_double;
		}
	} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
		if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
			bool result = zend_fast_equal_strings(Z_STR_P(op1), Z_STR_P(op2));
			if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
				zval_ptr_dtor_str(op1);
			}
			if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
				zval_ptr_dtor_str(op2);
			}
			if (result) {
				goto is_equal_true;
			} else {
				goto is_equal_false;
			}
		}
	}
	ZEND_VM_DISPATCH_TO_HELPER(zend_is_equal_helper_SPEC_TAILCALL(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_EX op1, op2));
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_TMPVAR_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;
	double d1, d2;

	op1 = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
	op2 = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
	if (1 && (IS_TMP_VAR|IS_VAR) == IS_CONST && (IS_TMP_VAR|IS_VAR) == IS_CONST) {
		/* pass */
	} else if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
		if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
			if (EXPECTED(Z_LVAL_P(op1) != Z_LVAL_P(op2))) {
is_not_equal_true:
				ZEND_VM_SMART_BRANCH_TRUE_NONE();
			} else {
is_not_equal_false:
				ZEND_VM_SMART_BRANCH_FALSE_NONE();
			}
		} else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
			d1 = (double)Z_LVAL_P(op1);
			d2 = Z_DVAL_P(op2);
			goto is_not_equal_double;
		}
	} else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) {
		if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
			d1 = Z_DVAL_P(op1);
			d2 = Z_DVAL_P(op2);
is_not_equal_double:
			if (d1 != d2) {
				goto is_not_equal_true;
			} else {
				goto is_not_equal_false;
			}
		} else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
			d1 = Z_DVAL_P(op1);
			d2 = (double)Z_LVAL_P(op2);
			goto is_not_equal_double;
		}
	} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
		if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
			bool result = zend_fast_equal_strings(Z_STR_P(op1), Z_STR_P(op2));
			if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
				zval_ptr_dtor_str(op1);
			}
			if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
				zval_ptr_dtor_str(op2);
			}
			if (!result) {
				goto is_not_equal_true;
			} else {
				goto is_not_equal_false;
			}
		}
	}
	ZEND_VM_DISPATCH_TO_HELPER(zend_is_not_equal_helper_SPEC_TAILCALL(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_EX op1, op2));
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_TMPVAR_JMPZ_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;
	double d1, d2;

	op1 = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
	op2 = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
	if (1 && (IS_TMP_VAR|IS_VAR) == IS_CONST && (IS_TMP_VAR|IS_VAR) == IS_CONST) {
		/* pass */
	} else if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
		if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
			if (EXPECTED(Z_LVAL_P(op1) != Z_LVAL_P(op2))) {
is_not_equal_true:
				ZEND_VM_SMART_BRANCH_TRUE_JMPZ();
			} else {
is_not_equal_false:
				ZEND_VM_SMART_BRANCH_FALSE_JMPZ();
			}
		} else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
			d1 = (double)Z_LVAL_P(op1);
			d2 = Z_DVAL_P(op2);
			goto is_not_equal_double;
		}
	} else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) {
		if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
			d1 = Z_DVAL_P(op1);
			d2 = Z_DVAL_P(op2);
is_not_equal_double:
			if (d1 != d2) {
				goto is_not_equal_true;
			} else {
				goto is_not_equal_false;
			}
		} else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
			d1 = Z_DVAL_P(op1);
			d2 = (double)Z_LVAL_P(op2);
			goto is_not_equal_double;
		}
	} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
		if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
			bool result = zend_fast_equal_strings(Z_STR_P(op1), Z_STR_P(op2));
			if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
				zval_ptr_dtor_str(op1);
			}
			if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
				zval_ptr_dtor_str(op2);
			}
			if (!result) {
				goto is_not_equal_true;
			} else {
				goto is_not_equal_false;
			}
		}
	}
	ZEND_VM_DISPATCH_TO_HELPER(zend_is_not_equal_helper_SPEC_TAILCALL(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_EX op1, op2));
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_TMPVAR_JMPNZ_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;
	double d1, d2;

	op1 = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
	op2 = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
	if (1 && (IS_TMP_VAR|IS_VAR) == IS_CONST && (IS_TMP_VAR|IS_VAR) == IS_CONST) {
		/* pass */
	} else if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
		if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
			if (EXPECTED(Z_LVAL_P(op1) != Z_LVAL_P(op2))) {
is_not_equal_true:
				ZEND_VM_SMART_BRANCH_TRUE_JMPNZ();
			} else {
is_not_equal_false:
				ZEND_VM_SMART_BRANCH_FALSE_JMPNZ();
			}
		} else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
			d1 = (double)Z_LVAL_P(op1);
			d2 = Z_DVAL_P(op2);
			goto is_not_equal_double;
		}
	} else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) {
		if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
			d1 = Z_DVAL_P(op1);
			d2 = Z_DVAL_P(op2);
is_not_equal_double:
			if (d1 != d2) {
				goto is_not_equal_true;
			} else {
				goto is_not_equal_false;
			}
		} else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
			d1 = Z_DVAL_P(op1);
			d2 = (double)Z_LVAL_P(op2);
			goto is_not_equal_double;
		}
	} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
		if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
			bool result = zend_fast_equal_strings(Z_STR_P(op1), Z_STR_P(op2));
			if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
				zval_ptr_dtor_str(op1);
			}
			if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
				zval_ptr_dtor_str(op2);
			}
			if (!result) {
				goto is_not_equal_true;
			} else {
				goto is_not_equal_false;
			}
		}
	}
	ZEND_VM_DISPATCH_TO_HELPER(zend_is_not_equal_helper_SPEC_TAILCALL(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_EX op1, op2));
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_SPACESHIP_SPEC_TMPVAR_TMPVAR_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;

	SAVE_OPLINE();
	op1 = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
	op2 = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
	compare_function(EX_VAR(opline->result.var), op1, op2);
	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_BOOL_XOR_SPEC_TMPVAR_TMPVAR_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;

	SAVE_OPLINE();
	op1 = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
	op2 = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
	boolean_xor_function(EX_VAR(opline->result.var), op1, op2);
	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_FETCH_DIM_R_SPEC_TMPVAR_TMPVAR_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *container, *dim, *value;

	SAVE_OPLINE();
	container = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
	dim = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
	if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
		if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
fetch_dim_r_array:
			value = zend_fetch_dimension_address_inner(Z_ARRVAL_P(container), dim, (IS_TMP_VAR|IS_VAR), BP_VAR_R EXECUTE_DATA_CC);
			ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
		} else if (EXPECTED(Z_TYPE_P(container) == IS_REFERENCE)) {
			container = Z_REFVAL_P(container);
			if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
				goto fetch_dim_r_array;
			} else {
				goto fetch_dim_r_slow;
			}
		} else {
fetch_dim_r_slow:
			if ((IS_TMP_VAR|IS_VAR) == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
				dim++;
			}
			zend_fetch_dimension_address_read_R_slow(container, dim OPLINE_CC EXECUTE_DATA_CC);
		}
	} else {
		zend_fetch_dimension_address_read_R(container, dim, (IS_TMP_VAR|IS_VAR) OPLINE_CC EXECUTE_DATA_CC);
	}
	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_FETCH_DIM_IS_SPEC_TMPVAR_TMPVAR_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *container;

	SAVE_OPLINE();
	container = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
	zend_fetch_dimension_address_read_IS(container, _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC), (IS_TMP_VAR|IS_VAR) OPLINE_CC EXECUTE_DATA_CC);
	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_FETCH_OBJ_R_SPEC_TMPVAR_TMPVAR_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *container;
	void **cache_slot = NULL;

	SAVE_OPLINE();
	container = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);

	if ((IS_TMP_VAR|IS_VAR) == IS_CONST ||
	    ((IS_TMP_VAR|IS_VAR) != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
		do {
			if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
				container = Z_REFVAL_P(container);
				if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
					break;
				}
			}
			if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
				ZVAL_UNDEFINED_OP1();
			}
			zend_wrong_property_read(container, _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC));
			ZVAL_NULL(EX_VAR(opline->result.var));
			goto fetch_obj_r_finish;
		} while (0);
	}

	/* here we are sure we are dealing with an object */
	do {
		zend_object *zobj = Z_OBJ_P(container);
		zend_string *name, *tmp_name;
		zval *retval;

		if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
			cache_slot = CACHE_ADDR(opline->extended_value & ~ZEND_FETCH_REF /* FUNC_ARG fetch may contain it */);

			if (EXPECTED(zobj->ce == CACHED_PTR_EX(cache_slot))) {
				uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);

				if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
fetch_obj_r_simple:
					retval = OBJ_PROP(zobj, prop_offset);
					if (EXPECTED(Z_TYPE_INFO_P(retval) != IS_UNDEF)) {
						if (0 || ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) != 0) {
							goto fetch_obj_r_copy;
						} else {
fetch_obj_r_fast_copy:
							ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
							ZEND_VM_NEXT_OPCODE();
						}
					}
				} else if (UNEXPECTED(IS_HOOKED_PROPERTY_OFFSET(prop_offset))) {
					zend_property_info *prop_info = CACHED_PTR_EX(cache_slot + 2);
					if (ZEND_IS_PROPERTY_HOOK_SIMPLE_READ(prop_offset)) {
						prop_offset = prop_info->offset;
						goto fetch_obj_r_simple;
					} else if (EXPECTED(ZEND_IS_PROPERTY_HOOK_SIMPLE_GET(prop_offset))) {
						zend_function *hook = prop_info->hooks[ZEND_PROPERTY_HOOK_GET];
						ZEND_ASSERT(hook->type == ZEND_USER_FUNCTION);
						ZEND_ASSERT(RUN_TIME_CACHE(&hook->op_array));

						uint32_t call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_HAS_THIS;
						if ((IS_TMP_VAR|IS_VAR) & IS_CV) {
							GC_ADDREF(zobj);
						}
						if ((IS_TMP_VAR|IS_VAR) & (IS_CV|IS_VAR|IS_TMP_VAR)) {
							call_info |= ZEND_CALL_RELEASE_THIS;
						}
						zend_execute_data *call = zend_vm_stack_push_call_frame(call_info, hook, 0, zobj);
						call->prev_execute_data = execute_data;
						call->call = NULL;
						call->return_value = EX_VAR(opline->result.var);
						call->run_time_cache = RUN_TIME_CACHE(&hook->op_array);

						execute_data = call;
						EG(current_execute_data) = execute_data;
						zend_init_cvs(0, hook->op_array.last_var EXECUTE_DATA_CC);

#if defined(ZEND_VM_IP_GLOBAL_REG) && ((ZEND_VM_KIND == ZEND_VM_KIND_CALL) || (ZEND_VM_KIND == ZEND_VM_KIND_HYBRID))
						opline = hook->op_array.opcodes;
#else
						EX(opline) = hook->op_array.opcodes;
#endif
						LOAD_OPLINE_EX();




						ZEND_VM_ENTER_EX();
					}
					/* Fall through to read_property for hooks. */
				} else if (EXPECTED(zobj->properties != NULL)) {
					ZEND_ASSERT(IS_DYNAMIC_PROPERTY_OFFSET(prop_offset));
					name = Z_STR_P(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC));
					if (!IS_UNKNOWN_DYNAMIC_PROPERTY_OFFSET(prop_offset)) {
						uintptr_t idx = ZEND_DECODE_DYN_PROP_OFFSET(prop_offset);

						if (EXPECTED(idx < zobj->properties->nNumUsed * sizeof(Bucket))) {
							Bucket *p = (Bucket*)((char*)zobj->properties->arData + idx);

							if (EXPECTED(p->key == name) ||
							    (EXPECTED(p->h == ZSTR_H(name)) &&
							     EXPECTED(p->key != NULL) &&
							     EXPECTED(zend_string_equal_content(p->key, name)))) {
								retval = &p->val;
								if (0 || ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) != 0) {
									goto fetch_obj_r_copy;
								} else {
									goto fetch_obj_r_fast_copy;
								}
							}
						}
						CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_DYNAMIC_PROPERTY_OFFSET);
					}
					retval = zend_hash_find_known_hash(zobj->properties, name);
					if (EXPECTED(retval)) {
						uintptr_t idx = (char*)retval - (char*)zobj->properties->arData;
						CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_ENCODE_DYN_PROP_OFFSET(idx));
						if (0 || ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) != 0) {
							goto fetch_obj_r_copy;
						} else {
							goto fetch_obj_r_fast_copy;
						}
					}
				}
			}
			name = Z_STR_P(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC));
		} else {
			name = zval_try_get_tmp_string(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC), &tmp_name);
			if (UNEXPECTED(!name)) {
				ZVAL_UNDEF(EX_VAR(opline->result.var));
				break;
			}
		}

#if ZEND_DEBUG
		/* For non-standard object handlers, verify a declared property type in debug builds.
		 * Fetch prop_info before calling read_property(), as it may deallocate the object. */
		zend_property_info *prop_info = NULL;
		if (zobj->handlers->read_property != zend_std_read_property) {
			prop_info = zend_get_property_info(zobj->ce, name, /* silent */ true);
		}
#endif
		retval = zobj->handlers->read_property(zobj, name, BP_VAR_R, cache_slot, EX_VAR(opline->result.var));
#if ZEND_DEBUG
		if (!EG(exception) && prop_info && prop_info != ZEND_WRONG_PROPERTY_INFO
				&& ZEND_TYPE_IS_SET(prop_info->type)) {
			ZVAL_OPT_DEREF(retval);
			zend_verify_property_type(prop_info, retval, /* strict */ true);
		}
#endif

		if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
			zend_tmp_string_release(tmp_name);
		}

		if (retval != EX_VAR(opline->result.var)) {
fetch_obj_r_copy:
			ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
		} else if (UNEXPECTED(Z_ISREF_P(retval))) {
			zend_unwrap_reference(retval);
		}
	} while (0);

fetch_obj_r_finish:
	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_TMPVAR_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *container;
	void **cache_slot = NULL;

	SAVE_OPLINE();
	container = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);

	if ((IS_TMP_VAR|IS_VAR) == IS_CONST ||
	    ((IS_TMP_VAR|IS_VAR) != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
		do {
			if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
				container = Z_REFVAL_P(container);
				if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
					break;
				}
			}
			if ((IS_TMP_VAR|IS_VAR) == IS_CV && Z_TYPE_P(EX_VAR(opline->op2.var)) == IS_UNDEF) {
				ZVAL_UNDEFINED_OP2();
			}
			ZVAL_NULL(EX_VAR(opline->result.var));
			goto fetch_obj_is_finish;
		} while (0);
	}

	/* here we are sure we are dealing with an object */
	do {
		zend_object *zobj = Z_OBJ_P(container);
		zend_string *name, *tmp_name;
		zval *retval;

		if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
			cache_slot = CACHE_ADDR(opline->extended_value);

			if (EXPECTED(zobj->ce == CACHED_PTR_EX(cache_slot))) {
				uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);

				if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
fetch_obj_is_simple:
					retval = OBJ_PROP(zobj, prop_offset);
					if (EXPECTED(Z_TYPE_P(retval) != IS_UNDEF)) {
						if (0 || ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) != 0) {
							goto fetch_obj_is_copy;
						} else {
fetch_obj_is_fast_copy:
							ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
							ZEND_VM_NEXT_OPCODE();
						}
					}
				} else if (UNEXPECTED(IS_HOOKED_PROPERTY_OFFSET(prop_offset))) {
					if (ZEND_IS_PROPERTY_HOOK_SIMPLE_READ(prop_offset)) {
						zend_property_info *prop_info = CACHED_PTR_EX(cache_slot + 2);
						prop_offset = prop_info->offset;
						goto fetch_obj_is_simple;
					}
					/* Fall through to read_property for hooks. */
				} else if (EXPECTED(zobj->properties != NULL)) {
					ZEND_ASSERT(IS_DYNAMIC_PROPERTY_OFFSET(prop_offset));
					name = Z_STR_P(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC));
					if (!IS_UNKNOWN_DYNAMIC_PROPERTY_OFFSET(prop_offset)) {
						uintptr_t idx = ZEND_DECODE_DYN_PROP_OFFSET(prop_offset);

						if (EXPECTED(idx < zobj->properties->nNumUsed * sizeof(Bucket))) {
							Bucket *p = (Bucket*)((char*)zobj->properties->arData + idx);

							if (EXPECTED(p->key == name) ||
							    (EXPECTED(p->h == ZSTR_H(name)) &&
							     EXPECTED(p->key != NULL) &&
							     EXPECTED(zend_string_equal_content(p->key, name)))) {
								retval = &p->val;
								if (0 || ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) != 0) {
									goto fetch_obj_is_copy;
								} else {
									goto fetch_obj_is_fast_copy;
								}
							}
						}
						CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_DYNAMIC_PROPERTY_OFFSET);
					}
					retval = zend_hash_find_known_hash(zobj->properties, name);
					if (EXPECTED(retval)) {
						uintptr_t idx = (char*)retval - (char*)zobj->properties->arData;
						CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_ENCODE_DYN_PROP_OFFSET(idx));
						if (0 || ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) != 0) {
							goto fetch_obj_is_copy;
						} else {
							goto fetch_obj_is_fast_copy;
						}
					}
				}
			}
			name = Z_STR_P(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC));
		} else {
			name = zval_try_get_tmp_string(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC), &tmp_name);
			if (UNEXPECTED(!name)) {
				ZVAL_UNDEF(EX_VAR(opline->result.var));
				break;
			}
		}

		retval = zobj->handlers->read_property(zobj, name, BP_VAR_IS, cache_slot, EX_VAR(opline->result.var));

		if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
			zend_tmp_string_release(tmp_name);
		}

		if (retval != EX_VAR(opline->result.var)) {
fetch_obj_is_copy:
			ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
		} else if (UNEXPECTED(Z_ISREF_P(retval))) {
			zend_unwrap_reference(retval);
		}
	} while (0);

fetch_obj_is_finish:
	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_FAST_CONCAT_SPEC_TMPVAR_TMPVAR_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;
	zend_string *op1_str, *op2_str, *str;


	op1 = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
	op2 = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
	if (((IS_TMP_VAR|IS_VAR) == IS_CONST || EXPECTED(Z_TYPE_P(op1) == IS_STRING)) &&
	    ((IS_TMP_VAR|IS_VAR) == IS_CONST || EXPECTED(Z_TYPE_P(op2) == IS_STRING))) {
		zend_string *op1_str = Z_STR_P(op1);
		zend_string *op2_str = Z_STR_P(op2);
		zend_string *str;
		uint32_t flags = ZSTR_GET_COPYABLE_CONCAT_PROPERTIES_BOTH(op1_str, op2_str);

		if ((IS_TMP_VAR|IS_VAR) != IS_CONST && UNEXPECTED(ZSTR_LEN(op1_str) == 0)) {
			if ((IS_TMP_VAR|IS_VAR) == IS_CONST || (IS_TMP_VAR|IS_VAR) == IS_CV) {
				ZVAL_STR_COPY(EX_VAR(opline->result.var), op2_str);
			} else {
				ZVAL_STR(EX_VAR(opline->result.var), op2_str);
			}
			if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
				zend_string_release_ex(op1_str, 0);
			}
		} else if ((IS_TMP_VAR|IS_VAR) != IS_CONST && UNEXPECTED(ZSTR_LEN(op2_str) == 0)) {
			if ((IS_TMP_VAR|IS_VAR) == IS_CONST || (IS_TMP_VAR|IS_VAR) == IS_CV) {
				ZVAL_STR_COPY(EX_VAR(opline->result.var), op1_str);
			} else {
				ZVAL_STR(EX_VAR(opline->result.var), op1_str);
			}
			if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
				zend_string_release_ex(op2_str, 0);
			}
		} else if ((IS_TMP_VAR|IS_VAR) != IS_CONST && (IS_TMP_VAR|IS_VAR) != IS_CV &&
		    !ZSTR_IS_INTERNED(op1_str) && GC_REFCOUNT(op1_str) == 1) {
			size_t len = ZSTR_LEN(op1_str);

			str = zend_string_extend(op1_str, len + ZSTR_LEN(op2_str), 0);
			memcpy(ZSTR_VAL(str) + len, ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
			GC_ADD_FLAGS(str, flags);
			ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
			if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
				zend_string_release_ex(op2_str, 0);
			}
		} else {
			str = zend_string_alloc(ZSTR_LEN(op1_str) + ZSTR_LEN(op2_str), 0);
			memcpy(ZSTR_VAL(str), ZSTR_VAL(op1_str), ZSTR_LEN(op1_str));
			memcpy(ZSTR_VAL(str) + ZSTR_LEN(op1_str), ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
			GC_ADD_FLAGS(str, flags);
			ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
			if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
				zend_string_release_ex(op1_str, 0);
			}
			if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
				zend_string_release_ex(op2_str, 0);
			}
		}
		ZEND_VM_NEXT_OPCODE();
	}

	SAVE_OPLINE();
	if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
		op1_str = Z_STR_P(op1);
	} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
		op1_str = zend_string_copy(Z_STR_P(op1));
	} else {
		if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
			ZVAL_UNDEFINED_OP1();
		}
		op1_str = zval_get_string_func(op1);
	}
	if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
		op2_str = Z_STR_P(op2);
	} else if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
		op2_str = zend_string_copy(Z_STR_P(op2));
	} else {
		if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(op2) == IS_UNDEF)) {
			ZVAL_UNDEFINED_OP2();
		}
		op2_str = zval_get_string_func(op2);
	}
	do {
		if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
			if (UNEXPECTED(ZSTR_LEN(op1_str) == 0)) {
				if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
					if (UNEXPECTED(Z_REFCOUNTED_P(op2))) {
						GC_ADDREF(op2_str);
					}
				}
				ZVAL_STR(EX_VAR(opline->result.var), op2_str);
				zend_string_release_ex(op1_str, 0);
				break;
			}
		}
		if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
			if (UNEXPECTED(ZSTR_LEN(op2_str) == 0)) {
				if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
					if (UNEXPECTED(Z_REFCOUNTED_P(op1))) {
						GC_ADDREF(op1_str);
					}
				}
				ZVAL_STR(EX_VAR(opline->result.var), op1_str);
				zend_string_release_ex(op2_str, 0);
				break;
			}
		}
		str = zend_string_alloc(ZSTR_LEN(op1_str) + ZSTR_LEN(op2_str), 0);
		memcpy(ZSTR_VAL(str), ZSTR_VAL(op1_str), ZSTR_LEN(op1_str));
		memcpy(ZSTR_VAL(str) + ZSTR_LEN(op1_str), ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);

		ZSTR_COPY_CONCAT_PROPERTIES_BOTH(str, op1_str, op2_str);
		ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
		if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
			zend_string_release_ex(op1_str, 0);
		}
		if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
			zend_string_release_ex(op2_str, 0);
		}
	} while (0);
	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_TMPVAR_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *function_name;
	zval *object;
	zend_function *fbc;
	zend_class_entry *called_scope;
	zend_object *obj;
	zend_execute_data *call;
	uint32_t call_info;

	SAVE_OPLINE();

	object = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);

	if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
		function_name = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
	}

	if ((IS_TMP_VAR|IS_VAR) != IS_CONST &&
	    UNEXPECTED(Z_TYPE_P(function_name) != IS_STRING)) {
		do {
			if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && Z_ISREF_P(function_name)) {
				function_name = Z_REFVAL_P(function_name);
				if (EXPECTED(Z_TYPE_P(function_name) == IS_STRING)) {
					break;
				}
			} else if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) {
				ZVAL_UNDEFINED_OP2();
				if (UNEXPECTED(EG(exception) != NULL)) {
					zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
					HANDLE_EXCEPTION();
				}
			}
			zend_throw_error(NULL, "Method name must be a string");
			zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
			zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
			HANDLE_EXCEPTION();
		} while (0);
	}

	if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED) {
		obj = Z_OBJ_P(object);
	} else {
		do {
			if ((IS_TMP_VAR|IS_VAR) != IS_CONST && EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
				obj = Z_OBJ_P(object);
			} else {
				if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(object))) {
					zend_reference *ref = Z_REF_P(object);

					object = &ref->val;
					if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
						obj = Z_OBJ_P(object);
						if ((IS_TMP_VAR|IS_VAR) & IS_VAR) {
							if (UNEXPECTED(GC_DELREF(ref) == 0)) {
								efree_size(ref, sizeof(zend_reference));
							} else {
								Z_ADDREF_P(object);
							}
						}
						break;
					}
				}
				if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
					object = ZVAL_UNDEFINED_OP1();
					if (UNEXPECTED(EG(exception) != NULL)) {
						if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
							zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
						}
						HANDLE_EXCEPTION();
					}
				}
				if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
					function_name = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
				}
				zend_invalid_method_call(object, function_name);
				zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
				zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
				HANDLE_EXCEPTION();
			}
		} while (0);
	}

	called_scope = obj->ce;

	if ((IS_TMP_VAR|IS_VAR) == IS_CONST &&
	    EXPECTED(CACHED_PTR(opline->result.num) == called_scope)) {
		fbc = CACHED_PTR(opline->result.num + sizeof(void*));
	} else {
		zend_object *orig_obj = obj;

		if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
			function_name = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
		}

		/* First, locate the function. */
		fbc = obj->handlers->get_method(&obj, Z_STR_P(function_name), (((IS_TMP_VAR|IS_VAR) == IS_CONST) ? (RT_CONSTANT(opline, opline->op2) + 1) : NULL));
		if (UNEXPECTED(fbc == NULL)) {
			if (EXPECTED(!EG(exception))) {
				zend_undefined_method(orig_obj->ce, Z_STR_P(function_name));
			}
			zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
			if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_TMP_VAR)) && GC_DELREF(orig_obj) == 0) {
				zend_objects_store_del(orig_obj);
			}
			HANDLE_EXCEPTION();
		}
		if ((IS_TMP_VAR|IS_VAR) == IS_CONST &&
		    EXPECTED(!(fbc->common.fn_flags & (ZEND_ACC_CALL_VIA_TRAMPOLINE|ZEND_ACC_NEVER_CACHE))) &&
		    EXPECTED(obj == orig_obj)) {
			CACHE_POLYMORPHIC_PTR(opline->result.num, called_scope, fbc);
		}
		if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_TMP_VAR)) && UNEXPECTED(obj != orig_obj)) {
			GC_ADDREF(obj); /* For $this pointer */
			if (GC_DELREF(orig_obj) == 0) {
				zend_objects_store_del(orig_obj);
			}
		}
		if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!RUN_TIME_CACHE(&fbc->op_array))) {
			init_func_run_time_cache(&fbc->op_array);
		}
	}

	if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
		zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
	}

	call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_HAS_THIS;
	if (UNEXPECTED((fbc->common.fn_flags & ZEND_ACC_STATIC) != 0)) {
		if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_TMP_VAR)) && GC_DELREF(obj) == 0) {
			zend_objects_store_del(obj);
			if (UNEXPECTED(EG(exception))) {
				HANDLE_EXCEPTION();
			}
		}
		/* call static method */
		obj = (zend_object*)called_scope;
		call_info = ZEND_CALL_NESTED_FUNCTION;
	} else if ((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_TMP_VAR|IS_CV)) {
		if ((IS_TMP_VAR|IS_VAR) == IS_CV) {
			GC_ADDREF(obj); /* For $this pointer */
		}
		/* CV may be changed indirectly (e.g. when it's a reference) */
		call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_HAS_THIS | ZEND_CALL_RELEASE_THIS;
	}

	call = zend_vm_stack_push_call_frame(call_info,
		fbc, opline->extended_value, obj);
	call->prev_execute_data = EX(call);
	EX(call) = call;

	ZEND_VM_NEXT_OPCODE();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_CASE_SPEC_TMPVAR_TMPVAR_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;
	double d1, d2;

	op1 = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
	op2 = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
	if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
		if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
			if (EXPECTED(Z_LVAL_P(op1) == Z_LVAL_P(op2))) {
case_true:
				ZEND_VM_SMART_BRANCH_TRUE();
			} else {
case_false:
				ZEND_VM_SMART_BRANCH_FALSE();
			}
		} else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
			d1 = (double)Z_LVAL_P(op1);
			d2 = Z_DVAL_P(op2);
			goto case_double;
		}
	} else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) {
		if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
			d1 = Z_DVAL_P(op1);
			d2 = Z_DVAL_P(op2);
case_double:
			if (d1 == d2) {
				goto case_true;
			} else {
				goto case_false;
			}
		} else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
			d1 = Z_DVAL_P(op1);
			d2 = (double)Z_LVAL_P(op2);
			goto case_double;
		}
	} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
		if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
			bool result = zend_fast_equal_strings(Z_STR_P(op1), Z_STR_P(op2));
			zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
			if (result) {
				goto case_true;
			} else {
				goto case_false;
			}
		}
	}
	ZEND_VM_DISPATCH_TO_HELPER(zend_case_helper_SPEC_TAILCALL(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_EX op1, op2));
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_TMPVAR_TMPVAR_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *container;
	bool result;
	zend_ulong hval;
	zval *offset;

	SAVE_OPLINE();
	container = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
	offset = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);

	if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
		HashTable *ht;
		zval *value;
		zend_string *str;

isset_dim_obj_array:
		ht = Z_ARRVAL_P(container);
isset_again:
		if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) {
			str = Z_STR_P(offset);
			if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
				if (ZEND_HANDLE_NUMERIC(str, hval)) {
					goto num_index_prop;
				}
			}
			value = zend_hash_find_ex(ht, str, (IS_TMP_VAR|IS_VAR) == IS_CONST);
		} else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
			hval = Z_LVAL_P(offset);
num_index_prop:
			value = zend_hash_index_find(ht, hval);
		} else if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(offset))) {
			offset = Z_REFVAL_P(offset);
			goto isset_again;
		} else {
			value = zend_find_array_dim_slow(ht, offset EXECUTE_DATA_CC);
			if (UNEXPECTED(EG(exception))) {
				result = 0;
				goto isset_dim_obj_exit;
			}
		}

		if (!(opline->extended_value & ZEND_ISEMPTY)) {
			/* > IS_NULL means not IS_UNDEF and not IS_NULL */
			result = value != NULL && Z_TYPE_P(value) > IS_NULL &&
			    (!Z_ISREF_P(value) || Z_TYPE_P(Z_REFVAL_P(value)) != IS_NULL);

			if ((IS_TMP_VAR|IS_VAR) & (IS_CONST|IS_CV)) {
				/* avoid exception check */
				zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
				ZEND_VM_SMART_BRANCH(result, 0);
			}
		} else {
			result = (value == NULL || !i_zend_is_true(value));
		}
		goto isset_dim_obj_exit;
	} else if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(container))) {
		container = Z_REFVAL_P(container);
		if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
			goto isset_dim_obj_array;
		}
	}

	if ((IS_TMP_VAR|IS_VAR) == IS_CONST && Z_EXTRA_P(offset) == ZEND_EXTRA_VALUE) {
		offset++;
	}
	if (!(opline->extended_value & ZEND_ISEMPTY)) {
		result = zend_isset_dim_slow(container, offset EXECUTE_DATA_CC);
	} else {
		result = zend_isempty_dim_slow(container, offset EXECUTE_DATA_CC);
	}

isset_dim_obj_exit:
	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
	ZEND_VM_SMART_BRANCH(result, 1);
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TMPVAR_TMPVAR_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *container;
	int result;
	zval *offset;
	zend_string *name, *tmp_name;

	SAVE_OPLINE();
	container = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
	offset = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);

	if ((IS_TMP_VAR|IS_VAR) == IS_CONST ||
	    ((IS_TMP_VAR|IS_VAR) != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
		if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
			container = Z_REFVAL_P(container);
			if (UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT)) {
				result = (opline->extended_value & ZEND_ISEMPTY);
				goto isset_object_finish;
			}
		} else {
			result = (opline->extended_value & ZEND_ISEMPTY);
			goto isset_object_finish;
		}
	}

	if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
		name = Z_STR_P(offset);
	} else {
		name = zval_try_get_tmp_string(offset, &tmp_name);
		if (UNEXPECTED(!name)) {
			result = 0;
			goto isset_object_finish;
		}
	}

	result =
		(opline->extended_value & ZEND_ISEMPTY) ^
		Z_OBJ_HT_P(container)->has_property(Z_OBJ_P(container), name, (opline->extended_value & ZEND_ISEMPTY), (((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(opline->extended_value & ~ZEND_ISEMPTY) : NULL));

	if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
		zend_tmp_string_release(tmp_name);
	}

isset_object_finish:
	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
	ZEND_VM_SMART_BRANCH(result, 1);
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_ARRAY_KEY_EXISTS_SPEC_TMPVAR_TMPVAR_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE

	zval *key, *subject;
	HashTable *ht;
	bool result;

	SAVE_OPLINE();

	key = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
	subject = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);

	if (EXPECTED(Z_TYPE_P(subject) == IS_ARRAY)) {
array_key_exists_array:
		ht = Z_ARRVAL_P(subject);
		result = zend_array_key_exists_fast(ht, key OPLINE_CC EXECUTE_DATA_CC);
	} else {
		if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(subject))) {
			subject = Z_REFVAL_P(subject);
			if (EXPECTED(Z_TYPE_P(subject) == IS_ARRAY)) {
				goto array_key_exists_array;
			}
		}
		zend_array_key_exists_error(subject, key OPLINE_CC EXECUTE_DATA_CC);
		result = 0;
	}

	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
	ZEND_VM_SMART_BRANCH(result, 1);
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_INSTANCEOF_SPEC_TMPVAR_VAR_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *expr;
	bool result;

	SAVE_OPLINE();
	expr = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);

try_instanceof:
	if (Z_TYPE_P(expr) == IS_OBJECT) {
		zend_class_entry *ce;

		if (IS_VAR == IS_CONST) {
			ce = CACHED_PTR(opline->extended_value);
			if (UNEXPECTED(ce == NULL)) {
				ce = zend_lookup_class_ex(Z_STR_P(RT_CONSTANT(opline, opline->op2)), Z_STR_P(RT_CONSTANT(opline, opline->op2) + 1), ZEND_FETCH_CLASS_NO_AUTOLOAD);
				if (EXPECTED(ce)) {
					CACHE_PTR(opline->extended_value, ce);
				}
			}
		} else if (IS_VAR == IS_UNUSED) {
			ce = zend_fetch_class(NULL, opline->op2.num);
			if (UNEXPECTED(ce == NULL)) {
				zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
				ZVAL_UNDEF(EX_VAR(opline->result.var));
				HANDLE_EXCEPTION();
			}
		} else {
			ce = Z_CE_P(EX_VAR(opline->op2.var));
		}
		result = ce && instanceof_function(Z_OBJCE_P(expr), ce);
	} else if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && Z_TYPE_P(expr) == IS_REFERENCE) {
		expr = Z_REFVAL_P(expr);
		goto try_instanceof;
	} else {
		if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(expr) == IS_UNDEF)) {
			ZVAL_UNDEFINED_OP1();
		}
		result = 0;
	}
	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
	ZEND_VM_SMART_BRANCH(result, 1);
}

static zend_never_inline ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV_EX  zend_fetch_var_address_helper_SPEC_TMPVAR_UNUSED_TAILCALL(ZEND_OPCODE_HANDLER_ARGS_EX int type);
static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_FETCH_R_SPEC_TMPVAR_UNUSED_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	ZEND_VM_DISPATCH_TO_HELPER(zend_fetch_var_address_helper_SPEC_TMPVAR_UNUSED_TAILCALL(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_EX BP_VAR_R));
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_FETCH_W_SPEC_TMPVAR_UNUSED_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	ZEND_VM_DISPATCH_TO_HELPER(zend_fetch_var_address_helper_SPEC_TMPVAR_UNUSED_TAILCALL(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_EX BP_VAR_W));
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_FETCH_RW_SPEC_TMPVAR_UNUSED_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	ZEND_VM_DISPATCH_TO_HELPER(zend_fetch_var_address_helper_SPEC_TMPVAR_UNUSED_TAILCALL(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_EX BP_VAR_RW));
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_FETCH_FUNC_ARG_SPEC_TMPVAR_UNUSED_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	int fetch_type =
		(UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) ?
			BP_VAR_W : BP_VAR_R;
	ZEND_VM_DISPATCH_TO_HELPER(zend_fetch_var_address_helper_SPEC_TMPVAR_UNUSED_TAILCALL(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_EX fetch_type));
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_FETCH_UNSET_SPEC_TMPVAR_UNUSED_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	ZEND_VM_DISPATCH_TO_HELPER(zend_fetch_var_address_helper_SPEC_TMPVAR_UNUSED_TAILCALL(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_EX BP_VAR_UNSET));
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_FETCH_IS_SPEC_TMPVAR_UNUSED_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	ZEND_VM_DISPATCH_TO_HELPER(zend_fetch_var_address_helper_SPEC_TMPVAR_UNUSED_TAILCALL(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_EX BP_VAR_IS));
}

/* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CONST|VAR) */
static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_SEND_VAL_SPEC_TMPVAR_UNUSED_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *value, *arg;

	if (IS_UNUSED == IS_CONST) {
		SAVE_OPLINE();
		zend_string *arg_name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
		uint32_t arg_num;
		arg = zend_handle_named_arg(&EX(call), arg_name, &arg_num, CACHE_ADDR(opline->result.num));
		if (UNEXPECTED(!arg)) {
			zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
			HANDLE_EXCEPTION();
		}
	} else {
		arg = ZEND_CALL_VAR(EX(call), opline->result.var);
	}

	value = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
	ZVAL_COPY_VALUE(arg, value);
	if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
		if (UNEXPECTED(Z_OPT_REFCOUNTED_P(arg))) {
			Z_ADDREF_P(arg);
		}
	}
	ZEND_VM_NEXT_OPCODE();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_UNSET_VAR_SPEC_TMPVAR_UNUSED_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *varname;
	zend_string *name, *tmp_name;
	HashTable *target_symbol_table;

	SAVE_OPLINE();

	varname = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);

	if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
		name = Z_STR_P(varname);
	} else if (EXPECTED(Z_TYPE_P(varname) == IS_STRING)) {
		name = Z_STR_P(varname);
		tmp_name = NULL;
	} else {
		if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(varname) == IS_UNDEF)) {
			varname = ZVAL_UNDEFINED_OP1();
		}
		name = zval_try_get_tmp_string(varname, &tmp_name);
		if (UNEXPECTED(!name)) {
			zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
			HANDLE_EXCEPTION();
		}
	}

	target_symbol_table = zend_get_target_symbol_table(opline->extended_value EXECUTE_DATA_CC);
	zend_hash_del_ind(target_symbol_table, name);

	if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
		zend_tmp_string_release(tmp_name);
	}
	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

/* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CLASS_FETCH|CONST|VAR) */
static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_ISSET_ISEMPTY_VAR_SPEC_TMPVAR_UNUSED_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *value;
	bool result;
	zval *varname;
	zend_string *name, *tmp_name;
	HashTable *target_symbol_table;

	SAVE_OPLINE();
	varname = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
	if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
		name = Z_STR_P(varname);
	} else {
		name = zval_get_tmp_string(varname, &tmp_name);
	}

	target_symbol_table = zend_get_target_symbol_table(opline->extended_value EXECUTE_DATA_CC);
	value = zend_hash_find_ex(target_symbol_table, name, (IS_TMP_VAR|IS_VAR) == IS_CONST);

	if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
		zend_tmp_string_release(tmp_name);
	}
	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));

	if (!value) {
		result = (opline->extended_value & ZEND_ISEMPTY);
	} else {
		if (Z_TYPE_P(value) == IS_INDIRECT) {
			value = Z_INDIRECT_P(value);
		}
		if (!(opline->extended_value & ZEND_ISEMPTY)) {
			if (Z_ISREF_P(value)) {
				value = Z_REFVAL_P(value);
			}
			result = Z_TYPE_P(value) > IS_NULL;
		} else {
			result = !i_zend_is_true(value);
		}
	}

	ZEND_VM_SMART_BRANCH(result, true);
}

/* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CLASS_FETCH|CONST|VAR) */
static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_INSTANCEOF_SPEC_TMPVAR_UNUSED_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *expr;
	bool result;

	SAVE_OPLINE();
	expr = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);

try_instanceof:
	if (Z_TYPE_P(expr) == IS_OBJECT) {
		zend_class_entry *ce;

		if (IS_UNUSED == IS_CONST) {
			ce = CACHED_PTR(opline->extended_value);
			if (UNEXPECTED(ce == NULL)) {
				ce = zend_lookup_class_ex(Z_STR_P(RT_CONSTANT(opline, opline->op2)), Z_STR_P(RT_CONSTANT(opline, opline->op2) + 1), ZEND_FETCH_CLASS_NO_AUTOLOAD);
				if (EXPECTED(ce)) {
					CACHE_PTR(opline->extended_value, ce);
				}
			}
		} else if (IS_UNUSED == IS_UNUSED) {
			ce = zend_fetch_class(NULL, opline->op2.num);
			if (UNEXPECTED(ce == NULL)) {
				zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
				ZVAL_UNDEF(EX_VAR(opline->result.var));
				HANDLE_EXCEPTION();
			}
		} else {
			ce = Z_CE_P(EX_VAR(opline->op2.var));
		}
		result = ce && instanceof_function(Z_OBJCE_P(expr), ce);
	} else if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && Z_TYPE_P(expr) == IS_REFERENCE) {
		expr = Z_REFVAL_P(expr);
		goto try_instanceof;
	} else {
		if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(expr) == IS_UNDEF)) {
			ZVAL_UNDEFINED_OP1();
		}
		result = 0;
	}
	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
	ZEND_VM_SMART_BRANCH(result, 1);
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_COUNT_SPEC_TMPVAR_UNUSED_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1;
	zend_long count;

	SAVE_OPLINE();
	op1 = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);

	while (1) {
		if (Z_TYPE_P(op1) == IS_ARRAY) {
			count = zend_hash_num_elements(Z_ARRVAL_P(op1));
			break;
		} else if (Z_TYPE_P(op1) == IS_OBJECT) {
			zend_object *zobj = Z_OBJ_P(op1);

			/* first, we check if the handler is defined */
			if (zobj->handlers->count_elements) {
				if (SUCCESS == zobj->handlers->count_elements(zobj, &count)) {
					break;
				}
				if (UNEXPECTED(EG(exception))) {
					count = 0;
					break;
				}
			}

			/* if not and the object implements Countable we call its count() method */
			if (zend_class_implements_interface(zobj->ce, zend_ce_countable)) {
				zval retval;

				zend_function *count_fn = zend_hash_find_ptr(&zobj->ce->function_table, ZSTR_KNOWN(ZEND_STR_COUNT));
				zend_call_known_instance_method_with_0_params(count_fn, zobj, &retval);
				count = zval_get_long(&retval);
				zval_ptr_dtor(&retval);
				break;
			}

			/* If There's no handler and it doesn't implement Countable then emit a TypeError */
		} else if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) != 0 && Z_TYPE_P(op1) == IS_REFERENCE) {
			op1 = Z_REFVAL_P(op1);
			continue;
		} else if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
			ZVAL_UNDEFINED_OP1();
		}
		count = 0;
		zend_type_error("%s(): Argument #1 ($value) must be of type Countable|array, %s given", opline->extended_value ? "sizeof" : "count", zend_zval_value_name(op1));
		break;
	}

	ZVAL_LONG(EX_VAR(opline->result.var), count);
	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_COUNT_ARRAY_SPEC_TMPVAR_UNUSED_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zend_array *ht = Z_ARRVAL_P(_get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC));
	ZVAL_LONG(EX_VAR(opline->result.var), zend_hash_num_elements(ht));
	if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR) && !(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE) && !GC_DELREF(ht)) {
		SAVE_OPLINE();
		zend_array_destroy(ht);
		if (EG(exception)) {
			HANDLE_EXCEPTION();
		}
	}
	ZEND_VM_NEXT_OPCODE();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_GET_CLASS_SPEC_TMPVAR_UNUSED_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE

	if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED) {
		SAVE_OPLINE();
		if (UNEXPECTED(!EX(func)->common.scope)) {
			zend_throw_error(NULL, "get_class() without arguments must be called from within a class");
			ZVAL_UNDEF(EX_VAR(opline->result.var));
			HANDLE_EXCEPTION();
		} else {
			zend_error(E_DEPRECATED, "Calling get_class() without arguments is deprecated");
			ZVAL_STR_COPY(EX_VAR(opline->result.var), EX(func)->common.scope->name);
			if (UNEXPECTED(EG(exception))) {
				HANDLE_EXCEPTION();
			}
			ZEND_VM_NEXT_OPCODE();
		}
	} else {
		zval *op1;

		SAVE_OPLINE();
		op1 = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
		while (1) {
			if (Z_TYPE_P(op1) == IS_OBJECT) {
				ZVAL_STR_COPY(EX_VAR(opline->result.var), Z_OBJCE_P(op1)->name);
			} else if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) != 0 && Z_TYPE_P(op1) == IS_REFERENCE) {
				op1 = Z_REFVAL_P(op1);
				continue;
			} else {
				if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
					ZVAL_UNDEFINED_OP1();
				}
				zend_type_error("get_class(): Argument #1 ($object) must be of type object, %s given", zend_zval_value_name(op1));
				ZVAL_UNDEF(EX_VAR(opline->result.var));
			}
			break;
		}
		zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
	}
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_COPY_TMP_SPEC_TMPVAR_UNUSED_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *value = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
	zval *result = EX_VAR(opline->result.var);
	ZVAL_COPY(result, value);
	ZEND_VM_NEXT_OPCODE();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_DIV_SPEC_TMPVAR_CV_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;

	SAVE_OPLINE();
	op1 = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
	op2 = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
	div_function(EX_VAR(opline->result.var), op1, op2);
	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));


	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_POW_SPEC_TMPVAR_CV_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;

	SAVE_OPLINE();
	op1 = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
	op2 = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
	pow_function(EX_VAR(opline->result.var), op1, op2);
	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));


	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_CONCAT_SPEC_TMPVAR_CV_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;

	op1 = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
	op2 = EX_VAR(opline->op2.var);

	if (((IS_TMP_VAR|IS_VAR) == IS_CONST || EXPECTED(Z_TYPE_P(op1) == IS_STRING)) &&
	    (IS_CV == IS_CONST || EXPECTED(Z_TYPE_P(op2) == IS_STRING))) {
		zend_string *op1_str = Z_STR_P(op1);
		zend_string *op2_str = Z_STR_P(op2);
		zend_string *str;
		uint32_t flags = ZSTR_GET_COPYABLE_CONCAT_PROPERTIES_BOTH(op1_str, op2_str);

		if ((IS_TMP_VAR|IS_VAR) != IS_CONST && UNEXPECTED(ZSTR_LEN(op1_str) == 0)) {
			if (IS_CV == IS_CONST || IS_CV == IS_CV) {
				ZVAL_STR_COPY(EX_VAR(opline->result.var), op2_str);
			} else {
				ZVAL_STR(EX_VAR(opline->result.var), op2_str);
			}
			if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
				zend_string_release_ex(op1_str, 0);
			}
		} else if (IS_CV != IS_CONST && UNEXPECTED(ZSTR_LEN(op2_str) == 0)) {
			if ((IS_TMP_VAR|IS_VAR) == IS_CONST || (IS_TMP_VAR|IS_VAR) == IS_CV) {
				ZVAL_STR_COPY(EX_VAR(opline->result.var), op1_str);
			} else {
				ZVAL_STR(EX_VAR(opline->result.var), op1_str);
			}
			if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
				zend_string_release_ex(op2_str, 0);
			}
		} else if ((IS_TMP_VAR|IS_VAR) != IS_CONST && (IS_TMP_VAR|IS_VAR) != IS_CV &&
		    !ZSTR_IS_INTERNED(op1_str) && GC_REFCOUNT(op1_str) == 1) {
			size_t len = ZSTR_LEN(op1_str);

			if (UNEXPECTED(len > ZSTR_MAX_LEN - ZSTR_LEN(op2_str))) {
				zend_error_noreturn(E_ERROR, "Integer overflow in memory allocation");
			}
			str = zend_string_extend(op1_str, len + ZSTR_LEN(op2_str), 0);
			memcpy(ZSTR_VAL(str) + len, ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
			GC_ADD_FLAGS(str, flags);
			ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
			if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
				zend_string_release_ex(op2_str, 0);
			}
		} else {
			str = zend_string_alloc(ZSTR_LEN(op1_str) + ZSTR_LEN(op2_str), 0);
			memcpy(ZSTR_VAL(str), ZSTR_VAL(op1_str), ZSTR_LEN(op1_str));
			memcpy(ZSTR_VAL(str) + ZSTR_LEN(op1_str), ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
			GC_ADD_FLAGS(str, flags);
			ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
			if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
				zend_string_release_ex(op1_str, 0);
			}
			if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
				zend_string_release_ex(op2_str, 0);
			}
		}
		ZEND_VM_NEXT_OPCODE();
	} else {
		SAVE_OPLINE();

		if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
			op1 = ZVAL_UNDEFINED_OP1();
		}
		if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(op2) == IS_UNDEF)) {
			op2 = ZVAL_UNDEFINED_OP2();
		}
		concat_function(EX_VAR(opline->result.var), op1, op2);
		zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));


		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
	}
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_SPACESHIP_SPEC_TMPVAR_CV_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;

	SAVE_OPLINE();
	op1 = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
	op2 = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
	compare_function(EX_VAR(opline->result.var), op1, op2);
	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));


	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_FETCH_DIM_R_SPEC_TMPVAR_CV_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *container, *dim, *value;

	SAVE_OPLINE();
	container = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
	dim = EX_VAR(opline->op2.var);
	if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
		if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
fetch_dim_r_array:
			value = zend_fetch_dimension_address_inner(Z_ARRVAL_P(container), dim, IS_CV, BP_VAR_R EXECUTE_DATA_CC);
			ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
		} else if (EXPECTED(Z_TYPE_P(container) == IS_REFERENCE)) {
			container = Z_REFVAL_P(container);
			if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
				goto fetch_dim_r_array;
			} else {
				goto fetch_dim_r_slow;
			}
		} else {
fetch_dim_r_slow:
			if (IS_CV == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
				dim++;
			}
			zend_fetch_dimension_address_read_R_slow(container, dim OPLINE_CC EXECUTE_DATA_CC);
		}
	} else {
		zend_fetch_dimension_address_read_R(container, dim, IS_CV OPLINE_CC EXECUTE_DATA_CC);
	}


	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_FETCH_DIM_IS_SPEC_TMPVAR_CV_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *container;

	SAVE_OPLINE();
	container = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
	zend_fetch_dimension_address_read_IS(container, EX_VAR(opline->op2.var), IS_CV OPLINE_CC EXECUTE_DATA_CC);


	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_FETCH_OBJ_R_SPEC_TMPVAR_CV_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *container;
	void **cache_slot = NULL;

	SAVE_OPLINE();
	container = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);

	if ((IS_TMP_VAR|IS_VAR) == IS_CONST ||
	    ((IS_TMP_VAR|IS_VAR) != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
		do {
			if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
				container = Z_REFVAL_P(container);
				if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
					break;
				}
			}
			if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
				ZVAL_UNDEFINED_OP1();
			}
			zend_wrong_property_read(container, _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC));
			ZVAL_NULL(EX_VAR(opline->result.var));
			goto fetch_obj_r_finish;
		} while (0);
	}

	/* here we are sure we are dealing with an object */
	do {
		zend_object *zobj = Z_OBJ_P(container);
		zend_string *name, *tmp_name;
		zval *retval;

		if (IS_CV == IS_CONST) {
			cache_slot = CACHE_ADDR(opline->extended_value & ~ZEND_FETCH_REF /* FUNC_ARG fetch may contain it */);

			if (EXPECTED(zobj->ce == CACHED_PTR_EX(cache_slot))) {
				uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);

				if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
fetch_obj_r_simple:
					retval = OBJ_PROP(zobj, prop_offset);
					if (EXPECTED(Z_TYPE_INFO_P(retval) != IS_UNDEF)) {
						if (0 || ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) != 0) {
							goto fetch_obj_r_copy;
						} else {
fetch_obj_r_fast_copy:
							ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
							ZEND_VM_NEXT_OPCODE();
						}
					}
				} else if (UNEXPECTED(IS_HOOKED_PROPERTY_OFFSET(prop_offset))) {
					zend_property_info *prop_info = CACHED_PTR_EX(cache_slot + 2);
					if (ZEND_IS_PROPERTY_HOOK_SIMPLE_READ(prop_offset)) {
						prop_offset = prop_info->offset;
						goto fetch_obj_r_simple;
					} else if (EXPECTED(ZEND_IS_PROPERTY_HOOK_SIMPLE_GET(prop_offset))) {
						zend_function *hook = prop_info->hooks[ZEND_PROPERTY_HOOK_GET];
						ZEND_ASSERT(hook->type == ZEND_USER_FUNCTION);
						ZEND_ASSERT(RUN_TIME_CACHE(&hook->op_array));

						uint32_t call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_HAS_THIS;
						if ((IS_TMP_VAR|IS_VAR) & IS_CV) {
							GC_ADDREF(zobj);
						}
						if ((IS_TMP_VAR|IS_VAR) & (IS_CV|IS_VAR|IS_TMP_VAR)) {
							call_info |= ZEND_CALL_RELEASE_THIS;
						}
						zend_execute_data *call = zend_vm_stack_push_call_frame(call_info, hook, 0, zobj);
						call->prev_execute_data = execute_data;
						call->call = NULL;
						call->return_value = EX_VAR(opline->result.var);
						call->run_time_cache = RUN_TIME_CACHE(&hook->op_array);

						execute_data = call;
						EG(current_execute_data) = execute_data;
						zend_init_cvs(0, hook->op_array.last_var EXECUTE_DATA_CC);

#if defined(ZEND_VM_IP_GLOBAL_REG) && ((ZEND_VM_KIND == ZEND_VM_KIND_CALL) || (ZEND_VM_KIND == ZEND_VM_KIND_HYBRID))
						opline = hook->op_array.opcodes;
#else
						EX(opline) = hook->op_array.opcodes;
#endif
						LOAD_OPLINE_EX();




						ZEND_VM_ENTER_EX();
					}
					/* Fall through to read_property for hooks. */
				} else if (EXPECTED(zobj->properties != NULL)) {
					ZEND_ASSERT(IS_DYNAMIC_PROPERTY_OFFSET(prop_offset));
					name = Z_STR_P(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC));
					if (!IS_UNKNOWN_DYNAMIC_PROPERTY_OFFSET(prop_offset)) {
						uintptr_t idx = ZEND_DECODE_DYN_PROP_OFFSET(prop_offset);

						if (EXPECTED(idx < zobj->properties->nNumUsed * sizeof(Bucket))) {
							Bucket *p = (Bucket*)((char*)zobj->properties->arData + idx);

							if (EXPECTED(p->key == name) ||
							    (EXPECTED(p->h == ZSTR_H(name)) &&
							     EXPECTED(p->key != NULL) &&
							     EXPECTED(zend_string_equal_content(p->key, name)))) {
								retval = &p->val;
								if (0 || ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) != 0) {
									goto fetch_obj_r_copy;
								} else {
									goto fetch_obj_r_fast_copy;
								}
							}
						}
						CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_DYNAMIC_PROPERTY_OFFSET);
					}
					retval = zend_hash_find_known_hash(zobj->properties, name);
					if (EXPECTED(retval)) {
						uintptr_t idx = (char*)retval - (char*)zobj->properties->arData;
						CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_ENCODE_DYN_PROP_OFFSET(idx));
						if (0 || ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) != 0) {
							goto fetch_obj_r_copy;
						} else {
							goto fetch_obj_r_fast_copy;
						}
					}
				}
			}
			name = Z_STR_P(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC));
		} else {
			name = zval_try_get_tmp_string(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC), &tmp_name);
			if (UNEXPECTED(!name)) {
				ZVAL_UNDEF(EX_VAR(opline->result.var));
				break;
			}
		}

#if ZEND_DEBUG
		/* For non-standard object handlers, verify a declared property type in debug builds.
		 * Fetch prop_info before calling read_property(), as it may deallocate the object. */
		zend_property_info *prop_info = NULL;
		if (zobj->handlers->read_property != zend_std_read_property) {
			prop_info = zend_get_property_info(zobj->ce, name, /* silent */ true);
		}
#endif
		retval = zobj->handlers->read_property(zobj, name, BP_VAR_R, cache_slot, EX_VAR(opline->result.var));
#if ZEND_DEBUG
		if (!EG(exception) && prop_info && prop_info != ZEND_WRONG_PROPERTY_INFO
				&& ZEND_TYPE_IS_SET(prop_info->type)) {
			ZVAL_OPT_DEREF(retval);
			zend_verify_property_type(prop_info, retval, /* strict */ true);
		}
#endif

		if (IS_CV != IS_CONST) {
			zend_tmp_string_release(tmp_name);
		}

		if (retval != EX_VAR(opline->result.var)) {
fetch_obj_r_copy:
			ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
		} else if (UNEXPECTED(Z_ISREF_P(retval))) {
			zend_unwrap_reference(retval);
		}
	} while (0);

fetch_obj_r_finish:


	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_CV_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *container;
	void **cache_slot = NULL;

	SAVE_OPLINE();
	container = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);

	if ((IS_TMP_VAR|IS_VAR) == IS_CONST ||
	    ((IS_TMP_VAR|IS_VAR) != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
		do {
			if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
				container = Z_REFVAL_P(container);
				if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
					break;
				}
			}
			if (IS_CV == IS_CV && Z_TYPE_P(EX_VAR(opline->op2.var)) == IS_UNDEF) {
				ZVAL_UNDEFINED_OP2();
			}
			ZVAL_NULL(EX_VAR(opline->result.var));
			goto fetch_obj_is_finish;
		} while (0);
	}

	/* here we are sure we are dealing with an object */
	do {
		zend_object *zobj = Z_OBJ_P(container);
		zend_string *name, *tmp_name;
		zval *retval;

		if (IS_CV == IS_CONST) {
			cache_slot = CACHE_ADDR(opline->extended_value);

			if (EXPECTED(zobj->ce == CACHED_PTR_EX(cache_slot))) {
				uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);

				if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
fetch_obj_is_simple:
					retval = OBJ_PROP(zobj, prop_offset);
					if (EXPECTED(Z_TYPE_P(retval) != IS_UNDEF)) {
						if (0 || ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) != 0) {
							goto fetch_obj_is_copy;
						} else {
fetch_obj_is_fast_copy:
							ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
							ZEND_VM_NEXT_OPCODE();
						}
					}
				} else if (UNEXPECTED(IS_HOOKED_PROPERTY_OFFSET(prop_offset))) {
					if (ZEND_IS_PROPERTY_HOOK_SIMPLE_READ(prop_offset)) {
						zend_property_info *prop_info = CACHED_PTR_EX(cache_slot + 2);
						prop_offset = prop_info->offset;
						goto fetch_obj_is_simple;
					}
					/* Fall through to read_property for hooks. */
				} else if (EXPECTED(zobj->properties != NULL)) {
					ZEND_ASSERT(IS_DYNAMIC_PROPERTY_OFFSET(prop_offset));
					name = Z_STR_P(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC));
					if (!IS_UNKNOWN_DYNAMIC_PROPERTY_OFFSET(prop_offset)) {
						uintptr_t idx = ZEND_DECODE_DYN_PROP_OFFSET(prop_offset);

						if (EXPECTED(idx < zobj->properties->nNumUsed * sizeof(Bucket))) {
							Bucket *p = (Bucket*)((char*)zobj->properties->arData + idx);

							if (EXPECTED(p->key == name) ||
							    (EXPECTED(p->h == ZSTR_H(name)) &&
							     EXPECTED(p->key != NULL) &&
							     EXPECTED(zend_string_equal_content(p->key, name)))) {
								retval = &p->val;
								if (0 || ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) != 0) {
									goto fetch_obj_is_copy;
								} else {
									goto fetch_obj_is_fast_copy;
								}
							}
						}
						CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_DYNAMIC_PROPERTY_OFFSET);
					}
					retval = zend_hash_find_known_hash(zobj->properties, name);
					if (EXPECTED(retval)) {
						uintptr_t idx = (char*)retval - (char*)zobj->properties->arData;
						CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_ENCODE_DYN_PROP_OFFSET(idx));
						if (0 || ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) != 0) {
							goto fetch_obj_is_copy;
						} else {
							goto fetch_obj_is_fast_copy;
						}
					}
				}
			}
			name = Z_STR_P(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC));
		} else {
			name = zval_try_get_tmp_string(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC), &tmp_name);
			if (UNEXPECTED(!name)) {
				ZVAL_UNDEF(EX_VAR(opline->result.var));
				break;
			}
		}

		retval = zobj->handlers->read_property(zobj, name, BP_VAR_IS, cache_slot, EX_VAR(opline->result.var));

		if (IS_CV != IS_CONST) {
			zend_tmp_string_release(tmp_name);
		}

		if (retval != EX_VAR(opline->result.var)) {
fetch_obj_is_copy:
			ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
		} else if (UNEXPECTED(Z_ISREF_P(retval))) {
			zend_unwrap_reference(retval);
		}
	} while (0);

fetch_obj_is_finish:


	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_FAST_CONCAT_SPEC_TMPVAR_CV_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;
	zend_string *op1_str, *op2_str, *str;


	op1 = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
	op2 = EX_VAR(opline->op2.var);
	if (((IS_TMP_VAR|IS_VAR) == IS_CONST || EXPECTED(Z_TYPE_P(op1) == IS_STRING)) &&
	    (IS_CV == IS_CONST || EXPECTED(Z_TYPE_P(op2) == IS_STRING))) {
		zend_string *op1_str = Z_STR_P(op1);
		zend_string *op2_str = Z_STR_P(op2);
		zend_string *str;
		uint32_t flags = ZSTR_GET_COPYABLE_CONCAT_PROPERTIES_BOTH(op1_str, op2_str);

		if ((IS_TMP_VAR|IS_VAR) != IS_CONST && UNEXPECTED(ZSTR_LEN(op1_str) == 0)) {
			if (IS_CV == IS_CONST || IS_CV == IS_CV) {
				ZVAL_STR_COPY(EX_VAR(opline->result.var), op2_str);
			} else {
				ZVAL_STR(EX_VAR(opline->result.var), op2_str);
			}
			if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
				zend_string_release_ex(op1_str, 0);
			}
		} else if (IS_CV != IS_CONST && UNEXPECTED(ZSTR_LEN(op2_str) == 0)) {
			if ((IS_TMP_VAR|IS_VAR) == IS_CONST || (IS_TMP_VAR|IS_VAR) == IS_CV) {
				ZVAL_STR_COPY(EX_VAR(opline->result.var), op1_str);
			} else {
				ZVAL_STR(EX_VAR(opline->result.var), op1_str);
			}
			if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
				zend_string_release_ex(op2_str, 0);
			}
		} else if ((IS_TMP_VAR|IS_VAR) != IS_CONST && (IS_TMP_VAR|IS_VAR) != IS_CV &&
		    !ZSTR_IS_INTERNED(op1_str) && GC_REFCOUNT(op1_str) == 1) {
			size_t len = ZSTR_LEN(op1_str);

			str = zend_string_extend(op1_str, len + ZSTR_LEN(op2_str), 0);
			memcpy(ZSTR_VAL(str) + len, ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
			GC_ADD_FLAGS(str, flags);
			ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
			if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
				zend_string_release_ex(op2_str, 0);
			}
		} else {
			str = zend_string_alloc(ZSTR_LEN(op1_str) + ZSTR_LEN(op2_str), 0);
			memcpy(ZSTR_VAL(str), ZSTR_VAL(op1_str), ZSTR_LEN(op1_str));
			memcpy(ZSTR_VAL(str) + ZSTR_LEN(op1_str), ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
			GC_ADD_FLAGS(str, flags);
			ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
			if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
				zend_string_release_ex(op1_str, 0);
			}
			if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
				zend_string_release_ex(op2_str, 0);
			}
		}
		ZEND_VM_NEXT_OPCODE();
	}

	SAVE_OPLINE();
	if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
		op1_str = Z_STR_P(op1);
	} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
		op1_str = zend_string_copy(Z_STR_P(op1));
	} else {
		if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
			ZVAL_UNDEFINED_OP1();
		}
		op1_str = zval_get_string_func(op1);
	}
	if (IS_CV == IS_CONST) {
		op2_str = Z_STR_P(op2);
	} else if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
		op2_str = zend_string_copy(Z_STR_P(op2));
	} else {
		if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(op2) == IS_UNDEF)) {
			ZVAL_UNDEFINED_OP2();
		}
		op2_str = zval_get_string_func(op2);
	}
	do {
		if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
			if (UNEXPECTED(ZSTR_LEN(op1_str) == 0)) {
				if (IS_CV == IS_CONST) {
					if (UNEXPECTED(Z_REFCOUNTED_P(op2))) {
						GC_ADDREF(op2_str);
					}
				}
				ZVAL_STR(EX_VAR(opline->result.var), op2_str);
				zend_string_release_ex(op1_str, 0);
				break;
			}
		}
		if (IS_CV != IS_CONST) {
			if (UNEXPECTED(ZSTR_LEN(op2_str) == 0)) {
				if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
					if (UNEXPECTED(Z_REFCOUNTED_P(op1))) {
						GC_ADDREF(op1_str);
					}
				}
				ZVAL_STR(EX_VAR(opline->result.var), op1_str);
				zend_string_release_ex(op2_str, 0);
				break;
			}
		}
		str = zend_string_alloc(ZSTR_LEN(op1_str) + ZSTR_LEN(op2_str), 0);
		memcpy(ZSTR_VAL(str), ZSTR_VAL(op1_str), ZSTR_LEN(op1_str));
		memcpy(ZSTR_VAL(str) + ZSTR_LEN(op1_str), ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);

		ZSTR_COPY_CONCAT_PROPERTIES_BOTH(str, op1_str, op2_str);
		ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
		if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
			zend_string_release_ex(op1_str, 0);
		}
		if (IS_CV != IS_CONST) {
			zend_string_release_ex(op2_str, 0);
		}
	} while (0);
	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));


	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_CV_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *function_name;
	zval *object;
	zend_function *fbc;
	zend_class_entry *called_scope;
	zend_object *obj;
	zend_execute_data *call;
	uint32_t call_info;

	SAVE_OPLINE();

	object = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);

	if (IS_CV != IS_CONST) {
		function_name = EX_VAR(opline->op2.var);
	}

	if (IS_CV != IS_CONST &&
	    UNEXPECTED(Z_TYPE_P(function_name) != IS_STRING)) {
		do {
			if ((IS_CV & (IS_VAR|IS_CV)) && Z_ISREF_P(function_name)) {
				function_name = Z_REFVAL_P(function_name);
				if (EXPECTED(Z_TYPE_P(function_name) == IS_STRING)) {
					break;
				}
			} else if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) {
				ZVAL_UNDEFINED_OP2();
				if (UNEXPECTED(EG(exception) != NULL)) {
					zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
					HANDLE_EXCEPTION();
				}
			}
			zend_throw_error(NULL, "Method name must be a string");


			zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
			HANDLE_EXCEPTION();
		} while (0);
	}

	if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED) {
		obj = Z_OBJ_P(object);
	} else {
		do {
			if ((IS_TMP_VAR|IS_VAR) != IS_CONST && EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
				obj = Z_OBJ_P(object);
			} else {
				if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(object))) {
					zend_reference *ref = Z_REF_P(object);

					object = &ref->val;
					if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
						obj = Z_OBJ_P(object);
						if ((IS_TMP_VAR|IS_VAR) & IS_VAR) {
							if (UNEXPECTED(GC_DELREF(ref) == 0)) {
								efree_size(ref, sizeof(zend_reference));
							} else {
								Z_ADDREF_P(object);
							}
						}
						break;
					}
				}
				if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
					object = ZVAL_UNDEFINED_OP1();
					if (UNEXPECTED(EG(exception) != NULL)) {
						if (IS_CV != IS_CONST) {


						}
						HANDLE_EXCEPTION();
					}
				}
				if (IS_CV == IS_CONST) {
					function_name = EX_VAR(opline->op2.var);
				}
				zend_invalid_method_call(object, function_name);


				zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
				HANDLE_EXCEPTION();
			}
		} while (0);
	}

	called_scope = obj->ce;

	if (IS_CV == IS_CONST &&
	    EXPECTED(CACHED_PTR(opline->result.num) == called_scope)) {
		fbc = CACHED_PTR(opline->result.num + sizeof(void*));
	} else {
		zend_object *orig_obj = obj;

		if (IS_CV == IS_CONST) {
			function_name = EX_VAR(opline->op2.var);
		}

		/* First, locate the function. */
		fbc = obj->handlers->get_method(&obj, Z_STR_P(function_name), ((IS_CV == IS_CONST) ? (RT_CONSTANT(opline, opline->op2) + 1) : NULL));
		if (UNEXPECTED(fbc == NULL)) {
			if (EXPECTED(!EG(exception))) {
				zend_undefined_method(orig_obj->ce, Z_STR_P(function_name));
			}


			if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_TMP_VAR)) && GC_DELREF(orig_obj) == 0) {
				zend_objects_store_del(orig_obj);
			}
			HANDLE_EXCEPTION();
		}
		if (IS_CV == IS_CONST &&
		    EXPECTED(!(fbc->common.fn_flags & (ZEND_ACC_CALL_VIA_TRAMPOLINE|ZEND_ACC_NEVER_CACHE))) &&
		    EXPECTED(obj == orig_obj)) {
			CACHE_POLYMORPHIC_PTR(opline->result.num, called_scope, fbc);
		}
		if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_TMP_VAR)) && UNEXPECTED(obj != orig_obj)) {
			GC_ADDREF(obj); /* For $this pointer */
			if (GC_DELREF(orig_obj) == 0) {
				zend_objects_store_del(orig_obj);
			}
		}
		if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!RUN_TIME_CACHE(&fbc->op_array))) {
			init_func_run_time_cache(&fbc->op_array);
		}
	}

	if (IS_CV != IS_CONST) {


	}

	call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_HAS_THIS;
	if (UNEXPECTED((fbc->common.fn_flags & ZEND_ACC_STATIC) != 0)) {
		if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_TMP_VAR)) && GC_DELREF(obj) == 0) {
			zend_objects_store_del(obj);
			if (UNEXPECTED(EG(exception))) {
				HANDLE_EXCEPTION();
			}
		}
		/* call static method */
		obj = (zend_object*)called_scope;
		call_info = ZEND_CALL_NESTED_FUNCTION;
	} else if ((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_TMP_VAR|IS_CV)) {
		if ((IS_TMP_VAR|IS_VAR) == IS_CV) {
			GC_ADDREF(obj); /* For $this pointer */
		}
		/* CV may be changed indirectly (e.g. when it's a reference) */
		call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_HAS_THIS | ZEND_CALL_RELEASE_THIS;
	}

	call = zend_vm_stack_push_call_frame(call_info,
		fbc, opline->extended_value, obj);
	call->prev_execute_data = EX(call);
	EX(call) = call;

	ZEND_VM_NEXT_OPCODE();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_CASE_SPEC_TMPVAR_CV_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;
	double d1, d2;

	op1 = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
	op2 = EX_VAR(opline->op2.var);
	if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
		if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
			if (EXPECTED(Z_LVAL_P(op1) == Z_LVAL_P(op2))) {
case_true:
				ZEND_VM_SMART_BRANCH_TRUE();
			} else {
case_false:
				ZEND_VM_SMART_BRANCH_FALSE();
			}
		} else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
			d1 = (double)Z_LVAL_P(op1);
			d2 = Z_DVAL_P(op2);
			goto case_double;
		}
	} else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) {
		if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
			d1 = Z_DVAL_P(op1);
			d2 = Z_DVAL_P(op2);
case_double:
			if (d1 == d2) {
				goto case_true;
			} else {
				goto case_false;
			}
		} else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
			d1 = Z_DVAL_P(op1);
			d2 = (double)Z_LVAL_P(op2);
			goto case_double;
		}
	} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
		if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
			bool result = zend_fast_equal_strings(Z_STR_P(op1), Z_STR_P(op2));


			if (result) {
				goto case_true;
			} else {
				goto case_false;
			}
		}
	}
	ZEND_VM_DISPATCH_TO_HELPER(zend_case_helper_SPEC_TAILCALL(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_EX op1, op2));
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_TMPVAR_CV_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *container;
	bool result;
	zend_ulong hval;
	zval *offset;

	SAVE_OPLINE();
	container = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
	offset = EX_VAR(opline->op2.var);

	if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
		HashTable *ht;
		zval *value;
		zend_string *str;

isset_dim_obj_array:
		ht = Z_ARRVAL_P(container);
isset_again:
		if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) {
			str = Z_STR_P(offset);
			if (IS_CV != IS_CONST) {
				if (ZEND_HANDLE_NUMERIC(str, hval)) {
					goto num_index_prop;
				}
			}
			value = zend_hash_find_ex(ht, str, IS_CV == IS_CONST);
		} else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
			hval = Z_LVAL_P(offset);
num_index_prop:
			value = zend_hash_index_find(ht, hval);
		} else if ((IS_CV & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(offset))) {
			offset = Z_REFVAL_P(offset);
			goto isset_again;
		} else {
			value = zend_find_array_dim_slow(ht, offset EXECUTE_DATA_CC);
			if (UNEXPECTED(EG(exception))) {
				result = 0;
				goto isset_dim_obj_exit;
			}
		}

		if (!(opline->extended_value & ZEND_ISEMPTY)) {
			/* > IS_NULL means not IS_UNDEF and not IS_NULL */
			result = value != NULL && Z_TYPE_P(value) > IS_NULL &&
			    (!Z_ISREF_P(value) || Z_TYPE_P(Z_REFVAL_P(value)) != IS_NULL);

			if ((IS_TMP_VAR|IS_VAR) & (IS_CONST|IS_CV)) {
				/* avoid exception check */


				ZEND_VM_SMART_BRANCH(result, 0);
			}
		} else {
			result = (value == NULL || !i_zend_is_true(value));
		}
		goto isset_dim_obj_exit;
	} else if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(container))) {
		container = Z_REFVAL_P(container);
		if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
			goto isset_dim_obj_array;
		}
	}

	if (IS_CV == IS_CONST && Z_EXTRA_P(offset) == ZEND_EXTRA_VALUE) {
		offset++;
	}
	if (!(opline->extended_value & ZEND_ISEMPTY)) {
		result = zend_isset_dim_slow(container, offset EXECUTE_DATA_CC);
	} else {
		result = zend_isempty_dim_slow(container, offset EXECUTE_DATA_CC);
	}

isset_dim_obj_exit:


	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
	ZEND_VM_SMART_BRANCH(result, 1);
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TMPVAR_CV_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *container;
	int result;
	zval *offset;
	zend_string *name, *tmp_name;

	SAVE_OPLINE();
	container = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
	offset = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);

	if ((IS_TMP_VAR|IS_VAR) == IS_CONST ||
	    ((IS_TMP_VAR|IS_VAR) != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
		if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
			container = Z_REFVAL_P(container);
			if (UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT)) {
				result = (opline->extended_value & ZEND_ISEMPTY);
				goto isset_object_finish;
			}
		} else {
			result = (opline->extended_value & ZEND_ISEMPTY);
			goto isset_object_finish;
		}
	}

	if (IS_CV == IS_CONST) {
		name = Z_STR_P(offset);
	} else {
		name = zval_try_get_tmp_string(offset, &tmp_name);
		if (UNEXPECTED(!name)) {
			result = 0;
			goto isset_object_finish;
		}
	}

	result =
		(opline->extended_value & ZEND_ISEMPTY) ^
		Z_OBJ_HT_P(container)->has_property(Z_OBJ_P(container), name, (opline->extended_value & ZEND_ISEMPTY), ((IS_CV == IS_CONST) ? CACHE_ADDR(opline->extended_value & ~ZEND_ISEMPTY) : NULL));

	if (IS_CV != IS_CONST) {
		zend_tmp_string_release(tmp_name);
	}

isset_object_finish:


	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
	ZEND_VM_SMART_BRANCH(result, 1);
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_ARRAY_KEY_EXISTS_SPEC_TMPVAR_CV_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE

	zval *key, *subject;
	HashTable *ht;
	bool result;

	SAVE_OPLINE();

	key = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
	subject = EX_VAR(opline->op2.var);

	if (EXPECTED(Z_TYPE_P(subject) == IS_ARRAY)) {
array_key_exists_array:
		ht = Z_ARRVAL_P(subject);
		result = zend_array_key_exists_fast(ht, key OPLINE_CC EXECUTE_DATA_CC);
	} else {
		if ((IS_CV & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(subject))) {
			subject = Z_REFVAL_P(subject);
			if (EXPECTED(Z_TYPE_P(subject) == IS_ARRAY)) {
				goto array_key_exists_array;
			}
		}
		zend_array_key_exists_error(subject, key OPLINE_CC EXECUTE_DATA_CC);
		result = 0;
	}


	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
	ZEND_VM_SMART_BRANCH(result, 1);
}

static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_RETURN_SPEC_TMP_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *retval_ptr;
	zval *return_value;


	retval_ptr = _get_zval_ptr_tmp(opline->op1.var EXECUTE_DATA_CC);
	return_value = EX(return_value);


	if (IS_TMP_VAR == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(retval_ptr) == IS_UNDEF)) {
		SAVE_OPLINE();
		retval_ptr = ZVAL_UNDEFINED_OP1();
		if (return_value) {
			ZVAL_NULL(return_value);
		}
	} else if (!return_value) {
		if (IS_TMP_VAR & (IS_VAR|IS_TMP_VAR)) {
			if (Z_REFCOUNTED_P(retval_ptr) && !Z_DELREF_P(retval_ptr)) {
				SAVE_OPLINE();
				rc_dtor_func(Z_COUNTED_P(retval_ptr));
			}
		}
	} else {
		if ((IS_TMP_VAR & (IS_CONST|IS_TMP_VAR))) {
			ZVAL_COPY_VALUE(return_value, retval_ptr);
			if (IS_TMP_VAR == IS_CONST) {
				if (UNEXPECTED(Z_OPT_REFCOUNTED_P(return_value))) {
					Z_ADDREF_P(return_value);
				}
			}
		} else if (IS_TMP_VAR == IS_CV) {
			do {
				if (Z_OPT_REFCOUNTED_P(retval_ptr)) {
					if (EXPECTED(!Z_OPT_ISREF_P(retval_ptr))) {
						if (EXPECTED(!(EX_CALL_INFO() & (ZEND_CALL_CODE|ZEND_CALL_OBSERVED)))) {
							zend_refcounted *ref = Z_COUNTED_P(retval_ptr);
							ZVAL_COPY_VALUE(return_value, retval_ptr);
							if (GC_MAY_LEAK(ref)) {
								SAVE_OPLINE();
								gc_possible_root(ref);
							}
							ZVAL_NULL(retval_ptr);
							break;
						} else {
							Z_ADDREF_P(retval_ptr);
						}
					} else {
						retval_ptr = Z_REFVAL_P(retval_ptr);
						if (Z_OPT_REFCOUNTED_P(retval_ptr)) {
							Z_ADDREF_P(retval_ptr);
						}
					}
				}
				ZVAL_COPY_VALUE(return_value, retval_ptr);
			} while (0);
		} else /* if (IS_TMP_VAR == IS_VAR) */ {
			if (UNEXPECTED(Z_ISREF_P(retval_ptr))) {
				zend_refcounted *ref = Z_COUNTED_P(retval_ptr);

				retval_ptr = Z_REFVAL_P(retval_ptr);
				ZVAL_COPY_VALUE(return_value, retval_ptr);
				if (UNEXPECTED(GC_DELREF(ref) == 0)) {
					efree_size(ref, sizeof(zend_reference));
				} else if (Z_OPT_REFCOUNTED_P(retval_ptr)) {
					Z_ADDREF_P(retval_ptr);
				}
			} else {
				ZVAL_COPY_VALUE(return_value, retval_ptr);
			}
		}
	}






	ZEND_VM_DISPATCH_TO_LEAVE_HELPER(zend_leave_helper_SPEC_TAILCALL);
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_RETURN_BY_REF_SPEC_TMP_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *retval_ptr;
	zval *return_value;


	SAVE_OPLINE();

	return_value = EX(return_value);


	do {
		if ((IS_TMP_VAR & (IS_CONST|IS_TMP_VAR)) ||
		    (IS_TMP_VAR == IS_VAR && opline->extended_value == ZEND_RETURNS_VALUE)) {
			/* Not supposed to happen, but we'll allow it */
			zend_error(E_NOTICE, "Only variable references should be returned by reference");

			retval_ptr = _get_zval_ptr_tmp(opline->op1.var EXECUTE_DATA_CC);
			if (!return_value) {
				zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
			} else {
				if (IS_TMP_VAR == IS_VAR && UNEXPECTED(Z_ISREF_P(retval_ptr))) {
					ZVAL_COPY_VALUE(return_value, retval_ptr);
					break;
				}

				ZVAL_NEW_REF(return_value, retval_ptr);
				if (IS_TMP_VAR == IS_CONST) {
					Z_TRY_ADDREF_P(retval_ptr);
				}
			}
			break;
		}

		retval_ptr = zend_get_bad_ptr();

		if (IS_TMP_VAR == IS_VAR) {
			ZEND_ASSERT(retval_ptr != &EG(uninitialized_zval));
			if (opline->extended_value == ZEND_RETURNS_FUNCTION && !Z_ISREF_P(retval_ptr)) {
				zend_error(E_NOTICE, "Only variable references should be returned by reference");
				if (return_value) {
					ZVAL_NEW_REF(return_value, retval_ptr);
				} else {
					zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
				}
				break;
			}
		}

		if (return_value) {
			if (Z_ISREF_P(retval_ptr)) {
				Z_ADDREF_P(retval_ptr);
			} else {
				ZVAL_MAKE_REF_EX(retval_ptr, 2);
			}
			ZVAL_REF(return_value, Z_REF_P(retval_ptr));
		}

		zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
	} while (0);




	ZEND_VM_DISPATCH_TO_LEAVE_HELPER(zend_leave_helper_SPEC_TAILCALL);
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_GENERATOR_RETURN_SPEC_TMP_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *retval;

	zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C);

	SAVE_OPLINE();
	retval = _get_zval_ptr_tmp(opline->op1.var EXECUTE_DATA_CC);

	/* Copy return value into generator->retval */
	if ((IS_TMP_VAR & (IS_CONST|IS_TMP_VAR))) {
		ZVAL_COPY_VALUE(&generator->retval, retval);
		if (IS_TMP_VAR == IS_CONST) {
			if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->retval))) {
				Z_ADDREF(generator->retval);
			}
		}
	} else if (IS_TMP_VAR == IS_CV) {
		ZVAL_COPY_DEREF(&generator->retval, retval);
	} else /* if (IS_TMP_VAR == IS_VAR) */ {
		if (UNEXPECTED(Z_ISREF_P(retval))) {
			zend_refcounted *ref = Z_COUNTED_P(retval);

			retval = Z_REFVAL_P(retval);
			ZVAL_COPY_VALUE(&generator->retval, retval);
			if (UNEXPECTED(GC_DELREF(ref) == 0)) {
				efree_size(ref, sizeof(zend_reference));
			} else if (Z_OPT_REFCOUNTED_P(retval)) {
				Z_ADDREF_P(retval);
			}
		} else {
			ZVAL_COPY_VALUE(&generator->retval, retval);
		}
	}


	EG(current_execute_data) = EX(prev_execute_data);

	/* Close the generator to free up resources */
	zend_generator_close(generator, 1);

	/* Pass execution back to handling code */
	ZEND_VM_RETURN();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_SEND_USER_SPEC_TMP_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *arg, *param;

	SAVE_OPLINE();

	arg = _get_zval_ptr_tmp(opline->op1.var EXECUTE_DATA_CC);
	param = ZEND_CALL_VAR(EX(call), opline->result.var);
	if (UNEXPECTED(ARG_MUST_BE_SENT_BY_REF(EX(call)->func, opline->op2.num))) {
		zend_param_must_be_ref(EX(call)->func, opline->op2.num);
		Z_TRY_ADDREF_P(arg);
		ZVAL_NEW_REF(param, arg);
	} else {
		ZVAL_COPY(param, arg);
	}

	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_CAST_SPEC_TMP_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *expr;
	zval *result = EX_VAR(opline->result.var);

	SAVE_OPLINE();
	expr = _get_zval_ptr_tmp(opline->op1.var EXECUTE_DATA_CC);

	switch (opline->extended_value) {
		case IS_LONG:
			ZVAL_LONG(result, zval_get_long(expr));
			break;
		case IS_DOUBLE:
			ZVAL_DOUBLE(result, zval_get_double(expr));
			break;
		case IS_STRING:
			ZVAL_STR(result, zval_get_string(expr));
			break;
		default:
			ZEND_ASSERT(opline->extended_value != _IS_BOOL && "Must use ZEND_BOOL instead");
			if (IS_TMP_VAR & (IS_VAR|IS_CV)) {
				ZVAL_DEREF(expr);
			}
			/* If value is already of correct type, return it directly */
			if (Z_TYPE_P(expr) == opline->extended_value) {
				ZVAL_COPY_VALUE(result, expr);
				if (IS_TMP_VAR == IS_CONST) {
					if (UNEXPECTED(Z_OPT_REFCOUNTED_P(result))) Z_ADDREF_P(result);
				} else if (IS_TMP_VAR != IS_TMP_VAR) {
					if (Z_OPT_REFCOUNTED_P(result)) Z_ADDREF_P(result);
				}


				ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
			}

			if (opline->extended_value == IS_ARRAY) {
				zend_cast_zval_to_array(result, expr, IS_TMP_VAR);
			} else {
				ZEND_ASSERT(opline->extended_value == IS_OBJECT);
				zend_cast_zval_to_object(result, expr, IS_TMP_VAR);
			}
	}

	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_FE_RESET_R_SPEC_TMP_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *array_ptr, *result;

	SAVE_OPLINE();

	array_ptr = _get_zval_ptr_tmp(opline->op1.var EXECUTE_DATA_CC);
	if (EXPECTED(Z_TYPE_P(array_ptr) == IS_ARRAY)) {
		result = EX_VAR(opline->result.var);
		ZVAL_COPY_VALUE(result, array_ptr);
		if (IS_TMP_VAR != IS_TMP_VAR && Z_OPT_REFCOUNTED_P(result)) {
			Z_ADDREF_P(array_ptr);
		}
		Z_FE_POS_P(result) = 0;


		ZEND_VM_NEXT_OPCODE();
	} else if (IS_TMP_VAR != IS_CONST && EXPECTED(Z_TYPE_P(array_ptr) == IS_OBJECT)) {
		zend_object *zobj = Z_OBJ_P(array_ptr);
		if (!zobj->ce->get_iterator) {
			if (UNEXPECTED(zend_object_is_lazy(zobj))) {
				zobj = zend_lazy_object_init(zobj);
				if (UNEXPECTED(EG(exception))) {
					UNDEF_RESULT();


					HANDLE_EXCEPTION();
				}
			}
			HashTable *properties = zobj->properties;
			if (properties) {
				if (UNEXPECTED(GC_REFCOUNT(properties) > 1)) {
					if (EXPECTED(!(GC_FLAGS(properties) & IS_ARRAY_IMMUTABLE))) {
						GC_DELREF(properties);
					}
					properties = zobj->properties = zend_array_dup(properties);
				}
			} else {
				properties = zobj->handlers->get_properties(zobj);
			}

			result = EX_VAR(opline->result.var);
			ZVAL_COPY_VALUE(result, array_ptr);
			if (IS_TMP_VAR != IS_TMP_VAR) {
				Z_ADDREF_P(array_ptr);
			}

			if (zend_hash_num_elements(properties) == 0) {
				Z_FE_ITER_P(result) = (uint32_t) -1;


				ZEND_VM_JMP(OP_JMP_ADDR(opline, opline->op2));
			}

			Z_FE_ITER_P(result) = zend_hash_iterator_add(properties, 0);


			ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
		} else {
			bool is_empty = zend_fe_reset_iterator(array_ptr, 0 OPLINE_CC EXECUTE_DATA_CC);

			zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
			if (UNEXPECTED(EG(exception))) {
				HANDLE_EXCEPTION();
			} else if (is_empty) {
				ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0);
			} else {
				ZEND_VM_NEXT_OPCODE();
			}
		}
	} else {
		zend_error(E_WARNING, "foreach() argument must be of type array|object, %s given", zend_zval_value_name(array_ptr));
		ZVAL_UNDEF(EX_VAR(opline->result.var));
		Z_FE_ITER_P(EX_VAR(opline->result.var)) = (uint32_t)-1;
		zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
		ZEND_VM_JMP(OP_JMP_ADDR(opline, opline->op2));
	}
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_FE_RESET_RW_SPEC_TMP_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *array_ptr, *array_ref;

	SAVE_OPLINE();

	if (IS_TMP_VAR == IS_VAR || IS_TMP_VAR == IS_CV) {
		array_ref = array_ptr = zend_get_bad_ptr();
		if (Z_ISREF_P(array_ref)) {
			array_ptr = Z_REFVAL_P(array_ref);
		}
	} else {
		array_ref = array_ptr = _get_zval_ptr_tmp(opline->op1.var EXECUTE_DATA_CC);
	}

	if (EXPECTED(Z_TYPE_P(array_ptr) == IS_ARRAY)) {
		if (IS_TMP_VAR == IS_VAR || IS_TMP_VAR == IS_CV) {
			if (array_ptr == array_ref) {
				ZVAL_NEW_REF(array_ref, array_ref);
				array_ptr = Z_REFVAL_P(array_ref);
			}
			Z_ADDREF_P(array_ref);
			ZVAL_COPY_VALUE(EX_VAR(opline->result.var), array_ref);
		} else {
			array_ref = EX_VAR(opline->result.var);
			ZVAL_NEW_REF(array_ref, array_ptr);
			array_ptr = Z_REFVAL_P(array_ref);
		}
		if (IS_TMP_VAR == IS_CONST) {
			ZVAL_ARR(array_ptr, zend_array_dup(Z_ARRVAL_P(array_ptr)));
		} else {
			SEPARATE_ARRAY(array_ptr);
		}
		Z_FE_ITER_P(EX_VAR(opline->result.var)) = zend_hash_iterator_add(Z_ARRVAL_P(array_ptr), 0);


		ZEND_VM_NEXT_OPCODE();
	} else if (IS_TMP_VAR != IS_CONST && EXPECTED(Z_TYPE_P(array_ptr) == IS_OBJECT)) {
		if (!Z_OBJCE_P(array_ptr)->get_iterator) {
			zend_object *zobj = Z_OBJ_P(array_ptr);
			HashTable *properties;
			if (UNEXPECTED(zend_object_is_lazy(zobj))) {
				zobj = zend_lazy_object_init(zobj);
				if (UNEXPECTED(EG(exception))) {
					UNDEF_RESULT();


					HANDLE_EXCEPTION();
				}
			}
			if (IS_TMP_VAR == IS_VAR || IS_TMP_VAR == IS_CV) {
				if (array_ptr == array_ref) {
					ZVAL_NEW_REF(array_ref, array_ref);
					array_ptr = Z_REFVAL_P(array_ref);
				}
				Z_ADDREF_P(array_ref);
				ZVAL_COPY_VALUE(EX_VAR(opline->result.var), array_ref);
			} else {
				array_ptr = EX_VAR(opline->result.var);
				ZVAL_COPY_VALUE(array_ptr, array_ref);
			}
			if (Z_OBJ_P(array_ptr)->properties
			 && UNEXPECTED(GC_REFCOUNT(Z_OBJ_P(array_ptr)->properties) > 1)) {
				if (EXPECTED(!(GC_FLAGS(Z_OBJ_P(array_ptr)->properties) & IS_ARRAY_IMMUTABLE))) {
					GC_DELREF(Z_OBJ_P(array_ptr)->properties);
				}
				Z_OBJ_P(array_ptr)->properties = zend_array_dup(Z_OBJ_P(array_ptr)->properties);
			}

			properties = Z_OBJPROP_P(array_ptr);
			if (zend_hash_num_elements(properties) == 0) {
				Z_FE_ITER_P(EX_VAR(opline->result.var)) = (uint32_t) -1;


				ZEND_VM_JMP(OP_JMP_ADDR(opline, opline->op2));
			}

			Z_FE_ITER_P(EX_VAR(opline->result.var)) = zend_hash_iterator_add(properties, 0);


			ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
		} else {
			bool is_empty = zend_fe_reset_iterator(array_ptr, 1 OPLINE_CC EXECUTE_DATA_CC);
			zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
			if (UNEXPECTED(EG(exception))) {
				HANDLE_EXCEPTION();
			} else if (is_empty) {
				ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0);
			} else {
				ZEND_VM_NEXT_OPCODE();
			}
		}
	} else {
		zend_error(E_WARNING, "foreach() argument must be of type array|object, %s given", zend_zval_value_name(array_ptr));
		ZVAL_UNDEF(EX_VAR(opline->result.var));
		Z_FE_ITER_P(EX_VAR(opline->result.var)) = (uint32_t)-1;
		zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
		ZEND_VM_JMP(OP_JMP_ADDR(opline, opline->op2));
	}
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_END_SILENCE_SPEC_TMP_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE

	if (E_HAS_ONLY_FATAL_ERRORS(EG(error_reporting))
			&& !E_HAS_ONLY_FATAL_ERRORS(Z_LVAL_P(EX_VAR(opline->op1.var)))) {
		EG(error_reporting) = Z_LVAL_P(EX_VAR(opline->op1.var));
	}
	ZEND_VM_NEXT_OPCODE();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_JMP_SET_SPEC_TMP_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *value;
	zend_reference *ref = NULL;
	bool ret;

	SAVE_OPLINE();
	value = _get_zval_ptr_tmp(opline->op1.var EXECUTE_DATA_CC);

	if ((IS_TMP_VAR == IS_VAR || IS_TMP_VAR == IS_CV) && Z_ISREF_P(value)) {
		if (IS_TMP_VAR == IS_VAR) {
			ref = Z_REF_P(value);
		}
		value = Z_REFVAL_P(value);
	}

	ret = i_zend_is_true(value);

	if (UNEXPECTED(EG(exception))) {
		zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
		ZVAL_UNDEF(EX_VAR(opline->result.var));
		HANDLE_EXCEPTION();
	}

	if (ret) {
		zval *result = EX_VAR(opline->result.var);

		ZVAL_COPY_VALUE(result, value);
		if (IS_TMP_VAR == IS_CONST) {
			if (UNEXPECTED(Z_OPT_REFCOUNTED_P(result))) Z_ADDREF_P(result);
		} else if (IS_TMP_VAR == IS_CV) {
			if (Z_OPT_REFCOUNTED_P(result)) Z_ADDREF_P(result);
		} else if (IS_TMP_VAR == IS_VAR && ref) {
			if (UNEXPECTED(GC_DELREF(ref) == 0)) {
				efree_size(ref, sizeof(zend_reference));
			} else if (Z_OPT_REFCOUNTED_P(result)) {
				Z_ADDREF_P(result);
			}
		}
		ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0);
	}

	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
	ZEND_VM_NEXT_OPCODE();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_COALESCE_SPEC_TMP_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *value;
	zend_reference *ref = NULL;

	SAVE_OPLINE();
	value = _get_zval_ptr_tmp(opline->op1.var EXECUTE_DATA_CC);

	if ((IS_TMP_VAR & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) {
		if (IS_TMP_VAR & IS_VAR) {
			ref = Z_REF_P(value);
		}
		value = Z_REFVAL_P(value);
	}

	if (Z_TYPE_P(value) > IS_NULL) {
		zval *result = EX_VAR(opline->result.var);
		ZVAL_COPY_VALUE(result, value);
		if (IS_TMP_VAR == IS_CONST) {
			if (UNEXPECTED(Z_OPT_REFCOUNTED_P(result))) Z_ADDREF_P(result);
		} else if (IS_TMP_VAR == IS_CV) {
			if (Z_OPT_REFCOUNTED_P(result)) Z_ADDREF_P(result);
		} else if ((IS_TMP_VAR & IS_VAR) && ref) {
			if (UNEXPECTED(GC_DELREF(ref) == 0)) {
				efree_size(ref, sizeof(zend_reference));
			} else if (Z_OPT_REFCOUNTED_P(result)) {
				Z_ADDREF_P(result);
			}
		}
		ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0);
	}

	if ((IS_TMP_VAR & IS_VAR) && ref) {
		if (UNEXPECTED(GC_DELREF(ref) == 0)) {
			efree_size(ref, sizeof(zend_reference));
		}
	}
	ZEND_VM_NEXT_OPCODE();
}

static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_JMP_NULL_SPEC_TMP_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *val, *result;

	val = _get_zval_ptr_tmp(opline->op1.var EXECUTE_DATA_CC);

	if (Z_TYPE_P(val) > IS_NULL) {
		do {
			if ((IS_TMP_VAR == IS_CV || IS_TMP_VAR == IS_VAR) && Z_TYPE_P(val) == IS_REFERENCE) {
				val = Z_REFVAL_P(val);
				if (Z_TYPE_P(val) <= IS_NULL) {
					zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
					break;
				}
			}
			ZEND_VM_NEXT_OPCODE();
		} while (0);
	}

	result = EX_VAR(opline->result.var);
	uint32_t short_circuiting_type = opline->extended_value & ZEND_SHORT_CIRCUITING_CHAIN_MASK;
	if (EXPECTED(short_circuiting_type == ZEND_SHORT_CIRCUITING_CHAIN_EXPR)) {
		ZVAL_NULL(result);
		if (IS_TMP_VAR == IS_CV
			&& UNEXPECTED(Z_TYPE_P(val) == IS_UNDEF)
			&& (opline->extended_value & ZEND_JMP_NULL_BP_VAR_IS) == 0
		) {
			SAVE_OPLINE();
			ZVAL_UNDEFINED_OP1();
			if (UNEXPECTED(EG(exception) != NULL)) {
				HANDLE_EXCEPTION();
			}
		}
	} else if (short_circuiting_type == ZEND_SHORT_CIRCUITING_CHAIN_ISSET) {
		ZVAL_FALSE(result);
	} else {
		ZEND_ASSERT(short_circuiting_type == ZEND_SHORT_CIRCUITING_CHAIN_EMPTY);
		ZVAL_TRUE(result);
	}

	ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0);
}

static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_QM_ASSIGN_SPEC_TMP_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *value;
	zval *result = EX_VAR(opline->result.var);

	value = _get_zval_ptr_tmp(opline->op1.var EXECUTE_DATA_CC);
	if (IS_TMP_VAR == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
		SAVE_OPLINE();
		ZVAL_UNDEFINED_OP1();
		ZVAL_NULL(result);
		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
	}

	if (IS_TMP_VAR == IS_CV) {
		ZVAL_COPY_DEREF(result, value);
	} else if (IS_TMP_VAR == IS_VAR) {
		if (UNEXPECTED(Z_ISREF_P(value))) {
			ZVAL_COPY_VALUE(result, Z_REFVAL_P(value));
			if (UNEXPECTED(Z_DELREF_P(value) == 0)) {
				efree_size(Z_REF_P(value), sizeof(zend_reference));
			} else if (Z_OPT_REFCOUNTED_P(result)) {
				Z_ADDREF_P(result);
			}
		} else {
			ZVAL_COPY_VALUE(result, value);
		}
	} else {
		ZVAL_COPY_VALUE(result, value);
		if (IS_TMP_VAR == IS_CONST) {
			if (UNEXPECTED(Z_OPT_REFCOUNTED_P(result))) {
				Z_ADDREF_P(result);
			}
		}
	}
	ZEND_VM_NEXT_OPCODE();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_IS_IDENTICAL_SPEC_TMP_CONST_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;
	bool result;

	SAVE_OPLINE();
	op1 = _get_zval_ptr_tmp(opline->op1.var EXECUTE_DATA_CC);
	op2 = RT_CONSTANT(opline, opline->op2);
	result = fast_is_identical_function(op1, op2);
	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));


	ZEND_VM_SMART_BRANCH(result, 1);
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_CASE_STRICT_SPEC_TMP_CONST_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;
	bool result;

	SAVE_OPLINE();
	op1 = _get_zval_ptr_tmp(opline->op1.var EXECUTE_DATA_CC);
	op2 = RT_CONSTANT(opline, opline->op2);
	result = fast_is_identical_function(op1, op2);


	ZEND_VM_SMART_BRANCH(result, 1);
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_IS_NOT_IDENTICAL_SPEC_TMP_CONST_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;
	bool result;

	SAVE_OPLINE();
	op1 = _get_zval_ptr_tmp(opline->op1.var EXECUTE_DATA_CC);
	op2 = RT_CONSTANT(opline, opline->op2);
	result = fast_is_not_identical_function(op1, op2);
	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));


	ZEND_VM_SMART_BRANCH(result, 1);
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_FETCH_DIM_FUNC_ARG_SPEC_TMP_CONST_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
#if 0
	USE_OPLINE
#endif

	if (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) {
		if ((IS_TMP_VAR & (IS_CONST|IS_TMP_VAR))) {
			ZEND_VM_TAIL_CALL(zend_use_tmp_in_write_context_helper_SPEC_TAILCALL(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
		}
		ZEND_VM_TAIL_CALL(ZEND_NULL_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
	} else {
		if (IS_CONST == IS_UNUSED) {
			ZEND_VM_TAIL_CALL(zend_use_undef_in_read_context_helper_SPEC_TAILCALL(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
		}
		ZEND_VM_TAIL_CALL(ZEND_FETCH_DIM_R_SPEC_TMPVAR_CONST_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
	}
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_FETCH_OBJ_FUNC_ARG_SPEC_TMP_CONST_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
#if 0
	USE_OPLINE
#endif

	if (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) {
		/* Behave like FETCH_OBJ_W */
		if ((IS_TMP_VAR & (IS_CONST|IS_TMP_VAR))) {
			ZEND_VM_TAIL_CALL(zend_use_tmp_in_write_context_helper_SPEC_TAILCALL(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
		}
		ZEND_VM_TAIL_CALL(ZEND_NULL_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
	} else {
		ZEND_VM_TAIL_CALL(ZEND_FETCH_OBJ_R_SPEC_TMPVAR_CONST_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
	}
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_ROPE_ADD_SPEC_TMP_CONST_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zend_string **rope;
	zval *var;

	/* op1 and result are the same */
	rope = (zend_string**)EX_VAR(opline->op1.var);
	if (IS_CONST == IS_CONST) {
		var = RT_CONSTANT(opline, opline->op2);
		rope[opline->extended_value] = Z_STR_P(var);
		if (UNEXPECTED(Z_REFCOUNTED_P(var))) {
			Z_ADDREF_P(var);
		}
	} else {
		var = RT_CONSTANT(opline, opline->op2);
		if (EXPECTED(Z_TYPE_P(var) == IS_STRING)) {
			if (IS_CONST == IS_CV) {
				rope[opline->extended_value] = zend_string_copy(Z_STR_P(var));
			} else {
				rope[opline->extended_value] = Z_STR_P(var);
			}
		} else {
			SAVE_OPLINE();
			if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(var) == IS_UNDEF)) {
				ZVAL_UNDEFINED_OP2();
			}
			rope[opline->extended_value] = zval_get_string_func(var);


			ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
		}
	}
	ZEND_VM_NEXT_OPCODE();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_ROPE_END_SPEC_TMP_CONST_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zend_string **rope;
	zval *var, *ret;
	uint32_t i;

	rope = (zend_string**)EX_VAR(opline->op1.var);
	if (IS_CONST == IS_CONST) {
		var = RT_CONSTANT(opline, opline->op2);
		rope[opline->extended_value] = Z_STR_P(var);
		if (UNEXPECTED(Z_REFCOUNTED_P(var))) {
			Z_ADDREF_P(var);
		}
	} else {
		var = RT_CONSTANT(opline, opline->op2);
		if (EXPECTED(Z_TYPE_P(var) == IS_STRING)) {
			if (IS_CONST == IS_CV) {
				rope[opline->extended_value] = zend_string_copy(Z_STR_P(var));
			} else {
				rope[opline->extended_value] = Z_STR_P(var);
			}
		} else {
			SAVE_OPLINE();
			if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(var) == IS_UNDEF)) {
				ZVAL_UNDEFINED_OP2();
			}
			rope[opline->extended_value] = zval_get_string_func(var);


			if (UNEXPECTED(EG(exception))) {
				for (i = 0; i <= opline->extended_value; i++) {
					zend_string_release_ex(rope[i], 0);
				}
				ZVAL_UNDEF(EX_VAR(opline->result.var));
				HANDLE_EXCEPTION();
			}
		}
	}

	size_t len = 0;
	uint32_t flags = ZSTR_COPYABLE_CONCAT_PROPERTIES;
	for (i = 0; i <= opline->extended_value; i++) {
		flags &= ZSTR_GET_COPYABLE_CONCAT_PROPERTIES(rope[i]);
		len += ZSTR_LEN(rope[i]);
	}
	ret = EX_VAR(opline->result.var);
	ZVAL_STR(ret, zend_string_alloc(len, 0));
	GC_ADD_FLAGS(Z_STR_P(ret), flags);

	char *target = Z_STRVAL_P(ret);
	for (i = 0; i <= opline->extended_value; i++) {
		memcpy(target, ZSTR_VAL(rope[i]), ZSTR_LEN(rope[i]));
		target += ZSTR_LEN(rope[i]);
		zend_string_release_ex(rope[i], 0);
	}
	*target = '\0';

	ZEND_VM_NEXT_OPCODE();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_SEND_VAL_EX_SPEC_TMP_CONST_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *value, *arg;
	uint32_t arg_num;

	if (IS_CONST == IS_CONST) {
		SAVE_OPLINE();
		zend_string *arg_name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
		arg = zend_handle_named_arg(&EX(call), arg_name, &arg_num, CACHE_ADDR(opline->result.num));
		if (UNEXPECTED(!arg)) {
			zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
			HANDLE_EXCEPTION();
		}
	} else {
		arg = ZEND_CALL_VAR(EX(call), opline->result.var);
		arg_num = opline->op2.num;
	}

	if (EXPECTED(arg_num <= MAX_ARG_FLAG_NUM)) {
		if (QUICK_ARG_MUST_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
			goto send_val_by_ref;
		}
	} else if (ARG_MUST_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
send_val_by_ref:;
		ZEND_VM_DISPATCH_TO_HELPER(zend_cannot_pass_by_ref_helper_SPEC_TAILCALL(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_EX arg_num, arg));
	}
	value = _get_zval_ptr_tmp(opline->op1.var EXECUTE_DATA_CC);
	ZVAL_COPY_VALUE(arg, value);
	if (IS_TMP_VAR == IS_CONST) {
		if (UNEXPECTED(Z_OPT_REFCOUNTED_P(arg))) {
			Z_ADDREF_P(arg);
		}
	}
	ZEND_VM_NEXT_OPCODE();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_CONST_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *expr_ptr, new_expr;

	SAVE_OPLINE();
	if ((IS_TMP_VAR == IS_VAR || IS_TMP_VAR == IS_CV) &&
	    UNEXPECTED(opline->extended_value & ZEND_ARRAY_ELEMENT_REF)) {
		expr_ptr = zend_get_bad_ptr();
		if (Z_ISREF_P(expr_ptr)) {
			Z_ADDREF_P(expr_ptr);
		} else {
			ZVAL_MAKE_REF_EX(expr_ptr, 2);
		}
		zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
	} else {
		expr_ptr = _get_zval_ptr_tmp(opline->op1.var EXECUTE_DATA_CC);
		if (IS_TMP_VAR == IS_TMP_VAR) {
			/* pass */
		} else if (IS_TMP_VAR == IS_CONST) {
			Z_TRY_ADDREF_P(expr_ptr);
		} else if (IS_TMP_VAR == IS_CV) {
			ZVAL_DEREF(expr_ptr);
			Z_TRY_ADDREF_P(expr_ptr);
		} else /* if (IS_TMP_VAR == IS_VAR) */ {
			if (UNEXPECTED(Z_ISREF_P(expr_ptr))) {
				zend_refcounted *ref = Z_COUNTED_P(expr_ptr);

				expr_ptr = Z_REFVAL_P(expr_ptr);
				if (UNEXPECTED(GC_DELREF(ref) == 0)) {
					ZVAL_COPY_VALUE(&new_expr, expr_ptr);
					expr_ptr = &new_expr;
					efree_size(ref, sizeof(zend_reference));
				} else if (Z_OPT_REFCOUNTED_P(expr_ptr)) {
					Z_ADDREF_P(expr_ptr);
				}
			}
		}
	}

	if (IS_CONST != IS_UNUSED) {
		zval *offset = RT_CONSTANT(opline, opline->op2);
		zend_string *str;
		zend_ulong hval;

add_again:
		if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) {
			str = Z_STR_P(offset);
			if (IS_CONST != IS_CONST) {
				if (ZEND_HANDLE_NUMERIC(str, hval)) {
					goto num_index;
				}
			}
str_index:
			zend_hash_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), str, expr_ptr);
		} else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
			hval = Z_LVAL_P(offset);
num_index:
			zend_hash_index_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), hval, expr_ptr);
		} else if ((IS_CONST & (IS_VAR|IS_CV)) && EXPECTED(Z_TYPE_P(offset) == IS_REFERENCE)) {
			offset = Z_REFVAL_P(offset);
			goto add_again;
		} else if (UNEXPECTED(Z_TYPE_P(offset) == IS_NULL)) {
			zval tmp;
			if (IS_TMP_VAR == IS_CV || IS_TMP_VAR == IS_VAR) {
				ZVAL_COPY(&tmp, expr_ptr);
			}
			zend_error(E_DEPRECATED, "Using null as an array offset is deprecated, use an empty string instead");
			if (IS_TMP_VAR == IS_CV || IS_TMP_VAR == IS_VAR) {
				/* A userland error handler can do funky things to the expression, so reset it */
				zval_ptr_dtor(expr_ptr);
				ZVAL_COPY_VALUE(expr_ptr, &tmp);
			}
			if (UNEXPECTED(EG(exception))) {
				zval_ptr_dtor_nogc(expr_ptr);
				HANDLE_EXCEPTION();
			}
			str = ZSTR_EMPTY_ALLOC();
			goto str_index;
		} else if (Z_TYPE_P(offset) == IS_DOUBLE) {
			hval = zend_dval_to_lval_safe(Z_DVAL_P(offset));
			goto num_index;
		} else if (Z_TYPE_P(offset) == IS_FALSE) {
			hval = 0;
			goto num_index;
		} else if (Z_TYPE_P(offset) == IS_TRUE) {
			hval = 1;
			goto num_index;
		} else if (Z_TYPE_P(offset) == IS_RESOURCE) {
			zend_use_resource_as_offset(offset);
			hval = Z_RES_HANDLE_P(offset);
			goto num_index;
		} else if (IS_CONST == IS_CV && Z_TYPE_P(offset) == IS_UNDEF) {
			ZVAL_UNDEFINED_OP2();
			str = ZSTR_EMPTY_ALLOC();
			goto str_index;
		} else {
			zend_illegal_array_offset_access(offset);
			zval_ptr_dtor_nogc(expr_ptr);
		}


	} else {
		if (!zend_hash_next_index_insert(Z_ARRVAL_P(EX_VAR(opline->result.var)), expr_ptr)) {
			zend_cannot_add_element();
			zval_ptr_dtor_nogc(expr_ptr);
		}
	}
	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_INIT_ARRAY_SPEC_TMP_CONST_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	zval *array;
	uint32_t size;
	USE_OPLINE

	SAVE_OPLINE();
	array = EX_VAR(opline->result.var);
	if (IS_TMP_VAR != IS_UNUSED) {
		size = opline->extended_value >> ZEND_ARRAY_SIZE_SHIFT;
		ZVAL_ARR(array, zend_new_array(size));
		/* Explicitly initialize array as not-packed if flag is set */
		if (opline->extended_value & ZEND_ARRAY_NOT_PACKED) {
			zend_hash_real_init_mixed(Z_ARRVAL_P(array));
		}
		ZEND_VM_TAIL_CALL(ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_CONST_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
	} else {
		ZVAL_ARR(array, zend_new_array(0));
		ZEND_VM_NEXT_OPCODE();
	}
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_YIELD_SPEC_TMP_CONST_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE

	zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C);

	SAVE_OPLINE();
	if (UNEXPECTED(generator->flags & ZEND_GENERATOR_FORCED_CLOSE)) {
		ZEND_VM_TAIL_CALL(zend_yield_in_closed_generator_helper_SPEC_TAILCALL(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
	}

	/* Destroy the previously yielded value */
	zval_ptr_dtor(&generator->value);

	/* Destroy the previously yielded key */
	zval_ptr_dtor(&generator->key);

	/* Set the new yielded value */
	if (IS_TMP_VAR != IS_UNUSED) {
		if (UNEXPECTED(EX(func)->op_array.fn_flags & ZEND_ACC_RETURN_REFERENCE)) {
			/* Constants and temporary variables aren't yieldable by reference,
			 * but we still allow them with a notice. */
			if (IS_TMP_VAR & (IS_CONST|IS_TMP_VAR)) {
				zval *value;

				zend_error(E_NOTICE, "Only variable references should be yielded by reference");

				value = _get_zval_ptr_tmp(opline->op1.var EXECUTE_DATA_CC);
				ZVAL_COPY_VALUE(&generator->value, value);
				if (IS_TMP_VAR == IS_CONST) {
					if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
						Z_ADDREF(generator->value);
					}
				}
			} else {
				zval *value_ptr = zend_get_bad_ptr();

				/* If a function call result is yielded and the function did
				 * not return by reference we throw a notice. */
				do {
					if (IS_TMP_VAR == IS_VAR) {
						ZEND_ASSERT(value_ptr != &EG(uninitialized_zval));
						if (opline->extended_value == ZEND_RETURNS_FUNCTION
						 && !Z_ISREF_P(value_ptr)) {
							zend_error(E_NOTICE, "Only variable references should be yielded by reference");
							ZVAL_COPY(&generator->value, value_ptr);
							break;
						}
					}
					if (Z_ISREF_P(value_ptr)) {
						Z_ADDREF_P(value_ptr);
					} else {
						ZVAL_MAKE_REF_EX(value_ptr, 2);
					}
					ZVAL_REF(&generator->value, Z_REF_P(value_ptr));
				} while (0);

				zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
			}
		} else {
			zval *value = _get_zval_ptr_tmp(opline->op1.var EXECUTE_DATA_CC);

			/* Consts, temporary variables and references need copying */
			if (IS_TMP_VAR == IS_CONST) {
				ZVAL_COPY_VALUE(&generator->value, value);
				if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
					Z_ADDREF(generator->value);
				}
			} else if (IS_TMP_VAR == IS_TMP_VAR) {
				ZVAL_COPY_VALUE(&generator->value, value);
			} else if ((IS_TMP_VAR & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) {
				ZVAL_COPY(&generator->value, Z_REFVAL_P(value));


			} else {
				ZVAL_COPY_VALUE(&generator->value, value);
				if (IS_TMP_VAR == IS_CV) {
					if (Z_OPT_REFCOUNTED_P(value)) Z_ADDREF_P(value);
				}
			}
		}
	} else {
		/* If no value was specified yield null */
		ZVAL_NULL(&generator->value);
	}

	/* Set the new yielded key */
	if (IS_CONST != IS_UNUSED) {
		zval *key = RT_CONSTANT(opline, opline->op2);
		if ((IS_CONST & (IS_CV|IS_VAR)) && UNEXPECTED(Z_TYPE_P(key) == IS_REFERENCE)) {
			key = Z_REFVAL_P(key);
		}
		ZVAL_COPY(&generator->key, key);


		if (Z_TYPE(generator->key) == IS_LONG
		    && Z_LVAL(generator->key) > generator->largest_used_integer_key
		) {
			generator->largest_used_integer_key = Z_LVAL(generator->key);
		}
	} else {
		/* If no key was specified we use auto-increment keys */
		generator->largest_used_integer_key++;
		ZVAL_LONG(&generator->key, generator->largest_used_integer_key);
	}

	if (RETURN_VALUE_USED(opline)) {
		/* If the return value of yield is used set the send
		 * target and initialize it to NULL */
		generator->send_target = EX_VAR(opline->result.var);
		ZVAL_NULL(generator->send_target);
	} else {
		generator->send_target = NULL;
	}

	/* The GOTO VM uses a local opline variable. We need to set the opline
	 * variable in execute_data so we don't resume at an old position. */
	SAVE_OPLINE();

	ZEND_VM_RETURN();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_IN_ARRAY_SPEC_TMP_CONST_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1;
	HashTable *ht = Z_ARRVAL_P(RT_CONSTANT(opline, opline->op2));
	zval *result;

	op1 = _get_zval_ptr_tmp(opline->op1.var EXECUTE_DATA_CC);
	if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
		result = zend_hash_find_ex(ht, Z_STR_P(op1), IS_TMP_VAR == IS_CONST);
		if (IS_TMP_VAR & (IS_TMP_VAR|IS_VAR)) {
			zval_ptr_dtor_str(op1);
		}
		ZEND_VM_SMART_BRANCH(result, 0);
	}

	if (opline->extended_value) {
		if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
			result = zend_hash_index_find(ht, Z_LVAL_P(op1));
			ZEND_VM_SMART_BRANCH(result, 0);
		}
		SAVE_OPLINE();
		if ((IS_TMP_VAR & (IS_VAR|IS_CV)) && Z_TYPE_P(op1) == IS_REFERENCE) {
			op1 = Z_REFVAL_P(op1);
			if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
				result = zend_hash_find(ht, Z_STR_P(op1));
				zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
				ZEND_VM_SMART_BRANCH(result, 0);
			} else if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
				result = zend_hash_index_find(ht, Z_LVAL_P(op1));
				zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
				ZEND_VM_SMART_BRANCH(result, 0);
			}
		} else if (IS_TMP_VAR == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
			ZVAL_UNDEFINED_OP1();
		}
	} else if (Z_TYPE_P(op1) <= IS_FALSE) {
		if (IS_TMP_VAR == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
			SAVE_OPLINE();
			ZVAL_UNDEFINED_OP1();
			if (UNEXPECTED(EG(exception) != NULL)) {
				HANDLE_EXCEPTION();
			}
		}
		result = zend_hash_find_known_hash(ht, ZSTR_EMPTY_ALLOC());
		ZEND_VM_SMART_BRANCH(result, 0);
	} else {
		zend_string *key;
		zval key_tmp;

		if ((IS_TMP_VAR & (IS_VAR|IS_CV)) && Z_TYPE_P(op1) == IS_REFERENCE) {
			op1 = Z_REFVAL_P(op1);
			if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
				result = zend_hash_find(ht, Z_STR_P(op1));
				zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
				ZEND_VM_SMART_BRANCH(result, 0);
			}
		}

		SAVE_OPLINE();
		ZEND_HASH_MAP_FOREACH_STR_KEY(ht, key) {
			ZVAL_STR(&key_tmp, key);
			if (zend_compare(op1, &key_tmp) == 0) {
				zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
				ZEND_VM_SMART_BRANCH(1, 1);
			}
		} ZEND_HASH_FOREACH_END();
	}
	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
	ZEND_VM_SMART_BRANCH(0, 1);
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_FETCH_DIM_FUNC_ARG_SPEC_TMP_TMPVAR_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
#if 0
	USE_OPLINE
#endif

	if (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) {
		if ((IS_TMP_VAR & (IS_CONST|IS_TMP_VAR))) {
			ZEND_VM_TAIL_CALL(zend_use_tmp_in_write_context_helper_SPEC_TAILCALL(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
		}
		ZEND_VM_TAIL_CALL(ZEND_NULL_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
	} else {
		if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED) {
			ZEND_VM_TAIL_CALL(zend_use_undef_in_read_context_helper_SPEC_TAILCALL(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
		}
		ZEND_VM_TAIL_CALL(ZEND_FETCH_DIM_R_SPEC_TMPVAR_TMPVAR_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
	}
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_FETCH_OBJ_FUNC_ARG_SPEC_TMP_TMPVAR_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
#if 0
	USE_OPLINE
#endif

	if (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) {
		/* Behave like FETCH_OBJ_W */
		if ((IS_TMP_VAR & (IS_CONST|IS_TMP_VAR))) {
			ZEND_VM_TAIL_CALL(zend_use_tmp_in_write_context_helper_SPEC_TAILCALL(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
		}
		ZEND_VM_TAIL_CALL(ZEND_NULL_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
	} else {
		ZEND_VM_TAIL_CALL(ZEND_FETCH_OBJ_R_SPEC_TMPVAR_TMPVAR_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
	}
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_ROPE_ADD_SPEC_TMP_TMPVAR_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zend_string **rope;
	zval *var;

	/* op1 and result are the same */
	rope = (zend_string**)EX_VAR(opline->op1.var);
	if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
		var = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
		rope[opline->extended_value] = Z_STR_P(var);
		if (UNEXPECTED(Z_REFCOUNTED_P(var))) {
			Z_ADDREF_P(var);
		}
	} else {
		var = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
		if (EXPECTED(Z_TYPE_P(var) == IS_STRING)) {
			if ((IS_TMP_VAR|IS_VAR) == IS_CV) {
				rope[opline->extended_value] = zend_string_copy(Z_STR_P(var));
			} else {
				rope[opline->extended_value] = Z_STR_P(var);
			}
		} else {
			SAVE_OPLINE();
			if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(var) == IS_UNDEF)) {
				ZVAL_UNDEFINED_OP2();
			}
			rope[opline->extended_value] = zval_get_string_func(var);
			zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
			ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
		}
	}
	ZEND_VM_NEXT_OPCODE();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_ROPE_END_SPEC_TMP_TMPVAR_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zend_string **rope;
	zval *var, *ret;
	uint32_t i;

	rope = (zend_string**)EX_VAR(opline->op1.var);
	if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
		var = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
		rope[opline->extended_value] = Z_STR_P(var);
		if (UNEXPECTED(Z_REFCOUNTED_P(var))) {
			Z_ADDREF_P(var);
		}
	} else {
		var = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
		if (EXPECTED(Z_TYPE_P(var) == IS_STRING)) {
			if ((IS_TMP_VAR|IS_VAR) == IS_CV) {
				rope[opline->extended_value] = zend_string_copy(Z_STR_P(var));
			} else {
				rope[opline->extended_value] = Z_STR_P(var);
			}
		} else {
			SAVE_OPLINE();
			if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(var) == IS_UNDEF)) {
				ZVAL_UNDEFINED_OP2();
			}
			rope[opline->extended_value] = zval_get_string_func(var);
			zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
			if (UNEXPECTED(EG(exception))) {
				for (i = 0; i <= opline->extended_value; i++) {
					zend_string_release_ex(rope[i], 0);
				}
				ZVAL_UNDEF(EX_VAR(opline->result.var));
				HANDLE_EXCEPTION();
			}
		}
	}

	size_t len = 0;
	uint32_t flags = ZSTR_COPYABLE_CONCAT_PROPERTIES;
	for (i = 0; i <= opline->extended_value; i++) {
		flags &= ZSTR_GET_COPYABLE_CONCAT_PROPERTIES(rope[i]);
		len += ZSTR_LEN(rope[i]);
	}
	ret = EX_VAR(opline->result.var);
	ZVAL_STR(ret, zend_string_alloc(len, 0));
	GC_ADD_FLAGS(Z_STR_P(ret), flags);

	char *target = Z_STRVAL_P(ret);
	for (i = 0; i <= opline->extended_value; i++) {
		memcpy(target, ZSTR_VAL(rope[i]), ZSTR_LEN(rope[i]));
		target += ZSTR_LEN(rope[i]);
		zend_string_release_ex(rope[i], 0);
	}
	*target = '\0';

	ZEND_VM_NEXT_OPCODE();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_TMPVAR_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *expr_ptr, new_expr;

	SAVE_OPLINE();
	if ((IS_TMP_VAR == IS_VAR || IS_TMP_VAR == IS_CV) &&
	    UNEXPECTED(opline->extended_value & ZEND_ARRAY_ELEMENT_REF)) {
		expr_ptr = zend_get_bad_ptr();
		if (Z_ISREF_P(expr_ptr)) {
			Z_ADDREF_P(expr_ptr);
		} else {
			ZVAL_MAKE_REF_EX(expr_ptr, 2);
		}
		zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
	} else {
		expr_ptr = _get_zval_ptr_tmp(opline->op1.var EXECUTE_DATA_CC);
		if (IS_TMP_VAR == IS_TMP_VAR) {
			/* pass */
		} else if (IS_TMP_VAR == IS_CONST) {
			Z_TRY_ADDREF_P(expr_ptr);
		} else if (IS_TMP_VAR == IS_CV) {
			ZVAL_DEREF(expr_ptr);
			Z_TRY_ADDREF_P(expr_ptr);
		} else /* if (IS_TMP_VAR == IS_VAR) */ {
			if (UNEXPECTED(Z_ISREF_P(expr_ptr))) {
				zend_refcounted *ref = Z_COUNTED_P(expr_ptr);

				expr_ptr = Z_REFVAL_P(expr_ptr);
				if (UNEXPECTED(GC_DELREF(ref) == 0)) {
					ZVAL_COPY_VALUE(&new_expr, expr_ptr);
					expr_ptr = &new_expr;
					efree_size(ref, sizeof(zend_reference));
				} else if (Z_OPT_REFCOUNTED_P(expr_ptr)) {
					Z_ADDREF_P(expr_ptr);
				}
			}
		}
	}

	if ((IS_TMP_VAR|IS_VAR) != IS_UNUSED) {
		zval *offset = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
		zend_string *str;
		zend_ulong hval;

add_again:
		if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) {
			str = Z_STR_P(offset);
			if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
				if (ZEND_HANDLE_NUMERIC(str, hval)) {
					goto num_index;
				}
			}
str_index:
			zend_hash_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), str, expr_ptr);
		} else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
			hval = Z_LVAL_P(offset);
num_index:
			zend_hash_index_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), hval, expr_ptr);
		} else if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && EXPECTED(Z_TYPE_P(offset) == IS_REFERENCE)) {
			offset = Z_REFVAL_P(offset);
			goto add_again;
		} else if (UNEXPECTED(Z_TYPE_P(offset) == IS_NULL)) {
			zval tmp;
			if (IS_TMP_VAR == IS_CV || IS_TMP_VAR == IS_VAR) {
				ZVAL_COPY(&tmp, expr_ptr);
			}
			zend_error(E_DEPRECATED, "Using null as an array offset is deprecated, use an empty string instead");
			if (IS_TMP_VAR == IS_CV || IS_TMP_VAR == IS_VAR) {
				/* A userland error handler can do funky things to the expression, so reset it */
				zval_ptr_dtor(expr_ptr);
				ZVAL_COPY_VALUE(expr_ptr, &tmp);
			}
			if (UNEXPECTED(EG(exception))) {
				zval_ptr_dtor_nogc(expr_ptr);
				HANDLE_EXCEPTION();
			}
			str = ZSTR_EMPTY_ALLOC();
			goto str_index;
		} else if (Z_TYPE_P(offset) == IS_DOUBLE) {
			hval = zend_dval_to_lval_safe(Z_DVAL_P(offset));
			goto num_index;
		} else if (Z_TYPE_P(offset) == IS_FALSE) {
			hval = 0;
			goto num_index;
		} else if (Z_TYPE_P(offset) == IS_TRUE) {
			hval = 1;
			goto num_index;
		} else if (Z_TYPE_P(offset) == IS_RESOURCE) {
			zend_use_resource_as_offset(offset);
			hval = Z_RES_HANDLE_P(offset);
			goto num_index;
		} else if ((IS_TMP_VAR|IS_VAR) == IS_CV && Z_TYPE_P(offset) == IS_UNDEF) {
			ZVAL_UNDEFINED_OP2();
			str = ZSTR_EMPTY_ALLOC();
			goto str_index;
		} else {
			zend_illegal_array_offset_access(offset);
			zval_ptr_dtor_nogc(expr_ptr);
		}
		zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
	} else {
		if (!zend_hash_next_index_insert(Z_ARRVAL_P(EX_VAR(opline->result.var)), expr_ptr)) {
			zend_cannot_add_element();
			zval_ptr_dtor_nogc(expr_ptr);
		}
	}
	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_INIT_ARRAY_SPEC_TMP_TMPVAR_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	zval *array;
	uint32_t size;
	USE_OPLINE

	SAVE_OPLINE();
	array = EX_VAR(opline->result.var);
	if (IS_TMP_VAR != IS_UNUSED) {
		size = opline->extended_value >> ZEND_ARRAY_SIZE_SHIFT;
		ZVAL_ARR(array, zend_new_array(size));
		/* Explicitly initialize array as not-packed if flag is set */
		if (opline->extended_value & ZEND_ARRAY_NOT_PACKED) {
			zend_hash_real_init_mixed(Z_ARRVAL_P(array));
		}
		ZEND_VM_TAIL_CALL(ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_TMPVAR_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
	} else {
		ZVAL_ARR(array, zend_new_array(0));
		ZEND_VM_NEXT_OPCODE();
	}
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_YIELD_SPEC_TMP_TMPVAR_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE

	zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C);

	SAVE_OPLINE();
	if (UNEXPECTED(generator->flags & ZEND_GENERATOR_FORCED_CLOSE)) {
		ZEND_VM_TAIL_CALL(zend_yield_in_closed_generator_helper_SPEC_TAILCALL(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
	}

	/* Destroy the previously yielded value */
	zval_ptr_dtor(&generator->value);

	/* Destroy the previously yielded key */
	zval_ptr_dtor(&generator->key);

	/* Set the new yielded value */
	if (IS_TMP_VAR != IS_UNUSED) {
		if (UNEXPECTED(EX(func)->op_array.fn_flags & ZEND_ACC_RETURN_REFERENCE)) {
			/* Constants and temporary variables aren't yieldable by reference,
			 * but we still allow them with a notice. */
			if (IS_TMP_VAR & (IS_CONST|IS_TMP_VAR)) {
				zval *value;

				zend_error(E_NOTICE, "Only variable references should be yielded by reference");

				value = _get_zval_ptr_tmp(opline->op1.var EXECUTE_DATA_CC);
				ZVAL_COPY_VALUE(&generator->value, value);
				if (IS_TMP_VAR == IS_CONST) {
					if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
						Z_ADDREF(generator->value);
					}
				}
			} else {
				zval *value_ptr = zend_get_bad_ptr();

				/* If a function call result is yielded and the function did
				 * not return by reference we throw a notice. */
				do {
					if (IS_TMP_VAR == IS_VAR) {
						ZEND_ASSERT(value_ptr != &EG(uninitialized_zval));
						if (opline->extended_value == ZEND_RETURNS_FUNCTION
						 && !Z_ISREF_P(value_ptr)) {
							zend_error(E_NOTICE, "Only variable references should be yielded by reference");
							ZVAL_COPY(&generator->value, value_ptr);
							break;
						}
					}
					if (Z_ISREF_P(value_ptr)) {
						Z_ADDREF_P(value_ptr);
					} else {
						ZVAL_MAKE_REF_EX(value_ptr, 2);
					}
					ZVAL_REF(&generator->value, Z_REF_P(value_ptr));
				} while (0);

				zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
			}
		} else {
			zval *value = _get_zval_ptr_tmp(opline->op1.var EXECUTE_DATA_CC);

			/* Consts, temporary variables and references need copying */
			if (IS_TMP_VAR == IS_CONST) {
				ZVAL_COPY_VALUE(&generator->value, value);
				if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
					Z_ADDREF(generator->value);
				}
			} else if (IS_TMP_VAR == IS_TMP_VAR) {
				ZVAL_COPY_VALUE(&generator->value, value);
			} else if ((IS_TMP_VAR & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) {
				ZVAL_COPY(&generator->value, Z_REFVAL_P(value));


			} else {
				ZVAL_COPY_VALUE(&generator->value, value);
				if (IS_TMP_VAR == IS_CV) {
					if (Z_OPT_REFCOUNTED_P(value)) Z_ADDREF_P(value);
				}
			}
		}
	} else {
		/* If no value was specified yield null */
		ZVAL_NULL(&generator->value);
	}

	/* Set the new yielded key */
	if ((IS_TMP_VAR|IS_VAR) != IS_UNUSED) {
		zval *key = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
		if (((IS_TMP_VAR|IS_VAR) & (IS_CV|IS_VAR)) && UNEXPECTED(Z_TYPE_P(key) == IS_REFERENCE)) {
			key = Z_REFVAL_P(key);
		}
		ZVAL_COPY(&generator->key, key);
		zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));

		if (Z_TYPE(generator->key) == IS_LONG
		    && Z_LVAL(generator->key) > generator->largest_used_integer_key
		) {
			generator->largest_used_integer_key = Z_LVAL(generator->key);
		}
	} else {
		/* If no key was specified we use auto-increment keys */
		generator->largest_used_integer_key++;
		ZVAL_LONG(&generator->key, generator->largest_used_integer_key);
	}

	if (RETURN_VALUE_USED(opline)) {
		/* If the return value of yield is used set the send
		 * target and initialize it to NULL */
		generator->send_target = EX_VAR(opline->result.var);
		ZVAL_NULL(generator->send_target);
	} else {
		generator->send_target = NULL;
	}

	/* The GOTO VM uses a local opline variable. We need to set the opline
	 * variable in execute_data so we don't resume at an old position. */
	SAVE_OPLINE();

	ZEND_VM_RETURN();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_IS_IDENTICAL_SPEC_TMP_TMP_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;
	bool result;

	SAVE_OPLINE();
	op1 = _get_zval_ptr_tmp(opline->op1.var EXECUTE_DATA_CC);
	op2 = _get_zval_ptr_tmp(opline->op2.var EXECUTE_DATA_CC);
	result = fast_is_identical_function(op1, op2);
	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
	ZEND_VM_SMART_BRANCH(result, 1);
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_CASE_STRICT_SPEC_TMP_TMP_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;
	bool result;

	SAVE_OPLINE();
	op1 = _get_zval_ptr_tmp(opline->op1.var EXECUTE_DATA_CC);
	op2 = _get_zval_ptr_tmp(opline->op2.var EXECUTE_DATA_CC);
	result = fast_is_identical_function(op1, op2);
	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
	ZEND_VM_SMART_BRANCH(result, 1);
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_IS_NOT_IDENTICAL_SPEC_TMP_TMP_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;
	bool result;

	SAVE_OPLINE();
	op1 = _get_zval_ptr_tmp(opline->op1.var EXECUTE_DATA_CC);
	op2 = _get_zval_ptr_tmp(opline->op2.var EXECUTE_DATA_CC);
	result = fast_is_not_identical_function(op1, op2);
	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
	ZEND_VM_SMART_BRANCH(result, 1);
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_CASE_STRICT_SPEC_TMP_VAR_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;
	bool result;

	SAVE_OPLINE();
	op1 = _get_zval_ptr_tmp(opline->op1.var EXECUTE_DATA_CC);
	op2 = _get_zval_ptr_var_deref(opline->op2.var EXECUTE_DATA_CC);
	result = fast_is_identical_function(op1, op2);
	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
	ZEND_VM_SMART_BRANCH(result, 1);
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_FETCH_DIM_FUNC_ARG_SPEC_TMP_UNUSED_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
#if 0
	USE_OPLINE
#endif

	if (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) {
		if ((IS_TMP_VAR & (IS_CONST|IS_TMP_VAR))) {
			ZEND_VM_TAIL_CALL(zend_use_tmp_in_write_context_helper_SPEC_TAILCALL(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
		}
		ZEND_VM_TAIL_CALL(ZEND_NULL_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
	} else {
		if (IS_UNUSED == IS_UNUSED) {
			ZEND_VM_TAIL_CALL(zend_use_undef_in_read_context_helper_SPEC_TAILCALL(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
		}
		ZEND_VM_TAIL_CALL(ZEND_NULL_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
	}
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_VERIFY_RETURN_TYPE_SPEC_TMP_UNUSED_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	if (IS_TMP_VAR == IS_UNUSED) {
		SAVE_OPLINE();
		zend_verify_missing_return_type(EX(func));
		HANDLE_EXCEPTION();
	} else {
/* prevents "undefined variable opline" errors */
#if 0 || (IS_TMP_VAR != IS_UNUSED)
		USE_OPLINE
		zval *retval_ref, *retval_ptr;
		zend_arg_info *ret_info = EX(func)->common.arg_info - 1;
		retval_ref = retval_ptr = _get_zval_ptr_tmp(opline->op1.var EXECUTE_DATA_CC);

		if (IS_TMP_VAR == IS_CONST) {
			ZVAL_COPY(EX_VAR(opline->result.var), retval_ptr);
			retval_ref = retval_ptr = EX_VAR(opline->result.var);
		} else if (IS_TMP_VAR == IS_VAR) {
			if (UNEXPECTED(Z_TYPE_P(retval_ptr) == IS_INDIRECT)) {
				retval_ref = retval_ptr = Z_INDIRECT_P(retval_ptr);
			}
			ZVAL_DEREF(retval_ptr);
		} else if (IS_TMP_VAR == IS_CV) {
			ZVAL_DEREF(retval_ptr);
		}

		if (EXPECTED(ZEND_TYPE_CONTAINS_CODE(ret_info->type, Z_TYPE_P(retval_ptr)))) {
			ZEND_VM_NEXT_OPCODE();
		}

		if (IS_TMP_VAR == IS_CV && UNEXPECTED(Z_ISUNDEF_P(retval_ptr))) {
			SAVE_OPLINE();
			retval_ref = retval_ptr = ZVAL_UNDEFINED_OP1();
			if (UNEXPECTED(EG(exception))) {
				HANDLE_EXCEPTION();
			}
			if (ZEND_TYPE_FULL_MASK(ret_info->type) & MAY_BE_NULL) {
				ZEND_VM_NEXT_OPCODE();
			}
		}

		zend_reference *ref = NULL;
		if (UNEXPECTED(retval_ref != retval_ptr)) {
			if (UNEXPECTED(EX(func)->op_array.fn_flags & ZEND_ACC_RETURN_REFERENCE)) {
				ref = Z_REF_P(retval_ref);
			} else {
				/* A cast might happen - unwrap the reference if this is a by-value return */
				if (Z_REFCOUNT_P(retval_ref) == 1) {
					ZVAL_UNREF(retval_ref);
				} else {
					Z_DELREF_P(retval_ref);
					ZVAL_COPY(retval_ref, retval_ptr);
				}
				retval_ptr = retval_ref;
			}
		}

		SAVE_OPLINE();
		if (UNEXPECTED(!zend_check_type_slow(&ret_info->type, retval_ptr, ref, 1, 0))) {
			zend_verify_return_error(EX(func), retval_ptr);
			HANDLE_EXCEPTION();
		}
		ZEND_VM_NEXT_OPCODE();
#endif
	}
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_SEND_VAL_EX_SPEC_TMP_UNUSED_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *value, *arg;
	uint32_t arg_num;

	if (IS_UNUSED == IS_CONST) {
		SAVE_OPLINE();
		zend_string *arg_name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
		arg = zend_handle_named_arg(&EX(call), arg_name, &arg_num, CACHE_ADDR(opline->result.num));
		if (UNEXPECTED(!arg)) {
			zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
			HANDLE_EXCEPTION();
		}
	} else {
		arg = ZEND_CALL_VAR(EX(call), opline->result.var);
		arg_num = opline->op2.num;
	}

	if (EXPECTED(0)) {
		if (QUICK_ARG_MUST_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
			goto send_val_by_ref;
		}
	} else if (ARG_MUST_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
send_val_by_ref:;
		ZEND_VM_DISPATCH_TO_HELPER(zend_cannot_pass_by_ref_helper_SPEC_TAILCALL(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_EX arg_num, arg));
	}
	value = _get_zval_ptr_tmp(opline->op1.var EXECUTE_DATA_CC);
	ZVAL_COPY_VALUE(arg, value);
	if (IS_TMP_VAR == IS_CONST) {
		if (UNEXPECTED(Z_OPT_REFCOUNTED_P(arg))) {
			Z_ADDREF_P(arg);
		}
	}
	ZEND_VM_NEXT_OPCODE();
}

static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_SEND_VAL_EX_SPEC_TMP_UNUSED_QUICK_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *value, *arg;
	uint32_t arg_num;

	if (IS_UNUSED == IS_CONST) {
		SAVE_OPLINE();
		zend_string *arg_name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
		arg = zend_handle_named_arg(&EX(call), arg_name, &arg_num, CACHE_ADDR(opline->result.num));
		if (UNEXPECTED(!arg)) {
			zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
			HANDLE_EXCEPTION();
		}
	} else {
		arg = ZEND_CALL_VAR(EX(call), opline->result.var);
		arg_num = opline->op2.num;
	}

	if (EXPECTED(1)) {
		if (QUICK_ARG_MUST_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
			goto send_val_by_ref;
		}
	} else if (ARG_MUST_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
send_val_by_ref:;
		ZEND_VM_DISPATCH_TO_HELPER(zend_cannot_pass_by_ref_helper_SPEC_TAILCALL(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_EX arg_num, arg));
	}
	value = _get_zval_ptr_tmp(opline->op1.var EXECUTE_DATA_CC);
	ZVAL_COPY_VALUE(arg, value);
	if (IS_TMP_VAR == IS_CONST) {
		if (UNEXPECTED(Z_OPT_REFCOUNTED_P(arg))) {
			Z_ADDREF_P(arg);
		}
	}
	ZEND_VM_NEXT_OPCODE();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_UNUSED_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *expr_ptr, new_expr;

	SAVE_OPLINE();
	if ((IS_TMP_VAR == IS_VAR || IS_TMP_VAR == IS_CV) &&
	    UNEXPECTED(opline->extended_value & ZEND_ARRAY_ELEMENT_REF)) {
		expr_ptr = zend_get_bad_ptr();
		if (Z_ISREF_P(expr_ptr)) {
			Z_ADDREF_P(expr_ptr);
		} else {
			ZVAL_MAKE_REF_EX(expr_ptr, 2);
		}
		zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
	} else {
		expr_ptr = _get_zval_ptr_tmp(opline->op1.var EXECUTE_DATA_CC);
		if (IS_TMP_VAR == IS_TMP_VAR) {
			/* pass */
		} else if (IS_TMP_VAR == IS_CONST) {
			Z_TRY_ADDREF_P(expr_ptr);
		} else if (IS_TMP_VAR == IS_CV) {
			ZVAL_DEREF(expr_ptr);
			Z_TRY_ADDREF_P(expr_ptr);
		} else /* if (IS_TMP_VAR == IS_VAR) */ {
			if (UNEXPECTED(Z_ISREF_P(expr_ptr))) {
				zend_refcounted *ref = Z_COUNTED_P(expr_ptr);

				expr_ptr = Z_REFVAL_P(expr_ptr);
				if (UNEXPECTED(GC_DELREF(ref) == 0)) {
					ZVAL_COPY_VALUE(&new_expr, expr_ptr);
					expr_ptr = &new_expr;
					efree_size(ref, sizeof(zend_reference));
				} else if (Z_OPT_REFCOUNTED_P(expr_ptr)) {
					Z_ADDREF_P(expr_ptr);
				}
			}
		}
	}

	if (IS_UNUSED != IS_UNUSED) {
		zval *offset = NULL;
		zend_string *str;
		zend_ulong hval;

add_again:
		if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) {
			str = Z_STR_P(offset);
			if (IS_UNUSED != IS_CONST) {
				if (ZEND_HANDLE_NUMERIC(str, hval)) {
					goto num_index;
				}
			}
str_index:
			zend_hash_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), str, expr_ptr);
		} else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
			hval = Z_LVAL_P(offset);
num_index:
			zend_hash_index_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), hval, expr_ptr);
		} else if ((IS_UNUSED & (IS_VAR|IS_CV)) && EXPECTED(Z_TYPE_P(offset) == IS_REFERENCE)) {
			offset = Z_REFVAL_P(offset);
			goto add_again;
		} else if (UNEXPECTED(Z_TYPE_P(offset) == IS_NULL)) {
			zval tmp;
			if (IS_TMP_VAR == IS_CV || IS_TMP_VAR == IS_VAR) {
				ZVAL_COPY(&tmp, expr_ptr);
			}
			zend_error(E_DEPRECATED, "Using null as an array offset is deprecated, use an empty string instead");
			if (IS_TMP_VAR == IS_CV || IS_TMP_VAR == IS_VAR) {
				/* A userland error handler can do funky things to the expression, so reset it */
				zval_ptr_dtor(expr_ptr);
				ZVAL_COPY_VALUE(expr_ptr, &tmp);
			}
			if (UNEXPECTED(EG(exception))) {
				zval_ptr_dtor_nogc(expr_ptr);
				HANDLE_EXCEPTION();
			}
			str = ZSTR_EMPTY_ALLOC();
			goto str_index;
		} else if (Z_TYPE_P(offset) == IS_DOUBLE) {
			hval = zend_dval_to_lval_safe(Z_DVAL_P(offset));
			goto num_index;
		} else if (Z_TYPE_P(offset) == IS_FALSE) {
			hval = 0;
			goto num_index;
		} else if (Z_TYPE_P(offset) == IS_TRUE) {
			hval = 1;
			goto num_index;
		} else if (Z_TYPE_P(offset) == IS_RESOURCE) {
			zend_use_resource_as_offset(offset);
			hval = Z_RES_HANDLE_P(offset);
			goto num_index;
		} else if (IS_UNUSED == IS_CV && Z_TYPE_P(offset) == IS_UNDEF) {
			ZVAL_UNDEFINED_OP2();
			str = ZSTR_EMPTY_ALLOC();
			goto str_index;
		} else {
			zend_illegal_array_offset_access(offset);
			zval_ptr_dtor_nogc(expr_ptr);
		}


	} else {
		if (!zend_hash_next_index_insert(Z_ARRVAL_P(EX_VAR(opline->result.var)), expr_ptr)) {
			zend_cannot_add_element();
			zval_ptr_dtor_nogc(expr_ptr);
		}
	}
	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_INIT_ARRAY_SPEC_TMP_UNUSED_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	zval *array;
	uint32_t size;
	USE_OPLINE

	SAVE_OPLINE();
	array = EX_VAR(opline->result.var);
	if (IS_TMP_VAR != IS_UNUSED) {
		size = opline->extended_value >> ZEND_ARRAY_SIZE_SHIFT;
		ZVAL_ARR(array, zend_new_array(size));
		/* Explicitly initialize array as not-packed if flag is set */
		if (opline->extended_value & ZEND_ARRAY_NOT_PACKED) {
			zend_hash_real_init_mixed(Z_ARRVAL_P(array));
		}
		ZEND_VM_TAIL_CALL(ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_UNUSED_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
	} else {
		ZVAL_ARR(array, zend_new_array(0));
		ZEND_VM_NEXT_OPCODE();
	}
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_YIELD_SPEC_TMP_UNUSED_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE

	zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C);

	SAVE_OPLINE();
	if (UNEXPECTED(generator->flags & ZEND_GENERATOR_FORCED_CLOSE)) {
		ZEND_VM_TAIL_CALL(zend_yield_in_closed_generator_helper_SPEC_TAILCALL(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
	}

	/* Destroy the previously yielded value */
	zval_ptr_dtor(&generator->value);

	/* Destroy the previously yielded key */
	zval_ptr_dtor(&generator->key);

	/* Set the new yielded value */
	if (IS_TMP_VAR != IS_UNUSED) {
		if (UNEXPECTED(EX(func)->op_array.fn_flags & ZEND_ACC_RETURN_REFERENCE)) {
			/* Constants and temporary variables aren't yieldable by reference,
			 * but we still allow them with a notice. */
			if (IS_TMP_VAR & (IS_CONST|IS_TMP_VAR)) {
				zval *value;

				zend_error(E_NOTICE, "Only variable references should be yielded by reference");

				value = _get_zval_ptr_tmp(opline->op1.var EXECUTE_DATA_CC);
				ZVAL_COPY_VALUE(&generator->value, value);
				if (IS_TMP_VAR == IS_CONST) {
					if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
						Z_ADDREF(generator->value);
					}
				}
			} else {
				zval *value_ptr = zend_get_bad_ptr();

				/* If a function call result is yielded and the function did
				 * not return by reference we throw a notice. */
				do {
					if (IS_TMP_VAR == IS_VAR) {
						ZEND_ASSERT(value_ptr != &EG(uninitialized_zval));
						if (opline->extended_value == ZEND_RETURNS_FUNCTION
						 && !Z_ISREF_P(value_ptr)) {
							zend_error(E_NOTICE, "Only variable references should be yielded by reference");
							ZVAL_COPY(&generator->value, value_ptr);
							break;
						}
					}
					if (Z_ISREF_P(value_ptr)) {
						Z_ADDREF_P(value_ptr);
					} else {
						ZVAL_MAKE_REF_EX(value_ptr, 2);
					}
					ZVAL_REF(&generator->value, Z_REF_P(value_ptr));
				} while (0);

				zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
			}
		} else {
			zval *value = _get_zval_ptr_tmp(opline->op1.var EXECUTE_DATA_CC);

			/* Consts, temporary variables and references need copying */
			if (IS_TMP_VAR == IS_CONST) {
				ZVAL_COPY_VALUE(&generator->value, value);
				if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
					Z_ADDREF(generator->value);
				}
			} else if (IS_TMP_VAR == IS_TMP_VAR) {
				ZVAL_COPY_VALUE(&generator->value, value);
			} else if ((IS_TMP_VAR & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) {
				ZVAL_COPY(&generator->value, Z_REFVAL_P(value));


			} else {
				ZVAL_COPY_VALUE(&generator->value, value);
				if (IS_TMP_VAR == IS_CV) {
					if (Z_OPT_REFCOUNTED_P(value)) Z_ADDREF_P(value);
				}
			}
		}
	} else {
		/* If no value was specified yield null */
		ZVAL_NULL(&generator->value);
	}

	/* Set the new yielded key */
	if (IS_UNUSED != IS_UNUSED) {
		zval *key = NULL;
		if ((IS_UNUSED & (IS_CV|IS_VAR)) && UNEXPECTED(Z_TYPE_P(key) == IS_REFERENCE)) {
			key = Z_REFVAL_P(key);
		}
		ZVAL_COPY(&generator->key, key);


		if (Z_TYPE(generator->key) == IS_LONG
		    && Z_LVAL(generator->key) > generator->largest_used_integer_key
		) {
			generator->largest_used_integer_key = Z_LVAL(generator->key);
		}
	} else {
		/* If no key was specified we use auto-increment keys */
		generator->largest_used_integer_key++;
		ZVAL_LONG(&generator->key, generator->largest_used_integer_key);
	}

	if (RETURN_VALUE_USED(opline)) {
		/* If the return value of yield is used set the send
		 * target and initialize it to NULL */
		generator->send_target = EX_VAR(opline->result.var);
		ZVAL_NULL(generator->send_target);
	} else {
		generator->send_target = NULL;
	}

	/* The GOTO VM uses a local opline variable. We need to set the opline
	 * variable in execute_data so we don't resume at an old position. */
	SAVE_OPLINE();

	ZEND_VM_RETURN();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_GET_TYPE_SPEC_TMP_UNUSED_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1;
	zend_string *type;

	SAVE_OPLINE();
	op1 = _get_zval_ptr_tmp(opline->op1.var EXECUTE_DATA_CC);
	type = zend_zval_get_legacy_type(op1);
	if (EXPECTED(type)) {
		ZVAL_INTERNED_STR(EX_VAR(opline->result.var), type);
	} else {
		ZVAL_STRING(EX_VAR(opline->result.var), "unknown type");
	}
	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_CASE_STRICT_SPEC_TMP_CV_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;
	bool result;

	SAVE_OPLINE();
	op1 = _get_zval_ptr_tmp(opline->op1.var EXECUTE_DATA_CC);
	op2 = _get_zval_ptr_cv_deref_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
	result = fast_is_identical_function(op1, op2);


	ZEND_VM_SMART_BRANCH(result, 1);
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_FETCH_DIM_FUNC_ARG_SPEC_TMP_CV_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
#if 0
	USE_OPLINE
#endif

	if (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) {
		if ((IS_TMP_VAR & (IS_CONST|IS_TMP_VAR))) {
			ZEND_VM_TAIL_CALL(zend_use_tmp_in_write_context_helper_SPEC_TAILCALL(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
		}
		ZEND_VM_TAIL_CALL(ZEND_NULL_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
	} else {
		if (IS_CV == IS_UNUSED) {
			ZEND_VM_TAIL_CALL(zend_use_undef_in_read_context_helper_SPEC_TAILCALL(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
		}
		ZEND_VM_TAIL_CALL(ZEND_FETCH_DIM_R_SPEC_TMPVAR_CV_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
	}
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_FETCH_OBJ_FUNC_ARG_SPEC_TMP_CV_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
#if 0
	USE_OPLINE
#endif

	if (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) {
		/* Behave like FETCH_OBJ_W */
		if ((IS_TMP_VAR & (IS_CONST|IS_TMP_VAR))) {
			ZEND_VM_TAIL_CALL(zend_use_tmp_in_write_context_helper_SPEC_TAILCALL(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
		}
		ZEND_VM_TAIL_CALL(ZEND_NULL_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
	} else {
		ZEND_VM_TAIL_CALL(ZEND_FETCH_OBJ_R_SPEC_TMPVAR_CV_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
	}
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_ROPE_ADD_SPEC_TMP_CV_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zend_string **rope;
	zval *var;

	/* op1 and result are the same */
	rope = (zend_string**)EX_VAR(opline->op1.var);
	if (IS_CV == IS_CONST) {
		var = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
		rope[opline->extended_value] = Z_STR_P(var);
		if (UNEXPECTED(Z_REFCOUNTED_P(var))) {
			Z_ADDREF_P(var);
		}
	} else {
		var = EX_VAR(opline->op2.var);
		if (EXPECTED(Z_TYPE_P(var) == IS_STRING)) {
			if (IS_CV == IS_CV) {
				rope[opline->extended_value] = zend_string_copy(Z_STR_P(var));
			} else {
				rope[opline->extended_value] = Z_STR_P(var);
			}
		} else {
			SAVE_OPLINE();
			if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(var) == IS_UNDEF)) {
				ZVAL_UNDEFINED_OP2();
			}
			rope[opline->extended_value] = zval_get_string_func(var);


			ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
		}
	}
	ZEND_VM_NEXT_OPCODE();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_ROPE_END_SPEC_TMP_CV_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zend_string **rope;
	zval *var, *ret;
	uint32_t i;

	rope = (zend_string**)EX_VAR(opline->op1.var);
	if (IS_CV == IS_CONST) {
		var = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
		rope[opline->extended_value] = Z_STR_P(var);
		if (UNEXPECTED(Z_REFCOUNTED_P(var))) {
			Z_ADDREF_P(var);
		}
	} else {
		var = EX_VAR(opline->op2.var);
		if (EXPECTED(Z_TYPE_P(var) == IS_STRING)) {
			if (IS_CV == IS_CV) {
				rope[opline->extended_value] = zend_string_copy(Z_STR_P(var));
			} else {
				rope[opline->extended_value] = Z_STR_P(var);
			}
		} else {
			SAVE_OPLINE();
			if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(var) == IS_UNDEF)) {
				ZVAL_UNDEFINED_OP2();
			}
			rope[opline->extended_value] = zval_get_string_func(var);


			if (UNEXPECTED(EG(exception))) {
				for (i = 0; i <= opline->extended_value; i++) {
					zend_string_release_ex(rope[i], 0);
				}
				ZVAL_UNDEF(EX_VAR(opline->result.var));
				HANDLE_EXCEPTION();
			}
		}
	}

	size_t len = 0;
	uint32_t flags = ZSTR_COPYABLE_CONCAT_PROPERTIES;
	for (i = 0; i <= opline->extended_value; i++) {
		flags &= ZSTR_GET_COPYABLE_CONCAT_PROPERTIES(rope[i]);
		len += ZSTR_LEN(rope[i]);
	}
	ret = EX_VAR(opline->result.var);
	ZVAL_STR(ret, zend_string_alloc(len, 0));
	GC_ADD_FLAGS(Z_STR_P(ret), flags);

	char *target = Z_STRVAL_P(ret);
	for (i = 0; i <= opline->extended_value; i++) {
		memcpy(target, ZSTR_VAL(rope[i]), ZSTR_LEN(rope[i]));
		target += ZSTR_LEN(rope[i]);
		zend_string_release_ex(rope[i], 0);
	}
	*target = '\0';

	ZEND_VM_NEXT_OPCODE();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_CV_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *expr_ptr, new_expr;

	SAVE_OPLINE();
	if ((IS_TMP_VAR == IS_VAR || IS_TMP_VAR == IS_CV) &&
	    UNEXPECTED(opline->extended_value & ZEND_ARRAY_ELEMENT_REF)) {
		expr_ptr = zend_get_bad_ptr();
		if (Z_ISREF_P(expr_ptr)) {
			Z_ADDREF_P(expr_ptr);
		} else {
			ZVAL_MAKE_REF_EX(expr_ptr, 2);
		}
		zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
	} else {
		expr_ptr = _get_zval_ptr_tmp(opline->op1.var EXECUTE_DATA_CC);
		if (IS_TMP_VAR == IS_TMP_VAR) {
			/* pass */
		} else if (IS_TMP_VAR == IS_CONST) {
			Z_TRY_ADDREF_P(expr_ptr);
		} else if (IS_TMP_VAR == IS_CV) {
			ZVAL_DEREF(expr_ptr);
			Z_TRY_ADDREF_P(expr_ptr);
		} else /* if (IS_TMP_VAR == IS_VAR) */ {
			if (UNEXPECTED(Z_ISREF_P(expr_ptr))) {
				zend_refcounted *ref = Z_COUNTED_P(expr_ptr);

				expr_ptr = Z_REFVAL_P(expr_ptr);
				if (UNEXPECTED(GC_DELREF(ref) == 0)) {
					ZVAL_COPY_VALUE(&new_expr, expr_ptr);
					expr_ptr = &new_expr;
					efree_size(ref, sizeof(zend_reference));
				} else if (Z_OPT_REFCOUNTED_P(expr_ptr)) {
					Z_ADDREF_P(expr_ptr);
				}
			}
		}
	}

	if (IS_CV != IS_UNUSED) {
		zval *offset = EX_VAR(opline->op2.var);
		zend_string *str;
		zend_ulong hval;

add_again:
		if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) {
			str = Z_STR_P(offset);
			if (IS_CV != IS_CONST) {
				if (ZEND_HANDLE_NUMERIC(str, hval)) {
					goto num_index;
				}
			}
str_index:
			zend_hash_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), str, expr_ptr);
		} else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
			hval = Z_LVAL_P(offset);
num_index:
			zend_hash_index_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), hval, expr_ptr);
		} else if ((IS_CV & (IS_VAR|IS_CV)) && EXPECTED(Z_TYPE_P(offset) == IS_REFERENCE)) {
			offset = Z_REFVAL_P(offset);
			goto add_again;
		} else if (UNEXPECTED(Z_TYPE_P(offset) == IS_NULL)) {
			zval tmp;
			if (IS_TMP_VAR == IS_CV || IS_TMP_VAR == IS_VAR) {
				ZVAL_COPY(&tmp, expr_ptr);
			}
			zend_error(E_DEPRECATED, "Using null as an array offset is deprecated, use an empty string instead");
			if (IS_TMP_VAR == IS_CV || IS_TMP_VAR == IS_VAR) {
				/* A userland error handler can do funky things to the expression, so reset it */
				zval_ptr_dtor(expr_ptr);
				ZVAL_COPY_VALUE(expr_ptr, &tmp);
			}
			if (UNEXPECTED(EG(exception))) {
				zval_ptr_dtor_nogc(expr_ptr);
				HANDLE_EXCEPTION();
			}
			str = ZSTR_EMPTY_ALLOC();
			goto str_index;
		} else if (Z_TYPE_P(offset) == IS_DOUBLE) {
			hval = zend_dval_to_lval_safe(Z_DVAL_P(offset));
			goto num_index;
		} else if (Z_TYPE_P(offset) == IS_FALSE) {
			hval = 0;
			goto num_index;
		} else if (Z_TYPE_P(offset) == IS_TRUE) {
			hval = 1;
			goto num_index;
		} else if (Z_TYPE_P(offset) == IS_RESOURCE) {
			zend_use_resource_as_offset(offset);
			hval = Z_RES_HANDLE_P(offset);
			goto num_index;
		} else if (IS_CV == IS_CV && Z_TYPE_P(offset) == IS_UNDEF) {
			ZVAL_UNDEFINED_OP2();
			str = ZSTR_EMPTY_ALLOC();
			goto str_index;
		} else {
			zend_illegal_array_offset_access(offset);
			zval_ptr_dtor_nogc(expr_ptr);
		}


	} else {
		if (!zend_hash_next_index_insert(Z_ARRVAL_P(EX_VAR(opline->result.var)), expr_ptr)) {
			zend_cannot_add_element();
			zval_ptr_dtor_nogc(expr_ptr);
		}
	}
	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_INIT_ARRAY_SPEC_TMP_CV_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	zval *array;
	uint32_t size;
	USE_OPLINE

	SAVE_OPLINE();
	array = EX_VAR(opline->result.var);
	if (IS_TMP_VAR != IS_UNUSED) {
		size = opline->extended_value >> ZEND_ARRAY_SIZE_SHIFT;
		ZVAL_ARR(array, zend_new_array(size));
		/* Explicitly initialize array as not-packed if flag is set */
		if (opline->extended_value & ZEND_ARRAY_NOT_PACKED) {
			zend_hash_real_init_mixed(Z_ARRVAL_P(array));
		}
		ZEND_VM_TAIL_CALL(ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_CV_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
	} else {
		ZVAL_ARR(array, zend_new_array(0));
		ZEND_VM_NEXT_OPCODE();
	}
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_YIELD_SPEC_TMP_CV_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE

	zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C);

	SAVE_OPLINE();
	if (UNEXPECTED(generator->flags & ZEND_GENERATOR_FORCED_CLOSE)) {
		ZEND_VM_TAIL_CALL(zend_yield_in_closed_generator_helper_SPEC_TAILCALL(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
	}

	/* Destroy the previously yielded value */
	zval_ptr_dtor(&generator->value);

	/* Destroy the previously yielded key */
	zval_ptr_dtor(&generator->key);

	/* Set the new yielded value */
	if (IS_TMP_VAR != IS_UNUSED) {
		if (UNEXPECTED(EX(func)->op_array.fn_flags & ZEND_ACC_RETURN_REFERENCE)) {
			/* Constants and temporary variables aren't yieldable by reference,
			 * but we still allow them with a notice. */
			if (IS_TMP_VAR & (IS_CONST|IS_TMP_VAR)) {
				zval *value;

				zend_error(E_NOTICE, "Only variable references should be yielded by reference");

				value = _get_zval_ptr_tmp(opline->op1.var EXECUTE_DATA_CC);
				ZVAL_COPY_VALUE(&generator->value, value);
				if (IS_TMP_VAR == IS_CONST) {
					if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
						Z_ADDREF(generator->value);
					}
				}
			} else {
				zval *value_ptr = zend_get_bad_ptr();

				/* If a function call result is yielded and the function did
				 * not return by reference we throw a notice. */
				do {
					if (IS_TMP_VAR == IS_VAR) {
						ZEND_ASSERT(value_ptr != &EG(uninitialized_zval));
						if (opline->extended_value == ZEND_RETURNS_FUNCTION
						 && !Z_ISREF_P(value_ptr)) {
							zend_error(E_NOTICE, "Only variable references should be yielded by reference");
							ZVAL_COPY(&generator->value, value_ptr);
							break;
						}
					}
					if (Z_ISREF_P(value_ptr)) {
						Z_ADDREF_P(value_ptr);
					} else {
						ZVAL_MAKE_REF_EX(value_ptr, 2);
					}
					ZVAL_REF(&generator->value, Z_REF_P(value_ptr));
				} while (0);

				zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
			}
		} else {
			zval *value = _get_zval_ptr_tmp(opline->op1.var EXECUTE_DATA_CC);

			/* Consts, temporary variables and references need copying */
			if (IS_TMP_VAR == IS_CONST) {
				ZVAL_COPY_VALUE(&generator->value, value);
				if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
					Z_ADDREF(generator->value);
				}
			} else if (IS_TMP_VAR == IS_TMP_VAR) {
				ZVAL_COPY_VALUE(&generator->value, value);
			} else if ((IS_TMP_VAR & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) {
				ZVAL_COPY(&generator->value, Z_REFVAL_P(value));


			} else {
				ZVAL_COPY_VALUE(&generator->value, value);
				if (IS_TMP_VAR == IS_CV) {
					if (Z_OPT_REFCOUNTED_P(value)) Z_ADDREF_P(value);
				}
			}
		}
	} else {
		/* If no value was specified yield null */
		ZVAL_NULL(&generator->value);
	}

	/* Set the new yielded key */
	if (IS_CV != IS_UNUSED) {
		zval *key = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
		if ((IS_CV & (IS_CV|IS_VAR)) && UNEXPECTED(Z_TYPE_P(key) == IS_REFERENCE)) {
			key = Z_REFVAL_P(key);
		}
		ZVAL_COPY(&generator->key, key);


		if (Z_TYPE(generator->key) == IS_LONG
		    && Z_LVAL(generator->key) > generator->largest_used_integer_key
		) {
			generator->largest_used_integer_key = Z_LVAL(generator->key);
		}
	} else {
		/* If no key was specified we use auto-increment keys */
		generator->largest_used_integer_key++;
		ZVAL_LONG(&generator->key, generator->largest_used_integer_key);
	}

	if (RETURN_VALUE_USED(opline)) {
		/* If the return value of yield is used set the send
		 * target and initialize it to NULL */
		generator->send_target = EX_VAR(opline->result.var);
		ZVAL_NULL(generator->send_target);
	} else {
		generator->send_target = NULL;
	}

	/* The GOTO VM uses a local opline variable. We need to set the opline
	 * variable in execute_data so we don't resume at an old position. */
	SAVE_OPLINE();

	ZEND_VM_RETURN();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_BIND_LEXICAL_SPEC_TMP_CV_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *closure, *var;

	closure = _get_zval_ptr_tmp(opline->op1.var EXECUTE_DATA_CC);
	if (opline->extended_value & ZEND_BIND_REF) {
		/* By-ref binding */
		var = _get_zval_ptr_cv_BP_VAR_W(opline->op2.var EXECUTE_DATA_CC);
		if (Z_ISREF_P(var)) {
			Z_ADDREF_P(var);
		} else {
			ZVAL_MAKE_REF_EX(var, 2);
		}
	} else {
		var = EX_VAR(opline->op2.var);
		if (UNEXPECTED(Z_ISUNDEF_P(var)) && !(opline->extended_value & ZEND_BIND_IMPLICIT)) {
			SAVE_OPLINE();
			var = ZVAL_UNDEFINED_OP2();
			if (UNEXPECTED(EG(exception))) {
				HANDLE_EXCEPTION();
			}
		}
		ZVAL_DEREF(var);
		Z_TRY_ADDREF_P(var);
	}

	zend_closure_bind_var_ex(closure,
		(opline->extended_value & ~(ZEND_BIND_REF|ZEND_BIND_IMPLICIT)), var);
	ZEND_VM_NEXT_OPCODE();
}

static zend_never_inline ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV  zend_pre_inc_helper_SPEC_VAR_TAILCALL(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *var_ptr;

	var_ptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);

	SAVE_OPLINE();
	if (IS_VAR == IS_CV && UNEXPECTED(Z_TYPE_P(var_ptr) == IS_UNDEF)) {
		ZVAL_UNDEFINED_OP1();
		ZVAL_NULL(var_ptr);
	}

	do {
		if (UNEXPECTED(Z_TYPE_P(var_ptr) == IS_REFERENCE)) {
			zend_reference *ref = Z_REF_P(var_ptr);
			var_ptr = Z_REFVAL_P(var_ptr);
			if (UNEXPECTED(ZEND_REF_HAS_TYPE_SOURCES(ref))) {
				zend_incdec_typed_ref(ref, NULL OPLINE_CC EXECUTE_DATA_CC);
				break;
			}
		}
		increment_function(var_ptr);
	} while (0);

	if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
		ZVAL_COPY(EX_VAR(opline->result.var), var_ptr);
	}

	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_PRE_INC_SPEC_VAR_RETVAL_UNUSED_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *var_ptr;

	var_ptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);

	if (EXPECTED(Z_TYPE_P(var_ptr) == IS_LONG)) {
		fast_long_increment_function(var_ptr);
		if (UNEXPECTED(0)) {
			ZVAL_COPY_VALUE(EX_VAR(opline->result.var), var_ptr);
		}
		ZEND_VM_NEXT_OPCODE();
	}

	ZEND_VM_TAIL_CALL(zend_pre_inc_helper_SPEC_VAR_TAILCALL(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
}

static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_PRE_INC_SPEC_VAR_RETVAL_USED_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *var_ptr;

	var_ptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);

	if (EXPECTED(Z_TYPE_P(var_ptr) == IS_LONG)) {
		fast_long_increment_function(var_ptr);
		if (UNEXPECTED(1)) {
			ZVAL_COPY_VALUE(EX_VAR(opline->result.var), var_ptr);
		}
		ZEND_VM_NEXT_OPCODE();
	}

	ZEND_VM_TAIL_CALL(zend_pre_inc_helper_SPEC_VAR_TAILCALL(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
}

static zend_never_inline ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV  zend_pre_dec_helper_SPEC_VAR_TAILCALL(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *var_ptr;

	var_ptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);

	SAVE_OPLINE();
	if (IS_VAR == IS_CV && UNEXPECTED(Z_TYPE_P(var_ptr) == IS_UNDEF)) {
		ZVAL_UNDEFINED_OP1();
		ZVAL_NULL(var_ptr);
	}

	do {
		if (UNEXPECTED(Z_TYPE_P(var_ptr) == IS_REFERENCE)) {
			zend_reference *ref = Z_REF_P(var_ptr);
			var_ptr = Z_REFVAL_P(var_ptr);

			if (UNEXPECTED(ZEND_REF_HAS_TYPE_SOURCES(ref))) {
				zend_incdec_typed_ref(ref, NULL OPLINE_CC EXECUTE_DATA_CC);
				break;
			}
		}
		decrement_function(var_ptr);
	} while (0);

	if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
		ZVAL_COPY(EX_VAR(opline->result.var), var_ptr);
	}

	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_PRE_DEC_SPEC_VAR_RETVAL_UNUSED_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *var_ptr;

	var_ptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);

	if (EXPECTED(Z_TYPE_P(var_ptr) == IS_LONG)) {
		fast_long_decrement_function(var_ptr);
		if (UNEXPECTED(0)) {
			ZVAL_COPY_VALUE(EX_VAR(opline->result.var), var_ptr);
		}
		ZEND_VM_NEXT_OPCODE();
	}

	ZEND_VM_TAIL_CALL(zend_pre_dec_helper_SPEC_VAR_TAILCALL(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
}

static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_PRE_DEC_SPEC_VAR_RETVAL_USED_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *var_ptr;

	var_ptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);

	if (EXPECTED(Z_TYPE_P(var_ptr) == IS_LONG)) {
		fast_long_decrement_function(var_ptr);
		if (UNEXPECTED(1)) {
			ZVAL_COPY_VALUE(EX_VAR(opline->result.var), var_ptr);
		}
		ZEND_VM_NEXT_OPCODE();
	}

	ZEND_VM_TAIL_CALL(zend_pre_dec_helper_SPEC_VAR_TAILCALL(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
}

static zend_never_inline ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV  zend_post_inc_helper_SPEC_VAR_TAILCALL(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *var_ptr;

	var_ptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);

	SAVE_OPLINE();
	if (IS_VAR == IS_CV && UNEXPECTED(Z_TYPE_P(var_ptr) == IS_UNDEF)) {
		ZVAL_UNDEFINED_OP1();
		ZVAL_NULL(var_ptr);
	}

	do {
		if (UNEXPECTED(Z_TYPE_P(var_ptr) == IS_REFERENCE)) {
			zend_reference *ref = Z_REF_P(var_ptr);
			var_ptr = Z_REFVAL_P(var_ptr);

			if (UNEXPECTED(ZEND_REF_HAS_TYPE_SOURCES(ref))) {
				zend_incdec_typed_ref(ref, EX_VAR(opline->result.var) OPLINE_CC EXECUTE_DATA_CC);
				break;
			}
		}
		ZVAL_COPY(EX_VAR(opline->result.var), var_ptr);

		increment_function(var_ptr);
	} while (0);

	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_POST_INC_SPEC_VAR_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *var_ptr;

	var_ptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);

	if (EXPECTED(Z_TYPE_P(var_ptr) == IS_LONG)) {
		ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(var_ptr));
		fast_long_increment_function(var_ptr);
		ZEND_VM_NEXT_OPCODE();
	}

	ZEND_VM_TAIL_CALL(zend_post_inc_helper_SPEC_VAR_TAILCALL(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
}

static zend_never_inline ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV  zend_post_dec_helper_SPEC_VAR_TAILCALL(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *var_ptr;

	var_ptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);

	SAVE_OPLINE();
	if (IS_VAR == IS_CV && UNEXPECTED(Z_TYPE_P(var_ptr) == IS_UNDEF)) {
		ZVAL_UNDEFINED_OP1();
		ZVAL_NULL(var_ptr);
	}

	do {
		if (UNEXPECTED(Z_TYPE_P(var_ptr) == IS_REFERENCE)) {
			zend_reference *ref = Z_REF_P(var_ptr);
			var_ptr = Z_REFVAL_P(var_ptr);

			if (UNEXPECTED(ZEND_REF_HAS_TYPE_SOURCES(ref))) {
				zend_incdec_typed_ref(ref, EX_VAR(opline->result.var) OPLINE_CC EXECUTE_DATA_CC);
				break;
			}
		}
		ZVAL_COPY(EX_VAR(opline->result.var), var_ptr);

		decrement_function(var_ptr);
	} while (0);

	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_POST_DEC_SPEC_VAR_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *var_ptr;

	var_ptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);

	if (EXPECTED(Z_TYPE_P(var_ptr) == IS_LONG)) {
		ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(var_ptr));
		fast_long_decrement_function(var_ptr);
		ZEND_VM_NEXT_OPCODE();
	}

	ZEND_VM_TAIL_CALL(zend_post_dec_helper_SPEC_VAR_TAILCALL(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
}

static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_RETURN_SPEC_VAR_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *retval_ptr;
	zval *return_value;


	retval_ptr = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
	return_value = EX(return_value);


	if (IS_VAR == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(retval_ptr) == IS_UNDEF)) {
		SAVE_OPLINE();
		retval_ptr = ZVAL_UNDEFINED_OP1();
		if (return_value) {
			ZVAL_NULL(return_value);
		}
	} else if (!return_value) {
		if (IS_VAR & (IS_VAR|IS_TMP_VAR)) {
			if (Z_REFCOUNTED_P(retval_ptr) && !Z_DELREF_P(retval_ptr)) {
				SAVE_OPLINE();
				rc_dtor_func(Z_COUNTED_P(retval_ptr));
			}
		}
	} else {
		if ((IS_VAR & (IS_CONST|IS_TMP_VAR))) {
			ZVAL_COPY_VALUE(return_value, retval_ptr);
			if (IS_VAR == IS_CONST) {
				if (UNEXPECTED(Z_OPT_REFCOUNTED_P(return_value))) {
					Z_ADDREF_P(return_value);
				}
			}
		} else if (IS_VAR == IS_CV) {
			do {
				if (Z_OPT_REFCOUNTED_P(retval_ptr)) {
					if (EXPECTED(!Z_OPT_ISREF_P(retval_ptr))) {
						if (EXPECTED(!(EX_CALL_INFO() & (ZEND_CALL_CODE|ZEND_CALL_OBSERVED)))) {
							zend_refcounted *ref = Z_COUNTED_P(retval_ptr);
							ZVAL_COPY_VALUE(return_value, retval_ptr);
							if (GC_MAY_LEAK(ref)) {
								SAVE_OPLINE();
								gc_possible_root(ref);
							}
							ZVAL_NULL(retval_ptr);
							break;
						} else {
							Z_ADDREF_P(retval_ptr);
						}
					} else {
						retval_ptr = Z_REFVAL_P(retval_ptr);
						if (Z_OPT_REFCOUNTED_P(retval_ptr)) {
							Z_ADDREF_P(retval_ptr);
						}
					}
				}
				ZVAL_COPY_VALUE(return_value, retval_ptr);
			} while (0);
		} else /* if (IS_VAR == IS_VAR) */ {
			if (UNEXPECTED(Z_ISREF_P(retval_ptr))) {
				zend_refcounted *ref = Z_COUNTED_P(retval_ptr);

				retval_ptr = Z_REFVAL_P(retval_ptr);
				ZVAL_COPY_VALUE(return_value, retval_ptr);
				if (UNEXPECTED(GC_DELREF(ref) == 0)) {
					efree_size(ref, sizeof(zend_reference));
				} else if (Z_OPT_REFCOUNTED_P(retval_ptr)) {
					Z_ADDREF_P(retval_ptr);
				}
			} else {
				ZVAL_COPY_VALUE(return_value, retval_ptr);
			}
		}
	}






	ZEND_VM_DISPATCH_TO_LEAVE_HELPER(zend_leave_helper_SPEC_TAILCALL);
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_RETURN_BY_REF_SPEC_VAR_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *retval_ptr;
	zval *return_value;


	SAVE_OPLINE();

	return_value = EX(return_value);


	do {
		if ((IS_VAR & (IS_CONST|IS_TMP_VAR)) ||
		    (IS_VAR == IS_VAR && opline->extended_value == ZEND_RETURNS_VALUE)) {
			/* Not supposed to happen, but we'll allow it */
			zend_error(E_NOTICE, "Only variable references should be returned by reference");

			retval_ptr = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
			if (!return_value) {
				zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
			} else {
				if (IS_VAR == IS_VAR && UNEXPECTED(Z_ISREF_P(retval_ptr))) {
					ZVAL_COPY_VALUE(return_value, retval_ptr);
					break;
				}

				ZVAL_NEW_REF(return_value, retval_ptr);
				if (IS_VAR == IS_CONST) {
					Z_TRY_ADDREF_P(retval_ptr);
				}
			}
			break;
		}

		retval_ptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);

		if (IS_VAR == IS_VAR) {
			ZEND_ASSERT(retval_ptr != &EG(uninitialized_zval));
			if (opline->extended_value == ZEND_RETURNS_FUNCTION && !Z_ISREF_P(retval_ptr)) {
				zend_error(E_NOTICE, "Only variable references should be returned by reference");
				if (return_value) {
					ZVAL_NEW_REF(return_value, retval_ptr);
				} else {
					zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
				}
				break;
			}
		}

		if (return_value) {
			if (Z_ISREF_P(retval_ptr)) {
				Z_ADDREF_P(retval_ptr);
			} else {
				ZVAL_MAKE_REF_EX(retval_ptr, 2);
			}
			ZVAL_REF(return_value, Z_REF_P(retval_ptr));
		}

		zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
	} while (0);




	ZEND_VM_DISPATCH_TO_LEAVE_HELPER(zend_leave_helper_SPEC_TAILCALL);
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_GENERATOR_RETURN_SPEC_VAR_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *retval;

	zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C);

	SAVE_OPLINE();
	retval = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);

	/* Copy return value into generator->retval */
	if ((IS_VAR & (IS_CONST|IS_TMP_VAR))) {
		ZVAL_COPY_VALUE(&generator->retval, retval);
		if (IS_VAR == IS_CONST) {
			if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->retval))) {
				Z_ADDREF(generator->retval);
			}
		}
	} else if (IS_VAR == IS_CV) {
		ZVAL_COPY_DEREF(&generator->retval, retval);
	} else /* if (IS_VAR == IS_VAR) */ {
		if (UNEXPECTED(Z_ISREF_P(retval))) {
			zend_refcounted *ref = Z_COUNTED_P(retval);

			retval = Z_REFVAL_P(retval);
			ZVAL_COPY_VALUE(&generator->retval, retval);
			if (UNEXPECTED(GC_DELREF(ref) == 0)) {
				efree_size(ref, sizeof(zend_reference));
			} else if (Z_OPT_REFCOUNTED_P(retval)) {
				Z_ADDREF_P(retval);
			}
		} else {
			ZVAL_COPY_VALUE(&generator->retval, retval);
		}
	}


	EG(current_execute_data) = EX(prev_execute_data);

	/* Close the generator to free up resources */
	zend_generator_close(generator, 1);

	/* Pass execution back to handling code */
	ZEND_VM_RETURN();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_SEND_USER_SPEC_VAR_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *arg, *param;

	SAVE_OPLINE();

	arg = _get_zval_ptr_var_deref(opline->op1.var EXECUTE_DATA_CC);
	param = ZEND_CALL_VAR(EX(call), opline->result.var);
	if (UNEXPECTED(ARG_MUST_BE_SENT_BY_REF(EX(call)->func, opline->op2.num))) {
		zend_param_must_be_ref(EX(call)->func, opline->op2.num);
		Z_TRY_ADDREF_P(arg);
		ZVAL_NEW_REF(param, arg);
	} else {
		ZVAL_COPY(param, arg);
	}

	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_CAST_SPEC_VAR_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *expr;
	zval *result = EX_VAR(opline->result.var);

	SAVE_OPLINE();
	expr = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);

	switch (opline->extended_value) {
		case IS_LONG:
			ZVAL_LONG(result, zval_get_long(expr));
			break;
		case IS_DOUBLE:
			ZVAL_DOUBLE(result, zval_get_double(expr));
			break;
		case IS_STRING:
			ZVAL_STR(result, zval_get_string(expr));
			break;
		default:
			ZEND_ASSERT(opline->extended_value != _IS_BOOL && "Must use ZEND_BOOL instead");
			if (IS_VAR & (IS_VAR|IS_CV)) {
				ZVAL_DEREF(expr);
			}
			/* If value is already of correct type, return it directly */
			if (Z_TYPE_P(expr) == opline->extended_value) {
				ZVAL_COPY_VALUE(result, expr);
				if (IS_VAR == IS_CONST) {
					if (UNEXPECTED(Z_OPT_REFCOUNTED_P(result))) Z_ADDREF_P(result);
				} else if (IS_VAR != IS_TMP_VAR) {
					if (Z_OPT_REFCOUNTED_P(result)) Z_ADDREF_P(result);
				}

				zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
				ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
			}

			if (opline->extended_value == IS_ARRAY) {
				zend_cast_zval_to_array(result, expr, IS_VAR);
			} else {
				ZEND_ASSERT(opline->extended_value == IS_OBJECT);
				zend_cast_zval_to_object(result, expr, IS_VAR);
			}
	}

	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_FE_RESET_R_SPEC_VAR_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *array_ptr, *result;

	SAVE_OPLINE();

	array_ptr = _get_zval_ptr_var_deref(opline->op1.var EXECUTE_DATA_CC);
	if (EXPECTED(Z_TYPE_P(array_ptr) == IS_ARRAY)) {
		result = EX_VAR(opline->result.var);
		ZVAL_COPY_VALUE(result, array_ptr);
		if (IS_VAR != IS_TMP_VAR && Z_OPT_REFCOUNTED_P(result)) {
			Z_ADDREF_P(array_ptr);
		}
		Z_FE_POS_P(result) = 0;

		zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
		ZEND_VM_NEXT_OPCODE();
	} else if (IS_VAR != IS_CONST && EXPECTED(Z_TYPE_P(array_ptr) == IS_OBJECT)) {
		zend_object *zobj = Z_OBJ_P(array_ptr);
		if (!zobj->ce->get_iterator) {
			if (UNEXPECTED(zend_object_is_lazy(zobj))) {
				zobj = zend_lazy_object_init(zobj);
				if (UNEXPECTED(EG(exception))) {
					UNDEF_RESULT();
					zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
					HANDLE_EXCEPTION();
				}
			}
			HashTable *properties = zobj->properties;
			if (properties) {
				if (UNEXPECTED(GC_REFCOUNT(properties) > 1)) {
					if (EXPECTED(!(GC_FLAGS(properties) & IS_ARRAY_IMMUTABLE))) {
						GC_DELREF(properties);
					}
					properties = zobj->properties = zend_array_dup(properties);
				}
			} else {
				properties = zobj->handlers->get_properties(zobj);
			}

			result = EX_VAR(opline->result.var);
			ZVAL_COPY_VALUE(result, array_ptr);
			if (IS_VAR != IS_TMP_VAR) {
				Z_ADDREF_P(array_ptr);
			}

			if (zend_hash_num_elements(properties) == 0) {
				Z_FE_ITER_P(result) = (uint32_t) -1;
				zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
				ZEND_VM_JMP(OP_JMP_ADDR(opline, opline->op2));
			}

			Z_FE_ITER_P(result) = zend_hash_iterator_add(properties, 0);
			zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
			ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
		} else {
			bool is_empty = zend_fe_reset_iterator(array_ptr, 0 OPLINE_CC EXECUTE_DATA_CC);

			zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
			if (UNEXPECTED(EG(exception))) {
				HANDLE_EXCEPTION();
			} else if (is_empty) {
				ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0);
			} else {
				ZEND_VM_NEXT_OPCODE();
			}
		}
	} else {
		zend_error(E_WARNING, "foreach() argument must be of type array|object, %s given", zend_zval_value_name(array_ptr));
		ZVAL_UNDEF(EX_VAR(opline->result.var));
		Z_FE_ITER_P(EX_VAR(opline->result.var)) = (uint32_t)-1;
		zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
		ZEND_VM_JMP(OP_JMP_ADDR(opline, opline->op2));
	}
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_FE_RESET_RW_SPEC_VAR_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *array_ptr, *array_ref;

	SAVE_OPLINE();

	if (IS_VAR == IS_VAR || IS_VAR == IS_CV) {
		array_ref = array_ptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
		if (Z_ISREF_P(array_ref)) {
			array_ptr = Z_REFVAL_P(array_ref);
		}
	} else {
		array_ref = array_ptr = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
	}

	if (EXPECTED(Z_TYPE_P(array_ptr) == IS_ARRAY)) {
		if (IS_VAR == IS_VAR || IS_VAR == IS_CV) {
			if (array_ptr == array_ref) {
				ZVAL_NEW_REF(array_ref, array_ref);
				array_ptr = Z_REFVAL_P(array_ref);
			}
			Z_ADDREF_P(array_ref);
			ZVAL_COPY_VALUE(EX_VAR(opline->result.var), array_ref);
		} else {
			array_ref = EX_VAR(opline->result.var);
			ZVAL_NEW_REF(array_ref, array_ptr);
			array_ptr = Z_REFVAL_P(array_ref);
		}
		if (IS_VAR == IS_CONST) {
			ZVAL_ARR(array_ptr, zend_array_dup(Z_ARRVAL_P(array_ptr)));
		} else {
			SEPARATE_ARRAY(array_ptr);
		}
		Z_FE_ITER_P(EX_VAR(opline->result.var)) = zend_hash_iterator_add(Z_ARRVAL_P(array_ptr), 0);

		zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
		ZEND_VM_NEXT_OPCODE();
	} else if (IS_VAR != IS_CONST && EXPECTED(Z_TYPE_P(array_ptr) == IS_OBJECT)) {
		if (!Z_OBJCE_P(array_ptr)->get_iterator) {
			zend_object *zobj = Z_OBJ_P(array_ptr);
			HashTable *properties;
			if (UNEXPECTED(zend_object_is_lazy(zobj))) {
				zobj = zend_lazy_object_init(zobj);
				if (UNEXPECTED(EG(exception))) {
					UNDEF_RESULT();
					zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
					HANDLE_EXCEPTION();
				}
			}
			if (IS_VAR == IS_VAR || IS_VAR == IS_CV) {
				if (array_ptr == array_ref) {
					ZVAL_NEW_REF(array_ref, array_ref);
					array_ptr = Z_REFVAL_P(array_ref);
				}
				Z_ADDREF_P(array_ref);
				ZVAL_COPY_VALUE(EX_VAR(opline->result.var), array_ref);
			} else {
				array_ptr = EX_VAR(opline->result.var);
				ZVAL_COPY_VALUE(array_ptr, array_ref);
			}
			if (Z_OBJ_P(array_ptr)->properties
			 && UNEXPECTED(GC_REFCOUNT(Z_OBJ_P(array_ptr)->properties) > 1)) {
				if (EXPECTED(!(GC_FLAGS(Z_OBJ_P(array_ptr)->properties) & IS_ARRAY_IMMUTABLE))) {
					GC_DELREF(Z_OBJ_P(array_ptr)->properties);
				}
				Z_OBJ_P(array_ptr)->properties = zend_array_dup(Z_OBJ_P(array_ptr)->properties);
			}

			properties = Z_OBJPROP_P(array_ptr);
			if (zend_hash_num_elements(properties) == 0) {
				Z_FE_ITER_P(EX_VAR(opline->result.var)) = (uint32_t) -1;
				zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
				ZEND_VM_JMP(OP_JMP_ADDR(opline, opline->op2));
			}

			Z_FE_ITER_P(EX_VAR(opline->result.var)) = zend_hash_iterator_add(properties, 0);
			zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
			ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
		} else {
			bool is_empty = zend_fe_reset_iterator(array_ptr, 1 OPLINE_CC EXECUTE_DATA_CC);
			zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
			if (UNEXPECTED(EG(exception))) {
				HANDLE_EXCEPTION();
			} else if (is_empty) {
				ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0);
			} else {
				ZEND_VM_NEXT_OPCODE();
			}
		}
	} else {
		zend_error(E_WARNING, "foreach() argument must be of type array|object, %s given", zend_zval_value_name(array_ptr));
		ZVAL_UNDEF(EX_VAR(opline->result.var));
		Z_FE_ITER_P(EX_VAR(opline->result.var)) = (uint32_t)-1;
		zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
		ZEND_VM_JMP(OP_JMP_ADDR(opline, opline->op2));
	}
}

static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_FE_FETCH_R_SPEC_VAR_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *array;
	zval *value;
	uint32_t value_type;
	HashTable *fe_ht;
	HashPosition pos;

	array = EX_VAR(opline->op1.var);
	if (UNEXPECTED(Z_TYPE_P(array) != IS_ARRAY)) {
		ZEND_VM_TAIL_CALL(zend_fe_fetch_object_helper_SPEC_TAILCALL(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
	}
	fe_ht = Z_ARRVAL_P(array);
	pos = Z_FE_POS_P(array);
	if (HT_IS_PACKED(fe_ht)) {
		value = fe_ht->arPacked + pos;
		while (1) {
			if (UNEXPECTED(pos >= fe_ht->nNumUsed)) {
				/* reached end of iteration */
				ZEND_VM_SET_RELATIVE_OPCODE(opline, opline->extended_value);
				ZEND_VM_CONTINUE();
			}
			value_type = Z_TYPE_INFO_P(value);
			ZEND_ASSERT(value_type != IS_INDIRECT);
			if (EXPECTED(value_type != IS_UNDEF)) {
				break;
			}
			pos++;
			value++;
		}
		Z_FE_POS_P(array) = pos + 1;
		if (RETURN_VALUE_USED(opline)) {
			ZVAL_LONG(EX_VAR(opline->result.var), pos);
		}
	} else {
		Bucket *p;

		p = fe_ht->arData + pos;
		while (1) {
			if (UNEXPECTED(pos >= fe_ht->nNumUsed)) {
				/* reached end of iteration */
				ZEND_VM_SET_RELATIVE_OPCODE(opline, opline->extended_value);
				ZEND_VM_CONTINUE();
			}
			pos++;
			value = &p->val;
			value_type = Z_TYPE_INFO_P(value);
			ZEND_ASSERT(value_type != IS_INDIRECT);
			if (EXPECTED(value_type != IS_UNDEF)) {
				break;
			}
			p++;
		}
		Z_FE_POS_P(array) = pos;
		if (RETURN_VALUE_USED(opline)) {
			if (!p->key) {
				ZVAL_LONG(EX_VAR(opline->result.var), p->h);
			} else {
				ZVAL_STR_COPY(EX_VAR(opline->result.var), p->key);
			}
		}
	}
	if (EXPECTED(opline->op2_type == IS_CV)) {
		zval *variable_ptr = EX_VAR(opline->op2.var);
		SAVE_OPLINE();
		zend_assign_to_variable(variable_ptr, value, IS_CV, EX_USES_STRICT_TYPES());
		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
	} else {
		zval *res = EX_VAR(opline->op2.var);
		zend_refcounted *gc = Z_COUNTED_P(value);

		ZVAL_COPY_VALUE_EX(res, value, gc, value_type);
		if (Z_TYPE_INFO_REFCOUNTED(value_type)) {
			GC_ADDREF(gc);
		}
		ZEND_VM_NEXT_OPCODE();
	}
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_FE_FETCH_RW_SPEC_VAR_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *array;
	zval *value;
	uint32_t value_type;
	HashTable *fe_ht;
	HashPosition pos;
	Bucket *p;

	array = EX_VAR(opline->op1.var);
	SAVE_OPLINE();

	ZVAL_DEREF(array);
	if (EXPECTED(Z_TYPE_P(array) == IS_ARRAY)) {
		pos = zend_hash_iterator_pos_ex(Z_FE_ITER_P(EX_VAR(opline->op1.var)), array);
		fe_ht = Z_ARRVAL_P(array);
		if (HT_IS_PACKED(fe_ht)) {
			value = fe_ht->arPacked + pos;
			while (1) {
				if (UNEXPECTED(pos >= fe_ht->nNumUsed)) {
					/* reached end of iteration */
					goto fe_fetch_w_exit;
				}
				value_type = Z_TYPE_INFO_P(value);
				ZEND_ASSERT(value_type != IS_INDIRECT);
				if (EXPECTED(value_type != IS_UNDEF)) {
					break;
				}
				pos++;
				value++;
			}
			EG(ht_iterators)[Z_FE_ITER_P(EX_VAR(opline->op1.var))].pos = pos + 1;
			if (RETURN_VALUE_USED(opline)) {
				ZVAL_LONG(EX_VAR(opline->result.var), pos);
			}
		} else {
			p = fe_ht->arData + pos;
			while (1) {
				if (UNEXPECTED(pos >= fe_ht->nNumUsed)) {
					/* reached end of iteration */
					goto fe_fetch_w_exit;
				}
				pos++;
				value = &p->val;
				value_type = Z_TYPE_INFO_P(value);
				ZEND_ASSERT(value_type != IS_INDIRECT);
				if (EXPECTED(value_type != IS_UNDEF)) {
					break;
				}
				p++;
			}
			EG(ht_iterators)[Z_FE_ITER_P(EX_VAR(opline->op1.var))].pos = pos;
			if (RETURN_VALUE_USED(opline)) {
				if (!p->key) {
					ZVAL_LONG(EX_VAR(opline->result.var), p->h);
				} else {
					ZVAL_STR_COPY(EX_VAR(opline->result.var), p->key);
				}
			}
		}
	} else if (EXPECTED(Z_TYPE_P(array) == IS_OBJECT)) {
		zend_object_iterator *iter;

		if ((iter = zend_iterator_unwrap(array)) == NULL) {
			/* plain object */

			fe_ht = Z_OBJPROP_P(array);
			pos = zend_hash_iterator_pos(Z_FE_ITER_P(EX_VAR(opline->op1.var)), fe_ht);
			p = fe_ht->arData + pos;
			while (1) {
				if (UNEXPECTED(pos >= fe_ht->nNumUsed)) {
					/* reached end of iteration */
					goto fe_fetch_w_exit_exc;
				}
				pos++;
				value = &p->val;
				value_type = Z_TYPE_INFO_P(value);
				if (EXPECTED(value_type != IS_UNDEF)) {
					if (UNEXPECTED(value_type == IS_INDIRECT)) {
						value = Z_INDIRECT_P(value);
						value_type = Z_TYPE_INFO_P(value);
						if (EXPECTED(value_type != IS_UNDEF)
						 && EXPECTED(zend_check_property_access(Z_OBJ_P(array), p->key, 0) == SUCCESS)) {
							if ((value_type & Z_TYPE_MASK) != IS_REFERENCE) {
								zend_property_info *prop_info =
									zend_get_property_info_for_slot(Z_OBJ_P(array), value);
								if (prop_info) {
									if (UNEXPECTED(prop_info->flags & ZEND_ACC_READONLY)) {
										zend_throw_error(NULL,
											"Cannot acquire reference to readonly property %s::$%s",
											ZSTR_VAL(prop_info->ce->name), ZSTR_VAL(p->key));
										UNDEF_RESULT();
										HANDLE_EXCEPTION();
									}
									if (ZEND_TYPE_IS_SET(prop_info->type)) {
										ZVAL_NEW_REF(value, value);
										ZEND_REF_ADD_TYPE_SOURCE(Z_REF_P(value), prop_info);
										value_type = IS_REFERENCE_EX;
									}
								}
							}
							break;
						}
					} else if (EXPECTED(Z_OBJCE_P(array)->default_properties_count == 0)
							|| !p->key
							|| zend_check_property_access(Z_OBJ_P(array), p->key, 1) == SUCCESS) {
						break;
					}
				}
				p++;
			}
			EG(ht_iterators)[Z_FE_ITER_P(EX_VAR(opline->op1.var))].pos = pos;
			if (RETURN_VALUE_USED(opline)) {
				if (UNEXPECTED(!p->key)) {
					ZVAL_LONG(EX_VAR(opline->result.var), p->h);
				} else if (ZSTR_VAL(p->key)[0]) {
					ZVAL_STR_COPY(EX_VAR(opline->result.var), p->key);
				} else {
					const char *class_name, *prop_name;
					size_t prop_name_len;
					zend_unmangle_property_name_ex(
						p->key, &class_name, &prop_name, &prop_name_len);
					ZVAL_STRINGL(EX_VAR(opline->result.var), prop_name, prop_name_len);
				}
			}
		} else {
			const zend_object_iterator_funcs *funcs = iter->funcs;
			if (++iter->index > 0) {
				/* This could cause an endless loop if index becomes zero again.
				 * In case that ever happens we need an additional flag. */
				funcs->move_forward(iter);
				if (UNEXPECTED(EG(exception) != NULL)) {
					UNDEF_RESULT();
					HANDLE_EXCEPTION();
				}
				if (UNEXPECTED(funcs->valid(iter) == FAILURE)) {
					/* reached end of iteration */
					if (UNEXPECTED(EG(exception) != NULL)) {
						UNDEF_RESULT();
						HANDLE_EXCEPTION();
					}
					goto fe_fetch_w_exit;
				}
			}
			value = funcs->get_current_data(iter);
			if (UNEXPECTED(EG(exception) != NULL)) {
				UNDEF_RESULT();
				HANDLE_EXCEPTION();
			}
			if (!value) {
				/* failure in get_current_data */
				goto fe_fetch_w_exit;
			}
			if (RETURN_VALUE_USED(opline)) {
				if (funcs->get_current_key) {
					funcs->get_current_key(iter, EX_VAR(opline->result.var));
					if (UNEXPECTED(EG(exception) != NULL)) {
						UNDEF_RESULT();
						HANDLE_EXCEPTION();
					}
				} else {
					ZVAL_LONG(EX_VAR(opline->result.var), iter->index);
				}
			}
			value_type = Z_TYPE_INFO_P(value);
		}
	} else {
		zend_error(E_WARNING, "foreach() argument must be of type array|object, %s given", zend_zval_value_name(array));
fe_fetch_w_exit_exc:
		if (UNEXPECTED(EG(exception))) {
			UNDEF_RESULT();
			HANDLE_EXCEPTION();
		}
fe_fetch_w_exit:
		ZEND_VM_SET_RELATIVE_OPCODE(opline, opline->extended_value);
		ZEND_VM_CONTINUE();
	}

	if (EXPECTED((value_type & Z_TYPE_MASK) != IS_REFERENCE)) {
		zend_refcounted *gc = Z_COUNTED_P(value);
		zval *ref;
		ZVAL_NEW_EMPTY_REF(value);
		ref = Z_REFVAL_P(value);
		ZVAL_COPY_VALUE_EX(ref, value, gc, value_type);
	}
	if (EXPECTED(opline->op2_type == IS_CV)) {
		zval *variable_ptr = EX_VAR(opline->op2.var);
		if (EXPECTED(variable_ptr != value)) {
			zend_reference *ref;

			ref = Z_REF_P(value);
			GC_ADDREF(ref);
			i_zval_ptr_dtor(variable_ptr);
			ZVAL_REF(variable_ptr, ref);
		}
	} else {
		Z_ADDREF_P(value);
		ZVAL_REF(EX_VAR(opline->op2.var), Z_REF_P(value));
	}
	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_JMP_SET_SPEC_VAR_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *value;
	zend_reference *ref = NULL;
	bool ret;

	SAVE_OPLINE();
	value = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);

	if ((IS_VAR == IS_VAR || IS_VAR == IS_CV) && Z_ISREF_P(value)) {
		if (IS_VAR == IS_VAR) {
			ref = Z_REF_P(value);
		}
		value = Z_REFVAL_P(value);
	}

	ret = i_zend_is_true(value);

	if (UNEXPECTED(EG(exception))) {
		zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
		ZVAL_UNDEF(EX_VAR(opline->result.var));
		HANDLE_EXCEPTION();
	}

	if (ret) {
		zval *result = EX_VAR(opline->result.var);

		ZVAL_COPY_VALUE(result, value);
		if (IS_VAR == IS_CONST) {
			if (UNEXPECTED(Z_OPT_REFCOUNTED_P(result))) Z_ADDREF_P(result);
		} else if (IS_VAR == IS_CV) {
			if (Z_OPT_REFCOUNTED_P(result)) Z_ADDREF_P(result);
		} else if (IS_VAR == IS_VAR && ref) {
			if (UNEXPECTED(GC_DELREF(ref) == 0)) {
				efree_size(ref, sizeof(zend_reference));
			} else if (Z_OPT_REFCOUNTED_P(result)) {
				Z_ADDREF_P(result);
			}
		}
		ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0);
	}

	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
	ZEND_VM_NEXT_OPCODE();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_COALESCE_SPEC_VAR_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *value;
	zend_reference *ref = NULL;

	SAVE_OPLINE();
	value = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);

	if ((IS_VAR & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) {
		if (IS_VAR & IS_VAR) {
			ref = Z_REF_P(value);
		}
		value = Z_REFVAL_P(value);
	}

	if (Z_TYPE_P(value) > IS_NULL) {
		zval *result = EX_VAR(opline->result.var);
		ZVAL_COPY_VALUE(result, value);
		if (IS_VAR == IS_CONST) {
			if (UNEXPECTED(Z_OPT_REFCOUNTED_P(result))) Z_ADDREF_P(result);
		} else if (IS_VAR == IS_CV) {
			if (Z_OPT_REFCOUNTED_P(result)) Z_ADDREF_P(result);
		} else if ((IS_VAR & IS_VAR) && ref) {
			if (UNEXPECTED(GC_DELREF(ref) == 0)) {
				efree_size(ref, sizeof(zend_reference));
			} else if (Z_OPT_REFCOUNTED_P(result)) {
				Z_ADDREF_P(result);
			}
		}
		ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0);
	}

	if ((IS_VAR & IS_VAR) && ref) {
		if (UNEXPECTED(GC_DELREF(ref) == 0)) {
			efree_size(ref, sizeof(zend_reference));
		}
	}
	ZEND_VM_NEXT_OPCODE();
}

static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_JMP_NULL_SPEC_VAR_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *val, *result;

	val = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);

	if (Z_TYPE_P(val) > IS_NULL) {
		do {
			if ((IS_VAR == IS_CV || IS_VAR == IS_VAR) && Z_TYPE_P(val) == IS_REFERENCE) {
				val = Z_REFVAL_P(val);
				if (Z_TYPE_P(val) <= IS_NULL) {
					zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
					break;
				}
			}
			ZEND_VM_NEXT_OPCODE();
		} while (0);
	}

	result = EX_VAR(opline->result.var);
	uint32_t short_circuiting_type = opline->extended_value & ZEND_SHORT_CIRCUITING_CHAIN_MASK;
	if (EXPECTED(short_circuiting_type == ZEND_SHORT_CIRCUITING_CHAIN_EXPR)) {
		ZVAL_NULL(result);
		if (IS_VAR == IS_CV
			&& UNEXPECTED(Z_TYPE_P(val) == IS_UNDEF)
			&& (opline->extended_value & ZEND_JMP_NULL_BP_VAR_IS) == 0
		) {
			SAVE_OPLINE();
			ZVAL_UNDEFINED_OP1();
			if (UNEXPECTED(EG(exception) != NULL)) {
				HANDLE_EXCEPTION();
			}
		}
	} else if (short_circuiting_type == ZEND_SHORT_CIRCUITING_CHAIN_ISSET) {
		ZVAL_FALSE(result);
	} else {
		ZEND_ASSERT(short_circuiting_type == ZEND_SHORT_CIRCUITING_CHAIN_EMPTY);
		ZVAL_TRUE(result);
	}

	ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0);
}

static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_QM_ASSIGN_SPEC_VAR_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *value;
	zval *result = EX_VAR(opline->result.var);

	value = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
	if (IS_VAR == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
		SAVE_OPLINE();
		ZVAL_UNDEFINED_OP1();
		ZVAL_NULL(result);
		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
	}

	if (IS_VAR == IS_CV) {
		ZVAL_COPY_DEREF(result, value);
	} else if (IS_VAR == IS_VAR) {
		if (UNEXPECTED(Z_ISREF_P(value))) {
			ZVAL_COPY_VALUE(result, Z_REFVAL_P(value));
			if (UNEXPECTED(Z_DELREF_P(value) == 0)) {
				efree_size(Z_REF_P(value), sizeof(zend_reference));
			} else if (Z_OPT_REFCOUNTED_P(result)) {
				Z_ADDREF_P(result);
			}
		} else {
			ZVAL_COPY_VALUE(result, value);
		}
	} else {
		ZVAL_COPY_VALUE(result, value);
		if (IS_VAR == IS_CONST) {
			if (UNEXPECTED(Z_OPT_REFCOUNTED_P(result))) {
				Z_ADDREF_P(result);
			}
		}
	}
	ZEND_VM_NEXT_OPCODE();
}

static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_SEND_VAR_SIMPLE_SPEC_VAR_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *varptr, *arg;

	varptr = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
	arg = ZEND_CALL_VAR(EX(call), opline->result.var);

	if (IS_VAR == IS_CV) {
		ZVAL_COPY(arg, varptr);
	} else /* if (IS_VAR == IS_VAR) */ {
		ZVAL_COPY_VALUE(arg, varptr);
	}

	ZEND_VM_NEXT_OPCODE();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_IS_IDENTICAL_SPEC_VAR_CONST_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;
	bool result;

	SAVE_OPLINE();
	op1 = _get_zval_ptr_var_deref(opline->op1.var EXECUTE_DATA_CC);
	op2 = RT_CONSTANT(opline, opline->op2);
	result = fast_is_identical_function(op1, op2);
	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));


	ZEND_VM_SMART_BRANCH(result, 1);
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_CASE_STRICT_SPEC_VAR_CONST_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;
	bool result;

	SAVE_OPLINE();
	op1 = _get_zval_ptr_var_deref(opline->op1.var EXECUTE_DATA_CC);
	op2 = RT_CONSTANT(opline, opline->op2);
	result = fast_is_identical_function(op1, op2);


	ZEND_VM_SMART_BRANCH(result, 1);
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_IS_NOT_IDENTICAL_SPEC_VAR_CONST_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;
	bool result;

	SAVE_OPLINE();
	op1 = _get_zval_ptr_var_deref(opline->op1.var EXECUTE_DATA_CC);
	op2 = RT_CONSTANT(opline, opline->op2);
	result = fast_is_not_identical_function(op1, op2);
	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));


	ZEND_VM_SMART_BRANCH(result, 1);
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_ASSIGN_OBJ_OP_SPEC_VAR_CONST_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *object;
	zval *property;
	zval *value;
	zval *zptr;
	void *_cache_slot[3] = {0};
	void **cache_slot;
	zend_property_info *prop_info;
	zend_object *zobj;
	zend_string *name, *tmp_name;

	SAVE_OPLINE();
	object = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
	property = RT_CONSTANT(opline, opline->op2);

	do {
		value = get_op_data_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1);

		if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
			if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
				object = Z_REFVAL_P(object);
				goto assign_op_object;
			}
			if (IS_VAR == IS_CV
			 && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
				ZVAL_UNDEFINED_OP1();
			}
			zend_throw_non_object_error(object, property OPLINE_CC EXECUTE_DATA_CC);
			break;
		}

assign_op_object:
		/* here we are sure we are dealing with an object */
		zobj = Z_OBJ_P(object);
		if (IS_CONST == IS_CONST) {
			name = Z_STR_P(property);
		} else {
			name = zval_try_get_tmp_string(property, &tmp_name);
			if (UNEXPECTED(!name)) {
				UNDEF_RESULT();
				break;
			}
		}
		cache_slot = (IS_CONST == IS_CONST) ? CACHE_ADDR((opline+1)->extended_value) : _cache_slot;
		if (EXPECTED((zptr = zobj->handlers->get_property_ptr_ptr(zobj, name, BP_VAR_RW, cache_slot)) != NULL)) {
			if (UNEXPECTED(Z_ISERROR_P(zptr))) {
				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
					ZVAL_NULL(EX_VAR(opline->result.var));
				}
			} else {
				zend_reference *ref;

				do {
					if (UNEXPECTED(Z_ISREF_P(zptr))) {
						ref = Z_REF_P(zptr);
						zptr = Z_REFVAL_P(zptr);
						if (UNEXPECTED(ZEND_REF_HAS_TYPE_SOURCES(ref))) {
							zend_binary_assign_op_typed_ref(ref, value OPLINE_CC EXECUTE_DATA_CC);
							break;
						}
					}

					prop_info = (zend_property_info*)CACHED_PTR_EX(cache_slot + 2);
					if (prop_info && ZEND_TYPE_IS_SET(prop_info->type)) {
						/* special case for typed properties */
						zend_binary_assign_op_typed_prop(prop_info, zptr, value OPLINE_CC EXECUTE_DATA_CC);
					} else {
						zend_binary_op(zptr, zptr, value OPLINE_CC);
					}
				} while (0);

				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
					ZVAL_COPY(EX_VAR(opline->result.var), zptr);
				}
			}
		} else {
			zend_assign_op_overloaded_property(zobj, name, cache_slot, value OPLINE_CC EXECUTE_DATA_CC);
		}
		if (IS_CONST != IS_CONST) {
			zend_tmp_string_release(tmp_name);
		}
	} while (0);

	FREE_OP((opline+1)->op1_type, (opline+1)->op1.var);


	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
	/* assign_obj has two opcodes! */
	ZEND_VM_NEXT_OPCODE_EX(1, 2);
}

/* No specialization for op_types (CONST|TMP|VAR|CV, UNUSED|CONST|TMPVAR) */
static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_ASSIGN_DIM_OP_SPEC_VAR_CONST_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *var_ptr;
	zval *value, *container, *dim;
	HashTable *ht;

	SAVE_OPLINE();
	container = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);

	if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
assign_dim_op_array:
		SEPARATE_ARRAY(container);
		ht = Z_ARRVAL_P(container);
assign_dim_op_new_array:
		dim = RT_CONSTANT(opline, opline->op2);
		if (IS_CONST == IS_UNUSED) {
			var_ptr = zend_hash_next_index_insert(ht, &EG(uninitialized_zval));
			if (UNEXPECTED(!var_ptr)) {
				zend_cannot_add_element();
				goto assign_dim_op_ret_null;
			}
		} else {
			if (IS_CONST == IS_CONST) {
				var_ptr = zend_fetch_dimension_address_inner_RW_CONST(ht, dim EXECUTE_DATA_CC);
			} else {
				var_ptr = zend_fetch_dimension_address_inner_RW(ht, dim EXECUTE_DATA_CC);
			}
			if (UNEXPECTED(!var_ptr)) {
				goto assign_dim_op_ret_null;
			}
		}

		value = get_op_data_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1);

		do {
			if (IS_CONST != IS_UNUSED && UNEXPECTED(Z_ISREF_P(var_ptr))) {
				zend_reference *ref = Z_REF_P(var_ptr);
				var_ptr = Z_REFVAL_P(var_ptr);
				if (UNEXPECTED(ZEND_REF_HAS_TYPE_SOURCES(ref))) {
					zend_binary_assign_op_typed_ref(ref, value OPLINE_CC EXECUTE_DATA_CC);
					break;
				}
			}
			zend_binary_op(var_ptr, var_ptr, value OPLINE_CC);
		} while (0);

		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
			ZVAL_COPY(EX_VAR(opline->result.var), var_ptr);
		}
		FREE_OP((opline+1)->op1_type, (opline+1)->op1.var);
	} else {
		if (EXPECTED(Z_ISREF_P(container))) {
			container = Z_REFVAL_P(container);
			if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
				goto assign_dim_op_array;
			}
		}

		if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
			zend_object *obj = Z_OBJ_P(container);

			dim = RT_CONSTANT(opline, opline->op2);
			if (IS_CONST == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
				dim++;
			}
			zend_binary_assign_op_obj_dim(obj, dim OPLINE_CC EXECUTE_DATA_CC);
		} else if (EXPECTED(Z_TYPE_P(container) <= IS_FALSE)) {
			uint8_t old_type;

			if (IS_VAR == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(container) == IS_UNDEF)) {
				ZVAL_UNDEFINED_OP1();
			}
			ht = zend_new_array(8);
			old_type = Z_TYPE_P(container);
			ZVAL_ARR(container, ht);
			if (UNEXPECTED(old_type == IS_FALSE)) {
				GC_ADDREF(ht);
				zend_false_to_array_deprecated();
				if (UNEXPECTED(GC_DELREF(ht) == 0)) {
					zend_array_destroy(ht);
					goto assign_dim_op_ret_null;
				}
			}
			goto assign_dim_op_new_array;
		} else {
			dim = RT_CONSTANT(opline, opline->op2);
			zend_binary_assign_op_dim_slow(container, dim OPLINE_CC EXECUTE_DATA_CC);
assign_dim_op_ret_null:
			FREE_OP((opline+1)->op1_type, (opline+1)->op1.var);
			if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
				ZVAL_NULL(EX_VAR(opline->result.var));
			}
		}
	}


	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
	ZEND_VM_NEXT_OPCODE_EX(1, 2);
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_ASSIGN_OP_SPEC_VAR_CONST_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *var_ptr;
	zval *value;

	SAVE_OPLINE();
	value = RT_CONSTANT(opline, opline->op2);
	var_ptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);

	do {
		if (UNEXPECTED(Z_TYPE_P(var_ptr) == IS_REFERENCE)) {
			zend_reference *ref = Z_REF_P(var_ptr);
			var_ptr = Z_REFVAL_P(var_ptr);
			if (UNEXPECTED(ZEND_REF_HAS_TYPE_SOURCES(ref))) {
				zend_binary_assign_op_typed_ref(ref, value OPLINE_CC EXECUTE_DATA_CC);
				break;
			}
		}
		zend_binary_op(var_ptr, var_ptr, value OPLINE_CC);
	} while (0);

	if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
		ZVAL_COPY(EX_VAR(opline->result.var), var_ptr);
	}


	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_PRE_INC_OBJ_SPEC_VAR_CONST_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *object;
	zval *property;
	zval *zptr;
	void *_cache_slot[3] = {0};
	void **cache_slot;
	zend_property_info *prop_info;
	zend_object *zobj;
	zend_string *name, *tmp_name;

	SAVE_OPLINE();
	object = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
	property = RT_CONSTANT(opline, opline->op2);

	do {
		if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
			if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
				object = Z_REFVAL_P(object);
				goto pre_incdec_object;
			}
			if (IS_VAR == IS_CV
			 && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
				ZVAL_UNDEFINED_OP1();
			}
			zend_throw_non_object_error(object, property OPLINE_CC EXECUTE_DATA_CC);
			break;
		}

pre_incdec_object:
		/* here we are sure we are dealing with an object */
		zobj = Z_OBJ_P(object);
		if (IS_CONST == IS_CONST) {
			name = Z_STR_P(property);
		} else {
			name = zval_try_get_tmp_string(property, &tmp_name);
			if (UNEXPECTED(!name)) {
				UNDEF_RESULT();
				break;
			}
		}
		cache_slot = (IS_CONST == IS_CONST) ? CACHE_ADDR(opline->extended_value) : _cache_slot;
		if (EXPECTED((zptr = zobj->handlers->get_property_ptr_ptr(zobj, name, BP_VAR_RW, cache_slot)) != NULL)) {
			if (UNEXPECTED(Z_ISERROR_P(zptr))) {
				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
					ZVAL_NULL(EX_VAR(opline->result.var));
				}
			} else {
				prop_info = (zend_property_info *) CACHED_PTR_EX(cache_slot + 2);
				zend_pre_incdec_property_zval(zptr,
					prop_info && ZEND_TYPE_IS_SET(prop_info->type) ? prop_info : NULL OPLINE_CC EXECUTE_DATA_CC);
			}
		} else {
			zend_pre_incdec_overloaded_property(zobj, name, cache_slot OPLINE_CC EXECUTE_DATA_CC);
		}
		if (IS_CONST != IS_CONST) {
			zend_tmp_string_release(tmp_name);
		}
	} while (0);


	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_POST_INC_OBJ_SPEC_VAR_CONST_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *object;
	zval *property;
	zval *zptr;
	void *_cache_slot[3] = {0};
	void **cache_slot;
	zend_property_info *prop_info;
	zend_object *zobj;
	zend_string *name, *tmp_name;

	SAVE_OPLINE();
	object = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
	property = RT_CONSTANT(opline, opline->op2);

	do {
		if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
			if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
				object = Z_REFVAL_P(object);
				goto post_incdec_object;
			}
			if (IS_VAR == IS_CV
			 && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
				ZVAL_UNDEFINED_OP1();
			}
			zend_throw_non_object_error(object, property OPLINE_CC EXECUTE_DATA_CC);
			break;
		}

post_incdec_object:
		/* here we are sure we are dealing with an object */
		zobj = Z_OBJ_P(object);
		if (IS_CONST == IS_CONST) {
			name = Z_STR_P(property);
		} else {
			name = zval_try_get_tmp_string(property, &tmp_name);
			if (UNEXPECTED(!name)) {
				ZVAL_UNDEF(EX_VAR(opline->result.var));
				break;
			}
		}
		cache_slot = (IS_CONST == IS_CONST) ? CACHE_ADDR(opline->extended_value) : _cache_slot;
		if (EXPECTED((zptr = zobj->handlers->get_property_ptr_ptr(zobj, name, BP_VAR_RW, cache_slot)) != NULL)) {
			if (UNEXPECTED(Z_ISERROR_P(zptr))) {
				ZVAL_NULL(EX_VAR(opline->result.var));
			} else {
				prop_info = (zend_property_info*)CACHED_PTR_EX(cache_slot + 2);
				zend_post_incdec_property_zval(zptr,
					prop_info && ZEND_TYPE_IS_SET(prop_info->type) ? prop_info : NULL OPLINE_CC EXECUTE_DATA_CC);
			}
		} else {
			zend_post_incdec_overloaded_property(zobj, name, cache_slot OPLINE_CC EXECUTE_DATA_CC);
		}
		if (IS_CONST != IS_CONST) {
			zend_tmp_string_release(tmp_name);
		}
	} while (0);


	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_FETCH_DIM_W_SPEC_VAR_CONST_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *container;

	SAVE_OPLINE();
	container = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
	zend_fetch_dimension_address_W(container, RT_CONSTANT(opline, opline->op2), IS_CONST OPLINE_CC EXECUTE_DATA_CC);


	if (IS_VAR == IS_VAR) {
		FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
	}
	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_FETCH_DIM_RW_SPEC_VAR_CONST_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *container;

	SAVE_OPLINE();
	container = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
	zend_fetch_dimension_address_RW(container, RT_CONSTANT(opline, opline->op2), IS_CONST OPLINE_CC EXECUTE_DATA_CC);


	if (IS_VAR == IS_VAR) {
		FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
	}
	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_CONST_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
#if 0
	USE_OPLINE
#endif

	if (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) {
		if ((IS_VAR & (IS_CONST|IS_TMP_VAR))) {
			ZEND_VM_TAIL_CALL(zend_use_tmp_in_write_context_helper_SPEC_TAILCALL(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
		}
		ZEND_VM_TAIL_CALL(ZEND_FETCH_DIM_W_SPEC_VAR_CONST_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
	} else {
		if (IS_CONST == IS_UNUSED) {
			ZEND_VM_TAIL_CALL(zend_use_undef_in_read_context_helper_SPEC_TAILCALL(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
		}
		ZEND_VM_TAIL_CALL(ZEND_FETCH_DIM_R_SPEC_TMPVAR_CONST_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
	}
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_FETCH_DIM_UNSET_SPEC_VAR_CONST_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *container;

	SAVE_OPLINE();
	container = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
	zend_fetch_dimension_address_UNSET(container, RT_CONSTANT(opline, opline->op2), IS_CONST OPLINE_CC EXECUTE_DATA_CC);


	if (IS_VAR == IS_VAR) {
		FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
	}
	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_FETCH_OBJ_W_SPEC_VAR_CONST_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *property, *container, *result;

	SAVE_OPLINE();

	container = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
	property = RT_CONSTANT(opline, opline->op2);
	result = EX_VAR(opline->result.var);
	zend_fetch_property_address(
		result, container, IS_VAR, property, IS_CONST,
		((IS_CONST == IS_CONST) ? CACHE_ADDR(opline->extended_value & ~ZEND_FETCH_OBJ_FLAGS) : NULL),
		BP_VAR_W, opline->extended_value, NULL OPLINE_CC EXECUTE_DATA_CC);


	if (IS_VAR == IS_VAR) {
		FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
	}
	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_FETCH_OBJ_RW_SPEC_VAR_CONST_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *property, *container, *result;

	SAVE_OPLINE();
	container = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
	property = RT_CONSTANT(opline, opline->op2);
	result = EX_VAR(opline->result.var);
	zend_fetch_property_address(result, container, IS_VAR, property, IS_CONST, ((IS_CONST == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL), BP_VAR_RW, 0, NULL OPLINE_CC EXECUTE_DATA_CC);


	if (IS_VAR == IS_VAR) {
		FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
	}
	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_FETCH_OBJ_FUNC_ARG_SPEC_VAR_CONST_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
#if 0
	USE_OPLINE
#endif

	if (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) {
		/* Behave like FETCH_OBJ_W */
		if ((IS_VAR & (IS_CONST|IS_TMP_VAR))) {
			ZEND_VM_TAIL_CALL(zend_use_tmp_in_write_context_helper_SPEC_TAILCALL(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
		}
		ZEND_VM_TAIL_CALL(ZEND_FETCH_OBJ_W_SPEC_VAR_CONST_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
	} else {
		ZEND_VM_TAIL_CALL(ZEND_FETCH_OBJ_R_SPEC_TMPVAR_CONST_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
	}
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_FETCH_OBJ_UNSET_SPEC_VAR_CONST_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *container, *property, *result;

	SAVE_OPLINE();
	container = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
	property = RT_CONSTANT(opline, opline->op2);
	result = EX_VAR(opline->result.var);
	zend_fetch_property_address(result, container, IS_VAR, property, IS_CONST, ((IS_CONST == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL), BP_VAR_UNSET, 0, NULL OPLINE_CC EXECUTE_DATA_CC);


	if (IS_VAR == IS_VAR) {
		FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
	}
	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_FETCH_LIST_W_SPEC_VAR_CONST_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *container, *dim;

	SAVE_OPLINE();
	container = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
	dim = RT_CONSTANT(opline, opline->op2);

	if (IS_VAR == IS_VAR
		&& Z_TYPE_P(EX_VAR(opline->op1.var)) != IS_INDIRECT
		&& UNEXPECTED(!Z_ISREF_P(container))
	) {
		zend_error(E_NOTICE, "Attempting to set reference to non referenceable value");
		zend_fetch_dimension_address_LIST_r(container, dim, IS_CONST OPLINE_CC EXECUTE_DATA_CC);
	} else {
		zend_fetch_dimension_address_W(container, dim, IS_CONST OPLINE_CC EXECUTE_DATA_CC);
	}


	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_ASSIGN_OBJ_SPEC_VAR_CONST_OP_DATA_CONST_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *object, *value, tmp;
	zend_object *zobj;
	zend_string *name, *tmp_name;
	zend_refcounted *garbage = NULL;

	SAVE_OPLINE();
	object = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
	value = RT_CONSTANT((opline+1), (opline+1)->op1);

	if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
		if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
			object = Z_REFVAL_P(object);
			goto assign_object;
		}
		zend_throw_non_object_error(object, RT_CONSTANT(opline, opline->op2) OPLINE_CC EXECUTE_DATA_CC);
		value = &EG(uninitialized_zval);
		goto free_and_exit_assign_obj;
	}

assign_object:
	zobj = Z_OBJ_P(object);
	if (IS_CONST == IS_CONST) {
		if (EXPECTED(zobj->ce == CACHED_PTR(opline->extended_value))) {
			void **cache_slot = CACHE_ADDR(opline->extended_value);
			uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
			zval *property_val;
			zend_property_info *prop_info;

			if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
				prop_info = (zend_property_info*) CACHED_PTR_EX(cache_slot + 2);

assign_obj_simple:
				property_val = OBJ_PROP(zobj, prop_offset);
				if (Z_TYPE_P(property_val) != IS_UNDEF) {
					if (prop_info != NULL) {
						value = zend_assign_to_typed_prop(prop_info, property_val, value, &garbage EXECUTE_DATA_CC);
						goto free_and_exit_assign_obj;
					} else {
fast_assign_obj:
						value = zend_assign_to_variable_ex(property_val, value, IS_CONST, EX_USES_STRICT_TYPES(), &garbage);
						if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
							ZVAL_COPY(EX_VAR(opline->result.var), value);
						}
						goto exit_assign_obj;
					}
				}
			} else if (EXPECTED(IS_DYNAMIC_PROPERTY_OFFSET(prop_offset))) {
				name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
				if (UNEXPECTED(zend_lazy_object_must_init(zobj))) {
					zobj = zend_lazy_object_init(zobj);
					if (!zobj) {
						value = &EG(uninitialized_zval);
						goto free_and_exit_assign_obj;
					}
				}
				if (!zobj->ce->__set && (zobj->ce->ce_flags & ZEND_ACC_ALLOW_DYNAMIC_PROPERTIES)) {
					rebuild_object_properties_internal(zobj);
				}
				if (EXPECTED(zobj->properties != NULL)) {
					if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
						if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
							GC_DELREF(zobj->properties);
						}
						zobj->properties = zend_array_dup(zobj->properties);
					}
					property_val = zend_hash_find_known_hash(zobj->properties, name);
					if (property_val) {
						goto fast_assign_obj;
					}
				}

				if (!zobj->ce->__set && (zobj->ce->ce_flags & ZEND_ACC_ALLOW_DYNAMIC_PROPERTIES)) {
					if (IS_CONST == IS_CONST) {
						if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
							Z_ADDREF_P(value);
						}
					} else if (IS_CONST != IS_TMP_VAR) {
						if (Z_ISREF_P(value)) {
							if (IS_CONST == IS_VAR) {
								zend_reference *ref = Z_REF_P(value);
								if (GC_DELREF(ref) == 0) {
									ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
									efree_size(ref, sizeof(zend_reference));
									value = &tmp;
								} else {
									value = Z_REFVAL_P(value);
									Z_TRY_ADDREF_P(value);
								}
							} else {
								value = Z_REFVAL_P(value);
								Z_TRY_ADDREF_P(value);
							}
						} else if (IS_CONST == IS_CV) {
							Z_TRY_ADDREF_P(value);
						}
					}
					zend_hash_add_new(zobj->properties, name, value);
					if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
						ZVAL_COPY(EX_VAR(opline->result.var), value);
					}
					goto exit_assign_obj;
				}
			} else {
				ZEND_ASSERT(IS_HOOKED_PROPERTY_OFFSET(prop_offset));
				if (ZEND_IS_PROPERTY_HOOK_SIMPLE_WRITE(prop_offset)) {
					prop_info = CACHED_PTR_EX(cache_slot + 2);
					prop_offset = prop_info->offset;
					if (!ZEND_TYPE_IS_SET(prop_info->type)) {
						prop_info = NULL;
					}
					goto assign_obj_simple;
				}
				/* Fall through to write_property for hooks. */
			}
		}
		name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
	} else {
		name = zval_try_get_tmp_string(RT_CONSTANT(opline, opline->op2), &tmp_name);
		if (UNEXPECTED(!name)) {


			UNDEF_RESULT();
			goto exit_assign_obj;
		}
	}

	if (IS_CONST == IS_CV || IS_CONST == IS_VAR) {
		ZVAL_DEREF(value);
	}

	value = zobj->handlers->write_property(zobj, name, value, (IS_CONST == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);

	if (IS_CONST != IS_CONST) {
		zend_tmp_string_release(tmp_name);
	}

free_and_exit_assign_obj:
	if (UNEXPECTED(RETURN_VALUE_USED(opline)) && value) {
		ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
	}


exit_assign_obj:
	if (garbage) {
		GC_DTOR_NO_REF(garbage);
	}


	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
	/* assign_obj has two opcodes! */
	ZEND_VM_NEXT_OPCODE_EX(1, 2);
}

/* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CONST|VAR) */
static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_ASSIGN_OBJ_SPEC_VAR_CONST_OP_DATA_TMP_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *object, *value, tmp;
	zend_object *zobj;
	zend_string *name, *tmp_name;
	zend_refcounted *garbage = NULL;

	SAVE_OPLINE();
	object = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
	value = _get_zval_ptr_tmp((opline+1)->op1.var EXECUTE_DATA_CC);

	if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
		if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
			object = Z_REFVAL_P(object);
			goto assign_object;
		}
		zend_throw_non_object_error(object, RT_CONSTANT(opline, opline->op2) OPLINE_CC EXECUTE_DATA_CC);
		value = &EG(uninitialized_zval);
		goto free_and_exit_assign_obj;
	}

assign_object:
	zobj = Z_OBJ_P(object);
	if (IS_CONST == IS_CONST) {
		if (EXPECTED(zobj->ce == CACHED_PTR(opline->extended_value))) {
			void **cache_slot = CACHE_ADDR(opline->extended_value);
			uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
			zval *property_val;
			zend_property_info *prop_info;

			if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
				prop_info = (zend_property_info*) CACHED_PTR_EX(cache_slot + 2);

assign_obj_simple:
				property_val = OBJ_PROP(zobj, prop_offset);
				if (Z_TYPE_P(property_val) != IS_UNDEF) {
					if (prop_info != NULL) {
						value = zend_assign_to_typed_prop(prop_info, property_val, value, &garbage EXECUTE_DATA_CC);
						goto free_and_exit_assign_obj;
					} else {
fast_assign_obj:
						value = zend_assign_to_variable_ex(property_val, value, IS_TMP_VAR, EX_USES_STRICT_TYPES(), &garbage);
						if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
							ZVAL_COPY(EX_VAR(opline->result.var), value);
						}
						goto exit_assign_obj;
					}
				}
			} else if (EXPECTED(IS_DYNAMIC_PROPERTY_OFFSET(prop_offset))) {
				name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
				if (UNEXPECTED(zend_lazy_object_must_init(zobj))) {
					zobj = zend_lazy_object_init(zobj);
					if (!zobj) {
						value = &EG(uninitialized_zval);
						goto free_and_exit_assign_obj;
					}
				}
				if (!zobj->ce->__set && (zobj->ce->ce_flags & ZEND_ACC_ALLOW_DYNAMIC_PROPERTIES)) {
					rebuild_object_properties_internal(zobj);
				}
				if (EXPECTED(zobj->properties != NULL)) {
					if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
						if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
							GC_DELREF(zobj->properties);
						}
						zobj->properties = zend_array_dup(zobj->properties);
					}
					property_val = zend_hash_find_known_hash(zobj->properties, name);
					if (property_val) {
						goto fast_assign_obj;
					}
				}

				if (!zobj->ce->__set && (zobj->ce->ce_flags & ZEND_ACC_ALLOW_DYNAMIC_PROPERTIES)) {
					if (IS_TMP_VAR == IS_CONST) {
						if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
							Z_ADDREF_P(value);
						}
					} else if (IS_TMP_VAR != IS_TMP_VAR) {
						if (Z_ISREF_P(value)) {
							if (IS_TMP_VAR == IS_VAR) {
								zend_reference *ref = Z_REF_P(value);
								if (GC_DELREF(ref) == 0) {
									ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
									efree_size(ref, sizeof(zend_reference));
									value = &tmp;
								} else {
									value = Z_REFVAL_P(value);
									Z_TRY_ADDREF_P(value);
								}
							} else {
								value = Z_REFVAL_P(value);
								Z_TRY_ADDREF_P(value);
							}
						} else if (IS_TMP_VAR == IS_CV) {
							Z_TRY_ADDREF_P(value);
						}
					}
					zend_hash_add_new(zobj->properties, name, value);
					if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
						ZVAL_COPY(EX_VAR(opline->result.var), value);
					}
					goto exit_assign_obj;
				}
			} else {
				ZEND_ASSERT(IS_HOOKED_PROPERTY_OFFSET(prop_offset));
				if (ZEND_IS_PROPERTY_HOOK_SIMPLE_WRITE(prop_offset)) {
					prop_info = CACHED_PTR_EX(cache_slot + 2);
					prop_offset = prop_info->offset;
					if (!ZEND_TYPE_IS_SET(prop_info->type)) {
						prop_info = NULL;
					}
					goto assign_obj_simple;
				}
				/* Fall through to write_property for hooks. */
			}
		}
		name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
	} else {
		name = zval_try_get_tmp_string(RT_CONSTANT(opline, opline->op2), &tmp_name);
		if (UNEXPECTED(!name)) {
			zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
			UNDEF_RESULT();
			goto exit_assign_obj;
		}
	}

	if (IS_TMP_VAR == IS_CV || IS_TMP_VAR == IS_VAR) {
		ZVAL_DEREF(value);
	}

	value = zobj->handlers->write_property(zobj, name, value, (IS_CONST == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);

	if (IS_CONST != IS_CONST) {
		zend_tmp_string_release(tmp_name);
	}

free_and_exit_assign_obj:
	if (UNEXPECTED(RETURN_VALUE_USED(opline)) && value) {
		ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
	}
	zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
exit_assign_obj:
	if (garbage) {
		GC_DTOR_NO_REF(garbage);
	}


	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
	/* assign_obj has two opcodes! */
	ZEND_VM_NEXT_OPCODE_EX(1, 2);
}

/* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CONST|VAR) */
static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_ASSIGN_OBJ_SPEC_VAR_CONST_OP_DATA_VAR_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *object, *value, tmp;
	zend_object *zobj;
	zend_string *name, *tmp_name;
	zend_refcounted *garbage = NULL;

	SAVE_OPLINE();
	object = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
	value = _get_zval_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);

	if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
		if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
			object = Z_REFVAL_P(object);
			goto assign_object;
		}
		zend_throw_non_object_error(object, RT_CONSTANT(opline, opline->op2) OPLINE_CC EXECUTE_DATA_CC);
		value = &EG(uninitialized_zval);
		goto free_and_exit_assign_obj;
	}

assign_object:
	zobj = Z_OBJ_P(object);
	if (IS_CONST == IS_CONST) {
		if (EXPECTED(zobj->ce == CACHED_PTR(opline->extended_value))) {
			void **cache_slot = CACHE_ADDR(opline->extended_value);
			uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
			zval *property_val;
			zend_property_info *prop_info;

			if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
				prop_info = (zend_property_info*) CACHED_PTR_EX(cache_slot + 2);

assign_obj_simple:
				property_val = OBJ_PROP(zobj, prop_offset);
				if (Z_TYPE_P(property_val) != IS_UNDEF) {
					if (prop_info != NULL) {
						value = zend_assign_to_typed_prop(prop_info, property_val, value, &garbage EXECUTE_DATA_CC);
						goto free_and_exit_assign_obj;
					} else {
fast_assign_obj:
						value = zend_assign_to_variable_ex(property_val, value, IS_VAR, EX_USES_STRICT_TYPES(), &garbage);
						if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
							ZVAL_COPY(EX_VAR(opline->result.var), value);
						}
						goto exit_assign_obj;
					}
				}
			} else if (EXPECTED(IS_DYNAMIC_PROPERTY_OFFSET(prop_offset))) {
				name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
				if (UNEXPECTED(zend_lazy_object_must_init(zobj))) {
					zobj = zend_lazy_object_init(zobj);
					if (!zobj) {
						value = &EG(uninitialized_zval);
						goto free_and_exit_assign_obj;
					}
				}
				if (!zobj->ce->__set && (zobj->ce->ce_flags & ZEND_ACC_ALLOW_DYNAMIC_PROPERTIES)) {
					rebuild_object_properties_internal(zobj);
				}
				if (EXPECTED(zobj->properties != NULL)) {
					if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
						if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
							GC_DELREF(zobj->properties);
						}
						zobj->properties = zend_array_dup(zobj->properties);
					}
					property_val = zend_hash_find_known_hash(zobj->properties, name);
					if (property_val) {
						goto fast_assign_obj;
					}
				}

				if (!zobj->ce->__set && (zobj->ce->ce_flags & ZEND_ACC_ALLOW_DYNAMIC_PROPERTIES)) {
					if (IS_VAR == IS_CONST) {
						if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
							Z_ADDREF_P(value);
						}
					} else if (IS_VAR != IS_TMP_VAR) {
						if (Z_ISREF_P(value)) {
							if (IS_VAR == IS_VAR) {
								zend_reference *ref = Z_REF_P(value);
								if (GC_DELREF(ref) == 0) {
									ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
									efree_size(ref, sizeof(zend_reference));
									value = &tmp;
								} else {
									value = Z_REFVAL_P(value);
									Z_TRY_ADDREF_P(value);
								}
							} else {
								value = Z_REFVAL_P(value);
								Z_TRY_ADDREF_P(value);
							}
						} else if (IS_VAR == IS_CV) {
							Z_TRY_ADDREF_P(value);
						}
					}
					zend_hash_add_new(zobj->properties, name, value);
					if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
						ZVAL_COPY(EX_VAR(opline->result.var), value);
					}
					goto exit_assign_obj;
				}
			} else {
				ZEND_ASSERT(IS_HOOKED_PROPERTY_OFFSET(prop_offset));
				if (ZEND_IS_PROPERTY_HOOK_SIMPLE_WRITE(prop_offset)) {
					prop_info = CACHED_PTR_EX(cache_slot + 2);
					prop_offset = prop_info->offset;
					if (!ZEND_TYPE_IS_SET(prop_info->type)) {
						prop_info = NULL;
					}
					goto assign_obj_simple;
				}
				/* Fall through to write_property for hooks. */
			}
		}
		name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
	} else {
		name = zval_try_get_tmp_string(RT_CONSTANT(opline, opline->op2), &tmp_name);
		if (UNEXPECTED(!name)) {
			zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
			UNDEF_RESULT();
			goto exit_assign_obj;
		}
	}

	if (IS_VAR == IS_CV || IS_VAR == IS_VAR) {
		ZVAL_DEREF(value);
	}

	value = zobj->handlers->write_property(zobj, name, value, (IS_CONST == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);

	if (IS_CONST != IS_CONST) {
		zend_tmp_string_release(tmp_name);
	}

free_and_exit_assign_obj:
	if (UNEXPECTED(RETURN_VALUE_USED(opline)) && value) {
		ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
	}
	zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
exit_assign_obj:
	if (garbage) {
		GC_DTOR_NO_REF(garbage);
	}


	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
	/* assign_obj has two opcodes! */
	ZEND_VM_NEXT_OPCODE_EX(1, 2);
}

/* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CONST|VAR) */
static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_ASSIGN_OBJ_SPEC_VAR_CONST_OP_DATA_CV_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *object, *value, tmp;
	zend_object *zobj;
	zend_string *name, *tmp_name;
	zend_refcounted *garbage = NULL;

	SAVE_OPLINE();
	object = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
	value = _get_zval_ptr_cv_BP_VAR_R((opline+1)->op1.var EXECUTE_DATA_CC);

	if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
		if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
			object = Z_REFVAL_P(object);
			goto assign_object;
		}
		zend_throw_non_object_error(object, RT_CONSTANT(opline, opline->op2) OPLINE_CC EXECUTE_DATA_CC);
		value = &EG(uninitialized_zval);
		goto free_and_exit_assign_obj;
	}

assign_object:
	zobj = Z_OBJ_P(object);
	if (IS_CONST == IS_CONST) {
		if (EXPECTED(zobj->ce == CACHED_PTR(opline->extended_value))) {
			void **cache_slot = CACHE_ADDR(opline->extended_value);
			uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
			zval *property_val;
			zend_property_info *prop_info;

			if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
				prop_info = (zend_property_info*) CACHED_PTR_EX(cache_slot + 2);

assign_obj_simple:
				property_val = OBJ_PROP(zobj, prop_offset);
				if (Z_TYPE_P(property_val) != IS_UNDEF) {
					if (prop_info != NULL) {
						value = zend_assign_to_typed_prop(prop_info, property_val, value, &garbage EXECUTE_DATA_CC);
						goto free_and_exit_assign_obj;
					} else {
fast_assign_obj:
						value = zend_assign_to_variable_ex(property_val, value, IS_CV, EX_USES_STRICT_TYPES(), &garbage);
						if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
							ZVAL_COPY(EX_VAR(opline->result.var), value);
						}
						goto exit_assign_obj;
					}
				}
			} else if (EXPECTED(IS_DYNAMIC_PROPERTY_OFFSET(prop_offset))) {
				name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
				if (UNEXPECTED(zend_lazy_object_must_init(zobj))) {
					zobj = zend_lazy_object_init(zobj);
					if (!zobj) {
						value = &EG(uninitialized_zval);
						goto free_and_exit_assign_obj;
					}
				}
				if (!zobj->ce->__set && (zobj->ce->ce_flags & ZEND_ACC_ALLOW_DYNAMIC_PROPERTIES)) {
					rebuild_object_properties_internal(zobj);
				}
				if (EXPECTED(zobj->properties != NULL)) {
					if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
						if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
							GC_DELREF(zobj->properties);
						}
						zobj->properties = zend_array_dup(zobj->properties);
					}
					property_val = zend_hash_find_known_hash(zobj->properties, name);
					if (property_val) {
						goto fast_assign_obj;
					}
				}

				if (!zobj->ce->__set && (zobj->ce->ce_flags & ZEND_ACC_ALLOW_DYNAMIC_PROPERTIES)) {
					if (IS_CV == IS_CONST) {
						if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
							Z_ADDREF_P(value);
						}
					} else if (IS_CV != IS_TMP_VAR) {
						if (Z_ISREF_P(value)) {
							if (IS_CV == IS_VAR) {
								zend_reference *ref = Z_REF_P(value);
								if (GC_DELREF(ref) == 0) {
									ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
									efree_size(ref, sizeof(zend_reference));
									value = &tmp;
								} else {
									value = Z_REFVAL_P(value);
									Z_TRY_ADDREF_P(value);
								}
							} else {
								value = Z_REFVAL_P(value);
								Z_TRY_ADDREF_P(value);
							}
						} else if (IS_CV == IS_CV) {
							Z_TRY_ADDREF_P(value);
						}
					}
					zend_hash_add_new(zobj->properties, name, value);
					if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
						ZVAL_COPY(EX_VAR(opline->result.var), value);
					}
					goto exit_assign_obj;
				}
			} else {
				ZEND_ASSERT(IS_HOOKED_PROPERTY_OFFSET(prop_offset));
				if (ZEND_IS_PROPERTY_HOOK_SIMPLE_WRITE(prop_offset)) {
					prop_info = CACHED_PTR_EX(cache_slot + 2);
					prop_offset = prop_info->offset;
					if (!ZEND_TYPE_IS_SET(prop_info->type)) {
						prop_info = NULL;
					}
					goto assign_obj_simple;
				}
				/* Fall through to write_property for hooks. */
			}
		}
		name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
	} else {
		name = zval_try_get_tmp_string(RT_CONSTANT(opline, opline->op2), &tmp_name);
		if (UNEXPECTED(!name)) {


			UNDEF_RESULT();
			goto exit_assign_obj;
		}
	}

	if (IS_CV == IS_CV || IS_CV == IS_VAR) {
		ZVAL_DEREF(value);
	}

	value = zobj->handlers->write_property(zobj, name, value, (IS_CONST == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);

	if (IS_CONST != IS_CONST) {
		zend_tmp_string_release(tmp_name);
	}

free_and_exit_assign_obj:
	if (UNEXPECTED(RETURN_VALUE_USED(opline)) && value) {
		ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
	}


exit_assign_obj:
	if (garbage) {
		GC_DTOR_NO_REF(garbage);
	}


	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
	/* assign_obj has two opcodes! */
	ZEND_VM_NEXT_OPCODE_EX(1, 2);
}

/* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CONST|VAR) */
static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_ASSIGN_DIM_SPEC_VAR_CONST_OP_DATA_CONST_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *object_ptr, *orig_object_ptr;
	zval *value;
	zval *variable_ptr;
	zval *dim;
	zend_refcounted *garbage = NULL;

	SAVE_OPLINE();
	orig_object_ptr = object_ptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);

	if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
try_assign_dim_array:
		SEPARATE_ARRAY(object_ptr);
		if (IS_CONST == IS_UNUSED) {
			value = RT_CONSTANT((opline+1), (opline+1)->op1);
			if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
				HashTable *ht = Z_ARRVAL_P(object_ptr);
				if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE)) {
					GC_ADDREF(ht);
				}
				value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
				if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE) && !GC_DELREF(ht)) {
					zend_array_destroy(ht);
					goto assign_dim_error;
				}
			}
			if (IS_CONST == IS_CV || IS_CONST == IS_VAR) {
				ZVAL_DEREF(value);
			}
			value = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), value);
			if (UNEXPECTED(value == NULL)) {
				zend_cannot_add_element();
				goto assign_dim_error;
			} else if (IS_CONST == IS_CV) {
				if (Z_REFCOUNTED_P(value)) {
					Z_ADDREF_P(value);
				}
			} else if (IS_CONST == IS_VAR) {
				zval *free_op_data = EX_VAR((opline+1)->op1.var);
				if (Z_ISREF_P(free_op_data)) {
					if (Z_REFCOUNTED_P(value)) {
						Z_ADDREF_P(value);
					}
					zval_ptr_dtor_nogc(free_op_data);
				}
			} else if (IS_CONST == IS_CONST) {
				if (UNEXPECTED(Z_REFCOUNTED_P(value))) {
					Z_ADDREF_P(value);
				}
			}
		} else {
			dim = RT_CONSTANT(opline, opline->op2);
			if (IS_CONST == IS_CONST) {
				variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
			} else {
				variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
			}
			if (UNEXPECTED(variable_ptr == NULL)) {
				goto assign_dim_error;
			}
			value = RT_CONSTANT((opline+1), (opline+1)->op1);
			value = zend_assign_to_variable_ex(variable_ptr, value, IS_CONST, EX_USES_STRICT_TYPES(), &garbage);
		}
		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
			ZVAL_COPY(EX_VAR(opline->result.var), value);
		}
		if (garbage) {
			GC_DTOR_NO_REF(garbage);
		}
	} else {
		if (EXPECTED(Z_ISREF_P(object_ptr))) {
			object_ptr = Z_REFVAL_P(object_ptr);
			if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
				goto try_assign_dim_array;
			}
		}
		if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) {
			zend_object *obj = Z_OBJ_P(object_ptr);

			GC_ADDREF(obj);
			dim = RT_CONSTANT(opline, opline->op2);
			if (IS_CONST == IS_CV && UNEXPECTED(Z_ISUNDEF_P(dim))) {
				dim = ZVAL_UNDEFINED_OP2();
			} else if (IS_CONST == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
				dim++;
			}

			value = RT_CONSTANT((opline+1), (opline+1)->op1);
			if (IS_CONST == IS_CV && UNEXPECTED(Z_ISUNDEF_P(value))) {
				value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
			} else if (IS_CONST & (IS_CV|IS_VAR)) {
				ZVAL_DEREF(value);
			}

			zend_assign_to_object_dim(obj, dim, value OPLINE_CC EXECUTE_DATA_CC);


			if (UNEXPECTED(GC_DELREF(obj) == 0)) {
				zend_objects_store_del(obj);
			}
		} else if (EXPECTED(Z_TYPE_P(object_ptr) == IS_STRING)) {
			if (IS_CONST == IS_UNUSED) {
				zend_use_new_element_for_string();


				UNDEF_RESULT();
			} else {
				dim = RT_CONSTANT(opline, opline->op2);
				value = RT_CONSTANT((opline+1), (opline+1)->op1);
				zend_assign_to_string_offset(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC);


			}
		} else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
			if (Z_ISREF_P(orig_object_ptr)
			 && ZEND_REF_HAS_TYPE_SOURCES(Z_REF_P(orig_object_ptr))
			 && !zend_verify_ref_array_assignable(Z_REF_P(orig_object_ptr))) {
				dim = RT_CONSTANT(opline, opline->op2);


				UNDEF_RESULT();
			} else {
				HashTable *ht = zend_new_array(8);
				uint8_t old_type = Z_TYPE_P(object_ptr);

				ZVAL_ARR(object_ptr, ht);
				if (UNEXPECTED(old_type == IS_FALSE)) {
					GC_ADDREF(ht);
					zend_false_to_array_deprecated();
					if (UNEXPECTED(GC_DELREF(ht) == 0)) {
						zend_array_destroy(ht);
						goto assign_dim_error;
					}
				}
				goto try_assign_dim_array;
			}
		} else {
			zend_use_scalar_as_array();
			dim = RT_CONSTANT(opline, opline->op2);
assign_dim_error:


			if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
				ZVAL_NULL(EX_VAR(opline->result.var));
			}
		}
	}
	if (IS_CONST != IS_UNUSED) {


	}
	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
	/* assign_dim has two opcodes! */
	ZEND_VM_NEXT_OPCODE_EX(1, 2);
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_ASSIGN_DIM_SPEC_VAR_CONST_OP_DATA_TMP_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *object_ptr, *orig_object_ptr;
	zval *value;
	zval *variable_ptr;
	zval *dim;
	zend_refcounted *garbage = NULL;

	SAVE_OPLINE();
	orig_object_ptr = object_ptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);

	if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
try_assign_dim_array:
		SEPARATE_ARRAY(object_ptr);
		if (IS_CONST == IS_UNUSED) {
			value = _get_zval_ptr_tmp((opline+1)->op1.var EXECUTE_DATA_CC);
			if (IS_TMP_VAR == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
				HashTable *ht = Z_ARRVAL_P(object_ptr);
				if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE)) {
					GC_ADDREF(ht);
				}
				value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
				if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE) && !GC_DELREF(ht)) {
					zend_array_destroy(ht);
					goto assign_dim_error;
				}
			}
			if (IS_TMP_VAR == IS_CV || IS_TMP_VAR == IS_VAR) {
				ZVAL_DEREF(value);
			}
			value = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), value);
			if (UNEXPECTED(value == NULL)) {
				zend_cannot_add_element();
				goto assign_dim_error;
			} else if (IS_TMP_VAR == IS_CV) {
				if (Z_REFCOUNTED_P(value)) {
					Z_ADDREF_P(value);
				}
			} else if (IS_TMP_VAR == IS_VAR) {
				zval *free_op_data = EX_VAR((opline+1)->op1.var);
				if (Z_ISREF_P(free_op_data)) {
					if (Z_REFCOUNTED_P(value)) {
						Z_ADDREF_P(value);
					}
					zval_ptr_dtor_nogc(free_op_data);
				}
			} else if (IS_TMP_VAR == IS_CONST) {
				if (UNEXPECTED(Z_REFCOUNTED_P(value))) {
					Z_ADDREF_P(value);
				}
			}
		} else {
			dim = RT_CONSTANT(opline, opline->op2);
			if (IS_CONST == IS_CONST) {
				variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
			} else {
				variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
			}
			if (UNEXPECTED(variable_ptr == NULL)) {
				goto assign_dim_error;
			}
			value = _get_zval_ptr_tmp((opline+1)->op1.var EXECUTE_DATA_CC);
			value = zend_assign_to_variable_ex(variable_ptr, value, IS_TMP_VAR, EX_USES_STRICT_TYPES(), &garbage);
		}
		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
			ZVAL_COPY(EX_VAR(opline->result.var), value);
		}
		if (garbage) {
			GC_DTOR_NO_REF(garbage);
		}
	} else {
		if (EXPECTED(Z_ISREF_P(object_ptr))) {
			object_ptr = Z_REFVAL_P(object_ptr);
			if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
				goto try_assign_dim_array;
			}
		}
		if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) {
			zend_object *obj = Z_OBJ_P(object_ptr);

			GC_ADDREF(obj);
			dim = RT_CONSTANT(opline, opline->op2);
			if (IS_CONST == IS_CV && UNEXPECTED(Z_ISUNDEF_P(dim))) {
				dim = ZVAL_UNDEFINED_OP2();
			} else if (IS_CONST == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
				dim++;
			}

			value = _get_zval_ptr_tmp((opline+1)->op1.var EXECUTE_DATA_CC);
			if (IS_TMP_VAR == IS_CV && UNEXPECTED(Z_ISUNDEF_P(value))) {
				value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
			} else if (IS_TMP_VAR & (IS_CV|IS_VAR)) {
				ZVAL_DEREF(value);
			}

			zend_assign_to_object_dim(obj, dim, value OPLINE_CC EXECUTE_DATA_CC);

			zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
			if (UNEXPECTED(GC_DELREF(obj) == 0)) {
				zend_objects_store_del(obj);
			}
		} else if (EXPECTED(Z_TYPE_P(object_ptr) == IS_STRING)) {
			if (IS_CONST == IS_UNUSED) {
				zend_use_new_element_for_string();
				zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
				UNDEF_RESULT();
			} else {
				dim = RT_CONSTANT(opline, opline->op2);
				value = _get_zval_ptr_tmp((opline+1)->op1.var EXECUTE_DATA_CC);
				zend_assign_to_string_offset(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC);
				zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
			}
		} else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
			if (Z_ISREF_P(orig_object_ptr)
			 && ZEND_REF_HAS_TYPE_SOURCES(Z_REF_P(orig_object_ptr))
			 && !zend_verify_ref_array_assignable(Z_REF_P(orig_object_ptr))) {
				dim = RT_CONSTANT(opline, opline->op2);
				zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
				UNDEF_RESULT();
			} else {
				HashTable *ht = zend_new_array(8);
				uint8_t old_type = Z_TYPE_P(object_ptr);

				ZVAL_ARR(object_ptr, ht);
				if (UNEXPECTED(old_type == IS_FALSE)) {
					GC_ADDREF(ht);
					zend_false_to_array_deprecated();
					if (UNEXPECTED(GC_DELREF(ht) == 0)) {
						zend_array_destroy(ht);
						goto assign_dim_error;
					}
				}
				goto try_assign_dim_array;
			}
		} else {
			zend_use_scalar_as_array();
			dim = RT_CONSTANT(opline, opline->op2);
assign_dim_error:
			zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
			if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
				ZVAL_NULL(EX_VAR(opline->result.var));
			}
		}
	}
	if (IS_CONST != IS_UNUSED) {


	}
	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
	/* assign_dim has two opcodes! */
	ZEND_VM_NEXT_OPCODE_EX(1, 2);
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_ASSIGN_DIM_SPEC_VAR_CONST_OP_DATA_VAR_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *object_ptr, *orig_object_ptr;
	zval *value;
	zval *variable_ptr;
	zval *dim;
	zend_refcounted *garbage = NULL;

	SAVE_OPLINE();
	orig_object_ptr = object_ptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);

	if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
try_assign_dim_array:
		SEPARATE_ARRAY(object_ptr);
		if (IS_CONST == IS_UNUSED) {
			value = _get_zval_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);
			if (IS_VAR == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
				HashTable *ht = Z_ARRVAL_P(object_ptr);
				if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE)) {
					GC_ADDREF(ht);
				}
				value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
				if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE) && !GC_DELREF(ht)) {
					zend_array_destroy(ht);
					goto assign_dim_error;
				}
			}
			if (IS_VAR == IS_CV || IS_VAR == IS_VAR) {
				ZVAL_DEREF(value);
			}
			value = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), value);
			if (UNEXPECTED(value == NULL)) {
				zend_cannot_add_element();
				goto assign_dim_error;
			} else if (IS_VAR == IS_CV) {
				if (Z_REFCOUNTED_P(value)) {
					Z_ADDREF_P(value);
				}
			} else if (IS_VAR == IS_VAR) {
				zval *free_op_data = EX_VAR((opline+1)->op1.var);
				if (Z_ISREF_P(free_op_data)) {
					if (Z_REFCOUNTED_P(value)) {
						Z_ADDREF_P(value);
					}
					zval_ptr_dtor_nogc(free_op_data);
				}
			} else if (IS_VAR == IS_CONST) {
				if (UNEXPECTED(Z_REFCOUNTED_P(value))) {
					Z_ADDREF_P(value);
				}
			}
		} else {
			dim = RT_CONSTANT(opline, opline->op2);
			if (IS_CONST == IS_CONST) {
				variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
			} else {
				variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
			}
			if (UNEXPECTED(variable_ptr == NULL)) {
				goto assign_dim_error;
			}
			value = _get_zval_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);
			value = zend_assign_to_variable_ex(variable_ptr, value, IS_VAR, EX_USES_STRICT_TYPES(), &garbage);
		}
		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
			ZVAL_COPY(EX_VAR(opline->result.var), value);
		}
		if (garbage) {
			GC_DTOR_NO_REF(garbage);
		}
	} else {
		if (EXPECTED(Z_ISREF_P(object_ptr))) {
			object_ptr = Z_REFVAL_P(object_ptr);
			if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
				goto try_assign_dim_array;
			}
		}
		if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) {
			zend_object *obj = Z_OBJ_P(object_ptr);

			GC_ADDREF(obj);
			dim = RT_CONSTANT(opline, opline->op2);
			if (IS_CONST == IS_CV && UNEXPECTED(Z_ISUNDEF_P(dim))) {
				dim = ZVAL_UNDEFINED_OP2();
			} else if (IS_CONST == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
				dim++;
			}

			value = _get_zval_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);
			if (IS_VAR == IS_CV && UNEXPECTED(Z_ISUNDEF_P(value))) {
				value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
			} else if (IS_VAR & (IS_CV|IS_VAR)) {
				ZVAL_DEREF(value);
			}

			zend_assign_to_object_dim(obj, dim, value OPLINE_CC EXECUTE_DATA_CC);

			zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
			if (UNEXPECTED(GC_DELREF(obj) == 0)) {
				zend_objects_store_del(obj);
			}
		} else if (EXPECTED(Z_TYPE_P(object_ptr) == IS_STRING)) {
			if (IS_CONST == IS_UNUSED) {
				zend_use_new_element_for_string();
				zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
				UNDEF_RESULT();
			} else {
				dim = RT_CONSTANT(opline, opline->op2);
				value = _get_zval_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);
				zend_assign_to_string_offset(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC);
				zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
			}
		} else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
			if (Z_ISREF_P(orig_object_ptr)
			 && ZEND_REF_HAS_TYPE_SOURCES(Z_REF_P(orig_object_ptr))
			 && !zend_verify_ref_array_assignable(Z_REF_P(orig_object_ptr))) {
				dim = RT_CONSTANT(opline, opline->op2);
				zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
				UNDEF_RESULT();
			} else {
				HashTable *ht = zend_new_array(8);
				uint8_t old_type = Z_TYPE_P(object_ptr);

				ZVAL_ARR(object_ptr, ht);
				if (UNEXPECTED(old_type == IS_FALSE)) {
					GC_ADDREF(ht);
					zend_false_to_array_deprecated();
					if (UNEXPECTED(GC_DELREF(ht) == 0)) {
						zend_array_destroy(ht);
						goto assign_dim_error;
					}
				}
				goto try_assign_dim_array;
			}
		} else {
			zend_use_scalar_as_array();
			dim = RT_CONSTANT(opline, opline->op2);
assign_dim_error:
			zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
			if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
				ZVAL_NULL(EX_VAR(opline->result.var));
			}
		}
	}
	if (IS_CONST != IS_UNUSED) {


	}
	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
	/* assign_dim has two opcodes! */
	ZEND_VM_NEXT_OPCODE_EX(1, 2);
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_ASSIGN_DIM_SPEC_VAR_CONST_OP_DATA_CV_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *object_ptr, *orig_object_ptr;
	zval *value;
	zval *variable_ptr;
	zval *dim;
	zend_refcounted *garbage = NULL;

	SAVE_OPLINE();
	orig_object_ptr = object_ptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);

	if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
try_assign_dim_array:
		SEPARATE_ARRAY(object_ptr);
		if (IS_CONST == IS_UNUSED) {
			value = EX_VAR((opline+1)->op1.var);
			if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
				HashTable *ht = Z_ARRVAL_P(object_ptr);
				if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE)) {
					GC_ADDREF(ht);
				}
				value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
				if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE) && !GC_DELREF(ht)) {
					zend_array_destroy(ht);
					goto assign_dim_error;
				}
			}
			if (IS_CV == IS_CV || IS_CV == IS_VAR) {
				ZVAL_DEREF(value);
			}
			value = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), value);
			if (UNEXPECTED(value == NULL)) {
				zend_cannot_add_element();
				goto assign_dim_error;
			} else if (IS_CV == IS_CV) {
				if (Z_REFCOUNTED_P(value)) {
					Z_ADDREF_P(value);
				}
			} else if (IS_CV == IS_VAR) {
				zval *free_op_data = EX_VAR((opline+1)->op1.var);
				if (Z_ISREF_P(free_op_data)) {
					if (Z_REFCOUNTED_P(value)) {
						Z_ADDREF_P(value);
					}
					zval_ptr_dtor_nogc(free_op_data);
				}
			} else if (IS_CV == IS_CONST) {
				if (UNEXPECTED(Z_REFCOUNTED_P(value))) {
					Z_ADDREF_P(value);
				}
			}
		} else {
			dim = RT_CONSTANT(opline, opline->op2);
			if (IS_CONST == IS_CONST) {
				variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
			} else {
				variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
			}
			if (UNEXPECTED(variable_ptr == NULL)) {
				goto assign_dim_error;
			}
			value = _get_zval_ptr_cv_BP_VAR_R((opline+1)->op1.var EXECUTE_DATA_CC);
			value = zend_assign_to_variable_ex(variable_ptr, value, IS_CV, EX_USES_STRICT_TYPES(), &garbage);
		}
		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
			ZVAL_COPY(EX_VAR(opline->result.var), value);
		}
		if (garbage) {
			GC_DTOR_NO_REF(garbage);
		}
	} else {
		if (EXPECTED(Z_ISREF_P(object_ptr))) {
			object_ptr = Z_REFVAL_P(object_ptr);
			if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
				goto try_assign_dim_array;
			}
		}
		if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) {
			zend_object *obj = Z_OBJ_P(object_ptr);

			GC_ADDREF(obj);
			dim = RT_CONSTANT(opline, opline->op2);
			if (IS_CONST == IS_CV && UNEXPECTED(Z_ISUNDEF_P(dim))) {
				dim = ZVAL_UNDEFINED_OP2();
			} else if (IS_CONST == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
				dim++;
			}

			value = EX_VAR((opline+1)->op1.var);
			if (IS_CV == IS_CV && UNEXPECTED(Z_ISUNDEF_P(value))) {
				value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
			} else if (IS_CV & (IS_CV|IS_VAR)) {
				ZVAL_DEREF(value);
			}

			zend_assign_to_object_dim(obj, dim, value OPLINE_CC EXECUTE_DATA_CC);


			if (UNEXPECTED(GC_DELREF(obj) == 0)) {
				zend_objects_store_del(obj);
			}
		} else if (EXPECTED(Z_TYPE_P(object_ptr) == IS_STRING)) {
			if (IS_CONST == IS_UNUSED) {
				zend_use_new_element_for_string();


				UNDEF_RESULT();
			} else {
				dim = RT_CONSTANT(opline, opline->op2);
				value = EX_VAR((opline+1)->op1.var);
				zend_assign_to_string_offset(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC);


			}
		} else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
			if (Z_ISREF_P(orig_object_ptr)
			 && ZEND_REF_HAS_TYPE_SOURCES(Z_REF_P(orig_object_ptr))
			 && !zend_verify_ref_array_assignable(Z_REF_P(orig_object_ptr))) {
				dim = RT_CONSTANT(opline, opline->op2);


				UNDEF_RESULT();
			} else {
				HashTable *ht = zend_new_array(8);
				uint8_t old_type = Z_TYPE_P(object_ptr);

				ZVAL_ARR(object_ptr, ht);
				if (UNEXPECTED(old_type == IS_FALSE)) {
					GC_ADDREF(ht);
					zend_false_to_array_deprecated();
					if (UNEXPECTED(GC_DELREF(ht) == 0)) {
						zend_array_destroy(ht);
						goto assign_dim_error;
					}
				}
				goto try_assign_dim_array;
			}
		} else {
			zend_use_scalar_as_array();
			dim = RT_CONSTANT(opline, opline->op2);
assign_dim_error:


			if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
				ZVAL_NULL(EX_VAR(opline->result.var));
			}
		}
	}
	if (IS_CONST != IS_UNUSED) {


	}
	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
	/* assign_dim has two opcodes! */
	ZEND_VM_NEXT_OPCODE_EX(1, 2);
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_ASSIGN_SPEC_VAR_CONST_RETVAL_UNUSED_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *value;
	zval *variable_ptr;

	SAVE_OPLINE();
	value = RT_CONSTANT(opline, opline->op2);
	variable_ptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);

	if (0 || UNEXPECTED(0)) {
		zend_refcounted *garbage = NULL;

		value = zend_assign_to_variable_ex(variable_ptr, value, IS_CONST, EX_USES_STRICT_TYPES(), &garbage);
		if (UNEXPECTED(0)) {
			ZVAL_COPY(EX_VAR(opline->result.var), value);
		}
		if (garbage) {
			GC_DTOR_NO_REF(garbage);
		}
	} else {
		value = zend_assign_to_variable(variable_ptr, value, IS_CONST, EX_USES_STRICT_TYPES());
	}
	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
	/* zend_assign_to_variable() always takes care of op2, never free it! */

	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_ASSIGN_SPEC_VAR_CONST_RETVAL_USED_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *value;
	zval *variable_ptr;

	SAVE_OPLINE();
	value = RT_CONSTANT(opline, opline->op2);
	variable_ptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);

	if (0 || UNEXPECTED(1)) {
		zend_refcounted *garbage = NULL;

		value = zend_assign_to_variable_ex(variable_ptr, value, IS_CONST, EX_USES_STRICT_TYPES(), &garbage);
		if (UNEXPECTED(1)) {
			ZVAL_COPY(EX_VAR(opline->result.var), value);
		}
		if (garbage) {
			GC_DTOR_NO_REF(garbage);
		}
	} else {
		value = zend_assign_to_variable(variable_ptr, value, IS_CONST, EX_USES_STRICT_TYPES());
	}
	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
	/* zend_assign_to_variable() always takes care of op2, never free it! */

	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_ASSIGN_OBJ_REF_SPEC_VAR_CONST_OP_DATA_VAR_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *property, *container, *value_ptr;

	SAVE_OPLINE();

	container = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
	property = RT_CONSTANT(opline, opline->op2);

	value_ptr = _get_zval_ptr_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);

	if (1) {
		if (IS_VAR == IS_UNUSED) {
			if (IS_CONST == IS_CONST) {
				zend_assign_to_property_reference_this_const(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
			} else {
				zend_assign_to_property_reference_this_var(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
			}
		} else {
			if (IS_CONST == IS_CONST) {
				zend_assign_to_property_reference_var_const(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
			} else {
				zend_assign_to_property_reference_var_var(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
			}
		}
	} else {
		zend_assign_to_property_reference(container, IS_VAR, property, IS_CONST, value_ptr OPLINE_CC EXECUTE_DATA_CC);
	}

	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));


	zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
	ZEND_VM_NEXT_OPCODE_EX(1, 2);
}

/* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CONST|VAR) */
static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_ASSIGN_OBJ_REF_SPEC_VAR_CONST_OP_DATA_CV_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *property, *container, *value_ptr;

	SAVE_OPLINE();

	container = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
	property = RT_CONSTANT(opline, opline->op2);

	value_ptr = _get_zval_ptr_cv_BP_VAR_W((opline+1)->op1.var EXECUTE_DATA_CC);

	if (1) {
		if (IS_VAR == IS_UNUSED) {
			if (IS_CONST == IS_CONST) {
				zend_assign_to_property_reference_this_const(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
			} else {
				zend_assign_to_property_reference_this_var(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
			}
		} else {
			if (IS_CONST == IS_CONST) {
				zend_assign_to_property_reference_var_const(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
			} else {
				zend_assign_to_property_reference_var_var(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
			}
		}
	} else {
		zend_assign_to_property_reference(container, IS_VAR, property, IS_CONST, value_ptr OPLINE_CC EXECUTE_DATA_CC);
	}

	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));




	ZEND_VM_NEXT_OPCODE_EX(1, 2);
}

/* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CONST|VAR) */
static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_INIT_STATIC_METHOD_CALL_SPEC_VAR_CONST_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *function_name;
	zend_class_entry *ce;
	uint32_t call_info;
	zend_function *fbc;
	zend_execute_data *call;

	SAVE_OPLINE();

	if (IS_VAR == IS_CONST) {
		/* no function found. try a static method in class */
		ce = CACHED_PTR(opline->result.num);
		if (UNEXPECTED(ce == NULL)) {
			ce = zend_fetch_class_by_name(Z_STR_P(RT_CONSTANT(opline, opline->op1)), Z_STR_P(RT_CONSTANT(opline, opline->op1) + 1), ZEND_FETCH_CLASS_DEFAULT | ZEND_FETCH_CLASS_EXCEPTION);
			if (UNEXPECTED(ce == NULL)) {


				HANDLE_EXCEPTION();
			}
			if (IS_CONST != IS_CONST) {
				CACHE_PTR(opline->result.num, ce);
			}
		}
	} else if (IS_VAR == IS_UNUSED) {
		ce = zend_fetch_class(NULL, opline->op1.num);
		if (UNEXPECTED(ce == NULL)) {


			HANDLE_EXCEPTION();
		}
	} else {
		ce = Z_CE_P(EX_VAR(opline->op1.var));
	}

	if (IS_VAR == IS_CONST &&
	    IS_CONST == IS_CONST &&
	    EXPECTED((fbc = CACHED_PTR(opline->result.num + sizeof(void*))) != NULL)) {
		/* nothing to do */
	} else if (IS_VAR != IS_CONST &&
	           IS_CONST == IS_CONST &&
	           EXPECTED(CACHED_PTR(opline->result.num) == ce)) {
		fbc = CACHED_PTR(opline->result.num + sizeof(void*));
	} else if (IS_CONST != IS_UNUSED) {
		function_name = RT_CONSTANT(opline, opline->op2);
		if (IS_CONST != IS_CONST) {
			if (UNEXPECTED(Z_TYPE_P(function_name) != IS_STRING)) {
				do {
					if (IS_CONST & (IS_VAR|IS_CV) && Z_ISREF_P(function_name)) {
						function_name = Z_REFVAL_P(function_name);
						if (EXPECTED(Z_TYPE_P(function_name) == IS_STRING)) {
							break;
						}
					} else if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) {
						ZVAL_UNDEFINED_OP2();
						if (UNEXPECTED(EG(exception) != NULL)) {
							HANDLE_EXCEPTION();
						}
					}
					zend_throw_error(NULL, "Method name must be a string");


					HANDLE_EXCEPTION();
				} while (0);
			}
		}

		if (ce->get_static_method) {
			fbc = ce->get_static_method(ce, Z_STR_P(function_name));
		} else {
			fbc = zend_std_get_static_method(ce, Z_STR_P(function_name), ((IS_CONST == IS_CONST) ? (RT_CONSTANT(opline, opline->op2) + 1) : NULL));
		}
		if (UNEXPECTED(fbc == NULL)) {
			if (EXPECTED(!EG(exception))) {
				zend_undefined_method(ce, Z_STR_P(function_name));
			}


			HANDLE_EXCEPTION();
		}
		if (IS_CONST == IS_CONST &&
		    EXPECTED(!(fbc->common.fn_flags & (ZEND_ACC_CALL_VIA_TRAMPOLINE|ZEND_ACC_NEVER_CACHE))) &&
			EXPECTED(!(fbc->common.scope->ce_flags & ZEND_ACC_TRAIT))) {
			CACHE_POLYMORPHIC_PTR(opline->result.num, ce, fbc);
		}
		if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!RUN_TIME_CACHE(&fbc->op_array))) {
			init_func_run_time_cache(&fbc->op_array);
		}
		if (IS_CONST != IS_CONST) {


		}
	} else {
		if (UNEXPECTED(ce->constructor == NULL)) {
			zend_throw_error(NULL, "Cannot call constructor");
			HANDLE_EXCEPTION();
		}
		if (Z_TYPE(EX(This)) == IS_OBJECT && Z_OBJ(EX(This))->ce != ce->constructor->common.scope && (ce->constructor->common.fn_flags & ZEND_ACC_PRIVATE)) {
			zend_throw_error(NULL, "Cannot call private %s::__construct()", ZSTR_VAL(ce->name));
			HANDLE_EXCEPTION();
		}
		fbc = ce->constructor;
		if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!RUN_TIME_CACHE(&fbc->op_array))) {
			init_func_run_time_cache(&fbc->op_array);
		}
	}

	if (!(fbc->common.fn_flags & ZEND_ACC_STATIC)) {
		if (Z_TYPE(EX(This)) == IS_OBJECT && instanceof_function(Z_OBJCE(EX(This)), ce)) {
			ce = (zend_class_entry*)Z_OBJ(EX(This));
			call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_HAS_THIS;
		} else {
			zend_non_static_method_call(fbc);
			HANDLE_EXCEPTION();
		}
	} else {
		/* previous opcode is ZEND_FETCH_CLASS */
		if (IS_VAR == IS_UNUSED
		 && ((opline->op1.num & ZEND_FETCH_CLASS_MASK) == ZEND_FETCH_CLASS_PARENT ||
		     (opline->op1.num & ZEND_FETCH_CLASS_MASK) == ZEND_FETCH_CLASS_SELF)) {
			if (Z_TYPE(EX(This)) == IS_OBJECT) {
				ce = Z_OBJCE(EX(This));
			} else {
				ce = Z_CE(EX(This));
			}
		}
		call_info = ZEND_CALL_NESTED_FUNCTION;
	}

	call = zend_vm_stack_push_call_frame(call_info,
		fbc, opline->extended_value, ce);
	call->prev_execute_data = EX(call);
	EX(call) = call;

	ZEND_VM_NEXT_OPCODE();
}

static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_SEND_VAR_SPEC_VAR_CONST_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *varptr, *arg;

	if (IS_CONST == IS_CONST) {
		SAVE_OPLINE();
		zend_string *arg_name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
		uint32_t arg_num;
		arg = zend_handle_named_arg(&EX(call), arg_name, &arg_num, CACHE_ADDR(opline->result.num));
		if (UNEXPECTED(!arg)) {
			zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
			HANDLE_EXCEPTION();
		}
	} else {
		arg = ZEND_CALL_VAR(EX(call), opline->result.var);
	}

	varptr = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
	if (IS_VAR == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(varptr) == IS_UNDEF)) {
		SAVE_OPLINE();
		ZVAL_UNDEFINED_OP1();
		ZVAL_NULL(arg);
		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
	}

	if (IS_VAR == IS_CV) {
		ZVAL_COPY_DEREF(arg, varptr);
	} else /* if (IS_VAR == IS_VAR) */ {
		if (UNEXPECTED(Z_ISREF_P(varptr))) {
			zend_refcounted *ref = Z_COUNTED_P(varptr);

			varptr = Z_REFVAL_P(varptr);
			ZVAL_COPY_VALUE(arg, varptr);
			if (UNEXPECTED(GC_DELREF(ref) == 0)) {
				efree_size(ref, sizeof(zend_reference));
			} else if (Z_OPT_REFCOUNTED_P(arg)) {
				Z_ADDREF_P(arg);
			}
		} else {
			ZVAL_COPY_VALUE(arg, varptr);
		}
	}

	ZEND_VM_NEXT_OPCODE();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_SEND_VAR_NO_REF_SPEC_VAR_CONST_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *varptr, *arg;

	if (IS_CONST == IS_CONST) {
		SAVE_OPLINE();
		zend_string *arg_name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
		uint32_t arg_num;
		arg = zend_handle_named_arg(&EX(call), arg_name, &arg_num, CACHE_ADDR(opline->result.num));
		if (UNEXPECTED(!arg)) {
			zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
			HANDLE_EXCEPTION();
		}
	} else {
		arg = ZEND_CALL_VAR(EX(call), opline->result.var);
	}

	varptr = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
	ZVAL_COPY_VALUE(arg, varptr);

	if (EXPECTED(Z_ISREF_P(varptr))) {
		ZEND_VM_NEXT_OPCODE();
	}

	SAVE_OPLINE();
	ZVAL_NEW_REF(arg, arg);
	zend_error(E_NOTICE, "Only variables should be passed by reference");
	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_SEND_VAR_NO_REF_EX_SPEC_VAR_CONST_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *varptr, *arg;
	uint32_t arg_num;

	if (IS_CONST == IS_CONST) {
		SAVE_OPLINE();
		zend_string *arg_name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
		arg = zend_handle_named_arg(&EX(call), arg_name, &arg_num, CACHE_ADDR(opline->result.num));
		if (UNEXPECTED(!arg)) {
			zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
			HANDLE_EXCEPTION();
		}
	} else {
		arg = ZEND_CALL_VAR(EX(call), opline->result.var);
		arg_num = opline->op2.num;
	}

	if (EXPECTED(arg_num <= MAX_ARG_FLAG_NUM)) {
		if (!QUICK_ARG_SHOULD_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
			goto send_var;
		}

		varptr = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
		ZVAL_COPY_VALUE(arg, varptr);

		if (EXPECTED(Z_ISREF_P(varptr) ||
		    QUICK_ARG_MAY_BE_SENT_BY_REF(EX(call)->func, arg_num))) {
			ZEND_VM_NEXT_OPCODE();
		}
	} else {
		if (!ARG_SHOULD_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
			goto send_var;
		}

		varptr = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
		ZVAL_COPY_VALUE(arg, varptr);

		if (EXPECTED(Z_ISREF_P(varptr) ||
		    ARG_MAY_BE_SENT_BY_REF(EX(call)->func, arg_num))) {
			ZEND_VM_NEXT_OPCODE();
		}
	}

	SAVE_OPLINE();
	ZVAL_NEW_REF(arg, arg);
	zend_error(E_NOTICE, "Only variables should be passed by reference");
	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();

send_var:
	varptr = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
	if (UNEXPECTED(Z_ISREF_P(varptr))) {
		zend_refcounted *ref = Z_COUNTED_P(varptr);

		varptr = Z_REFVAL_P(varptr);
		ZVAL_COPY_VALUE(arg, varptr);
		if (UNEXPECTED(GC_DELREF(ref) == 0)) {
			efree_size(ref, sizeof(zend_reference));
		} else if (Z_OPT_REFCOUNTED_P(arg)) {
			Z_ADDREF_P(arg);
		}
	} else {
		ZVAL_COPY_VALUE(arg, varptr);
	}
	ZEND_VM_NEXT_OPCODE();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_SEND_REF_SPEC_VAR_CONST_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *varptr, *arg;

	SAVE_OPLINE();
	if (IS_CONST == IS_CONST) {
		zend_string *arg_name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
		uint32_t arg_num;
		arg = zend_handle_named_arg(&EX(call), arg_name, &arg_num, CACHE_ADDR(opline->result.num));
		if (UNEXPECTED(!arg)) {
			zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
			HANDLE_EXCEPTION();
		}
	} else {
		arg = ZEND_CALL_VAR(EX(call), opline->result.var);
	}

	varptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
	if (Z_ISREF_P(varptr)) {
		Z_ADDREF_P(varptr);
	} else {
		ZVAL_MAKE_REF_EX(varptr, 2);
	}
	ZVAL_REF(arg, Z_REF_P(varptr));

	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
	ZEND_VM_NEXT_OPCODE();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_SEND_VAR_EX_SPEC_VAR_CONST_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *varptr, *arg;
	uint32_t arg_num;

	if (IS_CONST == IS_CONST) {
		SAVE_OPLINE();
		zend_string *arg_name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
		arg = zend_handle_named_arg(&EX(call), arg_name, &arg_num, CACHE_ADDR(opline->result.num));
		if (UNEXPECTED(!arg)) {
			zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
			HANDLE_EXCEPTION();
		}
	} else {
		arg = ZEND_CALL_VAR(EX(call), opline->result.var);
		arg_num = opline->op2.num;
	}

	if (EXPECTED(arg_num <= MAX_ARG_FLAG_NUM)) {
		if (QUICK_ARG_SHOULD_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
			goto send_var_by_ref;
		}
	} else if (ARG_SHOULD_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
send_var_by_ref:
		varptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
		if (Z_ISREF_P(varptr)) {
			Z_ADDREF_P(varptr);
		} else {
			ZVAL_MAKE_REF_EX(varptr, 2);
		}
		ZVAL_REF(arg, Z_REF_P(varptr));

		zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
		ZEND_VM_NEXT_OPCODE();
	}

	varptr = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
	if (IS_VAR == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(varptr) == IS_UNDEF)) {
		SAVE_OPLINE();
		ZVAL_UNDEFINED_OP1();
		ZVAL_NULL(arg);
		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
	}

	if (IS_VAR == IS_CV) {
		ZVAL_COPY_DEREF(arg, varptr);
	} else /* if (IS_VAR == IS_VAR) */ {
		if (UNEXPECTED(Z_ISREF_P(varptr))) {
			zend_refcounted *ref = Z_COUNTED_P(varptr);

			varptr = Z_REFVAL_P(varptr);
			ZVAL_COPY_VALUE(arg, varptr);
			if (UNEXPECTED(GC_DELREF(ref) == 0)) {
				efree_size(ref, sizeof(zend_reference));
			} else if (Z_OPT_REFCOUNTED_P(arg)) {
				Z_ADDREF_P(arg);
			}
		} else {
			ZVAL_COPY_VALUE(arg, varptr);
		}
	}

	ZEND_VM_NEXT_OPCODE();
}

static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_SEND_FUNC_ARG_SPEC_VAR_CONST_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *varptr, *arg;

	if (IS_CONST == IS_CONST) {
		// TODO: Would it make sense to share the cache slot with CHECK_FUNC_ARG?
		SAVE_OPLINE();
		zend_string *arg_name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
		uint32_t arg_num;
		arg = zend_handle_named_arg(&EX(call), arg_name, &arg_num, CACHE_ADDR(opline->result.num));
		if (UNEXPECTED(!arg)) {
			zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
			HANDLE_EXCEPTION();
		}
	} else {
		arg = ZEND_CALL_VAR(EX(call), opline->result.var);
	}

	if (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) {
		varptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
		if (Z_ISREF_P(varptr)) {
			Z_ADDREF_P(varptr);
		} else {
			ZVAL_MAKE_REF_EX(varptr, 2);
		}
		ZVAL_REF(arg, Z_REF_P(varptr));

		zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
		ZEND_VM_NEXT_OPCODE();
	}

	varptr = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);

	if (UNEXPECTED(Z_ISREF_P(varptr))) {
		zend_refcounted *ref = Z_COUNTED_P(varptr);

		varptr = Z_REFVAL_P(varptr);
		ZVAL_COPY_VALUE(arg, varptr);
		if (UNEXPECTED(GC_DELREF(ref) == 0)) {
			efree_size(ref, sizeof(zend_reference));
		} else if (Z_OPT_REFCOUNTED_P(arg)) {
			Z_ADDREF_P(arg);
		}
	} else {
		ZVAL_COPY_VALUE(arg, varptr);
	}

	ZEND_VM_NEXT_OPCODE();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_FETCH_CLASS_CONSTANT_SPEC_VAR_CONST_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	zend_class_entry *ce, *scope;
	zend_class_constant *c;
	zval *value, *zv, *constant_zv;
	zend_string *constant_name;
	USE_OPLINE

	SAVE_OPLINE();

	do {
		if (IS_VAR == IS_CONST && IS_CONST == IS_CONST) {
			if (EXPECTED(CACHED_PTR(opline->extended_value + sizeof(void*)))) {
				value = CACHED_PTR(opline->extended_value + sizeof(void*));
				break;
			}
		}
		if (IS_VAR == IS_CONST) {
			if (EXPECTED(CACHED_PTR(opline->extended_value))) {
				ce = CACHED_PTR(opline->extended_value);
			} else {
				ce = zend_fetch_class_by_name(Z_STR_P(RT_CONSTANT(opline, opline->op1)), Z_STR_P(RT_CONSTANT(opline, opline->op1) + 1), ZEND_FETCH_CLASS_DEFAULT | ZEND_FETCH_CLASS_EXCEPTION);
				if (UNEXPECTED(ce == NULL)) {
					ZVAL_UNDEF(EX_VAR(opline->result.var));


					HANDLE_EXCEPTION();
				}
				CACHE_PTR(opline->extended_value, ce);
			}
		} else if (IS_VAR == IS_UNUSED) {
			ce = zend_fetch_class(NULL, opline->op1.num);
			if (UNEXPECTED(ce == NULL)) {
				ZVAL_UNDEF(EX_VAR(opline->result.var));


				HANDLE_EXCEPTION();
			}
		} else {
			ce = Z_CE_P(EX_VAR(opline->op1.var));
		}
		if (IS_VAR != IS_CONST
			&& IS_CONST == IS_CONST
			&& EXPECTED(CACHED_PTR(opline->extended_value) == ce)) {
			value = CACHED_PTR(opline->extended_value + sizeof(void*));
			break;
		}

		constant_zv = RT_CONSTANT(opline, opline->op2);
		if (UNEXPECTED(Z_TYPE_P(constant_zv) != IS_STRING)) {
			zend_invalid_class_constant_type_error(Z_TYPE_P(constant_zv));
			ZVAL_UNDEF(EX_VAR(opline->result.var));


			HANDLE_EXCEPTION();
		}
		constant_name = Z_STR_P(constant_zv);
		/* Magic 'class' for constant OP2 is caught at compile-time */
		if (IS_CONST != IS_CONST && UNEXPECTED(zend_string_equals_literal_ci(constant_name, "class"))) {
			ZVAL_STR_COPY(EX_VAR(opline->result.var), ce->name);


			ZEND_VM_NEXT_OPCODE();
		}
		zv = IS_CONST == IS_CONST
			? zend_hash_find_known_hash(CE_CONSTANTS_TABLE(ce), constant_name)
			: zend_hash_find(CE_CONSTANTS_TABLE(ce), constant_name);

		if (EXPECTED(zv != NULL)) {
			c = Z_PTR_P(zv);
			scope = EX(func)->op_array.scope;
			if (!zend_verify_const_access(c, scope)) {
				zend_throw_error(NULL, "Cannot access %s constant %s::%s", zend_visibility_string(ZEND_CLASS_CONST_FLAGS(c)), ZSTR_VAL(ce->name), ZSTR_VAL(constant_name));
				ZVAL_UNDEF(EX_VAR(opline->result.var));


				HANDLE_EXCEPTION();
			}

			if (ce->ce_flags & ZEND_ACC_TRAIT) {
				zend_throw_error(NULL, "Cannot access trait constant %s::%s directly", ZSTR_VAL(ce->name), ZSTR_VAL(constant_name));
				ZVAL_UNDEF(EX_VAR(opline->result.var));


				HANDLE_EXCEPTION();
			}

			bool is_constant_deprecated = ZEND_CLASS_CONST_FLAGS(c) & ZEND_ACC_DEPRECATED;
			if (UNEXPECTED(is_constant_deprecated) && !CONST_IS_RECURSIVE(c)) {
				if (c->ce->type == ZEND_USER_CLASS) {
					/* Recursion protection only applied to user constants, GH-18463 */
					CONST_PROTECT_RECURSION(c);
				}
				zend_deprecated_class_constant(c, constant_name);
				if (c->ce->type == ZEND_USER_CLASS) {
					CONST_UNPROTECT_RECURSION(c);
				}

				if (EG(exception)) {
					ZVAL_UNDEF(EX_VAR(opline->result.var));


					HANDLE_EXCEPTION();
				}
			}

			value = &c->value;
			// Enums require loading of all class constants to build the backed enum table
			if (ce->ce_flags & ZEND_ACC_ENUM && ce->enum_backing_type != IS_UNDEF && ce->type == ZEND_USER_CLASS && !(ce->ce_flags & ZEND_ACC_CONSTANTS_UPDATED)) {
				if (UNEXPECTED(zend_update_class_constants(ce) == FAILURE)) {
					ZVAL_UNDEF(EX_VAR(opline->result.var));


					HANDLE_EXCEPTION();
				}
			}
			if (Z_TYPE_P(value) == IS_CONSTANT_AST) {
				if (UNEXPECTED(zend_update_class_constant(c, constant_name, c->ce) != SUCCESS)) {
					ZVAL_UNDEF(EX_VAR(opline->result.var));


					HANDLE_EXCEPTION();
				}
			}
			if (IS_CONST == IS_CONST && !is_constant_deprecated) {
				CACHE_POLYMORPHIC_PTR(opline->extended_value, ce, value);
			}
		} else {
			zend_throw_error(NULL, "Undefined constant %s::%s",
				ZSTR_VAL(ce->name), ZSTR_VAL(constant_name));
			ZVAL_UNDEF(EX_VAR(opline->result.var));


			HANDLE_EXCEPTION();
		}
	} while (0);

	ZVAL_COPY_OR_DUP(EX_VAR(opline->result.var), value);


	ZEND_VM_NEXT_OPCODE();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_CONST_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *expr_ptr, new_expr;

	SAVE_OPLINE();
	if ((IS_VAR == IS_VAR || IS_VAR == IS_CV) &&
	    UNEXPECTED(opline->extended_value & ZEND_ARRAY_ELEMENT_REF)) {
		expr_ptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
		if (Z_ISREF_P(expr_ptr)) {
			Z_ADDREF_P(expr_ptr);
		} else {
			ZVAL_MAKE_REF_EX(expr_ptr, 2);
		}
		zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
	} else {
		expr_ptr = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
		if (IS_VAR == IS_TMP_VAR) {
			/* pass */
		} else if (IS_VAR == IS_CONST) {
			Z_TRY_ADDREF_P(expr_ptr);
		} else if (IS_VAR == IS_CV) {
			ZVAL_DEREF(expr_ptr);
			Z_TRY_ADDREF_P(expr_ptr);
		} else /* if (IS_VAR == IS_VAR) */ {
			if (UNEXPECTED(Z_ISREF_P(expr_ptr))) {
				zend_refcounted *ref = Z_COUNTED_P(expr_ptr);

				expr_ptr = Z_REFVAL_P(expr_ptr);
				if (UNEXPECTED(GC_DELREF(ref) == 0)) {
					ZVAL_COPY_VALUE(&new_expr, expr_ptr);
					expr_ptr = &new_expr;
					efree_size(ref, sizeof(zend_reference));
				} else if (Z_OPT_REFCOUNTED_P(expr_ptr)) {
					Z_ADDREF_P(expr_ptr);
				}
			}
		}
	}

	if (IS_CONST != IS_UNUSED) {
		zval *offset = RT_CONSTANT(opline, opline->op2);
		zend_string *str;
		zend_ulong hval;

add_again:
		if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) {
			str = Z_STR_P(offset);
			if (IS_CONST != IS_CONST) {
				if (ZEND_HANDLE_NUMERIC(str, hval)) {
					goto num_index;
				}
			}
str_index:
			zend_hash_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), str, expr_ptr);
		} else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
			hval = Z_LVAL_P(offset);
num_index:
			zend_hash_index_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), hval, expr_ptr);
		} else if ((IS_CONST & (IS_VAR|IS_CV)) && EXPECTED(Z_TYPE_P(offset) == IS_REFERENCE)) {
			offset = Z_REFVAL_P(offset);
			goto add_again;
		} else if (UNEXPECTED(Z_TYPE_P(offset) == IS_NULL)) {
			zval tmp;
			if (IS_VAR == IS_CV || IS_VAR == IS_VAR) {
				ZVAL_COPY(&tmp, expr_ptr);
			}
			zend_error(E_DEPRECATED, "Using null as an array offset is deprecated, use an empty string instead");
			if (IS_VAR == IS_CV || IS_VAR == IS_VAR) {
				/* A userland error handler can do funky things to the expression, so reset it */
				zval_ptr_dtor(expr_ptr);
				ZVAL_COPY_VALUE(expr_ptr, &tmp);
			}
			if (UNEXPECTED(EG(exception))) {
				zval_ptr_dtor_nogc(expr_ptr);
				HANDLE_EXCEPTION();
			}
			str = ZSTR_EMPTY_ALLOC();
			goto str_index;
		} else if (Z_TYPE_P(offset) == IS_DOUBLE) {
			hval = zend_dval_to_lval_safe(Z_DVAL_P(offset));
			goto num_index;
		} else if (Z_TYPE_P(offset) == IS_FALSE) {
			hval = 0;
			goto num_index;
		} else if (Z_TYPE_P(offset) == IS_TRUE) {
			hval = 1;
			goto num_index;
		} else if (Z_TYPE_P(offset) == IS_RESOURCE) {
			zend_use_resource_as_offset(offset);
			hval = Z_RES_HANDLE_P(offset);
			goto num_index;
		} else if (IS_CONST == IS_CV && Z_TYPE_P(offset) == IS_UNDEF) {
			ZVAL_UNDEFINED_OP2();
			str = ZSTR_EMPTY_ALLOC();
			goto str_index;
		} else {
			zend_illegal_array_offset_access(offset);
			zval_ptr_dtor_nogc(expr_ptr);
		}


	} else {
		if (!zend_hash_next_index_insert(Z_ARRVAL_P(EX_VAR(opline->result.var)), expr_ptr)) {
			zend_cannot_add_element();
			zval_ptr_dtor_nogc(expr_ptr);
		}
	}
	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_INIT_ARRAY_SPEC_VAR_CONST_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	zval *array;
	uint32_t size;
	USE_OPLINE

	SAVE_OPLINE();
	array = EX_VAR(opline->result.var);
	if (IS_VAR != IS_UNUSED) {
		size = opline->extended_value >> ZEND_ARRAY_SIZE_SHIFT;
		ZVAL_ARR(array, zend_new_array(size));
		/* Explicitly initialize array as not-packed if flag is set */
		if (opline->extended_value & ZEND_ARRAY_NOT_PACKED) {
			zend_hash_real_init_mixed(Z_ARRVAL_P(array));
		}
		ZEND_VM_TAIL_CALL(ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_CONST_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
	} else {
		ZVAL_ARR(array, zend_new_array(0));
		ZEND_VM_NEXT_OPCODE();
	}
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_UNSET_DIM_SPEC_VAR_CONST_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *container;
	zval *offset;
	zend_ulong hval;
	zend_string *key;

	SAVE_OPLINE();
	container = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
	offset = RT_CONSTANT(opline, opline->op2);

	do {
		if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
			HashTable *ht;

unset_dim_array:
			SEPARATE_ARRAY(container);
			ht = Z_ARRVAL_P(container);
offset_again:
			if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) {
				key = Z_STR_P(offset);
				if (IS_CONST != IS_CONST) {
					if (ZEND_HANDLE_NUMERIC(key, hval)) {
						goto num_index_dim;
					}
				}
str_index_dim:
				ZEND_ASSERT(ht != &EG(symbol_table));
				zend_hash_del(ht, key);
			} else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
				hval = Z_LVAL_P(offset);
num_index_dim:
				zend_hash_index_del(ht, hval);
			} else if ((IS_CONST & (IS_VAR|IS_CV)) && EXPECTED(Z_TYPE_P(offset) == IS_REFERENCE)) {
				offset = Z_REFVAL_P(offset);
				goto offset_again;
			} else if (Z_TYPE_P(offset) == IS_DOUBLE) {
				/* The array may be destroyed while throwing a warning in case the float is not representable as an int.
				 * Temporarily increase the refcount to detect this situation. */
				GC_TRY_ADDREF(ht);
				hval = zend_dval_to_lval_safe(Z_DVAL_P(offset));
				if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE) && !GC_DELREF(ht)) {
					zend_array_destroy(ht);
					break;
				}
				if (EG(exception)) {
					break;
				}
				goto num_index_dim;
			} else if (Z_TYPE_P(offset) == IS_NULL) {
				key = ZSTR_EMPTY_ALLOC();
				goto str_index_dim;
			} else if (Z_TYPE_P(offset) == IS_FALSE) {
				hval = 0;
				goto num_index_dim;
			} else if (Z_TYPE_P(offset) == IS_TRUE) {
				hval = 1;
				goto num_index_dim;
			} else if (Z_TYPE_P(offset) == IS_RESOURCE) {
				zend_use_resource_as_offset(offset);
				hval = Z_RES_HANDLE_P(offset);
				goto num_index_dim;
			} else if (IS_CONST == IS_CV && Z_TYPE_P(offset) == IS_UNDEF) {
				ZVAL_UNDEFINED_OP2();
				key = ZSTR_EMPTY_ALLOC();
				goto str_index_dim;
			} else {
				zend_illegal_array_offset_unset(offset);
			}
			break;
		} else if (Z_ISREF_P(container)) {
			container = Z_REFVAL_P(container);
			if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
				goto unset_dim_array;
			}
		}
		if (IS_VAR == IS_CV && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
			container = ZVAL_UNDEFINED_OP1();
		}
		if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(offset) == IS_UNDEF)) {
			offset = ZVAL_UNDEFINED_OP2();
		}
		if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
			if (IS_CONST == IS_CONST && Z_EXTRA_P(offset) == ZEND_EXTRA_VALUE) {
				offset++;
			}
			Z_OBJ_HT_P(container)->unset_dimension(Z_OBJ_P(container), offset);
		} else if (UNEXPECTED(Z_TYPE_P(container) == IS_STRING)) {
			zend_throw_error(NULL, "Cannot unset string offsets");
		} else if (UNEXPECTED(Z_TYPE_P(container) > IS_FALSE)) {
			zend_throw_error(NULL, "Cannot unset offset in a non-array variable");
		} else if (UNEXPECTED(Z_TYPE_P(container) == IS_FALSE)) {
			zend_false_to_array_deprecated();
		}
	} while (0);


	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_UNSET_OBJ_SPEC_VAR_CONST_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *container;
	zval *offset;
	zend_string *name, *tmp_name;

	SAVE_OPLINE();
	container = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
	offset = RT_CONSTANT(opline, opline->op2);

	do {
		if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT)) {
			if (Z_ISREF_P(container)) {
				container = Z_REFVAL_P(container);
				if (Z_TYPE_P(container) != IS_OBJECT) {
					if (IS_VAR == IS_CV
					 && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
						ZVAL_UNDEFINED_OP1();
					}
					break;
				}
			} else {
				break;
			}
		}
		if (IS_CONST == IS_CONST) {
			name = Z_STR_P(offset);
		} else {
			name = zval_try_get_tmp_string(offset, &tmp_name);
			if (UNEXPECTED(!name)) {
				break;
			}
		}
		Z_OBJ_HT_P(container)->unset_property(Z_OBJ_P(container), name, ((IS_CONST == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL));
		if (IS_CONST != IS_CONST) {
			zend_tmp_string_release(tmp_name);
		}
	} while (0);


	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_YIELD_SPEC_VAR_CONST_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE

	zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C);

	SAVE_OPLINE();
	if (UNEXPECTED(generator->flags & ZEND_GENERATOR_FORCED_CLOSE)) {
		ZEND_VM_TAIL_CALL(zend_yield_in_closed_generator_helper_SPEC_TAILCALL(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
	}

	/* Destroy the previously yielded value */
	zval_ptr_dtor(&generator->value);

	/* Destroy the previously yielded key */
	zval_ptr_dtor(&generator->key);

	/* Set the new yielded value */
	if (IS_VAR != IS_UNUSED) {
		if (UNEXPECTED(EX(func)->op_array.fn_flags & ZEND_ACC_RETURN_REFERENCE)) {
			/* Constants and temporary variables aren't yieldable by reference,
			 * but we still allow them with a notice. */
			if (IS_VAR & (IS_CONST|IS_TMP_VAR)) {
				zval *value;

				zend_error(E_NOTICE, "Only variable references should be yielded by reference");

				value = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
				ZVAL_COPY_VALUE(&generator->value, value);
				if (IS_VAR == IS_CONST) {
					if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
						Z_ADDREF(generator->value);
					}
				}
			} else {
				zval *value_ptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);

				/* If a function call result is yielded and the function did
				 * not return by reference we throw a notice. */
				do {
					if (IS_VAR == IS_VAR) {
						ZEND_ASSERT(value_ptr != &EG(uninitialized_zval));
						if (opline->extended_value == ZEND_RETURNS_FUNCTION
						 && !Z_ISREF_P(value_ptr)) {
							zend_error(E_NOTICE, "Only variable references should be yielded by reference");
							ZVAL_COPY(&generator->value, value_ptr);
							break;
						}
					}
					if (Z_ISREF_P(value_ptr)) {
						Z_ADDREF_P(value_ptr);
					} else {
						ZVAL_MAKE_REF_EX(value_ptr, 2);
					}
					ZVAL_REF(&generator->value, Z_REF_P(value_ptr));
				} while (0);

				zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
			}
		} else {
			zval *value = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);

			/* Consts, temporary variables and references need copying */
			if (IS_VAR == IS_CONST) {
				ZVAL_COPY_VALUE(&generator->value, value);
				if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
					Z_ADDREF(generator->value);
				}
			} else if (IS_VAR == IS_TMP_VAR) {
				ZVAL_COPY_VALUE(&generator->value, value);
			} else if ((IS_VAR & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) {
				ZVAL_COPY(&generator->value, Z_REFVAL_P(value));
				zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
			} else {
				ZVAL_COPY_VALUE(&generator->value, value);
				if (IS_VAR == IS_CV) {
					if (Z_OPT_REFCOUNTED_P(value)) Z_ADDREF_P(value);
				}
			}
		}
	} else {
		/* If no value was specified yield null */
		ZVAL_NULL(&generator->value);
	}

	/* Set the new yielded key */
	if (IS_CONST != IS_UNUSED) {
		zval *key = RT_CONSTANT(opline, opline->op2);
		if ((IS_CONST & (IS_CV|IS_VAR)) && UNEXPECTED(Z_TYPE_P(key) == IS_REFERENCE)) {
			key = Z_REFVAL_P(key);
		}
		ZVAL_COPY(&generator->key, key);


		if (Z_TYPE(generator->key) == IS_LONG
		    && Z_LVAL(generator->key) > generator->largest_used_integer_key
		) {
			generator->largest_used_integer_key = Z_LVAL(generator->key);
		}
	} else {
		/* If no key was specified we use auto-increment keys */
		generator->largest_used_integer_key++;
		ZVAL_LONG(&generator->key, generator->largest_used_integer_key);
	}

	if (RETURN_VALUE_USED(opline)) {
		/* If the return value of yield is used set the send
		 * target and initialize it to NULL */
		generator->send_target = EX_VAR(opline->result.var);
		ZVAL_NULL(generator->send_target);
	} else {
		generator->send_target = NULL;
	}

	/* The GOTO VM uses a local opline variable. We need to set the opline
	 * variable in execute_data so we don't resume at an old position. */
	SAVE_OPLINE();

	ZEND_VM_RETURN();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_IN_ARRAY_SPEC_VAR_CONST_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1;
	HashTable *ht = Z_ARRVAL_P(RT_CONSTANT(opline, opline->op2));
	zval *result;

	op1 = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
	if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
		result = zend_hash_find_ex(ht, Z_STR_P(op1), IS_VAR == IS_CONST);
		if (IS_VAR & (IS_TMP_VAR|IS_VAR)) {
			zval_ptr_dtor_str(op1);
		}
		ZEND_VM_SMART_BRANCH(result, 0);
	}

	if (opline->extended_value) {
		if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
			result = zend_hash_index_find(ht, Z_LVAL_P(op1));
			ZEND_VM_SMART_BRANCH(result, 0);
		}
		SAVE_OPLINE();
		if ((IS_VAR & (IS_VAR|IS_CV)) && Z_TYPE_P(op1) == IS_REFERENCE) {
			op1 = Z_REFVAL_P(op1);
			if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
				result = zend_hash_find(ht, Z_STR_P(op1));
				zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
				ZEND_VM_SMART_BRANCH(result, 0);
			} else if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
				result = zend_hash_index_find(ht, Z_LVAL_P(op1));
				zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
				ZEND_VM_SMART_BRANCH(result, 0);
			}
		} else if (IS_VAR == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
			ZVAL_UNDEFINED_OP1();
		}
	} else if (Z_TYPE_P(op1) <= IS_FALSE) {
		if (IS_VAR == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
			SAVE_OPLINE();
			ZVAL_UNDEFINED_OP1();
			if (UNEXPECTED(EG(exception) != NULL)) {
				HANDLE_EXCEPTION();
			}
		}
		result = zend_hash_find_known_hash(ht, ZSTR_EMPTY_ALLOC());
		ZEND_VM_SMART_BRANCH(result, 0);
	} else {
		zend_string *key;
		zval key_tmp;

		if ((IS_VAR & (IS_VAR|IS_CV)) && Z_TYPE_P(op1) == IS_REFERENCE) {
			op1 = Z_REFVAL_P(op1);
			if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
				result = zend_hash_find(ht, Z_STR_P(op1));
				zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
				ZEND_VM_SMART_BRANCH(result, 0);
			}
		}

		SAVE_OPLINE();
		ZEND_HASH_MAP_FOREACH_STR_KEY(ht, key) {
			ZVAL_STR(&key_tmp, key);
			if (zend_compare(op1, &key_tmp) == 0) {
				zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
				ZEND_VM_SMART_BRANCH(1, 1);
			}
		} ZEND_HASH_FOREACH_END();
	}
	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
	ZEND_VM_SMART_BRANCH(0, 1);
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_FETCH_CLASS_CONSTANT_SPEC_VAR_TMPVARCV_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	zend_class_entry *ce, *scope;
	zend_class_constant *c;
	zval *value, *zv, *constant_zv;
	zend_string *constant_name;
	USE_OPLINE

	SAVE_OPLINE();

	do {
		if (IS_VAR == IS_CONST && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST) {
			if (EXPECTED(CACHED_PTR(opline->extended_value + sizeof(void*)))) {
				value = CACHED_PTR(opline->extended_value + sizeof(void*));
				break;
			}
		}
		if (IS_VAR == IS_CONST) {
			if (EXPECTED(CACHED_PTR(opline->extended_value))) {
				ce = CACHED_PTR(opline->extended_value);
			} else {
				ce = zend_fetch_class_by_name(Z_STR_P(RT_CONSTANT(opline, opline->op1)), Z_STR_P(RT_CONSTANT(opline, opline->op1) + 1), ZEND_FETCH_CLASS_DEFAULT | ZEND_FETCH_CLASS_EXCEPTION);
				if (UNEXPECTED(ce == NULL)) {
					ZVAL_UNDEF(EX_VAR(opline->result.var));
					FREE_OP(opline->op2_type, opline->op2.var);
					HANDLE_EXCEPTION();
				}
				CACHE_PTR(opline->extended_value, ce);
			}
		} else if (IS_VAR == IS_UNUSED) {
			ce = zend_fetch_class(NULL, opline->op1.num);
			if (UNEXPECTED(ce == NULL)) {
				ZVAL_UNDEF(EX_VAR(opline->result.var));
				FREE_OP(opline->op2_type, opline->op2.var);
				HANDLE_EXCEPTION();
			}
		} else {
			ce = Z_CE_P(EX_VAR(opline->op1.var));
		}
		if (IS_VAR != IS_CONST
			&& (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST
			&& EXPECTED(CACHED_PTR(opline->extended_value) == ce)) {
			value = CACHED_PTR(opline->extended_value + sizeof(void*));
			break;
		}

		constant_zv = _get_zval_ptr_tmpvarcv(opline->op2_type, opline->op2, BP_VAR_R EXECUTE_DATA_CC);
		if (UNEXPECTED(Z_TYPE_P(constant_zv) != IS_STRING)) {
			zend_invalid_class_constant_type_error(Z_TYPE_P(constant_zv));
			ZVAL_UNDEF(EX_VAR(opline->result.var));
			FREE_OP(opline->op2_type, opline->op2.var);
			HANDLE_EXCEPTION();
		}
		constant_name = Z_STR_P(constant_zv);
		/* Magic 'class' for constant OP2 is caught at compile-time */
		if ((IS_TMP_VAR|IS_VAR|IS_CV) != IS_CONST && UNEXPECTED(zend_string_equals_literal_ci(constant_name, "class"))) {
			ZVAL_STR_COPY(EX_VAR(opline->result.var), ce->name);
			FREE_OP(opline->op2_type, opline->op2.var);
			ZEND_VM_NEXT_OPCODE();
		}
		zv = (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST
			? zend_hash_find_known_hash(CE_CONSTANTS_TABLE(ce), constant_name)
			: zend_hash_find(CE_CONSTANTS_TABLE(ce), constant_name);

		if (EXPECTED(zv != NULL)) {
			c = Z_PTR_P(zv);
			scope = EX(func)->op_array.scope;
			if (!zend_verify_const_access(c, scope)) {
				zend_throw_error(NULL, "Cannot access %s constant %s::%s", zend_visibility_string(ZEND_CLASS_CONST_FLAGS(c)), ZSTR_VAL(ce->name), ZSTR_VAL(constant_name));
				ZVAL_UNDEF(EX_VAR(opline->result.var));
				FREE_OP(opline->op2_type, opline->op2.var);
				HANDLE_EXCEPTION();
			}

			if (ce->ce_flags & ZEND_ACC_TRAIT) {
				zend_throw_error(NULL, "Cannot access trait constant %s::%s directly", ZSTR_VAL(ce->name), ZSTR_VAL(constant_name));
				ZVAL_UNDEF(EX_VAR(opline->result.var));
				FREE_OP(opline->op2_type, opline->op2.var);
				HANDLE_EXCEPTION();
			}

			bool is_constant_deprecated = ZEND_CLASS_CONST_FLAGS(c) & ZEND_ACC_DEPRECATED;
			if (UNEXPECTED(is_constant_deprecated) && !CONST_IS_RECURSIVE(c)) {
				if (c->ce->type == ZEND_USER_CLASS) {
					/* Recursion protection only applied to user constants, GH-18463 */
					CONST_PROTECT_RECURSION(c);
				}
				zend_deprecated_class_constant(c, constant_name);
				if (c->ce->type == ZEND_USER_CLASS) {
					CONST_UNPROTECT_RECURSION(c);
				}

				if (EG(exception)) {
					ZVAL_UNDEF(EX_VAR(opline->result.var));
					FREE_OP(opline->op2_type, opline->op2.var);
					HANDLE_EXCEPTION();
				}
			}

			value = &c->value;
			// Enums require loading of all class constants to build the backed enum table
			if (ce->ce_flags & ZEND_ACC_ENUM && ce->enum_backing_type != IS_UNDEF && ce->type == ZEND_USER_CLASS && !(ce->ce_flags & ZEND_ACC_CONSTANTS_UPDATED)) {
				if (UNEXPECTED(zend_update_class_constants(ce) == FAILURE)) {
					ZVAL_UNDEF(EX_VAR(opline->result.var));
					FREE_OP(opline->op2_type, opline->op2.var);
					HANDLE_EXCEPTION();
				}
			}
			if (Z_TYPE_P(value) == IS_CONSTANT_AST) {
				if (UNEXPECTED(zend_update_class_constant(c, constant_name, c->ce) != SUCCESS)) {
					ZVAL_UNDEF(EX_VAR(opline->result.var));
					FREE_OP(opline->op2_type, opline->op2.var);
					HANDLE_EXCEPTION();
				}
			}
			if ((IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST && !is_constant_deprecated) {
				CACHE_POLYMORPHIC_PTR(opline->extended_value, ce, value);
			}
		} else {
			zend_throw_error(NULL, "Undefined constant %s::%s",
				ZSTR_VAL(ce->name), ZSTR_VAL(constant_name));
			ZVAL_UNDEF(EX_VAR(opline->result.var));
			FREE_OP(opline->op2_type, opline->op2.var);
			HANDLE_EXCEPTION();
		}
	} while (0);

	ZVAL_COPY_OR_DUP(EX_VAR(opline->result.var), value);

	FREE_OP(opline->op2_type, opline->op2.var);
	ZEND_VM_NEXT_OPCODE();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_ASSIGN_OBJ_OP_SPEC_VAR_TMPVAR_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *object;
	zval *property;
	zval *value;
	zval *zptr;
	void *_cache_slot[3] = {0};
	void **cache_slot;
	zend_property_info *prop_info;
	zend_object *zobj;
	zend_string *name, *tmp_name;

	SAVE_OPLINE();
	object = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
	property = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);

	do {
		value = get_op_data_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1);

		if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
			if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
				object = Z_REFVAL_P(object);
				goto assign_op_object;
			}
			if (IS_VAR == IS_CV
			 && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
				ZVAL_UNDEFINED_OP1();
			}
			zend_throw_non_object_error(object, property OPLINE_CC EXECUTE_DATA_CC);
			break;
		}

assign_op_object:
		/* here we are sure we are dealing with an object */
		zobj = Z_OBJ_P(object);
		if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
			name = Z_STR_P(property);
		} else {
			name = zval_try_get_tmp_string(property, &tmp_name);
			if (UNEXPECTED(!name)) {
				UNDEF_RESULT();
				break;
			}
		}
		cache_slot = ((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR((opline+1)->extended_value) : _cache_slot;
		if (EXPECTED((zptr = zobj->handlers->get_property_ptr_ptr(zobj, name, BP_VAR_RW, cache_slot)) != NULL)) {
			if (UNEXPECTED(Z_ISERROR_P(zptr))) {
				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
					ZVAL_NULL(EX_VAR(opline->result.var));
				}
			} else {
				zend_reference *ref;

				do {
					if (UNEXPECTED(Z_ISREF_P(zptr))) {
						ref = Z_REF_P(zptr);
						zptr = Z_REFVAL_P(zptr);
						if (UNEXPECTED(ZEND_REF_HAS_TYPE_SOURCES(ref))) {
							zend_binary_assign_op_typed_ref(ref, value OPLINE_CC EXECUTE_DATA_CC);
							break;
						}
					}

					prop_info = (zend_property_info*)CACHED_PTR_EX(cache_slot + 2);
					if (prop_info && ZEND_TYPE_IS_SET(prop_info->type)) {
						/* special case for typed properties */
						zend_binary_assign_op_typed_prop(prop_info, zptr, value OPLINE_CC EXECUTE_DATA_CC);
					} else {
						zend_binary_op(zptr, zptr, value OPLINE_CC);
					}
				} while (0);

				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
					ZVAL_COPY(EX_VAR(opline->result.var), zptr);
				}
			}
		} else {
			zend_assign_op_overloaded_property(zobj, name, cache_slot, value OPLINE_CC EXECUTE_DATA_CC);
		}
		if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
			zend_tmp_string_release(tmp_name);
		}
	} while (0);

	FREE_OP((opline+1)->op1_type, (opline+1)->op1.var);
	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
	/* assign_obj has two opcodes! */
	ZEND_VM_NEXT_OPCODE_EX(1, 2);
}

/* No specialization for op_types (CONST|TMP|VAR|CV, UNUSED|CONST|TMPVAR) */
static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_ASSIGN_DIM_OP_SPEC_VAR_TMPVAR_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *var_ptr;
	zval *value, *container, *dim;
	HashTable *ht;

	SAVE_OPLINE();
	container = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);

	if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
assign_dim_op_array:
		SEPARATE_ARRAY(container);
		ht = Z_ARRVAL_P(container);
assign_dim_op_new_array:
		dim = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
		if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED) {
			var_ptr = zend_hash_next_index_insert(ht, &EG(uninitialized_zval));
			if (UNEXPECTED(!var_ptr)) {
				zend_cannot_add_element();
				goto assign_dim_op_ret_null;
			}
		} else {
			if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
				var_ptr = zend_fetch_dimension_address_inner_RW_CONST(ht, dim EXECUTE_DATA_CC);
			} else {
				var_ptr = zend_fetch_dimension_address_inner_RW(ht, dim EXECUTE_DATA_CC);
			}
			if (UNEXPECTED(!var_ptr)) {
				goto assign_dim_op_ret_null;
			}
		}

		value = get_op_data_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1);

		do {
			if ((IS_TMP_VAR|IS_VAR) != IS_UNUSED && UNEXPECTED(Z_ISREF_P(var_ptr))) {
				zend_reference *ref = Z_REF_P(var_ptr);
				var_ptr = Z_REFVAL_P(var_ptr);
				if (UNEXPECTED(ZEND_REF_HAS_TYPE_SOURCES(ref))) {
					zend_binary_assign_op_typed_ref(ref, value OPLINE_CC EXECUTE_DATA_CC);
					break;
				}
			}
			zend_binary_op(var_ptr, var_ptr, value OPLINE_CC);
		} while (0);

		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
			ZVAL_COPY(EX_VAR(opline->result.var), var_ptr);
		}
		FREE_OP((opline+1)->op1_type, (opline+1)->op1.var);
	} else {
		if (EXPECTED(Z_ISREF_P(container))) {
			container = Z_REFVAL_P(container);
			if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
				goto assign_dim_op_array;
			}
		}

		if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
			zend_object *obj = Z_OBJ_P(container);

			dim = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
			if ((IS_TMP_VAR|IS_VAR) == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
				dim++;
			}
			zend_binary_assign_op_obj_dim(obj, dim OPLINE_CC EXECUTE_DATA_CC);
		} else if (EXPECTED(Z_TYPE_P(container) <= IS_FALSE)) {
			uint8_t old_type;

			if (IS_VAR == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(container) == IS_UNDEF)) {
				ZVAL_UNDEFINED_OP1();
			}
			ht = zend_new_array(8);
			old_type = Z_TYPE_P(container);
			ZVAL_ARR(container, ht);
			if (UNEXPECTED(old_type == IS_FALSE)) {
				GC_ADDREF(ht);
				zend_false_to_array_deprecated();
				if (UNEXPECTED(GC_DELREF(ht) == 0)) {
					zend_array_destroy(ht);
					goto assign_dim_op_ret_null;
				}
			}
			goto assign_dim_op_new_array;
		} else {
			dim = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
			zend_binary_assign_op_dim_slow(container, dim OPLINE_CC EXECUTE_DATA_CC);
assign_dim_op_ret_null:
			FREE_OP((opline+1)->op1_type, (opline+1)->op1.var);
			if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
				ZVAL_NULL(EX_VAR(opline->result.var));
			}
		}
	}

	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
	ZEND_VM_NEXT_OPCODE_EX(1, 2);
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_ASSIGN_OP_SPEC_VAR_TMPVAR_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *var_ptr;
	zval *value;

	SAVE_OPLINE();
	value = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
	var_ptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);

	do {
		if (UNEXPECTED(Z_TYPE_P(var_ptr) == IS_REFERENCE)) {
			zend_reference *ref = Z_REF_P(var_ptr);
			var_ptr = Z_REFVAL_P(var_ptr);
			if (UNEXPECTED(ZEND_REF_HAS_TYPE_SOURCES(ref))) {
				zend_binary_assign_op_typed_ref(ref, value OPLINE_CC EXECUTE_DATA_CC);
				break;
			}
		}
		zend_binary_op(var_ptr, var_ptr, value OPLINE_CC);
	} while (0);

	if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
		ZVAL_COPY(EX_VAR(opline->result.var), var_ptr);
	}

	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_PRE_INC_OBJ_SPEC_VAR_TMPVAR_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *object;
	zval *property;
	zval *zptr;
	void *_cache_slot[3] = {0};
	void **cache_slot;
	zend_property_info *prop_info;
	zend_object *zobj;
	zend_string *name, *tmp_name;

	SAVE_OPLINE();
	object = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
	property = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);

	do {
		if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
			if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
				object = Z_REFVAL_P(object);
				goto pre_incdec_object;
			}
			if (IS_VAR == IS_CV
			 && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
				ZVAL_UNDEFINED_OP1();
			}
			zend_throw_non_object_error(object, property OPLINE_CC EXECUTE_DATA_CC);
			break;
		}

pre_incdec_object:
		/* here we are sure we are dealing with an object */
		zobj = Z_OBJ_P(object);
		if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
			name = Z_STR_P(property);
		} else {
			name = zval_try_get_tmp_string(property, &tmp_name);
			if (UNEXPECTED(!name)) {
				UNDEF_RESULT();
				break;
			}
		}
		cache_slot = ((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(opline->extended_value) : _cache_slot;
		if (EXPECTED((zptr = zobj->handlers->get_property_ptr_ptr(zobj, name, BP_VAR_RW, cache_slot)) != NULL)) {
			if (UNEXPECTED(Z_ISERROR_P(zptr))) {
				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
					ZVAL_NULL(EX_VAR(opline->result.var));
				}
			} else {
				prop_info = (zend_property_info *) CACHED_PTR_EX(cache_slot + 2);
				zend_pre_incdec_property_zval(zptr,
					prop_info && ZEND_TYPE_IS_SET(prop_info->type) ? prop_info : NULL OPLINE_CC EXECUTE_DATA_CC);
			}
		} else {
			zend_pre_incdec_overloaded_property(zobj, name, cache_slot OPLINE_CC EXECUTE_DATA_CC);
		}
		if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
			zend_tmp_string_release(tmp_name);
		}
	} while (0);

	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_POST_INC_OBJ_SPEC_VAR_TMPVAR_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *object;
	zval *property;
	zval *zptr;
	void *_cache_slot[3] = {0};
	void **cache_slot;
	zend_property_info *prop_info;
	zend_object *zobj;
	zend_string *name, *tmp_name;

	SAVE_OPLINE();
	object = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
	property = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);

	do {
		if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
			if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
				object = Z_REFVAL_P(object);
				goto post_incdec_object;
			}
			if (IS_VAR == IS_CV
			 && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
				ZVAL_UNDEFINED_OP1();
			}
			zend_throw_non_object_error(object, property OPLINE_CC EXECUTE_DATA_CC);
			break;
		}

post_incdec_object:
		/* here we are sure we are dealing with an object */
		zobj = Z_OBJ_P(object);
		if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
			name = Z_STR_P(property);
		} else {
			name = zval_try_get_tmp_string(property, &tmp_name);
			if (UNEXPECTED(!name)) {
				ZVAL_UNDEF(EX_VAR(opline->result.var));
				break;
			}
		}
		cache_slot = ((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(opline->extended_value) : _cache_slot;
		if (EXPECTED((zptr = zobj->handlers->get_property_ptr_ptr(zobj, name, BP_VAR_RW, cache_slot)) != NULL)) {
			if (UNEXPECTED(Z_ISERROR_P(zptr))) {
				ZVAL_NULL(EX_VAR(opline->result.var));
			} else {
				prop_info = (zend_property_info*)CACHED_PTR_EX(cache_slot + 2);
				zend_post_incdec_property_zval(zptr,
					prop_info && ZEND_TYPE_IS_SET(prop_info->type) ? prop_info : NULL OPLINE_CC EXECUTE_DATA_CC);
			}
		} else {
			zend_post_incdec_overloaded_property(zobj, name, cache_slot OPLINE_CC EXECUTE_DATA_CC);
		}
		if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
			zend_tmp_string_release(tmp_name);
		}
	} while (0);

	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_FETCH_DIM_W_SPEC_VAR_TMPVAR_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *container;

	SAVE_OPLINE();
	container = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
	zend_fetch_dimension_address_W(container, _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC), (IS_TMP_VAR|IS_VAR) OPLINE_CC EXECUTE_DATA_CC);
	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
	if (IS_VAR == IS_VAR) {
		FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
	}
	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_FETCH_DIM_RW_SPEC_VAR_TMPVAR_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *container;

	SAVE_OPLINE();
	container = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
	zend_fetch_dimension_address_RW(container, _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC), (IS_TMP_VAR|IS_VAR) OPLINE_CC EXECUTE_DATA_CC);
	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
	if (IS_VAR == IS_VAR) {
		FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
	}
	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_TMPVAR_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
#if 0
	USE_OPLINE
#endif

	if (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) {
		if ((IS_VAR & (IS_CONST|IS_TMP_VAR))) {
			ZEND_VM_TAIL_CALL(zend_use_tmp_in_write_context_helper_SPEC_TAILCALL(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
		}
		ZEND_VM_TAIL_CALL(ZEND_FETCH_DIM_W_SPEC_VAR_TMPVAR_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
	} else {
		if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED) {
			ZEND_VM_TAIL_CALL(zend_use_undef_in_read_context_helper_SPEC_TAILCALL(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
		}
		ZEND_VM_TAIL_CALL(ZEND_FETCH_DIM_R_SPEC_TMPVAR_TMPVAR_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
	}
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_FETCH_DIM_UNSET_SPEC_VAR_TMPVAR_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *container;

	SAVE_OPLINE();
	container = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
	zend_fetch_dimension_address_UNSET(container, _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC), (IS_TMP_VAR|IS_VAR) OPLINE_CC EXECUTE_DATA_CC);
	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
	if (IS_VAR == IS_VAR) {
		FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
	}
	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_FETCH_OBJ_W_SPEC_VAR_TMPVAR_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *property, *container, *result;

	SAVE_OPLINE();

	container = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
	property = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
	result = EX_VAR(opline->result.var);
	zend_fetch_property_address(
		result, container, IS_VAR, property, (IS_TMP_VAR|IS_VAR),
		(((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(opline->extended_value & ~ZEND_FETCH_OBJ_FLAGS) : NULL),
		BP_VAR_W, opline->extended_value, NULL OPLINE_CC EXECUTE_DATA_CC);
	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
	if (IS_VAR == IS_VAR) {
		FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
	}
	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_FETCH_OBJ_RW_SPEC_VAR_TMPVAR_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *property, *container, *result;

	SAVE_OPLINE();
	container = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
	property = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
	result = EX_VAR(opline->result.var);
	zend_fetch_property_address(result, container, IS_VAR, property, (IS_TMP_VAR|IS_VAR), (((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL), BP_VAR_RW, 0, NULL OPLINE_CC EXECUTE_DATA_CC);
	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
	if (IS_VAR == IS_VAR) {
		FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
	}
	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_FETCH_OBJ_FUNC_ARG_SPEC_VAR_TMPVAR_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
#if 0
	USE_OPLINE
#endif

	if (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) {
		/* Behave like FETCH_OBJ_W */
		if ((IS_VAR & (IS_CONST|IS_TMP_VAR))) {
			ZEND_VM_TAIL_CALL(zend_use_tmp_in_write_context_helper_SPEC_TAILCALL(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
		}
		ZEND_VM_TAIL_CALL(ZEND_FETCH_OBJ_W_SPEC_VAR_TMPVAR_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
	} else {
		ZEND_VM_TAIL_CALL(ZEND_FETCH_OBJ_R_SPEC_TMPVAR_TMPVAR_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
	}
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_FETCH_OBJ_UNSET_SPEC_VAR_TMPVAR_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *container, *property, *result;

	SAVE_OPLINE();
	container = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
	property = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
	result = EX_VAR(opline->result.var);
	zend_fetch_property_address(result, container, IS_VAR, property, (IS_TMP_VAR|IS_VAR), (((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL), BP_VAR_UNSET, 0, NULL OPLINE_CC EXECUTE_DATA_CC);
	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
	if (IS_VAR == IS_VAR) {
		FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
	}
	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_FETCH_LIST_W_SPEC_VAR_TMPVAR_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *container, *dim;

	SAVE_OPLINE();
	container = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
	dim = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);

	if (IS_VAR == IS_VAR
		&& Z_TYPE_P(EX_VAR(opline->op1.var)) != IS_INDIRECT
		&& UNEXPECTED(!Z_ISREF_P(container))
	) {
		zend_error(E_NOTICE, "Attempting to set reference to non referenceable value");
		zend_fetch_dimension_address_LIST_r(container, dim, (IS_TMP_VAR|IS_VAR) OPLINE_CC EXECUTE_DATA_CC);
	} else {
		zend_fetch_dimension_address_W(container, dim, (IS_TMP_VAR|IS_VAR) OPLINE_CC EXECUTE_DATA_CC);
	}

	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_CONST_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *object, *value, tmp;
	zend_object *zobj;
	zend_string *name, *tmp_name;
	zend_refcounted *garbage = NULL;

	SAVE_OPLINE();
	object = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
	value = RT_CONSTANT((opline+1), (opline+1)->op1);

	if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
		if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
			object = Z_REFVAL_P(object);
			goto assign_object;
		}
		zend_throw_non_object_error(object, _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC) OPLINE_CC EXECUTE_DATA_CC);
		value = &EG(uninitialized_zval);
		goto free_and_exit_assign_obj;
	}

assign_object:
	zobj = Z_OBJ_P(object);
	if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
		if (EXPECTED(zobj->ce == CACHED_PTR(opline->extended_value))) {
			void **cache_slot = CACHE_ADDR(opline->extended_value);
			uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
			zval *property_val;
			zend_property_info *prop_info;

			if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
				prop_info = (zend_property_info*) CACHED_PTR_EX(cache_slot + 2);

assign_obj_simple:
				property_val = OBJ_PROP(zobj, prop_offset);
				if (Z_TYPE_P(property_val) != IS_UNDEF) {
					if (prop_info != NULL) {
						value = zend_assign_to_typed_prop(prop_info, property_val, value, &garbage EXECUTE_DATA_CC);
						goto free_and_exit_assign_obj;
					} else {
fast_assign_obj:
						value = zend_assign_to_variable_ex(property_val, value, IS_CONST, EX_USES_STRICT_TYPES(), &garbage);
						if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
							ZVAL_COPY(EX_VAR(opline->result.var), value);
						}
						goto exit_assign_obj;
					}
				}
			} else if (EXPECTED(IS_DYNAMIC_PROPERTY_OFFSET(prop_offset))) {
				name = Z_STR_P(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC));
				if (UNEXPECTED(zend_lazy_object_must_init(zobj))) {
					zobj = zend_lazy_object_init(zobj);
					if (!zobj) {
						value = &EG(uninitialized_zval);
						goto free_and_exit_assign_obj;
					}
				}
				if (!zobj->ce->__set && (zobj->ce->ce_flags & ZEND_ACC_ALLOW_DYNAMIC_PROPERTIES)) {
					rebuild_object_properties_internal(zobj);
				}
				if (EXPECTED(zobj->properties != NULL)) {
					if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
						if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
							GC_DELREF(zobj->properties);
						}
						zobj->properties = zend_array_dup(zobj->properties);
					}
					property_val = zend_hash_find_known_hash(zobj->properties, name);
					if (property_val) {
						goto fast_assign_obj;
					}
				}

				if (!zobj->ce->__set && (zobj->ce->ce_flags & ZEND_ACC_ALLOW_DYNAMIC_PROPERTIES)) {
					if (IS_CONST == IS_CONST) {
						if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
							Z_ADDREF_P(value);
						}
					} else if (IS_CONST != IS_TMP_VAR) {
						if (Z_ISREF_P(value)) {
							if (IS_CONST == IS_VAR) {
								zend_reference *ref = Z_REF_P(value);
								if (GC_DELREF(ref) == 0) {
									ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
									efree_size(ref, sizeof(zend_reference));
									value = &tmp;
								} else {
									value = Z_REFVAL_P(value);
									Z_TRY_ADDREF_P(value);
								}
							} else {
								value = Z_REFVAL_P(value);
								Z_TRY_ADDREF_P(value);
							}
						} else if (IS_CONST == IS_CV) {
							Z_TRY_ADDREF_P(value);
						}
					}
					zend_hash_add_new(zobj->properties, name, value);
					if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
						ZVAL_COPY(EX_VAR(opline->result.var), value);
					}
					goto exit_assign_obj;
				}
			} else {
				ZEND_ASSERT(IS_HOOKED_PROPERTY_OFFSET(prop_offset));
				if (ZEND_IS_PROPERTY_HOOK_SIMPLE_WRITE(prop_offset)) {
					prop_info = CACHED_PTR_EX(cache_slot + 2);
					prop_offset = prop_info->offset;
					if (!ZEND_TYPE_IS_SET(prop_info->type)) {
						prop_info = NULL;
					}
					goto assign_obj_simple;
				}
				/* Fall through to write_property for hooks. */
			}
		}
		name = Z_STR_P(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC));
	} else {
		name = zval_try_get_tmp_string(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC), &tmp_name);
		if (UNEXPECTED(!name)) {


			UNDEF_RESULT();
			goto exit_assign_obj;
		}
	}

	if (IS_CONST == IS_CV || IS_CONST == IS_VAR) {
		ZVAL_DEREF(value);
	}

	value = zobj->handlers->write_property(zobj, name, value, ((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);

	if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
		zend_tmp_string_release(tmp_name);
	}

free_and_exit_assign_obj:
	if (UNEXPECTED(RETURN_VALUE_USED(opline)) && value) {
		ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
	}


exit_assign_obj:
	if (garbage) {
		GC_DTOR_NO_REF(garbage);
	}
	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
	/* assign_obj has two opcodes! */
	ZEND_VM_NEXT_OPCODE_EX(1, 2);
}

/* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CONST|VAR) */
static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_TMP_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *object, *value, tmp;
	zend_object *zobj;
	zend_string *name, *tmp_name;
	zend_refcounted *garbage = NULL;

	SAVE_OPLINE();
	object = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
	value = _get_zval_ptr_tmp((opline+1)->op1.var EXECUTE_DATA_CC);

	if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
		if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
			object = Z_REFVAL_P(object);
			goto assign_object;
		}
		zend_throw_non_object_error(object, _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC) OPLINE_CC EXECUTE_DATA_CC);
		value = &EG(uninitialized_zval);
		goto free_and_exit_assign_obj;
	}

assign_object:
	zobj = Z_OBJ_P(object);
	if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
		if (EXPECTED(zobj->ce == CACHED_PTR(opline->extended_value))) {
			void **cache_slot = CACHE_ADDR(opline->extended_value);
			uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
			zval *property_val;
			zend_property_info *prop_info;

			if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
				prop_info = (zend_property_info*) CACHED_PTR_EX(cache_slot + 2);

assign_obj_simple:
				property_val = OBJ_PROP(zobj, prop_offset);
				if (Z_TYPE_P(property_val) != IS_UNDEF) {
					if (prop_info != NULL) {
						value = zend_assign_to_typed_prop(prop_info, property_val, value, &garbage EXECUTE_DATA_CC);
						goto free_and_exit_assign_obj;
					} else {
fast_assign_obj:
						value = zend_assign_to_variable_ex(property_val, value, IS_TMP_VAR, EX_USES_STRICT_TYPES(), &garbage);
						if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
							ZVAL_COPY(EX_VAR(opline->result.var), value);
						}
						goto exit_assign_obj;
					}
				}
			} else if (EXPECTED(IS_DYNAMIC_PROPERTY_OFFSET(prop_offset))) {
				name = Z_STR_P(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC));
				if (UNEXPECTED(zend_lazy_object_must_init(zobj))) {
					zobj = zend_lazy_object_init(zobj);
					if (!zobj) {
						value = &EG(uninitialized_zval);
						goto free_and_exit_assign_obj;
					}
				}
				if (!zobj->ce->__set && (zobj->ce->ce_flags & ZEND_ACC_ALLOW_DYNAMIC_PROPERTIES)) {
					rebuild_object_properties_internal(zobj);
				}
				if (EXPECTED(zobj->properties != NULL)) {
					if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
						if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
							GC_DELREF(zobj->properties);
						}
						zobj->properties = zend_array_dup(zobj->properties);
					}
					property_val = zend_hash_find_known_hash(zobj->properties, name);
					if (property_val) {
						goto fast_assign_obj;
					}
				}

				if (!zobj->ce->__set && (zobj->ce->ce_flags & ZEND_ACC_ALLOW_DYNAMIC_PROPERTIES)) {
					if (IS_TMP_VAR == IS_CONST) {
						if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
							Z_ADDREF_P(value);
						}
					} else if (IS_TMP_VAR != IS_TMP_VAR) {
						if (Z_ISREF_P(value)) {
							if (IS_TMP_VAR == IS_VAR) {
								zend_reference *ref = Z_REF_P(value);
								if (GC_DELREF(ref) == 0) {
									ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
									efree_size(ref, sizeof(zend_reference));
									value = &tmp;
								} else {
									value = Z_REFVAL_P(value);
									Z_TRY_ADDREF_P(value);
								}
							} else {
								value = Z_REFVAL_P(value);
								Z_TRY_ADDREF_P(value);
							}
						} else if (IS_TMP_VAR == IS_CV) {
							Z_TRY_ADDREF_P(value);
						}
					}
					zend_hash_add_new(zobj->properties, name, value);
					if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
						ZVAL_COPY(EX_VAR(opline->result.var), value);
					}
					goto exit_assign_obj;
				}
			} else {
				ZEND_ASSERT(IS_HOOKED_PROPERTY_OFFSET(prop_offset));
				if (ZEND_IS_PROPERTY_HOOK_SIMPLE_WRITE(prop_offset)) {
					prop_info = CACHED_PTR_EX(cache_slot + 2);
					prop_offset = prop_info->offset;
					if (!ZEND_TYPE_IS_SET(prop_info->type)) {
						prop_info = NULL;
					}
					goto assign_obj_simple;
				}
				/* Fall through to write_property for hooks. */
			}
		}
		name = Z_STR_P(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC));
	} else {
		name = zval_try_get_tmp_string(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC), &tmp_name);
		if (UNEXPECTED(!name)) {
			zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
			UNDEF_RESULT();
			goto exit_assign_obj;
		}
	}

	if (IS_TMP_VAR == IS_CV || IS_TMP_VAR == IS_VAR) {
		ZVAL_DEREF(value);
	}

	value = zobj->handlers->write_property(zobj, name, value, ((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);

	if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
		zend_tmp_string_release(tmp_name);
	}

free_and_exit_assign_obj:
	if (UNEXPECTED(RETURN_VALUE_USED(opline)) && value) {
		ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
	}
	zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
exit_assign_obj:
	if (garbage) {
		GC_DTOR_NO_REF(garbage);
	}
	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
	/* assign_obj has two opcodes! */
	ZEND_VM_NEXT_OPCODE_EX(1, 2);
}

/* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CONST|VAR) */
static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_VAR_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *object, *value, tmp;
	zend_object *zobj;
	zend_string *name, *tmp_name;
	zend_refcounted *garbage = NULL;

	SAVE_OPLINE();
	object = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
	value = _get_zval_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);

	if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
		if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
			object = Z_REFVAL_P(object);
			goto assign_object;
		}
		zend_throw_non_object_error(object, _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC) OPLINE_CC EXECUTE_DATA_CC);
		value = &EG(uninitialized_zval);
		goto free_and_exit_assign_obj;
	}

assign_object:
	zobj = Z_OBJ_P(object);
	if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
		if (EXPECTED(zobj->ce == CACHED_PTR(opline->extended_value))) {
			void **cache_slot = CACHE_ADDR(opline->extended_value);
			uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
			zval *property_val;
			zend_property_info *prop_info;

			if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
				prop_info = (zend_property_info*) CACHED_PTR_EX(cache_slot + 2);

assign_obj_simple:
				property_val = OBJ_PROP(zobj, prop_offset);
				if (Z_TYPE_P(property_val) != IS_UNDEF) {
					if (prop_info != NULL) {
						value = zend_assign_to_typed_prop(prop_info, property_val, value, &garbage EXECUTE_DATA_CC);
						goto free_and_exit_assign_obj;
					} else {
fast_assign_obj:
						value = zend_assign_to_variable_ex(property_val, value, IS_VAR, EX_USES_STRICT_TYPES(), &garbage);
						if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
							ZVAL_COPY(EX_VAR(opline->result.var), value);
						}
						goto exit_assign_obj;
					}
				}
			} else if (EXPECTED(IS_DYNAMIC_PROPERTY_OFFSET(prop_offset))) {
				name = Z_STR_P(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC));
				if (UNEXPECTED(zend_lazy_object_must_init(zobj))) {
					zobj = zend_lazy_object_init(zobj);
					if (!zobj) {
						value = &EG(uninitialized_zval);
						goto free_and_exit_assign_obj;
					}
				}
				if (!zobj->ce->__set && (zobj->ce->ce_flags & ZEND_ACC_ALLOW_DYNAMIC_PROPERTIES)) {
					rebuild_object_properties_internal(zobj);
				}
				if (EXPECTED(zobj->properties != NULL)) {
					if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
						if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
							GC_DELREF(zobj->properties);
						}
						zobj->properties = zend_array_dup(zobj->properties);
					}
					property_val = zend_hash_find_known_hash(zobj->properties, name);
					if (property_val) {
						goto fast_assign_obj;
					}
				}

				if (!zobj->ce->__set && (zobj->ce->ce_flags & ZEND_ACC_ALLOW_DYNAMIC_PROPERTIES)) {
					if (IS_VAR == IS_CONST) {
						if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
							Z_ADDREF_P(value);
						}
					} else if (IS_VAR != IS_TMP_VAR) {
						if (Z_ISREF_P(value)) {
							if (IS_VAR == IS_VAR) {
								zend_reference *ref = Z_REF_P(value);
								if (GC_DELREF(ref) == 0) {
									ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
									efree_size(ref, sizeof(zend_reference));
									value = &tmp;
								} else {
									value = Z_REFVAL_P(value);
									Z_TRY_ADDREF_P(value);
								}
							} else {
								value = Z_REFVAL_P(value);
								Z_TRY_ADDREF_P(value);
							}
						} else if (IS_VAR == IS_CV) {
							Z_TRY_ADDREF_P(value);
						}
					}
					zend_hash_add_new(zobj->properties, name, value);
					if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
						ZVAL_COPY(EX_VAR(opline->result.var), value);
					}
					goto exit_assign_obj;
				}
			} else {
				ZEND_ASSERT(IS_HOOKED_PROPERTY_OFFSET(prop_offset));
				if (ZEND_IS_PROPERTY_HOOK_SIMPLE_WRITE(prop_offset)) {
					prop_info = CACHED_PTR_EX(cache_slot + 2);
					prop_offset = prop_info->offset;
					if (!ZEND_TYPE_IS_SET(prop_info->type)) {
						prop_info = NULL;
					}
					goto assign_obj_simple;
				}
				/* Fall through to write_property for hooks. */
			}
		}
		name = Z_STR_P(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC));
	} else {
		name = zval_try_get_tmp_string(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC), &tmp_name);
		if (UNEXPECTED(!name)) {
			zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
			UNDEF_RESULT();
			goto exit_assign_obj;
		}
	}

	if (IS_VAR == IS_CV || IS_VAR == IS_VAR) {
		ZVAL_DEREF(value);
	}

	value = zobj->handlers->write_property(zobj, name, value, ((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);

	if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
		zend_tmp_string_release(tmp_name);
	}

free_and_exit_assign_obj:
	if (UNEXPECTED(RETURN_VALUE_USED(opline)) && value) {
		ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
	}
	zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
exit_assign_obj:
	if (garbage) {
		GC_DTOR_NO_REF(garbage);
	}
	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
	/* assign_obj has two opcodes! */
	ZEND_VM_NEXT_OPCODE_EX(1, 2);
}

/* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CONST|VAR) */
static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_CV_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *object, *value, tmp;
	zend_object *zobj;
	zend_string *name, *tmp_name;
	zend_refcounted *garbage = NULL;

	SAVE_OPLINE();
	object = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
	value = _get_zval_ptr_cv_BP_VAR_R((opline+1)->op1.var EXECUTE_DATA_CC);

	if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
		if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
			object = Z_REFVAL_P(object);
			goto assign_object;
		}
		zend_throw_non_object_error(object, _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC) OPLINE_CC EXECUTE_DATA_CC);
		value = &EG(uninitialized_zval);
		goto free_and_exit_assign_obj;
	}

assign_object:
	zobj = Z_OBJ_P(object);
	if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
		if (EXPECTED(zobj->ce == CACHED_PTR(opline->extended_value))) {
			void **cache_slot = CACHE_ADDR(opline->extended_value);
			uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
			zval *property_val;
			zend_property_info *prop_info;

			if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
				prop_info = (zend_property_info*) CACHED_PTR_EX(cache_slot + 2);

assign_obj_simple:
				property_val = OBJ_PROP(zobj, prop_offset);
				if (Z_TYPE_P(property_val) != IS_UNDEF) {
					if (prop_info != NULL) {
						value = zend_assign_to_typed_prop(prop_info, property_val, value, &garbage EXECUTE_DATA_CC);
						goto free_and_exit_assign_obj;
					} else {
fast_assign_obj:
						value = zend_assign_to_variable_ex(property_val, value, IS_CV, EX_USES_STRICT_TYPES(), &garbage);
						if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
							ZVAL_COPY(EX_VAR(opline->result.var), value);
						}
						goto exit_assign_obj;
					}
				}
			} else if (EXPECTED(IS_DYNAMIC_PROPERTY_OFFSET(prop_offset))) {
				name = Z_STR_P(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC));
				if (UNEXPECTED(zend_lazy_object_must_init(zobj))) {
					zobj = zend_lazy_object_init(zobj);
					if (!zobj) {
						value = &EG(uninitialized_zval);
						goto free_and_exit_assign_obj;
					}
				}
				if (!zobj->ce->__set && (zobj->ce->ce_flags & ZEND_ACC_ALLOW_DYNAMIC_PROPERTIES)) {
					rebuild_object_properties_internal(zobj);
				}
				if (EXPECTED(zobj->properties != NULL)) {
					if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
						if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
							GC_DELREF(zobj->properties);
						}
						zobj->properties = zend_array_dup(zobj->properties);
					}
					property_val = zend_hash_find_known_hash(zobj->properties, name);
					if (property_val) {
						goto fast_assign_obj;
					}
				}

				if (!zobj->ce->__set && (zobj->ce->ce_flags & ZEND_ACC_ALLOW_DYNAMIC_PROPERTIES)) {
					if (IS_CV == IS_CONST) {
						if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
							Z_ADDREF_P(value);
						}
					} else if (IS_CV != IS_TMP_VAR) {
						if (Z_ISREF_P(value)) {
							if (IS_CV == IS_VAR) {
								zend_reference *ref = Z_REF_P(value);
								if (GC_DELREF(ref) == 0) {
									ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
									efree_size(ref, sizeof(zend_reference));
									value = &tmp;
								} else {
									value = Z_REFVAL_P(value);
									Z_TRY_ADDREF_P(value);
								}
							} else {
								value = Z_REFVAL_P(value);
								Z_TRY_ADDREF_P(value);
							}
						} else if (IS_CV == IS_CV) {
							Z_TRY_ADDREF_P(value);
						}
					}
					zend_hash_add_new(zobj->properties, name, value);
					if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
						ZVAL_COPY(EX_VAR(opline->result.var), value);
					}
					goto exit_assign_obj;
				}
			} else {
				ZEND_ASSERT(IS_HOOKED_PROPERTY_OFFSET(prop_offset));
				if (ZEND_IS_PROPERTY_HOOK_SIMPLE_WRITE(prop_offset)) {
					prop_info = CACHED_PTR_EX(cache_slot + 2);
					prop_offset = prop_info->offset;
					if (!ZEND_TYPE_IS_SET(prop_info->type)) {
						prop_info = NULL;
					}
					goto assign_obj_simple;
				}
				/* Fall through to write_property for hooks. */
			}
		}
		name = Z_STR_P(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC));
	} else {
		name = zval_try_get_tmp_string(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC), &tmp_name);
		if (UNEXPECTED(!name)) {


			UNDEF_RESULT();
			goto exit_assign_obj;
		}
	}

	if (IS_CV == IS_CV || IS_CV == IS_VAR) {
		ZVAL_DEREF(value);
	}

	value = zobj->handlers->write_property(zobj, name, value, ((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);

	if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
		zend_tmp_string_release(tmp_name);
	}

free_and_exit_assign_obj:
	if (UNEXPECTED(RETURN_VALUE_USED(opline)) && value) {
		ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
	}


exit_assign_obj:
	if (garbage) {
		GC_DTOR_NO_REF(garbage);
	}
	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
	/* assign_obj has two opcodes! */
	ZEND_VM_NEXT_OPCODE_EX(1, 2);
}

/* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CONST|VAR) */
static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_DATA_CONST_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *object_ptr, *orig_object_ptr;
	zval *value;
	zval *variable_ptr;
	zval *dim;
	zend_refcounted *garbage = NULL;

	SAVE_OPLINE();
	orig_object_ptr = object_ptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);

	if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
try_assign_dim_array:
		SEPARATE_ARRAY(object_ptr);
		if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED) {
			value = RT_CONSTANT((opline+1), (opline+1)->op1);
			if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
				HashTable *ht = Z_ARRVAL_P(object_ptr);
				if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE)) {
					GC_ADDREF(ht);
				}
				value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
				if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE) && !GC_DELREF(ht)) {
					zend_array_destroy(ht);
					goto assign_dim_error;
				}
			}
			if (IS_CONST == IS_CV || IS_CONST == IS_VAR) {
				ZVAL_DEREF(value);
			}
			value = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), value);
			if (UNEXPECTED(value == NULL)) {
				zend_cannot_add_element();
				goto assign_dim_error;
			} else if (IS_CONST == IS_CV) {
				if (Z_REFCOUNTED_P(value)) {
					Z_ADDREF_P(value);
				}
			} else if (IS_CONST == IS_VAR) {
				zval *free_op_data = EX_VAR((opline+1)->op1.var);
				if (Z_ISREF_P(free_op_data)) {
					if (Z_REFCOUNTED_P(value)) {
						Z_ADDREF_P(value);
					}
					zval_ptr_dtor_nogc(free_op_data);
				}
			} else if (IS_CONST == IS_CONST) {
				if (UNEXPECTED(Z_REFCOUNTED_P(value))) {
					Z_ADDREF_P(value);
				}
			}
		} else {
			dim = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
			if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
				variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
			} else {
				variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
			}
			if (UNEXPECTED(variable_ptr == NULL)) {
				goto assign_dim_error;
			}
			value = RT_CONSTANT((opline+1), (opline+1)->op1);
			value = zend_assign_to_variable_ex(variable_ptr, value, IS_CONST, EX_USES_STRICT_TYPES(), &garbage);
		}
		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
			ZVAL_COPY(EX_VAR(opline->result.var), value);
		}
		if (garbage) {
			GC_DTOR_NO_REF(garbage);
		}
	} else {
		if (EXPECTED(Z_ISREF_P(object_ptr))) {
			object_ptr = Z_REFVAL_P(object_ptr);
			if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
				goto try_assign_dim_array;
			}
		}
		if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) {
			zend_object *obj = Z_OBJ_P(object_ptr);

			GC_ADDREF(obj);
			dim = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
			if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_ISUNDEF_P(dim))) {
				dim = ZVAL_UNDEFINED_OP2();
			} else if ((IS_TMP_VAR|IS_VAR) == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
				dim++;
			}

			value = RT_CONSTANT((opline+1), (opline+1)->op1);
			if (IS_CONST == IS_CV && UNEXPECTED(Z_ISUNDEF_P(value))) {
				value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
			} else if (IS_CONST & (IS_CV|IS_VAR)) {
				ZVAL_DEREF(value);
			}

			zend_assign_to_object_dim(obj, dim, value OPLINE_CC EXECUTE_DATA_CC);


			if (UNEXPECTED(GC_DELREF(obj) == 0)) {
				zend_objects_store_del(obj);
			}
		} else if (EXPECTED(Z_TYPE_P(object_ptr) == IS_STRING)) {
			if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED) {
				zend_use_new_element_for_string();


				UNDEF_RESULT();
			} else {
				dim = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
				value = RT_CONSTANT((opline+1), (opline+1)->op1);
				zend_assign_to_string_offset(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC);


			}
		} else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
			if (Z_ISREF_P(orig_object_ptr)
			 && ZEND_REF_HAS_TYPE_SOURCES(Z_REF_P(orig_object_ptr))
			 && !zend_verify_ref_array_assignable(Z_REF_P(orig_object_ptr))) {
				dim = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);


				UNDEF_RESULT();
			} else {
				HashTable *ht = zend_new_array(8);
				uint8_t old_type = Z_TYPE_P(object_ptr);

				ZVAL_ARR(object_ptr, ht);
				if (UNEXPECTED(old_type == IS_FALSE)) {
					GC_ADDREF(ht);
					zend_false_to_array_deprecated();
					if (UNEXPECTED(GC_DELREF(ht) == 0)) {
						zend_array_destroy(ht);
						goto assign_dim_error;
					}
				}
				goto try_assign_dim_array;
			}
		} else {
			zend_use_scalar_as_array();
			dim = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
assign_dim_error:


			if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
				ZVAL_NULL(EX_VAR(opline->result.var));
			}
		}
	}
	if ((IS_TMP_VAR|IS_VAR) != IS_UNUSED) {
		zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
	}
	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
	/* assign_dim has two opcodes! */
	ZEND_VM_NEXT_OPCODE_EX(1, 2);
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_DATA_TMP_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *object_ptr, *orig_object_ptr;
	zval *value;
	zval *variable_ptr;
	zval *dim;
	zend_refcounted *garbage = NULL;

	SAVE_OPLINE();
	orig_object_ptr = object_ptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);

	if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
try_assign_dim_array:
		SEPARATE_ARRAY(object_ptr);
		if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED) {
			value = _get_zval_ptr_tmp((opline+1)->op1.var EXECUTE_DATA_CC);
			if (IS_TMP_VAR == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
				HashTable *ht = Z_ARRVAL_P(object_ptr);
				if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE)) {
					GC_ADDREF(ht);
				}
				value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
				if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE) && !GC_DELREF(ht)) {
					zend_array_destroy(ht);
					goto assign_dim_error;
				}
			}
			if (IS_TMP_VAR == IS_CV || IS_TMP_VAR == IS_VAR) {
				ZVAL_DEREF(value);
			}
			value = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), value);
			if (UNEXPECTED(value == NULL)) {
				zend_cannot_add_element();
				goto assign_dim_error;
			} else if (IS_TMP_VAR == IS_CV) {
				if (Z_REFCOUNTED_P(value)) {
					Z_ADDREF_P(value);
				}
			} else if (IS_TMP_VAR == IS_VAR) {
				zval *free_op_data = EX_VAR((opline+1)->op1.var);
				if (Z_ISREF_P(free_op_data)) {
					if (Z_REFCOUNTED_P(value)) {
						Z_ADDREF_P(value);
					}
					zval_ptr_dtor_nogc(free_op_data);
				}
			} else if (IS_TMP_VAR == IS_CONST) {
				if (UNEXPECTED(Z_REFCOUNTED_P(value))) {
					Z_ADDREF_P(value);
				}
			}
		} else {
			dim = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
			if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
				variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
			} else {
				variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
			}
			if (UNEXPECTED(variable_ptr == NULL)) {
				goto assign_dim_error;
			}
			value = _get_zval_ptr_tmp((opline+1)->op1.var EXECUTE_DATA_CC);
			value = zend_assign_to_variable_ex(variable_ptr, value, IS_TMP_VAR, EX_USES_STRICT_TYPES(), &garbage);
		}
		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
			ZVAL_COPY(EX_VAR(opline->result.var), value);
		}
		if (garbage) {
			GC_DTOR_NO_REF(garbage);
		}
	} else {
		if (EXPECTED(Z_ISREF_P(object_ptr))) {
			object_ptr = Z_REFVAL_P(object_ptr);
			if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
				goto try_assign_dim_array;
			}
		}
		if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) {
			zend_object *obj = Z_OBJ_P(object_ptr);

			GC_ADDREF(obj);
			dim = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
			if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_ISUNDEF_P(dim))) {
				dim = ZVAL_UNDEFINED_OP2();
			} else if ((IS_TMP_VAR|IS_VAR) == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
				dim++;
			}

			value = _get_zval_ptr_tmp((opline+1)->op1.var EXECUTE_DATA_CC);
			if (IS_TMP_VAR == IS_CV && UNEXPECTED(Z_ISUNDEF_P(value))) {
				value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
			} else if (IS_TMP_VAR & (IS_CV|IS_VAR)) {
				ZVAL_DEREF(value);
			}

			zend_assign_to_object_dim(obj, dim, value OPLINE_CC EXECUTE_DATA_CC);

			zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
			if (UNEXPECTED(GC_DELREF(obj) == 0)) {
				zend_objects_store_del(obj);
			}
		} else if (EXPECTED(Z_TYPE_P(object_ptr) == IS_STRING)) {
			if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED) {
				zend_use_new_element_for_string();
				zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
				UNDEF_RESULT();
			} else {
				dim = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
				value = _get_zval_ptr_tmp((opline+1)->op1.var EXECUTE_DATA_CC);
				zend_assign_to_string_offset(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC);
				zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
			}
		} else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
			if (Z_ISREF_P(orig_object_ptr)
			 && ZEND_REF_HAS_TYPE_SOURCES(Z_REF_P(orig_object_ptr))
			 && !zend_verify_ref_array_assignable(Z_REF_P(orig_object_ptr))) {
				dim = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
				zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
				UNDEF_RESULT();
			} else {
				HashTable *ht = zend_new_array(8);
				uint8_t old_type = Z_TYPE_P(object_ptr);

				ZVAL_ARR(object_ptr, ht);
				if (UNEXPECTED(old_type == IS_FALSE)) {
					GC_ADDREF(ht);
					zend_false_to_array_deprecated();
					if (UNEXPECTED(GC_DELREF(ht) == 0)) {
						zend_array_destroy(ht);
						goto assign_dim_error;
					}
				}
				goto try_assign_dim_array;
			}
		} else {
			zend_use_scalar_as_array();
			dim = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
assign_dim_error:
			zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
			if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
				ZVAL_NULL(EX_VAR(opline->result.var));
			}
		}
	}
	if ((IS_TMP_VAR|IS_VAR) != IS_UNUSED) {
		zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
	}
	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
	/* assign_dim has two opcodes! */
	ZEND_VM_NEXT_OPCODE_EX(1, 2);
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_DATA_VAR_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *object_ptr, *orig_object_ptr;
	zval *value;
	zval *variable_ptr;
	zval *dim;
	zend_refcounted *garbage = NULL;

	SAVE_OPLINE();
	orig_object_ptr = object_ptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);

	if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
try_assign_dim_array:
		SEPARATE_ARRAY(object_ptr);
		if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED) {
			value = _get_zval_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);
			if (IS_VAR == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
				HashTable *ht = Z_ARRVAL_P(object_ptr);
				if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE)) {
					GC_ADDREF(ht);
				}
				value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
				if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE) && !GC_DELREF(ht)) {
					zend_array_destroy(ht);
					goto assign_dim_error;
				}
			}
			if (IS_VAR == IS_CV || IS_VAR == IS_VAR) {
				ZVAL_DEREF(value);
			}
			value = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), value);
			if (UNEXPECTED(value == NULL)) {
				zend_cannot_add_element();
				goto assign_dim_error;
			} else if (IS_VAR == IS_CV) {
				if (Z_REFCOUNTED_P(value)) {
					Z_ADDREF_P(value);
				}
			} else if (IS_VAR == IS_VAR) {
				zval *free_op_data = EX_VAR((opline+1)->op1.var);
				if (Z_ISREF_P(free_op_data)) {
					if (Z_REFCOUNTED_P(value)) {
						Z_ADDREF_P(value);
					}
					zval_ptr_dtor_nogc(free_op_data);
				}
			} else if (IS_VAR == IS_CONST) {
				if (UNEXPECTED(Z_REFCOUNTED_P(value))) {
					Z_ADDREF_P(value);
				}
			}
		} else {
			dim = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
			if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
				variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
			} else {
				variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
			}
			if (UNEXPECTED(variable_ptr == NULL)) {
				goto assign_dim_error;
			}
			value = _get_zval_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);
			value = zend_assign_to_variable_ex(variable_ptr, value, IS_VAR, EX_USES_STRICT_TYPES(), &garbage);
		}
		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
			ZVAL_COPY(EX_VAR(opline->result.var), value);
		}
		if (garbage) {
			GC_DTOR_NO_REF(garbage);
		}
	} else {
		if (EXPECTED(Z_ISREF_P(object_ptr))) {
			object_ptr = Z_REFVAL_P(object_ptr);
			if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
				goto try_assign_dim_array;
			}
		}
		if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) {
			zend_object *obj = Z_OBJ_P(object_ptr);

			GC_ADDREF(obj);
			dim = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
			if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_ISUNDEF_P(dim))) {
				dim = ZVAL_UNDEFINED_OP2();
			} else if ((IS_TMP_VAR|IS_VAR) == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
				dim++;
			}

			value = _get_zval_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);
			if (IS_VAR == IS_CV && UNEXPECTED(Z_ISUNDEF_P(value))) {
				value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
			} else if (IS_VAR & (IS_CV|IS_VAR)) {
				ZVAL_DEREF(value);
			}

			zend_assign_to_object_dim(obj, dim, value OPLINE_CC EXECUTE_DATA_CC);

			zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
			if (UNEXPECTED(GC_DELREF(obj) == 0)) {
				zend_objects_store_del(obj);
			}
		} else if (EXPECTED(Z_TYPE_P(object_ptr) == IS_STRING)) {
			if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED) {
				zend_use_new_element_for_string();
				zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
				UNDEF_RESULT();
			} else {
				dim = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
				value = _get_zval_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);
				zend_assign_to_string_offset(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC);
				zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
			}
		} else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
			if (Z_ISREF_P(orig_object_ptr)
			 && ZEND_REF_HAS_TYPE_SOURCES(Z_REF_P(orig_object_ptr))
			 && !zend_verify_ref_array_assignable(Z_REF_P(orig_object_ptr))) {
				dim = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
				zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
				UNDEF_RESULT();
			} else {
				HashTable *ht = zend_new_array(8);
				uint8_t old_type = Z_TYPE_P(object_ptr);

				ZVAL_ARR(object_ptr, ht);
				if (UNEXPECTED(old_type == IS_FALSE)) {
					GC_ADDREF(ht);
					zend_false_to_array_deprecated();
					if (UNEXPECTED(GC_DELREF(ht) == 0)) {
						zend_array_destroy(ht);
						goto assign_dim_error;
					}
				}
				goto try_assign_dim_array;
			}
		} else {
			zend_use_scalar_as_array();
			dim = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
assign_dim_error:
			zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
			if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
				ZVAL_NULL(EX_VAR(opline->result.var));
			}
		}
	}
	if ((IS_TMP_VAR|IS_VAR) != IS_UNUSED) {
		zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
	}
	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
	/* assign_dim has two opcodes! */
	ZEND_VM_NEXT_OPCODE_EX(1, 2);
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_DATA_CV_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *object_ptr, *orig_object_ptr;
	zval *value;
	zval *variable_ptr;
	zval *dim;
	zend_refcounted *garbage = NULL;

	SAVE_OPLINE();
	orig_object_ptr = object_ptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);

	if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
try_assign_dim_array:
		SEPARATE_ARRAY(object_ptr);
		if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED) {
			value = EX_VAR((opline+1)->op1.var);
			if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
				HashTable *ht = Z_ARRVAL_P(object_ptr);
				if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE)) {
					GC_ADDREF(ht);
				}
				value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
				if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE) && !GC_DELREF(ht)) {
					zend_array_destroy(ht);
					goto assign_dim_error;
				}
			}
			if (IS_CV == IS_CV || IS_CV == IS_VAR) {
				ZVAL_DEREF(value);
			}
			value = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), value);
			if (UNEXPECTED(value == NULL)) {
				zend_cannot_add_element();
				goto assign_dim_error;
			} else if (IS_CV == IS_CV) {
				if (Z_REFCOUNTED_P(value)) {
					Z_ADDREF_P(value);
				}
			} else if (IS_CV == IS_VAR) {
				zval *free_op_data = EX_VAR((opline+1)->op1.var);
				if (Z_ISREF_P(free_op_data)) {
					if (Z_REFCOUNTED_P(value)) {
						Z_ADDREF_P(value);
					}
					zval_ptr_dtor_nogc(free_op_data);
				}
			} else if (IS_CV == IS_CONST) {
				if (UNEXPECTED(Z_REFCOUNTED_P(value))) {
					Z_ADDREF_P(value);
				}
			}
		} else {
			dim = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
			if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
				variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
			} else {
				variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
			}
			if (UNEXPECTED(variable_ptr == NULL)) {
				goto assign_dim_error;
			}
			value = _get_zval_ptr_cv_BP_VAR_R((opline+1)->op1.var EXECUTE_DATA_CC);
			value = zend_assign_to_variable_ex(variable_ptr, value, IS_CV, EX_USES_STRICT_TYPES(), &garbage);
		}
		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
			ZVAL_COPY(EX_VAR(opline->result.var), value);
		}
		if (garbage) {
			GC_DTOR_NO_REF(garbage);
		}
	} else {
		if (EXPECTED(Z_ISREF_P(object_ptr))) {
			object_ptr = Z_REFVAL_P(object_ptr);
			if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
				goto try_assign_dim_array;
			}
		}
		if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) {
			zend_object *obj = Z_OBJ_P(object_ptr);

			GC_ADDREF(obj);
			dim = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
			if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_ISUNDEF_P(dim))) {
				dim = ZVAL_UNDEFINED_OP2();
			} else if ((IS_TMP_VAR|IS_VAR) == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
				dim++;
			}

			value = EX_VAR((opline+1)->op1.var);
			if (IS_CV == IS_CV && UNEXPECTED(Z_ISUNDEF_P(value))) {
				value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
			} else if (IS_CV & (IS_CV|IS_VAR)) {
				ZVAL_DEREF(value);
			}

			zend_assign_to_object_dim(obj, dim, value OPLINE_CC EXECUTE_DATA_CC);


			if (UNEXPECTED(GC_DELREF(obj) == 0)) {
				zend_objects_store_del(obj);
			}
		} else if (EXPECTED(Z_TYPE_P(object_ptr) == IS_STRING)) {
			if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED) {
				zend_use_new_element_for_string();


				UNDEF_RESULT();
			} else {
				dim = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
				value = EX_VAR((opline+1)->op1.var);
				zend_assign_to_string_offset(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC);


			}
		} else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
			if (Z_ISREF_P(orig_object_ptr)
			 && ZEND_REF_HAS_TYPE_SOURCES(Z_REF_P(orig_object_ptr))
			 && !zend_verify_ref_array_assignable(Z_REF_P(orig_object_ptr))) {
				dim = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);


				UNDEF_RESULT();
			} else {
				HashTable *ht = zend_new_array(8);
				uint8_t old_type = Z_TYPE_P(object_ptr);

				ZVAL_ARR(object_ptr, ht);
				if (UNEXPECTED(old_type == IS_FALSE)) {
					GC_ADDREF(ht);
					zend_false_to_array_deprecated();
					if (UNEXPECTED(GC_DELREF(ht) == 0)) {
						zend_array_destroy(ht);
						goto assign_dim_error;
					}
				}
				goto try_assign_dim_array;
			}
		} else {
			zend_use_scalar_as_array();
			dim = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
assign_dim_error:


			if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
				ZVAL_NULL(EX_VAR(opline->result.var));
			}
		}
	}
	if ((IS_TMP_VAR|IS_VAR) != IS_UNUSED) {
		zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
	}
	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
	/* assign_dim has two opcodes! */
	ZEND_VM_NEXT_OPCODE_EX(1, 2);
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_ASSIGN_OBJ_REF_SPEC_VAR_TMPVAR_OP_DATA_VAR_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *property, *container, *value_ptr;

	SAVE_OPLINE();

	container = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
	property = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);

	value_ptr = _get_zval_ptr_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);

	if (1) {
		if (IS_VAR == IS_UNUSED) {
			if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
				zend_assign_to_property_reference_this_const(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
			} else {
				zend_assign_to_property_reference_this_var(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
			}
		} else {
			if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
				zend_assign_to_property_reference_var_const(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
			} else {
				zend_assign_to_property_reference_var_var(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
			}
		}
	} else {
		zend_assign_to_property_reference(container, IS_VAR, property, (IS_TMP_VAR|IS_VAR), value_ptr OPLINE_CC EXECUTE_DATA_CC);
	}

	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
	zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
	ZEND_VM_NEXT_OPCODE_EX(1, 2);
}

/* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CONST|VAR) */
static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_ASSIGN_OBJ_REF_SPEC_VAR_TMPVAR_OP_DATA_CV_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *property, *container, *value_ptr;

	SAVE_OPLINE();

	container = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
	property = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);

	value_ptr = _get_zval_ptr_cv_BP_VAR_W((opline+1)->op1.var EXECUTE_DATA_CC);

	if (1) {
		if (IS_VAR == IS_UNUSED) {
			if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
				zend_assign_to_property_reference_this_const(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
			} else {
				zend_assign_to_property_reference_this_var(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
			}
		} else {
			if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
				zend_assign_to_property_reference_var_const(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
			} else {
				zend_assign_to_property_reference_var_var(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
			}
		}
	} else {
		zend_assign_to_property_reference(container, IS_VAR, property, (IS_TMP_VAR|IS_VAR), value_ptr OPLINE_CC EXECUTE_DATA_CC);
	}

	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));


	ZEND_VM_NEXT_OPCODE_EX(1, 2);
}

/* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CONST|VAR) */
static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_INIT_STATIC_METHOD_CALL_SPEC_VAR_TMPVAR_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *function_name;
	zend_class_entry *ce;
	uint32_t call_info;
	zend_function *fbc;
	zend_execute_data *call;

	SAVE_OPLINE();

	if (IS_VAR == IS_CONST) {
		/* no function found. try a static method in class */
		ce = CACHED_PTR(opline->result.num);
		if (UNEXPECTED(ce == NULL)) {
			ce = zend_fetch_class_by_name(Z_STR_P(RT_CONSTANT(opline, opline->op1)), Z_STR_P(RT_CONSTANT(opline, opline->op1) + 1), ZEND_FETCH_CLASS_DEFAULT | ZEND_FETCH_CLASS_EXCEPTION);
			if (UNEXPECTED(ce == NULL)) {
				zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
				HANDLE_EXCEPTION();
			}
			if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
				CACHE_PTR(opline->result.num, ce);
			}
		}
	} else if (IS_VAR == IS_UNUSED) {
		ce = zend_fetch_class(NULL, opline->op1.num);
		if (UNEXPECTED(ce == NULL)) {
			zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
			HANDLE_EXCEPTION();
		}
	} else {
		ce = Z_CE_P(EX_VAR(opline->op1.var));
	}

	if (IS_VAR == IS_CONST &&
	    (IS_TMP_VAR|IS_VAR) == IS_CONST &&
	    EXPECTED((fbc = CACHED_PTR(opline->result.num + sizeof(void*))) != NULL)) {
		/* nothing to do */
	} else if (IS_VAR != IS_CONST &&
	           (IS_TMP_VAR|IS_VAR) == IS_CONST &&
	           EXPECTED(CACHED_PTR(opline->result.num) == ce)) {
		fbc = CACHED_PTR(opline->result.num + sizeof(void*));
	} else if ((IS_TMP_VAR|IS_VAR) != IS_UNUSED) {
		function_name = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
		if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
			if (UNEXPECTED(Z_TYPE_P(function_name) != IS_STRING)) {
				do {
					if ((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV) && Z_ISREF_P(function_name)) {
						function_name = Z_REFVAL_P(function_name);
						if (EXPECTED(Z_TYPE_P(function_name) == IS_STRING)) {
							break;
						}
					} else if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) {
						ZVAL_UNDEFINED_OP2();
						if (UNEXPECTED(EG(exception) != NULL)) {
							HANDLE_EXCEPTION();
						}
					}
					zend_throw_error(NULL, "Method name must be a string");
					zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
					HANDLE_EXCEPTION();
				} while (0);
			}
		}

		if (ce->get_static_method) {
			fbc = ce->get_static_method(ce, Z_STR_P(function_name));
		} else {
			fbc = zend_std_get_static_method(ce, Z_STR_P(function_name), (((IS_TMP_VAR|IS_VAR) == IS_CONST) ? (RT_CONSTANT(opline, opline->op2) + 1) : NULL));
		}
		if (UNEXPECTED(fbc == NULL)) {
			if (EXPECTED(!EG(exception))) {
				zend_undefined_method(ce, Z_STR_P(function_name));
			}
			zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
			HANDLE_EXCEPTION();
		}
		if ((IS_TMP_VAR|IS_VAR) == IS_CONST &&
		    EXPECTED(!(fbc->common.fn_flags & (ZEND_ACC_CALL_VIA_TRAMPOLINE|ZEND_ACC_NEVER_CACHE))) &&
			EXPECTED(!(fbc->common.scope->ce_flags & ZEND_ACC_TRAIT))) {
			CACHE_POLYMORPHIC_PTR(opline->result.num, ce, fbc);
		}
		if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!RUN_TIME_CACHE(&fbc->op_array))) {
			init_func_run_time_cache(&fbc->op_array);
		}
		if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
			zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
		}
	} else {
		if (UNEXPECTED(ce->constructor == NULL)) {
			zend_throw_error(NULL, "Cannot call constructor");
			HANDLE_EXCEPTION();
		}
		if (Z_TYPE(EX(This)) == IS_OBJECT && Z_OBJ(EX(This))->ce != ce->constructor->common.scope && (ce->constructor->common.fn_flags & ZEND_ACC_PRIVATE)) {
			zend_throw_error(NULL, "Cannot call private %s::__construct()", ZSTR_VAL(ce->name));
			HANDLE_EXCEPTION();
		}
		fbc = ce->constructor;
		if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!RUN_TIME_CACHE(&fbc->op_array))) {
			init_func_run_time_cache(&fbc->op_array);
		}
	}

	if (!(fbc->common.fn_flags & ZEND_ACC_STATIC)) {
		if (Z_TYPE(EX(This)) == IS_OBJECT && instanceof_function(Z_OBJCE(EX(This)), ce)) {
			ce = (zend_class_entry*)Z_OBJ(EX(This));
			call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_HAS_THIS;
		} else {
			zend_non_static_method_call(fbc);
			HANDLE_EXCEPTION();
		}
	} else {
		/* previous opcode is ZEND_FETCH_CLASS */
		if (IS_VAR == IS_UNUSED
		 && ((opline->op1.num & ZEND_FETCH_CLASS_MASK) == ZEND_FETCH_CLASS_PARENT ||
		     (opline->op1.num & ZEND_FETCH_CLASS_MASK) == ZEND_FETCH_CLASS_SELF)) {
			if (Z_TYPE(EX(This)) == IS_OBJECT) {
				ce = Z_OBJCE(EX(This));
			} else {
				ce = Z_CE(EX(This));
			}
		}
		call_info = ZEND_CALL_NESTED_FUNCTION;
	}

	call = zend_vm_stack_push_call_frame(call_info,
		fbc, opline->extended_value, ce);
	call->prev_execute_data = EX(call);
	EX(call) = call;

	ZEND_VM_NEXT_OPCODE();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_TMPVAR_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *expr_ptr, new_expr;

	SAVE_OPLINE();
	if ((IS_VAR == IS_VAR || IS_VAR == IS_CV) &&
	    UNEXPECTED(opline->extended_value & ZEND_ARRAY_ELEMENT_REF)) {
		expr_ptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
		if (Z_ISREF_P(expr_ptr)) {
			Z_ADDREF_P(expr_ptr);
		} else {
			ZVAL_MAKE_REF_EX(expr_ptr, 2);
		}
		zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
	} else {
		expr_ptr = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
		if (IS_VAR == IS_TMP_VAR) {
			/* pass */
		} else if (IS_VAR == IS_CONST) {
			Z_TRY_ADDREF_P(expr_ptr);
		} else if (IS_VAR == IS_CV) {
			ZVAL_DEREF(expr_ptr);
			Z_TRY_ADDREF_P(expr_ptr);
		} else /* if (IS_VAR == IS_VAR) */ {
			if (UNEXPECTED(Z_ISREF_P(expr_ptr))) {
				zend_refcounted *ref = Z_COUNTED_P(expr_ptr);

				expr_ptr = Z_REFVAL_P(expr_ptr);
				if (UNEXPECTED(GC_DELREF(ref) == 0)) {
					ZVAL_COPY_VALUE(&new_expr, expr_ptr);
					expr_ptr = &new_expr;
					efree_size(ref, sizeof(zend_reference));
				} else if (Z_OPT_REFCOUNTED_P(expr_ptr)) {
					Z_ADDREF_P(expr_ptr);
				}
			}
		}
	}

	if ((IS_TMP_VAR|IS_VAR) != IS_UNUSED) {
		zval *offset = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
		zend_string *str;
		zend_ulong hval;

add_again:
		if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) {
			str = Z_STR_P(offset);
			if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
				if (ZEND_HANDLE_NUMERIC(str, hval)) {
					goto num_index;
				}
			}
str_index:
			zend_hash_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), str, expr_ptr);
		} else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
			hval = Z_LVAL_P(offset);
num_index:
			zend_hash_index_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), hval, expr_ptr);
		} else if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && EXPECTED(Z_TYPE_P(offset) == IS_REFERENCE)) {
			offset = Z_REFVAL_P(offset);
			goto add_again;
		} else if (UNEXPECTED(Z_TYPE_P(offset) == IS_NULL)) {
			zval tmp;
			if (IS_VAR == IS_CV || IS_VAR == IS_VAR) {
				ZVAL_COPY(&tmp, expr_ptr);
			}
			zend_error(E_DEPRECATED, "Using null as an array offset is deprecated, use an empty string instead");
			if (IS_VAR == IS_CV || IS_VAR == IS_VAR) {
				/* A userland error handler can do funky things to the expression, so reset it */
				zval_ptr_dtor(expr_ptr);
				ZVAL_COPY_VALUE(expr_ptr, &tmp);
			}
			if (UNEXPECTED(EG(exception))) {
				zval_ptr_dtor_nogc(expr_ptr);
				HANDLE_EXCEPTION();
			}
			str = ZSTR_EMPTY_ALLOC();
			goto str_index;
		} else if (Z_TYPE_P(offset) == IS_DOUBLE) {
			hval = zend_dval_to_lval_safe(Z_DVAL_P(offset));
			goto num_index;
		} else if (Z_TYPE_P(offset) == IS_FALSE) {
			hval = 0;
			goto num_index;
		} else if (Z_TYPE_P(offset) == IS_TRUE) {
			hval = 1;
			goto num_index;
		} else if (Z_TYPE_P(offset) == IS_RESOURCE) {
			zend_use_resource_as_offset(offset);
			hval = Z_RES_HANDLE_P(offset);
			goto num_index;
		} else if ((IS_TMP_VAR|IS_VAR) == IS_CV && Z_TYPE_P(offset) == IS_UNDEF) {
			ZVAL_UNDEFINED_OP2();
			str = ZSTR_EMPTY_ALLOC();
			goto str_index;
		} else {
			zend_illegal_array_offset_access(offset);
			zval_ptr_dtor_nogc(expr_ptr);
		}
		zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
	} else {
		if (!zend_hash_next_index_insert(Z_ARRVAL_P(EX_VAR(opline->result.var)), expr_ptr)) {
			zend_cannot_add_element();
			zval_ptr_dtor_nogc(expr_ptr);
		}
	}
	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_INIT_ARRAY_SPEC_VAR_TMPVAR_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	zval *array;
	uint32_t size;
	USE_OPLINE

	SAVE_OPLINE();
	array = EX_VAR(opline->result.var);
	if (IS_VAR != IS_UNUSED) {
		size = opline->extended_value >> ZEND_ARRAY_SIZE_SHIFT;
		ZVAL_ARR(array, zend_new_array(size));
		/* Explicitly initialize array as not-packed if flag is set */
		if (opline->extended_value & ZEND_ARRAY_NOT_PACKED) {
			zend_hash_real_init_mixed(Z_ARRVAL_P(array));
		}
		ZEND_VM_TAIL_CALL(ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_TMPVAR_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
	} else {
		ZVAL_ARR(array, zend_new_array(0));
		ZEND_VM_NEXT_OPCODE();
	}
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_UNSET_DIM_SPEC_VAR_TMPVAR_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *container;
	zval *offset;
	zend_ulong hval;
	zend_string *key;

	SAVE_OPLINE();
	container = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
	offset = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);

	do {
		if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
			HashTable *ht;

unset_dim_array:
			SEPARATE_ARRAY(container);
			ht = Z_ARRVAL_P(container);
offset_again:
			if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) {
				key = Z_STR_P(offset);
				if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
					if (ZEND_HANDLE_NUMERIC(key, hval)) {
						goto num_index_dim;
					}
				}
str_index_dim:
				ZEND_ASSERT(ht != &EG(symbol_table));
				zend_hash_del(ht, key);
			} else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
				hval = Z_LVAL_P(offset);
num_index_dim:
				zend_hash_index_del(ht, hval);
			} else if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && EXPECTED(Z_TYPE_P(offset) == IS_REFERENCE)) {
				offset = Z_REFVAL_P(offset);
				goto offset_again;
			} else if (Z_TYPE_P(offset) == IS_DOUBLE) {
				/* The array may be destroyed while throwing a warning in case the float is not representable as an int.
				 * Temporarily increase the refcount to detect this situation. */
				GC_TRY_ADDREF(ht);
				hval = zend_dval_to_lval_safe(Z_DVAL_P(offset));
				if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE) && !GC_DELREF(ht)) {
					zend_array_destroy(ht);
					break;
				}
				if (EG(exception)) {
					break;
				}
				goto num_index_dim;
			} else if (Z_TYPE_P(offset) == IS_NULL) {
				key = ZSTR_EMPTY_ALLOC();
				goto str_index_dim;
			} else if (Z_TYPE_P(offset) == IS_FALSE) {
				hval = 0;
				goto num_index_dim;
			} else if (Z_TYPE_P(offset) == IS_TRUE) {
				hval = 1;
				goto num_index_dim;
			} else if (Z_TYPE_P(offset) == IS_RESOURCE) {
				zend_use_resource_as_offset(offset);
				hval = Z_RES_HANDLE_P(offset);
				goto num_index_dim;
			} else if ((IS_TMP_VAR|IS_VAR) == IS_CV && Z_TYPE_P(offset) == IS_UNDEF) {
				ZVAL_UNDEFINED_OP2();
				key = ZSTR_EMPTY_ALLOC();
				goto str_index_dim;
			} else {
				zend_illegal_array_offset_unset(offset);
			}
			break;
		} else if (Z_ISREF_P(container)) {
			container = Z_REFVAL_P(container);
			if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
				goto unset_dim_array;
			}
		}
		if (IS_VAR == IS_CV && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
			container = ZVAL_UNDEFINED_OP1();
		}
		if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(offset) == IS_UNDEF)) {
			offset = ZVAL_UNDEFINED_OP2();
		}
		if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
			if ((IS_TMP_VAR|IS_VAR) == IS_CONST && Z_EXTRA_P(offset) == ZEND_EXTRA_VALUE) {
				offset++;
			}
			Z_OBJ_HT_P(container)->unset_dimension(Z_OBJ_P(container), offset);
		} else if (UNEXPECTED(Z_TYPE_P(container) == IS_STRING)) {
			zend_throw_error(NULL, "Cannot unset string offsets");
		} else if (UNEXPECTED(Z_TYPE_P(container) > IS_FALSE)) {
			zend_throw_error(NULL, "Cannot unset offset in a non-array variable");
		} else if (UNEXPECTED(Z_TYPE_P(container) == IS_FALSE)) {
			zend_false_to_array_deprecated();
		}
	} while (0);

	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_UNSET_OBJ_SPEC_VAR_TMPVAR_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *container;
	zval *offset;
	zend_string *name, *tmp_name;

	SAVE_OPLINE();
	container = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
	offset = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);

	do {
		if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT)) {
			if (Z_ISREF_P(container)) {
				container = Z_REFVAL_P(container);
				if (Z_TYPE_P(container) != IS_OBJECT) {
					if (IS_VAR == IS_CV
					 && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
						ZVAL_UNDEFINED_OP1();
					}
					break;
				}
			} else {
				break;
			}
		}
		if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
			name = Z_STR_P(offset);
		} else {
			name = zval_try_get_tmp_string(offset, &tmp_name);
			if (UNEXPECTED(!name)) {
				break;
			}
		}
		Z_OBJ_HT_P(container)->unset_property(Z_OBJ_P(container), name, (((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL));
		if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
			zend_tmp_string_release(tmp_name);
		}
	} while (0);

	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_YIELD_SPEC_VAR_TMPVAR_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE

	zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C);

	SAVE_OPLINE();
	if (UNEXPECTED(generator->flags & ZEND_GENERATOR_FORCED_CLOSE)) {
		ZEND_VM_TAIL_CALL(zend_yield_in_closed_generator_helper_SPEC_TAILCALL(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
	}

	/* Destroy the previously yielded value */
	zval_ptr_dtor(&generator->value);

	/* Destroy the previously yielded key */
	zval_ptr_dtor(&generator->key);

	/* Set the new yielded value */
	if (IS_VAR != IS_UNUSED) {
		if (UNEXPECTED(EX(func)->op_array.fn_flags & ZEND_ACC_RETURN_REFERENCE)) {
			/* Constants and temporary variables aren't yieldable by reference,
			 * but we still allow them with a notice. */
			if (IS_VAR & (IS_CONST|IS_TMP_VAR)) {
				zval *value;

				zend_error(E_NOTICE, "Only variable references should be yielded by reference");

				value = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
				ZVAL_COPY_VALUE(&generator->value, value);
				if (IS_VAR == IS_CONST) {
					if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
						Z_ADDREF(generator->value);
					}
				}
			} else {
				zval *value_ptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);

				/* If a function call result is yielded and the function did
				 * not return by reference we throw a notice. */
				do {
					if (IS_VAR == IS_VAR) {
						ZEND_ASSERT(value_ptr != &EG(uninitialized_zval));
						if (opline->extended_value == ZEND_RETURNS_FUNCTION
						 && !Z_ISREF_P(value_ptr)) {
							zend_error(E_NOTICE, "Only variable references should be yielded by reference");
							ZVAL_COPY(&generator->value, value_ptr);
							break;
						}
					}
					if (Z_ISREF_P(value_ptr)) {
						Z_ADDREF_P(value_ptr);
					} else {
						ZVAL_MAKE_REF_EX(value_ptr, 2);
					}
					ZVAL_REF(&generator->value, Z_REF_P(value_ptr));
				} while (0);

				zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
			}
		} else {
			zval *value = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);

			/* Consts, temporary variables and references need copying */
			if (IS_VAR == IS_CONST) {
				ZVAL_COPY_VALUE(&generator->value, value);
				if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
					Z_ADDREF(generator->value);
				}
			} else if (IS_VAR == IS_TMP_VAR) {
				ZVAL_COPY_VALUE(&generator->value, value);
			} else if ((IS_VAR & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) {
				ZVAL_COPY(&generator->value, Z_REFVAL_P(value));
				zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
			} else {
				ZVAL_COPY_VALUE(&generator->value, value);
				if (IS_VAR == IS_CV) {
					if (Z_OPT_REFCOUNTED_P(value)) Z_ADDREF_P(value);
				}
			}
		}
	} else {
		/* If no value was specified yield null */
		ZVAL_NULL(&generator->value);
	}

	/* Set the new yielded key */
	if ((IS_TMP_VAR|IS_VAR) != IS_UNUSED) {
		zval *key = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
		if (((IS_TMP_VAR|IS_VAR) & (IS_CV|IS_VAR)) && UNEXPECTED(Z_TYPE_P(key) == IS_REFERENCE)) {
			key = Z_REFVAL_P(key);
		}
		ZVAL_COPY(&generator->key, key);
		zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));

		if (Z_TYPE(generator->key) == IS_LONG
		    && Z_LVAL(generator->key) > generator->largest_used_integer_key
		) {
			generator->largest_used_integer_key = Z_LVAL(generator->key);
		}
	} else {
		/* If no key was specified we use auto-increment keys */
		generator->largest_used_integer_key++;
		ZVAL_LONG(&generator->key, generator->largest_used_integer_key);
	}

	if (RETURN_VALUE_USED(opline)) {
		/* If the return value of yield is used set the send
		 * target and initialize it to NULL */
		generator->send_target = EX_VAR(opline->result.var);
		ZVAL_NULL(generator->send_target);
	} else {
		generator->send_target = NULL;
	}

	/* The GOTO VM uses a local opline variable. We need to set the opline
	 * variable in execute_data so we don't resume at an old position. */
	SAVE_OPLINE();

	ZEND_VM_RETURN();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_IS_IDENTICAL_SPEC_VAR_TMP_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;
	bool result;

	SAVE_OPLINE();
	op1 = _get_zval_ptr_var_deref(opline->op1.var EXECUTE_DATA_CC);
	op2 = _get_zval_ptr_tmp(opline->op2.var EXECUTE_DATA_CC);
	result = fast_is_identical_function(op1, op2);
	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
	ZEND_VM_SMART_BRANCH(result, 1);
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_CASE_STRICT_SPEC_VAR_TMP_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;
	bool result;

	SAVE_OPLINE();
	op1 = _get_zval_ptr_var_deref(opline->op1.var EXECUTE_DATA_CC);
	op2 = _get_zval_ptr_tmp(opline->op2.var EXECUTE_DATA_CC);
	result = fast_is_identical_function(op1, op2);
	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
	ZEND_VM_SMART_BRANCH(result, 1);
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_IS_NOT_IDENTICAL_SPEC_VAR_TMP_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;
	bool result;

	SAVE_OPLINE();
	op1 = _get_zval_ptr_var_deref(opline->op1.var EXECUTE_DATA_CC);
	op2 = _get_zval_ptr_tmp(opline->op2.var EXECUTE_DATA_CC);
	result = fast_is_not_identical_function(op1, op2);
	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
	ZEND_VM_SMART_BRANCH(result, 1);
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_ASSIGN_SPEC_VAR_TMP_RETVAL_UNUSED_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *value;
	zval *variable_ptr;

	SAVE_OPLINE();
	value = _get_zval_ptr_tmp(opline->op2.var EXECUTE_DATA_CC);
	variable_ptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);

	if (0 || UNEXPECTED(0)) {
		zend_refcounted *garbage = NULL;

		value = zend_assign_to_variable_ex(variable_ptr, value, IS_TMP_VAR, EX_USES_STRICT_TYPES(), &garbage);
		if (UNEXPECTED(0)) {
			ZVAL_COPY(EX_VAR(opline->result.var), value);
		}
		if (garbage) {
			GC_DTOR_NO_REF(garbage);
		}
	} else {
		value = zend_assign_to_variable(variable_ptr, value, IS_TMP_VAR, EX_USES_STRICT_TYPES());
	}
	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
	/* zend_assign_to_variable() always takes care of op2, never free it! */

	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_ASSIGN_SPEC_VAR_TMP_RETVAL_USED_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *value;
	zval *variable_ptr;

	SAVE_OPLINE();
	value = _get_zval_ptr_tmp(opline->op2.var EXECUTE_DATA_CC);
	variable_ptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);

	if (0 || UNEXPECTED(1)) {
		zend_refcounted *garbage = NULL;

		value = zend_assign_to_variable_ex(variable_ptr, value, IS_TMP_VAR, EX_USES_STRICT_TYPES(), &garbage);
		if (UNEXPECTED(1)) {
			ZVAL_COPY(EX_VAR(opline->result.var), value);
		}
		if (garbage) {
			GC_DTOR_NO_REF(garbage);
		}
	} else {
		value = zend_assign_to_variable(variable_ptr, value, IS_TMP_VAR, EX_USES_STRICT_TYPES());
	}
	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
	/* zend_assign_to_variable() always takes care of op2, never free it! */

	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_IS_IDENTICAL_SPEC_VAR_VAR_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;
	bool result;

	SAVE_OPLINE();
	op1 = _get_zval_ptr_var_deref(opline->op1.var EXECUTE_DATA_CC);
	op2 = _get_zval_ptr_var_deref(opline->op2.var EXECUTE_DATA_CC);
	result = fast_is_identical_function(op1, op2);
	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
	ZEND_VM_SMART_BRANCH(result, 1);
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_CASE_STRICT_SPEC_VAR_VAR_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;
	bool result;

	SAVE_OPLINE();
	op1 = _get_zval_ptr_var_deref(opline->op1.var EXECUTE_DATA_CC);
	op2 = _get_zval_ptr_var_deref(opline->op2.var EXECUTE_DATA_CC);
	result = fast_is_identical_function(op1, op2);
	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
	ZEND_VM_SMART_BRANCH(result, 1);
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_IS_NOT_IDENTICAL_SPEC_VAR_VAR_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;
	bool result;

	SAVE_OPLINE();
	op1 = _get_zval_ptr_var_deref(opline->op1.var EXECUTE_DATA_CC);
	op2 = _get_zval_ptr_var_deref(opline->op2.var EXECUTE_DATA_CC);
	result = fast_is_not_identical_function(op1, op2);
	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
	ZEND_VM_SMART_BRANCH(result, 1);
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_ASSIGN_SPEC_VAR_VAR_RETVAL_UNUSED_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *value;
	zval *variable_ptr;

	SAVE_OPLINE();
	value = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
	variable_ptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);

	if (0 || UNEXPECTED(0)) {
		zend_refcounted *garbage = NULL;

		value = zend_assign_to_variable_ex(variable_ptr, value, IS_VAR, EX_USES_STRICT_TYPES(), &garbage);
		if (UNEXPECTED(0)) {
			ZVAL_COPY(EX_VAR(opline->result.var), value);
		}
		if (garbage) {
			GC_DTOR_NO_REF(garbage);
		}
	} else {
		value = zend_assign_to_variable(variable_ptr, value, IS_VAR, EX_USES_STRICT_TYPES());
	}
	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
	/* zend_assign_to_variable() always takes care of op2, never free it! */

	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_ASSIGN_SPEC_VAR_VAR_RETVAL_USED_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *value;
	zval *variable_ptr;

	SAVE_OPLINE();
	value = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
	variable_ptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);

	if (0 || UNEXPECTED(1)) {
		zend_refcounted *garbage = NULL;

		value = zend_assign_to_variable_ex(variable_ptr, value, IS_VAR, EX_USES_STRICT_TYPES(), &garbage);
		if (UNEXPECTED(1)) {
			ZVAL_COPY(EX_VAR(opline->result.var), value);
		}
		if (garbage) {
			GC_DTOR_NO_REF(garbage);
		}
	} else {
		value = zend_assign_to_variable(variable_ptr, value, IS_VAR, EX_USES_STRICT_TYPES());
	}
	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
	/* zend_assign_to_variable() always takes care of op2, never free it! */

	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_ASSIGN_REF_SPEC_VAR_VAR_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *variable_ptr;
	zval *value_ptr;
	zend_refcounted *garbage = NULL;

	SAVE_OPLINE();
	value_ptr = _get_zval_ptr_ptr_var(opline->op2.var EXECUTE_DATA_CC);
	variable_ptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);

	if (IS_VAR == IS_VAR &&
	           UNEXPECTED(Z_TYPE_P(EX_VAR(opline->op1.var)) != IS_INDIRECT)) {

		zend_throw_error(NULL, "Cannot assign by reference to an array dimension of an object");
		variable_ptr = &EG(uninitialized_zval);
	} else if (IS_VAR == IS_VAR &&
	           opline->extended_value == ZEND_RETURNS_FUNCTION &&
			   UNEXPECTED(!Z_ISREF_P(value_ptr))) {

		variable_ptr = zend_wrong_assign_to_variable_reference(
			variable_ptr, value_ptr, &garbage OPLINE_CC EXECUTE_DATA_CC);
	} else {
		zend_assign_to_variable_reference(variable_ptr, value_ptr, &garbage);
	}

	if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
		ZVAL_COPY(EX_VAR(opline->result.var), variable_ptr);
	}

	if (garbage) {
		GC_DTOR(garbage);
	}

	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_ASSIGN_DIM_OP_SPEC_VAR_UNUSED_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *var_ptr;
	zval *value, *container, *dim;
	HashTable *ht;

	SAVE_OPLINE();
	container = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);

	if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
assign_dim_op_array:
		SEPARATE_ARRAY(container);
		ht = Z_ARRVAL_P(container);
assign_dim_op_new_array:
		dim = NULL;
		if (IS_UNUSED == IS_UNUSED) {
			var_ptr = zend_hash_next_index_insert(ht, &EG(uninitialized_zval));
			if (UNEXPECTED(!var_ptr)) {
				zend_cannot_add_element();
				goto assign_dim_op_ret_null;
			}
		} else {
			if (IS_UNUSED == IS_CONST) {
				var_ptr = zend_fetch_dimension_address_inner_RW_CONST(ht, dim EXECUTE_DATA_CC);
			} else {
				var_ptr = zend_fetch_dimension_address_inner_RW(ht, dim EXECUTE_DATA_CC);
			}
			if (UNEXPECTED(!var_ptr)) {
				goto assign_dim_op_ret_null;
			}
		}

		value = get_op_data_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1);

		do {
			if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_ISREF_P(var_ptr))) {
				zend_reference *ref = Z_REF_P(var_ptr);
				var_ptr = Z_REFVAL_P(var_ptr);
				if (UNEXPECTED(ZEND_REF_HAS_TYPE_SOURCES(ref))) {
					zend_binary_assign_op_typed_ref(ref, value OPLINE_CC EXECUTE_DATA_CC);
					break;
				}
			}
			zend_binary_op(var_ptr, var_ptr, value OPLINE_CC);
		} while (0);

		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
			ZVAL_COPY(EX_VAR(opline->result.var), var_ptr);
		}
		FREE_OP((opline+1)->op1_type, (opline+1)->op1.var);
	} else {
		if (EXPECTED(Z_ISREF_P(container))) {
			container = Z_REFVAL_P(container);
			if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
				goto assign_dim_op_array;
			}
		}

		if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
			zend_object *obj = Z_OBJ_P(container);

			dim = NULL;
			if (IS_UNUSED == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
				dim++;
			}
			zend_binary_assign_op_obj_dim(obj, dim OPLINE_CC EXECUTE_DATA_CC);
		} else if (EXPECTED(Z_TYPE_P(container) <= IS_FALSE)) {
			uint8_t old_type;

			if (IS_VAR == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(container) == IS_UNDEF)) {
				ZVAL_UNDEFINED_OP1();
			}
			ht = zend_new_array(8);
			old_type = Z_TYPE_P(container);
			ZVAL_ARR(container, ht);
			if (UNEXPECTED(old_type == IS_FALSE)) {
				GC_ADDREF(ht);
				zend_false_to_array_deprecated();
				if (UNEXPECTED(GC_DELREF(ht) == 0)) {
					zend_array_destroy(ht);
					goto assign_dim_op_ret_null;
				}
			}
			goto assign_dim_op_new_array;
		} else {
			dim = NULL;
			zend_binary_assign_op_dim_slow(container, dim OPLINE_CC EXECUTE_DATA_CC);
assign_dim_op_ret_null:
			FREE_OP((opline+1)->op1_type, (opline+1)->op1.var);
			if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
				ZVAL_NULL(EX_VAR(opline->result.var));
			}
		}
	}


	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
	ZEND_VM_NEXT_OPCODE_EX(1, 2);
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_FETCH_DIM_W_SPEC_VAR_UNUSED_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *container;

	SAVE_OPLINE();
	container = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
	zend_fetch_dimension_address_W(container, NULL, IS_UNUSED OPLINE_CC EXECUTE_DATA_CC);


	if (IS_VAR == IS_VAR) {
		FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
	}
	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_FETCH_DIM_RW_SPEC_VAR_UNUSED_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *container;

	SAVE_OPLINE();
	container = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
	zend_fetch_dimension_address_RW(container, NULL, IS_UNUSED OPLINE_CC EXECUTE_DATA_CC);


	if (IS_VAR == IS_VAR) {
		FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
	}
	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_UNUSED_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
#if 0
	USE_OPLINE
#endif

	if (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) {
		if ((IS_VAR & (IS_CONST|IS_TMP_VAR))) {
			ZEND_VM_TAIL_CALL(zend_use_tmp_in_write_context_helper_SPEC_TAILCALL(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
		}
		ZEND_VM_TAIL_CALL(ZEND_FETCH_DIM_W_SPEC_VAR_UNUSED_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
	} else {
		if (IS_UNUSED == IS_UNUSED) {
			ZEND_VM_TAIL_CALL(zend_use_undef_in_read_context_helper_SPEC_TAILCALL(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
		}
		ZEND_VM_TAIL_CALL(ZEND_NULL_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
	}
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_ASSIGN_DIM_SPEC_VAR_UNUSED_OP_DATA_CONST_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *object_ptr, *orig_object_ptr;
	zval *value;
	zval *variable_ptr;
	zval *dim;
	zend_refcounted *garbage = NULL;

	SAVE_OPLINE();
	orig_object_ptr = object_ptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);

	if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
try_assign_dim_array:
		SEPARATE_ARRAY(object_ptr);
		if (IS_UNUSED == IS_UNUSED) {
			value = RT_CONSTANT((opline+1), (opline+1)->op1);
			if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
				HashTable *ht = Z_ARRVAL_P(object_ptr);
				if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE)) {
					GC_ADDREF(ht);
				}
				value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
				if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE) && !GC_DELREF(ht)) {
					zend_array_destroy(ht);
					goto assign_dim_error;
				}
			}
			if (IS_CONST == IS_CV || IS_CONST == IS_VAR) {
				ZVAL_DEREF(value);
			}
			value = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), value);
			if (UNEXPECTED(value == NULL)) {
				zend_cannot_add_element();
				goto assign_dim_error;
			} else if (IS_CONST == IS_CV) {
				if (Z_REFCOUNTED_P(value)) {
					Z_ADDREF_P(value);
				}
			} else if (IS_CONST == IS_VAR) {
				zval *free_op_data = EX_VAR((opline+1)->op1.var);
				if (Z_ISREF_P(free_op_data)) {
					if (Z_REFCOUNTED_P(value)) {
						Z_ADDREF_P(value);
					}
					zval_ptr_dtor_nogc(free_op_data);
				}
			} else if (IS_CONST == IS_CONST) {
				if (UNEXPECTED(Z_REFCOUNTED_P(value))) {
					Z_ADDREF_P(value);
				}
			}
		} else {
			dim = NULL;
			if (IS_UNUSED == IS_CONST) {
				variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
			} else {
				variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
			}
			if (UNEXPECTED(variable_ptr == NULL)) {
				goto assign_dim_error;
			}
			value = RT_CONSTANT((opline+1), (opline+1)->op1);
			value = zend_assign_to_variable_ex(variable_ptr, value, IS_CONST, EX_USES_STRICT_TYPES(), &garbage);
		}
		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
			ZVAL_COPY(EX_VAR(opline->result.var), value);
		}
		if (garbage) {
			GC_DTOR_NO_REF(garbage);
		}
	} else {
		if (EXPECTED(Z_ISREF_P(object_ptr))) {
			object_ptr = Z_REFVAL_P(object_ptr);
			if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
				goto try_assign_dim_array;
			}
		}
		if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) {
			zend_object *obj = Z_OBJ_P(object_ptr);

			GC_ADDREF(obj);
			dim = NULL;
			if (IS_UNUSED == IS_CV && UNEXPECTED(Z_ISUNDEF_P(dim))) {
				dim = ZVAL_UNDEFINED_OP2();
			} else if (IS_UNUSED == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
				dim++;
			}

			value = RT_CONSTANT((opline+1), (opline+1)->op1);
			if (IS_CONST == IS_CV && UNEXPECTED(Z_ISUNDEF_P(value))) {
				value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
			} else if (IS_CONST & (IS_CV|IS_VAR)) {
				ZVAL_DEREF(value);
			}

			zend_assign_to_object_dim(obj, dim, value OPLINE_CC EXECUTE_DATA_CC);


			if (UNEXPECTED(GC_DELREF(obj) == 0)) {
				zend_objects_store_del(obj);
			}
		} else if (EXPECTED(Z_TYPE_P(object_ptr) == IS_STRING)) {
			if (IS_UNUSED == IS_UNUSED) {
				zend_use_new_element_for_string();


				UNDEF_RESULT();
			} else {
				dim = NULL;
				value = RT_CONSTANT((opline+1), (opline+1)->op1);
				zend_assign_to_string_offset(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC);


			}
		} else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
			if (Z_ISREF_P(orig_object_ptr)
			 && ZEND_REF_HAS_TYPE_SOURCES(Z_REF_P(orig_object_ptr))
			 && !zend_verify_ref_array_assignable(Z_REF_P(orig_object_ptr))) {
				dim = NULL;


				UNDEF_RESULT();
			} else {
				HashTable *ht = zend_new_array(8);
				uint8_t old_type = Z_TYPE_P(object_ptr);

				ZVAL_ARR(object_ptr, ht);
				if (UNEXPECTED(old_type == IS_FALSE)) {
					GC_ADDREF(ht);
					zend_false_to_array_deprecated();
					if (UNEXPECTED(GC_DELREF(ht) == 0)) {
						zend_array_destroy(ht);
						goto assign_dim_error;
					}
				}
				goto try_assign_dim_array;
			}
		} else {
			zend_use_scalar_as_array();
			dim = NULL;
assign_dim_error:


			if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
				ZVAL_NULL(EX_VAR(opline->result.var));
			}
		}
	}
	if (IS_UNUSED != IS_UNUSED) {


	}
	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
	/* assign_dim has two opcodes! */
	ZEND_VM_NEXT_OPCODE_EX(1, 2);
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_ASSIGN_DIM_SPEC_VAR_UNUSED_OP_DATA_TMP_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *object_ptr, *orig_object_ptr;
	zval *value;
	zval *variable_ptr;
	zval *dim;
	zend_refcounted *garbage = NULL;

	SAVE_OPLINE();
	orig_object_ptr = object_ptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);

	if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
try_assign_dim_array:
		SEPARATE_ARRAY(object_ptr);
		if (IS_UNUSED == IS_UNUSED) {
			value = _get_zval_ptr_tmp((opline+1)->op1.var EXECUTE_DATA_CC);
			if (IS_TMP_VAR == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
				HashTable *ht = Z_ARRVAL_P(object_ptr);
				if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE)) {
					GC_ADDREF(ht);
				}
				value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
				if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE) && !GC_DELREF(ht)) {
					zend_array_destroy(ht);
					goto assign_dim_error;
				}
			}
			if (IS_TMP_VAR == IS_CV || IS_TMP_VAR == IS_VAR) {
				ZVAL_DEREF(value);
			}
			value = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), value);
			if (UNEXPECTED(value == NULL)) {
				zend_cannot_add_element();
				goto assign_dim_error;
			} else if (IS_TMP_VAR == IS_CV) {
				if (Z_REFCOUNTED_P(value)) {
					Z_ADDREF_P(value);
				}
			} else if (IS_TMP_VAR == IS_VAR) {
				zval *free_op_data = EX_VAR((opline+1)->op1.var);
				if (Z_ISREF_P(free_op_data)) {
					if (Z_REFCOUNTED_P(value)) {
						Z_ADDREF_P(value);
					}
					zval_ptr_dtor_nogc(free_op_data);
				}
			} else if (IS_TMP_VAR == IS_CONST) {
				if (UNEXPECTED(Z_REFCOUNTED_P(value))) {
					Z_ADDREF_P(value);
				}
			}
		} else {
			dim = NULL;
			if (IS_UNUSED == IS_CONST) {
				variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
			} else {
				variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
			}
			if (UNEXPECTED(variable_ptr == NULL)) {
				goto assign_dim_error;
			}
			value = _get_zval_ptr_tmp((opline+1)->op1.var EXECUTE_DATA_CC);
			value = zend_assign_to_variable_ex(variable_ptr, value, IS_TMP_VAR, EX_USES_STRICT_TYPES(), &garbage);
		}
		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
			ZVAL_COPY(EX_VAR(opline->result.var), value);
		}
		if (garbage) {
			GC_DTOR_NO_REF(garbage);
		}
	} else {
		if (EXPECTED(Z_ISREF_P(object_ptr))) {
			object_ptr = Z_REFVAL_P(object_ptr);
			if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
				goto try_assign_dim_array;
			}
		}
		if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) {
			zend_object *obj = Z_OBJ_P(object_ptr);

			GC_ADDREF(obj);
			dim = NULL;
			if (IS_UNUSED == IS_CV && UNEXPECTED(Z_ISUNDEF_P(dim))) {
				dim = ZVAL_UNDEFINED_OP2();
			} else if (IS_UNUSED == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
				dim++;
			}

			value = _get_zval_ptr_tmp((opline+1)->op1.var EXECUTE_DATA_CC);
			if (IS_TMP_VAR == IS_CV && UNEXPECTED(Z_ISUNDEF_P(value))) {
				value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
			} else if (IS_TMP_VAR & (IS_CV|IS_VAR)) {
				ZVAL_DEREF(value);
			}

			zend_assign_to_object_dim(obj, dim, value OPLINE_CC EXECUTE_DATA_CC);

			zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
			if (UNEXPECTED(GC_DELREF(obj) == 0)) {
				zend_objects_store_del(obj);
			}
		} else if (EXPECTED(Z_TYPE_P(object_ptr) == IS_STRING)) {
			if (IS_UNUSED == IS_UNUSED) {
				zend_use_new_element_for_string();
				zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
				UNDEF_RESULT();
			} else {
				dim = NULL;
				value = _get_zval_ptr_tmp((opline+1)->op1.var EXECUTE_DATA_CC);
				zend_assign_to_string_offset(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC);
				zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
			}
		} else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
			if (Z_ISREF_P(orig_object_ptr)
			 && ZEND_REF_HAS_TYPE_SOURCES(Z_REF_P(orig_object_ptr))
			 && !zend_verify_ref_array_assignable(Z_REF_P(orig_object_ptr))) {
				dim = NULL;
				zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
				UNDEF_RESULT();
			} else {
				HashTable *ht = zend_new_array(8);
				uint8_t old_type = Z_TYPE_P(object_ptr);

				ZVAL_ARR(object_ptr, ht);
				if (UNEXPECTED(old_type == IS_FALSE)) {
					GC_ADDREF(ht);
					zend_false_to_array_deprecated();
					if (UNEXPECTED(GC_DELREF(ht) == 0)) {
						zend_array_destroy(ht);
						goto assign_dim_error;
					}
				}
				goto try_assign_dim_array;
			}
		} else {
			zend_use_scalar_as_array();
			dim = NULL;
assign_dim_error:
			zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
			if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
				ZVAL_NULL(EX_VAR(opline->result.var));
			}
		}
	}
	if (IS_UNUSED != IS_UNUSED) {


	}
	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
	/* assign_dim has two opcodes! */
	ZEND_VM_NEXT_OPCODE_EX(1, 2);
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_ASSIGN_DIM_SPEC_VAR_UNUSED_OP_DATA_VAR_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *object_ptr, *orig_object_ptr;
	zval *value;
	zval *variable_ptr;
	zval *dim;
	zend_refcounted *garbage = NULL;

	SAVE_OPLINE();
	orig_object_ptr = object_ptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);

	if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
try_assign_dim_array:
		SEPARATE_ARRAY(object_ptr);
		if (IS_UNUSED == IS_UNUSED) {
			value = _get_zval_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);
			if (IS_VAR == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
				HashTable *ht = Z_ARRVAL_P(object_ptr);
				if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE)) {
					GC_ADDREF(ht);
				}
				value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
				if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE) && !GC_DELREF(ht)) {
					zend_array_destroy(ht);
					goto assign_dim_error;
				}
			}
			if (IS_VAR == IS_CV || IS_VAR == IS_VAR) {
				ZVAL_DEREF(value);
			}
			value = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), value);
			if (UNEXPECTED(value == NULL)) {
				zend_cannot_add_element();
				goto assign_dim_error;
			} else if (IS_VAR == IS_CV) {
				if (Z_REFCOUNTED_P(value)) {
					Z_ADDREF_P(value);
				}
			} else if (IS_VAR == IS_VAR) {
				zval *free_op_data = EX_VAR((opline+1)->op1.var);
				if (Z_ISREF_P(free_op_data)) {
					if (Z_REFCOUNTED_P(value)) {
						Z_ADDREF_P(value);
					}
					zval_ptr_dtor_nogc(free_op_data);
				}
			} else if (IS_VAR == IS_CONST) {
				if (UNEXPECTED(Z_REFCOUNTED_P(value))) {
					Z_ADDREF_P(value);
				}
			}
		} else {
			dim = NULL;
			if (IS_UNUSED == IS_CONST) {
				variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
			} else {
				variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
			}
			if (UNEXPECTED(variable_ptr == NULL)) {
				goto assign_dim_error;
			}
			value = _get_zval_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);
			value = zend_assign_to_variable_ex(variable_ptr, value, IS_VAR, EX_USES_STRICT_TYPES(), &garbage);
		}
		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
			ZVAL_COPY(EX_VAR(opline->result.var), value);
		}
		if (garbage) {
			GC_DTOR_NO_REF(garbage);
		}
	} else {
		if (EXPECTED(Z_ISREF_P(object_ptr))) {
			object_ptr = Z_REFVAL_P(object_ptr);
			if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
				goto try_assign_dim_array;
			}
		}
		if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) {
			zend_object *obj = Z_OBJ_P(object_ptr);

			GC_ADDREF(obj);
			dim = NULL;
			if (IS_UNUSED == IS_CV && UNEXPECTED(Z_ISUNDEF_P(dim))) {
				dim = ZVAL_UNDEFINED_OP2();
			} else if (IS_UNUSED == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
				dim++;
			}

			value = _get_zval_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);
			if (IS_VAR == IS_CV && UNEXPECTED(Z_ISUNDEF_P(value))) {
				value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
			} else if (IS_VAR & (IS_CV|IS_VAR)) {
				ZVAL_DEREF(value);
			}

			zend_assign_to_object_dim(obj, dim, value OPLINE_CC EXECUTE_DATA_CC);

			zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
			if (UNEXPECTED(GC_DELREF(obj) == 0)) {
				zend_objects_store_del(obj);
			}
		} else if (EXPECTED(Z_TYPE_P(object_ptr) == IS_STRING)) {
			if (IS_UNUSED == IS_UNUSED) {
				zend_use_new_element_for_string();
				zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
				UNDEF_RESULT();
			} else {
				dim = NULL;
				value = _get_zval_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);
				zend_assign_to_string_offset(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC);
				zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
			}
		} else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
			if (Z_ISREF_P(orig_object_ptr)
			 && ZEND_REF_HAS_TYPE_SOURCES(Z_REF_P(orig_object_ptr))
			 && !zend_verify_ref_array_assignable(Z_REF_P(orig_object_ptr))) {
				dim = NULL;
				zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
				UNDEF_RESULT();
			} else {
				HashTable *ht = zend_new_array(8);
				uint8_t old_type = Z_TYPE_P(object_ptr);

				ZVAL_ARR(object_ptr, ht);
				if (UNEXPECTED(old_type == IS_FALSE)) {
					GC_ADDREF(ht);
					zend_false_to_array_deprecated();
					if (UNEXPECTED(GC_DELREF(ht) == 0)) {
						zend_array_destroy(ht);
						goto assign_dim_error;
					}
				}
				goto try_assign_dim_array;
			}
		} else {
			zend_use_scalar_as_array();
			dim = NULL;
assign_dim_error:
			zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
			if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
				ZVAL_NULL(EX_VAR(opline->result.var));
			}
		}
	}
	if (IS_UNUSED != IS_UNUSED) {


	}
	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
	/* assign_dim has two opcodes! */
	ZEND_VM_NEXT_OPCODE_EX(1, 2);
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_ASSIGN_DIM_SPEC_VAR_UNUSED_OP_DATA_CV_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *object_ptr, *orig_object_ptr;
	zval *value;
	zval *variable_ptr;
	zval *dim;
	zend_refcounted *garbage = NULL;

	SAVE_OPLINE();
	orig_object_ptr = object_ptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);

	if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
try_assign_dim_array:
		SEPARATE_ARRAY(object_ptr);
		if (IS_UNUSED == IS_UNUSED) {
			value = EX_VAR((opline+1)->op1.var);
			if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
				HashTable *ht = Z_ARRVAL_P(object_ptr);
				if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE)) {
					GC_ADDREF(ht);
				}
				value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
				if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE) && !GC_DELREF(ht)) {
					zend_array_destroy(ht);
					goto assign_dim_error;
				}
			}
			if (IS_CV == IS_CV || IS_CV == IS_VAR) {
				ZVAL_DEREF(value);
			}
			value = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), value);
			if (UNEXPECTED(value == NULL)) {
				zend_cannot_add_element();
				goto assign_dim_error;
			} else if (IS_CV == IS_CV) {
				if (Z_REFCOUNTED_P(value)) {
					Z_ADDREF_P(value);
				}
			} else if (IS_CV == IS_VAR) {
				zval *free_op_data = EX_VAR((opline+1)->op1.var);
				if (Z_ISREF_P(free_op_data)) {
					if (Z_REFCOUNTED_P(value)) {
						Z_ADDREF_P(value);
					}
					zval_ptr_dtor_nogc(free_op_data);
				}
			} else if (IS_CV == IS_CONST) {
				if (UNEXPECTED(Z_REFCOUNTED_P(value))) {
					Z_ADDREF_P(value);
				}
			}
		} else {
			dim = NULL;
			if (IS_UNUSED == IS_CONST) {
				variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
			} else {
				variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
			}
			if (UNEXPECTED(variable_ptr == NULL)) {
				goto assign_dim_error;
			}
			value = _get_zval_ptr_cv_BP_VAR_R((opline+1)->op1.var EXECUTE_DATA_CC);
			value = zend_assign_to_variable_ex(variable_ptr, value, IS_CV, EX_USES_STRICT_TYPES(), &garbage);
		}
		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
			ZVAL_COPY(EX_VAR(opline->result.var), value);
		}
		if (garbage) {
			GC_DTOR_NO_REF(garbage);
		}
	} else {
		if (EXPECTED(Z_ISREF_P(object_ptr))) {
			object_ptr = Z_REFVAL_P(object_ptr);
			if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
				goto try_assign_dim_array;
			}
		}
		if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) {
			zend_object *obj = Z_OBJ_P(object_ptr);

			GC_ADDREF(obj);
			dim = NULL;
			if (IS_UNUSED == IS_CV && UNEXPECTED(Z_ISUNDEF_P(dim))) {
				dim = ZVAL_UNDEFINED_OP2();
			} else if (IS_UNUSED == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
				dim++;
			}

			value = EX_VAR((opline+1)->op1.var);
			if (IS_CV == IS_CV && UNEXPECTED(Z_ISUNDEF_P(value))) {
				value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
			} else if (IS_CV & (IS_CV|IS_VAR)) {
				ZVAL_DEREF(value);
			}

			zend_assign_to_object_dim(obj, dim, value OPLINE_CC EXECUTE_DATA_CC);


			if (UNEXPECTED(GC_DELREF(obj) == 0)) {
				zend_objects_store_del(obj);
			}
		} else if (EXPECTED(Z_TYPE_P(object_ptr) == IS_STRING)) {
			if (IS_UNUSED == IS_UNUSED) {
				zend_use_new_element_for_string();


				UNDEF_RESULT();
			} else {
				dim = NULL;
				value = EX_VAR((opline+1)->op1.var);
				zend_assign_to_string_offset(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC);


			}
		} else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
			if (Z_ISREF_P(orig_object_ptr)
			 && ZEND_REF_HAS_TYPE_SOURCES(Z_REF_P(orig_object_ptr))
			 && !zend_verify_ref_array_assignable(Z_REF_P(orig_object_ptr))) {
				dim = NULL;


				UNDEF_RESULT();
			} else {
				HashTable *ht = zend_new_array(8);
				uint8_t old_type = Z_TYPE_P(object_ptr);

				ZVAL_ARR(object_ptr, ht);
				if (UNEXPECTED(old_type == IS_FALSE)) {
					GC_ADDREF(ht);
					zend_false_to_array_deprecated();
					if (UNEXPECTED(GC_DELREF(ht) == 0)) {
						zend_array_destroy(ht);
						goto assign_dim_error;
					}
				}
				goto try_assign_dim_array;
			}
		} else {
			zend_use_scalar_as_array();
			dim = NULL;
assign_dim_error:


			if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
				ZVAL_NULL(EX_VAR(opline->result.var));
			}
		}
	}
	if (IS_UNUSED != IS_UNUSED) {


	}
	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
	/* assign_dim has two opcodes! */
	ZEND_VM_NEXT_OPCODE_EX(1, 2);
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_INIT_STATIC_METHOD_CALL_SPEC_VAR_UNUSED_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *function_name;
	zend_class_entry *ce;
	uint32_t call_info;
	zend_function *fbc;
	zend_execute_data *call;

	SAVE_OPLINE();

	if (IS_VAR == IS_CONST) {
		/* no function found. try a static method in class */
		ce = CACHED_PTR(opline->result.num);
		if (UNEXPECTED(ce == NULL)) {
			ce = zend_fetch_class_by_name(Z_STR_P(RT_CONSTANT(opline, opline->op1)), Z_STR_P(RT_CONSTANT(opline, opline->op1) + 1), ZEND_FETCH_CLASS_DEFAULT | ZEND_FETCH_CLASS_EXCEPTION);
			if (UNEXPECTED(ce == NULL)) {


				HANDLE_EXCEPTION();
			}
			if (IS_UNUSED != IS_CONST) {
				CACHE_PTR(opline->result.num, ce);
			}
		}
	} else if (IS_VAR == IS_UNUSED) {
		ce = zend_fetch_class(NULL, opline->op1.num);
		if (UNEXPECTED(ce == NULL)) {


			HANDLE_EXCEPTION();
		}
	} else {
		ce = Z_CE_P(EX_VAR(opline->op1.var));
	}

	if (IS_VAR == IS_CONST &&
	    IS_UNUSED == IS_CONST &&
	    EXPECTED((fbc = CACHED_PTR(opline->result.num + sizeof(void*))) != NULL)) {
		/* nothing to do */
	} else if (IS_VAR != IS_CONST &&
	           IS_UNUSED == IS_CONST &&
	           EXPECTED(CACHED_PTR(opline->result.num) == ce)) {
		fbc = CACHED_PTR(opline->result.num + sizeof(void*));
	} else if (IS_UNUSED != IS_UNUSED) {
		function_name = NULL;
		if (IS_UNUSED != IS_CONST) {
			if (UNEXPECTED(Z_TYPE_P(function_name) != IS_STRING)) {
				do {
					if (IS_UNUSED & (IS_VAR|IS_CV) && Z_ISREF_P(function_name)) {
						function_name = Z_REFVAL_P(function_name);
						if (EXPECTED(Z_TYPE_P(function_name) == IS_STRING)) {
							break;
						}
					} else if (IS_UNUSED == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) {
						ZVAL_UNDEFINED_OP2();
						if (UNEXPECTED(EG(exception) != NULL)) {
							HANDLE_EXCEPTION();
						}
					}
					zend_throw_error(NULL, "Method name must be a string");


					HANDLE_EXCEPTION();
				} while (0);
			}
		}

		if (ce->get_static_method) {
			fbc = ce->get_static_method(ce, Z_STR_P(function_name));
		} else {
			fbc = zend_std_get_static_method(ce, Z_STR_P(function_name), ((IS_UNUSED == IS_CONST) ? (RT_CONSTANT(opline, opline->op2) + 1) : NULL));
		}
		if (UNEXPECTED(fbc == NULL)) {
			if (EXPECTED(!EG(exception))) {
				zend_undefined_method(ce, Z_STR_P(function_name));
			}


			HANDLE_EXCEPTION();
		}
		if (IS_UNUSED == IS_CONST &&
		    EXPECTED(!(fbc->common.fn_flags & (ZEND_ACC_CALL_VIA_TRAMPOLINE|ZEND_ACC_NEVER_CACHE))) &&
			EXPECTED(!(fbc->common.scope->ce_flags & ZEND_ACC_TRAIT))) {
			CACHE_POLYMORPHIC_PTR(opline->result.num, ce, fbc);
		}
		if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!RUN_TIME_CACHE(&fbc->op_array))) {
			init_func_run_time_cache(&fbc->op_array);
		}
		if (IS_UNUSED != IS_CONST) {


		}
	} else {
		if (UNEXPECTED(ce->constructor == NULL)) {
			zend_throw_error(NULL, "Cannot call constructor");
			HANDLE_EXCEPTION();
		}
		if (Z_TYPE(EX(This)) == IS_OBJECT && Z_OBJ(EX(This))->ce != ce->constructor->common.scope && (ce->constructor->common.fn_flags & ZEND_ACC_PRIVATE)) {
			zend_throw_error(NULL, "Cannot call private %s::__construct()", ZSTR_VAL(ce->name));
			HANDLE_EXCEPTION();
		}
		fbc = ce->constructor;
		if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!RUN_TIME_CACHE(&fbc->op_array))) {
			init_func_run_time_cache(&fbc->op_array);
		}
	}

	if (!(fbc->common.fn_flags & ZEND_ACC_STATIC)) {
		if (Z_TYPE(EX(This)) == IS_OBJECT && instanceof_function(Z_OBJCE(EX(This)), ce)) {
			ce = (zend_class_entry*)Z_OBJ(EX(This));
			call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_HAS_THIS;
		} else {
			zend_non_static_method_call(fbc);
			HANDLE_EXCEPTION();
		}
	} else {
		/* previous opcode is ZEND_FETCH_CLASS */
		if (IS_VAR == IS_UNUSED
		 && ((opline->op1.num & ZEND_FETCH_CLASS_MASK) == ZEND_FETCH_CLASS_PARENT ||
		     (opline->op1.num & ZEND_FETCH_CLASS_MASK) == ZEND_FETCH_CLASS_SELF)) {
			if (Z_TYPE(EX(This)) == IS_OBJECT) {
				ce = Z_OBJCE(EX(This));
			} else {
				ce = Z_CE(EX(This));
			}
		}
		call_info = ZEND_CALL_NESTED_FUNCTION;
	}

	call = zend_vm_stack_push_call_frame(call_info,
		fbc, opline->extended_value, ce);
	call->prev_execute_data = EX(call);
	EX(call) = call;

	ZEND_VM_NEXT_OPCODE();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_VERIFY_RETURN_TYPE_SPEC_VAR_UNUSED_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	if (IS_VAR == IS_UNUSED) {
		SAVE_OPLINE();
		zend_verify_missing_return_type(EX(func));
		HANDLE_EXCEPTION();
	} else {
/* prevents "undefined variable opline" errors */
#if 0 || (IS_VAR != IS_UNUSED)
		USE_OPLINE
		zval *retval_ref, *retval_ptr;
		zend_arg_info *ret_info = EX(func)->common.arg_info - 1;
		retval_ref = retval_ptr = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);

		if (IS_VAR == IS_CONST) {
			ZVAL_COPY(EX_VAR(opline->result.var), retval_ptr);
			retval_ref = retval_ptr = EX_VAR(opline->result.var);
		} else if (IS_VAR == IS_VAR) {
			if (UNEXPECTED(Z_TYPE_P(retval_ptr) == IS_INDIRECT)) {
				retval_ref = retval_ptr = Z_INDIRECT_P(retval_ptr);
			}
			ZVAL_DEREF(retval_ptr);
		} else if (IS_VAR == IS_CV) {
			ZVAL_DEREF(retval_ptr);
		}

		if (EXPECTED(ZEND_TYPE_CONTAINS_CODE(ret_info->type, Z_TYPE_P(retval_ptr)))) {
			ZEND_VM_NEXT_OPCODE();
		}

		if (IS_VAR == IS_CV && UNEXPECTED(Z_ISUNDEF_P(retval_ptr))) {
			SAVE_OPLINE();
			retval_ref = retval_ptr = ZVAL_UNDEFINED_OP1();
			if (UNEXPECTED(EG(exception))) {
				HANDLE_EXCEPTION();
			}
			if (ZEND_TYPE_FULL_MASK(ret_info->type) & MAY_BE_NULL) {
				ZEND_VM_NEXT_OPCODE();
			}
		}

		zend_reference *ref = NULL;
		if (UNEXPECTED(retval_ref != retval_ptr)) {
			if (UNEXPECTED(EX(func)->op_array.fn_flags & ZEND_ACC_RETURN_REFERENCE)) {
				ref = Z_REF_P(retval_ref);
			} else {
				/* A cast might happen - unwrap the reference if this is a by-value return */
				if (Z_REFCOUNT_P(retval_ref) == 1) {
					ZVAL_UNREF(retval_ref);
				} else {
					Z_DELREF_P(retval_ref);
					ZVAL_COPY(retval_ref, retval_ptr);
				}
				retval_ptr = retval_ref;
			}
		}

		SAVE_OPLINE();
		if (UNEXPECTED(!zend_check_type_slow(&ret_info->type, retval_ptr, ref, 1, 0))) {
			zend_verify_return_error(EX(func), retval_ptr);
			HANDLE_EXCEPTION();
		}
		ZEND_VM_NEXT_OPCODE();
#endif
	}
}

static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_SEND_VAR_SPEC_VAR_UNUSED_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *varptr, *arg;

	if (IS_UNUSED == IS_CONST) {
		SAVE_OPLINE();
		zend_string *arg_name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
		uint32_t arg_num;
		arg = zend_handle_named_arg(&EX(call), arg_name, &arg_num, CACHE_ADDR(opline->result.num));
		if (UNEXPECTED(!arg)) {
			zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
			HANDLE_EXCEPTION();
		}
	} else {
		arg = ZEND_CALL_VAR(EX(call), opline->result.var);
	}

	varptr = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
	if (IS_VAR == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(varptr) == IS_UNDEF)) {
		SAVE_OPLINE();
		ZVAL_UNDEFINED_OP1();
		ZVAL_NULL(arg);
		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
	}

	if (IS_VAR == IS_CV) {
		ZVAL_COPY_DEREF(arg, varptr);
	} else /* if (IS_VAR == IS_VAR) */ {
		if (UNEXPECTED(Z_ISREF_P(varptr))) {
			zend_refcounted *ref = Z_COUNTED_P(varptr);

			varptr = Z_REFVAL_P(varptr);
			ZVAL_COPY_VALUE(arg, varptr);
			if (UNEXPECTED(GC_DELREF(ref) == 0)) {
				efree_size(ref, sizeof(zend_reference));
			} else if (Z_OPT_REFCOUNTED_P(arg)) {
				Z_ADDREF_P(arg);
			}
		} else {
			ZVAL_COPY_VALUE(arg, varptr);
		}
	}

	ZEND_VM_NEXT_OPCODE();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_SEND_VAR_NO_REF_SPEC_VAR_UNUSED_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *varptr, *arg;

	if (IS_UNUSED == IS_CONST) {
		SAVE_OPLINE();
		zend_string *arg_name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
		uint32_t arg_num;
		arg = zend_handle_named_arg(&EX(call), arg_name, &arg_num, CACHE_ADDR(opline->result.num));
		if (UNEXPECTED(!arg)) {
			zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
			HANDLE_EXCEPTION();
		}
	} else {
		arg = ZEND_CALL_VAR(EX(call), opline->result.var);
	}

	varptr = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
	ZVAL_COPY_VALUE(arg, varptr);

	if (EXPECTED(Z_ISREF_P(varptr))) {
		ZEND_VM_NEXT_OPCODE();
	}

	SAVE_OPLINE();
	ZVAL_NEW_REF(arg, arg);
	zend_error(E_NOTICE, "Only variables should be passed by reference");
	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_SEND_VAR_NO_REF_EX_SPEC_VAR_UNUSED_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *varptr, *arg;
	uint32_t arg_num;

	if (IS_UNUSED == IS_CONST) {
		SAVE_OPLINE();
		zend_string *arg_name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
		arg = zend_handle_named_arg(&EX(call), arg_name, &arg_num, CACHE_ADDR(opline->result.num));
		if (UNEXPECTED(!arg)) {
			zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
			HANDLE_EXCEPTION();
		}
	} else {
		arg = ZEND_CALL_VAR(EX(call), opline->result.var);
		arg_num = opline->op2.num;
	}

	if (EXPECTED(0)) {
		if (!QUICK_ARG_SHOULD_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
			goto send_var;
		}

		varptr = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
		ZVAL_COPY_VALUE(arg, varptr);

		if (EXPECTED(Z_ISREF_P(varptr) ||
		    QUICK_ARG_MAY_BE_SENT_BY_REF(EX(call)->func, arg_num))) {
			ZEND_VM_NEXT_OPCODE();
		}
	} else {
		if (!ARG_SHOULD_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
			goto send_var;
		}

		varptr = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
		ZVAL_COPY_VALUE(arg, varptr);

		if (EXPECTED(Z_ISREF_P(varptr) ||
		    ARG_MAY_BE_SENT_BY_REF(EX(call)->func, arg_num))) {
			ZEND_VM_NEXT_OPCODE();
		}
	}

	SAVE_OPLINE();
	ZVAL_NEW_REF(arg, arg);
	zend_error(E_NOTICE, "Only variables should be passed by reference");
	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();

send_var:
	varptr = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
	if (UNEXPECTED(Z_ISREF_P(varptr))) {
		zend_refcounted *ref = Z_COUNTED_P(varptr);

		varptr = Z_REFVAL_P(varptr);
		ZVAL_COPY_VALUE(arg, varptr);
		if (UNEXPECTED(GC_DELREF(ref) == 0)) {
			efree_size(ref, sizeof(zend_reference));
		} else if (Z_OPT_REFCOUNTED_P(arg)) {
			Z_ADDREF_P(arg);
		}
	} else {
		ZVAL_COPY_VALUE(arg, varptr);
	}
	ZEND_VM_NEXT_OPCODE();
}

static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_SEND_VAR_NO_REF_EX_SPEC_VAR_UNUSED_QUICK_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *varptr, *arg;
	uint32_t arg_num;

	if (IS_UNUSED == IS_CONST) {
		SAVE_OPLINE();
		zend_string *arg_name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
		arg = zend_handle_named_arg(&EX(call), arg_name, &arg_num, CACHE_ADDR(opline->result.num));
		if (UNEXPECTED(!arg)) {
			zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
			HANDLE_EXCEPTION();
		}
	} else {
		arg = ZEND_CALL_VAR(EX(call), opline->result.var);
		arg_num = opline->op2.num;
	}

	if (EXPECTED(1)) {
		if (!QUICK_ARG_SHOULD_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
			goto send_var;
		}

		varptr = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
		ZVAL_COPY_VALUE(arg, varptr);

		if (EXPECTED(Z_ISREF_P(varptr) ||
		    QUICK_ARG_MAY_BE_SENT_BY_REF(EX(call)->func, arg_num))) {
			ZEND_VM_NEXT_OPCODE();
		}
	} else {
		if (!ARG_SHOULD_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
			goto send_var;
		}

		varptr = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
		ZVAL_COPY_VALUE(arg, varptr);

		if (EXPECTED(Z_ISREF_P(varptr) ||
		    ARG_MAY_BE_SENT_BY_REF(EX(call)->func, arg_num))) {
			ZEND_VM_NEXT_OPCODE();
		}
	}

	SAVE_OPLINE();
	ZVAL_NEW_REF(arg, arg);
	zend_error(E_NOTICE, "Only variables should be passed by reference");
	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();

send_var:
	varptr = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
	if (UNEXPECTED(Z_ISREF_P(varptr))) {
		zend_refcounted *ref = Z_COUNTED_P(varptr);

		varptr = Z_REFVAL_P(varptr);
		ZVAL_COPY_VALUE(arg, varptr);
		if (UNEXPECTED(GC_DELREF(ref) == 0)) {
			efree_size(ref, sizeof(zend_reference));
		} else if (Z_OPT_REFCOUNTED_P(arg)) {
			Z_ADDREF_P(arg);
		}
	} else {
		ZVAL_COPY_VALUE(arg, varptr);
	}
	ZEND_VM_NEXT_OPCODE();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_SEND_REF_SPEC_VAR_UNUSED_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *varptr, *arg;

	SAVE_OPLINE();
	if (IS_UNUSED == IS_CONST) {
		zend_string *arg_name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
		uint32_t arg_num;
		arg = zend_handle_named_arg(&EX(call), arg_name, &arg_num, CACHE_ADDR(opline->result.num));
		if (UNEXPECTED(!arg)) {
			zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
			HANDLE_EXCEPTION();
		}
	} else {
		arg = ZEND_CALL_VAR(EX(call), opline->result.var);
	}

	varptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
	if (Z_ISREF_P(varptr)) {
		Z_ADDREF_P(varptr);
	} else {
		ZVAL_MAKE_REF_EX(varptr, 2);
	}
	ZVAL_REF(arg, Z_REF_P(varptr));

	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
	ZEND_VM_NEXT_OPCODE();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_SEND_VAR_EX_SPEC_VAR_UNUSED_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *varptr, *arg;
	uint32_t arg_num;

	if (IS_UNUSED == IS_CONST) {
		SAVE_OPLINE();
		zend_string *arg_name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
		arg = zend_handle_named_arg(&EX(call), arg_name, &arg_num, CACHE_ADDR(opline->result.num));
		if (UNEXPECTED(!arg)) {
			zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
			HANDLE_EXCEPTION();
		}
	} else {
		arg = ZEND_CALL_VAR(EX(call), opline->result.var);
		arg_num = opline->op2.num;
	}

	if (EXPECTED(0)) {
		if (QUICK_ARG_SHOULD_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
			goto send_var_by_ref;
		}
	} else if (ARG_SHOULD_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
send_var_by_ref:
		varptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
		if (Z_ISREF_P(varptr)) {
			Z_ADDREF_P(varptr);
		} else {
			ZVAL_MAKE_REF_EX(varptr, 2);
		}
		ZVAL_REF(arg, Z_REF_P(varptr));

		zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
		ZEND_VM_NEXT_OPCODE();
	}

	varptr = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
	if (IS_VAR == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(varptr) == IS_UNDEF)) {
		SAVE_OPLINE();
		ZVAL_UNDEFINED_OP1();
		ZVAL_NULL(arg);
		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
	}

	if (IS_VAR == IS_CV) {
		ZVAL_COPY_DEREF(arg, varptr);
	} else /* if (IS_VAR == IS_VAR) */ {
		if (UNEXPECTED(Z_ISREF_P(varptr))) {
			zend_refcounted *ref = Z_COUNTED_P(varptr);

			varptr = Z_REFVAL_P(varptr);
			ZVAL_COPY_VALUE(arg, varptr);
			if (UNEXPECTED(GC_DELREF(ref) == 0)) {
				efree_size(ref, sizeof(zend_reference));
			} else if (Z_OPT_REFCOUNTED_P(arg)) {
				Z_ADDREF_P(arg);
			}
		} else {
			ZVAL_COPY_VALUE(arg, varptr);
		}
	}

	ZEND_VM_NEXT_OPCODE();
}

static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_SEND_VAR_EX_SPEC_VAR_UNUSED_QUICK_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *varptr, *arg;
	uint32_t arg_num;

	if (IS_UNUSED == IS_CONST) {
		SAVE_OPLINE();
		zend_string *arg_name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
		arg = zend_handle_named_arg(&EX(call), arg_name, &arg_num, CACHE_ADDR(opline->result.num));
		if (UNEXPECTED(!arg)) {
			zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
			HANDLE_EXCEPTION();
		}
	} else {
		arg = ZEND_CALL_VAR(EX(call), opline->result.var);
		arg_num = opline->op2.num;
	}

	if (EXPECTED(1)) {
		if (QUICK_ARG_SHOULD_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
			goto send_var_by_ref;
		}
	} else if (ARG_SHOULD_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
send_var_by_ref:
		varptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
		if (Z_ISREF_P(varptr)) {
			Z_ADDREF_P(varptr);
		} else {
			ZVAL_MAKE_REF_EX(varptr, 2);
		}
		ZVAL_REF(arg, Z_REF_P(varptr));

		zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
		ZEND_VM_NEXT_OPCODE();
	}

	varptr = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
	if (IS_VAR == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(varptr) == IS_UNDEF)) {
		SAVE_OPLINE();
		ZVAL_UNDEFINED_OP1();
		ZVAL_NULL(arg);
		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
	}

	if (IS_VAR == IS_CV) {
		ZVAL_COPY_DEREF(arg, varptr);
	} else /* if (IS_VAR == IS_VAR) */ {
		if (UNEXPECTED(Z_ISREF_P(varptr))) {
			zend_refcounted *ref = Z_COUNTED_P(varptr);

			varptr = Z_REFVAL_P(varptr);
			ZVAL_COPY_VALUE(arg, varptr);
			if (UNEXPECTED(GC_DELREF(ref) == 0)) {
				efree_size(ref, sizeof(zend_reference));
			} else if (Z_OPT_REFCOUNTED_P(arg)) {
				Z_ADDREF_P(arg);
			}
		} else {
			ZVAL_COPY_VALUE(arg, varptr);
		}
	}

	ZEND_VM_NEXT_OPCODE();
}

static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_SEND_FUNC_ARG_SPEC_VAR_UNUSED_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *varptr, *arg;

	if (IS_UNUSED == IS_CONST) {
		// TODO: Would it make sense to share the cache slot with CHECK_FUNC_ARG?
		SAVE_OPLINE();
		zend_string *arg_name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
		uint32_t arg_num;
		arg = zend_handle_named_arg(&EX(call), arg_name, &arg_num, CACHE_ADDR(opline->result.num));
		if (UNEXPECTED(!arg)) {
			zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
			HANDLE_EXCEPTION();
		}
	} else {
		arg = ZEND_CALL_VAR(EX(call), opline->result.var);
	}

	if (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) {
		varptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
		if (Z_ISREF_P(varptr)) {
			Z_ADDREF_P(varptr);
		} else {
			ZVAL_MAKE_REF_EX(varptr, 2);
		}
		ZVAL_REF(arg, Z_REF_P(varptr));

		zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
		ZEND_VM_NEXT_OPCODE();
	}

	varptr = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);

	if (UNEXPECTED(Z_ISREF_P(varptr))) {
		zend_refcounted *ref = Z_COUNTED_P(varptr);

		varptr = Z_REFVAL_P(varptr);
		ZVAL_COPY_VALUE(arg, varptr);
		if (UNEXPECTED(GC_DELREF(ref) == 0)) {
			efree_size(ref, sizeof(zend_reference));
		} else if (Z_OPT_REFCOUNTED_P(arg)) {
			Z_ADDREF_P(arg);
		}
	} else {
		ZVAL_COPY_VALUE(arg, varptr);
	}

	ZEND_VM_NEXT_OPCODE();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_NEW_SPEC_VAR_UNUSED_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *result;
	zend_function *constructor;
	zend_class_entry *ce;
	zend_execute_data *call;

	SAVE_OPLINE();
	if (IS_VAR == IS_CONST) {
		ce = CACHED_PTR(opline->op2.num);
		if (UNEXPECTED(ce == NULL)) {
			ce = zend_fetch_class_by_name(Z_STR_P(RT_CONSTANT(opline, opline->op1)), Z_STR_P(RT_CONSTANT(opline, opline->op1) + 1), ZEND_FETCH_CLASS_DEFAULT | ZEND_FETCH_CLASS_EXCEPTION);
			if (UNEXPECTED(ce == NULL)) {
				ZVAL_UNDEF(EX_VAR(opline->result.var));
				HANDLE_EXCEPTION();
			}
			CACHE_PTR(opline->op2.num, ce);
		}
	} else if (IS_VAR == IS_UNUSED) {
		ce = zend_fetch_class(NULL, opline->op1.num);
		if (UNEXPECTED(ce == NULL)) {
			ZVAL_UNDEF(EX_VAR(opline->result.var));
			HANDLE_EXCEPTION();
		}
	} else {
		ce = Z_CE_P(EX_VAR(opline->op1.var));
	}

	result = EX_VAR(opline->result.var);
	if (UNEXPECTED(object_init_ex(result, ce) != SUCCESS)) {
		ZVAL_UNDEF(result);
		HANDLE_EXCEPTION();
	}

	constructor = Z_OBJ_HT_P(result)->get_constructor(Z_OBJ_P(result));
	if (constructor == NULL) {
		/* If there are no arguments, skip over the DO_FCALL opcode. We check if the next
		 * opcode is DO_FCALL in case EXT instructions are used. */
		if (EXPECTED(opline->extended_value == 0 && (opline+1)->opcode == ZEND_DO_FCALL)) {
			ZEND_VM_NEXT_OPCODE_EX(1, 2);
		}

		if (UNEXPECTED(EG(exception))) {
			HANDLE_EXCEPTION();
		}

		/* Perform a dummy function call */
		call = zend_vm_stack_push_call_frame(
			ZEND_CALL_FUNCTION, (zend_function *) &zend_pass_function,
			opline->extended_value, NULL);
	} else {
		if (EXPECTED(constructor->type == ZEND_USER_FUNCTION) && UNEXPECTED(!RUN_TIME_CACHE(&constructor->op_array))) {
			init_func_run_time_cache(&constructor->op_array);
		}
		/* We are not handling overloaded classes right now */
		call = zend_vm_stack_push_call_frame(
			ZEND_CALL_FUNCTION | ZEND_CALL_RELEASE_THIS | ZEND_CALL_HAS_THIS,
			constructor,
			opline->extended_value,
			Z_OBJ_P(result));
		Z_ADDREF_P(result);
	}

	call->prev_execute_data = EX(call);
	EX(call) = call;
	ZEND_VM_NEXT_OPCODE();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_UNUSED_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *expr_ptr, new_expr;

	SAVE_OPLINE();
	if ((IS_VAR == IS_VAR || IS_VAR == IS_CV) &&
	    UNEXPECTED(opline->extended_value & ZEND_ARRAY_ELEMENT_REF)) {
		expr_ptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
		if (Z_ISREF_P(expr_ptr)) {
			Z_ADDREF_P(expr_ptr);
		} else {
			ZVAL_MAKE_REF_EX(expr_ptr, 2);
		}
		zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
	} else {
		expr_ptr = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
		if (IS_VAR == IS_TMP_VAR) {
			/* pass */
		} else if (IS_VAR == IS_CONST) {
			Z_TRY_ADDREF_P(expr_ptr);
		} else if (IS_VAR == IS_CV) {
			ZVAL_DEREF(expr_ptr);
			Z_TRY_ADDREF_P(expr_ptr);
		} else /* if (IS_VAR == IS_VAR) */ {
			if (UNEXPECTED(Z_ISREF_P(expr_ptr))) {
				zend_refcounted *ref = Z_COUNTED_P(expr_ptr);

				expr_ptr = Z_REFVAL_P(expr_ptr);
				if (UNEXPECTED(GC_DELREF(ref) == 0)) {
					ZVAL_COPY_VALUE(&new_expr, expr_ptr);
					expr_ptr = &new_expr;
					efree_size(ref, sizeof(zend_reference));
				} else if (Z_OPT_REFCOUNTED_P(expr_ptr)) {
					Z_ADDREF_P(expr_ptr);
				}
			}
		}
	}

	if (IS_UNUSED != IS_UNUSED) {
		zval *offset = NULL;
		zend_string *str;
		zend_ulong hval;

add_again:
		if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) {
			str = Z_STR_P(offset);
			if (IS_UNUSED != IS_CONST) {
				if (ZEND_HANDLE_NUMERIC(str, hval)) {
					goto num_index;
				}
			}
str_index:
			zend_hash_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), str, expr_ptr);
		} else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
			hval = Z_LVAL_P(offset);
num_index:
			zend_hash_index_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), hval, expr_ptr);
		} else if ((IS_UNUSED & (IS_VAR|IS_CV)) && EXPECTED(Z_TYPE_P(offset) == IS_REFERENCE)) {
			offset = Z_REFVAL_P(offset);
			goto add_again;
		} else if (UNEXPECTED(Z_TYPE_P(offset) == IS_NULL)) {
			zval tmp;
			if (IS_VAR == IS_CV || IS_VAR == IS_VAR) {
				ZVAL_COPY(&tmp, expr_ptr);
			}
			zend_error(E_DEPRECATED, "Using null as an array offset is deprecated, use an empty string instead");
			if (IS_VAR == IS_CV || IS_VAR == IS_VAR) {
				/* A userland error handler can do funky things to the expression, so reset it */
				zval_ptr_dtor(expr_ptr);
				ZVAL_COPY_VALUE(expr_ptr, &tmp);
			}
			if (UNEXPECTED(EG(exception))) {
				zval_ptr_dtor_nogc(expr_ptr);
				HANDLE_EXCEPTION();
			}
			str = ZSTR_EMPTY_ALLOC();
			goto str_index;
		} else if (Z_TYPE_P(offset) == IS_DOUBLE) {
			hval = zend_dval_to_lval_safe(Z_DVAL_P(offset));
			goto num_index;
		} else if (Z_TYPE_P(offset) == IS_FALSE) {
			hval = 0;
			goto num_index;
		} else if (Z_TYPE_P(offset) == IS_TRUE) {
			hval = 1;
			goto num_index;
		} else if (Z_TYPE_P(offset) == IS_RESOURCE) {
			zend_use_resource_as_offset(offset);
			hval = Z_RES_HANDLE_P(offset);
			goto num_index;
		} else if (IS_UNUSED == IS_CV && Z_TYPE_P(offset) == IS_UNDEF) {
			ZVAL_UNDEFINED_OP2();
			str = ZSTR_EMPTY_ALLOC();
			goto str_index;
		} else {
			zend_illegal_array_offset_access(offset);
			zval_ptr_dtor_nogc(expr_ptr);
		}


	} else {
		if (!zend_hash_next_index_insert(Z_ARRVAL_P(EX_VAR(opline->result.var)), expr_ptr)) {
			zend_cannot_add_element();
			zval_ptr_dtor_nogc(expr_ptr);
		}
	}
	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_INIT_ARRAY_SPEC_VAR_UNUSED_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	zval *array;
	uint32_t size;
	USE_OPLINE

	SAVE_OPLINE();
	array = EX_VAR(opline->result.var);
	if (IS_VAR != IS_UNUSED) {
		size = opline->extended_value >> ZEND_ARRAY_SIZE_SHIFT;
		ZVAL_ARR(array, zend_new_array(size));
		/* Explicitly initialize array as not-packed if flag is set */
		if (opline->extended_value & ZEND_ARRAY_NOT_PACKED) {
			zend_hash_real_init_mixed(Z_ARRVAL_P(array));
		}
		ZEND_VM_TAIL_CALL(ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_UNUSED_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
	} else {
		ZVAL_ARR(array, zend_new_array(0));
		ZEND_VM_NEXT_OPCODE();
	}
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_SEPARATE_SPEC_VAR_UNUSED_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *var_ptr;

	var_ptr = EX_VAR(opline->op1.var);
	if (UNEXPECTED(Z_ISREF_P(var_ptr))) {
		if (UNEXPECTED(Z_REFCOUNT_P(var_ptr) == 1)) {
			ZVAL_UNREF(var_ptr);
		}
	}

	ZEND_VM_NEXT_OPCODE();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_YIELD_SPEC_VAR_UNUSED_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE

	zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C);

	SAVE_OPLINE();
	if (UNEXPECTED(generator->flags & ZEND_GENERATOR_FORCED_CLOSE)) {
		ZEND_VM_TAIL_CALL(zend_yield_in_closed_generator_helper_SPEC_TAILCALL(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
	}

	/* Destroy the previously yielded value */
	zval_ptr_dtor(&generator->value);

	/* Destroy the previously yielded key */
	zval_ptr_dtor(&generator->key);

	/* Set the new yielded value */
	if (IS_VAR != IS_UNUSED) {
		if (UNEXPECTED(EX(func)->op_array.fn_flags & ZEND_ACC_RETURN_REFERENCE)) {
			/* Constants and temporary variables aren't yieldable by reference,
			 * but we still allow them with a notice. */
			if (IS_VAR & (IS_CONST|IS_TMP_VAR)) {
				zval *value;

				zend_error(E_NOTICE, "Only variable references should be yielded by reference");

				value = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
				ZVAL_COPY_VALUE(&generator->value, value);
				if (IS_VAR == IS_CONST) {
					if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
						Z_ADDREF(generator->value);
					}
				}
			} else {
				zval *value_ptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);

				/* If a function call result is yielded and the function did
				 * not return by reference we throw a notice. */
				do {
					if (IS_VAR == IS_VAR) {
						ZEND_ASSERT(value_ptr != &EG(uninitialized_zval));
						if (opline->extended_value == ZEND_RETURNS_FUNCTION
						 && !Z_ISREF_P(value_ptr)) {
							zend_error(E_NOTICE, "Only variable references should be yielded by reference");
							ZVAL_COPY(&generator->value, value_ptr);
							break;
						}
					}
					if (Z_ISREF_P(value_ptr)) {
						Z_ADDREF_P(value_ptr);
					} else {
						ZVAL_MAKE_REF_EX(value_ptr, 2);
					}
					ZVAL_REF(&generator->value, Z_REF_P(value_ptr));
				} while (0);

				zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
			}
		} else {
			zval *value = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);

			/* Consts, temporary variables and references need copying */
			if (IS_VAR == IS_CONST) {
				ZVAL_COPY_VALUE(&generator->value, value);
				if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
					Z_ADDREF(generator->value);
				}
			} else if (IS_VAR == IS_TMP_VAR) {
				ZVAL_COPY_VALUE(&generator->value, value);
			} else if ((IS_VAR & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) {
				ZVAL_COPY(&generator->value, Z_REFVAL_P(value));
				zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
			} else {
				ZVAL_COPY_VALUE(&generator->value, value);
				if (IS_VAR == IS_CV) {
					if (Z_OPT_REFCOUNTED_P(value)) Z_ADDREF_P(value);
				}
			}
		}
	} else {
		/* If no value was specified yield null */
		ZVAL_NULL(&generator->value);
	}

	/* Set the new yielded key */
	if (IS_UNUSED != IS_UNUSED) {
		zval *key = NULL;
		if ((IS_UNUSED & (IS_CV|IS_VAR)) && UNEXPECTED(Z_TYPE_P(key) == IS_REFERENCE)) {
			key = Z_REFVAL_P(key);
		}
		ZVAL_COPY(&generator->key, key);


		if (Z_TYPE(generator->key) == IS_LONG
		    && Z_LVAL(generator->key) > generator->largest_used_integer_key
		) {
			generator->largest_used_integer_key = Z_LVAL(generator->key);
		}
	} else {
		/* If no key was specified we use auto-increment keys */
		generator->largest_used_integer_key++;
		ZVAL_LONG(&generator->key, generator->largest_used_integer_key);
	}

	if (RETURN_VALUE_USED(opline)) {
		/* If the return value of yield is used set the send
		 * target and initialize it to NULL */
		generator->send_target = EX_VAR(opline->result.var);
		ZVAL_NULL(generator->send_target);
	} else {
		generator->send_target = NULL;
	}

	/* The GOTO VM uses a local opline variable. We need to set the opline
	 * variable in execute_data so we don't resume at an old position. */
	SAVE_OPLINE();

	ZEND_VM_RETURN();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_MAKE_REF_SPEC_VAR_UNUSED_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1 = EX_VAR(opline->op1.var);

	if (IS_VAR == IS_CV) {
		if (UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
			ZVAL_NEW_EMPTY_REF(op1);
			Z_SET_REFCOUNT_P(op1, 2);
			ZVAL_NULL(Z_REFVAL_P(op1));
			ZVAL_REF(EX_VAR(opline->result.var), Z_REF_P(op1));
		} else {
			if (Z_ISREF_P(op1)) {
				Z_ADDREF_P(op1);
			} else {
				ZVAL_MAKE_REF_EX(op1, 2);
			}
			ZVAL_REF(EX_VAR(opline->result.var), Z_REF_P(op1));
		}
	} else if (EXPECTED(Z_TYPE_P(op1) == IS_INDIRECT)) {
		op1 = Z_INDIRECT_P(op1);
		if (EXPECTED(!Z_ISREF_P(op1))) {
			ZVAL_MAKE_REF_EX(op1, 2);
		} else {
			GC_ADDREF(Z_REF_P(op1));
		}
		ZVAL_REF(EX_VAR(opline->result.var), Z_REF_P(op1));
	} else {
		ZVAL_COPY_VALUE(EX_VAR(opline->result.var), op1);
	}
	ZEND_VM_NEXT_OPCODE();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_GET_TYPE_SPEC_VAR_UNUSED_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1;
	zend_string *type;

	SAVE_OPLINE();
	op1 = _get_zval_ptr_var_deref(opline->op1.var EXECUTE_DATA_CC);
	type = zend_zval_get_legacy_type(op1);
	if (EXPECTED(type)) {
		ZVAL_INTERNED_STR(EX_VAR(opline->result.var), type);
	} else {
		ZVAL_STRING(EX_VAR(opline->result.var), "unknown type");
	}
	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_SEND_VAR_EX_SIMPLE_SPEC_VAR_UNUSED_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *varptr, *arg;
	uint32_t arg_num = opline->op2.num;

	if (QUICK_ARG_SHOULD_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
		ZEND_VM_TAIL_CALL(ZEND_SEND_REF_SPEC_VAR_UNUSED_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
	}

	varptr = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
	arg = ZEND_CALL_VAR(EX(call), opline->result.var);

	if (IS_VAR == IS_CV) {
		ZVAL_COPY(arg, varptr);
	} else /* if (IS_VAR == IS_VAR) */ {
		ZVAL_COPY_VALUE(arg, varptr);
	}

	ZEND_VM_NEXT_OPCODE();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_CASE_STRICT_SPEC_VAR_CV_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;
	bool result;

	SAVE_OPLINE();
	op1 = _get_zval_ptr_var_deref(opline->op1.var EXECUTE_DATA_CC);
	op2 = _get_zval_ptr_cv_deref_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
	result = fast_is_identical_function(op1, op2);


	ZEND_VM_SMART_BRANCH(result, 1);
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_ASSIGN_OBJ_OP_SPEC_VAR_CV_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *object;
	zval *property;
	zval *value;
	zval *zptr;
	void *_cache_slot[3] = {0};
	void **cache_slot;
	zend_property_info *prop_info;
	zend_object *zobj;
	zend_string *name, *tmp_name;

	SAVE_OPLINE();
	object = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
	property = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);

	do {
		value = get_op_data_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1);

		if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
			if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
				object = Z_REFVAL_P(object);
				goto assign_op_object;
			}
			if (IS_VAR == IS_CV
			 && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
				ZVAL_UNDEFINED_OP1();
			}
			zend_throw_non_object_error(object, property OPLINE_CC EXECUTE_DATA_CC);
			break;
		}

assign_op_object:
		/* here we are sure we are dealing with an object */
		zobj = Z_OBJ_P(object);
		if (IS_CV == IS_CONST) {
			name = Z_STR_P(property);
		} else {
			name = zval_try_get_tmp_string(property, &tmp_name);
			if (UNEXPECTED(!name)) {
				UNDEF_RESULT();
				break;
			}
		}
		cache_slot = (IS_CV == IS_CONST) ? CACHE_ADDR((opline+1)->extended_value) : _cache_slot;
		if (EXPECTED((zptr = zobj->handlers->get_property_ptr_ptr(zobj, name, BP_VAR_RW, cache_slot)) != NULL)) {
			if (UNEXPECTED(Z_ISERROR_P(zptr))) {
				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
					ZVAL_NULL(EX_VAR(opline->result.var));
				}
			} else {
				zend_reference *ref;

				do {
					if (UNEXPECTED(Z_ISREF_P(zptr))) {
						ref = Z_REF_P(zptr);
						zptr = Z_REFVAL_P(zptr);
						if (UNEXPECTED(ZEND_REF_HAS_TYPE_SOURCES(ref))) {
							zend_binary_assign_op_typed_ref(ref, value OPLINE_CC EXECUTE_DATA_CC);
							break;
						}
					}

					prop_info = (zend_property_info*)CACHED_PTR_EX(cache_slot + 2);
					if (prop_info && ZEND_TYPE_IS_SET(prop_info->type)) {
						/* special case for typed properties */
						zend_binary_assign_op_typed_prop(prop_info, zptr, value OPLINE_CC EXECUTE_DATA_CC);
					} else {
						zend_binary_op(zptr, zptr, value OPLINE_CC);
					}
				} while (0);

				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
					ZVAL_COPY(EX_VAR(opline->result.var), zptr);
				}
			}
		} else {
			zend_assign_op_overloaded_property(zobj, name, cache_slot, value OPLINE_CC EXECUTE_DATA_CC);
		}
		if (IS_CV != IS_CONST) {
			zend_tmp_string_release(tmp_name);
		}
	} while (0);

	FREE_OP((opline+1)->op1_type, (opline+1)->op1.var);


	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
	/* assign_obj has two opcodes! */
	ZEND_VM_NEXT_OPCODE_EX(1, 2);
}

/* No specialization for op_types (CONST|TMP|VAR|CV, UNUSED|CONST|TMPVAR) */
static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_ASSIGN_DIM_OP_SPEC_VAR_CV_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *var_ptr;
	zval *value, *container, *dim;
	HashTable *ht;

	SAVE_OPLINE();
	container = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);

	if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
assign_dim_op_array:
		SEPARATE_ARRAY(container);
		ht = Z_ARRVAL_P(container);
assign_dim_op_new_array:
		dim = EX_VAR(opline->op2.var);
		if (IS_CV == IS_UNUSED) {
			var_ptr = zend_hash_next_index_insert(ht, &EG(uninitialized_zval));
			if (UNEXPECTED(!var_ptr)) {
				zend_cannot_add_element();
				goto assign_dim_op_ret_null;
			}
		} else {
			if (IS_CV == IS_CONST) {
				var_ptr = zend_fetch_dimension_address_inner_RW_CONST(ht, dim EXECUTE_DATA_CC);
			} else {
				var_ptr = zend_fetch_dimension_address_inner_RW(ht, dim EXECUTE_DATA_CC);
			}
			if (UNEXPECTED(!var_ptr)) {
				goto assign_dim_op_ret_null;
			}
		}

		value = get_op_data_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1);

		do {
			if (IS_CV != IS_UNUSED && UNEXPECTED(Z_ISREF_P(var_ptr))) {
				zend_reference *ref = Z_REF_P(var_ptr);
				var_ptr = Z_REFVAL_P(var_ptr);
				if (UNEXPECTED(ZEND_REF_HAS_TYPE_SOURCES(ref))) {
					zend_binary_assign_op_typed_ref(ref, value OPLINE_CC EXECUTE_DATA_CC);
					break;
				}
			}
			zend_binary_op(var_ptr, var_ptr, value OPLINE_CC);
		} while (0);

		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
			ZVAL_COPY(EX_VAR(opline->result.var), var_ptr);
		}
		FREE_OP((opline+1)->op1_type, (opline+1)->op1.var);
	} else {
		if (EXPECTED(Z_ISREF_P(container))) {
			container = Z_REFVAL_P(container);
			if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
				goto assign_dim_op_array;
			}
		}

		if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
			zend_object *obj = Z_OBJ_P(container);

			dim = EX_VAR(opline->op2.var);
			if (IS_CV == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
				dim++;
			}
			zend_binary_assign_op_obj_dim(obj, dim OPLINE_CC EXECUTE_DATA_CC);
		} else if (EXPECTED(Z_TYPE_P(container) <= IS_FALSE)) {
			uint8_t old_type;

			if (IS_VAR == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(container) == IS_UNDEF)) {
				ZVAL_UNDEFINED_OP1();
			}
			ht = zend_new_array(8);
			old_type = Z_TYPE_P(container);
			ZVAL_ARR(container, ht);
			if (UNEXPECTED(old_type == IS_FALSE)) {
				GC_ADDREF(ht);
				zend_false_to_array_deprecated();
				if (UNEXPECTED(GC_DELREF(ht) == 0)) {
					zend_array_destroy(ht);
					goto assign_dim_op_ret_null;
				}
			}
			goto assign_dim_op_new_array;
		} else {
			dim = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
			zend_binary_assign_op_dim_slow(container, dim OPLINE_CC EXECUTE_DATA_CC);
assign_dim_op_ret_null:
			FREE_OP((opline+1)->op1_type, (opline+1)->op1.var);
			if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
				ZVAL_NULL(EX_VAR(opline->result.var));
			}
		}
	}


	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
	ZEND_VM_NEXT_OPCODE_EX(1, 2);
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_ASSIGN_OP_SPEC_VAR_CV_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *var_ptr;
	zval *value;

	SAVE_OPLINE();
	value = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
	var_ptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);

	do {
		if (UNEXPECTED(Z_TYPE_P(var_ptr) == IS_REFERENCE)) {
			zend_reference *ref = Z_REF_P(var_ptr);
			var_ptr = Z_REFVAL_P(var_ptr);
			if (UNEXPECTED(ZEND_REF_HAS_TYPE_SOURCES(ref))) {
				zend_binary_assign_op_typed_ref(ref, value OPLINE_CC EXECUTE_DATA_CC);
				break;
			}
		}
		zend_binary_op(var_ptr, var_ptr, value OPLINE_CC);
	} while (0);

	if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
		ZVAL_COPY(EX_VAR(opline->result.var), var_ptr);
	}


	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_PRE_INC_OBJ_SPEC_VAR_CV_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *object;
	zval *property;
	zval *zptr;
	void *_cache_slot[3] = {0};
	void **cache_slot;
	zend_property_info *prop_info;
	zend_object *zobj;
	zend_string *name, *tmp_name;

	SAVE_OPLINE();
	object = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
	property = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);

	do {
		if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
			if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
				object = Z_REFVAL_P(object);
				goto pre_incdec_object;
			}
			if (IS_VAR == IS_CV
			 && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
				ZVAL_UNDEFINED_OP1();
			}
			zend_throw_non_object_error(object, property OPLINE_CC EXECUTE_DATA_CC);
			break;
		}

pre_incdec_object:
		/* here we are sure we are dealing with an object */
		zobj = Z_OBJ_P(object);
		if (IS_CV == IS_CONST) {
			name = Z_STR_P(property);
		} else {
			name = zval_try_get_tmp_string(property, &tmp_name);
			if (UNEXPECTED(!name)) {
				UNDEF_RESULT();
				break;
			}
		}
		cache_slot = (IS_CV == IS_CONST) ? CACHE_ADDR(opline->extended_value) : _cache_slot;
		if (EXPECTED((zptr = zobj->handlers->get_property_ptr_ptr(zobj, name, BP_VAR_RW, cache_slot)) != NULL)) {
			if (UNEXPECTED(Z_ISERROR_P(zptr))) {
				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
					ZVAL_NULL(EX_VAR(opline->result.var));
				}
			} else {
				prop_info = (zend_property_info *) CACHED_PTR_EX(cache_slot + 2);
				zend_pre_incdec_property_zval(zptr,
					prop_info && ZEND_TYPE_IS_SET(prop_info->type) ? prop_info : NULL OPLINE_CC EXECUTE_DATA_CC);
			}
		} else {
			zend_pre_incdec_overloaded_property(zobj, name, cache_slot OPLINE_CC EXECUTE_DATA_CC);
		}
		if (IS_CV != IS_CONST) {
			zend_tmp_string_release(tmp_name);
		}
	} while (0);


	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_POST_INC_OBJ_SPEC_VAR_CV_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *object;
	zval *property;
	zval *zptr;
	void *_cache_slot[3] = {0};
	void **cache_slot;
	zend_property_info *prop_info;
	zend_object *zobj;
	zend_string *name, *tmp_name;

	SAVE_OPLINE();
	object = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
	property = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);

	do {
		if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
			if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
				object = Z_REFVAL_P(object);
				goto post_incdec_object;
			}
			if (IS_VAR == IS_CV
			 && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
				ZVAL_UNDEFINED_OP1();
			}
			zend_throw_non_object_error(object, property OPLINE_CC EXECUTE_DATA_CC);
			break;
		}

post_incdec_object:
		/* here we are sure we are dealing with an object */
		zobj = Z_OBJ_P(object);
		if (IS_CV == IS_CONST) {
			name = Z_STR_P(property);
		} else {
			name = zval_try_get_tmp_string(property, &tmp_name);
			if (UNEXPECTED(!name)) {
				ZVAL_UNDEF(EX_VAR(opline->result.var));
				break;
			}
		}
		cache_slot = (IS_CV == IS_CONST) ? CACHE_ADDR(opline->extended_value) : _cache_slot;
		if (EXPECTED((zptr = zobj->handlers->get_property_ptr_ptr(zobj, name, BP_VAR_RW, cache_slot)) != NULL)) {
			if (UNEXPECTED(Z_ISERROR_P(zptr))) {
				ZVAL_NULL(EX_VAR(opline->result.var));
			} else {
				prop_info = (zend_property_info*)CACHED_PTR_EX(cache_slot + 2);
				zend_post_incdec_property_zval(zptr,
					prop_info && ZEND_TYPE_IS_SET(prop_info->type) ? prop_info : NULL OPLINE_CC EXECUTE_DATA_CC);
			}
		} else {
			zend_post_incdec_overloaded_property(zobj, name, cache_slot OPLINE_CC EXECUTE_DATA_CC);
		}
		if (IS_CV != IS_CONST) {
			zend_tmp_string_release(tmp_name);
		}
	} while (0);


	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_FETCH_DIM_W_SPEC_VAR_CV_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *container;

	SAVE_OPLINE();
	container = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
	zend_fetch_dimension_address_W(container, EX_VAR(opline->op2.var), IS_CV OPLINE_CC EXECUTE_DATA_CC);


	if (IS_VAR == IS_VAR) {
		FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
	}
	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_FETCH_DIM_RW_SPEC_VAR_CV_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *container;

	SAVE_OPLINE();
	container = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
	zend_fetch_dimension_address_RW(container, EX_VAR(opline->op2.var), IS_CV OPLINE_CC EXECUTE_DATA_CC);


	if (IS_VAR == IS_VAR) {
		FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
	}
	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_CV_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
#if 0
	USE_OPLINE
#endif

	if (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) {
		if ((IS_VAR & (IS_CONST|IS_TMP_VAR))) {
			ZEND_VM_TAIL_CALL(zend_use_tmp_in_write_context_helper_SPEC_TAILCALL(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
		}
		ZEND_VM_TAIL_CALL(ZEND_FETCH_DIM_W_SPEC_VAR_CV_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
	} else {
		if (IS_CV == IS_UNUSED) {
			ZEND_VM_TAIL_CALL(zend_use_undef_in_read_context_helper_SPEC_TAILCALL(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
		}
		ZEND_VM_TAIL_CALL(ZEND_FETCH_DIM_R_SPEC_TMPVAR_CV_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
	}
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_FETCH_DIM_UNSET_SPEC_VAR_CV_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *container;

	SAVE_OPLINE();
	container = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
	zend_fetch_dimension_address_UNSET(container, EX_VAR(opline->op2.var), IS_CV OPLINE_CC EXECUTE_DATA_CC);


	if (IS_VAR == IS_VAR) {
		FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
	}
	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_FETCH_OBJ_W_SPEC_VAR_CV_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *property, *container, *result;

	SAVE_OPLINE();

	container = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
	property = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
	result = EX_VAR(opline->result.var);
	zend_fetch_property_address(
		result, container, IS_VAR, property, IS_CV,
		((IS_CV == IS_CONST) ? CACHE_ADDR(opline->extended_value & ~ZEND_FETCH_OBJ_FLAGS) : NULL),
		BP_VAR_W, opline->extended_value, NULL OPLINE_CC EXECUTE_DATA_CC);


	if (IS_VAR == IS_VAR) {
		FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
	}
	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_FETCH_OBJ_RW_SPEC_VAR_CV_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *property, *container, *result;

	SAVE_OPLINE();
	container = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
	property = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
	result = EX_VAR(opline->result.var);
	zend_fetch_property_address(result, container, IS_VAR, property, IS_CV, ((IS_CV == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL), BP_VAR_RW, 0, NULL OPLINE_CC EXECUTE_DATA_CC);


	if (IS_VAR == IS_VAR) {
		FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
	}
	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_FETCH_OBJ_FUNC_ARG_SPEC_VAR_CV_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
#if 0
	USE_OPLINE
#endif

	if (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) {
		/* Behave like FETCH_OBJ_W */
		if ((IS_VAR & (IS_CONST|IS_TMP_VAR))) {
			ZEND_VM_TAIL_CALL(zend_use_tmp_in_write_context_helper_SPEC_TAILCALL(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
		}
		ZEND_VM_TAIL_CALL(ZEND_FETCH_OBJ_W_SPEC_VAR_CV_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
	} else {
		ZEND_VM_TAIL_CALL(ZEND_FETCH_OBJ_R_SPEC_TMPVAR_CV_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
	}
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_FETCH_OBJ_UNSET_SPEC_VAR_CV_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *container, *property, *result;

	SAVE_OPLINE();
	container = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
	property = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
	result = EX_VAR(opline->result.var);
	zend_fetch_property_address(result, container, IS_VAR, property, IS_CV, ((IS_CV == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL), BP_VAR_UNSET, 0, NULL OPLINE_CC EXECUTE_DATA_CC);


	if (IS_VAR == IS_VAR) {
		FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
	}
	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_FETCH_LIST_W_SPEC_VAR_CV_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *container, *dim;

	SAVE_OPLINE();
	container = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
	dim = EX_VAR(opline->op2.var);

	if (IS_VAR == IS_VAR
		&& Z_TYPE_P(EX_VAR(opline->op1.var)) != IS_INDIRECT
		&& UNEXPECTED(!Z_ISREF_P(container))
	) {
		zend_error(E_NOTICE, "Attempting to set reference to non referenceable value");
		zend_fetch_dimension_address_LIST_r(container, dim, IS_CV OPLINE_CC EXECUTE_DATA_CC);
	} else {
		zend_fetch_dimension_address_W(container, dim, IS_CV OPLINE_CC EXECUTE_DATA_CC);
	}


	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_ASSIGN_OBJ_SPEC_VAR_CV_OP_DATA_CONST_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *object, *value, tmp;
	zend_object *zobj;
	zend_string *name, *tmp_name;
	zend_refcounted *garbage = NULL;

	SAVE_OPLINE();
	object = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
	value = RT_CONSTANT((opline+1), (opline+1)->op1);

	if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
		if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
			object = Z_REFVAL_P(object);
			goto assign_object;
		}
		zend_throw_non_object_error(object, _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC) OPLINE_CC EXECUTE_DATA_CC);
		value = &EG(uninitialized_zval);
		goto free_and_exit_assign_obj;
	}

assign_object:
	zobj = Z_OBJ_P(object);
	if (IS_CV == IS_CONST) {
		if (EXPECTED(zobj->ce == CACHED_PTR(opline->extended_value))) {
			void **cache_slot = CACHE_ADDR(opline->extended_value);
			uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
			zval *property_val;
			zend_property_info *prop_info;

			if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
				prop_info = (zend_property_info*) CACHED_PTR_EX(cache_slot + 2);

assign_obj_simple:
				property_val = OBJ_PROP(zobj, prop_offset);
				if (Z_TYPE_P(property_val) != IS_UNDEF) {
					if (prop_info != NULL) {
						value = zend_assign_to_typed_prop(prop_info, property_val, value, &garbage EXECUTE_DATA_CC);
						goto free_and_exit_assign_obj;
					} else {
fast_assign_obj:
						value = zend_assign_to_variable_ex(property_val, value, IS_CONST, EX_USES_STRICT_TYPES(), &garbage);
						if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
							ZVAL_COPY(EX_VAR(opline->result.var), value);
						}
						goto exit_assign_obj;
					}
				}
			} else if (EXPECTED(IS_DYNAMIC_PROPERTY_OFFSET(prop_offset))) {
				name = Z_STR_P(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC));
				if (UNEXPECTED(zend_lazy_object_must_init(zobj))) {
					zobj = zend_lazy_object_init(zobj);
					if (!zobj) {
						value = &EG(uninitialized_zval);
						goto free_and_exit_assign_obj;
					}
				}
				if (!zobj->ce->__set && (zobj->ce->ce_flags & ZEND_ACC_ALLOW_DYNAMIC_PROPERTIES)) {
					rebuild_object_properties_internal(zobj);
				}
				if (EXPECTED(zobj->properties != NULL)) {
					if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
						if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
							GC_DELREF(zobj->properties);
						}
						zobj->properties = zend_array_dup(zobj->properties);
					}
					property_val = zend_hash_find_known_hash(zobj->properties, name);
					if (property_val) {
						goto fast_assign_obj;
					}
				}

				if (!zobj->ce->__set && (zobj->ce->ce_flags & ZEND_ACC_ALLOW_DYNAMIC_PROPERTIES)) {
					if (IS_CONST == IS_CONST) {
						if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
							Z_ADDREF_P(value);
						}
					} else if (IS_CONST != IS_TMP_VAR) {
						if (Z_ISREF_P(value)) {
							if (IS_CONST == IS_VAR) {
								zend_reference *ref = Z_REF_P(value);
								if (GC_DELREF(ref) == 0) {
									ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
									efree_size(ref, sizeof(zend_reference));
									value = &tmp;
								} else {
									value = Z_REFVAL_P(value);
									Z_TRY_ADDREF_P(value);
								}
							} else {
								value = Z_REFVAL_P(value);
								Z_TRY_ADDREF_P(value);
							}
						} else if (IS_CONST == IS_CV) {
							Z_TRY_ADDREF_P(value);
						}
					}
					zend_hash_add_new(zobj->properties, name, value);
					if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
						ZVAL_COPY(EX_VAR(opline->result.var), value);
					}
					goto exit_assign_obj;
				}
			} else {
				ZEND_ASSERT(IS_HOOKED_PROPERTY_OFFSET(prop_offset));
				if (ZEND_IS_PROPERTY_HOOK_SIMPLE_WRITE(prop_offset)) {
					prop_info = CACHED_PTR_EX(cache_slot + 2);
					prop_offset = prop_info->offset;
					if (!ZEND_TYPE_IS_SET(prop_info->type)) {
						prop_info = NULL;
					}
					goto assign_obj_simple;
				}
				/* Fall through to write_property for hooks. */
			}
		}
		name = Z_STR_P(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC));
	} else {
		name = zval_try_get_tmp_string(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC), &tmp_name);
		if (UNEXPECTED(!name)) {


			UNDEF_RESULT();
			goto exit_assign_obj;
		}
	}

	if (IS_CONST == IS_CV || IS_CONST == IS_VAR) {
		ZVAL_DEREF(value);
	}

	value = zobj->handlers->write_property(zobj, name, value, (IS_CV == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);

	if (IS_CV != IS_CONST) {
		zend_tmp_string_release(tmp_name);
	}

free_and_exit_assign_obj:
	if (UNEXPECTED(RETURN_VALUE_USED(opline)) && value) {
		ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
	}


exit_assign_obj:
	if (garbage) {
		GC_DTOR_NO_REF(garbage);
	}


	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
	/* assign_obj has two opcodes! */
	ZEND_VM_NEXT_OPCODE_EX(1, 2);
}

/* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CONST|VAR) */
static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_ASSIGN_OBJ_SPEC_VAR_CV_OP_DATA_TMP_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *object, *value, tmp;
	zend_object *zobj;
	zend_string *name, *tmp_name;
	zend_refcounted *garbage = NULL;

	SAVE_OPLINE();
	object = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
	value = _get_zval_ptr_tmp((opline+1)->op1.var EXECUTE_DATA_CC);

	if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
		if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
			object = Z_REFVAL_P(object);
			goto assign_object;
		}
		zend_throw_non_object_error(object, _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC) OPLINE_CC EXECUTE_DATA_CC);
		value = &EG(uninitialized_zval);
		goto free_and_exit_assign_obj;
	}

assign_object:
	zobj = Z_OBJ_P(object);
	if (IS_CV == IS_CONST) {
		if (EXPECTED(zobj->ce == CACHED_PTR(opline->extended_value))) {
			void **cache_slot = CACHE_ADDR(opline->extended_value);
			uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
			zval *property_val;
			zend_property_info *prop_info;

			if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
				prop_info = (zend_property_info*) CACHED_PTR_EX(cache_slot + 2);

assign_obj_simple:
				property_val = OBJ_PROP(zobj, prop_offset);
				if (Z_TYPE_P(property_val) != IS_UNDEF) {
					if (prop_info != NULL) {
						value = zend_assign_to_typed_prop(prop_info, property_val, value, &garbage EXECUTE_DATA_CC);
						goto free_and_exit_assign_obj;
					} else {
fast_assign_obj:
						value = zend_assign_to_variable_ex(property_val, value, IS_TMP_VAR, EX_USES_STRICT_TYPES(), &garbage);
						if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
							ZVAL_COPY(EX_VAR(opline->result.var), value);
						}
						goto exit_assign_obj;
					}
				}
			} else if (EXPECTED(IS_DYNAMIC_PROPERTY_OFFSET(prop_offset))) {
				name = Z_STR_P(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC));
				if (UNEXPECTED(zend_lazy_object_must_init(zobj))) {
					zobj = zend_lazy_object_init(zobj);
					if (!zobj) {
						value = &EG(uninitialized_zval);
						goto free_and_exit_assign_obj;
					}
				}
				if (!zobj->ce->__set && (zobj->ce->ce_flags & ZEND_ACC_ALLOW_DYNAMIC_PROPERTIES)) {
					rebuild_object_properties_internal(zobj);
				}
				if (EXPECTED(zobj->properties != NULL)) {
					if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
						if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
							GC_DELREF(zobj->properties);
						}
						zobj->properties = zend_array_dup(zobj->properties);
					}
					property_val = zend_hash_find_known_hash(zobj->properties, name);
					if (property_val) {
						goto fast_assign_obj;
					}
				}

				if (!zobj->ce->__set && (zobj->ce->ce_flags & ZEND_ACC_ALLOW_DYNAMIC_PROPERTIES)) {
					if (IS_TMP_VAR == IS_CONST) {
						if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
							Z_ADDREF_P(value);
						}
					} else if (IS_TMP_VAR != IS_TMP_VAR) {
						if (Z_ISREF_P(value)) {
							if (IS_TMP_VAR == IS_VAR) {
								zend_reference *ref = Z_REF_P(value);
								if (GC_DELREF(ref) == 0) {
									ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
									efree_size(ref, sizeof(zend_reference));
									value = &tmp;
								} else {
									value = Z_REFVAL_P(value);
									Z_TRY_ADDREF_P(value);
								}
							} else {
								value = Z_REFVAL_P(value);
								Z_TRY_ADDREF_P(value);
							}
						} else if (IS_TMP_VAR == IS_CV) {
							Z_TRY_ADDREF_P(value);
						}
					}
					zend_hash_add_new(zobj->properties, name, value);
					if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
						ZVAL_COPY(EX_VAR(opline->result.var), value);
					}
					goto exit_assign_obj;
				}
			} else {
				ZEND_ASSERT(IS_HOOKED_PROPERTY_OFFSET(prop_offset));
				if (ZEND_IS_PROPERTY_HOOK_SIMPLE_WRITE(prop_offset)) {
					prop_info = CACHED_PTR_EX(cache_slot + 2);
					prop_offset = prop_info->offset;
					if (!ZEND_TYPE_IS_SET(prop_info->type)) {
						prop_info = NULL;
					}
					goto assign_obj_simple;
				}
				/* Fall through to write_property for hooks. */
			}
		}
		name = Z_STR_P(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC));
	} else {
		name = zval_try_get_tmp_string(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC), &tmp_name);
		if (UNEXPECTED(!name)) {
			zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
			UNDEF_RESULT();
			goto exit_assign_obj;
		}
	}

	if (IS_TMP_VAR == IS_CV || IS_TMP_VAR == IS_VAR) {
		ZVAL_DEREF(value);
	}

	value = zobj->handlers->write_property(zobj, name, value, (IS_CV == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);

	if (IS_CV != IS_CONST) {
		zend_tmp_string_release(tmp_name);
	}

free_and_exit_assign_obj:
	if (UNEXPECTED(RETURN_VALUE_USED(opline)) && value) {
		ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
	}
	zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
exit_assign_obj:
	if (garbage) {
		GC_DTOR_NO_REF(garbage);
	}


	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
	/* assign_obj has two opcodes! */
	ZEND_VM_NEXT_OPCODE_EX(1, 2);
}

/* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CONST|VAR) */
static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_ASSIGN_OBJ_SPEC_VAR_CV_OP_DATA_VAR_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *object, *value, tmp;
	zend_object *zobj;
	zend_string *name, *tmp_name;
	zend_refcounted *garbage = NULL;

	SAVE_OPLINE();
	object = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
	value = _get_zval_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);

	if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
		if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
			object = Z_REFVAL_P(object);
			goto assign_object;
		}
		zend_throw_non_object_error(object, _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC) OPLINE_CC EXECUTE_DATA_CC);
		value = &EG(uninitialized_zval);
		goto free_and_exit_assign_obj;
	}

assign_object:
	zobj = Z_OBJ_P(object);
	if (IS_CV == IS_CONST) {
		if (EXPECTED(zobj->ce == CACHED_PTR(opline->extended_value))) {
			void **cache_slot = CACHE_ADDR(opline->extended_value);
			uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
			zval *property_val;
			zend_property_info *prop_info;

			if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
				prop_info = (zend_property_info*) CACHED_PTR_EX(cache_slot + 2);

assign_obj_simple:
				property_val = OBJ_PROP(zobj, prop_offset);
				if (Z_TYPE_P(property_val) != IS_UNDEF) {
					if (prop_info != NULL) {
						value = zend_assign_to_typed_prop(prop_info, property_val, value, &garbage EXECUTE_DATA_CC);
						goto free_and_exit_assign_obj;
					} else {
fast_assign_obj:
						value = zend_assign_to_variable_ex(property_val, value, IS_VAR, EX_USES_STRICT_TYPES(), &garbage);
						if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
							ZVAL_COPY(EX_VAR(opline->result.var), value);
						}
						goto exit_assign_obj;
					}
				}
			} else if (EXPECTED(IS_DYNAMIC_PROPERTY_OFFSET(prop_offset))) {
				name = Z_STR_P(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC));
				if (UNEXPECTED(zend_lazy_object_must_init(zobj))) {
					zobj = zend_lazy_object_init(zobj);
					if (!zobj) {
						value = &EG(uninitialized_zval);
						goto free_and_exit_assign_obj;
					}
				}
				if (!zobj->ce->__set && (zobj->ce->ce_flags & ZEND_ACC_ALLOW_DYNAMIC_PROPERTIES)) {
					rebuild_object_properties_internal(zobj);
				}
				if (EXPECTED(zobj->properties != NULL)) {
					if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
						if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
							GC_DELREF(zobj->properties);
						}
						zobj->properties = zend_array_dup(zobj->properties);
					}
					property_val = zend_hash_find_known_hash(zobj->properties, name);
					if (property_val) {
						goto fast_assign_obj;
					}
				}

				if (!zobj->ce->__set && (zobj->ce->ce_flags & ZEND_ACC_ALLOW_DYNAMIC_PROPERTIES)) {
					if (IS_VAR == IS_CONST) {
						if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
							Z_ADDREF_P(value);
						}
					} else if (IS_VAR != IS_TMP_VAR) {
						if (Z_ISREF_P(value)) {
							if (IS_VAR == IS_VAR) {
								zend_reference *ref = Z_REF_P(value);
								if (GC_DELREF(ref) == 0) {
									ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
									efree_size(ref, sizeof(zend_reference));
									value = &tmp;
								} else {
									value = Z_REFVAL_P(value);
									Z_TRY_ADDREF_P(value);
								}
							} else {
								value = Z_REFVAL_P(value);
								Z_TRY_ADDREF_P(value);
							}
						} else if (IS_VAR == IS_CV) {
							Z_TRY_ADDREF_P(value);
						}
					}
					zend_hash_add_new(zobj->properties, name, value);
					if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
						ZVAL_COPY(EX_VAR(opline->result.var), value);
					}
					goto exit_assign_obj;
				}
			} else {
				ZEND_ASSERT(IS_HOOKED_PROPERTY_OFFSET(prop_offset));
				if (ZEND_IS_PROPERTY_HOOK_SIMPLE_WRITE(prop_offset)) {
					prop_info = CACHED_PTR_EX(cache_slot + 2);
					prop_offset = prop_info->offset;
					if (!ZEND_TYPE_IS_SET(prop_info->type)) {
						prop_info = NULL;
					}
					goto assign_obj_simple;
				}
				/* Fall through to write_property for hooks. */
			}
		}
		name = Z_STR_P(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC));
	} else {
		name = zval_try_get_tmp_string(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC), &tmp_name);
		if (UNEXPECTED(!name)) {
			zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
			UNDEF_RESULT();
			goto exit_assign_obj;
		}
	}

	if (IS_VAR == IS_CV || IS_VAR == IS_VAR) {
		ZVAL_DEREF(value);
	}

	value = zobj->handlers->write_property(zobj, name, value, (IS_CV == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);

	if (IS_CV != IS_CONST) {
		zend_tmp_string_release(tmp_name);
	}

free_and_exit_assign_obj:
	if (UNEXPECTED(RETURN_VALUE_USED(opline)) && value) {
		ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
	}
	zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
exit_assign_obj:
	if (garbage) {
		GC_DTOR_NO_REF(garbage);
	}


	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
	/* assign_obj has two opcodes! */
	ZEND_VM_NEXT_OPCODE_EX(1, 2);
}

/* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CONST|VAR) */
static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_ASSIGN_OBJ_SPEC_VAR_CV_OP_DATA_CV_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *object, *value, tmp;
	zend_object *zobj;
	zend_string *name, *tmp_name;
	zend_refcounted *garbage = NULL;

	SAVE_OPLINE();
	object = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
	value = _get_zval_ptr_cv_BP_VAR_R((opline+1)->op1.var EXECUTE_DATA_CC);

	if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
		if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
			object = Z_REFVAL_P(object);
			goto assign_object;
		}
		zend_throw_non_object_error(object, _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC) OPLINE_CC EXECUTE_DATA_CC);
		value = &EG(uninitialized_zval);
		goto free_and_exit_assign_obj;
	}

assign_object:
	zobj = Z_OBJ_P(object);
	if (IS_CV == IS_CONST) {
		if (EXPECTED(zobj->ce == CACHED_PTR(opline->extended_value))) {
			void **cache_slot = CACHE_ADDR(opline->extended_value);
			uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
			zval *property_val;
			zend_property_info *prop_info;

			if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
				prop_info = (zend_property_info*) CACHED_PTR_EX(cache_slot + 2);

assign_obj_simple:
				property_val = OBJ_PROP(zobj, prop_offset);
				if (Z_TYPE_P(property_val) != IS_UNDEF) {
					if (prop_info != NULL) {
						value = zend_assign_to_typed_prop(prop_info, property_val, value, &garbage EXECUTE_DATA_CC);
						goto free_and_exit_assign_obj;
					} else {
fast_assign_obj:
						value = zend_assign_to_variable_ex(property_val, value, IS_CV, EX_USES_STRICT_TYPES(), &garbage);
						if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
							ZVAL_COPY(EX_VAR(opline->result.var), value);
						}
						goto exit_assign_obj;
					}
				}
			} else if (EXPECTED(IS_DYNAMIC_PROPERTY_OFFSET(prop_offset))) {
				name = Z_STR_P(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC));
				if (UNEXPECTED(zend_lazy_object_must_init(zobj))) {
					zobj = zend_lazy_object_init(zobj);
					if (!zobj) {
						value = &EG(uninitialized_zval);
						goto free_and_exit_assign_obj;
					}
				}
				if (!zobj->ce->__set && (zobj->ce->ce_flags & ZEND_ACC_ALLOW_DYNAMIC_PROPERTIES)) {
					rebuild_object_properties_internal(zobj);
				}
				if (EXPECTED(zobj->properties != NULL)) {
					if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
						if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
							GC_DELREF(zobj->properties);
						}
						zobj->properties = zend_array_dup(zobj->properties);
					}
					property_val = zend_hash_find_known_hash(zobj->properties, name);
					if (property_val) {
						goto fast_assign_obj;
					}
				}

				if (!zobj->ce->__set && (zobj->ce->ce_flags & ZEND_ACC_ALLOW_DYNAMIC_PROPERTIES)) {
					if (IS_CV == IS_CONST) {
						if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
							Z_ADDREF_P(value);
						}
					} else if (IS_CV != IS_TMP_VAR) {
						if (Z_ISREF_P(value)) {
							if (IS_CV == IS_VAR) {
								zend_reference *ref = Z_REF_P(value);
								if (GC_DELREF(ref) == 0) {
									ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
									efree_size(ref, sizeof(zend_reference));
									value = &tmp;
								} else {
									value = Z_REFVAL_P(value);
									Z_TRY_ADDREF_P(value);
								}
							} else {
								value = Z_REFVAL_P(value);
								Z_TRY_ADDREF_P(value);
							}
						} else if (IS_CV == IS_CV) {
							Z_TRY_ADDREF_P(value);
						}
					}
					zend_hash_add_new(zobj->properties, name, value);
					if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
						ZVAL_COPY(EX_VAR(opline->result.var), value);
					}
					goto exit_assign_obj;
				}
			} else {
				ZEND_ASSERT(IS_HOOKED_PROPERTY_OFFSET(prop_offset));
				if (ZEND_IS_PROPERTY_HOOK_SIMPLE_WRITE(prop_offset)) {
					prop_info = CACHED_PTR_EX(cache_slot + 2);
					prop_offset = prop_info->offset;
					if (!ZEND_TYPE_IS_SET(prop_info->type)) {
						prop_info = NULL;
					}
					goto assign_obj_simple;
				}
				/* Fall through to write_property for hooks. */
			}
		}
		name = Z_STR_P(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC));
	} else {
		name = zval_try_get_tmp_string(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC), &tmp_name);
		if (UNEXPECTED(!name)) {


			UNDEF_RESULT();
			goto exit_assign_obj;
		}
	}

	if (IS_CV == IS_CV || IS_CV == IS_VAR) {
		ZVAL_DEREF(value);
	}

	value = zobj->handlers->write_property(zobj, name, value, (IS_CV == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);

	if (IS_CV != IS_CONST) {
		zend_tmp_string_release(tmp_name);
	}

free_and_exit_assign_obj:
	if (UNEXPECTED(RETURN_VALUE_USED(opline)) && value) {
		ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
	}


exit_assign_obj:
	if (garbage) {
		GC_DTOR_NO_REF(garbage);
	}


	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
	/* assign_obj has two opcodes! */
	ZEND_VM_NEXT_OPCODE_EX(1, 2);
}

/* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CONST|VAR) */
static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_ASSIGN_DIM_SPEC_VAR_CV_OP_DATA_CONST_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *object_ptr, *orig_object_ptr;
	zval *value;
	zval *variable_ptr;
	zval *dim;
	zend_refcounted *garbage = NULL;

	SAVE_OPLINE();
	orig_object_ptr = object_ptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);

	if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
try_assign_dim_array:
		SEPARATE_ARRAY(object_ptr);
		if (IS_CV == IS_UNUSED) {
			value = RT_CONSTANT((opline+1), (opline+1)->op1);
			if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
				HashTable *ht = Z_ARRVAL_P(object_ptr);
				if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE)) {
					GC_ADDREF(ht);
				}
				value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
				if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE) && !GC_DELREF(ht)) {
					zend_array_destroy(ht);
					goto assign_dim_error;
				}
			}
			if (IS_CONST == IS_CV || IS_CONST == IS_VAR) {
				ZVAL_DEREF(value);
			}
			value = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), value);
			if (UNEXPECTED(value == NULL)) {
				zend_cannot_add_element();
				goto assign_dim_error;
			} else if (IS_CONST == IS_CV) {
				if (Z_REFCOUNTED_P(value)) {
					Z_ADDREF_P(value);
				}
			} else if (IS_CONST == IS_VAR) {
				zval *free_op_data = EX_VAR((opline+1)->op1.var);
				if (Z_ISREF_P(free_op_data)) {
					if (Z_REFCOUNTED_P(value)) {
						Z_ADDREF_P(value);
					}
					zval_ptr_dtor_nogc(free_op_data);
				}
			} else if (IS_CONST == IS_CONST) {
				if (UNEXPECTED(Z_REFCOUNTED_P(value))) {
					Z_ADDREF_P(value);
				}
			}
		} else {
			dim = EX_VAR(opline->op2.var);
			if (IS_CV == IS_CONST) {
				variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
			} else {
				variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
			}
			if (UNEXPECTED(variable_ptr == NULL)) {
				goto assign_dim_error;
			}
			value = RT_CONSTANT((opline+1), (opline+1)->op1);
			value = zend_assign_to_variable_ex(variable_ptr, value, IS_CONST, EX_USES_STRICT_TYPES(), &garbage);
		}
		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
			ZVAL_COPY(EX_VAR(opline->result.var), value);
		}
		if (garbage) {
			GC_DTOR_NO_REF(garbage);
		}
	} else {
		if (EXPECTED(Z_ISREF_P(object_ptr))) {
			object_ptr = Z_REFVAL_P(object_ptr);
			if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
				goto try_assign_dim_array;
			}
		}
		if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) {
			zend_object *obj = Z_OBJ_P(object_ptr);

			GC_ADDREF(obj);
			dim = EX_VAR(opline->op2.var);
			if (IS_CV == IS_CV && UNEXPECTED(Z_ISUNDEF_P(dim))) {
				dim = ZVAL_UNDEFINED_OP2();
			} else if (IS_CV == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
				dim++;
			}

			value = RT_CONSTANT((opline+1), (opline+1)->op1);
			if (IS_CONST == IS_CV && UNEXPECTED(Z_ISUNDEF_P(value))) {
				value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
			} else if (IS_CONST & (IS_CV|IS_VAR)) {
				ZVAL_DEREF(value);
			}

			zend_assign_to_object_dim(obj, dim, value OPLINE_CC EXECUTE_DATA_CC);


			if (UNEXPECTED(GC_DELREF(obj) == 0)) {
				zend_objects_store_del(obj);
			}
		} else if (EXPECTED(Z_TYPE_P(object_ptr) == IS_STRING)) {
			if (IS_CV == IS_UNUSED) {
				zend_use_new_element_for_string();


				UNDEF_RESULT();
			} else {
				dim = EX_VAR(opline->op2.var);
				value = RT_CONSTANT((opline+1), (opline+1)->op1);
				zend_assign_to_string_offset(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC);


			}
		} else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
			if (Z_ISREF_P(orig_object_ptr)
			 && ZEND_REF_HAS_TYPE_SOURCES(Z_REF_P(orig_object_ptr))
			 && !zend_verify_ref_array_assignable(Z_REF_P(orig_object_ptr))) {
				dim = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);


				UNDEF_RESULT();
			} else {
				HashTable *ht = zend_new_array(8);
				uint8_t old_type = Z_TYPE_P(object_ptr);

				ZVAL_ARR(object_ptr, ht);
				if (UNEXPECTED(old_type == IS_FALSE)) {
					GC_ADDREF(ht);
					zend_false_to_array_deprecated();
					if (UNEXPECTED(GC_DELREF(ht) == 0)) {
						zend_array_destroy(ht);
						goto assign_dim_error;
					}
				}
				goto try_assign_dim_array;
			}
		} else {
			zend_use_scalar_as_array();
			dim = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
assign_dim_error:


			if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
				ZVAL_NULL(EX_VAR(opline->result.var));
			}
		}
	}
	if (IS_CV != IS_UNUSED) {


	}
	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
	/* assign_dim has two opcodes! */
	ZEND_VM_NEXT_OPCODE_EX(1, 2);
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_ASSIGN_DIM_SPEC_VAR_CV_OP_DATA_TMP_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *object_ptr, *orig_object_ptr;
	zval *value;
	zval *variable_ptr;
	zval *dim;
	zend_refcounted *garbage = NULL;

	SAVE_OPLINE();
	orig_object_ptr = object_ptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);

	if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
try_assign_dim_array:
		SEPARATE_ARRAY(object_ptr);
		if (IS_CV == IS_UNUSED) {
			value = _get_zval_ptr_tmp((opline+1)->op1.var EXECUTE_DATA_CC);
			if (IS_TMP_VAR == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
				HashTable *ht = Z_ARRVAL_P(object_ptr);
				if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE)) {
					GC_ADDREF(ht);
				}
				value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
				if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE) && !GC_DELREF(ht)) {
					zend_array_destroy(ht);
					goto assign_dim_error;
				}
			}
			if (IS_TMP_VAR == IS_CV || IS_TMP_VAR == IS_VAR) {
				ZVAL_DEREF(value);
			}
			value = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), value);
			if (UNEXPECTED(value == NULL)) {
				zend_cannot_add_element();
				goto assign_dim_error;
			} else if (IS_TMP_VAR == IS_CV) {
				if (Z_REFCOUNTED_P(value)) {
					Z_ADDREF_P(value);
				}
			} else if (IS_TMP_VAR == IS_VAR) {
				zval *free_op_data = EX_VAR((opline+1)->op1.var);
				if (Z_ISREF_P(free_op_data)) {
					if (Z_REFCOUNTED_P(value)) {
						Z_ADDREF_P(value);
					}
					zval_ptr_dtor_nogc(free_op_data);
				}
			} else if (IS_TMP_VAR == IS_CONST) {
				if (UNEXPECTED(Z_REFCOUNTED_P(value))) {
					Z_ADDREF_P(value);
				}
			}
		} else {
			dim = EX_VAR(opline->op2.var);
			if (IS_CV == IS_CONST) {
				variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
			} else {
				variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
			}
			if (UNEXPECTED(variable_ptr == NULL)) {
				goto assign_dim_error;
			}
			value = _get_zval_ptr_tmp((opline+1)->op1.var EXECUTE_DATA_CC);
			value = zend_assign_to_variable_ex(variable_ptr, value, IS_TMP_VAR, EX_USES_STRICT_TYPES(), &garbage);
		}
		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
			ZVAL_COPY(EX_VAR(opline->result.var), value);
		}
		if (garbage) {
			GC_DTOR_NO_REF(garbage);
		}
	} else {
		if (EXPECTED(Z_ISREF_P(object_ptr))) {
			object_ptr = Z_REFVAL_P(object_ptr);
			if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
				goto try_assign_dim_array;
			}
		}
		if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) {
			zend_object *obj = Z_OBJ_P(object_ptr);

			GC_ADDREF(obj);
			dim = EX_VAR(opline->op2.var);
			if (IS_CV == IS_CV && UNEXPECTED(Z_ISUNDEF_P(dim))) {
				dim = ZVAL_UNDEFINED_OP2();
			} else if (IS_CV == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
				dim++;
			}

			value = _get_zval_ptr_tmp((opline+1)->op1.var EXECUTE_DATA_CC);
			if (IS_TMP_VAR == IS_CV && UNEXPECTED(Z_ISUNDEF_P(value))) {
				value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
			} else if (IS_TMP_VAR & (IS_CV|IS_VAR)) {
				ZVAL_DEREF(value);
			}

			zend_assign_to_object_dim(obj, dim, value OPLINE_CC EXECUTE_DATA_CC);

			zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
			if (UNEXPECTED(GC_DELREF(obj) == 0)) {
				zend_objects_store_del(obj);
			}
		} else if (EXPECTED(Z_TYPE_P(object_ptr) == IS_STRING)) {
			if (IS_CV == IS_UNUSED) {
				zend_use_new_element_for_string();
				zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
				UNDEF_RESULT();
			} else {
				dim = EX_VAR(opline->op2.var);
				value = _get_zval_ptr_tmp((opline+1)->op1.var EXECUTE_DATA_CC);
				zend_assign_to_string_offset(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC);
				zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
			}
		} else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
			if (Z_ISREF_P(orig_object_ptr)
			 && ZEND_REF_HAS_TYPE_SOURCES(Z_REF_P(orig_object_ptr))
			 && !zend_verify_ref_array_assignable(Z_REF_P(orig_object_ptr))) {
				dim = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
				zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
				UNDEF_RESULT();
			} else {
				HashTable *ht = zend_new_array(8);
				uint8_t old_type = Z_TYPE_P(object_ptr);

				ZVAL_ARR(object_ptr, ht);
				if (UNEXPECTED(old_type == IS_FALSE)) {
					GC_ADDREF(ht);
					zend_false_to_array_deprecated();
					if (UNEXPECTED(GC_DELREF(ht) == 0)) {
						zend_array_destroy(ht);
						goto assign_dim_error;
					}
				}
				goto try_assign_dim_array;
			}
		} else {
			zend_use_scalar_as_array();
			dim = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
assign_dim_error:
			zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
			if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
				ZVAL_NULL(EX_VAR(opline->result.var));
			}
		}
	}
	if (IS_CV != IS_UNUSED) {


	}
	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
	/* assign_dim has two opcodes! */
	ZEND_VM_NEXT_OPCODE_EX(1, 2);
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_ASSIGN_DIM_SPEC_VAR_CV_OP_DATA_VAR_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *object_ptr, *orig_object_ptr;
	zval *value;
	zval *variable_ptr;
	zval *dim;
	zend_refcounted *garbage = NULL;

	SAVE_OPLINE();
	orig_object_ptr = object_ptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);

	if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
try_assign_dim_array:
		SEPARATE_ARRAY(object_ptr);
		if (IS_CV == IS_UNUSED) {
			value = _get_zval_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);
			if (IS_VAR == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
				HashTable *ht = Z_ARRVAL_P(object_ptr);
				if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE)) {
					GC_ADDREF(ht);
				}
				value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
				if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE) && !GC_DELREF(ht)) {
					zend_array_destroy(ht);
					goto assign_dim_error;
				}
			}
			if (IS_VAR == IS_CV || IS_VAR == IS_VAR) {
				ZVAL_DEREF(value);
			}
			value = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), value);
			if (UNEXPECTED(value == NULL)) {
				zend_cannot_add_element();
				goto assign_dim_error;
			} else if (IS_VAR == IS_CV) {
				if (Z_REFCOUNTED_P(value)) {
					Z_ADDREF_P(value);
				}
			} else if (IS_VAR == IS_VAR) {
				zval *free_op_data = EX_VAR((opline+1)->op1.var);
				if (Z_ISREF_P(free_op_data)) {
					if (Z_REFCOUNTED_P(value)) {
						Z_ADDREF_P(value);
					}
					zval_ptr_dtor_nogc(free_op_data);
				}
			} else if (IS_VAR == IS_CONST) {
				if (UNEXPECTED(Z_REFCOUNTED_P(value))) {
					Z_ADDREF_P(value);
				}
			}
		} else {
			dim = EX_VAR(opline->op2.var);
			if (IS_CV == IS_CONST) {
				variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
			} else {
				variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
			}
			if (UNEXPECTED(variable_ptr == NULL)) {
				goto assign_dim_error;
			}
			value = _get_zval_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);
			value = zend_assign_to_variable_ex(variable_ptr, value, IS_VAR, EX_USES_STRICT_TYPES(), &garbage);
		}
		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
			ZVAL_COPY(EX_VAR(opline->result.var), value);
		}
		if (garbage) {
			GC_DTOR_NO_REF(garbage);
		}
	} else {
		if (EXPECTED(Z_ISREF_P(object_ptr))) {
			object_ptr = Z_REFVAL_P(object_ptr);
			if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
				goto try_assign_dim_array;
			}
		}
		if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) {
			zend_object *obj = Z_OBJ_P(object_ptr);

			GC_ADDREF(obj);
			dim = EX_VAR(opline->op2.var);
			if (IS_CV == IS_CV && UNEXPECTED(Z_ISUNDEF_P(dim))) {
				dim = ZVAL_UNDEFINED_OP2();
			} else if (IS_CV == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
				dim++;
			}

			value = _get_zval_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);
			if (IS_VAR == IS_CV && UNEXPECTED(Z_ISUNDEF_P(value))) {
				value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
			} else if (IS_VAR & (IS_CV|IS_VAR)) {
				ZVAL_DEREF(value);
			}

			zend_assign_to_object_dim(obj, dim, value OPLINE_CC EXECUTE_DATA_CC);

			zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
			if (UNEXPECTED(GC_DELREF(obj) == 0)) {
				zend_objects_store_del(obj);
			}
		} else if (EXPECTED(Z_TYPE_P(object_ptr) == IS_STRING)) {
			if (IS_CV == IS_UNUSED) {
				zend_use_new_element_for_string();
				zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
				UNDEF_RESULT();
			} else {
				dim = EX_VAR(opline->op2.var);
				value = _get_zval_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);
				zend_assign_to_string_offset(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC);
				zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
			}
		} else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
			if (Z_ISREF_P(orig_object_ptr)
			 && ZEND_REF_HAS_TYPE_SOURCES(Z_REF_P(orig_object_ptr))
			 && !zend_verify_ref_array_assignable(Z_REF_P(orig_object_ptr))) {
				dim = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
				zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
				UNDEF_RESULT();
			} else {
				HashTable *ht = zend_new_array(8);
				uint8_t old_type = Z_TYPE_P(object_ptr);

				ZVAL_ARR(object_ptr, ht);
				if (UNEXPECTED(old_type == IS_FALSE)) {
					GC_ADDREF(ht);
					zend_false_to_array_deprecated();
					if (UNEXPECTED(GC_DELREF(ht) == 0)) {
						zend_array_destroy(ht);
						goto assign_dim_error;
					}
				}
				goto try_assign_dim_array;
			}
		} else {
			zend_use_scalar_as_array();
			dim = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
assign_dim_error:
			zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
			if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
				ZVAL_NULL(EX_VAR(opline->result.var));
			}
		}
	}
	if (IS_CV != IS_UNUSED) {


	}
	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
	/* assign_dim has two opcodes! */
	ZEND_VM_NEXT_OPCODE_EX(1, 2);
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_ASSIGN_DIM_SPEC_VAR_CV_OP_DATA_CV_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *object_ptr, *orig_object_ptr;
	zval *value;
	zval *variable_ptr;
	zval *dim;
	zend_refcounted *garbage = NULL;

	SAVE_OPLINE();
	orig_object_ptr = object_ptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);

	if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
try_assign_dim_array:
		SEPARATE_ARRAY(object_ptr);
		if (IS_CV == IS_UNUSED) {
			value = EX_VAR((opline+1)->op1.var);
			if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
				HashTable *ht = Z_ARRVAL_P(object_ptr);
				if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE)) {
					GC_ADDREF(ht);
				}
				value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
				if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE) && !GC_DELREF(ht)) {
					zend_array_destroy(ht);
					goto assign_dim_error;
				}
			}
			if (IS_CV == IS_CV || IS_CV == IS_VAR) {
				ZVAL_DEREF(value);
			}
			value = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), value);
			if (UNEXPECTED(value == NULL)) {
				zend_cannot_add_element();
				goto assign_dim_error;
			} else if (IS_CV == IS_CV) {
				if (Z_REFCOUNTED_P(value)) {
					Z_ADDREF_P(value);
				}
			} else if (IS_CV == IS_VAR) {
				zval *free_op_data = EX_VAR((opline+1)->op1.var);
				if (Z_ISREF_P(free_op_data)) {
					if (Z_REFCOUNTED_P(value)) {
						Z_ADDREF_P(value);
					}
					zval_ptr_dtor_nogc(free_op_data);
				}
			} else if (IS_CV == IS_CONST) {
				if (UNEXPECTED(Z_REFCOUNTED_P(value))) {
					Z_ADDREF_P(value);
				}
			}
		} else {
			dim = EX_VAR(opline->op2.var);
			if (IS_CV == IS_CONST) {
				variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
			} else {
				variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
			}
			if (UNEXPECTED(variable_ptr == NULL)) {
				goto assign_dim_error;
			}
			value = _get_zval_ptr_cv_BP_VAR_R((opline+1)->op1.var EXECUTE_DATA_CC);
			value = zend_assign_to_variable_ex(variable_ptr, value, IS_CV, EX_USES_STRICT_TYPES(), &garbage);
		}
		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
			ZVAL_COPY(EX_VAR(opline->result.var), value);
		}
		if (garbage) {
			GC_DTOR_NO_REF(garbage);
		}
	} else {
		if (EXPECTED(Z_ISREF_P(object_ptr))) {
			object_ptr = Z_REFVAL_P(object_ptr);
			if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
				goto try_assign_dim_array;
			}
		}
		if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) {
			zend_object *obj = Z_OBJ_P(object_ptr);

			GC_ADDREF(obj);
			dim = EX_VAR(opline->op2.var);
			if (IS_CV == IS_CV && UNEXPECTED(Z_ISUNDEF_P(dim))) {
				dim = ZVAL_UNDEFINED_OP2();
			} else if (IS_CV == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
				dim++;
			}

			value = EX_VAR((opline+1)->op1.var);
			if (IS_CV == IS_CV && UNEXPECTED(Z_ISUNDEF_P(value))) {
				value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
			} else if (IS_CV & (IS_CV|IS_VAR)) {
				ZVAL_DEREF(value);
			}

			zend_assign_to_object_dim(obj, dim, value OPLINE_CC EXECUTE_DATA_CC);


			if (UNEXPECTED(GC_DELREF(obj) == 0)) {
				zend_objects_store_del(obj);
			}
		} else if (EXPECTED(Z_TYPE_P(object_ptr) == IS_STRING)) {
			if (IS_CV == IS_UNUSED) {
				zend_use_new_element_for_string();


				UNDEF_RESULT();
			} else {
				dim = EX_VAR(opline->op2.var);
				value = EX_VAR((opline+1)->op1.var);
				zend_assign_to_string_offset(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC);


			}
		} else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
			if (Z_ISREF_P(orig_object_ptr)
			 && ZEND_REF_HAS_TYPE_SOURCES(Z_REF_P(orig_object_ptr))
			 && !zend_verify_ref_array_assignable(Z_REF_P(orig_object_ptr))) {
				dim = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);


				UNDEF_RESULT();
			} else {
				HashTable *ht = zend_new_array(8);
				uint8_t old_type = Z_TYPE_P(object_ptr);

				ZVAL_ARR(object_ptr, ht);
				if (UNEXPECTED(old_type == IS_FALSE)) {
					GC_ADDREF(ht);
					zend_false_to_array_deprecated();
					if (UNEXPECTED(GC_DELREF(ht) == 0)) {
						zend_array_destroy(ht);
						goto assign_dim_error;
					}
				}
				goto try_assign_dim_array;
			}
		} else {
			zend_use_scalar_as_array();
			dim = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
assign_dim_error:


			if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
				ZVAL_NULL(EX_VAR(opline->result.var));
			}
		}
	}
	if (IS_CV != IS_UNUSED) {


	}
	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
	/* assign_dim has two opcodes! */
	ZEND_VM_NEXT_OPCODE_EX(1, 2);
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_ASSIGN_SPEC_VAR_CV_RETVAL_UNUSED_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *value;
	zval *variable_ptr;

	SAVE_OPLINE();
	value = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
	variable_ptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);

	if (0 || UNEXPECTED(0)) {
		zend_refcounted *garbage = NULL;

		value = zend_assign_to_variable_ex(variable_ptr, value, IS_CV, EX_USES_STRICT_TYPES(), &garbage);
		if (UNEXPECTED(0)) {
			ZVAL_COPY(EX_VAR(opline->result.var), value);
		}
		if (garbage) {
			GC_DTOR_NO_REF(garbage);
		}
	} else {
		value = zend_assign_to_variable(variable_ptr, value, IS_CV, EX_USES_STRICT_TYPES());
	}
	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
	/* zend_assign_to_variable() always takes care of op2, never free it! */

	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_ASSIGN_SPEC_VAR_CV_RETVAL_USED_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *value;
	zval *variable_ptr;

	SAVE_OPLINE();
	value = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
	variable_ptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);

	if (0 || UNEXPECTED(1)) {
		zend_refcounted *garbage = NULL;

		value = zend_assign_to_variable_ex(variable_ptr, value, IS_CV, EX_USES_STRICT_TYPES(), &garbage);
		if (UNEXPECTED(1)) {
			ZVAL_COPY(EX_VAR(opline->result.var), value);
		}
		if (garbage) {
			GC_DTOR_NO_REF(garbage);
		}
	} else {
		value = zend_assign_to_variable(variable_ptr, value, IS_CV, EX_USES_STRICT_TYPES());
	}
	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
	/* zend_assign_to_variable() always takes care of op2, never free it! */

	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_ASSIGN_REF_SPEC_VAR_CV_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *variable_ptr;
	zval *value_ptr;
	zend_refcounted *garbage = NULL;

	SAVE_OPLINE();
	value_ptr = _get_zval_ptr_cv_BP_VAR_W(opline->op2.var EXECUTE_DATA_CC);
	variable_ptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);

	if (IS_VAR == IS_VAR &&
	           UNEXPECTED(Z_TYPE_P(EX_VAR(opline->op1.var)) != IS_INDIRECT)) {

		zend_throw_error(NULL, "Cannot assign by reference to an array dimension of an object");
		variable_ptr = &EG(uninitialized_zval);
	} else if (IS_CV == IS_VAR &&
	           opline->extended_value == ZEND_RETURNS_FUNCTION &&
			   UNEXPECTED(!Z_ISREF_P(value_ptr))) {

		variable_ptr = zend_wrong_assign_to_variable_reference(
			variable_ptr, value_ptr, &garbage OPLINE_CC EXECUTE_DATA_CC);
	} else {
		zend_assign_to_variable_reference(variable_ptr, value_ptr, &garbage);
	}

	if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
		ZVAL_COPY(EX_VAR(opline->result.var), variable_ptr);
	}

	if (garbage) {
		GC_DTOR(garbage);
	}


	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_ASSIGN_OBJ_REF_SPEC_VAR_CV_OP_DATA_VAR_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *property, *container, *value_ptr;

	SAVE_OPLINE();

	container = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
	property = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);

	value_ptr = _get_zval_ptr_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);

	if (1) {
		if (IS_VAR == IS_UNUSED) {
			if (IS_CV == IS_CONST) {
				zend_assign_to_property_reference_this_const(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
			} else {
				zend_assign_to_property_reference_this_var(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
			}
		} else {
			if (IS_CV == IS_CONST) {
				zend_assign_to_property_reference_var_const(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
			} else {
				zend_assign_to_property_reference_var_var(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
			}
		}
	} else {
		zend_assign_to_property_reference(container, IS_VAR, property, IS_CV, value_ptr OPLINE_CC EXECUTE_DATA_CC);
	}

	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));


	zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
	ZEND_VM_NEXT_OPCODE_EX(1, 2);
}

/* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CONST|VAR) */
static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_ASSIGN_OBJ_REF_SPEC_VAR_CV_OP_DATA_CV_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *property, *container, *value_ptr;

	SAVE_OPLINE();

	container = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
	property = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);

	value_ptr = _get_zval_ptr_cv_BP_VAR_W((opline+1)->op1.var EXECUTE_DATA_CC);

	if (1) {
		if (IS_VAR == IS_UNUSED) {
			if (IS_CV == IS_CONST) {
				zend_assign_to_property_reference_this_const(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
			} else {
				zend_assign_to_property_reference_this_var(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
			}
		} else {
			if (IS_CV == IS_CONST) {
				zend_assign_to_property_reference_var_const(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
			} else {
				zend_assign_to_property_reference_var_var(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
			}
		}
	} else {
		zend_assign_to_property_reference(container, IS_VAR, property, IS_CV, value_ptr OPLINE_CC EXECUTE_DATA_CC);
	}

	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));




	ZEND_VM_NEXT_OPCODE_EX(1, 2);
}

/* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CONST|VAR) */
static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_INIT_STATIC_METHOD_CALL_SPEC_VAR_CV_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *function_name;
	zend_class_entry *ce;
	uint32_t call_info;
	zend_function *fbc;
	zend_execute_data *call;

	SAVE_OPLINE();

	if (IS_VAR == IS_CONST) {
		/* no function found. try a static method in class */
		ce = CACHED_PTR(opline->result.num);
		if (UNEXPECTED(ce == NULL)) {
			ce = zend_fetch_class_by_name(Z_STR_P(RT_CONSTANT(opline, opline->op1)), Z_STR_P(RT_CONSTANT(opline, opline->op1) + 1), ZEND_FETCH_CLASS_DEFAULT | ZEND_FETCH_CLASS_EXCEPTION);
			if (UNEXPECTED(ce == NULL)) {


				HANDLE_EXCEPTION();
			}
			if (IS_CV != IS_CONST) {
				CACHE_PTR(opline->result.num, ce);
			}
		}
	} else if (IS_VAR == IS_UNUSED) {
		ce = zend_fetch_class(NULL, opline->op1.num);
		if (UNEXPECTED(ce == NULL)) {


			HANDLE_EXCEPTION();
		}
	} else {
		ce = Z_CE_P(EX_VAR(opline->op1.var));
	}

	if (IS_VAR == IS_CONST &&
	    IS_CV == IS_CONST &&
	    EXPECTED((fbc = CACHED_PTR(opline->result.num + sizeof(void*))) != NULL)) {
		/* nothing to do */
	} else if (IS_VAR != IS_CONST &&
	           IS_CV == IS_CONST &&
	           EXPECTED(CACHED_PTR(opline->result.num) == ce)) {
		fbc = CACHED_PTR(opline->result.num + sizeof(void*));
	} else if (IS_CV != IS_UNUSED) {
		function_name = EX_VAR(opline->op2.var);
		if (IS_CV != IS_CONST) {
			if (UNEXPECTED(Z_TYPE_P(function_name) != IS_STRING)) {
				do {
					if (IS_CV & (IS_VAR|IS_CV) && Z_ISREF_P(function_name)) {
						function_name = Z_REFVAL_P(function_name);
						if (EXPECTED(Z_TYPE_P(function_name) == IS_STRING)) {
							break;
						}
					} else if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) {
						ZVAL_UNDEFINED_OP2();
						if (UNEXPECTED(EG(exception) != NULL)) {
							HANDLE_EXCEPTION();
						}
					}
					zend_throw_error(NULL, "Method name must be a string");


					HANDLE_EXCEPTION();
				} while (0);
			}
		}

		if (ce->get_static_method) {
			fbc = ce->get_static_method(ce, Z_STR_P(function_name));
		} else {
			fbc = zend_std_get_static_method(ce, Z_STR_P(function_name), ((IS_CV == IS_CONST) ? (RT_CONSTANT(opline, opline->op2) + 1) : NULL));
		}
		if (UNEXPECTED(fbc == NULL)) {
			if (EXPECTED(!EG(exception))) {
				zend_undefined_method(ce, Z_STR_P(function_name));
			}


			HANDLE_EXCEPTION();
		}
		if (IS_CV == IS_CONST &&
		    EXPECTED(!(fbc->common.fn_flags & (ZEND_ACC_CALL_VIA_TRAMPOLINE|ZEND_ACC_NEVER_CACHE))) &&
			EXPECTED(!(fbc->common.scope->ce_flags & ZEND_ACC_TRAIT))) {
			CACHE_POLYMORPHIC_PTR(opline->result.num, ce, fbc);
		}
		if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!RUN_TIME_CACHE(&fbc->op_array))) {
			init_func_run_time_cache(&fbc->op_array);
		}
		if (IS_CV != IS_CONST) {


		}
	} else {
		if (UNEXPECTED(ce->constructor == NULL)) {
			zend_throw_error(NULL, "Cannot call constructor");
			HANDLE_EXCEPTION();
		}
		if (Z_TYPE(EX(This)) == IS_OBJECT && Z_OBJ(EX(This))->ce != ce->constructor->common.scope && (ce->constructor->common.fn_flags & ZEND_ACC_PRIVATE)) {
			zend_throw_error(NULL, "Cannot call private %s::__construct()", ZSTR_VAL(ce->name));
			HANDLE_EXCEPTION();
		}
		fbc = ce->constructor;
		if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!RUN_TIME_CACHE(&fbc->op_array))) {
			init_func_run_time_cache(&fbc->op_array);
		}
	}

	if (!(fbc->common.fn_flags & ZEND_ACC_STATIC)) {
		if (Z_TYPE(EX(This)) == IS_OBJECT && instanceof_function(Z_OBJCE(EX(This)), ce)) {
			ce = (zend_class_entry*)Z_OBJ(EX(This));
			call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_HAS_THIS;
		} else {
			zend_non_static_method_call(fbc);
			HANDLE_EXCEPTION();
		}
	} else {
		/* previous opcode is ZEND_FETCH_CLASS */
		if (IS_VAR == IS_UNUSED
		 && ((opline->op1.num & ZEND_FETCH_CLASS_MASK) == ZEND_FETCH_CLASS_PARENT ||
		     (opline->op1.num & ZEND_FETCH_CLASS_MASK) == ZEND_FETCH_CLASS_SELF)) {
			if (Z_TYPE(EX(This)) == IS_OBJECT) {
				ce = Z_OBJCE(EX(This));
			} else {
				ce = Z_CE(EX(This));
			}
		}
		call_info = ZEND_CALL_NESTED_FUNCTION;
	}

	call = zend_vm_stack_push_call_frame(call_info,
		fbc, opline->extended_value, ce);
	call->prev_execute_data = EX(call);
	EX(call) = call;

	ZEND_VM_NEXT_OPCODE();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_CV_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *expr_ptr, new_expr;

	SAVE_OPLINE();
	if ((IS_VAR == IS_VAR || IS_VAR == IS_CV) &&
	    UNEXPECTED(opline->extended_value & ZEND_ARRAY_ELEMENT_REF)) {
		expr_ptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
		if (Z_ISREF_P(expr_ptr)) {
			Z_ADDREF_P(expr_ptr);
		} else {
			ZVAL_MAKE_REF_EX(expr_ptr, 2);
		}
		zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
	} else {
		expr_ptr = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
		if (IS_VAR == IS_TMP_VAR) {
			/* pass */
		} else if (IS_VAR == IS_CONST) {
			Z_TRY_ADDREF_P(expr_ptr);
		} else if (IS_VAR == IS_CV) {
			ZVAL_DEREF(expr_ptr);
			Z_TRY_ADDREF_P(expr_ptr);
		} else /* if (IS_VAR == IS_VAR) */ {
			if (UNEXPECTED(Z_ISREF_P(expr_ptr))) {
				zend_refcounted *ref = Z_COUNTED_P(expr_ptr);

				expr_ptr = Z_REFVAL_P(expr_ptr);
				if (UNEXPECTED(GC_DELREF(ref) == 0)) {
					ZVAL_COPY_VALUE(&new_expr, expr_ptr);
					expr_ptr = &new_expr;
					efree_size(ref, sizeof(zend_reference));
				} else if (Z_OPT_REFCOUNTED_P(expr_ptr)) {
					Z_ADDREF_P(expr_ptr);
				}
			}
		}
	}

	if (IS_CV != IS_UNUSED) {
		zval *offset = EX_VAR(opline->op2.var);
		zend_string *str;
		zend_ulong hval;

add_again:
		if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) {
			str = Z_STR_P(offset);
			if (IS_CV != IS_CONST) {
				if (ZEND_HANDLE_NUMERIC(str, hval)) {
					goto num_index;
				}
			}
str_index:
			zend_hash_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), str, expr_ptr);
		} else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
			hval = Z_LVAL_P(offset);
num_index:
			zend_hash_index_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), hval, expr_ptr);
		} else if ((IS_CV & (IS_VAR|IS_CV)) && EXPECTED(Z_TYPE_P(offset) == IS_REFERENCE)) {
			offset = Z_REFVAL_P(offset);
			goto add_again;
		} else if (UNEXPECTED(Z_TYPE_P(offset) == IS_NULL)) {
			zval tmp;
			if (IS_VAR == IS_CV || IS_VAR == IS_VAR) {
				ZVAL_COPY(&tmp, expr_ptr);
			}
			zend_error(E_DEPRECATED, "Using null as an array offset is deprecated, use an empty string instead");
			if (IS_VAR == IS_CV || IS_VAR == IS_VAR) {
				/* A userland error handler can do funky things to the expression, so reset it */
				zval_ptr_dtor(expr_ptr);
				ZVAL_COPY_VALUE(expr_ptr, &tmp);
			}
			if (UNEXPECTED(EG(exception))) {
				zval_ptr_dtor_nogc(expr_ptr);
				HANDLE_EXCEPTION();
			}
			str = ZSTR_EMPTY_ALLOC();
			goto str_index;
		} else if (Z_TYPE_P(offset) == IS_DOUBLE) {
			hval = zend_dval_to_lval_safe(Z_DVAL_P(offset));
			goto num_index;
		} else if (Z_TYPE_P(offset) == IS_FALSE) {
			hval = 0;
			goto num_index;
		} else if (Z_TYPE_P(offset) == IS_TRUE) {
			hval = 1;
			goto num_index;
		} else if (Z_TYPE_P(offset) == IS_RESOURCE) {
			zend_use_resource_as_offset(offset);
			hval = Z_RES_HANDLE_P(offset);
			goto num_index;
		} else if (IS_CV == IS_CV && Z_TYPE_P(offset) == IS_UNDEF) {
			ZVAL_UNDEFINED_OP2();
			str = ZSTR_EMPTY_ALLOC();
			goto str_index;
		} else {
			zend_illegal_array_offset_access(offset);
			zval_ptr_dtor_nogc(expr_ptr);
		}


	} else {
		if (!zend_hash_next_index_insert(Z_ARRVAL_P(EX_VAR(opline->result.var)), expr_ptr)) {
			zend_cannot_add_element();
			zval_ptr_dtor_nogc(expr_ptr);
		}
	}
	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_INIT_ARRAY_SPEC_VAR_CV_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	zval *array;
	uint32_t size;
	USE_OPLINE

	SAVE_OPLINE();
	array = EX_VAR(opline->result.var);
	if (IS_VAR != IS_UNUSED) {
		size = opline->extended_value >> ZEND_ARRAY_SIZE_SHIFT;
		ZVAL_ARR(array, zend_new_array(size));
		/* Explicitly initialize array as not-packed if flag is set */
		if (opline->extended_value & ZEND_ARRAY_NOT_PACKED) {
			zend_hash_real_init_mixed(Z_ARRVAL_P(array));
		}
		ZEND_VM_TAIL_CALL(ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_CV_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
	} else {
		ZVAL_ARR(array, zend_new_array(0));
		ZEND_VM_NEXT_OPCODE();
	}
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_UNSET_DIM_SPEC_VAR_CV_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *container;
	zval *offset;
	zend_ulong hval;
	zend_string *key;

	SAVE_OPLINE();
	container = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
	offset = EX_VAR(opline->op2.var);

	do {
		if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
			HashTable *ht;

unset_dim_array:
			SEPARATE_ARRAY(container);
			ht = Z_ARRVAL_P(container);
offset_again:
			if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) {
				key = Z_STR_P(offset);
				if (IS_CV != IS_CONST) {
					if (ZEND_HANDLE_NUMERIC(key, hval)) {
						goto num_index_dim;
					}
				}
str_index_dim:
				ZEND_ASSERT(ht != &EG(symbol_table));
				zend_hash_del(ht, key);
			} else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
				hval = Z_LVAL_P(offset);
num_index_dim:
				zend_hash_index_del(ht, hval);
			} else if ((IS_CV & (IS_VAR|IS_CV)) && EXPECTED(Z_TYPE_P(offset) == IS_REFERENCE)) {
				offset = Z_REFVAL_P(offset);
				goto offset_again;
			} else if (Z_TYPE_P(offset) == IS_DOUBLE) {
				/* The array may be destroyed while throwing a warning in case the float is not representable as an int.
				 * Temporarily increase the refcount to detect this situation. */
				GC_TRY_ADDREF(ht);
				hval = zend_dval_to_lval_safe(Z_DVAL_P(offset));
				if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE) && !GC_DELREF(ht)) {
					zend_array_destroy(ht);
					break;
				}
				if (EG(exception)) {
					break;
				}
				goto num_index_dim;
			} else if (Z_TYPE_P(offset) == IS_NULL) {
				key = ZSTR_EMPTY_ALLOC();
				goto str_index_dim;
			} else if (Z_TYPE_P(offset) == IS_FALSE) {
				hval = 0;
				goto num_index_dim;
			} else if (Z_TYPE_P(offset) == IS_TRUE) {
				hval = 1;
				goto num_index_dim;
			} else if (Z_TYPE_P(offset) == IS_RESOURCE) {
				zend_use_resource_as_offset(offset);
				hval = Z_RES_HANDLE_P(offset);
				goto num_index_dim;
			} else if (IS_CV == IS_CV && Z_TYPE_P(offset) == IS_UNDEF) {
				ZVAL_UNDEFINED_OP2();
				key = ZSTR_EMPTY_ALLOC();
				goto str_index_dim;
			} else {
				zend_illegal_array_offset_unset(offset);
			}
			break;
		} else if (Z_ISREF_P(container)) {
			container = Z_REFVAL_P(container);
			if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
				goto unset_dim_array;
			}
		}
		if (IS_VAR == IS_CV && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
			container = ZVAL_UNDEFINED_OP1();
		}
		if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(offset) == IS_UNDEF)) {
			offset = ZVAL_UNDEFINED_OP2();
		}
		if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
			if (IS_CV == IS_CONST && Z_EXTRA_P(offset) == ZEND_EXTRA_VALUE) {
				offset++;
			}
			Z_OBJ_HT_P(container)->unset_dimension(Z_OBJ_P(container), offset);
		} else if (UNEXPECTED(Z_TYPE_P(container) == IS_STRING)) {
			zend_throw_error(NULL, "Cannot unset string offsets");
		} else if (UNEXPECTED(Z_TYPE_P(container) > IS_FALSE)) {
			zend_throw_error(NULL, "Cannot unset offset in a non-array variable");
		} else if (UNEXPECTED(Z_TYPE_P(container) == IS_FALSE)) {
			zend_false_to_array_deprecated();
		}
	} while (0);


	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_UNSET_OBJ_SPEC_VAR_CV_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *container;
	zval *offset;
	zend_string *name, *tmp_name;

	SAVE_OPLINE();
	container = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
	offset = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);

	do {
		if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT)) {
			if (Z_ISREF_P(container)) {
				container = Z_REFVAL_P(container);
				if (Z_TYPE_P(container) != IS_OBJECT) {
					if (IS_VAR == IS_CV
					 && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
						ZVAL_UNDEFINED_OP1();
					}
					break;
				}
			} else {
				break;
			}
		}
		if (IS_CV == IS_CONST) {
			name = Z_STR_P(offset);
		} else {
			name = zval_try_get_tmp_string(offset, &tmp_name);
			if (UNEXPECTED(!name)) {
				break;
			}
		}
		Z_OBJ_HT_P(container)->unset_property(Z_OBJ_P(container), name, ((IS_CV == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL));
		if (IS_CV != IS_CONST) {
			zend_tmp_string_release(tmp_name);
		}
	} while (0);


	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_YIELD_SPEC_VAR_CV_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE

	zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C);

	SAVE_OPLINE();
	if (UNEXPECTED(generator->flags & ZEND_GENERATOR_FORCED_CLOSE)) {
		ZEND_VM_TAIL_CALL(zend_yield_in_closed_generator_helper_SPEC_TAILCALL(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
	}

	/* Destroy the previously yielded value */
	zval_ptr_dtor(&generator->value);

	/* Destroy the previously yielded key */
	zval_ptr_dtor(&generator->key);

	/* Set the new yielded value */
	if (IS_VAR != IS_UNUSED) {
		if (UNEXPECTED(EX(func)->op_array.fn_flags & ZEND_ACC_RETURN_REFERENCE)) {
			/* Constants and temporary variables aren't yieldable by reference,
			 * but we still allow them with a notice. */
			if (IS_VAR & (IS_CONST|IS_TMP_VAR)) {
				zval *value;

				zend_error(E_NOTICE, "Only variable references should be yielded by reference");

				value = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
				ZVAL_COPY_VALUE(&generator->value, value);
				if (IS_VAR == IS_CONST) {
					if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
						Z_ADDREF(generator->value);
					}
				}
			} else {
				zval *value_ptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);

				/* If a function call result is yielded and the function did
				 * not return by reference we throw a notice. */
				do {
					if (IS_VAR == IS_VAR) {
						ZEND_ASSERT(value_ptr != &EG(uninitialized_zval));
						if (opline->extended_value == ZEND_RETURNS_FUNCTION
						 && !Z_ISREF_P(value_ptr)) {
							zend_error(E_NOTICE, "Only variable references should be yielded by reference");
							ZVAL_COPY(&generator->value, value_ptr);
							break;
						}
					}
					if (Z_ISREF_P(value_ptr)) {
						Z_ADDREF_P(value_ptr);
					} else {
						ZVAL_MAKE_REF_EX(value_ptr, 2);
					}
					ZVAL_REF(&generator->value, Z_REF_P(value_ptr));
				} while (0);

				zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
			}
		} else {
			zval *value = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);

			/* Consts, temporary variables and references need copying */
			if (IS_VAR == IS_CONST) {
				ZVAL_COPY_VALUE(&generator->value, value);
				if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
					Z_ADDREF(generator->value);
				}
			} else if (IS_VAR == IS_TMP_VAR) {
				ZVAL_COPY_VALUE(&generator->value, value);
			} else if ((IS_VAR & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) {
				ZVAL_COPY(&generator->value, Z_REFVAL_P(value));
				zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
			} else {
				ZVAL_COPY_VALUE(&generator->value, value);
				if (IS_VAR == IS_CV) {
					if (Z_OPT_REFCOUNTED_P(value)) Z_ADDREF_P(value);
				}
			}
		}
	} else {
		/* If no value was specified yield null */
		ZVAL_NULL(&generator->value);
	}

	/* Set the new yielded key */
	if (IS_CV != IS_UNUSED) {
		zval *key = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
		if ((IS_CV & (IS_CV|IS_VAR)) && UNEXPECTED(Z_TYPE_P(key) == IS_REFERENCE)) {
			key = Z_REFVAL_P(key);
		}
		ZVAL_COPY(&generator->key, key);


		if (Z_TYPE(generator->key) == IS_LONG
		    && Z_LVAL(generator->key) > generator->largest_used_integer_key
		) {
			generator->largest_used_integer_key = Z_LVAL(generator->key);
		}
	} else {
		/* If no key was specified we use auto-increment keys */
		generator->largest_used_integer_key++;
		ZVAL_LONG(&generator->key, generator->largest_used_integer_key);
	}

	if (RETURN_VALUE_USED(opline)) {
		/* If the return value of yield is used set the send
		 * target and initialize it to NULL */
		generator->send_target = EX_VAR(opline->result.var);
		ZVAL_NULL(generator->send_target);
	} else {
		generator->send_target = NULL;
	}

	/* The GOTO VM uses a local opline variable. We need to set the opline
	 * variable in execute_data so we don't resume at an old position. */
	SAVE_OPLINE();

	ZEND_VM_RETURN();
}

static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_FE_FETCH_R_SIMPLE_SPEC_VAR_CV_RETVAL_UNUSED_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *array;
	zval *value, *variable_ptr;
	uint32_t value_type;
	HashTable *fe_ht;
	HashPosition pos;

	array = EX_VAR(opline->op1.var);
	SAVE_OPLINE();
	fe_ht = Z_ARRVAL_P(array);
	pos = Z_FE_POS_P(array);
	if (HT_IS_PACKED(fe_ht)) {
		value = fe_ht->arPacked + pos;
		while (1) {
			if (UNEXPECTED(pos >= fe_ht->nNumUsed)) {
				/* reached end of iteration */
				ZEND_VM_SET_RELATIVE_OPCODE(opline, opline->extended_value);
				ZEND_VM_CONTINUE();
			}
			value_type = Z_TYPE_INFO_P(value);
			ZEND_ASSERT(value_type != IS_INDIRECT);
			if (EXPECTED(value_type != IS_UNDEF)) {
				break;
			}
			pos++;
			value++;
		}
		Z_FE_POS_P(array) = pos + 1;
		if (0) {
			ZVAL_LONG(EX_VAR(opline->result.var), pos);
		}
	} else {
		Bucket *p;

		p = fe_ht->arData + pos;
		while (1) {
			if (UNEXPECTED(pos >= fe_ht->nNumUsed)) {
				/* reached end of iteration */
				ZEND_VM_SET_RELATIVE_OPCODE(opline, opline->extended_value);
				ZEND_VM_CONTINUE();
			}
			pos++;
			value = &p->val;
			value_type = Z_TYPE_INFO_P(value);
			ZEND_ASSERT(value_type != IS_INDIRECT);
			if (EXPECTED(value_type != IS_UNDEF)) {
				break;
			}
			p++;
		}
		Z_FE_POS_P(array) = pos;
		if (0) {
			if (!p->key) {
				ZVAL_LONG(EX_VAR(opline->result.var), p->h);
			} else {
				ZVAL_STR_COPY(EX_VAR(opline->result.var), p->key);
			}
		}
	}

	variable_ptr = EX_VAR(opline->op2.var);
	zend_assign_to_variable(variable_ptr, value, IS_CV, EX_USES_STRICT_TYPES());
	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}


static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_FE_FETCH_R_SIMPLE_SPEC_VAR_CV_RETVAL_USED_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *array;
	zval *value, *variable_ptr;
	uint32_t value_type;
	HashTable *fe_ht;
	HashPosition pos;

	array = EX_VAR(opline->op1.var);
	SAVE_OPLINE();
	fe_ht = Z_ARRVAL_P(array);
	pos = Z_FE_POS_P(array);
	if (HT_IS_PACKED(fe_ht)) {
		value = fe_ht->arPacked + pos;
		while (1) {
			if (UNEXPECTED(pos >= fe_ht->nNumUsed)) {
				/* reached end of iteration */
				ZEND_VM_SET_RELATIVE_OPCODE(opline, opline->extended_value);
				ZEND_VM_CONTINUE();
			}
			value_type = Z_TYPE_INFO_P(value);
			ZEND_ASSERT(value_type != IS_INDIRECT);
			if (EXPECTED(value_type != IS_UNDEF)) {
				break;
			}
			pos++;
			value++;
		}
		Z_FE_POS_P(array) = pos + 1;
		if (1) {
			ZVAL_LONG(EX_VAR(opline->result.var), pos);
		}
	} else {
		Bucket *p;

		p = fe_ht->arData + pos;
		while (1) {
			if (UNEXPECTED(pos >= fe_ht->nNumUsed)) {
				/* reached end of iteration */
				ZEND_VM_SET_RELATIVE_OPCODE(opline, opline->extended_value);
				ZEND_VM_CONTINUE();
			}
			pos++;
			value = &p->val;
			value_type = Z_TYPE_INFO_P(value);
			ZEND_ASSERT(value_type != IS_INDIRECT);
			if (EXPECTED(value_type != IS_UNDEF)) {
				break;
			}
			p++;
		}
		Z_FE_POS_P(array) = pos;
		if (1) {
			if (!p->key) {
				ZVAL_LONG(EX_VAR(opline->result.var), p->h);
			} else {
				ZVAL_STR_COPY(EX_VAR(opline->result.var), p->key);
			}
		}
	}

	variable_ptr = EX_VAR(opline->op2.var);
	zend_assign_to_variable(variable_ptr, value, IS_CV, EX_USES_STRICT_TYPES());
	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}


static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_CLONE_SPEC_UNUSED_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *obj;
	zend_object *zobj;
	zend_class_entry *ce, *scope;
	zend_function *clone;
	zend_object_clone_obj_t clone_call;

	SAVE_OPLINE();
	obj = &EX(This);

	/* ZEND_CLONE also exists as the clone() function and both implementations must be kept in sync.
	 * The OPcode intentionally does not support a clone-with property list to keep it simple. */

	do {
		if (IS_UNUSED == IS_CONST ||
		    (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(obj) != IS_OBJECT))) {
			if ((IS_UNUSED & (IS_VAR|IS_CV)) && Z_ISREF_P(obj)) {
				obj = Z_REFVAL_P(obj);
				if (EXPECTED(Z_TYPE_P(obj) == IS_OBJECT)) {
					break;
				}
			}
			ZVAL_UNDEF(EX_VAR(opline->result.var));
			if (IS_UNUSED == IS_CV && UNEXPECTED(Z_TYPE_P(obj) == IS_UNDEF)) {
				ZVAL_UNDEFINED_OP1();
				if (UNEXPECTED(EG(exception) != NULL)) {
					HANDLE_EXCEPTION();
				}
			}
			zend_type_error("clone(): Argument #1 ($object) must be of type object, %s given", zend_zval_value_name(obj));


			HANDLE_EXCEPTION();
		}
	} while (0);

	zobj = Z_OBJ_P(obj);
	ce = zobj->ce;
	clone = ce->clone;
	clone_call = zobj->handlers->clone_obj;
	if (UNEXPECTED(clone_call == NULL)) {
		zend_throw_error(NULL, "Trying to clone an uncloneable object of class %s", ZSTR_VAL(ce->name));


		ZVAL_UNDEF(EX_VAR(opline->result.var));
		HANDLE_EXCEPTION();
	}

	if (clone && !(clone->common.fn_flags & ZEND_ACC_PUBLIC)) {
		scope = EX(func)->op_array.scope;
		ZEND_ASSERT(!(clone->common.fn_flags & ZEND_ACC_PUBLIC));
		if (!zend_check_method_accessible(clone, scope)) {
			zend_bad_method_call(clone, clone->common.function_name, scope);


			ZVAL_UNDEF(EX_VAR(opline->result.var));
			HANDLE_EXCEPTION();
		}
	}

	ZVAL_OBJ(EX_VAR(opline->result.var), clone_call(zobj));


	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_FETCH_CLASS_NAME_SPEC_UNUSED_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	uint32_t fetch_type;
	zend_class_entry *called_scope, *scope;
	USE_OPLINE

	if (IS_UNUSED != IS_UNUSED) {
		SAVE_OPLINE();
		zval *op = NULL;
		if (UNEXPECTED(Z_TYPE_P(op) != IS_OBJECT)) {
			ZVAL_DEREF(op);
			if (Z_TYPE_P(op) != IS_OBJECT) {
				zend_type_error("Cannot use \"::class\" on %s", zend_zval_value_name(op));
				ZVAL_UNDEF(EX_VAR(opline->result.var));


				HANDLE_EXCEPTION();
			}
		}

		ZVAL_STR_COPY(EX_VAR(opline->result.var), Z_OBJCE_P(op)->name);


		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
	}

	fetch_type = opline->op1.num;
	scope = EX(func)->op_array.scope;
	if (UNEXPECTED(scope == NULL)) {
		SAVE_OPLINE();
		zend_throw_error(NULL, "Cannot use \"%s\" in the global scope",
			fetch_type == ZEND_FETCH_CLASS_SELF ? "self" :
			fetch_type == ZEND_FETCH_CLASS_PARENT ? "parent" : "static");
		ZVAL_UNDEF(EX_VAR(opline->result.var));
		HANDLE_EXCEPTION();
	}

	switch (fetch_type) {
		case ZEND_FETCH_CLASS_SELF:
			ZVAL_STR_COPY(EX_VAR(opline->result.var), scope->name);
			break;
		case ZEND_FETCH_CLASS_PARENT:
			if (UNEXPECTED(scope->parent == NULL)) {
				SAVE_OPLINE();
				zend_throw_error(NULL,
					"Cannot use \"parent\" when current class scope has no parent");
				ZVAL_UNDEF(EX_VAR(opline->result.var));
				HANDLE_EXCEPTION();
			}
			ZVAL_STR_COPY(EX_VAR(opline->result.var), scope->parent->name);
			break;
		case ZEND_FETCH_CLASS_STATIC:
			if (Z_TYPE(EX(This)) == IS_OBJECT) {
				called_scope = Z_OBJCE(EX(This));
			} else {
				called_scope = Z_CE(EX(This));
			}
			ZVAL_STR_COPY(EX_VAR(opline->result.var), called_scope->name);
			break;
		EMPTY_SWITCH_DEFAULT_CASE()
	}
	ZEND_VM_NEXT_OPCODE();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_ASSIGN_OBJ_OP_SPEC_UNUSED_CONST_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *object;
	zval *property;
	zval *value;
	zval *zptr;
	void *_cache_slot[3] = {0};
	void **cache_slot;
	zend_property_info *prop_info;
	zend_object *zobj;
	zend_string *name, *tmp_name;

	SAVE_OPLINE();
	object = &EX(This);
	property = RT_CONSTANT(opline, opline->op2);

	do {
		value = get_op_data_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1);

		if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
			if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
				object = Z_REFVAL_P(object);
				goto assign_op_object;
			}
			if (IS_UNUSED == IS_CV
			 && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
				ZVAL_UNDEFINED_OP1();
			}
			zend_throw_non_object_error(object, property OPLINE_CC EXECUTE_DATA_CC);
			break;
		}

assign_op_object:
		/* here we are sure we are dealing with an object */
		zobj = Z_OBJ_P(object);
		if (IS_CONST == IS_CONST) {
			name = Z_STR_P(property);
		} else {
			name = zval_try_get_tmp_string(property, &tmp_name);
			if (UNEXPECTED(!name)) {
				UNDEF_RESULT();
				break;
			}
		}
		cache_slot = (IS_CONST == IS_CONST) ? CACHE_ADDR((opline+1)->extended_value) : _cache_slot;
		if (EXPECTED((zptr = zobj->handlers->get_property_ptr_ptr(zobj, name, BP_VAR_RW, cache_slot)) != NULL)) {
			if (UNEXPECTED(Z_ISERROR_P(zptr))) {
				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
					ZVAL_NULL(EX_VAR(opline->result.var));
				}
			} else {
				zend_reference *ref;

				do {
					if (UNEXPECTED(Z_ISREF_P(zptr))) {
						ref = Z_REF_P(zptr);
						zptr = Z_REFVAL_P(zptr);
						if (UNEXPECTED(ZEND_REF_HAS_TYPE_SOURCES(ref))) {
							zend_binary_assign_op_typed_ref(ref, value OPLINE_CC EXECUTE_DATA_CC);
							break;
						}
					}

					prop_info = (zend_property_info*)CACHED_PTR_EX(cache_slot + 2);
					if (prop_info && ZEND_TYPE_IS_SET(prop_info->type)) {
						/* special case for typed properties */
						zend_binary_assign_op_typed_prop(prop_info, zptr, value OPLINE_CC EXECUTE_DATA_CC);
					} else {
						zend_binary_op(zptr, zptr, value OPLINE_CC);
					}
				} while (0);

				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
					ZVAL_COPY(EX_VAR(opline->result.var), zptr);
				}
			}
		} else {
			zend_assign_op_overloaded_property(zobj, name, cache_slot, value OPLINE_CC EXECUTE_DATA_CC);
		}
		if (IS_CONST != IS_CONST) {
			zend_tmp_string_release(tmp_name);
		}
	} while (0);

	FREE_OP((opline+1)->op1_type, (opline+1)->op1.var);




	/* assign_obj has two opcodes! */
	ZEND_VM_NEXT_OPCODE_EX(1, 2);
}

/* No specialization for op_types (CONST|TMP|VAR|CV, UNUSED|CONST|TMPVAR) */
static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_PRE_INC_OBJ_SPEC_UNUSED_CONST_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *object;
	zval *property;
	zval *zptr;
	void *_cache_slot[3] = {0};
	void **cache_slot;
	zend_property_info *prop_info;
	zend_object *zobj;
	zend_string *name, *tmp_name;

	SAVE_OPLINE();
	object = &EX(This);
	property = RT_CONSTANT(opline, opline->op2);

	do {
		if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
			if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
				object = Z_REFVAL_P(object);
				goto pre_incdec_object;
			}
			if (IS_UNUSED == IS_CV
			 && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
				ZVAL_UNDEFINED_OP1();
			}
			zend_throw_non_object_error(object, property OPLINE_CC EXECUTE_DATA_CC);
			break;
		}

pre_incdec_object:
		/* here we are sure we are dealing with an object */
		zobj = Z_OBJ_P(object);
		if (IS_CONST == IS_CONST) {
			name = Z_STR_P(property);
		} else {
			name = zval_try_get_tmp_string(property, &tmp_name);
			if (UNEXPECTED(!name)) {
				UNDEF_RESULT();
				break;
			}
		}
		cache_slot = (IS_CONST == IS_CONST) ? CACHE_ADDR(opline->extended_value) : _cache_slot;
		if (EXPECTED((zptr = zobj->handlers->get_property_ptr_ptr(zobj, name, BP_VAR_RW, cache_slot)) != NULL)) {
			if (UNEXPECTED(Z_ISERROR_P(zptr))) {
				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
					ZVAL_NULL(EX_VAR(opline->result.var));
				}
			} else {
				prop_info = (zend_property_info *) CACHED_PTR_EX(cache_slot + 2);
				zend_pre_incdec_property_zval(zptr,
					prop_info && ZEND_TYPE_IS_SET(prop_info->type) ? prop_info : NULL OPLINE_CC EXECUTE_DATA_CC);
			}
		} else {
			zend_pre_incdec_overloaded_property(zobj, name, cache_slot OPLINE_CC EXECUTE_DATA_CC);
		}
		if (IS_CONST != IS_CONST) {
			zend_tmp_string_release(tmp_name);
		}
	} while (0);




	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_POST_INC_OBJ_SPEC_UNUSED_CONST_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *object;
	zval *property;
	zval *zptr;
	void *_cache_slot[3] = {0};
	void **cache_slot;
	zend_property_info *prop_info;
	zend_object *zobj;
	zend_string *name, *tmp_name;

	SAVE_OPLINE();
	object = &EX(This);
	property = RT_CONSTANT(opline, opline->op2);

	do {
		if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
			if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
				object = Z_REFVAL_P(object);
				goto post_incdec_object;
			}
			if (IS_UNUSED == IS_CV
			 && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
				ZVAL_UNDEFINED_OP1();
			}
			zend_throw_non_object_error(object, property OPLINE_CC EXECUTE_DATA_CC);
			break;
		}

post_incdec_object:
		/* here we are sure we are dealing with an object */
		zobj = Z_OBJ_P(object);
		if (IS_CONST == IS_CONST) {
			name = Z_STR_P(property);
		} else {
			name = zval_try_get_tmp_string(property, &tmp_name);
			if (UNEXPECTED(!name)) {
				ZVAL_UNDEF(EX_VAR(opline->result.var));
				break;
			}
		}
		cache_slot = (IS_CONST == IS_CONST) ? CACHE_ADDR(opline->extended_value) : _cache_slot;
		if (EXPECTED((zptr = zobj->handlers->get_property_ptr_ptr(zobj, name, BP_VAR_RW, cache_slot)) != NULL)) {
			if (UNEXPECTED(Z_ISERROR_P(zptr))) {
				ZVAL_NULL(EX_VAR(opline->result.var));
			} else {
				prop_info = (zend_property_info*)CACHED_PTR_EX(cache_slot + 2);
				zend_post_incdec_property_zval(zptr,
					prop_info && ZEND_TYPE_IS_SET(prop_info->type) ? prop_info : NULL OPLINE_CC EXECUTE_DATA_CC);
			}
		} else {
			zend_post_incdec_overloaded_property(zobj, name, cache_slot OPLINE_CC EXECUTE_DATA_CC);
		}
		if (IS_CONST != IS_CONST) {
			zend_tmp_string_release(tmp_name);
		}
	} while (0);




	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static zend_always_inline ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_FETCH_OBJ_R_SPEC_UNUSED_CONST_TAILCALL_INLINE_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *container;
	void **cache_slot = NULL;

	SAVE_OPLINE();
	container = &EX(This);

	if (IS_UNUSED == IS_CONST ||
	    (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
		do {
			if ((IS_UNUSED & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
				container = Z_REFVAL_P(container);
				if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
					break;
				}
			}
			if (IS_UNUSED == IS_CV && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
				ZVAL_UNDEFINED_OP1();
			}
			zend_wrong_property_read(container, RT_CONSTANT(opline, opline->op2));
			ZVAL_NULL(EX_VAR(opline->result.var));
			goto fetch_obj_r_finish;
		} while (0);
	}

	/* here we are sure we are dealing with an object */
	do {
		zend_object *zobj = Z_OBJ_P(container);
		zend_string *name, *tmp_name;
		zval *retval;

		if (IS_CONST == IS_CONST) {
			cache_slot = CACHE_ADDR(opline->extended_value & ~ZEND_FETCH_REF /* FUNC_ARG fetch may contain it */);

			if (EXPECTED(zobj->ce == CACHED_PTR_EX(cache_slot))) {
				uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);

				if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
fetch_obj_r_simple:
					retval = OBJ_PROP(zobj, prop_offset);
					if (EXPECTED(Z_TYPE_INFO_P(retval) != IS_UNDEF)) {
						if (0 || (IS_UNUSED & (IS_TMP_VAR|IS_VAR)) != 0) {
							goto fetch_obj_r_copy;
						} else {
fetch_obj_r_fast_copy:
							ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
							ZEND_VM_NEXT_OPCODE();
						}
					}
				} else if (UNEXPECTED(IS_HOOKED_PROPERTY_OFFSET(prop_offset))) {
					zend_property_info *prop_info = CACHED_PTR_EX(cache_slot + 2);
					if (ZEND_IS_PROPERTY_HOOK_SIMPLE_READ(prop_offset)) {
						prop_offset = prop_info->offset;
						goto fetch_obj_r_simple;
					} else if (EXPECTED(ZEND_IS_PROPERTY_HOOK_SIMPLE_GET(prop_offset))) {
						zend_function *hook = prop_info->hooks[ZEND_PROPERTY_HOOK_GET];
						ZEND_ASSERT(hook->type == ZEND_USER_FUNCTION);
						ZEND_ASSERT(RUN_TIME_CACHE(&hook->op_array));

						uint32_t call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_HAS_THIS;
						if (IS_UNUSED & IS_CV) {
							GC_ADDREF(zobj);
						}
						if (IS_UNUSED & (IS_CV|IS_VAR|IS_TMP_VAR)) {
							call_info |= ZEND_CALL_RELEASE_THIS;
						}
						zend_execute_data *call = zend_vm_stack_push_call_frame(call_info, hook, 0, zobj);
						call->prev_execute_data = execute_data;
						call->call = NULL;
						call->return_value = EX_VAR(opline->result.var);
						call->run_time_cache = RUN_TIME_CACHE(&hook->op_array);

						execute_data = call;
						EG(current_execute_data) = execute_data;
						zend_init_cvs(0, hook->op_array.last_var EXECUTE_DATA_CC);

#if defined(ZEND_VM_IP_GLOBAL_REG) && ((ZEND_VM_KIND == ZEND_VM_KIND_CALL) || (ZEND_VM_KIND == ZEND_VM_KIND_HYBRID))
						opline = hook->op_array.opcodes;
#else
						EX(opline) = hook->op_array.opcodes;
#endif
						LOAD_OPLINE_EX();




						ZEND_VM_ENTER_EX();
					}
					/* Fall through to read_property for hooks. */
				} else if (EXPECTED(zobj->properties != NULL)) {
					ZEND_ASSERT(IS_DYNAMIC_PROPERTY_OFFSET(prop_offset));
					name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
					if (!IS_UNKNOWN_DYNAMIC_PROPERTY_OFFSET(prop_offset)) {
						uintptr_t idx = ZEND_DECODE_DYN_PROP_OFFSET(prop_offset);

						if (EXPECTED(idx < zobj->properties->nNumUsed * sizeof(Bucket))) {
							Bucket *p = (Bucket*)((char*)zobj->properties->arData + idx);

							if (EXPECTED(p->key == name) ||
							    (EXPECTED(p->h == ZSTR_H(name)) &&
							     EXPECTED(p->key != NULL) &&
							     EXPECTED(zend_string_equal_content(p->key, name)))) {
								retval = &p->val;
								if (0 || (IS_UNUSED & (IS_TMP_VAR|IS_VAR)) != 0) {
									goto fetch_obj_r_copy;
								} else {
									goto fetch_obj_r_fast_copy;
								}
							}
						}
						CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_DYNAMIC_PROPERTY_OFFSET);
					}
					retval = zend_hash_find_known_hash(zobj->properties, name);
					if (EXPECTED(retval)) {
						uintptr_t idx = (char*)retval - (char*)zobj->properties->arData;
						CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_ENCODE_DYN_PROP_OFFSET(idx));
						if (0 || (IS_UNUSED & (IS_TMP_VAR|IS_VAR)) != 0) {
							goto fetch_obj_r_copy;
						} else {
							goto fetch_obj_r_fast_copy;
						}
					}
				}
			}
			name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
		} else {
			name = zval_try_get_tmp_string(RT_CONSTANT(opline, opline->op2), &tmp_name);
			if (UNEXPECTED(!name)) {
				ZVAL_UNDEF(EX_VAR(opline->result.var));
				break;
			}
		}

#if ZEND_DEBUG
		/* For non-standard object handlers, verify a declared property type in debug builds.
		 * Fetch prop_info before calling read_property(), as it may deallocate the object. */
		zend_property_info *prop_info = NULL;
		if (zobj->handlers->read_property != zend_std_read_property) {
			prop_info = zend_get_property_info(zobj->ce, name, /* silent */ true);
		}
#endif
		retval = zobj->handlers->read_property(zobj, name, BP_VAR_R, cache_slot, EX_VAR(opline->result.var));
#if ZEND_DEBUG
		if (!EG(exception) && prop_info && prop_info != ZEND_WRONG_PROPERTY_INFO
				&& ZEND_TYPE_IS_SET(prop_info->type)) {
			ZVAL_OPT_DEREF(retval);
			zend_verify_property_type(prop_info, retval, /* strict */ true);
		}
#endif

		if (IS_CONST != IS_CONST) {
			zend_tmp_string_release(tmp_name);
		}

		if (retval != EX_VAR(opline->result.var)) {
fetch_obj_r_copy:
			ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
		} else if (UNEXPECTED(Z_ISREF_P(retval))) {
			zend_unwrap_reference(retval);
		}
	} while (0);

fetch_obj_r_finish:




	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_FETCH_OBJ_R_SPEC_UNUSED_CONST_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	ZEND_VM_TAIL_CALL(ZEND_FETCH_OBJ_R_SPEC_UNUSED_CONST_TAILCALL_INLINE_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_FETCH_OBJ_W_SPEC_UNUSED_CONST_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *property, *container, *result;

	SAVE_OPLINE();

	container = &EX(This);
	property = RT_CONSTANT(opline, opline->op2);
	result = EX_VAR(opline->result.var);
	zend_fetch_property_address(
		result, container, IS_UNUSED, property, IS_CONST,
		((IS_CONST == IS_CONST) ? CACHE_ADDR(opline->extended_value & ~ZEND_FETCH_OBJ_FLAGS) : NULL),
		BP_VAR_W, opline->extended_value, NULL OPLINE_CC EXECUTE_DATA_CC);


	if (IS_UNUSED == IS_VAR) {
		FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
	}
	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_FETCH_OBJ_RW_SPEC_UNUSED_CONST_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *property, *container, *result;

	SAVE_OPLINE();
	container = &EX(This);
	property = RT_CONSTANT(opline, opline->op2);
	result = EX_VAR(opline->result.var);
	zend_fetch_property_address(result, container, IS_UNUSED, property, IS_CONST, ((IS_CONST == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL), BP_VAR_RW, 0, NULL OPLINE_CC EXECUTE_DATA_CC);


	if (IS_UNUSED == IS_VAR) {
		FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
	}
	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_FETCH_OBJ_IS_SPEC_UNUSED_CONST_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *container;
	void **cache_slot = NULL;

	SAVE_OPLINE();
	container = &EX(This);

	if (IS_UNUSED == IS_CONST ||
	    (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
		do {
			if ((IS_UNUSED & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
				container = Z_REFVAL_P(container);
				if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
					break;
				}
			}
			if (IS_CONST == IS_CV && Z_TYPE_P(EX_VAR(opline->op2.var)) == IS_UNDEF) {
				ZVAL_UNDEFINED_OP2();
			}
			ZVAL_NULL(EX_VAR(opline->result.var));
			goto fetch_obj_is_finish;
		} while (0);
	}

	/* here we are sure we are dealing with an object */
	do {
		zend_object *zobj = Z_OBJ_P(container);
		zend_string *name, *tmp_name;
		zval *retval;

		if (IS_CONST == IS_CONST) {
			cache_slot = CACHE_ADDR(opline->extended_value);

			if (EXPECTED(zobj->ce == CACHED_PTR_EX(cache_slot))) {
				uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);

				if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
fetch_obj_is_simple:
					retval = OBJ_PROP(zobj, prop_offset);
					if (EXPECTED(Z_TYPE_P(retval) != IS_UNDEF)) {
						if (0 || (IS_UNUSED & (IS_TMP_VAR|IS_VAR)) != 0) {
							goto fetch_obj_is_copy;
						} else {
fetch_obj_is_fast_copy:
							ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
							ZEND_VM_NEXT_OPCODE();
						}
					}
				} else if (UNEXPECTED(IS_HOOKED_PROPERTY_OFFSET(prop_offset))) {
					if (ZEND_IS_PROPERTY_HOOK_SIMPLE_READ(prop_offset)) {
						zend_property_info *prop_info = CACHED_PTR_EX(cache_slot + 2);
						prop_offset = prop_info->offset;
						goto fetch_obj_is_simple;
					}
					/* Fall through to read_property for hooks. */
				} else if (EXPECTED(zobj->properties != NULL)) {
					ZEND_ASSERT(IS_DYNAMIC_PROPERTY_OFFSET(prop_offset));
					name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
					if (!IS_UNKNOWN_DYNAMIC_PROPERTY_OFFSET(prop_offset)) {
						uintptr_t idx = ZEND_DECODE_DYN_PROP_OFFSET(prop_offset);

						if (EXPECTED(idx < zobj->properties->nNumUsed * sizeof(Bucket))) {
							Bucket *p = (Bucket*)((char*)zobj->properties->arData + idx);

							if (EXPECTED(p->key == name) ||
							    (EXPECTED(p->h == ZSTR_H(name)) &&
							     EXPECTED(p->key != NULL) &&
							     EXPECTED(zend_string_equal_content(p->key, name)))) {
								retval = &p->val;
								if (0 || (IS_UNUSED & (IS_TMP_VAR|IS_VAR)) != 0) {
									goto fetch_obj_is_copy;
								} else {
									goto fetch_obj_is_fast_copy;
								}
							}
						}
						CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_DYNAMIC_PROPERTY_OFFSET);
					}
					retval = zend_hash_find_known_hash(zobj->properties, name);
					if (EXPECTED(retval)) {
						uintptr_t idx = (char*)retval - (char*)zobj->properties->arData;
						CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_ENCODE_DYN_PROP_OFFSET(idx));
						if (0 || (IS_UNUSED & (IS_TMP_VAR|IS_VAR)) != 0) {
							goto fetch_obj_is_copy;
						} else {
							goto fetch_obj_is_fast_copy;
						}
					}
				}
			}
			name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
		} else {
			name = zval_try_get_tmp_string(RT_CONSTANT(opline, opline->op2), &tmp_name);
			if (UNEXPECTED(!name)) {
				ZVAL_UNDEF(EX_VAR(opline->result.var));
				break;
			}
		}

		retval = zobj->handlers->read_property(zobj, name, BP_VAR_IS, cache_slot, EX_VAR(opline->result.var));

		if (IS_CONST != IS_CONST) {
			zend_tmp_string_release(tmp_name);
		}

		if (retval != EX_VAR(opline->result.var)) {
fetch_obj_is_copy:
			ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
		} else if (UNEXPECTED(Z_ISREF_P(retval))) {
			zend_unwrap_reference(retval);
		}
	} while (0);

fetch_obj_is_finish:




	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_FETCH_OBJ_FUNC_ARG_SPEC_UNUSED_CONST_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
#if 0
	USE_OPLINE
#endif

	if (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) {
		/* Behave like FETCH_OBJ_W */
		if ((IS_UNUSED & (IS_CONST|IS_TMP_VAR))) {
			ZEND_VM_TAIL_CALL(zend_use_tmp_in_write_context_helper_SPEC_TAILCALL(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
		}
		ZEND_VM_TAIL_CALL(ZEND_FETCH_OBJ_W_SPEC_UNUSED_CONST_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
	} else {
		ZEND_VM_TAIL_CALL(ZEND_FETCH_OBJ_R_SPEC_UNUSED_CONST_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
	}
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_FETCH_OBJ_UNSET_SPEC_UNUSED_CONST_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *container, *property, *result;

	SAVE_OPLINE();
	container = &EX(This);
	property = RT_CONSTANT(opline, opline->op2);
	result = EX_VAR(opline->result.var);
	zend_fetch_property_address(result, container, IS_UNUSED, property, IS_CONST, ((IS_CONST == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL), BP_VAR_UNSET, 0, NULL OPLINE_CC EXECUTE_DATA_CC);


	if (IS_UNUSED == IS_VAR) {
		FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
	}
	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_ASSIGN_OBJ_SPEC_UNUSED_CONST_OP_DATA_CONST_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *object, *value, tmp;
	zend_object *zobj;
	zend_string *name, *tmp_name;
	zend_refcounted *garbage = NULL;

	SAVE_OPLINE();
	object = &EX(This);
	value = RT_CONSTANT((opline+1), (opline+1)->op1);

	if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
		if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
			object = Z_REFVAL_P(object);
			goto assign_object;
		}
		zend_throw_non_object_error(object, RT_CONSTANT(opline, opline->op2) OPLINE_CC EXECUTE_DATA_CC);
		value = &EG(uninitialized_zval);
		goto free_and_exit_assign_obj;
	}

assign_object:
	zobj = Z_OBJ_P(object);
	if (IS_CONST == IS_CONST) {
		if (EXPECTED(zobj->ce == CACHED_PTR(opline->extended_value))) {
			void **cache_slot = CACHE_ADDR(opline->extended_value);
			uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
			zval *property_val;
			zend_property_info *prop_info;

			if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
				prop_info = (zend_property_info*) CACHED_PTR_EX(cache_slot + 2);

assign_obj_simple:
				property_val = OBJ_PROP(zobj, prop_offset);
				if (Z_TYPE_P(property_val) != IS_UNDEF) {
					if (prop_info != NULL) {
						value = zend_assign_to_typed_prop(prop_info, property_val, value, &garbage EXECUTE_DATA_CC);
						goto free_and_exit_assign_obj;
					} else {
fast_assign_obj:
						value = zend_assign_to_variable_ex(property_val, value, IS_CONST, EX_USES_STRICT_TYPES(), &garbage);
						if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
							ZVAL_COPY(EX_VAR(opline->result.var), value);
						}
						goto exit_assign_obj;
					}
				}
			} else if (EXPECTED(IS_DYNAMIC_PROPERTY_OFFSET(prop_offset))) {
				name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
				if (UNEXPECTED(zend_lazy_object_must_init(zobj))) {
					zobj = zend_lazy_object_init(zobj);
					if (!zobj) {
						value = &EG(uninitialized_zval);
						goto free_and_exit_assign_obj;
					}
				}
				if (!zobj->ce->__set && (zobj->ce->ce_flags & ZEND_ACC_ALLOW_DYNAMIC_PROPERTIES)) {
					rebuild_object_properties_internal(zobj);
				}
				if (EXPECTED(zobj->properties != NULL)) {
					if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
						if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
							GC_DELREF(zobj->properties);
						}
						zobj->properties = zend_array_dup(zobj->properties);
					}
					property_val = zend_hash_find_known_hash(zobj->properties, name);
					if (property_val) {
						goto fast_assign_obj;
					}
				}

				if (!zobj->ce->__set && (zobj->ce->ce_flags & ZEND_ACC_ALLOW_DYNAMIC_PROPERTIES)) {
					if (IS_CONST == IS_CONST) {
						if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
							Z_ADDREF_P(value);
						}
					} else if (IS_CONST != IS_TMP_VAR) {
						if (Z_ISREF_P(value)) {
							if (IS_CONST == IS_VAR) {
								zend_reference *ref = Z_REF_P(value);
								if (GC_DELREF(ref) == 0) {
									ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
									efree_size(ref, sizeof(zend_reference));
									value = &tmp;
								} else {
									value = Z_REFVAL_P(value);
									Z_TRY_ADDREF_P(value);
								}
							} else {
								value = Z_REFVAL_P(value);
								Z_TRY_ADDREF_P(value);
							}
						} else if (IS_CONST == IS_CV) {
							Z_TRY_ADDREF_P(value);
						}
					}
					zend_hash_add_new(zobj->properties, name, value);
					if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
						ZVAL_COPY(EX_VAR(opline->result.var), value);
					}
					goto exit_assign_obj;
				}
			} else {
				ZEND_ASSERT(IS_HOOKED_PROPERTY_OFFSET(prop_offset));
				if (ZEND_IS_PROPERTY_HOOK_SIMPLE_WRITE(prop_offset)) {
					prop_info = CACHED_PTR_EX(cache_slot + 2);
					prop_offset = prop_info->offset;
					if (!ZEND_TYPE_IS_SET(prop_info->type)) {
						prop_info = NULL;
					}
					goto assign_obj_simple;
				}
				/* Fall through to write_property for hooks. */
			}
		}
		name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
	} else {
		name = zval_try_get_tmp_string(RT_CONSTANT(opline, opline->op2), &tmp_name);
		if (UNEXPECTED(!name)) {


			UNDEF_RESULT();
			goto exit_assign_obj;
		}
	}

	if (IS_CONST == IS_CV || IS_CONST == IS_VAR) {
		ZVAL_DEREF(value);
	}

	value = zobj->handlers->write_property(zobj, name, value, (IS_CONST == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);

	if (IS_CONST != IS_CONST) {
		zend_tmp_string_release(tmp_name);
	}

free_and_exit_assign_obj:
	if (UNEXPECTED(RETURN_VALUE_USED(opline)) && value) {
		ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
	}


exit_assign_obj:
	if (garbage) {
		GC_DTOR_NO_REF(garbage);
	}




	/* assign_obj has two opcodes! */
	ZEND_VM_NEXT_OPCODE_EX(1, 2);
}

/* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CONST|VAR) */
static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_ASSIGN_OBJ_SPEC_UNUSED_CONST_OP_DATA_TMP_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *object, *value, tmp;
	zend_object *zobj;
	zend_string *name, *tmp_name;
	zend_refcounted *garbage = NULL;

	SAVE_OPLINE();
	object = &EX(This);
	value = _get_zval_ptr_tmp((opline+1)->op1.var EXECUTE_DATA_CC);

	if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
		if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
			object = Z_REFVAL_P(object);
			goto assign_object;
		}
		zend_throw_non_object_error(object, RT_CONSTANT(opline, opline->op2) OPLINE_CC EXECUTE_DATA_CC);
		value = &EG(uninitialized_zval);
		goto free_and_exit_assign_obj;
	}

assign_object:
	zobj = Z_OBJ_P(object);
	if (IS_CONST == IS_CONST) {
		if (EXPECTED(zobj->ce == CACHED_PTR(opline->extended_value))) {
			void **cache_slot = CACHE_ADDR(opline->extended_value);
			uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
			zval *property_val;
			zend_property_info *prop_info;

			if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
				prop_info = (zend_property_info*) CACHED_PTR_EX(cache_slot + 2);

assign_obj_simple:
				property_val = OBJ_PROP(zobj, prop_offset);
				if (Z_TYPE_P(property_val) != IS_UNDEF) {
					if (prop_info != NULL) {
						value = zend_assign_to_typed_prop(prop_info, property_val, value, &garbage EXECUTE_DATA_CC);
						goto free_and_exit_assign_obj;
					} else {
fast_assign_obj:
						value = zend_assign_to_variable_ex(property_val, value, IS_TMP_VAR, EX_USES_STRICT_TYPES(), &garbage);
						if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
							ZVAL_COPY(EX_VAR(opline->result.var), value);
						}
						goto exit_assign_obj;
					}
				}
			} else if (EXPECTED(IS_DYNAMIC_PROPERTY_OFFSET(prop_offset))) {
				name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
				if (UNEXPECTED(zend_lazy_object_must_init(zobj))) {
					zobj = zend_lazy_object_init(zobj);
					if (!zobj) {
						value = &EG(uninitialized_zval);
						goto free_and_exit_assign_obj;
					}
				}
				if (!zobj->ce->__set && (zobj->ce->ce_flags & ZEND_ACC_ALLOW_DYNAMIC_PROPERTIES)) {
					rebuild_object_properties_internal(zobj);
				}
				if (EXPECTED(zobj->properties != NULL)) {
					if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
						if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
							GC_DELREF(zobj->properties);
						}
						zobj->properties = zend_array_dup(zobj->properties);
					}
					property_val = zend_hash_find_known_hash(zobj->properties, name);
					if (property_val) {
						goto fast_assign_obj;
					}
				}

				if (!zobj->ce->__set && (zobj->ce->ce_flags & ZEND_ACC_ALLOW_DYNAMIC_PROPERTIES)) {
					if (IS_TMP_VAR == IS_CONST) {
						if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
							Z_ADDREF_P(value);
						}
					} else if (IS_TMP_VAR != IS_TMP_VAR) {
						if (Z_ISREF_P(value)) {
							if (IS_TMP_VAR == IS_VAR) {
								zend_reference *ref = Z_REF_P(value);
								if (GC_DELREF(ref) == 0) {
									ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
									efree_size(ref, sizeof(zend_reference));
									value = &tmp;
								} else {
									value = Z_REFVAL_P(value);
									Z_TRY_ADDREF_P(value);
								}
							} else {
								value = Z_REFVAL_P(value);
								Z_TRY_ADDREF_P(value);
							}
						} else if (IS_TMP_VAR == IS_CV) {
							Z_TRY_ADDREF_P(value);
						}
					}
					zend_hash_add_new(zobj->properties, name, value);
					if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
						ZVAL_COPY(EX_VAR(opline->result.var), value);
					}
					goto exit_assign_obj;
				}
			} else {
				ZEND_ASSERT(IS_HOOKED_PROPERTY_OFFSET(prop_offset));
				if (ZEND_IS_PROPERTY_HOOK_SIMPLE_WRITE(prop_offset)) {
					prop_info = CACHED_PTR_EX(cache_slot + 2);
					prop_offset = prop_info->offset;
					if (!ZEND_TYPE_IS_SET(prop_info->type)) {
						prop_info = NULL;
					}
					goto assign_obj_simple;
				}
				/* Fall through to write_property for hooks. */
			}
		}
		name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
	} else {
		name = zval_try_get_tmp_string(RT_CONSTANT(opline, opline->op2), &tmp_name);
		if (UNEXPECTED(!name)) {
			zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
			UNDEF_RESULT();
			goto exit_assign_obj;
		}
	}

	if (IS_TMP_VAR == IS_CV || IS_TMP_VAR == IS_VAR) {
		ZVAL_DEREF(value);
	}

	value = zobj->handlers->write_property(zobj, name, value, (IS_CONST == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);

	if (IS_CONST != IS_CONST) {
		zend_tmp_string_release(tmp_name);
	}

free_and_exit_assign_obj:
	if (UNEXPECTED(RETURN_VALUE_USED(opline)) && value) {
		ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
	}
	zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
exit_assign_obj:
	if (garbage) {
		GC_DTOR_NO_REF(garbage);
	}




	/* assign_obj has two opcodes! */
	ZEND_VM_NEXT_OPCODE_EX(1, 2);
}

/* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CONST|VAR) */
static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_ASSIGN_OBJ_SPEC_UNUSED_CONST_OP_DATA_VAR_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *object, *value, tmp;
	zend_object *zobj;
	zend_string *name, *tmp_name;
	zend_refcounted *garbage = NULL;

	SAVE_OPLINE();
	object = &EX(This);
	value = _get_zval_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);

	if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
		if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
			object = Z_REFVAL_P(object);
			goto assign_object;
		}
		zend_throw_non_object_error(object, RT_CONSTANT(opline, opline->op2) OPLINE_CC EXECUTE_DATA_CC);
		value = &EG(uninitialized_zval);
		goto free_and_exit_assign_obj;
	}

assign_object:
	zobj = Z_OBJ_P(object);
	if (IS_CONST == IS_CONST) {
		if (EXPECTED(zobj->ce == CACHED_PTR(opline->extended_value))) {
			void **cache_slot = CACHE_ADDR(opline->extended_value);
			uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
			zval *property_val;
			zend_property_info *prop_info;

			if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
				prop_info = (zend_property_info*) CACHED_PTR_EX(cache_slot + 2);

assign_obj_simple:
				property_val = OBJ_PROP(zobj, prop_offset);
				if (Z_TYPE_P(property_val) != IS_UNDEF) {
					if (prop_info != NULL) {
						value = zend_assign_to_typed_prop(prop_info, property_val, value, &garbage EXECUTE_DATA_CC);
						goto free_and_exit_assign_obj;
					} else {
fast_assign_obj:
						value = zend_assign_to_variable_ex(property_val, value, IS_VAR, EX_USES_STRICT_TYPES(), &garbage);
						if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
							ZVAL_COPY(EX_VAR(opline->result.var), value);
						}
						goto exit_assign_obj;
					}
				}
			} else if (EXPECTED(IS_DYNAMIC_PROPERTY_OFFSET(prop_offset))) {
				name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
				if (UNEXPECTED(zend_lazy_object_must_init(zobj))) {
					zobj = zend_lazy_object_init(zobj);
					if (!zobj) {
						value = &EG(uninitialized_zval);
						goto free_and_exit_assign_obj;
					}
				}
				if (!zobj->ce->__set && (zobj->ce->ce_flags & ZEND_ACC_ALLOW_DYNAMIC_PROPERTIES)) {
					rebuild_object_properties_internal(zobj);
				}
				if (EXPECTED(zobj->properties != NULL)) {
					if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
						if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
							GC_DELREF(zobj->properties);
						}
						zobj->properties = zend_array_dup(zobj->properties);
					}
					property_val = zend_hash_find_known_hash(zobj->properties, name);
					if (property_val) {
						goto fast_assign_obj;
					}
				}

				if (!zobj->ce->__set && (zobj->ce->ce_flags & ZEND_ACC_ALLOW_DYNAMIC_PROPERTIES)) {
					if (IS_VAR == IS_CONST) {
						if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
							Z_ADDREF_P(value);
						}
					} else if (IS_VAR != IS_TMP_VAR) {
						if (Z_ISREF_P(value)) {
							if (IS_VAR == IS_VAR) {
								zend_reference *ref = Z_REF_P(value);
								if (GC_DELREF(ref) == 0) {
									ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
									efree_size(ref, sizeof(zend_reference));
									value = &tmp;
								} else {
									value = Z_REFVAL_P(value);
									Z_TRY_ADDREF_P(value);
								}
							} else {
								value = Z_REFVAL_P(value);
								Z_TRY_ADDREF_P(value);
							}
						} else if (IS_VAR == IS_CV) {
							Z_TRY_ADDREF_P(value);
						}
					}
					zend_hash_add_new(zobj->properties, name, value);
					if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
						ZVAL_COPY(EX_VAR(opline->result.var), value);
					}
					goto exit_assign_obj;
				}
			} else {
				ZEND_ASSERT(IS_HOOKED_PROPERTY_OFFSET(prop_offset));
				if (ZEND_IS_PROPERTY_HOOK_SIMPLE_WRITE(prop_offset)) {
					prop_info = CACHED_PTR_EX(cache_slot + 2);
					prop_offset = prop_info->offset;
					if (!ZEND_TYPE_IS_SET(prop_info->type)) {
						prop_info = NULL;
					}
					goto assign_obj_simple;
				}
				/* Fall through to write_property for hooks. */
			}
		}
		name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
	} else {
		name = zval_try_get_tmp_string(RT_CONSTANT(opline, opline->op2), &tmp_name);
		if (UNEXPECTED(!name)) {
			zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
			UNDEF_RESULT();
			goto exit_assign_obj;
		}
	}

	if (IS_VAR == IS_CV || IS_VAR == IS_VAR) {
		ZVAL_DEREF(value);
	}

	value = zobj->handlers->write_property(zobj, name, value, (IS_CONST == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);

	if (IS_CONST != IS_CONST) {
		zend_tmp_string_release(tmp_name);
	}

free_and_exit_assign_obj:
	if (UNEXPECTED(RETURN_VALUE_USED(opline)) && value) {
		ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
	}
	zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
exit_assign_obj:
	if (garbage) {
		GC_DTOR_NO_REF(garbage);
	}




	/* assign_obj has two opcodes! */
	ZEND_VM_NEXT_OPCODE_EX(1, 2);
}

/* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CONST|VAR) */
static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_ASSIGN_OBJ_SPEC_UNUSED_CONST_OP_DATA_CV_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *object, *value, tmp;
	zend_object *zobj;
	zend_string *name, *tmp_name;
	zend_refcounted *garbage = NULL;

	SAVE_OPLINE();
	object = &EX(This);
	value = _get_zval_ptr_cv_BP_VAR_R((opline+1)->op1.var EXECUTE_DATA_CC);

	if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
		if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
			object = Z_REFVAL_P(object);
			goto assign_object;
		}
		zend_throw_non_object_error(object, RT_CONSTANT(opline, opline->op2) OPLINE_CC EXECUTE_DATA_CC);
		value = &EG(uninitialized_zval);
		goto free_and_exit_assign_obj;
	}

assign_object:
	zobj = Z_OBJ_P(object);
	if (IS_CONST == IS_CONST) {
		if (EXPECTED(zobj->ce == CACHED_PTR(opline->extended_value))) {
			void **cache_slot = CACHE_ADDR(opline->extended_value);
			uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
			zval *property_val;
			zend_property_info *prop_info;

			if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
				prop_info = (zend_property_info*) CACHED_PTR_EX(cache_slot + 2);

assign_obj_simple:
				property_val = OBJ_PROP(zobj, prop_offset);
				if (Z_TYPE_P(property_val) != IS_UNDEF) {
					if (prop_info != NULL) {
						value = zend_assign_to_typed_prop(prop_info, property_val, value, &garbage EXECUTE_DATA_CC);
						goto free_and_exit_assign_obj;
					} else {
fast_assign_obj:
						value = zend_assign_to_variable_ex(property_val, value, IS_CV, EX_USES_STRICT_TYPES(), &garbage);
						if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
							ZVAL_COPY(EX_VAR(opline->result.var), value);
						}
						goto exit_assign_obj;
					}
				}
			} else if (EXPECTED(IS_DYNAMIC_PROPERTY_OFFSET(prop_offset))) {
				name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
				if (UNEXPECTED(zend_lazy_object_must_init(zobj))) {
					zobj = zend_lazy_object_init(zobj);
					if (!zobj) {
						value = &EG(uninitialized_zval);
						goto free_and_exit_assign_obj;
					}
				}
				if (!zobj->ce->__set && (zobj->ce->ce_flags & ZEND_ACC_ALLOW_DYNAMIC_PROPERTIES)) {
					rebuild_object_properties_internal(zobj);
				}
				if (EXPECTED(zobj->properties != NULL)) {
					if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
						if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
							GC_DELREF(zobj->properties);
						}
						zobj->properties = zend_array_dup(zobj->properties);
					}
					property_val = zend_hash_find_known_hash(zobj->properties, name);
					if (property_val) {
						goto fast_assign_obj;
					}
				}

				if (!zobj->ce->__set && (zobj->ce->ce_flags & ZEND_ACC_ALLOW_DYNAMIC_PROPERTIES)) {
					if (IS_CV == IS_CONST) {
						if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
							Z_ADDREF_P(value);
						}
					} else if (IS_CV != IS_TMP_VAR) {
						if (Z_ISREF_P(value)) {
							if (IS_CV == IS_VAR) {
								zend_reference *ref = Z_REF_P(value);
								if (GC_DELREF(ref) == 0) {
									ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
									efree_size(ref, sizeof(zend_reference));
									value = &tmp;
								} else {
									value = Z_REFVAL_P(value);
									Z_TRY_ADDREF_P(value);
								}
							} else {
								value = Z_REFVAL_P(value);
								Z_TRY_ADDREF_P(value);
							}
						} else if (IS_CV == IS_CV) {
							Z_TRY_ADDREF_P(value);
						}
					}
					zend_hash_add_new(zobj->properties, name, value);
					if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
						ZVAL_COPY(EX_VAR(opline->result.var), value);
					}
					goto exit_assign_obj;
				}
			} else {
				ZEND_ASSERT(IS_HOOKED_PROPERTY_OFFSET(prop_offset));
				if (ZEND_IS_PROPERTY_HOOK_SIMPLE_WRITE(prop_offset)) {
					prop_info = CACHED_PTR_EX(cache_slot + 2);
					prop_offset = prop_info->offset;
					if (!ZEND_TYPE_IS_SET(prop_info->type)) {
						prop_info = NULL;
					}
					goto assign_obj_simple;
				}
				/* Fall through to write_property for hooks. */
			}
		}
		name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
	} else {
		name = zval_try_get_tmp_string(RT_CONSTANT(opline, opline->op2), &tmp_name);
		if (UNEXPECTED(!name)) {


			UNDEF_RESULT();
			goto exit_assign_obj;
		}
	}

	if (IS_CV == IS_CV || IS_CV == IS_VAR) {
		ZVAL_DEREF(value);
	}

	value = zobj->handlers->write_property(zobj, name, value, (IS_CONST == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);

	if (IS_CONST != IS_CONST) {
		zend_tmp_string_release(tmp_name);
	}

free_and_exit_assign_obj:
	if (UNEXPECTED(RETURN_VALUE_USED(opline)) && value) {
		ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
	}


exit_assign_obj:
	if (garbage) {
		GC_DTOR_NO_REF(garbage);
	}




	/* assign_obj has two opcodes! */
	ZEND_VM_NEXT_OPCODE_EX(1, 2);
}

/* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CONST|VAR) */
static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_ASSIGN_OBJ_REF_SPEC_UNUSED_CONST_OP_DATA_VAR_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *property, *container, *value_ptr;

	SAVE_OPLINE();

	container = &EX(This);
	property = RT_CONSTANT(opline, opline->op2);

	value_ptr = _get_zval_ptr_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);

	if (1) {
		if (IS_UNUSED == IS_UNUSED) {
			if (IS_CONST == IS_CONST) {
				zend_assign_to_property_reference_this_const(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
			} else {
				zend_assign_to_property_reference_this_var(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
			}
		} else {
			if (IS_CONST == IS_CONST) {
				zend_assign_to_property_reference_var_const(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
			} else {
				zend_assign_to_property_reference_var_var(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
			}
		}
	} else {
		zend_assign_to_property_reference(container, IS_UNUSED, property, IS_CONST, value_ptr OPLINE_CC EXECUTE_DATA_CC);
	}




	zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
	ZEND_VM_NEXT_OPCODE_EX(1, 2);
}

/* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CONST|VAR) */
static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_ASSIGN_OBJ_REF_SPEC_UNUSED_CONST_OP_DATA_CV_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *property, *container, *value_ptr;

	SAVE_OPLINE();

	container = &EX(This);
	property = RT_CONSTANT(opline, opline->op2);

	value_ptr = _get_zval_ptr_cv_BP_VAR_W((opline+1)->op1.var EXECUTE_DATA_CC);

	if (1) {
		if (IS_UNUSED == IS_UNUSED) {
			if (IS_CONST == IS_CONST) {
				zend_assign_to_property_reference_this_const(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
			} else {
				zend_assign_to_property_reference_this_var(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
			}
		} else {
			if (IS_CONST == IS_CONST) {
				zend_assign_to_property_reference_var_const(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
			} else {
				zend_assign_to_property_reference_var_var(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
			}
		}
	} else {
		zend_assign_to_property_reference(container, IS_UNUSED, property, IS_CONST, value_ptr OPLINE_CC EXECUTE_DATA_CC);
	}






	ZEND_VM_NEXT_OPCODE_EX(1, 2);
}

/* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CONST|VAR) */
static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_ROPE_INIT_SPEC_UNUSED_CONST_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zend_string **rope;
	zval *var;

	/* Compiler allocates the necessary number of zval slots to keep the rope */
	rope = (zend_string**)EX_VAR(opline->result.var);
	if (IS_CONST == IS_CONST) {
		var = RT_CONSTANT(opline, opline->op2);
		rope[0] = Z_STR_P(var);
		if (UNEXPECTED(Z_REFCOUNTED_P(var))) {
			Z_ADDREF_P(var);
		}
	} else {
		var = RT_CONSTANT(opline, opline->op2);
		if (EXPECTED(Z_TYPE_P(var) == IS_STRING)) {
			if (IS_CONST == IS_CV) {
				rope[0] = zend_string_copy(Z_STR_P(var));
			} else {
				rope[0] = Z_STR_P(var);
			}
		} else {
			SAVE_OPLINE();
			if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(var) == IS_UNDEF)) {
				ZVAL_UNDEFINED_OP2();
			}
			rope[0] = zval_get_string_func(var);


			ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
		}
	}
	ZEND_VM_NEXT_OPCODE();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_FETCH_CLASS_SPEC_UNUSED_CONST_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	zval *class_name;
	USE_OPLINE

	SAVE_OPLINE();
	if (IS_CONST == IS_UNUSED) {
		Z_CE_P(EX_VAR(opline->result.var)) = zend_fetch_class(NULL, opline->op1.num);
		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
	} else if (IS_CONST == IS_CONST) {
		zend_class_entry *ce = CACHED_PTR(opline->extended_value);

		if (UNEXPECTED(ce == NULL)) {
			class_name = RT_CONSTANT(opline, opline->op2);
			ce = zend_fetch_class_by_name(Z_STR_P(class_name), Z_STR_P(class_name + 1), opline->op1.num);
			CACHE_PTR(opline->extended_value, ce);
		}
		Z_CE_P(EX_VAR(opline->result.var)) = ce;
	} else {
		class_name = RT_CONSTANT(opline, opline->op2);
try_class_name:
		if (Z_TYPE_P(class_name) == IS_OBJECT) {
			Z_CE_P(EX_VAR(opline->result.var)) = Z_OBJCE_P(class_name);
		} else if (Z_TYPE_P(class_name) == IS_STRING) {
			Z_CE_P(EX_VAR(opline->result.var)) = zend_fetch_class(Z_STR_P(class_name), opline->op1.num);
		} else if ((IS_CONST & (IS_VAR|IS_CV)) && Z_TYPE_P(class_name) == IS_REFERENCE) {
			class_name = Z_REFVAL_P(class_name);
			goto try_class_name;
		} else {
			if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(class_name) == IS_UNDEF)) {
				ZVAL_UNDEFINED_OP2();
				if (UNEXPECTED(EG(exception) != NULL)) {
					HANDLE_EXCEPTION();
				}
			}
			zend_throw_error(NULL, "Class name must be a valid object or a string");
		}
	}


	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_INIT_METHOD_CALL_SPEC_UNUSED_CONST_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *function_name;
	zval *object;
	zend_function *fbc;
	zend_class_entry *called_scope;
	zend_object *obj;
	zend_execute_data *call;
	uint32_t call_info;

	SAVE_OPLINE();

	object = &EX(This);

	if (IS_CONST != IS_CONST) {
		function_name = RT_CONSTANT(opline, opline->op2);
	}

	if (IS_CONST != IS_CONST &&
	    UNEXPECTED(Z_TYPE_P(function_name) != IS_STRING)) {
		do {
			if ((IS_CONST & (IS_VAR|IS_CV)) && Z_ISREF_P(function_name)) {
				function_name = Z_REFVAL_P(function_name);
				if (EXPECTED(Z_TYPE_P(function_name) == IS_STRING)) {
					break;
				}
			} else if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) {
				ZVAL_UNDEFINED_OP2();
				if (UNEXPECTED(EG(exception) != NULL)) {


					HANDLE_EXCEPTION();
				}
			}
			zend_throw_error(NULL, "Method name must be a string");




			HANDLE_EXCEPTION();
		} while (0);
	}

	if (IS_UNUSED == IS_UNUSED) {
		obj = Z_OBJ_P(object);
	} else {
		do {
			if (IS_UNUSED != IS_CONST && EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
				obj = Z_OBJ_P(object);
			} else {
				if ((IS_UNUSED & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(object))) {
					zend_reference *ref = Z_REF_P(object);

					object = &ref->val;
					if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
						obj = Z_OBJ_P(object);
						if (IS_UNUSED & IS_VAR) {
							if (UNEXPECTED(GC_DELREF(ref) == 0)) {
								efree_size(ref, sizeof(zend_reference));
							} else {
								Z_ADDREF_P(object);
							}
						}
						break;
					}
				}
				if (IS_UNUSED == IS_CV && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
					object = ZVAL_UNDEFINED_OP1();
					if (UNEXPECTED(EG(exception) != NULL)) {
						if (IS_CONST != IS_CONST) {


						}
						HANDLE_EXCEPTION();
					}
				}
				if (IS_CONST == IS_CONST) {
					function_name = RT_CONSTANT(opline, opline->op2);
				}
				zend_invalid_method_call(object, function_name);




				HANDLE_EXCEPTION();
			}
		} while (0);
	}

	called_scope = obj->ce;

	if (IS_CONST == IS_CONST &&
	    EXPECTED(CACHED_PTR(opline->result.num) == called_scope)) {
		fbc = CACHED_PTR(opline->result.num + sizeof(void*));
	} else {
		zend_object *orig_obj = obj;

		if (IS_CONST == IS_CONST) {
			function_name = RT_CONSTANT(opline, opline->op2);
		}

		/* First, locate the function. */
		fbc = obj->handlers->get_method(&obj, Z_STR_P(function_name), ((IS_CONST == IS_CONST) ? (RT_CONSTANT(opline, opline->op2) + 1) : NULL));
		if (UNEXPECTED(fbc == NULL)) {
			if (EXPECTED(!EG(exception))) {
				zend_undefined_method(orig_obj->ce, Z_STR_P(function_name));
			}


			if ((IS_UNUSED & (IS_VAR|IS_TMP_VAR)) && GC_DELREF(orig_obj) == 0) {
				zend_objects_store_del(orig_obj);
			}
			HANDLE_EXCEPTION();
		}
		if (IS_CONST == IS_CONST &&
		    EXPECTED(!(fbc->common.fn_flags & (ZEND_ACC_CALL_VIA_TRAMPOLINE|ZEND_ACC_NEVER_CACHE))) &&
		    EXPECTED(obj == orig_obj)) {
			CACHE_POLYMORPHIC_PTR(opline->result.num, called_scope, fbc);
		}
		if ((IS_UNUSED & (IS_VAR|IS_TMP_VAR)) && UNEXPECTED(obj != orig_obj)) {
			GC_ADDREF(obj); /* For $this pointer */
			if (GC_DELREF(orig_obj) == 0) {
				zend_objects_store_del(orig_obj);
			}
		}
		if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!RUN_TIME_CACHE(&fbc->op_array))) {
			init_func_run_time_cache(&fbc->op_array);
		}
	}

	if (IS_CONST != IS_CONST) {


	}

	call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_HAS_THIS;
	if (UNEXPECTED((fbc->common.fn_flags & ZEND_ACC_STATIC) != 0)) {
		if ((IS_UNUSED & (IS_VAR|IS_TMP_VAR)) && GC_DELREF(obj) == 0) {
			zend_objects_store_del(obj);
			if (UNEXPECTED(EG(exception))) {
				HANDLE_EXCEPTION();
			}
		}
		/* call static method */
		obj = (zend_object*)called_scope;
		call_info = ZEND_CALL_NESTED_FUNCTION;
	} else if (IS_UNUSED & (IS_VAR|IS_TMP_VAR|IS_CV)) {
		if (IS_UNUSED == IS_CV) {
			GC_ADDREF(obj); /* For $this pointer */
		}
		/* CV may be changed indirectly (e.g. when it's a reference) */
		call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_HAS_THIS | ZEND_CALL_RELEASE_THIS;
	}

	call = zend_vm_stack_push_call_frame(call_info,
		fbc, opline->extended_value, obj);
	call->prev_execute_data = EX(call);
	EX(call) = call;

	ZEND_VM_NEXT_OPCODE();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_INIT_STATIC_METHOD_CALL_SPEC_UNUSED_CONST_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *function_name;
	zend_class_entry *ce;
	uint32_t call_info;
	zend_function *fbc;
	zend_execute_data *call;

	SAVE_OPLINE();

	if (IS_UNUSED == IS_CONST) {
		/* no function found. try a static method in class */
		ce = CACHED_PTR(opline->result.num);
		if (UNEXPECTED(ce == NULL)) {
			ce = zend_fetch_class_by_name(Z_STR_P(RT_CONSTANT(opline, opline->op1)), Z_STR_P(RT_CONSTANT(opline, opline->op1) + 1), ZEND_FETCH_CLASS_DEFAULT | ZEND_FETCH_CLASS_EXCEPTION);
			if (UNEXPECTED(ce == NULL)) {


				HANDLE_EXCEPTION();
			}
			if (IS_CONST != IS_CONST) {
				CACHE_PTR(opline->result.num, ce);
			}
		}
	} else if (IS_UNUSED == IS_UNUSED) {
		ce = zend_fetch_class(NULL, opline->op1.num);
		if (UNEXPECTED(ce == NULL)) {


			HANDLE_EXCEPTION();
		}
	} else {
		ce = Z_CE_P(EX_VAR(opline->op1.var));
	}

	if (IS_UNUSED == IS_CONST &&
	    IS_CONST == IS_CONST &&
	    EXPECTED((fbc = CACHED_PTR(opline->result.num + sizeof(void*))) != NULL)) {
		/* nothing to do */
	} else if (IS_UNUSED != IS_CONST &&
	           IS_CONST == IS_CONST &&
	           EXPECTED(CACHED_PTR(opline->result.num) == ce)) {
		fbc = CACHED_PTR(opline->result.num + sizeof(void*));
	} else if (IS_CONST != IS_UNUSED) {
		function_name = RT_CONSTANT(opline, opline->op2);
		if (IS_CONST != IS_CONST) {
			if (UNEXPECTED(Z_TYPE_P(function_name) != IS_STRING)) {
				do {
					if (IS_CONST & (IS_VAR|IS_CV) && Z_ISREF_P(function_name)) {
						function_name = Z_REFVAL_P(function_name);
						if (EXPECTED(Z_TYPE_P(function_name) == IS_STRING)) {
							break;
						}
					} else if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) {
						ZVAL_UNDEFINED_OP2();
						if (UNEXPECTED(EG(exception) != NULL)) {
							HANDLE_EXCEPTION();
						}
					}
					zend_throw_error(NULL, "Method name must be a string");


					HANDLE_EXCEPTION();
				} while (0);
			}
		}

		if (ce->get_static_method) {
			fbc = ce->get_static_method(ce, Z_STR_P(function_name));
		} else {
			fbc = zend_std_get_static_method(ce, Z_STR_P(function_name), ((IS_CONST == IS_CONST) ? (RT_CONSTANT(opline, opline->op2) + 1) : NULL));
		}
		if (UNEXPECTED(fbc == NULL)) {
			if (EXPECTED(!EG(exception))) {
				zend_undefined_method(ce, Z_STR_P(function_name));
			}


			HANDLE_EXCEPTION();
		}
		if (IS_CONST == IS_CONST &&
		    EXPECTED(!(fbc->common.fn_flags & (ZEND_ACC_CALL_VIA_TRAMPOLINE|ZEND_ACC_NEVER_CACHE))) &&
			EXPECTED(!(fbc->common.scope->ce_flags & ZEND_ACC_TRAIT))) {
			CACHE_POLYMORPHIC_PTR(opline->result.num, ce, fbc);
		}
		if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!RUN_TIME_CACHE(&fbc->op_array))) {
			init_func_run_time_cache(&fbc->op_array);
		}
		if (IS_CONST != IS_CONST) {


		}
	} else {
		if (UNEXPECTED(ce->constructor == NULL)) {
			zend_throw_error(NULL, "Cannot call constructor");
			HANDLE_EXCEPTION();
		}
		if (Z_TYPE(EX(This)) == IS_OBJECT && Z_OBJ(EX(This))->ce != ce->constructor->common.scope && (ce->constructor->common.fn_flags & ZEND_ACC_PRIVATE)) {
			zend_throw_error(NULL, "Cannot call private %s::__construct()", ZSTR_VAL(ce->name));
			HANDLE_EXCEPTION();
		}
		fbc = ce->constructor;
		if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!RUN_TIME_CACHE(&fbc->op_array))) {
			init_func_run_time_cache(&fbc->op_array);
		}
	}

	if (!(fbc->common.fn_flags & ZEND_ACC_STATIC)) {
		if (Z_TYPE(EX(This)) == IS_OBJECT && instanceof_function(Z_OBJCE(EX(This)), ce)) {
			ce = (zend_class_entry*)Z_OBJ(EX(This));
			call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_HAS_THIS;
		} else {
			zend_non_static_method_call(fbc);
			HANDLE_EXCEPTION();
		}
	} else {
		/* previous opcode is ZEND_FETCH_CLASS */
		if (IS_UNUSED == IS_UNUSED
		 && ((opline->op1.num & ZEND_FETCH_CLASS_MASK) == ZEND_FETCH_CLASS_PARENT ||
		     (opline->op1.num & ZEND_FETCH_CLASS_MASK) == ZEND_FETCH_CLASS_SELF)) {
			if (Z_TYPE(EX(This)) == IS_OBJECT) {
				ce = Z_OBJCE(EX(This));
			} else {
				ce = Z_CE(EX(This));
			}
		}
		call_info = ZEND_CALL_NESTED_FUNCTION;
	}

	call = zend_vm_stack_push_call_frame(call_info,
		fbc, opline->extended_value, ce);
	call->prev_execute_data = EX(call);
	EX(call) = call;

	ZEND_VM_NEXT_OPCODE();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_CHECK_FUNC_ARG_SPEC_UNUSED_CONST_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	uint32_t arg_num;

	if (IS_CONST == IS_CONST) {
		zend_string *arg_name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
		arg_num = zend_get_arg_offset_by_name(
			EX(call)->func, arg_name, CACHE_ADDR(opline->result.num)) + 1;
		if (UNEXPECTED(arg_num == 0)) {
			/* Treat this as a by-value argument, and throw an error during SEND. */
			ZEND_DEL_CALL_FLAG(EX(call), ZEND_CALL_SEND_ARG_BY_REF);
			ZEND_VM_NEXT_OPCODE();
		}
	} else {
		arg_num = opline->op2.num;
	}

	if (EXPECTED(arg_num <= MAX_ARG_FLAG_NUM)) {
		if (QUICK_ARG_SHOULD_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
			ZEND_ADD_CALL_FLAG(EX(call), ZEND_CALL_SEND_ARG_BY_REF);
		} else {
			ZEND_DEL_CALL_FLAG(EX(call), ZEND_CALL_SEND_ARG_BY_REF);
		}
	} else if (ARG_SHOULD_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
		ZEND_ADD_CALL_FLAG(EX(call), ZEND_CALL_SEND_ARG_BY_REF);
	} else {
		ZEND_DEL_CALL_FLAG(EX(call), ZEND_CALL_SEND_ARG_BY_REF);
	}
	ZEND_VM_NEXT_OPCODE();
}

static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_FETCH_CONSTANT_SPEC_UNUSED_CONST_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zend_constant *c;

	c = CACHED_PTR(opline->extended_value);
	if (EXPECTED(c != NULL) && EXPECTED(!IS_SPECIAL_CACHE_VAL(c))) {
		ZVAL_COPY_OR_DUP(EX_VAR(opline->result.var), &c->value);
		ZEND_VM_NEXT_OPCODE();
	}

	SAVE_OPLINE();
	zend_quick_get_constant(RT_CONSTANT(opline, opline->op2) + 1, opline->op1.num OPLINE_CC EXECUTE_DATA_CC);
	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_FETCH_CLASS_CONSTANT_SPEC_UNUSED_CONST_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	zend_class_entry *ce, *scope;
	zend_class_constant *c;
	zval *value, *zv, *constant_zv;
	zend_string *constant_name;
	USE_OPLINE

	SAVE_OPLINE();

	do {
		if (IS_UNUSED == IS_CONST && IS_CONST == IS_CONST) {
			if (EXPECTED(CACHED_PTR(opline->extended_value + sizeof(void*)))) {
				value = CACHED_PTR(opline->extended_value + sizeof(void*));
				break;
			}
		}
		if (IS_UNUSED == IS_CONST) {
			if (EXPECTED(CACHED_PTR(opline->extended_value))) {
				ce = CACHED_PTR(opline->extended_value);
			} else {
				ce = zend_fetch_class_by_name(Z_STR_P(RT_CONSTANT(opline, opline->op1)), Z_STR_P(RT_CONSTANT(opline, opline->op1) + 1), ZEND_FETCH_CLASS_DEFAULT | ZEND_FETCH_CLASS_EXCEPTION);
				if (UNEXPECTED(ce == NULL)) {
					ZVAL_UNDEF(EX_VAR(opline->result.var));


					HANDLE_EXCEPTION();
				}
				CACHE_PTR(opline->extended_value, ce);
			}
		} else if (IS_UNUSED == IS_UNUSED) {
			ce = zend_fetch_class(NULL, opline->op1.num);
			if (UNEXPECTED(ce == NULL)) {
				ZVAL_UNDEF(EX_VAR(opline->result.var));


				HANDLE_EXCEPTION();
			}
		} else {
			ce = Z_CE_P(EX_VAR(opline->op1.var));
		}
		if (IS_UNUSED != IS_CONST
			&& IS_CONST == IS_CONST
			&& EXPECTED(CACHED_PTR(opline->extended_value) == ce)) {
			value = CACHED_PTR(opline->extended_value + sizeof(void*));
			break;
		}

		constant_zv = RT_CONSTANT(opline, opline->op2);
		if (UNEXPECTED(Z_TYPE_P(constant_zv) != IS_STRING)) {
			zend_invalid_class_constant_type_error(Z_TYPE_P(constant_zv));
			ZVAL_UNDEF(EX_VAR(opline->result.var));


			HANDLE_EXCEPTION();
		}
		constant_name = Z_STR_P(constant_zv);
		/* Magic 'class' for constant OP2 is caught at compile-time */
		if (IS_CONST != IS_CONST && UNEXPECTED(zend_string_equals_literal_ci(constant_name, "class"))) {
			ZVAL_STR_COPY(EX_VAR(opline->result.var), ce->name);


			ZEND_VM_NEXT_OPCODE();
		}
		zv = IS_CONST == IS_CONST
			? zend_hash_find_known_hash(CE_CONSTANTS_TABLE(ce), constant_name)
			: zend_hash_find(CE_CONSTANTS_TABLE(ce), constant_name);

		if (EXPECTED(zv != NULL)) {
			c = Z_PTR_P(zv);
			scope = EX(func)->op_array.scope;
			if (!zend_verify_const_access(c, scope)) {
				zend_throw_error(NULL, "Cannot access %s constant %s::%s", zend_visibility_string(ZEND_CLASS_CONST_FLAGS(c)), ZSTR_VAL(ce->name), ZSTR_VAL(constant_name));
				ZVAL_UNDEF(EX_VAR(opline->result.var));


				HANDLE_EXCEPTION();
			}

			if (ce->ce_flags & ZEND_ACC_TRAIT) {
				zend_throw_error(NULL, "Cannot access trait constant %s::%s directly", ZSTR_VAL(ce->name), ZSTR_VAL(constant_name));
				ZVAL_UNDEF(EX_VAR(opline->result.var));


				HANDLE_EXCEPTION();
			}

			bool is_constant_deprecated = ZEND_CLASS_CONST_FLAGS(c) & ZEND_ACC_DEPRECATED;
			if (UNEXPECTED(is_constant_deprecated) && !CONST_IS_RECURSIVE(c)) {
				if (c->ce->type == ZEND_USER_CLASS) {
					/* Recursion protection only applied to user constants, GH-18463 */
					CONST_PROTECT_RECURSION(c);
				}
				zend_deprecated_class_constant(c, constant_name);
				if (c->ce->type == ZEND_USER_CLASS) {
					CONST_UNPROTECT_RECURSION(c);
				}

				if (EG(exception)) {
					ZVAL_UNDEF(EX_VAR(opline->result.var));


					HANDLE_EXCEPTION();
				}
			}

			value = &c->value;
			// Enums require loading of all class constants to build the backed enum table
			if (ce->ce_flags & ZEND_ACC_ENUM && ce->enum_backing_type != IS_UNDEF && ce->type == ZEND_USER_CLASS && !(ce->ce_flags & ZEND_ACC_CONSTANTS_UPDATED)) {
				if (UNEXPECTED(zend_update_class_constants(ce) == FAILURE)) {
					ZVAL_UNDEF(EX_VAR(opline->result.var));


					HANDLE_EXCEPTION();
				}
			}
			if (Z_TYPE_P(value) == IS_CONSTANT_AST) {
				if (UNEXPECTED(zend_update_class_constant(c, constant_name, c->ce) != SUCCESS)) {
					ZVAL_UNDEF(EX_VAR(opline->result.var));


					HANDLE_EXCEPTION();
				}
			}
			if (IS_CONST == IS_CONST && !is_constant_deprecated) {
				CACHE_POLYMORPHIC_PTR(opline->extended_value, ce, value);
			}
		} else {
			zend_throw_error(NULL, "Undefined constant %s::%s",
				ZSTR_VAL(ce->name), ZSTR_VAL(constant_name));
			ZVAL_UNDEF(EX_VAR(opline->result.var));


			HANDLE_EXCEPTION();
		}
	} while (0);

	ZVAL_COPY_OR_DUP(EX_VAR(opline->result.var), value);


	ZEND_VM_NEXT_OPCODE();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_INIT_ARRAY_SPEC_UNUSED_CONST_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	zval *array;
	uint32_t size;
	USE_OPLINE

	SAVE_OPLINE();
	array = EX_VAR(opline->result.var);
	if (IS_UNUSED != IS_UNUSED) {
		size = opline->extended_value >> ZEND_ARRAY_SIZE_SHIFT;
		ZVAL_ARR(array, zend_new_array(size));
		/* Explicitly initialize array as not-packed if flag is set */
		if (opline->extended_value & ZEND_ARRAY_NOT_PACKED) {
			zend_hash_real_init_mixed(Z_ARRVAL_P(array));
		}
		ZEND_VM_TAIL_CALL(ZEND_NULL_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
	} else {
		ZVAL_ARR(array, zend_new_array(0));
		ZEND_VM_NEXT_OPCODE();
	}
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_UNSET_OBJ_SPEC_UNUSED_CONST_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *container;
	zval *offset;
	zend_string *name, *tmp_name;

	SAVE_OPLINE();
	container = &EX(This);
	offset = RT_CONSTANT(opline, opline->op2);

	do {
		if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT)) {
			if (Z_ISREF_P(container)) {
				container = Z_REFVAL_P(container);
				if (Z_TYPE_P(container) != IS_OBJECT) {
					if (IS_UNUSED == IS_CV
					 && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
						ZVAL_UNDEFINED_OP1();
					}
					break;
				}
			} else {
				break;
			}
		}
		if (IS_CONST == IS_CONST) {
			name = Z_STR_P(offset);
		} else {
			name = zval_try_get_tmp_string(offset, &tmp_name);
			if (UNEXPECTED(!name)) {
				break;
			}
		}
		Z_OBJ_HT_P(container)->unset_property(Z_OBJ_P(container), name, ((IS_CONST == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL));
		if (IS_CONST != IS_CONST) {
			zend_tmp_string_release(tmp_name);
		}
	} while (0);




	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_UNUSED_CONST_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *container;
	int result;
	zval *offset;
	zend_string *name, *tmp_name;

	SAVE_OPLINE();
	container = &EX(This);
	offset = RT_CONSTANT(opline, opline->op2);

	if (IS_UNUSED == IS_CONST ||
	    (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
		if ((IS_UNUSED & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
			container = Z_REFVAL_P(container);
			if (UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT)) {
				result = (opline->extended_value & ZEND_ISEMPTY);
				goto isset_object_finish;
			}
		} else {
			result = (opline->extended_value & ZEND_ISEMPTY);
			goto isset_object_finish;
		}
	}

	if (IS_CONST == IS_CONST) {
		name = Z_STR_P(offset);
	} else {
		name = zval_try_get_tmp_string(offset, &tmp_name);
		if (UNEXPECTED(!name)) {
			result = 0;
			goto isset_object_finish;
		}
	}

	result =
		(opline->extended_value & ZEND_ISEMPTY) ^
		Z_OBJ_HT_P(container)->has_property(Z_OBJ_P(container), name, (opline->extended_value & ZEND_ISEMPTY), ((IS_CONST == IS_CONST) ? CACHE_ADDR(opline->extended_value & ~ZEND_ISEMPTY) : NULL));

	if (IS_CONST != IS_CONST) {
		zend_tmp_string_release(tmp_name);
	}

isset_object_finish:




	ZEND_VM_SMART_BRANCH(result, 1);
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_YIELD_SPEC_UNUSED_CONST_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE

	zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C);

	SAVE_OPLINE();
	if (UNEXPECTED(generator->flags & ZEND_GENERATOR_FORCED_CLOSE)) {
		ZEND_VM_TAIL_CALL(zend_yield_in_closed_generator_helper_SPEC_TAILCALL(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
	}

	/* Destroy the previously yielded value */
	zval_ptr_dtor(&generator->value);

	/* Destroy the previously yielded key */
	zval_ptr_dtor(&generator->key);

	/* Set the new yielded value */
	if (IS_UNUSED != IS_UNUSED) {
		if (UNEXPECTED(EX(func)->op_array.fn_flags & ZEND_ACC_RETURN_REFERENCE)) {
			/* Constants and temporary variables aren't yieldable by reference,
			 * but we still allow them with a notice. */
			if (IS_UNUSED & (IS_CONST|IS_TMP_VAR)) {
				zval *value;

				zend_error(E_NOTICE, "Only variable references should be yielded by reference");

				value = NULL;
				ZVAL_COPY_VALUE(&generator->value, value);
				if (IS_UNUSED == IS_CONST) {
					if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
						Z_ADDREF(generator->value);
					}
				}
			} else {
				zval *value_ptr = NULL;

				/* If a function call result is yielded and the function did
				 * not return by reference we throw a notice. */
				do {
					if (IS_UNUSED == IS_VAR) {
						ZEND_ASSERT(value_ptr != &EG(uninitialized_zval));
						if (opline->extended_value == ZEND_RETURNS_FUNCTION
						 && !Z_ISREF_P(value_ptr)) {
							zend_error(E_NOTICE, "Only variable references should be yielded by reference");
							ZVAL_COPY(&generator->value, value_ptr);
							break;
						}
					}
					if (Z_ISREF_P(value_ptr)) {
						Z_ADDREF_P(value_ptr);
					} else {
						ZVAL_MAKE_REF_EX(value_ptr, 2);
					}
					ZVAL_REF(&generator->value, Z_REF_P(value_ptr));
				} while (0);


			}
		} else {
			zval *value = NULL;

			/* Consts, temporary variables and references need copying */
			if (IS_UNUSED == IS_CONST) {
				ZVAL_COPY_VALUE(&generator->value, value);
				if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
					Z_ADDREF(generator->value);
				}
			} else if (IS_UNUSED == IS_TMP_VAR) {
				ZVAL_COPY_VALUE(&generator->value, value);
			} else if ((IS_UNUSED & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) {
				ZVAL_COPY(&generator->value, Z_REFVAL_P(value));


			} else {
				ZVAL_COPY_VALUE(&generator->value, value);
				if (IS_UNUSED == IS_CV) {
					if (Z_OPT_REFCOUNTED_P(value)) Z_ADDREF_P(value);
				}
			}
		}
	} else {
		/* If no value was specified yield null */
		ZVAL_NULL(&generator->value);
	}

	/* Set the new yielded key */
	if (IS_CONST != IS_UNUSED) {
		zval *key = RT_CONSTANT(opline, opline->op2);
		if ((IS_CONST & (IS_CV|IS_VAR)) && UNEXPECTED(Z_TYPE_P(key) == IS_REFERENCE)) {
			key = Z_REFVAL_P(key);
		}
		ZVAL_COPY(&generator->key, key);


		if (Z_TYPE(generator->key) == IS_LONG
		    && Z_LVAL(generator->key) > generator->largest_used_integer_key
		) {
			generator->largest_used_integer_key = Z_LVAL(generator->key);
		}
	} else {
		/* If no key was specified we use auto-increment keys */
		generator->largest_used_integer_key++;
		ZVAL_LONG(&generator->key, generator->largest_used_integer_key);
	}

	if (RETURN_VALUE_USED(opline)) {
		/* If the return value of yield is used set the send
		 * target and initialize it to NULL */
		generator->send_target = EX_VAR(opline->result.var);
		ZVAL_NULL(generator->send_target);
	} else {
		generator->send_target = NULL;
	}

	/* The GOTO VM uses a local opline variable. We need to set the opline
	 * variable in execute_data so we don't resume at an old position. */
	SAVE_OPLINE();

	ZEND_VM_RETURN();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_FETCH_CLASS_CONSTANT_SPEC_UNUSED_TMPVARCV_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	zend_class_entry *ce, *scope;
	zend_class_constant *c;
	zval *value, *zv, *constant_zv;
	zend_string *constant_name;
	USE_OPLINE

	SAVE_OPLINE();

	do {
		if (IS_UNUSED == IS_CONST && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST) {
			if (EXPECTED(CACHED_PTR(opline->extended_value + sizeof(void*)))) {
				value = CACHED_PTR(opline->extended_value + sizeof(void*));
				break;
			}
		}
		if (IS_UNUSED == IS_CONST) {
			if (EXPECTED(CACHED_PTR(opline->extended_value))) {
				ce = CACHED_PTR(opline->extended_value);
			} else {
				ce = zend_fetch_class_by_name(Z_STR_P(RT_CONSTANT(opline, opline->op1)), Z_STR_P(RT_CONSTANT(opline, opline->op1) + 1), ZEND_FETCH_CLASS_DEFAULT | ZEND_FETCH_CLASS_EXCEPTION);
				if (UNEXPECTED(ce == NULL)) {
					ZVAL_UNDEF(EX_VAR(opline->result.var));
					FREE_OP(opline->op2_type, opline->op2.var);
					HANDLE_EXCEPTION();
				}
				CACHE_PTR(opline->extended_value, ce);
			}
		} else if (IS_UNUSED == IS_UNUSED) {
			ce = zend_fetch_class(NULL, opline->op1.num);
			if (UNEXPECTED(ce == NULL)) {
				ZVAL_UNDEF(EX_VAR(opline->result.var));
				FREE_OP(opline->op2_type, opline->op2.var);
				HANDLE_EXCEPTION();
			}
		} else {
			ce = Z_CE_P(EX_VAR(opline->op1.var));
		}
		if (IS_UNUSED != IS_CONST
			&& (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST
			&& EXPECTED(CACHED_PTR(opline->extended_value) == ce)) {
			value = CACHED_PTR(opline->extended_value + sizeof(void*));
			break;
		}

		constant_zv = _get_zval_ptr_tmpvarcv(opline->op2_type, opline->op2, BP_VAR_R EXECUTE_DATA_CC);
		if (UNEXPECTED(Z_TYPE_P(constant_zv) != IS_STRING)) {
			zend_invalid_class_constant_type_error(Z_TYPE_P(constant_zv));
			ZVAL_UNDEF(EX_VAR(opline->result.var));
			FREE_OP(opline->op2_type, opline->op2.var);
			HANDLE_EXCEPTION();
		}
		constant_name = Z_STR_P(constant_zv);
		/* Magic 'class' for constant OP2 is caught at compile-time */
		if ((IS_TMP_VAR|IS_VAR|IS_CV) != IS_CONST && UNEXPECTED(zend_string_equals_literal_ci(constant_name, "class"))) {
			ZVAL_STR_COPY(EX_VAR(opline->result.var), ce->name);
			FREE_OP(opline->op2_type, opline->op2.var);
			ZEND_VM_NEXT_OPCODE();
		}
		zv = (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST
			? zend_hash_find_known_hash(CE_CONSTANTS_TABLE(ce), constant_name)
			: zend_hash_find(CE_CONSTANTS_TABLE(ce), constant_name);

		if (EXPECTED(zv != NULL)) {
			c = Z_PTR_P(zv);
			scope = EX(func)->op_array.scope;
			if (!zend_verify_const_access(c, scope)) {
				zend_throw_error(NULL, "Cannot access %s constant %s::%s", zend_visibility_string(ZEND_CLASS_CONST_FLAGS(c)), ZSTR_VAL(ce->name), ZSTR_VAL(constant_name));
				ZVAL_UNDEF(EX_VAR(opline->result.var));
				FREE_OP(opline->op2_type, opline->op2.var);
				HANDLE_EXCEPTION();
			}

			if (ce->ce_flags & ZEND_ACC_TRAIT) {
				zend_throw_error(NULL, "Cannot access trait constant %s::%s directly", ZSTR_VAL(ce->name), ZSTR_VAL(constant_name));
				ZVAL_UNDEF(EX_VAR(opline->result.var));
				FREE_OP(opline->op2_type, opline->op2.var);
				HANDLE_EXCEPTION();
			}

			bool is_constant_deprecated = ZEND_CLASS_CONST_FLAGS(c) & ZEND_ACC_DEPRECATED;
			if (UNEXPECTED(is_constant_deprecated) && !CONST_IS_RECURSIVE(c)) {
				if (c->ce->type == ZEND_USER_CLASS) {
					/* Recursion protection only applied to user constants, GH-18463 */
					CONST_PROTECT_RECURSION(c);
				}
				zend_deprecated_class_constant(c, constant_name);
				if (c->ce->type == ZEND_USER_CLASS) {
					CONST_UNPROTECT_RECURSION(c);
				}

				if (EG(exception)) {
					ZVAL_UNDEF(EX_VAR(opline->result.var));
					FREE_OP(opline->op2_type, opline->op2.var);
					HANDLE_EXCEPTION();
				}
			}

			value = &c->value;
			// Enums require loading of all class constants to build the backed enum table
			if (ce->ce_flags & ZEND_ACC_ENUM && ce->enum_backing_type != IS_UNDEF && ce->type == ZEND_USER_CLASS && !(ce->ce_flags & ZEND_ACC_CONSTANTS_UPDATED)) {
				if (UNEXPECTED(zend_update_class_constants(ce) == FAILURE)) {
					ZVAL_UNDEF(EX_VAR(opline->result.var));
					FREE_OP(opline->op2_type, opline->op2.var);
					HANDLE_EXCEPTION();
				}
			}
			if (Z_TYPE_P(value) == IS_CONSTANT_AST) {
				if (UNEXPECTED(zend_update_class_constant(c, constant_name, c->ce) != SUCCESS)) {
					ZVAL_UNDEF(EX_VAR(opline->result.var));
					FREE_OP(opline->op2_type, opline->op2.var);
					HANDLE_EXCEPTION();
				}
			}
			if ((IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST && !is_constant_deprecated) {
				CACHE_POLYMORPHIC_PTR(opline->extended_value, ce, value);
			}
		} else {
			zend_throw_error(NULL, "Undefined constant %s::%s",
				ZSTR_VAL(ce->name), ZSTR_VAL(constant_name));
			ZVAL_UNDEF(EX_VAR(opline->result.var));
			FREE_OP(opline->op2_type, opline->op2.var);
			HANDLE_EXCEPTION();
		}
	} while (0);

	ZVAL_COPY_OR_DUP(EX_VAR(opline->result.var), value);

	FREE_OP(opline->op2_type, opline->op2.var);
	ZEND_VM_NEXT_OPCODE();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_ASSIGN_OBJ_OP_SPEC_UNUSED_TMPVAR_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *object;
	zval *property;
	zval *value;
	zval *zptr;
	void *_cache_slot[3] = {0};
	void **cache_slot;
	zend_property_info *prop_info;
	zend_object *zobj;
	zend_string *name, *tmp_name;

	SAVE_OPLINE();
	object = &EX(This);
	property = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);

	do {
		value = get_op_data_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1);

		if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
			if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
				object = Z_REFVAL_P(object);
				goto assign_op_object;
			}
			if (IS_UNUSED == IS_CV
			 && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
				ZVAL_UNDEFINED_OP1();
			}
			zend_throw_non_object_error(object, property OPLINE_CC EXECUTE_DATA_CC);
			break;
		}

assign_op_object:
		/* here we are sure we are dealing with an object */
		zobj = Z_OBJ_P(object);
		if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
			name = Z_STR_P(property);
		} else {
			name = zval_try_get_tmp_string(property, &tmp_name);
			if (UNEXPECTED(!name)) {
				UNDEF_RESULT();
				break;
			}
		}
		cache_slot = ((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR((opline+1)->extended_value) : _cache_slot;
		if (EXPECTED((zptr = zobj->handlers->get_property_ptr_ptr(zobj, name, BP_VAR_RW, cache_slot)) != NULL)) {
			if (UNEXPECTED(Z_ISERROR_P(zptr))) {
				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
					ZVAL_NULL(EX_VAR(opline->result.var));
				}
			} else {
				zend_reference *ref;

				do {
					if (UNEXPECTED(Z_ISREF_P(zptr))) {
						ref = Z_REF_P(zptr);
						zptr = Z_REFVAL_P(zptr);
						if (UNEXPECTED(ZEND_REF_HAS_TYPE_SOURCES(ref))) {
							zend_binary_assign_op_typed_ref(ref, value OPLINE_CC EXECUTE_DATA_CC);
							break;
						}
					}

					prop_info = (zend_property_info*)CACHED_PTR_EX(cache_slot + 2);
					if (prop_info && ZEND_TYPE_IS_SET(prop_info->type)) {
						/* special case for typed properties */
						zend_binary_assign_op_typed_prop(prop_info, zptr, value OPLINE_CC EXECUTE_DATA_CC);
					} else {
						zend_binary_op(zptr, zptr, value OPLINE_CC);
					}
				} while (0);

				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
					ZVAL_COPY(EX_VAR(opline->result.var), zptr);
				}
			}
		} else {
			zend_assign_op_overloaded_property(zobj, name, cache_slot, value OPLINE_CC EXECUTE_DATA_CC);
		}
		if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
			zend_tmp_string_release(tmp_name);
		}
	} while (0);

	FREE_OP((opline+1)->op1_type, (opline+1)->op1.var);
	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));


	/* assign_obj has two opcodes! */
	ZEND_VM_NEXT_OPCODE_EX(1, 2);
}

/* No specialization for op_types (CONST|TMP|VAR|CV, UNUSED|CONST|TMPVAR) */
static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_PRE_INC_OBJ_SPEC_UNUSED_TMPVAR_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *object;
	zval *property;
	zval *zptr;
	void *_cache_slot[3] = {0};
	void **cache_slot;
	zend_property_info *prop_info;
	zend_object *zobj;
	zend_string *name, *tmp_name;

	SAVE_OPLINE();
	object = &EX(This);
	property = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);

	do {
		if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
			if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
				object = Z_REFVAL_P(object);
				goto pre_incdec_object;
			}
			if (IS_UNUSED == IS_CV
			 && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
				ZVAL_UNDEFINED_OP1();
			}
			zend_throw_non_object_error(object, property OPLINE_CC EXECUTE_DATA_CC);
			break;
		}

pre_incdec_object:
		/* here we are sure we are dealing with an object */
		zobj = Z_OBJ_P(object);
		if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
			name = Z_STR_P(property);
		} else {
			name = zval_try_get_tmp_string(property, &tmp_name);
			if (UNEXPECTED(!name)) {
				UNDEF_RESULT();
				break;
			}
		}
		cache_slot = ((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(opline->extended_value) : _cache_slot;
		if (EXPECTED((zptr = zobj->handlers->get_property_ptr_ptr(zobj, name, BP_VAR_RW, cache_slot)) != NULL)) {
			if (UNEXPECTED(Z_ISERROR_P(zptr))) {
				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
					ZVAL_NULL(EX_VAR(opline->result.var));
				}
			} else {
				prop_info = (zend_property_info *) CACHED_PTR_EX(cache_slot + 2);
				zend_pre_incdec_property_zval(zptr,
					prop_info && ZEND_TYPE_IS_SET(prop_info->type) ? prop_info : NULL OPLINE_CC EXECUTE_DATA_CC);
			}
		} else {
			zend_pre_incdec_overloaded_property(zobj, name, cache_slot OPLINE_CC EXECUTE_DATA_CC);
		}
		if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
			zend_tmp_string_release(tmp_name);
		}
	} while (0);

	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));


	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_POST_INC_OBJ_SPEC_UNUSED_TMPVAR_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *object;
	zval *property;
	zval *zptr;
	void *_cache_slot[3] = {0};
	void **cache_slot;
	zend_property_info *prop_info;
	zend_object *zobj;
	zend_string *name, *tmp_name;

	SAVE_OPLINE();
	object = &EX(This);
	property = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);

	do {
		if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
			if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
				object = Z_REFVAL_P(object);
				goto post_incdec_object;
			}
			if (IS_UNUSED == IS_CV
			 && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
				ZVAL_UNDEFINED_OP1();
			}
			zend_throw_non_object_error(object, property OPLINE_CC EXECUTE_DATA_CC);
			break;
		}

post_incdec_object:
		/* here we are sure we are dealing with an object */
		zobj = Z_OBJ_P(object);
		if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
			name = Z_STR_P(property);
		} else {
			name = zval_try_get_tmp_string(property, &tmp_name);
			if (UNEXPECTED(!name)) {
				ZVAL_UNDEF(EX_VAR(opline->result.var));
				break;
			}
		}
		cache_slot = ((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(opline->extended_value) : _cache_slot;
		if (EXPECTED((zptr = zobj->handlers->get_property_ptr_ptr(zobj, name, BP_VAR_RW, cache_slot)) != NULL)) {
			if (UNEXPECTED(Z_ISERROR_P(zptr))) {
				ZVAL_NULL(EX_VAR(opline->result.var));
			} else {
				prop_info = (zend_property_info*)CACHED_PTR_EX(cache_slot + 2);
				zend_post_incdec_property_zval(zptr,
					prop_info && ZEND_TYPE_IS_SET(prop_info->type) ? prop_info : NULL OPLINE_CC EXECUTE_DATA_CC);
			}
		} else {
			zend_post_incdec_overloaded_property(zobj, name, cache_slot OPLINE_CC EXECUTE_DATA_CC);
		}
		if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
			zend_tmp_string_release(tmp_name);
		}
	} while (0);

	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));


	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_FETCH_OBJ_R_SPEC_UNUSED_TMPVAR_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *container;
	void **cache_slot = NULL;

	SAVE_OPLINE();
	container = &EX(This);

	if (IS_UNUSED == IS_CONST ||
	    (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
		do {
			if ((IS_UNUSED & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
				container = Z_REFVAL_P(container);
				if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
					break;
				}
			}
			if (IS_UNUSED == IS_CV && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
				ZVAL_UNDEFINED_OP1();
			}
			zend_wrong_property_read(container, _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC));
			ZVAL_NULL(EX_VAR(opline->result.var));
			goto fetch_obj_r_finish;
		} while (0);
	}

	/* here we are sure we are dealing with an object */
	do {
		zend_object *zobj = Z_OBJ_P(container);
		zend_string *name, *tmp_name;
		zval *retval;

		if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
			cache_slot = CACHE_ADDR(opline->extended_value & ~ZEND_FETCH_REF /* FUNC_ARG fetch may contain it */);

			if (EXPECTED(zobj->ce == CACHED_PTR_EX(cache_slot))) {
				uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);

				if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
fetch_obj_r_simple:
					retval = OBJ_PROP(zobj, prop_offset);
					if (EXPECTED(Z_TYPE_INFO_P(retval) != IS_UNDEF)) {
						if (0 || (IS_UNUSED & (IS_TMP_VAR|IS_VAR)) != 0) {
							goto fetch_obj_r_copy;
						} else {
fetch_obj_r_fast_copy:
							ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
							ZEND_VM_NEXT_OPCODE();
						}
					}
				} else if (UNEXPECTED(IS_HOOKED_PROPERTY_OFFSET(prop_offset))) {
					zend_property_info *prop_info = CACHED_PTR_EX(cache_slot + 2);
					if (ZEND_IS_PROPERTY_HOOK_SIMPLE_READ(prop_offset)) {
						prop_offset = prop_info->offset;
						goto fetch_obj_r_simple;
					} else if (EXPECTED(ZEND_IS_PROPERTY_HOOK_SIMPLE_GET(prop_offset))) {
						zend_function *hook = prop_info->hooks[ZEND_PROPERTY_HOOK_GET];
						ZEND_ASSERT(hook->type == ZEND_USER_FUNCTION);
						ZEND_ASSERT(RUN_TIME_CACHE(&hook->op_array));

						uint32_t call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_HAS_THIS;
						if (IS_UNUSED & IS_CV) {
							GC_ADDREF(zobj);
						}
						if (IS_UNUSED & (IS_CV|IS_VAR|IS_TMP_VAR)) {
							call_info |= ZEND_CALL_RELEASE_THIS;
						}
						zend_execute_data *call = zend_vm_stack_push_call_frame(call_info, hook, 0, zobj);
						call->prev_execute_data = execute_data;
						call->call = NULL;
						call->return_value = EX_VAR(opline->result.var);
						call->run_time_cache = RUN_TIME_CACHE(&hook->op_array);

						execute_data = call;
						EG(current_execute_data) = execute_data;
						zend_init_cvs(0, hook->op_array.last_var EXECUTE_DATA_CC);

#if defined(ZEND_VM_IP_GLOBAL_REG) && ((ZEND_VM_KIND == ZEND_VM_KIND_CALL) || (ZEND_VM_KIND == ZEND_VM_KIND_HYBRID))
						opline = hook->op_array.opcodes;
#else
						EX(opline) = hook->op_array.opcodes;
#endif
						LOAD_OPLINE_EX();




						ZEND_VM_ENTER_EX();
					}
					/* Fall through to read_property for hooks. */
				} else if (EXPECTED(zobj->properties != NULL)) {
					ZEND_ASSERT(IS_DYNAMIC_PROPERTY_OFFSET(prop_offset));
					name = Z_STR_P(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC));
					if (!IS_UNKNOWN_DYNAMIC_PROPERTY_OFFSET(prop_offset)) {
						uintptr_t idx = ZEND_DECODE_DYN_PROP_OFFSET(prop_offset);

						if (EXPECTED(idx < zobj->properties->nNumUsed * sizeof(Bucket))) {
							Bucket *p = (Bucket*)((char*)zobj->properties->arData + idx);

							if (EXPECTED(p->key == name) ||
							    (EXPECTED(p->h == ZSTR_H(name)) &&
							     EXPECTED(p->key != NULL) &&
							     EXPECTED(zend_string_equal_content(p->key, name)))) {
								retval = &p->val;
								if (0 || (IS_UNUSED & (IS_TMP_VAR|IS_VAR)) != 0) {
									goto fetch_obj_r_copy;
								} else {
									goto fetch_obj_r_fast_copy;
								}
							}
						}
						CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_DYNAMIC_PROPERTY_OFFSET);
					}
					retval = zend_hash_find_known_hash(zobj->properties, name);
					if (EXPECTED(retval)) {
						uintptr_t idx = (char*)retval - (char*)zobj->properties->arData;
						CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_ENCODE_DYN_PROP_OFFSET(idx));
						if (0 || (IS_UNUSED & (IS_TMP_VAR|IS_VAR)) != 0) {
							goto fetch_obj_r_copy;
						} else {
							goto fetch_obj_r_fast_copy;
						}
					}
				}
			}
			name = Z_STR_P(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC));
		} else {
			name = zval_try_get_tmp_string(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC), &tmp_name);
			if (UNEXPECTED(!name)) {
				ZVAL_UNDEF(EX_VAR(opline->result.var));
				break;
			}
		}

#if ZEND_DEBUG
		/* For non-standard object handlers, verify a declared property type in debug builds.
		 * Fetch prop_info before calling read_property(), as it may deallocate the object. */
		zend_property_info *prop_info = NULL;
		if (zobj->handlers->read_property != zend_std_read_property) {
			prop_info = zend_get_property_info(zobj->ce, name, /* silent */ true);
		}
#endif
		retval = zobj->handlers->read_property(zobj, name, BP_VAR_R, cache_slot, EX_VAR(opline->result.var));
#if ZEND_DEBUG
		if (!EG(exception) && prop_info && prop_info != ZEND_WRONG_PROPERTY_INFO
				&& ZEND_TYPE_IS_SET(prop_info->type)) {
			ZVAL_OPT_DEREF(retval);
			zend_verify_property_type(prop_info, retval, /* strict */ true);
		}
#endif

		if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
			zend_tmp_string_release(tmp_name);
		}

		if (retval != EX_VAR(opline->result.var)) {
fetch_obj_r_copy:
			ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
		} else if (UNEXPECTED(Z_ISREF_P(retval))) {
			zend_unwrap_reference(retval);
		}
	} while (0);

fetch_obj_r_finish:
	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));


	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_FETCH_OBJ_W_SPEC_UNUSED_TMPVAR_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *property, *container, *result;

	SAVE_OPLINE();

	container = &EX(This);
	property = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
	result = EX_VAR(opline->result.var);
	zend_fetch_property_address(
		result, container, IS_UNUSED, property, (IS_TMP_VAR|IS_VAR),
		(((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(opline->extended_value & ~ZEND_FETCH_OBJ_FLAGS) : NULL),
		BP_VAR_W, opline->extended_value, NULL OPLINE_CC EXECUTE_DATA_CC);
	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
	if (IS_UNUSED == IS_VAR) {
		FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
	}
	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_FETCH_OBJ_RW_SPEC_UNUSED_TMPVAR_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *property, *container, *result;

	SAVE_OPLINE();
	container = &EX(This);
	property = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
	result = EX_VAR(opline->result.var);
	zend_fetch_property_address(result, container, IS_UNUSED, property, (IS_TMP_VAR|IS_VAR), (((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL), BP_VAR_RW, 0, NULL OPLINE_CC EXECUTE_DATA_CC);
	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
	if (IS_UNUSED == IS_VAR) {
		FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
	}
	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_FETCH_OBJ_IS_SPEC_UNUSED_TMPVAR_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *container;
	void **cache_slot = NULL;

	SAVE_OPLINE();
	container = &EX(This);

	if (IS_UNUSED == IS_CONST ||
	    (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
		do {
			if ((IS_UNUSED & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
				container = Z_REFVAL_P(container);
				if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
					break;
				}
			}
			if ((IS_TMP_VAR|IS_VAR) == IS_CV && Z_TYPE_P(EX_VAR(opline->op2.var)) == IS_UNDEF) {
				ZVAL_UNDEFINED_OP2();
			}
			ZVAL_NULL(EX_VAR(opline->result.var));
			goto fetch_obj_is_finish;
		} while (0);
	}

	/* here we are sure we are dealing with an object */
	do {
		zend_object *zobj = Z_OBJ_P(container);
		zend_string *name, *tmp_name;
		zval *retval;

		if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
			cache_slot = CACHE_ADDR(opline->extended_value);

			if (EXPECTED(zobj->ce == CACHED_PTR_EX(cache_slot))) {
				uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);

				if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
fetch_obj_is_simple:
					retval = OBJ_PROP(zobj, prop_offset);
					if (EXPECTED(Z_TYPE_P(retval) != IS_UNDEF)) {
						if (0 || (IS_UNUSED & (IS_TMP_VAR|IS_VAR)) != 0) {
							goto fetch_obj_is_copy;
						} else {
fetch_obj_is_fast_copy:
							ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
							ZEND_VM_NEXT_OPCODE();
						}
					}
				} else if (UNEXPECTED(IS_HOOKED_PROPERTY_OFFSET(prop_offset))) {
					if (ZEND_IS_PROPERTY_HOOK_SIMPLE_READ(prop_offset)) {
						zend_property_info *prop_info = CACHED_PTR_EX(cache_slot + 2);
						prop_offset = prop_info->offset;
						goto fetch_obj_is_simple;
					}
					/* Fall through to read_property for hooks. */
				} else if (EXPECTED(zobj->properties != NULL)) {
					ZEND_ASSERT(IS_DYNAMIC_PROPERTY_OFFSET(prop_offset));
					name = Z_STR_P(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC));
					if (!IS_UNKNOWN_DYNAMIC_PROPERTY_OFFSET(prop_offset)) {
						uintptr_t idx = ZEND_DECODE_DYN_PROP_OFFSET(prop_offset);

						if (EXPECTED(idx < zobj->properties->nNumUsed * sizeof(Bucket))) {
							Bucket *p = (Bucket*)((char*)zobj->properties->arData + idx);

							if (EXPECTED(p->key == name) ||
							    (EXPECTED(p->h == ZSTR_H(name)) &&
							     EXPECTED(p->key != NULL) &&
							     EXPECTED(zend_string_equal_content(p->key, name)))) {
								retval = &p->val;
								if (0 || (IS_UNUSED & (IS_TMP_VAR|IS_VAR)) != 0) {
									goto fetch_obj_is_copy;
								} else {
									goto fetch_obj_is_fast_copy;
								}
							}
						}
						CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_DYNAMIC_PROPERTY_OFFSET);
					}
					retval = zend_hash_find_known_hash(zobj->properties, name);
					if (EXPECTED(retval)) {
						uintptr_t idx = (char*)retval - (char*)zobj->properties->arData;
						CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_ENCODE_DYN_PROP_OFFSET(idx));
						if (0 || (IS_UNUSED & (IS_TMP_VAR|IS_VAR)) != 0) {
							goto fetch_obj_is_copy;
						} else {
							goto fetch_obj_is_fast_copy;
						}
					}
				}
			}
			name = Z_STR_P(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC));
		} else {
			name = zval_try_get_tmp_string(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC), &tmp_name);
			if (UNEXPECTED(!name)) {
				ZVAL_UNDEF(EX_VAR(opline->result.var));
				break;
			}
		}

		retval = zobj->handlers->read_property(zobj, name, BP_VAR_IS, cache_slot, EX_VAR(opline->result.var));

		if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
			zend_tmp_string_release(tmp_name);
		}

		if (retval != EX_VAR(opline->result.var)) {
fetch_obj_is_copy:
			ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
		} else if (UNEXPECTED(Z_ISREF_P(retval))) {
			zend_unwrap_reference(retval);
		}
	} while (0);

fetch_obj_is_finish:
	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));


	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_FETCH_OBJ_FUNC_ARG_SPEC_UNUSED_TMPVAR_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
#if 0
	USE_OPLINE
#endif

	if (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) {
		/* Behave like FETCH_OBJ_W */
		if ((IS_UNUSED & (IS_CONST|IS_TMP_VAR))) {
			ZEND_VM_TAIL_CALL(zend_use_tmp_in_write_context_helper_SPEC_TAILCALL(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
		}
		ZEND_VM_TAIL_CALL(ZEND_FETCH_OBJ_W_SPEC_UNUSED_TMPVAR_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
	} else {
		ZEND_VM_TAIL_CALL(ZEND_FETCH_OBJ_R_SPEC_UNUSED_TMPVAR_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
	}
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_FETCH_OBJ_UNSET_SPEC_UNUSED_TMPVAR_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *container, *property, *result;

	SAVE_OPLINE();
	container = &EX(This);
	property = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
	result = EX_VAR(opline->result.var);
	zend_fetch_property_address(result, container, IS_UNUSED, property, (IS_TMP_VAR|IS_VAR), (((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL), BP_VAR_UNSET, 0, NULL OPLINE_CC EXECUTE_DATA_CC);
	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
	if (IS_UNUSED == IS_VAR) {
		FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
	}
	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_OP_DATA_CONST_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *object, *value, tmp;
	zend_object *zobj;
	zend_string *name, *tmp_name;
	zend_refcounted *garbage = NULL;

	SAVE_OPLINE();
	object = &EX(This);
	value = RT_CONSTANT((opline+1), (opline+1)->op1);

	if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
		if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
			object = Z_REFVAL_P(object);
			goto assign_object;
		}
		zend_throw_non_object_error(object, _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC) OPLINE_CC EXECUTE_DATA_CC);
		value = &EG(uninitialized_zval);
		goto free_and_exit_assign_obj;
	}

assign_object:
	zobj = Z_OBJ_P(object);
	if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
		if (EXPECTED(zobj->ce == CACHED_PTR(opline->extended_value))) {
			void **cache_slot = CACHE_ADDR(opline->extended_value);
			uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
			zval *property_val;
			zend_property_info *prop_info;

			if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
				prop_info = (zend_property_info*) CACHED_PTR_EX(cache_slot + 2);

assign_obj_simple:
				property_val = OBJ_PROP(zobj, prop_offset);
				if (Z_TYPE_P(property_val) != IS_UNDEF) {
					if (prop_info != NULL) {
						value = zend_assign_to_typed_prop(prop_info, property_val, value, &garbage EXECUTE_DATA_CC);
						goto free_and_exit_assign_obj;
					} else {
fast_assign_obj:
						value = zend_assign_to_variable_ex(property_val, value, IS_CONST, EX_USES_STRICT_TYPES(), &garbage);
						if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
							ZVAL_COPY(EX_VAR(opline->result.var), value);
						}
						goto exit_assign_obj;
					}
				}
			} else if (EXPECTED(IS_DYNAMIC_PROPERTY_OFFSET(prop_offset))) {
				name = Z_STR_P(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC));
				if (UNEXPECTED(zend_lazy_object_must_init(zobj))) {
					zobj = zend_lazy_object_init(zobj);
					if (!zobj) {
						value = &EG(uninitialized_zval);
						goto free_and_exit_assign_obj;
					}
				}
				if (!zobj->ce->__set && (zobj->ce->ce_flags & ZEND_ACC_ALLOW_DYNAMIC_PROPERTIES)) {
					rebuild_object_properties_internal(zobj);
				}
				if (EXPECTED(zobj->properties != NULL)) {
					if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
						if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
							GC_DELREF(zobj->properties);
						}
						zobj->properties = zend_array_dup(zobj->properties);
					}
					property_val = zend_hash_find_known_hash(zobj->properties, name);
					if (property_val) {
						goto fast_assign_obj;
					}
				}

				if (!zobj->ce->__set && (zobj->ce->ce_flags & ZEND_ACC_ALLOW_DYNAMIC_PROPERTIES)) {
					if (IS_CONST == IS_CONST) {
						if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
							Z_ADDREF_P(value);
						}
					} else if (IS_CONST != IS_TMP_VAR) {
						if (Z_ISREF_P(value)) {
							if (IS_CONST == IS_VAR) {
								zend_reference *ref = Z_REF_P(value);
								if (GC_DELREF(ref) == 0) {
									ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
									efree_size(ref, sizeof(zend_reference));
									value = &tmp;
								} else {
									value = Z_REFVAL_P(value);
									Z_TRY_ADDREF_P(value);
								}
							} else {
								value = Z_REFVAL_P(value);
								Z_TRY_ADDREF_P(value);
							}
						} else if (IS_CONST == IS_CV) {
							Z_TRY_ADDREF_P(value);
						}
					}
					zend_hash_add_new(zobj->properties, name, value);
					if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
						ZVAL_COPY(EX_VAR(opline->result.var), value);
					}
					goto exit_assign_obj;
				}
			} else {
				ZEND_ASSERT(IS_HOOKED_PROPERTY_OFFSET(prop_offset));
				if (ZEND_IS_PROPERTY_HOOK_SIMPLE_WRITE(prop_offset)) {
					prop_info = CACHED_PTR_EX(cache_slot + 2);
					prop_offset = prop_info->offset;
					if (!ZEND_TYPE_IS_SET(prop_info->type)) {
						prop_info = NULL;
					}
					goto assign_obj_simple;
				}
				/* Fall through to write_property for hooks. */
			}
		}
		name = Z_STR_P(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC));
	} else {
		name = zval_try_get_tmp_string(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC), &tmp_name);
		if (UNEXPECTED(!name)) {


			UNDEF_RESULT();
			goto exit_assign_obj;
		}
	}

	if (IS_CONST == IS_CV || IS_CONST == IS_VAR) {
		ZVAL_DEREF(value);
	}

	value = zobj->handlers->write_property(zobj, name, value, ((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);

	if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
		zend_tmp_string_release(tmp_name);
	}

free_and_exit_assign_obj:
	if (UNEXPECTED(RETURN_VALUE_USED(opline)) && value) {
		ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
	}


exit_assign_obj:
	if (garbage) {
		GC_DTOR_NO_REF(garbage);
	}
	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));


	/* assign_obj has two opcodes! */
	ZEND_VM_NEXT_OPCODE_EX(1, 2);
}

/* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CONST|VAR) */
static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_OP_DATA_TMP_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *object, *value, tmp;
	zend_object *zobj;
	zend_string *name, *tmp_name;
	zend_refcounted *garbage = NULL;

	SAVE_OPLINE();
	object = &EX(This);
	value = _get_zval_ptr_tmp((opline+1)->op1.var EXECUTE_DATA_CC);

	if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
		if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
			object = Z_REFVAL_P(object);
			goto assign_object;
		}
		zend_throw_non_object_error(object, _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC) OPLINE_CC EXECUTE_DATA_CC);
		value = &EG(uninitialized_zval);
		goto free_and_exit_assign_obj;
	}

assign_object:
	zobj = Z_OBJ_P(object);
	if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
		if (EXPECTED(zobj->ce == CACHED_PTR(opline->extended_value))) {
			void **cache_slot = CACHE_ADDR(opline->extended_value);
			uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
			zval *property_val;
			zend_property_info *prop_info;

			if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
				prop_info = (zend_property_info*) CACHED_PTR_EX(cache_slot + 2);

assign_obj_simple:
				property_val = OBJ_PROP(zobj, prop_offset);
				if (Z_TYPE_P(property_val) != IS_UNDEF) {
					if (prop_info != NULL) {
						value = zend_assign_to_typed_prop(prop_info, property_val, value, &garbage EXECUTE_DATA_CC);
						goto free_and_exit_assign_obj;
					} else {
fast_assign_obj:
						value = zend_assign_to_variable_ex(property_val, value, IS_TMP_VAR, EX_USES_STRICT_TYPES(), &garbage);
						if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
							ZVAL_COPY(EX_VAR(opline->result.var), value);
						}
						goto exit_assign_obj;
					}
				}
			} else if (EXPECTED(IS_DYNAMIC_PROPERTY_OFFSET(prop_offset))) {
				name = Z_STR_P(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC));
				if (UNEXPECTED(zend_lazy_object_must_init(zobj))) {
					zobj = zend_lazy_object_init(zobj);
					if (!zobj) {
						value = &EG(uninitialized_zval);
						goto free_and_exit_assign_obj;
					}
				}
				if (!zobj->ce->__set && (zobj->ce->ce_flags & ZEND_ACC_ALLOW_DYNAMIC_PROPERTIES)) {
					rebuild_object_properties_internal(zobj);
				}
				if (EXPECTED(zobj->properties != NULL)) {
					if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
						if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
							GC_DELREF(zobj->properties);
						}
						zobj->properties = zend_array_dup(zobj->properties);
					}
					property_val = zend_hash_find_known_hash(zobj->properties, name);
					if (property_val) {
						goto fast_assign_obj;
					}
				}

				if (!zobj->ce->__set && (zobj->ce->ce_flags & ZEND_ACC_ALLOW_DYNAMIC_PROPERTIES)) {
					if (IS_TMP_VAR == IS_CONST) {
						if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
							Z_ADDREF_P(value);
						}
					} else if (IS_TMP_VAR != IS_TMP_VAR) {
						if (Z_ISREF_P(value)) {
							if (IS_TMP_VAR == IS_VAR) {
								zend_reference *ref = Z_REF_P(value);
								if (GC_DELREF(ref) == 0) {
									ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
									efree_size(ref, sizeof(zend_reference));
									value = &tmp;
								} else {
									value = Z_REFVAL_P(value);
									Z_TRY_ADDREF_P(value);
								}
							} else {
								value = Z_REFVAL_P(value);
								Z_TRY_ADDREF_P(value);
							}
						} else if (IS_TMP_VAR == IS_CV) {
							Z_TRY_ADDREF_P(value);
						}
					}
					zend_hash_add_new(zobj->properties, name, value);
					if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
						ZVAL_COPY(EX_VAR(opline->result.var), value);
					}
					goto exit_assign_obj;
				}
			} else {
				ZEND_ASSERT(IS_HOOKED_PROPERTY_OFFSET(prop_offset));
				if (ZEND_IS_PROPERTY_HOOK_SIMPLE_WRITE(prop_offset)) {
					prop_info = CACHED_PTR_EX(cache_slot + 2);
					prop_offset = prop_info->offset;
					if (!ZEND_TYPE_IS_SET(prop_info->type)) {
						prop_info = NULL;
					}
					goto assign_obj_simple;
				}
				/* Fall through to write_property for hooks. */
			}
		}
		name = Z_STR_P(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC));
	} else {
		name = zval_try_get_tmp_string(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC), &tmp_name);
		if (UNEXPECTED(!name)) {
			zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
			UNDEF_RESULT();
			goto exit_assign_obj;
		}
	}

	if (IS_TMP_VAR == IS_CV || IS_TMP_VAR == IS_VAR) {
		ZVAL_DEREF(value);
	}

	value = zobj->handlers->write_property(zobj, name, value, ((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);

	if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
		zend_tmp_string_release(tmp_name);
	}

free_and_exit_assign_obj:
	if (UNEXPECTED(RETURN_VALUE_USED(opline)) && value) {
		ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
	}
	zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
exit_assign_obj:
	if (garbage) {
		GC_DTOR_NO_REF(garbage);
	}
	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));


	/* assign_obj has two opcodes! */
	ZEND_VM_NEXT_OPCODE_EX(1, 2);
}

/* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CONST|VAR) */
static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_OP_DATA_VAR_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *object, *value, tmp;
	zend_object *zobj;
	zend_string *name, *tmp_name;
	zend_refcounted *garbage = NULL;

	SAVE_OPLINE();
	object = &EX(This);
	value = _get_zval_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);

	if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
		if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
			object = Z_REFVAL_P(object);
			goto assign_object;
		}
		zend_throw_non_object_error(object, _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC) OPLINE_CC EXECUTE_DATA_CC);
		value = &EG(uninitialized_zval);
		goto free_and_exit_assign_obj;
	}

assign_object:
	zobj = Z_OBJ_P(object);
	if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
		if (EXPECTED(zobj->ce == CACHED_PTR(opline->extended_value))) {
			void **cache_slot = CACHE_ADDR(opline->extended_value);
			uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
			zval *property_val;
			zend_property_info *prop_info;

			if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
				prop_info = (zend_property_info*) CACHED_PTR_EX(cache_slot + 2);

assign_obj_simple:
				property_val = OBJ_PROP(zobj, prop_offset);
				if (Z_TYPE_P(property_val) != IS_UNDEF) {
					if (prop_info != NULL) {
						value = zend_assign_to_typed_prop(prop_info, property_val, value, &garbage EXECUTE_DATA_CC);
						goto free_and_exit_assign_obj;
					} else {
fast_assign_obj:
						value = zend_assign_to_variable_ex(property_val, value, IS_VAR, EX_USES_STRICT_TYPES(), &garbage);
						if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
							ZVAL_COPY(EX_VAR(opline->result.var), value);
						}
						goto exit_assign_obj;
					}
				}
			} else if (EXPECTED(IS_DYNAMIC_PROPERTY_OFFSET(prop_offset))) {
				name = Z_STR_P(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC));
				if (UNEXPECTED(zend_lazy_object_must_init(zobj))) {
					zobj = zend_lazy_object_init(zobj);
					if (!zobj) {
						value = &EG(uninitialized_zval);
						goto free_and_exit_assign_obj;
					}
				}
				if (!zobj->ce->__set && (zobj->ce->ce_flags & ZEND_ACC_ALLOW_DYNAMIC_PROPERTIES)) {
					rebuild_object_properties_internal(zobj);
				}
				if (EXPECTED(zobj->properties != NULL)) {
					if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
						if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
							GC_DELREF(zobj->properties);
						}
						zobj->properties = zend_array_dup(zobj->properties);
					}
					property_val = zend_hash_find_known_hash(zobj->properties, name);
					if (property_val) {
						goto fast_assign_obj;
					}
				}

				if (!zobj->ce->__set && (zobj->ce->ce_flags & ZEND_ACC_ALLOW_DYNAMIC_PROPERTIES)) {
					if (IS_VAR == IS_CONST) {
						if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
							Z_ADDREF_P(value);
						}
					} else if (IS_VAR != IS_TMP_VAR) {
						if (Z_ISREF_P(value)) {
							if (IS_VAR == IS_VAR) {
								zend_reference *ref = Z_REF_P(value);
								if (GC_DELREF(ref) == 0) {
									ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
									efree_size(ref, sizeof(zend_reference));
									value = &tmp;
								} else {
									value = Z_REFVAL_P(value);
									Z_TRY_ADDREF_P(value);
								}
							} else {
								value = Z_REFVAL_P(value);
								Z_TRY_ADDREF_P(value);
							}
						} else if (IS_VAR == IS_CV) {
							Z_TRY_ADDREF_P(value);
						}
					}
					zend_hash_add_new(zobj->properties, name, value);
					if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
						ZVAL_COPY(EX_VAR(opline->result.var), value);
					}
					goto exit_assign_obj;
				}
			} else {
				ZEND_ASSERT(IS_HOOKED_PROPERTY_OFFSET(prop_offset));
				if (ZEND_IS_PROPERTY_HOOK_SIMPLE_WRITE(prop_offset)) {
					prop_info = CACHED_PTR_EX(cache_slot + 2);
					prop_offset = prop_info->offset;
					if (!ZEND_TYPE_IS_SET(prop_info->type)) {
						prop_info = NULL;
					}
					goto assign_obj_simple;
				}
				/* Fall through to write_property for hooks. */
			}
		}
		name = Z_STR_P(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC));
	} else {
		name = zval_try_get_tmp_string(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC), &tmp_name);
		if (UNEXPECTED(!name)) {
			zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
			UNDEF_RESULT();
			goto exit_assign_obj;
		}
	}

	if (IS_VAR == IS_CV || IS_VAR == IS_VAR) {
		ZVAL_DEREF(value);
	}

	value = zobj->handlers->write_property(zobj, name, value, ((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);

	if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
		zend_tmp_string_release(tmp_name);
	}

free_and_exit_assign_obj:
	if (UNEXPECTED(RETURN_VALUE_USED(opline)) && value) {
		ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
	}
	zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
exit_assign_obj:
	if (garbage) {
		GC_DTOR_NO_REF(garbage);
	}
	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));


	/* assign_obj has two opcodes! */
	ZEND_VM_NEXT_OPCODE_EX(1, 2);
}

/* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CONST|VAR) */
static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_OP_DATA_CV_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *object, *value, tmp;
	zend_object *zobj;
	zend_string *name, *tmp_name;
	zend_refcounted *garbage = NULL;

	SAVE_OPLINE();
	object = &EX(This);
	value = _get_zval_ptr_cv_BP_VAR_R((opline+1)->op1.var EXECUTE_DATA_CC);

	if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
		if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
			object = Z_REFVAL_P(object);
			goto assign_object;
		}
		zend_throw_non_object_error(object, _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC) OPLINE_CC EXECUTE_DATA_CC);
		value = &EG(uninitialized_zval);
		goto free_and_exit_assign_obj;
	}

assign_object:
	zobj = Z_OBJ_P(object);
	if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
		if (EXPECTED(zobj->ce == CACHED_PTR(opline->extended_value))) {
			void **cache_slot = CACHE_ADDR(opline->extended_value);
			uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
			zval *property_val;
			zend_property_info *prop_info;

			if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
				prop_info = (zend_property_info*) CACHED_PTR_EX(cache_slot + 2);

assign_obj_simple:
				property_val = OBJ_PROP(zobj, prop_offset);
				if (Z_TYPE_P(property_val) != IS_UNDEF) {
					if (prop_info != NULL) {
						value = zend_assign_to_typed_prop(prop_info, property_val, value, &garbage EXECUTE_DATA_CC);
						goto free_and_exit_assign_obj;
					} else {
fast_assign_obj:
						value = zend_assign_to_variable_ex(property_val, value, IS_CV, EX_USES_STRICT_TYPES(), &garbage);
						if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
							ZVAL_COPY(EX_VAR(opline->result.var), value);
						}
						goto exit_assign_obj;
					}
				}
			} else if (EXPECTED(IS_DYNAMIC_PROPERTY_OFFSET(prop_offset))) {
				name = Z_STR_P(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC));
				if (UNEXPECTED(zend_lazy_object_must_init(zobj))) {
					zobj = zend_lazy_object_init(zobj);
					if (!zobj) {
						value = &EG(uninitialized_zval);
						goto free_and_exit_assign_obj;
					}
				}
				if (!zobj->ce->__set && (zobj->ce->ce_flags & ZEND_ACC_ALLOW_DYNAMIC_PROPERTIES)) {
					rebuild_object_properties_internal(zobj);
				}
				if (EXPECTED(zobj->properties != NULL)) {
					if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
						if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
							GC_DELREF(zobj->properties);
						}
						zobj->properties = zend_array_dup(zobj->properties);
					}
					property_val = zend_hash_find_known_hash(zobj->properties, name);
					if (property_val) {
						goto fast_assign_obj;
					}
				}

				if (!zobj->ce->__set && (zobj->ce->ce_flags & ZEND_ACC_ALLOW_DYNAMIC_PROPERTIES)) {
					if (IS_CV == IS_CONST) {
						if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
							Z_ADDREF_P(value);
						}
					} else if (IS_CV != IS_TMP_VAR) {
						if (Z_ISREF_P(value)) {
							if (IS_CV == IS_VAR) {
								zend_reference *ref = Z_REF_P(value);
								if (GC_DELREF(ref) == 0) {
									ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
									efree_size(ref, sizeof(zend_reference));
									value = &tmp;
								} else {
									value = Z_REFVAL_P(value);
									Z_TRY_ADDREF_P(value);
								}
							} else {
								value = Z_REFVAL_P(value);
								Z_TRY_ADDREF_P(value);
							}
						} else if (IS_CV == IS_CV) {
							Z_TRY_ADDREF_P(value);
						}
					}
					zend_hash_add_new(zobj->properties, name, value);
					if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
						ZVAL_COPY(EX_VAR(opline->result.var), value);
					}
					goto exit_assign_obj;
				}
			} else {
				ZEND_ASSERT(IS_HOOKED_PROPERTY_OFFSET(prop_offset));
				if (ZEND_IS_PROPERTY_HOOK_SIMPLE_WRITE(prop_offset)) {
					prop_info = CACHED_PTR_EX(cache_slot + 2);
					prop_offset = prop_info->offset;
					if (!ZEND_TYPE_IS_SET(prop_info->type)) {
						prop_info = NULL;
					}
					goto assign_obj_simple;
				}
				/* Fall through to write_property for hooks. */
			}
		}
		name = Z_STR_P(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC));
	} else {
		name = zval_try_get_tmp_string(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC), &tmp_name);
		if (UNEXPECTED(!name)) {


			UNDEF_RESULT();
			goto exit_assign_obj;
		}
	}

	if (IS_CV == IS_CV || IS_CV == IS_VAR) {
		ZVAL_DEREF(value);
	}

	value = zobj->handlers->write_property(zobj, name, value, ((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);

	if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
		zend_tmp_string_release(tmp_name);
	}

free_and_exit_assign_obj:
	if (UNEXPECTED(RETURN_VALUE_USED(opline)) && value) {
		ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
	}


exit_assign_obj:
	if (garbage) {
		GC_DTOR_NO_REF(garbage);
	}
	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));


	/* assign_obj has two opcodes! */
	ZEND_VM_NEXT_OPCODE_EX(1, 2);
}

/* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CONST|VAR) */
static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_ASSIGN_OBJ_REF_SPEC_UNUSED_TMPVAR_OP_DATA_VAR_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *property, *container, *value_ptr;

	SAVE_OPLINE();

	container = &EX(This);
	property = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);

	value_ptr = _get_zval_ptr_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);

	if (1) {
		if (IS_UNUSED == IS_UNUSED) {
			if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
				zend_assign_to_property_reference_this_const(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
			} else {
				zend_assign_to_property_reference_this_var(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
			}
		} else {
			if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
				zend_assign_to_property_reference_var_const(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
			} else {
				zend_assign_to_property_reference_var_var(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
			}
		}
	} else {
		zend_assign_to_property_reference(container, IS_UNUSED, property, (IS_TMP_VAR|IS_VAR), value_ptr OPLINE_CC EXECUTE_DATA_CC);
	}


	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
	zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
	ZEND_VM_NEXT_OPCODE_EX(1, 2);
}

/* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CONST|VAR) */
static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_ASSIGN_OBJ_REF_SPEC_UNUSED_TMPVAR_OP_DATA_CV_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *property, *container, *value_ptr;

	SAVE_OPLINE();

	container = &EX(This);
	property = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);

	value_ptr = _get_zval_ptr_cv_BP_VAR_W((opline+1)->op1.var EXECUTE_DATA_CC);

	if (1) {
		if (IS_UNUSED == IS_UNUSED) {
			if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
				zend_assign_to_property_reference_this_const(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
			} else {
				zend_assign_to_property_reference_this_var(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
			}
		} else {
			if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
				zend_assign_to_property_reference_var_const(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
			} else {
				zend_assign_to_property_reference_var_var(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
			}
		}
	} else {
		zend_assign_to_property_reference(container, IS_UNUSED, property, (IS_TMP_VAR|IS_VAR), value_ptr OPLINE_CC EXECUTE_DATA_CC);
	}


	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));


	ZEND_VM_NEXT_OPCODE_EX(1, 2);
}

/* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CONST|VAR) */
static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_ROPE_INIT_SPEC_UNUSED_TMPVAR_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zend_string **rope;
	zval *var;

	/* Compiler allocates the necessary number of zval slots to keep the rope */
	rope = (zend_string**)EX_VAR(opline->result.var);
	if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
		var = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
		rope[0] = Z_STR_P(var);
		if (UNEXPECTED(Z_REFCOUNTED_P(var))) {
			Z_ADDREF_P(var);
		}
	} else {
		var = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
		if (EXPECTED(Z_TYPE_P(var) == IS_STRING)) {
			if ((IS_TMP_VAR|IS_VAR) == IS_CV) {
				rope[0] = zend_string_copy(Z_STR_P(var));
			} else {
				rope[0] = Z_STR_P(var);
			}
		} else {
			SAVE_OPLINE();
			if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(var) == IS_UNDEF)) {
				ZVAL_UNDEFINED_OP2();
			}
			rope[0] = zval_get_string_func(var);
			zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
			ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
		}
	}
	ZEND_VM_NEXT_OPCODE();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_FETCH_CLASS_SPEC_UNUSED_TMPVAR_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	zval *class_name;
	USE_OPLINE

	SAVE_OPLINE();
	if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED) {
		Z_CE_P(EX_VAR(opline->result.var)) = zend_fetch_class(NULL, opline->op1.num);
		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
	} else if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
		zend_class_entry *ce = CACHED_PTR(opline->extended_value);

		if (UNEXPECTED(ce == NULL)) {
			class_name = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
			ce = zend_fetch_class_by_name(Z_STR_P(class_name), Z_STR_P(class_name + 1), opline->op1.num);
			CACHE_PTR(opline->extended_value, ce);
		}
		Z_CE_P(EX_VAR(opline->result.var)) = ce;
	} else {
		class_name = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
try_class_name:
		if (Z_TYPE_P(class_name) == IS_OBJECT) {
			Z_CE_P(EX_VAR(opline->result.var)) = Z_OBJCE_P(class_name);
		} else if (Z_TYPE_P(class_name) == IS_STRING) {
			Z_CE_P(EX_VAR(opline->result.var)) = zend_fetch_class(Z_STR_P(class_name), opline->op1.num);
		} else if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && Z_TYPE_P(class_name) == IS_REFERENCE) {
			class_name = Z_REFVAL_P(class_name);
			goto try_class_name;
		} else {
			if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(class_name) == IS_UNDEF)) {
				ZVAL_UNDEFINED_OP2();
				if (UNEXPECTED(EG(exception) != NULL)) {
					HANDLE_EXCEPTION();
				}
			}
			zend_throw_error(NULL, "Class name must be a valid object or a string");
		}
	}

	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_INIT_METHOD_CALL_SPEC_UNUSED_TMPVAR_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *function_name;
	zval *object;
	zend_function *fbc;
	zend_class_entry *called_scope;
	zend_object *obj;
	zend_execute_data *call;
	uint32_t call_info;

	SAVE_OPLINE();

	object = &EX(This);

	if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
		function_name = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
	}

	if ((IS_TMP_VAR|IS_VAR) != IS_CONST &&
	    UNEXPECTED(Z_TYPE_P(function_name) != IS_STRING)) {
		do {
			if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && Z_ISREF_P(function_name)) {
				function_name = Z_REFVAL_P(function_name);
				if (EXPECTED(Z_TYPE_P(function_name) == IS_STRING)) {
					break;
				}
			} else if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) {
				ZVAL_UNDEFINED_OP2();
				if (UNEXPECTED(EG(exception) != NULL)) {


					HANDLE_EXCEPTION();
				}
			}
			zend_throw_error(NULL, "Method name must be a string");
			zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));


			HANDLE_EXCEPTION();
		} while (0);
	}

	if (IS_UNUSED == IS_UNUSED) {
		obj = Z_OBJ_P(object);
	} else {
		do {
			if (IS_UNUSED != IS_CONST && EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
				obj = Z_OBJ_P(object);
			} else {
				if ((IS_UNUSED & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(object))) {
					zend_reference *ref = Z_REF_P(object);

					object = &ref->val;
					if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
						obj = Z_OBJ_P(object);
						if (IS_UNUSED & IS_VAR) {
							if (UNEXPECTED(GC_DELREF(ref) == 0)) {
								efree_size(ref, sizeof(zend_reference));
							} else {
								Z_ADDREF_P(object);
							}
						}
						break;
					}
				}
				if (IS_UNUSED == IS_CV && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
					object = ZVAL_UNDEFINED_OP1();
					if (UNEXPECTED(EG(exception) != NULL)) {
						if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
							zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
						}
						HANDLE_EXCEPTION();
					}
				}
				if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
					function_name = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
				}
				zend_invalid_method_call(object, function_name);
				zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));


				HANDLE_EXCEPTION();
			}
		} while (0);
	}

	called_scope = obj->ce;

	if ((IS_TMP_VAR|IS_VAR) == IS_CONST &&
	    EXPECTED(CACHED_PTR(opline->result.num) == called_scope)) {
		fbc = CACHED_PTR(opline->result.num + sizeof(void*));
	} else {
		zend_object *orig_obj = obj;

		if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
			function_name = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
		}

		/* First, locate the function. */
		fbc = obj->handlers->get_method(&obj, Z_STR_P(function_name), (((IS_TMP_VAR|IS_VAR) == IS_CONST) ? (RT_CONSTANT(opline, opline->op2) + 1) : NULL));
		if (UNEXPECTED(fbc == NULL)) {
			if (EXPECTED(!EG(exception))) {
				zend_undefined_method(orig_obj->ce, Z_STR_P(function_name));
			}
			zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
			if ((IS_UNUSED & (IS_VAR|IS_TMP_VAR)) && GC_DELREF(orig_obj) == 0) {
				zend_objects_store_del(orig_obj);
			}
			HANDLE_EXCEPTION();
		}
		if ((IS_TMP_VAR|IS_VAR) == IS_CONST &&
		    EXPECTED(!(fbc->common.fn_flags & (ZEND_ACC_CALL_VIA_TRAMPOLINE|ZEND_ACC_NEVER_CACHE))) &&
		    EXPECTED(obj == orig_obj)) {
			CACHE_POLYMORPHIC_PTR(opline->result.num, called_scope, fbc);
		}
		if ((IS_UNUSED & (IS_VAR|IS_TMP_VAR)) && UNEXPECTED(obj != orig_obj)) {
			GC_ADDREF(obj); /* For $this pointer */
			if (GC_DELREF(orig_obj) == 0) {
				zend_objects_store_del(orig_obj);
			}
		}
		if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!RUN_TIME_CACHE(&fbc->op_array))) {
			init_func_run_time_cache(&fbc->op_array);
		}
	}

	if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
		zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
	}

	call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_HAS_THIS;
	if (UNEXPECTED((fbc->common.fn_flags & ZEND_ACC_STATIC) != 0)) {
		if ((IS_UNUSED & (IS_VAR|IS_TMP_VAR)) && GC_DELREF(obj) == 0) {
			zend_objects_store_del(obj);
			if (UNEXPECTED(EG(exception))) {
				HANDLE_EXCEPTION();
			}
		}
		/* call static method */
		obj = (zend_object*)called_scope;
		call_info = ZEND_CALL_NESTED_FUNCTION;
	} else if (IS_UNUSED & (IS_VAR|IS_TMP_VAR|IS_CV)) {
		if (IS_UNUSED == IS_CV) {
			GC_ADDREF(obj); /* For $this pointer */
		}
		/* CV may be changed indirectly (e.g. when it's a reference) */
		call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_HAS_THIS | ZEND_CALL_RELEASE_THIS;
	}

	call = zend_vm_stack_push_call_frame(call_info,
		fbc, opline->extended_value, obj);
	call->prev_execute_data = EX(call);
	EX(call) = call;

	ZEND_VM_NEXT_OPCODE();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_INIT_STATIC_METHOD_CALL_SPEC_UNUSED_TMPVAR_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *function_name;
	zend_class_entry *ce;
	uint32_t call_info;
	zend_function *fbc;
	zend_execute_data *call;

	SAVE_OPLINE();

	if (IS_UNUSED == IS_CONST) {
		/* no function found. try a static method in class */
		ce = CACHED_PTR(opline->result.num);
		if (UNEXPECTED(ce == NULL)) {
			ce = zend_fetch_class_by_name(Z_STR_P(RT_CONSTANT(opline, opline->op1)), Z_STR_P(RT_CONSTANT(opline, opline->op1) + 1), ZEND_FETCH_CLASS_DEFAULT | ZEND_FETCH_CLASS_EXCEPTION);
			if (UNEXPECTED(ce == NULL)) {
				zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
				HANDLE_EXCEPTION();
			}
			if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
				CACHE_PTR(opline->result.num, ce);
			}
		}
	} else if (IS_UNUSED == IS_UNUSED) {
		ce = zend_fetch_class(NULL, opline->op1.num);
		if (UNEXPECTED(ce == NULL)) {
			zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
			HANDLE_EXCEPTION();
		}
	} else {
		ce = Z_CE_P(EX_VAR(opline->op1.var));
	}

	if (IS_UNUSED == IS_CONST &&
	    (IS_TMP_VAR|IS_VAR) == IS_CONST &&
	    EXPECTED((fbc = CACHED_PTR(opline->result.num + sizeof(void*))) != NULL)) {
		/* nothing to do */
	} else if (IS_UNUSED != IS_CONST &&
	           (IS_TMP_VAR|IS_VAR) == IS_CONST &&
	           EXPECTED(CACHED_PTR(opline->result.num) == ce)) {
		fbc = CACHED_PTR(opline->result.num + sizeof(void*));
	} else if ((IS_TMP_VAR|IS_VAR) != IS_UNUSED) {
		function_name = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
		if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
			if (UNEXPECTED(Z_TYPE_P(function_name) != IS_STRING)) {
				do {
					if ((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV) && Z_ISREF_P(function_name)) {
						function_name = Z_REFVAL_P(function_name);
						if (EXPECTED(Z_TYPE_P(function_name) == IS_STRING)) {
							break;
						}
					} else if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) {
						ZVAL_UNDEFINED_OP2();
						if (UNEXPECTED(EG(exception) != NULL)) {
							HANDLE_EXCEPTION();
						}
					}
					zend_throw_error(NULL, "Method name must be a string");
					zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
					HANDLE_EXCEPTION();
				} while (0);
			}
		}

		if (ce->get_static_method) {
			fbc = ce->get_static_method(ce, Z_STR_P(function_name));
		} else {
			fbc = zend_std_get_static_method(ce, Z_STR_P(function_name), (((IS_TMP_VAR|IS_VAR) == IS_CONST) ? (RT_CONSTANT(opline, opline->op2) + 1) : NULL));
		}
		if (UNEXPECTED(fbc == NULL)) {
			if (EXPECTED(!EG(exception))) {
				zend_undefined_method(ce, Z_STR_P(function_name));
			}
			zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
			HANDLE_EXCEPTION();
		}
		if ((IS_TMP_VAR|IS_VAR) == IS_CONST &&
		    EXPECTED(!(fbc->common.fn_flags & (ZEND_ACC_CALL_VIA_TRAMPOLINE|ZEND_ACC_NEVER_CACHE))) &&
			EXPECTED(!(fbc->common.scope->ce_flags & ZEND_ACC_TRAIT))) {
			CACHE_POLYMORPHIC_PTR(opline->result.num, ce, fbc);
		}
		if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!RUN_TIME_CACHE(&fbc->op_array))) {
			init_func_run_time_cache(&fbc->op_array);
		}
		if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
			zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
		}
	} else {
		if (UNEXPECTED(ce->constructor == NULL)) {
			zend_throw_error(NULL, "Cannot call constructor");
			HANDLE_EXCEPTION();
		}
		if (Z_TYPE(EX(This)) == IS_OBJECT && Z_OBJ(EX(This))->ce != ce->constructor->common.scope && (ce->constructor->common.fn_flags & ZEND_ACC_PRIVATE)) {
			zend_throw_error(NULL, "Cannot call private %s::__construct()", ZSTR_VAL(ce->name));
			HANDLE_EXCEPTION();
		}
		fbc = ce->constructor;
		if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!RUN_TIME_CACHE(&fbc->op_array))) {
			init_func_run_time_cache(&fbc->op_array);
		}
	}

	if (!(fbc->common.fn_flags & ZEND_ACC_STATIC)) {
		if (Z_TYPE(EX(This)) == IS_OBJECT && instanceof_function(Z_OBJCE(EX(This)), ce)) {
			ce = (zend_class_entry*)Z_OBJ(EX(This));
			call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_HAS_THIS;
		} else {
			zend_non_static_method_call(fbc);
			HANDLE_EXCEPTION();
		}
	} else {
		/* previous opcode is ZEND_FETCH_CLASS */
		if (IS_UNUSED == IS_UNUSED
		 && ((opline->op1.num & ZEND_FETCH_CLASS_MASK) == ZEND_FETCH_CLASS_PARENT ||
		     (opline->op1.num & ZEND_FETCH_CLASS_MASK) == ZEND_FETCH_CLASS_SELF)) {
			if (Z_TYPE(EX(This)) == IS_OBJECT) {
				ce = Z_OBJCE(EX(This));
			} else {
				ce = Z_CE(EX(This));
			}
		}
		call_info = ZEND_CALL_NESTED_FUNCTION;
	}

	call = zend_vm_stack_push_call_frame(call_info,
		fbc, opline->extended_value, ce);
	call->prev_execute_data = EX(call);
	EX(call) = call;

	ZEND_VM_NEXT_OPCODE();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_INIT_ARRAY_SPEC_UNUSED_TMPVAR_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	zval *array;
	uint32_t size;
	USE_OPLINE

	SAVE_OPLINE();
	array = EX_VAR(opline->result.var);
	if (IS_UNUSED != IS_UNUSED) {
		size = opline->extended_value >> ZEND_ARRAY_SIZE_SHIFT;
		ZVAL_ARR(array, zend_new_array(size));
		/* Explicitly initialize array as not-packed if flag is set */
		if (opline->extended_value & ZEND_ARRAY_NOT_PACKED) {
			zend_hash_real_init_mixed(Z_ARRVAL_P(array));
		}
		ZEND_VM_TAIL_CALL(ZEND_NULL_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
	} else {
		ZVAL_ARR(array, zend_new_array(0));
		ZEND_VM_NEXT_OPCODE();
	}
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_UNSET_OBJ_SPEC_UNUSED_TMPVAR_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *container;
	zval *offset;
	zend_string *name, *tmp_name;

	SAVE_OPLINE();
	container = &EX(This);
	offset = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);

	do {
		if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT)) {
			if (Z_ISREF_P(container)) {
				container = Z_REFVAL_P(container);
				if (Z_TYPE_P(container) != IS_OBJECT) {
					if (IS_UNUSED == IS_CV
					 && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
						ZVAL_UNDEFINED_OP1();
					}
					break;
				}
			} else {
				break;
			}
		}
		if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
			name = Z_STR_P(offset);
		} else {
			name = zval_try_get_tmp_string(offset, &tmp_name);
			if (UNEXPECTED(!name)) {
				break;
			}
		}
		Z_OBJ_HT_P(container)->unset_property(Z_OBJ_P(container), name, (((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL));
		if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
			zend_tmp_string_release(tmp_name);
		}
	} while (0);

	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));


	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_UNUSED_TMPVAR_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *container;
	int result;
	zval *offset;
	zend_string *name, *tmp_name;

	SAVE_OPLINE();
	container = &EX(This);
	offset = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);

	if (IS_UNUSED == IS_CONST ||
	    (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
		if ((IS_UNUSED & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
			container = Z_REFVAL_P(container);
			if (UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT)) {
				result = (opline->extended_value & ZEND_ISEMPTY);
				goto isset_object_finish;
			}
		} else {
			result = (opline->extended_value & ZEND_ISEMPTY);
			goto isset_object_finish;
		}
	}

	if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
		name = Z_STR_P(offset);
	} else {
		name = zval_try_get_tmp_string(offset, &tmp_name);
		if (UNEXPECTED(!name)) {
			result = 0;
			goto isset_object_finish;
		}
	}

	result =
		(opline->extended_value & ZEND_ISEMPTY) ^
		Z_OBJ_HT_P(container)->has_property(Z_OBJ_P(container), name, (opline->extended_value & ZEND_ISEMPTY), (((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(opline->extended_value & ~ZEND_ISEMPTY) : NULL));

	if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
		zend_tmp_string_release(tmp_name);
	}

isset_object_finish:
	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));


	ZEND_VM_SMART_BRANCH(result, 1);
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_YIELD_SPEC_UNUSED_TMPVAR_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE

	zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C);

	SAVE_OPLINE();
	if (UNEXPECTED(generator->flags & ZEND_GENERATOR_FORCED_CLOSE)) {
		ZEND_VM_TAIL_CALL(zend_yield_in_closed_generator_helper_SPEC_TAILCALL(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
	}

	/* Destroy the previously yielded value */
	zval_ptr_dtor(&generator->value);

	/* Destroy the previously yielded key */
	zval_ptr_dtor(&generator->key);

	/* Set the new yielded value */
	if (IS_UNUSED != IS_UNUSED) {
		if (UNEXPECTED(EX(func)->op_array.fn_flags & ZEND_ACC_RETURN_REFERENCE)) {
			/* Constants and temporary variables aren't yieldable by reference,
			 * but we still allow them with a notice. */
			if (IS_UNUSED & (IS_CONST|IS_TMP_VAR)) {
				zval *value;

				zend_error(E_NOTICE, "Only variable references should be yielded by reference");

				value = NULL;
				ZVAL_COPY_VALUE(&generator->value, value);
				if (IS_UNUSED == IS_CONST) {
					if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
						Z_ADDREF(generator->value);
					}
				}
			} else {
				zval *value_ptr = NULL;

				/* If a function call result is yielded and the function did
				 * not return by reference we throw a notice. */
				do {
					if (IS_UNUSED == IS_VAR) {
						ZEND_ASSERT(value_ptr != &EG(uninitialized_zval));
						if (opline->extended_value == ZEND_RETURNS_FUNCTION
						 && !Z_ISREF_P(value_ptr)) {
							zend_error(E_NOTICE, "Only variable references should be yielded by reference");
							ZVAL_COPY(&generator->value, value_ptr);
							break;
						}
					}
					if (Z_ISREF_P(value_ptr)) {
						Z_ADDREF_P(value_ptr);
					} else {
						ZVAL_MAKE_REF_EX(value_ptr, 2);
					}
					ZVAL_REF(&generator->value, Z_REF_P(value_ptr));
				} while (0);


			}
		} else {
			zval *value = NULL;

			/* Consts, temporary variables and references need copying */
			if (IS_UNUSED == IS_CONST) {
				ZVAL_COPY_VALUE(&generator->value, value);
				if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
					Z_ADDREF(generator->value);
				}
			} else if (IS_UNUSED == IS_TMP_VAR) {
				ZVAL_COPY_VALUE(&generator->value, value);
			} else if ((IS_UNUSED & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) {
				ZVAL_COPY(&generator->value, Z_REFVAL_P(value));


			} else {
				ZVAL_COPY_VALUE(&generator->value, value);
				if (IS_UNUSED == IS_CV) {
					if (Z_OPT_REFCOUNTED_P(value)) Z_ADDREF_P(value);
				}
			}
		}
	} else {
		/* If no value was specified yield null */
		ZVAL_NULL(&generator->value);
	}

	/* Set the new yielded key */
	if ((IS_TMP_VAR|IS_VAR) != IS_UNUSED) {
		zval *key = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
		if (((IS_TMP_VAR|IS_VAR) & (IS_CV|IS_VAR)) && UNEXPECTED(Z_TYPE_P(key) == IS_REFERENCE)) {
			key = Z_REFVAL_P(key);
		}
		ZVAL_COPY(&generator->key, key);
		zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));

		if (Z_TYPE(generator->key) == IS_LONG
		    && Z_LVAL(generator->key) > generator->largest_used_integer_key
		) {
			generator->largest_used_integer_key = Z_LVAL(generator->key);
		}
	} else {
		/* If no key was specified we use auto-increment keys */
		generator->largest_used_integer_key++;
		ZVAL_LONG(&generator->key, generator->largest_used_integer_key);
	}

	if (RETURN_VALUE_USED(opline)) {
		/* If the return value of yield is used set the send
		 * target and initialize it to NULL */
		generator->send_target = EX_VAR(opline->result.var);
		ZVAL_NULL(generator->send_target);
	} else {
		generator->send_target = NULL;
	}

	/* The GOTO VM uses a local opline variable. We need to set the opline
	 * variable in execute_data so we don't resume at an old position. */
	SAVE_OPLINE();

	ZEND_VM_RETURN();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_FETCH_CLASS_SPEC_UNUSED_UNUSED_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	zval *class_name;
	USE_OPLINE

	SAVE_OPLINE();
	if (IS_UNUSED == IS_UNUSED) {
		Z_CE_P(EX_VAR(opline->result.var)) = zend_fetch_class(NULL, opline->op1.num);
		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
	} else if (IS_UNUSED == IS_CONST) {
		zend_class_entry *ce = CACHED_PTR(opline->extended_value);

		if (UNEXPECTED(ce == NULL)) {
			class_name = NULL;
			ce = zend_fetch_class_by_name(Z_STR_P(class_name), Z_STR_P(class_name + 1), opline->op1.num);
			CACHE_PTR(opline->extended_value, ce);
		}
		Z_CE_P(EX_VAR(opline->result.var)) = ce;
	} else {
		class_name = NULL;
try_class_name:
		if (Z_TYPE_P(class_name) == IS_OBJECT) {
			Z_CE_P(EX_VAR(opline->result.var)) = Z_OBJCE_P(class_name);
		} else if (Z_TYPE_P(class_name) == IS_STRING) {
			Z_CE_P(EX_VAR(opline->result.var)) = zend_fetch_class(Z_STR_P(class_name), opline->op1.num);
		} else if ((IS_UNUSED & (IS_VAR|IS_CV)) && Z_TYPE_P(class_name) == IS_REFERENCE) {
			class_name = Z_REFVAL_P(class_name);
			goto try_class_name;
		} else {
			if (IS_UNUSED == IS_CV && UNEXPECTED(Z_TYPE_P(class_name) == IS_UNDEF)) {
				ZVAL_UNDEFINED_OP2();
				if (UNEXPECTED(EG(exception) != NULL)) {
					HANDLE_EXCEPTION();
				}
			}
			zend_throw_error(NULL, "Class name must be a valid object or a string");
		}
	}


	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_INIT_STATIC_METHOD_CALL_SPEC_UNUSED_UNUSED_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *function_name;
	zend_class_entry *ce;
	uint32_t call_info;
	zend_function *fbc;
	zend_execute_data *call;

	SAVE_OPLINE();

	if (IS_UNUSED == IS_CONST) {
		/* no function found. try a static method in class */
		ce = CACHED_PTR(opline->result.num);
		if (UNEXPECTED(ce == NULL)) {
			ce = zend_fetch_class_by_name(Z_STR_P(RT_CONSTANT(opline, opline->op1)), Z_STR_P(RT_CONSTANT(opline, opline->op1) + 1), ZEND_FETCH_CLASS_DEFAULT | ZEND_FETCH_CLASS_EXCEPTION);
			if (UNEXPECTED(ce == NULL)) {


				HANDLE_EXCEPTION();
			}
			if (IS_UNUSED != IS_CONST) {
				CACHE_PTR(opline->result.num, ce);
			}
		}
	} else if (IS_UNUSED == IS_UNUSED) {
		ce = zend_fetch_class(NULL, opline->op1.num);
		if (UNEXPECTED(ce == NULL)) {


			HANDLE_EXCEPTION();
		}
	} else {
		ce = Z_CE_P(EX_VAR(opline->op1.var));
	}

	if (IS_UNUSED == IS_CONST &&
	    IS_UNUSED == IS_CONST &&
	    EXPECTED((fbc = CACHED_PTR(opline->result.num + sizeof(void*))) != NULL)) {
		/* nothing to do */
	} else if (IS_UNUSED != IS_CONST &&
	           IS_UNUSED == IS_CONST &&
	           EXPECTED(CACHED_PTR(opline->result.num) == ce)) {
		fbc = CACHED_PTR(opline->result.num + sizeof(void*));
	} else if (IS_UNUSED != IS_UNUSED) {
		function_name = NULL;
		if (IS_UNUSED != IS_CONST) {
			if (UNEXPECTED(Z_TYPE_P(function_name) != IS_STRING)) {
				do {
					if (IS_UNUSED & (IS_VAR|IS_CV) && Z_ISREF_P(function_name)) {
						function_name = Z_REFVAL_P(function_name);
						if (EXPECTED(Z_TYPE_P(function_name) == IS_STRING)) {
							break;
						}
					} else if (IS_UNUSED == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) {
						ZVAL_UNDEFINED_OP2();
						if (UNEXPECTED(EG(exception) != NULL)) {
							HANDLE_EXCEPTION();
						}
					}
					zend_throw_error(NULL, "Method name must be a string");


					HANDLE_EXCEPTION();
				} while (0);
			}
		}

		if (ce->get_static_method) {
			fbc = ce->get_static_method(ce, Z_STR_P(function_name));
		} else {
			fbc = zend_std_get_static_method(ce, Z_STR_P(function_name), ((IS_UNUSED == IS_CONST) ? (RT_CONSTANT(opline, opline->op2) + 1) : NULL));
		}
		if (UNEXPECTED(fbc == NULL)) {
			if (EXPECTED(!EG(exception))) {
				zend_undefined_method(ce, Z_STR_P(function_name));
			}


			HANDLE_EXCEPTION();
		}
		if (IS_UNUSED == IS_CONST &&
		    EXPECTED(!(fbc->common.fn_flags & (ZEND_ACC_CALL_VIA_TRAMPOLINE|ZEND_ACC_NEVER_CACHE))) &&
			EXPECTED(!(fbc->common.scope->ce_flags & ZEND_ACC_TRAIT))) {
			CACHE_POLYMORPHIC_PTR(opline->result.num, ce, fbc);
		}
		if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!RUN_TIME_CACHE(&fbc->op_array))) {
			init_func_run_time_cache(&fbc->op_array);
		}
		if (IS_UNUSED != IS_CONST) {


		}
	} else {
		if (UNEXPECTED(ce->constructor == NULL)) {
			zend_throw_error(NULL, "Cannot call constructor");
			HANDLE_EXCEPTION();
		}
		if (Z_TYPE(EX(This)) == IS_OBJECT && Z_OBJ(EX(This))->ce != ce->constructor->common.scope && (ce->constructor->common.fn_flags & ZEND_ACC_PRIVATE)) {
			zend_throw_error(NULL, "Cannot call private %s::__construct()", ZSTR_VAL(ce->name));
			HANDLE_EXCEPTION();
		}
		fbc = ce->constructor;
		if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!RUN_TIME_CACHE(&fbc->op_array))) {
			init_func_run_time_cache(&fbc->op_array);
		}
	}

	if (!(fbc->common.fn_flags & ZEND_ACC_STATIC)) {
		if (Z_TYPE(EX(This)) == IS_OBJECT && instanceof_function(Z_OBJCE(EX(This)), ce)) {
			ce = (zend_class_entry*)Z_OBJ(EX(This));
			call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_HAS_THIS;
		} else {
			zend_non_static_method_call(fbc);
			HANDLE_EXCEPTION();
		}
	} else {
		/* previous opcode is ZEND_FETCH_CLASS */
		if (IS_UNUSED == IS_UNUSED
		 && ((opline->op1.num & ZEND_FETCH_CLASS_MASK) == ZEND_FETCH_CLASS_PARENT ||
		     (opline->op1.num & ZEND_FETCH_CLASS_MASK) == ZEND_FETCH_CLASS_SELF)) {
			if (Z_TYPE(EX(This)) == IS_OBJECT) {
				ce = Z_OBJCE(EX(This));
			} else {
				ce = Z_CE(EX(This));
			}
		}
		call_info = ZEND_CALL_NESTED_FUNCTION;
	}

	call = zend_vm_stack_push_call_frame(call_info,
		fbc, opline->extended_value, ce);
	call->prev_execute_data = EX(call);
	EX(call) = call;

	ZEND_VM_NEXT_OPCODE();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_VERIFY_RETURN_TYPE_SPEC_UNUSED_UNUSED_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	if (IS_UNUSED == IS_UNUSED) {
		SAVE_OPLINE();
		zend_verify_missing_return_type(EX(func));
		HANDLE_EXCEPTION();
	} else {
/* prevents "undefined variable opline" errors */
#if 0 || (IS_UNUSED != IS_UNUSED)
		USE_OPLINE
		zval *retval_ref, *retval_ptr;
		zend_arg_info *ret_info = EX(func)->common.arg_info - 1;
		retval_ref = retval_ptr = NULL;

		if (IS_UNUSED == IS_CONST) {
			ZVAL_COPY(EX_VAR(opline->result.var), retval_ptr);
			retval_ref = retval_ptr = EX_VAR(opline->result.var);
		} else if (IS_UNUSED == IS_VAR) {
			if (UNEXPECTED(Z_TYPE_P(retval_ptr) == IS_INDIRECT)) {
				retval_ref = retval_ptr = Z_INDIRECT_P(retval_ptr);
			}
			ZVAL_DEREF(retval_ptr);
		} else if (IS_UNUSED == IS_CV) {
			ZVAL_DEREF(retval_ptr);
		}

		if (EXPECTED(ZEND_TYPE_CONTAINS_CODE(ret_info->type, Z_TYPE_P(retval_ptr)))) {
			ZEND_VM_NEXT_OPCODE();
		}

		if (IS_UNUSED == IS_CV && UNEXPECTED(Z_ISUNDEF_P(retval_ptr))) {
			SAVE_OPLINE();
			retval_ref = retval_ptr = ZVAL_UNDEFINED_OP1();
			if (UNEXPECTED(EG(exception))) {
				HANDLE_EXCEPTION();
			}
			if (ZEND_TYPE_FULL_MASK(ret_info->type) & MAY_BE_NULL) {
				ZEND_VM_NEXT_OPCODE();
			}
		}

		zend_reference *ref = NULL;
		if (UNEXPECTED(retval_ref != retval_ptr)) {
			if (UNEXPECTED(EX(func)->op_array.fn_flags & ZEND_ACC_RETURN_REFERENCE)) {
				ref = Z_REF_P(retval_ref);
			} else {
				/* A cast might happen - unwrap the reference if this is a by-value return */
				if (Z_REFCOUNT_P(retval_ref) == 1) {
					ZVAL_UNREF(retval_ref);
				} else {
					Z_DELREF_P(retval_ref);
					ZVAL_COPY(retval_ref, retval_ptr);
				}
				retval_ptr = retval_ref;
			}
		}

		SAVE_OPLINE();
		if (UNEXPECTED(!zend_check_type_slow(&ret_info->type, retval_ptr, ref, 1, 0))) {
			zend_verify_return_error(EX(func), retval_ptr);
			HANDLE_EXCEPTION();
		}
		ZEND_VM_NEXT_OPCODE();
#endif
	}
}

static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_VERIFY_NEVER_TYPE_SPEC_UNUSED_UNUSED_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	SAVE_OPLINE();
	zend_verify_never_error(EX(func));
	HANDLE_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_CHECK_FUNC_ARG_SPEC_UNUSED_UNUSED_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	uint32_t arg_num;

	if (IS_UNUSED == IS_CONST) {
		zend_string *arg_name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
		arg_num = zend_get_arg_offset_by_name(
			EX(call)->func, arg_name, CACHE_ADDR(opline->result.num)) + 1;
		if (UNEXPECTED(arg_num == 0)) {
			/* Treat this as a by-value argument, and throw an error during SEND. */
			ZEND_DEL_CALL_FLAG(EX(call), ZEND_CALL_SEND_ARG_BY_REF);
			ZEND_VM_NEXT_OPCODE();
		}
	} else {
		arg_num = opline->op2.num;
	}

	if (EXPECTED(0)) {
		if (QUICK_ARG_SHOULD_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
			ZEND_ADD_CALL_FLAG(EX(call), ZEND_CALL_SEND_ARG_BY_REF);
		} else {
			ZEND_DEL_CALL_FLAG(EX(call), ZEND_CALL_SEND_ARG_BY_REF);
		}
	} else if (ARG_SHOULD_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
		ZEND_ADD_CALL_FLAG(EX(call), ZEND_CALL_SEND_ARG_BY_REF);
	} else {
		ZEND_DEL_CALL_FLAG(EX(call), ZEND_CALL_SEND_ARG_BY_REF);
	}
	ZEND_VM_NEXT_OPCODE();
}

static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_CHECK_FUNC_ARG_SPEC_UNUSED_UNUSED_QUICK_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	uint32_t arg_num;

	if (IS_UNUSED == IS_CONST) {
		zend_string *arg_name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
		arg_num = zend_get_arg_offset_by_name(
			EX(call)->func, arg_name, CACHE_ADDR(opline->result.num)) + 1;
		if (UNEXPECTED(arg_num == 0)) {
			/* Treat this as a by-value argument, and throw an error during SEND. */
			ZEND_DEL_CALL_FLAG(EX(call), ZEND_CALL_SEND_ARG_BY_REF);
			ZEND_VM_NEXT_OPCODE();
		}
	} else {
		arg_num = opline->op2.num;
	}

	if (EXPECTED(1)) {
		if (QUICK_ARG_SHOULD_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
			ZEND_ADD_CALL_FLAG(EX(call), ZEND_CALL_SEND_ARG_BY_REF);
		} else {
			ZEND_DEL_CALL_FLAG(EX(call), ZEND_CALL_SEND_ARG_BY_REF);
		}
	} else if (ARG_SHOULD_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
		ZEND_ADD_CALL_FLAG(EX(call), ZEND_CALL_SEND_ARG_BY_REF);
	} else {
		ZEND_DEL_CALL_FLAG(EX(call), ZEND_CALL_SEND_ARG_BY_REF);
	}
	ZEND_VM_NEXT_OPCODE();
}

static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_CHECK_UNDEF_ARGS_SPEC_UNUSED_UNUSED_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE

	zend_execute_data *call = execute_data->call;
	if (EXPECTED(!(ZEND_CALL_INFO(call) & ZEND_CALL_MAY_HAVE_UNDEF))) {
		ZEND_VM_NEXT_OPCODE();
	}

	SAVE_OPLINE();
	zend_handle_undef_args(call);
	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_NEW_SPEC_UNUSED_UNUSED_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *result;
	zend_function *constructor;
	zend_class_entry *ce;
	zend_execute_data *call;

	SAVE_OPLINE();
	if (IS_UNUSED == IS_CONST) {
		ce = CACHED_PTR(opline->op2.num);
		if (UNEXPECTED(ce == NULL)) {
			ce = zend_fetch_class_by_name(Z_STR_P(RT_CONSTANT(opline, opline->op1)), Z_STR_P(RT_CONSTANT(opline, opline->op1) + 1), ZEND_FETCH_CLASS_DEFAULT | ZEND_FETCH_CLASS_EXCEPTION);
			if (UNEXPECTED(ce == NULL)) {
				ZVAL_UNDEF(EX_VAR(opline->result.var));
				HANDLE_EXCEPTION();
			}
			CACHE_PTR(opline->op2.num, ce);
		}
	} else if (IS_UNUSED == IS_UNUSED) {
		ce = zend_fetch_class(NULL, opline->op1.num);
		if (UNEXPECTED(ce == NULL)) {
			ZVAL_UNDEF(EX_VAR(opline->result.var));
			HANDLE_EXCEPTION();
		}
	} else {
		ce = Z_CE_P(EX_VAR(opline->op1.var));
	}

	result = EX_VAR(opline->result.var);
	if (UNEXPECTED(object_init_ex(result, ce) != SUCCESS)) {
		ZVAL_UNDEF(result);
		HANDLE_EXCEPTION();
	}

	constructor = Z_OBJ_HT_P(result)->get_constructor(Z_OBJ_P(result));
	if (constructor == NULL) {
		/* If there are no arguments, skip over the DO_FCALL opcode. We check if the next
		 * opcode is DO_FCALL in case EXT instructions are used. */
		if (EXPECTED(opline->extended_value == 0 && (opline+1)->opcode == ZEND_DO_FCALL)) {
			ZEND_VM_NEXT_OPCODE_EX(1, 2);
		}

		if (UNEXPECTED(EG(exception))) {
			HANDLE_EXCEPTION();
		}

		/* Perform a dummy function call */
		call = zend_vm_stack_push_call_frame(
			ZEND_CALL_FUNCTION, (zend_function *) &zend_pass_function,
			opline->extended_value, NULL);
	} else {
		if (EXPECTED(constructor->type == ZEND_USER_FUNCTION) && UNEXPECTED(!RUN_TIME_CACHE(&constructor->op_array))) {
			init_func_run_time_cache(&constructor->op_array);
		}
		/* We are not handling overloaded classes right now */
		call = zend_vm_stack_push_call_frame(
			ZEND_CALL_FUNCTION | ZEND_CALL_RELEASE_THIS | ZEND_CALL_HAS_THIS,
			constructor,
			opline->extended_value,
			Z_OBJ_P(result));
		Z_ADDREF_P(result);
	}

	call->prev_execute_data = EX(call);
	EX(call) = call;
	ZEND_VM_NEXT_OPCODE();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_INIT_ARRAY_SPEC_UNUSED_UNUSED_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	zval *array;
	uint32_t size;
	USE_OPLINE

	SAVE_OPLINE();
	array = EX_VAR(opline->result.var);
	if (IS_UNUSED != IS_UNUSED) {
		size = opline->extended_value >> ZEND_ARRAY_SIZE_SHIFT;
		ZVAL_ARR(array, zend_new_array(size));
		/* Explicitly initialize array as not-packed if flag is set */
		if (opline->extended_value & ZEND_ARRAY_NOT_PACKED) {
			zend_hash_real_init_mixed(Z_ARRVAL_P(array));
		}
		ZEND_VM_TAIL_CALL(ZEND_NULL_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
	} else {
		ZVAL_ARR(array, zend_new_array(0));
		ZEND_VM_NEXT_OPCODE();
	}
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_YIELD_SPEC_UNUSED_UNUSED_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE

	zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C);

	SAVE_OPLINE();
	if (UNEXPECTED(generator->flags & ZEND_GENERATOR_FORCED_CLOSE)) {
		ZEND_VM_TAIL_CALL(zend_yield_in_closed_generator_helper_SPEC_TAILCALL(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
	}

	/* Destroy the previously yielded value */
	zval_ptr_dtor(&generator->value);

	/* Destroy the previously yielded key */
	zval_ptr_dtor(&generator->key);

	/* Set the new yielded value */
	if (IS_UNUSED != IS_UNUSED) {
		if (UNEXPECTED(EX(func)->op_array.fn_flags & ZEND_ACC_RETURN_REFERENCE)) {
			/* Constants and temporary variables aren't yieldable by reference,
			 * but we still allow them with a notice. */
			if (IS_UNUSED & (IS_CONST|IS_TMP_VAR)) {
				zval *value;

				zend_error(E_NOTICE, "Only variable references should be yielded by reference");

				value = NULL;
				ZVAL_COPY_VALUE(&generator->value, value);
				if (IS_UNUSED == IS_CONST) {
					if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
						Z_ADDREF(generator->value);
					}
				}
			} else {
				zval *value_ptr = NULL;

				/* If a function call result is yielded and the function did
				 * not return by reference we throw a notice. */
				do {
					if (IS_UNUSED == IS_VAR) {
						ZEND_ASSERT(value_ptr != &EG(uninitialized_zval));
						if (opline->extended_value == ZEND_RETURNS_FUNCTION
						 && !Z_ISREF_P(value_ptr)) {
							zend_error(E_NOTICE, "Only variable references should be yielded by reference");
							ZVAL_COPY(&generator->value, value_ptr);
							break;
						}
					}
					if (Z_ISREF_P(value_ptr)) {
						Z_ADDREF_P(value_ptr);
					} else {
						ZVAL_MAKE_REF_EX(value_ptr, 2);
					}
					ZVAL_REF(&generator->value, Z_REF_P(value_ptr));
				} while (0);


			}
		} else {
			zval *value = NULL;

			/* Consts, temporary variables and references need copying */
			if (IS_UNUSED == IS_CONST) {
				ZVAL_COPY_VALUE(&generator->value, value);
				if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
					Z_ADDREF(generator->value);
				}
			} else if (IS_UNUSED == IS_TMP_VAR) {
				ZVAL_COPY_VALUE(&generator->value, value);
			} else if ((IS_UNUSED & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) {
				ZVAL_COPY(&generator->value, Z_REFVAL_P(value));


			} else {
				ZVAL_COPY_VALUE(&generator->value, value);
				if (IS_UNUSED == IS_CV) {
					if (Z_OPT_REFCOUNTED_P(value)) Z_ADDREF_P(value);
				}
			}
		}
	} else {
		/* If no value was specified yield null */
		ZVAL_NULL(&generator->value);
	}

	/* Set the new yielded key */
	if (IS_UNUSED != IS_UNUSED) {
		zval *key = NULL;
		if ((IS_UNUSED & (IS_CV|IS_VAR)) && UNEXPECTED(Z_TYPE_P(key) == IS_REFERENCE)) {
			key = Z_REFVAL_P(key);
		}
		ZVAL_COPY(&generator->key, key);


		if (Z_TYPE(generator->key) == IS_LONG
		    && Z_LVAL(generator->key) > generator->largest_used_integer_key
		) {
			generator->largest_used_integer_key = Z_LVAL(generator->key);
		}
	} else {
		/* If no key was specified we use auto-increment keys */
		generator->largest_used_integer_key++;
		ZVAL_LONG(&generator->key, generator->largest_used_integer_key);
	}

	if (RETURN_VALUE_USED(opline)) {
		/* If the return value of yield is used set the send
		 * target and initialize it to NULL */
		generator->send_target = EX_VAR(opline->result.var);
		ZVAL_NULL(generator->send_target);
	} else {
		generator->send_target = NULL;
	}

	/* The GOTO VM uses a local opline variable. We need to set the opline
	 * variable in execute_data so we don't resume at an old position. */
	SAVE_OPLINE();

	ZEND_VM_RETURN();
}

static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_FETCH_THIS_SPEC_UNUSED_UNUSED_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE

	if (EXPECTED(Z_TYPE(EX(This)) == IS_OBJECT)) {
		zval *result = EX_VAR(opline->result.var);

		ZVAL_OBJ(result, Z_OBJ(EX(This)));
		Z_ADDREF_P(result);
		ZEND_VM_NEXT_OPCODE();
	} else {
		ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC_TAILCALL(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
	}
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_FETCH_GLOBALS_SPEC_UNUSED_UNUSED_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE

	/* For symbol tables we need to deal with exactly the same problems as for property tables. */
	ZVAL_ARR(EX_VAR(opline->result.var),
		zend_proptable_to_symtable(&EG(symbol_table), /* always_duplicate */ 1));
	ZEND_VM_NEXT_OPCODE();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_ISSET_ISEMPTY_THIS_SPEC_UNUSED_UNUSED_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE

	ZVAL_BOOL(EX_VAR(opline->result.var),
		(opline->extended_value & ZEND_ISEMPTY) ^
		 (Z_TYPE(EX(This)) == IS_OBJECT));
	ZEND_VM_NEXT_OPCODE();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_GET_CLASS_SPEC_UNUSED_UNUSED_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE

	if (IS_UNUSED == IS_UNUSED) {
		SAVE_OPLINE();
		if (UNEXPECTED(!EX(func)->common.scope)) {
			zend_throw_error(NULL, "get_class() without arguments must be called from within a class");
			ZVAL_UNDEF(EX_VAR(opline->result.var));
			HANDLE_EXCEPTION();
		} else {
			zend_error(E_DEPRECATED, "Calling get_class() without arguments is deprecated");
			ZVAL_STR_COPY(EX_VAR(opline->result.var), EX(func)->common.scope->name);
			if (UNEXPECTED(EG(exception))) {
				HANDLE_EXCEPTION();
			}
			ZEND_VM_NEXT_OPCODE();
		}
	} else {
		zval *op1;

		SAVE_OPLINE();
		op1 = NULL;
		while (1) {
			if (Z_TYPE_P(op1) == IS_OBJECT) {
				ZVAL_STR_COPY(EX_VAR(opline->result.var), Z_OBJCE_P(op1)->name);
			} else if ((IS_UNUSED & (IS_VAR|IS_CV)) != 0 && Z_TYPE_P(op1) == IS_REFERENCE) {
				op1 = Z_REFVAL_P(op1);
				continue;
			} else {
				if (IS_UNUSED == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
					ZVAL_UNDEFINED_OP1();
				}
				zend_type_error("get_class(): Argument #1 ($object) must be of type object, %s given", zend_zval_value_name(op1));
				ZVAL_UNDEF(EX_VAR(opline->result.var));
			}
			break;
		}


		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
	}
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_GET_CALLED_CLASS_SPEC_UNUSED_UNUSED_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE

	if (Z_TYPE(EX(This)) == IS_OBJECT) {
		ZVAL_STR_COPY(EX_VAR(opline->result.var), Z_OBJCE(EX(This))->name);
	} else if (Z_CE(EX(This))) {
		ZVAL_STR_COPY(EX_VAR(opline->result.var), Z_CE(EX(This))->name);
	} else {
		ZEND_ASSERT(!EX(func)->common.scope);
		SAVE_OPLINE();
		zend_throw_error(NULL, "get_called_class() must be called from within a class");
		ZVAL_UNDEF(EX_VAR(opline->result.var));
		HANDLE_EXCEPTION();
	}
	ZEND_VM_NEXT_OPCODE();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_FUNC_NUM_ARGS_SPEC_UNUSED_UNUSED_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE

	ZVAL_LONG(EX_VAR(opline->result.var), EX_NUM_ARGS());
	ZEND_VM_NEXT_OPCODE();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_FUNC_GET_ARGS_SPEC_UNUSED_UNUSED_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zend_array *ht;
	uint32_t arg_count, result_size, skip;

	arg_count = EX_NUM_ARGS();
	if (IS_UNUSED == IS_CONST) {
		skip = Z_LVAL_P(RT_CONSTANT(opline, opline->op1));
		if (arg_count < skip) {
			result_size = 0;
		} else {
			result_size = arg_count - skip;
		}
	} else {
		skip = 0;
		result_size = arg_count;
	}

	if (result_size) {
		SAVE_OPLINE();
		uint32_t first_extra_arg = EX(func)->op_array.num_args;

		ht = zend_new_array(result_size);
		ZVAL_ARR(EX_VAR(opline->result.var), ht);
		zend_hash_real_init_packed(ht);
		ZEND_HASH_FILL_PACKED(ht) {
			zval *p, *q;
			uint32_t i = skip;
			p = EX_VAR_NUM(i);
			if (arg_count > first_extra_arg) {
				while (i < first_extra_arg) {
					q = p;
					if (EXPECTED(Z_TYPE_INFO_P(q) != IS_UNDEF)) {
						ZVAL_DEREF(q);
						if (Z_OPT_REFCOUNTED_P(q)) {
							Z_ADDREF_P(q);
						}
						ZEND_HASH_FILL_SET(q);
					} else {
						ZEND_HASH_FILL_SET_NULL();
					}
					ZEND_HASH_FILL_NEXT();
					p++;
					i++;
				}
				if (skip < first_extra_arg) {
					skip = 0;
				} else {
					skip -= first_extra_arg;
				}
				p = EX_VAR_NUM(EX(func)->op_array.last_var + EX(func)->op_array.T + skip);
			}
			while (i < arg_count) {
				q = p;
				if (EXPECTED(Z_TYPE_INFO_P(q) != IS_UNDEF)) {
					ZVAL_DEREF(q);
					if (Z_OPT_REFCOUNTED_P(q)) {
						Z_ADDREF_P(q);
					}
					ZEND_HASH_FILL_SET(q);
				} else {
					ZEND_HASH_FILL_SET_NULL();
				}
				ZEND_HASH_FILL_NEXT();
				p++;
				i++;
			}
		} ZEND_HASH_FILL_END();
		ht->nNumOfElements = result_size;
	} else {
		ZVAL_EMPTY_ARRAY(EX_VAR(opline->result.var));
	}
	ZEND_VM_NEXT_OPCODE();
}

/* Contrary to what its name indicates, ZEND_COPY_TMP may receive and define references. */
static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_CALLABLE_CONVERT_SPEC_UNUSED_UNUSED_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zend_execute_data *call = EX(call);

	zend_closure_from_frame(EX_VAR(opline->result.var), call);

	if (ZEND_CALL_INFO(call) & ZEND_CALL_RELEASE_THIS) {
		OBJ_RELEASE(Z_OBJ(call->This));
	}

	EX(call) = call->prev_execute_data;

	zend_vm_stack_free_call_frame(call);

	ZEND_VM_NEXT_OPCODE();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_FRAMELESS_ICALL_0_SPEC_UNUSED_UNUSED_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	SAVE_OPLINE();

	zval *result = EX_VAR(opline->result.var);
	ZVAL_NULL(result);

#if 0 || 0
	if (0 && UNEXPECTED(zend_observer_handler_is_unobserved(ZEND_OBSERVER_DATA(ZEND_FLF_FUNC(opline))) == false)) {
		zend_frameless_observed_call(execute_data);
	} else
#endif
	{
		zend_frameless_function_0 function = (zend_frameless_function_0)ZEND_FLF_HANDLER(opline);
		function(EX_VAR(opline->result.var));
	}
	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_FRAMELESS_ICALL_0_SPEC_OBSERVER_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	SAVE_OPLINE();

	zval *result = EX_VAR(opline->result.var);
	ZVAL_NULL(result);

#if 0 || 1
	if (1 && UNEXPECTED(zend_observer_handler_is_unobserved(ZEND_OBSERVER_DATA(ZEND_FLF_FUNC(opline))) == false)) {
		zend_frameless_observed_call(execute_data);
	} else
#endif
	{
		zend_frameless_function_0 function = (zend_frameless_function_0)ZEND_FLF_HANDLER(opline);
		function(EX_VAR(opline->result.var));
	}
	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_ASSIGN_OBJ_OP_SPEC_UNUSED_CV_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *object;
	zval *property;
	zval *value;
	zval *zptr;
	void *_cache_slot[3] = {0};
	void **cache_slot;
	zend_property_info *prop_info;
	zend_object *zobj;
	zend_string *name, *tmp_name;

	SAVE_OPLINE();
	object = &EX(This);
	property = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);

	do {
		value = get_op_data_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1);

		if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
			if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
				object = Z_REFVAL_P(object);
				goto assign_op_object;
			}
			if (IS_UNUSED == IS_CV
			 && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
				ZVAL_UNDEFINED_OP1();
			}
			zend_throw_non_object_error(object, property OPLINE_CC EXECUTE_DATA_CC);
			break;
		}

assign_op_object:
		/* here we are sure we are dealing with an object */
		zobj = Z_OBJ_P(object);
		if (IS_CV == IS_CONST) {
			name = Z_STR_P(property);
		} else {
			name = zval_try_get_tmp_string(property, &tmp_name);
			if (UNEXPECTED(!name)) {
				UNDEF_RESULT();
				break;
			}
		}
		cache_slot = (IS_CV == IS_CONST) ? CACHE_ADDR((opline+1)->extended_value) : _cache_slot;
		if (EXPECTED((zptr = zobj->handlers->get_property_ptr_ptr(zobj, name, BP_VAR_RW, cache_slot)) != NULL)) {
			if (UNEXPECTED(Z_ISERROR_P(zptr))) {
				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
					ZVAL_NULL(EX_VAR(opline->result.var));
				}
			} else {
				zend_reference *ref;

				do {
					if (UNEXPECTED(Z_ISREF_P(zptr))) {
						ref = Z_REF_P(zptr);
						zptr = Z_REFVAL_P(zptr);
						if (UNEXPECTED(ZEND_REF_HAS_TYPE_SOURCES(ref))) {
							zend_binary_assign_op_typed_ref(ref, value OPLINE_CC EXECUTE_DATA_CC);
							break;
						}
					}

					prop_info = (zend_property_info*)CACHED_PTR_EX(cache_slot + 2);
					if (prop_info && ZEND_TYPE_IS_SET(prop_info->type)) {
						/* special case for typed properties */
						zend_binary_assign_op_typed_prop(prop_info, zptr, value OPLINE_CC EXECUTE_DATA_CC);
					} else {
						zend_binary_op(zptr, zptr, value OPLINE_CC);
					}
				} while (0);

				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
					ZVAL_COPY(EX_VAR(opline->result.var), zptr);
				}
			}
		} else {
			zend_assign_op_overloaded_property(zobj, name, cache_slot, value OPLINE_CC EXECUTE_DATA_CC);
		}
		if (IS_CV != IS_CONST) {
			zend_tmp_string_release(tmp_name);
		}
	} while (0);

	FREE_OP((opline+1)->op1_type, (opline+1)->op1.var);




	/* assign_obj has two opcodes! */
	ZEND_VM_NEXT_OPCODE_EX(1, 2);
}

/* No specialization for op_types (CONST|TMP|VAR|CV, UNUSED|CONST|TMPVAR) */
static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_PRE_INC_OBJ_SPEC_UNUSED_CV_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *object;
	zval *property;
	zval *zptr;
	void *_cache_slot[3] = {0};
	void **cache_slot;
	zend_property_info *prop_info;
	zend_object *zobj;
	zend_string *name, *tmp_name;

	SAVE_OPLINE();
	object = &EX(This);
	property = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);

	do {
		if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
			if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
				object = Z_REFVAL_P(object);
				goto pre_incdec_object;
			}
			if (IS_UNUSED == IS_CV
			 && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
				ZVAL_UNDEFINED_OP1();
			}
			zend_throw_non_object_error(object, property OPLINE_CC EXECUTE_DATA_CC);
			break;
		}

pre_incdec_object:
		/* here we are sure we are dealing with an object */
		zobj = Z_OBJ_P(object);
		if (IS_CV == IS_CONST) {
			name = Z_STR_P(property);
		} else {
			name = zval_try_get_tmp_string(property, &tmp_name);
			if (UNEXPECTED(!name)) {
				UNDEF_RESULT();
				break;
			}
		}
		cache_slot = (IS_CV == IS_CONST) ? CACHE_ADDR(opline->extended_value) : _cache_slot;
		if (EXPECTED((zptr = zobj->handlers->get_property_ptr_ptr(zobj, name, BP_VAR_RW, cache_slot)) != NULL)) {
			if (UNEXPECTED(Z_ISERROR_P(zptr))) {
				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
					ZVAL_NULL(EX_VAR(opline->result.var));
				}
			} else {
				prop_info = (zend_property_info *) CACHED_PTR_EX(cache_slot + 2);
				zend_pre_incdec_property_zval(zptr,
					prop_info && ZEND_TYPE_IS_SET(prop_info->type) ? prop_info : NULL OPLINE_CC EXECUTE_DATA_CC);
			}
		} else {
			zend_pre_incdec_overloaded_property(zobj, name, cache_slot OPLINE_CC EXECUTE_DATA_CC);
		}
		if (IS_CV != IS_CONST) {
			zend_tmp_string_release(tmp_name);
		}
	} while (0);




	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_POST_INC_OBJ_SPEC_UNUSED_CV_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *object;
	zval *property;
	zval *zptr;
	void *_cache_slot[3] = {0};
	void **cache_slot;
	zend_property_info *prop_info;
	zend_object *zobj;
	zend_string *name, *tmp_name;

	SAVE_OPLINE();
	object = &EX(This);
	property = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);

	do {
		if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
			if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
				object = Z_REFVAL_P(object);
				goto post_incdec_object;
			}
			if (IS_UNUSED == IS_CV
			 && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
				ZVAL_UNDEFINED_OP1();
			}
			zend_throw_non_object_error(object, property OPLINE_CC EXECUTE_DATA_CC);
			break;
		}

post_incdec_object:
		/* here we are sure we are dealing with an object */
		zobj = Z_OBJ_P(object);
		if (IS_CV == IS_CONST) {
			name = Z_STR_P(property);
		} else {
			name = zval_try_get_tmp_string(property, &tmp_name);
			if (UNEXPECTED(!name)) {
				ZVAL_UNDEF(EX_VAR(opline->result.var));
				break;
			}
		}
		cache_slot = (IS_CV == IS_CONST) ? CACHE_ADDR(opline->extended_value) : _cache_slot;
		if (EXPECTED((zptr = zobj->handlers->get_property_ptr_ptr(zobj, name, BP_VAR_RW, cache_slot)) != NULL)) {
			if (UNEXPECTED(Z_ISERROR_P(zptr))) {
				ZVAL_NULL(EX_VAR(opline->result.var));
			} else {
				prop_info = (zend_property_info*)CACHED_PTR_EX(cache_slot + 2);
				zend_post_incdec_property_zval(zptr,
					prop_info && ZEND_TYPE_IS_SET(prop_info->type) ? prop_info : NULL OPLINE_CC EXECUTE_DATA_CC);
			}
		} else {
			zend_post_incdec_overloaded_property(zobj, name, cache_slot OPLINE_CC EXECUTE_DATA_CC);
		}
		if (IS_CV != IS_CONST) {
			zend_tmp_string_release(tmp_name);
		}
	} while (0);




	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_FETCH_OBJ_R_SPEC_UNUSED_CV_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *container;
	void **cache_slot = NULL;

	SAVE_OPLINE();
	container = &EX(This);

	if (IS_UNUSED == IS_CONST ||
	    (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
		do {
			if ((IS_UNUSED & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
				container = Z_REFVAL_P(container);
				if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
					break;
				}
			}
			if (IS_UNUSED == IS_CV && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
				ZVAL_UNDEFINED_OP1();
			}
			zend_wrong_property_read(container, _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC));
			ZVAL_NULL(EX_VAR(opline->result.var));
			goto fetch_obj_r_finish;
		} while (0);
	}

	/* here we are sure we are dealing with an object */
	do {
		zend_object *zobj = Z_OBJ_P(container);
		zend_string *name, *tmp_name;
		zval *retval;

		if (IS_CV == IS_CONST) {
			cache_slot = CACHE_ADDR(opline->extended_value & ~ZEND_FETCH_REF /* FUNC_ARG fetch may contain it */);

			if (EXPECTED(zobj->ce == CACHED_PTR_EX(cache_slot))) {
				uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);

				if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
fetch_obj_r_simple:
					retval = OBJ_PROP(zobj, prop_offset);
					if (EXPECTED(Z_TYPE_INFO_P(retval) != IS_UNDEF)) {
						if (0 || (IS_UNUSED & (IS_TMP_VAR|IS_VAR)) != 0) {
							goto fetch_obj_r_copy;
						} else {
fetch_obj_r_fast_copy:
							ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
							ZEND_VM_NEXT_OPCODE();
						}
					}
				} else if (UNEXPECTED(IS_HOOKED_PROPERTY_OFFSET(prop_offset))) {
					zend_property_info *prop_info = CACHED_PTR_EX(cache_slot + 2);
					if (ZEND_IS_PROPERTY_HOOK_SIMPLE_READ(prop_offset)) {
						prop_offset = prop_info->offset;
						goto fetch_obj_r_simple;
					} else if (EXPECTED(ZEND_IS_PROPERTY_HOOK_SIMPLE_GET(prop_offset))) {
						zend_function *hook = prop_info->hooks[ZEND_PROPERTY_HOOK_GET];
						ZEND_ASSERT(hook->type == ZEND_USER_FUNCTION);
						ZEND_ASSERT(RUN_TIME_CACHE(&hook->op_array));

						uint32_t call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_HAS_THIS;
						if (IS_UNUSED & IS_CV) {
							GC_ADDREF(zobj);
						}
						if (IS_UNUSED & (IS_CV|IS_VAR|IS_TMP_VAR)) {
							call_info |= ZEND_CALL_RELEASE_THIS;
						}
						zend_execute_data *call = zend_vm_stack_push_call_frame(call_info, hook, 0, zobj);
						call->prev_execute_data = execute_data;
						call->call = NULL;
						call->return_value = EX_VAR(opline->result.var);
						call->run_time_cache = RUN_TIME_CACHE(&hook->op_array);

						execute_data = call;
						EG(current_execute_data) = execute_data;
						zend_init_cvs(0, hook->op_array.last_var EXECUTE_DATA_CC);

#if defined(ZEND_VM_IP_GLOBAL_REG) && ((ZEND_VM_KIND == ZEND_VM_KIND_CALL) || (ZEND_VM_KIND == ZEND_VM_KIND_HYBRID))
						opline = hook->op_array.opcodes;
#else
						EX(opline) = hook->op_array.opcodes;
#endif
						LOAD_OPLINE_EX();




						ZEND_VM_ENTER_EX();
					}
					/* Fall through to read_property for hooks. */
				} else if (EXPECTED(zobj->properties != NULL)) {
					ZEND_ASSERT(IS_DYNAMIC_PROPERTY_OFFSET(prop_offset));
					name = Z_STR_P(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC));
					if (!IS_UNKNOWN_DYNAMIC_PROPERTY_OFFSET(prop_offset)) {
						uintptr_t idx = ZEND_DECODE_DYN_PROP_OFFSET(prop_offset);

						if (EXPECTED(idx < zobj->properties->nNumUsed * sizeof(Bucket))) {
							Bucket *p = (Bucket*)((char*)zobj->properties->arData + idx);

							if (EXPECTED(p->key == name) ||
							    (EXPECTED(p->h == ZSTR_H(name)) &&
							     EXPECTED(p->key != NULL) &&
							     EXPECTED(zend_string_equal_content(p->key, name)))) {
								retval = &p->val;
								if (0 || (IS_UNUSED & (IS_TMP_VAR|IS_VAR)) != 0) {
									goto fetch_obj_r_copy;
								} else {
									goto fetch_obj_r_fast_copy;
								}
							}
						}
						CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_DYNAMIC_PROPERTY_OFFSET);
					}
					retval = zend_hash_find_known_hash(zobj->properties, name);
					if (EXPECTED(retval)) {
						uintptr_t idx = (char*)retval - (char*)zobj->properties->arData;
						CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_ENCODE_DYN_PROP_OFFSET(idx));
						if (0 || (IS_UNUSED & (IS_TMP_VAR|IS_VAR)) != 0) {
							goto fetch_obj_r_copy;
						} else {
							goto fetch_obj_r_fast_copy;
						}
					}
				}
			}
			name = Z_STR_P(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC));
		} else {
			name = zval_try_get_tmp_string(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC), &tmp_name);
			if (UNEXPECTED(!name)) {
				ZVAL_UNDEF(EX_VAR(opline->result.var));
				break;
			}
		}

#if ZEND_DEBUG
		/* For non-standard object handlers, verify a declared property type in debug builds.
		 * Fetch prop_info before calling read_property(), as it may deallocate the object. */
		zend_property_info *prop_info = NULL;
		if (zobj->handlers->read_property != zend_std_read_property) {
			prop_info = zend_get_property_info(zobj->ce, name, /* silent */ true);
		}
#endif
		retval = zobj->handlers->read_property(zobj, name, BP_VAR_R, cache_slot, EX_VAR(opline->result.var));
#if ZEND_DEBUG
		if (!EG(exception) && prop_info && prop_info != ZEND_WRONG_PROPERTY_INFO
				&& ZEND_TYPE_IS_SET(prop_info->type)) {
			ZVAL_OPT_DEREF(retval);
			zend_verify_property_type(prop_info, retval, /* strict */ true);
		}
#endif

		if (IS_CV != IS_CONST) {
			zend_tmp_string_release(tmp_name);
		}

		if (retval != EX_VAR(opline->result.var)) {
fetch_obj_r_copy:
			ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
		} else if (UNEXPECTED(Z_ISREF_P(retval))) {
			zend_unwrap_reference(retval);
		}
	} while (0);

fetch_obj_r_finish:




	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_FETCH_OBJ_W_SPEC_UNUSED_CV_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *property, *container, *result;

	SAVE_OPLINE();

	container = &EX(This);
	property = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
	result = EX_VAR(opline->result.var);
	zend_fetch_property_address(
		result, container, IS_UNUSED, property, IS_CV,
		((IS_CV == IS_CONST) ? CACHE_ADDR(opline->extended_value & ~ZEND_FETCH_OBJ_FLAGS) : NULL),
		BP_VAR_W, opline->extended_value, NULL OPLINE_CC EXECUTE_DATA_CC);


	if (IS_UNUSED == IS_VAR) {
		FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
	}
	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_FETCH_OBJ_RW_SPEC_UNUSED_CV_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *property, *container, *result;

	SAVE_OPLINE();
	container = &EX(This);
	property = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
	result = EX_VAR(opline->result.var);
	zend_fetch_property_address(result, container, IS_UNUSED, property, IS_CV, ((IS_CV == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL), BP_VAR_RW, 0, NULL OPLINE_CC EXECUTE_DATA_CC);


	if (IS_UNUSED == IS_VAR) {
		FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
	}
	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_FETCH_OBJ_IS_SPEC_UNUSED_CV_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *container;
	void **cache_slot = NULL;

	SAVE_OPLINE();
	container = &EX(This);

	if (IS_UNUSED == IS_CONST ||
	    (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
		do {
			if ((IS_UNUSED & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
				container = Z_REFVAL_P(container);
				if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
					break;
				}
			}
			if (IS_CV == IS_CV && Z_TYPE_P(EX_VAR(opline->op2.var)) == IS_UNDEF) {
				ZVAL_UNDEFINED_OP2();
			}
			ZVAL_NULL(EX_VAR(opline->result.var));
			goto fetch_obj_is_finish;
		} while (0);
	}

	/* here we are sure we are dealing with an object */
	do {
		zend_object *zobj = Z_OBJ_P(container);
		zend_string *name, *tmp_name;
		zval *retval;

		if (IS_CV == IS_CONST) {
			cache_slot = CACHE_ADDR(opline->extended_value);

			if (EXPECTED(zobj->ce == CACHED_PTR_EX(cache_slot))) {
				uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);

				if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
fetch_obj_is_simple:
					retval = OBJ_PROP(zobj, prop_offset);
					if (EXPECTED(Z_TYPE_P(retval) != IS_UNDEF)) {
						if (0 || (IS_UNUSED & (IS_TMP_VAR|IS_VAR)) != 0) {
							goto fetch_obj_is_copy;
						} else {
fetch_obj_is_fast_copy:
							ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
							ZEND_VM_NEXT_OPCODE();
						}
					}
				} else if (UNEXPECTED(IS_HOOKED_PROPERTY_OFFSET(prop_offset))) {
					if (ZEND_IS_PROPERTY_HOOK_SIMPLE_READ(prop_offset)) {
						zend_property_info *prop_info = CACHED_PTR_EX(cache_slot + 2);
						prop_offset = prop_info->offset;
						goto fetch_obj_is_simple;
					}
					/* Fall through to read_property for hooks. */
				} else if (EXPECTED(zobj->properties != NULL)) {
					ZEND_ASSERT(IS_DYNAMIC_PROPERTY_OFFSET(prop_offset));
					name = Z_STR_P(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC));
					if (!IS_UNKNOWN_DYNAMIC_PROPERTY_OFFSET(prop_offset)) {
						uintptr_t idx = ZEND_DECODE_DYN_PROP_OFFSET(prop_offset);

						if (EXPECTED(idx < zobj->properties->nNumUsed * sizeof(Bucket))) {
							Bucket *p = (Bucket*)((char*)zobj->properties->arData + idx);

							if (EXPECTED(p->key == name) ||
							    (EXPECTED(p->h == ZSTR_H(name)) &&
							     EXPECTED(p->key != NULL) &&
							     EXPECTED(zend_string_equal_content(p->key, name)))) {
								retval = &p->val;
								if (0 || (IS_UNUSED & (IS_TMP_VAR|IS_VAR)) != 0) {
									goto fetch_obj_is_copy;
								} else {
									goto fetch_obj_is_fast_copy;
								}
							}
						}
						CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_DYNAMIC_PROPERTY_OFFSET);
					}
					retval = zend_hash_find_known_hash(zobj->properties, name);
					if (EXPECTED(retval)) {
						uintptr_t idx = (char*)retval - (char*)zobj->properties->arData;
						CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_ENCODE_DYN_PROP_OFFSET(idx));
						if (0 || (IS_UNUSED & (IS_TMP_VAR|IS_VAR)) != 0) {
							goto fetch_obj_is_copy;
						} else {
							goto fetch_obj_is_fast_copy;
						}
					}
				}
			}
			name = Z_STR_P(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC));
		} else {
			name = zval_try_get_tmp_string(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC), &tmp_name);
			if (UNEXPECTED(!name)) {
				ZVAL_UNDEF(EX_VAR(opline->result.var));
				break;
			}
		}

		retval = zobj->handlers->read_property(zobj, name, BP_VAR_IS, cache_slot, EX_VAR(opline->result.var));

		if (IS_CV != IS_CONST) {
			zend_tmp_string_release(tmp_name);
		}

		if (retval != EX_VAR(opline->result.var)) {
fetch_obj_is_copy:
			ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
		} else if (UNEXPECTED(Z_ISREF_P(retval))) {
			zend_unwrap_reference(retval);
		}
	} while (0);

fetch_obj_is_finish:




	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_FETCH_OBJ_FUNC_ARG_SPEC_UNUSED_CV_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
#if 0
	USE_OPLINE
#endif

	if (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) {
		/* Behave like FETCH_OBJ_W */
		if ((IS_UNUSED & (IS_CONST|IS_TMP_VAR))) {
			ZEND_VM_TAIL_CALL(zend_use_tmp_in_write_context_helper_SPEC_TAILCALL(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
		}
		ZEND_VM_TAIL_CALL(ZEND_FETCH_OBJ_W_SPEC_UNUSED_CV_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
	} else {
		ZEND_VM_TAIL_CALL(ZEND_FETCH_OBJ_R_SPEC_UNUSED_CV_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
	}
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_FETCH_OBJ_UNSET_SPEC_UNUSED_CV_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *container, *property, *result;

	SAVE_OPLINE();
	container = &EX(This);
	property = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
	result = EX_VAR(opline->result.var);
	zend_fetch_property_address(result, container, IS_UNUSED, property, IS_CV, ((IS_CV == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL), BP_VAR_UNSET, 0, NULL OPLINE_CC EXECUTE_DATA_CC);


	if (IS_UNUSED == IS_VAR) {
		FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
	}
	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_ASSIGN_OBJ_SPEC_UNUSED_CV_OP_DATA_CONST_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *object, *value, tmp;
	zend_object *zobj;
	zend_string *name, *tmp_name;
	zend_refcounted *garbage = NULL;

	SAVE_OPLINE();
	object = &EX(This);
	value = RT_CONSTANT((opline+1), (opline+1)->op1);

	if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
		if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
			object = Z_REFVAL_P(object);
			goto assign_object;
		}
		zend_throw_non_object_error(object, _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC) OPLINE_CC EXECUTE_DATA_CC);
		value = &EG(uninitialized_zval);
		goto free_and_exit_assign_obj;
	}

assign_object:
	zobj = Z_OBJ_P(object);
	if (IS_CV == IS_CONST) {
		if (EXPECTED(zobj->ce == CACHED_PTR(opline->extended_value))) {
			void **cache_slot = CACHE_ADDR(opline->extended_value);
			uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
			zval *property_val;
			zend_property_info *prop_info;

			if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
				prop_info = (zend_property_info*) CACHED_PTR_EX(cache_slot + 2);

assign_obj_simple:
				property_val = OBJ_PROP(zobj, prop_offset);
				if (Z_TYPE_P(property_val) != IS_UNDEF) {
					if (prop_info != NULL) {
						value = zend_assign_to_typed_prop(prop_info, property_val, value, &garbage EXECUTE_DATA_CC);
						goto free_and_exit_assign_obj;
					} else {
fast_assign_obj:
						value = zend_assign_to_variable_ex(property_val, value, IS_CONST, EX_USES_STRICT_TYPES(), &garbage);
						if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
							ZVAL_COPY(EX_VAR(opline->result.var), value);
						}
						goto exit_assign_obj;
					}
				}
			} else if (EXPECTED(IS_DYNAMIC_PROPERTY_OFFSET(prop_offset))) {
				name = Z_STR_P(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC));
				if (UNEXPECTED(zend_lazy_object_must_init(zobj))) {
					zobj = zend_lazy_object_init(zobj);
					if (!zobj) {
						value = &EG(uninitialized_zval);
						goto free_and_exit_assign_obj;
					}
				}
				if (!zobj->ce->__set && (zobj->ce->ce_flags & ZEND_ACC_ALLOW_DYNAMIC_PROPERTIES)) {
					rebuild_object_properties_internal(zobj);
				}
				if (EXPECTED(zobj->properties != NULL)) {
					if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
						if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
							GC_DELREF(zobj->properties);
						}
						zobj->properties = zend_array_dup(zobj->properties);
					}
					property_val = zend_hash_find_known_hash(zobj->properties, name);
					if (property_val) {
						goto fast_assign_obj;
					}
				}

				if (!zobj->ce->__set && (zobj->ce->ce_flags & ZEND_ACC_ALLOW_DYNAMIC_PROPERTIES)) {
					if (IS_CONST == IS_CONST) {
						if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
							Z_ADDREF_P(value);
						}
					} else if (IS_CONST != IS_TMP_VAR) {
						if (Z_ISREF_P(value)) {
							if (IS_CONST == IS_VAR) {
								zend_reference *ref = Z_REF_P(value);
								if (GC_DELREF(ref) == 0) {
									ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
									efree_size(ref, sizeof(zend_reference));
									value = &tmp;
								} else {
									value = Z_REFVAL_P(value);
									Z_TRY_ADDREF_P(value);
								}
							} else {
								value = Z_REFVAL_P(value);
								Z_TRY_ADDREF_P(value);
							}
						} else if (IS_CONST == IS_CV) {
							Z_TRY_ADDREF_P(value);
						}
					}
					zend_hash_add_new(zobj->properties, name, value);
					if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
						ZVAL_COPY(EX_VAR(opline->result.var), value);
					}
					goto exit_assign_obj;
				}
			} else {
				ZEND_ASSERT(IS_HOOKED_PROPERTY_OFFSET(prop_offset));
				if (ZEND_IS_PROPERTY_HOOK_SIMPLE_WRITE(prop_offset)) {
					prop_info = CACHED_PTR_EX(cache_slot + 2);
					prop_offset = prop_info->offset;
					if (!ZEND_TYPE_IS_SET(prop_info->type)) {
						prop_info = NULL;
					}
					goto assign_obj_simple;
				}
				/* Fall through to write_property for hooks. */
			}
		}
		name = Z_STR_P(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC));
	} else {
		name = zval_try_get_tmp_string(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC), &tmp_name);
		if (UNEXPECTED(!name)) {


			UNDEF_RESULT();
			goto exit_assign_obj;
		}
	}

	if (IS_CONST == IS_CV || IS_CONST == IS_VAR) {
		ZVAL_DEREF(value);
	}

	value = zobj->handlers->write_property(zobj, name, value, (IS_CV == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);

	if (IS_CV != IS_CONST) {
		zend_tmp_string_release(tmp_name);
	}

free_and_exit_assign_obj:
	if (UNEXPECTED(RETURN_VALUE_USED(opline)) && value) {
		ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
	}


exit_assign_obj:
	if (garbage) {
		GC_DTOR_NO_REF(garbage);
	}




	/* assign_obj has two opcodes! */
	ZEND_VM_NEXT_OPCODE_EX(1, 2);
}

/* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CONST|VAR) */
static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_ASSIGN_OBJ_SPEC_UNUSED_CV_OP_DATA_TMP_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *object, *value, tmp;
	zend_object *zobj;
	zend_string *name, *tmp_name;
	zend_refcounted *garbage = NULL;

	SAVE_OPLINE();
	object = &EX(This);
	value = _get_zval_ptr_tmp((opline+1)->op1.var EXECUTE_DATA_CC);

	if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
		if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
			object = Z_REFVAL_P(object);
			goto assign_object;
		}
		zend_throw_non_object_error(object, _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC) OPLINE_CC EXECUTE_DATA_CC);
		value = &EG(uninitialized_zval);
		goto free_and_exit_assign_obj;
	}

assign_object:
	zobj = Z_OBJ_P(object);
	if (IS_CV == IS_CONST) {
		if (EXPECTED(zobj->ce == CACHED_PTR(opline->extended_value))) {
			void **cache_slot = CACHE_ADDR(opline->extended_value);
			uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
			zval *property_val;
			zend_property_info *prop_info;

			if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
				prop_info = (zend_property_info*) CACHED_PTR_EX(cache_slot + 2);

assign_obj_simple:
				property_val = OBJ_PROP(zobj, prop_offset);
				if (Z_TYPE_P(property_val) != IS_UNDEF) {
					if (prop_info != NULL) {
						value = zend_assign_to_typed_prop(prop_info, property_val, value, &garbage EXECUTE_DATA_CC);
						goto free_and_exit_assign_obj;
					} else {
fast_assign_obj:
						value = zend_assign_to_variable_ex(property_val, value, IS_TMP_VAR, EX_USES_STRICT_TYPES(), &garbage);
						if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
							ZVAL_COPY(EX_VAR(opline->result.var), value);
						}
						goto exit_assign_obj;
					}
				}
			} else if (EXPECTED(IS_DYNAMIC_PROPERTY_OFFSET(prop_offset))) {
				name = Z_STR_P(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC));
				if (UNEXPECTED(zend_lazy_object_must_init(zobj))) {
					zobj = zend_lazy_object_init(zobj);
					if (!zobj) {
						value = &EG(uninitialized_zval);
						goto free_and_exit_assign_obj;
					}
				}
				if (!zobj->ce->__set && (zobj->ce->ce_flags & ZEND_ACC_ALLOW_DYNAMIC_PROPERTIES)) {
					rebuild_object_properties_internal(zobj);
				}
				if (EXPECTED(zobj->properties != NULL)) {
					if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
						if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
							GC_DELREF(zobj->properties);
						}
						zobj->properties = zend_array_dup(zobj->properties);
					}
					property_val = zend_hash_find_known_hash(zobj->properties, name);
					if (property_val) {
						goto fast_assign_obj;
					}
				}

				if (!zobj->ce->__set && (zobj->ce->ce_flags & ZEND_ACC_ALLOW_DYNAMIC_PROPERTIES)) {
					if (IS_TMP_VAR == IS_CONST) {
						if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
							Z_ADDREF_P(value);
						}
					} else if (IS_TMP_VAR != IS_TMP_VAR) {
						if (Z_ISREF_P(value)) {
							if (IS_TMP_VAR == IS_VAR) {
								zend_reference *ref = Z_REF_P(value);
								if (GC_DELREF(ref) == 0) {
									ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
									efree_size(ref, sizeof(zend_reference));
									value = &tmp;
								} else {
									value = Z_REFVAL_P(value);
									Z_TRY_ADDREF_P(value);
								}
							} else {
								value = Z_REFVAL_P(value);
								Z_TRY_ADDREF_P(value);
							}
						} else if (IS_TMP_VAR == IS_CV) {
							Z_TRY_ADDREF_P(value);
						}
					}
					zend_hash_add_new(zobj->properties, name, value);
					if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
						ZVAL_COPY(EX_VAR(opline->result.var), value);
					}
					goto exit_assign_obj;
				}
			} else {
				ZEND_ASSERT(IS_HOOKED_PROPERTY_OFFSET(prop_offset));
				if (ZEND_IS_PROPERTY_HOOK_SIMPLE_WRITE(prop_offset)) {
					prop_info = CACHED_PTR_EX(cache_slot + 2);
					prop_offset = prop_info->offset;
					if (!ZEND_TYPE_IS_SET(prop_info->type)) {
						prop_info = NULL;
					}
					goto assign_obj_simple;
				}
				/* Fall through to write_property for hooks. */
			}
		}
		name = Z_STR_P(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC));
	} else {
		name = zval_try_get_tmp_string(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC), &tmp_name);
		if (UNEXPECTED(!name)) {
			zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
			UNDEF_RESULT();
			goto exit_assign_obj;
		}
	}

	if (IS_TMP_VAR == IS_CV || IS_TMP_VAR == IS_VAR) {
		ZVAL_DEREF(value);
	}

	value = zobj->handlers->write_property(zobj, name, value, (IS_CV == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);

	if (IS_CV != IS_CONST) {
		zend_tmp_string_release(tmp_name);
	}

free_and_exit_assign_obj:
	if (UNEXPECTED(RETURN_VALUE_USED(opline)) && value) {
		ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
	}
	zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
exit_assign_obj:
	if (garbage) {
		GC_DTOR_NO_REF(garbage);
	}




	/* assign_obj has two opcodes! */
	ZEND_VM_NEXT_OPCODE_EX(1, 2);
}

/* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CONST|VAR) */
static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_ASSIGN_OBJ_SPEC_UNUSED_CV_OP_DATA_VAR_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *object, *value, tmp;
	zend_object *zobj;
	zend_string *name, *tmp_name;
	zend_refcounted *garbage = NULL;

	SAVE_OPLINE();
	object = &EX(This);
	value = _get_zval_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);

	if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
		if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
			object = Z_REFVAL_P(object);
			goto assign_object;
		}
		zend_throw_non_object_error(object, _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC) OPLINE_CC EXECUTE_DATA_CC);
		value = &EG(uninitialized_zval);
		goto free_and_exit_assign_obj;
	}

assign_object:
	zobj = Z_OBJ_P(object);
	if (IS_CV == IS_CONST) {
		if (EXPECTED(zobj->ce == CACHED_PTR(opline->extended_value))) {
			void **cache_slot = CACHE_ADDR(opline->extended_value);
			uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
			zval *property_val;
			zend_property_info *prop_info;

			if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
				prop_info = (zend_property_info*) CACHED_PTR_EX(cache_slot + 2);

assign_obj_simple:
				property_val = OBJ_PROP(zobj, prop_offset);
				if (Z_TYPE_P(property_val) != IS_UNDEF) {
					if (prop_info != NULL) {
						value = zend_assign_to_typed_prop(prop_info, property_val, value, &garbage EXECUTE_DATA_CC);
						goto free_and_exit_assign_obj;
					} else {
fast_assign_obj:
						value = zend_assign_to_variable_ex(property_val, value, IS_VAR, EX_USES_STRICT_TYPES(), &garbage);
						if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
							ZVAL_COPY(EX_VAR(opline->result.var), value);
						}
						goto exit_assign_obj;
					}
				}
			} else if (EXPECTED(IS_DYNAMIC_PROPERTY_OFFSET(prop_offset))) {
				name = Z_STR_P(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC));
				if (UNEXPECTED(zend_lazy_object_must_init(zobj))) {
					zobj = zend_lazy_object_init(zobj);
					if (!zobj) {
						value = &EG(uninitialized_zval);
						goto free_and_exit_assign_obj;
					}
				}
				if (!zobj->ce->__set && (zobj->ce->ce_flags & ZEND_ACC_ALLOW_DYNAMIC_PROPERTIES)) {
					rebuild_object_properties_internal(zobj);
				}
				if (EXPECTED(zobj->properties != NULL)) {
					if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
						if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
							GC_DELREF(zobj->properties);
						}
						zobj->properties = zend_array_dup(zobj->properties);
					}
					property_val = zend_hash_find_known_hash(zobj->properties, name);
					if (property_val) {
						goto fast_assign_obj;
					}
				}

				if (!zobj->ce->__set && (zobj->ce->ce_flags & ZEND_ACC_ALLOW_DYNAMIC_PROPERTIES)) {
					if (IS_VAR == IS_CONST) {
						if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
							Z_ADDREF_P(value);
						}
					} else if (IS_VAR != IS_TMP_VAR) {
						if (Z_ISREF_P(value)) {
							if (IS_VAR == IS_VAR) {
								zend_reference *ref = Z_REF_P(value);
								if (GC_DELREF(ref) == 0) {
									ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
									efree_size(ref, sizeof(zend_reference));
									value = &tmp;
								} else {
									value = Z_REFVAL_P(value);
									Z_TRY_ADDREF_P(value);
								}
							} else {
								value = Z_REFVAL_P(value);
								Z_TRY_ADDREF_P(value);
							}
						} else if (IS_VAR == IS_CV) {
							Z_TRY_ADDREF_P(value);
						}
					}
					zend_hash_add_new(zobj->properties, name, value);
					if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
						ZVAL_COPY(EX_VAR(opline->result.var), value);
					}
					goto exit_assign_obj;
				}
			} else {
				ZEND_ASSERT(IS_HOOKED_PROPERTY_OFFSET(prop_offset));
				if (ZEND_IS_PROPERTY_HOOK_SIMPLE_WRITE(prop_offset)) {
					prop_info = CACHED_PTR_EX(cache_slot + 2);
					prop_offset = prop_info->offset;
					if (!ZEND_TYPE_IS_SET(prop_info->type)) {
						prop_info = NULL;
					}
					goto assign_obj_simple;
				}
				/* Fall through to write_property for hooks. */
			}
		}
		name = Z_STR_P(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC));
	} else {
		name = zval_try_get_tmp_string(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC), &tmp_name);
		if (UNEXPECTED(!name)) {
			zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
			UNDEF_RESULT();
			goto exit_assign_obj;
		}
	}

	if (IS_VAR == IS_CV || IS_VAR == IS_VAR) {
		ZVAL_DEREF(value);
	}

	value = zobj->handlers->write_property(zobj, name, value, (IS_CV == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);

	if (IS_CV != IS_CONST) {
		zend_tmp_string_release(tmp_name);
	}

free_and_exit_assign_obj:
	if (UNEXPECTED(RETURN_VALUE_USED(opline)) && value) {
		ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
	}
	zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
exit_assign_obj:
	if (garbage) {
		GC_DTOR_NO_REF(garbage);
	}




	/* assign_obj has two opcodes! */
	ZEND_VM_NEXT_OPCODE_EX(1, 2);
}

/* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CONST|VAR) */
static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_ASSIGN_OBJ_SPEC_UNUSED_CV_OP_DATA_CV_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *object, *value, tmp;
	zend_object *zobj;
	zend_string *name, *tmp_name;
	zend_refcounted *garbage = NULL;

	SAVE_OPLINE();
	object = &EX(This);
	value = _get_zval_ptr_cv_BP_VAR_R((opline+1)->op1.var EXECUTE_DATA_CC);

	if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
		if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
			object = Z_REFVAL_P(object);
			goto assign_object;
		}
		zend_throw_non_object_error(object, _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC) OPLINE_CC EXECUTE_DATA_CC);
		value = &EG(uninitialized_zval);
		goto free_and_exit_assign_obj;
	}

assign_object:
	zobj = Z_OBJ_P(object);
	if (IS_CV == IS_CONST) {
		if (EXPECTED(zobj->ce == CACHED_PTR(opline->extended_value))) {
			void **cache_slot = CACHE_ADDR(opline->extended_value);
			uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
			zval *property_val;
			zend_property_info *prop_info;

			if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
				prop_info = (zend_property_info*) CACHED_PTR_EX(cache_slot + 2);

assign_obj_simple:
				property_val = OBJ_PROP(zobj, prop_offset);
				if (Z_TYPE_P(property_val) != IS_UNDEF) {
					if (prop_info != NULL) {
						value = zend_assign_to_typed_prop(prop_info, property_val, value, &garbage EXECUTE_DATA_CC);
						goto free_and_exit_assign_obj;
					} else {
fast_assign_obj:
						value = zend_assign_to_variable_ex(property_val, value, IS_CV, EX_USES_STRICT_TYPES(), &garbage);
						if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
							ZVAL_COPY(EX_VAR(opline->result.var), value);
						}
						goto exit_assign_obj;
					}
				}
			} else if (EXPECTED(IS_DYNAMIC_PROPERTY_OFFSET(prop_offset))) {
				name = Z_STR_P(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC));
				if (UNEXPECTED(zend_lazy_object_must_init(zobj))) {
					zobj = zend_lazy_object_init(zobj);
					if (!zobj) {
						value = &EG(uninitialized_zval);
						goto free_and_exit_assign_obj;
					}
				}
				if (!zobj->ce->__set && (zobj->ce->ce_flags & ZEND_ACC_ALLOW_DYNAMIC_PROPERTIES)) {
					rebuild_object_properties_internal(zobj);
				}
				if (EXPECTED(zobj->properties != NULL)) {
					if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
						if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
							GC_DELREF(zobj->properties);
						}
						zobj->properties = zend_array_dup(zobj->properties);
					}
					property_val = zend_hash_find_known_hash(zobj->properties, name);
					if (property_val) {
						goto fast_assign_obj;
					}
				}

				if (!zobj->ce->__set && (zobj->ce->ce_flags & ZEND_ACC_ALLOW_DYNAMIC_PROPERTIES)) {
					if (IS_CV == IS_CONST) {
						if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
							Z_ADDREF_P(value);
						}
					} else if (IS_CV != IS_TMP_VAR) {
						if (Z_ISREF_P(value)) {
							if (IS_CV == IS_VAR) {
								zend_reference *ref = Z_REF_P(value);
								if (GC_DELREF(ref) == 0) {
									ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
									efree_size(ref, sizeof(zend_reference));
									value = &tmp;
								} else {
									value = Z_REFVAL_P(value);
									Z_TRY_ADDREF_P(value);
								}
							} else {
								value = Z_REFVAL_P(value);
								Z_TRY_ADDREF_P(value);
							}
						} else if (IS_CV == IS_CV) {
							Z_TRY_ADDREF_P(value);
						}
					}
					zend_hash_add_new(zobj->properties, name, value);
					if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
						ZVAL_COPY(EX_VAR(opline->result.var), value);
					}
					goto exit_assign_obj;
				}
			} else {
				ZEND_ASSERT(IS_HOOKED_PROPERTY_OFFSET(prop_offset));
				if (ZEND_IS_PROPERTY_HOOK_SIMPLE_WRITE(prop_offset)) {
					prop_info = CACHED_PTR_EX(cache_slot + 2);
					prop_offset = prop_info->offset;
					if (!ZEND_TYPE_IS_SET(prop_info->type)) {
						prop_info = NULL;
					}
					goto assign_obj_simple;
				}
				/* Fall through to write_property for hooks. */
			}
		}
		name = Z_STR_P(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC));
	} else {
		name = zval_try_get_tmp_string(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC), &tmp_name);
		if (UNEXPECTED(!name)) {


			UNDEF_RESULT();
			goto exit_assign_obj;
		}
	}

	if (IS_CV == IS_CV || IS_CV == IS_VAR) {
		ZVAL_DEREF(value);
	}

	value = zobj->handlers->write_property(zobj, name, value, (IS_CV == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);

	if (IS_CV != IS_CONST) {
		zend_tmp_string_release(tmp_name);
	}

free_and_exit_assign_obj:
	if (UNEXPECTED(RETURN_VALUE_USED(opline)) && value) {
		ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
	}


exit_assign_obj:
	if (garbage) {
		GC_DTOR_NO_REF(garbage);
	}




	/* assign_obj has two opcodes! */
	ZEND_VM_NEXT_OPCODE_EX(1, 2);
}

/* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CONST|VAR) */
static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_ASSIGN_OBJ_REF_SPEC_UNUSED_CV_OP_DATA_VAR_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *property, *container, *value_ptr;

	SAVE_OPLINE();

	container = &EX(This);
	property = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);

	value_ptr = _get_zval_ptr_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);

	if (1) {
		if (IS_UNUSED == IS_UNUSED) {
			if (IS_CV == IS_CONST) {
				zend_assign_to_property_reference_this_const(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
			} else {
				zend_assign_to_property_reference_this_var(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
			}
		} else {
			if (IS_CV == IS_CONST) {
				zend_assign_to_property_reference_var_const(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
			} else {
				zend_assign_to_property_reference_var_var(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
			}
		}
	} else {
		zend_assign_to_property_reference(container, IS_UNUSED, property, IS_CV, value_ptr OPLINE_CC EXECUTE_DATA_CC);
	}




	zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
	ZEND_VM_NEXT_OPCODE_EX(1, 2);
}

/* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CONST|VAR) */
static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_ASSIGN_OBJ_REF_SPEC_UNUSED_CV_OP_DATA_CV_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *property, *container, *value_ptr;

	SAVE_OPLINE();

	container = &EX(This);
	property = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);

	value_ptr = _get_zval_ptr_cv_BP_VAR_W((opline+1)->op1.var EXECUTE_DATA_CC);

	if (1) {
		if (IS_UNUSED == IS_UNUSED) {
			if (IS_CV == IS_CONST) {
				zend_assign_to_property_reference_this_const(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
			} else {
				zend_assign_to_property_reference_this_var(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
			}
		} else {
			if (IS_CV == IS_CONST) {
				zend_assign_to_property_reference_var_const(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
			} else {
				zend_assign_to_property_reference_var_var(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
			}
		}
	} else {
		zend_assign_to_property_reference(container, IS_UNUSED, property, IS_CV, value_ptr OPLINE_CC EXECUTE_DATA_CC);
	}






	ZEND_VM_NEXT_OPCODE_EX(1, 2);
}

/* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CONST|VAR) */
static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_ROPE_INIT_SPEC_UNUSED_CV_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zend_string **rope;
	zval *var;

	/* Compiler allocates the necessary number of zval slots to keep the rope */
	rope = (zend_string**)EX_VAR(opline->result.var);
	if (IS_CV == IS_CONST) {
		var = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
		rope[0] = Z_STR_P(var);
		if (UNEXPECTED(Z_REFCOUNTED_P(var))) {
			Z_ADDREF_P(var);
		}
	} else {
		var = EX_VAR(opline->op2.var);
		if (EXPECTED(Z_TYPE_P(var) == IS_STRING)) {
			if (IS_CV == IS_CV) {
				rope[0] = zend_string_copy(Z_STR_P(var));
			} else {
				rope[0] = Z_STR_P(var);
			}
		} else {
			SAVE_OPLINE();
			if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(var) == IS_UNDEF)) {
				ZVAL_UNDEFINED_OP2();
			}
			rope[0] = zval_get_string_func(var);


			ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
		}
	}
	ZEND_VM_NEXT_OPCODE();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_FETCH_CLASS_SPEC_UNUSED_CV_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	zval *class_name;
	USE_OPLINE

	SAVE_OPLINE();
	if (IS_CV == IS_UNUSED) {
		Z_CE_P(EX_VAR(opline->result.var)) = zend_fetch_class(NULL, opline->op1.num);
		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
	} else if (IS_CV == IS_CONST) {
		zend_class_entry *ce = CACHED_PTR(opline->extended_value);

		if (UNEXPECTED(ce == NULL)) {
			class_name = EX_VAR(opline->op2.var);
			ce = zend_fetch_class_by_name(Z_STR_P(class_name), Z_STR_P(class_name + 1), opline->op1.num);
			CACHE_PTR(opline->extended_value, ce);
		}
		Z_CE_P(EX_VAR(opline->result.var)) = ce;
	} else {
		class_name = EX_VAR(opline->op2.var);
try_class_name:
		if (Z_TYPE_P(class_name) == IS_OBJECT) {
			Z_CE_P(EX_VAR(opline->result.var)) = Z_OBJCE_P(class_name);
		} else if (Z_TYPE_P(class_name) == IS_STRING) {
			Z_CE_P(EX_VAR(opline->result.var)) = zend_fetch_class(Z_STR_P(class_name), opline->op1.num);
		} else if ((IS_CV & (IS_VAR|IS_CV)) && Z_TYPE_P(class_name) == IS_REFERENCE) {
			class_name = Z_REFVAL_P(class_name);
			goto try_class_name;
		} else {
			if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(class_name) == IS_UNDEF)) {
				ZVAL_UNDEFINED_OP2();
				if (UNEXPECTED(EG(exception) != NULL)) {
					HANDLE_EXCEPTION();
				}
			}
			zend_throw_error(NULL, "Class name must be a valid object or a string");
		}
	}


	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_INIT_METHOD_CALL_SPEC_UNUSED_CV_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *function_name;
	zval *object;
	zend_function *fbc;
	zend_class_entry *called_scope;
	zend_object *obj;
	zend_execute_data *call;
	uint32_t call_info;

	SAVE_OPLINE();

	object = &EX(This);

	if (IS_CV != IS_CONST) {
		function_name = EX_VAR(opline->op2.var);
	}

	if (IS_CV != IS_CONST &&
	    UNEXPECTED(Z_TYPE_P(function_name) != IS_STRING)) {
		do {
			if ((IS_CV & (IS_VAR|IS_CV)) && Z_ISREF_P(function_name)) {
				function_name = Z_REFVAL_P(function_name);
				if (EXPECTED(Z_TYPE_P(function_name) == IS_STRING)) {
					break;
				}
			} else if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) {
				ZVAL_UNDEFINED_OP2();
				if (UNEXPECTED(EG(exception) != NULL)) {


					HANDLE_EXCEPTION();
				}
			}
			zend_throw_error(NULL, "Method name must be a string");




			HANDLE_EXCEPTION();
		} while (0);
	}

	if (IS_UNUSED == IS_UNUSED) {
		obj = Z_OBJ_P(object);
	} else {
		do {
			if (IS_UNUSED != IS_CONST && EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
				obj = Z_OBJ_P(object);
			} else {
				if ((IS_UNUSED & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(object))) {
					zend_reference *ref = Z_REF_P(object);

					object = &ref->val;
					if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
						obj = Z_OBJ_P(object);
						if (IS_UNUSED & IS_VAR) {
							if (UNEXPECTED(GC_DELREF(ref) == 0)) {
								efree_size(ref, sizeof(zend_reference));
							} else {
								Z_ADDREF_P(object);
							}
						}
						break;
					}
				}
				if (IS_UNUSED == IS_CV && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
					object = ZVAL_UNDEFINED_OP1();
					if (UNEXPECTED(EG(exception) != NULL)) {
						if (IS_CV != IS_CONST) {


						}
						HANDLE_EXCEPTION();
					}
				}
				if (IS_CV == IS_CONST) {
					function_name = EX_VAR(opline->op2.var);
				}
				zend_invalid_method_call(object, function_name);




				HANDLE_EXCEPTION();
			}
		} while (0);
	}

	called_scope = obj->ce;

	if (IS_CV == IS_CONST &&
	    EXPECTED(CACHED_PTR(opline->result.num) == called_scope)) {
		fbc = CACHED_PTR(opline->result.num + sizeof(void*));
	} else {
		zend_object *orig_obj = obj;

		if (IS_CV == IS_CONST) {
			function_name = EX_VAR(opline->op2.var);
		}

		/* First, locate the function. */
		fbc = obj->handlers->get_method(&obj, Z_STR_P(function_name), ((IS_CV == IS_CONST) ? (RT_CONSTANT(opline, opline->op2) + 1) : NULL));
		if (UNEXPECTED(fbc == NULL)) {
			if (EXPECTED(!EG(exception))) {
				zend_undefined_method(orig_obj->ce, Z_STR_P(function_name));
			}


			if ((IS_UNUSED & (IS_VAR|IS_TMP_VAR)) && GC_DELREF(orig_obj) == 0) {
				zend_objects_store_del(orig_obj);
			}
			HANDLE_EXCEPTION();
		}
		if (IS_CV == IS_CONST &&
		    EXPECTED(!(fbc->common.fn_flags & (ZEND_ACC_CALL_VIA_TRAMPOLINE|ZEND_ACC_NEVER_CACHE))) &&
		    EXPECTED(obj == orig_obj)) {
			CACHE_POLYMORPHIC_PTR(opline->result.num, called_scope, fbc);
		}
		if ((IS_UNUSED & (IS_VAR|IS_TMP_VAR)) && UNEXPECTED(obj != orig_obj)) {
			GC_ADDREF(obj); /* For $this pointer */
			if (GC_DELREF(orig_obj) == 0) {
				zend_objects_store_del(orig_obj);
			}
		}
		if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!RUN_TIME_CACHE(&fbc->op_array))) {
			init_func_run_time_cache(&fbc->op_array);
		}
	}

	if (IS_CV != IS_CONST) {


	}

	call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_HAS_THIS;
	if (UNEXPECTED((fbc->common.fn_flags & ZEND_ACC_STATIC) != 0)) {
		if ((IS_UNUSED & (IS_VAR|IS_TMP_VAR)) && GC_DELREF(obj) == 0) {
			zend_objects_store_del(obj);
			if (UNEXPECTED(EG(exception))) {
				HANDLE_EXCEPTION();
			}
		}
		/* call static method */
		obj = (zend_object*)called_scope;
		call_info = ZEND_CALL_NESTED_FUNCTION;
	} else if (IS_UNUSED & (IS_VAR|IS_TMP_VAR|IS_CV)) {
		if (IS_UNUSED == IS_CV) {
			GC_ADDREF(obj); /* For $this pointer */
		}
		/* CV may be changed indirectly (e.g. when it's a reference) */
		call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_HAS_THIS | ZEND_CALL_RELEASE_THIS;
	}

	call = zend_vm_stack_push_call_frame(call_info,
		fbc, opline->extended_value, obj);
	call->prev_execute_data = EX(call);
	EX(call) = call;

	ZEND_VM_NEXT_OPCODE();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_INIT_STATIC_METHOD_CALL_SPEC_UNUSED_CV_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *function_name;
	zend_class_entry *ce;
	uint32_t call_info;
	zend_function *fbc;
	zend_execute_data *call;

	SAVE_OPLINE();

	if (IS_UNUSED == IS_CONST) {
		/* no function found. try a static method in class */
		ce = CACHED_PTR(opline->result.num);
		if (UNEXPECTED(ce == NULL)) {
			ce = zend_fetch_class_by_name(Z_STR_P(RT_CONSTANT(opline, opline->op1)), Z_STR_P(RT_CONSTANT(opline, opline->op1) + 1), ZEND_FETCH_CLASS_DEFAULT | ZEND_FETCH_CLASS_EXCEPTION);
			if (UNEXPECTED(ce == NULL)) {


				HANDLE_EXCEPTION();
			}
			if (IS_CV != IS_CONST) {
				CACHE_PTR(opline->result.num, ce);
			}
		}
	} else if (IS_UNUSED == IS_UNUSED) {
		ce = zend_fetch_class(NULL, opline->op1.num);
		if (UNEXPECTED(ce == NULL)) {


			HANDLE_EXCEPTION();
		}
	} else {
		ce = Z_CE_P(EX_VAR(opline->op1.var));
	}

	if (IS_UNUSED == IS_CONST &&
	    IS_CV == IS_CONST &&
	    EXPECTED((fbc = CACHED_PTR(opline->result.num + sizeof(void*))) != NULL)) {
		/* nothing to do */
	} else if (IS_UNUSED != IS_CONST &&
	           IS_CV == IS_CONST &&
	           EXPECTED(CACHED_PTR(opline->result.num) == ce)) {
		fbc = CACHED_PTR(opline->result.num + sizeof(void*));
	} else if (IS_CV != IS_UNUSED) {
		function_name = EX_VAR(opline->op2.var);
		if (IS_CV != IS_CONST) {
			if (UNEXPECTED(Z_TYPE_P(function_name) != IS_STRING)) {
				do {
					if (IS_CV & (IS_VAR|IS_CV) && Z_ISREF_P(function_name)) {
						function_name = Z_REFVAL_P(function_name);
						if (EXPECTED(Z_TYPE_P(function_name) == IS_STRING)) {
							break;
						}
					} else if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) {
						ZVAL_UNDEFINED_OP2();
						if (UNEXPECTED(EG(exception) != NULL)) {
							HANDLE_EXCEPTION();
						}
					}
					zend_throw_error(NULL, "Method name must be a string");


					HANDLE_EXCEPTION();
				} while (0);
			}
		}

		if (ce->get_static_method) {
			fbc = ce->get_static_method(ce, Z_STR_P(function_name));
		} else {
			fbc = zend_std_get_static_method(ce, Z_STR_P(function_name), ((IS_CV == IS_CONST) ? (RT_CONSTANT(opline, opline->op2) + 1) : NULL));
		}
		if (UNEXPECTED(fbc == NULL)) {
			if (EXPECTED(!EG(exception))) {
				zend_undefined_method(ce, Z_STR_P(function_name));
			}


			HANDLE_EXCEPTION();
		}
		if (IS_CV == IS_CONST &&
		    EXPECTED(!(fbc->common.fn_flags & (ZEND_ACC_CALL_VIA_TRAMPOLINE|ZEND_ACC_NEVER_CACHE))) &&
			EXPECTED(!(fbc->common.scope->ce_flags & ZEND_ACC_TRAIT))) {
			CACHE_POLYMORPHIC_PTR(opline->result.num, ce, fbc);
		}
		if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!RUN_TIME_CACHE(&fbc->op_array))) {
			init_func_run_time_cache(&fbc->op_array);
		}
		if (IS_CV != IS_CONST) {


		}
	} else {
		if (UNEXPECTED(ce->constructor == NULL)) {
			zend_throw_error(NULL, "Cannot call constructor");
			HANDLE_EXCEPTION();
		}
		if (Z_TYPE(EX(This)) == IS_OBJECT && Z_OBJ(EX(This))->ce != ce->constructor->common.scope && (ce->constructor->common.fn_flags & ZEND_ACC_PRIVATE)) {
			zend_throw_error(NULL, "Cannot call private %s::__construct()", ZSTR_VAL(ce->name));
			HANDLE_EXCEPTION();
		}
		fbc = ce->constructor;
		if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!RUN_TIME_CACHE(&fbc->op_array))) {
			init_func_run_time_cache(&fbc->op_array);
		}
	}

	if (!(fbc->common.fn_flags & ZEND_ACC_STATIC)) {
		if (Z_TYPE(EX(This)) == IS_OBJECT && instanceof_function(Z_OBJCE(EX(This)), ce)) {
			ce = (zend_class_entry*)Z_OBJ(EX(This));
			call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_HAS_THIS;
		} else {
			zend_non_static_method_call(fbc);
			HANDLE_EXCEPTION();
		}
	} else {
		/* previous opcode is ZEND_FETCH_CLASS */
		if (IS_UNUSED == IS_UNUSED
		 && ((opline->op1.num & ZEND_FETCH_CLASS_MASK) == ZEND_FETCH_CLASS_PARENT ||
		     (opline->op1.num & ZEND_FETCH_CLASS_MASK) == ZEND_FETCH_CLASS_SELF)) {
			if (Z_TYPE(EX(This)) == IS_OBJECT) {
				ce = Z_OBJCE(EX(This));
			} else {
				ce = Z_CE(EX(This));
			}
		}
		call_info = ZEND_CALL_NESTED_FUNCTION;
	}

	call = zend_vm_stack_push_call_frame(call_info,
		fbc, opline->extended_value, ce);
	call->prev_execute_data = EX(call);
	EX(call) = call;

	ZEND_VM_NEXT_OPCODE();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_INIT_ARRAY_SPEC_UNUSED_CV_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	zval *array;
	uint32_t size;
	USE_OPLINE

	SAVE_OPLINE();
	array = EX_VAR(opline->result.var);
	if (IS_UNUSED != IS_UNUSED) {
		size = opline->extended_value >> ZEND_ARRAY_SIZE_SHIFT;
		ZVAL_ARR(array, zend_new_array(size));
		/* Explicitly initialize array as not-packed if flag is set */
		if (opline->extended_value & ZEND_ARRAY_NOT_PACKED) {
			zend_hash_real_init_mixed(Z_ARRVAL_P(array));
		}
		ZEND_VM_TAIL_CALL(ZEND_NULL_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
	} else {
		ZVAL_ARR(array, zend_new_array(0));
		ZEND_VM_NEXT_OPCODE();
	}
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_UNSET_OBJ_SPEC_UNUSED_CV_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *container;
	zval *offset;
	zend_string *name, *tmp_name;

	SAVE_OPLINE();
	container = &EX(This);
	offset = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);

	do {
		if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT)) {
			if (Z_ISREF_P(container)) {
				container = Z_REFVAL_P(container);
				if (Z_TYPE_P(container) != IS_OBJECT) {
					if (IS_UNUSED == IS_CV
					 && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
						ZVAL_UNDEFINED_OP1();
					}
					break;
				}
			} else {
				break;
			}
		}
		if (IS_CV == IS_CONST) {
			name = Z_STR_P(offset);
		} else {
			name = zval_try_get_tmp_string(offset, &tmp_name);
			if (UNEXPECTED(!name)) {
				break;
			}
		}
		Z_OBJ_HT_P(container)->unset_property(Z_OBJ_P(container), name, ((IS_CV == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL));
		if (IS_CV != IS_CONST) {
			zend_tmp_string_release(tmp_name);
		}
	} while (0);




	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_UNUSED_CV_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *container;
	int result;
	zval *offset;
	zend_string *name, *tmp_name;

	SAVE_OPLINE();
	container = &EX(This);
	offset = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);

	if (IS_UNUSED == IS_CONST ||
	    (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
		if ((IS_UNUSED & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
			container = Z_REFVAL_P(container);
			if (UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT)) {
				result = (opline->extended_value & ZEND_ISEMPTY);
				goto isset_object_finish;
			}
		} else {
			result = (opline->extended_value & ZEND_ISEMPTY);
			goto isset_object_finish;
		}
	}

	if (IS_CV == IS_CONST) {
		name = Z_STR_P(offset);
	} else {
		name = zval_try_get_tmp_string(offset, &tmp_name);
		if (UNEXPECTED(!name)) {
			result = 0;
			goto isset_object_finish;
		}
	}

	result =
		(opline->extended_value & ZEND_ISEMPTY) ^
		Z_OBJ_HT_P(container)->has_property(Z_OBJ_P(container), name, (opline->extended_value & ZEND_ISEMPTY), ((IS_CV == IS_CONST) ? CACHE_ADDR(opline->extended_value & ~ZEND_ISEMPTY) : NULL));

	if (IS_CV != IS_CONST) {
		zend_tmp_string_release(tmp_name);
	}

isset_object_finish:




	ZEND_VM_SMART_BRANCH(result, 1);
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_YIELD_SPEC_UNUSED_CV_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE

	zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C);

	SAVE_OPLINE();
	if (UNEXPECTED(generator->flags & ZEND_GENERATOR_FORCED_CLOSE)) {
		ZEND_VM_TAIL_CALL(zend_yield_in_closed_generator_helper_SPEC_TAILCALL(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
	}

	/* Destroy the previously yielded value */
	zval_ptr_dtor(&generator->value);

	/* Destroy the previously yielded key */
	zval_ptr_dtor(&generator->key);

	/* Set the new yielded value */
	if (IS_UNUSED != IS_UNUSED) {
		if (UNEXPECTED(EX(func)->op_array.fn_flags & ZEND_ACC_RETURN_REFERENCE)) {
			/* Constants and temporary variables aren't yieldable by reference,
			 * but we still allow them with a notice. */
			if (IS_UNUSED & (IS_CONST|IS_TMP_VAR)) {
				zval *value;

				zend_error(E_NOTICE, "Only variable references should be yielded by reference");

				value = NULL;
				ZVAL_COPY_VALUE(&generator->value, value);
				if (IS_UNUSED == IS_CONST) {
					if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
						Z_ADDREF(generator->value);
					}
				}
			} else {
				zval *value_ptr = NULL;

				/* If a function call result is yielded and the function did
				 * not return by reference we throw a notice. */
				do {
					if (IS_UNUSED == IS_VAR) {
						ZEND_ASSERT(value_ptr != &EG(uninitialized_zval));
						if (opline->extended_value == ZEND_RETURNS_FUNCTION
						 && !Z_ISREF_P(value_ptr)) {
							zend_error(E_NOTICE, "Only variable references should be yielded by reference");
							ZVAL_COPY(&generator->value, value_ptr);
							break;
						}
					}
					if (Z_ISREF_P(value_ptr)) {
						Z_ADDREF_P(value_ptr);
					} else {
						ZVAL_MAKE_REF_EX(value_ptr, 2);
					}
					ZVAL_REF(&generator->value, Z_REF_P(value_ptr));
				} while (0);


			}
		} else {
			zval *value = NULL;

			/* Consts, temporary variables and references need copying */
			if (IS_UNUSED == IS_CONST) {
				ZVAL_COPY_VALUE(&generator->value, value);
				if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
					Z_ADDREF(generator->value);
				}
			} else if (IS_UNUSED == IS_TMP_VAR) {
				ZVAL_COPY_VALUE(&generator->value, value);
			} else if ((IS_UNUSED & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) {
				ZVAL_COPY(&generator->value, Z_REFVAL_P(value));


			} else {
				ZVAL_COPY_VALUE(&generator->value, value);
				if (IS_UNUSED == IS_CV) {
					if (Z_OPT_REFCOUNTED_P(value)) Z_ADDREF_P(value);
				}
			}
		}
	} else {
		/* If no value was specified yield null */
		ZVAL_NULL(&generator->value);
	}

	/* Set the new yielded key */
	if (IS_CV != IS_UNUSED) {
		zval *key = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
		if ((IS_CV & (IS_CV|IS_VAR)) && UNEXPECTED(Z_TYPE_P(key) == IS_REFERENCE)) {
			key = Z_REFVAL_P(key);
		}
		ZVAL_COPY(&generator->key, key);


		if (Z_TYPE(generator->key) == IS_LONG
		    && Z_LVAL(generator->key) > generator->largest_used_integer_key
		) {
			generator->largest_used_integer_key = Z_LVAL(generator->key);
		}
	} else {
		/* If no key was specified we use auto-increment keys */
		generator->largest_used_integer_key++;
		ZVAL_LONG(&generator->key, generator->largest_used_integer_key);
	}

	if (RETURN_VALUE_USED(opline)) {
		/* If the return value of yield is used set the send
		 * target and initialize it to NULL */
		generator->send_target = EX_VAR(opline->result.var);
		ZVAL_NULL(generator->send_target);
	} else {
		generator->send_target = NULL;
	}

	/* The GOTO VM uses a local opline variable. We need to set the opline
	 * variable in execute_data so we don't resume at an old position. */
	SAVE_OPLINE();

	ZEND_VM_RETURN();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_BOOL_NOT_SPEC_CV_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *val;

	val = EX_VAR(opline->op1.var);
	if (Z_TYPE_INFO_P(val) == IS_TRUE) {
		ZVAL_FALSE(EX_VAR(opline->result.var));
	} else if (EXPECTED(Z_TYPE_INFO_P(val) <= IS_TRUE)) {
		/* The result and op1 can be the same cv zval */
		const uint32_t orig_val_type = Z_TYPE_INFO_P(val);
		ZVAL_TRUE(EX_VAR(opline->result.var));
		if (IS_CV == IS_CV && UNEXPECTED(orig_val_type == IS_UNDEF)) {
			SAVE_OPLINE();
			ZVAL_UNDEFINED_OP1();
			ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
		}
	} else {
		SAVE_OPLINE();
		ZVAL_BOOL(EX_VAR(opline->result.var), !i_zend_is_true(val));


		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
	}
	ZEND_VM_NEXT_OPCODE();
}

static zend_never_inline ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV  zend_pre_inc_helper_SPEC_CV_TAILCALL(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *var_ptr;

	var_ptr = EX_VAR(opline->op1.var);

	SAVE_OPLINE();
	if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(var_ptr) == IS_UNDEF)) {
		ZVAL_UNDEFINED_OP1();
		ZVAL_NULL(var_ptr);
	}

	do {
		if (UNEXPECTED(Z_TYPE_P(var_ptr) == IS_REFERENCE)) {
			zend_reference *ref = Z_REF_P(var_ptr);
			var_ptr = Z_REFVAL_P(var_ptr);
			if (UNEXPECTED(ZEND_REF_HAS_TYPE_SOURCES(ref))) {
				zend_incdec_typed_ref(ref, NULL OPLINE_CC EXECUTE_DATA_CC);
				break;
			}
		}
		increment_function(var_ptr);
	} while (0);

	if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
		ZVAL_COPY(EX_VAR(opline->result.var), var_ptr);
	}


	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_PRE_INC_SPEC_CV_RETVAL_UNUSED_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *var_ptr;

	var_ptr = EX_VAR(opline->op1.var);

	if (EXPECTED(Z_TYPE_P(var_ptr) == IS_LONG)) {
		fast_long_increment_function(var_ptr);
		if (UNEXPECTED(0)) {
			ZVAL_COPY_VALUE(EX_VAR(opline->result.var), var_ptr);
		}
		ZEND_VM_NEXT_OPCODE();
	}

	ZEND_VM_TAIL_CALL(zend_pre_inc_helper_SPEC_CV_TAILCALL(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
}

static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_PRE_INC_SPEC_CV_RETVAL_USED_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *var_ptr;

	var_ptr = EX_VAR(opline->op1.var);

	if (EXPECTED(Z_TYPE_P(var_ptr) == IS_LONG)) {
		fast_long_increment_function(var_ptr);
		if (UNEXPECTED(1)) {
			ZVAL_COPY_VALUE(EX_VAR(opline->result.var), var_ptr);
		}
		ZEND_VM_NEXT_OPCODE();
	}

	ZEND_VM_TAIL_CALL(zend_pre_inc_helper_SPEC_CV_TAILCALL(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
}

static zend_never_inline ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV  zend_pre_dec_helper_SPEC_CV_TAILCALL(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *var_ptr;

	var_ptr = EX_VAR(opline->op1.var);

	SAVE_OPLINE();
	if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(var_ptr) == IS_UNDEF)) {
		ZVAL_UNDEFINED_OP1();
		ZVAL_NULL(var_ptr);
	}

	do {
		if (UNEXPECTED(Z_TYPE_P(var_ptr) == IS_REFERENCE)) {
			zend_reference *ref = Z_REF_P(var_ptr);
			var_ptr = Z_REFVAL_P(var_ptr);

			if (UNEXPECTED(ZEND_REF_HAS_TYPE_SOURCES(ref))) {
				zend_incdec_typed_ref(ref, NULL OPLINE_CC EXECUTE_DATA_CC);
				break;
			}
		}
		decrement_function(var_ptr);
	} while (0);

	if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
		ZVAL_COPY(EX_VAR(opline->result.var), var_ptr);
	}


	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_PRE_DEC_SPEC_CV_RETVAL_UNUSED_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *var_ptr;

	var_ptr = EX_VAR(opline->op1.var);

	if (EXPECTED(Z_TYPE_P(var_ptr) == IS_LONG)) {
		fast_long_decrement_function(var_ptr);
		if (UNEXPECTED(0)) {
			ZVAL_COPY_VALUE(EX_VAR(opline->result.var), var_ptr);
		}
		ZEND_VM_NEXT_OPCODE();
	}

	ZEND_VM_TAIL_CALL(zend_pre_dec_helper_SPEC_CV_TAILCALL(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
}

static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_PRE_DEC_SPEC_CV_RETVAL_USED_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *var_ptr;

	var_ptr = EX_VAR(opline->op1.var);

	if (EXPECTED(Z_TYPE_P(var_ptr) == IS_LONG)) {
		fast_long_decrement_function(var_ptr);
		if (UNEXPECTED(1)) {
			ZVAL_COPY_VALUE(EX_VAR(opline->result.var), var_ptr);
		}
		ZEND_VM_NEXT_OPCODE();
	}

	ZEND_VM_TAIL_CALL(zend_pre_dec_helper_SPEC_CV_TAILCALL(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
}

static zend_never_inline ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV  zend_post_inc_helper_SPEC_CV_TAILCALL(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *var_ptr;

	var_ptr = EX_VAR(opline->op1.var);

	SAVE_OPLINE();
	if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(var_ptr) == IS_UNDEF)) {
		ZVAL_UNDEFINED_OP1();
		ZVAL_NULL(var_ptr);
	}

	do {
		if (UNEXPECTED(Z_TYPE_P(var_ptr) == IS_REFERENCE)) {
			zend_reference *ref = Z_REF_P(var_ptr);
			var_ptr = Z_REFVAL_P(var_ptr);

			if (UNEXPECTED(ZEND_REF_HAS_TYPE_SOURCES(ref))) {
				zend_incdec_typed_ref(ref, EX_VAR(opline->result.var) OPLINE_CC EXECUTE_DATA_CC);
				break;
			}
		}
		ZVAL_COPY(EX_VAR(opline->result.var), var_ptr);

		increment_function(var_ptr);
	} while (0);


	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_POST_INC_SPEC_CV_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *var_ptr;

	var_ptr = EX_VAR(opline->op1.var);

	if (EXPECTED(Z_TYPE_P(var_ptr) == IS_LONG)) {
		ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(var_ptr));
		fast_long_increment_function(var_ptr);
		ZEND_VM_NEXT_OPCODE();
	}

	ZEND_VM_TAIL_CALL(zend_post_inc_helper_SPEC_CV_TAILCALL(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
}

static zend_never_inline ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV  zend_post_dec_helper_SPEC_CV_TAILCALL(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *var_ptr;

	var_ptr = EX_VAR(opline->op1.var);

	SAVE_OPLINE();
	if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(var_ptr) == IS_UNDEF)) {
		ZVAL_UNDEFINED_OP1();
		ZVAL_NULL(var_ptr);
	}

	do {
		if (UNEXPECTED(Z_TYPE_P(var_ptr) == IS_REFERENCE)) {
			zend_reference *ref = Z_REF_P(var_ptr);
			var_ptr = Z_REFVAL_P(var_ptr);

			if (UNEXPECTED(ZEND_REF_HAS_TYPE_SOURCES(ref))) {
				zend_incdec_typed_ref(ref, EX_VAR(opline->result.var) OPLINE_CC EXECUTE_DATA_CC);
				break;
			}
		}
		ZVAL_COPY(EX_VAR(opline->result.var), var_ptr);

		decrement_function(var_ptr);
	} while (0);


	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_POST_DEC_SPEC_CV_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *var_ptr;

	var_ptr = EX_VAR(opline->op1.var);

	if (EXPECTED(Z_TYPE_P(var_ptr) == IS_LONG)) {
		ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(var_ptr));
		fast_long_decrement_function(var_ptr);
		ZEND_VM_NEXT_OPCODE();
	}

	ZEND_VM_TAIL_CALL(zend_post_dec_helper_SPEC_CV_TAILCALL(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_ECHO_SPEC_CV_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *z;

	SAVE_OPLINE();
	z = EX_VAR(opline->op1.var);

	if (Z_TYPE_P(z) == IS_STRING) {
		zend_string *str = Z_STR_P(z);

		if (ZSTR_LEN(str) != 0) {
			zend_write(ZSTR_VAL(str), ZSTR_LEN(str));
		}
	} else {
		zend_string *str = zval_get_string_func(z);

		if (ZSTR_LEN(str) != 0) {
			zend_write(ZSTR_VAL(str), ZSTR_LEN(str));
		} else if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(z) == IS_UNDEF)) {
			ZVAL_UNDEFINED_OP1();
		}
		zend_string_release_ex(str, 0);
	}


	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_JMPZ_SPEC_CV_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *val;
	uint8_t op1_type;

	val = EX_VAR(opline->op1.var);

	if (Z_TYPE_INFO_P(val) == IS_TRUE) {
		ZEND_VM_NEXT_OPCODE();
	} else if (EXPECTED(Z_TYPE_INFO_P(val) <= IS_TRUE)) {
		if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(val) == IS_UNDEF)) {
			SAVE_OPLINE();
			ZVAL_UNDEFINED_OP1();
			if (UNEXPECTED(EG(exception))) {
				HANDLE_EXCEPTION();
			}
		}
		ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0);
	}

	SAVE_OPLINE();
	op1_type = IS_CV;
	if (i_zend_is_true(val)) {
		opline++;
	} else {
		opline = OP_JMP_ADDR(opline, opline->op2);
	}
	if (op1_type & (IS_TMP_VAR|IS_VAR)) {
		zval_ptr_dtor_nogc(val);
	}
	ZEND_VM_JMP(opline);
}

static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_JMPNZ_SPEC_CV_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *val;
	uint8_t op1_type;

	val = EX_VAR(opline->op1.var);

	if (Z_TYPE_INFO_P(val) == IS_TRUE) {
		ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0);
	} else if (EXPECTED(Z_TYPE_INFO_P(val) <= IS_TRUE)) {
		if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(val) == IS_UNDEF)) {
			SAVE_OPLINE();
			ZVAL_UNDEFINED_OP1();
			if (UNEXPECTED(EG(exception))) {
				HANDLE_EXCEPTION();
			}
		}
		ZEND_VM_NEXT_OPCODE();
	}

	SAVE_OPLINE();
	op1_type = IS_CV;
	if (i_zend_is_true(val)) {
		opline = OP_JMP_ADDR(opline, opline->op2);
	} else {
		opline++;
	}
	if (op1_type & (IS_TMP_VAR|IS_VAR)) {
		zval_ptr_dtor_nogc(val);
	}
	ZEND_VM_JMP(opline);
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_JMPZ_EX_SPEC_CV_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *val;
	bool ret;

	val = EX_VAR(opline->op1.var);

	if (Z_TYPE_INFO_P(val) == IS_TRUE) {
		ZVAL_TRUE(EX_VAR(opline->result.var));
		ZEND_VM_NEXT_OPCODE();
	} else if (EXPECTED(Z_TYPE_INFO_P(val) <= IS_TRUE)) {
		ZVAL_FALSE(EX_VAR(opline->result.var));
		if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(val) == IS_UNDEF)) {
			SAVE_OPLINE();
			ZVAL_UNDEFINED_OP1();
			if (UNEXPECTED(EG(exception))) {
				HANDLE_EXCEPTION();
			}
		}
		ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0);
	}

	SAVE_OPLINE();
	ret = i_zend_is_true(val);


	if (ret) {
		ZVAL_TRUE(EX_VAR(opline->result.var));
		opline++;
	} else {
		ZVAL_FALSE(EX_VAR(opline->result.var));
		opline = OP_JMP_ADDR(opline, opline->op2);
	}
	ZEND_VM_JMP(opline);
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_JMPNZ_EX_SPEC_CV_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *val;
	bool ret;

	val = EX_VAR(opline->op1.var);

	if (Z_TYPE_INFO_P(val) == IS_TRUE) {
		ZVAL_TRUE(EX_VAR(opline->result.var));
		ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0);
	} else if (EXPECTED(Z_TYPE_INFO_P(val) <= IS_TRUE)) {
		ZVAL_FALSE(EX_VAR(opline->result.var));
		if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(val) == IS_UNDEF)) {
			SAVE_OPLINE();
			ZVAL_UNDEFINED_OP1();
			ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
		} else {
			ZEND_VM_NEXT_OPCODE();
		}
	}

	SAVE_OPLINE();
	ret = i_zend_is_true(val);


	if (ret) {
		ZVAL_TRUE(EX_VAR(opline->result.var));
		opline = OP_JMP_ADDR(opline, opline->op2);
	} else {
		ZVAL_FALSE(EX_VAR(opline->result.var));
		opline++;
	}
	ZEND_VM_JMP(opline);
}

static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_RETURN_SPEC_CV_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *retval_ptr;
	zval *return_value;


	retval_ptr = EX_VAR(opline->op1.var);
	return_value = EX(return_value);


	if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(retval_ptr) == IS_UNDEF)) {
		SAVE_OPLINE();
		retval_ptr = ZVAL_UNDEFINED_OP1();
		if (return_value) {
			ZVAL_NULL(return_value);
		}
	} else if (!return_value) {
		if (IS_CV & (IS_VAR|IS_TMP_VAR)) {
			if (Z_REFCOUNTED_P(retval_ptr) && !Z_DELREF_P(retval_ptr)) {
				SAVE_OPLINE();
				rc_dtor_func(Z_COUNTED_P(retval_ptr));
			}
		}
	} else {
		if ((IS_CV & (IS_CONST|IS_TMP_VAR))) {
			ZVAL_COPY_VALUE(return_value, retval_ptr);
			if (IS_CV == IS_CONST) {
				if (UNEXPECTED(Z_OPT_REFCOUNTED_P(return_value))) {
					Z_ADDREF_P(return_value);
				}
			}
		} else if (IS_CV == IS_CV) {
			do {
				if (Z_OPT_REFCOUNTED_P(retval_ptr)) {
					if (EXPECTED(!Z_OPT_ISREF_P(retval_ptr))) {
						if (EXPECTED(!(EX_CALL_INFO() & (ZEND_CALL_CODE|ZEND_CALL_OBSERVED)))) {
							zend_refcounted *ref = Z_COUNTED_P(retval_ptr);
							ZVAL_COPY_VALUE(return_value, retval_ptr);
							if (GC_MAY_LEAK(ref)) {
								SAVE_OPLINE();
								gc_possible_root(ref);
							}
							ZVAL_NULL(retval_ptr);
							break;
						} else {
							Z_ADDREF_P(retval_ptr);
						}
					} else {
						retval_ptr = Z_REFVAL_P(retval_ptr);
						if (Z_OPT_REFCOUNTED_P(retval_ptr)) {
							Z_ADDREF_P(retval_ptr);
						}
					}
				}
				ZVAL_COPY_VALUE(return_value, retval_ptr);
			} while (0);
		} else /* if (IS_CV == IS_VAR) */ {
			if (UNEXPECTED(Z_ISREF_P(retval_ptr))) {
				zend_refcounted *ref = Z_COUNTED_P(retval_ptr);

				retval_ptr = Z_REFVAL_P(retval_ptr);
				ZVAL_COPY_VALUE(return_value, retval_ptr);
				if (UNEXPECTED(GC_DELREF(ref) == 0)) {
					efree_size(ref, sizeof(zend_reference));
				} else if (Z_OPT_REFCOUNTED_P(retval_ptr)) {
					Z_ADDREF_P(retval_ptr);
				}
			} else {
				ZVAL_COPY_VALUE(return_value, retval_ptr);
			}
		}
	}






	ZEND_VM_DISPATCH_TO_LEAVE_HELPER(zend_leave_helper_SPEC_TAILCALL);
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_RETURN_BY_REF_SPEC_CV_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *retval_ptr;
	zval *return_value;


	SAVE_OPLINE();

	return_value = EX(return_value);


	do {
		if ((IS_CV & (IS_CONST|IS_TMP_VAR)) ||
		    (IS_CV == IS_VAR && opline->extended_value == ZEND_RETURNS_VALUE)) {
			/* Not supposed to happen, but we'll allow it */
			zend_error(E_NOTICE, "Only variable references should be returned by reference");

			retval_ptr = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
			if (!return_value) {


			} else {
				if (IS_CV == IS_VAR && UNEXPECTED(Z_ISREF_P(retval_ptr))) {
					ZVAL_COPY_VALUE(return_value, retval_ptr);
					break;
				}

				ZVAL_NEW_REF(return_value, retval_ptr);
				if (IS_CV == IS_CONST) {
					Z_TRY_ADDREF_P(retval_ptr);
				}
			}
			break;
		}

		retval_ptr = _get_zval_ptr_cv_BP_VAR_W(opline->op1.var EXECUTE_DATA_CC);

		if (IS_CV == IS_VAR) {
			ZEND_ASSERT(retval_ptr != &EG(uninitialized_zval));
			if (opline->extended_value == ZEND_RETURNS_FUNCTION && !Z_ISREF_P(retval_ptr)) {
				zend_error(E_NOTICE, "Only variable references should be returned by reference");
				if (return_value) {
					ZVAL_NEW_REF(return_value, retval_ptr);
				} else {


				}
				break;
			}
		}

		if (return_value) {
			if (Z_ISREF_P(retval_ptr)) {
				Z_ADDREF_P(retval_ptr);
			} else {
				ZVAL_MAKE_REF_EX(retval_ptr, 2);
			}
			ZVAL_REF(return_value, Z_REF_P(retval_ptr));
		}


	} while (0);




	ZEND_VM_DISPATCH_TO_LEAVE_HELPER(zend_leave_helper_SPEC_TAILCALL);
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_GENERATOR_RETURN_SPEC_CV_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *retval;

	zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C);

	SAVE_OPLINE();
	retval = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);

	/* Copy return value into generator->retval */
	if ((IS_CV & (IS_CONST|IS_TMP_VAR))) {
		ZVAL_COPY_VALUE(&generator->retval, retval);
		if (IS_CV == IS_CONST) {
			if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->retval))) {
				Z_ADDREF(generator->retval);
			}
		}
	} else if (IS_CV == IS_CV) {
		ZVAL_COPY_DEREF(&generator->retval, retval);
	} else /* if (IS_CV == IS_VAR) */ {
		if (UNEXPECTED(Z_ISREF_P(retval))) {
			zend_refcounted *ref = Z_COUNTED_P(retval);

			retval = Z_REFVAL_P(retval);
			ZVAL_COPY_VALUE(&generator->retval, retval);
			if (UNEXPECTED(GC_DELREF(ref) == 0)) {
				efree_size(ref, sizeof(zend_reference));
			} else if (Z_OPT_REFCOUNTED_P(retval)) {
				Z_ADDREF_P(retval);
			}
		} else {
			ZVAL_COPY_VALUE(&generator->retval, retval);
		}
	}


	EG(current_execute_data) = EX(prev_execute_data);

	/* Close the generator to free up resources */
	zend_generator_close(generator, 1);

	/* Pass execution back to handling code */
	ZEND_VM_RETURN();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_THROW_SPEC_CV_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *value;

	SAVE_OPLINE();
	value = EX_VAR(opline->op1.var);

	do {
		if (IS_CV == IS_CONST || UNEXPECTED(Z_TYPE_P(value) != IS_OBJECT)) {
			if ((IS_CV & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) {
				value = Z_REFVAL_P(value);
				if (EXPECTED(Z_TYPE_P(value) == IS_OBJECT)) {
					break;
				}
			}
			if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
				ZVAL_UNDEFINED_OP1();
				if (UNEXPECTED(EG(exception) != NULL)) {
					HANDLE_EXCEPTION();
				}
			}
			zend_throw_error(NULL, "Can only throw objects");


			HANDLE_EXCEPTION();
		}
	} while (0);

	zend_exception_save();
	Z_TRY_ADDREF_P(value);
	zend_throw_exception_object(value);
	zend_exception_restore();


	HANDLE_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_SEND_USER_SPEC_CV_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *arg, *param;

	SAVE_OPLINE();

	arg = _get_zval_ptr_cv_deref_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
	param = ZEND_CALL_VAR(EX(call), opline->result.var);
	if (UNEXPECTED(ARG_MUST_BE_SENT_BY_REF(EX(call)->func, opline->op2.num))) {
		zend_param_must_be_ref(EX(call)->func, opline->op2.num);
		Z_TRY_ADDREF_P(arg);
		ZVAL_NEW_REF(param, arg);
	} else {
		ZVAL_COPY(param, arg);
	}


	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_BOOL_SPEC_CV_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *val;

	val = EX_VAR(opline->op1.var);
	if (Z_TYPE_INFO_P(val) == IS_TRUE) {
		ZVAL_TRUE(EX_VAR(opline->result.var));
	} else if (EXPECTED(Z_TYPE_INFO_P(val) <= IS_TRUE)) {
		/* The result and op1 can be the same cv zval */
		const uint32_t orig_val_type = Z_TYPE_INFO_P(val);
		ZVAL_FALSE(EX_VAR(opline->result.var));
		if (IS_CV == IS_CV && UNEXPECTED(orig_val_type == IS_UNDEF)) {
			SAVE_OPLINE();
			ZVAL_UNDEFINED_OP1();
			ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
		}
	} else {
		SAVE_OPLINE();
		ZVAL_BOOL(EX_VAR(opline->result.var), i_zend_is_true(val));


		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
	}
	ZEND_VM_NEXT_OPCODE();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_CLONE_SPEC_CV_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *obj;
	zend_object *zobj;
	zend_class_entry *ce, *scope;
	zend_function *clone;
	zend_object_clone_obj_t clone_call;

	SAVE_OPLINE();
	obj = EX_VAR(opline->op1.var);

	/* ZEND_CLONE also exists as the clone() function and both implementations must be kept in sync.
	 * The OPcode intentionally does not support a clone-with property list to keep it simple. */

	do {
		if (IS_CV == IS_CONST ||
		    (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(obj) != IS_OBJECT))) {
			if ((IS_CV & (IS_VAR|IS_CV)) && Z_ISREF_P(obj)) {
				obj = Z_REFVAL_P(obj);
				if (EXPECTED(Z_TYPE_P(obj) == IS_OBJECT)) {
					break;
				}
			}
			ZVAL_UNDEF(EX_VAR(opline->result.var));
			if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(obj) == IS_UNDEF)) {
				ZVAL_UNDEFINED_OP1();
				if (UNEXPECTED(EG(exception) != NULL)) {
					HANDLE_EXCEPTION();
				}
			}
			zend_type_error("clone(): Argument #1 ($object) must be of type object, %s given", zend_zval_value_name(obj));


			HANDLE_EXCEPTION();
		}
	} while (0);

	zobj = Z_OBJ_P(obj);
	ce = zobj->ce;
	clone = ce->clone;
	clone_call = zobj->handlers->clone_obj;
	if (UNEXPECTED(clone_call == NULL)) {
		zend_throw_error(NULL, "Trying to clone an uncloneable object of class %s", ZSTR_VAL(ce->name));


		ZVAL_UNDEF(EX_VAR(opline->result.var));
		HANDLE_EXCEPTION();
	}

	if (clone && !(clone->common.fn_flags & ZEND_ACC_PUBLIC)) {
		scope = EX(func)->op_array.scope;
		ZEND_ASSERT(!(clone->common.fn_flags & ZEND_ACC_PUBLIC));
		if (!zend_check_method_accessible(clone, scope)) {
			zend_bad_method_call(clone, clone->common.function_name, scope);


			ZVAL_UNDEF(EX_VAR(opline->result.var));
			HANDLE_EXCEPTION();
		}
	}

	ZVAL_OBJ(EX_VAR(opline->result.var), clone_call(zobj));


	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_CAST_SPEC_CV_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *expr;
	zval *result = EX_VAR(opline->result.var);

	SAVE_OPLINE();
	expr = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);

	switch (opline->extended_value) {
		case IS_LONG:
			ZVAL_LONG(result, zval_get_long(expr));
			break;
		case IS_DOUBLE:
			ZVAL_DOUBLE(result, zval_get_double(expr));
			break;
		case IS_STRING:
			ZVAL_STR(result, zval_get_string(expr));
			break;
		default:
			ZEND_ASSERT(opline->extended_value != _IS_BOOL && "Must use ZEND_BOOL instead");
			if (IS_CV & (IS_VAR|IS_CV)) {
				ZVAL_DEREF(expr);
			}
			/* If value is already of correct type, return it directly */
			if (Z_TYPE_P(expr) == opline->extended_value) {
				ZVAL_COPY_VALUE(result, expr);
				if (IS_CV == IS_CONST) {
					if (UNEXPECTED(Z_OPT_REFCOUNTED_P(result))) Z_ADDREF_P(result);
				} else if (IS_CV != IS_TMP_VAR) {
					if (Z_OPT_REFCOUNTED_P(result)) Z_ADDREF_P(result);
				}


				ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
			}

			if (opline->extended_value == IS_ARRAY) {
				zend_cast_zval_to_array(result, expr, IS_CV);
			} else {
				ZEND_ASSERT(opline->extended_value == IS_OBJECT);
				zend_cast_zval_to_object(result, expr, IS_CV);
			}
	}


	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_INCLUDE_OR_EVAL_SPEC_CV_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zend_op_array *new_op_array;
	zval *inc_filename;

	SAVE_OPLINE();
	inc_filename = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
	new_op_array = zend_include_or_eval(inc_filename, opline->extended_value);
	if (UNEXPECTED(EG(exception) != NULL)) {


		if (new_op_array != ZEND_FAKE_OP_ARRAY && new_op_array != NULL) {
			destroy_op_array(new_op_array);
			efree_size(new_op_array, sizeof(zend_op_array));
		}
		UNDEF_RESULT();
		HANDLE_EXCEPTION();
	} else if (new_op_array == ZEND_FAKE_OP_ARRAY) {
		if (RETURN_VALUE_USED(opline)) {
			ZVAL_TRUE(EX_VAR(opline->result.var));
		}
	} else if (UNEXPECTED(new_op_array == NULL)) {
		if (RETURN_VALUE_USED(opline)) {
			ZVAL_FALSE(EX_VAR(opline->result.var));
		}
	} else if (new_op_array->last == 1
			&& new_op_array->opcodes[0].opcode == ZEND_RETURN
			&& new_op_array->opcodes[0].op1_type == IS_CONST
			&& EXPECTED(zend_execute_ex == execute_ex)) {
		if (RETURN_VALUE_USED(opline)) {
			const zend_op *op = new_op_array->opcodes;

			ZVAL_COPY(EX_VAR(opline->result.var), RT_CONSTANT(op, op->op1));
		}
		zend_destroy_static_vars(new_op_array);
		destroy_op_array(new_op_array);
		efree_size(new_op_array, sizeof(zend_op_array));
	} else {
		zval *return_value = NULL;
		zend_execute_data *call;
		if (RETURN_VALUE_USED(opline)) {
			return_value = EX_VAR(opline->result.var);
		}

		new_op_array->scope = EX(func)->op_array.scope;

		call = zend_vm_stack_push_call_frame(
			(Z_TYPE_INFO(EX(This)) & ZEND_CALL_HAS_THIS) | ZEND_CALL_NESTED_CODE | ZEND_CALL_HAS_SYMBOL_TABLE,
			(zend_function*)new_op_array, 0,
			Z_PTR(EX(This)));

		if (EX_CALL_INFO() & ZEND_CALL_HAS_SYMBOL_TABLE) {
			call->symbol_table = EX(symbol_table);
		} else {
			call->symbol_table = zend_rebuild_symbol_table();
		}

		call->prev_execute_data = execute_data;
		i_init_code_execute_data(call, new_op_array, return_value);


		if (EXPECTED(zend_execute_ex == execute_ex)) {


			ZEND_VM_ENTER();
		} else {
			ZEND_ADD_CALL_FLAG(call, ZEND_CALL_TOP);
			zend_execute_ex(call);
			zend_vm_stack_free_call_frame(call);
		}

		zend_destroy_static_vars(new_op_array);
		destroy_op_array(new_op_array);
		efree_size(new_op_array, sizeof(zend_op_array));
		if (UNEXPECTED(EG(exception) != NULL)) {
			zend_rethrow_exception(execute_data);


			UNDEF_RESULT();
			HANDLE_EXCEPTION();
		}
	}


	ZEND_VM_NEXT_OPCODE();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_FE_RESET_R_SPEC_CV_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *array_ptr, *result;

	SAVE_OPLINE();

	array_ptr = _get_zval_ptr_cv_deref_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
	if (EXPECTED(Z_TYPE_P(array_ptr) == IS_ARRAY)) {
		result = EX_VAR(opline->result.var);
		ZVAL_COPY_VALUE(result, array_ptr);
		if (IS_CV != IS_TMP_VAR && Z_OPT_REFCOUNTED_P(result)) {
			Z_ADDREF_P(array_ptr);
		}
		Z_FE_POS_P(result) = 0;


		ZEND_VM_NEXT_OPCODE();
	} else if (IS_CV != IS_CONST && EXPECTED(Z_TYPE_P(array_ptr) == IS_OBJECT)) {
		zend_object *zobj = Z_OBJ_P(array_ptr);
		if (!zobj->ce->get_iterator) {
			if (UNEXPECTED(zend_object_is_lazy(zobj))) {
				zobj = zend_lazy_object_init(zobj);
				if (UNEXPECTED(EG(exception))) {
					UNDEF_RESULT();


					HANDLE_EXCEPTION();
				}
			}
			HashTable *properties = zobj->properties;
			if (properties) {
				if (UNEXPECTED(GC_REFCOUNT(properties) > 1)) {
					if (EXPECTED(!(GC_FLAGS(properties) & IS_ARRAY_IMMUTABLE))) {
						GC_DELREF(properties);
					}
					properties = zobj->properties = zend_array_dup(properties);
				}
			} else {
				properties = zobj->handlers->get_properties(zobj);
			}

			result = EX_VAR(opline->result.var);
			ZVAL_COPY_VALUE(result, array_ptr);
			if (IS_CV != IS_TMP_VAR) {
				Z_ADDREF_P(array_ptr);
			}

			if (zend_hash_num_elements(properties) == 0) {
				Z_FE_ITER_P(result) = (uint32_t) -1;


				ZEND_VM_JMP(OP_JMP_ADDR(opline, opline->op2));
			}

			Z_FE_ITER_P(result) = zend_hash_iterator_add(properties, 0);


			ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
		} else {
			bool is_empty = zend_fe_reset_iterator(array_ptr, 0 OPLINE_CC EXECUTE_DATA_CC);


			if (UNEXPECTED(EG(exception))) {
				HANDLE_EXCEPTION();
			} else if (is_empty) {
				ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0);
			} else {
				ZEND_VM_NEXT_OPCODE();
			}
		}
	} else {
		zend_error(E_WARNING, "foreach() argument must be of type array|object, %s given", zend_zval_value_name(array_ptr));
		ZVAL_UNDEF(EX_VAR(opline->result.var));
		Z_FE_ITER_P(EX_VAR(opline->result.var)) = (uint32_t)-1;


		ZEND_VM_JMP(OP_JMP_ADDR(opline, opline->op2));
	}
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_FE_RESET_RW_SPEC_CV_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *array_ptr, *array_ref;

	SAVE_OPLINE();

	if (IS_CV == IS_VAR || IS_CV == IS_CV) {
		array_ref = array_ptr = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
		if (Z_ISREF_P(array_ref)) {
			array_ptr = Z_REFVAL_P(array_ref);
		}
	} else {
		array_ref = array_ptr = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
	}

	if (EXPECTED(Z_TYPE_P(array_ptr) == IS_ARRAY)) {
		if (IS_CV == IS_VAR || IS_CV == IS_CV) {
			if (array_ptr == array_ref) {
				ZVAL_NEW_REF(array_ref, array_ref);
				array_ptr = Z_REFVAL_P(array_ref);
			}
			Z_ADDREF_P(array_ref);
			ZVAL_COPY_VALUE(EX_VAR(opline->result.var), array_ref);
		} else {
			array_ref = EX_VAR(opline->result.var);
			ZVAL_NEW_REF(array_ref, array_ptr);
			array_ptr = Z_REFVAL_P(array_ref);
		}
		if (IS_CV == IS_CONST) {
			ZVAL_ARR(array_ptr, zend_array_dup(Z_ARRVAL_P(array_ptr)));
		} else {
			SEPARATE_ARRAY(array_ptr);
		}
		Z_FE_ITER_P(EX_VAR(opline->result.var)) = zend_hash_iterator_add(Z_ARRVAL_P(array_ptr), 0);


		ZEND_VM_NEXT_OPCODE();
	} else if (IS_CV != IS_CONST && EXPECTED(Z_TYPE_P(array_ptr) == IS_OBJECT)) {
		if (!Z_OBJCE_P(array_ptr)->get_iterator) {
			zend_object *zobj = Z_OBJ_P(array_ptr);
			HashTable *properties;
			if (UNEXPECTED(zend_object_is_lazy(zobj))) {
				zobj = zend_lazy_object_init(zobj);
				if (UNEXPECTED(EG(exception))) {
					UNDEF_RESULT();


					HANDLE_EXCEPTION();
				}
			}
			if (IS_CV == IS_VAR || IS_CV == IS_CV) {
				if (array_ptr == array_ref) {
					ZVAL_NEW_REF(array_ref, array_ref);
					array_ptr = Z_REFVAL_P(array_ref);
				}
				Z_ADDREF_P(array_ref);
				ZVAL_COPY_VALUE(EX_VAR(opline->result.var), array_ref);
			} else {
				array_ptr = EX_VAR(opline->result.var);
				ZVAL_COPY_VALUE(array_ptr, array_ref);
			}
			if (Z_OBJ_P(array_ptr)->properties
			 && UNEXPECTED(GC_REFCOUNT(Z_OBJ_P(array_ptr)->properties) > 1)) {
				if (EXPECTED(!(GC_FLAGS(Z_OBJ_P(array_ptr)->properties) & IS_ARRAY_IMMUTABLE))) {
					GC_DELREF(Z_OBJ_P(array_ptr)->properties);
				}
				Z_OBJ_P(array_ptr)->properties = zend_array_dup(Z_OBJ_P(array_ptr)->properties);
			}

			properties = Z_OBJPROP_P(array_ptr);
			if (zend_hash_num_elements(properties) == 0) {
				Z_FE_ITER_P(EX_VAR(opline->result.var)) = (uint32_t) -1;


				ZEND_VM_JMP(OP_JMP_ADDR(opline, opline->op2));
			}

			Z_FE_ITER_P(EX_VAR(opline->result.var)) = zend_hash_iterator_add(properties, 0);


			ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
		} else {
			bool is_empty = zend_fe_reset_iterator(array_ptr, 1 OPLINE_CC EXECUTE_DATA_CC);


			if (UNEXPECTED(EG(exception))) {
				HANDLE_EXCEPTION();
			} else if (is_empty) {
				ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0);
			} else {
				ZEND_VM_NEXT_OPCODE();
			}
		}
	} else {
		zend_error(E_WARNING, "foreach() argument must be of type array|object, %s given", zend_zval_value_name(array_ptr));
		ZVAL_UNDEF(EX_VAR(opline->result.var));
		Z_FE_ITER_P(EX_VAR(opline->result.var)) = (uint32_t)-1;


		ZEND_VM_JMP(OP_JMP_ADDR(opline, opline->op2));
	}
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_JMP_SET_SPEC_CV_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *value;
	zend_reference *ref = NULL;
	bool ret;

	SAVE_OPLINE();
	value = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);

	if ((IS_CV == IS_VAR || IS_CV == IS_CV) && Z_ISREF_P(value)) {
		if (IS_CV == IS_VAR) {
			ref = Z_REF_P(value);
		}
		value = Z_REFVAL_P(value);
	}

	ret = i_zend_is_true(value);

	if (UNEXPECTED(EG(exception))) {


		ZVAL_UNDEF(EX_VAR(opline->result.var));
		HANDLE_EXCEPTION();
	}

	if (ret) {
		zval *result = EX_VAR(opline->result.var);

		ZVAL_COPY_VALUE(result, value);
		if (IS_CV == IS_CONST) {
			if (UNEXPECTED(Z_OPT_REFCOUNTED_P(result))) Z_ADDREF_P(result);
		} else if (IS_CV == IS_CV) {
			if (Z_OPT_REFCOUNTED_P(result)) Z_ADDREF_P(result);
		} else if (IS_CV == IS_VAR && ref) {
			if (UNEXPECTED(GC_DELREF(ref) == 0)) {
				efree_size(ref, sizeof(zend_reference));
			} else if (Z_OPT_REFCOUNTED_P(result)) {
				Z_ADDREF_P(result);
			}
		}
		ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0);
	}


	ZEND_VM_NEXT_OPCODE();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_COALESCE_SPEC_CV_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *value;
	zend_reference *ref = NULL;

	SAVE_OPLINE();
	value = _get_zval_ptr_cv_BP_VAR_IS(opline->op1.var EXECUTE_DATA_CC);

	if ((IS_CV & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) {
		if (IS_CV & IS_VAR) {
			ref = Z_REF_P(value);
		}
		value = Z_REFVAL_P(value);
	}

	if (Z_TYPE_P(value) > IS_NULL) {
		zval *result = EX_VAR(opline->result.var);
		ZVAL_COPY_VALUE(result, value);
		if (IS_CV == IS_CONST) {
			if (UNEXPECTED(Z_OPT_REFCOUNTED_P(result))) Z_ADDREF_P(result);
		} else if (IS_CV == IS_CV) {
			if (Z_OPT_REFCOUNTED_P(result)) Z_ADDREF_P(result);
		} else if ((IS_CV & IS_VAR) && ref) {
			if (UNEXPECTED(GC_DELREF(ref) == 0)) {
				efree_size(ref, sizeof(zend_reference));
			} else if (Z_OPT_REFCOUNTED_P(result)) {
				Z_ADDREF_P(result);
			}
		}
		ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0);
	}

	if ((IS_CV & IS_VAR) && ref) {
		if (UNEXPECTED(GC_DELREF(ref) == 0)) {
			efree_size(ref, sizeof(zend_reference));
		}
	}
	ZEND_VM_NEXT_OPCODE();
}

static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_JMP_NULL_SPEC_CV_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *val, *result;

	val = EX_VAR(opline->op1.var);

	if (Z_TYPE_P(val) > IS_NULL) {
		do {
			if ((IS_CV == IS_CV || IS_CV == IS_VAR) && Z_TYPE_P(val) == IS_REFERENCE) {
				val = Z_REFVAL_P(val);
				if (Z_TYPE_P(val) <= IS_NULL) {


					break;
				}
			}
			ZEND_VM_NEXT_OPCODE();
		} while (0);
	}

	result = EX_VAR(opline->result.var);
	uint32_t short_circuiting_type = opline->extended_value & ZEND_SHORT_CIRCUITING_CHAIN_MASK;
	if (EXPECTED(short_circuiting_type == ZEND_SHORT_CIRCUITING_CHAIN_EXPR)) {
		ZVAL_NULL(result);
		if (IS_CV == IS_CV
			&& UNEXPECTED(Z_TYPE_P(val) == IS_UNDEF)
			&& (opline->extended_value & ZEND_JMP_NULL_BP_VAR_IS) == 0
		) {
			SAVE_OPLINE();
			ZVAL_UNDEFINED_OP1();
			if (UNEXPECTED(EG(exception) != NULL)) {
				HANDLE_EXCEPTION();
			}
		}
	} else if (short_circuiting_type == ZEND_SHORT_CIRCUITING_CHAIN_ISSET) {
		ZVAL_FALSE(result);
	} else {
		ZEND_ASSERT(short_circuiting_type == ZEND_SHORT_CIRCUITING_CHAIN_EMPTY);
		ZVAL_TRUE(result);
	}

	ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0);
}

static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_QM_ASSIGN_SPEC_CV_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *value;
	zval *result = EX_VAR(opline->result.var);

	value = EX_VAR(opline->op1.var);
	if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
		SAVE_OPLINE();
		ZVAL_UNDEFINED_OP1();
		ZVAL_NULL(result);
		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
	}

	if (IS_CV == IS_CV) {
		ZVAL_COPY_DEREF(result, value);
	} else if (IS_CV == IS_VAR) {
		if (UNEXPECTED(Z_ISREF_P(value))) {
			ZVAL_COPY_VALUE(result, Z_REFVAL_P(value));
			if (UNEXPECTED(Z_DELREF_P(value) == 0)) {
				efree_size(Z_REF_P(value), sizeof(zend_reference));
			} else if (Z_OPT_REFCOUNTED_P(result)) {
				Z_ADDREF_P(result);
			}
		} else {
			ZVAL_COPY_VALUE(result, value);
		}
	} else {
		ZVAL_COPY_VALUE(result, value);
		if (IS_CV == IS_CONST) {
			if (UNEXPECTED(Z_OPT_REFCOUNTED_P(result))) {
				Z_ADDREF_P(result);
			}
		}
	}
	ZEND_VM_NEXT_OPCODE();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_YIELD_FROM_SPEC_CV_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C);
	zval *val;

	SAVE_OPLINE();
	val = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);

	if (UNEXPECTED(generator->flags & ZEND_GENERATOR_FORCED_CLOSE)) {
		zend_throw_error(NULL, "Cannot use \"yield from\" in a force-closed generator");


		UNDEF_RESULT();
		HANDLE_EXCEPTION();
	}

yield_from_try_again:
	if (Z_TYPE_P(val) == IS_ARRAY) {
		ZVAL_COPY_VALUE(&generator->values, val);
		if (Z_OPT_REFCOUNTED_P(val)) {
			Z_ADDREF_P(val);
		}
		Z_FE_POS(generator->values) = 0;


	} else if (IS_CV != IS_CONST && Z_TYPE_P(val) == IS_OBJECT && Z_OBJCE_P(val)->get_iterator) {
		zend_class_entry *ce = Z_OBJCE_P(val);
		if (ce == zend_ce_generator) {
			zend_generator *new_gen = (zend_generator *) Z_OBJ_P(val);

			Z_ADDREF_P(val);


			if (UNEXPECTED(new_gen->execute_data == NULL)) {
				zend_throw_error(NULL, "Generator passed to yield from was aborted without proper return and is unable to continue");
				zval_ptr_dtor(val);
				UNDEF_RESULT();
				HANDLE_EXCEPTION();
			} else if (Z_ISUNDEF(new_gen->retval)) {
				if (UNEXPECTED(zend_generator_get_current(new_gen) == generator)) {
					zend_throw_error(NULL, "Impossible to yield from the Generator being currently run");
					zval_ptr_dtor(val);
					UNDEF_RESULT();
					HANDLE_EXCEPTION();
				} else {
					zend_generator_yield_from(generator, new_gen);
				}
			} else {
				if (RETURN_VALUE_USED(opline)) {
					ZVAL_COPY(EX_VAR(opline->result.var), &new_gen->retval);
				}
				ZEND_VM_NEXT_OPCODE();
			}
		} else {
			zend_object_iterator *iter = ce->get_iterator(ce, val, 0);


			if (UNEXPECTED(!iter) || UNEXPECTED(EG(exception))) {
				if (!EG(exception)) {
					zend_throw_error(NULL, "Object of type %s did not create an Iterator", ZSTR_VAL(ce->name));
				}
				UNDEF_RESULT();
				HANDLE_EXCEPTION();
			}

			iter->index = 0;
			if (iter->funcs->rewind) {
				iter->funcs->rewind(iter);
				if (UNEXPECTED(EG(exception) != NULL)) {
					OBJ_RELEASE(&iter->std);
					UNDEF_RESULT();
					HANDLE_EXCEPTION();
				}
			}

			ZVAL_OBJ(&generator->values, &iter->std);
		}
	} else if ((IS_CV & (IS_VAR|IS_CV)) && Z_TYPE_P(val) == IS_REFERENCE) {
		val = Z_REFVAL_P(val);
		goto yield_from_try_again;
	} else {
		zend_throw_error(NULL, "Can use \"yield from\" only with arrays and Traversables");


		UNDEF_RESULT();
		HANDLE_EXCEPTION();
	}

	/* This is the default return value
	 * when the expression is a Generator, it will be overwritten in zend_generator_resume() */
	if (RETURN_VALUE_USED(opline)) {
		ZVAL_NULL(EX_VAR(opline->result.var));
	}

	/* This generator has no send target (though the generator we delegate to might have one) */
	generator->send_target = NULL;

	/* The GOTO VM uses a local opline variable. We need to set the opline
	 * variable in execute_data so we don't resume at an old position. */
	SAVE_OPLINE();

	ZEND_VM_RETURN();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_STRLEN_SPEC_CV_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *value;

	value = EX_VAR(opline->op1.var);
	if (EXPECTED(Z_TYPE_P(value) == IS_STRING)) {
		ZVAL_LONG(EX_VAR(opline->result.var), Z_STRLEN_P(value));
		if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
			zval_ptr_dtor_str(value);
		}
		ZEND_VM_NEXT_OPCODE();
	} else {
		bool strict;

		if ((IS_CV & (IS_VAR|IS_CV)) && Z_TYPE_P(value) == IS_REFERENCE) {
			value = Z_REFVAL_P(value);
			if (EXPECTED(Z_TYPE_P(value) == IS_STRING)) {
				ZVAL_LONG(EX_VAR(opline->result.var), Z_STRLEN_P(value));


				ZEND_VM_NEXT_OPCODE();
			}
		}

		SAVE_OPLINE();
		if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
			value = ZVAL_UNDEFINED_OP1();
		}
		strict = EX_USES_STRICT_TYPES();
		do {
			if (EXPECTED(!strict)) {
				zend_string *str;
				zval tmp;

				if (UNEXPECTED(Z_TYPE_P(value) == IS_NULL)) {
					zend_error(E_DEPRECATED,
						"strlen(): Passing null to parameter #1 ($string) of type string is deprecated");
					ZVAL_LONG(EX_VAR(opline->result.var), 0);
					if (UNEXPECTED(EG(exception))) {
						HANDLE_EXCEPTION();
					}
					break;
				}

				ZVAL_COPY(&tmp, value);
				if (zend_parse_arg_str_weak(&tmp, &str, 1)) {
					ZVAL_LONG(EX_VAR(opline->result.var), ZSTR_LEN(str));
					zval_ptr_dtor(&tmp);
					break;
				}
				zval_ptr_dtor(&tmp);
			}
			if (!EG(exception)) {
				zend_type_error("strlen(): Argument #1 ($string) must be of type string, %s given", zend_zval_value_name(value));
			}
			ZVAL_UNDEF(EX_VAR(opline->result.var));
		} while (0);
	}


	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_TYPE_CHECK_SPEC_CV_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *value;
	int result = 0;

	value = EX_VAR(opline->op1.var);
	if ((opline->extended_value >> (uint32_t)Z_TYPE_P(value)) & 1) {
type_check_resource:
		if (opline->extended_value != MAY_BE_RESOURCE
		 || EXPECTED(NULL != zend_rsrc_list_get_rsrc_type(Z_RES_P(value)))) {
			result = 1;
		}
	} else if ((IS_CV & (IS_CV|IS_VAR)) && Z_ISREF_P(value)) {
		value = Z_REFVAL_P(value);
		if ((opline->extended_value >> (uint32_t)Z_TYPE_P(value)) & 1) {
			goto type_check_resource;
		}
	} else if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
		result = ((1 << IS_NULL) & opline->extended_value) != 0;
		SAVE_OPLINE();
		ZVAL_UNDEFINED_OP1();
		if (UNEXPECTED(EG(exception))) {
			ZVAL_UNDEF(EX_VAR(opline->result.var));
			HANDLE_EXCEPTION();
		}
	}
	if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
		SAVE_OPLINE();


		ZEND_VM_SMART_BRANCH(result, 1);
	} else {
		ZEND_VM_SMART_BRANCH(result, 0);
	}
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_FETCH_CLASS_NAME_SPEC_CV_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	uint32_t fetch_type;
	zend_class_entry *called_scope, *scope;
	USE_OPLINE

	if (IS_CV != IS_UNUSED) {
		SAVE_OPLINE();
		zval *op = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
		if (UNEXPECTED(Z_TYPE_P(op) != IS_OBJECT)) {
			ZVAL_DEREF(op);
			if (Z_TYPE_P(op) != IS_OBJECT) {
				zend_type_error("Cannot use \"::class\" on %s", zend_zval_value_name(op));
				ZVAL_UNDEF(EX_VAR(opline->result.var));


				HANDLE_EXCEPTION();
			}
		}

		ZVAL_STR_COPY(EX_VAR(opline->result.var), Z_OBJCE_P(op)->name);


		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
	}

	fetch_type = opline->op1.num;
	scope = EX(func)->op_array.scope;
	if (UNEXPECTED(scope == NULL)) {
		SAVE_OPLINE();
		zend_throw_error(NULL, "Cannot use \"%s\" in the global scope",
			fetch_type == ZEND_FETCH_CLASS_SELF ? "self" :
			fetch_type == ZEND_FETCH_CLASS_PARENT ? "parent" : "static");
		ZVAL_UNDEF(EX_VAR(opline->result.var));
		HANDLE_EXCEPTION();
	}

	switch (fetch_type) {
		case ZEND_FETCH_CLASS_SELF:
			ZVAL_STR_COPY(EX_VAR(opline->result.var), scope->name);
			break;
		case ZEND_FETCH_CLASS_PARENT:
			if (UNEXPECTED(scope->parent == NULL)) {
				SAVE_OPLINE();
				zend_throw_error(NULL,
					"Cannot use \"parent\" when current class scope has no parent");
				ZVAL_UNDEF(EX_VAR(opline->result.var));
				HANDLE_EXCEPTION();
			}
			ZVAL_STR_COPY(EX_VAR(opline->result.var), scope->parent->name);
			break;
		case ZEND_FETCH_CLASS_STATIC:
			if (Z_TYPE(EX(This)) == IS_OBJECT) {
				called_scope = Z_OBJCE(EX(This));
			} else {
				called_scope = Z_CE(EX(This));
			}
			ZVAL_STR_COPY(EX_VAR(opline->result.var), called_scope->name);
			break;
		EMPTY_SWITCH_DEFAULT_CASE()
	}
	ZEND_VM_NEXT_OPCODE();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_BIND_STATIC_SPEC_CV_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	HashTable *ht;
	zval *value;
	zval *variable_ptr;

	variable_ptr = EX_VAR(opline->op1.var);

	SAVE_OPLINE();

	ht = ZEND_MAP_PTR_GET(EX(func)->op_array.static_variables_ptr);
	if (!ht) {
		ht = zend_array_dup(EX(func)->op_array.static_variables);
		ZEND_MAP_PTR_SET(EX(func)->op_array.static_variables_ptr, ht);
	}
	ZEND_ASSERT(GC_REFCOUNT(ht) == 1);

	value = (zval*)((char*)ht->arData + (opline->extended_value & ~(ZEND_BIND_REF|ZEND_BIND_IMPLICIT|ZEND_BIND_EXPLICIT)));

	if (opline->extended_value & ZEND_BIND_REF) {
		if (UNEXPECTED(!Z_ISREF_P(value))) {
			zend_reference *ref = (zend_reference*)emalloc(sizeof(zend_reference));
			GC_SET_REFCOUNT(ref, 2);
			GC_TYPE_INFO(ref) = GC_REFERENCE;
			if (opline->op2_type == IS_UNUSED) {
				ZVAL_COPY_VALUE(&ref->val, value);
			} else {
				ZEND_ASSERT(!Z_REFCOUNTED_P(value));
				ZVAL_COPY(&ref->val, get_zval_ptr_deref(opline->op2_type, opline->op2, BP_VAR_R));
				FREE_OP(opline->op2_type, opline->op2.var);
			}
			ref->sources.ptr = NULL;
			Z_REF_P(value) = ref;
			Z_TYPE_INFO_P(value) = IS_REFERENCE_EX;
			i_zval_ptr_dtor(variable_ptr);
			ZVAL_REF(variable_ptr, ref);
		} else {
			Z_ADDREF_P(value);
			i_zval_ptr_dtor(variable_ptr);
			ZVAL_REF(variable_ptr, Z_REF_P(value));
			if (opline->op2_type != IS_UNUSED) {
				FREE_OP(opline->op2_type, opline->op2.var);
			}
		}
	} else {
		i_zval_ptr_dtor(variable_ptr);
		ZVAL_COPY(variable_ptr, value);
	}

	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_BIND_INIT_STATIC_OR_JMP_SPEC_CV_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	HashTable *ht;
	zval *value;
	zval *variable_ptr;

	variable_ptr = EX_VAR(opline->op1.var);

	ht = ZEND_MAP_PTR_GET(EX(func)->op_array.static_variables_ptr);
	if (!ht) {
		ZEND_VM_NEXT_OPCODE();
	}
	ZEND_ASSERT(GC_REFCOUNT(ht) == 1);

	value = (zval*)((char*)ht->arData + opline->extended_value);
	if (Z_TYPE_P(value) == IS_NULL) {
		ZEND_VM_NEXT_OPCODE();
	} else {
		SAVE_OPLINE();
		zval_ptr_dtor(variable_ptr);
		ZEND_ASSERT(Z_TYPE_P(value) == IS_REFERENCE);
		Z_ADDREF_P(value);
		ZVAL_REF(variable_ptr, Z_REF_P(value));
		ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 1);
	}
}

static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_PRE_INC_LONG_NO_OVERFLOW_SPEC_CV_RETVAL_UNUSED_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *var_ptr;

	var_ptr = EX_VAR(opline->op1.var);
	Z_LVAL_P(var_ptr)++;
	if (UNEXPECTED(0)) {
		ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(var_ptr));
	}
	ZEND_VM_NEXT_OPCODE();
}

static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_PRE_INC_LONG_NO_OVERFLOW_SPEC_CV_RETVAL_USED_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *var_ptr;

	var_ptr = EX_VAR(opline->op1.var);
	Z_LVAL_P(var_ptr)++;
	if (UNEXPECTED(1)) {
		ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(var_ptr));
	}
	ZEND_VM_NEXT_OPCODE();
}

static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_PRE_INC_LONG_SPEC_CV_RETVAL_UNUSED_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *var_ptr;

	var_ptr = EX_VAR(opline->op1.var);
	fast_long_increment_function(var_ptr);
	if (UNEXPECTED(0)) {
		ZVAL_COPY_VALUE(EX_VAR(opline->result.var), var_ptr);
	}
	ZEND_VM_NEXT_OPCODE();
}

static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_PRE_INC_LONG_SPEC_CV_RETVAL_USED_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *var_ptr;

	var_ptr = EX_VAR(opline->op1.var);
	fast_long_increment_function(var_ptr);
	if (UNEXPECTED(1)) {
		ZVAL_COPY_VALUE(EX_VAR(opline->result.var), var_ptr);
	}
	ZEND_VM_NEXT_OPCODE();
}

static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_PRE_DEC_LONG_NO_OVERFLOW_SPEC_CV_RETVAL_UNUSED_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *var_ptr;

	var_ptr = EX_VAR(opline->op1.var);
	Z_LVAL_P(var_ptr)--;
	if (UNEXPECTED(0)) {
		ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(var_ptr));
	}
	ZEND_VM_NEXT_OPCODE();
}

static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_PRE_DEC_LONG_NO_OVERFLOW_SPEC_CV_RETVAL_USED_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *var_ptr;

	var_ptr = EX_VAR(opline->op1.var);
	Z_LVAL_P(var_ptr)--;
	if (UNEXPECTED(1)) {
		ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(var_ptr));
	}
	ZEND_VM_NEXT_OPCODE();
}

static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_PRE_DEC_LONG_SPEC_CV_RETVAL_UNUSED_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *var_ptr;

	var_ptr = EX_VAR(opline->op1.var);
	fast_long_decrement_function(var_ptr);
	if (UNEXPECTED(0)) {
		ZVAL_COPY_VALUE(EX_VAR(opline->result.var), var_ptr);
	}
	ZEND_VM_NEXT_OPCODE();
}

static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_PRE_DEC_LONG_SPEC_CV_RETVAL_USED_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *var_ptr;

	var_ptr = EX_VAR(opline->op1.var);
	fast_long_decrement_function(var_ptr);
	if (UNEXPECTED(1)) {
		ZVAL_COPY_VALUE(EX_VAR(opline->result.var), var_ptr);
	}
	ZEND_VM_NEXT_OPCODE();
}

static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_POST_INC_LONG_NO_OVERFLOW_SPEC_CV_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *var_ptr;

	var_ptr = EX_VAR(opline->op1.var);
	ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(var_ptr));
	Z_LVAL_P(var_ptr)++;
	ZEND_VM_NEXT_OPCODE();
}

static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_POST_INC_LONG_SPEC_CV_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *var_ptr;

	var_ptr = EX_VAR(opline->op1.var);
	ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(var_ptr));
	fast_long_increment_function(var_ptr);
	ZEND_VM_NEXT_OPCODE();
}

static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_POST_DEC_LONG_NO_OVERFLOW_SPEC_CV_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *var_ptr;

	var_ptr = EX_VAR(opline->op1.var);
	ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(var_ptr));
	Z_LVAL_P(var_ptr)--;
	ZEND_VM_NEXT_OPCODE();
}

static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_POST_DEC_LONG_SPEC_CV_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *var_ptr;

	var_ptr = EX_VAR(opline->op1.var);
	ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(var_ptr));
	fast_long_decrement_function(var_ptr);
	ZEND_VM_NEXT_OPCODE();
}

static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_SEND_VAR_SIMPLE_SPEC_CV_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *varptr, *arg;

	varptr = EX_VAR(opline->op1.var);
	arg = ZEND_CALL_VAR(EX(call), opline->result.var);

	if (IS_CV == IS_CV) {
		ZVAL_COPY(arg, varptr);
	} else /* if (IS_CV == IS_VAR) */ {
		ZVAL_COPY_VALUE(arg, varptr);
	}

	ZEND_VM_NEXT_OPCODE();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_DIV_SPEC_CV_CONST_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;

	SAVE_OPLINE();
	op1 = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
	op2 = RT_CONSTANT(opline, opline->op2);
	div_function(EX_VAR(opline->result.var), op1, op2);




	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_POW_SPEC_CV_CONST_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;

	SAVE_OPLINE();
	op1 = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
	op2 = RT_CONSTANT(opline, opline->op2);
	pow_function(EX_VAR(opline->result.var), op1, op2);




	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_CONCAT_SPEC_CV_CONST_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;

	op1 = EX_VAR(opline->op1.var);
	op2 = RT_CONSTANT(opline, opline->op2);

	if ((IS_CV == IS_CONST || EXPECTED(Z_TYPE_P(op1) == IS_STRING)) &&
	    (IS_CONST == IS_CONST || EXPECTED(Z_TYPE_P(op2) == IS_STRING))) {
		zend_string *op1_str = Z_STR_P(op1);
		zend_string *op2_str = Z_STR_P(op2);
		zend_string *str;
		uint32_t flags = ZSTR_GET_COPYABLE_CONCAT_PROPERTIES_BOTH(op1_str, op2_str);

		if (IS_CV != IS_CONST && UNEXPECTED(ZSTR_LEN(op1_str) == 0)) {
			if (IS_CONST == IS_CONST || IS_CONST == IS_CV) {
				ZVAL_STR_COPY(EX_VAR(opline->result.var), op2_str);
			} else {
				ZVAL_STR(EX_VAR(opline->result.var), op2_str);
			}
			if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
				zend_string_release_ex(op1_str, 0);
			}
		} else if (IS_CONST != IS_CONST && UNEXPECTED(ZSTR_LEN(op2_str) == 0)) {
			if (IS_CV == IS_CONST || IS_CV == IS_CV) {
				ZVAL_STR_COPY(EX_VAR(opline->result.var), op1_str);
			} else {
				ZVAL_STR(EX_VAR(opline->result.var), op1_str);
			}
			if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
				zend_string_release_ex(op2_str, 0);
			}
		} else if (IS_CV != IS_CONST && IS_CV != IS_CV &&
		    !ZSTR_IS_INTERNED(op1_str) && GC_REFCOUNT(op1_str) == 1) {
			size_t len = ZSTR_LEN(op1_str);

			if (UNEXPECTED(len > ZSTR_MAX_LEN - ZSTR_LEN(op2_str))) {
				zend_error_noreturn(E_ERROR, "Integer overflow in memory allocation");
			}
			str = zend_string_extend(op1_str, len + ZSTR_LEN(op2_str), 0);
			memcpy(ZSTR_VAL(str) + len, ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
			GC_ADD_FLAGS(str, flags);
			ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
			if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
				zend_string_release_ex(op2_str, 0);
			}
		} else {
			str = zend_string_alloc(ZSTR_LEN(op1_str) + ZSTR_LEN(op2_str), 0);
			memcpy(ZSTR_VAL(str), ZSTR_VAL(op1_str), ZSTR_LEN(op1_str));
			memcpy(ZSTR_VAL(str) + ZSTR_LEN(op1_str), ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
			GC_ADD_FLAGS(str, flags);
			ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
			if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
				zend_string_release_ex(op1_str, 0);
			}
			if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
				zend_string_release_ex(op2_str, 0);
			}
		}
		ZEND_VM_NEXT_OPCODE();
	} else {
		SAVE_OPLINE();

		if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
			op1 = ZVAL_UNDEFINED_OP1();
		}
		if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(op2) == IS_UNDEF)) {
			op2 = ZVAL_UNDEFINED_OP2();
		}
		concat_function(EX_VAR(opline->result.var), op1, op2);




		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
	}
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_IS_IDENTICAL_SPEC_CV_CONST_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;
	bool result;

	SAVE_OPLINE();
	op1 = _get_zval_ptr_cv_deref_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
	op2 = RT_CONSTANT(opline, opline->op2);
	result = fast_is_identical_function(op1, op2);




	ZEND_VM_SMART_BRANCH(result, 1);
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_IS_NOT_IDENTICAL_SPEC_CV_CONST_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;
	bool result;

	SAVE_OPLINE();
	op1 = _get_zval_ptr_cv_deref_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
	op2 = RT_CONSTANT(opline, opline->op2);
	result = fast_is_not_identical_function(op1, op2);




	ZEND_VM_SMART_BRANCH(result, 1);
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_IS_EQUAL_SPEC_CV_CONST_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;
	double d1, d2;

	op1 = EX_VAR(opline->op1.var);
	op2 = RT_CONSTANT(opline, opline->op2);
	if (1 && IS_CV == IS_CONST && IS_CONST == IS_CONST) {
		/* pass */
	} else if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
		if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
			if (EXPECTED(Z_LVAL_P(op1) == Z_LVAL_P(op2))) {
is_equal_true:
				ZEND_VM_SMART_BRANCH_TRUE_NONE();
			} else {
is_equal_false:
				ZEND_VM_SMART_BRANCH_FALSE_NONE();
			}
		} else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
			d1 = (double)Z_LVAL_P(op1);
			d2 = Z_DVAL_P(op2);
			goto is_equal_double;
		}
	} else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) {
		if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
			d1 = Z_DVAL_P(op1);
			d2 = Z_DVAL_P(op2);
is_equal_double:
			if (d1 == d2) {
				goto is_equal_true;
			} else {
				goto is_equal_false;
			}
		} else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
			d1 = Z_DVAL_P(op1);
			d2 = (double)Z_LVAL_P(op2);
			goto is_equal_double;
		}
	} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
		if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
			bool result = zend_fast_equal_strings(Z_STR_P(op1), Z_STR_P(op2));
			if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
				zval_ptr_dtor_str(op1);
			}
			if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
				zval_ptr_dtor_str(op2);
			}
			if (result) {
				goto is_equal_true;
			} else {
				goto is_equal_false;
			}
		}
	}
	ZEND_VM_DISPATCH_TO_HELPER(zend_is_equal_helper_SPEC_TAILCALL(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_EX op1, op2));
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_IS_EQUAL_SPEC_CV_CONST_JMPZ_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;
	double d1, d2;

	op1 = EX_VAR(opline->op1.var);
	op2 = RT_CONSTANT(opline, opline->op2);
	if (1 && IS_CV == IS_CONST && IS_CONST == IS_CONST) {
		/* pass */
	} else if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
		if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
			if (EXPECTED(Z_LVAL_P(op1) == Z_LVAL_P(op2))) {
is_equal_true:
				ZEND_VM_SMART_BRANCH_TRUE_JMPZ();
			} else {
is_equal_false:
				ZEND_VM_SMART_BRANCH_FALSE_JMPZ();
			}
		} else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
			d1 = (double)Z_LVAL_P(op1);
			d2 = Z_DVAL_P(op2);
			goto is_equal_double;
		}
	} else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) {
		if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
			d1 = Z_DVAL_P(op1);
			d2 = Z_DVAL_P(op2);
is_equal_double:
			if (d1 == d2) {
				goto is_equal_true;
			} else {
				goto is_equal_false;
			}
		} else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
			d1 = Z_DVAL_P(op1);
			d2 = (double)Z_LVAL_P(op2);
			goto is_equal_double;
		}
	} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
		if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
			bool result = zend_fast_equal_strings(Z_STR_P(op1), Z_STR_P(op2));
			if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
				zval_ptr_dtor_str(op1);
			}
			if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
				zval_ptr_dtor_str(op2);
			}
			if (result) {
				goto is_equal_true;
			} else {
				goto is_equal_false;
			}
		}
	}
	ZEND_VM_DISPATCH_TO_HELPER(zend_is_equal_helper_SPEC_TAILCALL(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_EX op1, op2));
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_IS_EQUAL_SPEC_CV_CONST_JMPNZ_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;
	double d1, d2;

	op1 = EX_VAR(opline->op1.var);
	op2 = RT_CONSTANT(opline, opline->op2);
	if (1 && IS_CV == IS_CONST && IS_CONST == IS_CONST) {
		/* pass */
	} else if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
		if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
			if (EXPECTED(Z_LVAL_P(op1) == Z_LVAL_P(op2))) {
is_equal_true:
				ZEND_VM_SMART_BRANCH_TRUE_JMPNZ();
			} else {
is_equal_false:
				ZEND_VM_SMART_BRANCH_FALSE_JMPNZ();
			}
		} else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
			d1 = (double)Z_LVAL_P(op1);
			d2 = Z_DVAL_P(op2);
			goto is_equal_double;
		}
	} else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) {
		if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
			d1 = Z_DVAL_P(op1);
			d2 = Z_DVAL_P(op2);
is_equal_double:
			if (d1 == d2) {
				goto is_equal_true;
			} else {
				goto is_equal_false;
			}
		} else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
			d1 = Z_DVAL_P(op1);
			d2 = (double)Z_LVAL_P(op2);
			goto is_equal_double;
		}
	} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
		if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
			bool result = zend_fast_equal_strings(Z_STR_P(op1), Z_STR_P(op2));
			if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
				zval_ptr_dtor_str(op1);
			}
			if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
				zval_ptr_dtor_str(op2);
			}
			if (result) {
				goto is_equal_true;
			} else {
				goto is_equal_false;
			}
		}
	}
	ZEND_VM_DISPATCH_TO_HELPER(zend_is_equal_helper_SPEC_TAILCALL(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_EX op1, op2));
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_IS_NOT_EQUAL_SPEC_CV_CONST_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;
	double d1, d2;

	op1 = EX_VAR(opline->op1.var);
	op2 = RT_CONSTANT(opline, opline->op2);
	if (1 && IS_CV == IS_CONST && IS_CONST == IS_CONST) {
		/* pass */
	} else if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
		if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
			if (EXPECTED(Z_LVAL_P(op1) != Z_LVAL_P(op2))) {
is_not_equal_true:
				ZEND_VM_SMART_BRANCH_TRUE_NONE();
			} else {
is_not_equal_false:
				ZEND_VM_SMART_BRANCH_FALSE_NONE();
			}
		} else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
			d1 = (double)Z_LVAL_P(op1);
			d2 = Z_DVAL_P(op2);
			goto is_not_equal_double;
		}
	} else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) {
		if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
			d1 = Z_DVAL_P(op1);
			d2 = Z_DVAL_P(op2);
is_not_equal_double:
			if (d1 != d2) {
				goto is_not_equal_true;
			} else {
				goto is_not_equal_false;
			}
		} else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
			d1 = Z_DVAL_P(op1);
			d2 = (double)Z_LVAL_P(op2);
			goto is_not_equal_double;
		}
	} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
		if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
			bool result = zend_fast_equal_strings(Z_STR_P(op1), Z_STR_P(op2));
			if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
				zval_ptr_dtor_str(op1);
			}
			if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
				zval_ptr_dtor_str(op2);
			}
			if (!result) {
				goto is_not_equal_true;
			} else {
				goto is_not_equal_false;
			}
		}
	}
	ZEND_VM_DISPATCH_TO_HELPER(zend_is_not_equal_helper_SPEC_TAILCALL(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_EX op1, op2));
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_IS_NOT_EQUAL_SPEC_CV_CONST_JMPZ_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;
	double d1, d2;

	op1 = EX_VAR(opline->op1.var);
	op2 = RT_CONSTANT(opline, opline->op2);
	if (1 && IS_CV == IS_CONST && IS_CONST == IS_CONST) {
		/* pass */
	} else if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
		if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
			if (EXPECTED(Z_LVAL_P(op1) != Z_LVAL_P(op2))) {
is_not_equal_true:
				ZEND_VM_SMART_BRANCH_TRUE_JMPZ();
			} else {
is_not_equal_false:
				ZEND_VM_SMART_BRANCH_FALSE_JMPZ();
			}
		} else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
			d1 = (double)Z_LVAL_P(op1);
			d2 = Z_DVAL_P(op2);
			goto is_not_equal_double;
		}
	} else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) {
		if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
			d1 = Z_DVAL_P(op1);
			d2 = Z_DVAL_P(op2);
is_not_equal_double:
			if (d1 != d2) {
				goto is_not_equal_true;
			} else {
				goto is_not_equal_false;
			}
		} else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
			d1 = Z_DVAL_P(op1);
			d2 = (double)Z_LVAL_P(op2);
			goto is_not_equal_double;
		}
	} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
		if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
			bool result = zend_fast_equal_strings(Z_STR_P(op1), Z_STR_P(op2));
			if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
				zval_ptr_dtor_str(op1);
			}
			if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
				zval_ptr_dtor_str(op2);
			}
			if (!result) {
				goto is_not_equal_true;
			} else {
				goto is_not_equal_false;
			}
		}
	}
	ZEND_VM_DISPATCH_TO_HELPER(zend_is_not_equal_helper_SPEC_TAILCALL(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_EX op1, op2));
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_IS_NOT_EQUAL_SPEC_CV_CONST_JMPNZ_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;
	double d1, d2;

	op1 = EX_VAR(opline->op1.var);
	op2 = RT_CONSTANT(opline, opline->op2);
	if (1 && IS_CV == IS_CONST && IS_CONST == IS_CONST) {
		/* pass */
	} else if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
		if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
			if (EXPECTED(Z_LVAL_P(op1) != Z_LVAL_P(op2))) {
is_not_equal_true:
				ZEND_VM_SMART_BRANCH_TRUE_JMPNZ();
			} else {
is_not_equal_false:
				ZEND_VM_SMART_BRANCH_FALSE_JMPNZ();
			}
		} else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
			d1 = (double)Z_LVAL_P(op1);
			d2 = Z_DVAL_P(op2);
			goto is_not_equal_double;
		}
	} else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) {
		if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
			d1 = Z_DVAL_P(op1);
			d2 = Z_DVAL_P(op2);
is_not_equal_double:
			if (d1 != d2) {
				goto is_not_equal_true;
			} else {
				goto is_not_equal_false;
			}
		} else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
			d1 = Z_DVAL_P(op1);
			d2 = (double)Z_LVAL_P(op2);
			goto is_not_equal_double;
		}
	} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
		if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
			bool result = zend_fast_equal_strings(Z_STR_P(op1), Z_STR_P(op2));
			if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
				zval_ptr_dtor_str(op1);
			}
			if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
				zval_ptr_dtor_str(op2);
			}
			if (!result) {
				goto is_not_equal_true;
			} else {
				goto is_not_equal_false;
			}
		}
	}
	ZEND_VM_DISPATCH_TO_HELPER(zend_is_not_equal_helper_SPEC_TAILCALL(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_EX op1, op2));
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_SPACESHIP_SPEC_CV_CONST_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;

	SAVE_OPLINE();
	op1 = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
	op2 = RT_CONSTANT(opline, opline->op2);
	compare_function(EX_VAR(opline->result.var), op1, op2);




	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_BOOL_XOR_SPEC_CV_CONST_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;

	SAVE_OPLINE();
	op1 = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
	op2 = RT_CONSTANT(opline, opline->op2);
	boolean_xor_function(EX_VAR(opline->result.var), op1, op2);




	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_ASSIGN_OBJ_OP_SPEC_CV_CONST_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *object;
	zval *property;
	zval *value;
	zval *zptr;
	void *_cache_slot[3] = {0};
	void **cache_slot;
	zend_property_info *prop_info;
	zend_object *zobj;
	zend_string *name, *tmp_name;

	SAVE_OPLINE();
	object = EX_VAR(opline->op1.var);
	property = RT_CONSTANT(opline, opline->op2);

	do {
		value = get_op_data_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1);

		if (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
			if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
				object = Z_REFVAL_P(object);
				goto assign_op_object;
			}
			if (IS_CV == IS_CV
			 && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
				ZVAL_UNDEFINED_OP1();
			}
			zend_throw_non_object_error(object, property OPLINE_CC EXECUTE_DATA_CC);
			break;
		}

assign_op_object:
		/* here we are sure we are dealing with an object */
		zobj = Z_OBJ_P(object);
		if (IS_CONST == IS_CONST) {
			name = Z_STR_P(property);
		} else {
			name = zval_try_get_tmp_string(property, &tmp_name);
			if (UNEXPECTED(!name)) {
				UNDEF_RESULT();
				break;
			}
		}
		cache_slot = (IS_CONST == IS_CONST) ? CACHE_ADDR((opline+1)->extended_value) : _cache_slot;
		if (EXPECTED((zptr = zobj->handlers->get_property_ptr_ptr(zobj, name, BP_VAR_RW, cache_slot)) != NULL)) {
			if (UNEXPECTED(Z_ISERROR_P(zptr))) {
				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
					ZVAL_NULL(EX_VAR(opline->result.var));
				}
			} else {
				zend_reference *ref;

				do {
					if (UNEXPECTED(Z_ISREF_P(zptr))) {
						ref = Z_REF_P(zptr);
						zptr = Z_REFVAL_P(zptr);
						if (UNEXPECTED(ZEND_REF_HAS_TYPE_SOURCES(ref))) {
							zend_binary_assign_op_typed_ref(ref, value OPLINE_CC EXECUTE_DATA_CC);
							break;
						}
					}

					prop_info = (zend_property_info*)CACHED_PTR_EX(cache_slot + 2);
					if (prop_info && ZEND_TYPE_IS_SET(prop_info->type)) {
						/* special case for typed properties */
						zend_binary_assign_op_typed_prop(prop_info, zptr, value OPLINE_CC EXECUTE_DATA_CC);
					} else {
						zend_binary_op(zptr, zptr, value OPLINE_CC);
					}
				} while (0);

				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
					ZVAL_COPY(EX_VAR(opline->result.var), zptr);
				}
			}
		} else {
			zend_assign_op_overloaded_property(zobj, name, cache_slot, value OPLINE_CC EXECUTE_DATA_CC);
		}
		if (IS_CONST != IS_CONST) {
			zend_tmp_string_release(tmp_name);
		}
	} while (0);

	FREE_OP((opline+1)->op1_type, (opline+1)->op1.var);




	/* assign_obj has two opcodes! */
	ZEND_VM_NEXT_OPCODE_EX(1, 2);
}

/* No specialization for op_types (CONST|TMP|VAR|CV, UNUSED|CONST|TMPVAR) */
static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_ASSIGN_DIM_OP_SPEC_CV_CONST_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *var_ptr;
	zval *value, *container, *dim;
	HashTable *ht;

	SAVE_OPLINE();
	container = EX_VAR(opline->op1.var);

	if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
assign_dim_op_array:
		SEPARATE_ARRAY(container);
		ht = Z_ARRVAL_P(container);
assign_dim_op_new_array:
		dim = RT_CONSTANT(opline, opline->op2);
		if (IS_CONST == IS_UNUSED) {
			var_ptr = zend_hash_next_index_insert(ht, &EG(uninitialized_zval));
			if (UNEXPECTED(!var_ptr)) {
				zend_cannot_add_element();
				goto assign_dim_op_ret_null;
			}
		} else {
			if (IS_CONST == IS_CONST) {
				var_ptr = zend_fetch_dimension_address_inner_RW_CONST(ht, dim EXECUTE_DATA_CC);
			} else {
				var_ptr = zend_fetch_dimension_address_inner_RW(ht, dim EXECUTE_DATA_CC);
			}
			if (UNEXPECTED(!var_ptr)) {
				goto assign_dim_op_ret_null;
			}
		}

		value = get_op_data_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1);

		do {
			if (IS_CONST != IS_UNUSED && UNEXPECTED(Z_ISREF_P(var_ptr))) {
				zend_reference *ref = Z_REF_P(var_ptr);
				var_ptr = Z_REFVAL_P(var_ptr);
				if (UNEXPECTED(ZEND_REF_HAS_TYPE_SOURCES(ref))) {
					zend_binary_assign_op_typed_ref(ref, value OPLINE_CC EXECUTE_DATA_CC);
					break;
				}
			}
			zend_binary_op(var_ptr, var_ptr, value OPLINE_CC);
		} while (0);

		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
			ZVAL_COPY(EX_VAR(opline->result.var), var_ptr);
		}
		FREE_OP((opline+1)->op1_type, (opline+1)->op1.var);
	} else {
		if (EXPECTED(Z_ISREF_P(container))) {
			container = Z_REFVAL_P(container);
			if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
				goto assign_dim_op_array;
			}
		}

		if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
			zend_object *obj = Z_OBJ_P(container);

			dim = RT_CONSTANT(opline, opline->op2);
			if (IS_CONST == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
				dim++;
			}
			zend_binary_assign_op_obj_dim(obj, dim OPLINE_CC EXECUTE_DATA_CC);
		} else if (EXPECTED(Z_TYPE_P(container) <= IS_FALSE)) {
			uint8_t old_type;

			if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(container) == IS_UNDEF)) {
				ZVAL_UNDEFINED_OP1();
			}
			ht = zend_new_array(8);
			old_type = Z_TYPE_P(container);
			ZVAL_ARR(container, ht);
			if (UNEXPECTED(old_type == IS_FALSE)) {
				GC_ADDREF(ht);
				zend_false_to_array_deprecated();
				if (UNEXPECTED(GC_DELREF(ht) == 0)) {
					zend_array_destroy(ht);
					goto assign_dim_op_ret_null;
				}
			}
			goto assign_dim_op_new_array;
		} else {
			dim = RT_CONSTANT(opline, opline->op2);
			zend_binary_assign_op_dim_slow(container, dim OPLINE_CC EXECUTE_DATA_CC);
assign_dim_op_ret_null:
			FREE_OP((opline+1)->op1_type, (opline+1)->op1.var);
			if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
				ZVAL_NULL(EX_VAR(opline->result.var));
			}
		}
	}




	ZEND_VM_NEXT_OPCODE_EX(1, 2);
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_ASSIGN_OP_SPEC_CV_CONST_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *var_ptr;
	zval *value;

	SAVE_OPLINE();
	value = RT_CONSTANT(opline, opline->op2);
	var_ptr = _get_zval_ptr_cv_BP_VAR_RW(opline->op1.var EXECUTE_DATA_CC);

	do {
		if (UNEXPECTED(Z_TYPE_P(var_ptr) == IS_REFERENCE)) {
			zend_reference *ref = Z_REF_P(var_ptr);
			var_ptr = Z_REFVAL_P(var_ptr);
			if (UNEXPECTED(ZEND_REF_HAS_TYPE_SOURCES(ref))) {
				zend_binary_assign_op_typed_ref(ref, value OPLINE_CC EXECUTE_DATA_CC);
				break;
			}
		}
		zend_binary_op(var_ptr, var_ptr, value OPLINE_CC);
	} while (0);

	if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
		ZVAL_COPY(EX_VAR(opline->result.var), var_ptr);
	}




	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_PRE_INC_OBJ_SPEC_CV_CONST_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *object;
	zval *property;
	zval *zptr;
	void *_cache_slot[3] = {0};
	void **cache_slot;
	zend_property_info *prop_info;
	zend_object *zobj;
	zend_string *name, *tmp_name;

	SAVE_OPLINE();
	object = EX_VAR(opline->op1.var);
	property = RT_CONSTANT(opline, opline->op2);

	do {
		if (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
			if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
				object = Z_REFVAL_P(object);
				goto pre_incdec_object;
			}
			if (IS_CV == IS_CV
			 && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
				ZVAL_UNDEFINED_OP1();
			}
			zend_throw_non_object_error(object, property OPLINE_CC EXECUTE_DATA_CC);
			break;
		}

pre_incdec_object:
		/* here we are sure we are dealing with an object */
		zobj = Z_OBJ_P(object);
		if (IS_CONST == IS_CONST) {
			name = Z_STR_P(property);
		} else {
			name = zval_try_get_tmp_string(property, &tmp_name);
			if (UNEXPECTED(!name)) {
				UNDEF_RESULT();
				break;
			}
		}
		cache_slot = (IS_CONST == IS_CONST) ? CACHE_ADDR(opline->extended_value) : _cache_slot;
		if (EXPECTED((zptr = zobj->handlers->get_property_ptr_ptr(zobj, name, BP_VAR_RW, cache_slot)) != NULL)) {
			if (UNEXPECTED(Z_ISERROR_P(zptr))) {
				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
					ZVAL_NULL(EX_VAR(opline->result.var));
				}
			} else {
				prop_info = (zend_property_info *) CACHED_PTR_EX(cache_slot + 2);
				zend_pre_incdec_property_zval(zptr,
					prop_info && ZEND_TYPE_IS_SET(prop_info->type) ? prop_info : NULL OPLINE_CC EXECUTE_DATA_CC);
			}
		} else {
			zend_pre_incdec_overloaded_property(zobj, name, cache_slot OPLINE_CC EXECUTE_DATA_CC);
		}
		if (IS_CONST != IS_CONST) {
			zend_tmp_string_release(tmp_name);
		}
	} while (0);




	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_POST_INC_OBJ_SPEC_CV_CONST_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *object;
	zval *property;
	zval *zptr;
	void *_cache_slot[3] = {0};
	void **cache_slot;
	zend_property_info *prop_info;
	zend_object *zobj;
	zend_string *name, *tmp_name;

	SAVE_OPLINE();
	object = EX_VAR(opline->op1.var);
	property = RT_CONSTANT(opline, opline->op2);

	do {
		if (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
			if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
				object = Z_REFVAL_P(object);
				goto post_incdec_object;
			}
			if (IS_CV == IS_CV
			 && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
				ZVAL_UNDEFINED_OP1();
			}
			zend_throw_non_object_error(object, property OPLINE_CC EXECUTE_DATA_CC);
			break;
		}

post_incdec_object:
		/* here we are sure we are dealing with an object */
		zobj = Z_OBJ_P(object);
		if (IS_CONST == IS_CONST) {
			name = Z_STR_P(property);
		} else {
			name = zval_try_get_tmp_string(property, &tmp_name);
			if (UNEXPECTED(!name)) {
				ZVAL_UNDEF(EX_VAR(opline->result.var));
				break;
			}
		}
		cache_slot = (IS_CONST == IS_CONST) ? CACHE_ADDR(opline->extended_value) : _cache_slot;
		if (EXPECTED((zptr = zobj->handlers->get_property_ptr_ptr(zobj, name, BP_VAR_RW, cache_slot)) != NULL)) {
			if (UNEXPECTED(Z_ISERROR_P(zptr))) {
				ZVAL_NULL(EX_VAR(opline->result.var));
			} else {
				prop_info = (zend_property_info*)CACHED_PTR_EX(cache_slot + 2);
				zend_post_incdec_property_zval(zptr,
					prop_info && ZEND_TYPE_IS_SET(prop_info->type) ? prop_info : NULL OPLINE_CC EXECUTE_DATA_CC);
			}
		} else {
			zend_post_incdec_overloaded_property(zobj, name, cache_slot OPLINE_CC EXECUTE_DATA_CC);
		}
		if (IS_CONST != IS_CONST) {
			zend_tmp_string_release(tmp_name);
		}
	} while (0);




	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_FETCH_DIM_R_SPEC_CV_CONST_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *container, *dim, *value;

	SAVE_OPLINE();
	container = EX_VAR(opline->op1.var);
	dim = RT_CONSTANT(opline, opline->op2);
	if (IS_CV != IS_CONST) {
		if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
fetch_dim_r_array:
			value = zend_fetch_dimension_address_inner(Z_ARRVAL_P(container), dim, IS_CONST, BP_VAR_R EXECUTE_DATA_CC);
			ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
		} else if (EXPECTED(Z_TYPE_P(container) == IS_REFERENCE)) {
			container = Z_REFVAL_P(container);
			if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
				goto fetch_dim_r_array;
			} else {
				goto fetch_dim_r_slow;
			}
		} else {
fetch_dim_r_slow:
			if (IS_CONST == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
				dim++;
			}
			zend_fetch_dimension_address_read_R_slow(container, dim OPLINE_CC EXECUTE_DATA_CC);
		}
	} else {
		zend_fetch_dimension_address_read_R(container, dim, IS_CONST OPLINE_CC EXECUTE_DATA_CC);
	}




	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_FETCH_DIM_W_SPEC_CV_CONST_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *container;

	SAVE_OPLINE();
	container = EX_VAR(opline->op1.var);
	zend_fetch_dimension_address_W(container, RT_CONSTANT(opline, opline->op2), IS_CONST OPLINE_CC EXECUTE_DATA_CC);


	if (IS_CV == IS_VAR) {
		FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
	}
	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_FETCH_DIM_RW_SPEC_CV_CONST_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *container;

	SAVE_OPLINE();
	container = EX_VAR(opline->op1.var);
	zend_fetch_dimension_address_RW(container, RT_CONSTANT(opline, opline->op2), IS_CONST OPLINE_CC EXECUTE_DATA_CC);


	if (IS_CV == IS_VAR) {
		FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
	}
	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_FETCH_DIM_IS_SPEC_CV_CONST_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *container;

	SAVE_OPLINE();
	container = EX_VAR(opline->op1.var);
	zend_fetch_dimension_address_read_IS(container, RT_CONSTANT(opline, opline->op2), IS_CONST OPLINE_CC EXECUTE_DATA_CC);




	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_CONST_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
#if 0
	USE_OPLINE
#endif

	if (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) {
		if ((IS_CV & (IS_CONST|IS_TMP_VAR))) {
			ZEND_VM_TAIL_CALL(zend_use_tmp_in_write_context_helper_SPEC_TAILCALL(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
		}
		ZEND_VM_TAIL_CALL(ZEND_FETCH_DIM_W_SPEC_CV_CONST_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
	} else {
		if (IS_CONST == IS_UNUSED) {
			ZEND_VM_TAIL_CALL(zend_use_undef_in_read_context_helper_SPEC_TAILCALL(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
		}
		ZEND_VM_TAIL_CALL(ZEND_FETCH_DIM_R_SPEC_CV_CONST_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
	}
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_FETCH_DIM_UNSET_SPEC_CV_CONST_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *container;

	SAVE_OPLINE();
	container = EX_VAR(opline->op1.var);
	zend_fetch_dimension_address_UNSET(container, RT_CONSTANT(opline, opline->op2), IS_CONST OPLINE_CC EXECUTE_DATA_CC);


	if (IS_CV == IS_VAR) {
		FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
	}
	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static zend_always_inline ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_FETCH_OBJ_R_SPEC_CV_CONST_TAILCALL_INLINE_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *container;
	void **cache_slot = NULL;

	SAVE_OPLINE();
	container = EX_VAR(opline->op1.var);

	if (IS_CV == IS_CONST ||
	    (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
		do {
			if ((IS_CV & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
				container = Z_REFVAL_P(container);
				if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
					break;
				}
			}
			if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
				ZVAL_UNDEFINED_OP1();
			}
			zend_wrong_property_read(container, RT_CONSTANT(opline, opline->op2));
			ZVAL_NULL(EX_VAR(opline->result.var));
			goto fetch_obj_r_finish;
		} while (0);
	}

	/* here we are sure we are dealing with an object */
	do {
		zend_object *zobj = Z_OBJ_P(container);
		zend_string *name, *tmp_name;
		zval *retval;

		if (IS_CONST == IS_CONST) {
			cache_slot = CACHE_ADDR(opline->extended_value & ~ZEND_FETCH_REF /* FUNC_ARG fetch may contain it */);

			if (EXPECTED(zobj->ce == CACHED_PTR_EX(cache_slot))) {
				uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);

				if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
fetch_obj_r_simple:
					retval = OBJ_PROP(zobj, prop_offset);
					if (EXPECTED(Z_TYPE_INFO_P(retval) != IS_UNDEF)) {
						if (0 || (IS_CV & (IS_TMP_VAR|IS_VAR)) != 0) {
							goto fetch_obj_r_copy;
						} else {
fetch_obj_r_fast_copy:
							ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
							ZEND_VM_NEXT_OPCODE();
						}
					}
				} else if (UNEXPECTED(IS_HOOKED_PROPERTY_OFFSET(prop_offset))) {
					zend_property_info *prop_info = CACHED_PTR_EX(cache_slot + 2);
					if (ZEND_IS_PROPERTY_HOOK_SIMPLE_READ(prop_offset)) {
						prop_offset = prop_info->offset;
						goto fetch_obj_r_simple;
					} else if (EXPECTED(ZEND_IS_PROPERTY_HOOK_SIMPLE_GET(prop_offset))) {
						zend_function *hook = prop_info->hooks[ZEND_PROPERTY_HOOK_GET];
						ZEND_ASSERT(hook->type == ZEND_USER_FUNCTION);
						ZEND_ASSERT(RUN_TIME_CACHE(&hook->op_array));

						uint32_t call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_HAS_THIS;
						if (IS_CV & IS_CV) {
							GC_ADDREF(zobj);
						}
						if (IS_CV & (IS_CV|IS_VAR|IS_TMP_VAR)) {
							call_info |= ZEND_CALL_RELEASE_THIS;
						}
						zend_execute_data *call = zend_vm_stack_push_call_frame(call_info, hook, 0, zobj);
						call->prev_execute_data = execute_data;
						call->call = NULL;
						call->return_value = EX_VAR(opline->result.var);
						call->run_time_cache = RUN_TIME_CACHE(&hook->op_array);

						execute_data = call;
						EG(current_execute_data) = execute_data;
						zend_init_cvs(0, hook->op_array.last_var EXECUTE_DATA_CC);

#if defined(ZEND_VM_IP_GLOBAL_REG) && ((ZEND_VM_KIND == ZEND_VM_KIND_CALL) || (ZEND_VM_KIND == ZEND_VM_KIND_HYBRID))
						opline = hook->op_array.opcodes;
#else
						EX(opline) = hook->op_array.opcodes;
#endif
						LOAD_OPLINE_EX();




						ZEND_VM_ENTER_EX();
					}
					/* Fall through to read_property for hooks. */
				} else if (EXPECTED(zobj->properties != NULL)) {
					ZEND_ASSERT(IS_DYNAMIC_PROPERTY_OFFSET(prop_offset));
					name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
					if (!IS_UNKNOWN_DYNAMIC_PROPERTY_OFFSET(prop_offset)) {
						uintptr_t idx = ZEND_DECODE_DYN_PROP_OFFSET(prop_offset);

						if (EXPECTED(idx < zobj->properties->nNumUsed * sizeof(Bucket))) {
							Bucket *p = (Bucket*)((char*)zobj->properties->arData + idx);

							if (EXPECTED(p->key == name) ||
							    (EXPECTED(p->h == ZSTR_H(name)) &&
							     EXPECTED(p->key != NULL) &&
							     EXPECTED(zend_string_equal_content(p->key, name)))) {
								retval = &p->val;
								if (0 || (IS_CV & (IS_TMP_VAR|IS_VAR)) != 0) {
									goto fetch_obj_r_copy;
								} else {
									goto fetch_obj_r_fast_copy;
								}
							}
						}
						CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_DYNAMIC_PROPERTY_OFFSET);
					}
					retval = zend_hash_find_known_hash(zobj->properties, name);
					if (EXPECTED(retval)) {
						uintptr_t idx = (char*)retval - (char*)zobj->properties->arData;
						CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_ENCODE_DYN_PROP_OFFSET(idx));
						if (0 || (IS_CV & (IS_TMP_VAR|IS_VAR)) != 0) {
							goto fetch_obj_r_copy;
						} else {
							goto fetch_obj_r_fast_copy;
						}
					}
				}
			}
			name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
		} else {
			name = zval_try_get_tmp_string(RT_CONSTANT(opline, opline->op2), &tmp_name);
			if (UNEXPECTED(!name)) {
				ZVAL_UNDEF(EX_VAR(opline->result.var));
				break;
			}
		}

#if ZEND_DEBUG
		/* For non-standard object handlers, verify a declared property type in debug builds.
		 * Fetch prop_info before calling read_property(), as it may deallocate the object. */
		zend_property_info *prop_info = NULL;
		if (zobj->handlers->read_property != zend_std_read_property) {
			prop_info = zend_get_property_info(zobj->ce, name, /* silent */ true);
		}
#endif
		retval = zobj->handlers->read_property(zobj, name, BP_VAR_R, cache_slot, EX_VAR(opline->result.var));
#if ZEND_DEBUG
		if (!EG(exception) && prop_info && prop_info != ZEND_WRONG_PROPERTY_INFO
				&& ZEND_TYPE_IS_SET(prop_info->type)) {
			ZVAL_OPT_DEREF(retval);
			zend_verify_property_type(prop_info, retval, /* strict */ true);
		}
#endif

		if (IS_CONST != IS_CONST) {
			zend_tmp_string_release(tmp_name);
		}

		if (retval != EX_VAR(opline->result.var)) {
fetch_obj_r_copy:
			ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
		} else if (UNEXPECTED(Z_ISREF_P(retval))) {
			zend_unwrap_reference(retval);
		}
	} while (0);

fetch_obj_r_finish:




	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_FETCH_OBJ_R_SPEC_CV_CONST_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	ZEND_VM_TAIL_CALL(ZEND_FETCH_OBJ_R_SPEC_CV_CONST_TAILCALL_INLINE_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_FETCH_OBJ_W_SPEC_CV_CONST_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *property, *container, *result;

	SAVE_OPLINE();

	container = EX_VAR(opline->op1.var);
	property = RT_CONSTANT(opline, opline->op2);
	result = EX_VAR(opline->result.var);
	zend_fetch_property_address(
		result, container, IS_CV, property, IS_CONST,
		((IS_CONST == IS_CONST) ? CACHE_ADDR(opline->extended_value & ~ZEND_FETCH_OBJ_FLAGS) : NULL),
		BP_VAR_W, opline->extended_value, NULL OPLINE_CC EXECUTE_DATA_CC);


	if (IS_CV == IS_VAR) {
		FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
	}
	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_FETCH_OBJ_RW_SPEC_CV_CONST_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *property, *container, *result;

	SAVE_OPLINE();
	container = EX_VAR(opline->op1.var);
	property = RT_CONSTANT(opline, opline->op2);
	result = EX_VAR(opline->result.var);
	zend_fetch_property_address(result, container, IS_CV, property, IS_CONST, ((IS_CONST == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL), BP_VAR_RW, 0, NULL OPLINE_CC EXECUTE_DATA_CC);


	if (IS_CV == IS_VAR) {
		FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
	}
	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_FETCH_OBJ_IS_SPEC_CV_CONST_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *container;
	void **cache_slot = NULL;

	SAVE_OPLINE();
	container = _get_zval_ptr_cv_BP_VAR_IS(opline->op1.var EXECUTE_DATA_CC);

	if (IS_CV == IS_CONST ||
	    (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
		do {
			if ((IS_CV & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
				container = Z_REFVAL_P(container);
				if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
					break;
				}
			}
			if (IS_CONST == IS_CV && Z_TYPE_P(EX_VAR(opline->op2.var)) == IS_UNDEF) {
				ZVAL_UNDEFINED_OP2();
			}
			ZVAL_NULL(EX_VAR(opline->result.var));
			goto fetch_obj_is_finish;
		} while (0);
	}

	/* here we are sure we are dealing with an object */
	do {
		zend_object *zobj = Z_OBJ_P(container);
		zend_string *name, *tmp_name;
		zval *retval;

		if (IS_CONST == IS_CONST) {
			cache_slot = CACHE_ADDR(opline->extended_value);

			if (EXPECTED(zobj->ce == CACHED_PTR_EX(cache_slot))) {
				uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);

				if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
fetch_obj_is_simple:
					retval = OBJ_PROP(zobj, prop_offset);
					if (EXPECTED(Z_TYPE_P(retval) != IS_UNDEF)) {
						if (0 || (IS_CV & (IS_TMP_VAR|IS_VAR)) != 0) {
							goto fetch_obj_is_copy;
						} else {
fetch_obj_is_fast_copy:
							ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
							ZEND_VM_NEXT_OPCODE();
						}
					}
				} else if (UNEXPECTED(IS_HOOKED_PROPERTY_OFFSET(prop_offset))) {
					if (ZEND_IS_PROPERTY_HOOK_SIMPLE_READ(prop_offset)) {
						zend_property_info *prop_info = CACHED_PTR_EX(cache_slot + 2);
						prop_offset = prop_info->offset;
						goto fetch_obj_is_simple;
					}
					/* Fall through to read_property for hooks. */
				} else if (EXPECTED(zobj->properties != NULL)) {
					ZEND_ASSERT(IS_DYNAMIC_PROPERTY_OFFSET(prop_offset));
					name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
					if (!IS_UNKNOWN_DYNAMIC_PROPERTY_OFFSET(prop_offset)) {
						uintptr_t idx = ZEND_DECODE_DYN_PROP_OFFSET(prop_offset);

						if (EXPECTED(idx < zobj->properties->nNumUsed * sizeof(Bucket))) {
							Bucket *p = (Bucket*)((char*)zobj->properties->arData + idx);

							if (EXPECTED(p->key == name) ||
							    (EXPECTED(p->h == ZSTR_H(name)) &&
							     EXPECTED(p->key != NULL) &&
							     EXPECTED(zend_string_equal_content(p->key, name)))) {
								retval = &p->val;
								if (0 || (IS_CV & (IS_TMP_VAR|IS_VAR)) != 0) {
									goto fetch_obj_is_copy;
								} else {
									goto fetch_obj_is_fast_copy;
								}
							}
						}
						CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_DYNAMIC_PROPERTY_OFFSET);
					}
					retval = zend_hash_find_known_hash(zobj->properties, name);
					if (EXPECTED(retval)) {
						uintptr_t idx = (char*)retval - (char*)zobj->properties->arData;
						CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_ENCODE_DYN_PROP_OFFSET(idx));
						if (0 || (IS_CV & (IS_TMP_VAR|IS_VAR)) != 0) {
							goto fetch_obj_is_copy;
						} else {
							goto fetch_obj_is_fast_copy;
						}
					}
				}
			}
			name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
		} else {
			name = zval_try_get_tmp_string(RT_CONSTANT(opline, opline->op2), &tmp_name);
			if (UNEXPECTED(!name)) {
				ZVAL_UNDEF(EX_VAR(opline->result.var));
				break;
			}
		}

		retval = zobj->handlers->read_property(zobj, name, BP_VAR_IS, cache_slot, EX_VAR(opline->result.var));

		if (IS_CONST != IS_CONST) {
			zend_tmp_string_release(tmp_name);
		}

		if (retval != EX_VAR(opline->result.var)) {
fetch_obj_is_copy:
			ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
		} else if (UNEXPECTED(Z_ISREF_P(retval))) {
			zend_unwrap_reference(retval);
		}
	} while (0);

fetch_obj_is_finish:




	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CV_CONST_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
#if 0
	USE_OPLINE
#endif

	if (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) {
		/* Behave like FETCH_OBJ_W */
		if ((IS_CV & (IS_CONST|IS_TMP_VAR))) {
			ZEND_VM_TAIL_CALL(zend_use_tmp_in_write_context_helper_SPEC_TAILCALL(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
		}
		ZEND_VM_TAIL_CALL(ZEND_FETCH_OBJ_W_SPEC_CV_CONST_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
	} else {
		ZEND_VM_TAIL_CALL(ZEND_FETCH_OBJ_R_SPEC_CV_CONST_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
	}
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_FETCH_OBJ_UNSET_SPEC_CV_CONST_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *container, *property, *result;

	SAVE_OPLINE();
	container = EX_VAR(opline->op1.var);
	property = RT_CONSTANT(opline, opline->op2);
	result = EX_VAR(opline->result.var);
	zend_fetch_property_address(result, container, IS_CV, property, IS_CONST, ((IS_CONST == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL), BP_VAR_UNSET, 0, NULL OPLINE_CC EXECUTE_DATA_CC);


	if (IS_CV == IS_VAR) {
		FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
	}
	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_ASSIGN_OBJ_SPEC_CV_CONST_OP_DATA_CONST_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *object, *value, tmp;
	zend_object *zobj;
	zend_string *name, *tmp_name;
	zend_refcounted *garbage = NULL;

	SAVE_OPLINE();
	object = EX_VAR(opline->op1.var);
	value = RT_CONSTANT((opline+1), (opline+1)->op1);

	if (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
		if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
			object = Z_REFVAL_P(object);
			goto assign_object;
		}
		zend_throw_non_object_error(object, RT_CONSTANT(opline, opline->op2) OPLINE_CC EXECUTE_DATA_CC);
		value = &EG(uninitialized_zval);
		goto free_and_exit_assign_obj;
	}

assign_object:
	zobj = Z_OBJ_P(object);
	if (IS_CONST == IS_CONST) {
		if (EXPECTED(zobj->ce == CACHED_PTR(opline->extended_value))) {
			void **cache_slot = CACHE_ADDR(opline->extended_value);
			uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
			zval *property_val;
			zend_property_info *prop_info;

			if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
				prop_info = (zend_property_info*) CACHED_PTR_EX(cache_slot + 2);

assign_obj_simple:
				property_val = OBJ_PROP(zobj, prop_offset);
				if (Z_TYPE_P(property_val) != IS_UNDEF) {
					if (prop_info != NULL) {
						value = zend_assign_to_typed_prop(prop_info, property_val, value, &garbage EXECUTE_DATA_CC);
						goto free_and_exit_assign_obj;
					} else {
fast_assign_obj:
						value = zend_assign_to_variable_ex(property_val, value, IS_CONST, EX_USES_STRICT_TYPES(), &garbage);
						if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
							ZVAL_COPY(EX_VAR(opline->result.var), value);
						}
						goto exit_assign_obj;
					}
				}
			} else if (EXPECTED(IS_DYNAMIC_PROPERTY_OFFSET(prop_offset))) {
				name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
				if (UNEXPECTED(zend_lazy_object_must_init(zobj))) {
					zobj = zend_lazy_object_init(zobj);
					if (!zobj) {
						value = &EG(uninitialized_zval);
						goto free_and_exit_assign_obj;
					}
				}
				if (!zobj->ce->__set && (zobj->ce->ce_flags & ZEND_ACC_ALLOW_DYNAMIC_PROPERTIES)) {
					rebuild_object_properties_internal(zobj);
				}
				if (EXPECTED(zobj->properties != NULL)) {
					if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
						if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
							GC_DELREF(zobj->properties);
						}
						zobj->properties = zend_array_dup(zobj->properties);
					}
					property_val = zend_hash_find_known_hash(zobj->properties, name);
					if (property_val) {
						goto fast_assign_obj;
					}
				}

				if (!zobj->ce->__set && (zobj->ce->ce_flags & ZEND_ACC_ALLOW_DYNAMIC_PROPERTIES)) {
					if (IS_CONST == IS_CONST) {
						if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
							Z_ADDREF_P(value);
						}
					} else if (IS_CONST != IS_TMP_VAR) {
						if (Z_ISREF_P(value)) {
							if (IS_CONST == IS_VAR) {
								zend_reference *ref = Z_REF_P(value);
								if (GC_DELREF(ref) == 0) {
									ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
									efree_size(ref, sizeof(zend_reference));
									value = &tmp;
								} else {
									value = Z_REFVAL_P(value);
									Z_TRY_ADDREF_P(value);
								}
							} else {
								value = Z_REFVAL_P(value);
								Z_TRY_ADDREF_P(value);
							}
						} else if (IS_CONST == IS_CV) {
							Z_TRY_ADDREF_P(value);
						}
					}
					zend_hash_add_new(zobj->properties, name, value);
					if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
						ZVAL_COPY(EX_VAR(opline->result.var), value);
					}
					goto exit_assign_obj;
				}
			} else {
				ZEND_ASSERT(IS_HOOKED_PROPERTY_OFFSET(prop_offset));
				if (ZEND_IS_PROPERTY_HOOK_SIMPLE_WRITE(prop_offset)) {
					prop_info = CACHED_PTR_EX(cache_slot + 2);
					prop_offset = prop_info->offset;
					if (!ZEND_TYPE_IS_SET(prop_info->type)) {
						prop_info = NULL;
					}
					goto assign_obj_simple;
				}
				/* Fall through to write_property for hooks. */
			}
		}
		name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
	} else {
		name = zval_try_get_tmp_string(RT_CONSTANT(opline, opline->op2), &tmp_name);
		if (UNEXPECTED(!name)) {


			UNDEF_RESULT();
			goto exit_assign_obj;
		}
	}

	if (IS_CONST == IS_CV || IS_CONST == IS_VAR) {
		ZVAL_DEREF(value);
	}

	value = zobj->handlers->write_property(zobj, name, value, (IS_CONST == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);

	if (IS_CONST != IS_CONST) {
		zend_tmp_string_release(tmp_name);
	}

free_and_exit_assign_obj:
	if (UNEXPECTED(RETURN_VALUE_USED(opline)) && value) {
		ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
	}


exit_assign_obj:
	if (garbage) {
		GC_DTOR_NO_REF(garbage);
	}




	/* assign_obj has two opcodes! */
	ZEND_VM_NEXT_OPCODE_EX(1, 2);
}

/* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CONST|VAR) */
static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_ASSIGN_OBJ_SPEC_CV_CONST_OP_DATA_TMP_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *object, *value, tmp;
	zend_object *zobj;
	zend_string *name, *tmp_name;
	zend_refcounted *garbage = NULL;

	SAVE_OPLINE();
	object = EX_VAR(opline->op1.var);
	value = _get_zval_ptr_tmp((opline+1)->op1.var EXECUTE_DATA_CC);

	if (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
		if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
			object = Z_REFVAL_P(object);
			goto assign_object;
		}
		zend_throw_non_object_error(object, RT_CONSTANT(opline, opline->op2) OPLINE_CC EXECUTE_DATA_CC);
		value = &EG(uninitialized_zval);
		goto free_and_exit_assign_obj;
	}

assign_object:
	zobj = Z_OBJ_P(object);
	if (IS_CONST == IS_CONST) {
		if (EXPECTED(zobj->ce == CACHED_PTR(opline->extended_value))) {
			void **cache_slot = CACHE_ADDR(opline->extended_value);
			uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
			zval *property_val;
			zend_property_info *prop_info;

			if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
				prop_info = (zend_property_info*) CACHED_PTR_EX(cache_slot + 2);

assign_obj_simple:
				property_val = OBJ_PROP(zobj, prop_offset);
				if (Z_TYPE_P(property_val) != IS_UNDEF) {
					if (prop_info != NULL) {
						value = zend_assign_to_typed_prop(prop_info, property_val, value, &garbage EXECUTE_DATA_CC);
						goto free_and_exit_assign_obj;
					} else {
fast_assign_obj:
						value = zend_assign_to_variable_ex(property_val, value, IS_TMP_VAR, EX_USES_STRICT_TYPES(), &garbage);
						if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
							ZVAL_COPY(EX_VAR(opline->result.var), value);
						}
						goto exit_assign_obj;
					}
				}
			} else if (EXPECTED(IS_DYNAMIC_PROPERTY_OFFSET(prop_offset))) {
				name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
				if (UNEXPECTED(zend_lazy_object_must_init(zobj))) {
					zobj = zend_lazy_object_init(zobj);
					if (!zobj) {
						value = &EG(uninitialized_zval);
						goto free_and_exit_assign_obj;
					}
				}
				if (!zobj->ce->__set && (zobj->ce->ce_flags & ZEND_ACC_ALLOW_DYNAMIC_PROPERTIES)) {
					rebuild_object_properties_internal(zobj);
				}
				if (EXPECTED(zobj->properties != NULL)) {
					if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
						if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
							GC_DELREF(zobj->properties);
						}
						zobj->properties = zend_array_dup(zobj->properties);
					}
					property_val = zend_hash_find_known_hash(zobj->properties, name);
					if (property_val) {
						goto fast_assign_obj;
					}
				}

				if (!zobj->ce->__set && (zobj->ce->ce_flags & ZEND_ACC_ALLOW_DYNAMIC_PROPERTIES)) {
					if (IS_TMP_VAR == IS_CONST) {
						if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
							Z_ADDREF_P(value);
						}
					} else if (IS_TMP_VAR != IS_TMP_VAR) {
						if (Z_ISREF_P(value)) {
							if (IS_TMP_VAR == IS_VAR) {
								zend_reference *ref = Z_REF_P(value);
								if (GC_DELREF(ref) == 0) {
									ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
									efree_size(ref, sizeof(zend_reference));
									value = &tmp;
								} else {
									value = Z_REFVAL_P(value);
									Z_TRY_ADDREF_P(value);
								}
							} else {
								value = Z_REFVAL_P(value);
								Z_TRY_ADDREF_P(value);
							}
						} else if (IS_TMP_VAR == IS_CV) {
							Z_TRY_ADDREF_P(value);
						}
					}
					zend_hash_add_new(zobj->properties, name, value);
					if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
						ZVAL_COPY(EX_VAR(opline->result.var), value);
					}
					goto exit_assign_obj;
				}
			} else {
				ZEND_ASSERT(IS_HOOKED_PROPERTY_OFFSET(prop_offset));
				if (ZEND_IS_PROPERTY_HOOK_SIMPLE_WRITE(prop_offset)) {
					prop_info = CACHED_PTR_EX(cache_slot + 2);
					prop_offset = prop_info->offset;
					if (!ZEND_TYPE_IS_SET(prop_info->type)) {
						prop_info = NULL;
					}
					goto assign_obj_simple;
				}
				/* Fall through to write_property for hooks. */
			}
		}
		name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
	} else {
		name = zval_try_get_tmp_string(RT_CONSTANT(opline, opline->op2), &tmp_name);
		if (UNEXPECTED(!name)) {
			zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
			UNDEF_RESULT();
			goto exit_assign_obj;
		}
	}

	if (IS_TMP_VAR == IS_CV || IS_TMP_VAR == IS_VAR) {
		ZVAL_DEREF(value);
	}

	value = zobj->handlers->write_property(zobj, name, value, (IS_CONST == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);

	if (IS_CONST != IS_CONST) {
		zend_tmp_string_release(tmp_name);
	}

free_and_exit_assign_obj:
	if (UNEXPECTED(RETURN_VALUE_USED(opline)) && value) {
		ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
	}
	zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
exit_assign_obj:
	if (garbage) {
		GC_DTOR_NO_REF(garbage);
	}




	/* assign_obj has two opcodes! */
	ZEND_VM_NEXT_OPCODE_EX(1, 2);
}

/* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CONST|VAR) */
static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_ASSIGN_OBJ_SPEC_CV_CONST_OP_DATA_VAR_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *object, *value, tmp;
	zend_object *zobj;
	zend_string *name, *tmp_name;
	zend_refcounted *garbage = NULL;

	SAVE_OPLINE();
	object = EX_VAR(opline->op1.var);
	value = _get_zval_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);

	if (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
		if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
			object = Z_REFVAL_P(object);
			goto assign_object;
		}
		zend_throw_non_object_error(object, RT_CONSTANT(opline, opline->op2) OPLINE_CC EXECUTE_DATA_CC);
		value = &EG(uninitialized_zval);
		goto free_and_exit_assign_obj;
	}

assign_object:
	zobj = Z_OBJ_P(object);
	if (IS_CONST == IS_CONST) {
		if (EXPECTED(zobj->ce == CACHED_PTR(opline->extended_value))) {
			void **cache_slot = CACHE_ADDR(opline->extended_value);
			uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
			zval *property_val;
			zend_property_info *prop_info;

			if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
				prop_info = (zend_property_info*) CACHED_PTR_EX(cache_slot + 2);

assign_obj_simple:
				property_val = OBJ_PROP(zobj, prop_offset);
				if (Z_TYPE_P(property_val) != IS_UNDEF) {
					if (prop_info != NULL) {
						value = zend_assign_to_typed_prop(prop_info, property_val, value, &garbage EXECUTE_DATA_CC);
						goto free_and_exit_assign_obj;
					} else {
fast_assign_obj:
						value = zend_assign_to_variable_ex(property_val, value, IS_VAR, EX_USES_STRICT_TYPES(), &garbage);
						if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
							ZVAL_COPY(EX_VAR(opline->result.var), value);
						}
						goto exit_assign_obj;
					}
				}
			} else if (EXPECTED(IS_DYNAMIC_PROPERTY_OFFSET(prop_offset))) {
				name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
				if (UNEXPECTED(zend_lazy_object_must_init(zobj))) {
					zobj = zend_lazy_object_init(zobj);
					if (!zobj) {
						value = &EG(uninitialized_zval);
						goto free_and_exit_assign_obj;
					}
				}
				if (!zobj->ce->__set && (zobj->ce->ce_flags & ZEND_ACC_ALLOW_DYNAMIC_PROPERTIES)) {
					rebuild_object_properties_internal(zobj);
				}
				if (EXPECTED(zobj->properties != NULL)) {
					if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
						if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
							GC_DELREF(zobj->properties);
						}
						zobj->properties = zend_array_dup(zobj->properties);
					}
					property_val = zend_hash_find_known_hash(zobj->properties, name);
					if (property_val) {
						goto fast_assign_obj;
					}
				}

				if (!zobj->ce->__set && (zobj->ce->ce_flags & ZEND_ACC_ALLOW_DYNAMIC_PROPERTIES)) {
					if (IS_VAR == IS_CONST) {
						if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
							Z_ADDREF_P(value);
						}
					} else if (IS_VAR != IS_TMP_VAR) {
						if (Z_ISREF_P(value)) {
							if (IS_VAR == IS_VAR) {
								zend_reference *ref = Z_REF_P(value);
								if (GC_DELREF(ref) == 0) {
									ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
									efree_size(ref, sizeof(zend_reference));
									value = &tmp;
								} else {
									value = Z_REFVAL_P(value);
									Z_TRY_ADDREF_P(value);
								}
							} else {
								value = Z_REFVAL_P(value);
								Z_TRY_ADDREF_P(value);
							}
						} else if (IS_VAR == IS_CV) {
							Z_TRY_ADDREF_P(value);
						}
					}
					zend_hash_add_new(zobj->properties, name, value);
					if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
						ZVAL_COPY(EX_VAR(opline->result.var), value);
					}
					goto exit_assign_obj;
				}
			} else {
				ZEND_ASSERT(IS_HOOKED_PROPERTY_OFFSET(prop_offset));
				if (ZEND_IS_PROPERTY_HOOK_SIMPLE_WRITE(prop_offset)) {
					prop_info = CACHED_PTR_EX(cache_slot + 2);
					prop_offset = prop_info->offset;
					if (!ZEND_TYPE_IS_SET(prop_info->type)) {
						prop_info = NULL;
					}
					goto assign_obj_simple;
				}
				/* Fall through to write_property for hooks. */
			}
		}
		name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
	} else {
		name = zval_try_get_tmp_string(RT_CONSTANT(opline, opline->op2), &tmp_name);
		if (UNEXPECTED(!name)) {
			zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
			UNDEF_RESULT();
			goto exit_assign_obj;
		}
	}

	if (IS_VAR == IS_CV || IS_VAR == IS_VAR) {
		ZVAL_DEREF(value);
	}

	value = zobj->handlers->write_property(zobj, name, value, (IS_CONST == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);

	if (IS_CONST != IS_CONST) {
		zend_tmp_string_release(tmp_name);
	}

free_and_exit_assign_obj:
	if (UNEXPECTED(RETURN_VALUE_USED(opline)) && value) {
		ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
	}
	zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
exit_assign_obj:
	if (garbage) {
		GC_DTOR_NO_REF(garbage);
	}




	/* assign_obj has two opcodes! */
	ZEND_VM_NEXT_OPCODE_EX(1, 2);
}

/* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CONST|VAR) */
static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_ASSIGN_OBJ_SPEC_CV_CONST_OP_DATA_CV_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *object, *value, tmp;
	zend_object *zobj;
	zend_string *name, *tmp_name;
	zend_refcounted *garbage = NULL;

	SAVE_OPLINE();
	object = EX_VAR(opline->op1.var);
	value = _get_zval_ptr_cv_BP_VAR_R((opline+1)->op1.var EXECUTE_DATA_CC);

	if (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
		if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
			object = Z_REFVAL_P(object);
			goto assign_object;
		}
		zend_throw_non_object_error(object, RT_CONSTANT(opline, opline->op2) OPLINE_CC EXECUTE_DATA_CC);
		value = &EG(uninitialized_zval);
		goto free_and_exit_assign_obj;
	}

assign_object:
	zobj = Z_OBJ_P(object);
	if (IS_CONST == IS_CONST) {
		if (EXPECTED(zobj->ce == CACHED_PTR(opline->extended_value))) {
			void **cache_slot = CACHE_ADDR(opline->extended_value);
			uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
			zval *property_val;
			zend_property_info *prop_info;

			if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
				prop_info = (zend_property_info*) CACHED_PTR_EX(cache_slot + 2);

assign_obj_simple:
				property_val = OBJ_PROP(zobj, prop_offset);
				if (Z_TYPE_P(property_val) != IS_UNDEF) {
					if (prop_info != NULL) {
						value = zend_assign_to_typed_prop(prop_info, property_val, value, &garbage EXECUTE_DATA_CC);
						goto free_and_exit_assign_obj;
					} else {
fast_assign_obj:
						value = zend_assign_to_variable_ex(property_val, value, IS_CV, EX_USES_STRICT_TYPES(), &garbage);
						if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
							ZVAL_COPY(EX_VAR(opline->result.var), value);
						}
						goto exit_assign_obj;
					}
				}
			} else if (EXPECTED(IS_DYNAMIC_PROPERTY_OFFSET(prop_offset))) {
				name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
				if (UNEXPECTED(zend_lazy_object_must_init(zobj))) {
					zobj = zend_lazy_object_init(zobj);
					if (!zobj) {
						value = &EG(uninitialized_zval);
						goto free_and_exit_assign_obj;
					}
				}
				if (!zobj->ce->__set && (zobj->ce->ce_flags & ZEND_ACC_ALLOW_DYNAMIC_PROPERTIES)) {
					rebuild_object_properties_internal(zobj);
				}
				if (EXPECTED(zobj->properties != NULL)) {
					if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
						if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
							GC_DELREF(zobj->properties);
						}
						zobj->properties = zend_array_dup(zobj->properties);
					}
					property_val = zend_hash_find_known_hash(zobj->properties, name);
					if (property_val) {
						goto fast_assign_obj;
					}
				}

				if (!zobj->ce->__set && (zobj->ce->ce_flags & ZEND_ACC_ALLOW_DYNAMIC_PROPERTIES)) {
					if (IS_CV == IS_CONST) {
						if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
							Z_ADDREF_P(value);
						}
					} else if (IS_CV != IS_TMP_VAR) {
						if (Z_ISREF_P(value)) {
							if (IS_CV == IS_VAR) {
								zend_reference *ref = Z_REF_P(value);
								if (GC_DELREF(ref) == 0) {
									ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
									efree_size(ref, sizeof(zend_reference));
									value = &tmp;
								} else {
									value = Z_REFVAL_P(value);
									Z_TRY_ADDREF_P(value);
								}
							} else {
								value = Z_REFVAL_P(value);
								Z_TRY_ADDREF_P(value);
							}
						} else if (IS_CV == IS_CV) {
							Z_TRY_ADDREF_P(value);
						}
					}
					zend_hash_add_new(zobj->properties, name, value);
					if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
						ZVAL_COPY(EX_VAR(opline->result.var), value);
					}
					goto exit_assign_obj;
				}
			} else {
				ZEND_ASSERT(IS_HOOKED_PROPERTY_OFFSET(prop_offset));
				if (ZEND_IS_PROPERTY_HOOK_SIMPLE_WRITE(prop_offset)) {
					prop_info = CACHED_PTR_EX(cache_slot + 2);
					prop_offset = prop_info->offset;
					if (!ZEND_TYPE_IS_SET(prop_info->type)) {
						prop_info = NULL;
					}
					goto assign_obj_simple;
				}
				/* Fall through to write_property for hooks. */
			}
		}
		name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
	} else {
		name = zval_try_get_tmp_string(RT_CONSTANT(opline, opline->op2), &tmp_name);
		if (UNEXPECTED(!name)) {


			UNDEF_RESULT();
			goto exit_assign_obj;
		}
	}

	if (IS_CV == IS_CV || IS_CV == IS_VAR) {
		ZVAL_DEREF(value);
	}

	value = zobj->handlers->write_property(zobj, name, value, (IS_CONST == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);

	if (IS_CONST != IS_CONST) {
		zend_tmp_string_release(tmp_name);
	}

free_and_exit_assign_obj:
	if (UNEXPECTED(RETURN_VALUE_USED(opline)) && value) {
		ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
	}


exit_assign_obj:
	if (garbage) {
		GC_DTOR_NO_REF(garbage);
	}




	/* assign_obj has two opcodes! */
	ZEND_VM_NEXT_OPCODE_EX(1, 2);
}

/* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CONST|VAR) */
static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_ASSIGN_DIM_SPEC_CV_CONST_OP_DATA_CONST_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *object_ptr, *orig_object_ptr;
	zval *value;
	zval *variable_ptr;
	zval *dim;
	zend_refcounted *garbage = NULL;

	SAVE_OPLINE();
	orig_object_ptr = object_ptr = EX_VAR(opline->op1.var);

	if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
try_assign_dim_array:
		SEPARATE_ARRAY(object_ptr);
		if (IS_CONST == IS_UNUSED) {
			value = RT_CONSTANT((opline+1), (opline+1)->op1);
			if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
				HashTable *ht = Z_ARRVAL_P(object_ptr);
				if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE)) {
					GC_ADDREF(ht);
				}
				value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
				if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE) && !GC_DELREF(ht)) {
					zend_array_destroy(ht);
					goto assign_dim_error;
				}
			}
			if (IS_CONST == IS_CV || IS_CONST == IS_VAR) {
				ZVAL_DEREF(value);
			}
			value = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), value);
			if (UNEXPECTED(value == NULL)) {
				zend_cannot_add_element();
				goto assign_dim_error;
			} else if (IS_CONST == IS_CV) {
				if (Z_REFCOUNTED_P(value)) {
					Z_ADDREF_P(value);
				}
			} else if (IS_CONST == IS_VAR) {
				zval *free_op_data = EX_VAR((opline+1)->op1.var);
				if (Z_ISREF_P(free_op_data)) {
					if (Z_REFCOUNTED_P(value)) {
						Z_ADDREF_P(value);
					}
					zval_ptr_dtor_nogc(free_op_data);
				}
			} else if (IS_CONST == IS_CONST) {
				if (UNEXPECTED(Z_REFCOUNTED_P(value))) {
					Z_ADDREF_P(value);
				}
			}
		} else {
			dim = RT_CONSTANT(opline, opline->op2);
			if (IS_CONST == IS_CONST) {
				variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
			} else {
				variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
			}
			if (UNEXPECTED(variable_ptr == NULL)) {
				goto assign_dim_error;
			}
			value = RT_CONSTANT((opline+1), (opline+1)->op1);
			value = zend_assign_to_variable_ex(variable_ptr, value, IS_CONST, EX_USES_STRICT_TYPES(), &garbage);
		}
		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
			ZVAL_COPY(EX_VAR(opline->result.var), value);
		}
		if (garbage) {
			GC_DTOR_NO_REF(garbage);
		}
	} else {
		if (EXPECTED(Z_ISREF_P(object_ptr))) {
			object_ptr = Z_REFVAL_P(object_ptr);
			if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
				goto try_assign_dim_array;
			}
		}
		if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) {
			zend_object *obj = Z_OBJ_P(object_ptr);

			GC_ADDREF(obj);
			dim = RT_CONSTANT(opline, opline->op2);
			if (IS_CONST == IS_CV && UNEXPECTED(Z_ISUNDEF_P(dim))) {
				dim = ZVAL_UNDEFINED_OP2();
			} else if (IS_CONST == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
				dim++;
			}

			value = RT_CONSTANT((opline+1), (opline+1)->op1);
			if (IS_CONST == IS_CV && UNEXPECTED(Z_ISUNDEF_P(value))) {
				value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
			} else if (IS_CONST & (IS_CV|IS_VAR)) {
				ZVAL_DEREF(value);
			}

			zend_assign_to_object_dim(obj, dim, value OPLINE_CC EXECUTE_DATA_CC);


			if (UNEXPECTED(GC_DELREF(obj) == 0)) {
				zend_objects_store_del(obj);
			}
		} else if (EXPECTED(Z_TYPE_P(object_ptr) == IS_STRING)) {
			if (IS_CONST == IS_UNUSED) {
				zend_use_new_element_for_string();


				UNDEF_RESULT();
			} else {
				dim = RT_CONSTANT(opline, opline->op2);
				value = RT_CONSTANT((opline+1), (opline+1)->op1);
				zend_assign_to_string_offset(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC);


			}
		} else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
			if (Z_ISREF_P(orig_object_ptr)
			 && ZEND_REF_HAS_TYPE_SOURCES(Z_REF_P(orig_object_ptr))
			 && !zend_verify_ref_array_assignable(Z_REF_P(orig_object_ptr))) {
				dim = RT_CONSTANT(opline, opline->op2);


				UNDEF_RESULT();
			} else {
				HashTable *ht = zend_new_array(8);
				uint8_t old_type = Z_TYPE_P(object_ptr);

				ZVAL_ARR(object_ptr, ht);
				if (UNEXPECTED(old_type == IS_FALSE)) {
					GC_ADDREF(ht);
					zend_false_to_array_deprecated();
					if (UNEXPECTED(GC_DELREF(ht) == 0)) {
						zend_array_destroy(ht);
						goto assign_dim_error;
					}
				}
				goto try_assign_dim_array;
			}
		} else {
			zend_use_scalar_as_array();
			dim = RT_CONSTANT(opline, opline->op2);
assign_dim_error:


			if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
				ZVAL_NULL(EX_VAR(opline->result.var));
			}
		}
	}
	if (IS_CONST != IS_UNUSED) {


	}


	/* assign_dim has two opcodes! */
	ZEND_VM_NEXT_OPCODE_EX(1, 2);
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_ASSIGN_DIM_SPEC_CV_CONST_OP_DATA_TMP_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *object_ptr, *orig_object_ptr;
	zval *value;
	zval *variable_ptr;
	zval *dim;
	zend_refcounted *garbage = NULL;

	SAVE_OPLINE();
	orig_object_ptr = object_ptr = EX_VAR(opline->op1.var);

	if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
try_assign_dim_array:
		SEPARATE_ARRAY(object_ptr);
		if (IS_CONST == IS_UNUSED) {
			value = _get_zval_ptr_tmp((opline+1)->op1.var EXECUTE_DATA_CC);
			if (IS_TMP_VAR == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
				HashTable *ht = Z_ARRVAL_P(object_ptr);
				if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE)) {
					GC_ADDREF(ht);
				}
				value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
				if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE) && !GC_DELREF(ht)) {
					zend_array_destroy(ht);
					goto assign_dim_error;
				}
			}
			if (IS_TMP_VAR == IS_CV || IS_TMP_VAR == IS_VAR) {
				ZVAL_DEREF(value);
			}
			value = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), value);
			if (UNEXPECTED(value == NULL)) {
				zend_cannot_add_element();
				goto assign_dim_error;
			} else if (IS_TMP_VAR == IS_CV) {
				if (Z_REFCOUNTED_P(value)) {
					Z_ADDREF_P(value);
				}
			} else if (IS_TMP_VAR == IS_VAR) {
				zval *free_op_data = EX_VAR((opline+1)->op1.var);
				if (Z_ISREF_P(free_op_data)) {
					if (Z_REFCOUNTED_P(value)) {
						Z_ADDREF_P(value);
					}
					zval_ptr_dtor_nogc(free_op_data);
				}
			} else if (IS_TMP_VAR == IS_CONST) {
				if (UNEXPECTED(Z_REFCOUNTED_P(value))) {
					Z_ADDREF_P(value);
				}
			}
		} else {
			dim = RT_CONSTANT(opline, opline->op2);
			if (IS_CONST == IS_CONST) {
				variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
			} else {
				variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
			}
			if (UNEXPECTED(variable_ptr == NULL)) {
				goto assign_dim_error;
			}
			value = _get_zval_ptr_tmp((opline+1)->op1.var EXECUTE_DATA_CC);
			value = zend_assign_to_variable_ex(variable_ptr, value, IS_TMP_VAR, EX_USES_STRICT_TYPES(), &garbage);
		}
		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
			ZVAL_COPY(EX_VAR(opline->result.var), value);
		}
		if (garbage) {
			GC_DTOR_NO_REF(garbage);
		}
	} else {
		if (EXPECTED(Z_ISREF_P(object_ptr))) {
			object_ptr = Z_REFVAL_P(object_ptr);
			if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
				goto try_assign_dim_array;
			}
		}
		if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) {
			zend_object *obj = Z_OBJ_P(object_ptr);

			GC_ADDREF(obj);
			dim = RT_CONSTANT(opline, opline->op2);
			if (IS_CONST == IS_CV && UNEXPECTED(Z_ISUNDEF_P(dim))) {
				dim = ZVAL_UNDEFINED_OP2();
			} else if (IS_CONST == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
				dim++;
			}

			value = _get_zval_ptr_tmp((opline+1)->op1.var EXECUTE_DATA_CC);
			if (IS_TMP_VAR == IS_CV && UNEXPECTED(Z_ISUNDEF_P(value))) {
				value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
			} else if (IS_TMP_VAR & (IS_CV|IS_VAR)) {
				ZVAL_DEREF(value);
			}

			zend_assign_to_object_dim(obj, dim, value OPLINE_CC EXECUTE_DATA_CC);

			zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
			if (UNEXPECTED(GC_DELREF(obj) == 0)) {
				zend_objects_store_del(obj);
			}
		} else if (EXPECTED(Z_TYPE_P(object_ptr) == IS_STRING)) {
			if (IS_CONST == IS_UNUSED) {
				zend_use_new_element_for_string();
				zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
				UNDEF_RESULT();
			} else {
				dim = RT_CONSTANT(opline, opline->op2);
				value = _get_zval_ptr_tmp((opline+1)->op1.var EXECUTE_DATA_CC);
				zend_assign_to_string_offset(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC);
				zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
			}
		} else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
			if (Z_ISREF_P(orig_object_ptr)
			 && ZEND_REF_HAS_TYPE_SOURCES(Z_REF_P(orig_object_ptr))
			 && !zend_verify_ref_array_assignable(Z_REF_P(orig_object_ptr))) {
				dim = RT_CONSTANT(opline, opline->op2);
				zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
				UNDEF_RESULT();
			} else {
				HashTable *ht = zend_new_array(8);
				uint8_t old_type = Z_TYPE_P(object_ptr);

				ZVAL_ARR(object_ptr, ht);
				if (UNEXPECTED(old_type == IS_FALSE)) {
					GC_ADDREF(ht);
					zend_false_to_array_deprecated();
					if (UNEXPECTED(GC_DELREF(ht) == 0)) {
						zend_array_destroy(ht);
						goto assign_dim_error;
					}
				}
				goto try_assign_dim_array;
			}
		} else {
			zend_use_scalar_as_array();
			dim = RT_CONSTANT(opline, opline->op2);
assign_dim_error:
			zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
			if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
				ZVAL_NULL(EX_VAR(opline->result.var));
			}
		}
	}
	if (IS_CONST != IS_UNUSED) {


	}


	/* assign_dim has two opcodes! */
	ZEND_VM_NEXT_OPCODE_EX(1, 2);
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_ASSIGN_DIM_SPEC_CV_CONST_OP_DATA_VAR_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *object_ptr, *orig_object_ptr;
	zval *value;
	zval *variable_ptr;
	zval *dim;
	zend_refcounted *garbage = NULL;

	SAVE_OPLINE();
	orig_object_ptr = object_ptr = EX_VAR(opline->op1.var);

	if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
try_assign_dim_array:
		SEPARATE_ARRAY(object_ptr);
		if (IS_CONST == IS_UNUSED) {
			value = _get_zval_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);
			if (IS_VAR == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
				HashTable *ht = Z_ARRVAL_P(object_ptr);
				if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE)) {
					GC_ADDREF(ht);
				}
				value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
				if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE) && !GC_DELREF(ht)) {
					zend_array_destroy(ht);
					goto assign_dim_error;
				}
			}
			if (IS_VAR == IS_CV || IS_VAR == IS_VAR) {
				ZVAL_DEREF(value);
			}
			value = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), value);
			if (UNEXPECTED(value == NULL)) {
				zend_cannot_add_element();
				goto assign_dim_error;
			} else if (IS_VAR == IS_CV) {
				if (Z_REFCOUNTED_P(value)) {
					Z_ADDREF_P(value);
				}
			} else if (IS_VAR == IS_VAR) {
				zval *free_op_data = EX_VAR((opline+1)->op1.var);
				if (Z_ISREF_P(free_op_data)) {
					if (Z_REFCOUNTED_P(value)) {
						Z_ADDREF_P(value);
					}
					zval_ptr_dtor_nogc(free_op_data);
				}
			} else if (IS_VAR == IS_CONST) {
				if (UNEXPECTED(Z_REFCOUNTED_P(value))) {
					Z_ADDREF_P(value);
				}
			}
		} else {
			dim = RT_CONSTANT(opline, opline->op2);
			if (IS_CONST == IS_CONST) {
				variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
			} else {
				variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
			}
			if (UNEXPECTED(variable_ptr == NULL)) {
				goto assign_dim_error;
			}
			value = _get_zval_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);
			value = zend_assign_to_variable_ex(variable_ptr, value, IS_VAR, EX_USES_STRICT_TYPES(), &garbage);
		}
		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
			ZVAL_COPY(EX_VAR(opline->result.var), value);
		}
		if (garbage) {
			GC_DTOR_NO_REF(garbage);
		}
	} else {
		if (EXPECTED(Z_ISREF_P(object_ptr))) {
			object_ptr = Z_REFVAL_P(object_ptr);
			if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
				goto try_assign_dim_array;
			}
		}
		if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) {
			zend_object *obj = Z_OBJ_P(object_ptr);

			GC_ADDREF(obj);
			dim = RT_CONSTANT(opline, opline->op2);
			if (IS_CONST == IS_CV && UNEXPECTED(Z_ISUNDEF_P(dim))) {
				dim = ZVAL_UNDEFINED_OP2();
			} else if (IS_CONST == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
				dim++;
			}

			value = _get_zval_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);
			if (IS_VAR == IS_CV && UNEXPECTED(Z_ISUNDEF_P(value))) {
				value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
			} else if (IS_VAR & (IS_CV|IS_VAR)) {
				ZVAL_DEREF(value);
			}

			zend_assign_to_object_dim(obj, dim, value OPLINE_CC EXECUTE_DATA_CC);

			zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
			if (UNEXPECTED(GC_DELREF(obj) == 0)) {
				zend_objects_store_del(obj);
			}
		} else if (EXPECTED(Z_TYPE_P(object_ptr) == IS_STRING)) {
			if (IS_CONST == IS_UNUSED) {
				zend_use_new_element_for_string();
				zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
				UNDEF_RESULT();
			} else {
				dim = RT_CONSTANT(opline, opline->op2);
				value = _get_zval_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);
				zend_assign_to_string_offset(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC);
				zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
			}
		} else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
			if (Z_ISREF_P(orig_object_ptr)
			 && ZEND_REF_HAS_TYPE_SOURCES(Z_REF_P(orig_object_ptr))
			 && !zend_verify_ref_array_assignable(Z_REF_P(orig_object_ptr))) {
				dim = RT_CONSTANT(opline, opline->op2);
				zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
				UNDEF_RESULT();
			} else {
				HashTable *ht = zend_new_array(8);
				uint8_t old_type = Z_TYPE_P(object_ptr);

				ZVAL_ARR(object_ptr, ht);
				if (UNEXPECTED(old_type == IS_FALSE)) {
					GC_ADDREF(ht);
					zend_false_to_array_deprecated();
					if (UNEXPECTED(GC_DELREF(ht) == 0)) {
						zend_array_destroy(ht);
						goto assign_dim_error;
					}
				}
				goto try_assign_dim_array;
			}
		} else {
			zend_use_scalar_as_array();
			dim = RT_CONSTANT(opline, opline->op2);
assign_dim_error:
			zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
			if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
				ZVAL_NULL(EX_VAR(opline->result.var));
			}
		}
	}
	if (IS_CONST != IS_UNUSED) {


	}


	/* assign_dim has two opcodes! */
	ZEND_VM_NEXT_OPCODE_EX(1, 2);
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_ASSIGN_DIM_SPEC_CV_CONST_OP_DATA_CV_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *object_ptr, *orig_object_ptr;
	zval *value;
	zval *variable_ptr;
	zval *dim;
	zend_refcounted *garbage = NULL;

	SAVE_OPLINE();
	orig_object_ptr = object_ptr = EX_VAR(opline->op1.var);

	if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
try_assign_dim_array:
		SEPARATE_ARRAY(object_ptr);
		if (IS_CONST == IS_UNUSED) {
			value = EX_VAR((opline+1)->op1.var);
			if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
				HashTable *ht = Z_ARRVAL_P(object_ptr);
				if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE)) {
					GC_ADDREF(ht);
				}
				value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
				if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE) && !GC_DELREF(ht)) {
					zend_array_destroy(ht);
					goto assign_dim_error;
				}
			}
			if (IS_CV == IS_CV || IS_CV == IS_VAR) {
				ZVAL_DEREF(value);
			}
			value = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), value);
			if (UNEXPECTED(value == NULL)) {
				zend_cannot_add_element();
				goto assign_dim_error;
			} else if (IS_CV == IS_CV) {
				if (Z_REFCOUNTED_P(value)) {
					Z_ADDREF_P(value);
				}
			} else if (IS_CV == IS_VAR) {
				zval *free_op_data = EX_VAR((opline+1)->op1.var);
				if (Z_ISREF_P(free_op_data)) {
					if (Z_REFCOUNTED_P(value)) {
						Z_ADDREF_P(value);
					}
					zval_ptr_dtor_nogc(free_op_data);
				}
			} else if (IS_CV == IS_CONST) {
				if (UNEXPECTED(Z_REFCOUNTED_P(value))) {
					Z_ADDREF_P(value);
				}
			}
		} else {
			dim = RT_CONSTANT(opline, opline->op2);
			if (IS_CONST == IS_CONST) {
				variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
			} else {
				variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
			}
			if (UNEXPECTED(variable_ptr == NULL)) {
				goto assign_dim_error;
			}
			value = _get_zval_ptr_cv_BP_VAR_R((opline+1)->op1.var EXECUTE_DATA_CC);
			value = zend_assign_to_variable_ex(variable_ptr, value, IS_CV, EX_USES_STRICT_TYPES(), &garbage);
		}
		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
			ZVAL_COPY(EX_VAR(opline->result.var), value);
		}
		if (garbage) {
			GC_DTOR_NO_REF(garbage);
		}
	} else {
		if (EXPECTED(Z_ISREF_P(object_ptr))) {
			object_ptr = Z_REFVAL_P(object_ptr);
			if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
				goto try_assign_dim_array;
			}
		}
		if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) {
			zend_object *obj = Z_OBJ_P(object_ptr);

			GC_ADDREF(obj);
			dim = RT_CONSTANT(opline, opline->op2);
			if (IS_CONST == IS_CV && UNEXPECTED(Z_ISUNDEF_P(dim))) {
				dim = ZVAL_UNDEFINED_OP2();
			} else if (IS_CONST == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
				dim++;
			}

			value = EX_VAR((opline+1)->op1.var);
			if (IS_CV == IS_CV && UNEXPECTED(Z_ISUNDEF_P(value))) {
				value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
			} else if (IS_CV & (IS_CV|IS_VAR)) {
				ZVAL_DEREF(value);
			}

			zend_assign_to_object_dim(obj, dim, value OPLINE_CC EXECUTE_DATA_CC);


			if (UNEXPECTED(GC_DELREF(obj) == 0)) {
				zend_objects_store_del(obj);
			}
		} else if (EXPECTED(Z_TYPE_P(object_ptr) == IS_STRING)) {
			if (IS_CONST == IS_UNUSED) {
				zend_use_new_element_for_string();


				UNDEF_RESULT();
			} else {
				dim = RT_CONSTANT(opline, opline->op2);
				value = EX_VAR((opline+1)->op1.var);
				zend_assign_to_string_offset(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC);


			}
		} else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
			if (Z_ISREF_P(orig_object_ptr)
			 && ZEND_REF_HAS_TYPE_SOURCES(Z_REF_P(orig_object_ptr))
			 && !zend_verify_ref_array_assignable(Z_REF_P(orig_object_ptr))) {
				dim = RT_CONSTANT(opline, opline->op2);


				UNDEF_RESULT();
			} else {
				HashTable *ht = zend_new_array(8);
				uint8_t old_type = Z_TYPE_P(object_ptr);

				ZVAL_ARR(object_ptr, ht);
				if (UNEXPECTED(old_type == IS_FALSE)) {
					GC_ADDREF(ht);
					zend_false_to_array_deprecated();
					if (UNEXPECTED(GC_DELREF(ht) == 0)) {
						zend_array_destroy(ht);
						goto assign_dim_error;
					}
				}
				goto try_assign_dim_array;
			}
		} else {
			zend_use_scalar_as_array();
			dim = RT_CONSTANT(opline, opline->op2);
assign_dim_error:


			if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
				ZVAL_NULL(EX_VAR(opline->result.var));
			}
		}
	}
	if (IS_CONST != IS_UNUSED) {


	}


	/* assign_dim has two opcodes! */
	ZEND_VM_NEXT_OPCODE_EX(1, 2);
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_ASSIGN_SPEC_CV_CONST_RETVAL_UNUSED_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *value;
	zval *variable_ptr;

	SAVE_OPLINE();
	value = RT_CONSTANT(opline, opline->op2);
	variable_ptr = EX_VAR(opline->op1.var);

	if (0 || UNEXPECTED(0)) {
		zend_refcounted *garbage = NULL;

		value = zend_assign_to_variable_ex(variable_ptr, value, IS_CONST, EX_USES_STRICT_TYPES(), &garbage);
		if (UNEXPECTED(0)) {
			ZVAL_COPY(EX_VAR(opline->result.var), value);
		}
		if (garbage) {
			GC_DTOR_NO_REF(garbage);
		}
	} else {
		value = zend_assign_to_variable(variable_ptr, value, IS_CONST, EX_USES_STRICT_TYPES());
	}


	/* zend_assign_to_variable() always takes care of op2, never free it! */

	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_ASSIGN_SPEC_CV_CONST_RETVAL_USED_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *value;
	zval *variable_ptr;

	SAVE_OPLINE();
	value = RT_CONSTANT(opline, opline->op2);
	variable_ptr = EX_VAR(opline->op1.var);

	if (0 || UNEXPECTED(1)) {
		zend_refcounted *garbage = NULL;

		value = zend_assign_to_variable_ex(variable_ptr, value, IS_CONST, EX_USES_STRICT_TYPES(), &garbage);
		if (UNEXPECTED(1)) {
			ZVAL_COPY(EX_VAR(opline->result.var), value);
		}
		if (garbage) {
			GC_DTOR_NO_REF(garbage);
		}
	} else {
		value = zend_assign_to_variable(variable_ptr, value, IS_CONST, EX_USES_STRICT_TYPES());
	}


	/* zend_assign_to_variable() always takes care of op2, never free it! */

	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_ASSIGN_OBJ_REF_SPEC_CV_CONST_OP_DATA_VAR_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *property, *container, *value_ptr;

	SAVE_OPLINE();

	container = EX_VAR(opline->op1.var);
	property = RT_CONSTANT(opline, opline->op2);

	value_ptr = _get_zval_ptr_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);

	if (1) {
		if (IS_CV == IS_UNUSED) {
			if (IS_CONST == IS_CONST) {
				zend_assign_to_property_reference_this_const(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
			} else {
				zend_assign_to_property_reference_this_var(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
			}
		} else {
			if (IS_CONST == IS_CONST) {
				zend_assign_to_property_reference_var_const(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
			} else {
				zend_assign_to_property_reference_var_var(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
			}
		}
	} else {
		zend_assign_to_property_reference(container, IS_CV, property, IS_CONST, value_ptr OPLINE_CC EXECUTE_DATA_CC);
	}




	zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
	ZEND_VM_NEXT_OPCODE_EX(1, 2);
}

/* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CONST|VAR) */
static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_ASSIGN_OBJ_REF_SPEC_CV_CONST_OP_DATA_CV_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *property, *container, *value_ptr;

	SAVE_OPLINE();

	container = EX_VAR(opline->op1.var);
	property = RT_CONSTANT(opline, opline->op2);

	value_ptr = _get_zval_ptr_cv_BP_VAR_W((opline+1)->op1.var EXECUTE_DATA_CC);

	if (1) {
		if (IS_CV == IS_UNUSED) {
			if (IS_CONST == IS_CONST) {
				zend_assign_to_property_reference_this_const(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
			} else {
				zend_assign_to_property_reference_this_var(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
			}
		} else {
			if (IS_CONST == IS_CONST) {
				zend_assign_to_property_reference_var_const(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
			} else {
				zend_assign_to_property_reference_var_var(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
			}
		}
	} else {
		zend_assign_to_property_reference(container, IS_CV, property, IS_CONST, value_ptr OPLINE_CC EXECUTE_DATA_CC);
	}






	ZEND_VM_NEXT_OPCODE_EX(1, 2);
}

/* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CONST|VAR) */
static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_FAST_CONCAT_SPEC_CV_CONST_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;
	zend_string *op1_str, *op2_str, *str;


	op1 = EX_VAR(opline->op1.var);
	op2 = RT_CONSTANT(opline, opline->op2);
	if ((IS_CV == IS_CONST || EXPECTED(Z_TYPE_P(op1) == IS_STRING)) &&
	    (IS_CONST == IS_CONST || EXPECTED(Z_TYPE_P(op2) == IS_STRING))) {
		zend_string *op1_str = Z_STR_P(op1);
		zend_string *op2_str = Z_STR_P(op2);
		zend_string *str;
		uint32_t flags = ZSTR_GET_COPYABLE_CONCAT_PROPERTIES_BOTH(op1_str, op2_str);

		if (IS_CV != IS_CONST && UNEXPECTED(ZSTR_LEN(op1_str) == 0)) {
			if (IS_CONST == IS_CONST || IS_CONST == IS_CV) {
				ZVAL_STR_COPY(EX_VAR(opline->result.var), op2_str);
			} else {
				ZVAL_STR(EX_VAR(opline->result.var), op2_str);
			}
			if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
				zend_string_release_ex(op1_str, 0);
			}
		} else if (IS_CONST != IS_CONST && UNEXPECTED(ZSTR_LEN(op2_str) == 0)) {
			if (IS_CV == IS_CONST || IS_CV == IS_CV) {
				ZVAL_STR_COPY(EX_VAR(opline->result.var), op1_str);
			} else {
				ZVAL_STR(EX_VAR(opline->result.var), op1_str);
			}
			if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
				zend_string_release_ex(op2_str, 0);
			}
		} else if (IS_CV != IS_CONST && IS_CV != IS_CV &&
		    !ZSTR_IS_INTERNED(op1_str) && GC_REFCOUNT(op1_str) == 1) {
			size_t len = ZSTR_LEN(op1_str);

			str = zend_string_extend(op1_str, len + ZSTR_LEN(op2_str), 0);
			memcpy(ZSTR_VAL(str) + len, ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
			GC_ADD_FLAGS(str, flags);
			ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
			if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
				zend_string_release_ex(op2_str, 0);
			}
		} else {
			str = zend_string_alloc(ZSTR_LEN(op1_str) + ZSTR_LEN(op2_str), 0);
			memcpy(ZSTR_VAL(str), ZSTR_VAL(op1_str), ZSTR_LEN(op1_str));
			memcpy(ZSTR_VAL(str) + ZSTR_LEN(op1_str), ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
			GC_ADD_FLAGS(str, flags);
			ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
			if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
				zend_string_release_ex(op1_str, 0);
			}
			if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
				zend_string_release_ex(op2_str, 0);
			}
		}
		ZEND_VM_NEXT_OPCODE();
	}

	SAVE_OPLINE();
	if (IS_CV == IS_CONST) {
		op1_str = Z_STR_P(op1);
	} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
		op1_str = zend_string_copy(Z_STR_P(op1));
	} else {
		if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
			ZVAL_UNDEFINED_OP1();
		}
		op1_str = zval_get_string_func(op1);
	}
	if (IS_CONST == IS_CONST) {
		op2_str = Z_STR_P(op2);
	} else if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
		op2_str = zend_string_copy(Z_STR_P(op2));
	} else {
		if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(op2) == IS_UNDEF)) {
			ZVAL_UNDEFINED_OP2();
		}
		op2_str = zval_get_string_func(op2);
	}
	do {
		if (IS_CV != IS_CONST) {
			if (UNEXPECTED(ZSTR_LEN(op1_str) == 0)) {
				if (IS_CONST == IS_CONST) {
					if (UNEXPECTED(Z_REFCOUNTED_P(op2))) {
						GC_ADDREF(op2_str);
					}
				}
				ZVAL_STR(EX_VAR(opline->result.var), op2_str);
				zend_string_release_ex(op1_str, 0);
				break;
			}
		}
		if (IS_CONST != IS_CONST) {
			if (UNEXPECTED(ZSTR_LEN(op2_str) == 0)) {
				if (IS_CV == IS_CONST) {
					if (UNEXPECTED(Z_REFCOUNTED_P(op1))) {
						GC_ADDREF(op1_str);
					}
				}
				ZVAL_STR(EX_VAR(opline->result.var), op1_str);
				zend_string_release_ex(op2_str, 0);
				break;
			}
		}
		str = zend_string_alloc(ZSTR_LEN(op1_str) + ZSTR_LEN(op2_str), 0);
		memcpy(ZSTR_VAL(str), ZSTR_VAL(op1_str), ZSTR_LEN(op1_str));
		memcpy(ZSTR_VAL(str) + ZSTR_LEN(op1_str), ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);

		ZSTR_COPY_CONCAT_PROPERTIES_BOTH(str, op1_str, op2_str);
		ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
		if (IS_CV != IS_CONST) {
			zend_string_release_ex(op1_str, 0);
		}
		if (IS_CONST != IS_CONST) {
			zend_string_release_ex(op2_str, 0);
		}
	} while (0);




	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_INIT_METHOD_CALL_SPEC_CV_CONST_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *function_name;
	zval *object;
	zend_function *fbc;
	zend_class_entry *called_scope;
	zend_object *obj;
	zend_execute_data *call;
	uint32_t call_info;

	SAVE_OPLINE();

	object = EX_VAR(opline->op1.var);

	if (IS_CONST != IS_CONST) {
		function_name = RT_CONSTANT(opline, opline->op2);
	}

	if (IS_CONST != IS_CONST &&
	    UNEXPECTED(Z_TYPE_P(function_name) != IS_STRING)) {
		do {
			if ((IS_CONST & (IS_VAR|IS_CV)) && Z_ISREF_P(function_name)) {
				function_name = Z_REFVAL_P(function_name);
				if (EXPECTED(Z_TYPE_P(function_name) == IS_STRING)) {
					break;
				}
			} else if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) {
				ZVAL_UNDEFINED_OP2();
				if (UNEXPECTED(EG(exception) != NULL)) {


					HANDLE_EXCEPTION();
				}
			}
			zend_throw_error(NULL, "Method name must be a string");




			HANDLE_EXCEPTION();
		} while (0);
	}

	if (IS_CV == IS_UNUSED) {
		obj = Z_OBJ_P(object);
	} else {
		do {
			if (IS_CV != IS_CONST && EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
				obj = Z_OBJ_P(object);
			} else {
				if ((IS_CV & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(object))) {
					zend_reference *ref = Z_REF_P(object);

					object = &ref->val;
					if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
						obj = Z_OBJ_P(object);
						if (IS_CV & IS_VAR) {
							if (UNEXPECTED(GC_DELREF(ref) == 0)) {
								efree_size(ref, sizeof(zend_reference));
							} else {
								Z_ADDREF_P(object);
							}
						}
						break;
					}
				}
				if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
					object = ZVAL_UNDEFINED_OP1();
					if (UNEXPECTED(EG(exception) != NULL)) {
						if (IS_CONST != IS_CONST) {


						}
						HANDLE_EXCEPTION();
					}
				}
				if (IS_CONST == IS_CONST) {
					function_name = RT_CONSTANT(opline, opline->op2);
				}
				zend_invalid_method_call(object, function_name);




				HANDLE_EXCEPTION();
			}
		} while (0);
	}

	called_scope = obj->ce;

	if (IS_CONST == IS_CONST &&
	    EXPECTED(CACHED_PTR(opline->result.num) == called_scope)) {
		fbc = CACHED_PTR(opline->result.num + sizeof(void*));
	} else {
		zend_object *orig_obj = obj;

		if (IS_CONST == IS_CONST) {
			function_name = RT_CONSTANT(opline, opline->op2);
		}

		/* First, locate the function. */
		fbc = obj->handlers->get_method(&obj, Z_STR_P(function_name), ((IS_CONST == IS_CONST) ? (RT_CONSTANT(opline, opline->op2) + 1) : NULL));
		if (UNEXPECTED(fbc == NULL)) {
			if (EXPECTED(!EG(exception))) {
				zend_undefined_method(orig_obj->ce, Z_STR_P(function_name));
			}


			if ((IS_CV & (IS_VAR|IS_TMP_VAR)) && GC_DELREF(orig_obj) == 0) {
				zend_objects_store_del(orig_obj);
			}
			HANDLE_EXCEPTION();
		}
		if (IS_CONST == IS_CONST &&
		    EXPECTED(!(fbc->common.fn_flags & (ZEND_ACC_CALL_VIA_TRAMPOLINE|ZEND_ACC_NEVER_CACHE))) &&
		    EXPECTED(obj == orig_obj)) {
			CACHE_POLYMORPHIC_PTR(opline->result.num, called_scope, fbc);
		}
		if ((IS_CV & (IS_VAR|IS_TMP_VAR)) && UNEXPECTED(obj != orig_obj)) {
			GC_ADDREF(obj); /* For $this pointer */
			if (GC_DELREF(orig_obj) == 0) {
				zend_objects_store_del(orig_obj);
			}
		}
		if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!RUN_TIME_CACHE(&fbc->op_array))) {
			init_func_run_time_cache(&fbc->op_array);
		}
	}

	if (IS_CONST != IS_CONST) {


	}

	call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_HAS_THIS;
	if (UNEXPECTED((fbc->common.fn_flags & ZEND_ACC_STATIC) != 0)) {
		if ((IS_CV & (IS_VAR|IS_TMP_VAR)) && GC_DELREF(obj) == 0) {
			zend_objects_store_del(obj);
			if (UNEXPECTED(EG(exception))) {
				HANDLE_EXCEPTION();
			}
		}
		/* call static method */
		obj = (zend_object*)called_scope;
		call_info = ZEND_CALL_NESTED_FUNCTION;
	} else if (IS_CV & (IS_VAR|IS_TMP_VAR|IS_CV)) {
		if (IS_CV == IS_CV) {
			GC_ADDREF(obj); /* For $this pointer */
		}
		/* CV may be changed indirectly (e.g. when it's a reference) */
		call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_HAS_THIS | ZEND_CALL_RELEASE_THIS;
	}

	call = zend_vm_stack_push_call_frame(call_info,
		fbc, opline->extended_value, obj);
	call->prev_execute_data = EX(call);
	EX(call) = call;

	ZEND_VM_NEXT_OPCODE();
}

static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_SEND_VAR_SPEC_CV_CONST_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *varptr, *arg;

	if (IS_CONST == IS_CONST) {
		SAVE_OPLINE();
		zend_string *arg_name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
		uint32_t arg_num;
		arg = zend_handle_named_arg(&EX(call), arg_name, &arg_num, CACHE_ADDR(opline->result.num));
		if (UNEXPECTED(!arg)) {


			HANDLE_EXCEPTION();
		}
	} else {
		arg = ZEND_CALL_VAR(EX(call), opline->result.var);
	}

	varptr = EX_VAR(opline->op1.var);
	if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(varptr) == IS_UNDEF)) {
		SAVE_OPLINE();
		ZVAL_UNDEFINED_OP1();
		ZVAL_NULL(arg);
		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
	}

	if (IS_CV == IS_CV) {
		ZVAL_COPY_DEREF(arg, varptr);
	} else /* if (IS_CV == IS_VAR) */ {
		if (UNEXPECTED(Z_ISREF_P(varptr))) {
			zend_refcounted *ref = Z_COUNTED_P(varptr);

			varptr = Z_REFVAL_P(varptr);
			ZVAL_COPY_VALUE(arg, varptr);
			if (UNEXPECTED(GC_DELREF(ref) == 0)) {
				efree_size(ref, sizeof(zend_reference));
			} else if (Z_OPT_REFCOUNTED_P(arg)) {
				Z_ADDREF_P(arg);
			}
		} else {
			ZVAL_COPY_VALUE(arg, varptr);
		}
	}

	ZEND_VM_NEXT_OPCODE();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_SEND_REF_SPEC_CV_CONST_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *varptr, *arg;

	SAVE_OPLINE();
	if (IS_CONST == IS_CONST) {
		zend_string *arg_name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
		uint32_t arg_num;
		arg = zend_handle_named_arg(&EX(call), arg_name, &arg_num, CACHE_ADDR(opline->result.num));
		if (UNEXPECTED(!arg)) {


			HANDLE_EXCEPTION();
		}
	} else {
		arg = ZEND_CALL_VAR(EX(call), opline->result.var);
	}

	varptr = _get_zval_ptr_cv_BP_VAR_W(opline->op1.var EXECUTE_DATA_CC);
	if (Z_ISREF_P(varptr)) {
		Z_ADDREF_P(varptr);
	} else {
		ZVAL_MAKE_REF_EX(varptr, 2);
	}
	ZVAL_REF(arg, Z_REF_P(varptr));


	ZEND_VM_NEXT_OPCODE();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_SEND_VAR_EX_SPEC_CV_CONST_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *varptr, *arg;
	uint32_t arg_num;

	if (IS_CONST == IS_CONST) {
		SAVE_OPLINE();
		zend_string *arg_name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
		arg = zend_handle_named_arg(&EX(call), arg_name, &arg_num, CACHE_ADDR(opline->result.num));
		if (UNEXPECTED(!arg)) {


			HANDLE_EXCEPTION();
		}
	} else {
		arg = ZEND_CALL_VAR(EX(call), opline->result.var);
		arg_num = opline->op2.num;
	}

	if (EXPECTED(arg_num <= MAX_ARG_FLAG_NUM)) {
		if (QUICK_ARG_SHOULD_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
			goto send_var_by_ref;
		}
	} else if (ARG_SHOULD_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
send_var_by_ref:
		varptr = _get_zval_ptr_cv_BP_VAR_W(opline->op1.var EXECUTE_DATA_CC);
		if (Z_ISREF_P(varptr)) {
			Z_ADDREF_P(varptr);
		} else {
			ZVAL_MAKE_REF_EX(varptr, 2);
		}
		ZVAL_REF(arg, Z_REF_P(varptr));


		ZEND_VM_NEXT_OPCODE();
	}

	varptr = EX_VAR(opline->op1.var);
	if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(varptr) == IS_UNDEF)) {
		SAVE_OPLINE();
		ZVAL_UNDEFINED_OP1();
		ZVAL_NULL(arg);
		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
	}

	if (IS_CV == IS_CV) {
		ZVAL_COPY_DEREF(arg, varptr);
	} else /* if (IS_CV == IS_VAR) */ {
		if (UNEXPECTED(Z_ISREF_P(varptr))) {
			zend_refcounted *ref = Z_COUNTED_P(varptr);

			varptr = Z_REFVAL_P(varptr);
			ZVAL_COPY_VALUE(arg, varptr);
			if (UNEXPECTED(GC_DELREF(ref) == 0)) {
				efree_size(ref, sizeof(zend_reference));
			} else if (Z_OPT_REFCOUNTED_P(arg)) {
				Z_ADDREF_P(arg);
			}
		} else {
			ZVAL_COPY_VALUE(arg, varptr);
		}
	}

	ZEND_VM_NEXT_OPCODE();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_CONST_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *expr_ptr, new_expr;

	SAVE_OPLINE();
	if ((IS_CV == IS_VAR || IS_CV == IS_CV) &&
	    UNEXPECTED(opline->extended_value & ZEND_ARRAY_ELEMENT_REF)) {
		expr_ptr = _get_zval_ptr_cv_BP_VAR_W(opline->op1.var EXECUTE_DATA_CC);
		if (Z_ISREF_P(expr_ptr)) {
			Z_ADDREF_P(expr_ptr);
		} else {
			ZVAL_MAKE_REF_EX(expr_ptr, 2);
		}


	} else {
		expr_ptr = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
		if (IS_CV == IS_TMP_VAR) {
			/* pass */
		} else if (IS_CV == IS_CONST) {
			Z_TRY_ADDREF_P(expr_ptr);
		} else if (IS_CV == IS_CV) {
			ZVAL_DEREF(expr_ptr);
			Z_TRY_ADDREF_P(expr_ptr);
		} else /* if (IS_CV == IS_VAR) */ {
			if (UNEXPECTED(Z_ISREF_P(expr_ptr))) {
				zend_refcounted *ref = Z_COUNTED_P(expr_ptr);

				expr_ptr = Z_REFVAL_P(expr_ptr);
				if (UNEXPECTED(GC_DELREF(ref) == 0)) {
					ZVAL_COPY_VALUE(&new_expr, expr_ptr);
					expr_ptr = &new_expr;
					efree_size(ref, sizeof(zend_reference));
				} else if (Z_OPT_REFCOUNTED_P(expr_ptr)) {
					Z_ADDREF_P(expr_ptr);
				}
			}
		}
	}

	if (IS_CONST != IS_UNUSED) {
		zval *offset = RT_CONSTANT(opline, opline->op2);
		zend_string *str;
		zend_ulong hval;

add_again:
		if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) {
			str = Z_STR_P(offset);
			if (IS_CONST != IS_CONST) {
				if (ZEND_HANDLE_NUMERIC(str, hval)) {
					goto num_index;
				}
			}
str_index:
			zend_hash_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), str, expr_ptr);
		} else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
			hval = Z_LVAL_P(offset);
num_index:
			zend_hash_index_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), hval, expr_ptr);
		} else if ((IS_CONST & (IS_VAR|IS_CV)) && EXPECTED(Z_TYPE_P(offset) == IS_REFERENCE)) {
			offset = Z_REFVAL_P(offset);
			goto add_again;
		} else if (UNEXPECTED(Z_TYPE_P(offset) == IS_NULL)) {
			zval tmp;
			if (IS_CV == IS_CV || IS_CV == IS_VAR) {
				ZVAL_COPY(&tmp, expr_ptr);
			}
			zend_error(E_DEPRECATED, "Using null as an array offset is deprecated, use an empty string instead");
			if (IS_CV == IS_CV || IS_CV == IS_VAR) {
				/* A userland error handler can do funky things to the expression, so reset it */
				zval_ptr_dtor(expr_ptr);
				ZVAL_COPY_VALUE(expr_ptr, &tmp);
			}
			if (UNEXPECTED(EG(exception))) {
				zval_ptr_dtor_nogc(expr_ptr);
				HANDLE_EXCEPTION();
			}
			str = ZSTR_EMPTY_ALLOC();
			goto str_index;
		} else if (Z_TYPE_P(offset) == IS_DOUBLE) {
			hval = zend_dval_to_lval_safe(Z_DVAL_P(offset));
			goto num_index;
		} else if (Z_TYPE_P(offset) == IS_FALSE) {
			hval = 0;
			goto num_index;
		} else if (Z_TYPE_P(offset) == IS_TRUE) {
			hval = 1;
			goto num_index;
		} else if (Z_TYPE_P(offset) == IS_RESOURCE) {
			zend_use_resource_as_offset(offset);
			hval = Z_RES_HANDLE_P(offset);
			goto num_index;
		} else if (IS_CONST == IS_CV && Z_TYPE_P(offset) == IS_UNDEF) {
			ZVAL_UNDEFINED_OP2();
			str = ZSTR_EMPTY_ALLOC();
			goto str_index;
		} else {
			zend_illegal_array_offset_access(offset);
			zval_ptr_dtor_nogc(expr_ptr);
		}


	} else {
		if (!zend_hash_next_index_insert(Z_ARRVAL_P(EX_VAR(opline->result.var)), expr_ptr)) {
			zend_cannot_add_element();
			zval_ptr_dtor_nogc(expr_ptr);
		}
	}
	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_INIT_ARRAY_SPEC_CV_CONST_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	zval *array;
	uint32_t size;
	USE_OPLINE

	SAVE_OPLINE();
	array = EX_VAR(opline->result.var);
	if (IS_CV != IS_UNUSED) {
		size = opline->extended_value >> ZEND_ARRAY_SIZE_SHIFT;
		ZVAL_ARR(array, zend_new_array(size));
		/* Explicitly initialize array as not-packed if flag is set */
		if (opline->extended_value & ZEND_ARRAY_NOT_PACKED) {
			zend_hash_real_init_mixed(Z_ARRVAL_P(array));
		}
		ZEND_VM_TAIL_CALL(ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_CONST_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
	} else {
		ZVAL_ARR(array, zend_new_array(0));
		ZEND_VM_NEXT_OPCODE();
	}
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_UNSET_DIM_SPEC_CV_CONST_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *container;
	zval *offset;
	zend_ulong hval;
	zend_string *key;

	SAVE_OPLINE();
	container = EX_VAR(opline->op1.var);
	offset = RT_CONSTANT(opline, opline->op2);

	do {
		if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
			HashTable *ht;

unset_dim_array:
			SEPARATE_ARRAY(container);
			ht = Z_ARRVAL_P(container);
offset_again:
			if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) {
				key = Z_STR_P(offset);
				if (IS_CONST != IS_CONST) {
					if (ZEND_HANDLE_NUMERIC(key, hval)) {
						goto num_index_dim;
					}
				}
str_index_dim:
				ZEND_ASSERT(ht != &EG(symbol_table));
				zend_hash_del(ht, key);
			} else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
				hval = Z_LVAL_P(offset);
num_index_dim:
				zend_hash_index_del(ht, hval);
			} else if ((IS_CONST & (IS_VAR|IS_CV)) && EXPECTED(Z_TYPE_P(offset) == IS_REFERENCE)) {
				offset = Z_REFVAL_P(offset);
				goto offset_again;
			} else if (Z_TYPE_P(offset) == IS_DOUBLE) {
				/* The array may be destroyed while throwing a warning in case the float is not representable as an int.
				 * Temporarily increase the refcount to detect this situation. */
				GC_TRY_ADDREF(ht);
				hval = zend_dval_to_lval_safe(Z_DVAL_P(offset));
				if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE) && !GC_DELREF(ht)) {
					zend_array_destroy(ht);
					break;
				}
				if (EG(exception)) {
					break;
				}
				goto num_index_dim;
			} else if (Z_TYPE_P(offset) == IS_NULL) {
				key = ZSTR_EMPTY_ALLOC();
				goto str_index_dim;
			} else if (Z_TYPE_P(offset) == IS_FALSE) {
				hval = 0;
				goto num_index_dim;
			} else if (Z_TYPE_P(offset) == IS_TRUE) {
				hval = 1;
				goto num_index_dim;
			} else if (Z_TYPE_P(offset) == IS_RESOURCE) {
				zend_use_resource_as_offset(offset);
				hval = Z_RES_HANDLE_P(offset);
				goto num_index_dim;
			} else if (IS_CONST == IS_CV && Z_TYPE_P(offset) == IS_UNDEF) {
				ZVAL_UNDEFINED_OP2();
				key = ZSTR_EMPTY_ALLOC();
				goto str_index_dim;
			} else {
				zend_illegal_array_offset_unset(offset);
			}
			break;
		} else if (Z_ISREF_P(container)) {
			container = Z_REFVAL_P(container);
			if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
				goto unset_dim_array;
			}
		}
		if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
			container = ZVAL_UNDEFINED_OP1();
		}
		if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(offset) == IS_UNDEF)) {
			offset = ZVAL_UNDEFINED_OP2();
		}
		if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
			if (IS_CONST == IS_CONST && Z_EXTRA_P(offset) == ZEND_EXTRA_VALUE) {
				offset++;
			}
			Z_OBJ_HT_P(container)->unset_dimension(Z_OBJ_P(container), offset);
		} else if (UNEXPECTED(Z_TYPE_P(container) == IS_STRING)) {
			zend_throw_error(NULL, "Cannot unset string offsets");
		} else if (UNEXPECTED(Z_TYPE_P(container) > IS_FALSE)) {
			zend_throw_error(NULL, "Cannot unset offset in a non-array variable");
		} else if (UNEXPECTED(Z_TYPE_P(container) == IS_FALSE)) {
			zend_false_to_array_deprecated();
		}
	} while (0);




	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_UNSET_OBJ_SPEC_CV_CONST_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *container;
	zval *offset;
	zend_string *name, *tmp_name;

	SAVE_OPLINE();
	container = EX_VAR(opline->op1.var);
	offset = RT_CONSTANT(opline, opline->op2);

	do {
		if (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT)) {
			if (Z_ISREF_P(container)) {
				container = Z_REFVAL_P(container);
				if (Z_TYPE_P(container) != IS_OBJECT) {
					if (IS_CV == IS_CV
					 && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
						ZVAL_UNDEFINED_OP1();
					}
					break;
				}
			} else {
				break;
			}
		}
		if (IS_CONST == IS_CONST) {
			name = Z_STR_P(offset);
		} else {
			name = zval_try_get_tmp_string(offset, &tmp_name);
			if (UNEXPECTED(!name)) {
				break;
			}
		}
		Z_OBJ_HT_P(container)->unset_property(Z_OBJ_P(container), name, ((IS_CONST == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL));
		if (IS_CONST != IS_CONST) {
			zend_tmp_string_release(tmp_name);
		}
	} while (0);




	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CV_CONST_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *container;
	bool result;
	zend_ulong hval;
	zval *offset;

	SAVE_OPLINE();
	container = EX_VAR(opline->op1.var);
	offset = RT_CONSTANT(opline, opline->op2);

	if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
		HashTable *ht;
		zval *value;
		zend_string *str;

isset_dim_obj_array:
		ht = Z_ARRVAL_P(container);
isset_again:
		if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) {
			str = Z_STR_P(offset);
			if (IS_CONST != IS_CONST) {
				if (ZEND_HANDLE_NUMERIC(str, hval)) {
					goto num_index_prop;
				}
			}
			value = zend_hash_find_ex(ht, str, IS_CONST == IS_CONST);
		} else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
			hval = Z_LVAL_P(offset);
num_index_prop:
			value = zend_hash_index_find(ht, hval);
		} else if ((IS_CONST & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(offset))) {
			offset = Z_REFVAL_P(offset);
			goto isset_again;
		} else {
			value = zend_find_array_dim_slow(ht, offset EXECUTE_DATA_CC);
			if (UNEXPECTED(EG(exception))) {
				result = 0;
				goto isset_dim_obj_exit;
			}
		}

		if (!(opline->extended_value & ZEND_ISEMPTY)) {
			/* > IS_NULL means not IS_UNDEF and not IS_NULL */
			result = value != NULL && Z_TYPE_P(value) > IS_NULL &&
			    (!Z_ISREF_P(value) || Z_TYPE_P(Z_REFVAL_P(value)) != IS_NULL);

			if (IS_CV & (IS_CONST|IS_CV)) {
				/* avoid exception check */


				ZEND_VM_SMART_BRANCH(result, 0);
			}
		} else {
			result = (value == NULL || !i_zend_is_true(value));
		}
		goto isset_dim_obj_exit;
	} else if ((IS_CV & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(container))) {
		container = Z_REFVAL_P(container);
		if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
			goto isset_dim_obj_array;
		}
	}

	if (IS_CONST == IS_CONST && Z_EXTRA_P(offset) == ZEND_EXTRA_VALUE) {
		offset++;
	}
	if (!(opline->extended_value & ZEND_ISEMPTY)) {
		result = zend_isset_dim_slow(container, offset EXECUTE_DATA_CC);
	} else {
		result = zend_isempty_dim_slow(container, offset EXECUTE_DATA_CC);
	}

isset_dim_obj_exit:




	ZEND_VM_SMART_BRANCH(result, 1);
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CV_CONST_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *container;
	int result;
	zval *offset;
	zend_string *name, *tmp_name;

	SAVE_OPLINE();
	container = _get_zval_ptr_cv_BP_VAR_IS(opline->op1.var EXECUTE_DATA_CC);
	offset = RT_CONSTANT(opline, opline->op2);

	if (IS_CV == IS_CONST ||
	    (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
		if ((IS_CV & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
			container = Z_REFVAL_P(container);
			if (UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT)) {
				result = (opline->extended_value & ZEND_ISEMPTY);
				goto isset_object_finish;
			}
		} else {
			result = (opline->extended_value & ZEND_ISEMPTY);
			goto isset_object_finish;
		}
	}

	if (IS_CONST == IS_CONST) {
		name = Z_STR_P(offset);
	} else {
		name = zval_try_get_tmp_string(offset, &tmp_name);
		if (UNEXPECTED(!name)) {
			result = 0;
			goto isset_object_finish;
		}
	}

	result =
		(opline->extended_value & ZEND_ISEMPTY) ^
		Z_OBJ_HT_P(container)->has_property(Z_OBJ_P(container), name, (opline->extended_value & ZEND_ISEMPTY), ((IS_CONST == IS_CONST) ? CACHE_ADDR(opline->extended_value & ~ZEND_ISEMPTY) : NULL));

	if (IS_CONST != IS_CONST) {
		zend_tmp_string_release(tmp_name);
	}

isset_object_finish:




	ZEND_VM_SMART_BRANCH(result, 1);
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_ARRAY_KEY_EXISTS_SPEC_CV_CONST_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE

	zval *key, *subject;
	HashTable *ht;
	bool result;

	SAVE_OPLINE();

	key = EX_VAR(opline->op1.var);
	subject = RT_CONSTANT(opline, opline->op2);

	if (EXPECTED(Z_TYPE_P(subject) == IS_ARRAY)) {
array_key_exists_array:
		ht = Z_ARRVAL_P(subject);
		result = zend_array_key_exists_fast(ht, key OPLINE_CC EXECUTE_DATA_CC);
	} else {
		if ((IS_CONST & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(subject))) {
			subject = Z_REFVAL_P(subject);
			if (EXPECTED(Z_TYPE_P(subject) == IS_ARRAY)) {
				goto array_key_exists_array;
			}
		}
		zend_array_key_exists_error(subject, key OPLINE_CC EXECUTE_DATA_CC);
		result = 0;
	}




	ZEND_VM_SMART_BRANCH(result, 1);
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_INSTANCEOF_SPEC_CV_CONST_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *expr;
	bool result;

	SAVE_OPLINE();
	expr = EX_VAR(opline->op1.var);

try_instanceof:
	if (Z_TYPE_P(expr) == IS_OBJECT) {
		zend_class_entry *ce;

		if (IS_CONST == IS_CONST) {
			ce = CACHED_PTR(opline->extended_value);
			if (UNEXPECTED(ce == NULL)) {
				ce = zend_lookup_class_ex(Z_STR_P(RT_CONSTANT(opline, opline->op2)), Z_STR_P(RT_CONSTANT(opline, opline->op2) + 1), ZEND_FETCH_CLASS_NO_AUTOLOAD);
				if (EXPECTED(ce)) {
					CACHE_PTR(opline->extended_value, ce);
				}
			}
		} else if (IS_CONST == IS_UNUSED) {
			ce = zend_fetch_class(NULL, opline->op2.num);
			if (UNEXPECTED(ce == NULL)) {


				ZVAL_UNDEF(EX_VAR(opline->result.var));
				HANDLE_EXCEPTION();
			}
		} else {
			ce = Z_CE_P(EX_VAR(opline->op2.var));
		}
		result = ce && instanceof_function(Z_OBJCE_P(expr), ce);
	} else if ((IS_CV & (IS_VAR|IS_CV)) && Z_TYPE_P(expr) == IS_REFERENCE) {
		expr = Z_REFVAL_P(expr);
		goto try_instanceof;
	} else {
		if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(expr) == IS_UNDEF)) {
			ZVAL_UNDEFINED_OP1();
		}
		result = 0;
	}


	ZEND_VM_SMART_BRANCH(result, 1);
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_YIELD_SPEC_CV_CONST_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE

	zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C);

	SAVE_OPLINE();
	if (UNEXPECTED(generator->flags & ZEND_GENERATOR_FORCED_CLOSE)) {
		ZEND_VM_TAIL_CALL(zend_yield_in_closed_generator_helper_SPEC_TAILCALL(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
	}

	/* Destroy the previously yielded value */
	zval_ptr_dtor(&generator->value);

	/* Destroy the previously yielded key */
	zval_ptr_dtor(&generator->key);

	/* Set the new yielded value */
	if (IS_CV != IS_UNUSED) {
		if (UNEXPECTED(EX(func)->op_array.fn_flags & ZEND_ACC_RETURN_REFERENCE)) {
			/* Constants and temporary variables aren't yieldable by reference,
			 * but we still allow them with a notice. */
			if (IS_CV & (IS_CONST|IS_TMP_VAR)) {
				zval *value;

				zend_error(E_NOTICE, "Only variable references should be yielded by reference");

				value = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
				ZVAL_COPY_VALUE(&generator->value, value);
				if (IS_CV == IS_CONST) {
					if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
						Z_ADDREF(generator->value);
					}
				}
			} else {
				zval *value_ptr = _get_zval_ptr_cv_BP_VAR_W(opline->op1.var EXECUTE_DATA_CC);

				/* If a function call result is yielded and the function did
				 * not return by reference we throw a notice. */
				do {
					if (IS_CV == IS_VAR) {
						ZEND_ASSERT(value_ptr != &EG(uninitialized_zval));
						if (opline->extended_value == ZEND_RETURNS_FUNCTION
						 && !Z_ISREF_P(value_ptr)) {
							zend_error(E_NOTICE, "Only variable references should be yielded by reference");
							ZVAL_COPY(&generator->value, value_ptr);
							break;
						}
					}
					if (Z_ISREF_P(value_ptr)) {
						Z_ADDREF_P(value_ptr);
					} else {
						ZVAL_MAKE_REF_EX(value_ptr, 2);
					}
					ZVAL_REF(&generator->value, Z_REF_P(value_ptr));
				} while (0);


			}
		} else {
			zval *value = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);

			/* Consts, temporary variables and references need copying */
			if (IS_CV == IS_CONST) {
				ZVAL_COPY_VALUE(&generator->value, value);
				if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
					Z_ADDREF(generator->value);
				}
			} else if (IS_CV == IS_TMP_VAR) {
				ZVAL_COPY_VALUE(&generator->value, value);
			} else if ((IS_CV & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) {
				ZVAL_COPY(&generator->value, Z_REFVAL_P(value));


			} else {
				ZVAL_COPY_VALUE(&generator->value, value);
				if (IS_CV == IS_CV) {
					if (Z_OPT_REFCOUNTED_P(value)) Z_ADDREF_P(value);
				}
			}
		}
	} else {
		/* If no value was specified yield null */
		ZVAL_NULL(&generator->value);
	}

	/* Set the new yielded key */
	if (IS_CONST != IS_UNUSED) {
		zval *key = RT_CONSTANT(opline, opline->op2);
		if ((IS_CONST & (IS_CV|IS_VAR)) && UNEXPECTED(Z_TYPE_P(key) == IS_REFERENCE)) {
			key = Z_REFVAL_P(key);
		}
		ZVAL_COPY(&generator->key, key);


		if (Z_TYPE(generator->key) == IS_LONG
		    && Z_LVAL(generator->key) > generator->largest_used_integer_key
		) {
			generator->largest_used_integer_key = Z_LVAL(generator->key);
		}
	} else {
		/* If no key was specified we use auto-increment keys */
		generator->largest_used_integer_key++;
		ZVAL_LONG(&generator->key, generator->largest_used_integer_key);
	}

	if (RETURN_VALUE_USED(opline)) {
		/* If the return value of yield is used set the send
		 * target and initialize it to NULL */
		generator->send_target = EX_VAR(opline->result.var);
		ZVAL_NULL(generator->send_target);
	} else {
		generator->send_target = NULL;
	}

	/* The GOTO VM uses a local opline variable. We need to set the opline
	 * variable in execute_data so we don't resume at an old position. */
	SAVE_OPLINE();

	ZEND_VM_RETURN();
}

static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_BIND_GLOBAL_SPEC_CV_CONST_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zend_string *varname;
	zval *value;
	zval *variable_ptr;
	uintptr_t idx;
	zend_reference *ref;

	ZEND_VM_REPEATABLE_OPCODE

	varname = Z_STR_P(RT_CONSTANT(opline, opline->op2));

	/* We store "hash slot index" + 1 (NULL is a mark of uninitialized cache slot) */
	idx = (uintptr_t)CACHED_PTR(opline->extended_value) - 1;
	if (EXPECTED(idx < EG(symbol_table).nNumUsed * sizeof(Bucket))) {
		Bucket *p = (Bucket*)((char*)EG(symbol_table).arData + idx);

		if (EXPECTED(p->key == varname) ||
		    (EXPECTED(p->h == ZSTR_H(varname)) &&
		     EXPECTED(p->key != NULL) &&
		     EXPECTED(zend_string_equal_content(p->key, varname)))) {

			value = (zval*)p; /* value = &p->val; */
			goto check_indirect;
		}
	}

	value = zend_hash_find_known_hash(&EG(symbol_table), varname);
	if (UNEXPECTED(value == NULL)) {
		value = zend_hash_add_new(&EG(symbol_table), varname, &EG(uninitialized_zval));
		idx = (char*)value - (char*)EG(symbol_table).arData;
		/* Store "hash slot index" + 1 (NULL is a mark of uninitialized cache slot) */
		CACHE_PTR(opline->extended_value, (void*)(idx + 1));
	} else {
		idx = (char*)value - (char*)EG(symbol_table).arData;
		/* Store "hash slot index" + 1 (NULL is a mark of uninitialized cache slot) */
		CACHE_PTR(opline->extended_value, (void*)(idx + 1));
check_indirect:
		/* GLOBAL variable may be an INDIRECT pointer to CV */
		if (UNEXPECTED(Z_TYPE_P(value) == IS_INDIRECT)) {
			value = Z_INDIRECT_P(value);
			if (UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
				ZVAL_NULL(value);
			}
		}
	}

	if (UNEXPECTED(!Z_ISREF_P(value))) {
		ZVAL_MAKE_REF_EX(value, 2);
		ref = Z_REF_P(value);
	} else {
		ref = Z_REF_P(value);
		GC_ADDREF(ref);
	}

	variable_ptr = EX_VAR(opline->op1.var);

	if (UNEXPECTED(Z_REFCOUNTED_P(variable_ptr))) {
		zend_refcounted *garbage = Z_COUNTED_P(variable_ptr);

		ZVAL_REF(variable_ptr, ref);
		SAVE_OPLINE();
		if (GC_DELREF(garbage) == 0) {
			rc_dtor_func(garbage);
			if (UNEXPECTED(EG(exception))) {
				ZVAL_NULL(variable_ptr);
				HANDLE_EXCEPTION();
			}
		} else {
			gc_check_possible_root(garbage);
		}
	} else {
		ZVAL_REF(variable_ptr, ref);
	}

	ZEND_VM_REPEAT_OPCODE(ZEND_BIND_GLOBAL);
	ZEND_VM_NEXT_OPCODE();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_IN_ARRAY_SPEC_CV_CONST_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1;
	HashTable *ht = Z_ARRVAL_P(RT_CONSTANT(opline, opline->op2));
	zval *result;

	op1 = EX_VAR(opline->op1.var);
	if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
		result = zend_hash_find_ex(ht, Z_STR_P(op1), IS_CV == IS_CONST);
		if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
			zval_ptr_dtor_str(op1);
		}
		ZEND_VM_SMART_BRANCH(result, 0);
	}

	if (opline->extended_value) {
		if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
			result = zend_hash_index_find(ht, Z_LVAL_P(op1));
			ZEND_VM_SMART_BRANCH(result, 0);
		}
		SAVE_OPLINE();
		if ((IS_CV & (IS_VAR|IS_CV)) && Z_TYPE_P(op1) == IS_REFERENCE) {
			op1 = Z_REFVAL_P(op1);
			if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
				result = zend_hash_find(ht, Z_STR_P(op1));


				ZEND_VM_SMART_BRANCH(result, 0);
			} else if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
				result = zend_hash_index_find(ht, Z_LVAL_P(op1));


				ZEND_VM_SMART_BRANCH(result, 0);
			}
		} else if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
			ZVAL_UNDEFINED_OP1();
		}
	} else if (Z_TYPE_P(op1) <= IS_FALSE) {
		if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
			SAVE_OPLINE();
			ZVAL_UNDEFINED_OP1();
			if (UNEXPECTED(EG(exception) != NULL)) {
				HANDLE_EXCEPTION();
			}
		}
		result = zend_hash_find_known_hash(ht, ZSTR_EMPTY_ALLOC());
		ZEND_VM_SMART_BRANCH(result, 0);
	} else {
		zend_string *key;
		zval key_tmp;

		if ((IS_CV & (IS_VAR|IS_CV)) && Z_TYPE_P(op1) == IS_REFERENCE) {
			op1 = Z_REFVAL_P(op1);
			if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
				result = zend_hash_find(ht, Z_STR_P(op1));


				ZEND_VM_SMART_BRANCH(result, 0);
			}
		}

		SAVE_OPLINE();
		ZEND_HASH_MAP_FOREACH_STR_KEY(ht, key) {
			ZVAL_STR(&key_tmp, key);
			if (zend_compare(op1, &key_tmp) == 0) {


				ZEND_VM_SMART_BRANCH(1, 1);
			}
		} ZEND_HASH_FOREACH_END();
	}


	ZEND_VM_SMART_BRANCH(0, 1);
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_IS_IDENTICAL_NOTHROW_SPEC_CV_CONST_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	/* This is declared below the specializations for MAY_BE_LONG/MAY_BE_DOUBLE so those will be used instead if possible. */
	/* This optimizes $x === SOME_CONST_EXPR and $x === $y for non-refs and non-undef, which can't throw. */
	/* (Infinite recursion when comparing arrays is an uncatchable fatal error) */
	USE_OPLINE
	zval *op1, *op2;
	bool result;

	op1 = EX_VAR(opline->op1.var);
	op2 = RT_CONSTANT(opline, opline->op2);
	result = fast_is_identical_function(op1, op2);
	/* Free is a no-op for const/cv */
	ZEND_VM_SMART_BRANCH(result, 0);
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_IS_NOT_IDENTICAL_NOTHROW_SPEC_CV_CONST_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;
	bool result;

	op1 = EX_VAR(opline->op1.var);
	op2 = RT_CONSTANT(opline, opline->op2);
	result = fast_is_identical_function(op1, op2);
	/* Free is a no-op for const/cv */
	ZEND_VM_SMART_BRANCH(!result, 0);
}

static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_FETCH_DIM_R_INDEX_SPEC_CV_CONST_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *container, *dim, *value;
	zend_long offset;
	HashTable *ht;

	container = EX_VAR(opline->op1.var);
	dim = RT_CONSTANT(opline, opline->op2);
	if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
fetch_dim_r_index_array:
		if (EXPECTED(Z_TYPE_P(dim) == IS_LONG)) {
			offset = Z_LVAL_P(dim);
		} else {
			SAVE_OPLINE();
			zend_fetch_dimension_address_read_R(container, dim, IS_CONST OPLINE_CC EXECUTE_DATA_CC);


			ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
		}
		ht = Z_ARRVAL_P(container);
		ZEND_HASH_INDEX_FIND(ht, offset, value, fetch_dim_r_index_undef);
		ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
		if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
			SAVE_OPLINE();


			ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
		} else {
			ZEND_VM_NEXT_OPCODE();
		}
	} else if (IS_CV != IS_CONST && EXPECTED(Z_TYPE_P(container) == IS_REFERENCE)) {
		container = Z_REFVAL_P(container);
		if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
			goto fetch_dim_r_index_array;
		} else {
			goto fetch_dim_r_index_slow;
		}
	} else {
fetch_dim_r_index_slow:
		SAVE_OPLINE();
		if (IS_CONST == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
			dim++;
		}
		zend_fetch_dimension_address_read_R_slow(container, dim OPLINE_CC EXECUTE_DATA_CC);


		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
	}

fetch_dim_r_index_undef:
	ZVAL_NULL(EX_VAR(opline->result.var));
	SAVE_OPLINE();
	zend_undefined_offset(offset);


	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_FETCH_DIM_R_INDEX_SPEC_CV_TMPVARCV_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *container, *dim, *value;
	zend_long offset;
	HashTable *ht;

	container = EX_VAR(opline->op1.var);
	dim = EX_VAR(opline->op2.var);
	if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
fetch_dim_r_index_array:
		if (EXPECTED(Z_TYPE_P(dim) == IS_LONG)) {
			offset = Z_LVAL_P(dim);
		} else {
			SAVE_OPLINE();
			zend_fetch_dimension_address_read_R(container, dim, (IS_TMP_VAR|IS_VAR|IS_CV) OPLINE_CC EXECUTE_DATA_CC);


			ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
		}
		ht = Z_ARRVAL_P(container);
		ZEND_HASH_INDEX_FIND(ht, offset, value, fetch_dim_r_index_undef);
		ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
		if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
			SAVE_OPLINE();


			ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
		} else {
			ZEND_VM_NEXT_OPCODE();
		}
	} else if (IS_CV != IS_CONST && EXPECTED(Z_TYPE_P(container) == IS_REFERENCE)) {
		container = Z_REFVAL_P(container);
		if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
			goto fetch_dim_r_index_array;
		} else {
			goto fetch_dim_r_index_slow;
		}
	} else {
fetch_dim_r_index_slow:
		SAVE_OPLINE();
		if ((IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
			dim++;
		}
		zend_fetch_dimension_address_read_R_slow(container, dim OPLINE_CC EXECUTE_DATA_CC);


		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
	}

fetch_dim_r_index_undef:
	ZVAL_NULL(EX_VAR(opline->result.var));
	SAVE_OPLINE();
	zend_undefined_offset(offset);


	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_DIV_SPEC_CV_TMPVAR_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;

	SAVE_OPLINE();
	op1 = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
	op2 = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
	div_function(EX_VAR(opline->result.var), op1, op2);


	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_POW_SPEC_CV_TMPVAR_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;

	SAVE_OPLINE();
	op1 = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
	op2 = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
	pow_function(EX_VAR(opline->result.var), op1, op2);


	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_CONCAT_SPEC_CV_TMPVAR_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;

	op1 = EX_VAR(opline->op1.var);
	op2 = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);

	if ((IS_CV == IS_CONST || EXPECTED(Z_TYPE_P(op1) == IS_STRING)) &&
	    ((IS_TMP_VAR|IS_VAR) == IS_CONST || EXPECTED(Z_TYPE_P(op2) == IS_STRING))) {
		zend_string *op1_str = Z_STR_P(op1);
		zend_string *op2_str = Z_STR_P(op2);
		zend_string *str;
		uint32_t flags = ZSTR_GET_COPYABLE_CONCAT_PROPERTIES_BOTH(op1_str, op2_str);

		if (IS_CV != IS_CONST && UNEXPECTED(ZSTR_LEN(op1_str) == 0)) {
			if ((IS_TMP_VAR|IS_VAR) == IS_CONST || (IS_TMP_VAR|IS_VAR) == IS_CV) {
				ZVAL_STR_COPY(EX_VAR(opline->result.var), op2_str);
			} else {
				ZVAL_STR(EX_VAR(opline->result.var), op2_str);
			}
			if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
				zend_string_release_ex(op1_str, 0);
			}
		} else if ((IS_TMP_VAR|IS_VAR) != IS_CONST && UNEXPECTED(ZSTR_LEN(op2_str) == 0)) {
			if (IS_CV == IS_CONST || IS_CV == IS_CV) {
				ZVAL_STR_COPY(EX_VAR(opline->result.var), op1_str);
			} else {
				ZVAL_STR(EX_VAR(opline->result.var), op1_str);
			}
			if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
				zend_string_release_ex(op2_str, 0);
			}
		} else if (IS_CV != IS_CONST && IS_CV != IS_CV &&
		    !ZSTR_IS_INTERNED(op1_str) && GC_REFCOUNT(op1_str) == 1) {
			size_t len = ZSTR_LEN(op1_str);

			if (UNEXPECTED(len > ZSTR_MAX_LEN - ZSTR_LEN(op2_str))) {
				zend_error_noreturn(E_ERROR, "Integer overflow in memory allocation");
			}
			str = zend_string_extend(op1_str, len + ZSTR_LEN(op2_str), 0);
			memcpy(ZSTR_VAL(str) + len, ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
			GC_ADD_FLAGS(str, flags);
			ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
			if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
				zend_string_release_ex(op2_str, 0);
			}
		} else {
			str = zend_string_alloc(ZSTR_LEN(op1_str) + ZSTR_LEN(op2_str), 0);
			memcpy(ZSTR_VAL(str), ZSTR_VAL(op1_str), ZSTR_LEN(op1_str));
			memcpy(ZSTR_VAL(str) + ZSTR_LEN(op1_str), ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
			GC_ADD_FLAGS(str, flags);
			ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
			if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
				zend_string_release_ex(op1_str, 0);
			}
			if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
				zend_string_release_ex(op2_str, 0);
			}
		}
		ZEND_VM_NEXT_OPCODE();
	} else {
		SAVE_OPLINE();

		if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
			op1 = ZVAL_UNDEFINED_OP1();
		}
		if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(op2) == IS_UNDEF)) {
			op2 = ZVAL_UNDEFINED_OP2();
		}
		concat_function(EX_VAR(opline->result.var), op1, op2);


		zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
	}
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_IS_EQUAL_SPEC_CV_TMPVAR_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;
	double d1, d2;

	op1 = EX_VAR(opline->op1.var);
	op2 = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
	if (1 && IS_CV == IS_CONST && (IS_TMP_VAR|IS_VAR) == IS_CONST) {
		/* pass */
	} else if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
		if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
			if (EXPECTED(Z_LVAL_P(op1) == Z_LVAL_P(op2))) {
is_equal_true:
				ZEND_VM_SMART_BRANCH_TRUE_NONE();
			} else {
is_equal_false:
				ZEND_VM_SMART_BRANCH_FALSE_NONE();
			}
		} else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
			d1 = (double)Z_LVAL_P(op1);
			d2 = Z_DVAL_P(op2);
			goto is_equal_double;
		}
	} else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) {
		if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
			d1 = Z_DVAL_P(op1);
			d2 = Z_DVAL_P(op2);
is_equal_double:
			if (d1 == d2) {
				goto is_equal_true;
			} else {
				goto is_equal_false;
			}
		} else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
			d1 = Z_DVAL_P(op1);
			d2 = (double)Z_LVAL_P(op2);
			goto is_equal_double;
		}
	} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
		if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
			bool result = zend_fast_equal_strings(Z_STR_P(op1), Z_STR_P(op2));
			if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
				zval_ptr_dtor_str(op1);
			}
			if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
				zval_ptr_dtor_str(op2);
			}
			if (result) {
				goto is_equal_true;
			} else {
				goto is_equal_false;
			}
		}
	}
	ZEND_VM_DISPATCH_TO_HELPER(zend_is_equal_helper_SPEC_TAILCALL(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_EX op1, op2));
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_IS_EQUAL_SPEC_CV_TMPVAR_JMPZ_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;
	double d1, d2;

	op1 = EX_VAR(opline->op1.var);
	op2 = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
	if (1 && IS_CV == IS_CONST && (IS_TMP_VAR|IS_VAR) == IS_CONST) {
		/* pass */
	} else if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
		if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
			if (EXPECTED(Z_LVAL_P(op1) == Z_LVAL_P(op2))) {
is_equal_true:
				ZEND_VM_SMART_BRANCH_TRUE_JMPZ();
			} else {
is_equal_false:
				ZEND_VM_SMART_BRANCH_FALSE_JMPZ();
			}
		} else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
			d1 = (double)Z_LVAL_P(op1);
			d2 = Z_DVAL_P(op2);
			goto is_equal_double;
		}
	} else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) {
		if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
			d1 = Z_DVAL_P(op1);
			d2 = Z_DVAL_P(op2);
is_equal_double:
			if (d1 == d2) {
				goto is_equal_true;
			} else {
				goto is_equal_false;
			}
		} else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
			d1 = Z_DVAL_P(op1);
			d2 = (double)Z_LVAL_P(op2);
			goto is_equal_double;
		}
	} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
		if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
			bool result = zend_fast_equal_strings(Z_STR_P(op1), Z_STR_P(op2));
			if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
				zval_ptr_dtor_str(op1);
			}
			if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
				zval_ptr_dtor_str(op2);
			}
			if (result) {
				goto is_equal_true;
			} else {
				goto is_equal_false;
			}
		}
	}
	ZEND_VM_DISPATCH_TO_HELPER(zend_is_equal_helper_SPEC_TAILCALL(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_EX op1, op2));
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_IS_EQUAL_SPEC_CV_TMPVAR_JMPNZ_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;
	double d1, d2;

	op1 = EX_VAR(opline->op1.var);
	op2 = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
	if (1 && IS_CV == IS_CONST && (IS_TMP_VAR|IS_VAR) == IS_CONST) {
		/* pass */
	} else if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
		if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
			if (EXPECTED(Z_LVAL_P(op1) == Z_LVAL_P(op2))) {
is_equal_true:
				ZEND_VM_SMART_BRANCH_TRUE_JMPNZ();
			} else {
is_equal_false:
				ZEND_VM_SMART_BRANCH_FALSE_JMPNZ();
			}
		} else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
			d1 = (double)Z_LVAL_P(op1);
			d2 = Z_DVAL_P(op2);
			goto is_equal_double;
		}
	} else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) {
		if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
			d1 = Z_DVAL_P(op1);
			d2 = Z_DVAL_P(op2);
is_equal_double:
			if (d1 == d2) {
				goto is_equal_true;
			} else {
				goto is_equal_false;
			}
		} else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
			d1 = Z_DVAL_P(op1);
			d2 = (double)Z_LVAL_P(op2);
			goto is_equal_double;
		}
	} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
		if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
			bool result = zend_fast_equal_strings(Z_STR_P(op1), Z_STR_P(op2));
			if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
				zval_ptr_dtor_str(op1);
			}
			if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
				zval_ptr_dtor_str(op2);
			}
			if (result) {
				goto is_equal_true;
			} else {
				goto is_equal_false;
			}
		}
	}
	ZEND_VM_DISPATCH_TO_HELPER(zend_is_equal_helper_SPEC_TAILCALL(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_EX op1, op2));
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_IS_NOT_EQUAL_SPEC_CV_TMPVAR_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;
	double d1, d2;

	op1 = EX_VAR(opline->op1.var);
	op2 = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
	if (1 && IS_CV == IS_CONST && (IS_TMP_VAR|IS_VAR) == IS_CONST) {
		/* pass */
	} else if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
		if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
			if (EXPECTED(Z_LVAL_P(op1) != Z_LVAL_P(op2))) {
is_not_equal_true:
				ZEND_VM_SMART_BRANCH_TRUE_NONE();
			} else {
is_not_equal_false:
				ZEND_VM_SMART_BRANCH_FALSE_NONE();
			}
		} else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
			d1 = (double)Z_LVAL_P(op1);
			d2 = Z_DVAL_P(op2);
			goto is_not_equal_double;
		}
	} else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) {
		if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
			d1 = Z_DVAL_P(op1);
			d2 = Z_DVAL_P(op2);
is_not_equal_double:
			if (d1 != d2) {
				goto is_not_equal_true;
			} else {
				goto is_not_equal_false;
			}
		} else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
			d1 = Z_DVAL_P(op1);
			d2 = (double)Z_LVAL_P(op2);
			goto is_not_equal_double;
		}
	} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
		if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
			bool result = zend_fast_equal_strings(Z_STR_P(op1), Z_STR_P(op2));
			if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
				zval_ptr_dtor_str(op1);
			}
			if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
				zval_ptr_dtor_str(op2);
			}
			if (!result) {
				goto is_not_equal_true;
			} else {
				goto is_not_equal_false;
			}
		}
	}
	ZEND_VM_DISPATCH_TO_HELPER(zend_is_not_equal_helper_SPEC_TAILCALL(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_EX op1, op2));
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_IS_NOT_EQUAL_SPEC_CV_TMPVAR_JMPZ_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;
	double d1, d2;

	op1 = EX_VAR(opline->op1.var);
	op2 = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
	if (1 && IS_CV == IS_CONST && (IS_TMP_VAR|IS_VAR) == IS_CONST) {
		/* pass */
	} else if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
		if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
			if (EXPECTED(Z_LVAL_P(op1) != Z_LVAL_P(op2))) {
is_not_equal_true:
				ZEND_VM_SMART_BRANCH_TRUE_JMPZ();
			} else {
is_not_equal_false:
				ZEND_VM_SMART_BRANCH_FALSE_JMPZ();
			}
		} else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
			d1 = (double)Z_LVAL_P(op1);
			d2 = Z_DVAL_P(op2);
			goto is_not_equal_double;
		}
	} else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) {
		if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
			d1 = Z_DVAL_P(op1);
			d2 = Z_DVAL_P(op2);
is_not_equal_double:
			if (d1 != d2) {
				goto is_not_equal_true;
			} else {
				goto is_not_equal_false;
			}
		} else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
			d1 = Z_DVAL_P(op1);
			d2 = (double)Z_LVAL_P(op2);
			goto is_not_equal_double;
		}
	} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
		if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
			bool result = zend_fast_equal_strings(Z_STR_P(op1), Z_STR_P(op2));
			if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
				zval_ptr_dtor_str(op1);
			}
			if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
				zval_ptr_dtor_str(op2);
			}
			if (!result) {
				goto is_not_equal_true;
			} else {
				goto is_not_equal_false;
			}
		}
	}
	ZEND_VM_DISPATCH_TO_HELPER(zend_is_not_equal_helper_SPEC_TAILCALL(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_EX op1, op2));
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_IS_NOT_EQUAL_SPEC_CV_TMPVAR_JMPNZ_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;
	double d1, d2;

	op1 = EX_VAR(opline->op1.var);
	op2 = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
	if (1 && IS_CV == IS_CONST && (IS_TMP_VAR|IS_VAR) == IS_CONST) {
		/* pass */
	} else if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
		if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
			if (EXPECTED(Z_LVAL_P(op1) != Z_LVAL_P(op2))) {
is_not_equal_true:
				ZEND_VM_SMART_BRANCH_TRUE_JMPNZ();
			} else {
is_not_equal_false:
				ZEND_VM_SMART_BRANCH_FALSE_JMPNZ();
			}
		} else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
			d1 = (double)Z_LVAL_P(op1);
			d2 = Z_DVAL_P(op2);
			goto is_not_equal_double;
		}
	} else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) {
		if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
			d1 = Z_DVAL_P(op1);
			d2 = Z_DVAL_P(op2);
is_not_equal_double:
			if (d1 != d2) {
				goto is_not_equal_true;
			} else {
				goto is_not_equal_false;
			}
		} else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
			d1 = Z_DVAL_P(op1);
			d2 = (double)Z_LVAL_P(op2);
			goto is_not_equal_double;
		}
	} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
		if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
			bool result = zend_fast_equal_strings(Z_STR_P(op1), Z_STR_P(op2));
			if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
				zval_ptr_dtor_str(op1);
			}
			if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
				zval_ptr_dtor_str(op2);
			}
			if (!result) {
				goto is_not_equal_true;
			} else {
				goto is_not_equal_false;
			}
		}
	}
	ZEND_VM_DISPATCH_TO_HELPER(zend_is_not_equal_helper_SPEC_TAILCALL(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_EX op1, op2));
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_SPACESHIP_SPEC_CV_TMPVAR_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;

	SAVE_OPLINE();
	op1 = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
	op2 = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
	compare_function(EX_VAR(opline->result.var), op1, op2);


	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_BOOL_XOR_SPEC_CV_TMPVAR_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;

	SAVE_OPLINE();
	op1 = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
	op2 = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
	boolean_xor_function(EX_VAR(opline->result.var), op1, op2);


	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_ASSIGN_OBJ_OP_SPEC_CV_TMPVAR_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *object;
	zval *property;
	zval *value;
	zval *zptr;
	void *_cache_slot[3] = {0};
	void **cache_slot;
	zend_property_info *prop_info;
	zend_object *zobj;
	zend_string *name, *tmp_name;

	SAVE_OPLINE();
	object = EX_VAR(opline->op1.var);
	property = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);

	do {
		value = get_op_data_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1);

		if (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
			if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
				object = Z_REFVAL_P(object);
				goto assign_op_object;
			}
			if (IS_CV == IS_CV
			 && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
				ZVAL_UNDEFINED_OP1();
			}
			zend_throw_non_object_error(object, property OPLINE_CC EXECUTE_DATA_CC);
			break;
		}

assign_op_object:
		/* here we are sure we are dealing with an object */
		zobj = Z_OBJ_P(object);
		if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
			name = Z_STR_P(property);
		} else {
			name = zval_try_get_tmp_string(property, &tmp_name);
			if (UNEXPECTED(!name)) {
				UNDEF_RESULT();
				break;
			}
		}
		cache_slot = ((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR((opline+1)->extended_value) : _cache_slot;
		if (EXPECTED((zptr = zobj->handlers->get_property_ptr_ptr(zobj, name, BP_VAR_RW, cache_slot)) != NULL)) {
			if (UNEXPECTED(Z_ISERROR_P(zptr))) {
				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
					ZVAL_NULL(EX_VAR(opline->result.var));
				}
			} else {
				zend_reference *ref;

				do {
					if (UNEXPECTED(Z_ISREF_P(zptr))) {
						ref = Z_REF_P(zptr);
						zptr = Z_REFVAL_P(zptr);
						if (UNEXPECTED(ZEND_REF_HAS_TYPE_SOURCES(ref))) {
							zend_binary_assign_op_typed_ref(ref, value OPLINE_CC EXECUTE_DATA_CC);
							break;
						}
					}

					prop_info = (zend_property_info*)CACHED_PTR_EX(cache_slot + 2);
					if (prop_info && ZEND_TYPE_IS_SET(prop_info->type)) {
						/* special case for typed properties */
						zend_binary_assign_op_typed_prop(prop_info, zptr, value OPLINE_CC EXECUTE_DATA_CC);
					} else {
						zend_binary_op(zptr, zptr, value OPLINE_CC);
					}
				} while (0);

				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
					ZVAL_COPY(EX_VAR(opline->result.var), zptr);
				}
			}
		} else {
			zend_assign_op_overloaded_property(zobj, name, cache_slot, value OPLINE_CC EXECUTE_DATA_CC);
		}
		if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
			zend_tmp_string_release(tmp_name);
		}
	} while (0);

	FREE_OP((opline+1)->op1_type, (opline+1)->op1.var);
	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));


	/* assign_obj has two opcodes! */
	ZEND_VM_NEXT_OPCODE_EX(1, 2);
}

/* No specialization for op_types (CONST|TMP|VAR|CV, UNUSED|CONST|TMPVAR) */
static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_ASSIGN_DIM_OP_SPEC_CV_TMPVAR_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *var_ptr;
	zval *value, *container, *dim;
	HashTable *ht;

	SAVE_OPLINE();
	container = EX_VAR(opline->op1.var);

	if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
assign_dim_op_array:
		SEPARATE_ARRAY(container);
		ht = Z_ARRVAL_P(container);
assign_dim_op_new_array:
		dim = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
		if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED) {
			var_ptr = zend_hash_next_index_insert(ht, &EG(uninitialized_zval));
			if (UNEXPECTED(!var_ptr)) {
				zend_cannot_add_element();
				goto assign_dim_op_ret_null;
			}
		} else {
			if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
				var_ptr = zend_fetch_dimension_address_inner_RW_CONST(ht, dim EXECUTE_DATA_CC);
			} else {
				var_ptr = zend_fetch_dimension_address_inner_RW(ht, dim EXECUTE_DATA_CC);
			}
			if (UNEXPECTED(!var_ptr)) {
				goto assign_dim_op_ret_null;
			}
		}

		value = get_op_data_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1);

		do {
			if ((IS_TMP_VAR|IS_VAR) != IS_UNUSED && UNEXPECTED(Z_ISREF_P(var_ptr))) {
				zend_reference *ref = Z_REF_P(var_ptr);
				var_ptr = Z_REFVAL_P(var_ptr);
				if (UNEXPECTED(ZEND_REF_HAS_TYPE_SOURCES(ref))) {
					zend_binary_assign_op_typed_ref(ref, value OPLINE_CC EXECUTE_DATA_CC);
					break;
				}
			}
			zend_binary_op(var_ptr, var_ptr, value OPLINE_CC);
		} while (0);

		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
			ZVAL_COPY(EX_VAR(opline->result.var), var_ptr);
		}
		FREE_OP((opline+1)->op1_type, (opline+1)->op1.var);
	} else {
		if (EXPECTED(Z_ISREF_P(container))) {
			container = Z_REFVAL_P(container);
			if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
				goto assign_dim_op_array;
			}
		}

		if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
			zend_object *obj = Z_OBJ_P(container);

			dim = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
			if ((IS_TMP_VAR|IS_VAR) == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
				dim++;
			}
			zend_binary_assign_op_obj_dim(obj, dim OPLINE_CC EXECUTE_DATA_CC);
		} else if (EXPECTED(Z_TYPE_P(container) <= IS_FALSE)) {
			uint8_t old_type;

			if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(container) == IS_UNDEF)) {
				ZVAL_UNDEFINED_OP1();
			}
			ht = zend_new_array(8);
			old_type = Z_TYPE_P(container);
			ZVAL_ARR(container, ht);
			if (UNEXPECTED(old_type == IS_FALSE)) {
				GC_ADDREF(ht);
				zend_false_to_array_deprecated();
				if (UNEXPECTED(GC_DELREF(ht) == 0)) {
					zend_array_destroy(ht);
					goto assign_dim_op_ret_null;
				}
			}
			goto assign_dim_op_new_array;
		} else {
			dim = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
			zend_binary_assign_op_dim_slow(container, dim OPLINE_CC EXECUTE_DATA_CC);
assign_dim_op_ret_null:
			FREE_OP((opline+1)->op1_type, (opline+1)->op1.var);
			if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
				ZVAL_NULL(EX_VAR(opline->result.var));
			}
		}
	}

	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));


	ZEND_VM_NEXT_OPCODE_EX(1, 2);
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_ASSIGN_OP_SPEC_CV_TMPVAR_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *var_ptr;
	zval *value;

	SAVE_OPLINE();
	value = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
	var_ptr = _get_zval_ptr_cv_BP_VAR_RW(opline->op1.var EXECUTE_DATA_CC);

	do {
		if (UNEXPECTED(Z_TYPE_P(var_ptr) == IS_REFERENCE)) {
			zend_reference *ref = Z_REF_P(var_ptr);
			var_ptr = Z_REFVAL_P(var_ptr);
			if (UNEXPECTED(ZEND_REF_HAS_TYPE_SOURCES(ref))) {
				zend_binary_assign_op_typed_ref(ref, value OPLINE_CC EXECUTE_DATA_CC);
				break;
			}
		}
		zend_binary_op(var_ptr, var_ptr, value OPLINE_CC);
	} while (0);

	if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
		ZVAL_COPY(EX_VAR(opline->result.var), var_ptr);
	}

	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));


	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_PRE_INC_OBJ_SPEC_CV_TMPVAR_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *object;
	zval *property;
	zval *zptr;
	void *_cache_slot[3] = {0};
	void **cache_slot;
	zend_property_info *prop_info;
	zend_object *zobj;
	zend_string *name, *tmp_name;

	SAVE_OPLINE();
	object = EX_VAR(opline->op1.var);
	property = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);

	do {
		if (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
			if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
				object = Z_REFVAL_P(object);
				goto pre_incdec_object;
			}
			if (IS_CV == IS_CV
			 && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
				ZVAL_UNDEFINED_OP1();
			}
			zend_throw_non_object_error(object, property OPLINE_CC EXECUTE_DATA_CC);
			break;
		}

pre_incdec_object:
		/* here we are sure we are dealing with an object */
		zobj = Z_OBJ_P(object);
		if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
			name = Z_STR_P(property);
		} else {
			name = zval_try_get_tmp_string(property, &tmp_name);
			if (UNEXPECTED(!name)) {
				UNDEF_RESULT();
				break;
			}
		}
		cache_slot = ((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(opline->extended_value) : _cache_slot;
		if (EXPECTED((zptr = zobj->handlers->get_property_ptr_ptr(zobj, name, BP_VAR_RW, cache_slot)) != NULL)) {
			if (UNEXPECTED(Z_ISERROR_P(zptr))) {
				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
					ZVAL_NULL(EX_VAR(opline->result.var));
				}
			} else {
				prop_info = (zend_property_info *) CACHED_PTR_EX(cache_slot + 2);
				zend_pre_incdec_property_zval(zptr,
					prop_info && ZEND_TYPE_IS_SET(prop_info->type) ? prop_info : NULL OPLINE_CC EXECUTE_DATA_CC);
			}
		} else {
			zend_pre_incdec_overloaded_property(zobj, name, cache_slot OPLINE_CC EXECUTE_DATA_CC);
		}
		if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
			zend_tmp_string_release(tmp_name);
		}
	} while (0);

	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));


	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_POST_INC_OBJ_SPEC_CV_TMPVAR_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *object;
	zval *property;
	zval *zptr;
	void *_cache_slot[3] = {0};
	void **cache_slot;
	zend_property_info *prop_info;
	zend_object *zobj;
	zend_string *name, *tmp_name;

	SAVE_OPLINE();
	object = EX_VAR(opline->op1.var);
	property = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);

	do {
		if (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
			if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
				object = Z_REFVAL_P(object);
				goto post_incdec_object;
			}
			if (IS_CV == IS_CV
			 && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
				ZVAL_UNDEFINED_OP1();
			}
			zend_throw_non_object_error(object, property OPLINE_CC EXECUTE_DATA_CC);
			break;
		}

post_incdec_object:
		/* here we are sure we are dealing with an object */
		zobj = Z_OBJ_P(object);
		if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
			name = Z_STR_P(property);
		} else {
			name = zval_try_get_tmp_string(property, &tmp_name);
			if (UNEXPECTED(!name)) {
				ZVAL_UNDEF(EX_VAR(opline->result.var));
				break;
			}
		}
		cache_slot = ((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(opline->extended_value) : _cache_slot;
		if (EXPECTED((zptr = zobj->handlers->get_property_ptr_ptr(zobj, name, BP_VAR_RW, cache_slot)) != NULL)) {
			if (UNEXPECTED(Z_ISERROR_P(zptr))) {
				ZVAL_NULL(EX_VAR(opline->result.var));
			} else {
				prop_info = (zend_property_info*)CACHED_PTR_EX(cache_slot + 2);
				zend_post_incdec_property_zval(zptr,
					prop_info && ZEND_TYPE_IS_SET(prop_info->type) ? prop_info : NULL OPLINE_CC EXECUTE_DATA_CC);
			}
		} else {
			zend_post_incdec_overloaded_property(zobj, name, cache_slot OPLINE_CC EXECUTE_DATA_CC);
		}
		if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
			zend_tmp_string_release(tmp_name);
		}
	} while (0);

	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));


	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_FETCH_DIM_R_SPEC_CV_TMPVAR_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *container, *dim, *value;

	SAVE_OPLINE();
	container = EX_VAR(opline->op1.var);
	dim = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
	if (IS_CV != IS_CONST) {
		if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
fetch_dim_r_array:
			value = zend_fetch_dimension_address_inner(Z_ARRVAL_P(container), dim, (IS_TMP_VAR|IS_VAR), BP_VAR_R EXECUTE_DATA_CC);
			ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
		} else if (EXPECTED(Z_TYPE_P(container) == IS_REFERENCE)) {
			container = Z_REFVAL_P(container);
			if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
				goto fetch_dim_r_array;
			} else {
				goto fetch_dim_r_slow;
			}
		} else {
fetch_dim_r_slow:
			if ((IS_TMP_VAR|IS_VAR) == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
				dim++;
			}
			zend_fetch_dimension_address_read_R_slow(container, dim OPLINE_CC EXECUTE_DATA_CC);
		}
	} else {
		zend_fetch_dimension_address_read_R(container, dim, (IS_TMP_VAR|IS_VAR) OPLINE_CC EXECUTE_DATA_CC);
	}
	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));


	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_FETCH_DIM_W_SPEC_CV_TMPVAR_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *container;

	SAVE_OPLINE();
	container = EX_VAR(opline->op1.var);
	zend_fetch_dimension_address_W(container, _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC), (IS_TMP_VAR|IS_VAR) OPLINE_CC EXECUTE_DATA_CC);
	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
	if (IS_CV == IS_VAR) {
		FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
	}
	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_FETCH_DIM_RW_SPEC_CV_TMPVAR_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *container;

	SAVE_OPLINE();
	container = EX_VAR(opline->op1.var);
	zend_fetch_dimension_address_RW(container, _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC), (IS_TMP_VAR|IS_VAR) OPLINE_CC EXECUTE_DATA_CC);
	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
	if (IS_CV == IS_VAR) {
		FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
	}
	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_FETCH_DIM_IS_SPEC_CV_TMPVAR_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *container;

	SAVE_OPLINE();
	container = EX_VAR(opline->op1.var);
	zend_fetch_dimension_address_read_IS(container, _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC), (IS_TMP_VAR|IS_VAR) OPLINE_CC EXECUTE_DATA_CC);
	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));


	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_TMPVAR_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
#if 0
	USE_OPLINE
#endif

	if (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) {
		if ((IS_CV & (IS_CONST|IS_TMP_VAR))) {
			ZEND_VM_TAIL_CALL(zend_use_tmp_in_write_context_helper_SPEC_TAILCALL(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
		}
		ZEND_VM_TAIL_CALL(ZEND_FETCH_DIM_W_SPEC_CV_TMPVAR_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
	} else {
		if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED) {
			ZEND_VM_TAIL_CALL(zend_use_undef_in_read_context_helper_SPEC_TAILCALL(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
		}
		ZEND_VM_TAIL_CALL(ZEND_FETCH_DIM_R_SPEC_CV_TMPVAR_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
	}
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_FETCH_DIM_UNSET_SPEC_CV_TMPVAR_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *container;

	SAVE_OPLINE();
	container = EX_VAR(opline->op1.var);
	zend_fetch_dimension_address_UNSET(container, _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC), (IS_TMP_VAR|IS_VAR) OPLINE_CC EXECUTE_DATA_CC);
	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
	if (IS_CV == IS_VAR) {
		FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
	}
	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_FETCH_OBJ_R_SPEC_CV_TMPVAR_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *container;
	void **cache_slot = NULL;

	SAVE_OPLINE();
	container = EX_VAR(opline->op1.var);

	if (IS_CV == IS_CONST ||
	    (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
		do {
			if ((IS_CV & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
				container = Z_REFVAL_P(container);
				if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
					break;
				}
			}
			if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
				ZVAL_UNDEFINED_OP1();
			}
			zend_wrong_property_read(container, _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC));
			ZVAL_NULL(EX_VAR(opline->result.var));
			goto fetch_obj_r_finish;
		} while (0);
	}

	/* here we are sure we are dealing with an object */
	do {
		zend_object *zobj = Z_OBJ_P(container);
		zend_string *name, *tmp_name;
		zval *retval;

		if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
			cache_slot = CACHE_ADDR(opline->extended_value & ~ZEND_FETCH_REF /* FUNC_ARG fetch may contain it */);

			if (EXPECTED(zobj->ce == CACHED_PTR_EX(cache_slot))) {
				uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);

				if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
fetch_obj_r_simple:
					retval = OBJ_PROP(zobj, prop_offset);
					if (EXPECTED(Z_TYPE_INFO_P(retval) != IS_UNDEF)) {
						if (0 || (IS_CV & (IS_TMP_VAR|IS_VAR)) != 0) {
							goto fetch_obj_r_copy;
						} else {
fetch_obj_r_fast_copy:
							ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
							ZEND_VM_NEXT_OPCODE();
						}
					}
				} else if (UNEXPECTED(IS_HOOKED_PROPERTY_OFFSET(prop_offset))) {
					zend_property_info *prop_info = CACHED_PTR_EX(cache_slot + 2);
					if (ZEND_IS_PROPERTY_HOOK_SIMPLE_READ(prop_offset)) {
						prop_offset = prop_info->offset;
						goto fetch_obj_r_simple;
					} else if (EXPECTED(ZEND_IS_PROPERTY_HOOK_SIMPLE_GET(prop_offset))) {
						zend_function *hook = prop_info->hooks[ZEND_PROPERTY_HOOK_GET];
						ZEND_ASSERT(hook->type == ZEND_USER_FUNCTION);
						ZEND_ASSERT(RUN_TIME_CACHE(&hook->op_array));

						uint32_t call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_HAS_THIS;
						if (IS_CV & IS_CV) {
							GC_ADDREF(zobj);
						}
						if (IS_CV & (IS_CV|IS_VAR|IS_TMP_VAR)) {
							call_info |= ZEND_CALL_RELEASE_THIS;
						}
						zend_execute_data *call = zend_vm_stack_push_call_frame(call_info, hook, 0, zobj);
						call->prev_execute_data = execute_data;
						call->call = NULL;
						call->return_value = EX_VAR(opline->result.var);
						call->run_time_cache = RUN_TIME_CACHE(&hook->op_array);

						execute_data = call;
						EG(current_execute_data) = execute_data;
						zend_init_cvs(0, hook->op_array.last_var EXECUTE_DATA_CC);

#if defined(ZEND_VM_IP_GLOBAL_REG) && ((ZEND_VM_KIND == ZEND_VM_KIND_CALL) || (ZEND_VM_KIND == ZEND_VM_KIND_HYBRID))
						opline = hook->op_array.opcodes;
#else
						EX(opline) = hook->op_array.opcodes;
#endif
						LOAD_OPLINE_EX();




						ZEND_VM_ENTER_EX();
					}
					/* Fall through to read_property for hooks. */
				} else if (EXPECTED(zobj->properties != NULL)) {
					ZEND_ASSERT(IS_DYNAMIC_PROPERTY_OFFSET(prop_offset));
					name = Z_STR_P(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC));
					if (!IS_UNKNOWN_DYNAMIC_PROPERTY_OFFSET(prop_offset)) {
						uintptr_t idx = ZEND_DECODE_DYN_PROP_OFFSET(prop_offset);

						if (EXPECTED(idx < zobj->properties->nNumUsed * sizeof(Bucket))) {
							Bucket *p = (Bucket*)((char*)zobj->properties->arData + idx);

							if (EXPECTED(p->key == name) ||
							    (EXPECTED(p->h == ZSTR_H(name)) &&
							     EXPECTED(p->key != NULL) &&
							     EXPECTED(zend_string_equal_content(p->key, name)))) {
								retval = &p->val;
								if (0 || (IS_CV & (IS_TMP_VAR|IS_VAR)) != 0) {
									goto fetch_obj_r_copy;
								} else {
									goto fetch_obj_r_fast_copy;
								}
							}
						}
						CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_DYNAMIC_PROPERTY_OFFSET);
					}
					retval = zend_hash_find_known_hash(zobj->properties, name);
					if (EXPECTED(retval)) {
						uintptr_t idx = (char*)retval - (char*)zobj->properties->arData;
						CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_ENCODE_DYN_PROP_OFFSET(idx));
						if (0 || (IS_CV & (IS_TMP_VAR|IS_VAR)) != 0) {
							goto fetch_obj_r_copy;
						} else {
							goto fetch_obj_r_fast_copy;
						}
					}
				}
			}
			name = Z_STR_P(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC));
		} else {
			name = zval_try_get_tmp_string(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC), &tmp_name);
			if (UNEXPECTED(!name)) {
				ZVAL_UNDEF(EX_VAR(opline->result.var));
				break;
			}
		}

#if ZEND_DEBUG
		/* For non-standard object handlers, verify a declared property type in debug builds.
		 * Fetch prop_info before calling read_property(), as it may deallocate the object. */
		zend_property_info *prop_info = NULL;
		if (zobj->handlers->read_property != zend_std_read_property) {
			prop_info = zend_get_property_info(zobj->ce, name, /* silent */ true);
		}
#endif
		retval = zobj->handlers->read_property(zobj, name, BP_VAR_R, cache_slot, EX_VAR(opline->result.var));
#if ZEND_DEBUG
		if (!EG(exception) && prop_info && prop_info != ZEND_WRONG_PROPERTY_INFO
				&& ZEND_TYPE_IS_SET(prop_info->type)) {
			ZVAL_OPT_DEREF(retval);
			zend_verify_property_type(prop_info, retval, /* strict */ true);
		}
#endif

		if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
			zend_tmp_string_release(tmp_name);
		}

		if (retval != EX_VAR(opline->result.var)) {
fetch_obj_r_copy:
			ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
		} else if (UNEXPECTED(Z_ISREF_P(retval))) {
			zend_unwrap_reference(retval);
		}
	} while (0);

fetch_obj_r_finish:
	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));


	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_FETCH_OBJ_W_SPEC_CV_TMPVAR_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *property, *container, *result;

	SAVE_OPLINE();

	container = EX_VAR(opline->op1.var);
	property = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
	result = EX_VAR(opline->result.var);
	zend_fetch_property_address(
		result, container, IS_CV, property, (IS_TMP_VAR|IS_VAR),
		(((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(opline->extended_value & ~ZEND_FETCH_OBJ_FLAGS) : NULL),
		BP_VAR_W, opline->extended_value, NULL OPLINE_CC EXECUTE_DATA_CC);
	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
	if (IS_CV == IS_VAR) {
		FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
	}
	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_FETCH_OBJ_RW_SPEC_CV_TMPVAR_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *property, *container, *result;

	SAVE_OPLINE();
	container = EX_VAR(opline->op1.var);
	property = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
	result = EX_VAR(opline->result.var);
	zend_fetch_property_address(result, container, IS_CV, property, (IS_TMP_VAR|IS_VAR), (((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL), BP_VAR_RW, 0, NULL OPLINE_CC EXECUTE_DATA_CC);
	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
	if (IS_CV == IS_VAR) {
		FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
	}
	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_FETCH_OBJ_IS_SPEC_CV_TMPVAR_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *container;
	void **cache_slot = NULL;

	SAVE_OPLINE();
	container = _get_zval_ptr_cv_BP_VAR_IS(opline->op1.var EXECUTE_DATA_CC);

	if (IS_CV == IS_CONST ||
	    (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
		do {
			if ((IS_CV & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
				container = Z_REFVAL_P(container);
				if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
					break;
				}
			}
			if ((IS_TMP_VAR|IS_VAR) == IS_CV && Z_TYPE_P(EX_VAR(opline->op2.var)) == IS_UNDEF) {
				ZVAL_UNDEFINED_OP2();
			}
			ZVAL_NULL(EX_VAR(opline->result.var));
			goto fetch_obj_is_finish;
		} while (0);
	}

	/* here we are sure we are dealing with an object */
	do {
		zend_object *zobj = Z_OBJ_P(container);
		zend_string *name, *tmp_name;
		zval *retval;

		if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
			cache_slot = CACHE_ADDR(opline->extended_value);

			if (EXPECTED(zobj->ce == CACHED_PTR_EX(cache_slot))) {
				uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);

				if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
fetch_obj_is_simple:
					retval = OBJ_PROP(zobj, prop_offset);
					if (EXPECTED(Z_TYPE_P(retval) != IS_UNDEF)) {
						if (0 || (IS_CV & (IS_TMP_VAR|IS_VAR)) != 0) {
							goto fetch_obj_is_copy;
						} else {
fetch_obj_is_fast_copy:
							ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
							ZEND_VM_NEXT_OPCODE();
						}
					}
				} else if (UNEXPECTED(IS_HOOKED_PROPERTY_OFFSET(prop_offset))) {
					if (ZEND_IS_PROPERTY_HOOK_SIMPLE_READ(prop_offset)) {
						zend_property_info *prop_info = CACHED_PTR_EX(cache_slot + 2);
						prop_offset = prop_info->offset;
						goto fetch_obj_is_simple;
					}
					/* Fall through to read_property for hooks. */
				} else if (EXPECTED(zobj->properties != NULL)) {
					ZEND_ASSERT(IS_DYNAMIC_PROPERTY_OFFSET(prop_offset));
					name = Z_STR_P(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC));
					if (!IS_UNKNOWN_DYNAMIC_PROPERTY_OFFSET(prop_offset)) {
						uintptr_t idx = ZEND_DECODE_DYN_PROP_OFFSET(prop_offset);

						if (EXPECTED(idx < zobj->properties->nNumUsed * sizeof(Bucket))) {
							Bucket *p = (Bucket*)((char*)zobj->properties->arData + idx);

							if (EXPECTED(p->key == name) ||
							    (EXPECTED(p->h == ZSTR_H(name)) &&
							     EXPECTED(p->key != NULL) &&
							     EXPECTED(zend_string_equal_content(p->key, name)))) {
								retval = &p->val;
								if (0 || (IS_CV & (IS_TMP_VAR|IS_VAR)) != 0) {
									goto fetch_obj_is_copy;
								} else {
									goto fetch_obj_is_fast_copy;
								}
							}
						}
						CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_DYNAMIC_PROPERTY_OFFSET);
					}
					retval = zend_hash_find_known_hash(zobj->properties, name);
					if (EXPECTED(retval)) {
						uintptr_t idx = (char*)retval - (char*)zobj->properties->arData;
						CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_ENCODE_DYN_PROP_OFFSET(idx));
						if (0 || (IS_CV & (IS_TMP_VAR|IS_VAR)) != 0) {
							goto fetch_obj_is_copy;
						} else {
							goto fetch_obj_is_fast_copy;
						}
					}
				}
			}
			name = Z_STR_P(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC));
		} else {
			name = zval_try_get_tmp_string(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC), &tmp_name);
			if (UNEXPECTED(!name)) {
				ZVAL_UNDEF(EX_VAR(opline->result.var));
				break;
			}
		}

		retval = zobj->handlers->read_property(zobj, name, BP_VAR_IS, cache_slot, EX_VAR(opline->result.var));

		if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
			zend_tmp_string_release(tmp_name);
		}

		if (retval != EX_VAR(opline->result.var)) {
fetch_obj_is_copy:
			ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
		} else if (UNEXPECTED(Z_ISREF_P(retval))) {
			zend_unwrap_reference(retval);
		}
	} while (0);

fetch_obj_is_finish:
	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));


	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CV_TMPVAR_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
#if 0
	USE_OPLINE
#endif

	if (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) {
		/* Behave like FETCH_OBJ_W */
		if ((IS_CV & (IS_CONST|IS_TMP_VAR))) {
			ZEND_VM_TAIL_CALL(zend_use_tmp_in_write_context_helper_SPEC_TAILCALL(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
		}
		ZEND_VM_TAIL_CALL(ZEND_FETCH_OBJ_W_SPEC_CV_TMPVAR_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
	} else {
		ZEND_VM_TAIL_CALL(ZEND_FETCH_OBJ_R_SPEC_CV_TMPVAR_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
	}
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_FETCH_OBJ_UNSET_SPEC_CV_TMPVAR_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *container, *property, *result;

	SAVE_OPLINE();
	container = EX_VAR(opline->op1.var);
	property = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
	result = EX_VAR(opline->result.var);
	zend_fetch_property_address(result, container, IS_CV, property, (IS_TMP_VAR|IS_VAR), (((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL), BP_VAR_UNSET, 0, NULL OPLINE_CC EXECUTE_DATA_CC);
	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
	if (IS_CV == IS_VAR) {
		FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
	}
	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_DATA_CONST_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *object, *value, tmp;
	zend_object *zobj;
	zend_string *name, *tmp_name;
	zend_refcounted *garbage = NULL;

	SAVE_OPLINE();
	object = EX_VAR(opline->op1.var);
	value = RT_CONSTANT((opline+1), (opline+1)->op1);

	if (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
		if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
			object = Z_REFVAL_P(object);
			goto assign_object;
		}
		zend_throw_non_object_error(object, _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC) OPLINE_CC EXECUTE_DATA_CC);
		value = &EG(uninitialized_zval);
		goto free_and_exit_assign_obj;
	}

assign_object:
	zobj = Z_OBJ_P(object);
	if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
		if (EXPECTED(zobj->ce == CACHED_PTR(opline->extended_value))) {
			void **cache_slot = CACHE_ADDR(opline->extended_value);
			uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
			zval *property_val;
			zend_property_info *prop_info;

			if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
				prop_info = (zend_property_info*) CACHED_PTR_EX(cache_slot + 2);

assign_obj_simple:
				property_val = OBJ_PROP(zobj, prop_offset);
				if (Z_TYPE_P(property_val) != IS_UNDEF) {
					if (prop_info != NULL) {
						value = zend_assign_to_typed_prop(prop_info, property_val, value, &garbage EXECUTE_DATA_CC);
						goto free_and_exit_assign_obj;
					} else {
fast_assign_obj:
						value = zend_assign_to_variable_ex(property_val, value, IS_CONST, EX_USES_STRICT_TYPES(), &garbage);
						if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
							ZVAL_COPY(EX_VAR(opline->result.var), value);
						}
						goto exit_assign_obj;
					}
				}
			} else if (EXPECTED(IS_DYNAMIC_PROPERTY_OFFSET(prop_offset))) {
				name = Z_STR_P(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC));
				if (UNEXPECTED(zend_lazy_object_must_init(zobj))) {
					zobj = zend_lazy_object_init(zobj);
					if (!zobj) {
						value = &EG(uninitialized_zval);
						goto free_and_exit_assign_obj;
					}
				}
				if (!zobj->ce->__set && (zobj->ce->ce_flags & ZEND_ACC_ALLOW_DYNAMIC_PROPERTIES)) {
					rebuild_object_properties_internal(zobj);
				}
				if (EXPECTED(zobj->properties != NULL)) {
					if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
						if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
							GC_DELREF(zobj->properties);
						}
						zobj->properties = zend_array_dup(zobj->properties);
					}
					property_val = zend_hash_find_known_hash(zobj->properties, name);
					if (property_val) {
						goto fast_assign_obj;
					}
				}

				if (!zobj->ce->__set && (zobj->ce->ce_flags & ZEND_ACC_ALLOW_DYNAMIC_PROPERTIES)) {
					if (IS_CONST == IS_CONST) {
						if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
							Z_ADDREF_P(value);
						}
					} else if (IS_CONST != IS_TMP_VAR) {
						if (Z_ISREF_P(value)) {
							if (IS_CONST == IS_VAR) {
								zend_reference *ref = Z_REF_P(value);
								if (GC_DELREF(ref) == 0) {
									ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
									efree_size(ref, sizeof(zend_reference));
									value = &tmp;
								} else {
									value = Z_REFVAL_P(value);
									Z_TRY_ADDREF_P(value);
								}
							} else {
								value = Z_REFVAL_P(value);
								Z_TRY_ADDREF_P(value);
							}
						} else if (IS_CONST == IS_CV) {
							Z_TRY_ADDREF_P(value);
						}
					}
					zend_hash_add_new(zobj->properties, name, value);
					if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
						ZVAL_COPY(EX_VAR(opline->result.var), value);
					}
					goto exit_assign_obj;
				}
			} else {
				ZEND_ASSERT(IS_HOOKED_PROPERTY_OFFSET(prop_offset));
				if (ZEND_IS_PROPERTY_HOOK_SIMPLE_WRITE(prop_offset)) {
					prop_info = CACHED_PTR_EX(cache_slot + 2);
					prop_offset = prop_info->offset;
					if (!ZEND_TYPE_IS_SET(prop_info->type)) {
						prop_info = NULL;
					}
					goto assign_obj_simple;
				}
				/* Fall through to write_property for hooks. */
			}
		}
		name = Z_STR_P(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC));
	} else {
		name = zval_try_get_tmp_string(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC), &tmp_name);
		if (UNEXPECTED(!name)) {


			UNDEF_RESULT();
			goto exit_assign_obj;
		}
	}

	if (IS_CONST == IS_CV || IS_CONST == IS_VAR) {
		ZVAL_DEREF(value);
	}

	value = zobj->handlers->write_property(zobj, name, value, ((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);

	if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
		zend_tmp_string_release(tmp_name);
	}

free_and_exit_assign_obj:
	if (UNEXPECTED(RETURN_VALUE_USED(opline)) && value) {
		ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
	}


exit_assign_obj:
	if (garbage) {
		GC_DTOR_NO_REF(garbage);
	}
	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));


	/* assign_obj has two opcodes! */
	ZEND_VM_NEXT_OPCODE_EX(1, 2);
}

/* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CONST|VAR) */
static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_DATA_TMP_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *object, *value, tmp;
	zend_object *zobj;
	zend_string *name, *tmp_name;
	zend_refcounted *garbage = NULL;

	SAVE_OPLINE();
	object = EX_VAR(opline->op1.var);
	value = _get_zval_ptr_tmp((opline+1)->op1.var EXECUTE_DATA_CC);

	if (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
		if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
			object = Z_REFVAL_P(object);
			goto assign_object;
		}
		zend_throw_non_object_error(object, _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC) OPLINE_CC EXECUTE_DATA_CC);
		value = &EG(uninitialized_zval);
		goto free_and_exit_assign_obj;
	}

assign_object:
	zobj = Z_OBJ_P(object);
	if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
		if (EXPECTED(zobj->ce == CACHED_PTR(opline->extended_value))) {
			void **cache_slot = CACHE_ADDR(opline->extended_value);
			uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
			zval *property_val;
			zend_property_info *prop_info;

			if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
				prop_info = (zend_property_info*) CACHED_PTR_EX(cache_slot + 2);

assign_obj_simple:
				property_val = OBJ_PROP(zobj, prop_offset);
				if (Z_TYPE_P(property_val) != IS_UNDEF) {
					if (prop_info != NULL) {
						value = zend_assign_to_typed_prop(prop_info, property_val, value, &garbage EXECUTE_DATA_CC);
						goto free_and_exit_assign_obj;
					} else {
fast_assign_obj:
						value = zend_assign_to_variable_ex(property_val, value, IS_TMP_VAR, EX_USES_STRICT_TYPES(), &garbage);
						if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
							ZVAL_COPY(EX_VAR(opline->result.var), value);
						}
						goto exit_assign_obj;
					}
				}
			} else if (EXPECTED(IS_DYNAMIC_PROPERTY_OFFSET(prop_offset))) {
				name = Z_STR_P(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC));
				if (UNEXPECTED(zend_lazy_object_must_init(zobj))) {
					zobj = zend_lazy_object_init(zobj);
					if (!zobj) {
						value = &EG(uninitialized_zval);
						goto free_and_exit_assign_obj;
					}
				}
				if (!zobj->ce->__set && (zobj->ce->ce_flags & ZEND_ACC_ALLOW_DYNAMIC_PROPERTIES)) {
					rebuild_object_properties_internal(zobj);
				}
				if (EXPECTED(zobj->properties != NULL)) {
					if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
						if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
							GC_DELREF(zobj->properties);
						}
						zobj->properties = zend_array_dup(zobj->properties);
					}
					property_val = zend_hash_find_known_hash(zobj->properties, name);
					if (property_val) {
						goto fast_assign_obj;
					}
				}

				if (!zobj->ce->__set && (zobj->ce->ce_flags & ZEND_ACC_ALLOW_DYNAMIC_PROPERTIES)) {
					if (IS_TMP_VAR == IS_CONST) {
						if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
							Z_ADDREF_P(value);
						}
					} else if (IS_TMP_VAR != IS_TMP_VAR) {
						if (Z_ISREF_P(value)) {
							if (IS_TMP_VAR == IS_VAR) {
								zend_reference *ref = Z_REF_P(value);
								if (GC_DELREF(ref) == 0) {
									ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
									efree_size(ref, sizeof(zend_reference));
									value = &tmp;
								} else {
									value = Z_REFVAL_P(value);
									Z_TRY_ADDREF_P(value);
								}
							} else {
								value = Z_REFVAL_P(value);
								Z_TRY_ADDREF_P(value);
							}
						} else if (IS_TMP_VAR == IS_CV) {
							Z_TRY_ADDREF_P(value);
						}
					}
					zend_hash_add_new(zobj->properties, name, value);
					if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
						ZVAL_COPY(EX_VAR(opline->result.var), value);
					}
					goto exit_assign_obj;
				}
			} else {
				ZEND_ASSERT(IS_HOOKED_PROPERTY_OFFSET(prop_offset));
				if (ZEND_IS_PROPERTY_HOOK_SIMPLE_WRITE(prop_offset)) {
					prop_info = CACHED_PTR_EX(cache_slot + 2);
					prop_offset = prop_info->offset;
					if (!ZEND_TYPE_IS_SET(prop_info->type)) {
						prop_info = NULL;
					}
					goto assign_obj_simple;
				}
				/* Fall through to write_property for hooks. */
			}
		}
		name = Z_STR_P(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC));
	} else {
		name = zval_try_get_tmp_string(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC), &tmp_name);
		if (UNEXPECTED(!name)) {
			zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
			UNDEF_RESULT();
			goto exit_assign_obj;
		}
	}

	if (IS_TMP_VAR == IS_CV || IS_TMP_VAR == IS_VAR) {
		ZVAL_DEREF(value);
	}

	value = zobj->handlers->write_property(zobj, name, value, ((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);

	if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
		zend_tmp_string_release(tmp_name);
	}

free_and_exit_assign_obj:
	if (UNEXPECTED(RETURN_VALUE_USED(opline)) && value) {
		ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
	}
	zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
exit_assign_obj:
	if (garbage) {
		GC_DTOR_NO_REF(garbage);
	}
	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));


	/* assign_obj has two opcodes! */
	ZEND_VM_NEXT_OPCODE_EX(1, 2);
}

/* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CONST|VAR) */
static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_DATA_VAR_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *object, *value, tmp;
	zend_object *zobj;
	zend_string *name, *tmp_name;
	zend_refcounted *garbage = NULL;

	SAVE_OPLINE();
	object = EX_VAR(opline->op1.var);
	value = _get_zval_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);

	if (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
		if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
			object = Z_REFVAL_P(object);
			goto assign_object;
		}
		zend_throw_non_object_error(object, _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC) OPLINE_CC EXECUTE_DATA_CC);
		value = &EG(uninitialized_zval);
		goto free_and_exit_assign_obj;
	}

assign_object:
	zobj = Z_OBJ_P(object);
	if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
		if (EXPECTED(zobj->ce == CACHED_PTR(opline->extended_value))) {
			void **cache_slot = CACHE_ADDR(opline->extended_value);
			uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
			zval *property_val;
			zend_property_info *prop_info;

			if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
				prop_info = (zend_property_info*) CACHED_PTR_EX(cache_slot + 2);

assign_obj_simple:
				property_val = OBJ_PROP(zobj, prop_offset);
				if (Z_TYPE_P(property_val) != IS_UNDEF) {
					if (prop_info != NULL) {
						value = zend_assign_to_typed_prop(prop_info, property_val, value, &garbage EXECUTE_DATA_CC);
						goto free_and_exit_assign_obj;
					} else {
fast_assign_obj:
						value = zend_assign_to_variable_ex(property_val, value, IS_VAR, EX_USES_STRICT_TYPES(), &garbage);
						if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
							ZVAL_COPY(EX_VAR(opline->result.var), value);
						}
						goto exit_assign_obj;
					}
				}
			} else if (EXPECTED(IS_DYNAMIC_PROPERTY_OFFSET(prop_offset))) {
				name = Z_STR_P(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC));
				if (UNEXPECTED(zend_lazy_object_must_init(zobj))) {
					zobj = zend_lazy_object_init(zobj);
					if (!zobj) {
						value = &EG(uninitialized_zval);
						goto free_and_exit_assign_obj;
					}
				}
				if (!zobj->ce->__set && (zobj->ce->ce_flags & ZEND_ACC_ALLOW_DYNAMIC_PROPERTIES)) {
					rebuild_object_properties_internal(zobj);
				}
				if (EXPECTED(zobj->properties != NULL)) {
					if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
						if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
							GC_DELREF(zobj->properties);
						}
						zobj->properties = zend_array_dup(zobj->properties);
					}
					property_val = zend_hash_find_known_hash(zobj->properties, name);
					if (property_val) {
						goto fast_assign_obj;
					}
				}

				if (!zobj->ce->__set && (zobj->ce->ce_flags & ZEND_ACC_ALLOW_DYNAMIC_PROPERTIES)) {
					if (IS_VAR == IS_CONST) {
						if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
							Z_ADDREF_P(value);
						}
					} else if (IS_VAR != IS_TMP_VAR) {
						if (Z_ISREF_P(value)) {
							if (IS_VAR == IS_VAR) {
								zend_reference *ref = Z_REF_P(value);
								if (GC_DELREF(ref) == 0) {
									ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
									efree_size(ref, sizeof(zend_reference));
									value = &tmp;
								} else {
									value = Z_REFVAL_P(value);
									Z_TRY_ADDREF_P(value);
								}
							} else {
								value = Z_REFVAL_P(value);
								Z_TRY_ADDREF_P(value);
							}
						} else if (IS_VAR == IS_CV) {
							Z_TRY_ADDREF_P(value);
						}
					}
					zend_hash_add_new(zobj->properties, name, value);
					if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
						ZVAL_COPY(EX_VAR(opline->result.var), value);
					}
					goto exit_assign_obj;
				}
			} else {
				ZEND_ASSERT(IS_HOOKED_PROPERTY_OFFSET(prop_offset));
				if (ZEND_IS_PROPERTY_HOOK_SIMPLE_WRITE(prop_offset)) {
					prop_info = CACHED_PTR_EX(cache_slot + 2);
					prop_offset = prop_info->offset;
					if (!ZEND_TYPE_IS_SET(prop_info->type)) {
						prop_info = NULL;
					}
					goto assign_obj_simple;
				}
				/* Fall through to write_property for hooks. */
			}
		}
		name = Z_STR_P(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC));
	} else {
		name = zval_try_get_tmp_string(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC), &tmp_name);
		if (UNEXPECTED(!name)) {
			zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
			UNDEF_RESULT();
			goto exit_assign_obj;
		}
	}

	if (IS_VAR == IS_CV || IS_VAR == IS_VAR) {
		ZVAL_DEREF(value);
	}

	value = zobj->handlers->write_property(zobj, name, value, ((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);

	if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
		zend_tmp_string_release(tmp_name);
	}

free_and_exit_assign_obj:
	if (UNEXPECTED(RETURN_VALUE_USED(opline)) && value) {
		ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
	}
	zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
exit_assign_obj:
	if (garbage) {
		GC_DTOR_NO_REF(garbage);
	}
	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));


	/* assign_obj has two opcodes! */
	ZEND_VM_NEXT_OPCODE_EX(1, 2);
}

/* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CONST|VAR) */
static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_DATA_CV_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *object, *value, tmp;
	zend_object *zobj;
	zend_string *name, *tmp_name;
	zend_refcounted *garbage = NULL;

	SAVE_OPLINE();
	object = EX_VAR(opline->op1.var);
	value = _get_zval_ptr_cv_BP_VAR_R((opline+1)->op1.var EXECUTE_DATA_CC);

	if (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
		if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
			object = Z_REFVAL_P(object);
			goto assign_object;
		}
		zend_throw_non_object_error(object, _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC) OPLINE_CC EXECUTE_DATA_CC);
		value = &EG(uninitialized_zval);
		goto free_and_exit_assign_obj;
	}

assign_object:
	zobj = Z_OBJ_P(object);
	if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
		if (EXPECTED(zobj->ce == CACHED_PTR(opline->extended_value))) {
			void **cache_slot = CACHE_ADDR(opline->extended_value);
			uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
			zval *property_val;
			zend_property_info *prop_info;

			if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
				prop_info = (zend_property_info*) CACHED_PTR_EX(cache_slot + 2);

assign_obj_simple:
				property_val = OBJ_PROP(zobj, prop_offset);
				if (Z_TYPE_P(property_val) != IS_UNDEF) {
					if (prop_info != NULL) {
						value = zend_assign_to_typed_prop(prop_info, property_val, value, &garbage EXECUTE_DATA_CC);
						goto free_and_exit_assign_obj;
					} else {
fast_assign_obj:
						value = zend_assign_to_variable_ex(property_val, value, IS_CV, EX_USES_STRICT_TYPES(), &garbage);
						if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
							ZVAL_COPY(EX_VAR(opline->result.var), value);
						}
						goto exit_assign_obj;
					}
				}
			} else if (EXPECTED(IS_DYNAMIC_PROPERTY_OFFSET(prop_offset))) {
				name = Z_STR_P(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC));
				if (UNEXPECTED(zend_lazy_object_must_init(zobj))) {
					zobj = zend_lazy_object_init(zobj);
					if (!zobj) {
						value = &EG(uninitialized_zval);
						goto free_and_exit_assign_obj;
					}
				}
				if (!zobj->ce->__set && (zobj->ce->ce_flags & ZEND_ACC_ALLOW_DYNAMIC_PROPERTIES)) {
					rebuild_object_properties_internal(zobj);
				}
				if (EXPECTED(zobj->properties != NULL)) {
					if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
						if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
							GC_DELREF(zobj->properties);
						}
						zobj->properties = zend_array_dup(zobj->properties);
					}
					property_val = zend_hash_find_known_hash(zobj->properties, name);
					if (property_val) {
						goto fast_assign_obj;
					}
				}

				if (!zobj->ce->__set && (zobj->ce->ce_flags & ZEND_ACC_ALLOW_DYNAMIC_PROPERTIES)) {
					if (IS_CV == IS_CONST) {
						if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
							Z_ADDREF_P(value);
						}
					} else if (IS_CV != IS_TMP_VAR) {
						if (Z_ISREF_P(value)) {
							if (IS_CV == IS_VAR) {
								zend_reference *ref = Z_REF_P(value);
								if (GC_DELREF(ref) == 0) {
									ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
									efree_size(ref, sizeof(zend_reference));
									value = &tmp;
								} else {
									value = Z_REFVAL_P(value);
									Z_TRY_ADDREF_P(value);
								}
							} else {
								value = Z_REFVAL_P(value);
								Z_TRY_ADDREF_P(value);
							}
						} else if (IS_CV == IS_CV) {
							Z_TRY_ADDREF_P(value);
						}
					}
					zend_hash_add_new(zobj->properties, name, value);
					if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
						ZVAL_COPY(EX_VAR(opline->result.var), value);
					}
					goto exit_assign_obj;
				}
			} else {
				ZEND_ASSERT(IS_HOOKED_PROPERTY_OFFSET(prop_offset));
				if (ZEND_IS_PROPERTY_HOOK_SIMPLE_WRITE(prop_offset)) {
					prop_info = CACHED_PTR_EX(cache_slot + 2);
					prop_offset = prop_info->offset;
					if (!ZEND_TYPE_IS_SET(prop_info->type)) {
						prop_info = NULL;
					}
					goto assign_obj_simple;
				}
				/* Fall through to write_property for hooks. */
			}
		}
		name = Z_STR_P(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC));
	} else {
		name = zval_try_get_tmp_string(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC), &tmp_name);
		if (UNEXPECTED(!name)) {


			UNDEF_RESULT();
			goto exit_assign_obj;
		}
	}

	if (IS_CV == IS_CV || IS_CV == IS_VAR) {
		ZVAL_DEREF(value);
	}

	value = zobj->handlers->write_property(zobj, name, value, ((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);

	if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
		zend_tmp_string_release(tmp_name);
	}

free_and_exit_assign_obj:
	if (UNEXPECTED(RETURN_VALUE_USED(opline)) && value) {
		ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
	}


exit_assign_obj:
	if (garbage) {
		GC_DTOR_NO_REF(garbage);
	}
	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));


	/* assign_obj has two opcodes! */
	ZEND_VM_NEXT_OPCODE_EX(1, 2);
}

/* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CONST|VAR) */
static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_DATA_CONST_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *object_ptr, *orig_object_ptr;
	zval *value;
	zval *variable_ptr;
	zval *dim;
	zend_refcounted *garbage = NULL;

	SAVE_OPLINE();
	orig_object_ptr = object_ptr = EX_VAR(opline->op1.var);

	if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
try_assign_dim_array:
		SEPARATE_ARRAY(object_ptr);
		if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED) {
			value = RT_CONSTANT((opline+1), (opline+1)->op1);
			if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
				HashTable *ht = Z_ARRVAL_P(object_ptr);
				if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE)) {
					GC_ADDREF(ht);
				}
				value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
				if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE) && !GC_DELREF(ht)) {
					zend_array_destroy(ht);
					goto assign_dim_error;
				}
			}
			if (IS_CONST == IS_CV || IS_CONST == IS_VAR) {
				ZVAL_DEREF(value);
			}
			value = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), value);
			if (UNEXPECTED(value == NULL)) {
				zend_cannot_add_element();
				goto assign_dim_error;
			} else if (IS_CONST == IS_CV) {
				if (Z_REFCOUNTED_P(value)) {
					Z_ADDREF_P(value);
				}
			} else if (IS_CONST == IS_VAR) {
				zval *free_op_data = EX_VAR((opline+1)->op1.var);
				if (Z_ISREF_P(free_op_data)) {
					if (Z_REFCOUNTED_P(value)) {
						Z_ADDREF_P(value);
					}
					zval_ptr_dtor_nogc(free_op_data);
				}
			} else if (IS_CONST == IS_CONST) {
				if (UNEXPECTED(Z_REFCOUNTED_P(value))) {
					Z_ADDREF_P(value);
				}
			}
		} else {
			dim = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
			if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
				variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
			} else {
				variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
			}
			if (UNEXPECTED(variable_ptr == NULL)) {
				goto assign_dim_error;
			}
			value = RT_CONSTANT((opline+1), (opline+1)->op1);
			value = zend_assign_to_variable_ex(variable_ptr, value, IS_CONST, EX_USES_STRICT_TYPES(), &garbage);
		}
		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
			ZVAL_COPY(EX_VAR(opline->result.var), value);
		}
		if (garbage) {
			GC_DTOR_NO_REF(garbage);
		}
	} else {
		if (EXPECTED(Z_ISREF_P(object_ptr))) {
			object_ptr = Z_REFVAL_P(object_ptr);
			if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
				goto try_assign_dim_array;
			}
		}
		if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) {
			zend_object *obj = Z_OBJ_P(object_ptr);

			GC_ADDREF(obj);
			dim = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
			if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_ISUNDEF_P(dim))) {
				dim = ZVAL_UNDEFINED_OP2();
			} else if ((IS_TMP_VAR|IS_VAR) == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
				dim++;
			}

			value = RT_CONSTANT((opline+1), (opline+1)->op1);
			if (IS_CONST == IS_CV && UNEXPECTED(Z_ISUNDEF_P(value))) {
				value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
			} else if (IS_CONST & (IS_CV|IS_VAR)) {
				ZVAL_DEREF(value);
			}

			zend_assign_to_object_dim(obj, dim, value OPLINE_CC EXECUTE_DATA_CC);


			if (UNEXPECTED(GC_DELREF(obj) == 0)) {
				zend_objects_store_del(obj);
			}
		} else if (EXPECTED(Z_TYPE_P(object_ptr) == IS_STRING)) {
			if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED) {
				zend_use_new_element_for_string();


				UNDEF_RESULT();
			} else {
				dim = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
				value = RT_CONSTANT((opline+1), (opline+1)->op1);
				zend_assign_to_string_offset(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC);


			}
		} else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
			if (Z_ISREF_P(orig_object_ptr)
			 && ZEND_REF_HAS_TYPE_SOURCES(Z_REF_P(orig_object_ptr))
			 && !zend_verify_ref_array_assignable(Z_REF_P(orig_object_ptr))) {
				dim = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);


				UNDEF_RESULT();
			} else {
				HashTable *ht = zend_new_array(8);
				uint8_t old_type = Z_TYPE_P(object_ptr);

				ZVAL_ARR(object_ptr, ht);
				if (UNEXPECTED(old_type == IS_FALSE)) {
					GC_ADDREF(ht);
					zend_false_to_array_deprecated();
					if (UNEXPECTED(GC_DELREF(ht) == 0)) {
						zend_array_destroy(ht);
						goto assign_dim_error;
					}
				}
				goto try_assign_dim_array;
			}
		} else {
			zend_use_scalar_as_array();
			dim = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
assign_dim_error:


			if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
				ZVAL_NULL(EX_VAR(opline->result.var));
			}
		}
	}
	if ((IS_TMP_VAR|IS_VAR) != IS_UNUSED) {
		zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
	}


	/* assign_dim has two opcodes! */
	ZEND_VM_NEXT_OPCODE_EX(1, 2);
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_DATA_TMP_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *object_ptr, *orig_object_ptr;
	zval *value;
	zval *variable_ptr;
	zval *dim;
	zend_refcounted *garbage = NULL;

	SAVE_OPLINE();
	orig_object_ptr = object_ptr = EX_VAR(opline->op1.var);

	if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
try_assign_dim_array:
		SEPARATE_ARRAY(object_ptr);
		if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED) {
			value = _get_zval_ptr_tmp((opline+1)->op1.var EXECUTE_DATA_CC);
			if (IS_TMP_VAR == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
				HashTable *ht = Z_ARRVAL_P(object_ptr);
				if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE)) {
					GC_ADDREF(ht);
				}
				value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
				if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE) && !GC_DELREF(ht)) {
					zend_array_destroy(ht);
					goto assign_dim_error;
				}
			}
			if (IS_TMP_VAR == IS_CV || IS_TMP_VAR == IS_VAR) {
				ZVAL_DEREF(value);
			}
			value = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), value);
			if (UNEXPECTED(value == NULL)) {
				zend_cannot_add_element();
				goto assign_dim_error;
			} else if (IS_TMP_VAR == IS_CV) {
				if (Z_REFCOUNTED_P(value)) {
					Z_ADDREF_P(value);
				}
			} else if (IS_TMP_VAR == IS_VAR) {
				zval *free_op_data = EX_VAR((opline+1)->op1.var);
				if (Z_ISREF_P(free_op_data)) {
					if (Z_REFCOUNTED_P(value)) {
						Z_ADDREF_P(value);
					}
					zval_ptr_dtor_nogc(free_op_data);
				}
			} else if (IS_TMP_VAR == IS_CONST) {
				if (UNEXPECTED(Z_REFCOUNTED_P(value))) {
					Z_ADDREF_P(value);
				}
			}
		} else {
			dim = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
			if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
				variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
			} else {
				variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
			}
			if (UNEXPECTED(variable_ptr == NULL)) {
				goto assign_dim_error;
			}
			value = _get_zval_ptr_tmp((opline+1)->op1.var EXECUTE_DATA_CC);
			value = zend_assign_to_variable_ex(variable_ptr, value, IS_TMP_VAR, EX_USES_STRICT_TYPES(), &garbage);
		}
		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
			ZVAL_COPY(EX_VAR(opline->result.var), value);
		}
		if (garbage) {
			GC_DTOR_NO_REF(garbage);
		}
	} else {
		if (EXPECTED(Z_ISREF_P(object_ptr))) {
			object_ptr = Z_REFVAL_P(object_ptr);
			if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
				goto try_assign_dim_array;
			}
		}
		if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) {
			zend_object *obj = Z_OBJ_P(object_ptr);

			GC_ADDREF(obj);
			dim = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
			if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_ISUNDEF_P(dim))) {
				dim = ZVAL_UNDEFINED_OP2();
			} else if ((IS_TMP_VAR|IS_VAR) == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
				dim++;
			}

			value = _get_zval_ptr_tmp((opline+1)->op1.var EXECUTE_DATA_CC);
			if (IS_TMP_VAR == IS_CV && UNEXPECTED(Z_ISUNDEF_P(value))) {
				value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
			} else if (IS_TMP_VAR & (IS_CV|IS_VAR)) {
				ZVAL_DEREF(value);
			}

			zend_assign_to_object_dim(obj, dim, value OPLINE_CC EXECUTE_DATA_CC);

			zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
			if (UNEXPECTED(GC_DELREF(obj) == 0)) {
				zend_objects_store_del(obj);
			}
		} else if (EXPECTED(Z_TYPE_P(object_ptr) == IS_STRING)) {
			if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED) {
				zend_use_new_element_for_string();
				zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
				UNDEF_RESULT();
			} else {
				dim = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
				value = _get_zval_ptr_tmp((opline+1)->op1.var EXECUTE_DATA_CC);
				zend_assign_to_string_offset(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC);
				zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
			}
		} else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
			if (Z_ISREF_P(orig_object_ptr)
			 && ZEND_REF_HAS_TYPE_SOURCES(Z_REF_P(orig_object_ptr))
			 && !zend_verify_ref_array_assignable(Z_REF_P(orig_object_ptr))) {
				dim = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
				zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
				UNDEF_RESULT();
			} else {
				HashTable *ht = zend_new_array(8);
				uint8_t old_type = Z_TYPE_P(object_ptr);

				ZVAL_ARR(object_ptr, ht);
				if (UNEXPECTED(old_type == IS_FALSE)) {
					GC_ADDREF(ht);
					zend_false_to_array_deprecated();
					if (UNEXPECTED(GC_DELREF(ht) == 0)) {
						zend_array_destroy(ht);
						goto assign_dim_error;
					}
				}
				goto try_assign_dim_array;
			}
		} else {
			zend_use_scalar_as_array();
			dim = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
assign_dim_error:
			zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
			if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
				ZVAL_NULL(EX_VAR(opline->result.var));
			}
		}
	}
	if ((IS_TMP_VAR|IS_VAR) != IS_UNUSED) {
		zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
	}


	/* assign_dim has two opcodes! */
	ZEND_VM_NEXT_OPCODE_EX(1, 2);
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_DATA_VAR_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *object_ptr, *orig_object_ptr;
	zval *value;
	zval *variable_ptr;
	zval *dim;
	zend_refcounted *garbage = NULL;

	SAVE_OPLINE();
	orig_object_ptr = object_ptr = EX_VAR(opline->op1.var);

	if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
try_assign_dim_array:
		SEPARATE_ARRAY(object_ptr);
		if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED) {
			value = _get_zval_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);
			if (IS_VAR == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
				HashTable *ht = Z_ARRVAL_P(object_ptr);
				if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE)) {
					GC_ADDREF(ht);
				}
				value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
				if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE) && !GC_DELREF(ht)) {
					zend_array_destroy(ht);
					goto assign_dim_error;
				}
			}
			if (IS_VAR == IS_CV || IS_VAR == IS_VAR) {
				ZVAL_DEREF(value);
			}
			value = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), value);
			if (UNEXPECTED(value == NULL)) {
				zend_cannot_add_element();
				goto assign_dim_error;
			} else if (IS_VAR == IS_CV) {
				if (Z_REFCOUNTED_P(value)) {
					Z_ADDREF_P(value);
				}
			} else if (IS_VAR == IS_VAR) {
				zval *free_op_data = EX_VAR((opline+1)->op1.var);
				if (Z_ISREF_P(free_op_data)) {
					if (Z_REFCOUNTED_P(value)) {
						Z_ADDREF_P(value);
					}
					zval_ptr_dtor_nogc(free_op_data);
				}
			} else if (IS_VAR == IS_CONST) {
				if (UNEXPECTED(Z_REFCOUNTED_P(value))) {
					Z_ADDREF_P(value);
				}
			}
		} else {
			dim = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
			if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
				variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
			} else {
				variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
			}
			if (UNEXPECTED(variable_ptr == NULL)) {
				goto assign_dim_error;
			}
			value = _get_zval_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);
			value = zend_assign_to_variable_ex(variable_ptr, value, IS_VAR, EX_USES_STRICT_TYPES(), &garbage);
		}
		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
			ZVAL_COPY(EX_VAR(opline->result.var), value);
		}
		if (garbage) {
			GC_DTOR_NO_REF(garbage);
		}
	} else {
		if (EXPECTED(Z_ISREF_P(object_ptr))) {
			object_ptr = Z_REFVAL_P(object_ptr);
			if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
				goto try_assign_dim_array;
			}
		}
		if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) {
			zend_object *obj = Z_OBJ_P(object_ptr);

			GC_ADDREF(obj);
			dim = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
			if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_ISUNDEF_P(dim))) {
				dim = ZVAL_UNDEFINED_OP2();
			} else if ((IS_TMP_VAR|IS_VAR) == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
				dim++;
			}

			value = _get_zval_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);
			if (IS_VAR == IS_CV && UNEXPECTED(Z_ISUNDEF_P(value))) {
				value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
			} else if (IS_VAR & (IS_CV|IS_VAR)) {
				ZVAL_DEREF(value);
			}

			zend_assign_to_object_dim(obj, dim, value OPLINE_CC EXECUTE_DATA_CC);

			zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
			if (UNEXPECTED(GC_DELREF(obj) == 0)) {
				zend_objects_store_del(obj);
			}
		} else if (EXPECTED(Z_TYPE_P(object_ptr) == IS_STRING)) {
			if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED) {
				zend_use_new_element_for_string();
				zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
				UNDEF_RESULT();
			} else {
				dim = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
				value = _get_zval_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);
				zend_assign_to_string_offset(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC);
				zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
			}
		} else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
			if (Z_ISREF_P(orig_object_ptr)
			 && ZEND_REF_HAS_TYPE_SOURCES(Z_REF_P(orig_object_ptr))
			 && !zend_verify_ref_array_assignable(Z_REF_P(orig_object_ptr))) {
				dim = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
				zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
				UNDEF_RESULT();
			} else {
				HashTable *ht = zend_new_array(8);
				uint8_t old_type = Z_TYPE_P(object_ptr);

				ZVAL_ARR(object_ptr, ht);
				if (UNEXPECTED(old_type == IS_FALSE)) {
					GC_ADDREF(ht);
					zend_false_to_array_deprecated();
					if (UNEXPECTED(GC_DELREF(ht) == 0)) {
						zend_array_destroy(ht);
						goto assign_dim_error;
					}
				}
				goto try_assign_dim_array;
			}
		} else {
			zend_use_scalar_as_array();
			dim = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
assign_dim_error:
			zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
			if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
				ZVAL_NULL(EX_VAR(opline->result.var));
			}
		}
	}
	if ((IS_TMP_VAR|IS_VAR) != IS_UNUSED) {
		zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
	}


	/* assign_dim has two opcodes! */
	ZEND_VM_NEXT_OPCODE_EX(1, 2);
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_DATA_CV_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *object_ptr, *orig_object_ptr;
	zval *value;
	zval *variable_ptr;
	zval *dim;
	zend_refcounted *garbage = NULL;

	SAVE_OPLINE();
	orig_object_ptr = object_ptr = EX_VAR(opline->op1.var);

	if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
try_assign_dim_array:
		SEPARATE_ARRAY(object_ptr);
		if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED) {
			value = EX_VAR((opline+1)->op1.var);
			if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
				HashTable *ht = Z_ARRVAL_P(object_ptr);
				if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE)) {
					GC_ADDREF(ht);
				}
				value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
				if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE) && !GC_DELREF(ht)) {
					zend_array_destroy(ht);
					goto assign_dim_error;
				}
			}
			if (IS_CV == IS_CV || IS_CV == IS_VAR) {
				ZVAL_DEREF(value);
			}
			value = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), value);
			if (UNEXPECTED(value == NULL)) {
				zend_cannot_add_element();
				goto assign_dim_error;
			} else if (IS_CV == IS_CV) {
				if (Z_REFCOUNTED_P(value)) {
					Z_ADDREF_P(value);
				}
			} else if (IS_CV == IS_VAR) {
				zval *free_op_data = EX_VAR((opline+1)->op1.var);
				if (Z_ISREF_P(free_op_data)) {
					if (Z_REFCOUNTED_P(value)) {
						Z_ADDREF_P(value);
					}
					zval_ptr_dtor_nogc(free_op_data);
				}
			} else if (IS_CV == IS_CONST) {
				if (UNEXPECTED(Z_REFCOUNTED_P(value))) {
					Z_ADDREF_P(value);
				}
			}
		} else {
			dim = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
			if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
				variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
			} else {
				variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
			}
			if (UNEXPECTED(variable_ptr == NULL)) {
				goto assign_dim_error;
			}
			value = _get_zval_ptr_cv_BP_VAR_R((opline+1)->op1.var EXECUTE_DATA_CC);
			value = zend_assign_to_variable_ex(variable_ptr, value, IS_CV, EX_USES_STRICT_TYPES(), &garbage);
		}
		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
			ZVAL_COPY(EX_VAR(opline->result.var), value);
		}
		if (garbage) {
			GC_DTOR_NO_REF(garbage);
		}
	} else {
		if (EXPECTED(Z_ISREF_P(object_ptr))) {
			object_ptr = Z_REFVAL_P(object_ptr);
			if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
				goto try_assign_dim_array;
			}
		}
		if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) {
			zend_object *obj = Z_OBJ_P(object_ptr);

			GC_ADDREF(obj);
			dim = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
			if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_ISUNDEF_P(dim))) {
				dim = ZVAL_UNDEFINED_OP2();
			} else if ((IS_TMP_VAR|IS_VAR) == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
				dim++;
			}

			value = EX_VAR((opline+1)->op1.var);
			if (IS_CV == IS_CV && UNEXPECTED(Z_ISUNDEF_P(value))) {
				value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
			} else if (IS_CV & (IS_CV|IS_VAR)) {
				ZVAL_DEREF(value);
			}

			zend_assign_to_object_dim(obj, dim, value OPLINE_CC EXECUTE_DATA_CC);


			if (UNEXPECTED(GC_DELREF(obj) == 0)) {
				zend_objects_store_del(obj);
			}
		} else if (EXPECTED(Z_TYPE_P(object_ptr) == IS_STRING)) {
			if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED) {
				zend_use_new_element_for_string();


				UNDEF_RESULT();
			} else {
				dim = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
				value = EX_VAR((opline+1)->op1.var);
				zend_assign_to_string_offset(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC);


			}
		} else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
			if (Z_ISREF_P(orig_object_ptr)
			 && ZEND_REF_HAS_TYPE_SOURCES(Z_REF_P(orig_object_ptr))
			 && !zend_verify_ref_array_assignable(Z_REF_P(orig_object_ptr))) {
				dim = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);


				UNDEF_RESULT();
			} else {
				HashTable *ht = zend_new_array(8);
				uint8_t old_type = Z_TYPE_P(object_ptr);

				ZVAL_ARR(object_ptr, ht);
				if (UNEXPECTED(old_type == IS_FALSE)) {
					GC_ADDREF(ht);
					zend_false_to_array_deprecated();
					if (UNEXPECTED(GC_DELREF(ht) == 0)) {
						zend_array_destroy(ht);
						goto assign_dim_error;
					}
				}
				goto try_assign_dim_array;
			}
		} else {
			zend_use_scalar_as_array();
			dim = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
assign_dim_error:


			if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
				ZVAL_NULL(EX_VAR(opline->result.var));
			}
		}
	}
	if ((IS_TMP_VAR|IS_VAR) != IS_UNUSED) {
		zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
	}


	/* assign_dim has two opcodes! */
	ZEND_VM_NEXT_OPCODE_EX(1, 2);
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_ASSIGN_OBJ_REF_SPEC_CV_TMPVAR_OP_DATA_VAR_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *property, *container, *value_ptr;

	SAVE_OPLINE();

	container = EX_VAR(opline->op1.var);
	property = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);

	value_ptr = _get_zval_ptr_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);

	if (1) {
		if (IS_CV == IS_UNUSED) {
			if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
				zend_assign_to_property_reference_this_const(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
			} else {
				zend_assign_to_property_reference_this_var(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
			}
		} else {
			if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
				zend_assign_to_property_reference_var_const(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
			} else {
				zend_assign_to_property_reference_var_var(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
			}
		}
	} else {
		zend_assign_to_property_reference(container, IS_CV, property, (IS_TMP_VAR|IS_VAR), value_ptr OPLINE_CC EXECUTE_DATA_CC);
	}


	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
	zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
	ZEND_VM_NEXT_OPCODE_EX(1, 2);
}

/* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CONST|VAR) */
static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_ASSIGN_OBJ_REF_SPEC_CV_TMPVAR_OP_DATA_CV_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *property, *container, *value_ptr;

	SAVE_OPLINE();

	container = EX_VAR(opline->op1.var);
	property = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);

	value_ptr = _get_zval_ptr_cv_BP_VAR_W((opline+1)->op1.var EXECUTE_DATA_CC);

	if (1) {
		if (IS_CV == IS_UNUSED) {
			if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
				zend_assign_to_property_reference_this_const(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
			} else {
				zend_assign_to_property_reference_this_var(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
			}
		} else {
			if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
				zend_assign_to_property_reference_var_const(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
			} else {
				zend_assign_to_property_reference_var_var(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
			}
		}
	} else {
		zend_assign_to_property_reference(container, IS_CV, property, (IS_TMP_VAR|IS_VAR), value_ptr OPLINE_CC EXECUTE_DATA_CC);
	}


	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));


	ZEND_VM_NEXT_OPCODE_EX(1, 2);
}

/* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CONST|VAR) */
static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_FAST_CONCAT_SPEC_CV_TMPVAR_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;
	zend_string *op1_str, *op2_str, *str;


	op1 = EX_VAR(opline->op1.var);
	op2 = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
	if ((IS_CV == IS_CONST || EXPECTED(Z_TYPE_P(op1) == IS_STRING)) &&
	    ((IS_TMP_VAR|IS_VAR) == IS_CONST || EXPECTED(Z_TYPE_P(op2) == IS_STRING))) {
		zend_string *op1_str = Z_STR_P(op1);
		zend_string *op2_str = Z_STR_P(op2);
		zend_string *str;
		uint32_t flags = ZSTR_GET_COPYABLE_CONCAT_PROPERTIES_BOTH(op1_str, op2_str);

		if (IS_CV != IS_CONST && UNEXPECTED(ZSTR_LEN(op1_str) == 0)) {
			if ((IS_TMP_VAR|IS_VAR) == IS_CONST || (IS_TMP_VAR|IS_VAR) == IS_CV) {
				ZVAL_STR_COPY(EX_VAR(opline->result.var), op2_str);
			} else {
				ZVAL_STR(EX_VAR(opline->result.var), op2_str);
			}
			if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
				zend_string_release_ex(op1_str, 0);
			}
		} else if ((IS_TMP_VAR|IS_VAR) != IS_CONST && UNEXPECTED(ZSTR_LEN(op2_str) == 0)) {
			if (IS_CV == IS_CONST || IS_CV == IS_CV) {
				ZVAL_STR_COPY(EX_VAR(opline->result.var), op1_str);
			} else {
				ZVAL_STR(EX_VAR(opline->result.var), op1_str);
			}
			if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
				zend_string_release_ex(op2_str, 0);
			}
		} else if (IS_CV != IS_CONST && IS_CV != IS_CV &&
		    !ZSTR_IS_INTERNED(op1_str) && GC_REFCOUNT(op1_str) == 1) {
			size_t len = ZSTR_LEN(op1_str);

			str = zend_string_extend(op1_str, len + ZSTR_LEN(op2_str), 0);
			memcpy(ZSTR_VAL(str) + len, ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
			GC_ADD_FLAGS(str, flags);
			ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
			if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
				zend_string_release_ex(op2_str, 0);
			}
		} else {
			str = zend_string_alloc(ZSTR_LEN(op1_str) + ZSTR_LEN(op2_str), 0);
			memcpy(ZSTR_VAL(str), ZSTR_VAL(op1_str), ZSTR_LEN(op1_str));
			memcpy(ZSTR_VAL(str) + ZSTR_LEN(op1_str), ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
			GC_ADD_FLAGS(str, flags);
			ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
			if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
				zend_string_release_ex(op1_str, 0);
			}
			if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
				zend_string_release_ex(op2_str, 0);
			}
		}
		ZEND_VM_NEXT_OPCODE();
	}

	SAVE_OPLINE();
	if (IS_CV == IS_CONST) {
		op1_str = Z_STR_P(op1);
	} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
		op1_str = zend_string_copy(Z_STR_P(op1));
	} else {
		if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
			ZVAL_UNDEFINED_OP1();
		}
		op1_str = zval_get_string_func(op1);
	}
	if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
		op2_str = Z_STR_P(op2);
	} else if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
		op2_str = zend_string_copy(Z_STR_P(op2));
	} else {
		if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(op2) == IS_UNDEF)) {
			ZVAL_UNDEFINED_OP2();
		}
		op2_str = zval_get_string_func(op2);
	}
	do {
		if (IS_CV != IS_CONST) {
			if (UNEXPECTED(ZSTR_LEN(op1_str) == 0)) {
				if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
					if (UNEXPECTED(Z_REFCOUNTED_P(op2))) {
						GC_ADDREF(op2_str);
					}
				}
				ZVAL_STR(EX_VAR(opline->result.var), op2_str);
				zend_string_release_ex(op1_str, 0);
				break;
			}
		}
		if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
			if (UNEXPECTED(ZSTR_LEN(op2_str) == 0)) {
				if (IS_CV == IS_CONST) {
					if (UNEXPECTED(Z_REFCOUNTED_P(op1))) {
						GC_ADDREF(op1_str);
					}
				}
				ZVAL_STR(EX_VAR(opline->result.var), op1_str);
				zend_string_release_ex(op2_str, 0);
				break;
			}
		}
		str = zend_string_alloc(ZSTR_LEN(op1_str) + ZSTR_LEN(op2_str), 0);
		memcpy(ZSTR_VAL(str), ZSTR_VAL(op1_str), ZSTR_LEN(op1_str));
		memcpy(ZSTR_VAL(str) + ZSTR_LEN(op1_str), ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);

		ZSTR_COPY_CONCAT_PROPERTIES_BOTH(str, op1_str, op2_str);
		ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
		if (IS_CV != IS_CONST) {
			zend_string_release_ex(op1_str, 0);
		}
		if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
			zend_string_release_ex(op2_str, 0);
		}
	} while (0);


	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_INIT_METHOD_CALL_SPEC_CV_TMPVAR_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *function_name;
	zval *object;
	zend_function *fbc;
	zend_class_entry *called_scope;
	zend_object *obj;
	zend_execute_data *call;
	uint32_t call_info;

	SAVE_OPLINE();

	object = EX_VAR(opline->op1.var);

	if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
		function_name = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
	}

	if ((IS_TMP_VAR|IS_VAR) != IS_CONST &&
	    UNEXPECTED(Z_TYPE_P(function_name) != IS_STRING)) {
		do {
			if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && Z_ISREF_P(function_name)) {
				function_name = Z_REFVAL_P(function_name);
				if (EXPECTED(Z_TYPE_P(function_name) == IS_STRING)) {
					break;
				}
			} else if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) {
				ZVAL_UNDEFINED_OP2();
				if (UNEXPECTED(EG(exception) != NULL)) {


					HANDLE_EXCEPTION();
				}
			}
			zend_throw_error(NULL, "Method name must be a string");
			zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));


			HANDLE_EXCEPTION();
		} while (0);
	}

	if (IS_CV == IS_UNUSED) {
		obj = Z_OBJ_P(object);
	} else {
		do {
			if (IS_CV != IS_CONST && EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
				obj = Z_OBJ_P(object);
			} else {
				if ((IS_CV & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(object))) {
					zend_reference *ref = Z_REF_P(object);

					object = &ref->val;
					if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
						obj = Z_OBJ_P(object);
						if (IS_CV & IS_VAR) {
							if (UNEXPECTED(GC_DELREF(ref) == 0)) {
								efree_size(ref, sizeof(zend_reference));
							} else {
								Z_ADDREF_P(object);
							}
						}
						break;
					}
				}
				if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
					object = ZVAL_UNDEFINED_OP1();
					if (UNEXPECTED(EG(exception) != NULL)) {
						if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
							zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
						}
						HANDLE_EXCEPTION();
					}
				}
				if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
					function_name = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
				}
				zend_invalid_method_call(object, function_name);
				zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));


				HANDLE_EXCEPTION();
			}
		} while (0);
	}

	called_scope = obj->ce;

	if ((IS_TMP_VAR|IS_VAR) == IS_CONST &&
	    EXPECTED(CACHED_PTR(opline->result.num) == called_scope)) {
		fbc = CACHED_PTR(opline->result.num + sizeof(void*));
	} else {
		zend_object *orig_obj = obj;

		if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
			function_name = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
		}

		/* First, locate the function. */
		fbc = obj->handlers->get_method(&obj, Z_STR_P(function_name), (((IS_TMP_VAR|IS_VAR) == IS_CONST) ? (RT_CONSTANT(opline, opline->op2) + 1) : NULL));
		if (UNEXPECTED(fbc == NULL)) {
			if (EXPECTED(!EG(exception))) {
				zend_undefined_method(orig_obj->ce, Z_STR_P(function_name));
			}
			zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
			if ((IS_CV & (IS_VAR|IS_TMP_VAR)) && GC_DELREF(orig_obj) == 0) {
				zend_objects_store_del(orig_obj);
			}
			HANDLE_EXCEPTION();
		}
		if ((IS_TMP_VAR|IS_VAR) == IS_CONST &&
		    EXPECTED(!(fbc->common.fn_flags & (ZEND_ACC_CALL_VIA_TRAMPOLINE|ZEND_ACC_NEVER_CACHE))) &&
		    EXPECTED(obj == orig_obj)) {
			CACHE_POLYMORPHIC_PTR(opline->result.num, called_scope, fbc);
		}
		if ((IS_CV & (IS_VAR|IS_TMP_VAR)) && UNEXPECTED(obj != orig_obj)) {
			GC_ADDREF(obj); /* For $this pointer */
			if (GC_DELREF(orig_obj) == 0) {
				zend_objects_store_del(orig_obj);
			}
		}
		if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!RUN_TIME_CACHE(&fbc->op_array))) {
			init_func_run_time_cache(&fbc->op_array);
		}
	}

	if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
		zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
	}

	call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_HAS_THIS;
	if (UNEXPECTED((fbc->common.fn_flags & ZEND_ACC_STATIC) != 0)) {
		if ((IS_CV & (IS_VAR|IS_TMP_VAR)) && GC_DELREF(obj) == 0) {
			zend_objects_store_del(obj);
			if (UNEXPECTED(EG(exception))) {
				HANDLE_EXCEPTION();
			}
		}
		/* call static method */
		obj = (zend_object*)called_scope;
		call_info = ZEND_CALL_NESTED_FUNCTION;
	} else if (IS_CV & (IS_VAR|IS_TMP_VAR|IS_CV)) {
		if (IS_CV == IS_CV) {
			GC_ADDREF(obj); /* For $this pointer */
		}
		/* CV may be changed indirectly (e.g. when it's a reference) */
		call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_HAS_THIS | ZEND_CALL_RELEASE_THIS;
	}

	call = zend_vm_stack_push_call_frame(call_info,
		fbc, opline->extended_value, obj);
	call->prev_execute_data = EX(call);
	EX(call) = call;

	ZEND_VM_NEXT_OPCODE();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_TMPVAR_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *expr_ptr, new_expr;

	SAVE_OPLINE();
	if ((IS_CV == IS_VAR || IS_CV == IS_CV) &&
	    UNEXPECTED(opline->extended_value & ZEND_ARRAY_ELEMENT_REF)) {
		expr_ptr = _get_zval_ptr_cv_BP_VAR_W(opline->op1.var EXECUTE_DATA_CC);
		if (Z_ISREF_P(expr_ptr)) {
			Z_ADDREF_P(expr_ptr);
		} else {
			ZVAL_MAKE_REF_EX(expr_ptr, 2);
		}


	} else {
		expr_ptr = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
		if (IS_CV == IS_TMP_VAR) {
			/* pass */
		} else if (IS_CV == IS_CONST) {
			Z_TRY_ADDREF_P(expr_ptr);
		} else if (IS_CV == IS_CV) {
			ZVAL_DEREF(expr_ptr);
			Z_TRY_ADDREF_P(expr_ptr);
		} else /* if (IS_CV == IS_VAR) */ {
			if (UNEXPECTED(Z_ISREF_P(expr_ptr))) {
				zend_refcounted *ref = Z_COUNTED_P(expr_ptr);

				expr_ptr = Z_REFVAL_P(expr_ptr);
				if (UNEXPECTED(GC_DELREF(ref) == 0)) {
					ZVAL_COPY_VALUE(&new_expr, expr_ptr);
					expr_ptr = &new_expr;
					efree_size(ref, sizeof(zend_reference));
				} else if (Z_OPT_REFCOUNTED_P(expr_ptr)) {
					Z_ADDREF_P(expr_ptr);
				}
			}
		}
	}

	if ((IS_TMP_VAR|IS_VAR) != IS_UNUSED) {
		zval *offset = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
		zend_string *str;
		zend_ulong hval;

add_again:
		if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) {
			str = Z_STR_P(offset);
			if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
				if (ZEND_HANDLE_NUMERIC(str, hval)) {
					goto num_index;
				}
			}
str_index:
			zend_hash_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), str, expr_ptr);
		} else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
			hval = Z_LVAL_P(offset);
num_index:
			zend_hash_index_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), hval, expr_ptr);
		} else if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && EXPECTED(Z_TYPE_P(offset) == IS_REFERENCE)) {
			offset = Z_REFVAL_P(offset);
			goto add_again;
		} else if (UNEXPECTED(Z_TYPE_P(offset) == IS_NULL)) {
			zval tmp;
			if (IS_CV == IS_CV || IS_CV == IS_VAR) {
				ZVAL_COPY(&tmp, expr_ptr);
			}
			zend_error(E_DEPRECATED, "Using null as an array offset is deprecated, use an empty string instead");
			if (IS_CV == IS_CV || IS_CV == IS_VAR) {
				/* A userland error handler can do funky things to the expression, so reset it */
				zval_ptr_dtor(expr_ptr);
				ZVAL_COPY_VALUE(expr_ptr, &tmp);
			}
			if (UNEXPECTED(EG(exception))) {
				zval_ptr_dtor_nogc(expr_ptr);
				HANDLE_EXCEPTION();
			}
			str = ZSTR_EMPTY_ALLOC();
			goto str_index;
		} else if (Z_TYPE_P(offset) == IS_DOUBLE) {
			hval = zend_dval_to_lval_safe(Z_DVAL_P(offset));
			goto num_index;
		} else if (Z_TYPE_P(offset) == IS_FALSE) {
			hval = 0;
			goto num_index;
		} else if (Z_TYPE_P(offset) == IS_TRUE) {
			hval = 1;
			goto num_index;
		} else if (Z_TYPE_P(offset) == IS_RESOURCE) {
			zend_use_resource_as_offset(offset);
			hval = Z_RES_HANDLE_P(offset);
			goto num_index;
		} else if ((IS_TMP_VAR|IS_VAR) == IS_CV && Z_TYPE_P(offset) == IS_UNDEF) {
			ZVAL_UNDEFINED_OP2();
			str = ZSTR_EMPTY_ALLOC();
			goto str_index;
		} else {
			zend_illegal_array_offset_access(offset);
			zval_ptr_dtor_nogc(expr_ptr);
		}
		zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
	} else {
		if (!zend_hash_next_index_insert(Z_ARRVAL_P(EX_VAR(opline->result.var)), expr_ptr)) {
			zend_cannot_add_element();
			zval_ptr_dtor_nogc(expr_ptr);
		}
	}
	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_INIT_ARRAY_SPEC_CV_TMPVAR_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	zval *array;
	uint32_t size;
	USE_OPLINE

	SAVE_OPLINE();
	array = EX_VAR(opline->result.var);
	if (IS_CV != IS_UNUSED) {
		size = opline->extended_value >> ZEND_ARRAY_SIZE_SHIFT;
		ZVAL_ARR(array, zend_new_array(size));
		/* Explicitly initialize array as not-packed if flag is set */
		if (opline->extended_value & ZEND_ARRAY_NOT_PACKED) {
			zend_hash_real_init_mixed(Z_ARRVAL_P(array));
		}
		ZEND_VM_TAIL_CALL(ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_TMPVAR_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
	} else {
		ZVAL_ARR(array, zend_new_array(0));
		ZEND_VM_NEXT_OPCODE();
	}
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_UNSET_DIM_SPEC_CV_TMPVAR_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *container;
	zval *offset;
	zend_ulong hval;
	zend_string *key;

	SAVE_OPLINE();
	container = EX_VAR(opline->op1.var);
	offset = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);

	do {
		if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
			HashTable *ht;

unset_dim_array:
			SEPARATE_ARRAY(container);
			ht = Z_ARRVAL_P(container);
offset_again:
			if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) {
				key = Z_STR_P(offset);
				if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
					if (ZEND_HANDLE_NUMERIC(key, hval)) {
						goto num_index_dim;
					}
				}
str_index_dim:
				ZEND_ASSERT(ht != &EG(symbol_table));
				zend_hash_del(ht, key);
			} else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
				hval = Z_LVAL_P(offset);
num_index_dim:
				zend_hash_index_del(ht, hval);
			} else if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && EXPECTED(Z_TYPE_P(offset) == IS_REFERENCE)) {
				offset = Z_REFVAL_P(offset);
				goto offset_again;
			} else if (Z_TYPE_P(offset) == IS_DOUBLE) {
				/* The array may be destroyed while throwing a warning in case the float is not representable as an int.
				 * Temporarily increase the refcount to detect this situation. */
				GC_TRY_ADDREF(ht);
				hval = zend_dval_to_lval_safe(Z_DVAL_P(offset));
				if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE) && !GC_DELREF(ht)) {
					zend_array_destroy(ht);
					break;
				}
				if (EG(exception)) {
					break;
				}
				goto num_index_dim;
			} else if (Z_TYPE_P(offset) == IS_NULL) {
				key = ZSTR_EMPTY_ALLOC();
				goto str_index_dim;
			} else if (Z_TYPE_P(offset) == IS_FALSE) {
				hval = 0;
				goto num_index_dim;
			} else if (Z_TYPE_P(offset) == IS_TRUE) {
				hval = 1;
				goto num_index_dim;
			} else if (Z_TYPE_P(offset) == IS_RESOURCE) {
				zend_use_resource_as_offset(offset);
				hval = Z_RES_HANDLE_P(offset);
				goto num_index_dim;
			} else if ((IS_TMP_VAR|IS_VAR) == IS_CV && Z_TYPE_P(offset) == IS_UNDEF) {
				ZVAL_UNDEFINED_OP2();
				key = ZSTR_EMPTY_ALLOC();
				goto str_index_dim;
			} else {
				zend_illegal_array_offset_unset(offset);
			}
			break;
		} else if (Z_ISREF_P(container)) {
			container = Z_REFVAL_P(container);
			if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
				goto unset_dim_array;
			}
		}
		if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
			container = ZVAL_UNDEFINED_OP1();
		}
		if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(offset) == IS_UNDEF)) {
			offset = ZVAL_UNDEFINED_OP2();
		}
		if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
			if ((IS_TMP_VAR|IS_VAR) == IS_CONST && Z_EXTRA_P(offset) == ZEND_EXTRA_VALUE) {
				offset++;
			}
			Z_OBJ_HT_P(container)->unset_dimension(Z_OBJ_P(container), offset);
		} else if (UNEXPECTED(Z_TYPE_P(container) == IS_STRING)) {
			zend_throw_error(NULL, "Cannot unset string offsets");
		} else if (UNEXPECTED(Z_TYPE_P(container) > IS_FALSE)) {
			zend_throw_error(NULL, "Cannot unset offset in a non-array variable");
		} else if (UNEXPECTED(Z_TYPE_P(container) == IS_FALSE)) {
			zend_false_to_array_deprecated();
		}
	} while (0);

	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));


	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_UNSET_OBJ_SPEC_CV_TMPVAR_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *container;
	zval *offset;
	zend_string *name, *tmp_name;

	SAVE_OPLINE();
	container = EX_VAR(opline->op1.var);
	offset = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);

	do {
		if (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT)) {
			if (Z_ISREF_P(container)) {
				container = Z_REFVAL_P(container);
				if (Z_TYPE_P(container) != IS_OBJECT) {
					if (IS_CV == IS_CV
					 && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
						ZVAL_UNDEFINED_OP1();
					}
					break;
				}
			} else {
				break;
			}
		}
		if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
			name = Z_STR_P(offset);
		} else {
			name = zval_try_get_tmp_string(offset, &tmp_name);
			if (UNEXPECTED(!name)) {
				break;
			}
		}
		Z_OBJ_HT_P(container)->unset_property(Z_OBJ_P(container), name, (((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL));
		if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
			zend_tmp_string_release(tmp_name);
		}
	} while (0);

	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));


	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CV_TMPVAR_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *container;
	bool result;
	zend_ulong hval;
	zval *offset;

	SAVE_OPLINE();
	container = EX_VAR(opline->op1.var);
	offset = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);

	if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
		HashTable *ht;
		zval *value;
		zend_string *str;

isset_dim_obj_array:
		ht = Z_ARRVAL_P(container);
isset_again:
		if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) {
			str = Z_STR_P(offset);
			if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
				if (ZEND_HANDLE_NUMERIC(str, hval)) {
					goto num_index_prop;
				}
			}
			value = zend_hash_find_ex(ht, str, (IS_TMP_VAR|IS_VAR) == IS_CONST);
		} else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
			hval = Z_LVAL_P(offset);
num_index_prop:
			value = zend_hash_index_find(ht, hval);
		} else if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(offset))) {
			offset = Z_REFVAL_P(offset);
			goto isset_again;
		} else {
			value = zend_find_array_dim_slow(ht, offset EXECUTE_DATA_CC);
			if (UNEXPECTED(EG(exception))) {
				result = 0;
				goto isset_dim_obj_exit;
			}
		}

		if (!(opline->extended_value & ZEND_ISEMPTY)) {
			/* > IS_NULL means not IS_UNDEF and not IS_NULL */
			result = value != NULL && Z_TYPE_P(value) > IS_NULL &&
			    (!Z_ISREF_P(value) || Z_TYPE_P(Z_REFVAL_P(value)) != IS_NULL);

			if (IS_CV & (IS_CONST|IS_CV)) {
				/* avoid exception check */
				zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
				ZEND_VM_SMART_BRANCH(result, 0);
			}
		} else {
			result = (value == NULL || !i_zend_is_true(value));
		}
		goto isset_dim_obj_exit;
	} else if ((IS_CV & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(container))) {
		container = Z_REFVAL_P(container);
		if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
			goto isset_dim_obj_array;
		}
	}

	if ((IS_TMP_VAR|IS_VAR) == IS_CONST && Z_EXTRA_P(offset) == ZEND_EXTRA_VALUE) {
		offset++;
	}
	if (!(opline->extended_value & ZEND_ISEMPTY)) {
		result = zend_isset_dim_slow(container, offset EXECUTE_DATA_CC);
	} else {
		result = zend_isempty_dim_slow(container, offset EXECUTE_DATA_CC);
	}

isset_dim_obj_exit:
	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));


	ZEND_VM_SMART_BRANCH(result, 1);
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CV_TMPVAR_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *container;
	int result;
	zval *offset;
	zend_string *name, *tmp_name;

	SAVE_OPLINE();
	container = _get_zval_ptr_cv_BP_VAR_IS(opline->op1.var EXECUTE_DATA_CC);
	offset = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);

	if (IS_CV == IS_CONST ||
	    (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
		if ((IS_CV & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
			container = Z_REFVAL_P(container);
			if (UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT)) {
				result = (opline->extended_value & ZEND_ISEMPTY);
				goto isset_object_finish;
			}
		} else {
			result = (opline->extended_value & ZEND_ISEMPTY);
			goto isset_object_finish;
		}
	}

	if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
		name = Z_STR_P(offset);
	} else {
		name = zval_try_get_tmp_string(offset, &tmp_name);
		if (UNEXPECTED(!name)) {
			result = 0;
			goto isset_object_finish;
		}
	}

	result =
		(opline->extended_value & ZEND_ISEMPTY) ^
		Z_OBJ_HT_P(container)->has_property(Z_OBJ_P(container), name, (opline->extended_value & ZEND_ISEMPTY), (((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(opline->extended_value & ~ZEND_ISEMPTY) : NULL));

	if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
		zend_tmp_string_release(tmp_name);
	}

isset_object_finish:
	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));


	ZEND_VM_SMART_BRANCH(result, 1);
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_ARRAY_KEY_EXISTS_SPEC_CV_TMPVAR_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE

	zval *key, *subject;
	HashTable *ht;
	bool result;

	SAVE_OPLINE();

	key = EX_VAR(opline->op1.var);
	subject = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);

	if (EXPECTED(Z_TYPE_P(subject) == IS_ARRAY)) {
array_key_exists_array:
		ht = Z_ARRVAL_P(subject);
		result = zend_array_key_exists_fast(ht, key OPLINE_CC EXECUTE_DATA_CC);
	} else {
		if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(subject))) {
			subject = Z_REFVAL_P(subject);
			if (EXPECTED(Z_TYPE_P(subject) == IS_ARRAY)) {
				goto array_key_exists_array;
			}
		}
		zend_array_key_exists_error(subject, key OPLINE_CC EXECUTE_DATA_CC);
		result = 0;
	}

	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));


	ZEND_VM_SMART_BRANCH(result, 1);
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_YIELD_SPEC_CV_TMPVAR_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE

	zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C);

	SAVE_OPLINE();
	if (UNEXPECTED(generator->flags & ZEND_GENERATOR_FORCED_CLOSE)) {
		ZEND_VM_TAIL_CALL(zend_yield_in_closed_generator_helper_SPEC_TAILCALL(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
	}

	/* Destroy the previously yielded value */
	zval_ptr_dtor(&generator->value);

	/* Destroy the previously yielded key */
	zval_ptr_dtor(&generator->key);

	/* Set the new yielded value */
	if (IS_CV != IS_UNUSED) {
		if (UNEXPECTED(EX(func)->op_array.fn_flags & ZEND_ACC_RETURN_REFERENCE)) {
			/* Constants and temporary variables aren't yieldable by reference,
			 * but we still allow them with a notice. */
			if (IS_CV & (IS_CONST|IS_TMP_VAR)) {
				zval *value;

				zend_error(E_NOTICE, "Only variable references should be yielded by reference");

				value = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
				ZVAL_COPY_VALUE(&generator->value, value);
				if (IS_CV == IS_CONST) {
					if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
						Z_ADDREF(generator->value);
					}
				}
			} else {
				zval *value_ptr = _get_zval_ptr_cv_BP_VAR_W(opline->op1.var EXECUTE_DATA_CC);

				/* If a function call result is yielded and the function did
				 * not return by reference we throw a notice. */
				do {
					if (IS_CV == IS_VAR) {
						ZEND_ASSERT(value_ptr != &EG(uninitialized_zval));
						if (opline->extended_value == ZEND_RETURNS_FUNCTION
						 && !Z_ISREF_P(value_ptr)) {
							zend_error(E_NOTICE, "Only variable references should be yielded by reference");
							ZVAL_COPY(&generator->value, value_ptr);
							break;
						}
					}
					if (Z_ISREF_P(value_ptr)) {
						Z_ADDREF_P(value_ptr);
					} else {
						ZVAL_MAKE_REF_EX(value_ptr, 2);
					}
					ZVAL_REF(&generator->value, Z_REF_P(value_ptr));
				} while (0);


			}
		} else {
			zval *value = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);

			/* Consts, temporary variables and references need copying */
			if (IS_CV == IS_CONST) {
				ZVAL_COPY_VALUE(&generator->value, value);
				if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
					Z_ADDREF(generator->value);
				}
			} else if (IS_CV == IS_TMP_VAR) {
				ZVAL_COPY_VALUE(&generator->value, value);
			} else if ((IS_CV & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) {
				ZVAL_COPY(&generator->value, Z_REFVAL_P(value));


			} else {
				ZVAL_COPY_VALUE(&generator->value, value);
				if (IS_CV == IS_CV) {
					if (Z_OPT_REFCOUNTED_P(value)) Z_ADDREF_P(value);
				}
			}
		}
	} else {
		/* If no value was specified yield null */
		ZVAL_NULL(&generator->value);
	}

	/* Set the new yielded key */
	if ((IS_TMP_VAR|IS_VAR) != IS_UNUSED) {
		zval *key = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
		if (((IS_TMP_VAR|IS_VAR) & (IS_CV|IS_VAR)) && UNEXPECTED(Z_TYPE_P(key) == IS_REFERENCE)) {
			key = Z_REFVAL_P(key);
		}
		ZVAL_COPY(&generator->key, key);
		zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));

		if (Z_TYPE(generator->key) == IS_LONG
		    && Z_LVAL(generator->key) > generator->largest_used_integer_key
		) {
			generator->largest_used_integer_key = Z_LVAL(generator->key);
		}
	} else {
		/* If no key was specified we use auto-increment keys */
		generator->largest_used_integer_key++;
		ZVAL_LONG(&generator->key, generator->largest_used_integer_key);
	}

	if (RETURN_VALUE_USED(opline)) {
		/* If the return value of yield is used set the send
		 * target and initialize it to NULL */
		generator->send_target = EX_VAR(opline->result.var);
		ZVAL_NULL(generator->send_target);
	} else {
		generator->send_target = NULL;
	}

	/* The GOTO VM uses a local opline variable. We need to set the opline
	 * variable in execute_data so we don't resume at an old position. */
	SAVE_OPLINE();

	ZEND_VM_RETURN();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_IS_IDENTICAL_SPEC_CV_TMP_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;
	bool result;

	SAVE_OPLINE();
	op1 = _get_zval_ptr_cv_deref_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
	op2 = _get_zval_ptr_tmp(opline->op2.var EXECUTE_DATA_CC);
	result = fast_is_identical_function(op1, op2);


	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
	ZEND_VM_SMART_BRANCH(result, 1);
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_IS_NOT_IDENTICAL_SPEC_CV_TMP_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;
	bool result;

	SAVE_OPLINE();
	op1 = _get_zval_ptr_cv_deref_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
	op2 = _get_zval_ptr_tmp(opline->op2.var EXECUTE_DATA_CC);
	result = fast_is_not_identical_function(op1, op2);


	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
	ZEND_VM_SMART_BRANCH(result, 1);
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_ASSIGN_SPEC_CV_TMP_RETVAL_UNUSED_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *value;
	zval *variable_ptr;

	SAVE_OPLINE();
	value = _get_zval_ptr_tmp(opline->op2.var EXECUTE_DATA_CC);
	variable_ptr = EX_VAR(opline->op1.var);

	if (0 || UNEXPECTED(0)) {
		zend_refcounted *garbage = NULL;

		value = zend_assign_to_variable_ex(variable_ptr, value, IS_TMP_VAR, EX_USES_STRICT_TYPES(), &garbage);
		if (UNEXPECTED(0)) {
			ZVAL_COPY(EX_VAR(opline->result.var), value);
		}
		if (garbage) {
			GC_DTOR_NO_REF(garbage);
		}
	} else {
		value = zend_assign_to_variable(variable_ptr, value, IS_TMP_VAR, EX_USES_STRICT_TYPES());
	}


	/* zend_assign_to_variable() always takes care of op2, never free it! */

	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_ASSIGN_SPEC_CV_TMP_RETVAL_USED_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *value;
	zval *variable_ptr;

	SAVE_OPLINE();
	value = _get_zval_ptr_tmp(opline->op2.var EXECUTE_DATA_CC);
	variable_ptr = EX_VAR(opline->op1.var);

	if (0 || UNEXPECTED(1)) {
		zend_refcounted *garbage = NULL;

		value = zend_assign_to_variable_ex(variable_ptr, value, IS_TMP_VAR, EX_USES_STRICT_TYPES(), &garbage);
		if (UNEXPECTED(1)) {
			ZVAL_COPY(EX_VAR(opline->result.var), value);
		}
		if (garbage) {
			GC_DTOR_NO_REF(garbage);
		}
	} else {
		value = zend_assign_to_variable(variable_ptr, value, IS_TMP_VAR, EX_USES_STRICT_TYPES());
	}


	/* zend_assign_to_variable() always takes care of op2, never free it! */

	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_IS_IDENTICAL_SPEC_CV_VAR_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;
	bool result;

	SAVE_OPLINE();
	op1 = _get_zval_ptr_cv_deref_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
	op2 = _get_zval_ptr_var_deref(opline->op2.var EXECUTE_DATA_CC);
	result = fast_is_identical_function(op1, op2);


	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
	ZEND_VM_SMART_BRANCH(result, 1);
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_IS_NOT_IDENTICAL_SPEC_CV_VAR_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;
	bool result;

	SAVE_OPLINE();
	op1 = _get_zval_ptr_cv_deref_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
	op2 = _get_zval_ptr_var_deref(opline->op2.var EXECUTE_DATA_CC);
	result = fast_is_not_identical_function(op1, op2);


	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
	ZEND_VM_SMART_BRANCH(result, 1);
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_ASSIGN_SPEC_CV_VAR_RETVAL_UNUSED_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *value;
	zval *variable_ptr;

	SAVE_OPLINE();
	value = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
	variable_ptr = EX_VAR(opline->op1.var);

	if (0 || UNEXPECTED(0)) {
		zend_refcounted *garbage = NULL;

		value = zend_assign_to_variable_ex(variable_ptr, value, IS_VAR, EX_USES_STRICT_TYPES(), &garbage);
		if (UNEXPECTED(0)) {
			ZVAL_COPY(EX_VAR(opline->result.var), value);
		}
		if (garbage) {
			GC_DTOR_NO_REF(garbage);
		}
	} else {
		value = zend_assign_to_variable(variable_ptr, value, IS_VAR, EX_USES_STRICT_TYPES());
	}


	/* zend_assign_to_variable() always takes care of op2, never free it! */

	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_ASSIGN_SPEC_CV_VAR_RETVAL_USED_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *value;
	zval *variable_ptr;

	SAVE_OPLINE();
	value = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
	variable_ptr = EX_VAR(opline->op1.var);

	if (0 || UNEXPECTED(1)) {
		zend_refcounted *garbage = NULL;

		value = zend_assign_to_variable_ex(variable_ptr, value, IS_VAR, EX_USES_STRICT_TYPES(), &garbage);
		if (UNEXPECTED(1)) {
			ZVAL_COPY(EX_VAR(opline->result.var), value);
		}
		if (garbage) {
			GC_DTOR_NO_REF(garbage);
		}
	} else {
		value = zend_assign_to_variable(variable_ptr, value, IS_VAR, EX_USES_STRICT_TYPES());
	}


	/* zend_assign_to_variable() always takes care of op2, never free it! */

	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_ASSIGN_REF_SPEC_CV_VAR_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *variable_ptr;
	zval *value_ptr;
	zend_refcounted *garbage = NULL;

	SAVE_OPLINE();
	value_ptr = _get_zval_ptr_ptr_var(opline->op2.var EXECUTE_DATA_CC);
	variable_ptr = EX_VAR(opline->op1.var);

	if (IS_CV == IS_VAR &&
	           UNEXPECTED(Z_TYPE_P(EX_VAR(opline->op1.var)) != IS_INDIRECT)) {

		zend_throw_error(NULL, "Cannot assign by reference to an array dimension of an object");
		variable_ptr = &EG(uninitialized_zval);
	} else if (IS_VAR == IS_VAR &&
	           opline->extended_value == ZEND_RETURNS_FUNCTION &&
			   UNEXPECTED(!Z_ISREF_P(value_ptr))) {

		variable_ptr = zend_wrong_assign_to_variable_reference(
			variable_ptr, value_ptr, &garbage OPLINE_CC EXECUTE_DATA_CC);
	} else {
		zend_assign_to_variable_reference(variable_ptr, value_ptr, &garbage);
	}

	if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
		ZVAL_COPY(EX_VAR(opline->result.var), variable_ptr);
	}

	if (garbage) {
		GC_DTOR(garbage);
	}

	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));


	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_INSTANCEOF_SPEC_CV_VAR_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *expr;
	bool result;

	SAVE_OPLINE();
	expr = EX_VAR(opline->op1.var);

try_instanceof:
	if (Z_TYPE_P(expr) == IS_OBJECT) {
		zend_class_entry *ce;

		if (IS_VAR == IS_CONST) {
			ce = CACHED_PTR(opline->extended_value);
			if (UNEXPECTED(ce == NULL)) {
				ce = zend_lookup_class_ex(Z_STR_P(RT_CONSTANT(opline, opline->op2)), Z_STR_P(RT_CONSTANT(opline, opline->op2) + 1), ZEND_FETCH_CLASS_NO_AUTOLOAD);
				if (EXPECTED(ce)) {
					CACHE_PTR(opline->extended_value, ce);
				}
			}
		} else if (IS_VAR == IS_UNUSED) {
			ce = zend_fetch_class(NULL, opline->op2.num);
			if (UNEXPECTED(ce == NULL)) {


				ZVAL_UNDEF(EX_VAR(opline->result.var));
				HANDLE_EXCEPTION();
			}
		} else {
			ce = Z_CE_P(EX_VAR(opline->op2.var));
		}
		result = ce && instanceof_function(Z_OBJCE_P(expr), ce);
	} else if ((IS_CV & (IS_VAR|IS_CV)) && Z_TYPE_P(expr) == IS_REFERENCE) {
		expr = Z_REFVAL_P(expr);
		goto try_instanceof;
	} else {
		if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(expr) == IS_UNDEF)) {
			ZVAL_UNDEFINED_OP1();
		}
		result = 0;
	}


	ZEND_VM_SMART_BRANCH(result, 1);
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_ASSIGN_DIM_OP_SPEC_CV_UNUSED_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *var_ptr;
	zval *value, *container, *dim;
	HashTable *ht;

	SAVE_OPLINE();
	container = EX_VAR(opline->op1.var);

	if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
assign_dim_op_array:
		SEPARATE_ARRAY(container);
		ht = Z_ARRVAL_P(container);
assign_dim_op_new_array:
		dim = NULL;
		if (IS_UNUSED == IS_UNUSED) {
			var_ptr = zend_hash_next_index_insert(ht, &EG(uninitialized_zval));
			if (UNEXPECTED(!var_ptr)) {
				zend_cannot_add_element();
				goto assign_dim_op_ret_null;
			}
		} else {
			if (IS_UNUSED == IS_CONST) {
				var_ptr = zend_fetch_dimension_address_inner_RW_CONST(ht, dim EXECUTE_DATA_CC);
			} else {
				var_ptr = zend_fetch_dimension_address_inner_RW(ht, dim EXECUTE_DATA_CC);
			}
			if (UNEXPECTED(!var_ptr)) {
				goto assign_dim_op_ret_null;
			}
		}

		value = get_op_data_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1);

		do {
			if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_ISREF_P(var_ptr))) {
				zend_reference *ref = Z_REF_P(var_ptr);
				var_ptr = Z_REFVAL_P(var_ptr);
				if (UNEXPECTED(ZEND_REF_HAS_TYPE_SOURCES(ref))) {
					zend_binary_assign_op_typed_ref(ref, value OPLINE_CC EXECUTE_DATA_CC);
					break;
				}
			}
			zend_binary_op(var_ptr, var_ptr, value OPLINE_CC);
		} while (0);

		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
			ZVAL_COPY(EX_VAR(opline->result.var), var_ptr);
		}
		FREE_OP((opline+1)->op1_type, (opline+1)->op1.var);
	} else {
		if (EXPECTED(Z_ISREF_P(container))) {
			container = Z_REFVAL_P(container);
			if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
				goto assign_dim_op_array;
			}
		}

		if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
			zend_object *obj = Z_OBJ_P(container);

			dim = NULL;
			if (IS_UNUSED == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
				dim++;
			}
			zend_binary_assign_op_obj_dim(obj, dim OPLINE_CC EXECUTE_DATA_CC);
		} else if (EXPECTED(Z_TYPE_P(container) <= IS_FALSE)) {
			uint8_t old_type;

			if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(container) == IS_UNDEF)) {
				ZVAL_UNDEFINED_OP1();
			}
			ht = zend_new_array(8);
			old_type = Z_TYPE_P(container);
			ZVAL_ARR(container, ht);
			if (UNEXPECTED(old_type == IS_FALSE)) {
				GC_ADDREF(ht);
				zend_false_to_array_deprecated();
				if (UNEXPECTED(GC_DELREF(ht) == 0)) {
					zend_array_destroy(ht);
					goto assign_dim_op_ret_null;
				}
			}
			goto assign_dim_op_new_array;
		} else {
			dim = NULL;
			zend_binary_assign_op_dim_slow(container, dim OPLINE_CC EXECUTE_DATA_CC);
assign_dim_op_ret_null:
			FREE_OP((opline+1)->op1_type, (opline+1)->op1.var);
			if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
				ZVAL_NULL(EX_VAR(opline->result.var));
			}
		}
	}




	ZEND_VM_NEXT_OPCODE_EX(1, 2);
}

static zend_never_inline ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV_EX  zend_fetch_var_address_helper_SPEC_CV_UNUSED_TAILCALL(ZEND_OPCODE_HANDLER_ARGS_EX int type);
static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_FETCH_R_SPEC_CV_UNUSED_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	ZEND_VM_DISPATCH_TO_HELPER(zend_fetch_var_address_helper_SPEC_CV_UNUSED_TAILCALL(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_EX BP_VAR_R));
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_FETCH_W_SPEC_CV_UNUSED_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	ZEND_VM_DISPATCH_TO_HELPER(zend_fetch_var_address_helper_SPEC_CV_UNUSED_TAILCALL(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_EX BP_VAR_W));
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_FETCH_RW_SPEC_CV_UNUSED_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	ZEND_VM_DISPATCH_TO_HELPER(zend_fetch_var_address_helper_SPEC_CV_UNUSED_TAILCALL(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_EX BP_VAR_RW));
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_FETCH_FUNC_ARG_SPEC_CV_UNUSED_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	int fetch_type =
		(UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) ?
			BP_VAR_W : BP_VAR_R;
	ZEND_VM_DISPATCH_TO_HELPER(zend_fetch_var_address_helper_SPEC_CV_UNUSED_TAILCALL(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_EX fetch_type));
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_FETCH_UNSET_SPEC_CV_UNUSED_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	ZEND_VM_DISPATCH_TO_HELPER(zend_fetch_var_address_helper_SPEC_CV_UNUSED_TAILCALL(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_EX BP_VAR_UNSET));
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_FETCH_IS_SPEC_CV_UNUSED_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	ZEND_VM_DISPATCH_TO_HELPER(zend_fetch_var_address_helper_SPEC_CV_UNUSED_TAILCALL(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_EX BP_VAR_IS));
}

/* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CONST|VAR) */
static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_FETCH_DIM_W_SPEC_CV_UNUSED_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *container;

	SAVE_OPLINE();
	container = EX_VAR(opline->op1.var);
	zend_fetch_dimension_address_W(container, NULL, IS_UNUSED OPLINE_CC EXECUTE_DATA_CC);


	if (IS_CV == IS_VAR) {
		FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
	}
	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_FETCH_DIM_RW_SPEC_CV_UNUSED_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *container;

	SAVE_OPLINE();
	container = EX_VAR(opline->op1.var);
	zend_fetch_dimension_address_RW(container, NULL, IS_UNUSED OPLINE_CC EXECUTE_DATA_CC);


	if (IS_CV == IS_VAR) {
		FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
	}
	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_UNUSED_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
#if 0
	USE_OPLINE
#endif

	if (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) {
		if ((IS_CV & (IS_CONST|IS_TMP_VAR))) {
			ZEND_VM_TAIL_CALL(zend_use_tmp_in_write_context_helper_SPEC_TAILCALL(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
		}
		ZEND_VM_TAIL_CALL(ZEND_FETCH_DIM_W_SPEC_CV_UNUSED_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
	} else {
		if (IS_UNUSED == IS_UNUSED) {
			ZEND_VM_TAIL_CALL(zend_use_undef_in_read_context_helper_SPEC_TAILCALL(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
		}
		ZEND_VM_TAIL_CALL(ZEND_NULL_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
	}
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_ASSIGN_DIM_SPEC_CV_UNUSED_OP_DATA_CONST_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *object_ptr, *orig_object_ptr;
	zval *value;
	zval *variable_ptr;
	zval *dim;
	zend_refcounted *garbage = NULL;

	SAVE_OPLINE();
	orig_object_ptr = object_ptr = EX_VAR(opline->op1.var);

	if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
try_assign_dim_array:
		SEPARATE_ARRAY(object_ptr);
		if (IS_UNUSED == IS_UNUSED) {
			value = RT_CONSTANT((opline+1), (opline+1)->op1);
			if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
				HashTable *ht = Z_ARRVAL_P(object_ptr);
				if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE)) {
					GC_ADDREF(ht);
				}
				value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
				if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE) && !GC_DELREF(ht)) {
					zend_array_destroy(ht);
					goto assign_dim_error;
				}
			}
			if (IS_CONST == IS_CV || IS_CONST == IS_VAR) {
				ZVAL_DEREF(value);
			}
			value = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), value);
			if (UNEXPECTED(value == NULL)) {
				zend_cannot_add_element();
				goto assign_dim_error;
			} else if (IS_CONST == IS_CV) {
				if (Z_REFCOUNTED_P(value)) {
					Z_ADDREF_P(value);
				}
			} else if (IS_CONST == IS_VAR) {
				zval *free_op_data = EX_VAR((opline+1)->op1.var);
				if (Z_ISREF_P(free_op_data)) {
					if (Z_REFCOUNTED_P(value)) {
						Z_ADDREF_P(value);
					}
					zval_ptr_dtor_nogc(free_op_data);
				}
			} else if (IS_CONST == IS_CONST) {
				if (UNEXPECTED(Z_REFCOUNTED_P(value))) {
					Z_ADDREF_P(value);
				}
			}
		} else {
			dim = NULL;
			if (IS_UNUSED == IS_CONST) {
				variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
			} else {
				variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
			}
			if (UNEXPECTED(variable_ptr == NULL)) {
				goto assign_dim_error;
			}
			value = RT_CONSTANT((opline+1), (opline+1)->op1);
			value = zend_assign_to_variable_ex(variable_ptr, value, IS_CONST, EX_USES_STRICT_TYPES(), &garbage);
		}
		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
			ZVAL_COPY(EX_VAR(opline->result.var), value);
		}
		if (garbage) {
			GC_DTOR_NO_REF(garbage);
		}
	} else {
		if (EXPECTED(Z_ISREF_P(object_ptr))) {
			object_ptr = Z_REFVAL_P(object_ptr);
			if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
				goto try_assign_dim_array;
			}
		}
		if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) {
			zend_object *obj = Z_OBJ_P(object_ptr);

			GC_ADDREF(obj);
			dim = NULL;
			if (IS_UNUSED == IS_CV && UNEXPECTED(Z_ISUNDEF_P(dim))) {
				dim = ZVAL_UNDEFINED_OP2();
			} else if (IS_UNUSED == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
				dim++;
			}

			value = RT_CONSTANT((opline+1), (opline+1)->op1);
			if (IS_CONST == IS_CV && UNEXPECTED(Z_ISUNDEF_P(value))) {
				value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
			} else if (IS_CONST & (IS_CV|IS_VAR)) {
				ZVAL_DEREF(value);
			}

			zend_assign_to_object_dim(obj, dim, value OPLINE_CC EXECUTE_DATA_CC);


			if (UNEXPECTED(GC_DELREF(obj) == 0)) {
				zend_objects_store_del(obj);
			}
		} else if (EXPECTED(Z_TYPE_P(object_ptr) == IS_STRING)) {
			if (IS_UNUSED == IS_UNUSED) {
				zend_use_new_element_for_string();


				UNDEF_RESULT();
			} else {
				dim = NULL;
				value = RT_CONSTANT((opline+1), (opline+1)->op1);
				zend_assign_to_string_offset(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC);


			}
		} else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
			if (Z_ISREF_P(orig_object_ptr)
			 && ZEND_REF_HAS_TYPE_SOURCES(Z_REF_P(orig_object_ptr))
			 && !zend_verify_ref_array_assignable(Z_REF_P(orig_object_ptr))) {
				dim = NULL;


				UNDEF_RESULT();
			} else {
				HashTable *ht = zend_new_array(8);
				uint8_t old_type = Z_TYPE_P(object_ptr);

				ZVAL_ARR(object_ptr, ht);
				if (UNEXPECTED(old_type == IS_FALSE)) {
					GC_ADDREF(ht);
					zend_false_to_array_deprecated();
					if (UNEXPECTED(GC_DELREF(ht) == 0)) {
						zend_array_destroy(ht);
						goto assign_dim_error;
					}
				}
				goto try_assign_dim_array;
			}
		} else {
			zend_use_scalar_as_array();
			dim = NULL;
assign_dim_error:


			if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
				ZVAL_NULL(EX_VAR(opline->result.var));
			}
		}
	}
	if (IS_UNUSED != IS_UNUSED) {


	}


	/* assign_dim has two opcodes! */
	ZEND_VM_NEXT_OPCODE_EX(1, 2);
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_ASSIGN_DIM_SPEC_CV_UNUSED_OP_DATA_TMP_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *object_ptr, *orig_object_ptr;
	zval *value;
	zval *variable_ptr;
	zval *dim;
	zend_refcounted *garbage = NULL;

	SAVE_OPLINE();
	orig_object_ptr = object_ptr = EX_VAR(opline->op1.var);

	if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
try_assign_dim_array:
		SEPARATE_ARRAY(object_ptr);
		if (IS_UNUSED == IS_UNUSED) {
			value = _get_zval_ptr_tmp((opline+1)->op1.var EXECUTE_DATA_CC);
			if (IS_TMP_VAR == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
				HashTable *ht = Z_ARRVAL_P(object_ptr);
				if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE)) {
					GC_ADDREF(ht);
				}
				value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
				if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE) && !GC_DELREF(ht)) {
					zend_array_destroy(ht);
					goto assign_dim_error;
				}
			}
			if (IS_TMP_VAR == IS_CV || IS_TMP_VAR == IS_VAR) {
				ZVAL_DEREF(value);
			}
			value = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), value);
			if (UNEXPECTED(value == NULL)) {
				zend_cannot_add_element();
				goto assign_dim_error;
			} else if (IS_TMP_VAR == IS_CV) {
				if (Z_REFCOUNTED_P(value)) {
					Z_ADDREF_P(value);
				}
			} else if (IS_TMP_VAR == IS_VAR) {
				zval *free_op_data = EX_VAR((opline+1)->op1.var);
				if (Z_ISREF_P(free_op_data)) {
					if (Z_REFCOUNTED_P(value)) {
						Z_ADDREF_P(value);
					}
					zval_ptr_dtor_nogc(free_op_data);
				}
			} else if (IS_TMP_VAR == IS_CONST) {
				if (UNEXPECTED(Z_REFCOUNTED_P(value))) {
					Z_ADDREF_P(value);
				}
			}
		} else {
			dim = NULL;
			if (IS_UNUSED == IS_CONST) {
				variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
			} else {
				variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
			}
			if (UNEXPECTED(variable_ptr == NULL)) {
				goto assign_dim_error;
			}
			value = _get_zval_ptr_tmp((opline+1)->op1.var EXECUTE_DATA_CC);
			value = zend_assign_to_variable_ex(variable_ptr, value, IS_TMP_VAR, EX_USES_STRICT_TYPES(), &garbage);
		}
		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
			ZVAL_COPY(EX_VAR(opline->result.var), value);
		}
		if (garbage) {
			GC_DTOR_NO_REF(garbage);
		}
	} else {
		if (EXPECTED(Z_ISREF_P(object_ptr))) {
			object_ptr = Z_REFVAL_P(object_ptr);
			if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
				goto try_assign_dim_array;
			}
		}
		if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) {
			zend_object *obj = Z_OBJ_P(object_ptr);

			GC_ADDREF(obj);
			dim = NULL;
			if (IS_UNUSED == IS_CV && UNEXPECTED(Z_ISUNDEF_P(dim))) {
				dim = ZVAL_UNDEFINED_OP2();
			} else if (IS_UNUSED == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
				dim++;
			}

			value = _get_zval_ptr_tmp((opline+1)->op1.var EXECUTE_DATA_CC);
			if (IS_TMP_VAR == IS_CV && UNEXPECTED(Z_ISUNDEF_P(value))) {
				value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
			} else if (IS_TMP_VAR & (IS_CV|IS_VAR)) {
				ZVAL_DEREF(value);
			}

			zend_assign_to_object_dim(obj, dim, value OPLINE_CC EXECUTE_DATA_CC);

			zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
			if (UNEXPECTED(GC_DELREF(obj) == 0)) {
				zend_objects_store_del(obj);
			}
		} else if (EXPECTED(Z_TYPE_P(object_ptr) == IS_STRING)) {
			if (IS_UNUSED == IS_UNUSED) {
				zend_use_new_element_for_string();
				zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
				UNDEF_RESULT();
			} else {
				dim = NULL;
				value = _get_zval_ptr_tmp((opline+1)->op1.var EXECUTE_DATA_CC);
				zend_assign_to_string_offset(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC);
				zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
			}
		} else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
			if (Z_ISREF_P(orig_object_ptr)
			 && ZEND_REF_HAS_TYPE_SOURCES(Z_REF_P(orig_object_ptr))
			 && !zend_verify_ref_array_assignable(Z_REF_P(orig_object_ptr))) {
				dim = NULL;
				zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
				UNDEF_RESULT();
			} else {
				HashTable *ht = zend_new_array(8);
				uint8_t old_type = Z_TYPE_P(object_ptr);

				ZVAL_ARR(object_ptr, ht);
				if (UNEXPECTED(old_type == IS_FALSE)) {
					GC_ADDREF(ht);
					zend_false_to_array_deprecated();
					if (UNEXPECTED(GC_DELREF(ht) == 0)) {
						zend_array_destroy(ht);
						goto assign_dim_error;
					}
				}
				goto try_assign_dim_array;
			}
		} else {
			zend_use_scalar_as_array();
			dim = NULL;
assign_dim_error:
			zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
			if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
				ZVAL_NULL(EX_VAR(opline->result.var));
			}
		}
	}
	if (IS_UNUSED != IS_UNUSED) {


	}


	/* assign_dim has two opcodes! */
	ZEND_VM_NEXT_OPCODE_EX(1, 2);
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_ASSIGN_DIM_SPEC_CV_UNUSED_OP_DATA_VAR_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *object_ptr, *orig_object_ptr;
	zval *value;
	zval *variable_ptr;
	zval *dim;
	zend_refcounted *garbage = NULL;

	SAVE_OPLINE();
	orig_object_ptr = object_ptr = EX_VAR(opline->op1.var);

	if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
try_assign_dim_array:
		SEPARATE_ARRAY(object_ptr);
		if (IS_UNUSED == IS_UNUSED) {
			value = _get_zval_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);
			if (IS_VAR == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
				HashTable *ht = Z_ARRVAL_P(object_ptr);
				if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE)) {
					GC_ADDREF(ht);
				}
				value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
				if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE) && !GC_DELREF(ht)) {
					zend_array_destroy(ht);
					goto assign_dim_error;
				}
			}
			if (IS_VAR == IS_CV || IS_VAR == IS_VAR) {
				ZVAL_DEREF(value);
			}
			value = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), value);
			if (UNEXPECTED(value == NULL)) {
				zend_cannot_add_element();
				goto assign_dim_error;
			} else if (IS_VAR == IS_CV) {
				if (Z_REFCOUNTED_P(value)) {
					Z_ADDREF_P(value);
				}
			} else if (IS_VAR == IS_VAR) {
				zval *free_op_data = EX_VAR((opline+1)->op1.var);
				if (Z_ISREF_P(free_op_data)) {
					if (Z_REFCOUNTED_P(value)) {
						Z_ADDREF_P(value);
					}
					zval_ptr_dtor_nogc(free_op_data);
				}
			} else if (IS_VAR == IS_CONST) {
				if (UNEXPECTED(Z_REFCOUNTED_P(value))) {
					Z_ADDREF_P(value);
				}
			}
		} else {
			dim = NULL;
			if (IS_UNUSED == IS_CONST) {
				variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
			} else {
				variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
			}
			if (UNEXPECTED(variable_ptr == NULL)) {
				goto assign_dim_error;
			}
			value = _get_zval_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);
			value = zend_assign_to_variable_ex(variable_ptr, value, IS_VAR, EX_USES_STRICT_TYPES(), &garbage);
		}
		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
			ZVAL_COPY(EX_VAR(opline->result.var), value);
		}
		if (garbage) {
			GC_DTOR_NO_REF(garbage);
		}
	} else {
		if (EXPECTED(Z_ISREF_P(object_ptr))) {
			object_ptr = Z_REFVAL_P(object_ptr);
			if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
				goto try_assign_dim_array;
			}
		}
		if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) {
			zend_object *obj = Z_OBJ_P(object_ptr);

			GC_ADDREF(obj);
			dim = NULL;
			if (IS_UNUSED == IS_CV && UNEXPECTED(Z_ISUNDEF_P(dim))) {
				dim = ZVAL_UNDEFINED_OP2();
			} else if (IS_UNUSED == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
				dim++;
			}

			value = _get_zval_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);
			if (IS_VAR == IS_CV && UNEXPECTED(Z_ISUNDEF_P(value))) {
				value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
			} else if (IS_VAR & (IS_CV|IS_VAR)) {
				ZVAL_DEREF(value);
			}

			zend_assign_to_object_dim(obj, dim, value OPLINE_CC EXECUTE_DATA_CC);

			zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
			if (UNEXPECTED(GC_DELREF(obj) == 0)) {
				zend_objects_store_del(obj);
			}
		} else if (EXPECTED(Z_TYPE_P(object_ptr) == IS_STRING)) {
			if (IS_UNUSED == IS_UNUSED) {
				zend_use_new_element_for_string();
				zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
				UNDEF_RESULT();
			} else {
				dim = NULL;
				value = _get_zval_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);
				zend_assign_to_string_offset(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC);
				zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
			}
		} else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
			if (Z_ISREF_P(orig_object_ptr)
			 && ZEND_REF_HAS_TYPE_SOURCES(Z_REF_P(orig_object_ptr))
			 && !zend_verify_ref_array_assignable(Z_REF_P(orig_object_ptr))) {
				dim = NULL;
				zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
				UNDEF_RESULT();
			} else {
				HashTable *ht = zend_new_array(8);
				uint8_t old_type = Z_TYPE_P(object_ptr);

				ZVAL_ARR(object_ptr, ht);
				if (UNEXPECTED(old_type == IS_FALSE)) {
					GC_ADDREF(ht);
					zend_false_to_array_deprecated();
					if (UNEXPECTED(GC_DELREF(ht) == 0)) {
						zend_array_destroy(ht);
						goto assign_dim_error;
					}
				}
				goto try_assign_dim_array;
			}
		} else {
			zend_use_scalar_as_array();
			dim = NULL;
assign_dim_error:
			zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
			if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
				ZVAL_NULL(EX_VAR(opline->result.var));
			}
		}
	}
	if (IS_UNUSED != IS_UNUSED) {


	}


	/* assign_dim has two opcodes! */
	ZEND_VM_NEXT_OPCODE_EX(1, 2);
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_ASSIGN_DIM_SPEC_CV_UNUSED_OP_DATA_CV_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *object_ptr, *orig_object_ptr;
	zval *value;
	zval *variable_ptr;
	zval *dim;
	zend_refcounted *garbage = NULL;

	SAVE_OPLINE();
	orig_object_ptr = object_ptr = EX_VAR(opline->op1.var);

	if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
try_assign_dim_array:
		SEPARATE_ARRAY(object_ptr);
		if (IS_UNUSED == IS_UNUSED) {
			value = EX_VAR((opline+1)->op1.var);
			if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
				HashTable *ht = Z_ARRVAL_P(object_ptr);
				if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE)) {
					GC_ADDREF(ht);
				}
				value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
				if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE) && !GC_DELREF(ht)) {
					zend_array_destroy(ht);
					goto assign_dim_error;
				}
			}
			if (IS_CV == IS_CV || IS_CV == IS_VAR) {
				ZVAL_DEREF(value);
			}
			value = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), value);
			if (UNEXPECTED(value == NULL)) {
				zend_cannot_add_element();
				goto assign_dim_error;
			} else if (IS_CV == IS_CV) {
				if (Z_REFCOUNTED_P(value)) {
					Z_ADDREF_P(value);
				}
			} else if (IS_CV == IS_VAR) {
				zval *free_op_data = EX_VAR((opline+1)->op1.var);
				if (Z_ISREF_P(free_op_data)) {
					if (Z_REFCOUNTED_P(value)) {
						Z_ADDREF_P(value);
					}
					zval_ptr_dtor_nogc(free_op_data);
				}
			} else if (IS_CV == IS_CONST) {
				if (UNEXPECTED(Z_REFCOUNTED_P(value))) {
					Z_ADDREF_P(value);
				}
			}
		} else {
			dim = NULL;
			if (IS_UNUSED == IS_CONST) {
				variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
			} else {
				variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
			}
			if (UNEXPECTED(variable_ptr == NULL)) {
				goto assign_dim_error;
			}
			value = _get_zval_ptr_cv_BP_VAR_R((opline+1)->op1.var EXECUTE_DATA_CC);
			value = zend_assign_to_variable_ex(variable_ptr, value, IS_CV, EX_USES_STRICT_TYPES(), &garbage);
		}
		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
			ZVAL_COPY(EX_VAR(opline->result.var), value);
		}
		if (garbage) {
			GC_DTOR_NO_REF(garbage);
		}
	} else {
		if (EXPECTED(Z_ISREF_P(object_ptr))) {
			object_ptr = Z_REFVAL_P(object_ptr);
			if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
				goto try_assign_dim_array;
			}
		}
		if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) {
			zend_object *obj = Z_OBJ_P(object_ptr);

			GC_ADDREF(obj);
			dim = NULL;
			if (IS_UNUSED == IS_CV && UNEXPECTED(Z_ISUNDEF_P(dim))) {
				dim = ZVAL_UNDEFINED_OP2();
			} else if (IS_UNUSED == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
				dim++;
			}

			value = EX_VAR((opline+1)->op1.var);
			if (IS_CV == IS_CV && UNEXPECTED(Z_ISUNDEF_P(value))) {
				value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
			} else if (IS_CV & (IS_CV|IS_VAR)) {
				ZVAL_DEREF(value);
			}

			zend_assign_to_object_dim(obj, dim, value OPLINE_CC EXECUTE_DATA_CC);


			if (UNEXPECTED(GC_DELREF(obj) == 0)) {
				zend_objects_store_del(obj);
			}
		} else if (EXPECTED(Z_TYPE_P(object_ptr) == IS_STRING)) {
			if (IS_UNUSED == IS_UNUSED) {
				zend_use_new_element_for_string();


				UNDEF_RESULT();
			} else {
				dim = NULL;
				value = EX_VAR((opline+1)->op1.var);
				zend_assign_to_string_offset(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC);


			}
		} else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
			if (Z_ISREF_P(orig_object_ptr)
			 && ZEND_REF_HAS_TYPE_SOURCES(Z_REF_P(orig_object_ptr))
			 && !zend_verify_ref_array_assignable(Z_REF_P(orig_object_ptr))) {
				dim = NULL;


				UNDEF_RESULT();
			} else {
				HashTable *ht = zend_new_array(8);
				uint8_t old_type = Z_TYPE_P(object_ptr);

				ZVAL_ARR(object_ptr, ht);
				if (UNEXPECTED(old_type == IS_FALSE)) {
					GC_ADDREF(ht);
					zend_false_to_array_deprecated();
					if (UNEXPECTED(GC_DELREF(ht) == 0)) {
						zend_array_destroy(ht);
						goto assign_dim_error;
					}
				}
				goto try_assign_dim_array;
			}
		} else {
			zend_use_scalar_as_array();
			dim = NULL;
assign_dim_error:


			if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
				ZVAL_NULL(EX_VAR(opline->result.var));
			}
		}
	}
	if (IS_UNUSED != IS_UNUSED) {


	}


	/* assign_dim has two opcodes! */
	ZEND_VM_NEXT_OPCODE_EX(1, 2);
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_VERIFY_RETURN_TYPE_SPEC_CV_UNUSED_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	if (IS_CV == IS_UNUSED) {
		SAVE_OPLINE();
		zend_verify_missing_return_type(EX(func));
		HANDLE_EXCEPTION();
	} else {
/* prevents "undefined variable opline" errors */
#if 0 || (IS_CV != IS_UNUSED)
		USE_OPLINE
		zval *retval_ref, *retval_ptr;
		zend_arg_info *ret_info = EX(func)->common.arg_info - 1;
		retval_ref = retval_ptr = EX_VAR(opline->op1.var);

		if (IS_CV == IS_CONST) {
			ZVAL_COPY(EX_VAR(opline->result.var), retval_ptr);
			retval_ref = retval_ptr = EX_VAR(opline->result.var);
		} else if (IS_CV == IS_VAR) {
			if (UNEXPECTED(Z_TYPE_P(retval_ptr) == IS_INDIRECT)) {
				retval_ref = retval_ptr = Z_INDIRECT_P(retval_ptr);
			}
			ZVAL_DEREF(retval_ptr);
		} else if (IS_CV == IS_CV) {
			ZVAL_DEREF(retval_ptr);
		}

		if (EXPECTED(ZEND_TYPE_CONTAINS_CODE(ret_info->type, Z_TYPE_P(retval_ptr)))) {
			ZEND_VM_NEXT_OPCODE();
		}

		if (IS_CV == IS_CV && UNEXPECTED(Z_ISUNDEF_P(retval_ptr))) {
			SAVE_OPLINE();
			retval_ref = retval_ptr = ZVAL_UNDEFINED_OP1();
			if (UNEXPECTED(EG(exception))) {
				HANDLE_EXCEPTION();
			}
			if (ZEND_TYPE_FULL_MASK(ret_info->type) & MAY_BE_NULL) {
				ZEND_VM_NEXT_OPCODE();
			}
		}

		zend_reference *ref = NULL;
		if (UNEXPECTED(retval_ref != retval_ptr)) {
			if (UNEXPECTED(EX(func)->op_array.fn_flags & ZEND_ACC_RETURN_REFERENCE)) {
				ref = Z_REF_P(retval_ref);
			} else {
				/* A cast might happen - unwrap the reference if this is a by-value return */
				if (Z_REFCOUNT_P(retval_ref) == 1) {
					ZVAL_UNREF(retval_ref);
				} else {
					Z_DELREF_P(retval_ref);
					ZVAL_COPY(retval_ref, retval_ptr);
				}
				retval_ptr = retval_ref;
			}
		}

		SAVE_OPLINE();
		if (UNEXPECTED(!zend_check_type_slow(&ret_info->type, retval_ptr, ref, 1, 0))) {
			zend_verify_return_error(EX(func), retval_ptr);
			HANDLE_EXCEPTION();
		}
		ZEND_VM_NEXT_OPCODE();
#endif
	}
}

static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_SEND_VAR_SPEC_CV_UNUSED_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *varptr, *arg;

	if (IS_UNUSED == IS_CONST) {
		SAVE_OPLINE();
		zend_string *arg_name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
		uint32_t arg_num;
		arg = zend_handle_named_arg(&EX(call), arg_name, &arg_num, CACHE_ADDR(opline->result.num));
		if (UNEXPECTED(!arg)) {


			HANDLE_EXCEPTION();
		}
	} else {
		arg = ZEND_CALL_VAR(EX(call), opline->result.var);
	}

	varptr = EX_VAR(opline->op1.var);
	if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(varptr) == IS_UNDEF)) {
		SAVE_OPLINE();
		ZVAL_UNDEFINED_OP1();
		ZVAL_NULL(arg);
		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
	}

	if (IS_CV == IS_CV) {
		ZVAL_COPY_DEREF(arg, varptr);
	} else /* if (IS_CV == IS_VAR) */ {
		if (UNEXPECTED(Z_ISREF_P(varptr))) {
			zend_refcounted *ref = Z_COUNTED_P(varptr);

			varptr = Z_REFVAL_P(varptr);
			ZVAL_COPY_VALUE(arg, varptr);
			if (UNEXPECTED(GC_DELREF(ref) == 0)) {
				efree_size(ref, sizeof(zend_reference));
			} else if (Z_OPT_REFCOUNTED_P(arg)) {
				Z_ADDREF_P(arg);
			}
		} else {
			ZVAL_COPY_VALUE(arg, varptr);
		}
	}

	ZEND_VM_NEXT_OPCODE();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_SEND_REF_SPEC_CV_UNUSED_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *varptr, *arg;

	SAVE_OPLINE();
	if (IS_UNUSED == IS_CONST) {
		zend_string *arg_name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
		uint32_t arg_num;
		arg = zend_handle_named_arg(&EX(call), arg_name, &arg_num, CACHE_ADDR(opline->result.num));
		if (UNEXPECTED(!arg)) {


			HANDLE_EXCEPTION();
		}
	} else {
		arg = ZEND_CALL_VAR(EX(call), opline->result.var);
	}

	varptr = _get_zval_ptr_cv_BP_VAR_W(opline->op1.var EXECUTE_DATA_CC);
	if (Z_ISREF_P(varptr)) {
		Z_ADDREF_P(varptr);
	} else {
		ZVAL_MAKE_REF_EX(varptr, 2);
	}
	ZVAL_REF(arg, Z_REF_P(varptr));


	ZEND_VM_NEXT_OPCODE();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_SEND_VAR_EX_SPEC_CV_UNUSED_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *varptr, *arg;
	uint32_t arg_num;

	if (IS_UNUSED == IS_CONST) {
		SAVE_OPLINE();
		zend_string *arg_name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
		arg = zend_handle_named_arg(&EX(call), arg_name, &arg_num, CACHE_ADDR(opline->result.num));
		if (UNEXPECTED(!arg)) {


			HANDLE_EXCEPTION();
		}
	} else {
		arg = ZEND_CALL_VAR(EX(call), opline->result.var);
		arg_num = opline->op2.num;
	}

	if (EXPECTED(0)) {
		if (QUICK_ARG_SHOULD_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
			goto send_var_by_ref;
		}
	} else if (ARG_SHOULD_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
send_var_by_ref:
		varptr = _get_zval_ptr_cv_BP_VAR_W(opline->op1.var EXECUTE_DATA_CC);
		if (Z_ISREF_P(varptr)) {
			Z_ADDREF_P(varptr);
		} else {
			ZVAL_MAKE_REF_EX(varptr, 2);
		}
		ZVAL_REF(arg, Z_REF_P(varptr));


		ZEND_VM_NEXT_OPCODE();
	}

	varptr = EX_VAR(opline->op1.var);
	if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(varptr) == IS_UNDEF)) {
		SAVE_OPLINE();
		ZVAL_UNDEFINED_OP1();
		ZVAL_NULL(arg);
		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
	}

	if (IS_CV == IS_CV) {
		ZVAL_COPY_DEREF(arg, varptr);
	} else /* if (IS_CV == IS_VAR) */ {
		if (UNEXPECTED(Z_ISREF_P(varptr))) {
			zend_refcounted *ref = Z_COUNTED_P(varptr);

			varptr = Z_REFVAL_P(varptr);
			ZVAL_COPY_VALUE(arg, varptr);
			if (UNEXPECTED(GC_DELREF(ref) == 0)) {
				efree_size(ref, sizeof(zend_reference));
			} else if (Z_OPT_REFCOUNTED_P(arg)) {
				Z_ADDREF_P(arg);
			}
		} else {
			ZVAL_COPY_VALUE(arg, varptr);
		}
	}

	ZEND_VM_NEXT_OPCODE();
}

static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_SEND_VAR_EX_SPEC_CV_UNUSED_QUICK_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *varptr, *arg;
	uint32_t arg_num;

	if (IS_UNUSED == IS_CONST) {
		SAVE_OPLINE();
		zend_string *arg_name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
		arg = zend_handle_named_arg(&EX(call), arg_name, &arg_num, CACHE_ADDR(opline->result.num));
		if (UNEXPECTED(!arg)) {


			HANDLE_EXCEPTION();
		}
	} else {
		arg = ZEND_CALL_VAR(EX(call), opline->result.var);
		arg_num = opline->op2.num;
	}

	if (EXPECTED(1)) {
		if (QUICK_ARG_SHOULD_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
			goto send_var_by_ref;
		}
	} else if (ARG_SHOULD_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
send_var_by_ref:
		varptr = _get_zval_ptr_cv_BP_VAR_W(opline->op1.var EXECUTE_DATA_CC);
		if (Z_ISREF_P(varptr)) {
			Z_ADDREF_P(varptr);
		} else {
			ZVAL_MAKE_REF_EX(varptr, 2);
		}
		ZVAL_REF(arg, Z_REF_P(varptr));


		ZEND_VM_NEXT_OPCODE();
	}

	varptr = EX_VAR(opline->op1.var);
	if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(varptr) == IS_UNDEF)) {
		SAVE_OPLINE();
		ZVAL_UNDEFINED_OP1();
		ZVAL_NULL(arg);
		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
	}

	if (IS_CV == IS_CV) {
		ZVAL_COPY_DEREF(arg, varptr);
	} else /* if (IS_CV == IS_VAR) */ {
		if (UNEXPECTED(Z_ISREF_P(varptr))) {
			zend_refcounted *ref = Z_COUNTED_P(varptr);

			varptr = Z_REFVAL_P(varptr);
			ZVAL_COPY_VALUE(arg, varptr);
			if (UNEXPECTED(GC_DELREF(ref) == 0)) {
				efree_size(ref, sizeof(zend_reference));
			} else if (Z_OPT_REFCOUNTED_P(arg)) {
				Z_ADDREF_P(arg);
			}
		} else {
			ZVAL_COPY_VALUE(arg, varptr);
		}
	}

	ZEND_VM_NEXT_OPCODE();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_UNUSED_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *expr_ptr, new_expr;

	SAVE_OPLINE();
	if ((IS_CV == IS_VAR || IS_CV == IS_CV) &&
	    UNEXPECTED(opline->extended_value & ZEND_ARRAY_ELEMENT_REF)) {
		expr_ptr = _get_zval_ptr_cv_BP_VAR_W(opline->op1.var EXECUTE_DATA_CC);
		if (Z_ISREF_P(expr_ptr)) {
			Z_ADDREF_P(expr_ptr);
		} else {
			ZVAL_MAKE_REF_EX(expr_ptr, 2);
		}


	} else {
		expr_ptr = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
		if (IS_CV == IS_TMP_VAR) {
			/* pass */
		} else if (IS_CV == IS_CONST) {
			Z_TRY_ADDREF_P(expr_ptr);
		} else if (IS_CV == IS_CV) {
			ZVAL_DEREF(expr_ptr);
			Z_TRY_ADDREF_P(expr_ptr);
		} else /* if (IS_CV == IS_VAR) */ {
			if (UNEXPECTED(Z_ISREF_P(expr_ptr))) {
				zend_refcounted *ref = Z_COUNTED_P(expr_ptr);

				expr_ptr = Z_REFVAL_P(expr_ptr);
				if (UNEXPECTED(GC_DELREF(ref) == 0)) {
					ZVAL_COPY_VALUE(&new_expr, expr_ptr);
					expr_ptr = &new_expr;
					efree_size(ref, sizeof(zend_reference));
				} else if (Z_OPT_REFCOUNTED_P(expr_ptr)) {
					Z_ADDREF_P(expr_ptr);
				}
			}
		}
	}

	if (IS_UNUSED != IS_UNUSED) {
		zval *offset = NULL;
		zend_string *str;
		zend_ulong hval;

add_again:
		if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) {
			str = Z_STR_P(offset);
			if (IS_UNUSED != IS_CONST) {
				if (ZEND_HANDLE_NUMERIC(str, hval)) {
					goto num_index;
				}
			}
str_index:
			zend_hash_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), str, expr_ptr);
		} else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
			hval = Z_LVAL_P(offset);
num_index:
			zend_hash_index_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), hval, expr_ptr);
		} else if ((IS_UNUSED & (IS_VAR|IS_CV)) && EXPECTED(Z_TYPE_P(offset) == IS_REFERENCE)) {
			offset = Z_REFVAL_P(offset);
			goto add_again;
		} else if (UNEXPECTED(Z_TYPE_P(offset) == IS_NULL)) {
			zval tmp;
			if (IS_CV == IS_CV || IS_CV == IS_VAR) {
				ZVAL_COPY(&tmp, expr_ptr);
			}
			zend_error(E_DEPRECATED, "Using null as an array offset is deprecated, use an empty string instead");
			if (IS_CV == IS_CV || IS_CV == IS_VAR) {
				/* A userland error handler can do funky things to the expression, so reset it */
				zval_ptr_dtor(expr_ptr);
				ZVAL_COPY_VALUE(expr_ptr, &tmp);
			}
			if (UNEXPECTED(EG(exception))) {
				zval_ptr_dtor_nogc(expr_ptr);
				HANDLE_EXCEPTION();
			}
			str = ZSTR_EMPTY_ALLOC();
			goto str_index;
		} else if (Z_TYPE_P(offset) == IS_DOUBLE) {
			hval = zend_dval_to_lval_safe(Z_DVAL_P(offset));
			goto num_index;
		} else if (Z_TYPE_P(offset) == IS_FALSE) {
			hval = 0;
			goto num_index;
		} else if (Z_TYPE_P(offset) == IS_TRUE) {
			hval = 1;
			goto num_index;
		} else if (Z_TYPE_P(offset) == IS_RESOURCE) {
			zend_use_resource_as_offset(offset);
			hval = Z_RES_HANDLE_P(offset);
			goto num_index;
		} else if (IS_UNUSED == IS_CV && Z_TYPE_P(offset) == IS_UNDEF) {
			ZVAL_UNDEFINED_OP2();
			str = ZSTR_EMPTY_ALLOC();
			goto str_index;
		} else {
			zend_illegal_array_offset_access(offset);
			zval_ptr_dtor_nogc(expr_ptr);
		}


	} else {
		if (!zend_hash_next_index_insert(Z_ARRVAL_P(EX_VAR(opline->result.var)), expr_ptr)) {
			zend_cannot_add_element();
			zval_ptr_dtor_nogc(expr_ptr);
		}
	}
	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_INIT_ARRAY_SPEC_CV_UNUSED_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	zval *array;
	uint32_t size;
	USE_OPLINE

	SAVE_OPLINE();
	array = EX_VAR(opline->result.var);
	if (IS_CV != IS_UNUSED) {
		size = opline->extended_value >> ZEND_ARRAY_SIZE_SHIFT;
		ZVAL_ARR(array, zend_new_array(size));
		/* Explicitly initialize array as not-packed if flag is set */
		if (opline->extended_value & ZEND_ARRAY_NOT_PACKED) {
			zend_hash_real_init_mixed(Z_ARRVAL_P(array));
		}
		ZEND_VM_TAIL_CALL(ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_UNUSED_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
	} else {
		ZVAL_ARR(array, zend_new_array(0));
		ZEND_VM_NEXT_OPCODE();
	}
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_UNSET_CV_SPEC_CV_UNUSED_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *var = EX_VAR(opline->op1.var);

	if (Z_REFCOUNTED_P(var)) {
		zend_refcounted *garbage = Z_COUNTED_P(var);

		ZVAL_UNDEF(var);
		SAVE_OPLINE();
		GC_DTOR(garbage);
		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
	} else {
		ZVAL_UNDEF(var);
	}
	ZEND_VM_NEXT_OPCODE();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_UNSET_VAR_SPEC_CV_UNUSED_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *varname;
	zend_string *name, *tmp_name;
	HashTable *target_symbol_table;

	SAVE_OPLINE();

	varname = EX_VAR(opline->op1.var);

	if (IS_CV == IS_CONST) {
		name = Z_STR_P(varname);
	} else if (EXPECTED(Z_TYPE_P(varname) == IS_STRING)) {
		name = Z_STR_P(varname);
		tmp_name = NULL;
	} else {
		if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(varname) == IS_UNDEF)) {
			varname = ZVAL_UNDEFINED_OP1();
		}
		name = zval_try_get_tmp_string(varname, &tmp_name);
		if (UNEXPECTED(!name)) {


			HANDLE_EXCEPTION();
		}
	}

	target_symbol_table = zend_get_target_symbol_table(opline->extended_value EXECUTE_DATA_CC);
	zend_hash_del_ind(target_symbol_table, name);

	if (IS_CV != IS_CONST) {
		zend_tmp_string_release(tmp_name);
	}


	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

/* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CLASS_FETCH|CONST|VAR) */
static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_ISSET_ISEMPTY_CV_SPEC_CV_UNUSED_SET_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *value;

	value = EX_VAR(opline->op1.var);
	if (!(0)) {
		if (Z_TYPE_P(value) > IS_NULL &&
		    (!Z_ISREF_P(value) || Z_TYPE_P(Z_REFVAL_P(value)) != IS_NULL)) {
			ZEND_VM_SMART_BRANCH_TRUE();
		} else {
			ZEND_VM_SMART_BRANCH_FALSE();
		}
	} else {
		bool result;

		SAVE_OPLINE();
		result = !i_zend_is_true(value);
		ZEND_VM_SMART_BRANCH(result, 1);
	}
}

static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_ISSET_ISEMPTY_CV_SPEC_CV_UNUSED_EMPTY_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *value;

	value = EX_VAR(opline->op1.var);
	if (!(1)) {
		if (Z_TYPE_P(value) > IS_NULL &&
		    (!Z_ISREF_P(value) || Z_TYPE_P(Z_REFVAL_P(value)) != IS_NULL)) {
			ZEND_VM_SMART_BRANCH_TRUE();
		} else {
			ZEND_VM_SMART_BRANCH_FALSE();
		}
	} else {
		bool result;

		SAVE_OPLINE();
		result = !i_zend_is_true(value);
		ZEND_VM_SMART_BRANCH(result, 1);
	}
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_ISSET_ISEMPTY_VAR_SPEC_CV_UNUSED_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *value;
	bool result;
	zval *varname;
	zend_string *name, *tmp_name;
	HashTable *target_symbol_table;

	SAVE_OPLINE();
	varname = _get_zval_ptr_cv_BP_VAR_IS(opline->op1.var EXECUTE_DATA_CC);
	if (IS_CV == IS_CONST) {
		name = Z_STR_P(varname);
	} else {
		name = zval_get_tmp_string(varname, &tmp_name);
	}

	target_symbol_table = zend_get_target_symbol_table(opline->extended_value EXECUTE_DATA_CC);
	value = zend_hash_find_ex(target_symbol_table, name, IS_CV == IS_CONST);

	if (IS_CV != IS_CONST) {
		zend_tmp_string_release(tmp_name);
	}


	if (!value) {
		result = (opline->extended_value & ZEND_ISEMPTY);
	} else {
		if (Z_TYPE_P(value) == IS_INDIRECT) {
			value = Z_INDIRECT_P(value);
		}
		if (!(opline->extended_value & ZEND_ISEMPTY)) {
			if (Z_ISREF_P(value)) {
				value = Z_REFVAL_P(value);
			}
			result = Z_TYPE_P(value) > IS_NULL;
		} else {
			result = !i_zend_is_true(value);
		}
	}

	ZEND_VM_SMART_BRANCH(result, true);
}

/* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CLASS_FETCH|CONST|VAR) */
static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_INSTANCEOF_SPEC_CV_UNUSED_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *expr;
	bool result;

	SAVE_OPLINE();
	expr = EX_VAR(opline->op1.var);

try_instanceof:
	if (Z_TYPE_P(expr) == IS_OBJECT) {
		zend_class_entry *ce;

		if (IS_UNUSED == IS_CONST) {
			ce = CACHED_PTR(opline->extended_value);
			if (UNEXPECTED(ce == NULL)) {
				ce = zend_lookup_class_ex(Z_STR_P(RT_CONSTANT(opline, opline->op2)), Z_STR_P(RT_CONSTANT(opline, opline->op2) + 1), ZEND_FETCH_CLASS_NO_AUTOLOAD);
				if (EXPECTED(ce)) {
					CACHE_PTR(opline->extended_value, ce);
				}
			}
		} else if (IS_UNUSED == IS_UNUSED) {
			ce = zend_fetch_class(NULL, opline->op2.num);
			if (UNEXPECTED(ce == NULL)) {


				ZVAL_UNDEF(EX_VAR(opline->result.var));
				HANDLE_EXCEPTION();
			}
		} else {
			ce = Z_CE_P(EX_VAR(opline->op2.var));
		}
		result = ce && instanceof_function(Z_OBJCE_P(expr), ce);
	} else if ((IS_CV & (IS_VAR|IS_CV)) && Z_TYPE_P(expr) == IS_REFERENCE) {
		expr = Z_REFVAL_P(expr);
		goto try_instanceof;
	} else {
		if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(expr) == IS_UNDEF)) {
			ZVAL_UNDEFINED_OP1();
		}
		result = 0;
	}


	ZEND_VM_SMART_BRANCH(result, 1);
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_YIELD_SPEC_CV_UNUSED_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE

	zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C);

	SAVE_OPLINE();
	if (UNEXPECTED(generator->flags & ZEND_GENERATOR_FORCED_CLOSE)) {
		ZEND_VM_TAIL_CALL(zend_yield_in_closed_generator_helper_SPEC_TAILCALL(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
	}

	/* Destroy the previously yielded value */
	zval_ptr_dtor(&generator->value);

	/* Destroy the previously yielded key */
	zval_ptr_dtor(&generator->key);

	/* Set the new yielded value */
	if (IS_CV != IS_UNUSED) {
		if (UNEXPECTED(EX(func)->op_array.fn_flags & ZEND_ACC_RETURN_REFERENCE)) {
			/* Constants and temporary variables aren't yieldable by reference,
			 * but we still allow them with a notice. */
			if (IS_CV & (IS_CONST|IS_TMP_VAR)) {
				zval *value;

				zend_error(E_NOTICE, "Only variable references should be yielded by reference");

				value = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
				ZVAL_COPY_VALUE(&generator->value, value);
				if (IS_CV == IS_CONST) {
					if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
						Z_ADDREF(generator->value);
					}
				}
			} else {
				zval *value_ptr = _get_zval_ptr_cv_BP_VAR_W(opline->op1.var EXECUTE_DATA_CC);

				/* If a function call result is yielded and the function did
				 * not return by reference we throw a notice. */
				do {
					if (IS_CV == IS_VAR) {
						ZEND_ASSERT(value_ptr != &EG(uninitialized_zval));
						if (opline->extended_value == ZEND_RETURNS_FUNCTION
						 && !Z_ISREF_P(value_ptr)) {
							zend_error(E_NOTICE, "Only variable references should be yielded by reference");
							ZVAL_COPY(&generator->value, value_ptr);
							break;
						}
					}
					if (Z_ISREF_P(value_ptr)) {
						Z_ADDREF_P(value_ptr);
					} else {
						ZVAL_MAKE_REF_EX(value_ptr, 2);
					}
					ZVAL_REF(&generator->value, Z_REF_P(value_ptr));
				} while (0);


			}
		} else {
			zval *value = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);

			/* Consts, temporary variables and references need copying */
			if (IS_CV == IS_CONST) {
				ZVAL_COPY_VALUE(&generator->value, value);
				if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
					Z_ADDREF(generator->value);
				}
			} else if (IS_CV == IS_TMP_VAR) {
				ZVAL_COPY_VALUE(&generator->value, value);
			} else if ((IS_CV & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) {
				ZVAL_COPY(&generator->value, Z_REFVAL_P(value));


			} else {
				ZVAL_COPY_VALUE(&generator->value, value);
				if (IS_CV == IS_CV) {
					if (Z_OPT_REFCOUNTED_P(value)) Z_ADDREF_P(value);
				}
			}
		}
	} else {
		/* If no value was specified yield null */
		ZVAL_NULL(&generator->value);
	}

	/* Set the new yielded key */
	if (IS_UNUSED != IS_UNUSED) {
		zval *key = NULL;
		if ((IS_UNUSED & (IS_CV|IS_VAR)) && UNEXPECTED(Z_TYPE_P(key) == IS_REFERENCE)) {
			key = Z_REFVAL_P(key);
		}
		ZVAL_COPY(&generator->key, key);


		if (Z_TYPE(generator->key) == IS_LONG
		    && Z_LVAL(generator->key) > generator->largest_used_integer_key
		) {
			generator->largest_used_integer_key = Z_LVAL(generator->key);
		}
	} else {
		/* If no key was specified we use auto-increment keys */
		generator->largest_used_integer_key++;
		ZVAL_LONG(&generator->key, generator->largest_used_integer_key);
	}

	if (RETURN_VALUE_USED(opline)) {
		/* If the return value of yield is used set the send
		 * target and initialize it to NULL */
		generator->send_target = EX_VAR(opline->result.var);
		ZVAL_NULL(generator->send_target);
	} else {
		generator->send_target = NULL;
	}

	/* The GOTO VM uses a local opline variable. We need to set the opline
	 * variable in execute_data so we don't resume at an old position. */
	SAVE_OPLINE();

	ZEND_VM_RETURN();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_CHECK_VAR_SPEC_CV_UNUSED_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1 = EX_VAR(opline->op1.var);

	if (UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) {
		SAVE_OPLINE();
		ZVAL_UNDEFINED_OP1();
		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
	}
	ZEND_VM_NEXT_OPCODE();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_MAKE_REF_SPEC_CV_UNUSED_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1 = EX_VAR(opline->op1.var);

	if (IS_CV == IS_CV) {
		if (UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
			ZVAL_NEW_EMPTY_REF(op1);
			Z_SET_REFCOUNT_P(op1, 2);
			ZVAL_NULL(Z_REFVAL_P(op1));
			ZVAL_REF(EX_VAR(opline->result.var), Z_REF_P(op1));
		} else {
			if (Z_ISREF_P(op1)) {
				Z_ADDREF_P(op1);
			} else {
				ZVAL_MAKE_REF_EX(op1, 2);
			}
			ZVAL_REF(EX_VAR(opline->result.var), Z_REF_P(op1));
		}
	} else if (EXPECTED(Z_TYPE_P(op1) == IS_INDIRECT)) {
		op1 = Z_INDIRECT_P(op1);
		if (EXPECTED(!Z_ISREF_P(op1))) {
			ZVAL_MAKE_REF_EX(op1, 2);
		} else {
			GC_ADDREF(Z_REF_P(op1));
		}
		ZVAL_REF(EX_VAR(opline->result.var), Z_REF_P(op1));
	} else {
		ZVAL_COPY_VALUE(EX_VAR(opline->result.var), op1);
	}
	ZEND_VM_NEXT_OPCODE();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_COUNT_SPEC_CV_UNUSED_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1;
	zend_long count;

	SAVE_OPLINE();
	op1 = EX_VAR(opline->op1.var);

	while (1) {
		if (Z_TYPE_P(op1) == IS_ARRAY) {
			count = zend_hash_num_elements(Z_ARRVAL_P(op1));
			break;
		} else if (Z_TYPE_P(op1) == IS_OBJECT) {
			zend_object *zobj = Z_OBJ_P(op1);

			/* first, we check if the handler is defined */
			if (zobj->handlers->count_elements) {
				if (SUCCESS == zobj->handlers->count_elements(zobj, &count)) {
					break;
				}
				if (UNEXPECTED(EG(exception))) {
					count = 0;
					break;
				}
			}

			/* if not and the object implements Countable we call its count() method */
			if (zend_class_implements_interface(zobj->ce, zend_ce_countable)) {
				zval retval;

				zend_function *count_fn = zend_hash_find_ptr(&zobj->ce->function_table, ZSTR_KNOWN(ZEND_STR_COUNT));
				zend_call_known_instance_method_with_0_params(count_fn, zobj, &retval);
				count = zval_get_long(&retval);
				zval_ptr_dtor(&retval);
				break;
			}

			/* If There's no handler and it doesn't implement Countable then emit a TypeError */
		} else if ((IS_CV & (IS_VAR|IS_CV)) != 0 && Z_TYPE_P(op1) == IS_REFERENCE) {
			op1 = Z_REFVAL_P(op1);
			continue;
		} else if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
			ZVAL_UNDEFINED_OP1();
		}
		count = 0;
		zend_type_error("%s(): Argument #1 ($value) must be of type Countable|array, %s given", opline->extended_value ? "sizeof" : "count", zend_zval_value_name(op1));
		break;
	}

	ZVAL_LONG(EX_VAR(opline->result.var), count);


	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_COUNT_ARRAY_SPEC_CV_UNUSED_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zend_array *ht = Z_ARRVAL_P(EX_VAR(opline->op1.var));
	ZVAL_LONG(EX_VAR(opline->result.var), zend_hash_num_elements(ht));
	if (IS_CV & (IS_TMP_VAR|IS_VAR) && !(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE) && !GC_DELREF(ht)) {
		SAVE_OPLINE();
		zend_array_destroy(ht);
		if (EG(exception)) {
			HANDLE_EXCEPTION();
		}
	}
	ZEND_VM_NEXT_OPCODE();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_GET_CLASS_SPEC_CV_UNUSED_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE

	if (IS_CV == IS_UNUSED) {
		SAVE_OPLINE();
		if (UNEXPECTED(!EX(func)->common.scope)) {
			zend_throw_error(NULL, "get_class() without arguments must be called from within a class");
			ZVAL_UNDEF(EX_VAR(opline->result.var));
			HANDLE_EXCEPTION();
		} else {
			zend_error(E_DEPRECATED, "Calling get_class() without arguments is deprecated");
			ZVAL_STR_COPY(EX_VAR(opline->result.var), EX(func)->common.scope->name);
			if (UNEXPECTED(EG(exception))) {
				HANDLE_EXCEPTION();
			}
			ZEND_VM_NEXT_OPCODE();
		}
	} else {
		zval *op1;

		SAVE_OPLINE();
		op1 = EX_VAR(opline->op1.var);
		while (1) {
			if (Z_TYPE_P(op1) == IS_OBJECT) {
				ZVAL_STR_COPY(EX_VAR(opline->result.var), Z_OBJCE_P(op1)->name);
			} else if ((IS_CV & (IS_VAR|IS_CV)) != 0 && Z_TYPE_P(op1) == IS_REFERENCE) {
				op1 = Z_REFVAL_P(op1);
				continue;
			} else {
				if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
					ZVAL_UNDEFINED_OP1();
				}
				zend_type_error("get_class(): Argument #1 ($object) must be of type object, %s given", zend_zval_value_name(op1));
				ZVAL_UNDEF(EX_VAR(opline->result.var));
			}
			break;
		}


		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
	}
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_GET_TYPE_SPEC_CV_UNUSED_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1;
	zend_string *type;

	SAVE_OPLINE();
	op1 = _get_zval_ptr_cv_deref_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
	type = zend_zval_get_legacy_type(op1);
	if (EXPECTED(type)) {
		ZVAL_INTERNED_STR(EX_VAR(opline->result.var), type);
	} else {
		ZVAL_STRING(EX_VAR(opline->result.var), "unknown type");
	}


	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_SEND_VAR_EX_SIMPLE_SPEC_CV_UNUSED_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *varptr, *arg;
	uint32_t arg_num = opline->op2.num;

	if (QUICK_ARG_SHOULD_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
		ZEND_VM_TAIL_CALL(ZEND_SEND_REF_SPEC_CV_UNUSED_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
	}

	varptr = EX_VAR(opline->op1.var);
	arg = ZEND_CALL_VAR(EX(call), opline->result.var);

	if (IS_CV == IS_CV) {
		ZVAL_COPY(arg, varptr);
	} else /* if (IS_CV == IS_VAR) */ {
		ZVAL_COPY_VALUE(arg, varptr);
	}

	ZEND_VM_NEXT_OPCODE();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_DIV_SPEC_CV_CV_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;

	SAVE_OPLINE();
	op1 = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
	op2 = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
	div_function(EX_VAR(opline->result.var), op1, op2);




	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_POW_SPEC_CV_CV_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;

	SAVE_OPLINE();
	op1 = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
	op2 = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
	pow_function(EX_VAR(opline->result.var), op1, op2);




	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_CONCAT_SPEC_CV_CV_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;

	op1 = EX_VAR(opline->op1.var);
	op2 = EX_VAR(opline->op2.var);

	if ((IS_CV == IS_CONST || EXPECTED(Z_TYPE_P(op1) == IS_STRING)) &&
	    (IS_CV == IS_CONST || EXPECTED(Z_TYPE_P(op2) == IS_STRING))) {
		zend_string *op1_str = Z_STR_P(op1);
		zend_string *op2_str = Z_STR_P(op2);
		zend_string *str;
		uint32_t flags = ZSTR_GET_COPYABLE_CONCAT_PROPERTIES_BOTH(op1_str, op2_str);

		if (IS_CV != IS_CONST && UNEXPECTED(ZSTR_LEN(op1_str) == 0)) {
			if (IS_CV == IS_CONST || IS_CV == IS_CV) {
				ZVAL_STR_COPY(EX_VAR(opline->result.var), op2_str);
			} else {
				ZVAL_STR(EX_VAR(opline->result.var), op2_str);
			}
			if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
				zend_string_release_ex(op1_str, 0);
			}
		} else if (IS_CV != IS_CONST && UNEXPECTED(ZSTR_LEN(op2_str) == 0)) {
			if (IS_CV == IS_CONST || IS_CV == IS_CV) {
				ZVAL_STR_COPY(EX_VAR(opline->result.var), op1_str);
			} else {
				ZVAL_STR(EX_VAR(opline->result.var), op1_str);
			}
			if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
				zend_string_release_ex(op2_str, 0);
			}
		} else if (IS_CV != IS_CONST && IS_CV != IS_CV &&
		    !ZSTR_IS_INTERNED(op1_str) && GC_REFCOUNT(op1_str) == 1) {
			size_t len = ZSTR_LEN(op1_str);

			if (UNEXPECTED(len > ZSTR_MAX_LEN - ZSTR_LEN(op2_str))) {
				zend_error_noreturn(E_ERROR, "Integer overflow in memory allocation");
			}
			str = zend_string_extend(op1_str, len + ZSTR_LEN(op2_str), 0);
			memcpy(ZSTR_VAL(str) + len, ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
			GC_ADD_FLAGS(str, flags);
			ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
			if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
				zend_string_release_ex(op2_str, 0);
			}
		} else {
			str = zend_string_alloc(ZSTR_LEN(op1_str) + ZSTR_LEN(op2_str), 0);
			memcpy(ZSTR_VAL(str), ZSTR_VAL(op1_str), ZSTR_LEN(op1_str));
			memcpy(ZSTR_VAL(str) + ZSTR_LEN(op1_str), ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
			GC_ADD_FLAGS(str, flags);
			ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
			if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
				zend_string_release_ex(op1_str, 0);
			}
			if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
				zend_string_release_ex(op2_str, 0);
			}
		}
		ZEND_VM_NEXT_OPCODE();
	} else {
		SAVE_OPLINE();

		if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
			op1 = ZVAL_UNDEFINED_OP1();
		}
		if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(op2) == IS_UNDEF)) {
			op2 = ZVAL_UNDEFINED_OP2();
		}
		concat_function(EX_VAR(opline->result.var), op1, op2);




		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
	}
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_IS_IDENTICAL_SPEC_CV_CV_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;
	bool result;

	SAVE_OPLINE();
	op1 = _get_zval_ptr_cv_deref_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
	op2 = _get_zval_ptr_cv_deref_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
	result = fast_is_identical_function(op1, op2);




	ZEND_VM_SMART_BRANCH(result, 1);
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_IS_NOT_IDENTICAL_SPEC_CV_CV_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;
	bool result;

	SAVE_OPLINE();
	op1 = _get_zval_ptr_cv_deref_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
	op2 = _get_zval_ptr_cv_deref_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
	result = fast_is_not_identical_function(op1, op2);




	ZEND_VM_SMART_BRANCH(result, 1);
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_IS_EQUAL_SPEC_CV_CV_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;
	double d1, d2;

	op1 = EX_VAR(opline->op1.var);
	op2 = EX_VAR(opline->op2.var);
	if (1 && IS_CV == IS_CONST && IS_CV == IS_CONST) {
		/* pass */
	} else if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
		if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
			if (EXPECTED(Z_LVAL_P(op1) == Z_LVAL_P(op2))) {
is_equal_true:
				ZEND_VM_SMART_BRANCH_TRUE_NONE();
			} else {
is_equal_false:
				ZEND_VM_SMART_BRANCH_FALSE_NONE();
			}
		} else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
			d1 = (double)Z_LVAL_P(op1);
			d2 = Z_DVAL_P(op2);
			goto is_equal_double;
		}
	} else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) {
		if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
			d1 = Z_DVAL_P(op1);
			d2 = Z_DVAL_P(op2);
is_equal_double:
			if (d1 == d2) {
				goto is_equal_true;
			} else {
				goto is_equal_false;
			}
		} else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
			d1 = Z_DVAL_P(op1);
			d2 = (double)Z_LVAL_P(op2);
			goto is_equal_double;
		}
	} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
		if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
			bool result = zend_fast_equal_strings(Z_STR_P(op1), Z_STR_P(op2));
			if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
				zval_ptr_dtor_str(op1);
			}
			if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
				zval_ptr_dtor_str(op2);
			}
			if (result) {
				goto is_equal_true;
			} else {
				goto is_equal_false;
			}
		}
	}
	ZEND_VM_DISPATCH_TO_HELPER(zend_is_equal_helper_SPEC_TAILCALL(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_EX op1, op2));
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_IS_EQUAL_SPEC_CV_CV_JMPZ_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;
	double d1, d2;

	op1 = EX_VAR(opline->op1.var);
	op2 = EX_VAR(opline->op2.var);
	if (1 && IS_CV == IS_CONST && IS_CV == IS_CONST) {
		/* pass */
	} else if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
		if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
			if (EXPECTED(Z_LVAL_P(op1) == Z_LVAL_P(op2))) {
is_equal_true:
				ZEND_VM_SMART_BRANCH_TRUE_JMPZ();
			} else {
is_equal_false:
				ZEND_VM_SMART_BRANCH_FALSE_JMPZ();
			}
		} else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
			d1 = (double)Z_LVAL_P(op1);
			d2 = Z_DVAL_P(op2);
			goto is_equal_double;
		}
	} else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) {
		if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
			d1 = Z_DVAL_P(op1);
			d2 = Z_DVAL_P(op2);
is_equal_double:
			if (d1 == d2) {
				goto is_equal_true;
			} else {
				goto is_equal_false;
			}
		} else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
			d1 = Z_DVAL_P(op1);
			d2 = (double)Z_LVAL_P(op2);
			goto is_equal_double;
		}
	} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
		if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
			bool result = zend_fast_equal_strings(Z_STR_P(op1), Z_STR_P(op2));
			if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
				zval_ptr_dtor_str(op1);
			}
			if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
				zval_ptr_dtor_str(op2);
			}
			if (result) {
				goto is_equal_true;
			} else {
				goto is_equal_false;
			}
		}
	}
	ZEND_VM_DISPATCH_TO_HELPER(zend_is_equal_helper_SPEC_TAILCALL(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_EX op1, op2));
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_IS_EQUAL_SPEC_CV_CV_JMPNZ_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;
	double d1, d2;

	op1 = EX_VAR(opline->op1.var);
	op2 = EX_VAR(opline->op2.var);
	if (1 && IS_CV == IS_CONST && IS_CV == IS_CONST) {
		/* pass */
	} else if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
		if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
			if (EXPECTED(Z_LVAL_P(op1) == Z_LVAL_P(op2))) {
is_equal_true:
				ZEND_VM_SMART_BRANCH_TRUE_JMPNZ();
			} else {
is_equal_false:
				ZEND_VM_SMART_BRANCH_FALSE_JMPNZ();
			}
		} else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
			d1 = (double)Z_LVAL_P(op1);
			d2 = Z_DVAL_P(op2);
			goto is_equal_double;
		}
	} else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) {
		if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
			d1 = Z_DVAL_P(op1);
			d2 = Z_DVAL_P(op2);
is_equal_double:
			if (d1 == d2) {
				goto is_equal_true;
			} else {
				goto is_equal_false;
			}
		} else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
			d1 = Z_DVAL_P(op1);
			d2 = (double)Z_LVAL_P(op2);
			goto is_equal_double;
		}
	} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
		if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
			bool result = zend_fast_equal_strings(Z_STR_P(op1), Z_STR_P(op2));
			if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
				zval_ptr_dtor_str(op1);
			}
			if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
				zval_ptr_dtor_str(op2);
			}
			if (result) {
				goto is_equal_true;
			} else {
				goto is_equal_false;
			}
		}
	}
	ZEND_VM_DISPATCH_TO_HELPER(zend_is_equal_helper_SPEC_TAILCALL(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_EX op1, op2));
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_IS_NOT_EQUAL_SPEC_CV_CV_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;
	double d1, d2;

	op1 = EX_VAR(opline->op1.var);
	op2 = EX_VAR(opline->op2.var);
	if (1 && IS_CV == IS_CONST && IS_CV == IS_CONST) {
		/* pass */
	} else if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
		if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
			if (EXPECTED(Z_LVAL_P(op1) != Z_LVAL_P(op2))) {
is_not_equal_true:
				ZEND_VM_SMART_BRANCH_TRUE_NONE();
			} else {
is_not_equal_false:
				ZEND_VM_SMART_BRANCH_FALSE_NONE();
			}
		} else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
			d1 = (double)Z_LVAL_P(op1);
			d2 = Z_DVAL_P(op2);
			goto is_not_equal_double;
		}
	} else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) {
		if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
			d1 = Z_DVAL_P(op1);
			d2 = Z_DVAL_P(op2);
is_not_equal_double:
			if (d1 != d2) {
				goto is_not_equal_true;
			} else {
				goto is_not_equal_false;
			}
		} else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
			d1 = Z_DVAL_P(op1);
			d2 = (double)Z_LVAL_P(op2);
			goto is_not_equal_double;
		}
	} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
		if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
			bool result = zend_fast_equal_strings(Z_STR_P(op1), Z_STR_P(op2));
			if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
				zval_ptr_dtor_str(op1);
			}
			if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
				zval_ptr_dtor_str(op2);
			}
			if (!result) {
				goto is_not_equal_true;
			} else {
				goto is_not_equal_false;
			}
		}
	}
	ZEND_VM_DISPATCH_TO_HELPER(zend_is_not_equal_helper_SPEC_TAILCALL(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_EX op1, op2));
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_IS_NOT_EQUAL_SPEC_CV_CV_JMPZ_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;
	double d1, d2;

	op1 = EX_VAR(opline->op1.var);
	op2 = EX_VAR(opline->op2.var);
	if (1 && IS_CV == IS_CONST && IS_CV == IS_CONST) {
		/* pass */
	} else if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
		if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
			if (EXPECTED(Z_LVAL_P(op1) != Z_LVAL_P(op2))) {
is_not_equal_true:
				ZEND_VM_SMART_BRANCH_TRUE_JMPZ();
			} else {
is_not_equal_false:
				ZEND_VM_SMART_BRANCH_FALSE_JMPZ();
			}
		} else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
			d1 = (double)Z_LVAL_P(op1);
			d2 = Z_DVAL_P(op2);
			goto is_not_equal_double;
		}
	} else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) {
		if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
			d1 = Z_DVAL_P(op1);
			d2 = Z_DVAL_P(op2);
is_not_equal_double:
			if (d1 != d2) {
				goto is_not_equal_true;
			} else {
				goto is_not_equal_false;
			}
		} else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
			d1 = Z_DVAL_P(op1);
			d2 = (double)Z_LVAL_P(op2);
			goto is_not_equal_double;
		}
	} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
		if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
			bool result = zend_fast_equal_strings(Z_STR_P(op1), Z_STR_P(op2));
			if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
				zval_ptr_dtor_str(op1);
			}
			if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
				zval_ptr_dtor_str(op2);
			}
			if (!result) {
				goto is_not_equal_true;
			} else {
				goto is_not_equal_false;
			}
		}
	}
	ZEND_VM_DISPATCH_TO_HELPER(zend_is_not_equal_helper_SPEC_TAILCALL(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_EX op1, op2));
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_IS_NOT_EQUAL_SPEC_CV_CV_JMPNZ_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;
	double d1, d2;

	op1 = EX_VAR(opline->op1.var);
	op2 = EX_VAR(opline->op2.var);
	if (1 && IS_CV == IS_CONST && IS_CV == IS_CONST) {
		/* pass */
	} else if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
		if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
			if (EXPECTED(Z_LVAL_P(op1) != Z_LVAL_P(op2))) {
is_not_equal_true:
				ZEND_VM_SMART_BRANCH_TRUE_JMPNZ();
			} else {
is_not_equal_false:
				ZEND_VM_SMART_BRANCH_FALSE_JMPNZ();
			}
		} else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
			d1 = (double)Z_LVAL_P(op1);
			d2 = Z_DVAL_P(op2);
			goto is_not_equal_double;
		}
	} else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) {
		if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
			d1 = Z_DVAL_P(op1);
			d2 = Z_DVAL_P(op2);
is_not_equal_double:
			if (d1 != d2) {
				goto is_not_equal_true;
			} else {
				goto is_not_equal_false;
			}
		} else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
			d1 = Z_DVAL_P(op1);
			d2 = (double)Z_LVAL_P(op2);
			goto is_not_equal_double;
		}
	} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
		if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
			bool result = zend_fast_equal_strings(Z_STR_P(op1), Z_STR_P(op2));
			if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
				zval_ptr_dtor_str(op1);
			}
			if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
				zval_ptr_dtor_str(op2);
			}
			if (!result) {
				goto is_not_equal_true;
			} else {
				goto is_not_equal_false;
			}
		}
	}
	ZEND_VM_DISPATCH_TO_HELPER(zend_is_not_equal_helper_SPEC_TAILCALL(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_EX op1, op2));
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_SPACESHIP_SPEC_CV_CV_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;

	SAVE_OPLINE();
	op1 = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
	op2 = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
	compare_function(EX_VAR(opline->result.var), op1, op2);




	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_BOOL_XOR_SPEC_CV_CV_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;

	SAVE_OPLINE();
	op1 = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
	op2 = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
	boolean_xor_function(EX_VAR(opline->result.var), op1, op2);




	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_ASSIGN_OBJ_OP_SPEC_CV_CV_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *object;
	zval *property;
	zval *value;
	zval *zptr;
	void *_cache_slot[3] = {0};
	void **cache_slot;
	zend_property_info *prop_info;
	zend_object *zobj;
	zend_string *name, *tmp_name;

	SAVE_OPLINE();
	object = EX_VAR(opline->op1.var);
	property = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);

	do {
		value = get_op_data_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1);

		if (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
			if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
				object = Z_REFVAL_P(object);
				goto assign_op_object;
			}
			if (IS_CV == IS_CV
			 && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
				ZVAL_UNDEFINED_OP1();
			}
			zend_throw_non_object_error(object, property OPLINE_CC EXECUTE_DATA_CC);
			break;
		}

assign_op_object:
		/* here we are sure we are dealing with an object */
		zobj = Z_OBJ_P(object);
		if (IS_CV == IS_CONST) {
			name = Z_STR_P(property);
		} else {
			name = zval_try_get_tmp_string(property, &tmp_name);
			if (UNEXPECTED(!name)) {
				UNDEF_RESULT();
				break;
			}
		}
		cache_slot = (IS_CV == IS_CONST) ? CACHE_ADDR((opline+1)->extended_value) : _cache_slot;
		if (EXPECTED((zptr = zobj->handlers->get_property_ptr_ptr(zobj, name, BP_VAR_RW, cache_slot)) != NULL)) {
			if (UNEXPECTED(Z_ISERROR_P(zptr))) {
				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
					ZVAL_NULL(EX_VAR(opline->result.var));
				}
			} else {
				zend_reference *ref;

				do {
					if (UNEXPECTED(Z_ISREF_P(zptr))) {
						ref = Z_REF_P(zptr);
						zptr = Z_REFVAL_P(zptr);
						if (UNEXPECTED(ZEND_REF_HAS_TYPE_SOURCES(ref))) {
							zend_binary_assign_op_typed_ref(ref, value OPLINE_CC EXECUTE_DATA_CC);
							break;
						}
					}

					prop_info = (zend_property_info*)CACHED_PTR_EX(cache_slot + 2);
					if (prop_info && ZEND_TYPE_IS_SET(prop_info->type)) {
						/* special case for typed properties */
						zend_binary_assign_op_typed_prop(prop_info, zptr, value OPLINE_CC EXECUTE_DATA_CC);
					} else {
						zend_binary_op(zptr, zptr, value OPLINE_CC);
					}
				} while (0);

				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
					ZVAL_COPY(EX_VAR(opline->result.var), zptr);
				}
			}
		} else {
			zend_assign_op_overloaded_property(zobj, name, cache_slot, value OPLINE_CC EXECUTE_DATA_CC);
		}
		if (IS_CV != IS_CONST) {
			zend_tmp_string_release(tmp_name);
		}
	} while (0);

	FREE_OP((opline+1)->op1_type, (opline+1)->op1.var);




	/* assign_obj has two opcodes! */
	ZEND_VM_NEXT_OPCODE_EX(1, 2);
}

/* No specialization for op_types (CONST|TMP|VAR|CV, UNUSED|CONST|TMPVAR) */
static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_ASSIGN_DIM_OP_SPEC_CV_CV_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *var_ptr;
	zval *value, *container, *dim;
	HashTable *ht;

	SAVE_OPLINE();
	container = EX_VAR(opline->op1.var);

	if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
assign_dim_op_array:
		SEPARATE_ARRAY(container);
		ht = Z_ARRVAL_P(container);
assign_dim_op_new_array:
		dim = EX_VAR(opline->op2.var);
		if (IS_CV == IS_UNUSED) {
			var_ptr = zend_hash_next_index_insert(ht, &EG(uninitialized_zval));
			if (UNEXPECTED(!var_ptr)) {
				zend_cannot_add_element();
				goto assign_dim_op_ret_null;
			}
		} else {
			if (IS_CV == IS_CONST) {
				var_ptr = zend_fetch_dimension_address_inner_RW_CONST(ht, dim EXECUTE_DATA_CC);
			} else {
				var_ptr = zend_fetch_dimension_address_inner_RW(ht, dim EXECUTE_DATA_CC);
			}
			if (UNEXPECTED(!var_ptr)) {
				goto assign_dim_op_ret_null;
			}
		}

		value = get_op_data_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1);

		do {
			if (IS_CV != IS_UNUSED && UNEXPECTED(Z_ISREF_P(var_ptr))) {
				zend_reference *ref = Z_REF_P(var_ptr);
				var_ptr = Z_REFVAL_P(var_ptr);
				if (UNEXPECTED(ZEND_REF_HAS_TYPE_SOURCES(ref))) {
					zend_binary_assign_op_typed_ref(ref, value OPLINE_CC EXECUTE_DATA_CC);
					break;
				}
			}
			zend_binary_op(var_ptr, var_ptr, value OPLINE_CC);
		} while (0);

		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
			ZVAL_COPY(EX_VAR(opline->result.var), var_ptr);
		}
		FREE_OP((opline+1)->op1_type, (opline+1)->op1.var);
	} else {
		if (EXPECTED(Z_ISREF_P(container))) {
			container = Z_REFVAL_P(container);
			if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
				goto assign_dim_op_array;
			}
		}

		if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
			zend_object *obj = Z_OBJ_P(container);

			dim = EX_VAR(opline->op2.var);
			if (IS_CV == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
				dim++;
			}
			zend_binary_assign_op_obj_dim(obj, dim OPLINE_CC EXECUTE_DATA_CC);
		} else if (EXPECTED(Z_TYPE_P(container) <= IS_FALSE)) {
			uint8_t old_type;

			if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(container) == IS_UNDEF)) {
				ZVAL_UNDEFINED_OP1();
			}
			ht = zend_new_array(8);
			old_type = Z_TYPE_P(container);
			ZVAL_ARR(container, ht);
			if (UNEXPECTED(old_type == IS_FALSE)) {
				GC_ADDREF(ht);
				zend_false_to_array_deprecated();
				if (UNEXPECTED(GC_DELREF(ht) == 0)) {
					zend_array_destroy(ht);
					goto assign_dim_op_ret_null;
				}
			}
			goto assign_dim_op_new_array;
		} else {
			dim = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
			zend_binary_assign_op_dim_slow(container, dim OPLINE_CC EXECUTE_DATA_CC);
assign_dim_op_ret_null:
			FREE_OP((opline+1)->op1_type, (opline+1)->op1.var);
			if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
				ZVAL_NULL(EX_VAR(opline->result.var));
			}
		}
	}




	ZEND_VM_NEXT_OPCODE_EX(1, 2);
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_ASSIGN_OP_SPEC_CV_CV_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *var_ptr;
	zval *value;

	SAVE_OPLINE();
	value = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
	var_ptr = _get_zval_ptr_cv_BP_VAR_RW(opline->op1.var EXECUTE_DATA_CC);

	do {
		if (UNEXPECTED(Z_TYPE_P(var_ptr) == IS_REFERENCE)) {
			zend_reference *ref = Z_REF_P(var_ptr);
			var_ptr = Z_REFVAL_P(var_ptr);
			if (UNEXPECTED(ZEND_REF_HAS_TYPE_SOURCES(ref))) {
				zend_binary_assign_op_typed_ref(ref, value OPLINE_CC EXECUTE_DATA_CC);
				break;
			}
		}
		zend_binary_op(var_ptr, var_ptr, value OPLINE_CC);
	} while (0);

	if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
		ZVAL_COPY(EX_VAR(opline->result.var), var_ptr);
	}




	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_PRE_INC_OBJ_SPEC_CV_CV_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *object;
	zval *property;
	zval *zptr;
	void *_cache_slot[3] = {0};
	void **cache_slot;
	zend_property_info *prop_info;
	zend_object *zobj;
	zend_string *name, *tmp_name;

	SAVE_OPLINE();
	object = EX_VAR(opline->op1.var);
	property = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);

	do {
		if (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
			if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
				object = Z_REFVAL_P(object);
				goto pre_incdec_object;
			}
			if (IS_CV == IS_CV
			 && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
				ZVAL_UNDEFINED_OP1();
			}
			zend_throw_non_object_error(object, property OPLINE_CC EXECUTE_DATA_CC);
			break;
		}

pre_incdec_object:
		/* here we are sure we are dealing with an object */
		zobj = Z_OBJ_P(object);
		if (IS_CV == IS_CONST) {
			name = Z_STR_P(property);
		} else {
			name = zval_try_get_tmp_string(property, &tmp_name);
			if (UNEXPECTED(!name)) {
				UNDEF_RESULT();
				break;
			}
		}
		cache_slot = (IS_CV == IS_CONST) ? CACHE_ADDR(opline->extended_value) : _cache_slot;
		if (EXPECTED((zptr = zobj->handlers->get_property_ptr_ptr(zobj, name, BP_VAR_RW, cache_slot)) != NULL)) {
			if (UNEXPECTED(Z_ISERROR_P(zptr))) {
				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
					ZVAL_NULL(EX_VAR(opline->result.var));
				}
			} else {
				prop_info = (zend_property_info *) CACHED_PTR_EX(cache_slot + 2);
				zend_pre_incdec_property_zval(zptr,
					prop_info && ZEND_TYPE_IS_SET(prop_info->type) ? prop_info : NULL OPLINE_CC EXECUTE_DATA_CC);
			}
		} else {
			zend_pre_incdec_overloaded_property(zobj, name, cache_slot OPLINE_CC EXECUTE_DATA_CC);
		}
		if (IS_CV != IS_CONST) {
			zend_tmp_string_release(tmp_name);
		}
	} while (0);




	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_POST_INC_OBJ_SPEC_CV_CV_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *object;
	zval *property;
	zval *zptr;
	void *_cache_slot[3] = {0};
	void **cache_slot;
	zend_property_info *prop_info;
	zend_object *zobj;
	zend_string *name, *tmp_name;

	SAVE_OPLINE();
	object = EX_VAR(opline->op1.var);
	property = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);

	do {
		if (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
			if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
				object = Z_REFVAL_P(object);
				goto post_incdec_object;
			}
			if (IS_CV == IS_CV
			 && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
				ZVAL_UNDEFINED_OP1();
			}
			zend_throw_non_object_error(object, property OPLINE_CC EXECUTE_DATA_CC);
			break;
		}

post_incdec_object:
		/* here we are sure we are dealing with an object */
		zobj = Z_OBJ_P(object);
		if (IS_CV == IS_CONST) {
			name = Z_STR_P(property);
		} else {
			name = zval_try_get_tmp_string(property, &tmp_name);
			if (UNEXPECTED(!name)) {
				ZVAL_UNDEF(EX_VAR(opline->result.var));
				break;
			}
		}
		cache_slot = (IS_CV == IS_CONST) ? CACHE_ADDR(opline->extended_value) : _cache_slot;
		if (EXPECTED((zptr = zobj->handlers->get_property_ptr_ptr(zobj, name, BP_VAR_RW, cache_slot)) != NULL)) {
			if (UNEXPECTED(Z_ISERROR_P(zptr))) {
				ZVAL_NULL(EX_VAR(opline->result.var));
			} else {
				prop_info = (zend_property_info*)CACHED_PTR_EX(cache_slot + 2);
				zend_post_incdec_property_zval(zptr,
					prop_info && ZEND_TYPE_IS_SET(prop_info->type) ? prop_info : NULL OPLINE_CC EXECUTE_DATA_CC);
			}
		} else {
			zend_post_incdec_overloaded_property(zobj, name, cache_slot OPLINE_CC EXECUTE_DATA_CC);
		}
		if (IS_CV != IS_CONST) {
			zend_tmp_string_release(tmp_name);
		}
	} while (0);




	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_FETCH_DIM_R_SPEC_CV_CV_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *container, *dim, *value;

	SAVE_OPLINE();
	container = EX_VAR(opline->op1.var);
	dim = EX_VAR(opline->op2.var);
	if (IS_CV != IS_CONST) {
		if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
fetch_dim_r_array:
			value = zend_fetch_dimension_address_inner(Z_ARRVAL_P(container), dim, IS_CV, BP_VAR_R EXECUTE_DATA_CC);
			ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
		} else if (EXPECTED(Z_TYPE_P(container) == IS_REFERENCE)) {
			container = Z_REFVAL_P(container);
			if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
				goto fetch_dim_r_array;
			} else {
				goto fetch_dim_r_slow;
			}
		} else {
fetch_dim_r_slow:
			if (IS_CV == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
				dim++;
			}
			zend_fetch_dimension_address_read_R_slow(container, dim OPLINE_CC EXECUTE_DATA_CC);
		}
	} else {
		zend_fetch_dimension_address_read_R(container, dim, IS_CV OPLINE_CC EXECUTE_DATA_CC);
	}




	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_FETCH_DIM_W_SPEC_CV_CV_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *container;

	SAVE_OPLINE();
	container = EX_VAR(opline->op1.var);
	zend_fetch_dimension_address_W(container, EX_VAR(opline->op2.var), IS_CV OPLINE_CC EXECUTE_DATA_CC);


	if (IS_CV == IS_VAR) {
		FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
	}
	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_FETCH_DIM_RW_SPEC_CV_CV_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *container;

	SAVE_OPLINE();
	container = EX_VAR(opline->op1.var);
	zend_fetch_dimension_address_RW(container, EX_VAR(opline->op2.var), IS_CV OPLINE_CC EXECUTE_DATA_CC);


	if (IS_CV == IS_VAR) {
		FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
	}
	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_FETCH_DIM_IS_SPEC_CV_CV_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *container;

	SAVE_OPLINE();
	container = EX_VAR(opline->op1.var);
	zend_fetch_dimension_address_read_IS(container, EX_VAR(opline->op2.var), IS_CV OPLINE_CC EXECUTE_DATA_CC);




	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_CV_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
#if 0
	USE_OPLINE
#endif

	if (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) {
		if ((IS_CV & (IS_CONST|IS_TMP_VAR))) {
			ZEND_VM_TAIL_CALL(zend_use_tmp_in_write_context_helper_SPEC_TAILCALL(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
		}
		ZEND_VM_TAIL_CALL(ZEND_FETCH_DIM_W_SPEC_CV_CV_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
	} else {
		if (IS_CV == IS_UNUSED) {
			ZEND_VM_TAIL_CALL(zend_use_undef_in_read_context_helper_SPEC_TAILCALL(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
		}
		ZEND_VM_TAIL_CALL(ZEND_FETCH_DIM_R_SPEC_CV_CV_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
	}
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_FETCH_DIM_UNSET_SPEC_CV_CV_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *container;

	SAVE_OPLINE();
	container = EX_VAR(opline->op1.var);
	zend_fetch_dimension_address_UNSET(container, EX_VAR(opline->op2.var), IS_CV OPLINE_CC EXECUTE_DATA_CC);


	if (IS_CV == IS_VAR) {
		FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
	}
	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_FETCH_OBJ_R_SPEC_CV_CV_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *container;
	void **cache_slot = NULL;

	SAVE_OPLINE();
	container = EX_VAR(opline->op1.var);

	if (IS_CV == IS_CONST ||
	    (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
		do {
			if ((IS_CV & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
				container = Z_REFVAL_P(container);
				if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
					break;
				}
			}
			if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
				ZVAL_UNDEFINED_OP1();
			}
			zend_wrong_property_read(container, _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC));
			ZVAL_NULL(EX_VAR(opline->result.var));
			goto fetch_obj_r_finish;
		} while (0);
	}

	/* here we are sure we are dealing with an object */
	do {
		zend_object *zobj = Z_OBJ_P(container);
		zend_string *name, *tmp_name;
		zval *retval;

		if (IS_CV == IS_CONST) {
			cache_slot = CACHE_ADDR(opline->extended_value & ~ZEND_FETCH_REF /* FUNC_ARG fetch may contain it */);

			if (EXPECTED(zobj->ce == CACHED_PTR_EX(cache_slot))) {
				uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);

				if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
fetch_obj_r_simple:
					retval = OBJ_PROP(zobj, prop_offset);
					if (EXPECTED(Z_TYPE_INFO_P(retval) != IS_UNDEF)) {
						if (0 || (IS_CV & (IS_TMP_VAR|IS_VAR)) != 0) {
							goto fetch_obj_r_copy;
						} else {
fetch_obj_r_fast_copy:
							ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
							ZEND_VM_NEXT_OPCODE();
						}
					}
				} else if (UNEXPECTED(IS_HOOKED_PROPERTY_OFFSET(prop_offset))) {
					zend_property_info *prop_info = CACHED_PTR_EX(cache_slot + 2);
					if (ZEND_IS_PROPERTY_HOOK_SIMPLE_READ(prop_offset)) {
						prop_offset = prop_info->offset;
						goto fetch_obj_r_simple;
					} else if (EXPECTED(ZEND_IS_PROPERTY_HOOK_SIMPLE_GET(prop_offset))) {
						zend_function *hook = prop_info->hooks[ZEND_PROPERTY_HOOK_GET];
						ZEND_ASSERT(hook->type == ZEND_USER_FUNCTION);
						ZEND_ASSERT(RUN_TIME_CACHE(&hook->op_array));

						uint32_t call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_HAS_THIS;
						if (IS_CV & IS_CV) {
							GC_ADDREF(zobj);
						}
						if (IS_CV & (IS_CV|IS_VAR|IS_TMP_VAR)) {
							call_info |= ZEND_CALL_RELEASE_THIS;
						}
						zend_execute_data *call = zend_vm_stack_push_call_frame(call_info, hook, 0, zobj);
						call->prev_execute_data = execute_data;
						call->call = NULL;
						call->return_value = EX_VAR(opline->result.var);
						call->run_time_cache = RUN_TIME_CACHE(&hook->op_array);

						execute_data = call;
						EG(current_execute_data) = execute_data;
						zend_init_cvs(0, hook->op_array.last_var EXECUTE_DATA_CC);

#if defined(ZEND_VM_IP_GLOBAL_REG) && ((ZEND_VM_KIND == ZEND_VM_KIND_CALL) || (ZEND_VM_KIND == ZEND_VM_KIND_HYBRID))
						opline = hook->op_array.opcodes;
#else
						EX(opline) = hook->op_array.opcodes;
#endif
						LOAD_OPLINE_EX();




						ZEND_VM_ENTER_EX();
					}
					/* Fall through to read_property for hooks. */
				} else if (EXPECTED(zobj->properties != NULL)) {
					ZEND_ASSERT(IS_DYNAMIC_PROPERTY_OFFSET(prop_offset));
					name = Z_STR_P(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC));
					if (!IS_UNKNOWN_DYNAMIC_PROPERTY_OFFSET(prop_offset)) {
						uintptr_t idx = ZEND_DECODE_DYN_PROP_OFFSET(prop_offset);

						if (EXPECTED(idx < zobj->properties->nNumUsed * sizeof(Bucket))) {
							Bucket *p = (Bucket*)((char*)zobj->properties->arData + idx);

							if (EXPECTED(p->key == name) ||
							    (EXPECTED(p->h == ZSTR_H(name)) &&
							     EXPECTED(p->key != NULL) &&
							     EXPECTED(zend_string_equal_content(p->key, name)))) {
								retval = &p->val;
								if (0 || (IS_CV & (IS_TMP_VAR|IS_VAR)) != 0) {
									goto fetch_obj_r_copy;
								} else {
									goto fetch_obj_r_fast_copy;
								}
							}
						}
						CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_DYNAMIC_PROPERTY_OFFSET);
					}
					retval = zend_hash_find_known_hash(zobj->properties, name);
					if (EXPECTED(retval)) {
						uintptr_t idx = (char*)retval - (char*)zobj->properties->arData;
						CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_ENCODE_DYN_PROP_OFFSET(idx));
						if (0 || (IS_CV & (IS_TMP_VAR|IS_VAR)) != 0) {
							goto fetch_obj_r_copy;
						} else {
							goto fetch_obj_r_fast_copy;
						}
					}
				}
			}
			name = Z_STR_P(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC));
		} else {
			name = zval_try_get_tmp_string(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC), &tmp_name);
			if (UNEXPECTED(!name)) {
				ZVAL_UNDEF(EX_VAR(opline->result.var));
				break;
			}
		}

#if ZEND_DEBUG
		/* For non-standard object handlers, verify a declared property type in debug builds.
		 * Fetch prop_info before calling read_property(), as it may deallocate the object. */
		zend_property_info *prop_info = NULL;
		if (zobj->handlers->read_property != zend_std_read_property) {
			prop_info = zend_get_property_info(zobj->ce, name, /* silent */ true);
		}
#endif
		retval = zobj->handlers->read_property(zobj, name, BP_VAR_R, cache_slot, EX_VAR(opline->result.var));
#if ZEND_DEBUG
		if (!EG(exception) && prop_info && prop_info != ZEND_WRONG_PROPERTY_INFO
				&& ZEND_TYPE_IS_SET(prop_info->type)) {
			ZVAL_OPT_DEREF(retval);
			zend_verify_property_type(prop_info, retval, /* strict */ true);
		}
#endif

		if (IS_CV != IS_CONST) {
			zend_tmp_string_release(tmp_name);
		}

		if (retval != EX_VAR(opline->result.var)) {
fetch_obj_r_copy:
			ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
		} else if (UNEXPECTED(Z_ISREF_P(retval))) {
			zend_unwrap_reference(retval);
		}
	} while (0);

fetch_obj_r_finish:




	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_FETCH_OBJ_W_SPEC_CV_CV_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *property, *container, *result;

	SAVE_OPLINE();

	container = EX_VAR(opline->op1.var);
	property = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
	result = EX_VAR(opline->result.var);
	zend_fetch_property_address(
		result, container, IS_CV, property, IS_CV,
		((IS_CV == IS_CONST) ? CACHE_ADDR(opline->extended_value & ~ZEND_FETCH_OBJ_FLAGS) : NULL),
		BP_VAR_W, opline->extended_value, NULL OPLINE_CC EXECUTE_DATA_CC);


	if (IS_CV == IS_VAR) {
		FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
	}
	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_FETCH_OBJ_RW_SPEC_CV_CV_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *property, *container, *result;

	SAVE_OPLINE();
	container = EX_VAR(opline->op1.var);
	property = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
	result = EX_VAR(opline->result.var);
	zend_fetch_property_address(result, container, IS_CV, property, IS_CV, ((IS_CV == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL), BP_VAR_RW, 0, NULL OPLINE_CC EXECUTE_DATA_CC);


	if (IS_CV == IS_VAR) {
		FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
	}
	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_FETCH_OBJ_IS_SPEC_CV_CV_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *container;
	void **cache_slot = NULL;

	SAVE_OPLINE();
	container = _get_zval_ptr_cv_BP_VAR_IS(opline->op1.var EXECUTE_DATA_CC);

	if (IS_CV == IS_CONST ||
	    (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
		do {
			if ((IS_CV & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
				container = Z_REFVAL_P(container);
				if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
					break;
				}
			}
			if (IS_CV == IS_CV && Z_TYPE_P(EX_VAR(opline->op2.var)) == IS_UNDEF) {
				ZVAL_UNDEFINED_OP2();
			}
			ZVAL_NULL(EX_VAR(opline->result.var));
			goto fetch_obj_is_finish;
		} while (0);
	}

	/* here we are sure we are dealing with an object */
	do {
		zend_object *zobj = Z_OBJ_P(container);
		zend_string *name, *tmp_name;
		zval *retval;

		if (IS_CV == IS_CONST) {
			cache_slot = CACHE_ADDR(opline->extended_value);

			if (EXPECTED(zobj->ce == CACHED_PTR_EX(cache_slot))) {
				uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);

				if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
fetch_obj_is_simple:
					retval = OBJ_PROP(zobj, prop_offset);
					if (EXPECTED(Z_TYPE_P(retval) != IS_UNDEF)) {
						if (0 || (IS_CV & (IS_TMP_VAR|IS_VAR)) != 0) {
							goto fetch_obj_is_copy;
						} else {
fetch_obj_is_fast_copy:
							ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
							ZEND_VM_NEXT_OPCODE();
						}
					}
				} else if (UNEXPECTED(IS_HOOKED_PROPERTY_OFFSET(prop_offset))) {
					if (ZEND_IS_PROPERTY_HOOK_SIMPLE_READ(prop_offset)) {
						zend_property_info *prop_info = CACHED_PTR_EX(cache_slot + 2);
						prop_offset = prop_info->offset;
						goto fetch_obj_is_simple;
					}
					/* Fall through to read_property for hooks. */
				} else if (EXPECTED(zobj->properties != NULL)) {
					ZEND_ASSERT(IS_DYNAMIC_PROPERTY_OFFSET(prop_offset));
					name = Z_STR_P(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC));
					if (!IS_UNKNOWN_DYNAMIC_PROPERTY_OFFSET(prop_offset)) {
						uintptr_t idx = ZEND_DECODE_DYN_PROP_OFFSET(prop_offset);

						if (EXPECTED(idx < zobj->properties->nNumUsed * sizeof(Bucket))) {
							Bucket *p = (Bucket*)((char*)zobj->properties->arData + idx);

							if (EXPECTED(p->key == name) ||
							    (EXPECTED(p->h == ZSTR_H(name)) &&
							     EXPECTED(p->key != NULL) &&
							     EXPECTED(zend_string_equal_content(p->key, name)))) {
								retval = &p->val;
								if (0 || (IS_CV & (IS_TMP_VAR|IS_VAR)) != 0) {
									goto fetch_obj_is_copy;
								} else {
									goto fetch_obj_is_fast_copy;
								}
							}
						}
						CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_DYNAMIC_PROPERTY_OFFSET);
					}
					retval = zend_hash_find_known_hash(zobj->properties, name);
					if (EXPECTED(retval)) {
						uintptr_t idx = (char*)retval - (char*)zobj->properties->arData;
						CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_ENCODE_DYN_PROP_OFFSET(idx));
						if (0 || (IS_CV & (IS_TMP_VAR|IS_VAR)) != 0) {
							goto fetch_obj_is_copy;
						} else {
							goto fetch_obj_is_fast_copy;
						}
					}
				}
			}
			name = Z_STR_P(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC));
		} else {
			name = zval_try_get_tmp_string(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC), &tmp_name);
			if (UNEXPECTED(!name)) {
				ZVAL_UNDEF(EX_VAR(opline->result.var));
				break;
			}
		}

		retval = zobj->handlers->read_property(zobj, name, BP_VAR_IS, cache_slot, EX_VAR(opline->result.var));

		if (IS_CV != IS_CONST) {
			zend_tmp_string_release(tmp_name);
		}

		if (retval != EX_VAR(opline->result.var)) {
fetch_obj_is_copy:
			ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
		} else if (UNEXPECTED(Z_ISREF_P(retval))) {
			zend_unwrap_reference(retval);
		}
	} while (0);

fetch_obj_is_finish:




	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CV_CV_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
#if 0
	USE_OPLINE
#endif

	if (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) {
		/* Behave like FETCH_OBJ_W */
		if ((IS_CV & (IS_CONST|IS_TMP_VAR))) {
			ZEND_VM_TAIL_CALL(zend_use_tmp_in_write_context_helper_SPEC_TAILCALL(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
		}
		ZEND_VM_TAIL_CALL(ZEND_FETCH_OBJ_W_SPEC_CV_CV_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
	} else {
		ZEND_VM_TAIL_CALL(ZEND_FETCH_OBJ_R_SPEC_CV_CV_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
	}
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_FETCH_OBJ_UNSET_SPEC_CV_CV_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *container, *property, *result;

	SAVE_OPLINE();
	container = EX_VAR(opline->op1.var);
	property = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
	result = EX_VAR(opline->result.var);
	zend_fetch_property_address(result, container, IS_CV, property, IS_CV, ((IS_CV == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL), BP_VAR_UNSET, 0, NULL OPLINE_CC EXECUTE_DATA_CC);


	if (IS_CV == IS_VAR) {
		FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
	}
	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_ASSIGN_OBJ_SPEC_CV_CV_OP_DATA_CONST_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *object, *value, tmp;
	zend_object *zobj;
	zend_string *name, *tmp_name;
	zend_refcounted *garbage = NULL;

	SAVE_OPLINE();
	object = EX_VAR(opline->op1.var);
	value = RT_CONSTANT((opline+1), (opline+1)->op1);

	if (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
		if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
			object = Z_REFVAL_P(object);
			goto assign_object;
		}
		zend_throw_non_object_error(object, _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC) OPLINE_CC EXECUTE_DATA_CC);
		value = &EG(uninitialized_zval);
		goto free_and_exit_assign_obj;
	}

assign_object:
	zobj = Z_OBJ_P(object);
	if (IS_CV == IS_CONST) {
		if (EXPECTED(zobj->ce == CACHED_PTR(opline->extended_value))) {
			void **cache_slot = CACHE_ADDR(opline->extended_value);
			uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
			zval *property_val;
			zend_property_info *prop_info;

			if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
				prop_info = (zend_property_info*) CACHED_PTR_EX(cache_slot + 2);

assign_obj_simple:
				property_val = OBJ_PROP(zobj, prop_offset);
				if (Z_TYPE_P(property_val) != IS_UNDEF) {
					if (prop_info != NULL) {
						value = zend_assign_to_typed_prop(prop_info, property_val, value, &garbage EXECUTE_DATA_CC);
						goto free_and_exit_assign_obj;
					} else {
fast_assign_obj:
						value = zend_assign_to_variable_ex(property_val, value, IS_CONST, EX_USES_STRICT_TYPES(), &garbage);
						if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
							ZVAL_COPY(EX_VAR(opline->result.var), value);
						}
						goto exit_assign_obj;
					}
				}
			} else if (EXPECTED(IS_DYNAMIC_PROPERTY_OFFSET(prop_offset))) {
				name = Z_STR_P(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC));
				if (UNEXPECTED(zend_lazy_object_must_init(zobj))) {
					zobj = zend_lazy_object_init(zobj);
					if (!zobj) {
						value = &EG(uninitialized_zval);
						goto free_and_exit_assign_obj;
					}
				}
				if (!zobj->ce->__set && (zobj->ce->ce_flags & ZEND_ACC_ALLOW_DYNAMIC_PROPERTIES)) {
					rebuild_object_properties_internal(zobj);
				}
				if (EXPECTED(zobj->properties != NULL)) {
					if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
						if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
							GC_DELREF(zobj->properties);
						}
						zobj->properties = zend_array_dup(zobj->properties);
					}
					property_val = zend_hash_find_known_hash(zobj->properties, name);
					if (property_val) {
						goto fast_assign_obj;
					}
				}

				if (!zobj->ce->__set && (zobj->ce->ce_flags & ZEND_ACC_ALLOW_DYNAMIC_PROPERTIES)) {
					if (IS_CONST == IS_CONST) {
						if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
							Z_ADDREF_P(value);
						}
					} else if (IS_CONST != IS_TMP_VAR) {
						if (Z_ISREF_P(value)) {
							if (IS_CONST == IS_VAR) {
								zend_reference *ref = Z_REF_P(value);
								if (GC_DELREF(ref) == 0) {
									ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
									efree_size(ref, sizeof(zend_reference));
									value = &tmp;
								} else {
									value = Z_REFVAL_P(value);
									Z_TRY_ADDREF_P(value);
								}
							} else {
								value = Z_REFVAL_P(value);
								Z_TRY_ADDREF_P(value);
							}
						} else if (IS_CONST == IS_CV) {
							Z_TRY_ADDREF_P(value);
						}
					}
					zend_hash_add_new(zobj->properties, name, value);
					if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
						ZVAL_COPY(EX_VAR(opline->result.var), value);
					}
					goto exit_assign_obj;
				}
			} else {
				ZEND_ASSERT(IS_HOOKED_PROPERTY_OFFSET(prop_offset));
				if (ZEND_IS_PROPERTY_HOOK_SIMPLE_WRITE(prop_offset)) {
					prop_info = CACHED_PTR_EX(cache_slot + 2);
					prop_offset = prop_info->offset;
					if (!ZEND_TYPE_IS_SET(prop_info->type)) {
						prop_info = NULL;
					}
					goto assign_obj_simple;
				}
				/* Fall through to write_property for hooks. */
			}
		}
		name = Z_STR_P(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC));
	} else {
		name = zval_try_get_tmp_string(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC), &tmp_name);
		if (UNEXPECTED(!name)) {


			UNDEF_RESULT();
			goto exit_assign_obj;
		}
	}

	if (IS_CONST == IS_CV || IS_CONST == IS_VAR) {
		ZVAL_DEREF(value);
	}

	value = zobj->handlers->write_property(zobj, name, value, (IS_CV == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);

	if (IS_CV != IS_CONST) {
		zend_tmp_string_release(tmp_name);
	}

free_and_exit_assign_obj:
	if (UNEXPECTED(RETURN_VALUE_USED(opline)) && value) {
		ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
	}


exit_assign_obj:
	if (garbage) {
		GC_DTOR_NO_REF(garbage);
	}




	/* assign_obj has two opcodes! */
	ZEND_VM_NEXT_OPCODE_EX(1, 2);
}

/* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CONST|VAR) */
static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_ASSIGN_OBJ_SPEC_CV_CV_OP_DATA_TMP_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *object, *value, tmp;
	zend_object *zobj;
	zend_string *name, *tmp_name;
	zend_refcounted *garbage = NULL;

	SAVE_OPLINE();
	object = EX_VAR(opline->op1.var);
	value = _get_zval_ptr_tmp((opline+1)->op1.var EXECUTE_DATA_CC);

	if (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
		if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
			object = Z_REFVAL_P(object);
			goto assign_object;
		}
		zend_throw_non_object_error(object, _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC) OPLINE_CC EXECUTE_DATA_CC);
		value = &EG(uninitialized_zval);
		goto free_and_exit_assign_obj;
	}

assign_object:
	zobj = Z_OBJ_P(object);
	if (IS_CV == IS_CONST) {
		if (EXPECTED(zobj->ce == CACHED_PTR(opline->extended_value))) {
			void **cache_slot = CACHE_ADDR(opline->extended_value);
			uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
			zval *property_val;
			zend_property_info *prop_info;

			if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
				prop_info = (zend_property_info*) CACHED_PTR_EX(cache_slot + 2);

assign_obj_simple:
				property_val = OBJ_PROP(zobj, prop_offset);
				if (Z_TYPE_P(property_val) != IS_UNDEF) {
					if (prop_info != NULL) {
						value = zend_assign_to_typed_prop(prop_info, property_val, value, &garbage EXECUTE_DATA_CC);
						goto free_and_exit_assign_obj;
					} else {
fast_assign_obj:
						value = zend_assign_to_variable_ex(property_val, value, IS_TMP_VAR, EX_USES_STRICT_TYPES(), &garbage);
						if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
							ZVAL_COPY(EX_VAR(opline->result.var), value);
						}
						goto exit_assign_obj;
					}
				}
			} else if (EXPECTED(IS_DYNAMIC_PROPERTY_OFFSET(prop_offset))) {
				name = Z_STR_P(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC));
				if (UNEXPECTED(zend_lazy_object_must_init(zobj))) {
					zobj = zend_lazy_object_init(zobj);
					if (!zobj) {
						value = &EG(uninitialized_zval);
						goto free_and_exit_assign_obj;
					}
				}
				if (!zobj->ce->__set && (zobj->ce->ce_flags & ZEND_ACC_ALLOW_DYNAMIC_PROPERTIES)) {
					rebuild_object_properties_internal(zobj);
				}
				if (EXPECTED(zobj->properties != NULL)) {
					if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
						if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
							GC_DELREF(zobj->properties);
						}
						zobj->properties = zend_array_dup(zobj->properties);
					}
					property_val = zend_hash_find_known_hash(zobj->properties, name);
					if (property_val) {
						goto fast_assign_obj;
					}
				}

				if (!zobj->ce->__set && (zobj->ce->ce_flags & ZEND_ACC_ALLOW_DYNAMIC_PROPERTIES)) {
					if (IS_TMP_VAR == IS_CONST) {
						if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
							Z_ADDREF_P(value);
						}
					} else if (IS_TMP_VAR != IS_TMP_VAR) {
						if (Z_ISREF_P(value)) {
							if (IS_TMP_VAR == IS_VAR) {
								zend_reference *ref = Z_REF_P(value);
								if (GC_DELREF(ref) == 0) {
									ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
									efree_size(ref, sizeof(zend_reference));
									value = &tmp;
								} else {
									value = Z_REFVAL_P(value);
									Z_TRY_ADDREF_P(value);
								}
							} else {
								value = Z_REFVAL_P(value);
								Z_TRY_ADDREF_P(value);
							}
						} else if (IS_TMP_VAR == IS_CV) {
							Z_TRY_ADDREF_P(value);
						}
					}
					zend_hash_add_new(zobj->properties, name, value);
					if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
						ZVAL_COPY(EX_VAR(opline->result.var), value);
					}
					goto exit_assign_obj;
				}
			} else {
				ZEND_ASSERT(IS_HOOKED_PROPERTY_OFFSET(prop_offset));
				if (ZEND_IS_PROPERTY_HOOK_SIMPLE_WRITE(prop_offset)) {
					prop_info = CACHED_PTR_EX(cache_slot + 2);
					prop_offset = prop_info->offset;
					if (!ZEND_TYPE_IS_SET(prop_info->type)) {
						prop_info = NULL;
					}
					goto assign_obj_simple;
				}
				/* Fall through to write_property for hooks. */
			}
		}
		name = Z_STR_P(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC));
	} else {
		name = zval_try_get_tmp_string(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC), &tmp_name);
		if (UNEXPECTED(!name)) {
			zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
			UNDEF_RESULT();
			goto exit_assign_obj;
		}
	}

	if (IS_TMP_VAR == IS_CV || IS_TMP_VAR == IS_VAR) {
		ZVAL_DEREF(value);
	}

	value = zobj->handlers->write_property(zobj, name, value, (IS_CV == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);

	if (IS_CV != IS_CONST) {
		zend_tmp_string_release(tmp_name);
	}

free_and_exit_assign_obj:
	if (UNEXPECTED(RETURN_VALUE_USED(opline)) && value) {
		ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
	}
	zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
exit_assign_obj:
	if (garbage) {
		GC_DTOR_NO_REF(garbage);
	}




	/* assign_obj has two opcodes! */
	ZEND_VM_NEXT_OPCODE_EX(1, 2);
}

/* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CONST|VAR) */
static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_ASSIGN_OBJ_SPEC_CV_CV_OP_DATA_VAR_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *object, *value, tmp;
	zend_object *zobj;
	zend_string *name, *tmp_name;
	zend_refcounted *garbage = NULL;

	SAVE_OPLINE();
	object = EX_VAR(opline->op1.var);
	value = _get_zval_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);

	if (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
		if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
			object = Z_REFVAL_P(object);
			goto assign_object;
		}
		zend_throw_non_object_error(object, _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC) OPLINE_CC EXECUTE_DATA_CC);
		value = &EG(uninitialized_zval);
		goto free_and_exit_assign_obj;
	}

assign_object:
	zobj = Z_OBJ_P(object);
	if (IS_CV == IS_CONST) {
		if (EXPECTED(zobj->ce == CACHED_PTR(opline->extended_value))) {
			void **cache_slot = CACHE_ADDR(opline->extended_value);
			uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
			zval *property_val;
			zend_property_info *prop_info;

			if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
				prop_info = (zend_property_info*) CACHED_PTR_EX(cache_slot + 2);

assign_obj_simple:
				property_val = OBJ_PROP(zobj, prop_offset);
				if (Z_TYPE_P(property_val) != IS_UNDEF) {
					if (prop_info != NULL) {
						value = zend_assign_to_typed_prop(prop_info, property_val, value, &garbage EXECUTE_DATA_CC);
						goto free_and_exit_assign_obj;
					} else {
fast_assign_obj:
						value = zend_assign_to_variable_ex(property_val, value, IS_VAR, EX_USES_STRICT_TYPES(), &garbage);
						if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
							ZVAL_COPY(EX_VAR(opline->result.var), value);
						}
						goto exit_assign_obj;
					}
				}
			} else if (EXPECTED(IS_DYNAMIC_PROPERTY_OFFSET(prop_offset))) {
				name = Z_STR_P(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC));
				if (UNEXPECTED(zend_lazy_object_must_init(zobj))) {
					zobj = zend_lazy_object_init(zobj);
					if (!zobj) {
						value = &EG(uninitialized_zval);
						goto free_and_exit_assign_obj;
					}
				}
				if (!zobj->ce->__set && (zobj->ce->ce_flags & ZEND_ACC_ALLOW_DYNAMIC_PROPERTIES)) {
					rebuild_object_properties_internal(zobj);
				}
				if (EXPECTED(zobj->properties != NULL)) {
					if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
						if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
							GC_DELREF(zobj->properties);
						}
						zobj->properties = zend_array_dup(zobj->properties);
					}
					property_val = zend_hash_find_known_hash(zobj->properties, name);
					if (property_val) {
						goto fast_assign_obj;
					}
				}

				if (!zobj->ce->__set && (zobj->ce->ce_flags & ZEND_ACC_ALLOW_DYNAMIC_PROPERTIES)) {
					if (IS_VAR == IS_CONST) {
						if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
							Z_ADDREF_P(value);
						}
					} else if (IS_VAR != IS_TMP_VAR) {
						if (Z_ISREF_P(value)) {
							if (IS_VAR == IS_VAR) {
								zend_reference *ref = Z_REF_P(value);
								if (GC_DELREF(ref) == 0) {
									ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
									efree_size(ref, sizeof(zend_reference));
									value = &tmp;
								} else {
									value = Z_REFVAL_P(value);
									Z_TRY_ADDREF_P(value);
								}
							} else {
								value = Z_REFVAL_P(value);
								Z_TRY_ADDREF_P(value);
							}
						} else if (IS_VAR == IS_CV) {
							Z_TRY_ADDREF_P(value);
						}
					}
					zend_hash_add_new(zobj->properties, name, value);
					if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
						ZVAL_COPY(EX_VAR(opline->result.var), value);
					}
					goto exit_assign_obj;
				}
			} else {
				ZEND_ASSERT(IS_HOOKED_PROPERTY_OFFSET(prop_offset));
				if (ZEND_IS_PROPERTY_HOOK_SIMPLE_WRITE(prop_offset)) {
					prop_info = CACHED_PTR_EX(cache_slot + 2);
					prop_offset = prop_info->offset;
					if (!ZEND_TYPE_IS_SET(prop_info->type)) {
						prop_info = NULL;
					}
					goto assign_obj_simple;
				}
				/* Fall through to write_property for hooks. */
			}
		}
		name = Z_STR_P(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC));
	} else {
		name = zval_try_get_tmp_string(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC), &tmp_name);
		if (UNEXPECTED(!name)) {
			zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
			UNDEF_RESULT();
			goto exit_assign_obj;
		}
	}

	if (IS_VAR == IS_CV || IS_VAR == IS_VAR) {
		ZVAL_DEREF(value);
	}

	value = zobj->handlers->write_property(zobj, name, value, (IS_CV == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);

	if (IS_CV != IS_CONST) {
		zend_tmp_string_release(tmp_name);
	}

free_and_exit_assign_obj:
	if (UNEXPECTED(RETURN_VALUE_USED(opline)) && value) {
		ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
	}
	zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
exit_assign_obj:
	if (garbage) {
		GC_DTOR_NO_REF(garbage);
	}




	/* assign_obj has two opcodes! */
	ZEND_VM_NEXT_OPCODE_EX(1, 2);
}

/* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CONST|VAR) */
static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_ASSIGN_OBJ_SPEC_CV_CV_OP_DATA_CV_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *object, *value, tmp;
	zend_object *zobj;
	zend_string *name, *tmp_name;
	zend_refcounted *garbage = NULL;

	SAVE_OPLINE();
	object = EX_VAR(opline->op1.var);
	value = _get_zval_ptr_cv_BP_VAR_R((opline+1)->op1.var EXECUTE_DATA_CC);

	if (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
		if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
			object = Z_REFVAL_P(object);
			goto assign_object;
		}
		zend_throw_non_object_error(object, _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC) OPLINE_CC EXECUTE_DATA_CC);
		value = &EG(uninitialized_zval);
		goto free_and_exit_assign_obj;
	}

assign_object:
	zobj = Z_OBJ_P(object);
	if (IS_CV == IS_CONST) {
		if (EXPECTED(zobj->ce == CACHED_PTR(opline->extended_value))) {
			void **cache_slot = CACHE_ADDR(opline->extended_value);
			uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
			zval *property_val;
			zend_property_info *prop_info;

			if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
				prop_info = (zend_property_info*) CACHED_PTR_EX(cache_slot + 2);

assign_obj_simple:
				property_val = OBJ_PROP(zobj, prop_offset);
				if (Z_TYPE_P(property_val) != IS_UNDEF) {
					if (prop_info != NULL) {
						value = zend_assign_to_typed_prop(prop_info, property_val, value, &garbage EXECUTE_DATA_CC);
						goto free_and_exit_assign_obj;
					} else {
fast_assign_obj:
						value = zend_assign_to_variable_ex(property_val, value, IS_CV, EX_USES_STRICT_TYPES(), &garbage);
						if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
							ZVAL_COPY(EX_VAR(opline->result.var), value);
						}
						goto exit_assign_obj;
					}
				}
			} else if (EXPECTED(IS_DYNAMIC_PROPERTY_OFFSET(prop_offset))) {
				name = Z_STR_P(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC));
				if (UNEXPECTED(zend_lazy_object_must_init(zobj))) {
					zobj = zend_lazy_object_init(zobj);
					if (!zobj) {
						value = &EG(uninitialized_zval);
						goto free_and_exit_assign_obj;
					}
				}
				if (!zobj->ce->__set && (zobj->ce->ce_flags & ZEND_ACC_ALLOW_DYNAMIC_PROPERTIES)) {
					rebuild_object_properties_internal(zobj);
				}
				if (EXPECTED(zobj->properties != NULL)) {
					if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
						if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
							GC_DELREF(zobj->properties);
						}
						zobj->properties = zend_array_dup(zobj->properties);
					}
					property_val = zend_hash_find_known_hash(zobj->properties, name);
					if (property_val) {
						goto fast_assign_obj;
					}
				}

				if (!zobj->ce->__set && (zobj->ce->ce_flags & ZEND_ACC_ALLOW_DYNAMIC_PROPERTIES)) {
					if (IS_CV == IS_CONST) {
						if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
							Z_ADDREF_P(value);
						}
					} else if (IS_CV != IS_TMP_VAR) {
						if (Z_ISREF_P(value)) {
							if (IS_CV == IS_VAR) {
								zend_reference *ref = Z_REF_P(value);
								if (GC_DELREF(ref) == 0) {
									ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
									efree_size(ref, sizeof(zend_reference));
									value = &tmp;
								} else {
									value = Z_REFVAL_P(value);
									Z_TRY_ADDREF_P(value);
								}
							} else {
								value = Z_REFVAL_P(value);
								Z_TRY_ADDREF_P(value);
							}
						} else if (IS_CV == IS_CV) {
							Z_TRY_ADDREF_P(value);
						}
					}
					zend_hash_add_new(zobj->properties, name, value);
					if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
						ZVAL_COPY(EX_VAR(opline->result.var), value);
					}
					goto exit_assign_obj;
				}
			} else {
				ZEND_ASSERT(IS_HOOKED_PROPERTY_OFFSET(prop_offset));
				if (ZEND_IS_PROPERTY_HOOK_SIMPLE_WRITE(prop_offset)) {
					prop_info = CACHED_PTR_EX(cache_slot + 2);
					prop_offset = prop_info->offset;
					if (!ZEND_TYPE_IS_SET(prop_info->type)) {
						prop_info = NULL;
					}
					goto assign_obj_simple;
				}
				/* Fall through to write_property for hooks. */
			}
		}
		name = Z_STR_P(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC));
	} else {
		name = zval_try_get_tmp_string(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC), &tmp_name);
		if (UNEXPECTED(!name)) {


			UNDEF_RESULT();
			goto exit_assign_obj;
		}
	}

	if (IS_CV == IS_CV || IS_CV == IS_VAR) {
		ZVAL_DEREF(value);
	}

	value = zobj->handlers->write_property(zobj, name, value, (IS_CV == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);

	if (IS_CV != IS_CONST) {
		zend_tmp_string_release(tmp_name);
	}

free_and_exit_assign_obj:
	if (UNEXPECTED(RETURN_VALUE_USED(opline)) && value) {
		ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
	}


exit_assign_obj:
	if (garbage) {
		GC_DTOR_NO_REF(garbage);
	}




	/* assign_obj has two opcodes! */
	ZEND_VM_NEXT_OPCODE_EX(1, 2);
}

/* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CONST|VAR) */
static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_ASSIGN_DIM_SPEC_CV_CV_OP_DATA_CONST_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *object_ptr, *orig_object_ptr;
	zval *value;
	zval *variable_ptr;
	zval *dim;
	zend_refcounted *garbage = NULL;

	SAVE_OPLINE();
	orig_object_ptr = object_ptr = EX_VAR(opline->op1.var);

	if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
try_assign_dim_array:
		SEPARATE_ARRAY(object_ptr);
		if (IS_CV == IS_UNUSED) {
			value = RT_CONSTANT((opline+1), (opline+1)->op1);
			if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
				HashTable *ht = Z_ARRVAL_P(object_ptr);
				if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE)) {
					GC_ADDREF(ht);
				}
				value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
				if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE) && !GC_DELREF(ht)) {
					zend_array_destroy(ht);
					goto assign_dim_error;
				}
			}
			if (IS_CONST == IS_CV || IS_CONST == IS_VAR) {
				ZVAL_DEREF(value);
			}
			value = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), value);
			if (UNEXPECTED(value == NULL)) {
				zend_cannot_add_element();
				goto assign_dim_error;
			} else if (IS_CONST == IS_CV) {
				if (Z_REFCOUNTED_P(value)) {
					Z_ADDREF_P(value);
				}
			} else if (IS_CONST == IS_VAR) {
				zval *free_op_data = EX_VAR((opline+1)->op1.var);
				if (Z_ISREF_P(free_op_data)) {
					if (Z_REFCOUNTED_P(value)) {
						Z_ADDREF_P(value);
					}
					zval_ptr_dtor_nogc(free_op_data);
				}
			} else if (IS_CONST == IS_CONST) {
				if (UNEXPECTED(Z_REFCOUNTED_P(value))) {
					Z_ADDREF_P(value);
				}
			}
		} else {
			dim = EX_VAR(opline->op2.var);
			if (IS_CV == IS_CONST) {
				variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
			} else {
				variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
			}
			if (UNEXPECTED(variable_ptr == NULL)) {
				goto assign_dim_error;
			}
			value = RT_CONSTANT((opline+1), (opline+1)->op1);
			value = zend_assign_to_variable_ex(variable_ptr, value, IS_CONST, EX_USES_STRICT_TYPES(), &garbage);
		}
		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
			ZVAL_COPY(EX_VAR(opline->result.var), value);
		}
		if (garbage) {
			GC_DTOR_NO_REF(garbage);
		}
	} else {
		if (EXPECTED(Z_ISREF_P(object_ptr))) {
			object_ptr = Z_REFVAL_P(object_ptr);
			if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
				goto try_assign_dim_array;
			}
		}
		if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) {
			zend_object *obj = Z_OBJ_P(object_ptr);

			GC_ADDREF(obj);
			dim = EX_VAR(opline->op2.var);
			if (IS_CV == IS_CV && UNEXPECTED(Z_ISUNDEF_P(dim))) {
				dim = ZVAL_UNDEFINED_OP2();
			} else if (IS_CV == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
				dim++;
			}

			value = RT_CONSTANT((opline+1), (opline+1)->op1);
			if (IS_CONST == IS_CV && UNEXPECTED(Z_ISUNDEF_P(value))) {
				value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
			} else if (IS_CONST & (IS_CV|IS_VAR)) {
				ZVAL_DEREF(value);
			}

			zend_assign_to_object_dim(obj, dim, value OPLINE_CC EXECUTE_DATA_CC);


			if (UNEXPECTED(GC_DELREF(obj) == 0)) {
				zend_objects_store_del(obj);
			}
		} else if (EXPECTED(Z_TYPE_P(object_ptr) == IS_STRING)) {
			if (IS_CV == IS_UNUSED) {
				zend_use_new_element_for_string();


				UNDEF_RESULT();
			} else {
				dim = EX_VAR(opline->op2.var);
				value = RT_CONSTANT((opline+1), (opline+1)->op1);
				zend_assign_to_string_offset(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC);


			}
		} else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
			if (Z_ISREF_P(orig_object_ptr)
			 && ZEND_REF_HAS_TYPE_SOURCES(Z_REF_P(orig_object_ptr))
			 && !zend_verify_ref_array_assignable(Z_REF_P(orig_object_ptr))) {
				dim = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);


				UNDEF_RESULT();
			} else {
				HashTable *ht = zend_new_array(8);
				uint8_t old_type = Z_TYPE_P(object_ptr);

				ZVAL_ARR(object_ptr, ht);
				if (UNEXPECTED(old_type == IS_FALSE)) {
					GC_ADDREF(ht);
					zend_false_to_array_deprecated();
					if (UNEXPECTED(GC_DELREF(ht) == 0)) {
						zend_array_destroy(ht);
						goto assign_dim_error;
					}
				}
				goto try_assign_dim_array;
			}
		} else {
			zend_use_scalar_as_array();
			dim = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
assign_dim_error:


			if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
				ZVAL_NULL(EX_VAR(opline->result.var));
			}
		}
	}
	if (IS_CV != IS_UNUSED) {


	}


	/* assign_dim has two opcodes! */
	ZEND_VM_NEXT_OPCODE_EX(1, 2);
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_ASSIGN_DIM_SPEC_CV_CV_OP_DATA_TMP_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *object_ptr, *orig_object_ptr;
	zval *value;
	zval *variable_ptr;
	zval *dim;
	zend_refcounted *garbage = NULL;

	SAVE_OPLINE();
	orig_object_ptr = object_ptr = EX_VAR(opline->op1.var);

	if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
try_assign_dim_array:
		SEPARATE_ARRAY(object_ptr);
		if (IS_CV == IS_UNUSED) {
			value = _get_zval_ptr_tmp((opline+1)->op1.var EXECUTE_DATA_CC);
			if (IS_TMP_VAR == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
				HashTable *ht = Z_ARRVAL_P(object_ptr);
				if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE)) {
					GC_ADDREF(ht);
				}
				value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
				if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE) && !GC_DELREF(ht)) {
					zend_array_destroy(ht);
					goto assign_dim_error;
				}
			}
			if (IS_TMP_VAR == IS_CV || IS_TMP_VAR == IS_VAR) {
				ZVAL_DEREF(value);
			}
			value = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), value);
			if (UNEXPECTED(value == NULL)) {
				zend_cannot_add_element();
				goto assign_dim_error;
			} else if (IS_TMP_VAR == IS_CV) {
				if (Z_REFCOUNTED_P(value)) {
					Z_ADDREF_P(value);
				}
			} else if (IS_TMP_VAR == IS_VAR) {
				zval *free_op_data = EX_VAR((opline+1)->op1.var);
				if (Z_ISREF_P(free_op_data)) {
					if (Z_REFCOUNTED_P(value)) {
						Z_ADDREF_P(value);
					}
					zval_ptr_dtor_nogc(free_op_data);
				}
			} else if (IS_TMP_VAR == IS_CONST) {
				if (UNEXPECTED(Z_REFCOUNTED_P(value))) {
					Z_ADDREF_P(value);
				}
			}
		} else {
			dim = EX_VAR(opline->op2.var);
			if (IS_CV == IS_CONST) {
				variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
			} else {
				variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
			}
			if (UNEXPECTED(variable_ptr == NULL)) {
				goto assign_dim_error;
			}
			value = _get_zval_ptr_tmp((opline+1)->op1.var EXECUTE_DATA_CC);
			value = zend_assign_to_variable_ex(variable_ptr, value, IS_TMP_VAR, EX_USES_STRICT_TYPES(), &garbage);
		}
		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
			ZVAL_COPY(EX_VAR(opline->result.var), value);
		}
		if (garbage) {
			GC_DTOR_NO_REF(garbage);
		}
	} else {
		if (EXPECTED(Z_ISREF_P(object_ptr))) {
			object_ptr = Z_REFVAL_P(object_ptr);
			if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
				goto try_assign_dim_array;
			}
		}
		if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) {
			zend_object *obj = Z_OBJ_P(object_ptr);

			GC_ADDREF(obj);
			dim = EX_VAR(opline->op2.var);
			if (IS_CV == IS_CV && UNEXPECTED(Z_ISUNDEF_P(dim))) {
				dim = ZVAL_UNDEFINED_OP2();
			} else if (IS_CV == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
				dim++;
			}

			value = _get_zval_ptr_tmp((opline+1)->op1.var EXECUTE_DATA_CC);
			if (IS_TMP_VAR == IS_CV && UNEXPECTED(Z_ISUNDEF_P(value))) {
				value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
			} else if (IS_TMP_VAR & (IS_CV|IS_VAR)) {
				ZVAL_DEREF(value);
			}

			zend_assign_to_object_dim(obj, dim, value OPLINE_CC EXECUTE_DATA_CC);

			zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
			if (UNEXPECTED(GC_DELREF(obj) == 0)) {
				zend_objects_store_del(obj);
			}
		} else if (EXPECTED(Z_TYPE_P(object_ptr) == IS_STRING)) {
			if (IS_CV == IS_UNUSED) {
				zend_use_new_element_for_string();
				zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
				UNDEF_RESULT();
			} else {
				dim = EX_VAR(opline->op2.var);
				value = _get_zval_ptr_tmp((opline+1)->op1.var EXECUTE_DATA_CC);
				zend_assign_to_string_offset(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC);
				zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
			}
		} else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
			if (Z_ISREF_P(orig_object_ptr)
			 && ZEND_REF_HAS_TYPE_SOURCES(Z_REF_P(orig_object_ptr))
			 && !zend_verify_ref_array_assignable(Z_REF_P(orig_object_ptr))) {
				dim = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
				zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
				UNDEF_RESULT();
			} else {
				HashTable *ht = zend_new_array(8);
				uint8_t old_type = Z_TYPE_P(object_ptr);

				ZVAL_ARR(object_ptr, ht);
				if (UNEXPECTED(old_type == IS_FALSE)) {
					GC_ADDREF(ht);
					zend_false_to_array_deprecated();
					if (UNEXPECTED(GC_DELREF(ht) == 0)) {
						zend_array_destroy(ht);
						goto assign_dim_error;
					}
				}
				goto try_assign_dim_array;
			}
		} else {
			zend_use_scalar_as_array();
			dim = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
assign_dim_error:
			zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
			if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
				ZVAL_NULL(EX_VAR(opline->result.var));
			}
		}
	}
	if (IS_CV != IS_UNUSED) {


	}


	/* assign_dim has two opcodes! */
	ZEND_VM_NEXT_OPCODE_EX(1, 2);
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_ASSIGN_DIM_SPEC_CV_CV_OP_DATA_VAR_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *object_ptr, *orig_object_ptr;
	zval *value;
	zval *variable_ptr;
	zval *dim;
	zend_refcounted *garbage = NULL;

	SAVE_OPLINE();
	orig_object_ptr = object_ptr = EX_VAR(opline->op1.var);

	if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
try_assign_dim_array:
		SEPARATE_ARRAY(object_ptr);
		if (IS_CV == IS_UNUSED) {
			value = _get_zval_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);
			if (IS_VAR == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
				HashTable *ht = Z_ARRVAL_P(object_ptr);
				if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE)) {
					GC_ADDREF(ht);
				}
				value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
				if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE) && !GC_DELREF(ht)) {
					zend_array_destroy(ht);
					goto assign_dim_error;
				}
			}
			if (IS_VAR == IS_CV || IS_VAR == IS_VAR) {
				ZVAL_DEREF(value);
			}
			value = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), value);
			if (UNEXPECTED(value == NULL)) {
				zend_cannot_add_element();
				goto assign_dim_error;
			} else if (IS_VAR == IS_CV) {
				if (Z_REFCOUNTED_P(value)) {
					Z_ADDREF_P(value);
				}
			} else if (IS_VAR == IS_VAR) {
				zval *free_op_data = EX_VAR((opline+1)->op1.var);
				if (Z_ISREF_P(free_op_data)) {
					if (Z_REFCOUNTED_P(value)) {
						Z_ADDREF_P(value);
					}
					zval_ptr_dtor_nogc(free_op_data);
				}
			} else if (IS_VAR == IS_CONST) {
				if (UNEXPECTED(Z_REFCOUNTED_P(value))) {
					Z_ADDREF_P(value);
				}
			}
		} else {
			dim = EX_VAR(opline->op2.var);
			if (IS_CV == IS_CONST) {
				variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
			} else {
				variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
			}
			if (UNEXPECTED(variable_ptr == NULL)) {
				goto assign_dim_error;
			}
			value = _get_zval_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);
			value = zend_assign_to_variable_ex(variable_ptr, value, IS_VAR, EX_USES_STRICT_TYPES(), &garbage);
		}
		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
			ZVAL_COPY(EX_VAR(opline->result.var), value);
		}
		if (garbage) {
			GC_DTOR_NO_REF(garbage);
		}
	} else {
		if (EXPECTED(Z_ISREF_P(object_ptr))) {
			object_ptr = Z_REFVAL_P(object_ptr);
			if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
				goto try_assign_dim_array;
			}
		}
		if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) {
			zend_object *obj = Z_OBJ_P(object_ptr);

			GC_ADDREF(obj);
			dim = EX_VAR(opline->op2.var);
			if (IS_CV == IS_CV && UNEXPECTED(Z_ISUNDEF_P(dim))) {
				dim = ZVAL_UNDEFINED_OP2();
			} else if (IS_CV == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
				dim++;
			}

			value = _get_zval_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);
			if (IS_VAR == IS_CV && UNEXPECTED(Z_ISUNDEF_P(value))) {
				value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
			} else if (IS_VAR & (IS_CV|IS_VAR)) {
				ZVAL_DEREF(value);
			}

			zend_assign_to_object_dim(obj, dim, value OPLINE_CC EXECUTE_DATA_CC);

			zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
			if (UNEXPECTED(GC_DELREF(obj) == 0)) {
				zend_objects_store_del(obj);
			}
		} else if (EXPECTED(Z_TYPE_P(object_ptr) == IS_STRING)) {
			if (IS_CV == IS_UNUSED) {
				zend_use_new_element_for_string();
				zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
				UNDEF_RESULT();
			} else {
				dim = EX_VAR(opline->op2.var);
				value = _get_zval_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);
				zend_assign_to_string_offset(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC);
				zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
			}
		} else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
			if (Z_ISREF_P(orig_object_ptr)
			 && ZEND_REF_HAS_TYPE_SOURCES(Z_REF_P(orig_object_ptr))
			 && !zend_verify_ref_array_assignable(Z_REF_P(orig_object_ptr))) {
				dim = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
				zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
				UNDEF_RESULT();
			} else {
				HashTable *ht = zend_new_array(8);
				uint8_t old_type = Z_TYPE_P(object_ptr);

				ZVAL_ARR(object_ptr, ht);
				if (UNEXPECTED(old_type == IS_FALSE)) {
					GC_ADDREF(ht);
					zend_false_to_array_deprecated();
					if (UNEXPECTED(GC_DELREF(ht) == 0)) {
						zend_array_destroy(ht);
						goto assign_dim_error;
					}
				}
				goto try_assign_dim_array;
			}
		} else {
			zend_use_scalar_as_array();
			dim = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
assign_dim_error:
			zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
			if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
				ZVAL_NULL(EX_VAR(opline->result.var));
			}
		}
	}
	if (IS_CV != IS_UNUSED) {


	}


	/* assign_dim has two opcodes! */
	ZEND_VM_NEXT_OPCODE_EX(1, 2);
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_ASSIGN_DIM_SPEC_CV_CV_OP_DATA_CV_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *object_ptr, *orig_object_ptr;
	zval *value;
	zval *variable_ptr;
	zval *dim;
	zend_refcounted *garbage = NULL;

	SAVE_OPLINE();
	orig_object_ptr = object_ptr = EX_VAR(opline->op1.var);

	if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
try_assign_dim_array:
		SEPARATE_ARRAY(object_ptr);
		if (IS_CV == IS_UNUSED) {
			value = EX_VAR((opline+1)->op1.var);
			if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
				HashTable *ht = Z_ARRVAL_P(object_ptr);
				if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE)) {
					GC_ADDREF(ht);
				}
				value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
				if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE) && !GC_DELREF(ht)) {
					zend_array_destroy(ht);
					goto assign_dim_error;
				}
			}
			if (IS_CV == IS_CV || IS_CV == IS_VAR) {
				ZVAL_DEREF(value);
			}
			value = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), value);
			if (UNEXPECTED(value == NULL)) {
				zend_cannot_add_element();
				goto assign_dim_error;
			} else if (IS_CV == IS_CV) {
				if (Z_REFCOUNTED_P(value)) {
					Z_ADDREF_P(value);
				}
			} else if (IS_CV == IS_VAR) {
				zval *free_op_data = EX_VAR((opline+1)->op1.var);
				if (Z_ISREF_P(free_op_data)) {
					if (Z_REFCOUNTED_P(value)) {
						Z_ADDREF_P(value);
					}
					zval_ptr_dtor_nogc(free_op_data);
				}
			} else if (IS_CV == IS_CONST) {
				if (UNEXPECTED(Z_REFCOUNTED_P(value))) {
					Z_ADDREF_P(value);
				}
			}
		} else {
			dim = EX_VAR(opline->op2.var);
			if (IS_CV == IS_CONST) {
				variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
			} else {
				variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
			}
			if (UNEXPECTED(variable_ptr == NULL)) {
				goto assign_dim_error;
			}
			value = _get_zval_ptr_cv_BP_VAR_R((opline+1)->op1.var EXECUTE_DATA_CC);
			value = zend_assign_to_variable_ex(variable_ptr, value, IS_CV, EX_USES_STRICT_TYPES(), &garbage);
		}
		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
			ZVAL_COPY(EX_VAR(opline->result.var), value);
		}
		if (garbage) {
			GC_DTOR_NO_REF(garbage);
		}
	} else {
		if (EXPECTED(Z_ISREF_P(object_ptr))) {
			object_ptr = Z_REFVAL_P(object_ptr);
			if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
				goto try_assign_dim_array;
			}
		}
		if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) {
			zend_object *obj = Z_OBJ_P(object_ptr);

			GC_ADDREF(obj);
			dim = EX_VAR(opline->op2.var);
			if (IS_CV == IS_CV && UNEXPECTED(Z_ISUNDEF_P(dim))) {
				dim = ZVAL_UNDEFINED_OP2();
			} else if (IS_CV == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
				dim++;
			}

			value = EX_VAR((opline+1)->op1.var);
			if (IS_CV == IS_CV && UNEXPECTED(Z_ISUNDEF_P(value))) {
				value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
			} else if (IS_CV & (IS_CV|IS_VAR)) {
				ZVAL_DEREF(value);
			}

			zend_assign_to_object_dim(obj, dim, value OPLINE_CC EXECUTE_DATA_CC);


			if (UNEXPECTED(GC_DELREF(obj) == 0)) {
				zend_objects_store_del(obj);
			}
		} else if (EXPECTED(Z_TYPE_P(object_ptr) == IS_STRING)) {
			if (IS_CV == IS_UNUSED) {
				zend_use_new_element_for_string();


				UNDEF_RESULT();
			} else {
				dim = EX_VAR(opline->op2.var);
				value = EX_VAR((opline+1)->op1.var);
				zend_assign_to_string_offset(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC);


			}
		} else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
			if (Z_ISREF_P(orig_object_ptr)
			 && ZEND_REF_HAS_TYPE_SOURCES(Z_REF_P(orig_object_ptr))
			 && !zend_verify_ref_array_assignable(Z_REF_P(orig_object_ptr))) {
				dim = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);


				UNDEF_RESULT();
			} else {
				HashTable *ht = zend_new_array(8);
				uint8_t old_type = Z_TYPE_P(object_ptr);

				ZVAL_ARR(object_ptr, ht);
				if (UNEXPECTED(old_type == IS_FALSE)) {
					GC_ADDREF(ht);
					zend_false_to_array_deprecated();
					if (UNEXPECTED(GC_DELREF(ht) == 0)) {
						zend_array_destroy(ht);
						goto assign_dim_error;
					}
				}
				goto try_assign_dim_array;
			}
		} else {
			zend_use_scalar_as_array();
			dim = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
assign_dim_error:


			if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
				ZVAL_NULL(EX_VAR(opline->result.var));
			}
		}
	}
	if (IS_CV != IS_UNUSED) {


	}


	/* assign_dim has two opcodes! */
	ZEND_VM_NEXT_OPCODE_EX(1, 2);
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_ASSIGN_SPEC_CV_CV_RETVAL_UNUSED_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *value;
	zval *variable_ptr;

	SAVE_OPLINE();
	value = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
	variable_ptr = EX_VAR(opline->op1.var);

	if (0 || UNEXPECTED(0)) {
		zend_refcounted *garbage = NULL;

		value = zend_assign_to_variable_ex(variable_ptr, value, IS_CV, EX_USES_STRICT_TYPES(), &garbage);
		if (UNEXPECTED(0)) {
			ZVAL_COPY(EX_VAR(opline->result.var), value);
		}
		if (garbage) {
			GC_DTOR_NO_REF(garbage);
		}
	} else {
		value = zend_assign_to_variable(variable_ptr, value, IS_CV, EX_USES_STRICT_TYPES());
	}


	/* zend_assign_to_variable() always takes care of op2, never free it! */

	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_ASSIGN_SPEC_CV_CV_RETVAL_USED_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *value;
	zval *variable_ptr;

	SAVE_OPLINE();
	value = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
	variable_ptr = EX_VAR(opline->op1.var);

	if (0 || UNEXPECTED(1)) {
		zend_refcounted *garbage = NULL;

		value = zend_assign_to_variable_ex(variable_ptr, value, IS_CV, EX_USES_STRICT_TYPES(), &garbage);
		if (UNEXPECTED(1)) {
			ZVAL_COPY(EX_VAR(opline->result.var), value);
		}
		if (garbage) {
			GC_DTOR_NO_REF(garbage);
		}
	} else {
		value = zend_assign_to_variable(variable_ptr, value, IS_CV, EX_USES_STRICT_TYPES());
	}


	/* zend_assign_to_variable() always takes care of op2, never free it! */

	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_ASSIGN_REF_SPEC_CV_CV_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *variable_ptr;
	zval *value_ptr;
	zend_refcounted *garbage = NULL;

	SAVE_OPLINE();
	value_ptr = _get_zval_ptr_cv_BP_VAR_W(opline->op2.var EXECUTE_DATA_CC);
	variable_ptr = EX_VAR(opline->op1.var);

	if (IS_CV == IS_VAR &&
	           UNEXPECTED(Z_TYPE_P(EX_VAR(opline->op1.var)) != IS_INDIRECT)) {

		zend_throw_error(NULL, "Cannot assign by reference to an array dimension of an object");
		variable_ptr = &EG(uninitialized_zval);
	} else if (IS_CV == IS_VAR &&
	           opline->extended_value == ZEND_RETURNS_FUNCTION &&
			   UNEXPECTED(!Z_ISREF_P(value_ptr))) {

		variable_ptr = zend_wrong_assign_to_variable_reference(
			variable_ptr, value_ptr, &garbage OPLINE_CC EXECUTE_DATA_CC);
	} else {
		zend_assign_to_variable_reference(variable_ptr, value_ptr, &garbage);
	}

	if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
		ZVAL_COPY(EX_VAR(opline->result.var), variable_ptr);
	}

	if (garbage) {
		GC_DTOR(garbage);
	}




	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_ASSIGN_OBJ_REF_SPEC_CV_CV_OP_DATA_VAR_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *property, *container, *value_ptr;

	SAVE_OPLINE();

	container = EX_VAR(opline->op1.var);
	property = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);

	value_ptr = _get_zval_ptr_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);

	if (1) {
		if (IS_CV == IS_UNUSED) {
			if (IS_CV == IS_CONST) {
				zend_assign_to_property_reference_this_const(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
			} else {
				zend_assign_to_property_reference_this_var(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
			}
		} else {
			if (IS_CV == IS_CONST) {
				zend_assign_to_property_reference_var_const(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
			} else {
				zend_assign_to_property_reference_var_var(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
			}
		}
	} else {
		zend_assign_to_property_reference(container, IS_CV, property, IS_CV, value_ptr OPLINE_CC EXECUTE_DATA_CC);
	}




	zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
	ZEND_VM_NEXT_OPCODE_EX(1, 2);
}

/* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CONST|VAR) */
static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_ASSIGN_OBJ_REF_SPEC_CV_CV_OP_DATA_CV_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *property, *container, *value_ptr;

	SAVE_OPLINE();

	container = EX_VAR(opline->op1.var);
	property = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);

	value_ptr = _get_zval_ptr_cv_BP_VAR_W((opline+1)->op1.var EXECUTE_DATA_CC);

	if (1) {
		if (IS_CV == IS_UNUSED) {
			if (IS_CV == IS_CONST) {
				zend_assign_to_property_reference_this_const(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
			} else {
				zend_assign_to_property_reference_this_var(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
			}
		} else {
			if (IS_CV == IS_CONST) {
				zend_assign_to_property_reference_var_const(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
			} else {
				zend_assign_to_property_reference_var_var(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
			}
		}
	} else {
		zend_assign_to_property_reference(container, IS_CV, property, IS_CV, value_ptr OPLINE_CC EXECUTE_DATA_CC);
	}






	ZEND_VM_NEXT_OPCODE_EX(1, 2);
}

/* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CONST|VAR) */
static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_FAST_CONCAT_SPEC_CV_CV_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;
	zend_string *op1_str, *op2_str, *str;


	op1 = EX_VAR(opline->op1.var);
	op2 = EX_VAR(opline->op2.var);
	if ((IS_CV == IS_CONST || EXPECTED(Z_TYPE_P(op1) == IS_STRING)) &&
	    (IS_CV == IS_CONST || EXPECTED(Z_TYPE_P(op2) == IS_STRING))) {
		zend_string *op1_str = Z_STR_P(op1);
		zend_string *op2_str = Z_STR_P(op2);
		zend_string *str;
		uint32_t flags = ZSTR_GET_COPYABLE_CONCAT_PROPERTIES_BOTH(op1_str, op2_str);

		if (IS_CV != IS_CONST && UNEXPECTED(ZSTR_LEN(op1_str) == 0)) {
			if (IS_CV == IS_CONST || IS_CV == IS_CV) {
				ZVAL_STR_COPY(EX_VAR(opline->result.var), op2_str);
			} else {
				ZVAL_STR(EX_VAR(opline->result.var), op2_str);
			}
			if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
				zend_string_release_ex(op1_str, 0);
			}
		} else if (IS_CV != IS_CONST && UNEXPECTED(ZSTR_LEN(op2_str) == 0)) {
			if (IS_CV == IS_CONST || IS_CV == IS_CV) {
				ZVAL_STR_COPY(EX_VAR(opline->result.var), op1_str);
			} else {
				ZVAL_STR(EX_VAR(opline->result.var), op1_str);
			}
			if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
				zend_string_release_ex(op2_str, 0);
			}
		} else if (IS_CV != IS_CONST && IS_CV != IS_CV &&
		    !ZSTR_IS_INTERNED(op1_str) && GC_REFCOUNT(op1_str) == 1) {
			size_t len = ZSTR_LEN(op1_str);

			str = zend_string_extend(op1_str, len + ZSTR_LEN(op2_str), 0);
			memcpy(ZSTR_VAL(str) + len, ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
			GC_ADD_FLAGS(str, flags);
			ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
			if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
				zend_string_release_ex(op2_str, 0);
			}
		} else {
			str = zend_string_alloc(ZSTR_LEN(op1_str) + ZSTR_LEN(op2_str), 0);
			memcpy(ZSTR_VAL(str), ZSTR_VAL(op1_str), ZSTR_LEN(op1_str));
			memcpy(ZSTR_VAL(str) + ZSTR_LEN(op1_str), ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
			GC_ADD_FLAGS(str, flags);
			ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
			if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
				zend_string_release_ex(op1_str, 0);
			}
			if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
				zend_string_release_ex(op2_str, 0);
			}
		}
		ZEND_VM_NEXT_OPCODE();
	}

	SAVE_OPLINE();
	if (IS_CV == IS_CONST) {
		op1_str = Z_STR_P(op1);
	} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
		op1_str = zend_string_copy(Z_STR_P(op1));
	} else {
		if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
			ZVAL_UNDEFINED_OP1();
		}
		op1_str = zval_get_string_func(op1);
	}
	if (IS_CV == IS_CONST) {
		op2_str = Z_STR_P(op2);
	} else if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
		op2_str = zend_string_copy(Z_STR_P(op2));
	} else {
		if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(op2) == IS_UNDEF)) {
			ZVAL_UNDEFINED_OP2();
		}
		op2_str = zval_get_string_func(op2);
	}
	do {
		if (IS_CV != IS_CONST) {
			if (UNEXPECTED(ZSTR_LEN(op1_str) == 0)) {
				if (IS_CV == IS_CONST) {
					if (UNEXPECTED(Z_REFCOUNTED_P(op2))) {
						GC_ADDREF(op2_str);
					}
				}
				ZVAL_STR(EX_VAR(opline->result.var), op2_str);
				zend_string_release_ex(op1_str, 0);
				break;
			}
		}
		if (IS_CV != IS_CONST) {
			if (UNEXPECTED(ZSTR_LEN(op2_str) == 0)) {
				if (IS_CV == IS_CONST) {
					if (UNEXPECTED(Z_REFCOUNTED_P(op1))) {
						GC_ADDREF(op1_str);
					}
				}
				ZVAL_STR(EX_VAR(opline->result.var), op1_str);
				zend_string_release_ex(op2_str, 0);
				break;
			}
		}
		str = zend_string_alloc(ZSTR_LEN(op1_str) + ZSTR_LEN(op2_str), 0);
		memcpy(ZSTR_VAL(str), ZSTR_VAL(op1_str), ZSTR_LEN(op1_str));
		memcpy(ZSTR_VAL(str) + ZSTR_LEN(op1_str), ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);

		ZSTR_COPY_CONCAT_PROPERTIES_BOTH(str, op1_str, op2_str);
		ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
		if (IS_CV != IS_CONST) {
			zend_string_release_ex(op1_str, 0);
		}
		if (IS_CV != IS_CONST) {
			zend_string_release_ex(op2_str, 0);
		}
	} while (0);




	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_INIT_METHOD_CALL_SPEC_CV_CV_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *function_name;
	zval *object;
	zend_function *fbc;
	zend_class_entry *called_scope;
	zend_object *obj;
	zend_execute_data *call;
	uint32_t call_info;

	SAVE_OPLINE();

	object = EX_VAR(opline->op1.var);

	if (IS_CV != IS_CONST) {
		function_name = EX_VAR(opline->op2.var);
	}

	if (IS_CV != IS_CONST &&
	    UNEXPECTED(Z_TYPE_P(function_name) != IS_STRING)) {
		do {
			if ((IS_CV & (IS_VAR|IS_CV)) && Z_ISREF_P(function_name)) {
				function_name = Z_REFVAL_P(function_name);
				if (EXPECTED(Z_TYPE_P(function_name) == IS_STRING)) {
					break;
				}
			} else if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) {
				ZVAL_UNDEFINED_OP2();
				if (UNEXPECTED(EG(exception) != NULL)) {


					HANDLE_EXCEPTION();
				}
			}
			zend_throw_error(NULL, "Method name must be a string");




			HANDLE_EXCEPTION();
		} while (0);
	}

	if (IS_CV == IS_UNUSED) {
		obj = Z_OBJ_P(object);
	} else {
		do {
			if (IS_CV != IS_CONST && EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
				obj = Z_OBJ_P(object);
			} else {
				if ((IS_CV & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(object))) {
					zend_reference *ref = Z_REF_P(object);

					object = &ref->val;
					if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
						obj = Z_OBJ_P(object);
						if (IS_CV & IS_VAR) {
							if (UNEXPECTED(GC_DELREF(ref) == 0)) {
								efree_size(ref, sizeof(zend_reference));
							} else {
								Z_ADDREF_P(object);
							}
						}
						break;
					}
				}
				if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
					object = ZVAL_UNDEFINED_OP1();
					if (UNEXPECTED(EG(exception) != NULL)) {
						if (IS_CV != IS_CONST) {


						}
						HANDLE_EXCEPTION();
					}
				}
				if (IS_CV == IS_CONST) {
					function_name = EX_VAR(opline->op2.var);
				}
				zend_invalid_method_call(object, function_name);




				HANDLE_EXCEPTION();
			}
		} while (0);
	}

	called_scope = obj->ce;

	if (IS_CV == IS_CONST &&
	    EXPECTED(CACHED_PTR(opline->result.num) == called_scope)) {
		fbc = CACHED_PTR(opline->result.num + sizeof(void*));
	} else {
		zend_object *orig_obj = obj;

		if (IS_CV == IS_CONST) {
			function_name = EX_VAR(opline->op2.var);
		}

		/* First, locate the function. */
		fbc = obj->handlers->get_method(&obj, Z_STR_P(function_name), ((IS_CV == IS_CONST) ? (RT_CONSTANT(opline, opline->op2) + 1) : NULL));
		if (UNEXPECTED(fbc == NULL)) {
			if (EXPECTED(!EG(exception))) {
				zend_undefined_method(orig_obj->ce, Z_STR_P(function_name));
			}


			if ((IS_CV & (IS_VAR|IS_TMP_VAR)) && GC_DELREF(orig_obj) == 0) {
				zend_objects_store_del(orig_obj);
			}
			HANDLE_EXCEPTION();
		}
		if (IS_CV == IS_CONST &&
		    EXPECTED(!(fbc->common.fn_flags & (ZEND_ACC_CALL_VIA_TRAMPOLINE|ZEND_ACC_NEVER_CACHE))) &&
		    EXPECTED(obj == orig_obj)) {
			CACHE_POLYMORPHIC_PTR(opline->result.num, called_scope, fbc);
		}
		if ((IS_CV & (IS_VAR|IS_TMP_VAR)) && UNEXPECTED(obj != orig_obj)) {
			GC_ADDREF(obj); /* For $this pointer */
			if (GC_DELREF(orig_obj) == 0) {
				zend_objects_store_del(orig_obj);
			}
		}
		if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!RUN_TIME_CACHE(&fbc->op_array))) {
			init_func_run_time_cache(&fbc->op_array);
		}
	}

	if (IS_CV != IS_CONST) {


	}

	call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_HAS_THIS;
	if (UNEXPECTED((fbc->common.fn_flags & ZEND_ACC_STATIC) != 0)) {
		if ((IS_CV & (IS_VAR|IS_TMP_VAR)) && GC_DELREF(obj) == 0) {
			zend_objects_store_del(obj);
			if (UNEXPECTED(EG(exception))) {
				HANDLE_EXCEPTION();
			}
		}
		/* call static method */
		obj = (zend_object*)called_scope;
		call_info = ZEND_CALL_NESTED_FUNCTION;
	} else if (IS_CV & (IS_VAR|IS_TMP_VAR|IS_CV)) {
		if (IS_CV == IS_CV) {
			GC_ADDREF(obj); /* For $this pointer */
		}
		/* CV may be changed indirectly (e.g. when it's a reference) */
		call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_HAS_THIS | ZEND_CALL_RELEASE_THIS;
	}

	call = zend_vm_stack_push_call_frame(call_info,
		fbc, opline->extended_value, obj);
	call->prev_execute_data = EX(call);
	EX(call) = call;

	ZEND_VM_NEXT_OPCODE();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_CV_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *expr_ptr, new_expr;

	SAVE_OPLINE();
	if ((IS_CV == IS_VAR || IS_CV == IS_CV) &&
	    UNEXPECTED(opline->extended_value & ZEND_ARRAY_ELEMENT_REF)) {
		expr_ptr = _get_zval_ptr_cv_BP_VAR_W(opline->op1.var EXECUTE_DATA_CC);
		if (Z_ISREF_P(expr_ptr)) {
			Z_ADDREF_P(expr_ptr);
		} else {
			ZVAL_MAKE_REF_EX(expr_ptr, 2);
		}


	} else {
		expr_ptr = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
		if (IS_CV == IS_TMP_VAR) {
			/* pass */
		} else if (IS_CV == IS_CONST) {
			Z_TRY_ADDREF_P(expr_ptr);
		} else if (IS_CV == IS_CV) {
			ZVAL_DEREF(expr_ptr);
			Z_TRY_ADDREF_P(expr_ptr);
		} else /* if (IS_CV == IS_VAR) */ {
			if (UNEXPECTED(Z_ISREF_P(expr_ptr))) {
				zend_refcounted *ref = Z_COUNTED_P(expr_ptr);

				expr_ptr = Z_REFVAL_P(expr_ptr);
				if (UNEXPECTED(GC_DELREF(ref) == 0)) {
					ZVAL_COPY_VALUE(&new_expr, expr_ptr);
					expr_ptr = &new_expr;
					efree_size(ref, sizeof(zend_reference));
				} else if (Z_OPT_REFCOUNTED_P(expr_ptr)) {
					Z_ADDREF_P(expr_ptr);
				}
			}
		}
	}

	if (IS_CV != IS_UNUSED) {
		zval *offset = EX_VAR(opline->op2.var);
		zend_string *str;
		zend_ulong hval;

add_again:
		if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) {
			str = Z_STR_P(offset);
			if (IS_CV != IS_CONST) {
				if (ZEND_HANDLE_NUMERIC(str, hval)) {
					goto num_index;
				}
			}
str_index:
			zend_hash_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), str, expr_ptr);
		} else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
			hval = Z_LVAL_P(offset);
num_index:
			zend_hash_index_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), hval, expr_ptr);
		} else if ((IS_CV & (IS_VAR|IS_CV)) && EXPECTED(Z_TYPE_P(offset) == IS_REFERENCE)) {
			offset = Z_REFVAL_P(offset);
			goto add_again;
		} else if (UNEXPECTED(Z_TYPE_P(offset) == IS_NULL)) {
			zval tmp;
			if (IS_CV == IS_CV || IS_CV == IS_VAR) {
				ZVAL_COPY(&tmp, expr_ptr);
			}
			zend_error(E_DEPRECATED, "Using null as an array offset is deprecated, use an empty string instead");
			if (IS_CV == IS_CV || IS_CV == IS_VAR) {
				/* A userland error handler can do funky things to the expression, so reset it */
				zval_ptr_dtor(expr_ptr);
				ZVAL_COPY_VALUE(expr_ptr, &tmp);
			}
			if (UNEXPECTED(EG(exception))) {
				zval_ptr_dtor_nogc(expr_ptr);
				HANDLE_EXCEPTION();
			}
			str = ZSTR_EMPTY_ALLOC();
			goto str_index;
		} else if (Z_TYPE_P(offset) == IS_DOUBLE) {
			hval = zend_dval_to_lval_safe(Z_DVAL_P(offset));
			goto num_index;
		} else if (Z_TYPE_P(offset) == IS_FALSE) {
			hval = 0;
			goto num_index;
		} else if (Z_TYPE_P(offset) == IS_TRUE) {
			hval = 1;
			goto num_index;
		} else if (Z_TYPE_P(offset) == IS_RESOURCE) {
			zend_use_resource_as_offset(offset);
			hval = Z_RES_HANDLE_P(offset);
			goto num_index;
		} else if (IS_CV == IS_CV && Z_TYPE_P(offset) == IS_UNDEF) {
			ZVAL_UNDEFINED_OP2();
			str = ZSTR_EMPTY_ALLOC();
			goto str_index;
		} else {
			zend_illegal_array_offset_access(offset);
			zval_ptr_dtor_nogc(expr_ptr);
		}


	} else {
		if (!zend_hash_next_index_insert(Z_ARRVAL_P(EX_VAR(opline->result.var)), expr_ptr)) {
			zend_cannot_add_element();
			zval_ptr_dtor_nogc(expr_ptr);
		}
	}
	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_INIT_ARRAY_SPEC_CV_CV_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	zval *array;
	uint32_t size;
	USE_OPLINE

	SAVE_OPLINE();
	array = EX_VAR(opline->result.var);
	if (IS_CV != IS_UNUSED) {
		size = opline->extended_value >> ZEND_ARRAY_SIZE_SHIFT;
		ZVAL_ARR(array, zend_new_array(size));
		/* Explicitly initialize array as not-packed if flag is set */
		if (opline->extended_value & ZEND_ARRAY_NOT_PACKED) {
			zend_hash_real_init_mixed(Z_ARRVAL_P(array));
		}
		ZEND_VM_TAIL_CALL(ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_CV_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
	} else {
		ZVAL_ARR(array, zend_new_array(0));
		ZEND_VM_NEXT_OPCODE();
	}
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_UNSET_DIM_SPEC_CV_CV_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *container;
	zval *offset;
	zend_ulong hval;
	zend_string *key;

	SAVE_OPLINE();
	container = EX_VAR(opline->op1.var);
	offset = EX_VAR(opline->op2.var);

	do {
		if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
			HashTable *ht;

unset_dim_array:
			SEPARATE_ARRAY(container);
			ht = Z_ARRVAL_P(container);
offset_again:
			if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) {
				key = Z_STR_P(offset);
				if (IS_CV != IS_CONST) {
					if (ZEND_HANDLE_NUMERIC(key, hval)) {
						goto num_index_dim;
					}
				}
str_index_dim:
				ZEND_ASSERT(ht != &EG(symbol_table));
				zend_hash_del(ht, key);
			} else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
				hval = Z_LVAL_P(offset);
num_index_dim:
				zend_hash_index_del(ht, hval);
			} else if ((IS_CV & (IS_VAR|IS_CV)) && EXPECTED(Z_TYPE_P(offset) == IS_REFERENCE)) {
				offset = Z_REFVAL_P(offset);
				goto offset_again;
			} else if (Z_TYPE_P(offset) == IS_DOUBLE) {
				/* The array may be destroyed while throwing a warning in case the float is not representable as an int.
				 * Temporarily increase the refcount to detect this situation. */
				GC_TRY_ADDREF(ht);
				hval = zend_dval_to_lval_safe(Z_DVAL_P(offset));
				if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE) && !GC_DELREF(ht)) {
					zend_array_destroy(ht);
					break;
				}
				if (EG(exception)) {
					break;
				}
				goto num_index_dim;
			} else if (Z_TYPE_P(offset) == IS_NULL) {
				key = ZSTR_EMPTY_ALLOC();
				goto str_index_dim;
			} else if (Z_TYPE_P(offset) == IS_FALSE) {
				hval = 0;
				goto num_index_dim;
			} else if (Z_TYPE_P(offset) == IS_TRUE) {
				hval = 1;
				goto num_index_dim;
			} else if (Z_TYPE_P(offset) == IS_RESOURCE) {
				zend_use_resource_as_offset(offset);
				hval = Z_RES_HANDLE_P(offset);
				goto num_index_dim;
			} else if (IS_CV == IS_CV && Z_TYPE_P(offset) == IS_UNDEF) {
				ZVAL_UNDEFINED_OP2();
				key = ZSTR_EMPTY_ALLOC();
				goto str_index_dim;
			} else {
				zend_illegal_array_offset_unset(offset);
			}
			break;
		} else if (Z_ISREF_P(container)) {
			container = Z_REFVAL_P(container);
			if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
				goto unset_dim_array;
			}
		}
		if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
			container = ZVAL_UNDEFINED_OP1();
		}
		if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(offset) == IS_UNDEF)) {
			offset = ZVAL_UNDEFINED_OP2();
		}
		if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
			if (IS_CV == IS_CONST && Z_EXTRA_P(offset) == ZEND_EXTRA_VALUE) {
				offset++;
			}
			Z_OBJ_HT_P(container)->unset_dimension(Z_OBJ_P(container), offset);
		} else if (UNEXPECTED(Z_TYPE_P(container) == IS_STRING)) {
			zend_throw_error(NULL, "Cannot unset string offsets");
		} else if (UNEXPECTED(Z_TYPE_P(container) > IS_FALSE)) {
			zend_throw_error(NULL, "Cannot unset offset in a non-array variable");
		} else if (UNEXPECTED(Z_TYPE_P(container) == IS_FALSE)) {
			zend_false_to_array_deprecated();
		}
	} while (0);




	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_UNSET_OBJ_SPEC_CV_CV_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *container;
	zval *offset;
	zend_string *name, *tmp_name;

	SAVE_OPLINE();
	container = EX_VAR(opline->op1.var);
	offset = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);

	do {
		if (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT)) {
			if (Z_ISREF_P(container)) {
				container = Z_REFVAL_P(container);
				if (Z_TYPE_P(container) != IS_OBJECT) {
					if (IS_CV == IS_CV
					 && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
						ZVAL_UNDEFINED_OP1();
					}
					break;
				}
			} else {
				break;
			}
		}
		if (IS_CV == IS_CONST) {
			name = Z_STR_P(offset);
		} else {
			name = zval_try_get_tmp_string(offset, &tmp_name);
			if (UNEXPECTED(!name)) {
				break;
			}
		}
		Z_OBJ_HT_P(container)->unset_property(Z_OBJ_P(container), name, ((IS_CV == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL));
		if (IS_CV != IS_CONST) {
			zend_tmp_string_release(tmp_name);
		}
	} while (0);




	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CV_CV_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *container;
	bool result;
	zend_ulong hval;
	zval *offset;

	SAVE_OPLINE();
	container = EX_VAR(opline->op1.var);
	offset = EX_VAR(opline->op2.var);

	if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
		HashTable *ht;
		zval *value;
		zend_string *str;

isset_dim_obj_array:
		ht = Z_ARRVAL_P(container);
isset_again:
		if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) {
			str = Z_STR_P(offset);
			if (IS_CV != IS_CONST) {
				if (ZEND_HANDLE_NUMERIC(str, hval)) {
					goto num_index_prop;
				}
			}
			value = zend_hash_find_ex(ht, str, IS_CV == IS_CONST);
		} else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
			hval = Z_LVAL_P(offset);
num_index_prop:
			value = zend_hash_index_find(ht, hval);
		} else if ((IS_CV & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(offset))) {
			offset = Z_REFVAL_P(offset);
			goto isset_again;
		} else {
			value = zend_find_array_dim_slow(ht, offset EXECUTE_DATA_CC);
			if (UNEXPECTED(EG(exception))) {
				result = 0;
				goto isset_dim_obj_exit;
			}
		}

		if (!(opline->extended_value & ZEND_ISEMPTY)) {
			/* > IS_NULL means not IS_UNDEF and not IS_NULL */
			result = value != NULL && Z_TYPE_P(value) > IS_NULL &&
			    (!Z_ISREF_P(value) || Z_TYPE_P(Z_REFVAL_P(value)) != IS_NULL);

			if (IS_CV & (IS_CONST|IS_CV)) {
				/* avoid exception check */


				ZEND_VM_SMART_BRANCH(result, 0);
			}
		} else {
			result = (value == NULL || !i_zend_is_true(value));
		}
		goto isset_dim_obj_exit;
	} else if ((IS_CV & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(container))) {
		container = Z_REFVAL_P(container);
		if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
			goto isset_dim_obj_array;
		}
	}

	if (IS_CV == IS_CONST && Z_EXTRA_P(offset) == ZEND_EXTRA_VALUE) {
		offset++;
	}
	if (!(opline->extended_value & ZEND_ISEMPTY)) {
		result = zend_isset_dim_slow(container, offset EXECUTE_DATA_CC);
	} else {
		result = zend_isempty_dim_slow(container, offset EXECUTE_DATA_CC);
	}

isset_dim_obj_exit:




	ZEND_VM_SMART_BRANCH(result, 1);
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CV_CV_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *container;
	int result;
	zval *offset;
	zend_string *name, *tmp_name;

	SAVE_OPLINE();
	container = _get_zval_ptr_cv_BP_VAR_IS(opline->op1.var EXECUTE_DATA_CC);
	offset = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);

	if (IS_CV == IS_CONST ||
	    (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
		if ((IS_CV & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
			container = Z_REFVAL_P(container);
			if (UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT)) {
				result = (opline->extended_value & ZEND_ISEMPTY);
				goto isset_object_finish;
			}
		} else {
			result = (opline->extended_value & ZEND_ISEMPTY);
			goto isset_object_finish;
		}
	}

	if (IS_CV == IS_CONST) {
		name = Z_STR_P(offset);
	} else {
		name = zval_try_get_tmp_string(offset, &tmp_name);
		if (UNEXPECTED(!name)) {
			result = 0;
			goto isset_object_finish;
		}
	}

	result =
		(opline->extended_value & ZEND_ISEMPTY) ^
		Z_OBJ_HT_P(container)->has_property(Z_OBJ_P(container), name, (opline->extended_value & ZEND_ISEMPTY), ((IS_CV == IS_CONST) ? CACHE_ADDR(opline->extended_value & ~ZEND_ISEMPTY) : NULL));

	if (IS_CV != IS_CONST) {
		zend_tmp_string_release(tmp_name);
	}

isset_object_finish:




	ZEND_VM_SMART_BRANCH(result, 1);
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_ARRAY_KEY_EXISTS_SPEC_CV_CV_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE

	zval *key, *subject;
	HashTable *ht;
	bool result;

	SAVE_OPLINE();

	key = EX_VAR(opline->op1.var);
	subject = EX_VAR(opline->op2.var);

	if (EXPECTED(Z_TYPE_P(subject) == IS_ARRAY)) {
array_key_exists_array:
		ht = Z_ARRVAL_P(subject);
		result = zend_array_key_exists_fast(ht, key OPLINE_CC EXECUTE_DATA_CC);
	} else {
		if ((IS_CV & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(subject))) {
			subject = Z_REFVAL_P(subject);
			if (EXPECTED(Z_TYPE_P(subject) == IS_ARRAY)) {
				goto array_key_exists_array;
			}
		}
		zend_array_key_exists_error(subject, key OPLINE_CC EXECUTE_DATA_CC);
		result = 0;
	}




	ZEND_VM_SMART_BRANCH(result, 1);
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_YIELD_SPEC_CV_CV_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE

	zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C);

	SAVE_OPLINE();
	if (UNEXPECTED(generator->flags & ZEND_GENERATOR_FORCED_CLOSE)) {
		ZEND_VM_TAIL_CALL(zend_yield_in_closed_generator_helper_SPEC_TAILCALL(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
	}

	/* Destroy the previously yielded value */
	zval_ptr_dtor(&generator->value);

	/* Destroy the previously yielded key */
	zval_ptr_dtor(&generator->key);

	/* Set the new yielded value */
	if (IS_CV != IS_UNUSED) {
		if (UNEXPECTED(EX(func)->op_array.fn_flags & ZEND_ACC_RETURN_REFERENCE)) {
			/* Constants and temporary variables aren't yieldable by reference,
			 * but we still allow them with a notice. */
			if (IS_CV & (IS_CONST|IS_TMP_VAR)) {
				zval *value;

				zend_error(E_NOTICE, "Only variable references should be yielded by reference");

				value = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
				ZVAL_COPY_VALUE(&generator->value, value);
				if (IS_CV == IS_CONST) {
					if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
						Z_ADDREF(generator->value);
					}
				}
			} else {
				zval *value_ptr = _get_zval_ptr_cv_BP_VAR_W(opline->op1.var EXECUTE_DATA_CC);

				/* If a function call result is yielded and the function did
				 * not return by reference we throw a notice. */
				do {
					if (IS_CV == IS_VAR) {
						ZEND_ASSERT(value_ptr != &EG(uninitialized_zval));
						if (opline->extended_value == ZEND_RETURNS_FUNCTION
						 && !Z_ISREF_P(value_ptr)) {
							zend_error(E_NOTICE, "Only variable references should be yielded by reference");
							ZVAL_COPY(&generator->value, value_ptr);
							break;
						}
					}
					if (Z_ISREF_P(value_ptr)) {
						Z_ADDREF_P(value_ptr);
					} else {
						ZVAL_MAKE_REF_EX(value_ptr, 2);
					}
					ZVAL_REF(&generator->value, Z_REF_P(value_ptr));
				} while (0);


			}
		} else {
			zval *value = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);

			/* Consts, temporary variables and references need copying */
			if (IS_CV == IS_CONST) {
				ZVAL_COPY_VALUE(&generator->value, value);
				if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
					Z_ADDREF(generator->value);
				}
			} else if (IS_CV == IS_TMP_VAR) {
				ZVAL_COPY_VALUE(&generator->value, value);
			} else if ((IS_CV & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) {
				ZVAL_COPY(&generator->value, Z_REFVAL_P(value));


			} else {
				ZVAL_COPY_VALUE(&generator->value, value);
				if (IS_CV == IS_CV) {
					if (Z_OPT_REFCOUNTED_P(value)) Z_ADDREF_P(value);
				}
			}
		}
	} else {
		/* If no value was specified yield null */
		ZVAL_NULL(&generator->value);
	}

	/* Set the new yielded key */
	if (IS_CV != IS_UNUSED) {
		zval *key = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
		if ((IS_CV & (IS_CV|IS_VAR)) && UNEXPECTED(Z_TYPE_P(key) == IS_REFERENCE)) {
			key = Z_REFVAL_P(key);
		}
		ZVAL_COPY(&generator->key, key);


		if (Z_TYPE(generator->key) == IS_LONG
		    && Z_LVAL(generator->key) > generator->largest_used_integer_key
		) {
			generator->largest_used_integer_key = Z_LVAL(generator->key);
		}
	} else {
		/* If no key was specified we use auto-increment keys */
		generator->largest_used_integer_key++;
		ZVAL_LONG(&generator->key, generator->largest_used_integer_key);
	}

	if (RETURN_VALUE_USED(opline)) {
		/* If the return value of yield is used set the send
		 * target and initialize it to NULL */
		generator->send_target = EX_VAR(opline->result.var);
		ZVAL_NULL(generator->send_target);
	} else {
		generator->send_target = NULL;
	}

	/* The GOTO VM uses a local opline variable. We need to set the opline
	 * variable in execute_data so we don't resume at an old position. */
	SAVE_OPLINE();

	ZEND_VM_RETURN();
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_IS_IDENTICAL_NOTHROW_SPEC_CV_CV_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	/* This is declared below the specializations for MAY_BE_LONG/MAY_BE_DOUBLE so those will be used instead if possible. */
	/* This optimizes $x === SOME_CONST_EXPR and $x === $y for non-refs and non-undef, which can't throw. */
	/* (Infinite recursion when comparing arrays is an uncatchable fatal error) */
	USE_OPLINE
	zval *op1, *op2;
	bool result;

	op1 = EX_VAR(opline->op1.var);
	op2 = EX_VAR(opline->op2.var);
	result = fast_is_identical_function(op1, op2);
	/* Free is a no-op for const/cv */
	ZEND_VM_SMART_BRANCH(result, 0);
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_IS_NOT_IDENTICAL_NOTHROW_SPEC_CV_CV_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE
	zval *op1, *op2;
	bool result;

	op1 = EX_VAR(opline->op1.var);
	op2 = EX_VAR(opline->op2.var);
	result = fast_is_identical_function(op1, op2);
	/* Free is a no-op for const/cv */
	ZEND_VM_SMART_BRANCH(!result, 0);
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_NULL_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	USE_OPLINE

	SAVE_OPLINE();
	zend_error_noreturn(E_ERROR, "Invalid opcode %d/%d/%d.", OPLINE->opcode, OPLINE->op1_type, OPLINE->op2_type);
	ZEND_VM_NEXT_OPCODE(); /* Never reached */
}

static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_HALT_TAILCALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
	return (zend_op*) ZEND_VM_ENTER_BIT;
}

/* The following helpers can not tailcall due to signature mismatch. Redefine some macros so they do not enforce tailcall. */
#pragma push_macro("ZEND_VM_CONTINUE")
#undef  ZEND_VM_CONTINUE
#pragma push_macro("ZEND_VM_INTERRUPT")
#undef  ZEND_VM_INTERRUPT
#define ZEND_VM_CONTINUE(handler) return opline
#define ZEND_VM_INTERRUPT()       return zend_interrupt_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)
static zend_never_inline ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV_EX  zend_add_helper_SPEC_TAILCALL(ZEND_OPCODE_HANDLER_ARGS_EX zval *op_1, zval *op_2)
{
	USE_OPLINE

	SAVE_OPLINE();
	if (UNEXPECTED(Z_TYPE_INFO_P(op_1) == IS_UNDEF)) {
		op_1 = ZVAL_UNDEFINED_OP1();
	}
	if (UNEXPECTED(Z_TYPE_INFO_P(op_2) == IS_UNDEF)) {
		op_2 = ZVAL_UNDEFINED_OP2();
	}
	add_function(EX_VAR(opline->result.var), op_1, op_2);
	if (opline->op1_type & (IS_TMP_VAR|IS_VAR)) {
		zval_ptr_dtor_nogc(op_1);
	}
	if (opline->op2_type & (IS_TMP_VAR|IS_VAR)) {
		zval_ptr_dtor_nogc(op_2);
	}
	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static zend_never_inline ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV_EX  zend_sub_helper_SPEC_TAILCALL(ZEND_OPCODE_HANDLER_ARGS_EX zval *op_1, zval *op_2)
{
	USE_OPLINE

	SAVE_OPLINE();
	if (UNEXPECTED(Z_TYPE_INFO_P(op_1) == IS_UNDEF)) {
		op_1 = ZVAL_UNDEFINED_OP1();
	}
	if (UNEXPECTED(Z_TYPE_INFO_P(op_2) == IS_UNDEF)) {
		op_2 = ZVAL_UNDEFINED_OP2();
	}
	sub_function(EX_VAR(opline->result.var), op_1, op_2);
	if (opline->op1_type & (IS_TMP_VAR|IS_VAR)) {
		zval_ptr_dtor_nogc(op_1);
	}
	if (opline->op2_type & (IS_TMP_VAR|IS_VAR)) {
		zval_ptr_dtor_nogc(op_2);
	}
	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static zend_never_inline ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV_EX  zend_mul_helper_SPEC_TAILCALL(ZEND_OPCODE_HANDLER_ARGS_EX zval *op_1, zval *op_2)
{
	USE_OPLINE

	SAVE_OPLINE();
	if (UNEXPECTED(Z_TYPE_INFO_P(op_1) == IS_UNDEF)) {
		op_1 = ZVAL_UNDEFINED_OP1();
	}
	if (UNEXPECTED(Z_TYPE_INFO_P(op_2) == IS_UNDEF)) {
		op_2 = ZVAL_UNDEFINED_OP2();
	}
	mul_function(EX_VAR(opline->result.var), op_1, op_2);
	if (opline->op1_type & (IS_TMP_VAR|IS_VAR)) {
		zval_ptr_dtor_nogc(op_1);
	}
	if (opline->op2_type & (IS_TMP_VAR|IS_VAR)) {
		zval_ptr_dtor_nogc(op_2);
	}
	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static zend_never_inline ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV_EX  zend_mod_helper_SPEC_TAILCALL(ZEND_OPCODE_HANDLER_ARGS_EX zval *op_1, zval *op_2)
{
	USE_OPLINE

	SAVE_OPLINE();
	if (UNEXPECTED(Z_TYPE_INFO_P(op_1) == IS_UNDEF)) {
		op_1 = ZVAL_UNDEFINED_OP1();
	}
	if (UNEXPECTED(Z_TYPE_INFO_P(op_2) == IS_UNDEF)) {
		op_2 = ZVAL_UNDEFINED_OP2();
	}
	mod_function(EX_VAR(opline->result.var), op_1, op_2);
	if (opline->op1_type & (IS_TMP_VAR|IS_VAR)) {
		zval_ptr_dtor_nogc(op_1);
	}
	if (opline->op2_type & (IS_TMP_VAR|IS_VAR)) {
		zval_ptr_dtor_nogc(op_2);
	}
	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static zend_never_inline ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV_EX  zend_shift_left_helper_SPEC_TAILCALL(ZEND_OPCODE_HANDLER_ARGS_EX zval *op_1, zval *op_2)
{
	USE_OPLINE

	SAVE_OPLINE();
	if (UNEXPECTED(Z_TYPE_INFO_P(op_1) == IS_UNDEF)) {
		op_1 = ZVAL_UNDEFINED_OP1();
	}
	if (UNEXPECTED(Z_TYPE_INFO_P(op_2) == IS_UNDEF)) {
		op_2 = ZVAL_UNDEFINED_OP2();
	}
	shift_left_function(EX_VAR(opline->result.var), op_1, op_2);
	if (opline->op1_type & (IS_TMP_VAR|IS_VAR)) {
		zval_ptr_dtor_nogc(op_1);
	}
	if (opline->op2_type & (IS_TMP_VAR|IS_VAR)) {
		zval_ptr_dtor_nogc(op_2);
	}
	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static zend_never_inline ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV_EX  zend_shift_right_helper_SPEC_TAILCALL(ZEND_OPCODE_HANDLER_ARGS_EX zval *op_1, zval *op_2)
{
	USE_OPLINE

	SAVE_OPLINE();
	if (UNEXPECTED(Z_TYPE_INFO_P(op_1) == IS_UNDEF)) {
		op_1 = ZVAL_UNDEFINED_OP1();
	}
	if (UNEXPECTED(Z_TYPE_INFO_P(op_2) == IS_UNDEF)) {
		op_2 = ZVAL_UNDEFINED_OP2();
	}
	shift_right_function(EX_VAR(opline->result.var), op_1, op_2);
	if (opline->op1_type & (IS_TMP_VAR|IS_VAR)) {
		zval_ptr_dtor_nogc(op_1);
	}
	if (opline->op2_type & (IS_TMP_VAR|IS_VAR)) {
		zval_ptr_dtor_nogc(op_2);
	}
	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static zend_never_inline ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV_EX  zend_is_equal_helper_SPEC_TAILCALL(ZEND_OPCODE_HANDLER_ARGS_EX zval *op_1, zval *op_2)
{
	int ret;
	USE_OPLINE

	SAVE_OPLINE();
	if (UNEXPECTED(Z_TYPE_INFO_P(op_1) == IS_UNDEF)) {
		op_1 = ZVAL_UNDEFINED_OP1();
	}
	if (UNEXPECTED(Z_TYPE_INFO_P(op_2) == IS_UNDEF)) {
		op_2 = ZVAL_UNDEFINED_OP2();
	}
	ret = zend_compare(op_1, op_2);
	if (opline->op1_type & (IS_TMP_VAR|IS_VAR)) {
		zval_ptr_dtor_nogc(op_1);
	}
	if (opline->op2_type & (IS_TMP_VAR|IS_VAR)) {
		zval_ptr_dtor_nogc(op_2);
	}
	ZEND_VM_SMART_BRANCH(ret == 0, 1);
}

static zend_never_inline ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV_EX  zend_is_not_equal_helper_SPEC_TAILCALL(ZEND_OPCODE_HANDLER_ARGS_EX zval *op_1, zval *op_2)
{
	int ret;
	USE_OPLINE

	SAVE_OPLINE();
	if (UNEXPECTED(Z_TYPE_INFO_P(op_1) == IS_UNDEF)) {
		op_1 = ZVAL_UNDEFINED_OP1();
	}
	if (UNEXPECTED(Z_TYPE_INFO_P(op_2) == IS_UNDEF)) {
		op_2 = ZVAL_UNDEFINED_OP2();
	}
	ret = zend_compare(op_1, op_2);
	if (opline->op1_type & (IS_TMP_VAR|IS_VAR)) {
		zval_ptr_dtor_nogc(op_1);
	}
	if (opline->op2_type & (IS_TMP_VAR|IS_VAR)) {
		zval_ptr_dtor_nogc(op_2);
	}
	ZEND_VM_SMART_BRANCH(ret != 0, 1);
}

static zend_never_inline ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV_EX  zend_is_smaller_helper_SPEC_TAILCALL(ZEND_OPCODE_HANDLER_ARGS_EX zval *op_1, zval *op_2)
{
	int ret;
	USE_OPLINE

	SAVE_OPLINE();
	if (UNEXPECTED(Z_TYPE_INFO_P(op_1) == IS_UNDEF)) {
		op_1 = ZVAL_UNDEFINED_OP1();
	}
	if (UNEXPECTED(Z_TYPE_INFO_P(op_2) == IS_UNDEF)) {
		op_2 = ZVAL_UNDEFINED_OP2();
	}
	ret = zend_compare(op_1, op_2);
	if (opline->op1_type & (IS_TMP_VAR|IS_VAR)) {
		zval_ptr_dtor_nogc(op_1);
	}
	if (opline->op2_type & (IS_TMP_VAR|IS_VAR)) {
		zval_ptr_dtor_nogc(op_2);
	}
	ZEND_VM_SMART_BRANCH(ret < 0, 1);
}

static zend_never_inline ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV_EX  zend_is_smaller_or_equal_helper_SPEC_TAILCALL(ZEND_OPCODE_HANDLER_ARGS_EX zval *op_1, zval *op_2)
{
	int ret;
	USE_OPLINE

	SAVE_OPLINE();
	if (UNEXPECTED(Z_TYPE_INFO_P(op_1) == IS_UNDEF)) {
		op_1 = ZVAL_UNDEFINED_OP1();
	}
	if (UNEXPECTED(Z_TYPE_INFO_P(op_2) == IS_UNDEF)) {
		op_2 = ZVAL_UNDEFINED_OP2();
	}
	ret = zend_compare(op_1, op_2);
	if (opline->op1_type & (IS_TMP_VAR|IS_VAR)) {
		zval_ptr_dtor_nogc(op_1);
	}
	if (opline->op2_type & (IS_TMP_VAR|IS_VAR)) {
		zval_ptr_dtor_nogc(op_2);
	}
	ZEND_VM_SMART_BRANCH(ret <= 0, 1);
}

static zend_never_inline ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV_EX  zend_bw_or_helper_SPEC_TAILCALL(ZEND_OPCODE_HANDLER_ARGS_EX zval *op_1, zval *op_2)
{
	USE_OPLINE

	SAVE_OPLINE();
	if (UNEXPECTED(Z_TYPE_INFO_P(op_1) == IS_UNDEF)) {
		op_1 = ZVAL_UNDEFINED_OP1();
	}
	if (UNEXPECTED(Z_TYPE_INFO_P(op_2) == IS_UNDEF)) {
		op_2 = ZVAL_UNDEFINED_OP2();
	}
	bitwise_or_function(EX_VAR(opline->result.var), op_1, op_2);
	if (opline->op1_type & (IS_TMP_VAR|IS_VAR)) {
		zval_ptr_dtor_nogc(op_1);
	}
	if (opline->op2_type & (IS_TMP_VAR|IS_VAR)) {
		zval_ptr_dtor_nogc(op_2);
	}
	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static zend_never_inline ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV_EX  zend_bw_and_helper_SPEC_TAILCALL(ZEND_OPCODE_HANDLER_ARGS_EX zval *op_1, zval *op_2)
{
	USE_OPLINE

	SAVE_OPLINE();
	if (UNEXPECTED(Z_TYPE_INFO_P(op_1) == IS_UNDEF)) {
		op_1 = ZVAL_UNDEFINED_OP1();
	}
	if (UNEXPECTED(Z_TYPE_INFO_P(op_2) == IS_UNDEF)) {
		op_2 = ZVAL_UNDEFINED_OP2();
	}
	bitwise_and_function(EX_VAR(opline->result.var), op_1, op_2);
	if (opline->op1_type & (IS_TMP_VAR|IS_VAR)) {
		zval_ptr_dtor_nogc(op_1);
	}
	if (opline->op2_type & (IS_TMP_VAR|IS_VAR)) {
		zval_ptr_dtor_nogc(op_2);
	}
	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static zend_never_inline ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV_EX  zend_bw_xor_helper_SPEC_TAILCALL(ZEND_OPCODE_HANDLER_ARGS_EX zval *op_1, zval *op_2)
{
	USE_OPLINE

	SAVE_OPLINE();
	if (UNEXPECTED(Z_TYPE_INFO_P(op_1) == IS_UNDEF)) {
		op_1 = ZVAL_UNDEFINED_OP1();
	}
	if (UNEXPECTED(Z_TYPE_INFO_P(op_2) == IS_UNDEF)) {
		op_2 = ZVAL_UNDEFINED_OP2();
	}
	bitwise_xor_function(EX_VAR(opline->result.var), op_1, op_2);
	if (opline->op1_type & (IS_TMP_VAR|IS_VAR)) {
		zval_ptr_dtor_nogc(op_1);
	}
	if (opline->op2_type & (IS_TMP_VAR|IS_VAR)) {
		zval_ptr_dtor_nogc(op_2);
	}
	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static zend_never_inline ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV_EX  zend_bw_not_helper_SPEC_TAILCALL(ZEND_OPCODE_HANDLER_ARGS_EX zval *op_1)
{
	USE_OPLINE

	SAVE_OPLINE();
	if (UNEXPECTED(Z_TYPE_P(op_1) == IS_UNDEF)) {
		op_1 = ZVAL_UNDEFINED_OP1();
	}
	bitwise_not_function(EX_VAR(opline->result.var), op_1);
	FREE_OP(opline->op1_type, opline->op1.var);
	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static zend_always_inline ZEND_OPCODE_HANDLER_RET zend_fetch_static_prop_helper_SPEC_TAILCALL(ZEND_OPCODE_HANDLER_ARGS_EX int type)
{
	USE_OPLINE
	zval *prop;
	zend_property_info *prop_info;

	SAVE_OPLINE();

	prop = zend_fetch_static_property_address(
		&prop_info, opline->extended_value & ~ZEND_FETCH_OBJ_FLAGS, type,
		type == BP_VAR_W ? opline->extended_value : 0 OPLINE_CC EXECUTE_DATA_CC);
	if (UNEXPECTED(!prop)) {
		ZEND_ASSERT(EG(exception) || (type == BP_VAR_IS));
		prop = &EG(uninitialized_zval);
	} else if (UNEXPECTED(prop_info->flags & ZEND_ACC_PPP_SET_MASK)
	 && (type == BP_VAR_W || type == BP_VAR_RW || type == BP_VAR_UNSET)
	 && UNEXPECTED(!zend_asymmetric_property_has_set_access(prop_info))) {
		if (Z_TYPE_P(prop) == IS_OBJECT) {
			goto copy_deref;
		} else if (type != BP_VAR_UNSET || Z_TYPE_P(prop) != IS_UNDEF) {
			zend_asymmetric_visibility_property_modification_error(prop_info, "indirectly modify");
		}
		prop = &EG(uninitialized_zval);
	}

	if (type == BP_VAR_R || type == BP_VAR_IS) {
copy_deref:
		ZVAL_COPY_DEREF(EX_VAR(opline->result.var), prop);
	} else {
		ZVAL_INDIRECT(EX_VAR(opline->result.var), prop);
	}
	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

/* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CLASS_FETCH|CONST|VAR) */
static zend_never_inline ZEND_COLD ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV_EX  zend_cannot_pass_by_ref_helper_SPEC_TAILCALL(ZEND_OPCODE_HANDLER_ARGS_EX uint32_t _arg_num, zval *_arg)
{
	USE_OPLINE

	SAVE_OPLINE();

	zend_cannot_pass_by_reference(_arg_num);
	FREE_OP(opline->op1_type, opline->op1.var);
	ZVAL_UNDEF(_arg);
	HANDLE_EXCEPTION();
}

static zend_never_inline ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV_EX  zend_verify_recv_arg_type_helper_SPEC_TAILCALL(ZEND_OPCODE_HANDLER_ARGS_EX zval *op_1)
{
	USE_OPLINE

	SAVE_OPLINE();
	if (UNEXPECTED(!zend_verify_recv_arg_type(EX(func), opline->op1.num, op_1))) {
		HANDLE_EXCEPTION();
	}

	ZEND_VM_NEXT_OPCODE();
}

static zend_never_inline ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV_EX  zend_case_helper_SPEC_TAILCALL(ZEND_OPCODE_HANDLER_ARGS_EX zval *op_1, zval *op_2)
{
	int ret;
	USE_OPLINE

	SAVE_OPLINE();
	if (UNEXPECTED(Z_TYPE_INFO_P(op_1) == IS_UNDEF)) {
		op_1 = ZVAL_UNDEFINED_OP1();
	}
	if (UNEXPECTED(Z_TYPE_INFO_P(op_2) == IS_UNDEF)) {
		op_2 = ZVAL_UNDEFINED_OP2();
	}
	ret = zend_compare(op_1, op_2);
	if (opline->op2_type & (IS_TMP_VAR|IS_VAR)) {
		zval_ptr_dtor_nogc(op_2);
	}
	ZEND_VM_SMART_BRANCH(ret == 0, 1);
}

static zend_never_inline ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV_EX  zend_dispatch_try_catch_finally_helper_SPEC_TAILCALL(ZEND_OPCODE_HANDLER_ARGS_EX uint32_t try_catch_offset, uint32_t op_num)
{
	/* May be NULL during generator closing (only finally blocks are executed) */
	zend_object *ex = EG(exception);

	/* Walk try/catch/finally structures upwards, performing the necessary actions */
	for (; try_catch_offset != (uint32_t) -1; try_catch_offset--) {
		zend_try_catch_element *try_catch =
			&EX(func)->op_array.try_catch_array[try_catch_offset];

		if (op_num < try_catch->catch_op && ex) {
			/* Go to catch block */
			cleanup_live_vars(execute_data, op_num, try_catch->catch_op);
			ZEND_VM_JMP_EX(&EX(func)->op_array.opcodes[try_catch->catch_op], 0);

		} else if (op_num < try_catch->finally_op) {
			if (ex && zend_is_unwind_exit(ex)) {
				/* Don't execute finally blocks on exit (for now) */
				continue;
			}

			/* Go to finally block */
			zval *fast_call = EX_VAR(EX(func)->op_array.opcodes[try_catch->finally_end].op1.var);
			cleanup_live_vars(execute_data, op_num, try_catch->finally_op);
			Z_OBJ_P(fast_call) = EG(exception);
			EG(exception) = NULL;
			Z_OPLINE_NUM_P(fast_call) = (uint32_t)-1;
			ZEND_VM_JMP_EX(&EX(func)->op_array.opcodes[try_catch->finally_op], 0);

		} else if (op_num < try_catch->finally_end) {
			zval *fast_call = EX_VAR(EX(func)->op_array.opcodes[try_catch->finally_end].op1.var);

			/* cleanup incomplete RETURN statement */
			if (Z_OPLINE_NUM_P(fast_call) != (uint32_t)-1
			 && (EX(func)->op_array.opcodes[Z_OPLINE_NUM_P(fast_call)].op2_type & (IS_TMP_VAR | IS_VAR))) {
				zval *return_value = EX_VAR(EX(func)->op_array.opcodes[Z_OPLINE_NUM_P(fast_call)].op2.var);

				zval_ptr_dtor(return_value);
			}

			/* Chain potential exception from wrapping finally block */
			if (Z_OBJ_P(fast_call)) {
				if (ex) {
					if (zend_is_unwind_exit(ex) || zend_is_graceful_exit(ex)) {
						/* discard the previously thrown exception */
						OBJ_RELEASE(Z_OBJ_P(fast_call));
					} else {
						zend_exception_set_previous(ex, Z_OBJ_P(fast_call));
					}
				} else {
					ex = EG(exception) = Z_OBJ_P(fast_call);
				}
			}
		}
	}

	/* Uncaught exception */

	/* Don't use 0 because it gets replaced by zend_vm_gen.php. */
	if (zend_observer_fcall_op_array_extension != -1) {
		zend_observer_fcall_end(execute_data, NULL);
	}
	cleanup_live_vars(execute_data, op_num, 0);
	if (UNEXPECTED((EX_CALL_INFO() & ZEND_CALL_GENERATOR) != 0)) {
		zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C);
		EG(current_execute_data) = EX(prev_execute_data);
		zend_generator_close(generator, 1);
		ZEND_VM_RETURN();
	} else {
		/* We didn't execute RETURN, and have to initialize return_value */
		if (EX(return_value)) {
			ZVAL_UNDEF(EX(return_value));
		}
		ZEND_VM_DISPATCH_TO_LEAVE_HELPER(zend_leave_helper_SPEC_TAILCALL);
	}
}

static zend_never_inline ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV_EX  zend_fetch_var_address_helper_SPEC_CONST_UNUSED_TAILCALL(ZEND_OPCODE_HANDLER_ARGS_EX int type)
{
	USE_OPLINE
	zval *varname;
	zval *retval;
	zend_string *name, *tmp_name;
	HashTable *target_symbol_table;

	SAVE_OPLINE();
	varname = RT_CONSTANT(opline, opline->op1);

	if (IS_CONST == IS_CONST) {
		name = Z_STR_P(varname);
	} else if (EXPECTED(Z_TYPE_P(varname) == IS_STRING)) {
		name = Z_STR_P(varname);
		tmp_name = NULL;
	} else {
		if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(varname) == IS_UNDEF)) {
			ZVAL_UNDEFINED_OP1();
		}
		name = zval_try_get_tmp_string(varname, &tmp_name);
		if (UNEXPECTED(!name)) {
			if (!(opline->extended_value & ZEND_FETCH_GLOBAL_LOCK)) {


			}
			ZVAL_UNDEF(EX_VAR(opline->result.var));
			HANDLE_EXCEPTION();
		}
	}

	target_symbol_table = zend_get_target_symbol_table(opline->extended_value EXECUTE_DATA_CC);
	retval = zend_hash_find_ex(target_symbol_table, name, IS_CONST == IS_CONST);
	if (retval == NULL) {
		if (UNEXPECTED(zend_string_equals(name, ZSTR_KNOWN(ZEND_STR_THIS)))) {
fetch_this:
			zend_fetch_this_var(type OPLINE_CC EXECUTE_DATA_CC);
			if (IS_CONST != IS_CONST) {
				zend_tmp_string_release(tmp_name);
			}
			ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
		}
		if (type == BP_VAR_W) {
			retval = zend_hash_add_new(target_symbol_table, name, &EG(uninitialized_zval));
		} else if (type == BP_VAR_IS || type == BP_VAR_UNSET) {
			retval = &EG(uninitialized_zval);
		} else {
			if (IS_CONST == IS_CV) {
				/* Keep name alive in case an error handler tries to free it. */
				zend_string_addref(name);
			}
			zend_error_unchecked(E_WARNING, "Undefined %svariable $%S",
				(opline->extended_value & ZEND_FETCH_GLOBAL ? "global " : ""), name);
			if (type == BP_VAR_RW && !EG(exception)) {
				retval = zend_hash_update(target_symbol_table, name, &EG(uninitialized_zval));
			} else {
				retval = &EG(uninitialized_zval);
			}
			if (IS_CONST == IS_CV) {
				zend_string_release(name);
			}
		}
	/* GLOBAL or $$name variable may be an INDIRECT pointer to CV */
	} else if (Z_TYPE_P(retval) == IS_INDIRECT) {
		retval = Z_INDIRECT_P(retval);
		if (Z_TYPE_P(retval) == IS_UNDEF) {
			if (UNEXPECTED(zend_string_equals(name, ZSTR_KNOWN(ZEND_STR_THIS)))) {
				goto fetch_this;
			}
			if (type == BP_VAR_W) {
				ZVAL_NULL(retval);
			} else if (type == BP_VAR_IS || type == BP_VAR_UNSET) {
				retval = &EG(uninitialized_zval);
			} else {
				zend_error_unchecked(E_WARNING, "Undefined %svariable $%S",
					(opline->extended_value & ZEND_FETCH_GLOBAL ? "global " : ""), name);
				if (type == BP_VAR_RW && !EG(exception)) {
					ZVAL_NULL(retval);
				} else {
					retval = &EG(uninitialized_zval);
				}
			}
		}
	}

	if (!(opline->extended_value & ZEND_FETCH_GLOBAL_LOCK)) {


	}

	if (IS_CONST != IS_CONST) {
		zend_tmp_string_release(tmp_name);
	}

	ZEND_ASSERT(retval != NULL);
	if (type == BP_VAR_R || type == BP_VAR_IS) {
		ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
	} else {
		ZVAL_INDIRECT(EX_VAR(opline->result.var), retval);
	}
	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static zend_never_inline ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV_EX  zend_fetch_var_address_helper_SPEC_TMPVAR_UNUSED_TAILCALL(ZEND_OPCODE_HANDLER_ARGS_EX int type)
{
	USE_OPLINE
	zval *varname;
	zval *retval;
	zend_string *name, *tmp_name;
	HashTable *target_symbol_table;

	SAVE_OPLINE();
	varname = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);

	if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
		name = Z_STR_P(varname);
	} else if (EXPECTED(Z_TYPE_P(varname) == IS_STRING)) {
		name = Z_STR_P(varname);
		tmp_name = NULL;
	} else {
		if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(varname) == IS_UNDEF)) {
			ZVAL_UNDEFINED_OP1();
		}
		name = zval_try_get_tmp_string(varname, &tmp_name);
		if (UNEXPECTED(!name)) {
			if (!(opline->extended_value & ZEND_FETCH_GLOBAL_LOCK)) {
				zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
			}
			ZVAL_UNDEF(EX_VAR(opline->result.var));
			HANDLE_EXCEPTION();
		}
	}

	target_symbol_table = zend_get_target_symbol_table(opline->extended_value EXECUTE_DATA_CC);
	retval = zend_hash_find_ex(target_symbol_table, name, (IS_TMP_VAR|IS_VAR) == IS_CONST);
	if (retval == NULL) {
		if (UNEXPECTED(zend_string_equals(name, ZSTR_KNOWN(ZEND_STR_THIS)))) {
fetch_this:
			zend_fetch_this_var(type OPLINE_CC EXECUTE_DATA_CC);
			if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
				zend_tmp_string_release(tmp_name);
			}
			ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
		}
		if (type == BP_VAR_W) {
			retval = zend_hash_add_new(target_symbol_table, name, &EG(uninitialized_zval));
		} else if (type == BP_VAR_IS || type == BP_VAR_UNSET) {
			retval = &EG(uninitialized_zval);
		} else {
			if ((IS_TMP_VAR|IS_VAR) == IS_CV) {
				/* Keep name alive in case an error handler tries to free it. */
				zend_string_addref(name);
			}
			zend_error_unchecked(E_WARNING, "Undefined %svariable $%S",
				(opline->extended_value & ZEND_FETCH_GLOBAL ? "global " : ""), name);
			if (type == BP_VAR_RW && !EG(exception)) {
				retval = zend_hash_update(target_symbol_table, name, &EG(uninitialized_zval));
			} else {
				retval = &EG(uninitialized_zval);
			}
			if ((IS_TMP_VAR|IS_VAR) == IS_CV) {
				zend_string_release(name);
			}
		}
	/* GLOBAL or $$name variable may be an INDIRECT pointer to CV */
	} else if (Z_TYPE_P(retval) == IS_INDIRECT) {
		retval = Z_INDIRECT_P(retval);
		if (Z_TYPE_P(retval) == IS_UNDEF) {
			if (UNEXPECTED(zend_string_equals(name, ZSTR_KNOWN(ZEND_STR_THIS)))) {
				goto fetch_this;
			}
			if (type == BP_VAR_W) {
				ZVAL_NULL(retval);
			} else if (type == BP_VAR_IS || type == BP_VAR_UNSET) {
				retval = &EG(uninitialized_zval);
			} else {
				zend_error_unchecked(E_WARNING, "Undefined %svariable $%S",
					(opline->extended_value & ZEND_FETCH_GLOBAL ? "global " : ""), name);
				if (type == BP_VAR_RW && !EG(exception)) {
					ZVAL_NULL(retval);
				} else {
					retval = &EG(uninitialized_zval);
				}
			}
		}
	}

	if (!(opline->extended_value & ZEND_FETCH_GLOBAL_LOCK)) {
		zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
	}

	if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
		zend_tmp_string_release(tmp_name);
	}

	ZEND_ASSERT(retval != NULL);
	if (type == BP_VAR_R || type == BP_VAR_IS) {
		ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
	} else {
		ZVAL_INDIRECT(EX_VAR(opline->result.var), retval);
	}
	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

static zend_never_inline ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV_EX  zend_fetch_var_address_helper_SPEC_CV_UNUSED_TAILCALL(ZEND_OPCODE_HANDLER_ARGS_EX int type)
{
	USE_OPLINE
	zval *varname;
	zval *retval;
	zend_string *name, *tmp_name;
	HashTable *target_symbol_table;

	SAVE_OPLINE();
	varname = EX_VAR(opline->op1.var);

	if (IS_CV == IS_CONST) {
		name = Z_STR_P(varname);
	} else if (EXPECTED(Z_TYPE_P(varname) == IS_STRING)) {
		name = Z_STR_P(varname);
		tmp_name = NULL;
	} else {
		if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(varname) == IS_UNDEF)) {
			ZVAL_UNDEFINED_OP1();
		}
		name = zval_try_get_tmp_string(varname, &tmp_name);
		if (UNEXPECTED(!name)) {
			if (!(opline->extended_value & ZEND_FETCH_GLOBAL_LOCK)) {


			}
			ZVAL_UNDEF(EX_VAR(opline->result.var));
			HANDLE_EXCEPTION();
		}
	}

	target_symbol_table = zend_get_target_symbol_table(opline->extended_value EXECUTE_DATA_CC);
	retval = zend_hash_find_ex(target_symbol_table, name, IS_CV == IS_CONST);
	if (retval == NULL) {
		if (UNEXPECTED(zend_string_equals(name, ZSTR_KNOWN(ZEND_STR_THIS)))) {
fetch_this:
			zend_fetch_this_var(type OPLINE_CC EXECUTE_DATA_CC);
			if (IS_CV != IS_CONST) {
				zend_tmp_string_release(tmp_name);
			}
			ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
		}
		if (type == BP_VAR_W) {
			retval = zend_hash_add_new(target_symbol_table, name, &EG(uninitialized_zval));
		} else if (type == BP_VAR_IS || type == BP_VAR_UNSET) {
			retval = &EG(uninitialized_zval);
		} else {
			if (IS_CV == IS_CV) {
				/* Keep name alive in case an error handler tries to free it. */
				zend_string_addref(name);
			}
			zend_error_unchecked(E_WARNING, "Undefined %svariable $%S",
				(opline->extended_value & ZEND_FETCH_GLOBAL ? "global " : ""), name);
			if (type == BP_VAR_RW && !EG(exception)) {
				retval = zend_hash_update(target_symbol_table, name, &EG(uninitialized_zval));
			} else {
				retval = &EG(uninitialized_zval);
			}
			if (IS_CV == IS_CV) {
				zend_string_release(name);
			}
		}
	/* GLOBAL or $$name variable may be an INDIRECT pointer to CV */
	} else if (Z_TYPE_P(retval) == IS_INDIRECT) {
		retval = Z_INDIRECT_P(retval);
		if (Z_TYPE_P(retval) == IS_UNDEF) {
			if (UNEXPECTED(zend_string_equals(name, ZSTR_KNOWN(ZEND_STR_THIS)))) {
				goto fetch_this;
			}
			if (type == BP_VAR_W) {
				ZVAL_NULL(retval);
			} else if (type == BP_VAR_IS || type == BP_VAR_UNSET) {
				retval = &EG(uninitialized_zval);
			} else {
				zend_error_unchecked(E_WARNING, "Undefined %svariable $%S",
					(opline->extended_value & ZEND_FETCH_GLOBAL ? "global " : ""), name);
				if (type == BP_VAR_RW && !EG(exception)) {
					ZVAL_NULL(retval);
				} else {
					retval = &EG(uninitialized_zval);
				}
			}
		}
	}

	if (!(opline->extended_value & ZEND_FETCH_GLOBAL_LOCK)) {


	}

	if (IS_CV != IS_CONST) {
		zend_tmp_string_release(tmp_name);
	}

	ZEND_ASSERT(retval != NULL);
	if (type == BP_VAR_R || type == BP_VAR_IS) {
		ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
	} else {
		ZVAL_INDIRECT(EX_VAR(opline->result.var), retval);
	}
	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}

#pragma pop_macro("ZEND_VM_INTERRUPT")
#pragma pop_macro("ZEND_VM_CONTINUE")
#endif /* ZEND_VM_KIND == ZEND_VM_KIND_TAILCALL */

#if (ZEND_VM_KIND != ZEND_VM_KIND_CALL) && (ZEND_GCC_VERSION >= 4000) && !defined(__clang__)
# pragma GCC push_options
# pragma GCC optimize("no-gcse")
# pragma GCC optimize("no-ivopts")
#endif
#if defined(_WIN64) && defined(_M_X64)
/* See save_xmm_x86_64_ms_masm.asm */
void execute_ex_real(zend_execute_data *ex)
#else
ZEND_API void execute_ex(zend_execute_data *ex)
#endif
{
	DCL_OPLINE

#if defined(__GNUC__) && defined(__aarch64__)
	__asm__ __volatile__ (""::: "v8","v9","v10","v11","v12","v13","v14","v15");
#endif

#if defined(ZEND_VM_IP_GLOBAL_REG) || defined(ZEND_VM_FP_GLOBAL_REG)
	struct {
#ifdef ZEND_VM_HYBRID_JIT_RED_ZONE_SIZE
		char hybrid_jit_red_zone[ZEND_VM_HYBRID_JIT_RED_ZONE_SIZE];
#endif
#ifdef ZEND_VM_IP_GLOBAL_REG
		const zend_op *orig_opline;
#endif
#ifdef ZEND_VM_FP_GLOBAL_REG
		zend_execute_data *orig_execute_data;
#endif
	} vm_stack_data;
#endif
#ifdef ZEND_VM_IP_GLOBAL_REG
	vm_stack_data.orig_opline = opline;
#endif
#ifdef ZEND_VM_FP_GLOBAL_REG
	vm_stack_data.orig_execute_data = execute_data;
	execute_data = ex;
#else
	zend_execute_data *execute_data = ex;
#endif

#if (ZEND_VM_KIND == ZEND_VM_KIND_HYBRID)
	if (UNEXPECTED(execute_data == NULL)) {
		static zend_vm_opcode_handler_t const labels[] = {
			(void*)&&ZEND_NOP_SPEC_LABEL,
			(void*)&&ZEND_ADD_SPEC_CONST_CONST_LABEL,
			(void*)&&ZEND_ADD_SPEC_CONST_TMPVARCV_LABEL,
			(void*)&&ZEND_ADD_SPEC_CONST_TMPVARCV_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_ADD_SPEC_CONST_TMPVARCV_LABEL,
			(void*)&&ZEND_ADD_SPEC_TMPVARCV_CONST_LABEL,
			(void*)&&ZEND_ADD_SPEC_TMPVARCV_TMPVARCV_LABEL,
			(void*)&&ZEND_ADD_SPEC_TMPVARCV_TMPVARCV_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_ADD_SPEC_TMPVARCV_TMPVARCV_LABEL,
			(void*)&&ZEND_ADD_SPEC_TMPVARCV_CONST_LABEL,
			(void*)&&ZEND_ADD_SPEC_TMPVARCV_TMPVARCV_LABEL,
			(void*)&&ZEND_ADD_SPEC_TMPVARCV_TMPVARCV_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_ADD_SPEC_TMPVARCV_TMPVARCV_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_ADD_SPEC_TMPVARCV_CONST_LABEL,
			(void*)&&ZEND_ADD_SPEC_TMPVARCV_TMPVARCV_LABEL,
			(void*)&&ZEND_ADD_SPEC_TMPVARCV_TMPVARCV_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_ADD_SPEC_TMPVARCV_TMPVARCV_LABEL,
			(void*)&&ZEND_SUB_SPEC_CONST_CONST_LABEL,
			(void*)&&ZEND_SUB_SPEC_CONST_TMPVARCV_LABEL,
			(void*)&&ZEND_SUB_SPEC_CONST_TMPVARCV_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_SUB_SPEC_CONST_TMPVARCV_LABEL,
			(void*)&&ZEND_SUB_SPEC_TMPVARCV_CONST_LABEL,
			(void*)&&ZEND_SUB_SPEC_TMPVARCV_TMPVARCV_LABEL,
			(void*)&&ZEND_SUB_SPEC_TMPVARCV_TMPVARCV_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_SUB_SPEC_TMPVARCV_TMPVARCV_LABEL,
			(void*)&&ZEND_SUB_SPEC_TMPVARCV_CONST_LABEL,
			(void*)&&ZEND_SUB_SPEC_TMPVARCV_TMPVARCV_LABEL,
			(void*)&&ZEND_SUB_SPEC_TMPVARCV_TMPVARCV_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_SUB_SPEC_TMPVARCV_TMPVARCV_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_SUB_SPEC_TMPVARCV_CONST_LABEL,
			(void*)&&ZEND_SUB_SPEC_TMPVARCV_TMPVARCV_LABEL,
			(void*)&&ZEND_SUB_SPEC_TMPVARCV_TMPVARCV_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_SUB_SPEC_TMPVARCV_TMPVARCV_LABEL,
			(void*)&&ZEND_MUL_SPEC_CONST_CONST_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_MUL_SPEC_TMPVARCV_CONST_LABEL,
			(void*)&&ZEND_MUL_SPEC_TMPVARCV_TMPVARCV_LABEL,
			(void*)&&ZEND_MUL_SPEC_TMPVARCV_TMPVARCV_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_MUL_SPEC_TMPVARCV_TMPVARCV_LABEL,
			(void*)&&ZEND_MUL_SPEC_TMPVARCV_CONST_LABEL,
			(void*)&&ZEND_MUL_SPEC_TMPVARCV_TMPVARCV_LABEL,
			(void*)&&ZEND_MUL_SPEC_TMPVARCV_TMPVARCV_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_MUL_SPEC_TMPVARCV_TMPVARCV_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_MUL_SPEC_TMPVARCV_CONST_LABEL,
			(void*)&&ZEND_MUL_SPEC_TMPVARCV_TMPVARCV_LABEL,
			(void*)&&ZEND_MUL_SPEC_TMPVARCV_TMPVARCV_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_MUL_SPEC_TMPVARCV_TMPVARCV_LABEL,
			(void*)&&ZEND_DIV_SPEC_CONST_CONST_LABEL,
			(void*)&&ZEND_DIV_SPEC_CONST_TMPVAR_LABEL,
			(void*)&&ZEND_DIV_SPEC_CONST_TMPVAR_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_DIV_SPEC_CONST_CV_LABEL,
			(void*)&&ZEND_DIV_SPEC_TMPVAR_CONST_LABEL,
			(void*)&&ZEND_DIV_SPEC_TMPVAR_TMPVAR_LABEL,
			(void*)&&ZEND_DIV_SPEC_TMPVAR_TMPVAR_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_DIV_SPEC_TMPVAR_CV_LABEL,
			(void*)&&ZEND_DIV_SPEC_TMPVAR_CONST_LABEL,
			(void*)&&ZEND_DIV_SPEC_TMPVAR_TMPVAR_LABEL,
			(void*)&&ZEND_DIV_SPEC_TMPVAR_TMPVAR_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_DIV_SPEC_TMPVAR_CV_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_DIV_SPEC_CV_CONST_LABEL,
			(void*)&&ZEND_DIV_SPEC_CV_TMPVAR_LABEL,
			(void*)&&ZEND_DIV_SPEC_CV_TMPVAR_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_DIV_SPEC_CV_CV_LABEL,
			(void*)&&ZEND_MOD_SPEC_CONST_CONST_LABEL,
			(void*)&&ZEND_MOD_SPEC_CONST_TMPVARCV_LABEL,
			(void*)&&ZEND_MOD_SPEC_CONST_TMPVARCV_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_MOD_SPEC_CONST_TMPVARCV_LABEL,
			(void*)&&ZEND_MOD_SPEC_TMPVARCV_CONST_LABEL,
			(void*)&&ZEND_MOD_SPEC_TMPVARCV_TMPVARCV_LABEL,
			(void*)&&ZEND_MOD_SPEC_TMPVARCV_TMPVARCV_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_MOD_SPEC_TMPVARCV_TMPVARCV_LABEL,
			(void*)&&ZEND_MOD_SPEC_TMPVARCV_CONST_LABEL,
			(void*)&&ZEND_MOD_SPEC_TMPVARCV_TMPVARCV_LABEL,
			(void*)&&ZEND_MOD_SPEC_TMPVARCV_TMPVARCV_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_MOD_SPEC_TMPVARCV_TMPVARCV_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_MOD_SPEC_TMPVARCV_CONST_LABEL,
			(void*)&&ZEND_MOD_SPEC_TMPVARCV_TMPVARCV_LABEL,
			(void*)&&ZEND_MOD_SPEC_TMPVARCV_TMPVARCV_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_MOD_SPEC_TMPVARCV_TMPVARCV_LABEL,
			(void*)&&ZEND_SL_SPEC_CONST_CONST_LABEL,
			(void*)&&ZEND_SL_SPEC_CONST_TMPVARCV_LABEL,
			(void*)&&ZEND_SL_SPEC_CONST_TMPVARCV_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_SL_SPEC_CONST_TMPVARCV_LABEL,
			(void*)&&ZEND_SL_SPEC_TMPVARCV_CONST_LABEL,
			(void*)&&ZEND_SL_SPEC_TMPVARCV_TMPVARCV_LABEL,
			(void*)&&ZEND_SL_SPEC_TMPVARCV_TMPVARCV_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_SL_SPEC_TMPVARCV_TMPVARCV_LABEL,
			(void*)&&ZEND_SL_SPEC_TMPVARCV_CONST_LABEL,
			(void*)&&ZEND_SL_SPEC_TMPVARCV_TMPVARCV_LABEL,
			(void*)&&ZEND_SL_SPEC_TMPVARCV_TMPVARCV_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_SL_SPEC_TMPVARCV_TMPVARCV_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_SL_SPEC_TMPVARCV_CONST_LABEL,
			(void*)&&ZEND_SL_SPEC_TMPVARCV_TMPVARCV_LABEL,
			(void*)&&ZEND_SL_SPEC_TMPVARCV_TMPVARCV_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_SL_SPEC_TMPVARCV_TMPVARCV_LABEL,
			(void*)&&ZEND_SR_SPEC_CONST_CONST_LABEL,
			(void*)&&ZEND_SR_SPEC_CONST_TMPVARCV_LABEL,
			(void*)&&ZEND_SR_SPEC_CONST_TMPVARCV_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_SR_SPEC_CONST_TMPVARCV_LABEL,
			(void*)&&ZEND_SR_SPEC_TMPVARCV_CONST_LABEL,
			(void*)&&ZEND_SR_SPEC_TMPVARCV_TMPVARCV_LABEL,
			(void*)&&ZEND_SR_SPEC_TMPVARCV_TMPVARCV_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_SR_SPEC_TMPVARCV_TMPVARCV_LABEL,
			(void*)&&ZEND_SR_SPEC_TMPVARCV_CONST_LABEL,
			(void*)&&ZEND_SR_SPEC_TMPVARCV_TMPVARCV_LABEL,
			(void*)&&ZEND_SR_SPEC_TMPVARCV_TMPVARCV_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_SR_SPEC_TMPVARCV_TMPVARCV_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_SR_SPEC_TMPVARCV_CONST_LABEL,
			(void*)&&ZEND_SR_SPEC_TMPVARCV_TMPVARCV_LABEL,
			(void*)&&ZEND_SR_SPEC_TMPVARCV_TMPVARCV_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_SR_SPEC_TMPVARCV_TMPVARCV_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_CONCAT_SPEC_CONST_TMPVAR_LABEL,
			(void*)&&ZEND_CONCAT_SPEC_CONST_TMPVAR_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_CONCAT_SPEC_CONST_CV_LABEL,
			(void*)&&ZEND_CONCAT_SPEC_TMPVAR_CONST_LABEL,
			(void*)&&ZEND_CONCAT_SPEC_TMPVAR_TMPVAR_LABEL,
			(void*)&&ZEND_CONCAT_SPEC_TMPVAR_TMPVAR_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_CONCAT_SPEC_TMPVAR_CV_LABEL,
			(void*)&&ZEND_CONCAT_SPEC_TMPVAR_CONST_LABEL,
			(void*)&&ZEND_CONCAT_SPEC_TMPVAR_TMPVAR_LABEL,
			(void*)&&ZEND_CONCAT_SPEC_TMPVAR_TMPVAR_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_CONCAT_SPEC_TMPVAR_CV_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_CONCAT_SPEC_CV_CONST_LABEL,
			(void*)&&ZEND_CONCAT_SPEC_CV_TMPVAR_LABEL,
			(void*)&&ZEND_CONCAT_SPEC_CV_TMPVAR_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_CONCAT_SPEC_CV_CV_LABEL,
			(void*)&&ZEND_BW_OR_SPEC_CONST_CONST_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_BW_OR_SPEC_TMPVARCV_CONST_LABEL,
			(void*)&&ZEND_BW_OR_SPEC_TMPVARCV_TMPVARCV_LABEL,
			(void*)&&ZEND_BW_OR_SPEC_TMPVARCV_TMPVARCV_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_BW_OR_SPEC_TMPVARCV_TMPVARCV_LABEL,
			(void*)&&ZEND_BW_OR_SPEC_TMPVARCV_CONST_LABEL,
			(void*)&&ZEND_BW_OR_SPEC_TMPVARCV_TMPVARCV_LABEL,
			(void*)&&ZEND_BW_OR_SPEC_TMPVARCV_TMPVARCV_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_BW_OR_SPEC_TMPVARCV_TMPVARCV_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_BW_OR_SPEC_TMPVARCV_CONST_LABEL,
			(void*)&&ZEND_BW_OR_SPEC_TMPVARCV_TMPVARCV_LABEL,
			(void*)&&ZEND_BW_OR_SPEC_TMPVARCV_TMPVARCV_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_BW_OR_SPEC_TMPVARCV_TMPVARCV_LABEL,
			(void*)&&ZEND_BW_AND_SPEC_CONST_CONST_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_BW_AND_SPEC_TMPVARCV_CONST_LABEL,
			(void*)&&ZEND_BW_AND_SPEC_TMPVARCV_TMPVARCV_LABEL,
			(void*)&&ZEND_BW_AND_SPEC_TMPVARCV_TMPVARCV_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_BW_AND_SPEC_TMPVARCV_TMPVARCV_LABEL,
			(void*)&&ZEND_BW_AND_SPEC_TMPVARCV_CONST_LABEL,
			(void*)&&ZEND_BW_AND_SPEC_TMPVARCV_TMPVARCV_LABEL,
			(void*)&&ZEND_BW_AND_SPEC_TMPVARCV_TMPVARCV_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_BW_AND_SPEC_TMPVARCV_TMPVARCV_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_BW_AND_SPEC_TMPVARCV_CONST_LABEL,
			(void*)&&ZEND_BW_AND_SPEC_TMPVARCV_TMPVARCV_LABEL,
			(void*)&&ZEND_BW_AND_SPEC_TMPVARCV_TMPVARCV_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_BW_AND_SPEC_TMPVARCV_TMPVARCV_LABEL,
			(void*)&&ZEND_BW_XOR_SPEC_CONST_CONST_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_BW_XOR_SPEC_TMPVARCV_CONST_LABEL,
			(void*)&&ZEND_BW_XOR_SPEC_TMPVARCV_TMPVARCV_LABEL,
			(void*)&&ZEND_BW_XOR_SPEC_TMPVARCV_TMPVARCV_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_BW_XOR_SPEC_TMPVARCV_TMPVARCV_LABEL,
			(void*)&&ZEND_BW_XOR_SPEC_TMPVARCV_CONST_LABEL,
			(void*)&&ZEND_BW_XOR_SPEC_TMPVARCV_TMPVARCV_LABEL,
			(void*)&&ZEND_BW_XOR_SPEC_TMPVARCV_TMPVARCV_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_BW_XOR_SPEC_TMPVARCV_TMPVARCV_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_BW_XOR_SPEC_TMPVARCV_CONST_LABEL,
			(void*)&&ZEND_BW_XOR_SPEC_TMPVARCV_TMPVARCV_LABEL,
			(void*)&&ZEND_BW_XOR_SPEC_TMPVARCV_TMPVARCV_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_BW_XOR_SPEC_TMPVARCV_TMPVARCV_LABEL,
			(void*)&&ZEND_POW_SPEC_CONST_CONST_LABEL,
			(void*)&&ZEND_POW_SPEC_CONST_TMPVAR_LABEL,
			(void*)&&ZEND_POW_SPEC_CONST_TMPVAR_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_POW_SPEC_CONST_CV_LABEL,
			(void*)&&ZEND_POW_SPEC_TMPVAR_CONST_LABEL,
			(void*)&&ZEND_POW_SPEC_TMPVAR_TMPVAR_LABEL,
			(void*)&&ZEND_POW_SPEC_TMPVAR_TMPVAR_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_POW_SPEC_TMPVAR_CV_LABEL,
			(void*)&&ZEND_POW_SPEC_TMPVAR_CONST_LABEL,
			(void*)&&ZEND_POW_SPEC_TMPVAR_TMPVAR_LABEL,
			(void*)&&ZEND_POW_SPEC_TMPVAR_TMPVAR_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_POW_SPEC_TMPVAR_CV_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_POW_SPEC_CV_CONST_LABEL,
			(void*)&&ZEND_POW_SPEC_CV_TMPVAR_LABEL,
			(void*)&&ZEND_POW_SPEC_CV_TMPVAR_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_POW_SPEC_CV_CV_LABEL,
			(void*)&&ZEND_BW_NOT_SPEC_CONST_LABEL,
			(void*)&&ZEND_BW_NOT_SPEC_TMPVARCV_LABEL,
			(void*)&&ZEND_BW_NOT_SPEC_TMPVARCV_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_BW_NOT_SPEC_TMPVARCV_LABEL,
			(void*)&&ZEND_BOOL_NOT_SPEC_CONST_LABEL,
			(void*)&&ZEND_BOOL_NOT_SPEC_TMPVAR_LABEL,
			(void*)&&ZEND_BOOL_NOT_SPEC_TMPVAR_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_BOOL_NOT_SPEC_CV_LABEL,
			(void*)&&ZEND_BOOL_XOR_SPEC_CONST_CONST_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_BOOL_XOR_SPEC_TMPVAR_CONST_LABEL,
			(void*)&&ZEND_BOOL_XOR_SPEC_TMPVAR_TMPVAR_LABEL,
			(void*)&&ZEND_BOOL_XOR_SPEC_TMPVAR_TMPVAR_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_BOOL_XOR_SPEC_TMPVAR_CONST_LABEL,
			(void*)&&ZEND_BOOL_XOR_SPEC_TMPVAR_TMPVAR_LABEL,
			(void*)&&ZEND_BOOL_XOR_SPEC_TMPVAR_TMPVAR_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_BOOL_XOR_SPEC_CV_CONST_LABEL,
			(void*)&&ZEND_BOOL_XOR_SPEC_CV_TMPVAR_LABEL,
			(void*)&&ZEND_BOOL_XOR_SPEC_CV_TMPVAR_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_BOOL_XOR_SPEC_CV_CV_LABEL,
			(void*)&&ZEND_IS_IDENTICAL_SPEC_CONST_CONST_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_IS_IDENTICAL_SPEC_TMP_CONST_LABEL,
			(void*)&&ZEND_IS_IDENTICAL_SPEC_TMP_TMP_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_IS_IDENTICAL_SPEC_VAR_CONST_LABEL,
			(void*)&&ZEND_IS_IDENTICAL_SPEC_VAR_TMP_LABEL,
			(void*)&&ZEND_IS_IDENTICAL_SPEC_VAR_VAR_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_IS_IDENTICAL_SPEC_CV_CONST_LABEL,
			(void*)&&ZEND_IS_IDENTICAL_SPEC_CV_TMP_LABEL,
			(void*)&&ZEND_IS_IDENTICAL_SPEC_CV_VAR_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_IS_IDENTICAL_SPEC_CV_CV_LABEL,
			(void*)&&ZEND_IS_NOT_IDENTICAL_SPEC_CONST_CONST_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_IS_NOT_IDENTICAL_SPEC_TMP_CONST_LABEL,
			(void*)&&ZEND_IS_NOT_IDENTICAL_SPEC_TMP_TMP_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_IS_NOT_IDENTICAL_SPEC_VAR_CONST_LABEL,
			(void*)&&ZEND_IS_NOT_IDENTICAL_SPEC_VAR_TMP_LABEL,
			(void*)&&ZEND_IS_NOT_IDENTICAL_SPEC_VAR_VAR_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_IS_NOT_IDENTICAL_SPEC_CV_CONST_LABEL,
			(void*)&&ZEND_IS_NOT_IDENTICAL_SPEC_CV_TMP_LABEL,
			(void*)&&ZEND_IS_NOT_IDENTICAL_SPEC_CV_VAR_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_IS_NOT_IDENTICAL_SPEC_CV_CV_LABEL,
			(void*)&&ZEND_IS_EQUAL_SPEC_CONST_CONST_LABEL,
			(void*)&&ZEND_IS_EQUAL_SPEC_CONST_CONST_LABEL,
			(void*)&&ZEND_IS_EQUAL_SPEC_CONST_CONST_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_IS_EQUAL_SPEC_TMPVAR_CONST_LABEL,
			(void*)&&ZEND_IS_EQUAL_SPEC_TMPVAR_CONST_JMPZ_LABEL,
			(void*)&&ZEND_IS_EQUAL_SPEC_TMPVAR_CONST_JMPNZ_LABEL,
			(void*)&&ZEND_IS_EQUAL_SPEC_TMPVAR_TMPVAR_LABEL,
			(void*)&&ZEND_IS_EQUAL_SPEC_TMPVAR_TMPVAR_JMPZ_LABEL,
			(void*)&&ZEND_IS_EQUAL_SPEC_TMPVAR_TMPVAR_JMPNZ_LABEL,
			(void*)&&ZEND_IS_EQUAL_SPEC_TMPVAR_TMPVAR_LABEL,
			(void*)&&ZEND_IS_EQUAL_SPEC_TMPVAR_TMPVAR_JMPZ_LABEL,
			(void*)&&ZEND_IS_EQUAL_SPEC_TMPVAR_TMPVAR_JMPNZ_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_IS_EQUAL_SPEC_TMPVAR_CONST_LABEL,
			(void*)&&ZEND_IS_EQUAL_SPEC_TMPVAR_CONST_JMPZ_LABEL,
			(void*)&&ZEND_IS_EQUAL_SPEC_TMPVAR_CONST_JMPNZ_LABEL,
			(void*)&&ZEND_IS_EQUAL_SPEC_TMPVAR_TMPVAR_LABEL,
			(void*)&&ZEND_IS_EQUAL_SPEC_TMPVAR_TMPVAR_JMPZ_LABEL,
			(void*)&&ZEND_IS_EQUAL_SPEC_TMPVAR_TMPVAR_JMPNZ_LABEL,
			(void*)&&ZEND_IS_EQUAL_SPEC_TMPVAR_TMPVAR_LABEL,
			(void*)&&ZEND_IS_EQUAL_SPEC_TMPVAR_TMPVAR_JMPZ_LABEL,
			(void*)&&ZEND_IS_EQUAL_SPEC_TMPVAR_TMPVAR_JMPNZ_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_IS_EQUAL_SPEC_CV_CONST_LABEL,
			(void*)&&ZEND_IS_EQUAL_SPEC_CV_CONST_JMPZ_LABEL,
			(void*)&&ZEND_IS_EQUAL_SPEC_CV_CONST_JMPNZ_LABEL,
			(void*)&&ZEND_IS_EQUAL_SPEC_CV_TMPVAR_LABEL,
			(void*)&&ZEND_IS_EQUAL_SPEC_CV_TMPVAR_JMPZ_LABEL,
			(void*)&&ZEND_IS_EQUAL_SPEC_CV_TMPVAR_JMPNZ_LABEL,
			(void*)&&ZEND_IS_EQUAL_SPEC_CV_TMPVAR_LABEL,
			(void*)&&ZEND_IS_EQUAL_SPEC_CV_TMPVAR_JMPZ_LABEL,
			(void*)&&ZEND_IS_EQUAL_SPEC_CV_TMPVAR_JMPNZ_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_IS_EQUAL_SPEC_CV_CV_LABEL,
			(void*)&&ZEND_IS_EQUAL_SPEC_CV_CV_JMPZ_LABEL,
			(void*)&&ZEND_IS_EQUAL_SPEC_CV_CV_JMPNZ_LABEL,
			(void*)&&ZEND_IS_NOT_EQUAL_SPEC_CONST_CONST_LABEL,
			(void*)&&ZEND_IS_NOT_EQUAL_SPEC_CONST_CONST_LABEL,
			(void*)&&ZEND_IS_NOT_EQUAL_SPEC_CONST_CONST_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_CONST_LABEL,
			(void*)&&ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_CONST_JMPZ_LABEL,
			(void*)&&ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_CONST_JMPNZ_LABEL,
			(void*)&&ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_TMPVAR_LABEL,
			(void*)&&ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_TMPVAR_JMPZ_LABEL,
			(void*)&&ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_TMPVAR_JMPNZ_LABEL,
			(void*)&&ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_TMPVAR_LABEL,
			(void*)&&ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_TMPVAR_JMPZ_LABEL,
			(void*)&&ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_TMPVAR_JMPNZ_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_CONST_LABEL,
			(void*)&&ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_CONST_JMPZ_LABEL,
			(void*)&&ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_CONST_JMPNZ_LABEL,
			(void*)&&ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_TMPVAR_LABEL,
			(void*)&&ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_TMPVAR_JMPZ_LABEL,
			(void*)&&ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_TMPVAR_JMPNZ_LABEL,
			(void*)&&ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_TMPVAR_LABEL,
			(void*)&&ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_TMPVAR_JMPZ_LABEL,
			(void*)&&ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_TMPVAR_JMPNZ_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_IS_NOT_EQUAL_SPEC_CV_CONST_LABEL,
			(void*)&&ZEND_IS_NOT_EQUAL_SPEC_CV_CONST_JMPZ_LABEL,
			(void*)&&ZEND_IS_NOT_EQUAL_SPEC_CV_CONST_JMPNZ_LABEL,
			(void*)&&ZEND_IS_NOT_EQUAL_SPEC_CV_TMPVAR_LABEL,
			(void*)&&ZEND_IS_NOT_EQUAL_SPEC_CV_TMPVAR_JMPZ_LABEL,
			(void*)&&ZEND_IS_NOT_EQUAL_SPEC_CV_TMPVAR_JMPNZ_LABEL,
			(void*)&&ZEND_IS_NOT_EQUAL_SPEC_CV_TMPVAR_LABEL,
			(void*)&&ZEND_IS_NOT_EQUAL_SPEC_CV_TMPVAR_JMPZ_LABEL,
			(void*)&&ZEND_IS_NOT_EQUAL_SPEC_CV_TMPVAR_JMPNZ_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_IS_NOT_EQUAL_SPEC_CV_CV_LABEL,
			(void*)&&ZEND_IS_NOT_EQUAL_SPEC_CV_CV_JMPZ_LABEL,
			(void*)&&ZEND_IS_NOT_EQUAL_SPEC_CV_CV_JMPNZ_LABEL,
			(void*)&&ZEND_IS_SMALLER_SPEC_CONST_CONST_LABEL,
			(void*)&&ZEND_IS_SMALLER_SPEC_CONST_CONST_LABEL,
			(void*)&&ZEND_IS_SMALLER_SPEC_CONST_CONST_LABEL,
			(void*)&&ZEND_IS_SMALLER_SPEC_CONST_TMPVARCV_LABEL,
			(void*)&&ZEND_IS_SMALLER_SPEC_CONST_TMPVARCV_JMPZ_LABEL,
			(void*)&&ZEND_IS_SMALLER_SPEC_CONST_TMPVARCV_JMPNZ_LABEL,
			(void*)&&ZEND_IS_SMALLER_SPEC_CONST_TMPVARCV_LABEL,
			(void*)&&ZEND_IS_SMALLER_SPEC_CONST_TMPVARCV_JMPZ_LABEL,
			(void*)&&ZEND_IS_SMALLER_SPEC_CONST_TMPVARCV_JMPNZ_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_IS_SMALLER_SPEC_CONST_TMPVARCV_LABEL,
			(void*)&&ZEND_IS_SMALLER_SPEC_CONST_TMPVARCV_JMPZ_LABEL,
			(void*)&&ZEND_IS_SMALLER_SPEC_CONST_TMPVARCV_JMPNZ_LABEL,
			(void*)&&ZEND_IS_SMALLER_SPEC_TMPVARCV_CONST_LABEL,
			(void*)&&ZEND_IS_SMALLER_SPEC_TMPVARCV_CONST_JMPZ_LABEL,
			(void*)&&ZEND_IS_SMALLER_SPEC_TMPVARCV_CONST_JMPNZ_LABEL,
			(void*)&&ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_LABEL,
			(void*)&&ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
			(void*)&&ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
			(void*)&&ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_LABEL,
			(void*)&&ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
			(void*)&&ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_LABEL,
			(void*)&&ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
			(void*)&&ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
			(void*)&&ZEND_IS_SMALLER_SPEC_TMPVARCV_CONST_LABEL,
			(void*)&&ZEND_IS_SMALLER_SPEC_TMPVARCV_CONST_JMPZ_LABEL,
			(void*)&&ZEND_IS_SMALLER_SPEC_TMPVARCV_CONST_JMPNZ_LABEL,
			(void*)&&ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_LABEL,
			(void*)&&ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
			(void*)&&ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
			(void*)&&ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_LABEL,
			(void*)&&ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
			(void*)&&ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_LABEL,
			(void*)&&ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
			(void*)&&ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_IS_SMALLER_SPEC_TMPVARCV_CONST_LABEL,
			(void*)&&ZEND_IS_SMALLER_SPEC_TMPVARCV_CONST_JMPZ_LABEL,
			(void*)&&ZEND_IS_SMALLER_SPEC_TMPVARCV_CONST_JMPNZ_LABEL,
			(void*)&&ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_LABEL,
			(void*)&&ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
			(void*)&&ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
			(void*)&&ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_LABEL,
			(void*)&&ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
			(void*)&&ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_LABEL,
			(void*)&&ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
			(void*)&&ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_CONST_LABEL,
			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_CONST_LABEL,
			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_CONST_LABEL,
			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_TMPVARCV_LABEL,
			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_TMPVARCV_JMPZ_LABEL,
			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_TMPVARCV_JMPNZ_LABEL,
			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_TMPVARCV_LABEL,
			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_TMPVARCV_JMPZ_LABEL,
			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_TMPVARCV_JMPNZ_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_TMPVARCV_LABEL,
			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_TMPVARCV_JMPZ_LABEL,
			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_TMPVARCV_JMPNZ_LABEL,
			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_CONST_LABEL,
			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_CONST_JMPZ_LABEL,
			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_CONST_JMPNZ_LABEL,
			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_LABEL,
			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_LABEL,
			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_LABEL,
			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_CONST_LABEL,
			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_CONST_JMPZ_LABEL,
			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_CONST_JMPNZ_LABEL,
			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_LABEL,
			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_LABEL,
			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_LABEL,
			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_CONST_LABEL,
			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_CONST_JMPZ_LABEL,
			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_CONST_JMPNZ_LABEL,
			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_LABEL,
			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_LABEL,
			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_LABEL,
			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_ASSIGN_SPEC_VAR_CONST_RETVAL_UNUSED_LABEL,
			(void*)&&ZEND_ASSIGN_SPEC_VAR_CONST_RETVAL_USED_LABEL,
			(void*)&&ZEND_ASSIGN_SPEC_VAR_TMP_RETVAL_UNUSED_LABEL,
			(void*)&&ZEND_ASSIGN_SPEC_VAR_TMP_RETVAL_USED_LABEL,
			(void*)&&ZEND_ASSIGN_SPEC_VAR_VAR_RETVAL_UNUSED_LABEL,
			(void*)&&ZEND_ASSIGN_SPEC_VAR_VAR_RETVAL_USED_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_ASSIGN_SPEC_VAR_CV_RETVAL_UNUSED_LABEL,
			(void*)&&ZEND_ASSIGN_SPEC_VAR_CV_RETVAL_USED_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_ASSIGN_SPEC_CV_CONST_RETVAL_UNUSED_LABEL,
			(void*)&&ZEND_ASSIGN_SPEC_CV_CONST_RETVAL_USED_LABEL,
			(void*)&&ZEND_ASSIGN_SPEC_CV_TMP_RETVAL_UNUSED_LABEL,
			(void*)&&ZEND_ASSIGN_SPEC_CV_TMP_RETVAL_USED_LABEL,
			(void*)&&ZEND_ASSIGN_SPEC_CV_VAR_RETVAL_UNUSED_LABEL,
			(void*)&&ZEND_ASSIGN_SPEC_CV_VAR_RETVAL_USED_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_ASSIGN_SPEC_CV_CV_RETVAL_UNUSED_LABEL,
			(void*)&&ZEND_ASSIGN_SPEC_CV_CV_RETVAL_USED_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_ASSIGN_DIM_SPEC_VAR_CONST_OP_DATA_CONST_LABEL,
			(void*)&&ZEND_ASSIGN_DIM_SPEC_VAR_CONST_OP_DATA_TMP_LABEL,
			(void*)&&ZEND_ASSIGN_DIM_SPEC_VAR_CONST_OP_DATA_VAR_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_ASSIGN_DIM_SPEC_VAR_CONST_OP_DATA_CV_LABEL,
			(void*)&&ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_DATA_CONST_LABEL,
			(void*)&&ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_DATA_TMP_LABEL,
			(void*)&&ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_DATA_VAR_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_DATA_CV_LABEL,
			(void*)&&ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_DATA_CONST_LABEL,
			(void*)&&ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_DATA_TMP_LABEL,
			(void*)&&ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_DATA_VAR_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_DATA_CV_LABEL,
			(void*)&&ZEND_ASSIGN_DIM_SPEC_VAR_UNUSED_OP_DATA_CONST_LABEL,
			(void*)&&ZEND_ASSIGN_DIM_SPEC_VAR_UNUSED_OP_DATA_TMP_LABEL,
			(void*)&&ZEND_ASSIGN_DIM_SPEC_VAR_UNUSED_OP_DATA_VAR_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_ASSIGN_DIM_SPEC_VAR_UNUSED_OP_DATA_CV_LABEL,
			(void*)&&ZEND_ASSIGN_DIM_SPEC_VAR_CV_OP_DATA_CONST_LABEL,
			(void*)&&ZEND_ASSIGN_DIM_SPEC_VAR_CV_OP_DATA_TMP_LABEL,
			(void*)&&ZEND_ASSIGN_DIM_SPEC_VAR_CV_OP_DATA_VAR_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_ASSIGN_DIM_SPEC_VAR_CV_OP_DATA_CV_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_ASSIGN_DIM_SPEC_CV_CONST_OP_DATA_CONST_LABEL,
			(void*)&&ZEND_ASSIGN_DIM_SPEC_CV_CONST_OP_DATA_TMP_LABEL,
			(void*)&&ZEND_ASSIGN_DIM_SPEC_CV_CONST_OP_DATA_VAR_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_ASSIGN_DIM_SPEC_CV_CONST_OP_DATA_CV_LABEL,
			(void*)&&ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_DATA_CONST_LABEL,
			(void*)&&ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_DATA_TMP_LABEL,
			(void*)&&ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_DATA_VAR_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_DATA_CV_LABEL,
			(void*)&&ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_DATA_CONST_LABEL,
			(void*)&&ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_DATA_TMP_LABEL,
			(void*)&&ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_DATA_VAR_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_DATA_CV_LABEL,
			(void*)&&ZEND_ASSIGN_DIM_SPEC_CV_UNUSED_OP_DATA_CONST_LABEL,
			(void*)&&ZEND_ASSIGN_DIM_SPEC_CV_UNUSED_OP_DATA_TMP_LABEL,
			(void*)&&ZEND_ASSIGN_DIM_SPEC_CV_UNUSED_OP_DATA_VAR_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_ASSIGN_DIM_SPEC_CV_UNUSED_OP_DATA_CV_LABEL,
			(void*)&&ZEND_ASSIGN_DIM_SPEC_CV_CV_OP_DATA_CONST_LABEL,
			(void*)&&ZEND_ASSIGN_DIM_SPEC_CV_CV_OP_DATA_TMP_LABEL,
			(void*)&&ZEND_ASSIGN_DIM_SPEC_CV_CV_OP_DATA_VAR_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_ASSIGN_DIM_SPEC_CV_CV_OP_DATA_CV_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_ASSIGN_OBJ_SPEC_VAR_CONST_OP_DATA_CONST_LABEL,
			(void*)&&ZEND_ASSIGN_OBJ_SPEC_VAR_CONST_OP_DATA_TMP_LABEL,
			(void*)&&ZEND_ASSIGN_OBJ_SPEC_VAR_CONST_OP_DATA_VAR_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_ASSIGN_OBJ_SPEC_VAR_CONST_OP_DATA_CV_LABEL,
			(void*)&&ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_CONST_LABEL,
			(void*)&&ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_TMP_LABEL,
			(void*)&&ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_VAR_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_CV_LABEL,
			(void*)&&ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_CONST_LABEL,
			(void*)&&ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_TMP_LABEL,
			(void*)&&ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_VAR_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_CV_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_ASSIGN_OBJ_SPEC_VAR_CV_OP_DATA_CONST_LABEL,
			(void*)&&ZEND_ASSIGN_OBJ_SPEC_VAR_CV_OP_DATA_TMP_LABEL,
			(void*)&&ZEND_ASSIGN_OBJ_SPEC_VAR_CV_OP_DATA_VAR_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_ASSIGN_OBJ_SPEC_VAR_CV_OP_DATA_CV_LABEL,
			(void*)&&ZEND_ASSIGN_OBJ_SPEC_UNUSED_CONST_OP_DATA_CONST_LABEL,
			(void*)&&ZEND_ASSIGN_OBJ_SPEC_UNUSED_CONST_OP_DATA_TMP_LABEL,
			(void*)&&ZEND_ASSIGN_OBJ_SPEC_UNUSED_CONST_OP_DATA_VAR_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_ASSIGN_OBJ_SPEC_UNUSED_CONST_OP_DATA_CV_LABEL,
			(void*)&&ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_OP_DATA_CONST_LABEL,
			(void*)&&ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_OP_DATA_TMP_LABEL,
			(void*)&&ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_OP_DATA_VAR_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_OP_DATA_CV_LABEL,
			(void*)&&ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_OP_DATA_CONST_LABEL,
			(void*)&&ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_OP_DATA_TMP_LABEL,
			(void*)&&ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_OP_DATA_VAR_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_OP_DATA_CV_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_ASSIGN_OBJ_SPEC_UNUSED_CV_OP_DATA_CONST_LABEL,
			(void*)&&ZEND_ASSIGN_OBJ_SPEC_UNUSED_CV_OP_DATA_TMP_LABEL,
			(void*)&&ZEND_ASSIGN_OBJ_SPEC_UNUSED_CV_OP_DATA_VAR_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_ASSIGN_OBJ_SPEC_UNUSED_CV_OP_DATA_CV_LABEL,
			(void*)&&ZEND_ASSIGN_OBJ_SPEC_CV_CONST_OP_DATA_CONST_LABEL,
			(void*)&&ZEND_ASSIGN_OBJ_SPEC_CV_CONST_OP_DATA_TMP_LABEL,
			(void*)&&ZEND_ASSIGN_OBJ_SPEC_CV_CONST_OP_DATA_VAR_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_ASSIGN_OBJ_SPEC_CV_CONST_OP_DATA_CV_LABEL,
			(void*)&&ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_DATA_CONST_LABEL,
			(void*)&&ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_DATA_TMP_LABEL,
			(void*)&&ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_DATA_VAR_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_DATA_CV_LABEL,
			(void*)&&ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_DATA_CONST_LABEL,
			(void*)&&ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_DATA_TMP_LABEL,
			(void*)&&ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_DATA_VAR_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_DATA_CV_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_ASSIGN_OBJ_SPEC_CV_CV_OP_DATA_CONST_LABEL,
			(void*)&&ZEND_ASSIGN_OBJ_SPEC_CV_CV_OP_DATA_TMP_LABEL,
			(void*)&&ZEND_ASSIGN_OBJ_SPEC_CV_CV_OP_DATA_VAR_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_ASSIGN_OBJ_SPEC_CV_CV_OP_DATA_CV_LABEL,
			(void*)&&ZEND_ASSIGN_STATIC_PROP_SPEC_OP_DATA_CONST_LABEL,
			(void*)&&ZEND_ASSIGN_STATIC_PROP_SPEC_OP_DATA_TMP_LABEL,
			(void*)&&ZEND_ASSIGN_STATIC_PROP_SPEC_OP_DATA_VAR_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_ASSIGN_STATIC_PROP_SPEC_OP_DATA_CV_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_ASSIGN_OP_SPEC_VAR_CONST_LABEL,
			(void*)&&ZEND_ASSIGN_OP_SPEC_VAR_TMPVAR_LABEL,
			(void*)&&ZEND_ASSIGN_OP_SPEC_VAR_TMPVAR_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_ASSIGN_OP_SPEC_VAR_CV_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_ASSIGN_OP_SPEC_CV_CONST_LABEL,
			(void*)&&ZEND_ASSIGN_OP_SPEC_CV_TMPVAR_LABEL,
			(void*)&&ZEND_ASSIGN_OP_SPEC_CV_TMPVAR_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_ASSIGN_OP_SPEC_CV_CV_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_ASSIGN_DIM_OP_SPEC_VAR_CONST_LABEL,
			(void*)&&ZEND_ASSIGN_DIM_OP_SPEC_VAR_TMPVAR_LABEL,
			(void*)&&ZEND_ASSIGN_DIM_OP_SPEC_VAR_TMPVAR_LABEL,
			(void*)&&ZEND_ASSIGN_DIM_OP_SPEC_VAR_UNUSED_LABEL,
			(void*)&&ZEND_ASSIGN_DIM_OP_SPEC_VAR_CV_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_ASSIGN_DIM_OP_SPEC_CV_CONST_LABEL,
			(void*)&&ZEND_ASSIGN_DIM_OP_SPEC_CV_TMPVAR_LABEL,
			(void*)&&ZEND_ASSIGN_DIM_OP_SPEC_CV_TMPVAR_LABEL,
			(void*)&&ZEND_ASSIGN_DIM_OP_SPEC_CV_UNUSED_LABEL,
			(void*)&&ZEND_ASSIGN_DIM_OP_SPEC_CV_CV_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_ASSIGN_OBJ_OP_SPEC_VAR_CONST_LABEL,
			(void*)&&ZEND_ASSIGN_OBJ_OP_SPEC_VAR_TMPVAR_LABEL,
			(void*)&&ZEND_ASSIGN_OBJ_OP_SPEC_VAR_TMPVAR_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_ASSIGN_OBJ_OP_SPEC_VAR_CV_LABEL,
			(void*)&&ZEND_ASSIGN_OBJ_OP_SPEC_UNUSED_CONST_LABEL,
			(void*)&&ZEND_ASSIGN_OBJ_OP_SPEC_UNUSED_TMPVAR_LABEL,
			(void*)&&ZEND_ASSIGN_OBJ_OP_SPEC_UNUSED_TMPVAR_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_ASSIGN_OBJ_OP_SPEC_UNUSED_CV_LABEL,
			(void*)&&ZEND_ASSIGN_OBJ_OP_SPEC_CV_CONST_LABEL,
			(void*)&&ZEND_ASSIGN_OBJ_OP_SPEC_CV_TMPVAR_LABEL,
			(void*)&&ZEND_ASSIGN_OBJ_OP_SPEC_CV_TMPVAR_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_ASSIGN_OBJ_OP_SPEC_CV_CV_LABEL,
			(void*)&&ZEND_ASSIGN_STATIC_PROP_OP_SPEC_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_ASSIGN_REF_SPEC_VAR_VAR_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_ASSIGN_REF_SPEC_VAR_CV_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_ASSIGN_REF_SPEC_CV_VAR_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_ASSIGN_REF_SPEC_CV_CV_LABEL,
			(void*)&&ZEND_QM_ASSIGN_SPEC_CONST_LABEL,
			(void*)&&ZEND_QM_ASSIGN_SPEC_TMP_LABEL,
			(void*)&&ZEND_QM_ASSIGN_SPEC_VAR_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_QM_ASSIGN_SPEC_CV_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_ASSIGN_OBJ_REF_SPEC_VAR_CONST_OP_DATA_VAR_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_ASSIGN_OBJ_REF_SPEC_VAR_CONST_OP_DATA_CV_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_ASSIGN_OBJ_REF_SPEC_VAR_TMPVAR_OP_DATA_VAR_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_ASSIGN_OBJ_REF_SPEC_VAR_TMPVAR_OP_DATA_CV_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_ASSIGN_OBJ_REF_SPEC_VAR_TMPVAR_OP_DATA_VAR_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_ASSIGN_OBJ_REF_SPEC_VAR_TMPVAR_OP_DATA_CV_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_ASSIGN_OBJ_REF_SPEC_VAR_CV_OP_DATA_VAR_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_ASSIGN_OBJ_REF_SPEC_VAR_CV_OP_DATA_CV_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_ASSIGN_OBJ_REF_SPEC_UNUSED_CONST_OP_DATA_VAR_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_ASSIGN_OBJ_REF_SPEC_UNUSED_CONST_OP_DATA_CV_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_ASSIGN_OBJ_REF_SPEC_UNUSED_TMPVAR_OP_DATA_VAR_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_ASSIGN_OBJ_REF_SPEC_UNUSED_TMPVAR_OP_DATA_CV_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_ASSIGN_OBJ_REF_SPEC_UNUSED_TMPVAR_OP_DATA_VAR_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_ASSIGN_OBJ_REF_SPEC_UNUSED_TMPVAR_OP_DATA_CV_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_ASSIGN_OBJ_REF_SPEC_UNUSED_CV_OP_DATA_VAR_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_ASSIGN_OBJ_REF_SPEC_UNUSED_CV_OP_DATA_CV_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_ASSIGN_OBJ_REF_SPEC_CV_CONST_OP_DATA_VAR_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_ASSIGN_OBJ_REF_SPEC_CV_CONST_OP_DATA_CV_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_ASSIGN_OBJ_REF_SPEC_CV_TMPVAR_OP_DATA_VAR_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_ASSIGN_OBJ_REF_SPEC_CV_TMPVAR_OP_DATA_CV_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_ASSIGN_OBJ_REF_SPEC_CV_TMPVAR_OP_DATA_VAR_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_ASSIGN_OBJ_REF_SPEC_CV_TMPVAR_OP_DATA_CV_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_ASSIGN_OBJ_REF_SPEC_CV_CV_OP_DATA_VAR_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_ASSIGN_OBJ_REF_SPEC_CV_CV_OP_DATA_CV_LABEL,
			(void*)&&ZEND_ASSIGN_STATIC_PROP_REF_SPEC_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_PRE_INC_SPEC_VAR_RETVAL_UNUSED_LABEL,
			(void*)&&ZEND_PRE_INC_SPEC_VAR_RETVAL_USED_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_PRE_INC_SPEC_CV_RETVAL_UNUSED_LABEL,
			(void*)&&ZEND_PRE_INC_SPEC_CV_RETVAL_USED_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_PRE_DEC_SPEC_VAR_RETVAL_UNUSED_LABEL,
			(void*)&&ZEND_PRE_DEC_SPEC_VAR_RETVAL_USED_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_PRE_DEC_SPEC_CV_RETVAL_UNUSED_LABEL,
			(void*)&&ZEND_PRE_DEC_SPEC_CV_RETVAL_USED_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_POST_INC_SPEC_VAR_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_POST_INC_SPEC_CV_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_POST_DEC_SPEC_VAR_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_POST_DEC_SPEC_CV_LABEL,
			(void*)&&ZEND_PRE_INC_STATIC_PROP_SPEC_LABEL,
			(void*)&&ZEND_POST_INC_STATIC_PROP_SPEC_LABEL,
			(void*)&&ZEND_JMP_SPEC_LABEL,
			(void*)&&ZEND_JMPZ_SPEC_CONST_LABEL,
			(void*)&&ZEND_JMPZ_SPEC_TMPVAR_LABEL,
			(void*)&&ZEND_JMPZ_SPEC_TMPVAR_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_JMPZ_SPEC_CV_LABEL,
			(void*)&&ZEND_JMPNZ_SPEC_CONST_LABEL,
			(void*)&&ZEND_JMPNZ_SPEC_TMPVAR_LABEL,
			(void*)&&ZEND_JMPNZ_SPEC_TMPVAR_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_JMPNZ_SPEC_CV_LABEL,
			(void*)&&ZEND_JMPZ_EX_SPEC_CONST_LABEL,
			(void*)&&ZEND_JMPZ_EX_SPEC_TMPVAR_LABEL,
			(void*)&&ZEND_JMPZ_EX_SPEC_TMPVAR_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_JMPZ_EX_SPEC_CV_LABEL,
			(void*)&&ZEND_JMPNZ_EX_SPEC_CONST_LABEL,
			(void*)&&ZEND_JMPNZ_EX_SPEC_TMPVAR_LABEL,
			(void*)&&ZEND_JMPNZ_EX_SPEC_TMPVAR_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_JMPNZ_EX_SPEC_CV_LABEL,
			(void*)&&ZEND_CASE_SPEC_TMPVAR_CONST_LABEL,
			(void*)&&ZEND_CASE_SPEC_TMPVAR_TMPVAR_LABEL,
			(void*)&&ZEND_CASE_SPEC_TMPVAR_TMPVAR_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_CASE_SPEC_TMPVAR_CV_LABEL,
			(void*)&&ZEND_CHECK_VAR_SPEC_CV_UNUSED_LABEL,
			(void*)&&ZEND_SEND_VAR_NO_REF_EX_SPEC_VAR_CONST_LABEL,
			(void*)&&ZEND_SEND_VAR_NO_REF_EX_SPEC_VAR_CONST_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_SEND_VAR_NO_REF_EX_SPEC_VAR_UNUSED_LABEL,
			(void*)&&ZEND_SEND_VAR_NO_REF_EX_SPEC_VAR_UNUSED_QUICK_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_CAST_SPEC_CONST_LABEL,
			(void*)&&ZEND_CAST_SPEC_TMP_LABEL,
			(void*)&&ZEND_CAST_SPEC_VAR_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_CAST_SPEC_CV_LABEL,
			(void*)&&ZEND_BOOL_SPEC_CONST_LABEL,
			(void*)&&ZEND_BOOL_SPEC_TMPVAR_LABEL,
			(void*)&&ZEND_BOOL_SPEC_TMPVAR_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_BOOL_SPEC_CV_LABEL,
			(void*)&&ZEND_FAST_CONCAT_SPEC_CONST_CONST_LABEL,
			(void*)&&ZEND_FAST_CONCAT_SPEC_CONST_TMPVAR_LABEL,
			(void*)&&ZEND_FAST_CONCAT_SPEC_CONST_TMPVAR_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_FAST_CONCAT_SPEC_CONST_CV_LABEL,
			(void*)&&ZEND_FAST_CONCAT_SPEC_TMPVAR_CONST_LABEL,
			(void*)&&ZEND_FAST_CONCAT_SPEC_TMPVAR_TMPVAR_LABEL,
			(void*)&&ZEND_FAST_CONCAT_SPEC_TMPVAR_TMPVAR_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_FAST_CONCAT_SPEC_TMPVAR_CV_LABEL,
			(void*)&&ZEND_FAST_CONCAT_SPEC_TMPVAR_CONST_LABEL,
			(void*)&&ZEND_FAST_CONCAT_SPEC_TMPVAR_TMPVAR_LABEL,
			(void*)&&ZEND_FAST_CONCAT_SPEC_TMPVAR_TMPVAR_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_FAST_CONCAT_SPEC_TMPVAR_CV_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_FAST_CONCAT_SPEC_CV_CONST_LABEL,
			(void*)&&ZEND_FAST_CONCAT_SPEC_CV_TMPVAR_LABEL,
			(void*)&&ZEND_FAST_CONCAT_SPEC_CV_TMPVAR_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_FAST_CONCAT_SPEC_CV_CV_LABEL,
			(void*)&&ZEND_ROPE_INIT_SPEC_UNUSED_CONST_LABEL,
			(void*)&&ZEND_ROPE_INIT_SPEC_UNUSED_TMPVAR_LABEL,
			(void*)&&ZEND_ROPE_INIT_SPEC_UNUSED_TMPVAR_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_ROPE_INIT_SPEC_UNUSED_CV_LABEL,
			(void*)&&ZEND_ROPE_ADD_SPEC_TMP_CONST_LABEL,
			(void*)&&ZEND_ROPE_ADD_SPEC_TMP_TMPVAR_LABEL,
			(void*)&&ZEND_ROPE_ADD_SPEC_TMP_TMPVAR_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_ROPE_ADD_SPEC_TMP_CV_LABEL,
			(void*)&&ZEND_ROPE_END_SPEC_TMP_CONST_LABEL,
			(void*)&&ZEND_ROPE_END_SPEC_TMP_TMPVAR_LABEL,
			(void*)&&ZEND_ROPE_END_SPEC_TMP_TMPVAR_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_ROPE_END_SPEC_TMP_CV_LABEL,
			(void*)&&ZEND_BEGIN_SILENCE_SPEC_LABEL,
			(void*)&&ZEND_END_SILENCE_SPEC_TMP_LABEL,
			(void*)&&ZEND_INIT_FCALL_BY_NAME_SPEC_CONST_LABEL,
			(void*)&&ZEND_DO_FCALL_SPEC_RETVAL_UNUSED_LABEL,
			(void*)&&ZEND_DO_FCALL_SPEC_RETVAL_USED_LABEL,
			(void*)&&ZEND_DO_FCALL_SPEC_OBSERVER_LABEL,
			(void*)&&ZEND_DO_FCALL_SPEC_OBSERVER_LABEL,
			(void*)&&ZEND_INIT_FCALL_SPEC_CONST_LABEL,
			(void*)&&ZEND_RETURN_SPEC_CONST_LABEL,
			(void*)&&ZEND_RETURN_SPEC_OBSERVER_LABEL,
			(void*)&&ZEND_RETURN_SPEC_TMP_LABEL,
			(void*)&&ZEND_RETURN_SPEC_OBSERVER_LABEL,
			(void*)&&ZEND_RETURN_SPEC_VAR_LABEL,
			(void*)&&ZEND_RETURN_SPEC_OBSERVER_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_RETURN_SPEC_CV_LABEL,
			(void*)&&ZEND_RETURN_SPEC_OBSERVER_LABEL,
			(void*)&&ZEND_RECV_SPEC_UNUSED_LABEL,
			(void*)&&ZEND_RECV_INIT_SPEC_CONST_LABEL,
			(void*)&&ZEND_SEND_VAL_SPEC_CONST_CONST_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_SEND_VAL_SPEC_CONST_UNUSED_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_SEND_VAL_SPEC_TMPVAR_CONST_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_SEND_VAL_SPEC_TMPVAR_UNUSED_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_SEND_VAL_SPEC_TMPVAR_CONST_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_SEND_VAL_SPEC_TMPVAR_UNUSED_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_SEND_VAR_EX_SPEC_VAR_CONST_LABEL,
			(void*)&&ZEND_SEND_VAR_EX_SPEC_VAR_CONST_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_SEND_VAR_EX_SPEC_VAR_UNUSED_LABEL,
			(void*)&&ZEND_SEND_VAR_EX_SPEC_VAR_UNUSED_QUICK_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_SEND_VAR_EX_SPEC_CV_CONST_LABEL,
			(void*)&&ZEND_SEND_VAR_EX_SPEC_CV_CONST_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_SEND_VAR_EX_SPEC_CV_UNUSED_LABEL,
			(void*)&&ZEND_SEND_VAR_EX_SPEC_CV_UNUSED_QUICK_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_SEND_REF_SPEC_VAR_CONST_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_SEND_REF_SPEC_VAR_UNUSED_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_SEND_REF_SPEC_CV_CONST_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_SEND_REF_SPEC_CV_UNUSED_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NEW_SPEC_CONST_UNUSED_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NEW_SPEC_VAR_UNUSED_LABEL,
			(void*)&&ZEND_NEW_SPEC_UNUSED_UNUSED_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_INIT_NS_FCALL_BY_NAME_SPEC_CONST_LABEL,
			(void*)&&ZEND_FREE_SPEC_TMPVAR_LABEL,
			(void*)&&ZEND_INIT_ARRAY_SPEC_CONST_CONST_LABEL,
			(void*)&&ZEND_INIT_ARRAY_SPEC_CONST_TMPVAR_LABEL,
			(void*)&&ZEND_INIT_ARRAY_SPEC_CONST_TMPVAR_LABEL,
			(void*)&&ZEND_INIT_ARRAY_SPEC_CONST_UNUSED_LABEL,
			(void*)&&ZEND_INIT_ARRAY_SPEC_CONST_CV_LABEL,
			(void*)&&ZEND_INIT_ARRAY_SPEC_TMP_CONST_LABEL,
			(void*)&&ZEND_INIT_ARRAY_SPEC_TMP_TMPVAR_LABEL,
			(void*)&&ZEND_INIT_ARRAY_SPEC_TMP_TMPVAR_LABEL,
			(void*)&&ZEND_INIT_ARRAY_SPEC_TMP_UNUSED_LABEL,
			(void*)&&ZEND_INIT_ARRAY_SPEC_TMP_CV_LABEL,
			(void*)&&ZEND_INIT_ARRAY_SPEC_VAR_CONST_LABEL,
			(void*)&&ZEND_INIT_ARRAY_SPEC_VAR_TMPVAR_LABEL,
			(void*)&&ZEND_INIT_ARRAY_SPEC_VAR_TMPVAR_LABEL,
			(void*)&&ZEND_INIT_ARRAY_SPEC_VAR_UNUSED_LABEL,
			(void*)&&ZEND_INIT_ARRAY_SPEC_VAR_CV_LABEL,
			(void*)&&ZEND_INIT_ARRAY_SPEC_UNUSED_CONST_LABEL,
			(void*)&&ZEND_INIT_ARRAY_SPEC_UNUSED_TMPVAR_LABEL,
			(void*)&&ZEND_INIT_ARRAY_SPEC_UNUSED_TMPVAR_LABEL,
			(void*)&&ZEND_INIT_ARRAY_SPEC_UNUSED_UNUSED_LABEL,
			(void*)&&ZEND_INIT_ARRAY_SPEC_UNUSED_CV_LABEL,
			(void*)&&ZEND_INIT_ARRAY_SPEC_CV_CONST_LABEL,
			(void*)&&ZEND_INIT_ARRAY_SPEC_CV_TMPVAR_LABEL,
			(void*)&&ZEND_INIT_ARRAY_SPEC_CV_TMPVAR_LABEL,
			(void*)&&ZEND_INIT_ARRAY_SPEC_CV_UNUSED_LABEL,
			(void*)&&ZEND_INIT_ARRAY_SPEC_CV_CV_LABEL,
			(void*)&&ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_CONST_LABEL,
			(void*)&&ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_TMPVAR_LABEL,
			(void*)&&ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_TMPVAR_LABEL,
			(void*)&&ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_UNUSED_LABEL,
			(void*)&&ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_CV_LABEL,
			(void*)&&ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_CONST_LABEL,
			(void*)&&ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_TMPVAR_LABEL,
			(void*)&&ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_TMPVAR_LABEL,
			(void*)&&ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_UNUSED_LABEL,
			(void*)&&ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_CV_LABEL,
			(void*)&&ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_CONST_LABEL,
			(void*)&&ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_TMPVAR_LABEL,
			(void*)&&ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_TMPVAR_LABEL,
			(void*)&&ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_UNUSED_LABEL,
			(void*)&&ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_CV_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_CONST_LABEL,
			(void*)&&ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_TMPVAR_LABEL,
			(void*)&&ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_TMPVAR_LABEL,
			(void*)&&ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_UNUSED_LABEL,
			(void*)&&ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_CV_LABEL,
			(void*)&&ZEND_INCLUDE_OR_EVAL_SPEC_CONST_LABEL,
			(void*)&&ZEND_INCLUDE_OR_EVAL_SPEC_OBSERVER_LABEL,
			(void*)&&ZEND_INCLUDE_OR_EVAL_SPEC_TMPVAR_LABEL,
			(void*)&&ZEND_INCLUDE_OR_EVAL_SPEC_OBSERVER_LABEL,
			(void*)&&ZEND_INCLUDE_OR_EVAL_SPEC_TMPVAR_LABEL,
			(void*)&&ZEND_INCLUDE_OR_EVAL_SPEC_OBSERVER_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_INCLUDE_OR_EVAL_SPEC_CV_LABEL,
			(void*)&&ZEND_INCLUDE_OR_EVAL_SPEC_OBSERVER_LABEL,
			(void*)&&ZEND_UNSET_VAR_SPEC_CONST_UNUSED_LABEL,
			(void*)&&ZEND_UNSET_VAR_SPEC_TMPVAR_UNUSED_LABEL,
			(void*)&&ZEND_UNSET_VAR_SPEC_TMPVAR_UNUSED_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_UNSET_VAR_SPEC_CV_UNUSED_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_UNSET_DIM_SPEC_VAR_CONST_LABEL,
			(void*)&&ZEND_UNSET_DIM_SPEC_VAR_TMPVAR_LABEL,
			(void*)&&ZEND_UNSET_DIM_SPEC_VAR_TMPVAR_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_UNSET_DIM_SPEC_VAR_CV_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_UNSET_DIM_SPEC_CV_CONST_LABEL,
			(void*)&&ZEND_UNSET_DIM_SPEC_CV_TMPVAR_LABEL,
			(void*)&&ZEND_UNSET_DIM_SPEC_CV_TMPVAR_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_UNSET_DIM_SPEC_CV_CV_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_UNSET_OBJ_SPEC_VAR_CONST_LABEL,
			(void*)&&ZEND_UNSET_OBJ_SPEC_VAR_TMPVAR_LABEL,
			(void*)&&ZEND_UNSET_OBJ_SPEC_VAR_TMPVAR_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_UNSET_OBJ_SPEC_VAR_CV_LABEL,
			(void*)&&ZEND_UNSET_OBJ_SPEC_UNUSED_CONST_LABEL,
			(void*)&&ZEND_UNSET_OBJ_SPEC_UNUSED_TMPVAR_LABEL,
			(void*)&&ZEND_UNSET_OBJ_SPEC_UNUSED_TMPVAR_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_UNSET_OBJ_SPEC_UNUSED_CV_LABEL,
			(void*)&&ZEND_UNSET_OBJ_SPEC_CV_CONST_LABEL,
			(void*)&&ZEND_UNSET_OBJ_SPEC_CV_TMPVAR_LABEL,
			(void*)&&ZEND_UNSET_OBJ_SPEC_CV_TMPVAR_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_UNSET_OBJ_SPEC_CV_CV_LABEL,
			(void*)&&ZEND_FE_RESET_R_SPEC_CONST_LABEL,
			(void*)&&ZEND_FE_RESET_R_SPEC_TMP_LABEL,
			(void*)&&ZEND_FE_RESET_R_SPEC_VAR_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_FE_RESET_R_SPEC_CV_LABEL,
			(void*)&&ZEND_FE_FETCH_R_SPEC_VAR_LABEL,
			(void*)&&ZEND_FETCH_R_SPEC_CONST_UNUSED_LABEL,
			(void*)&&ZEND_FETCH_R_SPEC_TMPVAR_UNUSED_LABEL,
			(void*)&&ZEND_FETCH_R_SPEC_TMPVAR_UNUSED_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_FETCH_R_SPEC_CV_UNUSED_LABEL,
			(void*)&&ZEND_FETCH_DIM_R_SPEC_CONST_CONST_LABEL,
			(void*)&&ZEND_FETCH_DIM_R_SPEC_CONST_TMPVAR_LABEL,
			(void*)&&ZEND_FETCH_DIM_R_SPEC_CONST_TMPVAR_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_FETCH_DIM_R_SPEC_CONST_CV_LABEL,
			(void*)&&ZEND_FETCH_DIM_R_SPEC_TMPVAR_CONST_LABEL,
			(void*)&&ZEND_FETCH_DIM_R_SPEC_TMPVAR_TMPVAR_LABEL,
			(void*)&&ZEND_FETCH_DIM_R_SPEC_TMPVAR_TMPVAR_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_FETCH_DIM_R_SPEC_TMPVAR_CV_LABEL,
			(void*)&&ZEND_FETCH_DIM_R_SPEC_TMPVAR_CONST_LABEL,
			(void*)&&ZEND_FETCH_DIM_R_SPEC_TMPVAR_TMPVAR_LABEL,
			(void*)&&ZEND_FETCH_DIM_R_SPEC_TMPVAR_TMPVAR_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_FETCH_DIM_R_SPEC_TMPVAR_CV_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_FETCH_DIM_R_SPEC_CV_CONST_LABEL,
			(void*)&&ZEND_FETCH_DIM_R_SPEC_CV_TMPVAR_LABEL,
			(void*)&&ZEND_FETCH_DIM_R_SPEC_CV_TMPVAR_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_FETCH_DIM_R_SPEC_CV_CV_LABEL,
			(void*)&&ZEND_FETCH_OBJ_R_SPEC_CONST_CONST_LABEL,
			(void*)&&ZEND_FETCH_OBJ_R_SPEC_CONST_TMPVAR_LABEL,
			(void*)&&ZEND_FETCH_OBJ_R_SPEC_CONST_TMPVAR_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_FETCH_OBJ_R_SPEC_CONST_CV_LABEL,
			(void*)&&ZEND_FETCH_OBJ_R_SPEC_TMPVAR_CONST_LABEL,
			(void*)&&ZEND_FETCH_OBJ_R_SPEC_TMPVAR_TMPVAR_LABEL,
			(void*)&&ZEND_FETCH_OBJ_R_SPEC_TMPVAR_TMPVAR_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_FETCH_OBJ_R_SPEC_TMPVAR_CV_LABEL,
			(void*)&&ZEND_FETCH_OBJ_R_SPEC_TMPVAR_CONST_LABEL,
			(void*)&&ZEND_FETCH_OBJ_R_SPEC_TMPVAR_TMPVAR_LABEL,
			(void*)&&ZEND_FETCH_OBJ_R_SPEC_TMPVAR_TMPVAR_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_FETCH_OBJ_R_SPEC_TMPVAR_CV_LABEL,
			(void*)&&ZEND_FETCH_OBJ_R_SPEC_UNUSED_CONST_LABEL,
			(void*)&&ZEND_FETCH_OBJ_R_SPEC_UNUSED_TMPVAR_LABEL,
			(void*)&&ZEND_FETCH_OBJ_R_SPEC_UNUSED_TMPVAR_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_FETCH_OBJ_R_SPEC_UNUSED_CV_LABEL,
			(void*)&&ZEND_FETCH_OBJ_R_SPEC_CV_CONST_LABEL,
			(void*)&&ZEND_FETCH_OBJ_R_SPEC_CV_TMPVAR_LABEL,
			(void*)&&ZEND_FETCH_OBJ_R_SPEC_CV_TMPVAR_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_FETCH_OBJ_R_SPEC_CV_CV_LABEL,
			(void*)&&ZEND_FETCH_W_SPEC_CONST_UNUSED_LABEL,
			(void*)&&ZEND_FETCH_W_SPEC_TMPVAR_UNUSED_LABEL,
			(void*)&&ZEND_FETCH_W_SPEC_TMPVAR_UNUSED_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_FETCH_W_SPEC_CV_UNUSED_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_FETCH_DIM_W_SPEC_VAR_CONST_LABEL,
			(void*)&&ZEND_FETCH_DIM_W_SPEC_VAR_TMPVAR_LABEL,
			(void*)&&ZEND_FETCH_DIM_W_SPEC_VAR_TMPVAR_LABEL,
			(void*)&&ZEND_FETCH_DIM_W_SPEC_VAR_UNUSED_LABEL,
			(void*)&&ZEND_FETCH_DIM_W_SPEC_VAR_CV_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_FETCH_DIM_W_SPEC_CV_CONST_LABEL,
			(void*)&&ZEND_FETCH_DIM_W_SPEC_CV_TMPVAR_LABEL,
			(void*)&&ZEND_FETCH_DIM_W_SPEC_CV_TMPVAR_LABEL,
			(void*)&&ZEND_FETCH_DIM_W_SPEC_CV_UNUSED_LABEL,
			(void*)&&ZEND_FETCH_DIM_W_SPEC_CV_CV_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_FETCH_OBJ_W_SPEC_VAR_CONST_LABEL,
			(void*)&&ZEND_FETCH_OBJ_W_SPEC_VAR_TMPVAR_LABEL,
			(void*)&&ZEND_FETCH_OBJ_W_SPEC_VAR_TMPVAR_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_FETCH_OBJ_W_SPEC_VAR_CV_LABEL,
			(void*)&&ZEND_FETCH_OBJ_W_SPEC_UNUSED_CONST_LABEL,
			(void*)&&ZEND_FETCH_OBJ_W_SPEC_UNUSED_TMPVAR_LABEL,
			(void*)&&ZEND_FETCH_OBJ_W_SPEC_UNUSED_TMPVAR_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_FETCH_OBJ_W_SPEC_UNUSED_CV_LABEL,
			(void*)&&ZEND_FETCH_OBJ_W_SPEC_CV_CONST_LABEL,
			(void*)&&ZEND_FETCH_OBJ_W_SPEC_CV_TMPVAR_LABEL,
			(void*)&&ZEND_FETCH_OBJ_W_SPEC_CV_TMPVAR_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_FETCH_OBJ_W_SPEC_CV_CV_LABEL,
			(void*)&&ZEND_FETCH_RW_SPEC_CONST_UNUSED_LABEL,
			(void*)&&ZEND_FETCH_RW_SPEC_TMPVAR_UNUSED_LABEL,
			(void*)&&ZEND_FETCH_RW_SPEC_TMPVAR_UNUSED_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_FETCH_RW_SPEC_CV_UNUSED_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_FETCH_DIM_RW_SPEC_VAR_CONST_LABEL,
			(void*)&&ZEND_FETCH_DIM_RW_SPEC_VAR_TMPVAR_LABEL,
			(void*)&&ZEND_FETCH_DIM_RW_SPEC_VAR_TMPVAR_LABEL,
			(void*)&&ZEND_FETCH_DIM_RW_SPEC_VAR_UNUSED_LABEL,
			(void*)&&ZEND_FETCH_DIM_RW_SPEC_VAR_CV_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_FETCH_DIM_RW_SPEC_CV_CONST_LABEL,
			(void*)&&ZEND_FETCH_DIM_RW_SPEC_CV_TMPVAR_LABEL,
			(void*)&&ZEND_FETCH_DIM_RW_SPEC_CV_TMPVAR_LABEL,
			(void*)&&ZEND_FETCH_DIM_RW_SPEC_CV_UNUSED_LABEL,
			(void*)&&ZEND_FETCH_DIM_RW_SPEC_CV_CV_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_FETCH_OBJ_RW_SPEC_VAR_CONST_LABEL,
			(void*)&&ZEND_FETCH_OBJ_RW_SPEC_VAR_TMPVAR_LABEL,
			(void*)&&ZEND_FETCH_OBJ_RW_SPEC_VAR_TMPVAR_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_FETCH_OBJ_RW_SPEC_VAR_CV_LABEL,
			(void*)&&ZEND_FETCH_OBJ_RW_SPEC_UNUSED_CONST_LABEL,
			(void*)&&ZEND_FETCH_OBJ_RW_SPEC_UNUSED_TMPVAR_LABEL,
			(void*)&&ZEND_FETCH_OBJ_RW_SPEC_UNUSED_TMPVAR_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_FETCH_OBJ_RW_SPEC_UNUSED_CV_LABEL,
			(void*)&&ZEND_FETCH_OBJ_RW_SPEC_CV_CONST_LABEL,
			(void*)&&ZEND_FETCH_OBJ_RW_SPEC_CV_TMPVAR_LABEL,
			(void*)&&ZEND_FETCH_OBJ_RW_SPEC_CV_TMPVAR_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_FETCH_OBJ_RW_SPEC_CV_CV_LABEL,
			(void*)&&ZEND_FETCH_IS_SPEC_CONST_UNUSED_LABEL,
			(void*)&&ZEND_FETCH_IS_SPEC_TMPVAR_UNUSED_LABEL,
			(void*)&&ZEND_FETCH_IS_SPEC_TMPVAR_UNUSED_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_FETCH_IS_SPEC_CV_UNUSED_LABEL,
			(void*)&&ZEND_FETCH_DIM_IS_SPEC_CONST_CONST_LABEL,
			(void*)&&ZEND_FETCH_DIM_IS_SPEC_CONST_TMPVAR_LABEL,
			(void*)&&ZEND_FETCH_DIM_IS_SPEC_CONST_TMPVAR_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_FETCH_DIM_IS_SPEC_CONST_CV_LABEL,
			(void*)&&ZEND_FETCH_DIM_IS_SPEC_TMPVAR_CONST_LABEL,
			(void*)&&ZEND_FETCH_DIM_IS_SPEC_TMPVAR_TMPVAR_LABEL,
			(void*)&&ZEND_FETCH_DIM_IS_SPEC_TMPVAR_TMPVAR_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_FETCH_DIM_IS_SPEC_TMPVAR_CV_LABEL,
			(void*)&&ZEND_FETCH_DIM_IS_SPEC_TMPVAR_CONST_LABEL,
			(void*)&&ZEND_FETCH_DIM_IS_SPEC_TMPVAR_TMPVAR_LABEL,
			(void*)&&ZEND_FETCH_DIM_IS_SPEC_TMPVAR_TMPVAR_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_FETCH_DIM_IS_SPEC_TMPVAR_CV_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_FETCH_DIM_IS_SPEC_CV_CONST_LABEL,
			(void*)&&ZEND_FETCH_DIM_IS_SPEC_CV_TMPVAR_LABEL,
			(void*)&&ZEND_FETCH_DIM_IS_SPEC_CV_TMPVAR_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_FETCH_DIM_IS_SPEC_CV_CV_LABEL,
			(void*)&&ZEND_FETCH_OBJ_IS_SPEC_CONST_CONST_LABEL,
			(void*)&&ZEND_FETCH_OBJ_IS_SPEC_CONST_TMPVAR_LABEL,
			(void*)&&ZEND_FETCH_OBJ_IS_SPEC_CONST_TMPVAR_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_FETCH_OBJ_IS_SPEC_CONST_CV_LABEL,
			(void*)&&ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_CONST_LABEL,
			(void*)&&ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_TMPVAR_LABEL,
			(void*)&&ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_TMPVAR_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_CV_LABEL,
			(void*)&&ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_CONST_LABEL,
			(void*)&&ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_TMPVAR_LABEL,
			(void*)&&ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_TMPVAR_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_CV_LABEL,
			(void*)&&ZEND_FETCH_OBJ_IS_SPEC_UNUSED_CONST_LABEL,
			(void*)&&ZEND_FETCH_OBJ_IS_SPEC_UNUSED_TMPVAR_LABEL,
			(void*)&&ZEND_FETCH_OBJ_IS_SPEC_UNUSED_TMPVAR_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_FETCH_OBJ_IS_SPEC_UNUSED_CV_LABEL,
			(void*)&&ZEND_FETCH_OBJ_IS_SPEC_CV_CONST_LABEL,
			(void*)&&ZEND_FETCH_OBJ_IS_SPEC_CV_TMPVAR_LABEL,
			(void*)&&ZEND_FETCH_OBJ_IS_SPEC_CV_TMPVAR_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_FETCH_OBJ_IS_SPEC_CV_CV_LABEL,
			(void*)&&ZEND_FETCH_FUNC_ARG_SPEC_CONST_UNUSED_LABEL,
			(void*)&&ZEND_FETCH_FUNC_ARG_SPEC_TMPVAR_UNUSED_LABEL,
			(void*)&&ZEND_FETCH_FUNC_ARG_SPEC_TMPVAR_UNUSED_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_FETCH_FUNC_ARG_SPEC_CV_UNUSED_LABEL,
			(void*)&&ZEND_FETCH_DIM_FUNC_ARG_SPEC_CONST_CONST_LABEL,
			(void*)&&ZEND_FETCH_DIM_FUNC_ARG_SPEC_CONST_TMPVAR_LABEL,
			(void*)&&ZEND_FETCH_DIM_FUNC_ARG_SPEC_CONST_TMPVAR_LABEL,
			(void*)&&ZEND_FETCH_DIM_FUNC_ARG_SPEC_CONST_UNUSED_LABEL,
			(void*)&&ZEND_FETCH_DIM_FUNC_ARG_SPEC_CONST_CV_LABEL,
			(void*)&&ZEND_FETCH_DIM_FUNC_ARG_SPEC_TMP_CONST_LABEL,
			(void*)&&ZEND_FETCH_DIM_FUNC_ARG_SPEC_TMP_TMPVAR_LABEL,
			(void*)&&ZEND_FETCH_DIM_FUNC_ARG_SPEC_TMP_TMPVAR_LABEL,
			(void*)&&ZEND_FETCH_DIM_FUNC_ARG_SPEC_TMP_UNUSED_LABEL,
			(void*)&&ZEND_FETCH_DIM_FUNC_ARG_SPEC_TMP_CV_LABEL,
			(void*)&&ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_CONST_LABEL,
			(void*)&&ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_TMPVAR_LABEL,
			(void*)&&ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_TMPVAR_LABEL,
			(void*)&&ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_UNUSED_LABEL,
			(void*)&&ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_CV_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_CONST_LABEL,
			(void*)&&ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_TMPVAR_LABEL,
			(void*)&&ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_TMPVAR_LABEL,
			(void*)&&ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_UNUSED_LABEL,
			(void*)&&ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_CV_LABEL,
			(void*)&&ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CONST_CONST_LABEL,
			(void*)&&ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CONST_TMPVAR_LABEL,
			(void*)&&ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CONST_TMPVAR_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CONST_CV_LABEL,
			(void*)&&ZEND_FETCH_OBJ_FUNC_ARG_SPEC_TMP_CONST_LABEL,
			(void*)&&ZEND_FETCH_OBJ_FUNC_ARG_SPEC_TMP_TMPVAR_LABEL,
			(void*)&&ZEND_FETCH_OBJ_FUNC_ARG_SPEC_TMP_TMPVAR_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_FETCH_OBJ_FUNC_ARG_SPEC_TMP_CV_LABEL,
			(void*)&&ZEND_FETCH_OBJ_FUNC_ARG_SPEC_VAR_CONST_LABEL,
			(void*)&&ZEND_FETCH_OBJ_FUNC_ARG_SPEC_VAR_TMPVAR_LABEL,
			(void*)&&ZEND_FETCH_OBJ_FUNC_ARG_SPEC_VAR_TMPVAR_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_FETCH_OBJ_FUNC_ARG_SPEC_VAR_CV_LABEL,
			(void*)&&ZEND_FETCH_OBJ_FUNC_ARG_SPEC_UNUSED_CONST_LABEL,
			(void*)&&ZEND_FETCH_OBJ_FUNC_ARG_SPEC_UNUSED_TMPVAR_LABEL,
			(void*)&&ZEND_FETCH_OBJ_FUNC_ARG_SPEC_UNUSED_TMPVAR_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_FETCH_OBJ_FUNC_ARG_SPEC_UNUSED_CV_LABEL,
			(void*)&&ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CV_CONST_LABEL,
			(void*)&&ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CV_TMPVAR_LABEL,
			(void*)&&ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CV_TMPVAR_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CV_CV_LABEL,
			(void*)&&ZEND_FETCH_UNSET_SPEC_CONST_UNUSED_LABEL,
			(void*)&&ZEND_FETCH_UNSET_SPEC_TMPVAR_UNUSED_LABEL,
			(void*)&&ZEND_FETCH_UNSET_SPEC_TMPVAR_UNUSED_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_FETCH_UNSET_SPEC_CV_UNUSED_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_FETCH_DIM_UNSET_SPEC_VAR_CONST_LABEL,
			(void*)&&ZEND_FETCH_DIM_UNSET_SPEC_VAR_TMPVAR_LABEL,
			(void*)&&ZEND_FETCH_DIM_UNSET_SPEC_VAR_TMPVAR_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_FETCH_DIM_UNSET_SPEC_VAR_CV_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_FETCH_DIM_UNSET_SPEC_CV_CONST_LABEL,
			(void*)&&ZEND_FETCH_DIM_UNSET_SPEC_CV_TMPVAR_LABEL,
			(void*)&&ZEND_FETCH_DIM_UNSET_SPEC_CV_TMPVAR_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_FETCH_DIM_UNSET_SPEC_CV_CV_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_FETCH_OBJ_UNSET_SPEC_VAR_CONST_LABEL,
			(void*)&&ZEND_FETCH_OBJ_UNSET_SPEC_VAR_TMPVAR_LABEL,
			(void*)&&ZEND_FETCH_OBJ_UNSET_SPEC_VAR_TMPVAR_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_FETCH_OBJ_UNSET_SPEC_VAR_CV_LABEL,
			(void*)&&ZEND_FETCH_OBJ_UNSET_SPEC_UNUSED_CONST_LABEL,
			(void*)&&ZEND_FETCH_OBJ_UNSET_SPEC_UNUSED_TMPVAR_LABEL,
			(void*)&&ZEND_FETCH_OBJ_UNSET_SPEC_UNUSED_TMPVAR_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_FETCH_OBJ_UNSET_SPEC_UNUSED_CV_LABEL,
			(void*)&&ZEND_FETCH_OBJ_UNSET_SPEC_CV_CONST_LABEL,
			(void*)&&ZEND_FETCH_OBJ_UNSET_SPEC_CV_TMPVAR_LABEL,
			(void*)&&ZEND_FETCH_OBJ_UNSET_SPEC_CV_TMPVAR_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_FETCH_OBJ_UNSET_SPEC_CV_CV_LABEL,
			(void*)&&ZEND_FETCH_LIST_R_SPEC_CONST_CONST_LABEL,
			(void*)&&ZEND_FETCH_LIST_R_SPEC_CONST_TMPVAR_LABEL,
			(void*)&&ZEND_FETCH_LIST_R_SPEC_CONST_TMPVAR_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_FETCH_LIST_R_SPEC_CONST_CV_LABEL,
			(void*)&&ZEND_FETCH_LIST_R_SPEC_TMPVARCV_CONST_LABEL,
			(void*)&&ZEND_FETCH_LIST_R_SPEC_TMPVARCV_TMPVAR_LABEL,
			(void*)&&ZEND_FETCH_LIST_R_SPEC_TMPVARCV_TMPVAR_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_FETCH_LIST_R_SPEC_TMPVARCV_CV_LABEL,
			(void*)&&ZEND_FETCH_LIST_R_SPEC_TMPVARCV_CONST_LABEL,
			(void*)&&ZEND_FETCH_LIST_R_SPEC_TMPVARCV_TMPVAR_LABEL,
			(void*)&&ZEND_FETCH_LIST_R_SPEC_TMPVARCV_TMPVAR_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_FETCH_LIST_R_SPEC_TMPVARCV_CV_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_FETCH_LIST_R_SPEC_TMPVARCV_CONST_LABEL,
			(void*)&&ZEND_FETCH_LIST_R_SPEC_TMPVARCV_TMPVAR_LABEL,
			(void*)&&ZEND_FETCH_LIST_R_SPEC_TMPVARCV_TMPVAR_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_FETCH_LIST_R_SPEC_TMPVARCV_CV_LABEL,
			(void*)&&ZEND_FETCH_CONSTANT_SPEC_UNUSED_CONST_LABEL,
			(void*)&&ZEND_CHECK_FUNC_ARG_SPEC_UNUSED_CONST_LABEL,
			(void*)&&ZEND_CHECK_FUNC_ARG_SPEC_UNUSED_CONST_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_CHECK_FUNC_ARG_SPEC_UNUSED_UNUSED_LABEL,
			(void*)&&ZEND_CHECK_FUNC_ARG_SPEC_UNUSED_UNUSED_QUICK_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_EXT_STMT_SPEC_LABEL,
			(void*)&&ZEND_EXT_FCALL_BEGIN_SPEC_LABEL,
			(void*)&&ZEND_EXT_FCALL_END_SPEC_LABEL,
			(void*)&&ZEND_EXT_NOP_SPEC_LABEL,
			(void*)&&ZEND_TICKS_SPEC_LABEL,
			(void*)&&ZEND_SEND_VAR_NO_REF_SPEC_VAR_CONST_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_SEND_VAR_NO_REF_SPEC_VAR_UNUSED_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_CATCH_SPEC_CONST_LABEL,
			(void*)&&ZEND_THROW_SPEC_CONST_LABEL,
			(void*)&&ZEND_THROW_SPEC_TMPVAR_LABEL,
			(void*)&&ZEND_THROW_SPEC_TMPVAR_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_THROW_SPEC_CV_LABEL,
			(void*)&&ZEND_FETCH_CLASS_SPEC_UNUSED_CONST_LABEL,
			(void*)&&ZEND_FETCH_CLASS_SPEC_UNUSED_TMPVAR_LABEL,
			(void*)&&ZEND_FETCH_CLASS_SPEC_UNUSED_TMPVAR_LABEL,
			(void*)&&ZEND_FETCH_CLASS_SPEC_UNUSED_UNUSED_LABEL,
			(void*)&&ZEND_FETCH_CLASS_SPEC_UNUSED_CV_LABEL,
			(void*)&&ZEND_CLONE_SPEC_CONST_LABEL,
			(void*)&&ZEND_CLONE_SPEC_TMPVAR_LABEL,
			(void*)&&ZEND_CLONE_SPEC_TMPVAR_LABEL,
			(void*)&&ZEND_CLONE_SPEC_UNUSED_LABEL,
			(void*)&&ZEND_CLONE_SPEC_CV_LABEL,
			(void*)&&ZEND_RETURN_BY_REF_SPEC_CONST_LABEL,
			(void*)&&ZEND_RETURN_BY_REF_SPEC_OBSERVER_LABEL,
			(void*)&&ZEND_RETURN_BY_REF_SPEC_TMP_LABEL,
			(void*)&&ZEND_RETURN_BY_REF_SPEC_OBSERVER_LABEL,
			(void*)&&ZEND_RETURN_BY_REF_SPEC_VAR_LABEL,
			(void*)&&ZEND_RETURN_BY_REF_SPEC_OBSERVER_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_RETURN_BY_REF_SPEC_CV_LABEL,
			(void*)&&ZEND_RETURN_BY_REF_SPEC_OBSERVER_LABEL,
			(void*)&&ZEND_INIT_METHOD_CALL_SPEC_CONST_CONST_LABEL,
			(void*)&&ZEND_INIT_METHOD_CALL_SPEC_CONST_TMPVAR_LABEL,
			(void*)&&ZEND_INIT_METHOD_CALL_SPEC_CONST_TMPVAR_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_INIT_METHOD_CALL_SPEC_CONST_CV_LABEL,
			(void*)&&ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_CONST_LABEL,
			(void*)&&ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_TMPVAR_LABEL,
			(void*)&&ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_TMPVAR_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_CV_LABEL,
			(void*)&&ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_CONST_LABEL,
			(void*)&&ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_TMPVAR_LABEL,
			(void*)&&ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_TMPVAR_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_CV_LABEL,
			(void*)&&ZEND_INIT_METHOD_CALL_SPEC_UNUSED_CONST_LABEL,
			(void*)&&ZEND_INIT_METHOD_CALL_SPEC_UNUSED_TMPVAR_LABEL,
			(void*)&&ZEND_INIT_METHOD_CALL_SPEC_UNUSED_TMPVAR_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_INIT_METHOD_CALL_SPEC_UNUSED_CV_LABEL,
			(void*)&&ZEND_INIT_METHOD_CALL_SPEC_CV_CONST_LABEL,
			(void*)&&ZEND_INIT_METHOD_CALL_SPEC_CV_TMPVAR_LABEL,
			(void*)&&ZEND_INIT_METHOD_CALL_SPEC_CV_TMPVAR_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_INIT_METHOD_CALL_SPEC_CV_CV_LABEL,
			(void*)&&ZEND_INIT_STATIC_METHOD_CALL_SPEC_CONST_CONST_LABEL,
			(void*)&&ZEND_INIT_STATIC_METHOD_CALL_SPEC_CONST_TMPVAR_LABEL,
			(void*)&&ZEND_INIT_STATIC_METHOD_CALL_SPEC_CONST_TMPVAR_LABEL,
			(void*)&&ZEND_INIT_STATIC_METHOD_CALL_SPEC_CONST_UNUSED_LABEL,
			(void*)&&ZEND_INIT_STATIC_METHOD_CALL_SPEC_CONST_CV_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_INIT_STATIC_METHOD_CALL_SPEC_VAR_CONST_LABEL,
			(void*)&&ZEND_INIT_STATIC_METHOD_CALL_SPEC_VAR_TMPVAR_LABEL,
			(void*)&&ZEND_INIT_STATIC_METHOD_CALL_SPEC_VAR_TMPVAR_LABEL,
			(void*)&&ZEND_INIT_STATIC_METHOD_CALL_SPEC_VAR_UNUSED_LABEL,
			(void*)&&ZEND_INIT_STATIC_METHOD_CALL_SPEC_VAR_CV_LABEL,
			(void*)&&ZEND_INIT_STATIC_METHOD_CALL_SPEC_UNUSED_CONST_LABEL,
			(void*)&&ZEND_INIT_STATIC_METHOD_CALL_SPEC_UNUSED_TMPVAR_LABEL,
			(void*)&&ZEND_INIT_STATIC_METHOD_CALL_SPEC_UNUSED_TMPVAR_LABEL,
			(void*)&&ZEND_INIT_STATIC_METHOD_CALL_SPEC_UNUSED_UNUSED_LABEL,
			(void*)&&ZEND_INIT_STATIC_METHOD_CALL_SPEC_UNUSED_CV_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_ISSET_ISEMPTY_VAR_SPEC_CONST_UNUSED_LABEL,
			(void*)&&ZEND_ISSET_ISEMPTY_VAR_SPEC_TMPVAR_UNUSED_LABEL,
			(void*)&&ZEND_ISSET_ISEMPTY_VAR_SPEC_TMPVAR_UNUSED_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_ISSET_ISEMPTY_VAR_SPEC_CV_UNUSED_LABEL,
			(void*)&&ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CONST_CONST_LABEL,
			(void*)&&ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CONST_TMPVAR_LABEL,
			(void*)&&ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CONST_TMPVAR_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CONST_CV_LABEL,
			(void*)&&ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_TMPVAR_CONST_LABEL,
			(void*)&&ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_TMPVAR_TMPVAR_LABEL,
			(void*)&&ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_TMPVAR_TMPVAR_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_TMPVAR_CV_LABEL,
			(void*)&&ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_TMPVAR_CONST_LABEL,
			(void*)&&ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_TMPVAR_TMPVAR_LABEL,
			(void*)&&ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_TMPVAR_TMPVAR_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_TMPVAR_CV_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CV_CONST_LABEL,
			(void*)&&ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CV_TMPVAR_LABEL,
			(void*)&&ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CV_TMPVAR_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CV_CV_LABEL,
			(void*)&&ZEND_SEND_VAL_EX_SPEC_CONST_CONST_LABEL,
			(void*)&&ZEND_SEND_VAL_EX_SPEC_CONST_CONST_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_SEND_VAL_EX_SPEC_CONST_UNUSED_LABEL,
			(void*)&&ZEND_SEND_VAL_EX_SPEC_CONST_UNUSED_QUICK_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_SEND_VAL_EX_SPEC_TMP_CONST_LABEL,
			(void*)&&ZEND_SEND_VAL_EX_SPEC_TMP_CONST_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_SEND_VAL_EX_SPEC_TMP_UNUSED_LABEL,
			(void*)&&ZEND_SEND_VAL_EX_SPEC_TMP_UNUSED_QUICK_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_SEND_VAR_SPEC_VAR_CONST_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_SEND_VAR_SPEC_VAR_UNUSED_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_SEND_VAR_SPEC_CV_CONST_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_SEND_VAR_SPEC_CV_UNUSED_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_INIT_USER_CALL_SPEC_CONST_CONST_LABEL,
			(void*)&&ZEND_INIT_USER_CALL_SPEC_CONST_TMPVAR_LABEL,
			(void*)&&ZEND_INIT_USER_CALL_SPEC_CONST_TMPVAR_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_INIT_USER_CALL_SPEC_CONST_CV_LABEL,
			(void*)&&ZEND_SEND_ARRAY_SPEC_LABEL,
			(void*)&&ZEND_SEND_USER_SPEC_CONST_LABEL,
			(void*)&&ZEND_SEND_USER_SPEC_TMP_LABEL,
			(void*)&&ZEND_SEND_USER_SPEC_VAR_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_SEND_USER_SPEC_CV_LABEL,
			(void*)&&ZEND_STRLEN_SPEC_CONST_LABEL,
			(void*)&&ZEND_STRLEN_SPEC_TMPVAR_LABEL,
			(void*)&&ZEND_STRLEN_SPEC_TMPVAR_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_STRLEN_SPEC_CV_LABEL,
			(void*)&&ZEND_DEFINED_SPEC_CONST_LABEL,
			(void*)&&ZEND_TYPE_CHECK_SPEC_CONST_LABEL,
			(void*)&&ZEND_TYPE_CHECK_SPEC_TMPVAR_LABEL,
			(void*)&&ZEND_TYPE_CHECK_SPEC_TMPVAR_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_TYPE_CHECK_SPEC_CV_LABEL,
			(void*)&&ZEND_VERIFY_RETURN_TYPE_SPEC_CONST_UNUSED_LABEL,
			(void*)&&ZEND_VERIFY_RETURN_TYPE_SPEC_TMP_UNUSED_LABEL,
			(void*)&&ZEND_VERIFY_RETURN_TYPE_SPEC_VAR_UNUSED_LABEL,
			(void*)&&ZEND_VERIFY_RETURN_TYPE_SPEC_UNUSED_UNUSED_LABEL,
			(void*)&&ZEND_VERIFY_RETURN_TYPE_SPEC_CV_UNUSED_LABEL,
			(void*)&&ZEND_FE_RESET_RW_SPEC_CONST_LABEL,
			(void*)&&ZEND_FE_RESET_RW_SPEC_TMP_LABEL,
			(void*)&&ZEND_FE_RESET_RW_SPEC_VAR_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_FE_RESET_RW_SPEC_CV_LABEL,
			(void*)&&ZEND_FE_FETCH_RW_SPEC_VAR_LABEL,
			(void*)&&ZEND_FE_FREE_SPEC_TMPVAR_LABEL,
			(void*)&&ZEND_INIT_DYNAMIC_CALL_SPEC_CONST_LABEL,
			(void*)&&ZEND_INIT_DYNAMIC_CALL_SPEC_TMPVAR_LABEL,
			(void*)&&ZEND_INIT_DYNAMIC_CALL_SPEC_TMPVAR_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_INIT_DYNAMIC_CALL_SPEC_CV_LABEL,
			(void*)&&ZEND_DO_ICALL_SPEC_RETVAL_UNUSED_LABEL,
			(void*)&&ZEND_DO_ICALL_SPEC_RETVAL_USED_LABEL,
			(void*)&&ZEND_DO_ICALL_SPEC_OBSERVER_LABEL,
			(void*)&&ZEND_DO_ICALL_SPEC_OBSERVER_LABEL,
			(void*)&&ZEND_DO_UCALL_SPEC_RETVAL_UNUSED_LABEL,
			(void*)&&ZEND_DO_UCALL_SPEC_RETVAL_USED_LABEL,
			(void*)&&ZEND_DO_UCALL_SPEC_OBSERVER_LABEL,
			(void*)&&ZEND_DO_UCALL_SPEC_OBSERVER_LABEL,
			(void*)&&ZEND_DO_FCALL_BY_NAME_SPEC_RETVAL_UNUSED_LABEL,
			(void*)&&ZEND_DO_FCALL_BY_NAME_SPEC_RETVAL_USED_LABEL,
			(void*)&&ZEND_DO_FCALL_BY_NAME_SPEC_OBSERVER_LABEL,
			(void*)&&ZEND_DO_FCALL_BY_NAME_SPEC_OBSERVER_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_PRE_INC_OBJ_SPEC_VAR_CONST_LABEL,
			(void*)&&ZEND_PRE_INC_OBJ_SPEC_VAR_TMPVAR_LABEL,
			(void*)&&ZEND_PRE_INC_OBJ_SPEC_VAR_TMPVAR_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_PRE_INC_OBJ_SPEC_VAR_CV_LABEL,
			(void*)&&ZEND_PRE_INC_OBJ_SPEC_UNUSED_CONST_LABEL,
			(void*)&&ZEND_PRE_INC_OBJ_SPEC_UNUSED_TMPVAR_LABEL,
			(void*)&&ZEND_PRE_INC_OBJ_SPEC_UNUSED_TMPVAR_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_PRE_INC_OBJ_SPEC_UNUSED_CV_LABEL,
			(void*)&&ZEND_PRE_INC_OBJ_SPEC_CV_CONST_LABEL,
			(void*)&&ZEND_PRE_INC_OBJ_SPEC_CV_TMPVAR_LABEL,
			(void*)&&ZEND_PRE_INC_OBJ_SPEC_CV_TMPVAR_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_PRE_INC_OBJ_SPEC_CV_CV_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_POST_INC_OBJ_SPEC_VAR_CONST_LABEL,
			(void*)&&ZEND_POST_INC_OBJ_SPEC_VAR_TMPVAR_LABEL,
			(void*)&&ZEND_POST_INC_OBJ_SPEC_VAR_TMPVAR_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_POST_INC_OBJ_SPEC_VAR_CV_LABEL,
			(void*)&&ZEND_POST_INC_OBJ_SPEC_UNUSED_CONST_LABEL,
			(void*)&&ZEND_POST_INC_OBJ_SPEC_UNUSED_TMPVAR_LABEL,
			(void*)&&ZEND_POST_INC_OBJ_SPEC_UNUSED_TMPVAR_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_POST_INC_OBJ_SPEC_UNUSED_CV_LABEL,
			(void*)&&ZEND_POST_INC_OBJ_SPEC_CV_CONST_LABEL,
			(void*)&&ZEND_POST_INC_OBJ_SPEC_CV_TMPVAR_LABEL,
			(void*)&&ZEND_POST_INC_OBJ_SPEC_CV_TMPVAR_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_POST_INC_OBJ_SPEC_CV_CV_LABEL,
			(void*)&&ZEND_ECHO_SPEC_CONST_LABEL,
			(void*)&&ZEND_ECHO_SPEC_TMPVAR_LABEL,
			(void*)&&ZEND_ECHO_SPEC_TMPVAR_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_ECHO_SPEC_CV_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_INSTANCEOF_SPEC_TMPVAR_CONST_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_INSTANCEOF_SPEC_TMPVAR_VAR_LABEL,
			(void*)&&ZEND_INSTANCEOF_SPEC_TMPVAR_UNUSED_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_INSTANCEOF_SPEC_TMPVAR_CONST_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_INSTANCEOF_SPEC_TMPVAR_VAR_LABEL,
			(void*)&&ZEND_INSTANCEOF_SPEC_TMPVAR_UNUSED_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_INSTANCEOF_SPEC_CV_CONST_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_INSTANCEOF_SPEC_CV_VAR_LABEL,
			(void*)&&ZEND_INSTANCEOF_SPEC_CV_UNUSED_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_GENERATOR_CREATE_SPEC_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_MAKE_REF_SPEC_VAR_UNUSED_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_MAKE_REF_SPEC_CV_UNUSED_LABEL,
			(void*)&&ZEND_DECLARE_FUNCTION_SPEC_LABEL,
			(void*)&&ZEND_DECLARE_LAMBDA_FUNCTION_SPEC_CONST_LABEL,
			(void*)&&ZEND_DECLARE_CONST_SPEC_CONST_CONST_LABEL,
			(void*)&&ZEND_DECLARE_CLASS_SPEC_CONST_LABEL,
			(void*)&&ZEND_DECLARE_CLASS_DELAYED_SPEC_CONST_CONST_LABEL,
			(void*)&&ZEND_DECLARE_ANON_CLASS_SPEC_LABEL,
			(void*)&&ZEND_ADD_ARRAY_UNPACK_SPEC_LABEL,
			(void*)&&ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CONST_CONST_LABEL,
			(void*)&&ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CONST_TMPVAR_LABEL,
			(void*)&&ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CONST_TMPVAR_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CONST_CV_LABEL,
			(void*)&&ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TMPVAR_CONST_LABEL,
			(void*)&&ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TMPVAR_TMPVAR_LABEL,
			(void*)&&ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TMPVAR_TMPVAR_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TMPVAR_CV_LABEL,
			(void*)&&ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TMPVAR_CONST_LABEL,
			(void*)&&ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TMPVAR_TMPVAR_LABEL,
			(void*)&&ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TMPVAR_TMPVAR_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TMPVAR_CV_LABEL,
			(void*)&&ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_UNUSED_CONST_LABEL,
			(void*)&&ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_UNUSED_TMPVAR_LABEL,
			(void*)&&ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_UNUSED_TMPVAR_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_UNUSED_CV_LABEL,
			(void*)&&ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CV_CONST_LABEL,
			(void*)&&ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CV_TMPVAR_LABEL,
			(void*)&&ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CV_TMPVAR_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CV_CV_LABEL,
			(void*)&&ZEND_HANDLE_EXCEPTION_SPEC_LABEL,
			(void*)&&ZEND_USER_OPCODE_SPEC_LABEL,
			(void*)&&ZEND_ASSERT_CHECK_SPEC_LABEL,
			(void*)&&ZEND_JMP_SET_SPEC_CONST_LABEL,
			(void*)&&ZEND_JMP_SET_SPEC_TMP_LABEL,
			(void*)&&ZEND_JMP_SET_SPEC_VAR_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_JMP_SET_SPEC_CV_LABEL,
			(void*)&&ZEND_UNSET_CV_SPEC_CV_UNUSED_LABEL,
			(void*)&&ZEND_ISSET_ISEMPTY_CV_SPEC_CV_UNUSED_SET_LABEL,
			(void*)&&ZEND_ISSET_ISEMPTY_CV_SPEC_CV_UNUSED_EMPTY_LABEL,
			(void*)&&ZEND_FETCH_LIST_W_SPEC_VAR_CONST_LABEL,
			(void*)&&ZEND_FETCH_LIST_W_SPEC_VAR_TMPVAR_LABEL,
			(void*)&&ZEND_FETCH_LIST_W_SPEC_VAR_TMPVAR_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_FETCH_LIST_W_SPEC_VAR_CV_LABEL,
			(void*)&&ZEND_SEPARATE_SPEC_VAR_UNUSED_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_FETCH_CLASS_NAME_SPEC_TMPVAR_LABEL,
			(void*)&&ZEND_FETCH_CLASS_NAME_SPEC_TMPVAR_LABEL,
			(void*)&&ZEND_FETCH_CLASS_NAME_SPEC_UNUSED_LABEL,
			(void*)&&ZEND_FETCH_CLASS_NAME_SPEC_CV_LABEL,
			(void*)&&ZEND_CALL_TRAMPOLINE_SPEC_LABEL,
			(void*)&&ZEND_CALL_TRAMPOLINE_SPEC_OBSERVER_LABEL,
			(void*)&&ZEND_DISCARD_EXCEPTION_SPEC_LABEL,
			(void*)&&ZEND_YIELD_SPEC_CONST_CONST_LABEL,
			(void*)&&ZEND_YIELD_SPEC_CONST_TMPVAR_LABEL,
			(void*)&&ZEND_YIELD_SPEC_CONST_TMPVAR_LABEL,
			(void*)&&ZEND_YIELD_SPEC_CONST_UNUSED_LABEL,
			(void*)&&ZEND_YIELD_SPEC_CONST_CV_LABEL,
			(void*)&&ZEND_YIELD_SPEC_TMP_CONST_LABEL,
			(void*)&&ZEND_YIELD_SPEC_TMP_TMPVAR_LABEL,
			(void*)&&ZEND_YIELD_SPEC_TMP_TMPVAR_LABEL,
			(void*)&&ZEND_YIELD_SPEC_TMP_UNUSED_LABEL,
			(void*)&&ZEND_YIELD_SPEC_TMP_CV_LABEL,
			(void*)&&ZEND_YIELD_SPEC_VAR_CONST_LABEL,
			(void*)&&ZEND_YIELD_SPEC_VAR_TMPVAR_LABEL,
			(void*)&&ZEND_YIELD_SPEC_VAR_TMPVAR_LABEL,
			(void*)&&ZEND_YIELD_SPEC_VAR_UNUSED_LABEL,
			(void*)&&ZEND_YIELD_SPEC_VAR_CV_LABEL,
			(void*)&&ZEND_YIELD_SPEC_UNUSED_CONST_LABEL,
			(void*)&&ZEND_YIELD_SPEC_UNUSED_TMPVAR_LABEL,
			(void*)&&ZEND_YIELD_SPEC_UNUSED_TMPVAR_LABEL,
			(void*)&&ZEND_YIELD_SPEC_UNUSED_UNUSED_LABEL,
			(void*)&&ZEND_YIELD_SPEC_UNUSED_CV_LABEL,
			(void*)&&ZEND_YIELD_SPEC_CV_CONST_LABEL,
			(void*)&&ZEND_YIELD_SPEC_CV_TMPVAR_LABEL,
			(void*)&&ZEND_YIELD_SPEC_CV_TMPVAR_LABEL,
			(void*)&&ZEND_YIELD_SPEC_CV_UNUSED_LABEL,
			(void*)&&ZEND_YIELD_SPEC_CV_CV_LABEL,
			(void*)&&ZEND_GENERATOR_RETURN_SPEC_CONST_LABEL,
			(void*)&&ZEND_GENERATOR_RETURN_SPEC_OBSERVER_LABEL,
			(void*)&&ZEND_GENERATOR_RETURN_SPEC_TMP_LABEL,
			(void*)&&ZEND_GENERATOR_RETURN_SPEC_OBSERVER_LABEL,
			(void*)&&ZEND_GENERATOR_RETURN_SPEC_VAR_LABEL,
			(void*)&&ZEND_GENERATOR_RETURN_SPEC_OBSERVER_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_GENERATOR_RETURN_SPEC_CV_LABEL,
			(void*)&&ZEND_GENERATOR_RETURN_SPEC_OBSERVER_LABEL,
			(void*)&&ZEND_FAST_CALL_SPEC_LABEL,
			(void*)&&ZEND_FAST_RET_SPEC_LABEL,
			(void*)&&ZEND_RECV_VARIADIC_SPEC_UNUSED_LABEL,
			(void*)&&ZEND_SEND_UNPACK_SPEC_LABEL,
			(void*)&&ZEND_YIELD_FROM_SPEC_CONST_LABEL,
			(void*)&&ZEND_YIELD_FROM_SPEC_TMPVAR_LABEL,
			(void*)&&ZEND_YIELD_FROM_SPEC_TMPVAR_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_YIELD_FROM_SPEC_CV_LABEL,
			(void*)&&ZEND_COPY_TMP_SPEC_TMPVAR_UNUSED_LABEL,
			(void*)&&ZEND_BIND_GLOBAL_SPEC_CV_CONST_LABEL,
			(void*)&&ZEND_COALESCE_SPEC_CONST_LABEL,
			(void*)&&ZEND_COALESCE_SPEC_TMP_LABEL,
			(void*)&&ZEND_COALESCE_SPEC_VAR_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_COALESCE_SPEC_CV_LABEL,
			(void*)&&ZEND_SPACESHIP_SPEC_CONST_CONST_LABEL,
			(void*)&&ZEND_SPACESHIP_SPEC_CONST_TMPVAR_LABEL,
			(void*)&&ZEND_SPACESHIP_SPEC_CONST_TMPVAR_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_SPACESHIP_SPEC_CONST_CV_LABEL,
			(void*)&&ZEND_SPACESHIP_SPEC_TMPVAR_CONST_LABEL,
			(void*)&&ZEND_SPACESHIP_SPEC_TMPVAR_TMPVAR_LABEL,
			(void*)&&ZEND_SPACESHIP_SPEC_TMPVAR_TMPVAR_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_SPACESHIP_SPEC_TMPVAR_CV_LABEL,
			(void*)&&ZEND_SPACESHIP_SPEC_TMPVAR_CONST_LABEL,
			(void*)&&ZEND_SPACESHIP_SPEC_TMPVAR_TMPVAR_LABEL,
			(void*)&&ZEND_SPACESHIP_SPEC_TMPVAR_TMPVAR_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_SPACESHIP_SPEC_TMPVAR_CV_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_SPACESHIP_SPEC_CV_CONST_LABEL,
			(void*)&&ZEND_SPACESHIP_SPEC_CV_TMPVAR_LABEL,
			(void*)&&ZEND_SPACESHIP_SPEC_CV_TMPVAR_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_SPACESHIP_SPEC_CV_CV_LABEL,
			(void*)&&ZEND_FUNC_NUM_ARGS_SPEC_UNUSED_UNUSED_LABEL,
			(void*)&&ZEND_FUNC_GET_ARGS_SPEC_CONST_UNUSED_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_FUNC_GET_ARGS_SPEC_UNUSED_UNUSED_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_FETCH_STATIC_PROP_R_SPEC_LABEL,
			(void*)&&ZEND_FETCH_STATIC_PROP_W_SPEC_LABEL,
			(void*)&&ZEND_FETCH_STATIC_PROP_RW_SPEC_LABEL,
			(void*)&&ZEND_FETCH_STATIC_PROP_IS_SPEC_LABEL,
			(void*)&&ZEND_FETCH_STATIC_PROP_FUNC_ARG_SPEC_LABEL,
			(void*)&&ZEND_FETCH_STATIC_PROP_UNSET_SPEC_LABEL,
			(void*)&&ZEND_UNSET_STATIC_PROP_SPEC_LABEL,
			(void*)&&ZEND_ISSET_ISEMPTY_STATIC_PROP_SPEC_LABEL,
			(void*)&&ZEND_FETCH_CLASS_CONSTANT_SPEC_CONST_CONST_LABEL,
			(void*)&&ZEND_FETCH_CLASS_CONSTANT_SPEC_CONST_TMPVARCV_LABEL,
			(void*)&&ZEND_FETCH_CLASS_CONSTANT_SPEC_CONST_TMPVARCV_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_FETCH_CLASS_CONSTANT_SPEC_CONST_TMPVARCV_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_FETCH_CLASS_CONSTANT_SPEC_VAR_CONST_LABEL,
			(void*)&&ZEND_FETCH_CLASS_CONSTANT_SPEC_VAR_TMPVARCV_LABEL,
			(void*)&&ZEND_FETCH_CLASS_CONSTANT_SPEC_VAR_TMPVARCV_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_FETCH_CLASS_CONSTANT_SPEC_VAR_TMPVARCV_LABEL,
			(void*)&&ZEND_FETCH_CLASS_CONSTANT_SPEC_UNUSED_CONST_LABEL,
			(void*)&&ZEND_FETCH_CLASS_CONSTANT_SPEC_UNUSED_TMPVARCV_LABEL,
			(void*)&&ZEND_FETCH_CLASS_CONSTANT_SPEC_UNUSED_TMPVARCV_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_FETCH_CLASS_CONSTANT_SPEC_UNUSED_TMPVARCV_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_BIND_LEXICAL_SPEC_TMP_CV_LABEL,
			(void*)&&ZEND_BIND_STATIC_SPEC_CV_LABEL,
			(void*)&&ZEND_FETCH_THIS_SPEC_UNUSED_UNUSED_LABEL,
			(void*)&&ZEND_SEND_FUNC_ARG_SPEC_VAR_CONST_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_SEND_FUNC_ARG_SPEC_VAR_UNUSED_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_ISSET_ISEMPTY_THIS_SPEC_UNUSED_UNUSED_LABEL,
			(void*)&&ZEND_SWITCH_LONG_SPEC_CONST_CONST_LABEL,
			(void*)&&ZEND_SWITCH_LONG_SPEC_TMPVARCV_CONST_LABEL,
			(void*)&&ZEND_SWITCH_LONG_SPEC_TMPVARCV_CONST_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_SWITCH_LONG_SPEC_TMPVARCV_CONST_LABEL,
			(void*)&&ZEND_SWITCH_STRING_SPEC_CONST_CONST_LABEL,
			(void*)&&ZEND_SWITCH_STRING_SPEC_TMPVARCV_CONST_LABEL,
			(void*)&&ZEND_SWITCH_STRING_SPEC_TMPVARCV_CONST_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_SWITCH_STRING_SPEC_TMPVARCV_CONST_LABEL,
			(void*)&&ZEND_IN_ARRAY_SPEC_CONST_CONST_LABEL,
			(void*)&&ZEND_IN_ARRAY_SPEC_TMP_CONST_LABEL,
			(void*)&&ZEND_IN_ARRAY_SPEC_VAR_CONST_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_IN_ARRAY_SPEC_CV_CONST_LABEL,
			(void*)&&ZEND_COUNT_SPEC_CONST_UNUSED_LABEL,
			(void*)&&ZEND_COUNT_SPEC_TMPVAR_UNUSED_LABEL,
			(void*)&&ZEND_COUNT_SPEC_TMPVAR_UNUSED_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_COUNT_SPEC_CV_UNUSED_LABEL,
			(void*)&&ZEND_GET_CLASS_SPEC_CONST_UNUSED_LABEL,
			(void*)&&ZEND_GET_CLASS_SPEC_TMPVAR_UNUSED_LABEL,
			(void*)&&ZEND_GET_CLASS_SPEC_TMPVAR_UNUSED_LABEL,
			(void*)&&ZEND_GET_CLASS_SPEC_UNUSED_UNUSED_LABEL,
			(void*)&&ZEND_GET_CLASS_SPEC_CV_UNUSED_LABEL,
			(void*)&&ZEND_GET_CALLED_CLASS_SPEC_UNUSED_UNUSED_LABEL,
			(void*)&&ZEND_GET_TYPE_SPEC_CONST_UNUSED_LABEL,
			(void*)&&ZEND_GET_TYPE_SPEC_TMP_UNUSED_LABEL,
			(void*)&&ZEND_GET_TYPE_SPEC_VAR_UNUSED_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_GET_TYPE_SPEC_CV_UNUSED_LABEL,
			(void*)&&ZEND_ARRAY_KEY_EXISTS_SPEC_CONST_CONST_LABEL,
			(void*)&&ZEND_ARRAY_KEY_EXISTS_SPEC_CONST_TMPVAR_LABEL,
			(void*)&&ZEND_ARRAY_KEY_EXISTS_SPEC_CONST_TMPVAR_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_ARRAY_KEY_EXISTS_SPEC_CONST_CV_LABEL,
			(void*)&&ZEND_ARRAY_KEY_EXISTS_SPEC_TMPVAR_CONST_LABEL,
			(void*)&&ZEND_ARRAY_KEY_EXISTS_SPEC_TMPVAR_TMPVAR_LABEL,
			(void*)&&ZEND_ARRAY_KEY_EXISTS_SPEC_TMPVAR_TMPVAR_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_ARRAY_KEY_EXISTS_SPEC_TMPVAR_CV_LABEL,
			(void*)&&ZEND_ARRAY_KEY_EXISTS_SPEC_TMPVAR_CONST_LABEL,
			(void*)&&ZEND_ARRAY_KEY_EXISTS_SPEC_TMPVAR_TMPVAR_LABEL,
			(void*)&&ZEND_ARRAY_KEY_EXISTS_SPEC_TMPVAR_TMPVAR_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_ARRAY_KEY_EXISTS_SPEC_TMPVAR_CV_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_ARRAY_KEY_EXISTS_SPEC_CV_CONST_LABEL,
			(void*)&&ZEND_ARRAY_KEY_EXISTS_SPEC_CV_TMPVAR_LABEL,
			(void*)&&ZEND_ARRAY_KEY_EXISTS_SPEC_CV_TMPVAR_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_ARRAY_KEY_EXISTS_SPEC_CV_CV_LABEL,
			(void*)&&ZEND_MATCH_SPEC_CONST_CONST_LABEL,
			(void*)&&ZEND_MATCH_SPEC_TMPVARCV_CONST_LABEL,
			(void*)&&ZEND_MATCH_SPEC_TMPVARCV_CONST_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_MATCH_SPEC_TMPVARCV_CONST_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_CASE_STRICT_SPEC_TMP_CONST_LABEL,
			(void*)&&ZEND_CASE_STRICT_SPEC_TMP_TMP_LABEL,
			(void*)&&ZEND_CASE_STRICT_SPEC_TMP_VAR_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_CASE_STRICT_SPEC_TMP_CV_LABEL,
			(void*)&&ZEND_CASE_STRICT_SPEC_VAR_CONST_LABEL,
			(void*)&&ZEND_CASE_STRICT_SPEC_VAR_TMP_LABEL,
			(void*)&&ZEND_CASE_STRICT_SPEC_VAR_VAR_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_CASE_STRICT_SPEC_VAR_CV_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_MATCH_ERROR_SPEC_CONST_UNUSED_LABEL,
			(void*)&&ZEND_MATCH_ERROR_SPEC_TMPVARCV_UNUSED_LABEL,
			(void*)&&ZEND_MATCH_ERROR_SPEC_TMPVARCV_UNUSED_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_MATCH_ERROR_SPEC_TMPVARCV_UNUSED_LABEL,
			(void*)&&ZEND_JMP_NULL_SPEC_CONST_LABEL,
			(void*)&&ZEND_JMP_NULL_SPEC_TMP_LABEL,
			(void*)&&ZEND_JMP_NULL_SPEC_VAR_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_JMP_NULL_SPEC_CV_LABEL,
			(void*)&&ZEND_CHECK_UNDEF_ARGS_SPEC_UNUSED_UNUSED_LABEL,
			(void*)&&ZEND_FETCH_GLOBALS_SPEC_UNUSED_UNUSED_LABEL,
			(void*)&&ZEND_VERIFY_NEVER_TYPE_SPEC_UNUSED_UNUSED_LABEL,
			(void*)&&ZEND_CALLABLE_CONVERT_SPEC_UNUSED_UNUSED_LABEL,
			(void*)&&ZEND_BIND_INIT_STATIC_OR_JMP_SPEC_CV_LABEL,
			(void*)&&ZEND_FRAMELESS_ICALL_0_SPEC_UNUSED_UNUSED_LABEL,
			(void*)&&ZEND_FRAMELESS_ICALL_0_SPEC_OBSERVER_LABEL,
			(void*)&&ZEND_FRAMELESS_ICALL_1_SPEC_UNUSED_LABEL,
			(void*)&&ZEND_FRAMELESS_ICALL_1_SPEC_OBSERVER_LABEL,
			(void*)&&ZEND_FRAMELESS_ICALL_2_SPEC_LABEL,
			(void*)&&ZEND_FRAMELESS_ICALL_2_SPEC_OBSERVER_LABEL,
			(void*)&&ZEND_FRAMELESS_ICALL_3_SPEC_LABEL,
			(void*)&&ZEND_FRAMELESS_ICALL_3_SPEC_OBSERVER_LABEL,
			(void*)&&ZEND_JMP_FRAMELESS_SPEC_CONST_LABEL,
			(void*)&&ZEND_INIT_PARENT_PROPERTY_HOOK_CALL_SPEC_CONST_UNUSED_LABEL,
			(void*)&&ZEND_DECLARE_ATTRIBUTED_CONST_SPEC_CONST_CONST_LABEL,
			(void*)&&ZEND_INIT_FCALL_OFFSET_SPEC_CONST_LABEL,
			(void*)&&ZEND_RECV_NOTYPE_SPEC_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_COUNT_ARRAY_SPEC_TMPVAR_UNUSED_LABEL,
			(void*)&&ZEND_COUNT_ARRAY_SPEC_TMPVAR_UNUSED_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_COUNT_ARRAY_SPEC_CV_UNUSED_LABEL,
			(void*)&&ZEND_JMP_FORWARD_SPEC_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_CONST_LABEL,
			(void*)&&ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_LABEL,
			(void*)&&ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_LABEL,
			(void*)&&ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_CONST_LABEL,
			(void*)&&ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_LABEL,
			(void*)&&ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_CONST_LABEL,
			(void*)&&ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_LABEL,
			(void*)&&ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_ADD_LONG_SPEC_TMPVARCV_CONST_LABEL,
			(void*)&&ZEND_ADD_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
			(void*)&&ZEND_ADD_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_ADD_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
			(void*)&&ZEND_ADD_LONG_SPEC_TMPVARCV_CONST_LABEL,
			(void*)&&ZEND_ADD_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
			(void*)&&ZEND_ADD_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_ADD_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_ADD_LONG_SPEC_TMPVARCV_CONST_LABEL,
			(void*)&&ZEND_ADD_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
			(void*)&&ZEND_ADD_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_ADD_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_ADD_DOUBLE_SPEC_TMPVARCV_CONST_LABEL,
			(void*)&&ZEND_ADD_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
			(void*)&&ZEND_ADD_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_ADD_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
			(void*)&&ZEND_ADD_DOUBLE_SPEC_TMPVARCV_CONST_LABEL,
			(void*)&&ZEND_ADD_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
			(void*)&&ZEND_ADD_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_ADD_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_ADD_DOUBLE_SPEC_TMPVARCV_CONST_LABEL,
			(void*)&&ZEND_ADD_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
			(void*)&&ZEND_ADD_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_ADD_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_SUB_LONG_NO_OVERFLOW_SPEC_CONST_TMPVARCV_LABEL,
			(void*)&&ZEND_SUB_LONG_NO_OVERFLOW_SPEC_CONST_TMPVARCV_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_SUB_LONG_NO_OVERFLOW_SPEC_CONST_TMPVARCV_LABEL,
			(void*)&&ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_CONST_LABEL,
			(void*)&&ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_LABEL,
			(void*)&&ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_LABEL,
			(void*)&&ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_CONST_LABEL,
			(void*)&&ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_LABEL,
			(void*)&&ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_CONST_LABEL,
			(void*)&&ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_LABEL,
			(void*)&&ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_SUB_LONG_SPEC_CONST_TMPVARCV_LABEL,
			(void*)&&ZEND_SUB_LONG_SPEC_CONST_TMPVARCV_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_SUB_LONG_SPEC_CONST_TMPVARCV_LABEL,
			(void*)&&ZEND_SUB_LONG_SPEC_TMPVARCV_CONST_LABEL,
			(void*)&&ZEND_SUB_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
			(void*)&&ZEND_SUB_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_SUB_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
			(void*)&&ZEND_SUB_LONG_SPEC_TMPVARCV_CONST_LABEL,
			(void*)&&ZEND_SUB_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
			(void*)&&ZEND_SUB_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_SUB_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_SUB_LONG_SPEC_TMPVARCV_CONST_LABEL,
			(void*)&&ZEND_SUB_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
			(void*)&&ZEND_SUB_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_SUB_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_SUB_DOUBLE_SPEC_CONST_TMPVARCV_LABEL,
			(void*)&&ZEND_SUB_DOUBLE_SPEC_CONST_TMPVARCV_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_SUB_DOUBLE_SPEC_CONST_TMPVARCV_LABEL,
			(void*)&&ZEND_SUB_DOUBLE_SPEC_TMPVARCV_CONST_LABEL,
			(void*)&&ZEND_SUB_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
			(void*)&&ZEND_SUB_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_SUB_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
			(void*)&&ZEND_SUB_DOUBLE_SPEC_TMPVARCV_CONST_LABEL,
			(void*)&&ZEND_SUB_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
			(void*)&&ZEND_SUB_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_SUB_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_SUB_DOUBLE_SPEC_TMPVARCV_CONST_LABEL,
			(void*)&&ZEND_SUB_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
			(void*)&&ZEND_SUB_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_SUB_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_CONST_LABEL,
			(void*)&&ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_LABEL,
			(void*)&&ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_LABEL,
			(void*)&&ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_CONST_LABEL,
			(void*)&&ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_LABEL,
			(void*)&&ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_CONST_LABEL,
			(void*)&&ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_LABEL,
			(void*)&&ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_MUL_LONG_SPEC_TMPVARCV_CONST_LABEL,
			(void*)&&ZEND_MUL_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
			(void*)&&ZEND_MUL_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_MUL_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
			(void*)&&ZEND_MUL_LONG_SPEC_TMPVARCV_CONST_LABEL,
			(void*)&&ZEND_MUL_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
			(void*)&&ZEND_MUL_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_MUL_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_MUL_LONG_SPEC_TMPVARCV_CONST_LABEL,
			(void*)&&ZEND_MUL_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
			(void*)&&ZEND_MUL_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_MUL_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_MUL_DOUBLE_SPEC_TMPVARCV_CONST_LABEL,
			(void*)&&ZEND_MUL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
			(void*)&&ZEND_MUL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_MUL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
			(void*)&&ZEND_MUL_DOUBLE_SPEC_TMPVARCV_CONST_LABEL,
			(void*)&&ZEND_MUL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
			(void*)&&ZEND_MUL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_MUL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_MUL_DOUBLE_SPEC_TMPVARCV_CONST_LABEL,
			(void*)&&ZEND_MUL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
			(void*)&&ZEND_MUL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_MUL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_CONST_LABEL,
			(void*)&&ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPZ_LABEL,
			(void*)&&ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPNZ_LABEL,
			(void*)&&ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
			(void*)&&ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
			(void*)&&ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
			(void*)&&ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
			(void*)&&ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
			(void*)&&ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
			(void*)&&ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
			(void*)&&ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
			(void*)&&ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_CONST_LABEL,
			(void*)&&ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPZ_LABEL,
			(void*)&&ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPNZ_LABEL,
			(void*)&&ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
			(void*)&&ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
			(void*)&&ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
			(void*)&&ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
			(void*)&&ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
			(void*)&&ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
			(void*)&&ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
			(void*)&&ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_CONST_LABEL,
			(void*)&&ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPZ_LABEL,
			(void*)&&ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPNZ_LABEL,
			(void*)&&ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
			(void*)&&ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
			(void*)&&ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
			(void*)&&ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
			(void*)&&ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
			(void*)&&ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
			(void*)&&ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
			(void*)&&ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_LABEL,
			(void*)&&ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ_LABEL,
			(void*)&&ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ_LABEL,
			(void*)&&ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
			(void*)&&ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
			(void*)&&ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
			(void*)&&ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
			(void*)&&ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
			(void*)&&ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
			(void*)&&ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
			(void*)&&ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
			(void*)&&ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_LABEL,
			(void*)&&ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ_LABEL,
			(void*)&&ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ_LABEL,
			(void*)&&ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
			(void*)&&ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
			(void*)&&ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
			(void*)&&ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
			(void*)&&ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
			(void*)&&ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
			(void*)&&ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
			(void*)&&ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_LABEL,
			(void*)&&ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ_LABEL,
			(void*)&&ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ_LABEL,
			(void*)&&ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
			(void*)&&ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
			(void*)&&ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
			(void*)&&ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
			(void*)&&ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
			(void*)&&ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
			(void*)&&ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
			(void*)&&ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_CONST_LABEL,
			(void*)&&ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPZ_LABEL,
			(void*)&&ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPNZ_LABEL,
			(void*)&&ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
			(void*)&&ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
			(void*)&&ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
			(void*)&&ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
			(void*)&&ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
			(void*)&&ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
			(void*)&&ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
			(void*)&&ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
			(void*)&&ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_CONST_LABEL,
			(void*)&&ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPZ_LABEL,
			(void*)&&ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPNZ_LABEL,
			(void*)&&ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
			(void*)&&ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
			(void*)&&ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
			(void*)&&ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
			(void*)&&ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
			(void*)&&ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
			(void*)&&ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
			(void*)&&ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_CONST_LABEL,
			(void*)&&ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPZ_LABEL,
			(void*)&&ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPNZ_LABEL,
			(void*)&&ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
			(void*)&&ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
			(void*)&&ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
			(void*)&&ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
			(void*)&&ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
			(void*)&&ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
			(void*)&&ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
			(void*)&&ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_LABEL,
			(void*)&&ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ_LABEL,
			(void*)&&ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ_LABEL,
			(void*)&&ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
			(void*)&&ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
			(void*)&&ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
			(void*)&&ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
			(void*)&&ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
			(void*)&&ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
			(void*)&&ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
			(void*)&&ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
			(void*)&&ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_LABEL,
			(void*)&&ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ_LABEL,
			(void*)&&ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ_LABEL,
			(void*)&&ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
			(void*)&&ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
			(void*)&&ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
			(void*)&&ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
			(void*)&&ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
			(void*)&&ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
			(void*)&&ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
			(void*)&&ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_LABEL,
			(void*)&&ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ_LABEL,
			(void*)&&ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ_LABEL,
			(void*)&&ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
			(void*)&&ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
			(void*)&&ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
			(void*)&&ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
			(void*)&&ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
			(void*)&&ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
			(void*)&&ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
			(void*)&&ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
			(void*)&&ZEND_IS_IDENTICAL_EMPTY_ARRAY_SPEC_TMPVARCV_CONST_LABEL,
			(void*)&&ZEND_IS_IDENTICAL_EMPTY_ARRAY_SPEC_TMPVARCV_CONST_JMPZ_LABEL,
			(void*)&&ZEND_IS_IDENTICAL_EMPTY_ARRAY_SPEC_TMPVARCV_CONST_JMPNZ_LABEL,
			(void*)&&ZEND_IS_NOT_IDENTICAL_EMPTY_ARRAY_SPEC_TMPVARCV_CONST_LABEL,
			(void*)&&ZEND_IS_NOT_IDENTICAL_EMPTY_ARRAY_SPEC_TMPVARCV_CONST_JMPZ_LABEL,
			(void*)&&ZEND_IS_NOT_IDENTICAL_EMPTY_ARRAY_SPEC_TMPVARCV_CONST_JMPNZ_LABEL,
			(void*)&&ZEND_IS_IDENTICAL_NOTHROW_SPEC_CV_CONST_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_IS_IDENTICAL_NOTHROW_SPEC_CV_CV_LABEL,
			(void*)&&ZEND_IS_NOT_IDENTICAL_NOTHROW_SPEC_CV_CONST_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_IS_NOT_IDENTICAL_NOTHROW_SPEC_CV_CV_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV_LABEL,
			(void*)&&ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV_JMPZ_LABEL,
			(void*)&&ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV_JMPNZ_LABEL,
			(void*)&&ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV_LABEL,
			(void*)&&ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV_JMPZ_LABEL,
			(void*)&&ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV_JMPNZ_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV_LABEL,
			(void*)&&ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV_JMPZ_LABEL,
			(void*)&&ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV_JMPNZ_LABEL,
			(void*)&&ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST_LABEL,
			(void*)&&ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST_JMPZ_LABEL,
			(void*)&&ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST_JMPNZ_LABEL,
			(void*)&&ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
			(void*)&&ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
			(void*)&&ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
			(void*)&&ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
			(void*)&&ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
			(void*)&&ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
			(void*)&&ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
			(void*)&&ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
			(void*)&&ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST_LABEL,
			(void*)&&ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST_JMPZ_LABEL,
			(void*)&&ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST_JMPNZ_LABEL,
			(void*)&&ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
			(void*)&&ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
			(void*)&&ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
			(void*)&&ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
			(void*)&&ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
			(void*)&&ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
			(void*)&&ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
			(void*)&&ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST_LABEL,
			(void*)&&ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST_JMPZ_LABEL,
			(void*)&&ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST_JMPNZ_LABEL,
			(void*)&&ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
			(void*)&&ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
			(void*)&&ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
			(void*)&&ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
			(void*)&&ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
			(void*)&&ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
			(void*)&&ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
			(void*)&&ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV_LABEL,
			(void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV_JMPZ_LABEL,
			(void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV_JMPNZ_LABEL,
			(void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV_LABEL,
			(void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV_JMPZ_LABEL,
			(void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV_JMPNZ_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV_LABEL,
			(void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV_JMPZ_LABEL,
			(void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV_JMPNZ_LABEL,
			(void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST_LABEL,
			(void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ_LABEL,
			(void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ_LABEL,
			(void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
			(void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
			(void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
			(void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
			(void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
			(void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
			(void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
			(void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
			(void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST_LABEL,
			(void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ_LABEL,
			(void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ_LABEL,
			(void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
			(void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
			(void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
			(void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
			(void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
			(void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
			(void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
			(void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST_LABEL,
			(void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ_LABEL,
			(void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ_LABEL,
			(void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
			(void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
			(void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
			(void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
			(void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
			(void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
			(void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
			(void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV_LABEL,
			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV_JMPZ_LABEL,
			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV_JMPNZ_LABEL,
			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV_LABEL,
			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV_JMPZ_LABEL,
			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV_JMPNZ_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV_LABEL,
			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV_JMPZ_LABEL,
			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV_JMPNZ_LABEL,
			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST_LABEL,
			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPZ_LABEL,
			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPNZ_LABEL,
			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST_LABEL,
			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPZ_LABEL,
			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPNZ_LABEL,
			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST_LABEL,
			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPZ_LABEL,
			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPNZ_LABEL,
			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_LABEL,
			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_JMPZ_LABEL,
			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_JMPNZ_LABEL,
			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_LABEL,
			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_JMPZ_LABEL,
			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_JMPNZ_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_LABEL,
			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_JMPZ_LABEL,
			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_JMPNZ_LABEL,
			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_LABEL,
			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ_LABEL,
			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ_LABEL,
			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_LABEL,
			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ_LABEL,
			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ_LABEL,
			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_LABEL,
			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ_LABEL,
			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ_LABEL,
			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
			(void*)&&ZEND_PRE_INC_LONG_NO_OVERFLOW_SPEC_CV_RETVAL_UNUSED_LABEL,
			(void*)&&ZEND_PRE_INC_LONG_NO_OVERFLOW_SPEC_CV_RETVAL_USED_LABEL,
			(void*)&&ZEND_PRE_INC_LONG_SPEC_CV_RETVAL_UNUSED_LABEL,
			(void*)&&ZEND_PRE_INC_LONG_SPEC_CV_RETVAL_USED_LABEL,
			(void*)&&ZEND_PRE_DEC_LONG_NO_OVERFLOW_SPEC_CV_RETVAL_UNUSED_LABEL,
			(void*)&&ZEND_PRE_DEC_LONG_NO_OVERFLOW_SPEC_CV_RETVAL_USED_LABEL,
			(void*)&&ZEND_PRE_DEC_LONG_SPEC_CV_RETVAL_UNUSED_LABEL,
			(void*)&&ZEND_PRE_DEC_LONG_SPEC_CV_RETVAL_USED_LABEL,
			(void*)&&ZEND_POST_INC_LONG_NO_OVERFLOW_SPEC_CV_LABEL,
			(void*)&&ZEND_POST_INC_LONG_SPEC_CV_LABEL,
			(void*)&&ZEND_POST_DEC_LONG_NO_OVERFLOW_SPEC_CV_LABEL,
			(void*)&&ZEND_POST_DEC_LONG_SPEC_CV_LABEL,
			(void*)&&ZEND_QM_ASSIGN_LONG_SPEC_CONST_LABEL,
			(void*)&&ZEND_QM_ASSIGN_LONG_SPEC_TMPVARCV_LABEL,
			(void*)&&ZEND_QM_ASSIGN_LONG_SPEC_TMPVARCV_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_QM_ASSIGN_LONG_SPEC_TMPVARCV_LABEL,
			(void*)&&ZEND_QM_ASSIGN_DOUBLE_SPEC_CONST_LABEL,
			(void*)&&ZEND_QM_ASSIGN_DOUBLE_SPEC_TMPVARCV_LABEL,
			(void*)&&ZEND_QM_ASSIGN_DOUBLE_SPEC_TMPVARCV_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_QM_ASSIGN_DOUBLE_SPEC_TMPVARCV_LABEL,
			(void*)&&ZEND_QM_ASSIGN_NOREF_SPEC_CONST_LABEL,
			(void*)&&ZEND_QM_ASSIGN_NOREF_SPEC_TMPVARCV_LABEL,
			(void*)&&ZEND_QM_ASSIGN_NOREF_SPEC_TMPVARCV_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_QM_ASSIGN_NOREF_SPEC_TMPVARCV_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_FETCH_DIM_R_INDEX_SPEC_CONST_TMPVARCV_LABEL,
			(void*)&&ZEND_FETCH_DIM_R_INDEX_SPEC_CONST_TMPVARCV_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_FETCH_DIM_R_INDEX_SPEC_CONST_TMPVARCV_LABEL,
			(void*)&&ZEND_FETCH_DIM_R_INDEX_SPEC_TMPVAR_CONST_LABEL,
			(void*)&&ZEND_FETCH_DIM_R_INDEX_SPEC_TMPVAR_TMPVARCV_LABEL,
			(void*)&&ZEND_FETCH_DIM_R_INDEX_SPEC_TMPVAR_TMPVARCV_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_FETCH_DIM_R_INDEX_SPEC_TMPVAR_TMPVARCV_LABEL,
			(void*)&&ZEND_FETCH_DIM_R_INDEX_SPEC_TMPVAR_CONST_LABEL,
			(void*)&&ZEND_FETCH_DIM_R_INDEX_SPEC_TMPVAR_TMPVARCV_LABEL,
			(void*)&&ZEND_FETCH_DIM_R_INDEX_SPEC_TMPVAR_TMPVARCV_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_FETCH_DIM_R_INDEX_SPEC_TMPVAR_TMPVARCV_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_FETCH_DIM_R_INDEX_SPEC_CV_CONST_LABEL,
			(void*)&&ZEND_FETCH_DIM_R_INDEX_SPEC_CV_TMPVARCV_LABEL,
			(void*)&&ZEND_FETCH_DIM_R_INDEX_SPEC_CV_TMPVARCV_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_FETCH_DIM_R_INDEX_SPEC_CV_TMPVARCV_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_SEND_VAR_SIMPLE_SPEC_VAR_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_SEND_VAR_SIMPLE_SPEC_CV_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_SEND_VAR_EX_SIMPLE_SPEC_VAR_UNUSED_LABEL,
			(void*)&&ZEND_NULL_LABEL,
			(void*)&&ZEND_SEND_VAR_EX_SIMPLE_SPEC_CV_UNUSED_LABEL,
			(void*)&&ZEND_SEND_VAL_SIMPLE_SPEC_CONST_LABEL,
			(void*)&&ZEND_SEND_VAL_EX_SIMPLE_SPEC_CONST_LABEL,
			(void*)&&ZEND_FE_FETCH_R_SIMPLE_SPEC_VAR_CV_RETVAL_UNUSED_LABEL,
			(void*)&&ZEND_FE_FETCH_R_SIMPLE_SPEC_VAR_CV_RETVAL_USED_LABEL,
			(void*)&&ZEND_NULL_LABEL
		};
		zend_opcode_handlers = (zend_vm_opcode_handler_t*) labels;
		zend_handlers_count = sizeof(labels) / sizeof(labels[0]);
		memset(&hybrid_halt_op, 0, sizeof(hybrid_halt_op));
		hybrid_halt_op.handler = (void*)&&HYBRID_HALT_LABEL;
#ifdef ZEND_VM_HYBRID_JIT_RED_ZONE_SIZE
		memset(vm_stack_data.hybrid_jit_red_zone, 0, ZEND_VM_HYBRID_JIT_RED_ZONE_SIZE);
#endif
		if (zend_touch_vm_stack_data) {
			zend_touch_vm_stack_data(&vm_stack_data);
		}
		goto HYBRID_HALT_LABEL;
	}
#endif

	LOAD_OPLINE();
	ZEND_VM_LOOP_INTERRUPT_CHECK();

#ifdef ZEND_CHECK_STACK_LIMIT
	if (UNEXPECTED(zend_call_stack_overflowed(EG(stack_limit)))) {
		zend_call_stack_size_error();
		/* No opline was executed before exception */
		EG(opline_before_exception) = NULL;
		LOAD_OPLINE();
		/* Fall through to handle exception below. */
	}
#endif /* ZEND_CHECK_STACK_LIMIT */

	while (1) {
#if (ZEND_VM_KIND == ZEND_VM_KIND_HYBRID)
		HYBRID_SWITCH() {
#else /* ZEND_VM_KIND != ZEND_VM_KIND_HYBRID */
#if defined(ZEND_VM_FP_GLOBAL_REG) && defined(ZEND_VM_IP_GLOBAL_REG)
		(OPLINE->handler)(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
		if (UNEXPECTED(!OPLINE)) {
#else
		opline = (opline->handler)(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
		if (UNEXPECTED(((uintptr_t)opline & ZEND_VM_ENTER_BIT))) {
#endif
#endif /* ZEND_VM_KIND != ZEND_VM_KIND_HYBRID */
#if (ZEND_VM_KIND == ZEND_VM_KIND_HYBRID)
			HYBRID_CASE(ZEND_ASSIGN_STATIC_PROP_OP_SPEC):
				VM_TRACE(ZEND_ASSIGN_STATIC_PROP_OP_SPEC)
				ZEND_ASSIGN_STATIC_PROP_OP_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_ASSIGN_STATIC_PROP_OP_SPEC)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_PRE_INC_STATIC_PROP_SPEC):
				VM_TRACE(ZEND_PRE_INC_STATIC_PROP_SPEC)
				ZEND_PRE_INC_STATIC_PROP_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_PRE_INC_STATIC_PROP_SPEC)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_POST_INC_STATIC_PROP_SPEC):
				VM_TRACE(ZEND_POST_INC_STATIC_PROP_SPEC)
				ZEND_POST_INC_STATIC_PROP_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_POST_INC_STATIC_PROP_SPEC)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_FETCH_STATIC_PROP_R_SPEC):
				VM_TRACE(ZEND_FETCH_STATIC_PROP_R_SPEC)
				ZEND_FETCH_STATIC_PROP_R_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_FETCH_STATIC_PROP_R_SPEC)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_FETCH_STATIC_PROP_W_SPEC):
				VM_TRACE(ZEND_FETCH_STATIC_PROP_W_SPEC)
				ZEND_FETCH_STATIC_PROP_W_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_FETCH_STATIC_PROP_W_SPEC)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_FETCH_STATIC_PROP_RW_SPEC):
				VM_TRACE(ZEND_FETCH_STATIC_PROP_RW_SPEC)
				ZEND_FETCH_STATIC_PROP_RW_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_FETCH_STATIC_PROP_RW_SPEC)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_FETCH_STATIC_PROP_FUNC_ARG_SPEC):
				VM_TRACE(ZEND_FETCH_STATIC_PROP_FUNC_ARG_SPEC)
				ZEND_FETCH_STATIC_PROP_FUNC_ARG_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_FETCH_STATIC_PROP_FUNC_ARG_SPEC)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_FETCH_STATIC_PROP_UNSET_SPEC):
				VM_TRACE(ZEND_FETCH_STATIC_PROP_UNSET_SPEC)
				ZEND_FETCH_STATIC_PROP_UNSET_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_FETCH_STATIC_PROP_UNSET_SPEC)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_FETCH_STATIC_PROP_IS_SPEC):
				VM_TRACE(ZEND_FETCH_STATIC_PROP_IS_SPEC)
				ZEND_FETCH_STATIC_PROP_IS_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_FETCH_STATIC_PROP_IS_SPEC)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_ASSIGN_STATIC_PROP_SPEC_OP_DATA_CONST):
				VM_TRACE(ZEND_ASSIGN_STATIC_PROP_SPEC_OP_DATA_CONST)
				ZEND_ASSIGN_STATIC_PROP_SPEC_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_ASSIGN_STATIC_PROP_SPEC_OP_DATA_CONST)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_ASSIGN_STATIC_PROP_SPEC_OP_DATA_TMP):
				VM_TRACE(ZEND_ASSIGN_STATIC_PROP_SPEC_OP_DATA_TMP)
				ZEND_ASSIGN_STATIC_PROP_SPEC_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_ASSIGN_STATIC_PROP_SPEC_OP_DATA_TMP)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_ASSIGN_STATIC_PROP_SPEC_OP_DATA_VAR):
				VM_TRACE(ZEND_ASSIGN_STATIC_PROP_SPEC_OP_DATA_VAR)
				ZEND_ASSIGN_STATIC_PROP_SPEC_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_ASSIGN_STATIC_PROP_SPEC_OP_DATA_VAR)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_ASSIGN_STATIC_PROP_SPEC_OP_DATA_CV):
				VM_TRACE(ZEND_ASSIGN_STATIC_PROP_SPEC_OP_DATA_CV)
				ZEND_ASSIGN_STATIC_PROP_SPEC_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_ASSIGN_STATIC_PROP_SPEC_OP_DATA_CV)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_ASSIGN_STATIC_PROP_REF_SPEC):
				VM_TRACE(ZEND_ASSIGN_STATIC_PROP_REF_SPEC)
				ZEND_ASSIGN_STATIC_PROP_REF_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_ASSIGN_STATIC_PROP_REF_SPEC)
				HYBRID_BREAK();
zend_leave_helper_SPEC_LABEL:
{
	zend_execute_data *old_execute_data;
	uint32_t call_info = EX_CALL_INFO();
#if ZEND_VM_KIND != ZEND_VM_KIND_TAILCALL
	/* zend_leave_helper may be called with opline=call_leave_op in TAILCALL VM */
	SAVE_OPLINE();
#endif

	if (EXPECTED((call_info & (ZEND_CALL_CODE|ZEND_CALL_TOP|ZEND_CALL_HAS_SYMBOL_TABLE|ZEND_CALL_FREE_EXTRA_ARGS|ZEND_CALL_ALLOCATED|ZEND_CALL_HAS_EXTRA_NAMED_PARAMS)) == 0)) {
		EG(current_execute_data) = EX(prev_execute_data);
		i_free_compiled_variables(execute_data);

#ifdef ZEND_PREFER_RELOAD
		call_info = EX_CALL_INFO();
#endif
		if (UNEXPECTED(call_info & ZEND_CALL_RELEASE_THIS)) {
			OBJ_RELEASE(Z_OBJ(execute_data->This));
		} else if (UNEXPECTED(call_info & ZEND_CALL_CLOSURE)) {
			OBJ_RELEASE(ZEND_CLOSURE_OBJECT(EX(func)));
		}
		EG(vm_stack_top) = (zval*)execute_data;
		execute_data = EX(prev_execute_data);

		if (UNEXPECTED(EG(exception) != NULL)) {
			zend_rethrow_exception(execute_data);
			HANDLE_EXCEPTION_LEAVE();
		}

		LOAD_NEXT_OPLINE();
		ZEND_VM_LEAVE();
	} else if (EXPECTED((call_info & (ZEND_CALL_CODE|ZEND_CALL_TOP)) == 0)) {
		EG(current_execute_data) = EX(prev_execute_data);
		i_free_compiled_variables(execute_data);

#ifdef ZEND_PREFER_RELOAD
		call_info = EX_CALL_INFO();
#endif
		if (UNEXPECTED(call_info & ZEND_CALL_HAS_SYMBOL_TABLE)) {
			zend_clean_and_cache_symbol_table(EX(symbol_table));
		}

		if (UNEXPECTED(call_info & ZEND_CALL_HAS_EXTRA_NAMED_PARAMS)) {
			zend_free_extra_named_params(EX(extra_named_params));
		}

		/* Free extra args before releasing the closure,
		 * as that may free the op_array. */
		zend_vm_stack_free_extra_args_ex(call_info, execute_data);

		if (UNEXPECTED(call_info & ZEND_CALL_RELEASE_THIS)) {
			OBJ_RELEASE(Z_OBJ(execute_data->This));
		} else if (UNEXPECTED(call_info & ZEND_CALL_CLOSURE)) {
			OBJ_RELEASE(ZEND_CLOSURE_OBJECT(EX(func)));
		}

		old_execute_data = execute_data;
		execute_data = EX(prev_execute_data);
		zend_vm_stack_free_call_frame_ex(call_info, old_execute_data);

		if (UNEXPECTED(EG(exception) != NULL)) {
			zend_rethrow_exception(execute_data);
			HANDLE_EXCEPTION_LEAVE();
		}

		LOAD_NEXT_OPLINE();
		ZEND_VM_LEAVE();
	} else if (EXPECTED((call_info & ZEND_CALL_TOP) == 0)) {
		if (EX(func)->op_array.last_var > 0) {
			zend_detach_symbol_table(execute_data);
			call_info |= ZEND_CALL_NEEDS_REATTACH;
		}
		zend_destroy_static_vars(&EX(func)->op_array);
		destroy_op_array(&EX(func)->op_array);
		efree_size(EX(func), sizeof(zend_op_array));
		old_execute_data = execute_data;
		execute_data = EG(current_execute_data) = EX(prev_execute_data);
		zend_vm_stack_free_call_frame_ex(call_info, old_execute_data);

		if (call_info & ZEND_CALL_NEEDS_REATTACH) {
			if (EX(func)->op_array.last_var > 0) {
				zend_attach_symbol_table(execute_data);
			} else {
				ZEND_ADD_CALL_FLAG(execute_data, ZEND_CALL_NEEDS_REATTACH);
			}
		}
		if (UNEXPECTED(EG(exception) != NULL)) {
			zend_rethrow_exception(execute_data);
			HANDLE_EXCEPTION_LEAVE();
		}

		LOAD_NEXT_OPLINE();
		ZEND_VM_LEAVE();
	} else {
		if (EXPECTED((call_info & ZEND_CALL_CODE) == 0)) {
			EG(current_execute_data) = EX(prev_execute_data);
			i_free_compiled_variables(execute_data);
#ifdef ZEND_PREFER_RELOAD
			call_info = EX_CALL_INFO();
#endif
			if (UNEXPECTED(call_info & (ZEND_CALL_HAS_SYMBOL_TABLE|ZEND_CALL_FREE_EXTRA_ARGS|ZEND_CALL_HAS_EXTRA_NAMED_PARAMS))) {
				if (UNEXPECTED(call_info & ZEND_CALL_HAS_SYMBOL_TABLE)) {
					zend_clean_and_cache_symbol_table(EX(symbol_table));
				}
				zend_vm_stack_free_extra_args_ex(call_info, execute_data);
				if (UNEXPECTED(call_info & ZEND_CALL_HAS_EXTRA_NAMED_PARAMS)) {
					zend_free_extra_named_params(EX(extra_named_params));
				}
			}
			if (UNEXPECTED(call_info & ZEND_CALL_CLOSURE)) {
				OBJ_RELEASE(ZEND_CLOSURE_OBJECT(EX(func)));
			}
			ZEND_VM_RETURN();
		} else /* if (call_kind == ZEND_CALL_TOP_CODE) */ {
			zend_array *symbol_table = EX(symbol_table);

			if (EX(func)->op_array.last_var > 0) {
				zend_detach_symbol_table(execute_data);
				call_info |= ZEND_CALL_NEEDS_REATTACH;
			}
			if (call_info & ZEND_CALL_NEEDS_REATTACH) {
				old_execute_data = EX(prev_execute_data);
				while (old_execute_data) {
					if (old_execute_data->func && (ZEND_CALL_INFO(old_execute_data) & ZEND_CALL_HAS_SYMBOL_TABLE)) {
						if (old_execute_data->symbol_table == symbol_table) {
							if (old_execute_data->func->op_array.last_var > 0) {
								zend_attach_symbol_table(old_execute_data);
							} else {
								ZEND_ADD_CALL_FLAG(old_execute_data, ZEND_CALL_NEEDS_REATTACH);
							}
						}
						break;
					}
					old_execute_data = old_execute_data->prev_execute_data;
				}
			}
			EG(current_execute_data) = EX(prev_execute_data);
			ZEND_VM_RETURN();
		}
	}
}

			HYBRID_CASE(ZEND_JMP_SPEC):
				VM_TRACE(ZEND_JMP_SPEC)
				ZEND_JMP_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_JMP_SPEC)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_DO_ICALL_SPEC_RETVAL_UNUSED):
				VM_TRACE(ZEND_DO_ICALL_SPEC_RETVAL_UNUSED)
				ZEND_DO_ICALL_SPEC_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_DO_ICALL_SPEC_RETVAL_UNUSED)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_DO_ICALL_SPEC_RETVAL_USED):
				VM_TRACE(ZEND_DO_ICALL_SPEC_RETVAL_USED)
				ZEND_DO_ICALL_SPEC_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_DO_ICALL_SPEC_RETVAL_USED)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_DO_ICALL_SPEC_OBSERVER):
				VM_TRACE(ZEND_DO_ICALL_SPEC_OBSERVER)
				ZEND_DO_ICALL_SPEC_OBSERVER_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_DO_ICALL_SPEC_OBSERVER)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_DO_UCALL_SPEC_RETVAL_UNUSED):
				VM_TRACE(ZEND_DO_UCALL_SPEC_RETVAL_UNUSED)
				ZEND_DO_UCALL_SPEC_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_DO_UCALL_SPEC_RETVAL_UNUSED)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_DO_UCALL_SPEC_RETVAL_USED):
				VM_TRACE(ZEND_DO_UCALL_SPEC_RETVAL_USED)
				ZEND_DO_UCALL_SPEC_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_DO_UCALL_SPEC_RETVAL_USED)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_DO_UCALL_SPEC_OBSERVER):
				VM_TRACE(ZEND_DO_UCALL_SPEC_OBSERVER)
				ZEND_DO_UCALL_SPEC_OBSERVER_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_DO_UCALL_SPEC_OBSERVER)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_DO_FCALL_BY_NAME_SPEC_RETVAL_UNUSED):
				VM_TRACE(ZEND_DO_FCALL_BY_NAME_SPEC_RETVAL_UNUSED)
				ZEND_DO_FCALL_BY_NAME_SPEC_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_DO_FCALL_BY_NAME_SPEC_RETVAL_UNUSED)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_DO_FCALL_BY_NAME_SPEC_RETVAL_USED):
				VM_TRACE(ZEND_DO_FCALL_BY_NAME_SPEC_RETVAL_USED)
				ZEND_DO_FCALL_BY_NAME_SPEC_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_DO_FCALL_BY_NAME_SPEC_RETVAL_USED)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_DO_FCALL_BY_NAME_SPEC_OBSERVER):
				VM_TRACE(ZEND_DO_FCALL_BY_NAME_SPEC_OBSERVER)
				ZEND_DO_FCALL_BY_NAME_SPEC_OBSERVER_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_DO_FCALL_BY_NAME_SPEC_OBSERVER)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_DO_FCALL_SPEC_RETVAL_UNUSED):
				VM_TRACE(ZEND_DO_FCALL_SPEC_RETVAL_UNUSED)
				ZEND_DO_FCALL_SPEC_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_DO_FCALL_SPEC_RETVAL_UNUSED)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_DO_FCALL_SPEC_RETVAL_USED):
				VM_TRACE(ZEND_DO_FCALL_SPEC_RETVAL_USED)
				ZEND_DO_FCALL_SPEC_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_DO_FCALL_SPEC_RETVAL_USED)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_DO_FCALL_SPEC_OBSERVER):
				VM_TRACE(ZEND_DO_FCALL_SPEC_OBSERVER)
				ZEND_DO_FCALL_SPEC_OBSERVER_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_DO_FCALL_SPEC_OBSERVER)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_GENERATOR_CREATE_SPEC):
				VM_TRACE(ZEND_GENERATOR_CREATE_SPEC)
				ZEND_GENERATOR_CREATE_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_GENERATOR_CREATE_SPEC)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_SEND_UNPACK_SPEC):
				VM_TRACE(ZEND_SEND_UNPACK_SPEC)
				ZEND_SEND_UNPACK_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_SEND_UNPACK_SPEC)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_SEND_ARRAY_SPEC):
				VM_TRACE(ZEND_SEND_ARRAY_SPEC)
				ZEND_SEND_ARRAY_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_SEND_ARRAY_SPEC)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_RECV_NOTYPE_SPEC):
				VM_TRACE(ZEND_RECV_NOTYPE_SPEC)
				ZEND_RECV_NOTYPE_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_RECV_NOTYPE_SPEC)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_ADD_ARRAY_UNPACK_SPEC):
				VM_TRACE(ZEND_ADD_ARRAY_UNPACK_SPEC)
				ZEND_ADD_ARRAY_UNPACK_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_ADD_ARRAY_UNPACK_SPEC)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_UNSET_STATIC_PROP_SPEC):
				VM_TRACE(ZEND_UNSET_STATIC_PROP_SPEC)
				ZEND_UNSET_STATIC_PROP_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_UNSET_STATIC_PROP_SPEC)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_ISSET_ISEMPTY_STATIC_PROP_SPEC):
				VM_TRACE(ZEND_ISSET_ISEMPTY_STATIC_PROP_SPEC)
				ZEND_ISSET_ISEMPTY_STATIC_PROP_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_ISSET_ISEMPTY_STATIC_PROP_SPEC)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_BEGIN_SILENCE_SPEC):
				VM_TRACE(ZEND_BEGIN_SILENCE_SPEC)
				ZEND_BEGIN_SILENCE_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_BEGIN_SILENCE_SPEC)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_EXT_STMT_SPEC):
				VM_TRACE(ZEND_EXT_STMT_SPEC)
				ZEND_EXT_STMT_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_EXT_STMT_SPEC)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_EXT_FCALL_BEGIN_SPEC):
				VM_TRACE(ZEND_EXT_FCALL_BEGIN_SPEC)
				ZEND_EXT_FCALL_BEGIN_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_EXT_FCALL_BEGIN_SPEC)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_EXT_FCALL_END_SPEC):
				VM_TRACE(ZEND_EXT_FCALL_END_SPEC)
				ZEND_EXT_FCALL_END_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_EXT_FCALL_END_SPEC)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_DECLARE_ANON_CLASS_SPEC):
				VM_TRACE(ZEND_DECLARE_ANON_CLASS_SPEC)
				ZEND_DECLARE_ANON_CLASS_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_DECLARE_ANON_CLASS_SPEC)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_DECLARE_FUNCTION_SPEC):
				VM_TRACE(ZEND_DECLARE_FUNCTION_SPEC)
				ZEND_DECLARE_FUNCTION_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_DECLARE_FUNCTION_SPEC)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_TICKS_SPEC):
				VM_TRACE(ZEND_TICKS_SPEC)
				ZEND_TICKS_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_TICKS_SPEC)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_EXT_NOP_SPEC):
				VM_TRACE(ZEND_EXT_NOP_SPEC)
				ZEND_EXT_NOP_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_EXT_NOP_SPEC)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_NOP_SPEC):
				VM_TRACE(ZEND_NOP_SPEC)
				ZEND_NOP_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_NOP_SPEC)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_HANDLE_EXCEPTION_SPEC):
				VM_TRACE(ZEND_HANDLE_EXCEPTION_SPEC)
				ZEND_HANDLE_EXCEPTION_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_HANDLE_EXCEPTION_SPEC)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_USER_OPCODE_SPEC):
				VM_TRACE(ZEND_USER_OPCODE_SPEC)
				ZEND_USER_OPCODE_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_USER_OPCODE_SPEC)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_DISCARD_EXCEPTION_SPEC):
				VM_TRACE(ZEND_DISCARD_EXCEPTION_SPEC)
				ZEND_DISCARD_EXCEPTION_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_DISCARD_EXCEPTION_SPEC)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_FAST_CALL_SPEC):
				VM_TRACE(ZEND_FAST_CALL_SPEC)
				ZEND_FAST_CALL_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_FAST_CALL_SPEC)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_FAST_RET_SPEC):
				VM_TRACE(ZEND_FAST_RET_SPEC)
				ZEND_FAST_RET_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_FAST_RET_SPEC)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_ASSERT_CHECK_SPEC):
				VM_TRACE(ZEND_ASSERT_CHECK_SPEC)
				ZEND_ASSERT_CHECK_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_ASSERT_CHECK_SPEC)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_CALL_TRAMPOLINE_SPEC):
				VM_TRACE(ZEND_CALL_TRAMPOLINE_SPEC)
				ZEND_CALL_TRAMPOLINE_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_CALL_TRAMPOLINE_SPEC)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_CALL_TRAMPOLINE_SPEC_OBSERVER):
				VM_TRACE(ZEND_CALL_TRAMPOLINE_SPEC_OBSERVER)
				ZEND_CALL_TRAMPOLINE_SPEC_OBSERVER_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_CALL_TRAMPOLINE_SPEC_OBSERVER)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_FRAMELESS_ICALL_2_SPEC):
				VM_TRACE(ZEND_FRAMELESS_ICALL_2_SPEC)
				ZEND_FRAMELESS_ICALL_2_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_FRAMELESS_ICALL_2_SPEC)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_FRAMELESS_ICALL_2_SPEC_OBSERVER):
				VM_TRACE(ZEND_FRAMELESS_ICALL_2_SPEC_OBSERVER)
				ZEND_FRAMELESS_ICALL_2_SPEC_OBSERVER_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_FRAMELESS_ICALL_2_SPEC_OBSERVER)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_FRAMELESS_ICALL_3_SPEC):
				VM_TRACE(ZEND_FRAMELESS_ICALL_3_SPEC)
				ZEND_FRAMELESS_ICALL_3_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_FRAMELESS_ICALL_3_SPEC)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_FRAMELESS_ICALL_3_SPEC_OBSERVER):
				VM_TRACE(ZEND_FRAMELESS_ICALL_3_SPEC_OBSERVER)
				ZEND_FRAMELESS_ICALL_3_SPEC_OBSERVER_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_FRAMELESS_ICALL_3_SPEC_OBSERVER)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_JMP_FORWARD_SPEC):
				VM_TRACE(ZEND_JMP_FORWARD_SPEC)
				ZEND_JMP_FORWARD_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_JMP_FORWARD_SPEC)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_INIT_FCALL_BY_NAME_SPEC_CONST):
				VM_TRACE(ZEND_INIT_FCALL_BY_NAME_SPEC_CONST)
				ZEND_INIT_FCALL_BY_NAME_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_INIT_FCALL_BY_NAME_SPEC_CONST)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_INIT_DYNAMIC_CALL_SPEC_CONST):
				VM_TRACE(ZEND_INIT_DYNAMIC_CALL_SPEC_CONST)
				ZEND_INIT_DYNAMIC_CALL_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_INIT_DYNAMIC_CALL_SPEC_CONST)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_INIT_NS_FCALL_BY_NAME_SPEC_CONST):
				VM_TRACE(ZEND_INIT_NS_FCALL_BY_NAME_SPEC_CONST)
				ZEND_INIT_NS_FCALL_BY_NAME_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_INIT_NS_FCALL_BY_NAME_SPEC_CONST)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_INIT_FCALL_SPEC_CONST):
				VM_TRACE(ZEND_INIT_FCALL_SPEC_CONST)
				ZEND_INIT_FCALL_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_INIT_FCALL_SPEC_CONST)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_INIT_FCALL_OFFSET_SPEC_CONST):
				VM_TRACE(ZEND_INIT_FCALL_OFFSET_SPEC_CONST)
				ZEND_INIT_FCALL_OFFSET_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_INIT_FCALL_OFFSET_SPEC_CONST)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_RECV_INIT_SPEC_CONST):
				VM_TRACE(ZEND_RECV_INIT_SPEC_CONST)
				ZEND_RECV_INIT_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_RECV_INIT_SPEC_CONST)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_INIT_DYNAMIC_CALL_SPEC_TMPVAR):
				VM_TRACE(ZEND_INIT_DYNAMIC_CALL_SPEC_TMPVAR)
				ZEND_INIT_DYNAMIC_CALL_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_INIT_DYNAMIC_CALL_SPEC_TMPVAR)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_RECV_SPEC_UNUSED):
				VM_TRACE(ZEND_RECV_SPEC_UNUSED)
				ZEND_RECV_SPEC_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_RECV_SPEC_UNUSED)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_RECV_VARIADIC_SPEC_UNUSED):
				VM_TRACE(ZEND_RECV_VARIADIC_SPEC_UNUSED)
				ZEND_RECV_VARIADIC_SPEC_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_RECV_VARIADIC_SPEC_UNUSED)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_FRAMELESS_ICALL_1_SPEC_UNUSED):
				VM_TRACE(ZEND_FRAMELESS_ICALL_1_SPEC_UNUSED)
				ZEND_FRAMELESS_ICALL_1_SPEC_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_FRAMELESS_ICALL_1_SPEC_UNUSED)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_FRAMELESS_ICALL_1_SPEC_OBSERVER):
				VM_TRACE(ZEND_FRAMELESS_ICALL_1_SPEC_OBSERVER)
				ZEND_FRAMELESS_ICALL_1_SPEC_OBSERVER_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_FRAMELESS_ICALL_1_SPEC_OBSERVER)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_INIT_DYNAMIC_CALL_SPEC_CV):
				VM_TRACE(ZEND_INIT_DYNAMIC_CALL_SPEC_CV)
				ZEND_INIT_DYNAMIC_CALL_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_INIT_DYNAMIC_CALL_SPEC_CV)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_BW_NOT_SPEC_CONST):
				VM_TRACE(ZEND_BW_NOT_SPEC_CONST)
				ZEND_BW_NOT_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_BW_NOT_SPEC_CONST)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_BOOL_NOT_SPEC_CONST):
				VM_TRACE(ZEND_BOOL_NOT_SPEC_CONST)
				ZEND_BOOL_NOT_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_BOOL_NOT_SPEC_CONST)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_ECHO_SPEC_CONST):
				VM_TRACE(ZEND_ECHO_SPEC_CONST)
				ZEND_ECHO_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_ECHO_SPEC_CONST)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_JMPZ_SPEC_CONST):
				VM_TRACE(ZEND_JMPZ_SPEC_CONST)
				ZEND_JMPZ_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_JMPZ_SPEC_CONST)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_JMPNZ_SPEC_CONST):
				VM_TRACE(ZEND_JMPNZ_SPEC_CONST)
				ZEND_JMPNZ_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_JMPNZ_SPEC_CONST)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_JMPZ_EX_SPEC_CONST):
				VM_TRACE(ZEND_JMPZ_EX_SPEC_CONST)
				ZEND_JMPZ_EX_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_JMPZ_EX_SPEC_CONST)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_JMPNZ_EX_SPEC_CONST):
				VM_TRACE(ZEND_JMPNZ_EX_SPEC_CONST)
				ZEND_JMPNZ_EX_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_JMPNZ_EX_SPEC_CONST)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_RETURN_SPEC_CONST):
				VM_TRACE(ZEND_RETURN_SPEC_CONST)
{
	USE_OPLINE
	zval *retval_ptr;
	zval *return_value;


	retval_ptr = RT_CONSTANT(opline, opline->op1);
	return_value = EX(return_value);


	if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(retval_ptr) == IS_UNDEF)) {
		SAVE_OPLINE();
		retval_ptr = ZVAL_UNDEFINED_OP1();
		if (return_value) {
			ZVAL_NULL(return_value);
		}
	} else if (!return_value) {
		if (IS_CONST & (IS_VAR|IS_TMP_VAR)) {
			if (Z_REFCOUNTED_P(retval_ptr) && !Z_DELREF_P(retval_ptr)) {
				SAVE_OPLINE();
				rc_dtor_func(Z_COUNTED_P(retval_ptr));
			}
		}
	} else {
		if ((IS_CONST & (IS_CONST|IS_TMP_VAR))) {
			ZVAL_COPY_VALUE(return_value, retval_ptr);
			if (IS_CONST == IS_CONST) {
				if (UNEXPECTED(Z_OPT_REFCOUNTED_P(return_value))) {
					Z_ADDREF_P(return_value);
				}
			}
		} else if (IS_CONST == IS_CV) {
			do {
				if (Z_OPT_REFCOUNTED_P(retval_ptr)) {
					if (EXPECTED(!Z_OPT_ISREF_P(retval_ptr))) {
						if (EXPECTED(!(EX_CALL_INFO() & (ZEND_CALL_CODE|ZEND_CALL_OBSERVED)))) {
							zend_refcounted *ref = Z_COUNTED_P(retval_ptr);
							ZVAL_COPY_VALUE(return_value, retval_ptr);
							if (GC_MAY_LEAK(ref)) {
								SAVE_OPLINE();
								gc_possible_root(ref);
							}
							ZVAL_NULL(retval_ptr);
							break;
						} else {
							Z_ADDREF_P(retval_ptr);
						}
					} else {
						retval_ptr = Z_REFVAL_P(retval_ptr);
						if (Z_OPT_REFCOUNTED_P(retval_ptr)) {
							Z_ADDREF_P(retval_ptr);
						}
					}
				}
				ZVAL_COPY_VALUE(return_value, retval_ptr);
			} while (0);
		} else /* if (IS_CONST == IS_VAR) */ {
			if (UNEXPECTED(Z_ISREF_P(retval_ptr))) {
				zend_refcounted *ref = Z_COUNTED_P(retval_ptr);

				retval_ptr = Z_REFVAL_P(retval_ptr);
				ZVAL_COPY_VALUE(return_value, retval_ptr);
				if (UNEXPECTED(GC_DELREF(ref) == 0)) {
					efree_size(ref, sizeof(zend_reference));
				} else if (Z_OPT_REFCOUNTED_P(retval_ptr)) {
					Z_ADDREF_P(retval_ptr);
				}
			} else {
				ZVAL_COPY_VALUE(return_value, retval_ptr);
			}
		}
	}






	goto zend_leave_helper_SPEC_LABEL;
}

				VM_TRACE_OP_END(ZEND_RETURN_SPEC_CONST)
			HYBRID_CASE(ZEND_RETURN_SPEC_OBSERVER):
				VM_TRACE(ZEND_RETURN_SPEC_OBSERVER)
{
	USE_OPLINE
	zval *retval_ptr;
	zval *return_value;
	zval observer_retval;

	retval_ptr = get_zval_ptr_undef(opline->op1_type, opline->op1, BP_VAR_R);
	return_value = EX(return_value);
	if (!return_value) { return_value = &observer_retval; };
	if (opline->op1_type == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(retval_ptr) == IS_UNDEF)) {
		SAVE_OPLINE();
		retval_ptr = ZVAL_UNDEFINED_OP1();
		if (return_value) {
			ZVAL_NULL(return_value);
		}
	} else if (!return_value) {
		if (opline->op1_type & (IS_VAR|IS_TMP_VAR)) {
			if (Z_REFCOUNTED_P(retval_ptr) && !Z_DELREF_P(retval_ptr)) {
				SAVE_OPLINE();
				rc_dtor_func(Z_COUNTED_P(retval_ptr));
			}
		}
	} else {
		if ((opline->op1_type & (IS_CONST|IS_TMP_VAR))) {
			ZVAL_COPY_VALUE(return_value, retval_ptr);
			if (opline->op1_type == IS_CONST) {
				if (UNEXPECTED(Z_OPT_REFCOUNTED_P(return_value))) {
					Z_ADDREF_P(return_value);
				}
			}
		} else if (opline->op1_type == IS_CV) {
			do {
				if (Z_OPT_REFCOUNTED_P(retval_ptr)) {
					if (EXPECTED(!Z_OPT_ISREF_P(retval_ptr))) {
						if (EXPECTED(!(EX_CALL_INFO() & (ZEND_CALL_CODE|ZEND_CALL_OBSERVED)))) {
							zend_refcounted *ref = Z_COUNTED_P(retval_ptr);
							ZVAL_COPY_VALUE(return_value, retval_ptr);
							if (GC_MAY_LEAK(ref)) {
								SAVE_OPLINE();
								gc_possible_root(ref);
							}
							ZVAL_NULL(retval_ptr);
							break;
						} else {
							Z_ADDREF_P(retval_ptr);
						}
					} else {
						retval_ptr = Z_REFVAL_P(retval_ptr);
						if (Z_OPT_REFCOUNTED_P(retval_ptr)) {
							Z_ADDREF_P(retval_ptr);
						}
					}
				}
				ZVAL_COPY_VALUE(return_value, retval_ptr);
			} while (0);
		} else /* if (opline->op1_type == IS_VAR) */ {
			if (UNEXPECTED(Z_ISREF_P(retval_ptr))) {
				zend_refcounted *ref = Z_COUNTED_P(retval_ptr);

				retval_ptr = Z_REFVAL_P(retval_ptr);
				ZVAL_COPY_VALUE(return_value, retval_ptr);
				if (UNEXPECTED(GC_DELREF(ref) == 0)) {
					efree_size(ref, sizeof(zend_reference));
				} else if (Z_OPT_REFCOUNTED_P(retval_ptr)) {
					Z_ADDREF_P(retval_ptr);
				}
			} else {
				ZVAL_COPY_VALUE(return_value, retval_ptr);
			}
		}
	}
	SAVE_OPLINE();
	zend_observer_fcall_end(execute_data, return_value);
	if (return_value == &observer_retval) { zval_ptr_dtor_nogc(&observer_retval); };
	goto zend_leave_helper_SPEC_LABEL;
}

				VM_TRACE_OP_END(ZEND_RETURN_SPEC_OBSERVER)
			HYBRID_CASE(ZEND_RETURN_BY_REF_SPEC_CONST):
				VM_TRACE(ZEND_RETURN_BY_REF_SPEC_CONST)
				ZEND_RETURN_BY_REF_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_RETURN_BY_REF_SPEC_CONST)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_RETURN_BY_REF_SPEC_OBSERVER):
				VM_TRACE(ZEND_RETURN_BY_REF_SPEC_OBSERVER)
				ZEND_RETURN_BY_REF_SPEC_OBSERVER_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_RETURN_BY_REF_SPEC_OBSERVER)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_GENERATOR_RETURN_SPEC_CONST):
				VM_TRACE(ZEND_GENERATOR_RETURN_SPEC_CONST)
				ZEND_GENERATOR_RETURN_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_GENERATOR_RETURN_SPEC_CONST)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_GENERATOR_RETURN_SPEC_OBSERVER):
				VM_TRACE(ZEND_GENERATOR_RETURN_SPEC_OBSERVER)
				ZEND_GENERATOR_RETURN_SPEC_OBSERVER_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_GENERATOR_RETURN_SPEC_OBSERVER)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_THROW_SPEC_CONST):
				VM_TRACE(ZEND_THROW_SPEC_CONST)
				ZEND_THROW_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_THROW_SPEC_CONST)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_CATCH_SPEC_CONST):
				VM_TRACE(ZEND_CATCH_SPEC_CONST)
				ZEND_CATCH_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_CATCH_SPEC_CONST)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_SEND_USER_SPEC_CONST):
				VM_TRACE(ZEND_SEND_USER_SPEC_CONST)
				ZEND_SEND_USER_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_SEND_USER_SPEC_CONST)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_BOOL_SPEC_CONST):
				VM_TRACE(ZEND_BOOL_SPEC_CONST)
				ZEND_BOOL_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_BOOL_SPEC_CONST)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_CLONE_SPEC_CONST):
				VM_TRACE(ZEND_CLONE_SPEC_CONST)
				ZEND_CLONE_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_CLONE_SPEC_CONST)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_CAST_SPEC_CONST):
				VM_TRACE(ZEND_CAST_SPEC_CONST)
				ZEND_CAST_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_CAST_SPEC_CONST)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_INCLUDE_OR_EVAL_SPEC_CONST):
				VM_TRACE(ZEND_INCLUDE_OR_EVAL_SPEC_CONST)
				ZEND_INCLUDE_OR_EVAL_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_INCLUDE_OR_EVAL_SPEC_CONST)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_INCLUDE_OR_EVAL_SPEC_OBSERVER):
				VM_TRACE(ZEND_INCLUDE_OR_EVAL_SPEC_OBSERVER)
				ZEND_INCLUDE_OR_EVAL_SPEC_OBSERVER_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_INCLUDE_OR_EVAL_SPEC_OBSERVER)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_FE_RESET_R_SPEC_CONST):
				VM_TRACE(ZEND_FE_RESET_R_SPEC_CONST)
				ZEND_FE_RESET_R_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_FE_RESET_R_SPEC_CONST)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_FE_RESET_RW_SPEC_CONST):
				VM_TRACE(ZEND_FE_RESET_RW_SPEC_CONST)
				ZEND_FE_RESET_RW_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_FE_RESET_RW_SPEC_CONST)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_JMP_SET_SPEC_CONST):
				VM_TRACE(ZEND_JMP_SET_SPEC_CONST)
				ZEND_JMP_SET_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_JMP_SET_SPEC_CONST)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_COALESCE_SPEC_CONST):
				VM_TRACE(ZEND_COALESCE_SPEC_CONST)
				ZEND_COALESCE_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_COALESCE_SPEC_CONST)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_JMP_NULL_SPEC_CONST):
				VM_TRACE(ZEND_JMP_NULL_SPEC_CONST)
				ZEND_JMP_NULL_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_JMP_NULL_SPEC_CONST)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_QM_ASSIGN_SPEC_CONST):
				VM_TRACE(ZEND_QM_ASSIGN_SPEC_CONST)
				ZEND_QM_ASSIGN_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_QM_ASSIGN_SPEC_CONST)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_DECLARE_CLASS_SPEC_CONST):
				VM_TRACE(ZEND_DECLARE_CLASS_SPEC_CONST)
				ZEND_DECLARE_CLASS_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_DECLARE_CLASS_SPEC_CONST)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_DECLARE_LAMBDA_FUNCTION_SPEC_CONST):
				VM_TRACE(ZEND_DECLARE_LAMBDA_FUNCTION_SPEC_CONST)
				ZEND_DECLARE_LAMBDA_FUNCTION_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_DECLARE_LAMBDA_FUNCTION_SPEC_CONST)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_YIELD_FROM_SPEC_CONST):
				VM_TRACE(ZEND_YIELD_FROM_SPEC_CONST)
				ZEND_YIELD_FROM_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_YIELD_FROM_SPEC_CONST)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_STRLEN_SPEC_CONST):
				VM_TRACE(ZEND_STRLEN_SPEC_CONST)
				ZEND_STRLEN_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_STRLEN_SPEC_CONST)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_TYPE_CHECK_SPEC_CONST):
				VM_TRACE(ZEND_TYPE_CHECK_SPEC_CONST)
				ZEND_TYPE_CHECK_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_TYPE_CHECK_SPEC_CONST)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_DEFINED_SPEC_CONST):
				VM_TRACE(ZEND_DEFINED_SPEC_CONST)
				ZEND_DEFINED_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_DEFINED_SPEC_CONST)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_JMP_FRAMELESS_SPEC_CONST):
				VM_TRACE(ZEND_JMP_FRAMELESS_SPEC_CONST)
				ZEND_JMP_FRAMELESS_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_JMP_FRAMELESS_SPEC_CONST)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_QM_ASSIGN_LONG_SPEC_CONST):
				VM_TRACE(ZEND_QM_ASSIGN_LONG_SPEC_CONST)
				ZEND_QM_ASSIGN_LONG_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_QM_ASSIGN_LONG_SPEC_CONST)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_QM_ASSIGN_DOUBLE_SPEC_CONST):
				VM_TRACE(ZEND_QM_ASSIGN_DOUBLE_SPEC_CONST)
				ZEND_QM_ASSIGN_DOUBLE_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_QM_ASSIGN_DOUBLE_SPEC_CONST)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_QM_ASSIGN_NOREF_SPEC_CONST):
				VM_TRACE(ZEND_QM_ASSIGN_NOREF_SPEC_CONST)
				ZEND_QM_ASSIGN_NOREF_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_QM_ASSIGN_NOREF_SPEC_CONST)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_SEND_VAL_SIMPLE_SPEC_CONST):
				VM_TRACE(ZEND_SEND_VAL_SIMPLE_SPEC_CONST)
				ZEND_SEND_VAL_SIMPLE_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_SEND_VAL_SIMPLE_SPEC_CONST)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_SEND_VAL_EX_SIMPLE_SPEC_CONST):
				VM_TRACE(ZEND_SEND_VAL_EX_SIMPLE_SPEC_CONST)
				ZEND_SEND_VAL_EX_SIMPLE_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_SEND_VAL_EX_SIMPLE_SPEC_CONST)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_ADD_SPEC_CONST_CONST):
				VM_TRACE(ZEND_ADD_SPEC_CONST_CONST)
				ZEND_ADD_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_ADD_SPEC_CONST_CONST)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_SUB_SPEC_CONST_CONST):
				VM_TRACE(ZEND_SUB_SPEC_CONST_CONST)
				ZEND_SUB_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_SUB_SPEC_CONST_CONST)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_MUL_SPEC_CONST_CONST):
				VM_TRACE(ZEND_MUL_SPEC_CONST_CONST)
				ZEND_MUL_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_MUL_SPEC_CONST_CONST)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_DIV_SPEC_CONST_CONST):
				VM_TRACE(ZEND_DIV_SPEC_CONST_CONST)
				ZEND_DIV_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_DIV_SPEC_CONST_CONST)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_MOD_SPEC_CONST_CONST):
				VM_TRACE(ZEND_MOD_SPEC_CONST_CONST)
				ZEND_MOD_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_MOD_SPEC_CONST_CONST)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_SL_SPEC_CONST_CONST):
				VM_TRACE(ZEND_SL_SPEC_CONST_CONST)
				ZEND_SL_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_SL_SPEC_CONST_CONST)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_SR_SPEC_CONST_CONST):
				VM_TRACE(ZEND_SR_SPEC_CONST_CONST)
				ZEND_SR_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_SR_SPEC_CONST_CONST)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_POW_SPEC_CONST_CONST):
				VM_TRACE(ZEND_POW_SPEC_CONST_CONST)
				ZEND_POW_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_POW_SPEC_CONST_CONST)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_IS_IDENTICAL_SPEC_CONST_CONST):
				VM_TRACE(ZEND_IS_IDENTICAL_SPEC_CONST_CONST)
				ZEND_IS_IDENTICAL_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_IS_IDENTICAL_SPEC_CONST_CONST)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_IS_NOT_IDENTICAL_SPEC_CONST_CONST):
				VM_TRACE(ZEND_IS_NOT_IDENTICAL_SPEC_CONST_CONST)
				ZEND_IS_NOT_IDENTICAL_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_IS_NOT_IDENTICAL_SPEC_CONST_CONST)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_IS_EQUAL_SPEC_CONST_CONST):
				VM_TRACE(ZEND_IS_EQUAL_SPEC_CONST_CONST)
				ZEND_IS_EQUAL_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_IS_EQUAL_SPEC_CONST_CONST)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_IS_NOT_EQUAL_SPEC_CONST_CONST):
				VM_TRACE(ZEND_IS_NOT_EQUAL_SPEC_CONST_CONST)
				ZEND_IS_NOT_EQUAL_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_IS_NOT_EQUAL_SPEC_CONST_CONST)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_IS_SMALLER_SPEC_CONST_CONST):
				VM_TRACE(ZEND_IS_SMALLER_SPEC_CONST_CONST)
				ZEND_IS_SMALLER_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_IS_SMALLER_SPEC_CONST_CONST)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_CONST):
				VM_TRACE(ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_CONST)
				ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_CONST)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_SPACESHIP_SPEC_CONST_CONST):
				VM_TRACE(ZEND_SPACESHIP_SPEC_CONST_CONST)
				ZEND_SPACESHIP_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_SPACESHIP_SPEC_CONST_CONST)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_BW_OR_SPEC_CONST_CONST):
				VM_TRACE(ZEND_BW_OR_SPEC_CONST_CONST)
				ZEND_BW_OR_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_BW_OR_SPEC_CONST_CONST)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_BW_AND_SPEC_CONST_CONST):
				VM_TRACE(ZEND_BW_AND_SPEC_CONST_CONST)
				ZEND_BW_AND_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_BW_AND_SPEC_CONST_CONST)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_BW_XOR_SPEC_CONST_CONST):
				VM_TRACE(ZEND_BW_XOR_SPEC_CONST_CONST)
				ZEND_BW_XOR_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_BW_XOR_SPEC_CONST_CONST)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_BOOL_XOR_SPEC_CONST_CONST):
				VM_TRACE(ZEND_BOOL_XOR_SPEC_CONST_CONST)
				ZEND_BOOL_XOR_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_BOOL_XOR_SPEC_CONST_CONST)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_FETCH_DIM_R_SPEC_CONST_CONST):
				VM_TRACE(ZEND_FETCH_DIM_R_SPEC_CONST_CONST)
				ZEND_FETCH_DIM_R_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_FETCH_DIM_R_SPEC_CONST_CONST)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_FETCH_DIM_IS_SPEC_CONST_CONST):
				VM_TRACE(ZEND_FETCH_DIM_IS_SPEC_CONST_CONST)
				ZEND_FETCH_DIM_IS_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_FETCH_DIM_IS_SPEC_CONST_CONST)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_FETCH_DIM_FUNC_ARG_SPEC_CONST_CONST):
				VM_TRACE(ZEND_FETCH_DIM_FUNC_ARG_SPEC_CONST_CONST)
				ZEND_FETCH_DIM_FUNC_ARG_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_FETCH_DIM_FUNC_ARG_SPEC_CONST_CONST)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_FETCH_OBJ_R_SPEC_CONST_CONST):
				VM_TRACE(ZEND_FETCH_OBJ_R_SPEC_CONST_CONST)
				ZEND_FETCH_OBJ_R_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_FETCH_OBJ_R_SPEC_CONST_CONST)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_FETCH_OBJ_IS_SPEC_CONST_CONST):
				VM_TRACE(ZEND_FETCH_OBJ_IS_SPEC_CONST_CONST)
				ZEND_FETCH_OBJ_IS_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_FETCH_OBJ_IS_SPEC_CONST_CONST)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CONST_CONST):
				VM_TRACE(ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CONST_CONST)
				ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CONST_CONST)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_FETCH_LIST_R_SPEC_CONST_CONST):
				VM_TRACE(ZEND_FETCH_LIST_R_SPEC_CONST_CONST)
				ZEND_FETCH_LIST_R_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_FETCH_LIST_R_SPEC_CONST_CONST)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_FAST_CONCAT_SPEC_CONST_CONST):
				VM_TRACE(ZEND_FAST_CONCAT_SPEC_CONST_CONST)
				ZEND_FAST_CONCAT_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_FAST_CONCAT_SPEC_CONST_CONST)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_INIT_METHOD_CALL_SPEC_CONST_CONST):
				VM_TRACE(ZEND_INIT_METHOD_CALL_SPEC_CONST_CONST)
				ZEND_INIT_METHOD_CALL_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_INIT_METHOD_CALL_SPEC_CONST_CONST)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_INIT_STATIC_METHOD_CALL_SPEC_CONST_CONST):
				VM_TRACE(ZEND_INIT_STATIC_METHOD_CALL_SPEC_CONST_CONST)
				ZEND_INIT_STATIC_METHOD_CALL_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_INIT_STATIC_METHOD_CALL_SPEC_CONST_CONST)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_INIT_USER_CALL_SPEC_CONST_CONST):
				VM_TRACE(ZEND_INIT_USER_CALL_SPEC_CONST_CONST)
				ZEND_INIT_USER_CALL_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_INIT_USER_CALL_SPEC_CONST_CONST)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_SEND_VAL_SPEC_CONST_CONST):
				VM_TRACE(ZEND_SEND_VAL_SPEC_CONST_CONST)
				ZEND_SEND_VAL_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_SEND_VAL_SPEC_CONST_CONST)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_SEND_VAL_EX_SPEC_CONST_CONST):
				VM_TRACE(ZEND_SEND_VAL_EX_SPEC_CONST_CONST)
				ZEND_SEND_VAL_EX_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_SEND_VAL_EX_SPEC_CONST_CONST)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_FETCH_CLASS_CONSTANT_SPEC_CONST_CONST):
				VM_TRACE(ZEND_FETCH_CLASS_CONSTANT_SPEC_CONST_CONST)
				ZEND_FETCH_CLASS_CONSTANT_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_FETCH_CLASS_CONSTANT_SPEC_CONST_CONST)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_CONST):
				VM_TRACE(ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_CONST)
				ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_CONST)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_INIT_ARRAY_SPEC_CONST_CONST):
				VM_TRACE(ZEND_INIT_ARRAY_SPEC_CONST_CONST)
				ZEND_INIT_ARRAY_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_INIT_ARRAY_SPEC_CONST_CONST)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CONST_CONST):
				VM_TRACE(ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CONST_CONST)
				ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CONST_CONST)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CONST_CONST):
				VM_TRACE(ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CONST_CONST)
				ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CONST_CONST)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_ARRAY_KEY_EXISTS_SPEC_CONST_CONST):
				VM_TRACE(ZEND_ARRAY_KEY_EXISTS_SPEC_CONST_CONST)
				ZEND_ARRAY_KEY_EXISTS_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_ARRAY_KEY_EXISTS_SPEC_CONST_CONST)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_DECLARE_CLASS_DELAYED_SPEC_CONST_CONST):
				VM_TRACE(ZEND_DECLARE_CLASS_DELAYED_SPEC_CONST_CONST)
				ZEND_DECLARE_CLASS_DELAYED_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_DECLARE_CLASS_DELAYED_SPEC_CONST_CONST)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_DECLARE_CONST_SPEC_CONST_CONST):
				VM_TRACE(ZEND_DECLARE_CONST_SPEC_CONST_CONST)
				ZEND_DECLARE_CONST_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_DECLARE_CONST_SPEC_CONST_CONST)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_DECLARE_ATTRIBUTED_CONST_SPEC_CONST_CONST):
				VM_TRACE(ZEND_DECLARE_ATTRIBUTED_CONST_SPEC_CONST_CONST)
				ZEND_DECLARE_ATTRIBUTED_CONST_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_DECLARE_ATTRIBUTED_CONST_SPEC_CONST_CONST)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_YIELD_SPEC_CONST_CONST):
				VM_TRACE(ZEND_YIELD_SPEC_CONST_CONST)
				ZEND_YIELD_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_YIELD_SPEC_CONST_CONST)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_SWITCH_LONG_SPEC_CONST_CONST):
				VM_TRACE(ZEND_SWITCH_LONG_SPEC_CONST_CONST)
				ZEND_SWITCH_LONG_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_SWITCH_LONG_SPEC_CONST_CONST)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_SWITCH_STRING_SPEC_CONST_CONST):
				VM_TRACE(ZEND_SWITCH_STRING_SPEC_CONST_CONST)
				ZEND_SWITCH_STRING_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_SWITCH_STRING_SPEC_CONST_CONST)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_MATCH_SPEC_CONST_CONST):
				VM_TRACE(ZEND_MATCH_SPEC_CONST_CONST)
				ZEND_MATCH_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_MATCH_SPEC_CONST_CONST)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_IN_ARRAY_SPEC_CONST_CONST):
				VM_TRACE(ZEND_IN_ARRAY_SPEC_CONST_CONST)
				ZEND_IN_ARRAY_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_IN_ARRAY_SPEC_CONST_CONST)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_ADD_SPEC_CONST_TMPVARCV):
				VM_TRACE(ZEND_ADD_SPEC_CONST_TMPVARCV)
				ZEND_ADD_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_ADD_SPEC_CONST_TMPVARCV)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_SUB_SPEC_CONST_TMPVARCV):
				VM_TRACE(ZEND_SUB_SPEC_CONST_TMPVARCV)
				ZEND_SUB_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_SUB_SPEC_CONST_TMPVARCV)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_MOD_SPEC_CONST_TMPVARCV):
				VM_TRACE(ZEND_MOD_SPEC_CONST_TMPVARCV)
				ZEND_MOD_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_MOD_SPEC_CONST_TMPVARCV)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_SL_SPEC_CONST_TMPVARCV):
				VM_TRACE(ZEND_SL_SPEC_CONST_TMPVARCV)
				ZEND_SL_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_SL_SPEC_CONST_TMPVARCV)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_SR_SPEC_CONST_TMPVARCV):
				VM_TRACE(ZEND_SR_SPEC_CONST_TMPVARCV)
				ZEND_SR_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_SR_SPEC_CONST_TMPVARCV)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_IS_SMALLER_SPEC_CONST_TMPVARCV):
				VM_TRACE(ZEND_IS_SMALLER_SPEC_CONST_TMPVARCV)
				ZEND_IS_SMALLER_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_IS_SMALLER_SPEC_CONST_TMPVARCV)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_IS_SMALLER_SPEC_CONST_TMPVARCV_JMPZ):
				VM_TRACE(ZEND_IS_SMALLER_SPEC_CONST_TMPVARCV_JMPZ)
				ZEND_IS_SMALLER_SPEC_CONST_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_IS_SMALLER_SPEC_CONST_TMPVARCV_JMPZ)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_IS_SMALLER_SPEC_CONST_TMPVARCV_JMPNZ):
				VM_TRACE(ZEND_IS_SMALLER_SPEC_CONST_TMPVARCV_JMPNZ)
				ZEND_IS_SMALLER_SPEC_CONST_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_IS_SMALLER_SPEC_CONST_TMPVARCV_JMPNZ)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_TMPVARCV):
				VM_TRACE(ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_TMPVARCV)
				ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_TMPVARCV)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_TMPVARCV_JMPZ):
				VM_TRACE(ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_TMPVARCV_JMPZ)
				ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_TMPVARCV_JMPZ)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_TMPVARCV_JMPNZ):
				VM_TRACE(ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_TMPVARCV_JMPNZ)
				ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_TMPVARCV_JMPNZ)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_FETCH_CLASS_CONSTANT_SPEC_CONST_TMPVARCV):
				VM_TRACE(ZEND_FETCH_CLASS_CONSTANT_SPEC_CONST_TMPVARCV)
				ZEND_FETCH_CLASS_CONSTANT_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_FETCH_CLASS_CONSTANT_SPEC_CONST_TMPVARCV)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_SUB_LONG_NO_OVERFLOW_SPEC_CONST_TMPVARCV):
				VM_TRACE(ZEND_SUB_LONG_NO_OVERFLOW_SPEC_CONST_TMPVARCV)
				ZEND_SUB_LONG_NO_OVERFLOW_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_SUB_LONG_NO_OVERFLOW_SPEC_CONST_TMPVARCV)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_SUB_LONG_SPEC_CONST_TMPVARCV):
				VM_TRACE(ZEND_SUB_LONG_SPEC_CONST_TMPVARCV)
				ZEND_SUB_LONG_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_SUB_LONG_SPEC_CONST_TMPVARCV)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_SUB_DOUBLE_SPEC_CONST_TMPVARCV):
				VM_TRACE(ZEND_SUB_DOUBLE_SPEC_CONST_TMPVARCV)
				ZEND_SUB_DOUBLE_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_SUB_DOUBLE_SPEC_CONST_TMPVARCV)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV):
				VM_TRACE(ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV)
				ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV_JMPZ):
				VM_TRACE(ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV_JMPZ)
				ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV_JMPZ)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV_JMPNZ):
				VM_TRACE(ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV_JMPNZ)
				ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV_JMPNZ)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV):
				VM_TRACE(ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV)
				ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV_JMPZ):
				VM_TRACE(ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV_JMPZ)
				ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV_JMPZ)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV_JMPNZ):
				VM_TRACE(ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV_JMPNZ)
				ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV_JMPNZ)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV):
				VM_TRACE(ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV)
				ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV_JMPZ):
				VM_TRACE(ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV_JMPZ)
				ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV_JMPZ)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV_JMPNZ):
				VM_TRACE(ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV_JMPNZ)
				ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV_JMPNZ)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV):
				VM_TRACE(ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV)
				ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_JMPZ):
				VM_TRACE(ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_JMPZ)
				ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_JMPZ)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_JMPNZ):
				VM_TRACE(ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_JMPNZ)
				ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_JMPNZ)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_FETCH_DIM_R_INDEX_SPEC_CONST_TMPVARCV):
				VM_TRACE(ZEND_FETCH_DIM_R_INDEX_SPEC_CONST_TMPVARCV)
				ZEND_FETCH_DIM_R_INDEX_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_FETCH_DIM_R_INDEX_SPEC_CONST_TMPVARCV)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_DIV_SPEC_CONST_TMPVAR):
				VM_TRACE(ZEND_DIV_SPEC_CONST_TMPVAR)
				ZEND_DIV_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_DIV_SPEC_CONST_TMPVAR)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_POW_SPEC_CONST_TMPVAR):
				VM_TRACE(ZEND_POW_SPEC_CONST_TMPVAR)
				ZEND_POW_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_POW_SPEC_CONST_TMPVAR)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_CONCAT_SPEC_CONST_TMPVAR):
				VM_TRACE(ZEND_CONCAT_SPEC_CONST_TMPVAR)
				ZEND_CONCAT_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_CONCAT_SPEC_CONST_TMPVAR)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_SPACESHIP_SPEC_CONST_TMPVAR):
				VM_TRACE(ZEND_SPACESHIP_SPEC_CONST_TMPVAR)
				ZEND_SPACESHIP_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_SPACESHIP_SPEC_CONST_TMPVAR)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_FETCH_DIM_R_SPEC_CONST_TMPVAR):
				VM_TRACE(ZEND_FETCH_DIM_R_SPEC_CONST_TMPVAR)
				ZEND_FETCH_DIM_R_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_FETCH_DIM_R_SPEC_CONST_TMPVAR)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_FETCH_DIM_IS_SPEC_CONST_TMPVAR):
				VM_TRACE(ZEND_FETCH_DIM_IS_SPEC_CONST_TMPVAR)
				ZEND_FETCH_DIM_IS_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_FETCH_DIM_IS_SPEC_CONST_TMPVAR)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_FETCH_DIM_FUNC_ARG_SPEC_CONST_TMPVAR):
				VM_TRACE(ZEND_FETCH_DIM_FUNC_ARG_SPEC_CONST_TMPVAR)
				ZEND_FETCH_DIM_FUNC_ARG_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_FETCH_DIM_FUNC_ARG_SPEC_CONST_TMPVAR)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_FETCH_OBJ_R_SPEC_CONST_TMPVAR):
				VM_TRACE(ZEND_FETCH_OBJ_R_SPEC_CONST_TMPVAR)
				ZEND_FETCH_OBJ_R_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_FETCH_OBJ_R_SPEC_CONST_TMPVAR)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_FETCH_OBJ_IS_SPEC_CONST_TMPVAR):
				VM_TRACE(ZEND_FETCH_OBJ_IS_SPEC_CONST_TMPVAR)
				ZEND_FETCH_OBJ_IS_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_FETCH_OBJ_IS_SPEC_CONST_TMPVAR)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CONST_TMPVAR):
				VM_TRACE(ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CONST_TMPVAR)
				ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CONST_TMPVAR)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_FETCH_LIST_R_SPEC_CONST_TMPVAR):
				VM_TRACE(ZEND_FETCH_LIST_R_SPEC_CONST_TMPVAR)
				ZEND_FETCH_LIST_R_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_FETCH_LIST_R_SPEC_CONST_TMPVAR)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_FAST_CONCAT_SPEC_CONST_TMPVAR):
				VM_TRACE(ZEND_FAST_CONCAT_SPEC_CONST_TMPVAR)
				ZEND_FAST_CONCAT_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_FAST_CONCAT_SPEC_CONST_TMPVAR)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_INIT_METHOD_CALL_SPEC_CONST_TMPVAR):
				VM_TRACE(ZEND_INIT_METHOD_CALL_SPEC_CONST_TMPVAR)
				ZEND_INIT_METHOD_CALL_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_INIT_METHOD_CALL_SPEC_CONST_TMPVAR)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_INIT_STATIC_METHOD_CALL_SPEC_CONST_TMPVAR):
				VM_TRACE(ZEND_INIT_STATIC_METHOD_CALL_SPEC_CONST_TMPVAR)
				ZEND_INIT_STATIC_METHOD_CALL_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_INIT_STATIC_METHOD_CALL_SPEC_CONST_TMPVAR)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_INIT_USER_CALL_SPEC_CONST_TMPVAR):
				VM_TRACE(ZEND_INIT_USER_CALL_SPEC_CONST_TMPVAR)
				ZEND_INIT_USER_CALL_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_INIT_USER_CALL_SPEC_CONST_TMPVAR)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_TMPVAR):
				VM_TRACE(ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_TMPVAR)
				ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_TMPVAR)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_INIT_ARRAY_SPEC_CONST_TMPVAR):
				VM_TRACE(ZEND_INIT_ARRAY_SPEC_CONST_TMPVAR)
				ZEND_INIT_ARRAY_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_INIT_ARRAY_SPEC_CONST_TMPVAR)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CONST_TMPVAR):
				VM_TRACE(ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CONST_TMPVAR)
				ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CONST_TMPVAR)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CONST_TMPVAR):
				VM_TRACE(ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CONST_TMPVAR)
				ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CONST_TMPVAR)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_ARRAY_KEY_EXISTS_SPEC_CONST_TMPVAR):
				VM_TRACE(ZEND_ARRAY_KEY_EXISTS_SPEC_CONST_TMPVAR)
				ZEND_ARRAY_KEY_EXISTS_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_ARRAY_KEY_EXISTS_SPEC_CONST_TMPVAR)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_YIELD_SPEC_CONST_TMPVAR):
				VM_TRACE(ZEND_YIELD_SPEC_CONST_TMPVAR)
				ZEND_YIELD_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_YIELD_SPEC_CONST_TMPVAR)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_FETCH_R_SPEC_CONST_UNUSED):
				VM_TRACE(ZEND_FETCH_R_SPEC_CONST_UNUSED)
				ZEND_FETCH_R_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_FETCH_R_SPEC_CONST_UNUSED)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_FETCH_W_SPEC_CONST_UNUSED):
				VM_TRACE(ZEND_FETCH_W_SPEC_CONST_UNUSED)
				ZEND_FETCH_W_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_FETCH_W_SPEC_CONST_UNUSED)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_FETCH_RW_SPEC_CONST_UNUSED):
				VM_TRACE(ZEND_FETCH_RW_SPEC_CONST_UNUSED)
				ZEND_FETCH_RW_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_FETCH_RW_SPEC_CONST_UNUSED)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_FETCH_FUNC_ARG_SPEC_CONST_UNUSED):
				VM_TRACE(ZEND_FETCH_FUNC_ARG_SPEC_CONST_UNUSED)
				ZEND_FETCH_FUNC_ARG_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_FETCH_FUNC_ARG_SPEC_CONST_UNUSED)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_FETCH_UNSET_SPEC_CONST_UNUSED):
				VM_TRACE(ZEND_FETCH_UNSET_SPEC_CONST_UNUSED)
				ZEND_FETCH_UNSET_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_FETCH_UNSET_SPEC_CONST_UNUSED)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_FETCH_IS_SPEC_CONST_UNUSED):
				VM_TRACE(ZEND_FETCH_IS_SPEC_CONST_UNUSED)
				ZEND_FETCH_IS_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_FETCH_IS_SPEC_CONST_UNUSED)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_FETCH_DIM_FUNC_ARG_SPEC_CONST_UNUSED):
				VM_TRACE(ZEND_FETCH_DIM_FUNC_ARG_SPEC_CONST_UNUSED)
				ZEND_FETCH_DIM_FUNC_ARG_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_FETCH_DIM_FUNC_ARG_SPEC_CONST_UNUSED)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_INIT_STATIC_METHOD_CALL_SPEC_CONST_UNUSED):
				VM_TRACE(ZEND_INIT_STATIC_METHOD_CALL_SPEC_CONST_UNUSED)
				ZEND_INIT_STATIC_METHOD_CALL_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_INIT_STATIC_METHOD_CALL_SPEC_CONST_UNUSED)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_VERIFY_RETURN_TYPE_SPEC_CONST_UNUSED):
				VM_TRACE(ZEND_VERIFY_RETURN_TYPE_SPEC_CONST_UNUSED)
				ZEND_VERIFY_RETURN_TYPE_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_VERIFY_RETURN_TYPE_SPEC_CONST_UNUSED)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_SEND_VAL_SPEC_CONST_UNUSED):
				VM_TRACE(ZEND_SEND_VAL_SPEC_CONST_UNUSED)
				ZEND_SEND_VAL_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_SEND_VAL_SPEC_CONST_UNUSED)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_SEND_VAL_EX_SPEC_CONST_UNUSED):
				VM_TRACE(ZEND_SEND_VAL_EX_SPEC_CONST_UNUSED)
				ZEND_SEND_VAL_EX_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_SEND_VAL_EX_SPEC_CONST_UNUSED)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_SEND_VAL_EX_SPEC_CONST_UNUSED_QUICK):
				VM_TRACE(ZEND_SEND_VAL_EX_SPEC_CONST_UNUSED_QUICK)
				ZEND_SEND_VAL_EX_SPEC_CONST_UNUSED_QUICK_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_SEND_VAL_EX_SPEC_CONST_UNUSED_QUICK)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_NEW_SPEC_CONST_UNUSED):
				VM_TRACE(ZEND_NEW_SPEC_CONST_UNUSED)
				ZEND_NEW_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_NEW_SPEC_CONST_UNUSED)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_UNUSED):
				VM_TRACE(ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_UNUSED)
				ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_UNUSED)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_INIT_ARRAY_SPEC_CONST_UNUSED):
				VM_TRACE(ZEND_INIT_ARRAY_SPEC_CONST_UNUSED)
				ZEND_INIT_ARRAY_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_INIT_ARRAY_SPEC_CONST_UNUSED)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_UNSET_VAR_SPEC_CONST_UNUSED):
				VM_TRACE(ZEND_UNSET_VAR_SPEC_CONST_UNUSED)
				ZEND_UNSET_VAR_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_UNSET_VAR_SPEC_CONST_UNUSED)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_ISSET_ISEMPTY_VAR_SPEC_CONST_UNUSED):
				VM_TRACE(ZEND_ISSET_ISEMPTY_VAR_SPEC_CONST_UNUSED)
				ZEND_ISSET_ISEMPTY_VAR_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_ISSET_ISEMPTY_VAR_SPEC_CONST_UNUSED)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_YIELD_SPEC_CONST_UNUSED):
				VM_TRACE(ZEND_YIELD_SPEC_CONST_UNUSED)
				ZEND_YIELD_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_YIELD_SPEC_CONST_UNUSED)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_MATCH_ERROR_SPEC_CONST_UNUSED):
				VM_TRACE(ZEND_MATCH_ERROR_SPEC_CONST_UNUSED)
				ZEND_MATCH_ERROR_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_MATCH_ERROR_SPEC_CONST_UNUSED)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_COUNT_SPEC_CONST_UNUSED):
				VM_TRACE(ZEND_COUNT_SPEC_CONST_UNUSED)
				ZEND_COUNT_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_COUNT_SPEC_CONST_UNUSED)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_GET_CLASS_SPEC_CONST_UNUSED):
				VM_TRACE(ZEND_GET_CLASS_SPEC_CONST_UNUSED)
				ZEND_GET_CLASS_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_GET_CLASS_SPEC_CONST_UNUSED)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_GET_TYPE_SPEC_CONST_UNUSED):
				VM_TRACE(ZEND_GET_TYPE_SPEC_CONST_UNUSED)
				ZEND_GET_TYPE_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_GET_TYPE_SPEC_CONST_UNUSED)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_FUNC_GET_ARGS_SPEC_CONST_UNUSED):
				VM_TRACE(ZEND_FUNC_GET_ARGS_SPEC_CONST_UNUSED)
				ZEND_FUNC_GET_ARGS_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_FUNC_GET_ARGS_SPEC_CONST_UNUSED)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_INIT_PARENT_PROPERTY_HOOK_CALL_SPEC_CONST_UNUSED):
				VM_TRACE(ZEND_INIT_PARENT_PROPERTY_HOOK_CALL_SPEC_CONST_UNUSED)
				ZEND_INIT_PARENT_PROPERTY_HOOK_CALL_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_INIT_PARENT_PROPERTY_HOOK_CALL_SPEC_CONST_UNUSED)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_DIV_SPEC_CONST_CV):
				VM_TRACE(ZEND_DIV_SPEC_CONST_CV)
				ZEND_DIV_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_DIV_SPEC_CONST_CV)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_POW_SPEC_CONST_CV):
				VM_TRACE(ZEND_POW_SPEC_CONST_CV)
				ZEND_POW_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_POW_SPEC_CONST_CV)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_CONCAT_SPEC_CONST_CV):
				VM_TRACE(ZEND_CONCAT_SPEC_CONST_CV)
				ZEND_CONCAT_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_CONCAT_SPEC_CONST_CV)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_SPACESHIP_SPEC_CONST_CV):
				VM_TRACE(ZEND_SPACESHIP_SPEC_CONST_CV)
				ZEND_SPACESHIP_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_SPACESHIP_SPEC_CONST_CV)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_FETCH_DIM_R_SPEC_CONST_CV):
				VM_TRACE(ZEND_FETCH_DIM_R_SPEC_CONST_CV)
				ZEND_FETCH_DIM_R_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_FETCH_DIM_R_SPEC_CONST_CV)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_FETCH_DIM_IS_SPEC_CONST_CV):
				VM_TRACE(ZEND_FETCH_DIM_IS_SPEC_CONST_CV)
				ZEND_FETCH_DIM_IS_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_FETCH_DIM_IS_SPEC_CONST_CV)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_FETCH_DIM_FUNC_ARG_SPEC_CONST_CV):
				VM_TRACE(ZEND_FETCH_DIM_FUNC_ARG_SPEC_CONST_CV)
				ZEND_FETCH_DIM_FUNC_ARG_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_FETCH_DIM_FUNC_ARG_SPEC_CONST_CV)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_FETCH_OBJ_R_SPEC_CONST_CV):
				VM_TRACE(ZEND_FETCH_OBJ_R_SPEC_CONST_CV)
				ZEND_FETCH_OBJ_R_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_FETCH_OBJ_R_SPEC_CONST_CV)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_FETCH_OBJ_IS_SPEC_CONST_CV):
				VM_TRACE(ZEND_FETCH_OBJ_IS_SPEC_CONST_CV)
				ZEND_FETCH_OBJ_IS_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_FETCH_OBJ_IS_SPEC_CONST_CV)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CONST_CV):
				VM_TRACE(ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CONST_CV)
				ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CONST_CV)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_FETCH_LIST_R_SPEC_CONST_CV):
				VM_TRACE(ZEND_FETCH_LIST_R_SPEC_CONST_CV)
				ZEND_FETCH_LIST_R_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_FETCH_LIST_R_SPEC_CONST_CV)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_FAST_CONCAT_SPEC_CONST_CV):
				VM_TRACE(ZEND_FAST_CONCAT_SPEC_CONST_CV)
				ZEND_FAST_CONCAT_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_FAST_CONCAT_SPEC_CONST_CV)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_INIT_METHOD_CALL_SPEC_CONST_CV):
				VM_TRACE(ZEND_INIT_METHOD_CALL_SPEC_CONST_CV)
				ZEND_INIT_METHOD_CALL_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_INIT_METHOD_CALL_SPEC_CONST_CV)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_INIT_STATIC_METHOD_CALL_SPEC_CONST_CV):
				VM_TRACE(ZEND_INIT_STATIC_METHOD_CALL_SPEC_CONST_CV)
				ZEND_INIT_STATIC_METHOD_CALL_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_INIT_STATIC_METHOD_CALL_SPEC_CONST_CV)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_INIT_USER_CALL_SPEC_CONST_CV):
				VM_TRACE(ZEND_INIT_USER_CALL_SPEC_CONST_CV)
				ZEND_INIT_USER_CALL_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_INIT_USER_CALL_SPEC_CONST_CV)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_CV):
				VM_TRACE(ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_CV)
				ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_CV)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_INIT_ARRAY_SPEC_CONST_CV):
				VM_TRACE(ZEND_INIT_ARRAY_SPEC_CONST_CV)
				ZEND_INIT_ARRAY_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_INIT_ARRAY_SPEC_CONST_CV)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CONST_CV):
				VM_TRACE(ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CONST_CV)
				ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CONST_CV)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CONST_CV):
				VM_TRACE(ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CONST_CV)
				ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CONST_CV)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_ARRAY_KEY_EXISTS_SPEC_CONST_CV):
				VM_TRACE(ZEND_ARRAY_KEY_EXISTS_SPEC_CONST_CV)
				ZEND_ARRAY_KEY_EXISTS_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_ARRAY_KEY_EXISTS_SPEC_CONST_CV)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_YIELD_SPEC_CONST_CV):
				VM_TRACE(ZEND_YIELD_SPEC_CONST_CV)
				ZEND_YIELD_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_YIELD_SPEC_CONST_CV)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_BW_NOT_SPEC_TMPVARCV):
				VM_TRACE(ZEND_BW_NOT_SPEC_TMPVARCV)
				ZEND_BW_NOT_SPEC_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_BW_NOT_SPEC_TMPVARCV)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_QM_ASSIGN_LONG_SPEC_TMPVARCV):
				VM_TRACE(ZEND_QM_ASSIGN_LONG_SPEC_TMPVARCV)
				ZEND_QM_ASSIGN_LONG_SPEC_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_QM_ASSIGN_LONG_SPEC_TMPVARCV)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_QM_ASSIGN_DOUBLE_SPEC_TMPVARCV):
				VM_TRACE(ZEND_QM_ASSIGN_DOUBLE_SPEC_TMPVARCV)
				ZEND_QM_ASSIGN_DOUBLE_SPEC_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_QM_ASSIGN_DOUBLE_SPEC_TMPVARCV)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_QM_ASSIGN_NOREF_SPEC_TMPVARCV):
				VM_TRACE(ZEND_QM_ASSIGN_NOREF_SPEC_TMPVARCV)
				ZEND_QM_ASSIGN_NOREF_SPEC_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_QM_ASSIGN_NOREF_SPEC_TMPVARCV)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_ADD_SPEC_TMPVARCV_CONST):
				VM_TRACE(ZEND_ADD_SPEC_TMPVARCV_CONST)
				ZEND_ADD_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_ADD_SPEC_TMPVARCV_CONST)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_SUB_SPEC_TMPVARCV_CONST):
				VM_TRACE(ZEND_SUB_SPEC_TMPVARCV_CONST)
				ZEND_SUB_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_SUB_SPEC_TMPVARCV_CONST)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_MUL_SPEC_TMPVARCV_CONST):
				VM_TRACE(ZEND_MUL_SPEC_TMPVARCV_CONST)
				ZEND_MUL_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_MUL_SPEC_TMPVARCV_CONST)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_MOD_SPEC_TMPVARCV_CONST):
				VM_TRACE(ZEND_MOD_SPEC_TMPVARCV_CONST)
				ZEND_MOD_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_MOD_SPEC_TMPVARCV_CONST)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_SL_SPEC_TMPVARCV_CONST):
				VM_TRACE(ZEND_SL_SPEC_TMPVARCV_CONST)
				ZEND_SL_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_SL_SPEC_TMPVARCV_CONST)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_SR_SPEC_TMPVARCV_CONST):
				VM_TRACE(ZEND_SR_SPEC_TMPVARCV_CONST)
				ZEND_SR_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_SR_SPEC_TMPVARCV_CONST)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_IS_SMALLER_SPEC_TMPVARCV_CONST):
				VM_TRACE(ZEND_IS_SMALLER_SPEC_TMPVARCV_CONST)
				ZEND_IS_SMALLER_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_IS_SMALLER_SPEC_TMPVARCV_CONST)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_IS_SMALLER_SPEC_TMPVARCV_CONST_JMPZ):
				VM_TRACE(ZEND_IS_SMALLER_SPEC_TMPVARCV_CONST_JMPZ)
				ZEND_IS_SMALLER_SPEC_TMPVARCV_CONST_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_IS_SMALLER_SPEC_TMPVARCV_CONST_JMPZ)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_IS_SMALLER_SPEC_TMPVARCV_CONST_JMPNZ):
				VM_TRACE(ZEND_IS_SMALLER_SPEC_TMPVARCV_CONST_JMPNZ)
				ZEND_IS_SMALLER_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_IS_SMALLER_SPEC_TMPVARCV_CONST_JMPNZ)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_CONST):
				VM_TRACE(ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_CONST)
				ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_CONST)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_CONST_JMPZ):
				VM_TRACE(ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_CONST_JMPZ)
				ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_CONST_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_CONST_JMPZ)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_CONST_JMPNZ):
				VM_TRACE(ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_CONST_JMPNZ)
				ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_CONST_JMPNZ)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_BW_OR_SPEC_TMPVARCV_CONST):
				VM_TRACE(ZEND_BW_OR_SPEC_TMPVARCV_CONST)
				ZEND_BW_OR_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_BW_OR_SPEC_TMPVARCV_CONST)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_BW_AND_SPEC_TMPVARCV_CONST):
				VM_TRACE(ZEND_BW_AND_SPEC_TMPVARCV_CONST)
				ZEND_BW_AND_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_BW_AND_SPEC_TMPVARCV_CONST)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_BW_XOR_SPEC_TMPVARCV_CONST):
				VM_TRACE(ZEND_BW_XOR_SPEC_TMPVARCV_CONST)
				ZEND_BW_XOR_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_BW_XOR_SPEC_TMPVARCV_CONST)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_FETCH_LIST_R_SPEC_TMPVARCV_CONST):
				VM_TRACE(ZEND_FETCH_LIST_R_SPEC_TMPVARCV_CONST)
				ZEND_FETCH_LIST_R_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_FETCH_LIST_R_SPEC_TMPVARCV_CONST)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_SWITCH_LONG_SPEC_TMPVARCV_CONST):
				VM_TRACE(ZEND_SWITCH_LONG_SPEC_TMPVARCV_CONST)
				ZEND_SWITCH_LONG_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_SWITCH_LONG_SPEC_TMPVARCV_CONST)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_SWITCH_STRING_SPEC_TMPVARCV_CONST):
				VM_TRACE(ZEND_SWITCH_STRING_SPEC_TMPVARCV_CONST)
				ZEND_SWITCH_STRING_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_SWITCH_STRING_SPEC_TMPVARCV_CONST)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_MATCH_SPEC_TMPVARCV_CONST):
				VM_TRACE(ZEND_MATCH_SPEC_TMPVARCV_CONST)
				ZEND_MATCH_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_MATCH_SPEC_TMPVARCV_CONST)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_CONST):
				VM_TRACE(ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_CONST)
				ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_CONST)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_ADD_LONG_SPEC_TMPVARCV_CONST):
				VM_TRACE(ZEND_ADD_LONG_SPEC_TMPVARCV_CONST)
				ZEND_ADD_LONG_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_ADD_LONG_SPEC_TMPVARCV_CONST)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_ADD_DOUBLE_SPEC_TMPVARCV_CONST):
				VM_TRACE(ZEND_ADD_DOUBLE_SPEC_TMPVARCV_CONST)
				ZEND_ADD_DOUBLE_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_ADD_DOUBLE_SPEC_TMPVARCV_CONST)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_CONST):
				VM_TRACE(ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_CONST)
				ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_CONST)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_SUB_LONG_SPEC_TMPVARCV_CONST):
				VM_TRACE(ZEND_SUB_LONG_SPEC_TMPVARCV_CONST)
				ZEND_SUB_LONG_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_SUB_LONG_SPEC_TMPVARCV_CONST)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_SUB_DOUBLE_SPEC_TMPVARCV_CONST):
				VM_TRACE(ZEND_SUB_DOUBLE_SPEC_TMPVARCV_CONST)
				ZEND_SUB_DOUBLE_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_SUB_DOUBLE_SPEC_TMPVARCV_CONST)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_CONST):
				VM_TRACE(ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_CONST)
				ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_CONST)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_MUL_LONG_SPEC_TMPVARCV_CONST):
				VM_TRACE(ZEND_MUL_LONG_SPEC_TMPVARCV_CONST)
				ZEND_MUL_LONG_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_MUL_LONG_SPEC_TMPVARCV_CONST)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_MUL_DOUBLE_SPEC_TMPVARCV_CONST):
				VM_TRACE(ZEND_MUL_DOUBLE_SPEC_TMPVARCV_CONST)
				ZEND_MUL_DOUBLE_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_MUL_DOUBLE_SPEC_TMPVARCV_CONST)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_CONST):
				VM_TRACE(ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_CONST)
				ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_CONST)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPZ):
				VM_TRACE(ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPZ)
				ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPZ)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPNZ):
				VM_TRACE(ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPNZ)
				ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPNZ)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST):
				VM_TRACE(ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST)
				ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ):
				VM_TRACE(ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ)
				ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ):
				VM_TRACE(ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ)
				ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_CONST):
				VM_TRACE(ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_CONST)
				ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_CONST)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPZ):
				VM_TRACE(ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPZ)
				ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPZ)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPNZ):
				VM_TRACE(ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPNZ)
				ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPNZ)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST):
				VM_TRACE(ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST)
				ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ):
				VM_TRACE(ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ)
				ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ):
				VM_TRACE(ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ)
				ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_IS_IDENTICAL_EMPTY_ARRAY_SPEC_TMPVARCV_CONST):
				VM_TRACE(ZEND_IS_IDENTICAL_EMPTY_ARRAY_SPEC_TMPVARCV_CONST)
				ZEND_IS_IDENTICAL_EMPTY_ARRAY_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_IS_IDENTICAL_EMPTY_ARRAY_SPEC_TMPVARCV_CONST)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_IS_IDENTICAL_EMPTY_ARRAY_SPEC_TMPVARCV_CONST_JMPZ):
				VM_TRACE(ZEND_IS_IDENTICAL_EMPTY_ARRAY_SPEC_TMPVARCV_CONST_JMPZ)
				ZEND_IS_IDENTICAL_EMPTY_ARRAY_SPEC_TMPVARCV_CONST_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_IS_IDENTICAL_EMPTY_ARRAY_SPEC_TMPVARCV_CONST_JMPZ)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_IS_IDENTICAL_EMPTY_ARRAY_SPEC_TMPVARCV_CONST_JMPNZ):
				VM_TRACE(ZEND_IS_IDENTICAL_EMPTY_ARRAY_SPEC_TMPVARCV_CONST_JMPNZ)
				ZEND_IS_IDENTICAL_EMPTY_ARRAY_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_IS_IDENTICAL_EMPTY_ARRAY_SPEC_TMPVARCV_CONST_JMPNZ)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_IS_NOT_IDENTICAL_EMPTY_ARRAY_SPEC_TMPVARCV_CONST):
				VM_TRACE(ZEND_IS_NOT_IDENTICAL_EMPTY_ARRAY_SPEC_TMPVARCV_CONST)
				ZEND_IS_NOT_IDENTICAL_EMPTY_ARRAY_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_IS_NOT_IDENTICAL_EMPTY_ARRAY_SPEC_TMPVARCV_CONST)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_IS_NOT_IDENTICAL_EMPTY_ARRAY_SPEC_TMPVARCV_CONST_JMPZ):
				VM_TRACE(ZEND_IS_NOT_IDENTICAL_EMPTY_ARRAY_SPEC_TMPVARCV_CONST_JMPZ)
				ZEND_IS_NOT_IDENTICAL_EMPTY_ARRAY_SPEC_TMPVARCV_CONST_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_IS_NOT_IDENTICAL_EMPTY_ARRAY_SPEC_TMPVARCV_CONST_JMPZ)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_IS_NOT_IDENTICAL_EMPTY_ARRAY_SPEC_TMPVARCV_CONST_JMPNZ):
				VM_TRACE(ZEND_IS_NOT_IDENTICAL_EMPTY_ARRAY_SPEC_TMPVARCV_CONST_JMPNZ)
				ZEND_IS_NOT_IDENTICAL_EMPTY_ARRAY_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_IS_NOT_IDENTICAL_EMPTY_ARRAY_SPEC_TMPVARCV_CONST_JMPNZ)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST):
				VM_TRACE(ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST)
				ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST_JMPZ):
				VM_TRACE(ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST_JMPZ)
				ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST_JMPZ)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST_JMPNZ):
				VM_TRACE(ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST_JMPNZ)
				ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST_JMPNZ)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST):
				VM_TRACE(ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST)
				ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ):
				VM_TRACE(ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ)
				ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ):
				VM_TRACE(ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ)
				ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST):
				VM_TRACE(ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST)
				ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPZ):
				VM_TRACE(ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPZ)
				ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPZ)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPNZ):
				VM_TRACE(ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPNZ)
				ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPNZ)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST):
				VM_TRACE(ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST)
				ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ):
				VM_TRACE(ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ)
				ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ):
				VM_TRACE(ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ)
				ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_ADD_SPEC_TMPVARCV_TMPVARCV):
				VM_TRACE(ZEND_ADD_SPEC_TMPVARCV_TMPVARCV)
				ZEND_ADD_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_ADD_SPEC_TMPVARCV_TMPVARCV)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_SUB_SPEC_TMPVARCV_TMPVARCV):
				VM_TRACE(ZEND_SUB_SPEC_TMPVARCV_TMPVARCV)
				ZEND_SUB_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_SUB_SPEC_TMPVARCV_TMPVARCV)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_MUL_SPEC_TMPVARCV_TMPVARCV):
				VM_TRACE(ZEND_MUL_SPEC_TMPVARCV_TMPVARCV)
				ZEND_MUL_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_MUL_SPEC_TMPVARCV_TMPVARCV)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_MOD_SPEC_TMPVARCV_TMPVARCV):
				VM_TRACE(ZEND_MOD_SPEC_TMPVARCV_TMPVARCV)
				ZEND_MOD_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_MOD_SPEC_TMPVARCV_TMPVARCV)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_SL_SPEC_TMPVARCV_TMPVARCV):
				VM_TRACE(ZEND_SL_SPEC_TMPVARCV_TMPVARCV)
				ZEND_SL_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_SL_SPEC_TMPVARCV_TMPVARCV)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_SR_SPEC_TMPVARCV_TMPVARCV):
				VM_TRACE(ZEND_SR_SPEC_TMPVARCV_TMPVARCV)
				ZEND_SR_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_SR_SPEC_TMPVARCV_TMPVARCV)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV):
				VM_TRACE(ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV)
				ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_JMPZ):
				VM_TRACE(ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_JMPZ)
				ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_JMPZ)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_JMPNZ):
				VM_TRACE(ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_JMPNZ)
				ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_JMPNZ)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV):
				VM_TRACE(ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV)
				ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_JMPZ):
				VM_TRACE(ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_JMPZ)
				ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_JMPZ)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_JMPNZ):
				VM_TRACE(ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_JMPNZ)
				ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_JMPNZ)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_BW_OR_SPEC_TMPVARCV_TMPVARCV):
				VM_TRACE(ZEND_BW_OR_SPEC_TMPVARCV_TMPVARCV)
				ZEND_BW_OR_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_BW_OR_SPEC_TMPVARCV_TMPVARCV)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_BW_AND_SPEC_TMPVARCV_TMPVARCV):
				VM_TRACE(ZEND_BW_AND_SPEC_TMPVARCV_TMPVARCV)
				ZEND_BW_AND_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_BW_AND_SPEC_TMPVARCV_TMPVARCV)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_BW_XOR_SPEC_TMPVARCV_TMPVARCV):
				VM_TRACE(ZEND_BW_XOR_SPEC_TMPVARCV_TMPVARCV)
				ZEND_BW_XOR_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_BW_XOR_SPEC_TMPVARCV_TMPVARCV)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV):
				VM_TRACE(ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV)
				ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_ADD_LONG_SPEC_TMPVARCV_TMPVARCV):
				VM_TRACE(ZEND_ADD_LONG_SPEC_TMPVARCV_TMPVARCV)
				ZEND_ADD_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_ADD_LONG_SPEC_TMPVARCV_TMPVARCV)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_ADD_DOUBLE_SPEC_TMPVARCV_TMPVARCV):
				VM_TRACE(ZEND_ADD_DOUBLE_SPEC_TMPVARCV_TMPVARCV)
				ZEND_ADD_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_ADD_DOUBLE_SPEC_TMPVARCV_TMPVARCV)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV):
				VM_TRACE(ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV)
				ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_SUB_LONG_SPEC_TMPVARCV_TMPVARCV):
				VM_TRACE(ZEND_SUB_LONG_SPEC_TMPVARCV_TMPVARCV)
				ZEND_SUB_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_SUB_LONG_SPEC_TMPVARCV_TMPVARCV)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_SUB_DOUBLE_SPEC_TMPVARCV_TMPVARCV):
				VM_TRACE(ZEND_SUB_DOUBLE_SPEC_TMPVARCV_TMPVARCV)
				ZEND_SUB_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_SUB_DOUBLE_SPEC_TMPVARCV_TMPVARCV)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV):
				VM_TRACE(ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV)
				ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_MUL_LONG_SPEC_TMPVARCV_TMPVARCV):
				VM_TRACE(ZEND_MUL_LONG_SPEC_TMPVARCV_TMPVARCV)
				ZEND_MUL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_MUL_LONG_SPEC_TMPVARCV_TMPVARCV)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_MUL_DOUBLE_SPEC_TMPVARCV_TMPVARCV):
				VM_TRACE(ZEND_MUL_DOUBLE_SPEC_TMPVARCV_TMPVARCV)
				ZEND_MUL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_MUL_DOUBLE_SPEC_TMPVARCV_TMPVARCV)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV):
				VM_TRACE(ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV)
				ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ):
				VM_TRACE(ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ)
				ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ):
				VM_TRACE(ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ)
				ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV):
				VM_TRACE(ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV)
				ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ):
				VM_TRACE(ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ)
				ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ):
				VM_TRACE(ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ)
				ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV):
				VM_TRACE(ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV)
				ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ):
				VM_TRACE(ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ)
				ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ):
				VM_TRACE(ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ)
				ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV):
				VM_TRACE(ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV)
				ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ):
				VM_TRACE(ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ)
				ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ):
				VM_TRACE(ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ)
				ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV):
				VM_TRACE(ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV)
				ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ):
				VM_TRACE(ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ)
				ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ):
				VM_TRACE(ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ)
				ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV):
				VM_TRACE(ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV)
				ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ):
				VM_TRACE(ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ)
				ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ):
				VM_TRACE(ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ)
				ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV):
				VM_TRACE(ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV)
				ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ):
				VM_TRACE(ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ)
				ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ):
				VM_TRACE(ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ)
				ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV):
				VM_TRACE(ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV)
				ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ):
				VM_TRACE(ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ)
				ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ):
				VM_TRACE(ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ)
				ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_FETCH_LIST_R_SPEC_TMPVARCV_TMPVAR):
				VM_TRACE(ZEND_FETCH_LIST_R_SPEC_TMPVARCV_TMPVAR)
				ZEND_FETCH_LIST_R_SPEC_TMPVARCV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_FETCH_LIST_R_SPEC_TMPVARCV_TMPVAR)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_MATCH_ERROR_SPEC_TMPVARCV_UNUSED):
				VM_TRACE(ZEND_MATCH_ERROR_SPEC_TMPVARCV_UNUSED)
				ZEND_MATCH_ERROR_SPEC_TMPVARCV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_MATCH_ERROR_SPEC_TMPVARCV_UNUSED)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_FETCH_LIST_R_SPEC_TMPVARCV_CV):
				VM_TRACE(ZEND_FETCH_LIST_R_SPEC_TMPVARCV_CV)
				ZEND_FETCH_LIST_R_SPEC_TMPVARCV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_FETCH_LIST_R_SPEC_TMPVARCV_CV)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_BOOL_NOT_SPEC_TMPVAR):
				VM_TRACE(ZEND_BOOL_NOT_SPEC_TMPVAR)
				ZEND_BOOL_NOT_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_BOOL_NOT_SPEC_TMPVAR)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_ECHO_SPEC_TMPVAR):
				VM_TRACE(ZEND_ECHO_SPEC_TMPVAR)
				ZEND_ECHO_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_ECHO_SPEC_TMPVAR)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_JMPZ_SPEC_TMPVAR):
				VM_TRACE(ZEND_JMPZ_SPEC_TMPVAR)
				ZEND_JMPZ_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_JMPZ_SPEC_TMPVAR)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_JMPNZ_SPEC_TMPVAR):
				VM_TRACE(ZEND_JMPNZ_SPEC_TMPVAR)
				ZEND_JMPNZ_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_JMPNZ_SPEC_TMPVAR)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_JMPZ_EX_SPEC_TMPVAR):
				VM_TRACE(ZEND_JMPZ_EX_SPEC_TMPVAR)
				ZEND_JMPZ_EX_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_JMPZ_EX_SPEC_TMPVAR)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_JMPNZ_EX_SPEC_TMPVAR):
				VM_TRACE(ZEND_JMPNZ_EX_SPEC_TMPVAR)
				ZEND_JMPNZ_EX_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_JMPNZ_EX_SPEC_TMPVAR)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_FREE_SPEC_TMPVAR):
				VM_TRACE(ZEND_FREE_SPEC_TMPVAR)
				ZEND_FREE_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_FREE_SPEC_TMPVAR)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_FE_FREE_SPEC_TMPVAR):
				VM_TRACE(ZEND_FE_FREE_SPEC_TMPVAR)
				ZEND_FE_FREE_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_FE_FREE_SPEC_TMPVAR)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_THROW_SPEC_TMPVAR):
				VM_TRACE(ZEND_THROW_SPEC_TMPVAR)
				ZEND_THROW_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_THROW_SPEC_TMPVAR)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_BOOL_SPEC_TMPVAR):
				VM_TRACE(ZEND_BOOL_SPEC_TMPVAR)
				ZEND_BOOL_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_BOOL_SPEC_TMPVAR)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_CLONE_SPEC_TMPVAR):
				VM_TRACE(ZEND_CLONE_SPEC_TMPVAR)
				ZEND_CLONE_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_CLONE_SPEC_TMPVAR)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_INCLUDE_OR_EVAL_SPEC_TMPVAR):
				VM_TRACE(ZEND_INCLUDE_OR_EVAL_SPEC_TMPVAR)
				ZEND_INCLUDE_OR_EVAL_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_INCLUDE_OR_EVAL_SPEC_TMPVAR)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_YIELD_FROM_SPEC_TMPVAR):
				VM_TRACE(ZEND_YIELD_FROM_SPEC_TMPVAR)
				ZEND_YIELD_FROM_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_YIELD_FROM_SPEC_TMPVAR)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_STRLEN_SPEC_TMPVAR):
				VM_TRACE(ZEND_STRLEN_SPEC_TMPVAR)
				ZEND_STRLEN_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_STRLEN_SPEC_TMPVAR)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_TYPE_CHECK_SPEC_TMPVAR):
				VM_TRACE(ZEND_TYPE_CHECK_SPEC_TMPVAR)
				ZEND_TYPE_CHECK_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_TYPE_CHECK_SPEC_TMPVAR)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_FETCH_CLASS_NAME_SPEC_TMPVAR):
				VM_TRACE(ZEND_FETCH_CLASS_NAME_SPEC_TMPVAR)
				ZEND_FETCH_CLASS_NAME_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_FETCH_CLASS_NAME_SPEC_TMPVAR)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_DIV_SPEC_TMPVAR_CONST):
				VM_TRACE(ZEND_DIV_SPEC_TMPVAR_CONST)
				ZEND_DIV_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_DIV_SPEC_TMPVAR_CONST)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_POW_SPEC_TMPVAR_CONST):
				VM_TRACE(ZEND_POW_SPEC_TMPVAR_CONST)
				ZEND_POW_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_POW_SPEC_TMPVAR_CONST)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_CONCAT_SPEC_TMPVAR_CONST):
				VM_TRACE(ZEND_CONCAT_SPEC_TMPVAR_CONST)
				ZEND_CONCAT_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_CONCAT_SPEC_TMPVAR_CONST)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_IS_EQUAL_SPEC_TMPVAR_CONST):
				VM_TRACE(ZEND_IS_EQUAL_SPEC_TMPVAR_CONST)
				ZEND_IS_EQUAL_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_IS_EQUAL_SPEC_TMPVAR_CONST)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_IS_EQUAL_SPEC_TMPVAR_CONST_JMPZ):
				VM_TRACE(ZEND_IS_EQUAL_SPEC_TMPVAR_CONST_JMPZ)
				ZEND_IS_EQUAL_SPEC_TMPVAR_CONST_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_IS_EQUAL_SPEC_TMPVAR_CONST_JMPZ)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_IS_EQUAL_SPEC_TMPVAR_CONST_JMPNZ):
				VM_TRACE(ZEND_IS_EQUAL_SPEC_TMPVAR_CONST_JMPNZ)
				ZEND_IS_EQUAL_SPEC_TMPVAR_CONST_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_IS_EQUAL_SPEC_TMPVAR_CONST_JMPNZ)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_CONST):
				VM_TRACE(ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_CONST)
				ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_CONST)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_CONST_JMPZ):
				VM_TRACE(ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_CONST_JMPZ)
				ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_CONST_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_CONST_JMPZ)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_CONST_JMPNZ):
				VM_TRACE(ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_CONST_JMPNZ)
				ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_CONST_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_CONST_JMPNZ)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_SPACESHIP_SPEC_TMPVAR_CONST):
				VM_TRACE(ZEND_SPACESHIP_SPEC_TMPVAR_CONST)
				ZEND_SPACESHIP_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_SPACESHIP_SPEC_TMPVAR_CONST)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_BOOL_XOR_SPEC_TMPVAR_CONST):
				VM_TRACE(ZEND_BOOL_XOR_SPEC_TMPVAR_CONST)
				ZEND_BOOL_XOR_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_BOOL_XOR_SPEC_TMPVAR_CONST)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_FETCH_DIM_R_SPEC_TMPVAR_CONST):
				VM_TRACE(ZEND_FETCH_DIM_R_SPEC_TMPVAR_CONST)
				ZEND_FETCH_DIM_R_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_FETCH_DIM_R_SPEC_TMPVAR_CONST)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_FETCH_DIM_IS_SPEC_TMPVAR_CONST):
				VM_TRACE(ZEND_FETCH_DIM_IS_SPEC_TMPVAR_CONST)
				ZEND_FETCH_DIM_IS_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_FETCH_DIM_IS_SPEC_TMPVAR_CONST)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_FETCH_OBJ_R_SPEC_TMPVAR_CONST):
				VM_TRACE(ZEND_FETCH_OBJ_R_SPEC_TMPVAR_CONST)
				ZEND_FETCH_OBJ_R_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_FETCH_OBJ_R_SPEC_TMPVAR_CONST)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_CONST):
				VM_TRACE(ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_CONST)
				ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_CONST)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_FAST_CONCAT_SPEC_TMPVAR_CONST):
				VM_TRACE(ZEND_FAST_CONCAT_SPEC_TMPVAR_CONST)
				ZEND_FAST_CONCAT_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_FAST_CONCAT_SPEC_TMPVAR_CONST)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_CONST):
				VM_TRACE(ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_CONST)
				ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_CONST)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_SEND_VAL_SPEC_TMPVAR_CONST):
				VM_TRACE(ZEND_SEND_VAL_SPEC_TMPVAR_CONST)
				ZEND_SEND_VAL_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_SEND_VAL_SPEC_TMPVAR_CONST)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_CASE_SPEC_TMPVAR_CONST):
				VM_TRACE(ZEND_CASE_SPEC_TMPVAR_CONST)
				ZEND_CASE_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_CASE_SPEC_TMPVAR_CONST)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_TMPVAR_CONST):
				VM_TRACE(ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_TMPVAR_CONST)
				ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_TMPVAR_CONST)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TMPVAR_CONST):
				VM_TRACE(ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TMPVAR_CONST)
				ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TMPVAR_CONST)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_ARRAY_KEY_EXISTS_SPEC_TMPVAR_CONST):
				VM_TRACE(ZEND_ARRAY_KEY_EXISTS_SPEC_TMPVAR_CONST)
				ZEND_ARRAY_KEY_EXISTS_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_ARRAY_KEY_EXISTS_SPEC_TMPVAR_CONST)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_INSTANCEOF_SPEC_TMPVAR_CONST):
				VM_TRACE(ZEND_INSTANCEOF_SPEC_TMPVAR_CONST)
				ZEND_INSTANCEOF_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_INSTANCEOF_SPEC_TMPVAR_CONST)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_FETCH_DIM_R_INDEX_SPEC_TMPVAR_CONST):
				VM_TRACE(ZEND_FETCH_DIM_R_INDEX_SPEC_TMPVAR_CONST)
				ZEND_FETCH_DIM_R_INDEX_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_FETCH_DIM_R_INDEX_SPEC_TMPVAR_CONST)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_FETCH_DIM_R_INDEX_SPEC_TMPVAR_TMPVARCV):
				VM_TRACE(ZEND_FETCH_DIM_R_INDEX_SPEC_TMPVAR_TMPVARCV)
				ZEND_FETCH_DIM_R_INDEX_SPEC_TMPVAR_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_FETCH_DIM_R_INDEX_SPEC_TMPVAR_TMPVARCV)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_DIV_SPEC_TMPVAR_TMPVAR):
				VM_TRACE(ZEND_DIV_SPEC_TMPVAR_TMPVAR)
				ZEND_DIV_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_DIV_SPEC_TMPVAR_TMPVAR)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_POW_SPEC_TMPVAR_TMPVAR):
				VM_TRACE(ZEND_POW_SPEC_TMPVAR_TMPVAR)
				ZEND_POW_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_POW_SPEC_TMPVAR_TMPVAR)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_CONCAT_SPEC_TMPVAR_TMPVAR):
				VM_TRACE(ZEND_CONCAT_SPEC_TMPVAR_TMPVAR)
				ZEND_CONCAT_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_CONCAT_SPEC_TMPVAR_TMPVAR)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_IS_EQUAL_SPEC_TMPVAR_TMPVAR):
				VM_TRACE(ZEND_IS_EQUAL_SPEC_TMPVAR_TMPVAR)
				ZEND_IS_EQUAL_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_IS_EQUAL_SPEC_TMPVAR_TMPVAR)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_IS_EQUAL_SPEC_TMPVAR_TMPVAR_JMPZ):
				VM_TRACE(ZEND_IS_EQUAL_SPEC_TMPVAR_TMPVAR_JMPZ)
				ZEND_IS_EQUAL_SPEC_TMPVAR_TMPVAR_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_IS_EQUAL_SPEC_TMPVAR_TMPVAR_JMPZ)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_IS_EQUAL_SPEC_TMPVAR_TMPVAR_JMPNZ):
				VM_TRACE(ZEND_IS_EQUAL_SPEC_TMPVAR_TMPVAR_JMPNZ)
				ZEND_IS_EQUAL_SPEC_TMPVAR_TMPVAR_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_IS_EQUAL_SPEC_TMPVAR_TMPVAR_JMPNZ)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_TMPVAR):
				VM_TRACE(ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_TMPVAR)
				ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_TMPVAR)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_TMPVAR_JMPZ):
				VM_TRACE(ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_TMPVAR_JMPZ)
				ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_TMPVAR_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_TMPVAR_JMPZ)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_TMPVAR_JMPNZ):
				VM_TRACE(ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_TMPVAR_JMPNZ)
				ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_TMPVAR_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_TMPVAR_JMPNZ)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_SPACESHIP_SPEC_TMPVAR_TMPVAR):
				VM_TRACE(ZEND_SPACESHIP_SPEC_TMPVAR_TMPVAR)
				ZEND_SPACESHIP_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_SPACESHIP_SPEC_TMPVAR_TMPVAR)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_BOOL_XOR_SPEC_TMPVAR_TMPVAR):
				VM_TRACE(ZEND_BOOL_XOR_SPEC_TMPVAR_TMPVAR)
				ZEND_BOOL_XOR_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_BOOL_XOR_SPEC_TMPVAR_TMPVAR)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_FETCH_DIM_R_SPEC_TMPVAR_TMPVAR):
				VM_TRACE(ZEND_FETCH_DIM_R_SPEC_TMPVAR_TMPVAR)
				ZEND_FETCH_DIM_R_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_FETCH_DIM_R_SPEC_TMPVAR_TMPVAR)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_FETCH_DIM_IS_SPEC_TMPVAR_TMPVAR):
				VM_TRACE(ZEND_FETCH_DIM_IS_SPEC_TMPVAR_TMPVAR)
				ZEND_FETCH_DIM_IS_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_FETCH_DIM_IS_SPEC_TMPVAR_TMPVAR)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_FETCH_OBJ_R_SPEC_TMPVAR_TMPVAR):
				VM_TRACE(ZEND_FETCH_OBJ_R_SPEC_TMPVAR_TMPVAR)
				ZEND_FETCH_OBJ_R_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_FETCH_OBJ_R_SPEC_TMPVAR_TMPVAR)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_TMPVAR):
				VM_TRACE(ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_TMPVAR)
				ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_TMPVAR)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_FAST_CONCAT_SPEC_TMPVAR_TMPVAR):
				VM_TRACE(ZEND_FAST_CONCAT_SPEC_TMPVAR_TMPVAR)
				ZEND_FAST_CONCAT_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_FAST_CONCAT_SPEC_TMPVAR_TMPVAR)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_TMPVAR):
				VM_TRACE(ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_TMPVAR)
				ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_TMPVAR)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_CASE_SPEC_TMPVAR_TMPVAR):
				VM_TRACE(ZEND_CASE_SPEC_TMPVAR_TMPVAR)
				ZEND_CASE_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_CASE_SPEC_TMPVAR_TMPVAR)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_TMPVAR_TMPVAR):
				VM_TRACE(ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_TMPVAR_TMPVAR)
				ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_TMPVAR_TMPVAR)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TMPVAR_TMPVAR):
				VM_TRACE(ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TMPVAR_TMPVAR)
				ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TMPVAR_TMPVAR)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_ARRAY_KEY_EXISTS_SPEC_TMPVAR_TMPVAR):
				VM_TRACE(ZEND_ARRAY_KEY_EXISTS_SPEC_TMPVAR_TMPVAR)
				ZEND_ARRAY_KEY_EXISTS_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_ARRAY_KEY_EXISTS_SPEC_TMPVAR_TMPVAR)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_INSTANCEOF_SPEC_TMPVAR_VAR):
				VM_TRACE(ZEND_INSTANCEOF_SPEC_TMPVAR_VAR)
				ZEND_INSTANCEOF_SPEC_TMPVAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_INSTANCEOF_SPEC_TMPVAR_VAR)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_FETCH_R_SPEC_TMPVAR_UNUSED):
				VM_TRACE(ZEND_FETCH_R_SPEC_TMPVAR_UNUSED)
				ZEND_FETCH_R_SPEC_TMPVAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_FETCH_R_SPEC_TMPVAR_UNUSED)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_FETCH_W_SPEC_TMPVAR_UNUSED):
				VM_TRACE(ZEND_FETCH_W_SPEC_TMPVAR_UNUSED)
				ZEND_FETCH_W_SPEC_TMPVAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_FETCH_W_SPEC_TMPVAR_UNUSED)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_FETCH_RW_SPEC_TMPVAR_UNUSED):
				VM_TRACE(ZEND_FETCH_RW_SPEC_TMPVAR_UNUSED)
				ZEND_FETCH_RW_SPEC_TMPVAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_FETCH_RW_SPEC_TMPVAR_UNUSED)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_FETCH_FUNC_ARG_SPEC_TMPVAR_UNUSED):
				VM_TRACE(ZEND_FETCH_FUNC_ARG_SPEC_TMPVAR_UNUSED)
				ZEND_FETCH_FUNC_ARG_SPEC_TMPVAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_FETCH_FUNC_ARG_SPEC_TMPVAR_UNUSED)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_FETCH_UNSET_SPEC_TMPVAR_UNUSED):
				VM_TRACE(ZEND_FETCH_UNSET_SPEC_TMPVAR_UNUSED)
				ZEND_FETCH_UNSET_SPEC_TMPVAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_FETCH_UNSET_SPEC_TMPVAR_UNUSED)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_FETCH_IS_SPEC_TMPVAR_UNUSED):
				VM_TRACE(ZEND_FETCH_IS_SPEC_TMPVAR_UNUSED)
				ZEND_FETCH_IS_SPEC_TMPVAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_FETCH_IS_SPEC_TMPVAR_UNUSED)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_SEND_VAL_SPEC_TMPVAR_UNUSED):
				VM_TRACE(ZEND_SEND_VAL_SPEC_TMPVAR_UNUSED)
				ZEND_SEND_VAL_SPEC_TMPVAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_SEND_VAL_SPEC_TMPVAR_UNUSED)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_UNSET_VAR_SPEC_TMPVAR_UNUSED):
				VM_TRACE(ZEND_UNSET_VAR_SPEC_TMPVAR_UNUSED)
				ZEND_UNSET_VAR_SPEC_TMPVAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_UNSET_VAR_SPEC_TMPVAR_UNUSED)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_ISSET_ISEMPTY_VAR_SPEC_TMPVAR_UNUSED):
				VM_TRACE(ZEND_ISSET_ISEMPTY_VAR_SPEC_TMPVAR_UNUSED)
				ZEND_ISSET_ISEMPTY_VAR_SPEC_TMPVAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_ISSET_ISEMPTY_VAR_SPEC_TMPVAR_UNUSED)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_INSTANCEOF_SPEC_TMPVAR_UNUSED):
				VM_TRACE(ZEND_INSTANCEOF_SPEC_TMPVAR_UNUSED)
				ZEND_INSTANCEOF_SPEC_TMPVAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_INSTANCEOF_SPEC_TMPVAR_UNUSED)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_COUNT_SPEC_TMPVAR_UNUSED):
				VM_TRACE(ZEND_COUNT_SPEC_TMPVAR_UNUSED)
				ZEND_COUNT_SPEC_TMPVAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_COUNT_SPEC_TMPVAR_UNUSED)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_COUNT_ARRAY_SPEC_TMPVAR_UNUSED):
				VM_TRACE(ZEND_COUNT_ARRAY_SPEC_TMPVAR_UNUSED)
				ZEND_COUNT_ARRAY_SPEC_TMPVAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_COUNT_ARRAY_SPEC_TMPVAR_UNUSED)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_GET_CLASS_SPEC_TMPVAR_UNUSED):
				VM_TRACE(ZEND_GET_CLASS_SPEC_TMPVAR_UNUSED)
				ZEND_GET_CLASS_SPEC_TMPVAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_GET_CLASS_SPEC_TMPVAR_UNUSED)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_COPY_TMP_SPEC_TMPVAR_UNUSED):
				VM_TRACE(ZEND_COPY_TMP_SPEC_TMPVAR_UNUSED)
				ZEND_COPY_TMP_SPEC_TMPVAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_COPY_TMP_SPEC_TMPVAR_UNUSED)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_DIV_SPEC_TMPVAR_CV):
				VM_TRACE(ZEND_DIV_SPEC_TMPVAR_CV)
				ZEND_DIV_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_DIV_SPEC_TMPVAR_CV)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_POW_SPEC_TMPVAR_CV):
				VM_TRACE(ZEND_POW_SPEC_TMPVAR_CV)
				ZEND_POW_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_POW_SPEC_TMPVAR_CV)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_CONCAT_SPEC_TMPVAR_CV):
				VM_TRACE(ZEND_CONCAT_SPEC_TMPVAR_CV)
				ZEND_CONCAT_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_CONCAT_SPEC_TMPVAR_CV)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_SPACESHIP_SPEC_TMPVAR_CV):
				VM_TRACE(ZEND_SPACESHIP_SPEC_TMPVAR_CV)
				ZEND_SPACESHIP_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_SPACESHIP_SPEC_TMPVAR_CV)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_FETCH_DIM_R_SPEC_TMPVAR_CV):
				VM_TRACE(ZEND_FETCH_DIM_R_SPEC_TMPVAR_CV)
				ZEND_FETCH_DIM_R_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_FETCH_DIM_R_SPEC_TMPVAR_CV)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_FETCH_DIM_IS_SPEC_TMPVAR_CV):
				VM_TRACE(ZEND_FETCH_DIM_IS_SPEC_TMPVAR_CV)
				ZEND_FETCH_DIM_IS_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_FETCH_DIM_IS_SPEC_TMPVAR_CV)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_FETCH_OBJ_R_SPEC_TMPVAR_CV):
				VM_TRACE(ZEND_FETCH_OBJ_R_SPEC_TMPVAR_CV)
				ZEND_FETCH_OBJ_R_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_FETCH_OBJ_R_SPEC_TMPVAR_CV)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_CV):
				VM_TRACE(ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_CV)
				ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_CV)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_FAST_CONCAT_SPEC_TMPVAR_CV):
				VM_TRACE(ZEND_FAST_CONCAT_SPEC_TMPVAR_CV)
				ZEND_FAST_CONCAT_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_FAST_CONCAT_SPEC_TMPVAR_CV)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_CV):
				VM_TRACE(ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_CV)
				ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_CV)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_CASE_SPEC_TMPVAR_CV):
				VM_TRACE(ZEND_CASE_SPEC_TMPVAR_CV)
				ZEND_CASE_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_CASE_SPEC_TMPVAR_CV)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_TMPVAR_CV):
				VM_TRACE(ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_TMPVAR_CV)
				ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_TMPVAR_CV)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TMPVAR_CV):
				VM_TRACE(ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TMPVAR_CV)
				ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TMPVAR_CV)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_ARRAY_KEY_EXISTS_SPEC_TMPVAR_CV):
				VM_TRACE(ZEND_ARRAY_KEY_EXISTS_SPEC_TMPVAR_CV)
				ZEND_ARRAY_KEY_EXISTS_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_ARRAY_KEY_EXISTS_SPEC_TMPVAR_CV)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_RETURN_SPEC_TMP):
				VM_TRACE(ZEND_RETURN_SPEC_TMP)
{
	USE_OPLINE
	zval *retval_ptr;
	zval *return_value;


	retval_ptr = _get_zval_ptr_tmp(opline->op1.var EXECUTE_DATA_CC);
	return_value = EX(return_value);


	if (IS_TMP_VAR == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(retval_ptr) == IS_UNDEF)) {
		SAVE_OPLINE();
		retval_ptr = ZVAL_UNDEFINED_OP1();
		if (return_value) {
			ZVAL_NULL(return_value);
		}
	} else if (!return_value) {
		if (IS_TMP_VAR & (IS_VAR|IS_TMP_VAR)) {
			if (Z_REFCOUNTED_P(retval_ptr) && !Z_DELREF_P(retval_ptr)) {
				SAVE_OPLINE();
				rc_dtor_func(Z_COUNTED_P(retval_ptr));
			}
		}
	} else {
		if ((IS_TMP_VAR & (IS_CONST|IS_TMP_VAR))) {
			ZVAL_COPY_VALUE(return_value, retval_ptr);
			if (IS_TMP_VAR == IS_CONST) {
				if (UNEXPECTED(Z_OPT_REFCOUNTED_P(return_value))) {
					Z_ADDREF_P(return_value);
				}
			}
		} else if (IS_TMP_VAR == IS_CV) {
			do {
				if (Z_OPT_REFCOUNTED_P(retval_ptr)) {
					if (EXPECTED(!Z_OPT_ISREF_P(retval_ptr))) {
						if (EXPECTED(!(EX_CALL_INFO() & (ZEND_CALL_CODE|ZEND_CALL_OBSERVED)))) {
							zend_refcounted *ref = Z_COUNTED_P(retval_ptr);
							ZVAL_COPY_VALUE(return_value, retval_ptr);
							if (GC_MAY_LEAK(ref)) {
								SAVE_OPLINE();
								gc_possible_root(ref);
							}
							ZVAL_NULL(retval_ptr);
							break;
						} else {
							Z_ADDREF_P(retval_ptr);
						}
					} else {
						retval_ptr = Z_REFVAL_P(retval_ptr);
						if (Z_OPT_REFCOUNTED_P(retval_ptr)) {
							Z_ADDREF_P(retval_ptr);
						}
					}
				}
				ZVAL_COPY_VALUE(return_value, retval_ptr);
			} while (0);
		} else /* if (IS_TMP_VAR == IS_VAR) */ {
			if (UNEXPECTED(Z_ISREF_P(retval_ptr))) {
				zend_refcounted *ref = Z_COUNTED_P(retval_ptr);

				retval_ptr = Z_REFVAL_P(retval_ptr);
				ZVAL_COPY_VALUE(return_value, retval_ptr);
				if (UNEXPECTED(GC_DELREF(ref) == 0)) {
					efree_size(ref, sizeof(zend_reference));
				} else if (Z_OPT_REFCOUNTED_P(retval_ptr)) {
					Z_ADDREF_P(retval_ptr);
				}
			} else {
				ZVAL_COPY_VALUE(return_value, retval_ptr);
			}
		}
	}






	goto zend_leave_helper_SPEC_LABEL;
}

				VM_TRACE_OP_END(ZEND_RETURN_SPEC_TMP)
			HYBRID_CASE(ZEND_RETURN_BY_REF_SPEC_TMP):
				VM_TRACE(ZEND_RETURN_BY_REF_SPEC_TMP)
				ZEND_RETURN_BY_REF_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_RETURN_BY_REF_SPEC_TMP)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_GENERATOR_RETURN_SPEC_TMP):
				VM_TRACE(ZEND_GENERATOR_RETURN_SPEC_TMP)
				ZEND_GENERATOR_RETURN_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_GENERATOR_RETURN_SPEC_TMP)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_SEND_USER_SPEC_TMP):
				VM_TRACE(ZEND_SEND_USER_SPEC_TMP)
				ZEND_SEND_USER_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_SEND_USER_SPEC_TMP)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_CAST_SPEC_TMP):
				VM_TRACE(ZEND_CAST_SPEC_TMP)
				ZEND_CAST_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_CAST_SPEC_TMP)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_FE_RESET_R_SPEC_TMP):
				VM_TRACE(ZEND_FE_RESET_R_SPEC_TMP)
				ZEND_FE_RESET_R_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_FE_RESET_R_SPEC_TMP)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_FE_RESET_RW_SPEC_TMP):
				VM_TRACE(ZEND_FE_RESET_RW_SPEC_TMP)
				ZEND_FE_RESET_RW_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_FE_RESET_RW_SPEC_TMP)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_END_SILENCE_SPEC_TMP):
				VM_TRACE(ZEND_END_SILENCE_SPEC_TMP)
				ZEND_END_SILENCE_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_END_SILENCE_SPEC_TMP)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_JMP_SET_SPEC_TMP):
				VM_TRACE(ZEND_JMP_SET_SPEC_TMP)
				ZEND_JMP_SET_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_JMP_SET_SPEC_TMP)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_COALESCE_SPEC_TMP):
				VM_TRACE(ZEND_COALESCE_SPEC_TMP)
				ZEND_COALESCE_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_COALESCE_SPEC_TMP)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_JMP_NULL_SPEC_TMP):
				VM_TRACE(ZEND_JMP_NULL_SPEC_TMP)
				ZEND_JMP_NULL_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_JMP_NULL_SPEC_TMP)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_QM_ASSIGN_SPEC_TMP):
				VM_TRACE(ZEND_QM_ASSIGN_SPEC_TMP)
				ZEND_QM_ASSIGN_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_QM_ASSIGN_SPEC_TMP)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_IS_IDENTICAL_SPEC_TMP_CONST):
				VM_TRACE(ZEND_IS_IDENTICAL_SPEC_TMP_CONST)
				ZEND_IS_IDENTICAL_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_IS_IDENTICAL_SPEC_TMP_CONST)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_CASE_STRICT_SPEC_TMP_CONST):
				VM_TRACE(ZEND_CASE_STRICT_SPEC_TMP_CONST)
				ZEND_CASE_STRICT_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_CASE_STRICT_SPEC_TMP_CONST)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_IS_NOT_IDENTICAL_SPEC_TMP_CONST):
				VM_TRACE(ZEND_IS_NOT_IDENTICAL_SPEC_TMP_CONST)
				ZEND_IS_NOT_IDENTICAL_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_IS_NOT_IDENTICAL_SPEC_TMP_CONST)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_FETCH_DIM_FUNC_ARG_SPEC_TMP_CONST):
				VM_TRACE(ZEND_FETCH_DIM_FUNC_ARG_SPEC_TMP_CONST)
				ZEND_FETCH_DIM_FUNC_ARG_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_FETCH_DIM_FUNC_ARG_SPEC_TMP_CONST)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_FETCH_OBJ_FUNC_ARG_SPEC_TMP_CONST):
				VM_TRACE(ZEND_FETCH_OBJ_FUNC_ARG_SPEC_TMP_CONST)
				ZEND_FETCH_OBJ_FUNC_ARG_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_FETCH_OBJ_FUNC_ARG_SPEC_TMP_CONST)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_ROPE_ADD_SPEC_TMP_CONST):
				VM_TRACE(ZEND_ROPE_ADD_SPEC_TMP_CONST)
				ZEND_ROPE_ADD_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_ROPE_ADD_SPEC_TMP_CONST)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_ROPE_END_SPEC_TMP_CONST):
				VM_TRACE(ZEND_ROPE_END_SPEC_TMP_CONST)
				ZEND_ROPE_END_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_ROPE_END_SPEC_TMP_CONST)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_SEND_VAL_EX_SPEC_TMP_CONST):
				VM_TRACE(ZEND_SEND_VAL_EX_SPEC_TMP_CONST)
				ZEND_SEND_VAL_EX_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_SEND_VAL_EX_SPEC_TMP_CONST)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_CONST):
				VM_TRACE(ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_CONST)
				ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_CONST)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_INIT_ARRAY_SPEC_TMP_CONST):
				VM_TRACE(ZEND_INIT_ARRAY_SPEC_TMP_CONST)
				ZEND_INIT_ARRAY_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_INIT_ARRAY_SPEC_TMP_CONST)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_YIELD_SPEC_TMP_CONST):
				VM_TRACE(ZEND_YIELD_SPEC_TMP_CONST)
				ZEND_YIELD_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_YIELD_SPEC_TMP_CONST)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_IN_ARRAY_SPEC_TMP_CONST):
				VM_TRACE(ZEND_IN_ARRAY_SPEC_TMP_CONST)
				ZEND_IN_ARRAY_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_IN_ARRAY_SPEC_TMP_CONST)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_FETCH_DIM_FUNC_ARG_SPEC_TMP_TMPVAR):
				VM_TRACE(ZEND_FETCH_DIM_FUNC_ARG_SPEC_TMP_TMPVAR)
				ZEND_FETCH_DIM_FUNC_ARG_SPEC_TMP_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_FETCH_DIM_FUNC_ARG_SPEC_TMP_TMPVAR)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_FETCH_OBJ_FUNC_ARG_SPEC_TMP_TMPVAR):
				VM_TRACE(ZEND_FETCH_OBJ_FUNC_ARG_SPEC_TMP_TMPVAR)
				ZEND_FETCH_OBJ_FUNC_ARG_SPEC_TMP_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_FETCH_OBJ_FUNC_ARG_SPEC_TMP_TMPVAR)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_ROPE_ADD_SPEC_TMP_TMPVAR):
				VM_TRACE(ZEND_ROPE_ADD_SPEC_TMP_TMPVAR)
				ZEND_ROPE_ADD_SPEC_TMP_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_ROPE_ADD_SPEC_TMP_TMPVAR)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_ROPE_END_SPEC_TMP_TMPVAR):
				VM_TRACE(ZEND_ROPE_END_SPEC_TMP_TMPVAR)
				ZEND_ROPE_END_SPEC_TMP_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_ROPE_END_SPEC_TMP_TMPVAR)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_TMPVAR):
				VM_TRACE(ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_TMPVAR)
				ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_TMPVAR)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_INIT_ARRAY_SPEC_TMP_TMPVAR):
				VM_TRACE(ZEND_INIT_ARRAY_SPEC_TMP_TMPVAR)
				ZEND_INIT_ARRAY_SPEC_TMP_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_INIT_ARRAY_SPEC_TMP_TMPVAR)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_YIELD_SPEC_TMP_TMPVAR):
				VM_TRACE(ZEND_YIELD_SPEC_TMP_TMPVAR)
				ZEND_YIELD_SPEC_TMP_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_YIELD_SPEC_TMP_TMPVAR)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_IS_IDENTICAL_SPEC_TMP_TMP):
				VM_TRACE(ZEND_IS_IDENTICAL_SPEC_TMP_TMP)
				ZEND_IS_IDENTICAL_SPEC_TMP_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_IS_IDENTICAL_SPEC_TMP_TMP)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_CASE_STRICT_SPEC_TMP_TMP):
				VM_TRACE(ZEND_CASE_STRICT_SPEC_TMP_TMP)
				ZEND_CASE_STRICT_SPEC_TMP_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_CASE_STRICT_SPEC_TMP_TMP)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_IS_NOT_IDENTICAL_SPEC_TMP_TMP):
				VM_TRACE(ZEND_IS_NOT_IDENTICAL_SPEC_TMP_TMP)
				ZEND_IS_NOT_IDENTICAL_SPEC_TMP_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_IS_NOT_IDENTICAL_SPEC_TMP_TMP)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_CASE_STRICT_SPEC_TMP_VAR):
				VM_TRACE(ZEND_CASE_STRICT_SPEC_TMP_VAR)
				ZEND_CASE_STRICT_SPEC_TMP_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_CASE_STRICT_SPEC_TMP_VAR)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_FETCH_DIM_FUNC_ARG_SPEC_TMP_UNUSED):
				VM_TRACE(ZEND_FETCH_DIM_FUNC_ARG_SPEC_TMP_UNUSED)
				ZEND_FETCH_DIM_FUNC_ARG_SPEC_TMP_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_FETCH_DIM_FUNC_ARG_SPEC_TMP_UNUSED)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_VERIFY_RETURN_TYPE_SPEC_TMP_UNUSED):
				VM_TRACE(ZEND_VERIFY_RETURN_TYPE_SPEC_TMP_UNUSED)
				ZEND_VERIFY_RETURN_TYPE_SPEC_TMP_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_VERIFY_RETURN_TYPE_SPEC_TMP_UNUSED)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_SEND_VAL_EX_SPEC_TMP_UNUSED):
				VM_TRACE(ZEND_SEND_VAL_EX_SPEC_TMP_UNUSED)
				ZEND_SEND_VAL_EX_SPEC_TMP_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_SEND_VAL_EX_SPEC_TMP_UNUSED)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_SEND_VAL_EX_SPEC_TMP_UNUSED_QUICK):
				VM_TRACE(ZEND_SEND_VAL_EX_SPEC_TMP_UNUSED_QUICK)
				ZEND_SEND_VAL_EX_SPEC_TMP_UNUSED_QUICK_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_SEND_VAL_EX_SPEC_TMP_UNUSED_QUICK)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_UNUSED):
				VM_TRACE(ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_UNUSED)
				ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_UNUSED)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_INIT_ARRAY_SPEC_TMP_UNUSED):
				VM_TRACE(ZEND_INIT_ARRAY_SPEC_TMP_UNUSED)
				ZEND_INIT_ARRAY_SPEC_TMP_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_INIT_ARRAY_SPEC_TMP_UNUSED)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_YIELD_SPEC_TMP_UNUSED):
				VM_TRACE(ZEND_YIELD_SPEC_TMP_UNUSED)
				ZEND_YIELD_SPEC_TMP_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_YIELD_SPEC_TMP_UNUSED)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_GET_TYPE_SPEC_TMP_UNUSED):
				VM_TRACE(ZEND_GET_TYPE_SPEC_TMP_UNUSED)
				ZEND_GET_TYPE_SPEC_TMP_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_GET_TYPE_SPEC_TMP_UNUSED)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_CASE_STRICT_SPEC_TMP_CV):
				VM_TRACE(ZEND_CASE_STRICT_SPEC_TMP_CV)
				ZEND_CASE_STRICT_SPEC_TMP_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_CASE_STRICT_SPEC_TMP_CV)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_FETCH_DIM_FUNC_ARG_SPEC_TMP_CV):
				VM_TRACE(ZEND_FETCH_DIM_FUNC_ARG_SPEC_TMP_CV)
				ZEND_FETCH_DIM_FUNC_ARG_SPEC_TMP_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_FETCH_DIM_FUNC_ARG_SPEC_TMP_CV)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_FETCH_OBJ_FUNC_ARG_SPEC_TMP_CV):
				VM_TRACE(ZEND_FETCH_OBJ_FUNC_ARG_SPEC_TMP_CV)
				ZEND_FETCH_OBJ_FUNC_ARG_SPEC_TMP_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_FETCH_OBJ_FUNC_ARG_SPEC_TMP_CV)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_ROPE_ADD_SPEC_TMP_CV):
				VM_TRACE(ZEND_ROPE_ADD_SPEC_TMP_CV)
				ZEND_ROPE_ADD_SPEC_TMP_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_ROPE_ADD_SPEC_TMP_CV)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_ROPE_END_SPEC_TMP_CV):
				VM_TRACE(ZEND_ROPE_END_SPEC_TMP_CV)
				ZEND_ROPE_END_SPEC_TMP_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_ROPE_END_SPEC_TMP_CV)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_CV):
				VM_TRACE(ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_CV)
				ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_CV)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_INIT_ARRAY_SPEC_TMP_CV):
				VM_TRACE(ZEND_INIT_ARRAY_SPEC_TMP_CV)
				ZEND_INIT_ARRAY_SPEC_TMP_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_INIT_ARRAY_SPEC_TMP_CV)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_YIELD_SPEC_TMP_CV):
				VM_TRACE(ZEND_YIELD_SPEC_TMP_CV)
				ZEND_YIELD_SPEC_TMP_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_YIELD_SPEC_TMP_CV)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_BIND_LEXICAL_SPEC_TMP_CV):
				VM_TRACE(ZEND_BIND_LEXICAL_SPEC_TMP_CV)
				ZEND_BIND_LEXICAL_SPEC_TMP_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_BIND_LEXICAL_SPEC_TMP_CV)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_PRE_INC_SPEC_VAR_RETVAL_UNUSED):
				VM_TRACE(ZEND_PRE_INC_SPEC_VAR_RETVAL_UNUSED)
				ZEND_PRE_INC_SPEC_VAR_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_PRE_INC_SPEC_VAR_RETVAL_UNUSED)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_PRE_INC_SPEC_VAR_RETVAL_USED):
				VM_TRACE(ZEND_PRE_INC_SPEC_VAR_RETVAL_USED)
				ZEND_PRE_INC_SPEC_VAR_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_PRE_INC_SPEC_VAR_RETVAL_USED)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_PRE_DEC_SPEC_VAR_RETVAL_UNUSED):
				VM_TRACE(ZEND_PRE_DEC_SPEC_VAR_RETVAL_UNUSED)
				ZEND_PRE_DEC_SPEC_VAR_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_PRE_DEC_SPEC_VAR_RETVAL_UNUSED)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_PRE_DEC_SPEC_VAR_RETVAL_USED):
				VM_TRACE(ZEND_PRE_DEC_SPEC_VAR_RETVAL_USED)
				ZEND_PRE_DEC_SPEC_VAR_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_PRE_DEC_SPEC_VAR_RETVAL_USED)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_POST_INC_SPEC_VAR):
				VM_TRACE(ZEND_POST_INC_SPEC_VAR)
				ZEND_POST_INC_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_POST_INC_SPEC_VAR)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_POST_DEC_SPEC_VAR):
				VM_TRACE(ZEND_POST_DEC_SPEC_VAR)
				ZEND_POST_DEC_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_POST_DEC_SPEC_VAR)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_RETURN_SPEC_VAR):
				VM_TRACE(ZEND_RETURN_SPEC_VAR)
{
	USE_OPLINE
	zval *retval_ptr;
	zval *return_value;


	retval_ptr = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
	return_value = EX(return_value);


	if (IS_VAR == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(retval_ptr) == IS_UNDEF)) {
		SAVE_OPLINE();
		retval_ptr = ZVAL_UNDEFINED_OP1();
		if (return_value) {
			ZVAL_NULL(return_value);
		}
	} else if (!return_value) {
		if (IS_VAR & (IS_VAR|IS_TMP_VAR)) {
			if (Z_REFCOUNTED_P(retval_ptr) && !Z_DELREF_P(retval_ptr)) {
				SAVE_OPLINE();
				rc_dtor_func(Z_COUNTED_P(retval_ptr));
			}
		}
	} else {
		if ((IS_VAR & (IS_CONST|IS_TMP_VAR))) {
			ZVAL_COPY_VALUE(return_value, retval_ptr);
			if (IS_VAR == IS_CONST) {
				if (UNEXPECTED(Z_OPT_REFCOUNTED_P(return_value))) {
					Z_ADDREF_P(return_value);
				}
			}
		} else if (IS_VAR == IS_CV) {
			do {
				if (Z_OPT_REFCOUNTED_P(retval_ptr)) {
					if (EXPECTED(!Z_OPT_ISREF_P(retval_ptr))) {
						if (EXPECTED(!(EX_CALL_INFO() & (ZEND_CALL_CODE|ZEND_CALL_OBSERVED)))) {
							zend_refcounted *ref = Z_COUNTED_P(retval_ptr);
							ZVAL_COPY_VALUE(return_value, retval_ptr);
							if (GC_MAY_LEAK(ref)) {
								SAVE_OPLINE();
								gc_possible_root(ref);
							}
							ZVAL_NULL(retval_ptr);
							break;
						} else {
							Z_ADDREF_P(retval_ptr);
						}
					} else {
						retval_ptr = Z_REFVAL_P(retval_ptr);
						if (Z_OPT_REFCOUNTED_P(retval_ptr)) {
							Z_ADDREF_P(retval_ptr);
						}
					}
				}
				ZVAL_COPY_VALUE(return_value, retval_ptr);
			} while (0);
		} else /* if (IS_VAR == IS_VAR) */ {
			if (UNEXPECTED(Z_ISREF_P(retval_ptr))) {
				zend_refcounted *ref = Z_COUNTED_P(retval_ptr);

				retval_ptr = Z_REFVAL_P(retval_ptr);
				ZVAL_COPY_VALUE(return_value, retval_ptr);
				if (UNEXPECTED(GC_DELREF(ref) == 0)) {
					efree_size(ref, sizeof(zend_reference));
				} else if (Z_OPT_REFCOUNTED_P(retval_ptr)) {
					Z_ADDREF_P(retval_ptr);
				}
			} else {
				ZVAL_COPY_VALUE(return_value, retval_ptr);
			}
		}
	}






	goto zend_leave_helper_SPEC_LABEL;
}

				VM_TRACE_OP_END(ZEND_RETURN_SPEC_VAR)
			HYBRID_CASE(ZEND_RETURN_BY_REF_SPEC_VAR):
				VM_TRACE(ZEND_RETURN_BY_REF_SPEC_VAR)
				ZEND_RETURN_BY_REF_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_RETURN_BY_REF_SPEC_VAR)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_GENERATOR_RETURN_SPEC_VAR):
				VM_TRACE(ZEND_GENERATOR_RETURN_SPEC_VAR)
				ZEND_GENERATOR_RETURN_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_GENERATOR_RETURN_SPEC_VAR)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_SEND_USER_SPEC_VAR):
				VM_TRACE(ZEND_SEND_USER_SPEC_VAR)
				ZEND_SEND_USER_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_SEND_USER_SPEC_VAR)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_CAST_SPEC_VAR):
				VM_TRACE(ZEND_CAST_SPEC_VAR)
				ZEND_CAST_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_CAST_SPEC_VAR)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_FE_RESET_R_SPEC_VAR):
				VM_TRACE(ZEND_FE_RESET_R_SPEC_VAR)
				ZEND_FE_RESET_R_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_FE_RESET_R_SPEC_VAR)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_FE_RESET_RW_SPEC_VAR):
				VM_TRACE(ZEND_FE_RESET_RW_SPEC_VAR)
				ZEND_FE_RESET_RW_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_FE_RESET_RW_SPEC_VAR)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_FE_FETCH_R_SPEC_VAR):
				VM_TRACE(ZEND_FE_FETCH_R_SPEC_VAR)
				ZEND_FE_FETCH_R_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_FE_FETCH_R_SPEC_VAR)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_FE_FETCH_RW_SPEC_VAR):
				VM_TRACE(ZEND_FE_FETCH_RW_SPEC_VAR)
				ZEND_FE_FETCH_RW_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_FE_FETCH_RW_SPEC_VAR)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_JMP_SET_SPEC_VAR):
				VM_TRACE(ZEND_JMP_SET_SPEC_VAR)
				ZEND_JMP_SET_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_JMP_SET_SPEC_VAR)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_COALESCE_SPEC_VAR):
				VM_TRACE(ZEND_COALESCE_SPEC_VAR)
				ZEND_COALESCE_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_COALESCE_SPEC_VAR)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_JMP_NULL_SPEC_VAR):
				VM_TRACE(ZEND_JMP_NULL_SPEC_VAR)
				ZEND_JMP_NULL_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_JMP_NULL_SPEC_VAR)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_QM_ASSIGN_SPEC_VAR):
				VM_TRACE(ZEND_QM_ASSIGN_SPEC_VAR)
				ZEND_QM_ASSIGN_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_QM_ASSIGN_SPEC_VAR)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_SEND_VAR_SIMPLE_SPEC_VAR):
				VM_TRACE(ZEND_SEND_VAR_SIMPLE_SPEC_VAR)
				ZEND_SEND_VAR_SIMPLE_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_SEND_VAR_SIMPLE_SPEC_VAR)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_IS_IDENTICAL_SPEC_VAR_CONST):
				VM_TRACE(ZEND_IS_IDENTICAL_SPEC_VAR_CONST)
				ZEND_IS_IDENTICAL_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_IS_IDENTICAL_SPEC_VAR_CONST)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_CASE_STRICT_SPEC_VAR_CONST):
				VM_TRACE(ZEND_CASE_STRICT_SPEC_VAR_CONST)
				ZEND_CASE_STRICT_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_CASE_STRICT_SPEC_VAR_CONST)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_IS_NOT_IDENTICAL_SPEC_VAR_CONST):
				VM_TRACE(ZEND_IS_NOT_IDENTICAL_SPEC_VAR_CONST)
				ZEND_IS_NOT_IDENTICAL_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_IS_NOT_IDENTICAL_SPEC_VAR_CONST)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_ASSIGN_OBJ_OP_SPEC_VAR_CONST):
				VM_TRACE(ZEND_ASSIGN_OBJ_OP_SPEC_VAR_CONST)
				ZEND_ASSIGN_OBJ_OP_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_ASSIGN_OBJ_OP_SPEC_VAR_CONST)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_ASSIGN_DIM_OP_SPEC_VAR_CONST):
				VM_TRACE(ZEND_ASSIGN_DIM_OP_SPEC_VAR_CONST)
				ZEND_ASSIGN_DIM_OP_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_ASSIGN_DIM_OP_SPEC_VAR_CONST)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_ASSIGN_OP_SPEC_VAR_CONST):
				VM_TRACE(ZEND_ASSIGN_OP_SPEC_VAR_CONST)
				ZEND_ASSIGN_OP_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_ASSIGN_OP_SPEC_VAR_CONST)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_PRE_INC_OBJ_SPEC_VAR_CONST):
				VM_TRACE(ZEND_PRE_INC_OBJ_SPEC_VAR_CONST)
				ZEND_PRE_INC_OBJ_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_PRE_INC_OBJ_SPEC_VAR_CONST)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_POST_INC_OBJ_SPEC_VAR_CONST):
				VM_TRACE(ZEND_POST_INC_OBJ_SPEC_VAR_CONST)
				ZEND_POST_INC_OBJ_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_POST_INC_OBJ_SPEC_VAR_CONST)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_FETCH_DIM_W_SPEC_VAR_CONST):
				VM_TRACE(ZEND_FETCH_DIM_W_SPEC_VAR_CONST)
				ZEND_FETCH_DIM_W_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_FETCH_DIM_W_SPEC_VAR_CONST)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_FETCH_DIM_RW_SPEC_VAR_CONST):
				VM_TRACE(ZEND_FETCH_DIM_RW_SPEC_VAR_CONST)
				ZEND_FETCH_DIM_RW_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_FETCH_DIM_RW_SPEC_VAR_CONST)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_CONST):
				VM_TRACE(ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_CONST)
				ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_CONST)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_FETCH_DIM_UNSET_SPEC_VAR_CONST):
				VM_TRACE(ZEND_FETCH_DIM_UNSET_SPEC_VAR_CONST)
				ZEND_FETCH_DIM_UNSET_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_FETCH_DIM_UNSET_SPEC_VAR_CONST)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_FETCH_OBJ_W_SPEC_VAR_CONST):
				VM_TRACE(ZEND_FETCH_OBJ_W_SPEC_VAR_CONST)
				ZEND_FETCH_OBJ_W_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_FETCH_OBJ_W_SPEC_VAR_CONST)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_FETCH_OBJ_RW_SPEC_VAR_CONST):
				VM_TRACE(ZEND_FETCH_OBJ_RW_SPEC_VAR_CONST)
				ZEND_FETCH_OBJ_RW_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_FETCH_OBJ_RW_SPEC_VAR_CONST)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_FETCH_OBJ_FUNC_ARG_SPEC_VAR_CONST):
				VM_TRACE(ZEND_FETCH_OBJ_FUNC_ARG_SPEC_VAR_CONST)
				ZEND_FETCH_OBJ_FUNC_ARG_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_FETCH_OBJ_FUNC_ARG_SPEC_VAR_CONST)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_FETCH_OBJ_UNSET_SPEC_VAR_CONST):
				VM_TRACE(ZEND_FETCH_OBJ_UNSET_SPEC_VAR_CONST)
				ZEND_FETCH_OBJ_UNSET_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_FETCH_OBJ_UNSET_SPEC_VAR_CONST)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_FETCH_LIST_W_SPEC_VAR_CONST):
				VM_TRACE(ZEND_FETCH_LIST_W_SPEC_VAR_CONST)
				ZEND_FETCH_LIST_W_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_FETCH_LIST_W_SPEC_VAR_CONST)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_VAR_CONST_OP_DATA_CONST):
				VM_TRACE(ZEND_ASSIGN_OBJ_SPEC_VAR_CONST_OP_DATA_CONST)
				ZEND_ASSIGN_OBJ_SPEC_VAR_CONST_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_ASSIGN_OBJ_SPEC_VAR_CONST_OP_DATA_CONST)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_VAR_CONST_OP_DATA_TMP):
				VM_TRACE(ZEND_ASSIGN_OBJ_SPEC_VAR_CONST_OP_DATA_TMP)
				ZEND_ASSIGN_OBJ_SPEC_VAR_CONST_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_ASSIGN_OBJ_SPEC_VAR_CONST_OP_DATA_TMP)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_VAR_CONST_OP_DATA_VAR):
				VM_TRACE(ZEND_ASSIGN_OBJ_SPEC_VAR_CONST_OP_DATA_VAR)
				ZEND_ASSIGN_OBJ_SPEC_VAR_CONST_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_ASSIGN_OBJ_SPEC_VAR_CONST_OP_DATA_VAR)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_VAR_CONST_OP_DATA_CV):
				VM_TRACE(ZEND_ASSIGN_OBJ_SPEC_VAR_CONST_OP_DATA_CV)
				ZEND_ASSIGN_OBJ_SPEC_VAR_CONST_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_ASSIGN_OBJ_SPEC_VAR_CONST_OP_DATA_CV)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_ASSIGN_DIM_SPEC_VAR_CONST_OP_DATA_CONST):
				VM_TRACE(ZEND_ASSIGN_DIM_SPEC_VAR_CONST_OP_DATA_CONST)
				ZEND_ASSIGN_DIM_SPEC_VAR_CONST_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_ASSIGN_DIM_SPEC_VAR_CONST_OP_DATA_CONST)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_ASSIGN_DIM_SPEC_VAR_CONST_OP_DATA_TMP):
				VM_TRACE(ZEND_ASSIGN_DIM_SPEC_VAR_CONST_OP_DATA_TMP)
				ZEND_ASSIGN_DIM_SPEC_VAR_CONST_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_ASSIGN_DIM_SPEC_VAR_CONST_OP_DATA_TMP)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_ASSIGN_DIM_SPEC_VAR_CONST_OP_DATA_VAR):
				VM_TRACE(ZEND_ASSIGN_DIM_SPEC_VAR_CONST_OP_DATA_VAR)
				ZEND_ASSIGN_DIM_SPEC_VAR_CONST_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_ASSIGN_DIM_SPEC_VAR_CONST_OP_DATA_VAR)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_ASSIGN_DIM_SPEC_VAR_CONST_OP_DATA_CV):
				VM_TRACE(ZEND_ASSIGN_DIM_SPEC_VAR_CONST_OP_DATA_CV)
				ZEND_ASSIGN_DIM_SPEC_VAR_CONST_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_ASSIGN_DIM_SPEC_VAR_CONST_OP_DATA_CV)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_ASSIGN_SPEC_VAR_CONST_RETVAL_UNUSED):
				VM_TRACE(ZEND_ASSIGN_SPEC_VAR_CONST_RETVAL_UNUSED)
				ZEND_ASSIGN_SPEC_VAR_CONST_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_ASSIGN_SPEC_VAR_CONST_RETVAL_UNUSED)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_ASSIGN_SPEC_VAR_CONST_RETVAL_USED):
				VM_TRACE(ZEND_ASSIGN_SPEC_VAR_CONST_RETVAL_USED)
				ZEND_ASSIGN_SPEC_VAR_CONST_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_ASSIGN_SPEC_VAR_CONST_RETVAL_USED)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_ASSIGN_OBJ_REF_SPEC_VAR_CONST_OP_DATA_VAR):
				VM_TRACE(ZEND_ASSIGN_OBJ_REF_SPEC_VAR_CONST_OP_DATA_VAR)
				ZEND_ASSIGN_OBJ_REF_SPEC_VAR_CONST_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_ASSIGN_OBJ_REF_SPEC_VAR_CONST_OP_DATA_VAR)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_ASSIGN_OBJ_REF_SPEC_VAR_CONST_OP_DATA_CV):
				VM_TRACE(ZEND_ASSIGN_OBJ_REF_SPEC_VAR_CONST_OP_DATA_CV)
				ZEND_ASSIGN_OBJ_REF_SPEC_VAR_CONST_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_ASSIGN_OBJ_REF_SPEC_VAR_CONST_OP_DATA_CV)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_INIT_STATIC_METHOD_CALL_SPEC_VAR_CONST):
				VM_TRACE(ZEND_INIT_STATIC_METHOD_CALL_SPEC_VAR_CONST)
				ZEND_INIT_STATIC_METHOD_CALL_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_INIT_STATIC_METHOD_CALL_SPEC_VAR_CONST)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_SEND_VAR_SPEC_VAR_CONST):
				VM_TRACE(ZEND_SEND_VAR_SPEC_VAR_CONST)
				ZEND_SEND_VAR_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_SEND_VAR_SPEC_VAR_CONST)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_SEND_VAR_NO_REF_SPEC_VAR_CONST):
				VM_TRACE(ZEND_SEND_VAR_NO_REF_SPEC_VAR_CONST)
				ZEND_SEND_VAR_NO_REF_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_SEND_VAR_NO_REF_SPEC_VAR_CONST)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_SEND_VAR_NO_REF_EX_SPEC_VAR_CONST):
				VM_TRACE(ZEND_SEND_VAR_NO_REF_EX_SPEC_VAR_CONST)
				ZEND_SEND_VAR_NO_REF_EX_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_SEND_VAR_NO_REF_EX_SPEC_VAR_CONST)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_SEND_REF_SPEC_VAR_CONST):
				VM_TRACE(ZEND_SEND_REF_SPEC_VAR_CONST)
				ZEND_SEND_REF_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_SEND_REF_SPEC_VAR_CONST)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_SEND_VAR_EX_SPEC_VAR_CONST):
				VM_TRACE(ZEND_SEND_VAR_EX_SPEC_VAR_CONST)
				ZEND_SEND_VAR_EX_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_SEND_VAR_EX_SPEC_VAR_CONST)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_SEND_FUNC_ARG_SPEC_VAR_CONST):
				VM_TRACE(ZEND_SEND_FUNC_ARG_SPEC_VAR_CONST)
				ZEND_SEND_FUNC_ARG_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_SEND_FUNC_ARG_SPEC_VAR_CONST)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_FETCH_CLASS_CONSTANT_SPEC_VAR_CONST):
				VM_TRACE(ZEND_FETCH_CLASS_CONSTANT_SPEC_VAR_CONST)
				ZEND_FETCH_CLASS_CONSTANT_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_FETCH_CLASS_CONSTANT_SPEC_VAR_CONST)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_CONST):
				VM_TRACE(ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_CONST)
				ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_CONST)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_INIT_ARRAY_SPEC_VAR_CONST):
				VM_TRACE(ZEND_INIT_ARRAY_SPEC_VAR_CONST)
				ZEND_INIT_ARRAY_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_INIT_ARRAY_SPEC_VAR_CONST)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_UNSET_DIM_SPEC_VAR_CONST):
				VM_TRACE(ZEND_UNSET_DIM_SPEC_VAR_CONST)
				ZEND_UNSET_DIM_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_UNSET_DIM_SPEC_VAR_CONST)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_UNSET_OBJ_SPEC_VAR_CONST):
				VM_TRACE(ZEND_UNSET_OBJ_SPEC_VAR_CONST)
				ZEND_UNSET_OBJ_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_UNSET_OBJ_SPEC_VAR_CONST)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_YIELD_SPEC_VAR_CONST):
				VM_TRACE(ZEND_YIELD_SPEC_VAR_CONST)
				ZEND_YIELD_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_YIELD_SPEC_VAR_CONST)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_IN_ARRAY_SPEC_VAR_CONST):
				VM_TRACE(ZEND_IN_ARRAY_SPEC_VAR_CONST)
				ZEND_IN_ARRAY_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_IN_ARRAY_SPEC_VAR_CONST)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_FETCH_CLASS_CONSTANT_SPEC_VAR_TMPVARCV):
				VM_TRACE(ZEND_FETCH_CLASS_CONSTANT_SPEC_VAR_TMPVARCV)
				ZEND_FETCH_CLASS_CONSTANT_SPEC_VAR_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_FETCH_CLASS_CONSTANT_SPEC_VAR_TMPVARCV)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_ASSIGN_OBJ_OP_SPEC_VAR_TMPVAR):
				VM_TRACE(ZEND_ASSIGN_OBJ_OP_SPEC_VAR_TMPVAR)
				ZEND_ASSIGN_OBJ_OP_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_ASSIGN_OBJ_OP_SPEC_VAR_TMPVAR)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_ASSIGN_DIM_OP_SPEC_VAR_TMPVAR):
				VM_TRACE(ZEND_ASSIGN_DIM_OP_SPEC_VAR_TMPVAR)
				ZEND_ASSIGN_DIM_OP_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_ASSIGN_DIM_OP_SPEC_VAR_TMPVAR)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_ASSIGN_OP_SPEC_VAR_TMPVAR):
				VM_TRACE(ZEND_ASSIGN_OP_SPEC_VAR_TMPVAR)
				ZEND_ASSIGN_OP_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_ASSIGN_OP_SPEC_VAR_TMPVAR)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_PRE_INC_OBJ_SPEC_VAR_TMPVAR):
				VM_TRACE(ZEND_PRE_INC_OBJ_SPEC_VAR_TMPVAR)
				ZEND_PRE_INC_OBJ_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_PRE_INC_OBJ_SPEC_VAR_TMPVAR)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_POST_INC_OBJ_SPEC_VAR_TMPVAR):
				VM_TRACE(ZEND_POST_INC_OBJ_SPEC_VAR_TMPVAR)
				ZEND_POST_INC_OBJ_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_POST_INC_OBJ_SPEC_VAR_TMPVAR)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_FETCH_DIM_W_SPEC_VAR_TMPVAR):
				VM_TRACE(ZEND_FETCH_DIM_W_SPEC_VAR_TMPVAR)
				ZEND_FETCH_DIM_W_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_FETCH_DIM_W_SPEC_VAR_TMPVAR)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_FETCH_DIM_RW_SPEC_VAR_TMPVAR):
				VM_TRACE(ZEND_FETCH_DIM_RW_SPEC_VAR_TMPVAR)
				ZEND_FETCH_DIM_RW_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_FETCH_DIM_RW_SPEC_VAR_TMPVAR)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_TMPVAR):
				VM_TRACE(ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_TMPVAR)
				ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_TMPVAR)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_FETCH_DIM_UNSET_SPEC_VAR_TMPVAR):
				VM_TRACE(ZEND_FETCH_DIM_UNSET_SPEC_VAR_TMPVAR)
				ZEND_FETCH_DIM_UNSET_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_FETCH_DIM_UNSET_SPEC_VAR_TMPVAR)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_FETCH_OBJ_W_SPEC_VAR_TMPVAR):
				VM_TRACE(ZEND_FETCH_OBJ_W_SPEC_VAR_TMPVAR)
				ZEND_FETCH_OBJ_W_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_FETCH_OBJ_W_SPEC_VAR_TMPVAR)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_FETCH_OBJ_RW_SPEC_VAR_TMPVAR):
				VM_TRACE(ZEND_FETCH_OBJ_RW_SPEC_VAR_TMPVAR)
				ZEND_FETCH_OBJ_RW_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_FETCH_OBJ_RW_SPEC_VAR_TMPVAR)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_FETCH_OBJ_FUNC_ARG_SPEC_VAR_TMPVAR):
				VM_TRACE(ZEND_FETCH_OBJ_FUNC_ARG_SPEC_VAR_TMPVAR)
				ZEND_FETCH_OBJ_FUNC_ARG_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_FETCH_OBJ_FUNC_ARG_SPEC_VAR_TMPVAR)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_FETCH_OBJ_UNSET_SPEC_VAR_TMPVAR):
				VM_TRACE(ZEND_FETCH_OBJ_UNSET_SPEC_VAR_TMPVAR)
				ZEND_FETCH_OBJ_UNSET_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_FETCH_OBJ_UNSET_SPEC_VAR_TMPVAR)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_FETCH_LIST_W_SPEC_VAR_TMPVAR):
				VM_TRACE(ZEND_FETCH_LIST_W_SPEC_VAR_TMPVAR)
				ZEND_FETCH_LIST_W_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_FETCH_LIST_W_SPEC_VAR_TMPVAR)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_CONST):
				VM_TRACE(ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_CONST)
				ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_CONST)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_TMP):
				VM_TRACE(ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_TMP)
				ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_TMP)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_VAR):
				VM_TRACE(ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_VAR)
				ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_VAR)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_CV):
				VM_TRACE(ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_CV)
				ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_CV)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_DATA_CONST):
				VM_TRACE(ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_DATA_CONST)
				ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_DATA_CONST)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_DATA_TMP):
				VM_TRACE(ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_DATA_TMP)
				ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_DATA_TMP)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_DATA_VAR):
				VM_TRACE(ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_DATA_VAR)
				ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_DATA_VAR)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_DATA_CV):
				VM_TRACE(ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_DATA_CV)
				ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_DATA_CV)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_ASSIGN_OBJ_REF_SPEC_VAR_TMPVAR_OP_DATA_VAR):
				VM_TRACE(ZEND_ASSIGN_OBJ_REF_SPEC_VAR_TMPVAR_OP_DATA_VAR)
				ZEND_ASSIGN_OBJ_REF_SPEC_VAR_TMPVAR_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_ASSIGN_OBJ_REF_SPEC_VAR_TMPVAR_OP_DATA_VAR)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_ASSIGN_OBJ_REF_SPEC_VAR_TMPVAR_OP_DATA_CV):
				VM_TRACE(ZEND_ASSIGN_OBJ_REF_SPEC_VAR_TMPVAR_OP_DATA_CV)
				ZEND_ASSIGN_OBJ_REF_SPEC_VAR_TMPVAR_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_ASSIGN_OBJ_REF_SPEC_VAR_TMPVAR_OP_DATA_CV)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_INIT_STATIC_METHOD_CALL_SPEC_VAR_TMPVAR):
				VM_TRACE(ZEND_INIT_STATIC_METHOD_CALL_SPEC_VAR_TMPVAR)
				ZEND_INIT_STATIC_METHOD_CALL_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_INIT_STATIC_METHOD_CALL_SPEC_VAR_TMPVAR)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_TMPVAR):
				VM_TRACE(ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_TMPVAR)
				ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_TMPVAR)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_INIT_ARRAY_SPEC_VAR_TMPVAR):
				VM_TRACE(ZEND_INIT_ARRAY_SPEC_VAR_TMPVAR)
				ZEND_INIT_ARRAY_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_INIT_ARRAY_SPEC_VAR_TMPVAR)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_UNSET_DIM_SPEC_VAR_TMPVAR):
				VM_TRACE(ZEND_UNSET_DIM_SPEC_VAR_TMPVAR)
				ZEND_UNSET_DIM_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_UNSET_DIM_SPEC_VAR_TMPVAR)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_UNSET_OBJ_SPEC_VAR_TMPVAR):
				VM_TRACE(ZEND_UNSET_OBJ_SPEC_VAR_TMPVAR)
				ZEND_UNSET_OBJ_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_UNSET_OBJ_SPEC_VAR_TMPVAR)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_YIELD_SPEC_VAR_TMPVAR):
				VM_TRACE(ZEND_YIELD_SPEC_VAR_TMPVAR)
				ZEND_YIELD_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_YIELD_SPEC_VAR_TMPVAR)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_IS_IDENTICAL_SPEC_VAR_TMP):
				VM_TRACE(ZEND_IS_IDENTICAL_SPEC_VAR_TMP)
				ZEND_IS_IDENTICAL_SPEC_VAR_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_IS_IDENTICAL_SPEC_VAR_TMP)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_CASE_STRICT_SPEC_VAR_TMP):
				VM_TRACE(ZEND_CASE_STRICT_SPEC_VAR_TMP)
				ZEND_CASE_STRICT_SPEC_VAR_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_CASE_STRICT_SPEC_VAR_TMP)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_IS_NOT_IDENTICAL_SPEC_VAR_TMP):
				VM_TRACE(ZEND_IS_NOT_IDENTICAL_SPEC_VAR_TMP)
				ZEND_IS_NOT_IDENTICAL_SPEC_VAR_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_IS_NOT_IDENTICAL_SPEC_VAR_TMP)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_ASSIGN_SPEC_VAR_TMP_RETVAL_UNUSED):
				VM_TRACE(ZEND_ASSIGN_SPEC_VAR_TMP_RETVAL_UNUSED)
				ZEND_ASSIGN_SPEC_VAR_TMP_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_ASSIGN_SPEC_VAR_TMP_RETVAL_UNUSED)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_ASSIGN_SPEC_VAR_TMP_RETVAL_USED):
				VM_TRACE(ZEND_ASSIGN_SPEC_VAR_TMP_RETVAL_USED)
				ZEND_ASSIGN_SPEC_VAR_TMP_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_ASSIGN_SPEC_VAR_TMP_RETVAL_USED)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_IS_IDENTICAL_SPEC_VAR_VAR):
				VM_TRACE(ZEND_IS_IDENTICAL_SPEC_VAR_VAR)
				ZEND_IS_IDENTICAL_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_IS_IDENTICAL_SPEC_VAR_VAR)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_CASE_STRICT_SPEC_VAR_VAR):
				VM_TRACE(ZEND_CASE_STRICT_SPEC_VAR_VAR)
				ZEND_CASE_STRICT_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_CASE_STRICT_SPEC_VAR_VAR)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_IS_NOT_IDENTICAL_SPEC_VAR_VAR):
				VM_TRACE(ZEND_IS_NOT_IDENTICAL_SPEC_VAR_VAR)
				ZEND_IS_NOT_IDENTICAL_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_IS_NOT_IDENTICAL_SPEC_VAR_VAR)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_ASSIGN_SPEC_VAR_VAR_RETVAL_UNUSED):
				VM_TRACE(ZEND_ASSIGN_SPEC_VAR_VAR_RETVAL_UNUSED)
				ZEND_ASSIGN_SPEC_VAR_VAR_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_ASSIGN_SPEC_VAR_VAR_RETVAL_UNUSED)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_ASSIGN_SPEC_VAR_VAR_RETVAL_USED):
				VM_TRACE(ZEND_ASSIGN_SPEC_VAR_VAR_RETVAL_USED)
				ZEND_ASSIGN_SPEC_VAR_VAR_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_ASSIGN_SPEC_VAR_VAR_RETVAL_USED)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_ASSIGN_REF_SPEC_VAR_VAR):
				VM_TRACE(ZEND_ASSIGN_REF_SPEC_VAR_VAR)
				ZEND_ASSIGN_REF_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_ASSIGN_REF_SPEC_VAR_VAR)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_ASSIGN_DIM_OP_SPEC_VAR_UNUSED):
				VM_TRACE(ZEND_ASSIGN_DIM_OP_SPEC_VAR_UNUSED)
				ZEND_ASSIGN_DIM_OP_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_ASSIGN_DIM_OP_SPEC_VAR_UNUSED)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_FETCH_DIM_W_SPEC_VAR_UNUSED):
				VM_TRACE(ZEND_FETCH_DIM_W_SPEC_VAR_UNUSED)
				ZEND_FETCH_DIM_W_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_FETCH_DIM_W_SPEC_VAR_UNUSED)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_FETCH_DIM_RW_SPEC_VAR_UNUSED):
				VM_TRACE(ZEND_FETCH_DIM_RW_SPEC_VAR_UNUSED)
				ZEND_FETCH_DIM_RW_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_FETCH_DIM_RW_SPEC_VAR_UNUSED)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_UNUSED):
				VM_TRACE(ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_UNUSED)
				ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_UNUSED)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_ASSIGN_DIM_SPEC_VAR_UNUSED_OP_DATA_CONST):
				VM_TRACE(ZEND_ASSIGN_DIM_SPEC_VAR_UNUSED_OP_DATA_CONST)
				ZEND_ASSIGN_DIM_SPEC_VAR_UNUSED_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_ASSIGN_DIM_SPEC_VAR_UNUSED_OP_DATA_CONST)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_ASSIGN_DIM_SPEC_VAR_UNUSED_OP_DATA_TMP):
				VM_TRACE(ZEND_ASSIGN_DIM_SPEC_VAR_UNUSED_OP_DATA_TMP)
				ZEND_ASSIGN_DIM_SPEC_VAR_UNUSED_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_ASSIGN_DIM_SPEC_VAR_UNUSED_OP_DATA_TMP)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_ASSIGN_DIM_SPEC_VAR_UNUSED_OP_DATA_VAR):
				VM_TRACE(ZEND_ASSIGN_DIM_SPEC_VAR_UNUSED_OP_DATA_VAR)
				ZEND_ASSIGN_DIM_SPEC_VAR_UNUSED_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_ASSIGN_DIM_SPEC_VAR_UNUSED_OP_DATA_VAR)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_ASSIGN_DIM_SPEC_VAR_UNUSED_OP_DATA_CV):
				VM_TRACE(ZEND_ASSIGN_DIM_SPEC_VAR_UNUSED_OP_DATA_CV)
				ZEND_ASSIGN_DIM_SPEC_VAR_UNUSED_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_ASSIGN_DIM_SPEC_VAR_UNUSED_OP_DATA_CV)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_INIT_STATIC_METHOD_CALL_SPEC_VAR_UNUSED):
				VM_TRACE(ZEND_INIT_STATIC_METHOD_CALL_SPEC_VAR_UNUSED)
				ZEND_INIT_STATIC_METHOD_CALL_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_INIT_STATIC_METHOD_CALL_SPEC_VAR_UNUSED)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_VERIFY_RETURN_TYPE_SPEC_VAR_UNUSED):
				VM_TRACE(ZEND_VERIFY_RETURN_TYPE_SPEC_VAR_UNUSED)
				ZEND_VERIFY_RETURN_TYPE_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_VERIFY_RETURN_TYPE_SPEC_VAR_UNUSED)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_SEND_VAR_SPEC_VAR_UNUSED):
				VM_TRACE(ZEND_SEND_VAR_SPEC_VAR_UNUSED)
				ZEND_SEND_VAR_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_SEND_VAR_SPEC_VAR_UNUSED)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_SEND_VAR_NO_REF_SPEC_VAR_UNUSED):
				VM_TRACE(ZEND_SEND_VAR_NO_REF_SPEC_VAR_UNUSED)
				ZEND_SEND_VAR_NO_REF_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_SEND_VAR_NO_REF_SPEC_VAR_UNUSED)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_SEND_VAR_NO_REF_EX_SPEC_VAR_UNUSED):
				VM_TRACE(ZEND_SEND_VAR_NO_REF_EX_SPEC_VAR_UNUSED)
				ZEND_SEND_VAR_NO_REF_EX_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_SEND_VAR_NO_REF_EX_SPEC_VAR_UNUSED)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_SEND_VAR_NO_REF_EX_SPEC_VAR_UNUSED_QUICK):
				VM_TRACE(ZEND_SEND_VAR_NO_REF_EX_SPEC_VAR_UNUSED_QUICK)
				ZEND_SEND_VAR_NO_REF_EX_SPEC_VAR_UNUSED_QUICK_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_SEND_VAR_NO_REF_EX_SPEC_VAR_UNUSED_QUICK)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_SEND_REF_SPEC_VAR_UNUSED):
				VM_TRACE(ZEND_SEND_REF_SPEC_VAR_UNUSED)
				ZEND_SEND_REF_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_SEND_REF_SPEC_VAR_UNUSED)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_SEND_VAR_EX_SPEC_VAR_UNUSED):
				VM_TRACE(ZEND_SEND_VAR_EX_SPEC_VAR_UNUSED)
				ZEND_SEND_VAR_EX_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_SEND_VAR_EX_SPEC_VAR_UNUSED)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_SEND_VAR_EX_SPEC_VAR_UNUSED_QUICK):
				VM_TRACE(ZEND_SEND_VAR_EX_SPEC_VAR_UNUSED_QUICK)
				ZEND_SEND_VAR_EX_SPEC_VAR_UNUSED_QUICK_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_SEND_VAR_EX_SPEC_VAR_UNUSED_QUICK)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_SEND_FUNC_ARG_SPEC_VAR_UNUSED):
				VM_TRACE(ZEND_SEND_FUNC_ARG_SPEC_VAR_UNUSED)
				ZEND_SEND_FUNC_ARG_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_SEND_FUNC_ARG_SPEC_VAR_UNUSED)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_NEW_SPEC_VAR_UNUSED):
				VM_TRACE(ZEND_NEW_SPEC_VAR_UNUSED)
				ZEND_NEW_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_NEW_SPEC_VAR_UNUSED)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_UNUSED):
				VM_TRACE(ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_UNUSED)
				ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_UNUSED)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_INIT_ARRAY_SPEC_VAR_UNUSED):
				VM_TRACE(ZEND_INIT_ARRAY_SPEC_VAR_UNUSED)
				ZEND_INIT_ARRAY_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_INIT_ARRAY_SPEC_VAR_UNUSED)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_SEPARATE_SPEC_VAR_UNUSED):
				VM_TRACE(ZEND_SEPARATE_SPEC_VAR_UNUSED)
				ZEND_SEPARATE_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_SEPARATE_SPEC_VAR_UNUSED)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_YIELD_SPEC_VAR_UNUSED):
				VM_TRACE(ZEND_YIELD_SPEC_VAR_UNUSED)
				ZEND_YIELD_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_YIELD_SPEC_VAR_UNUSED)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_MAKE_REF_SPEC_VAR_UNUSED):
				VM_TRACE(ZEND_MAKE_REF_SPEC_VAR_UNUSED)
				ZEND_MAKE_REF_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_MAKE_REF_SPEC_VAR_UNUSED)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_GET_TYPE_SPEC_VAR_UNUSED):
				VM_TRACE(ZEND_GET_TYPE_SPEC_VAR_UNUSED)
				ZEND_GET_TYPE_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_GET_TYPE_SPEC_VAR_UNUSED)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_SEND_VAR_EX_SIMPLE_SPEC_VAR_UNUSED):
				VM_TRACE(ZEND_SEND_VAR_EX_SIMPLE_SPEC_VAR_UNUSED)
				ZEND_SEND_VAR_EX_SIMPLE_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_SEND_VAR_EX_SIMPLE_SPEC_VAR_UNUSED)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_CASE_STRICT_SPEC_VAR_CV):
				VM_TRACE(ZEND_CASE_STRICT_SPEC_VAR_CV)
				ZEND_CASE_STRICT_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_CASE_STRICT_SPEC_VAR_CV)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_ASSIGN_OBJ_OP_SPEC_VAR_CV):
				VM_TRACE(ZEND_ASSIGN_OBJ_OP_SPEC_VAR_CV)
				ZEND_ASSIGN_OBJ_OP_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_ASSIGN_OBJ_OP_SPEC_VAR_CV)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_ASSIGN_DIM_OP_SPEC_VAR_CV):
				VM_TRACE(ZEND_ASSIGN_DIM_OP_SPEC_VAR_CV)
				ZEND_ASSIGN_DIM_OP_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_ASSIGN_DIM_OP_SPEC_VAR_CV)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_ASSIGN_OP_SPEC_VAR_CV):
				VM_TRACE(ZEND_ASSIGN_OP_SPEC_VAR_CV)
				ZEND_ASSIGN_OP_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_ASSIGN_OP_SPEC_VAR_CV)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_PRE_INC_OBJ_SPEC_VAR_CV):
				VM_TRACE(ZEND_PRE_INC_OBJ_SPEC_VAR_CV)
				ZEND_PRE_INC_OBJ_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_PRE_INC_OBJ_SPEC_VAR_CV)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_POST_INC_OBJ_SPEC_VAR_CV):
				VM_TRACE(ZEND_POST_INC_OBJ_SPEC_VAR_CV)
				ZEND_POST_INC_OBJ_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_POST_INC_OBJ_SPEC_VAR_CV)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_FETCH_DIM_W_SPEC_VAR_CV):
				VM_TRACE(ZEND_FETCH_DIM_W_SPEC_VAR_CV)
				ZEND_FETCH_DIM_W_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_FETCH_DIM_W_SPEC_VAR_CV)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_FETCH_DIM_RW_SPEC_VAR_CV):
				VM_TRACE(ZEND_FETCH_DIM_RW_SPEC_VAR_CV)
				ZEND_FETCH_DIM_RW_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_FETCH_DIM_RW_SPEC_VAR_CV)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_CV):
				VM_TRACE(ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_CV)
				ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_CV)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_FETCH_DIM_UNSET_SPEC_VAR_CV):
				VM_TRACE(ZEND_FETCH_DIM_UNSET_SPEC_VAR_CV)
				ZEND_FETCH_DIM_UNSET_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_FETCH_DIM_UNSET_SPEC_VAR_CV)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_FETCH_OBJ_W_SPEC_VAR_CV):
				VM_TRACE(ZEND_FETCH_OBJ_W_SPEC_VAR_CV)
				ZEND_FETCH_OBJ_W_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_FETCH_OBJ_W_SPEC_VAR_CV)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_FETCH_OBJ_RW_SPEC_VAR_CV):
				VM_TRACE(ZEND_FETCH_OBJ_RW_SPEC_VAR_CV)
				ZEND_FETCH_OBJ_RW_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_FETCH_OBJ_RW_SPEC_VAR_CV)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_FETCH_OBJ_FUNC_ARG_SPEC_VAR_CV):
				VM_TRACE(ZEND_FETCH_OBJ_FUNC_ARG_SPEC_VAR_CV)
				ZEND_FETCH_OBJ_FUNC_ARG_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_FETCH_OBJ_FUNC_ARG_SPEC_VAR_CV)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_FETCH_OBJ_UNSET_SPEC_VAR_CV):
				VM_TRACE(ZEND_FETCH_OBJ_UNSET_SPEC_VAR_CV)
				ZEND_FETCH_OBJ_UNSET_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_FETCH_OBJ_UNSET_SPEC_VAR_CV)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_FETCH_LIST_W_SPEC_VAR_CV):
				VM_TRACE(ZEND_FETCH_LIST_W_SPEC_VAR_CV)
				ZEND_FETCH_LIST_W_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_FETCH_LIST_W_SPEC_VAR_CV)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_VAR_CV_OP_DATA_CONST):
				VM_TRACE(ZEND_ASSIGN_OBJ_SPEC_VAR_CV_OP_DATA_CONST)
				ZEND_ASSIGN_OBJ_SPEC_VAR_CV_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_ASSIGN_OBJ_SPEC_VAR_CV_OP_DATA_CONST)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_VAR_CV_OP_DATA_TMP):
				VM_TRACE(ZEND_ASSIGN_OBJ_SPEC_VAR_CV_OP_DATA_TMP)
				ZEND_ASSIGN_OBJ_SPEC_VAR_CV_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_ASSIGN_OBJ_SPEC_VAR_CV_OP_DATA_TMP)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_VAR_CV_OP_DATA_VAR):
				VM_TRACE(ZEND_ASSIGN_OBJ_SPEC_VAR_CV_OP_DATA_VAR)
				ZEND_ASSIGN_OBJ_SPEC_VAR_CV_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_ASSIGN_OBJ_SPEC_VAR_CV_OP_DATA_VAR)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_VAR_CV_OP_DATA_CV):
				VM_TRACE(ZEND_ASSIGN_OBJ_SPEC_VAR_CV_OP_DATA_CV)
				ZEND_ASSIGN_OBJ_SPEC_VAR_CV_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_ASSIGN_OBJ_SPEC_VAR_CV_OP_DATA_CV)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_ASSIGN_DIM_SPEC_VAR_CV_OP_DATA_CONST):
				VM_TRACE(ZEND_ASSIGN_DIM_SPEC_VAR_CV_OP_DATA_CONST)
				ZEND_ASSIGN_DIM_SPEC_VAR_CV_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_ASSIGN_DIM_SPEC_VAR_CV_OP_DATA_CONST)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_ASSIGN_DIM_SPEC_VAR_CV_OP_DATA_TMP):
				VM_TRACE(ZEND_ASSIGN_DIM_SPEC_VAR_CV_OP_DATA_TMP)
				ZEND_ASSIGN_DIM_SPEC_VAR_CV_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_ASSIGN_DIM_SPEC_VAR_CV_OP_DATA_TMP)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_ASSIGN_DIM_SPEC_VAR_CV_OP_DATA_VAR):
				VM_TRACE(ZEND_ASSIGN_DIM_SPEC_VAR_CV_OP_DATA_VAR)
				ZEND_ASSIGN_DIM_SPEC_VAR_CV_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_ASSIGN_DIM_SPEC_VAR_CV_OP_DATA_VAR)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_ASSIGN_DIM_SPEC_VAR_CV_OP_DATA_CV):
				VM_TRACE(ZEND_ASSIGN_DIM_SPEC_VAR_CV_OP_DATA_CV)
				ZEND_ASSIGN_DIM_SPEC_VAR_CV_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_ASSIGN_DIM_SPEC_VAR_CV_OP_DATA_CV)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_ASSIGN_SPEC_VAR_CV_RETVAL_UNUSED):
				VM_TRACE(ZEND_ASSIGN_SPEC_VAR_CV_RETVAL_UNUSED)
				ZEND_ASSIGN_SPEC_VAR_CV_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_ASSIGN_SPEC_VAR_CV_RETVAL_UNUSED)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_ASSIGN_SPEC_VAR_CV_RETVAL_USED):
				VM_TRACE(ZEND_ASSIGN_SPEC_VAR_CV_RETVAL_USED)
				ZEND_ASSIGN_SPEC_VAR_CV_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_ASSIGN_SPEC_VAR_CV_RETVAL_USED)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_ASSIGN_REF_SPEC_VAR_CV):
				VM_TRACE(ZEND_ASSIGN_REF_SPEC_VAR_CV)
				ZEND_ASSIGN_REF_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_ASSIGN_REF_SPEC_VAR_CV)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_ASSIGN_OBJ_REF_SPEC_VAR_CV_OP_DATA_VAR):
				VM_TRACE(ZEND_ASSIGN_OBJ_REF_SPEC_VAR_CV_OP_DATA_VAR)
				ZEND_ASSIGN_OBJ_REF_SPEC_VAR_CV_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_ASSIGN_OBJ_REF_SPEC_VAR_CV_OP_DATA_VAR)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_ASSIGN_OBJ_REF_SPEC_VAR_CV_OP_DATA_CV):
				VM_TRACE(ZEND_ASSIGN_OBJ_REF_SPEC_VAR_CV_OP_DATA_CV)
				ZEND_ASSIGN_OBJ_REF_SPEC_VAR_CV_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_ASSIGN_OBJ_REF_SPEC_VAR_CV_OP_DATA_CV)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_INIT_STATIC_METHOD_CALL_SPEC_VAR_CV):
				VM_TRACE(ZEND_INIT_STATIC_METHOD_CALL_SPEC_VAR_CV)
				ZEND_INIT_STATIC_METHOD_CALL_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_INIT_STATIC_METHOD_CALL_SPEC_VAR_CV)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_CV):
				VM_TRACE(ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_CV)
				ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_CV)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_INIT_ARRAY_SPEC_VAR_CV):
				VM_TRACE(ZEND_INIT_ARRAY_SPEC_VAR_CV)
				ZEND_INIT_ARRAY_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_INIT_ARRAY_SPEC_VAR_CV)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_UNSET_DIM_SPEC_VAR_CV):
				VM_TRACE(ZEND_UNSET_DIM_SPEC_VAR_CV)
				ZEND_UNSET_DIM_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_UNSET_DIM_SPEC_VAR_CV)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_UNSET_OBJ_SPEC_VAR_CV):
				VM_TRACE(ZEND_UNSET_OBJ_SPEC_VAR_CV)
				ZEND_UNSET_OBJ_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_UNSET_OBJ_SPEC_VAR_CV)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_YIELD_SPEC_VAR_CV):
				VM_TRACE(ZEND_YIELD_SPEC_VAR_CV)
				ZEND_YIELD_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_YIELD_SPEC_VAR_CV)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_FE_FETCH_R_SIMPLE_SPEC_VAR_CV_RETVAL_UNUSED):
				VM_TRACE(ZEND_FE_FETCH_R_SIMPLE_SPEC_VAR_CV_RETVAL_UNUSED)
				ZEND_FE_FETCH_R_SIMPLE_SPEC_VAR_CV_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_FE_FETCH_R_SIMPLE_SPEC_VAR_CV_RETVAL_UNUSED)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_FE_FETCH_R_SIMPLE_SPEC_VAR_CV_RETVAL_USED):
				VM_TRACE(ZEND_FE_FETCH_R_SIMPLE_SPEC_VAR_CV_RETVAL_USED)
				ZEND_FE_FETCH_R_SIMPLE_SPEC_VAR_CV_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_FE_FETCH_R_SIMPLE_SPEC_VAR_CV_RETVAL_USED)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_CLONE_SPEC_UNUSED):
				VM_TRACE(ZEND_CLONE_SPEC_UNUSED)
				ZEND_CLONE_SPEC_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_CLONE_SPEC_UNUSED)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_FETCH_CLASS_NAME_SPEC_UNUSED):
				VM_TRACE(ZEND_FETCH_CLASS_NAME_SPEC_UNUSED)
				ZEND_FETCH_CLASS_NAME_SPEC_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_FETCH_CLASS_NAME_SPEC_UNUSED)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_ASSIGN_OBJ_OP_SPEC_UNUSED_CONST):
				VM_TRACE(ZEND_ASSIGN_OBJ_OP_SPEC_UNUSED_CONST)
				ZEND_ASSIGN_OBJ_OP_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_ASSIGN_OBJ_OP_SPEC_UNUSED_CONST)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_PRE_INC_OBJ_SPEC_UNUSED_CONST):
				VM_TRACE(ZEND_PRE_INC_OBJ_SPEC_UNUSED_CONST)
				ZEND_PRE_INC_OBJ_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_PRE_INC_OBJ_SPEC_UNUSED_CONST)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_POST_INC_OBJ_SPEC_UNUSED_CONST):
				VM_TRACE(ZEND_POST_INC_OBJ_SPEC_UNUSED_CONST)
				ZEND_POST_INC_OBJ_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_POST_INC_OBJ_SPEC_UNUSED_CONST)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_FETCH_OBJ_R_SPEC_UNUSED_CONST):
				VM_TRACE(ZEND_FETCH_OBJ_R_SPEC_UNUSED_CONST)
				ZEND_FETCH_OBJ_R_SPEC_UNUSED_CONST_INLINE_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_FETCH_OBJ_R_SPEC_UNUSED_CONST)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_FETCH_OBJ_W_SPEC_UNUSED_CONST):
				VM_TRACE(ZEND_FETCH_OBJ_W_SPEC_UNUSED_CONST)
				ZEND_FETCH_OBJ_W_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_FETCH_OBJ_W_SPEC_UNUSED_CONST)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_FETCH_OBJ_RW_SPEC_UNUSED_CONST):
				VM_TRACE(ZEND_FETCH_OBJ_RW_SPEC_UNUSED_CONST)
				ZEND_FETCH_OBJ_RW_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_FETCH_OBJ_RW_SPEC_UNUSED_CONST)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_FETCH_OBJ_IS_SPEC_UNUSED_CONST):
				VM_TRACE(ZEND_FETCH_OBJ_IS_SPEC_UNUSED_CONST)
				ZEND_FETCH_OBJ_IS_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_FETCH_OBJ_IS_SPEC_UNUSED_CONST)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_FETCH_OBJ_FUNC_ARG_SPEC_UNUSED_CONST):
				VM_TRACE(ZEND_FETCH_OBJ_FUNC_ARG_SPEC_UNUSED_CONST)
				ZEND_FETCH_OBJ_FUNC_ARG_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_FETCH_OBJ_FUNC_ARG_SPEC_UNUSED_CONST)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_FETCH_OBJ_UNSET_SPEC_UNUSED_CONST):
				VM_TRACE(ZEND_FETCH_OBJ_UNSET_SPEC_UNUSED_CONST)
				ZEND_FETCH_OBJ_UNSET_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_FETCH_OBJ_UNSET_SPEC_UNUSED_CONST)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_UNUSED_CONST_OP_DATA_CONST):
				VM_TRACE(ZEND_ASSIGN_OBJ_SPEC_UNUSED_CONST_OP_DATA_CONST)
				ZEND_ASSIGN_OBJ_SPEC_UNUSED_CONST_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_ASSIGN_OBJ_SPEC_UNUSED_CONST_OP_DATA_CONST)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_UNUSED_CONST_OP_DATA_TMP):
				VM_TRACE(ZEND_ASSIGN_OBJ_SPEC_UNUSED_CONST_OP_DATA_TMP)
				ZEND_ASSIGN_OBJ_SPEC_UNUSED_CONST_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_ASSIGN_OBJ_SPEC_UNUSED_CONST_OP_DATA_TMP)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_UNUSED_CONST_OP_DATA_VAR):
				VM_TRACE(ZEND_ASSIGN_OBJ_SPEC_UNUSED_CONST_OP_DATA_VAR)
				ZEND_ASSIGN_OBJ_SPEC_UNUSED_CONST_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_ASSIGN_OBJ_SPEC_UNUSED_CONST_OP_DATA_VAR)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_UNUSED_CONST_OP_DATA_CV):
				VM_TRACE(ZEND_ASSIGN_OBJ_SPEC_UNUSED_CONST_OP_DATA_CV)
				ZEND_ASSIGN_OBJ_SPEC_UNUSED_CONST_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_ASSIGN_OBJ_SPEC_UNUSED_CONST_OP_DATA_CV)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_ASSIGN_OBJ_REF_SPEC_UNUSED_CONST_OP_DATA_VAR):
				VM_TRACE(ZEND_ASSIGN_OBJ_REF_SPEC_UNUSED_CONST_OP_DATA_VAR)
				ZEND_ASSIGN_OBJ_REF_SPEC_UNUSED_CONST_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_ASSIGN_OBJ_REF_SPEC_UNUSED_CONST_OP_DATA_VAR)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_ASSIGN_OBJ_REF_SPEC_UNUSED_CONST_OP_DATA_CV):
				VM_TRACE(ZEND_ASSIGN_OBJ_REF_SPEC_UNUSED_CONST_OP_DATA_CV)
				ZEND_ASSIGN_OBJ_REF_SPEC_UNUSED_CONST_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_ASSIGN_OBJ_REF_SPEC_UNUSED_CONST_OP_DATA_CV)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_ROPE_INIT_SPEC_UNUSED_CONST):
				VM_TRACE(ZEND_ROPE_INIT_SPEC_UNUSED_CONST)
				ZEND_ROPE_INIT_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_ROPE_INIT_SPEC_UNUSED_CONST)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_FETCH_CLASS_SPEC_UNUSED_CONST):
				VM_TRACE(ZEND_FETCH_CLASS_SPEC_UNUSED_CONST)
				ZEND_FETCH_CLASS_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_FETCH_CLASS_SPEC_UNUSED_CONST)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_INIT_METHOD_CALL_SPEC_UNUSED_CONST):
				VM_TRACE(ZEND_INIT_METHOD_CALL_SPEC_UNUSED_CONST)
				ZEND_INIT_METHOD_CALL_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_INIT_METHOD_CALL_SPEC_UNUSED_CONST)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_INIT_STATIC_METHOD_CALL_SPEC_UNUSED_CONST):
				VM_TRACE(ZEND_INIT_STATIC_METHOD_CALL_SPEC_UNUSED_CONST)
				ZEND_INIT_STATIC_METHOD_CALL_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_INIT_STATIC_METHOD_CALL_SPEC_UNUSED_CONST)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_CHECK_FUNC_ARG_SPEC_UNUSED_CONST):
				VM_TRACE(ZEND_CHECK_FUNC_ARG_SPEC_UNUSED_CONST)
				ZEND_CHECK_FUNC_ARG_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_CHECK_FUNC_ARG_SPEC_UNUSED_CONST)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_FETCH_CONSTANT_SPEC_UNUSED_CONST):
				VM_TRACE(ZEND_FETCH_CONSTANT_SPEC_UNUSED_CONST)
				ZEND_FETCH_CONSTANT_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_FETCH_CONSTANT_SPEC_UNUSED_CONST)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_FETCH_CLASS_CONSTANT_SPEC_UNUSED_CONST):
				VM_TRACE(ZEND_FETCH_CLASS_CONSTANT_SPEC_UNUSED_CONST)
				ZEND_FETCH_CLASS_CONSTANT_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_FETCH_CLASS_CONSTANT_SPEC_UNUSED_CONST)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_INIT_ARRAY_SPEC_UNUSED_CONST):
				VM_TRACE(ZEND_INIT_ARRAY_SPEC_UNUSED_CONST)
				ZEND_INIT_ARRAY_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_INIT_ARRAY_SPEC_UNUSED_CONST)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_UNSET_OBJ_SPEC_UNUSED_CONST):
				VM_TRACE(ZEND_UNSET_OBJ_SPEC_UNUSED_CONST)
				ZEND_UNSET_OBJ_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_UNSET_OBJ_SPEC_UNUSED_CONST)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_UNUSED_CONST):
				VM_TRACE(ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_UNUSED_CONST)
				ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_UNUSED_CONST)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_YIELD_SPEC_UNUSED_CONST):
				VM_TRACE(ZEND_YIELD_SPEC_UNUSED_CONST)
				ZEND_YIELD_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_YIELD_SPEC_UNUSED_CONST)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_FETCH_CLASS_CONSTANT_SPEC_UNUSED_TMPVARCV):
				VM_TRACE(ZEND_FETCH_CLASS_CONSTANT_SPEC_UNUSED_TMPVARCV)
				ZEND_FETCH_CLASS_CONSTANT_SPEC_UNUSED_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_FETCH_CLASS_CONSTANT_SPEC_UNUSED_TMPVARCV)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_ASSIGN_OBJ_OP_SPEC_UNUSED_TMPVAR):
				VM_TRACE(ZEND_ASSIGN_OBJ_OP_SPEC_UNUSED_TMPVAR)
				ZEND_ASSIGN_OBJ_OP_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_ASSIGN_OBJ_OP_SPEC_UNUSED_TMPVAR)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_PRE_INC_OBJ_SPEC_UNUSED_TMPVAR):
				VM_TRACE(ZEND_PRE_INC_OBJ_SPEC_UNUSED_TMPVAR)
				ZEND_PRE_INC_OBJ_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_PRE_INC_OBJ_SPEC_UNUSED_TMPVAR)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_POST_INC_OBJ_SPEC_UNUSED_TMPVAR):
				VM_TRACE(ZEND_POST_INC_OBJ_SPEC_UNUSED_TMPVAR)
				ZEND_POST_INC_OBJ_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_POST_INC_OBJ_SPEC_UNUSED_TMPVAR)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_FETCH_OBJ_R_SPEC_UNUSED_TMPVAR):
				VM_TRACE(ZEND_FETCH_OBJ_R_SPEC_UNUSED_TMPVAR)
				ZEND_FETCH_OBJ_R_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_FETCH_OBJ_R_SPEC_UNUSED_TMPVAR)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_FETCH_OBJ_W_SPEC_UNUSED_TMPVAR):
				VM_TRACE(ZEND_FETCH_OBJ_W_SPEC_UNUSED_TMPVAR)
				ZEND_FETCH_OBJ_W_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_FETCH_OBJ_W_SPEC_UNUSED_TMPVAR)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_FETCH_OBJ_RW_SPEC_UNUSED_TMPVAR):
				VM_TRACE(ZEND_FETCH_OBJ_RW_SPEC_UNUSED_TMPVAR)
				ZEND_FETCH_OBJ_RW_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_FETCH_OBJ_RW_SPEC_UNUSED_TMPVAR)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_FETCH_OBJ_IS_SPEC_UNUSED_TMPVAR):
				VM_TRACE(ZEND_FETCH_OBJ_IS_SPEC_UNUSED_TMPVAR)
				ZEND_FETCH_OBJ_IS_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_FETCH_OBJ_IS_SPEC_UNUSED_TMPVAR)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_FETCH_OBJ_FUNC_ARG_SPEC_UNUSED_TMPVAR):
				VM_TRACE(ZEND_FETCH_OBJ_FUNC_ARG_SPEC_UNUSED_TMPVAR)
				ZEND_FETCH_OBJ_FUNC_ARG_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_FETCH_OBJ_FUNC_ARG_SPEC_UNUSED_TMPVAR)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_FETCH_OBJ_UNSET_SPEC_UNUSED_TMPVAR):
				VM_TRACE(ZEND_FETCH_OBJ_UNSET_SPEC_UNUSED_TMPVAR)
				ZEND_FETCH_OBJ_UNSET_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_FETCH_OBJ_UNSET_SPEC_UNUSED_TMPVAR)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_OP_DATA_CONST):
				VM_TRACE(ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_OP_DATA_CONST)
				ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_OP_DATA_CONST)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_OP_DATA_TMP):
				VM_TRACE(ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_OP_DATA_TMP)
				ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_OP_DATA_TMP)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_OP_DATA_VAR):
				VM_TRACE(ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_OP_DATA_VAR)
				ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_OP_DATA_VAR)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_OP_DATA_CV):
				VM_TRACE(ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_OP_DATA_CV)
				ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_OP_DATA_CV)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_ASSIGN_OBJ_REF_SPEC_UNUSED_TMPVAR_OP_DATA_VAR):
				VM_TRACE(ZEND_ASSIGN_OBJ_REF_SPEC_UNUSED_TMPVAR_OP_DATA_VAR)
				ZEND_ASSIGN_OBJ_REF_SPEC_UNUSED_TMPVAR_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_ASSIGN_OBJ_REF_SPEC_UNUSED_TMPVAR_OP_DATA_VAR)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_ASSIGN_OBJ_REF_SPEC_UNUSED_TMPVAR_OP_DATA_CV):
				VM_TRACE(ZEND_ASSIGN_OBJ_REF_SPEC_UNUSED_TMPVAR_OP_DATA_CV)
				ZEND_ASSIGN_OBJ_REF_SPEC_UNUSED_TMPVAR_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_ASSIGN_OBJ_REF_SPEC_UNUSED_TMPVAR_OP_DATA_CV)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_ROPE_INIT_SPEC_UNUSED_TMPVAR):
				VM_TRACE(ZEND_ROPE_INIT_SPEC_UNUSED_TMPVAR)
				ZEND_ROPE_INIT_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_ROPE_INIT_SPEC_UNUSED_TMPVAR)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_FETCH_CLASS_SPEC_UNUSED_TMPVAR):
				VM_TRACE(ZEND_FETCH_CLASS_SPEC_UNUSED_TMPVAR)
				ZEND_FETCH_CLASS_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_FETCH_CLASS_SPEC_UNUSED_TMPVAR)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_INIT_METHOD_CALL_SPEC_UNUSED_TMPVAR):
				VM_TRACE(ZEND_INIT_METHOD_CALL_SPEC_UNUSED_TMPVAR)
				ZEND_INIT_METHOD_CALL_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_INIT_METHOD_CALL_SPEC_UNUSED_TMPVAR)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_INIT_STATIC_METHOD_CALL_SPEC_UNUSED_TMPVAR):
				VM_TRACE(ZEND_INIT_STATIC_METHOD_CALL_SPEC_UNUSED_TMPVAR)
				ZEND_INIT_STATIC_METHOD_CALL_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_INIT_STATIC_METHOD_CALL_SPEC_UNUSED_TMPVAR)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_INIT_ARRAY_SPEC_UNUSED_TMPVAR):
				VM_TRACE(ZEND_INIT_ARRAY_SPEC_UNUSED_TMPVAR)
				ZEND_INIT_ARRAY_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_INIT_ARRAY_SPEC_UNUSED_TMPVAR)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_UNSET_OBJ_SPEC_UNUSED_TMPVAR):
				VM_TRACE(ZEND_UNSET_OBJ_SPEC_UNUSED_TMPVAR)
				ZEND_UNSET_OBJ_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_UNSET_OBJ_SPEC_UNUSED_TMPVAR)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_UNUSED_TMPVAR):
				VM_TRACE(ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_UNUSED_TMPVAR)
				ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_UNUSED_TMPVAR)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_YIELD_SPEC_UNUSED_TMPVAR):
				VM_TRACE(ZEND_YIELD_SPEC_UNUSED_TMPVAR)
				ZEND_YIELD_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_YIELD_SPEC_UNUSED_TMPVAR)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_FETCH_CLASS_SPEC_UNUSED_UNUSED):
				VM_TRACE(ZEND_FETCH_CLASS_SPEC_UNUSED_UNUSED)
				ZEND_FETCH_CLASS_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_FETCH_CLASS_SPEC_UNUSED_UNUSED)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_INIT_STATIC_METHOD_CALL_SPEC_UNUSED_UNUSED):
				VM_TRACE(ZEND_INIT_STATIC_METHOD_CALL_SPEC_UNUSED_UNUSED)
				ZEND_INIT_STATIC_METHOD_CALL_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_INIT_STATIC_METHOD_CALL_SPEC_UNUSED_UNUSED)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_VERIFY_RETURN_TYPE_SPEC_UNUSED_UNUSED):
				VM_TRACE(ZEND_VERIFY_RETURN_TYPE_SPEC_UNUSED_UNUSED)
				ZEND_VERIFY_RETURN_TYPE_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_VERIFY_RETURN_TYPE_SPEC_UNUSED_UNUSED)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_VERIFY_NEVER_TYPE_SPEC_UNUSED_UNUSED):
				VM_TRACE(ZEND_VERIFY_NEVER_TYPE_SPEC_UNUSED_UNUSED)
				ZEND_VERIFY_NEVER_TYPE_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_VERIFY_NEVER_TYPE_SPEC_UNUSED_UNUSED)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_CHECK_FUNC_ARG_SPEC_UNUSED_UNUSED):
				VM_TRACE(ZEND_CHECK_FUNC_ARG_SPEC_UNUSED_UNUSED)
				ZEND_CHECK_FUNC_ARG_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_CHECK_FUNC_ARG_SPEC_UNUSED_UNUSED)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_CHECK_FUNC_ARG_SPEC_UNUSED_UNUSED_QUICK):
				VM_TRACE(ZEND_CHECK_FUNC_ARG_SPEC_UNUSED_UNUSED_QUICK)
				ZEND_CHECK_FUNC_ARG_SPEC_UNUSED_UNUSED_QUICK_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_CHECK_FUNC_ARG_SPEC_UNUSED_UNUSED_QUICK)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_CHECK_UNDEF_ARGS_SPEC_UNUSED_UNUSED):
				VM_TRACE(ZEND_CHECK_UNDEF_ARGS_SPEC_UNUSED_UNUSED)
				ZEND_CHECK_UNDEF_ARGS_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_CHECK_UNDEF_ARGS_SPEC_UNUSED_UNUSED)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_NEW_SPEC_UNUSED_UNUSED):
				VM_TRACE(ZEND_NEW_SPEC_UNUSED_UNUSED)
				ZEND_NEW_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_NEW_SPEC_UNUSED_UNUSED)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_INIT_ARRAY_SPEC_UNUSED_UNUSED):
				VM_TRACE(ZEND_INIT_ARRAY_SPEC_UNUSED_UNUSED)
				ZEND_INIT_ARRAY_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_INIT_ARRAY_SPEC_UNUSED_UNUSED)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_YIELD_SPEC_UNUSED_UNUSED):
				VM_TRACE(ZEND_YIELD_SPEC_UNUSED_UNUSED)
				ZEND_YIELD_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_YIELD_SPEC_UNUSED_UNUSED)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_FETCH_THIS_SPEC_UNUSED_UNUSED):
				VM_TRACE(ZEND_FETCH_THIS_SPEC_UNUSED_UNUSED)
				ZEND_FETCH_THIS_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_FETCH_THIS_SPEC_UNUSED_UNUSED)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_FETCH_GLOBALS_SPEC_UNUSED_UNUSED):
				VM_TRACE(ZEND_FETCH_GLOBALS_SPEC_UNUSED_UNUSED)
				ZEND_FETCH_GLOBALS_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_FETCH_GLOBALS_SPEC_UNUSED_UNUSED)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_ISSET_ISEMPTY_THIS_SPEC_UNUSED_UNUSED):
				VM_TRACE(ZEND_ISSET_ISEMPTY_THIS_SPEC_UNUSED_UNUSED)
				ZEND_ISSET_ISEMPTY_THIS_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_ISSET_ISEMPTY_THIS_SPEC_UNUSED_UNUSED)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_GET_CLASS_SPEC_UNUSED_UNUSED):
				VM_TRACE(ZEND_GET_CLASS_SPEC_UNUSED_UNUSED)
				ZEND_GET_CLASS_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_GET_CLASS_SPEC_UNUSED_UNUSED)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_GET_CALLED_CLASS_SPEC_UNUSED_UNUSED):
				VM_TRACE(ZEND_GET_CALLED_CLASS_SPEC_UNUSED_UNUSED)
				ZEND_GET_CALLED_CLASS_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_GET_CALLED_CLASS_SPEC_UNUSED_UNUSED)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_FUNC_NUM_ARGS_SPEC_UNUSED_UNUSED):
				VM_TRACE(ZEND_FUNC_NUM_ARGS_SPEC_UNUSED_UNUSED)
				ZEND_FUNC_NUM_ARGS_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_FUNC_NUM_ARGS_SPEC_UNUSED_UNUSED)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_FUNC_GET_ARGS_SPEC_UNUSED_UNUSED):
				VM_TRACE(ZEND_FUNC_GET_ARGS_SPEC_UNUSED_UNUSED)
				ZEND_FUNC_GET_ARGS_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_FUNC_GET_ARGS_SPEC_UNUSED_UNUSED)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_CALLABLE_CONVERT_SPEC_UNUSED_UNUSED):
				VM_TRACE(ZEND_CALLABLE_CONVERT_SPEC_UNUSED_UNUSED)
				ZEND_CALLABLE_CONVERT_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_CALLABLE_CONVERT_SPEC_UNUSED_UNUSED)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_FRAMELESS_ICALL_0_SPEC_UNUSED_UNUSED):
				VM_TRACE(ZEND_FRAMELESS_ICALL_0_SPEC_UNUSED_UNUSED)
				ZEND_FRAMELESS_ICALL_0_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_FRAMELESS_ICALL_0_SPEC_UNUSED_UNUSED)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_FRAMELESS_ICALL_0_SPEC_OBSERVER):
				VM_TRACE(ZEND_FRAMELESS_ICALL_0_SPEC_OBSERVER)
				ZEND_FRAMELESS_ICALL_0_SPEC_OBSERVER_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_FRAMELESS_ICALL_0_SPEC_OBSERVER)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_ASSIGN_OBJ_OP_SPEC_UNUSED_CV):
				VM_TRACE(ZEND_ASSIGN_OBJ_OP_SPEC_UNUSED_CV)
				ZEND_ASSIGN_OBJ_OP_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_ASSIGN_OBJ_OP_SPEC_UNUSED_CV)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_PRE_INC_OBJ_SPEC_UNUSED_CV):
				VM_TRACE(ZEND_PRE_INC_OBJ_SPEC_UNUSED_CV)
				ZEND_PRE_INC_OBJ_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_PRE_INC_OBJ_SPEC_UNUSED_CV)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_POST_INC_OBJ_SPEC_UNUSED_CV):
				VM_TRACE(ZEND_POST_INC_OBJ_SPEC_UNUSED_CV)
				ZEND_POST_INC_OBJ_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_POST_INC_OBJ_SPEC_UNUSED_CV)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_FETCH_OBJ_R_SPEC_UNUSED_CV):
				VM_TRACE(ZEND_FETCH_OBJ_R_SPEC_UNUSED_CV)
				ZEND_FETCH_OBJ_R_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_FETCH_OBJ_R_SPEC_UNUSED_CV)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_FETCH_OBJ_W_SPEC_UNUSED_CV):
				VM_TRACE(ZEND_FETCH_OBJ_W_SPEC_UNUSED_CV)
				ZEND_FETCH_OBJ_W_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_FETCH_OBJ_W_SPEC_UNUSED_CV)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_FETCH_OBJ_RW_SPEC_UNUSED_CV):
				VM_TRACE(ZEND_FETCH_OBJ_RW_SPEC_UNUSED_CV)
				ZEND_FETCH_OBJ_RW_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_FETCH_OBJ_RW_SPEC_UNUSED_CV)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_FETCH_OBJ_IS_SPEC_UNUSED_CV):
				VM_TRACE(ZEND_FETCH_OBJ_IS_SPEC_UNUSED_CV)
				ZEND_FETCH_OBJ_IS_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_FETCH_OBJ_IS_SPEC_UNUSED_CV)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_FETCH_OBJ_FUNC_ARG_SPEC_UNUSED_CV):
				VM_TRACE(ZEND_FETCH_OBJ_FUNC_ARG_SPEC_UNUSED_CV)
				ZEND_FETCH_OBJ_FUNC_ARG_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_FETCH_OBJ_FUNC_ARG_SPEC_UNUSED_CV)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_FETCH_OBJ_UNSET_SPEC_UNUSED_CV):
				VM_TRACE(ZEND_FETCH_OBJ_UNSET_SPEC_UNUSED_CV)
				ZEND_FETCH_OBJ_UNSET_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_FETCH_OBJ_UNSET_SPEC_UNUSED_CV)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_UNUSED_CV_OP_DATA_CONST):
				VM_TRACE(ZEND_ASSIGN_OBJ_SPEC_UNUSED_CV_OP_DATA_CONST)
				ZEND_ASSIGN_OBJ_SPEC_UNUSED_CV_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_ASSIGN_OBJ_SPEC_UNUSED_CV_OP_DATA_CONST)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_UNUSED_CV_OP_DATA_TMP):
				VM_TRACE(ZEND_ASSIGN_OBJ_SPEC_UNUSED_CV_OP_DATA_TMP)
				ZEND_ASSIGN_OBJ_SPEC_UNUSED_CV_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_ASSIGN_OBJ_SPEC_UNUSED_CV_OP_DATA_TMP)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_UNUSED_CV_OP_DATA_VAR):
				VM_TRACE(ZEND_ASSIGN_OBJ_SPEC_UNUSED_CV_OP_DATA_VAR)
				ZEND_ASSIGN_OBJ_SPEC_UNUSED_CV_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_ASSIGN_OBJ_SPEC_UNUSED_CV_OP_DATA_VAR)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_UNUSED_CV_OP_DATA_CV):
				VM_TRACE(ZEND_ASSIGN_OBJ_SPEC_UNUSED_CV_OP_DATA_CV)
				ZEND_ASSIGN_OBJ_SPEC_UNUSED_CV_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_ASSIGN_OBJ_SPEC_UNUSED_CV_OP_DATA_CV)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_ASSIGN_OBJ_REF_SPEC_UNUSED_CV_OP_DATA_VAR):
				VM_TRACE(ZEND_ASSIGN_OBJ_REF_SPEC_UNUSED_CV_OP_DATA_VAR)
				ZEND_ASSIGN_OBJ_REF_SPEC_UNUSED_CV_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_ASSIGN_OBJ_REF_SPEC_UNUSED_CV_OP_DATA_VAR)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_ASSIGN_OBJ_REF_SPEC_UNUSED_CV_OP_DATA_CV):
				VM_TRACE(ZEND_ASSIGN_OBJ_REF_SPEC_UNUSED_CV_OP_DATA_CV)
				ZEND_ASSIGN_OBJ_REF_SPEC_UNUSED_CV_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_ASSIGN_OBJ_REF_SPEC_UNUSED_CV_OP_DATA_CV)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_ROPE_INIT_SPEC_UNUSED_CV):
				VM_TRACE(ZEND_ROPE_INIT_SPEC_UNUSED_CV)
				ZEND_ROPE_INIT_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_ROPE_INIT_SPEC_UNUSED_CV)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_FETCH_CLASS_SPEC_UNUSED_CV):
				VM_TRACE(ZEND_FETCH_CLASS_SPEC_UNUSED_CV)
				ZEND_FETCH_CLASS_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_FETCH_CLASS_SPEC_UNUSED_CV)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_INIT_METHOD_CALL_SPEC_UNUSED_CV):
				VM_TRACE(ZEND_INIT_METHOD_CALL_SPEC_UNUSED_CV)
				ZEND_INIT_METHOD_CALL_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_INIT_METHOD_CALL_SPEC_UNUSED_CV)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_INIT_STATIC_METHOD_CALL_SPEC_UNUSED_CV):
				VM_TRACE(ZEND_INIT_STATIC_METHOD_CALL_SPEC_UNUSED_CV)
				ZEND_INIT_STATIC_METHOD_CALL_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_INIT_STATIC_METHOD_CALL_SPEC_UNUSED_CV)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_INIT_ARRAY_SPEC_UNUSED_CV):
				VM_TRACE(ZEND_INIT_ARRAY_SPEC_UNUSED_CV)
				ZEND_INIT_ARRAY_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_INIT_ARRAY_SPEC_UNUSED_CV)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_UNSET_OBJ_SPEC_UNUSED_CV):
				VM_TRACE(ZEND_UNSET_OBJ_SPEC_UNUSED_CV)
				ZEND_UNSET_OBJ_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_UNSET_OBJ_SPEC_UNUSED_CV)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_UNUSED_CV):
				VM_TRACE(ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_UNUSED_CV)
				ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_UNUSED_CV)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_YIELD_SPEC_UNUSED_CV):
				VM_TRACE(ZEND_YIELD_SPEC_UNUSED_CV)
				ZEND_YIELD_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_YIELD_SPEC_UNUSED_CV)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_BOOL_NOT_SPEC_CV):
				VM_TRACE(ZEND_BOOL_NOT_SPEC_CV)
				ZEND_BOOL_NOT_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_BOOL_NOT_SPEC_CV)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_PRE_INC_SPEC_CV_RETVAL_UNUSED):
				VM_TRACE(ZEND_PRE_INC_SPEC_CV_RETVAL_UNUSED)
				ZEND_PRE_INC_SPEC_CV_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_PRE_INC_SPEC_CV_RETVAL_UNUSED)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_PRE_INC_SPEC_CV_RETVAL_USED):
				VM_TRACE(ZEND_PRE_INC_SPEC_CV_RETVAL_USED)
				ZEND_PRE_INC_SPEC_CV_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_PRE_INC_SPEC_CV_RETVAL_USED)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_PRE_DEC_SPEC_CV_RETVAL_UNUSED):
				VM_TRACE(ZEND_PRE_DEC_SPEC_CV_RETVAL_UNUSED)
				ZEND_PRE_DEC_SPEC_CV_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_PRE_DEC_SPEC_CV_RETVAL_UNUSED)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_PRE_DEC_SPEC_CV_RETVAL_USED):
				VM_TRACE(ZEND_PRE_DEC_SPEC_CV_RETVAL_USED)
				ZEND_PRE_DEC_SPEC_CV_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_PRE_DEC_SPEC_CV_RETVAL_USED)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_POST_INC_SPEC_CV):
				VM_TRACE(ZEND_POST_INC_SPEC_CV)
				ZEND_POST_INC_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_POST_INC_SPEC_CV)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_POST_DEC_SPEC_CV):
				VM_TRACE(ZEND_POST_DEC_SPEC_CV)
				ZEND_POST_DEC_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_POST_DEC_SPEC_CV)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_ECHO_SPEC_CV):
				VM_TRACE(ZEND_ECHO_SPEC_CV)
				ZEND_ECHO_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_ECHO_SPEC_CV)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_JMPZ_SPEC_CV):
				VM_TRACE(ZEND_JMPZ_SPEC_CV)
				ZEND_JMPZ_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_JMPZ_SPEC_CV)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_JMPNZ_SPEC_CV):
				VM_TRACE(ZEND_JMPNZ_SPEC_CV)
				ZEND_JMPNZ_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_JMPNZ_SPEC_CV)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_JMPZ_EX_SPEC_CV):
				VM_TRACE(ZEND_JMPZ_EX_SPEC_CV)
				ZEND_JMPZ_EX_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_JMPZ_EX_SPEC_CV)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_JMPNZ_EX_SPEC_CV):
				VM_TRACE(ZEND_JMPNZ_EX_SPEC_CV)
				ZEND_JMPNZ_EX_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_JMPNZ_EX_SPEC_CV)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_RETURN_SPEC_CV):
				VM_TRACE(ZEND_RETURN_SPEC_CV)
{
	USE_OPLINE
	zval *retval_ptr;
	zval *return_value;


	retval_ptr = EX_VAR(opline->op1.var);
	return_value = EX(return_value);


	if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(retval_ptr) == IS_UNDEF)) {
		SAVE_OPLINE();
		retval_ptr = ZVAL_UNDEFINED_OP1();
		if (return_value) {
			ZVAL_NULL(return_value);
		}
	} else if (!return_value) {
		if (IS_CV & (IS_VAR|IS_TMP_VAR)) {
			if (Z_REFCOUNTED_P(retval_ptr) && !Z_DELREF_P(retval_ptr)) {
				SAVE_OPLINE();
				rc_dtor_func(Z_COUNTED_P(retval_ptr));
			}
		}
	} else {
		if ((IS_CV & (IS_CONST|IS_TMP_VAR))) {
			ZVAL_COPY_VALUE(return_value, retval_ptr);
			if (IS_CV == IS_CONST) {
				if (UNEXPECTED(Z_OPT_REFCOUNTED_P(return_value))) {
					Z_ADDREF_P(return_value);
				}
			}
		} else if (IS_CV == IS_CV) {
			do {
				if (Z_OPT_REFCOUNTED_P(retval_ptr)) {
					if (EXPECTED(!Z_OPT_ISREF_P(retval_ptr))) {
						if (EXPECTED(!(EX_CALL_INFO() & (ZEND_CALL_CODE|ZEND_CALL_OBSERVED)))) {
							zend_refcounted *ref = Z_COUNTED_P(retval_ptr);
							ZVAL_COPY_VALUE(return_value, retval_ptr);
							if (GC_MAY_LEAK(ref)) {
								SAVE_OPLINE();
								gc_possible_root(ref);
							}
							ZVAL_NULL(retval_ptr);
							break;
						} else {
							Z_ADDREF_P(retval_ptr);
						}
					} else {
						retval_ptr = Z_REFVAL_P(retval_ptr);
						if (Z_OPT_REFCOUNTED_P(retval_ptr)) {
							Z_ADDREF_P(retval_ptr);
						}
					}
				}
				ZVAL_COPY_VALUE(return_value, retval_ptr);
			} while (0);
		} else /* if (IS_CV == IS_VAR) */ {
			if (UNEXPECTED(Z_ISREF_P(retval_ptr))) {
				zend_refcounted *ref = Z_COUNTED_P(retval_ptr);

				retval_ptr = Z_REFVAL_P(retval_ptr);
				ZVAL_COPY_VALUE(return_value, retval_ptr);
				if (UNEXPECTED(GC_DELREF(ref) == 0)) {
					efree_size(ref, sizeof(zend_reference));
				} else if (Z_OPT_REFCOUNTED_P(retval_ptr)) {
					Z_ADDREF_P(retval_ptr);
				}
			} else {
				ZVAL_COPY_VALUE(return_value, retval_ptr);
			}
		}
	}






	goto zend_leave_helper_SPEC_LABEL;
}

				VM_TRACE_OP_END(ZEND_RETURN_SPEC_CV)
			HYBRID_CASE(ZEND_RETURN_BY_REF_SPEC_CV):
				VM_TRACE(ZEND_RETURN_BY_REF_SPEC_CV)
				ZEND_RETURN_BY_REF_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_RETURN_BY_REF_SPEC_CV)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_GENERATOR_RETURN_SPEC_CV):
				VM_TRACE(ZEND_GENERATOR_RETURN_SPEC_CV)
				ZEND_GENERATOR_RETURN_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_GENERATOR_RETURN_SPEC_CV)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_THROW_SPEC_CV):
				VM_TRACE(ZEND_THROW_SPEC_CV)
				ZEND_THROW_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_THROW_SPEC_CV)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_SEND_USER_SPEC_CV):
				VM_TRACE(ZEND_SEND_USER_SPEC_CV)
				ZEND_SEND_USER_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_SEND_USER_SPEC_CV)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_BOOL_SPEC_CV):
				VM_TRACE(ZEND_BOOL_SPEC_CV)
				ZEND_BOOL_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_BOOL_SPEC_CV)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_CLONE_SPEC_CV):
				VM_TRACE(ZEND_CLONE_SPEC_CV)
				ZEND_CLONE_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_CLONE_SPEC_CV)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_CAST_SPEC_CV):
				VM_TRACE(ZEND_CAST_SPEC_CV)
				ZEND_CAST_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_CAST_SPEC_CV)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_INCLUDE_OR_EVAL_SPEC_CV):
				VM_TRACE(ZEND_INCLUDE_OR_EVAL_SPEC_CV)
				ZEND_INCLUDE_OR_EVAL_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_INCLUDE_OR_EVAL_SPEC_CV)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_FE_RESET_R_SPEC_CV):
				VM_TRACE(ZEND_FE_RESET_R_SPEC_CV)
				ZEND_FE_RESET_R_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_FE_RESET_R_SPEC_CV)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_FE_RESET_RW_SPEC_CV):
				VM_TRACE(ZEND_FE_RESET_RW_SPEC_CV)
				ZEND_FE_RESET_RW_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_FE_RESET_RW_SPEC_CV)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_JMP_SET_SPEC_CV):
				VM_TRACE(ZEND_JMP_SET_SPEC_CV)
				ZEND_JMP_SET_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_JMP_SET_SPEC_CV)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_COALESCE_SPEC_CV):
				VM_TRACE(ZEND_COALESCE_SPEC_CV)
				ZEND_COALESCE_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_COALESCE_SPEC_CV)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_JMP_NULL_SPEC_CV):
				VM_TRACE(ZEND_JMP_NULL_SPEC_CV)
				ZEND_JMP_NULL_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_JMP_NULL_SPEC_CV)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_QM_ASSIGN_SPEC_CV):
				VM_TRACE(ZEND_QM_ASSIGN_SPEC_CV)
				ZEND_QM_ASSIGN_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_QM_ASSIGN_SPEC_CV)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_YIELD_FROM_SPEC_CV):
				VM_TRACE(ZEND_YIELD_FROM_SPEC_CV)
				ZEND_YIELD_FROM_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_YIELD_FROM_SPEC_CV)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_STRLEN_SPEC_CV):
				VM_TRACE(ZEND_STRLEN_SPEC_CV)
				ZEND_STRLEN_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_STRLEN_SPEC_CV)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_TYPE_CHECK_SPEC_CV):
				VM_TRACE(ZEND_TYPE_CHECK_SPEC_CV)
				ZEND_TYPE_CHECK_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_TYPE_CHECK_SPEC_CV)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_FETCH_CLASS_NAME_SPEC_CV):
				VM_TRACE(ZEND_FETCH_CLASS_NAME_SPEC_CV)
				ZEND_FETCH_CLASS_NAME_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_FETCH_CLASS_NAME_SPEC_CV)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_BIND_STATIC_SPEC_CV):
				VM_TRACE(ZEND_BIND_STATIC_SPEC_CV)
				ZEND_BIND_STATIC_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_BIND_STATIC_SPEC_CV)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_BIND_INIT_STATIC_OR_JMP_SPEC_CV):
				VM_TRACE(ZEND_BIND_INIT_STATIC_OR_JMP_SPEC_CV)
				ZEND_BIND_INIT_STATIC_OR_JMP_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_BIND_INIT_STATIC_OR_JMP_SPEC_CV)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_PRE_INC_LONG_NO_OVERFLOW_SPEC_CV_RETVAL_UNUSED):
				VM_TRACE(ZEND_PRE_INC_LONG_NO_OVERFLOW_SPEC_CV_RETVAL_UNUSED)
				ZEND_PRE_INC_LONG_NO_OVERFLOW_SPEC_CV_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_PRE_INC_LONG_NO_OVERFLOW_SPEC_CV_RETVAL_UNUSED)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_PRE_INC_LONG_NO_OVERFLOW_SPEC_CV_RETVAL_USED):
				VM_TRACE(ZEND_PRE_INC_LONG_NO_OVERFLOW_SPEC_CV_RETVAL_USED)
				ZEND_PRE_INC_LONG_NO_OVERFLOW_SPEC_CV_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_PRE_INC_LONG_NO_OVERFLOW_SPEC_CV_RETVAL_USED)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_PRE_INC_LONG_SPEC_CV_RETVAL_UNUSED):
				VM_TRACE(ZEND_PRE_INC_LONG_SPEC_CV_RETVAL_UNUSED)
				ZEND_PRE_INC_LONG_SPEC_CV_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_PRE_INC_LONG_SPEC_CV_RETVAL_UNUSED)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_PRE_INC_LONG_SPEC_CV_RETVAL_USED):
				VM_TRACE(ZEND_PRE_INC_LONG_SPEC_CV_RETVAL_USED)
				ZEND_PRE_INC_LONG_SPEC_CV_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_PRE_INC_LONG_SPEC_CV_RETVAL_USED)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_PRE_DEC_LONG_NO_OVERFLOW_SPEC_CV_RETVAL_UNUSED):
				VM_TRACE(ZEND_PRE_DEC_LONG_NO_OVERFLOW_SPEC_CV_RETVAL_UNUSED)
				ZEND_PRE_DEC_LONG_NO_OVERFLOW_SPEC_CV_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_PRE_DEC_LONG_NO_OVERFLOW_SPEC_CV_RETVAL_UNUSED)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_PRE_DEC_LONG_NO_OVERFLOW_SPEC_CV_RETVAL_USED):
				VM_TRACE(ZEND_PRE_DEC_LONG_NO_OVERFLOW_SPEC_CV_RETVAL_USED)
				ZEND_PRE_DEC_LONG_NO_OVERFLOW_SPEC_CV_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_PRE_DEC_LONG_NO_OVERFLOW_SPEC_CV_RETVAL_USED)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_PRE_DEC_LONG_SPEC_CV_RETVAL_UNUSED):
				VM_TRACE(ZEND_PRE_DEC_LONG_SPEC_CV_RETVAL_UNUSED)
				ZEND_PRE_DEC_LONG_SPEC_CV_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_PRE_DEC_LONG_SPEC_CV_RETVAL_UNUSED)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_PRE_DEC_LONG_SPEC_CV_RETVAL_USED):
				VM_TRACE(ZEND_PRE_DEC_LONG_SPEC_CV_RETVAL_USED)
				ZEND_PRE_DEC_LONG_SPEC_CV_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_PRE_DEC_LONG_SPEC_CV_RETVAL_USED)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_POST_INC_LONG_NO_OVERFLOW_SPEC_CV):
				VM_TRACE(ZEND_POST_INC_LONG_NO_OVERFLOW_SPEC_CV)
				ZEND_POST_INC_LONG_NO_OVERFLOW_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_POST_INC_LONG_NO_OVERFLOW_SPEC_CV)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_POST_INC_LONG_SPEC_CV):
				VM_TRACE(ZEND_POST_INC_LONG_SPEC_CV)
				ZEND_POST_INC_LONG_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_POST_INC_LONG_SPEC_CV)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_POST_DEC_LONG_NO_OVERFLOW_SPEC_CV):
				VM_TRACE(ZEND_POST_DEC_LONG_NO_OVERFLOW_SPEC_CV)
				ZEND_POST_DEC_LONG_NO_OVERFLOW_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_POST_DEC_LONG_NO_OVERFLOW_SPEC_CV)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_POST_DEC_LONG_SPEC_CV):
				VM_TRACE(ZEND_POST_DEC_LONG_SPEC_CV)
				ZEND_POST_DEC_LONG_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_POST_DEC_LONG_SPEC_CV)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_SEND_VAR_SIMPLE_SPEC_CV):
				VM_TRACE(ZEND_SEND_VAR_SIMPLE_SPEC_CV)
				ZEND_SEND_VAR_SIMPLE_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_SEND_VAR_SIMPLE_SPEC_CV)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_DIV_SPEC_CV_CONST):
				VM_TRACE(ZEND_DIV_SPEC_CV_CONST)
				ZEND_DIV_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_DIV_SPEC_CV_CONST)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_POW_SPEC_CV_CONST):
				VM_TRACE(ZEND_POW_SPEC_CV_CONST)
				ZEND_POW_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_POW_SPEC_CV_CONST)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_CONCAT_SPEC_CV_CONST):
				VM_TRACE(ZEND_CONCAT_SPEC_CV_CONST)
				ZEND_CONCAT_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_CONCAT_SPEC_CV_CONST)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_IS_IDENTICAL_SPEC_CV_CONST):
				VM_TRACE(ZEND_IS_IDENTICAL_SPEC_CV_CONST)
				ZEND_IS_IDENTICAL_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_IS_IDENTICAL_SPEC_CV_CONST)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_IS_NOT_IDENTICAL_SPEC_CV_CONST):
				VM_TRACE(ZEND_IS_NOT_IDENTICAL_SPEC_CV_CONST)
				ZEND_IS_NOT_IDENTICAL_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_IS_NOT_IDENTICAL_SPEC_CV_CONST)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_IS_EQUAL_SPEC_CV_CONST):
				VM_TRACE(ZEND_IS_EQUAL_SPEC_CV_CONST)
				ZEND_IS_EQUAL_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_IS_EQUAL_SPEC_CV_CONST)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_IS_EQUAL_SPEC_CV_CONST_JMPZ):
				VM_TRACE(ZEND_IS_EQUAL_SPEC_CV_CONST_JMPZ)
				ZEND_IS_EQUAL_SPEC_CV_CONST_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_IS_EQUAL_SPEC_CV_CONST_JMPZ)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_IS_EQUAL_SPEC_CV_CONST_JMPNZ):
				VM_TRACE(ZEND_IS_EQUAL_SPEC_CV_CONST_JMPNZ)
				ZEND_IS_EQUAL_SPEC_CV_CONST_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_IS_EQUAL_SPEC_CV_CONST_JMPNZ)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_IS_NOT_EQUAL_SPEC_CV_CONST):
				VM_TRACE(ZEND_IS_NOT_EQUAL_SPEC_CV_CONST)
				ZEND_IS_NOT_EQUAL_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_IS_NOT_EQUAL_SPEC_CV_CONST)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_IS_NOT_EQUAL_SPEC_CV_CONST_JMPZ):
				VM_TRACE(ZEND_IS_NOT_EQUAL_SPEC_CV_CONST_JMPZ)
				ZEND_IS_NOT_EQUAL_SPEC_CV_CONST_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_IS_NOT_EQUAL_SPEC_CV_CONST_JMPZ)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_IS_NOT_EQUAL_SPEC_CV_CONST_JMPNZ):
				VM_TRACE(ZEND_IS_NOT_EQUAL_SPEC_CV_CONST_JMPNZ)
				ZEND_IS_NOT_EQUAL_SPEC_CV_CONST_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_IS_NOT_EQUAL_SPEC_CV_CONST_JMPNZ)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_SPACESHIP_SPEC_CV_CONST):
				VM_TRACE(ZEND_SPACESHIP_SPEC_CV_CONST)
				ZEND_SPACESHIP_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_SPACESHIP_SPEC_CV_CONST)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_BOOL_XOR_SPEC_CV_CONST):
				VM_TRACE(ZEND_BOOL_XOR_SPEC_CV_CONST)
				ZEND_BOOL_XOR_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_BOOL_XOR_SPEC_CV_CONST)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_ASSIGN_OBJ_OP_SPEC_CV_CONST):
				VM_TRACE(ZEND_ASSIGN_OBJ_OP_SPEC_CV_CONST)
				ZEND_ASSIGN_OBJ_OP_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_ASSIGN_OBJ_OP_SPEC_CV_CONST)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_ASSIGN_DIM_OP_SPEC_CV_CONST):
				VM_TRACE(ZEND_ASSIGN_DIM_OP_SPEC_CV_CONST)
				ZEND_ASSIGN_DIM_OP_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_ASSIGN_DIM_OP_SPEC_CV_CONST)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_ASSIGN_OP_SPEC_CV_CONST):
				VM_TRACE(ZEND_ASSIGN_OP_SPEC_CV_CONST)
				ZEND_ASSIGN_OP_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_ASSIGN_OP_SPEC_CV_CONST)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_PRE_INC_OBJ_SPEC_CV_CONST):
				VM_TRACE(ZEND_PRE_INC_OBJ_SPEC_CV_CONST)
				ZEND_PRE_INC_OBJ_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_PRE_INC_OBJ_SPEC_CV_CONST)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_POST_INC_OBJ_SPEC_CV_CONST):
				VM_TRACE(ZEND_POST_INC_OBJ_SPEC_CV_CONST)
				ZEND_POST_INC_OBJ_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_POST_INC_OBJ_SPEC_CV_CONST)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_FETCH_DIM_R_SPEC_CV_CONST):
				VM_TRACE(ZEND_FETCH_DIM_R_SPEC_CV_CONST)
				ZEND_FETCH_DIM_R_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_FETCH_DIM_R_SPEC_CV_CONST)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_FETCH_DIM_W_SPEC_CV_CONST):
				VM_TRACE(ZEND_FETCH_DIM_W_SPEC_CV_CONST)
				ZEND_FETCH_DIM_W_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_FETCH_DIM_W_SPEC_CV_CONST)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_FETCH_DIM_RW_SPEC_CV_CONST):
				VM_TRACE(ZEND_FETCH_DIM_RW_SPEC_CV_CONST)
				ZEND_FETCH_DIM_RW_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_FETCH_DIM_RW_SPEC_CV_CONST)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_FETCH_DIM_IS_SPEC_CV_CONST):
				VM_TRACE(ZEND_FETCH_DIM_IS_SPEC_CV_CONST)
				ZEND_FETCH_DIM_IS_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_FETCH_DIM_IS_SPEC_CV_CONST)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_CONST):
				VM_TRACE(ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_CONST)
				ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_CONST)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_FETCH_DIM_UNSET_SPEC_CV_CONST):
				VM_TRACE(ZEND_FETCH_DIM_UNSET_SPEC_CV_CONST)
				ZEND_FETCH_DIM_UNSET_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_FETCH_DIM_UNSET_SPEC_CV_CONST)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_FETCH_OBJ_R_SPEC_CV_CONST):
				VM_TRACE(ZEND_FETCH_OBJ_R_SPEC_CV_CONST)
				ZEND_FETCH_OBJ_R_SPEC_CV_CONST_INLINE_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_FETCH_OBJ_R_SPEC_CV_CONST)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_FETCH_OBJ_W_SPEC_CV_CONST):
				VM_TRACE(ZEND_FETCH_OBJ_W_SPEC_CV_CONST)
				ZEND_FETCH_OBJ_W_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_FETCH_OBJ_W_SPEC_CV_CONST)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_FETCH_OBJ_RW_SPEC_CV_CONST):
				VM_TRACE(ZEND_FETCH_OBJ_RW_SPEC_CV_CONST)
				ZEND_FETCH_OBJ_RW_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_FETCH_OBJ_RW_SPEC_CV_CONST)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_FETCH_OBJ_IS_SPEC_CV_CONST):
				VM_TRACE(ZEND_FETCH_OBJ_IS_SPEC_CV_CONST)
				ZEND_FETCH_OBJ_IS_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_FETCH_OBJ_IS_SPEC_CV_CONST)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CV_CONST):
				VM_TRACE(ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CV_CONST)
				ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CV_CONST)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_FETCH_OBJ_UNSET_SPEC_CV_CONST):
				VM_TRACE(ZEND_FETCH_OBJ_UNSET_SPEC_CV_CONST)
				ZEND_FETCH_OBJ_UNSET_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_FETCH_OBJ_UNSET_SPEC_CV_CONST)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_CV_CONST_OP_DATA_CONST):
				VM_TRACE(ZEND_ASSIGN_OBJ_SPEC_CV_CONST_OP_DATA_CONST)
				ZEND_ASSIGN_OBJ_SPEC_CV_CONST_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_ASSIGN_OBJ_SPEC_CV_CONST_OP_DATA_CONST)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_CV_CONST_OP_DATA_TMP):
				VM_TRACE(ZEND_ASSIGN_OBJ_SPEC_CV_CONST_OP_DATA_TMP)
				ZEND_ASSIGN_OBJ_SPEC_CV_CONST_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_ASSIGN_OBJ_SPEC_CV_CONST_OP_DATA_TMP)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_CV_CONST_OP_DATA_VAR):
				VM_TRACE(ZEND_ASSIGN_OBJ_SPEC_CV_CONST_OP_DATA_VAR)
				ZEND_ASSIGN_OBJ_SPEC_CV_CONST_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_ASSIGN_OBJ_SPEC_CV_CONST_OP_DATA_VAR)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_CV_CONST_OP_DATA_CV):
				VM_TRACE(ZEND_ASSIGN_OBJ_SPEC_CV_CONST_OP_DATA_CV)
				ZEND_ASSIGN_OBJ_SPEC_CV_CONST_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_ASSIGN_OBJ_SPEC_CV_CONST_OP_DATA_CV)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_ASSIGN_DIM_SPEC_CV_CONST_OP_DATA_CONST):
				VM_TRACE(ZEND_ASSIGN_DIM_SPEC_CV_CONST_OP_DATA_CONST)
				ZEND_ASSIGN_DIM_SPEC_CV_CONST_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_ASSIGN_DIM_SPEC_CV_CONST_OP_DATA_CONST)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_ASSIGN_DIM_SPEC_CV_CONST_OP_DATA_TMP):
				VM_TRACE(ZEND_ASSIGN_DIM_SPEC_CV_CONST_OP_DATA_TMP)
				ZEND_ASSIGN_DIM_SPEC_CV_CONST_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_ASSIGN_DIM_SPEC_CV_CONST_OP_DATA_TMP)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_ASSIGN_DIM_SPEC_CV_CONST_OP_DATA_VAR):
				VM_TRACE(ZEND_ASSIGN_DIM_SPEC_CV_CONST_OP_DATA_VAR)
				ZEND_ASSIGN_DIM_SPEC_CV_CONST_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_ASSIGN_DIM_SPEC_CV_CONST_OP_DATA_VAR)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_ASSIGN_DIM_SPEC_CV_CONST_OP_DATA_CV):
				VM_TRACE(ZEND_ASSIGN_DIM_SPEC_CV_CONST_OP_DATA_CV)
				ZEND_ASSIGN_DIM_SPEC_CV_CONST_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_ASSIGN_DIM_SPEC_CV_CONST_OP_DATA_CV)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_ASSIGN_SPEC_CV_CONST_RETVAL_UNUSED):
				VM_TRACE(ZEND_ASSIGN_SPEC_CV_CONST_RETVAL_UNUSED)
				ZEND_ASSIGN_SPEC_CV_CONST_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_ASSIGN_SPEC_CV_CONST_RETVAL_UNUSED)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_ASSIGN_SPEC_CV_CONST_RETVAL_USED):
				VM_TRACE(ZEND_ASSIGN_SPEC_CV_CONST_RETVAL_USED)
				ZEND_ASSIGN_SPEC_CV_CONST_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_ASSIGN_SPEC_CV_CONST_RETVAL_USED)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_ASSIGN_OBJ_REF_SPEC_CV_CONST_OP_DATA_VAR):
				VM_TRACE(ZEND_ASSIGN_OBJ_REF_SPEC_CV_CONST_OP_DATA_VAR)
				ZEND_ASSIGN_OBJ_REF_SPEC_CV_CONST_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_ASSIGN_OBJ_REF_SPEC_CV_CONST_OP_DATA_VAR)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_ASSIGN_OBJ_REF_SPEC_CV_CONST_OP_DATA_CV):
				VM_TRACE(ZEND_ASSIGN_OBJ_REF_SPEC_CV_CONST_OP_DATA_CV)
				ZEND_ASSIGN_OBJ_REF_SPEC_CV_CONST_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_ASSIGN_OBJ_REF_SPEC_CV_CONST_OP_DATA_CV)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_FAST_CONCAT_SPEC_CV_CONST):
				VM_TRACE(ZEND_FAST_CONCAT_SPEC_CV_CONST)
				ZEND_FAST_CONCAT_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_FAST_CONCAT_SPEC_CV_CONST)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_INIT_METHOD_CALL_SPEC_CV_CONST):
				VM_TRACE(ZEND_INIT_METHOD_CALL_SPEC_CV_CONST)
				ZEND_INIT_METHOD_CALL_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_INIT_METHOD_CALL_SPEC_CV_CONST)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_SEND_VAR_SPEC_CV_CONST):
				VM_TRACE(ZEND_SEND_VAR_SPEC_CV_CONST)
				ZEND_SEND_VAR_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_SEND_VAR_SPEC_CV_CONST)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_SEND_REF_SPEC_CV_CONST):
				VM_TRACE(ZEND_SEND_REF_SPEC_CV_CONST)
				ZEND_SEND_REF_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_SEND_REF_SPEC_CV_CONST)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_SEND_VAR_EX_SPEC_CV_CONST):
				VM_TRACE(ZEND_SEND_VAR_EX_SPEC_CV_CONST)
				ZEND_SEND_VAR_EX_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_SEND_VAR_EX_SPEC_CV_CONST)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_CONST):
				VM_TRACE(ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_CONST)
				ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_CONST)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_INIT_ARRAY_SPEC_CV_CONST):
				VM_TRACE(ZEND_INIT_ARRAY_SPEC_CV_CONST)
				ZEND_INIT_ARRAY_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_INIT_ARRAY_SPEC_CV_CONST)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_UNSET_DIM_SPEC_CV_CONST):
				VM_TRACE(ZEND_UNSET_DIM_SPEC_CV_CONST)
				ZEND_UNSET_DIM_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_UNSET_DIM_SPEC_CV_CONST)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_UNSET_OBJ_SPEC_CV_CONST):
				VM_TRACE(ZEND_UNSET_OBJ_SPEC_CV_CONST)
				ZEND_UNSET_OBJ_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_UNSET_OBJ_SPEC_CV_CONST)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CV_CONST):
				VM_TRACE(ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CV_CONST)
				ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CV_CONST)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CV_CONST):
				VM_TRACE(ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CV_CONST)
				ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CV_CONST)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_ARRAY_KEY_EXISTS_SPEC_CV_CONST):
				VM_TRACE(ZEND_ARRAY_KEY_EXISTS_SPEC_CV_CONST)
				ZEND_ARRAY_KEY_EXISTS_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_ARRAY_KEY_EXISTS_SPEC_CV_CONST)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_INSTANCEOF_SPEC_CV_CONST):
				VM_TRACE(ZEND_INSTANCEOF_SPEC_CV_CONST)
				ZEND_INSTANCEOF_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_INSTANCEOF_SPEC_CV_CONST)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_YIELD_SPEC_CV_CONST):
				VM_TRACE(ZEND_YIELD_SPEC_CV_CONST)
				ZEND_YIELD_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_YIELD_SPEC_CV_CONST)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_BIND_GLOBAL_SPEC_CV_CONST):
				VM_TRACE(ZEND_BIND_GLOBAL_SPEC_CV_CONST)
				ZEND_BIND_GLOBAL_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_BIND_GLOBAL_SPEC_CV_CONST)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_IN_ARRAY_SPEC_CV_CONST):
				VM_TRACE(ZEND_IN_ARRAY_SPEC_CV_CONST)
				ZEND_IN_ARRAY_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_IN_ARRAY_SPEC_CV_CONST)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_IS_IDENTICAL_NOTHROW_SPEC_CV_CONST):
				VM_TRACE(ZEND_IS_IDENTICAL_NOTHROW_SPEC_CV_CONST)
				ZEND_IS_IDENTICAL_NOTHROW_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_IS_IDENTICAL_NOTHROW_SPEC_CV_CONST)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_IS_NOT_IDENTICAL_NOTHROW_SPEC_CV_CONST):
				VM_TRACE(ZEND_IS_NOT_IDENTICAL_NOTHROW_SPEC_CV_CONST)
				ZEND_IS_NOT_IDENTICAL_NOTHROW_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_IS_NOT_IDENTICAL_NOTHROW_SPEC_CV_CONST)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_FETCH_DIM_R_INDEX_SPEC_CV_CONST):
				VM_TRACE(ZEND_FETCH_DIM_R_INDEX_SPEC_CV_CONST)
				ZEND_FETCH_DIM_R_INDEX_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_FETCH_DIM_R_INDEX_SPEC_CV_CONST)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_FETCH_DIM_R_INDEX_SPEC_CV_TMPVARCV):
				VM_TRACE(ZEND_FETCH_DIM_R_INDEX_SPEC_CV_TMPVARCV)
				ZEND_FETCH_DIM_R_INDEX_SPEC_CV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_FETCH_DIM_R_INDEX_SPEC_CV_TMPVARCV)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_DIV_SPEC_CV_TMPVAR):
				VM_TRACE(ZEND_DIV_SPEC_CV_TMPVAR)
				ZEND_DIV_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_DIV_SPEC_CV_TMPVAR)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_POW_SPEC_CV_TMPVAR):
				VM_TRACE(ZEND_POW_SPEC_CV_TMPVAR)
				ZEND_POW_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_POW_SPEC_CV_TMPVAR)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_CONCAT_SPEC_CV_TMPVAR):
				VM_TRACE(ZEND_CONCAT_SPEC_CV_TMPVAR)
				ZEND_CONCAT_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_CONCAT_SPEC_CV_TMPVAR)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_IS_EQUAL_SPEC_CV_TMPVAR):
				VM_TRACE(ZEND_IS_EQUAL_SPEC_CV_TMPVAR)
				ZEND_IS_EQUAL_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_IS_EQUAL_SPEC_CV_TMPVAR)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_IS_EQUAL_SPEC_CV_TMPVAR_JMPZ):
				VM_TRACE(ZEND_IS_EQUAL_SPEC_CV_TMPVAR_JMPZ)
				ZEND_IS_EQUAL_SPEC_CV_TMPVAR_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_IS_EQUAL_SPEC_CV_TMPVAR_JMPZ)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_IS_EQUAL_SPEC_CV_TMPVAR_JMPNZ):
				VM_TRACE(ZEND_IS_EQUAL_SPEC_CV_TMPVAR_JMPNZ)
				ZEND_IS_EQUAL_SPEC_CV_TMPVAR_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_IS_EQUAL_SPEC_CV_TMPVAR_JMPNZ)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_IS_NOT_EQUAL_SPEC_CV_TMPVAR):
				VM_TRACE(ZEND_IS_NOT_EQUAL_SPEC_CV_TMPVAR)
				ZEND_IS_NOT_EQUAL_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_IS_NOT_EQUAL_SPEC_CV_TMPVAR)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_IS_NOT_EQUAL_SPEC_CV_TMPVAR_JMPZ):
				VM_TRACE(ZEND_IS_NOT_EQUAL_SPEC_CV_TMPVAR_JMPZ)
				ZEND_IS_NOT_EQUAL_SPEC_CV_TMPVAR_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_IS_NOT_EQUAL_SPEC_CV_TMPVAR_JMPZ)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_IS_NOT_EQUAL_SPEC_CV_TMPVAR_JMPNZ):
				VM_TRACE(ZEND_IS_NOT_EQUAL_SPEC_CV_TMPVAR_JMPNZ)
				ZEND_IS_NOT_EQUAL_SPEC_CV_TMPVAR_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_IS_NOT_EQUAL_SPEC_CV_TMPVAR_JMPNZ)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_SPACESHIP_SPEC_CV_TMPVAR):
				VM_TRACE(ZEND_SPACESHIP_SPEC_CV_TMPVAR)
				ZEND_SPACESHIP_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_SPACESHIP_SPEC_CV_TMPVAR)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_BOOL_XOR_SPEC_CV_TMPVAR):
				VM_TRACE(ZEND_BOOL_XOR_SPEC_CV_TMPVAR)
				ZEND_BOOL_XOR_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_BOOL_XOR_SPEC_CV_TMPVAR)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_ASSIGN_OBJ_OP_SPEC_CV_TMPVAR):
				VM_TRACE(ZEND_ASSIGN_OBJ_OP_SPEC_CV_TMPVAR)
				ZEND_ASSIGN_OBJ_OP_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_ASSIGN_OBJ_OP_SPEC_CV_TMPVAR)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_ASSIGN_DIM_OP_SPEC_CV_TMPVAR):
				VM_TRACE(ZEND_ASSIGN_DIM_OP_SPEC_CV_TMPVAR)
				ZEND_ASSIGN_DIM_OP_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_ASSIGN_DIM_OP_SPEC_CV_TMPVAR)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_ASSIGN_OP_SPEC_CV_TMPVAR):
				VM_TRACE(ZEND_ASSIGN_OP_SPEC_CV_TMPVAR)
				ZEND_ASSIGN_OP_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_ASSIGN_OP_SPEC_CV_TMPVAR)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_PRE_INC_OBJ_SPEC_CV_TMPVAR):
				VM_TRACE(ZEND_PRE_INC_OBJ_SPEC_CV_TMPVAR)
				ZEND_PRE_INC_OBJ_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_PRE_INC_OBJ_SPEC_CV_TMPVAR)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_POST_INC_OBJ_SPEC_CV_TMPVAR):
				VM_TRACE(ZEND_POST_INC_OBJ_SPEC_CV_TMPVAR)
				ZEND_POST_INC_OBJ_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_POST_INC_OBJ_SPEC_CV_TMPVAR)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_FETCH_DIM_R_SPEC_CV_TMPVAR):
				VM_TRACE(ZEND_FETCH_DIM_R_SPEC_CV_TMPVAR)
				ZEND_FETCH_DIM_R_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_FETCH_DIM_R_SPEC_CV_TMPVAR)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_FETCH_DIM_W_SPEC_CV_TMPVAR):
				VM_TRACE(ZEND_FETCH_DIM_W_SPEC_CV_TMPVAR)
				ZEND_FETCH_DIM_W_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_FETCH_DIM_W_SPEC_CV_TMPVAR)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_FETCH_DIM_RW_SPEC_CV_TMPVAR):
				VM_TRACE(ZEND_FETCH_DIM_RW_SPEC_CV_TMPVAR)
				ZEND_FETCH_DIM_RW_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_FETCH_DIM_RW_SPEC_CV_TMPVAR)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_FETCH_DIM_IS_SPEC_CV_TMPVAR):
				VM_TRACE(ZEND_FETCH_DIM_IS_SPEC_CV_TMPVAR)
				ZEND_FETCH_DIM_IS_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_FETCH_DIM_IS_SPEC_CV_TMPVAR)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_TMPVAR):
				VM_TRACE(ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_TMPVAR)
				ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_TMPVAR)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_FETCH_DIM_UNSET_SPEC_CV_TMPVAR):
				VM_TRACE(ZEND_FETCH_DIM_UNSET_SPEC_CV_TMPVAR)
				ZEND_FETCH_DIM_UNSET_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_FETCH_DIM_UNSET_SPEC_CV_TMPVAR)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_FETCH_OBJ_R_SPEC_CV_TMPVAR):
				VM_TRACE(ZEND_FETCH_OBJ_R_SPEC_CV_TMPVAR)
				ZEND_FETCH_OBJ_R_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_FETCH_OBJ_R_SPEC_CV_TMPVAR)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_FETCH_OBJ_W_SPEC_CV_TMPVAR):
				VM_TRACE(ZEND_FETCH_OBJ_W_SPEC_CV_TMPVAR)
				ZEND_FETCH_OBJ_W_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_FETCH_OBJ_W_SPEC_CV_TMPVAR)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_FETCH_OBJ_RW_SPEC_CV_TMPVAR):
				VM_TRACE(ZEND_FETCH_OBJ_RW_SPEC_CV_TMPVAR)
				ZEND_FETCH_OBJ_RW_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_FETCH_OBJ_RW_SPEC_CV_TMPVAR)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_FETCH_OBJ_IS_SPEC_CV_TMPVAR):
				VM_TRACE(ZEND_FETCH_OBJ_IS_SPEC_CV_TMPVAR)
				ZEND_FETCH_OBJ_IS_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_FETCH_OBJ_IS_SPEC_CV_TMPVAR)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CV_TMPVAR):
				VM_TRACE(ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CV_TMPVAR)
				ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CV_TMPVAR)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_FETCH_OBJ_UNSET_SPEC_CV_TMPVAR):
				VM_TRACE(ZEND_FETCH_OBJ_UNSET_SPEC_CV_TMPVAR)
				ZEND_FETCH_OBJ_UNSET_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_FETCH_OBJ_UNSET_SPEC_CV_TMPVAR)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_DATA_CONST):
				VM_TRACE(ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_DATA_CONST)
				ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_DATA_CONST)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_DATA_TMP):
				VM_TRACE(ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_DATA_TMP)
				ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_DATA_TMP)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_DATA_VAR):
				VM_TRACE(ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_DATA_VAR)
				ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_DATA_VAR)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_DATA_CV):
				VM_TRACE(ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_DATA_CV)
				ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_DATA_CV)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_DATA_CONST):
				VM_TRACE(ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_DATA_CONST)
				ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_DATA_CONST)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_DATA_TMP):
				VM_TRACE(ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_DATA_TMP)
				ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_DATA_TMP)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_DATA_VAR):
				VM_TRACE(ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_DATA_VAR)
				ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_DATA_VAR)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_DATA_CV):
				VM_TRACE(ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_DATA_CV)
				ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_DATA_CV)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_ASSIGN_OBJ_REF_SPEC_CV_TMPVAR_OP_DATA_VAR):
				VM_TRACE(ZEND_ASSIGN_OBJ_REF_SPEC_CV_TMPVAR_OP_DATA_VAR)
				ZEND_ASSIGN_OBJ_REF_SPEC_CV_TMPVAR_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_ASSIGN_OBJ_REF_SPEC_CV_TMPVAR_OP_DATA_VAR)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_ASSIGN_OBJ_REF_SPEC_CV_TMPVAR_OP_DATA_CV):
				VM_TRACE(ZEND_ASSIGN_OBJ_REF_SPEC_CV_TMPVAR_OP_DATA_CV)
				ZEND_ASSIGN_OBJ_REF_SPEC_CV_TMPVAR_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_ASSIGN_OBJ_REF_SPEC_CV_TMPVAR_OP_DATA_CV)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_FAST_CONCAT_SPEC_CV_TMPVAR):
				VM_TRACE(ZEND_FAST_CONCAT_SPEC_CV_TMPVAR)
				ZEND_FAST_CONCAT_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_FAST_CONCAT_SPEC_CV_TMPVAR)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_INIT_METHOD_CALL_SPEC_CV_TMPVAR):
				VM_TRACE(ZEND_INIT_METHOD_CALL_SPEC_CV_TMPVAR)
				ZEND_INIT_METHOD_CALL_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_INIT_METHOD_CALL_SPEC_CV_TMPVAR)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_TMPVAR):
				VM_TRACE(ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_TMPVAR)
				ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_TMPVAR)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_INIT_ARRAY_SPEC_CV_TMPVAR):
				VM_TRACE(ZEND_INIT_ARRAY_SPEC_CV_TMPVAR)
				ZEND_INIT_ARRAY_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_INIT_ARRAY_SPEC_CV_TMPVAR)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_UNSET_DIM_SPEC_CV_TMPVAR):
				VM_TRACE(ZEND_UNSET_DIM_SPEC_CV_TMPVAR)
				ZEND_UNSET_DIM_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_UNSET_DIM_SPEC_CV_TMPVAR)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_UNSET_OBJ_SPEC_CV_TMPVAR):
				VM_TRACE(ZEND_UNSET_OBJ_SPEC_CV_TMPVAR)
				ZEND_UNSET_OBJ_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_UNSET_OBJ_SPEC_CV_TMPVAR)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CV_TMPVAR):
				VM_TRACE(ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CV_TMPVAR)
				ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CV_TMPVAR)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CV_TMPVAR):
				VM_TRACE(ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CV_TMPVAR)
				ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CV_TMPVAR)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_ARRAY_KEY_EXISTS_SPEC_CV_TMPVAR):
				VM_TRACE(ZEND_ARRAY_KEY_EXISTS_SPEC_CV_TMPVAR)
				ZEND_ARRAY_KEY_EXISTS_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_ARRAY_KEY_EXISTS_SPEC_CV_TMPVAR)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_YIELD_SPEC_CV_TMPVAR):
				VM_TRACE(ZEND_YIELD_SPEC_CV_TMPVAR)
				ZEND_YIELD_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_YIELD_SPEC_CV_TMPVAR)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_IS_IDENTICAL_SPEC_CV_TMP):
				VM_TRACE(ZEND_IS_IDENTICAL_SPEC_CV_TMP)
				ZEND_IS_IDENTICAL_SPEC_CV_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_IS_IDENTICAL_SPEC_CV_TMP)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_IS_NOT_IDENTICAL_SPEC_CV_TMP):
				VM_TRACE(ZEND_IS_NOT_IDENTICAL_SPEC_CV_TMP)
				ZEND_IS_NOT_IDENTICAL_SPEC_CV_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_IS_NOT_IDENTICAL_SPEC_CV_TMP)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_ASSIGN_SPEC_CV_TMP_RETVAL_UNUSED):
				VM_TRACE(ZEND_ASSIGN_SPEC_CV_TMP_RETVAL_UNUSED)
				ZEND_ASSIGN_SPEC_CV_TMP_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_ASSIGN_SPEC_CV_TMP_RETVAL_UNUSED)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_ASSIGN_SPEC_CV_TMP_RETVAL_USED):
				VM_TRACE(ZEND_ASSIGN_SPEC_CV_TMP_RETVAL_USED)
				ZEND_ASSIGN_SPEC_CV_TMP_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_ASSIGN_SPEC_CV_TMP_RETVAL_USED)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_IS_IDENTICAL_SPEC_CV_VAR):
				VM_TRACE(ZEND_IS_IDENTICAL_SPEC_CV_VAR)
				ZEND_IS_IDENTICAL_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_IS_IDENTICAL_SPEC_CV_VAR)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_IS_NOT_IDENTICAL_SPEC_CV_VAR):
				VM_TRACE(ZEND_IS_NOT_IDENTICAL_SPEC_CV_VAR)
				ZEND_IS_NOT_IDENTICAL_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_IS_NOT_IDENTICAL_SPEC_CV_VAR)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_ASSIGN_SPEC_CV_VAR_RETVAL_UNUSED):
				VM_TRACE(ZEND_ASSIGN_SPEC_CV_VAR_RETVAL_UNUSED)
				ZEND_ASSIGN_SPEC_CV_VAR_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_ASSIGN_SPEC_CV_VAR_RETVAL_UNUSED)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_ASSIGN_SPEC_CV_VAR_RETVAL_USED):
				VM_TRACE(ZEND_ASSIGN_SPEC_CV_VAR_RETVAL_USED)
				ZEND_ASSIGN_SPEC_CV_VAR_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_ASSIGN_SPEC_CV_VAR_RETVAL_USED)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_ASSIGN_REF_SPEC_CV_VAR):
				VM_TRACE(ZEND_ASSIGN_REF_SPEC_CV_VAR)
				ZEND_ASSIGN_REF_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_ASSIGN_REF_SPEC_CV_VAR)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_INSTANCEOF_SPEC_CV_VAR):
				VM_TRACE(ZEND_INSTANCEOF_SPEC_CV_VAR)
				ZEND_INSTANCEOF_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_INSTANCEOF_SPEC_CV_VAR)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_ASSIGN_DIM_OP_SPEC_CV_UNUSED):
				VM_TRACE(ZEND_ASSIGN_DIM_OP_SPEC_CV_UNUSED)
				ZEND_ASSIGN_DIM_OP_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_ASSIGN_DIM_OP_SPEC_CV_UNUSED)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_FETCH_R_SPEC_CV_UNUSED):
				VM_TRACE(ZEND_FETCH_R_SPEC_CV_UNUSED)
				ZEND_FETCH_R_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_FETCH_R_SPEC_CV_UNUSED)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_FETCH_W_SPEC_CV_UNUSED):
				VM_TRACE(ZEND_FETCH_W_SPEC_CV_UNUSED)
				ZEND_FETCH_W_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_FETCH_W_SPEC_CV_UNUSED)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_FETCH_RW_SPEC_CV_UNUSED):
				VM_TRACE(ZEND_FETCH_RW_SPEC_CV_UNUSED)
				ZEND_FETCH_RW_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_FETCH_RW_SPEC_CV_UNUSED)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_FETCH_FUNC_ARG_SPEC_CV_UNUSED):
				VM_TRACE(ZEND_FETCH_FUNC_ARG_SPEC_CV_UNUSED)
				ZEND_FETCH_FUNC_ARG_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_FETCH_FUNC_ARG_SPEC_CV_UNUSED)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_FETCH_UNSET_SPEC_CV_UNUSED):
				VM_TRACE(ZEND_FETCH_UNSET_SPEC_CV_UNUSED)
				ZEND_FETCH_UNSET_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_FETCH_UNSET_SPEC_CV_UNUSED)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_FETCH_IS_SPEC_CV_UNUSED):
				VM_TRACE(ZEND_FETCH_IS_SPEC_CV_UNUSED)
				ZEND_FETCH_IS_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_FETCH_IS_SPEC_CV_UNUSED)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_FETCH_DIM_W_SPEC_CV_UNUSED):
				VM_TRACE(ZEND_FETCH_DIM_W_SPEC_CV_UNUSED)
				ZEND_FETCH_DIM_W_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_FETCH_DIM_W_SPEC_CV_UNUSED)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_FETCH_DIM_RW_SPEC_CV_UNUSED):
				VM_TRACE(ZEND_FETCH_DIM_RW_SPEC_CV_UNUSED)
				ZEND_FETCH_DIM_RW_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_FETCH_DIM_RW_SPEC_CV_UNUSED)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_UNUSED):
				VM_TRACE(ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_UNUSED)
				ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_UNUSED)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_ASSIGN_DIM_SPEC_CV_UNUSED_OP_DATA_CONST):
				VM_TRACE(ZEND_ASSIGN_DIM_SPEC_CV_UNUSED_OP_DATA_CONST)
				ZEND_ASSIGN_DIM_SPEC_CV_UNUSED_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_ASSIGN_DIM_SPEC_CV_UNUSED_OP_DATA_CONST)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_ASSIGN_DIM_SPEC_CV_UNUSED_OP_DATA_TMP):
				VM_TRACE(ZEND_ASSIGN_DIM_SPEC_CV_UNUSED_OP_DATA_TMP)
				ZEND_ASSIGN_DIM_SPEC_CV_UNUSED_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_ASSIGN_DIM_SPEC_CV_UNUSED_OP_DATA_TMP)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_ASSIGN_DIM_SPEC_CV_UNUSED_OP_DATA_VAR):
				VM_TRACE(ZEND_ASSIGN_DIM_SPEC_CV_UNUSED_OP_DATA_VAR)
				ZEND_ASSIGN_DIM_SPEC_CV_UNUSED_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_ASSIGN_DIM_SPEC_CV_UNUSED_OP_DATA_VAR)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_ASSIGN_DIM_SPEC_CV_UNUSED_OP_DATA_CV):
				VM_TRACE(ZEND_ASSIGN_DIM_SPEC_CV_UNUSED_OP_DATA_CV)
				ZEND_ASSIGN_DIM_SPEC_CV_UNUSED_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_ASSIGN_DIM_SPEC_CV_UNUSED_OP_DATA_CV)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_VERIFY_RETURN_TYPE_SPEC_CV_UNUSED):
				VM_TRACE(ZEND_VERIFY_RETURN_TYPE_SPEC_CV_UNUSED)
				ZEND_VERIFY_RETURN_TYPE_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_VERIFY_RETURN_TYPE_SPEC_CV_UNUSED)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_SEND_VAR_SPEC_CV_UNUSED):
				VM_TRACE(ZEND_SEND_VAR_SPEC_CV_UNUSED)
				ZEND_SEND_VAR_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_SEND_VAR_SPEC_CV_UNUSED)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_SEND_REF_SPEC_CV_UNUSED):
				VM_TRACE(ZEND_SEND_REF_SPEC_CV_UNUSED)
				ZEND_SEND_REF_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_SEND_REF_SPEC_CV_UNUSED)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_SEND_VAR_EX_SPEC_CV_UNUSED):
				VM_TRACE(ZEND_SEND_VAR_EX_SPEC_CV_UNUSED)
				ZEND_SEND_VAR_EX_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_SEND_VAR_EX_SPEC_CV_UNUSED)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_SEND_VAR_EX_SPEC_CV_UNUSED_QUICK):
				VM_TRACE(ZEND_SEND_VAR_EX_SPEC_CV_UNUSED_QUICK)
				ZEND_SEND_VAR_EX_SPEC_CV_UNUSED_QUICK_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_SEND_VAR_EX_SPEC_CV_UNUSED_QUICK)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_UNUSED):
				VM_TRACE(ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_UNUSED)
				ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_UNUSED)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_INIT_ARRAY_SPEC_CV_UNUSED):
				VM_TRACE(ZEND_INIT_ARRAY_SPEC_CV_UNUSED)
				ZEND_INIT_ARRAY_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_INIT_ARRAY_SPEC_CV_UNUSED)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_UNSET_CV_SPEC_CV_UNUSED):
				VM_TRACE(ZEND_UNSET_CV_SPEC_CV_UNUSED)
				ZEND_UNSET_CV_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_UNSET_CV_SPEC_CV_UNUSED)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_UNSET_VAR_SPEC_CV_UNUSED):
				VM_TRACE(ZEND_UNSET_VAR_SPEC_CV_UNUSED)
				ZEND_UNSET_VAR_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_UNSET_VAR_SPEC_CV_UNUSED)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_ISSET_ISEMPTY_CV_SPEC_CV_UNUSED_SET):
				VM_TRACE(ZEND_ISSET_ISEMPTY_CV_SPEC_CV_UNUSED_SET)
				ZEND_ISSET_ISEMPTY_CV_SPEC_CV_UNUSED_SET_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_ISSET_ISEMPTY_CV_SPEC_CV_UNUSED_SET)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_ISSET_ISEMPTY_CV_SPEC_CV_UNUSED_EMPTY):
				VM_TRACE(ZEND_ISSET_ISEMPTY_CV_SPEC_CV_UNUSED_EMPTY)
				ZEND_ISSET_ISEMPTY_CV_SPEC_CV_UNUSED_EMPTY_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_ISSET_ISEMPTY_CV_SPEC_CV_UNUSED_EMPTY)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_ISSET_ISEMPTY_VAR_SPEC_CV_UNUSED):
				VM_TRACE(ZEND_ISSET_ISEMPTY_VAR_SPEC_CV_UNUSED)
				ZEND_ISSET_ISEMPTY_VAR_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_ISSET_ISEMPTY_VAR_SPEC_CV_UNUSED)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_INSTANCEOF_SPEC_CV_UNUSED):
				VM_TRACE(ZEND_INSTANCEOF_SPEC_CV_UNUSED)
				ZEND_INSTANCEOF_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_INSTANCEOF_SPEC_CV_UNUSED)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_YIELD_SPEC_CV_UNUSED):
				VM_TRACE(ZEND_YIELD_SPEC_CV_UNUSED)
				ZEND_YIELD_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_YIELD_SPEC_CV_UNUSED)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_CHECK_VAR_SPEC_CV_UNUSED):
				VM_TRACE(ZEND_CHECK_VAR_SPEC_CV_UNUSED)
				ZEND_CHECK_VAR_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_CHECK_VAR_SPEC_CV_UNUSED)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_MAKE_REF_SPEC_CV_UNUSED):
				VM_TRACE(ZEND_MAKE_REF_SPEC_CV_UNUSED)
				ZEND_MAKE_REF_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_MAKE_REF_SPEC_CV_UNUSED)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_COUNT_SPEC_CV_UNUSED):
				VM_TRACE(ZEND_COUNT_SPEC_CV_UNUSED)
				ZEND_COUNT_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_COUNT_SPEC_CV_UNUSED)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_COUNT_ARRAY_SPEC_CV_UNUSED):
				VM_TRACE(ZEND_COUNT_ARRAY_SPEC_CV_UNUSED)
				ZEND_COUNT_ARRAY_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_COUNT_ARRAY_SPEC_CV_UNUSED)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_GET_CLASS_SPEC_CV_UNUSED):
				VM_TRACE(ZEND_GET_CLASS_SPEC_CV_UNUSED)
				ZEND_GET_CLASS_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_GET_CLASS_SPEC_CV_UNUSED)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_GET_TYPE_SPEC_CV_UNUSED):
				VM_TRACE(ZEND_GET_TYPE_SPEC_CV_UNUSED)
				ZEND_GET_TYPE_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_GET_TYPE_SPEC_CV_UNUSED)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_SEND_VAR_EX_SIMPLE_SPEC_CV_UNUSED):
				VM_TRACE(ZEND_SEND_VAR_EX_SIMPLE_SPEC_CV_UNUSED)
				ZEND_SEND_VAR_EX_SIMPLE_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_SEND_VAR_EX_SIMPLE_SPEC_CV_UNUSED)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_DIV_SPEC_CV_CV):
				VM_TRACE(ZEND_DIV_SPEC_CV_CV)
				ZEND_DIV_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_DIV_SPEC_CV_CV)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_POW_SPEC_CV_CV):
				VM_TRACE(ZEND_POW_SPEC_CV_CV)
				ZEND_POW_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_POW_SPEC_CV_CV)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_CONCAT_SPEC_CV_CV):
				VM_TRACE(ZEND_CONCAT_SPEC_CV_CV)
				ZEND_CONCAT_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_CONCAT_SPEC_CV_CV)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_IS_IDENTICAL_SPEC_CV_CV):
				VM_TRACE(ZEND_IS_IDENTICAL_SPEC_CV_CV)
				ZEND_IS_IDENTICAL_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_IS_IDENTICAL_SPEC_CV_CV)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_IS_NOT_IDENTICAL_SPEC_CV_CV):
				VM_TRACE(ZEND_IS_NOT_IDENTICAL_SPEC_CV_CV)
				ZEND_IS_NOT_IDENTICAL_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_IS_NOT_IDENTICAL_SPEC_CV_CV)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_IS_EQUAL_SPEC_CV_CV):
				VM_TRACE(ZEND_IS_EQUAL_SPEC_CV_CV)
				ZEND_IS_EQUAL_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_IS_EQUAL_SPEC_CV_CV)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_IS_EQUAL_SPEC_CV_CV_JMPZ):
				VM_TRACE(ZEND_IS_EQUAL_SPEC_CV_CV_JMPZ)
				ZEND_IS_EQUAL_SPEC_CV_CV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_IS_EQUAL_SPEC_CV_CV_JMPZ)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_IS_EQUAL_SPEC_CV_CV_JMPNZ):
				VM_TRACE(ZEND_IS_EQUAL_SPEC_CV_CV_JMPNZ)
				ZEND_IS_EQUAL_SPEC_CV_CV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_IS_EQUAL_SPEC_CV_CV_JMPNZ)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_IS_NOT_EQUAL_SPEC_CV_CV):
				VM_TRACE(ZEND_IS_NOT_EQUAL_SPEC_CV_CV)
				ZEND_IS_NOT_EQUAL_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_IS_NOT_EQUAL_SPEC_CV_CV)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_IS_NOT_EQUAL_SPEC_CV_CV_JMPZ):
				VM_TRACE(ZEND_IS_NOT_EQUAL_SPEC_CV_CV_JMPZ)
				ZEND_IS_NOT_EQUAL_SPEC_CV_CV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_IS_NOT_EQUAL_SPEC_CV_CV_JMPZ)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_IS_NOT_EQUAL_SPEC_CV_CV_JMPNZ):
				VM_TRACE(ZEND_IS_NOT_EQUAL_SPEC_CV_CV_JMPNZ)
				ZEND_IS_NOT_EQUAL_SPEC_CV_CV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_IS_NOT_EQUAL_SPEC_CV_CV_JMPNZ)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_SPACESHIP_SPEC_CV_CV):
				VM_TRACE(ZEND_SPACESHIP_SPEC_CV_CV)
				ZEND_SPACESHIP_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_SPACESHIP_SPEC_CV_CV)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_BOOL_XOR_SPEC_CV_CV):
				VM_TRACE(ZEND_BOOL_XOR_SPEC_CV_CV)
				ZEND_BOOL_XOR_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_BOOL_XOR_SPEC_CV_CV)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_ASSIGN_OBJ_OP_SPEC_CV_CV):
				VM_TRACE(ZEND_ASSIGN_OBJ_OP_SPEC_CV_CV)
				ZEND_ASSIGN_OBJ_OP_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_ASSIGN_OBJ_OP_SPEC_CV_CV)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_ASSIGN_DIM_OP_SPEC_CV_CV):
				VM_TRACE(ZEND_ASSIGN_DIM_OP_SPEC_CV_CV)
				ZEND_ASSIGN_DIM_OP_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_ASSIGN_DIM_OP_SPEC_CV_CV)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_ASSIGN_OP_SPEC_CV_CV):
				VM_TRACE(ZEND_ASSIGN_OP_SPEC_CV_CV)
				ZEND_ASSIGN_OP_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_ASSIGN_OP_SPEC_CV_CV)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_PRE_INC_OBJ_SPEC_CV_CV):
				VM_TRACE(ZEND_PRE_INC_OBJ_SPEC_CV_CV)
				ZEND_PRE_INC_OBJ_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_PRE_INC_OBJ_SPEC_CV_CV)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_POST_INC_OBJ_SPEC_CV_CV):
				VM_TRACE(ZEND_POST_INC_OBJ_SPEC_CV_CV)
				ZEND_POST_INC_OBJ_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_POST_INC_OBJ_SPEC_CV_CV)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_FETCH_DIM_R_SPEC_CV_CV):
				VM_TRACE(ZEND_FETCH_DIM_R_SPEC_CV_CV)
				ZEND_FETCH_DIM_R_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_FETCH_DIM_R_SPEC_CV_CV)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_FETCH_DIM_W_SPEC_CV_CV):
				VM_TRACE(ZEND_FETCH_DIM_W_SPEC_CV_CV)
				ZEND_FETCH_DIM_W_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_FETCH_DIM_W_SPEC_CV_CV)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_FETCH_DIM_RW_SPEC_CV_CV):
				VM_TRACE(ZEND_FETCH_DIM_RW_SPEC_CV_CV)
				ZEND_FETCH_DIM_RW_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_FETCH_DIM_RW_SPEC_CV_CV)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_FETCH_DIM_IS_SPEC_CV_CV):
				VM_TRACE(ZEND_FETCH_DIM_IS_SPEC_CV_CV)
				ZEND_FETCH_DIM_IS_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_FETCH_DIM_IS_SPEC_CV_CV)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_CV):
				VM_TRACE(ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_CV)
				ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_CV)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_FETCH_DIM_UNSET_SPEC_CV_CV):
				VM_TRACE(ZEND_FETCH_DIM_UNSET_SPEC_CV_CV)
				ZEND_FETCH_DIM_UNSET_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_FETCH_DIM_UNSET_SPEC_CV_CV)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_FETCH_OBJ_R_SPEC_CV_CV):
				VM_TRACE(ZEND_FETCH_OBJ_R_SPEC_CV_CV)
				ZEND_FETCH_OBJ_R_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_FETCH_OBJ_R_SPEC_CV_CV)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_FETCH_OBJ_W_SPEC_CV_CV):
				VM_TRACE(ZEND_FETCH_OBJ_W_SPEC_CV_CV)
				ZEND_FETCH_OBJ_W_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_FETCH_OBJ_W_SPEC_CV_CV)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_FETCH_OBJ_RW_SPEC_CV_CV):
				VM_TRACE(ZEND_FETCH_OBJ_RW_SPEC_CV_CV)
				ZEND_FETCH_OBJ_RW_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_FETCH_OBJ_RW_SPEC_CV_CV)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_FETCH_OBJ_IS_SPEC_CV_CV):
				VM_TRACE(ZEND_FETCH_OBJ_IS_SPEC_CV_CV)
				ZEND_FETCH_OBJ_IS_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_FETCH_OBJ_IS_SPEC_CV_CV)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CV_CV):
				VM_TRACE(ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CV_CV)
				ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CV_CV)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_FETCH_OBJ_UNSET_SPEC_CV_CV):
				VM_TRACE(ZEND_FETCH_OBJ_UNSET_SPEC_CV_CV)
				ZEND_FETCH_OBJ_UNSET_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_FETCH_OBJ_UNSET_SPEC_CV_CV)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_CV_CV_OP_DATA_CONST):
				VM_TRACE(ZEND_ASSIGN_OBJ_SPEC_CV_CV_OP_DATA_CONST)
				ZEND_ASSIGN_OBJ_SPEC_CV_CV_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_ASSIGN_OBJ_SPEC_CV_CV_OP_DATA_CONST)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_CV_CV_OP_DATA_TMP):
				VM_TRACE(ZEND_ASSIGN_OBJ_SPEC_CV_CV_OP_DATA_TMP)
				ZEND_ASSIGN_OBJ_SPEC_CV_CV_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_ASSIGN_OBJ_SPEC_CV_CV_OP_DATA_TMP)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_CV_CV_OP_DATA_VAR):
				VM_TRACE(ZEND_ASSIGN_OBJ_SPEC_CV_CV_OP_DATA_VAR)
				ZEND_ASSIGN_OBJ_SPEC_CV_CV_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_ASSIGN_OBJ_SPEC_CV_CV_OP_DATA_VAR)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_CV_CV_OP_DATA_CV):
				VM_TRACE(ZEND_ASSIGN_OBJ_SPEC_CV_CV_OP_DATA_CV)
				ZEND_ASSIGN_OBJ_SPEC_CV_CV_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_ASSIGN_OBJ_SPEC_CV_CV_OP_DATA_CV)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_ASSIGN_DIM_SPEC_CV_CV_OP_DATA_CONST):
				VM_TRACE(ZEND_ASSIGN_DIM_SPEC_CV_CV_OP_DATA_CONST)
				ZEND_ASSIGN_DIM_SPEC_CV_CV_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_ASSIGN_DIM_SPEC_CV_CV_OP_DATA_CONST)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_ASSIGN_DIM_SPEC_CV_CV_OP_DATA_TMP):
				VM_TRACE(ZEND_ASSIGN_DIM_SPEC_CV_CV_OP_DATA_TMP)
				ZEND_ASSIGN_DIM_SPEC_CV_CV_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_ASSIGN_DIM_SPEC_CV_CV_OP_DATA_TMP)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_ASSIGN_DIM_SPEC_CV_CV_OP_DATA_VAR):
				VM_TRACE(ZEND_ASSIGN_DIM_SPEC_CV_CV_OP_DATA_VAR)
				ZEND_ASSIGN_DIM_SPEC_CV_CV_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_ASSIGN_DIM_SPEC_CV_CV_OP_DATA_VAR)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_ASSIGN_DIM_SPEC_CV_CV_OP_DATA_CV):
				VM_TRACE(ZEND_ASSIGN_DIM_SPEC_CV_CV_OP_DATA_CV)
				ZEND_ASSIGN_DIM_SPEC_CV_CV_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_ASSIGN_DIM_SPEC_CV_CV_OP_DATA_CV)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_ASSIGN_SPEC_CV_CV_RETVAL_UNUSED):
				VM_TRACE(ZEND_ASSIGN_SPEC_CV_CV_RETVAL_UNUSED)
				ZEND_ASSIGN_SPEC_CV_CV_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_ASSIGN_SPEC_CV_CV_RETVAL_UNUSED)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_ASSIGN_SPEC_CV_CV_RETVAL_USED):
				VM_TRACE(ZEND_ASSIGN_SPEC_CV_CV_RETVAL_USED)
				ZEND_ASSIGN_SPEC_CV_CV_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_ASSIGN_SPEC_CV_CV_RETVAL_USED)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_ASSIGN_REF_SPEC_CV_CV):
				VM_TRACE(ZEND_ASSIGN_REF_SPEC_CV_CV)
				ZEND_ASSIGN_REF_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_ASSIGN_REF_SPEC_CV_CV)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_ASSIGN_OBJ_REF_SPEC_CV_CV_OP_DATA_VAR):
				VM_TRACE(ZEND_ASSIGN_OBJ_REF_SPEC_CV_CV_OP_DATA_VAR)
				ZEND_ASSIGN_OBJ_REF_SPEC_CV_CV_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_ASSIGN_OBJ_REF_SPEC_CV_CV_OP_DATA_VAR)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_ASSIGN_OBJ_REF_SPEC_CV_CV_OP_DATA_CV):
				VM_TRACE(ZEND_ASSIGN_OBJ_REF_SPEC_CV_CV_OP_DATA_CV)
				ZEND_ASSIGN_OBJ_REF_SPEC_CV_CV_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_ASSIGN_OBJ_REF_SPEC_CV_CV_OP_DATA_CV)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_FAST_CONCAT_SPEC_CV_CV):
				VM_TRACE(ZEND_FAST_CONCAT_SPEC_CV_CV)
				ZEND_FAST_CONCAT_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_FAST_CONCAT_SPEC_CV_CV)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_INIT_METHOD_CALL_SPEC_CV_CV):
				VM_TRACE(ZEND_INIT_METHOD_CALL_SPEC_CV_CV)
				ZEND_INIT_METHOD_CALL_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_INIT_METHOD_CALL_SPEC_CV_CV)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_CV):
				VM_TRACE(ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_CV)
				ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_CV)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_INIT_ARRAY_SPEC_CV_CV):
				VM_TRACE(ZEND_INIT_ARRAY_SPEC_CV_CV)
				ZEND_INIT_ARRAY_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_INIT_ARRAY_SPEC_CV_CV)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_UNSET_DIM_SPEC_CV_CV):
				VM_TRACE(ZEND_UNSET_DIM_SPEC_CV_CV)
				ZEND_UNSET_DIM_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_UNSET_DIM_SPEC_CV_CV)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_UNSET_OBJ_SPEC_CV_CV):
				VM_TRACE(ZEND_UNSET_OBJ_SPEC_CV_CV)
				ZEND_UNSET_OBJ_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_UNSET_OBJ_SPEC_CV_CV)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CV_CV):
				VM_TRACE(ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CV_CV)
				ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CV_CV)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CV_CV):
				VM_TRACE(ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CV_CV)
				ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CV_CV)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_ARRAY_KEY_EXISTS_SPEC_CV_CV):
				VM_TRACE(ZEND_ARRAY_KEY_EXISTS_SPEC_CV_CV)
				ZEND_ARRAY_KEY_EXISTS_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_ARRAY_KEY_EXISTS_SPEC_CV_CV)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_YIELD_SPEC_CV_CV):
				VM_TRACE(ZEND_YIELD_SPEC_CV_CV)
				ZEND_YIELD_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_YIELD_SPEC_CV_CV)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_IS_IDENTICAL_NOTHROW_SPEC_CV_CV):
				VM_TRACE(ZEND_IS_IDENTICAL_NOTHROW_SPEC_CV_CV)
				ZEND_IS_IDENTICAL_NOTHROW_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_IS_IDENTICAL_NOTHROW_SPEC_CV_CV)
				HYBRID_BREAK();
			HYBRID_CASE(ZEND_IS_NOT_IDENTICAL_NOTHROW_SPEC_CV_CV):
				VM_TRACE(ZEND_IS_NOT_IDENTICAL_NOTHROW_SPEC_CV_CV)
				ZEND_IS_NOT_IDENTICAL_NOTHROW_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_IS_NOT_IDENTICAL_NOTHROW_SPEC_CV_CV)
				HYBRID_BREAK();
			HYBRID_CASE(HYBRID_HALT):
#ifdef ZEND_VM_FP_GLOBAL_REG
				execute_data = vm_stack_data.orig_execute_data;
#endif
#ifdef ZEND_VM_IP_GLOBAL_REG
				opline = vm_stack_data.orig_opline;
#endif
				return;
			HYBRID_DEFAULT:
				VM_TRACE(ZEND_NULL)
				ZEND_NULL_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
				VM_TRACE_OP_END(ZEND_NULL)
				HYBRID_BREAK(); /* Never reached */
#else /* ZEND_VM_KIND != ZEND_VM_KIND_HYBRID */
#ifdef ZEND_VM_FP_GLOBAL_REG
			execute_data = vm_stack_data.orig_execute_data;
# ifdef ZEND_VM_IP_GLOBAL_REG
			opline = vm_stack_data.orig_opline;
# endif
			return;
#else
			opline = (const zend_op*)((uintptr_t)opline & ~ZEND_VM_ENTER_BIT);
			if (EXPECTED(opline != NULL)) {
				execute_data = EG(current_execute_data);
				ZEND_VM_LOOP_INTERRUPT_CHECK();
			} else {
# ifdef ZEND_VM_IP_GLOBAL_REG
				opline = vm_stack_data.orig_opline;
# endif
				return;
			}
#endif
#endif /* ZEND_VM_KIND != ZEND_VM_KIND_HYBRID */
		}

	}
	zend_error_noreturn(E_CORE_ERROR, "Arrived at end of main loop which shouldn't happen");
}
#if (ZEND_VM_KIND != ZEND_VM_KIND_CALL) && (ZEND_GCC_VERSION >= 4000) && !defined(__clang__)
# pragma GCC pop_options
#endif

ZEND_API void zend_execute(zend_op_array *op_array, zval *return_value)
{
	zend_execute_data *execute_data;
	void *object_or_called_scope;
	uint32_t call_info;

	if (EG(exception) != NULL) {
		return;
	}

	object_or_called_scope = zend_get_this_object(EG(current_execute_data));
	if (EXPECTED(!object_or_called_scope)) {
		object_or_called_scope = zend_get_called_scope(EG(current_execute_data));
		call_info = ZEND_CALL_TOP_CODE | ZEND_CALL_HAS_SYMBOL_TABLE;
	} else {
		call_info = ZEND_CALL_TOP_CODE | ZEND_CALL_HAS_SYMBOL_TABLE | ZEND_CALL_HAS_THIS;
	}
	execute_data = zend_vm_stack_push_call_frame(call_info,
		(zend_function*)op_array, 0, object_or_called_scope);
	if (EG(current_execute_data)) {
		execute_data->symbol_table = zend_rebuild_symbol_table();
	} else {
		execute_data->symbol_table = &EG(symbol_table);
	}
	EX(prev_execute_data) = EG(current_execute_data);
	i_init_code_execute_data(execute_data, op_array, return_value);
	ZEND_OBSERVER_FCALL_BEGIN(execute_data);
	zend_execute_ex(execute_data);
	/* Observer end handlers are called from ZEND_RETURN */
	zend_vm_stack_free_call_frame(execute_data);
}


void zend_vm_init(void)
{
	static zend_vm_opcode_handler_func_t const funcs[] = {
		ZEND_NOP_SPEC_HANDLER,
		ZEND_ADD_SPEC_CONST_CONST_HANDLER,
		ZEND_ADD_SPEC_CONST_TMPVARCV_HANDLER,
		ZEND_ADD_SPEC_CONST_TMPVARCV_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_ADD_SPEC_CONST_TMPVARCV_HANDLER,
		ZEND_ADD_SPEC_TMPVARCV_CONST_HANDLER,
		ZEND_ADD_SPEC_TMPVARCV_TMPVARCV_HANDLER,
		ZEND_ADD_SPEC_TMPVARCV_TMPVARCV_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_ADD_SPEC_TMPVARCV_TMPVARCV_HANDLER,
		ZEND_ADD_SPEC_TMPVARCV_CONST_HANDLER,
		ZEND_ADD_SPEC_TMPVARCV_TMPVARCV_HANDLER,
		ZEND_ADD_SPEC_TMPVARCV_TMPVARCV_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_ADD_SPEC_TMPVARCV_TMPVARCV_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_ADD_SPEC_TMPVARCV_CONST_HANDLER,
		ZEND_ADD_SPEC_TMPVARCV_TMPVARCV_HANDLER,
		ZEND_ADD_SPEC_TMPVARCV_TMPVARCV_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_ADD_SPEC_TMPVARCV_TMPVARCV_HANDLER,
		ZEND_SUB_SPEC_CONST_CONST_HANDLER,
		ZEND_SUB_SPEC_CONST_TMPVARCV_HANDLER,
		ZEND_SUB_SPEC_CONST_TMPVARCV_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_SUB_SPEC_CONST_TMPVARCV_HANDLER,
		ZEND_SUB_SPEC_TMPVARCV_CONST_HANDLER,
		ZEND_SUB_SPEC_TMPVARCV_TMPVARCV_HANDLER,
		ZEND_SUB_SPEC_TMPVARCV_TMPVARCV_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_SUB_SPEC_TMPVARCV_TMPVARCV_HANDLER,
		ZEND_SUB_SPEC_TMPVARCV_CONST_HANDLER,
		ZEND_SUB_SPEC_TMPVARCV_TMPVARCV_HANDLER,
		ZEND_SUB_SPEC_TMPVARCV_TMPVARCV_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_SUB_SPEC_TMPVARCV_TMPVARCV_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_SUB_SPEC_TMPVARCV_CONST_HANDLER,
		ZEND_SUB_SPEC_TMPVARCV_TMPVARCV_HANDLER,
		ZEND_SUB_SPEC_TMPVARCV_TMPVARCV_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_SUB_SPEC_TMPVARCV_TMPVARCV_HANDLER,
		ZEND_MUL_SPEC_CONST_CONST_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_MUL_SPEC_TMPVARCV_CONST_HANDLER,
		ZEND_MUL_SPEC_TMPVARCV_TMPVARCV_HANDLER,
		ZEND_MUL_SPEC_TMPVARCV_TMPVARCV_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_MUL_SPEC_TMPVARCV_TMPVARCV_HANDLER,
		ZEND_MUL_SPEC_TMPVARCV_CONST_HANDLER,
		ZEND_MUL_SPEC_TMPVARCV_TMPVARCV_HANDLER,
		ZEND_MUL_SPEC_TMPVARCV_TMPVARCV_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_MUL_SPEC_TMPVARCV_TMPVARCV_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_MUL_SPEC_TMPVARCV_CONST_HANDLER,
		ZEND_MUL_SPEC_TMPVARCV_TMPVARCV_HANDLER,
		ZEND_MUL_SPEC_TMPVARCV_TMPVARCV_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_MUL_SPEC_TMPVARCV_TMPVARCV_HANDLER,
		ZEND_DIV_SPEC_CONST_CONST_HANDLER,
		ZEND_DIV_SPEC_CONST_TMPVAR_HANDLER,
		ZEND_DIV_SPEC_CONST_TMPVAR_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_DIV_SPEC_CONST_CV_HANDLER,
		ZEND_DIV_SPEC_TMPVAR_CONST_HANDLER,
		ZEND_DIV_SPEC_TMPVAR_TMPVAR_HANDLER,
		ZEND_DIV_SPEC_TMPVAR_TMPVAR_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_DIV_SPEC_TMPVAR_CV_HANDLER,
		ZEND_DIV_SPEC_TMPVAR_CONST_HANDLER,
		ZEND_DIV_SPEC_TMPVAR_TMPVAR_HANDLER,
		ZEND_DIV_SPEC_TMPVAR_TMPVAR_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_DIV_SPEC_TMPVAR_CV_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_DIV_SPEC_CV_CONST_HANDLER,
		ZEND_DIV_SPEC_CV_TMPVAR_HANDLER,
		ZEND_DIV_SPEC_CV_TMPVAR_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_DIV_SPEC_CV_CV_HANDLER,
		ZEND_MOD_SPEC_CONST_CONST_HANDLER,
		ZEND_MOD_SPEC_CONST_TMPVARCV_HANDLER,
		ZEND_MOD_SPEC_CONST_TMPVARCV_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_MOD_SPEC_CONST_TMPVARCV_HANDLER,
		ZEND_MOD_SPEC_TMPVARCV_CONST_HANDLER,
		ZEND_MOD_SPEC_TMPVARCV_TMPVARCV_HANDLER,
		ZEND_MOD_SPEC_TMPVARCV_TMPVARCV_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_MOD_SPEC_TMPVARCV_TMPVARCV_HANDLER,
		ZEND_MOD_SPEC_TMPVARCV_CONST_HANDLER,
		ZEND_MOD_SPEC_TMPVARCV_TMPVARCV_HANDLER,
		ZEND_MOD_SPEC_TMPVARCV_TMPVARCV_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_MOD_SPEC_TMPVARCV_TMPVARCV_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_MOD_SPEC_TMPVARCV_CONST_HANDLER,
		ZEND_MOD_SPEC_TMPVARCV_TMPVARCV_HANDLER,
		ZEND_MOD_SPEC_TMPVARCV_TMPVARCV_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_MOD_SPEC_TMPVARCV_TMPVARCV_HANDLER,
		ZEND_SL_SPEC_CONST_CONST_HANDLER,
		ZEND_SL_SPEC_CONST_TMPVARCV_HANDLER,
		ZEND_SL_SPEC_CONST_TMPVARCV_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_SL_SPEC_CONST_TMPVARCV_HANDLER,
		ZEND_SL_SPEC_TMPVARCV_CONST_HANDLER,
		ZEND_SL_SPEC_TMPVARCV_TMPVARCV_HANDLER,
		ZEND_SL_SPEC_TMPVARCV_TMPVARCV_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_SL_SPEC_TMPVARCV_TMPVARCV_HANDLER,
		ZEND_SL_SPEC_TMPVARCV_CONST_HANDLER,
		ZEND_SL_SPEC_TMPVARCV_TMPVARCV_HANDLER,
		ZEND_SL_SPEC_TMPVARCV_TMPVARCV_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_SL_SPEC_TMPVARCV_TMPVARCV_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_SL_SPEC_TMPVARCV_CONST_HANDLER,
		ZEND_SL_SPEC_TMPVARCV_TMPVARCV_HANDLER,
		ZEND_SL_SPEC_TMPVARCV_TMPVARCV_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_SL_SPEC_TMPVARCV_TMPVARCV_HANDLER,
		ZEND_SR_SPEC_CONST_CONST_HANDLER,
		ZEND_SR_SPEC_CONST_TMPVARCV_HANDLER,
		ZEND_SR_SPEC_CONST_TMPVARCV_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_SR_SPEC_CONST_TMPVARCV_HANDLER,
		ZEND_SR_SPEC_TMPVARCV_CONST_HANDLER,
		ZEND_SR_SPEC_TMPVARCV_TMPVARCV_HANDLER,
		ZEND_SR_SPEC_TMPVARCV_TMPVARCV_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_SR_SPEC_TMPVARCV_TMPVARCV_HANDLER,
		ZEND_SR_SPEC_TMPVARCV_CONST_HANDLER,
		ZEND_SR_SPEC_TMPVARCV_TMPVARCV_HANDLER,
		ZEND_SR_SPEC_TMPVARCV_TMPVARCV_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_SR_SPEC_TMPVARCV_TMPVARCV_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_SR_SPEC_TMPVARCV_CONST_HANDLER,
		ZEND_SR_SPEC_TMPVARCV_TMPVARCV_HANDLER,
		ZEND_SR_SPEC_TMPVARCV_TMPVARCV_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_SR_SPEC_TMPVARCV_TMPVARCV_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_CONCAT_SPEC_CONST_TMPVAR_HANDLER,
		ZEND_CONCAT_SPEC_CONST_TMPVAR_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_CONCAT_SPEC_CONST_CV_HANDLER,
		ZEND_CONCAT_SPEC_TMPVAR_CONST_HANDLER,
		ZEND_CONCAT_SPEC_TMPVAR_TMPVAR_HANDLER,
		ZEND_CONCAT_SPEC_TMPVAR_TMPVAR_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_CONCAT_SPEC_TMPVAR_CV_HANDLER,
		ZEND_CONCAT_SPEC_TMPVAR_CONST_HANDLER,
		ZEND_CONCAT_SPEC_TMPVAR_TMPVAR_HANDLER,
		ZEND_CONCAT_SPEC_TMPVAR_TMPVAR_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_CONCAT_SPEC_TMPVAR_CV_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_CONCAT_SPEC_CV_CONST_HANDLER,
		ZEND_CONCAT_SPEC_CV_TMPVAR_HANDLER,
		ZEND_CONCAT_SPEC_CV_TMPVAR_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_CONCAT_SPEC_CV_CV_HANDLER,
		ZEND_BW_OR_SPEC_CONST_CONST_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_BW_OR_SPEC_TMPVARCV_CONST_HANDLER,
		ZEND_BW_OR_SPEC_TMPVARCV_TMPVARCV_HANDLER,
		ZEND_BW_OR_SPEC_TMPVARCV_TMPVARCV_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_BW_OR_SPEC_TMPVARCV_TMPVARCV_HANDLER,
		ZEND_BW_OR_SPEC_TMPVARCV_CONST_HANDLER,
		ZEND_BW_OR_SPEC_TMPVARCV_TMPVARCV_HANDLER,
		ZEND_BW_OR_SPEC_TMPVARCV_TMPVARCV_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_BW_OR_SPEC_TMPVARCV_TMPVARCV_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_BW_OR_SPEC_TMPVARCV_CONST_HANDLER,
		ZEND_BW_OR_SPEC_TMPVARCV_TMPVARCV_HANDLER,
		ZEND_BW_OR_SPEC_TMPVARCV_TMPVARCV_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_BW_OR_SPEC_TMPVARCV_TMPVARCV_HANDLER,
		ZEND_BW_AND_SPEC_CONST_CONST_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_BW_AND_SPEC_TMPVARCV_CONST_HANDLER,
		ZEND_BW_AND_SPEC_TMPVARCV_TMPVARCV_HANDLER,
		ZEND_BW_AND_SPEC_TMPVARCV_TMPVARCV_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_BW_AND_SPEC_TMPVARCV_TMPVARCV_HANDLER,
		ZEND_BW_AND_SPEC_TMPVARCV_CONST_HANDLER,
		ZEND_BW_AND_SPEC_TMPVARCV_TMPVARCV_HANDLER,
		ZEND_BW_AND_SPEC_TMPVARCV_TMPVARCV_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_BW_AND_SPEC_TMPVARCV_TMPVARCV_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_BW_AND_SPEC_TMPVARCV_CONST_HANDLER,
		ZEND_BW_AND_SPEC_TMPVARCV_TMPVARCV_HANDLER,
		ZEND_BW_AND_SPEC_TMPVARCV_TMPVARCV_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_BW_AND_SPEC_TMPVARCV_TMPVARCV_HANDLER,
		ZEND_BW_XOR_SPEC_CONST_CONST_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_BW_XOR_SPEC_TMPVARCV_CONST_HANDLER,
		ZEND_BW_XOR_SPEC_TMPVARCV_TMPVARCV_HANDLER,
		ZEND_BW_XOR_SPEC_TMPVARCV_TMPVARCV_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_BW_XOR_SPEC_TMPVARCV_TMPVARCV_HANDLER,
		ZEND_BW_XOR_SPEC_TMPVARCV_CONST_HANDLER,
		ZEND_BW_XOR_SPEC_TMPVARCV_TMPVARCV_HANDLER,
		ZEND_BW_XOR_SPEC_TMPVARCV_TMPVARCV_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_BW_XOR_SPEC_TMPVARCV_TMPVARCV_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_BW_XOR_SPEC_TMPVARCV_CONST_HANDLER,
		ZEND_BW_XOR_SPEC_TMPVARCV_TMPVARCV_HANDLER,
		ZEND_BW_XOR_SPEC_TMPVARCV_TMPVARCV_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_BW_XOR_SPEC_TMPVARCV_TMPVARCV_HANDLER,
		ZEND_POW_SPEC_CONST_CONST_HANDLER,
		ZEND_POW_SPEC_CONST_TMPVAR_HANDLER,
		ZEND_POW_SPEC_CONST_TMPVAR_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_POW_SPEC_CONST_CV_HANDLER,
		ZEND_POW_SPEC_TMPVAR_CONST_HANDLER,
		ZEND_POW_SPEC_TMPVAR_TMPVAR_HANDLER,
		ZEND_POW_SPEC_TMPVAR_TMPVAR_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_POW_SPEC_TMPVAR_CV_HANDLER,
		ZEND_POW_SPEC_TMPVAR_CONST_HANDLER,
		ZEND_POW_SPEC_TMPVAR_TMPVAR_HANDLER,
		ZEND_POW_SPEC_TMPVAR_TMPVAR_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_POW_SPEC_TMPVAR_CV_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_POW_SPEC_CV_CONST_HANDLER,
		ZEND_POW_SPEC_CV_TMPVAR_HANDLER,
		ZEND_POW_SPEC_CV_TMPVAR_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_POW_SPEC_CV_CV_HANDLER,
		ZEND_BW_NOT_SPEC_CONST_HANDLER,
		ZEND_BW_NOT_SPEC_TMPVARCV_HANDLER,
		ZEND_BW_NOT_SPEC_TMPVARCV_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_BW_NOT_SPEC_TMPVARCV_HANDLER,
		ZEND_BOOL_NOT_SPEC_CONST_HANDLER,
		ZEND_BOOL_NOT_SPEC_TMPVAR_HANDLER,
		ZEND_BOOL_NOT_SPEC_TMPVAR_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_BOOL_NOT_SPEC_CV_HANDLER,
		ZEND_BOOL_XOR_SPEC_CONST_CONST_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_BOOL_XOR_SPEC_TMPVAR_CONST_HANDLER,
		ZEND_BOOL_XOR_SPEC_TMPVAR_TMPVAR_HANDLER,
		ZEND_BOOL_XOR_SPEC_TMPVAR_TMPVAR_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_BOOL_XOR_SPEC_TMPVAR_CONST_HANDLER,
		ZEND_BOOL_XOR_SPEC_TMPVAR_TMPVAR_HANDLER,
		ZEND_BOOL_XOR_SPEC_TMPVAR_TMPVAR_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_BOOL_XOR_SPEC_CV_CONST_HANDLER,
		ZEND_BOOL_XOR_SPEC_CV_TMPVAR_HANDLER,
		ZEND_BOOL_XOR_SPEC_CV_TMPVAR_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_BOOL_XOR_SPEC_CV_CV_HANDLER,
		ZEND_IS_IDENTICAL_SPEC_CONST_CONST_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_IS_IDENTICAL_SPEC_TMP_CONST_HANDLER,
		ZEND_IS_IDENTICAL_SPEC_TMP_TMP_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_IS_IDENTICAL_SPEC_VAR_CONST_HANDLER,
		ZEND_IS_IDENTICAL_SPEC_VAR_TMP_HANDLER,
		ZEND_IS_IDENTICAL_SPEC_VAR_VAR_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_IS_IDENTICAL_SPEC_CV_CONST_HANDLER,
		ZEND_IS_IDENTICAL_SPEC_CV_TMP_HANDLER,
		ZEND_IS_IDENTICAL_SPEC_CV_VAR_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_IS_IDENTICAL_SPEC_CV_CV_HANDLER,
		ZEND_IS_NOT_IDENTICAL_SPEC_CONST_CONST_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_IS_NOT_IDENTICAL_SPEC_TMP_CONST_HANDLER,
		ZEND_IS_NOT_IDENTICAL_SPEC_TMP_TMP_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_IS_NOT_IDENTICAL_SPEC_VAR_CONST_HANDLER,
		ZEND_IS_NOT_IDENTICAL_SPEC_VAR_TMP_HANDLER,
		ZEND_IS_NOT_IDENTICAL_SPEC_VAR_VAR_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_IS_NOT_IDENTICAL_SPEC_CV_CONST_HANDLER,
		ZEND_IS_NOT_IDENTICAL_SPEC_CV_TMP_HANDLER,
		ZEND_IS_NOT_IDENTICAL_SPEC_CV_VAR_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_IS_NOT_IDENTICAL_SPEC_CV_CV_HANDLER,
		ZEND_IS_EQUAL_SPEC_CONST_CONST_HANDLER,
		ZEND_IS_EQUAL_SPEC_CONST_CONST_HANDLER,
		ZEND_IS_EQUAL_SPEC_CONST_CONST_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_IS_EQUAL_SPEC_TMPVAR_CONST_HANDLER,
		ZEND_IS_EQUAL_SPEC_TMPVAR_CONST_JMPZ_HANDLER,
		ZEND_IS_EQUAL_SPEC_TMPVAR_CONST_JMPNZ_HANDLER,
		ZEND_IS_EQUAL_SPEC_TMPVAR_TMPVAR_HANDLER,
		ZEND_IS_EQUAL_SPEC_TMPVAR_TMPVAR_JMPZ_HANDLER,
		ZEND_IS_EQUAL_SPEC_TMPVAR_TMPVAR_JMPNZ_HANDLER,
		ZEND_IS_EQUAL_SPEC_TMPVAR_TMPVAR_HANDLER,
		ZEND_IS_EQUAL_SPEC_TMPVAR_TMPVAR_JMPZ_HANDLER,
		ZEND_IS_EQUAL_SPEC_TMPVAR_TMPVAR_JMPNZ_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_IS_EQUAL_SPEC_TMPVAR_CONST_HANDLER,
		ZEND_IS_EQUAL_SPEC_TMPVAR_CONST_JMPZ_HANDLER,
		ZEND_IS_EQUAL_SPEC_TMPVAR_CONST_JMPNZ_HANDLER,
		ZEND_IS_EQUAL_SPEC_TMPVAR_TMPVAR_HANDLER,
		ZEND_IS_EQUAL_SPEC_TMPVAR_TMPVAR_JMPZ_HANDLER,
		ZEND_IS_EQUAL_SPEC_TMPVAR_TMPVAR_JMPNZ_HANDLER,
		ZEND_IS_EQUAL_SPEC_TMPVAR_TMPVAR_HANDLER,
		ZEND_IS_EQUAL_SPEC_TMPVAR_TMPVAR_JMPZ_HANDLER,
		ZEND_IS_EQUAL_SPEC_TMPVAR_TMPVAR_JMPNZ_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_IS_EQUAL_SPEC_CV_CONST_HANDLER,
		ZEND_IS_EQUAL_SPEC_CV_CONST_JMPZ_HANDLER,
		ZEND_IS_EQUAL_SPEC_CV_CONST_JMPNZ_HANDLER,
		ZEND_IS_EQUAL_SPEC_CV_TMPVAR_HANDLER,
		ZEND_IS_EQUAL_SPEC_CV_TMPVAR_JMPZ_HANDLER,
		ZEND_IS_EQUAL_SPEC_CV_TMPVAR_JMPNZ_HANDLER,
		ZEND_IS_EQUAL_SPEC_CV_TMPVAR_HANDLER,
		ZEND_IS_EQUAL_SPEC_CV_TMPVAR_JMPZ_HANDLER,
		ZEND_IS_EQUAL_SPEC_CV_TMPVAR_JMPNZ_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_IS_EQUAL_SPEC_CV_CV_HANDLER,
		ZEND_IS_EQUAL_SPEC_CV_CV_JMPZ_HANDLER,
		ZEND_IS_EQUAL_SPEC_CV_CV_JMPNZ_HANDLER,
		ZEND_IS_NOT_EQUAL_SPEC_CONST_CONST_HANDLER,
		ZEND_IS_NOT_EQUAL_SPEC_CONST_CONST_HANDLER,
		ZEND_IS_NOT_EQUAL_SPEC_CONST_CONST_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_CONST_HANDLER,
		ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_CONST_JMPZ_HANDLER,
		ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_CONST_JMPNZ_HANDLER,
		ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_TMPVAR_HANDLER,
		ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_TMPVAR_JMPZ_HANDLER,
		ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_TMPVAR_JMPNZ_HANDLER,
		ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_TMPVAR_HANDLER,
		ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_TMPVAR_JMPZ_HANDLER,
		ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_TMPVAR_JMPNZ_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_CONST_HANDLER,
		ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_CONST_JMPZ_HANDLER,
		ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_CONST_JMPNZ_HANDLER,
		ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_TMPVAR_HANDLER,
		ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_TMPVAR_JMPZ_HANDLER,
		ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_TMPVAR_JMPNZ_HANDLER,
		ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_TMPVAR_HANDLER,
		ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_TMPVAR_JMPZ_HANDLER,
		ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_TMPVAR_JMPNZ_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_IS_NOT_EQUAL_SPEC_CV_CONST_HANDLER,
		ZEND_IS_NOT_EQUAL_SPEC_CV_CONST_JMPZ_HANDLER,
		ZEND_IS_NOT_EQUAL_SPEC_CV_CONST_JMPNZ_HANDLER,
		ZEND_IS_NOT_EQUAL_SPEC_CV_TMPVAR_HANDLER,
		ZEND_IS_NOT_EQUAL_SPEC_CV_TMPVAR_JMPZ_HANDLER,
		ZEND_IS_NOT_EQUAL_SPEC_CV_TMPVAR_JMPNZ_HANDLER,
		ZEND_IS_NOT_EQUAL_SPEC_CV_TMPVAR_HANDLER,
		ZEND_IS_NOT_EQUAL_SPEC_CV_TMPVAR_JMPZ_HANDLER,
		ZEND_IS_NOT_EQUAL_SPEC_CV_TMPVAR_JMPNZ_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_IS_NOT_EQUAL_SPEC_CV_CV_HANDLER,
		ZEND_IS_NOT_EQUAL_SPEC_CV_CV_JMPZ_HANDLER,
		ZEND_IS_NOT_EQUAL_SPEC_CV_CV_JMPNZ_HANDLER,
		ZEND_IS_SMALLER_SPEC_CONST_CONST_HANDLER,
		ZEND_IS_SMALLER_SPEC_CONST_CONST_HANDLER,
		ZEND_IS_SMALLER_SPEC_CONST_CONST_HANDLER,
		ZEND_IS_SMALLER_SPEC_CONST_TMPVARCV_HANDLER,
		ZEND_IS_SMALLER_SPEC_CONST_TMPVARCV_JMPZ_HANDLER,
		ZEND_IS_SMALLER_SPEC_CONST_TMPVARCV_JMPNZ_HANDLER,
		ZEND_IS_SMALLER_SPEC_CONST_TMPVARCV_HANDLER,
		ZEND_IS_SMALLER_SPEC_CONST_TMPVARCV_JMPZ_HANDLER,
		ZEND_IS_SMALLER_SPEC_CONST_TMPVARCV_JMPNZ_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_IS_SMALLER_SPEC_CONST_TMPVARCV_HANDLER,
		ZEND_IS_SMALLER_SPEC_CONST_TMPVARCV_JMPZ_HANDLER,
		ZEND_IS_SMALLER_SPEC_CONST_TMPVARCV_JMPNZ_HANDLER,
		ZEND_IS_SMALLER_SPEC_TMPVARCV_CONST_HANDLER,
		ZEND_IS_SMALLER_SPEC_TMPVARCV_CONST_JMPZ_HANDLER,
		ZEND_IS_SMALLER_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER,
		ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_HANDLER,
		ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
		ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
		ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_HANDLER,
		ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
		ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_HANDLER,
		ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
		ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
		ZEND_IS_SMALLER_SPEC_TMPVARCV_CONST_HANDLER,
		ZEND_IS_SMALLER_SPEC_TMPVARCV_CONST_JMPZ_HANDLER,
		ZEND_IS_SMALLER_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER,
		ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_HANDLER,
		ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
		ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
		ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_HANDLER,
		ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
		ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_HANDLER,
		ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
		ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_IS_SMALLER_SPEC_TMPVARCV_CONST_HANDLER,
		ZEND_IS_SMALLER_SPEC_TMPVARCV_CONST_JMPZ_HANDLER,
		ZEND_IS_SMALLER_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER,
		ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_HANDLER,
		ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
		ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
		ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_HANDLER,
		ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
		ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_HANDLER,
		ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
		ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
		ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_CONST_HANDLER,
		ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_CONST_HANDLER,
		ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_CONST_HANDLER,
		ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_TMPVARCV_HANDLER,
		ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_TMPVARCV_JMPZ_HANDLER,
		ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_TMPVARCV_JMPNZ_HANDLER,
		ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_TMPVARCV_HANDLER,
		ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_TMPVARCV_JMPZ_HANDLER,
		ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_TMPVARCV_JMPNZ_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_TMPVARCV_HANDLER,
		ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_TMPVARCV_JMPZ_HANDLER,
		ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_TMPVARCV_JMPNZ_HANDLER,
		ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_CONST_HANDLER,
		ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_CONST_JMPZ_HANDLER,
		ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER,
		ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_HANDLER,
		ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
		ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
		ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_HANDLER,
		ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
		ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_HANDLER,
		ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
		ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
		ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_CONST_HANDLER,
		ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_CONST_JMPZ_HANDLER,
		ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER,
		ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_HANDLER,
		ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
		ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
		ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_HANDLER,
		ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
		ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_HANDLER,
		ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
		ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_CONST_HANDLER,
		ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_CONST_JMPZ_HANDLER,
		ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER,
		ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_HANDLER,
		ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
		ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
		ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_HANDLER,
		ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
		ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_HANDLER,
		ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
		ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_ASSIGN_SPEC_VAR_CONST_RETVAL_UNUSED_HANDLER,
		ZEND_ASSIGN_SPEC_VAR_CONST_RETVAL_USED_HANDLER,
		ZEND_ASSIGN_SPEC_VAR_TMP_RETVAL_UNUSED_HANDLER,
		ZEND_ASSIGN_SPEC_VAR_TMP_RETVAL_USED_HANDLER,
		ZEND_ASSIGN_SPEC_VAR_VAR_RETVAL_UNUSED_HANDLER,
		ZEND_ASSIGN_SPEC_VAR_VAR_RETVAL_USED_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_ASSIGN_SPEC_VAR_CV_RETVAL_UNUSED_HANDLER,
		ZEND_ASSIGN_SPEC_VAR_CV_RETVAL_USED_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_ASSIGN_SPEC_CV_CONST_RETVAL_UNUSED_HANDLER,
		ZEND_ASSIGN_SPEC_CV_CONST_RETVAL_USED_HANDLER,
		ZEND_ASSIGN_SPEC_CV_TMP_RETVAL_UNUSED_HANDLER,
		ZEND_ASSIGN_SPEC_CV_TMP_RETVAL_USED_HANDLER,
		ZEND_ASSIGN_SPEC_CV_VAR_RETVAL_UNUSED_HANDLER,
		ZEND_ASSIGN_SPEC_CV_VAR_RETVAL_USED_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_ASSIGN_SPEC_CV_CV_RETVAL_UNUSED_HANDLER,
		ZEND_ASSIGN_SPEC_CV_CV_RETVAL_USED_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_ASSIGN_DIM_SPEC_VAR_CONST_OP_DATA_CONST_HANDLER,
		ZEND_ASSIGN_DIM_SPEC_VAR_CONST_OP_DATA_TMP_HANDLER,
		ZEND_ASSIGN_DIM_SPEC_VAR_CONST_OP_DATA_VAR_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_ASSIGN_DIM_SPEC_VAR_CONST_OP_DATA_CV_HANDLER,
		ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_DATA_CONST_HANDLER,
		ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_DATA_TMP_HANDLER,
		ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_DATA_VAR_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_DATA_CV_HANDLER,
		ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_DATA_CONST_HANDLER,
		ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_DATA_TMP_HANDLER,
		ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_DATA_VAR_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_DATA_CV_HANDLER,
		ZEND_ASSIGN_DIM_SPEC_VAR_UNUSED_OP_DATA_CONST_HANDLER,
		ZEND_ASSIGN_DIM_SPEC_VAR_UNUSED_OP_DATA_TMP_HANDLER,
		ZEND_ASSIGN_DIM_SPEC_VAR_UNUSED_OP_DATA_VAR_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_ASSIGN_DIM_SPEC_VAR_UNUSED_OP_DATA_CV_HANDLER,
		ZEND_ASSIGN_DIM_SPEC_VAR_CV_OP_DATA_CONST_HANDLER,
		ZEND_ASSIGN_DIM_SPEC_VAR_CV_OP_DATA_TMP_HANDLER,
		ZEND_ASSIGN_DIM_SPEC_VAR_CV_OP_DATA_VAR_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_ASSIGN_DIM_SPEC_VAR_CV_OP_DATA_CV_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_ASSIGN_DIM_SPEC_CV_CONST_OP_DATA_CONST_HANDLER,
		ZEND_ASSIGN_DIM_SPEC_CV_CONST_OP_DATA_TMP_HANDLER,
		ZEND_ASSIGN_DIM_SPEC_CV_CONST_OP_DATA_VAR_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_ASSIGN_DIM_SPEC_CV_CONST_OP_DATA_CV_HANDLER,
		ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_DATA_CONST_HANDLER,
		ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_DATA_TMP_HANDLER,
		ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_DATA_VAR_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_DATA_CV_HANDLER,
		ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_DATA_CONST_HANDLER,
		ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_DATA_TMP_HANDLER,
		ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_DATA_VAR_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_DATA_CV_HANDLER,
		ZEND_ASSIGN_DIM_SPEC_CV_UNUSED_OP_DATA_CONST_HANDLER,
		ZEND_ASSIGN_DIM_SPEC_CV_UNUSED_OP_DATA_TMP_HANDLER,
		ZEND_ASSIGN_DIM_SPEC_CV_UNUSED_OP_DATA_VAR_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_ASSIGN_DIM_SPEC_CV_UNUSED_OP_DATA_CV_HANDLER,
		ZEND_ASSIGN_DIM_SPEC_CV_CV_OP_DATA_CONST_HANDLER,
		ZEND_ASSIGN_DIM_SPEC_CV_CV_OP_DATA_TMP_HANDLER,
		ZEND_ASSIGN_DIM_SPEC_CV_CV_OP_DATA_VAR_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_ASSIGN_DIM_SPEC_CV_CV_OP_DATA_CV_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_ASSIGN_OBJ_SPEC_VAR_CONST_OP_DATA_CONST_HANDLER,
		ZEND_ASSIGN_OBJ_SPEC_VAR_CONST_OP_DATA_TMP_HANDLER,
		ZEND_ASSIGN_OBJ_SPEC_VAR_CONST_OP_DATA_VAR_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_ASSIGN_OBJ_SPEC_VAR_CONST_OP_DATA_CV_HANDLER,
		ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_CONST_HANDLER,
		ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_TMP_HANDLER,
		ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_VAR_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_CV_HANDLER,
		ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_CONST_HANDLER,
		ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_TMP_HANDLER,
		ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_VAR_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_CV_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_ASSIGN_OBJ_SPEC_VAR_CV_OP_DATA_CONST_HANDLER,
		ZEND_ASSIGN_OBJ_SPEC_VAR_CV_OP_DATA_TMP_HANDLER,
		ZEND_ASSIGN_OBJ_SPEC_VAR_CV_OP_DATA_VAR_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_ASSIGN_OBJ_SPEC_VAR_CV_OP_DATA_CV_HANDLER,
		ZEND_ASSIGN_OBJ_SPEC_UNUSED_CONST_OP_DATA_CONST_HANDLER,
		ZEND_ASSIGN_OBJ_SPEC_UNUSED_CONST_OP_DATA_TMP_HANDLER,
		ZEND_ASSIGN_OBJ_SPEC_UNUSED_CONST_OP_DATA_VAR_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_ASSIGN_OBJ_SPEC_UNUSED_CONST_OP_DATA_CV_HANDLER,
		ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_OP_DATA_CONST_HANDLER,
		ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_OP_DATA_TMP_HANDLER,
		ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_OP_DATA_VAR_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_OP_DATA_CV_HANDLER,
		ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_OP_DATA_CONST_HANDLER,
		ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_OP_DATA_TMP_HANDLER,
		ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_OP_DATA_VAR_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_OP_DATA_CV_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_ASSIGN_OBJ_SPEC_UNUSED_CV_OP_DATA_CONST_HANDLER,
		ZEND_ASSIGN_OBJ_SPEC_UNUSED_CV_OP_DATA_TMP_HANDLER,
		ZEND_ASSIGN_OBJ_SPEC_UNUSED_CV_OP_DATA_VAR_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_ASSIGN_OBJ_SPEC_UNUSED_CV_OP_DATA_CV_HANDLER,
		ZEND_ASSIGN_OBJ_SPEC_CV_CONST_OP_DATA_CONST_HANDLER,
		ZEND_ASSIGN_OBJ_SPEC_CV_CONST_OP_DATA_TMP_HANDLER,
		ZEND_ASSIGN_OBJ_SPEC_CV_CONST_OP_DATA_VAR_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_ASSIGN_OBJ_SPEC_CV_CONST_OP_DATA_CV_HANDLER,
		ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_DATA_CONST_HANDLER,
		ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_DATA_TMP_HANDLER,
		ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_DATA_VAR_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_DATA_CV_HANDLER,
		ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_DATA_CONST_HANDLER,
		ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_DATA_TMP_HANDLER,
		ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_DATA_VAR_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_DATA_CV_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_ASSIGN_OBJ_SPEC_CV_CV_OP_DATA_CONST_HANDLER,
		ZEND_ASSIGN_OBJ_SPEC_CV_CV_OP_DATA_TMP_HANDLER,
		ZEND_ASSIGN_OBJ_SPEC_CV_CV_OP_DATA_VAR_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_ASSIGN_OBJ_SPEC_CV_CV_OP_DATA_CV_HANDLER,
		ZEND_ASSIGN_STATIC_PROP_SPEC_OP_DATA_CONST_HANDLER,
		ZEND_ASSIGN_STATIC_PROP_SPEC_OP_DATA_TMP_HANDLER,
		ZEND_ASSIGN_STATIC_PROP_SPEC_OP_DATA_VAR_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_ASSIGN_STATIC_PROP_SPEC_OP_DATA_CV_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_ASSIGN_OP_SPEC_VAR_CONST_HANDLER,
		ZEND_ASSIGN_OP_SPEC_VAR_TMPVAR_HANDLER,
		ZEND_ASSIGN_OP_SPEC_VAR_TMPVAR_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_ASSIGN_OP_SPEC_VAR_CV_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_ASSIGN_OP_SPEC_CV_CONST_HANDLER,
		ZEND_ASSIGN_OP_SPEC_CV_TMPVAR_HANDLER,
		ZEND_ASSIGN_OP_SPEC_CV_TMPVAR_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_ASSIGN_OP_SPEC_CV_CV_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_ASSIGN_DIM_OP_SPEC_VAR_CONST_HANDLER,
		ZEND_ASSIGN_DIM_OP_SPEC_VAR_TMPVAR_HANDLER,
		ZEND_ASSIGN_DIM_OP_SPEC_VAR_TMPVAR_HANDLER,
		ZEND_ASSIGN_DIM_OP_SPEC_VAR_UNUSED_HANDLER,
		ZEND_ASSIGN_DIM_OP_SPEC_VAR_CV_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_ASSIGN_DIM_OP_SPEC_CV_CONST_HANDLER,
		ZEND_ASSIGN_DIM_OP_SPEC_CV_TMPVAR_HANDLER,
		ZEND_ASSIGN_DIM_OP_SPEC_CV_TMPVAR_HANDLER,
		ZEND_ASSIGN_DIM_OP_SPEC_CV_UNUSED_HANDLER,
		ZEND_ASSIGN_DIM_OP_SPEC_CV_CV_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_ASSIGN_OBJ_OP_SPEC_VAR_CONST_HANDLER,
		ZEND_ASSIGN_OBJ_OP_SPEC_VAR_TMPVAR_HANDLER,
		ZEND_ASSIGN_OBJ_OP_SPEC_VAR_TMPVAR_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_ASSIGN_OBJ_OP_SPEC_VAR_CV_HANDLER,
		ZEND_ASSIGN_OBJ_OP_SPEC_UNUSED_CONST_HANDLER,
		ZEND_ASSIGN_OBJ_OP_SPEC_UNUSED_TMPVAR_HANDLER,
		ZEND_ASSIGN_OBJ_OP_SPEC_UNUSED_TMPVAR_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_ASSIGN_OBJ_OP_SPEC_UNUSED_CV_HANDLER,
		ZEND_ASSIGN_OBJ_OP_SPEC_CV_CONST_HANDLER,
		ZEND_ASSIGN_OBJ_OP_SPEC_CV_TMPVAR_HANDLER,
		ZEND_ASSIGN_OBJ_OP_SPEC_CV_TMPVAR_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_ASSIGN_OBJ_OP_SPEC_CV_CV_HANDLER,
		ZEND_ASSIGN_STATIC_PROP_OP_SPEC_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_ASSIGN_REF_SPEC_VAR_VAR_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_ASSIGN_REF_SPEC_VAR_CV_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_ASSIGN_REF_SPEC_CV_VAR_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_ASSIGN_REF_SPEC_CV_CV_HANDLER,
		ZEND_QM_ASSIGN_SPEC_CONST_HANDLER,
		ZEND_QM_ASSIGN_SPEC_TMP_HANDLER,
		ZEND_QM_ASSIGN_SPEC_VAR_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_QM_ASSIGN_SPEC_CV_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_ASSIGN_OBJ_REF_SPEC_VAR_CONST_OP_DATA_VAR_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_ASSIGN_OBJ_REF_SPEC_VAR_CONST_OP_DATA_CV_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_ASSIGN_OBJ_REF_SPEC_VAR_TMPVAR_OP_DATA_VAR_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_ASSIGN_OBJ_REF_SPEC_VAR_TMPVAR_OP_DATA_CV_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_ASSIGN_OBJ_REF_SPEC_VAR_TMPVAR_OP_DATA_VAR_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_ASSIGN_OBJ_REF_SPEC_VAR_TMPVAR_OP_DATA_CV_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_ASSIGN_OBJ_REF_SPEC_VAR_CV_OP_DATA_VAR_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_ASSIGN_OBJ_REF_SPEC_VAR_CV_OP_DATA_CV_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_ASSIGN_OBJ_REF_SPEC_UNUSED_CONST_OP_DATA_VAR_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_ASSIGN_OBJ_REF_SPEC_UNUSED_CONST_OP_DATA_CV_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_ASSIGN_OBJ_REF_SPEC_UNUSED_TMPVAR_OP_DATA_VAR_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_ASSIGN_OBJ_REF_SPEC_UNUSED_TMPVAR_OP_DATA_CV_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_ASSIGN_OBJ_REF_SPEC_UNUSED_TMPVAR_OP_DATA_VAR_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_ASSIGN_OBJ_REF_SPEC_UNUSED_TMPVAR_OP_DATA_CV_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_ASSIGN_OBJ_REF_SPEC_UNUSED_CV_OP_DATA_VAR_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_ASSIGN_OBJ_REF_SPEC_UNUSED_CV_OP_DATA_CV_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_ASSIGN_OBJ_REF_SPEC_CV_CONST_OP_DATA_VAR_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_ASSIGN_OBJ_REF_SPEC_CV_CONST_OP_DATA_CV_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_ASSIGN_OBJ_REF_SPEC_CV_TMPVAR_OP_DATA_VAR_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_ASSIGN_OBJ_REF_SPEC_CV_TMPVAR_OP_DATA_CV_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_ASSIGN_OBJ_REF_SPEC_CV_TMPVAR_OP_DATA_VAR_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_ASSIGN_OBJ_REF_SPEC_CV_TMPVAR_OP_DATA_CV_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_ASSIGN_OBJ_REF_SPEC_CV_CV_OP_DATA_VAR_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_ASSIGN_OBJ_REF_SPEC_CV_CV_OP_DATA_CV_HANDLER,
		ZEND_ASSIGN_STATIC_PROP_REF_SPEC_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_PRE_INC_SPEC_VAR_RETVAL_UNUSED_HANDLER,
		ZEND_PRE_INC_SPEC_VAR_RETVAL_USED_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_PRE_INC_SPEC_CV_RETVAL_UNUSED_HANDLER,
		ZEND_PRE_INC_SPEC_CV_RETVAL_USED_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_PRE_DEC_SPEC_VAR_RETVAL_UNUSED_HANDLER,
		ZEND_PRE_DEC_SPEC_VAR_RETVAL_USED_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_PRE_DEC_SPEC_CV_RETVAL_UNUSED_HANDLER,
		ZEND_PRE_DEC_SPEC_CV_RETVAL_USED_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_POST_INC_SPEC_VAR_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_POST_INC_SPEC_CV_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_POST_DEC_SPEC_VAR_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_POST_DEC_SPEC_CV_HANDLER,
		ZEND_PRE_INC_STATIC_PROP_SPEC_HANDLER,
		ZEND_POST_INC_STATIC_PROP_SPEC_HANDLER,
		ZEND_JMP_SPEC_HANDLER,
		ZEND_JMPZ_SPEC_CONST_HANDLER,
		ZEND_JMPZ_SPEC_TMPVAR_HANDLER,
		ZEND_JMPZ_SPEC_TMPVAR_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_JMPZ_SPEC_CV_HANDLER,
		ZEND_JMPNZ_SPEC_CONST_HANDLER,
		ZEND_JMPNZ_SPEC_TMPVAR_HANDLER,
		ZEND_JMPNZ_SPEC_TMPVAR_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_JMPNZ_SPEC_CV_HANDLER,
		ZEND_JMPZ_EX_SPEC_CONST_HANDLER,
		ZEND_JMPZ_EX_SPEC_TMPVAR_HANDLER,
		ZEND_JMPZ_EX_SPEC_TMPVAR_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_JMPZ_EX_SPEC_CV_HANDLER,
		ZEND_JMPNZ_EX_SPEC_CONST_HANDLER,
		ZEND_JMPNZ_EX_SPEC_TMPVAR_HANDLER,
		ZEND_JMPNZ_EX_SPEC_TMPVAR_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_JMPNZ_EX_SPEC_CV_HANDLER,
		ZEND_CASE_SPEC_TMPVAR_CONST_HANDLER,
		ZEND_CASE_SPEC_TMPVAR_TMPVAR_HANDLER,
		ZEND_CASE_SPEC_TMPVAR_TMPVAR_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_CASE_SPEC_TMPVAR_CV_HANDLER,
		ZEND_CHECK_VAR_SPEC_CV_UNUSED_HANDLER,
		ZEND_SEND_VAR_NO_REF_EX_SPEC_VAR_CONST_HANDLER,
		ZEND_SEND_VAR_NO_REF_EX_SPEC_VAR_CONST_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_SEND_VAR_NO_REF_EX_SPEC_VAR_UNUSED_HANDLER,
		ZEND_SEND_VAR_NO_REF_EX_SPEC_VAR_UNUSED_QUICK_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_CAST_SPEC_CONST_HANDLER,
		ZEND_CAST_SPEC_TMP_HANDLER,
		ZEND_CAST_SPEC_VAR_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_CAST_SPEC_CV_HANDLER,
		ZEND_BOOL_SPEC_CONST_HANDLER,
		ZEND_BOOL_SPEC_TMPVAR_HANDLER,
		ZEND_BOOL_SPEC_TMPVAR_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_BOOL_SPEC_CV_HANDLER,
		ZEND_FAST_CONCAT_SPEC_CONST_CONST_HANDLER,
		ZEND_FAST_CONCAT_SPEC_CONST_TMPVAR_HANDLER,
		ZEND_FAST_CONCAT_SPEC_CONST_TMPVAR_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_FAST_CONCAT_SPEC_CONST_CV_HANDLER,
		ZEND_FAST_CONCAT_SPEC_TMPVAR_CONST_HANDLER,
		ZEND_FAST_CONCAT_SPEC_TMPVAR_TMPVAR_HANDLER,
		ZEND_FAST_CONCAT_SPEC_TMPVAR_TMPVAR_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_FAST_CONCAT_SPEC_TMPVAR_CV_HANDLER,
		ZEND_FAST_CONCAT_SPEC_TMPVAR_CONST_HANDLER,
		ZEND_FAST_CONCAT_SPEC_TMPVAR_TMPVAR_HANDLER,
		ZEND_FAST_CONCAT_SPEC_TMPVAR_TMPVAR_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_FAST_CONCAT_SPEC_TMPVAR_CV_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_FAST_CONCAT_SPEC_CV_CONST_HANDLER,
		ZEND_FAST_CONCAT_SPEC_CV_TMPVAR_HANDLER,
		ZEND_FAST_CONCAT_SPEC_CV_TMPVAR_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_FAST_CONCAT_SPEC_CV_CV_HANDLER,
		ZEND_ROPE_INIT_SPEC_UNUSED_CONST_HANDLER,
		ZEND_ROPE_INIT_SPEC_UNUSED_TMPVAR_HANDLER,
		ZEND_ROPE_INIT_SPEC_UNUSED_TMPVAR_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_ROPE_INIT_SPEC_UNUSED_CV_HANDLER,
		ZEND_ROPE_ADD_SPEC_TMP_CONST_HANDLER,
		ZEND_ROPE_ADD_SPEC_TMP_TMPVAR_HANDLER,
		ZEND_ROPE_ADD_SPEC_TMP_TMPVAR_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_ROPE_ADD_SPEC_TMP_CV_HANDLER,
		ZEND_ROPE_END_SPEC_TMP_CONST_HANDLER,
		ZEND_ROPE_END_SPEC_TMP_TMPVAR_HANDLER,
		ZEND_ROPE_END_SPEC_TMP_TMPVAR_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_ROPE_END_SPEC_TMP_CV_HANDLER,
		ZEND_BEGIN_SILENCE_SPEC_HANDLER,
		ZEND_END_SILENCE_SPEC_TMP_HANDLER,
		ZEND_INIT_FCALL_BY_NAME_SPEC_CONST_HANDLER,
		ZEND_DO_FCALL_SPEC_RETVAL_UNUSED_HANDLER,
		ZEND_DO_FCALL_SPEC_RETVAL_USED_HANDLER,
		ZEND_DO_FCALL_SPEC_OBSERVER_HANDLER,
		ZEND_DO_FCALL_SPEC_OBSERVER_HANDLER,
		ZEND_INIT_FCALL_SPEC_CONST_HANDLER,
		ZEND_RETURN_SPEC_CONST_HANDLER,
		ZEND_RETURN_SPEC_OBSERVER_HANDLER,
		ZEND_RETURN_SPEC_TMP_HANDLER,
		ZEND_RETURN_SPEC_OBSERVER_HANDLER,
		ZEND_RETURN_SPEC_VAR_HANDLER,
		ZEND_RETURN_SPEC_OBSERVER_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_RETURN_SPEC_CV_HANDLER,
		ZEND_RETURN_SPEC_OBSERVER_HANDLER,
		ZEND_RECV_SPEC_UNUSED_HANDLER,
		ZEND_RECV_INIT_SPEC_CONST_HANDLER,
		ZEND_SEND_VAL_SPEC_CONST_CONST_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_SEND_VAL_SPEC_CONST_UNUSED_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_SEND_VAL_SPEC_TMPVAR_CONST_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_SEND_VAL_SPEC_TMPVAR_UNUSED_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_SEND_VAL_SPEC_TMPVAR_CONST_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_SEND_VAL_SPEC_TMPVAR_UNUSED_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_SEND_VAR_EX_SPEC_VAR_CONST_HANDLER,
		ZEND_SEND_VAR_EX_SPEC_VAR_CONST_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_SEND_VAR_EX_SPEC_VAR_UNUSED_HANDLER,
		ZEND_SEND_VAR_EX_SPEC_VAR_UNUSED_QUICK_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_SEND_VAR_EX_SPEC_CV_CONST_HANDLER,
		ZEND_SEND_VAR_EX_SPEC_CV_CONST_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_SEND_VAR_EX_SPEC_CV_UNUSED_HANDLER,
		ZEND_SEND_VAR_EX_SPEC_CV_UNUSED_QUICK_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_SEND_REF_SPEC_VAR_CONST_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_SEND_REF_SPEC_VAR_UNUSED_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_SEND_REF_SPEC_CV_CONST_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_SEND_REF_SPEC_CV_UNUSED_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NEW_SPEC_CONST_UNUSED_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NEW_SPEC_VAR_UNUSED_HANDLER,
		ZEND_NEW_SPEC_UNUSED_UNUSED_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_INIT_NS_FCALL_BY_NAME_SPEC_CONST_HANDLER,
		ZEND_FREE_SPEC_TMPVAR_HANDLER,
		ZEND_INIT_ARRAY_SPEC_CONST_CONST_HANDLER,
		ZEND_INIT_ARRAY_SPEC_CONST_TMPVAR_HANDLER,
		ZEND_INIT_ARRAY_SPEC_CONST_TMPVAR_HANDLER,
		ZEND_INIT_ARRAY_SPEC_CONST_UNUSED_HANDLER,
		ZEND_INIT_ARRAY_SPEC_CONST_CV_HANDLER,
		ZEND_INIT_ARRAY_SPEC_TMP_CONST_HANDLER,
		ZEND_INIT_ARRAY_SPEC_TMP_TMPVAR_HANDLER,
		ZEND_INIT_ARRAY_SPEC_TMP_TMPVAR_HANDLER,
		ZEND_INIT_ARRAY_SPEC_TMP_UNUSED_HANDLER,
		ZEND_INIT_ARRAY_SPEC_TMP_CV_HANDLER,
		ZEND_INIT_ARRAY_SPEC_VAR_CONST_HANDLER,
		ZEND_INIT_ARRAY_SPEC_VAR_TMPVAR_HANDLER,
		ZEND_INIT_ARRAY_SPEC_VAR_TMPVAR_HANDLER,
		ZEND_INIT_ARRAY_SPEC_VAR_UNUSED_HANDLER,
		ZEND_INIT_ARRAY_SPEC_VAR_CV_HANDLER,
		ZEND_INIT_ARRAY_SPEC_UNUSED_CONST_HANDLER,
		ZEND_INIT_ARRAY_SPEC_UNUSED_TMPVAR_HANDLER,
		ZEND_INIT_ARRAY_SPEC_UNUSED_TMPVAR_HANDLER,
		ZEND_INIT_ARRAY_SPEC_UNUSED_UNUSED_HANDLER,
		ZEND_INIT_ARRAY_SPEC_UNUSED_CV_HANDLER,
		ZEND_INIT_ARRAY_SPEC_CV_CONST_HANDLER,
		ZEND_INIT_ARRAY_SPEC_CV_TMPVAR_HANDLER,
		ZEND_INIT_ARRAY_SPEC_CV_TMPVAR_HANDLER,
		ZEND_INIT_ARRAY_SPEC_CV_UNUSED_HANDLER,
		ZEND_INIT_ARRAY_SPEC_CV_CV_HANDLER,
		ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_CONST_HANDLER,
		ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_TMPVAR_HANDLER,
		ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_TMPVAR_HANDLER,
		ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_UNUSED_HANDLER,
		ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_CV_HANDLER,
		ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_CONST_HANDLER,
		ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_TMPVAR_HANDLER,
		ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_TMPVAR_HANDLER,
		ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_UNUSED_HANDLER,
		ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_CV_HANDLER,
		ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_CONST_HANDLER,
		ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_TMPVAR_HANDLER,
		ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_TMPVAR_HANDLER,
		ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_UNUSED_HANDLER,
		ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_CV_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_CONST_HANDLER,
		ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_TMPVAR_HANDLER,
		ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_TMPVAR_HANDLER,
		ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_UNUSED_HANDLER,
		ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_CV_HANDLER,
		ZEND_INCLUDE_OR_EVAL_SPEC_CONST_HANDLER,
		ZEND_INCLUDE_OR_EVAL_SPEC_OBSERVER_HANDLER,
		ZEND_INCLUDE_OR_EVAL_SPEC_TMPVAR_HANDLER,
		ZEND_INCLUDE_OR_EVAL_SPEC_OBSERVER_HANDLER,
		ZEND_INCLUDE_OR_EVAL_SPEC_TMPVAR_HANDLER,
		ZEND_INCLUDE_OR_EVAL_SPEC_OBSERVER_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_INCLUDE_OR_EVAL_SPEC_CV_HANDLER,
		ZEND_INCLUDE_OR_EVAL_SPEC_OBSERVER_HANDLER,
		ZEND_UNSET_VAR_SPEC_CONST_UNUSED_HANDLER,
		ZEND_UNSET_VAR_SPEC_TMPVAR_UNUSED_HANDLER,
		ZEND_UNSET_VAR_SPEC_TMPVAR_UNUSED_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_UNSET_VAR_SPEC_CV_UNUSED_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_UNSET_DIM_SPEC_VAR_CONST_HANDLER,
		ZEND_UNSET_DIM_SPEC_VAR_TMPVAR_HANDLER,
		ZEND_UNSET_DIM_SPEC_VAR_TMPVAR_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_UNSET_DIM_SPEC_VAR_CV_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_UNSET_DIM_SPEC_CV_CONST_HANDLER,
		ZEND_UNSET_DIM_SPEC_CV_TMPVAR_HANDLER,
		ZEND_UNSET_DIM_SPEC_CV_TMPVAR_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_UNSET_DIM_SPEC_CV_CV_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_UNSET_OBJ_SPEC_VAR_CONST_HANDLER,
		ZEND_UNSET_OBJ_SPEC_VAR_TMPVAR_HANDLER,
		ZEND_UNSET_OBJ_SPEC_VAR_TMPVAR_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_UNSET_OBJ_SPEC_VAR_CV_HANDLER,
		ZEND_UNSET_OBJ_SPEC_UNUSED_CONST_HANDLER,
		ZEND_UNSET_OBJ_SPEC_UNUSED_TMPVAR_HANDLER,
		ZEND_UNSET_OBJ_SPEC_UNUSED_TMPVAR_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_UNSET_OBJ_SPEC_UNUSED_CV_HANDLER,
		ZEND_UNSET_OBJ_SPEC_CV_CONST_HANDLER,
		ZEND_UNSET_OBJ_SPEC_CV_TMPVAR_HANDLER,
		ZEND_UNSET_OBJ_SPEC_CV_TMPVAR_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_UNSET_OBJ_SPEC_CV_CV_HANDLER,
		ZEND_FE_RESET_R_SPEC_CONST_HANDLER,
		ZEND_FE_RESET_R_SPEC_TMP_HANDLER,
		ZEND_FE_RESET_R_SPEC_VAR_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_FE_RESET_R_SPEC_CV_HANDLER,
		ZEND_FE_FETCH_R_SPEC_VAR_HANDLER,
		ZEND_FETCH_R_SPEC_CONST_UNUSED_HANDLER,
		ZEND_FETCH_R_SPEC_TMPVAR_UNUSED_HANDLER,
		ZEND_FETCH_R_SPEC_TMPVAR_UNUSED_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_FETCH_R_SPEC_CV_UNUSED_HANDLER,
		ZEND_FETCH_DIM_R_SPEC_CONST_CONST_HANDLER,
		ZEND_FETCH_DIM_R_SPEC_CONST_TMPVAR_HANDLER,
		ZEND_FETCH_DIM_R_SPEC_CONST_TMPVAR_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_FETCH_DIM_R_SPEC_CONST_CV_HANDLER,
		ZEND_FETCH_DIM_R_SPEC_TMPVAR_CONST_HANDLER,
		ZEND_FETCH_DIM_R_SPEC_TMPVAR_TMPVAR_HANDLER,
		ZEND_FETCH_DIM_R_SPEC_TMPVAR_TMPVAR_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_FETCH_DIM_R_SPEC_TMPVAR_CV_HANDLER,
		ZEND_FETCH_DIM_R_SPEC_TMPVAR_CONST_HANDLER,
		ZEND_FETCH_DIM_R_SPEC_TMPVAR_TMPVAR_HANDLER,
		ZEND_FETCH_DIM_R_SPEC_TMPVAR_TMPVAR_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_FETCH_DIM_R_SPEC_TMPVAR_CV_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_FETCH_DIM_R_SPEC_CV_CONST_HANDLER,
		ZEND_FETCH_DIM_R_SPEC_CV_TMPVAR_HANDLER,
		ZEND_FETCH_DIM_R_SPEC_CV_TMPVAR_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_FETCH_DIM_R_SPEC_CV_CV_HANDLER,
		ZEND_FETCH_OBJ_R_SPEC_CONST_CONST_HANDLER,
		ZEND_FETCH_OBJ_R_SPEC_CONST_TMPVAR_HANDLER,
		ZEND_FETCH_OBJ_R_SPEC_CONST_TMPVAR_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_FETCH_OBJ_R_SPEC_CONST_CV_HANDLER,
		ZEND_FETCH_OBJ_R_SPEC_TMPVAR_CONST_HANDLER,
		ZEND_FETCH_OBJ_R_SPEC_TMPVAR_TMPVAR_HANDLER,
		ZEND_FETCH_OBJ_R_SPEC_TMPVAR_TMPVAR_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_FETCH_OBJ_R_SPEC_TMPVAR_CV_HANDLER,
		ZEND_FETCH_OBJ_R_SPEC_TMPVAR_CONST_HANDLER,
		ZEND_FETCH_OBJ_R_SPEC_TMPVAR_TMPVAR_HANDLER,
		ZEND_FETCH_OBJ_R_SPEC_TMPVAR_TMPVAR_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_FETCH_OBJ_R_SPEC_TMPVAR_CV_HANDLER,
		ZEND_FETCH_OBJ_R_SPEC_UNUSED_CONST_HANDLER,
		ZEND_FETCH_OBJ_R_SPEC_UNUSED_TMPVAR_HANDLER,
		ZEND_FETCH_OBJ_R_SPEC_UNUSED_TMPVAR_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_FETCH_OBJ_R_SPEC_UNUSED_CV_HANDLER,
		ZEND_FETCH_OBJ_R_SPEC_CV_CONST_HANDLER,
		ZEND_FETCH_OBJ_R_SPEC_CV_TMPVAR_HANDLER,
		ZEND_FETCH_OBJ_R_SPEC_CV_TMPVAR_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_FETCH_OBJ_R_SPEC_CV_CV_HANDLER,
		ZEND_FETCH_W_SPEC_CONST_UNUSED_HANDLER,
		ZEND_FETCH_W_SPEC_TMPVAR_UNUSED_HANDLER,
		ZEND_FETCH_W_SPEC_TMPVAR_UNUSED_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_FETCH_W_SPEC_CV_UNUSED_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_FETCH_DIM_W_SPEC_VAR_CONST_HANDLER,
		ZEND_FETCH_DIM_W_SPEC_VAR_TMPVAR_HANDLER,
		ZEND_FETCH_DIM_W_SPEC_VAR_TMPVAR_HANDLER,
		ZEND_FETCH_DIM_W_SPEC_VAR_UNUSED_HANDLER,
		ZEND_FETCH_DIM_W_SPEC_VAR_CV_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_FETCH_DIM_W_SPEC_CV_CONST_HANDLER,
		ZEND_FETCH_DIM_W_SPEC_CV_TMPVAR_HANDLER,
		ZEND_FETCH_DIM_W_SPEC_CV_TMPVAR_HANDLER,
		ZEND_FETCH_DIM_W_SPEC_CV_UNUSED_HANDLER,
		ZEND_FETCH_DIM_W_SPEC_CV_CV_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_FETCH_OBJ_W_SPEC_VAR_CONST_HANDLER,
		ZEND_FETCH_OBJ_W_SPEC_VAR_TMPVAR_HANDLER,
		ZEND_FETCH_OBJ_W_SPEC_VAR_TMPVAR_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_FETCH_OBJ_W_SPEC_VAR_CV_HANDLER,
		ZEND_FETCH_OBJ_W_SPEC_UNUSED_CONST_HANDLER,
		ZEND_FETCH_OBJ_W_SPEC_UNUSED_TMPVAR_HANDLER,
		ZEND_FETCH_OBJ_W_SPEC_UNUSED_TMPVAR_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_FETCH_OBJ_W_SPEC_UNUSED_CV_HANDLER,
		ZEND_FETCH_OBJ_W_SPEC_CV_CONST_HANDLER,
		ZEND_FETCH_OBJ_W_SPEC_CV_TMPVAR_HANDLER,
		ZEND_FETCH_OBJ_W_SPEC_CV_TMPVAR_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_FETCH_OBJ_W_SPEC_CV_CV_HANDLER,
		ZEND_FETCH_RW_SPEC_CONST_UNUSED_HANDLER,
		ZEND_FETCH_RW_SPEC_TMPVAR_UNUSED_HANDLER,
		ZEND_FETCH_RW_SPEC_TMPVAR_UNUSED_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_FETCH_RW_SPEC_CV_UNUSED_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_FETCH_DIM_RW_SPEC_VAR_CONST_HANDLER,
		ZEND_FETCH_DIM_RW_SPEC_VAR_TMPVAR_HANDLER,
		ZEND_FETCH_DIM_RW_SPEC_VAR_TMPVAR_HANDLER,
		ZEND_FETCH_DIM_RW_SPEC_VAR_UNUSED_HANDLER,
		ZEND_FETCH_DIM_RW_SPEC_VAR_CV_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_FETCH_DIM_RW_SPEC_CV_CONST_HANDLER,
		ZEND_FETCH_DIM_RW_SPEC_CV_TMPVAR_HANDLER,
		ZEND_FETCH_DIM_RW_SPEC_CV_TMPVAR_HANDLER,
		ZEND_FETCH_DIM_RW_SPEC_CV_UNUSED_HANDLER,
		ZEND_FETCH_DIM_RW_SPEC_CV_CV_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_FETCH_OBJ_RW_SPEC_VAR_CONST_HANDLER,
		ZEND_FETCH_OBJ_RW_SPEC_VAR_TMPVAR_HANDLER,
		ZEND_FETCH_OBJ_RW_SPEC_VAR_TMPVAR_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_FETCH_OBJ_RW_SPEC_VAR_CV_HANDLER,
		ZEND_FETCH_OBJ_RW_SPEC_UNUSED_CONST_HANDLER,
		ZEND_FETCH_OBJ_RW_SPEC_UNUSED_TMPVAR_HANDLER,
		ZEND_FETCH_OBJ_RW_SPEC_UNUSED_TMPVAR_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_FETCH_OBJ_RW_SPEC_UNUSED_CV_HANDLER,
		ZEND_FETCH_OBJ_RW_SPEC_CV_CONST_HANDLER,
		ZEND_FETCH_OBJ_RW_SPEC_CV_TMPVAR_HANDLER,
		ZEND_FETCH_OBJ_RW_SPEC_CV_TMPVAR_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_FETCH_OBJ_RW_SPEC_CV_CV_HANDLER,
		ZEND_FETCH_IS_SPEC_CONST_UNUSED_HANDLER,
		ZEND_FETCH_IS_SPEC_TMPVAR_UNUSED_HANDLER,
		ZEND_FETCH_IS_SPEC_TMPVAR_UNUSED_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_FETCH_IS_SPEC_CV_UNUSED_HANDLER,
		ZEND_FETCH_DIM_IS_SPEC_CONST_CONST_HANDLER,
		ZEND_FETCH_DIM_IS_SPEC_CONST_TMPVAR_HANDLER,
		ZEND_FETCH_DIM_IS_SPEC_CONST_TMPVAR_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_FETCH_DIM_IS_SPEC_CONST_CV_HANDLER,
		ZEND_FETCH_DIM_IS_SPEC_TMPVAR_CONST_HANDLER,
		ZEND_FETCH_DIM_IS_SPEC_TMPVAR_TMPVAR_HANDLER,
		ZEND_FETCH_DIM_IS_SPEC_TMPVAR_TMPVAR_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_FETCH_DIM_IS_SPEC_TMPVAR_CV_HANDLER,
		ZEND_FETCH_DIM_IS_SPEC_TMPVAR_CONST_HANDLER,
		ZEND_FETCH_DIM_IS_SPEC_TMPVAR_TMPVAR_HANDLER,
		ZEND_FETCH_DIM_IS_SPEC_TMPVAR_TMPVAR_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_FETCH_DIM_IS_SPEC_TMPVAR_CV_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_FETCH_DIM_IS_SPEC_CV_CONST_HANDLER,
		ZEND_FETCH_DIM_IS_SPEC_CV_TMPVAR_HANDLER,
		ZEND_FETCH_DIM_IS_SPEC_CV_TMPVAR_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_FETCH_DIM_IS_SPEC_CV_CV_HANDLER,
		ZEND_FETCH_OBJ_IS_SPEC_CONST_CONST_HANDLER,
		ZEND_FETCH_OBJ_IS_SPEC_CONST_TMPVAR_HANDLER,
		ZEND_FETCH_OBJ_IS_SPEC_CONST_TMPVAR_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_FETCH_OBJ_IS_SPEC_CONST_CV_HANDLER,
		ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_CONST_HANDLER,
		ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_TMPVAR_HANDLER,
		ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_TMPVAR_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_CV_HANDLER,
		ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_CONST_HANDLER,
		ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_TMPVAR_HANDLER,
		ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_TMPVAR_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_CV_HANDLER,
		ZEND_FETCH_OBJ_IS_SPEC_UNUSED_CONST_HANDLER,
		ZEND_FETCH_OBJ_IS_SPEC_UNUSED_TMPVAR_HANDLER,
		ZEND_FETCH_OBJ_IS_SPEC_UNUSED_TMPVAR_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_FETCH_OBJ_IS_SPEC_UNUSED_CV_HANDLER,
		ZEND_FETCH_OBJ_IS_SPEC_CV_CONST_HANDLER,
		ZEND_FETCH_OBJ_IS_SPEC_CV_TMPVAR_HANDLER,
		ZEND_FETCH_OBJ_IS_SPEC_CV_TMPVAR_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_FETCH_OBJ_IS_SPEC_CV_CV_HANDLER,
		ZEND_FETCH_FUNC_ARG_SPEC_CONST_UNUSED_HANDLER,
		ZEND_FETCH_FUNC_ARG_SPEC_TMPVAR_UNUSED_HANDLER,
		ZEND_FETCH_FUNC_ARG_SPEC_TMPVAR_UNUSED_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_FETCH_FUNC_ARG_SPEC_CV_UNUSED_HANDLER,
		ZEND_FETCH_DIM_FUNC_ARG_SPEC_CONST_CONST_HANDLER,
		ZEND_FETCH_DIM_FUNC_ARG_SPEC_CONST_TMPVAR_HANDLER,
		ZEND_FETCH_DIM_FUNC_ARG_SPEC_CONST_TMPVAR_HANDLER,
		ZEND_FETCH_DIM_FUNC_ARG_SPEC_CONST_UNUSED_HANDLER,
		ZEND_FETCH_DIM_FUNC_ARG_SPEC_CONST_CV_HANDLER,
		ZEND_FETCH_DIM_FUNC_ARG_SPEC_TMP_CONST_HANDLER,
		ZEND_FETCH_DIM_FUNC_ARG_SPEC_TMP_TMPVAR_HANDLER,
		ZEND_FETCH_DIM_FUNC_ARG_SPEC_TMP_TMPVAR_HANDLER,
		ZEND_FETCH_DIM_FUNC_ARG_SPEC_TMP_UNUSED_HANDLER,
		ZEND_FETCH_DIM_FUNC_ARG_SPEC_TMP_CV_HANDLER,
		ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_CONST_HANDLER,
		ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_TMPVAR_HANDLER,
		ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_TMPVAR_HANDLER,
		ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_UNUSED_HANDLER,
		ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_CV_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_CONST_HANDLER,
		ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_TMPVAR_HANDLER,
		ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_TMPVAR_HANDLER,
		ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_UNUSED_HANDLER,
		ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_CV_HANDLER,
		ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CONST_CONST_HANDLER,
		ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CONST_TMPVAR_HANDLER,
		ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CONST_TMPVAR_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CONST_CV_HANDLER,
		ZEND_FETCH_OBJ_FUNC_ARG_SPEC_TMP_CONST_HANDLER,
		ZEND_FETCH_OBJ_FUNC_ARG_SPEC_TMP_TMPVAR_HANDLER,
		ZEND_FETCH_OBJ_FUNC_ARG_SPEC_TMP_TMPVAR_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_FETCH_OBJ_FUNC_ARG_SPEC_TMP_CV_HANDLER,
		ZEND_FETCH_OBJ_FUNC_ARG_SPEC_VAR_CONST_HANDLER,
		ZEND_FETCH_OBJ_FUNC_ARG_SPEC_VAR_TMPVAR_HANDLER,
		ZEND_FETCH_OBJ_FUNC_ARG_SPEC_VAR_TMPVAR_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_FETCH_OBJ_FUNC_ARG_SPEC_VAR_CV_HANDLER,
		ZEND_FETCH_OBJ_FUNC_ARG_SPEC_UNUSED_CONST_HANDLER,
		ZEND_FETCH_OBJ_FUNC_ARG_SPEC_UNUSED_TMPVAR_HANDLER,
		ZEND_FETCH_OBJ_FUNC_ARG_SPEC_UNUSED_TMPVAR_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_FETCH_OBJ_FUNC_ARG_SPEC_UNUSED_CV_HANDLER,
		ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CV_CONST_HANDLER,
		ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CV_TMPVAR_HANDLER,
		ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CV_TMPVAR_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CV_CV_HANDLER,
		ZEND_FETCH_UNSET_SPEC_CONST_UNUSED_HANDLER,
		ZEND_FETCH_UNSET_SPEC_TMPVAR_UNUSED_HANDLER,
		ZEND_FETCH_UNSET_SPEC_TMPVAR_UNUSED_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_FETCH_UNSET_SPEC_CV_UNUSED_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_FETCH_DIM_UNSET_SPEC_VAR_CONST_HANDLER,
		ZEND_FETCH_DIM_UNSET_SPEC_VAR_TMPVAR_HANDLER,
		ZEND_FETCH_DIM_UNSET_SPEC_VAR_TMPVAR_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_FETCH_DIM_UNSET_SPEC_VAR_CV_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_FETCH_DIM_UNSET_SPEC_CV_CONST_HANDLER,
		ZEND_FETCH_DIM_UNSET_SPEC_CV_TMPVAR_HANDLER,
		ZEND_FETCH_DIM_UNSET_SPEC_CV_TMPVAR_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_FETCH_DIM_UNSET_SPEC_CV_CV_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_FETCH_OBJ_UNSET_SPEC_VAR_CONST_HANDLER,
		ZEND_FETCH_OBJ_UNSET_SPEC_VAR_TMPVAR_HANDLER,
		ZEND_FETCH_OBJ_UNSET_SPEC_VAR_TMPVAR_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_FETCH_OBJ_UNSET_SPEC_VAR_CV_HANDLER,
		ZEND_FETCH_OBJ_UNSET_SPEC_UNUSED_CONST_HANDLER,
		ZEND_FETCH_OBJ_UNSET_SPEC_UNUSED_TMPVAR_HANDLER,
		ZEND_FETCH_OBJ_UNSET_SPEC_UNUSED_TMPVAR_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_FETCH_OBJ_UNSET_SPEC_UNUSED_CV_HANDLER,
		ZEND_FETCH_OBJ_UNSET_SPEC_CV_CONST_HANDLER,
		ZEND_FETCH_OBJ_UNSET_SPEC_CV_TMPVAR_HANDLER,
		ZEND_FETCH_OBJ_UNSET_SPEC_CV_TMPVAR_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_FETCH_OBJ_UNSET_SPEC_CV_CV_HANDLER,
		ZEND_FETCH_LIST_R_SPEC_CONST_CONST_HANDLER,
		ZEND_FETCH_LIST_R_SPEC_CONST_TMPVAR_HANDLER,
		ZEND_FETCH_LIST_R_SPEC_CONST_TMPVAR_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_FETCH_LIST_R_SPEC_CONST_CV_HANDLER,
		ZEND_FETCH_LIST_R_SPEC_TMPVARCV_CONST_HANDLER,
		ZEND_FETCH_LIST_R_SPEC_TMPVARCV_TMPVAR_HANDLER,
		ZEND_FETCH_LIST_R_SPEC_TMPVARCV_TMPVAR_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_FETCH_LIST_R_SPEC_TMPVARCV_CV_HANDLER,
		ZEND_FETCH_LIST_R_SPEC_TMPVARCV_CONST_HANDLER,
		ZEND_FETCH_LIST_R_SPEC_TMPVARCV_TMPVAR_HANDLER,
		ZEND_FETCH_LIST_R_SPEC_TMPVARCV_TMPVAR_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_FETCH_LIST_R_SPEC_TMPVARCV_CV_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_FETCH_LIST_R_SPEC_TMPVARCV_CONST_HANDLER,
		ZEND_FETCH_LIST_R_SPEC_TMPVARCV_TMPVAR_HANDLER,
		ZEND_FETCH_LIST_R_SPEC_TMPVARCV_TMPVAR_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_FETCH_LIST_R_SPEC_TMPVARCV_CV_HANDLER,
		ZEND_FETCH_CONSTANT_SPEC_UNUSED_CONST_HANDLER,
		ZEND_CHECK_FUNC_ARG_SPEC_UNUSED_CONST_HANDLER,
		ZEND_CHECK_FUNC_ARG_SPEC_UNUSED_CONST_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_CHECK_FUNC_ARG_SPEC_UNUSED_UNUSED_HANDLER,
		ZEND_CHECK_FUNC_ARG_SPEC_UNUSED_UNUSED_QUICK_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_EXT_STMT_SPEC_HANDLER,
		ZEND_EXT_FCALL_BEGIN_SPEC_HANDLER,
		ZEND_EXT_FCALL_END_SPEC_HANDLER,
		ZEND_EXT_NOP_SPEC_HANDLER,
		ZEND_TICKS_SPEC_HANDLER,
		ZEND_SEND_VAR_NO_REF_SPEC_VAR_CONST_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_SEND_VAR_NO_REF_SPEC_VAR_UNUSED_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_CATCH_SPEC_CONST_HANDLER,
		ZEND_THROW_SPEC_CONST_HANDLER,
		ZEND_THROW_SPEC_TMPVAR_HANDLER,
		ZEND_THROW_SPEC_TMPVAR_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_THROW_SPEC_CV_HANDLER,
		ZEND_FETCH_CLASS_SPEC_UNUSED_CONST_HANDLER,
		ZEND_FETCH_CLASS_SPEC_UNUSED_TMPVAR_HANDLER,
		ZEND_FETCH_CLASS_SPEC_UNUSED_TMPVAR_HANDLER,
		ZEND_FETCH_CLASS_SPEC_UNUSED_UNUSED_HANDLER,
		ZEND_FETCH_CLASS_SPEC_UNUSED_CV_HANDLER,
		ZEND_CLONE_SPEC_CONST_HANDLER,
		ZEND_CLONE_SPEC_TMPVAR_HANDLER,
		ZEND_CLONE_SPEC_TMPVAR_HANDLER,
		ZEND_CLONE_SPEC_UNUSED_HANDLER,
		ZEND_CLONE_SPEC_CV_HANDLER,
		ZEND_RETURN_BY_REF_SPEC_CONST_HANDLER,
		ZEND_RETURN_BY_REF_SPEC_OBSERVER_HANDLER,
		ZEND_RETURN_BY_REF_SPEC_TMP_HANDLER,
		ZEND_RETURN_BY_REF_SPEC_OBSERVER_HANDLER,
		ZEND_RETURN_BY_REF_SPEC_VAR_HANDLER,
		ZEND_RETURN_BY_REF_SPEC_OBSERVER_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_RETURN_BY_REF_SPEC_CV_HANDLER,
		ZEND_RETURN_BY_REF_SPEC_OBSERVER_HANDLER,
		ZEND_INIT_METHOD_CALL_SPEC_CONST_CONST_HANDLER,
		ZEND_INIT_METHOD_CALL_SPEC_CONST_TMPVAR_HANDLER,
		ZEND_INIT_METHOD_CALL_SPEC_CONST_TMPVAR_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_INIT_METHOD_CALL_SPEC_CONST_CV_HANDLER,
		ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_CONST_HANDLER,
		ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_TMPVAR_HANDLER,
		ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_TMPVAR_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_CV_HANDLER,
		ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_CONST_HANDLER,
		ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_TMPVAR_HANDLER,
		ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_TMPVAR_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_CV_HANDLER,
		ZEND_INIT_METHOD_CALL_SPEC_UNUSED_CONST_HANDLER,
		ZEND_INIT_METHOD_CALL_SPEC_UNUSED_TMPVAR_HANDLER,
		ZEND_INIT_METHOD_CALL_SPEC_UNUSED_TMPVAR_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_INIT_METHOD_CALL_SPEC_UNUSED_CV_HANDLER,
		ZEND_INIT_METHOD_CALL_SPEC_CV_CONST_HANDLER,
		ZEND_INIT_METHOD_CALL_SPEC_CV_TMPVAR_HANDLER,
		ZEND_INIT_METHOD_CALL_SPEC_CV_TMPVAR_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_INIT_METHOD_CALL_SPEC_CV_CV_HANDLER,
		ZEND_INIT_STATIC_METHOD_CALL_SPEC_CONST_CONST_HANDLER,
		ZEND_INIT_STATIC_METHOD_CALL_SPEC_CONST_TMPVAR_HANDLER,
		ZEND_INIT_STATIC_METHOD_CALL_SPEC_CONST_TMPVAR_HANDLER,
		ZEND_INIT_STATIC_METHOD_CALL_SPEC_CONST_UNUSED_HANDLER,
		ZEND_INIT_STATIC_METHOD_CALL_SPEC_CONST_CV_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_INIT_STATIC_METHOD_CALL_SPEC_VAR_CONST_HANDLER,
		ZEND_INIT_STATIC_METHOD_CALL_SPEC_VAR_TMPVAR_HANDLER,
		ZEND_INIT_STATIC_METHOD_CALL_SPEC_VAR_TMPVAR_HANDLER,
		ZEND_INIT_STATIC_METHOD_CALL_SPEC_VAR_UNUSED_HANDLER,
		ZEND_INIT_STATIC_METHOD_CALL_SPEC_VAR_CV_HANDLER,
		ZEND_INIT_STATIC_METHOD_CALL_SPEC_UNUSED_CONST_HANDLER,
		ZEND_INIT_STATIC_METHOD_CALL_SPEC_UNUSED_TMPVAR_HANDLER,
		ZEND_INIT_STATIC_METHOD_CALL_SPEC_UNUSED_TMPVAR_HANDLER,
		ZEND_INIT_STATIC_METHOD_CALL_SPEC_UNUSED_UNUSED_HANDLER,
		ZEND_INIT_STATIC_METHOD_CALL_SPEC_UNUSED_CV_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_ISSET_ISEMPTY_VAR_SPEC_CONST_UNUSED_HANDLER,
		ZEND_ISSET_ISEMPTY_VAR_SPEC_TMPVAR_UNUSED_HANDLER,
		ZEND_ISSET_ISEMPTY_VAR_SPEC_TMPVAR_UNUSED_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_ISSET_ISEMPTY_VAR_SPEC_CV_UNUSED_HANDLER,
		ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CONST_CONST_HANDLER,
		ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CONST_TMPVAR_HANDLER,
		ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CONST_TMPVAR_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CONST_CV_HANDLER,
		ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_TMPVAR_CONST_HANDLER,
		ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_TMPVAR_TMPVAR_HANDLER,
		ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_TMPVAR_TMPVAR_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_TMPVAR_CV_HANDLER,
		ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_TMPVAR_CONST_HANDLER,
		ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_TMPVAR_TMPVAR_HANDLER,
		ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_TMPVAR_TMPVAR_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_TMPVAR_CV_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CV_CONST_HANDLER,
		ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CV_TMPVAR_HANDLER,
		ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CV_TMPVAR_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CV_CV_HANDLER,
		ZEND_SEND_VAL_EX_SPEC_CONST_CONST_HANDLER,
		ZEND_SEND_VAL_EX_SPEC_CONST_CONST_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_SEND_VAL_EX_SPEC_CONST_UNUSED_HANDLER,
		ZEND_SEND_VAL_EX_SPEC_CONST_UNUSED_QUICK_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_SEND_VAL_EX_SPEC_TMP_CONST_HANDLER,
		ZEND_SEND_VAL_EX_SPEC_TMP_CONST_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_SEND_VAL_EX_SPEC_TMP_UNUSED_HANDLER,
		ZEND_SEND_VAL_EX_SPEC_TMP_UNUSED_QUICK_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_SEND_VAR_SPEC_VAR_CONST_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_SEND_VAR_SPEC_VAR_UNUSED_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_SEND_VAR_SPEC_CV_CONST_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_SEND_VAR_SPEC_CV_UNUSED_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_INIT_USER_CALL_SPEC_CONST_CONST_HANDLER,
		ZEND_INIT_USER_CALL_SPEC_CONST_TMPVAR_HANDLER,
		ZEND_INIT_USER_CALL_SPEC_CONST_TMPVAR_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_INIT_USER_CALL_SPEC_CONST_CV_HANDLER,
		ZEND_SEND_ARRAY_SPEC_HANDLER,
		ZEND_SEND_USER_SPEC_CONST_HANDLER,
		ZEND_SEND_USER_SPEC_TMP_HANDLER,
		ZEND_SEND_USER_SPEC_VAR_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_SEND_USER_SPEC_CV_HANDLER,
		ZEND_STRLEN_SPEC_CONST_HANDLER,
		ZEND_STRLEN_SPEC_TMPVAR_HANDLER,
		ZEND_STRLEN_SPEC_TMPVAR_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_STRLEN_SPEC_CV_HANDLER,
		ZEND_DEFINED_SPEC_CONST_HANDLER,
		ZEND_TYPE_CHECK_SPEC_CONST_HANDLER,
		ZEND_TYPE_CHECK_SPEC_TMPVAR_HANDLER,
		ZEND_TYPE_CHECK_SPEC_TMPVAR_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_TYPE_CHECK_SPEC_CV_HANDLER,
		ZEND_VERIFY_RETURN_TYPE_SPEC_CONST_UNUSED_HANDLER,
		ZEND_VERIFY_RETURN_TYPE_SPEC_TMP_UNUSED_HANDLER,
		ZEND_VERIFY_RETURN_TYPE_SPEC_VAR_UNUSED_HANDLER,
		ZEND_VERIFY_RETURN_TYPE_SPEC_UNUSED_UNUSED_HANDLER,
		ZEND_VERIFY_RETURN_TYPE_SPEC_CV_UNUSED_HANDLER,
		ZEND_FE_RESET_RW_SPEC_CONST_HANDLER,
		ZEND_FE_RESET_RW_SPEC_TMP_HANDLER,
		ZEND_FE_RESET_RW_SPEC_VAR_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_FE_RESET_RW_SPEC_CV_HANDLER,
		ZEND_FE_FETCH_RW_SPEC_VAR_HANDLER,
		ZEND_FE_FREE_SPEC_TMPVAR_HANDLER,
		ZEND_INIT_DYNAMIC_CALL_SPEC_CONST_HANDLER,
		ZEND_INIT_DYNAMIC_CALL_SPEC_TMPVAR_HANDLER,
		ZEND_INIT_DYNAMIC_CALL_SPEC_TMPVAR_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_INIT_DYNAMIC_CALL_SPEC_CV_HANDLER,
		ZEND_DO_ICALL_SPEC_RETVAL_UNUSED_HANDLER,
		ZEND_DO_ICALL_SPEC_RETVAL_USED_HANDLER,
		ZEND_DO_ICALL_SPEC_OBSERVER_HANDLER,
		ZEND_DO_ICALL_SPEC_OBSERVER_HANDLER,
		ZEND_DO_UCALL_SPEC_RETVAL_UNUSED_HANDLER,
		ZEND_DO_UCALL_SPEC_RETVAL_USED_HANDLER,
		ZEND_DO_UCALL_SPEC_OBSERVER_HANDLER,
		ZEND_DO_UCALL_SPEC_OBSERVER_HANDLER,
		ZEND_DO_FCALL_BY_NAME_SPEC_RETVAL_UNUSED_HANDLER,
		ZEND_DO_FCALL_BY_NAME_SPEC_RETVAL_USED_HANDLER,
		ZEND_DO_FCALL_BY_NAME_SPEC_OBSERVER_HANDLER,
		ZEND_DO_FCALL_BY_NAME_SPEC_OBSERVER_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_PRE_INC_OBJ_SPEC_VAR_CONST_HANDLER,
		ZEND_PRE_INC_OBJ_SPEC_VAR_TMPVAR_HANDLER,
		ZEND_PRE_INC_OBJ_SPEC_VAR_TMPVAR_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_PRE_INC_OBJ_SPEC_VAR_CV_HANDLER,
		ZEND_PRE_INC_OBJ_SPEC_UNUSED_CONST_HANDLER,
		ZEND_PRE_INC_OBJ_SPEC_UNUSED_TMPVAR_HANDLER,
		ZEND_PRE_INC_OBJ_SPEC_UNUSED_TMPVAR_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_PRE_INC_OBJ_SPEC_UNUSED_CV_HANDLER,
		ZEND_PRE_INC_OBJ_SPEC_CV_CONST_HANDLER,
		ZEND_PRE_INC_OBJ_SPEC_CV_TMPVAR_HANDLER,
		ZEND_PRE_INC_OBJ_SPEC_CV_TMPVAR_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_PRE_INC_OBJ_SPEC_CV_CV_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_POST_INC_OBJ_SPEC_VAR_CONST_HANDLER,
		ZEND_POST_INC_OBJ_SPEC_VAR_TMPVAR_HANDLER,
		ZEND_POST_INC_OBJ_SPEC_VAR_TMPVAR_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_POST_INC_OBJ_SPEC_VAR_CV_HANDLER,
		ZEND_POST_INC_OBJ_SPEC_UNUSED_CONST_HANDLER,
		ZEND_POST_INC_OBJ_SPEC_UNUSED_TMPVAR_HANDLER,
		ZEND_POST_INC_OBJ_SPEC_UNUSED_TMPVAR_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_POST_INC_OBJ_SPEC_UNUSED_CV_HANDLER,
		ZEND_POST_INC_OBJ_SPEC_CV_CONST_HANDLER,
		ZEND_POST_INC_OBJ_SPEC_CV_TMPVAR_HANDLER,
		ZEND_POST_INC_OBJ_SPEC_CV_TMPVAR_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_POST_INC_OBJ_SPEC_CV_CV_HANDLER,
		ZEND_ECHO_SPEC_CONST_HANDLER,
		ZEND_ECHO_SPEC_TMPVAR_HANDLER,
		ZEND_ECHO_SPEC_TMPVAR_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_ECHO_SPEC_CV_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_INSTANCEOF_SPEC_TMPVAR_CONST_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_INSTANCEOF_SPEC_TMPVAR_VAR_HANDLER,
		ZEND_INSTANCEOF_SPEC_TMPVAR_UNUSED_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_INSTANCEOF_SPEC_TMPVAR_CONST_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_INSTANCEOF_SPEC_TMPVAR_VAR_HANDLER,
		ZEND_INSTANCEOF_SPEC_TMPVAR_UNUSED_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_INSTANCEOF_SPEC_CV_CONST_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_INSTANCEOF_SPEC_CV_VAR_HANDLER,
		ZEND_INSTANCEOF_SPEC_CV_UNUSED_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_GENERATOR_CREATE_SPEC_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_MAKE_REF_SPEC_VAR_UNUSED_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_MAKE_REF_SPEC_CV_UNUSED_HANDLER,
		ZEND_DECLARE_FUNCTION_SPEC_HANDLER,
		ZEND_DECLARE_LAMBDA_FUNCTION_SPEC_CONST_HANDLER,
		ZEND_DECLARE_CONST_SPEC_CONST_CONST_HANDLER,
		ZEND_DECLARE_CLASS_SPEC_CONST_HANDLER,
		ZEND_DECLARE_CLASS_DELAYED_SPEC_CONST_CONST_HANDLER,
		ZEND_DECLARE_ANON_CLASS_SPEC_HANDLER,
		ZEND_ADD_ARRAY_UNPACK_SPEC_HANDLER,
		ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CONST_CONST_HANDLER,
		ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CONST_TMPVAR_HANDLER,
		ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CONST_TMPVAR_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CONST_CV_HANDLER,
		ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TMPVAR_CONST_HANDLER,
		ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TMPVAR_TMPVAR_HANDLER,
		ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TMPVAR_TMPVAR_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TMPVAR_CV_HANDLER,
		ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TMPVAR_CONST_HANDLER,
		ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TMPVAR_TMPVAR_HANDLER,
		ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TMPVAR_TMPVAR_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TMPVAR_CV_HANDLER,
		ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_UNUSED_CONST_HANDLER,
		ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_UNUSED_TMPVAR_HANDLER,
		ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_UNUSED_TMPVAR_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_UNUSED_CV_HANDLER,
		ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CV_CONST_HANDLER,
		ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CV_TMPVAR_HANDLER,
		ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CV_TMPVAR_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CV_CV_HANDLER,
		ZEND_HANDLE_EXCEPTION_SPEC_HANDLER,
		ZEND_USER_OPCODE_SPEC_HANDLER,
		ZEND_ASSERT_CHECK_SPEC_HANDLER,
		ZEND_JMP_SET_SPEC_CONST_HANDLER,
		ZEND_JMP_SET_SPEC_TMP_HANDLER,
		ZEND_JMP_SET_SPEC_VAR_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_JMP_SET_SPEC_CV_HANDLER,
		ZEND_UNSET_CV_SPEC_CV_UNUSED_HANDLER,
		ZEND_ISSET_ISEMPTY_CV_SPEC_CV_UNUSED_SET_HANDLER,
		ZEND_ISSET_ISEMPTY_CV_SPEC_CV_UNUSED_EMPTY_HANDLER,
		ZEND_FETCH_LIST_W_SPEC_VAR_CONST_HANDLER,
		ZEND_FETCH_LIST_W_SPEC_VAR_TMPVAR_HANDLER,
		ZEND_FETCH_LIST_W_SPEC_VAR_TMPVAR_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_FETCH_LIST_W_SPEC_VAR_CV_HANDLER,
		ZEND_SEPARATE_SPEC_VAR_UNUSED_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_FETCH_CLASS_NAME_SPEC_TMPVAR_HANDLER,
		ZEND_FETCH_CLASS_NAME_SPEC_TMPVAR_HANDLER,
		ZEND_FETCH_CLASS_NAME_SPEC_UNUSED_HANDLER,
		ZEND_FETCH_CLASS_NAME_SPEC_CV_HANDLER,
		ZEND_CALL_TRAMPOLINE_SPEC_HANDLER,
		ZEND_CALL_TRAMPOLINE_SPEC_OBSERVER_HANDLER,
		ZEND_DISCARD_EXCEPTION_SPEC_HANDLER,
		ZEND_YIELD_SPEC_CONST_CONST_HANDLER,
		ZEND_YIELD_SPEC_CONST_TMPVAR_HANDLER,
		ZEND_YIELD_SPEC_CONST_TMPVAR_HANDLER,
		ZEND_YIELD_SPEC_CONST_UNUSED_HANDLER,
		ZEND_YIELD_SPEC_CONST_CV_HANDLER,
		ZEND_YIELD_SPEC_TMP_CONST_HANDLER,
		ZEND_YIELD_SPEC_TMP_TMPVAR_HANDLER,
		ZEND_YIELD_SPEC_TMP_TMPVAR_HANDLER,
		ZEND_YIELD_SPEC_TMP_UNUSED_HANDLER,
		ZEND_YIELD_SPEC_TMP_CV_HANDLER,
		ZEND_YIELD_SPEC_VAR_CONST_HANDLER,
		ZEND_YIELD_SPEC_VAR_TMPVAR_HANDLER,
		ZEND_YIELD_SPEC_VAR_TMPVAR_HANDLER,
		ZEND_YIELD_SPEC_VAR_UNUSED_HANDLER,
		ZEND_YIELD_SPEC_VAR_CV_HANDLER,
		ZEND_YIELD_SPEC_UNUSED_CONST_HANDLER,
		ZEND_YIELD_SPEC_UNUSED_TMPVAR_HANDLER,
		ZEND_YIELD_SPEC_UNUSED_TMPVAR_HANDLER,
		ZEND_YIELD_SPEC_UNUSED_UNUSED_HANDLER,
		ZEND_YIELD_SPEC_UNUSED_CV_HANDLER,
		ZEND_YIELD_SPEC_CV_CONST_HANDLER,
		ZEND_YIELD_SPEC_CV_TMPVAR_HANDLER,
		ZEND_YIELD_SPEC_CV_TMPVAR_HANDLER,
		ZEND_YIELD_SPEC_CV_UNUSED_HANDLER,
		ZEND_YIELD_SPEC_CV_CV_HANDLER,
		ZEND_GENERATOR_RETURN_SPEC_CONST_HANDLER,
		ZEND_GENERATOR_RETURN_SPEC_OBSERVER_HANDLER,
		ZEND_GENERATOR_RETURN_SPEC_TMP_HANDLER,
		ZEND_GENERATOR_RETURN_SPEC_OBSERVER_HANDLER,
		ZEND_GENERATOR_RETURN_SPEC_VAR_HANDLER,
		ZEND_GENERATOR_RETURN_SPEC_OBSERVER_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_GENERATOR_RETURN_SPEC_CV_HANDLER,
		ZEND_GENERATOR_RETURN_SPEC_OBSERVER_HANDLER,
		ZEND_FAST_CALL_SPEC_HANDLER,
		ZEND_FAST_RET_SPEC_HANDLER,
		ZEND_RECV_VARIADIC_SPEC_UNUSED_HANDLER,
		ZEND_SEND_UNPACK_SPEC_HANDLER,
		ZEND_YIELD_FROM_SPEC_CONST_HANDLER,
		ZEND_YIELD_FROM_SPEC_TMPVAR_HANDLER,
		ZEND_YIELD_FROM_SPEC_TMPVAR_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_YIELD_FROM_SPEC_CV_HANDLER,
		ZEND_COPY_TMP_SPEC_TMPVAR_UNUSED_HANDLER,
		ZEND_BIND_GLOBAL_SPEC_CV_CONST_HANDLER,
		ZEND_COALESCE_SPEC_CONST_HANDLER,
		ZEND_COALESCE_SPEC_TMP_HANDLER,
		ZEND_COALESCE_SPEC_VAR_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_COALESCE_SPEC_CV_HANDLER,
		ZEND_SPACESHIP_SPEC_CONST_CONST_HANDLER,
		ZEND_SPACESHIP_SPEC_CONST_TMPVAR_HANDLER,
		ZEND_SPACESHIP_SPEC_CONST_TMPVAR_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_SPACESHIP_SPEC_CONST_CV_HANDLER,
		ZEND_SPACESHIP_SPEC_TMPVAR_CONST_HANDLER,
		ZEND_SPACESHIP_SPEC_TMPVAR_TMPVAR_HANDLER,
		ZEND_SPACESHIP_SPEC_TMPVAR_TMPVAR_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_SPACESHIP_SPEC_TMPVAR_CV_HANDLER,
		ZEND_SPACESHIP_SPEC_TMPVAR_CONST_HANDLER,
		ZEND_SPACESHIP_SPEC_TMPVAR_TMPVAR_HANDLER,
		ZEND_SPACESHIP_SPEC_TMPVAR_TMPVAR_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_SPACESHIP_SPEC_TMPVAR_CV_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_SPACESHIP_SPEC_CV_CONST_HANDLER,
		ZEND_SPACESHIP_SPEC_CV_TMPVAR_HANDLER,
		ZEND_SPACESHIP_SPEC_CV_TMPVAR_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_SPACESHIP_SPEC_CV_CV_HANDLER,
		ZEND_FUNC_NUM_ARGS_SPEC_UNUSED_UNUSED_HANDLER,
		ZEND_FUNC_GET_ARGS_SPEC_CONST_UNUSED_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_FUNC_GET_ARGS_SPEC_UNUSED_UNUSED_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_FETCH_STATIC_PROP_R_SPEC_HANDLER,
		ZEND_FETCH_STATIC_PROP_W_SPEC_HANDLER,
		ZEND_FETCH_STATIC_PROP_RW_SPEC_HANDLER,
		ZEND_FETCH_STATIC_PROP_IS_SPEC_HANDLER,
		ZEND_FETCH_STATIC_PROP_FUNC_ARG_SPEC_HANDLER,
		ZEND_FETCH_STATIC_PROP_UNSET_SPEC_HANDLER,
		ZEND_UNSET_STATIC_PROP_SPEC_HANDLER,
		ZEND_ISSET_ISEMPTY_STATIC_PROP_SPEC_HANDLER,
		ZEND_FETCH_CLASS_CONSTANT_SPEC_CONST_CONST_HANDLER,
		ZEND_FETCH_CLASS_CONSTANT_SPEC_CONST_TMPVARCV_HANDLER,
		ZEND_FETCH_CLASS_CONSTANT_SPEC_CONST_TMPVARCV_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_FETCH_CLASS_CONSTANT_SPEC_CONST_TMPVARCV_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_FETCH_CLASS_CONSTANT_SPEC_VAR_CONST_HANDLER,
		ZEND_FETCH_CLASS_CONSTANT_SPEC_VAR_TMPVARCV_HANDLER,
		ZEND_FETCH_CLASS_CONSTANT_SPEC_VAR_TMPVARCV_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_FETCH_CLASS_CONSTANT_SPEC_VAR_TMPVARCV_HANDLER,
		ZEND_FETCH_CLASS_CONSTANT_SPEC_UNUSED_CONST_HANDLER,
		ZEND_FETCH_CLASS_CONSTANT_SPEC_UNUSED_TMPVARCV_HANDLER,
		ZEND_FETCH_CLASS_CONSTANT_SPEC_UNUSED_TMPVARCV_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_FETCH_CLASS_CONSTANT_SPEC_UNUSED_TMPVARCV_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_BIND_LEXICAL_SPEC_TMP_CV_HANDLER,
		ZEND_BIND_STATIC_SPEC_CV_HANDLER,
		ZEND_FETCH_THIS_SPEC_UNUSED_UNUSED_HANDLER,
		ZEND_SEND_FUNC_ARG_SPEC_VAR_CONST_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_SEND_FUNC_ARG_SPEC_VAR_UNUSED_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_ISSET_ISEMPTY_THIS_SPEC_UNUSED_UNUSED_HANDLER,
		ZEND_SWITCH_LONG_SPEC_CONST_CONST_HANDLER,
		ZEND_SWITCH_LONG_SPEC_TMPVARCV_CONST_HANDLER,
		ZEND_SWITCH_LONG_SPEC_TMPVARCV_CONST_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_SWITCH_LONG_SPEC_TMPVARCV_CONST_HANDLER,
		ZEND_SWITCH_STRING_SPEC_CONST_CONST_HANDLER,
		ZEND_SWITCH_STRING_SPEC_TMPVARCV_CONST_HANDLER,
		ZEND_SWITCH_STRING_SPEC_TMPVARCV_CONST_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_SWITCH_STRING_SPEC_TMPVARCV_CONST_HANDLER,
		ZEND_IN_ARRAY_SPEC_CONST_CONST_HANDLER,
		ZEND_IN_ARRAY_SPEC_TMP_CONST_HANDLER,
		ZEND_IN_ARRAY_SPEC_VAR_CONST_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_IN_ARRAY_SPEC_CV_CONST_HANDLER,
		ZEND_COUNT_SPEC_CONST_UNUSED_HANDLER,
		ZEND_COUNT_SPEC_TMPVAR_UNUSED_HANDLER,
		ZEND_COUNT_SPEC_TMPVAR_UNUSED_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_COUNT_SPEC_CV_UNUSED_HANDLER,
		ZEND_GET_CLASS_SPEC_CONST_UNUSED_HANDLER,
		ZEND_GET_CLASS_SPEC_TMPVAR_UNUSED_HANDLER,
		ZEND_GET_CLASS_SPEC_TMPVAR_UNUSED_HANDLER,
		ZEND_GET_CLASS_SPEC_UNUSED_UNUSED_HANDLER,
		ZEND_GET_CLASS_SPEC_CV_UNUSED_HANDLER,
		ZEND_GET_CALLED_CLASS_SPEC_UNUSED_UNUSED_HANDLER,
		ZEND_GET_TYPE_SPEC_CONST_UNUSED_HANDLER,
		ZEND_GET_TYPE_SPEC_TMP_UNUSED_HANDLER,
		ZEND_GET_TYPE_SPEC_VAR_UNUSED_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_GET_TYPE_SPEC_CV_UNUSED_HANDLER,
		ZEND_ARRAY_KEY_EXISTS_SPEC_CONST_CONST_HANDLER,
		ZEND_ARRAY_KEY_EXISTS_SPEC_CONST_TMPVAR_HANDLER,
		ZEND_ARRAY_KEY_EXISTS_SPEC_CONST_TMPVAR_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_ARRAY_KEY_EXISTS_SPEC_CONST_CV_HANDLER,
		ZEND_ARRAY_KEY_EXISTS_SPEC_TMPVAR_CONST_HANDLER,
		ZEND_ARRAY_KEY_EXISTS_SPEC_TMPVAR_TMPVAR_HANDLER,
		ZEND_ARRAY_KEY_EXISTS_SPEC_TMPVAR_TMPVAR_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_ARRAY_KEY_EXISTS_SPEC_TMPVAR_CV_HANDLER,
		ZEND_ARRAY_KEY_EXISTS_SPEC_TMPVAR_CONST_HANDLER,
		ZEND_ARRAY_KEY_EXISTS_SPEC_TMPVAR_TMPVAR_HANDLER,
		ZEND_ARRAY_KEY_EXISTS_SPEC_TMPVAR_TMPVAR_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_ARRAY_KEY_EXISTS_SPEC_TMPVAR_CV_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_ARRAY_KEY_EXISTS_SPEC_CV_CONST_HANDLER,
		ZEND_ARRAY_KEY_EXISTS_SPEC_CV_TMPVAR_HANDLER,
		ZEND_ARRAY_KEY_EXISTS_SPEC_CV_TMPVAR_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_ARRAY_KEY_EXISTS_SPEC_CV_CV_HANDLER,
		ZEND_MATCH_SPEC_CONST_CONST_HANDLER,
		ZEND_MATCH_SPEC_TMPVARCV_CONST_HANDLER,
		ZEND_MATCH_SPEC_TMPVARCV_CONST_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_MATCH_SPEC_TMPVARCV_CONST_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_CASE_STRICT_SPEC_TMP_CONST_HANDLER,
		ZEND_CASE_STRICT_SPEC_TMP_TMP_HANDLER,
		ZEND_CASE_STRICT_SPEC_TMP_VAR_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_CASE_STRICT_SPEC_TMP_CV_HANDLER,
		ZEND_CASE_STRICT_SPEC_VAR_CONST_HANDLER,
		ZEND_CASE_STRICT_SPEC_VAR_TMP_HANDLER,
		ZEND_CASE_STRICT_SPEC_VAR_VAR_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_CASE_STRICT_SPEC_VAR_CV_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_MATCH_ERROR_SPEC_CONST_UNUSED_HANDLER,
		ZEND_MATCH_ERROR_SPEC_TMPVARCV_UNUSED_HANDLER,
		ZEND_MATCH_ERROR_SPEC_TMPVARCV_UNUSED_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_MATCH_ERROR_SPEC_TMPVARCV_UNUSED_HANDLER,
		ZEND_JMP_NULL_SPEC_CONST_HANDLER,
		ZEND_JMP_NULL_SPEC_TMP_HANDLER,
		ZEND_JMP_NULL_SPEC_VAR_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_JMP_NULL_SPEC_CV_HANDLER,
		ZEND_CHECK_UNDEF_ARGS_SPEC_UNUSED_UNUSED_HANDLER,
		ZEND_FETCH_GLOBALS_SPEC_UNUSED_UNUSED_HANDLER,
		ZEND_VERIFY_NEVER_TYPE_SPEC_UNUSED_UNUSED_HANDLER,
		ZEND_CALLABLE_CONVERT_SPEC_UNUSED_UNUSED_HANDLER,
		ZEND_BIND_INIT_STATIC_OR_JMP_SPEC_CV_HANDLER,
		ZEND_FRAMELESS_ICALL_0_SPEC_UNUSED_UNUSED_HANDLER,
		ZEND_FRAMELESS_ICALL_0_SPEC_OBSERVER_HANDLER,
		ZEND_FRAMELESS_ICALL_1_SPEC_UNUSED_HANDLER,
		ZEND_FRAMELESS_ICALL_1_SPEC_OBSERVER_HANDLER,
		ZEND_FRAMELESS_ICALL_2_SPEC_HANDLER,
		ZEND_FRAMELESS_ICALL_2_SPEC_OBSERVER_HANDLER,
		ZEND_FRAMELESS_ICALL_3_SPEC_HANDLER,
		ZEND_FRAMELESS_ICALL_3_SPEC_OBSERVER_HANDLER,
		ZEND_JMP_FRAMELESS_SPEC_CONST_HANDLER,
		ZEND_INIT_PARENT_PROPERTY_HOOK_CALL_SPEC_CONST_UNUSED_HANDLER,
		ZEND_DECLARE_ATTRIBUTED_CONST_SPEC_CONST_CONST_HANDLER,
		ZEND_INIT_FCALL_OFFSET_SPEC_CONST_HANDLER,
		ZEND_RECV_NOTYPE_SPEC_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_COUNT_ARRAY_SPEC_TMPVAR_UNUSED_HANDLER,
		ZEND_COUNT_ARRAY_SPEC_TMPVAR_UNUSED_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_COUNT_ARRAY_SPEC_CV_UNUSED_HANDLER,
		ZEND_JMP_FORWARD_SPEC_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_CONST_HANDLER,
		ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_HANDLER,
		ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_HANDLER,
		ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_CONST_HANDLER,
		ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_HANDLER,
		ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_CONST_HANDLER,
		ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_HANDLER,
		ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_ADD_LONG_SPEC_TMPVARCV_CONST_HANDLER,
		ZEND_ADD_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
		ZEND_ADD_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_ADD_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
		ZEND_ADD_LONG_SPEC_TMPVARCV_CONST_HANDLER,
		ZEND_ADD_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
		ZEND_ADD_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_ADD_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_ADD_LONG_SPEC_TMPVARCV_CONST_HANDLER,
		ZEND_ADD_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
		ZEND_ADD_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_ADD_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_ADD_DOUBLE_SPEC_TMPVARCV_CONST_HANDLER,
		ZEND_ADD_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
		ZEND_ADD_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_ADD_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
		ZEND_ADD_DOUBLE_SPEC_TMPVARCV_CONST_HANDLER,
		ZEND_ADD_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
		ZEND_ADD_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_ADD_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_ADD_DOUBLE_SPEC_TMPVARCV_CONST_HANDLER,
		ZEND_ADD_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
		ZEND_ADD_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_ADD_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_SUB_LONG_NO_OVERFLOW_SPEC_CONST_TMPVARCV_HANDLER,
		ZEND_SUB_LONG_NO_OVERFLOW_SPEC_CONST_TMPVARCV_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_SUB_LONG_NO_OVERFLOW_SPEC_CONST_TMPVARCV_HANDLER,
		ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_CONST_HANDLER,
		ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_HANDLER,
		ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_HANDLER,
		ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_CONST_HANDLER,
		ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_HANDLER,
		ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_CONST_HANDLER,
		ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_HANDLER,
		ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_SUB_LONG_SPEC_CONST_TMPVARCV_HANDLER,
		ZEND_SUB_LONG_SPEC_CONST_TMPVARCV_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_SUB_LONG_SPEC_CONST_TMPVARCV_HANDLER,
		ZEND_SUB_LONG_SPEC_TMPVARCV_CONST_HANDLER,
		ZEND_SUB_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
		ZEND_SUB_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_SUB_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
		ZEND_SUB_LONG_SPEC_TMPVARCV_CONST_HANDLER,
		ZEND_SUB_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
		ZEND_SUB_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_SUB_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_SUB_LONG_SPEC_TMPVARCV_CONST_HANDLER,
		ZEND_SUB_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
		ZEND_SUB_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_SUB_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_SUB_DOUBLE_SPEC_CONST_TMPVARCV_HANDLER,
		ZEND_SUB_DOUBLE_SPEC_CONST_TMPVARCV_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_SUB_DOUBLE_SPEC_CONST_TMPVARCV_HANDLER,
		ZEND_SUB_DOUBLE_SPEC_TMPVARCV_CONST_HANDLER,
		ZEND_SUB_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
		ZEND_SUB_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_SUB_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
		ZEND_SUB_DOUBLE_SPEC_TMPVARCV_CONST_HANDLER,
		ZEND_SUB_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
		ZEND_SUB_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_SUB_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_SUB_DOUBLE_SPEC_TMPVARCV_CONST_HANDLER,
		ZEND_SUB_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
		ZEND_SUB_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_SUB_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_CONST_HANDLER,
		ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_HANDLER,
		ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_HANDLER,
		ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_CONST_HANDLER,
		ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_HANDLER,
		ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_CONST_HANDLER,
		ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_HANDLER,
		ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_MUL_LONG_SPEC_TMPVARCV_CONST_HANDLER,
		ZEND_MUL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
		ZEND_MUL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_MUL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
		ZEND_MUL_LONG_SPEC_TMPVARCV_CONST_HANDLER,
		ZEND_MUL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
		ZEND_MUL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_MUL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_MUL_LONG_SPEC_TMPVARCV_CONST_HANDLER,
		ZEND_MUL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
		ZEND_MUL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_MUL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_MUL_DOUBLE_SPEC_TMPVARCV_CONST_HANDLER,
		ZEND_MUL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
		ZEND_MUL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_MUL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
		ZEND_MUL_DOUBLE_SPEC_TMPVARCV_CONST_HANDLER,
		ZEND_MUL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
		ZEND_MUL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_MUL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_MUL_DOUBLE_SPEC_TMPVARCV_CONST_HANDLER,
		ZEND_MUL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
		ZEND_MUL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_MUL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_CONST_HANDLER,
		ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPZ_HANDLER,
		ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER,
		ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
		ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
		ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
		ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
		ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
		ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
		ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
		ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
		ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_CONST_HANDLER,
		ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPZ_HANDLER,
		ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER,
		ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
		ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
		ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
		ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
		ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
		ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
		ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
		ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_CONST_HANDLER,
		ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPZ_HANDLER,
		ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER,
		ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
		ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
		ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
		ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
		ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
		ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
		ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
		ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_HANDLER,
		ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ_HANDLER,
		ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER,
		ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
		ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
		ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
		ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
		ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
		ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
		ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
		ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
		ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_HANDLER,
		ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ_HANDLER,
		ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER,
		ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
		ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
		ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
		ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
		ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
		ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
		ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
		ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_HANDLER,
		ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ_HANDLER,
		ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER,
		ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
		ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
		ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
		ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
		ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
		ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
		ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
		ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_CONST_HANDLER,
		ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPZ_HANDLER,
		ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER,
		ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
		ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
		ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
		ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
		ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
		ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
		ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
		ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
		ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_CONST_HANDLER,
		ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPZ_HANDLER,
		ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER,
		ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
		ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
		ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
		ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
		ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
		ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
		ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
		ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_CONST_HANDLER,
		ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPZ_HANDLER,
		ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER,
		ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
		ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
		ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
		ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
		ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
		ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
		ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
		ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_HANDLER,
		ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ_HANDLER,
		ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER,
		ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
		ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
		ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
		ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
		ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
		ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
		ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
		ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
		ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_HANDLER,
		ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ_HANDLER,
		ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER,
		ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
		ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
		ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
		ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
		ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
		ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
		ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
		ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_HANDLER,
		ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ_HANDLER,
		ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER,
		ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
		ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
		ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
		ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
		ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
		ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
		ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
		ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
		ZEND_IS_IDENTICAL_EMPTY_ARRAY_SPEC_TMPVARCV_CONST_HANDLER,
		ZEND_IS_IDENTICAL_EMPTY_ARRAY_SPEC_TMPVARCV_CONST_JMPZ_HANDLER,
		ZEND_IS_IDENTICAL_EMPTY_ARRAY_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER,
		ZEND_IS_NOT_IDENTICAL_EMPTY_ARRAY_SPEC_TMPVARCV_CONST_HANDLER,
		ZEND_IS_NOT_IDENTICAL_EMPTY_ARRAY_SPEC_TMPVARCV_CONST_JMPZ_HANDLER,
		ZEND_IS_NOT_IDENTICAL_EMPTY_ARRAY_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER,
		ZEND_IS_IDENTICAL_NOTHROW_SPEC_CV_CONST_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_IS_IDENTICAL_NOTHROW_SPEC_CV_CV_HANDLER,
		ZEND_IS_NOT_IDENTICAL_NOTHROW_SPEC_CV_CONST_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_IS_NOT_IDENTICAL_NOTHROW_SPEC_CV_CV_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV_HANDLER,
		ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV_JMPZ_HANDLER,
		ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV_JMPNZ_HANDLER,
		ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV_HANDLER,
		ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV_JMPZ_HANDLER,
		ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV_JMPNZ_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV_HANDLER,
		ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV_JMPZ_HANDLER,
		ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV_JMPNZ_HANDLER,
		ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST_HANDLER,
		ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST_JMPZ_HANDLER,
		ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER,
		ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
		ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
		ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
		ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
		ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
		ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
		ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
		ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
		ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST_HANDLER,
		ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST_JMPZ_HANDLER,
		ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER,
		ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
		ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
		ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
		ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
		ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
		ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
		ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
		ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST_HANDLER,
		ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST_JMPZ_HANDLER,
		ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER,
		ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
		ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
		ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
		ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
		ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
		ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
		ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
		ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV_HANDLER,
		ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV_JMPZ_HANDLER,
		ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV_JMPNZ_HANDLER,
		ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV_HANDLER,
		ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV_JMPZ_HANDLER,
		ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV_JMPNZ_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV_HANDLER,
		ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV_JMPZ_HANDLER,
		ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV_JMPNZ_HANDLER,
		ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST_HANDLER,
		ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ_HANDLER,
		ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER,
		ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
		ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
		ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
		ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
		ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
		ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
		ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
		ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
		ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST_HANDLER,
		ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ_HANDLER,
		ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER,
		ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
		ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
		ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
		ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
		ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
		ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
		ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
		ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST_HANDLER,
		ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ_HANDLER,
		ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER,
		ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
		ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
		ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
		ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
		ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
		ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
		ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
		ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV_HANDLER,
		ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV_JMPZ_HANDLER,
		ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV_JMPNZ_HANDLER,
		ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV_HANDLER,
		ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV_JMPZ_HANDLER,
		ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV_JMPNZ_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV_HANDLER,
		ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV_JMPZ_HANDLER,
		ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV_JMPNZ_HANDLER,
		ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST_HANDLER,
		ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPZ_HANDLER,
		ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER,
		ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
		ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
		ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
		ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
		ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
		ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
		ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
		ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
		ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST_HANDLER,
		ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPZ_HANDLER,
		ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER,
		ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
		ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
		ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
		ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
		ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
		ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
		ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
		ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST_HANDLER,
		ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPZ_HANDLER,
		ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER,
		ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
		ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
		ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
		ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
		ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
		ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
		ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
		ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_HANDLER,
		ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_JMPZ_HANDLER,
		ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_JMPNZ_HANDLER,
		ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_HANDLER,
		ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_JMPZ_HANDLER,
		ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_JMPNZ_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_HANDLER,
		ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_JMPZ_HANDLER,
		ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_JMPNZ_HANDLER,
		ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_HANDLER,
		ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ_HANDLER,
		ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER,
		ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
		ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
		ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
		ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
		ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
		ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
		ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
		ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
		ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_HANDLER,
		ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ_HANDLER,
		ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER,
		ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
		ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
		ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
		ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
		ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
		ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
		ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
		ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_HANDLER,
		ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ_HANDLER,
		ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER,
		ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
		ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
		ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
		ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
		ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
		ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
		ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
		ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
		ZEND_PRE_INC_LONG_NO_OVERFLOW_SPEC_CV_RETVAL_UNUSED_HANDLER,
		ZEND_PRE_INC_LONG_NO_OVERFLOW_SPEC_CV_RETVAL_USED_HANDLER,
		ZEND_PRE_INC_LONG_SPEC_CV_RETVAL_UNUSED_HANDLER,
		ZEND_PRE_INC_LONG_SPEC_CV_RETVAL_USED_HANDLER,
		ZEND_PRE_DEC_LONG_NO_OVERFLOW_SPEC_CV_RETVAL_UNUSED_HANDLER,
		ZEND_PRE_DEC_LONG_NO_OVERFLOW_SPEC_CV_RETVAL_USED_HANDLER,
		ZEND_PRE_DEC_LONG_SPEC_CV_RETVAL_UNUSED_HANDLER,
		ZEND_PRE_DEC_LONG_SPEC_CV_RETVAL_USED_HANDLER,
		ZEND_POST_INC_LONG_NO_OVERFLOW_SPEC_CV_HANDLER,
		ZEND_POST_INC_LONG_SPEC_CV_HANDLER,
		ZEND_POST_DEC_LONG_NO_OVERFLOW_SPEC_CV_HANDLER,
		ZEND_POST_DEC_LONG_SPEC_CV_HANDLER,
		ZEND_QM_ASSIGN_LONG_SPEC_CONST_HANDLER,
		ZEND_QM_ASSIGN_LONG_SPEC_TMPVARCV_HANDLER,
		ZEND_QM_ASSIGN_LONG_SPEC_TMPVARCV_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_QM_ASSIGN_LONG_SPEC_TMPVARCV_HANDLER,
		ZEND_QM_ASSIGN_DOUBLE_SPEC_CONST_HANDLER,
		ZEND_QM_ASSIGN_DOUBLE_SPEC_TMPVARCV_HANDLER,
		ZEND_QM_ASSIGN_DOUBLE_SPEC_TMPVARCV_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_QM_ASSIGN_DOUBLE_SPEC_TMPVARCV_HANDLER,
		ZEND_QM_ASSIGN_NOREF_SPEC_CONST_HANDLER,
		ZEND_QM_ASSIGN_NOREF_SPEC_TMPVARCV_HANDLER,
		ZEND_QM_ASSIGN_NOREF_SPEC_TMPVARCV_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_QM_ASSIGN_NOREF_SPEC_TMPVARCV_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_FETCH_DIM_R_INDEX_SPEC_CONST_TMPVARCV_HANDLER,
		ZEND_FETCH_DIM_R_INDEX_SPEC_CONST_TMPVARCV_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_FETCH_DIM_R_INDEX_SPEC_CONST_TMPVARCV_HANDLER,
		ZEND_FETCH_DIM_R_INDEX_SPEC_TMPVAR_CONST_HANDLER,
		ZEND_FETCH_DIM_R_INDEX_SPEC_TMPVAR_TMPVARCV_HANDLER,
		ZEND_FETCH_DIM_R_INDEX_SPEC_TMPVAR_TMPVARCV_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_FETCH_DIM_R_INDEX_SPEC_TMPVAR_TMPVARCV_HANDLER,
		ZEND_FETCH_DIM_R_INDEX_SPEC_TMPVAR_CONST_HANDLER,
		ZEND_FETCH_DIM_R_INDEX_SPEC_TMPVAR_TMPVARCV_HANDLER,
		ZEND_FETCH_DIM_R_INDEX_SPEC_TMPVAR_TMPVARCV_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_FETCH_DIM_R_INDEX_SPEC_TMPVAR_TMPVARCV_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_FETCH_DIM_R_INDEX_SPEC_CV_CONST_HANDLER,
		ZEND_FETCH_DIM_R_INDEX_SPEC_CV_TMPVARCV_HANDLER,
		ZEND_FETCH_DIM_R_INDEX_SPEC_CV_TMPVARCV_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_FETCH_DIM_R_INDEX_SPEC_CV_TMPVARCV_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_SEND_VAR_SIMPLE_SPEC_VAR_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_SEND_VAR_SIMPLE_SPEC_CV_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_SEND_VAR_EX_SIMPLE_SPEC_VAR_UNUSED_HANDLER,
		ZEND_NULL_HANDLER,
		ZEND_SEND_VAR_EX_SIMPLE_SPEC_CV_UNUSED_HANDLER,
		ZEND_SEND_VAL_SIMPLE_SPEC_CONST_HANDLER,
		ZEND_SEND_VAL_EX_SIMPLE_SPEC_CONST_HANDLER,
		ZEND_FE_FETCH_R_SIMPLE_SPEC_VAR_CV_RETVAL_UNUSED_HANDLER,
		ZEND_FE_FETCH_R_SIMPLE_SPEC_VAR_CV_RETVAL_USED_HANDLER,
		ZEND_NULL_HANDLER
	};
#if ZEND_VM_KIND == ZEND_VM_KIND_TAILCALL || ZEND_VM_KIND == ZEND_VM_KIND_SWITCH
	static zend_vm_opcode_handler_t const handlers[] = {
		ZEND_NOP_SPEC_TAILCALL_HANDLER,
		ZEND_ADD_SPEC_CONST_CONST_TAILCALL_HANDLER,
		ZEND_ADD_SPEC_CONST_TMPVARCV_TAILCALL_HANDLER,
		ZEND_ADD_SPEC_CONST_TMPVARCV_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_ADD_SPEC_CONST_TMPVARCV_TAILCALL_HANDLER,
		ZEND_ADD_SPEC_TMPVARCV_CONST_TAILCALL_HANDLER,
		ZEND_ADD_SPEC_TMPVARCV_TMPVARCV_TAILCALL_HANDLER,
		ZEND_ADD_SPEC_TMPVARCV_TMPVARCV_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_ADD_SPEC_TMPVARCV_TMPVARCV_TAILCALL_HANDLER,
		ZEND_ADD_SPEC_TMPVARCV_CONST_TAILCALL_HANDLER,
		ZEND_ADD_SPEC_TMPVARCV_TMPVARCV_TAILCALL_HANDLER,
		ZEND_ADD_SPEC_TMPVARCV_TMPVARCV_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_ADD_SPEC_TMPVARCV_TMPVARCV_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_ADD_SPEC_TMPVARCV_CONST_TAILCALL_HANDLER,
		ZEND_ADD_SPEC_TMPVARCV_TMPVARCV_TAILCALL_HANDLER,
		ZEND_ADD_SPEC_TMPVARCV_TMPVARCV_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_ADD_SPEC_TMPVARCV_TMPVARCV_TAILCALL_HANDLER,
		ZEND_SUB_SPEC_CONST_CONST_TAILCALL_HANDLER,
		ZEND_SUB_SPEC_CONST_TMPVARCV_TAILCALL_HANDLER,
		ZEND_SUB_SPEC_CONST_TMPVARCV_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_SUB_SPEC_CONST_TMPVARCV_TAILCALL_HANDLER,
		ZEND_SUB_SPEC_TMPVARCV_CONST_TAILCALL_HANDLER,
		ZEND_SUB_SPEC_TMPVARCV_TMPVARCV_TAILCALL_HANDLER,
		ZEND_SUB_SPEC_TMPVARCV_TMPVARCV_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_SUB_SPEC_TMPVARCV_TMPVARCV_TAILCALL_HANDLER,
		ZEND_SUB_SPEC_TMPVARCV_CONST_TAILCALL_HANDLER,
		ZEND_SUB_SPEC_TMPVARCV_TMPVARCV_TAILCALL_HANDLER,
		ZEND_SUB_SPEC_TMPVARCV_TMPVARCV_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_SUB_SPEC_TMPVARCV_TMPVARCV_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_SUB_SPEC_TMPVARCV_CONST_TAILCALL_HANDLER,
		ZEND_SUB_SPEC_TMPVARCV_TMPVARCV_TAILCALL_HANDLER,
		ZEND_SUB_SPEC_TMPVARCV_TMPVARCV_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_SUB_SPEC_TMPVARCV_TMPVARCV_TAILCALL_HANDLER,
		ZEND_MUL_SPEC_CONST_CONST_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_MUL_SPEC_TMPVARCV_CONST_TAILCALL_HANDLER,
		ZEND_MUL_SPEC_TMPVARCV_TMPVARCV_TAILCALL_HANDLER,
		ZEND_MUL_SPEC_TMPVARCV_TMPVARCV_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_MUL_SPEC_TMPVARCV_TMPVARCV_TAILCALL_HANDLER,
		ZEND_MUL_SPEC_TMPVARCV_CONST_TAILCALL_HANDLER,
		ZEND_MUL_SPEC_TMPVARCV_TMPVARCV_TAILCALL_HANDLER,
		ZEND_MUL_SPEC_TMPVARCV_TMPVARCV_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_MUL_SPEC_TMPVARCV_TMPVARCV_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_MUL_SPEC_TMPVARCV_CONST_TAILCALL_HANDLER,
		ZEND_MUL_SPEC_TMPVARCV_TMPVARCV_TAILCALL_HANDLER,
		ZEND_MUL_SPEC_TMPVARCV_TMPVARCV_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_MUL_SPEC_TMPVARCV_TMPVARCV_TAILCALL_HANDLER,
		ZEND_DIV_SPEC_CONST_CONST_TAILCALL_HANDLER,
		ZEND_DIV_SPEC_CONST_TMPVAR_TAILCALL_HANDLER,
		ZEND_DIV_SPEC_CONST_TMPVAR_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_DIV_SPEC_CONST_CV_TAILCALL_HANDLER,
		ZEND_DIV_SPEC_TMPVAR_CONST_TAILCALL_HANDLER,
		ZEND_DIV_SPEC_TMPVAR_TMPVAR_TAILCALL_HANDLER,
		ZEND_DIV_SPEC_TMPVAR_TMPVAR_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_DIV_SPEC_TMPVAR_CV_TAILCALL_HANDLER,
		ZEND_DIV_SPEC_TMPVAR_CONST_TAILCALL_HANDLER,
		ZEND_DIV_SPEC_TMPVAR_TMPVAR_TAILCALL_HANDLER,
		ZEND_DIV_SPEC_TMPVAR_TMPVAR_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_DIV_SPEC_TMPVAR_CV_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_DIV_SPEC_CV_CONST_TAILCALL_HANDLER,
		ZEND_DIV_SPEC_CV_TMPVAR_TAILCALL_HANDLER,
		ZEND_DIV_SPEC_CV_TMPVAR_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_DIV_SPEC_CV_CV_TAILCALL_HANDLER,
		ZEND_MOD_SPEC_CONST_CONST_TAILCALL_HANDLER,
		ZEND_MOD_SPEC_CONST_TMPVARCV_TAILCALL_HANDLER,
		ZEND_MOD_SPEC_CONST_TMPVARCV_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_MOD_SPEC_CONST_TMPVARCV_TAILCALL_HANDLER,
		ZEND_MOD_SPEC_TMPVARCV_CONST_TAILCALL_HANDLER,
		ZEND_MOD_SPEC_TMPVARCV_TMPVARCV_TAILCALL_HANDLER,
		ZEND_MOD_SPEC_TMPVARCV_TMPVARCV_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_MOD_SPEC_TMPVARCV_TMPVARCV_TAILCALL_HANDLER,
		ZEND_MOD_SPEC_TMPVARCV_CONST_TAILCALL_HANDLER,
		ZEND_MOD_SPEC_TMPVARCV_TMPVARCV_TAILCALL_HANDLER,
		ZEND_MOD_SPEC_TMPVARCV_TMPVARCV_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_MOD_SPEC_TMPVARCV_TMPVARCV_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_MOD_SPEC_TMPVARCV_CONST_TAILCALL_HANDLER,
		ZEND_MOD_SPEC_TMPVARCV_TMPVARCV_TAILCALL_HANDLER,
		ZEND_MOD_SPEC_TMPVARCV_TMPVARCV_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_MOD_SPEC_TMPVARCV_TMPVARCV_TAILCALL_HANDLER,
		ZEND_SL_SPEC_CONST_CONST_TAILCALL_HANDLER,
		ZEND_SL_SPEC_CONST_TMPVARCV_TAILCALL_HANDLER,
		ZEND_SL_SPEC_CONST_TMPVARCV_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_SL_SPEC_CONST_TMPVARCV_TAILCALL_HANDLER,
		ZEND_SL_SPEC_TMPVARCV_CONST_TAILCALL_HANDLER,
		ZEND_SL_SPEC_TMPVARCV_TMPVARCV_TAILCALL_HANDLER,
		ZEND_SL_SPEC_TMPVARCV_TMPVARCV_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_SL_SPEC_TMPVARCV_TMPVARCV_TAILCALL_HANDLER,
		ZEND_SL_SPEC_TMPVARCV_CONST_TAILCALL_HANDLER,
		ZEND_SL_SPEC_TMPVARCV_TMPVARCV_TAILCALL_HANDLER,
		ZEND_SL_SPEC_TMPVARCV_TMPVARCV_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_SL_SPEC_TMPVARCV_TMPVARCV_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_SL_SPEC_TMPVARCV_CONST_TAILCALL_HANDLER,
		ZEND_SL_SPEC_TMPVARCV_TMPVARCV_TAILCALL_HANDLER,
		ZEND_SL_SPEC_TMPVARCV_TMPVARCV_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_SL_SPEC_TMPVARCV_TMPVARCV_TAILCALL_HANDLER,
		ZEND_SR_SPEC_CONST_CONST_TAILCALL_HANDLER,
		ZEND_SR_SPEC_CONST_TMPVARCV_TAILCALL_HANDLER,
		ZEND_SR_SPEC_CONST_TMPVARCV_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_SR_SPEC_CONST_TMPVARCV_TAILCALL_HANDLER,
		ZEND_SR_SPEC_TMPVARCV_CONST_TAILCALL_HANDLER,
		ZEND_SR_SPEC_TMPVARCV_TMPVARCV_TAILCALL_HANDLER,
		ZEND_SR_SPEC_TMPVARCV_TMPVARCV_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_SR_SPEC_TMPVARCV_TMPVARCV_TAILCALL_HANDLER,
		ZEND_SR_SPEC_TMPVARCV_CONST_TAILCALL_HANDLER,
		ZEND_SR_SPEC_TMPVARCV_TMPVARCV_TAILCALL_HANDLER,
		ZEND_SR_SPEC_TMPVARCV_TMPVARCV_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_SR_SPEC_TMPVARCV_TMPVARCV_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_SR_SPEC_TMPVARCV_CONST_TAILCALL_HANDLER,
		ZEND_SR_SPEC_TMPVARCV_TMPVARCV_TAILCALL_HANDLER,
		ZEND_SR_SPEC_TMPVARCV_TMPVARCV_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_SR_SPEC_TMPVARCV_TMPVARCV_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_CONCAT_SPEC_CONST_TMPVAR_TAILCALL_HANDLER,
		ZEND_CONCAT_SPEC_CONST_TMPVAR_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_CONCAT_SPEC_CONST_CV_TAILCALL_HANDLER,
		ZEND_CONCAT_SPEC_TMPVAR_CONST_TAILCALL_HANDLER,
		ZEND_CONCAT_SPEC_TMPVAR_TMPVAR_TAILCALL_HANDLER,
		ZEND_CONCAT_SPEC_TMPVAR_TMPVAR_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_CONCAT_SPEC_TMPVAR_CV_TAILCALL_HANDLER,
		ZEND_CONCAT_SPEC_TMPVAR_CONST_TAILCALL_HANDLER,
		ZEND_CONCAT_SPEC_TMPVAR_TMPVAR_TAILCALL_HANDLER,
		ZEND_CONCAT_SPEC_TMPVAR_TMPVAR_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_CONCAT_SPEC_TMPVAR_CV_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_CONCAT_SPEC_CV_CONST_TAILCALL_HANDLER,
		ZEND_CONCAT_SPEC_CV_TMPVAR_TAILCALL_HANDLER,
		ZEND_CONCAT_SPEC_CV_TMPVAR_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_CONCAT_SPEC_CV_CV_TAILCALL_HANDLER,
		ZEND_BW_OR_SPEC_CONST_CONST_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_BW_OR_SPEC_TMPVARCV_CONST_TAILCALL_HANDLER,
		ZEND_BW_OR_SPEC_TMPVARCV_TMPVARCV_TAILCALL_HANDLER,
		ZEND_BW_OR_SPEC_TMPVARCV_TMPVARCV_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_BW_OR_SPEC_TMPVARCV_TMPVARCV_TAILCALL_HANDLER,
		ZEND_BW_OR_SPEC_TMPVARCV_CONST_TAILCALL_HANDLER,
		ZEND_BW_OR_SPEC_TMPVARCV_TMPVARCV_TAILCALL_HANDLER,
		ZEND_BW_OR_SPEC_TMPVARCV_TMPVARCV_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_BW_OR_SPEC_TMPVARCV_TMPVARCV_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_BW_OR_SPEC_TMPVARCV_CONST_TAILCALL_HANDLER,
		ZEND_BW_OR_SPEC_TMPVARCV_TMPVARCV_TAILCALL_HANDLER,
		ZEND_BW_OR_SPEC_TMPVARCV_TMPVARCV_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_BW_OR_SPEC_TMPVARCV_TMPVARCV_TAILCALL_HANDLER,
		ZEND_BW_AND_SPEC_CONST_CONST_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_BW_AND_SPEC_TMPVARCV_CONST_TAILCALL_HANDLER,
		ZEND_BW_AND_SPEC_TMPVARCV_TMPVARCV_TAILCALL_HANDLER,
		ZEND_BW_AND_SPEC_TMPVARCV_TMPVARCV_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_BW_AND_SPEC_TMPVARCV_TMPVARCV_TAILCALL_HANDLER,
		ZEND_BW_AND_SPEC_TMPVARCV_CONST_TAILCALL_HANDLER,
		ZEND_BW_AND_SPEC_TMPVARCV_TMPVARCV_TAILCALL_HANDLER,
		ZEND_BW_AND_SPEC_TMPVARCV_TMPVARCV_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_BW_AND_SPEC_TMPVARCV_TMPVARCV_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_BW_AND_SPEC_TMPVARCV_CONST_TAILCALL_HANDLER,
		ZEND_BW_AND_SPEC_TMPVARCV_TMPVARCV_TAILCALL_HANDLER,
		ZEND_BW_AND_SPEC_TMPVARCV_TMPVARCV_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_BW_AND_SPEC_TMPVARCV_TMPVARCV_TAILCALL_HANDLER,
		ZEND_BW_XOR_SPEC_CONST_CONST_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_BW_XOR_SPEC_TMPVARCV_CONST_TAILCALL_HANDLER,
		ZEND_BW_XOR_SPEC_TMPVARCV_TMPVARCV_TAILCALL_HANDLER,
		ZEND_BW_XOR_SPEC_TMPVARCV_TMPVARCV_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_BW_XOR_SPEC_TMPVARCV_TMPVARCV_TAILCALL_HANDLER,
		ZEND_BW_XOR_SPEC_TMPVARCV_CONST_TAILCALL_HANDLER,
		ZEND_BW_XOR_SPEC_TMPVARCV_TMPVARCV_TAILCALL_HANDLER,
		ZEND_BW_XOR_SPEC_TMPVARCV_TMPVARCV_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_BW_XOR_SPEC_TMPVARCV_TMPVARCV_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_BW_XOR_SPEC_TMPVARCV_CONST_TAILCALL_HANDLER,
		ZEND_BW_XOR_SPEC_TMPVARCV_TMPVARCV_TAILCALL_HANDLER,
		ZEND_BW_XOR_SPEC_TMPVARCV_TMPVARCV_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_BW_XOR_SPEC_TMPVARCV_TMPVARCV_TAILCALL_HANDLER,
		ZEND_POW_SPEC_CONST_CONST_TAILCALL_HANDLER,
		ZEND_POW_SPEC_CONST_TMPVAR_TAILCALL_HANDLER,
		ZEND_POW_SPEC_CONST_TMPVAR_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_POW_SPEC_CONST_CV_TAILCALL_HANDLER,
		ZEND_POW_SPEC_TMPVAR_CONST_TAILCALL_HANDLER,
		ZEND_POW_SPEC_TMPVAR_TMPVAR_TAILCALL_HANDLER,
		ZEND_POW_SPEC_TMPVAR_TMPVAR_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_POW_SPEC_TMPVAR_CV_TAILCALL_HANDLER,
		ZEND_POW_SPEC_TMPVAR_CONST_TAILCALL_HANDLER,
		ZEND_POW_SPEC_TMPVAR_TMPVAR_TAILCALL_HANDLER,
		ZEND_POW_SPEC_TMPVAR_TMPVAR_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_POW_SPEC_TMPVAR_CV_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_POW_SPEC_CV_CONST_TAILCALL_HANDLER,
		ZEND_POW_SPEC_CV_TMPVAR_TAILCALL_HANDLER,
		ZEND_POW_SPEC_CV_TMPVAR_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_POW_SPEC_CV_CV_TAILCALL_HANDLER,
		ZEND_BW_NOT_SPEC_CONST_TAILCALL_HANDLER,
		ZEND_BW_NOT_SPEC_TMPVARCV_TAILCALL_HANDLER,
		ZEND_BW_NOT_SPEC_TMPVARCV_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_BW_NOT_SPEC_TMPVARCV_TAILCALL_HANDLER,
		ZEND_BOOL_NOT_SPEC_CONST_TAILCALL_HANDLER,
		ZEND_BOOL_NOT_SPEC_TMPVAR_TAILCALL_HANDLER,
		ZEND_BOOL_NOT_SPEC_TMPVAR_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_BOOL_NOT_SPEC_CV_TAILCALL_HANDLER,
		ZEND_BOOL_XOR_SPEC_CONST_CONST_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_BOOL_XOR_SPEC_TMPVAR_CONST_TAILCALL_HANDLER,
		ZEND_BOOL_XOR_SPEC_TMPVAR_TMPVAR_TAILCALL_HANDLER,
		ZEND_BOOL_XOR_SPEC_TMPVAR_TMPVAR_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_BOOL_XOR_SPEC_TMPVAR_CONST_TAILCALL_HANDLER,
		ZEND_BOOL_XOR_SPEC_TMPVAR_TMPVAR_TAILCALL_HANDLER,
		ZEND_BOOL_XOR_SPEC_TMPVAR_TMPVAR_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_BOOL_XOR_SPEC_CV_CONST_TAILCALL_HANDLER,
		ZEND_BOOL_XOR_SPEC_CV_TMPVAR_TAILCALL_HANDLER,
		ZEND_BOOL_XOR_SPEC_CV_TMPVAR_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_BOOL_XOR_SPEC_CV_CV_TAILCALL_HANDLER,
		ZEND_IS_IDENTICAL_SPEC_CONST_CONST_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_IS_IDENTICAL_SPEC_TMP_CONST_TAILCALL_HANDLER,
		ZEND_IS_IDENTICAL_SPEC_TMP_TMP_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_IS_IDENTICAL_SPEC_VAR_CONST_TAILCALL_HANDLER,
		ZEND_IS_IDENTICAL_SPEC_VAR_TMP_TAILCALL_HANDLER,
		ZEND_IS_IDENTICAL_SPEC_VAR_VAR_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_IS_IDENTICAL_SPEC_CV_CONST_TAILCALL_HANDLER,
		ZEND_IS_IDENTICAL_SPEC_CV_TMP_TAILCALL_HANDLER,
		ZEND_IS_IDENTICAL_SPEC_CV_VAR_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_IS_IDENTICAL_SPEC_CV_CV_TAILCALL_HANDLER,
		ZEND_IS_NOT_IDENTICAL_SPEC_CONST_CONST_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_IS_NOT_IDENTICAL_SPEC_TMP_CONST_TAILCALL_HANDLER,
		ZEND_IS_NOT_IDENTICAL_SPEC_TMP_TMP_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_IS_NOT_IDENTICAL_SPEC_VAR_CONST_TAILCALL_HANDLER,
		ZEND_IS_NOT_IDENTICAL_SPEC_VAR_TMP_TAILCALL_HANDLER,
		ZEND_IS_NOT_IDENTICAL_SPEC_VAR_VAR_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_IS_NOT_IDENTICAL_SPEC_CV_CONST_TAILCALL_HANDLER,
		ZEND_IS_NOT_IDENTICAL_SPEC_CV_TMP_TAILCALL_HANDLER,
		ZEND_IS_NOT_IDENTICAL_SPEC_CV_VAR_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_IS_NOT_IDENTICAL_SPEC_CV_CV_TAILCALL_HANDLER,
		ZEND_IS_EQUAL_SPEC_CONST_CONST_TAILCALL_HANDLER,
		ZEND_IS_EQUAL_SPEC_CONST_CONST_TAILCALL_HANDLER,
		ZEND_IS_EQUAL_SPEC_CONST_CONST_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_IS_EQUAL_SPEC_TMPVAR_CONST_TAILCALL_HANDLER,
		ZEND_IS_EQUAL_SPEC_TMPVAR_CONST_JMPZ_TAILCALL_HANDLER,
		ZEND_IS_EQUAL_SPEC_TMPVAR_CONST_JMPNZ_TAILCALL_HANDLER,
		ZEND_IS_EQUAL_SPEC_TMPVAR_TMPVAR_TAILCALL_HANDLER,
		ZEND_IS_EQUAL_SPEC_TMPVAR_TMPVAR_JMPZ_TAILCALL_HANDLER,
		ZEND_IS_EQUAL_SPEC_TMPVAR_TMPVAR_JMPNZ_TAILCALL_HANDLER,
		ZEND_IS_EQUAL_SPEC_TMPVAR_TMPVAR_TAILCALL_HANDLER,
		ZEND_IS_EQUAL_SPEC_TMPVAR_TMPVAR_JMPZ_TAILCALL_HANDLER,
		ZEND_IS_EQUAL_SPEC_TMPVAR_TMPVAR_JMPNZ_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_IS_EQUAL_SPEC_TMPVAR_CONST_TAILCALL_HANDLER,
		ZEND_IS_EQUAL_SPEC_TMPVAR_CONST_JMPZ_TAILCALL_HANDLER,
		ZEND_IS_EQUAL_SPEC_TMPVAR_CONST_JMPNZ_TAILCALL_HANDLER,
		ZEND_IS_EQUAL_SPEC_TMPVAR_TMPVAR_TAILCALL_HANDLER,
		ZEND_IS_EQUAL_SPEC_TMPVAR_TMPVAR_JMPZ_TAILCALL_HANDLER,
		ZEND_IS_EQUAL_SPEC_TMPVAR_TMPVAR_JMPNZ_TAILCALL_HANDLER,
		ZEND_IS_EQUAL_SPEC_TMPVAR_TMPVAR_TAILCALL_HANDLER,
		ZEND_IS_EQUAL_SPEC_TMPVAR_TMPVAR_JMPZ_TAILCALL_HANDLER,
		ZEND_IS_EQUAL_SPEC_TMPVAR_TMPVAR_JMPNZ_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_IS_EQUAL_SPEC_CV_CONST_TAILCALL_HANDLER,
		ZEND_IS_EQUAL_SPEC_CV_CONST_JMPZ_TAILCALL_HANDLER,
		ZEND_IS_EQUAL_SPEC_CV_CONST_JMPNZ_TAILCALL_HANDLER,
		ZEND_IS_EQUAL_SPEC_CV_TMPVAR_TAILCALL_HANDLER,
		ZEND_IS_EQUAL_SPEC_CV_TMPVAR_JMPZ_TAILCALL_HANDLER,
		ZEND_IS_EQUAL_SPEC_CV_TMPVAR_JMPNZ_TAILCALL_HANDLER,
		ZEND_IS_EQUAL_SPEC_CV_TMPVAR_TAILCALL_HANDLER,
		ZEND_IS_EQUAL_SPEC_CV_TMPVAR_JMPZ_TAILCALL_HANDLER,
		ZEND_IS_EQUAL_SPEC_CV_TMPVAR_JMPNZ_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_IS_EQUAL_SPEC_CV_CV_TAILCALL_HANDLER,
		ZEND_IS_EQUAL_SPEC_CV_CV_JMPZ_TAILCALL_HANDLER,
		ZEND_IS_EQUAL_SPEC_CV_CV_JMPNZ_TAILCALL_HANDLER,
		ZEND_IS_NOT_EQUAL_SPEC_CONST_CONST_TAILCALL_HANDLER,
		ZEND_IS_NOT_EQUAL_SPEC_CONST_CONST_TAILCALL_HANDLER,
		ZEND_IS_NOT_EQUAL_SPEC_CONST_CONST_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_CONST_TAILCALL_HANDLER,
		ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_CONST_JMPZ_TAILCALL_HANDLER,
		ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_CONST_JMPNZ_TAILCALL_HANDLER,
		ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_TMPVAR_TAILCALL_HANDLER,
		ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_TMPVAR_JMPZ_TAILCALL_HANDLER,
		ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_TMPVAR_JMPNZ_TAILCALL_HANDLER,
		ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_TMPVAR_TAILCALL_HANDLER,
		ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_TMPVAR_JMPZ_TAILCALL_HANDLER,
		ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_TMPVAR_JMPNZ_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_CONST_TAILCALL_HANDLER,
		ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_CONST_JMPZ_TAILCALL_HANDLER,
		ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_CONST_JMPNZ_TAILCALL_HANDLER,
		ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_TMPVAR_TAILCALL_HANDLER,
		ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_TMPVAR_JMPZ_TAILCALL_HANDLER,
		ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_TMPVAR_JMPNZ_TAILCALL_HANDLER,
		ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_TMPVAR_TAILCALL_HANDLER,
		ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_TMPVAR_JMPZ_TAILCALL_HANDLER,
		ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_TMPVAR_JMPNZ_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_IS_NOT_EQUAL_SPEC_CV_CONST_TAILCALL_HANDLER,
		ZEND_IS_NOT_EQUAL_SPEC_CV_CONST_JMPZ_TAILCALL_HANDLER,
		ZEND_IS_NOT_EQUAL_SPEC_CV_CONST_JMPNZ_TAILCALL_HANDLER,
		ZEND_IS_NOT_EQUAL_SPEC_CV_TMPVAR_TAILCALL_HANDLER,
		ZEND_IS_NOT_EQUAL_SPEC_CV_TMPVAR_JMPZ_TAILCALL_HANDLER,
		ZEND_IS_NOT_EQUAL_SPEC_CV_TMPVAR_JMPNZ_TAILCALL_HANDLER,
		ZEND_IS_NOT_EQUAL_SPEC_CV_TMPVAR_TAILCALL_HANDLER,
		ZEND_IS_NOT_EQUAL_SPEC_CV_TMPVAR_JMPZ_TAILCALL_HANDLER,
		ZEND_IS_NOT_EQUAL_SPEC_CV_TMPVAR_JMPNZ_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_IS_NOT_EQUAL_SPEC_CV_CV_TAILCALL_HANDLER,
		ZEND_IS_NOT_EQUAL_SPEC_CV_CV_JMPZ_TAILCALL_HANDLER,
		ZEND_IS_NOT_EQUAL_SPEC_CV_CV_JMPNZ_TAILCALL_HANDLER,
		ZEND_IS_SMALLER_SPEC_CONST_CONST_TAILCALL_HANDLER,
		ZEND_IS_SMALLER_SPEC_CONST_CONST_TAILCALL_HANDLER,
		ZEND_IS_SMALLER_SPEC_CONST_CONST_TAILCALL_HANDLER,
		ZEND_IS_SMALLER_SPEC_CONST_TMPVARCV_TAILCALL_HANDLER,
		ZEND_IS_SMALLER_SPEC_CONST_TMPVARCV_JMPZ_TAILCALL_HANDLER,
		ZEND_IS_SMALLER_SPEC_CONST_TMPVARCV_JMPNZ_TAILCALL_HANDLER,
		ZEND_IS_SMALLER_SPEC_CONST_TMPVARCV_TAILCALL_HANDLER,
		ZEND_IS_SMALLER_SPEC_CONST_TMPVARCV_JMPZ_TAILCALL_HANDLER,
		ZEND_IS_SMALLER_SPEC_CONST_TMPVARCV_JMPNZ_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_IS_SMALLER_SPEC_CONST_TMPVARCV_TAILCALL_HANDLER,
		ZEND_IS_SMALLER_SPEC_CONST_TMPVARCV_JMPZ_TAILCALL_HANDLER,
		ZEND_IS_SMALLER_SPEC_CONST_TMPVARCV_JMPNZ_TAILCALL_HANDLER,
		ZEND_IS_SMALLER_SPEC_TMPVARCV_CONST_TAILCALL_HANDLER,
		ZEND_IS_SMALLER_SPEC_TMPVARCV_CONST_JMPZ_TAILCALL_HANDLER,
		ZEND_IS_SMALLER_SPEC_TMPVARCV_CONST_JMPNZ_TAILCALL_HANDLER,
		ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_TAILCALL_HANDLER,
		ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_JMPZ_TAILCALL_HANDLER,
		ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_JMPNZ_TAILCALL_HANDLER,
		ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_TAILCALL_HANDLER,
		ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_JMPZ_TAILCALL_HANDLER,
		ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_JMPNZ_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_TAILCALL_HANDLER,
		ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_JMPZ_TAILCALL_HANDLER,
		ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_JMPNZ_TAILCALL_HANDLER,
		ZEND_IS_SMALLER_SPEC_TMPVARCV_CONST_TAILCALL_HANDLER,
		ZEND_IS_SMALLER_SPEC_TMPVARCV_CONST_JMPZ_TAILCALL_HANDLER,
		ZEND_IS_SMALLER_SPEC_TMPVARCV_CONST_JMPNZ_TAILCALL_HANDLER,
		ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_TAILCALL_HANDLER,
		ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_JMPZ_TAILCALL_HANDLER,
		ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_JMPNZ_TAILCALL_HANDLER,
		ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_TAILCALL_HANDLER,
		ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_JMPZ_TAILCALL_HANDLER,
		ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_JMPNZ_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_TAILCALL_HANDLER,
		ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_JMPZ_TAILCALL_HANDLER,
		ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_JMPNZ_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_IS_SMALLER_SPEC_TMPVARCV_CONST_TAILCALL_HANDLER,
		ZEND_IS_SMALLER_SPEC_TMPVARCV_CONST_JMPZ_TAILCALL_HANDLER,
		ZEND_IS_SMALLER_SPEC_TMPVARCV_CONST_JMPNZ_TAILCALL_HANDLER,
		ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_TAILCALL_HANDLER,
		ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_JMPZ_TAILCALL_HANDLER,
		ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_JMPNZ_TAILCALL_HANDLER,
		ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_TAILCALL_HANDLER,
		ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_JMPZ_TAILCALL_HANDLER,
		ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_JMPNZ_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_TAILCALL_HANDLER,
		ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_JMPZ_TAILCALL_HANDLER,
		ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_JMPNZ_TAILCALL_HANDLER,
		ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_CONST_TAILCALL_HANDLER,
		ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_CONST_TAILCALL_HANDLER,
		ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_CONST_TAILCALL_HANDLER,
		ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_TMPVARCV_TAILCALL_HANDLER,
		ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_TMPVARCV_JMPZ_TAILCALL_HANDLER,
		ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_TMPVARCV_JMPNZ_TAILCALL_HANDLER,
		ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_TMPVARCV_TAILCALL_HANDLER,
		ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_TMPVARCV_JMPZ_TAILCALL_HANDLER,
		ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_TMPVARCV_JMPNZ_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_TMPVARCV_TAILCALL_HANDLER,
		ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_TMPVARCV_JMPZ_TAILCALL_HANDLER,
		ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_TMPVARCV_JMPNZ_TAILCALL_HANDLER,
		ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_CONST_TAILCALL_HANDLER,
		ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_CONST_JMPZ_TAILCALL_HANDLER,
		ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_CONST_JMPNZ_TAILCALL_HANDLER,
		ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_TAILCALL_HANDLER,
		ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_JMPZ_TAILCALL_HANDLER,
		ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_JMPNZ_TAILCALL_HANDLER,
		ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_TAILCALL_HANDLER,
		ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_JMPZ_TAILCALL_HANDLER,
		ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_JMPNZ_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_TAILCALL_HANDLER,
		ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_JMPZ_TAILCALL_HANDLER,
		ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_JMPNZ_TAILCALL_HANDLER,
		ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_CONST_TAILCALL_HANDLER,
		ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_CONST_JMPZ_TAILCALL_HANDLER,
		ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_CONST_JMPNZ_TAILCALL_HANDLER,
		ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_TAILCALL_HANDLER,
		ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_JMPZ_TAILCALL_HANDLER,
		ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_JMPNZ_TAILCALL_HANDLER,
		ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_TAILCALL_HANDLER,
		ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_JMPZ_TAILCALL_HANDLER,
		ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_JMPNZ_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_TAILCALL_HANDLER,
		ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_JMPZ_TAILCALL_HANDLER,
		ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_JMPNZ_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_CONST_TAILCALL_HANDLER,
		ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_CONST_JMPZ_TAILCALL_HANDLER,
		ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_CONST_JMPNZ_TAILCALL_HANDLER,
		ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_TAILCALL_HANDLER,
		ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_JMPZ_TAILCALL_HANDLER,
		ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_JMPNZ_TAILCALL_HANDLER,
		ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_TAILCALL_HANDLER,
		ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_JMPZ_TAILCALL_HANDLER,
		ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_JMPNZ_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_TAILCALL_HANDLER,
		ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_JMPZ_TAILCALL_HANDLER,
		ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_JMPNZ_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_ASSIGN_SPEC_VAR_CONST_RETVAL_UNUSED_TAILCALL_HANDLER,
		ZEND_ASSIGN_SPEC_VAR_CONST_RETVAL_USED_TAILCALL_HANDLER,
		ZEND_ASSIGN_SPEC_VAR_TMP_RETVAL_UNUSED_TAILCALL_HANDLER,
		ZEND_ASSIGN_SPEC_VAR_TMP_RETVAL_USED_TAILCALL_HANDLER,
		ZEND_ASSIGN_SPEC_VAR_VAR_RETVAL_UNUSED_TAILCALL_HANDLER,
		ZEND_ASSIGN_SPEC_VAR_VAR_RETVAL_USED_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_ASSIGN_SPEC_VAR_CV_RETVAL_UNUSED_TAILCALL_HANDLER,
		ZEND_ASSIGN_SPEC_VAR_CV_RETVAL_USED_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_ASSIGN_SPEC_CV_CONST_RETVAL_UNUSED_TAILCALL_HANDLER,
		ZEND_ASSIGN_SPEC_CV_CONST_RETVAL_USED_TAILCALL_HANDLER,
		ZEND_ASSIGN_SPEC_CV_TMP_RETVAL_UNUSED_TAILCALL_HANDLER,
		ZEND_ASSIGN_SPEC_CV_TMP_RETVAL_USED_TAILCALL_HANDLER,
		ZEND_ASSIGN_SPEC_CV_VAR_RETVAL_UNUSED_TAILCALL_HANDLER,
		ZEND_ASSIGN_SPEC_CV_VAR_RETVAL_USED_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_ASSIGN_SPEC_CV_CV_RETVAL_UNUSED_TAILCALL_HANDLER,
		ZEND_ASSIGN_SPEC_CV_CV_RETVAL_USED_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_ASSIGN_DIM_SPEC_VAR_CONST_OP_DATA_CONST_TAILCALL_HANDLER,
		ZEND_ASSIGN_DIM_SPEC_VAR_CONST_OP_DATA_TMP_TAILCALL_HANDLER,
		ZEND_ASSIGN_DIM_SPEC_VAR_CONST_OP_DATA_VAR_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_ASSIGN_DIM_SPEC_VAR_CONST_OP_DATA_CV_TAILCALL_HANDLER,
		ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_DATA_CONST_TAILCALL_HANDLER,
		ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_DATA_TMP_TAILCALL_HANDLER,
		ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_DATA_VAR_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_DATA_CV_TAILCALL_HANDLER,
		ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_DATA_CONST_TAILCALL_HANDLER,
		ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_DATA_TMP_TAILCALL_HANDLER,
		ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_DATA_VAR_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_DATA_CV_TAILCALL_HANDLER,
		ZEND_ASSIGN_DIM_SPEC_VAR_UNUSED_OP_DATA_CONST_TAILCALL_HANDLER,
		ZEND_ASSIGN_DIM_SPEC_VAR_UNUSED_OP_DATA_TMP_TAILCALL_HANDLER,
		ZEND_ASSIGN_DIM_SPEC_VAR_UNUSED_OP_DATA_VAR_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_ASSIGN_DIM_SPEC_VAR_UNUSED_OP_DATA_CV_TAILCALL_HANDLER,
		ZEND_ASSIGN_DIM_SPEC_VAR_CV_OP_DATA_CONST_TAILCALL_HANDLER,
		ZEND_ASSIGN_DIM_SPEC_VAR_CV_OP_DATA_TMP_TAILCALL_HANDLER,
		ZEND_ASSIGN_DIM_SPEC_VAR_CV_OP_DATA_VAR_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_ASSIGN_DIM_SPEC_VAR_CV_OP_DATA_CV_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_ASSIGN_DIM_SPEC_CV_CONST_OP_DATA_CONST_TAILCALL_HANDLER,
		ZEND_ASSIGN_DIM_SPEC_CV_CONST_OP_DATA_TMP_TAILCALL_HANDLER,
		ZEND_ASSIGN_DIM_SPEC_CV_CONST_OP_DATA_VAR_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_ASSIGN_DIM_SPEC_CV_CONST_OP_DATA_CV_TAILCALL_HANDLER,
		ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_DATA_CONST_TAILCALL_HANDLER,
		ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_DATA_TMP_TAILCALL_HANDLER,
		ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_DATA_VAR_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_DATA_CV_TAILCALL_HANDLER,
		ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_DATA_CONST_TAILCALL_HANDLER,
		ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_DATA_TMP_TAILCALL_HANDLER,
		ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_DATA_VAR_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_DATA_CV_TAILCALL_HANDLER,
		ZEND_ASSIGN_DIM_SPEC_CV_UNUSED_OP_DATA_CONST_TAILCALL_HANDLER,
		ZEND_ASSIGN_DIM_SPEC_CV_UNUSED_OP_DATA_TMP_TAILCALL_HANDLER,
		ZEND_ASSIGN_DIM_SPEC_CV_UNUSED_OP_DATA_VAR_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_ASSIGN_DIM_SPEC_CV_UNUSED_OP_DATA_CV_TAILCALL_HANDLER,
		ZEND_ASSIGN_DIM_SPEC_CV_CV_OP_DATA_CONST_TAILCALL_HANDLER,
		ZEND_ASSIGN_DIM_SPEC_CV_CV_OP_DATA_TMP_TAILCALL_HANDLER,
		ZEND_ASSIGN_DIM_SPEC_CV_CV_OP_DATA_VAR_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_ASSIGN_DIM_SPEC_CV_CV_OP_DATA_CV_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_ASSIGN_OBJ_SPEC_VAR_CONST_OP_DATA_CONST_TAILCALL_HANDLER,
		ZEND_ASSIGN_OBJ_SPEC_VAR_CONST_OP_DATA_TMP_TAILCALL_HANDLER,
		ZEND_ASSIGN_OBJ_SPEC_VAR_CONST_OP_DATA_VAR_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_ASSIGN_OBJ_SPEC_VAR_CONST_OP_DATA_CV_TAILCALL_HANDLER,
		ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_CONST_TAILCALL_HANDLER,
		ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_TMP_TAILCALL_HANDLER,
		ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_VAR_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_CV_TAILCALL_HANDLER,
		ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_CONST_TAILCALL_HANDLER,
		ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_TMP_TAILCALL_HANDLER,
		ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_VAR_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_CV_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_ASSIGN_OBJ_SPEC_VAR_CV_OP_DATA_CONST_TAILCALL_HANDLER,
		ZEND_ASSIGN_OBJ_SPEC_VAR_CV_OP_DATA_TMP_TAILCALL_HANDLER,
		ZEND_ASSIGN_OBJ_SPEC_VAR_CV_OP_DATA_VAR_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_ASSIGN_OBJ_SPEC_VAR_CV_OP_DATA_CV_TAILCALL_HANDLER,
		ZEND_ASSIGN_OBJ_SPEC_UNUSED_CONST_OP_DATA_CONST_TAILCALL_HANDLER,
		ZEND_ASSIGN_OBJ_SPEC_UNUSED_CONST_OP_DATA_TMP_TAILCALL_HANDLER,
		ZEND_ASSIGN_OBJ_SPEC_UNUSED_CONST_OP_DATA_VAR_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_ASSIGN_OBJ_SPEC_UNUSED_CONST_OP_DATA_CV_TAILCALL_HANDLER,
		ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_OP_DATA_CONST_TAILCALL_HANDLER,
		ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_OP_DATA_TMP_TAILCALL_HANDLER,
		ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_OP_DATA_VAR_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_OP_DATA_CV_TAILCALL_HANDLER,
		ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_OP_DATA_CONST_TAILCALL_HANDLER,
		ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_OP_DATA_TMP_TAILCALL_HANDLER,
		ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_OP_DATA_VAR_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_OP_DATA_CV_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_ASSIGN_OBJ_SPEC_UNUSED_CV_OP_DATA_CONST_TAILCALL_HANDLER,
		ZEND_ASSIGN_OBJ_SPEC_UNUSED_CV_OP_DATA_TMP_TAILCALL_HANDLER,
		ZEND_ASSIGN_OBJ_SPEC_UNUSED_CV_OP_DATA_VAR_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_ASSIGN_OBJ_SPEC_UNUSED_CV_OP_DATA_CV_TAILCALL_HANDLER,
		ZEND_ASSIGN_OBJ_SPEC_CV_CONST_OP_DATA_CONST_TAILCALL_HANDLER,
		ZEND_ASSIGN_OBJ_SPEC_CV_CONST_OP_DATA_TMP_TAILCALL_HANDLER,
		ZEND_ASSIGN_OBJ_SPEC_CV_CONST_OP_DATA_VAR_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_ASSIGN_OBJ_SPEC_CV_CONST_OP_DATA_CV_TAILCALL_HANDLER,
		ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_DATA_CONST_TAILCALL_HANDLER,
		ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_DATA_TMP_TAILCALL_HANDLER,
		ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_DATA_VAR_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_DATA_CV_TAILCALL_HANDLER,
		ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_DATA_CONST_TAILCALL_HANDLER,
		ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_DATA_TMP_TAILCALL_HANDLER,
		ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_DATA_VAR_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_DATA_CV_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_ASSIGN_OBJ_SPEC_CV_CV_OP_DATA_CONST_TAILCALL_HANDLER,
		ZEND_ASSIGN_OBJ_SPEC_CV_CV_OP_DATA_TMP_TAILCALL_HANDLER,
		ZEND_ASSIGN_OBJ_SPEC_CV_CV_OP_DATA_VAR_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_ASSIGN_OBJ_SPEC_CV_CV_OP_DATA_CV_TAILCALL_HANDLER,
		ZEND_ASSIGN_STATIC_PROP_SPEC_OP_DATA_CONST_TAILCALL_HANDLER,
		ZEND_ASSIGN_STATIC_PROP_SPEC_OP_DATA_TMP_TAILCALL_HANDLER,
		ZEND_ASSIGN_STATIC_PROP_SPEC_OP_DATA_VAR_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_ASSIGN_STATIC_PROP_SPEC_OP_DATA_CV_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_ASSIGN_OP_SPEC_VAR_CONST_TAILCALL_HANDLER,
		ZEND_ASSIGN_OP_SPEC_VAR_TMPVAR_TAILCALL_HANDLER,
		ZEND_ASSIGN_OP_SPEC_VAR_TMPVAR_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_ASSIGN_OP_SPEC_VAR_CV_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_ASSIGN_OP_SPEC_CV_CONST_TAILCALL_HANDLER,
		ZEND_ASSIGN_OP_SPEC_CV_TMPVAR_TAILCALL_HANDLER,
		ZEND_ASSIGN_OP_SPEC_CV_TMPVAR_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_ASSIGN_OP_SPEC_CV_CV_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_ASSIGN_DIM_OP_SPEC_VAR_CONST_TAILCALL_HANDLER,
		ZEND_ASSIGN_DIM_OP_SPEC_VAR_TMPVAR_TAILCALL_HANDLER,
		ZEND_ASSIGN_DIM_OP_SPEC_VAR_TMPVAR_TAILCALL_HANDLER,
		ZEND_ASSIGN_DIM_OP_SPEC_VAR_UNUSED_TAILCALL_HANDLER,
		ZEND_ASSIGN_DIM_OP_SPEC_VAR_CV_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_ASSIGN_DIM_OP_SPEC_CV_CONST_TAILCALL_HANDLER,
		ZEND_ASSIGN_DIM_OP_SPEC_CV_TMPVAR_TAILCALL_HANDLER,
		ZEND_ASSIGN_DIM_OP_SPEC_CV_TMPVAR_TAILCALL_HANDLER,
		ZEND_ASSIGN_DIM_OP_SPEC_CV_UNUSED_TAILCALL_HANDLER,
		ZEND_ASSIGN_DIM_OP_SPEC_CV_CV_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_ASSIGN_OBJ_OP_SPEC_VAR_CONST_TAILCALL_HANDLER,
		ZEND_ASSIGN_OBJ_OP_SPEC_VAR_TMPVAR_TAILCALL_HANDLER,
		ZEND_ASSIGN_OBJ_OP_SPEC_VAR_TMPVAR_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_ASSIGN_OBJ_OP_SPEC_VAR_CV_TAILCALL_HANDLER,
		ZEND_ASSIGN_OBJ_OP_SPEC_UNUSED_CONST_TAILCALL_HANDLER,
		ZEND_ASSIGN_OBJ_OP_SPEC_UNUSED_TMPVAR_TAILCALL_HANDLER,
		ZEND_ASSIGN_OBJ_OP_SPEC_UNUSED_TMPVAR_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_ASSIGN_OBJ_OP_SPEC_UNUSED_CV_TAILCALL_HANDLER,
		ZEND_ASSIGN_OBJ_OP_SPEC_CV_CONST_TAILCALL_HANDLER,
		ZEND_ASSIGN_OBJ_OP_SPEC_CV_TMPVAR_TAILCALL_HANDLER,
		ZEND_ASSIGN_OBJ_OP_SPEC_CV_TMPVAR_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_ASSIGN_OBJ_OP_SPEC_CV_CV_TAILCALL_HANDLER,
		ZEND_ASSIGN_STATIC_PROP_OP_SPEC_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_ASSIGN_REF_SPEC_VAR_VAR_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_ASSIGN_REF_SPEC_VAR_CV_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_ASSIGN_REF_SPEC_CV_VAR_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_ASSIGN_REF_SPEC_CV_CV_TAILCALL_HANDLER,
		ZEND_QM_ASSIGN_SPEC_CONST_TAILCALL_HANDLER,
		ZEND_QM_ASSIGN_SPEC_TMP_TAILCALL_HANDLER,
		ZEND_QM_ASSIGN_SPEC_VAR_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_QM_ASSIGN_SPEC_CV_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_ASSIGN_OBJ_REF_SPEC_VAR_CONST_OP_DATA_VAR_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_ASSIGN_OBJ_REF_SPEC_VAR_CONST_OP_DATA_CV_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_ASSIGN_OBJ_REF_SPEC_VAR_TMPVAR_OP_DATA_VAR_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_ASSIGN_OBJ_REF_SPEC_VAR_TMPVAR_OP_DATA_CV_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_ASSIGN_OBJ_REF_SPEC_VAR_TMPVAR_OP_DATA_VAR_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_ASSIGN_OBJ_REF_SPEC_VAR_TMPVAR_OP_DATA_CV_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_ASSIGN_OBJ_REF_SPEC_VAR_CV_OP_DATA_VAR_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_ASSIGN_OBJ_REF_SPEC_VAR_CV_OP_DATA_CV_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_ASSIGN_OBJ_REF_SPEC_UNUSED_CONST_OP_DATA_VAR_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_ASSIGN_OBJ_REF_SPEC_UNUSED_CONST_OP_DATA_CV_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_ASSIGN_OBJ_REF_SPEC_UNUSED_TMPVAR_OP_DATA_VAR_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_ASSIGN_OBJ_REF_SPEC_UNUSED_TMPVAR_OP_DATA_CV_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_ASSIGN_OBJ_REF_SPEC_UNUSED_TMPVAR_OP_DATA_VAR_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_ASSIGN_OBJ_REF_SPEC_UNUSED_TMPVAR_OP_DATA_CV_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_ASSIGN_OBJ_REF_SPEC_UNUSED_CV_OP_DATA_VAR_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_ASSIGN_OBJ_REF_SPEC_UNUSED_CV_OP_DATA_CV_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_ASSIGN_OBJ_REF_SPEC_CV_CONST_OP_DATA_VAR_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_ASSIGN_OBJ_REF_SPEC_CV_CONST_OP_DATA_CV_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_ASSIGN_OBJ_REF_SPEC_CV_TMPVAR_OP_DATA_VAR_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_ASSIGN_OBJ_REF_SPEC_CV_TMPVAR_OP_DATA_CV_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_ASSIGN_OBJ_REF_SPEC_CV_TMPVAR_OP_DATA_VAR_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_ASSIGN_OBJ_REF_SPEC_CV_TMPVAR_OP_DATA_CV_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_ASSIGN_OBJ_REF_SPEC_CV_CV_OP_DATA_VAR_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_ASSIGN_OBJ_REF_SPEC_CV_CV_OP_DATA_CV_TAILCALL_HANDLER,
		ZEND_ASSIGN_STATIC_PROP_REF_SPEC_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_PRE_INC_SPEC_VAR_RETVAL_UNUSED_TAILCALL_HANDLER,
		ZEND_PRE_INC_SPEC_VAR_RETVAL_USED_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_PRE_INC_SPEC_CV_RETVAL_UNUSED_TAILCALL_HANDLER,
		ZEND_PRE_INC_SPEC_CV_RETVAL_USED_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_PRE_DEC_SPEC_VAR_RETVAL_UNUSED_TAILCALL_HANDLER,
		ZEND_PRE_DEC_SPEC_VAR_RETVAL_USED_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_PRE_DEC_SPEC_CV_RETVAL_UNUSED_TAILCALL_HANDLER,
		ZEND_PRE_DEC_SPEC_CV_RETVAL_USED_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_POST_INC_SPEC_VAR_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_POST_INC_SPEC_CV_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_POST_DEC_SPEC_VAR_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_POST_DEC_SPEC_CV_TAILCALL_HANDLER,
		ZEND_PRE_INC_STATIC_PROP_SPEC_TAILCALL_HANDLER,
		ZEND_POST_INC_STATIC_PROP_SPEC_TAILCALL_HANDLER,
		ZEND_JMP_SPEC_TAILCALL_HANDLER,
		ZEND_JMPZ_SPEC_CONST_TAILCALL_HANDLER,
		ZEND_JMPZ_SPEC_TMPVAR_TAILCALL_HANDLER,
		ZEND_JMPZ_SPEC_TMPVAR_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_JMPZ_SPEC_CV_TAILCALL_HANDLER,
		ZEND_JMPNZ_SPEC_CONST_TAILCALL_HANDLER,
		ZEND_JMPNZ_SPEC_TMPVAR_TAILCALL_HANDLER,
		ZEND_JMPNZ_SPEC_TMPVAR_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_JMPNZ_SPEC_CV_TAILCALL_HANDLER,
		ZEND_JMPZ_EX_SPEC_CONST_TAILCALL_HANDLER,
		ZEND_JMPZ_EX_SPEC_TMPVAR_TAILCALL_HANDLER,
		ZEND_JMPZ_EX_SPEC_TMPVAR_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_JMPZ_EX_SPEC_CV_TAILCALL_HANDLER,
		ZEND_JMPNZ_EX_SPEC_CONST_TAILCALL_HANDLER,
		ZEND_JMPNZ_EX_SPEC_TMPVAR_TAILCALL_HANDLER,
		ZEND_JMPNZ_EX_SPEC_TMPVAR_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_JMPNZ_EX_SPEC_CV_TAILCALL_HANDLER,
		ZEND_CASE_SPEC_TMPVAR_CONST_TAILCALL_HANDLER,
		ZEND_CASE_SPEC_TMPVAR_TMPVAR_TAILCALL_HANDLER,
		ZEND_CASE_SPEC_TMPVAR_TMPVAR_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_CASE_SPEC_TMPVAR_CV_TAILCALL_HANDLER,
		ZEND_CHECK_VAR_SPEC_CV_UNUSED_TAILCALL_HANDLER,
		ZEND_SEND_VAR_NO_REF_EX_SPEC_VAR_CONST_TAILCALL_HANDLER,
		ZEND_SEND_VAR_NO_REF_EX_SPEC_VAR_CONST_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_SEND_VAR_NO_REF_EX_SPEC_VAR_UNUSED_TAILCALL_HANDLER,
		ZEND_SEND_VAR_NO_REF_EX_SPEC_VAR_UNUSED_QUICK_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_CAST_SPEC_CONST_TAILCALL_HANDLER,
		ZEND_CAST_SPEC_TMP_TAILCALL_HANDLER,
		ZEND_CAST_SPEC_VAR_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_CAST_SPEC_CV_TAILCALL_HANDLER,
		ZEND_BOOL_SPEC_CONST_TAILCALL_HANDLER,
		ZEND_BOOL_SPEC_TMPVAR_TAILCALL_HANDLER,
		ZEND_BOOL_SPEC_TMPVAR_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_BOOL_SPEC_CV_TAILCALL_HANDLER,
		ZEND_FAST_CONCAT_SPEC_CONST_CONST_TAILCALL_HANDLER,
		ZEND_FAST_CONCAT_SPEC_CONST_TMPVAR_TAILCALL_HANDLER,
		ZEND_FAST_CONCAT_SPEC_CONST_TMPVAR_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_FAST_CONCAT_SPEC_CONST_CV_TAILCALL_HANDLER,
		ZEND_FAST_CONCAT_SPEC_TMPVAR_CONST_TAILCALL_HANDLER,
		ZEND_FAST_CONCAT_SPEC_TMPVAR_TMPVAR_TAILCALL_HANDLER,
		ZEND_FAST_CONCAT_SPEC_TMPVAR_TMPVAR_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_FAST_CONCAT_SPEC_TMPVAR_CV_TAILCALL_HANDLER,
		ZEND_FAST_CONCAT_SPEC_TMPVAR_CONST_TAILCALL_HANDLER,
		ZEND_FAST_CONCAT_SPEC_TMPVAR_TMPVAR_TAILCALL_HANDLER,
		ZEND_FAST_CONCAT_SPEC_TMPVAR_TMPVAR_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_FAST_CONCAT_SPEC_TMPVAR_CV_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_FAST_CONCAT_SPEC_CV_CONST_TAILCALL_HANDLER,
		ZEND_FAST_CONCAT_SPEC_CV_TMPVAR_TAILCALL_HANDLER,
		ZEND_FAST_CONCAT_SPEC_CV_TMPVAR_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_FAST_CONCAT_SPEC_CV_CV_TAILCALL_HANDLER,
		ZEND_ROPE_INIT_SPEC_UNUSED_CONST_TAILCALL_HANDLER,
		ZEND_ROPE_INIT_SPEC_UNUSED_TMPVAR_TAILCALL_HANDLER,
		ZEND_ROPE_INIT_SPEC_UNUSED_TMPVAR_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_ROPE_INIT_SPEC_UNUSED_CV_TAILCALL_HANDLER,
		ZEND_ROPE_ADD_SPEC_TMP_CONST_TAILCALL_HANDLER,
		ZEND_ROPE_ADD_SPEC_TMP_TMPVAR_TAILCALL_HANDLER,
		ZEND_ROPE_ADD_SPEC_TMP_TMPVAR_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_ROPE_ADD_SPEC_TMP_CV_TAILCALL_HANDLER,
		ZEND_ROPE_END_SPEC_TMP_CONST_TAILCALL_HANDLER,
		ZEND_ROPE_END_SPEC_TMP_TMPVAR_TAILCALL_HANDLER,
		ZEND_ROPE_END_SPEC_TMP_TMPVAR_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_ROPE_END_SPEC_TMP_CV_TAILCALL_HANDLER,
		ZEND_BEGIN_SILENCE_SPEC_TAILCALL_HANDLER,
		ZEND_END_SILENCE_SPEC_TMP_TAILCALL_HANDLER,
		ZEND_INIT_FCALL_BY_NAME_SPEC_CONST_TAILCALL_HANDLER,
		ZEND_DO_FCALL_SPEC_RETVAL_UNUSED_TAILCALL_HANDLER,
		ZEND_DO_FCALL_SPEC_RETVAL_USED_TAILCALL_HANDLER,
		ZEND_DO_FCALL_SPEC_OBSERVER_TAILCALL_HANDLER,
		ZEND_DO_FCALL_SPEC_OBSERVER_TAILCALL_HANDLER,
		ZEND_INIT_FCALL_SPEC_CONST_TAILCALL_HANDLER,
		ZEND_RETURN_SPEC_CONST_TAILCALL_HANDLER,
		ZEND_RETURN_SPEC_OBSERVER_TAILCALL_HANDLER,
		ZEND_RETURN_SPEC_TMP_TAILCALL_HANDLER,
		ZEND_RETURN_SPEC_OBSERVER_TAILCALL_HANDLER,
		ZEND_RETURN_SPEC_VAR_TAILCALL_HANDLER,
		ZEND_RETURN_SPEC_OBSERVER_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_RETURN_SPEC_CV_TAILCALL_HANDLER,
		ZEND_RETURN_SPEC_OBSERVER_TAILCALL_HANDLER,
		ZEND_RECV_SPEC_UNUSED_TAILCALL_HANDLER,
		ZEND_RECV_INIT_SPEC_CONST_TAILCALL_HANDLER,
		ZEND_SEND_VAL_SPEC_CONST_CONST_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_SEND_VAL_SPEC_CONST_UNUSED_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_SEND_VAL_SPEC_TMPVAR_CONST_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_SEND_VAL_SPEC_TMPVAR_UNUSED_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_SEND_VAL_SPEC_TMPVAR_CONST_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_SEND_VAL_SPEC_TMPVAR_UNUSED_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_SEND_VAR_EX_SPEC_VAR_CONST_TAILCALL_HANDLER,
		ZEND_SEND_VAR_EX_SPEC_VAR_CONST_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_SEND_VAR_EX_SPEC_VAR_UNUSED_TAILCALL_HANDLER,
		ZEND_SEND_VAR_EX_SPEC_VAR_UNUSED_QUICK_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_SEND_VAR_EX_SPEC_CV_CONST_TAILCALL_HANDLER,
		ZEND_SEND_VAR_EX_SPEC_CV_CONST_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_SEND_VAR_EX_SPEC_CV_UNUSED_TAILCALL_HANDLER,
		ZEND_SEND_VAR_EX_SPEC_CV_UNUSED_QUICK_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_SEND_REF_SPEC_VAR_CONST_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_SEND_REF_SPEC_VAR_UNUSED_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_SEND_REF_SPEC_CV_CONST_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_SEND_REF_SPEC_CV_UNUSED_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NEW_SPEC_CONST_UNUSED_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NEW_SPEC_VAR_UNUSED_TAILCALL_HANDLER,
		ZEND_NEW_SPEC_UNUSED_UNUSED_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_INIT_NS_FCALL_BY_NAME_SPEC_CONST_TAILCALL_HANDLER,
		ZEND_FREE_SPEC_TMPVAR_TAILCALL_HANDLER,
		ZEND_INIT_ARRAY_SPEC_CONST_CONST_TAILCALL_HANDLER,
		ZEND_INIT_ARRAY_SPEC_CONST_TMPVAR_TAILCALL_HANDLER,
		ZEND_INIT_ARRAY_SPEC_CONST_TMPVAR_TAILCALL_HANDLER,
		ZEND_INIT_ARRAY_SPEC_CONST_UNUSED_TAILCALL_HANDLER,
		ZEND_INIT_ARRAY_SPEC_CONST_CV_TAILCALL_HANDLER,
		ZEND_INIT_ARRAY_SPEC_TMP_CONST_TAILCALL_HANDLER,
		ZEND_INIT_ARRAY_SPEC_TMP_TMPVAR_TAILCALL_HANDLER,
		ZEND_INIT_ARRAY_SPEC_TMP_TMPVAR_TAILCALL_HANDLER,
		ZEND_INIT_ARRAY_SPEC_TMP_UNUSED_TAILCALL_HANDLER,
		ZEND_INIT_ARRAY_SPEC_TMP_CV_TAILCALL_HANDLER,
		ZEND_INIT_ARRAY_SPEC_VAR_CONST_TAILCALL_HANDLER,
		ZEND_INIT_ARRAY_SPEC_VAR_TMPVAR_TAILCALL_HANDLER,
		ZEND_INIT_ARRAY_SPEC_VAR_TMPVAR_TAILCALL_HANDLER,
		ZEND_INIT_ARRAY_SPEC_VAR_UNUSED_TAILCALL_HANDLER,
		ZEND_INIT_ARRAY_SPEC_VAR_CV_TAILCALL_HANDLER,
		ZEND_INIT_ARRAY_SPEC_UNUSED_CONST_TAILCALL_HANDLER,
		ZEND_INIT_ARRAY_SPEC_UNUSED_TMPVAR_TAILCALL_HANDLER,
		ZEND_INIT_ARRAY_SPEC_UNUSED_TMPVAR_TAILCALL_HANDLER,
		ZEND_INIT_ARRAY_SPEC_UNUSED_UNUSED_TAILCALL_HANDLER,
		ZEND_INIT_ARRAY_SPEC_UNUSED_CV_TAILCALL_HANDLER,
		ZEND_INIT_ARRAY_SPEC_CV_CONST_TAILCALL_HANDLER,
		ZEND_INIT_ARRAY_SPEC_CV_TMPVAR_TAILCALL_HANDLER,
		ZEND_INIT_ARRAY_SPEC_CV_TMPVAR_TAILCALL_HANDLER,
		ZEND_INIT_ARRAY_SPEC_CV_UNUSED_TAILCALL_HANDLER,
		ZEND_INIT_ARRAY_SPEC_CV_CV_TAILCALL_HANDLER,
		ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_CONST_TAILCALL_HANDLER,
		ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_TMPVAR_TAILCALL_HANDLER,
		ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_TMPVAR_TAILCALL_HANDLER,
		ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_UNUSED_TAILCALL_HANDLER,
		ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_CV_TAILCALL_HANDLER,
		ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_CONST_TAILCALL_HANDLER,
		ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_TMPVAR_TAILCALL_HANDLER,
		ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_TMPVAR_TAILCALL_HANDLER,
		ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_UNUSED_TAILCALL_HANDLER,
		ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_CV_TAILCALL_HANDLER,
		ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_CONST_TAILCALL_HANDLER,
		ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_TMPVAR_TAILCALL_HANDLER,
		ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_TMPVAR_TAILCALL_HANDLER,
		ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_UNUSED_TAILCALL_HANDLER,
		ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_CV_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_CONST_TAILCALL_HANDLER,
		ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_TMPVAR_TAILCALL_HANDLER,
		ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_TMPVAR_TAILCALL_HANDLER,
		ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_UNUSED_TAILCALL_HANDLER,
		ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_CV_TAILCALL_HANDLER,
		ZEND_INCLUDE_OR_EVAL_SPEC_CONST_TAILCALL_HANDLER,
		ZEND_INCLUDE_OR_EVAL_SPEC_OBSERVER_TAILCALL_HANDLER,
		ZEND_INCLUDE_OR_EVAL_SPEC_TMPVAR_TAILCALL_HANDLER,
		ZEND_INCLUDE_OR_EVAL_SPEC_OBSERVER_TAILCALL_HANDLER,
		ZEND_INCLUDE_OR_EVAL_SPEC_TMPVAR_TAILCALL_HANDLER,
		ZEND_INCLUDE_OR_EVAL_SPEC_OBSERVER_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_INCLUDE_OR_EVAL_SPEC_CV_TAILCALL_HANDLER,
		ZEND_INCLUDE_OR_EVAL_SPEC_OBSERVER_TAILCALL_HANDLER,
		ZEND_UNSET_VAR_SPEC_CONST_UNUSED_TAILCALL_HANDLER,
		ZEND_UNSET_VAR_SPEC_TMPVAR_UNUSED_TAILCALL_HANDLER,
		ZEND_UNSET_VAR_SPEC_TMPVAR_UNUSED_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_UNSET_VAR_SPEC_CV_UNUSED_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_UNSET_DIM_SPEC_VAR_CONST_TAILCALL_HANDLER,
		ZEND_UNSET_DIM_SPEC_VAR_TMPVAR_TAILCALL_HANDLER,
		ZEND_UNSET_DIM_SPEC_VAR_TMPVAR_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_UNSET_DIM_SPEC_VAR_CV_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_UNSET_DIM_SPEC_CV_CONST_TAILCALL_HANDLER,
		ZEND_UNSET_DIM_SPEC_CV_TMPVAR_TAILCALL_HANDLER,
		ZEND_UNSET_DIM_SPEC_CV_TMPVAR_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_UNSET_DIM_SPEC_CV_CV_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_UNSET_OBJ_SPEC_VAR_CONST_TAILCALL_HANDLER,
		ZEND_UNSET_OBJ_SPEC_VAR_TMPVAR_TAILCALL_HANDLER,
		ZEND_UNSET_OBJ_SPEC_VAR_TMPVAR_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_UNSET_OBJ_SPEC_VAR_CV_TAILCALL_HANDLER,
		ZEND_UNSET_OBJ_SPEC_UNUSED_CONST_TAILCALL_HANDLER,
		ZEND_UNSET_OBJ_SPEC_UNUSED_TMPVAR_TAILCALL_HANDLER,
		ZEND_UNSET_OBJ_SPEC_UNUSED_TMPVAR_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_UNSET_OBJ_SPEC_UNUSED_CV_TAILCALL_HANDLER,
		ZEND_UNSET_OBJ_SPEC_CV_CONST_TAILCALL_HANDLER,
		ZEND_UNSET_OBJ_SPEC_CV_TMPVAR_TAILCALL_HANDLER,
		ZEND_UNSET_OBJ_SPEC_CV_TMPVAR_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_UNSET_OBJ_SPEC_CV_CV_TAILCALL_HANDLER,
		ZEND_FE_RESET_R_SPEC_CONST_TAILCALL_HANDLER,
		ZEND_FE_RESET_R_SPEC_TMP_TAILCALL_HANDLER,
		ZEND_FE_RESET_R_SPEC_VAR_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_FE_RESET_R_SPEC_CV_TAILCALL_HANDLER,
		ZEND_FE_FETCH_R_SPEC_VAR_TAILCALL_HANDLER,
		ZEND_FETCH_R_SPEC_CONST_UNUSED_TAILCALL_HANDLER,
		ZEND_FETCH_R_SPEC_TMPVAR_UNUSED_TAILCALL_HANDLER,
		ZEND_FETCH_R_SPEC_TMPVAR_UNUSED_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_FETCH_R_SPEC_CV_UNUSED_TAILCALL_HANDLER,
		ZEND_FETCH_DIM_R_SPEC_CONST_CONST_TAILCALL_HANDLER,
		ZEND_FETCH_DIM_R_SPEC_CONST_TMPVAR_TAILCALL_HANDLER,
		ZEND_FETCH_DIM_R_SPEC_CONST_TMPVAR_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_FETCH_DIM_R_SPEC_CONST_CV_TAILCALL_HANDLER,
		ZEND_FETCH_DIM_R_SPEC_TMPVAR_CONST_TAILCALL_HANDLER,
		ZEND_FETCH_DIM_R_SPEC_TMPVAR_TMPVAR_TAILCALL_HANDLER,
		ZEND_FETCH_DIM_R_SPEC_TMPVAR_TMPVAR_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_FETCH_DIM_R_SPEC_TMPVAR_CV_TAILCALL_HANDLER,
		ZEND_FETCH_DIM_R_SPEC_TMPVAR_CONST_TAILCALL_HANDLER,
		ZEND_FETCH_DIM_R_SPEC_TMPVAR_TMPVAR_TAILCALL_HANDLER,
		ZEND_FETCH_DIM_R_SPEC_TMPVAR_TMPVAR_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_FETCH_DIM_R_SPEC_TMPVAR_CV_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_FETCH_DIM_R_SPEC_CV_CONST_TAILCALL_HANDLER,
		ZEND_FETCH_DIM_R_SPEC_CV_TMPVAR_TAILCALL_HANDLER,
		ZEND_FETCH_DIM_R_SPEC_CV_TMPVAR_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_FETCH_DIM_R_SPEC_CV_CV_TAILCALL_HANDLER,
		ZEND_FETCH_OBJ_R_SPEC_CONST_CONST_TAILCALL_HANDLER,
		ZEND_FETCH_OBJ_R_SPEC_CONST_TMPVAR_TAILCALL_HANDLER,
		ZEND_FETCH_OBJ_R_SPEC_CONST_TMPVAR_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_FETCH_OBJ_R_SPEC_CONST_CV_TAILCALL_HANDLER,
		ZEND_FETCH_OBJ_R_SPEC_TMPVAR_CONST_TAILCALL_HANDLER,
		ZEND_FETCH_OBJ_R_SPEC_TMPVAR_TMPVAR_TAILCALL_HANDLER,
		ZEND_FETCH_OBJ_R_SPEC_TMPVAR_TMPVAR_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_FETCH_OBJ_R_SPEC_TMPVAR_CV_TAILCALL_HANDLER,
		ZEND_FETCH_OBJ_R_SPEC_TMPVAR_CONST_TAILCALL_HANDLER,
		ZEND_FETCH_OBJ_R_SPEC_TMPVAR_TMPVAR_TAILCALL_HANDLER,
		ZEND_FETCH_OBJ_R_SPEC_TMPVAR_TMPVAR_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_FETCH_OBJ_R_SPEC_TMPVAR_CV_TAILCALL_HANDLER,
		ZEND_FETCH_OBJ_R_SPEC_UNUSED_CONST_TAILCALL_HANDLER,
		ZEND_FETCH_OBJ_R_SPEC_UNUSED_TMPVAR_TAILCALL_HANDLER,
		ZEND_FETCH_OBJ_R_SPEC_UNUSED_TMPVAR_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_FETCH_OBJ_R_SPEC_UNUSED_CV_TAILCALL_HANDLER,
		ZEND_FETCH_OBJ_R_SPEC_CV_CONST_TAILCALL_HANDLER,
		ZEND_FETCH_OBJ_R_SPEC_CV_TMPVAR_TAILCALL_HANDLER,
		ZEND_FETCH_OBJ_R_SPEC_CV_TMPVAR_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_FETCH_OBJ_R_SPEC_CV_CV_TAILCALL_HANDLER,
		ZEND_FETCH_W_SPEC_CONST_UNUSED_TAILCALL_HANDLER,
		ZEND_FETCH_W_SPEC_TMPVAR_UNUSED_TAILCALL_HANDLER,
		ZEND_FETCH_W_SPEC_TMPVAR_UNUSED_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_FETCH_W_SPEC_CV_UNUSED_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_FETCH_DIM_W_SPEC_VAR_CONST_TAILCALL_HANDLER,
		ZEND_FETCH_DIM_W_SPEC_VAR_TMPVAR_TAILCALL_HANDLER,
		ZEND_FETCH_DIM_W_SPEC_VAR_TMPVAR_TAILCALL_HANDLER,
		ZEND_FETCH_DIM_W_SPEC_VAR_UNUSED_TAILCALL_HANDLER,
		ZEND_FETCH_DIM_W_SPEC_VAR_CV_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_FETCH_DIM_W_SPEC_CV_CONST_TAILCALL_HANDLER,
		ZEND_FETCH_DIM_W_SPEC_CV_TMPVAR_TAILCALL_HANDLER,
		ZEND_FETCH_DIM_W_SPEC_CV_TMPVAR_TAILCALL_HANDLER,
		ZEND_FETCH_DIM_W_SPEC_CV_UNUSED_TAILCALL_HANDLER,
		ZEND_FETCH_DIM_W_SPEC_CV_CV_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_FETCH_OBJ_W_SPEC_VAR_CONST_TAILCALL_HANDLER,
		ZEND_FETCH_OBJ_W_SPEC_VAR_TMPVAR_TAILCALL_HANDLER,
		ZEND_FETCH_OBJ_W_SPEC_VAR_TMPVAR_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_FETCH_OBJ_W_SPEC_VAR_CV_TAILCALL_HANDLER,
		ZEND_FETCH_OBJ_W_SPEC_UNUSED_CONST_TAILCALL_HANDLER,
		ZEND_FETCH_OBJ_W_SPEC_UNUSED_TMPVAR_TAILCALL_HANDLER,
		ZEND_FETCH_OBJ_W_SPEC_UNUSED_TMPVAR_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_FETCH_OBJ_W_SPEC_UNUSED_CV_TAILCALL_HANDLER,
		ZEND_FETCH_OBJ_W_SPEC_CV_CONST_TAILCALL_HANDLER,
		ZEND_FETCH_OBJ_W_SPEC_CV_TMPVAR_TAILCALL_HANDLER,
		ZEND_FETCH_OBJ_W_SPEC_CV_TMPVAR_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_FETCH_OBJ_W_SPEC_CV_CV_TAILCALL_HANDLER,
		ZEND_FETCH_RW_SPEC_CONST_UNUSED_TAILCALL_HANDLER,
		ZEND_FETCH_RW_SPEC_TMPVAR_UNUSED_TAILCALL_HANDLER,
		ZEND_FETCH_RW_SPEC_TMPVAR_UNUSED_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_FETCH_RW_SPEC_CV_UNUSED_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_FETCH_DIM_RW_SPEC_VAR_CONST_TAILCALL_HANDLER,
		ZEND_FETCH_DIM_RW_SPEC_VAR_TMPVAR_TAILCALL_HANDLER,
		ZEND_FETCH_DIM_RW_SPEC_VAR_TMPVAR_TAILCALL_HANDLER,
		ZEND_FETCH_DIM_RW_SPEC_VAR_UNUSED_TAILCALL_HANDLER,
		ZEND_FETCH_DIM_RW_SPEC_VAR_CV_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_FETCH_DIM_RW_SPEC_CV_CONST_TAILCALL_HANDLER,
		ZEND_FETCH_DIM_RW_SPEC_CV_TMPVAR_TAILCALL_HANDLER,
		ZEND_FETCH_DIM_RW_SPEC_CV_TMPVAR_TAILCALL_HANDLER,
		ZEND_FETCH_DIM_RW_SPEC_CV_UNUSED_TAILCALL_HANDLER,
		ZEND_FETCH_DIM_RW_SPEC_CV_CV_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_FETCH_OBJ_RW_SPEC_VAR_CONST_TAILCALL_HANDLER,
		ZEND_FETCH_OBJ_RW_SPEC_VAR_TMPVAR_TAILCALL_HANDLER,
		ZEND_FETCH_OBJ_RW_SPEC_VAR_TMPVAR_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_FETCH_OBJ_RW_SPEC_VAR_CV_TAILCALL_HANDLER,
		ZEND_FETCH_OBJ_RW_SPEC_UNUSED_CONST_TAILCALL_HANDLER,
		ZEND_FETCH_OBJ_RW_SPEC_UNUSED_TMPVAR_TAILCALL_HANDLER,
		ZEND_FETCH_OBJ_RW_SPEC_UNUSED_TMPVAR_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_FETCH_OBJ_RW_SPEC_UNUSED_CV_TAILCALL_HANDLER,
		ZEND_FETCH_OBJ_RW_SPEC_CV_CONST_TAILCALL_HANDLER,
		ZEND_FETCH_OBJ_RW_SPEC_CV_TMPVAR_TAILCALL_HANDLER,
		ZEND_FETCH_OBJ_RW_SPEC_CV_TMPVAR_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_FETCH_OBJ_RW_SPEC_CV_CV_TAILCALL_HANDLER,
		ZEND_FETCH_IS_SPEC_CONST_UNUSED_TAILCALL_HANDLER,
		ZEND_FETCH_IS_SPEC_TMPVAR_UNUSED_TAILCALL_HANDLER,
		ZEND_FETCH_IS_SPEC_TMPVAR_UNUSED_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_FETCH_IS_SPEC_CV_UNUSED_TAILCALL_HANDLER,
		ZEND_FETCH_DIM_IS_SPEC_CONST_CONST_TAILCALL_HANDLER,
		ZEND_FETCH_DIM_IS_SPEC_CONST_TMPVAR_TAILCALL_HANDLER,
		ZEND_FETCH_DIM_IS_SPEC_CONST_TMPVAR_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_FETCH_DIM_IS_SPEC_CONST_CV_TAILCALL_HANDLER,
		ZEND_FETCH_DIM_IS_SPEC_TMPVAR_CONST_TAILCALL_HANDLER,
		ZEND_FETCH_DIM_IS_SPEC_TMPVAR_TMPVAR_TAILCALL_HANDLER,
		ZEND_FETCH_DIM_IS_SPEC_TMPVAR_TMPVAR_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_FETCH_DIM_IS_SPEC_TMPVAR_CV_TAILCALL_HANDLER,
		ZEND_FETCH_DIM_IS_SPEC_TMPVAR_CONST_TAILCALL_HANDLER,
		ZEND_FETCH_DIM_IS_SPEC_TMPVAR_TMPVAR_TAILCALL_HANDLER,
		ZEND_FETCH_DIM_IS_SPEC_TMPVAR_TMPVAR_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_FETCH_DIM_IS_SPEC_TMPVAR_CV_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_FETCH_DIM_IS_SPEC_CV_CONST_TAILCALL_HANDLER,
		ZEND_FETCH_DIM_IS_SPEC_CV_TMPVAR_TAILCALL_HANDLER,
		ZEND_FETCH_DIM_IS_SPEC_CV_TMPVAR_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_FETCH_DIM_IS_SPEC_CV_CV_TAILCALL_HANDLER,
		ZEND_FETCH_OBJ_IS_SPEC_CONST_CONST_TAILCALL_HANDLER,
		ZEND_FETCH_OBJ_IS_SPEC_CONST_TMPVAR_TAILCALL_HANDLER,
		ZEND_FETCH_OBJ_IS_SPEC_CONST_TMPVAR_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_FETCH_OBJ_IS_SPEC_CONST_CV_TAILCALL_HANDLER,
		ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_CONST_TAILCALL_HANDLER,
		ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_TMPVAR_TAILCALL_HANDLER,
		ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_TMPVAR_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_CV_TAILCALL_HANDLER,
		ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_CONST_TAILCALL_HANDLER,
		ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_TMPVAR_TAILCALL_HANDLER,
		ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_TMPVAR_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_CV_TAILCALL_HANDLER,
		ZEND_FETCH_OBJ_IS_SPEC_UNUSED_CONST_TAILCALL_HANDLER,
		ZEND_FETCH_OBJ_IS_SPEC_UNUSED_TMPVAR_TAILCALL_HANDLER,
		ZEND_FETCH_OBJ_IS_SPEC_UNUSED_TMPVAR_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_FETCH_OBJ_IS_SPEC_UNUSED_CV_TAILCALL_HANDLER,
		ZEND_FETCH_OBJ_IS_SPEC_CV_CONST_TAILCALL_HANDLER,
		ZEND_FETCH_OBJ_IS_SPEC_CV_TMPVAR_TAILCALL_HANDLER,
		ZEND_FETCH_OBJ_IS_SPEC_CV_TMPVAR_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_FETCH_OBJ_IS_SPEC_CV_CV_TAILCALL_HANDLER,
		ZEND_FETCH_FUNC_ARG_SPEC_CONST_UNUSED_TAILCALL_HANDLER,
		ZEND_FETCH_FUNC_ARG_SPEC_TMPVAR_UNUSED_TAILCALL_HANDLER,
		ZEND_FETCH_FUNC_ARG_SPEC_TMPVAR_UNUSED_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_FETCH_FUNC_ARG_SPEC_CV_UNUSED_TAILCALL_HANDLER,
		ZEND_FETCH_DIM_FUNC_ARG_SPEC_CONST_CONST_TAILCALL_HANDLER,
		ZEND_FETCH_DIM_FUNC_ARG_SPEC_CONST_TMPVAR_TAILCALL_HANDLER,
		ZEND_FETCH_DIM_FUNC_ARG_SPEC_CONST_TMPVAR_TAILCALL_HANDLER,
		ZEND_FETCH_DIM_FUNC_ARG_SPEC_CONST_UNUSED_TAILCALL_HANDLER,
		ZEND_FETCH_DIM_FUNC_ARG_SPEC_CONST_CV_TAILCALL_HANDLER,
		ZEND_FETCH_DIM_FUNC_ARG_SPEC_TMP_CONST_TAILCALL_HANDLER,
		ZEND_FETCH_DIM_FUNC_ARG_SPEC_TMP_TMPVAR_TAILCALL_HANDLER,
		ZEND_FETCH_DIM_FUNC_ARG_SPEC_TMP_TMPVAR_TAILCALL_HANDLER,
		ZEND_FETCH_DIM_FUNC_ARG_SPEC_TMP_UNUSED_TAILCALL_HANDLER,
		ZEND_FETCH_DIM_FUNC_ARG_SPEC_TMP_CV_TAILCALL_HANDLER,
		ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_CONST_TAILCALL_HANDLER,
		ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_TMPVAR_TAILCALL_HANDLER,
		ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_TMPVAR_TAILCALL_HANDLER,
		ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_UNUSED_TAILCALL_HANDLER,
		ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_CV_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_CONST_TAILCALL_HANDLER,
		ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_TMPVAR_TAILCALL_HANDLER,
		ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_TMPVAR_TAILCALL_HANDLER,
		ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_UNUSED_TAILCALL_HANDLER,
		ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_CV_TAILCALL_HANDLER,
		ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CONST_CONST_TAILCALL_HANDLER,
		ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CONST_TMPVAR_TAILCALL_HANDLER,
		ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CONST_TMPVAR_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CONST_CV_TAILCALL_HANDLER,
		ZEND_FETCH_OBJ_FUNC_ARG_SPEC_TMP_CONST_TAILCALL_HANDLER,
		ZEND_FETCH_OBJ_FUNC_ARG_SPEC_TMP_TMPVAR_TAILCALL_HANDLER,
		ZEND_FETCH_OBJ_FUNC_ARG_SPEC_TMP_TMPVAR_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_FETCH_OBJ_FUNC_ARG_SPEC_TMP_CV_TAILCALL_HANDLER,
		ZEND_FETCH_OBJ_FUNC_ARG_SPEC_VAR_CONST_TAILCALL_HANDLER,
		ZEND_FETCH_OBJ_FUNC_ARG_SPEC_VAR_TMPVAR_TAILCALL_HANDLER,
		ZEND_FETCH_OBJ_FUNC_ARG_SPEC_VAR_TMPVAR_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_FETCH_OBJ_FUNC_ARG_SPEC_VAR_CV_TAILCALL_HANDLER,
		ZEND_FETCH_OBJ_FUNC_ARG_SPEC_UNUSED_CONST_TAILCALL_HANDLER,
		ZEND_FETCH_OBJ_FUNC_ARG_SPEC_UNUSED_TMPVAR_TAILCALL_HANDLER,
		ZEND_FETCH_OBJ_FUNC_ARG_SPEC_UNUSED_TMPVAR_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_FETCH_OBJ_FUNC_ARG_SPEC_UNUSED_CV_TAILCALL_HANDLER,
		ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CV_CONST_TAILCALL_HANDLER,
		ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CV_TMPVAR_TAILCALL_HANDLER,
		ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CV_TMPVAR_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CV_CV_TAILCALL_HANDLER,
		ZEND_FETCH_UNSET_SPEC_CONST_UNUSED_TAILCALL_HANDLER,
		ZEND_FETCH_UNSET_SPEC_TMPVAR_UNUSED_TAILCALL_HANDLER,
		ZEND_FETCH_UNSET_SPEC_TMPVAR_UNUSED_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_FETCH_UNSET_SPEC_CV_UNUSED_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_FETCH_DIM_UNSET_SPEC_VAR_CONST_TAILCALL_HANDLER,
		ZEND_FETCH_DIM_UNSET_SPEC_VAR_TMPVAR_TAILCALL_HANDLER,
		ZEND_FETCH_DIM_UNSET_SPEC_VAR_TMPVAR_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_FETCH_DIM_UNSET_SPEC_VAR_CV_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_FETCH_DIM_UNSET_SPEC_CV_CONST_TAILCALL_HANDLER,
		ZEND_FETCH_DIM_UNSET_SPEC_CV_TMPVAR_TAILCALL_HANDLER,
		ZEND_FETCH_DIM_UNSET_SPEC_CV_TMPVAR_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_FETCH_DIM_UNSET_SPEC_CV_CV_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_FETCH_OBJ_UNSET_SPEC_VAR_CONST_TAILCALL_HANDLER,
		ZEND_FETCH_OBJ_UNSET_SPEC_VAR_TMPVAR_TAILCALL_HANDLER,
		ZEND_FETCH_OBJ_UNSET_SPEC_VAR_TMPVAR_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_FETCH_OBJ_UNSET_SPEC_VAR_CV_TAILCALL_HANDLER,
		ZEND_FETCH_OBJ_UNSET_SPEC_UNUSED_CONST_TAILCALL_HANDLER,
		ZEND_FETCH_OBJ_UNSET_SPEC_UNUSED_TMPVAR_TAILCALL_HANDLER,
		ZEND_FETCH_OBJ_UNSET_SPEC_UNUSED_TMPVAR_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_FETCH_OBJ_UNSET_SPEC_UNUSED_CV_TAILCALL_HANDLER,
		ZEND_FETCH_OBJ_UNSET_SPEC_CV_CONST_TAILCALL_HANDLER,
		ZEND_FETCH_OBJ_UNSET_SPEC_CV_TMPVAR_TAILCALL_HANDLER,
		ZEND_FETCH_OBJ_UNSET_SPEC_CV_TMPVAR_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_FETCH_OBJ_UNSET_SPEC_CV_CV_TAILCALL_HANDLER,
		ZEND_FETCH_LIST_R_SPEC_CONST_CONST_TAILCALL_HANDLER,
		ZEND_FETCH_LIST_R_SPEC_CONST_TMPVAR_TAILCALL_HANDLER,
		ZEND_FETCH_LIST_R_SPEC_CONST_TMPVAR_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_FETCH_LIST_R_SPEC_CONST_CV_TAILCALL_HANDLER,
		ZEND_FETCH_LIST_R_SPEC_TMPVARCV_CONST_TAILCALL_HANDLER,
		ZEND_FETCH_LIST_R_SPEC_TMPVARCV_TMPVAR_TAILCALL_HANDLER,
		ZEND_FETCH_LIST_R_SPEC_TMPVARCV_TMPVAR_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_FETCH_LIST_R_SPEC_TMPVARCV_CV_TAILCALL_HANDLER,
		ZEND_FETCH_LIST_R_SPEC_TMPVARCV_CONST_TAILCALL_HANDLER,
		ZEND_FETCH_LIST_R_SPEC_TMPVARCV_TMPVAR_TAILCALL_HANDLER,
		ZEND_FETCH_LIST_R_SPEC_TMPVARCV_TMPVAR_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_FETCH_LIST_R_SPEC_TMPVARCV_CV_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_FETCH_LIST_R_SPEC_TMPVARCV_CONST_TAILCALL_HANDLER,
		ZEND_FETCH_LIST_R_SPEC_TMPVARCV_TMPVAR_TAILCALL_HANDLER,
		ZEND_FETCH_LIST_R_SPEC_TMPVARCV_TMPVAR_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_FETCH_LIST_R_SPEC_TMPVARCV_CV_TAILCALL_HANDLER,
		ZEND_FETCH_CONSTANT_SPEC_UNUSED_CONST_TAILCALL_HANDLER,
		ZEND_CHECK_FUNC_ARG_SPEC_UNUSED_CONST_TAILCALL_HANDLER,
		ZEND_CHECK_FUNC_ARG_SPEC_UNUSED_CONST_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_CHECK_FUNC_ARG_SPEC_UNUSED_UNUSED_TAILCALL_HANDLER,
		ZEND_CHECK_FUNC_ARG_SPEC_UNUSED_UNUSED_QUICK_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_EXT_STMT_SPEC_TAILCALL_HANDLER,
		ZEND_EXT_FCALL_BEGIN_SPEC_TAILCALL_HANDLER,
		ZEND_EXT_FCALL_END_SPEC_TAILCALL_HANDLER,
		ZEND_EXT_NOP_SPEC_TAILCALL_HANDLER,
		ZEND_TICKS_SPEC_TAILCALL_HANDLER,
		ZEND_SEND_VAR_NO_REF_SPEC_VAR_CONST_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_SEND_VAR_NO_REF_SPEC_VAR_UNUSED_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_CATCH_SPEC_CONST_TAILCALL_HANDLER,
		ZEND_THROW_SPEC_CONST_TAILCALL_HANDLER,
		ZEND_THROW_SPEC_TMPVAR_TAILCALL_HANDLER,
		ZEND_THROW_SPEC_TMPVAR_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_THROW_SPEC_CV_TAILCALL_HANDLER,
		ZEND_FETCH_CLASS_SPEC_UNUSED_CONST_TAILCALL_HANDLER,
		ZEND_FETCH_CLASS_SPEC_UNUSED_TMPVAR_TAILCALL_HANDLER,
		ZEND_FETCH_CLASS_SPEC_UNUSED_TMPVAR_TAILCALL_HANDLER,
		ZEND_FETCH_CLASS_SPEC_UNUSED_UNUSED_TAILCALL_HANDLER,
		ZEND_FETCH_CLASS_SPEC_UNUSED_CV_TAILCALL_HANDLER,
		ZEND_CLONE_SPEC_CONST_TAILCALL_HANDLER,
		ZEND_CLONE_SPEC_TMPVAR_TAILCALL_HANDLER,
		ZEND_CLONE_SPEC_TMPVAR_TAILCALL_HANDLER,
		ZEND_CLONE_SPEC_UNUSED_TAILCALL_HANDLER,
		ZEND_CLONE_SPEC_CV_TAILCALL_HANDLER,
		ZEND_RETURN_BY_REF_SPEC_CONST_TAILCALL_HANDLER,
		ZEND_RETURN_BY_REF_SPEC_OBSERVER_TAILCALL_HANDLER,
		ZEND_RETURN_BY_REF_SPEC_TMP_TAILCALL_HANDLER,
		ZEND_RETURN_BY_REF_SPEC_OBSERVER_TAILCALL_HANDLER,
		ZEND_RETURN_BY_REF_SPEC_VAR_TAILCALL_HANDLER,
		ZEND_RETURN_BY_REF_SPEC_OBSERVER_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_RETURN_BY_REF_SPEC_CV_TAILCALL_HANDLER,
		ZEND_RETURN_BY_REF_SPEC_OBSERVER_TAILCALL_HANDLER,
		ZEND_INIT_METHOD_CALL_SPEC_CONST_CONST_TAILCALL_HANDLER,
		ZEND_INIT_METHOD_CALL_SPEC_CONST_TMPVAR_TAILCALL_HANDLER,
		ZEND_INIT_METHOD_CALL_SPEC_CONST_TMPVAR_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_INIT_METHOD_CALL_SPEC_CONST_CV_TAILCALL_HANDLER,
		ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_CONST_TAILCALL_HANDLER,
		ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_TMPVAR_TAILCALL_HANDLER,
		ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_TMPVAR_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_CV_TAILCALL_HANDLER,
		ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_CONST_TAILCALL_HANDLER,
		ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_TMPVAR_TAILCALL_HANDLER,
		ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_TMPVAR_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_CV_TAILCALL_HANDLER,
		ZEND_INIT_METHOD_CALL_SPEC_UNUSED_CONST_TAILCALL_HANDLER,
		ZEND_INIT_METHOD_CALL_SPEC_UNUSED_TMPVAR_TAILCALL_HANDLER,
		ZEND_INIT_METHOD_CALL_SPEC_UNUSED_TMPVAR_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_INIT_METHOD_CALL_SPEC_UNUSED_CV_TAILCALL_HANDLER,
		ZEND_INIT_METHOD_CALL_SPEC_CV_CONST_TAILCALL_HANDLER,
		ZEND_INIT_METHOD_CALL_SPEC_CV_TMPVAR_TAILCALL_HANDLER,
		ZEND_INIT_METHOD_CALL_SPEC_CV_TMPVAR_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_INIT_METHOD_CALL_SPEC_CV_CV_TAILCALL_HANDLER,
		ZEND_INIT_STATIC_METHOD_CALL_SPEC_CONST_CONST_TAILCALL_HANDLER,
		ZEND_INIT_STATIC_METHOD_CALL_SPEC_CONST_TMPVAR_TAILCALL_HANDLER,
		ZEND_INIT_STATIC_METHOD_CALL_SPEC_CONST_TMPVAR_TAILCALL_HANDLER,
		ZEND_INIT_STATIC_METHOD_CALL_SPEC_CONST_UNUSED_TAILCALL_HANDLER,
		ZEND_INIT_STATIC_METHOD_CALL_SPEC_CONST_CV_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_INIT_STATIC_METHOD_CALL_SPEC_VAR_CONST_TAILCALL_HANDLER,
		ZEND_INIT_STATIC_METHOD_CALL_SPEC_VAR_TMPVAR_TAILCALL_HANDLER,
		ZEND_INIT_STATIC_METHOD_CALL_SPEC_VAR_TMPVAR_TAILCALL_HANDLER,
		ZEND_INIT_STATIC_METHOD_CALL_SPEC_VAR_UNUSED_TAILCALL_HANDLER,
		ZEND_INIT_STATIC_METHOD_CALL_SPEC_VAR_CV_TAILCALL_HANDLER,
		ZEND_INIT_STATIC_METHOD_CALL_SPEC_UNUSED_CONST_TAILCALL_HANDLER,
		ZEND_INIT_STATIC_METHOD_CALL_SPEC_UNUSED_TMPVAR_TAILCALL_HANDLER,
		ZEND_INIT_STATIC_METHOD_CALL_SPEC_UNUSED_TMPVAR_TAILCALL_HANDLER,
		ZEND_INIT_STATIC_METHOD_CALL_SPEC_UNUSED_UNUSED_TAILCALL_HANDLER,
		ZEND_INIT_STATIC_METHOD_CALL_SPEC_UNUSED_CV_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_ISSET_ISEMPTY_VAR_SPEC_CONST_UNUSED_TAILCALL_HANDLER,
		ZEND_ISSET_ISEMPTY_VAR_SPEC_TMPVAR_UNUSED_TAILCALL_HANDLER,
		ZEND_ISSET_ISEMPTY_VAR_SPEC_TMPVAR_UNUSED_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_ISSET_ISEMPTY_VAR_SPEC_CV_UNUSED_TAILCALL_HANDLER,
		ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CONST_CONST_TAILCALL_HANDLER,
		ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CONST_TMPVAR_TAILCALL_HANDLER,
		ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CONST_TMPVAR_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CONST_CV_TAILCALL_HANDLER,
		ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_TMPVAR_CONST_TAILCALL_HANDLER,
		ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_TMPVAR_TMPVAR_TAILCALL_HANDLER,
		ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_TMPVAR_TMPVAR_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_TMPVAR_CV_TAILCALL_HANDLER,
		ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_TMPVAR_CONST_TAILCALL_HANDLER,
		ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_TMPVAR_TMPVAR_TAILCALL_HANDLER,
		ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_TMPVAR_TMPVAR_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_TMPVAR_CV_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CV_CONST_TAILCALL_HANDLER,
		ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CV_TMPVAR_TAILCALL_HANDLER,
		ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CV_TMPVAR_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CV_CV_TAILCALL_HANDLER,
		ZEND_SEND_VAL_EX_SPEC_CONST_CONST_TAILCALL_HANDLER,
		ZEND_SEND_VAL_EX_SPEC_CONST_CONST_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_SEND_VAL_EX_SPEC_CONST_UNUSED_TAILCALL_HANDLER,
		ZEND_SEND_VAL_EX_SPEC_CONST_UNUSED_QUICK_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_SEND_VAL_EX_SPEC_TMP_CONST_TAILCALL_HANDLER,
		ZEND_SEND_VAL_EX_SPEC_TMP_CONST_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_SEND_VAL_EX_SPEC_TMP_UNUSED_TAILCALL_HANDLER,
		ZEND_SEND_VAL_EX_SPEC_TMP_UNUSED_QUICK_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_SEND_VAR_SPEC_VAR_CONST_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_SEND_VAR_SPEC_VAR_UNUSED_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_SEND_VAR_SPEC_CV_CONST_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_SEND_VAR_SPEC_CV_UNUSED_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_INIT_USER_CALL_SPEC_CONST_CONST_TAILCALL_HANDLER,
		ZEND_INIT_USER_CALL_SPEC_CONST_TMPVAR_TAILCALL_HANDLER,
		ZEND_INIT_USER_CALL_SPEC_CONST_TMPVAR_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_INIT_USER_CALL_SPEC_CONST_CV_TAILCALL_HANDLER,
		ZEND_SEND_ARRAY_SPEC_TAILCALL_HANDLER,
		ZEND_SEND_USER_SPEC_CONST_TAILCALL_HANDLER,
		ZEND_SEND_USER_SPEC_TMP_TAILCALL_HANDLER,
		ZEND_SEND_USER_SPEC_VAR_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_SEND_USER_SPEC_CV_TAILCALL_HANDLER,
		ZEND_STRLEN_SPEC_CONST_TAILCALL_HANDLER,
		ZEND_STRLEN_SPEC_TMPVAR_TAILCALL_HANDLER,
		ZEND_STRLEN_SPEC_TMPVAR_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_STRLEN_SPEC_CV_TAILCALL_HANDLER,
		ZEND_DEFINED_SPEC_CONST_TAILCALL_HANDLER,
		ZEND_TYPE_CHECK_SPEC_CONST_TAILCALL_HANDLER,
		ZEND_TYPE_CHECK_SPEC_TMPVAR_TAILCALL_HANDLER,
		ZEND_TYPE_CHECK_SPEC_TMPVAR_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_TYPE_CHECK_SPEC_CV_TAILCALL_HANDLER,
		ZEND_VERIFY_RETURN_TYPE_SPEC_CONST_UNUSED_TAILCALL_HANDLER,
		ZEND_VERIFY_RETURN_TYPE_SPEC_TMP_UNUSED_TAILCALL_HANDLER,
		ZEND_VERIFY_RETURN_TYPE_SPEC_VAR_UNUSED_TAILCALL_HANDLER,
		ZEND_VERIFY_RETURN_TYPE_SPEC_UNUSED_UNUSED_TAILCALL_HANDLER,
		ZEND_VERIFY_RETURN_TYPE_SPEC_CV_UNUSED_TAILCALL_HANDLER,
		ZEND_FE_RESET_RW_SPEC_CONST_TAILCALL_HANDLER,
		ZEND_FE_RESET_RW_SPEC_TMP_TAILCALL_HANDLER,
		ZEND_FE_RESET_RW_SPEC_VAR_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_FE_RESET_RW_SPEC_CV_TAILCALL_HANDLER,
		ZEND_FE_FETCH_RW_SPEC_VAR_TAILCALL_HANDLER,
		ZEND_FE_FREE_SPEC_TMPVAR_TAILCALL_HANDLER,
		ZEND_INIT_DYNAMIC_CALL_SPEC_CONST_TAILCALL_HANDLER,
		ZEND_INIT_DYNAMIC_CALL_SPEC_TMPVAR_TAILCALL_HANDLER,
		ZEND_INIT_DYNAMIC_CALL_SPEC_TMPVAR_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_INIT_DYNAMIC_CALL_SPEC_CV_TAILCALL_HANDLER,
		ZEND_DO_ICALL_SPEC_RETVAL_UNUSED_TAILCALL_HANDLER,
		ZEND_DO_ICALL_SPEC_RETVAL_USED_TAILCALL_HANDLER,
		ZEND_DO_ICALL_SPEC_OBSERVER_TAILCALL_HANDLER,
		ZEND_DO_ICALL_SPEC_OBSERVER_TAILCALL_HANDLER,
		ZEND_DO_UCALL_SPEC_RETVAL_UNUSED_TAILCALL_HANDLER,
		ZEND_DO_UCALL_SPEC_RETVAL_USED_TAILCALL_HANDLER,
		ZEND_DO_UCALL_SPEC_OBSERVER_TAILCALL_HANDLER,
		ZEND_DO_UCALL_SPEC_OBSERVER_TAILCALL_HANDLER,
		ZEND_DO_FCALL_BY_NAME_SPEC_RETVAL_UNUSED_TAILCALL_HANDLER,
		ZEND_DO_FCALL_BY_NAME_SPEC_RETVAL_USED_TAILCALL_HANDLER,
		ZEND_DO_FCALL_BY_NAME_SPEC_OBSERVER_TAILCALL_HANDLER,
		ZEND_DO_FCALL_BY_NAME_SPEC_OBSERVER_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_PRE_INC_OBJ_SPEC_VAR_CONST_TAILCALL_HANDLER,
		ZEND_PRE_INC_OBJ_SPEC_VAR_TMPVAR_TAILCALL_HANDLER,
		ZEND_PRE_INC_OBJ_SPEC_VAR_TMPVAR_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_PRE_INC_OBJ_SPEC_VAR_CV_TAILCALL_HANDLER,
		ZEND_PRE_INC_OBJ_SPEC_UNUSED_CONST_TAILCALL_HANDLER,
		ZEND_PRE_INC_OBJ_SPEC_UNUSED_TMPVAR_TAILCALL_HANDLER,
		ZEND_PRE_INC_OBJ_SPEC_UNUSED_TMPVAR_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_PRE_INC_OBJ_SPEC_UNUSED_CV_TAILCALL_HANDLER,
		ZEND_PRE_INC_OBJ_SPEC_CV_CONST_TAILCALL_HANDLER,
		ZEND_PRE_INC_OBJ_SPEC_CV_TMPVAR_TAILCALL_HANDLER,
		ZEND_PRE_INC_OBJ_SPEC_CV_TMPVAR_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_PRE_INC_OBJ_SPEC_CV_CV_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_POST_INC_OBJ_SPEC_VAR_CONST_TAILCALL_HANDLER,
		ZEND_POST_INC_OBJ_SPEC_VAR_TMPVAR_TAILCALL_HANDLER,
		ZEND_POST_INC_OBJ_SPEC_VAR_TMPVAR_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_POST_INC_OBJ_SPEC_VAR_CV_TAILCALL_HANDLER,
		ZEND_POST_INC_OBJ_SPEC_UNUSED_CONST_TAILCALL_HANDLER,
		ZEND_POST_INC_OBJ_SPEC_UNUSED_TMPVAR_TAILCALL_HANDLER,
		ZEND_POST_INC_OBJ_SPEC_UNUSED_TMPVAR_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_POST_INC_OBJ_SPEC_UNUSED_CV_TAILCALL_HANDLER,
		ZEND_POST_INC_OBJ_SPEC_CV_CONST_TAILCALL_HANDLER,
		ZEND_POST_INC_OBJ_SPEC_CV_TMPVAR_TAILCALL_HANDLER,
		ZEND_POST_INC_OBJ_SPEC_CV_TMPVAR_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_POST_INC_OBJ_SPEC_CV_CV_TAILCALL_HANDLER,
		ZEND_ECHO_SPEC_CONST_TAILCALL_HANDLER,
		ZEND_ECHO_SPEC_TMPVAR_TAILCALL_HANDLER,
		ZEND_ECHO_SPEC_TMPVAR_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_ECHO_SPEC_CV_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_INSTANCEOF_SPEC_TMPVAR_CONST_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_INSTANCEOF_SPEC_TMPVAR_VAR_TAILCALL_HANDLER,
		ZEND_INSTANCEOF_SPEC_TMPVAR_UNUSED_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_INSTANCEOF_SPEC_TMPVAR_CONST_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_INSTANCEOF_SPEC_TMPVAR_VAR_TAILCALL_HANDLER,
		ZEND_INSTANCEOF_SPEC_TMPVAR_UNUSED_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_INSTANCEOF_SPEC_CV_CONST_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_INSTANCEOF_SPEC_CV_VAR_TAILCALL_HANDLER,
		ZEND_INSTANCEOF_SPEC_CV_UNUSED_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_GENERATOR_CREATE_SPEC_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_MAKE_REF_SPEC_VAR_UNUSED_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_MAKE_REF_SPEC_CV_UNUSED_TAILCALL_HANDLER,
		ZEND_DECLARE_FUNCTION_SPEC_TAILCALL_HANDLER,
		ZEND_DECLARE_LAMBDA_FUNCTION_SPEC_CONST_TAILCALL_HANDLER,
		ZEND_DECLARE_CONST_SPEC_CONST_CONST_TAILCALL_HANDLER,
		ZEND_DECLARE_CLASS_SPEC_CONST_TAILCALL_HANDLER,
		ZEND_DECLARE_CLASS_DELAYED_SPEC_CONST_CONST_TAILCALL_HANDLER,
		ZEND_DECLARE_ANON_CLASS_SPEC_TAILCALL_HANDLER,
		ZEND_ADD_ARRAY_UNPACK_SPEC_TAILCALL_HANDLER,
		ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CONST_CONST_TAILCALL_HANDLER,
		ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CONST_TMPVAR_TAILCALL_HANDLER,
		ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CONST_TMPVAR_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CONST_CV_TAILCALL_HANDLER,
		ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TMPVAR_CONST_TAILCALL_HANDLER,
		ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TMPVAR_TMPVAR_TAILCALL_HANDLER,
		ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TMPVAR_TMPVAR_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TMPVAR_CV_TAILCALL_HANDLER,
		ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TMPVAR_CONST_TAILCALL_HANDLER,
		ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TMPVAR_TMPVAR_TAILCALL_HANDLER,
		ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TMPVAR_TMPVAR_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TMPVAR_CV_TAILCALL_HANDLER,
		ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_UNUSED_CONST_TAILCALL_HANDLER,
		ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_UNUSED_TMPVAR_TAILCALL_HANDLER,
		ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_UNUSED_TMPVAR_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_UNUSED_CV_TAILCALL_HANDLER,
		ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CV_CONST_TAILCALL_HANDLER,
		ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CV_TMPVAR_TAILCALL_HANDLER,
		ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CV_TMPVAR_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CV_CV_TAILCALL_HANDLER,
		ZEND_HANDLE_EXCEPTION_SPEC_TAILCALL_HANDLER,
		ZEND_USER_OPCODE_SPEC_TAILCALL_HANDLER,
		ZEND_ASSERT_CHECK_SPEC_TAILCALL_HANDLER,
		ZEND_JMP_SET_SPEC_CONST_TAILCALL_HANDLER,
		ZEND_JMP_SET_SPEC_TMP_TAILCALL_HANDLER,
		ZEND_JMP_SET_SPEC_VAR_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_JMP_SET_SPEC_CV_TAILCALL_HANDLER,
		ZEND_UNSET_CV_SPEC_CV_UNUSED_TAILCALL_HANDLER,
		ZEND_ISSET_ISEMPTY_CV_SPEC_CV_UNUSED_SET_TAILCALL_HANDLER,
		ZEND_ISSET_ISEMPTY_CV_SPEC_CV_UNUSED_EMPTY_TAILCALL_HANDLER,
		ZEND_FETCH_LIST_W_SPEC_VAR_CONST_TAILCALL_HANDLER,
		ZEND_FETCH_LIST_W_SPEC_VAR_TMPVAR_TAILCALL_HANDLER,
		ZEND_FETCH_LIST_W_SPEC_VAR_TMPVAR_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_FETCH_LIST_W_SPEC_VAR_CV_TAILCALL_HANDLER,
		ZEND_SEPARATE_SPEC_VAR_UNUSED_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_FETCH_CLASS_NAME_SPEC_TMPVAR_TAILCALL_HANDLER,
		ZEND_FETCH_CLASS_NAME_SPEC_TMPVAR_TAILCALL_HANDLER,
		ZEND_FETCH_CLASS_NAME_SPEC_UNUSED_TAILCALL_HANDLER,
		ZEND_FETCH_CLASS_NAME_SPEC_CV_TAILCALL_HANDLER,
		ZEND_CALL_TRAMPOLINE_SPEC_TAILCALL_HANDLER,
		ZEND_CALL_TRAMPOLINE_SPEC_OBSERVER_TAILCALL_HANDLER,
		ZEND_DISCARD_EXCEPTION_SPEC_TAILCALL_HANDLER,
		ZEND_YIELD_SPEC_CONST_CONST_TAILCALL_HANDLER,
		ZEND_YIELD_SPEC_CONST_TMPVAR_TAILCALL_HANDLER,
		ZEND_YIELD_SPEC_CONST_TMPVAR_TAILCALL_HANDLER,
		ZEND_YIELD_SPEC_CONST_UNUSED_TAILCALL_HANDLER,
		ZEND_YIELD_SPEC_CONST_CV_TAILCALL_HANDLER,
		ZEND_YIELD_SPEC_TMP_CONST_TAILCALL_HANDLER,
		ZEND_YIELD_SPEC_TMP_TMPVAR_TAILCALL_HANDLER,
		ZEND_YIELD_SPEC_TMP_TMPVAR_TAILCALL_HANDLER,
		ZEND_YIELD_SPEC_TMP_UNUSED_TAILCALL_HANDLER,
		ZEND_YIELD_SPEC_TMP_CV_TAILCALL_HANDLER,
		ZEND_YIELD_SPEC_VAR_CONST_TAILCALL_HANDLER,
		ZEND_YIELD_SPEC_VAR_TMPVAR_TAILCALL_HANDLER,
		ZEND_YIELD_SPEC_VAR_TMPVAR_TAILCALL_HANDLER,
		ZEND_YIELD_SPEC_VAR_UNUSED_TAILCALL_HANDLER,
		ZEND_YIELD_SPEC_VAR_CV_TAILCALL_HANDLER,
		ZEND_YIELD_SPEC_UNUSED_CONST_TAILCALL_HANDLER,
		ZEND_YIELD_SPEC_UNUSED_TMPVAR_TAILCALL_HANDLER,
		ZEND_YIELD_SPEC_UNUSED_TMPVAR_TAILCALL_HANDLER,
		ZEND_YIELD_SPEC_UNUSED_UNUSED_TAILCALL_HANDLER,
		ZEND_YIELD_SPEC_UNUSED_CV_TAILCALL_HANDLER,
		ZEND_YIELD_SPEC_CV_CONST_TAILCALL_HANDLER,
		ZEND_YIELD_SPEC_CV_TMPVAR_TAILCALL_HANDLER,
		ZEND_YIELD_SPEC_CV_TMPVAR_TAILCALL_HANDLER,
		ZEND_YIELD_SPEC_CV_UNUSED_TAILCALL_HANDLER,
		ZEND_YIELD_SPEC_CV_CV_TAILCALL_HANDLER,
		ZEND_GENERATOR_RETURN_SPEC_CONST_TAILCALL_HANDLER,
		ZEND_GENERATOR_RETURN_SPEC_OBSERVER_TAILCALL_HANDLER,
		ZEND_GENERATOR_RETURN_SPEC_TMP_TAILCALL_HANDLER,
		ZEND_GENERATOR_RETURN_SPEC_OBSERVER_TAILCALL_HANDLER,
		ZEND_GENERATOR_RETURN_SPEC_VAR_TAILCALL_HANDLER,
		ZEND_GENERATOR_RETURN_SPEC_OBSERVER_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_GENERATOR_RETURN_SPEC_CV_TAILCALL_HANDLER,
		ZEND_GENERATOR_RETURN_SPEC_OBSERVER_TAILCALL_HANDLER,
		ZEND_FAST_CALL_SPEC_TAILCALL_HANDLER,
		ZEND_FAST_RET_SPEC_TAILCALL_HANDLER,
		ZEND_RECV_VARIADIC_SPEC_UNUSED_TAILCALL_HANDLER,
		ZEND_SEND_UNPACK_SPEC_TAILCALL_HANDLER,
		ZEND_YIELD_FROM_SPEC_CONST_TAILCALL_HANDLER,
		ZEND_YIELD_FROM_SPEC_TMPVAR_TAILCALL_HANDLER,
		ZEND_YIELD_FROM_SPEC_TMPVAR_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_YIELD_FROM_SPEC_CV_TAILCALL_HANDLER,
		ZEND_COPY_TMP_SPEC_TMPVAR_UNUSED_TAILCALL_HANDLER,
		ZEND_BIND_GLOBAL_SPEC_CV_CONST_TAILCALL_HANDLER,
		ZEND_COALESCE_SPEC_CONST_TAILCALL_HANDLER,
		ZEND_COALESCE_SPEC_TMP_TAILCALL_HANDLER,
		ZEND_COALESCE_SPEC_VAR_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_COALESCE_SPEC_CV_TAILCALL_HANDLER,
		ZEND_SPACESHIP_SPEC_CONST_CONST_TAILCALL_HANDLER,
		ZEND_SPACESHIP_SPEC_CONST_TMPVAR_TAILCALL_HANDLER,
		ZEND_SPACESHIP_SPEC_CONST_TMPVAR_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_SPACESHIP_SPEC_CONST_CV_TAILCALL_HANDLER,
		ZEND_SPACESHIP_SPEC_TMPVAR_CONST_TAILCALL_HANDLER,
		ZEND_SPACESHIP_SPEC_TMPVAR_TMPVAR_TAILCALL_HANDLER,
		ZEND_SPACESHIP_SPEC_TMPVAR_TMPVAR_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_SPACESHIP_SPEC_TMPVAR_CV_TAILCALL_HANDLER,
		ZEND_SPACESHIP_SPEC_TMPVAR_CONST_TAILCALL_HANDLER,
		ZEND_SPACESHIP_SPEC_TMPVAR_TMPVAR_TAILCALL_HANDLER,
		ZEND_SPACESHIP_SPEC_TMPVAR_TMPVAR_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_SPACESHIP_SPEC_TMPVAR_CV_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_SPACESHIP_SPEC_CV_CONST_TAILCALL_HANDLER,
		ZEND_SPACESHIP_SPEC_CV_TMPVAR_TAILCALL_HANDLER,
		ZEND_SPACESHIP_SPEC_CV_TMPVAR_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_SPACESHIP_SPEC_CV_CV_TAILCALL_HANDLER,
		ZEND_FUNC_NUM_ARGS_SPEC_UNUSED_UNUSED_TAILCALL_HANDLER,
		ZEND_FUNC_GET_ARGS_SPEC_CONST_UNUSED_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_FUNC_GET_ARGS_SPEC_UNUSED_UNUSED_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_FETCH_STATIC_PROP_R_SPEC_TAILCALL_HANDLER,
		ZEND_FETCH_STATIC_PROP_W_SPEC_TAILCALL_HANDLER,
		ZEND_FETCH_STATIC_PROP_RW_SPEC_TAILCALL_HANDLER,
		ZEND_FETCH_STATIC_PROP_IS_SPEC_TAILCALL_HANDLER,
		ZEND_FETCH_STATIC_PROP_FUNC_ARG_SPEC_TAILCALL_HANDLER,
		ZEND_FETCH_STATIC_PROP_UNSET_SPEC_TAILCALL_HANDLER,
		ZEND_UNSET_STATIC_PROP_SPEC_TAILCALL_HANDLER,
		ZEND_ISSET_ISEMPTY_STATIC_PROP_SPEC_TAILCALL_HANDLER,
		ZEND_FETCH_CLASS_CONSTANT_SPEC_CONST_CONST_TAILCALL_HANDLER,
		ZEND_FETCH_CLASS_CONSTANT_SPEC_CONST_TMPVARCV_TAILCALL_HANDLER,
		ZEND_FETCH_CLASS_CONSTANT_SPEC_CONST_TMPVARCV_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_FETCH_CLASS_CONSTANT_SPEC_CONST_TMPVARCV_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_FETCH_CLASS_CONSTANT_SPEC_VAR_CONST_TAILCALL_HANDLER,
		ZEND_FETCH_CLASS_CONSTANT_SPEC_VAR_TMPVARCV_TAILCALL_HANDLER,
		ZEND_FETCH_CLASS_CONSTANT_SPEC_VAR_TMPVARCV_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_FETCH_CLASS_CONSTANT_SPEC_VAR_TMPVARCV_TAILCALL_HANDLER,
		ZEND_FETCH_CLASS_CONSTANT_SPEC_UNUSED_CONST_TAILCALL_HANDLER,
		ZEND_FETCH_CLASS_CONSTANT_SPEC_UNUSED_TMPVARCV_TAILCALL_HANDLER,
		ZEND_FETCH_CLASS_CONSTANT_SPEC_UNUSED_TMPVARCV_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_FETCH_CLASS_CONSTANT_SPEC_UNUSED_TMPVARCV_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_BIND_LEXICAL_SPEC_TMP_CV_TAILCALL_HANDLER,
		ZEND_BIND_STATIC_SPEC_CV_TAILCALL_HANDLER,
		ZEND_FETCH_THIS_SPEC_UNUSED_UNUSED_TAILCALL_HANDLER,
		ZEND_SEND_FUNC_ARG_SPEC_VAR_CONST_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_SEND_FUNC_ARG_SPEC_VAR_UNUSED_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_ISSET_ISEMPTY_THIS_SPEC_UNUSED_UNUSED_TAILCALL_HANDLER,
		ZEND_SWITCH_LONG_SPEC_CONST_CONST_TAILCALL_HANDLER,
		ZEND_SWITCH_LONG_SPEC_TMPVARCV_CONST_TAILCALL_HANDLER,
		ZEND_SWITCH_LONG_SPEC_TMPVARCV_CONST_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_SWITCH_LONG_SPEC_TMPVARCV_CONST_TAILCALL_HANDLER,
		ZEND_SWITCH_STRING_SPEC_CONST_CONST_TAILCALL_HANDLER,
		ZEND_SWITCH_STRING_SPEC_TMPVARCV_CONST_TAILCALL_HANDLER,
		ZEND_SWITCH_STRING_SPEC_TMPVARCV_CONST_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_SWITCH_STRING_SPEC_TMPVARCV_CONST_TAILCALL_HANDLER,
		ZEND_IN_ARRAY_SPEC_CONST_CONST_TAILCALL_HANDLER,
		ZEND_IN_ARRAY_SPEC_TMP_CONST_TAILCALL_HANDLER,
		ZEND_IN_ARRAY_SPEC_VAR_CONST_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_IN_ARRAY_SPEC_CV_CONST_TAILCALL_HANDLER,
		ZEND_COUNT_SPEC_CONST_UNUSED_TAILCALL_HANDLER,
		ZEND_COUNT_SPEC_TMPVAR_UNUSED_TAILCALL_HANDLER,
		ZEND_COUNT_SPEC_TMPVAR_UNUSED_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_COUNT_SPEC_CV_UNUSED_TAILCALL_HANDLER,
		ZEND_GET_CLASS_SPEC_CONST_UNUSED_TAILCALL_HANDLER,
		ZEND_GET_CLASS_SPEC_TMPVAR_UNUSED_TAILCALL_HANDLER,
		ZEND_GET_CLASS_SPEC_TMPVAR_UNUSED_TAILCALL_HANDLER,
		ZEND_GET_CLASS_SPEC_UNUSED_UNUSED_TAILCALL_HANDLER,
		ZEND_GET_CLASS_SPEC_CV_UNUSED_TAILCALL_HANDLER,
		ZEND_GET_CALLED_CLASS_SPEC_UNUSED_UNUSED_TAILCALL_HANDLER,
		ZEND_GET_TYPE_SPEC_CONST_UNUSED_TAILCALL_HANDLER,
		ZEND_GET_TYPE_SPEC_TMP_UNUSED_TAILCALL_HANDLER,
		ZEND_GET_TYPE_SPEC_VAR_UNUSED_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_GET_TYPE_SPEC_CV_UNUSED_TAILCALL_HANDLER,
		ZEND_ARRAY_KEY_EXISTS_SPEC_CONST_CONST_TAILCALL_HANDLER,
		ZEND_ARRAY_KEY_EXISTS_SPEC_CONST_TMPVAR_TAILCALL_HANDLER,
		ZEND_ARRAY_KEY_EXISTS_SPEC_CONST_TMPVAR_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_ARRAY_KEY_EXISTS_SPEC_CONST_CV_TAILCALL_HANDLER,
		ZEND_ARRAY_KEY_EXISTS_SPEC_TMPVAR_CONST_TAILCALL_HANDLER,
		ZEND_ARRAY_KEY_EXISTS_SPEC_TMPVAR_TMPVAR_TAILCALL_HANDLER,
		ZEND_ARRAY_KEY_EXISTS_SPEC_TMPVAR_TMPVAR_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_ARRAY_KEY_EXISTS_SPEC_TMPVAR_CV_TAILCALL_HANDLER,
		ZEND_ARRAY_KEY_EXISTS_SPEC_TMPVAR_CONST_TAILCALL_HANDLER,
		ZEND_ARRAY_KEY_EXISTS_SPEC_TMPVAR_TMPVAR_TAILCALL_HANDLER,
		ZEND_ARRAY_KEY_EXISTS_SPEC_TMPVAR_TMPVAR_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_ARRAY_KEY_EXISTS_SPEC_TMPVAR_CV_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_ARRAY_KEY_EXISTS_SPEC_CV_CONST_TAILCALL_HANDLER,
		ZEND_ARRAY_KEY_EXISTS_SPEC_CV_TMPVAR_TAILCALL_HANDLER,
		ZEND_ARRAY_KEY_EXISTS_SPEC_CV_TMPVAR_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_ARRAY_KEY_EXISTS_SPEC_CV_CV_TAILCALL_HANDLER,
		ZEND_MATCH_SPEC_CONST_CONST_TAILCALL_HANDLER,
		ZEND_MATCH_SPEC_TMPVARCV_CONST_TAILCALL_HANDLER,
		ZEND_MATCH_SPEC_TMPVARCV_CONST_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_MATCH_SPEC_TMPVARCV_CONST_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_CASE_STRICT_SPEC_TMP_CONST_TAILCALL_HANDLER,
		ZEND_CASE_STRICT_SPEC_TMP_TMP_TAILCALL_HANDLER,
		ZEND_CASE_STRICT_SPEC_TMP_VAR_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_CASE_STRICT_SPEC_TMP_CV_TAILCALL_HANDLER,
		ZEND_CASE_STRICT_SPEC_VAR_CONST_TAILCALL_HANDLER,
		ZEND_CASE_STRICT_SPEC_VAR_TMP_TAILCALL_HANDLER,
		ZEND_CASE_STRICT_SPEC_VAR_VAR_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_CASE_STRICT_SPEC_VAR_CV_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_MATCH_ERROR_SPEC_CONST_UNUSED_TAILCALL_HANDLER,
		ZEND_MATCH_ERROR_SPEC_TMPVARCV_UNUSED_TAILCALL_HANDLER,
		ZEND_MATCH_ERROR_SPEC_TMPVARCV_UNUSED_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_MATCH_ERROR_SPEC_TMPVARCV_UNUSED_TAILCALL_HANDLER,
		ZEND_JMP_NULL_SPEC_CONST_TAILCALL_HANDLER,
		ZEND_JMP_NULL_SPEC_TMP_TAILCALL_HANDLER,
		ZEND_JMP_NULL_SPEC_VAR_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_JMP_NULL_SPEC_CV_TAILCALL_HANDLER,
		ZEND_CHECK_UNDEF_ARGS_SPEC_UNUSED_UNUSED_TAILCALL_HANDLER,
		ZEND_FETCH_GLOBALS_SPEC_UNUSED_UNUSED_TAILCALL_HANDLER,
		ZEND_VERIFY_NEVER_TYPE_SPEC_UNUSED_UNUSED_TAILCALL_HANDLER,
		ZEND_CALLABLE_CONVERT_SPEC_UNUSED_UNUSED_TAILCALL_HANDLER,
		ZEND_BIND_INIT_STATIC_OR_JMP_SPEC_CV_TAILCALL_HANDLER,
		ZEND_FRAMELESS_ICALL_0_SPEC_UNUSED_UNUSED_TAILCALL_HANDLER,
		ZEND_FRAMELESS_ICALL_0_SPEC_OBSERVER_TAILCALL_HANDLER,
		ZEND_FRAMELESS_ICALL_1_SPEC_UNUSED_TAILCALL_HANDLER,
		ZEND_FRAMELESS_ICALL_1_SPEC_OBSERVER_TAILCALL_HANDLER,
		ZEND_FRAMELESS_ICALL_2_SPEC_TAILCALL_HANDLER,
		ZEND_FRAMELESS_ICALL_2_SPEC_OBSERVER_TAILCALL_HANDLER,
		ZEND_FRAMELESS_ICALL_3_SPEC_TAILCALL_HANDLER,
		ZEND_FRAMELESS_ICALL_3_SPEC_OBSERVER_TAILCALL_HANDLER,
		ZEND_JMP_FRAMELESS_SPEC_CONST_TAILCALL_HANDLER,
		ZEND_INIT_PARENT_PROPERTY_HOOK_CALL_SPEC_CONST_UNUSED_TAILCALL_HANDLER,
		ZEND_DECLARE_ATTRIBUTED_CONST_SPEC_CONST_CONST_TAILCALL_HANDLER,
		ZEND_INIT_FCALL_OFFSET_SPEC_CONST_TAILCALL_HANDLER,
		ZEND_RECV_NOTYPE_SPEC_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_COUNT_ARRAY_SPEC_TMPVAR_UNUSED_TAILCALL_HANDLER,
		ZEND_COUNT_ARRAY_SPEC_TMPVAR_UNUSED_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_COUNT_ARRAY_SPEC_CV_UNUSED_TAILCALL_HANDLER,
		ZEND_JMP_FORWARD_SPEC_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_CONST_TAILCALL_HANDLER,
		ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_TAILCALL_HANDLER,
		ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_TAILCALL_HANDLER,
		ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_CONST_TAILCALL_HANDLER,
		ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_TAILCALL_HANDLER,
		ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_CONST_TAILCALL_HANDLER,
		ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_TAILCALL_HANDLER,
		ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_ADD_LONG_SPEC_TMPVARCV_CONST_TAILCALL_HANDLER,
		ZEND_ADD_LONG_SPEC_TMPVARCV_TMPVARCV_TAILCALL_HANDLER,
		ZEND_ADD_LONG_SPEC_TMPVARCV_TMPVARCV_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_ADD_LONG_SPEC_TMPVARCV_TMPVARCV_TAILCALL_HANDLER,
		ZEND_ADD_LONG_SPEC_TMPVARCV_CONST_TAILCALL_HANDLER,
		ZEND_ADD_LONG_SPEC_TMPVARCV_TMPVARCV_TAILCALL_HANDLER,
		ZEND_ADD_LONG_SPEC_TMPVARCV_TMPVARCV_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_ADD_LONG_SPEC_TMPVARCV_TMPVARCV_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_ADD_LONG_SPEC_TMPVARCV_CONST_TAILCALL_HANDLER,
		ZEND_ADD_LONG_SPEC_TMPVARCV_TMPVARCV_TAILCALL_HANDLER,
		ZEND_ADD_LONG_SPEC_TMPVARCV_TMPVARCV_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_ADD_LONG_SPEC_TMPVARCV_TMPVARCV_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_ADD_DOUBLE_SPEC_TMPVARCV_CONST_TAILCALL_HANDLER,
		ZEND_ADD_DOUBLE_SPEC_TMPVARCV_TMPVARCV_TAILCALL_HANDLER,
		ZEND_ADD_DOUBLE_SPEC_TMPVARCV_TMPVARCV_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_ADD_DOUBLE_SPEC_TMPVARCV_TMPVARCV_TAILCALL_HANDLER,
		ZEND_ADD_DOUBLE_SPEC_TMPVARCV_CONST_TAILCALL_HANDLER,
		ZEND_ADD_DOUBLE_SPEC_TMPVARCV_TMPVARCV_TAILCALL_HANDLER,
		ZEND_ADD_DOUBLE_SPEC_TMPVARCV_TMPVARCV_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_ADD_DOUBLE_SPEC_TMPVARCV_TMPVARCV_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_ADD_DOUBLE_SPEC_TMPVARCV_CONST_TAILCALL_HANDLER,
		ZEND_ADD_DOUBLE_SPEC_TMPVARCV_TMPVARCV_TAILCALL_HANDLER,
		ZEND_ADD_DOUBLE_SPEC_TMPVARCV_TMPVARCV_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_ADD_DOUBLE_SPEC_TMPVARCV_TMPVARCV_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_SUB_LONG_NO_OVERFLOW_SPEC_CONST_TMPVARCV_TAILCALL_HANDLER,
		ZEND_SUB_LONG_NO_OVERFLOW_SPEC_CONST_TMPVARCV_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_SUB_LONG_NO_OVERFLOW_SPEC_CONST_TMPVARCV_TAILCALL_HANDLER,
		ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_CONST_TAILCALL_HANDLER,
		ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_TAILCALL_HANDLER,
		ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_TAILCALL_HANDLER,
		ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_CONST_TAILCALL_HANDLER,
		ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_TAILCALL_HANDLER,
		ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_CONST_TAILCALL_HANDLER,
		ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_TAILCALL_HANDLER,
		ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_SUB_LONG_SPEC_CONST_TMPVARCV_TAILCALL_HANDLER,
		ZEND_SUB_LONG_SPEC_CONST_TMPVARCV_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_SUB_LONG_SPEC_CONST_TMPVARCV_TAILCALL_HANDLER,
		ZEND_SUB_LONG_SPEC_TMPVARCV_CONST_TAILCALL_HANDLER,
		ZEND_SUB_LONG_SPEC_TMPVARCV_TMPVARCV_TAILCALL_HANDLER,
		ZEND_SUB_LONG_SPEC_TMPVARCV_TMPVARCV_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_SUB_LONG_SPEC_TMPVARCV_TMPVARCV_TAILCALL_HANDLER,
		ZEND_SUB_LONG_SPEC_TMPVARCV_CONST_TAILCALL_HANDLER,
		ZEND_SUB_LONG_SPEC_TMPVARCV_TMPVARCV_TAILCALL_HANDLER,
		ZEND_SUB_LONG_SPEC_TMPVARCV_TMPVARCV_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_SUB_LONG_SPEC_TMPVARCV_TMPVARCV_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_SUB_LONG_SPEC_TMPVARCV_CONST_TAILCALL_HANDLER,
		ZEND_SUB_LONG_SPEC_TMPVARCV_TMPVARCV_TAILCALL_HANDLER,
		ZEND_SUB_LONG_SPEC_TMPVARCV_TMPVARCV_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_SUB_LONG_SPEC_TMPVARCV_TMPVARCV_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_SUB_DOUBLE_SPEC_CONST_TMPVARCV_TAILCALL_HANDLER,
		ZEND_SUB_DOUBLE_SPEC_CONST_TMPVARCV_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_SUB_DOUBLE_SPEC_CONST_TMPVARCV_TAILCALL_HANDLER,
		ZEND_SUB_DOUBLE_SPEC_TMPVARCV_CONST_TAILCALL_HANDLER,
		ZEND_SUB_DOUBLE_SPEC_TMPVARCV_TMPVARCV_TAILCALL_HANDLER,
		ZEND_SUB_DOUBLE_SPEC_TMPVARCV_TMPVARCV_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_SUB_DOUBLE_SPEC_TMPVARCV_TMPVARCV_TAILCALL_HANDLER,
		ZEND_SUB_DOUBLE_SPEC_TMPVARCV_CONST_TAILCALL_HANDLER,
		ZEND_SUB_DOUBLE_SPEC_TMPVARCV_TMPVARCV_TAILCALL_HANDLER,
		ZEND_SUB_DOUBLE_SPEC_TMPVARCV_TMPVARCV_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_SUB_DOUBLE_SPEC_TMPVARCV_TMPVARCV_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_SUB_DOUBLE_SPEC_TMPVARCV_CONST_TAILCALL_HANDLER,
		ZEND_SUB_DOUBLE_SPEC_TMPVARCV_TMPVARCV_TAILCALL_HANDLER,
		ZEND_SUB_DOUBLE_SPEC_TMPVARCV_TMPVARCV_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_SUB_DOUBLE_SPEC_TMPVARCV_TMPVARCV_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_CONST_TAILCALL_HANDLER,
		ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_TAILCALL_HANDLER,
		ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_TAILCALL_HANDLER,
		ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_CONST_TAILCALL_HANDLER,
		ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_TAILCALL_HANDLER,
		ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_CONST_TAILCALL_HANDLER,
		ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_TAILCALL_HANDLER,
		ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_MUL_LONG_SPEC_TMPVARCV_CONST_TAILCALL_HANDLER,
		ZEND_MUL_LONG_SPEC_TMPVARCV_TMPVARCV_TAILCALL_HANDLER,
		ZEND_MUL_LONG_SPEC_TMPVARCV_TMPVARCV_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_MUL_LONG_SPEC_TMPVARCV_TMPVARCV_TAILCALL_HANDLER,
		ZEND_MUL_LONG_SPEC_TMPVARCV_CONST_TAILCALL_HANDLER,
		ZEND_MUL_LONG_SPEC_TMPVARCV_TMPVARCV_TAILCALL_HANDLER,
		ZEND_MUL_LONG_SPEC_TMPVARCV_TMPVARCV_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_MUL_LONG_SPEC_TMPVARCV_TMPVARCV_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_MUL_LONG_SPEC_TMPVARCV_CONST_TAILCALL_HANDLER,
		ZEND_MUL_LONG_SPEC_TMPVARCV_TMPVARCV_TAILCALL_HANDLER,
		ZEND_MUL_LONG_SPEC_TMPVARCV_TMPVARCV_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_MUL_LONG_SPEC_TMPVARCV_TMPVARCV_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_MUL_DOUBLE_SPEC_TMPVARCV_CONST_TAILCALL_HANDLER,
		ZEND_MUL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_TAILCALL_HANDLER,
		ZEND_MUL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_MUL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_TAILCALL_HANDLER,
		ZEND_MUL_DOUBLE_SPEC_TMPVARCV_CONST_TAILCALL_HANDLER,
		ZEND_MUL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_TAILCALL_HANDLER,
		ZEND_MUL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_MUL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_MUL_DOUBLE_SPEC_TMPVARCV_CONST_TAILCALL_HANDLER,
		ZEND_MUL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_TAILCALL_HANDLER,
		ZEND_MUL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_MUL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_CONST_TAILCALL_HANDLER,
		ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPZ_TAILCALL_HANDLER,
		ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPNZ_TAILCALL_HANDLER,
		ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_TAILCALL_HANDLER,
		ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_TAILCALL_HANDLER,
		ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_TAILCALL_HANDLER,
		ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_TAILCALL_HANDLER,
		ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_TAILCALL_HANDLER,
		ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_TAILCALL_HANDLER,
		ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_TAILCALL_HANDLER,
		ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_TAILCALL_HANDLER,
		ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_CONST_TAILCALL_HANDLER,
		ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPZ_TAILCALL_HANDLER,
		ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPNZ_TAILCALL_HANDLER,
		ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_TAILCALL_HANDLER,
		ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_TAILCALL_HANDLER,
		ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_TAILCALL_HANDLER,
		ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_TAILCALL_HANDLER,
		ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_TAILCALL_HANDLER,
		ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_TAILCALL_HANDLER,
		ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_TAILCALL_HANDLER,
		ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_CONST_TAILCALL_HANDLER,
		ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPZ_TAILCALL_HANDLER,
		ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPNZ_TAILCALL_HANDLER,
		ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_TAILCALL_HANDLER,
		ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_TAILCALL_HANDLER,
		ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_TAILCALL_HANDLER,
		ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_TAILCALL_HANDLER,
		ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_TAILCALL_HANDLER,
		ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_TAILCALL_HANDLER,
		ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_TAILCALL_HANDLER,
		ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_TAILCALL_HANDLER,
		ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ_TAILCALL_HANDLER,
		ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ_TAILCALL_HANDLER,
		ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_TAILCALL_HANDLER,
		ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_TAILCALL_HANDLER,
		ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_TAILCALL_HANDLER,
		ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_TAILCALL_HANDLER,
		ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_TAILCALL_HANDLER,
		ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_TAILCALL_HANDLER,
		ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_TAILCALL_HANDLER,
		ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_TAILCALL_HANDLER,
		ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_TAILCALL_HANDLER,
		ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ_TAILCALL_HANDLER,
		ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ_TAILCALL_HANDLER,
		ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_TAILCALL_HANDLER,
		ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_TAILCALL_HANDLER,
		ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_TAILCALL_HANDLER,
		ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_TAILCALL_HANDLER,
		ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_TAILCALL_HANDLER,
		ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_TAILCALL_HANDLER,
		ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_TAILCALL_HANDLER,
		ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_TAILCALL_HANDLER,
		ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ_TAILCALL_HANDLER,
		ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ_TAILCALL_HANDLER,
		ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_TAILCALL_HANDLER,
		ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_TAILCALL_HANDLER,
		ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_TAILCALL_HANDLER,
		ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_TAILCALL_HANDLER,
		ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_TAILCALL_HANDLER,
		ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_TAILCALL_HANDLER,
		ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_TAILCALL_HANDLER,
		ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_CONST_TAILCALL_HANDLER,
		ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPZ_TAILCALL_HANDLER,
		ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPNZ_TAILCALL_HANDLER,
		ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_TAILCALL_HANDLER,
		ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_TAILCALL_HANDLER,
		ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_TAILCALL_HANDLER,
		ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_TAILCALL_HANDLER,
		ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_TAILCALL_HANDLER,
		ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_TAILCALL_HANDLER,
		ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_TAILCALL_HANDLER,
		ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_TAILCALL_HANDLER,
		ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_CONST_TAILCALL_HANDLER,
		ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPZ_TAILCALL_HANDLER,
		ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPNZ_TAILCALL_HANDLER,
		ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_TAILCALL_HANDLER,
		ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_TAILCALL_HANDLER,
		ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_TAILCALL_HANDLER,
		ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_TAILCALL_HANDLER,
		ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_TAILCALL_HANDLER,
		ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_TAILCALL_HANDLER,
		ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_TAILCALL_HANDLER,
		ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_CONST_TAILCALL_HANDLER,
		ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPZ_TAILCALL_HANDLER,
		ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPNZ_TAILCALL_HANDLER,
		ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_TAILCALL_HANDLER,
		ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_TAILCALL_HANDLER,
		ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_TAILCALL_HANDLER,
		ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_TAILCALL_HANDLER,
		ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_TAILCALL_HANDLER,
		ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_TAILCALL_HANDLER,
		ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_TAILCALL_HANDLER,
		ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_TAILCALL_HANDLER,
		ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ_TAILCALL_HANDLER,
		ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ_TAILCALL_HANDLER,
		ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_TAILCALL_HANDLER,
		ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_TAILCALL_HANDLER,
		ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_TAILCALL_HANDLER,
		ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_TAILCALL_HANDLER,
		ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_TAILCALL_HANDLER,
		ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_TAILCALL_HANDLER,
		ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_TAILCALL_HANDLER,
		ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_TAILCALL_HANDLER,
		ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_TAILCALL_HANDLER,
		ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ_TAILCALL_HANDLER,
		ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ_TAILCALL_HANDLER,
		ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_TAILCALL_HANDLER,
		ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_TAILCALL_HANDLER,
		ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_TAILCALL_HANDLER,
		ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_TAILCALL_HANDLER,
		ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_TAILCALL_HANDLER,
		ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_TAILCALL_HANDLER,
		ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_TAILCALL_HANDLER,
		ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_TAILCALL_HANDLER,
		ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ_TAILCALL_HANDLER,
		ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ_TAILCALL_HANDLER,
		ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_TAILCALL_HANDLER,
		ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_TAILCALL_HANDLER,
		ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_TAILCALL_HANDLER,
		ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_TAILCALL_HANDLER,
		ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_TAILCALL_HANDLER,
		ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_TAILCALL_HANDLER,
		ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_TAILCALL_HANDLER,
		ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_TAILCALL_HANDLER,
		ZEND_IS_IDENTICAL_EMPTY_ARRAY_SPEC_TMPVARCV_CONST_TAILCALL_HANDLER,
		ZEND_IS_IDENTICAL_EMPTY_ARRAY_SPEC_TMPVARCV_CONST_JMPZ_TAILCALL_HANDLER,
		ZEND_IS_IDENTICAL_EMPTY_ARRAY_SPEC_TMPVARCV_CONST_JMPNZ_TAILCALL_HANDLER,
		ZEND_IS_NOT_IDENTICAL_EMPTY_ARRAY_SPEC_TMPVARCV_CONST_TAILCALL_HANDLER,
		ZEND_IS_NOT_IDENTICAL_EMPTY_ARRAY_SPEC_TMPVARCV_CONST_JMPZ_TAILCALL_HANDLER,
		ZEND_IS_NOT_IDENTICAL_EMPTY_ARRAY_SPEC_TMPVARCV_CONST_JMPNZ_TAILCALL_HANDLER,
		ZEND_IS_IDENTICAL_NOTHROW_SPEC_CV_CONST_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_IS_IDENTICAL_NOTHROW_SPEC_CV_CV_TAILCALL_HANDLER,
		ZEND_IS_NOT_IDENTICAL_NOTHROW_SPEC_CV_CONST_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_IS_NOT_IDENTICAL_NOTHROW_SPEC_CV_CV_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV_TAILCALL_HANDLER,
		ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV_JMPZ_TAILCALL_HANDLER,
		ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV_JMPNZ_TAILCALL_HANDLER,
		ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV_TAILCALL_HANDLER,
		ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV_JMPZ_TAILCALL_HANDLER,
		ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV_JMPNZ_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV_TAILCALL_HANDLER,
		ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV_JMPZ_TAILCALL_HANDLER,
		ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV_JMPNZ_TAILCALL_HANDLER,
		ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST_TAILCALL_HANDLER,
		ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST_JMPZ_TAILCALL_HANDLER,
		ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST_JMPNZ_TAILCALL_HANDLER,
		ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_TAILCALL_HANDLER,
		ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_TAILCALL_HANDLER,
		ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_TAILCALL_HANDLER,
		ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_TAILCALL_HANDLER,
		ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_TAILCALL_HANDLER,
		ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_TAILCALL_HANDLER,
		ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_TAILCALL_HANDLER,
		ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_TAILCALL_HANDLER,
		ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST_TAILCALL_HANDLER,
		ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST_JMPZ_TAILCALL_HANDLER,
		ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST_JMPNZ_TAILCALL_HANDLER,
		ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_TAILCALL_HANDLER,
		ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_TAILCALL_HANDLER,
		ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_TAILCALL_HANDLER,
		ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_TAILCALL_HANDLER,
		ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_TAILCALL_HANDLER,
		ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_TAILCALL_HANDLER,
		ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_TAILCALL_HANDLER,
		ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST_TAILCALL_HANDLER,
		ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST_JMPZ_TAILCALL_HANDLER,
		ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST_JMPNZ_TAILCALL_HANDLER,
		ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_TAILCALL_HANDLER,
		ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_TAILCALL_HANDLER,
		ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_TAILCALL_HANDLER,
		ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_TAILCALL_HANDLER,
		ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_TAILCALL_HANDLER,
		ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_TAILCALL_HANDLER,
		ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_TAILCALL_HANDLER,
		ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV_TAILCALL_HANDLER,
		ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV_JMPZ_TAILCALL_HANDLER,
		ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV_JMPNZ_TAILCALL_HANDLER,
		ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV_TAILCALL_HANDLER,
		ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV_JMPZ_TAILCALL_HANDLER,
		ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV_JMPNZ_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV_TAILCALL_HANDLER,
		ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV_JMPZ_TAILCALL_HANDLER,
		ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV_JMPNZ_TAILCALL_HANDLER,
		ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST_TAILCALL_HANDLER,
		ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ_TAILCALL_HANDLER,
		ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ_TAILCALL_HANDLER,
		ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_TAILCALL_HANDLER,
		ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_TAILCALL_HANDLER,
		ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_TAILCALL_HANDLER,
		ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_TAILCALL_HANDLER,
		ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_TAILCALL_HANDLER,
		ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_TAILCALL_HANDLER,
		ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_TAILCALL_HANDLER,
		ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_TAILCALL_HANDLER,
		ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST_TAILCALL_HANDLER,
		ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ_TAILCALL_HANDLER,
		ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ_TAILCALL_HANDLER,
		ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_TAILCALL_HANDLER,
		ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_TAILCALL_HANDLER,
		ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_TAILCALL_HANDLER,
		ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_TAILCALL_HANDLER,
		ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_TAILCALL_HANDLER,
		ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_TAILCALL_HANDLER,
		ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_TAILCALL_HANDLER,
		ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST_TAILCALL_HANDLER,
		ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ_TAILCALL_HANDLER,
		ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ_TAILCALL_HANDLER,
		ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_TAILCALL_HANDLER,
		ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_TAILCALL_HANDLER,
		ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_TAILCALL_HANDLER,
		ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_TAILCALL_HANDLER,
		ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_TAILCALL_HANDLER,
		ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_TAILCALL_HANDLER,
		ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_TAILCALL_HANDLER,
		ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV_TAILCALL_HANDLER,
		ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV_JMPZ_TAILCALL_HANDLER,
		ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV_JMPNZ_TAILCALL_HANDLER,
		ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV_TAILCALL_HANDLER,
		ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV_JMPZ_TAILCALL_HANDLER,
		ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV_JMPNZ_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV_TAILCALL_HANDLER,
		ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV_JMPZ_TAILCALL_HANDLER,
		ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV_JMPNZ_TAILCALL_HANDLER,
		ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST_TAILCALL_HANDLER,
		ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPZ_TAILCALL_HANDLER,
		ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPNZ_TAILCALL_HANDLER,
		ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_TAILCALL_HANDLER,
		ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_TAILCALL_HANDLER,
		ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_TAILCALL_HANDLER,
		ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_TAILCALL_HANDLER,
		ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_TAILCALL_HANDLER,
		ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_TAILCALL_HANDLER,
		ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_TAILCALL_HANDLER,
		ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_TAILCALL_HANDLER,
		ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST_TAILCALL_HANDLER,
		ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPZ_TAILCALL_HANDLER,
		ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPNZ_TAILCALL_HANDLER,
		ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_TAILCALL_HANDLER,
		ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_TAILCALL_HANDLER,
		ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_TAILCALL_HANDLER,
		ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_TAILCALL_HANDLER,
		ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_TAILCALL_HANDLER,
		ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_TAILCALL_HANDLER,
		ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_TAILCALL_HANDLER,
		ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST_TAILCALL_HANDLER,
		ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPZ_TAILCALL_HANDLER,
		ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPNZ_TAILCALL_HANDLER,
		ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_TAILCALL_HANDLER,
		ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_TAILCALL_HANDLER,
		ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_TAILCALL_HANDLER,
		ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_TAILCALL_HANDLER,
		ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_TAILCALL_HANDLER,
		ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_TAILCALL_HANDLER,
		ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_TAILCALL_HANDLER,
		ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_TAILCALL_HANDLER,
		ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_JMPZ_TAILCALL_HANDLER,
		ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_JMPNZ_TAILCALL_HANDLER,
		ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_TAILCALL_HANDLER,
		ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_JMPZ_TAILCALL_HANDLER,
		ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_JMPNZ_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_TAILCALL_HANDLER,
		ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_JMPZ_TAILCALL_HANDLER,
		ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_JMPNZ_TAILCALL_HANDLER,
		ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_TAILCALL_HANDLER,
		ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ_TAILCALL_HANDLER,
		ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ_TAILCALL_HANDLER,
		ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_TAILCALL_HANDLER,
		ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_TAILCALL_HANDLER,
		ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_TAILCALL_HANDLER,
		ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_TAILCALL_HANDLER,
		ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_TAILCALL_HANDLER,
		ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_TAILCALL_HANDLER,
		ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_TAILCALL_HANDLER,
		ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_TAILCALL_HANDLER,
		ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_TAILCALL_HANDLER,
		ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ_TAILCALL_HANDLER,
		ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ_TAILCALL_HANDLER,
		ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_TAILCALL_HANDLER,
		ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_TAILCALL_HANDLER,
		ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_TAILCALL_HANDLER,
		ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_TAILCALL_HANDLER,
		ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_TAILCALL_HANDLER,
		ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_TAILCALL_HANDLER,
		ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_TAILCALL_HANDLER,
		ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_TAILCALL_HANDLER,
		ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ_TAILCALL_HANDLER,
		ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ_TAILCALL_HANDLER,
		ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_TAILCALL_HANDLER,
		ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_TAILCALL_HANDLER,
		ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_TAILCALL_HANDLER,
		ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_TAILCALL_HANDLER,
		ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_TAILCALL_HANDLER,
		ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_TAILCALL_HANDLER,
		ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_TAILCALL_HANDLER,
		ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_TAILCALL_HANDLER,
		ZEND_PRE_INC_LONG_NO_OVERFLOW_SPEC_CV_RETVAL_UNUSED_TAILCALL_HANDLER,
		ZEND_PRE_INC_LONG_NO_OVERFLOW_SPEC_CV_RETVAL_USED_TAILCALL_HANDLER,
		ZEND_PRE_INC_LONG_SPEC_CV_RETVAL_UNUSED_TAILCALL_HANDLER,
		ZEND_PRE_INC_LONG_SPEC_CV_RETVAL_USED_TAILCALL_HANDLER,
		ZEND_PRE_DEC_LONG_NO_OVERFLOW_SPEC_CV_RETVAL_UNUSED_TAILCALL_HANDLER,
		ZEND_PRE_DEC_LONG_NO_OVERFLOW_SPEC_CV_RETVAL_USED_TAILCALL_HANDLER,
		ZEND_PRE_DEC_LONG_SPEC_CV_RETVAL_UNUSED_TAILCALL_HANDLER,
		ZEND_PRE_DEC_LONG_SPEC_CV_RETVAL_USED_TAILCALL_HANDLER,
		ZEND_POST_INC_LONG_NO_OVERFLOW_SPEC_CV_TAILCALL_HANDLER,
		ZEND_POST_INC_LONG_SPEC_CV_TAILCALL_HANDLER,
		ZEND_POST_DEC_LONG_NO_OVERFLOW_SPEC_CV_TAILCALL_HANDLER,
		ZEND_POST_DEC_LONG_SPEC_CV_TAILCALL_HANDLER,
		ZEND_QM_ASSIGN_LONG_SPEC_CONST_TAILCALL_HANDLER,
		ZEND_QM_ASSIGN_LONG_SPEC_TMPVARCV_TAILCALL_HANDLER,
		ZEND_QM_ASSIGN_LONG_SPEC_TMPVARCV_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_QM_ASSIGN_LONG_SPEC_TMPVARCV_TAILCALL_HANDLER,
		ZEND_QM_ASSIGN_DOUBLE_SPEC_CONST_TAILCALL_HANDLER,
		ZEND_QM_ASSIGN_DOUBLE_SPEC_TMPVARCV_TAILCALL_HANDLER,
		ZEND_QM_ASSIGN_DOUBLE_SPEC_TMPVARCV_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_QM_ASSIGN_DOUBLE_SPEC_TMPVARCV_TAILCALL_HANDLER,
		ZEND_QM_ASSIGN_NOREF_SPEC_CONST_TAILCALL_HANDLER,
		ZEND_QM_ASSIGN_NOREF_SPEC_TMPVARCV_TAILCALL_HANDLER,
		ZEND_QM_ASSIGN_NOREF_SPEC_TMPVARCV_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_QM_ASSIGN_NOREF_SPEC_TMPVARCV_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_FETCH_DIM_R_INDEX_SPEC_CONST_TMPVARCV_TAILCALL_HANDLER,
		ZEND_FETCH_DIM_R_INDEX_SPEC_CONST_TMPVARCV_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_FETCH_DIM_R_INDEX_SPEC_CONST_TMPVARCV_TAILCALL_HANDLER,
		ZEND_FETCH_DIM_R_INDEX_SPEC_TMPVAR_CONST_TAILCALL_HANDLER,
		ZEND_FETCH_DIM_R_INDEX_SPEC_TMPVAR_TMPVARCV_TAILCALL_HANDLER,
		ZEND_FETCH_DIM_R_INDEX_SPEC_TMPVAR_TMPVARCV_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_FETCH_DIM_R_INDEX_SPEC_TMPVAR_TMPVARCV_TAILCALL_HANDLER,
		ZEND_FETCH_DIM_R_INDEX_SPEC_TMPVAR_CONST_TAILCALL_HANDLER,
		ZEND_FETCH_DIM_R_INDEX_SPEC_TMPVAR_TMPVARCV_TAILCALL_HANDLER,
		ZEND_FETCH_DIM_R_INDEX_SPEC_TMPVAR_TMPVARCV_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_FETCH_DIM_R_INDEX_SPEC_TMPVAR_TMPVARCV_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_FETCH_DIM_R_INDEX_SPEC_CV_CONST_TAILCALL_HANDLER,
		ZEND_FETCH_DIM_R_INDEX_SPEC_CV_TMPVARCV_TAILCALL_HANDLER,
		ZEND_FETCH_DIM_R_INDEX_SPEC_CV_TMPVARCV_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_FETCH_DIM_R_INDEX_SPEC_CV_TMPVARCV_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_SEND_VAR_SIMPLE_SPEC_VAR_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_SEND_VAR_SIMPLE_SPEC_CV_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_SEND_VAR_EX_SIMPLE_SPEC_VAR_UNUSED_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER,
		ZEND_SEND_VAR_EX_SIMPLE_SPEC_CV_UNUSED_TAILCALL_HANDLER,
		ZEND_SEND_VAL_SIMPLE_SPEC_CONST_TAILCALL_HANDLER,
		ZEND_SEND_VAL_EX_SIMPLE_SPEC_CONST_TAILCALL_HANDLER,
		ZEND_FE_FETCH_R_SIMPLE_SPEC_VAR_CV_RETVAL_UNUSED_TAILCALL_HANDLER,
		ZEND_FE_FETCH_R_SIMPLE_SPEC_VAR_CV_RETVAL_USED_TAILCALL_HANDLER,
		ZEND_NULL_TAILCALL_HANDLER
	};
	zend_handlers_count = sizeof(handlers) / sizeof(handlers[0]);
#elif ZEND_VM_KIND != ZEND_VM_KIND_HYBRID
	static zend_vm_opcode_handler_t const *handlers = funcs;
	zend_handlers_count = sizeof(funcs) / sizeof(funcs[0]);
#endif
	static const uint32_t specs[] = {
		0,
		1 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
		26 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
		51 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_COMMUTATIVE,
		76 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
		101 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
		126 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
		151 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
		176 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
		201 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_COMMUTATIVE,
		226 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_COMMUTATIVE,
		251 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_COMMUTATIVE,
		276 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
		301 | SPEC_RULE_OP1,
		306 | SPEC_RULE_OP1,
		311 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_COMMUTATIVE,
		336 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_COMMUTATIVE,
		361 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_COMMUTATIVE,
		386 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_SMART_BRANCH | SPEC_RULE_COMMUTATIVE,
		461 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_SMART_BRANCH | SPEC_RULE_COMMUTATIVE,
		536 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_SMART_BRANCH,
		611 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_SMART_BRANCH,
		686 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_RETVAL,
		736 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_OP_DATA,
		861 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_OP_DATA,
		986 | SPEC_RULE_OP_DATA,
		991 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
		1016 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
		1041 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
		1066,
		1067 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
		1092 | SPEC_RULE_OP1,
		1097 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_OP_DATA,
		1222,
		1223 | SPEC_RULE_OP1 | SPEC_RULE_RETVAL,
		1233 | SPEC_RULE_OP1 | SPEC_RULE_RETVAL,
		1243 | SPEC_RULE_OP1,
		1248 | SPEC_RULE_OP1,
		1253,
		1253,
		1254,
		1254,
		1255,
		1256 | SPEC_RULE_OP1,
		1261 | SPEC_RULE_OP1,
		3493,
		1266 | SPEC_RULE_OP1,
		1271 | SPEC_RULE_OP1,
		1276 | SPEC_RULE_OP2,
		1281,
		1282 | SPEC_RULE_OP2 | SPEC_RULE_QUICK_ARG,
		1292 | SPEC_RULE_OP1,
		1297 | SPEC_RULE_OP1,
		1302 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
		1327 | SPEC_RULE_OP2,
		1332 | SPEC_RULE_OP2,
		1337 | SPEC_RULE_OP2,
		1342,
		1343,
		1344,
		1345 | SPEC_RULE_RETVAL | SPEC_RULE_OBSERVER,
		1349,
		1350 | SPEC_RULE_OP1 | SPEC_RULE_OBSERVER,
		1360,
		1361,
		1362 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
		1387 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_QUICK_ARG,
		1437 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
		1462 | SPEC_RULE_OP1,
		1467,
		1468,
		1469 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
		1494 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
		1519 | SPEC_RULE_OP1 | SPEC_RULE_OBSERVER,
		1529 | SPEC_RULE_OP1,
		1534 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
		1559 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
		1584 | SPEC_RULE_OP1,
		1589,
		3493,
		1590 | SPEC_RULE_OP1,
		1595 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
		1620 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
		1645 | SPEC_RULE_OP1,
		1650 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
		1675 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
		1700 | SPEC_RULE_OP1,
		1705 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
		1730 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
		1755 | SPEC_RULE_OP1,
		1760 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
		1785 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
		1810 | SPEC_RULE_OP1,
		1815 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
		1840 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
		1865 | SPEC_RULE_OP1,
		1870 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
		1895 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
		1920 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
		1945,
		1946 | SPEC_RULE_OP2 | SPEC_RULE_QUICK_ARG,
		1956,
		1957,
		1958,
		1959,
		1960,
		1961 | SPEC_RULE_OP2,
		1966,
		1967 | SPEC_RULE_OP1,
		1972 | SPEC_RULE_OP2,
		1977 | SPEC_RULE_OP1,
		1982 | SPEC_RULE_OP1 | SPEC_RULE_OBSERVER,
		1992 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
		2017 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
		2042 | SPEC_RULE_OP1,
		2047 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
		2072 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_QUICK_ARG,
		2122 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
		2147 | SPEC_RULE_OP2,
		2152,
		2153 | SPEC_RULE_OP1,
		2158 | SPEC_RULE_OP1,
		2163,
		2164 | SPEC_RULE_OP1,
		2169 | SPEC_RULE_OP1,
		2174 | SPEC_RULE_OP1,
		2179,
		2180,
		2181 | SPEC_RULE_OP2,
		2186 | SPEC_RULE_RETVAL | SPEC_RULE_OBSERVER,
		2190 | SPEC_RULE_RETVAL | SPEC_RULE_OBSERVER,
		2194 | SPEC_RULE_RETVAL | SPEC_RULE_OBSERVER,
		2198 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
		2198 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
		2223 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
		2223 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
		2248 | SPEC_RULE_OP1,
		2253,
		2254 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
		2279,
		2280 | SPEC_RULE_OP1,
		2285,
		2286,
		2287,
		2288,
		2289,
		2290,
		2291,
		2292 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
		2317,
		2318,
		2319,
		2320 | SPEC_RULE_OP1,
		2325,
		2326 | SPEC_RULE_ISSET,
		2328 | SPEC_RULE_OP2,
		2333,
		2334 | SPEC_RULE_OP1,
		2339 | SPEC_RULE_OBSERVER,
		2341,
		2342 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
		2367 | SPEC_RULE_OP1 | SPEC_RULE_OBSERVER,
		2377,
		2378,
		2379,
		2380,
		2381 | SPEC_RULE_OP1,
		2386,
		2387,
		2388 | SPEC_RULE_OP1,
		2393 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
		2418,
		2419 | SPEC_RULE_OP1,
		2424,
		2425,
		2426,
		2427,
		2428,
		2429,
		2430,
		2431,
		2432 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
		2457,
		2458,
		2459,
		2460 | SPEC_RULE_OP2,
		2465,
		2466 | SPEC_RULE_OP1,
		2471 | SPEC_RULE_OP1,
		2476 | SPEC_RULE_OP1,
		2481 | SPEC_RULE_OP1,
		2486 | SPEC_RULE_OP1,
		2491,
		2492 | SPEC_RULE_OP1,
		2497 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
		2522 | SPEC_RULE_OP1,
		2527 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
		2552 | SPEC_RULE_OP1,
		2557 | SPEC_RULE_OP1,
		2562,
		2563,
		2564,
		2565,
		2566,
		2567 | SPEC_RULE_OBSERVER,
		2569 | SPEC_RULE_OBSERVER,
		2571 | SPEC_RULE_OBSERVER,
		2573 | SPEC_RULE_OBSERVER,
		2575,
		2576,
		2577,
		3493,
		3493,
		3493,
		3493,
		3493,
		3493,
		3493,
		3493,
		3493,
		3493,
		3493,
		3493,
		3493,
		3493,
		3493,
		3493,
		3493,
		3493,
		3493,
		3493,
		3493,
		3493,
		3493,
		3493,
		3493,
		3493,
		3493,
		3493,
		3493,
		3493,
		3493,
		3493,
		3493,
		3493,
		3493,
		3493,
		3493,
		3493,
		3493,
		3493,
		3493,
		3493,
		3493,
		3493,
		3493,
	};
#if 0
#elif (ZEND_VM_KIND == ZEND_VM_KIND_HYBRID)
	zend_opcode_handler_funcs = funcs;
	zend_spec_handlers = specs;
	execute_ex(NULL);
#elif ZEND_VM_KIND == ZEND_VM_KIND_TAILCALL
	zend_opcode_handler_funcs = funcs;
	zend_opcode_handlers = handlers;
	zend_spec_handlers = specs;
#else
	zend_opcode_handlers = handlers;
	zend_spec_handlers = specs;
#endif
	VM_TRACE_START();
}

static HashTable *zend_handlers_table = NULL;

void zend_vm_dtor(void)
{
	VM_TRACE_END();
	if (zend_handlers_table) {
		zend_hash_destroy(zend_handlers_table);
		free(zend_handlers_table);
		zend_handlers_table = NULL;
	}
}

static void init_opcode_serialiser(void)
{
	int i;
	zval tmp;

	zend_handlers_table = malloc(sizeof(HashTable));
	zend_hash_init(zend_handlers_table, zend_handlers_count, NULL, NULL, 1);
	zend_hash_real_init(zend_handlers_table, 0);
	Z_TYPE_INFO(tmp) = IS_LONG;
	for (i = 0; i < zend_handlers_count; i++) {
		Z_LVAL(tmp) = i;
		zend_hash_index_add(zend_handlers_table, (zend_long)(uintptr_t)zend_opcode_handlers[i], &tmp);
	}
}

ZEND_API void ZEND_FASTCALL zend_serialize_opcode_handler(zend_op *op)
{
	zval *zv;

	if (!zend_handlers_table) {
		init_opcode_serialiser();
	}
	zv = zend_hash_index_find(zend_handlers_table, (zend_long)(uintptr_t)op->handler);
	ZEND_ASSERT(zv != NULL);
	op->handler = (zend_vm_opcode_handler_t)(uintptr_t)Z_LVAL_P(zv);
}

ZEND_API void ZEND_FASTCALL zend_deserialize_opcode_handler(zend_op *op)
{
	op->handler = zend_opcode_handlers[(uintptr_t)op->handler];
}

ZEND_API const void* ZEND_FASTCALL zend_get_opcode_handler_func(const zend_op *op)
{
#if ZEND_VM_KIND == ZEND_VM_KIND_HYBRID || ZEND_VM_KIND == ZEND_VM_KIND_TAILCALL
	zval *zv;

	if (!zend_handlers_table) {
		init_opcode_serialiser();
	}
	zv = zend_hash_index_find(zend_handlers_table, (zend_long)(uintptr_t)op->handler);
	ZEND_ASSERT(zv != NULL);
	return zend_opcode_handler_funcs[Z_LVAL_P(zv)];
#elif ZEND_VM_KIND == ZEND_VM_KIND_CALL
	return op->handler;
#else
	return NULL;
#endif
}

ZEND_API const zend_op *zend_get_halt_op(void)
{
#if ZEND_VM_KIND == ZEND_VM_KIND_HYBRID
	return &hybrid_halt_op;
#else
	return NULL;
#endif
}

ZEND_API int zend_vm_kind(void)
{
	return ZEND_VM_KIND;
}

static uint32_t ZEND_FASTCALL zend_vm_get_opcode_handler_idx(uint32_t spec, const zend_op* op)
{
	static const int zend_vm_decode[] = {
		_UNUSED_CODE, /* 0 = IS_UNUSED  */
		_CONST_CODE,  /* 1 = IS_CONST   */
		_TMP_CODE,    /* 2 = IS_TMP_VAR */
		_UNUSED_CODE, /* 3              */
		_VAR_CODE,    /* 4 = IS_VAR     */
		_UNUSED_CODE, /* 5              */
		_UNUSED_CODE, /* 6              */
		_UNUSED_CODE, /* 7              */
		_CV_CODE      /* 8 = IS_CV      */
	};
	uint32_t offset = 0;
	if (spec & SPEC_RULE_OP1) offset = offset * 5 + zend_vm_decode[op->op1_type];
	if (spec & SPEC_RULE_OP2) offset = offset * 5 + zend_vm_decode[op->op2_type];
	if (spec & SPEC_EXTRA_MASK) {
		if (spec & SPEC_RULE_RETVAL) {
			offset = offset * 2 + (op->result_type != IS_UNUSED);
			if ((spec & SPEC_RULE_OBSERVER) && ZEND_OBSERVER_ENABLED) {
				offset += 2;
			}
		} else if (spec & SPEC_RULE_QUICK_ARG) {
			offset = offset * 2 + (op->op2.num <= MAX_ARG_FLAG_NUM);
		} else if (spec & SPEC_RULE_OP_DATA) {
			offset = offset * 5 + zend_vm_decode[(op + 1)->op1_type];
		} else if (spec & SPEC_RULE_ISSET) {
			offset = offset * 2 + (op->extended_value & ZEND_ISEMPTY);
		} else if (spec & SPEC_RULE_SMART_BRANCH) {
			offset = offset * 3;
			if (op->result_type == (IS_SMART_BRANCH_JMPZ|IS_TMP_VAR)) {
				offset += 1;
			} else if (op->result_type == (IS_SMART_BRANCH_JMPNZ|IS_TMP_VAR)) {
				offset += 2;
			}
		} else if (spec & SPEC_RULE_OBSERVER) {
			offset = offset * 2;
			if (ZEND_OBSERVER_ENABLED) {
				offset += 1;
			}
		}
	}
	return (spec & SPEC_START_MASK) + offset;
}

#if (ZEND_VM_KIND != ZEND_VM_KIND_HYBRID && ZEND_VM_KIND != ZEND_VM_KIND_TAILCALL) || !ZEND_VM_SPEC
static zend_vm_opcode_handler_t zend_vm_get_opcode_handler(uint8_t opcode, const zend_op* op)
{
	return zend_opcode_handlers[zend_vm_get_opcode_handler_idx(zend_spec_handlers[opcode], op)];
}
#endif

#if ZEND_VM_KIND == ZEND_VM_KIND_HYBRID || ZEND_VM_KIND == ZEND_VM_KIND_TAILCALL
static zend_vm_opcode_handler_func_t zend_vm_get_opcode_handler_func(uint8_t opcode, const zend_op* op)
{
	uint32_t spec = zend_spec_handlers[opcode];
	return zend_opcode_handler_funcs[zend_vm_get_opcode_handler_idx(spec, op)];
}

#endif

ZEND_API void ZEND_FASTCALL zend_vm_set_opcode_handler(zend_op* op)
{
	uint8_t opcode = zend_user_opcodes[op->opcode];

	if (zend_spec_handlers[op->opcode] & SPEC_RULE_COMMUTATIVE) {
		if (op->op1_type < op->op2_type) {
			zend_swap_operands(op);
		}
	}
	op->handler = zend_opcode_handlers[zend_vm_get_opcode_handler_idx(zend_spec_handlers[opcode], op)];
}

ZEND_API void ZEND_FASTCALL zend_vm_set_opcode_handler_ex(zend_op* op, uint32_t op1_info, uint32_t op2_info, uint32_t res_info)
{
	uint8_t opcode = zend_user_opcodes[op->opcode];
	uint32_t spec = zend_spec_handlers[opcode];
	switch (opcode) {
		case ZEND_ADD:
			if (res_info == MAY_BE_LONG && op1_info == MAY_BE_LONG && op2_info == MAY_BE_LONG) {
				if (op->op1_type == IS_CONST && op->op2_type == IS_CONST) {
					break;
				}
				spec = 2586 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_COMMUTATIVE;
				if (op->op1_type < op->op2_type) {
					zend_swap_operands(op);
				}
			} else if (op1_info == MAY_BE_LONG && op2_info == MAY_BE_LONG) {
				if (op->op1_type == IS_CONST && op->op2_type == IS_CONST) {
					break;
				}
				spec = 2611 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_COMMUTATIVE;
				if (op->op1_type < op->op2_type) {
					zend_swap_operands(op);
				}
			} else if (op1_info == MAY_BE_DOUBLE && op2_info == MAY_BE_DOUBLE) {
				if (op->op1_type == IS_CONST && op->op2_type == IS_CONST) {
					break;
				}
				spec = 2636 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_COMMUTATIVE;
				if (op->op1_type < op->op2_type) {
					zend_swap_operands(op);
				}
			}
			break;
		case ZEND_SUB:
			if (res_info == MAY_BE_LONG && op1_info == MAY_BE_LONG && op2_info == MAY_BE_LONG) {
				if (op->op1_type == IS_CONST && op->op2_type == IS_CONST) {
					break;
				}
				spec = 2661 | SPEC_RULE_OP1 | SPEC_RULE_OP2;
			} else if (op1_info == MAY_BE_LONG && op2_info == MAY_BE_LONG) {
				if (op->op1_type == IS_CONST && op->op2_type == IS_CONST) {
					break;
				}
				spec = 2686 | SPEC_RULE_OP1 | SPEC_RULE_OP2;
			} else if (op1_info == MAY_BE_DOUBLE && op2_info == MAY_BE_DOUBLE) {
				if (op->op1_type == IS_CONST && op->op2_type == IS_CONST) {
					break;
				}
				spec = 2711 | SPEC_RULE_OP1 | SPEC_RULE_OP2;
			}
			break;
		case ZEND_MUL:
			if (op->op1_type < op->op2_type) {
				zend_swap_operands(op);
			}
			if (res_info == MAY_BE_LONG && op1_info == MAY_BE_LONG && op2_info == MAY_BE_LONG) {
				if (op->op1_type == IS_CONST && op->op2_type == IS_CONST) {
					break;
				}
				spec = 2736 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_COMMUTATIVE;
			} else if (op1_info == MAY_BE_LONG && op2_info == MAY_BE_LONG) {
				if (op->op1_type == IS_CONST && op->op2_type == IS_CONST) {
					break;
				}
				spec = 2761 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_COMMUTATIVE;
			} else if (op1_info == MAY_BE_DOUBLE && op2_info == MAY_BE_DOUBLE) {
				if (op->op1_type == IS_CONST && op->op2_type == IS_CONST) {
					break;
				}
				spec = 2786 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_COMMUTATIVE;
			}
			break;
		case ZEND_IS_IDENTICAL:
			if (op->op1_type < op->op2_type) {
				zend_swap_operands(op);
			}
			if (op1_info == MAY_BE_LONG && op2_info == MAY_BE_LONG) {
				if (op->op1_type == IS_CONST && op->op2_type == IS_CONST) {
					break;
				}
				spec = 2811 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_SMART_BRANCH | SPEC_RULE_COMMUTATIVE;
			} else if (op1_info == MAY_BE_DOUBLE && op2_info == MAY_BE_DOUBLE) {
				if (op->op1_type == IS_CONST && op->op2_type == IS_CONST) {
					break;
				}
				spec = 2886 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_SMART_BRANCH | SPEC_RULE_COMMUTATIVE;
			} else if (op->op2_type == IS_CONST && (Z_TYPE_P(RT_CONSTANT(op, op->op2)) == IS_ARRAY && zend_hash_num_elements(Z_ARR_P(RT_CONSTANT(op, op->op2))) == 0)) {
				spec = 3111 | SPEC_RULE_SMART_BRANCH | SPEC_RULE_COMMUTATIVE;
			} else if (op->op1_type == IS_CV && (op->op2_type & (IS_CONST|IS_CV)) && !(op1_info & (MAY_BE_UNDEF|MAY_BE_REF)) && !(op2_info & (MAY_BE_UNDEF|MAY_BE_REF))) {
				spec = 3117 | SPEC_RULE_OP2 | SPEC_RULE_COMMUTATIVE;
			}
			break;
		case ZEND_IS_NOT_IDENTICAL:
			if (op->op1_type < op->op2_type) {
				zend_swap_operands(op);
			}
			if (op1_info == MAY_BE_LONG && op2_info == MAY_BE_LONG) {
				if (op->op1_type == IS_CONST && op->op2_type == IS_CONST) {
					break;
				}
				spec = 2961 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_SMART_BRANCH | SPEC_RULE_COMMUTATIVE;
			} else if (op1_info == MAY_BE_DOUBLE && op2_info == MAY_BE_DOUBLE) {
				if (op->op1_type == IS_CONST && op->op2_type == IS_CONST) {
					break;
				}
				spec = 3036 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_SMART_BRANCH | SPEC_RULE_COMMUTATIVE;
			} else if (op->op2_type == IS_CONST && (Z_TYPE_P(RT_CONSTANT(op, op->op2)) == IS_ARRAY && zend_hash_num_elements(Z_ARR_P(RT_CONSTANT(op, op->op2))) == 0)) {
				spec = 3114 | SPEC_RULE_SMART_BRANCH | SPEC_RULE_COMMUTATIVE;
			} else if (op->op1_type == IS_CV && (op->op2_type & (IS_CONST|IS_CV)) && !(op1_info & (MAY_BE_UNDEF|MAY_BE_REF)) && !(op2_info & (MAY_BE_UNDEF|MAY_BE_REF))) {
				spec = 3122 | SPEC_RULE_OP2 | SPEC_RULE_COMMUTATIVE;
			}
			break;
		case ZEND_IS_EQUAL:
			if (op->op1_type < op->op2_type) {
				zend_swap_operands(op);
			}
			if (op1_info == MAY_BE_LONG && op2_info == MAY_BE_LONG) {
				if (op->op1_type == IS_CONST && op->op2_type == IS_CONST) {
					break;
				}
				spec = 2811 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_SMART_BRANCH | SPEC_RULE_COMMUTATIVE;
			} else if (op1_info == MAY_BE_DOUBLE && op2_info == MAY_BE_DOUBLE) {
				if (op->op1_type == IS_CONST && op->op2_type == IS_CONST) {
					break;
				}
				spec = 2886 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_SMART_BRANCH | SPEC_RULE_COMMUTATIVE;
			}
			break;
		case ZEND_IS_NOT_EQUAL:
			if (op->op1_type < op->op2_type) {
				zend_swap_operands(op);
			}
			if (op1_info == MAY_BE_LONG && op2_info == MAY_BE_LONG) {
				if (op->op1_type == IS_CONST && op->op2_type == IS_CONST) {
					break;
				}
				spec = 2961 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_SMART_BRANCH | SPEC_RULE_COMMUTATIVE;
			} else if (op1_info == MAY_BE_DOUBLE && op2_info == MAY_BE_DOUBLE) {
				if (op->op1_type == IS_CONST && op->op2_type == IS_CONST) {
					break;
				}
				spec = 3036 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_SMART_BRANCH | SPEC_RULE_COMMUTATIVE;
			}
			break;
		case ZEND_IS_SMALLER:
			if (op1_info == MAY_BE_LONG && op2_info == MAY_BE_LONG) {
				if (op->op1_type == IS_CONST && op->op2_type == IS_CONST) {
					break;
				}
				spec = 3127 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_SMART_BRANCH;
			} else if (op1_info == MAY_BE_DOUBLE && op2_info == MAY_BE_DOUBLE) {
				if (op->op1_type == IS_CONST && op->op2_type == IS_CONST) {
					break;
				}
				spec = 3202 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_SMART_BRANCH;
			}
			break;
		case ZEND_IS_SMALLER_OR_EQUAL:
			if (op1_info == MAY_BE_LONG && op2_info == MAY_BE_LONG) {
				if (op->op1_type == IS_CONST && op->op2_type == IS_CONST) {
					break;
				}
				spec = 3277 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_SMART_BRANCH;
			} else if (op1_info == MAY_BE_DOUBLE && op2_info == MAY_BE_DOUBLE) {
				if (op->op1_type == IS_CONST && op->op2_type == IS_CONST) {
					break;
				}
				spec = 3352 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_SMART_BRANCH;
			}
			break;
		case ZEND_QM_ASSIGN:
			if (op1_info == MAY_BE_LONG) {
				spec = 3439 | SPEC_RULE_OP1;
			} else if (op1_info == MAY_BE_DOUBLE) {
				spec = 3444 | SPEC_RULE_OP1;
			} else if ((op->op1_type == IS_CONST) ? !Z_REFCOUNTED_P(RT_CONSTANT(op, op->op1)) : (!(op1_info & ((MAY_BE_ANY|MAY_BE_UNDEF)-(MAY_BE_NULL|MAY_BE_FALSE|MAY_BE_TRUE|MAY_BE_LONG|MAY_BE_DOUBLE))))) {
				spec = 3449 | SPEC_RULE_OP1;
			}
			break;
		case ZEND_PRE_INC:
			if (res_info == MAY_BE_LONG && op1_info == MAY_BE_LONG) {
				spec = 3427 | SPEC_RULE_RETVAL;
			} else if (op1_info == MAY_BE_LONG) {
				spec = 3429 | SPEC_RULE_RETVAL;
			}
			break;
		case ZEND_PRE_DEC:
			if (res_info == MAY_BE_LONG && op1_info == MAY_BE_LONG) {
				spec = 3431 | SPEC_RULE_RETVAL;
			} else if (op1_info == MAY_BE_LONG) {
				spec = 3433 | SPEC_RULE_RETVAL;
			}
			break;
		case ZEND_POST_INC:
			if (res_info == MAY_BE_LONG && op1_info == MAY_BE_LONG) {
				spec = 3435;
			} else if (op1_info == MAY_BE_LONG) {
				spec = 3436;
			}
			break;
		case ZEND_POST_DEC:
			if (res_info == MAY_BE_LONG && op1_info == MAY_BE_LONG) {
				spec = 3437;
			} else if (op1_info == MAY_BE_LONG) {
				spec = 3438;
			}
			break;
		case ZEND_JMP:
			if (OP_JMP_ADDR(op, op->op1) > op) {
				spec = 2585;
			}
			break;
		case ZEND_INIT_FCALL:
			if (Z_EXTRA_P(RT_CONSTANT(op, op->op2)) != 0) {
				spec = 2578;
			}
			break;
		case ZEND_RECV:
			if (op->op2.num == MAY_BE_ANY) {
				spec = 2579;
			}
			break;
		case ZEND_SEND_VAL:
			if (op->op1_type == IS_CONST && op->op2_type == IS_UNUSED && !Z_REFCOUNTED_P(RT_CONSTANT(op, op->op1))) {
				spec = 3489;
			}
			break;
		case ZEND_SEND_VAR_EX:
			if (op->op2_type == IS_UNUSED && op->op2.num <= MAX_ARG_FLAG_NUM && (op1_info & (MAY_BE_UNDEF|MAY_BE_REF)) == 0) {
				spec = 3484 | SPEC_RULE_OP1;
			}
			break;
		case ZEND_FE_FETCH_R:
			if (op->op2_type == IS_CV && (op1_info & (MAY_BE_ANY|MAY_BE_REF)) == MAY_BE_ARRAY) {
				spec = 3491 | SPEC_RULE_RETVAL;
			}
			break;
		case ZEND_FETCH_DIM_R:
			if (!(op2_info & (MAY_BE_UNDEF|MAY_BE_NULL|MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE|MAY_BE_REF))) {
				if (op->op1_type == IS_CONST && op->op2_type == IS_CONST) {
					break;
				}
				spec = 3454 | SPEC_RULE_OP1 | SPEC_RULE_OP2;
			}
			break;
		case ZEND_SEND_VAL_EX:
			if (op->op2_type == IS_UNUSED && op->op2.num <= MAX_ARG_FLAG_NUM && op->op1_type == IS_CONST && !Z_REFCOUNTED_P(RT_CONSTANT(op, op->op1))) {
				spec = 3490;
			}
			break;
		case ZEND_SEND_VAR:
			if (op->op2_type == IS_UNUSED && (op1_info & (MAY_BE_UNDEF|MAY_BE_REF)) == 0) {
				spec = 3479 | SPEC_RULE_OP1;
			}
			break;
		case ZEND_COUNT:
			if ((op1_info & (MAY_BE_ANY|MAY_BE_UNDEF|MAY_BE_REF)) == MAY_BE_ARRAY) {
				spec = 2580 | SPEC_RULE_OP1;
			}
			break;
		case ZEND_BW_OR:
		case ZEND_BW_AND:
		case ZEND_BW_XOR:
		case ZEND_BOOL_XOR:
			if (op->op1_type < op->op2_type) {
				zend_swap_operands(op);
			}
			break;
		case ZEND_USER_OPCODE:
			if (zend_spec_handlers[op->opcode] & SPEC_RULE_COMMUTATIVE) {
				if (op->op1_type < op->op2_type) {
					zend_swap_operands(op);
				}
			}
			break;
		default:
			break;
	}
	op->handler = zend_opcode_handlers[zend_vm_get_opcode_handler_idx(spec, op)];
}

ZEND_API int ZEND_FASTCALL zend_vm_call_opcode_handler(zend_execute_data* ex)
{
#if (ZEND_VM_KIND == ZEND_VM_KIND_HYBRID || ZEND_VM_KIND == ZEND_VM_KIND_TAILCALL)
	zend_vm_opcode_handler_func_t handler;
#endif
	DCL_OPLINE;
	int ret;
#ifdef ZEND_VM_IP_GLOBAL_REG
	const zend_op *orig_opline = opline;
#endif
#ifdef ZEND_VM_FP_GLOBAL_REG
	zend_execute_data *orig_execute_data = execute_data;
	execute_data = ex;
#else
	zend_execute_data *execute_data = ex;
#endif

	LOAD_OPLINE();
#if defined(ZEND_VM_FP_GLOBAL_REG) && defined(ZEND_VM_IP_GLOBAL_REG)
#if (ZEND_VM_KIND == ZEND_VM_KIND_HYBRID)
	handler = zend_vm_get_opcode_handler_func(zend_user_opcodes[opline->opcode], opline);
	handler(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
	if (EXPECTED(opline != &hybrid_halt_op)) {
#else
	(OPLINE->handler)(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
	if (EXPECTED(opline)) {
#endif
		ret = execute_data != ex ? (int)(execute_data->prev_execute_data != ex) + 1 : 0;
		SAVE_OPLINE();
	} else {
		ret = -1;
	}
#else
# if ZEND_VM_KIND == ZEND_VM_KIND_TAILCALL
	handler = zend_vm_get_opcode_handler_func(zend_user_opcodes[opline->opcode], opline);
	opline = handler(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
# else
	opline = (OPLINE->handler)(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
# endif
	if (UNEXPECTED(((uintptr_t)opline & ZEND_VM_ENTER_BIT))) {
		opline = (const zend_op*)((uintptr_t)opline & ~ZEND_VM_ENTER_BIT);
		if (EXPECTED(opline)) {
			/* ZEND_VM_ENTER() or ZEND_VM_LEAVE() */
			ret = EG(current_execute_data) != ex ? (int)(EG(current_execute_data)->prev_execute_data != ex) + 1 : 0;
			execute_data = EG(current_execute_data);
			SAVE_OPLINE();
		} else {
			/* ZEND_VM_RETURN() */
			ret = -1;
		}
	} else {
		/* ZEND_VM_CONTINUE() */
		SAVE_OPLINE();
		ret = 0;
	}
#endif
#ifdef ZEND_VM_FP_GLOBAL_REG
	execute_data = orig_execute_data;
#endif
#ifdef ZEND_VM_IP_GLOBAL_REG
	opline = orig_opline;
#endif
	return ret;
}

Zend/zend_strtod.h000064400000004450151730543310010161 0ustar00/*
   +----------------------------------------------------------------------+
   | Zend Engine                                                          |
   +----------------------------------------------------------------------+
   | Copyright (c) Zend Technologies Ltd. (http://www.zend.com)           |
   +----------------------------------------------------------------------+
   | This source file is subject to version 2.00 of the Zend license,     |
   | that is bundled with this package in the file LICENSE, and is        |
   | available through the world-wide-web at the following url:           |
   | http://www.zend.com/license/2_00.txt.                                |
   | If you did not receive a copy of the Zend license and are unable to  |
   | obtain it through the world-wide-web, please send a note to          |
   | license@zend.com so we can mail you a copy immediately.              |
   +----------------------------------------------------------------------+
   | Authors: Derick Rethans <derick@php.net>                             |
   +----------------------------------------------------------------------+
*/

/* This is a header file for the strtod implementation by David M. Gay which
 * can be found in zend_strtod.c */
#ifndef ZEND_STRTOD_H
#define ZEND_STRTOD_H
#include <zend.h>

BEGIN_EXTERN_C()
#define ZEND_STRTOD_K_MAX 7
typedef struct _zend_strtod_bigint zend_strtod_bigint;
typedef struct _zend_strtod_state {
	zend_strtod_bigint *freelist[ZEND_STRTOD_K_MAX+1];
	zend_strtod_bigint *p5s;
	char *result;
} zend_strtod_state;
ZEND_API void zend_freedtoa(char *s);
ZEND_API char *zend_dtoa(double _d, int mode, int ndigits, int *decpt, bool *sign, char **rve);
ZEND_API char *zend_gcvt(double value, int ndigit, char dec_point, char exponent, char *buf);
ZEND_API double zend_strtod(const char *s00, const char **se);
ZEND_API double zend_hex_strtod(const char *str, const char **endptr);
ZEND_API double zend_oct_strtod(const char *str, const char **endptr);
ZEND_API double zend_bin_strtod(const char *str, const char **endptr);
ZEND_API int zend_shutdown_strtod(void);
END_EXTERN_C()

/* double limits */
#include <float.h>
#if defined(DBL_MANT_DIG) && defined(DBL_MIN_EXP)
#define ZEND_DOUBLE_MAX_LENGTH (3 + DBL_MANT_DIG - DBL_MIN_EXP)
#else
#define ZEND_DOUBLE_MAX_LENGTH 1080
#endif

#endif
Zend/zend_hrtime.h000064400000010227151730543310010131 0ustar00/*
   +----------------------------------------------------------------------+
   | Copyright (c) The PHP Group                                          |
   +----------------------------------------------------------------------+
   | This source file is subject to version 3.01 of the PHP license,      |
   | that is bundled with this package in the file LICENSE, and is        |
   | available through the world-wide-web at the following url:           |
   | https://www.php.net/license/3_01.txt                                 |
   | If you did not receive a copy of the PHP license and are unable to   |
   | obtain it through the world-wide-web, please send a note to          |
   | license@php.net so we can mail you a copy immediately.               |
   +----------------------------------------------------------------------+
   | Author: Niklas Keller <kelunik@php.net>                              |
   | Author: Anatol Belski <ab@php.net>                                   |
   +----------------------------------------------------------------------+
*/

#ifndef ZEND_HRTIME_H
#define ZEND_HRTIME_H

#include "zend_portability.h"
#include "zend_types.h"

#ifdef HAVE_UNISTD_H
# include <unistd.h>
#endif
#ifndef PHP_WIN32
# include <time.h>
#endif

/* This file reuses code parts from the cross-platform timer library
	Public Domain - 2011 Mattias Jansson / Rampant Pixels */

#define ZEND_HRTIME_PLATFORM_POSIX   0
#define ZEND_HRTIME_PLATFORM_WINDOWS 0
#define ZEND_HRTIME_PLATFORM_APPLE_MACH_ABSOLUTE 0
#define ZEND_HRTIME_PLATFORM_APPLE_GETTIME_NSEC 0
#define ZEND_HRTIME_PLATFORM_HPUX    0
#define ZEND_HRTIME_PLATFORM_AIX     0

#if defined(_POSIX_TIMERS) && ((_POSIX_TIMERS > 0) || defined(__OpenBSD__)) && defined(_POSIX_MONOTONIC_CLOCK) && defined(CLOCK_MONOTONIC)
# undef  ZEND_HRTIME_PLATFORM_POSIX
# define ZEND_HRTIME_PLATFORM_POSIX 1
#elif defined(_WIN32) || defined(_WIN64)
# undef  ZEND_HRTIME_PLATFORM_WINDOWS
# define ZEND_HRTIME_PLATFORM_WINDOWS 1
#elif HAVE_CLOCK_GETTIME_NSEC_NP
# undef  ZEND_HRTIME_PLATFORM_APPLE_GETTIME_NSEC
# define ZEND_HRTIME_PLATFORM_APPLE_GETTIME_NSEC 1
#elif defined(__APPLE__)
# undef  ZEND_HRTIME_PLATFORM_APPLE_MACH_ABSOLUTE
# define ZEND_HRTIME_PLATFORM_APPLE_MACH_ABSOLUTE 1
#elif (defined(__hpux) || defined(hpux)) || ((defined(__sun__) || defined(__sun) || defined(sun)) && (defined(__SVR4) || defined(__svr4__)))
# undef  ZEND_HRTIME_PLATFORM_HPUX
# define ZEND_HRTIME_PLATFORM_HPUX 1
#elif defined(_AIX)
# undef  ZEND_HRTIME_PLATFORM_AIX
# define ZEND_HRTIME_PLATFORM_AIX 1
#endif

#define ZEND_HRTIME_AVAILABLE (ZEND_HRTIME_PLATFORM_POSIX || ZEND_HRTIME_PLATFORM_WINDOWS || ZEND_HRTIME_PLATFORM_APPLE_MACH_ABSOLUTE || ZEND_HRTIME_PLATFORM_APPLE_GETTIME_NSEC || ZEND_HRTIME_PLATFORM_HPUX || ZEND_HRTIME_PLATFORM_AIX)

BEGIN_EXTERN_C()

#if ZEND_HRTIME_PLATFORM_WINDOWS

ZEND_API extern double zend_hrtime_timer_scale;

#elif ZEND_HRTIME_PLATFORM_APPLE_MACH_ABSOLUTE

# include <mach/mach_time.h>
# include <string.h>
ZEND_API extern mach_timebase_info_data_t zend_hrtime_timerlib_info;

#endif

#define ZEND_NANO_IN_SEC UINT64_C(1000000000)

typedef uint64_t zend_hrtime_t;

void zend_startup_hrtime(void);

static zend_always_inline zend_hrtime_t zend_hrtime(void)
{
#if ZEND_HRTIME_PLATFORM_WINDOWS
	LARGE_INTEGER lt = {{0}};
	QueryPerformanceCounter(&lt);
	return (zend_hrtime_t)((zend_hrtime_t)lt.QuadPart * zend_hrtime_timer_scale);
#elif ZEND_HRTIME_PLATFORM_APPLE_GETTIME_NSEC
	return clock_gettime_nsec_np(CLOCK_UPTIME_RAW);
#elif ZEND_HRTIME_PLATFORM_APPLE_MACH_ABSOLUTE
	return (zend_hrtime_t)mach_absolute_time() * zend_hrtime_timerlib_info.numer / zend_hrtime_timerlib_info.denom;
#elif ZEND_HRTIME_PLATFORM_POSIX
	struct timespec ts = { .tv_sec = 0, .tv_nsec = 0 };
	if (EXPECTED(0 == clock_gettime(CLOCK_MONOTONIC, &ts))) {
		return ((zend_hrtime_t) ts.tv_sec * (zend_hrtime_t)ZEND_NANO_IN_SEC) + ts.tv_nsec;
	}
	return 0;
#elif ZEND_HRTIME_PLATFORM_HPUX
	return (zend_hrtime_t) gethrtime();
#elif  ZEND_HRTIME_PLATFORM_AIX
	timebasestruct_t t;
	read_wall_time(&t, TIMEBASE_SZ);
	time_base_to_time(&t, TIMEBASE_SZ);
	return (zend_hrtime_t) t.tb_high * (zend_hrtime_t)NANO_IN_SEC + t.tb_low;
#else
	return 0;
#endif
}

END_EXTERN_C()

#endif /* ZEND_HRTIME_H */
Zend/zend_constants.h000064400000016223151730543310010657 0ustar00/*
   +----------------------------------------------------------------------+
   | Zend Engine                                                          |
   +----------------------------------------------------------------------+
   | Copyright (c) Zend Technologies Ltd. (http://www.zend.com)           |
   +----------------------------------------------------------------------+
   | This source file is subject to version 2.00 of the Zend license,     |
   | that is bundled with this package in the file LICENSE, and is        |
   | available through the world-wide-web at the following url:           |
   | http://www.zend.com/license/2_00.txt.                                |
   | If you did not receive a copy of the Zend license and are unable to  |
   | obtain it through the world-wide-web, please send a note to          |
   | license@zend.com so we can mail you a copy immediately.              |
   +----------------------------------------------------------------------+
   | Authors: Andi Gutmans <andi@php.net>                                 |
   |          Zeev Suraski <zeev@php.net>                                 |
   +----------------------------------------------------------------------+
*/

#ifndef ZEND_CONSTANTS_H
#define ZEND_CONSTANTS_H

#include "zend_globals.h"

#define CONST_CS				0					/* No longer used -- always case sensitive */
#define CONST_PERSISTENT		(1<<0)				/* Persistent */
#define CONST_NO_FILE_CACHE		(1<<1)				/* Can't be saved in file cache */
#define CONST_DEPRECATED		(1<<2)				/* Deprecated */
#define CONST_OWNED				(1<<3)				/* constant should be destroyed together with class */
#define CONST_RECURSIVE			(1<<4)				/* Recursion protection for constant evaluation */

#define CONST_IS_RECURSIVE(c) (Z_CONSTANT_FLAGS((c)->value) & CONST_RECURSIVE)
#define CONST_PROTECT_RECURSION(c) \
	do { \
		Z_CONSTANT_FLAGS((c)->value) |= CONST_RECURSIVE; \
	} while (0)
#define CONST_UNPROTECT_RECURSION(c) \
	do { \
		Z_CONSTANT_FLAGS((c)->value) &= ~CONST_RECURSIVE; \
	} while (0)

#define	PHP_USER_CONSTANT   0x7fffff /* a constant defined in user space */

typedef struct _zend_constant {
	zval value;
	zend_string *name;
	zend_string *filename;
	HashTable *attributes;
} zend_constant;

#define ZEND_CONSTANT_FLAGS(c) \
	(Z_CONSTANT_FLAGS((c)->value) & 0xff)

#define ZEND_CONSTANT_MODULE_NUMBER(c) \
	(Z_CONSTANT_FLAGS((c)->value) >> 8)

#define ZEND_CONSTANT_SET_FLAGS(c, _flags, _module_number) do { \
		Z_CONSTANT_FLAGS((c)->value) = \
			((_flags) & 0xff) | ((_module_number) << 8); \
	} while (0)

#define REGISTER_NULL_CONSTANT(name, flags)  zend_register_null_constant((name), sizeof(name)-1, (flags), module_number)
#define REGISTER_BOOL_CONSTANT(name, bval, flags)  zend_register_bool_constant((name), sizeof(name)-1, (bval), (flags), module_number)
#define REGISTER_LONG_CONSTANT(name, lval, flags)  zend_register_long_constant((name), sizeof(name)-1, (lval), (flags), module_number)
#define REGISTER_DOUBLE_CONSTANT(name, dval, flags)  zend_register_double_constant((name), sizeof(name)-1, (dval), (flags), module_number)
#define REGISTER_STRING_CONSTANT(name, str, flags)  zend_register_string_constant((name), sizeof(name)-1, (str), (flags), module_number)
#define REGISTER_STRINGL_CONSTANT(name, str, len, flags)  zend_register_stringl_constant((name), sizeof(name)-1, (str), (len), (flags), module_number)

#define REGISTER_NS_NULL_CONSTANT(ns, name, flags)  zend_register_null_constant(ZEND_NS_NAME(ns, name), sizeof(ZEND_NS_NAME(ns, name))-1, (flags), module_number)
#define REGISTER_NS_BOOL_CONSTANT(ns, name, bval, flags)  zend_register_bool_constant(ZEND_NS_NAME(ns, name), sizeof(ZEND_NS_NAME(ns, name))-1, (bval), (flags), module_number)
#define REGISTER_NS_LONG_CONSTANT(ns, name, lval, flags)  zend_register_long_constant(ZEND_NS_NAME(ns, name), sizeof(ZEND_NS_NAME(ns, name))-1, (lval), (flags), module_number)
#define REGISTER_NS_DOUBLE_CONSTANT(ns, name, dval, flags)  zend_register_double_constant(ZEND_NS_NAME(ns, name), sizeof(ZEND_NS_NAME(ns, name))-1, (dval), (flags), module_number)
#define REGISTER_NS_STRING_CONSTANT(ns, name, str, flags)  zend_register_string_constant(ZEND_NS_NAME(ns, name), sizeof(ZEND_NS_NAME(ns, name))-1, (str), (flags), module_number)
#define REGISTER_NS_STRINGL_CONSTANT(ns, name, str, len, flags)  zend_register_stringl_constant(ZEND_NS_NAME(ns, name), sizeof(ZEND_NS_NAME(ns, name))-1, (str), (len), (flags), module_number)

#define REGISTER_MAIN_NULL_CONSTANT(name, flags)  zend_register_null_constant((name), sizeof(name)-1, (flags), 0)
#define REGISTER_MAIN_BOOL_CONSTANT(name, bval, flags)  zend_register_bool_constant((name), sizeof(name)-1, (bval), (flags), 0)
#define REGISTER_MAIN_LONG_CONSTANT(name, lval, flags)  zend_register_long_constant((name), sizeof(name)-1, (lval), (flags), 0)
#define REGISTER_MAIN_DOUBLE_CONSTANT(name, dval, flags)  zend_register_double_constant((name), sizeof(name)-1, (dval), (flags), 0)
#define REGISTER_MAIN_STRING_CONSTANT(name, str, flags)  zend_register_string_constant((name), sizeof(name)-1, (str), (flags), 0)
#define REGISTER_MAIN_STRINGL_CONSTANT(name, str, len, flags)  zend_register_stringl_constant((name), sizeof(name)-1, (str), (len), (flags), 0)

BEGIN_EXTERN_C()
void clean_module_constants(int module_number);
void free_zend_constant(zval *zv);
void zend_startup_constants(void);
void zend_register_standard_constants(void);
ZEND_API bool zend_verify_const_access(zend_class_constant *c, zend_class_entry *ce);
ZEND_API zval *zend_get_constant(zend_string *name);
ZEND_API zend_constant *zend_get_constant_ptr(zend_string *name);
ZEND_API zval *zend_get_constant_str(const char *name, size_t name_len);
ZEND_API zval *zend_get_constant_ex(zend_string *name, zend_class_entry *scope, uint32_t flags);
ZEND_API zval *zend_get_class_constant_ex(zend_string *class_name, zend_string *constant_name, zend_class_entry *scope, uint32_t flags);
ZEND_API zend_constant *zend_register_bool_constant(const char *name, size_t name_len, bool bval, int flags, int module_number);
ZEND_API zend_constant *zend_register_null_constant(const char *name, size_t name_len, int flags, int module_number);
ZEND_API zend_constant *zend_register_long_constant(const char *name, size_t name_len, zend_long lval, int flags, int module_number);
ZEND_API zend_constant *zend_register_double_constant(const char *name, size_t name_len, double dval, int flags, int module_number);
ZEND_API zend_constant *zend_register_string_constant(const char *name, size_t name_len, const char *strval, int flags, int module_number);
ZEND_API zend_constant *zend_register_stringl_constant(const char *name, size_t name_len, const char *strval, size_t strlen, int flags, int module_number);
ZEND_API zend_constant *zend_register_constant(zend_constant *c);
void zend_constant_add_attributes(zend_constant *c, HashTable *attributes);
#ifdef ZTS
void zend_copy_constants(HashTable *target, HashTable *source);
#endif

ZEND_API zend_constant *_zend_get_special_const(const char *name, size_t name_len);

static zend_always_inline zend_constant *zend_get_special_const(
		const char *name, size_t name_len) {
	if (name_len == 4 || name_len == 5) {
		return _zend_get_special_const(name, name_len);
	}
	return NULL;
}

END_EXTERN_C()

#define ZEND_CONSTANT_DTOR free_zend_constant

#endif
Zend/zend_map_ptr.h000064400000006763151730543310010315 0ustar00/*
   +----------------------------------------------------------------------+
   | Zend Engine                                                          |
   +----------------------------------------------------------------------+
   | Copyright (c) Zend Technologies Ltd. (http://www.zend.com)           |
   +----------------------------------------------------------------------+
   | This source file is subject to version 2.00 of the Zend license,     |
   | that is bundled with this package in the file LICENSE, and is        |
   | available through the world-wide-web at the following url:           |
   | http://www.zend.com/license/2_00.txt.                                |
   | If you did not receive a copy of the Zend license and are unable to  |
   | obtain it through the world-wide-web, please send a note to          |
   | license@zend.com so we can mail you a copy immediately.              |
   +----------------------------------------------------------------------+
   | Authors: Dmitry Stogov <dmitry@php.net>                              |
   +----------------------------------------------------------------------+
*/

#ifndef ZEND_MAP_PTR_H
#define ZEND_MAP_PTR_H

#include "zend_portability.h"

typedef struct _zend_string zend_string;

#define ZEND_MAP_PTR_KIND_PTR           0
#define ZEND_MAP_PTR_KIND_PTR_OR_OFFSET 1

#define ZEND_MAP_PTR_KIND ZEND_MAP_PTR_KIND_PTR_OR_OFFSET

#define ZEND_MAP_PTR(ptr) \
	ptr ## __ptr
#define ZEND_MAP_PTR_DEF(type, name) \
	type ZEND_MAP_PTR(name)
#define ZEND_MAP_PTR_OFFSET2PTR(offset) \
	((void**)((char*)CG(map_ptr_base) + offset))
#define ZEND_MAP_PTR_PTR2OFFSET(ptr) \
	((void*)(((char*)(ptr)) - ((char*)CG(map_ptr_base))))
#define ZEND_MAP_PTR_INIT(ptr, val) do { \
		ZEND_MAP_PTR(ptr) = (val); \
	} while (0)
#define ZEND_MAP_PTR_NEW(ptr) do { \
		ZEND_MAP_PTR(ptr) = zend_map_ptr_new(); \
	} while (0)
#define ZEND_MAP_PTR_NEW_STATIC(ptr) do { \
		ZEND_MAP_PTR(ptr) = zend_map_ptr_new_static(); \
	} while (0)

#if ZEND_MAP_PTR_KIND == ZEND_MAP_PTR_KIND_PTR_OR_OFFSET
# define ZEND_MAP_PTR_NEW_OFFSET() \
	((uint32_t)(uintptr_t)zend_map_ptr_new())
# define ZEND_MAP_PTR_IS_OFFSET(ptr) \
	(((uintptr_t)ZEND_MAP_PTR(ptr)) & 1L)
# define ZEND_MAP_PTR_GET(ptr) \
	((ZEND_MAP_PTR_IS_OFFSET(ptr) ? \
		ZEND_MAP_PTR_GET_IMM(ptr) : \
		((void*)(ZEND_MAP_PTR(ptr)))))
# define ZEND_MAP_PTR_GET_IMM(ptr) \
	(*ZEND_MAP_PTR_OFFSET2PTR((intptr_t)ZEND_MAP_PTR(ptr)))
# define ZEND_MAP_PTR_SET(ptr, val) do { \
		if (ZEND_MAP_PTR_IS_OFFSET(ptr)) { \
			ZEND_MAP_PTR_SET_IMM(ptr, val); \
		} else { \
			ZEND_MAP_PTR_INIT(ptr, val); \
		} \
	} while (0)
# define ZEND_MAP_PTR_SET_IMM(ptr, val) do { \
		void **__p = ZEND_MAP_PTR_OFFSET2PTR((intptr_t)ZEND_MAP_PTR(ptr)); \
		*__p = (val); \
	} while (0)
# define ZEND_MAP_PTR_BIASED_BASE(real_base) \
	((void*)(((uintptr_t)(real_base)) + zend_map_ptr_static_size * sizeof(void *) - 1))
/* Note: chunked like: [8192..12287][4096..8191][0..4095] */
#define ZEND_MAP_PTR_STATIC_NUM_TO_PTR(num) \
	((void **)CG(map_ptr_real_base) + zend_map_ptr_static_size - ZEND_MM_ALIGNED_SIZE_EX((num) + 1, 4096) + ((num) & 4095))
#else
# error "Unknown ZEND_MAP_PTR_KIND"
#endif

BEGIN_EXTERN_C()

ZEND_API void  zend_map_ptr_reset(void);
ZEND_API void *zend_map_ptr_new(void);
ZEND_API void *zend_map_ptr_new_static(void);
ZEND_API void  zend_map_ptr_extend(size_t last);
ZEND_API void zend_alloc_ce_cache(zend_string *type_name);

ZEND_API extern size_t zend_map_ptr_static_last;
ZEND_API extern size_t zend_map_ptr_static_size;

END_EXTERN_C()

#endif /* ZEND_MAP_PTR_H */
Zend/zend_vm_trace_handlers.h000064400000006220151730543320012320 0ustar00/*
   +----------------------------------------------------------------------+
   | Zend Engine                                                          |
   +----------------------------------------------------------------------+
   | Copyright (c) Zend Technologies Ltd. (http://www.zend.com)           |
   +----------------------------------------------------------------------+
   | This source file is subject to version 2.00 of the Zend license,     |
   | that is bundled with this package in the file LICENSE, and is        |
   | available through the world-wide-web at the following url:           |
   | http://www.zend.com/license/2_00.txt.                                |
   | If you did not receive a copy of the Zend license and are unable to  |
   | obtain it through the world-wide-web, please send a note to          |
   | license@zend.com so we can mail you a copy immediately.              |
   +----------------------------------------------------------------------+
   | Authors: Dmitry Stogov <dmitry@php.net>                              |
   +----------------------------------------------------------------------+
*/

#include "zend_sort.h"

#define VM_TRACE(op)     zend_vm_trace(#op, sizeof(#op)-1);
#define VM_TRACE_START() zend_vm_trace_init();
#define VM_TRACE_END()   zend_vm_trace_finish();

static HashTable vm_trace_ht;

static void zend_vm_trace(const char *op, size_t op_len)
{
	static const char *last = NULL;
	static size_t last_len = 0;
	char buf[256];
	size_t len;
	zval tmp, *zv;

	if (EXPECTED(last)) {
		len = last_len + 1 + op_len;
		memcpy(buf, last, last_len);
		buf[last_len] = ' ';
		memcpy(buf + last_len + 1, op, op_len + 1);
		zv = zend_hash_str_find(&vm_trace_ht, buf, len);
		if (EXPECTED(zv)) {
			if (EXPECTED(Z_LVAL_P(zv) < ZEND_LONG_MAX)) {
				Z_LVAL_P(zv)++;
			}
		} else {
			ZVAL_LONG(&tmp, 1);
			zend_hash_str_add_new(&vm_trace_ht, buf, len, &tmp);
		}
	}
	last = op;
	last_len = op_len;
}

static int zend_vm_trace_compare(const Bucket *p1, const Bucket *p2)
{
	if (Z_LVAL(p1->val) < Z_LVAL(p2->val)) {
		return 1;
	} else if (Z_LVAL(p1->val) > Z_LVAL(p2->val)) {
		return -1;
	} else {
		return 0;
	}
}

static void zend_vm_trace_finish(void)
{
	zend_string *key;
	zval *val;
	FILE *f;

	f = fopen("zend_vm_trace.log", "w+");
	if (f) {
		zend_hash_sort(&vm_trace_ht, (compare_func_t)zend_vm_trace_compare, 0);
		ZEND_HASH_MAP_FOREACH_STR_KEY_VAL(&vm_trace_ht, key, val) {
			fprintf(f, "%s "ZEND_LONG_FMT"\n", ZSTR_VAL(key), Z_LVAL_P(val));
		} ZEND_HASH_FOREACH_END();
		fclose(f);
	}
	zend_hash_destroy(&vm_trace_ht);
}

static void zend_vm_trace_init(void)
{
	FILE *f;

	zend_hash_init(&vm_trace_ht, 0, NULL, NULL, 1);
	f = fopen("zend_vm_trace.log", "r");
	if (f) {
		char buf[256];
		size_t len;
		zval tmp;

		while (!feof(f)) {
			if (fgets(buf, sizeof(buf)-1, f)) {
				len = strlen(buf);
				while (len > 0 && buf[len-1] <= ' ') {
					len--;
					buf[len] = 0;
				}
				while (len > 0 && buf[len-1] >= '0' && buf[len-1] <= '9') {
					len--;
				}
				if (len > 1) {
					buf[len-1] = 0;
					ZVAL_LONG(&tmp, ZEND_STRTOL(buf + len, NULL, 10));
					zend_hash_str_add(&vm_trace_ht, buf, len - 1, &tmp);
				}
			}
		}
		fclose(f);
	}
}
Zend/zend_ptr_stack.h000064400000010341151730543320010631 0ustar00/*
   +----------------------------------------------------------------------+
   | Zend Engine                                                          |
   +----------------------------------------------------------------------+
   | Copyright (c) Zend Technologies Ltd. (http://www.zend.com)           |
   +----------------------------------------------------------------------+
   | This source file is subject to version 2.00 of the Zend license,     |
   | that is bundled with this package in the file LICENSE, and is        |
   | available through the world-wide-web at the following url:           |
   | http://www.zend.com/license/2_00.txt.                                |
   | If you did not receive a copy of the Zend license and are unable to  |
   | obtain it through the world-wide-web, please send a note to          |
   | license@zend.com so we can mail you a copy immediately.              |
   +----------------------------------------------------------------------+
   | Authors: Andi Gutmans <andi@php.net>                                 |
   |          Zeev Suraski <zeev@php.net>                                 |
   +----------------------------------------------------------------------+
*/

#ifndef ZEND_PTR_STACK_H
#define ZEND_PTR_STACK_H

#include "zend_alloc.h"

typedef struct _zend_ptr_stack {
	int top, max;
	void **elements;
	void **top_element;
	bool persistent;
} zend_ptr_stack;


#define PTR_STACK_BLOCK_SIZE 64

BEGIN_EXTERN_C()
ZEND_API void zend_ptr_stack_init(zend_ptr_stack *stack);
ZEND_API void zend_ptr_stack_init_ex(zend_ptr_stack *stack, bool persistent);
ZEND_API void zend_ptr_stack_n_push(zend_ptr_stack *stack, int count, ...);
ZEND_API void zend_ptr_stack_n_pop(zend_ptr_stack *stack, int count, ...);
ZEND_API void zend_ptr_stack_destroy(zend_ptr_stack *stack);
ZEND_API void zend_ptr_stack_apply(zend_ptr_stack *stack, void (*func)(void *));
ZEND_API void zend_ptr_stack_reverse_apply(zend_ptr_stack *stack, void (*func)(void *));
ZEND_API void zend_ptr_stack_clean(zend_ptr_stack *stack, void (*func)(void *), bool free_elements);
ZEND_API int zend_ptr_stack_num_elements(zend_ptr_stack *stack);
END_EXTERN_C()

#define ZEND_PTR_STACK_RESIZE_IF_NEEDED(stack, count)		\
	if (stack->top+count > stack->max) {					\
		/* we need to allocate more memory */				\
		do {												\
			stack->max += PTR_STACK_BLOCK_SIZE;				\
		} while (stack->top+count > stack->max);			\
		stack->elements = (void **) safe_perealloc(stack->elements, sizeof(void *), (stack->max), 0, stack->persistent);	\
		stack->top_element = stack->elements+stack->top;	\
	}

/*	Not doing this with a macro because of the loop unrolling in the element assignment.
	Just using a macro for 3 in the body for readability sake. */
static zend_always_inline void zend_ptr_stack_3_push(zend_ptr_stack *stack, void *a, void *b, void *c)
{
#define ZEND_PTR_STACK_NUM_ARGS 3

	ZEND_PTR_STACK_RESIZE_IF_NEEDED(stack, ZEND_PTR_STACK_NUM_ARGS)

	stack->top += ZEND_PTR_STACK_NUM_ARGS;
	*(stack->top_element++) = a;
	*(stack->top_element++) = b;
	*(stack->top_element++) = c;

#undef ZEND_PTR_STACK_NUM_ARGS
}

static zend_always_inline void zend_ptr_stack_2_push(zend_ptr_stack *stack, void *a, void *b)
{
#define ZEND_PTR_STACK_NUM_ARGS 2

	ZEND_PTR_STACK_RESIZE_IF_NEEDED(stack, ZEND_PTR_STACK_NUM_ARGS)

	stack->top += ZEND_PTR_STACK_NUM_ARGS;
	*(stack->top_element++) = a;
	*(stack->top_element++) = b;

#undef ZEND_PTR_STACK_NUM_ARGS
}

static zend_always_inline void zend_ptr_stack_3_pop(zend_ptr_stack *stack, void **a, void **b, void **c)
{
	*a = *(--stack->top_element);
	*b = *(--stack->top_element);
	*c = *(--stack->top_element);
	stack->top -= 3;
}

static zend_always_inline void zend_ptr_stack_2_pop(zend_ptr_stack *stack, void **a, void **b)
{
	*a = *(--stack->top_element);
	*b = *(--stack->top_element);
	stack->top -= 2;
}

static zend_always_inline void zend_ptr_stack_push(zend_ptr_stack *stack, void *ptr)
{
	ZEND_PTR_STACK_RESIZE_IF_NEEDED(stack, 1)

	stack->top++;
	*(stack->top_element++) = ptr;
}

static zend_always_inline void *zend_ptr_stack_pop(zend_ptr_stack *stack)
{
	stack->top--;
	return *(--stack->top_element);
}

static zend_always_inline void *zend_ptr_stack_top(zend_ptr_stack *stack)
{
    return stack->elements[stack->top - 1];
}

#endif /* ZEND_PTR_STACK_H */
Zend/zend_vm_trace_lines.h000064400000003333151730543320011634 0ustar00/*
   +----------------------------------------------------------------------+
   | Zend Engine                                                          |
   +----------------------------------------------------------------------+
   | Copyright (c) Zend Technologies Ltd. (http://www.zend.com)           |
   +----------------------------------------------------------------------+
   | This source file is subject to version 2.00 of the Zend license,     |
   | that is bundled with this package in the file LICENSE, and is        |
   | available through the world-wide-web at the following url:           |
   | http://www.zend.com/license/2_00.txt.                                |
   | If you did not receive a copy of the Zend license and are unable to  |
   | obtain it through the world-wide-web, please send a note to          |
   | license@zend.com so we can mail you a copy immediately.              |
   +----------------------------------------------------------------------+
   | Authors: Dmitry Stogov <dmitry@php.net>                              |
   +----------------------------------------------------------------------+
*/

#include "zend_sort.h"

#define VM_TRACE(op)     zend_vm_trace(execute_data, opline);
#define VM_TRACE_START() zend_vm_trace_init();
#define VM_TRACE_END()   zend_vm_trace_finish();

static FILE *vm_trace_file;

static void zend_vm_trace(const zend_execute_data *execute_data, const zend_op *opline)
{
	if (EX(func) && EX(func)->op_array.filename) {
		fprintf(vm_trace_file, "%s:%d\n", ZSTR_VAL(EX(func)->op_array.filename), opline->lineno);
	}
}

static void zend_vm_trace_finish(void)
{
	fclose(vm_trace_file);
}

static void zend_vm_trace_init(void)
{
	vm_trace_file = fopen("zend_vm_trace.log", "w+");
}
Zend/zend_vm_trace_map.h000064400000005151151730543330011300 0ustar00/*
   +----------------------------------------------------------------------+
   | Zend Engine                                                          |
   +----------------------------------------------------------------------+
   | Copyright (c) Zend Technologies Ltd. (http://www.zend.com)           |
   +----------------------------------------------------------------------+
   | This source file is subject to version 2.00 of the Zend license,     |
   | that is bundled with this package in the file LICENSE, and is        |
   | available through the world-wide-web at the following url:           |
   | http://www.zend.com/license/2_00.txt.                                |
   | If you did not receive a copy of the Zend license and are unable to  |
   | obtain it through the world-wide-web, please send a note to          |
   | license@zend.com so we can mail you a copy immediately.              |
   +----------------------------------------------------------------------+
   | Authors: Dmitry Stogov <dmitry@php.net>                              |
   +----------------------------------------------------------------------+
*/

#include "zend_vm_handlers.h"
#include "zend_sort.h"

#define GEN_MAP(n, name) do { \
		ZVAL_LONG(&tmp, (zend_long)(uintptr_t)zend_opcode_handlers[n]); \
		zend_hash_str_add(&vm_trace_ht, #name, sizeof(#name) - 1, &tmp); \
	} while (0);

#define VM_TRACE_START() do { \
		zval tmp; \
		zend_hash_init(&vm_trace_ht, 0, NULL, NULL, 1); \
		VM_HANDLERS(GEN_MAP) \
		zend_vm_trace_init(); \
	} while (0)

#ifdef _WIN64
# define ADDR_FMT "%016I64x"
#elif SIZEOF_SIZE_T == 4
# define ADDR_FMT "%08zx"
#elif SIZEOF_SIZE_T == 8
# define ADDR_FMT "%016zx"
#else
# error "Unknown SIZEOF_SIZE_T"
#endif

static HashTable vm_trace_ht;

static int zend_vm_trace_compare(const Bucket *p1, const Bucket *p2)
{
	if (Z_LVAL(p1->val) > Z_LVAL(p2->val)) {
		return 1;
	} else if (Z_LVAL(p1->val) < Z_LVAL(p2->val)) {
		return -1;
	} else {
		return 0;
	}
}

static void zend_vm_trace_init(void)
{
	FILE *f;
	zend_string *key, *prev_key;
	zval *val;
	zend_long prev_addr;

	f = fopen("zend_vm.map", "w+");
	if (f) {
		zend_hash_sort(&vm_trace_ht, (bucket_compare_func_t)zend_vm_trace_compare, 0);
		prev_key = NULL;
		ZEND_HASH_MAP_FOREACH_STR_KEY_VAL(&vm_trace_ht, key, val) {
			if (prev_key) {
				fprintf(f, ADDR_FMT" "ADDR_FMT" t %s\n", prev_addr, Z_LVAL_P(val) - prev_addr, ZSTR_VAL(prev_key));
			}
			prev_key  = key;
			prev_addr = Z_LVAL_P(val);
		} ZEND_HASH_FOREACH_END();
		if (prev_key) {
			fprintf(f, ADDR_FMT" "ADDR_FMT" t %s\n", prev_addr, 0, ZSTR_VAL(prev_key));
		}
		fclose(f);
	}
	zend_hash_destroy(&vm_trace_ht);
}
Zend/zend_globals.h000064400000023647151730543330010300 0ustar00/*
   +----------------------------------------------------------------------+
   | Zend Engine                                                          |
   +----------------------------------------------------------------------+
   | Copyright (c) Zend Technologies Ltd. (http://www.zend.com)           |
   +----------------------------------------------------------------------+
   | This source file is subject to version 2.00 of the Zend license,     |
   | that is bundled with this package in the file LICENSE, and is        |
   | available through the world-wide-web at the following url:           |
   | http://www.zend.com/license/2_00.txt.                                |
   | If you did not receive a copy of the Zend license and are unable to  |
   | obtain it through the world-wide-web, please send a note to          |
   | license@zend.com so we can mail you a copy immediately.              |
   +----------------------------------------------------------------------+
   | Authors: Andi Gutmans <andi@php.net>                                 |
   |          Zeev Suraski <zeev@php.net>                                 |
   +----------------------------------------------------------------------+
*/

#ifndef ZEND_GLOBALS_H
#define ZEND_GLOBALS_H


#include <setjmp.h>
#include <stdint.h>
#include <sys/types.h>

#include "zend_globals_macros.h"

#include "zend_atomic.h"
#include "zend_stack.h"
#include "zend_ptr_stack.h"
#include "zend_hash.h"
#include "zend_llist.h"
#include "zend_objects.h"
#include "zend_objects_API.h"
#include "zend_modules.h"
#include "zend_float.h"
#include "zend_multibyte.h"
#include "zend_multiply.h"
#include "zend_arena.h"
#include "zend_call_stack.h"
#include "zend_max_execution_timer.h"
#include "zend_strtod.h"
#include "zend_lazy_objects.h"

/* Define ZTS if you want a thread-safe Zend */
/*#undef ZTS*/

#ifdef ZTS

BEGIN_EXTERN_C()
ZEND_API extern int compiler_globals_id;
ZEND_API extern int executor_globals_id;
ZEND_API extern size_t compiler_globals_offset;
ZEND_API extern size_t executor_globals_offset;
END_EXTERN_C()

#endif

#define SYMTABLE_CACHE_SIZE 32

#ifdef ZEND_CHECK_STACK_LIMIT
# define ZEND_MAX_ALLOWED_STACK_SIZE_UNCHECKED -1
# define ZEND_MAX_ALLOWED_STACK_SIZE_DETECT     0
#endif

#include "zend_compile.h"

/* excpt.h on Digital Unix 4.0 defines function_table */
#undef function_table

typedef struct _zend_vm_stack *zend_vm_stack;
typedef struct _zend_ini_entry zend_ini_entry;
typedef struct _zend_fiber_context zend_fiber_context;
typedef struct _zend_fiber zend_fiber;

typedef enum {
	ZEND_MEMOIZE_NONE,
	ZEND_MEMOIZE_COMPILE,
	ZEND_MEMOIZE_FETCH,
} zend_memoize_mode;

struct _zend_compiler_globals {
	zend_stack loop_var_stack;

	zend_class_entry *active_class_entry;

	zend_string *compiled_filename;

	int zend_lineno;

	zend_op_array *active_op_array;

	HashTable *function_table;	/* function symbol table */
	HashTable *class_table;		/* class table */

	HashTable *auto_globals;

	/* Refer to zend_yytnamerr() in zend_language_parser.y for meaning of values */
	uint8_t parse_error;
	bool in_compilation;
	bool short_tags;

	bool unclean_shutdown;

	bool ini_parser_unbuffered_errors;

	zend_llist open_files;

	struct _zend_ini_parser_param *ini_parser_param;

	bool skip_shebang;
	bool increment_lineno;

	bool variable_width_locale;   /* UTF-8, Shift-JIS, Big5, ISO 2022, EUC, etc */
	bool ascii_compatible_locale; /* locale uses ASCII characters as singletons */
	                              /* and don't use them as lead/trail units     */

	zend_string *doc_comment;
	uint32_t extra_fn_flags;

	uint32_t compiler_options; /* set of ZEND_COMPILE_* constants */

	zend_oparray_context context;
	zend_file_context file_context;

	zend_arena *arena;

	HashTable interned_strings;

	const zend_encoding **script_encoding_list;
	size_t script_encoding_list_size;
	bool multibyte;
	bool detect_unicode;
	bool encoding_declared;

	zend_ast *ast;
	zend_arena *ast_arena;

	zend_stack delayed_oplines_stack;
	HashTable *memoized_exprs;
	zend_memoize_mode memoize_mode;

	void   *map_ptr_real_base;
	void   *map_ptr_base;
	size_t  map_ptr_size;
	size_t  map_ptr_last;

	HashTable *delayed_variance_obligations;
	HashTable *delayed_autoloads;
	HashTable *unlinked_uses;
	zend_class_entry *current_linking_class;

	uint32_t rtd_key_counter;

	void *internal_run_time_cache;
	uint32_t internal_run_time_cache_size;

	zend_stack short_circuiting_opnums;
#ifdef ZTS
	uint32_t copied_functions_count;
#endif
};


struct _zend_executor_globals {
	zval uninitialized_zval;
	zval error_zval;

	/* symbol table cache */
	zend_array *symtable_cache[SYMTABLE_CACHE_SIZE];
	/* Pointer to one past the end of the symtable_cache */
	zend_array **symtable_cache_limit;
	/* Pointer to first unused symtable_cache slot */
	zend_array **symtable_cache_ptr;

	zend_array symbol_table;		/* main symbol table */

	HashTable included_files;	/* files already included */

	JMP_BUF *bailout;

	int error_reporting;

	bool fatal_error_backtrace_on;
	zval last_fatal_error_backtrace;

	int exit_status;

	HashTable *function_table;	/* function symbol table */
	HashTable *class_table;		/* class table */
	HashTable *zend_constants;	/* constants table */

	zval          *vm_stack_top;
	zval          *vm_stack_end;
	zend_vm_stack  vm_stack;
	size_t         vm_stack_page_size;

	struct _zend_execute_data *current_execute_data;
	const zend_class_entry *fake_scope; /* used to avoid checks accessing properties */

	uint32_t jit_trace_num; /* Used by tracing JIT to reference the currently running trace */

	zend_execute_data *current_observed_frame;

	int ticks_count;

	zend_long precision;

	uint32_t persistent_constants_count;
	uint32_t persistent_functions_count;
	uint32_t persistent_classes_count;

	/* for extended information support */
	bool no_extensions;

	bool full_tables_cleanup;

	zend_atomic_bool vm_interrupt;
	zend_atomic_bool timed_out;

	HashTable *in_autoload;

	zend_long hard_timeout;
	void *stack_base;
	void *stack_limit;

#ifdef ZEND_WIN32
	OSVERSIONINFOEX windows_version_info;
#endif

	HashTable regular_list;
	HashTable persistent_list;

	int user_error_handler_error_reporting;
	bool exception_ignore_args;
	zval user_error_handler;
	zval user_exception_handler;
	zend_stack user_error_handlers_error_reporting;
	zend_stack user_error_handlers;
	zend_stack user_exception_handlers;

	zend_class_entry      *exception_class;
	zend_error_handling_t  error_handling;

	int capture_warnings_during_sccp;

	/* timeout support */
	zend_long timeout_seconds;

	HashTable *ini_directives;
	HashTable *modified_ini_directives;
	zend_ini_entry *error_reporting_ini_entry;

	zend_objects_store objects_store;
	zend_lazy_objects_store lazy_objects_store;
	zend_object *exception, *prev_exception;
	const zend_op *opline_before_exception;
	zend_op exception_op[3];

	struct _zend_module_entry *current_module;

	bool active;
	uint8_t flags;

	zend_long assertions;

	uint32_t           ht_iterators_count;     /* number of allocated slots */
	uint32_t           ht_iterators_used;      /* number of used slots */
	HashTableIterator *ht_iterators;
	HashTableIterator  ht_iterators_slots[16];

	void *saved_fpu_cw_ptr;
#if XPFPA_HAVE_CW
	XPFPA_CW_DATATYPE saved_fpu_cw;
#endif

	zend_function trampoline;
	zend_op       call_trampoline_op;

	HashTable weakrefs;

	zend_long exception_string_param_max_len;

	zend_get_gc_buffer get_gc_buffer;

	zend_fiber_context *main_fiber_context;
	zend_fiber_context *current_fiber_context;

	/* Active instance of Fiber. */
	zend_fiber *active_fiber;

	/* Default fiber C stack size. */
	size_t fiber_stack_size;

	/* If record_errors is enabled, all emitted diagnostics will be recorded,
	 * and their processing is delayed until zend_emit_recorded_errors()
	 * is called or a fatal diagnostic is emitted. */
	bool record_errors;
	uint32_t num_errors;
	zend_error_info **errors;

	/* Override filename or line number of thrown errors and exceptions */
	zend_string *filename_override;
	zend_long lineno_override;

#ifdef ZEND_CHECK_STACK_LIMIT
	zend_call_stack call_stack;
	zend_long max_allowed_stack_size;
	zend_ulong reserved_stack_size;
#endif

#ifdef ZEND_MAX_EXECUTION_TIMERS
	timer_t max_execution_timer_timer;
	pid_t pid;
	struct sigaction oldact;
#endif

	zend_strtod_state strtod_state;

	void *reserved[ZEND_MAX_RESERVED_RESOURCES];
};

#define EG_FLAGS_INITIAL				(0)
#define EG_FLAGS_IN_SHUTDOWN			(1<<0)
#define EG_FLAGS_OBJECT_STORE_NO_REUSE	(1<<1)
#define EG_FLAGS_IN_RESOURCE_SHUTDOWN	(1<<2)

struct _zend_ini_scanner_globals {
	zend_file_handle *yy_in;
	zend_file_handle *yy_out;

	unsigned int yy_leng;
	const unsigned char *yy_start;
	const unsigned char *yy_text;
	const unsigned char *yy_cursor;
	const unsigned char *yy_marker;
	const unsigned char *yy_limit;
	int yy_state;
	zend_stack state_stack;

	zend_string *filename;
	int lineno;

	/* Modes are: ZEND_INI_SCANNER_NORMAL, ZEND_INI_SCANNER_RAW, ZEND_INI_SCANNER_TYPED */
	int scanner_mode;
};

typedef enum {
	ON_TOKEN,
	ON_FEEDBACK,
	ON_STOP
} zend_php_scanner_event;

struct _zend_php_scanner_globals {
	zend_file_handle *yy_in;
	zend_file_handle *yy_out;

	unsigned int yy_leng;
	unsigned char *yy_start;
	unsigned char *yy_text;
	unsigned char *yy_cursor;
	unsigned char *yy_marker;
	unsigned char *yy_limit;
	int yy_state;
	zend_stack state_stack;
	zend_ptr_stack heredoc_label_stack;
	zend_stack nest_location_stack; /* for syntax error reporting */
	bool heredoc_scan_ahead;
	int heredoc_indentation;
	bool heredoc_indentation_uses_spaces;

	/* original (unfiltered) script */
	unsigned char *script_org;
	size_t script_org_size;

	/* filtered script */
	unsigned char *script_filtered;
	size_t script_filtered_size;

	/* input/output filters */
	zend_encoding_filter input_filter;
	zend_encoding_filter output_filter;
	const zend_encoding *script_encoding;

	/* initial string length after scanning to first variable */
	int scanned_string_len;

	/* hooks */
	void (*on_event)(
		zend_php_scanner_event event, int token, int line,
		const char *text, size_t length, void *context);
	void *on_event_context;
};

#endif /* ZEND_GLOBALS_H */
Zend/zend_verify_type_inference.h000064400000020106151730543340013224 0ustar00/*
   +----------------------------------------------------------------------+
   | Zend Engine                                                          |
   +----------------------------------------------------------------------+
   | Copyright (c) Zend Technologies Ltd. (http://www.zend.com)           |
   +----------------------------------------------------------------------+
   | This source file is subject to version 2.00 of the Zend license,     |
   | that is bundled with this package in the file LICENSE, and is        |
   | available through the world-wide-web at the following url:           |
   | http://www.zend.com/license/2_00.txt.                                |
   | If you did not receive a copy of the Zend license and are unable to  |
   | obtain it through the world-wide-web, please send a note to          |
   | license@zend.com so we can mail you a copy immediately.              |
   +----------------------------------------------------------------------+
*/

#include "zend_type_info.h"
#include "zend_compile.h"

#define VM_TRACE_START()
#define VM_TRACE_END()
#define VM_TRACE(op) zend_verify_inference_use(execute_data, OPLINE); \
	{ \
		zend_execute_data *__current_ex = NULL; \
		const zend_op *__current_op = NULL; \
		if (OPLINE->opcode != ZEND_GENERATOR_RETURN) { \
			__current_ex = execute_data; __current_op = OPLINE; \
		}
#define VM_TRACE_OP_END(op) \
		if (__current_ex && __current_op) { \
			zend_verify_inference_def(__current_ex, __current_op); \
		} \
	}

#define ZEND_VERIFY_TYPE_INFERENCE_ERROR(msg, ...) \
	do { \
		fprintf(stderr, "Inference verification failed at %04d %s (" msg ")\n", (int)(opline - EX(func)->op_array.opcodes), operand, __VA_ARGS__); \
		_exit(139); \
	} while (0)

static void zend_verify_type_inference(zval *value, uint32_t type_mask, uint8_t op_type, zend_execute_data *execute_data, const zend_op *opline, const char *operand)
{
	if (type_mask == MAY_BE_CLASS) {
		return;
	}

	if (Z_TYPE_P(value) == IS_INDIRECT) {
		if (!(type_mask & MAY_BE_INDIRECT)) {
			ZEND_VERIFY_TYPE_INFERENCE_ERROR("mask 0x%x missing MAY_BE_INDIRECT", type_mask);
		}
		value = Z_INDIRECT_P(value);
	}

	/* Verifying RC inference is currently not possible because type information is based on the SSA
	 * built without ZEND_SSA_RC_INFERENCE, which is missing various definitions for RC-modifying
	 * operations. Support could be added by repeating SSA-construction and type inference with the
	 * given flag. */
	// if (Z_REFCOUNTED_P(value)) {
	// 	if (Z_REFCOUNT_P(value) == 1 && !(type_mask & MAY_BE_RC1)) {
	// 		ZEND_VERIFY_TYPE_INFERENCE_ERROR("mask 0x%x missing MAY_BE_RC1", type_mask);
	// 	}
	// 	if (Z_REFCOUNT_P(value) > 1 && !(type_mask & MAY_BE_RCN)) {
	// 		ZEND_VERIFY_TYPE_INFERENCE_ERROR("mask 0x%x missing MAY_BE_RCN", type_mask);
	// 	}
	// }

	if (Z_TYPE_P(value) == IS_REFERENCE) {
		if (!(type_mask & MAY_BE_REF)) {
			ZEND_VERIFY_TYPE_INFERENCE_ERROR("mask 0x%x missing MAY_BE_REF", type_mask);
		}
		value = Z_REFVAL_P(value);
	}

	if (!(type_mask & (1u << Z_TYPE_P(value)))) {
		if (Z_TYPE_P(value) == IS_UNUSED && op_type == IS_VAR && (type_mask & MAY_BE_NULL)) {
			/* FETCH_OBJ_* for typed property may return IS_UNDEF. This is an exception. */
		} else {
			ZEND_VERIFY_TYPE_INFERENCE_ERROR("mask 0x%x missing type %d", type_mask, Z_TYPE_P(value));
		}
	}

	if (Z_TYPE_P(value) == IS_ARRAY) {
		HashTable *ht = Z_ARRVAL_P(value);
		uint32_t num_checked = 0;
		zend_string *str;
		zval *val;
		if (HT_IS_INITIALIZED(ht)) {
			if (HT_IS_PACKED(ht) && !MAY_BE_PACKED(type_mask)) {
				ZEND_VERIFY_TYPE_INFERENCE_ERROR("mask 0x%x missing MAY_BE_ARRAY_PACKED", type_mask);
			}
			if (!HT_IS_PACKED(ht) && !MAY_BE_HASH(type_mask)) {
				ZEND_VERIFY_TYPE_INFERENCE_ERROR("mask 0x%x missing MAY_BE_ARRAY_HASH", type_mask);
			}
		} else {
			if (!(type_mask & MAY_BE_ARRAY_EMPTY)) {
				ZEND_VERIFY_TYPE_INFERENCE_ERROR("mask 0x%x missing MAY_BE_ARRAY_EMPTY", type_mask);
			}
		}
		ZEND_HASH_FOREACH_STR_KEY_VAL(ht, str, val) {
			if (str) {
				if (!(type_mask & MAY_BE_ARRAY_KEY_STRING)) {
					ZEND_VERIFY_TYPE_INFERENCE_ERROR("mask 0x%x missing MAY_BE_ARRAY_KEY_STRING", type_mask);
					break;
				}
			} else {
				if (!(type_mask & MAY_BE_ARRAY_KEY_LONG)) {
					ZEND_VERIFY_TYPE_INFERENCE_ERROR("mask 0x%x missing MAY_BE_ARRAY_KEY_LONG", type_mask);
					break;
				}
			}

			uint32_t array_type = 1u << (Z_TYPE_P(val) + MAY_BE_ARRAY_SHIFT);
			if (!(type_mask & array_type)) {
				ZEND_VERIFY_TYPE_INFERENCE_ERROR("mask 0x%x missing array type %d", type_mask, Z_TYPE_P(val));
				break;
			}

			/* Don't check all elements of large arrays. */
			if (++num_checked > 16) {
				break;
			}
		} ZEND_HASH_FOREACH_END();
	}
}

/* Clang reports false positive unused warnings. */
#ifdef __clang__
__attribute__((unused))
#endif
static void zend_verify_inference_use(zend_execute_data *execute_data, const zend_op *opline)
{
	if (opline->op1_use_type
	 && (opline->op1_type & (IS_TMP_VAR|IS_VAR|IS_CV))
	 && opline->opcode != ZEND_ROPE_ADD
	 && opline->opcode != ZEND_ROPE_END) {
		zend_verify_type_inference(EX_VAR(opline->op1.var), opline->op1_use_type, opline->op1_type, execute_data, opline, "op1_use");
	}
	if (opline->op2_use_type
	 && (opline->op2_type & (IS_TMP_VAR|IS_VAR|IS_CV))) {
		zend_verify_type_inference(EX_VAR(opline->op2.var), opline->op2_use_type, opline->op2_type, execute_data, opline, "op2_use");
	}
	if (opline->result_use_type
	 && (opline->result_type & (IS_TMP_VAR|IS_VAR|IS_CV))) {
		zend_verify_type_inference(EX_VAR(opline->result.var), opline->result_use_type, opline->result_type, execute_data, opline, "result_use");
	}
}

/* Clang reports false positive unused warnings. */
#ifdef __clang__
__attribute__((unused))
#endif
static void zend_verify_inference_def(zend_execute_data *execute_data, const zend_op *opline)
{
	if (EG(exception)) {
		return;
	}
	if (opline->op1_def_type
	 && (opline->op1_type & (IS_TMP_VAR|IS_VAR|IS_CV))
	 // array is actually changed by the the following instruction(s)
	 && opline->opcode != ZEND_FETCH_DIM_W
	 && opline->opcode != ZEND_FETCH_DIM_RW
	 && opline->opcode != ZEND_FETCH_DIM_FUNC_ARG
	 && opline->opcode != ZEND_FETCH_LIST_W) {
		zend_verify_type_inference(EX_VAR(opline->op1.var), opline->op1_def_type, opline->op1_type, execute_data, opline, "op1_def");
	}
	if (opline->op2_def_type
	 && (opline->op2_type & (IS_TMP_VAR|IS_VAR|IS_CV))
	 /* ZEND_FE_FETCH_R[W] does not define a result in the last iteration. */
	 && opline->opcode != ZEND_FE_FETCH_R
	 && opline->opcode != ZEND_FE_FETCH_RW) {
		zend_verify_type_inference(EX_VAR(opline->op2.var), opline->op2_def_type, opline->op2_type, execute_data, opline, "op2_def");
	}
	if (opline->result_def_type
	 && (opline->result_type & (IS_TMP_VAR|IS_VAR|IS_CV))
	 && opline->opcode != ZEND_ROPE_INIT
	 && opline->opcode != ZEND_ROPE_ADD
	 /* Some jump opcode handlers don't set result when it's never read. */
	 && opline->opcode != ZEND_JMP_SET
	 && opline->opcode != ZEND_JMP_NULL
	 && opline->opcode != ZEND_COALESCE
	 && opline->opcode != ZEND_ASSERT_CHECK
	 /* Smart branches may not declare result. */
	 && !zend_is_smart_branch(opline)
	 /* User calls only initialize result when returning from the called function. */
	 && opline->opcode != ZEND_DO_FCALL
	 && opline->opcode != ZEND_DO_UCALL
	 && opline->opcode != ZEND_DO_FCALL_BY_NAME
	 /* ZEND_FE_FETCH_R[W] does not define a result in the last iteration. */
	 && opline->opcode != ZEND_FE_FETCH_R
	 && opline->opcode != ZEND_FE_FETCH_RW) {
		zend_verify_type_inference(EX_VAR(opline->result.var), opline->result_def_type, opline->result_type, execute_data, opline, "result_def");

		/* Verify return value in the context of caller. */
		if ((opline->opcode == ZEND_RETURN || opline->opcode == ZEND_RETURN_BY_REF)
		 && execute_data->prev_execute_data
		 && execute_data->prev_execute_data->func
		 && ZEND_USER_CODE(execute_data->prev_execute_data->func->type)) {
			zend_execute_data *prev_execute_data = execute_data->prev_execute_data;
			const zend_op *opline = execute_data->prev_execute_data->opline;
			zend_verify_type_inference(ZEND_CALL_VAR(prev_execute_data, opline->result.var), opline->result_def_type, opline->result_type, prev_execute_data, opline, "result_def");
		}
	}
}
Zend/zend_language_scanner_defs.h000064400000000466151730543340013145 0ustar00/* Generated by re2c 1.1.1 */
#line 3 "Zend/zend_language_scanner_defs.h"

enum YYCONDTYPE {
	yycST_IN_SCRIPTING,
	yycST_LOOKING_FOR_PROPERTY,
	yycST_BACKQUOTE,
	yycST_DOUBLE_QUOTES,
	yycST_HEREDOC,
	yycST_LOOKING_FOR_VARNAME,
	yycST_VAR_OFFSET,
	yycSHEBANG,
	yycINITIAL,
	yycST_END_HEREDOC,
	yycST_NOWDOC,
};
Zend/zend_range_check.h000064400000005670151730543340011103 0ustar00/*
   +----------------------------------------------------------------------+
   | Zend Engine                                                          |
   +----------------------------------------------------------------------+
   | Copyright (c) Zend Technologies Ltd. (http://www.zend.com)           |
   +----------------------------------------------------------------------+
   | This source file is subject to version 2.00 of the Zend license,     |
   | that is bundled with this package in the file LICENSE, and is        |
   | available through the world-wide-web at the following url:           |
   | http://www.zend.com/license/2_00.txt.                                |
   | If you did not receive a copy of the Zend license and are unable to  |
   | obtain it through the world-wide-web, please send a note to          |
   | license@zend.com so we can mail you a copy immediately.              |
   +----------------------------------------------------------------------+
   | Authors: Anatol Belski <ab@php.net>                                  |
   +----------------------------------------------------------------------+
*/

#ifndef ZEND_RANGE_CHECK_H
#define ZEND_RANGE_CHECK_H

#include "zend_long.h"

/* Flag macros for basic range recognition. Notable is that
   always sizeof(signed) == sizeof(unsigned), so no need to
   overcomplicate things. */
#if SIZEOF_INT < SIZEOF_ZEND_LONG
# define ZEND_LONG_CAN_OVFL_INT 1
# define ZEND_LONG_CAN_OVFL_UINT 1
#endif

#if SIZEOF_INT < SIZEOF_SIZE_T
/* size_t can always overflow signed int on the same platform.
   Furthermore, by the current design, size_t can always
   overflow zend_long. */
# define ZEND_SIZE_T_CAN_OVFL_UINT 1
#endif


/* zend_long vs. (unsigned) int checks. */
#ifdef ZEND_LONG_CAN_OVFL_INT
# define ZEND_LONG_INT_OVFL(zlong) UNEXPECTED((zlong) > (zend_long)INT_MAX)
# define ZEND_LONG_INT_UDFL(zlong) UNEXPECTED((zlong) < (zend_long)INT_MIN)
# define ZEND_LONG_EXCEEDS_INT(zlong) UNEXPECTED(ZEND_LONG_INT_OVFL(zlong) || ZEND_LONG_INT_UDFL(zlong))
# define ZEND_LONG_UINT_OVFL(zlong) UNEXPECTED((zlong) < 0 || (zlong) > (zend_long)UINT_MAX)
#else
# define ZEND_LONG_INT_OVFL(zl) (0)
# define ZEND_LONG_INT_UDFL(zl) (0)
# define ZEND_LONG_EXCEEDS_INT(zlong) (0)
# define ZEND_LONG_UINT_OVFL(zl) (0)
#endif

/* size_t vs (unsigned) int checks. */
#define ZEND_SIZE_T_INT_OVFL(size) 	UNEXPECTED((size) > (size_t)INT_MAX)
#ifdef ZEND_SIZE_T_CAN_OVFL_UINT
# define ZEND_SIZE_T_UINT_OVFL(size) UNEXPECTED((size) > (size_t)UINT_MAX)
#else
# define ZEND_SIZE_T_UINT_OVFL(size) (0)
#endif

/* Comparison zend_long vs size_t */
#define ZEND_SIZE_T_GT_ZEND_LONG(size, zlong) ((zlong) < 0 || (size) > (size_t)(zlong))
#define ZEND_SIZE_T_GTE_ZEND_LONG(size, zlong) ((zlong) < 0 || (size) >= (size_t)(zlong))
#define ZEND_SIZE_T_LT_ZEND_LONG(size, zlong) ((zlong) >= 0 && (size) < (size_t)(zlong))
#define ZEND_SIZE_T_LTE_ZEND_LONG(size, zlong) ((zlong) >= 0 && (size) <= (size_t)(zlong))

#endif /* ZEND_RANGE_CHECK_H */
Zend/zend_smart_str_public.h000064400000002306151730543340012217 0ustar00/*
   +----------------------------------------------------------------------+
   | Copyright (c) The PHP Group                                          |
   +----------------------------------------------------------------------+
   | This source file is subject to version 3.01 of the PHP license,      |
   | that is bundled with this package in the file LICENSE, and is        |
   | available through the world-wide-web at the following url:           |
   | https://www.php.net/license/3_01.txt                                 |
   | If you did not receive a copy of the PHP license and are unable to   |
   | obtain it through the world-wide-web, please send a note to          |
   | license@php.net so we can mail you a copy immediately.               |
   +----------------------------------------------------------------------+
   | Author: Sascha Schumann <sascha@schumann.cx>                         |
   +----------------------------------------------------------------------+
 */

#ifndef ZEND_SMART_STR_PUBLIC_H
#define ZEND_SMART_STR_PUBLIC_H

#include <stddef.h>

typedef struct _zend_string zend_string;

typedef struct {
	/** See smart_str_extract() */
	zend_string *s;
	size_t a;
} smart_str;

#endif
Zend/zend_exceptions_arginfo.h000064400000036665151730543340012550 0ustar00/* This is a generated file, edit the .stub.php file instead.
 * Stub hash: ba1562ca8fe2fe48c40bc52d10545aa989afd86c */

ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_class_Throwable_getMessage, 0, 0, IS_STRING, 0)
ZEND_END_ARG_INFO()

ZEND_BEGIN_ARG_INFO_EX(arginfo_class_Throwable_getCode, 0, 0, 0)
ZEND_END_ARG_INFO()

#define arginfo_class_Throwable_getFile arginfo_class_Throwable_getMessage

ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_class_Throwable_getLine, 0, 0, IS_LONG, 0)
ZEND_END_ARG_INFO()

ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_class_Throwable_getTrace, 0, 0, IS_ARRAY, 0)
ZEND_END_ARG_INFO()

ZEND_BEGIN_ARG_WITH_RETURN_OBJ_INFO_EX(arginfo_class_Throwable_getPrevious, 0, 0, Throwable, 1)
ZEND_END_ARG_INFO()

#define arginfo_class_Throwable_getTraceAsString arginfo_class_Throwable_getMessage

ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_class_Exception___clone, 0, 0, IS_VOID, 0)
ZEND_END_ARG_INFO()

ZEND_BEGIN_ARG_INFO_EX(arginfo_class_Exception___construct, 0, 0, 0)
	ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, message, IS_STRING, 0, "\"\"")
	ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, code, IS_LONG, 0, "0")
	ZEND_ARG_OBJ_INFO_WITH_DEFAULT_VALUE(0, previous, Throwable, 1, "null")
ZEND_END_ARG_INFO()

ZEND_BEGIN_ARG_WITH_TENTATIVE_RETURN_TYPE_INFO_EX(arginfo_class_Exception___wakeup, 0, 0, IS_VOID, 0)
ZEND_END_ARG_INFO()

#define arginfo_class_Exception_getMessage arginfo_class_Throwable_getMessage

#define arginfo_class_Exception_getCode arginfo_class_Throwable_getCode

#define arginfo_class_Exception_getFile arginfo_class_Throwable_getMessage

#define arginfo_class_Exception_getLine arginfo_class_Throwable_getLine

#define arginfo_class_Exception_getTrace arginfo_class_Throwable_getTrace

#define arginfo_class_Exception_getPrevious arginfo_class_Throwable_getPrevious

#define arginfo_class_Exception_getTraceAsString arginfo_class_Throwable_getMessage

#define arginfo_class_Exception___toString arginfo_class_Throwable_getMessage

ZEND_BEGIN_ARG_INFO_EX(arginfo_class_ErrorException___construct, 0, 0, 0)
	ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, message, IS_STRING, 0, "\"\"")
	ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, code, IS_LONG, 0, "0")
	ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, severity, IS_LONG, 0, "E_ERROR")
	ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, filename, IS_STRING, 1, "null")
	ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, line, IS_LONG, 1, "null")
	ZEND_ARG_OBJ_INFO_WITH_DEFAULT_VALUE(0, previous, Throwable, 1, "null")
ZEND_END_ARG_INFO()

#define arginfo_class_ErrorException_getSeverity arginfo_class_Throwable_getLine

#define arginfo_class_Error___clone arginfo_class_Exception___clone

#define arginfo_class_Error___construct arginfo_class_Exception___construct

#define arginfo_class_Error___wakeup arginfo_class_Exception___wakeup

#define arginfo_class_Error_getMessage arginfo_class_Throwable_getMessage

#define arginfo_class_Error_getCode arginfo_class_Throwable_getCode

#define arginfo_class_Error_getFile arginfo_class_Throwable_getMessage

#define arginfo_class_Error_getLine arginfo_class_Throwable_getLine

#define arginfo_class_Error_getTrace arginfo_class_Throwable_getTrace

#define arginfo_class_Error_getPrevious arginfo_class_Throwable_getPrevious

#define arginfo_class_Error_getTraceAsString arginfo_class_Throwable_getMessage

#define arginfo_class_Error___toString arginfo_class_Throwable_getMessage

ZEND_METHOD(Exception, __clone);
ZEND_METHOD(Exception, __construct);
ZEND_METHOD(Exception, __wakeup);
ZEND_METHOD(Exception, getMessage);
ZEND_METHOD(Exception, getCode);
ZEND_METHOD(Exception, getFile);
ZEND_METHOD(Exception, getLine);
ZEND_METHOD(Exception, getTrace);
ZEND_METHOD(Exception, getPrevious);
ZEND_METHOD(Exception, getTraceAsString);
ZEND_METHOD(Exception, __toString);
ZEND_METHOD(ErrorException, __construct);
ZEND_METHOD(ErrorException, getSeverity);

static const zend_function_entry class_Throwable_methods[] = {
	ZEND_RAW_FENTRY("getMessage", NULL, arginfo_class_Throwable_getMessage, ZEND_ACC_PUBLIC|ZEND_ACC_ABSTRACT, NULL, NULL)
	ZEND_RAW_FENTRY("getCode", NULL, arginfo_class_Throwable_getCode, ZEND_ACC_PUBLIC|ZEND_ACC_ABSTRACT, NULL, NULL)
	ZEND_RAW_FENTRY("getFile", NULL, arginfo_class_Throwable_getFile, ZEND_ACC_PUBLIC|ZEND_ACC_ABSTRACT, NULL, NULL)
	ZEND_RAW_FENTRY("getLine", NULL, arginfo_class_Throwable_getLine, ZEND_ACC_PUBLIC|ZEND_ACC_ABSTRACT, NULL, NULL)
	ZEND_RAW_FENTRY("getTrace", NULL, arginfo_class_Throwable_getTrace, ZEND_ACC_PUBLIC|ZEND_ACC_ABSTRACT, NULL, NULL)
	ZEND_RAW_FENTRY("getPrevious", NULL, arginfo_class_Throwable_getPrevious, ZEND_ACC_PUBLIC|ZEND_ACC_ABSTRACT, NULL, NULL)
	ZEND_RAW_FENTRY("getTraceAsString", NULL, arginfo_class_Throwable_getTraceAsString, ZEND_ACC_PUBLIC|ZEND_ACC_ABSTRACT, NULL, NULL)
	ZEND_FE_END
};

static const zend_function_entry class_Exception_methods[] = {
	ZEND_ME(Exception, __clone, arginfo_class_Exception___clone, ZEND_ACC_PRIVATE)
	ZEND_ME(Exception, __construct, arginfo_class_Exception___construct, ZEND_ACC_PUBLIC)
	ZEND_ME(Exception, __wakeup, arginfo_class_Exception___wakeup, ZEND_ACC_PUBLIC)
	ZEND_ME(Exception, getMessage, arginfo_class_Exception_getMessage, ZEND_ACC_PUBLIC|ZEND_ACC_FINAL)
	ZEND_ME(Exception, getCode, arginfo_class_Exception_getCode, ZEND_ACC_PUBLIC|ZEND_ACC_FINAL)
	ZEND_ME(Exception, getFile, arginfo_class_Exception_getFile, ZEND_ACC_PUBLIC|ZEND_ACC_FINAL)
	ZEND_ME(Exception, getLine, arginfo_class_Exception_getLine, ZEND_ACC_PUBLIC|ZEND_ACC_FINAL)
	ZEND_ME(Exception, getTrace, arginfo_class_Exception_getTrace, ZEND_ACC_PUBLIC|ZEND_ACC_FINAL)
	ZEND_ME(Exception, getPrevious, arginfo_class_Exception_getPrevious, ZEND_ACC_PUBLIC|ZEND_ACC_FINAL)
	ZEND_ME(Exception, getTraceAsString, arginfo_class_Exception_getTraceAsString, ZEND_ACC_PUBLIC|ZEND_ACC_FINAL)
	ZEND_ME(Exception, __toString, arginfo_class_Exception___toString, ZEND_ACC_PUBLIC)
	ZEND_FE_END
};

static const zend_function_entry class_ErrorException_methods[] = {
	ZEND_ME(ErrorException, __construct, arginfo_class_ErrorException___construct, ZEND_ACC_PUBLIC)
	ZEND_ME(ErrorException, getSeverity, arginfo_class_ErrorException_getSeverity, ZEND_ACC_PUBLIC|ZEND_ACC_FINAL)
	ZEND_FE_END
};

static const zend_function_entry class_Error_methods[] = {
	ZEND_RAW_FENTRY("__clone", zim_Exception___clone, arginfo_class_Error___clone, ZEND_ACC_PRIVATE, NULL, NULL)
	ZEND_RAW_FENTRY("__construct", zim_Exception___construct, arginfo_class_Error___construct, ZEND_ACC_PUBLIC, NULL, NULL)
	ZEND_RAW_FENTRY("__wakeup", zim_Exception___wakeup, arginfo_class_Error___wakeup, ZEND_ACC_PUBLIC, NULL, NULL)
	ZEND_RAW_FENTRY("getMessage", zim_Exception_getMessage, arginfo_class_Error_getMessage, ZEND_ACC_PUBLIC|ZEND_ACC_FINAL, NULL, NULL)
	ZEND_RAW_FENTRY("getCode", zim_Exception_getCode, arginfo_class_Error_getCode, ZEND_ACC_PUBLIC|ZEND_ACC_FINAL, NULL, NULL)
	ZEND_RAW_FENTRY("getFile", zim_Exception_getFile, arginfo_class_Error_getFile, ZEND_ACC_PUBLIC|ZEND_ACC_FINAL, NULL, NULL)
	ZEND_RAW_FENTRY("getLine", zim_Exception_getLine, arginfo_class_Error_getLine, ZEND_ACC_PUBLIC|ZEND_ACC_FINAL, NULL, NULL)
	ZEND_RAW_FENTRY("getTrace", zim_Exception_getTrace, arginfo_class_Error_getTrace, ZEND_ACC_PUBLIC|ZEND_ACC_FINAL, NULL, NULL)
	ZEND_RAW_FENTRY("getPrevious", zim_Exception_getPrevious, arginfo_class_Error_getPrevious, ZEND_ACC_PUBLIC|ZEND_ACC_FINAL, NULL, NULL)
	ZEND_RAW_FENTRY("getTraceAsString", zim_Exception_getTraceAsString, arginfo_class_Error_getTraceAsString, ZEND_ACC_PUBLIC|ZEND_ACC_FINAL, NULL, NULL)
	ZEND_RAW_FENTRY("__toString", zim_Exception___toString, arginfo_class_Error___toString, ZEND_ACC_PUBLIC, NULL, NULL)
	ZEND_FE_END
};

static zend_class_entry *register_class_Throwable(zend_class_entry *class_entry_Stringable)
{
	zend_class_entry ce, *class_entry;

	INIT_CLASS_ENTRY(ce, "Throwable", class_Throwable_methods);
	class_entry = zend_register_internal_interface(&ce);
	zend_class_implements(class_entry, 1, class_entry_Stringable);

	return class_entry;
}

static zend_class_entry *register_class_Exception(zend_class_entry *class_entry_Throwable)
{
	zend_class_entry ce, *class_entry;

	INIT_CLASS_ENTRY(ce, "Exception", class_Exception_methods);
	class_entry = zend_register_internal_class_with_flags(&ce, NULL, 0);
	zend_class_implements(class_entry, 1, class_entry_Throwable);

	zval property_message_default_value;
	ZVAL_EMPTY_STRING(&property_message_default_value);
	zend_declare_typed_property(class_entry, ZSTR_KNOWN(ZEND_STR_MESSAGE), &property_message_default_value, ZEND_ACC_PROTECTED, NULL, (zend_type) ZEND_TYPE_INIT_NONE(0));

	zval property_string_default_value;
	ZVAL_EMPTY_STRING(&property_string_default_value);
	zend_declare_typed_property(class_entry, ZSTR_KNOWN(ZEND_STR_STRING), &property_string_default_value, ZEND_ACC_PRIVATE, NULL, (zend_type) ZEND_TYPE_INIT_MASK(MAY_BE_STRING));

	zval property_code_default_value;
	ZVAL_LONG(&property_code_default_value, 0);
	zend_declare_typed_property(class_entry, ZSTR_KNOWN(ZEND_STR_CODE), &property_code_default_value, ZEND_ACC_PROTECTED, NULL, (zend_type) ZEND_TYPE_INIT_NONE(0));

	zval property_file_default_value;
	ZVAL_EMPTY_STRING(&property_file_default_value);
	zend_declare_typed_property(class_entry, ZSTR_KNOWN(ZEND_STR_FILE), &property_file_default_value, ZEND_ACC_PROTECTED, NULL, (zend_type) ZEND_TYPE_INIT_MASK(MAY_BE_STRING));

	zval property_line_default_value;
	ZVAL_LONG(&property_line_default_value, 0);
	zend_declare_typed_property(class_entry, ZSTR_KNOWN(ZEND_STR_LINE), &property_line_default_value, ZEND_ACC_PROTECTED, NULL, (zend_type) ZEND_TYPE_INIT_MASK(MAY_BE_LONG));

	zval property_trace_default_value;
	ZVAL_EMPTY_ARRAY(&property_trace_default_value);
	zend_declare_typed_property(class_entry, ZSTR_KNOWN(ZEND_STR_TRACE), &property_trace_default_value, ZEND_ACC_PRIVATE, NULL, (zend_type) ZEND_TYPE_INIT_MASK(MAY_BE_ARRAY));

	zval property_previous_default_value;
	ZVAL_NULL(&property_previous_default_value);
	zend_string *property_previous_class_Throwable = zend_string_init("Throwable", sizeof("Throwable")-1, 1);
	zend_declare_typed_property(class_entry, ZSTR_KNOWN(ZEND_STR_PREVIOUS), &property_previous_default_value, ZEND_ACC_PRIVATE, NULL, (zend_type) ZEND_TYPE_INIT_CLASS(property_previous_class_Throwable, 0, MAY_BE_NULL));

	return class_entry;
}

static zend_class_entry *register_class_ErrorException(zend_class_entry *class_entry_Exception)
{
	zend_class_entry ce, *class_entry;

	INIT_CLASS_ENTRY(ce, "ErrorException", class_ErrorException_methods);
	class_entry = zend_register_internal_class_with_flags(&ce, class_entry_Exception, 0);

	zval property_severity_default_value;
	ZVAL_LONG(&property_severity_default_value, E_ERROR);
	zend_declare_typed_property(class_entry, ZSTR_KNOWN(ZEND_STR_SEVERITY), &property_severity_default_value, ZEND_ACC_PROTECTED, NULL, (zend_type) ZEND_TYPE_INIT_MASK(MAY_BE_LONG));

	return class_entry;
}

static zend_class_entry *register_class_Error(zend_class_entry *class_entry_Throwable)
{
	zend_class_entry ce, *class_entry;

	INIT_CLASS_ENTRY(ce, "Error", class_Error_methods);
	class_entry = zend_register_internal_class_with_flags(&ce, NULL, 0);
	zend_class_implements(class_entry, 1, class_entry_Throwable);

	zval property_message_default_value;
	ZVAL_EMPTY_STRING(&property_message_default_value);
	zend_declare_typed_property(class_entry, ZSTR_KNOWN(ZEND_STR_MESSAGE), &property_message_default_value, ZEND_ACC_PROTECTED, NULL, (zend_type) ZEND_TYPE_INIT_NONE(0));

	zval property_string_default_value;
	ZVAL_EMPTY_STRING(&property_string_default_value);
	zend_declare_typed_property(class_entry, ZSTR_KNOWN(ZEND_STR_STRING), &property_string_default_value, ZEND_ACC_PRIVATE, NULL, (zend_type) ZEND_TYPE_INIT_MASK(MAY_BE_STRING));

	zval property_code_default_value;
	ZVAL_LONG(&property_code_default_value, 0);
	zend_declare_typed_property(class_entry, ZSTR_KNOWN(ZEND_STR_CODE), &property_code_default_value, ZEND_ACC_PROTECTED, NULL, (zend_type) ZEND_TYPE_INIT_NONE(0));

	zval property_file_default_value;
	ZVAL_EMPTY_STRING(&property_file_default_value);
	zend_declare_typed_property(class_entry, ZSTR_KNOWN(ZEND_STR_FILE), &property_file_default_value, ZEND_ACC_PROTECTED, NULL, (zend_type) ZEND_TYPE_INIT_MASK(MAY_BE_STRING));

	zval property_line_default_value;
	ZVAL_UNDEF(&property_line_default_value);
	zend_declare_typed_property(class_entry, ZSTR_KNOWN(ZEND_STR_LINE), &property_line_default_value, ZEND_ACC_PROTECTED, NULL, (zend_type) ZEND_TYPE_INIT_MASK(MAY_BE_LONG));

	zval property_trace_default_value;
	ZVAL_EMPTY_ARRAY(&property_trace_default_value);
	zend_declare_typed_property(class_entry, ZSTR_KNOWN(ZEND_STR_TRACE), &property_trace_default_value, ZEND_ACC_PRIVATE, NULL, (zend_type) ZEND_TYPE_INIT_MASK(MAY_BE_ARRAY));

	zval property_previous_default_value;
	ZVAL_NULL(&property_previous_default_value);
	zend_string *property_previous_class_Throwable = zend_string_init("Throwable", sizeof("Throwable")-1, 1);
	zend_declare_typed_property(class_entry, ZSTR_KNOWN(ZEND_STR_PREVIOUS), &property_previous_default_value, ZEND_ACC_PRIVATE, NULL, (zend_type) ZEND_TYPE_INIT_CLASS(property_previous_class_Throwable, 0, MAY_BE_NULL));

	return class_entry;
}

static zend_class_entry *register_class_CompileError(zend_class_entry *class_entry_Error)
{
	zend_class_entry ce, *class_entry;

	INIT_CLASS_ENTRY(ce, "CompileError", NULL);
	class_entry = zend_register_internal_class_with_flags(&ce, class_entry_Error, 0);

	return class_entry;
}

static zend_class_entry *register_class_ParseError(zend_class_entry *class_entry_CompileError)
{
	zend_class_entry ce, *class_entry;

	INIT_CLASS_ENTRY(ce, "ParseError", NULL);
	class_entry = zend_register_internal_class_with_flags(&ce, class_entry_CompileError, 0);

	return class_entry;
}

static zend_class_entry *register_class_TypeError(zend_class_entry *class_entry_Error)
{
	zend_class_entry ce, *class_entry;

	INIT_CLASS_ENTRY(ce, "TypeError", NULL);
	class_entry = zend_register_internal_class_with_flags(&ce, class_entry_Error, 0);

	return class_entry;
}

static zend_class_entry *register_class_ArgumentCountError(zend_class_entry *class_entry_TypeError)
{
	zend_class_entry ce, *class_entry;

	INIT_CLASS_ENTRY(ce, "ArgumentCountError", NULL);
	class_entry = zend_register_internal_class_with_flags(&ce, class_entry_TypeError, 0);

	return class_entry;
}

static zend_class_entry *register_class_ValueError(zend_class_entry *class_entry_Error)
{
	zend_class_entry ce, *class_entry;

	INIT_CLASS_ENTRY(ce, "ValueError", NULL);
	class_entry = zend_register_internal_class_with_flags(&ce, class_entry_Error, 0);

	return class_entry;
}

static zend_class_entry *register_class_ArithmeticError(zend_class_entry *class_entry_Error)
{
	zend_class_entry ce, *class_entry;

	INIT_CLASS_ENTRY(ce, "ArithmeticError", NULL);
	class_entry = zend_register_internal_class_with_flags(&ce, class_entry_Error, 0);

	return class_entry;
}

static zend_class_entry *register_class_DivisionByZeroError(zend_class_entry *class_entry_ArithmeticError)
{
	zend_class_entry ce, *class_entry;

	INIT_CLASS_ENTRY(ce, "DivisionByZeroError", NULL);
	class_entry = zend_register_internal_class_with_flags(&ce, class_entry_ArithmeticError, 0);

	return class_entry;
}

static zend_class_entry *register_class_UnhandledMatchError(zend_class_entry *class_entry_Error)
{
	zend_class_entry ce, *class_entry;

	INIT_CLASS_ENTRY(ce, "UnhandledMatchError", NULL);
	class_entry = zend_register_internal_class_with_flags(&ce, class_entry_Error, 0);

	return class_entry;
}

static zend_class_entry *register_class_RequestParseBodyException(zend_class_entry *class_entry_Exception)
{
	zend_class_entry ce, *class_entry;

	INIT_CLASS_ENTRY(ce, "RequestParseBodyException", NULL);
	class_entry = zend_register_internal_class_with_flags(&ce, class_entry_Exception, 0);

	return class_entry;
}
Zend/zend_interfaces.h000064400000010026151730543350010765 0ustar00/*
   +----------------------------------------------------------------------+
   | Zend Engine                                                          |
   +----------------------------------------------------------------------+
   | Copyright (c) Zend Technologies Ltd. (http://www.zend.com)           |
   +----------------------------------------------------------------------+
   | This source file is subject to version 2.00 of the Zend license,     |
   | that is bundled with this package in the file LICENSE, and is        |
   | available through the world-wide-web at the following url:           |
   | http://www.zend.com/license/2_00.txt.                                |
   | If you did not receive a copy of the Zend license and are unable to  |
   | obtain it through the world-wide-web, please send a note to          |
   | license@zend.com so we can mail you a copy immediately.              |
   +----------------------------------------------------------------------+
   | Authors: Marcus Boerger <helly@php.net>                              |
   +----------------------------------------------------------------------+
*/

#ifndef ZEND_INTERFACES_H
#define ZEND_INTERFACES_H

#include "zend.h"
#include "zend_API.h"

BEGIN_EXTERN_C()

extern ZEND_API zend_class_entry *zend_ce_traversable;
extern ZEND_API zend_class_entry *zend_ce_aggregate;
extern ZEND_API zend_class_entry *zend_ce_iterator;
extern ZEND_API zend_class_entry *zend_ce_arrayaccess;
extern ZEND_API zend_class_entry *zend_ce_serializable;
extern ZEND_API zend_class_entry *zend_ce_countable;
extern ZEND_API zend_class_entry *zend_ce_stringable;

typedef struct _zend_user_iterator {
	zend_object_iterator     it;
	zend_class_entry         *ce;
	zval                     value;
} zend_user_iterator;

ZEND_API zval* zend_call_method(zend_object *object, zend_class_entry *obj_ce, zend_function **fn_proxy, const char *function_name, size_t function_name_len, zval *retval, uint32_t param_count, zval* arg1, zval* arg2);

static zend_always_inline zval* zend_call_method_with_0_params(zend_object *object, zend_class_entry *obj_ce,
		zend_function **fn_proxy, const char *function_name, zval *retval)
{
	return zend_call_method(object, obj_ce, fn_proxy, function_name, strlen(function_name), retval, 0, NULL, NULL);
}

static zend_always_inline zval* zend_call_method_with_1_params(zend_object *object, zend_class_entry *obj_ce,
		zend_function **fn_proxy, const char *function_name, zval *retval, zval* arg1)
{
	return zend_call_method(object, obj_ce, fn_proxy, function_name, strlen(function_name), retval, 1, arg1, NULL);
}

static zend_always_inline zval* zend_call_method_with_2_params(zend_object *object, zend_class_entry *obj_ce,
		zend_function **fn_proxy, const char *function_name, zval *retval, zval* arg1, zval* arg2)
{
	return zend_call_method(object, obj_ce, fn_proxy, function_name, strlen(function_name), retval, 2, arg1, arg2);
}

ZEND_API void zend_user_it_rewind(zend_object_iterator *_iter);
ZEND_API zend_result zend_user_it_valid(zend_object_iterator *_iter);
ZEND_API void zend_user_it_get_current_key(zend_object_iterator *_iter, zval *key);
ZEND_API zval *zend_user_it_get_current_data(zend_object_iterator *_iter);
ZEND_API void zend_user_it_move_forward(zend_object_iterator *_iter);
ZEND_API void zend_user_it_invalidate_current(zend_object_iterator *_iter);
ZEND_API HashTable *zend_user_it_get_gc(zend_object_iterator *_iter, zval **table, int *n);

ZEND_API void zend_user_it_new_iterator(zend_class_entry *ce, zval *object, zval *iterator);
ZEND_API zend_object_iterator *zend_user_it_get_new_iterator(zend_class_entry *ce, zval *object, int by_ref);

ZEND_API void zend_register_interfaces(void);

ZEND_API int zend_user_serialize(zval *object, unsigned char **buffer, size_t *buf_len, zend_serialize_data *data);
ZEND_API int zend_user_unserialize(zval *object, zend_class_entry *ce, const unsigned char *buf, size_t buf_len, zend_unserialize_data *data);

ZEND_API zend_result zend_create_internal_iterator_zval(zval *return_value, zval *obj);

END_EXTERN_C()

#endif /* ZEND_INTERFACES_H */
Zend/zend_types.h000064400000147537151730543350010030 0ustar00/*
   +----------------------------------------------------------------------+
   | Zend Engine                                                          |
   +----------------------------------------------------------------------+
   | Copyright (c) Zend Technologies Ltd. (http://www.zend.com)           |
   +----------------------------------------------------------------------+
   | This source file is subject to version 2.00 of the Zend license,     |
   | that is bundled with this package in the file LICENSE, and is        |
   | available through the world-wide-web at the following url:           |
   | http://www.zend.com/license/2_00.txt.                                |
   | If you did not receive a copy of the Zend license and are unable to  |
   | obtain it through the world-wide-web, please send a note to          |
   | license@zend.com so we can mail you a copy immediately.              |
   +----------------------------------------------------------------------+
   | Authors: Andi Gutmans <andi@php.net>                                 |
   |          Zeev Suraski <zeev@php.net>                                 |
   |          Dmitry Stogov <dmitry@php.net>                              |
   |          Xinchen Hui <laruence@php.net>                              |
   +----------------------------------------------------------------------+
*/

#ifndef ZEND_TYPES_H
#define ZEND_TYPES_H

#include "zend_portability.h"
#include "zend_long.h"
#include <stdbool.h>
#include <stdint.h>

#ifdef __SSE2__
# include <emmintrin.h>
#endif
#if defined(__AVX2__)
# include <immintrin.h>
#endif
#if defined(__aarch64__) || defined(_M_ARM64)
# include <arm_neon.h>
#endif

#ifdef WORDS_BIGENDIAN
# define ZEND_ENDIAN_LOHI(lo, hi)          hi; lo;
# define ZEND_ENDIAN_LOHI_3(lo, mi, hi)    hi; mi; lo;
# define ZEND_ENDIAN_LOHI_4(a, b, c, d)    d; c; b; a;
# define ZEND_ENDIAN_LOHI_C(lo, hi)        hi, lo
# define ZEND_ENDIAN_LOHI_C_3(lo, mi, hi)  hi, mi, lo,
# define ZEND_ENDIAN_LOHI_C_4(a, b, c, d)  d, c, b, a
#else
# define ZEND_ENDIAN_LOHI(lo, hi)          lo; hi;
# define ZEND_ENDIAN_LOHI_3(lo, mi, hi)    lo; mi; hi;
# define ZEND_ENDIAN_LOHI_4(a, b, c, d)    a; b; c; d;
# define ZEND_ENDIAN_LOHI_C(lo, hi)        lo, hi
# define ZEND_ENDIAN_LOHI_C_3(lo, mi, hi)  lo, mi, hi,
# define ZEND_ENDIAN_LOHI_C_4(a, b, c, d)  a, b, c, d
#endif

typedef unsigned char zend_uchar;

typedef enum {
  SUCCESS =  0,
  FAILURE = -1,		/* this MUST stay a negative number, or it may affect functions! */
} ZEND_RESULT_CODE;

typedef ZEND_RESULT_CODE zend_result;

#ifdef ZEND_ENABLE_ZVAL_LONG64
# ifdef ZEND_WIN32
#  define ZEND_SIZE_MAX  _UI64_MAX
# else
#  define ZEND_SIZE_MAX  SIZE_MAX
# endif
#else
# if defined(ZEND_WIN32)
#  define ZEND_SIZE_MAX  _UI32_MAX
# else
#  define ZEND_SIZE_MAX SIZE_MAX
# endif
#endif

#ifdef ZTS
#define ZEND_TLS static TSRM_TLS
#define ZEND_EXT_TLS TSRM_TLS
#else
#define ZEND_TLS static
#define ZEND_EXT_TLS
#endif

typedef struct _zend_object_handlers zend_object_handlers;
typedef struct _zend_class_entry     zend_class_entry;
typedef union  _zend_function        zend_function;
typedef struct _zend_execute_data    zend_execute_data;

typedef struct _zval_struct     zval;

typedef struct _zend_refcounted zend_refcounted;
typedef struct _zend_string     zend_string;
typedef struct _zend_array      zend_array;
typedef struct _zend_object     zend_object;
typedef struct _zend_resource   zend_resource;
typedef struct _zend_reference  zend_reference;
typedef struct _zend_ast_ref    zend_ast_ref;
typedef struct _zend_ast        zend_ast;

typedef int  (*compare_func_t)(const void *, const void *);
typedef void (*swap_func_t)(void *, void *);
typedef void (*sort_func_t)(void *, size_t, size_t, compare_func_t, swap_func_t);
typedef void (*dtor_func_t)(zval *pDest);
typedef void (*copy_ctor_func_t)(zval *pElement);

/*
 * zend_type - is an abstraction layer to represent information about type hint.
 * It shouldn't be used directly. Only through ZEND_TYPE_* macros.
 *
 * ZEND_TYPE_IS_SET()        - checks if there is a type-hint
 * ZEND_TYPE_IS_ONLY_MASK()  - checks if type-hint refer to standard type only
 * ZEND_TYPE_IS_COMPLEX()    - checks if type is a type_list, or contains a class either as a CE or as a name
 * ZEND_TYPE_HAS_NAME()      - checks if type-hint contains some class as zend_string *
 * ZEND_TYPE_HAS_LITERAL_NAME()	- checks if type-hint contains some class as const char *
 * ZEND_TYPE_IS_INTERSECTION() - checks if the type_list represents an intersection type list
 * ZEND_TYPE_IS_UNION()      - checks if the type_list represents a union type list
 *
 * ZEND_TYPE_NAME()       - returns referenced class name
 * ZEND_TYPE_PURE_MASK()  - returns MAY_BE_* type mask
 * ZEND_TYPE_FULL_MASK()  - returns MAY_BE_* type mask together with other flags
 *
 * ZEND_TYPE_ALLOW_NULL() - checks if NULL is allowed
 *
 * ZEND_TYPE_INIT_*() should be used for construction.
 */

typedef struct {
	/* Not using a union here, because there's no good way to initialize them
	 * in a way that is supported in both C and C++ (designated initializers
	 * are only supported since C++20). */
	void *ptr;
	uint32_t type_mask;
	/* TODO: We could use the extra 32-bit of padding on 64-bit systems. */
} zend_type;

typedef struct {
	uint32_t num_types;
	zend_type types[1];
} zend_type_list;

#define _ZEND_TYPE_EXTRA_FLAGS_SHIFT 25
#define _ZEND_TYPE_MASK ((1u << 25) - 1)
/* Only one of these bits may be set. */
#define _ZEND_TYPE_NAME_BIT (1u << 24)
// Used to signify that type.ptr is not a `zend_string*` but a `const char*`,
#define _ZEND_TYPE_LITERAL_NAME_BIT (1u << 23)
#define _ZEND_TYPE_LIST_BIT (1u << 22)
#define _ZEND_TYPE_KIND_MASK (_ZEND_TYPE_LIST_BIT|_ZEND_TYPE_NAME_BIT|_ZEND_TYPE_LITERAL_NAME_BIT)
/* For BC behaviour with iterable type */
#define _ZEND_TYPE_ITERABLE_BIT (1u << 21)
/* Whether the type list is arena allocated */
#define _ZEND_TYPE_ARENA_BIT (1u << 20)
/* Whether the type list is an intersection type */
#define _ZEND_TYPE_INTERSECTION_BIT (1u << 19)
/* Whether the type is a union type */
#define _ZEND_TYPE_UNION_BIT (1u << 18)
/* Type mask excluding the flags above. */
#define _ZEND_TYPE_MAY_BE_MASK ((1u << 18) - 1)
/* Must have same value as MAY_BE_NULL */
#define _ZEND_TYPE_NULLABLE_BIT 0x2u

#define ZEND_TYPE_IS_SET(t) \
	(((t).type_mask & _ZEND_TYPE_MASK) != 0)

/* If a type is complex it means it's either a list with a union or intersection,
 * or the void pointer is a class name */
#define ZEND_TYPE_IS_COMPLEX(t) \
	((((t).type_mask) & _ZEND_TYPE_KIND_MASK) != 0)

#define ZEND_TYPE_HAS_NAME(t) \
	((((t).type_mask) & _ZEND_TYPE_NAME_BIT) != 0)

#define ZEND_TYPE_HAS_LITERAL_NAME(t) \
	((((t).type_mask) & _ZEND_TYPE_LITERAL_NAME_BIT) != 0)

#define ZEND_TYPE_HAS_LIST(t) \
	((((t).type_mask) & _ZEND_TYPE_LIST_BIT) != 0)

#define ZEND_TYPE_IS_ITERABLE_FALLBACK(t) \
	((((t).type_mask) & _ZEND_TYPE_ITERABLE_BIT) != 0)

#define ZEND_TYPE_IS_INTERSECTION(t) \
	((((t).type_mask) & _ZEND_TYPE_INTERSECTION_BIT) != 0)

#define ZEND_TYPE_IS_UNION(t) \
	((((t).type_mask) & _ZEND_TYPE_UNION_BIT) != 0)

#define ZEND_TYPE_USES_ARENA(t) \
	((((t).type_mask) & _ZEND_TYPE_ARENA_BIT) != 0)

#define ZEND_TYPE_IS_ONLY_MASK(t) \
	(ZEND_TYPE_IS_SET(t) && (t).ptr == NULL)

#define ZEND_TYPE_NAME(t) \
	((zend_string *) (t).ptr)

#define ZEND_TYPE_LITERAL_NAME(t) \
	((const char *) (t).ptr)

#define ZEND_TYPE_LIST(t) \
	((zend_type_list *) (t).ptr)

#define ZEND_TYPE_LIST_SIZE(num_types) \
	(sizeof(zend_type_list) + ((num_types) - 1) * sizeof(zend_type))

/* This iterates over a zend_type_list. */
#define ZEND_TYPE_LIST_FOREACH(list, type_ptr) do { \
	const zend_type *_list = (list)->types; \
	const zend_type *_end = _list + (list)->num_types; \
	for (; _list < _end; _list++) { \
		type_ptr = _list;

#define ZEND_TYPE_LIST_FOREACH_MUTABLE(list, type_ptr) do { \
	zend_type *_list = (list)->types; \
	const zend_type *_end = _list + (list)->num_types; \
	for (; _list < _end; _list++) { \
		type_ptr = _list;

#define ZEND_TYPE_LIST_FOREACH_END() \
	} \
} while (0)

/* This iterates over any zend_type. If it's a type list, all list elements will
 * be visited. If it's a single type, only the single type is visited. */
#define ZEND_TYPE_FOREACH(type, type_ptr) do { \
	const zend_type *_cur, *_end; \
	if (ZEND_TYPE_HAS_LIST(type)) { \
		zend_type_list *_list = ZEND_TYPE_LIST(type); \
		_cur = _list->types; \
		_end = _cur + _list->num_types; \
	} else { \
		_cur = &(type); \
		_end = _cur + 1; \
	} \
	do { \
		type_ptr = _cur;


#define ZEND_TYPE_FOREACH_MUTABLE(type, type_ptr) do { \
	zend_type *_cur; \
	const zend_type *_end; \
	if (ZEND_TYPE_HAS_LIST(type)) { \
		zend_type_list *_list = ZEND_TYPE_LIST(type); \
		_cur = _list->types; \
		_end = _cur + _list->num_types; \
	} else { \
		_cur = &(type); \
		_end = _cur + 1; \
	} \
	do { \
		type_ptr = _cur;

#define ZEND_TYPE_FOREACH_END() \
	} while (++_cur < _end); \
} while (0)

#define ZEND_TYPE_SET_PTR(t, _ptr) \
	((t).ptr = (_ptr))

#define ZEND_TYPE_SET_PTR_AND_KIND(t, _ptr, kind_bit) do { \
	(t).ptr = (_ptr); \
	(t).type_mask &= ~_ZEND_TYPE_KIND_MASK; \
	(t).type_mask |= (kind_bit); \
} while (0)

#define ZEND_TYPE_SET_LIST(t, list) \
	ZEND_TYPE_SET_PTR_AND_KIND(t, list, _ZEND_TYPE_LIST_BIT)

/* FULL_MASK() includes the MAY_BE_* type mask, as well as additional metadata bits.
 * The PURE_MASK() only includes the MAY_BE_* type mask. */
#define ZEND_TYPE_FULL_MASK(t) \
	((t).type_mask)

#define ZEND_TYPE_PURE_MASK(t) \
	((t).type_mask & _ZEND_TYPE_MAY_BE_MASK)

#define ZEND_TYPE_FULL_MASK_WITHOUT_NULL(t) \
	((t).type_mask & ~_ZEND_TYPE_NULLABLE_BIT)

#define ZEND_TYPE_PURE_MASK_WITHOUT_NULL(t) \
	((t).type_mask & _ZEND_TYPE_MAY_BE_MASK & ~_ZEND_TYPE_NULLABLE_BIT)

#define ZEND_TYPE_CONTAINS_CODE(t, code) \
	(((t).type_mask & (1u << (code))) != 0)

#define ZEND_TYPE_ALLOW_NULL(t) \
	(((t).type_mask & _ZEND_TYPE_NULLABLE_BIT) != 0)

#if defined(__cplusplus) && defined(_MSC_VER)
# define _ZEND_TYPE_PREFIX zend_type
#else
/* FIXME: We could add (zend_type) here at some point but this breaks in MSVC because
 * (zend_type)(zend_type){} is no longer considered constant. */
# define _ZEND_TYPE_PREFIX
#endif

#define ZEND_TYPE_INIT_NONE(extra_flags) \
	_ZEND_TYPE_PREFIX { NULL, (extra_flags) }

#define ZEND_TYPE_INIT_MASK(_type_mask) \
	_ZEND_TYPE_PREFIX { NULL, (_type_mask) }

#define ZEND_TYPE_INIT_CODE(code, allow_null, extra_flags) \
	ZEND_TYPE_INIT_MASK(((code) == _IS_BOOL ? MAY_BE_BOOL : ( (code) == IS_ITERABLE ? _ZEND_TYPE_ITERABLE_BIT : ((code) == IS_MIXED ? MAY_BE_ANY : (1 << (code))))) \
		| ((allow_null) ? _ZEND_TYPE_NULLABLE_BIT : 0) | (extra_flags))

#define ZEND_TYPE_INIT_PTR(ptr, type_kind, allow_null, extra_flags) \
	_ZEND_TYPE_PREFIX { (void *) (ptr), \
		(type_kind) | ((allow_null) ? _ZEND_TYPE_NULLABLE_BIT : 0) | (extra_flags) }

#define ZEND_TYPE_INIT_PTR_MASK(ptr, type_mask) \
	_ZEND_TYPE_PREFIX { (void *) (ptr), (type_mask) }

#define ZEND_TYPE_INIT_UNION(ptr, extra_flags) \
	_ZEND_TYPE_PREFIX { (void *) (ptr), (_ZEND_TYPE_LIST_BIT|_ZEND_TYPE_UNION_BIT) | (extra_flags) }

#define ZEND_TYPE_INIT_INTERSECTION(ptr, extra_flags) \
	_ZEND_TYPE_PREFIX { (void *) (ptr), (_ZEND_TYPE_LIST_BIT|_ZEND_TYPE_INTERSECTION_BIT) | (extra_flags) }

#define ZEND_TYPE_INIT_CLASS(class_name, allow_null, extra_flags) \
	ZEND_TYPE_INIT_PTR(class_name, _ZEND_TYPE_NAME_BIT, allow_null, extra_flags)

#define ZEND_TYPE_INIT_CLASS_MASK(class_name, type_mask) \
	ZEND_TYPE_INIT_PTR_MASK(class_name, _ZEND_TYPE_NAME_BIT | (type_mask))

#define ZEND_TYPE_INIT_CLASS_CONST(class_name, allow_null, extra_flags) \
	ZEND_TYPE_INIT_PTR(class_name, _ZEND_TYPE_LITERAL_NAME_BIT, allow_null, extra_flags)

#define ZEND_TYPE_INIT_CLASS_CONST_MASK(class_name, type_mask) \
	ZEND_TYPE_INIT_PTR_MASK(class_name, (_ZEND_TYPE_LITERAL_NAME_BIT | (type_mask)))

typedef union _zend_value {
	zend_long         lval;				/* long value */
	double            dval;				/* double value */
	zend_refcounted  *counted;
	zend_string      *str;
	zend_array       *arr;
	zend_object      *obj;
	zend_resource    *res;
	zend_reference   *ref;
	zend_ast_ref     *ast;
	zval             *zv;
	void             *ptr;
	zend_class_entry *ce;
	zend_function    *func;
	struct {
		uint32_t w1;
		uint32_t w2;
	} ww;
} zend_value;

struct _zval_struct {
	zend_value        value;			/* value */
	union {
		uint32_t type_info;
		struct {
			ZEND_ENDIAN_LOHI_3(
				uint8_t    type,			/* active type */
				uint8_t    type_flags,
				union {
					uint16_t  extra;        /* not further specified */
				} u)
		} v;
	} u1;
	union {
		uint32_t     next;                 /* hash collision chain */
		uint32_t     cache_slot;           /* cache slot (for RECV_INIT) */
		uint32_t     opline_num;           /* opline number (for FAST_CALL) */
		uint32_t     lineno;               /* line number (for ast nodes) */
		uint32_t     num_args;             /* arguments number for EX(This) */
		uint32_t     fe_pos;               /* foreach position */
		uint32_t     fe_iter_idx;          /* foreach iterator index */
		uint32_t     guard;                /* recursion and single property guard */
		uint32_t     constant_flags;       /* constant flags */
		uint32_t     extra;                /* not further specified */
	} u2;
};

typedef struct _zend_refcounted_h {
	uint32_t         refcount;			/* reference counter 32-bit */
	union {
		uint32_t type_info;
	} u;
} zend_refcounted_h;

struct _zend_refcounted {
	zend_refcounted_h gc;
};

struct _zend_string {
	zend_refcounted_h gc;
	zend_ulong        h;                /* hash value */
	size_t            len;
	char              val[1];
};

typedef struct _Bucket {
	zval              val;
	zend_ulong        h;                /* hash value (or numeric index)   */
	zend_string      *key;              /* string key or NULL for numerics */
} Bucket;

typedef struct _zend_array HashTable;

struct _zend_array {
	zend_refcounted_h gc;
	union {
		struct {
			ZEND_ENDIAN_LOHI_4(
				uint8_t    flags,
				uint8_t    _unused,
				uint8_t    nIteratorsCount,
				uint8_t    _unused2)
		} v;
		uint32_t flags;
	} u;
	uint32_t          nTableMask;
	union {
		uint32_t     *arHash;   /* hash table (allocated above this pointer) */
		Bucket       *arData;   /* array of hash buckets */
		zval         *arPacked; /* packed array of zvals */
	};
	uint32_t          nNumUsed;
	uint32_t          nNumOfElements;
	uint32_t          nTableSize;
	uint32_t          nInternalPointer;
	zend_long         nNextFreeElement;
	dtor_func_t       pDestructor;
};

/*
 * HashTable Data Layout
 * =====================
 *
 *                 +=============================+
 *                 | HT_HASH(ht, ht->nTableMask) |                   +=============================+
 *                 | ...                         |                   | HT_INVALID_IDX              |
 *                 | HT_HASH(ht, -1)             |                   | HT_INVALID_IDX              |
 *                 +-----------------------------+                   +-----------------------------+
 * ht->arData ---> | Bucket[0]                   | ht->arPacked ---> | ZVAL[0]                     |
 *                 | ...                         |                   | ...                         |
 *                 | Bucket[ht->nTableSize-1]    |                   | ZVAL[ht->nTableSize-1]      |
 *                 +=============================+                   +=============================+
 */

#define HT_INVALID_IDX ((uint32_t) -1)

#define HT_MIN_MASK ((uint32_t) -2)
#define HT_MIN_SIZE 8

/* HT_MAX_SIZE is chosen to satisfy the following constraints:
 * - HT_SIZE_TO_MASK(HT_MAX_SIZE) != 0
 * - HT_SIZE_EX(HT_MAX_SIZE, HT_SIZE_TO_MASK(HT_MAX_SIZE)) does not overflow or
 *   wrapparound, and is <= the addressable space size
 * - HT_MAX_SIZE must be a power of two:
 *   (nTableSize<HT_MAX_SIZE ? nTableSize+nTableSize : nTableSize) <= HT_MAX_SIZE
 */
#if SIZEOF_SIZE_T == 4
# define HT_MAX_SIZE 0x02000000
# define HT_HASH_TO_BUCKET_EX(data, idx) \
	((Bucket*)((char*)(data) + (idx)))
# define HT_IDX_TO_HASH(idx) \
	((idx) * sizeof(Bucket))
# define HT_HASH_TO_IDX(idx) \
	((idx) / sizeof(Bucket))
#elif SIZEOF_SIZE_T == 8
# define HT_MAX_SIZE 0x40000000
# define HT_HASH_TO_BUCKET_EX(data, idx) \
	((data) + (idx))
# define HT_IDX_TO_HASH(idx) \
	(idx)
# define HT_HASH_TO_IDX(idx) \
	(idx)
#else
# error "Unknown SIZEOF_SIZE_T"
#endif

#define HT_HASH_EX(data, idx) \
	((uint32_t*)(data))[(int32_t)(idx)]
#define HT_HASH(ht, idx) \
	HT_HASH_EX((ht)->arHash, idx)

#define HT_SIZE_TO_MASK(nTableSize) \
	((uint32_t)(-((nTableSize) + (nTableSize))))
#define HT_HASH_SIZE(nTableMask) \
	(((size_t)-(uint32_t)(nTableMask)) * sizeof(uint32_t))
#define HT_DATA_SIZE(nTableSize) \
	((size_t)(nTableSize) * sizeof(Bucket))
#define HT_SIZE_EX(nTableSize, nTableMask) \
	(HT_DATA_SIZE((nTableSize)) + HT_HASH_SIZE((nTableMask)))
#define HT_SIZE(ht) \
	HT_SIZE_EX((ht)->nTableSize, (ht)->nTableMask)
#define HT_USED_SIZE(ht) \
	(HT_HASH_SIZE((ht)->nTableMask) + ((size_t)(ht)->nNumUsed * sizeof(Bucket)))
#define HT_PACKED_DATA_SIZE(nTableSize) \
	((size_t)(nTableSize) * sizeof(zval))
#define HT_PACKED_SIZE_EX(nTableSize, nTableMask) \
	(HT_PACKED_DATA_SIZE((nTableSize)) + HT_HASH_SIZE((nTableMask)))
#define HT_PACKED_SIZE(ht) \
	HT_PACKED_SIZE_EX((ht)->nTableSize, (ht)->nTableMask)
#define HT_PACKED_USED_SIZE(ht) \
	(HT_HASH_SIZE((ht)->nTableMask) + ((size_t)(ht)->nNumUsed * sizeof(zval)))
#if defined(__AVX2__)
# define HT_HASH_RESET(ht) do { \
		char *p = (char*)&HT_HASH(ht, (ht)->nTableMask); \
		size_t size = HT_HASH_SIZE((ht)->nTableMask); \
		__m256i ymm0 = _mm256_setzero_si256(); \
		ymm0 = _mm256_cmpeq_epi64(ymm0, ymm0); \
		ZEND_ASSERT(size >= 64 && ((size & 0x3f) == 0)); \
		do { \
			_mm256_storeu_si256((__m256i*)p, ymm0); \
			_mm256_storeu_si256((__m256i*)(p+32), ymm0); \
			p += 64; \
			size -= 64; \
		} while (size != 0); \
	} while (0)
#elif defined(__SSE2__)
# define HT_HASH_RESET(ht) do { \
		char *p = (char*)&HT_HASH(ht, (ht)->nTableMask); \
		size_t size = HT_HASH_SIZE((ht)->nTableMask); \
		__m128i xmm0 = _mm_setzero_si128(); \
		xmm0 = _mm_cmpeq_epi8(xmm0, xmm0); \
		ZEND_ASSERT(size >= 64 && ((size & 0x3f) == 0)); \
		do { \
			_mm_storeu_si128((__m128i*)p, xmm0); \
			_mm_storeu_si128((__m128i*)(p+16), xmm0); \
			_mm_storeu_si128((__m128i*)(p+32), xmm0); \
			_mm_storeu_si128((__m128i*)(p+48), xmm0); \
			p += 64; \
			size -= 64; \
		} while (size != 0); \
	} while (0)
#elif defined(__aarch64__) || defined(_M_ARM64)
# define HT_HASH_RESET(ht) do { \
		char *p = (char*)&HT_HASH(ht, (ht)->nTableMask); \
		size_t size = HT_HASH_SIZE((ht)->nTableMask); \
		int32x4_t t = vdupq_n_s32(-1); \
		ZEND_ASSERT(size >= 64 && ((size & 0x3f) == 0)); \
		do { \
			vst1q_s32((int32_t*)p, t); \
			vst1q_s32((int32_t*)(p+16), t); \
			vst1q_s32((int32_t*)(p+32), t); \
			vst1q_s32((int32_t*)(p+48), t); \
			p += 64; \
			size -= 64; \
		} while (size != 0); \
	} while (0)
#else
# define HT_HASH_RESET(ht) \
	memset(&HT_HASH(ht, (ht)->nTableMask), HT_INVALID_IDX, HT_HASH_SIZE((ht)->nTableMask))
#endif
#define HT_HASH_RESET_PACKED(ht) do { \
		HT_HASH(ht, -2) = HT_INVALID_IDX; \
		HT_HASH(ht, -1) = HT_INVALID_IDX; \
	} while (0)
#define HT_HASH_TO_BUCKET(ht, idx) \
	HT_HASH_TO_BUCKET_EX((ht)->arData, idx)

#define HT_SET_DATA_ADDR(ht, ptr) do { \
		(ht)->arData = (Bucket*)(((char*)(ptr)) + HT_HASH_SIZE((ht)->nTableMask)); \
	} while (0)
#define HT_GET_DATA_ADDR(ht) \
	((char*)((ht)->arData) - HT_HASH_SIZE((ht)->nTableMask))

typedef uint32_t HashPosition;

typedef struct _HashTableIterator {
	HashTable    *ht;
	HashPosition  pos;
	uint32_t      next_copy; // circular linked list via index into EG(ht_iterators)
} HashTableIterator;

struct _zend_object {
	zend_refcounted_h gc;
	uint32_t          handle; // TODO: may be removed ???
	uint32_t          extra_flags; /* OBJ_EXTRA_FLAGS() */
	zend_class_entry *ce;
	const zend_object_handlers *handlers;
	HashTable        *properties;
	zval              properties_table[1];
};

struct _zend_resource {
	zend_refcounted_h gc;
	zend_long         handle; // TODO: may be removed ???
	int               type;
	void             *ptr;
};

typedef struct {
	size_t num;
	size_t num_allocated;
	struct _zend_property_info *ptr[1];
} zend_property_info_list;

typedef union {
	struct _zend_property_info *ptr;
	uintptr_t list;
} zend_property_info_source_list;

#define ZEND_PROPERTY_INFO_SOURCE_FROM_LIST(list) (0x1 | (uintptr_t) (list))
#define ZEND_PROPERTY_INFO_SOURCE_TO_LIST(list) ((zend_property_info_list *) ((list) & ~0x1))
#define ZEND_PROPERTY_INFO_SOURCE_IS_LIST(list) ((list) & 0x1)

struct _zend_reference {
	zend_refcounted_h              gc;
	zval                           val;
	zend_property_info_source_list sources;
};

struct _zend_ast_ref {
	zend_refcounted_h gc;
	/*zend_ast        ast; zend_ast follows the zend_ast_ref structure */
};

/* Regular data types: Must be in sync with zend_variables.c. */
#define IS_UNDEF					0
#define IS_NULL						1
#define IS_FALSE					2
#define IS_TRUE						3
#define IS_LONG						4
#define IS_DOUBLE					5
#define IS_STRING					6
#define IS_ARRAY					7
#define IS_OBJECT					8
#define IS_RESOURCE					9
#define IS_REFERENCE				10
#define IS_CONSTANT_AST				11 /* Constant expressions */

/* Fake types used only for type hinting.
 * These are allowed to overlap with the types below. */
#define IS_CALLABLE					12
#define IS_ITERABLE					13
#define IS_VOID						14
#define IS_STATIC					15
#define IS_MIXED					16
#define IS_NEVER					17

/* internal types */
#define IS_INDIRECT             	12
#define IS_PTR						13
#define IS_ALIAS_PTR				14
#define _IS_ERROR					15

/* used for casts */
#define _IS_BOOL					18
#define _IS_NUMBER					19

/* guard flags */
#define ZEND_GUARD_PROPERTY_GET		(1<<0)
#define ZEND_GUARD_PROPERTY_SET		(1<<1)
#define ZEND_GUARD_PROPERTY_UNSET	(1<<2)
#define ZEND_GUARD_PROPERTY_ISSET	(1<<3)
#define ZEND_GUARD_PROPERTY_HOOK	(1<<4)
#define ZEND_GUARD_PROPERTY_MASK	31
#define ZEND_GUARD_RECURSION_DEBUG	(1<<5)
#define ZEND_GUARD_RECURSION_EXPORT	(1<<6)
#define ZEND_GUARD_RECURSION_JSON	(1<<7)

#define ZEND_GUARD_RECURSION_TYPE(t) ZEND_GUARD_RECURSION_ ## t

#define ZEND_GUARD_IS_RECURSIVE(pg, t)			((*pg & ZEND_GUARD_RECURSION_TYPE(t)) != 0)
#define ZEND_GUARD_PROTECT_RECURSION(pg, t)		*pg |= ZEND_GUARD_RECURSION_TYPE(t)
#define ZEND_GUARD_UNPROTECT_RECURSION(pg, t)	*pg &= ~ZEND_GUARD_RECURSION_TYPE(t)

static zend_always_inline uint8_t zval_get_type(const zval* pz) {
	return pz->u1.v.type;
}

#define ZEND_SAME_FAKE_TYPE(faketype, realtype) ( \
	(faketype) == (realtype) \
	|| ((faketype) == _IS_BOOL && ((realtype) == IS_TRUE || (realtype) == IS_FALSE)) \
)

/* we should never set just Z_TYPE, we should set Z_TYPE_INFO */
#define Z_TYPE(zval)				zval_get_type(&(zval))
#define Z_TYPE_P(zval_p)			Z_TYPE(*(zval_p))

#define Z_TYPE_FLAGS(zval)			(zval).u1.v.type_flags
#define Z_TYPE_FLAGS_P(zval_p)		Z_TYPE_FLAGS(*(zval_p))

#define Z_TYPE_EXTRA(zval)			(zval).u1.v.u.extra
#define Z_TYPE_EXTRA_P(zval_p)		Z_TYPE_EXTRA(*(zval_p))

#define Z_TYPE_INFO(zval)			(zval).u1.type_info
#define Z_TYPE_INFO_P(zval_p)		Z_TYPE_INFO(*(zval_p))

#define Z_NEXT(zval)				(zval).u2.next
#define Z_NEXT_P(zval_p)			Z_NEXT(*(zval_p))

#define Z_CACHE_SLOT(zval)			(zval).u2.cache_slot
#define Z_CACHE_SLOT_P(zval_p)		Z_CACHE_SLOT(*(zval_p))

#define Z_LINENO(zval)				(zval).u2.lineno
#define Z_LINENO_P(zval_p)			Z_LINENO(*(zval_p))

#define Z_OPLINE_NUM(zval)			(zval).u2.opline_num
#define Z_OPLINE_NUM_P(zval_p)		Z_OPLINE_NUM(*(zval_p))

#define Z_FE_POS(zval)				(zval).u2.fe_pos
#define Z_FE_POS_P(zval_p)			Z_FE_POS(*(zval_p))

#define Z_FE_ITER(zval)				(zval).u2.fe_iter_idx
#define Z_FE_ITER_P(zval_p)			Z_FE_ITER(*(zval_p))

#define Z_GUARD(zval)				(zval).u2.guard
#define Z_GUARD_P(zval_p)			Z_GUARD(*(zval_p))

#define Z_CONSTANT_FLAGS(zval)		(zval).u2.constant_flags
#define Z_CONSTANT_FLAGS_P(zval_p)	Z_CONSTANT_FLAGS(*(zval_p))

#define Z_EXTRA(zval)				(zval).u2.extra
#define Z_EXTRA_P(zval_p)			Z_EXTRA(*(zval_p))

#define Z_COUNTED(zval)				(zval).value.counted
#define Z_COUNTED_P(zval_p)			Z_COUNTED(*(zval_p))

#define Z_TYPE_MASK					0xff
#define Z_TYPE_FLAGS_MASK			0xff00

#define Z_TYPE_FLAGS_SHIFT			8
#define Z_TYPE_INFO_EXTRA_SHIFT		16

#define GC_REFCOUNT(p)				zend_gc_refcount(&(p)->gc)
#define GC_SET_REFCOUNT(p, rc)		zend_gc_set_refcount(&(p)->gc, rc)
#define GC_ADDREF(p)				zend_gc_addref(&(p)->gc)
#define GC_DELREF(p)				zend_gc_delref(&(p)->gc)
#define GC_ADDREF_EX(p, rc)			zend_gc_addref_ex(&(p)->gc, rc)
#define GC_DELREF_EX(p, rc)			zend_gc_delref_ex(&(p)->gc, rc)
#define GC_TRY_ADDREF(p)			zend_gc_try_addref(&(p)->gc)
#define GC_TRY_DELREF(p)			zend_gc_try_delref(&(p)->gc)

#define GC_DTOR(p) \
	do { \
		zend_refcounted_h *_p = &(p)->gc; \
		if (zend_gc_delref(_p) == 0) { \
			rc_dtor_func((zend_refcounted *)_p); \
		} else { \
			gc_check_possible_root((zend_refcounted *)_p); \
		} \
	} while (0)

#define GC_DTOR_NO_REF(p) \
	do { \
		zend_refcounted_h *_p = &(p)->gc; \
		if (zend_gc_delref(_p) == 0) { \
			rc_dtor_func((zend_refcounted *)_p); \
		} else { \
			gc_check_possible_root_no_ref((zend_refcounted *)_p); \
		} \
	} while (0)

#define GC_TRY_DTOR_NO_REF(p) \
	do { \
		zend_refcounted_h *_p = &(p)->gc; \
		if (!(_p->u.type_info & GC_IMMUTABLE)) { \
			if (zend_gc_delref(_p) == 0) { \
				rc_dtor_func((zend_refcounted *)_p); \
			} else { \
				gc_check_possible_root_no_ref((zend_refcounted *)_p); \
			} \
		} \
	} while (0)

#define GC_TYPE_MASK				0x0000000f
#define GC_FLAGS_MASK				0x000003f0
#define GC_INFO_MASK				0xfffffc00
#define GC_FLAGS_SHIFT				0
#define GC_INFO_SHIFT				10

static zend_always_inline uint8_t zval_gc_type(uint32_t gc_type_info) {
	return (gc_type_info & GC_TYPE_MASK);
}

static zend_always_inline uint32_t zval_gc_flags(uint32_t gc_type_info) {
	return (gc_type_info >> GC_FLAGS_SHIFT) & (GC_FLAGS_MASK >> GC_FLAGS_SHIFT);
}

static zend_always_inline uint32_t zval_gc_info(uint32_t gc_type_info) {
	return (gc_type_info >> GC_INFO_SHIFT);
}

#define GC_TYPE_INFO(p)				(p)->gc.u.type_info
#define GC_TYPE(p)					zval_gc_type(GC_TYPE_INFO(p))
#define GC_FLAGS(p)					zval_gc_flags(GC_TYPE_INFO(p))
#define GC_INFO(p)					zval_gc_info(GC_TYPE_INFO(p))

#define GC_ADD_FLAGS(p, flags) do { \
		GC_TYPE_INFO(p) |= (flags) << GC_FLAGS_SHIFT; \
	} while (0)
#define GC_DEL_FLAGS(p, flags) do { \
		GC_TYPE_INFO(p) &= ~((flags) << GC_FLAGS_SHIFT); \
	} while (0)

#define Z_GC_TYPE(zval)				GC_TYPE(Z_COUNTED(zval))
#define Z_GC_TYPE_P(zval_p)			Z_GC_TYPE(*(zval_p))

#define Z_GC_FLAGS(zval)			GC_FLAGS(Z_COUNTED(zval))
#define Z_GC_FLAGS_P(zval_p)		Z_GC_FLAGS(*(zval_p))

#define Z_GC_INFO(zval)				GC_INFO(Z_COUNTED(zval))
#define Z_GC_INFO_P(zval_p)			Z_GC_INFO(*(zval_p))
#define Z_GC_TYPE_INFO(zval)		GC_TYPE_INFO(Z_COUNTED(zval))
#define Z_GC_TYPE_INFO_P(zval_p)	Z_GC_TYPE_INFO(*(zval_p))

/* zval_gc_flags(zval.value->gc.u.type_info) (common flags) */
#define GC_NOT_COLLECTABLE			(1<<4)
#define GC_PROTECTED                (1<<5) /* used for recursion detection */
#define GC_IMMUTABLE                (1<<6) /* can't be changed in place */
#define GC_PERSISTENT               (1<<7) /* allocated using malloc */
#define GC_PERSISTENT_LOCAL         (1<<8) /* persistent, but thread-local */

#define GC_NULL						(IS_NULL         | (GC_NOT_COLLECTABLE << GC_FLAGS_SHIFT))
#define GC_STRING					(IS_STRING       | (GC_NOT_COLLECTABLE << GC_FLAGS_SHIFT))
#define GC_ARRAY					IS_ARRAY
#define GC_OBJECT					IS_OBJECT
#define GC_RESOURCE					(IS_RESOURCE     | (GC_NOT_COLLECTABLE << GC_FLAGS_SHIFT))
#define GC_REFERENCE				(IS_REFERENCE    | (GC_NOT_COLLECTABLE << GC_FLAGS_SHIFT))
#define GC_CONSTANT_AST				(IS_CONSTANT_AST | (GC_NOT_COLLECTABLE << GC_FLAGS_SHIFT))

/* zval.u1.v.type_flags */
#define IS_TYPE_REFCOUNTED			(1<<0)
#define IS_TYPE_COLLECTABLE			(1<<1)

#if 1
/* This optimized version assumes that we have a single "type_flag" */
/* IS_TYPE_COLLECTABLE may be used only with IS_TYPE_REFCOUNTED */
# define Z_TYPE_INFO_REFCOUNTED(t)	(((t) & Z_TYPE_FLAGS_MASK) != 0)
#else
# define Z_TYPE_INFO_REFCOUNTED(t)	(((t) & (IS_TYPE_REFCOUNTED << Z_TYPE_FLAGS_SHIFT)) != 0)
#endif

/* extended types */
#define IS_INTERNED_STRING_EX		IS_STRING

#define IS_STRING_EX				(IS_STRING         | (IS_TYPE_REFCOUNTED << Z_TYPE_FLAGS_SHIFT))
#define IS_ARRAY_EX					(IS_ARRAY          | (IS_TYPE_REFCOUNTED << Z_TYPE_FLAGS_SHIFT) | (IS_TYPE_COLLECTABLE << Z_TYPE_FLAGS_SHIFT))
#define IS_OBJECT_EX				(IS_OBJECT         | (IS_TYPE_REFCOUNTED << Z_TYPE_FLAGS_SHIFT) | (IS_TYPE_COLLECTABLE << Z_TYPE_FLAGS_SHIFT))
#define IS_RESOURCE_EX				(IS_RESOURCE       | (IS_TYPE_REFCOUNTED << Z_TYPE_FLAGS_SHIFT))
#define IS_REFERENCE_EX				(IS_REFERENCE      | (IS_TYPE_REFCOUNTED << Z_TYPE_FLAGS_SHIFT) | (IS_TYPE_COLLECTABLE << Z_TYPE_FLAGS_SHIFT))

#define IS_CONSTANT_AST_EX			(IS_CONSTANT_AST   | (IS_TYPE_REFCOUNTED << Z_TYPE_FLAGS_SHIFT))

/* string flags (zval.value->gc.u.flags) */
#define IS_STR_CLASS_NAME_MAP_PTR   GC_PROTECTED  /* refcount is a map_ptr offset of class_entry */
#define IS_STR_INTERNED				GC_IMMUTABLE  /* interned string */
#define IS_STR_PERSISTENT			GC_PERSISTENT /* allocated using malloc */
#define IS_STR_PERMANENT        	(1<<8)        /* relives request boundary */
#define IS_STR_VALID_UTF8           (1<<9)        /* valid UTF-8 according to PCRE */

/* array flags */
#define IS_ARRAY_IMMUTABLE			GC_IMMUTABLE
#define IS_ARRAY_PERSISTENT			GC_PERSISTENT

/* object flags (zval.value->gc.u.flags) */
#define IS_OBJ_WEAKLY_REFERENCED	GC_PERSISTENT
#define IS_OBJ_DESTRUCTOR_CALLED	(1<<8)
#define IS_OBJ_FREE_CALLED			(1<<9)

#define OBJ_FLAGS(obj)              GC_FLAGS(obj)

/* object extra flags (zend_object.flags) */

#define IS_OBJ_LAZY_UNINITIALIZED   (1U<<31) /* Virtual proxy or uninitialized Ghost */
#define IS_OBJ_LAZY_PROXY           (1U<<30) /* Virtual proxy (may be initialized) */

#define OBJ_EXTRA_FLAGS(obj)		((obj)->extra_flags)

/* Fast class cache */
#define ZSTR_HAS_CE_CACHE(s)		(GC_FLAGS(s) & IS_STR_CLASS_NAME_MAP_PTR)
#define ZSTR_GET_CE_CACHE(s)		ZSTR_GET_CE_CACHE_EX(s, 1)
#define ZSTR_SET_CE_CACHE(s, ce)	ZSTR_SET_CE_CACHE_EX(s, ce, 1)

#define ZSTR_VALID_CE_CACHE(s)		EXPECTED((GC_REFCOUNT(s)-1)/sizeof(void *) < CG(map_ptr_last))

#define ZSTR_GET_CE_CACHE_EX(s, validate) \
	((!(validate) || ZSTR_VALID_CE_CACHE(s)) ? GET_CE_CACHE(GC_REFCOUNT(s)) : NULL)

#define ZSTR_SET_CE_CACHE_EX(s, ce, validate) do { \
		if (!(validate) || ZSTR_VALID_CE_CACHE(s)) { \
			ZEND_ASSERT((validate) || ZSTR_VALID_CE_CACHE(s)); \
			SET_CE_CACHE(GC_REFCOUNT(s), ce); \
		} \
	} while (0)

#define GET_CE_CACHE(ce_cache) \
	(*(zend_class_entry **)ZEND_MAP_PTR_OFFSET2PTR(ce_cache))

#define SET_CE_CACHE(ce_cache, ce) do { \
		*((zend_class_entry **)ZEND_MAP_PTR_OFFSET2PTR(ce_cache)) = ce; \
	} while (0)

/* Recursion protection macros must be used only for arrays and objects */
#define GC_IS_RECURSIVE(p) \
	(GC_FLAGS(p) & GC_PROTECTED)

#define GC_PROTECT_RECURSION(p) do { \
		GC_ADD_FLAGS(p, GC_PROTECTED); \
	} while (0)

#define GC_UNPROTECT_RECURSION(p) do { \
		GC_DEL_FLAGS(p, GC_PROTECTED); \
	} while (0)

#define GC_TRY_PROTECT_RECURSION(p) do { \
		if (!(GC_FLAGS(p) & GC_IMMUTABLE)) GC_PROTECT_RECURSION(p); \
	} while (0)

#define GC_TRY_UNPROTECT_RECURSION(p) do { \
		if (!(GC_FLAGS(p) & GC_IMMUTABLE)) GC_UNPROTECT_RECURSION(p); \
	} while (0)

#define Z_IS_RECURSIVE(zval)        GC_IS_RECURSIVE(Z_COUNTED(zval))
#define Z_PROTECT_RECURSION(zval)   GC_PROTECT_RECURSION(Z_COUNTED(zval))
#define Z_UNPROTECT_RECURSION(zval) GC_UNPROTECT_RECURSION(Z_COUNTED(zval))
#define Z_IS_RECURSIVE_P(zv)        Z_IS_RECURSIVE(*(zv))
#define Z_PROTECT_RECURSION_P(zv)   Z_PROTECT_RECURSION(*(zv))
#define Z_UNPROTECT_RECURSION_P(zv) Z_UNPROTECT_RECURSION(*(zv))

#define ZEND_GUARD_OR_GC_IS_RECURSIVE(pg, t, zobj) \
	(pg ? ZEND_GUARD_IS_RECURSIVE(pg, t) : GC_IS_RECURSIVE(zobj))

#define ZEND_GUARD_OR_GC_PROTECT_RECURSION(pg, t, zobj) do { \
		if (pg) { \
			ZEND_GUARD_PROTECT_RECURSION(pg, t); \
		} else { \
			GC_PROTECT_RECURSION(zobj); \
		} \
	} while(0)

#define ZEND_GUARD_OR_GC_UNPROTECT_RECURSION(pg, t, zobj) do { \
		if (pg) { \
			ZEND_GUARD_UNPROTECT_RECURSION(pg, t); \
		} else { \
			GC_UNPROTECT_RECURSION(zobj); \
		} \
	} while(0)

/* All data types < IS_STRING have their constructor/destructors skipped */
#define Z_CONSTANT(zval)			(Z_TYPE(zval) == IS_CONSTANT_AST)
#define Z_CONSTANT_P(zval_p)		Z_CONSTANT(*(zval_p))

#if 1
/* This optimized version assumes that we have a single "type_flag" */
/* IS_TYPE_COLLECTABLE may be used only with IS_TYPE_REFCOUNTED */
#define Z_REFCOUNTED(zval)			(Z_TYPE_FLAGS(zval) != 0)
#else
#define Z_REFCOUNTED(zval)			((Z_TYPE_FLAGS(zval) & IS_TYPE_REFCOUNTED) != 0)
#endif
#define Z_REFCOUNTED_P(zval_p)		Z_REFCOUNTED(*(zval_p))

#define Z_COLLECTABLE(zval)			((Z_TYPE_FLAGS(zval) & IS_TYPE_COLLECTABLE) != 0)
#define Z_COLLECTABLE_P(zval_p)		Z_COLLECTABLE(*(zval_p))

/* deprecated: (COPYABLE is the same as IS_ARRAY) */
#define Z_COPYABLE(zval)			(Z_TYPE(zval) == IS_ARRAY)
#define Z_COPYABLE_P(zval_p)		Z_COPYABLE(*(zval_p))

/* deprecated: (IMMUTABLE is the same as IS_ARRAY && !REFCOUNTED) */
#define Z_IMMUTABLE(zval)			(Z_TYPE_INFO(zval) == IS_ARRAY)
#define Z_IMMUTABLE_P(zval_p)		Z_IMMUTABLE(*(zval_p))
#define Z_OPT_IMMUTABLE(zval)		Z_IMMUTABLE(zval_p)
#define Z_OPT_IMMUTABLE_P(zval_p)	Z_IMMUTABLE(*(zval_p))

/* the following Z_OPT_* macros make better code when Z_TYPE_INFO accessed before */
#define Z_OPT_TYPE(zval)			(Z_TYPE_INFO(zval) & Z_TYPE_MASK)
#define Z_OPT_TYPE_P(zval_p)		Z_OPT_TYPE(*(zval_p))

#define Z_OPT_CONSTANT(zval)		(Z_OPT_TYPE(zval) == IS_CONSTANT_AST)
#define Z_OPT_CONSTANT_P(zval_p)	Z_OPT_CONSTANT(*(zval_p))

#define Z_OPT_REFCOUNTED(zval)		Z_TYPE_INFO_REFCOUNTED(Z_TYPE_INFO(zval))
#define Z_OPT_REFCOUNTED_P(zval_p)	Z_OPT_REFCOUNTED(*(zval_p))

#define Z_OPT_COLLECTABLE(zval)		((Z_TYPE_INFO(zval) & (IS_TYPE_COLLECTABLE << Z_TYPE_FLAGS_SHIFT)) != 0)
#define Z_OPT_COLLECTABLE_P(zval_p)	Z_OPT_COLLECTABLE(*(zval_p))

/* deprecated: (COPYABLE is the same as IS_ARRAY) */
#define Z_OPT_COPYABLE(zval)		(Z_OPT_TYPE(zval) == IS_ARRAY)
#define Z_OPT_COPYABLE_P(zval_p)	Z_OPT_COPYABLE(*(zval_p))

#define Z_OPT_ISREF(zval)			(Z_OPT_TYPE(zval) == IS_REFERENCE)
#define Z_OPT_ISREF_P(zval_p)		Z_OPT_ISREF(*(zval_p))

#define Z_ISREF(zval)				(Z_TYPE(zval) == IS_REFERENCE)
#define Z_ISREF_P(zval_p)			Z_ISREF(*(zval_p))

#define Z_ISUNDEF(zval)				(Z_TYPE(zval) == IS_UNDEF)
#define Z_ISUNDEF_P(zval_p)			Z_ISUNDEF(*(zval_p))

#define Z_ISNULL(zval)				(Z_TYPE(zval) == IS_NULL)
#define Z_ISNULL_P(zval_p)			Z_ISNULL(*(zval_p))

#define Z_ISERROR(zval)				(Z_TYPE(zval) == _IS_ERROR)
#define Z_ISERROR_P(zval_p)			Z_ISERROR(*(zval_p))

#define Z_LVAL(zval)				(zval).value.lval
#define Z_LVAL_P(zval_p)			Z_LVAL(*(zval_p))

#define Z_DVAL(zval)				(zval).value.dval
#define Z_DVAL_P(zval_p)			Z_DVAL(*(zval_p))

#define Z_STR(zval)					(zval).value.str
#define Z_STR_P(zval_p)				Z_STR(*(zval_p))

#define Z_STRVAL(zval)				ZSTR_VAL(Z_STR(zval))
#define Z_STRVAL_P(zval_p)			Z_STRVAL(*(zval_p))

#define Z_STRLEN(zval)				ZSTR_LEN(Z_STR(zval))
#define Z_STRLEN_P(zval_p)			Z_STRLEN(*(zval_p))

#define Z_STRHASH(zval)				ZSTR_HASH(Z_STR(zval))
#define Z_STRHASH_P(zval_p)			Z_STRHASH(*(zval_p))

#define Z_ARR(zval)					(zval).value.arr
#define Z_ARR_P(zval_p)				Z_ARR(*(zval_p))

#define Z_ARRVAL(zval)				Z_ARR(zval)
#define Z_ARRVAL_P(zval_p)			Z_ARRVAL(*(zval_p))

#define Z_OBJ(zval)					(zval).value.obj
#define Z_OBJ_P(zval_p)				Z_OBJ(*(zval_p))

#define Z_OBJ_HT(zval)				Z_OBJ(zval)->handlers
#define Z_OBJ_HT_P(zval_p)			Z_OBJ_HT(*(zval_p))

#define Z_OBJ_HANDLER(zval, hf)		Z_OBJ_HT((zval))->hf
#define Z_OBJ_HANDLER_P(zv_p, hf)	Z_OBJ_HANDLER(*(zv_p), hf)

#define Z_OBJ_HANDLE(zval)          (Z_OBJ((zval)))->handle
#define Z_OBJ_HANDLE_P(zval_p)      Z_OBJ_HANDLE(*(zval_p))

#define Z_OBJCE(zval)				(Z_OBJ(zval)->ce)
#define Z_OBJCE_P(zval_p)			Z_OBJCE(*(zval_p))

#define Z_OBJPROP(zval)				Z_OBJ_HT((zval))->get_properties(Z_OBJ(zval))
#define Z_OBJPROP_P(zval_p)			Z_OBJPROP(*(zval_p))

#define Z_RES(zval)					(zval).value.res
#define Z_RES_P(zval_p)				Z_RES(*zval_p)

#define Z_RES_HANDLE(zval)			Z_RES(zval)->handle
#define Z_RES_HANDLE_P(zval_p)		Z_RES_HANDLE(*zval_p)

#define Z_RES_TYPE(zval)			Z_RES(zval)->type
#define Z_RES_TYPE_P(zval_p)		Z_RES_TYPE(*zval_p)

#define Z_RES_VAL(zval)				Z_RES(zval)->ptr
#define Z_RES_VAL_P(zval_p)			Z_RES_VAL(*zval_p)

#define Z_REF(zval)					(zval).value.ref
#define Z_REF_P(zval_p)				Z_REF(*(zval_p))

#define Z_REFVAL(zval)				&Z_REF(zval)->val
#define Z_REFVAL_P(zval_p)			Z_REFVAL(*(zval_p))

#define Z_AST(zval)					(zval).value.ast
#define Z_AST_P(zval_p)				Z_AST(*(zval_p))

#define GC_AST(p)					((zend_ast*)(((char*)p) + sizeof(zend_ast_ref)))

#define Z_ASTVAL(zval)				GC_AST(Z_AST(zval))
#define Z_ASTVAL_P(zval_p)			Z_ASTVAL(*(zval_p))

#define Z_INDIRECT(zval)			(zval).value.zv
#define Z_INDIRECT_P(zval_p)		Z_INDIRECT(*(zval_p))

#define Z_CE(zval)					(zval).value.ce
#define Z_CE_P(zval_p)				Z_CE(*(zval_p))

#define Z_FUNC(zval)				(zval).value.func
#define Z_FUNC_P(zval_p)			Z_FUNC(*(zval_p))

#define Z_PTR(zval)					(zval).value.ptr
#define Z_PTR_P(zval_p)				Z_PTR(*(zval_p))

#define ZVAL_UNDEF(z) do {				\
		Z_TYPE_INFO_P(z) = IS_UNDEF;	\
	} while (0)

#define ZVAL_NULL(z) do {				\
		Z_TYPE_INFO_P(z) = IS_NULL;		\
	} while (0)

#define ZVAL_FALSE(z) do {				\
		Z_TYPE_INFO_P(z) = IS_FALSE;	\
	} while (0)

#define ZVAL_TRUE(z) do {				\
		Z_TYPE_INFO_P(z) = IS_TRUE;		\
	} while (0)

#define ZVAL_BOOL(z, b) do {			\
		Z_TYPE_INFO_P(z) =				\
			(b) ? IS_TRUE : IS_FALSE;	\
	} while (0)

#define ZVAL_LONG(z, l) do {			\
		zval *__z = (z);				\
		Z_LVAL_P(__z) = l;				\
		Z_TYPE_INFO_P(__z) = IS_LONG;	\
	} while (0)

#define ZVAL_DOUBLE(z, d) do {			\
		zval *__z = (z);				\
		Z_DVAL_P(__z) = d;				\
		Z_TYPE_INFO_P(__z) = IS_DOUBLE;	\
	} while (0)

#define ZVAL_STR(z, s) do {						\
		zval *__z = (z);						\
		zend_string *__s = (s);					\
		Z_STR_P(__z) = __s;						\
		/* interned strings support */			\
		Z_TYPE_INFO_P(__z) = ZSTR_IS_INTERNED(__s) ? \
			IS_INTERNED_STRING_EX : 			\
			IS_STRING_EX;						\
	} while (0)

#define ZVAL_INTERNED_STR(z, s) do {				\
		zval *__z = (z);							\
		zend_string *__s = (s);						\
		Z_STR_P(__z) = __s;							\
		Z_TYPE_INFO_P(__z) = IS_INTERNED_STRING_EX;	\
	} while (0)

#define ZVAL_NEW_STR(z, s) do {					\
		zval *__z = (z);						\
		zend_string *__s = (s);					\
		Z_STR_P(__z) = __s;						\
		Z_TYPE_INFO_P(__z) = IS_STRING_EX;		\
	} while (0)

#define ZVAL_STR_COPY(z, s) do {						\
		zval *__z = (z);								\
		zend_string *__s = (s);							\
		Z_STR_P(__z) = __s;								\
		/* interned strings support */					\
		if (ZSTR_IS_INTERNED(__s)) {					\
			Z_TYPE_INFO_P(__z) = IS_INTERNED_STRING_EX;	\
		} else {										\
			GC_ADDREF(__s);								\
			Z_TYPE_INFO_P(__z) = IS_STRING_EX;			\
		}												\
	} while (0)

#define ZVAL_ARR(z, a) do {						\
		zend_array *__arr = (a);				\
		zval *__z = (z);						\
		Z_ARR_P(__z) = __arr;					\
		Z_TYPE_INFO_P(__z) = IS_ARRAY_EX;		\
	} while (0)

#define ZVAL_NEW_PERSISTENT_ARR(z) do {							\
		zval *__z = (z);										\
		zend_array *_arr =										\
		(zend_array *) malloc(sizeof(zend_array));				\
		Z_ARR_P(__z) = _arr;									\
		Z_TYPE_INFO_P(__z) = IS_ARRAY_EX;						\
	} while (0)

#define ZVAL_OBJ(z, o) do {						\
		zval *__z = (z);						\
		Z_OBJ_P(__z) = (o);						\
		Z_TYPE_INFO_P(__z) = IS_OBJECT_EX;		\
	} while (0)

#define ZVAL_OBJ_COPY(z, o) do {				\
		zval *__z = (z);						\
		zend_object *__o = (o);					\
		GC_ADDREF(__o);							\
		Z_OBJ_P(__z) = __o;						\
		Z_TYPE_INFO_P(__z) = IS_OBJECT_EX;		\
	} while (0)

#define ZVAL_RES(z, r) do {						\
		zval *__z = (z);						\
		Z_RES_P(__z) = (r);						\
		Z_TYPE_INFO_P(__z) = IS_RESOURCE_EX;	\
	} while (0)

#define ZVAL_NEW_RES(z, h, p, t) do {							\
		zend_resource *_res =									\
		(zend_resource *) emalloc(sizeof(zend_resource));		\
		zval *__z;												\
		GC_SET_REFCOUNT(_res, 1);								\
		GC_TYPE_INFO(_res) = GC_RESOURCE;						\
		_res->handle = (h);										\
		_res->type = (t);										\
		_res->ptr = (p);										\
		__z = (z);												\
		Z_RES_P(__z) = _res;									\
		Z_TYPE_INFO_P(__z) = IS_RESOURCE_EX;					\
	} while (0)

#define ZVAL_NEW_PERSISTENT_RES(z, h, p, t) do {				\
		zend_resource *_res =									\
		(zend_resource *) malloc(sizeof(zend_resource));		\
		zval *__z;												\
		GC_SET_REFCOUNT(_res, 1);								\
		GC_TYPE_INFO(_res) = GC_RESOURCE |						\
			(GC_PERSISTENT << GC_FLAGS_SHIFT);					\
		_res->handle = (h);										\
		_res->type = (t);										\
		_res->ptr = (p);										\
		__z = (z);												\
		Z_RES_P(__z) = _res;									\
		Z_TYPE_INFO_P(__z) = IS_RESOURCE_EX;					\
	} while (0)

#define ZVAL_REF(z, r) do {										\
		zval *__z = (z);										\
		Z_REF_P(__z) = (r);										\
		Z_TYPE_INFO_P(__z) = IS_REFERENCE_EX;					\
	} while (0)

#define ZVAL_NEW_EMPTY_REF(z) do {								\
		zend_reference *_ref =									\
		(zend_reference *) emalloc(sizeof(zend_reference));		\
		GC_SET_REFCOUNT(_ref, 1);								\
		GC_TYPE_INFO(_ref) = GC_REFERENCE;						\
		_ref->sources.ptr = NULL;									\
		Z_REF_P(z) = _ref;										\
		Z_TYPE_INFO_P(z) = IS_REFERENCE_EX;						\
	} while (0)

#define ZVAL_NEW_REF(z, r) do {									\
		zend_reference *_ref =									\
		(zend_reference *) emalloc(sizeof(zend_reference));		\
		GC_SET_REFCOUNT(_ref, 1);								\
		GC_TYPE_INFO(_ref) = GC_REFERENCE;						\
		ZVAL_COPY_VALUE(&_ref->val, r);							\
		_ref->sources.ptr = NULL;									\
		Z_REF_P(z) = _ref;										\
		Z_TYPE_INFO_P(z) = IS_REFERENCE_EX;						\
	} while (0)

#define ZVAL_MAKE_REF_EX(z, refcount) do {						\
		zval *_z = (z);											\
		zend_reference *_ref =									\
			(zend_reference *) emalloc(sizeof(zend_reference));	\
		GC_SET_REFCOUNT(_ref, (refcount));						\
		GC_TYPE_INFO(_ref) = GC_REFERENCE;						\
		ZVAL_COPY_VALUE(&_ref->val, _z);						\
		_ref->sources.ptr = NULL;									\
		Z_REF_P(_z) = _ref;										\
		Z_TYPE_INFO_P(_z) = IS_REFERENCE_EX;					\
	} while (0)

#define ZVAL_NEW_PERSISTENT_REF(z, r) do {						\
		zend_reference *_ref =									\
		(zend_reference *) malloc(sizeof(zend_reference));		\
		GC_SET_REFCOUNT(_ref, 1);								\
		GC_TYPE_INFO(_ref) = GC_REFERENCE |						\
			(GC_PERSISTENT << GC_FLAGS_SHIFT);					\
		ZVAL_COPY_VALUE(&_ref->val, r);							\
		_ref->sources.ptr = NULL;									\
		Z_REF_P(z) = _ref;										\
		Z_TYPE_INFO_P(z) = IS_REFERENCE_EX;						\
	} while (0)

#define ZVAL_AST(z, ast) do {									\
		zval *__z = (z);										\
		Z_AST_P(__z) = ast;										\
		Z_TYPE_INFO_P(__z) = IS_CONSTANT_AST_EX;				\
	} while (0)

#define ZVAL_INDIRECT(z, v) do {								\
		Z_INDIRECT_P(z) = (v);									\
		Z_TYPE_INFO_P(z) = IS_INDIRECT;							\
	} while (0)

#define ZVAL_PTR(z, p) do {										\
		Z_PTR_P(z) = (p);										\
		Z_TYPE_INFO_P(z) = IS_PTR;								\
	} while (0)

#define ZVAL_FUNC(z, f) do {									\
		Z_FUNC_P(z) = (f);										\
		Z_TYPE_INFO_P(z) = IS_PTR;								\
	} while (0)

#define ZVAL_CE(z, c) do {										\
		Z_CE_P(z) = (c);										\
		Z_TYPE_INFO_P(z) = IS_PTR;								\
	} while (0)

#define ZVAL_ALIAS_PTR(z, p) do {								\
		Z_PTR_P(z) = (p);										\
		Z_TYPE_INFO_P(z) = IS_ALIAS_PTR;						\
	} while (0)

#define ZVAL_ERROR(z) do {				\
		Z_TYPE_INFO_P(z) = _IS_ERROR;	\
	} while (0)

#define Z_REFCOUNT_P(pz)			zval_refcount_p(pz)
#define Z_SET_REFCOUNT_P(pz, rc)	zval_set_refcount_p(pz, rc)
#define Z_ADDREF_P(pz)				zval_addref_p(pz)
#define Z_DELREF_P(pz)				zval_delref_p(pz)

#define Z_REFCOUNT(z)				Z_REFCOUNT_P(&(z))
#define Z_SET_REFCOUNT(z, rc)		Z_SET_REFCOUNT_P(&(z), rc)
#define Z_ADDREF(z)					Z_ADDREF_P(&(z))
#define Z_DELREF(z)					Z_DELREF_P(&(z))

#define Z_TRY_ADDREF_P(pz) do {		\
	zval *_pz = (pz);				\
	if (Z_REFCOUNTED_P(_pz)) {		\
		Z_ADDREF_P(_pz);			\
	}								\
} while (0)

#define Z_TRY_DELREF_P(pz) do {		\
	zval *_pz = (pz);				\
	if (Z_REFCOUNTED_P(_pz)) {		\
		Z_DELREF_P(_pz);			\
	}								\
} while (0)

#define Z_TRY_ADDREF(z)				Z_TRY_ADDREF_P(&(z))
#define Z_TRY_DELREF(z)				Z_TRY_DELREF_P(&(z))

#ifndef ZEND_RC_DEBUG
# define ZEND_RC_DEBUG 0
#endif

#if ZEND_RC_DEBUG
extern ZEND_API bool zend_rc_debug;
/* The GC_PERSISTENT flag is reused for IS_OBJ_WEAKLY_REFERENCED on objects.
 * Skip checks for OBJECT/NULL type to avoid interpreting the flag incorrectly. */
# define ZEND_RC_MOD_CHECK(p) do { \
		if (zend_rc_debug) { \
			uint8_t type = zval_gc_type((p)->u.type_info); \
			if (type != IS_OBJECT && type != IS_NULL) { \
				ZEND_ASSERT(!(zval_gc_flags((p)->u.type_info) & GC_IMMUTABLE)); \
				ZEND_ASSERT((zval_gc_flags((p)->u.type_info) & (GC_PERSISTENT|GC_PERSISTENT_LOCAL)) != GC_PERSISTENT); \
			} \
		} \
	} while (0)
# define GC_MAKE_PERSISTENT_LOCAL(p) do { \
		GC_ADD_FLAGS(p, GC_PERSISTENT_LOCAL); \
	} while (0)
#else
# define ZEND_RC_MOD_CHECK(p) \
	do { } while (0)
# define GC_MAKE_PERSISTENT_LOCAL(p) \
	do { } while (0)
#endif

static zend_always_inline uint32_t zend_gc_refcount(const zend_refcounted_h *p) {
	return p->refcount;
}

static zend_always_inline uint32_t zend_gc_set_refcount(zend_refcounted_h *p, uint32_t rc) {
	p->refcount = rc;
	return p->refcount;
}

static zend_always_inline uint32_t zend_gc_addref(zend_refcounted_h *p) {
	ZEND_RC_MOD_CHECK(p);
	return ++(p->refcount);
}

static zend_always_inline void zend_gc_try_addref(zend_refcounted_h *p) {
	if (!(p->u.type_info & GC_IMMUTABLE)) {
		ZEND_RC_MOD_CHECK(p);
		++p->refcount;
	}
}

static zend_always_inline void zend_gc_try_delref(zend_refcounted_h *p) {
	if (!(p->u.type_info & GC_IMMUTABLE)) {
		ZEND_RC_MOD_CHECK(p);
		--p->refcount;
	}
}

static zend_always_inline uint32_t zend_gc_delref(zend_refcounted_h *p) {
	ZEND_ASSERT(p->refcount > 0);
	ZEND_RC_MOD_CHECK(p);
	return --(p->refcount);
}

static zend_always_inline uint32_t zend_gc_addref_ex(zend_refcounted_h *p, uint32_t rc) {
	ZEND_RC_MOD_CHECK(p);
	p->refcount += rc;
	return p->refcount;
}

static zend_always_inline uint32_t zend_gc_delref_ex(zend_refcounted_h *p, uint32_t rc) {
	ZEND_RC_MOD_CHECK(p);
	p->refcount -= rc;
	return p->refcount;
}

static zend_always_inline uint32_t zval_refcount_p(const zval* pz) {
#if ZEND_DEBUG
	ZEND_ASSERT(Z_REFCOUNTED_P(pz) || Z_TYPE_P(pz) == IS_ARRAY);
#endif
	return GC_REFCOUNT(Z_COUNTED_P(pz));
}

static zend_always_inline uint32_t zval_set_refcount_p(zval* pz, uint32_t rc) {
	ZEND_ASSERT(Z_REFCOUNTED_P(pz));
	return GC_SET_REFCOUNT(Z_COUNTED_P(pz), rc);
}

static zend_always_inline uint32_t zval_addref_p(zval* pz) {
	ZEND_ASSERT(Z_REFCOUNTED_P(pz));
	return GC_ADDREF(Z_COUNTED_P(pz));
}

static zend_always_inline uint32_t zval_delref_p(zval* pz) {
	ZEND_ASSERT(Z_REFCOUNTED_P(pz));
	return GC_DELREF(Z_COUNTED_P(pz));
}

#if SIZEOF_SIZE_T == 4
# define ZVAL_COPY_VALUE_EX(z, v, gc, t)				\
	do {												\
		uint32_t _w2 = v->value.ww.w2;					\
		Z_COUNTED_P(z) = gc;							\
		z->value.ww.w2 = _w2;							\
		Z_TYPE_INFO_P(z) = t;							\
	} while (0)
#elif SIZEOF_SIZE_T == 8
# define ZVAL_COPY_VALUE_EX(z, v, gc, t)				\
	do {												\
		Z_COUNTED_P(z) = gc;							\
		Z_TYPE_INFO_P(z) = t;							\
	} while (0)
#else
# error "Unknown SIZEOF_SIZE_T"
#endif

#define ZVAL_COPY_VALUE(z, v)							\
	do {												\
		zval *_z1 = (z);								\
		const zval *_z2 = (v);							\
		zend_refcounted *_gc = Z_COUNTED_P(_z2);		\
		uint32_t _t = Z_TYPE_INFO_P(_z2);				\
		ZVAL_COPY_VALUE_EX(_z1, _z2, _gc, _t);			\
	} while (0)

#define ZVAL_COPY(z, v)									\
	do {												\
		zval *_z1 = (z);								\
		const zval *_z2 = (v);							\
		zend_refcounted *_gc = Z_COUNTED_P(_z2);		\
		uint32_t _t = Z_TYPE_INFO_P(_z2);				\
		ZVAL_COPY_VALUE_EX(_z1, _z2, _gc, _t);			\
		if (Z_TYPE_INFO_REFCOUNTED(_t)) {				\
			GC_ADDREF(_gc);								\
		}												\
	} while (0)

#define ZVAL_DUP(z, v)									\
	do {												\
		zval *_z1 = (z);								\
		const zval *_z2 = (v);							\
		zend_refcounted *_gc = Z_COUNTED_P(_z2);		\
		uint32_t _t = Z_TYPE_INFO_P(_z2);				\
		if ((_t & Z_TYPE_MASK) == IS_ARRAY) {			\
			ZVAL_ARR(_z1, zend_array_dup((zend_array*)_gc));\
		} else {										\
			if (Z_TYPE_INFO_REFCOUNTED(_t)) {			\
				GC_ADDREF(_gc);							\
			}											\
			ZVAL_COPY_VALUE_EX(_z1, _z2, _gc, _t);		\
		}												\
	} while (0)


/* ZVAL_COPY_OR_DUP() should be used instead of ZVAL_COPY() and ZVAL_DUP()
 * in all places where the source may be a persistent zval.
 */
#define ZVAL_COPY_OR_DUP(z, v)											\
	do {																\
		zval *_z1 = (z);												\
		const zval *_z2 = (v);											\
		zend_refcounted *_gc = Z_COUNTED_P(_z2);						\
		uint32_t _t = Z_TYPE_INFO_P(_z2);								\
		ZVAL_COPY_VALUE_EX(_z1, _z2, _gc, _t);							\
		if (Z_TYPE_INFO_REFCOUNTED(_t)) {								\
			/* Objects reuse PERSISTENT as WEAKLY_REFERENCED */			\
			if (EXPECTED(!(GC_FLAGS(_gc) & GC_PERSISTENT)				\
					|| GC_TYPE(_gc) == IS_OBJECT)) {					\
				GC_ADDREF(_gc);											\
			} else {													\
				zval_copy_ctor_func(_z1);								\
			}															\
		}																\
	} while (0)

#define ZVAL_DEREF(z) do {								\
		if (UNEXPECTED(Z_ISREF_P(z))) {					\
			(z) = Z_REFVAL_P(z);						\
		}												\
	} while (0)

#define ZVAL_DEINDIRECT(z) do {							\
		if (Z_TYPE_P(z) == IS_INDIRECT) {				\
			(z) = Z_INDIRECT_P(z);						\
		}												\
	} while (0)

#define ZVAL_OPT_DEREF(z) do {							\
		if (UNEXPECTED(Z_OPT_ISREF_P(z))) {				\
			(z) = Z_REFVAL_P(z);						\
		}												\
	} while (0)

#define ZVAL_MAKE_REF(zv) do {							\
		zval *__zv = (zv);								\
		if (!Z_ISREF_P(__zv)) {							\
			ZVAL_NEW_REF(__zv, __zv);					\
		}												\
	} while (0)

#define ZVAL_UNREF(z) do {								\
		zval *_z = (z);									\
		zend_reference *ref;							\
		ZEND_ASSERT(Z_ISREF_P(_z));						\
		ref = Z_REF_P(_z);								\
		ZVAL_COPY_VALUE(_z, &ref->val);					\
		efree_size(ref, sizeof(zend_reference));		\
	} while (0)

#define ZVAL_COPY_DEREF(z, v) do {						\
		zval *_z3 = (v);								\
		if (Z_OPT_REFCOUNTED_P(_z3)) {					\
			if (UNEXPECTED(Z_OPT_ISREF_P(_z3))) {		\
				_z3 = Z_REFVAL_P(_z3);					\
				if (Z_OPT_REFCOUNTED_P(_z3)) {			\
					Z_ADDREF_P(_z3);					\
				}										\
			} else {									\
				Z_ADDREF_P(_z3);						\
			}											\
		}												\
		ZVAL_COPY_VALUE(z, _z3);						\
	} while (0)


#define SEPARATE_STRING(zv) do {						\
		zval *_zv = (zv);								\
		if (Z_REFCOUNT_P(_zv) > 1) {					\
			zend_string *_str = Z_STR_P(_zv);			\
			ZEND_ASSERT(Z_REFCOUNTED_P(_zv));			\
			ZEND_ASSERT(!ZSTR_IS_INTERNED(_str));		\
			ZVAL_NEW_STR(_zv, zend_string_init(			\
				ZSTR_VAL(_str),	ZSTR_LEN(_str), 0));	\
			GC_DELREF(_str);							\
		}												\
	} while (0)

#define SEPARATE_ARRAY(zv) do {							\
		zval *__zv = (zv);								\
		zend_array *_arr = Z_ARR_P(__zv);				\
		if (UNEXPECTED(GC_REFCOUNT(_arr) > 1)) {		\
			ZVAL_ARR(__zv, zend_array_dup(_arr));		\
			GC_TRY_DELREF(_arr);						\
		}												\
	} while (0)

#define SEPARATE_ZVAL_NOREF(zv) do {					\
		zval *_zv = (zv);								\
		ZEND_ASSERT(Z_TYPE_P(_zv) != IS_REFERENCE);		\
		if (Z_TYPE_P(_zv) == IS_ARRAY) {				\
			SEPARATE_ARRAY(_zv);						\
		}												\
	} while (0)

#define SEPARATE_ZVAL(zv) do {							\
		zval *_zv = (zv);								\
		if (Z_ISREF_P(_zv)) {							\
			zend_reference *_r = Z_REF_P(_zv);			\
			ZVAL_COPY_VALUE(_zv, &_r->val);				\
			if (GC_DELREF(_r) == 0) {					\
				efree_size(_r, sizeof(zend_reference));	\
			} else if (Z_OPT_TYPE_P(_zv) == IS_ARRAY) {	\
				ZVAL_ARR(_zv, zend_array_dup(Z_ARR_P(_zv)));\
				break;									\
			} else if (Z_OPT_REFCOUNTED_P(_zv)) {		\
				Z_ADDREF_P(_zv);						\
				break;									\
			}											\
		}												\
		if (Z_TYPE_P(_zv) == IS_ARRAY) {				\
			SEPARATE_ARRAY(_zv);						\
		}												\
	} while (0)

/* Properties store a flag distinguishing unset and uninitialized properties
 * (both use IS_UNDEF type) in the Z_EXTRA space. As such we also need to copy
 * the Z_EXTRA space when copying property default values etc. We define separate
 * macros for this purpose, so this workaround is easier to remove in the future. */
#define IS_PROP_UNINIT (1<<0)
#define IS_PROP_REINITABLE (1<<1)  /* It has impact only on readonly properties */
#define IS_PROP_LAZY (1<<2)
#define Z_PROP_FLAG_P(z) Z_EXTRA_P(z)
#define ZVAL_COPY_VALUE_PROP(z, v) \
	do { *(z) = *(v); } while (0)
#define ZVAL_COPY_PROP(z, v) \
	do { ZVAL_COPY(z, v); Z_PROP_FLAG_P(z) = Z_PROP_FLAG_P(v); } while (0)
#define ZVAL_COPY_OR_DUP_PROP(z, v) \
	do { ZVAL_COPY_OR_DUP(z, v); Z_PROP_FLAG_P(z) = Z_PROP_FLAG_P(v); } while (0)


static zend_always_inline bool zend_may_modify_arg_in_place(const zval *arg)
{
	return Z_REFCOUNTED_P(arg) && !(GC_FLAGS(Z_COUNTED_P(arg)) & (GC_IMMUTABLE | GC_PERSISTENT)) && Z_REFCOUNT_P(arg) == 1;
}

#endif /* ZEND_TYPES_H */
Zend/zend_object_handlers.h000064400000044077151730543360012006 0ustar00/*
   +----------------------------------------------------------------------+
   | Zend Engine                                                          |
   +----------------------------------------------------------------------+
   | Copyright (c) Zend Technologies Ltd. (http://www.zend.com)           |
   +----------------------------------------------------------------------+
   | This source file is subject to version 2.00 of the Zend license,     |
   | that is bundled with this package in the file LICENSE, and is        |
   | available through the world-wide-web at the following url:           |
   | http://www.zend.com/license/2_00.txt.                                |
   | If you did not receive a copy of the Zend license and are unable to  |
   | obtain it through the world-wide-web, please send a note to          |
   | license@zend.com so we can mail you a copy immediately.              |
   +----------------------------------------------------------------------+
   | Authors: Andi Gutmans <andi@php.net>                                 |
   |          Zeev Suraski <zeev@php.net>                                 |
   +----------------------------------------------------------------------+
*/

#ifndef ZEND_OBJECT_HANDLERS_H
#define ZEND_OBJECT_HANDLERS_H

#include <stdint.h>

#include "zend_hash.h"
#include "zend_types.h"
#include "zend_property_hooks.h"
#include "zend_lazy_objects.h"

struct _zend_property_info;

#define ZEND_WRONG_PROPERTY_INFO \
	((struct _zend_property_info*)((intptr_t)-1))

#define ZEND_DYNAMIC_PROPERTY_OFFSET               ((uintptr_t)(intptr_t)(-1))

/* The first 4 bits in the property offset are used within the cache slot for
 * storing information about the property. This value may be bumped to
 * offsetof(zend_object, properties_table) in the future. */
#define ZEND_FIRST_PROPERTY_OFFSET (1 << 4)
#define IS_VALID_PROPERTY_OFFSET(offset)           ((intptr_t)(offset) >= ZEND_FIRST_PROPERTY_OFFSET)
#define IS_WRONG_PROPERTY_OFFSET(offset)           ((intptr_t)(offset) == 0)
#define IS_HOOKED_PROPERTY_OFFSET(offset) \
	((intptr_t)(offset) > 0 && (intptr_t)(offset) < 16)
#define IS_DYNAMIC_PROPERTY_OFFSET(offset)         ((intptr_t)(offset) < 0)

#define ZEND_PROPERTY_HOOK_SIMPLE_READ_BIT 2u
#define ZEND_PROPERTY_HOOK_SIMPLE_WRITE_BIT 4u
#define ZEND_PROPERTY_HOOK_SIMPLE_GET_BIT 8u
#define ZEND_IS_PROPERTY_HOOK_SIMPLE_READ(offset) \
	(((offset) & ZEND_PROPERTY_HOOK_SIMPLE_READ_BIT) != 0)
#define ZEND_IS_PROPERTY_HOOK_SIMPLE_WRITE(offset) \
	(((offset) & ZEND_PROPERTY_HOOK_SIMPLE_WRITE_BIT) != 0)
#define ZEND_IS_PROPERTY_HOOK_SIMPLE_GET(offset) \
	(((offset) & ZEND_PROPERTY_HOOK_SIMPLE_GET_BIT) != 0)
#define ZEND_SET_PROPERTY_HOOK_SIMPLE_READ(cache_slot) \
	do { \
		void **__cache_slot = (cache_slot); \
		if (__cache_slot) { \
			CACHE_PTR_EX(__cache_slot + 1, (void*)((uintptr_t)CACHED_PTR_EX(__cache_slot + 1) | ZEND_PROPERTY_HOOK_SIMPLE_READ_BIT)); \
		} \
	} while (0)
#define ZEND_SET_PROPERTY_HOOK_SIMPLE_WRITE(cache_slot) \
	do { \
		void **__cache_slot = (cache_slot); \
		if (__cache_slot) { \
			CACHE_PTR_EX(__cache_slot + 1, (void*)((uintptr_t)CACHED_PTR_EX(__cache_slot + 1) | ZEND_PROPERTY_HOOK_SIMPLE_WRITE_BIT)); \
		} \
	} while (0)
#define ZEND_SET_PROPERTY_HOOK_SIMPLE_GET(cache_slot) \
	do { \
		void **__cache_slot = (cache_slot); \
		if (__cache_slot) { \
			CACHE_PTR_EX(__cache_slot + 1, (void*)((uintptr_t)CACHED_PTR_EX(__cache_slot + 1) | ZEND_PROPERTY_HOOK_SIMPLE_GET_BIT)); \
		} \
	} while (0)

#define IS_UNKNOWN_DYNAMIC_PROPERTY_OFFSET(offset) (offset == ZEND_DYNAMIC_PROPERTY_OFFSET)
#define ZEND_DECODE_DYN_PROP_OFFSET(offset)        ((uintptr_t)(-(intptr_t)(offset) - 2))
#define ZEND_ENCODE_DYN_PROP_OFFSET(offset)        ((uintptr_t)(-((intptr_t)(offset) + 2)))


/* Used to fetch property from the object, read-only */
typedef zval *(*zend_object_read_property_t)(zend_object *object, zend_string *member, int type, void **cache_slot, zval *rv);

/* Used to fetch dimension from the object, read-only */
typedef zval *(*zend_object_read_dimension_t)(zend_object *object, zval *offset, int type, zval *rv);


/* Used to set property of the object
   You must return the final value of the assigned property.
*/
typedef zval *(*zend_object_write_property_t)(zend_object *object, zend_string *member, zval *value, void **cache_slot);

/* Used to set dimension of the object */
typedef void (*zend_object_write_dimension_t)(zend_object *object, zval *offset, zval *value);


/* Used to create pointer to the property of the object, for future direct r/w access.
 * May return one of:
 *  * A zval pointer, without incrementing the reference count.
 *  * &EG(error_zval), if an exception has been thrown.
 *  * NULL, if acquiring a direct pointer is not possible.
 *    In this case, the VM will fall back to using read_property and write_property.
 */
typedef zval *(*zend_object_get_property_ptr_ptr_t)(zend_object *object, zend_string *member, int type, void **cache_slot);

/* Used to check if a property of the object exists */
/* param has_set_exists:
 * 0 (has) whether property exists and is not NULL
 * 1 (set) whether property exists and is true
 * 2 (exists) whether property exists
 */
typedef int (*zend_object_has_property_t)(zend_object *object, zend_string *member, int has_set_exists, void **cache_slot);

/* Used to check if a dimension of the object exists */
typedef int (*zend_object_has_dimension_t)(zend_object *object, zval *member, int check_empty);

/* Used to remove a property of the object */
typedef void (*zend_object_unset_property_t)(zend_object *object, zend_string *member, void **cache_slot);

/* Used to remove a dimension of the object */
typedef void (*zend_object_unset_dimension_t)(zend_object *object, zval *offset);

/* Used to get hash of the properties of the object, as hash of zval's */
typedef HashTable *(*zend_object_get_properties_t)(zend_object *object);

typedef HashTable *(*zend_object_get_debug_info_t)(zend_object *object, int *is_temp);

typedef enum _zend_prop_purpose {
	/* Used for debugging. Supersedes get_debug_info handler. */
	ZEND_PROP_PURPOSE_DEBUG,
	/* Used for (array) casts. */
	ZEND_PROP_PURPOSE_ARRAY_CAST,
	/* Used for serialization using the "O" scheme.
	 * Unserialization will use __wakeup(). */
	ZEND_PROP_PURPOSE_SERIALIZE,
	/* Used for var_export().
	 * The data will be passed to __set_state() when evaluated. */
	ZEND_PROP_PURPOSE_VAR_EXPORT,
	/* Used for json_encode(). */
	ZEND_PROP_PURPOSE_JSON,
	/* Used for get_object_vars(). */
	ZEND_PROP_PURPOSE_GET_OBJECT_VARS,
	/* Dummy member to ensure that "default" is specified. */
	_ZEND_PROP_PURPOSE_NON_EXHAUSTIVE_ENUM
} zend_prop_purpose;

/* The return value must be released using zend_release_properties(). */
typedef zend_array *(*zend_object_get_properties_for_t)(zend_object *object, zend_prop_purpose purpose);

/* Used to call methods */
/* args on stack! */
/* Andi - EX(fbc) (function being called) needs to be initialized already in the INIT fcall opcode so that the parameters can be parsed the right way. We need to add another callback for this.
 */
typedef zend_function *(*zend_object_get_method_t)(zend_object **object, zend_string *method, const zval *key);
typedef zend_function *(*zend_object_get_constructor_t)(zend_object *object);

/* free_obj should release any resources the object holds, without freeing the
 * object structure itself. The object does not need to be in a valid state after
 * free_obj finishes running.
 *
 * free_obj will always be invoked, even if the object leaks or a fatal error
 * occurs. However, during shutdown it may be called once the executor is no
 * longer active, in which case execution of user code may be skipped.
 */
typedef void (*zend_object_free_obj_t)(zend_object *object);

/* dtor_obj is called before free_obj. The object must remain in a valid state
 * after dtor_obj finishes running. Unlike free_obj, it is run prior to
 * deactivation of the executor during shutdown, which allows user code to run.
 *
 * This handler is not guaranteed to be called (e.g. on fatal error), and as
 * such should not be used to release resources or deallocate memory. Furthermore,
 * releasing resources in this handler can break detection of memory leaks, as
 * cycles may be broken early.
 *
 * dtor_obj should be used *only* to call user destruction hooks, such as __destruct.
 */
typedef void (*zend_object_dtor_obj_t)(zend_object *object);

typedef zend_object* (*zend_object_clone_obj_t)(zend_object *object);
typedef zend_object* (*zend_object_clone_obj_with_t)(zend_object *object, const zend_class_entry *scope, const HashTable *properties);

/* Get class name for display in var_dump and other debugging functions.
 * Must be defined and must return a non-NULL value. */
typedef zend_string *(*zend_object_get_class_name_t)(const zend_object *object);

typedef int (*zend_object_compare_t)(zval *object1, zval *object2);

/* Cast an object to some other type.
 * readobj and retval must point to distinct zvals.
 */
typedef zend_result (*zend_object_cast_t)(zend_object *readobj, zval *retval, int type);

/* updates *count to hold the number of elements present and returns SUCCESS.
 * Returns FAILURE if the object does not have any sense of overloaded dimensions */
typedef zend_result (*zend_object_count_elements_t)(zend_object *object, zend_long *count);

typedef zend_result (*zend_object_get_closure_t)(zend_object *obj, zend_class_entry **ce_ptr, zend_function **fptr_ptr, zend_object **obj_ptr, bool check_only);

typedef HashTable *(*zend_object_get_gc_t)(zend_object *object, zval **table, int *n);

typedef zend_result (*zend_object_do_operation_t)(uint8_t opcode, zval *result, zval *op1, zval *op2);

struct _zend_object_handlers {
	/* offset of real object header (usually zero) */
	int										offset;
	/* object handlers */
	zend_object_free_obj_t					free_obj;             /* required */
	zend_object_dtor_obj_t					dtor_obj;             /* required */
	zend_object_clone_obj_t					clone_obj;            /* optional */
	zend_object_clone_obj_with_t			clone_obj_with;       /* optional */
	zend_object_read_property_t				read_property;        /* required */
	zend_object_write_property_t			write_property;       /* required */
	zend_object_read_dimension_t			read_dimension;       /* required */
	zend_object_write_dimension_t			write_dimension;      /* required */
	zend_object_get_property_ptr_ptr_t		get_property_ptr_ptr; /* required */
	zend_object_has_property_t				has_property;         /* required */
	zend_object_unset_property_t			unset_property;       /* required */
	zend_object_has_dimension_t				has_dimension;        /* required */
	zend_object_unset_dimension_t			unset_dimension;      /* required */
	zend_object_get_properties_t			get_properties;       /* required */
	zend_object_get_method_t				get_method;           /* required */
	zend_object_get_constructor_t			get_constructor;      /* required */
	zend_object_get_class_name_t			get_class_name;       /* required */
	zend_object_cast_t						cast_object;          /* required */
	zend_object_count_elements_t			count_elements;       /* optional */
	zend_object_get_debug_info_t			get_debug_info;       /* optional */
	zend_object_get_closure_t				get_closure;          /* optional */
	zend_object_get_gc_t					get_gc;               /* required */
	zend_object_do_operation_t				do_operation;         /* optional */
	zend_object_compare_t					compare;              /* required */
	zend_object_get_properties_for_t		get_properties_for;   /* optional */
};

BEGIN_EXTERN_C()
extern const ZEND_API zend_object_handlers std_object_handlers;

#define zend_get_std_object_handlers() \
	(&std_object_handlers)

#define zend_get_function_root_class(fbc) \
	((fbc)->common.prototype ? (fbc)->common.prototype->common.scope : (fbc)->common.scope)

#define ZEND_PROPERTY_ISSET     0x0          /* Property exists and is not NULL */
#define ZEND_PROPERTY_NOT_EMPTY ZEND_ISEMPTY /* Property is not empty */
#define ZEND_PROPERTY_EXISTS    0x2          /* Property exists */

ZEND_API void zend_class_init_statics(zend_class_entry *ce);
ZEND_API zend_function *zend_std_get_static_method(zend_class_entry *ce, zend_string *function_name_strval, const zval *key);
ZEND_API zval *zend_std_get_static_property_with_info(zend_class_entry *ce, zend_string *property_name, int type, struct _zend_property_info **prop_info);
ZEND_API zval *zend_std_get_static_property(zend_class_entry *ce, zend_string *property_name, int type);
ZEND_API ZEND_COLD bool zend_std_unset_static_property(const zend_class_entry *ce, const zend_string *property_name);
ZEND_API zend_function *zend_std_get_constructor(zend_object *object);
ZEND_API struct _zend_property_info *zend_get_property_info(const zend_class_entry *ce, zend_string *member, int silent);
ZEND_API HashTable *zend_std_get_properties(zend_object *object);
ZEND_API HashTable *zend_get_properties_no_lazy_init(zend_object *zobj);
ZEND_API HashTable *zend_std_get_gc(zend_object *object, zval **table, int *n);
ZEND_API HashTable *zend_std_get_debug_info(zend_object *object, int *is_temp);
ZEND_API zend_result zend_std_cast_object_tostring(zend_object *object, zval *writeobj, int type);
ZEND_API zval *zend_std_get_property_ptr_ptr(zend_object *object, zend_string *member, int type, void **cache_slot);
ZEND_API zval *zend_std_read_property(zend_object *object, zend_string *member, int type, void **cache_slot, zval *rv);
ZEND_API zval *zend_std_write_property(zend_object *object, zend_string *member, zval *value, void **cache_slot);
ZEND_API int zend_std_has_property(zend_object *object, zend_string *member, int has_set_exists, void **cache_slot);
ZEND_API void zend_std_unset_property(zend_object *object, zend_string *member, void **cache_slot);
ZEND_API zval *zend_std_read_dimension(zend_object *object, zval *offset, int type, zval *rv);
ZEND_API void zend_std_write_dimension(zend_object *object, zval *offset, zval *value);
ZEND_API int zend_std_has_dimension(zend_object *object, zval *offset, int check_empty);
ZEND_API void zend_std_unset_dimension(zend_object *object, zval *offset);
ZEND_API zend_function *zend_std_get_method(zend_object **obj_ptr, zend_string *method_name, const zval *key);
ZEND_API zend_string *zend_std_get_class_name(const zend_object *zobj);
ZEND_API int zend_std_compare_objects(zval *o1, zval *o2);
ZEND_API zend_result zend_std_get_closure(zend_object *obj, zend_class_entry **ce_ptr, zend_function **fptr_ptr, zend_object **obj_ptr, bool check_only);
/* Use zend_std_get_properties_ex() */
ZEND_API HashTable *rebuild_object_properties_internal(zend_object *zobj);
ZEND_API ZEND_COLD zend_never_inline void zend_bad_method_call(const zend_function *fbc, const zend_string *method_name, const zend_class_entry *scope);
ZEND_API ZEND_COLD zend_never_inline void zend_abstract_method_call(const zend_function *fbc);

static zend_always_inline HashTable *zend_std_get_properties_ex(zend_object *object)
{
	if (UNEXPECTED(zend_lazy_object_must_init(object))) {
		return zend_lazy_object_get_properties(object);
	}
	if (!object->properties) {
		return rebuild_object_properties_internal(object);
	}
	return object->properties;
}

/* Implements the fast path for array cast */
ZEND_API HashTable *zend_std_build_object_properties_array(zend_object *zobj);

#define ZEND_STD_BUILD_OBJECT_PROPERTIES_ARRAY_COMPATIBLE(object) (            \
		/* We can use zend_std_build_object_properties_array() for objects     \
		 * without properties ht and with standard handlers */                 \
		Z_OBJ_P(object)->properties == NULL                                    \
		&& Z_OBJ_HT_P(object)->get_properties_for == NULL                      \
		&& Z_OBJ_HT_P(object)->get_properties == zend_std_get_properties       \
		/* For initialized proxies we need to forward to the real instance */  \
		&& (                                                                   \
			!zend_object_is_lazy_proxy(Z_OBJ_P(object))                        \
			|| !zend_lazy_object_initialized(Z_OBJ_P(object))                  \
		)                                                                      \
)

/* Handler for objects that cannot be meaningfully compared.
 * Only objects with the same identity will be considered equal. */
ZEND_API int zend_objects_not_comparable(zval *o1, zval *o2);

ZEND_API bool zend_check_protected(const zend_class_entry *ce, const zend_class_entry *scope);

ZEND_API zend_result zend_check_property_access(const zend_object *zobj, zend_string *prop_info_name, bool is_dynamic);

ZEND_API zend_function *zend_get_call_trampoline_func(const zend_class_entry *ce, zend_string *method_name, bool is_static);

ZEND_API uint32_t *zend_get_property_guard(zend_object *zobj, zend_string *member);

ZEND_API uint32_t *zend_get_property_guard(zend_object *zobj, zend_string *member);

ZEND_API uint32_t *zend_get_recursion_guard(zend_object *zobj);

/* Default behavior for get_properties_for. For use as a fallback in custom
 * get_properties_for implementations. */
ZEND_API HashTable *zend_std_get_properties_for(zend_object *obj, zend_prop_purpose purpose);

/* Will call get_properties_for handler or use default behavior. For use by
 * consumers of the get_properties_for API. */
ZEND_API HashTable *zend_get_properties_for(zval *obj, zend_prop_purpose purpose);

typedef struct _zend_property_info zend_property_info;

ZEND_API zend_function *zend_get_property_hook_trampoline(
	const zend_property_info *prop_info,
	zend_property_hook_kind kind, zend_string *prop_name);

ZEND_API bool ZEND_FASTCALL zend_asymmetric_property_has_set_access(const zend_property_info *prop_info);

#define zend_release_properties(ht) do { \
	if (ht) { \
		zend_array_release(ht); \
	} \
} while (0)

#define zend_free_trampoline(func) do { \
		if ((func) == &EG(trampoline)) { \
			EG(trampoline).common.attributes = NULL; \
			EG(trampoline).common.function_name = NULL; \
		} else { \
			efree(func); \
		} \
	} while (0)

/* Fallback to default comparison implementation if the arguments aren't both objects
 * and have the same compare() handler. You'll likely want to use this unless you
 * explicitly wish to support comparisons between objects and non-objects. */
#define ZEND_COMPARE_OBJECTS_FALLBACK(op1, op2) \
	if (Z_TYPE_P(op1) != IS_OBJECT || \
			Z_TYPE_P(op2) != IS_OBJECT || \
			Z_OBJ_HT_P(op1)->compare != Z_OBJ_HT_P(op2)->compare) { \
		return zend_std_compare_objects(op1, op2); \
	}

END_EXTERN_C()

#endif
Zend/zend_max_execution_timer.h000064400000002754151730543360012724 0ustar00/*
   +----------------------------------------------------------------------+
   | Copyright (c) The PHP Group                                          |
   +----------------------------------------------------------------------+
   | This source file is subject to version 3.01 of the PHP license,      |
   | that is bundled with this package in the file LICENSE, and is        |
   | available through the world-wide-web at the following url:           |
   | https://www.php.net/license/3_01.txt                                 |
   | If you did not receive a copy of the PHP license and are unable to   |
   | obtain it through the world-wide-web, please send a note to          |
   | license@php.net so we can mail you a copy immediately.               |
   +----------------------------------------------------------------------+
   | Author: Kévin Dunglas <kevin@dunglas.dev>                            |
   +----------------------------------------------------------------------+
 */

#ifndef ZEND_MAX_EXECUTION_TIMER_H
#define ZEND_MAX_EXECUTION_TIMER_H

# ifdef ZEND_MAX_EXECUTION_TIMERS

#include "zend_long.h"

BEGIN_EXTERN_C()
/* Must be called after calls to fork() */
ZEND_API void zend_max_execution_timer_init(void);
END_EXTERN_C()
void zend_max_execution_timer_settime(zend_long seconds);
void zend_max_execution_timer_shutdown(void);

# else

#define zend_max_execution_timer_init()
#define zend_max_execution_timer_settime(seconds)
#define zend_max_execution_timer_shutdown()

# endif
#endif
Zend/zend_alloc_sizes.h000064400000005105151730543370011155 0ustar00/*
   +----------------------------------------------------------------------+
   | Zend Engine                                                          |
   +----------------------------------------------------------------------+
   | Copyright (c) Zend Technologies Ltd. (http://www.zend.com)           |
   +----------------------------------------------------------------------+
   | This source file is subject to version 2.00 of the Zend license,     |
   | that is bundled with this package in the file LICENSE, and is        |
   | available through the world-wide-web at the following url:           |
   | http://www.zend.com/license/2_00.txt.                                |
   | If you did not receive a copy of the Zend license and are unable to  |
   | obtain it through the world-wide-web, please send a note to          |
   | license@zend.com so we can mail you a copy immediately.              |
   +----------------------------------------------------------------------+
   | Authors: Dmitry Stogov <dmitry@php.net>                              |
   +----------------------------------------------------------------------+
*/

#ifndef ZEND_ALLOC_SIZES_H
#define ZEND_ALLOC_SIZES_H

#define ZEND_MM_CHUNK_SIZE ((size_t) (2 * 1024 * 1024))    /* 2 MB  */
#define ZEND_MM_PAGE_SIZE  (4 * 1024)                      /* 4 KB  */
#define ZEND_MM_PAGES      (ZEND_MM_CHUNK_SIZE / ZEND_MM_PAGE_SIZE)  /* 512 */
#define ZEND_MM_FIRST_PAGE (1)

#define ZEND_MM_MIN_SMALL_SIZE		8
#define ZEND_MM_MAX_SMALL_SIZE      3072
#define ZEND_MM_MAX_LARGE_SIZE      (ZEND_MM_CHUNK_SIZE - (ZEND_MM_PAGE_SIZE * ZEND_MM_FIRST_PAGE))

/* num, size, count, pages */
#define ZEND_MM_BINS_INFO(_, x, y) \
	_( 0,    8,  512, 1, x, y) \
	_( 1,   16,  256, 1, x, y) \
	_( 2,   24,  170, 1, x, y) \
	_( 3,   32,  128, 1, x, y) \
	_( 4,   40,  102, 1, x, y) \
	_( 5,   48,   85, 1, x, y) \
	_( 6,   56,   73, 1, x, y) \
	_( 7,   64,   64, 1, x, y) \
	_( 8,   80,   51, 1, x, y) \
	_( 9,   96,   42, 1, x, y) \
	_(10,  112,   36, 1, x, y) \
	_(11,  128,   32, 1, x, y) \
	_(12,  160,   25, 1, x, y) \
	_(13,  192,   21, 1, x, y) \
	_(14,  224,   18, 1, x, y) \
	_(15,  256,   16, 1, x, y) \
	_(16,  320,   64, 5, x, y) \
	_(17,  384,   32, 3, x, y) \
	_(18,  448,    9, 1, x, y) \
	_(19,  512,    8, 1, x, y) \
	_(20,  640,   32, 5, x, y) \
	_(21,  768,   16, 3, x, y) \
	_(22,  896,    9, 2, x, y) \
	_(23, 1024,    8, 2, x, y) \
	_(24, 1280,   16, 5, x, y) \
	_(25, 1536,    8, 3, x, y) \
	_(26, 1792,   16, 7, x, y) \
	_(27, 2048,    8, 4, x, y) \
	_(28, 2560,    8, 5, x, y) \
	_(29, 3072,    4, 3, x, y)

#endif /* ZEND_ALLOC_SIZES_H */
Zend/zend_list.h000064400000006633151730543370007630 0ustar00/*
   +----------------------------------------------------------------------+
   | Zend Engine                                                          |
   +----------------------------------------------------------------------+
   | Copyright (c) Zend Technologies Ltd. (http://www.zend.com)           |
   +----------------------------------------------------------------------+
   | This source file is subject to version 2.00 of the Zend license,     |
   | that is bundled with this package in the file LICENSE, and is        |
   | available through the world-wide-web at the following url:           |
   | http://www.zend.com/license/2_00.txt.                                |
   | If you did not receive a copy of the Zend license and are unable to  |
   | obtain it through the world-wide-web, please send a note to          |
   | license@zend.com so we can mail you a copy immediately.              |
   +----------------------------------------------------------------------+
   | Authors: Andi Gutmans <andi@php.net>                                 |
   |          Zeev Suraski <zeev@php.net>                                 |
   +----------------------------------------------------------------------+
*/

#ifndef ZEND_LIST_H
#define ZEND_LIST_H

#include "zend_hash.h"
#include "zend_globals.h"

BEGIN_EXTERN_C()

typedef void (*rsrc_dtor_func_t)(zend_resource *res);
#define ZEND_RSRC_DTOR_FUNC(name) void name(zend_resource *res)

typedef struct _zend_rsrc_list_dtors_entry {
	rsrc_dtor_func_t list_dtor_ex;
	rsrc_dtor_func_t plist_dtor_ex;

	const char *type_name;

	int module_number;
	int resource_id;
} zend_rsrc_list_dtors_entry;


ZEND_API int zend_register_list_destructors_ex(rsrc_dtor_func_t ld, rsrc_dtor_func_t pld, const char *type_name, int module_number);

void list_entry_destructor(zval *ptr);
void plist_entry_destructor(zval *ptr);

void zend_clean_module_rsrc_dtors(int module_number);
ZEND_API void zend_init_rsrc_list(void); /* Exported for phar hack */
void zend_init_rsrc_plist(void);
void zend_close_rsrc_list(HashTable *ht);
void zend_destroy_rsrc_list(HashTable *ht);
void zend_init_rsrc_list_dtors(void);
void zend_destroy_rsrc_list_dtors(void);

ZEND_API zval* ZEND_FASTCALL zend_list_insert(void *ptr, int type);
ZEND_API void ZEND_FASTCALL zend_list_free(zend_resource *res);
ZEND_API zend_result ZEND_FASTCALL zend_list_delete(zend_resource *res);
ZEND_API void ZEND_FASTCALL zend_list_close(zend_resource *res);

ZEND_API zend_resource *zend_register_resource(void *rsrc_pointer, int rsrc_type);
ZEND_API void *zend_fetch_resource(zend_resource *res, const char *resource_type_name, int resource_type);
ZEND_API void *zend_fetch_resource2(zend_resource *res, const char *resource_type_name, int resource_type, int resource_type2);
ZEND_API void *zend_fetch_resource_ex(zval *res, const char *resource_type_name, int resource_type);
ZEND_API void *zend_fetch_resource2_ex(zval *res, const char *resource_type_name, int resource_type, int resource_type2);

ZEND_API const char *zend_rsrc_list_get_rsrc_type(zend_resource *res);
ZEND_API int zend_fetch_list_dtor_id(const char *type_name);

ZEND_API zend_resource* zend_register_persistent_resource(const char *key, size_t key_len, void *rsrc_pointer, int rsrc_type);
ZEND_API zend_resource* zend_register_persistent_resource_ex(zend_string *key, void *rsrc_pointer, int rsrc_type);

extern ZEND_API int le_index_ptr;  /* list entry type for index pointers */

END_EXTERN_C()

#endif
Zend/zend_builtin_functions_arginfo.h000064400000036771151730543400014120 0ustar00/* This is a generated file, edit the .stub.php file instead.
 * Stub hash: 9b49f527064695c812cd204d9efc63c13681d942 */

ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_clone, 0, 1, IS_OBJECT, 0)
	ZEND_ARG_TYPE_INFO(0, object, IS_OBJECT, 0)
	ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, withProperties, IS_ARRAY, 0, "[]")
ZEND_END_ARG_INFO()

ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_exit, 0, 0, IS_NEVER, 0)
	ZEND_ARG_TYPE_MASK(0, status, MAY_BE_STRING|MAY_BE_LONG, "0")
ZEND_END_ARG_INFO()

#define arginfo_die arginfo_exit

ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_zend_version, 0, 0, IS_STRING, 0)
ZEND_END_ARG_INFO()

ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_func_num_args, 0, 0, IS_LONG, 0)
ZEND_END_ARG_INFO()

ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_func_get_arg, 0, 1, IS_MIXED, 0)
	ZEND_ARG_TYPE_INFO(0, position, IS_LONG, 0)
ZEND_END_ARG_INFO()

ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_func_get_args, 0, 0, IS_ARRAY, 0)
ZEND_END_ARG_INFO()

ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_strlen, 0, 1, IS_LONG, 0)
	ZEND_ARG_TYPE_INFO(0, string, IS_STRING, 0)
ZEND_END_ARG_INFO()

ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_strcmp, 0, 2, IS_LONG, 0)
	ZEND_ARG_TYPE_INFO(0, string1, IS_STRING, 0)
	ZEND_ARG_TYPE_INFO(0, string2, IS_STRING, 0)
ZEND_END_ARG_INFO()

ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_strncmp, 0, 3, IS_LONG, 0)
	ZEND_ARG_TYPE_INFO(0, string1, IS_STRING, 0)
	ZEND_ARG_TYPE_INFO(0, string2, IS_STRING, 0)
	ZEND_ARG_TYPE_INFO(0, length, IS_LONG, 0)
ZEND_END_ARG_INFO()

#define arginfo_strcasecmp arginfo_strcmp

#define arginfo_strncasecmp arginfo_strncmp

ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_error_reporting, 0, 0, IS_LONG, 0)
	ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, error_level, IS_LONG, 1, "null")
ZEND_END_ARG_INFO()

ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_define, 0, 2, _IS_BOOL, 0)
	ZEND_ARG_TYPE_INFO(0, constant_name, IS_STRING, 0)
	ZEND_ARG_TYPE_INFO(0, value, IS_MIXED, 0)
	ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, case_insensitive, _IS_BOOL, 0, "false")
ZEND_END_ARG_INFO()

ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_defined, 0, 1, _IS_BOOL, 0)
	ZEND_ARG_TYPE_INFO(0, constant_name, IS_STRING, 0)
ZEND_END_ARG_INFO()

ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_get_class, 0, 0, IS_STRING, 0)
	ZEND_ARG_TYPE_INFO(0, object, IS_OBJECT, 0)
ZEND_END_ARG_INFO()

#define arginfo_get_called_class arginfo_zend_version

ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_get_parent_class, 0, 0, MAY_BE_STRING|MAY_BE_FALSE)
	ZEND_ARG_TYPE_MASK(0, object_or_class, MAY_BE_OBJECT|MAY_BE_STRING, NULL)
ZEND_END_ARG_INFO()

ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_is_subclass_of, 0, 2, _IS_BOOL, 0)
	ZEND_ARG_TYPE_INFO(0, object_or_class, IS_MIXED, 0)
	ZEND_ARG_TYPE_INFO(0, class, IS_STRING, 0)
	ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, allow_string, _IS_BOOL, 0, "true")
ZEND_END_ARG_INFO()

ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_is_a, 0, 2, _IS_BOOL, 0)
	ZEND_ARG_TYPE_INFO(0, object_or_class, IS_MIXED, 0)
	ZEND_ARG_TYPE_INFO(0, class, IS_STRING, 0)
	ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, allow_string, _IS_BOOL, 0, "false")
ZEND_END_ARG_INFO()

ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_get_class_vars, 0, 1, IS_ARRAY, 0)
	ZEND_ARG_TYPE_INFO(0, class, IS_STRING, 0)
ZEND_END_ARG_INFO()

ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_get_object_vars, 0, 1, IS_ARRAY, 0)
	ZEND_ARG_TYPE_INFO(0, object, IS_OBJECT, 0)
ZEND_END_ARG_INFO()

#define arginfo_get_mangled_object_vars arginfo_get_object_vars

ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_get_class_methods, 0, 1, IS_ARRAY, 0)
	ZEND_ARG_TYPE_MASK(0, object_or_class, MAY_BE_OBJECT|MAY_BE_STRING, NULL)
ZEND_END_ARG_INFO()

ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_method_exists, 0, 2, _IS_BOOL, 0)
	ZEND_ARG_INFO(0, object_or_class)
	ZEND_ARG_TYPE_INFO(0, method, IS_STRING, 0)
ZEND_END_ARG_INFO()

ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_property_exists, 0, 2, _IS_BOOL, 0)
	ZEND_ARG_INFO(0, object_or_class)
	ZEND_ARG_TYPE_INFO(0, property, IS_STRING, 0)
ZEND_END_ARG_INFO()

ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_class_exists, 0, 1, _IS_BOOL, 0)
	ZEND_ARG_TYPE_INFO(0, class, IS_STRING, 0)
	ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, autoload, _IS_BOOL, 0, "true")
ZEND_END_ARG_INFO()

ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_interface_exists, 0, 1, _IS_BOOL, 0)
	ZEND_ARG_TYPE_INFO(0, interface, IS_STRING, 0)
	ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, autoload, _IS_BOOL, 0, "true")
ZEND_END_ARG_INFO()

ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_trait_exists, 0, 1, _IS_BOOL, 0)
	ZEND_ARG_TYPE_INFO(0, trait, IS_STRING, 0)
	ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, autoload, _IS_BOOL, 0, "true")
ZEND_END_ARG_INFO()

ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_enum_exists, 0, 1, _IS_BOOL, 0)
	ZEND_ARG_TYPE_INFO(0, enum, IS_STRING, 0)
	ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, autoload, _IS_BOOL, 0, "true")
ZEND_END_ARG_INFO()

ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_function_exists, 0, 1, _IS_BOOL, 0)
	ZEND_ARG_TYPE_INFO(0, function, IS_STRING, 0)
ZEND_END_ARG_INFO()

ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_class_alias, 0, 2, _IS_BOOL, 0)
	ZEND_ARG_TYPE_INFO(0, class, IS_STRING, 0)
	ZEND_ARG_TYPE_INFO(0, alias, IS_STRING, 0)
	ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, autoload, _IS_BOOL, 0, "true")
ZEND_END_ARG_INFO()

#define arginfo_get_included_files arginfo_func_get_args

#define arginfo_get_required_files arginfo_func_get_args

ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_trigger_error, 0, 1, IS_TRUE, 0)
	ZEND_ARG_TYPE_INFO(0, message, IS_STRING, 0)
	ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, error_level, IS_LONG, 0, "E_USER_NOTICE")
ZEND_END_ARG_INFO()

#define arginfo_user_error arginfo_trigger_error

ZEND_BEGIN_ARG_INFO_EX(arginfo_set_error_handler, 0, 0, 1)
	ZEND_ARG_TYPE_INFO(0, callback, IS_CALLABLE, 1)
	ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, error_levels, IS_LONG, 0, "E_ALL")
ZEND_END_ARG_INFO()

ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_restore_error_handler, 0, 0, IS_TRUE, 0)
ZEND_END_ARG_INFO()

ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_get_error_handler, 0, 0, IS_CALLABLE, 1)
ZEND_END_ARG_INFO()

ZEND_BEGIN_ARG_INFO_EX(arginfo_set_exception_handler, 0, 0, 1)
	ZEND_ARG_TYPE_INFO(0, callback, IS_CALLABLE, 1)
ZEND_END_ARG_INFO()

#define arginfo_restore_exception_handler arginfo_restore_error_handler

#define arginfo_get_exception_handler arginfo_get_error_handler

#define arginfo_get_declared_classes arginfo_func_get_args

#define arginfo_get_declared_traits arginfo_func_get_args

#define arginfo_get_declared_interfaces arginfo_func_get_args

ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_get_defined_functions, 0, 0, IS_ARRAY, 0)
	ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, exclude_disabled, _IS_BOOL, 0, "true")
ZEND_END_ARG_INFO()

#define arginfo_get_defined_vars arginfo_func_get_args

ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_get_resource_type, 0, 1, IS_STRING, 0)
	ZEND_ARG_INFO(0, resource)
ZEND_END_ARG_INFO()

ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_get_resource_id, 0, 1, IS_LONG, 0)
	ZEND_ARG_INFO(0, resource)
ZEND_END_ARG_INFO()

ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_get_resources, 0, 0, IS_ARRAY, 0)
	ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, type, IS_STRING, 1, "null")
ZEND_END_ARG_INFO()

ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_get_loaded_extensions, 0, 0, IS_ARRAY, 0)
	ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, zend_extensions, _IS_BOOL, 0, "false")
ZEND_END_ARG_INFO()

ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_get_defined_constants, 0, 0, IS_ARRAY, 0)
	ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, categorize, _IS_BOOL, 0, "false")
ZEND_END_ARG_INFO()

ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_debug_backtrace, 0, 0, IS_ARRAY, 0)
	ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, options, IS_LONG, 0, "DEBUG_BACKTRACE_PROVIDE_OBJECT")
	ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, limit, IS_LONG, 0, "0")
ZEND_END_ARG_INFO()

ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_debug_print_backtrace, 0, 0, IS_VOID, 0)
	ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, options, IS_LONG, 0, "0")
	ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, limit, IS_LONG, 0, "0")
ZEND_END_ARG_INFO()

ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_extension_loaded, 0, 1, _IS_BOOL, 0)
	ZEND_ARG_TYPE_INFO(0, extension, IS_STRING, 0)
ZEND_END_ARG_INFO()

ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_get_extension_funcs, 0, 1, MAY_BE_ARRAY|MAY_BE_FALSE)
	ZEND_ARG_TYPE_INFO(0, extension, IS_STRING, 0)
ZEND_END_ARG_INFO()

#if ZEND_DEBUG && defined(ZTS)
ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_zend_thread_id, 0, 0, IS_LONG, 0)
ZEND_END_ARG_INFO()
#endif

#define arginfo_gc_mem_caches arginfo_func_num_args

#define arginfo_gc_collect_cycles arginfo_func_num_args

ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_gc_enabled, 0, 0, _IS_BOOL, 0)
ZEND_END_ARG_INFO()

ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_gc_enable, 0, 0, IS_VOID, 0)
ZEND_END_ARG_INFO()

#define arginfo_gc_disable arginfo_gc_enable

#define arginfo_gc_status arginfo_func_get_args


ZEND_FRAMELESS_FUNCTION(property_exists, 2);
static const zend_frameless_function_info frameless_function_infos_property_exists[] = {
	{ ZEND_FRAMELESS_FUNCTION_NAME(property_exists, 2), 2 },
	{ 0 },
};

ZEND_FRAMELESS_FUNCTION(class_exists, 1);
ZEND_FRAMELESS_FUNCTION(class_exists, 2);
static const zend_frameless_function_info frameless_function_infos_class_exists[] = {
	{ ZEND_FRAMELESS_FUNCTION_NAME(class_exists, 1), 1 },
	{ ZEND_FRAMELESS_FUNCTION_NAME(class_exists, 2), 2 },
	{ 0 },
};

ZEND_FUNCTION(clone);
ZEND_FUNCTION(exit);
ZEND_FUNCTION(zend_version);
ZEND_FUNCTION(func_num_args);
ZEND_FUNCTION(func_get_arg);
ZEND_FUNCTION(func_get_args);
ZEND_FUNCTION(strlen);
ZEND_FUNCTION(strcmp);
ZEND_FUNCTION(strncmp);
ZEND_FUNCTION(strcasecmp);
ZEND_FUNCTION(strncasecmp);
ZEND_FUNCTION(error_reporting);
ZEND_FUNCTION(define);
ZEND_FUNCTION(defined);
ZEND_FUNCTION(get_class);
ZEND_FUNCTION(get_called_class);
ZEND_FUNCTION(get_parent_class);
ZEND_FUNCTION(is_subclass_of);
ZEND_FUNCTION(is_a);
ZEND_FUNCTION(get_class_vars);
ZEND_FUNCTION(get_object_vars);
ZEND_FUNCTION(get_mangled_object_vars);
ZEND_FUNCTION(get_class_methods);
ZEND_FUNCTION(method_exists);
ZEND_FUNCTION(property_exists);
ZEND_FUNCTION(class_exists);
ZEND_FUNCTION(interface_exists);
ZEND_FUNCTION(trait_exists);
ZEND_FUNCTION(enum_exists);
ZEND_FUNCTION(function_exists);
ZEND_FUNCTION(class_alias);
ZEND_FUNCTION(get_included_files);
ZEND_FUNCTION(trigger_error);
ZEND_FUNCTION(set_error_handler);
ZEND_FUNCTION(restore_error_handler);
ZEND_FUNCTION(get_error_handler);
ZEND_FUNCTION(set_exception_handler);
ZEND_FUNCTION(restore_exception_handler);
ZEND_FUNCTION(get_exception_handler);
ZEND_FUNCTION(get_declared_classes);
ZEND_FUNCTION(get_declared_traits);
ZEND_FUNCTION(get_declared_interfaces);
ZEND_FUNCTION(get_defined_functions);
ZEND_FUNCTION(get_defined_vars);
ZEND_FUNCTION(get_resource_type);
ZEND_FUNCTION(get_resource_id);
ZEND_FUNCTION(get_resources);
ZEND_FUNCTION(get_loaded_extensions);
ZEND_FUNCTION(get_defined_constants);
ZEND_FUNCTION(debug_backtrace);
ZEND_FUNCTION(debug_print_backtrace);
ZEND_FUNCTION(extension_loaded);
ZEND_FUNCTION(get_extension_funcs);
#if ZEND_DEBUG && defined(ZTS)
ZEND_FUNCTION(zend_thread_id);
#endif
ZEND_FUNCTION(gc_mem_caches);
ZEND_FUNCTION(gc_collect_cycles);
ZEND_FUNCTION(gc_enabled);
ZEND_FUNCTION(gc_enable);
ZEND_FUNCTION(gc_disable);
ZEND_FUNCTION(gc_status);

static const zend_function_entry ext_functions[] = {
	ZEND_FE(clone, arginfo_clone)
	ZEND_FE(exit, arginfo_exit)
	ZEND_RAW_FENTRY("die", zif_exit, arginfo_die, 0, NULL, NULL)
	ZEND_FE(zend_version, arginfo_zend_version)
	ZEND_FE(func_num_args, arginfo_func_num_args)
	ZEND_FE(func_get_arg, arginfo_func_get_arg)
	ZEND_FE(func_get_args, arginfo_func_get_args)
	ZEND_FE(strlen, arginfo_strlen)
	ZEND_RAW_FENTRY("strcmp", zif_strcmp, arginfo_strcmp, ZEND_ACC_COMPILE_TIME_EVAL, NULL, NULL)
	ZEND_RAW_FENTRY("strncmp", zif_strncmp, arginfo_strncmp, ZEND_ACC_COMPILE_TIME_EVAL, NULL, NULL)
	ZEND_RAW_FENTRY("strcasecmp", zif_strcasecmp, arginfo_strcasecmp, ZEND_ACC_COMPILE_TIME_EVAL, NULL, NULL)
	ZEND_RAW_FENTRY("strncasecmp", zif_strncasecmp, arginfo_strncasecmp, ZEND_ACC_COMPILE_TIME_EVAL, NULL, NULL)
	ZEND_FE(error_reporting, arginfo_error_reporting)
	ZEND_FE(define, arginfo_define)
	ZEND_FE(defined, arginfo_defined)
	ZEND_FE(get_class, arginfo_get_class)
	ZEND_FE(get_called_class, arginfo_get_called_class)
	ZEND_FE(get_parent_class, arginfo_get_parent_class)
	ZEND_FE(is_subclass_of, arginfo_is_subclass_of)
	ZEND_FE(is_a, arginfo_is_a)
	ZEND_FE(get_class_vars, arginfo_get_class_vars)
	ZEND_FE(get_object_vars, arginfo_get_object_vars)
	ZEND_FE(get_mangled_object_vars, arginfo_get_mangled_object_vars)
	ZEND_FE(get_class_methods, arginfo_get_class_methods)
	ZEND_FE(method_exists, arginfo_method_exists)
	ZEND_RAW_FENTRY("property_exists", zif_property_exists, arginfo_property_exists, 0, frameless_function_infos_property_exists, NULL)
	ZEND_RAW_FENTRY("class_exists", zif_class_exists, arginfo_class_exists, 0, frameless_function_infos_class_exists, NULL)
	ZEND_FE(interface_exists, arginfo_interface_exists)
	ZEND_FE(trait_exists, arginfo_trait_exists)
	ZEND_FE(enum_exists, arginfo_enum_exists)
	ZEND_FE(function_exists, arginfo_function_exists)
	ZEND_FE(class_alias, arginfo_class_alias)
	ZEND_FE(get_included_files, arginfo_get_included_files)
	ZEND_RAW_FENTRY("get_required_files", zif_get_included_files, arginfo_get_required_files, 0, NULL, NULL)
	ZEND_FE(trigger_error, arginfo_trigger_error)
	ZEND_RAW_FENTRY("user_error", zif_trigger_error, arginfo_user_error, 0, NULL, NULL)
	ZEND_FE(set_error_handler, arginfo_set_error_handler)
	ZEND_FE(restore_error_handler, arginfo_restore_error_handler)
	ZEND_FE(get_error_handler, arginfo_get_error_handler)
	ZEND_FE(set_exception_handler, arginfo_set_exception_handler)
	ZEND_FE(restore_exception_handler, arginfo_restore_exception_handler)
	ZEND_FE(get_exception_handler, arginfo_get_exception_handler)
	ZEND_FE(get_declared_classes, arginfo_get_declared_classes)
	ZEND_FE(get_declared_traits, arginfo_get_declared_traits)
	ZEND_FE(get_declared_interfaces, arginfo_get_declared_interfaces)
	ZEND_FE(get_defined_functions, arginfo_get_defined_functions)
	ZEND_FE(get_defined_vars, arginfo_get_defined_vars)
	ZEND_FE(get_resource_type, arginfo_get_resource_type)
	ZEND_FE(get_resource_id, arginfo_get_resource_id)
	ZEND_FE(get_resources, arginfo_get_resources)
	ZEND_FE(get_loaded_extensions, arginfo_get_loaded_extensions)
	ZEND_FE(get_defined_constants, arginfo_get_defined_constants)
	ZEND_FE(debug_backtrace, arginfo_debug_backtrace)
	ZEND_FE(debug_print_backtrace, arginfo_debug_print_backtrace)
	ZEND_FE(extension_loaded, arginfo_extension_loaded)
	ZEND_FE(get_extension_funcs, arginfo_get_extension_funcs)
#if ZEND_DEBUG && defined(ZTS)
	ZEND_FE(zend_thread_id, arginfo_zend_thread_id)
#endif
	ZEND_FE(gc_mem_caches, arginfo_gc_mem_caches)
	ZEND_FE(gc_collect_cycles, arginfo_gc_collect_cycles)
	ZEND_FE(gc_enabled, arginfo_gc_enabled)
	ZEND_FE(gc_enable, arginfo_gc_enable)
	ZEND_FE(gc_disable, arginfo_gc_disable)
	ZEND_FE(gc_status, arginfo_gc_status)
	ZEND_FE_END
};

static zend_class_entry *register_class_stdClass(void)
{
	zend_class_entry ce, *class_entry;

	INIT_CLASS_ENTRY(ce, "stdClass", NULL);
	class_entry = zend_register_internal_class_with_flags(&ce, NULL, ZEND_ACC_ALLOW_DYNAMIC_PROPERTIES);

	zend_string *attribute_name_AllowDynamicProperties_class_stdClass_0 = zend_string_init_interned("AllowDynamicProperties", sizeof("AllowDynamicProperties") - 1, 1);
	zend_add_class_attribute(class_entry, attribute_name_AllowDynamicProperties_class_stdClass_0, 0);
	zend_string_release(attribute_name_AllowDynamicProperties_class_stdClass_0);

	return class_entry;
}
Zend/zend_observer.h000064400000021514151730543400010471 0ustar00/*
   +----------------------------------------------------------------------+
   | Zend Engine                                                          |
   +----------------------------------------------------------------------+
   | Copyright (c) Zend Technologies Ltd. (http://www.zend.com)           |
   +----------------------------------------------------------------------+
   | This source file is subject to version 2.00 of the Zend license,     |
   | that is bundled with this package in the file LICENSE, and is        |
   | available through the world-wide-web at the following url:           |
   | http://www.zend.com/license/2_00.txt.                                |
   | If you did not receive a copy of the Zend license and are unable to  |
   | obtain it through the world-wide-web, please send a note to          |
   | license@zend.com so we can mail you a copy immediately.              |
   +----------------------------------------------------------------------+
   | Authors: Levi Morrison <levim@php.net>                               |
   |          Sammy Kaye Powers <sammyk@php.net>                          |
   |          Bob Weinand <bobwei9@hotmail.com>                           |
   +----------------------------------------------------------------------+
*/

#ifndef ZEND_OBSERVER_H
#define ZEND_OBSERVER_H

#include "zend.h"
#include "zend_compile.h"
#include "zend_fibers.h"

BEGIN_EXTERN_C()

extern ZEND_API int zend_observer_fcall_op_array_extension;
extern ZEND_API int zend_observer_fcall_internal_function_extension;
extern ZEND_API bool zend_observer_errors_observed;
extern ZEND_API bool zend_observer_function_declared_observed;
extern ZEND_API bool zend_observer_class_linked_observed;

#define ZEND_OBSERVER_HANDLE(function) (ZEND_USER_CODE((function)->type) \
	? zend_observer_fcall_op_array_extension : zend_observer_fcall_internal_function_extension)

#define ZEND_OBSERVER_DATA(function) \
	((zend_observer_fcall_begin_handler *)&ZEND_OP_ARRAY_EXTENSION((&(function)->common), ZEND_OBSERVER_HANDLE(function)))

/* Neither begin nor end handler present. Needs to be set in the slot of the begin handler.
 * Optimization reducing runtime checks. */
#define ZEND_OBSERVER_NONE_OBSERVED ((void *) 3)

/* Omit zend_observer_fcall_internal_function_extension check, they are set at the same time. */
#define ZEND_OBSERVER_ENABLED (zend_observer_fcall_op_array_extension != -1)

#define ZEND_OBSERVER_FCALL_BEGIN(execute_data) do { \
		if (ZEND_OBSERVER_ENABLED) { \
			zend_observer_fcall_begin(execute_data); \
		} \
	} while (0)

#define ZEND_OBSERVER_FCALL_END(execute_data, return_value) do { \
		if (ZEND_OBSERVER_ENABLED) { \
			zend_observer_fcall_end(execute_data, return_value); \
		} \
	} while (0)

typedef void (*zend_observer_fcall_begin_handler)(zend_execute_data *execute_data);
typedef void (*zend_observer_fcall_end_handler)(zend_execute_data *execute_data, zval *retval);

typedef struct _zend_observer_fcall_handlers {
	zend_observer_fcall_begin_handler begin;
	zend_observer_fcall_end_handler end;
} zend_observer_fcall_handlers;

/* If the fn should not be observed then return {NULL, NULL} */
typedef zend_observer_fcall_handlers (*zend_observer_fcall_init)(zend_execute_data *execute_data);

// Call during minit/startup ONLY
ZEND_API void zend_observer_fcall_register(zend_observer_fcall_init);

// Call during runtime, but only if you have used zend_observer_fcall_register.
// You must not have more than one begin and one end handler active at the same time. Remove the old one first, if there is an existing one.
ZEND_API void zend_observer_add_begin_handler(zend_function *function, zend_observer_fcall_begin_handler begin);
ZEND_API bool zend_observer_remove_begin_handler(zend_function *function, zend_observer_fcall_begin_handler begin, zend_observer_fcall_begin_handler *next);
ZEND_API void zend_observer_add_end_handler(zend_function *function, zend_observer_fcall_end_handler end);
ZEND_API bool zend_observer_remove_end_handler(zend_function *function, zend_observer_fcall_end_handler end, zend_observer_fcall_end_handler *next);

ZEND_API void zend_observer_startup(void); // Called by engine before MINITs
ZEND_API void zend_observer_post_startup(void); // Called by engine after MINITs
ZEND_API void zend_observer_activate(void);
ZEND_API void zend_observer_shutdown(void);

ZEND_API void ZEND_FASTCALL zend_observer_fcall_begin(zend_execute_data *execute_data);
/* prechecked: the call is actually observed. */
ZEND_API void ZEND_FASTCALL zend_observer_fcall_begin_prechecked(zend_execute_data *execute_data, zend_observer_fcall_begin_handler *observer_data);

static zend_always_inline bool zend_observer_handler_is_unobserved(zend_observer_fcall_begin_handler *handler) {
	return *handler == ZEND_OBSERVER_NONE_OBSERVED;
}

/* Initial check for observers has not happened yet or no observers are installed. */
static zend_always_inline bool zend_observer_fcall_has_no_observers(zend_execute_data *execute_data, bool allow_generator, zend_observer_fcall_begin_handler **handler) {
	zend_function *function = EX(func);
	void *ZEND_MAP_PTR(runtime_cache) = ZEND_MAP_PTR(function->common.run_time_cache);

	if (function->common.fn_flags & (ZEND_ACC_CALL_VIA_TRAMPOLINE | (allow_generator ? 0 : ZEND_ACC_GENERATOR))) {
		return true;
	}

	if (!ZEND_MAP_PTR(runtime_cache)) {
		return true;
	}

	*handler = (zend_observer_fcall_begin_handler *)ZEND_MAP_PTR_GET(runtime_cache) + ZEND_OBSERVER_HANDLE(function);
	return zend_observer_handler_is_unobserved(*handler);
}

/* zend_observer_fcall_begin(), but with generator check inlined and optimized away. */
static zend_always_inline void zend_observer_fcall_begin_specialized(zend_execute_data *execute_data, bool allow_generator) {
	zend_observer_fcall_begin_handler *handler;
	if (!zend_observer_fcall_has_no_observers(execute_data, allow_generator, &handler)) {
		zend_observer_fcall_begin_prechecked(execute_data, handler);
	}
}

ZEND_API void ZEND_FASTCALL zend_observer_generator_resume(zend_execute_data *execute_data);

/* prechecked: the call is actually observed. */
ZEND_API void ZEND_FASTCALL zend_observer_fcall_end_prechecked(zend_execute_data *execute_data, zval *return_value);
static zend_always_inline void zend_observer_fcall_end(zend_execute_data *execute_data, zval *return_value) {
	if (execute_data == EG(current_observed_frame)) {
		zend_observer_fcall_end_prechecked(execute_data, return_value);
	}
}

ZEND_API void zend_observer_fcall_end_all(void);

typedef void (*zend_observer_function_declared_cb)(zend_op_array *op_array, zend_string *name);

ZEND_API void zend_observer_function_declared_register(zend_observer_function_declared_cb cb);
ZEND_API void ZEND_FASTCALL _zend_observer_function_declared_notify(zend_op_array *op_array, zend_string *name);
static inline void zend_observer_function_declared_notify(zend_op_array *op_array, zend_string *name) {
    if (UNEXPECTED(zend_observer_function_declared_observed)) {
		_zend_observer_function_declared_notify(op_array, name);
	}
}

typedef void (*zend_observer_class_linked_cb)(zend_class_entry *ce, zend_string *name);

ZEND_API void zend_observer_class_linked_register(zend_observer_class_linked_cb cb);
ZEND_API void ZEND_FASTCALL _zend_observer_class_linked_notify(zend_class_entry *ce, zend_string *name);
static inline void zend_observer_class_linked_notify(zend_class_entry *ce, zend_string *name) {
	if (UNEXPECTED(zend_observer_class_linked_observed)) {
		_zend_observer_class_linked_notify(ce, name);
	}
}

typedef void (*zend_observer_error_cb)(int type, zend_string *error_filename, uint32_t error_lineno, zend_string *message);

ZEND_API void zend_observer_error_register(zend_observer_error_cb callback);
ZEND_API void _zend_observer_error_notify(int type, zend_string *error_filename, uint32_t error_lineno, zend_string *message);
static inline void zend_observer_error_notify(int type, zend_string *error_filename, uint32_t error_lineno, zend_string *message) {
	if (UNEXPECTED(zend_observer_errors_observed)) {
		_zend_observer_error_notify(type, error_filename, error_lineno, message);
	}
}

typedef void (*zend_observer_fiber_init_handler)(zend_fiber_context *initializing);
typedef void (*zend_observer_fiber_switch_handler)(zend_fiber_context *from, zend_fiber_context *to);
typedef void (*zend_observer_fiber_destroy_handler)(zend_fiber_context *destroying);

ZEND_API void zend_observer_fiber_init_register(zend_observer_fiber_init_handler handler);
ZEND_API void zend_observer_fiber_switch_register(zend_observer_fiber_switch_handler handler);
ZEND_API void zend_observer_fiber_destroy_register(zend_observer_fiber_destroy_handler handler);

ZEND_API void ZEND_FASTCALL zend_observer_fiber_init_notify(zend_fiber_context *initializing);
ZEND_API void ZEND_FASTCALL zend_observer_fiber_switch_notify(zend_fiber_context *from, zend_fiber_context *to);
ZEND_API void ZEND_FASTCALL zend_observer_fiber_destroy_notify(zend_fiber_context *destroying);

END_EXTERN_C()

#endif /* ZEND_OBSERVER_H */
Zend/zend_alloc.h000064400000050507151730543410007741 0ustar00/*
   +----------------------------------------------------------------------+
   | Zend Engine                                                          |
   +----------------------------------------------------------------------+
   | Copyright (c) Zend Technologies Ltd. (http://www.zend.com)           |
   +----------------------------------------------------------------------+
   | This source file is subject to version 2.00 of the Zend license,     |
   | that is bundled with this package in the file LICENSE, and is        |
   | available through the world-wide-web at the following url:           |
   | http://www.zend.com/license/2_00.txt.                                |
   | If you did not receive a copy of the Zend license and are unable to  |
   | obtain it through the world-wide-web, please send a note to          |
   | license@zend.com so we can mail you a copy immediately.              |
   +----------------------------------------------------------------------+
   | Authors: Andi Gutmans <andi@php.net>                                 |
   |          Zeev Suraski <zeev@php.net>                                 |
   |          Dmitry Stogov <dmitry@php.net>                              |
   +----------------------------------------------------------------------+
*/

#ifndef ZEND_ALLOC_H
#define ZEND_ALLOC_H

#include <stdio.h>

#include "zend_types.h"
#include "../TSRM/TSRM.h"

#ifndef ZEND_MM_ALIGNMENT
# error "ZEND_MM_ALIGNMENT was not defined during configure"
#endif

#define ZEND_MM_ALIGNMENT_MASK ~(ZEND_MM_ALIGNMENT - 1)

#define ZEND_MM_ALIGNED_SIZE(size)	(((size) + ZEND_MM_ALIGNMENT - 1) & ZEND_MM_ALIGNMENT_MASK)

#define ZEND_MM_ALIGNED_SIZE_EX(size, alignment) \
	(((size) + ((alignment) - 1)) & ~((alignment) - 1))

typedef struct _zend_leak_info {
	void *addr;
	size_t size;
	const char *filename;
	const char *orig_filename;
	uint32_t lineno;
	uint32_t orig_lineno;
} zend_leak_info;

#if ZEND_DEBUG
typedef struct _zend_mm_debug_info {
	size_t             size;
	const char        *filename;
	const char        *orig_filename;
	uint32_t               lineno;
	uint32_t               orig_lineno;
} zend_mm_debug_info;

# define ZEND_MM_OVERHEAD ZEND_MM_ALIGNED_SIZE(sizeof(zend_mm_debug_info))
#else
# define ZEND_MM_OVERHEAD 0
#endif

BEGIN_EXTERN_C()

ZEND_API ZEND_ATTRIBUTE_MALLOC char*  ZEND_FASTCALL zend_strndup(const char *s, size_t length);

ZEND_API ZEND_ATTRIBUTE_MALLOC void*  ZEND_FASTCALL _emalloc(size_t size ZEND_FILE_LINE_DC ZEND_FILE_LINE_ORIG_DC) ZEND_ATTRIBUTE_ALLOC_SIZE(1);
ZEND_API ZEND_ATTRIBUTE_MALLOC void*  ZEND_FASTCALL _safe_emalloc(size_t nmemb, size_t size, size_t offset ZEND_FILE_LINE_DC ZEND_FILE_LINE_ORIG_DC);
ZEND_API ZEND_ATTRIBUTE_MALLOC void*  ZEND_FASTCALL _safe_malloc(size_t nmemb, size_t size, size_t offset);
ZEND_API void   ZEND_FASTCALL _efree(void *ptr ZEND_FILE_LINE_DC ZEND_FILE_LINE_ORIG_DC);
ZEND_API ZEND_ATTRIBUTE_MALLOC void*  ZEND_FASTCALL _ecalloc(size_t nmemb, size_t size ZEND_FILE_LINE_DC ZEND_FILE_LINE_ORIG_DC) ZEND_ATTRIBUTE_ALLOC_SIZE2(1,2);
ZEND_API void*  ZEND_FASTCALL _erealloc(void *ptr, size_t size ZEND_FILE_LINE_DC ZEND_FILE_LINE_ORIG_DC) ZEND_ATTRIBUTE_ALLOC_SIZE(2);
ZEND_API void*  ZEND_FASTCALL _erealloc2(void *ptr, size_t size, size_t copy_size ZEND_FILE_LINE_DC ZEND_FILE_LINE_ORIG_DC) ZEND_ATTRIBUTE_ALLOC_SIZE(2);
ZEND_API void*  ZEND_FASTCALL _safe_erealloc(void *ptr, size_t nmemb, size_t size, size_t offset ZEND_FILE_LINE_DC ZEND_FILE_LINE_ORIG_DC);
ZEND_API void*  ZEND_FASTCALL _safe_realloc(void *ptr, size_t nmemb, size_t size, size_t offset);
ZEND_API ZEND_ATTRIBUTE_MALLOC char*  ZEND_FASTCALL _estrdup(const char *s ZEND_FILE_LINE_DC ZEND_FILE_LINE_ORIG_DC);
ZEND_API ZEND_ATTRIBUTE_MALLOC char*  ZEND_FASTCALL _estrndup(const char *s, size_t length ZEND_FILE_LINE_DC ZEND_FILE_LINE_ORIG_DC);
ZEND_API size_t ZEND_FASTCALL _zend_mem_block_size(void *ptr ZEND_FILE_LINE_DC ZEND_FILE_LINE_ORIG_DC);

#include "zend_alloc_sizes.h"

/* _emalloc() & _efree() specialization */
#if !ZEND_DEBUG && defined(HAVE_BUILTIN_CONSTANT_P)

# define _ZEND_BIN_ALLOCATOR_DEF(_num, _size, _elements, _pages, x, y) \
	ZEND_API ZEND_ATTRIBUTE_MALLOC void* ZEND_FASTCALL _emalloc_  ## _size(void);

ZEND_MM_BINS_INFO(_ZEND_BIN_ALLOCATOR_DEF, x, y)

ZEND_API ZEND_ATTRIBUTE_MALLOC void* ZEND_FASTCALL _emalloc_large(size_t size) ZEND_ATTRIBUTE_ALLOC_SIZE(1);
ZEND_API ZEND_ATTRIBUTE_MALLOC void* ZEND_FASTCALL _emalloc_huge(size_t size) ZEND_ATTRIBUTE_ALLOC_SIZE(1);

# define _ZEND_BIN_ALLOCATOR_SELECTOR_START(_num, _size, _elements, _pages, size, y) \
	((size <= _size) ? _emalloc_ ## _size() :
# define _ZEND_BIN_ALLOCATOR_SELECTOR_END(_num, _size, _elements, _pages, size, y) \
	)

# define ZEND_ALLOCATOR(size) \
	ZEND_MM_BINS_INFO(_ZEND_BIN_ALLOCATOR_SELECTOR_START, size, y) \
	((size <= ZEND_MM_MAX_LARGE_SIZE) ? _emalloc_large(size) : _emalloc_huge(size)) \
	ZEND_MM_BINS_INFO(_ZEND_BIN_ALLOCATOR_SELECTOR_END, size, y)

# define _emalloc(size) \
	(__builtin_constant_p(size) ? \
		ZEND_ALLOCATOR(size) \
	: \
		_emalloc(size) \
	)

# define _ZEND_BIN_DEALLOCATOR_DEF(_num, _size, _elements, _pages, x, y) \
	ZEND_API void ZEND_FASTCALL _efree_ ## _size(void *);

ZEND_MM_BINS_INFO(_ZEND_BIN_DEALLOCATOR_DEF, x, y)

ZEND_API void ZEND_FASTCALL _efree_large(void *, size_t size);
ZEND_API void ZEND_FASTCALL _efree_huge(void *, size_t size);

# define _ZEND_BIN_DEALLOCATOR_SELECTOR_START(_num, _size, _elements, _pages, ptr, size) \
	if (size <= _size) { _efree_ ## _size(ptr); } else

# define ZEND_DEALLOCATOR(ptr, size) \
	ZEND_MM_BINS_INFO(_ZEND_BIN_DEALLOCATOR_SELECTOR_START, ptr, size) \
	if (size <= ZEND_MM_MAX_LARGE_SIZE) { _efree_large(ptr, size); } \
	else { _efree_huge(ptr, size); }

# define efree_size(ptr, size) do { \
		if (__builtin_constant_p(size)) { \
			ZEND_DEALLOCATOR(ptr, size) \
		} else { \
			_efree(ptr); \
		} \
	} while (0)
# define efree_size_rel(ptr, size) \
	efree_size(ptr, size)

#else

# define efree_size(ptr, size) \
	efree(ptr)
# define efree_size_rel(ptr, size) \
	efree_rel(ptr)

#define _emalloc_large _emalloc
#define _emalloc_huge  _emalloc
#define _efree_large   _efree
#define _efree_huge    _efree

#endif

/* Standard wrapper macros */
#define emalloc(size)						_emalloc((size) ZEND_FILE_LINE_CC ZEND_FILE_LINE_EMPTY_CC)
#define emalloc_large(size)					_emalloc_large((size) ZEND_FILE_LINE_CC ZEND_FILE_LINE_EMPTY_CC)
#define emalloc_huge(size)					_emalloc_huge((size) ZEND_FILE_LINE_CC ZEND_FILE_LINE_EMPTY_CC)
#define safe_emalloc(nmemb, size, offset)	_safe_emalloc((nmemb), (size), (offset) ZEND_FILE_LINE_CC ZEND_FILE_LINE_EMPTY_CC)
#define efree(ptr)							_efree((ptr) ZEND_FILE_LINE_CC ZEND_FILE_LINE_EMPTY_CC)
#define efree_large(ptr)					_efree_large((ptr) ZEND_FILE_LINE_CC ZEND_FILE_LINE_EMPTY_CC)
#define efree_huge(ptr)						_efree_huge((ptr) ZEND_FILE_LINE_CC ZEND_FILE_LINE_EMPTY_CC)
#define ecalloc(nmemb, size)				_ecalloc((nmemb), (size) ZEND_FILE_LINE_CC ZEND_FILE_LINE_EMPTY_CC)
#define erealloc(ptr, size)					_erealloc((ptr), (size) ZEND_FILE_LINE_CC ZEND_FILE_LINE_EMPTY_CC)
#define erealloc2(ptr, size, copy_size)		_erealloc2((ptr), (size), (copy_size) ZEND_FILE_LINE_CC ZEND_FILE_LINE_EMPTY_CC)
#define safe_erealloc(ptr, nmemb, size, offset)	_safe_erealloc((ptr), (nmemb), (size), (offset) ZEND_FILE_LINE_CC ZEND_FILE_LINE_EMPTY_CC)
#define erealloc_recoverable(ptr, size)		_erealloc((ptr), (size) ZEND_FILE_LINE_CC ZEND_FILE_LINE_EMPTY_CC)
#define erealloc2_recoverable(ptr, size, copy_size) _erealloc2((ptr), (size), (copy_size) ZEND_FILE_LINE_CC ZEND_FILE_LINE_EMPTY_CC)
#define estrdup(s)							_estrdup((s) ZEND_FILE_LINE_CC ZEND_FILE_LINE_EMPTY_CC)
#define estrndup(s, length)					_estrndup((s), (length) ZEND_FILE_LINE_CC ZEND_FILE_LINE_EMPTY_CC)
#define zend_mem_block_size(ptr)			_zend_mem_block_size((ptr) ZEND_FILE_LINE_CC ZEND_FILE_LINE_EMPTY_CC)

/* Relay wrapper macros */
#define emalloc_rel(size)						_emalloc((size) ZEND_FILE_LINE_RELAY_CC ZEND_FILE_LINE_CC)
#define safe_emalloc_rel(nmemb, size, offset)	_safe_emalloc((nmemb), (size), (offset) ZEND_FILE_LINE_RELAY_CC ZEND_FILE_LINE_CC)
#define efree_rel(ptr)							_efree((ptr) ZEND_FILE_LINE_RELAY_CC ZEND_FILE_LINE_CC)
#define ecalloc_rel(nmemb, size)				_ecalloc((nmemb), (size) ZEND_FILE_LINE_RELAY_CC ZEND_FILE_LINE_CC)
#define erealloc_rel(ptr, size)					_erealloc((ptr), (size) ZEND_FILE_LINE_RELAY_CC ZEND_FILE_LINE_CC)
#define erealloc2_rel(ptr, size, copy_size)		_erealloc2((ptr), (size), (copy_size) ZEND_FILE_LINE_RELAY_CC ZEND_FILE_LINE_CC)
#define erealloc_recoverable_rel(ptr, size)		_erealloc((ptr), (size) ZEND_FILE_LINE_RELAY_CC ZEND_FILE_LINE_CC)
#define erealloc2_recoverable_rel(ptr, size, copy_size) _erealloc2((ptr), (size), (copy_size) ZEND_FILE_LINE_RELAY_CC ZEND_FILE_LINE_CC)
#define safe_erealloc_rel(ptr, nmemb, size, offset)	_safe_erealloc((ptr), (nmemb), (size), (offset) ZEND_FILE_LINE_RELAY_CC ZEND_FILE_LINE_CC)
#define estrdup_rel(s)							_estrdup((s) ZEND_FILE_LINE_RELAY_CC ZEND_FILE_LINE_CC)
#define estrndup_rel(s, length)					_estrndup((s), (length) ZEND_FILE_LINE_RELAY_CC ZEND_FILE_LINE_CC)
#define zend_mem_block_size_rel(ptr)			_zend_mem_block_size((ptr) ZEND_FILE_LINE_RELAY_CC ZEND_FILE_LINE_CC)

ZEND_API ZEND_ATTRIBUTE_MALLOC void * __zend_malloc(size_t len ZEND_FILE_LINE_DC ZEND_FILE_LINE_ORIG_DC) ZEND_ATTRIBUTE_ALLOC_SIZE(1);
ZEND_API ZEND_ATTRIBUTE_MALLOC void * __zend_calloc(size_t nmemb, size_t len ZEND_FILE_LINE_DC ZEND_FILE_LINE_ORIG_DC) ZEND_ATTRIBUTE_ALLOC_SIZE2(1,2);
ZEND_API void * __zend_realloc(void *p, size_t len ZEND_FILE_LINE_DC ZEND_FILE_LINE_ORIG_DC) ZEND_ATTRIBUTE_ALLOC_SIZE(2);
ZEND_API void __zend_free(void *p ZEND_FILE_LINE_DC ZEND_FILE_LINE_ORIG_DC);
ZEND_API ZEND_ATTRIBUTE_MALLOC char * __zend_strdup(const char *s);

/* Selective persistent/non persistent allocation macros */
#define pemalloc(size, persistent) ((persistent)?__zend_malloc(size ZEND_FILE_LINE_CC ZEND_FILE_LINE_EMPTY_CC):emalloc(size))
#define safe_pemalloc(nmemb, size, offset, persistent)	((persistent)?_safe_malloc(nmemb, size, offset):safe_emalloc(nmemb, size, offset))
#define pefree(ptr, persistent)  ((persistent)?free(ptr):efree(ptr))
#define pefree_size(ptr, size, persistent)  do { \
		if (persistent) { \
			free(ptr); \
		} else { \
			efree_size(ptr, size);\
		} \
	} while (0)

#define pecalloc(nmemb, size, persistent) ((persistent)?__zend_calloc((nmemb), (size) ZEND_FILE_LINE_CC ZEND_FILE_LINE_EMPTY_CC):ecalloc((nmemb), (size)))
#define perealloc(ptr, size, persistent) ((persistent)?__zend_realloc((ptr), (size) ZEND_FILE_LINE_CC ZEND_FILE_LINE_EMPTY_CC):erealloc((ptr), (size)))
#define perealloc2(ptr, size, copy_size, persistent) ((persistent)?__zend_realloc((ptr), (size) ZEND_FILE_LINE_CC ZEND_FILE_LINE_EMPTY_CC):erealloc2((ptr), (size), (copy_size)))
#define safe_perealloc(ptr, nmemb, size, offset, persistent)	((persistent)?_safe_realloc((ptr), (nmemb), (size), (offset)):safe_erealloc((ptr), (nmemb), (size), (offset)))
#define perealloc_recoverable(ptr, size, persistent) ((persistent)?realloc((ptr), (size)):erealloc_recoverable((ptr), (size)))
#define perealloc2_recoverable(ptr, size, persistent) ((persistent)?realloc((ptr), (size)):erealloc2_recoverable((ptr), (size), (copy_size)))
#define pestrdup(s, persistent) ((persistent)?__zend_strdup(s):estrdup(s))
#define pestrndup(s, length, persistent) ((persistent)?zend_strndup((s),(length)):estrndup((s),(length)))

#define pemalloc_rel(size, persistent) ((persistent)?__zend_malloc(size ZEND_FILE_LINE_CC ZEND_FILE_LINE_EMPTY_CC):emalloc_rel(size))
#define pefree_rel(ptr, persistent)	((persistent)?free(ptr):efree_rel(ptr))
#define pecalloc_rel(nmemb, size, persistent) ((persistent)?__zend_calloc((nmemb), (size) ZEND_FILE_LINE_CC ZEND_FILE_LINE_EMPTY_CC):ecalloc_rel((nmemb), (size)))
#define perealloc_rel(ptr, size, persistent) ((persistent)?__zend_realloc((ptr), (size) ZEND_FILE_LINE_CC ZEND_FILE_LINE_EMPTY_CC):erealloc_rel((ptr), (size)))
#define perealloc2_rel(ptr, size, copy_size, persistent) ((persistent)?__zend_realloc((ptr), (size) ZEND_FILE_LINE_CC ZEND_FILE_LINE_EMPTY_CC):erealloc2_rel((ptr), (size), (copy_size)))
#define perealloc_recoverable_rel(ptr, size, persistent) ((persistent)?realloc((ptr), (size)):erealloc_recoverable_rel((ptr), (size)))
#define perealloc2_recoverable_rel(ptr, size, copy_size, persistent) ((persistent)?realloc((ptr), (size)):erealloc2_recoverable_rel((ptr), (size), (copy_size)))
#define pestrdup_rel(s, persistent) ((persistent)?strdup(s):estrdup_rel(s))

ZEND_API zend_result zend_set_memory_limit(size_t memory_limit);
ZEND_API bool zend_alloc_in_memory_limit_error_reporting(void);

ZEND_API void start_memory_manager(void);
ZEND_API void shutdown_memory_manager(bool silent, bool full_shutdown);
ZEND_API void refresh_memory_manager(void);
ZEND_API bool is_zend_mm(void);
ZEND_API bool is_zend_ptr(const void *ptr);

ZEND_API size_t zend_memory_usage(bool real_usage);
ZEND_API size_t zend_memory_peak_usage(bool real_usage);
ZEND_API void zend_memory_reset_peak_usage(void);

/* fast cache for HashTables */
#define ALLOC_HASHTABLE(ht)	\
	(ht) = (HashTable *) emalloc(sizeof(HashTable))

#define FREE_HASHTABLE(ht)	\
	efree_size(ht, sizeof(HashTable))

#define ALLOC_HASHTABLE_REL(ht)	\
	(ht) = (HashTable *) emalloc_rel(sizeof(HashTable))

#define FREE_HASHTABLE_REL(ht)	\
	efree_size_rel(ht, sizeof(HashTable))

/* Heap functions */
typedef struct _zend_mm_heap zend_mm_heap;

ZEND_API zend_mm_heap *zend_mm_startup(void);
ZEND_API void zend_mm_shutdown(zend_mm_heap *heap, bool full_shutdown, bool silent);
ZEND_API ZEND_ATTRIBUTE_MALLOC void*  ZEND_FASTCALL _zend_mm_alloc(zend_mm_heap *heap, size_t size ZEND_FILE_LINE_DC ZEND_FILE_LINE_ORIG_DC) ZEND_ATTRIBUTE_ALLOC_SIZE(2);
ZEND_API void   ZEND_FASTCALL _zend_mm_free(zend_mm_heap *heap, void *p ZEND_FILE_LINE_DC ZEND_FILE_LINE_ORIG_DC);
ZEND_API void*  ZEND_FASTCALL _zend_mm_realloc(zend_mm_heap *heap, void *p, size_t size ZEND_FILE_LINE_DC ZEND_FILE_LINE_ORIG_DC);
ZEND_API void*  ZEND_FASTCALL _zend_mm_realloc2(zend_mm_heap *heap, void *p, size_t size, size_t copy_size ZEND_FILE_LINE_DC ZEND_FILE_LINE_ORIG_DC);
ZEND_API size_t ZEND_FASTCALL _zend_mm_block_size(zend_mm_heap *heap, void *p ZEND_FILE_LINE_DC ZEND_FILE_LINE_ORIG_DC);

#define zend_mm_alloc(heap, size)			_zend_mm_alloc((heap), (size) ZEND_FILE_LINE_CC ZEND_FILE_LINE_EMPTY_CC)
#define zend_mm_free(heap, p)				_zend_mm_free((heap), (p) ZEND_FILE_LINE_CC ZEND_FILE_LINE_EMPTY_CC)
#define zend_mm_realloc(heap, p, size)		_zend_mm_realloc((heap), (p), (size) ZEND_FILE_LINE_CC ZEND_FILE_LINE_EMPTY_CC)
#define zend_mm_realloc2(heap, p, size, copy_size) _zend_mm_realloc2((heap), (p), (size), (copy_size) ZEND_FILE_LINE_CC ZEND_FILE_LINE_EMPTY_CC)
#define zend_mm_block_size(heap, p)			_zend_mm_block_size((heap), (p) ZEND_FILE_LINE_CC ZEND_FILE_LINE_EMPTY_CC)

#define zend_mm_alloc_rel(heap, size)		_zend_mm_alloc((heap), (size) ZEND_FILE_LINE_RELAY_CC ZEND_FILE_LINE_CC)
#define zend_mm_free_rel(heap, p)			_zend_mm_free((heap), (p) ZEND_FILE_LINE_RELAY_CC ZEND_FILE_LINE_CC)
#define zend_mm_realloc_rel(heap, p, size)	_zend_mm_realloc((heap), (p), (size) ZEND_FILE_LINE_RELAY_CC ZEND_FILE_LINE_CC)
#define zend_mm_realloc2_rel(heap, p, size, copy_size) _zend_mm_realloc2((heap), (p), (size), (copy_size) ZEND_FILE_LINE_RELAY_CC ZEND_FILE_LINE_CC)
#define zend_mm_block_size_rel(heap, p)		_zend_mm_block_size((heap), (p) ZEND_FILE_LINE_CC ZEND_FILE_LINE_EMPTY_CC)

ZEND_API zend_mm_heap *zend_mm_set_heap(zend_mm_heap *new_heap);
ZEND_API zend_mm_heap *zend_mm_get_heap(void);

ZEND_API size_t zend_mm_gc(zend_mm_heap *heap);

#define ZEND_MM_CUSTOM_HEAP_NONE  0
#define ZEND_MM_CUSTOM_HEAP_STD   1
#define ZEND_MM_CUSTOM_HEAP_DEBUG 2

ZEND_API bool zend_mm_is_custom_heap(zend_mm_heap *new_heap);
ZEND_API void zend_mm_set_custom_handlers(zend_mm_heap *heap,
                                          void*  (*_malloc)(size_t ZEND_FILE_LINE_DC ZEND_FILE_LINE_ORIG_DC),
                                          void   (*_free)(void* ZEND_FILE_LINE_DC ZEND_FILE_LINE_ORIG_DC),
                                          void*  (*_realloc)(void*, size_t ZEND_FILE_LINE_DC ZEND_FILE_LINE_ORIG_DC));
ZEND_API void zend_mm_set_custom_handlers_ex(zend_mm_heap *heap,
	                                         void*  (*_malloc)(size_t ZEND_FILE_LINE_DC ZEND_FILE_LINE_ORIG_DC),
		                                     void   (*_free)(void* ZEND_FILE_LINE_DC ZEND_FILE_LINE_ORIG_DC),
			                                 void*  (*_realloc)(void*, size_t ZEND_FILE_LINE_DC ZEND_FILE_LINE_ORIG_DC),
				                             size_t (*_gc)(void),
					                         void   (*_shutdown)(bool, bool));
ZEND_API void zend_mm_get_custom_handlers(zend_mm_heap *heap,
                                          void*  (**_malloc)(size_t ZEND_FILE_LINE_DC ZEND_FILE_LINE_ORIG_DC),
                                          void   (**_free)(void* ZEND_FILE_LINE_DC ZEND_FILE_LINE_ORIG_DC),
                                          void*  (**_realloc)(void*, size_t ZEND_FILE_LINE_DC ZEND_FILE_LINE_ORIG_DC));
ZEND_API void zend_mm_get_custom_handlers_ex(zend_mm_heap *heap,
                                          void*  (**_malloc)(size_t ZEND_FILE_LINE_DC ZEND_FILE_LINE_ORIG_DC),
                                          void   (**_free)(void* ZEND_FILE_LINE_DC ZEND_FILE_LINE_ORIG_DC),
                                          void*  (**_realloc)(void*, size_t ZEND_FILE_LINE_DC ZEND_FILE_LINE_ORIG_DC),
                                          size_t (**_gc)(void),
                                          void   (**_shutdown)(bool, bool));

typedef struct _zend_mm_storage zend_mm_storage;

typedef	void* (*zend_mm_chunk_alloc_t)(zend_mm_storage *storage, size_t size, size_t alignment);
typedef void  (*zend_mm_chunk_free_t)(zend_mm_storage *storage, void *chunk, size_t size);
typedef bool   (*zend_mm_chunk_truncate_t)(zend_mm_storage *storage, void *chunk, size_t old_size, size_t new_size);
typedef bool   (*zend_mm_chunk_extend_t)(zend_mm_storage *storage, void *chunk, size_t old_size, size_t new_size);

typedef struct _zend_mm_handlers {
	zend_mm_chunk_alloc_t       chunk_alloc;
	zend_mm_chunk_free_t        chunk_free;
	zend_mm_chunk_truncate_t    chunk_truncate;
	zend_mm_chunk_extend_t      chunk_extend;
} zend_mm_handlers;

struct _zend_mm_storage {
	const zend_mm_handlers handlers;
	void *data;
};

ZEND_API zend_mm_storage *zend_mm_get_storage(zend_mm_heap *heap);
ZEND_API zend_mm_heap *zend_mm_startup_ex(const zend_mm_handlers *handlers, void *data, size_t data_size);

ZEND_API void zend_mm_refresh_key_child(zend_mm_heap *heap);

/*

// The following example shows how to use zend_mm_heap API with custom storage

static zend_mm_heap *apc_heap = NULL;
static HashTable    *apc_ht = NULL;

typedef struct _apc_data {
	void     *mem;
	uint32_t  free_pages;
} apc_data;

static void *apc_chunk_alloc(zend_mm_storage *storage, size_t size, size_t alignment)
{
	apc_data *data = (apc_data*)(storage->data);
	size_t real_size = ((size + (ZEND_MM_CHUNK_SIZE-1)) & ~(ZEND_MM_CHUNK_SIZE-1));
	uint32_t count = real_size / ZEND_MM_CHUNK_SIZE;
	uint32_t first, last, i;

	ZEND_ASSERT(alignment == ZEND_MM_CHUNK_SIZE);

	for (first = 0; first < 32; first++) {
		if (!(data->free_pages & (1 << first))) {
			last = first;
			do {
				if (last - first == count - 1) {
					for (i = first; i <= last; i++) {
						data->free_pages |= (1 << i);
					}
					return (void *)(((char*)(data->mem)) + ZEND_MM_CHUNK_SIZE * (1 << first));
				}
				last++;
			} while (last < 32 && !(data->free_pages & (1 << last)));
			first = last;
		}
	}
	return NULL;
}

static void apc_chunk_free(zend_mm_storage *storage, void *chunk, size_t size)
{
	apc_data *data = (apc_data*)(storage->data);
	uint32_t i;

	ZEND_ASSERT(((uintptr_t)chunk & (ZEND_MM_CHUNK_SIZE - 1)) == 0);

	i = ((uintptr_t)chunk - (uintptr_t)(data->mem)) / ZEND_MM_CHUNK_SIZE;
	while (1) {
		data->free_pages &= ~(1 << i);
		if (size <= ZEND_MM_CHUNK_SIZE) {
			break;
		}
		size -= ZEND_MM_CHUNK_SIZE;
	}
}

static void apc_init_heap(void)
{
	zend_mm_handlers apc_handlers = {
		apc_chunk_alloc,
		apc_chunk_free,
		NULL,
		NULL,
	};
	apc_data tmp_data;
	zend_mm_heap *old_heap;

	// Preallocate properly aligned SHM chunks (64MB)
	tmp_data.mem = shm_memalign(ZEND_MM_CHUNK_SIZE, ZEND_MM_CHUNK_SIZE * 32);

	// Initialize temporary storage data
	tmp_data.free_pages = 0;

	// Create heap
	apc_heap = zend_mm_startup_ex(&apc_handlers, &tmp_data, sizeof(tmp_data));

	// Allocate some data in the heap
	old_heap = zend_mm_set_heap(apc_heap);
	ALLOC_HASHTABLE(apc_ht);
	zend_hash_init(apc_ht, 64, NULL, ZVAL_PTR_DTOR, 0);
	zend_mm_set_heap(old_heap);
}

*/

#ifdef ZTS
size_t zend_mm_globals_size(void);
#endif

END_EXTERN_C()

#endif
Zend/zend_objects.h000064400000004031151730543410010267 0ustar00/*
   +----------------------------------------------------------------------+
   | Zend Engine                                                          |
   +----------------------------------------------------------------------+
   | Copyright (c) Zend Technologies Ltd. (http://www.zend.com)           |
   +----------------------------------------------------------------------+
   | This source file is subject to version 2.00 of the Zend license,     |
   | that is bundled with this package in the file LICENSE, and is        |
   | available through the world-wide-web at the following url:           |
   | http://www.zend.com/license/2_00.txt.                                |
   | If you did not receive a copy of the Zend license and are unable to  |
   | obtain it through the world-wide-web, please send a note to          |
   | license@zend.com so we can mail you a copy immediately.              |
   +----------------------------------------------------------------------+
   | Authors: Andi Gutmans <andi@php.net>                                 |
   |          Zeev Suraski <zeev@php.net>                                 |
   +----------------------------------------------------------------------+
*/

#ifndef ZEND_OBJECTS_H
#define ZEND_OBJECTS_H

#include "zend.h"

BEGIN_EXTERN_C()
ZEND_API void ZEND_FASTCALL zend_object_std_init(zend_object *object, zend_class_entry *ce);
ZEND_API zend_object* ZEND_FASTCALL zend_objects_new(zend_class_entry *ce);
ZEND_API void ZEND_FASTCALL zend_objects_clone_members(zend_object *new_object, zend_object *old_object);

ZEND_API void zend_object_std_dtor(zend_object *object);
ZEND_API void zend_objects_destroy_object(zend_object *object);
ZEND_API zend_object *zend_objects_clone_obj(zend_object *object);
ZEND_API zend_object *zend_objects_clone_obj_with(zend_object *object, const zend_class_entry *scope, const HashTable *properties);

void zend_object_dtor_dynamic_properties(zend_object *object);
void zend_object_dtor_property(zend_object *object, zval *p);

END_EXTERN_C()

#endif /* ZEND_OBJECTS_H */
Zend/zend_compile.h000064400000152322151730543410010275 0ustar00/*
   +----------------------------------------------------------------------+
   | Zend Engine                                                          |
   +----------------------------------------------------------------------+
   | Copyright (c) Zend Technologies Ltd. (http://www.zend.com)           |
   +----------------------------------------------------------------------+
   | This source file is subject to version 2.00 of the Zend license,     |
   | that is bundled with this package in the file LICENSE, and is        |
   | available through the world-wide-web at the following url:           |
   | http://www.zend.com/license/2_00.txt.                                |
   | If you did not receive a copy of the Zend license and are unable to  |
   | obtain it through the world-wide-web, please send a note to          |
   | license@zend.com so we can mail you a copy immediately.              |
   +----------------------------------------------------------------------+
   | Authors: Andi Gutmans <andi@php.net>                                 |
   |          Zeev Suraski <zeev@php.net>                                 |
   +----------------------------------------------------------------------+
*/

#ifndef ZEND_COMPILE_H
#define ZEND_COMPILE_H

#include "zend_ast.h"
#include "zend_types.h"
#include "zend_map_ptr.h"
#include "zend_alloc.h"
#include "zend_vm_opcodes.h"

#include <stdarg.h>
#include <stdint.h>

#include "zend_llist.h"
#include "zend_frameless_function.h"
#include "zend_property_hooks.h"

#define SET_UNUSED(op) do { \
	op ## _type = IS_UNUSED; \
	op.num = (uint32_t) -1; \
} while (0)

#define MAKE_NOP(opline) do { \
	(opline)->opcode = ZEND_NOP; \
	SET_UNUSED((opline)->op1); \
	SET_UNUSED((opline)->op2); \
	SET_UNUSED((opline)->result); \
} while (0)

#define RESET_DOC_COMMENT() do { \
	if (CG(doc_comment)) { \
		zend_string_release_ex(CG(doc_comment), 0); \
		CG(doc_comment) = NULL; \
	} \
} while (0)

typedef struct _zend_op_array zend_op_array;
typedef struct _zend_op zend_op;

/* On 64-bit systems less optimal, but more compact VM code leads to better
 * performance. So on 32-bit systems we use absolute addresses for jump
 * targets and constants, but on 64-bit systems relative 32-bit offsets */
#if SIZEOF_SIZE_T == 4
# define ZEND_USE_ABS_JMP_ADDR      1
# define ZEND_USE_ABS_CONST_ADDR    1
#else
# define ZEND_USE_ABS_JMP_ADDR      0
# define ZEND_USE_ABS_CONST_ADDR    0
#endif

typedef union _znode_op {
	uint32_t      constant;
	uint32_t      var;
	uint32_t      num;
	uint32_t      opline_num; /*  Needs to be signed */
#if ZEND_USE_ABS_JMP_ADDR
	zend_op       *jmp_addr;
#else
	uint32_t      jmp_offset;
#endif
#if ZEND_USE_ABS_CONST_ADDR
	zval          *zv;
#endif
} znode_op;

typedef struct _znode { /* used only during compilation */
	uint8_t op_type;
	uint8_t flag;
	union {
		znode_op op;
		zval constant; /* replaced by literal/zv */
	} u;
} znode;

typedef struct _zend_ast_znode {
	zend_ast_kind kind;
	zend_ast_attr attr;
	uint32_t lineno;
	znode node;
} zend_ast_znode;

ZEND_API zend_ast * ZEND_FASTCALL zend_ast_create_znode(const znode *node);

static zend_always_inline znode *zend_ast_get_znode(zend_ast *ast) {
	return &((zend_ast_znode *) ast)->node;
}

typedef struct _zend_declarables {
	zend_long ticks;
} zend_declarables;

/* Compilation context that is different for each file, but shared between op arrays. */
typedef struct _zend_file_context {
	zend_declarables declarables;

	zend_string *current_namespace;
	bool in_namespace;
	bool has_bracketed_namespaces;

	HashTable *imports;
	HashTable *imports_function;
	HashTable *imports_const;

	HashTable seen_symbols;
} zend_file_context;

typedef union _zend_parser_stack_elem {
	zend_ast *ast;
	zend_string *str;
	zend_ulong num;
	unsigned char *ptr;
	unsigned char *ident;
} zend_parser_stack_elem;

void zend_compile_top_stmt(zend_ast *ast);
void zend_const_expr_to_zval(zval *result, zend_ast **ast_ptr, bool allow_dynamic);

typedef int (*user_opcode_handler_t) (zend_execute_data *execute_data);

struct _zend_op {
	zend_vm_opcode_handler_t handler;
	znode_op op1;
	znode_op op2;
	znode_op result;
	uint32_t extended_value;
	uint32_t lineno;
	uint8_t opcode;       /* Opcodes defined in Zend/zend_vm_opcodes.h */
	uint8_t op1_type;     /* IS_UNUSED, IS_CONST, IS_TMP_VAR, IS_VAR, IS_CV */
	uint8_t op2_type;     /* IS_UNUSED, IS_CONST, IS_TMP_VAR, IS_VAR, IS_CV */
	uint8_t result_type;  /* IS_UNUSED, IS_CONST, IS_TMP_VAR, IS_VAR, IS_CV */
#ifdef ZEND_VERIFY_TYPE_INFERENCE
	uint32_t op1_use_type;
	uint32_t op2_use_type;
	uint32_t result_use_type;
	uint32_t op1_def_type;
	uint32_t op2_def_type;
	uint32_t result_def_type;
#endif
};


typedef struct _zend_brk_cont_element {
	int start;
	int cont;
	int brk;
	int parent;
	bool is_switch;
} zend_brk_cont_element;

typedef struct _zend_label {
	int brk_cont;
	uint32_t opline_num;
} zend_label;

typedef struct _zend_try_catch_element {
	uint32_t try_op;
	uint32_t catch_op;  /* ketchup! */
	uint32_t finally_op;
	uint32_t finally_end;
} zend_try_catch_element;

#define ZEND_LIVE_TMPVAR  0
#define ZEND_LIVE_LOOP    1
#define ZEND_LIVE_SILENCE 2
#define ZEND_LIVE_ROPE    3
#define ZEND_LIVE_NEW     4
#define ZEND_LIVE_MASK    7

typedef struct _zend_live_range {
	uint32_t var; /* low bits are used for variable type (ZEND_LIVE_* macros) */
	uint32_t start;
	uint32_t end;
} zend_live_range;

typedef struct _zend_property_info zend_property_info;

/* Compilation context that is different for each op array. */
typedef struct _zend_oparray_context {
	struct _zend_oparray_context *prev;
	zend_op_array *op_array;
	uint32_t   opcodes_size;
	int        vars_size;
	int        literals_size;
	uint32_t   fast_call_var;
	uint32_t   try_catch_offset;
	int        current_brk_cont;
	int        last_brk_cont;
	zend_brk_cont_element *brk_cont_array;
	HashTable *labels;
	zend_string *active_property_info_name;
	zend_property_hook_kind active_property_hook_kind;
	bool       in_jmp_frameless_branch;
	bool has_assigned_to_http_response_header;
} zend_oparray_context;

/* Class, property and method flags                  class|meth.|prop.|const*/
/*                                                        |     |     |     */
/* Common flags                                           |     |     |     */
/* ============                                           |     |     |     */
/*                                                        |     |     |     */
/* Visibility flags (public < protected < private)        |     |     |     */
#define ZEND_ACC_PUBLIC                  (1 <<  0) /*     |  X  |  X  |  X  */
#define ZEND_ACC_PROTECTED               (1 <<  1) /*     |  X  |  X  |  X  */
#define ZEND_ACC_PRIVATE                 (1 <<  2) /*     |  X  |  X  |  X  */
/*                                                        |     |     |     */
/* Property or method overrides private one               |     |     |     */
#define ZEND_ACC_CHANGED                 (1 <<  3) /*     |  X  |  X  |     */
/*                                                        |     |     |     */
/* Static method or property                              |     |     |     */
#define ZEND_ACC_STATIC                  (1 <<  4) /*     |  X  |  X  |     */
/*                                                        |     |     |     */
/* Final class or method                                  |     |     |     */
#define ZEND_ACC_FINAL                   (1 <<  5) /*  X  |  X  |  X  |  X  */
/*                                                        |     |     |     */
/* Abstract method                                        |     |     |     */
#define ZEND_ACC_ABSTRACT                (1 <<  6) /*  X  |  X  |  X  |     */
#define ZEND_ACC_EXPLICIT_ABSTRACT_CLASS (1 <<  6) /*  X  |     |     |     */
/*                                                        |     |     |     */
/* Readonly property                                      |     |     |     */
#define ZEND_ACC_READONLY                (1 <<  7) /*     |     |  X  |     */
/*                                                        |     |     |     */
/* Immutable op_array and class_entries                   |     |     |     */
/* (implemented only for lazy loading of op_arrays)       |     |     |     */
#define ZEND_ACC_IMMUTABLE               (1 <<  7) /*  X  |  X  |     |     */
/*                                                        |     |     |     */
/* Function has typed arguments / class has typed props   |     |     |     */
#define ZEND_ACC_HAS_TYPE_HINTS          (1 <<  8) /*  X  |  X  |     |     */
/*                                                        |     |     |     */
/* Top-level class or function declaration                |     |     |     */
#define ZEND_ACC_TOP_LEVEL               (1 <<  9) /*  X  |  X  |     |     */
/*                                                        |     |     |     */
/* op_array or class is preloaded                         |     |     |     */
#define ZEND_ACC_PRELOADED               (1 << 10) /*  X  |  X  |     |     */
/*                                                        |     |     |     */
/* Flag to differentiate cases from constants.            |     |     |     */
/* Must not conflict with ZEND_ACC_ visibility flags      |     |     |     */
/* or IS_CONSTANT_VISITED_MARK                            |     |     |     */
#define ZEND_CLASS_CONST_IS_CASE         (1 <<  6) /*     |     |     |  X  */
/*                                                        |     |     |     */
/* deprecation flag                                       |     |     |     */
#define ZEND_ACC_DEPRECATED              (1 << 11) /*  X  |  X  |     |  X  */
/*                                                        |     |     |     */
/* has #[\Override] attribute                             |     |     |     */
#define ZEND_ACC_OVERRIDE                (1 << 28) /*     |  X  |  X  |     */
/*                                                        |     |     |     */
/* Property Flags (unused: 13-27,29...)                   |     |     |     */
/* ===========                                            |     |     |     */
/*                                                        |     |     |     */
/* Promoted property / parameter                          |     |     |     */
#define ZEND_ACC_PROMOTED                (1 <<  8) /*     |     |  X  |     */
/*                                                        |     |     |     */
/* Virtual property without backing storage               |     |     |     */
#define ZEND_ACC_VIRTUAL                 (1 <<  9) /*     |     |  X  |     */
/*                                                        |     |     |     */
/* Asymmetric visibility                                  |     |     |     */
#define ZEND_ACC_PUBLIC_SET              (1 << 10) /*     |     |  X  |     */
#define ZEND_ACC_PROTECTED_SET           (1 << 11) /*     |     |  X  |     */
#define ZEND_ACC_PRIVATE_SET             (1 << 12) /*     |     |  X  |     */
/*                                                        |     |     |     */
/* Class Flags (unused: 31)                               |     |     |     */
/* ===========                                            |     |     |     */
/*                                                        |     |     |     */
/* Special class types                                    |     |     |     */
#define ZEND_ACC_INTERFACE               (1 <<  0) /*  X  |     |     |     */
#define ZEND_ACC_TRAIT                   (1 <<  1) /*  X  |     |     |     */
#define ZEND_ACC_ANON_CLASS              (1 <<  2) /*  X  |     |     |     */
#define ZEND_ACC_ENUM                    (1 << 28) /*  X  |     |     |     */
/*                                                        |     |     |     */
/* Class linked with parent, interfaces and traits        |     |     |     */
#define ZEND_ACC_LINKED                  (1 <<  3) /*  X  |     |     |     */
/*                                                        |     |     |     */
/* Class is abstract, since it is set by any              |     |     |     */
/* abstract method                                        |     |     |     */
#define ZEND_ACC_IMPLICIT_ABSTRACT_CLASS (1 <<  4) /*  X  |     |     |     */
/*                                                        |     |     |     */
/* Class has magic methods __get/__set/__unset/           |     |     |     */
/* __isset that use guards                                |     |     |     */
#define ZEND_ACC_USE_GUARDS              (1 << 30) /*  X  |     |     |     */
/*                                                        |     |     |     */
/* Class constants updated                                |     |     |     */
#define ZEND_ACC_CONSTANTS_UPDATED       (1 << 12) /*  X  |     |     |     */
/*                                                        |     |     |     */
/* Objects of this class may not have dynamic properties  |     |     |     */
#define ZEND_ACC_NO_DYNAMIC_PROPERTIES   (1 << 13) /*  X  |     |     |     */
/*                                                        |     |     |     */
/* User class has methods with static variables           |     |     |     */
#define ZEND_HAS_STATIC_IN_METHODS       (1 << 14) /*  X  |     |     |     */
/*                                                        |     |     |     */
/* Objects of this class may have dynamic properties      |     |     |     */
/* without triggering a deprecation warning               |     |     |     */
#define ZEND_ACC_ALLOW_DYNAMIC_PROPERTIES (1 << 15) /* X  |     |     |     */
/*                                                        |     |     |     */
/* Readonly class                                         |     |     |     */
#define ZEND_ACC_READONLY_CLASS          (1 << 16) /*  X  |     |     |     */
/*                                                        |     |     |     */
/* Parent class is resolved (CE).                         |     |     |     */
#define ZEND_ACC_RESOLVED_PARENT         (1 << 17) /*  X  |     |     |     */
/*                                                        |     |     |     */
/* Interfaces are resolved (CEs).                         |     |     |     */
#define ZEND_ACC_RESOLVED_INTERFACES     (1 << 18) /*  X  |     |     |     */
/*                                                        |     |     |     */
/* Class has unresolved variance obligations.             |     |     |     */
#define ZEND_ACC_UNRESOLVED_VARIANCE     (1 << 19) /*  X  |     |     |     */
/*                                                        |     |     |     */
/* Class is linked apart from variance obligations.       |     |     |     */
#define ZEND_ACC_NEARLY_LINKED           (1 << 20) /*  X  |     |     |     */
/* Class has readonly props                               |     |     |     */
#define ZEND_ACC_HAS_READONLY_PROPS      (1 << 21) /*  X  |     |     |     */
/*                                                        |     |     |     */
/* stored in opcache (may be partially)                   |     |     |     */
#define ZEND_ACC_CACHED                  (1 << 22) /*  X  |     |     |     */
/*                                                        |     |     |     */
/* temporary flag used during delayed variance checks     |     |     |     */
#define ZEND_ACC_CACHEABLE               (1 << 23) /*  X  |     |     |     */
/*                                                        |     |     |     */
#define ZEND_ACC_HAS_AST_CONSTANTS       (1 << 24) /*  X  |     |     |     */
#define ZEND_ACC_HAS_AST_PROPERTIES      (1 << 25) /*  X  |     |     |     */
#define ZEND_ACC_HAS_AST_STATICS         (1 << 26) /*  X  |     |     |     */
/*                                                        |     |     |     */
/* loaded from file cache to process memory               |     |     |     */
#define ZEND_ACC_FILE_CACHED             (1 << 27) /*  X  |     |     |     */
/*                                                        |     |     |     */
/* Class cannot be serialized or unserialized             |     |     |     */
#define ZEND_ACC_NOT_SERIALIZABLE        (1 << 29) /*  X  |     |     |     */
/*                                                        |     |     |     */
/* Function Flags (unused: 30)                            |     |     |     */
/* ==============                                         |     |     |     */
/*                                                        |     |     |     */
/* Function returning by reference                        |     |     |     */
#define ZEND_ACC_RETURN_REFERENCE        (1 << 12) /*     |  X  |     |     */
/*                                                        |     |     |     */
/* Function has a return type                             |     |     |     */
#define ZEND_ACC_HAS_RETURN_TYPE         (1 << 13) /*     |  X  |     |     */
/*                                                        |     |     |     */
/* Function with variable number of arguments             |     |     |     */
#define ZEND_ACC_VARIADIC                (1 << 14) /*     |  X  |     |     */
/*                                                        |     |     |     */
/* op_array has finally blocks (user only)                |     |     |     */
#define ZEND_ACC_HAS_FINALLY_BLOCK       (1 << 15) /*     |  X  |     |     */
/*                                                        |     |     |     */
/* "main" op_array with                                   |     |     |     */
/* ZEND_DECLARE_CLASS_DELAYED opcodes                     |     |     |     */
#define ZEND_ACC_EARLY_BINDING           (1 << 16) /*     |  X  |     |     */
/*                                                        |     |     |     */
/* closure uses $this                                     |     |     |     */
#define ZEND_ACC_USES_THIS               (1 << 17) /*     |  X  |     |     */
/*                                                        |     |     |     */
/* call through user function trampoline. e.g.            |     |     |     */
/* __call, __callstatic                                   |     |     |     */
#define ZEND_ACC_CALL_VIA_TRAMPOLINE     (1 << 18) /*     |  X  |     |     */
/*                                                        |     |     |     */
/* disable inline caching                                 |     |     |     */
#define ZEND_ACC_NEVER_CACHE             (1 << 19) /*     |  X  |     |     */
/*                                                        |     |     |     */
/* op_array is a clone of trait method                    |     |     |     */
#define ZEND_ACC_TRAIT_CLONE             (1 << 20) /*     |  X  |     |     */
/*                                                        |     |     |     */
/* functions is a constructor                             |     |     |     */
#define ZEND_ACC_CTOR                    (1 << 21) /*     |  X  |     |     */
/*                                                        |     |     |     */
/* Closure related                                        |     |     |     */
#define ZEND_ACC_CLOSURE                 (1 << 22) /*     |  X  |     |     */
#define ZEND_ACC_FAKE_CLOSURE            (1 << 23) /*     |  X  |     |     */ /* Same as ZEND_CALL_FAKE_CLOSURE */
/*                                                        |     |     |     */
#define ZEND_ACC_GENERATOR               (1 << 24) /*     |  X  |     |     */
/*                                                        |     |     |     */
/* function was processed by pass two (user only)         |     |     |     */
#define ZEND_ACC_DONE_PASS_TWO           (1 << 25) /*     |  X  |     |     */
/*                                                        |     |     |     */
/* internal function is allocated at arena (int only)     |     |     |     */
#define ZEND_ACC_ARENA_ALLOCATED         (1 << 25) /*     |  X  |     |     */
/*                                                        |     |     |     */
/* run_time_cache allocated on heap (user only)           |     |     |     */
#define ZEND_ACC_HEAP_RT_CACHE           (1 << 26) /*     |  X  |     |     */
/*                                                        |     |     |     */
/* method flag used by Closure::__invoke() (int only)     |     |     |     */
#define ZEND_ACC_USER_ARG_INFO           (1 << 26) /*     |  X  |     |     */
/*                                                        |     |     |     */
/* supports opcache compile-time evaluation (funcs)       |     |     |     */
#define ZEND_ACC_COMPILE_TIME_EVAL       (1 << 27) /*     |  X  |     |     */
/*                                                        |     |     |     */
/* Has IS_PTR operands that needs special cleaning; same  |     |     |     */
/* value as ZEND_ACC_OVERRIDE but override is for class   |     |     |     */
/* methods and this is for the top level op array         |     |     |     */
#define ZEND_ACC_PTR_OPS                 (1 << 28) /*     |  X  |     |     */
/*                                                        |     |     |     */
/* has #[\NoDiscard] attribute                            |     |     |     */
#define ZEND_ACC_NODISCARD               (1 << 29) /*     |  X  |     |     */
/*                                                        |     |     |     */
/* op_array uses strict mode types                        |     |     |     */
#define ZEND_ACC_STRICT_TYPES            (1U << 31) /*    |  X  |     |     */

#define ZEND_ACC_PPP_MASK  (ZEND_ACC_PUBLIC | ZEND_ACC_PROTECTED | ZEND_ACC_PRIVATE)
#define ZEND_ACC_PPP_SET_MASK  (ZEND_ACC_PUBLIC_SET | ZEND_ACC_PROTECTED_SET | ZEND_ACC_PRIVATE_SET)

static zend_always_inline uint32_t zend_visibility_to_set_visibility(uint32_t visibility)
{
	switch (visibility) {
		case ZEND_ACC_PUBLIC:
			return ZEND_ACC_PUBLIC_SET;
		case ZEND_ACC_PROTECTED:
			return ZEND_ACC_PROTECTED_SET;
		case ZEND_ACC_PRIVATE:
			return ZEND_ACC_PRIVATE_SET;
		EMPTY_SWITCH_DEFAULT_CASE();
	}
}

/* call through internal function handler. e.g. Closure::invoke() */
#define ZEND_ACC_CALL_VIA_HANDLER     ZEND_ACC_CALL_VIA_TRAMPOLINE

#define ZEND_ACC_UNINSTANTIABLE (       \
	ZEND_ACC_INTERFACE |                \
	ZEND_ACC_TRAIT |                    \
	ZEND_ACC_IMPLICIT_ABSTRACT_CLASS |  \
	ZEND_ACC_EXPLICIT_ABSTRACT_CLASS |  \
	ZEND_ACC_ENUM                       \
)

#define ZEND_SHORT_CIRCUITING_CHAIN_MASK 0x3
#define ZEND_SHORT_CIRCUITING_CHAIN_EXPR 0
#define ZEND_SHORT_CIRCUITING_CHAIN_ISSET 1
#define ZEND_SHORT_CIRCUITING_CHAIN_EMPTY 2

// Must not clash with ZEND_SHORT_CIRCUITING_CHAIN_MASK
#define ZEND_JMP_NULL_BP_VAR_IS 4

char *zend_visibility_string(uint32_t fn_flags);

#define ZEND_PROPERTY_HOOK_COUNT 2
#define ZEND_PROPERTY_HOOK_STRUCT_SIZE (sizeof(zend_function*) * ZEND_PROPERTY_HOOK_COUNT)

/* Stored in zend_property_info.offset, not returned by zend_get_property_offset(). */
#define ZEND_VIRTUAL_PROPERTY_OFFSET ((uint32_t)-1)

zend_property_hook_kind zend_get_property_hook_kind_from_name(zend_string *name);

typedef struct _zend_property_info {
	uint32_t offset; /* property offset for object properties or
	                      property index for static properties */
	uint32_t flags;
	zend_string *name;
	zend_string *doc_comment;
	HashTable *attributes;
	zend_class_entry *ce;
	zend_type type;
	const zend_property_info *prototype;
	zend_function **hooks;
} zend_property_info;

#define OBJ_PROP(obj, offset) \
	((zval*)((char*)(obj) + offset))
#define OBJ_PROP_NUM(obj, num) \
	(&(obj)->properties_table[(num)])
#define OBJ_PROP_TO_OFFSET(num) \
	((uint32_t)(XtOffsetOf(zend_object, properties_table) + sizeof(zval) * (num)))
#define OBJ_PROP_TO_NUM(offset) \
	(((offset) - OBJ_PROP_TO_OFFSET(0)) / sizeof(zval))
#define OBJ_PROP_SLOT_TO_OFFSET(obj, slot) \
	((uintptr_t)(slot) - (uintptr_t)(obj))

typedef struct _zend_class_constant {
	zval value; /* flags are stored in u2 */
	zend_string *doc_comment;
	HashTable *attributes;
	zend_class_entry *ce;
	zend_type type;
} zend_class_constant;

#define ZEND_CLASS_CONST_FLAGS(c) Z_CONSTANT_FLAGS((c)->value)

/* arg_info for internal functions */
typedef struct _zend_internal_arg_info {
	const char *name;
	zend_type type;
	const char *default_value;
} zend_internal_arg_info;

/* arg_info for user functions */
typedef struct _zend_arg_info {
	zend_string *name;
	zend_type type;
	zend_string *default_value;
} zend_arg_info;

/* the following structure repeats the layout of zend_internal_arg_info,
 * but its fields have different meaning. It's used as the first element of
 * arg_info array to define properties of internal functions.
 * It's also used for the return type.
 */
typedef struct _zend_internal_function_info {
	uintptr_t required_num_args;
	zend_type type;
	const char *default_value;
} zend_internal_function_info;

struct _zend_op_array {
	/* Common elements */
	uint8_t type;
	uint8_t arg_flags[3]; /* bitset of arg_info.pass_by_reference */
	uint32_t fn_flags;
	zend_string *function_name;
	zend_class_entry *scope;
	zend_function *prototype;
	uint32_t num_args;
	uint32_t required_num_args;
	zend_arg_info *arg_info;
	HashTable *attributes;
	ZEND_MAP_PTR_DEF(void **, run_time_cache);
	zend_string *doc_comment;
	uint32_t T;         /* number of temporary variables */
	const zend_property_info *prop_info; /* The corresponding prop_info if this is a hook. */
	/* END of common elements */

	int cache_size;     /* number of run_time_cache_slots * sizeof(void*) */
	int last_var;       /* number of CV variables */
	uint32_t last;      /* number of opcodes */

	zend_op *opcodes;
	ZEND_MAP_PTR_DEF(HashTable *, static_variables_ptr);
	HashTable *static_variables;
	zend_string **vars; /* names of CV variables */

	uint32_t *refcount;

	int last_live_range;
	int last_try_catch;
	zend_live_range *live_range;
	zend_try_catch_element *try_catch_array;

	zend_string *filename;
	uint32_t line_start;
	uint32_t line_end;

	int last_literal;
	uint32_t num_dynamic_func_defs;
	zval *literals;

	/* Functions that are declared dynamically are stored here and
	 * referenced by index from opcodes. */
	zend_op_array **dynamic_func_defs;

	void *reserved[ZEND_MAX_RESERVED_RESOURCES];
};


#define ZEND_RETURN_VALUE				0
#define ZEND_RETURN_REFERENCE			1

#define INTERNAL_FUNCTION_PARAMETERS zend_execute_data *execute_data, zval *return_value
#define INTERNAL_FUNCTION_PARAM_PASSTHRU execute_data, return_value

/* zend_internal_function_handler */
typedef void (ZEND_FASTCALL *zif_handler)(INTERNAL_FUNCTION_PARAMETERS);

typedef struct _zend_internal_function {
	/* Common elements */
	uint8_t type;
	uint8_t arg_flags[3]; /* bitset of arg_info.pass_by_reference */
	uint32_t fn_flags;
	zend_string* function_name;
	zend_class_entry *scope;
	zend_function *prototype;
	uint32_t num_args;
	uint32_t required_num_args;
	zend_internal_arg_info *arg_info;
	HashTable *attributes;
	ZEND_MAP_PTR_DEF(void **, run_time_cache);
	zend_string *doc_comment;
	uint32_t T;         /* number of temporary variables */
	const zend_property_info *prop_info; /* The corresponding prop_info if this is a hook. */
	/* END of common elements */

	zif_handler handler;
	struct _zend_module_entry *module;
	const zend_frameless_function_info *frameless_function_infos;
	void *reserved[ZEND_MAX_RESERVED_RESOURCES];
} zend_internal_function;

#define ZEND_FN_SCOPE_NAME(function)  ((function) && (function)->common.scope ? ZSTR_VAL((function)->common.scope->name) : "")

union _zend_function {
	uint8_t type;	/* MUST be the first element of this struct! */
	uint32_t   quick_arg_flags;

	struct {
		uint8_t type;  /* never used */
		uint8_t arg_flags[3]; /* bitset of arg_info.pass_by_reference */
		uint32_t fn_flags;
		zend_string *function_name;
		zend_class_entry *scope;
		zend_function *prototype;
		uint32_t num_args;
		uint32_t required_num_args;
		zend_arg_info *arg_info;  /* index -1 represents the return value info, if any */
		HashTable   *attributes;
		ZEND_MAP_PTR_DEF(void **, run_time_cache);
		zend_string *doc_comment;
		uint32_t T;         /* number of temporary variables */
		const zend_property_info *prop_info; /* The corresponding prop_info if this is a hook. */
	} common;

	zend_op_array op_array;
	zend_internal_function internal_function;
};

struct _zend_execute_data {
	const zend_op       *opline;           /* executed opline                */
	zend_execute_data   *call;             /* current call                   */
	zval                *return_value;
	zend_function       *func;             /* executed function              */
	zval                 This;             /* this + call_info + num_args    */
	zend_execute_data   *prev_execute_data;
	zend_array          *symbol_table;
	void               **run_time_cache;   /* cache op_array->run_time_cache */
	zend_array          *extra_named_params;
};

#define ZEND_CALL_HAS_THIS           IS_OBJECT_EX

/* Top 16 bits of Z_TYPE_INFO(EX(This)) are used as call_info flags */
#define ZEND_CALL_FUNCTION           (0 << 16)
#define ZEND_CALL_CODE               (1 << 16)
#define ZEND_CALL_NESTED             (0 << 17)
#define ZEND_CALL_TOP                (1 << 17)
#define ZEND_CALL_ALLOCATED          (1 << 18)
#define ZEND_CALL_FREE_EXTRA_ARGS    (1 << 19)
#define ZEND_CALL_HAS_SYMBOL_TABLE   (1 << 20)
#define ZEND_CALL_RELEASE_THIS       (1 << 21)
#define ZEND_CALL_CLOSURE            (1 << 22)
#define ZEND_CALL_FAKE_CLOSURE       (1 << 23) /* Same as ZEND_ACC_FAKE_CLOSURE */
#define ZEND_CALL_GENERATOR          (1 << 24)
#define ZEND_CALL_DYNAMIC            (1 << 25)
#define ZEND_CALL_MAY_HAVE_UNDEF     (1 << 26)
#define ZEND_CALL_HAS_EXTRA_NAMED_PARAMS (1 << 27)
#define ZEND_CALL_OBSERVED           (1 << 28) /* "fcall_begin" observer handler may set this flag */
                                               /* to prevent optimization in RETURN handler and    */
                                               /* keep all local variables for "fcall_end" handler */
#define ZEND_CALL_JIT_RESERVED       (1 << 29) /* reserved for tracing JIT */
#define ZEND_CALL_NEEDS_REATTACH     (1 << 30)
#define ZEND_CALL_SEND_ARG_BY_REF    (1u << 31)

#define ZEND_CALL_NESTED_FUNCTION    (ZEND_CALL_FUNCTION | ZEND_CALL_NESTED)
#define ZEND_CALL_NESTED_CODE        (ZEND_CALL_CODE | ZEND_CALL_NESTED)
#define ZEND_CALL_TOP_FUNCTION       (ZEND_CALL_TOP | ZEND_CALL_FUNCTION)
#define ZEND_CALL_TOP_CODE           (ZEND_CALL_CODE | ZEND_CALL_TOP)

#define ZEND_CALL_INFO(call) \
	Z_TYPE_INFO((call)->This)

#define ZEND_CALL_KIND_EX(call_info) \
	(call_info & (ZEND_CALL_CODE | ZEND_CALL_TOP))

#define ZEND_CALL_KIND(call) \
	ZEND_CALL_KIND_EX(ZEND_CALL_INFO(call))

#define ZEND_ADD_CALL_FLAG_EX(call_info, flag) do { \
		call_info |= (flag); \
	} while (0)

#define ZEND_DEL_CALL_FLAG_EX(call_info, flag) do { \
		call_info &= ~(flag); \
	} while (0)

#define ZEND_ADD_CALL_FLAG(call, flag) do { \
		ZEND_ADD_CALL_FLAG_EX(Z_TYPE_INFO((call)->This), flag); \
	} while (0)

#define ZEND_DEL_CALL_FLAG(call, flag) do { \
		ZEND_DEL_CALL_FLAG_EX(Z_TYPE_INFO((call)->This), flag); \
	} while (0)

#define ZEND_CALL_NUM_ARGS(call) \
	(call)->This.u2.num_args

/* Ensure the correct alignment before slots calculation */
ZEND_STATIC_ASSERT(ZEND_MM_ALIGNED_SIZE(sizeof(zval)) == sizeof(zval),
                   "zval must be aligned by ZEND_MM_ALIGNMENT");
/* A number of call frame slots (zvals) reserved for zend_execute_data. */
#define ZEND_CALL_FRAME_SLOT \
	((int)((sizeof(zend_execute_data) + sizeof(zval) - 1) / sizeof(zval)))

#define ZEND_CALL_VAR(call, n) \
	((zval*)(((char*)(call)) + ((int)(n))))

#define ZEND_CALL_VAR_NUM(call, n) \
	(((zval*)(call)) + (ZEND_CALL_FRAME_SLOT + ((int)(n))))

#define ZEND_CALL_ARG(call, n) \
	ZEND_CALL_VAR_NUM(call, ((int)(n)) - 1)

#define EX(element) 			((execute_data)->element)

#define EX_CALL_INFO()			ZEND_CALL_INFO(execute_data)
#define EX_CALL_KIND()			ZEND_CALL_KIND(execute_data)
#define EX_NUM_ARGS()			ZEND_CALL_NUM_ARGS(execute_data)

#define ZEND_CALL_USES_STRICT_TYPES(call) \
	(((call)->func->common.fn_flags & ZEND_ACC_STRICT_TYPES) != 0)

#define EX_USES_STRICT_TYPES() \
	ZEND_CALL_USES_STRICT_TYPES(execute_data)

#define ZEND_ARG_USES_STRICT_TYPES() \
	(EG(current_execute_data)->prev_execute_data && \
	 EG(current_execute_data)->prev_execute_data->func && \
	 ZEND_CALL_USES_STRICT_TYPES(EG(current_execute_data)->prev_execute_data))

#define ZEND_FLF_ARG_USES_STRICT_TYPES() \
	(EG(current_execute_data) && \
	 EG(current_execute_data)->func && \
	 ZEND_CALL_USES_STRICT_TYPES(EG(current_execute_data)))

#define ZEND_RET_USES_STRICT_TYPES() \
	ZEND_CALL_USES_STRICT_TYPES(EG(current_execute_data))

#define EX_VAR(n)				ZEND_CALL_VAR(execute_data, n)
#define EX_VAR_NUM(n)			ZEND_CALL_VAR_NUM(execute_data, n)

#define EX_VAR_TO_NUM(n)		((uint32_t)((n) / sizeof(zval) - ZEND_CALL_FRAME_SLOT))
#define EX_NUM_TO_VAR(n)		((uint32_t)(((n) + ZEND_CALL_FRAME_SLOT) * sizeof(zval)))

#define ZEND_OPLINE_TO_OFFSET(opline, target) \
	((char*)(target) - (char*)(opline))

#define ZEND_OPLINE_NUM_TO_OFFSET(op_array, opline, opline_num) \
	((char*)&(op_array)->opcodes[opline_num] - (char*)(opline))

#define ZEND_OFFSET_TO_OPLINE(base, offset) \
	((zend_op*)(((char*)(base)) + (int)offset))

#define ZEND_OFFSET_TO_OPLINE_NUM(op_array, base, offset) \
	(ZEND_OFFSET_TO_OPLINE(base, offset) - op_array->opcodes)

#if ZEND_USE_ABS_JMP_ADDR

/* run-time jump target */
# define OP_JMP_ADDR(opline, node) \
	(node).jmp_addr

# define ZEND_SET_OP_JMP_ADDR(opline, node, val) do { \
		(node).jmp_addr = (val); \
	} while (0)

/* convert jump target from compile-time to run-time */
# define ZEND_PASS_TWO_UPDATE_JMP_TARGET(op_array, opline, node) do { \
		(node).jmp_addr = (op_array)->opcodes + (node).opline_num; \
	} while (0)

/* convert jump target back from run-time to compile-time */
# define ZEND_PASS_TWO_UNDO_JMP_TARGET(op_array, opline, node) do { \
		(node).opline_num = (node).jmp_addr - (op_array)->opcodes; \
	} while (0)

#else

/* run-time jump target */
# define OP_JMP_ADDR(opline, node) \
	ZEND_OFFSET_TO_OPLINE(opline, (node).jmp_offset)

# define ZEND_SET_OP_JMP_ADDR(opline, node, val) do { \
		(node).jmp_offset = ZEND_OPLINE_TO_OFFSET(opline, val); \
	} while (0)

/* convert jump target from compile-time to run-time */
# define ZEND_PASS_TWO_UPDATE_JMP_TARGET(op_array, opline, node) do { \
		(node).jmp_offset = ZEND_OPLINE_NUM_TO_OFFSET(op_array, opline, (node).opline_num); \
	} while (0)

/* convert jump target back from run-time to compile-time */
# define ZEND_PASS_TWO_UNDO_JMP_TARGET(op_array, opline, node) do { \
		(node).opline_num = ZEND_OFFSET_TO_OPLINE_NUM(op_array, opline, (node).jmp_offset); \
	} while (0)

#endif

/* constant-time constant */
# define CT_CONSTANT_EX(op_array, num) \
	((op_array)->literals + (num))

# define CT_CONSTANT(node) \
	CT_CONSTANT_EX(CG(active_op_array), (node).constant)

#if ZEND_USE_ABS_CONST_ADDR

/* run-time constant */
# define RT_CONSTANT(opline, node) \
	(node).zv

/* convert constant from compile-time to run-time */
# define ZEND_PASS_TWO_UPDATE_CONSTANT(op_array, opline, node) do { \
		(node).zv = CT_CONSTANT_EX(op_array, (node).constant); \
	} while (0)

#else

/* At run-time, constants are allocated together with op_array->opcodes
 * and addressed relatively to current opline.
 */

/* run-time constant */
# define RT_CONSTANT(opline, node) \
	((zval*)(((char*)(opline)) + (int32_t)(node).constant))

/* convert constant from compile-time to run-time */
# define ZEND_PASS_TWO_UPDATE_CONSTANT(op_array, opline, node) do { \
		(node).constant = \
			(((char*)CT_CONSTANT_EX(op_array, (node).constant)) - \
			((char*)opline)); \
	} while (0)

#endif

/* convert constant back from run-time to compile-time */
#define ZEND_PASS_TWO_UNDO_CONSTANT(op_array, opline, node) do { \
		(node).constant = RT_CONSTANT(opline, node) - (op_array)->literals; \
	} while (0)

#define RUN_TIME_CACHE(op_array) \
	ZEND_MAP_PTR_GET((op_array)->run_time_cache)

#define ZEND_OP_ARRAY_EXTENSION(op_array, handle) \
	((void**)RUN_TIME_CACHE(op_array))[handle]

#define IS_UNUSED	0		/* Unused operand */
#define IS_CONST	(1<<0)
#define IS_TMP_VAR	(1<<1)
#define IS_VAR		(1<<2)
#define IS_CV		(1<<3)	/* Compiled variable */

/* Used for result.type of smart branch instructions */
#define IS_SMART_BRANCH_JMPZ  (1<<4)
#define IS_SMART_BRANCH_JMPNZ (1<<5)

#define ZEND_EXTRA_VALUE 1

#include "zend_globals.h"

typedef enum _zend_compile_position {
	ZEND_COMPILE_POSITION_AT_SHEBANG = 0,
	ZEND_COMPILE_POSITION_AT_OPEN_TAG,
	ZEND_COMPILE_POSITION_AFTER_OPEN_TAG
} zend_compile_position;

BEGIN_EXTERN_C()

void init_compiler(void);
void shutdown_compiler(void);
void zend_init_compiler_data_structures(void);

void zend_oparray_context_begin(zend_oparray_context *prev_context, zend_op_array *op_array);
void zend_oparray_context_end(zend_oparray_context *prev_context);
void zend_file_context_begin(zend_file_context *prev_context);
void zend_file_context_end(zend_file_context *prev_context);

extern ZEND_API zend_op_array *(*zend_compile_file)(zend_file_handle *file_handle, int type);
extern ZEND_API zend_op_array *(*zend_compile_string)(zend_string *source_string, const char *filename, zend_compile_position position);

ZEND_API int ZEND_FASTCALL lex_scan(zval *zendlval, zend_parser_stack_elem *elem);
void startup_scanner(void);
void shutdown_scanner(void);

ZEND_API zend_string *zend_set_compiled_filename(zend_string *new_compiled_filename);
ZEND_API void zend_restore_compiled_filename(zend_string *original_compiled_filename);
ZEND_API zend_string *zend_get_compiled_filename(void);
ZEND_API int zend_get_compiled_lineno(void);
ZEND_API size_t zend_get_scanned_file_offset(void);

ZEND_API zend_string *zend_get_compiled_variable_name(const zend_op_array *op_array, uint32_t var);

#ifdef ZTS
const char *zend_get_zendtext(void);
#endif

typedef zend_result (ZEND_FASTCALL *unary_op_type)(zval *, zval *);
typedef zend_result (ZEND_FASTCALL *binary_op_type)(zval *, zval *, zval *);

ZEND_API unary_op_type get_unary_op(int opcode);
ZEND_API binary_op_type get_binary_op(int opcode);

void zend_stop_lexing(void);
void zend_emit_final_return(bool return_one);

typedef enum {
	ZEND_MODIFIER_TARGET_PROPERTY = 0,
	ZEND_MODIFIER_TARGET_METHOD,
	ZEND_MODIFIER_TARGET_CONSTANT,
	ZEND_MODIFIER_TARGET_CPP,
	ZEND_MODIFIER_TARGET_PROPERTY_HOOK,
} zend_modifier_target;

/* Used during AST construction */
zend_ast *zend_ast_append_str(zend_ast *left, zend_ast *right);
zend_ast *zend_negate_num_string(zend_ast *ast);
uint32_t zend_add_class_modifier(uint32_t flags, uint32_t new_flag);
uint32_t zend_add_anonymous_class_modifier(uint32_t flags, uint32_t new_flag);
uint32_t zend_add_member_modifier(uint32_t flags, uint32_t new_flag, zend_modifier_target target);

uint32_t zend_modifier_token_to_flag(zend_modifier_target target, uint32_t flags);
uint32_t zend_modifier_list_to_flags(zend_modifier_target target, zend_ast *modifiers);

bool zend_handle_encoding_declaration(zend_ast *ast);

ZEND_API zend_class_entry *zend_bind_class_in_slot(
		zval *class_table_slot, zval *lcname, zend_string *lc_parent_name);
ZEND_API zend_result do_bind_function(zend_function *func, zval *lcname);
ZEND_API zend_result do_bind_class(zval *lcname, zend_string *lc_parent_name);

void zend_resolve_goto_label(zend_op_array *op_array, zend_op *opline);

ZEND_API void function_add_ref(zend_function *function);
zend_string *zval_make_interned_string(zval *zv);

#define INITIAL_OP_ARRAY_SIZE 64


/* helper functions in zend_language_scanner.l */
struct _zend_arena;

ZEND_API zend_op_array *compile_file(zend_file_handle *file_handle, int type);
ZEND_API zend_op_array *compile_string(zend_string *source_string, const char *filename, zend_compile_position position);
ZEND_API zend_op_array *compile_filename(int type, zend_string *filename);
ZEND_API zend_ast *zend_compile_string_to_ast(
		zend_string *code, struct _zend_arena **ast_arena, zend_string *filename);
ZEND_API zend_result zend_execute_scripts(int type, zval *retval, int file_count, ...);
ZEND_API zend_result zend_execute_script(int type, zval *retval, zend_file_handle *file_handle);
ZEND_API zend_result open_file_for_scanning(zend_file_handle *file_handle);
ZEND_API void init_op_array(zend_op_array *op_array, uint8_t type, int initial_ops_size);
ZEND_API void destroy_op_array(zend_op_array *op_array);
ZEND_API void zend_destroy_static_vars(zend_op_array *op_array);
ZEND_API void zend_destroy_file_handle(zend_file_handle *file_handle);
ZEND_API void zend_cleanup_mutable_class_data(zend_class_entry *ce);
ZEND_API void zend_cleanup_internal_class_data(zend_class_entry *ce);
ZEND_API void zend_type_release(zend_type type, bool persistent);
ZEND_API zend_string *zend_create_member_string(zend_string *class_name, zend_string *member_name);


ZEND_API ZEND_COLD void zend_user_exception_handler(void);

#define zend_try_exception_handler() do { \
		if (UNEXPECTED(EG(exception))) { \
			if (Z_TYPE(EG(user_exception_handler)) != IS_UNDEF) { \
				zend_user_exception_handler(); \
			} \
		} \
	} while (0)

void zend_free_internal_arg_info(zend_internal_function *function);
ZEND_API void destroy_zend_function(zend_function *function);
ZEND_API void zend_function_dtor(zval *zv);
ZEND_API void destroy_zend_class(zval *zv);
void zend_class_add_ref(zval *zv);

ZEND_API zend_string *zend_mangle_property_name(const char *src1, size_t src1_length, const char *src2, size_t src2_length, bool internal);
#define zend_unmangle_property_name(mangled_property, class_name, prop_name) \
        zend_unmangle_property_name_ex(mangled_property, class_name, prop_name, NULL)
ZEND_API zend_result zend_unmangle_property_name_ex(const zend_string *name, const char **class_name, const char **prop_name, size_t *prop_len);

static zend_always_inline const char *zend_get_unmangled_property_name(const zend_string *mangled_prop) {
	const char *class_name, *prop_name;
	zend_unmangle_property_name(mangled_prop, &class_name, &prop_name);
	return prop_name;
}

#define ZEND_FUNCTION_DTOR zend_function_dtor
#define ZEND_CLASS_DTOR destroy_zend_class

typedef bool (*zend_needs_live_range_cb)(zend_op_array *op_array, zend_op *opline);
ZEND_API void zend_recalc_live_ranges(
	zend_op_array *op_array, zend_needs_live_range_cb needs_live_range);

ZEND_API void pass_two(zend_op_array *op_array);
ZEND_API bool zend_is_compiling(void);
ZEND_API char *zend_make_compiled_string_description(const char *name);
ZEND_API void zend_initialize_class_data(zend_class_entry *ce, bool nullify_handlers);
uint32_t zend_get_class_fetch_type(const zend_string *name);
ZEND_API uint8_t zend_get_call_op(const zend_op *init_op, zend_function *fbc, bool result_used);
ZEND_API bool zend_is_smart_branch(const zend_op *opline);

typedef bool (*zend_auto_global_callback)(zend_string *name);
typedef struct _zend_auto_global {
	zend_string *name;
	zend_auto_global_callback auto_global_callback;
	bool jit;
	bool armed;
} zend_auto_global;

ZEND_API zend_result zend_register_auto_global(zend_string *name, bool jit, zend_auto_global_callback auto_global_callback);
ZEND_API void zend_activate_auto_globals(void);
ZEND_API bool zend_is_auto_global(zend_string *name);
ZEND_API bool zend_is_auto_global_str(const char *name, size_t len);
ZEND_API size_t zend_dirname(char *path, size_t len);
ZEND_API void zend_set_function_arg_flags(zend_function *func);

int ZEND_FASTCALL zendlex(zend_parser_stack_elem *elem);

void zend_assert_valid_class_name(const zend_string *const_name, const char *type);

zend_string *zend_type_to_string_resolved(zend_type type, zend_class_entry *scope);
ZEND_API zend_string *zend_type_to_string(zend_type type);

/* BEGIN: OPCODES */

#include "zend_vm_opcodes.h"

/* END: OPCODES */

/* class fetches */
#define ZEND_FETCH_CLASS_DEFAULT	0
#define ZEND_FETCH_CLASS_SELF		1
#define ZEND_FETCH_CLASS_PARENT		2
#define ZEND_FETCH_CLASS_STATIC		3
#define ZEND_FETCH_CLASS_AUTO		4
#define ZEND_FETCH_CLASS_INTERFACE	5
#define ZEND_FETCH_CLASS_TRAIT		6
#define ZEND_FETCH_CLASS_MASK        0x0f
#define ZEND_FETCH_CLASS_NO_AUTOLOAD 0x80
#define ZEND_FETCH_CLASS_SILENT      0x0100
#define ZEND_FETCH_CLASS_EXCEPTION   0x0200
#define ZEND_FETCH_CLASS_ALLOW_UNLINKED 0x0400
#define ZEND_FETCH_CLASS_ALLOW_NEARLY_LINKED 0x0800

/* These should not clash with ZEND_ACC_PPP_MASK and ZEND_ACC_PPP_SET_MASK */
#define ZEND_PARAM_REF      (1<<3)
#define ZEND_PARAM_VARIADIC (1<<4)

#define ZEND_NAME_FQ       0
#define ZEND_NAME_NOT_FQ   1
#define ZEND_NAME_RELATIVE 2

/* ZEND_FETCH_ flags in class name AST of new const expression must not clash with ZEND_NAME_ flags */
#define ZEND_CONST_EXPR_NEW_FETCH_TYPE_SHIFT 2

#define ZEND_TYPE_NULLABLE (1<<8)

#define ZEND_ARRAY_SYNTAX_LIST 1  /* list() */
#define ZEND_ARRAY_SYNTAX_LONG 2  /* array() */
#define ZEND_ARRAY_SYNTAX_SHORT 3 /* [] */

/* var status for backpatching */
#define BP_VAR_R			0
#define BP_VAR_W			1
#define BP_VAR_RW			2
#define BP_VAR_IS			3
#define BP_VAR_FUNC_ARG		4
#define BP_VAR_UNSET		5

#define ZEND_INTERNAL_FUNCTION		1
#define ZEND_USER_FUNCTION			2
#define ZEND_EVAL_CODE				4

#define ZEND_USER_CODE(type)		((type) != ZEND_INTERNAL_FUNCTION)

#define ZEND_INTERNAL_CLASS         1
#define ZEND_USER_CLASS             2

#define ZEND_EVAL				(1<<0)
#define ZEND_INCLUDE			(1<<1)
#define ZEND_INCLUDE_ONCE		(1<<2)
#define ZEND_REQUIRE			(1<<3)
#define ZEND_REQUIRE_ONCE		(1<<4)

/* global/local fetches */
#define ZEND_FETCH_GLOBAL		(1<<1)
#define ZEND_FETCH_LOCAL		(1<<2)
#define ZEND_FETCH_GLOBAL_LOCK	(1<<3)

#define ZEND_FETCH_TYPE_MASK	0xe

/* Only one of these can ever be in use */
#define ZEND_FETCH_REF			1
#define ZEND_FETCH_DIM_WRITE	2
#define ZEND_FETCH_OBJ_FLAGS	3

/* Used to mark what kind of operation a writing FETCH_DIM is used in,
 * to produce a more precise error on incorrect string offset use. */
#define ZEND_FETCH_DIM_REF 1
#define ZEND_FETCH_DIM_DIM 2
#define ZEND_FETCH_DIM_OBJ 3
#define ZEND_FETCH_DIM_INCDEC 4

#define ZEND_ISEMPTY			(1<<0)

#define ZEND_LAST_CATCH			(1<<0)

#define ZEND_FREE_ON_RETURN     (1<<0)
#define ZEND_FREE_SWITCH        (1<<1)
#define ZEND_FREE_VOID_CAST     (1<<2)

#define ZEND_SEND_BY_VAL     0u
#define ZEND_SEND_BY_REF     1u
#define ZEND_SEND_PREFER_REF 2u

#define ZEND_THROW_IS_EXPR 1u

#define ZEND_FCALL_MAY_HAVE_EXTRA_NAMED_PARAMS 1

/* The send mode, the is_variadic, the is_promoted, and the is_tentative flags are stored as part of zend_type */
#define _ZEND_SEND_MODE_SHIFT _ZEND_TYPE_EXTRA_FLAGS_SHIFT
#define _ZEND_IS_VARIADIC_BIT (1 << (_ZEND_TYPE_EXTRA_FLAGS_SHIFT + 2))
#define _ZEND_IS_PROMOTED_BIT (1 << (_ZEND_TYPE_EXTRA_FLAGS_SHIFT + 3))
#define _ZEND_IS_TENTATIVE_BIT (1 << (_ZEND_TYPE_EXTRA_FLAGS_SHIFT + 4))
#define ZEND_ARG_SEND_MODE(arg_info) \
	((ZEND_TYPE_FULL_MASK((arg_info)->type) >> _ZEND_SEND_MODE_SHIFT) & 3)
#define ZEND_ARG_IS_VARIADIC(arg_info) \
	((ZEND_TYPE_FULL_MASK((arg_info)->type) & _ZEND_IS_VARIADIC_BIT) != 0)
#define ZEND_ARG_IS_PROMOTED(arg_info) \
	((ZEND_TYPE_FULL_MASK((arg_info)->type) & _ZEND_IS_PROMOTED_BIT) != 0)
#define ZEND_ARG_TYPE_IS_TENTATIVE(arg_info) \
	((ZEND_TYPE_FULL_MASK((arg_info)->type) & _ZEND_IS_TENTATIVE_BIT) != 0)

#define ZEND_DIM_IS					(1 << 0) /* isset fetch needed for null coalesce. Set in zend_compile.c for ZEND_AST_DIM nested within ZEND_AST_COALESCE. */
#define ZEND_ALT_CASE_SYNTAX		(1 << 1) /* deprecated switch case terminated by semicolon */

/* Attributes for ${} encaps var in strings (ZEND_AST_DIM or ZEND_AST_VAR node) */
/* ZEND_AST_VAR nodes can have any of the ZEND_ENCAPS_VAR_* flags */
/* ZEND_AST_DIM flags can have ZEND_ENCAPS_VAR_DOLLAR_CURLY during the parse phase. */
#define ZEND_ENCAPS_VAR_DOLLAR_CURLY (1 << 0)
#define ZEND_ENCAPS_VAR_DOLLAR_CURLY_VAR_VAR (1 << 1)

/* Make sure these don't clash with ZEND_FETCH_CLASS_* flags. */
#define IS_CONSTANT_CLASS                    0x400 /* __CLASS__ in trait */
#define IS_CONSTANT_UNQUALIFIED_IN_NAMESPACE 0x800

static zend_always_inline bool zend_check_arg_send_type(const zend_function *zf, uint32_t arg_num, uint32_t mask)
{
	arg_num--;
	if (UNEXPECTED(arg_num >= zf->common.num_args)) {
		if (EXPECTED((zf->common.fn_flags & ZEND_ACC_VARIADIC) == 0)) {
			return 0;
		}
		arg_num = zf->common.num_args;
	}
	return UNEXPECTED((ZEND_ARG_SEND_MODE(&zf->common.arg_info[arg_num]) & mask) != 0);
}

#define ARG_MUST_BE_SENT_BY_REF(zf, arg_num) \
	zend_check_arg_send_type(zf, arg_num, ZEND_SEND_BY_REF)

#define ARG_SHOULD_BE_SENT_BY_REF(zf, arg_num) \
	zend_check_arg_send_type(zf, arg_num, ZEND_SEND_BY_REF|ZEND_SEND_PREFER_REF)

#define ARG_MAY_BE_SENT_BY_REF(zf, arg_num) \
	zend_check_arg_send_type(zf, arg_num, ZEND_SEND_PREFER_REF)

/* Quick API to check first 12 arguments */
#define MAX_ARG_FLAG_NUM 12

#ifdef WORDS_BIGENDIAN
# define ZEND_SET_ARG_FLAG(zf, arg_num, mask) do { \
		(zf)->quick_arg_flags |= ((mask) << ((arg_num) - 1) * 2); \
	} while (0)
# define ZEND_CHECK_ARG_FLAG(zf, arg_num, mask) \
	(((zf)->quick_arg_flags >> (((arg_num) - 1) * 2)) & (mask))
#else
# define ZEND_SET_ARG_FLAG(zf, arg_num, mask) do { \
		(zf)->quick_arg_flags |= (((mask) << 6) << (arg_num) * 2); \
	} while (0)
# define ZEND_CHECK_ARG_FLAG(zf, arg_num, mask) \
	(((zf)->quick_arg_flags >> (((arg_num) + 3) * 2)) & (mask))
#endif

#define QUICK_ARG_MUST_BE_SENT_BY_REF(zf, arg_num) \
	ZEND_CHECK_ARG_FLAG(zf, arg_num, ZEND_SEND_BY_REF)

#define QUICK_ARG_SHOULD_BE_SENT_BY_REF(zf, arg_num) \
	ZEND_CHECK_ARG_FLAG(zf, arg_num, ZEND_SEND_BY_REF|ZEND_SEND_PREFER_REF)

#define QUICK_ARG_MAY_BE_SENT_BY_REF(zf, arg_num) \
	ZEND_CHECK_ARG_FLAG(zf, arg_num, ZEND_SEND_PREFER_REF)

#define ZEND_RETURN_VAL 0
#define ZEND_RETURN_REF 1

#define ZEND_BIND_VAL      0
#define ZEND_BIND_REF      1
#define ZEND_BIND_IMPLICIT 2
#define ZEND_BIND_EXPLICIT 4

#define ZEND_RETURNS_FUNCTION (1<<0)
#define ZEND_RETURNS_VALUE    (1<<1)

#define ZEND_ARRAY_ELEMENT_REF		(1<<0)
#define ZEND_ARRAY_NOT_PACKED		(1<<1)
#define ZEND_ARRAY_SIZE_SHIFT		2

/* Attribute for ternary inside parentheses */
#define ZEND_PARENTHESIZED_CONDITIONAL 1

/* Used to distinguish (parent::$prop)::get() from parent hook call. */
#define ZEND_PARENTHESIZED_STATIC_PROP 1

/* Used to disallow pipes with arrow functions that lead to confusing parse trees. */
#define ZEND_PARENTHESIZED_ARROW_FUNC 1

/* For "use" AST nodes and the seen symbol table */
#define ZEND_SYMBOL_CLASS    (1<<0)
#define ZEND_SYMBOL_FUNCTION (1<<1)
#define ZEND_SYMBOL_CONST    (1<<2)

/* All increment opcodes are even (decrement are odd) */
#define ZEND_IS_INCREMENT(opcode) (((opcode) & 1) == 0)

#define ZEND_IS_BINARY_ASSIGN_OP_OPCODE(opcode) \
	(((opcode) >= ZEND_ADD) && ((opcode) <= ZEND_POW))

/* Pseudo-opcodes that are used only temporarily during compilation */
#define ZEND_GOTO  253
#define ZEND_BRK   254
#define ZEND_CONT  255


END_EXTERN_C()

#define ZEND_CLONE_FUNC_NAME		"__clone"
#define ZEND_CONSTRUCTOR_FUNC_NAME	"__construct"
#define ZEND_DESTRUCTOR_FUNC_NAME	"__destruct"
#define ZEND_GET_FUNC_NAME          "__get"
#define ZEND_SET_FUNC_NAME          "__set"
#define ZEND_UNSET_FUNC_NAME        "__unset"
#define ZEND_ISSET_FUNC_NAME        "__isset"
#define ZEND_CALL_FUNC_NAME         "__call"
#define ZEND_CALLSTATIC_FUNC_NAME   "__callstatic"
#define ZEND_TOSTRING_FUNC_NAME     "__tostring"
#define ZEND_INVOKE_FUNC_NAME       "__invoke"
#define ZEND_DEBUGINFO_FUNC_NAME    "__debuginfo"

/* The following constants may be combined in CG(compiler_options)
 * to change the default compiler behavior */

/* generate extended debug information */
#define ZEND_COMPILE_EXTENDED_STMT              (1<<0)
#define ZEND_COMPILE_EXTENDED_FCALL             (1<<1)
#define ZEND_COMPILE_EXTENDED_INFO              (ZEND_COMPILE_EXTENDED_STMT|ZEND_COMPILE_EXTENDED_FCALL)

/* call op_array handler of extensions */
#define ZEND_COMPILE_HANDLE_OP_ARRAY            (1<<2)

/* generate ZEND_INIT_FCALL_BY_NAME for internal functions instead of ZEND_INIT_FCALL */
#define ZEND_COMPILE_IGNORE_INTERNAL_FUNCTIONS  (1<<3)

/* don't perform early binding for classes inherited form internal ones;
 * in namespaces assume that internal class that doesn't exist at compile-time
 * may appear in run-time */
#define ZEND_COMPILE_IGNORE_INTERNAL_CLASSES    (1<<4)

/* generate ZEND_DECLARE_CLASS_DELAYED opcode to delay early binding */
#define ZEND_COMPILE_DELAYED_BINDING            (1<<5)

/* disable constant substitution at compile-time */
#define ZEND_COMPILE_NO_CONSTANT_SUBSTITUTION   (1<<6)

/* disable substitution of persistent constants at compile-time */
#define ZEND_COMPILE_NO_PERSISTENT_CONSTANT_SUBSTITUTION	(1<<8)

/* generate ZEND_INIT_FCALL_BY_NAME for userland functions instead of ZEND_INIT_FCALL */
#define ZEND_COMPILE_IGNORE_USER_FUNCTIONS      (1<<9)

/* force ZEND_ACC_USE_GUARDS for all classes */
#define ZEND_COMPILE_GUARDS						(1<<10)

/* disable builtin special case function calls */
#define ZEND_COMPILE_NO_BUILTINS				(1<<11)

/* result of compilation may be stored in file cache */
#define ZEND_COMPILE_WITH_FILE_CACHE			(1<<12)

/* ignore functions and classes declared in other files */
#define ZEND_COMPILE_IGNORE_OTHER_FILES			(1<<13)

/* this flag is set when compiler invoked by opcache_compile_file() */
#define ZEND_COMPILE_WITHOUT_EXECUTION          (1<<14)

/* this flag is set when compiler invoked during preloading */
#define ZEND_COMPILE_PRELOAD                    (1<<15)

/* disable jumptable optimization for switch statements */
#define ZEND_COMPILE_NO_JUMPTABLES				(1<<16)

/* this flag is set when compiler invoked during preloading in separate process */
#define ZEND_COMPILE_PRELOAD_IN_CHILD           (1<<17)

/* ignore observer notifications, e.g. to manually notify afterwards in a post-processing step after compilation */
#define ZEND_COMPILE_IGNORE_OBSERVER			(1<<18)

/* The default value for CG(compiler_options) */
#define ZEND_COMPILE_DEFAULT					ZEND_COMPILE_HANDLE_OP_ARRAY

/* The default value for CG(compiler_options) during eval() */
#define ZEND_COMPILE_DEFAULT_FOR_EVAL			0

ZEND_API bool zend_is_op_long_compatible(const zval *op);
ZEND_API bool zend_binary_op_produces_error(uint32_t opcode, const zval *op1, const zval *op2);
ZEND_API bool zend_unary_op_produces_error(uint32_t opcode, const zval *op);

bool zend_try_ct_eval_cast(zval *result, uint32_t type, zval *op1);

#endif /* ZEND_COMPILE_H */
Zend/zend_execute.h000064400000065131151730543420010311 0ustar00/*
   +----------------------------------------------------------------------+
   | Zend Engine                                                          |
   +----------------------------------------------------------------------+
   | Copyright (c) Zend Technologies Ltd. (http://www.zend.com)           |
   +----------------------------------------------------------------------+
   | This source file is subject to version 2.00 of the Zend license,     |
   | that is bundled with this package in the file LICENSE, and is        |
   | available through the world-wide-web at the following url:           |
   | http://www.zend.com/license/2_00.txt.                                |
   | If you did not receive a copy of the Zend license and are unable to  |
   | obtain it through the world-wide-web, please send a note to          |
   | license@zend.com so we can mail you a copy immediately.              |
   +----------------------------------------------------------------------+
   | Authors: Andi Gutmans <andi@php.net>                                 |
   |          Zeev Suraski <zeev@php.net>                                 |
   |          Dmitry Stogov <dmitry@php.net>                              |
   +----------------------------------------------------------------------+
*/

#ifndef ZEND_EXECUTE_H
#define ZEND_EXECUTE_H

#include "zend_compile.h"
#include "zend_hash.h"
#include "zend_operators.h"
#include "zend_variables.h"
#include "zend_constants.h"

#include <stdint.h>

BEGIN_EXTERN_C()
struct _zend_fcall_info;
ZEND_API extern void (*zend_execute_ex)(zend_execute_data *execute_data);
ZEND_API extern void (*zend_execute_internal)(zend_execute_data *execute_data, zval *return_value);

/* The lc_name may be stack allocated! */
ZEND_API extern zend_class_entry *(*zend_autoload)(zend_string *name, zend_string *lc_name);

void init_executor(void);
void shutdown_executor(void);
void shutdown_destructors(void);
ZEND_API void zend_shutdown_executor_values(bool fast_shutdown);

ZEND_API void zend_init_execute_data(zend_execute_data *execute_data, zend_op_array *op_array, zval *return_value);
ZEND_API void zend_init_func_execute_data(zend_execute_data *execute_data, zend_op_array *op_array, zval *return_value);
ZEND_API void zend_init_code_execute_data(zend_execute_data *execute_data, zend_op_array *op_array, zval *return_value);
ZEND_API void zend_execute(zend_op_array *op_array, zval *return_value);
ZEND_API void execute_ex(zend_execute_data *execute_data);
ZEND_API void execute_internal(zend_execute_data *execute_data, zval *return_value);
ZEND_API bool zend_is_valid_class_name(zend_string *name);
ZEND_API zend_class_entry *zend_lookup_class(zend_string *name);
ZEND_API zend_class_entry *zend_lookup_class_ex(zend_string *name, zend_string *lcname, uint32_t flags);
ZEND_API zend_class_entry *zend_get_called_scope(zend_execute_data *ex);
ZEND_API zend_object *zend_get_this_object(zend_execute_data *ex);
ZEND_API zend_result zend_eval_string(const char *str, zval *retval_ptr, const char *string_name);
ZEND_API zend_result zend_eval_stringl(const char *str, size_t str_len, zval *retval_ptr, const char *string_name);
ZEND_API zend_result zend_eval_string_ex(const char *str, zval *retval_ptr, const char *string_name, bool handle_exceptions);
ZEND_API zend_result zend_eval_stringl_ex(const char *str, size_t str_len, zval *retval_ptr, const char *string_name, bool handle_exceptions);

/* export zend_pass_function to allow comparisons against it */
extern ZEND_API const zend_internal_function zend_pass_function;

ZEND_API ZEND_COLD void ZEND_FASTCALL zend_missing_arg_error(const zend_execute_data *execute_data);
ZEND_API ZEND_COLD void ZEND_FASTCALL zend_deprecated_function(const zend_function *fbc);
ZEND_API ZEND_COLD void ZEND_FASTCALL zend_nodiscard_function(const zend_function *fbc);
ZEND_API ZEND_COLD void ZEND_FASTCALL zend_deprecated_class_constant(const zend_class_constant *c, const zend_string *constant_name);
ZEND_API ZEND_COLD void ZEND_FASTCALL zend_deprecated_constant(const zend_constant *c, const zend_string *constant_name);
ZEND_API ZEND_COLD void zend_use_of_deprecated_trait(zend_class_entry *trait, const zend_string *used_by);
ZEND_API ZEND_COLD void ZEND_FASTCALL zend_false_to_array_deprecated(void);
ZEND_COLD void ZEND_FASTCALL zend_param_must_be_ref(const zend_function *func, uint32_t arg_num);
ZEND_API ZEND_COLD void ZEND_FASTCALL zend_use_resource_as_offset(const zval *dim);
ZEND_API zend_never_inline ZEND_COLD void ZEND_FASTCALL zend_call_stack_size_error(void);

ZEND_API bool ZEND_FASTCALL zend_verify_ref_assignable_zval(zend_reference *ref, zval *zv, bool strict);

typedef enum {
	ZEND_VERIFY_PROP_ASSIGNABLE_BY_REF_CONTEXT_ASSIGNMENT,
	ZEND_VERIFY_PROP_ASSIGNABLE_BY_REF_CONTEXT_MAGIC_GET,
} zend_verify_prop_assignable_by_ref_context;
ZEND_API bool ZEND_FASTCALL zend_verify_prop_assignable_by_ref_ex(const zend_property_info *prop_info, zval *orig_val, bool strict, zend_verify_prop_assignable_by_ref_context context);
ZEND_API bool ZEND_FASTCALL zend_verify_prop_assignable_by_ref(const zend_property_info *prop_info, zval *orig_val, bool strict);

ZEND_API ZEND_COLD void zend_throw_ref_type_error_zval(const zend_property_info *prop, const zval *zv);
ZEND_API ZEND_COLD void zend_throw_ref_type_error_type(const zend_property_info *prop1, const zend_property_info *prop2, const zval *zv);
ZEND_API ZEND_COLD zval* ZEND_FASTCALL zend_undefined_offset_write(HashTable *ht, zend_long lval);
ZEND_API ZEND_COLD zval* ZEND_FASTCALL zend_undefined_index_write(HashTable *ht, zend_string *offset);
ZEND_API ZEND_COLD void zend_wrong_string_offset_error(void);

ZEND_API ZEND_COLD void ZEND_FASTCALL zend_readonly_property_modification_error(const zend_property_info *info);
ZEND_API ZEND_COLD void ZEND_FASTCALL zend_readonly_property_modification_error_ex(const char *class_name, const char *prop_name);
ZEND_API ZEND_COLD void ZEND_FASTCALL zend_readonly_property_indirect_modification_error(const zend_property_info *info);

ZEND_API ZEND_COLD void ZEND_FASTCALL zend_invalid_class_constant_type_error(uint8_t type);

ZEND_API ZEND_COLD void ZEND_FASTCALL zend_object_released_while_assigning_to_property_error(const zend_property_info *info);

ZEND_API ZEND_COLD void ZEND_FASTCALL zend_cannot_add_element(void);

ZEND_API bool ZEND_FASTCALL zend_asymmetric_property_has_set_access(const zend_property_info *prop_info);
ZEND_API ZEND_COLD void ZEND_FASTCALL zend_asymmetric_visibility_property_modification_error(const zend_property_info *prop_info, const char *operation);

ZEND_API bool zend_verify_scalar_type_hint(uint32_t type_mask, zval *arg, bool strict, bool is_internal_arg);
ZEND_API ZEND_COLD void zend_verify_arg_error(
		const zend_function *zf, const zend_arg_info *arg_info, uint32_t arg_num, const zval *value);
ZEND_API ZEND_COLD void zend_verify_return_error(
		const zend_function *zf, const zval *value);
ZEND_API ZEND_COLD void zend_verify_never_error(
		const zend_function *zf);
ZEND_API bool zend_verify_ref_array_assignable(zend_reference *ref);
ZEND_API bool zend_check_user_type_slow(
		const zend_type *type, zval *arg, const zend_reference *ref, bool is_return_type);

#if ZEND_DEBUG
ZEND_API bool zend_internal_call_should_throw(const zend_function *fbc, zend_execute_data *call);
ZEND_API ZEND_COLD void zend_internal_call_arginfo_violation(const zend_function *fbc);
ZEND_API bool zend_verify_internal_return_type(const zend_function *zf, zval *ret);
#endif

#define ZEND_REF_TYPE_SOURCES(ref) \
	(ref)->sources

#define ZEND_REF_HAS_TYPE_SOURCES(ref) \
	(ZEND_REF_TYPE_SOURCES(ref).ptr != NULL)

#define ZEND_REF_FIRST_SOURCE(ref) \
	(ZEND_PROPERTY_INFO_SOURCE_IS_LIST((ref)->sources.list) \
		? ZEND_PROPERTY_INFO_SOURCE_TO_LIST((ref)->sources.list)->ptr[0] \
		: (ref)->sources.ptr)


ZEND_API void ZEND_FASTCALL zend_ref_add_type_source(zend_property_info_source_list *source_list, zend_property_info *prop);
ZEND_API void ZEND_FASTCALL zend_ref_del_type_source(zend_property_info_source_list *source_list, const zend_property_info *prop);

ZEND_API zval* zend_assign_to_typed_ref(zval *variable_ptr, zval *value, uint8_t value_type, bool strict);
ZEND_API zval* zend_assign_to_typed_ref_ex(zval *variable_ptr, zval *value, uint8_t value_type, bool strict, zend_refcounted **garbage_ptr);

static zend_always_inline void zend_copy_to_variable(zval *variable_ptr, zval *value, uint8_t value_type)
{
	zend_refcounted *ref = NULL;

	if (ZEND_CONST_COND(value_type & (IS_VAR|IS_CV), 1) && Z_ISREF_P(value)) {
		ref = Z_COUNTED_P(value);
		value = Z_REFVAL_P(value);
	}

	ZVAL_COPY_VALUE(variable_ptr, value);
	if (ZEND_CONST_COND(value_type  == IS_CONST, 0)) {
		if (UNEXPECTED(Z_OPT_REFCOUNTED_P(variable_ptr))) {
			Z_ADDREF_P(variable_ptr);
		}
	} else if (value_type & (IS_CONST|IS_CV)) {
		if (Z_OPT_REFCOUNTED_P(variable_ptr)) {
			Z_ADDREF_P(variable_ptr);
		}
	} else if (ZEND_CONST_COND(value_type == IS_VAR, 1) && UNEXPECTED(ref)) {
		if (UNEXPECTED(GC_DELREF(ref) == 0)) {
			efree_size(ref, sizeof(zend_reference));
		} else if (Z_OPT_REFCOUNTED_P(variable_ptr)) {
			Z_ADDREF_P(variable_ptr);
		}
	}
}

static zend_always_inline zval* zend_assign_to_variable(zval *variable_ptr, zval *value, uint8_t value_type, bool strict)
{
	do {
		if (UNEXPECTED(Z_REFCOUNTED_P(variable_ptr))) {
			zend_refcounted *garbage;

			if (Z_ISREF_P(variable_ptr)) {
				if (UNEXPECTED(ZEND_REF_HAS_TYPE_SOURCES(Z_REF_P(variable_ptr)))) {
					return zend_assign_to_typed_ref(variable_ptr, value, value_type, strict);
				}

				variable_ptr = Z_REFVAL_P(variable_ptr);
				if (EXPECTED(!Z_REFCOUNTED_P(variable_ptr))) {
					break;
				}
			}
			garbage = Z_COUNTED_P(variable_ptr);
			zend_copy_to_variable(variable_ptr, value, value_type);
			GC_DTOR_NO_REF(garbage);
			return variable_ptr;
		}
	} while (0);

	zend_copy_to_variable(variable_ptr, value, value_type);
	return variable_ptr;
}

static zend_always_inline zval* zend_assign_to_variable_ex(zval *variable_ptr, zval *value, zend_uchar value_type, bool strict, zend_refcounted **garbage_ptr)
{
	do {
		if (UNEXPECTED(Z_REFCOUNTED_P(variable_ptr))) {
			if (Z_ISREF_P(variable_ptr)) {
				if (UNEXPECTED(ZEND_REF_HAS_TYPE_SOURCES(Z_REF_P(variable_ptr)))) {
					return zend_assign_to_typed_ref_ex(variable_ptr, value, value_type, strict, garbage_ptr);
				}

				variable_ptr = Z_REFVAL_P(variable_ptr);
				if (EXPECTED(!Z_REFCOUNTED_P(variable_ptr))) {
					break;
				}
			}
			*garbage_ptr = Z_COUNTED_P(variable_ptr);
		}
	} while (0);

	zend_copy_to_variable(variable_ptr, value, value_type);
	return variable_ptr;
}

static zend_always_inline void zend_safe_assign_to_variable_noref(zval *variable_ptr, zval *value) {
	if (Z_REFCOUNTED_P(variable_ptr)) {
		ZEND_ASSERT(Z_TYPE_P(variable_ptr) != IS_REFERENCE);
		zend_refcounted *ref = Z_COUNTED_P(variable_ptr);
		ZVAL_COPY_VALUE(variable_ptr, value);
		GC_DTOR_NO_REF(ref);
	} else {
		ZVAL_COPY_VALUE(variable_ptr, value);
	}
}

static zend_always_inline void zend_cast_zval_to_object(zval *result, zval *expr, uint8_t op1_type) {
	HashTable *ht;

	ZVAL_OBJ(result, zend_objects_new(zend_standard_class_def));
	if (Z_TYPE_P(expr) == IS_ARRAY) {
		ht = zend_symtable_to_proptable(Z_ARR_P(expr));
		if (GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE) {
			/* TODO: try not to duplicate immutable arrays as well ??? */
			ht = zend_array_dup(ht);
		}
		Z_OBJ_P(result)->properties = ht;
	} else if (Z_TYPE_P(expr) != IS_NULL) {
		if (UNEXPECTED(Z_TYPE_P(expr) == IS_DOUBLE && zend_isnan(Z_DVAL_P(expr)))) {
			zend_nan_coerced_to_type_warning(IS_OBJECT);
		}
		Z_OBJ_P(result)->properties = ht = zend_new_array(1);
		expr = zend_hash_add_new(ht, ZSTR_KNOWN(ZEND_STR_SCALAR), expr);
		if (op1_type == IS_CONST) {
			if (UNEXPECTED(Z_OPT_REFCOUNTED_P(expr))) Z_ADDREF_P(expr);
		} else {
			if (Z_OPT_REFCOUNTED_P(expr)) Z_ADDREF_P(expr);
		}
	}
}

static zend_always_inline void zend_cast_zval_to_array(zval *result, zval *expr, uint8_t op1_type) {
	extern zend_class_entry *zend_ce_closure;
	if (op1_type == IS_CONST || Z_TYPE_P(expr) != IS_OBJECT || Z_OBJCE_P(expr) == zend_ce_closure) {
		if (Z_TYPE_P(expr) != IS_NULL) {
			if (UNEXPECTED(Z_TYPE_P(expr) == IS_DOUBLE && zend_isnan(Z_DVAL_P(expr)))) {
				zend_nan_coerced_to_type_warning(IS_ARRAY);
			}
			ZVAL_ARR(result, zend_new_array(1));
			expr = zend_hash_index_add_new(Z_ARRVAL_P(result), 0, expr);
			if (op1_type == IS_CONST) {
				if (UNEXPECTED(Z_OPT_REFCOUNTED_P(expr))) Z_ADDREF_P(expr);
			} else {
				if (Z_OPT_REFCOUNTED_P(expr)) Z_ADDREF_P(expr);
			}
		} else {
			ZVAL_EMPTY_ARRAY(result);
		}
	} else if (ZEND_STD_BUILD_OBJECT_PROPERTIES_ARRAY_COMPATIBLE(expr)) {
		/* Optimized version without rebuilding properties HashTable */
		ZVAL_ARR(result, zend_std_build_object_properties_array(Z_OBJ_P(expr)));
	} else {
		HashTable *obj_ht = zend_get_properties_for(expr, ZEND_PROP_PURPOSE_ARRAY_CAST);
		if (obj_ht) {
			/* fast copy */
			ZVAL_ARR(result, zend_proptable_to_symtable(obj_ht,
				(Z_OBJCE_P(expr)->default_properties_count ||
				 Z_OBJ_P(expr)->handlers != &std_object_handlers ||
				 GC_IS_RECURSIVE(obj_ht))));
			zend_release_properties(obj_ht);
		} else {
			ZVAL_EMPTY_ARRAY(result);
		}
	}
}

ZEND_API zend_result ZEND_FASTCALL zval_update_constant(zval *pp);
ZEND_API zend_result ZEND_FASTCALL zval_update_constant_ex(zval *pp, zend_class_entry *scope);
ZEND_API zend_result ZEND_FASTCALL zval_update_constant_with_ctx(zval *pp, zend_class_entry *scope, zend_ast_evaluate_ctx *ctx);

/* dedicated Zend executor functions - do not use! */
struct _zend_vm_stack {
	zval *top;
	zval *end;
	zend_vm_stack prev;
};

/* Ensure the correct alignment before slots calculation */
ZEND_STATIC_ASSERT(ZEND_MM_ALIGNED_SIZE(sizeof(zval)) == sizeof(zval),
                   "zval must be aligned by ZEND_MM_ALIGNMENT");
/* A number of call frame slots (zvals) reserved for _zend_vm_stack. */
#define ZEND_VM_STACK_HEADER_SLOTS \
	((sizeof(struct _zend_vm_stack) + sizeof(zval) - 1) / sizeof(zval))

#define ZEND_VM_STACK_ELEMENTS(stack) \
	(((zval*)(stack)) + ZEND_VM_STACK_HEADER_SLOTS)

/*
 * In general in RELEASE build ZEND_ASSERT() must be zero-cost, but for some
 * reason, GCC generated worse code, performing CSE on assertion code and the
 * following "slow path" and moving memory read operations from slow path into
 * common header. This made a degradation for the fast path.
 * The following "#if ZEND_DEBUG" eliminates it.
 */
#if ZEND_DEBUG
# define ZEND_ASSERT_VM_STACK(stack) ZEND_ASSERT(stack->top > (zval *) stack && stack->end > (zval *) stack && stack->top <= stack->end)
# define ZEND_ASSERT_VM_STACK_GLOBAL ZEND_ASSERT(EG(vm_stack_top) > (zval *) EG(vm_stack) && EG(vm_stack_end) > (zval *) EG(vm_stack) && EG(vm_stack_top) <= EG(vm_stack_end))
#else
# define ZEND_ASSERT_VM_STACK(stack)
# define ZEND_ASSERT_VM_STACK_GLOBAL
#endif

ZEND_API void zend_vm_stack_init(void);
ZEND_API void zend_vm_stack_init_ex(size_t page_size);
ZEND_API void zend_vm_stack_destroy(void);
ZEND_API void* zend_vm_stack_extend(size_t size);

static zend_always_inline zend_vm_stack zend_vm_stack_new_page(size_t size, zend_vm_stack prev) {
	zend_vm_stack page = (zend_vm_stack)emalloc(size);

	page->top = ZEND_VM_STACK_ELEMENTS(page);
	page->end = (zval*)((char*)page + size);
	page->prev = prev;
	return page;
}

static zend_always_inline void zend_vm_init_call_frame(zend_execute_data *call, uint32_t call_info, zend_function *func, uint32_t num_args, void *object_or_called_scope)
{
	ZEND_ASSERT(!func->common.scope || object_or_called_scope);
	call->func = func;
	Z_PTR(call->This) = object_or_called_scope;
	ZEND_CALL_INFO(call) = call_info;
	ZEND_CALL_NUM_ARGS(call) = num_args;
}

static zend_always_inline zend_execute_data *zend_vm_stack_push_call_frame_ex(uint32_t used_stack, uint32_t call_info, zend_function *func, uint32_t num_args, void *object_or_called_scope)
{
	zend_execute_data *call = (zend_execute_data*)EG(vm_stack_top);

	ZEND_ASSERT_VM_STACK_GLOBAL;

	if (UNEXPECTED(used_stack > (size_t)(((char*)EG(vm_stack_end)) - (char*)call))) {
		call = (zend_execute_data*)zend_vm_stack_extend(used_stack);
		ZEND_ASSERT_VM_STACK_GLOBAL;
		zend_vm_init_call_frame(call, call_info | ZEND_CALL_ALLOCATED, func, num_args, object_or_called_scope);
		return call;
	} else {
		EG(vm_stack_top) = (zval*)((char*)call + used_stack);
		zend_vm_init_call_frame(call, call_info, func, num_args, object_or_called_scope);
		return call;
	}
}

static zend_always_inline uint32_t zend_vm_calc_used_stack(uint32_t num_args, zend_function *func)
{
	uint32_t used_stack = ZEND_CALL_FRAME_SLOT + num_args + func->common.T;

	if (EXPECTED(ZEND_USER_CODE(func->type))) {
		used_stack += func->op_array.last_var - MIN(func->op_array.num_args, num_args);
	}
	return used_stack * sizeof(zval);
}

static zend_always_inline zend_execute_data *zend_vm_stack_push_call_frame(uint32_t call_info, zend_function *func, uint32_t num_args, void *object_or_called_scope)
{
	uint32_t used_stack = zend_vm_calc_used_stack(num_args, func);

	return zend_vm_stack_push_call_frame_ex(used_stack, call_info,
		func, num_args, object_or_called_scope);
}

static zend_always_inline void zend_vm_stack_free_extra_args_ex(uint32_t call_info, zend_execute_data *call)
{
	if (UNEXPECTED(call_info & ZEND_CALL_FREE_EXTRA_ARGS)) {
		uint32_t count = ZEND_CALL_NUM_ARGS(call) - call->func->op_array.num_args;
		zval *p = ZEND_CALL_VAR_NUM(call, call->func->op_array.last_var + call->func->op_array.T);
		do {
			i_zval_ptr_dtor(p);
			p++;
		} while (--count);
 	}
}

static zend_always_inline void zend_vm_stack_free_extra_args(zend_execute_data *call)
{
	zend_vm_stack_free_extra_args_ex(ZEND_CALL_INFO(call), call);
}

static zend_always_inline void zend_vm_stack_free_args(zend_execute_data *call)
{
	uint32_t num_args = ZEND_CALL_NUM_ARGS(call);

	if (EXPECTED(num_args > 0)) {
		zval *p = ZEND_CALL_ARG(call, 1);

		do {
			zval_ptr_dtor_nogc(p);
			p++;
		} while (--num_args);
	}
}

static zend_always_inline void zend_vm_stack_free_call_frame_ex(uint32_t call_info, zend_execute_data *call)
{
	ZEND_ASSERT_VM_STACK_GLOBAL;

	if (UNEXPECTED(call_info & ZEND_CALL_ALLOCATED)) {
		zend_vm_stack p = EG(vm_stack);
		zend_vm_stack prev = p->prev;

		ZEND_ASSERT(call == (zend_execute_data*)ZEND_VM_STACK_ELEMENTS(EG(vm_stack)));
		EG(vm_stack_top) = prev->top;
		EG(vm_stack_end) = prev->end;
		EG(vm_stack) = prev;
		efree(p);
	} else {
		EG(vm_stack_top) = (zval*)call;
	}

	ZEND_ASSERT_VM_STACK_GLOBAL;
}

static zend_always_inline void zend_vm_stack_free_call_frame(zend_execute_data *call)
{
	zend_vm_stack_free_call_frame_ex(ZEND_CALL_INFO(call), call);
}

zend_execute_data *zend_vm_stack_copy_call_frame(
	zend_execute_data *call, uint32_t passed_args, uint32_t additional_args);

static zend_always_inline void zend_vm_stack_extend_call_frame(
	zend_execute_data **call, uint32_t passed_args, uint32_t additional_args)
{
	if (EXPECTED((uint32_t)(EG(vm_stack_end) - EG(vm_stack_top)) > additional_args)) {
		EG(vm_stack_top) += additional_args;
	} else {
		*call = zend_vm_stack_copy_call_frame(*call, passed_args, additional_args);
	}
}

ZEND_API void ZEND_FASTCALL zend_free_extra_named_params(zend_array *extra_named_params);

/* services */
ZEND_API const char *get_active_class_name(const char **space);
ZEND_API const char *get_active_function_name(void);
ZEND_API const char *get_active_function_arg_name(uint32_t arg_num);
ZEND_API const char *get_function_arg_name(const zend_function *func, uint32_t arg_num);
ZEND_API zend_function *zend_active_function_ex(zend_execute_data *execute_data);

static zend_always_inline zend_function *zend_active_function(void)
{
	zend_function *func = EG(current_execute_data)->func;
	if (ZEND_USER_CODE(func->type)) {
		return zend_active_function_ex(EG(current_execute_data));
	} else {
		return func;
	}
}

ZEND_API zend_string *get_active_function_or_method_name(void);
ZEND_API zend_string *get_function_or_method_name(const zend_function *func);
ZEND_API const char *zend_get_executed_filename(void);
ZEND_API zend_string *zend_get_executed_filename_ex(void);
ZEND_API uint32_t zend_get_executed_lineno(void);
ZEND_API zend_class_entry *zend_get_executed_scope(void);
ZEND_API bool zend_is_executing(void);
ZEND_API ZEND_COLD void ZEND_FASTCALL zend_cannot_pass_by_reference(uint32_t arg_num);

ZEND_API void zend_set_timeout(zend_long seconds, bool reset_signals);
ZEND_API void zend_unset_timeout(void);
ZEND_API ZEND_NORETURN void ZEND_FASTCALL zend_timeout(void);
ZEND_API zend_class_entry *zend_fetch_class(zend_string *class_name, uint32_t fetch_type);
ZEND_API zend_class_entry *zend_fetch_class_with_scope(zend_string *class_name, uint32_t fetch_type, zend_class_entry *scope);
ZEND_API zend_class_entry *zend_fetch_class_by_name(zend_string *class_name, zend_string *lcname, uint32_t fetch_type);

ZEND_API zend_function * ZEND_FASTCALL zend_fetch_function(zend_string *name);
ZEND_API zend_function * ZEND_FASTCALL zend_fetch_function_str(const char *name, size_t len);
ZEND_API void ZEND_FASTCALL zend_init_func_run_time_cache(zend_op_array *op_array);

ZEND_API void zend_fetch_dimension_const(zval *result, zval *container, zval *dim, int type);

ZEND_API zval* zend_get_compiled_variable_value(const zend_execute_data *execute_data_ptr, uint32_t var);

ZEND_API bool zend_gcc_global_regs(void);

#define ZEND_USER_OPCODE_CONTINUE   0 /* execute next opcode */
#define ZEND_USER_OPCODE_RETURN     1 /* exit from executor (return from function) */
#define ZEND_USER_OPCODE_DISPATCH   2 /* call original opcode handler */
#define ZEND_USER_OPCODE_ENTER      3 /* enter into new op_array without recursion */
#define ZEND_USER_OPCODE_LEAVE      4 /* return to calling op_array within the same executor */

#define ZEND_USER_OPCODE_DISPATCH_TO 0x100 /* call original handler of returned opcode */

ZEND_API zend_result zend_set_user_opcode_handler(uint8_t opcode, user_opcode_handler_t handler);
ZEND_API user_opcode_handler_t zend_get_user_opcode_handler(uint8_t opcode);

ZEND_API zval *zend_get_zval_ptr(const zend_op *opline, int op_type, const znode_op *node, const zend_execute_data *execute_data);

ZEND_API void zend_clean_and_cache_symbol_table(zend_array *symbol_table);
ZEND_API void ZEND_FASTCALL zend_free_compiled_variables(zend_execute_data *execute_data);
ZEND_API void zend_unfinished_calls_gc(zend_execute_data *execute_data, zend_execute_data *call, uint32_t op_num, zend_get_gc_buffer *buf);
ZEND_API void zend_cleanup_unfinished_execution(zend_execute_data *execute_data, uint32_t op_num, uint32_t catch_op_num);
ZEND_API ZEND_ATTRIBUTE_DEPRECATED HashTable *zend_unfinished_execution_gc(zend_execute_data *execute_data, zend_execute_data *call, zend_get_gc_buffer *gc_buffer);
ZEND_API HashTable *zend_unfinished_execution_gc_ex(zend_execute_data *execute_data, zend_execute_data *call, zend_get_gc_buffer *gc_buffer, bool suspended_by_yield);
ZEND_API zval* ZEND_FASTCALL zend_fetch_static_property(zend_execute_data *ex, int fetch_type);
ZEND_API zend_never_inline ZEND_COLD void ZEND_FASTCALL zend_undefined_method(const zend_class_entry *ce, const zend_string *method);
ZEND_API void ZEND_FASTCALL zend_non_static_method_call(const zend_function *fbc);

ZEND_API void zend_frameless_observed_call(zend_execute_data *execute_data);

zval * ZEND_FASTCALL zend_handle_named_arg(
		zend_execute_data **call_ptr, zend_string *arg_name,
		uint32_t *arg_num_ptr, void **cache_slot);
ZEND_API zend_result ZEND_FASTCALL zend_handle_undef_args(zend_execute_data *call);

#define CACHE_ADDR(num) \
	((void**)((char*)EX(run_time_cache) + (num)))

#define CACHED_PTR(num) \
	((void**)((char*)EX(run_time_cache) + (num)))[0]

#define CACHE_PTR(num, ptr) do { \
		((void**)((char*)EX(run_time_cache) + (num)))[0] = (ptr); \
	} while (0)

#define CACHED_POLYMORPHIC_PTR(num, ce) \
	(EXPECTED(((void**)((char*)EX(run_time_cache) + (num)))[0] == (void*)(ce)) ? \
		((void**)((char*)EX(run_time_cache) + (num)))[1] : \
		NULL)

#define CACHE_POLYMORPHIC_PTR(num, ce, ptr) do { \
		void **slot = (void**)((char*)EX(run_time_cache) + (num)); \
		slot[0] = (ce); \
		slot[1] = (ptr); \
	} while (0)

#define CACHED_PTR_EX(slot) \
	(slot)[0]

#define CACHE_PTR_EX(slot, ptr) do { \
		(slot)[0] = (ptr); \
	} while (0)

#define CACHED_POLYMORPHIC_PTR_EX(slot, ce) \
	(EXPECTED((slot)[0] == (ce)) ? (slot)[1] : NULL)

#define CACHE_POLYMORPHIC_PTR_EX(slot, ce, ptr) do { \
		(slot)[0] = (ce); \
		(slot)[1] = (ptr); \
	} while (0)

#define CACHE_SPECIAL (1<<0)

#define IS_SPECIAL_CACHE_VAL(ptr) \
	(((uintptr_t)(ptr)) & CACHE_SPECIAL)

#define ENCODE_SPECIAL_CACHE_NUM(num) \
	((void*)((((uintptr_t)(num)) << 1) | CACHE_SPECIAL))

#define DECODE_SPECIAL_CACHE_NUM(ptr) \
	(((uintptr_t)(ptr)) >> 1)

#define ENCODE_SPECIAL_CACHE_PTR(ptr) \
	((void*)(((uintptr_t)(ptr)) | CACHE_SPECIAL))

#define DECODE_SPECIAL_CACHE_PTR(ptr) \
	((void*)(((uintptr_t)(ptr)) & ~CACHE_SPECIAL))

#define SKIP_EXT_OPLINE(opline) do { \
		while (UNEXPECTED((opline)->opcode >= ZEND_EXT_STMT \
			&& (opline)->opcode <= ZEND_TICKS)) {     \
			(opline)--;                                  \
		}                                                \
	} while (0)

#define ZEND_CLASS_HAS_TYPE_HINTS(ce) ((bool)(ce->ce_flags & ZEND_ACC_HAS_TYPE_HINTS))
#define ZEND_CLASS_HAS_READONLY_PROPS(ce) ((bool)(ce->ce_flags & ZEND_ACC_HAS_READONLY_PROPS))


ZEND_API bool zend_verify_class_constant_type(const zend_class_constant *c, const zend_string *name, zval *constant);
ZEND_COLD void zend_verify_class_constant_type_error(const zend_class_constant *c, const zend_string *name, const zval *constant);

ZEND_API bool zend_verify_property_type(const zend_property_info *info, zval *property, bool strict);
ZEND_COLD void zend_verify_property_type_error(const zend_property_info *info, const zval *property);
ZEND_COLD void zend_magic_get_property_type_inconsistency_error(const zend_property_info *info, const zval *property);

#define ZEND_REF_ADD_TYPE_SOURCE(ref, source) \
	zend_ref_add_type_source(&ZEND_REF_TYPE_SOURCES(ref), source)

#define ZEND_REF_DEL_TYPE_SOURCE(ref, source) \
	zend_ref_del_type_source(&ZEND_REF_TYPE_SOURCES(ref), source)

#define ZEND_REF_FOREACH_TYPE_SOURCES(ref, prop) do { \
		zend_property_info_source_list *_source_list = &ZEND_REF_TYPE_SOURCES(ref); \
		zend_property_info **_prop, **_end; \
		zend_property_info_list *_list; \
		if (_source_list->ptr) { \
			if (ZEND_PROPERTY_INFO_SOURCE_IS_LIST(_source_list->list)) { \
				_list = ZEND_PROPERTY_INFO_SOURCE_TO_LIST(_source_list->list); \
				_prop = _list->ptr; \
				_end = _list->ptr + _list->num; \
			} else { \
				_prop = &_source_list->ptr; \
				_end = _prop + 1; \
			} \
			for (; _prop < _end; _prop++) { \
				prop = *_prop; \

#define ZEND_REF_FOREACH_TYPE_SOURCES_END() \
			} \
		} \
	} while (0)

ZEND_COLD void zend_match_unhandled_error(const zval *value);

/* Call this to handle the timeout or the interrupt function. It will set
 * EG(vm_interrupt) to false.
 */
ZEND_API ZEND_COLD void ZEND_FASTCALL zend_fcall_interrupt(zend_execute_data *call);

static zend_always_inline void *zend_get_bad_ptr(void)
{
	ZEND_UNREACHABLE();
	return NULL;
}

END_EXTERN_C()

#endif /* ZEND_EXECUTE_H */
Zend/zend_virtual_cwd.h000064400000031620151730543430011167 0ustar00/*
   +----------------------------------------------------------------------+
   | Copyright (c) The PHP Group                                          |
   +----------------------------------------------------------------------+
   | This source file is subject to version 3.01 of the PHP license,      |
   | that is bundled with this package in the file LICENSE, and is        |
   | available through the world-wide-web at the following url:           |
   | https://www.php.net/license/3_01.txt                                 |
   | If you did not receive a copy of the PHP license and are unable to   |
   | obtain it through the world-wide-web, please send a note to          |
   | license@php.net so we can mail you a copy immediately.               |
   +----------------------------------------------------------------------+
   | Authors: Andi Gutmans <andi@php.net>                                 |
   |          Sascha Schumann <sascha@schumann.cx>                        |
   |          Pierre Joye <pierre@php.net>                                |
   +----------------------------------------------------------------------+
*/

#ifndef VIRTUAL_CWD_H
#define VIRTUAL_CWD_H

#include "TSRM.h"

#include <sys/types.h>
#include <sys/stat.h>
#include <ctype.h>

#ifdef HAVE_UTIME_H
#include <utime.h>
#endif

#include <stdarg.h>
#include <limits.h>

#ifdef HAVE_SYS_PARAM_H
# include <sys/param.h>
#endif

#ifndef MAXPATHLEN
# ifdef _WIN32
#  include "win32/ioutil.h"
#  define MAXPATHLEN PHP_WIN32_IOUTIL_MAXPATHLEN
# elif PATH_MAX
#  define MAXPATHLEN PATH_MAX
# elif defined(MAX_PATH)
#  define MAXPATHLEN MAX_PATH
# else
#  define MAXPATHLEN 256
# endif
#endif

#ifdef ZTS
#define VIRTUAL_DIR
#endif

#ifndef ZEND_WIN32
#include <unistd.h>
#else
#include <direct.h>
#endif

#if defined(__osf__) || defined(_AIX)
#include <errno.h>
#endif

#include "zend_stream.h"

#ifdef ZEND_WIN32
#include "win32/readdir.h"
#include <sys/utime.h>
#include "win32/ioutil.h"
/* mode_t isn't defined on Windows */
typedef unsigned short mode_t;

#define DEFAULT_SLASH '\\'
#define DEFAULT_DIR_SEPARATOR	';'
#define IS_SLASH(c)	((c) == '/' || (c) == '\\')
// IS_SLASH_P() may read the previous char on Windows, which may be OOB; use IS_SLASH_P_EX() instead
#define IS_SLASH_P(c)	(*(c) == '/' || \
        (*(c) == '\\' && !IsDBCSLeadByte(*(c-1))))
#define IS_SLASH_P_EX(c, first_byte)	(*(c) == '/' || \
        (*(c) == '\\' && ((first_byte) || !IsDBCSLeadByte(*(c-1)))))

/* COPY_WHEN_ABSOLUTE is 2 under Win32 because by chance both regular absolute paths
   in the file system and UNC paths need copying of two characters */
#define COPY_WHEN_ABSOLUTE(path) 2
#define IS_UNC_PATH(path, len) \
	(len >= 2 && IS_SLASH(path[0]) && IS_SLASH(path[1]))
#define IS_ABSOLUTE_PATH(path, len) \
	(len >= 2 && (/* is local */isalpha(path[0]) && path[1] == ':' || /* is UNC */IS_SLASH(path[0]) && IS_SLASH(path[1])))

#else
#ifdef HAVE_DIRENT_H
#include <dirent.h>

#ifndef DT_UNKNOWN
# define DT_UNKNOWN 0
#endif
#ifndef DT_DIR
# define DT_DIR 4
#endif
#ifndef DT_REG
# define DT_REG 8
#endif
#endif

#define DEFAULT_SLASH '/'

#ifdef __riscos__
#define DEFAULT_DIR_SEPARATOR  ';'
#else
#define DEFAULT_DIR_SEPARATOR  ':'
#endif

#define IS_SLASH(c)	((c) == '/')
// IS_SLASH_P() may read the previous char on Windows, which may be OOB; use IS_SLASH_P_EX() instead
#define IS_SLASH_P(c)	(*(c) == '/')
#define IS_SLASH_P_EX(c, first_byte) IS_SLASH_P(c)

#endif


#ifndef COPY_WHEN_ABSOLUTE
#define COPY_WHEN_ABSOLUTE(path) 0
#endif

#ifndef IS_ABSOLUTE_PATH
#define IS_ABSOLUTE_PATH(path, len) \
	(IS_SLASH(path[0]))
#endif

#ifdef TSRM_EXPORTS
#define CWD_EXPORTS
#endif

#ifdef ZEND_WIN32
#	ifdef CWD_EXPORTS
#		define CWD_API __declspec(dllexport)
#	else
#		define CWD_API __declspec(dllimport)
#	endif
#elif defined(__GNUC__) && __GNUC__ >= 4
#	define CWD_API __attribute__ ((visibility("default")))
#else
#	define CWD_API
#endif

#ifdef ZEND_WIN32
# define php_sys_stat_ex php_win32_ioutil_stat_ex
# define php_sys_stat php_win32_ioutil_stat
# define php_sys_lstat php_win32_ioutil_lstat
# define php_sys_fstat php_win32_ioutil_fstat
# define php_sys_readlink php_win32_ioutil_readlink
# define php_sys_symlink php_win32_ioutil_symlink
# define php_sys_link php_win32_ioutil_link
#else
# define php_sys_stat stat
# define php_sys_lstat lstat
# define php_sys_fstat fstat
# ifdef HAVE_SYMLINK
# define php_sys_readlink(link, target, target_len) readlink(link, target, target_len)
# define php_sys_symlink symlink
# define php_sys_link link
# endif
#endif

typedef struct _cwd_state {
	char *cwd;
	size_t cwd_length;
} cwd_state;

typedef int (*verify_path_func)(const cwd_state *);

CWD_API void virtual_cwd_startup(void);
CWD_API void virtual_cwd_shutdown(void);
CWD_API void virtual_cwd_activate(void);
CWD_API void virtual_cwd_deactivate(void);
CWD_API char *virtual_getcwd_ex(size_t *length);
CWD_API char *virtual_getcwd(char *buf, size_t size);
CWD_API zend_result virtual_chdir(const char *path);
CWD_API int virtual_chdir_file(const char *path, int (*p_chdir)(const char *path));
CWD_API int virtual_filepath(const char *path, char **filepath);
CWD_API int virtual_filepath_ex(const char *path, char **filepath, verify_path_func verify_path);
CWD_API char *virtual_realpath(const char *path, char *real_path);
CWD_API FILE *virtual_fopen(const char *path, const char *mode);
CWD_API int virtual_open(const char *path, int flags, ...);
CWD_API int virtual_creat(const char *path, mode_t mode);
CWD_API int virtual_rename(const char *oldname, const char *newname);
CWD_API int virtual_stat(const char *path, zend_stat_t *buf);
CWD_API int virtual_lstat(const char *path, zend_stat_t *buf);
CWD_API int virtual_unlink(const char *path);
CWD_API int virtual_mkdir(const char *pathname, mode_t mode);
CWD_API int virtual_rmdir(const char *pathname);
CWD_API DIR *virtual_opendir(const char *pathname);
CWD_API FILE *virtual_popen(const char *command, const char *type);
CWD_API int virtual_access(const char *pathname, int mode);

#ifdef HAVE_UTIME
CWD_API int virtual_utime(const char *filename, struct utimbuf *buf);
#endif
CWD_API int virtual_chmod(const char *filename, mode_t mode);
#if !defined(ZEND_WIN32)
CWD_API int virtual_chown(const char *filename, uid_t owner, gid_t group, int link);
#endif

/* One of the following constants must be used as the last argument
   in virtual_file_ex() call. */

// TODO Make this into an enum
#define CWD_EXPAND   0 /* expand "." and ".." but don't resolve symlinks     */
#define CWD_FILEPATH 1 /* resolve symlinks if file is exist otherwise expand */
#define CWD_REALPATH 2 /* call realpath(), resolve symlinks. File must exist */

CWD_API int virtual_file_ex(cwd_state *state, const char *path, verify_path_func verify_path, int use_realpath);

CWD_API char *tsrm_realpath(const char *path, char *real_path);

#define REALPATH_CACHE_TTL  (2*60) /* 2 minutes */
#define REALPATH_CACHE_SIZE 0      /* disabled while php.ini isn't loaded */

typedef struct _realpath_cache_bucket {
	zend_ulong                    key;
	char                          *path;
	char                          *realpath;
	struct _realpath_cache_bucket *next;
	time_t                         expires;
	uint16_t                       path_len;
	uint16_t                       realpath_len;
	uint8_t                        is_dir:1;
#ifdef ZEND_WIN32
	uint8_t                        is_rvalid:1;
	uint8_t                        is_readable:1;
	uint8_t                        is_wvalid:1;
	uint8_t                        is_writable:1;
#endif
} realpath_cache_bucket;

typedef struct _virtual_cwd_globals {
	cwd_state cwd;
	zend_long                   realpath_cache_size;
	zend_long                   realpath_cache_size_limit;
	zend_long                   realpath_cache_ttl;
	realpath_cache_bucket *realpath_cache[1024];
} virtual_cwd_globals;

#ifdef ZTS
extern ts_rsrc_id cwd_globals_id;
extern size_t cwd_globals_offset;
# define CWDG(v) ZEND_TSRMG_FAST(cwd_globals_offset, virtual_cwd_globals *, v)
#else
extern virtual_cwd_globals cwd_globals;
# define CWDG(v) (cwd_globals.v)
#endif

CWD_API void realpath_cache_clean(void);
CWD_API void realpath_cache_del(const char *path, size_t path_len);
CWD_API realpath_cache_bucket* realpath_cache_lookup(const char *path, size_t path_len, time_t t);
CWD_API zend_long realpath_cache_size(void);
CWD_API zend_long realpath_cache_max_buckets(void);
CWD_API realpath_cache_bucket** realpath_cache_get_buckets(void);

#ifdef CWD_EXPORTS
extern void virtual_cwd_main_cwd_init(uint8_t);
#endif

/* The actual macros to be used in programs using TSRM
 * If the program defines VIRTUAL_DIR it will use the
 * virtual_* functions
 */

#ifdef VIRTUAL_DIR

#define VCWD_GETCWD(buff, size) virtual_getcwd(buff, size)
#define VCWD_FOPEN(path, mode) virtual_fopen(path, mode)
/* Because open() has two modes, we have to macros to replace it */
#define VCWD_OPEN(path, flags) virtual_open(path, flags)
#define VCWD_OPEN_MODE(path, flags, mode) virtual_open(path, flags, mode)
#define VCWD_CREAT(path, mode) virtual_creat(path, mode)
#define VCWD_CHDIR(path) virtual_chdir(path)
#define VCWD_CHDIR_FILE(path) virtual_chdir_file(path, (int (*)(const char *)) virtual_chdir)
#define VCWD_GETWD(buf)
#define VCWD_REALPATH(path, real_path) virtual_realpath(path, real_path)
#define VCWD_RENAME(oldname, newname) virtual_rename(oldname, newname)
#define VCWD_STAT(path, buff) virtual_stat(path, buff)
# define VCWD_LSTAT(path, buff) virtual_lstat(path, buff)
#define VCWD_UNLINK(path) virtual_unlink(path)
#define VCWD_MKDIR(pathname, mode) virtual_mkdir(pathname, mode)
#define VCWD_RMDIR(pathname) virtual_rmdir(pathname)
#define VCWD_OPENDIR(pathname) virtual_opendir(pathname)
#define VCWD_POPEN(command, type) virtual_popen(command, type)
#define VCWD_ACCESS(pathname, mode) virtual_access(pathname, mode)
#ifdef HAVE_UTIME
#define VCWD_UTIME(path, time) virtual_utime(path, time)
#endif
#define VCWD_CHMOD(path, mode) virtual_chmod(path, mode)
#if !defined(ZEND_WIN32)
#define VCWD_CHOWN(path, owner, group) virtual_chown(path, owner, group, 0)
#ifdef HAVE_LCHOWN
#define VCWD_LCHOWN(path, owner, group) virtual_chown(path, owner, group, 1)
#endif
#endif

#else

#define VCWD_CREAT(path, mode) creat(path, mode)
/* rename on windows will fail if newname already exists.
   MoveFileEx has to be used */
#if defined(ZEND_WIN32)
#define VCWD_FOPEN(path, mode)  php_win32_ioutil_fopen(path, mode)
#define VCWD_OPEN(path, flags) php_win32_ioutil_open(path, flags)
#define VCWD_OPEN_MODE(path, flags, mode) php_win32_ioutil_open(path, flags, mode)
# define VCWD_RENAME(oldname, newname) php_win32_ioutil_rename(oldname, newname)
#define VCWD_MKDIR(pathname, mode) php_win32_ioutil_mkdir(pathname, mode)
#define VCWD_RMDIR(pathname) php_win32_ioutil_rmdir(pathname)
#define VCWD_UNLINK(path) php_win32_ioutil_unlink(path)
#define VCWD_CHDIR(path) php_win32_ioutil_chdir(path)
#define VCWD_ACCESS(pathname, mode) tsrm_win32_access(pathname, mode)
#define VCWD_GETCWD(buff, size) php_win32_ioutil_getcwd(buff, size)
#define VCWD_CHMOD(path, mode) php_win32_ioutil_chmod(path, mode)
#else
#define VCWD_FOPEN(path, mode)  fopen(path, mode)
#define VCWD_OPEN(path, flags) open(path, flags)
#define VCWD_OPEN_MODE(path, flags, mode)	open(path, flags, mode)
# define VCWD_RENAME(oldname, newname) rename(oldname, newname)
#define VCWD_MKDIR(pathname, mode) mkdir(pathname, mode)
#define VCWD_RMDIR(pathname) rmdir(pathname)
#define VCWD_UNLINK(path) unlink(path)
#define VCWD_CHDIR(path) chdir(path)
#define VCWD_ACCESS(pathname, mode) access(pathname, mode)
#define VCWD_GETCWD(buff, size) getcwd(buff, size)
#define VCWD_CHMOD(path, mode) chmod(path, mode)
#endif

#define VCWD_CHDIR_FILE(path) virtual_chdir_file(path, chdir)
#define VCWD_GETWD(buf) getwd(buf)
#define VCWD_STAT(path, buff) php_sys_stat(path, buff)
#define VCWD_LSTAT(path, buff) lstat(path, buff)
#define VCWD_OPENDIR(pathname) opendir(pathname)
#define VCWD_POPEN(command, type) popen(command, type)

#define VCWD_REALPATH(path, real_path) tsrm_realpath(path, real_path)

#ifdef HAVE_UTIME
# ifdef ZEND_WIN32
#  define VCWD_UTIME(path, time) win32_utime(path, time)
# else
#  define VCWD_UTIME(path, time) utime(path, time)
# endif
#endif

#if !defined(ZEND_WIN32)
#define VCWD_CHOWN(path, owner, group) chown(path, owner, group)
#ifdef HAVE_LCHOWN
#define VCWD_LCHOWN(path, owner, group) lchown(path, owner, group)
#endif
#endif

#endif

/* Global stat declarations */
#ifndef _S_IFDIR
#define _S_IFDIR S_IFDIR
#endif

#ifndef _S_IFREG
#define _S_IFREG S_IFREG
#endif

#ifndef S_IFLNK
#define _IFLNK  0120000	/* symbolic link */
#define S_IFLNK _IFLNK
#endif

#ifndef S_ISDIR
#define S_ISDIR(mode)	(((mode)&S_IFMT) == S_IFDIR)
#endif

#ifndef S_ISREG
#define S_ISREG(mode)	(((mode)&S_IFMT) == S_IFREG)
#endif

#ifndef S_ISLNK
#define S_ISLNK(mode)	(((mode)&S_IFMT) == S_IFLNK)
#endif

#ifndef S_IXROOT
#define S_IXROOT ( S_IXUSR | S_IXGRP | S_IXOTH )
#endif

/* XXX should be _S_IFIFO? */
#ifndef S_IFIFO
#define	_IFIFO  0010000	/* fifo */
#define S_IFIFO	_IFIFO
#endif

#ifndef S_IFBLK
#define	_IFBLK  0060000	/* block special */
#define S_IFBLK	_IFBLK
#endif

#endif /* VIRTUAL_CWD_H */
Zend/zend_highlight.h000064400000004421151730543430010612 0ustar00/*
   +----------------------------------------------------------------------+
   | Zend Engine                                                          |
   +----------------------------------------------------------------------+
   | Copyright (c) Zend Technologies Ltd. (http://www.zend.com)           |
   +----------------------------------------------------------------------+
   | This source file is subject to version 2.00 of the Zend license,     |
   | that is bundled with this package in the file LICENSE, and is        |
   | available through the world-wide-web at the following url:           |
   | http://www.zend.com/license/2_00.txt.                                |
   | If you did not receive a copy of the Zend license and are unable to  |
   | obtain it through the world-wide-web, please send a note to          |
   | license@zend.com so we can mail you a copy immediately.              |
   +----------------------------------------------------------------------+
   | Authors: Andi Gutmans <andi@php.net>                                 |
   |          Zeev Suraski <zeev@php.net>                                 |
   +----------------------------------------------------------------------+
*/

#ifndef ZEND_HIGHLIGHT_H
#define ZEND_HIGHLIGHT_H

#include "zend_types.h"

#define HL_COMMENT_COLOR     "#FF8000"    /* orange */
#define HL_DEFAULT_COLOR     "#0000BB"    /* blue */
#define HL_HTML_COLOR        "#000000"    /* black */
#define HL_STRING_COLOR      "#DD0000"    /* red */
#define HL_KEYWORD_COLOR     "#007700"    /* green */


typedef struct _zend_syntax_highlighter_ini {
	char *highlight_html;
	char *highlight_comment;
	char *highlight_default;
	char *highlight_string;
	char *highlight_keyword;
} zend_syntax_highlighter_ini;


BEGIN_EXTERN_C()
ZEND_API void zend_highlight(zend_syntax_highlighter_ini *syntax_highlighter_ini);
ZEND_API void zend_strip(void);
ZEND_API zend_result highlight_file(const char *filename, zend_syntax_highlighter_ini *syntax_highlighter_ini);
ZEND_API void highlight_string(zend_string *str, zend_syntax_highlighter_ini *syntax_highlighter_ini, const char *str_name);
ZEND_API void zend_html_putc(char c);
ZEND_API void zend_html_puts(const char *s, size_t len);
END_EXTERN_C()

extern zend_syntax_highlighter_ini syntax_highlighter_ini;

#endif
Zend/zend_gc.h000064400000011642151730543440007240 0ustar00/*
   +----------------------------------------------------------------------+
   | Zend Engine                                                          |
   +----------------------------------------------------------------------+
   | Copyright (c) Zend Technologies Ltd. (http://www.zend.com)           |
   +----------------------------------------------------------------------+
   | This source file is subject to version 2.00 of the Zend license,     |
   | that is bundled with this package in the file LICENSE, and is        |
   | available through the world-wide-web at the following url:           |
   | http://www.zend.com/license/2_00.txt.                                |
   | If you did not receive a copy of the Zend license and are unable to  |
   | obtain it through the world-wide-web, please send a note to          |
   | license@zend.com so we can mail you a copy immediately.              |
   +----------------------------------------------------------------------+
   | Authors: David Wang <planetbeing@gmail.com>                          |
   |          Dmitry Stogov <dmitry@php.net>                              |
   +----------------------------------------------------------------------+
*/

#ifndef ZEND_GC_H
#define ZEND_GC_H

#include "zend_hrtime.h"

#ifndef GC_BENCH
# define GC_BENCH 0
#endif

BEGIN_EXTERN_C()

typedef struct _zend_gc_status {
	bool active;
	bool gc_protected;
	bool full;
	uint32_t runs;
	uint32_t collected;
	uint32_t threshold;
	uint32_t buf_size;
	uint32_t num_roots;
	zend_hrtime_t application_time;
	zend_hrtime_t collector_time;
	zend_hrtime_t dtor_time;
	zend_hrtime_t free_time;
} zend_gc_status;

ZEND_API extern int (*gc_collect_cycles)(void);

ZEND_API void ZEND_FASTCALL gc_possible_root(zend_refcounted *ref);
ZEND_API void ZEND_FASTCALL gc_remove_from_buffer(zend_refcounted *ref);

/* enable/disable automatic start of GC collection */
ZEND_API bool gc_enable(bool enable);
ZEND_API bool gc_enabled(void);

/* enable/disable possible root additions */
ZEND_API bool gc_protect(bool protect);
ZEND_API bool gc_protected(void);

#if GC_BENCH
void gc_bench_print(void);
#endif

/* The default implementation of the gc_collect_cycles callback. */
ZEND_API int  zend_gc_collect_cycles(void);

ZEND_API void zend_gc_get_status(zend_gc_status *status);

void gc_init(void);
void gc_globals_ctor(void);
void gc_globals_dtor(void);
void gc_reset(void);

#ifdef ZTS
size_t zend_gc_globals_size(void);
#endif

#define GC_REMOVE_FROM_BUFFER(p) do { \
		zend_refcounted *_p = (zend_refcounted*)(p); \
		if (GC_TYPE_INFO(_p) & GC_INFO_MASK) { \
			gc_remove_from_buffer(_p); \
		} \
	} while (0)

#define GC_MAY_LEAK(ref) \
	((GC_TYPE_INFO(ref) & \
		(GC_INFO_MASK | (GC_NOT_COLLECTABLE << GC_FLAGS_SHIFT))) == 0)

static zend_always_inline void gc_check_possible_root(zend_refcounted *ref)
{
	if (EXPECTED(GC_TYPE_INFO(ref) == GC_REFERENCE)) {
		zval *zv = &((zend_reference*)ref)->val;

		if (!Z_COLLECTABLE_P(zv)) {
			return;
		}
		ref = Z_COUNTED_P(zv);
	}
	if (UNEXPECTED(GC_MAY_LEAK(ref))) {
		gc_possible_root(ref);
	}
}

static zend_always_inline void gc_check_possible_root_no_ref(zend_refcounted *ref)
{
	ZEND_ASSERT(GC_TYPE_INFO(ref) != GC_REFERENCE);
	if (UNEXPECTED(GC_MAY_LEAK(ref))) {
		gc_possible_root(ref);
	}
}

/* These APIs can be used to simplify object get_gc implementations
 * over heterogeneous structures. See zend_generator_get_gc() for
 * a usage example. */

typedef struct {
	zval *cur;
	zval *end;
	zval *start;
} zend_get_gc_buffer;

ZEND_API zend_get_gc_buffer *zend_get_gc_buffer_create(void);
ZEND_API void zend_get_gc_buffer_grow(zend_get_gc_buffer *gc_buffer);

static zend_always_inline void zend_get_gc_buffer_add_zval(
		zend_get_gc_buffer *gc_buffer, zval *zv) {
	if (Z_REFCOUNTED_P(zv)) {
		if (UNEXPECTED(gc_buffer->cur == gc_buffer->end)) {
			zend_get_gc_buffer_grow(gc_buffer);
		}
		ZVAL_COPY_VALUE(gc_buffer->cur, zv);
		gc_buffer->cur++;
	}
}

static zend_always_inline void zend_get_gc_buffer_add_obj(
		zend_get_gc_buffer *gc_buffer, zend_object *obj) {
	ZEND_ASSERT(obj != NULL);

	if (UNEXPECTED(gc_buffer->cur == gc_buffer->end)) {
		zend_get_gc_buffer_grow(gc_buffer);
	}
	ZVAL_OBJ(gc_buffer->cur, obj);
	gc_buffer->cur++;
}

static zend_always_inline void zend_get_gc_buffer_add_ht(
		zend_get_gc_buffer *gc_buffer, HashTable *ht) {
	if (GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE) {
		return;
	}
	if (UNEXPECTED(gc_buffer->cur == gc_buffer->end)) {
		zend_get_gc_buffer_grow(gc_buffer);
	}
	ZVAL_ARR(gc_buffer->cur, ht);
	gc_buffer->cur++;
}

static zend_always_inline void zend_get_gc_buffer_add_ptr(
		zend_get_gc_buffer *gc_buffer, void *ptr) {
	if (UNEXPECTED(gc_buffer->cur == gc_buffer->end)) {
		zend_get_gc_buffer_grow(gc_buffer);
	}
	ZVAL_PTR(gc_buffer->cur, ptr);
	gc_buffer->cur++;
}

static zend_always_inline void zend_get_gc_buffer_use(
		zend_get_gc_buffer *gc_buffer, zval **table, int *n) {
	*table = gc_buffer->start;
	*n = gc_buffer->cur - gc_buffer->start;
}

END_EXTERN_C()

#endif /* ZEND_GC_H */
Zend/zend_smart_string_public.h000064400000002330151730543440012713 0ustar00/*
   +----------------------------------------------------------------------+
   | Copyright (c) The PHP Group                                          |
   +----------------------------------------------------------------------+
   | This source file is subject to version 3.01 of the PHP license,      |
   | that is bundled with this package in the file LICENSE, and is        |
   | available through the world-wide-web at the following url:           |
   | https://www.php.net/license/3_01.txt                                 |
   | If you did not receive a copy of the PHP license and are unable to   |
   | obtain it through the world-wide-web, please send a note to          |
   | license@php.net so we can mail you a copy immediately.               |
   +----------------------------------------------------------------------+
   | Author: Sascha Schumann <sascha@schumann.cx>                         |
   |         Xinchen Hui <laruence@php.net>                               |
   +----------------------------------------------------------------------+
 */

#ifndef PHP_SMART_STRING_PUBLIC_H
#define PHP_SMART_STRING_PUBLIC_H

#include <sys/types.h>

typedef struct {
	char *c;
	size_t len;
	size_t a;
} smart_string;

#endif
Zend/zend_objects_API.h000064400000013534151730543450010774 0ustar00/*
   +----------------------------------------------------------------------+
   | Zend Engine                                                          |
   +----------------------------------------------------------------------+
   | Copyright (c) Zend Technologies Ltd. (http://www.zend.com)           |
   +----------------------------------------------------------------------+
   | This source file is subject to version 2.00 of the Zend license,     |
   | that is bundled with this package in the file LICENSE, and is        |
   | available through the world-wide-web at the following url:           |
   | http://www.zend.com/license/2_00.txt.                                |
   | If you did not receive a copy of the Zend license and are unable to  |
   | obtain it through the world-wide-web, please send a note to          |
   | license@zend.com so we can mail you a copy immediately.              |
   +----------------------------------------------------------------------+
   | Authors: Andi Gutmans <andi@php.net>                                 |
   |          Zeev Suraski <zeev@php.net>                                 |
   +----------------------------------------------------------------------+
*/

#ifndef ZEND_OBJECTS_API_H
#define ZEND_OBJECTS_API_H

#include "zend_types.h"
#include "zend_gc.h"
#include "zend_alloc.h"
#include "zend_compile.h" /* For zend_property_info */

#define OBJ_BUCKET_INVALID			(1<<0)

#define IS_OBJ_VALID(o)				(!(((uintptr_t)(o)) & OBJ_BUCKET_INVALID))

#define SET_OBJ_INVALID(o)			((zend_object*)((((uintptr_t)(o)) | OBJ_BUCKET_INVALID)))

#define GET_OBJ_BUCKET_NUMBER(o)	(((intptr_t)(o)) >> 1)

#define SET_OBJ_BUCKET_NUMBER(o, n)	do { \
		(o) = (zend_object*)((((uintptr_t)(n)) << 1) | OBJ_BUCKET_INVALID); \
	} while (0)

#define ZEND_OBJECTS_STORE_ADD_TO_FREE_LIST(h) do { \
		SET_OBJ_BUCKET_NUMBER(EG(objects_store).object_buckets[(h)], EG(objects_store).free_list_head); \
		EG(objects_store).free_list_head = (h); \
	} while (0)

#define OBJ_RELEASE(obj) zend_object_release(obj)

typedef struct _zend_objects_store {
	zend_object **object_buckets;
	uint32_t top;
	uint32_t size;
	int free_list_head;
} zend_objects_store;

/* Global store handling functions */
BEGIN_EXTERN_C()
ZEND_API void ZEND_FASTCALL zend_objects_store_init(zend_objects_store *objects, uint32_t init_size);
ZEND_API void ZEND_FASTCALL zend_objects_store_call_destructors(zend_objects_store *objects);
ZEND_API void ZEND_FASTCALL zend_objects_store_mark_destructed(zend_objects_store *objects);
ZEND_API void ZEND_FASTCALL zend_objects_store_free_object_storage(zend_objects_store *objects, bool fast_shutdown);
ZEND_API void ZEND_FASTCALL zend_objects_store_destroy(zend_objects_store *objects);

/* Store API functions */
ZEND_API void ZEND_FASTCALL zend_objects_store_put(zend_object *object);
ZEND_API void ZEND_FASTCALL zend_objects_store_del(zend_object *object);

/* Called when the ctor was terminated by an exception */
static zend_always_inline void zend_object_store_ctor_failed(zend_object *obj)
{
	GC_ADD_FLAGS(obj, IS_OBJ_DESTRUCTOR_CALLED);
}

END_EXTERN_C()

static zend_always_inline void zend_object_release(zend_object *obj)
{
	if (GC_DELREF(obj) == 0) {
		zend_objects_store_del(obj);
	} else if (UNEXPECTED(GC_MAY_LEAK((zend_refcounted*)obj))) {
		gc_possible_root((zend_refcounted*)obj);
	}
}

static zend_always_inline size_t zend_object_properties_size(zend_class_entry *ce)
{
	return sizeof(zval) *
		(ce->default_properties_count -
			((ce->ce_flags & ZEND_ACC_USE_GUARDS) ? 0 : 1));
}

/* Allocates object type and zeros it, but not the standard zend_object and properties.
 * Standard object MUST be initialized using zend_object_std_init().
 * Properties MUST be initialized using object_properties_init(). */
static zend_always_inline void *zend_object_alloc(size_t obj_size, zend_class_entry *ce) {
	void *obj = emalloc(obj_size + zend_object_properties_size(ce));
	memset(obj, 0, obj_size - sizeof(zend_object));
	return obj;
}

ZEND_API ZEND_COLD zend_property_info *zend_get_property_info_for_slot_slow(zend_object *obj, zval *slot);

/* Use when 'slot' was obtained directly from obj->properties_table, or when
 * 'obj' can not be lazy. Otherwise, use zend_get_property_info_for_slot(). */
static inline zend_property_info *zend_get_property_info_for_slot_self(zend_object *obj, zval *slot)
{
	zend_property_info **table = obj->ce->properties_info_table;
	intptr_t prop_num = slot - obj->properties_table;
	ZEND_ASSERT(prop_num >= 0 && prop_num < obj->ce->default_properties_count);
	if (table[prop_num]) {
		return table[prop_num];
	} else {
		return zend_get_property_info_for_slot_slow(obj, slot);
	}
}

static inline zend_property_info *zend_get_property_info_for_slot(zend_object *obj, zval *slot)
{
	if (UNEXPECTED(zend_object_is_lazy_proxy(obj))) {
		return zend_lazy_object_get_property_info_for_slot(obj, slot);
	}
	zend_property_info **table = obj->ce->properties_info_table;
	intptr_t prop_num = slot - obj->properties_table;
	ZEND_ASSERT(prop_num >= 0 && prop_num < obj->ce->default_properties_count);
	if (table[prop_num]) {
		return table[prop_num];
	} else {
		return zend_get_property_info_for_slot_slow(obj, slot);
	}
}

/* Helper for cases where we're only interested in property info of typed properties. */
static inline zend_property_info *zend_get_typed_property_info_for_slot(zend_object *obj, zval *slot)
{
	zend_property_info *prop_info = zend_get_property_info_for_slot(obj, slot);
	if (prop_info && ZEND_TYPE_IS_SET(prop_info->type)) {
		return prop_info;
	}
	return NULL;
}

static zend_always_inline bool zend_check_method_accessible(const zend_function *fn, const zend_class_entry *scope)
{
	if (!(fn->common.fn_flags & ZEND_ACC_PUBLIC)
		&& fn->common.scope != scope
		&& (UNEXPECTED(fn->common.fn_flags & ZEND_ACC_PRIVATE)
			|| UNEXPECTED(!zend_check_protected(zend_get_function_root_class(fn), scope)))) {
		return false;
	}

	return true;
}

#endif /* ZEND_OBJECTS_H */
opt/alt/php52/usr/bin/php000075500015242770151731405410011205 0ustar00ELF>`�C@�=5@8@ @@@@@hh��@�@@@h�/h�/ �0������� ��1�ۑ�ۑ@@��@�@  ��@�@DDS�td��@�@  P�td�+�k�k$�$�Q�tdR�td�0����0�0�/lib64/ld-linux-x86-64.so.2GNU�GNUGNU����a��dW�����5@@��P�a@ 

A 0��	D���P�"@�8���
 �0���P���8(�����0�A@! @�@e�@�! �0( 	�C
PP
�"D""� (!�"1@@
h`A(t�P���@�Q B�t@A�J
��@�0`��$@
�cl��"�%H
���I�� @$ �D@�̠�@�D��(8(J@5 �P
@  PI@��%��!�$��2HT�E �� X!��Z0)�@�@(
���
� @�PD *!
! !5i��
�HpI[Ĕ $Y�0 F&@ `��
`��0��d@D�(� 	 �7 ���  h��!P p�@ ���  
I�� A@   ��T4"*�2	��0���� @S060������ �dj �@��a4	 ����( �@	:@�6"��@�`����B��,�L
$€ �`�L����0�	��	2�	$�"@J�D �Ab�@@��.���rj+J � �@5$$5�*���
��!�H�@@D�	 ��"�\�"�� P0�
	�1#�@ ��H` H��0��@@��R�A �B@<FH��b��`p�
P ��hhD �@@H�!�@�!�#���R�H�@"@D�� D
  @�D(8 2��BP B�,@E 	��H�(� C��
"JH(����� �	`L�@
�Q�"@ @�
	�@�@��h�!� $ � �R�""F�D"H@P�	(8 !
��H PP�2
TP�0 ��fI�Q"�1H���@��"!60!(P����P�P���� (�!B� 
��d'�PrP�H 
`�P@B�@ @!!@�Ё@!P����@��` �D`E��� 0h �p@�
!P�@BA��$@JLD�0�@1����		,�HE�@0��� B�L��@`@0�$�@" 0��d��9`j�@b���PJ� 
1E@�(`R�d@� 
4 ��� @02���aR��Dh@H�bPD `@H� �%����@B� � �!�`1$@@�0D@)���
�P�$~M@"A�!�p�R@���Q !@BT 
����&"@�@
 ��@	%� ! �V��
%��
�� ���*@� �!
D�@�GbPi@5 @�b
@PB@P cB4�A����& 
 E�@@"k	A !$ 0������
D4
0"@�"@D� �!C 02@�@-��H @ 6��@@!�0(  BCayP�e @(�LRqJDI�`�@VBB@& @A����"H!0Ih	 ��)@@  @	� (�0�
���
��� 8���� $���� �:PA@ �! A ` �@	0A� ����B� @ %@@@0���(�P�pB
H�! ��` �P�� 0@J> $�!"��&H@��@E!�������Z���  PXhpah@ �(`�@ 2� $ �����A�DBK
�@�`@�@
(PH �h@@DA��(�
 @��(��`D�@D�h#�p��(
���@h��R�p e�
R�		 �@I  �]Bq�����0�! b� 
@P��A�Qc"@A�Bh� �@	ӨH+�\)@E`$ B �@"�p���!H)D`����@! ��P`���@0�@D�Ld@! 	FD��@��� �(���( B0�@�($��(�%0 �A�@%@ �@��B"�n@�A*@ @/��!�@� *"���@��"
� �@*� ����
 �@�$��@�����"���@`�QA�A@�� )��0L    jA@8  !J H0@�  H@08�pb@�AI(!�,���0�� �����Aw@��D�@"����A`��H�M$P(
#@K"�h`h���A�EG�@H
���A�"1 	���-B�A @@D�	`"��!�@�@TP`D@��
"�0 �@��":0� P�`h��TBD`$*b�Q�!���A��(�EH�:�P�@���LD�@6^
`�(�
 ��(BPT���,&BP� 0@	 !�
��BD��� @S�@��PA@�D(�@ ����@(��	B��T��d	`���� 0� ��� �HD���� P (@�����
	H"A
@@ ���B�����YIABP  $@�@
!�@��	%�1:�XP�@P�B579:<=@CDFHJKMOQRSTVXY\]_`abcefghijkmqstuwxz|~�������������������������������������������������������������	"#$'*+-035789;>@ADFGHKLNOQTVWZ[\]^`dfhimnpqrtuvxyz{~������������������������������������������������������������������	
 !$%&()+-123456:<=>?@DEFGIKMNQRSX[]`abefgilnpqtuvwxz|}����������������������������������������������������������	

 #$%&(-/2468:=>?ABDHJNRTVXYZ\^bfjlnoqrsvy|}������������������������������������������������������������������	 #&)*+,.01589:;>ACIJMNPRW\]`abcfhjmnoqrsvxy|�����������������������������������������������������������#&)+,-01345689;=?ACEFIKLOTVWXY[]`adegjmpstvwxy|~������������������������������������������������������������										
								 	$	&	)	-	/	2	3	5	6	9	=	>	?	D	E	F	H	L	M	N	P	Q	S	W	\	^	_	`	a	d	e	g	i	k	n	o	s	u	x	y	z	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	



	












 
"
#
$
&
(
)
*
,
-
.
1
4
5
9
:
;
=
>
@
A
B
E
I
L
O
P
R
S
U
V
W
X
\
^
_
a
c
d
e
g
h
k
l
o
p
q
r
t
u
v
z
{
~
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
	

!%&'()+,-.023458:<=>ABGKLNPTUWZ[\^dejlnoqrstvwxy{�������������������������������������������������������������������!#%&()+-./02378;<>?BDEGIJLPQRUWX[]`acfijmnopqsuvwz{}���������������������������������������������������������������������





	














 
"
$
%
&
*
.
0
2
3
4
5
6
:
<
>
?
A
C
E
G
H
J
L
M
N
P
Q
R
U
W
X
Z
\
_
`
b
c
e
g
i
j
k
l
n
p
s
u
v
x
{
|
}
~

�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
"$%(),/02356:<>@BCEFIKLNRTUX\`abehjmoqswxy|}~�����������������������������������������������������������������������
!%&+-/123689:<?@CFGJKLMOTWXYZ]^`cd�JOi��_�syg�w���|�:|�h�i"���,F�ꖭ�b��p�F�%:�	�J'b�W���8T0;(�WC��QR�?l��*�6�R�WV��܂���l�2�S9�3�]��t�����Q>͛�#`�[6�c6��b/i%�4dj���I}>��h�!��j�?�*���#�Yl%��|	�֕�^��ɗ��!��G(�p��(�K+$��DM�(�Dl��%�p�,���"���g������7�-
�<0(ѿ�^~>{!-E��:���ؖ��ԑ)�k�yG1�"�l4�]�٦�������i�����i�fl
]i:Q�2������b�I�?������jڮEq�7�鮴��������`Y�4�q��T���KA����9xï9G����t
7�{��]��A�B��)�wE��d��R�SH������-��+��F��h��2��J��H��X�3]���)�7�9�AP
��'��AK���P

p�-�'Z�9�J䯮0(�kp	�!Dp���~?�Ԡ������1��)��ڇ�m,*�Jft0��.U�dXEҩ1�)����%��#�
�b���[&���^�W;RF���a����qԅ���x�!��~��`O'�R���**雑R�K��.����&1� �[�UF��|8֖������Ts���7�~�q�����1�%.�\E��֛���8�X��[R�J��,v��J�7���bI��'�sK,�kv�Ϙ�{��P[�Y�Jq^�M®H��+$���b��(1��p�Y�GXhA��d�r��Y�!������O�x��lچc���3�ŵ`Lp�毣#_���%΃��I�o�-/>��a�-��*���3��C�����nj�oR�-o��$������̢�K�<7	�6ۃ�������2T'���+A����i����ފ�I*�x���S:�2��Pd
,�m�;�D��"��:�{���������Yl��W!�Ө{�E�SD=�x�Gt>ߺ��{�sm��D_��<G1���4n��m�+�t���އ�A�H�D�P�ӓ��s�	����!��+�ŋ���<v��S�Q�a���赤�(&.��T���j·��<+���89
�:�j΍��A%V�K�;G"���ǵ��y[�]�C椙^g�=!:���aV�6MH4~���R��� �����ca��^��A�,��5���!��C����g6�{�2�C��A'bO'Y��)`�|!g�|n������݄���61���������F�7ԐϨ)���3�鵑Jya�'�������v+΄/�>��#�����
M��+�ٵu˕]aK�JT��D��1H=o�)%T�ٛ�à-2u=�I�C�FU��,a��-�UjY �(D�V���loj���[�}�@O�ǥ� �nL:��{�LXg|R�L��;io�.-����e�7�7O�㫏�g��qPAj.K+�GT>�����$J/t\ce�5�3l?�h��z[��3~�HMY���2���H*�l�^c�~WX����|�e��0�j�f0�ܑX���U
tg�M(?>�W�t	��0���u�S'��<r�YJM��]���R���q<L����j�={넑&/y�)B����ރb�h�٦��_����\a�ˑN!���:��V�[�Ӊqd��*C˴:�y3=g���E5�A$b�wO�O���ޏ�i���;"�~��������7��a��d@�DI���;U�5�X�iQ�xm�j�`�H/G�KFV^�I�Bs��e�`t/�g!��+�G?��r�I����Px;��Wij�U����T�����a �X����r3���64ǽ����1!H��i�Q�;^�+��i������s�렂4`�Ur�ڄ��R6��@!������;��*╇�Ue�� o��'�6X/$!�q�7�o;«�+���
u�]S)�r9�D�$����اѤYCB�u�q̮��M%9�v�DK%7#m��Nj����9�`2�%x=K�S
�|y��/�!��F�7�-�Q�5�{T蔈?�,�Q�:k����1'�̤�K��Բ�������(�G"y�/l����P\Q�-��g��h2�H�Xw1���%s0,�PhF
H���K�������?�Ti�w�x�>iqdJp.���cnx4����r�Y�1���N�\�3*d�/�Fߦ��UHtk��a�Kw,`�jE�ڸ����+���b�;�?��R�1�z��n�:^�4��z�g���~�0'����u_^X/��HҊ�Ζ��ʅ�N����¨0P����c�NǢ>�r���R��.pMo�M���x�ٗ���d�o67�	�F��[!�����GR�5��Δg`�����M�CP���j�"GY�;�(��/�"<���'��ɪ���=�{�xSs��Ϝ�Ё�ª�L�n��ߑRF�ޜ�3��S��t�5�8�n��Ff�Dx�
i���ET�F1O�8�q�`,Xo�8�	�szl9�S#]ܧM�ߚ0�W)����H��󒮙{�g~�dg`wgn���a��'�-���v-�.�;�����Fb,���$�mP��W�(f'؁�~:lF�=�l�:��\N�*�[�uNݏ��؈�w0:�����r�@P�2D��7�T�	���%C6�z6�5�A2�]X�X�y��V�٨ɰw����ЛE��{^)�$D�}ڟ�%���ds�� ���#
�w0��E�0�n�!�~�4�f���{R���9�i�)���~zᝦ���OX��7�R����ʭ��f6���SLӇC�\�@Ʊ�_X����͹!��U������X�?��C:��e\�����\�.�0�ė _59j�'B�A��aI��H�(�P��]���B.A�OJ����T��X虩�ޭ<j�^c3 �6��S��ں"IO��>���:�n�߸���F�>�������j�Ǜ��l��z-2�IdaS�^�t��
Z�r𜭇����2� ������*�F�cK��À��wĤ���¥%oZB"P�[ut�^�p��닫�*n��4g;گ)�f\��j\�c	.3��<Z�`���r��
�Gb��>񺉎�O/��J�:cq�r��t�����7ړ]�T�wl�����eZO��:�7l����i	�����EY\Y?�2����r#��g���,%E�DB�}��,���J��W��7�&��U盚"raōq��Y�u|!�U��7�r���׶��P�+�%?�A�i��!��/٬�P�K���?9�؃��p��8�虚P�.1p�̚�{%ޙ7��n��#���*�R���:��	��HąN��	�^���ϳ=����{�x����>Aď��Y��gTJ״��2�x�ֈ�;.���W@��N����
(cR�(���̯��`2��FYr#�H�ˆ-H*��a�0�6N�+�^+�}��v��mǒꝣ���@i*	� �
�_�ݚ��K\��i�g^&8dK��d��]7����ݐ�����>�V�9	�c*�D�<}/έ͑��e�yg�y�2<�)�����g�B�bzȺޖs�=jև�Kr��9g��S�8g�cJ��;g��56�B��4�G�����H�I�����\�_�����hdUoT��v,޺�����me\�X7�=q�g�x�-�W!&������."�^e�y8�#����A۔���٤��<N%�k?�s�!��̝׷B]G.IҊ�ƒQ�3Q��|cn�-2����u�>���YEo@��fq�VݟE��A���g��l@��:�csi(X�s[����In#��j���"��U����N���%�C�H@]��3b��Z��3�����n���.w�������Hk��iG��0ZD*o�y�B	�{3��<�6y �o��A�7ƭ~����(��q��j�C
�)&�G/'=6��IZ��2Fݼo��N��θl�vr�Ao;�v?9���uUXվ�K�j3�:�����:���b�-��!���Z#B�5�֖=�{����E�\��"v��G̶("[QoʓvM�0��N��u9ߛ�$��I�_f��ځ�~�w���ʣ$���a��s	��0Gʞ�B���O=�/q�2-�H�����q5�5�'b*�'�VP۟m�D�P����A����y�<�w�g�n@���s��}7�L��?<�[hCN>�PB�p�� {#���ٔl���ύTklR���5��K�ʒ�ml϶�Z�)��n+c�ma0���/�Ιe.�"��`��Kek�?�&��I�M�ג�#��x��3�d�W
L�
"����8p%��wp���<c��Lj�bO0���Q�Ap���Jc�Hܳʚ�;v��=�$������W���H_���z|L��ʳ�MD]����}9R�fur��GS��`4��ΏX|!�2�)�r%0��
�z�/E�AK��:[���3'pq�.��>[�Ւ�
#�\�4��*S���S5�P��#%*MT�8F�?���U,v�cr��<�8qڑL俞.�s�� ���q$����Xi�����ޜ�z�*�˳�ƬTP�∈��?�{\#C� �,<��^A{���ۼ}�T4�L�j	C��u|����Isi@��Ɵә��D{��Ꭳ5�)�6����|��ҢVo�8�b��
;�}�_B}O]�B�TO�1t��˽�䕒7�wG���&9̼�P���H�6� �nf��XU8��{��YXj6&;Q��$]2�hۣE�[ɀ!'[���HN�81��s֔�·�[��U\��%�P��34Vג�Z�3d����m�b7��P&�jh��_���JzQG���(��Q��$6��
��K})fe�r%�-���<=sMߢ�+f�0=ʣ��sƃA;�����`��a���!�e�\a&/7wՓd��V{�P�'������t!���g\'�*�px�n�}�]F���W�s�E�؏�灦z�$��[��+���;᭻�"4U��^�}�%�G�qԃ���[��v6��1����=)l)ɷ9H��Was.�?�b?^��-���2�H�v'=�������˼K��b�A�"�7簮<�Щ����5��Ĭm��0��2B�����Ds�豩?�
)����(yS��:J����?7���dX�<����'g\>>Mۛm��B6/Ka%�3�\�.9�;}]H�:�� ����
wy�<�M���������W�6Y����Y>�!�]2OD@k��
}�X8����&���s�EF�g���6�Lg��l�Aq1��$)���"@v�N%2��`��(��.;��z�L�:��
����Ej*w�ڂ�S���0b�%A��E�^dQr�x��/9�;�h~"��x���̼o60����(�׎�fz4��
���W��Ɣb*�EM��t�8c���w���� n�B�L��$"Uq�6@诽���eHn`�Us��0-�=�P�3�K�{,�s�j�S����yAIKA�eUL��`�
9�x$~8m�����>�GM�Rd=�Q��H}B@��c���>ސ|o���δae`
_�r������~	��8ؑ�|=��.o��ȧ��_���֤pR���r���Yɤ~��~5g�̹�rҬ��N���"�<4f#c���2��;��'AP�B�[\�c����B_
���?pؖ%Z�Y҅��T���/U}�qɰ�[��yM��7#��,> ����@0�'�"l�5.��)�1G�1?-��l���``�:�d����
V�N�$"�MM��zQ2��A�.�K��\�Q�$|�x�
4�q��l�Lxm����7������:3��G�J4�[��'�m6�iF�CO�vL��n�)�#ֳ���,�8��Z��S W�_�)s����ۚ������f�b
E�m�;�V8�RVh�,I
���{~�n8�"�����k�X��@V~rڵ���I�el�b�/�ĺTv d�&G|-�9����f8i���fw���.�d*��S�t)�mFe���mlK�ff8���w���&x���r��[8	ʳ�\�Zs��<���S�R�Xi
�!߉G1j`�mfEo��Y�„�k.&�ޕ+jV��;h`�ե�9���7��;�S�t�(|Y��X|y2twX��
��[�;"�n6@Dᆿ��ɶ75��
�zc�[��~Me���
k�ӳ<�+
Z�G����O�QE>�sb#8��ց���l���d�0<�mS}� E�8r<�]����#}�H�B
\�;���o��`JH��;!�!�j&�AF�[����;�Xl>�B7��V3Ѥ�ө���
�L�*�\�6S��]��m$h:���W��p)t��M��\�����}���V=s^���+/�ґ\��%�g��jL��q	����6X�hPl(��E��
�9ޡ�2^xx�69�c���� �]�ۗ�?d�4-�&Lm�{'"��-#�%��-=7����TsQ0�]?��y���Q�O�+��=��u¢)q�h�>�:BE��9O��t�E�aZw�(�u��,��֢_�rc�e��ȑz�
������6��5��������C��Q���5�;9�wo��Pc�M;���+nVfMQ��:�O�Z�I��(�"~Ά��r�w��s�Zv��pABc)�Ͷ���ۅ�/���?�!�5	Cڒ4KMW�kN��{��`	?X��o:&m��E�p��
��$�BU�-h�O���q@��Qv�oj���b|;M��f�Ɣ�0���\
���V���?v�5���yg��E`=��o��Ց��jVo���uk]��x%�s�[.Lm�R��7�����.��4I���BW*SO�k���^�dj����L�����J���K%�2/��}���SuJ������������M�+���E�����Hܪ�v	U�gB�x�Ŝ<��f`�U;�#	n�羬Al�(ه�����'�<�K��^w��t�y���0���S�af���D��C-��T۽�a�/�1P8�$|꫑��w��osVT,S,��%j�c����v��}��2�d�33�i��>�G\�r%���^��_E��ϖ,�셥�t�)j2ҫ����2������p�X�TG𚱜H�E�1��P�Z|��B�E�a���=e�S�ݯS�Z
�wO���+�?r�l��+�ݳ�^%��ݾ�Dx��?ܴ� gЬG�z�����3*G��X�H+;��ܿ9Y\����O���'�xAJs����-M�+xq��.�rtm8v]���<9����Y��.
 ��>�����w����;K�L��i616C���\c�S.���o��uG���eE-
��^�m��ˌ��Ԍ=SH!�~�X3+��TH�
`p[�>��ֿ�E�=R>հ8L���;������)5H��s��$[L��=���d�T<��&��S�m!��[V	�k���*��ն�
�^�<��y�Ƨ{�����9��|V����v�<�?��\�p�E�OcE�`[��V0�N��616���;��������q9�GZz�����T	a��7@Q��r}7a=ޖ��֛���$Jk�]+�g�ϧ���ʗ6�9Ol��	���s�eI�
����}W��&~�Ϗ�w�awǾ�Bx2=�bU,�@�h�%�o�:��9������n�����py=�����/�Lt��%�n�����K��*�mKSM��|)����N�'����Y�H�S��KZ�hz+&�o�+2;D預���7�.�\�7x���^T��(A���%���BK
��[/�y�ɵ?�6���E����j�*��
��h���+=�k�C����.�(Q7�
	�cb�o ��h9a�:�!}�6A�\C p��I�K�-w�YT��;�H�0�>���d�GuB��s�Vfߔ�E�C]ff�v�Ǿu5��Zv	����iؖ��4m���:�����W�2�y��av��a�3���n�m ��1Z�܋vF��(����e®����
b�I���*,������O���.�E�S��չ��<�M$$���+d���[��L�x�p��7�dπ���'?�=��uXA�+�{�d��$½~�U���gH_o[��r�T�;ĝ3���R@�l��wW,lr��\R�-��
�Q`��:�����o��D*�~Φ8�[p�ő�l8� �W�Ꮳ�O*����%	���EH�T�߄�~e�H��3�	Nk��3��pK�%���1�O$D}�H �[�s�� �q�������S����uT3;�PX	�hM!�X^���.x�1�<�t�W��v�M0�����?w���«��)��3_a-Y��%$�/�Ё7W��D[,OD�y4��Ś��#�\�y��iZ'p�~5O�%�I��0r3�g-�
<d����6�#���y�ws?�n�2�O�!���n��#��*d��]�X��ȑ��#�<fd��PYY���W���ɵ���+5�on~��و����'���7�M��gQCmN�i�C��meU����2��qrb���Zxat-N���b��ȍ�<��/�qX$|�g��ŸI��Ic��*l���St?��9���'�
��0S�e򞥟�hd�ѪMoG>T
|�a��:{R
ȥ�g�.C٥����%7C�M�m�� U�Hթ������sV�>		���3�x�������H޸N?����暖��S٨�ޜi�
ngy�2�~Q����u�<MV�ڄcM�ʦ��*�H�2F��0�{Y�n���"�wl�,
�:��!œ7^�G������(2b����G����#qɪ(ut��Ax�)c*0�Wޓ40�3m��L�����}D�l(�ũ�n�oB0���+�<cmNA�%���Cl.�&m
P�o?a_�j!VA���U#%aF3�O���9Ø�E¡ϴ]���"\���U��U#%k�a����9y�@sL3�x�u�j%e��rՐA4����gq��S��}
|^���aw�>��q�n���&�!�>�<��C���'����Y~@<��9ꍏ�Qi_*�*����[Ƶ����Z�]���1<7u0d��	6�A3����7��y�o'"���n��cr-�&
��)�񅈝�CE#f�����Y��eL��wj4��ĕx�`=�QYHgA�|3.�j#��4m
��#�=���6�ȃ��g3�*�]��C�i�����ܱ�l�i�V?��r�Ugnq+�J�M��7D�^��h�E�F�)�w�Z�Lb8��>���Q�Թ�n�D�䑁��r��H��
������+��e3t��)��݂cۭ�_�6-6�y=��ĩ� xC:-�	��T�DG$Ց��F/6���S�;�)p������Ṗ�'K�'�d�U���!Yk��d&��̀it[N�E�8�d��kg�6��?��~�[��~S���$��M�+�c.�.�I��a��Bd^3����k��+�1�]�1(����I���u>��_��ר��ˤ��v���.��u.V�T`�d��Ll$��Ȣ}�IB��w�\���]W�s��/C�8���8ϵ�څ��uR�i��p��"���	��oǾ���3�v9���/;�i����9�?����l>�%�;}[���b�V�›l��u/*��=,q��~�_�M���FQ"7(ʮ�T�o��̖-���6R{~��\ސt)~��x5�늾ĩ,h�,ZҦ���Z&�L'*�m�(3��#�B��լӣ@s�AAe��ǵ���{�(��l.�����'W���F@"�7~z�M���.�Vc=*&H��xqM�ՙ��S�u�d	�V�`L.��N�C��V�ѻ�,��b�-ޅ�Y�<��a������5�j��#a�oS0k��n϶3Hh�SQ���/�w�u���N���^}��/���Y�����|�f�z(�OU�^���(�[�;�¸*H�g�?V�[?�(��4��Œ٘f����e���b]
���q�o0f�3X��ſ�Y-�Vv�#ߜA�Ӛ�f
N+�c����ٝ�O����I���@�3���lV��@-9ߦ�i\�b�ˁ��w�Pg[*�@�]�~}Xg)_��6%��v����`��Q}���� ��da������YRHV�Z�!�wI���XGD�ESs+h%\� �M��5��7.΀a&���d>T���|^��sИu������Zx�J�$�hz;f����b�:j� �y�p؝�*dXM��~��+f�ѓ���������H�W�;J��1�C$��Kh��y�Ԍ]�V��N{J��B�\`�t ����3M�4����1�'#É��
Rǔ���mq�����~��[����
nu������Y�ǮW&ru$Uqh�
qC��:N������M�Gf��˖^Ez8�j��{��j�O���&�e��#��m�����4j�*��}���.���ooy�f�̕?介�2��"$~Vi�71����s�0-�A`�`�w���T�OȢ���t����_̨�9B�+(h-����rЋ����g��_��;0�
�K٢�V�[?�!�5����5�3r�|��9��"9��F�3b�W-2��QV�zg���B�����]
�)l^�؄�XzvB���7ܣ�H�cU�j<ly�}�O�X�k*�X�\�8"��.͹��Lz�-{�T�Y����O��H��ݚ�"j4I�"Z4#I֡��^�T$Ĭʛ�O����@<�ه�#��@K�FGםX�$�3x���59F�,:O�,�|�:�_��NL��Ǖ-8�L0��c~C�ֹ\���j�3�/�i�Sn�O�U`)�Jŋ�k�J��Y���Ӆ�d#7`����+�V-�)UZ�,d������鱋�9��F�/E�7�Ҩ����	+S���pVF� �%��pS(�6�݋�pp��2���dH\���'��}��n:{��# g7���V���9��`ҧU�;�+a�e=�|�"-2ёA�т9���F�O��dK-d��ݘ��㈚e�@���?�Vl�P���ϊ�=�%A��o�6����Ĵӌ7�[��Z	�G��w\k�R�gGl\~ㅎ*�~��?cw�]_�Y|��/�
��w��p9���<Q��&������I��W,p�*�O~o:pKلƅ�,}�j�|�&��=��pr �8nj�M���/ |�,NZj�����)�#�W����}˹�U�`F��Xjv�(n�H�G��(n��+�\��i���0��a\R@@���%��U&�đ��m�B5�ȑ�I7�����'�4ɦ5;��A{���;�P�e���j�ɬ����pt�$�=�����4�f�Fu��!^�{F)�4AT	j��v-���E�r�Y�ҥ�9s��ұ薱��aO�\��N}&��6)Z��=�k�w�Y��5���%������B� ���20�M��zQ͆�6o�{��� �������1	������~7��%�R��7}�s3"[� e|�M�]WXY97`�Û�����!i�p%a�6���D�_�̟�����|Y��VPD�~�7iO�x�z8��!�?����l����}��!C-�B��RƑ�X4��aS{�e0�4�O#c��ˬ�^ߗ)Ҟ`
��w���\��")����<(&��W?ᢻ�n�x�$��*$1�p�?V
�9�>Hy�}oBP�^��4zH`��S)��ΐf��$��ǡ�v��M�_��p����P��jj�9��4�\���_5�KE����T>1
�y&�{����YgM����x�>�0�y���-���&���S���ij�pr�v��Hl/kt
�!5���)\*޸B��v�Kg謹
�^?��ބq��*ƣ�n�<��(�����ѧ�Q[qo8*������I�q�~ęK�lNi)z.���\(IK}��1�o4Vr,7�0$���'Te�A�1J+n�����$]��v�#��	@(dw����
F&��2��i>��
&�1�3�2m������&'�Q:V�� �UN'�����x"��
�!�(Gܾ���%��=���+�S`"(��m	2u��$�(�K
� C Z
��v$�	��J���h�����YX�'`o� �#ٿ��f_�Ud�(s �\����r(��)p�* L���x�����_
�#"�%n|��&�:�&�$�Y%W��T�!>z�'�'�=
�	$���%	�::���=SJ;E@�%W&�N��	�
�R�J��M%��t!1� �
���@�`}$�H")%��f�%�|@��$'?&�:6"���2'�U �
H(��{�,��
�
��N(X'��	x�$?'��p�J
{X�Y�!ReH�
�%:����$�"�fmo'l���#d[����
Hr`[�t�&�f�$6u���0��k&z�����*(���	ShIk
�1��&�=�
��	 �/�'�
&w!cr�
�%��&'}%�
e����$xg����D0_W� �~w�%53�k
���ۛ=���U�'v&�$\��+���&�,.{G[��U^�|#��B�
<5G�'+��	\(=�;��#E^��(�
�~��+�*�	�'�'Q�Q�f'�s���!#
'���(!��+��^&gdn�
�G,3�!���%�c%�^"�&9#x�
�V#��K	��"?!�r��"Rr�$T*�#��%����!��+a�g ��4�[!�
��Uv����l(���$'&�'�"3&�
"�#��	����G3(d�
�i@�w
�������2g��8[�' �+'i?��^��&��U�{&R*<I�$`�$�>%�$�%_w��%��r�3�%�#D�k�������&��r��%�4��� ��!��!&�
B�'�S�$�&�����&�"p"r�� ON�&���U��&��<���'���KHAA�%�#|T
��#
w'd(�
F��E�&.e� �%F��	g�>�:,�-	&/����#�!w1!8��(1%���"�'�q��y(XQ_'�+#&�n#�"�%��~�(;�� d*"�$y��!��&H�%���&!5
������m!C��gI6j&��&�9'�i�w0�F	�!��
�%���&����(t%�qOF�h#
\^!!$d	+ ����a#�)�C: ���"�V;p�
�%��bK���"�$n��@���H�{q��EB6��7]�Z|�&psW>�5�x[�p<@�Y���X5��AH�FP,X\! Z��%�^P��2�Y��� ���B�0o[E��\��hL/8P�V,�~p�O����H�]@WY��w[�� �9Z�u�`�EW���N�51�M��x@�U�9��[RW�0IV�`"Ke}�0\'�0�W-���Q<�"D�A!V��$��W$��T�`^�1[	�
��Zy�L5s�����:�bM��k �L$�Wp6O���h��jZ� ��L�Ea �K����+I���(L���PRZ��M�eWJAWp�F_�_���p[,,��N��Q=���hK��P{O���P�Z�$��M��=0�J(��H�4��][a��1[Etm��O�`�F/be��[�(�7R]~�XfɚAK�R�VY�0הo`�M%� �W"?��xL��BprO ���|W�/	Hה�Q`j[6��3O����[����O�?��2XOx#�)Mrr��H��D�p3[�U@�Z�[�ؑ(��p`R�} �ZkpWO3Do`��8¼`���v[��ЍV�0�O����M�`֑(Ni��V	9���8(��G�Hj���M�9�S��}�.R
�I�S�� 3X�;$@�O
C������Q��[I�q gOq�pj[�p\Y%"�pK�}�,Y=��0�L	���/Z��\ �IF��Ɣ�@�lK� +�P��$ \)js@/P�/
0P"DH��A@���Ee��[(Q��=[�m��	Z�r�8X	G<@VZ-��`|[~���<Q	np�[�����N"��������nX%�0Z~�U�J[����W���G� ��N$B�@�P	��3Fj�PZM/z*��F�_<@�\Z����I�u���O���@�MZ(��'\iw� gQ�����M�V���X?�2��W>.�@9V�$ ��V2�'��K��k�jMk{`�T�7��"Z���VZ�&�ؔ�a�RW���E�H���I\�<�OX��Q�ڤ��Zo���U�ah����XtR.4J�|K���ؔf���H#303P��dN�M���8���,R�.��X3�J�'��(@	\�XH�Y0{Sk�n �M��@B[�dU��)0�[׊�O����J%�`<D�l���W;?<�BZ��n`�V���оQ]^_p�H���K..@LX�@ER��� [���00P��B�N�.��\�V��� ��`W���Ie16�Ք(X� ?I���P	]
��V	40WL����F�ێ�ّ(� �H��	P4[�%��(Owژ�!F@x� �T����V�-c�!]F��P�KR9��^M9�uoV�р�VBc� 3�����V	AN��O�H��Vg��p{[x�P�S�K�
V.S�L4>�\<�0�I���Zu���(Is1 �M��H�V�����Z�������Z[T��Rw� ]��)`�M=�f@�ac�*�=�`��`[O'� L]����No���tX[g���X���PFJ��@-O��P5Y� O�h}0�E�B��K����H��k�[[�x�:MN0�1[��p$X����E4'e��EŜ��a�� �Y��H�|K%����S{��0ɔFL�����FZ�d��MV���W�LR��F��`�FN10OP��S��MXh�<P�V��MP=b��*Vr�@aZ�R@��>k�YY/1|��M1-+`�[o�.P5[��PIZ �p�T:8��Y�d`p,O68��#qP�[�L�W�8�{�bI��-��[�P@b�r@bOܗ�nP�f�
[��hK���[m�s�I?%���EsFp�K%Y\��Q:��pjZ���L�+� �NEe�(۔�'P0K� O��b�Z
y 
[
!K�^�P
wE�֑(� \F"_�>H2g��MRW-�ZQV�
�.ZY� �R��rp�[�/�p�Z<L��!Kf����JDY!��Sþ�
N'.�@�M,H�@;If
��zQ]��*[QdT4[Pd�P�PT>��H�����Q����ؔ�&���7 �[��L<*0�V��7 ّ(����V()`�������Ss���K] <���K��00�O�B0�[�Di0�PSN�L���R�Y0�\�:���CEp: �Tl!UI��T\��r��SJ��`�Q�=�DR�<0�[7KD��[ge;��W��c`B[��PKs��(FWq�ԑ(�/p�\S50\D�2�V�}��=W�,� �[&��p
F�a@Ik����Z���`�\�6���M#cd�JA0�����ĭ`�VSo@�OC��@=��|l/Zj�=I����Z���TF�p6Lj��L�n]P
M�&�lLj�p�L�Up[L+�1�ӑ(%�@ܒ���p�NE?�@�R�:Q0
U�	��G*k��Ɣ�ZPV���`qR�a1P&�>p\F�H�K �P��SxT��O����ؔ��.Z�E��pV����F]����dL��pz\���[�SAUZe����NB]��G�#�`,V����rK%��@�Z0���UZjb0�FQP����Il!��sXZW�K���`=[
��Z�jy@�Q�bЇK�f0$Za}sP�Jg��`�G�e� �K%�@fWY\#�X%x?ТMM��[2���Jp��@9ZH��3R;G���X���iWP1��&D�)0�I_r��YO���Op}�P�[]���ZJ,�Qn+��W��C��\�ع0H�B���X&�/�ڔ^KP\aD��X[�0�0H3�P+GW�V��K�׮�
M[O���M����Q��Z@�J�
dZ@Sc��W���
Q��p�L���0cP���ܔ>E�`Q�<Z0LO`}p��I��^�Mi{ �G!+<@�'Dv�ePQX�<�0�QO^�K):��Q��W�D�J]J�u �H�b���Ym	l��Z�c� �W�"�;K�ox�-Z���oL�b��Y��)M���J\��PtY��zK�5M�ڔ���GD��`�PG��
]�`�0X?�ޒ��q@,OlPPbJ-@�HOi?I6z�VL9e��V��@K[�� �O�����I�^Up�Z3n�\	�[�e�`�z`�K�҉�
[^o�`"]���ޒ8dt%\+ô�2[��T@۔���~Iko�M��k��MbV��[Uc�`Mt�ؔP
��[=Z��\��`XXP��E�O@ؒ@Զ`�W�\`ّ(�
�\MN`np�R�pQjΙ��YDD��[�()��W!�)��V�0`D�}O �[��s�\	��W1��۔��p�E-<��a6�;�~T8�w�cL�� -V�P:`sK%�m@�Q�u��[N�yX	���j[
_@�W"%�J(�jI�����J����[��� |K%5p�RgƯ`Z�@� &H�Z@����c@N�����\'���Q+�
�DW~���eWK�0�S�3� \��g�G=��8]֪ �YX���fX|�`�YaK-!�h{��{Q��~H����ё(���N�����[ ���W�`�~`�\q:
 D]IB��G��K�\Yb�jYY)�`�T(x5P�S�F�.K���0�J�K��V��V�I!+ Ց(5���O���`t\�P2R<�y�Vw�E �[5�� �V�U���\�:�p>K���pw[s��pMTv�M�F���E��[uU`�\
քLT�
`����>��W����IR3�Q[�Q�h�
]S=��xK�� ['q��Xbl�`K%�H�&\�6�@�J��c[��Gp�L�Z`�M����HZZ��GV�P�K�F�W1'@��H�+��F�.�aZg'�D����Z��|P}F^��0{V�W���K�����Wj1%@���u��\' ����HL��mI7�8�ڔ6H���H\[��V��w�R3��P�}��Y>�f[VP�E�Y�@.[���P�ی@PO���0AX����[@C��FI(�`�T�H�@�H��� Z��K0�F��C`�Ieu�iR,�`=D}
@�� �5��VH�VP8X&;�pdKJ�@MV�
�P�M"��8R��kP7��`Z&h��T&0�<XA���&D��~OI!�\���NX���pdX|*@�Yi��PIL�
m�QIMI�5I�s���P]q3L�Y�Ц[VJ��M��]�X�#|�u� �A`Z%i{
WhR�@�R�poR���\���p�X��vkM}��Xm7p]RyP�
Q� ERÉ`xTxN��MiP>Pw���Y���JD��YsPx��W3��Q��@הWS`%X4����\����LX�L���M���8��G��Mbn=0N�[�0�L	�F�>I�F� ��H[���I��*�e[��R@�W6�`bP�����Z#]rM���u[e GK�pZ�:F�"�I.Q��E�P.�ZU�QЕZO-�aM�H�`WZ��dVd�f���w�W7VIpMD&^��+R-�(`uK�d�4�8���NI�Ÿ��P`�N	=p]X�hPiQ�ܱеMSV��{[m���P�0���[q���I0�`JZ*
��Y�?��If~;�tK��J@^Fכ��P���@Z���PI��wp5I#���N���В\	�����P���Y9��0KU���YT��P�L�q���Ni��a|���Y�7�U,�
0SF�s.��{��HI�z��ZY�3�\(�,Xؔ�p��U:Ǣ -O��b�;�X���K�*\�Y����Q˥+X@�0�W��j F-�!�[=,��X�@8Ib�0�Zb����[6�Bhؔ��Vv�p2GF+ yI6*��[�&���[LAb��VT�����`|��MR�`;F��h��E
��I%�0�Zy��M|�vPgW�\�@-[��.�PHx��P���s�M��1�xX6�_�_V{��p�O�	YLR;w�N����[���V1$@�I�I�K����U��`mK���@�L$G� /[a�O @X5�.D,V9P7J���N�G:�%I��E�Ve��`Ց(����W�N��~Mz�0۔g�5R�7�������Y�	�M4�C��\�s���L�Kl�5K`����P���?[�����NE��ؒ�X���Rm�!P��D�Yv�J��Zdԁ��H,����PIXؒ@���kM`�P�V	�P6J�B��+M�mNh8��OM��Y%[��Ki�#p�Y	�:��F�yG�1Yn���eL�|P�V�%���R#��`VD�� �Q*� aZ ���V�K�p&I��*�{XWf��M���@�F�p�\-.���J3��\[��0�P���p[�<`�Y;c@��\	�l��QX	s�Z-����J0R��P#�P�Fz�j0YTy>��,O:�O{<�@��E !�He�VnN|��[g�?pJX��+ Z�w)0�Pq�p�Y��=�Yq��3�@@���O���.V���`oK�v+��Q���U['r$�JZ/�еU����\-զV�*#�jY-�?��Z��L�Zfq� �H\13�[��PWsc�P�O�J0[3-o�1V��3��F�B�0�Lc�[��Ie�,@�I��9@X�7TФ\�;��X%	PbR[�H #Z	����G�H� ۔ju0tI�n�vI�*d��V��P~V�d1�H�e�1G��L�iR�G_�\���&\���ڔ���>D;���V�߯�'Fo��`�V����S��V� 7 �Q�
��ZK�X�LM���P�I �(��=0�R��sK%!k��V�+m�vK�=6�G�*=0RO�p�hK�� X`�I&���Z=6�[�P�Q(�\��Z���bOT�M����[�
!@�W� �I(�`�O���U��c��MR^�KZ9�r@SM��*R�9� �\F�p8J�)�pE]a��.PN� �FJ��G0�Y�[{1+R ���\����[�6@�ڔ��IVճ��U����\����Z	�vpS�]j[PnX}�`�R���@�[��.�\�2�"\-� g�`"y�>XLR{/[��@�Y%�`�Yw$`Ք0��L9W��S��'@0Z��-@�MN��ZWD	�%W��� �R9��`�U8E'yJ-$�[�>��Qls (�`[yp�C�|�W�`�/�\�b��,�KXX�p�\
��nK���p�T$�� �J�*h�SK}���|L@y	`�L$-���UD*�p�N*(`ߒ��d@X#opV��x`�U�S�ڔ�{ *M�׼�m���10�Q*(�`�YW)0�J�\@�K�Z��%F9��SG�5�P�L5*���L<^�Z���oF��� AQB�+�K�i>�Ӕ�L�O���MVa�P/MVg	�Zf?p��Y	v�۔��(X3�АK)e`ב(/�@!K^Y��Q6ա��K��X(*`-Z ���WP�g�bZy-~�/Y.�0_R=s+�\����VpW�LG��M�����S~��[Pn,�,D��y�2X5)*�F���CZ=� E]B� JJ|@�Y���XZ���-O�rP���� M��C]�W�1RWp��Q����ے�F �W/�D@@[�"@�L#r/�^Q6XP�ڑ(j�`�J��PQ@�[$��`�\���8ה�10�Y:0N�UM ODԏ@�I-n_0�SM��\�����Z���UP����Ք@Y�p5J���ЌO3R��\-~h�\w���W)
��MW�x�5V��\Z��0pSO�G�dP)<�`�S�0��4R���+R=��P�G~�@�K��pmP����R.��B[�U0�Q�r�zT�v�>H	� �K����ؔ�����Ku0Q���6���) �Lʝ�(\@fD�hQ}���Nr���Y6Z�`ґ(P(��S��pCQL��jZV�0i[0���M�����Ie���M�� הn�0�YCT�p�Z3����S�����P��P�OYW�I�����H�9'�3�8�� �[�=�PX�В@�F�S��`�%�$X���cQ��@�ZW�
ZE��M�}��)R�/�nX��\��W;(0�M�\w�	X$���z[���@ZF;�l�hf)p�C.���>]1np�X����h��pVQ-�7 �L�b�D�/��qW�f��Sm��\�?H,ה���Z��R�U�hK%0�W�}S@4Y����XXE�`ԑ(E�p(M
HzP�I��yX��L@Z�n�P$X�)`�M*}�`�S�hWl=yPhL0�@�RO�qA �O'��֔h��GD5�M�VRF�`�Mfk���[%��P��g��T�$�K����Ie���P�����}�p�W�P �Yj�b0�V��p�J3��pMXI�T�N:�`�X:�BM�(x����0�O3�
Z���P�F�ɛ0�R����DL7���-V���S� �[y���H�5{`nX��G��@�H��>0_M�A�G��J`ZW]��0���PlV�8(]�U0�X6>��'\`���M�4�P�G�()�[��0�RJ�*P	X�0�gY�����ZzO0�Gs�@&F���Y�OP�L����O�&��Mfi@�L�#@6�p!0ЖST�9`�\	H�M�`�`ӑ(b��[y�2[�vHPC])RQ@\��b��U�/2@�W;?8�L	}���HOw�Z~�'0 F�S<@e[3ɘ�YB5s@4�p@u��N�����Y\"�
N$�+�XO?��	Mm�0lM�DA�EI1��K)ʞpX�PNFx��\�}�@��`�M����YX�+�He�Y�YIA�� �Z[Ky�Z��� X-�*P�M U[DM��iY.���G���vV�~A0�Z�4P�W�PNbV���J��)��OO��Q���wS�U���YC�pYZ��Y�	Oqˆ0�\e����F�%P��%�K]}�WpbQ��^�ב(E`�Y`
�{M�y��Gu��@�R	9��}Qx.B�Q�?���K+VL�Hx�PFW�H��|I���@Z����MW�8M���P�\\� ��@��@�Ldu�$\GQ� ڑ(�p[
�Z���MR]���I�x* �QJ��gP�`FP\��P�\	=^�_Q6��@3FJ��pL�[�\�l�Z����-P�m�iW��p�SYFI��8؇p�I���UK]��Z"�)�F�\� �I
�+���� �M�� �V]>*0�S��M0�I���p�Pj���\t�M )Z����MDj&��Z�x{��IsJ���T��7 ?W�� �V	�6@�V	 u��WU�?0�Z3<�۔����Z�����XHF��P$�� 'IS����[�#�gP��@�V�bЫV�� �M�Y+PBZ�NmP�Z��-[)f'�I����-O.���P��`�P��`>[�
*�HW
�B�\)xu ٔ�E���\6ݑ@GD���_Q.�R0[��ܔ�� (F����rI�#!�4X݈�NK��P�K��pD����GK�^�\	����O���P�Q}�~`@L<�\����S�"� %Ic�A�O��PEM\�>`iY�M�Wv� �Q����[��d0�\	:t��[�ԑ(���J~3�wI(�R�U[2_��PJ���VQ`|����g��V���[n�/�\�?p&M*\�0yJg
��pVZTk���O�(p�V>��G]2>
 �Iewz�>Q�{���h�QP|Q�l6��S��t\�X�@Ԕ`/8��R��*�SO���qMq��pFXmT%��S�Gw�Je��2Y��1P�J�P;�jZj^�O`0�Pʔ�w@MK��NV$��(H=��0�HU1�`�O7Q@�LM���P��P)X��f`�Iw�@&M*�
�J6`ؔeQ�$P�����W8~j �Ko���Y7`��uY/(���JY�0�[��_`�Z�4�0%\	��]�hC�B[�d�+R-/O`n�`���N\W�`MD�@S��ؔ6���UR��0K%��SOl�I��Q`�L��PN9�|pWIo���L"���H���Q#���Z v�[��{��Y�8`�SU����,�>Z.�c�M[UzphI���P[���Jj���O��,@Ք_Y��Y`��wK���`N$�@�I�W�P�P[�`�\��+�|O;�TPS�j}��Su~��ב(���[W�`���� ��`�����[`� �M��5PJ]!� �[��8����h��@�Q2D �U����W�`�M R�P*I�@��\n����N��a��X��k�h�w�AZ�E��R�{��Vm@��J[�@�1R K4��R�s48ؔ�}�kK��4��L"3F.P$Ft@�L/0TP�tP�E����@P��X kL�%p��Q4����Y�/� $X��`5R��s nM
hg�S�2��J��kЍ\57�iK��v�fL�y}��ZS���\P�`�@RTy���h4���5L���C=Fq`�WJ�M`�Jg(�p�X��8P \~%��$K�pZ�b(�)[ri-@�L|gB�K�m`{I�ߵ@1[E�`+YM1b0JO��f`�Y=��)Fc+��W�EpwSx��QpT�� �`��Y�Q��G��_P�S8��TY�9�j[%� ԑ(�:�Rb�?А\	B��H�]�p�[�
��LRK��vL��y0X���P�S,��SO���nX@����R�.��)M˺�aM����J0'� �S`T��TY���DR0AЀIu\�P^`�SYpP�Y���@�Cn�P|K%��pK�h�`�SsU4�[#H�\��#K�q
��L���M��
ELQG��%M'�t@�I��t��V8��M�r2 IH��K�3a�X.m?�@Ix�|�UZA؋�2MNW�KN���[Q��@\�;)��L5�\�IPZ��P[�Wxؔ��`�L��P.Pה�P@�W��Q�,[&��6R#����[X=�DՔ
PMD�� �a	���ZtYp�X5��@%\)]��OEsp/Z9N���V���U�-~�8Z?���S-��@AO�rM0�U���@mV�����ET"�KV>x��Ie�t`�RNvv�~[��O`�� �UpDLUaz�iYN![��XAT	�N��!Xהv��Y�.��SQ���M�): zF����hL���0D� �WB+��J]DGC`&F~PWV��qI��0�[wepdQ�s���Q=��P�\���GI8�*pjM�A0qK
��Ԕ�6�Ka��kF�� �N[��M�f`��x�
��U0�#=W�հ)F�|Y�V��dX�@2ZW�%�M��:0bO	֝`lW�����Z�)�/[bۢ��Yp�n�M��(X��2�`�X�,5�pI��q`�Y��pXP���[gU��ڔ�� �\���[���І[�j���G� M|���MRP��,[2����U�� 0�NB��RF~l� -X�q�p\����!\d�V�CIxefP�M����F��u���PgL���@�Z�ɹ0�G�ո�^IB�&�UP��lp/Y3�'Ԕ(@�QX�p
W�!B�bL��'M��DJ3��J���eO��.p�V�
6��Rm�@�RAD��R��PXG[5�)M���3ZQ�I�V	:�P�V�s�F�|&��L+���V��)`��`x���I�rJ`5[Y@\הܥ��NB�y�gP�VоV�Xm0[r��Yw�* 0Vr	W�KIh�`�O�0���W��
 �[g�C�0[)\}��O����:Lc�0X
�����`L3y��G��(�LW�� t[�����Z#�t��O�|@lF�~���OH����Y�D`��K&h��F���&F�!F���z�)M҃0�Y~Ok��M�L���\k���S%�P��	�{Q5��0�Q�N �[�ШF���`W�
@}K�8]�7K��ХY-A`� �#�\	a��RTM�P�O2R��Ktyt��V�L���V
�0�VD|��Y�u9`
N4���X�iP2X<?�0`Qk�	�&M*X�[�	��Ox���J6����ZZ#�ZR�5�CAؓ`�V	I��}W�g�p�K+�0[<I���M#M���PX��`Mi��WK
���tY5����Y#�� !K	�F��Ja����W ���KZLz"��Y��l��[�JG��F^�q`K	*��O�,��MIz�0�U/���\3�PdU}�g�
D�b.�X�Bc�=O\�`'\3�}�X5��MeySp�Ok��@F"q���K*aER'���YFCd�V	$f��K�����[g(��I3Y�P�I����֑(M��}[�; �'M*�@@�H+�X �M��Q�7Xa�z �[Ta��M�m��XR}{�СY	�� �\	1p�Ul�b��@^[�b�p�PX�]�(X>�p�P/�0!K	V8��Z�a�[�r��K�2ZAr��O�B��ؔ��0�Ie�$��Z~ RU�
��,OWg�Ӕ����[$j01Z��@�Q��)��O��p�J\Q�P���ڔ���Qk��Nr��`�Men��P�f��E��	p�\	^ �[��:��[s#��Q���K��N�&Wj�s0GX7��P�O
+p[OM��VD�S0�Nr����G�IV�U�ז��[��S�cUTٟ0sK%���H�����R}���\Z20PXX>R�H��g��X�ib0'M*(�wJd�X��P�Y0�yT��W�Sq0J]�Iהk�iK1� X�� �H*0�PG0eQ�׭@iK�:�0�a6̓�OI��*�wK���NE)�p�I�4Y��K�z�`M�� �SJ� �L�s� '�t��bU�pKX#�B�ڔ�ZЮ[�k@{[-
��"I�9��� 	 �aG��`�X3��P�R��pIq�� D6U�0I/p�`@X�����SV]F �H�C�kW�e���G���PnW�@/�MN�0(I{��p�Y�6" �VT��P�Q��#HW@5��H
�a��M�W�3Z?�� uY�d0L[�z��?QPG�I\�q�M����M����ǔ��۔���RDe!@ɔO���X�͂�W�+�!Ic� ]G� �wX��3�E]���V&�-`2K�2p�Iei|�0LTY�p�[�^,���(E�oG:ύ0Z_3�p?N��V��PK]!��0�LW`uP5I�)`)Vx=���Y	���L�h��N�A��ڔ��D�pk �I�)$]Z��/�ht�WD����I�VX`��h�0,F��:P�Q�MT@]�4��X���PZ���@ZF�p�[��4�\F�a[����L�
�P�S�e���R��~STc��"V�
T�R��p�C��@$X*������,D,h�VIe��p֔{���S�9���EC� ]���@]��$`�Va/�]Y��&2Z?���/YN�`�ɔ���kI�n��\2D���L����Lh����\@�@�R.� tK���Fh�X.X����ڔ�!����"K>�M�ka�CF�
�p�I���5�pF%P�Z�1�`]Q����Q��`,Ql*��G6L��1Y����[/S�X)qq�iR����Ld�-�Z	uDPjZŔDn����S��� �G�����H����kW��7phW����W$(&�-O�V��J����Q����V�"�0+G���M�]�pVD����G] S��Z,f
�oV��0X��0)I��Y��LI���Y�����M=��L,��\	pO�
[W��jYY)�Б �0�L ב(;KЎK��p�M=���yO�^�+I��� �N�P�Z��$��X>����[`�PdIR�_p�R:�R�Y��#@[V�ϐ�cM�����Ie�� )[rO*��\��1PiYg�}Qxc��G���,FqQ2sK%�}@>W��� ؑ(��НQ_��\�C��Zj#C�F��@�V	��0�WxC�@kYEb@rLe0V@_Qo&��xT���`P���p�O����YP���H�)��Qr7ТY=\���Et��`�Q}&��kYN#�ِP#y@��,�0�X����be ��V�t��TR�zg�F�����Z3%���Y�� �M9� �K����V��;QKo���GSU� iK�9�MY�p�F*�O���`*Y��uX�e��G]!�����H����Z'���4PF���U�m*�fW����\�5��a��0�K��� �Q�����[	d`�Q��) �V�� OW/)l�NZ�p��p@}0�TO�O`�H�H�sW=	��DgB���R�`
]B/��Y�Y�T[����9Xa�(P0[�-g@�[��� K]!�%@hF�Ƶ �� ��@��H�z@8Z�s��S�����\2�� �K�F;�hP�5I`pP���@W�8���%Z
����\	<�аZ�$�}L�`jYM�<R�
9�(ה���O*��0PP����R!�y[�:��Y	9�PsJ2K�ܔW?X�P�H[�:��S{2j�4P�T'�Ie�`ɔ ޺�)M�`Z�� sF��+ �L���VZi���Z��(X���G��U�v�NEvyiWg�! �a�Ӕ0�M��{�mL*�@�M��apiY	E�%M'���|[y�`�\��0\��PVD��@�E�A�KXX�p�O�\�@Z����Lg\��UG�£p�R��@���PD�#�h��0�NE�)���;G�G�%}`�M�N��H�OЗ\)�>DP�Eu��Vn�LZ(s�@V�AX%�?^X� �\'�`�qF|ʷ�iF�Vh��Y�m �F��@'WO�m��W��10-Y<��@�W�-��g��)r0,YJPO<G$�{Tr�`Q[s^��NO�3,�AXL,��*Q$s�G� ������eN?	�_[>��@(M.^�ЕQ�|��,Xo'�@BI���`�C/C�`jK�Nr0MIp^�S�0�H�˧�tbn��`�Q=H�P�P*N��M�w� �Jp����P�%��Z����R��m`-O� 8O�3��ZO���P�T�U]|Xrm��8ZW�^��G��m �T(��P�Ie��`�Q�:PHL\H��FXOI��Xu�M@�[}t��Z����-V�`hKaO�Q�I��T@����H��7�|V��o0�L����Z��#�JI�:�iR�Gp\��6@�\'�;�XY�0^�Q5|4@-F���`�C�(1��Z�8�MqFgеN1>&0yV��=�~M-�p�M�G�P>XX��БX��P,O&�"OC�E��W0��@{Q5*w@�J���@�Se��M��C�Ց(��4�h��p�Q���ґ(�]`�[Ot�`ؑ(���LV���QY��!V��6��\T(���S]9�aI
9��OrMp5YN���Q� � �G�����G��` �I�si�Y��{@�W�f���L���0]	��oG�q�Ԕ�@�\�PzQ��V
6X�_UO�@�\-� �R'Z��ڔ���GRB��M\�CP�\?Å`OX�/� ْ�<`�Qz���MZx� `M��(�%]5�hpX>��]Y��|`�J-���P���Z	K@l[o|Cp?[n�@,R-����J����uL��`��H,�NP"���L�u�`ה���SIy���-PD�I�����V'x`0M����QzQ�)M�fp�\K�iP�Y����V2;#�~K%�zЗK�����WE���J@�@�G���0�[���@�\P�P[r�y��Ks��9[�K���(uP�\6��tOG��MR��M�;��\	�TtX<�f@�V�)5p�T�C[ �Q�f��N]�X�	`0%H���p�F����M��+��K#`��K���O�A)��R��]`�M�P�@tV6tK'�h��p%\��`�/Xw0<@VY�Z�`�Q`���GV�� <M\��P�Z��� !D���~X|�x��Y2o��[t5��X�S��P�5�0�U����yVP����M��VF��S�5�([;w��WZT�\P�T	��`�Gu��`|Tr)� �Oj'�=IS����J�C+@RO�G�P�[/�0VO�*X�h^��EZ��Pp�GE�Ї\KnP�V��zK����nL����W�PpiW$*W�L��0b��oX���I�����WP�
�^YBL6��YH�0�C���M_T=��W��y�&Zn��tXi&�[1���%M'N� UY�ޞ��Q)n��Y�;��M���@5Z��@�Sa�8`��`*��S�R
P
K��WR��X��Q#Ys@+GĶ�Ojl��R���G��e�Ng�gH�-4ТP�o�I-�]��R�V���V�}��S���\�u� F����H0�[`\m
���[l�<IS����My!АV���
N��@�H�C�O��g�ؑ(���5Z����_I����Z�P�H��K���@�8����I�|_�\�G3�xX>
/p�La��pF���0�HUU���L9�(�V	6���I���`�Y����y[�*��zL(j�@�I�����L�#��RF~�00YY�PlP�5u0�RrP�M;0@aL����ؔl���\	r��Z�{�@�\	��\	z,��Uʊ�DW���Ց(g�
b/��-O��~pK%��&M*�6 ,Z?g%��[����Ȓ�i��V����\�K�,OQ��ؔ�D�V�8vp,Qa�_`LX�`'M*<��4X�����Z-�0WO3��K�����\\d���HP�@M�X�E1��
JF�`@�W�LPYPgȬ�O_lX �J~lh�yT"o��m[Ǒp�\-��S���U�K�@�J$��8ɔ}�1YM�p\�4!�GOM���$X)� nK��v�KXV���Z-V`\~���\Q6p�Y%R�Ie����U�8R\�PD��@PEI0��p�X^N� �\3��`�86���Y�S���T�>�.L���K%ƍp&P�?��b���V��rPM
G��3X��j �C֨۔�Tp^K��U�.Q�n���[oH+ �H��O@BX)bj�TX�a��>D���H�.p �Q-��ФZ/����ZG���ID���"DX��0�I���[=�`�Rxh��JD��X��n ,R �� ґ(
��sK%���H�b��ؔ}�)M$�_��Y�����L����Q=lc��[3s��ґ(~��+Q�:�p�\ ެ0�Q��0�\/�J�-O	�\O_���ٔ'�I��o@LZ<m��ؔ� D�{~�Ɣ��Z[k�\�gYr��>Z�
�0r[��i�uK�"P�V/ePbZ=j)PmW��~ FD�C���K�
 ��@s00�J%\uP�H�F�@ZX#m�P�[��i�Q���L��!�Ze�`Q�[7��LJy��N}^`ڑ(�s�Z����JP��@?[ƠPyK�� гZ�S�mX����Q�ЗMo��Zr� �I���p�M$�(�DR�@*F�p`aZy����R#ܕ@ؔїQ���X�(���W*[Z�LZQ��`�H�3N/jR�}V�.��,O���K�+�`h� �2P?[Ž��V#g��P[��0Yj�� nV��@�TW���H��>6M��p�]��S2[���Z�®��\	�|�sK%�9��O|�Z�Yb�hРO%B�eVZ��-Om�&M*�П[�ЇRA�( �\	{�"H?9�Hh9��G��@���E nOG���M19��:I{5i �IH�F@^Q���(��b0!IQ<�Y%X�P�VL��G���@5�hE�P9Z�Kf �V��HM�0+R �:�K�� dO|:��hD�<��ё(�# �F���fV�dGp�\]�c`�M����\q����Z3��0$X�q�'Xa�� �Yv??P�\NZ��V��#`�d3�6Z,s��Ԕ��P+R-�NP�K%��KGP�RSu��9O�Z��HZ�� ^O?4�P�O`7X}Y� &O�� Q����iP2�D��MB���[�P�M�߅�KZ0֫P�J�[��D]�W`�W�� �Jf�� R����`�Sr�:@>H~<=0cU���`�M��K�\Ky{�P�S����F�ݻ�UYt3U�6[����I�EO@4V�D~pHU����X�3L0hO��G��[L[P�\�c���H��@�S�����O���@�W�#K@F��P[_���F�����NB}��Ps�p�Z�kP�I��n��W�< ֔Hh�P�V&�N�]M!���J�0�N�
���NV���Mi�0�V	�5��Y��<�fI�y� XY�dV�MNlnp�V	�$�OR�4��K�^�/Q�lL��YoI�W�~�@e����G��20�OD�F`�Zj!�p�WT�G:<�HW��<��R���W>�<ؔ�*��F��X`d�8.@>[ ����Ie8��Y�(+�T�[�O^��лK��<��HEp!Q`	�3`P�< �\t5�\L�ɲ�pK���@KZGQ�(ɔ~���( �� �U�&��E\U0S;^�+Yv'���Wo�p�G05�P"\#���,Yk\1[/����[lEPI���@(H�<9��XBU&�^[
�K��X�����V��dXk�HP�I��"0�Q#�bПZ!��P1Y,��.V!�� PX(!� �Y����*[_��QZe'M�Q6H�pEW�Đ��N��� `�HJU��Y Ì��PY��\,����8_�`X���7V��(p�C�nwЏV����ڑ(:B��H`n��C]!�u�)ISm�`�[SU+�O9#��WA��I5
@�K%�.�JD�� ӑ(f�([+p@�O�%Z�_Q;d� �O	Y��~K%��0�I�����H	�I�=�K�S0N\>��M:��C2�"0FHc\+Pc[Q!@
]FI��M��t �pM�@�\�� uSK�pD]�L��M��a>I�wZӣ�Z�����L$�!Ѝ[2�+�SH	�4�ڔ��`[��`�H�P*p!HA��\��F
\�X��\-�6����G��i &Y/����M�o�P�ID��p�a���@[<w`)K���SS���\�s��N��pGL
$��Y�6�R'�j��Y9�`
I5�o�(V�#�`F��W��I�o��>Zr�N�\�ud rL�=�G��p�Vhp
K�c���L�;PB[+�x�WF��D��Z�mp �I�ܩ �Q4�P�P��\	�p�L�� �H��� W3�� �K�?��3[x-P�Y#\��Y#Bjٔ>��^� L�xI�L��W���ӑ(�f�pX�� ֑(_��rV��8�<PS��Y��i@�O�L��Ivq�0<F�Yb��S��-��P��P�[F\$WDt��5G�p�@�H�
�+��H��o��Wa�`sV�&]PIV0��ٔ��R�NW#��@tX5?���8H���V��p�\V�0iY��dP��4�_� N@0�Ps��@�Z4d�@�W_����Z7�Y�X:~e"I{G���H�����[��J�E���pZ����I����U|  HO�>��LWj�Yr�p!\o�I��Q���H�LH�\	O�@�V��{�PZ�ŦL[��
O[�PM���["d\�/Q �@ܔX���W.�P�VD3V�-;�C]C���H���E0L]�t��KZ��H(XT�e@Z[�@�C�L�LXU���Ks'��\	%P`��`5`�O��'M*���kYm͌p�Q��@iQ"J�ّ(�j@kK��t0�[ZM)���H&�p�[#��AD��0�Eh5��S��;�p�I����R9���WU[6 u��;��[d�:Vj
��qMm��V.���X��O�'I�d��HJ{6@�Ie
E`�O�>��~S[�`1K��
�L��`�
\,�xp�J/�@�N#��ؔ͋�K��V0�I��Npؔo��M���`}[��1 X�,-p	Mc$�0wR�o��NZ��,O�"�qV�O�A]��+ЯYalibcrypt.so.1_ITM_deregisterTMCloneTable__gmon_start___ITM_registerTMCloneTablelibreadline.so.7rl_terminal_namerl_markrl_readline_namerl_on_new_linerl_library_versionrl_donerl_endrl_completion_append_characterrl_callback_read_charrl_completion_matchesrl_line_bufferhistory_listtilde_expandrl_special_prefixesrl_promptrl_callback_handler_removerl_pointrl_pending_inputrl_attempted_completion_functionrl_callback_handler_installrl_redisplayusing_historylibncurses.so.6libtinfo.so.6libmhash.so.2mhash_freemhash_get_keygen_salt_sizemhash_get_hash_pblockmhash_hmac_initmhash_hmac_endmhash_keygen_extmhash_initmhash_endlibgmp.so.10__gmpz_cdiv_r__gmpz_init_set_si__gmpz_tdiv_r_ui__gmpz_init__gmpz_tdiv_q_ui__gmpn_popcount__gmpn_perfect_square_p__gmpz_ui_pow_ui__gmpz_add__gmp_set_memory_functions__gmpz_sqrtrem__gmpz_cmp_si__gmpz_init_set_str__gmpz_sub_ui__gmpz_mul__gmpz_invert__gmp_randseed_ui__gmpz_cdiv_r_ui__gmpz_tdiv_qr__gmpz_clear__gmpz_hamdist__gmpz_powm_ui__gmpz_jacobi__gmpz_cdiv_q_ui__gmpz_divexact__gmpz_fdiv_qr__gmpz_fac_ui__gmp_randinit_lc_2exp_size__gmpz_mul_ui__gmpz_probab_prime_p__gmpz_setbit__gmp_version__gmpz_ior__gmpz_pow_ui__gmpz_clrbit__gmpz_gcd__gmpz_fdiv_r_ui__gmpz_add_ui__gmpz_tdiv_q__gmpz_tdiv_r__gmpz_gcdext__gmpz_fdiv_q_ui__gmpz_sqrt__gmpz_sizeinbase__gmpz_and__gmpz_urandomb__gmpz_get_str__gmpz_fdiv_q__gmpz_scan0__gmpz_fdiv_r__gmpz_scan1__gmpz_sub__gmpz_cdiv_qr__gmpz_set__gmpz_get_si__gmpz_gcd_ui__gmpz_powm__gmpz_cmp__gmpz_mod__gmpz_nextprime__gmpz_cdiv_qr_ui__gmpz_fdiv_qr_ui__gmpz_tdiv_qr_ui__gmpz_com__gmp_randclear__gmpz_cdiv_qlibssl.so.1.1SSL_get_verify_resultTLSv1_server_methodTLS_server_methodSSL_writeSSL_CTX_set_default_passwd_cbSSL_set_shutdownSSL_set_connect_stateSSL_shutdownSSL_get_certificateSSL_CTX_use_certificate_chain_fileSSL_CTX_newSSL_acceptSSL_set_fdSSL_readOPENSSL_init_sslSSL_get_privatekeySSL_copy_session_idSSL_set_ex_dataSSL_CTX_check_private_keySSL_CTX_set_optionsSSL_get_errorSSL_get_peer_certificateSSL_pendingTLSv1_client_methodTLS_client_methodSSL_peekSSL_connectSSL_set_accept_stateSSL_CTX_freeSSL_CTX_set_default_passwd_cb_userdataSSL_CTX_use_PrivateKey_fileSSL_CTX_set_cipher_listSSL_get_ex_dataSSL_get_peer_cert_chainSSL_CTX_set_verifySSL_newSSL_CTX_load_verify_locationsSSL_CTX_set_verify_depthSSL_freeSSL_get_ex_data_X509_STORE_CTX_idxlibcrypto.so.1.1zErrorinflateEnddeflatedeflateInit_inflatedeflateEndX509_PURPOSE_get_countBN_num_bitsEVP_PKEY_newCRYPTO_get_ex_new_indexEVP_EncryptUpdateX509_NAME_entry_countX509_REQ_set_pubkeyRAND_statusOBJ_obj2nidGENERAL_NAME_freeBN_is_zeroEVP_DigestInitX509_STORE_CTX_initi2s_ASN1_INTEGERPKCS7_get0_signersX509_LOOKUP_filed2i_PKCS12_bioX509_set_subject_nameCONF_loadX509_EXTENSION_get_dataX509V3_EXT_getDH_get_default_methodDSA_get0_keyX509_REQ_verifyOBJ_nid2objPKCS7_signOPENSSL_sk_numASN1_item_d2iEVP_SealFinalERR_get_errorX509_subject_name_hashEVP_PKEY_get0_DSAEVP_CIPHER_iv_lengthRSA_set0_keyRAND_write_filePEM_read_bio_X509_REQX509V3_set_ctxPEM_read_bio_PrivateKeyX509_LOOKUP_hash_dirX509_NAME_get_index_by_OBJBIO_printfX509_get_ext_countDSA_newDH_freeX509_getm_notBeforeCONF_get_numberEVP_PKEY_base_idX509_get_pubkeyX509_PURPOSE_get0OPENSSL_sk_shiftEVP_CIPHER_CTX_block_sizeX509_REQ_dupEVP_aes_192_ccmASN1_STRING_dataX509_EXTENSION_get_objectX509_REQ_add1_attr_by_txtX509_get_default_cert_areaDH_generate_keyBIO_writePKCS7_verifyX509_NAME_ENTRY_get_dataOPENSSL_init_cryptoEVP_SignFinalX509_STORE_newERR_peek_errorDSA_generate_keyOBJ_txt2nidX509_alias_get0CONF_freeEVP_aes_128_ccmX509_verify_cert_error_stringBIO_new_fileEVP_CIPHER_block_sizeOBJ_sn2nidPEM_ASN1_read_bioBN_bin2bnEVP_MD_CTX_newEVP_CIPHER_CTX_resetERR_load_EVP_stringsBIO_s_memPEM_read_bio_PUBKEYEVP_MD_sizeRSA_public_encryptX509_STORE_freeEVP_PKEY_assignEVP_md4EVP_md5X509_NAME_add_entry_by_txtBN_with_flagsCONF_get_stringRSA_freeX509_getm_notAfterEVP_OpenInitX509_set_versionX509_get_subject_nameERR_error_string_nRSA_public_decryptX509_freeEVP_SealInitEVP_des_ede3_cbcOPENSSL_sk_new_nullEVP_PKEY_copy_parametersRSA_private_decryptDH_get0_pqgRSA_newEVP_rc2_40_cbcPEM_write_bio_X509OPENSSL_sk_pushBIO_freePEM_write_bio_PUBKEYX509_NAME_ENTRY_get_objectEVP_PKEY_get0_EC_KEYASN1_STRING_to_UTF8DH_set0_keyEVP_PKEY_bitsEC_KEY_get0_groupOBJ_nid2lnEC_GROUP_get_curve_nameDH_generate_parametersSMIME_read_PKCS7EVP_sha1PEM_write_bio_X509_REQX509_INFO_freeEVP_des_cbcEVP_VerifyFinalEVP_DecryptInitPKCS12_createOBJ_ln2nidOBJ_nid2snX509_REQ_signPKCS12_parseSMIME_write_PKCS7X509_newPEM_read_bio_X509EVP_add_cipherEVP_DecryptInit_exBIO_new_mem_bufEVP_PKEY_sizeEVP_CIPHER_key_lengthPKCS7_freeDSA_get0_pqgX509V3_EXT_REQ_add_confRSA_generate_keyRSA_get0_crt_paramsX509_NAME_get_text_by_NIDX509_NAME_onelineDSA_set0_keyX509V3_EXT_printX509_REQ_get_pubkeyX509_check_private_keyRSA_set0_factorsEVP_DigestFinalRSA_get0_factorsOBJ_create_objectsOBJ_NAME_do_all_sortedPKCS12_freeOPENSSL_sk_popRSA_set0_crt_paramsASN1_INTEGER_setX509_REQ_set_versionOBJ_createX509_get_issuer_nameEVP_EncryptInitBN_CTX_freeX509_STORE_CTX_newX509_STORE_CTX_get_current_certGENERAL_NAME_printEVP_PKEY_idBN_newEVP_DecryptUpdateX509_set_pubkeyERR_load_ERR_stringsX509_get_serialNumberX509_printEVP_rc4X509_check_purposeBIO_newX509_PURPOSE_get0_snameX509_set_issuer_nameEVP_EncryptInit_exBN_bn2binOPENSSL_sk_valueX509_REQ_get_attr_by_NIDRSA_get0_keyEVP_get_digestbynameRAND_load_fileX509_REQ_printEVP_CIPHER_CTX_set_key_lengthX509_LOOKUP_ctrlX509_REQ_newd2i_X509BIO_ctrlCONF_get_sectionPEM_X509_INFO_read_bioEVP_get_cipherbynameASN1_OBJECT_freeX509_gmtime_adjOBJ_obj2txtDH_set_methodEVP_PKEY_freeEVP_DecryptFinalOPENSSL_sk_pop_freeEVP_DigestUpdateDH_compute_keyEVP_rc2_64_cbcEVP_PKEY_get0_DHX509_STORE_CTX_set_errorX509_STORE_CTX_freeX509V3_set_conf_lhashEVP_aes_256_ccmX509_STORE_add_lookupEVP_CIPHER_CTX_newERR_clear_errorRSA_private_encryptX509_STORE_CTX_get_ex_dataX509_PURPOSE_get_idOPENSSL_sk_freeEVP_rc2_cbcX509_STORE_CTX_get_errorPEM_write_bio_PrivateKeyDH_newASN1_STRING_typeDH_set0_pqgEVP_EncryptFinalEVP_PKEY_get0_RSAEVP_MD_CTX_freeEVP_CIPHER_CTX_freeEVP_OpenFinalX509_NAME_add_entry_by_NIDPKCS7_encryptX509_STORE_CTX_set_purposeX509_REQ_freeX509_get_versionASN1_STRING_lengthBN_CTX_newASN1_STRING_set_default_mask_ascEVP_PKEY_get1_EC_KEYPKCS7_decryptDH_sizei2d_PKCS12_bioX509_get_extDSA_freeERR_error_stringX509_PURPOSE_get0_nameX509_NAME_get_index_by_NIDCRYPTO_freeBN_freeBN_mod_exp_montX509_dupDSA_set0_pqgX509_STORE_CTX_get_error_depthX509_verify_certDH_get0_keyX509_REQ_get_subject_nameX509V3_EXT_add_confX509_NAME_get_entryX509_signBIO_putsRAND_file_nameDH_checklibcurl.so.4inflateInit2_curl_version_infocurl_multi_fdsetcurl_formfreecurl_easy_cleanupcurl_multi_cleanupcurl_easy_strerrorcurl_slist_free_allcurl_easy_duphandlecurl_global_cleanupcurl_multi_waitcurl_easy_initcurl_easy_setoptcurl_easy_performcurl_slist_appendcurl_global_initcurl_multi_strerrorcurl_multi_performcurl_easy_getinfocurl_formaddlibbz2.so.1BZ2_bzwriteBZ2_bzDecompressEndBZ2_bzCompressInitBZ2_bzflushBZ2_bzDecompressBZ2_bzlibVersionBZ2_bzerrorBZ2_bzBuffToBuffCompressBZ2_bzopenBZ2_bzCompressEndBZ2_bzCompressBZ2_bzreadBZ2_bzdopenBZ2_bzcloseBZ2_bzDecompressInitlibz.so.1gzflushgzseekgzreadgzwritegzeofdeflateInit2_gzclosegzdopencompress2uncompresslibpcre.so.0pcre_studypcre_versionpcre_freepcre_infopcre_execpcre_get_substring_listpcre_compilepcre_fullinfopcre_maketableslibrt.so.1libresolv.so.2__dn_skipname__res_search__res_nmkquery__res_nsend__dn_expandlibm.so.6sincoslibdl.so.2dlclosedlsymdlopendlerrorlibxml2.so.2__xmlStructuredErrorxmlParseChunkxmlRemoveIDxmlNewNsPropxmlOutputBufferGetSizexmlXPathRegisterNsxmlOutputBufferCreateFilenamexmlOutputBufferCreateFilenameDefaultxmlRelaxNGCleanupTypesxmlStrcmpxmlParserInputBufferCreateFilenameDefaultxmlGetNsListxmlStrncmpxmlParseURIxmlXPathNewContextxmlFreeNodexmlPedanticParserDefaultxmlSearchNsByHrefxmlFreeParserCtxtxmlReadFilexmlSetStructuredErrorFuncxmlSetGenericErrorFuncxmlStrncatNewxmlGetPredefinedEntityxmlStrlenxmlAllocOutputBufferxmlXPathFreeObjectxmlURIUnescapeStringxmlCleanupParserxmlGetDocEntityxmlResetError__xmlLoadExtDtdDefaultValuexmlNodeDumpOutputxmlStrdupxmlFreePropxmlSplitQName2xmlNodeSetContentLenxmlStrndupxmlFreeDocxmlFreeURIxmlCopyErrorxmlMallocxmlOutputBufferClosexmlResetLastErrorxmlDocGetRootElementxmlEncodeEntitiesReentrantxmlCtxtUseOptionsxmlCreatePushParserCtxtxmlGetLastErrorxmlFreexmlOutputBufferFlush__xmlDoValidityCheckingDefaultValuexmlNewPropxmlAllocParserInputBufferxmlNewTextChildxmlNodeListGetStringxmlXPathFreeContextxmlIsBlankNodexmlXPathEvalxmlInitParserxmlSubstituteEntitiesDefaultxmlStrncatxmlHasNsPropxmlUnlinkNodexmlOutputBufferGetContentxmlFreeNsxmlLineNumbersDefaultxmlSaveFilexmlDocCopyNodexmlNewNsxmlKeepBlanksDefaultxmlNewChildxmlReadMemoryxmlDocDumpMemoryEncliblzma.so.5libgssapi_krb5.so.2libkrb5.so.3libk5crypto.so.3libcom_err.so.2libc.so.6__stpcpy_chkstrcpyshmgetgmtime_r__printf_chkexeclgai_strerrorinet_atonoptind__longjmp_chk__res_ninitperrorshmatin6addr_anygetpwuid__fdelt_chkinet_ntoafopencookiestrncpy__res_nclose__vsprintf_chksigprocmaskreaddir_r__stack_chk_fail__lxstatshmctlputcharshmdtstdinstrtollsocketpairmemchrgetpidkillpthread_mutex_destroymkstempstatvfslocaltime_rstrtolisattymmapexeclegetpwnamasctime_rsetitimersigemptysetgetaddrinfomemset__errno_locationmemcmp__syslog_chkgetsockoptdup2unsetenv_setjmppoll__fprintf_chksigaddsetgetgrnamstdoutrecvfputsstrnlenlseekmemcpystrtoulsetsockoptstrfmonstrcatgetpeernametzset__ctype_b_loc__open_2optargstderrmunmapwait3__snprintf_chkgetgroupsmremapexecve__fxstatstrncat__realpath_chkfilenopthread_mutex_initgnu_get_libc_versioniconv_closesigaction__memcpy_chksrandomstrchrgetsocknamemblenfdopeniconv_open__ctype_toupper_loc__ctype_tolower_locfreeaddrinfosetvbuffcntl__sprintf_chk__xstatmemmovepreadpwriteopterr__libc_start_mainstpcpyglobfree__environ_edata__bss_startzend_stack_pushzend_ts_hash_findXML_GetUserDatazif_getrandmaxzend_ptr_stack_cleantimezonedb_builtindecrement_functionsxe_get_element_class_entryzm_shutdown_miconvsapi_activate_headers_onlyzm_startup_dirphp_XML_GetCurrentByteIndexzim_spl_DirectoryIterator_keyzif_stream_context_set_optionzif_openssl_signzim_spl_SplFileObject_eofshutdown_compilerzif_openssl_verify_xml_defaultHandlerzif_curl_multi_remove_handlecfg_get_longzif_openssl_pkey_get_publicphp_start_ob_buffer_namedzim_spl_SplFileObject_key_php_stream_filter_appendzim_reflection_class_getStartLinephp_hash_5haval160_opszif_getenvzm_shutdown_url_scanner_exzif_base64_encodezif_dlzend_get_object_classnamezif_floorzm_startup_reflectionzend_uvinit_compilerzim_spl_EmptyIterator_keyzend_do_do_while_endphp_inet_ntopphp_filter_number_floatreflection_function_ptrphp_stream_xport_recvfromphp_unregister_url_stream_wrapper_volatileall_args_by_refzif_getdatezif_proc_get_statusspl_ce_RecursiveIteratorPHP_SHA384Finalphp_stream_context_alloczim_spl_Array_hasChildrenle_curl_multi_handlefetch_array_beginzend_do_end_variable_parsezim_spl_RegexIterator_setFlagsphp_sig_bmpphp_info_html_escspl_register_interfacezend_is_callablezif_is_writablezend_do_boolean_and_endzim_spl_SplFileObject_hasChildrenzim_reflection_class_newInstanceArgs_php_stream_mmap_unmap_exphp_stream_notification_alloczend_set_utility_valuesconvert_to_doublezif_ob_end_flushfifth_arg_force_refzm_deactivate_filestatzend_throw_exception_internalphp_module_shutdownzend_print_variablezif_gmmktimeget_active_function_namespl_add_interfaceszend_do_begin_function_declarationzim_spl_DirectoryIterator_rewindzend_ini_get_varphp_info_print_table_startphp_sig_pngzend_alter_ini_entry_exzim_error_exception___constructspl_ce_OverflowExceptionzim_exception___constructzif_serializeps_write_fileszif_money_formatphp_stream_dirent_alphasortzend_stack_is_emptyzif_getimagesizezif_mhash_countzif_get_magic_quotes_runtimezif_get_include_pathzif_timezone_name_getzend_hash_get_current_key_type_exphp_register_variablezim_spl_SplFileInfo_isDirphp_getuidmul_functionzim_spl_RecursiveDirectoryIterator_hasChildrenphp_stream_generic_socket_opszif_ob_cleanzif_mhash_keygen_s2kzend_do_pre_incdecphp_hash_ripemd256_opszif_sqrtphp_stream_filter_freecompile_filenamezend_ini_scanner_get_linenozend_fetch_resourcesapi_register_default_post_readerzim_reflection_method_isAbstractzif_ftp_nb_continuezend_activatephp_socket_strerrorfetch_array_dimPHP_5HAVAL256Initzif_stream_socket_sendtoPHP_SNEFRUFinal_php_error_logzm_deactivate_gmpphp_utf32_utf8zif_proc_nicezend_next_free_modulephp_stream_filter_prepend_exzend_do_begin_class_member_function_call_zend_list_deletezif_openssl_pkcs12_exportphp_copy_file_exzim_spl_SplObjectStorage_validzend_objects_store_putps_open_fileszim_reflection_class_hasMethodzif_get_meta_tagszif_is_filezif_strtrzend_register_internal_moduleshm_typezm_startup_opensslzif_spl_object_hashspl_ce_RecursiveDirectoryIteratorzend_hash_graceful_reverse_destroyphp_stream_http_wrapperzend_hash_index_existszend_get_zval_ptrphp_stream_ftp_opendirphp_filter_validate_regexpzim_spl_EmptyIterator_rewindzif_settypeadd_index_resourcezif_timezone_offset_getzend_do_mark_last_catchphp_XML_ParserCreateNSzend_object_store_get_objectis_equal_functionzif_addslashesspl_ce_RegexIteratorgmp_globalszif_jdtojewish_safe_ereallocgmp_module_entryphp_url_encodePHP_4HAVAL256Initphp_writezend_ini_global_shutdownzim_reflection_class_getNamezif_substrzend_iterator_wrapzend_do_foreach_endxml_globalszm_startup_proc_open_php_math_basetozvalzim_reflection_function_isUserDefinedzm_deactivate_splzend_std_cast_object_tostringphp_checkuid_exphp_hash_3tiger160_opssapi_globalssapi_free_headerzif_xml_get_current_line_numberzim_spl_RecursiveIteratorIterator_getDepthzend_do_receive_argzif_addcslashesspl_register_parent_ceconvert_to_objectzif_convert_cyr_stringzim_spl_AppendIterator_getArrayIteratorzm_shutdown_filespl_ce_UnexpectedValueExceptionoutput_globalszif_implodezend_list_insertzif_gmp_perfect_squarezend_update_static_property_longphp_stream_xport_registerPHP_TIGER192Finalzif_cal_infospl_SplOjectStorage_free_storagezim_spl_Array_offsetUnsetphp_get_highlight_structzif_output_add_rewrite_varadd_assoc_functionzend_ts_hash_index_exists_php_find_ps_serializerzif_openssl_x509_checkpurposeftp_systzim_reflection_method_isPrivatezm_activate_url_scanner_exzif_ltrimzif_preg_quotezif_flushzif_readline_infozm_info_exifzif_getrusagezif_iterator_applyzif_logzend_hash_del_key_or_index_zend_ts_hash_add_or_updatezend_objects_proxy_clonezif_rmdirzval_update_constantphp_open_temporary_fd_exzim_reflection_method_isDestructorzend_scan_byteszim_reflection_class_getDefaultPropertiesphp_canonicalize_version_php_stream_mmap_rangephp_check_specific_open_basedirzend_compile_stringzendlexzend_dynamic_array_initzend_stream_openzend_do_boolean_or_endzend_visibility_stringzif_gmp_invertmodule_registryzif_chunk_splitzif_unregister_tick_functionzend_startup_modulezif_unpack_php_stream_open_wrapper_as_filephp_base64_decodevar_push_dtor_no_addrefphp_network_get_peer_namespl_object_storage_attachzif_strspnzif_preg_matchPHP_CRC32BFinalzm_shutdown_regexshutdown_memory_managerzim_spl_Array_asortzif_pcntl_getpriorityzim_spl_RecursiveIteratorIterator_setMaxDepthzend_register_default_exceptionzm_deactivate_filterphp_date_global_timezone_db_enabledspl_append_it_nextzend_hash_graceful_destroyphp_strlcatzend_ini_scanner_get_filenamezim_spl_dual_it_rewindzim_spl_CachingIterator_getFlagszim_spl_LimitIterator___constructzend_get_error_exceptionspl_module_entryzif_ftp_nb_getzim_spl_Array_count_php_stream_opendirzend_llist_get_next_ex_php_stream_make_seekablebitwise_or_function_zend_ts_hash_quick_add_or_updatezend_user_it_new_iteratorzend_object_std_initspl_ce_RuntimeExceptionzif_disk_total_spacezend_ts_hash_merge_exzend_unblock_interruptionszm_info_php_gettextphp_init_configphp_srandzim_reflection_function_getDocCommentzif_ftp_fgetzif_base64_decodezif_gmp_comzif_stream_get_transportsphp_stream_php_wrapperzif_textdomainzend_register_double_constantphp_std_datesub_functiondate_funcs_timezonezim_reflection_parameter_isDefaultValueAvailablephp_stream_context_setzend_do_new_list_endzif_array_shiftadd_property_zval_exps_open_userzif_vprintfphp_filter_magic_quoteszm_startup_spl_arrayzim_reflection_function___constructzif_call_user_methodzif_minspl_ce_SplFileInfozend_unregister_ini_entrieszim_reflection_parameter___constructspl_ce_SeekableIteratorzif_array_keysphp_libxml_structured_error_handlerphp_libxml_disable_entity_loaderzend_error_noreturnzend_activate_modulesphp_hash_4haval256_opszend_qsortPHP_4HAVAL192Initzend_throw_error_exceptionzend_ini_color_displayer_cbzend_stack_topzend_object_proxy_getzif_curl_setoptzif_stream_bucket_appendzend_declare_property_longzif_phpcreditszval_update_constant_inline_changezim_spl_DirectoryIterator_currentzend_set_timeoutzend_call_destructorszif_stream_socket_get_name_safe_realloczm_startup_cryptzim_spl_ParentIterator___constructphp_info_print_table_headerzim_spl_SplFileInfo_getCTimephp_hash_4haval128_opsphp_stream_bz2io_opsrealpath_cache_cleanzend_declare_class_constantzend_register_default_classesphp_run_ticksphp_shutdown_temporary_directoryopenssl_functionsphp_escape_shell_argzm_activate_filestatphp_filter_number_intzim_reflection_function___toStringdata_writeablezend_html_putszim_reflection_class_getConstantzend_hash_existsphp_print_info_htmlheadzif_iconv_mime_decode_headerszim_spl_SplFileInfo_isReadableSdnToGregorianphp_openssl_pkey_init_dsazend_shutdown_strtodzend_create_bufferphp_uuencodezend_update_propertyzend_hash_quick_findzim_spl_EmptyIterator_validzif_fseekzim_spl_SplFileObject_fgetszend_hash_minmaxzim_spl_SplFileInfo___constructphp_stream_memory_ops_zend_ts_hash_index_update_or_next_insertzend_std_unset_static_propertyzend_do_unset_xml_notationDeclHandlerPHP_HAVAL256Finalzm_startup_pcntlzend_fetch_list_dtor_idzim_reflection_class_isAbstractzim_reflection_extension_infophp_if_ftruncatezend_extensionstimelib_ts_to_juliandateap_php_snprintfzim_spl_SplFileObject_ftruncatephp_url_scanner_adapt_single_urlphp_XML_SetUserDatareflection_extension_ptrzif_number_formatphp_raw_url_decodezend_stack_initphp_hash_gost_opszim_reflection_class_getModifierszim_spl_SplFileObject_fgetczval_property_ctorcalendar_module_entryzif_array_udiff_assocstring_locale_compare_functiontimelib_dump_tzinfodisplay_ini_entrieszif_openssl_error_stringadd_assoc_null_extimelib_update_from_ssezim_reflection_class_isIterateablezend_hash_set_pointerphp_sig_gifzif_stream_wrapper_registerzend_ini_add_stringphp_openssl_pkey_init_dhzim_reflection_class_getMethodszif_array_intersect_uassocphp_hash_3haval224_opsphp_stream_context_freezif_call_user_funczend_on_timeoutzif_curl_setopt_arrayzend_get_compiled_linenozim_spl_SplFileObject_fstatzif_wordwrapzif_array_popzif_fgetsszend_do_halt_compiler_registeradd_string_to_stringphp_network_parse_network_address_with_portzif_setcookiespl_ce_BadFunctionCallExceptionzif_import_request_variableszif_stream_get_filterszend_do_foreach_contphp_ini_register_extensionszif_iconv_strposzif_hash_initphp_strlcpylocaleconv_rzend_declare_property_doublezim_spl_RecursiveDirectoryIterator_getSubPathnamezm_shutdown_basiczim_spl_RecursiveIteratorIterator___constructzim_reflection_function_getNamezend_register_internal_classap_php_vslprintfzim_spl_AppendIterator_appendspl_ce_ParentIteratorzend_std_get_static_propertyphp_sig_tif_mmphp_gettext_functionszif_stream_set_write_bufferzm_startup_lcgzval_is_trueadd_get_index_string_php_stream_set_optionps_mod_userzif_ftp_rawphp_stream_rfc2397_wrapperphp_shutdown_stream_wrappersphp_stream_locate_url_wrappersapi_shutdowndate_functionsyytextzend_post_deactivate_modulesphp_hash_crc32b_opsPHP_GOSTInitzif_fsockopenzend_make_printable_zvalphp_filter_urlzif_is_long_IO_stdin_usedzif_curl_getinfophp_network_populate_name_from_sockaddrzend_shutdown_extensionszim_spl_EmptyIterator_currentphp_stream_url_wrap_ftpzend_hash_merge_exphp_escape_shell_cmdzim_spl_RecursiveIteratorIterator_endChildrenzif_php_unameis_not_identical_function_php_stream_eof_object_init_exzend_highlightzim_spl_RegexIterator_getFlagsPHP_3HAVAL256Initzif_filepermszif_filter_idpcre_get_compiled_regex_cachezif_xml_get_current_column_numberfree_estringzend_binary_zval_strncmpzend_init_compiler_data_structuresphp_check_safe_mode_include_dir_php_import_environment_variablesspl_ce_LengthExceptionzim_spl_RecursiveIteratorIterator_rewindphp_stream_display_wrapper_errorszif_highlight_filephp_regfreevar_replacezim_spl_SplFileInfo_getPathspl_object_storage_containszif_freadzend_stack_count_php_stream_temp_openphp_addcslasheszm_startup_url_scanner_exzend_user_unserializezend_objects_clone_obj_zval_internal_dtorzif_closedirphp_regerrorzend_hash_destroyspl_handler_SplObjectStoragephp_stream_bucket_prependzim_reflection_class_getPropertieszif_parse_strphp_tag_findtimelib_daynr_from_weeknrzend_print_flat_zval_rzend_do_first_catchzend_llist_get_prev_exzend_startup_strtodpass_twophp_stream_xport_acceptphp_session_register_serializerzif_pcntl_forkzif_html_entity_decodezif_asinhzim_reflection_class_exportzend_update_property_longphp_info_print_box_startzif_stream_filter_registerzim_spl_CachingIterator_offsetGetzif_ftp_nb_putvirtual_fopenzim_reflection_extension_getClasseszif_gmp_divexactPHP_WHIRLPOOLFinal_php_stream_truncate_set_sizezif_dngettextphp_shutdown_ticksspl_register_functionszif_openssl_pkey_exportzif_hash_update_streamzim_spl_LimitIterator_getPositionzend_do_extended_fcall_beginPHP_SHA384Initzif_array_sumphp_randphp_info_print_modulezif_hebrevcspl_ce_IteratorIteratortimelib_get_time_zone_infophp_sig_iffphp_info_print_cssps_mod_filesphp_zlib_module_entryzif_pcntl_wifexitedconsumed_filter_factoryzif_shmop_deletezim_exception_getTracezim_spl_Array_nextzim_spl_LimitIterator_seekzif_bindec_php_stream_get_linezend_make_compiled_string_descriptionzim_reflection_parameter_getDeclaringClasszend_auto_global_disable_jitphp_XML_GetCurrentLineNumberzm_startup_splzif_gmp_powzend_ts_hash_apply_with_argumentszif_array_slicephp_end_ob_bufferszend_binary_strcasecmpzend_exception_errorphp_info_print_box_endzif_array_combinevirtual_openzend_get_constant_exzif_openssl_x509_freereadline_module_entryzif_stream_get_contentszend_make_callablezim_spl_SplFileInfo_getPermszm_info_mhashzend_do_for_condzim_spl_SplFileObject_fgetcsvphp_stream_generic_socket_factoryzif_acoszend_ini_stringvirtual_creatphp_get_stream_filters_hash_globalphp_hash_3tiger192_opszif_array_unshiftzend_hash_comparePHP_4HAVAL160Inittokenizer_functionszend_ts_get_hash_valuezend_memory_usagezend_stack_del_topzend_do_early_bindingreflection_exception_ptrphp_if_md5zif_htmlentitieszif_filegroupzend_parse_ini_stringzm_info_assertzif_hash_hmac_fileget_next_op_numbersapi_register_treat_dataphp_hash_3tiger128_opszim_reflection_method_getDeclaringClasszm_info_tokenizerzim_reflection_method_invoke_php_stream_filter_flushzim_spl_RegexIterator_setModezend_declare_class_constant_nullphp_module_shutdown_wrapperphp_stream_xport_crypto_enablezif_basenamezim_spl_SplFileInfo_getTypezif_str_rot13shutdown_scannerzm_info_mailphp_info_print_hrzif_readline_write_historyzif_get_current_userzend_stack_basezim_spl_RecursiveCachingIterator_getChildrenzend_ts_hash_reverse_applyzif_unixtojdphp_hash_3haval160_opszif_gethostbyaddrphp_deactivate_tickszm_startup_exifphp_clear_stat_cachezend_restore_ini_entryzif_ftp_nb_fgetzif_str_splitzend_hash_sortfunction_add_refphp_stripslashesbitwise_and_functionzm_startup_xmlphp_stream_notification_freeiconv_functionszif_sscanfzif_curl_multi_getcontentzim_reflection_class___constructzim_reflection_class_isInstancezif_array_intersectzim_spl_Array_uksortsapi_get_fdphp_stream_get_recordzif_readline_list_historyzif_openssl_x509_exportzif_gmp_div_qrzend_hash_findzend_standard_class_defzif_ftp_set_optionzif_eregphp_ob_get_lengthzim_reflection_property_getDocCommentzif_openssl_pkey_get_detailsdata_availablezim_spl_Array_validinstanceof_function_exphp_stream_xport_sendtozend_ini_close_filephp_fopen_with_pathphp_sxe_get_iteratorzend_stream_open_functionzif_array_chunkphp_register_extensionszif_str_shufflezim_spl_NoRewindIterator___constructzend_llist_cleanzm_info_datezif_proc_closezend_llist_get_first_exftp_gcvirtual_opendirphp_XML_GetErrorCodezim_reflection_function_getNumberOfParameterszend_check_protectedzif_array_filterphp_register_variable_exmodule_registry_cleanupzend_print_zval_rzim_spl_SplFileObject_nextzend_get_configuration_directivezim_spl_SplFileInfo_getMTimezim_spl_SimpleXMLIterator_hasChildrenzend_print_zval_r_exzif_xml_parser_create_nsphp_XML_SetCharacterDataHandlerzm_activate_pcntlsxe_object_newzif_getmygidzim_spl_SplObjectStorage_serializephp_header_writezim_spl_RecursiveDirectoryIterator_getSubPathzend_ts_hash_quick_findphp_info_print_table_row_extimelib_timezone_id_from_abbrzend_fcall_info_args_restoremodule_registry_unload_tempftp_quitzend_do_declare_class_constantzif_preg_split_php_stream_freezim_spl_SplObjectStorage_unserializezim_spl_SplObjectStorage_attachzend_do_isset_or_isemptyzim_reflection_extension_getINIEntries_xml_characterDataHandlerzim_spl_SplFileObject_getChildrenzend_execute_ecallocvirtual_getcwdzend_ini_deactivatezif_natsortphp_stream_bucket_splitsecond_arg_force_refphp_hash_fetch_opszif_randphp_url_scanner_add_varadd_get_assoc_stringl_exzm_startup_arraydate_ce_timezonezif_strnatcasecmpzif_openssl_pkcs7_signzend_is_truedefault_exception_cezif_cal_from_jdzm_startup_datephp_hash_4tiger128_opsphp_stream_xport_shutdownphp_print_infozif_flockzif_readlinezim_reflection_class_getStaticPropertyValuezend_set_memory_limitphp_var_serializezim_exception_getTraceAsStringzif_restore_include_pathzend_objects_newtimelib_timezone_builtin_identifiers_listphp_ob_get_bufferzim_spl_RecursiveIteratorIterator_callHasChildrenzif_hash_finalzif_chgrpphp_XML_SetStartNamespaceDeclHandlerzend_do_verify_access_typeszend_mm_set_heapzif_symlinkzim_reflection_class_isInternalphp_call_shutdown_functionszend_compare_file_handleszend_do_qm_falsezim_simplexml_element_addChildzm_startup_filespl_ce_ArrayIteratoris_zend_mm_php_stream_open_wrapper_exzim_reflection_extension_getFunctionszm_shutdown_datezim_reflection_function_getStartLinephp_libxml_issue_errorzend_do_echozif_debug_zval_dumpadd_index_zval_xml_endNamespaceDeclHandlerzend_scan_stringzim_spl_SplFileInfo_setInfoClassPHP_RIPEMD256Update_zend_get_parameters_arrayOnUpdateRealphp_sig_jpgzim_spl_SplFileObject_validzim_spl_Array_setFlagszim_spl_CachingIterator_validdestroy_op_arrayzif_ftp_deletezim_spl_SimpleXMLIterator_currentzim_reflection_function_invokephp_stripcslasheszend_do_begin_silencemake_digest_exzend_update_property_stringphp_sig_swczend_get_scanned_file_offsetzend_llist_apply_with_delphp_XML_Parsezm_info_gmpzif_gmp_legendrezim_reflection_class_isUserDefinedzend_atolzend_ptr_stack_num_elementszif_get_browserphp_network_get_sock_namezif_array_udiffzm_deactivate_assertzif_openssl_public_decryptsapi_read_standard_form_datazif_rad2degphp_fgetcsvzend_ts_hash_del_key_or_indexphp_stream_xport_get_namephp_XML_ExpatVersionzif_strrchrphp_XML_SetExternalEntityRefHandlerzim_spl_SplFileInfo_isWritablephp_network_bind_socket_to_local_addrphp_getlastmodvirtual_cwd_startupzim_spl_Array_exchangeArrayzif_stream_get_meta_datazif_stream_set_timeoutzend_interface_iterator_funcs_iteratorspl_array_iterator_keyphp_open_temporary_fileclean_non_persistent_constantszif_stream_context_get_optionszim_simplexml_element_addAttributezif_gmp_modzend_mm_startupPHP_MD5Updatezif_linkzif_base_convert_zend_mm_freezendrestartzif_ob_get_contentsPHP_SHA256FinalPHP_RIPEMD128Updatezif_sha1zend_oct_strtodzim_error_exception_getSeverityzim_reflection_object_exportzif_renameini_scanner_globalszif_set_magic_quotes_runtimezend_update_static_property_stringphp_default_treat_dataps_srlzr_decode_phpzif_rtrimtimelib_fill_holesphp_stream_tidy_wrapper_error_logzim_spl_SplFileObject_currentzif_pcntl_wstopsigzif_array_intersect_keyzend_do_while_condzif_key_php_stream_passthruzend_save_lexical_statephp_if_crc32zif_dcngettextzim_spl_Array_uasortphp_filter_callbackadd_property_null_exzif_usleepphp_replace_controlchars_exzif_unserializezim_spl_LimitIterator_rewindzend_throw_exception_hookmulti_convert_to_string_exphp_curl_wrapperFrenchMonthNamezend_do_end_silencezif_preg_replacezif_escapeshellcmdphp_iconv_stringzim_spl_Array_getArrayCopyzif_ftp_nb_fput_php_stream_stat_pathzend_llist_del_elementzend_ts_hash_graceful_destroytimelib_isoweek_from_datetimelib_decimal_hour_to_hmsdir_globalszim_spl_RegexIterator_getModezend_init_rsrc_plistphp_printfPHP_MD4Finallanguage_scanner_globalsphp_basenamezif_error_logxml_utf8_decodezim_reflection_class_hasConstantzend_update_static_property_boolzif_trimphp_std_post_handlerzif_strtokzif_uasortzif_headers_sentzif_ftp_nlistzif_gmp_scan0spl_handler_ArrayObjectzif_ftp_rmdirzend_update_static_propertyzend_user_serializephp_libxml_ctx_warningle_index_ptrzif_xml_set_default_handlerspl_ce_SplSubjectzend_register_functionszif_htmlspecialchars_decodezim_spl_SplFileObject___constructadd_next_index_stringlzif_rsortphp_stream_notification_notifyps_gc_userOnUpdateEncodespl_array_get_iteratorphp_strip_tags_excfg_get_doublezend_do_declare_implicit_propertyzif_iconv_substrzif_shufflezif_ob_iconv_handlerphp_end_ob_buffer_xml_externalEntityRefHandlersapi_register_post_entrieszim_spl_CachingIterator___toStringzend_do_indirect_referencesps_read_userftp_listzif_dirnamezif_is_finitezif_is_executablemachine_little_endianPHP_5HAVAL128Initphp_startup_sapi_content_typeszend_do_declare_stmtPHP_CRC32Initzif_stream_socket_enable_cryptozif_convert_uuencodezif_stream_bucket_newzif_openssl_decryptzend_do_handle_exceptionstring_compare_functionphp_shutdown_stream_hasheszm_info_shmopzend_llist_sortzif_date_parsemake_digestsapi_startupzif_ob_get_statusphp_mkdirzend_do_foreach_beginzim_reflection_method_getPrototype_php_stream_writephp_stream_open_for_zend_exzim_spl_RecursiveIteratorIterator_beginChildrensession_adapt_urlzm_info_hashzif_gmp_cmpini__switch_to_bufferphp_image_type_to_mime_typezend_do_include_or_evalmodule_registry_request_startupzim_reflection_class_isSubclassOfzim_reflection_extension_getClassNameszif_assertzif_curl_multi_select_php_get_stream_filters_hashzend_ptr_stack_destroyap_php_conv_10PHP_MD2Updatezif_gmp_prob_primezend_do_unary_opzim_spl_RecursiveRegexIterator_getChildrenzend_register_constantzif_shmop_writephp_startup_auto_globalsvirtual_utimegmp_functionszim_spl_SplFileInfo_openFilezend_declare_property_nullps_srlzr_decode_php_binarymon_full_nameszif_gmp_strvalzif_openssl_pkcs7_encryptzend_register_string_constantzm_shutdown_pcntlzim_reflection_function_isDeprecatedzif_disk_free_spacezim_spl_SplFileInfo_isFilephp_create_incomplete_classzif_rewinddirzif_is_numericadd_char_to_stringzend_destroy_file_handlephp_sprintfzif_quoted_printable_decodezif_ob_get_lengthzim_reflection_function_getEndLinephp_print_creditssapi_register_post_entryzend_load_buffer_statephp_stream_url_wrap_httpphp_output_register_constantsphp_ini_opened_pathzif_idatedisplay_link_numberszif_readline_clear_historyphp_session_create_id_php_curl_multi_cleanup_listzif_ini_restorezif_gmdatezim_spl_RecursiveIteratorIterator_getSubIteratorvirtual_popentimelib_dump_datezif_openssl_private_encryptzif_substr_comparephp_error_docref2spl_register_sub_classzif_gmp_randomPHP_5HAVAL192Initphp_reg_replacezif_fflushdestroy_zend_functionerror_exception_cephp_default_output_funczend_std_get_constructorzim_reflection_parameter_getClasszend_spprintfzval_used_for_initzend_do_default_before_statementzif_iconv_get_encodingvirtual_getcwd_exzif_ftp_mkdirzif_ftp_pasvsapi_get_target_gidzif_openssl_x509_readzend_rsrc_list_get_rsrc_typezif_xml_set_notation_decl_handlerzif_splitzend_hash_reverse_applyzend_ts_hash_sortzif_stream_wrapper_unregisterzend_std_get_static_methodphp_filter_validate_ipzif_pfsockopenzval_update_constant_no_inline_changezim_spl_SplObjectStorage_nextzif_strnatcmpphp_XML_ParserCreatezim_spl_FilterIterator_rewindPHP_TIGERUpdatespl_destroy_classphp_if_iconvcore_globalszm_shutdown_arrayphp_register_info_logozend_ce_aggregatezif_register_tick_functionreflection_ptrzend_ce_arrayaccesszif_ob_startspl_ce_SplFileObjectvirtual_mkdirzif_getoptadd_assoc_bool_exzend_fatal_scanner_errorzif_systemzif_bind_textdomain_codesetexecutor_globalszend_mm_shutdownzend_eval_stringempty_fcall_info_cachezim_reflection_class_getParentClasszif_array_walk_recursivephp_mt_randphp_zlib_filter_factorysapi_register_input_filterzif_date_createzif_popenphp_XML_SetDefaultHandler_php_stream_sock_open_hostphp_var_dump_object_and_properties_initzim_spl_SplFileInfo_getSizezif_getprotobynumberzend_parse_ini_filezend_startup_module_exspl_register_propertybasic_functionszm_startup_regexzim_spl_RecursiveIteratorIterator_beginIterationphp_stream_context_set_linkclean_module_constantszif_chdirzend_declare_property_exzim_spl_SplFileObject_fpassthrutimelib_timezone_id_is_validzend_llist_applyzim_reflection_function_getExtensionNamezif_ftp_execzend_cleanup_function_datazend_get_extensionzend_throw_exception_objectzif_pcntl_wifstoppedphp_store_class_namezend_register_standard_ini_entrieszend_wrong_param_countspl_ce_SplObservercopy_zend_constantzif_openssl_pkcs12_readadd_next_index_resourcephp_gcvtzif_php_real_logo_guidzif_array_udiff_uassocPHP_MD2Finalzif_move_uploaded_filezend_eval_string_exini_lvalPHP_SHA1Finalzif_date_default_timezone_setOnUpdateLongGEZeroftp_nb_continue_readzim_spl_RegexIterator___constructzif_strtolowerphp_char_to_str_exzm_activate_dirdestroy_uploaded_files_hashzim_reflection_class_getStaticPropertieszend_get_parametersMonthNameLong_php_stream_fopen_from_pipezif_class_implementszend_unregister_functionsphp_flockphp_filter_unsafe_rawzend_objects_destroy_objectvirtual_filepath_exphp_var_exportzend_str_tolower_copy_zend_ts_hash_initadd_index_stringlzif_php_logo_guidsapi_flushzif_array_merge_recursivephp_sig_psdtimelib_timezone_abbreviations_listregister_string_constantszend_ce_iteratorxml_utf8_encodezif_timezend_do_while_endphp_checkuidzif_array_count_valuesphp_add_session_varphp_module_startupzif_ordzend_is_executingconcat_functionzif_simplexml_load_stringPHP_TIGER128Finalzend_fcall_info_callmon_short_nameszend_do_shell_execphp_any_addrzend_do_for_before_statementphp_signalzim_spl_FilterIterator_nextzif_strptimezim_reflection___clonezend_get_constantlibxml_module_entryzend_destroy_rsrc_list_dtorszend_objects_store_call_destructorszif_user_sprintf_php_stream_copy_to_memzif_tanzif_filter_has_varzif_touchzif_iptcparsephp_base64_decode_exzim_spl_SimpleXMLIterator_keyadd_property_string_exzif_stripslasheszif_stream_bucket_make_writeablezend_reflection_class_factoryzif_highlight_stringzif_usortadd_next_index_zvalzif_strcollzm_info_simplexmlphp_execzend_do_fetch_constantzim_reflection_parameter_getNamezend_init_rsrc_list_dtorsphp_stream_bucket_delrefzif_asinzim_reflection_object___constructzend_objects_store_add_ref_by_handletimelib_iso_day_of_weekzif_openssl_x509_export_to_file_xml_startElementHandlerphp_hash_snefru_opsPHP_WHIRLPOOLInitzm_info_xmlzif_hash_hmaczif_xml_parser_createphp_get_unamespl_filesystem_tree_it_funcszif_timezone_openzif_getlastmodzend_hash_move_backwards_exspl_ce_RecursiveArrayIteratorzend_objects_store_clone_objPHP_MD2Initget_timezone_infospl_handler_ArrayIteratorzend_binary_strcmpzif_date_date_setzm_startup_basicspl_ce_CachingIteratorzend_ptr_stack_n_popzend_load_extensionMonthNameShortvirtual_accesszif_expzif_array_diff_keyzif_feofzif_uksortzm_startup_spl_iteratorszim_spl_SplFileObject_setCsvControlzim_reflection_property___toStringzm_deactivate_readlinetimelib_time_ctortsrm_realpathtimelib_tzinfo_dtorzim_spl_RegexIterator_acceptsimplexml_export_nodezend_ts_hash_num_elementszim_exception_getCodephp_parse_datezim_reflection_method_isConstructorzif_jdtofrenchzif_file_existssapi_deactivatephp_register_internal_extensionsphp_hash_ripemd320_opszend_timeoutzend_register_standard_constantszif_urlencodezend_clean_module_rsrc_dtorszif_openssl_public_encryptphp_libxml_decrement_doc_refphp_network_connect_socketphp_libxml_error_handlerzif_intval_php_stream_printfphp_libxml_shutdownzend_strndupzend_ts_hash_index_findphp_stream_context_get_optionzif_is_arrayps_write_userzif_gettextphp_XML_SetNotationDeclHandlerphp_register_url_stream_wrapper_volatilebasic_globalsPHP_CRC32BUpdate_zval_dtor_funcvirtual_realpathzim_spl_SplFileInfo_getOwnerzm_startup_packzif_simplexml_import_domzend_dynamic_array_get_elementzif_localtimezim_spl_SplFileInfo_setFileClasszif_copyzif_getcwdzend_ts_hash_clean_php_stream_memory_createzif_ftp_sizezif_ftp_ssl_connectphp_plain_files_wrapperzif_gmp_scan1zif_ereg_replacefile_globalszim_spl_FilterIterator___constructzim_spl_SplFileObject_setFlagsspl_globalszif_time_sleep_untilzend_do_fetch_classspl_ce_LogicExceptionphp_network_accept_incomingsapi_get_default_content_typezim_spl_SplFileInfo_getBasenamezif_iconv_mime_encodezm_deactivate_streamszm_shutdown_syslogphp_end_implicit_flushadd_get_index_doublephp_file_le_stream_filterzm_deactivate_url_scanner_exsapi_unregister_post_entryzif_array_uintersect_assoczim_reflection_property_isPrivatephp_log_errzif_hexdecinstanceof_functionzend_do_do_while_beginphp_get_session_varzif_headerzif_unlinkphp_handle_special_queriesphp_ob_gzhandler_checkzif_mt_randzif_array_uniquezif_call_user_method_arrayzendoutzif_setrawcookiezif_curl_copy_handlezif_gethostbynamezend_ini_startupzif_scandirzend_init_bufferzif_ksortdo_bind_functionphp_libxml_initializezend_disable_functionzim_reflection_parameter_allowsNullzim_simplexml_element___constructzend_ts_hash_comparezif_openssl_csr_get_subjectzif_hebrevzend_do_fetch_global_variablephp_rfc1867_callbackPHP_RIPEMD320Finalzend_check_writable_variablephp_strcspnzif_xml_set_character_data_handlerzend_ts_hash_rehashzif_array_uintersect_uassoczif_mkdirget_binary_opconvert_to_arrayzlib_globalszif_tempnamzend_call_methodzif_spl_autoload_callzend_ini_get_constantzim_reflection_method_invokeArgszif_nl_langinfozim_spl_Array___constructzif_spl_autoload_extensions_php_stream_copy_to_stream_exvirtual_filepathzif_openssl_csr_newzif_decoctzend_do_extended_fcall_endzif_sinzif_atanzif_array_diffzend_llist_initzif_quotemetazif_chmodtimelib_set_timezonephp_addslashes_exzend_restore_lexical_statezif_abszif_krsortzend_compare_symbol_tables_ispl_funcs_RecursiveIteratorPHP_RIPEMD256Initzend_ticks_functionphp_hash_3haval256_opszend_do_boolean_or_beginzend_init_opcodes_handlerszif_connection_abortedzend_update_static_property_doublezend_std_object_get_class_namereflector_ptrzend_ptr_stack_applyphp_stream_gzopenzend_objects_store_add_ref_php_stream_scandirzif_user_filter_nopmulti_convert_to_long_exzend_indentsapi_apply_default_charsetzif_array_productzif_fprintfphp_stream_parse_fopen_modesphp_if_fopenspl_recursive_it_iterator_funcsPHP_HAVAL128Finalzif_is_resourcephp_sig_jp2zif_openssl_private_decryptzim_spl_SplFileInfo_isLinkJulianToSdnphp_start_ob_bufferzif_roundzif_stream_get_line_zend_hash_add_or_updatephp_filter_intphp_implodezend_funcs_traversable_php_stream_copy_to_streamzif_filectimezif_exif_read_datazend_objects_get_addressps_close_userphp_stream_get_url_stream_wrappers_hash_globalzim_reflection_method_isPublic_zend_hash_init_exzif_atan2shmop_module_entryphp_curl_stream_ops_php_stream_seekspl_filesystem_dir_it_funcszend_get_compiled_variable_valuecli_code_completionzend_do_assign_refzif_date_isodate_setzim_reflection_class_getDocCommentzim_reflection_function_isDisabledzim_spl_SplObjectStorage_keyzm_startup_browscapzim_reflection_class_getEndLinezif_array_valueszim_reflection_class_isFinalget_next_opphp_set_sock_blockingzif_syslogphp_std_auto_global_callbackzim_reflection_function_getNumberOfRequiredParameterszif_asortphp_libxml_xmlCheckUTF8zm_startup_standard_filterssapi_send_headerszim_reflection_class_getConstantszend_update_property_boolzif_metaphonephp_com_initializePHP_SHA256Initzif_array_diff_ukeyzend_do_end_function_callzend_stripphp_XML_SetUnparsedEntityDeclHandlertimelib_builtin_dbphp_version_comparezif_jddayofweekzend_ptr_stack_n_push_zend_list_findspl_ce_InvalidArgumentExceptionzif_fgetcsvsapi_get_target_uidzif_similar_textzend_fetch_classzif_sleepphp_stream_dirent_alphasortrzend_printfzif_ob_get_cleanzm_deactivate_pcntlzend_hash_num_elementsstrnatcmp_exzif_var_dumpzm_startup_nl_langinfozim_exception_getFilezend_initialize_class_datazif_gmp_xorzend_parse_parameters_excall_user_functionzif_curl_multi_execzif_is_stringzif_mhashzend_hash_copyzif_uniqidphp_pcre_split_implzim_spl_RecursiveFilterIterator___constructzim_simplexml_element_xpathzm_startup_curlzim_spl_SplFileInfo_getInodezif_strip_tags_php_stream_readzif_resetzend_do_add_variablezm_deactivate_user_filterszif_filter_varzend_auto_global_armzif_urldecode_php_stream_rmdirzif_is_nanzim_reflection_extension_getNameadd_next_index_boolphp_stream_bucket_unlinkmultisort_comparezend_print_zvalzif_xml_parser_freezif_openssl_encryptshift_right_functionzm_info_ftpzif_array_fillzif_iterator_to_arrayzend_ini_open_file_for_scanningphp_shutdown_info_logoszif_bindtextdomainspl_hash_verify_posphp_hash_md5_ops_efreePHP_SHA256Updatetimelib_timezone_db_data_builtinzim_spl_RecursiveIteratorIterator_validphp_filter_validate_urlphp_stream_xport_bindadd_assoc_resource_exphp_conv_fpsapi_get_statzif_ip2longregister_html_constantszend_iterator_unwrapzif_xml_set_processing_instruction_handlerspl_ce_RangeExceptionzif_getmyinodezim_reflection_extension___toStringzim_spl_Array_setIteratorClassphp_stream_ftp_wrapperzif_ftp_fputzif_stream_context_set_paramszim_reflection_property_setValuezend_ini_sort_entrieszend_ini_prepare_string_for_scanningzif_readlinkexpand_filepath_exzim_reflection_method_exportspl_filesystem_info_set_filenamefetch_string_offsetzim_spl_dual_it_getInnerIteratorzim_spl_SimpleXMLIterator_countzend_delete_global_variablephp_str_to_str_exphp_start_implicit_flushzend_do_pass_paramtimelib_error_container_dtorzend_funcs_iteratorsapi_handle_postphp_mergesortpcre_functionsap_php_conv_p2zif_is_scalarzif_stream_copy_to_streamzif_cal_days_in_monthzif_image_type_to_extensionzif_hashzif_timezone_name_from_abbrzm_info_miconvini__delete_bufferzif_stream_wrapper_restorezend_objects_store_mark_destructedzif_array_randzend_alter_ini_entryspl_ce_SplTempFileObjectspl_ce_SimpleXMLIteratortimelib_astro_rise_set_altitudephp_stream_context_del_linkzif_ignore_user_abort_php_math_longtobasezif_ini_setspl_array_it_funcszif_xml_parse_into_structphp_escape_html_entitieszend_hash_internal_pointer_end_exphp_stream_xport_listenphp_pcre_grep_implzif_rawurldecodezim_spl_SimpleXMLIterator_rewindphp_XML_ParserFreezim_reflection_function_isInternalzif_passthruzif_ftp_connectzend_declare_class_constant_stringzm_deactivate_datephp_getgidzif_chrootzif_stream_selecttimelib_time_offset_ctorzif_ceilphp_hash_4tiger192_opsadd_next_index_longzend_ts_hash_destroyzim_spl_dual_it_keyzend_delete_bufferphp_hash_crc32_opszif_mhash_get_block_sizezend_parse_method_parameterszif_ftp_pwdzif_output_reset_rewrite_varsphp_filter_float_php_stream_fopen_temporary_fileexecute_new_codePHP_3HAVAL224Initzend_do_add_list_elementphp_libxml_register_exportzend_user_it_get_current_datazif_hash_algoszend_get_std_object_handlerszif_strriposphp_hash_whirlpool_opszif_gmp_intvalzif_pcntl_wtermsigzif_register_shutdown_functionzif_array_fill_keyspcre_get_compiled_regexphp_libxml_increment_node_ptrPHP_3TIGERInit_zend_ts_hash_init_exphp_stream_bucket_newzif_str_replacephp_set_session_varzif_strcspnzif_getmypidzim_reflection_property_exporttimelib_unixtime2gmtzend_deactivatezim_spl_RecursiveCachingIterator_hasChildrenzim_spl_SplFileInfo_getFilenamephp_unescape_html_entitieszim_spl_SplFileObject_fgetsszend_destroy_rsrc_listzif_simplexml_load_filezim_simplexml_element_childrenzim_spl_RecursiveIteratorIterator_getInnerIteratorphp_shutdown_configzim_reflection_parameter_isOptionalspl_filesystem_tree_get_iteratorPHP_MD5Initzm_info_splzif_var_exportphp_ftp_module_entryphp_lookup_class_namezif_gmp_gcdextzim_spl_NoRewindIterator_nextmulti_convert_to_double_exphp_sig_swfzif_opendirzif_set_include_pathzif_proc_openzend_update_property_nullzend_do_fetch_class_namezim_simplexml_element_getDocNamespacesle_curlzend_is_auto_globalzif_array_change_key_casephp_bz2_filter_factoryspl_build_class_list_stringzif_strposadd_assoc_zval_exzend_stack_apply_with_argumentzif_filter_var_arrayzif_currentpcntl_module_entryzim_reflection_extension_getConstantsspl_ce_UnderflowExceptionphp_if_tmpfilezif_curl_errorzend_lookup_class_ex_php_stream_fopen_tmpfilezif_ftp_systypezif_sys_getloadavgreflection_ext_functionszend_stack_int_topphp_SSL_new_from_contextzend_compare_symbol_tableszend_extension_dispatch_message_php_stream_castzif_countzif_timezone_transitions_getcwd_globalszif_str_repeatnumeric_compare_functionzend_stream_ftellzif_array_mergesapi_force_http_10zend_throw_exception_exzif_fputcsvzif_array_intersect_ukey_php_curl_multi_closezend_register_iterator_wrapperzend_register_internal_interfacezm_shutdown_standard_filterszif_stream_bucket_prependadd_index_nullzend_dtoazif_openssl_csr_exportzend_stack_destroyphp_stream_output_opsadd_assoc_string_exzif_vfprintfzend_object_proxy_setOnUpdateBoolzend_string_to_doubleDayNameShortzif_natcasesortlex_scanzif_sinhtimelib_day_of_weekzif_display_disabled_functionzif_is_readablezif_gmp_sqrtJewishMonthHebNamephp_hash_sha1_opszif_openssl_pkcs7_decryptzend_do_binary_assign_optimelib_strtotimezim_spl_RecursiveDirectoryIterator_getChildrenzif_php_sapi_nameValidateFormatzif_ftellphp_quot_print_decodezif_ftp_cdupzif_juliantojd_php_curl_cleanup_handlezm_shutdown_curlzend_binary_zval_strcasecmpzend_funcs_arrayaccesszif_proc_terminatezif_gmp_jacobiini__create_bufferzim_spl_SplFileObject_fseekphp_info_logoszend_startup_extensionszif_gettimeofdayzif_filetypezif_iterator_countzim_spl_EmptyIterator_nextphp_check_open_basedirzend_str_tolowerPHP_ADLER32Initzif_readline_read_historyzif_stream_socket_pairdo_bind_inherited_classzend_ini_do_opzif_mt_getrandmaxzif_dns_get_recordzm_activate_syslogzend_do_begin_function_callzend_prepare_string_for_scanningday_full_nameszend_declare_propertyspl_ce_InfiniteIteratorphp_error_docref0zif_fileownerPHP_RIPEMD160Updatezend_get_module_startedzif_fscanfzend_register_list_destructors_exzif_curl_execzend_opcode_handlersphp_gettext_module_entryPHP_4TIGERInitzendinzim_reflection_class_isInstantiablezend_get_executed_linenopcre_module_entryspl_ce_SimpleXMLElementzend_do_ticks_zend_mm_realloc_zend_mm_block_sizezif_escapeshellargzif_dcgettextzend_parse_method_parameters_exzim_spl_InfiniteIterator___constructzend_std_read_dimensionzif_splitizif_vsprintfPHP_RIPEMD256Finalzim_spl_DirectoryIterator_valid_convert_to_string_php_stream_statzend_clear_exceptionzend_binary_strncasecmpzif_tanhzim_spl_SplObjectStorage_rewindzend_do_fetch_propertyphp_stream_wrapper_log_errorzif_array_intersect_assoczif_date_sunrisezif_lchgrpzim_exception___clonezim_spl_AppendIterator_nextzif_strtotimephp_stream_filter_append_exzif_chownphp_splice_php_stream_sock_open_from_socketzif_gmp_negzif_utf8_decodezif_openssl_csr_signzend_html_putcSdnToJewishzend_get_resource_handlezif_iconv_strrposphp_copy_filephp_XML_GetCurrentColumnNumberzif_xml_error_stringzif_prevphp_session_startzif_file_put_contentszend_hash_next_free_elementzif_ftokzif_sql_regcasezim_reflection_property_isProtectedphp_mkdir_exphp_rfc1867_register_constants_php_stream_xport_createphp_libxml_node_free_resourcephp_stream_filter_unregister_factoryzend_throw_exceptionzend_do_begin_dynamic_function_callphp_info_print_table_rowbitwise_not_functionphp_url_parse_exzend_do_new_list_beginvirtual_lstatphp_statzend_shutdownphp_ob_handler_usedzif_maxzif_is_callableget_next_brk_cont_elementzif_curl_errnophp_stream_stdio_opszif_curl_closezm_startup_miconvsapi_activatezif_http_build_queryboolean_xor_functionzif_preg_replace_callbackphp_hash_md2_opszif_sys_get_temp_dirspl_ce_AppendIteratorzim_spl_LimitIterator_nextzim_reflection_class_getFileNamephp_url_freephp_get_infzend_fcall_info_args_clearzend_auto_global_dtorphp_stream_bucket_appendzif_ftp_renamezend_fcall_info_initzend_update_property_doublezif_gmstrftimezend_binary_zval_strcmpphp_hash_3haval128_opszend_ini_longspl_ce_DomainExceptionphp_stream_url_wrap_http_exphp_filter_special_charsPHP_3HAVAL192Initphp_XML_SetCommentHandlerzif_ftp_putpcntl_globalsphp_output_set_statuscompiler_globalstimelib_time_tz_abbr_updatezm_startup_assertzend_register_list_destructorszif_openssl_pkcs7_verifyzim_spl_SplFileInfo_getRealPathzif_xml_parser_get_optionadd_get_index_longphp_hash_5haval256_opszend_llist_apply_with_argumentszif_sha1_filezif_packmodule_destructorzend_get_property_infozend_register_internal_class_exzend_hash_apply_with_argumentsphp_idatezend_register_stringl_constantzend_declare_class_constant_longzend_lookup_classphp_open_temporary_fdzend_execute_internalzend_objects_proxy_free_storagezend_disable_classsapi_get_request_timezif_str_word_counttimelib_get_current_offsetzim_reflection_class_implementsInterfacezim_spl_SplFileInfo_getFileInfozim_reflection_method_isProtectedphp_file_le_stream_php_stream_mmap_unmapadd_index_boolzim_spl_SplObjectStorage_detachzend_restore_compiled_filenamephp_date_global_timezone_dbexif_module_entryphp_stream_xport_crypto_setupzend_atoizend_class_add_refzif_filephp_url_encode_hash_exzend_register_extensionzif_ftp_rawlistpcre_globalsphp_addslashesphp_hash_4tiger160_opsphp_hash_md4_opsphp_explode_negative_limitphp_le_stream_contextsapi_get_default_content_type_headerzif_pcntl_wait_php_stream_bz2openzend_do_if_condsimplexml_functionsPHP_GOSTUpdatevirtual_stat_estrdupzend_do_begin_class_declarationzif_getservbyportzend_getenvzif_date_sunsetspl_filesystem_dir_get_iteratorzim_reflection_parameter_getDeclaringFunctionzend_object_store_ctor_failedphp_sxe_move_forward_iteratorzend_check_property_accesstimelib_tzinfo_clonezif_spl_autoload_registerPHP_3HAVAL128Initzif_openssl_pkey_get_privatezif_array_mapzm_startup_calendarzif_gmp_sqrtremPHP_MD5FinalPHP_3HAVAL160Initvirtual_chdir_filePHP_CRC32Updatezif_stream_context_get_defaultzim_spl_CachingIterator_offsetSetzif_filemtimezend_do_freespl_ce_LimitIteratorzim_DateTimeZone___constructzif_microtimezim_simplexml_element_registerXPathNamespacezif_gmp_orzend_parse_parametersphp_html_putszif_eregizend_llist_remove_tailsapi_modulePHP_SHA384Updatereflection_object_ptrzim_spl_DirectoryIterator_getBasenametimelib_get_tz_abbr_ptrzend_do_tryzif_compactzim_spl_SplFileInfo_getATimeini__scan_bytesphp_stream_filter_register_factoryzim_reflection_property_getName_php_error_log_ex_php_stream_fopen_from_fdphp_debug_zval_dumpzif_array_reducezif_rewindvirtual_chdirzend_do_instanceofphp_setcookiezif_gregoriantojdtimelib_update_tszif_shmop_openzif_date_modifyOnUpdateLongphp_stream_bucket_make_writeablezif_ob_get_flushzim_simplexml_element_getNamespaceszim_spl_DirectoryIterator___constructzif_readline_add_historyis_smaller_functionphp_lint_scriptzif_filter_listzend_get_type_by_constzim_reflection_class_isInterfacezend_binary_zval_strncasecmpzim_spl_SplFileObject_fflushPHP_ADLER32FinalPHP_SNEFRUUpdatespl_ce_RecursiveIteratorIteratorzend_fetch_debug_backtracezend_hash_set_apply_protectionzif_arsortzend_print_zval_exzm_startup_filterzm_startup_shmopzend_get_class_entryini__load_buffer_statezend_register_resourcezend_call_functionzif_xml_set_start_namespace_decl_handlerzif_convert_uudecodezend_hash_internal_pointer_reset_exzim_spl_Array_natcasesortps_srlzr_encode_phpzif_putenvzm_startup_user_filterszif_define_syslog_variableszif_filesizePHP_SHA512Initzim_spl_RecursiveIteratorIterator_callGetChildrenzend_set_compiled_filenameini__scan_bufferzif_floatvalzif_ini_getzif_strrevOnUpdateStringUnemptyphp_combined_lcgzif_cosphp_filter_stringzim_spl_Array_getIteratorzend_do_fetch_static_memberzim_reflection_function_getFileNamezif_stream_socket_serverphp_stream_rfc2397_wopsPHP_SHA1Updatephp_info_print_stylephp_info_print_table_endsimplexml_module_entryphp_sxe_iterator_funcsphp_explodephp_stream_unixdg_socket_opszm_startup_spl_exceptionsphp_ini_scanned_pathzim_spl_RecursiveIteratorIterator_nextzend_do_begin_method_callzim_exception___toStringzif_spl_autoload_unregisterzif_getprotobynameSdnToJulianspl_ce_NoRewindIteratorzim_reflection_function_getParameterszim_spl_RecursiveIteratorIterator_endIterationtimelib_day_of_yeardate_ce_datezim_reflection_class___toStringtimelib_time_dtorcurl_module_entryzm_startup_dnszend_startup_constantszif_stream_filter_prependzif_setlocalezif_array_walkzim_spl_RecursiveCachingIterator___constructzif_readline_callback_handler_remove_php_stream_fopenzim_spl_AppendIterator_getIteratorIndexzend_startup_builtin_functionszif_xml_set_element_handlerzif_atanhzim_simplexml_element_attributesadd_index_longzif_levenshteinzif_srandzend_set_user_opcode_handlerzif_readline_completion_functionPHP_MD4Updatezif_datephp_execute_simple_scriptzim_spl_SimpleXMLIterator_nextps_delete_userzim_reflection_property_getValuezend_do_begin_qm_opzif_token_get_allzif_jewishtojdphp_if_lstat_php_stream_fopen_from_fileadd_next_index_nullzif_iconv_set_encodingzim_spl_SimpleXMLIterator_validzif_memory_get_peak_usagephp_if_fstatphp_stream_xport_get_hashzif_xml_get_current_byte_index_php_stream_filter_prependzif_gmp_subdo_bind_classzend_do_assignzim_spl_RecursiveFilterIterator_getChildrenPHP_RIPEMD160Initzif_mt_srandadd_property_long_exzif_eregi_replacephp_execute_scriptsapi_add_header_exzif_hash_update_file__data_startphp_hash_5haval128_opszend_hex_strtodzif_shmop_readzim_spl_CachingIterator_hasNextzim_spl_RegexIterator_getPregFlagsspl_iterator_applyzm_startup_mhashzend_funcs_serializablezend_dynamic_array_pushphp_register_variable_safeconvert_to_nullzif_ob_implicit_flushzend_do_binary_opzend_ptr_stack_initzif_long2ipftp_openspl_ce_BadMethodCallExceptionzif_str_padzim_reflection_function_returnsReferencephp_strftimephp_file_le_pstreamzim_reflection_class_setStaticPropertyValuezend_hash_funcphp_handle_auth_datazim_spl_RecursiveRegexIterator___constructzend_do_castzif_ftp_mdtmphp_pcre_replace_implzif_php_ini_scanned_filesreflection_property_ptrphp_info_html_esc_writezif_timezone_identifiers_listzim_spl_SplFileInfo_getGroupphp_if_statzm_info_pcntlzend_ini_doublePHP_RIPEMD128Initphp_add_tick_functionzif_is_infinitezif_openssl_pkey_export_to_filezend_shutdown_constantszend_append_version_infotimelib_time_offset_dtorphp_error_docref1timelib_tzinfo_ctorzend_deactivate_moduleszend_fcall_info_argszend_read_static_propertyzim_reflection_getModifierNamesphp_stristrspl_ce_OuterIteratorphp_openssl_socket_opszif_stristrphp_hash_4haval224_opsphp_libxml_node_decrement_resourcezif_date_default_timezone_getzend_ts_hash_existsspl_ce_Countablezif_log10php_stream_context_get_linkphp_format_datezim_reflection_class_getMethodzend_register_interfacesvar_push_dtorzend_ts_hash_apply_with_argumentzim_spl_dual_it_valid_codesadd_assoc_long_exzif_readline_redisplayadd_assoc_stringl_exget_unary_opzm_shutdown_exifzend_objects_free_object_storage_zend_mm_alloczif_gmp_setbitzif_date_time_setzend_do_implements_interfacezend_do_declare_endzif_endzif_time_nanosleepPHP_HAVALUpdatezif_sortzif_token_namezim_spl_Array_getIteratorClasszend_execute_scriptsfourth_arg_force_refzim_spl_LimitIterator_validzend_declare_property_stringlzm_startup_ftptimelib_unixtime2localzif_timezone_abbreviations_listzif_shmop_closephp_url_scanner_reset_varszim_spl_RecursiveFilterIterator_hasChildrenzend_do_throwzif_getmyuid_xml_zval_strdupzim_spl_SplFileInfo_getPathInfoadd_next_index_stringzif_error_get_lastzend_do_boolean_and_beginzend_get_user_opcode_handlerzif_pcntl_wifsignaledzend_ini_boolean_displayer_cbzend_do_if_after_statementphp_openssl_get_x509_list_idzif_htmlspecialcharszif_stream_socket_shutdownzif_ob_flushzm_startup_user_streamszend_do_begin_catchzend_copy_constantszim_reflection_property_isStaticfilter_globalsphp_libxml_import_nodezif_stripcslashesphp_session_register_modulezend_objects_store_destroyini_restartzendparsezim_DateTime___constructzend_stream_fixupcli_is_valid_codepcre_get_compiled_regex_exzif_mailzend_llist_apply_with_argumentzend_update_static_property_stringlzend_mm_startup_ex_php_math_basetolongzend_compare_objectszif_phpinfoPHP_SHA512Finalzim_spl_AppendIterator_rewindzim_spl_SimpleXMLIterator_getChildrenphp_hash_environmentphp_if_md5_filePHP_4HAVAL128Initstart_memory_managersession_module_entryzif_ini_get_allzend_objects_store_get_refcountzim_exception_getMessagezif_parse_urlzif_exif_tagnamephp_stream_udp_socket_opsini__scan_stringzend_do_implement_interfacezend_do_switch_endphp_stream_socket_ops_php_math_number_formatzim_reflection_class_getExtensionzend_ce_serializablezif_ob_end_cleanzend_function_dtorzif_assert_optionsconvert_scalar_to_numberzim_reflection_extension_exportps_globalszif_umaskphp_next_meta_tokenis_identical_functionzif_gmp_hamdistzim_spl_CachingIterator_rewindzif_dechexphp_request_startupphp_get_output_start_filenamezend_hash_move_forward_exzif_date_offset_getzend_scan_bufferzend_hash_apply_with_argumentzend_flush_bufferbitwise_xor_functionphp_header_php_stream_alloczif_bin2hexspl_ce_ArrayObjectzif_openssl_get_md_methodsphp_pcre_replacezim_reflection_exportftp_reinitzm_info_basiczif_ob_get_levelzif_gmp_nextprimephp_base64_encodephp_register_url_stream_wrapperzend_object_store_get_object_by_handlephp_setup_sapi_content_typesadd_index_stringprint_classphp_strspnzif_execzend_declare_property_stringphp_register_signal_constantszif_cal_to_jdzend_user_it_get_new_iteratorzim_reflection_property_isDefaultzend_stream_ferrorphp_fopen_primary_scriptadd_functionphp_getoptzif_mhash_get_hash_name_zend_hash_quick_add_or_updatezif_array_reversezim_reflection_function_exportzif_array_splicevirtual_unlinkzif_ftp_alloczm_shutdown_assertphp_sscanf_internalzm_startup_spl_observerphp_sig_jpczm_info_opensslzif_gmp_div_qzend_do_printdestroy_zend_classzend_get_class_fetch_typephp_XML_SetProcessingInstructionHandlerphp_stream_xport_connectzif_globinit_ini_scannerzenderrorzim_reflection_method___constructphp_array_mergezm_startup_imagetypesphp_hash_sha256_opszif_stream_filter_appendphp_stream_context_set_option_php_stream_putsxml_encodingszif_openssl_get_cipher_methodsphp_char_to_strzim_exception_getLinephp_verrorphp_hash_sha384_opsphp_stream_input_opsphp_stream_url_wrap_phpphp_init_info_logosspl_ce_FilterIteratorzim_reflection_class_getInterfacesassert_globalsdebug_print_backtrace_argsphp_request_shutdownzif_curl_multi_info_readzif_stream_get_wrappers_object_inittokenizer_module_entryadd_next_index_double_php_stream_temp_createzend_do_if_endzim_spl_SplFileObject_getCsvControlzim_reflection_parameter_getPositionphp_stream_filter_createzif_frenchtojdzif_dgettextzif_xml_parsezif_ezmlm_hashzend_hash_add_empty_elementinit_opzend_file_handle_dtorzif_stream_filter_remove_php_stream_memory_openiconv_globalszend_startup_extensions_mechanismzif_openssl_pkey_freezim_spl_dual_it_nextvar_destroyzif_substr_replacezif_pcntl_setpriorityzif_mktimezend_startupphp_mktimezim_reflection_parameter___toStringphp_startup_tickszif_curl_multi_closezend_switch_to_bufferphp_request_startup_for_hookzm_shutdown_opensslzend_ini_register_displayerzif_parse_ini_fileday_short_nameszif_gmp_gcdzif_rawurlencodeGregorianToSdnzend_do_end_new_object_zend_list_addrefzif_pcntl_execzif_log1pzim_reflection_parameter_isPassedByReferencezim_reflection_method_isFinal_zval_ptr_dtorzim_spl_Array_offsetGetzif_expm1zif_str_ireplacezm_startup_tokenizerphp_stream_locate_eolzend_check_magic_method_implementationini_out__libc_csu_initzim_spl_SplFileObject_flockphp_openssl_ssl_socket_factoryzend_do_begin_variable_parsevirtual_chmodftp_nb_continue_writephp_ub_body_writezim_spl_SplFileObject_setMaxLineLenphp_libxml_decrement_node_ptrzend_llist_add_elementreflection_method_ptrzif_powzend_stream_getctimelib_apply_localtimeiconv_module_entryphp_strtolowerzim_simplexml_element_getNameshmop_functions_php_stream_putczend_locale_sprintf_doublezm_activate_basic_estrndupphp_output_startupzend_hash_update_current_key_exphp_stream_temp_opszim_spl_IteratorIterator___constructzim_spl_DirectoryIterator_nextzend_objects_store_free_object_storagezend_register_ini_entrieszend_cleanup_function_data_fullzif_stream_socket_recvfrom_zend_mem_block_sizezend_do_add_array_elementzim_spl_DirectoryIterator_isDotzend_get_compiled_variable_nameps_read_fileszm_shutdown_filter_zend_hash_init_zend_hash_mergezim_reflection_class_getExtensionNamespl_ce_OutOfBoundsExceptionzend_do_fcallzm_shutdown_hashphp_date_set_tzdbphp_pcre_match_implzim_spl_Array_natsortphp_filter_booleanzend_llist_countget_zend_versionmhash_module_entryzend_is_compilingzif_iconv_strlenzend_read_propertyphp_hash_sha512_ops_php_stream_get_url_stream_wrappers_hashini_lexphp_date_full_day_nameadd_assoc_double_exphp_hash_ripemd128_opszim_spl_CachingIterator_nextcall_user_function_exphp_unregister_url_stream_wrapperspl_array_object_count_elementsPHP_WHIRLPOOLUpdatezif_hash_updatezif_image_type_to_mime_type_php_stream_mkdirphp_strtrzif_is_floatadd_get_index_stringlphp_var_export_exphp_libxml_switch_contextzim_reflection_method_isStaticphp_stream_unix_socket_opszm_info_reflectionzif_ftp_chmodzend_do_case_after_statementzim_spl_SplObjectStorage_containsconvert_to_long_basezend_extension_dtorzif_date_timezone_set_php_stream_memory_get_bufferarray_globalszif_ftp_loginphp_stream_gzip_wrapperzif_iptcembedzim_reflection_function_invokeArgszif_jdtogregorianfetch_simple_variablezim_spl_SplFileObject_getFlagsPHP_HAVAL160Finalzim_spl_dual_it_currentzm_info_curlphp_openssl_pkey_init_and_assign_rsazif_openssl_x509_parsectype_module_entryzif_array_searchzim_spl_Array_seekzim_spl_Array_ksortzend_copy_parameters_arrayzif_is_objectspl_ce_SplObjectStoragezend_hash_get_current_data_exzif_gethostbynamelshmop_globalszif_getservbynamezif_ftp_get_optionzif_version_comparezend_ce_traversablezif_readline_on_new_linephp_strip_url_passwdzif_gmp_andvirtual_chownzif_phpversionPHP_RIPEMD320Updatespl_ce_RecursiveRegexIteratorphp_sockaddr_sizezim_reflection_parameter_exportzend_do_add_static_array_elementzif_is_linkzif_fpassthruzend_do_begin_new_objectzend_objects_store_del_ref_by_handlebasic_functions_modulespl_ce_OutOfRangeExceptionzend_llist_prepend_elementzif_pizend_verify_abstract_classPHP_RIPEMD128Finalfilter_functionszif_readfilezif_openssl_x509_check_private_keydiv_functionphp_regcompphp_info_print_table_colspan_headerphp_filter_validate_emailzend_writezend_fcall_info_args_savezif_strvalzend_llist_destroyzend_objects_clone_membersap_php_vsnprintfzend_register_module_exzim_spl_RecursiveDirectoryIterator_rewindzend_errorzif_php_ini_loaded_filezim_spl_SplFileObject_seekzend_ts_hash_mergemake_sha1_digestzif_openssl_dh_compute_keyzim_spl_DirectoryIterator_getFilenamezend_do_pop_objectphp_dirnamephp_hash_ripemd160_ops_php_stream_readdirzval_add_refzim_spl_SplFileObject_fscanfzif_call_user_func_arrayphp_str_to_strzif_dns_get_mxthird_arg_force_refzif_shmop_sizezend_memory_peak_usagezim_spl_SplFileInfo_getPathnamephp_getimagetypezendi_smart_strcmpzif_gettypezend_strtodzif_date_timezone_getzend_get_hash_valuephp_hash_hashtablezim_spl_RecursiveIteratorIterator_keyzend_init_rsrc_liststartup_scannerzend_update_class_constantsfilter_module_entryphp_stream_filter_removephp_XML_GetCurrentByteCountzim_spl_NoRewindIterator_validps_srlzr_encode_php_binaryzend_do_returnzif_ucfirstzend_do_end_catchzim_spl_RecursiveDirectoryIterator_keyzim_reflection_property___constructphp_strtoupperzend_do_end_function_declarationzm_info_calendarzif_easter_daysbz2_module_entryreg_globalsspl_register_std_classzif_getdirzif_iconv_mime_decodezend_hash_get_current_key_excalendar_functionszm_deactivate_basiczim_spl_SplFileObject_getMaxLineLenPHP_TIGER160Finalzif_gmp_popcountzif_get_magic_quotes_gpczim_reflection_function_getExtensionzm_startup_spl_directoryphp_XML_ParserCreate_MM_zend_bailoutzif_get_html_translation_tabletimelib_date_to_intzif_lchownphp_default_post_readerzif_get_headerszend_get_parameters_exphp_get_output_start_linenozim_spl_Array_currentzval_update_constant_exzif_dns_check_recordzim_spl_InfiniteIterator_nextzend_block_interruptionszend_objects_store_del_refzif_headers_listzif_gmp_clrbitzif_preg_last_errorphp_body_writezif_striposPHP_RIPEMD320Initdate_funcs_datezif_xml_set_end_namespace_decl_handlerzm_startup_simplexmlphp_url_decodesapi_header_opphp_init_stream_wrappersget_active_class_namephp_free_shutdown_functionsspl_ce_DirectoryIteratorzif_set_time_limitzim_spl_RecursiveDirectoryIterator___constructphp_uudecodezim_reflection_class_getInterfaceNameszif_fclosezend_user_it_rewindzend_do_init_stringzif_hypotzend_freedtoazend_do_for_endadd_property_stringl_exzif_preg_match_allzend_do_brk_contzif_filter_input_arrayzim_spl_SplFileInfo_getLinkTargetzif_explodespl_instantiatephp_date_short_day_nameps_delete_fileszif_ftp_getzif_fnmatchzif_ob_list_handlersspl_array_iterator_appendzif_jdtojulianOnUpdateStringzim_spl_RecursiveDirectoryIterator_nextzend_stack_applyzif_chrzend_message_dispatcherzif_gmp_div_rphp_trimzif_is_uploaded_filereflection_class_ptrap_php_slprintfzm_startup_spl_sxezend_do_list_initzm_activate_splps_close_fileszim_spl_CachingIterator___constructzif_zend_logo_guidzend_ts_hash_copy_zval_copy_ctor_funczim_spl_SplTempFileObject___constructspl_functions_nonezm_info_dlzend_objects_store_initzm_startup_readlinezif_xml_set_unparsed_entity_decl_handlerpcntl_functionszim_spl_NoRewindIterator_keyzend_do_exitini_parsezif_pcntl_waitpidphp_get_current_user_php_find_ps_modulephp_XML_ErrorStringvirtual_cwd_shutdown_safe_emallocphp_strip_tagsDayOfWeekphp_hash_adler32_opszim_spl_CachingIterator_offsetUnsetzif_filter_inputzif_utf8_encodezend_object_store_set_objectadd_property_resource_exzend_llist_get_last_exzif_readline_callback_read_charzend_error_cbzend_ini_shutdownzend_do_inherit_interfaceszend_do_inheritancespl_ce_EmptyIteratorphp_ftp_functionsrealpath_cache_delzend_user_it_move_forwardzif_jdmonthnamezm_shutdown_simplexmlzim_spl_Array_getChildrenzim_reflection_method___toStringzim_spl_Array_appendPHP_5HAVAL160Initzend_update_static_property_nullzif_class_parentszif_openssl_digestPHP_SHA1Initspl_append_it_fetchzend_llist_copyzend_funcs_aggregatezend_unset_timeoutzend_declare_class_constant_boolzend_fopenzif_in_arrayPHP_GOSTFinalsxe_class_entry_php_stream_getcexif_functionsis_not_equal_functionzend_do_add_stringzim_spl_RecursiveIteratorIterator_nextElementzend_do_abstract_methodphp_url_parseadd_index_doublephp_regexeczif_hash_fileini__flush_bufferphp_handle_aborted_connectionzim_spl_Array_keytimelib_parse_tzfilezim_reflection_extension___constructzend_output_debug_stringzend_object_std_dtorzif_array_uintersectzend_do_case_before_statementzif_spl_classeszend_update_property_stringlzif_array_pushzif_ftp_closezif_strrposzif_curl_initzend_user_it_invalidate_currentzim_spl_SplFileObject_rewindzim_reflection_parameter_isArrayzif_exif_thumbnailzif_date_formatzend_register_long_constantzim_spl_NoRewindIterator_currentzif_strftimezim_reflection_property_getDeclaringClassadd_property_bool_exzif_count_chars_php_stream_flushJewishToSdnplist_entry_destructor__libc_csu_finizif_is_nullzend_do_post_incdeczim_spl_RegexIterator_setPregFlagsphp_set_error_handlingzend_mangle_property_namespl_add_class_namezend_user_it_get_current_keyzif_stream_socket_acceptzif_gmp_mulzend_check_privateshutdown_destructors_php_math_zvaltobasezend_ini_init_stringzend_exception_get_defaultzend_hash_index_findzend_dynamic_array_popphp_on_timeoutphp_var_unserializePHP_ADLER32Updatephp_escape_html_entities_exzend_is_callable_exzend_user_it_validzend_do_fetch_static_variablezif_spl_autoloadzif_decbinzif_stream_context_createspl_append_it_next_iteratorzif_preg_grepphp_XML_SetElementHandler_xml_processingInstructionHandlerzif_xml_set_objectps_gc_fileszif_shell_execphp_dlzend_cleanup_class_dataphp_replace_controlcharszim_spl_CachingIterator_countphp_sig_tif_iizim_spl_CachingIterator_offsetExistsphp_network_connect_socket_to_hostPHP_4HAVAL224Initphp_stream_filter_register_factory_volatilephp_hash_5haval224_opszend_do_clonezif_array_padzend_compile_filephp_ob_set_internal_handlerzif_rangezif_extractzif_xml_parser_set_optionzif_openssl_pkcs12_export_to_filephp_mailzif_constantzend_set_hash_symbolphp_stream_rfc2397_opszend_do_end_class_declarationzend_class_implementszif_fileatimezend_get_executed_filenamezif_openssl_openzif_gmp_initzim_spl_SplFileObject_ftellphp_mt_srandzim_spl_SplFileObject_fwrite_zend_get_parameters_array_exzif_pclosezim_spl_SplObjectStorage_currentzif_coshphp_filter_encodedzim_reflection_parameter_getDefaultValuezif_pcntl_wexitstatuscfg_get_entryspl_ce_RecursiveFilterIteratorzif_array_diff_assoczend_get_module_versionzif_file_get_contentstimelib_timestamp_is_in_dstzif_jdtounixSdnToFrenchzim_reflection_class_getPropertyzif_curl_multi_add_handlezim_reflection_extension_getDependencieszim_spl_CachingIterator_setFlagscfg_get_stringzif_strtoupperzif_get_cfg_varzim_spl_RecursiveIteratorIterator_getMaxDepthzif_linkinfozend_unmangle_property_name_zval_internal_ptr_dtorzend_reset_all_cvinit_executorzend_declare_class_constant_doublephp_hash_4haval160_opszim_spl_Array_offsetExistszm_startup_gmpreflection_module_entryzif_date_sun_infozif_gmp_factzif_closelog_php_stream_bz2open_from_BZFILEphp_hash_3haval192_opszif_openssl_csr_get_public_keyzend_hash_rehashphp_XML_SetEndNamespaceDeclHandlerzim_spl_SplFileInfo_isExecutabletokenizer_register_constantszend_do_switch_condzend_do_list_endzend_do_push_object_php_emit_fd_setsize_warningzif_easter_datezif_openlogzif_gmp_powmzif_fmodPHP_HAVAL224Finalphp_output_activatezim_reflection_class_getConstructorzif_pcntl_alarmzif_nl2brphp_request_shutdown_for_exec_safe_malloczif_gmp_addphp_curl_stream_openerregister_phpinfo_constantszend_get_compiled_filenamezim_spl_AppendIterator_validzif_stream_is_localzend_compare_arrayszif_user_printfzif_checkdatezim_spl_RecursiveDirectoryIterator_currentzif_fileinodezif_strstrexif_globalsuserfilter_filterboolean_not_functionadd_property_double_exzm_shutdown_browscapzend_ts_hash_add_empty_elementzif_curl_versionzif_localeconvzif_fgetcphp_if_readdirtsrm_strtok_rPHP_RIPEMD160Finalzif_lcg_valuezm_info_filterzend_do_declare_propertyzif_stream_socket_clientPHP_HAVAL192Finalzend_do_init_arrayphp_hash_5haval192_opsphp_statpagephp_hash_4haval192_opsphp_tiff_bytes_per_formatzif_array_multisortzif_pathinfozif_ftp_chdirzim_reflection_extension_getVersionrfc1867_post_handlerreflection_parameter_ptrPHP_SHA512Updatezend_std_object_get_classshift_left_functionzim_spl_Array_rewindfirst_arg_force_refphp_libxml_increment_doc_ref_xml_unparsedEntityDeclHandlerzend_hash_applyvirtual_rmdirzend_vm_set_opcode_handler_xml_endElementHandlerzim_spl_AppendIterator___constructzend_declare_class_constant_stringlfetch_simple_variable_exzif_nextzif_print_r_php_stream_filter_allocspl_add_classeszim_spl_CachingIterator_getCacheconvert_to_longphp_default_input_filter_php_stream_tellzif_array_key_existszend_hash_cleanzif_is_boolini_inzif_gmp_sign_xml_startNamespaceDeclHandlerzend_binary_strncmpconvert_to_booleanzend_get_zval_ptr_ptrzend_startup_modulesreflection_function_abstract_ptrzif_gmp_abszim_spl_SplObjectStorage_countphp_request_shutdown_for_hookzif_readline_callback_handler_installzend_initialize_try_catch_elementzif_octdeczif_xml_set_external_entity_ref_handlerzim_reflection_class_newInstancezif_exif_imagetypeJewishMonthNametimezonedb_idx_builtinini__init_bufferzim_reflection_property_isPublicphp_stream_xport_unregisterzim_spl_NoRewindIterator_rewindget_token_type_namezend_ts_hash_applyzif_openssl_pkey_newzend_mm_get_storagezif_ngettextzend_vspprintfzim_reflection_property_getModifiersshutdown_executorphp_get_nanzif_memory_get_usagetimelib_days_in_monthfree_zend_constantzend_hash_get_pointerphp_module_shutdown_for_execmod_function_php_stream_fopen_with_pathphp_unregister_info_logozif_soundexphp_get_temporary_directoryPHP_CRC32Finalopenssl_module_entryinit_op_arrayphp_raw_url_encode_zend_hash_index_update_or_next_insertzif_fwritezim_spl_RecursiveIteratorIterator_currentzend_object_create_proxyphp_stream_from_persistent_idzif_openssl_csr_export_to_filezif_array_flipzif_array_diff_uassoczif_xml_get_error_codezend_zval_type_nameincrement_functionzif_spl_autoload_functionszim_spl_Array_offsetSetmain_cwd_statezend_do_extended_infozif_fgetsspl_ce_RecursiveCachingIteratorsapi_initialize_empty_requestphp_stream_userspace_dir_opsDayNameLongPHP_SNEFRUInitPHP_5HAVAL224Initzif_ftp_sitezend_ts_hash_minmaxzim_reflection_function_getStaticVariableszim_reflection_class_hasPropertyzend_do_qm_truedate_globalsphp_libxml_ctx_errorzm_startup_hashphp_ob_init_conflictspl_functionszend_std_call_user_callzm_startup_syslogis_smaller_or_equal_functionzif_acoshphp_ub_body_write_no_headerzim_reflection_method_getModifierszm_info_regexvirtual_renamephp_check_open_basedir_exzend_std_read_propertydate_module_entryphp_remove_tick_functionzif_ucwordsphp_stream_userspace_opszm_activate_datezif_clearstatcachephp_inet_ptonphp_hash_register_algomhash_functionsadd_get_assoc_string_exvirtual_file_exzim_simplexml_element_asXMLzif_cryptexpand_filepathzif_is_dirzend_do_declare_beginzif_substr_countzend_stream_readzif_strpbrkFrenchToSdnzif_deg2radcurl_functionszif_stream_set_blockingzend_merge_propertieszif_connection_statusphp_openssl_apply_verification_policyzim_spl_Array_getFlagssapi_getenvzif_realpathzend_declare_property_boolphp_filter_emailzend_register_auto_globalzend_hash_quick_existsOnUpdateDecodezif_pcntl_signalzif_openssl_sealzif_curl_multi_initzif_php_strip_whitespaceXCRYPT_2.0GLIBC_2.2.5OPENSSL_1_1_0LIBXML2_2.5.2LIBXML2_2.6.5LIBXML2_2.6.11LIBXML2_2.9.0LIBXML2_2.4.30LIBXML2_2.6.0GLIBC_2.15GLIBC_2.4GLIBC_2.27GLIBC_2.14GLIBC_2.7GLIBC_2.11GLIBC_2.3GLIBC_2.3.4/opt/alt/krb5/usr/lib64:/opt/alt/cyrus-sasl/lib64:/opt/alt/libc-client11/lib64:/opt/alt/openssl11/lib64:/opt/alt/libssh211/usr/lib64:/opt/alt/curlssl11/usr/lib64:/opt/alt/libxml2/usr/lib64:/opt/alt/net-snmp11/usr/lib64:/opt/alt/pcre802/usr/lib64:/opt/alt/libicu57/usr/lib64:/opt/alt/openldap11/lib64:/opt/alt/libwebp/lib64:/opt/alt/t1lib/usr/lib64:/opt/alt/freetds11/usr/lib64	

				
		
						
				
			
			 `�]�+� ui	
�+� ui		�+\ ui	�+� m�+�p���
,���,��L),���8,�LF,���U,�	 m�+	l$���c,ii
n,���x,����,ii
�,����,ii

�,ui	�+ti	�,�ޑ�ޑ#�ޑ/�ޑ��ޑ��ޑ�ߑ�ߑ�ߑߑ ߑ*(ߑN0ߑ]8ߑ`@ߑgHߑ�Pߑ�Xߑ�`ߑ�hߑ�pߑxߑ �ߑ�ߑ/�ߑ:�ߑS�ߑT�ߑ`�ߑk�ߑ��ߑ��ߑ��ߑ��ߑ�ߑ�ߑ�ߑ&� �(�0�8�@�H�P�	X�
`�h�p�
x����������������������������������� �!�" �$(�%0�&8�'@�(H�)P�*X�+`�,h�-p�.x�0��1��2��3��4��5��6��7��8��9��:��;��<��=��>��?��@�A�B�C�D �E(�F0�G8�H@�IH�JP�KX�L`�Mh�Np�Ox�P��Q��R��S��T��U��V��W��X��Y��Z��[��\��]��^��_��`�a�b�c�d �e(�f0�g8�h@�iH�jP�kX�l`�mh�np�ox�p��r��s��t��u��v��w��x��y��z��{��|��}��~���������������� ��(��0��8��@��H��P��X��`��h��p��x���������������������������������������������������������� ��(��0��8��@��H��P��X��`��h��p��x���������������������������������������������������������� ��(��0��8��@��H��P��X��`��h��p��x���������������������������������������������������������� ��(��0��8��@��H��P��X��`��h��p��x�������������������������������������������������	 �
(�0�8�
@�H�P�X�`�h�p�x��������������������� ��!��"��#��$��%��&�'�(�)�+ �,(�-0�.8�/@�0H�1P�2X�3`�4h�5p�6x�7��8��9��:��;��<��=��>��?��@��A��B��C��D��E��F��G�H�I�J�K �L(�M0�O8�P@�QH�RP�SX�T`�Uh�Vp�Wx�X��Y��Z��[��\��^��_��a��b��c��d��e��f��h��i��j��k�l�m�n�o �p(�q0�r8�s@�tH�uP�vX�w`�xh�yp�zx�{��|��}��~���������������������������������������������� ��(��0��8��@��H��P��X��`��h��p��x���������������������������������������������������������� ��(��0��8��@��H��P��X��`��h��p��x���������������������������������������������������������� ��(��0��8��@��H��P��X��`��h��p��x���������������������������������������������������������� ��(��0��8��@��H��P��X��`��h��p�x�����������������	��
������
������������ �(�0�8�@�H�P�X�`�h�!p�"x�#��$��%��&��'��(��)��*��+��,��-��.��0��1��2��3��4�5�6�7�8 �9(�:0�;8�<@�=H�>P�?X�@`�Ah�Bp�Cx�D��E��F��G��H��I��J��K��L��M��N��O��P��Q��R��T��U�V�W�X�Y �Z(�[0�\8�]@�^H�_P�aX�b`�ch�dp�ex�f��g��h��i��j��l��m��n��o��p��q��r��s��t��u��v��w�x�y�z�{ �|(�}0�~8�@��H��P��X��`��h��p��x���������������������������������������������������������� ��(��0��8��@��H��P��X��`��h��p��x�������������������������������������������������������������� ���(���0���8���@���H���P���X���`���h���p���x���������������������������������������������������������������������� ���(���0���8���@���H���P���X���`���h���p���x���������������������������������������������������������������������� ��(��0��8��@��H��P��X��`��	h��
p��x�����
���������������������������������������� ��!��" ��#(��$0��%8��'@��(H��)P��*X��+`��,h��-p��.x��/���0���1���2���3���4��H��H�InNH��t��H����5RnN�%SnN��h�������h��������h�������h�������h�������h�������h�������h��q������h��a������h	��Q������h
��A������h��1������h��!������h
��������h��������h������h�������h��������h�������h�������h�������h�������h�������h��q������h��a������h��Q������h��A������h��1������h��!������h��������h��������h������h �������h!��������h"�������h#�������h$�������h%�������h&�������h'��q������h(��a������h)��Q������h*��A������h+��1������h,��!������h-��������h.��������h/������h0�������h1��������h2�������h3�������h4�������h5�������h6�������h7��q������h8��a������h9��Q������h:��A������h;��1������h<��!������h=��������h>��������h?������h@�������hA��������hB�������hC�������hD�������hE�������hF�������hG��q������hH��a������hI��Q������hJ��A������hK��1������hL��!������hM��������hN��������hO������hP�������hQ��������hR�������hS�������hT�������hU�������hV�������hW��q������hX��a������hY��Q������hZ��A������h[��1������h\��!������h]��������h^��������h_������h`�������ha��������hb�������hc�������hd�������he�������hf�������hg��q������hh��a������hi��Q������hj��A������hk��1������hl��!������hm��������hn��������ho������hp�������hq��������hr�������hs�������ht�������hu�������hv�������hw��q������hx��a������hy��Q������hz��A������h{��1������h|��!������h}��������h~��������h������h��������h���������h��������h��������h��������h��������h��������h���q������h���a������h���Q������h���A������h���1������h���!������h���������h���������h�������h��������h���������h��������h��������h��������h��������h��������h���q������h���a������h���Q������h���A������h���1������h���!������h���������h���������h�������h��������h���������h��������h��������h��������h��������h��������h���q������h���a������h���Q������h���A������h���1������h���!������h���������h���������h�������h�������h�������h������h������h������h������h������h���q���h���a���h���Q���h���A���h���1���h���!���h������h������h�������h�������h�������h������h������h������h������h������h���q���h���a���h���Q���h���A���h���1���h���!���h������h������h�������h�������h�������h������h������h������h������h������h���q���h���a���h���Q���h���A���h���1���h���!���h������h������h�������h�������h�������h������h������h������h������h������h���q���h���a���h���Q���h���A���h���1���h���!���h������h������h�������h�������h�������h������h������h������h������h������h���q���h���a���h���Q���h���A���h���1���h���!���h������h������h��������h�������h�������h������h������h������h������h������h��q����h��a����h	��Q����h
��A����h��1����h��!����h
������h������h�������h�������h�������h������h������h������h������h������h��q����h��a����h��Q����h��A����h��1����h��!����h������h������h�������h �������h!�������h"������h#������h$������h%������h&������h'��q����h(��a����h)��Q����h*��A����h+��1����h,��!����h-������h.������h/�������h0�������h1�������h2������h3������h4������h5������h6������h7��q����h8��a����h9��Q����h:��A����h;��1����h<��!����h=������h>������h?�������h@�������hA�������hB������hC������hD������hE������hF������hG��q����hH��a����hI��Q����hJ��A����hK��1����hL��!����hM������hN������hO�������hP�������hQ�������hR������hS������hT������hU������hV������hW��q����hX��a����hY��Q����hZ��A����h[��1����h\��!����h]������h^������h_�������h`�������ha�������hb������hc������hd������he������hf������hg��q����hh��a����hi��Q����hj��A����hk��1����hl��!����hm������hn������ho�������hp�������hq�������hr������hs������ht������hu������hv������hw��q����hx��a����hy��Q����hz��A����h{��1����h|��!����h}������h~������h�������h��������h��������h�������h�������h�������h�������h�������h���q����h���a����h���Q����h���A����h���1����h���!����h�������h�������h��������h��������h��������h�������h�������h�������h�������h�������h���q����h���a����h���Q����h���A����h���1����h���!����h�������h�������h��������h��������h��������h�������h�������h�������h�������h�������h���q����h���a����h���Q����h���A����h���1����h���!����h�������h�������h��������h��������h��������h�������h�������h�������h�������h�������h���q����h���a����h���Q����h���A����h���1����h���!����h�������h�������h��������h��������h��������h�������h�������h�������h�������h�������h���q����h���a����h���Q����h���A����h���1����h���!����h�������h�������h��������h��������h��������h�������h�������h�������h�������h�������h���q����h���a����h���Q����h���A����h���1����h���!����h�������h�������h��������h��������h��������h�������h�������h�������h�������h�������h���q����h���a����h���Q����h���A����h���1����h���!����h�������h�������h��������h��������h��������h�������h�������h�������h�������h�������h���q����h���a����h���Q����h���A����h���1����h���!����h�������h�������h���������h��������h��������h�������h�������h�������h�������h�������h��q�����h��a�����h	��Q�����h
��A�����h��1�����h��!�����h
�������h�������h��������h��������h��������h�������h�������h�������h�������h�������h��q�����h��a�����h��Q�����h��A�����h��1�����h��!�����h�������h�������h��������h ��������h!��������h"�������h#�������h$�������h%�������h&�������h'��q�����h(��a�����h)��Q�����h*��A�����h+��1�����h,��!�����h-�������h.�������h/��������h0��������h1��������h2�������h3�������h4�������h5�������h6�������h7��q�����h8��a�����h9��Q�����h:��A�����h;��1�����h<��!�����h=�������h>�������h?��������h@��������hA��������hB�������hC�������hD�������hE�������hF�������hG��q�����hH��a�����hI��Q�����hJ��A�����hK��1�����hL��!�����hM�������hN�������hO��������hP��������hQ��������hR�������hS�������hT�������hU�������hV�������hW��q�����hX��a�����hY��Q�����hZ��A�����h[��1�����h\��!�����h]�������h^�������h_��������h`��������ha��������hb�������hc�������hd�������he�������hf�������hg��q�����hh��a�����hi��Q�����hj��A�����hk��1�����hl��!�����hm�������hn�������ho��������hp��������hq��������hr�������hs�������ht�������hu�������hv�������hw��q�����hx��a�����hy��Q�����hz��A�����h{��1�����h|��!�����h}�������h~�������h��������h���������h���������h��������h��������h��������h��������h��������h���q�����h���a�����h���Q�����h���A�����h���1�����h���!�����h��������h��������h���������h���������h���������h��������h��������h��������h��������h��������h���q�����h���a�����h���Q�����h���A�����h���1�����h���!�����h��������h��������h���������h���������h���������h��������h��������h��������h��������h��������h���q�����h���a�����h���Q�����h���A�����h���1�����h���!�����h��������h��������h���������h���������h���������h��������h��������h��������h��������h��������h���q�����h���a�����h���Q�����h���A�����h���1�����h���!�����h��������h��������h���������h���������h���������h��������h��������h��������h��������h��������h���q�����h���a�����h���Q�����h���A�����h���1�����h���!�����h��������h��������h���������h���������h���������h��������h��������h��������h��������h��������h���q�����h���a�����h���Q�����h���A�����h���1�����h���!�����h��������h��������h���������h���������h���������h��������h��������h��������h��������h��������h���q�����h���a�����h���Q�����h���A�����h���1�����h���!�����h��������h��������h���������h���������h���������h��������h��������h��������h��������h��������h���q�����h���a�����h���Q�����h���A�����h���1�����h���!�����h��������h��������h���������h��������h��������h�������h�������h�������h�������h�������h��q�����h��a�����h	��Q�����h
��A�����h��1�����h��!�����h
�������h�������h��������h��������h���������%-=ND���%%=ND���%=ND���%=ND���%
=ND���%=ND���%�<ND���%�<ND���%�<ND���%�<ND���%�<ND���%�<ND���%�<ND���%�<ND���%�<ND���%�<ND���%�<ND���%�<ND���%�<ND���%�<ND���%�<ND���%�<ND���%}<ND���%u<ND���%m<ND���%e<ND���%]<ND���%U<ND���%M<ND���%E<ND���%=<ND���%5<ND���%-<ND���%%<ND���%<ND���%<ND���%
<ND���%<ND���%�;ND���%�;ND���%�;ND���%�;ND���%�;ND���%�;ND���%�;ND���%�;ND���%�;ND���%�;ND���%�;ND���%�;ND���%�;ND���%�;ND���%�;ND���%�;ND���%};ND���%u;ND���%m;ND���%e;ND���%];ND���%U;ND���%M;ND���%E;ND���%=;ND���%5;ND���%-;ND���%%;ND���%;ND���%;ND���%
;ND���%;ND���%�:ND���%�:ND���%�:ND���%�:ND���%�:ND���%�:ND���%�:ND���%�:ND���%�:ND���%�:ND���%�:ND���%�:ND���%�:ND���%�:ND���%�:ND���%�:ND���%}:ND���%u:ND���%m:ND���%e:ND���%]:ND���%U:ND���%M:ND���%E:ND���%=:ND���%5:ND���%-:ND���%%:ND���%:ND���%:ND���%
:ND���%:ND���%�9ND���%�9ND���%�9ND���%�9ND���%�9ND���%�9ND���%�9ND���%�9ND���%�9ND���%�9ND���%�9ND���%�9ND���%�9ND���%�9ND���%�9ND���%�9ND���%}9ND���%u9ND���%m9ND���%e9ND���%]9ND���%U9ND���%M9ND���%E9ND���%=9ND���%59ND���%-9ND���%%9ND���%9ND���%9ND���%
9ND���%9ND���%�8ND���%�8ND���%�8ND���%�8ND���%�8ND���%�8ND���%�8ND���%�8ND���%�8ND���%�8ND���%�8ND���%�8ND���%�8ND���%�8ND���%�8ND���%�8ND���%}8ND���%u8ND���%m8ND���%e8ND���%]8ND���%U8ND���%M8ND���%E8ND���%=8ND���%58ND���%-8ND���%%8ND���%8ND���%8ND���%
8ND���%8ND���%�7ND���%�7ND���%�7ND���%�7ND���%�7ND���%�7ND���%�7ND���%�7ND���%�7ND���%�7ND���%�7ND���%�7ND���%�7ND���%�7ND���%�7ND���%�7ND���%}7ND���%u7ND���%m7ND���%e7ND���%]7ND���%U7ND���%M7ND���%E7ND���%=7ND���%57ND���%-7ND���%%7ND���%7ND���%7ND���%
7ND���%7ND���%�6ND���%�6ND���%�6ND���%�6ND���%�6ND���%�6ND���%�6ND���%�6ND���%�6ND���%�6ND���%�6ND���%�6ND���%�6ND���%�6ND���%�6ND���%�6ND���%}6ND���%u6ND���%m6ND���%e6ND���%]6ND���%U6ND���%M6ND���%E6ND���%=6ND���%56ND���%-6ND���%%6ND���%6ND���%6ND���%
6ND���%6ND���%�5ND���%�5ND���%�5ND���%�5ND���%�5ND���%�5ND���%�5ND���%�5ND���%�5ND���%�5ND���%�5ND���%�5ND���%�5ND���%�5ND���%�5ND���%�5ND���%}5ND���%u5ND���%m5ND���%e5ND���%]5ND���%U5ND���%M5ND���%E5ND���%=5ND���%55ND���%-5ND���%%5ND���%5ND���%5ND���%
5ND���%5ND���%�4ND���%�4ND���%�4ND���%�4ND���%�4ND���%�4ND���%�4ND���%�4ND���%�4ND���%�4ND���%�4ND���%�4ND���%�4ND���%�4ND���%�4ND���%�4ND���%}4ND���%u4ND���%m4ND���%e4ND���%]4ND���%U4ND���%M4ND���%E4ND���%=4ND���%54ND���%-4ND���%%4ND���%4ND���%4ND���%
4ND���%4ND���%�3ND���%�3ND���%�3ND���%�3ND���%�3ND���%�3ND���%�3ND���%�3ND���%�3ND���%�3ND���%�3ND���%�3ND���%�3ND���%�3ND���%�3ND���%�3ND���%}3ND���%u3ND���%m3ND���%e3ND���%]3ND���%U3ND���%M3ND���%E3ND���%=3ND���%53ND���%-3ND���%%3ND���%3ND���%3ND���%
3ND���%3ND���%�2ND���%�2ND���%�2ND���%�2ND���%�2ND���%�2ND���%�2ND���%�2ND���%�2ND���%�2ND���%�2ND���%�2ND���%�2ND���%�2ND���%�2ND���%�2ND���%}2ND���%u2ND���%m2ND���%e2ND���%]2ND���%U2ND���%M2ND���%E2ND���%=2ND���%52ND���%-2ND���%%2ND���%2ND���%2ND���%
2ND���%2ND���%�1ND���%�1ND���%�1ND���%�1ND���%�1ND���%�1ND���%�1ND���%�1ND���%�1ND���%�1ND���%�1ND���%�1ND���%�1ND���%�1ND���%�1ND���%�1ND���%}1ND���%u1ND���%m1ND���%e1ND���%]1ND���%U1ND���%M1ND���%E1ND���%=1ND���%51ND���%-1ND���%%1ND���%1ND���%1ND���%
1ND���%1ND���%�0ND���%�0ND���%�0ND���%�0ND���%�0ND���%�0ND���%�0ND���%�0ND���%�0ND���%�0ND���%�0ND���%�0ND���%�0ND���%�0ND���%�0ND���%�0ND���%}0ND���%u0ND���%m0ND���%e0ND���%]0ND���%U0ND���%M0ND���%E0ND���%=0ND���%50ND���%-0ND���%%0ND���%0ND���%0ND���%
0ND���%0ND���%�/ND���%�/ND���%�/ND���%�/ND���%�/ND���%�/ND���%�/ND���%�/ND���%�/ND���%�/ND���%�/ND���%�/ND���%�/ND���%�/ND���%�/ND���%�/ND���%}/ND���%u/ND���%m/ND���%e/ND���%]/ND���%U/ND���%M/ND���%E/ND���%=/ND���%5/ND���%-/ND���%%/ND���%/ND���%/ND���%
/ND���%/ND���%�.ND���%�.ND���%�.ND���%�.ND���%�.ND���%�.ND���%�.ND���%�.ND���%�.ND���%�.ND���%�.ND���%�.ND���%�.ND���%�.ND���%�.ND���%�.ND���%}.ND���%u.ND���%m.ND���%e.ND���%].ND���%U.ND���%M.ND���%E.ND���%=.ND���%5.ND���%-.ND���%%.ND���%.ND���%.ND���%
.ND���%.ND���%�-ND���%�-ND���%�-ND���%�-ND���%�-ND���%�-ND���%�-ND���%�-ND���%�-ND���%�-ND���%�-ND���%�-ND���%�-ND���%�-ND���%�-ND���%�-ND���%}-ND���%u-ND���%m-ND���%e-ND���%]-ND���%U-ND���%M-ND���%E-ND���%=-ND���%5-ND���%--ND���%%-ND���%-ND���%-ND���%
-ND���%-ND���%�,ND���%�,ND���%�,ND���%�,ND���%�,ND���%�,ND���%�,ND���%�,ND���%�,ND���%�,ND���%�,ND���%�,ND���%�,ND���%�,ND���%�,ND���%�,ND���%},ND���%u,ND���%m,ND���%e,ND���%],ND���%U,ND���%M,ND���%E,ND���%=,ND���%5,ND���%-,ND���%%,ND���%,ND���%,ND���%
,ND���%,ND���%�+ND���%�+ND���%�+ND���%�+ND���%�+ND���%�+ND���%�+ND���%�+ND���%�+ND���%�+ND���%�+ND���%�+ND���%�+ND���%�+ND���%�+ND���%�+ND���%}+ND���%u+ND���%m+ND���%e+ND���%]+ND���%U+ND���%M+ND���%E+ND���%=+ND���%5+ND���%-+ND���%%+ND���%+ND���%+ND���%
+ND���%+ND���%�*ND���%�*ND���%�*ND���%�*ND���%�*ND���%�*ND���%�*ND���%�*ND���%�*ND���%�*ND���%�*ND���%�*ND���%�*ND���%�*ND���%�*ND���%�*ND���%}*ND���%u*ND���%m*ND���%e*ND���%]*ND���%U*ND���%M*ND���%E*ND���%=*ND���%5*ND���%-*ND���%%*ND���%*ND���%*ND���%
*ND���%*ND���%�)ND���%�)ND���%�)ND���%�)ND���%�)ND���%�)ND���%�)ND���%�)ND���%�)ND���%�)ND���%�)ND���%�)ND���%�)ND���%�)ND���%�)ND���%�)ND���%})ND���%u)ND���%m)ND���%e)ND���%])ND���%U)ND���%M)ND���%E)ND���%=)ND���%5)ND���%-)ND���%%)ND���%)ND���%)ND���%
)ND���%)ND���%�(ND���%�(ND���%�(ND���%�(ND���%�(ND���%�(ND���%�(ND���%�(ND���%�(ND���%�(ND���%�(ND���%�(ND���%�(ND���%�(ND���%�(ND���%�(ND���%}(ND���%u(ND���%m(ND���%e(ND���%](ND���%U(ND���%M(ND���%E(ND���%=(ND���%5(ND���%-(ND���%%(ND���%(ND���%(ND���%
(ND���%(ND���%�'ND���%�'ND���%�'ND���%�'ND���%�'ND���%�'ND���%�'ND���%�'ND���%�'ND���%�'ND���%�'ND���%�'ND���%�'ND���%�'ND���%�'ND���%�'ND���%}'ND���%u'ND���%m'ND���%e'ND���%]'ND���%U'ND���%M'ND���%E'ND���%='ND���%5'ND���%-'ND���%%'ND���%'ND���%'ND���%
'ND���%'ND���%�&ND���%�&ND���%�&ND���%�&ND���%�&ND���%�&ND���%�&ND���%�&ND���%�&ND���%�&ND���%�&ND���%�&ND���%�&ND���%�&ND���%�&ND���%�&ND���%}&ND���%u&ND���%m&ND���%e&ND���%]&ND���%U&ND���%M&ND���%E&ND���%=&ND���%5&ND���%-&ND���%%&ND���%&ND���%&ND���%
&ND���%&ND���%�%ND���%�%ND���%�%ND���%�%ND���%�%ND���%�%ND���%�%ND���%�%ND���%�%ND���%�%ND���%�%ND���%�%ND���%�%ND���%�%ND���%�%ND���%�%ND���%}%ND���%u%ND���%m%ND���%e%ND���%]%ND���%U%ND���%M%ND���%E%ND���%=%ND���%5%ND���%-%ND���%%%ND���%%ND���%%ND���%
%ND���%%ND���%�$ND���%�$ND���%�$ND���%�$ND���%�$ND���%�$ND���%�$ND���%�$ND���%�$ND���%�$ND���%�$ND���%�$ND�%A�%A�%A�%AH�% �%A�%A�%@�%@�%�%f���AWL�=�MAVAUL�-��PATL�%?�PUS�nH��8�|$�
H�4$�dH�%(H��$(1��v�PDŽ$��D$h�D$@H��PDŽ$�H�D$0H�D$(H�D$8�D$DDŽ$�DŽ$�H�D$XH�D$HH�D$`H�D$PH�D$p�D$l�~�H�G(H�=��PH�}�PH���P���P�o��p�5�H�5>�'�oH��H���P��@of�H�4$�|$E1�M��L��L���';�������dtI��nt4��cu�H�=�PH��t���H�=�P���H���P�f����P�@L�5��PL���A��L���=Lc�H�������4+H�=�P�\$H��Hc�H�D$��H�t$ H�|$�`�H�T$H�|$H�H�t$ L�BB�@L��f������A��'wH��H��H��H��!Ȅ��H��Hc���H�5�PH��J�<0H�{�PI��+����'L5e�PfA��x�'A�F�D$�\(���H���\+�T�Hc�H�5��PH��J�<0H�L$xH��P����H�L$x�.�'L�H
�P���'�A�L����D$@H�=��P���PH�D$(H�?�PH�$H�H���P���P���#H�`�H��$`DŽ$�H���L���A�ą���H�`�Hǀ��$����w��$���uH�`���(��$�H�=��PH��t��H�=-�PH��t����$����3����$���H���H�-��PƀpH�`�H�@ H�4$�|$E1�I��H�
2�PH��M�V8����t��i�%~��m�Q��vu�������DŽ$��VfSL�
:8$L��'PH�@�H�
�'H�5��%H�=Z�'H�1���]�A\�7DŽ$������?t	��h�>������N���lH�$�/DŽ$�H�8��H�5$H��tH�pAUH�=��'1�I��VI��H��H����A^�A_�7��?u#�|$~H�$�?E1�H�x�M��H��A��D��$�����H��H�Z��H�5�PH��J�<0H�_�PI��H)����L+5��PDt$Hc�Ic�H;�PA��H���"H��H+��PIc�H)�H=�P����H+v�P� �')�B�\5Hc�H��P����E���1���}�����$����D�t$hL��M���+1�H���L��H��H��H�p��t-DŽ$���蟨DŽ$��B������t�DŽ$����R�
���5DŽ$��������t�H��$�1�H�=��'DŽ$��]�H��A�1�1Ҿ2�fA��H��1�H�ƀ�H��$@�+H�Ɛ�\1�H��H�$�?=H�5H!H���p'H��H��$�P%H�=!�'1����H����H����H�5�!H��HDŽ$0�H�5!!H���H��豿H�=�M'1�����4DŽ$�����H� �D�t$hH�R�'L�-�'L�|$pL�%;�'H�-̗'����D$@���PH�D$(H�_�PH�4$�|$E1�L���PH�
F�PH���M�j4�������
��pw�Hc�H�>��A�F����DC�MB��A���A���J�|$D�?H��PA�H�D$X�t���H�=�P�
�c���A���Y���A��N���A�F�����H�|$8��L�=k�'�)���H���ƀ�����A���PA�����|$D��H�O�PA�H�D$`���A�����H�-�PA�H�D$0���H��PA�
H�D$0���H���PA�	H�D$0���H��PA�H�D$0�y���A�F����DC�MB��`���A����A����L�=�'�@����D$l�3���A����A��u�H�{�PA�H�D$8����A���,A��u��|$Du�H�M�PA�H�D$P�����|$D����A����LE����D$D���H�|$`�����L�=��'����|$D�U�\$DH�������Q�P;\$}LH�|$8uD�D$h��t;���>L�<$Hc�H�5�'I�|������I�����PH�D$8H�\$8H����H��$�H��$hH��H��$X�!#���P���H���PHc��P�t$Ƅ$PH�� �H��$XHDŽ$`)�Ƅ$���H�
��P���H�4$H�\�H�+H�J@H�Hc`�PH�D�H����
���yH����|$lDŽ$���$����H�+t81�H��L�$$�"M��1�H��1�L���L��H��H��H�P����H��9\$ԾH�=V�"��XH���ƀ��D$h�����Y���H���'Hc�H�>��H�|$P����L�=��'���H��PA�H�D$H���H�|$HuH�|$8t�L�=ד'���H�|$XuH�|$8���L�=��'�k���H�|$Hu�H�|$8�4����H���PH�D$8�D���H�=ʐ'�7�H���MH�8�X�����H���'H��$XH��MH�H��$h����H�+H��$h����H�=��'�&�.���H��0�H�5X�$H�=2�'1��H��ƔH�H�0H���O	H�=9�'1���H��0�H�5��%1�H�=F�'�H��ƔH�H�0H���		H�=O�'1�������H�|$01�H���H��H��H�X��{H���ܿL�|$0��H��L���(H�ǀ�H��$���H��H���~(����H�5x$L���f�����H��0�H�t$0H�=?�'1��DŽ$�H��蔿�2����D$h��	�,��
�1ۃ�����4�H�|$0H���@H���@H��$�1��H��H��H���B����H��$�H�|$0�u���H�EH��$��@�;H��H��H��$��
�� H��E1�H��$�H��$�H��`�A�H���@�@1��H���H���H��$�H���H��$�QH�
�6j��$�j賶H���H�� H�����Z�E1��H��H��B$H���P�H��0�H�=��'H�01��H����tHDž�H��$��tH��$��t��1��v�M���H��$��~
�;���PH� הE1�1�jA�H�
��"1���$�jH�0��H�� �H�5+1�1���]�^���H�|$0H�5q�"���H��t-H�@הH����H�הH����H�HהH�����H�הH�����H��$P��L���������H��$P�,"H��0�H��$X��$���$�H�����H�=U�'���y�H��$P�yL���v�H��$�H���a�H���9��Y�H��$XH�5g�'�0�������|$D�h��C�H��H�Q�'H��$�H���H���H��t	�:�pH�=-�'1�A��!��H��0bI��H��ML��H�H�k�MH�5$H��Խ��H�`�L��$�ǀ(H��$�H��$�H��$����I��H���H�5��'L���S�����IH�5�#L���<�����2H��u
A�?�H��L��1��H��L�i�N�d-M�D$M9�v#L��H��1�L��$���L��$�H��M��H�<+L��I�l$L���
��B�#
B�D#A�?tL���d��L�����H��$���H���"������H��'1�H���A��b�P��t<
��H�`�H���H��t���7�P1�����L��$�L����L���@��H��舺H�`���(��$���L��������L��L��$�����軻���8�t����m���g����H�5�A'����H��~��G���H��$P�(H�`���(��$����j�]���H�=�'1����x�H��$�1��1��H��$�H��$�����h�Y����H�D$`H��t1��H���'H���y����{�E1��3�A�H��$��H��$�H�5��'H��@f�@H�`�AQE1�jH�����AZA[H��$PL��$�H�EH��$���$����DH�=]�P1�1�1��DI��H���&1�H��L���H��H��H�X��A�T���
t��
uA�DH��H�C�H���u�1ۿI���L���L��XI���@H��$���E1�L���I�H��`�A�H��$�H����@�@VH�5w�'j��_AXH��$�H�|$HL� H��t01��H�O�'����uDŽ$��L���ٷ���H�T$8H��t�H��$�H��$�H�}���tJDŽ$��H�|$P�7�H�|$P1��H��'�|�����DŽ$����H�����$�H���g��(��$��T���H�5D�$���H�58�$����H�|$X1��H�*�'��������DŽ$���u���D��1�I��^H��H���PTI�bH��bH��p�C�J�M����f.��H�=��PH���PH9�tH��MH��t	�����H�=��PH�5z�PH)�H��H��H��?H�H�tH���MH��t��fD�����=E�PuUH���z����3�P]Ð�ff.�@���f.���H�H�GH�G�@��SH��ԔH�{H��t趵H�C1�H�C[�f���SH��ԔH�{H��t膵H�{H�CH��t�0H�{�g�H�C1�[�ff.���S�H��tH���Z H��[�1��H�(������D��AUATI��USH��dH�%(H�D$1��
]�8H�(I��躴f�H��H��H��H�@0@@ �H�{H�uxH��H��p3[A��H��P	]1�H��H�E����0XE�$L��H�߉�H���PH���u A�E�C�C��tB��t-��t(H�L$dH3%(H��H���Pu7H��[]A\A]�I�E H�C ��fDI�E H�C A�E0�C0I�E(H�C(�����f���AUI��ATUSH��dH�%(H�D$1���[� H�(I��蚳f�H��H��H��@�H�{H�uxH��H��p3[A��H��P	]1�H��H�1�WE�EH��L���H�i�PH���a�
H�CI�T$�o
�oRP�oZ X �ob0`0�oj@h@�orPpP�oz`x`�oJpHp�o�����o�����o�����o�����o����H���H���I�D$H�x@H��tL�k�
�I�E@I�D$H�@HH��tH�SH�BHH�L$dH3%(H��H�k�PuH��[]A\A]����f���SH��H�H��t�:
H���RH��[�)�f���H�����1�H���f.���S1�H���F����H�[����H�?�t@��SH��H�5M%H�� dH�%(H�D$1�H�L$H��L�D$�����tH�|$H�G�H=�wH�4$H�F�H��v'�CH�H�D$dH3%(u-H�� [�fDH�|$~��fH9D$��CH�������f.�UH��SH��H��H��t'�CH��H��� y�CH���CH��[]��记H����f���AUATUH��H�56�"SH��(dH�%(H�D$1�H�L$H�T$������PH�ԔH�H���U�t$H�|$H�T$�vH��H���_sH�H��ay���?�H�5�%H���xH�KH��ay�����H�5Ϊ"H���xH�KH��ay�����H�5�;$H���qxH�KH��ay���p�H�5^%H���LxH�K H��ay���+�H�5�"H���'xH�K(H��ay�����H�5�"H���x�C0f.}1��1ɺ	H�5y"H����zH�D$�H��E1�H�5c"Hc�w���@H��I���@�rH�T$���~6f�L��L��I��H��HBH�PHc0�=�H�T$D9"�L��	H��E1�H�5�!�I�H�D$�H��H�5�!HcH�w��b��@H��I���@�|qH�T$�B��~.L��L��I��H��HBH�PHc0譅H�T$D9b�L��H�5ϫ%H��軁H�|$�����
H��H�5V!�wyD���E��tG�����ay�����
H�54!H���Uv����������u���$D���E��uxD���E��ul�����tL��	H�5� H����H���sH�D$dH3%(��H��([]A\A]�@�	H�5b H���{�������@H��I���@�pD���E���������w���Hc���H�5,t"L���Wu������7���������)����;���fD1ɺH�5�H���
x����D1ɺH�5�H����w����D1ɺH�5�!H����w���D1ɺH�5)8$H���w�D���D1ɺH�5Ҧ"H���w���D1ɺH�5�!H���jw���DH�KX�H�5�!L���XtH�K`�L��H�5u�"�@tH�Kh�L��H�5�7$�(tH�Kp�L��H�5!�tH�Kx�L��H�5��sH����L��H�5y��s�����������X���f.��EH�E�����s�H�����1ɺ
H�5aH���rv�(���D�C8=ay����HcȺH�5J#H���Ss�KPH��H�5"�,vH�K@H��A��H�5�z���f��C8=ay����HcȺH�5�"H����r�KP�H�5�H����u����H�K@H��tA��H�5�H���zH�CHH���d���H�A��H��H�5p��y�B���1ɺH�5W"H���Pu����1ɺH�5<"H���5u�U����{��ff.���UH��SH��H��H��dH�%(H�D$1�H�ԔH��L�1��5����t#H�<$�wQH��H�@H���������u-�CH�H�D$dH3%(��H��[]��H��ӔH��H�8���H���Q�@H��H�E����CH�U�����t(��t��u�HcB8H�C �@H�BHH�C �y���HcB8H�C H�E�@P�C0H�EH�x@�	��H�C(�N���H�#�1����+����3����SH��H��H��H��dH�%(H�D$1�H�ԔH��L�1��������H�<$�4PH�PH��tk�����u)�CH�H�D$dH3%(��H��[�@�����t}��tP��u��CH�@�@8���)��H�H���H�9"�1�1�����CH��H�rHH����(��CHcH��H���[�����CH�P�BP�R8����)ȍ��{������ff.���UH��SH��H��H��(dH�%(H�D$1�H�ԔH�L$H���0H��ӔL�1�L�L$ ��ZY���twH�|$��NH�ŋ@��tNH�|$��NH�PH�����E������t^��uA�CH�E H��H��H)�H��H��&fDH�Q!�1�1����CH�H�D$dH3%(uTH��([]ÐH���H�u ���CHcH��H��^���@�CkU0<H�E Hc�H)��p����H�� ������ff.�@��ATI��H��H�OUSH��0dH�%(H�D$(1�H�L$H��H�D$(H�D$PH�ԔL�1�L�L$(�I�^_����H�|$�MH�xH����H�ԔH�H�����t$H�|$H�T$ �kH��H�D$ H��t�H����H�K�oEXH��AX�oMhIh�oUxQxH���H���H�C������H�C������H�Cǀ���H�{1��H�{�H�D$(dH3%(��H��0[]A\�@H��1�1���A�D$I�$����H������H�@H���1�H�jD�H�pH�L$(D�1��c�XH��Z��A�D$I�$�U���������UH��H��H�sSH��8dH�%(H�D$(1�H�D$ H�L$H�D$ PH�D$ PH�ԔL�1�L�L$ �i�ZY���t}H�|$�KH��H�@H��tTH�T$1�H�PH�T$H�CH�P H�T$ H�CH�P(H�{�^H�{�UH�D$(dH3%(u.H��8[]�fDH���1��e��EH�E���Ҿ��f���UH��H��H��SH��8dH�%(H�D$(1�H�D$ H�L$PH�D$ PH�ԔL�1�L�L$ ��ZY���t~H�|$�JH��H�@H��tUH�T$1�H�H�CH�T$H�PH�T$ H�CH�PH�{�xH�{�oH�D$(dH3%(u0H��8[]��H���1��}��EH�E����f.���UH��SH��H��H��(dH�%(H�D$1�H��ӔH�L$H���0H�ԔL�1�L�L$ ��ZY�����H�|$��IH�xH��tbH�|$�I�xu:H�p H�}�5H�}H����EH�D$dH3%(uGH��([]�fDH���1�1����̐H���1�1��{��CH�����f���UH��H��H��SH��8dH�%(H�D$(1�H�D$ H�L$H�D$ PH�D$ PH�ԔL�1�L�L$ ��ZY�����H�|$��HH��H�@H����H�|$f�H�8H�CH�t$H�@H�CH�@H�SHǂ�BXBhBxH�T$ H�k�"Y1�H�EhH�Cǀ�H�{�5H�{�,H�D$(dH3%(u-H��8[]�DH���1��=��EH�E��誻��f.���ATH��USH��H��H��dH�%(H�D$1�H��ӔH��L�1��c����tcH�<$�GH�ŋ@��t;�E���'������tIH�D$dH3%(�EH��[]A\�@H�)�1�1��{��CH��fD�
��H�M �H���������I��H��I��L��H��H��H��?L�
I��I)�L��H��L)�H��I)�D��D�����A1�A1�H����A)�H�\A)���1��L	+�&L���ީ���C��xgL�#�C����H�E H�(H��蹩���ƉC��x H�����CH����@H�m(��f�H�5��1��}>�s���H�5��1��]>����ӹ����USH��H�5�"H��8dH�%(H�D$(1�H�L$H�T$H�����H�D$L�L$ L�D$H�D$ 1������tC�T$ H�t$H�|$�H�H��H��t(H���ب���ƉC��x?H���7��CH��fD�CH�H�D$(dH3%(u%H��8[]�fDH�5��1��}=�s�����USH��H�5��"H��(dH�%(H�D$1�H�L$H�T$�������H�ԔH�0H����H�|$�W���tSH��ԔH�}H��t
辜H�E�t$H�|$�X��CH�EH�H�D$dH3%(u>H��([]�f�H�L$H�%�1����CH�����H���j�������fD��H�ԔATUH��SH�H��tFD�`H��H�X�_E��~*A�D$�H��L�dH�3�H��H���wL9�u�[]A\�f��+��f���AWAVAUATI��USH��(dH�%(H�D$1�L�l$�a�L��H���^�W@1���uI�D$�T$L��Pp�T$H��L��L��������H�D$L�0H��L��H���xH�}�����@H��H���@�^�M�H��H�5o�vfHcM�H��H�5�"�ncH�MH����A��H�5�H���jL�uL�����A�L$�P������I�<$L��L���:����2�����W��@H��I���@�q]L�}L��襥��L��L��L��P��m�����H�5	H���4d�h����H�D$dH3%(uH��([]A\A]A^A_��ĵ��@SH�=�"H��@dH�%(H��$81��I��1�1�H��H�D$H� ���D$H��$�H��HDŽ$�HDŽ$�HDŽ$�HDŽ$PHDŽ$XHDŽ$HHDŽ$�HDŽ$�HDŽ$�HDŽ$�HDŽ$�HDŽ$�HDŽ$�HDŽ$�H�D$DŽ$hHDŽ$`HDŽ$@HDŽ$HDŽ$�H��$8覜H��ԔH��BH�;A�
H�
p�o�H�5�)��P�oH)
��P�oP )��P�oX0)��P�o`@)%��P�ohP)-��P�op`)5��P�oxp)=��P�o��)��P�o��)
��P�o��)��PH���H���PH���H��PH��H�u�P��H�;A�H�
��H�5��o�H�;A�
H�
��H�5��N�H�;A�H�
��H�5��-�H�;A�H�
D�H�5���H�;A�H�
B�H�5����H�;A�H�
2�H�5����H�;A�H�
�H�5}��H�;A�
H�
�
�H�5i��H�;A�H�
�
�H�5U�g�H�;A�
H�
p
�H�5=�F�H�=�
����1�1�H��$�H��$�H�@��DŽ$�H��$@H��HDŽ$HHDŽ$PHDŽ$XHDŽ$�HDŽ$�HDŽ$�HDŽ$�HDŽ$�HDŽ$`HDŽ$hHDŽ$pHDŽ$xHDŽ$�HDŽ$�HDŽ$�DŽ$HDŽ$HDŽ$�HDŽ$�HDŽ$0H��$��9�H��ӔH��?�o)o�P�o`)%s�P�oh )-w�P�op0)5{�P�ox@)=�P�o@P)��P�oH`)
��P�oPp)��P�o��)��P�o��)%��P�o��)-��PH���H���PH�y��H��PH�H�d�PH��$8dH3%(u	H��@[��#�����SH�=�M���-v�H���A�عH��
H�=b��GA�عH��H�=L�GA�عH���
H�=8�GA�عH���H�=%�xGA�عH���H�=�XGA�عH���
H�=��8GA�عH���
H�=��GA�عH�p�
H�=��FA�عH��
H�=���FA�عH�0�	H�=��FA�عH���	H�=��FA�ع1ҾH�=��mBA�ع��H�=��OBA�ع��H�=w�1BH�ԔH�H��Ӕ�1�[�f����t�À~u�AUATUH��SH��H��I��ӔM�,$�NH��L�������u�H��[]A\A]�M�$$H����NH��L������t�H���:H��H���9�KH�…�t3�@��t,�K;Ju>��tb��t=���u�H�B H9C �����H�F
�1�1�����h���H�d
��H�R H�C H�2H�8�����������D���H�r(H�{(����������*������t�À~u�AUATUH��SH��H��I��ԔM�,$��MH��L�������u�H��[]A\A]�M�$$H���MH��L������t�H����8H��H����8H�{H�ŋ����t-H�}�����t*H�S1�H���H9��t�}�������H�wH����H�wH�x�H�}��f�ATI��USH��PH��ԔdH�%(H�D$H1�H�]H��t	�;��H�=9�p���H��H��t	�8�H�}H���2�?H�\$��1����H�|$H��H�D$�K���H��H�����P H�p(H�x0�o�H�M(L�
�H�|�j�Y�HH��H��f�L�E0H�HD؋E ��H��LD�H��H��?H��H��
H)��H*��Z�H�پ1��H�y��H�L$HdH3%(H����H��P[]A\�@L�
&f�H��M��몐L����������H�]�f.�L��H���u���u�H�}H������@H�\$�H�=�H����.��������|$$������T$�������H�|$L�����������H�\$�-����D���@��UH��SH��H�ԔH�H������J
1��H�ݘ$H�5d�O
H�1��H�5��O
H��Ӕ�H�-H�5A���H���#HD�1��[O
H������H�5)H��1��=O
�J
H��H��[]��Ef.���H���S���AUI��ATUSH��H��(I��ԔdH�%(H�D$1�I�l$H����H��賘��H�L$H��H��P����u,H�D$H�H�t$dH34%(��H��([]A\A]�DL��H����H�D$H��t�H���S���H�L$E1�H��H��I�|$�PA�j��H�D$ ZY�fD�H覌E1�1ҾH�
���H��I�D$�8�I�l$�3����i���f�UH��1�H�����SH��H��H�H����H��t/H��H�ԔH�0H��t5���H�H��tJ1�H��[]��H�ԔH�0H��t!H����@H�|$�v�H�|$H���@�c�H����H��H�W�1��8������뛐��SH��H�5Z�"H�� dH�%(H�D$1�H�L$H�T$H�D$赴���tH�t$H�|$������t%�CH�H�D$dH3%(u=H�� [�@H��ӔH��H�H�8�<��H���d3H�T$H�XH�P �������U1�H��S���H��(dH�%(H�D$1�H�D$���1�H�L$��H�T$H�5p�"����t&1�1����H�D$dH3%(uNH��([]�fDH�t$H�|$������t
�E��H�H���2H�T$H�XH�P ��B���f���UH���8SH��dH�%(H�D$1��)�f�H��H�@0H��H��@@ ��H�{H��H�uxH��p3[A���H��P	]1�H��H�����-H�L$dH3%(uH����H�"�P[]�蚥��f.���UH��� SH��dH�%(H�D$1��y�f�H��H��H��@�`�H�{H��H�uxH��p3[A��c�H��P	]1�H��H����,H�L$dH3%(uH����H�>�P[]����fD��SH��H��ԔH�;H��t(���H�3H��H��t8�S���H��H��tJH��H��[�f��;�H���s���H�3H��H��u��H�D$��H�|$H���	���H��H��u�1�H�@�1����H��H��[���AWAVAUI��ATUS��H��8dH�%(H�D$(1�L�|$ L�t$�*���H�l$M��M��I��H��1���H��[$��t�����[���H����H�L$ �H�x�H��H��1��{�H�ԔL�0M����H��� ���L��1�H����NL��H��I�����L�cHH��ǃ�I����f�L����H��薇�t$���H�ԔH�H���H�|$H�T$�MH�|$H��D�w���H��H����L��H���<�H�t$H����H��I���$�H����Dt$t5A�EI�EH�D$(dH3%(��H��8[]A\A]A^A_�DA�EM�e��D1�M��L��H��H�5Lu"��路���t��
�1�L�`HH��ǀ�腝��H��H���J��t$����H���v��\�������t$H��������I���c�������fD��ATUH��S��1�H�� dH�%(H�D$1�����H�L$H�T$��H�D$H�5N�$1��D$���������I���>�H�t$L�`HH��H��ǀ���H���H�|$��H�s(H����^H�s H����^H�sH���^H�sH���^H�CH��H�p��^H�H��H�������^H�SH�sH�;�[9H��H���p^H�SH�sH�;�`9H��H���U^HcsPH���I^H����H�D$dH3%(�&H�� []A\�@H�K(H��H�5V��XMH�K H��H�5E��@MH�KH��H�54��(MH�KH��H�5$��MH�CH��H�5�H�H���LH�H��H�5�H��������LH�SH�sH�;�V8H��H�5�H���LH�SH�sH�;�O8H��H�5��H���LHcKP�	H��H�5���pL�����EH�E����蒟��f�AWE��AVAUI��ATI��U��SH��H��H�?dH�%(H�D$1�H�$H��t��H�ԔH�H���TL����H����IH�<$H�H��t;�O��t4E������1�H�t$dH34%(��H��[]A\A]A^A_Ð�{�M����L���+D�`A���A����A�����C�D���H��f�1�蹙��H��H���~�H�;�H����H�;L����H�H��ǀ�H�ǀ�����3�����H�=#�����H�L�pHM������ǀ�H��L�uH�]���D�s�H�����L�` �o�H��D�`8ǀ��)���f�H�x(L�x D�h0�O���I���7�H��D�x8ǀ�D�hPL�`@���f�H�GH��L��H��1�D�H�pD�1����XZH�<$���1��/���L�p ���ǀ�H������D����I����ǀ�H��������ff.����AUATUSH��H�5�H��(dH�%(H�D$1�H�L$H�T$H��ӔL�D$�D$H�D$L�1�H�D$辩���taH�ԔH��H�8���L�l$D�d$H��H�l$�(E1�L��D��H�xH�������tH�D$dH3%(uH��([]A\A]�@�CH�������fD��AU1�ATUH��S���H��(dH�%(H�D$1��D$H�D$H�D$���H��ӔH�L$��H�T$L�D$L�H�5��1��Ψ��t*1�1���H�D$dH3%(uBH��([]A\A]�fDL�l$D�d$H��H�\$�'A�L��D��H�xH�������*���f.���USH��H������H�(H��胊���C�ƅ�xH�����CH�H��[]�@H�5���1��M�s���AUATA��UH��H�5��S��H��dH�%(H�D$x1�H�D$0H�L$hH�D$0H�T$`PH�D$0P1�L�L$0L�D$(褧Y^���������H�
����Hc�H�>��DH�D$h1ҾH�=1���e�D$1ҾH�=.���e�D$ 1�E���j�H�=#��e�D$(H�|$hH������\D$(�D$�O�I����ADž�I�EH���OH�t$`L����H�T$8H�L$@H��H�D$`L��P�T$�L$(�D$0L�L$`L�D$X��(L���XZ�y���uzH�D$hH����E�����D$@�XD$0�b�f/��f��f/���H���hH��u3�E�E�(�H�-��1�1��;��EH�EH�D$xdH3%(�uH�Ĉ[]A\A]�D�H�=���7dH�|$hH����D$(������@�EE���H�D$HH�E�L���h�f�H�|�j�Y�HH��H��H��?H��
H)��H*��D$0�z���f�f(��%���-L��^�f(�fT�f.�v3�H,�f���51�fU��H*�f(����f(�fT��\�fV��Y��\����f.��D$8�m���D�,�f��H�|$p1�H�Q�1��*��\��Y��D,���H�D$p�E�EH�E���DH�D$P����!������1��U���D����B���f���AWAVAUATUSH��H�5[�H��hdH�%(H�D$X1�H�L$(H�T$ L�D$0��������R�L�l$PL�|$@I����H�t$ L��ADŽ$�I�D$H����H��H���=H�D$8M��L��H�$H��I��L��L�t$P���L��AV�L$8�D$@��%AZA[����������H�5��H���E��H�5z�H���EH�D$H�D$H�D$HH�t$H��H������H�51�H��H���oBH��M��L��AV��L��1�L�D$�L$8L���D$@�%AXAY���������H�D$8H�t$H��H����~��H�5��H��H���AH�D$@H�t$H��H����N��H�5��H��H����AH��1�L��M��AV�y�L��L��L�D$�L$8�D$@�u$^_��������YH�D$8H�t$H��H�������H�5C�H��H���QAH�D$@H�t$H��H������H�5+�H��H���!AH��L��L��M��AV��1�L��L�D$�L$8�D$@��#ZY����d���#H�D$8L�t$H��H���L���/��H�5��H��H���@H�D$@L��H��H������H�5��H��H���z@L�����H�����H�D$XdH3%(�H��h[]A\A]A^A_��H�D$8H��H���H�D$H��H�D$���H��H�5��H���@H�D$@H�t$H��H����_��H�5��H��H����?�4���1ɺH�5~�H���B1�����CH��6���H�߹�H�5K��wB��H��H�5G��^B���f�1�H�ߺH�5��:B1ɺH��H�5
��$B�h����H�߹�H�5���A��H��H�5����A�����1�H�ߺH�5����A1ɺH��H�5���A����H�߹�H�5���A��H��H�5���vA�����1�H�ߺH�5���ZA1ɺH��H�5���DA����芑��f.���H����)H���H��xH���KH��H��H���@��ATUH��S��1�H��dH�%(H�D$1��X���H��H�5�Q%��H�$1��Q��������I����H�4$L�`HH��H��ǀ����H���8H�K(�H��H�5�$�~=H�K �H��H�5���f=H�K�H��H�5���N=H�K�H��H�5M��6=H�SH�sH�;�(�H�5C�H��H���=H�K�H��H�5��<H��H��H�5���<H�SH�sH�;�(�H�5��H��H���<H�SH�sH�;�i���A��H��H��H�5^;"�CH�SH��H�~�KA�H�5�n"H�L����CH�$H��1��HH�����H�D$dH3%(�H��[]A\���EH�E���U���D��H���'H�q�H��xH��KH��H��H���@AWAVAUATUSH���H�|$�t$(�L$,dH�%(H��$�1ۅ����D$,H�Յ�tl�����������H�rHH�����H�D$8H�UH�uH�L$`E1�H�}L�D$h�(�T$(��If�H�|$8����H�RH�uH�L$`L�D$hH�}��'�D$(H�D$8���xH�D$pE1�E1�E1�H�D$E��D�l$ H�D$@H�\$Ic��A�^�B�<9w)H�
r���Hc�H�>��DH�D$Hc��A�^�T$p�D$qM���6A�A�f.�O�8L;L$seK�<<A��M��H�t$L��讆��;\$(�l���M��tC�<�L$,�����H��$�dH3%(L����H���[]A\A]A^A_�f�I���L��1�A��I���L�D$0L�L$ H�D$�qL�L$ L�D$0J�<8I��M���b���DH�=�#�sI���v���@H�UH�uH�}�?%��DH��5'H�|$� 1���A��Mc�M����I��M�?	I���I���H�D$1�1�L�D$ A����pL�D$ I��H��M������H�M���Q�������)�k�dH�+�)��w����H�UH�uH�}�o$���P��������YE0����S�f(�fT�f.�v3�H,�f���%<�fU��H*�f(����f(�fT��\�fV��,�H������f�H�uH�}�$������@�M(H�j����f��t$,���$	H�D$8�ų�����A���A��D�,
�����A��E)�A��Ai�A��+)����D�
��A��A)�D���A1�A)�D��A1�A)�H�uH�W�KL�]D�L$\H�} L�uD�T$XH�t$HH�uH�E(H�|$@L��H�T�L�\$PH�D$0H�T$ L���`���H��E��H�Z�D�L$d�`AQAUD�T$pAR�L$PQ�|$hH��1�W�|$xWL��$�ASL�L$`H�|$H�@�H��@A�����@�L$h������MH�"��p����H�UH�uH�}���H��g%H��DH�|$� 1����A���J�����M� �����M������M H��������H�u�H��������*H��H��H��H��?H�H)�H�RH��H9������𺫪�*������)��I���)����fDH�u�H��������*H��H��H��H��?H�H)�H�RH��H9��a����𺫪�*������)��I���)��>���fDD�L$,H�
��E���3���������������H�D$8�ų��H�|$�0����D�2�����A��A)ȃ�Ai���+)Ɖ��D����A1�D�2��A)�1�A��A)� D���A1�A)�H�>��4�A�����@�MH�*��x���f��|$,����H�D$8�ų���8�������:�������)��i���+)lj���:����)��1�)Љ��1�)�PH�W�QVH�E(�`PH�E PH�EPH�|$81�D�MD�E�M��H��0A�����fDH�}H�
��H�P�HN�H�Se%�]���DD�D$,1�E�������H�D$8����@H�EH�|$� H�
E;'H�I��I1�H��H�M�#HI�I)�H�=�1����A���W���@�L$`H����/���H���H�'�����DD�T$,H�
m
E��tH�D$8H�HfDH��d%���@H�uH�
�%H�F�H��	v�H��H�
Ѹ"H�gfffffffH��H��H��?H��H)�H��H�H)�H��t�H�
n�"H��t�H��H�
�H��%HE��f��D$,����H�D$8�ų��L�
?�#��ȉ��
�����)к����i�)lj���4:����)���1�)ƉȺų����D�
��A��A)ȃ�D����+��A1�A)�H��H���1�VH�|$� �s�A[A^A�������H�UH�uH�}��������H�EH�=��KH�/c%H�L��4���@H�u1�@���h�������Q��������)�k�d9��C�����1�)�i9����,���@�D$,1Ʌ�����H�D$8�H�
���D�MH���������M���H�UH�e�KH�L����H�UH�uH�}�7���H�ab%H���h����H���H�W)Q�EH��H��H��H��?H��
H)�Hi€QH��Kh/��H)�H���PFH�H��H��H��H��?H��H�Ѻ�MbH)�H���������Lȉ���i��)�H��b$�$���DH�}H�
Nt$H�+$HN�H��a%���D�D$,����H�D$8�ų��L�
�,$��ȉ��
�����)к����i�)lj���4:����)���1�)����@H�D$N�O���D蛿�u8�	I��H�D$8��I�G��)ƍ�A��݇���ų����H��I�G�����D������A��A)ȃ�Ai���+)É؉��D����A1�D�A)�1�A��A)�	D���A1�A)�H����Z����D�OA�A�H�D$N����1�1��+���f�E1�1��+L�
{�#���f.�E1�E1�A�+�-����E1�1��+L�
N+$�b���f��k�H��H�D$8�EP���)ЋU8�C�����)����EP�CH�}@聓��H�C��E1��R�H�EHH��_%H����訁�����UH�V�SH��H��H��(dH�%(H�D$1�H�L$H��H�D$PH�ԔL�1�L�L$ �T�ZY���trH�|$�
H�PH��tJ����t$H�|$��H��H���p���C��xLH�+�CH�D$dH3%(uJH��([]�fDH����1�1��[��CH��fDH�5���1��5�讀��ff.���AVI��AUA��ATI��U��S�$�H�Å�tM���L��H��ǃ�H�CH�_���H��D��L���/�H��H��脼[H��]A\A]A^��L��H������ATA��U��SH��H�� dH�%(H�D$1����1�H�L$H�T$��L�D$H�5�R"�����tKH�T$�t$D��H�|$����H��H���2o���C��xKH�+�CH�D$dH3%(uIH�� []A\��CH���1��z��H�D$�p����H�5)��1�����F��fD�������f���1�����D��AWH�y�AVAUI��H��ATUSH��dH�%(H�D$1�H��ӔH��L�1��݌���tH�<$�D�HH��E�����xt9A�EI�EH�D$dH3%(��H��[]A\A]A^A_�f�L���%H�E D�@E��t�E1�L�5g%��E��A���_b�@H��H���@�y%H�E L��H�ߺH�@ Jc���*H�E 1ɾ
H�=C�H�@ Jc��^���E1��H��H��H�5�s"�2H�U H�5?|"H��H�B(H�J0�B�8H��H��Hc�t*H�U H��H�B(H�r0�B�8H��H��H�5���H�4-H�U A�H�5N�H�B(H�z0B�8H��H��H�ߋHHJ8��z1H��L���>H�E D9`�������@H�A��1�1�蓥�U����	}��f���AVAUI��ATA��U��SH�� dH�%(H�D$1��s�H��E��������L��H��ǃ�H�CH�������������H�sHH����q�I��H�SH�sH�L$��BH�;L�D$��@��8�?H���@��Hc�H�>��f�H��L���B��H�SH�sH�L$H�;L�D$�@��8�H�K�@��Hc�H�>��f��K�I�ŋCP���)ЋS8A�E�����)��A�E�CPA�EH�{@�b���I�E�+���f�E1�H�SH�sH�;���E���H��跷��H�L$dH3%(�pH�� []A\A]A^�@E1�H�ףp=
ףH�+H��H��H��H��?H�H��H)�H��H��H��)��f�E1�H�sH�;����r���f.�E1�k(�]���DE1�H�SH�sH�;����>���fDE1�k�-���DE1�k ����DE1�H�K�H��������*H��H��H��H��?H�H)�H�RH��H9������Ⱥ���*������)R��)����DE1�k���DE1�+���fDE1�l$���@E1틫��z���f�E1�H�1��g����Ⱥ��Q�ν�����)�k�d9��B�����1�)�i9�@���*���f�E1�k����DE1�H���H�W)QΠ�EH��H��H��H��?H��
H)�Hi€QH��Kh/��H)�H���PFH�H��H��H��H��?H��H)�H���������Mʺ�Mb����i��)�����f.�E1�E���A�mL���x��t����K��	I�ŋCP���)ЋS8A�E�4����)�D�4�E�u�CPA�E�|}���ų��D��D��H��I�ED����F�2�����A��A)ȃ�Ai���+)Ɖ��D����A1�D�2��A)�1�A��A)�	D���A1�A)�H�W�������E1�E��u0A�m��������������fD���������fD1��r�����w��ff.����U��SH��H�5�J"H��(dH�%(H�D$1�H�L$H�T$L�D$�����t_�|$H���uC��tnH�t$H�D$1��8�z������tH��CH��3f.�H�A�f��1�1��Ÿ�CH�H�D$dH3%(uH��([]�1��Ir��H��H�D$��
w��f.���SH��胪H�;H�0��8��~H�ԔH�H��Ӕ�[�ff.���UH��SH��dH�%(H�D$1�H�ԔH�H��tlH���f��1�H��H���� 1�H��H��谼H�t$H��蓵H��H��蘲�D$��H�����HE�H�T$dH3%(H��uH��[]�D賩H����v��f���AVAUE��ATI��H�5\�U��S��H��PdH�%(H�D$H1�H�L$H�T$H��H�D$H����H�D$HPH�D$HPH�D$HP1�L�L$HL�D$@��H�� ���tT�7�H��E��u���1�ǃ�H�CHI���p��H��H���g�����H��Hc�H�>��DA�D$I�$H�D$HdH3%(��H��P[]A\A]A^�f�1�E1��6p��H��H���k��f�H�D$8H��E�IH�P�H��wHlH�D$8H�H�D$0H�CH�D$(H�CH�D$ H�C(H�D$H�C H�D$H�CE��tw1�H���ͺH�|$@�t$1�1�H������H�|$@I����tE1�H�t$H��聳H��H��膰�D$����L�A�D$I�,$����L��H���U�H�|$@�t�H�>��1�1��x�H���L���٭L�l$@I��t^M��ui�x�LD�H���D��a����H����1�1��#�����fDH�H�D$8�����xM�I�����E1���fs��fD��E1��D���@��A��1������AWAVAUI��ATUS��1�H��D�L$dH�%(H�D$x1��:n��H�L$,��H�T$0H�D$8L�D$81�H�5�E"�&����t�|$,��u9A�EI�EH�D$xdH3%(��H�Ĉ[]A\A]A^A_�fD�;��t$H�Ņ��<���H�t$8H��Dž�H�EHH���i�H�E(�D$@H�E �D$DH�E�D$HH�E�D$L�E���D$P�E-l�D$TH�UH�uH�}�r
�D$XH�UH�uH�}�}
�L$�D$\���
H����D$`H�D$hH�D$pH�D$�@A��@��UI��H�D$@H�D$H�L$H�T$0H��L���pj��I��H��tH9�u[H�L��1�H����UI��A��u�H��貭�T$��tjM��tI9�u8L���U�z���H�t$8H��1�豽����@H���p��D$��t(I�v1�L���UE�uI�EA�E�<����H�|$�v��@H�|$8H���ӪH��H�D$�@�D$`HcH�D$hH�AH�D$p����p��f���E1��d���@��A��Q������f��H*��^+��X+��\+��f.���AWA��1�AVAUATUSH��H��xH�GL���H�G(H�G �L$0�T$�$H�T$PH�L$XL�D$@L�L$H�=�蘫1�H��H�H��H�EH�CH�EH�CH�E(H�EH�E H�E�H���� ����$$�C��5��f(��^
W��\��
c��$�YF��XF��Y�f(�fT�f.�v3�H,�f���=��fU��H*�f(����f(�fT��\�fV��Y
������5q��\��X���
���X��Y�f(�fT�f.�v3�H,�f���5>�fU��H*�f(����f(�fT��\�fV��Y
t��D��=���\��
p��D$ �$�Ym��Xm��Y�f(�fT�f.�v3�H,�f���-��fU��H*�f(����f(�fT��\�fV��<$L�d$hL�l$`�Y
���)�L��L���\�f(�����L$(�Y��X���Y=���D$����Y��\��T$�a���T$L������\$`�L$(L���Y��YD$h�Y��X���Y��X��Y���Ea���T$�L$`f�����\$h�\��Y��\�f.��Q����Y�f(�f��Y�f(��Y��X��Q�f.��l$��f(��T���Y$��XD$f/��r�\���Y��L��L���`���$L��L���t$�D$`�Y
���T$h�Y��Y��D$����T$(�\��Y���O`���T$(�l$h�L$�Y��YT$`�,$f(��T$8��S���T$8f���-e��Y��D$�Y��Y��l$(�X�f.��Q����$�S���Y)��L$ �\L$(����=E��D$����Y��X�f(�fT�f.�v3�H,�f���=�fU��H*�f(����f(�fT��\�fV��YJ��\�����^
���\��$E��t�t$����^D$�\��t$�Z��YD$�oU��L��L���D$ �;��YD$0��^���(�L��L���YD$�T$`�\$h�T$�\$�^���\$�Y\$h�L$ �T$�YT$`H��$��\�f(�f���H*���^�����Y$�X��H,�H�f/��rMf�H�L$HA������H*���X��H,�H�H�L$@H�H��艦L���H��xD��[]A\A]A^A_��
��f/�r2H�T$@H���A�H�L$HH-��H�H���H��H����e���,$f��E1��Y���/��H*��f(��^�H�T$@�\��X��Y��X�f���H,��
���Y�H�H�T$H�H*���X��H,�H�H�D$P�H�D$X������\$8�T$(�L$�%a���\$8�T$(�L$���L$�a���L$�����T$8�L$(��`���T$8�L$(���fDH��I��I��SH�ףp=
ףI��?H��L�:�M��I��M)�I�Z�L)�H�CH��HI�H��H�PH�%I�$I�$IH��H��H��H��?H�H)�H��H)�H)�H�CH��H��HH�K��H��H��H)�H��@��u7H��tH�=��Hc4��0DI��M)�O��O��I��L9�t��H�=��Hc4�H�H�H��H�pHI�H��H�H�%I�$I�$IL�H��H��H��H��H��?H�H)�H��H)�H)�H��u���HE�[�f���1����D������f���H��@��ucH�ףp=
ףH��I��H��I��?H�H��H��L)�H��H��H��H9�tH�G�Hc�H�D��DH��L)�H��H��H��H9�t�H�Y�Hc�H�D��ff.�@��@��u^H�ףp=
ףH��H��H��H��?H�H��H��H)�H��H��H��H9�tH�:�Hc��DH��H)�H��H��H��H9�t�H�Q�Hc��ff.����AWAVI��AUM��ATI��UH��SH��(��H�L$��H�ףp=
ףL��L��H��H��?L�H��H��H)�H��H��H��I9�tOH��I�^���A������D$�D$L��H��L���Z�����E���@D�x�Xf�H��H)�H��H��H��I9�t��I�^�����L��H��L�������D$�D$D�x��L�����L��H��L��H�D$�D$���L�T$�D�D$��D�E����A�A����I�]A�H�\$H�4M9u��H��([]A\A]A^A_�@H�ףp=
ףH��H��H��H��?H�H��H��H)�H��H��H��H9��L��H��L���!����D$�D$��D�y����fD�D)�D9�|
A���	M�u�|$D��)���m)ֺ)�9��D����$I�H�\$)�A�L���
����)�A��H�H�P�HM�H�H��([]A\A]A^A_�f�H�ףp=
ףH��H��H��H��?H�H��H��H)�H��H��H��H9���H���D$H)�H��H��H��H9�������D$���fDH��H)�H��H��H��H9�����E1��D$�t���@I�]A��uSH�\$H�5�@���DH�D$M�NM�MH�H��([]A\A]A^A_�D�D$�D$����A������T$������A��D��UH�պSH��H���!����H�s�H��H��H)�H��H��HM�H��[H��H)�H�]�ATUH��SH�G@H���@L�g@Ict$I�|$H���n��1�I�D$H�C(H��t��+KH�S@HcBH��HB�H�H�C(1�H��t�H�S@H��HcBH��HB�H�H�S@HcBH�RH��H�\��s��H�C[]A\��ATUSL�'A�$����<	��I�D$�
D��	tH��H��H�����u�L)�H�rH�ӿ��V��H��L��H�@�KH��H���Z��H�5J��@H��H�3H��tH���d`����u�H���Xc��H��[]A\�1�H���Fc��H��[]A\�fD1۾�ff.�@AUATUSH��H�/�E��߃�A<��H�MDH��H�H�����߃�A<v�H)�H�rH�ӿE1��
V��H��H��H�-��H��I��H��K��Y��H�5K��	f�H��H�kL���_����uLckH��H��u�L���xb��H��L��[]A\A]�f.�1۾��H����/w H��H��sH���H����/v����H��H��r����AVL�5�AUI��ATI��USH��
fDI�$H���3L�����N��H�SH��t���@��Au:I���H��HD�I�$�{.H�SuH�S[]I�$A\A]A^��I����HE���ff.��UH��SH���R^��H�]H�H��DP u �H�5��"H���b����uH��H�]H��[]�f��H�5;q"H���|b����tкH�5��H���db����t��H�5P�$H���Lb����u��fDATUSH��H���JЀ�.tJ��	vE��t'H�CDH��H�ÍJЀ�.t'��	v"H����u����H��[]A\�f���.t	��	��A��H�CA���H�D�H��A�HЀ�	��A��.A��D	�E�D9�A��H��D��u�H)ڿH�rH���IS��H��H��I��H���(W��L��1��~U��L���D$��_���D$H��[]A\�H���ff.��ATUSH���PЀ�	v+����H�C�H������H��H�ÍJЀ�	w�A��H�CA��f�H��H�ƒ�0��	A�A��9���H��A��u�H)ڿH�rH���wR��H��H��I��H���VV��L��
1��wE��L��H���_��H��[]A\�@H��ay��H��[]A\ÐUSH��H��H�/��[��H���
f.�H�L�H�0I��H��B�DFu�A��:t�I)�I����H�-�Jc�H�>���
1�H���c��H�}H�ú
1��~c��k�<H��[]Hc�H��fD1��}:�
H��ty�}:t��Mc��H��H�ףp=
ףH��H��[]H��H��?H�2H��H)�k�<Hc�H��H��H��H)�H�2�H��
1��b��H��k�<[]H��DH��1�[]���b��H�}H���D���ff.�UH��SH���H)�H�sH����P��H��H��H���T��H��[]�ff.�ATI��U��SH���o���H�����x���PH�
��Hc�H�>���H�ǂ�H�ǂ�H�H�BH�H�B H�H�B(H�H�B0H�3H�VhM���2I��J��L)�H�H�VhH��@���H����[]A\�f.�H�ǂ�H�ǂ�H�H�BH�H�B H�H�B(H�H�B0H��@���H�L����f�HcpH�I��H���z���f�HcpH�I��Hrx�]���@HcpH�I��Hrp�E���@HcpH�I��Hrh�-���@HcpH�I��Hr`����@HcpH�I��HrX���@J��L)������AWA��AVAUATI��H��UH��H�=��SH���KH���cX������H��H�=g��LX������E1�H�j�KE1�H�5=�H���(X����uE��u	I���t^I��HcCL9�tRA�H��H�3H��u�L��E��u8�����H�7�K�DH��H�H��t�Bi�H�I9�u�D;zu�H��H��H��[]A\A]A^A_�f�L�A��JՍBЃ�<	v9��t5��ttI�@�fD��t!H����t\H��I���J�D�JЃ�A��	w�S��uFI�H�DH��H�H�؀�-�HD�H���Bը�t��]���H��[��H�ay��û�ߐAWI��AVAUI��ATI��USH��H���H�7L�$��Ѓ�< t��	u$H�F@H��H��H���у�� t�	t�+����-�2ADž�H�+�E����<)��H���<)tH��H����u�H)�H�r�H�T$�L��H�T$H��I��H���]P��1�H�����L�����H��H���g�p������މ��,2�Q����)�A�A�ADž�Hc�k�<Hc�Hž/L���D��H����H�4$L���ҊH����I�EHADž�E1�L���X��E�,$H��:)uH��H��:)t�H��H��[]A\A]A^A_�f�H��H��H�H�3I���A�$A�EP�@���H����H�=�L��������L���E��ufA��c���f.�H��H��H�H�3I���A�$A�EP����H��H���*���1Ҿ�Z���E1�1�����A���tL��L��E1��W����E1����f.���AWAVA��AUI��ATUH�͹SH��H�T$L�d$0dH�%(H��$�1�Hc�H�\�1�L���H�� �Y��H�D$p�H�@�@H�@E��~S��S��H��
D��tI��I�MI9���DH u�H��DH t��u�DI9�sH��H��DP u�L9���H���L)�L�s L���I��H��L��H��H�D$@�M��I�H�D$PL�t$8��H��ay��H�5��H�D$xH�H�D$xH�PH�D$xH�PH�D$xH�PH�D$xH�P H�D$xH�P(H�D$xH�p0H�D$x�P8H�D$x�PPHǀ�H��$�H�D$(H�\$PL�=��L�-��H�D$8H�-H��H�\$XH)��D$lH�����;z���Ic�L�>��A�~I�V@��/��9@��5�h9@��6�;B@��9��9I�ֹH�=�f.�A�6�7�7�I��H��L)�H��
�f�H�|$@�U��H�|$��>H�D$pH�t$H�H�D$xH��$�dH34%(�ijH�Ę[]A\A]A^A_���CH�{<E��<)�j�<@�A�<E�r�GL�w<S�h/<)�.�<@��<S��A�FI�^<T�71<)���<@�>�<T�o
�CL�s<E��1<)��<@��<E���A�FI�^<R�~2<)���<@���<R�VL�sL�t$H�C<C�α���<D�NA�F���<A�F+I�V�B���<Y�3+H��H�ZH�t$XH��H�\$P��H�T$xH�Bǂ�ǂ�ǂ�H�T$xH�B H�T$xH�B(H�T$xH�B0H�T$xH�Bh����H���:S���N���D�CH�{<E�<)�3�<@���<E���L�sL�t$H�S��)��Q�WH�
����Hc�H�>���SH�{��U�?��D�V5��)�r��@�`���A�m�GL�w<T��s<)���<@��<T���A�FI�^<U��s<)�S�<@�J<U�j�CL�s<R�bt<)� �<@��<R���A�FI�^<D�at<)���<@���<D�QL�sL�t$H�C<@�t����<AuMA�F���<Y��sI���@�SH�{��R���)�����@��I��f.�H�t$XL��L�t$P���H�T$xL�t$PH��H�D$(D���E����ǂ�H�L$$H�rPL�l$(L��$�L���4���H�T$x�B8�L$$��� H���Q���,����SH�{��C����)�����@�xI���U���D�SH�{��O�w��h��=��`�9p��e�w���SH�{��O����A��1��)�p��A��I�����@�SH�{��A���)����A�	I�����D�SH�{��U����@�B���A��.��U���OH�W��N��3��@����L��3��N��H�ZH�\$H�R��/��>��(��O��,�?�H�߀�-��9��.��:��9��SH�{��R�g��E�F2��)�>n��@�����E�=�WL�w��B�vp��)�����@�������A�o�I�~H�|$HA�V��/��p��(�Rv��	����9��fD�SH�{��L����@�����I����L���WL�w��E��/��)�]���@�!�����E���A�VI�^��V��1��)�}���@�����V���SL�s��E�
2��)�����@������E���A�VI�^��N��2��)�����@����N�zL�sL�t$H�S��S�����߀�T�p���A�V��߀�H�I�V�#
fD�SH�{��E�W��d�.���e������WL�w��C�\��)�	���@������C��I�~H�|$HA�V��/��(��(��7��	�J�38���	@�CL�s<@��<Zv��a<�����L���GL�w<@��0<)�����fDI���w�����SH�{��U��
��o�����t�&,��u��
I����z�8����fD�SH�{��E����)�*���@����E���a�����SH�{��E����)����@��I������D�SH�{��@��j��Z������a�����f�L�wL�t$H�W��/����,����.�x���1�I�~H;|$8����A�VH�5�����H�\$H���S1���Pz����q���(����H�t$XH��H�\$PL�l$(I�\$H���H��H�D$(H�D$xǀ�ǀ��}t_@�L����H�T$(�
��	t�� uH��DH�T$(�
H���� t�	t�H��H�ٺL����H�D$(�8u�H���K�������SH�{��U����o�^?��`�!j��g�����L�sL�t$H�S��N�����-�ֳ��)�������-����1����@H�{H�|$H�S��-�ED��0��	�MDH���fDH�SH�T$H�K�q�@��p�UH�=G�@��Hc4�H�>��f�H�SH�T$H�K�q�@��p�H�=��@��Hc4�H�>��H�SH�T$H�K�q�@��p��H�=g�@��Hc4�H�>��H�SH�T$H�K�q�@��p��H�=��@��Hc4�H�>��H�SH�T$H�{�O���p��H�5����Hc�H�>��H�����L�sH�5%�L�t$H�KH���?H��+����RH�
���Hc�H�>����CH�S<@v<Z�\g��a<�QgH���1
�L�sH�5��L�t$H�KH����G��0L����	����c�fDH���D$hH�\$`���D�SH�{��C����)�E���@�4���C�>����WL�w��T��"��)�ϻ��@�������T���I�~H�|$HA�V��/�Y$��(��3��	��D��2����SH�{��O����h��=��`��f��e�����L�sL�t$H�S��W����-�=���)�������-����1����@�SH�{��O�
��A��(��)��f��A��I������@�SH�{��A�
��)�����A����WL�w��S�\!��)�ɺ��@�������S���A�VI�^��T��!��)�����@�u���T�@�CL�s<@�p4<)�8�������SH�{��U�G��a��<��Z�o�����a�z�L�sL�t$H�S��M�Vo��-�h���)�\�����-���1��V���@H�{H�|$H�S��9����(�	m��	��B���1���SH�{��R��
��E��(��)��d��@�����I���\�@�SH�{��L�o
��i�N;��Z�������`�����i�����L�sL�t$H�S��F�e���-�Ԛ��)�{�����-���1��u���H�{H�|$H�S��.�r�� �	l��	��z�� ���1���L�sL�t$H�s�V׀�Q���H�
0���Hc�H�>���SH�{��U����D��'��)��c��@�@�I���L�@�SH�{��R�/��)�����@�����R�~����WL�w��E�K��)����@����E�ʷA�VI�^��V�^!��)�����@�����V�s����SL�s��I��!��)�b���@����I�H�A�VI�^��O��"��)����@����O�RL�sL�t$H�S��T�����߀�U�H�A�NI�V��߀�S�S�J�� t	��	�AL�r���H�{H�|$H�S��.�z�� ��i��	��y�� ���1�DH��H��H)�H���4�H�5��H��H��H)�H����D�L��B� uހ�/�U��2���3�� ��9�:�WH�_��9���� ��
��-�G��.�N��/��s�VЀ�	��H�S�r��0@��	��H�t$XH�zH�|$P���H�l$xH��H�D$(�����pDž�L�l$(L�����L��H�EH�l$x��H�EH�D$xH�@H�L$xH�H��c�k��fD�SH�{��E����)����@����E����GH�W<E�d<@��<C��<E�7��BH�Z<N��<)�e�<@��<N�����CL�s<E��<)�2�<@���<E�̶A�FI�^<S��<)���<@�s�<S��L�sL�t$H�C<C�
����<D���A�F���<A��I�V�BL�r���<Y��I�^H�t$XH��H�\$PL�l$(�A�L��H�H�D$(H��H�D$xH�@ǀ�H���ǀ�H�D$xH�@ H�D$xH�@(H�D$xH�@0���H�T$x�@�������M�ǂ��>�fD��D�|^��H�&#��E���WL�w��X�|)��)�����@�����X���A�VI�^��T��)��)�(���@����T����@L�sL�t$H�S��(�����	���+�I�NH��H)�H��
���A�V��W����F�%�� ��I��tǀ�	t�f.�L�t$H���fD��F��]��O�٠��P����U���WL�w��G��#��)����@�����G���I�~H�|$HA�V��/�'��(� :��,�����-�)��.��)��c���H��@H�5��L���!��H�D$8����H�D$p�H�l$pHcuH�}H���I��1�H�EH�D$XH��t��+L$@H�T$pHcH��HB�H�H�D$X1�H��t�H�T$pH�=e�HcH��HB�H�H�T$pHcH�RH��H�l���M��H��H�E�
>����DH�5��L���a�����@�wH�5��L��H�D$x�?��H�t$H����`H�D$pH�H�D$xH�5��@8ay��H�D$xH�p0H�T$x�@Pay��H�ay��H�B(H�T$xH�B H�T$xH�BH�T$xH�BH�T$xH�BH�T$xH�H�D$xHǀ��M�D�H���H��H�|$HH9�r���D��d��0��Z�����`���I���e�D��H��c��Z�~9��I���H�{H�|$H�S��.��n�� ����	�}��� ��P1��5���D��q�'0��Z�X���`�M�I�����D��e�?0��`�-[��a��o��e��L�sL�t$H�S��U�ɇ��/�����,��P��.���1���@��H��b��Z��8��I���L�sL�t$H�S��.��m�� ����	���� �4�L��1��R���f.���d��0��Z�p���`�e�I����D<)����k���)�����@�N���E�/��WL�w��C�����b�3���c�����z���L��fD�BL�r<@�$<)�������i�_0��Z�����`�U���i����WL�w��G��1��f�����g���A�VI�^��H�^��)�����@�����H����SH�K��T��^��)�O���@�>���T��L�qL�t$H�Q��@��^����Z�� �������)����"�f���`�T���a��_��z���I���}�D��h�?,��Z�����`�����a���L�sL�t$H�S��X�nu��.�Ս��)�xN��-�#�1���@��q�.���r���I����z����W�D��e�,��`��X��a�����e�.��OH�W��V�35��o�bg��`�����c����L�r�R��O�g��)�D���@�}���O���A�VI�N��N��i��)�`���@�O���N�g�QH�Y��D�j��)�����@�"���D��*�{)L�s�
���D��d�O-��Z�P���`�E�I�����D��@�y�I����)����>�fD��i�g,��d�E:��e�.���i���L�sL�t$H�S��Q�����.�����)��/��-�c�1����@��b��-��Z�����`���I���5�D��V��,��H�?V��I��j��V�n�H�{H�|$H�S��,�Jl���ee��	���1���D��@�9�I����)����>�fD��b�G���c���I����z�����D<d��<e����I��<z�u����<d�ȵ<e�P�I��<z�U�����h��+��Z�����`�S���a����OH�W��Y�kW��@�����R�}W��Y�h���H�zH�|$H�R��-��^�� ��[��	�H��� �4!����D��`�4���a��I����z�����D��i�?+��d��T��e�����i����OH�W��R�[1��f�Rc��Z�������`�����f�����L�r�R��T��m��)��N��@����T�sNA�VI�N��H��n��)��I��@��J��H��(fD�AL�q<@��X<)����C���a�w+��Z����a�
I����D���c&���OH��H�ZH�\$H�J��9��4��0�Umu8H�r�R��/��a��0�?��9����:�C�H�\$HH�t$XH��H�\$P���H�\$xH��H�D$(D���E����;ǃ�L�l$(L���%���L��H�CH�\$x����L��H�CH�\$x���H�H�T$xH�H��c�'�H=ay����H��lH���H��FH��HL�H���L��@H��H9������:H���>��2@��,�T@��+tӹfDH�\$H���@��q�>@��:�>@��n�+=H�r�R��c��*��d��)��o���V��߀�V����H�^H�\$H�V��.�n����c��,w�� u5H�KH��H)�H������S�� ��W��W��	��WH�\$HH�t$XH��H�\$P�I��H�l$xH��H�D$(������HaDž�L�l$(�L�����L��H�E�F��H�l$xL���Y��H��H�E�2�����L��D�zdH�r��(f�H�\$H��@��rt�@��s��@��t��;@�JH�r��U��)��h�m]u��rL�r@��.���@��	��tu6A�vI�V@��/v@��0�D4@��1�Ab@��9�9I��fD�V���j�\���H�
-���Hc�H�>���JL�r��9�Mh��-�n|��	����-��;L��f�H�5����	��p�������Hc�H�>��L��D�JH�r��`�w)��e��^��a�w)��e������VL�v��P��{��C��{��P�����I�^H�\$HA�V��.�K��S��G��߀�T�����I�^H�\$HA�V��.��J��D�rG��߀�E��������S��߀�M��������S��߀�B��������S��߀�E�q������S��߀�R�]���H�KH�YH�\$H�Q�� �����	��������D�rH�z�NЀ�C�3�H�5����Hc�H�>����rL�r�NЀ�C����H�=����Hc�H�>��L���rL�r@��1�s.@��5�An@��9����L�rL�t$H�R��.��.��,��.��-��iA�V��/����5�`s��6�:���9��I��I�^H�\$HA�V��.����0��	���f��J��/�������5�bf��9�����L�rL�t$H�R��:t	��.��-A�V��/v;��5�{r��6�
���9w$I��I�^H�\$HA�~.u�s�VЀ�	�X�H�\$HH�t$XH��H�\$P���H��H�D$(H�D$x������?cH�@L�l$(�ǀ�H�D$xL��H�@ H�D$xH�@(H�D$xH�@0H�l$x����L��H�EH�l$x�i��H�E H�D$(���:����.���8����H�T$xH�L$$H�rP����I��A�NI�V��/�C�����0�	0��1�^��9�(����J��,�+���L�r��-��:��.����A�F��0<	����A�F��0<	�����I�^H�SH�T$H�C��0<	w�C��0<	��:H��H�t$XH��H�\$P���H�l$xH��H�D$(�������[Dž�L�l$(�L���B���L��H�EH�l$x�,���H�EH�l$xL�����H�EH�L$xH�H��c����H=ay������H��lH���H��FH��HL�H��s��������*��^��k��_�>��z������`����I�~H�|$HA�V��/w!I����,����.����1��'�D��^����_�.��z�]���`�T�L�wL�t$H�W��/�f��,�����.�L��1�����D��l����d����Y����d�<�A�F���<A�,���A�FI�����<Y��A�FI�^���<S�)����M����H����M���A�F<O�P'<i�0\���A�F���<N�����I�^H�\$HA�F<U�^v<S�v<U��A�F���<T����A�F���<E��I���G�����D������F�F�A�F<R��<O��<R�)�A�F���<I��I�^H�\$HA�F���<Du-��A�F���<Au��A�FI�^���<Y��
H�\$HH�t$XH��H�\$P���H��H�D$(H�D$H�D$xǀ�ǀ��>�F�D$H�D$L�l$(H��f.��I�ƀ�/w0H��s*H��H�D$(�I�ƀ�/wH��H�@r�fDL���H�ƒ�߃�A��wH��H��H�D$(H���
��߃�A��v�L)�H�rI�����L��L��E1�H��H��L�=�oK�w ��H�5��$H���8&����uA�GMcw�D$I��I�7H��u�H���)��H�D$(���	t�� u H��fDH�D$(�H���� t�	t�T$I�L$HL��L���^��H�D$(�8���H�|$�(������A�NI�V��/�2��9�4.��:�2DL�t$H������s�K���L��I��L�t$H�R��-�<��� �O���	���fD�� �����f�1��#��f�1�I����.����-����t��@�WH�_��9���� ����-vI��.tT��/�����sH�S@��9�{@�� ��@�����@����������,����H�KH��H)�H�L$HH���O���SH��H�51���@uЀ�2�w
��/����0�UMH�K��1H�L$H�S��'��/�,J��2�?t��9�{b��:�J�Q��/�6��5�eX��9�$�H�YH�\$H�Q��.t	��:��
�S��/��
��5��s��6�{
�{0H�S��sH�ZH�\$H�R��*��{���Dz�� �,'��(�J
�SH�C��@�4
��Zv��a���#
H�X�@<@�w�<Zv��a<�	
�SH�C��@�����)�}�H�������m�'��dw�$��_�����h���Q���f���r����s������z�%��L����D��s�����t�V����z����L���]�D<c���<d���<e�ӈI��<z�����0����d�����e�����z����L����D<r�|�<s����<z����L��������s�?���t��I�ހ�z�R�����D<m��~<n�$�<z���������Z���@�n
��E��D�WL�w��M�G��)�����@������M���A�VI�^��B�y��)�t���@����A���L�sL�t$H�S��D�l���߀�E����A�V��߀�R�1LI��I�~H�|$HA�V�� ���	��I�� ����r�f.���Z�_��@����O��C�WL�w��B����)�B���@�����A���A�VI�^��E����)�n���@����E����SL�s��Q�t���߀�R�2������f.�<s��<t����I��<z�����0����u�����v����I�ހ�z�b���
��D��.����,��
�H�5��D��Mc�B� �P�����<d���<e�$�<z���L��� �<d���<e�Y��<z����L������h�����i�7����z����L�����D��/�
��9�
�H�5��D��B� ��������fD�WH�_��1������mw*��d�
�����9�����d���R���f.���r����nt	��r���H��H�ZH�\$H�R��d�8����<q���<r����I��<z��������<r�S�<s�
�I��<z��������n����o�D��I�ހ�z������D�WL�w��N����)�S���@�u����N��I�~H�|$HA�V��/���(�t ��,�����-�
��.����O����p�����WL�w��R����)�d���@������R���I�~H�|$HA�V��/���(�� ��,����-��
��.������D��t���m����r�����t��A�F<U�WY<H�]Y<U���A�F���<E�w���I�^H�\$HA�F���<S�������A�F���<D�j�����A�F���<A�V�����A�F���<Y�B���I�^H���:������S����A�F<U�� <d��Y<a����A�F���<T������I�^H�\$HA�F���<U�����A�F���<R�����A�F���<D�����A�F���<A�����A�FI�^���<Y����D���fD��d����e�����z���L���}�D��I����GL�w<D��<)��<@����<D�ȧA�FI�^<N�.<)���<@���<N�f���CL�s<I�
<)�f�<@����<I���A�FI�^<G��
<)���<@���<G�M�L�sL�t$H�C<G�=����<H�E��A�F���<T�=���I�VH�ZH�t$XH��H�\$P���H�T$xH��H�Bǂ�H�T$xH�B H�T$xH�B(H�T$xH�B0�e���y����H����E������f���N����I�*����f���I�	
��O�����OH�W��W�-��o�H���v�%����H�zH�|$H�R��/��@��(�vJ��	�-\����E��D��u�֗��v���I�ހ�z�������D��/�q����_�h������f���d����e������z����L�����D<Z��A��aL��<������D��l���Z�����`�
���l���H�ZH�\$H�R��/���Z�]P��@�DX��Y����H�{H�|$H�S��,�JL����B��	�m��&��fD��m�����n�T��I�ހ�z������D��f�M���g�>����z����L����A�~I�V@��/�2�@��0�z
@��9�;�A�~I�V@��2��@��/��H�ZH�\$H�z@��V��@��D��@�� ��@��/�w�@��9�L�@��D�c��B���<A�T���CH�s���<Y�]H�\$H@���b���?F���[�������H�t$XH��H�\$P蚼��H�T$xH��H�Bǂ�ǂ�ǂ�H�T$xH�B H�T$xH�B(H�T$xH�B0H�T$xH�Bh�������fD��9��<��T���S��/�����1�� ��2��T��9���H�s�V��:t	��.���H���V��/�����5��S��9���H��H�^H�\$H�V��.t��:u)�S��/v��5�(r��6��{��9�u�H�\$HH�t$XH��H�\$P�_���H�\$xH��H�D$(D���E���R ǃ�L�l$(L��苶���L��H�CH�\$x����H�CH�D$xD���E���<�H�@�L��ǀ�H�D$xH�@ H�D$xH�@(H�D$xH�@0H�\$x衸���L��H�CH�\$x苸��H�C H�D$(�8:�:��8�#��H�T$xL��$�H�L$$L��H�rP����H�T$x�B8D�D$$E������H�5��L���]����������Z� ��t�+���u���WL�w��S��<��)�r���@�����S�õA�VI�^��T��<��)�>���@�w���T����H�{H�|$H�S��(��<��	��K������D��9��H�5��D��Mc�B� ��������@<Z��>��aL��<�b���
��DI��1�����fD<c���<d�Y���<z�0��L��������w�o���x������z���L���e��D��^�ә��_����`������z����I�~H�|$HA�V��/��?I����,�P���.����1��+���<m���<n����I��<z�����0��H�|$p�R�������s�S���t���I�ހ�z�R�����D��,����-��fD�WH�O��/��:��0����2��H�5f�D�€�3�@�QH�Y��1v,��m����d�B��9����du,������ ����-�
B��,���DH�|$HH�t$XH�|$P�l���H�\$xH��H�D$(D���E���_ǃ�L�l$(L���ȱ��H��H�C��������QH�Y��9�o�����m���r��?��n����r�k������fD��d�H���e�����z�J���H�����D��n����o����z�"���H���e��D��,�k���-�n�����.���������<h�Р<i���<z�p��L������<o���r��A�F���<R�b����A�F���<T�N����A�F<N��S<H��S<N�-��A�F���<I�����A�F���<G�	����A�F���<H������A�F	I��	���<T��������<f���<g�;���I��<z������x����n�L��i�����WL�w��N�l��m����n���A�VI�^��T��8��)����@����T�����SH�K��H�:��)����@�۬��H�����D��m�ט��n�z��z����L���=��D<Z����aL��<�����������l�r���m�����z�����L�����f���a�7���b�����z�u���L�����D��q�����r�d��z�M���L�����D��Z����t�[���u�A��WL�w��A��:��)������A����A�VI�^��R��:��)�-���@����R�����SL�s��X�)���߀�Y�;�鳿����Z�g��d�R���e�e���H�߀�z����4��@��w�,��y����A�F���<E�~����A�F���<At;�i����f����h�W��A�F���<O�G����A�F���<U�3����A�F���<R���I������d�����e��I�ހ�z�ؾ�������Z����h�����i����WL�w��L��9��)�����@�������L���I�~H�|$HA�V��,��B���a9��	������~����a�����b���I�ހ�z�8��������T�����W�>��A�F���<E�.����A�F<E��C<C���<D��[A�F���<K������I�^H�\$HA�F<S�s<Du4A�F���<A�����A�F���<Y�����A�FI�^���<S�����fD��s�i��t�.��H��H�ZH�\$H�R��h�u���H��H��H�\$H�R�������T��� �+���	�"�������O��.�WL�w��U�[��t����u�ѬA�VI�^��R��0��)�۬��@����R�l���SL�s��T�
1��)� ���@�������T��A�VI�^��H��1��)�����@����H�K��L�sL�t$H�S����.�� �����)�;������fD��n���i�~���L�sL�t$H�S��C��e��-�y��)�v�����-���1��p���fD��t��,��i�0����WL�w��X����)�����@�������X�ݟA�VI�^��T��/��)�՟��@�����T�%���SH�K��H�0��)�ӟ��@�Ÿ��H�i��f�L�qL�t$H�Q��(��f��	�-��������fD��I�9�����U�`����GL�w<N���<)�������[�����r�C��z�&���I��龺��fD��e����z����I��鞺��fD��t��
��i���L�sL�t$H�S��W��v��-����)�޾����-�U���1��ؿ��fD��q�o
��o�����L�sL�t$H�S��T�v��-�ˈ��)�������-����1�鈿��fD��t����p�F���L�sL�t$H�S��Q�Kc��-�7w��)�>�����-�����1��8���fD��e����z�����I��鎹��fD��n�*��i�o��ӽ�����Z����a�������I���S�����q�m)��o�2���雽��f���e����z�~���I������fD��l�û��I����z������X���fD��l�?��z�>���I���ָ��fD��n���i����L�sL�t$H�S��M��a��-��u��)������-�����1�����fD��u����z�ν��I���f���fD��c�;��z�����I���F���fD��u�����I����z�+���鈼��fDL�v�v@��,��@��-�8L@��.�l��@��/����A�VI�~��A��2������IcT�L�>��w�&���x������z�����L�����f.���)�����@�������U�����L������D��O����}����)�3���@�X�����G���L��������N�1���O�ʐ��U������V����BH�Z<@� �<)��H�t$XH��H�\$P�Ҫ��H���z��鎲����H��M��U�����B���<E����H�^H�\$H�F���<S��������F���<Du"���F���<Au���F���<Y�� H�\$H�R�����n����I�ր�z�\���������D��2��A�N���B���<T�?��H�^H�\$H�F���<U��������F���<Ru����F���<D�z������F���<A�g������FH�^���<Y�P���H��飻���BH�r<U��<D�W�<A�,
�B���<T�d���H�\$H��������I2����E����vH�t$XH��H�\$P�8���H�\$xH��H�D$(D���E����Aǃ�L�l$(�ǃ�L��ǃ��ۦ���L��H��˦��H�T$xH��H�BH�T$xH�BH�\$x�H�;�|���H�Ch�F�������2���+���
��s�VЀ�	�����H�{H��H9�������7�VЀ�	v���H��H�|$PL�l$(�K���L��H�D$(H��H�D$xH�@ǀ�ǀ�ǀ�H�D$xH�@H�D$xH�H�D$xH�@ǀ�H�D$xH�@ H�D$xH�@(H�D$xH�@0�Ī��H�T$xH��H��H�T$xH�BH�T$xH�BH�T$xH�B(H�T$xH�B H�T$xH�BH�T$xH�B0H�T$xH��H�H����B8������f���	��2�����O�����@�v���U���H��齽��D��@�}���F������R�U��L�r�R��S�d,��)�����@�ʲ����S���A�VI�N��T��,��)����@�����T�T���������B�_���O�v3��C���������<I����<O�p��A�F���<N�`����I�^H�\$HA�F<T��?<D�:��<T�_��A�FI�����<H�F���	��D�� ���1�������a���<���I���Ա��@��a���$���I��鼱��@�� ����Ϳ���� ���麿��L�sL�t$H�{@��T��5@��C��I@�� ��:@��5�y@��/�S�����L��I��L�t$H�z@��V���@��D�o�@�� ��:@��/����@��9�v�@��D�����B���<A�A�FI�v���<Y��DH�\$HI���Ӱ��L�sL�t$H�{@��T�y6@��:�$J@�� �=:@��3�$g@��5�>���@��:�Sx��L��I��L�t$H�z@��V��~@��D���@�� ��9@��/�K���@��9���@��D�4����2���f�L�sL�t$H�{@��V��4@��D�mK@�� ��9@��9��f@��:��w@��D����C���<A���L�����@��/�n��L�rL�t$H�R@��0��@��.������/t��9�9;��:���L���[���<r�o�����I������DA�>H���>��%I��L9�w�鱫�����(��5H�߀�	�
N�����=�����d�5-�f��	����)�L���@�����N���L���F��fD��	�79�.�������T�9�z������@�����U�q�H���>���fD��.����靼��H�߀�	��8����遼����e�*���k����'��`�����@�?<��E����ٸ��f���@�o���I�Y�H��鶸��fD��	�'8�V�������K�H��H��H)�H���=������-����'�q���	v̀� t���f���/�5"��3��:��9�	�����AH�Y��0<	�C���C��0<	�T�H���+��fD<D�%9<A�|���[�����o���I����z�&���郱�����o��G��z�n���I������fD��u��F��z�N���I�����fD��X�����4���f���r��D��z����I��鶬��fD��o��E��z�����I��閬��fD��u��E��z�ޱ��I���v���fD@��	���������Z�������`�����I���G����1��ñ��L���Q��L�r�R��.��&��/�'����9���L������H��H�ZH�\$H�R��t�����A�NI�V��E��2��)����@�����E�#��L�r�R��L��4��)�����@�������L�@�A�VI�N��F��5��)�P���@�$���F�����QL�q��T��6��)����@�?�����T�oI�VH�T$HA�N��G�q���߀�H���I������A�FI�V<E�g2<)��II������a���A�NI�V��U��1��@����I��1��U�����BH�Z<R��=<)��<@����<R�<����CL�s<S��<<)��#<@�l���<S��#A�FI�^<D��A<)���<@��<D�#��L�sL�t$H�C<@�q����<A����A�F���<Y�Ω�����A�NI�V��N��1��)�
���@�&��N�A���L�r�R��T��2��)����@�������T�~A�VI�N��H�3��)�v��@����H�@����A�V��.t	��:�m��I�V1��r@��/���@��5�w,@��9���H��H�ZH�\$H�R��.t	��:�����S��/������5�X?��6�QL�s��9�������A�NI�V��/����3������H��H���N��/����5�����F��0<	����H�^H�\$H�F</v)<5���<6u�~0����H�\$H�����H�t$XH��H�\$P�6���H�l$xH��H�D$(������j���2H�����H�5'aL������鿣��fDA�FI�V<M��/<@� <D�c�<M�O����BL�r<O�w.<)��<@�ǧ��<O��A�FI�N<R�D0<)���<@�a<R�����AL�q<R��2<)���<@�v���<R���I�VH�T$HA�F<N�~����<O���B���<W�F��H��H�Z�e���SH�s��/�W%��9�������f�H�5�_L����������L�sL�t$H�S��B��A��-�=]��)�T�����-�˦��1��N���L�sL�t$H�S��D��A��-�]��)������-�����1�����L�sL�t$H�S��D��A��-�Lb��)�����-�[���1��ޫ��L�sL�t$H�S��R��@��-��Z��)�������-�#���1�馫��L�sL�t$H�S��S�^@��-�rZ��)�t�����-���1��n����zL�r@��-��E�Wй��	�+.@��W��@��F�9@��M�M@��H��6@��M�>���A�VI�v��O�E��I�E��O����A�V��߀�N�	���H�^H�\$H�F<T�l�<D��!<T�����FH�V���<H����BH�Z���<S���?�f.�L���ȷ����.����1����L��H�5"���	@��p����@��Hc�H�>���zL�r@��9�<,@��,��AL��@��	u��zH�JH��@��/v�@��0�R���@��1�O&@��9�G���D�zL�r@��9wG@��-�A@��	���@��-�T���A�vI�V�NЀ�C����H�=(���Hc�H�>��@��q�	,@��:��+L�����L���rL�r@��1��7@��/�{��H�ZH�\$H�R@��0�la��.v,��/������9�~���I��I�^H�\$HA�V��.�d�����,�V����-�I/���KH�ڀ�/�4����5����6���L�s��9�l�������{H�S@��9����@��-�m+@��	�|���I��@��-�����#����L�sL�t$H�S��D�*J��-�Hi��)�X�����-�Ϣ��1��R���L��� ���L�sL�t$H�S��D��H��-�Uf��)������-�����1�����L�sL�t$H�S��L��H��.��c��)����-�W���1��ڧ��L�sL�t$H�S��T��G��.�1e��)�m��-����1�颧��L�sL�t$H�S��M�3H��-�d��)�p�����-���1��j���L�sL�t$H�S��M�BM��.�Eg��)����-�����1��2���L�sL�t$H�S��D��L��-�f��)������-�w���1����I��A�V��,�o���I����-��E��.�Y����A�v�VЀ�	�����A�v�VЀ�	���A�VI�^��0��	�վ���sH�S��0@��	�����H�t$XH�zH�|$P�Ŕ��H�l$xH��H�D$(����� Dž�L�l$(�L�������L��H�EH�l$x�i���H�EH�l$x�L���S���H�E����W��߀�C�z������W��߀�T�f���H�W�z/�X���H���r�NЀ�	�D����r�NЀ�	�4����r�NЀ�	�$����r�NЀ�	�����z:�
����J��/�������1�����2����r�NЀ��۾����H���z:�ɾ���r�NЀ�������r�NЀ�	������z:������J��/�������5�����6������z0�v�����H���J��	t	�� �\���H��H�rH��H)�H��������J�� ���H��tڀ�	t��(�����W��߀�O�������W��߀�V���������W��߀�A������OH�W��Y��m��R�g�����Y������Y����W��U��W��A��W��U������OH�W��N��|���L�����w�����W��߀�E�`������W��߀�B�L�������W��U�DZ��P�JZ��U�(����W��߀�G�������L��H�ZH�\$H�B<n�[/</�f2<1w H��H�_H�\$H�G<n�7/</�H2<nu�{d�	HH�\$HH�t$XH��H�\$P�z���H�l$xH��H�D$(������yDž�L�l$(�L���3����L��H�EH�l$x����H�EH�D$(�8/�����H�l$x�����I��A�V��U��V��A��V��U����A�V��N�s��L�	s��N�����I�^H�\$HA�V��.����D�f���H�ـ�E����:���DI��A�V��߀�E�������A�V��߀�B�������I�^H�\$HA�V��.�A��Q���߀�R�ܺ�����S��߀�U�ú�����S��߀�A��������S��߀�R��������S��߀�Y������%���f��W��߀�E�������W��߀�P������OH�W��S�*z��/�κ���u���f��W��߀�E��������W��߀�C�6���闺��I��A�V��߀�E�������A�V��߀�C�n�����I�^H�\$HA�V��.��'���8�� �������,�������.�o����SH�K��/�v�����0����2����3����9�j�����/�a���H���CH�{��0<	��H�t$XH�|$P蜎��H�l$xH��H�D$(�����Dž�L�l$(�L���V���L��H�E蚊��H�l$xL��證���L��H�EH�l$x�'���H�EH�L$xH�H=ay�������H��c���������I��A�V��U��S��P��S��U����A�V��߀�G������I�^H�\$HA�V��.����T���߀�U�Q������S��߀�S�8������SH�K��߀�T� ����º��I��A�V��߀�E�������A�V��߀�P�������I�^H�\$HA�V��.v0��S����߀�T�˷����I�^H�\$HA�V��.������ �� �i�����,�������-����R���I��A�V��߀�C�������A�V��߀�T�����I�^H�\$HA�V��.v���N����߀�O�2������S��߀�B�������S��߀�E�������S��߀�R��H�K鏹��I��A�V��߀�O�d�����A�V��߀�V�O�����I�^H�\$HA�V��.�����I��A�V��߀�A������A�V��Y�yd��R�d��Y�����I�^H�\$HA�V��,���.�������9�C�����/�:�������L�r�R��.��;��2�������/� ���阶��L�r�R��.��;��9v��}���L��H�ZH�\$H�B<n��(</��+<9������a���I��A�V��U��:��A��:��U�-���A�V��N�a��L�a��N�
���I�^H�\$HA�V��.�y��D���������I��I�^H�\$HA�V��/��;������ ����/� �����,�������DI��I�^H�\$HA�V��,����9�k+��I���I�^H�\$HA�V��,����9�B+H�ـ�I�W���鰴��I��I�^H�\$HA�V��,vN��9�+��I�����I�^H�\$HA�V��,v)��9��*��I�`���I�^H�\$HA�V��,������	���������5���I��A�V��߀�C�������A�V��߀�T�������I�^H�\$HA�V��.����N�������/�߳����9�ֳ���n���@I��A�VI�v��߀�O�@����>���I��A�VI�N��U��O��P��O��U�����Q��߀�G������H�YH�\$H�Q��.vq��T������m���I��I�VH��H)�H���)���A�vI���T���A�VI�v��߀�E������V��߀�C�������H�^H�\$H�V��.�� ���b�� �����馲��A�VI�v��߀�A�Q����VH�N��Y�0\��R�6\��Y�.����@���A�V��߀�E������A�V��߀�P����I���a���A�VI�v��߀�E����V��߀�B�ղ����H�^H�\$H�V��.�����Q�?�������D��zH�r@��U��2@��H��2@��U�����R��߀�E���������JH�r��U������d��Z��a�E���������r���@��E�ɘ�����r���@��A������r���@��R�����H�������r���@��O��������r���@��Ut��k����JH�r��R��Q��N��\��E��������@�JH�r��E�wP��A�}P��E�}��������JH�r��O��Q��H�\��A�U��������r���@��E�ٗ��H���r@��E��Q@��C�����@��D��p�r���@��K�������H�ZH�\$H�B<S��s<Du1�B���<A�L�����B���<Y�9�����BH�Z���<S�~��������H��H��H)�H������
�{���H�J�R��T��W��L��l��.�a����A���<M�R���H���QH�A���)l��t	��	�0���H�t$XH�xH�|$P���H��H�D$(H�D$x����3H�@L�l$(�ǀ�H�D$xL��H�@ H�D$xH�@(H�D$xH�@0H�l$x�s���H�EH�D$(�<:���<.���H�D$xL��H�p���H�T$xHB�ؐ����BH�J<L��S<.�X�����I����)�������@�.���鋔��I����)����阔���CL�s<@�X���<)�����{���H��H��H)�H���W����:��I��룀�r�nI����z�ŏ���"���I����Z���������I��������!���I����Z���������[I��������|���I���s������I���e��������o�_I����z�K���験����u�?��I����z�1���鎓��I����Z� ����}���I������鍓��I����Z�����^���I���t���I����Z����E���I���[���A�VI�N��.�Hk��2�Э����/�ǭ�����Q��,�������-�����.�����L�q�B�A�VI�N��.��j��9v��|�����R�Œ���GL�w<I��s<)����E������H�����H�����@��-�������0��	��I�ֹ�J���D�� �ן�������d�����L��I��L�t$H�R��-�ɉ�� ��������D��	�����鲍��f���r���Z������`��|��r��H�zH�|$H�R��/�0��(�%��	�T2������|�����a�f��b�������z�9���L��陣���<s��e<t�=���<z����L���x���<t�K8<u�F���<z������{�����Z�k��@�6����R�$~�WL�w��U�X��)��n��@�������U�y|A�VI�^��A�G��)�n|��A�]|L�sL�t$H�S��Q��s��߀�R�c���A�V��߀�Y�ѹ��L�t$H�H���<q��d<r�����<z�0���L���H����<c�3|<d�����I��<z���������q�Sp��r�2��I�ހ�z���鍖��D��s�a|��t�Q��I�ހ�z������e���DH�|$p���x�����s�rq��t������z�����L��鞧��fDH�KH�L$H�S��/������.���H���&������g�+y��h����I�΀�z�2����M���D<Z����aL��<���������g�@{��h�����I�ހ�z���隕��f.���g��k��h�k��I�ހ�z�Š��饣��D��Z��	��@������E����WL�w��M����)�xl��@�z�����M��vA�VI�^��B����)�s��@�����A�,���L�sL�t$H�S��D��w��߀�E�"���A�V��߀�R�����������s��r��t�"���I�΀�z����	���f���`����H�tzL���c����.�����,�4���H�������0��	�h����؅��H���M�����y�����I�ր�z�~������f���r��t��s�U����z�U���L���m���D��)��y��-���������s��i��t�B��I�ހ�z�������DL�sL�t$H�S��R��
��-��"��)�`�����-�׈��1��Z�����.������)�o���I���6���fDL��������Ɩ��������������Я�����s�Tu��t�@��I�ހ�z�b����
���DH�sH�t$H�S��/�,	��0�5��9��&��:�3���H�������)��u��,��u1�H�5]�D��龶����/�Qx��9����1�H�59�D���A����/u�I���Ç����)�%x��,w�I��骇��f.���,��t��/�Lo1�H�5�D�������q�j��r�������z����H���	���f��� �j��e�����,�"s��-������.������@�����g��h��h����I�΀�z���������DL��阑��@��l�@��t�t@��m�;�@��r�o���@��t�mA�VI�v��U��0��D��L��A�A���A�V��߀�T�0����M��@��r��h��s������z�]���L������DL�t$H�F�����Z����@�������C����WL�w��H����)�V���@������H�v��L���������@�/�����Z�Z���a���7��H���z���f.���s�5v��t�n��I�΀�z�����齡��D��_����N������Z�����_�t���1������,�t�����-���Q�����`��s��a�B����z�;���L���S�����q�Jh��r�I��I�ހ�z�������D�� ��g�������k��s��l�Z����z�ڄ��L����f���^��r��_��"��`��r��z��rL�wH�5�L�t$H�O��}0��-��0��)�������-�s���1������t�ms��u�������z�Q���L���i�����-�p���)�_���-�����H��D�AH�5�H��Ic�D���k���A��/��H��A��0�����A��2�����A��3���Mc�H�ϹB� ���J�����E������U�â���B���<N�����H�^H�\$H�F���<D�m������F���<A�������FH�^���<Y�������D��s�I����t����顿����u�H����`���������s5H�t$XH��H�\$P��v��H��H�D$(H�D$x�������ǀ�L�l$(�L����y��H�T$xH�H�l$x�L���t���L��H�EH�l$x�xt��H�E�������s���������H�t$XH��H�\$P�[v��H��H�D$(H�D$xH�@ǀ�H�D$xH�@ H�D$xH�@(H�D$xH�@0H�D$x������bH�@ǀ�H�D$xH�@ H�D$xH�@(H�D$xH�@0H�D$xH�@�G�����h�.����ѫ����.������ǹ����	������� �����������.�����H�ـ�/������QH����9�K����� �L�������� �g�����	�^���鱽�����`�p��a���I�ހ�z�2�������D��s�/�����t������u�����U�����r���I�ր�z���V���fD��d�b��e�9�����z�2���H���u���D��,�Hb��-�~�����.�
�����Î���� ������鰎���� �Hk1�頎����n�Zk��o����z�]���L������D��u�G��p�����H�zH�|$H�R��/����(�b/��	��E�u�����.���L��H�5�8�l��H������{�����!��
�����#�H�t$XH��H�\$P�s��H�\$xH�D$(H��D���E����ǃ�L�l$(�L���Tq���L��H�H�\$x�?q���L��H�CH�\$x�)q��H�CH�L$xH�H��c�ƅ��H=ay�������H��lH���H��FH��HL�H�际����.����������P�������V�V���L�r�R��E�m��)�4���@��~����E�>�A�VI�N��N�`��)�ۍ��@�ʍ��N������QL�q��T���)�����@�r~����T�̂I�VH�T$HA�N��G�a��߀�H����I���>~��fD���`����o���L�r�R��.�������2� �����/����������	�I����y���@��h���z��}��L��龖��fD��@������Z�����a������H���ʙ��f.���m��f��n�G���I�΀�z��}��静��D<o� ��鋏��@��W�&@��F��)@�� ��Gt
@��	��I�VH��H)�H��
��y��A�~I���_����c�=_��d�����I�ހ�z�}�����DH�YH�\$H�Q��/�b��.������C���@H�ZH�\$H�R��/��
��.����速��@��H�u)��Z�����I�r�I�~H�|$HA�V��,��'���M!��	�G�1�酊����H��(��Z�|���I�-�H�{H�|$H�S��.��!�� �SH��	�^�� �%�1��2�����l�@_��m����z��{��L���������@�%h��9�3�����/�����%�����a��`��b�j�I�ހ�z��{��酔��D@��g��@��Y��@��d��*�����o{���L�sL�t$H�S��.���� ����	��R�� �7{��L��1��U���@��h�;@��c�	*@��e�nJ@��d����{����_����S�m�����Z����_��z��1��_���L�sL�t$H�S��S����-�K/��)�-����-��z��1��'���@��t�3@��l��)@��h�z���C���<O�pz��A�F���<U����A�F���<R�p��L���T��@��gw�@��Y��@��d��)�9���z��<c�0���<d��<e���������� �W����������x�s���y�����H�߀�z�/����u���DH�5�2L���f���z����@����9w	��/��I���y��D��,���H�߀�-�C�����.�ϵ���鈇��<n�s<o����<z�Hy��L������d�����e�s��I�ր�z�"y��酏��D1��9�����i����Z�g�����`�����i�U���H�Z�R��S��"��@�H���Q�z�����S�q����SH�K��D�]>��)�˾��@�k���D�U���鰔��<d����[I��<����ux��@��qwoL��@��n�R����x����m�}��n�r��I�ր�z�?x��颎��f.�1��Q���<d�}_<m�2��I��<z�x���q���f�@��r���@��s����L��@��t���������q�L��:������n�����鷗��@��.����@��/��<I��@��5�A�~I�v@��-�+�WЀ�	��*I������<q���<r����I��<z�Ow���j���f.�L��� ���L�rL�t$H�R��/�������9������I�^H�\$HA�V��:���� �MH��.t	��:�����I���i�����s��i��t� ����z��v��L���l���@��k�����l�����z��v��L���E���D��g����h�>���I�΀�z�rv��鍒��D@��	t
@�� �Xv��1�@��	����@�� ��{�������s�����t������z�"v��L���ʀ��f.���1�~'��2��H�J�R��/�V'��3�z'��:������c���fD�� �,��������� ������҃����t�k����q���@�� ���魃����e����f���I�΀�z�gu��邑��f�@��w�(�Pu��L��1�����g�0���h��I�΀�z�(u���C���<h�]�2���A�F���<U�"�����I�^H�\$HA�F���<R�.�����A�F���<S�N���������s��z��t������z��t��L��鑍��f��� ������鵂��<q���<r���<z�ut��L���U���D��2�=���I�^H�\$HA�V��:�(�� ��E��-��Z����I�޹����<E��<U�3���A�F���<N�
�������<e��<ut��
���H�^H�\$H�V��/����.�����8���f���D�~����O��f�L��H�5�,�`��H���)���=o����b�����c�W���z�ޯ��H���!~�����d�#���e����z�Us��L���}��D��,�����-������.�������K����SH�s��/�I��3�ɏ�����H��H�qH�t$H�Q��/����9���H���l��f.���`����Z�E2��YL�����������D��_���G�e�����Z�n���_��r��1��x����/���1��w��<d��{���飙��f.���m��v��n���I�΀�z�2r���M���DH�ZH�\$H�R��.������/�ݔ����9����H�����H�߀�9�M����L������m������n��:��z������q����	���������H�t$XH��H�\$P�|e��H�T$xH�D$(���H�ZXH�Z`H�ZhH�ZpH�ZxH����������o�������o��H����o������&H�t$XH��H�\$P�e��H��H�D$(H�D$xD���E���R���H�@ǀ�H�D$xH�@ H�D$xH�@(H�D$xH�@0H�l$xD���E�����Dž�L�l$(�L���xb���L��H�EH�l$x�bb���L��H�EH�l$x�Lb���L��H�EH�l$x�6b���L��H�EH�l$x� b���L��H�E H�l$x�
b��H�E(H�D$(�8.��p���	L��H�l$x��`��H�D$(�E0�8�sp��錓��fDL�rL�t$H�R��.�ɑ����/������E���@���
(H�t$XH��H�\$P�c��H�l$xH��H�D$(D���E�����Dž�L�l$(�L���La��H�E����)�jo����s����s�����t����z�Jo��L���*���f���A���4o��L��锅����g�]���h�������z�o��L���)���f��� �\�����}����/�|�����,�L�����-�������.����5���@@��d��#@��f��1@��h�Qt��L�����f.�<r����������D<h�������A�F���<N�z�����A�F���<I�f�����A�F���<G�R�����A�F	���<H�>�����A�F
I��
���<T�����!������v�	�I�ր�z��m���N���fD<r�%}<s�l��<z��m��L��������O��H�t$XH��H�\$P�a��H��H�D$(H�D$x��������H�@L�l$(�ǀ�H�D$xL��H�@ H�D$xH�@(H�D$xH�@0H�l$x�
_���L��H�EH�l$x��^���L��H�E H�l$x��^��H�E(H�D$(酐��<q�;<r�d������@��t�~���@��m�U@��r��l��1�����zL�r@��/����@�� �L���@��D��@��F�=r��A�VI�v��R����O����R�r��A�V��߀�I�r����@��5�"���@��9�������@��l��@��d�5@��Y��@��d��q��A�V��߀�A��q��A�VI�v��߀�Y��q��H�V����@@��,�~���@��-�>���A�vI�V@��/�X���@��0��:@��1�E@��9�:����r�NӀ������L�r��9�������C��0<	�����C��0<	���H�������Z����@�������T���H�OH�L$H�W��/�_"��(�8H�π�	�@�i�����"y����.�A����.��@I�VH�T$HA�N��.�0)��0��	��H�ZH�\$H�R��@����va�� te��.�[����k����I�NH�L$HA�V��.�KS��0H�ˀ�	�>���H�YH�\$H�Q��9�4�� �,Tt	��	����H��H��H)�H����f�����A��7��w��	t������� tˀ�A�ь���C<L�'<.������C���<M�����H���SH�C����0��	��������������@L�sL�t$H�S��.��&��0��	�=������f���9�5���H�YH�\$H�Q��:�QG�� �)Kt	��	�����H��H��H)�H����e�����A���������	t�鄡��f.��B���<U����L�vI�^H�\$HA�F���<R��n����A�F���<S�U�����A�F���<D�A�����A�F���<A�-�����A�FI�^���<Y�������<c�<�<d�=���I��<z�mh���P����@��w�^@��y��m��L�����A�F���<C�Tz����I�^H�\$HA�F<S��&<O�����A�F���<N�F�����A�F���<D�2���饎��f�L�sL�t$H�S��H����-��;��)�8l����-��g��1��2m����_����O��L��Z�η��_��g��1��m��@��G�@��L�A@��M��@��R�Ug��1�@��S���L�������_��#��X��x����Z�8r��_�g��1��l��L�sL�t$H�S��V�(��.�':��)�y���-��f��1��hl��L�sL�t$H�S��M����-��3��)�6k����-��f��1��0l��@��W�L�@��Y��f��1��?���@��G��@��D��������lf��@��r�������s���L�sL�t$H�S��S��P��-��P��)��j����-�%f��1��k��fD��/���1��k��L�sL�t$H�S��F�<��-��5��)�`j����-��e��1��Zk����H��1��Z�x��I�(�L���|��D��_�D��T��n����Z�$���_��e��1��k����_����S��b����Z�-~��_�Ye��1���j��L�sL�t$H�S��M�Y��-��.��)��i����-�!e��1��j����_�"��C�i����Z����_��d��1��yj����`����Z����_��d��1��Wj����_�-!��E��q����Z��m��_��d��1��,j��@��H�	@��Ft@��H�	��d��@��F�vd��1����L�sL�t$H�S��A����-��-��)��h����-�>d��1��i����_����T�Bc����Z����_�d��1��i����c���
���I�^H�\$HA�F<S��2<O�:��A�F���<N�T�����A�FI�V���<D�<���鐾��f���.�O�����/��(��5���L���zL�r@��-���wй@��	�����L�rL�t$H�r�N���p���H�=f[��Hc�H�>��@��.�E���@��/�=���@��5v���I���c��<s�q<u������N���D@��-�����@��.�^���@��/���G���b�}��^��5��V���L�������r�������s�Ȃ��L��t�ԁ��闂����Z�,��)�g��L��@��~���tb��H���S��.t	��:�/��H�K�����u�����I�ր�z�Ab���x��@I��1��g��@��y�$b��1�����I�^H�\$HA�F���<N�M�����A�F���<E�4�����A�F���<S� �����A�F���<D������A�F���<A�������A�F	I�^	���<Y���靓�����o���KH�S��0��	�f���H���ٙ��f.���)��e����,�Na��L���@��H��H�NH�L$H�V��/������9�����H��鮳��@�� �t�����-o��<@�u(<E�]w���BH�Z<S�&(<)�Y<I���Te���Wq���<et�I��<z��`���w��@��h� �Sf���R��߀�U�Cf�����@��M��&�`��1������i���f��A�V��߀�N�f��H�^H�\$H�F<U�[=<S�p���<U�f���F���<T��������FH�V���<E����������rH�J��0@��C��h��H�=�Y@��Hc4�H�>���FH�N<-t��0<	��~���y-��~��H���A</��~��<2���<3�S�<9��~��H�AH�XH�\$H�P��q��Y��n�����xd������H��H������BH�J<-t���0<�H~���y-�>~���A<2���</�*~��H�Y<0H�\$H�A���<n���</�&��<9�UY<n����yd����v����BH�J<-������0<	��}����Q��߀�E��}�����Q��߀�P��}�����QH�Y��S�-���-��}���S��/�z}�����0�����2�����3��c���s�VЀ���c����H��H�t$XH�{H�|$P�Q��H�l$xH��H�D$(�������Dž�L�l$(�L���O��L��H�EH�l$x�M���L��H�EH�l$x�O��H�EH�L$xH�H=ay���k���^���Q��߀�C��|�����Q��߀�T��|��H�Y�{-��|��H�����Q��߀�O�j|�����Q��߀�V�V|�����Q��߀�A�D|�����QH�Y��Y�%���Rt���Y�!|����Q��U��G��A��G��U�|���QH�Y��N������L�V�����{���Q��߀�E��{�����Q��߀�C�)����{���Q��߀�E��{�����Q��߀�B��{������Q��U��E��P��E��U�m{���Q��߀�G�]{���������a���A{��A�V��߀�N�0{����I�^H�\$HA�V��.�Bz����T�5����߀�U�uz�����S��߀�A�\z�����S��߀�R�Hz�����S��߀�Y�4z���>�����,��z����-�M���A�V��/��z����2��3��3�xA��9�}z��I��I�^H�\$HA�V��n�@A��/�z����9�Ï��n�h��A�~d�]��������� ���1��8i���� �l�����%i����U�t��9��������fD��9����H��������H��<M����}��<u�L�����l��@��m��@��d��2�\x��H��锄����`�
��Z��8��UL���������p��f���@�7��/�NZ��1���_����H�H&��Z��Q��I���L�sL�t$H�S��,��6���14��	�Z��L��1��"h����_�'��E�����Z�����_��Y��1��Y_����_�]��N��9��Z����_��Y��1��._����`�_��Z�"6��ML���������o�����f��~����g���L�sL�t$H�S��G��<��-�[��)��]����-�=Y��1��^��fD��/���1��^����P�0����A����{����@���Z�$6�B�<�R�����o��@��p�����z�2���H��������_���E�t7��Z��g��_��X��1��^��@��Sw�����3^��L��@��T����@��W�^��L���*��<t�G�������I�VH�T$HA�N��.����0�k�H���z���I���X����`����A����P�����z���L�sL�t$H�S��.�2��0��z���=���@��o�o�h]��A�V��߀�R�W]����A�V��߀�T�B]���V��N�I��H�I��N�#]���V��߀�I�]�����V��߀�G��\�����V��߀�H��\�����V��߀�T��\��H�V������.�t����C���f.���x���r�"|��H�{H�|$H�S��9�F��(�u��	��t�%������d��fD��_����N�C�����Z�.���_��V��1��\����_���R�������Z�����_�aV��1���[����_���D�i�����Z��^��_�6V��1��[����q�km��r�\����s��g��I�ހ�z�V���`����d���a��[���W��@��U�g@��/���@��U�su�����<s�/)<t�
������{h�������H�CH�XH�\$H�x/���ܷ����KH�S��0��	���H�ZH�\$H�R��*�]���@+�� �`���H��H��H)�H����Q�����*�*?��w��	t�����D�� tǀ�(�l����"���D��Z�����D��_����E��W����Z�~l��_��T��1��GZ����[<�b_���5e����@�tk��/t	��9���I���T��fD��`�Q��Z�F-��NL���V����j��D��Z���)��X��L��@�*m���=T����)�����,�%��I���#T����d�3W��z�T��1�I�VH9��rP��A�~H�5VWD��B���,@��.��,@��-��Y��I���UY����/�]&��.��S��1��<Y��@��M��$@��H���@��M�CY��������/�ެ��9����I����@�qS��H����i��f������E�RS��@��G�h���@��D�Oj@��F���L�t$H�*S����/�!S����9��jL���.����AI�����S��H���]����@���Z��a�SH�K��@��a��Z�pa��a���\aH�YH�\$H�Q��/� )��^�p��_����`�������z�����H��H��H�\$H�Q��/��(��^�J���_����z�Š����`�����H�YH�\$H�Q��/��(��^�����_tr��z�������`�����H�YH�\$H�Q��/�s(��^�����_t<��z�V�����`�M���H�YH�\$H�Q��.�m���_�xit	��/�#���H��H��H9��N���R��@������Zv��a����H��H�\$HH9���M�����@��(��_w��Zv؀�_t��É��@��z�������`u�鬉��@��t�@��m�����@��r��V��@��s�_�����@��X�Q��@��Y��P��1�L��@��W�����@��Y��V��鳽��fD@��m�O�@��r��P��1�������,�!���-�{�����.������^��<n������b��<)��P���T��@��f�tP��1������s����t�&���z�����H���Z��f.��� �����A������C<L�k=<.������C���<M�u���H�C�PH�X���a<��t	��	�S���H�t$XH�{H�|$P�C��H�l$xH��H�D$(�������Dž�L�l$(L����>���L��H�EH�l$x�_A��H�EH�D$x�������H�@�L��ǀ�H�D$xH�@ H�D$xH�@(H�D$xH�@0H�l$x�@���L��H�EH�l$x��@��H�E H�D$(�<:t<.�y���H�l$x�L���@��H�E(H�D$(�8.�U���H�l$x�L���?���E0�9�����)��N���2S����)��N���$S��<)��N���S����.�^k���y��H�J�R��/v�2�����9����H���X�����a���VN��L���nj����d���ss��L�sL�t$H�S��M��1��-��2��)��R����-�2��S��@��n�"s����o� ��L�sL�t$H�S��/��:��,����.��:�	�FS���zI�oH�ZH�t$XH��H�\$P�|A��H�l$xH��H�D$(D���E���y��Dž�L�l$(�L���3?��L��H�EH�l$x�<��H�EH�D$xH�@H�L$xH�H=ay������M��@��H�����M��f���_���I�lc��Z�����_��L��1��oR����G�>Q���GL�w<O��&<)��7��L���9Q��f�I�^H�\$HA�v�V���p��
H�
{G��Hc�H�>��L���~H�N�WЀ�C�{k��H�=I��Hc�H�>��p�� ��c�.��p�pq��H�{H�|$H�S��9��.��(��P��	���s�����,Z��@�{0H�S������{�D��/��1��bQ����n�O��^����_��p��1��@Q����_����G�$^����Z�����_��K��1��Q����/�-�1��Q����/��b1��P����/��1���P����s�}p����t�{��H�{H�|$H�S��9��9��(�����	��O�������9Y����EL���ma���BL�r<K�9<)��8��J���bO��@��Y���@��d�}P�����f�<d�����q��I�^H�\$HA�V��-�
u�J�H�ڀ�	��uH�t$XH��H�\$P�U>��H�l$xH��H�D$(������T��Dž�L�l$(�L���<���L��H�EH�l$x�;��������p�*i���j����C�O��@�J����CL���Wb���Z`��f�@��L�����@��M�]�@��R�}���I��D��`�G��Z�L��RL��������
`��D��/��1��O����/����.�~I��1��O��@��/�mI����L��I��L�t$H�z@��T��@��C��(@�� ����@��5��.@��/�'I��L�rL�t$H�z@��V�Z�@��D�ߓ@�� ����@��/��H��@��9�j�@��D��H���B���<A����֗��f.���Z����@��5��E��d���QL�q��M����)�����@��H����M�ͱI�VH�T$HA�N��A�ǰ��߀�B�̰�J��߀�E��H���J��߀�R���L�r�u����sH�S@��/�p@��0��@��2��@��3��o�C</�r���<5�ڇ<6�b����C��0<�S�����H��H��H�t$XH��H�\$P�;��H�l$xH��H�D$(D���E������Dž�L�l$(�L���B9���L��H�EH�l$x�,9��H�EH�D$xH�@H�L$xH�H=ay��������G����_�L��N��?��Z�l?��_�G��1��L����a���f���W��߀�N��e��鍦����r�l����s���L�sL�t$H�S��S��.��-�0���)�)K����-��F��1��#L��f���p�3��e��A�V��߀�R��e����I�^H�\$HA�V��.�*�����H�����߀�I��d�����S��߀�L��d��H�K�Jg����a���$e��A�V��߀�N�e����I�^H�\$HA�V��.���鸬����_�!��N��7��Z����_��E��1��BK����_����B��G����Z�ޚ��_��E��1��K����p��
��d���Q��߀�R�~d����H�YH�\$H�Q��.����������/���1���J����s�aj����t�_��L�sL�t$H�S��T�W-��-�����)��I����-��(��|J��f���-�V}����,�M}���C</�<}��<1�L�<2�1�<9�$}��H�CH�X�@</�}��<5��<9v+<:�}��H��H�X�@</��|��<5�ˈ<9��|��H����|��H�l$x�L���$6��H�E(H�D$(�8.��g��H�l$x�L����4��H�D$(�E0�g����/�y�1��I����_����U������Z����_��C��1��pI����p�s��b���W��߀�R��b���l�����_����X������Z��Q��_��C��1��!I����d��h����e����L�sL�t$H�S��U�h#��-�����)��G����-�TC��1���H��D��w�jh����x�h��L�sL�t$H�S��S�D#��-�����)��G����-�C��1��H��fD��b�h����c���H�{H�|$H�S��9��,��(�Ɉ��	��Z������P��fDL���_e����/���1��H����/�
K1��
H����/��J1��G����p�e����a�\���-e��f���/�*"��,�e����-�����.������d�����RL��������wX�����a���	a���B���<Y��`�����D��)��A���RF��@��r��@��n��q��@��r�|_���q����u��`��鄪��H���Xd��<o���y����h��fD��W��_��H�ـ�X��b����_��fD��q��f����r����H�{H�|$H�S��9�"9��(�9��	��8��}����>O��fD@��-��@��,��^���c���y����z�f����@��L��H�5���-��H���Y����m<����h����a��_���l�����n�4��e��_�����@��u�;F��������o�-F��������_�p@��1���E��@��c�F��@��d�#@��e�G����E����c�he����d�f��L�sL�t$H�S��M�7N��-�"N��)��D����-�@��1��E��@��m�e����n���L�sL�t$H�S��S�����-����)�>D����-��?��1��8E��fD��d��d����e����L�sL�t$H�S��K��H��-��H��)��C����-�e?��1���D��fDI���P?����r��D��������a���6?��L���X����m�%��l�Pd��H�{H�|$H�S��9��1��(�����	����S{����M��@��e��
��u�}D��A�V��߀�N�lD��������@�ܶ��/��>��1��)D��H�t$XH��H�\$PL�l$(�h2��H�l$xH��H�D$(�����t����i��c��L�sL�t$H�S��R�Q���-����)��B����-�3>��1��C��@��[I�ހ���H���>����[L��<�nT���>����[����=��L���UT����[I��<�GT����=����/���1��TC����d��b����e����L�sL�t$H�S��R�ח��-�����)�B����-�y!��C��D@��u�]���l����m��b����n����L�sL�t$H�S��S����-����)��A����-�&=��1��B���@��e��B���{��f���@�a��/��<��1��qB����a�������_�����<M�������[����[I�ހ��aG���<����[I��<�NG���<����[I�ހ��rU���<����[I��<�_U���r<����[L��<��X���_<����[L��<�qX���L<����/���1���A����l�z��d�^a��L�sL�t$H�S��@�j���,�����.�<����/��;��1��|A��f���J��L���FR����[L����W����;����;���?@���AL��I���1@��I���;��I����;���@��L���W����;���@����/�E�1��A����[I��<�RT���e;��I���];��I���T;����?��L���gW���A;���?��I���4;��I���+;���?��L���Q���;���?��<)�;���?���;���{?��L���[Q����:���h?��I����:��I����:���R?��L���2Q����:���??��I��A�vI�~�VЀ�C��Y��H�
`8��Hc�H�>��p������u��Y���x�����@�h��/�j:��1���?��I��<)�X:����>����c����d���I�΀�z�5:���PV���� ��v����EH����d�?_����e�=��L�sL�t$H�S��U�:R��-�R��)�c>����-��9��1��]?����E����U�m?������W����X���9���1��G����/��1��?��I���9����o�����U�k�����m�vX���#������[���T9��L���O����[���@9��L���O��L��1��VG��I���%9���=��L���8U���� �����.��[���SH�C��	�>#�.���ʧ��f.�L���@O��I����8���J=����8���?=��<r���<s������CL�s<D��<)�mH��8���=��@I���8����[���t8��L����N��I���d8��I���[8����<����e�7����X��@��9�����@��:�48����L��I���P��/�8����5�����9��<���8��D��r�
�W��H�^H�\$H�V��.�n�����B�o�����߀�C�KV�����S��߀�H�2V����I�^H�\$HA�V��/������0�
}��9��[���SZ�����q���f��\��L�sL�t$H�S��S�f���-�����)��;����-�57��1��<��fD@��w�&�@��y��<������H�{H�|$H�S��9�;��(�������	�8?�Fs����D��I����6����@�6��/��6��1��@<��I����6���(;��@��f���G<�������/��1��
<��I����Z�w6����:����u�yU���[�����/�.O1���;����u�[U���9�����I�a��O�DU���B���<N�5U���Ɛ����O����R�U���B���<I�U���V�����l��$��T��I�^H�\$HA�V��.�T����X�h������H�ـ�Y��V���<T�����[L����Q���5��@��D���@��F�7;�����L����K���u5����9����-��$��+��q����,�]_���A��0<	��q���AH�y��0<	��|H�t$XH�|$P�)��H�l$xH��H�D$(�������Dž�L�l$(L���3$���L��H�EH�l$x�&��H�E陗��@��i��	��o��S�������m��Y����n����L�sL�t$H�S��C�-���-����)��8����-�h��9��@@��g�o@��Y����@��d����A����?4�����/�/4����9����@�4��L���}J��DA�V��߀�C��9��I�������/�	���9����I��H����@��>����3����)����,�����I���3��fD��l�4��m�%���z��3��L���uL��DI���3����r�.$��R��I�^H�\$HA�V��.�����*�����u�\R��龔����)�>3���7����[I�ހ���=���%3��I���3��I���7����,�&H�π�-��n����.�\o����A����/�.1��g8����m��W����n�����L�sL�t$H�S��C�Z���-�B���)�#7����-����8��I����z��2����6����`�;��P�<U���f����[I������6���T2��I����)�H2����6��I����Z�72���6����)�)2���6����w�FW����x�D���L�sL�t$H�S��S��%��-�t%��)�j6����-��1��1��d7��f.�@��h����@��c���@��e�� @��g��1��@��f�(��@��h�����L��1�駞��f.�I���w1����5��L����G����u�qP���D�����/�Ł1���6����/�Ɓ1���6��I���31���5��A�N��,�0P��I�V��.�-��/�P����9�P���a��<o�gr�����6��f�<)��0���S5����r��
��y��O���j���<j����[<��0��L���Q;��@��g����0��f�I���0��I���0���4����[���n0��L����F����[I�ހ��?I���R0����O��4���GL�w<N�o"<)�0"�+0���4��fD��[���0��L���tF����/��F1��5����h�U����i����L�sL�t$H�S��C��4��-��4��)�B4����-����95���I��� 4����[I��<��3���/����@��/����DL���<?����E����o�2��r�nN���K�����t�{T����u�y���L�sL�t$H�S��Q�����-�k���)��3����-�/��1��4�����d��@��e�Q�H�π�z�Ok���K��D@��S�G��@��T����@��W�q4���P����PL���s����E��@t	��	�qQ��H��H��H)�H����*�����A�������w��	t��=Q��fD�� t��S��I�ր�)�R.����2����e�v���L�sL�t$H�S��J����-�/��)��2����-�.��1��3��@��[I�����[2����-��I����-��I����-���^2��I����-���P2��I����-����a��R����b���H�{H�|$H�S��9�_>��(�@>��	�����i����;��fD��[I��<��1���e-����_�\-��1���2��I���L-����1����*�3����,��e���R���_�RR��1��2����f�BR����g�@���H�{H�|$H�S��9�p���(�Q���	�5��Ei����:��fD��N�m��/��<1��A2��I����,���)1����`�I����Z��,����0���{t�Ԏ��������v���o���v��Q��H�{H�|$H�S��9��~��(��~��	�؁��h����U:��D��e�/K��郗��I���,���0��L���$H����+���y0��I����+����/��z1��k1����[I�����40����+����+���B0��I����)��+���10��I���+��I����+���0��I���+����v�����L�sL�t$H�S��D�u���-�����)��/����-�Y+��1���0��f�I���G+����/����p�7����N��@��[I�ހ��	D���+����A���+��L���(G��@��s��~��@��t��m���H���� �Kg����9���B���<N�u����I��@��h�m0��������m���L�sL�t$H�S��N��o��-��o��)�/����-�*��1��0����y�I���K����_�a*��1���/��L���@��I���I*����.��L���\F����)��f��I���.���%*���.����[I��<��B���
*����	�����nb�����l����H��I�^H�\$HA�V��.�������X������@H����`�d4���f����`�f��H���N4��L���?����)���.����,��m��.������a��@I�ր�)�d)����-��@��.����@��/�G���8��I���>)��I���5)���-���*)���-����)��e��I���-����[I�ހ���3���)��L�l$(�L�����H�EH�D$xH�߃���fz���z$��L�l$(�L������L��H�EH�l$x�y��H�E H�D$xH�@(묀�IL���������>��DL��1��6����-����������`��f���r�����L�sL�t$H�S��R�����-�����)��,����-�&(��1��-�����[���(��L���l>����[I��<��2����'��@��h��E���N��I�^H�\$HA�F<n�]</�����<9��
<n���A�~d�ڧ���D��@��'���,����[L��<��C���'���|'���+��I����+����7����[L��<��=���V'��L���=���H'����+��t	��Z�8'��L���=����_�''��1��,��@��_t
@��/��,��I���,��I��������n�)���H�{H�|$H�S��9�Bi��(��h��	��h�.c�����4�����[����&��L���=��A�N��,��E��I�V��.����2��E����/�ܺ���E���l&����*��L���BL�r<N��<)�|�F&���*��L���<��<n����[<�&&��L���<��@�� ����@��	�v����C���E��騅��I����%��I����%���d*��L���A���� ��AL��1���3����%���>*����^���T��A��U�~e����Z��a��H���B0��f���FL���EA����;���I���p%��I���g%����)��L���zA����O�����VL����Y���;��L���;���2%���)��I���%%��I���%���)��L���w;���	%���)���� �ۓ����.�D���QH�A��	�����������C��鮓��fD��M�������P��C���3��I���$����)��$���)���}=��I�ހ�Z�q=���$��<@�5��<S����/��H�\$x�L���-��H�C(H�D$(�8.��]��H�\$x�L�����H�D$(�C0�]��H�{H�|$H�S��.���� �s4��	�l6�� �^`����2��@��t�����@��l���@��h��#���B���<O��#���M���DI���#��L���
����[����#��L���9����[L��<��9���#����,��B��I��������_�g#��1���(����@����/�N#����9�E#��L��鯛��H�������J��߀�R�5B���R���߀�T�}���B����LL����X���b9��f.�I����"��<s��|<u�����(����Z��
H�ـ�A���"[��H��H�\$H�Q��L��w��-��fH�ـ�.��u�C���<M��Z�����AH��<�lu<	�y������Z���l��D��Zv	��a�B"��L���Z>����[L���K>���&"����	�et���Z�����P��������A�����bZ����l�����n��@��釁��<d���?����'��fD��_��!��1��:'����[L��<��=���!����߀�T�?����@����g��%�������u�����L�sL�t$H�S��Q�#���-����)��%����-�6���&��L���wu��H�ZH�\$H�B���<N��&�����B���<E��j�����B���<S�yj�����B���<D�fj�����B���<A�Sj�����BH�Z���<Y�<j����j��f�@��h�����@��c�@��e�d@��g���� ��@��G���@��L��r@��H������] ��D��w�����L�sL�t$H�S��/��~��,��~��.��~��%����2�����j|��L���.v����_�}��V��|��Z��|��_����1��f%����_w/��T��{��Z�|��_����1��?%��<)�����($����sv��t��H����z����L���E����`u������Z�@2��/��1I�����$��I���X���� �_>���*�����[���&8��I���6����w�h��I�ր�z�!���5����Z�{5����`�,0��o�i5�������[����7��I������<c�
0��[<����L����:��H����`�q)���![��@��H�#���@��F�2���@��H�������@��Y����@��X���������)��Z��I����"����)��Z��I����"����[���r:��I���J��I���B��<d��_�^����$����.��H����H��H�����<t��x����#������"��1��!,�������n"����[������L���(����[����6��I������L�sL�t$H�S��N��	��-��r��)�"����-����1��#����^�}��S�c��T�>�����Z��Y��H���(��H����`�(���Y��I�ր�)�E���!����)��Y��I���!����z��Y��H����'��H����`��'���rY������!����)�^Y��I���q!��H�߀�)�JY��I���]!����[����5��I������L����8����[������L����8����_����H�w��Z�(��_����1��"��I���z��I���r����_wH��N��$��Z�C��_uH���!����_��#��KtC��Z��$��_�,��1��!����mv��n�T��z�}���L���,����`�l�������L��I���@<Dwn<)��$�����U ��I������I������L���%2�������2 ��I�������$ ����[���H&��I�����I�����I��������<c�#��[<�g��L���7����/�&��� ����`��%��H���W����p�0�����a�'�����=����z��W��H����%��H����`��%���gW��A�FI�^<@�:k<)�;���I���a����Z��3��I�ހ�a��3������<h�
1��[<����L���1�������!��@��9�Y���L��I��L�t$H�z@��V��a@��D�ua@�� �����@��/�[��@��9��6@��D�Di���B��I���:����a�0�����R����[�����L���26����r��z�̾���/���I�^H�\$HA�V��nwU��1�X6��/�
�����H��H��H�\$H�B<n�1N</���<9�
N<n�֙���zd�̙���6�����rv7��s����t�����A�~h���������<rv<s��<tt�鋙�����這����.�V���I���7;��H��H�\$H�R��.��;����0H�ـ�	��;��H��H�\$H�Q��.��;����0��	��;���A��0<	��;��H����w��I������I�������J��L����4����)�����4��I�����I�����<Z�/��<`��<d��.���BL�r<A�u�<)����<A�l����L��I���@<Y��<)�Z��G������I���:����_�1b��T� b��Z�b��_���1������o�,�����`�gP��H�؀�a�8C��H��H�\$H�@<LwN<-��7H��<.�@���<@�4P���&C����_�����U�{���Z�Y���_���������H��<`�87<M�#7H��H�\$H�A<)��6<@��6<.��O��H���AH��<	������S��I���3�����H����9����[���:3��I�����I���
��I�����I�������[���3��I������I�ֹ�u��H����3�VЀ�	��9��H��H9�r��&��I�����I�ր�)���������t��w��_��w��`�<����R����p��-�~5���Q��߀�R�n5���ظ��H��H�\$H�R��/�������0����H������L���� ���$�������.��8����/������8����n�5���y����@�k\��-����MN����^�k-��D�Q-��E��B����Z�$R��H���g ���� �}8��鉄����/���1��#����_�����T��q��Z��Y��_�u��1����I���f����a�<��g4���Q��߀�N�W4������<�����I����)�+�����I�ր�Z����}+����[���	��L�����I�����I�������k��L�������)�?Q��I���R��<@����<O�����L���"+��<k�����<z����L���R��<o�����<z����L����*��L���0���|�������[���k��L���0����z�Z��L���*����[���F��L���*��I���5�����I���(��I��������I�������)�nP��I�������p�����bL����_�g��O�m,����Z��f��_����1��R����P������L����/����Z�
f��a���P��H���},���� ������.��K��H�X�@<	�,���< ��K���}��L�sL�t$H�S��M��T��-��T��)������-�5��1�����(�������[������I�������^�/��_���zw	��`�^�L���9���I����)�[������H�π�9�+M���*O��I�������7�����<M�K��H�C���I�����I�������
��I�������)�|�������z�n��L����(����[���Z��L���(��I���I������<@�<��<K�9���L������I���$��I�������[���0.��I�����I�������A���c�I������I��������z�@N��H�����H����`�w���'N��I�����I�������,����Z����L���-����)�����
����^����N���O�M?����Z��M��H�������)�X��������[���G��L���_-��I�ހ�Z�3���*��@��d�!`�����I�������n�0���z������~��I�������[������L���-��I������I��<)�����J����^��W��B��W��C�������Z�M��H���N����[������L����&��I�����I�ր�)�v��������.�p:����/��L���A��0<	��WH�|$H�L��L���^,��I���5�����L���H,��I��� ��I�������z���L���o&����[������L���[&��I�������e����[<��(��I������I�������D����[���h��I�����I�������"��I�����I�����I���
��I�������[����+��I���n����[�����I���Z����Z�Q��L���1(����y�P.���Tw��<m��Z��[<�(��L���%��I�ր�)������@����n%��I�ր�)�z����@�����T%��<Z������a<��W�����@��H�;���@��F�J���@��H������H���Y���������<m����[<����L���3����hwo�'���V��߀�N������V��߀�I������V��߀�G�������V��߀�H�������V��߀�T����H�V��h����n����鍶��<@��
��<N��A�FI�^<D�I<)���Z��I���J��<mw$��[<��
��L���$����)�J��I���"��<nt�<z��
��L���#����Z���a���y
��L���)����^���X��
��Y�H���C��I���E
�����I���8
����[���,
��L������I���
�����I�����L���n#��<ntF<z����L�����H�π�)�KI��I���^��I�������P��<@����<NtL���l��A�FI�N<@w<)tH������I�����I�����<Z��(����a<w��(����/u&1������_w;��Tt.��Zv!��_�[��1�����L��@�����C��L������L���P����s�����t���L�sL�t$H�S��G����-����)�y����-����1��s��<@�i��<D�����CL�s<A�<)�A��<A������L��I���@<Yw9<)w�������<c�Ҷ��<d��~���<@�}��<Y��L���U$��<xw<Zt<`�]��L���=$��<y��<z�E��L���%$���r�NЀ�	�=*���]k����+���)*���B</�*��<1�\<2�0<9�*��H���BH�z</v<5��<9�w<:�LH��H�|$P���H��H�D$(H�D$x������H�@ǀ�H�D$xH�@ H�D$xH�@(H�D$xH�@0H�l$x����U���Dž�L�l$(�L������L��H�EH�l$x�n����L��H�EH�l$x����L��H�EH�l$x�����L��H�EH�l$x����L��H�E H�l$x���H�E(�[-���BH�z<5���</���<3w\H������BH�z</����<9������ހ�-��(���h�����H��H���@</�����<5v<9�����H�������H��H���@��0<	�n����ۀ�/u&1������_w;��Ht.��Zv!��_�	��1����L��@�"%�����L���%��L���M����gwn��`�D�������r�NЀ�	��'���_i��<`w'<Z����L����$��A�~)I�^�*��I���
��<a����<z����L���$��L���$����h��z����z��C���c����a����I���O��L�����I���?���� ��D����T����-w5��)���I�������^wF��Hv0��I�NI����Z�_D��H�������/�C7��I����f
��H����@�����0D����h����_����`�<-���D��L������Q��2����/��&��H�YH�\$H�A��0�@<n��</�����<9�N<n������yd���H�\$H�t���<@�;��<NuA�FI�^<Dwl<)w����I�����L���x��<@����<D�����CL�s<A��<)�h��<A������L��I���@<Yw9<)w�����>��<c�����<d��y���<@����<Y���L���|��<xw<Zt<`����L���d��<y����<z�l��L���L��<`�0<Z�T��L���l"����[<�A��L������H�YH�\$H�Q��n�}��1�a��/�B�����H��H��H�\$H�P��nw5��/� �����9�s����@��0<	�������<rw�������rwL�N������<stZ<t�؅���yh�΅���8�����H��H��H�\$H�P��q������r������st'��t������xh���������yt�|�������xt�m����ץ��<nwG</�\���<9����<n�L����yd�����H�\$H�8�����3����L�q��9������#��<r�1���������
���I����V
����its��z�J*���A����9v��n�ƥ���ׄ����rw%������DŽ���Q��0��	������
�oc����s������t����閄����@�\��L�����L�sL�t$H�S��KwT��-wC��)������-�+��1��	����)������-���1��	����Zwx��/ub1��	����/u*1��x	����_w7��L�WE����Zv!��_����1��U	��L��@�������L��������kw1��`��>�����L��@�{�������_wJ����1��	����l����I�~H�|$HA�V��.���� w<��	t-�� ��?����g����`�6����z�-��L���y~����C����)v[��,�r?�����-�'��H��H�5U�RH��D��Ic��<����<2����Zw:��/uI����E��I���2���?����9�=��H����@�����>����_����>��I������H����@�
����>��H����@�

���>����xwI��_t7��`��'���>����Z��>��H������<a�D���<z���L���4��I��������y����z��'���U>�������e����nw7��_t%��`�^'���2>����z�)>����`�}���>��I����3����o����L�sL�t$H�S��Awy��-wd��)�����-�w��1����H�������e�������H��H��H�|$H�R��.w}�� wW��	���� ��=����M����/��1������_����B�
/����Z����_����1��t����)v3��,�A=�����-����������Zw:��/uI����<��I���)���	=����9��:��H����@������<����_wI��<��I����������L�������aw9��`�~;���M��L��A�a���<����z��<����`��<��I���N;����b�����L�sL�t$H�S��D�/C��-�C��)�q����-���1��k���	�a����AL���x
������L�sL�t$H�S��Dw>��-w-��)�#����-�����1������[�������L���g����/u*1������_w7��E�y����Zv!��_�W���1�����L��@�d���?���L���W����dw"��`�U:���$�����/uH1����L���	����e�����L�sL�t$H�S��Rw;��-w*��)�g����-����1��a��L��@�{	��������/u&1��D����_w;��St.��Zv!��_�����1��%��L��@�w�����L���j��L�������r�:��s�2���L�sL�t$H�S��C����,� ��.�@�����/�7���1������/uQ1����L�������g������h�p��L�sL�t$H�S��Sw;��-w*��)�j����-���1��d��L��@�~��������/u&1��G����_w;��Tt.��Zv!��_�����1��(��L��@�������L�����L�������sw]��`��8���j���L�������`�6�����D��
����_�G���1�������g����`�����)�����)� ��������t���L�sL�t$H�S��/wi��(wK��	��n����������{H�S@��A�F
��@��au�{H�S@��Ytv@��y��1�鳨����,����.�����1��!����^����G��L��H�@����Z�X���k�����`�b�����a�?����{H�S@��Yu�I��������y� ���L��L�rH�5��L�t$H�J�uL��.w!��-��������)�|�������_t	��/������i����st���z�����鸧��L��@���������g�O��_�m���1��'��L���}����-w$��)�Pw��I������� ��7����	����/��*��I���������[���j��I���B�����[������I���.�����/u,������_w��Dt1��Zv$��_����������@����L�����L�����L���CL�s<A��<)�I���<A�������L��I���@<Y��<)wM�����������c������d�r��L�sL�t$H�S��@wD��,v1��/�i�����.�`���1����<@�Q���<Y���L���)����)�8��������_����A�`�����Zvl��_����1����<xw<`w<Z�����L������<y�;�<z���L������<`��<Z����L��������[�������L�����L��������`�������a�%�L�sL�t$H�S��X����-����)�����-�e���1������h������L��I��H�5��L�t$H�JH��������)w8���_k���� ��
����)�
������<a�?���<z�����L�������.w?��-���1��e�����/u?1��Y�����_wL��Y���Zt6��_�����1��6�����/t	��_�����1��!���L��@�s�����L���f����x�>�����y�8��z�6����^���<d�	<z�N���L���f����j������k����L�sL�t$H�S��C����-����)�������-����1����H�l$x�L����H�E H�D$(�<:t<.�Kg��H�l$x�L����H�E(�0g��L������� �4���������@�����L����
��I�ހ�)���������@�q���L����
��L���M��L���	��<@�Q���<DuC��L��I���@<Aw_<)�����<A�*�����L��I���@<Xw<)�������L���"�����<Y�����A�FI�^I�ރ��<S�h���_��<`��<Z����L�����L���#
����/u*1��9�����_w7��L�K����Zv!��_�����1�����L��@�0���{���L���#����k������l����L�sL�t$H�S��E����-wt��)�������-�4���1������/u*1������_w7��D������Zv!��_����1����L��@������L�������cwA��`�1��������/uo1��P�����_�D��F����Zvb��_�����1��)�����d�%�L�sL�t$H�S��@����,����/�n�����.�e���1����L��@�r���M���L���e����@�.��L�������L��I��H�5��L�t$H�J��>�����-w<��)�������-������x���L���N��<a�����<z���L���
����/wc��.������@���L���LI����)���� �����_����A�d�����Zvo��_���1�������ew!��`��/���f��_�O���������f���L�sL�t$H�S��Sw|��-wk��)�������-�!�1����L�������`�	��a���L�sL�t$H�S��X����,����/����.���1��R�����/u*1��F�����_w7��T�xH����Zv!��_���1��#���L��@�u����L���h����s�@�����t�8�L�sL�t$H�S��GwX��,vE��.�N��/�E�1�������)�5������`wA��Y�+�����_��1������)�	������`wP��HtC��_���1��t�����y�Ǟ��L�sL�t$H�S��Swi��.wU��-������A���L���|����h�����L���JH�5��L�r��y�����,wZ��	wG�R�������/u&�����`�~�����_�F�������L��S��������� ����K����/w��.�=��1������_�-��1�����I���$��L���[����/u&1��q�����_w;��Nt.��Zv!��_���1��R���L��@�l�����L���_���L����$����m�����n����L�sL�t$H�S��HwX��-wG��)�������-�l�1����H����)��H�������)u�H���٬����a����)���o�����/u*1������_w7��I��$����Zv!��_��1����L��@�
����L���
����hwn��`�
,�����L���<��I�����I������>�������3�����[<���L������������H����`�9�����,��L���,�����i��L�sL�t$H�S��F�C��-���)����-�B�1�������@�2�L�����<@�"�<D����L��I���@<A��<)�{�<A�����L��I���@<X�u<)����O��a��v'I������@���L�����I������ �H�������)���,��+��H����-�Ok��������)����-�^�1�����-w5��)�k��I�����^wF��Qv0��R�Yb����Z��+��H��������/�n��I�����H����@������[+����qw@��_t.��`�o���C+��I�����<d�����<z���L����
��I����;��r���L�sL�t$H�S��Tw��-wn��)���-��1����`��
��H����*�����<Y�\�����<`w<Z�K�L���+��L���[
��<a�@���<z�+�L�������/u*1����_w7��U�`a����Zv!��_���1��~�L��@�
�����L���	����t����`��(�������9�(��H����@�_����*����a�����L�����������Zw+��/u1���I�������)��L��@��	���\���_���M�1�����/��1����_����)��I������_����G����Z����_���1��y��u�u�L�sL�t$H�S��@wH��,v5��.�����/���1��@��`�<�����`����(����)������_����A����Zvw��_�l�1����L��@�A���T�L��������f����g��L�sL�t$H�S��G����,vs��/����.�
�1���L������L������L���i_����`�����a���L�sL�t$H�S��QwX��,vE��/�����.���1��6��)������`wE��H�K����_���1��
��)�w������`wt��R�_����_�[�1�����h�1����{H�S@��T���@��t�x�L�sH�5��L�t$H�K�����.����-uy����r�֖���{H�S@��Y��@��y��H�zH�5)�H�|$H�RD��Ic�um��-wI��v1�� t"��-�'��H������)�
�L���U��������	��&��������9����/�w�I������I����*�����/t��_u�����������b������{H�S@��E�����@��e�?��{H�S@��R��I���_����_�8&��I����P���[�����L������<it<z���L�����<@���<IuA�FI�^<Dw@<)w'����I�����L��������@�b�L������<@����<D�i���<c�����<d�5\���O���Zv ��a��vI����L���{���H����H�����a�����L���W���A�F���<A��7����7����u�����o�����@���L���#�����[���_�I����I�������I������@���L�����H����@�$���$����d�W��_�A��`��
���$��L�������z�� ����`u,� �����/�?��_�+��z�� ����`�w ��H��H9�r��o��F���0<	�u?����H��H�^�#z����/u91��X��� �*$��������_w;��Vt.��Zv!��_���1��&�L��@�@���L���3�L������u������v����L�sL�t$H�S��D����-w|��)�����-�<�1���L�������@�$�L�����I�������e�?�L�sL�t$H�S��L����-wt��)�b���-���1��\���/u*1��P���_w7��E�����Zv!��_���1��-�L��@������L�������dwE��`��!���w���/uk1�����_���M�x����Z����_�G�1������e����L�sL�t$H�S��Mw;��-w*��)�����-��1���L��@�������/u&1��t���_w;��Nt.��Zv!��_���1��U�L��@�������L�����L������m�j���n�b�L�sL�t$H�S��SwG��,v4��.�x���/�o�1����L�������lw:��`�~ ���M���)�D�����`wR��T�����_�(�1�����m����L�sL�t$H�S��AwV��-wE��)�x���-���1��r���t�Ő���{H�S@��H���@��h� �1�鿐����/u&1��:���_w;��Bt.��Zv!��_���1���L��A�m�����L���`���L�������a�0���b�(�L�sL�t$H�S��D����,����.�6���/�-�1���H����@����z �������H��������)����t��X���5������-�G���$���I���P���/�!��I����D���)����,���`�<��E�����_���1�����9��%��n�Ļ���c���zL�r@��/��@��9����L��I���RH������-usA�F</��V��<0tz<1��V��A�F��0<��V����I�^�{-��V���C</��V��<0t/<2v+<3��V���C��0<�~V��H��H���_��1��<���C��0<	�[V����A�F��0<	�IV���1�����1���u����A������H��H�X�@<@�:<Zv��a<������H��H���@<@�<Zv��a<������H��H���@<@��<Zv��a<�����{)H�C��
��H��錝����Z�v�����aH�À��R���b����� �:��������-�W ��)��]��I���1���C</�*9��<0��%<1�9���C��0<�9����H���{:��8���C</��8��<0�9%<2�1%<3��8���C��0<��8����H���{ ��8���C</��8��<1��$<2��8���C��0<��8����H�C�x:�w8���p�VЀ��g8���p�VЀ�	�W8���x:�M8���P��/�@8����5�_$��6�.8���x0H�X� 8��H���Lo��<Z������a<�������<	w7�������<	�x�������<Z�������<m����<z�������< �I���<)����鶛��I�޹A�v�VЀ�C�PH�=����Hc�H�>��H�ڃ�	@��p���@��Hct�H�>��A�F</�Q7��I�V<0��<4�f<5�57���B��0<�&7����H��H�ZH�\$H�B<-���B���0<��6��H�ZH�t$XH�{H�|$P�4��H�\$xH��H�D$(����*8��ǃ�L�l$(�ǃ�L��ǃ������L��H������L��I�����H�T$xL��H�BH�T$xH�BH��H�\$x��)����0<�K)���I����BH�Z<U��<I����zIH�Z�ܐ��H���Ӑ��L���sH�S@��5�g;@��/��5��@��0t@��5������B��0<	��5������B��1<��5������zI�i����zIH�Z�_����zIH�Z�Q����p����B���<C�u5�����B���<T�b5����H�ZH�\$H�B���<O�����C���<Bu"���C���<Eu���C���<R����5���B���<O�5�����B���<V��4����H�ZH�\$H�B���<E������C���<Mu����C���<Bu����C���<Eu����C���<Ru�H���|���<a�r��4���B���<N�s4����H�ZH�\$H�B���<U�����C���<A�/������C���<R�������C���<Y�	���H�������BH�r<O��<H��<A��3���FH�^<YwY<Rtc<Y��3�������B<U�@���<A�F���<U��3���B<Nwb<Ltl<N��3���BH�Z���<E�a������<r�R��3��H�^H�\$H�F���<C�6����C���<H�F���H���B���<l�!�H3���BH�Z���<Y���������<It-<O�$3���B���<N�3���,6��<hw!<a�3�������B���<N�{����2��<it�<o��2���<Et-<U��2���B���<N��%���W��<dw_<a��2���%���BL�r<PwW<C�w��<P��2��A�FI�^���<T�D�����I�^H�\$HA�F���<E������"���<et�<u�N2���x���<cw%�?2���v��<y�22������<n�%2���t���<p�2���<u�2���I����zH�r@��R��@��N��@��E��1���F���<B��1����H�^H�\$H�F���<R������C���<U��������C���<A�}������C���<R�j������C���<Y�W�������<W�+���<X�#����B���@��Ot3@��R�F1���B���<I�$���V��@��nw5@��e�"1���:����z���@��R�1���R��߀�T�߁����#��@��ot�@��r��0����BH�r<E��<A��<E��0���F���<C��0����H�^H�\$H�F���<E�����]����B<U��<P��<U�y0���B���<G�j0����H�ZH�\$H�B���<U�����C���<S�&������CH�����<T��������<awc�0���B���<Y��"���l��<pwR��/���B���<R��/����H�ZH�\$H�B���<I������C���<L������]���<e��/�����<u��/���)���H�zH��H)�H���t���rH����	@��j�z/��H�=��@��Hc4�H�>��H��H��H)�H��
�7���2�����B���<E�:/�����BL�r���<P�#/������BH�r���<A�/���
����BH�r���<E��.�������BH�r���<E��.������A�V��߀�E��.����A�V��߀�P��.����I�^H�\$HA�V��S����߀�T�Q�����I�^H�\$HA�V��D����߀�E������%���A�V��߀�C�L.����A�V��߀�T�7.����I�^H�\$HA�V��NvR��߀�O�����׈��A�V��߀�O��-����A�V��߀�V��-����I�^H�\$HA�V��D�`�����-������S��/����w��A�V��߀�E��-����A�V��߀�Ct��-��A�V��U�b��P�d��U�g-��A�V��߀�G�V-����I�^H�\$HA�V��T�m�����߀�U�����I�^H�\$HA�~-�������CH��</��<2�`<3��<9��H�SH�ZH�\$H�B<n��<T��<n�iU���{d��H�\$H�UU��I�^H�\$HA�V��-t��J�H�ڀ��{���H��H�\$H�z-�h����J��2����/�H�ZH�\$H�R��0�
��m����r����n�p�����r��T���{dt&H�\$H�T����s����t�\Q���zh�RQ����H�CH�XH�\$H�xT��T���C</�<1��<2��<9w~H�s�~:�
ue�FH�V</vAH��<5�(<9w2H�V�z:u(H���B</v<5��<6��H�Z<9�F�H�\$H��w"��
��S����S��H�\$H��S��H�\$H��S�����+���xP���C</vXH�s<3�Z���<:t,H�\$H�S���C</v@H�s<9�8���<:t
H�\$H�S���F</v;�
�2���H�\$H�sS��H�\$H�iS��H�\$H�_S���z0H�Z��a����H�\$H�BS��H��H�\$H�B<mwZ<9wI</�%S��H�������3��H����9�y�����V*��H��H�\$H�B<m�<1v�<T�S�����R��<rw]<n�b���<r���R����pwc�*��A�V��߀�R��)����I�^H�\$HA�V��H������߀�I����闄��<st*<t�jR���{h�����H�\$H�VR����u��)���:����{t�����H�\$H�4R��A�V��U����A����U�m)��A�V��N����L����N�M)��I�^H�\$HA�V��D�h�����߀�E�����A�V��߀�E�)����A�V��߀�B��(����I�^H�\$HA�V��Q������߀�R� ���雃����l����(��I�^H�\$HA�V��X������߀�Y����d�����a����(��A�V��߀�N�|(����I�^H�\$HA�V��T�������߀�U�������A�V��߀�A�?(����A�V��Yw1��Rt7��Y�#(��I�^H�\$HA�~-�J����҂��H�\$H�Ȃ����rw<��'��I�^H�\$HA�V��B������߀�C�d�镂����n��'���r�����y��'��둀�u��'���9�����s�������t�����6P����9����/�$P����H��H��H�\$H�J��n���Tt9��n��L���zd��L���F�����mv���rw���n�n�����r�������O���J��/����1����2tp��9wa�z:H�r��<����?L��H�ZH�\$H�R��mw��1�I�����T����hO����r������n�����r�}����HO����&���J��/�YH�r��3v}��:tf��r&���J��/v,H�r��9v\��:tE��Q&����r�/������K����3&��<r�\����������N����&���F</v:��`����~:���V��/vR��5v,��9w�~:H�V��F���H�\$H�K����%���NH�V��/v@��9v+��:t��%����%���F</v�������~:t��s%����i%���VH�^��/����5vj��6t'��9�%���;%����1%����'%���~0H�^�N\��H��H��H�\$H�z.�8\��H�Z�R��0��	v,���$���NH�^H�ڃ�0��	v��\�����$��H�SH��H)�H�T$HH�������K��,����-ty��0H�Ӏ�	v��[���BH�Z��0<	��[���T��F</����H�V<9����<:��������zt�H����I��<r�i���<n�n���<r�������L���JH�C��/������1����2t}��9����H�X�@</� [��<5vE<9���<:�[����H��H���@</��Z��<5v<9�����Z����+t�H����Z��H���@H����0<	��Z���g��BH�Z<5w�</��Z��<3H���m������BH�Z</��Z��<9�o���H���K���I�V��L��������� ���B��0<	��K��餲��<rwM�ݱ���K��A�V��0��	��K��������e�Dw���{H�S@��R�h�@��r�n�1��>w��<s�<t�\K���zh�RK���k��A�~I�V@��/��@��2�y��@��9�����zL�r@��/��@��9��L��H�ZH�5'�H�\$H�JH������W�T��F�g�� �%��D�m����F�ǂ��I�޹��]��A�~I�V@��/wI�ֹ�]��@��3t8@��9�y���I�ֹ�}$����]��@��2�%?@��3�5=H��H�ZH�\$H�z@��V��@��D�K@�� ��@��1��@��/�!���I��I�^H�50�H�\$HA�N�����Wwh��Fw;�� w��	t	�� ��Y��I�޹�QL����Dt^��F��Y��I�޹��\����M����H����M��Y��I�޹�#����l����d����Yt(��d�hY��A�F���<Au;��
����y�IY��A�F���<E�9Y��A�F���<AuA�F���<RtFH�\$H�Y����h�Y��A�F���<O��X����C���<U����C���<R�����H���5����fw�������X����t���m������r��X����s��A�FI�v<H�
<2��</��<2��A�F</�:I�v<5��<9�����F���0<����H���F���0<	�u��H���VH�F��/����5�����6�I���x0H�X����1����Sw��W��I�޹��@����Tt8��W��W��A�V��߀�E��W��I�V��<5����w�@���t��W��A�FI�v<H�\<2�></�<2��A�F</�I�v<5��<9v}�<:�����F���0<�u���F��0<	�f���~:�\���F</�P��<5v<6�D���~0H�^�6�����FH�^��0<	�������H��H���@</vv<5�u���<:�m��������A�FI�v<5�D</�2<3�B�����H��H���@</v_<5v.<9�;����<:������������������H��H���B</v|<5vR<6t�<9�^�������O��H�B�R��/����0tb��5�m���6�"�������BH�Z</vR<5v3<6t<9�������������z0H�Z�T����H��H�X�@��0<	��S��������������������<:��������<9�d���<Ht��o��<gw7<Ut��]��A�F���<U�����[���F���<E��
����T��<ht�<ut��"��A�FI�v</v <3vk�<5����v������������<9�B���<Ht������<gwo<Ut������H�X�@��0<	��������F</v(H��<5�����<9����������v����l����b��<h�����<u�
�����H��I�޹���@��Hw^@��F����@��H��{���B���<O��{������@��h��@��cw}@��X��{��@��Y��{��I�޹�Sr��@��Mw��{��I�޹����W����k{��@��Su$I�޹�_<��@��9���I�޹�;���H�ڹ�^/��@��evR@��g�${��@��f�S���H�ڹ@��h������/��@��tw0@��m�o���@��r��z��I�޹�;��@��d�o�����z��@��wwh��z��H�ڹ�60��@��	t
@�� ��z��I�޹�K����hwu��dwY��Yu�I�޹��Y����Mw"��H�������M����_z��@��yt��Tz����R�Kz����T������W�x����4z����f�d�����h�H����z����t�G�����m�������r�z���I����:��A�~I�V@��/������2���A�~I�V@��/����@��6��������I�޹騽����/���I���������C</����<0�s<1��<9�����{/����H�C�P��/������2����3����9����H��H�XH�\$H�@<q��<r��<s��<t��=�����{h����7���S��.�*��H�C��/�u�����2����x/�
���P��2����/����H�XH�\$H�@<n��</�,=��<9��<n�=���{du�H���b���{t�m������C</����<0�m<9�����C��0<	�����)x���C��0<	�m����H�XH�\$H�@<nw5</��<��<1�{�����H��H��H�\$H�@<nw
</�[�������<r������P����g<����3t�H����9��������H�XH�\$H�@<nw�</�7<��<1����H���V���H�XH�\$H�@<nw�</�<��<9����Հzt�L?���_��A�~I�V@��2���@��/���@��0�������zL�r@��/�,R��@��9�������S��.�F��H�C��/�������9�����+���C��1<�����v��<s�f�������/u*1������_w7��N�������Zv!��_�X���1�����L��@�����@���L��������m�������n�����L�sL�t$H�S��/����,����.����~����-w:��)��9��I���^���� �:��������A�V��0��	��=���/�����/��I����)����^wA��Dv+��E�6�����Z���H���+����)��L����:��H����@��������d�����_t(��`��������^v,��_t��`t���z�Q����I������������A��w�L�������
�x��������)������`�����/u&1��^����_w;��Et.��Zv!��_�����1��?��L��@����餼��L�����L�������d�T�����e�L���L�sL�t$H�S��Q����,vm��/�^�����.�U���1�����H�X�@��0<	��������C��0<	�����#���C��0<	���������C��0<	�����y����)���l�����`�9��R�]���_�ѻ��1��T���L���r��H���j����)� ��=w��H��H�X�@��0<	���"w���SH�C��5���/�����3��v���À�`���H�������)v��-��i�����A������&������v����A�����������A���~������/u*1������_w7��O�1����Zv!��_���1��e���L��@����ʺ��L���r����n�0�����o����L�sL�t$H�S��QwI��-w8��)������-�����1��
���H���P����9�l����:��u�������/u&1��߿����_w;��Rt.��Zv!��_�=���1����L��@�J���%���L���=��L�������q����`�/��������-�g��)��5��I���d���L���D��I���ӹ���N�����[<�ù��L�����������0���L�������@�����L�������@�����L��������Z��f����a������`����r��L�sL�t$H�S��Q����-����)�������-�2���1�鵾��H����@����������b����_����`�����_���@��H�aX��@��F�pT��@��H�����׸��@��h��K��@��c��@��e�����@��g����骸��H������A��0<	vH�y�[�����/���I��������A��0<	vOH�y�1���I��������c�����L�sL�t$H�S��Gw3��-w"��)�������-�%���1�騽��H�y�����/u*1�铽����_w7��H�r�����Zv!��_���1��p���L��@�����շ��L��������gwR��`���麷����/��1��4�����r��c��L��������_w4��R�����Zv��_�}���1�������h��������L���H����q� �����r����L�sL�t$H�S��N����,����.�&�����/����1�頼��@��Y����@��X����1�@��W��^��@��YtL�t$H���L��@�����ն��A�V��߀�E����A�V��߀�A����L���#����)�����������`����O�}��_�����1������u������� ��������-w*��)�2��I���Ǻ����@�>���L�����H��������/��I���颻��H������L�����L���A�����s�n�����t�T���L�sL�t$H�S��D�	��-����)�F�����-�����1��@���@��h��H��@��c�	���@��ew@��d��l��鍵��@��g�ۃ���~���L�rL�t$H�JH��������V����Dwa�� ��>����-�����D�;����B���<A�T���3��@��H��T��@��F��P��@��H�	����B���<O������:����H�]T����F�mP����H�ڴ���B���<O�˴���V:����h��G����c�������ew.��d�k���顴��H���I���<n�Z���<z�����L��������g�Ђ���s�����/u,������_w>��Dt1��Zv$��_�>�����̹����@�+���L�����L���پ��L���H�����c������d�����L�sL�t$H�S��@����,vt��.�����/���1��e�����/u*1��Y�����_w7��E�*�����Zv!��_�����1��6���L��@����雳��L�������dw?��`���逳����)�w�������_w_��A�������ZvI��_�V���1��ٸ����e�ժ��L�sL�t$H�S��Qw|��-wk��)�������-����1�頸��L���.����`������a�����L�sL�t$H�S��X����-����)�T�����-�˲��1��N�����/u&1��B�����_w;��Rt.��Zv!��_�����1��#���L��@�u��鈲��L���h��L���
�����q�8�����r�0���L�sL�t$H�S��Cwx��,ve��.�F�����/�=���1������/u.1�鴷����_�������Y�g�����Zt!��_�
���1�鍷��L��@������L��������)����\�����`����D�|�����_�����1��D���L���J	��L�������_w4��A�0�����Zv��_�����1�������)�~������L���!�����`�h�����a�ő��L�sL�t$H�S��X����-����)�������-�.���1�鱶����@����L���~��L���v��L���	����o��\���{H�S@��W��	��@��w�*���L�sH�56�L�t$H�K�ul��.w:��-uI��=�����/uB1��1�����_wv��YtT��ZtG��_�����1�������/t��_u
����L����L��@�����[�����B\��L���i��A�FI�^<@w#<)��I��鬴����xw&��`�J�����<Z������a<���������y����z�������_�`��T������Z���_�Ư��1��I���L�����<Z�_�����a<��=���O�����@�����L�������@�����L��������@�t���L������L�sL�t$H�S��/����,������.������Ĵ����@�1���L�������d�[���{H�S@��A�Ԭ��@��a�M����{H�S@��Y�ˬ��@��y�1���L�s	H�5=�L�t$H�K	����.����-u}��<���L���Z�����^����_����`�����z�Y��������s�����t�Վ��L�sL�t$H�S��Gw2��-w!��)�ϲ����-�F���1��ɳ��L��������/u*1�鵳����_w7��H�(�����Zv!��_����1�钳��L��@������L�������g�l�����`�	��ح����_t��/u���N�����Y����:�����AL�������o�H���|��@��M�M��@��R�+F���{�����-w5��)�6)��I�������^wF��Dv0��E��"����Z���H������/����I���鵲��H����@�Ϸ������d����_t{��`�����c�< �
]��<.�X�鏕����@�O��A��L��郷����n�A�����o�'���L�sL�t$H�S��Mwt��-wc��)�!�����-�����1�����I���������e�����L�sL�t$H�S��L����-wx��)�װ����-�N���1��ѱ����/u&1��ű����_w;��Nt.��Zv!��_�#���1�馱��L��@�0������L���#��L�������mwE��`�������/uk1��f�����_����M�Y!����Z����_�����1��;�����n�7���L�sL�t$H�S��Cw;��-w*��)������-����1�����L��@�����g�����/u*1������_w7��D�!����Zv!��_�?���1��°��L��@����'���L�������c�߭����d�ק��鳱��L��� ����l���`�������/��1��c�����W����Z�Ǫ��L���'���L��������/u&1��5�����`w+H�ـ�M������Z������L��@�0����{�����mt5H�ـ�z��W������� �����z���L��@������A���H�YH�\$H�Q��-�t��Z�HH�ـ�.�������/�YX����@�s������_w_��E�/+����ZvI��_���1��f�����m�b���L�sL�t$H�S��Aw|��-wk��)�3�����-�����1��-���L���K�����d�	�����e���L�sL�t$H�S��M����-����)�����-�X���1��ۮ����/u&1��Ϯ����_w;��Bt.��Zv!��_�-���1�鰮��L��A�������L�����L�������a�ū����b�����L�sL�t$H�S��D����,vx��.�Ϩ����/�ƨ��1��I�����/u&1��=�����_w;��Nt.��Zv!��_�����1�����L��@����部��L�����L����)����mw>��`����`�����)�W����Ҭ����`������E�����_�7���1�麭����n�����L�sL�t$H�S��S����-wu��)�������-�����1��}�����@���L���J���L�����_�d����z�7�H�ـ�`�8U���&�������(����)�F��(c����/u*1�������_w7��T�)����Zv!��_�o���1���L��@�D����W���L���7�����s������t����L�sL�t$H�S��GwP��,v=��/������.����1�闬���� �W���n�����W����	�]���W����)����[�����`�#�����H������_�����1��C���������H���
�I��頦��<s���������ZvB��a��v2I���~����SH�C��/������9����a���:�����H��鴼��H��鬼����[<�!���I���1���L��鑼��L���,E����@����L���x����� �l���%�����`����Z��L��S�����銰����/u,��U�����_w>��St1��Zv$��_�������3�����@�����L���H���L���@���L����l����r�y�����s�_���L�sL�t$H�S��C����-wl��)�ҩ����-�I���1��̪����_�9���1�鼪����r�;�������L�sL�t$H�S��CwY��-����)������-�����1��y�����/��1��i�����_����D�������Zv^��_�����1��B�����_w&��D�������Zv��_�����1�����L�������c������`�����v�����/u31���L�����L��@�v����Q�����cw��`�o���>���L��@�R����-�����d�����L�sL�t$H�S��@�4��,���.�������/��1��v���I�����I���ܣ����/u1��Z���L���x���L��@�l���鷣��I��鯣��L���W����C��0<	vH��������)����I�������C��0<	v1H��������[�������I���Z�����[���n���I���F���H�����I���5�����@�,���L��錹��I��������/uj1�隨��L���E���L��鰭��@��Ew^�~���������u�]�����v�C���L�sL�t$H�S��HwJ��-w9��)�=�����-�����1��7���L��@�Q���霢��@��e�����g����/u*1�������_w7��I�ܯ����Zv!��_�e���1����L��@�r����M���L���e�����h����`�_���.�����/���.����1�韧��H���u�����[���!���I������� �U��������FH�N<-�%B����0<�����B��������;���������0���L��������i�.���L�sL�t$H�S��N����-����)�������-�n���1���L���Ƿ����[���S���L�������)�¥��L���6���^v9��_t*��`t�z������ހ�@����L��R�J(��鶫���醦����AL������������)�ߠ���Z�����_����A�հ����Z����_�����1��9�����/u&1��-�����_w;��Ot.��Zv!��_�����1�����L��@�`����s���L���S���L�������n�#�����o����L�sL�t$H�S��Twv��,vc��/�1�����.�(���1�髥��L��������`������a�ќ��L�sL�t$H�S��XwX��,vE��.�����/�ޟ��1��a�����)�Ο���I�����`wI��U�s�����_�����1��5�����)�����������`�Q�����Y������_�����1�������u�XK���{H�S@��S�-���@��s�����1��RK����st/��t�r��A�~h�g����?����-w!��)����I��難��A�~t�A���?����/�\��I�������I����r�����u����L�sL�t$H�S��@����,����.�������/�����1��1�����/u*1��%�����_w7��S�����Zv!��_����1�����L��@�����g���L��������r��~����s��~��L�sL�t$H�S��S����-w��)�������-� ���1�飣��H����@������m����s�
��_����`�y���M����)�ߝ���Z�����_����A������Zv|��_�����1��=�����/u*1��1�����_w7��T�������Zv!��_�����1�����L��@������s���L��鋹����s����`�����T���I����Ѣ��L���_�����`�6�����a�����L�sL�t$H�S��Q���-����)�������-�����1�������t�%���H�{H�|$H�S��9wQ��(w6��	w�/��������t�F�������� �����Ǫ����-w(��)�Z��I���	�����^wJ��Dv4��EuH����S����/����I��������Z����H���k���H����@�_��������dwA��_�����I���驡����/u91�靡����_wF��Rt9��Zv~��_�����1��~�����etq��z������F��L��@������Л��L��������q�������r�����L�sL�t$H�S��Xwd��,vQ��/�������.�����1�����L���f���L�sL�t$H�S��LwV��-wE��)�ޟ����-�U���1��ؠ����)�E��������`wH��Y������_�)���1�鬠����/u81�頠����_wE��M��R����Zv/��_�����1��}�����y��F���D�L��@������Ԛ��L��鴳����l�������m�����L�sL�t$H�S��A����,����/�������.�����1�������/u1�����I���n���L��@�����]���I����)�Q����̞��I���D���I�ր�)�8���鳞��I���+���I���"���非��I��������)����釞����`�����B���_���1��o�����)�ܙ���W���I��<)�̙���G���L��駲��������4���������)�����/u 1��'���L�������@�����L�����L��@�(����s�����[�������I���_���L�p�@��0<	�L����ǝ���CH�{</�l���<1v<9�`�����H��H���@��0<	�F������G��0<	vH���.���I����H���������ݘ���X���L���zP���ʘ���E���I���=�����/u&1��;�����_w;��Rt.��Zv!��_�����1�����L��@�6���遘��L���)���L�������q��x����r��x��L�sL�t$H�S��Sw_��-wN��)�������-�6���1�鹝��L���ע���!���霜��I������鎜����[������L��骢����/u*1��x�����_w7��T�P����Zv!��_�җ��1��U���L��@�߳��麗��L���ҳ����s���`����雗��I�ր�)������
���I��邗����A�y���L���٭����`w��P�����0G��H����`���������a�G����p�
G�������/u*1�鴜����_w7��T�o���Zv!��_����1�鑜��L��@��������L��鞡����s�\w����t�Bw��L�sL�t$H�S��Gwo��-w^��)�<�����-�����1��6���L��錯����t�*���L�sL�t$H�S��G����-wx��)�������-�n���1�����/u*1������_w7��H�X�����Zv!��_�?���1��›��L��@�L����'���L���?�����g�������`�9��������/u.1�醛����_�������H�����Zv!��_�ܕ��1��_���L��@������ĕ��L��餮��I��鴕��H�߀�)�
��I��� ���L���H���������
�����@�����L�����H�^���A�~t�����6��H��������/u��֚��L������@�-y��L�����L���q�����t�y����u�y��L�sL�t$H�S��Q�`��-�K��)�q�����-���1��k�����/u&1��_�����_w;��Tt.��Zv!��_�����1��@���L��@�Z���饔��L���M���L���g����s�u����t��t��L�sL�t$H�S��G�9��-���)�ۘ����-�R���1��ՙ����/u,��ƙ����_w>��Rt1��Zv$��_�x���餙����@�x��L��鹞��L��鱞��L���m���q��w����r��w��L�sL�t$H�S��R����-����)�?�����-�����1��9�����/u*1��-�����_w7��R������Zv!��_�����1��
���L��@������o���L��釯����q����`�����P�����/ue1��Θ����/��1�龘����_����H�-�����Z����_����1�铘����_w7��S�����Zv!��_���1��p���L��@������Ւ��L�������rw��`����麒����r�@���L�sL�t$H�S��C����-����)�	�����-�����1�����L��鑮����g�����`�����Z���L��@�n����I�����s�ω��L�sL�t$H�S��C����-����)�������-����1�钗����/u&1�醗����_w;��Dt.��Zv!��_���1��g���L��@������̑��L��鬪��L���S�����c�|�����d�t���L�sL�t$H�S��@����,����.�������/�y���1������/u&1�����_w;��Dt.��Zv!��_�N���1��і��L��@�#����6���L������L�������c�����d�ލ��L�sL�t$H�S��@w\��,vI��.����/���1��n�����)�ې���V�����_�b�����A�w�����_�����1��>�����)������&�����_�2�����A�y���_�����1�����H���,�����[<�����I���i���L���ɦ����@�X���L��鸦����)����I��鿔��L��韦��<xw<Zt<`�'���L���?���<y����<z����L���'���<`w0<Z�����L��飚��<@���<Y����L�����L���;���<a�_w��<z�Ï��L���k�����[�������L��鏨���)���I������I������H���q�����[�����I���u����o��������/u,������_w>��Dt1��Zv$��_�5s����Ô����@�"s��L���ؙ��L���Й��L��������c�	s����d��r��L�sL�t$H�S��@w]��,vJ��/�����.�ݎ��1��`���L���y��L���F���镮��L��鲮����)�����������_�#��A�������Z�	��_�s���1����L��鳬���zL�r@��/��!��@��0tD@��9�^��p����zL�r@��/�p!��@��5�@��6��@��9�$I�^H�5X�H�\$HA�VH���t��W�K��F���� ����Dt}@��F� ��I�޹�!���zL�r@��/�� ��@��9����I�^H�\$HA�~@��V��@��D��@�� �:@��/����@��9vc@��D����A�F���<A�}������H�ZH�\$H�z@��V��@��D�R@�� ��@��6��@��/�4��H�����@��Hwe@��F����@��H���A�F���<O��������@��h��@��cvr@��ev:@��g����@��f����H�ڹ���@��Mw"����I�޹���@��d��������W�������@��S�ZI�޹�w��@��X�l��@��Y�b��I�޹�;��H�ZH�\$H�z@��Vwt@��Dw<@�� ��@��/�(��@��9���@��D����B���<A������@��H�5���@��F���@��H�����B���<O��������@��h�t@��c�D���@��e����@��dt�����zL�r@��/����@��2�����H�ZH�\$H�z@��T�#@��9��@�� ��@��0�����N��H������zL�r@��/�:��@��0t@��9v����H�ZH�\$H�z@��T��@��9��@�� ��@��0�l�������H�ڹ�����hw?��dw#��Y����I�޹�!"��I�޹靆����f�������h����������t����m������r�w����j��@��	t
@�� �]��I�޹���@��twJ@��m�����@��r�6��I�޹���H�ڹ�@�����Mw0��H�������M�P������@��ww/����H�ڹ�c�����R������T�H�����Wt�����@��y��������L��鋥����`�b�����a���L�sL�t$H�S��X����-����)�������-�(���1�髎��@��Gw:@��D�P����@����O��@��gwW@��Yw<@��W�E���@��Y�l����*��@��L�4���@��M�a���@��R�������@��dv�@��f���������@��t���@��lw[@��h�����������/u.1�������_�������Y������Zt!��_�^���1����L��@�3����F���L���&���@��m����@��r�s��I�޹�I��@��9�����@��D�R���B���<A����H�\$H�9��L��阒������]�����Z�����DL���/����6o����@�����L�������� �
����ƕ����-w5��)�Y��I��������^wF��Tv0��U�@�����Z����H��������/�����I����،��H����@�������t����_ty��`����������u�(����#*��H���+���L��@����������rv!��y������j)����lv��n����W)���ޥ���L)��L�����������6���I����3�����u�ف��L�sL�t$H�S��R����-����)�������-�o���1����s�VЀ�	�����(����߀�T��(���R���H�YH�\$H�A<n��</�V��<1vA<n�J���yd�@���&��H�YH�\$H�A<n��</���<9v	<nt����H���O&����/u*1��V�����_w7��S�������Zv!��_�����1��3���L��@�����阅��L��鰡����rw,��`������}���<rwS�Z������<rwD�K��������s��|��L�sL�t$H�S��SwE��-w4��)�������-�-���1�鰊��<stB<t�K���yh�A���%����/u51�鉊����_wJ��Tt=��Zv0��_���1��j����yt����q%��L��@��������L��頝��L���Ծ����s�p�����t�h���H�{H�5�H�|$HD�CIc�D���3���A��,��A��wzA��	������}�����@�L���L��鬚����[���8���L�������Z�'���L��釚��L������L���w���L���o����CH�{��0<	�)����A�� u-�����A��/w9A��-�4���A��.tI����F���A��)����I���*�����ȑ��A��9��A��_��I����	���<nw2</����<9��}��<n�~$�����<3t$<9�b���H�A�#��<r��}���V$���g��H�YH�\$H�A<nw:</�N��<1�}}��<n�($���9��<r�M}���$���&����\���<r�0}����#���	�����SH��H����u�������H�{H�K H�C(�K0H�;ay��uL�A�I��ay��MD�L�H�{ay��uL�FA�I��ay��MD�L�CH�{ay��uL�FA�I��ay��MD�L�CH��ay��uH�~A�H��ay��ID�H�{H��ay��uH�N �H��ay��HD�H�K H=ay��uH�F(�H=ay��HD�H�C(��7f.�z!uH�F0H�$�$f.�zHD��H�C0�{8ay��u�F8�=ay��D��C8�{Pay��u�FP�=ay��D��CPH�{@��H�{Hto�����u�����t���ǃ�H��[�D������q���H�Cf��1�1�H�C 1�H�C(H�C0�S���H�FHH��t��tBH�CH�z���f�H�F@H��tH�ljT$H�4$���T$H�4$H�C@�@���fDH��H�4$�
H�4$�ff.���H���sv��H��tH�@H���D��H� J�@�G��tYL�O M��tPIc	H9�`D�P�1��IcL�L�@H9���L��L9�u�Ic�H��G��H�W(�H��H�G0H���@H�1��u�H�G0�@H��wH�G0��tID�HE��t9H�P1��DH��H��D�B�E��t��9�u���Ic�H�
�{���H��H����ff.��AWAVAUI��1�ATUSH��(�BH�|$1�H�T$�h��D$���H�D$H��t
H����H�D$H�5�'1�E1��z��H�D$L�`��tfE�~A9�*A�/L�����I��H��L�H�3�p����y�A�n�A9�~�L�|$1�1�L���"��L��M��t�E��H��(��[]A\A]A^A_�@�CH�L$1��L�|$��HAH�L$L��H�����L��M��u��ff.���ATH�5��1�US�WH���迲���S�1�H�5��該���S�1�H�5��蓲���S�1�H�5���}����S�1�H�5���g����S�1�H�5���Q���H�C0H��E1�H�5׃��P�HLcR�PR��HS8RQ�@H�
f "H��P1������SH��0��tg1�L�%ÃH�C(��H������H��I��H�C0H��H�K �pLc���HQ�HQ��HK8Q��V�@L��P1�覱��H��09kw��C��t91�L�%��DH�C@��L����H��HcD�@1�H���b���9kw�[]A\����H��Б�@���5H��ِ�ff.���H��H��H��dH�%(H�L$1�H��H������H�L$dH3%(uH������ff.�f���AWH��AVAUATUH��SH��1�H��dH�%(H�D$1�H���������H���KH�4$H��D�D�FH�n�F�~H�,$E��E�ˋN�VA��A��E�E��A��A��A��A���A���E�E�E��D�KE��A��A��E�E��A��A��A���A���E�E�A��D�CA��A��A��E�A����A��%�A���E�D�A���C��A����A�����%���E1���D�A�������CD�A���A�����A���A���A͉����D�kω������������1ɉS����L�c H�K(E��O�$vM�L�����H��H���mL�<$L��H��L��M��H��K�<�L�$$H������H�C0H���:E����1�1��H�C0��D�I��L����F�L
�TJ�<���D�D�IF�L
��D�D�IF�L
��D�B���QH�C0�T�T8�QH�C0���T�T8;sr�H���h��D�cL���<��H�C8H����H�,$L��H��H��I��j��D�kL�$$E���Y�{���.�S��tW��H������H��tHH�4$H��H���)��1�I��@��H�s0��H��A�H���H;Sr�L������f.�H��H�\$dH3%(�9H��[]A\A]A^A_�f.�L�4�L���`��I��H���)���H��L��H��L����D�CH�,$E����E1��D��A��I�<���щ։�����������%�΍���SA9�r�A��L������H���pL��H��H������J�T-D�kH��H�$���DC�|-H�����H��H�������I��L��H��L��M�����L��L�$$�u��H�C@H������E1�1���H�C@D��A����D�T�D��D��D��A�����������΁���B�B��A�@L�S@A���t���������������%�э�2C�D�;{r�H�����������H������H������L�$$H��H��L�����I�<,1�H�<$I��fD��H�{0��H��A�H���H;Sr�L������o���DD�k�4����E1��g����{��ff.���H��H��H��dH�%(H�L$1�H��H���W���H��t"�@H�L$dH3%(uH���f.�����������@��ATI��USH��H��dH�%(H�D$1��IH��H��L��H�����H�����xD��@I|$8�EH�$H�EA�L$��tSM�L$@M��tG�q���~@Hc�H��I�1HcH9�iI�D1��Q�H��H��H)��DH��H��Hc
H9�AH9�u�1�D�E�MH��t?���H�EH��H�|$dH3<%(uNH��[]A\�f��JD�E�ىMH��u�H�=�K�fDI�|$8E1��EH�E�.�������ff.�@��S�����t1��v<��u'H�wHH������HcH���H��[��1�H��[�f��_P_8���)��Hc�H��[��������}���ff.�f���AUI��ATI��USH��H�@H��t
���I�E@L��1����I�E@� fD���I�I�U@��H����L����\���H9�r�H��[]A\A]�ff.����SH��H�@H��t���H��[������� �齸��ff.�f���SH��H�H��t�Z��H��[�Q�����U�HH���SH���t���H��H������H�H��H��[]�ff.����AUATUSH��H��H�?���H�ŋC�E�C�E�C�E�C�E�C�E�C�E�{H�����H�E �{I�����L��H�E(D�cH�s J���ɻ��H�s(H�}(L��蹻���CH�<�H���Y��H�E0�SH��H�s0H��H��莻���{�6��H�E8�SH��H�s8�s����{H�����H�E@�SH��H�s@H���P���H��H��[]A\A]�f���SH��H�?H��t���H�H�{ H��t
����H�C H�{(H��t
����H�C(H�{0H��t
���H�C0H�{8H��t
���H�C8H�{@H��t���H��[���D�����SH����tH�C@[��1��H�C@[���USH��H�����~!1�H��H��H��HCH�x� ��9+�H�{����C��~)1�f.�H��H��H��HCH�x����9k�H�{����H��H��[]����ff.����H��t�H����f����~D'�-�&f(�f(�fT�f(�f.�v3�H,�f���5�&fU��H*�f(����fT��\�f(�fV��,�f��f(��*Љ�\��Y
�&f(�fT�f.�v3�H,�f���-~&fU��H*�f(����fT��\�fV�f(��,�f�ɉ�*�\�f���*��^
�k �Z��\��Y"'�,���ff.���U��SH��H�����H�L�K�s(��s H�
�s%H��H����sH��?�sI��I1�H��H��"HI�I)�H�5�j 1��&����C0H�� f/�tvH�5�j �����D���E��tq������R����������t3�������������w�����t
�����H���
[]�h���1�H�5j ��m�����t��fD���H�5�i �1��G�������f��{PH��"�S8H�
�i HE�H�5�i 1���������s����;���fDH�S@H��tH�5%�1����H�CHH������H�H�5�%�1�������@H���H�5Oi �1�螢������f�H�S@H�5�%�1��y����{P�S8�H��"H�
�h HE�H�5�h 1��M�����������t����������H�5�h 1�������e���@H�K`H�SX���1��sxH�5�h �L�KpL�Ch���Y^� ���f.�H�I��H9�}6H��H)�H��H��H�I��H��I)L�	L)�H�G�H�I��H��I��L�H�H9�H�I��IH�H�I��H�1��@AVI��AUATUH�o SH�_(D1�I��H�ٺ<�<�q�����u�I�[f�1�I��H��<�<�I�����u�I�k�1�I��H�ٺ��)�����u�I�[�M��H�ٺ�
�������u�I�KI��b�ȼk9H�-�g I�ףp=
ףL�-h @H���:H=`uv1H��I��H��H��?H��H)�H��Hiұ:H��H��IH)�I�KH��M�غ�
��~���I�����H��H��I��H��?H�H��H��H)�H��H��H��H9��3H��H)�H��H��H��H9��7I�sH�~�McD�I��H����H��I��H��H��?H�H��H)�H��H��H��H9�uFI�KKcD�H��~FL9���M��H�ٺ�
������u�[]A\A]A^��I�KJcD�H���H�I�{I�K���f�I�sH�~�LcD�I��H���H��L�N��u�H��I��H��H��?H�H��H)�H��H��H��H9��$����G���DL)�H��I�KI�s�<���@I�sH�~�McD�I��H�������DI�sH�~�LcD�I��H���y����g���f���AVAUATUH��S���H�����0H�����������t2H���HC(H�CxHC H�CpHCH�ChHCH�C`HCH�CXHH���������f�Hǃ�CXChCxǃ���t
����H�����L�f�H�KY�8��m4��I��N���ǃ�H��H��H��L��H��?H��H��
H)�tHi�c��H����%H��L�H�����H��H�����I��(\��(H�q=
ףp=
�[�H��H��H��I��H��H��H��H��H9�uH��H��H��H��H��H��H��H9�uH��H����H���t@��t�H��H���3�H���u�H�sA��upH��(\��(L��H��H��H��H��H��H��H��I9�u(H�q=
ףp=
L��H��H��H��H��H��H��I9�uH�ed �T����iҀQHc��H�	d iT���QHc�HiC�QH�H�S H������H��H��H)�HiSL�$����Lc(I�L����������K���"H���FL���ǃ�[]A\A]A^��H����I�ףp=
ף�ZH��I��I��I��?H�H��H��L)�H��H��H��H9�uH��L)�H��H��H��H9�uH����H��H9�����@��t�H��3���f.�H�WH�wH�?�N��Hc��H��H)�H�{h�8�����Hc�H9�H��H�sH��y
��H)�Hc�H�T�H�Sǃ��i���f�ǃ�kC8<H�I������H�kHH�������ǃ�H��L����H���H��I��HcH)���H��H��I���xIcEH���A�6I�}H��H)���)�H�H�H9�|	H9���9�����Hc�L��I����L������+���@kSP<HcC8ǃ�Hc�H)�H��H��H)�M�$����DH����������f�L���H�SH�sH�;�9M��M��u4H���H�������H�C�����k8��Hc��W���H�K~zH����H������H�L��H�sH�;H�gfffffffH��L��H��?H�H)�I��H��L)�H�S�L��K�T�I)�H�SL�L�H��H�JHM�H�S����DH���H��L��H�sH�;H�gfffffffH��L��H��?H�H)�I��H��L)�H�S�;L��K�T�I)�H�SL�I�M��H�B�HN�H�S���DH�C���fDH������H���|���f.�@��H�W)QΠ�EH��ATH��H��UH��?SH��
H��H)�Liɀ���I�H����M����L�AE1�1�1۹�L�%�LI�ףp=
ףM����I����}I���JH��I����|�H��I��A����H��I��I��I��?H�H��H��L)�H��H��H��H9�uH��L)�H��H��H��H9���I��nM���x���L�%RLM��uOH�ףp=
ףH��I��H��I��?H�H��H��L)�H��H��H��H9��1�H���L�%DL��I)�M�L$,�@McM9��I��H��u�H�H�GIc$H�_[I)�H�o ]L�GA\L�_(�G8�GPH���LJ�HLJ���H����H���:L�A��H��`u�H�|�j�Y�HL��M��I���������H��I��?H��
H��L)�Li���M�L��I��L��J�,I��?I��H��L)�I�ףp=
ףN�
I��M)�L��H��L)�M��I��H��A��I)�I��m`�s���@H��I��I��I��?H�H��H��L)�H��H��H��H9�uH��L)�H��H��H��H9�u!I��nI��m����H��I��A��t�I��m��H��b�ȼk9L��H��L��H��?H��H)�H��Hiұ:H��H��H���I)�����H��L)�H��H��H��H9�����������I��m�z���@H��M�����I���QA�L��H�I��A�<H��Hi���L�H�I��H��L��H�I��I��I�����f���AUATUSH��H�����H�����t^��vi��uTH�wHH���x�H��I��Hc0H�����L�����H���ǃ�ǃ�H��[]A\A]�DH��H�������D�g8D�oPH��Ak�<H�H)����D�c8D�kP�ff.�f���AUATUSH���������H��H��������upL�oHH��L����H��Hc0I��H�� ���H���H��A�D$�CPA�$L�kH�C8I�t$�I�L����ǃ�ǃ�H��[]A\A]�f�LJ�LJ�H��[]A\A]ÐD�g8D�oPAk�<H�H)����D�c8D�kP���ATI��USH��H�����H�{@H�ŋ�C8�EL�cH�CPH��t�֯��H�}荿��H��H�C@�Q�ǃ�ǃ�[]A\����H����t$H�Ht0H������1�H���f.�H������1�H��ø������fD��H�H�GH�G �G(���H���NH��/#H�5Z 1���RH�Z H�5Z 1���RH�ț"H�5Z 1���RH����Mff.����H��H��`F1����H�=S	�~���H�=7袺��1�H���ff.���H��1�1�诗��1�1��&���1��?���1��h���H�=��NtH�=w�N�2GH�g�NH�=h�NH��t�v�H�S�NH�=d�NH�I�NH�F�NH��t贉H�==�N�8�H�-�N�8���1�H��Ð����"?f���H��Hc��P H���ff.�AVA��AUI��H�5�X ATUH��SH��dH�%(H��$�1�H�D$��H���H��H��輶��I��H���0H�8H��t�H�5'� �Ǡ�����H��1�1��ó��L��A�H���ª��H����H�t$�H���7/H��t/A��t)H�L�JM��tE1�H�L$�H��H�t$A�у��tkH�=ۙN���`!
A�1�H��W A�������H�=��N1��I��H�|$1ɺL���AH��E��tH��KH���fDE��u�1�H��$�dH3%(H��u]H�İ[]A\A]A^��E1������L��E1�赩�����H�à�L�C0M���d�����7I��H�C0�S����֩��fD��H��Hc���H���ff.���H��H�5dH�%(H�D$1�H���ɶ���t%H�=��NtH�=��N�NDH�$�@H��NH�D$dH3%(uH����E���D��AUH��ATI��USH���gP�����H�=W�NH����1��׊H��H���yL�-.�#��A��H�5�"H���uH�MH����A��H�5�� H���uHcM �H�5��!H���_qH��L���jH�=��N1�覊H��H������p�H�5Y�N�@H��H���@�T�M�L��H���qHcM�H��H�5cP%��pHcMD�H��H�5<U ��pH�MH������H�
�!E1��H��A�H�5�"��uH�MH������A�E1��H��H�
�!H�5�� �u��f�A�D$I�$H��[]A\A]����H��賛��H�=��NH��tH���^�fDH�����USH��H������H���H�5�NH��H���sS�M�H��H�5;�#��oHcM�H��H�5/O%�oHcMD�H��H�5T �oH�MH��tcA��H�5q"H���sH�MH��tmA��H�5y� H���fsHcM H��H�ߺ[H�5i�!]�8o�H�
��!E1��H��A�H�5"�\tH�MH��u�A�E1��H��H�
G�!H�5�� �/t�D�CH�H��[]�fD��ATI��H�5-�!US��H��dH�%(H�D$1�H�T$�D$����tn�߲��H���FH�H9���1�H��@��H!Յ�t?�|$u`1�1��/���H�=��NH��t#��H�=��N袉H���N�A�D$I�,$H�D$dH3%(uHH��[]A\�D1��ѐ��H�=Y�Nuǿ8��1ɾXH�H��H�5�N�p�����f���H������H���f�H��t+H�F8H��t"L�@D�H4M��tH�щ�H��Q 1�1�����H�щ�E��1�H��Q 1������H����AUATUH��H�5xQ SH��H���ǎ��H����H��薯��I��H��tNH�8��1�1�H��踬��L��I��轣��M��t(1�L��H�5dQ �G���L��I��H���K�M��u1�H�5?Q H������I��H��t7H�����H��t,H�
��L� H�HH�
���H�HH��[]A\A]�fD1�H��[]A\A]�H���(����fD1��ff.�f���USH���=��NuUH��tP��H�5�P ���H��H��t5���V���H��H��t6H�(H�D���H�CH�)���H�CH��H��[]�1�H��H��[]�@H���+6H��H��[]ÐSH���H��`dH�%(H�D$X1�H��H���H�H��t%H��H���z�����tWH�D$XdH3%(uXH��`[�H���D$�D$蘳��H�D$H�D$H�D$(H�D$0H�D$8H�=x�NH����}��)���f���H��1��B���f�AVAUATUH��1�S��H��dH�%(H�D$1�H���� �����P�H�4$Hc�H΀>
��Lc��H��I�}�H)��DH�4$H�H���>
u�H9�u�A�H�=��NH����H���NH��N�4*L;5��NsKH�4$H�<L���{���H�<$L�5��N苅A��tUH�D$dH3%(��H��[]A\A]A^�@I���1�I���H�A�N�t�H�-�NH��N�@H�=(�NH�5	�N��1�����H�=��NH��t��H��NH�ݏNH�ڏN�X���DH���NI��MvgI���I���1�1�H���NM���քH���NH���N�����tc��tIH��H�~#1�1�����U���f��O�N�H�=5�NH��t@E1�E1��{���H��H���-�������H��H���������E1�Lc��6���E1�OE1�NH�ݎN�/���裟����H���H�T$0H�L$8L�D$@L�L$H��t7)D$P)L$`)T$p)�$�)�$�)�$�)�$�)�$�dH�%(H�D$1�H��$�H��H��H�D$H��H�D$ 1�H�D$�$�D$0��H�D$dH3%(uH�������H����USH��H�H��tH��H��wF�GH�'N Hc�H�>��DH��[]�f�H�HH��t
�b���H�CH�CH��H��[]����DH�-	�KH�H�EH��t��H�EH�{`H��t��H�EH�{hH��t��H�EH��H��[]��DH��[]�͖��D����H�=4�Nt
1�����H��H��{#��1�1��S���H���H�T$0H�L$8L�D$@L�L$H��t7)D$P)L$`)T$p)�$�)�$�)�$�)�$�)�$�dH�%(H�D$1�H��$�H��H��H�D$H��H�D$ �H�D$�$�D$0����H�D$dH3%(uH����������H���H�T$0H�L$8L�D$@L�L$H��t7)D$P)L$`)T$p)�$�)�$�)�$�)�$�)�$�dH�%(H�D$1�H��$�H��H��H�D$H��H�D$ �H�D$�$�D$0�]���H�D$dH3%(uH�����P�������N��tÐH���g���A�1�1�1�H�=��N������NH�����S��H��dH�%(H��$�1����A�ع�
R�H�=?I �/A�عH��H �H�=.I �3A�ع��
H�=&I �n/A�ع��H�=I �P/A�ع��H�=I �2/A�ع��H�=�H �/A�ع� �H�=�H �.A�ع�@�H�=�H ��.A�ع��H�=�H �.A�ع��H�=�H �.A�ع� �H�=�H �~.A�ع�@�H�=�H �`.A�ع��
H�=�H �B.A�ع��H�=�H �$.A�ع��H�=sH �.A�ع��H�=fH ��-A�ع��H�=YH ��-1�A�ع�H�=PH �-A�ع��H�=BH �-A�ع��H�=7H �s-�A�ع�H�=*H �U-H�=/H ����H���D$H�D$HDŽ$�HDŽ$�HDŽ$�HDŽ$�HDŽ$PHDŽ$XHDŽ$8HDŽ$HHDŽ$�HDŽ$�HDŽ$�HDŽ$�HDŽ$�HDŽ$�HDŽ$�HDŽ$�H�D$DŽ$hHDŽ$`HDŽ$@HDŽ$HDŽ$��p�H�I�NH��$�dH3%(uH�Ġ1�[��&���fD�����N��uÐH������B���H�=[�N�����NH������H�����1�H���ff.����H�ՆNH�=ΆN�ff.�f����݆N@�=ֆN�ff.�f���SH��H�5��!H��dH�%(H�D$1�H�T$�D$莤���t�C�|$���������H�H�D$dH3%(uH��[�����D��1��
�xH��H�A�T���u����փ��@���tm�փ��@���t:����u*���<�u�DH�Q��<�u�H����<�t�1��D�H�Q��<�u��H����<��s�����@�H����<��Z������UH��SH��H��dH�%(H�D$1�����H�,$H��H��j�CE1�H�=q�NH�sA��P��ZYH�|$dH3<%(uH��[]�������SH��dH�%(H�D$1��t!1�H�L$dH3%(uSH��[�f�H���6�	fDH��H�PH��u�pH��H�=ׄN�VH�p�K���u�H�$H����W������USH��H��tAH�GH��t8�HH���i��h��uH�H��tH�H���QyH�CH����[]ý������f���H����H����ATI��UH��SH�GH��H��t
H90t/�j���H�MH��tAH�K�A���AH�SH�zt[]A\�@[�@]A\��L�b[]A\����vxH�CH�(�@L�`H�E�[]A\�fD������f.���H�G H��t�@H�G �@��H��t8UH��SH���H���xH�C H�(�@H�@H���[]ø�����ff.�f���USH��H����H�G H�����P�Z��X��udH�G H��H�8H��t	���H�E H�xH��t3H�G H��t!H���a�H�E H�@H�x �wH�E H�x�wH�E H���wwH�E H����[]�fD�������f�H��t[SH�_H��t)H�{(tH�C(H�����H���"��������[�H�H��t
�x	tH�H������[�D������f.�H����ATL�%RB USH���{w�CIc�L�>��fDH�{�wH�{X�nH��H�k0財��H�;�:�����uH�C@H���V�H��t1H���@H�{@H��t�{Pu	H������H�{��D[]A\���H��t�F���fD�ff.�@��H��t'�O��	t��
tH�(t��tH�?���fD��SH��H�H��t����K��w�H��DuH�{XH��t���H�;�I�����uH�C@H��[�d�@��H��tOATUSH�oH��H��tL�e������t:H9]tH�{ t
H��[]A\�A����[]A\�H�E��fD��L������H�{ u���f.�D��S���H��@ 1�H�=��1���H��@ H�=��V�N���H��@ 1�H�=��5�N�x�1�1��"�N�Ɂ��1���mv��1���av��1���Uv���О��H��踙���#���H��諙������H��螙�����1���v������E1�E1�1�1�1�H�!@ ����A�عH�@ �H�=.@ ��N�'A�ع��H�=@ �|#A�ع��H�=@ �^#A�ع��H�=@ �@#A�ع��H�=@ �"#A�ع��H�=	@ �#A�ع��H�=@ ��"A�ع��H�=@ ��"A�ع��H�=�? �"A�ع��H�=�? �"A�ع��H�=�? �n"A�ع��H�=�? �P"A�ع�@�H�=�? �2"A�ع��H�=�? �"A�ع��H�=�? �!A�ع� �H�=�? ��!A�ع��H�=�? �!A�ع��H�=u? �!A�ع��
H�=e? �~!A�ع���
H�=T? �`!A�ع��
H�=C? �B!A�ع��H�=2? �$!A�ع��H�=*? �!A�ع��H�=#? �� A�ع��H�=? �� 1�A�ع�H�=? � A�ع��H�=? � A�ع��H�=	? �s A�ع��H�=? �U A�ع��H�=�> �7 1�A�ع�H�=�> � A�ع��H�=�> �A�ع��H�=�> ��H�=�> A�ع����H�=�> �V���H�����H��H�=~{N��yH����FH�=|R H���S�H��H�=�> �D�H��H�=�> �5�H��H�=�> �&�H��H�=�> ��H�ƀ_�H�=�> �
H�Ơ^�H�=�> �
1�[�DH�=:> 謍��H���V����^���L�,> H�1> �H��H�=�zN1����<���D��H�?鄅��@��H�?��x��@��H�?����@��H���+H�|y"H�5�= 1���90H��: H�5�= 1���0H���+fD��H��H�=�= �\
H�=�= �P
H�=Q �D�H�=j= �8�H�=X= �,�H�=X= � �H�ư�XH�=I= 轜1�H���fDAWAVAUATUSH��H��XH�|$(H�t$ �L$dH�%(H�L$H1�H�������m�@H���@H�D$8��0H�D$@H��1�E1�H�D$�?���A9���fDD��H���u���H���=���H��I���2����L$�Dž����_p��H�D$�A������Jm�@H���@H�$�c0�D$�f�A�����E��D��L��H�����A�Ņ�xމ�H�߃D$�߇��H���W���H��H���̙����t7H�|$H��芘��A�ǃ��t�H�t$@H�<$�D���lI�f.�H���hr��H��H�D$@�[v��A����fD�|$��H�$�xvH����H�<$�lH�����D$t6E��x1L�d$L���w��H�L$@E��L��H�|$8�PA��.>fDH��E�f謘��A9��s���H�D$ H����H���]w���PH�D$(�H��tb1���u^H�|$(�T$H�G�Pp�T$H���E@�{��H�D$�O���f�L�d$L���w��H�$H�|$8L��P�??�b���H�8H�L$8H��E1�A�jH�t$0�I�XZH�D$HdH3%(uH��X[]A\A]A^A_�H�D$(H�D$8�s�������@AWAVAUATUSH��H���dH�%(H��$�1��ā��H��H��tgH��t
�{������H��H���݆��H��tE1��1ҾH���qx���k��H��H��豆��H��tE1��1ҾH���Ex��H��$�dH3%(H����H���[]A\A]A^A_�f�L�d$ H�;E1�L�l$(L��L�t$0����D$�fD���H��H��� ���H����H�T$(E1��H�ǾH�H��w������D$f.��S���1���u
H�CH��PpH��L�����S����1���u
H�CH��PpH��L��L���{������H�T$(H�
H�T$�yt"�yu�A���=H��赀H�D$(H�H�1L���M���������D$I��������i��H��H������H����H�T$(E1��H�ǾH�H��v�������SA���������H�;�	����H�;L��L��������'����D$��u�|}��H��H��葄��H���
E��������f.�H�D$(H��7 �1�H�H�1�谬�k���H�D$(H��7 �1�H�H�1�般�C������H�L$�A�gH�T$H�L$H�H�D$(�oH�H�QH�PH�D$(H�8�v
��H�D$(H�8�GH��BH��y�d����O���@H�D$(H��6 �1�H�H�1�������^���E1��1ҾH���u������f���UH��H�5�8"SH��dH�%(H�D$1�H��H���Q����t6D�
͂N1�1������A�H�3 H���g�H��t*H�$H�8��H�D$dH3%(uH��[]���EH�E��襂��D��UH��H�538"SH��dH�%(H�D$1�H��H��豏���t6D�
1�N1�1������A�H�_2 H�����H��t*H�$H�8��H�D$dH3%(uH��[]���EH�E������DSH���f.�H����o��H�����H��u�H��[�y��f���AWAVAUATI��H�5c5 USH��hdH�%(H�D$X1�H�L$H�T$(H��H�D$ H�D$8H�D$@H�D$HH�D$PH�D$P1�L�L$0L�D$(蒎^_���t^A�D$I�$�h���H���l���T$H�t$(H��H���,�����uXH��tH���i��H�|$8H��t�<���H�|$@H��t��n��H�D$XdH3%(�H��h[]A\A]A^A_�f.�H�t$0H����s��H��t�H�t$ H�|$0H�L$@H�T$8L�D$H�`i�����p���H�|$����'蟕��H����k��H�t$@H��H��跔�����H����h���r���H���k��H��1�1�jH�t$HE1�E1�H��H���*z��ZY���hH��E1��h����d�@H��I���@�%'H�D$PH�D$�f�L��I���Th��H���m��H�|$H貒��H��H�����є��H���	k��H��H��I�������t�H�L$1ҾsL���Cy����ycH���@�@H�D$PH�$H�0H�x�r�3fH�$L��L��H��B�m<�X����H�|$HH��tV�Qv��H�|$L��H�5�2 ��6A�D$H�|$0I�$�i�������S�H�|$�P���f�A�~v�L���1���H�L$P1ҾsH���dx����bI���@�@H�D$PH�0H�xA�u�WeA�EH�|$L��I�E�H�5�1 �6�0���H�L$P1ҾsH���w����2bI���@�@H�D$PH�0H�xA�u��dA�EH�|$L��I�E�H�56 �5�����}��SH��H�XH��t
�|��H�CXH�;H��t�Ɋ��H�H�{H��t
贊��H�C[�f.�SH��H�$H��dH�%(H��$1�H����H��thH�����輀����u0�j����t7�����H��$dH3%(uWH��[�fD�1���fDH�I9 �1�1��c�벐H����s��H��H��u��i����u����|��ff.�H��H�$H��dH�%(H��$1���uq��tmH��t0�{�����t<1�H��$dH3%(uQH���f.�H���Ss��H��H��u�1�H��/ �1�覤��������������|��ff.��ATUSH�� D�GHdH�%(H�D$1�A���wH�w H��H�H��/ �`r��H�T$H�t$H��H���+����6s��H�CXH��tm�CL���������{H1�1Ҿ�g���D$I��H��t8胄��L��H���hk��H�t$L���{�����t�D$����L���É���T$�t$H���p���H�{XE1��Tz��H�CX@H�L$dH3%(L����H�� []A\��1�H��. �1��K��T$�t$H�������f��{H1�1ɾ�ߏ��H�{X�H���e�����V���L�cX�T$H��t$����M���a����D���@���1�E1�H��6 �Ţ�8���L�������������H�{XL���?e����u�����z�����AVAUATUSH��H�5�/"H��dH�%(H��$�1�H�l$H���������D�
�yNH��1�1�A�H��) ������%�H��H�����Ď��H���d��H��I��H����{��1�H�L$L���:s��H��I��� H���~���H�5h/ H��Hc��&H�L$H��E��A��H�5;) �>/H����u����B�������.���eH���=c���H��H����H�L$HH��H�T$@H�t$8��r��H�T$PH�t$XH���b����\H��H��H���oH�@H�EU��H�|$8H��tU舅��D�h��DI�A��A�}Hc��m\H�|$8H��I����~��Ic�E1�E��A�L��H��H�5�$�H.H�|$HH��tU�)���D�h��DI�A��A�}Hc��\H�|$HH��I���n~��Ic�E1�E��A�L��H��H�5*�!��-H�|$PH��tU�ʄ��D�h��DI�A��A�}Hc��[H�|$PH��I���~��Ic�E1�E��A�L��	H��H�5�+ �-H�|$XH��tU�k���D�h��DI�A��A�}Hc��P[H�|$XH��I���}��Ic�E1�E��A�L��H��H�5,+ �+-H��H�5}�H����.��H�ߺH�5��#�#L���\_��H��$�dH3%(�}H��[]A\A]A^�D�CH�������H������fD��q�0�!��t�!=�u�H��葅���H���[���H��H�L$���H���N���H���s��H�L$�����/�����ZI��H��L���oH�@I�EA]�*����\��H��tA�H���L��H�5�) ��)���*l��H��H��tBL�t$`�H�¾PL���l��L��L��
A��A�H�5�) �+H���Pf��L��H�5K�H���)-��g������F�����H���WZ���H��H���>���H�L$HH��H�T$@H�t$8�c��H�T$PH�t$XH����_����YH��H��H���oH�@H�EM�H�|$8H��tU�ҁ��D�h��DI�A��A�}Hc��XH�|$8H��I���{��Ic�E1�E��A�L��H��H�5i�$�*H�|$@H��tU�s���D�h��DI�A��A�}Hc��XXH�|$@H��I���z��Ic�E1�E��A�L��H��H�5� �3*H�|$HH��tU����D�h��DI�A��A�}Hc��WH�|$HH��I���Yz��Ic�E1�E��A�L��H��H�5�!��)H�|$PH��tU赀��D�h��DI�A��A�}Hc��WH�|$PH��I���y��Ic�E1�E��A�L��	H��H�5m' �u)H�|$XH��tU�V���D�h��DI�A��A�}Hc��;WH�|$XH��I���y��Ic�E1�E��A�L��H��H�5' �)H��H�5' H���*����DH���xu��1�H��H������H��H�L$0H�T$(H�t$ �3a��H��H�T$@H�t$8�Q}��H�L$XH�T$PH��H�t$H�:�����VH��H��H���oH�@H�EE�H�|$ H��tU�O��D�h��DI�A��A�}Hc��4VH�|$ H��I���x��Ic�E1�E��A�L��H��H�5�N#�(H�|$(H��tU��~��D�h��DI�A��A�}Hc���UH�|$(H��I���5x��Ic�E1�E��A�L��H��H�5k��'H�|$0H��tU�~��D�h��DI�A��A�}Hc��vUH�|$0H��I����w��Ic�E1�E��A�L��H��H�5%�Q'H�|$8H��tU�2~��D�h��DI�A��A�}Hc��UH�|$8H��I���ww��Ic�E1�E��A�L��H��H�5��$��&H�|$@H��tU��}��D�h��DI�A��A�}Hc��TH�|$@H��I���w��Ic�E1�E��A�L��H��H�5ߡ �&H�|$HH��tU�t}��D�h��DI�A��A�}Hc��YTH�|$HH��I���v��Ic�E1�E��A�L��H��H�5$ �4&H�|$PH��tU�}��D�h��DI�A��A�}Hc��SH�|$PH��I���Zv��Ic�E1�E��A�L��H��H�5�# ��%H�|$XH��tU�|��D�h��DI�A��A�}Hc��SH�|$XH��I���u��Ic�E1�E��A�L��H��H�5e# �v%H��H�5V# H���'1��P����3o��H��tH��tH��t1���p���^������AUATI��USH��H���dH�%(H�D$1�H�$H��t��H��H��" H�5�5 ���t'1�H�T$dH3%(��H��[]A\A]�fDL�,$I�]�{t�{u�C��w<H����iL�,$I�]H�3H��t��C��9�}���L��Hc��\g��I�E�@�����C�0RI�EH�$�oH�H�SL�,$H�PI�}�v
�C�L�,$I�}�GI�E�@I�]�{�r����]�����m��@��AVAUA��H��ATUSH��H��dH�%(H�D$1��s��H����y��H�߉���s��Lc��V��H�߉���e���5(mNH���0v��I�ă���D��I��$�H��tH��H��! H�54 ����t*H�T$dH3%(���H��[]A\A]A^��L�,$M�eA�|$t!A�|$u
A�D$��w~L���bH�$L� M;4$~��H��1��b����H���D��H���s���H��H��  H�5]3 �g����+���H�$�H�8���������
�������A�D$�^PI�EH�$�Ao$H�I�T$H�PH�$H�8�v�o�H�$H�8�GH��BL� �$����k��ff.�f���SH��H�5.�!H��dH�%(H�D$1�H�T$�D$�x���t,H�����|$H�ڿH�5�H��HD��=]��H�D$dH3%(uH��[��rk��f���SH��H�5��!H��dH�%(H�D$1�H�T$�D$�~x���t,H���q�|$H�ڿH�5-H�vHD��\��H�D$dH3%(uH��[���j��f���H��H�w�H����*���AVAUATUH��H�5? SH��0dH�%(H�D$(1�H�L$�D$H�T$H��H�D$P1�L�L$ L�D$0�wZY�����H�|$ �'j��I��H����H���C[���D$��Hc��TNI���n��L��H��H����O��HcT$H�t$H������H�T$L��H����z����tH�|$�D$t]HcЉEA�DL�m�EH���1y��H�D$(dH3%(��H��0[]A\A]A^�L���M�EH�E�f.�D�$A�|$Hc��M�T$L��H��I���]�L���MD�eL�u�E�{���@H�� �1�1��ˑ�EH�E�Y����5i��D��AWAVAUATI��H�5� USH��XdH�%(H�D$H1�H�L$�D$H�T$0H��H�D$#PH�D$4PH�D$XP1�L�L$@L�D$X�vH�� ����PH�|$8�gq��H�9 H��H���cH���|[��L�l$@�D$9D$$�iH���QW��Hc�H���LH��1�H��I���fZ��H���n|��D$�ǃ�Hc��]LI���v��H��H����H��1�1�H����w���t$$;t$��M��L��1�1�H���|��D�D$L�L$(E��~H�L$0L��L��H��L�L$�s{��L�L$Hct$(L��H��H��L��(b������t$(�|$��Hc�A�t$A�M�<$A�D$L9l$@tL����KL���KH���y^��H����r��H�D$HdH3%(��H��X[]A\A]A^A_�fDH�!$ �1�1�賏A�D$I�$�Hc�H���%KH��1�H��I���Y��HcT$$H�t$@L���`���e���fDH�T$,L���k�L��H���K�D$,I�,$A�D$A�D$� ����L����JA�D$I�$���DH���v���g����~f��ff.���AWAVAUATI��H�5� USH��XdH�%(H�D$H1�H�L$�D$H�T$0H��H�D$#PH�D$4PH�D$XP1�L�L$@L�D$X�NsH�� ����]E1��|$��H�|$8�n��H�k H��H����H���X��L�t$@�D$9D$$�;H���T��Hc�H���IH��1�H��H�$�W��H���y��D$�ǃ�Hc��II���&t��H��H���JH��1�1�H���o���t$$;t$�]L�$1�1�L��H���:m��L�L$(L��H��D�D$H�L$0L��L�L$��n��Hct$(L�L$H��H��L��L��w�����l$(M�,$Hc�A�l$A�DA�D$L9t$@tL���
IH�<$�IM��tL����HH���[��H���p��H�D$HdH3%(��H��X[]A\A]A^A_ÐHc�H���HH��1�H��I���eV��HcT$$H�t$@L���s]�����fD�t$H�|$0H�T$,�e�I�NjD$,L�|$0�D$�-���H��  �1�1�苌A�D$I�$�T����H����s�����L���HA�D$I�$����c����AUATUH��H�5O SH��(dH�%(H�D$1�H�\$H�L$H�T$I���p���tFD�
AcNH��1�1�A�H�q ��������H��H��t
H���`����t2�EH�EH�D$dH3%(��H��([]A\A]��H���XM��H��H��t��t$H�|$1��I��H��I���x���xHc���FH��L��H��I���^����x%HcЉEA�DL�m�EL���g���n���@L����F�EH�E���b��DAUA��ATI��UH��H��SH��H����Q��H��E��L��H��H��[A�]�PA\A]�^ff.�USH��H��HdH�%(H�D$81��s�����IH����O��H��Hc���K��H���nQ��H9��EH���O�����=H���K��H���dHf�H��H�D$0)$H��)D$)D$ �~O��1��
H�H�\�H���h���H�{�1��
�$�rh���C�H�{�1��
�D$�Zh���C�H�{�1��
�D$�Bh���C�H�{�1��
�D$�*h���C�H�{�1����
�D$�h��H���D$ ������C�PdN‰D$�BV��H��HD$(H���"EH�L$8dH3%(H��uZH��H[]��H�� �1�1�H������$��f�H�> ��H�KH�� 1�1��H��������p`��USH��H��dH�%(H��$1��S��H��u/�CH�H��$dH3%(uaH��[]��H��H���r��H��H���O���ƉC��xH����F�CH���H�5���1��M��s����_������uH���@����{�ff.����WH���tÐH�w�H���off.�@AVI��AUATUS��P��I��H����H����x��L���������H�5�"L���$j��I��H����1�1�1�H����^��H��H��u4�DH���p_��H�0H��H��tL���
q��H�H���V��H����S����u�L����S������L���:G��H����U��[L��]A\A]A^�fD1��L���a����6���L��E1�E1�1��U����H� �1�1��ˆE1�1��@L��H� 1�1��1�覆L��E1��[U���d���fDL��H� �1��z�L��E1��/U���8���L��H�� 1�1���R�L��E1��U������f�AVAUATUH��SH��H��PdH�%(H�D$H1�H���%L�d$H�}�H�5� L���X�����H�)MNH�C(H�}�L��H�5� �-�H���!��uH�D$H�H�H�S H�5�LN1�1��SW��H�s(1�1�H��CW��H�CH����H�G 1�H���S��I��H��t]H����xt1��L������t=L���e���u1L��H�5Y"�g��I��H��tH���B[��L���*E��f.�H�{H�� 1��S��I��H����H�{H���&q��I��H���E1��	DA��L���TQ��A9���L��D���N��H�xI����c����u�I�|$��i����u�I�t$I�|$H���0X����u�I�L$M�D$H�H 1��A������Y��?@H�D$H�H�H�C(�W���@H���?L�d$H�}�H�5 L���r�����H�D$H�H�H�C0H�}L��H�5� �C����sH�D$H�H�H�C8H�}L��H�5� �����$H�D$H�H�H�C@H�}L��H�5� ������H�s H�{H� �C���CHH�}L��H�5� 讧���H�D$H�H��CLH�}L��H�5l 耧����H�D$H���CPH�{0H�����8Z��H�CH�CH����L�k8H�kM��tGL�d$1�1�E1�1�A�L��L�s(��k��H��L���?��1�L��L��H����g�����{H�kH�s H��H�� �P��H��H��tH����c������H�k@E1�H��tGL�kL�s(H�\$1�1�E1�1�A�H���Hk��L��H���?��1�H��H��L���mg�����$H�L$HdH3%(D���`H��P[]A\A]A^ÐH�s H�{H�D �O��H�s H�{H�� H�C0��O��H�s H�{H�� H�C8��O��H�s H�{H�2 H�C@�DA���CL�CHH�s H�{H�� �O��H����H�ƹH�=��$�������H�{0�CPH���>���H�{H�s H�� �GO��H��H�C0H������H�CH���#����Y��H�CH�C�����H�)HNH���!H�G(�"���f�H�s H�{H� ��N��H���F����CP����H�D$H�H��CH�'���DH�s H�{H��
 �N��H�C@����H�s H�{H�_
 �tN��H�C8����H�s H�{H��
 �TN��H�C0�0����CL���M��M��H�
�
 H� �1��A���������M��I��H�
^
 ��H��1�A�����H�� �����L��H�� 1�1��A����������W��f�ATI��H�����USH��dH�%(H�D$1�I�4$H��P��tf��uY�pH�8��~�?file���@��H��H��1�1�1��\��H��H���1?��H�L$dH3%(H����H��[]A\Ð1���@H�L$A�1�H��D�
%VNH�� �պH��H��t�H�H�I�$렐f�:/�r����/�h���H��H���[���H����xt1��H��������y���H�������i���H��H�5�"��`��H��������U��ff.�f���ATUSH��H�5� H��0dH�%(H�D$(1�H�l$H�L$H�D$L�L$L�D$H���D$H�D$�b������CH��H�t$ H��6���H��H����H���L�d$�xuxL������uJH�|$H�5�u �`��I��H�����|$thH��L���mG���CH�H�|$ �tzL���b=��H�D$(dH3%(��H��0[]A\�D1��L�������q������H��H���C���H�A �1�1���|�f�H���N���y���H�L$H�s
 1�1���|�O����,T��ff.����AUATUH��H�5R
 SH��8dH�%(H�D$(1�H�\$H�L$H�D$L�D$H���D$H�D$�
a���tc�EH��H�t$H�E���H��H�����h��H���?���|$I����H��L���E����u6H�|$���L����;��H�D$(dH3%(��H��8[]A\A]�1�H�L$ �sL���L��L�l$A�}v
L����L�l$H�D$ H�0H�xA�u��9I�EH�D$H�|$��@�EH�E�o����/�H��H���5B��H��L���:E�����<����m���DH���@M���1���H�Y �1�1��{�����yR��f���USH��H�5� H��(dH�%(H�D$1�H�L$H�T$�D$�x_���t9H�|$H�t$����H��t?H���7��H��H���L��L$H��1�H�����H�D$dH3%(uH��([]��CH�����Q��ff.���ATUSH��H�5� H�� dH�%(H�D$1�H�L$H�T$�D$��^���tIH�|$H�t$�b���H��tUH����?��H��H���9��H��I����K���C�5QNL��荳H�H�H�D$dH3%(uH�� []A\���CH����Q��fDAUA��H�����ATI��UH��SH��dH�%(H�D$1�H�2H��C<���P�����<t�{u�C���H���LH�]�sH�;��~�?file�G�z:��H��H����H�=�qKE1�E1�1�H��H�5�A ��Z��H��H����8��H��tA��uzf.�H�L$dH3%(H����H��[]A\A]�fDD�
�ONH�L$A�1�H�	 �h�H��H��tH�EH�I�$��ON9D$t�1��D�5�ONH����H�I�$�w��������C�3H�E�oH�SH��H�PH�� �����@H�E�@H�]�{������sH�;����������@f�:/������/�����H���H�_�xt1��H��������1���H�������!���H�EH�5�"H�8H����Y��H��H�������1�1�1�H���A��H��H���>7���d���f�H�����H�E�"����N��f.���SH��H�5�: H��dH�%(H�D$1�H���[���t�CH�<$H�ھ�;���H��tH�D$dH3%(u&H��[�H� �1��v�CH����M��ff.���ATUSH��H�5, H��0dH�%(H�D$(1�H�L$ H�T$�D$L�L$L�D$��Z������CH�|$H�T$1�H����H��H����H���L�d$ �xuyL������uJH�|$ H�58n �LX��I��H�����|$tiH��L���a���CH�H�|$�t{L���5��H�D$(dH3%(��H��0[]A\�fD1��L�������p������H��H���5Q���H��
 �1�1��+u�f�H���:���x���H�L$ H�� 1�1���t�N����lL��ff.����AUATUSH��H�5� H��8dH�%(H�D$(1�H�L$H�T$�D$L�D$�_Y������CH�|$H�T$1�H����H��H�����a��H���Q7���|$I����H��L���(`����tUH�|$���H�L$ 1ҾsL���qE��H�D$ L�l$H�0H�xA�u�w2I�EH�D$�@�CH�H�|$�tWL����3��H�D$(dH3%(ufH��8[]A\A]�@H��H���O��H��L���_����t��]������a���fDH���9���fDH�!	 �1�1��ks���J��@��AWAVAUATUSH��H�t$@H�L$_H�T$`H�5� dH�%(H��$�1��D$_H�D$h������W����&H�|$`H�T$h1��u���I��H���`L�t$@L����L���N��1�1�H���xP��A�L���H��H��H�5�$�X��/H�5l H����[���\$_L���M��H�5� L����H��L����L���@��H��$�� H�, I��H�L$8H��1�L����L��H��A�H�5��"I�����\$_L���O��H�5�L����H���~���L���Z���H�5Fz L��H����L���gG��1�H����=��A��
L��H��H�5���`�L���3��H�5��L��H�H���L���kE��H�5��L��H�H��v�L���^3��H�����H�5^�L��H���L���'E��H����H�5M�L���H���h�1�L����B��H��tA�H���L��H�5%���E1��,�@H��I���@���3��]���H�¾H����Hc�H��L���hA���?E��A9��&��,�@H��H���@�6�D���~:��H��I���sB��1�L���Ɖ��7��1�H�߉�����L����6��H�߾����|$_L���M����H=���H���H�L$ H�|$@�H�5�L�|$�@�H�|$h�uL���`5��H��$�dH3%(�ZH�Ę[]A\A]A^A_�H�D$@L�|$�xv
H�|$@蝼H�|$h��H���/��H�D$@�@H���H�|$@L��	E1�H�5������*�@H���@H�D$ ���H�D$pL�|$H�D$(H�D$xH�D$Hf�H�|$�FW��A9����H�|$D���p<��H��H���5>��H���-A��H��A�Ņ���>��H���A�����K-��I���c[��H���1��H��A��U�}H����@��I��H������H���L��I�MH�t$H1�H�PH�T$xHcH�����}>��I��M�������L��1���:��H�H�H�H�D$H�L$H���SL�d$0�G�H�5L�����L��H����+��H9l$~H�5�E H���?6��H��H9l$���L���67��I�Nj��t<��u�H�5��H���6��M�gL���3��L��A���/��D��H��H���#N��댐H�5�H����5��M�L����2��L��A����.��D��H��H����M���R�����<��L�d$8���H��L���<����Y��H���0��H��1�1�H��H����W����uBH���6K��H�|$ L��H�H����H��A���,������f�L�d$0H�5�eKL���lK��H�L$(1ҾsH���>��H�l$pL���3��H�|$ A�L��H�MD�E�P�-��A�U I���"���L����1��������C��f.���AWAVAUATUH��H�5��SH�����H��HdH�%(H�D$81�H�L$(H�\$ H�T$H�D$H��H�D$8H�D$P1�L�L$@L�D$(�PZY�����H�]H�\$0�EH����H�����H��H����H�|$�"���I��H����H�|$H�T$ 1���I��H��teL�t$(��/��I��H����H��L��L��H���fB��E����L���L��L��Lc���8��A�����EL�uH�|$ uL���0��L��� .��H��tH�5�cKH���I��H�D$8dH3%(uaH��H[]A\A]A^A_�DH�|$�N���I��H���,�����D��L���UB���c���H����1�1��jE1��EL�u�c����B��fDAVAUATUSH��H�� dH�%(H�D$1��l3��I��H��xt`1�H�T$H�����H��t$H�|$�t
H����1��H��tH��L����S����H�\$dH3%(L����H�� []A\A]A^�@H��H�8L�l$L�t$H���(��1���u
H�BH��PpH��H��L���Q���u�H�|$1�L���.�H��t�H�|$�tH���91��H���h���H��L���5S��H��J��t91���u
H�BH��PpH��H���ݕH��J���m���H�:�y���DH�:���@��fD��AWAVAUATUSH��H��dH�%(H��$�1�H�D$p�FH�L$@H�D$PH��$�H�D$XH�D$pHDŽ$�HDŽ$�H�H�5��PH�D$`PH�D$`PH�D$`P1�L�L$dL��$��GMH�� ����BH����L��$��}�YL���y�����}L��$��WL���W�����H��$�H�5B�!�J��I��H���GH��$�H�5g` �{J��I��H���'��0��H�|$HI��H��x�-1�H��$��F�H��tVH��$��t
H���N/��H��t>H��L���NQ��H�|$pwH�D$pH�� Hc�H�>��H���1�1��kgE1�L���%��L���h'��L���`'��M��tH�5�_KL����E��@H��$�dH3%(�JH�Ĩ[]A\A]A^A_��1��L���Y����������1��L���9����������1��!%��L����&��1���&���u���DH�8H�l$`L��$�H���ВH�D$hH�$H����1���u
H�BH��PpH��H��H�������iH�|$h1�L�����H������H��$��tH����-��H�������H��L����O��H�D$HH��J���1���u
H�BH��PpH��H���a�H�D$HH��J���T���H�:�`����)��H��H���3����L$XL��L���4&��I��H���0���H�T$PH�����J����1���u
H�BH��PpH��H�l$`H��蜑H�D$hH�t$xL�|$H�L$<H��$�L�d$I��L�l$ I��I��H�\$(H����1���u
H�BH��PpH��H��H��葒���IH�T$P�J���1���u
H�BH��PpH��E1�L��L��I��L��蟑H�T$hH�
H�$�yt"�yu�A���;H���7H�D$hH�H��$�H�	H����H�5��L��1���5��H�T$P�J��tx1���u
H�BH��PpH��H��輐H�T$P�J���
���H�:������H��H���Y����7��H���L����>��H���?�����8��H���2���fDH�:���H�:�H�:���H��H�5�"L��1��,5���Q����L�|$L�d$L�l$ H�\$(1�1ҾL����4���L$XL��L��L���	&���CH�����f����H�L$�A��H�$H�L$H�H�D$h�oH�H�QH�PH�D$hH�8�v
��H�D$hH�8�GH��BH��y�g����R���DH�$�A���H�:�n����R:��f�AWAVI��AUA��ATA��UL��SH��xH�|$dH�%(H�D$h1�H������D$dH�D$ M��tI�L�|$I��C<�T<�$�P����(<t"�{u�C����H���B5L�|$I��s���~E����H�;�#��I��M����L��L��1�1��7��L��H���"��H����D��t	H�����|$d��H�L$hdH3%(H����H��x[]A\A]A^A_�f�H�;�?file�qE���v���1�H�T$ L��E1���H�|$ �I��A��H����L���(,��H��E���e���L����&���X������8NH�L$L��H��D�
w8NA������H���P1���H��XZH����H��tH�D$H�H�H�E�D$;18N��;)8N��H���D����C����B�����4���{H���s"��H��H��tAH�L$8H�T$0H��H�t$(�2��H�|$(�'H�T$HH�t$@H����!��H�|$H�	E���n���H���1�1��<`@�|$d��1��N���fDH�;H�T$H�讈����UH�D$HH��P�����o)D$PH�@H�D$`��v
H�|$P蟭�|$dt
H�|$P�2L�t$PH�D$H��J����1���u
H�BH��PpH��1�H�T$�$������L�|$I��C���f.���6N1�H��� ��|$dH�H�E�g���H�|$P�5��X���f�:/������/�y���H�_E���yH����H����xt1��H���H��������H�����������H�5��!H���AA��I�����1�1�H�����^�|$d�l���f�H�|$P1�脫��������C�I�H�D$�oH�H�SL�|$H�PI�?�wh�GI��@I��{�����s���i������@L�0�O����H�:�h����E��t+H���(��H�����裫L�|$I�?�f�1�����f�H����1�1��]1����H�T$ 1�L����I��H���=H����H�5��!H����?��I��M������L��1�1�1��'��L��H���L���@��������H�h��1�1��]���D��qt
��tt��Fu�H�����H��H�������H�L$8H�T$0H��H�t$(�"��H�|$(tuH�|$0tmH�T$HH�t$@H������A����H�D$H��pH�8�
��I���'���DH���6��H������H�T$HH�t$@H���>��H�|$@���E���e���H�����E1�H�|$ �A�����H���������3��f���ATUSH��H��0dH�%(H�D$(1��FH�L$H�T$H�H�����H�5Q�H�D$H�D$ 1��}@���thH�|$H�T$1��'�H��H��toH�|$L�D$ �1�H�3�!���I��H��t"�CH��H���'������H�|$ ���H�tHH�|$�t0H�D$(dH3%(u:H��0[]A\���CH���H��� ����fDL����1����2�����SH��H�5� H��dH�%(H�D$1�H���?���t!�CH�<$1�I�ع����H��tH�D$dH3%(uH��[�f��CH����1��ff.���SH��H�5��H�� dH�%(H�D$1�H�L$H�T$H��!L�D$H�D$1���>���t"�CH�T$1�I��H�|$��9���H��tH�D$dH3%(uH�� [�fD�CH����V1��fD��AWAVAUATUSH��H�5>�H��XdH�%(H�D$H1�H�l$ H�L$H�D$H�D$ H�T$H��I��H�D$0H�D$0PH�D$PH�D$(P1�L�D$ �>H�� ����u�CH�|$H�T$01�H����I��H����H��L�D$8�1�H���!�5���H��H���yH��L���>%������H���L�l$�x� L��������L�l$(E1�M��tYL�|$@I�}�H�5+�L���|��uH�D$@H�L�0L�l$(M��t#I�}L���E1�H�5����|���jjL��E1�M��jL��H��jjH�|$0�Y@��H�� H�|$H�5�P I���:��I��H���L��H���?���CH�L�����L�����L���g���H�|$8���H�|$0�tCH�D$HdH3%(��H��X[]A\A]A^A_�1��L������������L������fDH�Q��1�1��kW�f�H�Y��1��MW�a����H����1�1��+W�S���fDH����-���8���H�L$H���1�1���V���H�|$@�V�I������Y.��f���AWAVAUATUH��H�5T�SH��xdH�%(H�D$h1�H�D$8L�d$0H�D$ H�L$(H�\$ M��H�D$(H�D$8H��PH�D$$P1�L�L$`�;ZY������EH�T$@1�H��H�E���I��H����L��L�D$H�1�H���!�?�I��H����H��L���H"������H�\$8E1�H��tcL�|$XH�;�H�5\�L���'z��uH�D$XH�L�0H�\$8H��t.H�;L���1�H�5���y��uH�|$X��H��@jL��E1�I��jL��L��jjH�|$p�=��H�� I���B��H���;��L��H��I���M<����t_H�|$(�v�)�H�L$`1ҾsL���e&��H�D$`H�T$(H�0H�xH�T$�r�gH�T$H�H�D$(�@�EH�EL������L���z��H���B���H�|$H�tzH�|$@�t*H�D$hdH3%(��H��x[]A\A]A^A_��L�������fDH�I��1�1��cT말H���1�1��KT�f�L���*���y���H�)��1��T�V����+����AWAVAUATI��H�5��USH��(dH�%(H��$1�H�D$PH�L$(H�D$(H�D$@H�T$0H�D$PH�D$`PH�D$HP1�L�L$XL�D$H�S8ZY����H��$�1��A�D$H��I�$H�t$X�H�H�|$0����I��H����H�\$(H���<H�T$`H��1����H�N�H��H����H�|$8L�D$h�1�H��}!�-�I��H���qL��H���6�����.H�t$@H���������xL�����H�D$H���H�t$L����6��H�����]�P�+��I��H���/�H����*�����BH�t$PL��H�t$��'��H�t$H���.��L���C��L��H���x��H���H���W-��L��H����������L�����1�H���b?��L��Hit$H�QH�t$��%��H�t$H���??��H�t$L���"4������H��$�tXH�D$pE1�E1�L��L��H��H��H�D$�:��H��$�H�|$�|��H��$�H�t$L��H��$��6�����?H��$�L��L���d�����A�D$�5�(NL��E1����D$H�I�$H���Ҫ��H�|$h��*fDL����'���H�|$8L�D$h�1�H��{!��I��H���GH�t$@H��������������D$H��E1��a���H�|$h��H�|$X���H�|$`�u�|$��M��tL�����H��$dH3%(�OH��([]A\A]A^A_��D$�f�H����1�1�E1��(PA�L9���H���D$H��蹩��H�|$h�u	E�����H�|$�G���H�|$�&��H�|$X��=���L����!���0���f�H���8���-���H����1��O�D$����H�a�1�1���{OH���#���H�|$X����E1�1��D$�H����1�1��CO����fD�D$1�����@L���P*��L��H�������D$������L������1�H���V<��L��Hit$H�QH�t$�"��H�t$H���3<��H�t$L���1������L�����fDH�U��1�E1��N�m���DL���H%������H�Q��1�1��kNE1�E1�H�D$�>����H���1�1��;N����H���1��#N���A������%��ff.���AWAVAUATI��H�5��USH��8dH�%(H��$(1�H��$�H�T$xH�D$pL��$�H��L�D$pHDŽ$��W2����(H��$�1��A�D$H��H�|$H�t$p�H�I�$H������D$0����H��$��x��D$4H��$HH�����}3��H�D$(H����H��$H��$�H���L��$�H�\$x���H����H��$�H���
9��H�D$HH���oH��$H��$�H�[!����H�D$8H��tH��$�H����8��H�D$8H���+L�t$(1�L��������dL���\	���SH�D$ ���1���u
H�CH��PpH��H��$�E1�L��$�H���[xH��$�L�l$PH��$�H�D$H�D$lI��L�d$XI���-@1���u
H�CH��PpH��H�t$H���Wy����L��$��D$l�S����1���u
H�CH��PpH��E1�L��L��I��L���ZxH��$�H�H�L$�zt�zu�B����H���JH��$�H��tU��7��A�…��MH��$�H��A�����D��E�ȺH�jH�|$0H�D�T$(���AYAZ��D�T$���S����1���u
H�CH��PpH��H���?w�S������H�;����f.�H�|$����H��$H�e���H�P��1�1��rJf�H�|$����H��$(dH3%(��H��8[]A\A]A^A_�D1�1�1�H��L��$�1��P�H��H��$H�É\$4����f�L�t$(H��$HH��$�L�����1�E1�E1�L��1�H����2��H��$�H�����H��$0H��tH��$�L��H��������nH�\$(A�D$I�$H��$H��$HH���K�����SA�D$�5� NH����H�D$(H�I�$�T$4���H��$��v
�!�H��$��G�5[ NH��$H�҂H��$�H�H�HDŽ$HH�|$(�m���H�|$(�����^���fDL�l$PL�d$XH�l$P1�H��$PH�l$HL�d$@I��L�l$���H�����9��UH�������L�xI��L���l����vσ��	H�5+�!Hc�L���€���u�=�����L��O�L��Lc�L���#.��BƄ,P��$P�����ƒ��,L��u� H������������,t<:u�zM��tL�zL���V4��L�l$ �������L������������H��I�NL��jA�����L��E���'	��_AX����H�|$ �/��������H����1��WG��D$4���g���HDŽ$H�V���H�;��H��$0H���1��
G�+����H�;�j����H�;�!����H����1�1�H��$���F����fD���H�T$@�B�3H�L$H�T$@H�H��$��oH�H�RH�PH��$�H�8�v�6�H��$�H�8�GH��BH��z��������M���b���L�l$L�d$@H�l$PM������A�U���E1���u
I�EL��PpH��H��L��$�L�t$l�!rH��$�L�d$@L�d$�f.�1���u
I�EL��PpH��H��L���1s����A�U����1���u
I�EL��PpH��E1�L��L��I��H���CrH��$�H�H�L$�zt�zu�B����H���3H��$�H��tS�1��A�…���H��$�H��A�����D��E�ȺH�jH�|$0H�D�T$ �r��Y^��D�T$�A�U��tI1���u
I�EL��PpH��H���-qA�U������I�}���fDI�}�����I�}��f.�H����1�1�H��$��SD�{���fD���H�T$�B��H�L$H�T$H�H��$��o
H�H�RH�PH��$�H�8�v�ƑH��$�H�8�GH��BH��z��������L�d$@�����L�|$(L�t$8D�l$0�	DA��L���,��A9������D��L������H�xH���0����L�����@����y�H�MH�uA�غL�������u�H�ML�E�1�H����5C���H��$���8���HDŽ$H�'���H���1�1��B���fDH��$�D�Ѿ1�H���H�L�1���B�u���I�}����H��$�D�Ѿ1�H�3�H�L�1��B�A���M�FL��H���1���wB�"�������ff.�f���AVAUATUSH��H�5^�H��dH�%(H��$�1�H�D$�$H�L$ H�D$H�T$H�D$H�D$ �D$H�D$(����PH�D$P1�L�L$(L�D$�&_AX������CH�T$L�D$(1�H�H�|$1�����I��H���KH���H�l$ �xuyH��表����H�l$01��H�t$H���H�H��������tnH�����H�|$(�uL�����fDH��$�dH3%(�H�Ġ[]A\A]A^Ð1��H���a����p����CH��@H�|$ H�5C9 �W#��L�t$I��M��t��$�E1�����L������H��L��E1�jD�D$L��L��H�L$(���ZY��t�CH�H���&���H�|$(�uL���&��M���%���L���e������H�Y��1�1��;@�CH����3��I���c������fD��AVAUATUH��H�5�SH��dH�%(H��$�1�H�L$ H�T$H�D$H�D$(H���D$H�D$8����H�D$ P1�L�L$L�D$8�X$_AX���tg�EH�T$(L�D$01�H�EH�|$1����I��H����H�\$@1��H�t$H���H�H��������t=H�����H�|$0���H��$�dH3%(�OH�İ[]A\A]A^�f��+��H������L�t$(I��M��t��$�E1����L�����H��L��E1�jD�D$L��L��H�L$8�;��ZY��ueH���M���H�|$0���M���_���L������R���L���0���B���H�q��1�1��S>�EH�E����f��E1�H�L$8�H�EL���p��H�l$ I�ƀ}w*D�uH�|$8D���q�H�EH�D$ �@�J����H����H�l$ ��f�����I������>��L���v��� ������AWAVAUATUSH��H�5��H��XdH�%(H�D$H1�H�D$H�L$H�D$H�D$0H�T$8PH�D$P1�L�L$L�D$P�"ZY������CH�|$H�T$ 1�H����H��H����H�|$H���rL�D$(1�H��g!1��%��I��H���aI����L�t$8A�|$t1��L���&�����L���֣����A�|$L�t$@t1��L������t~L��覣��urH�|$8H�5��!����I��H��tYH�|$@H�5�4 E1�����I��H��tFH�t$0L����I��H��t1A�@L��H��L��H���Q����t�CH��	E1�E1�E1�L���_���H�|$0����L�����L�����H�|$ �uH���U��H�|$(�u
L�����DH�D$HdH3%(��H��X[]A\A]A^A_�DH�|$���fDH����1�1��s;1�����H�|$0�r���1��k���1��d���H�|$ �u�H�������f�H�i��1�1��+;1����H�|$0�*���1��#���1������G������f���AVAUATUSH��H�5.�H��@dH�%(H�D$81�H�L$H�T$(H��H�D$(����H�D$8H�D$8P1�L�L$ L�D$(�_ZY������CH�|$L�D$ 1�H�H�"e!1����H��H���H������xA��Hc���H��I���2����t]��tXH�y��1�1��#:M��tL����H�|$ ���H�D$8dH3%(��H��@[]A\A]A^�f�L�t$0H�����H�t$(�|$L��E��H����
��A9�u�H�|$�v
视H�|$Ic�A�L�'H�D$H�|$ �D�o�@�CH��i���H���+���\���fDH����1�1��K9�CH��1������fD��AWAVAUATUSH��H�5\�H��HdH�%(H�D$81�H�L$H�T$0H��H�D$(H�D$0����H�D$(P1�L�L$ L�D$(�ZY������CH�|$L�D$(1�H�H�Pc!1�����H��H���!H�������xHc���H��I���c����tV��tQH����1�1��T8L����H�|$(���H�D$8dH3%(��H��H[]A\A]A^A_�DL�l$ H���;��H�t$0�|$L��E��H���� ��A�Ń��t��xMc�Hc��n�L��L��H��I���m��L����H�|$�w:C�7L�?H�D$H�|$(�D�o�@�CH��N���H���F���A�����{�H�|$�@H����1�1��[7�CH���������fD��AVAUATUSH��H�5n�H��@dH�%(H�D$81�H�L$H�T$0H��H�D$(����H�D$0H�D$0P1�L�L$ L�D$(�ZY������CH�|$L�D$ 1�H�1Ҿ����H��H����H�������xA��Hc���H��I���t����tW��tRH����1�1��e6H�|$ ���M��tL����H�D$8dH3%(��H��@[]A\A]A^�L�t$(H���K��H�t$0�|$L��E��H�����A9�u�H�|$�v
��H�|$Ic�A�L�'H�D$H�|$ �D�o�@�CH��o���H���s���b���fDH�Y��1�1��5�CH��7���H���8����������ff.���AWAVAUATUSH��H�5��H��HdH�%(H�D$81�H�L$H�T$0H��H�D$(����H�D$0H�D$0P1�L�L$ L�D$(�ZY������CH�|$L�D$ 1�H�1Ҿ���H��H���#H������xHc��@�H��I�������tX��tSH����1�1��4L���>�H�|$ ���H�D$8dH3%(��H��H[]A\A]A^A_��L�l$(H���k��H�t$0�|$L��E��H���T�A�Ń��t��xMc�Hc���L��L��H��I�����L����H�|$�w:C�7L�?H�D$H�|$ �D�o�@�CH��L���H���v
���?����諀H�|$�@H�Q��1�1��3�CH��	����
��fD��AVAUATUSH��H�5��H��@dH�%(H�D$81�H�L$H�T$(H��H�D$(����H�D$8H�D$8P1�L�L$ L�D$(��ZY���t`H�|$H��]!1�1�L�D$ ���H���H��H��tH�D$0�P��tQ���H���1�1��2�CH�H�D$8dH3%(�	H��@[]A\A]A^��H�8�Ț��I��M��t�H������D$��Hc����I���
��L��H��I���c�HcT$H�t$(L�����H�T$H��L��L�������tzH�|$�w_HcT$A�DL�/H�D$�W�@�CH�L�����H�|$ ��.���H������!���f�H�8���I���;����~H�|$�@L���X��CH���	��fD��AUATUSH��H�5�H��HdH�%(H�D$81�H�D$0H�L$H�D$����H�D$0H�T$ PH�D$P1�L�L$L�D$8��ZY���t7H�D$0�P��tJ����H�J��1�1���0�CH�H�D$8dH3%(��H��H[]A\A]�f�H�8����I��M��t�H�|$L�D$1�1Ҿ����I��H��tp����L��H��H����HcT$H�t$ H������T$L��H��H�t$(���H��Lc����H�|$�t4�CL�#�W����H�8�h��I���k���H�1�����@L��������������AWAVAUATUSH��H�t$H�L$8H�T$hH��H�5D�dH�%(H��$�1�H�D$xH�D$DPH��$�PH�D$XP1�L�L$xL�D$p�OH�� ���t:H�|$@�G<tY<�A1�H����1��\/H�D$�@H�H�D$xdH3%(�9H�Ĉ[]A\A]A^A_�fDL�'M��t�L���Z�D$��t�H�|$pH�����%��H�D$(H����Hc\$1ҾL�t$`H��H�,���H��1ҾI����H��1ҾH�D$ ���H��1�H��I������H��1Ҿ���H��1�1�H��H�D$H�����L��L���ZH�D$HH�$�R@H�|$HI��1�1ҾH���f��I��H����H���q���xHc���L��L��I�D�H���ZH�4$L��L���[��t����H��H����H�t$(1�1�H���������H���M��D$8Hc��A�H��H���&���H��L��M���D$E1�H��PH�L$0H�t$8����ZY��~"D�D$8H�L$hH��H��H�T$0�r�����	H�D$H���@H���H������0�H�G�PpI�������H�����H�D$�@H��D$1�L�d$�X���!�4@I�|�H��t��H�EH9�tH��I�<�u�I�<������L���x�H�|$ �n�L���f�H�|$�\��K������H���1��{,H�D$�@H��^���fD�[��H�D$(�j���Hct$0H�T$4H��H��L�������D$4D$0���H�|$P�v
�y�D$4D$0HcЃ�H���DHc�1����H�L$P�T$4T$0H�H�D$PH�|$X�Q�@�v
��xH�|$X�~��D$��~bH�$��L�t$ M��I�l�f�I�$IcI��I���A�^�1�I�|$��sHc��g�H�|$X1ɉ�H����I�D$�L9�u�H�$H�L$�D$4H��D$0H��AH��&���)���H�z��1��+H�D$�@H����H������z��f.���AVAUATUSH��H�5U�H��PdH�%(H�D$H1�H�D$H�L$H�D$(����H�D$@H�T$0PH�D$HPH�D$(PH�D$(P1�L�L$XL�D$@�AH�� �����H�|$H�U!1�1�L�D$(���H��H��H���fH�|$@H���A�d
��I��H���@�D$�xHc���I���A���L$E1�I��H�T$8L��H��I��������tD�D$H�L$0L��L��H�T$�&����uBL����H�|$(����CH�H�D$HdH3%(�H��P[]A\A]A^�f�Hct$H�T$L��L������t��D$D$t�H�|$(���L���I��H�|$ ����t$t$1�L��Hcƃ�Hc�A�D��H�L$ �T$T$H�H�D$ �Q�@�CH��J���D����I������H�1��1�1���(����fDH���������u�d���fDH���`����:������fD��AWAVAUATUH��H�5��SH���dH�%(H��$�1�H�����H�L$THDŽ$�@H��$�H��$�H��$�H�D$\HDŽ$�PH��$�PH��$�PH��$�PH��$�PH��$�P1�L��$�L��$��H��0�����H��$��EH�EH����H��趟��H��H����H�|$h1�H�8R!1�L��$����I��H���H�|$`H��$�1��ݭ��I��H����I����L��$�A�~t1��L��茅���,L���<����A�~L��$�t1��L���V�����L��������H��$�H�5�!�J	��I��H����H��$�H�5 �*	��H�D$H���tL��H��L��L��D��$���H�D$H����1�1ɾL�����H�T$pH�����J���Q1���u
H�BH��PpH��L��$�L���eRH�D$xH��$�H�\$(H�T$PH��$�L�l$0H��L�d$8I��I��L�|$@I��H�l$HH�l$��@1���u
H�BH��PpH��L��H���IS����H�T$p�J����1���u
H�BH��PpH��E1�L��L��M��L���WRH�T$xH�
H�T$�yt"�yu�A����H���J�H�D$xH�H��$�H�	H���nH�5��H��1����H�T$p�J���31���u
H�BH��PpH��L���oQH�T$p�J������H�:����DH�\$(L�l$0L�d$8L�|$@H�l$H��$�H�t$L��H�|$�.��EH�EH�|$���L����H�|$��H��tH�5�KH�����H��$����M��tH��$��uL����H��$�dH3%(�IH���[]A\A]A^A_��H�|$h1�H��N!1�L��$�����I��H���n���H�d��1�1���#1��#�1����1�����x���L���h����P���H�?��1�1��#E1�H�D$H�D$�����H����1�1��[#1���1��]�1��V�H�5�KH���������f�H���1�1�H��$��#H�D$H�D$�j���@H�D$E1�H�D$�L���fDH�:����H�:�=����H��H�5��!H��1����������H�L$ �A��H�T$H�L$ H�H�D$x�oH�H�QH�PH�D$xH�8�v
�$pH�D$xH�8�GH��BH��y�������@H��$�H���1��
"H�D$�m����H�:���H�ټ�1���!�F����S�����AWAVAUATUH��SH��hdH�%(H�D$X1�H�D$�FH�L$H�D$ H�T$8H�D$(H�D$0H�D$@H�D$HH�D$PH�����H�5H�PH�D$XPH�D$$PH�D$XPH�D$@PH�D$@P1�L�L$xL�D$`��H��0����BH�\$@H��tH������H��H���IH�|$ H�d$0��Yq��I��H����H���L�l$8�xt1��L�������L���̇�����D$0�H���!H�|$8H�5w�HD����I��H����H�t$(H����I��H����L�t$PM��tQH����xt1��L���~����L���H�����H�|$PH�5{ ���I��H����D�L$0H�L$(M��L��H��L���8���E���LH�L$HH�EH����H����xt1�H�ϺH�$�~H�$����H��貆�$����H�|$HH�5� ���H�D$H�����T$01�L���*���H���!D�4$H����H�|$H������$H����9$|�H�|$�-��H������E1�E1�E1�L����H�|$(���L�����L�����L���=��H����H�D$XdH3%(�|H��h[]A\A]A^A_�f�E1�E1�E1�E1��f�E1�E1���H�E�|���E1��q����H�L$HH�t�1�1���V�EH�E�����>���������~�M�D��AWAVE1�AUI��ATI��H�5��"USH�ӺH��(H�;dH�%(H�D$1�H�l$H���FB��uH�D$H��x�H�;H��E1�H�5~�B��uH�D$H��x��H�;H��H�5�$��A��uH�D$H��xt'1�H�L$dH3%(��H��([]A\A]A^A_�f��pH�81����M��t�H��t�H��L��L��L��������t�H�;H��H�5�I$�mA��uH�D$H��x��H�;H��H�5�% �@A����H�;H��E1�H�5C��A��uH�D$H��x��H�;H��H�5���@����H�D$M��H�D$H��x�{H�;H��H�5��@��uH�D$H��x�.M����L��L�������������H�D$E1�H��x�+����pH�81��6��H��L��H	�H������L��L���I��������U���@�pH�81����I������pH�81�����I�����H�D$M�������1�H�T$L��L�������1��������pH�81����H�;H��H�5($ I���?��uH�D$H��x� ���L��1��,���f��pH�81��C��I	�H���y������f��pH�81��#��I��H�D$M	��h����pH�81����I�������6�fD��AV�AUE1�ATI��UH��H�5G$SH�� H�}dH�%(H�D$1�H�\$H����>��uH�D$H��x�DH�}H�ٺE1�H�5%# �>��uH�D$H��x�+H�}H�ٺH�5�!!�k>��uH�D$H��xt)1�H�\$dH3%(��H�� []A\A]A^�fD�pH�81����M����M��H�����u�H��t�L��L��L������t�H�}H�ٺH�5"���=��uH�D$H��x��H�}H�ٺ	H�5��=��uoH�D$H��yuaE1�qH�91��q��H��M��tIL��L�������"���f��pH�81��C��I������pH�81��+��I�����L����������L��H�T$H���0��H�|$H�������������������pH�81�����H�}H�ٺ	H�5�I����<1҅��@���H�D$H��y�.����������f���AW�AVI��H�5�D$AUATUH��S1�H��(I�>dH�%(H�D$1�L�|$L���j<��uH�D$H��x��I�>L���E1�H�5�  �:<��uH�D$H��x��I�>L���H�5�!�
<��uH�D$H��xt+1�H�\$dH3%(�H��([]A\A]A^A_�fD�pH�81����I��H��t�H��t�H��L��H��H�������t�I�>L���	E1�H�5���;��uH�D$H��x�	I�>L���H�5���Z;��uH�D$H��x��M�������I��H���/������I��H���!���H�D$H���&�L��L������L�D$E1�H��L��L��L����������L�����H�|$���L��L��H���%������pH�81����H���G����pH�81��k��I���_���H���h�������u���fD�pH�81��;��I������pH�81��#��H�������L��H��H������.����L���(�L��� �H�|$��1������L����1���f�L�����L�����1��������@��ATUH��H�5.(!SH�ĀdH�%(H�D$x1�H��H�$�����tIL�$�EH�EM��tA�x��H�\$1��L��H���H�H��討����t,H���n��H�D$xdH3%(�H��[]A\��H���0p��H��tNj5��MH�|$h�E�gNH�D$hH�H�E�fDH�\$I�8�H�5��H����8��uH�D$H��x��H�$H�ٺH�5ߟH�8�8��uH�D$H��x��H�$H�ٺH�5]H�8�b8��u~H�D$H��xup��H��H��tI���I��H��t4H�D$L��H�0�v�����tL��H���R������L�����H���Z��EH�E���f�L�$�r�����{�H��H��t��.���I��H��t�H�D$L��H��H�������ubL������D�;�H��H��t����I��H���p���H�D$L��H�0�R�����tL��tH�������u
L���B����;����E�5�MH���LH�H�E����;�ff.���AVAUI��ATUSH�� H���dH�%(H��$1�H�D$H��t%H�l$I��H��H��H�Y�H�5���x��t-1�H��$dH3%(����H�� []A\A]A^�f�H�D$H�8�C6��t�M����L������I�Ņ�tL���nH���H���^H��H���H�5��(x���@H�D$H�8��5���+L�����H���I��H���C���H��H���H�5Я��w���%���H�l$H�]�{t"�{u�C����H���I�H�D$H�L�3M�����L�l$��
L��L������Ã����L��UH����������!�%����t������D�H�UHD��Hc�H��L)�H9��}L��L�������i���H������M��M��H�p�1�1�����<����Ic�����D��H�ΫI���1�1�������X��������C���H�EH�D$�oH�H�SH�PH�D$H�8�v
��]H�D$H�8�GH��BH��{��������D�|$*�1����|$.�&���M�e�.L���a��H������I�uL�����H��H����L��H����������.L��� ��H9��*�������f�H����1�1��[������������M���H������H����1�1��&�������AWAVAUATUSH��H�$H��(dH�%(H��$1�H��H��H�D$����H���H��t#L�d$H���L��H�5
��u���,1�1�H�����H���H��tML�d$H�E�L��H�5Ϭ��t���QH���H��tL��H�z�H�5���t���wH�5[�H���X�H���H���H�L$H�C�H�5f��pt����L�l$M�eA�|$t&A�|$uA�D$���!L�����H�D$L� M�$$M����L�l$L��L����H����L��H�����������L��H��������H�����H��I����H��t&H�����L��I���s��L��H�����L����L�����H���������H���X��H��H��t�5J�MH��H���/��H��$dH3%(H���H��([]A\A]A^A_�L�l$M�eA�|$t&A�|$uA�D$����L����H�D$L� I�4$H���L����@����H�D$H�8�0�������H��H�!v����G���H���H������L��H�N�H�5���r���yL�t$M�.A�}t$A�}u
A�E���>L����H�D$L�(M�uL���M����L��H��H�5"�L���)r���BL��E1�H��tL��L��H�������H���H���I���L��H�`�H�5��q������L�l$M�eA�|$t&A�|$uA�D$����L����H�D$L� I�4$H���o����f.�H��H�����H�5�s��H���6�����L��H�>�1�1��1���
����L��H���1�1��1���
��������A�D$�>�I�EH�D$�Ao$H�I�T$H�PH�D$H�8�w2�GH��BL� A�|$�����M�$$M��������3����XH�D$H�8뿐H�1��1��-
��������A�D$��I�EH�D$�Ao$H�I�T$H�PH�D$H�8�v
�WH�D$H�8�GH��BL� A�|$�����
���H���H���Y���L��H���H�5���o�����E1�L�|$M�/A�}t A�}u	A�E��w-L���X�H�D$L�(M�mL��L	����M�������������A�E��I�H�D$�Ao]H�I�UH�PH�D$H�8�v
��VH�D$H�8�GH��BL�(A�}t��n���fD���A�E�G�I�H�D$�AoUH�I�UH�PH�D$H�8�v
�XVH�D$H�8�GH��BL�(A�}�n����Y�������A�D$���I�EH�D$�Ao$$H� I�T$H�PH�D$H�8�v
��UH�D$H�8�GH��BL� ���M��L��H��1��1��������R��f���H�����`f���H�����`8f���H�O��C��Wu-�AP��u&H��tUSH�w`�9H���B��H��H�[�������f�������f.���u�1�H��t�	�
���AP��u�H��u��ff.���UH��SH��H�_��tE�SPH�{(��upH��t
�V�H�C(H�{0H��t
���H�C0�;���t�\�������E\H�߅�u��H��1�[]�fD�#�H��1�[]�f.��;���CPH�{(�{���ff.�AWAVAUA��ATA��USH��H��8H�odH�%(H��$(1�H�}(����A�ƃ���X�@���wX�[����E���O�H��$(dH34%(��H��8[]A\A]A^A_��1�A��t����������OL�d$ E1�E1�1�I�L$H�L$�5fD������tA�$A����rI��J��H����H����
H�t$H��f�T$ ���<��L��H����������!�%����t������D�H�SHDډ�@�H��H��1�L)�I�I�u��M��H�KH��LD����I���I�$I�L��H��I���I�T�I�T�L��I�H)��H)���H����H���8���H���1�I��L�-�D��H����1��~H���6�����1��T���@��L��H���D$ �;�����fD����H���Z���E����H�C@L�cPH��t M��tH�H�5 �H�x(�t����������H���uH�}(�����1�ǃ������E����A�$��A�A�D�A�D�����L�
E.!D��1�1�M��H�����~����f�H����1�1��[���fD�{���1�1�Hc8�	H�ɠ�1�H��H��1��$H���ܾ1�����D��A�D�fA�D��{���I�<$1�L�l$L�5?��&/�Q@H�D$�L��H�L� L������������H�5�L������������H�CP1�H�8�/H�CP1�L��H�8�0��t��}���H���1�1��d�q�������f.���AWI��AVAUATI��USH��L�oA�MP����A��DI�}(D��L���!���Å�{1҉�L�������Ņ�uI�$����8tI�}(1��t����@��A��$����H�Hc�H��[]A\A]A^A_�f.�ADŽ$��f�H�����P���f�I��$�H�H��t�H�H��t��Bt�HB E1�1ɾI��$�H�D$H�L�J j�r(1��fXZH�D$�p���f���AVI��AUATUH��SH��L�oA�MP����A���D1҉�H���t�����t{I�}(D��L���1��Å�~�H���H�H��teH�H��t]�BtWHB H���E1�1�H�D$�H�L�J j�r(1���eXZH�D$�!f�H������ø��H�Hc�H��[]A\A]A^�ff.���AWAVI��AUATUSH��H��hH�odH�%(H�D$X1���tO���f����H����H��L���P@H�L$XdH3%(�o	H��h[]A\A]A^A_�f.�������u�D�A�EPA�����E���K���KH�M@f�H��4�ׂ�CH��H��?H��H�E8H��H)�H��H*��E�D$�EL�|$�EXuH�}(�����\���MX�EL����L�d$(L�l$0�fDL��L����H�}(���H�|$@L��A����f��f��f��H*L$@�\$f���H*T$0�H*D$H�^Q��X�f���H*L$8�^
:��X��\��\�/��\$�E�����D��L�����������EL���K���H�}(��A����D�������t	���:���H�����H��L���P@�uH����CX��t �;��������s����uT1�L�������x�L���b�����1�H���1����CX����1�����Hc�1�������E���������D$@H��i��H��S㥛� H��H��?H�\$@�D$DH��H��H)�������1����L���f�|$F�,D�MPE����H�}(�H���o����H�}(������¸�����������1��������������������8����������fDH�}��]H�M8H�u@����H�}(��yA�������AH��Hc�H�>���QH�APH���H����L�K ��HD�����E1�1Ƀ��H�SxH�spWP�}�-ZYA�Ņ��p1�H�{P��ډSX1��
����EL�μ��H�����H�E0H�����T�H���l���H�}0L����H�E(H���N�uH��蘼�����`H�CE1�H��t%H���H9��H����1�1���D�c1��w���@L�ChH�K`�������0D�{1��P���D�}��H���#���H���G���1��&���H����1�1�A��������H�A����EL�������EL�:�������EL��������@1�1������`�6�I��H���bH�xH��L��H�H��H�@X1�H)���`���H�H�
���omI�>Al$�ouAt$�U$E�,$A�T$$1��=�����H�CPH������I���H���H��t�z�o5H�{P�����H������UH�������uT���@���#�����u�ETH�{P�A�t$T1�����xH�{P��"����z���H����1�1��H�{P��GdH�CP������Q���DH���H�H����1�L�������@D��������H�}(迷���EP����}L��t$D�l$D:mt�}A���T��uD�m@A��t}�
���E1��8A��A��E���p����EL��t��H�@H�}(H�p(����*����}1��
��u�E�EL�R���蚶���9���H�0��1�1��p�A������
���H�}(�<��H�}(L��H��I����������EPI���H��tHL�l$@H��L��H�5i��s^���I���L��H��H�5D��N^�D$��tlM�������L���U����x����ET�H�{P����ET�H�{P����ET�H�{P����H����l���H�}(�����H�D$@H�8���t�����@I���@H�}(舶��H��H��tH���������A�EI���L��H��H�5d��]A�}vL���CL��跲����H�D$@H�8���������c��@f�@H�D$�|��L����0L�d$I���H�{�H�H�5�I�$L���z]L��E1��?��o������H�v��1�A���^�H�}0�U�H�E0����H�)��1�A���1����L����t�`�t$H���v���H��讽���H�D$菱�@f�@H�D$���H�|$���/H�L$L��H�H�H���ǎ�D$H���J��9D$|�H�|$�j��z���D��AWAVM��AUATI��UH���`SH��L�|$XM���2���H��I��H���eH�xH�@L��H��H��H�@X)��H`1����H�H����CH�
U�H�CH�Ǡ�H�@�����H�C0H�CI�H�C8I�GH�C@�7H����A�I��H�=�H��L��IN�H9���€���tU�I��H�=RH��H��IN�H9����������A�EHA�ETH��[]A\A]A^A_�f�A�EHA�ETH��[]A\A]A^A_Ð�˯1�H�xH�@H��I��H��H�@XH��)��H`L����H�H����CH�
,�H�CH�Ǡ�H�@�����H�C0H�CI�H�C8I�GH�C@�6H������H��H�D$�i�H�D$�'����I��H�=4~H��IN�H��H9���€���tDI��L��H�=~H��IN�H9���€�������A�EHA�ET����A�EHA�ETH��[]A\A]A^A_ÐH��H�D$�s��H�D$���H���J��H�=�H��9������f.�D���1���~
�����f�H��B��t5�:$u<{t\E1��HЀ�	w!��0��JD�I�A��	v&H��E��t�:}t1��DH��H�����H���DAЉ��f��BA�H�����S1�H��H�5�!������tH�@Ԕ�CHc@XH�[Ð��AUATUSH��H�5�� H��(dH�%(H�D$1�H��H�T$L�L$H�D$L�D$�h������H�D$Hc4$H�,0H9��)H�D$H����D� E��A�ź�豭H�T$H��H9���A��L�
��D�2@��}��D��Oc�M�>A��@�\H��@�q�H��H9�u�H��H)�H�r���1�H�����kH��CH�D$dH3%(��H��([]A\A]�f.��\000H���@L�AA8�u'E��t"�\H��A�0�fDE1�E1�����DL��I��H����D1��d���@�C1�H�=�!軮�CH��V������f.����
���SA�H��1�H�
Y1��B�H�CHH�CP�CX[�f���SH���#h
H��!H�5�1����l
����H�5,�H��1��l
�)h
H��[�pc��H������1�H���f.���SH�=�"K���A�ع��H�=ݏ�ZA�ع��H�=ҏ�ZA�ع��H�=Ï�cZA�ع��H�=���EZA�ع��H�=���'ZA�ع��H�=���	ZA�ع��H�=����YA�ع1ҾH�=����YA�ع��H�=���YA�ع��H�=���YA�ع��H�=��vYA�ع��H�=|��XYA�ع��H�=r��:Y�5��A�ع�
H��H�=l��)]1�[�D��H��t7SH��H�?���H�{H��t���H�{ H��t����H�{[����D�ff.�@AWHc�AVAUATI��USH��H��8dH�%(H�D$(1��D$��H�;H�L$L��H��������w�D$��/H�L$(dH3%(H����H��8[]A\A]A^A_�f�H�;H�L$ �	L��諪��H�;H�L$L��A��蓪����ADŅ��D�d$E��~�H�D$ Lcl$L�xA�D$A��D$M�u�A�W�L��L�����)�A�W����L�|��D����Dž��
A��r�@��wDH����)�B�<:��r�@��v� t�BՃ�<H��H���0D�F�A��	����~	��0�A�
@��0u�H���0@��0t�E1�1�I��)F�F�<	��A����A��
t2Hc�H�L9�u_H�@��1�1��z�H��1��0��l���@��.�����@��Eu
A���Hc�H�A��~�I9�t�f.�K�>A��M�H�D$ D;d$���������@��.u��p�VЀ�	w�H��A�A�
�)���f���߃�A@���6���I��A�0�
����SA�
��߀�X�����pA�H��������H���1�1��y�H��1��/��k���E������A�pI�@A�f�D�����A�pI�@�VՁ�uA�PD�Z�A��	v!I�������VЀ�	����A�����@��.I�@��u�A����AW1�AVAUATUH��1�SH��dH�%(H�D$x1�L�d$8���H��I��诰��H��@ԔL��H��X���
�������I��H��I��A�I���B�� u�H� �E����M�w���A��\��A��H�=�D�L$�Ɖ$�̮��A�WD�L$H��td�xD8�t[L�����u-�f�@8����NA8�����L���ʄ���L�~��\uр~��VH����D��t3L����A8���VL����tL�~��\u�~���$H����1�1�E1��f��q���t;�VL���m����@��\t�@��H����DL�����D���fDL)�L��腦�D$E1�E1�I��H�U�DA���t0�A�I��<n����Hc�H�>��@A��D$��uйH�=(L��������JL�T$0H�L$,E1�D��L��L��D�\$L�T$D�L$���I��H���GH�$D�L$L�T$D�\$1�E����L��D�L$L�t$@H�L$��H��@Ԕ�H�L$D�L$=���D$L��H�L$HD�L$hL�|$@�D$P�#��H����M��H�D$`H�D$L��H��H��@ԔA�0H�D$hj�A�L�|$HXZ��DA��@����A�����@A����DA�� �����A���o����A���_����A���L���@A���?����A���/����A�������H���1�1���L��E1�谡H�\$xdH3%(L����H�Ĉ[]A\A]A^A_���VH������H�D$81�1�H�8�������3L�|$8L��I�����������H�Y��1�1�E1��`��k���D�\$D�L$�i��D�L$L�T$0L��L��H�L$,I��L�T$D��H�$�@��D�L$L�T$H��I��D�\$�����D�D$,H�L$01�1�H������L��螠H�<$H������<��������1�L��L��D�L$�^��D�L$H��H��tH�H�|$0�G���H����1�1�D�L$H�L$�r�D�L$H�L$����H��@Ԕ�����H��@ԔL��H�5���D$@�D�L$H�L$����D�D$,H�L$01�1�H�(����L��辟�	����t���@��ATI��UH��SH���ڪ��H�߉����M��t1�H��tH�PI�$H��t
1�H��t�P�UH��tH�[]A\�ff.�f���AUI��ATI��UH��SH��H���q���H�߉��w���M��t1�H��tH�PI�UM��t1�H��t�PA�$H��t
1�H��t�P(�UH��tH�H��[]A\A]�ff.���AWAVAUATUSH���H�GH�|$ H��$(H�t$H��$0�T$8H�L$xL�D$@D�L$dH�%(H��$�1�H�D$M��tA�x��H�|$@�Xa�D$D��$ ��A��E��E��t]�ف���$ ��t2D����E��t9H�h��1�1��D����D$����E1�f�H���H�|$�H�@ԔH�t$�H��$�H�@HH�FH�@ԔH�@PH�F(H�D$ H�8辟������H�t$ ��$�H�V�x�|$p��$��C�H�$H�����D$p1Ҿ�@Hc��D$<�̝A��H�D$0H����D �D$wtfHc�$�1Ҿ蜝D��$�H�D$0E��~@E1�I�ſ躜K�D�H����_K�D��@K�D�I���@D9�$��H�@Ԕ�D$`E1�E1��@XH��$�H�D$hH��$�H�D$(@�D$<A��E	�A��PSH�D$0�L$HH�T$ H�t$(H�8�ֿ��_AXA�Ņ���E���/�D$`H�|$@��H�L$hH�|$D��H���٠�����|�t$�����|$w��A�m�E1�D�l$XD��$ ���H�t$P�T$H蝛H��H��$��^�T$HH�t$P�H��$��G�G�'xH��$�Ic��tH�T$(I�}1�A�E1�����I�D$L9�tII��C�$H�D�4��T�H��$�D)�J�4�H�D$0N�,�E���M����L���wI�D$L9�u�Lcl$XD9�$���H�$�JH��$���kD�3��L���,�q���HcD$8HŸHH�H�|$���H��$�HDŽ$�H�D$����H�<$茚H��脚H��1�1����H�D$x�@H�H��$�dH3%(��H���[]A\A]A^A_�fDA�E����
���H���C����E���DA�����E����HcD$8H9�����D�3�k�|$D9��A�DE�Hc�A� ���?���H��跙H�<$讙H�\$xHcD$`�CH��9����H�Q��1�1���D�l$p�)�����kD�3���1��$�H��H��$��D\L��$�A�E�H�D$HA�D$A�D$��L�T$XL�\$PM��tML��D�D$d�<���D�D$dL��L��PA�L���jL�\$PH��$�L�T$XL��$�N�<E�E+�D��L��L���9uH�EH9l$H�L��$�H�ōD-��$ L��H�H��L�4L�TH�$E�E�L�,�H��$�E)�L�<���0����D�D$XD�L$P��H��H��$��$[H��$�D�D$XL����GD���G�tHct$PH��$��qM��t8L�|$(L���)L������H��E1�L��jI�<$�PA�L���o�XZH�T$(I�<$E1�1�A����H�EH9l$H���H�D$@A�E1�1�H��$��H�8����S���fDA�E�1�L�t$@H�D$H�}L�T$XL�\$PM��tFL��D�D$d�\���D�D$dL��L��PA�L����hL�\$PL�T$XH��$�E�E+EN�<�D��L��L���`sH�EH9l$H�����H�ōD-L��H�H��L�,L�TH�$E�ME�L�$�H��$�E)�L�<苄$ ���>����D�D$XD�L$P�2�H��H��$��RYH��$�D�D$XL����GD���G�rHct$PH��$��HoM��t9L�|$(L���6'L���>���H��E1�L��jI�>A��PL����AXAYH�T$(I�>A�1�E1���=�������H�w�1��1����H�D$x�@H��%���@H�l$0J�|��I��H�5O!�qD9�$���L���A���A��
wH���B��H�@Ԕ�AX�|$w�a�����$�H�l$0E1�L�<$L�t$@��~l@O�,�M��t2L���/���H��H��E1�jI�>�PA�L����H�E�@ZYI�>H��A�E1��1�I��H���"�D9�$��H�|$0莔�����D���@ATA��U��SH��H�5�zH��@dH�%(H�D$81���H��zH�L$H�D$ HD�H�T$H��H�D$0H�D$8H�D$8PH�D$8PH�D$8P1�L�L$,L�D$8��H�� ���tO�t$H�|$�9�H��t<H��1�A��A����t$8H��H��t$8RL�D$@�T$,H�t$8���H�� �@�CH�H�D$8dH3%(u	H��@[]A\��?���ff.�@��1����D�������f���AWAVAUATUSH��hH��$�H�|$8H�t$�T$,H��$�D�D$|L�L$0H��$�dH�%(H��$X1�H�GH�D$@H����H�@ԔH�t$@�T$|H�@HH�FH�@ԔH�@PH�F(H�D$8�@�D$����$����DŽ$�H�D$HDŽ$�����H�D$8H�t$@�H��$�H�8芔������
��$�H�t$8�xH�V���$���$��D$x��H�D$PH���U
Hc|$x1Ҿ1�E1�葒Hc\$,��I��H���w�E1�H�D$ H�D1�H��$�H�D$0�H�@Ԕ�@XH��$�H��$�H��$�H��$��f�H�L$Hc�H�D$HH�H�L$E��~��$����D��$�E����A���t��$����B	H�|$0����s
;l$,�i
H�t$H�\$ �UHc�A�W���6A�/����@�49��A� E؋D$xA	�A��PAWH�D$H�L$<H�T$H�t$PH�8�E���A\A��XE���&���H�w}�1�1����D��$�����@H��$�H��t�A�H�L$0D��$���$�)�H�H�D$XE���
�|$|���Y�1��
��@H���@H��$�"SA�F�D��$�H�D$`�
�H��H�D$PL��$H�4�D-H�H��M�4M�l�Ic]E�A)�H\$H��tGH��D�D$pH�t$h���D�D$pH��L��H�t$h�PA��yaIc]E�L��$A)�H\$�D��H��L���kH�EH9l$`�X���I��`�1�A�H��$D��$�H��$PH��$�I��$8jH��jH��$�L��$`��lY^��ugL��$�M��tZA�}t$A�}u
A�E����
L����L��$�A�uI�}�r�H��H�D$`H��$�D�h�IE�6�I��$���	IcE�oH�L$A)�H�<D���&�H�D$`H���	EIc�HD$XH�D$XH�pH;�$���L�d$0Hc�$�H+\$HH�t$Ic<$H��H��H��H|$ ���닄$�Hc�Hl$ D$|A�$tIL�t$`H��Ic�D�L���ˢ��A�$L���ߍ1҃�$��A�o��A�)�$�����H��$�E1�H��$�H��H9\$v-�<\tL<$tHH�CH��H��$�D�#H��D�e�H9\$w�H�t$0�EHcH��HT$ H)�ʼn.�o���fDA��\t*H��$�H��$�������u1H��$���H�CE1�H��$��H�ÈU��Y�����$�H��$�D9��>����H��H�H��IcT��A��H�D$)�Hc�H�4H��H�L$葡��H�L$H�����@H��$��H����H�L$XH��H�DMH�l$ H��H��$�H�D$0H��Hc�>���H���V�H�\$ ����@H��$�Hc�$�1�E1�H�D$hH�H��$�H��I��H�D$`H��$�1�H��$�H��$�H��$�H��$�H��$�H9T$`v1�2@��\��@��$��H�BH��$�D�"H��H9T$`w�L)�H��H����L�$L9d$h�|H�<L���`���B�#H�=rH��$�>H��H��H��I���o�����L���E���$tH���s���$H��$�ύ��$D��$H�D$`vH���@H�������H�������f.�L)�H��H����L�,L;l$h��H�<H��L��蓟��A��\tEL��$�H��$�H��$�L�D$p�+������H��$�L��L�D$p���fDH��$�L��E1�H�PH��$��B�D+�L��$�L���T���fDH��M�H���H���H�D$h1�1�L�D$pI���2�H��$�L�D$pH��H��L)��)����I���H��I���1�H��$�L�D$pH�D$h��H��$�L�D$pH��H��$�L)�����fD��$�A9��(DŽ$�H�-Z� H���>L��1�J�<+H9L$h��H��H�L$p�$���D��$�H�L$pL��$�E��L���A���H��H��$�L�D$p��H��$�L�D$pH��$�����@H��$�L�\$XE1�H��$�H9D$v+���\t1��$t,H�PI��H��$�D�H��H9D$w�L�\$X�;���@A��\t*H��$�H��$������u)H��$���H��E1�H��$��|���@��$�H��$�D9��`����Hc�A�L�A+�Hc�I��G����H�D$hN�O��DA�F���
w
H�Ks��H�@ԔH�|$ �PX�ԇL���̇H�|$P�‡H�D$ H��$XdH34%(H�D$ �4H��h[]A\A]A^A_�H��$�H�8Hc@��$�H�H��$�H�D$���D�H�Ic,�A�t�H��Hl$)���DŽ$�H������H�D$hN�O1��f�H��I��$�1�H�L$hL�D$`�$�H�L$hL�D$`H��H�<H��$�L��L)�谛��H���L����B���f�A�ċD$,B�< )�)�Lc�Hc�H�GH;�$��H�\$ Ic�H�t$L��E�H��^���H�D$0L��D� Mc�B�#�f�H�|$P�\�H�������H�D$0������������H��l1�1���j�H�|$ � �H�D$ �Y���f�H��$ HDŽ$ H�D$@��f�H��MH����OI��HF�1�1�L�D$`�L�D$`H��H������H���H��H���1�H�L$pH�D$h�ƅHc�$�H�L$pH��J�<(�,���DL���p�I�ؾ1�H�
�$H��k1������@H��$�H��A�1���H��H����Hc�$�H��M��H���H���H�D$h1�1�H�L$p�!�Hc�$�H�L$pH��H�����f���H��p�1�1���H�D$ ��H��q�1�1�������fD���	�L�t$0L�d$ H��H��IcL���>���L���V�Ic>H�t$L��I��H�� ���E�L��E�&Mc�B�#�*�H�|$P� �H�D$0H�\$ ����S����������A�E�ƃH��$��AoEI�UI��H��H�PH�� ��wAA�}A�EA�E������H��p�1�1����H�D$ ����H���L��$��Hc�$�I�L�	����$���H�D$hN�O�R������AWAVAUE��ATM��U��SH��H��L�L$PD�t$XL�|$`L�L$�j��H��t5L�|$XL�L$E��L��D�t$PH����H��H��[]A\A]A^A_��DH��1�[]A\A]A^A_�ff.�@AWE��AVI��AUI��ATI��UH��SH��H�H��$�D�D$H�D$ dH�%(H�D$x1��{H�D$Xt&�{u�C����H��D�$莙I�]D�$H�+� �}�D$t�D$hH�D$`���sH�;D�$�Ą1�H��I�ED�hE�,$H�}�z�D�$E���D$?A�~�D$?u����H�D$PL�4$H�D$(H�D$XH�D$@H�D$`H�D$HA�ljD$8�|fDL����A�~u�|$?��H�D$PH��D��H��p�t$(�T$,RH��ATD�L$XL�D$ H�8����H�� H��I��H�����D�H�}1�E�,$L�����H�t$(H�}1��������H�L$PL�9H�L$0A��b���A��O���A�G���B������A�G詀H�L$0H�H�D$P�AoH�I�WH�PH�D$PH�8����GH��BL�8A��������fDH���K�uE��t$(�D$,M��H�}PATH�����H�� H��H��H�\$xdH3%(��H�Ĉ[]A\A]A^A_���+H�D$PH�8�g���fDH�t$@I�>1����H�T$HH�$���Z���L�|$XI��yH�$t'�yu�A����H�<$�H�D$XH�H�$I�>1��e������1��C���@���D�$�C�LD�$I�E�oH�SH��H�PH�� ��vH���aI�ED�$�@I�E�@I�]�{��������I�>1����7�������A��~H�$I�H�D$X�oH�)$H�QH�PH�D$XH�8�v
��H�D$XH�8�GH��BH��xH�$����������[���ff.�AWAVAUATUSH��dH�%(H�D$x1��G��D$,����I��A����1�H�L$@H�T$8A��H�t$0L�L$XL�D$H�8����VL�l$8I�]E���d�C�����C��<��E����H�T$0H�H�$�C���pL�l$@I�]�C����A�����1�A��tCL�l$HI�]�{t"�{u�C����H����H�D$HH�D�+A���TH�\$,H�T$0L�2H�$A�F��<��H�T$@H��x��H�L$(H��E��E��SH�D$HH�0H�D$@H�8�^���ZYH��t�T$(I�$A�D$A�T$H��t!H�D$XH�8��-�GHcT$,H�H�H�D$xdH3%(��H�Ĉ[]A\A]A^A_���{�����H�T$0H��x�D�C������������C�@|I�EH�D$8�oH�H�SL�l$8H�PI�}����GI�E�@I�]�C��<�'����{u�C����H���F�E���
���H�D$81�H�T$pH�8�Y�����H�|$p��{���f��[7���fD�H�D$XH�8���fD�
L�l$8I�}�S���DA�~u
A�F����L��贒���������C�({H�$H�H�D$0�oH�H�SH�PH�D$0H�8�v
�7
H�D$0H�8�GH��@�4���@����C��zI�EH�D$@�oH�H�SH�PH�D$@H�8�v
��H�D$@H�8�GH��@����L��L�t$P�=H�D$@1�H�H�8�	�H�D$(H�$H�D$hH�D$H�D$`H�D$��H��L��A��E��SH�D$HH�L$H�0H�D$@H�8�x���^_I��H��tNH�D$@H�L$E1�E1�H�t$1�H�H�8�,�������u�L$(H�t$hE1�L��L���7R�H�D$@1�H�H�8��H�D$@1�L��H�H�8���������L�|$PI��A���=������H�L$�A�XyH�L$I�H�D$P�oH�H�QL�|$PH�PI�?�v
�fL�|$PI�?�GI��@����H�t$`H��H�t$�f���D�D$(E1�L��H�t$�PL����J�&���fDH�L$pH��f�1��(�H�|$p��xH�D$@H��o A$$H�@H��I�D$H�� ��wxA�D$A�D$����@����C�`xI�EH�D$H�o;H�8H�SH�PH�D$HH�8�v
�r
H�D$HH�8�GH��BH����@L���H
�{�������C��wI�EH�D$8�o+H�(H�SH�PH�D$8H�8�v
�
H�D$8H�8�GH��BH��{�������f.����A�F�wH�$H�H�D$0�Ao6H�0I�VH�PH�D$0H�8�v
�	H�D$0H�8�GH��BL�0A�~��������@H��d�1�1��{�A�D$I�$�J������1����ff.������r���f���1��e���D��AWI��AVM��AUATUSH��H���H�|$H�ωT$H�L$L�L$`dH�%(H��$�1�M��H�����HDŽ$�HDŽ$�LD�H�@ԔH�@HH��$�H�@ԔH�@PH��$��X9H��$�H�;H�L$|�H��H�D$ �fx�����H�D$`1ҾE1�E1�ʼn����D$0�D$|���ՉL$@�|@�|$|Hc��v�D$E1�H�D$HH��H�@Ԕ�@XH��$�H�D$(H��$�H�D$h��L�����D$G��@HcL�H9�u�|$G��D�L$0H)�I��E�����D�T$4�7uH��H��$��W8�D��H��H��$��G�G��QHct$H��$��RNH�D$E1�1�H�T$(A��H�8��D�T$41�I�����I)�HckD�D$@�l$L�E���n�D�l$A9�A��A� DE�I���t
I�����D$|E	�E��L��PSH�D$�L$ H�t$0H�8����A[A��XE��tE������A�����E���[D;l$�PH�D$�@)��H�|$H���D$|L��A� E��PS�L$ H��$�H�|$X荗��ZY��~oD�k��-���@H��`1��1��#��L$|�VUUU�����)�A���R���f�H�|$�H��D�T$�9PD�T$����H�uZ�1�1��÷A�UD�+D��SA�����fDG�$A�A���~���H�l$PH��L�t$XE��D�l$G�@A��E9���Ic�H���t���T�)��E��tً|$0Hc�I�4�����H�t$8A���T$4�rH��H��$���5�T$4H�t$8�H��$��G�G�AOH��$�H����KH�D$E1�1�H�T$(A��H�8��E9��K���H��L�t$XH�l$PD�k����fDH�|$���N����@H�T$(H�t$hH�=
Y�z��H�D$HH�����H�D$�@H��(f.�H��H��L)��D$`t@9t$:H����qH��$�dH3%(�-H���[]A\A]A^A_�f��D$0����D�d$�Hc�I�A)��\qH��H��$��|4D��L��H��$��G�G��MH��$�H���yJH�D$E1�1�H��$�A��H�8���5������H��\1��1��A�H�D$�@H��
���HcT$H���L�H)�H�|$�_M���H��D�ո����
w
H�\��H�@Ԕ�AX����Y���f���SH��H�5sWH��0dH�%(H�D$(1�H�D$ H��H�T$H�D$����H�D$ PH�D$ P1�L�L$L�D$ �6�ZY���t7�4$H�|$�r��H��t%L�L$ L�D$H��H�NjT$H�t$�����D�CH�H�D$(dH3%(uH��0[�蒋��f���AWAVAUATI��USH��H��H�oH�T$ H�L$dH�%(H��$�1�H����H�@ԔH�L$4�H��H�@HH�EH�@ԔH�@PH�E(I�<$�q�������D$1ҾL�t$8L�|$P�D$�D$4�|@�|$4Hc��oH�|$ I���2H�@Ԕ1��@XH�;�|�H�D$HH�D$H�D$@H�D$��L�����|$d��D$4I�<$H��E1�E1�PAU�L$hH�T$`�+���Y^�������p��~�D$t���uh�D$taH�D$8H�L$E1�E1�H�t$1�H��@H�;�{�������u-H�D$ H�T$8A�E1�H�t$H�H�8��H�D$8H��xt�|$dvL���C�H�;1���H�;1�L��������H�D$8H��o)D$PH�RH�T$`H��x���|$d����L��������DH�aZ�1��ͱ�L$4�VUUU����)�����fDH�t$@H��H�t$(�x��H��E1�A�j�PH�D$0H�L$HH�t$8H�8�XZ����fD�����
w
H�tX��H�@Ԕ�PXH�;1��}�L���lH��$�dH3%(uSH�ĸ[]A\A]A^A_�H�D$pH�l$p�2���D��H�X1��1���H�D$ �@H���J���f.���SH��H�5iSH��0dH�%(H�D$(1�H�L$H�T$H�D$ L�L$ L�D$�;����t(�t$H�|$�x��H��t3H�L$ H�t$H��H���>���H�D$(dH3%(uH��0[���CH���螇��f.�@��SH���S(
H�Lv!H�5�Y1���	-
H��YH�5�Y1����,
H��YH�5�Y1����,
H��YH�5�Y1���,
��r���H�5�YH��1��,
�(
H��[�R#f���H���$k@������1��k�AWAVAUI��ATA��UH��SH��H��8I�ǠԔD�D$ D�L$A�E���)H�
����I�GXI�OHH�
����I�OP�������9I�A�w�H�D$�D$E1�D��|$��MbA����D$A����E�l
A�|D�;;�AL�uH�D$�I�D�L$E�o(L�I�G ��u��AG(��D�L$I�GDL$D�L$$H�D$(�6fDD��H�|$(HD$C�L-L�A�O(E��I�G �nu��AG(u`�D$$G�dmD�d$A�4;3v�L��1���iI���I�A�w�������I�x��L���!{��I�Gx����D�l$�|$��L�u�D$A+G(�|$ ���A�?��H�E�H�E�@�H�E�@H�E�@H�E�@H�E�@H�E�@H�E�@H�E�@H�E�@	�
�|$tkA�?u\I�Wx�HE�I�WxH���PI�WxH���PI�WxH���PI�W�PI�WH���PI�WH���PI�W�@H���P�I���w��1�H��8[]A\A]A^A_�D�I���s���L$D�l$E+o(A�D
A���L�uA+G(�|$ ��C���A�?���I��qw����D�L$��gD�L$I������H�1VI���jp��P�E1�A�	I��cj��ZY��u}1�1�1��Ry��I�GxA�?M�oE�g����I�xD��L���-y��A�?I�Gx���H�D$
�D$
���f�A����pH��UI��Dh����t����������fD��SH�=�U����H�=�U�3����H1�[�fD��S��H����H�=aU�H�ư �H�=GU�#3A�ع��H�=>U�eA�ع��H�=+U�G��H�=>�J�yH1�[�D��H���D$P�Q1�H������AUATUSH��H�5OMH��dH�%(H��$�1�H�L$H�T$H�D$����L�L$L�D$H�D$������<H�L$H�jVH�AH��
�	H�t$H�F�H���9H������L$��MbH�D$pH�D$`H�����L�l$ H�D$hH�D$�L$(H�D$ �����D1�H���‰D$@�|�
�Se�H��H��H�@
f�p�H�D$8H�D$H����H��u �t$�pH�zSL���*f������L���p��L��A�ă����at��E�����DD�H���dD���U���H��^"H���1�1����CH�H��$�dH3%(�OH�Ĩ[]A\A]�DH�9U�1�1��Ө�CH��fDH��RjpE1�L��P�t$ ���A�	��f��ZY���������L���fD�s��A�ą��+���1�H�D$HH�|$H����H�t�1��AdH�|$H��H�D$Ht1�D
1�H�D$HH�|$H�+���C�D�
�C����f�1�1�L�d
1��Pu���T$H�t$H���?u��A�$H�D$0A�D$H�D$0H��A�D$H�D$0H��A�D$H�D$0A�D$H��A�D$�p����'�����AUATUSH��H�5�QH��dH�%(H��$�1�H�L$H�T$H�D$����L�D$�������H�L$H��SH�AH��
��H�����L$��Mb�D$xH�D$`H�����H�D$hH�D$H�D$pH�D$ ���L$(���|�|$@�nbH��H��teH�D$8L�l$ �E1�jpA�	��L��H��PP�t$ ��d��A��XZE��tYH���QbD��詁��H��["H���1�1��q��CH�H��$�dH3%(�H�Ĩ[]A\A]ÐL���m��L��A�ă�t�3q��E�����DD��y���f��q��A�ą��g���H�D$H1�H��H�p��aH�T$H�H�T$HH��S�C�j����K}��ff.���AWAVAUATUSH��H�t$H�L$H�T$(L�D$ H�5�OdH�%(H��$�1�H�D$ �/�����D�D$���(H�l$ H�RH��H������L�l$0��E1�H�
����D$8L��H�D$(H�L$pH�
����H�OA�H�L$x�pHDŽ$�H�D$0H�D$X�}v���Dž�tV�f�H�D$X1�L��)�I��\$PH�T$H�t���Ã��t�����D$8���GM��H����A����H��H��uD��Hc\$A����H�H��1�H��L���C`I��H���w���M��tL���_L����y��H�D$�@H�H��$�dH3%(��H�ĸ[]A\A]A^A_�f�L���y��H���…�����uA��vC�����L���_����~��H�Y"H��1��1�解H�D$�@H��p���f���w�H�D$X1�L��H�p�h_H�T$XH�L$�H�T$XH��Q�A�4���fDL����x��A���k���H���b�����z��ff.���AVAUI��H�5\MATUSH��@dH�%(H�D$81�H�L$H�T$0H�D$ L�D$ 虇�����H�t$ H��OH��H������E1��L�d$(���Hct$1�L����YH�H��H�t$(�o^HcL$H�T$0L��H��I���7h��������ك�u�L���D$�^�D$���`}��H��W"H���1�1��(�A�EI�EH�D$8dH3%(uvH��@[]A\A]A^�fD1�1�H�t$(��]HcL$H�T$0H�t$(H��I���g�����q���H�D$(1�L��H�p�]H�T$(�H�T$(I�EA�UA�E�z����y����ATUSH��H�5�KH��0dH�%(H�D$(1�H�L$H�T$ H�D$����L�D$�
������H�L$H��MH�AH��
���L$��Mb�������)|Hc�H�|$�\H��H����L�D$HcL$H�t$H��H�T$ M�����Aj��A��E��u1H�D$1�H��H�p�\H�T$�H�T$H��S�C�7@H���P\D���{��H��U"H���1�1��p��CH�H�D$(dH3%(uH��0[]A\�@�#b��A���m����w��fD��SH��H�5nJH��0dH�%(H�D$(1�H�L$H�T$H��H�D$(H�D$(P1�L�L$L�D$(蟄ZY���t51�H�|$ H�T$��H�t$E1�E1���1���H��t&�CHc@pH�H�D$(dH3%(uH��0[�D�CH����v��fD��ATUSH��H�5�IH�� dH�%(H�D$1�H�L$H�T$H�D$L�D$�����tQ1�H�|$H�t$H��#��E1�E1�1����!H��H��tAH������H��I���	Mc��CL�#H�D$dH3%(uH�� []A\�fD�CH����&v��fD��H��ԔH�����I�� �E���A�����A��0��AWE��AVI��AUE��ATI��U��SH��H��A��t6A��A
SYul�������tt1ɺ�H�=�H�t4E��E��L��H��A��A����L��A������u~H��[]A\A]A^A_��H��Hǀ�H���@���H�=�G�3�l�������H�=�G��3�D���H��H�5�G�1�[]A\A]A^A_�?�ff.�@��H���D$��uI�� �A��uH��P�tDX1�ZH���A�zYu�1�H��I�H�=�G�ל���������H��ԔSH����t��t=�FH�[���FH�=�F��Z�CH�[���FH�=�F���Z�CH�[����AVAUATUSH��H�$H��H�$H��0dH�%(H��$( 1�I��H�L$H�T$L�D$H�5JFH�D$讀�����1�H�|$H�t$H�� ��E1�E1�1�����
I��H����L��H�l$ L�t$1��^�1�H���H��/�1�L��1�H���y��L$E1�H��H��L���t/H��1ɺ�H��L�����H��t)H����xu��H��H��L���I.����L����H��$( dH3%(uH��0 []A\A]A^�A�EI�E���\r��ff.��AWE1�AVAUATUSH��(H�àԔdH�%(H�D$1�H���H��tH��uHǃ�D�;E��t3E1�H�L$dH3%(D���6H��([]A\A]A^A_�f.�H����H�=z"H�D$��H���H���H����H�8H�L$�H�5�D�c������H�l$L�eA�|$t&A�|$uA�D$���3L����lH�D$L� Mcl$I�,$M��I�A��~}M�e�L9�w-H����xptzH�xI9�rL��gH)�H����p��H��u�A��~AI��L9�v�6��xe��H�hI9�rL��dH��H)�H���p��H��u�A��������fDf�8gz�{����xi�q�����t$H�=Z���1�H��C��H���H���\����?�S����1�藻�B���f��8defl�^���f�xat�R����뛃��A�D$�TH�EH�D$�Ao$H�I�T$H�PH�D$H�8�v
�-�H�D$H�8�GH��BL� A�|$�u����`����o��ff.���H��H��Ԕǀ���,���1�H���D��AWAVAUATUSH��H�<$�l$PH�L$H���aI���H�5�BM�źL��M���r�������H�5��L���mr�������H��E�LD��L���\1ҾH�=�BA���&;H��t�8t	E������u~H� ���t
�xY��H����M��M��jH�L$L��H�|$��=ZYE����H��[]A\A]A^A_����fD��L�%�� �V���f.��l$PH�L$M��M��H�<$H����L��[]A\A]A^A_�=1�H�D�H�=0A�{������H��[]A\A]A^A_ø������1�H��C�H�=�@�F��������ff.�@��AWAVAUATUSH��H�5J%!H��8dH�%(H�D$(1�H�L$H�T$L�D$�z����KH�ŠԔ�����,�H�=��H���H���H����H�8H�L$ �H�5V@�������L�l$ M�eA�|$t&A�|$uA�D$���JL���ZhH�D$ L� M�4$Mcd$M��M�A����M�|$�M9�w;L���f.��xp��H�xI9�rL���gH)�H���Yl��H��u�A��~=I��M9�v�2�xe��L�pM9�rL��dL��L)�H���l��H��u�Dž������CH�H�D$(dH3%(��H��8[]A\A]A^A_�f�f�8gz�O����xi�E����EL�L$�t$H�KH��H�H�|$E���CI��A��A��E��A�������ub�CE���i����E��t}��uh���H�=O>�M*���tx1ɺ�H�=L>�0*��������{w!��t$H�|$�s�R�CH����H������fD���H�=�=��)���u�1ɺ�H�=�=�)�fD�8defl�^���f�xat�R����E����@���A�D$�NI�EH�D$ �Ao$H�I�T$H�PH�D$ H�8�v
��H�D$ H�8�GH��BL� A�|$�^����I����&j��fD��H��`�1������	��H��H�=e=�P���uBH�=b=�@���uSH�=d=�0���uLH�5=H�=.=�ɾ��������H���H��?1��H�=�<���������H��?��H�1@�����USH��H�_��tNH�;�����H��t�x��H���H�{H��t��H�CH���`MH����[]���������f���H�G�H�8�[Y��ff.���ATI��USH�oH�}�X{��H�}Hc��LV����tADŽ$��۸HI�[]A\�ff.����H��H�GH�8��p�����H�H��H��ff.���AWH��M��AVAUA��ATI��UH���+SH��dH�%(H�D$1��EV��H�����H���L�H��H�=:I���Xk�������H��H�=%?�<k��H�U��HD�D��H��E1���0L��L���K�H��H����H�T$��H���������|$�q��L����x��I�nI�H����1�L��H�=a�JL����H�������H���@H���e����A��uJ1�H�L$dH3%(H��uzH��[]A\A]A^A_�fD�H���C�M��t�L���&K�@H��=�1�1��K��f�I�>�xu��A��t�H��=�1�1�����f��fD��SH�G��tH�8H���S��H�H��?[�1�H��=�1��َ�����[�f����H����t�.h��fD�sJ��H��twSH�_H��t=H�{�Y���H�{x��u2�EJ�H�����t2��g���H�߅�t2[��g��@[�fD��g���H�����u��J�H�߅�u�[��If��ff.�@��AWAVAUATUSH��8H���%L�~M���H�|$D��H�:M�w��L�D$(H�L$H�T$�D$$H���E�A��D$ A����ED�E1�D�l$�E1�H��@H�] L9���L)�H�uI9��IF��I�L�H���^��A�_�t$L���T�����FA�GI���A�GH)�I�GxI�I�I�GA�G(H9�s�H)�I�����H���}KH�|$H��E1��H���EH�|$H���I����D$ A�G(I���I�G H�] L9��2���H����H�D$H�8H��������D$$�����\$ L�l$�
D�����L����S��I�����A�G(H9�s�H)�I�����H���JH�|$H��E1��H�ƻ�L��H����I���A�G(I���I�G �DH��� �D$ �D$ H��8[]A\A]A^A_�D�D$ �މ\$ H�D$(H��t�L� ���D$ E1�������H����SH�_H��t9���t`�H�{x��tF��d���H�����t$��d���H�߅�t[��d��[�fD[�Gf��G��f��F�f�H�{��`���D�ff.�@��AWAVAUATUSH��8H���}L�~M���pH�|$H�:M�oD�L$,L�D$ H�L$H�T$H���dD���D$(�����E1����D$�E1�H��@H�] ��I9���A�����L)�H�uI9��IF��I�L�H����Z��A�_�t$L���Z�����e���}A�GI���A�GH)�I�GxI�I�I�GA�G(H9��l���H)�I�����H���XHH�|$H��E1��H��� H�|$H���I����D$(A�G(I���I�G H�] ��I9�����fDH���H�D$H�8H������A������D$,���\$(L�t$������L���Y��I�����A�G(H9�s�H)�I�����H���GH�|$H��E1��H�ƻ�HL��H���I���A�G(I���I�G �DL���h^��AƇ��D$(���H����I�GxA�G�D$(I�G�D$(H��8[]A\A]A^A_�D�D$(�މ\$(H�D$ H��t�L� ���D$(E1�����ff.�������1�H�Dž�t
�D��kDff.���AWAVAUI��ATA��UH��SH��HdH�%(H�D$81����]1ҿ���\DH�xH��H�H��Hǀ�H��1�H)�������H�H�T���H�[X�H�CHH�����H�CPHǃ�Hǃ��C(�c��H���NH�Cx�H�C�C�c��H���,H���H�C �C`H�5*6L���~]�����V��H��t�E�P����\��ƃ�H�{�pH��0�kX��H�=$�J����H��D���!H��H�T$8dH3%(H����H��H[]A\A]A^A_������QDH��H����H�CXH�����H�CHH�z���H�CPHǃ�Hǃ��C(�AH�CxH�CH���s�CH����AH���H�C H������H����1�1�H��4�ЅH�{x�AH��1��}A�
����H�5~/L���\������H�����M�����H��F���0�{���1���u
H�EH��PpH��H�D$�H�5J� A�	H��H�D$芩��uQH�D$L�|$ H��o)T$ H�@H��H�D$0H�� ��vL�����L���;RH�L$ H�A�A��H�����U���X1���u
H�EH��PpH��H�L$�H�5�3A�����uQH�D$L�|$ H��o)\$ H�@H��H�D$0H�� ��vL���1�L���QH�L$ H�AA��H��.���U����1���u
H�EH��PpH��H�L$H�5�?"��l���������5H�D$H��o )d$ H�@H�D$0�H�{E��t'�B]��H�{ �9]��H��1��/]������f.��k?H�{ �b?H��1��X?���<��H�EH��PpH��H�L$�H�5�2�ŧ���q���H�D$L�|$ H��o)L$ H�@H��H�D$0H�� ���L���vPH�L$ H�A��H��>�*���H�22�1�1��������H��21�1��ۂA�	�����A��H��,jpH�{D��P�E1�E���@��ZH�=�JY����A�	A��������DH�E�oEA�	A��H�D$0)D$ �|$4L�|$ vL����L���OH�L$ H�A��H��
�f����H��11�1���������G����L���������H��zJ��H�=" H��Cn�����[��f�H�}�L������H��01�1��要���H����1�1�H��0脁H��1��:=����DH�}����H�}�	����H�}�%���H�h0�1�1��2�A�����H�x0�1�1���A�	�2����X��f���H���C�	H��0H�5�01���	H��0H�5{*1����	H��1H�5�*1����	�\��H�5�0�H��1��	H����	���H��H�=�0���H�=�0�1�H���f���H��H�5��JH�=I0��H�� '�H�=E0�"1�H���ff.���AVAUATI��H�5J*USH��dH�%(H��$�1�H�L$H�T$ H�D$(L�D$(�d���t)H�l$0�T$(1�H�D$hH�D$pH���YR����t5A�D$I�$H��$�dH3%(�5H�Đ[]A\A]A^�H�D$ H�D$0�D$�D$8��x�D$P��:I��H�D$H�IfD�T$8�D$T+D$XA�ƉÅ�t{�T$�T$P����H��L�����<H�I��H�\$HH���%<����t���t(L��D$�:HcD$A�D$I�$H���9Q���-���D�t$TD+t$XD���E��x+�H�ھL���;�E�t$I�$A�D$밐����H��/1�1���V~L���:A�D$I�$�����z����U��fD��AWAVAUATUSH��8dH�%(H�D$(1��G�����I��1�H�L$ ��H�T$H�t$�7�����~L�l$I�m�}t"�}u�E����H���PH�D$H�(D�mf�ɺ�0��A*��Y��X��X�/�H,��|$���9I�ƃ�tnL�|$I�/�}t�}��H���JH�D$H�(�m����L�|$ I��{t"�{u�C����H���ZJH�D$ H���
fD�1�H�D$H�t$E1�A��H��D��L��H�RH��G��Hc�XZ�����D$1�L���p�8H�ËD$��D$����A�D$I�$A�D$H�D$(dH3%(��H��8[]A\A]A^A_�@����f��E�����������E��7I�H�D$�o]H�H�UH�PH�D$H�8�v
���H�D$H�8�GH��BH�(����L���7A�D$I�$�B���f�����E�@7I�EH�D$�oUH�H�UH�PH�D$H�8�w&�GH��BH�(�}��������fD�+�H�D$H�8�ː1��X���f�����C�6I�H�D$ �o#H� H�SH�PH�D$ H�8�v
���H�D$ H�8�GH��BH�����D����H��*1�1����zH���~6A�D$I�$�$����&R��fD��ATUSH��H�5A�H�� dH�%(H�D$1�H�l$H�L$H�D$H���_�������A����H��H��1�ATA��H�xg"1�A�������"�H��XZH��tuH�|$H�M*H��xVH���5H�T$H��H�H���{��C��x$H�H��H����xuV�C�0�H�;�x5H�	+�1�1��y�CH�H�D$dH3%(u)H�� []A\���sH�;H�S��d}H����P��f.���H�GH�8� ]����SH�_��u#H�{�H��t���H����4�����[ÐH�;�b��H�{H��t߾�����SH�GH��H�8�<6����xu
ǃ�H�[��ǃ�H�����[�ff.�f���H��H�GH�8�8��H��H��DATUSH�� dH�%(H�D$1���usH��1�H�t$��������tX��A���۵H��1ɾ����ATH�|$ A��H�ce"A�1���ZYH��tH� !�H9t7�CH��f��;�H�D$dH3%(��H�� []A\�fDH�@H�t$H�8�w;��I�ă�t_��tHcD$�CH��@H���P�HcL$H�ߺH�5�F�L��H��A�H�5 (�
�j���DH���H>���ƉC��xL���5�CH��@���H�5t��1����s���N��ff.�����r���f�����b���f���1��U���D��ATI��UH���SH���E2H�� !�H��1�L�`H��H�([]A\�f�fD��AWH�=�&AVAUA��ATM��UH�պSH��H��(dH�%(H�D$1��1Q��H�K���EHDل���<wt<rt
�}��H����xt1��H���m���tiH���!���u]H��H���<��M��I��A��H��tE��ufE1�M��tvL��H��L�����H��u%L���^��M��t�L���y�f�1�H�T$dH3%(��H��([]A\A]A^A_�H��E1��3I�$��D��E1�L��H���$H��D�L$�T�D�L$H��I��tNH�T$��H��D�L$���D�L$��t@M���Q����}w�G���I�<$�T<���4����M���?����}w�5������|$H��D�L$�I��I��H��uD�L$E��u�M����������L��f���AUATUSH��(dH�%(H�D$1�����H��1�H�T$�H�t$�������L�d$I�$�{t"�{u�C���H���GH�D$H��{H����<rt<w��L�d$I�$�C<�m<t"�{u�C���oH����FH�D$H��KH�#$���H�D$H�3E1�E1��1�H�H����H��tU�EHc@pH�E�f.���H�D$dH3%(��H��([]A\A]�@H��$�1�1��3s�EH�E�D����C�.I�$H�D$�oH�H�SH�PH�D$H�8�w'�GH��BH��{����������H�D$H�8�ʀ{`r��I��u
�{ar��H��$�1�1��r�J���D�#�����H��1ɾ����SH�|$A��H��_"A�1��D�H��XZH������L�k`L���*9��I��H���-H���C��bL���aI��H���(H�D$H�H��<r�1���<wu&�C`<wt<a��I��t<xt�����H�T$��H���a�����e���H�D$�|$H�H�0�DF��H�T$H��H�
H��H�1�������f�����C��,I�$H�D$�oH�H�SH�PH�D$H�8�v
��H�D$H�8�GH��BH��{�@����+���f.��C`��a<w��H������fDL��H��"���H��"�%����0H�����H����t�J��fD�S,��H��twSH�_H��t=H�{�0���H�{X��u2�%,�H�{h��t2��I���H�߅�t2[�I���[�fD�I���H�{h��u���+�H�߅�u�[��+D�ff.�@��AWAVAUATUSH��8H���
L�~M���H�|$D��H�:M�w��L�D$(H�L$H�T$�D$$H����A��A����D$ ED�E1�D�l$��E1�H���H�] L9���L)�H�uI9_`IF_`I�L�H����?��A�_�t$L���E�������0A�GI�WpA�GH)�I�GXI�I�I�GA�G(H9�s�H)�I�h��H���e-H�|$H��E1��H���-�H�|$H���I�Gp�D$ A�G(I�GhI�G H�] L9��@���H����H�D$H�8H�������D$$�����\$ L�l$������L���D��I�Wp��A�G(H9�s�H)�I�h��H���,H�|$H��E1��H�ƻ�u�L��H����I�GpA�G(I�GhI�G ��H�����D$ �D$ H��8[]A\A]A^A_�D�D$ �މ\$ H�D$(H��t�L� ���D$ E1�����ff.���H����SH�_H��t9�{xtc�H�{X��tI��F���H�{h��t*��F���H�߅�t[��F��fD[�fD[�)f��(��f���(�f�H�{�?���D�ff.�@��AWAVAUATUSH��8H���mL�~M���`H�|$H�:M�oE1�D�L$,L�D$ H�L$H�T$�D$(H���
�E1�H��f�H�] L9���A�x��L)�H�uI9_`IF_`I�L�H���<��A�_L���)�����<����A�GI�WpA�GH)�I�GXI�I�I�GA�G(H9�s�H)�I�h��H���q*H�|$H��E1��H���9�H�|$H���I�Gp�D$(A�G(I�GhI�G H�] L9��4����H����H�D$H�8H����A�xur�D$,tk�RH)�I�h��H����)H�|$E1�H��H����H�|$H����I�Gp�D$(A�G(I�GhI�G ��uL���m(��I�Wp��A�G(H9�r�H�D$ H��tWL� �R�L���=��A�GI�WpA�GxA�GH)�I�GXI�I�I�GA�G(H9������H�����D$(�D$(H��8[]A\A]A^A_�f.�I�����H����D$(�fD�D$(�ff.����Hc�Hc�1�H�Dž�t��&fD�&ff.���AWAVAUATI��U��SH��HH�t$dH�%(H�D$81�����1ҿ���{&H�xH�@H��H��H�@x)����1����H�H�Y���H�[P�H�C@H�����H�CH�+H�C`H�Cp�C(��E��H����H�CX�H�C�C�E��H����H�ChH�C H�5�L���?��A�Ņ���H�|$H��tyH�D$�G�P����#H�D$H�D$�o)D$ H�WH��H�T$0H�� <vH�|$ 貶�D$4<t!�|$5L�d$ u
�D$0���8L���H9D�l$ H�{D��1��e;���CxH�=j�J���XH�މ��H��H�L$8dH3%(H���FH��H[]A\A]A^A_������)&H��H����H�CPH�����H�C@H�r���H�CH�H�C`H�Cp�C(�#H�CXH�CH�����CH�{p�k#H�ChH�C H���z���H�KpH�71�1���gH�{X�h#H��1��^#����f�L��H�5,��=��A�ą�u@H�|$A�H��t�G�P�����H�{D��1�D���&��H�=�J�������H�{��t"�@��H�{ �@��H��1��@�����D��"H�{ ��"H��1��"�n���<�HH�G�PpH��H�L$�H�5��(�H�D$H������H�8���f�<�8H�G�PpH��L�t$�H�5BA�L���ߊ��uJH�D$L�|$ H��o)L$ H�@H��H�D$0H�� ���,L���3L�l$ I�E�H���9H�T$�J����1����L��H�5��`��������H�D$L�|$ H��o)T$ H�@H��H�D$0H�� ����L���3H�L$ A��H����R���H���1�1��eE1��5��������D$0�!fo\$ I��H�D$0H��I�D$H�� ��vL����A�D$A�D$�y���f�L����Z���L��������H�BH��PpH�����fDH�D$H���1�A�H�H�1���d���H��]J��H�=�H��
Q����>��H�?������H��1�1���vd����H�?�����H�:�D����H�K`H��1�1���7dH��1�������;����SA���1ҾH�=:�^�A�ع��H�=*�@�A�ع��H�=�"�A�ع��H�=��A�ع��
H�=����A�ع1ҾH�=����A�ع��H�=���A�ع��
H�=���A�ع1ҾH�=��t�A�ع��H�=��V�A�ع��H�=��8�A�ع��H�=���A�ع��H�=���A�ع��H�=����A�ع1ҾH�=����A�ع��H�={��A�ع��H�=n��A�ع��H�=l�i�A�ع��H�=g�K�A�ع��H�=f�-�A�ع��H�=^��1�[�ff.���H�����	H��'!H�5I1����	H����	��ATUSH��H�5��H�� dH�%(H�D$1�H�L$H��L�D$�E�����H�$H����H��H�RKJ�t$�|$H)�H�l����I��H����D$��|$�p��H��t(L)��CH�H�D$dH3%(usH�� []A\�D�D$���x����H�f�1�1��`�CH��fDH�W�1�1��[`�CH��}�����7��fD��SH��H�5�H��0dH�%(H�D$(1�H�L$H�T$L�L$ L�D$��D��ueH�L$H��wEH���T$�t$�CH)�H�
JJ�|$ �T�H�H�D$(dH3%(u.H��0[�fDH�~�1�1��_�CH����	7��f�AWAVAUL�-�IJATUS��H��(H�>H�t$�������@H���@��H���@I���@���L�����Hc�H��H�D$H)�H��I�T�B ��~Q��L�r0A�H��H�D$K��L���H�����I�D(L��L��J��I�����L;|$u�L�t$H��H�5�I�>���I�>L��
H�5v���H�\$I�>�H�5jH��H)�I�\�HcK$��H�I�>�A�H�5H���H�KI�>H��([A�]�
A\H�5*A]A^A_��ff.�@��USH��8H�t$H�T$H�54�!dH�%(H�D$(1�H�D$�����wB���tZH�|$H���tgH�GH��w-H�t$����H�D$(dH3%(��H��8[]��H��H�;�1�1��X]H�D$�@H��fDH�|$1�H�l$ �������H���@�@H�D$ ���H�T$ H�|$H��H����H��u��W����e4��D��SH��H�5�H�� dH�%(H�D$1�H�L$H�T$I���kA���t6�T$�t$�C�<$�H�H�D$dH3%(uH�� [�f��CH�����3��ff.���SH��H�5��H�� dH�%(H�D$1�H�L$H�T$I����@���t6�T$�t$�C�<$��H�H�D$dH3%(uH�� [�f��CH����N3��ff.���SH��H�5��H�� dH�%(H�D$1�H�L$H�T$I���K@���t6�T$�t$�C�<$�H�H�D$dH3%(uH�� [�f��CH����2��ff.���SH��H�5m�H�� dH�%(H�D$1�H�L$H�T$I���?���t6�T$�t$�C�<$�
H�H�D$dH3%(uH�� [�f��CH����.2��ff.���ATUSH��H�5�� H��@dH�%(H�D$81�H�L$H�T$�+?�����H�l$H����H����H�L$H�T$H��H�=rDJH)�H�t$H�l$ L�$�H�|$A�T$D�L$�L$1�D�D$H��H�:�3�H��H��A�H�5��HcL$�H��H�52��HcL$�H��H�5P� ���HcL$�H��H�5����H�|$��
�H�5�H��Hc�H����H�4�H��A��H�5�H�����H��3�H��A��H�5wH�����HcT$H��I�D$(A�H�5\H�к��HcT$H��I�D$0A�H�5�H�к
�}�H�D$8dH3%(u2H��@[]A\�@H��H��
1�1���X�CH���0��fD��USH��H�5�H��HdH�%(H�D$81�H�T$�=�����H�|$H�L$H�T$H�t$H�l$ �
D�L$�L$1�D�D$�H�Q
H���G�H��H����������!�%����t��H������D�H�VHD��H��H)�s�2�CH�H�D$8dH3%(uH��H[]�@�CH����/��ff.���USH��H�5�H��HdH�%(H�D$81�H�T$�<�����H�|$H�L$H�T$H�t$H�l$ �D�L$�L$1�D�D$�H�QH���GH��H����������!�%����t��H������D�H�VHD��H��H)�s�2�CH�H�D$8dH3%(uH��H[]�@�CH����.��ff.���USH��H�5�H��HdH�%(H�D$81�H�T$�;�����H�|$H�L$H�T$H�t$H�l$ ��D�L$�L$1�D�D$�H�QH���G~H��H����������!�%����t��H������D�H�VHD��H��H)�s�2�CH�H�D$8dH3%(uH��H[]�@�CH����-��ff.���USH��H�5��H��(dH�%(H�D$1�H�L$H�T$H�D$�:���tH�|$�H�T$H��tZH��uDH��4�H�H�,�H������ƉC��xVH���n�CH�H�D$dH3%(uOH��([]�H��CH���DH�H��3��D�CH��H�5���1�蝰�s��,����USH��H�5�� H��8dH�%(H�D$(1�H�L$ H�T$�9���t0H�|$ H�|$H�L$�2H�D$ H��
Hc�H�>��@�CH�H�D$(dH3%(�<H��8[]�f�H�T$H�t$�HcT$H�@4�H�,АH�������ƉC����H���3�CH��f.�H�T$H�t$�HcT$H��4�H�,���H�T$H�t$�IHcT$H��4�H�,���H�T$H�t$��
HcT$H�@6�H�,��\���@H�T$H�t$�HcT$H�@5�H�,��4���@H�T$H�t$�qHcT$H�@5�H�,�����@H�51��1��ծ�s�����H*���SH��H�� dH�%(H�D$1��G�='�������=��H��I���������p���A��M�A=���A�A�M�A�� ��c~*�Ⱥ��QL��I������BH�k�dA�)�A�@��A����	~,�Ⱥ����L��I������B	H�A�A�@����)���tHc�H��I���A�@���t"L��L)�tH���A�'I���A�I)�A�p�H�H�\$dH3%(�H�� [�����Mb������)�Hc�H���$@��t^H���D$'L�O@��uY�Ⱥ�Mb������)�i��)����@��	H��A��I��Hc��A�@��'���fDH��L�O@��t�H� ����� I��I�A���H�1��%���f�A�@�A�@�"I��A�@����f�M���;�������,�����'��@��AUATUSH��H�5�H��hdH�%(H�D$X1�H�L$H�T$H�D$L�D$�D$��4���tGH�|$H�L$H�T$H�t$��|$��|$�G�='v?H�R�1�1���O�CH�H�D$XdH3%(�#H��h[]A\A]Ët$H�T$(H�l$0����HcT$�t$I��H��5��|$L�$�H�T$ ���H��M�� H��M��H��� 1��wH�|$ H��t�
H�|$(H��t�
H��H����������!�%����t��H������D�H�VHD��H��H)�s�f
�CH�����f.�H�l$0D�L$�L$1�D�D$�H�H���vH��H����������!�%����t��w����&����H�%I�$I�$IH��H��H��H��H��?H�H)�H��H)�H)ǍGI��fD��H��`��I��H=�wJH�<�7o�H��hB���m�H��H��H��
�HiҵH)׺����H��������Bk�A�)׃��9Ð����ff.�f����O�1���
w'����w�J���wi��k������:2?$H��f.���I��H����L����H��b�ȼk9L��H��H��Hi±:k�dH��hB���m�I)�I��L��H��H��
�HiҵI)�H��5�5�5I��G�\�Mc�L��H��H��H��I��H��H��H�H���������I)�L��H��H��D�BA���~&��A��	��@�����NljE�D��DA����f�����ff.�f���A�Ѕ�������|y�V�1���wqA�P���wh����tf�����xl��~o����i�����Q���i±:k�d��)эV�����iɵ��������A��ӂ��H��D1��D��
~���uA��~ꍏ�댃�	����H��I��H�%I�$I�$IH��H��H��?H�H)�H��H)�H��H)�A�у�wO��$��H�������A�III��L�у�I���K~.f�D�JH�FA��u1H���D1�1�I���Kۅ�u/��u*I���&~3H�FD�JA�Q���tE��u#H���fD��u��tI���A�H���f���H����1��ff.�@L��6AUI��H��=��u�L��ATH��USL�I��?H��L)�I�w4��œ�Pi“���i�
H�H${Hc�I��I��L�D��H��I��H��
Hi�@eH��I��H)�H��H��I	�L��I��L��L���H��
I	�Hi�@eH)�M9�}/fDH�����
��H��I��H��H��
I�Hi�@eH)�M9�|�H��IE1�L�%�H�w4��œ�P�D��L9�~AGi���I��Mc�I�L��H��L��H��?H��
H)�L��I�Hi�@eH)�I��u���[A�U]L�A\I�A]�ff.����I�Һ��kS��M��I�w4��œ�P������)҉�B)�A�:�i�i��
Hc�H��${Hc�H����H��H�H��I��H��
Hi�@eH)�H��H��H��H��H	�H��I��H��H��
H	�Hi�@eH�9H)�H�kI�0Ici���H�H�H��I�0H��?I��H��
H)�HI�0H��I��H��H��
H��?H)�Hi�@eH)�I�0H��A�:H�1���[A��ff.���AWI��AVI��AUATI��USH��XdH�%(H�D$H1�H��]O<���H�D$HdH3%(��H��X[]A\A]A^A_��H�D$4H������L�D$@H�L$8H��H��H�t$0L�D$(H�L$ H�D$H�t$���L�T$@D�\$4L�l$8L��D��L�T$L������H��Lc��D$0���PI9���A�DL�T$A��E;H�H9���Ic�H�V�A�{�l$i���L�D$H�w4��œ�PH�I�L��H��L��H��?H�ֺ��kH��
H)�Hi�@eL�I)‰�������)ҍBL��)�����L�D$�L$��L)�)�H�C�c�\����PH��:H���PA�A�$���f�AÍ�O���H�E�H9���A�����k���D��)��D�����)ҍBA)�H�X�Mc�B�<�
��A�A�4$������A�/A�$��A�$������A�/A�$��A�$�����L�D$(H�L$ I������H�T$H�t$����H�T$@H�t$8�|$4����Lc������@�EH�H9�����A�)�A�$���D�E�H�H9�|v�E�H�H9�����<A�)�A�$�Y���H��;H�������A�A�$�8���f�A�A�4$���#���A�/A�$��A�$������������A�
)�A�$����A�)�A�$�����E�H�H9�}��YA�)�A�$�����E�H�H9�}��wA�
)�A�$�����l���H�H9�}�ÔA�	)�A�$�r����òA�)�A�$�Z�������ff.�@��ATUSH��0dH�%(H�D$(1��B���w,����~&��A�ԃ���H�
����Hc�H�>��D1�H�|$(dH3<%(��H��0[]A\Ð��H�T$H�L$H�t$�L�L$L�D$ �\����غ��k������)ҍB�)�H���Hcۃ<��;EЋD$D�)Ѓ��4���k-�H����H�L$H�T$H�t$L�L$L�D$ ����HcT$H�>�H�w4��œ�Pi���H�׃�Hc�HL$ H��H��H��H��?H�ֺ��kH��
H)�Hi�@eHt$H)���������)ҍBH��)������t$��)�c��B�T&:Hc����fDH]O���DH�L$H�T$H�t$L�L$L�D$ �
����D$D��
��H��H�t$H�L$H�T$�{L�L$L�D$ �����u����#���H���Hc�H�>��f�B�D&;H��l���@-�H��\���@�D$D��<H��G�����D$D��YH��/�����D$D��wH�������D$D�-�H����D�D$D�����@�D$D�-�H�����D�D$D��H�������H����fD-�H�������f.�D��I��H����H� H��������?H�H9���L��K�H��hB���m�L��H���H�׺����H��
H�H9���HiǵSA��H��5�5�5I)�I��C�\�Lc�L��H��H��H��I��H��H��H�H���������I)�L��H��H��D�B���~AD�_A��	A��@�A��[��ANÉE�
D���A���@A���f���A�Ѕ�tm����|e�V�1���w]A�P���wT����tR�����xS�V����V	��iҙ�����iɵ���������A������H���1��D��uA��t��f.�AWAVA��AUI��ATI��US��H��hdH�%(H�D$X1�L�|$H�l$ H�D$L������H��L���Q���lH��t
�D$4��lHc�H�T$1�H�L$D��H�T$H�5O��#�����H�|$����H��I��H�OH�6��P^Cy
H��H��H��?H)�H��H�BI)�H�D$I��H��HI�H��H�H��.��H���4H�%I�$I�$IH��H��H��H��H��?H�H��H)�H��H)�H��H)�H�FHH�J��L��H���������H)�M�L��L��H��L��H��?J�
H��H)�H��H��H)�L��H�H)�H�AHH�H��tH��u
I��~H��H�%I�$I�$I�H)�H)�H��H��H��H��?H�H)�H��H)�H)�H�FH��HH�H�D���!��l�D$@�����|$4H�D$ �D$(H��
�4��
�D$0�D$,H���%
��I�$A�EH�D$XdH3%(�?H��h[]A\A]A^A_�f�H��N���H��C��H��I��H�OH�6��P^Cy
H��H��H��?H)�H��H�BI)�H�D$I��H��HI�H��H�H�����H���v\H��u`H�%I�$I�$IH��H��H��H��H��?H�H��H)�H��H)�H��H)��/���@I�$A�E����f.�H��H��w�I�ףp=
ףH��H��I��H��?I��H�H��H��H��H)�I)�L�L������H�H�%I�$I�$IH��H��H��H��?H�H��H)�H��H)�H��H������H)�H�FHH�H��I��J��H�L��I��H)�H��I��I�D�I)�I�L��I��J�I��?H��L)�H��H��I��H�H��?H��H)�I)�H���������L��H��L��H��?J�H��H)�H��H��H)�L��H�H)�H�AHH��?���@���D$0�D$,����@H����1�1��;A�EI�$����t��@��H�V��^���ff.���H�V1��A������USH��XdH�%(H�D$H1���aH��1�H����萮��uL��tw1��0
��H�D$H��xVH�t$H�|$���H��tB�H�x�P�q��l���EH�E��英H�D$HdH3%(u5H��X[]�@�EH�E��f�H�<$�WH�$H�H�D$�{����q�����SH��dH�%(H�D$1���uH��1�H���軭��t��H�D$dH3%(uOH��[�@H�<$��H�$H�H-�=%H=�`wHi��Q�CH��f.��CH������f.�@��H��胱	H�|� H�5K�1���9�	H��頱	��AUATI��H�5�USH��8dH�%(H�D$(1�H�T$������H�\$�{���o)D$H�CH�D$ �|$$uOH�\$Hcl$H�D$H�D�hH9�t)������H��
�H9���H���C��DBu�A����A�D$I�$H�D$(dH3%(��H��8[]A\A]ÐH�H=�v-H���so�oH�|$)L$H�CH�D$ ��J���fDA�D$�M��HcH��Pf����I�$�fDA��tJA�D$I�$�g����A�D$���H���Hc���H�|$膄�#����H�|$�v������ff.�@��AUATI��H�55�USH��8dH�%(H�D$(1�H�T$�������H�\$�{���o)D$H�CH�D$ �|$$uOH�\$Hcl$H�D$H�D�hH9�t)���6
��H��
�H9���H���C��DBu�A����A�D$I�$H�D$(dH3%(��H��8[]A\A]ÐH�H=�v-H���so�oH�|$)L$H�CH�D$ �S	�J���fDA�D$���HcH��DP��I�$�f�A��tZA�D$I�$�g����A�D$�U��H�H���Hc��DP��I�$�5���DH�|$�Ƃ�����H�|$趂��/
��ff.�@��AUATI��H�5u�USH��8dH�%(H�D$(1�H�T$�.�����H�\$�{���o)D$H�CH�D$ �|$$uOH�\$Hcl$H�D$H�D�hH9�t)���v��H��
�H9���H���C��DB u�A����A�D$I�$H�D$(dH3%(��H��8[]A\A]ÐH�H=�v-H���so�oH�|$)L$H�CH�D$ ��J���fDA�D$��
��HcH��Pf��
��I�$�fDA��tJA�D$I�$�g����A�D$�
��H���Hc���H�|$���#����H�|$������ff.�@��AUATI��H�5�USH��8dH�%(H�D$(1�H�T$�~�����H�\$�{���o)D$H�CH�D$ �|$$uNH�\$Hcl$H�D$H�D�hH9�t(����	��H��
�H9���H���C��Bu�A����A�D$I�$H�D$(dH3%(��H��8[]A\A]�f�H�H=�v-H���so�oH�|$)L$H�CH�D$ ���J���fDA�D$�-	��HcH��Pf����I�$�fDA��tJA�D$I�$�f����A�D$����H���Hc���H�|$�f�"����H�|$�V���	��ff.�@��AUATI��H�5~USH��8dH�%(H�D$(1�H�T$�������H�\$�{���o)D$H�CH�D$ �|$$uOH�\$Hcl$H�D$H�D�hH9�t)�����H��
�H9���H���C��DB@u�A����A�D$I�$H�D$(dH3%(��H��8[]A\A]ÐH�H=�v-H���so�oH�|$)L$H�CH�D$ �3�J���fDA�D$�}��HcH��Pf����I�$�fDA��tJA�D$I�$�g����A�D$�5��H���Hc���H�|$�}�#����H�|$�}����ff.�@��AUATI��H�5e|USH��8dH�%(H�D$(1�H�T$������H�\$�{���o)D$H�CH�D$ �|$$uOH�\$Hcl$H�D$H�D�hH9�t)���f��H��
�H9���H���C�f�<Bx�A����A�D$I�$H�D$(dH3%(��H��8[]A\A]ÐH�H=�v-H���so�oH�|$)L$H�CH�D$ ��J���fDA�D$����HcH�H�PH��?I�$��A��tZA�D$I�$�g����A�D$���H�H���Hc�H�PH��?I�$�4���@H�|$�{�����H�|$��{��_��ff.�@��AUATI��H�5�zUSH��8dH�%(H�D$(1�H�T$�^�����H�\$�{���o)D$H�CH�D$ �|$$uOH�\$Hcl$H�D$H�D�hH9�t)�����H��
�H9���H���C��DBu�A����A�D$I�$H�D$(dH3%(��H��8[]A\A]ÐH�H=�v-H���so�oH�|$)L$H�CH�D$ ���J���fDA�D$�
��HcH��Pf��	��I�$�fDA��tJA�D$I�$�g����A�D$����H���Hc���H�|$�Fz�#����H�|$�6z����ff.�@��AUATI��H�5�xUSH��8dH�%(H�D$(1�H�T$������H�\$�{���o)D$H�CH�D$ �|$$uOH�\$Hcl$H�D$H�D�hH9�t)�����H��
�H9���H���C��DBu�A����A�D$I�$H�D$(dH3%(��H��8[]A\A]ÐH�H=�v-H���so�oH�|$)L$H�CH�D$ ���J���fDA�D$�]��HcH��Pf����I�$�fDA��tJA�D$I�$�g����A�D$���H���Hc���H�|$�x�#����H�|$�x����ff.�@��AUATI��H�5EwUSH��8dH�%(H�D$(1�H�T$������H�\$�{���o)D$H�CH�D$ �|$$uNH�\$Hcl$H�D$H�D�hH9�t(���F��H��
�H9���H���C��Bu�A����A�D$I�$H�D$(dH3%(��H��8[]A\A]�f�H�H=�v-H���so�oH�|$)L$H�CH�D$ �c��J���fDA�D$���HcH��Pf���I�$��A��tJA�D$I�$�f����A�D$�e��H���Hc���H�|$��v�"����H�|$��v��O��ff.�@��AUATI��H�5�uUSH��8dH�%(H�D$(1�H�T$�N�����H�\$�{���o)D$H�CH�D$ �|$$uOH�\$Hcl$H�D$H�D�hH9�t)�����H��
�H9���H���C��DBu�A����A�D$I�$H�D$(dH3%(��H��8[]A\A]ÐH�H=�v-H���so�oH�|$)L$H�CH�D$ ��J���fDA�D$���HcH��Pf��
��I�$�fDA��tJA�D$I�$�g����A�D$���H���Hc���H�|$�6u�#����H�|$�&u����ff.�@��AUATI��H�5�sUSH��8dH�%(H�D$(1�H�T$������H�\$�{���o)D$H�CH�D$ �|$$uNH�\$Hcl$H�D$H�D�hH9�t(�����H��
�H9���H���C��Bu�A����A�D$I�$H�D$(dH3%(��H��8[]A\A]�f�H�H=�v-H���so�oH�|$)L$H�CH�D$ ���J���fDA�D$�M���HcH��Pf����I�$�fDA��tJA�D$I�$�f����A�D$����H���Hc���H�|$�s�"����H�|$�vs����f.�D�ff.�@�ff.�@�ff.�@�ff.�@�ff.�@�ff.�@�ff.�@�ff.�@�ff.�@�ff.�@�ff.�@�ff.�@�ff.�@�ff.�@�ff.�@�ff.�@�ff.�@�ff.�@�ff.�@�ff.�@�ff.�@�ff.�@�ff.�@�ff.�@�ff.�@�ff.�@�ff.�@�ff.�@�ff.�@�ff.�@�ff.�@�ff.�@�ff.�@�ff.�@�ff.�@�ff.�@�ff.�@�ff.�@�ff.�@�ff.�@�ff.�@�ff.�@�ff.�@��H����	H��� H�5V�1��詠	���H�5K��H��1�莠	H���	D��S���H�/�1�H�='��bH��DՔ1���H���(H�H���bH��@ՔA�ع�H�=����[�[�A�ع�\�H�=���=�A�ع��
H�=����A�ع�'�
H�=����A�ع�'�H�=����A�ع�'�H�=���ōA�ع��H�=��觍A�ع�'�H�=��艍A�ع�'�H�=���k�A�ع�)�H�=��M�A�ع�*�H�=q��/�A�ع�''�H�=b���A�ع�+�H�=W���A�ع�,�H�=L��ՌA�ع�-�H�==�跌A�ع�.�H�=3�虌A�ع�/�
H�=$��{�A�ع�0�H�=��]�A�ع�2�H�=	��?�A�ع�3�H�=���!�A�ع�4�H�=����A�ع�6�H�=����A�ع�'�H�=���NjA�ع�'�H�=��詋A�ع�'�H�=��苋A�ع�
�H�=���m�A�ع���H�=���O�A�ع�'�H�=���1�A�ع� '�H�=����A�ع�"'�H�={��A�ع�!'�H�=o��׊A�ع�U�H�=a�蹊A�ع��H�=X�蛊A�ع��H�=R��}�A�ع��H�=K��_�A�ع�&'�H�=A��A�A�ع�`�H�=2��#�A�ع�:�H�=*���A�ع�)'�H�= ���A�ع�*'�H�=��ɉA�ع�-'�H�=
�諉A�ع�Q�H�=�草A�ع�/'�H�=���o�A�ع� �H�=���Q�A�ع�!�H�=���3�A�ع�"�H�=����A�ع�4'�H�=���A�ع�5'�H�=���وA�ع�5�H�=��軈A�ع��M�H�=��蝈A�ع�,'�H�=����A�ع�7'�H�=���a�A�ع�N'�H�=���C�A�ع�O'�H�=���%�A�ع�=�H�=t���A�ع�E�H�=n���A�ع�+N�H�=a��ˇA�ع�,N�H�=Y�譇A�ع�oN�H�=P�菇A�ع�D�H�=I��q�A�ع�G�H�==��S�A�ع�'�H�=3��5�A�ع�J�H�=)���A�ع�K�H�=!��A�ع�\'�H�=��ۆA�ع�]'�H�=�轆A�ع�N�H�=�蟆A�ع���H�=��聆A�ع�@�H�=���c�A�ع�Q'�H�=���E�A�ع�q'�H�=���'�A�ع�b'�H�=���	�A�ع�c'�H�=����A�ع��M�H�=���ͅA�ع�c�H�=��诅A�ع�e�H�=��葅A�ع�b�H�=���s�A�ع�P�H�=���U�A�ع�T�H�=���7�A�ع�g'�H�=~���A�ع�h'�H�=o��A�ع�*'�H�=d��݄A�ع�i'�H�=[�迄A�ع�Z�H�=O�衄A�ع�f'�H�=K�胄A�ع��
H�=A��e�A�ع�v'�H�=0��G�A�ع�;�H�=#��)�A�ع�i�H�=���A�ع�j�H�=���A�ع�y�H�=
��σA�ع�x'�H�=�豃A�ع��H�=��蓃A�ع��H�=���u�A�ع��H�=���W�A�ع�k�H�=���9�A�ع��H�=����A�ع��H�=���A�ع��H�=���߂A�ع��H�=���A�عH�����
H�=��衂A�عH�����H�=��聂A�ع�o�H�=���c�A�ع�n� H�=���E�A�ع�w'�H�=[��'�A�ع��$H�=���	�A�ع��H�=/���A�ع��H�=/��́A�ع��H�=)�证A�ع��H�=$�葁A�ع��H�=��s�A�ع� �H�=��U�A�ع� �H�=��7�A�ع� �H�=���A�ع�0�H�=���A�ع�0�H�=���݀A�ع�0�H�=��迀A�ع�0�H�=��血A�ع�0�H�=��胀A�ع�0�H�=���e�A�ع�	0�H�=���G�A�ع�
0�H�=���)�A�ع� �H�=����A�ع�
 �H�=����A�ع�0�!H�=����A�ع�0�H�=���A�ع�0�H�=u��A�ع��H�=s��uA�ع�0�H�=k��WA�ع� �H�=d��9A�ع��H�=^��A�ع��H�=T��~A�ع��H�=G���~A�ع��H�=;��~A�ع��H�=4��~A�ع��H�='��~A�ع��H�=��g~A�ع��H�=��I~1�A�ع�	H�=��.~A�ع��H�=���~A�ع��H�=����}A�ع��H�=����}A�ع��H�=���}A�ع��H�=���}A�ع��H�=���z}A�ع��H�=���\}A�ع��H�=���>}A�ع�	�H�=��� }A�ع�
�"H�=��}A�ع��H�=����|A�ع��H�=����|A�ع�
�H�=���|A�ع��H�=���|A�ع��H�=���l|A�ع��H�=���N|A�ع��H�=���0|A�ع��H�=���|A�ع��H�=}���{A�ع��H�={���{A�ع��H�=s��{A�ع��H�=k��{A�ع��H�=b��|{A�ع��H�=V��^{A�ع��H�=M��@{A�ع��H�=K��"{A�ع��H�=>��{A�ع��H�=4���zA�ع��H�=0���zA�ع��H�=.��zA�ع��H�=&��zA�ع� �H�=#��nzA�ع�!�H�= ��PzA�ع�"�H�=��2zA�ع�#�H�=��zA�ع�$�H�=��yA�ع�%�H�=���yA�ع�&�H�=
��yA�ع�'�H�=��yA�ع�(�H�=���~yA�ع�)�H�=���`yA�ع�*�H�=���ByA�ع�+�H�=���$yA�ع�,�H�=���yA�ع�-�H�=����xA�ع�.�H�=����xA�ع�/�H�=���xA�ع�0�H�=���xA�ع�1�H�=���pxA�ع�2�H�=���RxA�ع�<�H�=���4xA�ع�4�H�=���xA�ع�5�H�=���wA�ع�6�H�=����wA�ع�7�H�=���wA�ع�8�H�=���wA�ع�9�H�=���wA�ع�:�H�=���bwA�ع�;�H�=���DwA�ع�<�H�=t��&wA�ع�=�H�=g��wA�ع�>�H�=d���vA�ع�?�H�=]���vA�ع�@�H�=W��v1�A�ع�H�=Q��vA�ع��H�=B��uvA�ع��H�=5��WvA�ع��H�=(��9v1�A�ع�H�=!��vA�ع��H�=��v1�A�ع�H�=���uA�ع��H�=���uA�ع��H�=��uA�عH������H�=���u1�A�ع�	H�=���nuA�ع��H�=���PuA�ع��H�=���2uA�ع��H�=���uA�ع��H�=���tA�ع��
H�=����tA�ع���H�=���t1�A�ع�H�=���tA�ع��H�=���tA�ع��H�=���ctA�ع�w�H�=x��Et1�A�ع�H�=m��*tA�ع��H�=_��tA�ع��H�=P���sA�ع��H�=E���sA�ع���H�=6��sA�ع���H�=0��sA�ع��H�=$��vsA�ع��H�=��XsA�ع��H�=��:sA�ع��H�=���sA�ع��H�=���rA�ع� �H�=����rA�ع�@�H�=����rA�ع���H�=���rA�ع��H�=���rA�ع��H�=���hrA�ع��H�=���JrA�ع��H�=���,rA�عH������H�=p��rH�=��Lt��x���������[�@�(���H��H���L�H��t�1���뿐USH��H��H���H���H�@ H��t�@��������H���H��@H���B�������BHǃ`Hǃ(�~�H���v�H���H�(H�}8�H�}tH���"xH���H�xH�?t�xH���H�xH�?t�wH���H�xtH�x��wH���H�x t	H�x ��wH����H���H�xH�PtH��P�wH���H�8H�PtH��P�wH���H�xH�@tH��@�jwH���H�8�H���H�x�H���H�x�H����H��H��[]��H�}0H��t
�r�H�E0H�E8H�E@H���H�(���H�y�I�5'H�1����H����1���fD��H����H������\���f�H��x������ff.�@��H�?���@��SH�T�LH�����H���d��H�9�L�t�1�[���ATUH��H�5.�!SH��dH�%(H�D$1�H��H�$�j�����q�<$���H��H���}H��L�%/. �>��K�H��H�5F�觇��H��H�5��葇HcK �	H��H�5��y�H�K0�H��H�5���a�H�KH��A��H�5dH��ID�謎H�KH��A��H�5��H��ID�臎H�K(H��A��H�5��H��ID��b�H�K8A�H��H�5���
H��ID��=��H�[@���@H��I���@�)�H�3H��t��L��H��这H�3H��u�L��
H�5:�H��耑H�D$dH3%(uH��[]A\���EH�E���}��ff.�f���AWAVI��AUI��ATI��USH��dH�%(H��$�1�H���H�X�C8��tL1�uH�K(H��t�W�Hc�@H��$�dH3%(H����H�Ę[]A\A]A^A_�@�H��H�$L�|$H�D$H�D$�ļ��@�@H�$諼��@�@H�D$葼H�D$�@�@H�$�@H���H�8�:<H�D$�@H�{0H�8�%<Ic�H�T$H�sI��H�|$ �BH�H��H�D$pH�D$H�D$xH�D$H��$�H�`�H�D$ HH��8H�D$(H�ƅ�H�D$0H�D$pH�D$XL�|$@�D$HH�D$P�D$`H�D$8�\�ƅ����t@H�T$1�H��t�ztNL���frH�|$p�\rH�|$x�RrH��$��Er�P���H�q��1�1�����@M��HcBH�2L��L9�IG�Hc�H���@������f���AVAUI��ATI��USH��H��H��H���dH�%(H��$�1�H�i�EH���6~D��tw��H�����HE�H��$�dH3%(H����H�Đ[]A\A]A^����u$H�)�}Hu	H������L��� �fDH�������H�D$�H�D$�<���@�@H�D$�"�H�D$�@�@H�D$�@I��$�H�8��9L�t$L���L�l$A�^�H�uH�|$ I�H�D$H�D$ H�@H�D$H�D$pH�D$H�D$xH�`�H��8H�D$(H�EAƄ$�H�D$0H�D$pH�D$8H�D$XL�l$@�D$HH�D$P�D$`�AƄ$������H�l$H��ty�}tg�}uT�E��vL����E��H�D$�oEH�UH��H�PH�� ��v
H���.KH�D$�@H���@H����H�l$L��H�]�oH�|$p�oH�|$x�~o���f�H�M(�g�H�������H�E0Lc�H��tTH�}8N�4'L9u@v~H�L��L���p��L�u8����H�y��1�1��H������m����H�E8I��MvSI��$I��$H�E@1�1�M���Z�H�}8H�E0�I��H��I��H�U@1��4�H�}8H�E0�Y����O�N����fD��AVAUI��ATUH��SH��H��dH�%(H��$�1�H���H��CH���B~x�����u:H��t5H�C0Lc�H����H�{8N�4'L9s@�CH�L��L���5��L�s8�H��$�dH3%(H����H�Đ[]A\A]A^�fD��ủ����I�̿H�D$H�D$H�D$踶I��$��f�PH�8�@H�D$�c6H�D$�H�D$p��L���L�l$�@I���@�hH�D$�:�H�sH�|$ H�D$ HI�H�D$�@H�D$H�D$xH�`�H�D$XH��8H�D$(H�AƄ$�H�D$0H�D$pL�l$@�D$HH�D$P�D$`H�D$8�{~AƄ$������H�\$H��tw�{tf�{uS�C��vK����C蛵H�D$�oH�SH��H�PH�� ��v
H���GH�D$�@H���@H����H�\$L��H�+�lH�|$p�lH�|$x�l�����H�K(���H������H�i��1�1��k�H������f�I��H��I��H�S@1��4�H�{8H�C0����H�C8I��Mv2I��$I��$H�C@1�1�M����H�{8H�C0�R���D�O�N���_��ff.�@��H�?�T��@��H�?�D��@USH����H���-��(�H�H���h��X�H���H�H����H��X�H�EH�H����+��H�H�EH�H�����H�g����H�EH�ƀ�H�Hǀ�H�1�H�yH�HǁH��H)������H�H�H��@�ɪH�;H��1�[H����p]H��馪fD��SH��dH�%(H�D$1���uZH��1�H���m���tCH�DՔH�<$1�A�H�n������D�1��B3H��t5�CHc�H��
D�snH�D$dH3%(uH��[�D�CH����v��fD��AUATUSH��(dH�%(H�D$1�����H��1�H�t$��m����|I��DՔH�|$1�1�A�H��������E�$�2H��H���zH�������I��H���MH�|$���H�T$L���ǂ�H���H�H�xPt>H���H�H�xP�	CH���H�T$H�	H���H�IPH�H�HPH���H�H����@HH�	�AHH���H���H�	H��IL�HLH���H�@H�x@H��t�BH���H�T$H�@H�x@H���H�@H�x@H���H���H�IH�@�I8�H8H���H���H�IH�@�IH�HHH���H�@H�xPH��t�'BH���H�T$H�@H�xPH���H�@H�xPH���H���H�	H�H�I(H�H(H���H���H�IH�@H�I(H�H(H���H���H�IH�@H�I(H�H(H���H���H�@H�RH�R0H�P0H���H�8H�?t+�yAH�D$H���H���H�H�H�H�H���H�xH�?t-�DAH�D$H���H���H�RH�@H�H�H���H�xH�?t&�
AH�D$H���H���H�RH�@H�H�H�T$�'1�H����D��H�T$�'1�H����,��H�T$�'1�H������H�T$�-'1�H������H�D$H��@H��@贩H�D$H��H��蜩H���H�t$H��A�$�@H���H����/H�UH�D$H�����{jH�D$dH3%(u.H��([]A\A]�H���1�1����EH�E���h�����USH��dH�%(H�D$1���uqH��1�H���h���tZH�DՔH�<$A�1�H��������D�1��.H��H��tIƀH���j���H��C���Ͱ�CH��	@�iH�D$dH3%(uH��[]�@�CH������ff.���ATUSH��0dH�%(H�D$(1��G�����I��1�H�T$H���$h�����H�DՔH�<$A�1�H�ξ�����D�1��-H��H��������H�D$H�H�0�� �6�� ����tr����u_H���H����H��xA�t$覯A�D$I�$�f.��khH�D$(dH3%(�H��0[]A\�fD��u�H�D$ 1�H���H�T$ 贯�����H�\$ H����H��趷����A�D$����H����A�D$I�$�u�����t��� �a���H�D$ 1�H���H�T$ �@�������H�D$ A�D$I�$�)���@��
0~X��0������0~��0�����H�D$ 1�H���H�T$ �ܮ����u8�D$ A�D$�A$�������0}��� �P�������A�D$I�$���DL��H�\$�[n1�H�ھH����e�����u-H�L$H�! L��A��H�5k4 H��HD��{H���1�H�ھ�������nH�\$H���1�� H��������{H���1�H�ھ �ݭ������H���1�H�ھ 迭�����gH���1�H�ھ 衭�����iH���1�H�ھ
 胭�����+H���1�H�ھ �e�������H�\$ H���1��0H���B�������H���1�H�ھ0�$������lH���1�H�ھ0�������.H���1�H�ھ0�������H���1�H�ھ0�ʬ������H���1�H�ھ0謬������H���1�H�ھ	0莬������H���1�H�ھ
0�p������xH���1�H�ھ0�R������:H���1�H�ھ0�4�������H���1�H�ھ0�������~H���1�H�ھ0�������H������H��xH�� L��A��H�5 �H��HD��x���fDH�L$H���jA��
H�5ѹL���Px�e���H�L$�
H�5��L���p�g���f.�H�L$�
H�5��L���p�{���f�H�L$�H�5�L���wp�=���f��D$ �H�5ڹL���Fv�/�����D$ �H�5��L���&v����D$ �
H�5|�L���v�����D$ �H�5L�L����u�u�����D$ �H�5!�L����u�7����H�L$�H�5�L���o���f�H�L$�H�5��L���o���f�H�L$�	H�5��L���wo�y���f��D$ �H�5�L���Fu�����D$ �
H�5�L���&u�i�����D$ �H�5��L���u�+�����D$ �H�5��L����t�����D$ �H�5��L����t�c�����D$ �H�5��L���t�%�����D$ �H�5��L���t�A������֥1�H�5f�L��f�PH���
�@�ry���H�5f�1��
FA�t$�Y����{���ff.���SH��dH�%(H�D$1���ujH��1�H���`���tSH�DՔH�<$1�A�H��������D�1��%H��t]���ud�����t2��������`H�D$dH3%(uJH��[�DH�$H�H�8�#����CH��H�9��1�1�������@UH��SH��H��H����H���H��tA�8t<�w��H�;�����1����#��H�;H��1��'�������H����[]�f��zt�����AUATUSH��(dH�%(H�D$1�����H��1�H�t$���^�������u2L�l$M�eA�|$t!A�|$uA�D$����L����胫��I��H���gH�|$�M�H�T$�H���L���H��@HH���H��@LH���H�@�@8H���H�@�@Hǂ��'�H�T$�@�@H�������H�D$��+H���1�������H�D$1Ҿ)H���1����H�T$�'1�H������H�D$�+NH���H���1��h��H�T$�'1�H����P��H�D$�,NH���H���1��1��H�T$�'1�H������H�D$�oNH��H���1����H�T$�-'1�H�����������H�D$��[H���1�������H�D$�x�\H���1�����ٿ��H�D$��DH���1��|����u H�D$H�L$H�H���H�0�����tH�DՔH�t$H���!H�UH�D$H������]H�D$dH3%(��H��([]A\A]�@H���1�1����EH�E�DH�|$����EH�E띃��A�D$�ޠI�EH�D$�Ao$H�I�T$H�PH�D$H�8�v
��2H�D$H�8�GH��BL� A�|$��������n���ff.�����t1��@I���ATI��UH��SL��uH��u[1�]A\�DI��x�\�H��t��L���H���H��x1�[]A\��AWAVAUATI��UH��SH��H��xH�L$L�D$dH�%(H�D$h1�H��y����H��/'���H��i'�WH���M��
�H��+N�
��H��,N��
H��oN�7H���H�xH�?t(�VH���H��`ɔH�@�o"`�ojhL���~0H���I�$H�@H�H���H�@�@H1�ǃfDH�L$hdH3%(��H��x[]A\A]A^A_�DH��E�H��D��H��0�jH��)��H���.H����H���z�dH���BH�*�}t�}u�E����H����I�,$H�}H����1Ҿ~N1���H���1�1��o'��������H���1Ҿ)1��������H���M��H�*�}t�}u�E��� H���x�I�,$H���H�}H���	�@L1�ǃ����H��w'�sH��x'�>H�D$`I�<$�G<�]<��H�G�PpI��M���r1�L��L�l$X��
�Q�A�~t$A�~u
A�F����
L���m�H�D$XL�0I�6H�|$`����H�D$`H���r1�L���
1�L��L��������L�|$XM�7A�F��v����A�F虜I�H�D$X�AoH�I�VH�PL�|$XI�?�v
�.L�|$XI�?�GI��@M�7�-���DH��f'�[H��O'��H��]'�A��H��b'�nM�4$A�~t A�~u
A�F����L���W�M�4$I�>�kG���RH����I�$�zH��kH���H�‰�1��x����H��'�SH��&'����H��'��H�*�E�P�����<t�}u�E����H��貲�M���I�$�<H����P1���I�$��'H���H�1��پ���r�H��v'}H��q'��f.�M�4$A�~t A�~u
A�F���L���)�M�4$I�H��'��
H�����1��e��������������f�H��Q't�H��\'�\����@�H��N'�s���H��5'��H��7'����H��4'�L���@ǃ1��/����H�F�H��w�fDM�4$A�~t A�~u
A�F���
L��虫M�4$H��K���I�H������H���H���H��t�9u
�x���������H�w��1�1����H�D$�H�D$H���{���H���V����(���H�F�H���B�������DH��6��H��5�$���H��2��H��3����H�*�}t�}u�E����H��譪I�,$H���H�UH���H��t�9u�xt	H���OH����41��{�������fDH��\��H��[�����H��Q~H��P�|���H��K>H��J�l���H��G�b����5���DH��=�N���~,H��@�B�������DH��N�.�������f�H�F�H���������DH��T����H��U��H��Z�
������DH��k�.H��i����H��c�jH��b�����H��`��������f�H��c'������f���fD��H��'�M���H�D$`�wH�L$XA�L��A��H�������1��I��H�������1�H�T$`�H���SO��������H�T$`H�������H��'�
�QH��-'��H��5'�:���A�~`r��
H���H�x t	H�x �ML���(H���I�$H�B H�8�nH�T$`���@H��*'�������H��,'�
���H��-'����6���fDH��e�N����!���f�H��'�S���H���~2H��'�����H��'�0���H��'�������fDH������H������������H��e���H���������f�H��"'�������fDH��n�v���H��o�����H��w������]���DH��''�
���H��)'�X����9����H���H�8H�?t'�LH���H��`ɔH��o"`�ojhL���&H���I�$H�H�H���H��@H1�ǃ����fDH�*�}t�}u�E����H��腦I�,$H���H�}H����@H1�ǃ���@H���H�xH�?t(�JKH���H��`ɔH�@�o2p�ozxL���%H���I�$H�@H�H���H�@�@81�ǃ�2���f.��@H1�ǃ������@L1�ǃ����H�D$HH�D$PH�D$X<��H�EH��PpI��H�a�M������1�L��1��4H�D$@H�\$(H�D$H�D$`H�D$ �fD�{t�{u�C���H��谪H�L$ E1�E1�H�T$<H�t$XL���sH�D$@H�H��;@�/�T$<H�t$PH�|$HH��jHc@A�L�J��P1�jSjH��$��ó��H��0��1�L���H�t$1�L�������H�l$@H�]�C���7�������C臒H�EH�D$@�oH�H�SH�l$@H�PH�}�v�$H�l$@H�}�GH�E�@H�]�����H���~N1����H�ھo'1�H����׵������H�������L�'���LcpH��M��A����J�l3�H9��
H�����x=�FH��H9���H��;H)�H���U���H��H��u�I��A��	��J�l3�H9���H���D�x	=��H��H9���H��;H)�H�����H��H��u�I��H���<�������H����x�aD�L$<H�L$XI��M���rI�EM����H�t$PH�|$HH��A�j�Sj
PI�D$
jP1�j蝱��A�E;H��@��A�$;�����H�;filenamH9�/����xe�%���I����F�����8;typ������xe������I��H�D$@H�LcpM���������C� �H�EH�D$@�oH�H�SH�PH�D$@H�8�v
�2"H�D$@H�8�GH��BH��{��������f.�E1�����E1��.�����H�5r�H���\2�����������H�t$PH�|$HM���eH��A��H�L�jSj
PI�D$
jP1�j�(���H��@�����D���A�F��I�H�D$X�AoH�I�VH�PH�D$XH�8�v
�)!H�D$XH�8�GH��BL�0A�~�����H����1�1��%���H��'���A�~`ruA�~a+�dL����H���H�T$`H�H�P(H���H��@HH���I�$H�H�PP1�ǃ�R�f.�H�t$PH�|$HH��A�j�Sj
P1�jSj���A�E;H��@���(���DE1�E1�����DH�t$`H��@�o�H�����1�H�T$`花��� �DH�\$(������H�t$HH���,�H���H�T$H1��('�D�������H�C��1����D�H�5"�H���0�����I�$H��m��H���H������������@H��A��H��jSj
P1�jSj�ȭ��H��@������L�}�$������A�F賌I�$�Ao60I�VH��H�PH�� ��vH����I�$�@I�$�@M�4$��H���������E�S�I�$�o}8H�UH��H�PH�� ��vH���kI�$�@I�$�@I�,$�����E�I�$�ou0H�UH��H�PH�� ��vH���I�$�@I�$�@I�,$������A�F誋I�$�AoI�VH��H�PH�� ��vH����I�$�@I�$�@M�4$A�~���������E�H�I�$�ou0H�UH��H�PH�� ��vH���`I�$�@I�$�@I�,$�����A�F��I�$�AoI�VH��H�PH�� ��vH���I�$�@I�$�@M�4$A�~�����@����E萊I�$�o}8H�UH��H�PH�� ��vH���I�$�@I�$�@I�,$��@A�~`ruA�~a+�L���H���H�T$`H�@H�P(H���H�@�@HH���I�$H�@H�PP1�ǃ��L���<H���H�T$`H�@H�P(I�$H���H�H�@H�P0H���I�$H�@H�P@1�ǃ������E�~�I�$�o}8H�UH��H�PH�� ��vH���I�$�@I�$�@I�,$�}������A�~a+�Q�H����1�1��������fD��AUATUSH��(dH�%(H�D$1�����H��1�H�L$H��H�T$��}C�����H�DՔH�<$A�1�H�'������D�1��I��H����L�l$I�m�}t"�}u�E����H����H�D$H�(H�uH��~MH�T$L�CH��L���1���uJ�CH����CH�D$dH3%(��H��([]A\A]�@H�y��1�1��S��CH��fD����E�I�EH�D$�oEH�H�UH�PH�D$H�8�v
��H�D$H�8�GH��BH�(�����^���ff.���AWAVAUATUH��H�5�$SH��XdH�%(H�D$H1�H�\$H�L$ H���R������A�1ɾ����H��H�DՔH���D�1��aI��H����H�D$ H�\$8L�l$(H��L�|$0L�t$H�8�q�H�D$@H�$H�EH�D$�UDH�D$ H�4$E1�I��L��L��H�8����uvL�D$H�T$(H��L��H�t$0�l���umH�D$ H��H�8�H�H�D$ H��L��H�8�E���t��EH�EDH�D$HdH3%(u3H��X[]A\A]A^A_ÐH����1�1��k��EH�E��ء�����USH��H��H���H�(H�}8t&H�}0H��t
��H�E0H�E8H�E@H���uBH�{H��1�H�Hǃ�H��H)������H�ǃH��[]�H��x�t�Hǃ�����USH��dH�%(H�D$1�����H��1�H���?�����H�DՔH�<$A�1�H�e������D�1��9H��H��tZH������H����m�������ts��tnH���H�(H�}8t&H�}0H��t
评H�E0H�E8H�E@�CH��f.��@H�D$dH3%(��H��[]�H���H��JH��t��tYH�P�zHtw�CH��f�H�r8H����H�P�zHtQ�C1�H�=��贆�CH��}����H�z(H��t��B���H���H�PH���zHufDH�z(H��H��t����H���H��xH�d���눐H�z0H��t�7H���H�H�p8H�x0�s�)��CH����(������H��G8Bu<t1��f�H�H9�������H��dH�%(H�D$1�H�<$H��t@1�H��A������H�DՔH�N�D�1��'H��t�����t(�����H�D$dH3%(uH���f.�H�$H�8�4���]���ff.�f�����uXU�SH��HH��萄H��踙��H�}�1�H��HH�E�yH�@ՔH��H�ߋH��[]�C�=ff.���AUATI��H�5Z USH��8dH�%(H�D$(1�H�l$H��H��H���������A�1ɾ����H��H�@ՔH���D�1���I��H����A�1ɾ����H��H�DՔH��D�1��H��H����H��H�l$�W���H�D$����o)D$H�@H��H�D$ H�� ��w]I�}H���xA�D$I�}H����;���H�I�$H�D$(dH3%(u/H��8[]A\A]�f.�A�D$I�$��H�����葜�����AUATI��H�5�X USH��(dH�%(H�D$1�H�\$H�l$H��H��蓩�����H��A�1ɾ����H�@ՔH�.�D�1��H��H����A�1ɾ����H��H�DՔH���D�1��nI��H��tV���H�}H�����H���xA�D$H�}I�������H�I�$H�D$dH3%(u H��([]A\A]�DA�D$I�$���{���ff.���UH��H�5u�SH��(dH�%(H�D$1�H��H�\$H�L$H���D$H�D$1��d������1�A������H��H�@ՔH���D�1��s�H��tn�
��D$L�D$f/�se�H,�H��xnf��H*��Y�H�x1�1��,������E��uaHcD$H�EH�D$dH3%(uRH��([]Ð�EH�E��f��\��H,�H��?H��y�H�у�f�H��H	��H*��X��f�H�E������1������ATUH��H�57�SH�� dH�%(H�D$1�H�\$H�L$H���8������A�1ɾ����H��H�@ՔH�ӕD�1��G�I��H����H�\$�{t]�{uJ�C��vB����C�}H�D$�oH�SH��H�PH�� ���~�@H���@H���(�H�\$H�I�|$H�t$�D$譕��H�T$HcL$H��BH�
�EH�EH�D$dH3%(u4H�� []A\�f��EH�E��f�H���8H�D$�p����٘��f���UH��H�5cN SH��dH�%(H�D$1�H��H�������t=1�A������H��H�DՔH��D�1���H��toH���H��zHtH�D$dH3%(u]H��[]��H�r8H��t�H�z0H��t�7H���H�H�p8H�x0�u��EH�E�fD�EH�E����ff.�f���AWAVAUATUSH��HH�t$H�\$H�L$ H��H�5ГdH�%(H�D$81�H�D$ �פ����6H��A�1ɾ����H�@ՔH�r�D�1���H��H����H�xH�t$�̞��H��H����H�|$ H��t���HcD$�GH�L�|$H��L�d$(L���J>�M�L��H�5�t!�C�M�L��H�5Ό�CL��H���xH�D$0H��toI��DՔL�l$0L�=Q��(f�H�UH9���L��H����xH�D$0H��t2E�1�1�A�L�������L����H��u�H�D$�@H�H�D$8dH3%(�~H��H[]A\A]A^A_�D�H�|$ ����H�D$0H�8��E�1�L��A�H��������1��r��UH�|$H�5����H�D$0�H��F�n���������UH��H�5SK SH��dH�%(H�D$1�H��H���Ѣ���t91�A������H��H�@ՔH�p�D�1���H��t'H�$H�8�#�H�D$dH3%(uH��[]�@�EH�E���%���D��USH��H�/H��t$H��H�}�b���H�}�	sH���1yH�H��[]��ff.�@�ff.�@��1��f���������fD��H�G1�H�x(��0ff.�f���SH�_H�3H�{�˕��H�;胐��H�{躓��H�{�xH���x1�[�D��AWAVAUATUH��SH��HL�H�4$H�T$I�wdH�%(H�D$81�I�G H9�|AA�����uvDž�1�H�L$8dH3%(H���~H��H[]A\A]A^A_�@H��~�I�(1��p
I�(H�T$H�4$�I�(H���B
I�GH��t���H����I���M��HH�D$H�D$ M���H�D$M�gHI�L�D$L��L��L��蘉��A���H�D$(H�D$ ��yKI���@I�H���t���A������t�A���I�G ��xyI9G|YA����������L�D$��L��L��L��蚎������w�1����I����I�H���������t�����H�������I�w����H���q���I�wH9��d�������P�����H�GH�x@H��u1��@����H���H��tHH�?tB�2�Uf/�H��s8f/��L,�jsA�H,�P1�E1�1ɾ�X1�Z��fD1��D�\�j�L,�I��?f/�r��\��H,�H��?�f.���AVH��AUATUSH��H��dH�%(H�D$1�H����I��I��H��u	�?
�J�M�u�\u��L���@H���@�XH�$�xH�EH�$H�H�T��:
���@I���1�H��E1�A��H�8���
H�5�L���:�����u^I���H��t*H�?t$jE1�I�L$
E1�j1Ҿ�iAYAZDH�L$dH3%(H����H��[]A\A]A^�@�H�5��L���ē����uhI���H��t�H�?t�jE1�I�L$E1�j1Ҿ��_AX�fD�H�$H��hH�T��:
������H�$�h���@�H�56�L���D������<���I���H���,���H�8�"���I�|$�
1�豖��L��E1�H�I���jE1�P1��PI���Y^H������H�H������H�@ I���H�H�@(I���H��HI���H�������H�?�����j1�E1�E1�j1ɾ��XZ�q�����
������a������ff.����AVAUI��ATI��UH��SH�� H�YdH�%(H�D$1�H�s H��tZH�{(1��oH��H�{(L��I���,H�{(H���@H�C H��H�L$dH3%(�2H�� []A\A]A^����fr�@�@H���H�D$�oH�RH��H�PH�� ����I��`�H�L$�H�5c�I��������uXH�T$H�D$H�
�ytJ�I�@�HH�:�v�MH�T$H�D$H�:�oH�@H�GH�|$��q�CDH�D$H�L$H���@E1��@I����A�jH�5ĉ�d�XZH�s ���f�H����#����>���ff.���AW��AVAUM��ATI��UH��SH��8dH�%(H�D$(1�H�D$�q1�H�xH��H��H�H��H��Hǀ�1�H)�������H�H���G�H���L��H��H���?�x��H��"���� 1�ǃ�H�C�X5L��H�C(�sH�;�'H��H�C1��6���H�;�+N1�H�U���� ���H�;H��'1�����H�;�oN1�H�}������H�;H��-'1����H�;�'1�H����Г������H�;1Ҿ)1�躓������H�;�XN1�H�����蟓��H�;H��I'1�荓������H�;1Ҿ+1��w���H���H�;�"'H�P H�7j!H��HD�1��O���M��t;�H�5·L��趎�������H�5�>L��蚎������E1�H�3H�{L����|}����"oH�EP�@H�EP�@H�}P�62��n�@H���@H����2H���H�}P�H�5� �B��n�H�5}�f�PH�S(H���@HcRpH�H�}P��IBf�H�{L���Ԇ��A�ƃ��t�L�d$ L�=1h!�����H�{L��贑��H��t/�x��t��3x��L���1�H��1�A��苲��f�E����M��tH�;1Ҿ''1����L�����H�L$(dH3%(H����H��8[]A\A]A^A_�L�t$H��L��L��H�5��r��uH�D$H��x�7L��H���H�5ۅL���C��uH�D$H��xuH�8����[�H�;1ҾQ1��
���L��H���H�5��L������uH�D$H��xuH�8��D��H�;1Ҿ@1�躐��L��H���H�59�L�����uH�D$H��x�3L��H�>#L��E1�H�5��o��uH�T$H�:�G<��<�'L��H���H�5΄L���6��uH�D$H��x�,L��H���H�5��L�����uH�D$H��x��L��H�҄H�5p�L�������@H�T$H�2�V�������A�H���H���H��t�:u
�x�b���H�;1Ҿ41��t���L���@���!���L���1�H��1����H���M��tL���c���1��s���@L�t$H�ƒL��L��H�5��
��uH�D$H��x��/�H�;1ҾQ1��ގ��L��H���H�5ƃL������uH�D$H��x�����1�H�;�@1�E1�薎������H���H���H��t7�:t2��H�;1Ҿ41��b����H�;�D1��N���M���7����xu��{�H�;�1��4�'������E�f.H�;������T1�������L� H�5��"L�����������H�5��L���ۄ������H�5��L���Ą���������H�;�1��/蓍��L��H��}H�5�L���z���R���H�D$H��x�@���H�H�;�'1��N���H�D$H�;�<H�HcP1��3�������fD�w������H�?A�E1�1�1�L�d$ �s)
L��H�5�!H��H�D$�,���I��H����L��L�$�tt��L�$E1�1�A�1҉�L���))
L��H��H�$�
t��H�$I��H���hL��H�5�!1��ʕ��I��H��u�H�|$��hM��� ���H�;L���''1��]����	���H�H�;�"'1��F������H�H�;�'1��/����9����e�H�;�1��Q���������G�H�;�1��@���4���H�8�5�������-���H�8������H�;�1��Q貋������L�&I���R������H�D$ H�H�t$L�d$ H�4$H�8�V��@H�D$H�4$H�H�8�|�H�D$H�$L��H�H�8�u�������H�D$ H��xu�H�0L���r��I��믋N���b���L�&E�,$A�U���vA�� u*B�4!f�I��E�,$��D)�A�U���v�A�� t�A�U�L����H���>�WЀ�	������~
A��0��A�
@��0u
H���>@��0t�WЀ�	��A����A��
����~��������~�7�����L��D��1��f���I�������T1��-��������c�H�;�1��4�������H�;L��4'1�����`����.�H�;�1��,�ډ���������߃�A���Y�����������H���>�!���@A�T$A�
��߀�X���~A�H������@��.��������@��Eu)�NH�V��+��u
H�NH��H�����0��	����������H�~�H�5=~�(���������A��-�d�����������W���H�|$�_e�������D��H�H�GH�GH�GH�G H�G(�ff.����
��H� ���Hc�H�>��@H��4��H��}��H��}��H��}��H�SI!��H��}��H�~}��H�s}��H�h}��H�\}��H�T}��H�J}��H�@}��H��|��H�������H��� 	H�|n H�5}1���9%	H�
�H�5}1���%	H��|H�5�|1���%	H��|H�5�|1����$	H���R 	f����'O���SH�=d
J���=EA�ع1ҾH�=�|��1�[�ff.���H������D1�H���f.�ATUH��S��H��0dH�%(H�D$(1��=��t'9�tUH�A��H��9�t@�H������u�H��t��uaH���H�t$(dH34%(�5H��0[]A\�DH�AH��tՅ�tщ�H��H����1�)�Hc��:l����H���DI��H��{1�� L������L��H����1�)�Hc���k��y�H��
H����������!�%����t������D�H�JHDщ�@�H�        H����Hc�H)�H�H�H)�H�H�������"H��t� ���$�D�H�����H��H����������!ʁ ��t����€�D�H�HHD���@�H�        H����Hc�H)�H�Q�H)�H�H��s$����H��t� �����D
����H�xH�0H��H�t�H)�H�H��H��r�H��1�H�4H��H9�r��H�zH�2H��H�t
�H)�H�H��H������H��1�H�4H��H9�r������    �D�    �r����    �D
�    ����f�D
�  �����  f�t��D����$|��@��ATUSH��dH�%(H�D$1�����H��1�H������t|L�$$I�$�{t�{��H���qH�$H�L�#H�
S�H1�1�D������H��E��x_H��tZ�8tUH���
k���ƉE����H���hb�EH�E�fD�3H�D$dH3%(��H��[]A\�fD�EH�E��f��C���X�������C�$_I�$H�$�oH�H�SH�PH�$H�8�w�GH��BH��������H�$H�8��f�H�5���1��-��u�%����z��H���L�D$@L�L$H��t7)D$P)L$`)T$p)�$�)�$�)�$�)�$�)�$�dH�%(H�D$1�H�vI���$ H��$��D$0H�D$H�D$ H��H�D$H�9�HD��T�H�D$dH3%(uH������y���SL��M����L��1�I��v)fA�:��t(1�H���uH���H�
ow����[�A�z���u��A�<�H�Pu�I9�v�L�@
�f�H�JH��I9�v�H�BA�L����u
L9�u��[�@I9�v�I�D�fA��E��M9�r�M��M)�I9��w�����@��wI��I��A����uBA��uL�I9��j����F���D1ۉ�[�H�
{�H���1�1���������I������I��I9������B�R�f��f������H���H�������AWA��1�AVAUI��ATI�Ժ USHc�I��H��H�H���� H��(�pHc��]Hc� L��H��(H��H�H���	H�E�^D��D�}H�E���A	��� H��[]A\A]A^A_���ATUSH��dH�%(H�D$1�����H��1�H���i���t|L�$$I�$�{t!�{u�C����H����rH�$H�H�;E1�1ɺH�5�$��
H��H��tT1�H����H��Lc��z
E��t5�EL�e���H�D$dH3%(��H��[]A\�fD�EH�E��f�����C��ZI�$H�$�oH�H�SH�PH�$H�8�w)�GH��BH��{�)�������f����H�$H�8���mv��ff.�f�1�H��t,H��t'�?t"���H�P�|�t
H��H9�u��@��������D��@Ή7�ff.�AWAVAUATI��USH��H�H��t�!ZI�|$xH��t�ZI��$�H��t�ZI��$�H��t��YI��$�H��t��YI��$�H��t��YI��$H��t�YI��$�H��t�YI��$�H��t�YI��$�H��t�YI��$�H��t�pYI��$�H��t�^YI��$�H��t�LYI�|$0H��t�=YI�|$8H��t�.YA��$�I��$���~21��H�[H�<�H��t
�XI��$�H��A9�$��H��tH����XI��$(M��$A�D�s�H���~~1��,f���Bt�H��t@H�xH��t�XH�H��9k�~NI��I��J�:H�xH��t�mXH�J�:�Hf��w�L��H��H���8t��xw�H��9k��@H��tH���+XH��L9��^���A��$I��$��~31��H�[H�|�H��t
��WI��$H��A9�$�H��tH����W1�L��D�H�H���[]A\A]A^A_�f�ATUH��S9�~IHc�H��1�I��H�v�H��H�|�XH��H�DH��L�d1�[]A\�@H��1��1�L�͉H�
�P!�I����������f�ATI��UH���SH�ӺH���WH��H��I�$H����k����C[]A\�AWI�׺ AVI��1�AUATI��USHc�I��H��H�H���� H��(�pHc���WHc� L��H��(H��H�H���H�E��XL��H�EH����xtF�a��1�1�L����苞
H�ED����A	�$�� H��[]A\A]A^A_���sXH�E��ff.�f�AW��AVAUATUSH��H���H�|$(�t$0�L$dH�4%(H��$�1�����Lcd$H�t$(I�D$H�4$H������I��1�H�D$�D$4I��D$�F@M�}H���`��A��PM���ZH�<$E��L��H���('H��A9�$ ��I��I��M�$(I�YM��H����E�uE����A�Mf��w��H��8�M�}��l���M��H���LD��|$��H��H���_��H�<$L��H�ލPA��$A9�$ �_���D�T$0����H��$�dH3%(�aH���[]A\A]A^A_�H���_��H�<$H�ލP�A��@�L$H��$�H��#1��@H��D�y�D�|$���H�<$E1�H�
��H����%���DA���������H�D$@I�uE1�H�\$H�D$ D��M��A��A��teI�FJ�4�f��w8H�=�Hc�H�>��f�A����HcH�|$L���(I�FJ�4�I��E9���A�NA��u�f����H�=��Hc�H�>��D�F�1�H��LH�|$ �@芿A����H�T$ H�|$�L���I*I�F�~���A���NH�\$H�t$H���^��H�t$H�<$�PHcH���-�`�����A��t$H�|$L���Y)I�F����f��ZA��u�H�\$�D$ H���]���D$ H�<$H�ލP� ���DH�\$ �H��K1�D�F�@H��蟾H�|$H��L����j)I�F�������Q�@H���@H�D$��A�M����@��Q�@H���@H�$�Lcd$I�D$H����������fD�|$�w�H��H���\��H�$H�|$(H�ލP�$����L�d$8M��I��H�l$1�fDI�D$H��H��H�H����%A9��L��M��L�d$8I�F���fDL�|$@D�F�1�H��J�@L��H�\$�j�����DHct$4H�<$�L���^�'(�\$4�v���H�\$A���g���H����[��H�L$H�<$H�ލP�#$�F���fDL�d$8M��I��H�l$1�fDI�D$L��H��H�H���%A9��L��M��L�d$8I�F����fDH�\$H���k[��H�L$ H�<$H�ލPA�� ������k���UH��H��SH��H���L�D$PL�L$X��t:)D$`)L$p)�$�)�$�)�$�)�$�)�$�)�$�dH�%(H�D$(1�H�|$H�L$1�H��$�D$ H�D$H�D$0�D$0H�D$ ��H�|$H��tH��H��H�߾�a���H�|$�7OH�D$(dH3%(u
H���[]���j���AWA�׺AVI��AUI��1�ATUH��SH��D�'H�}E�D$Ic�D�D$�&PIc�D�D$H�RH�EH�����H�EH�DH�EH�D1�E�M��t1ҾL���OH�UD�<H�UH�DH�EL�lH��D��[]A\A]A^A_�ff.�����9����A�Љ�H��}H��Hc�H�>��fD���f��*��@�f��f��E����E��*��DD���x�f���H*��@H�D���\�f�A��E������f��*��@�f��f��E����E˜�*��@D����f��*���H�D�����f�A����t�H�����f�f���*��A*��^��f��Z��f��H����f�f�ɉ��I*��H*��^��ff.�@����A�Љ�H��|H��Hc�H��H�>��f.����f��E������HE�H���DD���(�H���@H�D����A��1�E��t�H����f�f���A*��*��^��
%df/���H,��@��$�$/����$�\��H,�H��?�c���D��V���H���cH�$�$f/�rv�$�\��H,�H��?�$���fDD���P������f�H�D���4�A��1�E�����H����1�A������@H�������H,����fD�H,����fD1����f��\��H,�H��?���D1��DAWA��1�AVAUE��ATI��UHc�SI��H��H�H��(�� H��(H�T$� �pL�L$Hc��LHc� f�H�|$H��(H��H�CfD�;fD�kH�D$H�C�C�C��LH�CA��wH�
�zD��Hc�H�>��fDA�fD�L�D$M��tDL9D$hryH�|$`��H����x��H�|$`H�T$1�D���L�
H�CH�D$�CD����A	�$�� H��([]A\A]A^A_��L�D$L9D$hs�L�L$h�f.�H�|$H��t�L�|$`�L|$hH���}Ic�H�
�{Lc�L;L$h�MH�L$`A�U�L�[E1�H�l$I��H��H��L�d$L��yI���H��vH�EN��A��	��Ic�L�>��fDH�t$H;t$hwLH�|$`tiH�|$`�Z�H����H�D$�z��H�|$`H�T$1ɉ���
H�C����L�L$hI��H�
ab�L��1�H�=mb���CH�=y���JH�C������t$pH����A��t$pH�y��A�CH�|$I��L�H��L9��L��H)�L9���H�l$L�d$H�
b�L��1�H�=�a�*�����D�t$pH����A�H�|$�f.���T$p��f������EƘA�H�|$�j���D�A$�AH�|$�P����A$�AH�|$�8�����|$p��f������E�A�H�|$����fDH�|$`D���JH�C�B���f.�H�|$`����IH�C�#���H�l$L�d$����f�1Ҿ�GH�|$H�CH��H���b������f.�����t$H��tH��H��t�������vÐAWAVAUATUSH��H��`�I��Hc�H�l$����H��h��L�qxH��H�FL�L"@�A���HHc�H�HO�H�� I9�u�I��H��H���xGI��I��H�<(H��H���m��E�^pI�E����H�tvH�A��`E�Np��f��E��E�H��
f�C�E��`E���NH��H�l$(E1�L�=CvH���D$6H��H���D$7H����H�D$8DL��A�vpH��I�h�H����f=��f=���yH�
Nw�<��|$�}�|$ ������C�EA�Np�ԅ����S�C�uA�VpH�����H�{��A�Fp��H��v�D$0�ED��D�UE��D�T$$I��L�\$IC�1��ME��}I�Ņ����uL�\$f���.f���$D�T$$A���=f���H��D�D$01�f�����H�M��tH�MH����f��	w(��Ic4�L�>���	��f��E��E�H��f�J��}H����H9�sK�u�DHc1H��E����H����HcqH�z��@�}H��H����H9�r�fD�l$�l$ ���6A�Fp����H�t$H�{�D�Hc�H�|$L��I�H���jk��Hl$L���mC���H�	H�
���1E��ud�2�H���}����@�	�
��f.��1H��E����H�����qH�z���!���f�Hc1H��E��t�H����������CE�FpE�����C�CA�~p�����C�C�C�CA�vp��tzH�t$(H�{�4�H��I��E9�`����H��H[]A\A]A^A_�f.�H��CH���SH��H��H��@�s�S�-���@�S�C����D�D$6�C�D$7�C
�D$8�C	�D$(�C�o����C�C�C�C�A����C�C�����S���fD�S��{���fDH�T$H�ЈSH���CH��H���C
H��H���C	���DA�E�C���@H�uL��L���Ii�����@�:�I�J�k���f��tf��u$�EA�E�h����H��qH��$����H��D�D$01�����H�l$���fDAWH�
AVAUATUH��SH�^H��(��H�t$H�$L�D$H�D$H9��H�D$E��D�OpI��D� D��E����C�dH�|$��Hc�H�TH9T$��E1�H��D��I��E��u�{��I��D9�tlH���HA��	tA��
H���HH�
��HHD�PL��L��E��jL�D$H��H�T$�#Y^��u�1�H��([]A\A]A^A_�@f��D���V���A���C�dH�|$��H�H�TH9T$v,�upH�|�W�����xH�L9�~0H�
�Y�DH�
�Y�H��H�=�Y1����i���H�$L�D$L��H��A�H�4�h������C��������tzH��H��tnH��H��tb����tXH����H�F�H=����L9���H�>I9���I)�L9���H<$�AH��H�����H��(�[]A\A]A^A_��D�D$D+$AUE��A��H��H�=�X�D�H�
MqP1����_AX1�H��([]A\A]A^A_�1�H�
�X�H��H�=Qq�l����7���1�L�Yq�1�H�
�7!H���C�������1�H�
ZX�1�H���!�������AWI��AVAUATUSH���H��$H�T$L�D$(D�L$H�D$dH�%(H��$�1�����d��I���wp��I�̉����A�]A�mI�}��A�ƍE����"��H�YoLc�D��L��H�D$ ��M��I9��@M�UI����A�wpL����H�L$A��N�M9�wL��L)�L9�r	M9��1I�GI9�w!L)�L9�rA�G �P����X���OM9��&H�L$����L�D$H��$����AUL�D$H�
�pI��APA��1��L��H�=�V���AZ1�A[��A�]A�mf��f����������E1�A���ȃ��|$A���o�D$����������}�����	����������J��������A��I����L��L��L�T$��L�T$H��H���fI�F�L��H9��|
��=L�T$I���I�|*��=I���I���1�I���I��1�H��U��L�T$�	fDH�L$H��$��������H��A��L��UI��H�
�n1��H�=U���]A�X����DH�
9n�L��H�=�T1�����1�H��$�dH3%(�)H���[]A\A]A^A_ÿHc�H��L�T$����L�T$H���H�=b��L�T$�=L�T$I�GxH��L�T$�E��L�T$A���DA��H�L$�@��L�T$H��$����A�WpH��E���L��RH��AVL�T$0ARL�L$@�t$0���H�� �M������L��D$��9�D$����DL��H)�L9�w	I9��d���I�GI9��L)�I9���A�G �P���v����fDL�D$0I�� �11ҾL����9I�?H�D$8���L�D$0I�?1�I��L����I�?��L�D$0L�T$8I9���M���'L��L�D$H�D$�
9L�D$H�D$�H�L$H��$���������H��A��H�
�lI��j�5����I��A���r�������	������	�K���������6���A�WpL�׉�L�T$��L�T$I���������������L��L�T$A���:L�T$I�G0���fD��i��,�&��%����������f�A.GDA������������A�WpL�׉�L�T$���Y�o�6X��f��L�T$�
͹�^��Z��AoD�U���f������L��������������|����������ILJ�D��A���fL�х���������������Hc�Hʀ: �v����p�1�H����H���< �W����H9�u��I���@���������A�WpL�׉�L�T$A���~�f��L�T$�Z��AW@�i���fD����T���f�A.G@A���E����?���A�WpL�׉�L�T$�)��Y9n�YY���V��f��L�T$�Z��Ag@���@����L~Z����f�������A�WpL�׉�L�T$A����L�T$�,��������H��f��Hc�H�>�����������A�WpL�׉�L�T$A�����L�T$I�G`�c���H�L$K�,����H��$�L�D$�n��AT�L��UI��1�H�
�iAVL�D$(H�=ZOAPA���o��H�� 1��{���@I�?f�H�D$`)D$`)D$pH�D$8��L�D$0I�?1�I��L����I�?�s�L�D$0I9��-M��H�
�iI��L��1��1����1�����H�UNICODEM�gxI9�GH�ASCIII9��I�:JIS��I�:��A�F�L���c���H�\lI�GH�6���H�\lI�GH�&���H���I�GH����H�4lI�GH�����������A�WpL�׉�L�T$�A�L�T$I���������������tȁ������A�WpL�׉�L�T$��L�T$I������@H�t$8I�?L��舼I�?1�L��H�D$0�&�L;t$0wTE1�L�T$8�E���f�I�?L��L��L�T$8�M�I�?L��1�H�D$0���L�T$8M��L;t$0����M��tL���K31�L�h�1�H�
�,!L���L��1��\���DL��L�T$A���p5L�T$I�G8����f�A�GD��A�����A��
�����H�
\M�1�1�L��L�T$����L�T$���DA�WpL�׉�L�T$A���b�L�T$�AGX�U���f�A�WpL�׉�L�T$A���:�f��L�T$�Z��A_l�%���f�A���I���1ɺL�T$�pHc��3A���L�T$A����I���A���Hc�H�RL�d��Ic�H��A�\$��I�T$A�����f���$���������%��)����E1Ɂ�i���A�wpL��L�T$0�9����H�D$H���L�L�T$0H9���L�D$(H�T$L��L��L�T$0�n�������A��L�T$0����f�D�t$0L�%4�HH�=�K�L$@�l$8L��A��L��H��tI�w0H�����S������H�}H��tI�w8H�����S������H�}H��t�E 9D$0|Hc�H���}<������I��D��I��L$@�l$8E�L$$A���A�F�D9��Ic��� H�D$0M�A�GpA���D$8A�D$(���0�����t$8���#A�f����A�D$,���V����A�D$$��A9���I�{
L�T$���Dk�A��A)���E9�L�T$��Ic�D��L�D)�H�D$�I���P��A9��;D��)�D9��������A�Hc�I�S�l$XH�@L�l$@H�l$(I�D�L�t$PI��H�D$0I�3�\$\I��H�\$L�T$H�@I��L;t$0�%A�4$L��H��A�
jL)�I��L��L���>�ZY��u�L�l$@M���O�L���/1��B�H��0H� �HH9�t�H�}����A�G �P����C�A���A�WpL��D��L�T$���L�T$I���w�@E���E���c�ALJ��H�
3I��E��H�
]c�L��H�=oH1�����?������1L�T$H��I�Gx���L��L�����L�T$Hc��<���D���V���A�GpA�1�����L�T$�m0L�T$I�����L�T$L���O0L�T$A�~�I���I�J���D��L�T$����ɄA�A���
�����A�
A������A�	A������A�Gp��-���L��L�T$��/D��L�T$��I���u1���I�rHc�L��L�T$���L�T$���l$XL�T$HL�l$@L�t$P�\$\�D$8A��A�Gp���L�T$H�=nG����L��L�T$�G/D��L�T$��I���t�I�rHc�L�����L�T$�n�H�D$0Hc�E��L��H�
bH�=�FL��1�����f����DH��VA��A��H�=wFAVH�
�a�1�L���~��_AX�3���E��H�
�FL��1��H�=<F�V������E��H�
7a���f�AWAVAUI��ATUSH��H���T$dH�%(H��$�1�H�+�HH�D$��	t��
H�7�HH���HHD�H�D$��d��L�CM�MM9����H���#H���|��H�;1�L��A�ljD$P�Ic�H�;�H�@L�4�H��L�t$J�t0��H���kpJ�D0����D� fA��E��C�dL�C��Lc�O�L5L�t$@M9���t$PL��H���S��A�Dž�tl@E1�H��$�dH3%(D����H�ĸ[]A\A]A^A_�f�H�
aa�H��1�1�����fDD� �`����H�l$H��I�V�H�;H�t(H���/�L��D�SpI�)D��H�iJ�|5������D$XE����A�D$�L�t$ H�t$`E�ЉD$\H�@A�H��L�l$0M��H�D$(1�H�t$HI��D�|$T�f�L��D���u��Ic�H�=�[��A�ƒ��-A������A���!�EA��fA��E��A��D��DE�M��A�����A����A��u	D�s$DH�D$I�I��L9l$(��H�iL�D�}D�eE��tfA��fA��E��E��L�UA��
�"���H�L$H�t$H��D��L�T$8����H��E��H��ATI��H�
p^1��1�����L�T$HD�CpL��D���N��AZA[����A��L��H�D$I�H�}D���"��H�t$0H�|$ ��H��I�H�I9�����H9���I)�LD�I��L�T$ L9l$(�	���L�l$0H�AE��L�CD�|$TL�I9���H�D$ H�L$@H9�vZL�I9���L�t$ �t$PH��L���Q��������H�L$@H�t$L��H��H�;H)�HL0H��蒰L��D�SpD�d$\L�t$L�l$(D��K�dA�H�,��h��������%�t|��JttH+T$(�t$H��E1�jH��D�L$,H�L$0�a�ZY���_����I��I9���L���spK�T1J�<"���f������D�A�́�i��p���A��i��C�MA��%��HA����I��A�
H���Z����D��H�߉�����a����A�����A����-����1����A��	��H�}�
��Lc�A�����I�������D��H��l������H�D$�C,I�����A��������EA��fA��E��A��D��LE��t���fDH�
a\�;���@H�D$D�s(I����fDL���:���@H�}�O��A���%����A��Ju
��A�H���!����D��H�߉��M����|$�"���A��J�������������H��H�������H�������������H������1Ҿ�%H��H�;1�H���i�H��H��H�;裭H9���H�������y���f����A�������A�	���H�AL�CL�L9��D@�t$XH�����|$�����H������H����H����H��H����������1Ҿ�$H��H�;1�H���^�H��H��H�;蘬H9���L��V�1�1�H�
E!H�����H���#HǃH�����DA����D�C,����@H��M��H�
:Y1��t$(�H��1��U��AXAY�G���@I��H�
VYH��1��1��-���#���L�!V�1�1�H�
�!H���	�������>��H������M���f�AW�DE1�AVAUATA�ԺUH��H�5��SH��H���dH�%(H��$�1��H��Cp����H�����H�H���1H��H9��H�{��H���-��H��E1�L�C1�1�H���X	
H��`ՔD��ǃǃ�H�}H���y�d$H�}H���H���H�K$H�}H���H����2$H�}H���H�����$H�} H���H�����$H�}(H���H������#L�CH���ǃ�C I���9H�;1�1�L��$��ͳH�;�L���
�H��t?H�;1��8�H��$�dH3%(���@H���[]A\A]A^A_�D��$���r1�H�{H�;v�I�t$�蟩H���%��$�II*����$�MM*������$��C �CpΉ��H���V�Ņ���H�;��-����1��H���ɲH�;豲H�;1�1�H�C豲����@H�
�;�1�1�H���0�������1�H�=��"�n���D1�H�=ӎ�"�=���D1�H�=���z"����D1�H�=���b"����D1�H�=���J"���D1�H�=s��2"�y���D��$��������C �A�#�H�;�X�A�ƃ��tBA�����������A�#A���t�H�;��A����A�ƃ��u�L��9H�
�!�1�1�H�����1�H�
b:�1�H��1����H�;���DH�
O:�H��1�1����H�;�f����H�T$0H���n7����� ����D$H%�=��H��$�H�CH�D$`H�C���H�
�8�1�1�H���H������A����������'���H�
�T�H��1�H�=�8����H�;�N�H�;H�D$��A�Ń������H�;�ͧ��������E��D$A��A	�A��E��D�L$�����H��H��L��D��H��H�|$ H�D$(�^��L��H�H�@I��D�D$L�xE�/I�OM�l$�E�GH�;H��L��H�L$��H�L$D�L$I9��qA��@�����>wJH�5�MHc�H�>��SpH��I��A��H��RH��>PQ���������H�� ��t�E���p���D��A��u�A�����H�5qNH���'������I�L$�M�WH���-fA�II���CpH����E�G
I������A��*��������H9��A��I�4H�D$L��D��A�H��L�@����KXf��f.�z�(���H�S`H����f��H*��YCHf���^��Z��[P������H�;����p����
�L�cH�t$(�#H�|$ I)�L���o��H�;L��H�Hk�H�H�p�3�I9������L�P�W���H��H��H�L$���H�L$H��I���e����CpRM��A�H��6�H��PAUQ�����I�EH�� I9��,���I��I�L��L��L)��?������H��I��P�CpA�H�&:PAQAW���H�� ���1�1�H�
�5�H��赻���������������A�GA�OA�Wf����f���C$1��������S(�C,���DH�
5�1�1�H��1��N���H�;��1���@��1�I�|$�C �Cp藿�����m���H�
�5�3����������������c����5��H�
SQ�H��1�1��Һ�����AUI��I��H��AU1�H�
�P�1�諺��^_���H�
�4�fA�MMu.�CpH��v�E�G
�fA��E�����H�
e4�H�
z4�u���H�Ѓ�f�H��H	��H*��X��@���H�
�4�K���ff.���AT�DI��U��SH��`dH�%(H��$X1�H�\$0H�D$H�D$H��H�D$ �H��E���v	����H�L$H�T$(H����H�D$(H�5X4P1�L�L$(L�D$ �oAZY���tFH�t$(�H�������tH��$@H��t
H��$0H��uHH����A�D$I�$H��$XdH3%(�H��`[]A\�����ϐA�t$�A�D$I�$����H��$ tH��$(u$H��蕹����uHDŽ$(HDŽ$ H�|$�w~H�|$�wcH�D$�@H��$ H�H�D$�@H��$(H���tH�|$ �w�G��$H�H����������k�H�|$ ��@�[��f��K��x����2�����AW���DAVAUATUSH����|$H�l$`H�t$H��dH�%(H��$�1��H��B����i	�|$1�H�L$@H�T$8H�t$0L�L$PL�D$H������<	L�d$0I�$�{t�{u�C����
H���-�|$�xL�d$8I�$�{t"�{u�C����H���g-H�D$8H�H�H�|$X1�1�H��1�W�H�D$Xf�H�����t�� u��,H�����u�1�E1�L��$�A��D��谰��H��1�@L��H��1��'�L�d$XL��L������D��D������	�H��D�A��A��u�L���s�|$��
L�l$@M�eA�|$t&A�|$uA�D$���aL����&H�D$@L� A�$�|$�D$��
L�l$HM�eA�|$t&A�|$uA�D$���xL���&H�D$HL� A�$�D$�D�D$1��D$H�D$0�T$H��E1�E1�H�H�0���D��$x�D$DD��A���|���H������E�dE��A��u�Ic���E1���E1�I����fDA��A��tCE��s�D��A���$���D��H�0D)�Ic�H��1�Hc�L�蔀L���L��Lc�A��u�A��~C�D���$x�T$L�l$X����$x���]��t���QH�|$��H�L$hH��tH��M1�H���ļ���L$p1�H��/H���߶���L$x1�H��H�v/�ʶ����$�1�H��H�e0貶����$���H��tH��H�X01�H���]���H�L$XH��KH�e0H��H��HD�1��9���D��$�E��~`D��$�E��~SH�
�.H��H��1��������$��H��H��/������$��H��H��/�����$�H��.�H�������$��������$�f��.�������$�.�������$�/�v^�7Jf��Z�/��V�"JH�
n.�H��H�n.��^�f���Z��X��D,����f����$�.�������$�.�����L��$�M������$�H��$�1ɺ �D$,��$��pHc���Hc�$�H�=.H��$�H��H�����D$,�C�H�CH����x���t$,H�T$,1�L���\Y
H�C�D$,�CH��$���$x��$�H��t	�9�H��$ H��tH��-�H�����H��$(H��tH��-�H���ɹ��H��$0H��tH�x-�H��訹����$8E1�1�L�-�tH��~F�H��$@1�1�L��L�L�0�x�C���M��tL��H�¾H���[�����I��9�$8�L��$`M��toD�|$E���H��$PtH��$XuH���ұ����$HH��H��,�'�����$H�{�H��tH��H��,�H���ϸ��H��$PtDH��$XH��t7H��,�H���Ӳ����$P�H��H��,踲���H�|$XH��t�QD��$�E��t�t$H�|$1�H���1���D��$�E��tH�|$�H���
���D��$�E��t�t$H�|$�H�������$���t�t$H�|$�H���ɸ��D��$�E��tH�|$�H��襸��D��$�E��tH�|$�H��聸��D��$�E��t�t$H�|$�H���^���D��$E��t�t$H�|$�	H���;�����$ ��t�t$H�|$�
H��������$��t�t$H�|$�H�������$0��t�t$H�|$�H���ط����$@��t�t$H�|$�H��跷����$P��ulH���d���H��$�dH3%(�oH���[]A\A]A^A_�H���0���H�|$XH��t�a
H�D$�@H������띐�t$H�|$�
H���*����y���D/���H�
�)�H��H�`+�Z����=���fDH�)�H���$����N�����D,�1��H��H�
�(H��(覼��f����$�/��Q������H�
�(�H��H��(�Z��d���f����$�.�z�������$��H��1�H�
k(H�i(�^��YD�Z��X��D,��	���f�����H�
t(�H��H�g(�Z��ܻ��f���
���H�
<(�H��H�(谻��f�����������C�`I�$H�D$0�o#H� H�SH�PH�D$0H�8����GH��BH��{���|$����`����H�
�'H��)�H���5����_���H��A�H�������$�H��#�PAQ��$��̿��H�� ����H�z'�H���߳�������ŜH�D$0H�8�E�����D$�D$����Hc|$,���Lcl$,L��H�CH��L���=��H�CB�(�>�������C�
I�$H�D$8�o+H�(H�SH�PH�D$8H�8�v
�!�H�D$8H�8�GH��BH��{�����f����A�D$�	I�EH�D$@�Ao4$H�0I�T$H�PH�D$@H�8�v
譛H�D$@H�8�GH��BL� �>���A�D$�=	I�EH�D$H�Ao<$H�8I�T$H�PH�D$HH�8�v
�L�H�D$HH�8�GH��BL� �'���$��f���SH��Ք��H�=�IH�H�@H�@H�@H�@ H�@(H�@0��A��1ҹ�H�=�@�D�A�ع��
H�=�@�&�A�ع��
H�=�@��A�ع��
H�=y@��A�ع��
H�=e@�̷A�ع��H�=T@讷A�ع�c�H�=D@萷A��1ҹ�H�=7@�u�A�ع��H�=*@�W�A�ع��H�="@�9�A�ع��H�=@��A�ع��H�=@�A�ع��H�=@�߶A�ع��H�=�?�A�ع��H�=�?裶A�ع��H�=�?腶A�ع��H�=�?�g�A�ع��H�=�?�I�A�ع��H�=�?�+�A�ع��H�=�?�
�A�ع��H�=�?��A�ع��H�=�?�ѵA�ع��H�=�?賵A�ع��H�=�?蕵A�ع��H�=�?�w�A�ع��H�=�?�Y�A�ع��H�=�?�;�A�ع��H�=�?��A�ع��H�=�?�A�ع�	�H�=�?��A�ع��H�=�?�ôA�ع��H�=y?襴A�ع��H�=s?致A�ع��H�=k?�i�A�ع��H�=c?�K�A�ع��H�=\?�-�A�ع� �H�=U?��A�ع�@�H�=O?��A�ع���H�=H?�ӳA�ع��H�=G?赳A�ع��H�=G?藳A�ع� �H�=D?�y�A�ع�@�H�=A?�[�A�ع��H�=@?�=�A�ع��H�=>?��A�ع��H�=:?��A�ع��H�=6?��A�ع��H�=3?�ŲA�ع� �H�=&?觲A�ع�@�H�=?色A�ع���H�=?�k�H�=D�?�1�[�ff.���AUATI��US1�H��I�� R�L��H�uL���4����t0��H����u�H��ՔH�@0H��1�[]A\A]��Hc�H�[IcT�H��ՔH�P0H��1�[]A\A]�ff.����H������1�H���f.���SH��胾H�| H�5�?1���9��H�+>1�H�56>��芾H��[�ѹ�SH�������tG�����u;H����~7H��ty��H�l?H��cu31��1��E1�[�@H��t{ H����H��tHH��t#1�[��H��t"}�H��Ք[H�@ �H��Ք[H��@H��>��H��Ք[H�@��H�=9��H��ՔH�@H���e���H���[�f.�H��Ք[H�@��H�=�蟗�b���f.���USH��H�5� H��8dH�%(H�D$(1�H�L$ H�T$L�D$�H)���t#H�|$���H��H��t�@<��<t1��CH�H�D$(dH3%(��H��8[]�f.�H�EH��PpH��t��D$H�t$ �P�E<te1�<uH�EH�t$H��T$�PpH�t$�T$H���sj���{����CH��v���H�}H���[����D$H�t$ �P���(��H�}�f���AVAUATI��H�5�USH�� dH�%(H�D$1�H�L$H�T$�'(���t<I�� R�L�t$1�L��H�}L���!����t@��H����u�A�D$I�$H�D$dH3%(u.H�� []A\A]A^�f�Hc�A�D$H�[IcD�I�$���c����H��t'H��H���
1��D!��H� ՔH�H�B81�H���H��ՔH�@8�1��ff.�H��H�� R�1�L�OL��DLcI9�t8��H����u�1�f�A�9t?��I����u�foH�WH�P�Hc�H�RH���oH�RH�P�DHc�H�RH���o
H�RH�P�ff.�f���SH�àՔH�{tH�{�4�H�CH�;tH����H�H�{tH�{��H�CH�{ tH�{ ��H�C H�{tH�{�׳H�CH�{(tH�{(迳H�C(1�[�����uHATH��UH��S�H�� R�L���H�3�H��H����L9�u�[]A\�f.��K�ff.�AUE��I��ATI��UH��SH��8dH�%(H�D$(1�L�T$L���-����D$��u
�L������I�$E��t�C���+�C<�m<uC1�H��L��H��T$ H��t�E�P���v3H�D$(dH3%(��H��8[]A\A]�@H���8I�$�f�I�$�JA���#��u�<�_H�EH��PpH�ǺH�5L8�f��t��U���@1���u
H�EH��PpH��H�L$�H�58�d���K���H�D$H�I�$�o
H�RH�PI�<$�v	�T�I�<$�GI�$�@�	���@����C��I�$�oH�SH��H�PH�� ��wY�@I�$�@I�$�C<�����H��蒷H���t8I�$�C�t����������H�:���������H��訌I�$�f�I�$�@I�$H��U����H�}����H�}�������f�AWI��AVAUATI��UH��SH��H��HdH�%(H�D$81�H��x��H�8�Av(H�D$8dH3%(�;H��H[]A\A]A^A_�DL�t$0E��L���WjH�D$(H�D$I�H�t$L��H�8�k��u�L�T$(I��zu�B��wp�zt:E��L��H��H��L������I�L��H�8�8j�fDE������R���f�H�E��L��H��H��L�׀@A���H�D$(H�H��hA�@���L�T$�BH�T$��L�T$H�T$I�H�D$(�oH�H�RL�T$(H�PI�:�v
��L�T$(I�:�GI��@I��!����|��ff.��AWA��AVI��AUI��ATM��USH��H��HdH�%(H�D$81�H���zH��P�������a�o)D$ H�@H�D$0H�D$ ����H����	H�T$ I�m�EI�������~H��1�I��<�
E�����E���}�}H���pA���|�@�H�D$8dH3%(��H��H[]A\A]A^A_�DH�l$H�8�H�5$!H���$`��uPH�D$H��P�����o)L$ H�@H�D$0H�D$ ��vH��H�D$�R�H�D$H����L�t$ H��J���@1�����H��H�5zP�_��udH�D$H��P����o)T$ H�@H�D$0H�D$ ��vH��H�D$�ψH�D$H���BL�d$ L��H
A��LD�H��J����1����>H��H�5:��
_����H�D$I�mH��EI�����{�HE�<u?@A���!���E��H��L��L��L������B���f.�H�/�E<t�A��t|E��tO�E��vG����E�I�E�oe H�UH��H�PH�� ����@I�E�@I�m�}��A�����E����E��H��L��L��L�����A����������I�}H���oH�GH��H�CH�� ��vH���+�I�}�C�C�v	�A�I�}�I�}H���,������I�m1��E������EI�EH���@H����I�mA��t�����fDI��1����fDH��H�D$苆H�D$�0����H��訅I�EA��������@I�EH��{���H�BH��PpH�����fDH�BH��PpH������fDI��1��
���fDH������H�:�j����H�:�����L� �����<tDE��H��1ҾL���������f�L�0�h����H��蘅I�E�����E1��M�������E�0�I�E�om(H�UH��H�PH�� ��vH���H�I�E�@I�E�@I�m�/����������SH�ĀH�t$H�L$HH�T$(H��H�5h/dH�%(H��$�1�H�D$8H�D$@H�D$@P1�L�L$@L�D$4�ZY���t=H�D$0H�����H��	H�������H���„�t5H=t-H�D$�@H�H�D$xdH3%(��H��[�H�|$(��H��H��t�@<��<tNH�D$8H���`H�8�G<tH�t$<�x�F�f�H�H�t$��t��FH��s���H�CH��PpH��t��D$$H�t$H�P�C<�D1�<uH�CH�t$H�߉T$�PpH�t$�T$H��H�L$@�*Z���T���H�D$@H�H�D$�oH�RH�|$H�P�v
�f�H�|$�GH�T$8A���GH�t$0H�|$�w������f�H�D$8H��xuRH�8H�L$X�H�5ɍ�Y��u5H�D$XH��xu'H�8H�L$`�H�5i-�nY���fDH�t$���fDH�;H���v����D$$H�t$H�P���H�?H�L$P�H�5�I�Y���O���H�D$PH��P�����oH�\$`)L$`H�@H�D$p��vH���F�H���H�\$`H�D$8H��x����H�8H�L$X�H�5Ό�X�������H�D$XH��x���H�8H�L$`�H�5f,�kX������H�D$`H�H�D$�oH�RH�|$H�P�v
见H�|$�G�G����H��Q����5��H�;����ff.�f���H��8H�t$H�L$H�T$ L�D$H�5�+dH�%(H�D$(1�H�D$H�D$������H�D$H�T$H�����H��	H�����@��H����@��tH=uyH�D$ �oH�@H�|$ H�B�wJH�D$H�T$H�|$A�H�t$��@�@����H�D$(dH3%(u(H��8�fD�{��f��BH����
��ff.�AWAVAUATI��H��USH��hH�T$dH�%(H�D$X1�H����H�H���@<t@<�(�BH�H�D$XdH3%(��H��h[]A\A]A^A_�f.��z���Ao$I�D$H�GH�|$����GA�1�1��GH�H�|$H�0���fD�zwb�Ao$
I�D$H�BH�T$�zw-�BH�|$1ɾ�BA�1��q��/���@H��� H�T$��f��;~H�T$�@�~H�|$�L�����~H�|$������˯H�1�H�l$8L�l$HL�|$0H�8L�t$$�*]H�H��H�8�]H�D$(H�D$H�D$@H�D$�'fD�T$$H�t$(H�|$�m�H�H��H�8�]H�H��L��H�8�^���Y���H�H�t$E1�I��L��L��H�8�J]�����T$$����H�L$H�t$(I�<$�T���y������H�T$@H�D$PH��oH�RH��H�PH�� ��v
H����}H�D$P�@H�T$HH�|$P1��@A�H��������H�L$P�T$$H�t$(H�|$�	�����@H��)1�1���/H�|$�v
�|H�|$�GH��I���fDH��)�����f���UH��H�5�'SH��HdH�%(H�D$81�H�L$H�T$H�D$�����tZH�D$H��t
H��x��H�|$��H��H��t�@<tN<tjH�D$H��tH�8�G<��<���EH�D$8dH3%(�!H��H[]�f.�H�;t�H�t$H��H���
������H�CH��PpH��u���H�H�����H��	H�������H���„��9���H=�-����EH�E�_���@H���I����EH�E�<����H�?H�L$�H�5 C�GR������H�D$H��P��t6�oH�\$ )D$ H�@H�D$0��vH���z{H����H�D$ �{���H��s������ff.���SH��H�5�%H�� dH�%(H�D$1�H�L$H�T$H�D$H�D$����t H�t$H��t	H��xt$H�|$H�����H�D$dH3%(u?H�� [ÐH�H�����H��	H�������H���„�t�H=t��CH���C����AWA��AVAUATUH��SH��hL�D$dH�%(H�D$X1�����H��&��I��Hc�H�>��@H�$A�E1�1�A�E���lH��ՔH�}D�|$(�D$4H�y0��H�D$ D��H�D$��H��ՔH�|$E1�H�D$ H�D$�@�@H�Q8H�q01���M��tH�<$H�t$ L��� 	H��t	H�<$��E��tDH�\$H��t�D$(�H�}�d��t$(����H�|$ ��H�E�|$4v
H�|$ �yxH�\$XdH3%(D����H��h[]A\A]A^A_�I�ĠՔI�\$H���;H���L���DL��E1��=�H�}D��D�|$HH�$�x�L��H�t$@H��H�D$@E1��D$T�;E�������1�H�=�U�D$(�<��D$4H�D$ ����DI�ĠՔI�\$ H���sH���L����h���I�ĠՔI�$H���H���L��h�A���f�I�ĠՔI�\$H����H���L��p�����I�ĠՔI�\$H���[H���L��xM������L����E�I�<$L��PD��A��-u	A�FI�N�p�@��	ws��M�T6�A�:uf��v<0t]L��H)�H��Q��H�A��0Hc�I9����ID�Y�A��	w-D��0H�4�H��Hc�H�4qI9����D�Y�A��	v�L����OE1��%��������H����8tE��tOD����H�D$ �7���DH�=�S�,�H�E�y���E1�E1�E1�1�H�$����H�T$(1�D����,
H�D$ ������F�H��H���k��C�CI�\$�{���fD���H��H���;��C�CI�\$����fD����H��H�����C�CI�$�������H��H���ۦ�C�CI�\$ �c���fD���H��H��諦�C�CI�\$���fDA��-tH���a����lQ�_���A��-u�H��H���D���H��������f.�AVI�ֺAUI��ATI��USHc6H����Mc$H��M��t~L��L��H��I�1������%�@��wH��u	@�t=H��H��L9�t�1@��y�H��t�H��L9�u�H�D=���I�}��I�mA�$[]A\A]A^�f�1���ff.��AVAUI�պATI��UH��SHc6H����LcUI��M��tVH��I�E1�H��f��:I��I�|�tI��@�9K�I��H��I9�u�D��A�I�<$��M�4$�][]A\A]A^�I��1��ِAWAVAUATUSH��xLc.H�|$H�t$(dH�%(H�L$h1�E����H�/J�D-H�$H9��7H�D$@I��E1�1�H�D$H�D$_E1�I���������H�D$ fD�UA�<H��uzM���aL�KM9��I�L�ˈH��H9,$u�A��M��tA�H�D$H�(H���4�H�D$L� H�D$(D�(H�D$hdH3%(��H��x[]A\A]A^A_ÐM���?L�SM9���L�&#f�H�D$�u�D$_H�X�H��H��H��H��I��H��H��H�H)�H�ȃ�0�H��	w�L�\$ I)�M����O�M9��~K�<L��H��L�L$�J���L�L$I�YL9���M�A�;��@H���1�L��L�L$�b�L�L$L���H�I���EL�����1ҾO1�A�N�,��I���EL������I��M�FM���I���1�1�L�\$���L�\$I��H��M��L��H��L�L$�|�M��L�L$�)���1ҾO1�A�N���I��I������f.�I���L��1�L�L$M����s�L�L$I������fDH���L��1�L�T$�J�L���L�T$I��H�����L��I���1�L�\$8L�T$0M���L�L$�	�L�T$0L�\$8I��L�L$J�<����fD1ҾO1�A�N���A�I��H������OA�N���E1�E1��9����0�����AU� ATUH��SH��L�kH��dH�%(H��$1�I���L���H�tH��L��H������@�ŀu
�D$"�D$'@��@t�D$&@����@�� uvL��L��H������sH�;E1�A�1�1��S
�CH��t(H��$dH3%(��H��[]A\A]��{�������C�@fo�D$A�$�A�$�A�$�A�$�A�$�A�$�A�$�AƄ$��0���fDfo()$)D$����f.�H���8n���b����C1�H�=�K���CH��������fD��ATUSH��H��dH�%(H��$1�@��tH��H�w�9���H��H�H�׺a�H��f�GH��H�HA�G�@�H���H9�u�Hcs����H�;LcCH��H��I�H��L9���L�
��1�%�1H��H��@����A�1�B��q���A�1�B�I9�t�1�<4u�H��@�2H��I9�u�A��A)����H�+D�cH��$dH3%(uH��[]A\�f�E1����6���fD��AU� ATI��UH��SL�mH��dH�%(H��$1�H���H���H�tL��L��H�������A�� �D$>fo�D$<�D$"f�D$&)$)D$u1H��L��H�����H��$dH3%(uOH��[]A\A]�f�D$��������������ƃ���<���ff.����AUATUSH��dH�%(H��$1�H��tM�GH��H��~jI�� L�m1�L���H�@��up��@t�D$&��uy�� ��L��L��H�����H��$dH3%(��H��[]A\A]�D��tх�ùv�j�E�fDH��H��L���R�����@t��fo�)$)D$�q���f�fo�D$A�$�A�$�A�$�A�$�A�$�A�$�A�$�AƄ$����������H��hI��fo*�dH�%(H��$X1�H��DŽ$P@.[]H��$T)�$fo�H��Ƅ$T)�$fo�)�$ fo��H�H��$�a)�$0fo�)�$@���H��H��H9�u�I�pL�����H��$XdH3%(uH��h������H��xI��fo:�dH�%(H��$h1�H��H�]`<>#%";DŽ$X/?:@)�$fo
H��H��$^H��$P�&=)�$fo�f��$\1��H�)�$ foH��$Ƅ$^�a)�$0fo�)�$@�
fD�H��H��H9�u�I�pL����H��$hdH3%(uH��x������H��(I���dH�%(H��$1�H��H�+-012345DŽ$6789H��$H��1�H��$�H�Ƅ$H��$�+�
�H��H��H9�u�I�pL����H��$dH3%(uH��(��0���H��(I���dH�%(H��$1�H��Ƅ$H�+-012345H��$H��1��H��+DŽ$6789H��$H��$�
�H��H��H9�u��tHDŽ$p�� tHDŽ$`��@u,I�pL��� �H��$dH3%(u'H��(�DHDŽ$(HDŽ$(��1���U1�SH��H���wH�?dH�%(H�D$1�H�T$�
H�;H���6��D$H�+�CH�D$dH3%(uH��[]����Hc�H�H9�sq��HЀ�	wfE1�H�OE�˃�0H9�vXD�GE�P�A��	wa��H�OA�D@�H9�v8D�GE�P�A��	wA��H�OA�D@�=�H9�v���0@��	w1�ÐIc���A��u�1�H9����B��I��t�9.H�yu�H9�v��AI���HЀ�	�U����f.�AWAVAUATI��USL��H���g��I��H��H�D$�
f�H��H��L)�L9�sb��L�8H�I��fA�Gu���H�=o���H��u�A��%uGH9l$r@H�CA�DGt3H�CA�DGt&H��H��L)�L9�r�H���[]A\A]A^A_�H��1�[]A\A]A^A_����AWAVAUATI��UH��SH��HdH�%(H�D$81�H����H���R��t1���uH�CH��PpH���DH�;L�|$�
H�5�L���;���$H�D$H��P���R�o)D$ H�@H�D$0H�D$ ����H��A��A�L�l$ �S����1���u
H�CH��PpH��L���
H�5'�;����H�D$H��P�����o)L$ H�@H�D$0H�D$ ���	H�����L�T$ A��U�}����L�E��A�0@�� �PHc�A�D�< w3I�.I��s#�B�H�fDA�L��€� wH��I��r�@��0uZ�B�A��tA�H��߀�X�!L�������u`L9�}E��uVI9�}E��uL@��vH���b�EH�]�O@��I�@��+��@��-��L9�v�F�<�#fD@��vH���bbA��t)�EH�D$8dH3%(�H��H[]A\A]A^A_�f��EH�E��f�E1�E1����D�SE1�E1�����H�;�*���DH�.�@A�0@�� �����H�������I����u��J���f.�E1�E1�E1�E1��8���I�@H9��"���A�p�Vπ�����A��������H��H�D$�4bH�D$���H��H�D$�bH�D$�D���I�HH�H9���A�@�HЀ��������0I��1�H��������H��f.���0I��H�H9��~���H��L9�����A��p�@��v��_���I�@H9��R���A�p�Vπ��A���E1��L�@I��M)�I���%����^���Hc�L9�������@�PЀ�	vO����f�H��������H���������H)�H��H��H9�����H��H�FL9��h���A��PЀ�	�������I����0Hc�E��t�H��L�H�gfffffffI��I��?H��L)�H9��w���H��H�H)��L�A��f���L�(A�����I�@�J�H�H9�szH��������I��1��(fD��0H�H9�����H��I��H�H9������A�@�L��D�H�A��	v�D�H�A��w��WH��L�����D�H�A��������7H��1��_�����f.���ATI��US�WH��H�/�����E< w'H�.f�H��sH�����}�E< v�Hc��D�< w9H�.H��s)�B�H�@�L��€� wH��H��r�f.���w+H�
t
��Hc�H�>���E<1��<0��@A�|$w&��u[]A�D$I�$A\�[]A�D$A\�L���*^��t���H�5�H��1������u�A�|$vL���]I�,$[A�D$]A\�H��H�5Q�����t��e����H�5.H�����H�5����u��딺H�5CH���f��H�5v"���^�����1��c���f���AWAVI��AUATUH��SH��8D�oH�dH�%(H�D$(1�E�����< w,H�.�H��sH��A�����< v�Ic��L��� wBI�.I��s2A�E�H��L�A�ŀ� wDI��H�p�sH���L�A�ŀ� v�L�$H��tM�J����1���u
H�BH��PpH��H�L$�H�5�
��3��uH�D$H��x�!A�.A�EHc����I��H��I9�v��HՁ���I��A�A�A�� L9���f���A�<	��L��H��H)�D��H�)ÐH��D��J�H��H9�tl��q�@��	v�΃��@��EtoA8�tjM��tp�΃�@��,t��'u`E����A��A������uHH�XE1�L9��s���H��H��E1�f.�I9���H���΃��@��Eu�E��uoA��tiL�����A�~vL���$[��t<A�FH�D$(dH3%(��H��8[]A\A]A^A_�@A�����]���@A�FI���8D8�������߀�E�GH�HH�r@�:I9��-�xD�G�A���A�G�<	�I���@H��H��@�~�I9����9�G�<	v��!���H��E1�����A�~�!�������H��I�UA�E�����xH���D�:����H�p�.H�J�xI9��#D�G�A��	�
L��H)�H�f.�H��@�y�H�F�~H9�����D�G�H��A��	vډ���߀�E�q���H�����H�:� ���1�1�H����A�~�X����K���H��H��L9��-����L)�I�׉օ�����A�EL��P���wDH��D��)�B�48��H���v�< t�PՁ���H�\$ H���9�WЀ�	����~<0���
H�A@��0uH��H�D$ H���x�@��0t�E1��G�<	�=����Hc�L�$��
��A����L9��W���1�H����A�~H��vL���vXf�A�F�H*��AL�����?���H������H�HH�r@�zI9������x���@��.����A��0<	����Hc�L�$H�t$ H���CL9d$ �����f�ɺf.���E„�t
I����f(��SfT
�Hf.��~���A�~vL���D$�W�D$A�F�A�,���H�KH�L$ �t���H��A��H�L$ A���^Hc�L�$��
�J���H�t$ H���+L9d$ �����E���H�5�4L���D$���D$H�������=����C�
���<X����H�A�H�D$ �yH�����H���$���H��H���
���A���o����y�7�$����`���@��.��������@��Eu-�yH�A�w�@��u	H�D$ H�A���0<	�o���H�L$ L9��6���A������H�y�H�5l�T$���T$�������u	�;-�����1�H���r�5�������߃�A<�����Hc�L�$�l������9�;���@��AWAVI��AUATUH��SH��XdH�%(H�D$H1��D$H�D$H���>H���R��t1���uH�CH��PpH���@H�;L�l$�H�5{L����,A�ą��IH�D$E1�H��xu	L�8A��S���51���u
H�CH��PpH��L��H�5[�,��u9H�D$H��P��t(�oH�\$ )D$ H�@H�D$0����H���5�E��t`H�T$H�t$L����#��H��tyj�ME1�E1�1�H��H�T$DRH�U���ZY��xTH�D$HdH3%(��H��X[]A\A]A^A_Ð1�1�H���k�}wA��t#�E�fD�}v�H���BTA��u��EH�E��SE1�E1�������H�;����DH����T�����v��fD��AVAUATUH��SH��D�g�e��C<u-�sD9�tEH���S��t!�C[]A\A]A^��<w��u��CH�[]A\A]A^�H�;�H
I��H���TL�(M���@H�5I�L�����M�f����H�5��L���������M��uY�H�=�L�������t?�H�=�L�������t%�H�=T�L������������tI�~(����tI�~0��I�~H��t	����txI�~H��t	�
���tf[L��]A\A]A^�VfDM��tKL���c��M�,���A�$H��Pt,M9�vG�I��M9�t7A�$H��Hu��-��v�L����{�Q����D���f�A�}�.�%�������U��H��H�5,SH��H��dH�%(H��$�1�H��$p�{@H�D$H���D$�H���~Y�{w;��u+�CH�H��$�dH3%(umH�ĸ[]��C��f�H���HQ��t���fDH�T$H�t$H���6 ��H��t�j�KE1�E1�1�H��H�T$RH��C�ZY��y��g����s����AVAUATUH���:SH��H�� LcoL�'dH�%(H�D$1�L��L��M�����H����@��tqL��.L������H���pI9�r��H��I9��3�x�:u�I��D��H��H��M)�D)�����t*A�U����]Lc�A��%���t��{vH���P�����CH�D$dH3%(�-H�� []A\A]A^�f�L��.L���0��H��t�@����H��D��L���c���t�������$��
�o���=��l=����D$=��J�����@�\������T����|$�I����&���fD�CH��.������ �c�������A�K�,I9�����A�$L��E1ɀ�:�O�H9�������H��H��1��f.�����y�@��	v�σ�߃�A@����H���~H9�wԃ��s���A����A	�E��E���\������tD�{~>L�#�H�=�L���?�����/����L��H�=���#����������@�"���D�cA���N��A����H��H�5��H������������H�5��H��������������f.����������H9�������:�����D�ǃ��n���H�pH9��a����H��:tI9��O���A������E���7���A���-���H��H9�����A��M���DE���%���A����A������L�+�L��H�=������������L��H�=�������������A�������L��H�=���������������D��@������$���q���=���=���=���=�����ui�D$D$�P����|$�E����"���f.�H��D��L�������������������D$���������@�������-����������@E1�A�<$:A���J����H�;�H�5t�����@�D$�������������|$�������e���D�|$��p����M���DL�+�H�=�L���9�����)����L��H�=�������
����L��H�=���������L��H�=~>����������A�������	L��H�=����������������D$�c����D��@��ATUSH�� H�|$dH�%(H�D$1�H��tH�Ӿ1�H������uL1�1�H�	���o�
H�|$����GH�D$dH3%(�RH�� []A\��1Ҿ��w�L�d$H��1�H��H�D$L��A�H�EH�`�I��H��8jj�~�ZY����H�D$H�T$H��H��twH9����xv�IH�T$H�D$�oH�RH�|$H�P�G����H�T$�zwY���G�B�B�%fD�kIH�|$�����H�|$�w�GH���	����@�;IH�|$��@H���IH�|$H�T$�G�f��˷H�T$�~����L���Xn��q�����S���H���1�H�=7�b;A�ع��
H�=����K�gA�ع��	H�=l���fA�ع��H�=W���fA�ع��
H�=D��fA�عH������H�=.��fA�ع1ҾH�="��yfA�ع��
H�=��[fA�ع1ҾH�=��@fA�ع��
H�=��"fA�ع��
H�=��f1�[���H�?�5@��H����rH��H�5��1���wH����r��SH��H�5�H��0dH�%(H�D$(1�H�L$H�T$H�D$L�L$ L�D$H�D$ Z������tCH�T$ H��~S�t$H�|$�43H��tgǀ@!�7�KH��H��ǀd!�5H�D$(dH3%(u?H��0[�@H���1�1��
�CH���fD�CH�����fD��SH��H�5�H��0dH�%(H�D$(1�H�L$H�T$H�D$L�L$ L�D$H�D$ Z������tCH�T$ H��~S�t$H�|$�D2H��tgǀ@!�G�KH��H��ǀd!�4H�D$(dH3%(u?H��0[�@H�)��1�1��
�CH���fD�CH�����fD��UH��H�5αSH��(dH�%(H�D$1�H�\$H�L$H���
����t[D�
��K1�1������A�H��H��� 4H��t%H�L$H��taH��t;H�V��1�1��
�EH�EH�D$dH3%(u;H��([]��E��@!������H�E����EH��8!H�E����f.���UH��H�5�SH��8dH�%(H�D$(1�H�L$H�\$H��H�D$H��P1�L�L$0L�D$��ZY���tOD�
��KH��1�1�A�H��������3H��H��tZH�T$ H�t$H���2��t*�EH�EH�D$(dH3%(u6H��8[]��H���H�#� �1��
�EH�E��#����ATUSH��H�5��H��dH�%(H�D$1�H��H���/����t]D�
��KH��1�1�A�H��������E2H��H��tmH���%6I��H��t=H���%����ƉC��x\L��脴�CH�H�D$dH3%(uUH��[]A\�@H����1�1�H�:� ��
@�CH��H�5	%�1��Q�s��#����UH��H�5��SH��dH�%(H�D$1�H��H���1����tED�
��KH��1�1�A�H��������G1H��H��tIH���g7��t#�EH�EH�D$dH3%(u/H��[]�H���H�c� �1���
�EH�E��c����UH��H�5�6SH��(dH�%(H�D$1�H�\$H�L$L�D$H���e����tJD�
��KH��1�1�A�H�G�������{0H��H��tUH�t$H���6��t*�EH�EH�D$dH3%(u6H��([]��H���H��� �1���
�EH�E����ff.���UH��H�56SH��(dH�%(H�D$1�H�\$H�L$L�D$H�������tJD�
�KH��1�1�A�H�g�������/H��H��tUH�t$H���&4��t*�EH�EH�D$dH3%(u6H��([]��H���H��� �1��>�
�EH�E����ff.���UH��H�5#5SH��(dH�%(H�D$1�H�\$H�L$L�D$H�������t:D�
1�K1�1������A�H���H���.H��t.H�t$H��H���3H�D$dH3%(uH��([]���EH�E�����D��ATUSH��H�5p4H�� dH�%(H�D$1�H�l$H�L$L�D$H��������tXD�
�KH��1�1�A�H���������	.H��H��tiH�t$H���4I��H��t4H������C��xUL�#�CH�D$dH3%(uSH�� []A\�DH����1�1�H�� ��
@�CH��H�5� �1��uM�����ff.���UH��H�5c3SH��(dH�%(H�D$1�H�\$H�L$L�D$H��������tJD�
q�KH��1�1�A�H���������,H��H��tUH�t$H���V4��t*�EH�EH�D$dH3%(u6H��([]��H���H�� �1���
�EH�E����ff.���USH��H�5��H��8dH�%(H�D$(1�H�l$H�L$ L�L$L�D$H�������t{D�
��KH��1�1�A�H���������,H��H��tN�L$H�T$H�Njt$ ��3��tH�D$ �CH��2�H���H�3� �1����
fD�CH�H�D$(dH3%(uH��8[]����f���AUATUSH��H�5��H��8dH�%(H�D$(1�H�l$H�L$H�D$L�D$H��H�D$ �������D�
��K1�1������A�H���H���+H��tlH�T$H�L$ �t$H��H��HE��3H�l$ A��H��t+L�d$A�|$weH���͵��A�D$��xlI�,$H�D$�@E��t�CH��D�CH�H�D$(dH3%(uJH��8[]A\A]�f.�L���h;L�d$H�l$ �@H�5��1��EJL�d$�w������fD��ATUH��H�510SH�� dH�%(H�D$1�H�\$H�L$L�D$H�������twD�
?�K1�1������A�H���H����)H��tlH�t$H���<I��H��tWH���glI�4$H��tL���H��H���H�3H��u�L���7�H�D$dH3%(uH�� []A\�fD�EH�E������D��ATUH��H�5�zSH�� dH�%(H�D$1�H�\$H�L$�D$L�L$L�D$H�������t}D�
E�K1�1������A�H���H����(H��tr�T$H�t$H���;I��H��tXH���hkI�4$H��t L��@�H��H���H�3H��u�L���7�H�D$dH3%(uH�� []A\�fD�EH�E������D��ATUSH��H�5PyH��dH�%(H�D$1�H��H��������t]D�
[�KH��1�1�A�H����������'H��H��tmH����*I��H��t=H���Ų���ƉC��x\L���$��CH�H�D$dH3%(uUH��[]A\�@H����1�1�H�ڠ �t�
@�CH��H�5��1��MG�s�������AUATI��H�5��USH��HdH�%(H�D$81�H�D$0H�l$H�D$0H�\$PH��H��H�D$0P1�L�L$L�D$0��Y^�����D�
(�KH��1�1�A�H�~�������&H��H�����Q(A���9(H��H��1�AUA��H��� 1�A�������r&H��XZH����L�l$(I�E�H����D��@!H�t$0E����H����
A��H�T$ D��H��H���<9��t0A�D$I�$H�D$8dH3%(��H��H[]A\A]�H���H�;� �1����
fDA�D$I�$��E1�H���u���H���tN1�H����7D�D$0�[���f.�H���1�1��k�
A�D$I�$�N�����1�H���7H���i7H�D$0A�����@H�D$0������D��AUATI��H�5n�USH��HdH�%(H�D$81�H�D$0H�l$H�D$0H�\$PH��H��H�D$0P1�L�L$L�D$0�r�Y^�����D�
��KH��1�1�A�H�N�������$H��H�����!&A���	&H��H��1�AUA��H��� 1�A�������B$H��XZH����L�l$(I�E�H��wuD��@!H�t$0E����H�����A��H�T$ D��H��H��Hǃ\!�%B���}H�A�D$I�$H�D$8dH3%(��H��H[]A\A]�f�H�A��1�1���
A�D$I�$�E1�H���y���H���tF1�H���5D�D$0�_���f�H���H��� �1��F�
A�D$I�$�b����1�H���a5H���I5H�D$0A���	���@H�D$0����u���D��UH��H�5�kSH��(dH�%(H�D$1�H�\$H�L$H���z����tMD�
�K1�1������A�H�Z�H���"H��t;1��|$H��@����+��t$�EH�EH�D$dH3%(uH��([]Ð�EH�E��载��ff.�f���AUATUH��H�5��SH��HdH�%(H�D$81�H�L$H�\$H��H�D$8H�D$8H��PH�D$8PH�D$$P1�L�L$@L�D$(��H�� �����D�
�KH��1�1�A�H�e�������!H��H����L�d$(I�D$�H���Y��@!H�D$0����H���u	H�D$0I��H�|$�H�*jH�5�2HE�E1�1��=SI��H���iL�D$0H�T$ L��H��D���)4�L��t5��O�EH�EH�D$8dH3%(�\H��H[]A\A]�D�OH�|$����H���H�� �1�1���
�EH�E��H���(���I��H�|$�H�زH�5��HE�E1�1��eRI��H��t]H�t$0H�����1�L���t2L�D$0����f.�H����1�1���
�EH�E����f.�H�|$(H�|$�H��hH�5y1HE�E1�1���QI��H���k���H�L$H�.������1�L����1L���1I��H�D$0�`���������AUATUH��H�5��SH��HdH�%(H�D$81�H�L$H�\$H��H�D$8H�D$8H��PH�D$8PH�D$$P1�L�L$@L�D$(���H�� �����D�
O�KH��1�1�A�H����������H��H����L�d$(I�D$�H���)��@!H�D$0����H���u	H�D$0I��H�|$�H�jgH�5"0HE�E1�1��}PI��H���9L�D$0H�T$ D��L��H��H�H��\!�x<Lc�E���4A���r�EL�eH�D$8dH3%(��H��H[]A\A]�H���X���I��H�|$�H�H�H�5J�HE�E1�1���OI��H��t]H�t$0H����1�L����/L�D$0�>���f.�H�!��1�1��{�
�EH�E�P���f.�H�|$(H�|$�H�1fH�5�.HE�E1�1��DOI��H���k���H�L$H���1�1����
�EH�E���D�L���KH�|$�A���H���1�1�H�0� ����
�EH�E���@�L���sK�|���fD�1�L����.L���.I��H�D$0�������ff.�@��ATI��H�5rmUSH��dH�%(H�D$1�H��H����������D�
w�KH��1�1�A�H���������H��H������D!��t{��\!H�Dž�t^�;Hc�t*��`!��u��uH����1�1�H�
� ��
A�D$I�,$H�D$dH3%(upH��[]A\�@�8Hc��fDH�)��1�1��[�
A�D$I�$�H��P!��J�k���f�A�D$I�$���蘶�����UH��H�5!SH��(dH�%(H�D$1�H�\$H�L$L�D$H�������tAD�
!�K1�1������A�H�u�H���H��t6�EH�t$H����2H�H�EH�D$dH3%(uH��([]���EH�E���ݵ��ff.�f���AUATI��H�5��USH��XdH�%(H�D$H1�H�D$8H�l$(H�D$8H�L$@H�\$ PI��H��H�D$8P1�L�D$,��^_�����D�
8�KH��1�1�A�H����������H��H�����aA���IH��1�H��AUA��H��� 1�A�������ZYH��H����H�L$0H�A�H������@!L�D$8���~I�����H�t$@H��H����.��t0A�D$I�$H�D$HdH3%(��H��X[]A\A]�H���H�S� �1����
fDA�D$I�$�M�������I���tiL��1�H��H�L$��*D�D$8H�L$�\���H�1��1�1���
A�D$I�$�V����H�D$8E1������H�t$@H��H�L$�0H�L$Lc�M��L�D$8x��m���E1����衳�����AUATUH��H�5��SH��HdH�%(H�D$81�H�L$H�\$H��H�D$8H�D$8H��PH�D$8PH�D$$P1�L�L$@L�D$(�{�H�� �����D�
��KH��1�1�A�H�U�������H��H����L�d$(I�D$�H���	I��H�|$ �H�?`H�55HE�E1�1��OII��H������@!L�D$0����I�����H�t$H��D��L����,�L��t7��E�EH�EH�D$8dH3%(��H��H[]A\A]���EH���1�1�H�
� ���
�EH�E뫐M���q���I���tiL��1�L���(D�D$0�T���f.�H����1�1��K�
�EH�E�T���f.�H�D$0E1��	����H�t$H���K.Lc�L�D$0M��x��w���E1������k���ff.���AUATI��H�5a�USH��XdH�%(H�D$H1�H�D$8H�l$(H�D$8H�L$@H�\$ PI��H��H�D$8P1�L�D$,�B�^_�����D�
ȰKH��1�1�A�H��������RH��H������A����H��1�H��AUA��H�h� 1�A�������ZYH��H����H�L$0H�A�H��wu��@!L�D$8����I�����H�t$@H��H��Hǃ\!�
6����H�A�D$I�$H�D$HdH3%(��H��X[]A\A]�f.�H���1�1��k�
A�D$I�$�M���w���I���tqL��1�H��H�L$�w&D�D$8H�L$�P����H���H�s� �1���
A�D$I�$�J���H�D$8E1������H�t$@H��H�L$�,H�L$Lc�M��L�D$8x��e���E1������!������AUATUH��H�5�SH��HdH�%(H�D$81�H�L$H�\$H��H�D$8H�D$8H��PH�D$8PH�D$$P1�L�L$@L�D$(�H�� �����D�
�KH��1�1�A�H���������	H��H���L�d$(I�D$�H����I��H�|$ �H��[H�5�0HE�E1�1���DI��H������@!L�D$0����I�����H�t$D��L��H��H�H��\!��3Lc�A��t.�L���,AE��uH����1�1�H��� �;�
�EL�eH�D$8dH3%(��H��H[]A\A]�@H����1�1���
�EH�E�DM���I���I���t1L��1�L���$D�D$0�,���f�H�D$0E1������H�t$H����)Lc�L�D$0M��x�u�E1�������ff.�@��UH��H�5sSH��(dH�%(H�D$1�H�\$H�L$L�D$H������t?D�
��K1�1������A�H���H���H��t6�EH�t$H���)H�EH�D$dH3%(uH��([]�f.��EH�E���=���ff.�f���UH��H�5<�SH��8dH�%(H�D$(1�H�L$H�\$H��H�D$H��P1�L�L$0L�D$�$�ZY���tOD�
��KH��1�1�A�H��������8H��H��tZH�T$ H�t$H���*��t*�EH�EH�D$(dH3%(u6H��8[]��H���H�C� �1����
�EH�E��C�����UH��H�5�SH��(dH�%(H�D$1�H�\$H�L$L�D$H���E����tJD�
ѪKH��1�1�A�H�'�������[H��H��tUH�t$H���v)��t*�EH�EH�D$dH3%(u6H��([]��H���H�k� �1���
�EH�E��k���ff.���UH��H�5�SH��(dH�%(H�D$1�H�\$H�L$L�D$H���e����tJD�
�KH��1�1�A�H�G�������{H��H��tUH�t$H���)��t*�EH�EH�D$dH3%(u6H��([]��H���H��� �1���
�EH�E�苩��ff.���UH��H�5_SH��dH�%(H�D$1�H��H��葶���tND�
�K1�1������A�H�q�H���
H��tBH���
H�$�EH�8��������H�EH�D$dH3%(uH��[]���EH�E���ͨ��ff.�f���UH��H�5��SH��(dH�%(H�D$1�H��H�L$L�D$H���ǵ���t[D�
S�K1�1������A�H���H����H��t%H�L$H��tnH��t@H���1�1���
�EH�EH�D$dH3%(��H��([]�@H�|$�uMH���@!�EH�E�fDH�|$�u=H�H��~MH��8!�EH�E���HH�D�H���[���@�HH���H���C���@H�i��1�1����
�EH�E�3����U���DAUI��ATI��U��SH��H��i�8!�dH�%(H�D$1�H��4$��D$蹰����=����������H�L$dH3%(����H��[]A\A]���D$��~���d!��t59+tQ��h!��t'H��H!����tH��D��L���������1�L��L���������z���f.���x!��t�H��p!D��L���ԩ�����M�������n�=����(����AT1�UH��SH���H���H��tHc��H���%������A���t+���
tJ��
��u�t@���
t8��
tcH����u�A)ċuH��H��Ic��V���E�������„�u�1��\�H�C�H����B���~V�{
tB���[�]A\�@�H����H������u�HDž��[]A\�H���B�H��������t���H����SH��LJ�f�H����������軣��H���H�H��DHt�H���H��Dpt�H����Dxt���� u�������H�����0k�d�P���D8�H������藰��H����H��tH��H���[�f�1�[�@1��DH����UH��SH��H���>���t����ub�����{���t����u+���H��tHDžH!H����H��1�[]�DH���܊���{ǃ�DH��輊���;ǃ�fD1��DAWA��AVAUATUSH��dH�%(H�D$1���tHH��A��I�ԉ�I��D�L��D�,$i�8!��D$�լ����9����A�����H�L$dH3%(D����H��[]A\A]A^A_�D�D$��~���d!��t%D9mtO��h!��tH��H!����uT@Hc�1�L��D���P������t�Hc�I�)��E����u������x!��t�H��p!��L���5�����H����L�������D���n�����3���AVAUI��ATI��U1�SH��H�5�. H�����H��t[��]A\A]A^�fDH���p���I��M��tXA�<$tQL���Y���I�DH=w�H�5�. L��譱��H��u�I���H��M��H�w�H���w	���8I��1�I���t���I���H�پ1�H�x4 H���=	��A�uHc�H��L��IDž�1����9�[@�ʼn�]A\A]A^�ff.�USH��dH�%(H�D$1��?f�D$H��t{H�����9�� tQ��tl��u_�D$IH�T$H�5-�H�������tBH�������t6����u*��� ��H�L$dH3%(uH��[]Ð1���@�D$A��l���ff.��AUATUH��SH��H��D�gdH�%(H��$�1�A�������d!��u2H��$�dH3%(H����H�Ĩ[]A\A]�f.���h!��t��A���H���	���I��H����T�H���Ћ��L���x���H��H����sH�������l!����H��胡�����
ǃ�J���@i�8!�D�/�H�|$�D$�D�l$�D$�������u-�ڄ���n� f��D$��~�H�t$H�T$D���5���A��D�c�;����{�����������H��1�������H��p!H���M����)����H����1�1���
1��r���@H����1�1���
L�����L���H���1�1����
H��1��k����$����A������AUI���ATI��U����!SH��8dH�%(H�D$(1��k�f����L�d$H�ø�L��H�D$D�H��1�jE1�jjL�D$0��H�� ������H�sH�{A��1�H��H���D$�H�T$H)�L��8!��ǃD!��H�CHǃ��H�D��賘����u?H���G�����t\����uPH�T$(dH3%(H��uUH��8[]A\A]�f��˂���(��蒊��A��1�H��H���1��w�
�;���t���H��1��!���ڜ��f.���H��tGSH��H��� H��t��Hǃ� H��� H��t�րHǃ� [�f��ff.�@��H��tWSH��H!H��H��t�"����;���t��x!��u!�<���H���d���H���l�1�[��H��p!�4����;��1��ff.�f���H��toS1�H�5�H��H�������u
1�H��[�DH�������t灻��u�H��� �H��t̉D$���D$Hǃ� �D1��D��AVAUATUSH��t7I�Ջ�d!I��H����t��x!����L��H�5� H��������u1�[��]A\A]A^�H��������t䋃��=�t�=Ku�L��H�5�H�������t�H��������t�1큻��@����H�ˎH�5��������u���H��������e�������tOH���H�5X�H���K������;���H���[������+������N����H�H��h!蝭��H���e���I��H�����T�H���,���L���Ԉ��L��H��p!腯��H��p!H�����3�N���H��p!�������ǃx!��l!���t���H��H�5��H���|������l���H������\���H���H�5��H���N������>���H���^���.������-���c������h!����H���1�1��
��H���1��
����1�H���1��y�
H��p!�
���������H��tWSH�����1�H�5��H��ǃD!�����u1�[�H�����t큻���t�1����1��ff.�f���H����H��� H��t�fDAT1�H�5i�USH��������twH�����tk����u_��� H���u�H���} t�� H������I��H��t9�H���~~H��� A�$ H��� []A\�fD1���@1��DH���H~H��� ��ff.�@��H����H��� H��t�fDU1�H�5o{SH��H���)�����teH���=��tY���uMH����"�L���H��t7H�h�"H��膖��H��t!H)�H�����}H��� H��[]�fD1���@1��D��H��tGSH��H�5��H�����u1�[�@H�����t쁻���t�1����1��ff.�f���ATUH��SH����H����1�H���)��tuH��L����=fDH�����tX�L��H���V���H���H��DPt�H����DPt�H����DPt���� u��@�E[]A\����H��toUH��SH��H��H��� H��t��yHǃ� H��H�5��H���]��u	H��1�[]�H���h��t끻���u�H��[]�@1��D��H��tgSH��H��� H��t�ryHǃ� 1�H�5U�H������u
1�[�fDH�������tꁻ���t�1����1��ff.�f���H����UH��H��H�5�SH��H���x��tdH������tX���uLH����"蛂��H��tNH�X�"H���Փ��H��H��t�H����z�E"H��[]��H��1�[]��1��DH��H��[]�zf.���H��tGSH��H�5<�H������u1�[�@H�������t쁻���t�1����1��ff.�f���SH�� dH�%(H�D$1�H��tb��~^H��I��H�|$��H���1��H�T$H�5��H���/��tKH�|$�wH���9���t�����t@1�H�\$dH3%(u"H�� [��H�|$�D$�Bw�D$��������ATUSH��PdH�%(H�D$H1�H��tw��~sH��H����1��?H��I��H��;"�j�
H��H�5��H���h��t<H���|���t0M��tH����yI�$���-���c�����D1�H�L$HdH3%(u	H��P[]A\��8������ATUSH��`dH�%(H�D$X1�H���{H��������� ��`�D$�H��� 1�H�T$LJ� H��� H��H�G�H�GpH��H)�����H��;轇�����f��� 
�1�H�5ؾH���F�����H���V�����������H���L���@��t����H��I��I�,$@��t�Dht�H�l$ H�D$HL��H�L$(PH�E H��PL�ML�E1�H�5N��ʆ���D$ZY���KH��H�D$H�u0�H�
H��H���H�H9�u�f��� �D$��� �D$f��� ǃ� ����1�H�5uH���7�����H���G�����������������H���<(t��u
��<(tH�����u�t}D�bH�j�D$E��t5D��1�1��fD��wA8�u���H���E��u��t�T$H�t$�
H���}��f��f��� H�D$H9�tD: �����f�1�H�T$XdH3%(uH��`[]A\�DLJ� ����Z���f.�AVAUATUSH��H�� ��� dH�%(H��$1���t�H��������l� ��]u�{1ҾH�����H�ŋ�� �E�*z��A�ă������� ����ǃ� L��� L���W�H��1�E1�H��8!�D$L��D��H�D$ H�T$��jL�D$ 聽ZY����fD�eH��H!H��$dH3%(H����H�� []A\A]A^ÐL�l$ �{1�L���M�L���żL��D��‰D$�tv�����lH�T$L��D���<��������D���G�������f�{
D�e���D$"�K�L��$�H��L������RH�~�P�CPD�K1�D�C
�>�
H�� L��H��H�5�q�8�����H���H�����������H��H!����@H�s�.L��$��
L��L��$����D�D$"L��1�H�ֺ�9L��fA��E����
L��H�5�uH�������h����D��踡��H��1���p�N���f�1��>���f��;r������z��A�ؾ1�H��H���1���
�D�r�������y��A�ؾ1�H��H��1�跴
�r���f���q������y��A�ؾ1�H��H���1�致
�J���f��q������ry��A�ؾ1�H��H��1��W�
����f��{q������By��A�ؾ1�H��H�s�1��'�
���蝋��ff.�f�AWAVI��AUATUH��SH��1�H���B_H���o�H��I���9����!H�����I��H���
H��H!L��H��H��������H�����������=�����}�„�t=���=���L��H���w�I��H����H�D$H�hE1�E1��A�u�H��H���L�Hc�H����H���t]L��H��H9�rRH��H��L��H�$�H�$H��I�I�L
�@I��H��D��H9�t����
u�A��
u�H�D$�ݐE1�L��H��1�����L��H��H!�\H��H��[]A\A]A^A_�H�+��1�1��e�
1���L��H����1�1�L��H��H!�L�l$�J��I��L���unN�<�H��I��E1�L�8DL�������t*��
uvA��
upA�G�L��I��A�
M�>����u�I�L���H���-���t���=�����=�����H��1��Sm����fDA�A��I���i���L��H����L��H��H!�*H����[]A\A]A^A_�off.�f���H��H�5���
���ff.�f���H���H���H�5X�H��HE�����ff.�f���AWAVAUATUSH��HdH�%(H�D$81�H��t0I����H��I��A��E������u?1�H��H�����H��H!1�H�L$8dH3%(�,H��H[]A\A]A^A_�fDH�����H��H��t�H��H!E��~dL�D$-�1�D��L��H���L�D$�a�
L�D$H�5 wH��L���Z����e���H���j����U������^�E���f�L��H�5^�H�������)���H���.����������=�t	��}����H��H����H��H�����H�@H�D$�uH�T$�H�����Lc�M����I��������A��tH�t$L��L���O�I9�t����DH�L$L��H�I��H�D$H9�w�fDL9|$v�H�D$�
L��L)�H��H�D$�L���I��H��t4L��L��L��L)�M�|$��A�|$
u��
L��M�|$���f�L9|$�%���H�T$L��L�������H��H�����H��H��H!H��������������=�t=�����������ą��@��AWAVAUATUSH��8dH�%(H�D$(1�H��t0I����H��I�ԉ�E���d���u@E1�L��H���B�H��H!1�H�L$(dH3%(�H��8[]A\A]A^A_�fDH�����I��H��t�H��H!E��~dL�D$�1�D��L��H��L�$���
L�$H�5�tH��L�������g���H���������W������^�G���@L��H�5òH���~����)���H��������������=�t	��}����L��H����I��H�����H�@E1�H�D$I���2�A��L��L�pA��
u��uH�P�
A��L��I��D�L�����uZL���b�A�����tJ�D)��L�t$A�wIc�H��D�$L���b�A9��\���L��A�D�$�f.�E��tA�wH�T$Ic�H���'�A9��!���L��H���c��H��H��H!I���q��������������8�����2���H��H����������A������H��tnUH���SH��H������tMH��H�5fH�������t7H��������t+����uH����
1��܉��H��[]�D���������D��ATUSH��dH�%(H��$�1�H���-H��H�5��H���S����H���c�����������H���H�����t$�#���H��fDH��H�]��t�DXt�H�\$PH�5/�H��H�CSH�KPH�SL�K1�L�C��w��ZY����1��l$dl�l$`�D$p�����}��H�t$H�|$H�D$�
���H��H��tM�@ ����L�d$H����v��H��I)ċE Dd$P�D$p��v��H��$�dH3%(uH�Đ[]A\�H��������Z���f.���H��tGSH��H�5f�H�������u1�[�@H�������t쁻���t�1����1��ff.�f���H��tUH��H��H�5�SH��H�������u1�H��[]��H�������t䁻�^u�H��H�5ʮH���^����t�H���r����t������t��1��D��H��tGSH��H�5��H�������u1�[�@H��� ����t싓�������cv�1���f�1��ff.�f���S��H��dH�%(H�D$1�H��4$��D$�z����Å���u@�ke���n��\$��~�H�L$dH3%(��uH��[�f.�1����w�����S��H��dH�%(H�D$1�H��4$��D$����Å���u@��d���n��\$��~�H�L$dH3%(��uH��[�f.�1�����~�����AWAVAUATUSH��H��H��H!�u������tvL�e�u�H��L��D��� D��X!�>��Lc�M��t^I���t%A����H��P!L��L�����I9���ǃD!H��H�����1�H��H!H����[]A\A]A^A_�@A��uA��
tLH��H������H��H��H!H��������t����=�t=�u�ǃD!��fDH��P!�
���DJ�l-��@��
uRI��D��L9�t-A�4$A��
u�H��P!@��
t4�
�K�A�4$��@D��X!��"����H��P!��A�4$�D��AWAVAUATUSH��(dH�%(H�D$1�H��t-I����H��I��E��������uB1�H��H������H��H!1�H�T$dH3%(�H��([]A\A]A^A_�f�H���h�H��H��t�E��~[L�|$
�1�D��H���L���M�
L��H�5lH���K�����s���H���[�����c������^�S���L��H�5N�H��������6���H��������&������=�t	��}����H��H�����H�������H��H!H��L��P!ǃX!ǃD!�������{�����AVAUATUSH��H!H���p�2������@H��H!E1�A�H�h�@�ED��E��H��D)���H��P!�<���u@H��P!�����t/H�UE�e��
u���� u�H�M�E
E�eH��H���DH��H!E��uLH������H��H��H!������tH���=�t=�u4ǃD!�[]A\A]A^�DH�V�vIc�H���.��A9�taH��H!H���j��ǃD!H��H![1�]A\A]A^�fDH��H!Ic�H�ߋpH�P����D9�u�[�]A\A]A^�@H��H!�0���ff.����AWAVAUATUSH��(dH�%(H�D$1�H��t-I���H��I��E��������uB1�H��H�����H��H!1�H�T$dH3%(�H��([]A\A]A^A_�f�H���X�H��H��t�E��~[L�|$
�1�D��H�}�L���=�
L��H�5�hH���;�����s���H���K�����c������^�S���L��H�5C�H��������6���H��������&������=�t	��}����H��H�����H�������H��H!H��L��P!ǃX!ǃD!��������x�����H���sH�lgH�5�1���)H�����USH��H�5)yH��(dH�%(H�D$1�H�L$H�T$荅���tA�|$vH�D$�8uD1�H��躃��H��H���g���ƉC��xvH���^�CH�H�D$dH3%(urH��([]�H�ƹH�=-���€��ҺHD��@H�[��1�1��3�
�CH��fDH�5i��1��
��s�o����w����USH��H�5� H��(dH�%(H�D$1�H��H�T$L�L$L�D$腄���tR�<$���|$YH�t$H�|$��ul��H��H���f���ƉC����H����]�CH�H�D$dH3%(�}H��([]�H�
z��1�1�H�p��4�
�CH���H�3��1�1���
�CH��fDH�5A��1����s�`����Xv�����USH��H�5=H��8dH�%(H�D$(1�H�L$H�T$H��H�D$(P1�L�L$L�D$(�G�ZY���tR�|$���|$XH�t$�T$ H�|$�5k��H��H���Je���ƉC����H���\�CH�H�D$(dH3%(�}H��8[]�H�
:��1�1�H�0���
�CH���H���1�1��˝
�CH��fDH�5��1���s�`����u�����USH��H�$H��8dH�%(H��$(1�H��H�L$H�T$L�L$L�D$H�5���������|$��H�D$�8��H�D$H�l$ �8t�H�=ЯH����€������H���e��H����H�|$H���.r��H��H����c���ƉC����H���[�CH�H��$(dH3%(��H��8[]�fDH����1�1��k�
�CH��fDH�5��1��E��CH���H��H���
H���A����CH��e���@H�5Q��1���s�7����hs�����USH��H�5!:H��8dH�%(H�D$(1�H�L$H�T$H��H�D$(P1�L�L$L�D$(�W�ZY���t_�|$H�
ˢv�|$eH�L$ H�T$A�1�H�t$�t��H��H��t H���Ib���ƉC��x`H���Y�CH�H�D$(dH3%(uYH��8[]�f.�H�
Z�H�9��1�1���
�CH���H�5)��1����s��Cr����USH��H�5�H��HdH�%(H�D$81�H�L$H�T$H��H�D$8PH�D$$PH�D$@P1�L�L$0L�D$@�+H�� ���tt�|$���|$H�
��z�|$iH�L$0H�T$(A�H�t$ H�|$��r��H��H��t$H���
a���ƉC����H���eX�CH�H�D$8dH3%(�}H��H[]�H�
�H����1�1�贙
�CH���H����1�1�苙
�CH��fDH�5���1��e��s�`�����p�����USH��H��HdH�%(H�D$81�H�D$0�FH�L$H�H�T$H�5o�PH�D$0PH�D$PH�D$8P1�L�L$(L�D$8�}H�� ���ts�|$���|$H�
�u�|$dD�D$0H�L$(H�T$ H�t$H�|$�^q��H��H��t$H���_���ƉC����H����V�CH�H�D$8dH3%(u}H��H[]�H�
��H����1�1��<�
�CH���H�;��1�1���
�CH��fDH�5I��1�����s�d����`o����USH��H�5�H��(dH�%(H�D$1�H��H�T$L�L$L�D$�e|���t@�<$WH�t$H�|$�h_��H��H��thH���x^���ƉC��xgH����U�CH�H�D$dH3%(u`H��([]�f�H�S��1�1��+�
�CH��fD�CH��H�5Q��1����s��kn��ff.���USH��H�5	oH��(dH�%(H�D$1�H�L$H�T$�m{���t>�|$NH�t$�1��mc��H��H���]���ƉC��xYH����T�CH�H�D$dH3%(uRH��([]�H�
z��1�1�H�p��4�
�CH���H�5i��1��
��s��m���������S���H��1�H�=��b�A�ع1ҾH�=ȝ�mK�A�ع��H�=����A�ع��H�=����H�6�HA�ع�H�=��H���H�H�5$H�=-�z��1�[�@����P���H��1��Qf����P���SH�H���0h��H��[�P���H���#
H�[H�5�1����H�z�H�H�5��H�1��H���#
AUA��ATI��UH���SH���PH�EI�$�K����v\�����{H�3~*�>0u%�V��߀�X�A��t��Bu
A�H��D��H���5W������H��[]A\A]�f���tN1�H�J��1���
H�}�OH�������[]A\A]�D��uȀ{t-H���aI�$H�EH�3H���bs��H��1�[]A\A]�D�C��v˃���C�OI�$�oH�SH��H�PH�� ��vH���!�I�$�@I�$�@I�$�x���DA�����H�}�\f��H�}��N��������f���ATUSH�� dH�%(H�D$1��G�����H��1�H�T$H���	���to����L�d$I�$�{t"�{u�C����H����_H�D$H�H��A��ʃ�"whH�4$H�|$�������tE��iKH�t$H���"���	H�D$dH3%(��H�� []A\�fD1��@�EH�E��f�H����1�1��
�EH�E�D����C�hMI�$H�D$�oH�H�SH�PH�D$H�8�v
�z�H�D$H�8�GH��BH�����i�����SH�� dH�%(H�D$1���uzH��1�H�t$�����taH�D$H��zts1�H�|$H�����������yhKH�t$1����H�D$�C�@H�������x����H����3H�D$dH3%(uGH�� [�DH��D�
hK1�1�A�H����������H�D$H��u��CH���h�����ATUSH��dH�%(H�D$1���uWH��1�H������t@L�$$I�,$�E<��<t�}tJH���r]L�$$�CI�$H�H��fD�SH�D$dH3%(��H��[]A\�fD�E��v�����E�XKI�$H�$�oEH�H�UH�PH�$H�8�v�k�H�$H�8�GH��BH�(�T���fDD�
�fK1�1������A�H�[�L���S�H��t�CH���Q��H��7���f.��CH������f��ff.���AUATUSH��(dH�%(H�D$1��G�����H��1�H�T$H���"�����H�$H��z��1�H�|$H����������S��eKH�t$1��^�A�
����H�|$D����p���xH��Hc���IH�T$D��H��I�āz����'j��Hc�A�|��8���]L�e�E�
��kH�D$dH3%(�H��([]A\A]�@L�d$I�$�{tu�{u_�C��vW����C�[II�$H�D$�oH�H�SH�PH�D$H�8�v
�m�H�D$H�8�GH��BH�H����ZH�D$H�H��A�A�̓�"���H����1�1��M�
�EH�E�!���@H��D�
�dK1�1�A�H���������H�D$H���w����A�����qd�����AUATUSH��(dH�%(H�D$1�����H��1�H�T$H��������H�$H��Q���5����1�H�|$H�����������cKH�t$1�E1��/�L�l$I�]�{t"�{u�C���.H���YH�D$H�H�;����GH��H���e��H�D$E����H�H�$H��H�H�H�0�yT���?cKH��H�����fD�H�D$dH3%(�H��([]A\A]�@D�
�bKH��1�1�A�H��������E1���H�D$H������f��EH�E�f�H�9A������H�H�t$H��H���h���G���H���1�1���
�f�����C�FI�EH�D$�oH�H�SH�PH�D$H�8�v
��H�D$H�8�GH��BH��v����/b��ff.�@��ATUSH��@dH�%(H�D$81����SH��1�H�L$�H�T$H�t$�����,H�D$H��z�j1�H�|$ H���������B��aKH�t$ 1����H�D$H��Q���c���r1�H�|$(H���[���������8aKH�t$(1���H�D$(�P1����H�D$H��z�\1�H�|$0H���
����������`KH�t$01��R�H�D$0�@������DH��I���]b�����EH�L$0H�T$(L��H�t$ �^p����`KL��H������sH�D$8dH3%(�!H��@[]A\�fDH���1�1���
�CH��H��D�
*`K1�1�A�H����������H�D$ H��������H�9��������@H��D�
�_K1�1�A�H�m�������c�H�D$(H��������h���H��D�
�_K1�1�A�H�5�������+�H�D$0H��������0����H�D$H�L$0L��H�t$ H�H��S������i_��f���USH��(dH�%(H�D$1�����H��1�H�t$�������H�D$H��z��1�H�|$H�����������^KH�t$1��4�H�D$�@��xX���BH��H���C`��H�t$H���fU����^KH��H������k�H�D$dH3%(uhH��([]�@H�	��1�1���
�CH���fDH��D�
*^K1�1�A�H����������H�D$H���F�����^��ff.���AUATUSH��8dH�%(H�D$(1�����H��1�H��������H�$H��z�1�H�|$H���������{]KH�t$1���H�D$�@�����L�l$�AH��I����^����oAH��H����^��H�T$H��L����Y��H���|�]KL��L���{��T$1�H�����\KH��L���\��T$�H���{�f��H�D$(dH3%(uhH��8[]A\A]�H�Y��1�1��;�
�CH���fDH��D�
z\K1�1�A�H�
��������H�D$H�������n\��ff.���SH�� dH�%(H�D$1����~H��1�H�t$�����teH�D$H��ztw1�H�|$H�����������[KH�t$1��=�H�D$�CHcpH��~{H�x�2B��������H��
D�H�D$dH3%(uPH�� [�DH��D�
r[K1�1�A�H��������H�D$H��u��CH��@����V[��fD��ATUSH�� dH�%(H�D$1��G���w|H��1�H�T$H�������tcH�$H��zt~1�H�|$H������������ZKH�t$1��,��
�����EH�|$�c��H�H�E�
��{�H�D$dH3%(��H�� []A\�fDH��D�
ZZK1�1�A�H���������H�D$H���y����EH�E��L�d$I�$�{tu�{u_�C��vW����C�#>I�$H�D$�oH�H�SH�PH�D$H�8�v
�5�H�D$H�8�GH��BH�H���OH�D$H��3����Y����AVAUATUSH��@dH�%(H�D$81����H��1�H�T$H���@�����_H�$H��z�v1�H�|$H���7�������YKH�t$1��|�H�D$H��z��1�H�|$H��������Z��XKH�t$1��@��H�l$ ��<H��I���VZ�����<H��I���AZ�����<H��I���,Z��L�D$L��L��H�L$L���t\��H�����bXKL��H���˼�L$ H�ߺH�5Ĉ�	�9XKL��H��袼�L$ H�ߺH�5�X�j	�XKL��H���y��L$ �H��H�5��!�A	�	@��H�D$8dH3%(��H��@[]A\A]A^�f�H��D�
�WK1�1�A�H�E�������;�H�D$H�������D�CH��H��D�
jWK1�1�A�H����������H�D$H���u�����^W��ff.���USH��8dH�%(H�D$(1�����H��1�H�T$�H�t$�������H�D$H��z��1�H�|$H������������VKH�t$1���H�D$H��z��1�H�|$ H����������{VKH�t$ 1�����:H��H���W��H�T$ H�t$H���`����t8�>VKH��H��觺�
D��H�D$(dH3%(��H��8[]�H����Q��H���`:�CH���H��D�
�UK1�1�A�H�u�������k�H�D$H�������H��D�
�UK1�1�A�H�=�������3�H�D$ H��������U��ff.���SH��0dH�%(H�D$(1�����H��1�H�T$�H�t$�%������H�D$H��z��1�H�|$H�����������TKH�t$1��`�L�T$I��B<��<��1�H�|$ L����������H�t$ ��TK1���H�t$ H�|$�kj��H��CH���{�H�D$(dH3%(��H��0[ÐH��D�
bTK1�1�A�H����������H�D$H���M���D�CH��H�2H�|$��h���{���fDD�
TK�����1�1�A�H���L��苸H��H�D$ H���5������S����AVAUI��ATUSH��dH�%(H�D$1�������t0��H�D$dH3%(�pH��[]A\A]A^�f.�H���X���u�H�,$H�]�{t!�{u�C����H���,IH�$H�H����1�)��Hcۿ�I7H��H���T��I���ՔA�<$t@H��I�t$H���PG����RKH��L���O��?���f.���f�� I�|$�QG��1��M��I���2[��Hc�L����YF�I�|$�H,�L1��;��A�$�r���f�����C�6H�EH�$�oH�H�SH�PH�$H�8�v��H�$H�8�GH��BH������2R��f���ATUSH��0dH�%(H�D$(1����+H��1�H�T$�H�t$�������	H�D$H��z�1�H�|$H��������?��QKH�t$1��H�D$H��z�+1�H�|$ H���|������YQKH�t$ 1����w5H��I����R����b5H��H����R��H�T$ H�t$H���u[��H��H���JE��H�T$ H�t$L����S��H��L��L���J[��H����L��H���:5��PKL��H���9��	@��H�D$(dH3%(��H��0[]A\�fDH��D�
�PK1�1�A�H���������H�D$H������D�CH��H��D�
BPK1�1�A�H�Հ������˴H�D$ H��������6P��fD��AUATUSH��(dH�%(H�D$1��G�����H��1�H�L$H��H�T$��������|D�
�OKH�<$1�1�A�H�H�������>�I��H����L�l$I�m�}t�}t]H���eEH�D$H�(H�m����Hc����]L���mG����3�H�D$dH3%(�QH��([]A\A]�@�E��v�����E�83I�EH�D$�oEH�H�UH�PH�D$H�8�v
�I�H�D$H�8�GH��BH�(�>���L�l$I�]�{tu�{u_�C��vW����C�2I�EH�D$�oH�H�SH�PH�D$H�8�v
���H�D$H�8�GH��BH�H���,DH�D$H�H���x5Hc�������L���
a������D�EH�E����H�с�1�1��v
����M��f���ATUSH�� dH�%(H�D$1�����H��1�H�T$�H�t$�����t}D�
�MKH�|$1�1�A�H�~�������H��H����L�d$I�$�{t�{u�C��w}H���%CH�D$H�H�3��x>Hc�H���`���f���H�D$dH3%(��H�� []A\�fDH����1�1��su
�Ɛ�CH������C��0I�$H�D$�oH�H�SH�PH�D$H�8�v
���H�D$H�8�GH��BH��'����L��ff.�@��SH�� dH�%(H�D$1���uzH��1�H�t$������taH�D$H��zts1�H�|$H�����������KKH�t$1��Q�H�D$�CHcpH��xwtH�x�4I��H��H�3�	@��H�D$dH3%(uTH�� [�DH��D�
�KK1�1�A�H�|�������H�D$H��u��CH��@H�������jK��f.���SH��0dH�%(H�D$(1�����H��1�H�T$�H�t$�������H�D$H��z��1�H�|$H�������������JKH�t$1��0�H�D$H��z��1�H�|$ H����������H�t$ ��JK1���H�t$ �CH�|$�^��H��	@�S�H�D$(dH3%(��H��0[�f�H��D�
2JK1�1�A�H��z�����軮H�D$H���M���D�CH�������H��A�1�D�
�IKH�zz1��s�H��H�D$ H���C������I��ff.���ATUSH�� dH�%(H�D$1�����H��1�H�T$H���d������H�$H��z��1�H�|$H���[��������8IKH�t$1�蠭L�d$I�,$�}t#�}u�E����H���>L�d$I�,$H�}xG�CI�$H�|$H�0�P��H��
D���H�D$dH3%(��H�� []A\�fDH��|�1�1��;q
�CH��fDH��D�
zHK1�1�A�H�
y�������H�D$H���%��������E�p,I�$H�D$�oEH�H�UH�PH�D$H�8�v
聾H�D$H�8�GH��BH�(����H��ff.���ATUSH�� dH�%(H�D$1�����H��1�H�T$H���������H�$H��z��1�H�|$H�����������hGKH�t$1��ЫL�d$I�,$�}t#�}u�E����H���'=L�d$I�,$H�}xG�CI�$H�|$H�0�RH��H��
D���H�D$dH3%(��H�� []A\�fDH��z�1�1��ko
�CH��fDH��D�
�FK1�1�A�H�=w������3�H�D$H���%��������E�*I�$H�D$�oEH�H�UH�PH�D$H�8�v
豼H�D$H�8�GH��BH�(����>F��ff.���SH���Ք�;u1�[�H�{��>���1�[����USH��(dH�%(H�D$1�����H��1�H�t$������ttH�D$H��z��1�H�|$H�����������pEKH�t$1��ة��)H��H����F��H�t$H���VM���<EKH��H��襩���H�D$dH3%(uKH��([]�@H��D�
EK1�1�A�H��u�����苩H�D$H���u����CH����D��ff.���ATUSH��dH�%(H�D$1�����I��1�H���y������H�$H�+�E<�E<��}u�E���kH���;:H�$H�+H�}���}t�}tmH���:��K(H��H���E��H�H��H�0�3����CKH��L���a������H�D$dH3%(�@H��[]A\�fD�E��v�����E��'H��oEH�UH��H�PH�� ��vH����H��@H��@H�+�;����H�}�0���H��v�1�1���k
A�D$I�$�J���DD�
CK1�1������A�H��sH��裧H��t��@��x�H�$H�+�������E�'H�H�$�oMH�H�UH�PH�$H�8�v��H�$H�8�GH��BH�(�<����B��f.���SH��0dH�%(H�D$(1�����H��1�H�T$�H�t$ �5������H�D$ H��z��1�H�|$H���+��������BKH�t$1��p�H�D$ H��z��1�H�|$H�����������H�t$��AK1��4�H�t$�CH�|$�E��H�H��f.���H�D$(dH3%(��H��0[ÐH��D�
rAK1�1�A�H�r������H�D$H���M���D�CH�������H��A�1�D�
AKH��q1�賥H��H�D$H���C�����A��ff.���SH��0dH�%(H�D$(1�����H��1�H�T$�H�t$�������H�D$H��z��1�H�|$H�����������x@KH�t$1���H�D$H��z��1�H�|$ H���_�������H�t$ �7@K1�褤H�t$ �CH�|$�D��H�H��f.���H�D$(dH3%(��H��0[ÐH��D�
�?K1�1�A�H�up������k�H�D$H���M���D�CH�������H��A�1�D�
�?KH�*p1��#�H��H�D$ H���C�����?��ff.���USH��(dH�%(H�D$1�����H��1�H�t$������t|H�D$H��z��1�H�|$H������������>KH�t$1��X���#H��H���s@��H�t$H9�tH���1C����>KH��H��[�����H�D$dH3%(uLH��([]�@H��D�
z>K1�1�A�H�
o�������H�D$H���m����EH�E��b>��f���USH��(dH�%(H�D$1�����H��1�H�t$��������H�D$H��z��1�H�|$H�������������=KH�t$1��4����!H��H���O?��H�t$H9�tH���
B���C��=KH��H��1C)C���fD�c�H�D$dH3%(uLH��([]�@H��D�
J=K1�1�A�H��m������ӡH�D$H���a����EH�E��2=��f���USH��(dH�%(H�D$1�����H��1�H�t$�������ttH�D$H��z��1�H�|$H�������������<KH�t$1����� H��H���#>��H�t$H���0���l<KH��H���ՠ��K�H�D$dH3%(uKH��([]�@H��D�
2<K1�1�A�H��l�����軠H�D$H���u����CH���<��ff.���USH��8dH�%(H�D$(1�����H��1�H�T$�H�t$�������H�D$H�l$H��z��1�H�|$H�����������r;KH�t$1��ڟH�E�x��1�H�|$ H���]��������:;KH�t$ 1�袟��XH��H���<��H�T$ H�t$H����=���;KH��H���j��
����H�D$(dH3%(��H��8[]�H��D�
�:K1�1�A�H�Uk������K�H�D$H���3���D�CH��D�
}:K1ɾ����1�A�H�kH����H�D$ H���#�����n:��ff.���USH��8dH�%(H�D$(1�����H��1�H�T$�H�t$��������H�D$H�l$H��z��1�H�|$H�������������9KH�t$1��*�H�E�x��1�H�|$ H������������9KH�t$ 1�����H��H���
;��H�T$ H�t$H���C���Q9KH��H��躝�
��+�H�D$(dH3%(��H��8[]�H��D�
9K1�1�A�H��i�����蛝H�D$H���3���D�CH��D�
�8K1ɾ����1�A�H�[iH���S�H�D$ H���#�����8��ff.���ATUSH��0dH�%(H�D$(1�����H��1�H�T$�H�t$�B������H�D$H�l$H��z��1�H�|$H���3��������8KH�t$1��x�H�U�B<��<�1�H�|$ H�������������7KH�t$ 1��6����H��I���Q9��H�T$ H�t$L���o$����7KL��H����	@�s�H�D$(dH3%(��H��0[]A\�fDH��D�
R7K1�1�A�H��g������ۛH�D$H���%���D�CH��H�:������4H��I���8��H�EH�t$L��H��5;���A���D�
�6K1ɾ����1�A�H�cgH���[�H�D$ H����������6����ATUSH��0dH�%(H�D$(1�����H��1�H�T$�H�t$�R������H�D$H�l$H��z��1�H�|$H���C�������� 6KH�t$1�舚H�U�B<��<�1�H�|$ H������������5KH�t$ 1��F���H��I���a7��H�T$ H�t$L���4����5KL��H�����	@��H�D$(dH3%(��H��0[]A\�fDH��D�
b5K1�1�A�H��e�������H�D$H���%���D�CH��H�:������DH��I���6��H�EH�t$L��H��E=���A���D�
�4K1ɾ����1�A�H�seH���k�H�D$ H����������4����ATUSH��0dH�%(H�D$(1�����H��1�H�T$�H�t$�b������H�D$H�l$H��z��1�H�|$H���S��������04KH�t$1�蘘H�U�B<��<�1�H�|$ H������������3KH�t$ 1��V���H��I���q5��H�T$ H�t$L���+����3KL��H�����	@��H�D$(dH3%(��H��0[]A\�fDH��D�
r3K1�1�A�H�d������H�D$H���%���D�CH��H�:������TH��I���4��H�EH�t$L��H�����A���D�
�2K1ɾ����1�A�H��cH���{�H�D$ H����������2����ATUSH��0dH�%(H�D$(1�����H��1�H�T$�H�t$�r������H�D$H�l$H��z��1�H�|$H���c��������@2KH�t$1�訖H�U�B<��<�01�H�|$ H���!���������1KH�t$ 1��f���H��H���3��H�T$ H�t$H�������1KH��H���.��	@��H�D$(dH3%(��H��0[]A\�fDH��D�
�1K1�1�A�H�b�������H�D$H���%���D�CH��H�:������dH��I����2��H�EH�t$L��H��4��L��H����,��L���b�CH�+�C���fDD�
�0K1ɾ����1�A�H�saH���k�H�D$ H�������`�����0����USH��8dH�%(H�D$(1�����H��1�H�T$�H�t$�d������H�D$H�l$H��z��1�H�|$H���U��������20KH�t$1�蚔H�E�x��1�H�|$ H������������/KH�t$ 1��b�H�D$ �@��tf��H��H���q1��H�T$ H�t$H���A����/KH��H�����	@��H�D$(dH3%(��H��8[]��H��`�1�1��X
�CH��H��D�
J/K1�1�A�H��_������ӓH�D$H��������D�
/K1ɾ����1�A�H��_H��蛓H�D$ H��������/��fD��ATUSH��0dH�%(H�D$(1�����H��1�H�T$�H�t$�������H�D$H�l$H��z�1�H�|$H�����������`.KH�t$1��ȒH�U�B<�<�P1�H�|$ H���A��������.KH�t$ 1�膒H�D$ �@��tb��0H��H���/��H�T$ H�t$H���+����-KH��H���B����H�D$(dH3%(��H��0[]A\�fDH��^�1�1��3V
�CH��H��D�
r-K1�1�A�H�^������H�D$H��������H�:�����t���bH��I����.��H�EH�t$L��H��#A��L��H����(��L���`�CH�+�)���@D�
�,K1ɾ����1�A�H�s]H���k�H�D$ H��������(�����,����ATUSH��0dH�%(H�D$(1��G����HH��1�H�L$H��H�T$���_�����&��uNL�d$I�$�{t"�{u�C���`H���("H�D$H�H�������K����H�$H�\$H��z��1�H�|$H�����������+KH�t$1��C�H��B<�l<��1�H�|$ H��轿���������+KH�t$ 1���H�D$ �H������H��I���
-��H�T$ H�t$L����8���Q+KL��H��躏�
��+�H�D$(dH3%(�?H��0[]A\�fDH��D�
+K1�1�A�H��[�����蓏H�D$H������D�EH�E�f�H�$H�\$H��z�z1�H�|$H��軾�����tƋ�*KH�t$1���H��B<��<�1�H�|$ H���~������t��_*KH�t$ 1��ǎH�D$ �@���G��mH��I����+��H�T$ H�t$L���$�����H�$H�\$H��z��1�H�|$H����������
�����)KH�t$1��H�H��B<��<��1�H�|$ H���½�����������)KH�t$ 1���H�D$ �P������
H��I���+��H�T$ H�t$L���(������H�:������H��n
H��I����*��H�H�t$L��H�� .�����D�

)K1ɾ����1�A�H��YH��蓍H�D$ H���X�����������C�
I�$H�D$�oH�H�SH�PH�D$H�8�v
��H�D$H�8�GH��BH��D���@H��D�
r(K1�1�A�H�Y������H�D$H���u����h����H��D�
2(K1�1�A�H��X�����軌H�D$H���y����(����H�Y�1�1��P
����fDH�:����tԿ�H��I���_)��H�H�t$L��H��3���L����H�:����t���H��I���)��H�H�t$L��H��$�������D�
U'K1ɾ����1�A�H��WH���ۋH�D$ H�������H����D�
'K1ɾ����1�A�H��WH��蛋H�D$ H���[��������'����ATUSH��0dH�%(H�D$(1��G����HH��1�H�L$H��H�T$��������&��uNL�d$I�$�{t"�{u�C����H���XH�D$H�H����$���K����H�$H�\$H��z��1�H�|$H���.��������&KH�t$1��s�H��B<��<��1�H�|$ H������������%KH�t$ 1��2�H�D$ �H�������	H��H���='��H�T$ H�t$H����9����%KH��H�����
��[�H�D$(dH3%(��H��0[]A\�fDH��D�
:%K1�1�A�H��U������ÉH�D$H������D�EH�E�f�H�$H�\$H��z��1�H�|$H��������tƋ�$KH�t$1��4�H��B<�5<�m1�H�|$ H��许�����t���$KH�t$ 1��H�D$ �@������H��H���&��H�T$ H�t$H�������F$KH��H��诈����f.�H�$H�\$H��z��1�H�|$H�������������#KH�t$1��`�H��B<�!<��1�H�|$ H���ڷ������������#KH�t$ 1���H�D$ �P�������H��H���*%��H�T$ H�t$H���X���n#KH��H���ׇ���f�H�:�j����p��vH��I����$��H�H�t$L��H��*��L��H�����L���u�EH�]����D�
�"K1ɾ����1�A�H��SH���{�H�D$ H��������������C��I�$H�D$�oH�H�SH�PH�D$H�8�v
��H�D$H�8�GH��BH���@H��D�
R"K1�1�A�H��R������ۆH�D$H���=��������H��D�
"K1�1�A�H��R�����蛆H�D$H���)��������H��R�1�1��kJ
���fDH�:����tԿ��H��I���?#��H�H�t$L��H��'���_����H�:����t���H��I���"��H�H�t$L��H��\5�������D�
5!K1ɾ����1�A�H��QH��軅H�D$ H�����������D�
� K1ɾ����1�A�H��QH���{�H�D$ H���#�������� ����AUATUSH��XdH�%(H�D$H1��G�����H��1�H�L$��H�T$H�t$�k�����z��uNL�d$I�$�{t"�{u�C���H���4H�D$H�H������������,H�D$H�\$H��z�81�H�|$ H���	�������X��KH�t$ 1��N�H��B<��<�O1�H�|$(H���ȳ��������KH�t$(1��
�H�D$(�H���-��H��I���!����H��I���!��H�L$(L��L��H�T$ �n,��H��H�\$0���7KL��H��蠃�T$01�H������KL��H��聃�T$0�H�����fD��H�D$HdH3%(��H��X[]A\A]�@H��D�
�K1�1�A�H�UO������K�H�D$ H�������D�EH�E�f.�H�D$H�\$H��z��1�H�|$ H���j������t��KKH�t$ 1�賂H��B<�L<��1�H�|$(H���-������t��KH�t$(1��v�H�D$(�@������H��I�������H��I���l��H�L$(L��L��H�T$ ����d���f�H�D$H�\$H��z��1�H�|$ H��蚱���������wKH�t$ 1��߁H��B<� <�1�H�|$(H���Y������������6KH�t$(1�螁H�D$(�P������DH��I�������/H��I�����H�L$(L��L��H�T$ �"�����f.�H�:������`���H��I���K�����H��I���6��H�H�T$ L��L��H��)���-���D�
mK1ɾ����1�A�H��LH����H�D$(H��������������C�`I�$H�D$�oH�H�SH�PH�D$H�8�v
�r�H�D$H�8�GH��BH����@H��D�
�K1�1�A�H�eL������[�H�D$ H���>��������H��D�
�K1�1�A�H�%L�������H�D$ H���*��������H�yL�1�1���C
���fDH�:����tԿ�Z�H��I�������E�H��I�����H�H�T$ L��L��H��4������H�:������x�����H��I���c�����H��I���N��H�H�T$ L��L��H�����E���D�
�K1ɾ����1�A�H�KH���H�D$(H���\�������D�
EK1ɾ����1�A�H��JH����~H�D$(H��������3����USH��H�H�{t-H�Hcx� �H�sH��H�H��PH���8�H�{�/�H�{H��tH�1�HcP����H�{��H��H��[]�����UH��H�5C�SH��(dH�%(H�D$1�H�\$H�L$L�D$H����&���tID�
YK1�1������A�H��MH����}H��t6H�xH��T$H�t$�P�EH�EH�D$dH3%(uH��([]��EH�E���
��ff.�f���AWAVAUATUSH�����H��HH�t$L�d$ H�l$L�D$(L��H��H�5�LdH�%(H��$81�H�\$(��%�����D�
vK1ɉ�H��A�H��L1��|I��H�����~���~H��L��1�UA��H�. ��A�1��|I��XZM����H�T$(1�H��t[H�l$0A��-f�I���I�H��L�QH�T$(L)�H�T$(H��t!H�B�H��L��H=�IC���I��H���H�D$�@H�H��$8dH3%(u.H��H[]A\A]A^A_�f.�H�D$�@H���y��f���AUI��H�5�KATUSH��8dH�%(H��$(1�H�l$H�\$H�D$H�L$I��L�D$H���Z$�����D�
�KH��1�1�A�H�K������l{H��H����H�|$����A�1�H��A��H��������1��.{I��H�|$1ɺH�5��#�I��H����H�l$ �H�H�{��H��Q�H��L���q���ݾL��蠩A�EI�EH��$(dH3%(uGH��8[]A\A]�f�H�Š�L�E0M���a�����I��H�E0�P���A�EI�E�����@��AVAUATI��H�5JUSH�� dH�%(H�D$1�H�\$H�L$�D$H����"����@D�
oKH��1�1�A�H��I�������yH��H���5H�D�hA�}Hc��b�H�sH��H�H��P�CtyH��B��~1�H�SH�H���2jH�9B�H�{�H�H�sH�{�P�PH�H�{H��P�PH�H�sH��PH�H�{1�HcP����H�{��H�CMc�B�D5H�{��H�D$H�T$H�CH�0H�`�H����e��uH�D$�@H�D$H�8�<w�|$tEE�l$I�,$A�D$H�D$dH3%(��H�� []A\A]A^�DA�D$I�$�ʺ�L����H��E��~CA�}�1�H��J�
�H���L�΃�@������40�LSH�J@�4SH9�u�E�H��Ic����E�l$I�$A�D$�G���������AWH��I��AVAUATUSH��8dH�%(H�D$(1�H�l$L�t$ 虺H�� ֔H��L�l$L�d$H���g�'�D$H�t$L����P����H��H���hE1�I��L��L��L��H���]h��u�H�D$(dH3%(uH��8[]A\A]A^A_�����@��H��H�� ֔�U1�H���D��AWAVAUATUSH��HH�� ֔dH�%(H��$81�L�d$L�t$(L��H��L�l$ �'gH�D$0L��$0H�D$H���,L��H�L$ H��1�H)�H�yF�z
L��H��H�H��$gE1�1�M��L��L��H���ng��u���Ѳ1��H��H�50F臷H�T$1�H�5*F��o��ڲH��$8dH3%(uH��H[]A\A]A^A_������US��H��dH�%(H�D$1��o���H��H���^H��SH��H�� ֔�=^��tH�$H���H�$H�T$dH3%(uH��[]��)��f�AVAUATA��UH��H�5��SH��0dH�%(H��$(1�H�L$�D$H�T$H��H�D$P1�L�L$L�D$(�ZY������t$H�|$����H��H����E��t}H���H�|$1ɺH�5�L�@0�
�I��H����Hc{ L�d$ �p�I��H���fD��L��L��S�L��L���E}���L���t��"f�Hcx �'�I��H���T$H�t$L��S�C�xHc���L��H��I��SL�����|$tGHcCA��CL�e�E�EH��$(dH3%(��H��0[]A\A]A^�f�Hc{���M�I�ŋC��~E�x�1�H�F�DH��A��΃�@������40A�LUH�JA�tUH9�uыC�L��H�A�D�\��CL�m�E��E�G����H�L$H�UC1�1���f7
�EH�E����D�EH�E������f.���1����D����r���f�AWAVA��AUATI��H�5��USH��HdH�%(H��$81�H�L$�D$H�T$H��H�D$PH�D$$PH�D$@P1�L�L$0L�D$@�iH�� ������t$H�|$�n���H��H����E����H�l$ H���l���HcT$H9���H���1ɺH��H�51�L�@0�M�I��H����Hc{ ��H��H��Hc{��HcS1�H��I�����HcT$H�t$(9S��H��SL��H��SH���S��~1�fDA�46�SH��9��L��H��SE���>L�t$0����L��H��S�L��L���z���L���D��C�xHc���H��I��H��S�S1���~�A�4jH��9C�H���SL��H��S�SL��H��SH��L��SHcS1�L�����L�����H�����|$��HcCA�D�CM�,$A�D$A�D$H��$8dH3%(�KH��H[]A\A]A^A_�fDH��@�1�1��4
A�D$I�$�E1��G�����T$H�t$ H��S���@L�������l���Hc{����H�ŋC��~E�x�1�H�?B�DH��A�L�΃�@������40�LUH�J@�tUH9�uыC�L��H��D���CI�,$A�D$�A�D$���@H�L$H��?1�1���3
A�D$I�$���A�D$I�$�����
����1��U���D����B���f���AVAUI��H�56�ATUSH��0dH�%(H�D$(1�H�L$H�T$H�D$�D$H��H�D$(H�D$P1�L�L$(L�D$0�ZY���tx�t$H�|$���H��H���&�D$ t�D$����Hc{ �:�I��H��� �(�I��H�L�`H�D$ I�FI�F�u9��	KL��L���8nH�D$(dH3%(��H��0[]A\A]A^��Hc{���HcS1�H��H�����HcT$H�t$9S��L��SH��L��SL���S1���~fD�t6�SH��9��H��L��SI�n�U���fDH��=�1�1��1
A�EI�E�9����H�L$H�u=1�1���1
A�EI�E����@H������d�������ff.���ATI��UH��S�=���H���H������H��H����UH���SL��jH�� ֔H��E1�A�(�:XH��Z[]A\�����S���H��<1�H�='��bpH�� ֔1�1�A��#�K��7H�ƠёH�=�<�N���H���ёH�=�<�;���H�� ґH�=�<�(���H�� ӑH�=�<����H���ґH�=�<����H�ƠґH�=�<���H��`ґH�=y<����H�� ԑH�=m<����H���ӑH�=d<���H�ƠӑH�=[<���H��`ӑH�=R<���H�� ڑH�=I<�}���H��`ّH�=@<�j���H�� ّH�=8<�W���H���ؑH�=0<�D���H�ƠؑH�=(<�1���H��`ؑH�= <����H�� ؑH�=<����H���ّH�=<���H�ƠّH�=<���H��`ڑH�=�;����H���ڑH�=�;���H�ƠڑH�=�;���H���בH�=�;���H�ƠבH�=�;���H��`בH�=�;�s���H�� בH�=�;�`���H���֑H�=�;�M���H�Ơ֑H�=�;�:���H��`֑H�=�;�'���H�� ֑H�=�;����H���ՑH�=�;����H�ƠՑH�=�;���H��`ՑH�=�;����H�� ՑH�=z;����H���ԑH�=r;���H�ƠԑH�=j;���H��`ԑH�=b;���A�ع��
H�=O;�!�1�[�f.�S1�E1�f.�D��A��A��H��D�F���|D�A��D�D�	���LH��9�w�[�fD1�fD��T2�T H��H��u�)E1�H�
p;L�G0@H���
���2H���B�I9�u�D�A��A��t	������G?1��2���2D0�D0H��H��u��ff.���AU��I��ATL�$USH��H���GP��thL�G@H�ȍ4H��L������)�Hc�H�������H��tA�����L��H������SP��CP)�H�I�M�jM9�r2I�l$�L)�I��I���M�L��H�����I��M9�u�H���M�T-M9�wH��[]A\A]�M)�H�{@L��L���v���D�cPH��[]A\A]��L��H���U���@kPH��[]A\A]�fDI�H�yL��H��H�I�T�H�T�H)�H)�H�H���H�����A��A�T��T�����A�T�f�T����ff.�f���H�H��H�1�H�GAH��H)���Q���H����H��H�NPI��H��@�I��H�)�H�Lc���H��I��s%A��u_M��t7�A��t/fB�D��'f.�H�yH�H��J�D�H)�L�H���H�L���+���I�r0�"����AoAH���@�B�D����AWAVAUATUSH��XD�D�WdH�%(H�D$H1�H��D�GD�OH�Z@@�F�NH��H������	��N�	��N���	ȉB�H9�u�D��D�,$D�ӋT$D1�D1�E�֋D$D!�C�LD�D�d$D1�D��E��!�A1��D1���A!�1މ�E1�A�A��D!�D1�D��1�l$D��
!�1��1��!�A��D1�\$1�Dt$��!�A1�A��1�t$D�A!�A1lj�A1�L$ A�A��
E!�D1�D��A1�T$$A�A��D!�D1�E��1�D$(��!��D1���A1�Dd$,A!�1މ�E1�E�D�d$0A��
D!�E�D1�D��1�l$4D���!�1��1��l$8��!��1�A��D1�ڋ\$<��!�A�A	�1�D�A���
A!�A!�E	�E��5�y�Z��E�	�A��A��A!�D!�A	��t$���y�Z��A�D	��A��D!�D!�	΋L$ ���y�ZD���D	�D���	D!�!�	�A���y�ZD���D��!�
	�!�	ЋT$F��2�y�Z��AƉ�!�A��	�D!�	‹D$B��8�y�ZA���E	����D!�A!�D	�D�|$$E��7�y�ZD��D�	�E����	A!�!�A	��t$4���y�Z��A�	���A��
!�D!�	΋L$B��1�y�ZA���E	�����D!�A!�D	�D�t$E���y�ZD��D�	�E����A!�!�A	֋T$(���y�Z��A։�A��		�!�D!�	�B��=�y�ZA���E	����
D!�A!�D	�D�|$E��7�y�ZD��D�E��!��A	�A!�D	�D�|$A���y�ZA���A	lj��!�A!�D	�D�|$,G��7�y�ZA��A�A	ω�A��	!�A�����nE!�D	�D���y�Z��D�D1�D�|$ ��
1�A�����nA���D���1�A��4���n1�A1�ȋL$��	A1�B��1���nD�t$A͉�A��1�A�����nD�t$(D1���A�����n��D1�1�A���D���1ʍ�
���n1�A1�‹D$D�t$��	D�|$A1�B��(���nAĉ�A��6���nD�t$$A��1�D1�ȉ�A�����nD�t$��D1�1�C��&���nD�t$4�D��1�1�։�A�����nD�t$,��	1�1���A�����nD�|$��1�1�ʼn�A��6���n��1�1荜+���nȉ�A�����n��1�1�A���D���	1�1�։��1�1�ډ��A�A�A�D�WD�GD�OH�D$HdH3%(uH��X[]A\A]A^A_��Y���f���AWAVA��AUB��ATI��1�US�@H���G�����?ȋO@�ƉGD������)�ȉG��L�lA9�s#H��D��L��L��[]A\A]A^A_���I���݃�sv������tA�$A�E����M�oL���T$L������T$�)�A9�w����I�4,L������C��@D9�r��A)�I��_���f�I�$I�uM��H��I�EI�D,�I�D-�I)�M)�A�A��A���u���A��1�����I�<H�<D9�r��X����I�F�t2����A�$A�EA�D,�A�D-��-���A�D,�fA�D-�������AT�I��USH��H��H��dH�%(H�D$1�H��H���Z����C����?��7w|�8)�H��H�5+2����H�ߺH������H��L������H�{H�1�H��H�CPH)��KX���H�H�D$dH3%(uH��[]A\���x)����f���H�g�	j��g�H�G H�H�r�n<:�O�H�GH�RQ�h�H�GH��ك��[H�G�ff.��H�GE1�E1�fDD��E��A��A��H��H��L�	I��8F�L�	I��0D�H�L�	I��(D�H�L�	I�� D�H�L�	I��D�H�L�	I��D�H�L�	I��D�H�H�	�H�D9�w�Ð��H�؞�]���H�GHH�H��|6*)�bH�GH��p0ZY�H�GH�9Y���/H�GH�1��g&3gH�G H�Xh�J��H�G(H����d
.�H�G0H��O��H�GH�G@H�G8�ff.����H�ɼ�g�	jH�GHH�H�;�ʄ��g�H�GH�+���r�n<H�GH��6_:�O�H�GH�т�RQH�G H�l>+�h�H�G(H�k�A��كH�G0H�y!~��[H�G@H�G8�ff.��AWAVAUATUSH��hH�G8H�|$HH�T$PH���dH�%(H��$X1�H�H�D$@H�\$H�_H�\$H�_H�\$H�_H�\$ H�_ H�\$(H�_(H�\$0H�_0H��H�\$8��FD�FH��H��I��H��L	�D�F�L	�D�F�I��L	�D�F�I�� L	�D�F�I��(L	�D�F�I��0L	�D�F�I��8L	�H�G�H9�u�L��$�L��@H�2H��H��H�p�H9�u�I��L��f.�H�BpH�rH��H��I��H��I��H��L1�I��H1�H�B�HB@I��H�H��H��H��L1�H1�H�H�BxH9�u�H�D$@H�-�.L�\$8M���H�\$0H�L$(I�"�(ט/�BL�l$ L�L$I��L�T$H�t$�)f�L�eM��M��M��I��I��H��H��H��H��H��H��H��I��H��H��H!�H1�H��H��H1�H��H��L!�H1�H��H�H��H��I@�H��L�H1�H��L�M��H��M!�H1�L��L1�H!�L1�H�J�<(H�M9��b���H��H�|$Ht$LT$LL$ H�H�D$HHT$(HL$0H\$8L\$@H�8H�pL�PL�HH�P H�H(H�X0L�X8H��$XdH3%(uH��h[]A\A]A^A_��&���fD��AW��I��AVH��AUI��ATI��USH��H�G@I��I��A��H�H�G@sH�GH��D��D)�M�tPA9�sH��L��L��[]A\A]A^A_����݃�sy������tA�EA�����M�wPL��D�D$L���w���D�D$��D)�A9�w�k��I�t-L���Q��������D9�r��D��I�)��k���@I�EI�~L��H��I�I�D-�I�D.�I)�B�3L)����H��t����I�C�T ��"���A�EA�A�D-�A�D.��J���A�D-�fA�D.��9���@��UH��SH��H��(dH�%(H�D$1�H�F@H��H��H�H�T$H�VH��H�H�$��owz�p)�H��H�5i0�D���H��H���4���H��H��0���H�{H�1�Hǃ�H��H)�������H�H�D$dH3%(uH��([]�f���)�����f���AW��I��AVH��AUI��ATI��USH��H�G@I��I��A��H�H�G@sH�GH��D��D)�M�tPA9�sH��L��L��[]A\A]A^A_���݃�sy������tA�EA�����M�wPL��D�D$L���G���D�D$��D)�A9�w�k��I�t-L���!��������D9�r��D��I�)��k���@I�EI�~L��H��I�I�D-�I�D.�I)�B�3L)����H��t����I�C�T ��"���A�EA�A�D-�A�D.��J���A�D-�fA�D.��9���@��UH��SH��H��(dH�%(H�D$1�H�F@H��H��H�H�T$H�VH��H�H�$��owz�p)�H��H�59.�D���H��H���4���H��H��@�t���H�{H�1�Hǃ�H��H)�������H�H�D$dH3%(uH��([]�f���)�����f�AWAVAUATUSH���GH�|$(H�T$0H�J@dH�%(H��$x1ۋ�D$$�\$�_�\$�_�\$�_�\$�_�\$�_�\$�_H�׉\$ @�FD�FH��H��A����D	�D�F�D	�D�F�A��D	��G�H9�u�L�D$pL����2H��H���p�H9�u�I���L��@�B8�rH����A����
A��
��D1�A��1��B�B A��������D1�1�ȉB<H9�u��D$$H�-�+M��D�\$ �\$�L$A��/�BD�l$D�L$A��D�T$�t$�$�D�eE��E��E��A��A���H�����Ɖȉʉ�I������!�1Љ��1‰��D!�1���Љ��
A@���D�1���D�E���
E!�1�D��D1�!�D1��B�<(�M9�u����|$t$DT$DL$�H�D$(T$L$\$ D\$$�8�pD�PD�H�P�H�XD�XH��$xdH3%(uH�Ĉ[]A\A]A^A_��z�f.���AWAVA��AUB��ATI��1�US�@H���G �����?ȋO$@�ƉG D������)�ȉG$��L�l(A9�s#H��D��L��L��[]A\A]A^A_���I���݃�sv������tA�$A�E����M�o(L���T$L�����T$�)�A9�w����I�4,L�������C��@D9�r��A)�I��_���f�I�$I�uM��H��I�EI�D,�I�D-�I)�M)�A�A��A���u���A��1�����I�<H�<D9�r��X����I�F�t2����A�$A�EA�D,�A�D-��-���A�D,�fA�D-�������UH��SH��H��dH�%(H�D$1�H�F H�H�$�F ����?��7���8)�H�5�)H������H��H���
���H��H��H�K �H��H�����W��P����W��P��w��P��W�H9�u�H�{H�1�H��H�C`H)��Kh���H�H�D$dH3%(uH��[]�f.��x)��X������f.�D��H�#Eg����H�GH�H��ܺ�vT2H�G����H�#Eg����H�G H�H��ܺ�vT2H�GH�2Tv���H�GH��ͫ�gE#H�G�ff.����H�#Eg�����GH�H��ܺ�vT2H�G�����H�G���H�#Eg����H�G(H�H��ܺ�vT2H�GH�����2TvH�GH�����ͫ�H�GH�gE#-<H�G �ff.�S1�E1�f.�D��A��H��D�A��D�DD�A��D�D�A���|�	H��B�9�w�[�@1�fD�D�L����	��	��L��	ȉH��H��@u���AWH��AVAUATUSH��xD�PD�` D�D�hH�|$D�x�XD�H�hdH�<%(H�|$h1�H�|$ D�pD�X$�k���1��D$1�D�T$��E���[fDH��(L�5z'E��E���<H��'E�4A���H�(�\$D�\$�D�l$D�t$E��A��A��D��D��T� H��D1�A��
1�t� D�|$A�D��A�D���
��C�<D	�|$1�D��拢P�L$Dd$A��E�H���N���D�\$�T$D�׸D�\$��D$	A�A��a�L�
�&L�=�&E��D��E�A��|$E��L�5�'L�=-'D�d$��D�L$A�ىӋT$E�4E�<D��H��E��F�T� A��
A1�D�l$E!�A1�G���y�ZE�F�D� A�A��L$D��1�!�1�F��$�M\�L$DT$A��A��
A��A�H�� �@���A��A�!�|$�D$	A����l$�`�H��&A��A����B�+H��%�l$E��B�+H�B&�|$E��F�<+H�o%B�+I���\$��D��D�D$E��D� A��
A��D�d$A	�E1�A�����n���B�L� ��D$D��A��
��D�\$D	�1�D���>pm�L$E�A�A�I��0�D����D$D�t$A��A�1�l$�D$�A��D$�d�H�5�%H��$��E��F�<&H�5%E�ى�B�&H�5P%B�4&@�t$B�4"D��A��l$I��@�t$D��E��D�t$A��B�\� A1�E!�A1���
E��ܼ��|$D���D��A��
B��t$1�D�T$D!ɋt� 1�D��1�vmz�L$A�A��E�I��@�>���E��AD�l$�D$A��	�D�|$�_DL��#A��A��D��E�0H�
�$D�|$D���<1L�a$H�
�#A�Ӌ\$�1D�D$E��E��D�l$E�2H��D��|� ��D	�A��
1�D�L$��:N�S�A�D��1�A��L$D1�BT� C�<0��
D�|$�‰D$�H��P�P���H�D$D��D�d$D�|$x�|$D0DxXD`hPDXx Dh$H�D$hdH3%(uH��x[]A\A]A^A_���@��AWAVA��AUB��ATI��1�US�@H���G(�����?ȋO,@�ƉG(D������)�ȉG,��L�l0A9�s#H��D��L��L��[]A\A]A^A_����I���݃�sv������tA�$A�E����M�o0L���T$L�������T$�)�A9�w����I�4,L�������C��@D9�r��A)�I��_���f�I�$I�uM��H��I�EI�D,�I�D-�I)�M)�A�A��A���u���A��1�����I�<H�<D9�r��X����I�F�t2����A�$A�EA�D,�A�D-��-���A�D,�fA�D-�������UH��SH��H��dH�%(H�D$1�H�F(H�$�F(����?��7wz�8)�H��H�5� �$���H��H������H��H��(�4���H�{H�1�H��H�ChH)��Kp���H�H�D$dH3%(uH��[]���x)����f�AWH��AVE1�AUATUSH��xD�hD�HD�`�hH�|$D�D��dH�<%(H�|$h1�H�|$ ���A��D��1�E��D���D$���]f�H�!A��E��D��D�48H�D D�d$A���8H�� D�l$D���48H���8�D$D��A�ڋ\$E��t� H��E1�A��
E1�F\� D�L$E�A�A�(�L$���D	�A��
1�D�|$D��1拢P�L$A�A��E�H���M����t$��D�T$A�D�T$�\$�D$	A��A��[H�1 D��E��A��F�4H�\�t$�|$B�H��D�T$��F�<H����B�I���T$D��E��D��F�L� A��
1�D�l$D!�1�B���y�Z���B�L� B�D%�D$D��1�!�1�D��$�M\�L$DL$���
A�A�I�� �F�����A�!�|$�D$	A���D�t$�`fDH�-)A��A��D��B�l-H�
3D�t$E��B�)L�=�H�
XE���|$B�)@�l$�݉ËD$G�</I��E�ЋT� A��
A��D�T$A	�E1�A�����nA�A��B�L� A�4�T$D��A��
��D�\$D	�1�D��
�>pm�L$A�A�A�I��0�?����l$E���T$�D$D�t$A�1�D$�A��\f�H�YD��E����F�<#D�t$E��D��H�zE��B�#H��B�#�\$H��B�#I���\$��l$A��F�\� A1�E!�A1���
G��ܼ��|$D���D��A��
F�.�t$1�D�L$D!��t� 1�D��1�vmz�L$A�A��A�I��@�A���E��AD�l$�D$��	A�D�|$�`�H�iE��D��E��D�8H��D�l$E���8H��D�\$A���8H��8H���D$��D��D�|$D��F�L� ��	��
D1މT$B��N�S�A�D��A��D1�A��
C�4D1�t� D�D$�L$�L$����H��P�Q���H�D$D��D�d$D�D�|$D\$D�DXhA�pD`E��hDD�`�pD�PD�H�D$hdH3%(uH��x[]A\A]A^A_��x�����AWAVA��AUB��ATI��1�US�@H���G�����?ȋO@�ƉGD������)�ȉG��L�lA9�s#H��D��L��L��[]A\A]A^A_����I���݃�sv������tA�$A�E����M�oL���T$L�������T$�)�A9�w����I�4,L�������C��@D9�r��A)�I��_���f�I�$I�uM��H��I�EI�D,�I�D-�I)�M)�A�A��A���u���A��1�����I�<H�<D9�r��X����I�F�t2����A�$A�EA�D,�A�D-��-���A�D,�fA�D-�������UH��SH��H��dH�%(H�D$1�H�FH�$�F����?��7wz�8)�H��H�5�$���H��H������H��H����H�{H�1�H��H�CTH)��K\���H�H�D$dH3%(uH��[]���x)���"��f�AWH��A�AVA�AUATUSH��hD��hD�PD�`H�|$D�hD�@D�X�XdH�<%(H�|$X1�H�|$�G�1��1��I@L�=1H�=�E��A��E�47�<7E��D��H�
�L�=GE��A���1E�<7A�Љʼn�D��H��D1�D1�D1�D�!�D�D1��B�L���
拢PD��A�D����H���z���A�A�	�A�A��LH��E��E��A��F�,H���B�H�fF�4H��F�<D��I��A��ʼn��B�|�D1�!�D1֍�>�y�ZB�|����D����	�D1ٍ�9$�M\A�D��D����I�� �r���A�!A�	�A�A��KH�
9L�=�A��E��F�,	G�4��A��H�
VL�=���B�	G�<��I��D���F�d���	�1�F��#���nE�F�T�A�ĉ�D1�!�D1�B���>pmA�D��D����I��0�q���A�1A��A�A��Jf�H�
�L�"�ʼn�F�,G�4H�
�D��L�CB�E��G�<A��I������D��E��F�\�A1�A!�A1�G��ܼ�A��A1�A�A1�FL�A��D��E�A�I��@�x���H�L$DYDayQDIYqH�D$XdH3%(uH��h[]A\A]A^A_�����D��AWAVA��AUB��ATI��1�US�@H���G �����?ȋO$@�ƉG D������)�ȉG$��L�l(A9�s#H��D��L��L��[]A\A]A^A_����I���݃�sv������tA�$A�E����M�o(L���T$L�������T$�)�A9�w����I�4,L�������C��@D9�r��A)�I��_���f�I�$I�uM��H��I�EI�D,�I�D-�I)�M)�A�A��A���u���A��1�����I�<H�<D9�r��X����I�F�t2����A�$A�EA�D,�A�D-��-���A�D,�fA�D-�������UH��SH��H��dH�%(H�D$1�H�F H�$�F ����?��7wz�8)�H��H�5��$���H��H������H��H�� ��H�{H�1�H��H�C`H)��Kh���H�H�D$dH3%(uH��[]���x)�����f�AWA�AVA�AUE1�ATE1�USH��hD�D�_D�OD�WH�|$H�|$dH�%(H�\$X1�����D��D��D��D���K�H�
L�=�E�Љ�F�,!G�4'E�ʉ�H�
L�=���E��B�!G�<'��A��D��I��D1�D1�BT�D�F�D��‰�1�!�1�B��拢P�D������I��u�A�A�	�A�A��Rf.�H�=YE��E��A��F�,'H�=�D��B�'H�=�F�4'H�=	F�<'��I���Ɖ؉�E��B�l�E1�A!�E1�E��(�y�ZE�F�T�A�����	�1�B��$�M\�D���lj�I�� �q����!A�	�A�A��KH�5�E��A��D��D�,>H�5�E���>H�5&D�4>H�5ZD�<>��H���؉�D��A��F�d�A��E	�E1�G��"���nE�F�L�A�‰�1�!�1�B��	�>pm�D����A��H��0�p����1A��A�A��Kf�H��A��D��E��D�0H�$E���0H�vD�40H��D�<0��H����D��A��D��F�L�D1�!�D1�F��ܼ�D��1�E�1�B|�A��D�����H��@u�H�D$A�A��E�DPD@PD D�@�PD�`D�H�D$XdH3%(uH��h[]A\A]A^A_��P����AWAVA��AUB��ATI��1�US�@H���G�����?ȋO@�ƉGD������)�ȉG��L�lA9�s#H��D��L��L��[]A\A]A^A_����I���݃�sv������tA�$A�E����M�oL���T$L�������T$�)�A9�w����I�4,L�������C��@D9�r��A)�I��_���f�I�$I�uM��H��I�EI�D,�I�D-�I)�M)�A�A��A���u���A��1�����I�<H�<D9�r��X����I�F�t2����A�$A�EA�D,�A�D-��-���A�D,�fA�D-�������UH��SH��H��dH�%(H�D$1�H�FH�$�F����?��7wz�8)�H��H�5�
�$���H��H������H��H����H�{H�1�H��H�CPH)��KX���H�H�D$dH3%(uH��[]���x)�����f�S1�E1�f.�D��A��A��H��D�F���|D�A��D�D�	���LH��9�w�[�fD��H��j?$���H�G H�H�.�DspH�GH�"8	��1�)H�GH���.�lN�H�G��f���H�
Ƈ�H����ff.���H��j?$���H�G H�H�.�DspH�GH�"8	��1�)H�GH���.�lN�H�G��f���H��Ƈ�H����ff.���H��j?$���H�G H�H�.�DspH�GH�"8	��1�)H�GH���.�lN�H�G��f���H�*Ƈ�H����ff.���H��j?$���H�G H�H�.�DspH�GH�"8	��1�)H�GH���.�lN�H�G��f���H��Ƈ�H����ff.���H��j?$���H�G H�H�.�DspH�GH�"8	��1�)H�GH���.�lN�H�G�f���H�JƇ�H����ff.���H��j?$���H�G H�H�.�DspH�GH�"8	��1�)H�GH���.�lN�H�G��f���H�ZƇ�H����ff.���H��j?$���H�G H�H�.�DspH�GH�"8	��1�)H�GH���.�lN�H�G��f���H��Ƈ�H����ff.���H��j?$���H�G H�H�.�DspH�GH�"8	��1�)H�GH���.�lN�H�G��f���H�zƇ�H����ff.���H��j?$���H�G H�H�.�DspH�GH�"8	��1�)H�GH���.�lN�H�G��f���H�
Ƈ�H����ff.���H��j?$���H�G H�H�.�DspH�GH�"8	��1�)H�GH���.�lN�H�G�f���H��Ƈ�H����ff.���H��j?$���H�G H�H�.�DspH�GH�"8	��1�)H�GH���.�lN�H�G��f���H�z
Ƈ�H����ff.���H��j?$���H�G H�H�.�DspH�GH�"8	��1�)H�GH���.�lN�H�G��f���H�

Ƈ�H����ff.���H��j?$���H�G H�H�.�DspH�GH�"8	��1�)H�GH���.�lN�H�G��f���H��	Ƈ�H����ff.���H��j?$���H�G H�H�.�DspH�GH�"8	��1�)H�GH���.�lN�H�G��f���H�*	Ƈ�H����ff.���H��j?$���H�G H�H�.�DspH�GH�"8	��1�)H�GH���.�lN�H�G�f���H��Ƈ�H����ff.���AWA��AVB��AUI��1�ATUS��H���G �����ȋO$@�ƉG D��������)�ȉG$��L�t(A9�s#H��D��L��L��[]A\A]A^A_�����H��A�܃�su������tA�EA�����L�u(�T$H��L������T$��)�A9�w�i�A��K�t%H��������D9�r��A)�I��a���@I�EI�~L��H��I�K�D%�K�D&�I)�B�3L)����H��x����M�F�|:�����A�EA�C�D%�C�D&��N���C�D%�fC�D&��=���@��ATUH��SH��H�� H�� ���dH�%(H�D$1����H�|$L�d$���‰�f����8���L$	к���D$�J����C �vH��H�5x����?)�����H�ߺ
L������K�C�{�s��A��A������A��D	�A��A���D	�D��D	�A��S��A������D	�D��D	�A��A����D	�S��D�����D	�A�������%�A���	������H��A���	�H��E	��A��	�D	�S��U���H�{H�1�Hǃ�H��H)�������H�H�D$dH3%(u	H�� []A\����ff.����ATUH��SH��H�� H�� ���dH�%(H�D$1����H�|$L�d$���‰�f����8���L$	к���D$����C �vH��H�5�	����?)��[���H�ߺ
L���K����C�K�S�Ɖρ�����	��ׁ��	����s�Ɓ�����	��ׁ�	����s�Ɓ����	��׃�?	���s�ƃ�?�������?	���	ȁ�����	к	���
H���sH����H�{H�1�Hǃ�H��H)�������H�H�D$dH3%(u	H�� []A\��r��f���ATUH��SH��H�� H�� ���dH�%(H�D$1����H�|$L�d$���‰�f����8���L$	к���D$�
�C �vH��H�58����?)�����H�ߺ
L������C�SH���ց�����	���K�������	���K�������	���
K��������	�ց����K������	Ё���	�KH���C�H�{H�1�Hǃ�H��H)�������H�H�D$dH3%(u	H�� []A\����f.���ATUH��SH��H�� H�� ���dH�%(H�D$1����H�|$L�d$���‰�f����8���L$	к���D$��C �vH��H�5�����?)��K���H�ߺ
L���;����CH��H��ƒ�S�����S���	��S���
��S�����S�����S�����H�{H�1�Hǃ�H��H)�������H�H�D$dH3%(u	H�� []A\����ff.���ATUH��SH��H�� H�� ���dH�%(H�D$1����H�|$L�d$���‰�f����8���L$	к���D$�J�C �vH��H�5x����?)�����H�ߺ
L�����H��H�� ��H�{H�1�Hǃ�H��H)�������H�H�D$dH3%(u	H�� []A\�����f�1�fD�D�L����	��	��L��	ȉH��H���u��D��AWAVAUATUSH��H���H�<$H�l$0H��dH�%(H��$�1����H�t$1�H��H�t$D�H���T0�H�� u�1�A�E1��A�A����L�=�L�5&L�-_�L�%��KfDH�IM�WM�VH���H�PH�lH�<SH�4PH�[�M�\UH�PM�T�L��D�#D��|�B�\�B�t�A��!�B#t�A��1�!�A��1�1�1����B�D����D�H��B�D�H�� �`�����!(E�1�1�A��A�A���A�H��A��L�5�L�-��m@H�=��H��M�VE�d�L�WH�=<�H����SL�WH���H�=�H�PH�5R�H�SH�<WL�=��H�4VM�WD�|��\�H���l�F�T��D�F�\��ߋL�D!׉�H��!��1�D�߃�1�D!�!�1�1�D��!�!ˉ�D!�1�A!ʉ�D1�D1�D!�1����B�D���BD�0�D�D�H�� �����9�0�A�1�1ҽE��A�ĿL��H��I��A�A�A�D���L�=�L�5W��mDH�I�M�WM�VH�=��H�PH���H�,WH�5 �H�=�L�PH�M�H�PL�WH�<�H�<VH�5pH�P�4�D�d�D�l�B�L��\�E!�D�D���H��D��D�l�B�l��׃�A!�!�D!�D1�!�D1�A!�1�D1�1����B�D���BD�0��D�H�� �'���1ɺ�S2zA�1����A�A�A�A�L�=:��x�H��H�b�A��L�KH���H�4HH�F�H�<KH���H�HL�KH��L�KH���L�KH�Q�H�,KH���L�$KF�t��\�F�T�F�\�D�l�D���F�L�D!�D!�D�D���1�D���H��D!�D1΃�1�D��D!�1�D��D!�1�D��D!�1�D��E1�!�D!�D!�A!�1�D��D!�D1�E!�A!�t�D1�D1���Bt�0���ЉD�H�� ����P�;��1�1ҹA��A�A�H��A���A���H��L�=Q�L�5J��p�H���H�5r�M�WE�,�H�,SH��L�VH�5���SH���H���L�VH�<SH�5�H�PH�"�H�SL�VD�d�H���t��׋L��D���H��F�\��\�����D!�D!�!�!�D!�1�B�l�D!�D1�!�1�1�1����B�D���BD�0�D�D�H�� �&���H�$H�T$H�p f��
H��H��H9�u�H��$�dH3%(uH���[]A\A]A^A_��չ��D��AWAVAUATUSH��H���H�<$H�l$0H��dH�%(H��$�1�����H�t$1�H��H�t$D�H���T0�H�� u�1�A�E1ۿA�A����L�==�L�5��L�-/�L�%h��KfDH�Y�M�WM�VH���H�PH���H�<SH�4PH���M�\UH�PM�T�L��D�#D��|�B�\�B�t�A��!�B#t�A��1�!�A��1�1�1����B�D����D�H��B�D�H�� �`�����!(E�1�1�A��A�A���A�H��A��L�5=�L�-���m@H�=��H��M�VE�d�L�WH�=�H����SL�WH���H�=.�H�PH�5�H�SH�<WL�=�H�4VM�WD�|��\�H���l�F�T��D�F�\��ߋL�D!׉�H��!��1�D�߃�1�D!�!�1�1�D��!�!ˉ�D!�1�A!ʉ�D1�D1�D!�1����B�D���BD�0�D�D�H�� �����9�0�A�1�1ҾE��A��L��H��A��A�A���D��L�=2�L�5��I���mDH�Y�M�WM�VH�=�H�PH���H�,WH�=p�L�PH�$�L�WH�5�H�PH�=L�H���4�H�PH�<WD�d�D�l�B�L��\�E!�D�D���H��D��D�l�B�l��׃�A!�!�D!�D1�!�D1�A!�1�D1�1����B�D���BD�0��D�H�� �'���1ɺ�S2zA�1��A�A�A�A���L�=���x�H�y�H�r�L�KH���H�4HH���H�<KH���H�,JH��L�KH���H�HL�KH���A��L�KH��L�$KF�t��\�F�T�F�\�D�l�D���F�L�D!�D!�D�D���1�D���H��D!�D1΃�1�D��D!�1�D��D!�1�D��D!�1�D��E1�!�D!�D!�A!�1�D��D!�D1�E!�A!�t�D1�D1���Bt�0���ЉD�H�� ���H�$H�T$H�p D�
H��H��H9�u�H��$�dH3%(uH���[]A\A]A^A_��]���ff.�f���AWAVAUATUSH��H���H�<$H�l$0H��dH�%(H��$�1��T�H�t$1�H��H�t$D�H���T0�H�� u�1�A�A�1�A�A����L�=}�L�5v�L�-��L�%���KfDH��M�WM�VH���H�PH���H�<SH�4PH���M�\UH�PM�T�L��D�#D��|�B�\�B�t�A��!�B#t�A��1�!�A��1�1�1����B�D����D�H��B�D�H�� �`�����!(E�1�1�A��A�A���A�H��A��L�5��L�-v��m@H�i�H�5��M�VE�d��SH�VH�5H�H���L�VH�5��H�PL�=��L�VH�5]�M�WH�<VH�5��H�4VD�|��\�H���l�F�T��D�F�\��ߋL�D!׉�H��!��1�D�߃�1�D!�!�1�1�D��!�!ˉ�D!�1�A!ʉ�D1�D1�D!�1����B�D���BD�0�D�D�H�� �����9�0�A�1�1���E��A��L��H��I��A�A�A�D���L�=��L�5'��mDH��M�WM�VH�=�H�PH�<�H�,WH�5��L�PH�d�L�VH�=�H�PH�5L�H�<WH���H�P�4�D�d�D�l�B�L��\�E!�D�D���H��D��D�l�B�l��׃�A!�!�D!�D1�!�D1�A!�1�D1�1����B�D���BD�0��D�H�� �'���H�$H�T$H�p f.��
H��H��H9�u�H��$�dH3%(uH���[]A\A]A^A_��5���D��H��ͫ�gE#f�H�H�2Tv���H�GH���ô���GG(G8GHGXH�G�f.���H��ͫ�gE#f�H�H�2Tv���H�GH���ô���GG(G8GHGX�O H�G�fDAWAVAUATUS�W �у���H�|$���H��HG�A�����4	���W ���D!H�L!�ƒ��G&<8��%�@)�Hc�H��t1��H��H9�r�H�D$�H�HH�x!L�L�`9L�hAL�XYH�L$�H�HL�H)L�T$�L�@1L�pIH�L$�H1�L�xQH���H��H����H�� ��@��H���H3ȉ����H3�������H3��L��I��H)щ�I����L1�H���J3�H3����I��H����H���L1�I��HT$�I�� H�4�A��H���H3���@��H3��D���@��H3��L��H)։�H����L1�H���H3���H3��H��L��I����I�� H���H1�@��H�H��A��H���H3���@��H3��D���@��H3��L��H)Ӊ�H��H�\$���H��H���H3���L����H3��H3��H�\$�H�L1�H��I����I�� A��H���H3���@��H3��D���@��H3��L��H)щ�H����L1�H���H3���H3��H��L��I����I�� H���H1���H�H�4�A��H���H3���@��H3��D���@��H3��L��H)։��H��L1�H���H3���H3��H��L��I����I�� H���H1�@��H�H��A��H���H3���@��H3��D���@��H3��L��H)Ӊ�H��H�\$���H��H���H3���L����H3��H3��H�\$�H�L1�H��I����I�� A��H���H3���@��H3��D���@��H3��L��H)щ�H����H���H3���H3��H��L����H���H1�L1�I��H���H�L$�I�� H�4�A��H���H3���@��H3��D���@��H3��L��H)։�H����H���H3���L����H3��L��M��H3��H�H��H���������L1�H)�I1�L��M�H��H��L1�H)�I1�L��M�H��H��L1�I)�M1�L��L�H��H��H1�I)�H1�M1�D��H��L��L���H��H��H1�I)�H��ͫ�gE#M1�O�<7L1�I)�M��I��I�� A��H���J3�A��A��E��J3��E��A��E��J3��M��H)Ӊ�I����L1�H���J3�D��H3��L��I����I�� H3��H�L$�H�H��H)�A��H���J3�A��A��E��J3��E��H�\$�A��E��J3��M��H)ʉ����I��L1�H���J3�D��H3��L��I����I�� H3����H�H��H)�A��H���J34�A��A��E��J3��E��A��E��J3��M��H)��I����H1�H���J34�D��H3��L��I����I�� H3��Ht$�H�L$�H��H)�A��H���J34�A��A��E��J3��E��A��E��J3��M��H)��I�����H���J34�L1�H3��L��I��D����I�� H3����H�H��H)�A��H���J34�A��A��E��J3��E��A��E��J3��M��H)��I����L1�H���J34�D��H3��L��I����I�� H3��Ht$�H�T$�H��H)�A��H���J34�A��A��E��J3��E��A��E��J3��M��H)��I�����H���J34�H3��L����H3��L1�H�I��D����I�� H��H)�A��H���J34�A��A��E��J3��E��A��E��J3��M��H)��I����L1�H���J34�D��H3��L��I����I�� H3��Ht$�H�\$�H��H)�A��H���J34�A��A��E��J3��E��A��E��J3��M��H)��I�����H���J34�H3��L��M����H3��H�H�4�H)�H���������L1�H�t$�H)�I1�L��M�H��H��L1�H)�I1�L��M�H��H��L1�I)�M1�M��M��L��L�H��H1�H��A����H1�A��I)�M1�L��L�H��H��H1�I)�M1�K�<I��H��I�� H��ͫ�gE#H1�H�\$���I)�A��H���H3�A��E��A��H3��A��M��H3��H�t$�I��H)Ή��L1�H���J3�D��H3��L��I����I�� H3��HL$�H��A��H���J3�A��A��E��J3��E��A��E��J3��M��H)ˉ�I��I��H�����H���J3�M1�H3��L��E��L�t$���H3��L��H���L�$�L��H�� ��H���J3�E��A��E��J3��A��A��E��J3��I����I)�D��I����H���J3�I1�H3��M��L��H3��I�� H�A����H�4�A��M��H���H3�D��I������H3��D�����H3��D��H)��H��L1�H���J3�H3��L��I��D����I�� H3��HL$�H��A��H���J3�A��A��E��J3��E��A��E��J3��M��H)ˉ�I��H�\$�H�����H���J3�H3��L����H3��H�\$�L�L1�L�$�I��D��H�\$�I�� A��H���J3�A��A��E��J3��E��A��E��J3��M��I)̉�I�����L3d$�H���J3�E��H3��L��M����I�� H3��L��H�A����H���J34�E��H��A��E��J3��E��A��E��J3��M��H)�D��I����L1�H���J34�D��H3��L��I����I�� H3��Ht$�H��A��H���J34�A��A��E��J3��E��A��E��J3��M��H)��I����H�\$���H���J34�L�t$�H3��L����E�v H3��L�A��H�4�D�t$���I���������H�\$�M1�L)�I1�M��M�I��I��M1�L)�I1�M��O�4I��I��M1�L)�I1�I��M��L�I��I��I1�H3|$�M)�H��M1�D��H�\$�M��L�I��I��I1�M)�I��I�� M1�A��M�H���J3<�A��A��E��J3��E��A��E��J3��M��H)������I��L1�H���J3<�I��H3��L��I�� D����H3��H��H�A����H���J3�A��H�<�A��E��J3��E��A��E��J3��M��H)ω�I����I1�H���J3�H3��L��E����H3��L��HL$�H�� H����H���J3<�E��A��E��J3��A��A��E��J3��E��H)�H��A����I��H��L��N���L3���L��L3��L3��I�H1�H��K�4�D����H�� ��H���J3<�A��A��E��J3��A��A��E��J3��I����H)���I��I1��H���J3<�H3��H3��L��H�� I�K�<���E��I��H���J34�E��A��E��J3��A��A��E��J3��E��H)�H��A��L��H��J���I1�H3,���L��A����H3��H3��L��H�L��L��H�� ��H���H34�D����@��H3�����@��H3��H����I)�D��H��M1��H���H34���L��H�� H3��A��H3��I���H���H34�D��K���@��H3�����@��H3��H��H)�D��H��I���L��H���H34���L��H3����H3��I�H��ͫ�gE#I1�K��M)�L1�H��D��H�� @��H���J34�A��A��E��J3��A��A��E��J3��I��H)��I��H�\$�����H���J34�H3��H����H3��H��L�H�4�H�D$�H3t$�f�H+L$�H�\$�H�t$�H\$�H�L$�H�\$�H�0H�HH�XH�@Q@!@1@AH�D$�L�D$�H�\$�H�H!L�xH�h9L�hAI1�L�pIH�x)L�xYM��H�p1L�`QE��I�� H�L$�L��A����H���J3�E��A��E��J3��E��A��E��J3��M��H)�D��I����H1�H���J3�I��D��H3��L��I�� ��H3��HD$���L��A��H���J3�A��A��E��J3��E��A��E��J3��M��I)���I����I1�H���J3�E��H3��L��M����I�� H3��L��L���L��A��H���J3�E��A��E��J3��E��H�l$�A��E��J3��M��I)�D��I����I1�H���J3�E��H3��L��M����I�� H3��D��H��H��A��H���J3�D��D���J3��D��L��J3��H��H)�D����L1�H���H3�L��D����H3��L��I����I�� H3����L��L��A��H���J3�D��D���J3��D��L��J3��I)����H��M1�H���H3���E��H3��L��M����I�� H3��D��L���L��A��H���J3�D��D���J3��D��L��J3��H��I)�D���M1�H���H3�L��E����H3��L��M����I�� H3��D��H��H��A��H���J3�D��D���J3��D��L��J3��H��H)�D����H���H3�L����H3��L����H3��L1�I��Lȉ�D��I�� ��L��A��H���J3�D��D���J3��D��L��J3��H��L�\$�I)����H���H3���H3��L����H3��H�L$�L�M��H�,�H���������L1�H)�H1�H��H�H��H��H1�I)�M1�L��O�H��H��L1�I)�M1�L��L�H��H�L$�H��H1�H)�H1�I1�H��I�E��L��H����H��L1�I)�H��ͫ�gE#M1�O�4M��I�� L1�I)�A��H���J3�E��A��E��J3��E��A��E��J3��M��H)�D��I����H1�H���J3�D��H3��L��I����I�� H3��H��H���H��H)�A��H���J3�A��A��E��J3��E��A��E��J3��M��H)É��I��H1�H���J3�D��H3��L��I����I�� H3����I�J��L)�E��N���N3�A��A��E��N3��E��A��E��N3��M��L)�A��I��A��L1�N���N3�D��L3��L��I����I�� L3����L�L��I)�A��H���J3,�A��A��E��J3��E��A��E��J3��M��I)��I����H���J3,�H3��L��M1���M��E��H3��I�� L��H���H��H)�A��H���J3,�E��A��E��J3��E��A��E��J3��M��H)�D��I����L1�H���J3,�D��H3��L��I����I�� H3����H�H��H)�A��H���J3,�A��A��E��J3��E��A��E��J3��M��H)��I����H���J3,�H3��L����H3��I�L1�I��J�,�D����I�� L)�E��N���N3�A��A��E��N3��E��A��E��N3��M��L)�A��I��A��L1�N���N3�D��L3��L��I����I�� L3��H��I���J��L)�E��N���N3�A��A��E��N3��E��A��E��N3��M��L)�A��I��A��N���N3�L3��L��I��ͫ�gE#��L3��H�L$�I�J��L)�I���������M1�L)�H1�I��H�I��I��I1�M)�M1�M��M�I��I��M1�M)�M1�M��N�<9M��L1�L�|$�I��I��M1�L)�H1�I��I�I��I��M1�M)�I��M1�I�� K�D��I1�H�L$���M)�E��N���N3$�A��A��E��N3��E��A��E��N3��M��L)�A��A��I��H1�N���N3$�D��L3��L��I����I�� L3����I�A��H���J3,�A��O�$�A��E��J3��E��A��E��J3��M��I)��I����I1�H���J3,�E��H3��L����H3��L��H���L�l�L��H�� @��H���J3�E��A��E��J3��A��A��E��J3��I��I)�D��I����H���J3�H3��H����H3��M1�M��H�L��I�� H�,�A����A��M��H���H3�D��I������H3��D�����H3��D���H)�H�O�H���J3�L1�H3��L��I��D����I�� H3��H��L���L�$�A��H���J3�A��A��E��J3��E��A��E��J3��M��I)܉�I����M1�H���J3�E��H3��L��M����I�� H3��L��L���L�,�A��H���J3�E��A��E��J3��E��A��E��J3��M��I)�D��I��L3l$���H���J3�E��H3��L��M����I�� H3��D��H��A��H���J3,�D��D���J3��H��D��L��J3��H��H)�D���L1�H���H3,�L��D����H3��L��I����I�� H3����L��E��N���N3$�D��D���N3��H�l�D��L��N3��H��L)�A��A��N���L3$���L3��L����L3��M�|$�K����H�L$�L�|$�I���������M1�L)�H1�I��H�I��I��I1�M)�M1�M��M�I��I��M1�M)�M1�M��M��L�I��I��I1�H1�L)�H��D��I��H1�H�� I��I�I��I��M1�M)�D��N���N3,�A��M1�A��M�E��N3��A��A��E��N3��I��L)�I�Չ����I��L1�H���J3�D��H3��H����H��H3����H�H��H��H�� ��H���J3,�A��A��E��J3��A��A��E��J3��I����H)�I��H1��H��H���J3,�H�� H3��H3��I�/��@��H���H3�H���@��H3�����@��H3����H)�H�����H��L���L3,�H����L3��L3��L�I1�L��A��H��H�� ��H���H3<�D�����H3�������H3��D��H)�H�����H��I��L��H���M1�H3���H3��H3��L��A��H�� H�L����H�4�H���H3�D���@��H3�����@��H3��H����H)�D��H��I1��H���H3���L��H3��H�� A��H3��I���H���H3�D��K���@��H3�����@��H3��H����H)�D��H����H�<�L1�H���H1�L����H3��H��H�� H��H3����I�@��H���H3���K����@��H3������@��H3��H��H)Ӊ�H����H���H3���H3��H��H����H��ͫ�gE#I1�H3��M)�I�L1�K�,�H����H�� @��H���H3����@��H3������@��H3��H��H)Չ�H����H���H3���H3��H��H����H���H1�H��H�H��H�D$�H+\$�H�t$�H�XH�\$�H1�H�H�0H�X[]A\A]A^A_ø81�)�rzH�q��H�H�D�H��H)�ȃ��r��1҉у�H�<9�r�H�D$�H�
��H �L$����L$�H�H�L$�H�HH�@H�L$�H�D$�����uj��t���t���1�f�D��fD�Ҹ)Љ�t1��ƃ��19�r�H�\$��S �Ѓ����������	ʈS ��H�L!�k������D��<���D��UH��H��SH��H������H�H�{H��H��8�EH�H��0�EH�H��(�EH�H�� �EH�H���EH�H���EH�H���EH��E�C�E�C�E	H�CH��(�E
�C�EH�CH���EH�CH���E
H�CH���EH�C�E1�H�H�C`H)��Kh���H�H��[]�f���UH��H��SH��H�����H�H�{H��H��8�EH�H��0�EH�H��(�EH�H�� �EH�H���EH�H���EH�H���EH��E�C�E�C�E	H�CH��(�E
�C�EH�CH���EH�CH���E
H�CH���EH�C�E�C�E�C�EH�CH��(�E�C�E1�H�H�C`H)��Kh���H�H��[]�f.���UH��H��SH��H�����H�H�{H��H��8�EH�H��0�EH�H��(�EH�H�� �EH�H���EH�H���EH�H���EH��E�C�E�C�E	H�CH��(�E
�C�EH�CH���EH�CH���E
H�CH���EH�C�E�C�E�C�EH�CH��(�E�C�EH�CH���EH�CH���EH�CH���EH�C�E1�H�H�C`H)��Kh���H�H��[]�f���AWAVAUATUSH��xH�|$� H�t$P��H�T$X����H�H��?�~(��?H�D$hH�D$H��!H�D$`@����H�D$(@H�L$PE1�H�|$XH9|$(�<H�D$L�-��M��H�@H�D$ L���
�H�T$(HD$PH�L$`�o	�oPQ�oX Y �o`0H�D$a0H�X!H�HH�pQ)$$H�8L�HL�P)H�L$@H1�L�X1H�h9H�\$H��H�� L�xAL�`IH�4$����H�|$0L�@YI���I3T���L�L$8��@��I3�����@��I3��H)׉�H��H�����H��I���L1�I3T���H��I3��H����I3��H�� L�D��H��@��I���K3T�A��A��E��K3��A��A��E��K3��I��H)щ�I����L1�I���K3T�D��I3��H������I3��H��H�� H�H��@��I���K3T�A��A��E��K3��A��A��E��K3��I��H)Ӊ�I����H1�I���K3T�D��I3��H������I3��H��H�� H�H�4�@��I���K3T�A��A��E��K3��A��A��E��K3��I��H)։�I����L1�I���K3T�D��I3��H����H��I3��H����H�� H�H��@��I���K3T�A��A��E��K3��A��A��E��K3��I��H)щ�I����L1�I���K3T�D��L�d$HI3��H������I3��H��H�� H�H��@��I���K3T�A��A��E��K3��A��A��E��K3��I��H)Ӊ�I��H3$��I���K3T�I3��H��L�L$H��I3��H��H�H�� H��L�$�@����I���I3T���H���@��I3������@��I3��H����I)ԉ�H����I���I3T���I3��M1�I3��H�L��A��L��H�� H��H����I���I3L�D���@��I3������@��I3��H��H)�D��H����I���I3L���H����I3��H�D$L��I3��I��H�H��H���������L1�H)�H1�H��I�4;H��H��H1�I)�L��L�<$L1�I��I�I��I��M1�M)�M1�M��M��L�I��H�D$L��H��H1�H)�H1�H1�I��I�I��I��M1�L)�I1�H��K�I��H��ͫ�gE#L1�L�<$I)�H��M��H�� I��E����L��I���K3T�E����A��E��K3��A��A��E��K3��I����H)�D��I����H1�I���K3T�I��I3��I�� ��I3��I�A��J��I���L)�D��K3L�A��A��E��K3��E��A��E��K3��M��H)ʉ��I��H1�I���K3L�D��I3��L��I����I�� I3����I�J��L)�E��O���O3D�A��A��E��O3��E��A��E��O3��M��L)�A��I��A��L1�O���O3D�D��M3��L��I����I�� M3����I�J��L)�E��O���O3D�A��A��E��O3��E��A��E��O3��M��L)�A��I��A��O���O3D�H1�M3��L��I��D����I�� M3����I�J��L)�E��O���O3D�A��A��E��O3��E��A��E��O3��M��L)�A��I��A��L1�O���O3D�D��M3��L��I����I�� M3����I�J��L)�E��O���O3D�A��A��E��O3��E��A��E��O3��M��L)�A��I��A��O���O3D�M3��L����M3��H3$I�I��D����I�� J��L)�E��O���O3D�A��A��E��O3��E��A��E��O3��M��L)�A��I��A��L1�O���O3D�D��M3��L��I����I�� M3����I�J��L)�E��O���O3D�A��A��E��O3��E��A��E��O3��M��L)�A��I��A��O���O3D�M3��L��L�$��M3��H�D$L�L�$�I)�H���������L1�L�d$HH)�H1�H��H�H��H��H1�I)�H��L1�I��I�I��I��M1�M)�M��M1�M��N�$I��L1�L�d$L��H��L1�D��H)�H1�I��I�I��L��A��H��A��L1�H)�I1�K�I��ͫ�gE#I1�H�$��M)�I��I�� L��E��O���O3\�E��A��A��O3��E��I��O3��L�d$HM)�A��I��A��I1�O���O3\�E��M3��H����L��M3����I�K��M��I�� L��E��O���O3\�E��A��E��O3��A��A��E��O3��I��L)�E��I��A��H1�O���O3\�D��M3��H������M3��I�K�,�I��I�� A��I���K3T�A��A��E��K3��E��A��E��K3��M��H)Չ�I����I���K3T�I3��L��L1���D��I3��H��L�I����I�� L��A��I���K3T�A��A��E��K3��E��L�-��A��E��K3��M��I)Ӊ�I����I1�I���K3�E��I3��L��M����I�� I3��L��H���H��A��I���K3�E��A��E��K3��E��A��E��K3��M��H)�D��I����L1�I���K3�D��I3��L��I����I3����H�I�� H�,�A��I���K3�A��A��E��K3��E��A��E��K3��M��H)Չ�I��H3,$��I���K3�D��I3��L��I����I�� I3����L��E��O���O3�D��D���O3��H��D��L��O3��H��L)�A��A��L1�O���M3�H��D����M3��L��I����I�� M3����I��A��I���K3�D��D��K3����O��D��L��K3��H��I)ۉ��I���I3���I3��L����I3��H�H�l$H��E �nH�D$L�<$H���������L1�H)�H1�H��H�H��H��H1�I)�L1�H��I�H��H��L1�I)�M1�L��M��L�I��I��I1�L1�L)�I��D��H1�I�� I��I�I��I��M1�L)�E��O���O3$�A��I1�A��L�H�$��E��O3��E��A��E��O3��M��L)�I�܉��I��L1�I���K3�D��I3��L����I3��H��H���H��H��H�� D��O���O3�A��A��E��O3��A��A��E��O3��I����L)�A��I��H1�A��O���H��O3�M3��H�� H��M3��I�@��K��D��O���M3މ����M3�������M3����L)��I����I��M�����O3$�M3��M3��I1�L��E��I�L��H�� K�<�����I���K3�E��A��E��K3��A��A��E��K3��I����H)�D��I����I���K3�H�$I3��I3��H1�H�H����H��H�� ��I���I3����@��I3�����@��I3��H����H)‰�H����I1�I���I3���A��I3��I3��L��L�H�4�L��H�� ��I���I3�D���@��I3�����@��I3��D��H)�H�����H��I���I3<���I3��I3��H�H��H1�H��H����H�� ��I���I3����@��I3�����@��I3��H����H)‰�H����I���I3���I3��I3��I�H��ͫ�gE#H1�O��I)�L1�H����H�� ��I���I3����@��I3�����@��I3��H����I)É�H����I���I3���I3��I3��H�H��H�D$H+T$8H�D$ H�L$ H3\$0L\$@H�PH�L�XH�HH�D$(H�P@H;T$X���H�L$PH�H�|$h�@H�t$E1�H)�H�t>!���7������H�D$h���d���H�|$h����H�L$�D$h�y ���@�<$��	ЈA H��x[]A\A]A^A_�A�@H�D$A)�Mc�H�D!I����H�|$PH�HH��H�H�J�T?�J�T8�H)�H)�L�H��H��rH��1�H�4H�4H��H9�r�H�D$�x H�D$H�HH�p!H�hAL�L�p9L�X)H�L$(H�HL�P1H�l$ L�`IL�hQH�t$H�L$8H1�H�hYH��A����L�L$0H�� A��H�,$��H����H�5�H���H3�A��A��A��H3��A��I����H3��L��I��H)։�L1��H���J3�I��D��I�� H3��H3��HT$(H��A��H���J3�A��A��E��J3��E��A��E��J3��M��H)Ӊ�I��H��H�����H���J3�L1�H3��L��I��D����I�� H3��H��H���H��A��H���J3�A��A��E��J3��E��A��E��J3��M��H)щ�I����L1�H���J3�D��H3��L��I����I�� H3����H�H�4�A��H���J3�A��A��E��J3��E��A��E��J3��M��H)։�I����H���J3�H3��L����H3��H�H�l$ H��H1�I��D��I�� A��H���J3�A��A��E��J3��E��A��E��J3��M��H)Ӊ�H�\$ H�����I��H���J3�H3��L����H3��H�\$ H�L1�H��I��D��I�� A��H���J3�A��A��E��J3��E��A��E��J3��M��H)ʉ�I��H�T$ ����H���J3�H3��L����H3��H�T$ H�L1�L��H��D��H�T$ H�� H����H���J3�A��A��E��J3��A��A��E��J3��I��I)ȉ�I�����H���J3�H3��H����H3��H�H�$L��L1�H��D����H�� H����H���J3�A��A��E��J3��A��A��E��J3��I��I)ɉ�I����L�L$@I��H�,$H���J3�H3��H����H3��HL$ H��H�t$H�T$HH���������H3$H)�I1�H��L��M�H��H��L��H��L1�H)�I1�M��M�I��L��H��L1�I)�L1�L�4*H��H��H��L1�I)�M1�L��L�H��H�t$H�L$@H��H1�L1�I)�I����H��ͫ�gE#M1�I�� L�L$ I��O�l%��L�$L1�H)�A��H���H3���D����H3����H�L$HH3��H)�D��H��L����H��H���L1�H3�H�$D����H3��L��I����I�� H3����H��H��H)�A��H���J3�D��D����J3��D��L��J3��H)Ӊ��H��L1�H���H3�H��D����H3��L��I����I�� H3��H$H�$��H��H)�A��H���J3�D��D���J3��D��L��J3��H��H)ы$��H���H3�H�$��H3��L����H3��H3L$H�I�ȉ�D��I�� H����H)�A��H���J34�D��D���J3��D�ˉ�J3����H)��L��H��H���H34���H3��L��H3T$ ��I��D��H3��H4$I�� H�$H����H)�A��H���J34�D��D���J3��D�ʋ$J3����H)��L��L1�H��H���D��H34�H�$��H3��L��I����I�� H3����H��H��H)�A��H���J34�D��D���J3��D�ʉ�J3����H)��L��H��H���H34���H3��L����H3��H�$H�L1�L��D��I)�H��H�� ��H���J34�A��A��E��J3��A��A��E��J3��I����I)��I����I1�H���J34�H�4$��I��H�4$J3��H3��M��H�H�4�H)�L��E��H�� ��H���J3�E��A��E��J3��A��A��E��J3��I��H����I)�D��H����H���H3�H�$L����H�$H3��H3��H�H�t$H�\$ H��H)�H���������H1�H�$I)�M1�L��M�H��H��L1�H)�H1�H��I�H��H��L1�I)�L1�L��H��M�4.H��H��L1�I)�M1�N�,L��H��H��H��ͫ�gE#H��L1�H)�I1�H�\$L�H1�H�L$ H)�L��L1�H��H�� A����@��A��H���H3�A��A��A��H3��A��L�$H3��I)Љ�L��I���I��H���L1�J3�H�$��I��H3��H��I�� ����H3��L�D��H�4�A��H���J3�A��A��E��J3��E��A��E��J3��M��H)։�I����L1�H���J3�D��H3��L��I����I�� H3��H$H��A��H���J3�A��A��E��J3��E��A��E��J3��M��H)Ӊ�I��H�$H�����H���J3�H3��L����H3��H�$H�L1�H��I��D��H�$I�� A��H���J3�A��A��E��J3��E��A��E��J3��M��H)щ�I�����H3L$H���J3�D��H3��L��I����I�� H3����H��H�4�A��H���J3�D��D���J3��D��L��J3��H��H)։��L1�H���H3���D��H3��L��I����I�� H3��H$H��A��H���J3�A��A��E��J3��E��A��E��J3��H)Ӊ�H�$L���H��H���H3�H����H3��L����H3��H�$H3\$ H�I��D��H��I�� A��H���J3�A��A��E��J3��E��A��E��J3��H)�H�$�����L��H��H���H3���H3��L����H3��H�H�4$H��H1�I��H��I�� D��A��H���J34�A��A��E��J3��E��A��E��J3��M��H)��I����H�$��H���J34�H3��L����H3��Hރ�H�4���H���������L�L$H�L$ H1�I)�M1�L��M��M�I��I��M1�M)�M1�M��M�I��I��M1�L)�H1�I��H�$H��H�H��H1�H��D��H1�I)�M1�L��M�H��H��L1�I)�H��H�� M1���M�H���J3<�A��A��E��J3��A��A��E��J3��I����H)����H�4$I����H���J3<�H3��H�4$H3��L1�H�H��D��H�<�H�� ��H���J3�A��A��E��J3��A��A��E��J3��I����H)׉�I����I1�H���J3�E��I��H����H���L1�H3��L��H�L��H�� H����H���J3<�E��A��E��J3��A��A��E��J3��E��H)�H��A����H��N���L3���L3��L3��L1�H��I���H�� K����H���H34����@��H3�����@��H3����H)�H�����H��L1�H���H3<���D��H3��H3��H��H�� L���H�<�H���J34�A��A��E��J3��A��A��E��J3��I����H)���I����I1�H���J34�A��I����H���L1�H3��H�H��L��H�� @��H���H3�D���@��H3������@��H3��H��H)�D��H��I���L��H���H3���H����L��H3��L1�H3��H��H���H�� H��@��H���H3����@��H3������@��H3��H��H)ʉ�H��I���H����H���H3���H3��H3��L��H��ͫ�gE#I1�L�L)�H��H1�H��D��H�� @��H���J34�A��A��E��J3��A��A��E��J3��I��H)��I��H�$����H���J34�H3��H����H3��H�H�4�H�D$H�$f�HL$8H+T$(H�HH�L$`H3t$0H�PH�0@!AA A0H�@I�G@H�D$(H�D$PJ�8�Z��H�~��H�H�D�H��H)���������1҉փ�L�79�r�H�D$h�����H�H�|$H�G!H�t$hH�|$`��H�T�H�T�H��H�H��H)�H)�����p���1҉փ�L�1L�79�r��U�H�\$H�t$PH��H�|!��U���C �ƒ�����	ЈC H��x[]A\A]A^A_��������1�f�D�����H�t$�F!H�������D$h�T�H�L$`f�T����A��uqM���b�H�L$P��A���E�H�L$PB�T9�fB�T8�H�D$�x �/�����D��Z��H�|$�G!�D$h�T�H�L$`�T��]�H�L$P��B�T9�B�T8�H�D$�x ���f.�D��H�H��H�1�H�G\H��H)���l���H��AWH��AVAUATE1�USH����o�oP�N�^H�|$PD�VD�^D�FD�NdH�<%(H��$�1�)$�>�$)�$�)$�$�|$`)�$��L$d�\$hD�T$lD�\$pD�D$tD�L$x�v�T$,��$��D$��$��T$(��$��D$��$��T$��$��|$0H��$��D$ ��$��t$|�T$�t$LD�L$HD�D$@D�\$4D�T$8�\$<�L$DH�|$X�D$$H�)�D�\$ D3\$H�T$0D��3T$,��D�D$D����D3D$<A	�D�L$D��D3L$4�L$(��3L$D�\$��3\$8�l$A	�D��3l$@D�l$$��D3l$LA����A	�D������	�D�ǁ��	�D������	����D��D������D	�E��A���D	�E��A��A���D	���A���A��D	�A��E��A���A��A���D	�D��D	�E��A���$��E	�A��A��E��A��A��E	�E��A��A���A���E	�E��A���A	�H�T$PE	�E��A��A���E	�A��A��E��A��A��A���E	�A��A���E	�E��A��A���E	�A���������D	�A�݁��A���D	�F�,�	�C�*��D���F�<�D3�����F3|���D3��D3��B�>A����A���,�B3��A1������D3��D3��B�/A����A���,�B3��A1������D3��D3���$D��B�:A��D����A��F�4�F3��E1�D3������D���E1�C�3A����D����A��F�<���F3��D1�D���3��A1�C�8��D���F�,�D3�������E1�D3��D3��C�1E��A����A���,�B3��A1������D3��D3��B�9D��A����D���A��F�4���F3��E1�D���D3��E1�C�2A����D����A��F�<���F3��D1�D���3��A1�B�>��D���F�,�D3�������E1�D3��D3��B�7E��A����A���,�B3��A1������D3��D3���$D��B�:A����D���A��F�4���F3��E1�D���D3��E1�C�3A����D����A��F�<���F3��D1�D���3��A1�C�8��D���F�,�D3�������E1�D3��D3��C�1E��A����A���,�B3��A1������D3��D3��B�9D��A����D���A��F�4���F3��E1�D���D3��E1�C�2A����D����A��F�<���F3��D1�D���3��A1�B�>��D���F�,�D3�������E1�D3��D3��B�7E��A����A���,�B3��A1����D3���ۋ$D3��B�:D��A��D����A��F�4�F3��E1�D3������D���E1�C�3A����D����A��F�<���F3��D1�D���3��A1�C�8A����A���,�B3��A1������D3��D3��C�1��D���F�,�D3�������E1�D3��D3��F�,9D��E��A��A����B3��A1�D��A����E��D3��F3��D�A��D��A��F�,�D��D3�������D1�3��3��A�)A����A����B3��A��A��A1���E��D3��F3��C�0D��A����A��F�,�A��A��E��F3��E���$D1�3��B3��A�E��A��A����E��B3��A1�D��A����E��D3��F3��D�A��D��A��F�,�D��D3�������D1�3��3���/�������3��A1������D3��D3��B�6��A��D�,�A����D���D3��@����D1�3��3��A�D��A��D��A������E��3��H�t$XA1���D3��F3��B�,�F�t�I�����T$,�L$(3T$3L$I���S�\$4D�D$<I���t$0D�L$8D�T$@�|$D�\$0D1�A1؋\$HD1�E1�D�T$D�\$<�\$LD�D$H�\$8�\$D�L$L�\$(�\$�|$@�\$�\$$�L$$�L$�\$�L$,�L$�t$4�L$�L$ �T$ �L$�O������$��l$d��$���$�1��\$`A��D��$��l$(��$���A��1��D��A�҉�\$$��A��1�A����A����f1�A��A��A��1�A���|$01�A��D�d$D��$�D1�D�T$D��$�D1�A��D�t$,1�A����D1���D1�3L$h�L$4����$��D1�D��$�1�D1�A��1�D1�D1�D1�3L$D1�D1�fE1�f1�A��1�3$1�3L$l�L$8��$����L$��D1�D1�D1�D1�D1�1�3$1�D1�1ы�$�D1�3L$��D1�3L$p�T$��$����T$ �T$D1�3�$�3T$0D1�D1�D1�1�1�1�3�$��l$(1�D1�\$ D1�D1�3T$3T$D1�D�L$,D3L$1�3T$ D�\$41�D3�$�D1�D��$�A1�E1��D$D3L$E1�A��3T$tD1�E1�D�t$A��A1�D3$��D1�D1�E��1�A1��\$$D1�3D$xE1��A��L�d$PD1�A��A1�D��D�\$8A1���A3t$D3|$|��E��A��E3L$A����E��D1�E�D$D1�A3<$E1�A���A3L$A��E1�A���A��D1�A���A3D$A��A�L$A��D1�1�D����A�ɉ�1Љ�E1�E3T$��f1��E��A1҉�L$HfE1�A1�f1҉ˉ�A1�D��fE1������L$LA1҉�D�l$(E1�f1�E��D��E��1�A��A���\$,D��E��D1�A��D�T$0A��L$DD��A����D�\$A�ÉL$��A���L$4�L$DD�|$A��D�$A��1�3L$,3$E��A��D1�A��D1�3L$3L$3L$D1�D1�3L$4A�$A����A����A1ԉ�1�D�d$8A��3D$H�T$$��fE1��D�d$@E��D3d$$�T$D��D3d$8��D3d$�T$ D��A1�D3d$ ��A��D���E1�D�l$<L�l$PA1�E1�D3d$@E�e3D$0E��D��1�A��D1�L�l$PD1�D1�3$D1�3D$3D$3D$3\$0D1�D1�3D$4A�ED�l$8D3,$D��D��1�3D$3t$L1�D1�D�t$$1�3D$(3D$ 3D$<E1�1�D1�A1�H�D$PD�h��H�t$PD1�D�l$(D1�D1�3D$1�D1�3D$3D$ 3D$3D$D1�E1�D3t$,D34$E1މFA1�D��D�t$<1؋\$D1�3D$1�D1�1�D1�D1�3D$@D�|$$�FA1�D��D�|$DD1�D1�3D$A1�1�E1�D1�E1�D3<$D1�3D$ 3D$E1�D1�1�1�D1�A1�E1�FE1�D3|$A1�D3|$A1�E1�D�VH��$�dH3%(uTH���[]A\A]A^A_�@�t$�������t$���t$���t$���t$ ���t$$���o����J��D��AWAVI��AUATUH��SH���H�4�H��HdH�%(H�D$81��G@���щ�H9�����A�FD)�A�NHA�F@L�$I����I�vIA��H�4$����H��A� 1�L�l$L9���H�t1�1���DD�DE�L A����D	�D�D	�D�DA��D	�F�A�DA�D9�E�D @��E9���H��	�@��H�� u�L��L��� �I�G L��H9��@I���p����A�NH�A�F@L�$I������I�|IH��H���wB��A^H�HfD� I�DI)�Hc�H���?H�MH�pI��H��H�H�L�H�L�H)�I)�H�H��H��rH��1�I�<H�<H��H9�r�L�l$I�v 1�M��M�N@��F*D�V+D�A����D	�D�V)D	�D�V,A��D	�F�A�A�E9�D�@��D9���H��I��	�@��I9�u�L��L��H�T$���H�T$L�z H�D�-���fDJ�D=A��seA���wE����� K�L&I1�L)�����h����E�fHH�D$8dH3%(�oH��H[]A\A]A^A_�H�H�$I�VID��H�sH�L�H��H�L�H)�I��H)�E�A��A���t���A��1҉у�H�<H�<D9�r��W���f�H�q��H�H�D�H��H)�ȃ���K�����1҉у�H�<9�r��4���fD�A�VIA�������D��H�$�D�f�D���������������1�f�D�������uVH��������M�������L�f�L������H�$A�VID��D��D��x�������D�����M��L��L�����~F��ff.���AUf�ATL�f UH��SH��H��XdH�%(H�D$H1��~H)$)D$��H�E@I��H��L��H�$���oM H��L���AoT$)$)T$�{�H��H��D�H��H���W��P��w��P����W��P����W�I9�u�H�}H�E1�H��H�EdH)��Ml���H�H�D$HdH3%(uH��X[]A\A]�DH�t$ L��L�M@1�I����B*�z+D�����	��z)	��z,��	�B�<A��9��:��A9���H��I��	���I9�u�H��������E��f.�f���H�H��H�1�H�G\H��H)���l���H����AWAVAUI��ATUSH��H���GDH��$�H�4���H�T$x���щ�H9��+��A�E@)�A�EDA�MHH�|$xH�9H������I�}IH��$�H��$�����H�D$8 H��$�H�D$HH�|$8H9|$x��I�E H�L$HM��H��$�H��H�D$pH�ƸH�D$(�H�$�1�fD��t����	��t	��t��	�A�D H��H�� u�A�D$ E�T$H�=~�E�L$A�l$H��E�\$E�D$�D$A�D$$E�4$�l$dD��E�|$E�l$D�\$P�D$A�D$(D�T$T�D$A�D$,D�L$XA��D��E���D$A�D$0D�t$D�D$A�D$4D�l$H�D$ A�D$8D�D$\�D$$A�D$<D�|$`�D$0L�d$hE��E���H���H���H�$A��D�<�E1�A�ŋ�A1�A1�A��D�t$4��1�A1�@�ŋ�1�A1��Ë�A1�1�A�Ë�A1�1�A�‰\$@��A1�A1�A����A1�3D$��D��E1�D3D$A�Ћ�1�3T$�D$�‹�A1�3D$D�D$D��A��F��D1�D3D$�T$A�Ћ�A1�3T$ ��D�t$��A1�3D$$�؋�A1�D3|$01�A��D�4�D1�D3t$4�D$$�\$@A��A�ȋD$��A��H�$A��A��D�D$���͉T$ �D$�D$��A��A��A��D�|$0�ȉD$�D$�ȉD$�D$�ȉD$�D$$�ȉD$$H�$H9D$(�C����@�A�ED����D� I�D
I)�Hc�H�|$HH���rH��$�H�HH��H�H�H�\$HH�T�H�T�H)�H)�H�H��H��rH��1�H�4H�4H��H9�r�I�E I�u@H��$�H���B)�J*H������	��J(	��J'��	ȉB�H9�u�A�}$A�EE�uE�]E�EA�m�|$A��A�}(E�}�D$TH�C�E�UE�MD�t$P�|$A�},D�\$XA�M �|$A�}0D�D$d�|$A�}4�l$h�|$A�}8D��$��|$ A�}<D�T$\�|$$H�=�H��@D�L$`H�\$pD��H�D$(L��$�D�D$0I���l$4D��E��D�|$@E��E��A��H���A�M��H�$D��A��A��A1�A��A��1�A1�@��D�|$8A��1�A1���A��A1�1�A��A��1�3T$0��A�<�A1�3|$4@��D�\$0A�4�1�3t$@�T$4@��A��A1�1�A�ԉ|$@A��1�3T$�t$D��A��E��E1�D3L$A��E�,�E1�D3l$A��D�|$A�<�A1�3|$@��A�4�A1�3t$@��A��1�3T$ D��G��D1�3D$$D1�D��G�<�D1��T$ �T$4D3|$8D�\$0A����H�$�T$0�T$@��A��A���ωD$$H�$����D�L$�T$4�T$DA������A��D�l$��A�̉|$�T$@�T$�t$�ʉT$�T$ �ʉT$ H9D$(����w���@H��H9t$p�&���L�d$h�\$Hf�3\$$H��$��l$PD�|$TA�\$3l$ D3|$�\$XH�L$8A�l$3\$�T$DE�|$3T$0�l$\A�\$3l$�\$`A�$3\$D�|$dA�l$D3|$A�\$E�|$@H�A H9D$xrH�D$8���f�H��$�M��H�H��$���sm���H��$����%H��$�� H)�I�L=I1�������y���-��$�A�EHH�ĸ[]A\A]A^A_��H�I�EIH��$�H��$���H�L�H�L�H��H�H��H)�H)�؃���i�����1ɉ΃�L�2L�79�r��N���H��H��$�I�|
IH���5��AmH�f����H�q��H�H�D�H��H)�ȃ���(�����1҉у�H�<9�r�����fD�A�EIH���������$�H��$��T�f�T�������������1�f�D��������0H�|$HH������H��$����������H��$�H�|$H�T;�f�T8�����I��L9D$p�����L��$��\$Tf�D�|$\D3|$3\$ H��$�E�}D��$��l$XA�]3l$�\$`AE 3\$�T$PA�mE1�3T$$�l$dA�]3l$�\$hA�U3\$A�mA�]H��$�E�}@H�D$HH�x H�H�|$8����A�EI��$�H��$��T��T��_�������D��z���H��$���H�\$H�T��T����f���AWAVAUATUSH���~HH�|$�H�t$��j��F�\$؋^�D$�H���\$܋^H�D$�H���\$�^H�D$��\$�^�\$�^�\$�^�\$�H�D$Ћ|$�L�-��D�D$�D�L$�X@�h �|$�D�d$�D�t$�D�D$��t$�D�T$�X8��\$��XDE��E��D�\$�D�L$�A��M��X<�\$��X$D�݉\$��X(�\$��X,�\$��X0�@4�\$�D�ӉD$�DH��A�M��H�D$�D��A��E��E1�A��A��1�A1�@��D�|$�A��1�A1���A��1�3T$���A�4�1�3t$�@�Ɖ\$�A��1�3D$��T$���A��A1�1�A�ԉt$�A��1�1׉D$�@��A��A1�3D$���E�,�D1�D3l$�A��E��D1�D3D$��D$�A��A�4�A1�3t$�@��A��A1�3T$���A��1�3D$���A��A1�D3T$�1�A�ډT$�E�<��T$��\$�D1�D3|$�A����H�D$��T$��T$���A��A���ΉD$�H�D$���A��D�l$��T$��T$�A������A��D�D$����ωt$��T$��T$�D�T$��ʉT$��T$��ʉT$�H9D$�t
����fDI��L9L$��N�����H�|$Ћ\$�3\$܋D$�3D$�T$��_�\$�3\$�G3T$�D�|$��_D3|$�D$��3D$�\$�D�3\$�3l$�GH���_�oH�|$�H�O ����H��H���W��P����W��P��w��P��W�H9�u�H�D$�H�xH�H��H�@dH)�H��1���l���H�H��[]A\A]A^A_�f�H�\$�H�C H�s@H�$H��@�B)�J*H������	��J(	��J'��	ȉB�H9�u�H�D$�L�-a��X$D�0D�`D�XD�@D�P�\$�E���X(D�HD�t$�E��x�pD�d$܉\$��X,�h D�\$�\$��X0D�D$�A��D��E�ˉ\$��X4D�T$�\$��X8�@<D�L$�\$�D�ӉD$�I��@�|$�t$�H�D$�H���H�D$��|$��t$�D�D$�M��H���A�M��H�D$�D��A��A��A1�A��A��1�A1�@��D�|$�A��1�A1���A��A1�1�A��A��1�3T$���A�<�A1�3|$�@��D�\$�A�4�1�3t$��T$�@��A��A1�1�A�ԉ|$�A��1�3T$��t$���A��E��E1�D3L$�A��E�,�E1�D3l$�A��D�|$�A�<�A1�3|$�@��A�4�A1�3t$�@��A��1�3T$�D��G��D1�3D$�D1�D��G�<�D1��T$��T$�D3|$�D�\$�A����H�D$��T$��T$���A��A���ωD$�H�D$�����D�L$��T$��T$�A������A��D�l$���A�̉|$��T$��T$��t$��ʉT$��T$��ʉT$�H9D$�t��y���DI��L9D$��F����D$�3D$�D��f�ÉD$�H�D$�3l$��\$�3\$��h�X�\$܋\$�3\$��l$�X�\$�\$�3\$��X�\$�\$�3\$��X�\$�\$�3\$��X�\$�\$�3\$��X�\$�@ H�$H�@���AWH�WhAVAUATUSH��XH��$�H��$H���dH�%(H��$H1ې��JH��H��H��0H��8H1��J�H1��J�H��(H1��J�H�� H1��J�H��H1��J�H��H1��J�H��H1�H�F�H9�u�H��$�L��$8L��$L��$H�XH�P(L�0L�@H�xH�p H�\$0H�H0H�@8M1�M1�L��$L��$ L��$�H��$(I1�L��$0H�D$@H3�$I1�I1�L��$�H1�I1�L�<$H�.'I�O����#H��$�L��$�L��$�H��$�L��$�L�d$L�%�H�l$H�-�L��$�H��$�L�L$L�\$(L���L�T$ L���H�\$xH���L��$�L�-��L��$�L�|$@H�T$8�DH�T$hH�7L�L$H��H�L$pL�D$PH�D$H�T$8H�T$HH��$�L�t$@H�T$0H�T$xH��$�H�t$`H��$�H��$�H�|$XH�T$xH��$�H�T$ H��$�H�T$(H��$�H�T$D�L$0L��H��H��8H��K3D�M��H��I��0E��K3�I��I��(E��J3D�L�L$8I�� E��J3�A��L��A����J3�I��I��E��K3�I3�E��H3�$�H�VH�D$@H�D$0H��8H��K3D�M��H�5I��0E��K3�M��I��(E��J3D�I��I�� E��J3�D�L$8H����A��J3�I��I��E��K3�M��I3�I��8H�D$HH��L��D��H��K3D�H��L�L$0I��0E��K3�M��I��(E��J3D�M��I�� E��J3�A��H��A����J3�L�L$8I��E��K3�I��I3�I��8H�D$PH�QL��D��H��K3D�M��H�7I��0E��K3�L�L$0I��(E��J3D�M��I�� E��J3�E��H�T$8A��J3�I����I��E��K3�I��I3�I��8H�D$XH��L��D�L$8H��H��K3D�I��I��0E��K3�M��I��(E��J3D�L�L$0I�� E��J3�E����A��J3�M��I��E��K3�L�L$8I3�H�[I��8H�D$`L��D��H��K3D�I��H�8I��0E��K3�I��I��(E��J3D�M��I�� E��J3�D�L$0L����A��J3�M��I��E��K3�I��I3�H��0I��8H�D$hH����L��E��I��8H��K3D�H��L�L$8I��0E��K3�I��I��(E��J3D�I��I�� E��J3�E��L��E��A����J3�L�L$0I��I��E��K3�L�
QH1�K��K3D�L�5>H�T$pH�T$8I3�H�L$0H��(H�� I�����@��H3D�E����I3�M�<�H3�K3�L��$�H�|$xI1�H�t$L��H��8@��H��(I��I3D�H�$H��0��I3�@��L��H3D�H�L$H�� ��H�L$ I3�D�t$A��Ic�L�t$(H3�I��A��L�t$@I3���H�L$(I3��T$ I1�H��H��8L�t$xM��I��I3D�L��H��0L�D$��I3�H�$I�� H��(��H3D�A��D�D$H3�A��Ic�L�D$H3�I��A��I��I3���I3�H3D$HH��$�H�D$ �T$(H��8I��I3D�H��L��H��0��I3�L��H��(��H3D�H�$�L$L�t$ H�� ����H3�Hc�H�L$H3�H�T$H����I3��Ջ$I3�H�T$P��H1�H�D$(H��$��T$H��8I��I3D�L��H��0��I3�L��H��(��H3D�H��H�� ��H3�Hc�H�L$H3�H�T$H����I3���I3�H3D$XH��$�H�D$�T$H��8I��I3D�H�T$(H��0��I3�L��I����H��(��H3D�L��H�L$H�� ��H3�Hc�H�|$H3�H�$H��8H����I3���H�L$ I3�H3D$`H��L��H��$��D$M��H�$M3L�H�D$H��0��M3�H�D$(H��(��L3L�H��H�� ��L3�D����L3�L��H����M3����$M3�H�D$L3L$hH��8H��I3D�H�T$H��0��I3�H�T$��H��(��H3D�H�T$(H�� ��H3�Hc�L��L�4$H3�L��H��I��8��I3�����I3�J��I3T�H�L$L�t$H�|$H��0H3D$pI��(��H�� I3�A��H3T�@��H��$�H3΋t$(��Hc�H3�H�L$ H����I3�L����I3�H��L1�H�4$H�5VH9������H��H��$�L��$�L3t$xL�0L��$�L3�$�L�pL��$�L3�$�L�pL��$�L3�$�L�pL��$�L3�$�L�p L��$�M1�L�p(L��$�I1�L�p0L��$�L34$L�p8H��$HdH3%(uH��X[]A\A]A^A_��R(��f���AWI��H��1�AVM�G_M�whI��AUM�_?ATUSH��(�dA�G`A��A���)fDE��I��I��A�A�HD�A�H��M9�t
M��u��u�H���H�J�Lc�A�H��H��G�ThE)�H�L$L�L� Lc�D�M�D��H����A��A�I9�tSLc��]D��D�A��A��E	�G���u�L��H�t$L�L$H�$���D��M��1�H�t$L�L$H�$�H�\$H��H��H�T��ك�Hc�H��.D�����Ic�A	�H�E�H��vK���D)�Hc��H)�I�ԁ�t1Hc�IΉ�B�'��A�.A�WdA�G`H��([]A\A]A^A_�H��u���L���2�1�1���Lc�M�E��x���ff.�f���H�H��H�1�HLJ�H��H)�������H��ff.�f���AUL�n@��ATL�fhUH��SH��H��Hcv`�MdH�������A4�� ����?�H���� 1�L�������oE@H�����AoM���O�H��H�K@�H�H��H��H��8�S�H�P�H��0�S�H�P�H��(�S�H�P�H�� �S�H�P�H���S�H�P�H���S�H�P�H���S�H�P��S�H9�u�H�}H�E1�HDž�H��H)�������H�H��[]A\A]�f��*���� )�H�Hc�I�����fD�@1�)�H�L�s-��uj�������������1�f�L�������H�H�D�H�HH��H)�Ѓ���������1҉փ�H�<19�r��w�����D��d���f.������D��D�A��A��H��tdSI��E1�1��q��fDD�A�D����i��A)�D��G�D���A�BI���Di��E)�E��L9�r�A��[D���@A��D���ff.�����������G��g��G��f.�f���������D��H��t,�H�L����H������2N���A3��H9�u��f.���H��t)�H�L�k�H��1�����A3��H9�u��ff.�f�����Љ���G����G��g���������Љ�������G��g��G�����H�H�GH�G�@����?wH���D$P�Y�1�H���f�������f.���UH�=HS��H���X��S-��A�عH�dH�žH�=[��A��H���H�=J��A�ع��H�=:趵A�ع��$H�=�!蘵H�=��GH�5j�G�%�
�����H����[]���SH��H�?����SH�{��t�d#���CH�{ ��t[�S#����CH�{ ��u�[�f.���SH��H����H�{�G��t[�#��fD[�Rf�����L�
 #��Ic�L�>��@H���1�1��[I��H�A�1�1��;II��H�Ѿ1�H�� 1��IDH��1�1��IH�!�1�1���HH�� �1�1���HH�����H���1��1�H���Hff.��AWAVAUATI��USH��H��HdH�%(H�D$81�H�t$H�T$ H�D$0H���PH����H�D$��L�t$0H�D$L�l$(L�|$ H�H�l$0H����H�{H�4/H9s��H�t$H�M��L��L��L��H�D$(�/��H���t"H�CH�H�H+D$0H�|$ H�Cu�1��&����������T����t��H�L$8dH3%(��H��H[]A\A]A^A_�f.�H�CH��MwR�O�NH�C1�1��KH�{H��9����H���H��H�ƁH�S1��H�{H��
���H���H���먽�L�t$0L�l$(�]�H�{H�4/H9s��H�1�1�M��L��L��H�D$(�|.��H���������8����H�CH�H+D$0H�H�CH�H�l$0H��u�H�CH��MvWH���H���H�C1�1��\H�{H��z���H���H��H�ƁH�S1��4H�{H��R�����O�N�@��i���fD��Y���fDHkH+l$0H�k�A����i��f�AWH��AVAUATI��USH��H��H��XH�|$dH�<%(H�|$H1������H�=��G�o��H������H�D$H����H�D$H�\$ 1�H�D$8�L�d$(M����H�D$(L�|$@H�D$H�D$ L�t$8L�l$0H�$�L�d$(��M��t@H�T$H�4$M��L��H��L�|$0H�D$8�,��H���u�H�D$(L9�tI�ă�M��u�H�T$8H�D$��H�ыH��)�H��Eރ�ti~G���t1ۃ�T�Í\H�����H�T$HdH3%(��uBH��X[]A\A]A^A_����t���D1ۃ8�Ã��H�D$�1��������SH�=��G���}�
����1�[�f���AT�
I��H�=�USH��@dH�%(H�D$81�H��H�\$ H���U�H�ھ
H�=��A��,�1��H�
H�5��H�$1��H�5��H�T$ 1�H�5	����L���f��|$vH���w��|$4vH���h�H�D$8dH3%(u	H��@[]A\�����f.���USH��H�5:!H��8dH�%(H�D$(1�H�L$H�T$ H�p֔L�L$L�D$�D$H�@H�D$1��'���t9�|$?mHcT$H�t$ H�|$H�L$���H�T$H�5��G�ʼn�������t+�CH�H�D$(dH3%(u<H��8[]�f��D$�CH����@H��1�1���VB�����ff.�@��AWf�AVAUATUH��H�5�S��H���dH�%(H��$�1�H�p֔H�L$X�D$T)�$�H�T$hHDŽ$�H�@H�D$`H�D$TPH�D$hP1�L��$�L��$��o&ZY����>�|$T?���D$X���\�\$xLc�H�D$hH�L$`L��M��H�|$\L�l$pH��H�L$0H�D$�y����D$,����E��D$\���.E���;A9��?9�O�A�9���D)��H�t$0H�=*�G����I��H�$�)���H�D$@I����zH�D$@L��$��H�D$H��$�M���H��$�H�l$HE1�E1�H�t$ H��$�H��$�H�t$H��$�H��H�t$H��$�H�t$H��$�H�t$8�G�E9�w%M����H�|$8L���H�������uY��L��$�A��M��tE��~AL�D$ H�L$H��$�H�T$H�<$HDŽ$�H�t$�'��H���u�L9�$�u�H�D$@H�l$H������T��D$,H�$H��tH�����M��tL������\$,H�T$`H�5��G���������H��$�DH��t�&��EH�EH��$�dH3%(��H���[]A\A]A^A_ÐLc���L�|$x����������H��$�H���H��$�H;�$����H�T$`H�5�G1��J���H�|$hH��$��V���H���W���H��$�H�}�E�E�K���D�|$,H�T$`H�5��G��H��$�����fDH�|$0H�5��G�7
��I��H�������H�D$@H�l$H�����1ۃ�T��H�<$�\[t	H�<$�9��H�T$`H�5=�G����������D)������E������E��A���������f��@H�$1�1����=�[�����D$,���M��tH��$�L��1�1���H��$�H������H��$�����DH�D$@H�T$`H�5�G�8�����H��$������H���H���H��H��$�1���H��$�H��$�H�������	���f.�1ҾO1�1�HDŽ$�HDŽ$�N�H��$�뮿�$�H��$��7���E1�����H�$H��t#H�����H�T$`�H�5��G��������@�������@��AWf�AVAUI��H�5�ATUSH��XdH�%(H��$H1�H�p֔HDŽ$�H��$�)�$H��$�H��HDŽ$�L�pHDŽ$�HDŽ$(H��$�P1�L��$�L��$��s AZA[�����L��$�M����L��$I�?�H�5L����_�D$4��uH��$H��x��H��$�L��H�5�H�8�_��u*H��$H��P��?���xu
��~	H�(�@L��H��$�L��H�5�H�8�F_��u*H��$H��P��?���xu
��~	L�0fDH��$�L��H�5RH�8�^���H��$H��P����oL��$0)�$0H�@H��$@��vL����L���H��$0��$D��L���&����@H�d1�1���:A�EI�EH��$HdH3%(��H��X[]A\A]A^A_�H��L�t$�LH�D$8DŽ$�L�D$4H�D$Lc�$�I�D$H9���H�|$�~��H�D$(H��H�D$HH9�����$�L��H�=���D$PH��$�H�D$XH��$�H�D$`���H�D$@H�����H�|$L������H�D$ H�����H�޺�������A�H�L$@L��D)�H�t$`H��$H�D$�/�H��$H����
H��$H�nH;�$ ��A�: H�L$8L�|$hfD�0H�D$XH����$�H��MH�L$(H��$�HcD$PH��$H��$��NHF�H��ML�t$pL�l$xH�rH��$�H���HG�H��$�H��$�H��H��$������)ȉD$`H��$��H9T$H��H����H��$H�\$8H�H;�$ �UH�T$8H�t$H��S��H��$H��$H���
H�kH�H;�$ ��H��$� ��$��X�H��$H����
H��$L�fL;�$ ���=?f�<0H��$L��$H���2H�t$(J�,&H;�$ ��H�T$(H�t$J�< ���H��$\$`H��$�\$XH���'
H�]H�/H;�$ �Y�|$4H��$�?H��$��H���

H��$H�kH�H;�$ �4	H��$�BH��$H���PH��$H�kH�H;�$ ��H��$H�\$�?H��$�H��$H��$�H��$�H��$��D$X����D�4@D��$�A����I�F�I�V�H��M�f�H��$H)�H��$�H��$H��$�L��$�H�D$PH�t$PH�|$ M��I��H��L��M)�L��$�4��H�����������
��T�I���HH�|$ L�|$h�L�t$pL�l$x�J��H�|$@�@��H�|$�H�|$���H�t$��L���{�H��$H��t��HDŽ$HDŽ$HDŽ$ A�EI�EM������A������L��謁����H�t$L����H��$H��u���DŽ$�L�LH��$�L��E1�H�5
H�8�XH�
��H�L$��udH��$H��P�����oL��$0)�$0H�@H��$@��vL�����$DtL����H��$0H�D$H�|$����L�t$I��H�D$8����fDD�HE���N���H��D$4�<Q�8���<q�����D$4�'���@L��$0H�L9��(�����$������fDH�H�D$�q����k�8�2H�|$@�8��H�t$L��������H��$�H;�$���H�|$ 1�1�I��H��L�$���H����[���8�n���H�|$ E1�1�1�1��c��H����Q���H��$�I��H��$�H��$�H��$�H�D$H��$L;�$������H�|$ L�|$h�L�t$pL�l$x�\��H�|$@�R���
���D�c��8�jH�t$L�������H����H��$H�kH�H;�$ �H��$�QH��$H����H��$H�kH�H;�$ �7H��$������?H��$�L��$�H��$��D$XD�p�D�����A��A����
H��$�H��$H�D$PH��$L��$�H�D$H�t$PI��H��H�|$ L��L��$H��$����H���u0�>�������T���������L;�$������H�|$ 1�1�I��H�����H�����H��$H9t$��H�L$1��H�=~
H��Hc�H�H9�u�D��H9�v<�L��$�H)�H���������H�H��H��$�H��$�H��I)������\$X��H�l$��f�H����L��$M�l$J�'L;�$ ��L��$�=H��$H���wL��$M�l$J�'L;�$ �s�UH�
�	L��$������H��$H����L��$M�l$J�'L;�$ ���UH�53	L��$������H��H;�$���EH�
"	H��$�<�����H���wL��$M�l$J�'L;�$ ��UL��$����DH��$�H��$�1�1�HDŽ$H��$ ��L��$H�l$(H��$���f�H���H��H�ƃH��$ 1��p�H��$H��$�'���H���H���1�H��$ �;�H��$H��z���H���H���H��H��$ 1���L��$H��$���H�|$@����H�t$L���T��Q����H���H���1�H��$ ��H��$H�����H���H���1�H��$ �{�H��$H��9���H���H���1�H��$ �K�H��$H����H���H���1�H��$ ��H��$H����H�|$ L�|$h�L�t$pL�l$x�
���H�|$@�������H���H��H�ƃH��$ 1���H��$H��$��1ҾOHDŽ$�HDŽ$ N�w�H��$���f.��O1�1�A�HDŽ$HDŽ$ N�4�H��$H��$�����S��8�U������DH��$�H��$�1�1�HDŽ$H��$ ���H��$H�\$8H��$��f�H�t$L��������f�H���H���1�H��$ �s�H��$H����H���H��H���H��$ 1��@�H��$H��$�v��O1�1��HDŽ$HDŽ$ N��H��$H��$�T��L�|$hL�t$p�E1�L�l$xH�|$ ����H�|$@����M�������L���t������L�|$hL�t$pE1�L�l$x��1ҾOHDŽ$�HDŽ$ N�O�H��$���f�1ҾOHDŽ$�HDŽ$ N��H��$�1���f.�1ҾOHDŽ$�HDŽ$ N���H��$��f.�1ҾOHDŽ$�HDŽ$ N��H��$���f.�1ҾOHDŽ$�HDŽ$ N�W�H��$���I��$�I��$�1�H��$ �+�H��$L��^���I��$�I��$�1�H��$ ��H��$L���I��$�I��$�1�H��$ ���H��$L��O����\$X��H��$H���?H��$H�jH;�$ ���?=H�|$ E1�1�f�1�1҃�H��$�$��H�����H��$��Z�H��$L�|$hL�t$pL�l$xH��tH��$�H�|$ �9���H�|$@�/���H�|$��H�|$���H�t$L��1��j��H��$H��tH��$I�EA�EA�U��A�E1�H�=kR�*�A�EI�E���1ҾOHDŽ$A�HDŽ$ N�r�H��$���1ҾOHDŽ$A�HDŽ$ N�;�H��$�q���1ҾOHDŽ$A�HDŽ$ N��H��$���I��$�I��$�1�H��$ ���H��$L������\$XH�D$��H;�$�{�����f�1ҾOHDŽ$A�HDŽ$ N�v�H��$�q����l$XH�|$H��$���$�+�$�e���Lc�$�I�ĉ�L��I9���H��$H����H��$M�,>L;�$ �XH�L��L����������L��$)؉�H��$H���]M�uL;�$ ���?=L���fB�4(L��$�p��A���H���H���H��1�H��$ �{�H��$H��$����1ҾO1��HDŽ$HDŽ$ N�;�H��$H��$���HDŽ$�NI��MvI���1�H�p1�H��$ ���M��H��$H��$����I���I���H��H��$ 1���L��$H��$���I���H��I���H��$ 1���H��$H��$�s���1ҾO1�A�HDŽ$HDŽ$ N�E�L��$H��$�t������L�|$hL�t$p�L�l$x�I���H�t$L��1��������H�t$L����o���l�f.�AWI��AVAUI��ATUD��SH��H���H�L$L�D$ dH�%(H��$�1�M��tI�H�|$H�5A��i�I��H���u@��1҃8�ƒ�H��$�dH3%(���dH���[]A\A]A^A_�DH���H�D$XE1�H�D$����H�D$H�D$`H�D$0�N�4;M��I�\�A��A��A�L��L)�<
��y<	��<
�iH��M�xH��tA�< �0<	�(H�D$ H��tL�8I�E1�H��tI�M�H�|$��LL��T$��T$�����< �P<=��H��M�xH���H�D$TL��I��H�D$8�<?�DI��L��<
t<
��<I��L��L��L��L��L)��{�����#H��@���eE1�H���1���M��M�4M��A�L��L)�<
�5�O<	��<
��M��M�yH�����A�< ����f.�H��M�wM����H���E1�M��I�L�I�A�H��M�xL)�<
�1��< ��<=�kM��t	M����H���������M��M�AH���kA�H��M�x<
���=<	��<
��L��L��L��L��L)�L�D$(�4��L�D$(A�H�t$L��L��D$X���@��������H������E1��o����< �X���<=u<@��u6M�yH���$M������<	��<
�pH���k����z���f�H�t$L��L��L�L$(�D$X���L�L$(I��M9��!���M���@����H�wI����I��I�:A�H��L)�<
tM~C<*��<?�H���7M��I)�I��O�@���M�~�p����<
��L�|$H�t$(L��L��L�D$8L���D$X=����L��L��L���D$X?���L�L$(L��L��L��L)�L��������@H��@��L�D$8�H����M��M������f�H���lM��I)�I��O�5���H�|$0�PL��L�D$(����H�|$B�D<`L�D$(H����=��H�t$0H�|$�r�L�D$(H���H�D$�oI�~H��t@�H��H��<?�eH��u�I�����������H�|$�T$�R��T$���f�M��H����H��A�>
M�~����H�t$L��L��L�\$(�D$X
�S��A�L��L��H�t$��D$X�6��H��L�\$(��������< ��<=�e������M��M�qH���s���M��������������H�t$L��L��L�D$(�D$X������unL�D$(H��L)�I��E����H����H��M��E1��6����H��M�xH���O���M��M�����@H��M�pH�������[���f����A���f�M���������f�M��I9��M�������E1�M9������M������@H�t$L��L��L�\$(�D$X ����H��L�\$(���M�����L��L��L��L��L)�L�D$(���H��L�D$(����������H�t$XL��L���D$X=����T���H��t�M��M�����@H��������<Qt
~^<bt^<quH��H���x����??�tWfDI��@���g���I��L��L��L��L��L)��������������L���@<Bu�H��H������1ɀ??u�H��H��I������H��I�^��8?L�xtL��I��H������8?I�^�L�xu�H��H)�H�������x=t=@������L�xL��L��L��L��L)��k�����`���I�^�@���U������H����PI�^�L�x�� �QI�&I���=�D$(L�D$@���wH�T$8�M�L�D$@I��HcD$TH�D$XM����H�L$H�T$XL��L��L�D$H����L���D$@���D$@L�D$H��t)@�������L��L��L��L��L)�����������E1��D$(L�S�I����2A�<
����M��L��I��<	�X<
�M������M�����fDL�t$(@����M�L��L��L��L��L)��	���������H��@��L�\$(�����H���e����������T$(�����L�xL��L��L��L��L�D$(L)�����������L��L�D$(H���r���M���9���f�H�T$Hc���^_L�D$@I�����< �i<=�(M�������@��I����������fDI��L��M���	���M������D$(����@I��I9����������fDH�|$0�PL��L�D$(���H�|$B�D<`L�D$(H������z�H�t$0H�|$�+�L�D$(H���H�D$t,I�~H���>��������H���_���M�����@����M�~L��L��L��L��L)��]������H��@����H�D$��������I��L��H�t$SL��L��L�D$(�D$S���H��L�D$(�m������f�M��L��I��M��H�����M������L�D$(����L�D$(���I��L��M�������M��M���1���H��tH�D$����E1������H�D$�����_�I��������|��C��1҃8�ƒ��g��~�ff.���Uf�SH��H�5ԮH��HdH�%(H�D$81�H��)D$ H�T$H�p֔H���D$H�D$ H�D$8H�@H�D$H�D$P1�L�L$ L�D$(�6�ZY���ty�|$?XHc$H�t$H�|$ E1�D�L$H�L$�X�H�t$H�
��ʼn������u_H�D$ H��tmH�T$(H��C�S�)@�@H�T�1�1����CH�H�D$8dH3%(uAH��H[]�@H�|$ H��t�������C1�H�=T@���CH����D��AWAVAUATI��H�5r�USH��dH�%(H�D$x1�H�p֔H�L$(�D$,H�D$@H�T$0H��H�@H�D$@H�D$4P1�L�L$HL�D$P��Y^����x�|$,?��L��L�t$H踓H�D$`HcT$(H�D$H�D$PH�D$H�D$XH�D$D����H�|$D�L$@f�M��H�L$8H�t$0)D$`H�D$p��H�|$`����H��tXH�\$hH�H9�s�?:I��u
�q�A�}:tiI��L9�u�H�D$HH��H+T$0)T$(H�D$0��HcT$(���p����H�D$xdH3%(��H�Ĉ[]A\A]A^A_�f.�A�EL�|$`L��L)�H��@I��L9�v
A�E< t�<	t�L)�M���nH�L$I�<$��L���8����H�D$PH�8�tn��#��@H���@H�D$X�;�H�D$PH�|$XH��BH�0�b�H��I�<$��jH�L$(E1�A�L���H�D$(H�|$hH�D$`XZ���L���p�H�D$H�t$(H�|$`H��H+T$0H�D$0)�Hc։T$(H���#������fDA�A��L���L��L���o��H��t
�D$���D$H�t$8H�}������A�|$vL���_A�D$I�$�U����@H���1�1���kA�D$I�$�(���H�D$H�L$(H��H+T$0H�D$0)�HcщT$(�d�����ff.�@��ATUSH��H�5��H�� dH�%(H�D$1�H��H�T$L�L$L�D$�D$����tZ�l$��?��L�d$H�=��L���%���tYL��H�=��������L��H�=������tg�CH�H�D$dH3%(��H�� []A\��H�T$A�A���H�=�脲��u��CH��H�T$A�A���H�=���L���f.��@H�4�1�1�����CH��J���fDH�T$A�A���H�=�����c�����f���ATUH�-Z�SH��H�5�H�� dH�%(H�D$1�H�L$H�T$H�l$�����tYL�d$H��L��������L��H�=�����uOH�p֔H�(H���
���ƉC����H���h��CH�H�D$dH3%(��H�� []A\�@L��H�=���1�����L��H�=��������H�p֔H�h�DH���H�H��p֔H��A��H�5D�H�M��H�MH��A��H�57��H�MH��A��H�5/��ך�1���f�H�p֔H�h���H�5Y>�1��j�s���D�CH�����[�ff.�PXH�=����H��H��GH��
��������AW�.AVAUA��ATUSH���!��H���`H�x�.�
��H���IH�X�/H������H���/L�xI��L��I)��5��I��I��?�H��?���E����[�H��H����I�|$�E�H����H�EI�~L�eH�D$�&�H�L$H����H�E H��L��L��L�u(�R��L��H��B� H�} �>��H�E B�0H�u H�}�X��H�EH���tFD�mD��H��H�=��GHDž��͞
H��uBH��H�D$�;��H����H�D$�&@H�} ��H�}��H����fD1�H��[]A\A]A^A_����H��H��t�I�|$�y�H�EH����L�eI�~�_�H�E H����L�u(H�}L��L���O��H�EL��H��B� H�} �7��H�E B�0H�u H�}�Q��H�EH���tO�E1�H��H�=��GHDž��ĝ
H���5���H��H�D$�.��H����H�D$����@H�} ���H�}���H�����1���H��G��H�=&�H��G�������ff.�f�AWAVAUATUSH��H��H�T$ �@D��$�H�t$H�L$HL�D$(L�L$0dH�%(H�D$x1�H�ɸIE�IE�H�T$H�D$hH�T$`E���H����H��H���~H���H�l$PH���H�D$H�D$H�T$hL�l$`L�d$PL�|$hL�t$HH����H�|$HH�;M��L����L��L����H�����������������T������H�K L�C�1�H���1��
��$�����H����������H�L$xdH3%(��H�Ĉ[]A\A]A^A_�f�H�|$���H��H����������H�C0H�T$pL�|$`H�D$@L�t$PL�l$pH�D$XH�D$H�D$L�d$XH��t$H�;M��L��L��L����H���t@H�T$pH��u�Hǃ����fDH�|$H�CH�T$h���f.�H�D$8�����������T���������H�D$L�$I9���D��$�E����L��H���K�H����H�T$PH�H)�H��H�T$PL��H+T$L�d$HT$`H�T$p����1�1���H���������H����������g���fDH�K L�C�1�H�b�1����#���fDL�d$HM���L�l$hI�����L��H�{0L��M��&��L���L�d$HH�D$hH�D$`H9D$�a��$�H�������H�L$0H�D$(HH+D$hH�1����fDH�D$H�H9�����$�����H��H��H�L$8��H�L$8H���yH�T$PH�H)�H��H�T$PH��H+T$H�L$HT$`H�T$h���f.�H�D$HH������H�T$hH��tPH���H����H�HH��H�L$HH�NH����H�T$hH�ʈD30H�D$@H�L$pH�D$X�H���@H�D$p�6���f.�H�|$H�¹H��D��$�H+T$`�^�
H���j���H�|$ H��踔
H�|$D��$�H�|$`E�����(�H��H����H���F��H�=�H�����f�H�|$H�¹H��D��$�H+T$`�Ώ
H������H�|$ H���(�
H�|$D��$�H�|$`E���-H�|$��H��H�������H�D$H�T$pH�l$PH�D$����fD1�H��H��H�L$8�H�L$8H������H�|$H�T$E1�H��H+T$`��)�
H������H�|$ H��胓
���<���1�L��H���H���`���L�L$8H�|$E1�H��H�T$�H+T$`L�L$�Ɏ
H���x���H�|$ H���#�
L�L$D������fDH�|$��H��H������H�D$H�T$hH�l$PH�D$������k�H��H�������>���f.�H�T$D��$��H��H�|$H)��.�
H���:���H�|$ H��舒
�y����~��o���H�K L�C�1�H�{�1�����H�K L�C�1�H���1��z�����������ff.���AWAVI��AUATUH��SH��(H�L�nL�$D�L$dH�%(H�D$1�H�D$H��tzI��L�|$�H���(�
I�$H��t_H��H����
�E\H��L�C H�KL��M��L��PH������_AX��t�H����
1�H�T$dH3%(utH��([]A\A]A^A_��t$��u H�<$tH�D$H�$H���fD�E\H��1�L��E1�H��L��PL�L$ ���ZY��t���H���y���1��|������f���AWAVAUATUSH��H��hH�|$8L��H�T$H�L$dH�4%(H�t$X1�H�L��H����H����aH�k H�{!I��H�\$@H�l$HL�|$H�J�H�|$@I��H�D$PH�D$PH�$��H�D$@H�D$H�D$8H�D$ H�T$H�$M��L��H�t$ I����H�T$HH�T$(I)�H�����聿���8H��uH�|$@��L��H�$�A��H�$����J��T�1���L���Ƚ��fD�#����8H��u�H��L��1�H��H���ƽH�\$HI�I��L�d$PH�$M��1�1�L��I���`�H�\$HI)�H���t�L�����1�H�T$PH�|$H�t$�L�/L�&�fD裾���8������H�t$XdH34%(��H��h[]A\A]A^A_�@H�1�L��H�D$0H�u��H�L$0I��J� H�D$PH�D$(H�H�|$@H�D$H�w��������V���fD��F���fD��6����I��f�AWH��I��AVAUE��ATUH��L��L���GSH��H�|$8H��$�H��H�T$`I��dH�%(H�L$x1������H�L$h�1����D$4��t9H�|$`H��t�
�H�\$xdH3%(�D$4�H�Ĉ[]A\A]A^A_�H��H�=6�G����H�$H�����H�\$`L�d$hH�l$@L�|$HM����H�D$tE1������H�D$(H�D$XH�D$ H�D$PH�D$H�D$HH�D$H�D$@H�D$�Hf.�E9�w+D�T$tD;�m���AD�H��I���!�L�|$HA��M��trH�D$(L�D$ H�D$XH�L$H�T$H�t$H�<$H�D$P���H���t\E��y�D�T$tD;�����AD�I���8L�|$HH��A��M��u�fDH�\$`H��tH��螺H�<$�������L9|$Hu���H�\$`����{��T�e���DD$4�D$4��H�t$`H)�A�؃���1ɸ�)�H��1Ƀ�A9�v!�ω‹<>9<u�Q��H��H�A9�w�@L�d$hD;��H�������DH�t$`H)�A�؃��|1ɸ�)�H��1Ƀ�A9�v��ω‹<>9<u�QH��H���f.�H�D$8H�\$`L�d$h�(������E���D)ˍA��I)��H��*���f.�H��1��F���fDH�|$`H��t�1�蜺���8�������D$4�
���H�D$8H�\$`�(�[����D$4�N����D$4�A���������USH��H�5%�H��HdH�%(H�D$81�H�p֔H�L$�D$H�D$0H�T$ H��H�@H�D$ H�D$PH�D$(PH�D$HP1�L�L$0L�D$H�j�H�� ���ta�|$?��L�L$0M����LcD$E��~>HcT$H�|$H���t$ H�t$0H�L$8���H�5v�G��XZH�T$��趲����t*f��CH�H�D$8dH3%(ugH��H[]�fD�D$���t��CH���fD�@H�D�1�1�����@H�Y��1�1����CH���9��f���USH��H�5��H��8dH�%(H�D$(1�H�p֔�$H�L$H�T$H�@H�D$H��PH�D$P1�L�L$L�D$0��Y^���tRLcD$E��~H�<$?iHcT$H�|$H��A������t$H�t$(H�L$0�R���H�5+�G��XZH�T$���k�����tG�CH�H�D$(dH3%(u>H��8[]�D�@H��1�1����@�D$���t��CH�����f���SH��H�5��H��@dH�%(H�D$81�H�D$H�L$�D$�D$H�T$PH�D$(P1�L�L$L�D$(��ZY���t3�|$?�|$?~A�@H�e�1�1�����CH�H�D$8dH3%(uiH��@[�fDHct$L�L$H�L$0H�T$(L�D$H�|$ ���H�T$H�t$������H�D$(H��tH�T$0H��C�S땐�CH�����ff.���AVAUATUH��H�5��SH��0dH�%(H�D$(1�H�L$ H�T$�������H�|$��I�� �I��$�H�����H�5,�H��������u�;H��肾��H����H)�H�߉��<�H��H���_�}�6H�D$�oEH�@H��H�EH�� ���H�D$(dH3%(�H��0[]A\A]A^�A��$�t�I��$�H�z�H��HD�H�D$H�L$H��E1�I��p֔HcpH�8M�MM�E���I�UI�u��腮��H�<$�J���M�EH�|$H��1�H�,�1��NH�|$H��t1ҹ���F����t	AƄ$�E��uSH�D$�E�EH�$H�E����f.����w���fDH���XE��H���xD���H���(������I��p֔H�D$H�L$H��HcpM�MM�EH�8�	�I�UI�u��蚭��H�<$u
H���۲�V���A�����f.����AVA��AUATUSH��dH�%(H��$�1����P��~]A��1�I����H�É��F��H��H��t7H��H���L��1���5L��E���pH����aH������H�CI9�u�1�H��$�dH3%(uH�Đ[]A\A]A^�����@��S��2� H��v H��0dH�%(H�D$(1�H��H���K�Vn1��H�ӥH�5���s1�H�ڿH�5���r�anH�D$(dH3%(uH��0[��6��fD��SH��H�5K�H��dH�%(H�D$1�H���E����t�C�<$脴����H�H�D$dH3%(uH��[�����@��USH��H�5�H��dH�%(H�D$1�H��������t8�<$���H��H��t?H�������ƉC��x>H���f��CH��H��W��H�D$dH3%(u/H��[]��CH���H�5	$�1��P�s��#����ATUSH��H�5��H��0dH�%(H�D$(1�H�L$H�T$�D$H�D$ H��H�D$P1�L�L$0L�D$��Y^���tp�|$�D����T$�|$A�ą�uu����H��H�����T$H�t$H���3����D$H��tx�#���H��H��txD�cH��D���L��CH��H��M���H�D$(dH3%(�~H��0[]A\��{�����tG�|$�n����T$H�t$ �|$������H���e���f����H��H��u��CH��fDH�g��1�1��K��CH��n������fD��AUATUSH��H�5F�H��hdH�%(H�D$X1�H�D$H�L$ H�T$PH�D$P1�L�L$8L�D$��ZY�����H�|$���|$�ND$��D$�]���l$9��Lc�L�d$PH�t$(�L��L���������H�D$H�t$���D$�D$0�D$4�D$8L�d$@�D$H荮�t$H��t$HH��H��t$H�t$HD�D$(H�L$@�T$8�Ͽ��H�D$8H�+H�� �C�D�CH�D$XdH3%(��H��h[]A\A]��H�I��1�1����CH��fD�K�<,1�)�Hc���������fD��.���L$�1�A��H��1��b��l$�������@����uSH���F�����H�[�@�{hf.����1��f���H� ֔H�B`H��t,H�Hc�H�J`H�xH�H�zPtH�JXH��tH�H�BX��H�BP��f���H�H��H�1�H�GXH��H)���h���H����SH�à֔E1�1�H��XZ�H���H�C`1�H�CXH�CP[�ff.�@��AVAUATUSH�� H�Š֔dH�%(H�D$1�H�]PH�����EH�����EHL�d$I��L�t$H�EP�H�H�U`H�H�]`H��H����H�sL��H���W��uӿ�9���@�@H�D$��H�L$M��1��@A��@�A�@H�SH�$H�H�`�H��8H�D$H��V�L���aL���a�Q�����EHH�D$dH3%(u
H�� []A\A]A^�������SH�à֔H���l	H�{PH��t/H�H�CP蔪H�{PH��u�H�{`H��tf�H�H�C`�t�H�{`H��u�1�[����H����fH�ܴH�5��1���hH���g��UH��SH���n���Hc؃��tH�]�EH��[]���k���H�A��1��1��$�H�]�EH��[]�D��SH��H�5�|H��dH�%(H�D$1�H�������t�C�<$�T����H�H�D$dH3%(uH��[��4��@��UH��H�5��SH��8dH�%(H�D$(1�H�L$ H�T$H�D$H�D$ L�D$�&����tNH�\$ �{t�{tXH��蘺H�\$ H��T$H�t$�|$�D$�ڼ��HcL$H�T$ H�H�
�EH�EH�D$(dH3%(ucH��8[]�@�C��v�����C�p�H�D$ �oH�SH��H�PH�� ��v
H���:H�D$ �@H���@�P������ff.���UH��H�5��SH��(dH�%(H�D$1�H�L$H�T$H�D$H�D$�����tPH�\$�{t�{tmH���}�H�\$H�H�t$H�|$�D$H��u:�}��HcL$H�T$H�H�
�EH�EH�D$dH3%(uvH��([]��1��Q������C��v�����C�@�H�D$�oH�SH��H�PH�� ��v
H���X9H�D$�@H���@�;�������ff.���SH��dH�%(H�D$1���u2H��1�H���a���tH�$H���Ct+H��f��[bH�D$dH3%(uH��[�DH����b��f���SH��dH�%(H�D$1���u2H��1�H���a���tH�$H��8�Ct+H��f���aH�D$dH3%(uH��[�DH������f���SH��dH�%(H�D$1���uBH��1�H���`���t+H�$H�H��C����<3H��f.��KaH�D$dH3%(uH��[�DH����R���f���SH��dH�%(H�D$1���u2H��1�H����_���tH�$H�H��C��H��
D��`H�D$dH3%(uH��[������SH��dH�%(H�D$1���u2H��1�H���_���tH�$H�H��C��H��
D�[`H�D$dH3%(uH��[��p�����AWAVA��AUATUSH��H�t$0H�L$DH�T$hL�L$PL�D$HH�5��dH�%(H�D$x1��c������A����H�|$H�G<��E1�<��H�G�PpI����DD�t$H�H�|$hA����H�t$(1����H�D$ ���uV�V����8H�������H���1�I���1���H�\$ H��u�!fD諣H��H�;H��u�H�|$ 蕣H�|$(苣H�D$0�@H�H�D$xdH3%(��H�Ĉ[]A\A]A^A_�DL�'L���1Ҿ�x��Hc��1�L��H��H�D$(H�D$hH��H��H�[������E�D�t$H�l$XL�l��2@L���(�H�D$XL�8I�H��1�L��H�C��L9������1�H��L����������L�t$XM�>A�t�A�u�A�G��v����A�G�M�I�H�D$X�AoH�I�WH�PH�D$XH�8�v
�_4H�D$XH�8�GH��BL�8A��K����6���fDH�|$P�G<��E1�<u
H�G�PpI��L����1Ҿ�x�ÉD$Hc��n�1�L��H�D$ �OL�d$ ����H�D$pE1�H�l$XH�D$H�D$@H�D$H�D$`H�D$������H�\$XH��zt"�zu�B����H��蟸H�D$XH��\$@ZI����Hc�H����HcT$@H�t$`I�D$�H���I�|$�H��H�5�>�c�H�D$XI�|$�H��H�H�0�K�A����1�L��A���D9t$��1�H��L�������H�L$H�T$E1�E1�H�t$L����A�ǃ��
����e�`�H�L$p�dH��H��H�D$`1���H�|$`覫���D$@����D���H�|$hH�D$(H�8H�@�/���@L�/�*����H�|$`��� ����I�$H�T$ H�t$(H�|$h�������)������fD���H�T$8�B蛟H�T$8H�H�D$X�o
H�H�RH�PH�D$XH�8�v
�1H�D$XH�8�GH��BH��z�����
����,���ff.����AUATI��H�5��USH��8dH�%(H�D$(1�L�l$H�T$ H�D$L�D$L���D$�����tiH�Š֔H�}`�H�|$�uqH�7H��v�1�H���1���H�D$H�0�T$�|$ �	H�����A�D$I�$H�D$(dH3%(�H��8[]A\A]�fD1�H�T$������H�|$�b�H�t$ H��L��A�L�D$����H�|$H��t�c/�T$�|$ H�5S��~H����a���H�r��1�1��?�A�D$I�$�G���@� �覝H�U`H�E`H���u������H�L$H����1����H�|$螝A�D$I�$����F���fD��U��SH��H��(dH�%(H�D$1�H�D$���H�L$H�T$��H�H�5�oH�D$1��2����tU蘞���t$�|$�H�����M��uH��CH��3��tk��uF�H���1�1����@�CH�H�D$dH3%(uIH��([]�fDH�%��1�1�����f��H���1�1������/���ff.�@��U��SH��H��(dH�%(H�D$1�H�$�d���H�L$I���H�H�T$H�5��H�D$1������tc�T$�t$�<$苣����u�CH��Mf.��K��������~v��
uI�
H���1�1�������CH�H�D$dH3%(��H��([]�f���uK�H��1�1��������u#�H��1�1���y���H����1�1��[��n���fD�H�\�1�1���6��I���謶��ff.�����G������SA�����H�=N��KJA�ع��
H�=8��-JA�ع��H�=$��JA��1ҹ�H�=���IA�عH������H�=����IA�ع��H�=��IA�ع��H�=̽�IA�ع��H�=���zIA�ع��H�=���\IA�ع��H�=���>IA�ع��H�=r�� IA�ع��H�=\��IA�ع��H�=E���HA�ع��H�=.���HA�ع�	�H�=��HA�ع�
�H�=��HA�ع��H�=��lHA�ع��H�=ռ�NHA�ع�
�H�=���0HA�ع��H�=���HA�ع��H�=����GA�ع��
H�=}���GA�ع��H�=i��GA�ع��H�=R��GA�ع��H�=<��|GA�ع��H�=&��^GA�ع��H�=��@GA�ع��H�=���"GA�ع��H�=��GA�ع��H�=λ��FA�ع��H�=����FA�ع��H�=���FA�ع��
H�=���FA�ع��H�=w��nFA�ع��	H�=a��PFA�ع��H�=L��2FA�ع��H�=6��FA�ع��H�=��EA�ع��H�=���EA�ع��H�=��EA�ع��
H�=ں�EA�ع��
H�=ƺ�~EA�ع1Ҿ
H�=��[�bEf���H�����H�=�����1�H�����ATA��US��H��@dH�%(H��$81�H��H�4$H�}�9�����t\�E��tRH��$�H��߉�$��!���H�������xH��$�H��$8dH3%(H��uH��@[]A\�@� �輰��f.�f���H���3���1�H���ff.����USH��H�57�H��(dH�%(H�D$1�H�L$H�T$H�D$蔽���tWH�|$�e���H��H��tEH��赟���ƉC��xDH�����CH��H�����H�D$dH3%(u5H��([]�fD�CH���H�5��1��U4�s��˯��ff.�UH���SH��轓H���@�@H��t*H������H��ƉC�u��CH�H��H��[]�@�@H��H��[]�f���AVAUATUSH�� dH�%(H�D$1�����H��1�H�T$��H�t$��M���������L�l$M�eA�|$t&A�|$uA�D$���L���a�H�D$L� M�$$H�5��L��趭����urL�-��FM�e���^M����L�������C���j��L���x��CH����CNH�D$dH3%(�&H�� []A\A]A^�f�H�5�L���1�������H�J�F�CHcH��fDH��H�-B�QUH�*�FA�H�ߺH�5��H�H��HD��bH���FH�ߺH�5��Hc�ZH���FH�ߺH�5)�Hc�jZH�s�FH�ߺH�5�Hc�LZH�u�FH�ߺH�5C�Hc�.ZH���FH�ߺH�5*�Hc�ZH��FH��A��H�5�H�H��HD��UaH�.�FH��A��H�5�H�H��HD��*aH���FH��A��H�5ӸH�H��HD��`H��FH��A��H�5��H�H��HD���`�,����H�5L���y�������H�5��L���b������
H�3�F�CHcH����@L�t$I�.�}t"�}u�E����H��訧H�D$H�(H�}�ǽ��I�E�`���fD�C1�L�%$��c���H��F�CHcH��g���f.����A�D$�ΏI�EH�D$�Ao$H�I�T$H�PH�D$H�8�v
��!H�D$H�8�GH��BL� A�|$������z���H�5&�L���A�����uEL�-6�FMce���X�CL�#���DH�5��1��/�s�}���DH�5ӶL���������L�-J�FMce��u�H�l$L�uA�~t!A�~u
A�F����L���5�H�l$H�EH��A�E�d�������E蝎I�H�D$�oMH�H�UH�PH�D$H�8�v
� H�D$H�8�GH��BH�(�}���������H�5	�L��������uyH���FH�*H����H��肙���C���0��H���ݐ�CH��n���L�t$I�.�}t"�}u�E���(H��艟H�D$H�(H�EA�E�k���H�5��L��腨����uIH���FH�(H��t\1�H�����H���H��H��H���C�����sH���D��CH�����H�56�L���)�����u2H��FH�(H��u��CH�-D���CH�-4�����H�5�L��������y���L�5%�FM�.���XM���<1�H��L���H��H��H���C���s�sL��蕏�CH��&�������E虌I�H�D$�oUH�H�UH�l$H�PH�}�v
�H�l$H�E�@H�E�@H�m�x����4������A�F�3�H�EH�D$�AoH�I�VH�l$H�PH�}�v
�CH�l$H�E�@H�E�@L�uA�~�����
���1�H�5����4,�C���H�5u��1��,�5����CL�-������H�l$L�eA�|$tA�|$u
A�D$��w9L���֢H�l$H�EH�8���I��d���H�5��1��+�u������A�D$�#�H�EH�D$�Ao$$H� I�T$H�l$H�PH�}�v
�1H�l$H�E�@H�E�@L�eA�|$�h����V���@��ATUSH��dH�%(H�D$1���u_H��1�H���ME���tHL�$$I�$�{t�{u�C��wLH���ԡH�$H�H�;�ժ���EH�E���EH�D$dH3%(uyH��[]A\�f�����C��I�$H�$�oH�H�SH�PH�$H�8�w)�GH��BH��{�q����]���f��H�$H�8��蝥��ff.�f�����uSH���O����CH�[�f��;Eff.���ATUSH��dH�%(H�D$1���w7H��1�H���D���t#1���tT�/����E��t7H�E�
D��DH�D$dH3%(��H��[]A\�fDH�E��fDL�$$I�$�{t�{u�C��wH���,�H�$H�H�;�y���D����C蘈I�$H�$�oH�H�SH�PH�$H�8�v�H�$H�8�GH��BH��{t���7������ATUSH��dH�%(H�D$1���w7H��1�H����B���t#1���tT菷���E��t7H�E�
D�CH�D$dH3%(��H��[]A\�fDH�E��fDL�$$I�$�{t�{u�C��wH���H�$H�H�;�y���D����C�h�I�$H�$�oH�H�SH�PH�$H�8�v�|H�$H�8�GH��BH��{t���������SH��H�5XH�� dH�%(H�D$1�H�T$H�D$H�D$�������H�|$1�H�T$�W�����H�|$�ՆH�=��IH��t���躆�耆H�T$�@�@�oH�]�IH�RH��H�PH�� ��vH���H�/�FH�
�CH�H��5�H�L$1��H���x�H�|$�.��CH�H�D$dH3%(uH�� [�D�CH�=ġI�8���財��f���USH��8dH�%(H�D$(1��D$H�\$ H�����1�I��A�H�D$ H���H��H�s�IH����cH���/<�|$vH���H�D$(dH3%(uH��8[]��$���@��ATLc�UH��SHc�H�� dH�%(H�D$1��6�H�$���f�PL� E1��@H�D$�ӄ�H���I1�f�HA�H�
��IH�H���@I��H�D$H���H���c��u	�=u�ItOH���G;H�{�>;H�{�5;�=R�IvH�=5�I�H�L$dH3%(L��u`H�� []A\�@H�=	�I�$���tH�5IH����I���@�辤��H�=�I��菱��I�D$I�$�^����ȟ�����AVAUI��ATUSH��L�%��IdH�%(H�D$1����I���9f�H���H�$L�����H�L��H�H��H���X�������1�L��L���S�����1�L���1�H�$H�+�}t��}u��E��v�����E��H�H�$�oEH�H�UH�$H�PH�;�v�*H�$H�;�GH��@H�+�}�D����3���1�H�L$dH3%(u-H��[]A\A]A^ÐH���8�����fD1�L���6�����l���ff.����SH��H�5R_H��0dH�%(H�D$(1�H�L$H�T$ H�D$L�D$�`������H�|$1�H�T$趎����H�|$�4�H�=��It�E���H�=�I�������ՁH�T$�@�@H���I�oH�RH��H�PH�� ��vH����H�|$ H�5���誜���CH�H�D$(dH3%(uPH��0[�f�H�L$H�W��1���H�|$�n��CH�벐�H�=$�I�;����
���f.���H�=�It
���D����������釅�����H��H�=��IH��t�w6��H�=��It��H�=��I�f7H���I1�H���@��H�=l�I�f���H�=d�Iu�FH��fDSH��藐��H�=@�I�w"�e��CH�&�IH�[�D�H�=�I��f.�����uXUH��SH���Z���H��H���CH��t/H�H��t'H��fDH�0�H��H���[H�C�H��u�H��[]�@�[;f.����H�H�PH�H�81��ff.��UH��SH��H��H��t'�CH��H���G�CH���CH��[]���.H����f���H�ה1�H�5\�H�8�T�@��AUATUSH��H�5(�H��HdH�%(H�D$81�H�(הH�l$L�D$H���D$H�1���������
L�l$L�d$ �D$(
H�=ΰ�i��D$4E1�E1�H�D$ L��H��1�jL��j�e\��XZ�|$4wr�����H�|$H�����|$td�oH�GH�C�G�����{wk���G�C�CH�D$8dH3%(��H��H[]A\A]�L���P�fD1���'H��0�H�=� 1��L���4�DH����H�|$�G�����}�y���fDH�ה1�H�5�H�8��a���H�|$�N:H�5���H�P1���CH��-����"���f���SH��H�5;PH��dH�%(H�D$1�H���5����t`H���(@H�$�"���D����u_H��H���IH���H��������H�D$dH3%(�6H��[�fD��H�5�QH���'YH�$낐��H�5��H���YH�$���[�������H�5j�H����XH�$�D�'����f���H�5C�H���X�B���f���H�5�PH���XH�$������f���H�5�H���WXH�$�����f���	H�5�H���'XH�$�������V����A����AUATI���UH��SH��dH�%(H�D$1��&{M�l$�@H���@L��H�$�w����C�ƅ���L����}H��H�H�$�@H�הH�8�e���H���
#H��` �L�`H�@0H�E�PpH��H��E1�j�A�H��H�5l��}�XZH�D$dH3%(u*H��[]A\A]�H�5)��1���H�$�s�W����<���ff.��AVAUATI���UH��SH��H�� dH�%(H�D$1��z��@�@H�D$�yL�u�@�@L��H�D$�K���L�l$��A�E����L���|I�EH�D$L�l$�@H�E�pH�xA�u�z|H��I�EH�D$�@H�@הH�8����H���!H�߀` �H�hL�`0H�C�PpH�L$H��E1�jA��H��H�5��%�XH�CH��Z�PpH�L$H��E1�jA��H��H�5l����Y^H�D$dH3%(u0H�� []A\A]A^�f�H�5���1��=L�l$A�u���誔��f.���USH��H�t$���AH���� H��H����H�XH����H�S�:��;;{�@�JPH�BH��H��H��H)�H�4�H9�r�fDH��xH9����Pt�J���w�H9x0u�@���xH���o@PH�T$H�@`H�|$H�B�G�G�P��G��v<��H�CH�|$1�H�P�9H��[]�f�H�`�H���H��t�4H��הH9t�1�H�5[����H�]H�S�:�����H�y����3H��[]�@H���H�ה1�H�81��~�H��[]��H�t����R	�@���ff.�f�ATI��UH��S��HcWH���������9w|+H�|�L��Hc��ۋ��]H�E�]Hc��D�H��[]A\Ð�w1�Hc�H���wHcUH�E�fDUSH��H���H�T$@H�L$HL�D$PL�L$X��t:)D$`)L$p)�$�)�$�)�$�)�$�)�$�)�$�dH�%(H�D$(1�H��H��$1�H�D$H�D$0H�L$H�D$ H�`�H�|$�D$�D$0��Ņ�t1HcS���H������9s|DH�|�H�t$�UHc�迊��kH�|$��uH��H�L$(dH3%(u(H���[]�D�s1�Hc�H����uHcSH���R���f���AUATUSH���
��/wKH�BD�A��D�H�,0A��/���q�2J���/��H��
�9t8H��1�[]A\A]�H�BH�HH�JH�(H�AH�BH�H�HH�J�9u�H�OI��H��H��H�5H�1��-���A�D$���H������������H�53�H��1���I�L$8H��H��L�-��H�5�H��ID�1�����A�D$T��t I�L$HH��H�5�H��H��ID�1����H��H��H�5�1����H��1�[]A\A]��H�5�H��1��g����a���f�H�5H��1��O���A�D$H��q�-���fDH�5a�H��1��'����!���f�H�5@�H��1�����A�D$H��q���H�B���H�J���ff.����AUATUSH��(dH�%(H�D$1�H��t*H�HהA��H��H��H��L� �"0H��L������uC��2H�5g��H��1��xH�D$dH3%(�-H��([]A\A]�f�1�H�L$H�T$D��H�5s�����t�H���I��H����H�XH���H��XH�ƀjZ�H���D��D$H�t$H��H�L$�P�;������H�D$H��oEH�@H��H�EH�� ��vH���v�E�E����fDH�`�H���H��t�.H��הH9��H�5ɛ�1��UI�\$�<����EH�E���貍��f���ATUSH��dH�%(H�D$1�����H��I����H��H��t9H�XH��t0L���4�;tkH�D$dH3%(��H��[]A\�H�`�H���H��t�(.H��הH9t�1�H�5����H�]L���=4�;u�H���H��t�H�ƀjZ���H���I�<$H��H��p3[A�����V���fD�{,�F���行�����ATUSH��dH�%(H�D$1�����H��H���I��H��tiH�XH��t`H��H��X�3H�ƀjZ�H���
�H�}H��H��H��p3[A��Q�H�D$dH3%(u`H��[]A\��H�`�H���H��t��,H��הH9t�H�5���1��II�\$�_�����+�謋��ff.����ATUSH��H�t$dH�%(H��$�1�H�D$H��t&H�Hה��H��H��L� �T,H��L���I���uE� /H�5���H��1��H��$�dH3%(��H�Ġ[]A\��H���HI��H���dH�XH���W1�H�T$ H�5ȡ���
����t�H������vH����H�D$(H�T$ �j�@�l��t6Lc�1ҿL��I���HoH�|$ H�T$(H�5��H�D$(�-�L)d$(H�|$H��L�d$�6H��`�H�L$(H�t$0H�|$PL�d$pH��8H��PH��$�H����l$xH�D$XH�D$H�D$PHH�D$`H�D$hH��$�Ƅ$��D$0H�L$8H�T$@H�D$H�l6�����H�|$tL���$H�|$(H���k�����m�a���H�`�H���H��t�p*H��הH9�6���H�5A��1���
I�\$�d���H��tKH�D$(1�@����H�KH���H�ה1�H�81��h�����H�KH�՗����u�H�|$H���?5���f.�H�|$(H��t�mH�|$tL���#H�S1��H�5W��
H�D$�@�b���臈�����AUATUSH��dH�%(H�D$x1�H��t*H�הA��H��H��H��L�(�?)H��L���4���u@�,H�5���H��1��H�D$xdH3%(��H�Ĉ[]A\A]�H���8H��H���L�hM���Ic�1ҿ�lD��H��H���b-����1H�D$H�|$0D�d$XH�D$PH�`�H�t$H�D$0HH��PH�\$`H�D$8H�D$@H�D$HH�D$h�D$p�D$L�l$H�D$ H�D$(��3H��A���ckA�����H�|$H��������oEH�GH�E�G�����}vH���1�H�|$�G���G�E�E���H�`�H���H��t�'H��הH9�����H�5y��1��L�k���@H���j�EH�E�J�����j�{���fDH�הI�MH�n�1�H�81�芓����� �����AVAUATUSH�ĀdH�%(H�D$x1�H����H�@ה��H��I��H��L� ��&H��L�������������H���
I��H��tZL�`M��tQA�D$�����@���I�D$M�D$H��H�HH�ה1�H�81���ifDH�`�H���H��t�@&H��הH9t?H�5��1��	M�f�o������(H�5d��H��1��u	H�D$xdH3%(�oH��[]A\A]A^�@H�5)��1��=	A�EI�E�fDH���%I�T$A�D$H�
�M�L$L�BH��HD�H���pH�הH�-�1�H�81�蹑XZ�]���f�Hc�1ҿ�i��H��H����)����SA�D$�7H�H�8����
%I�t$H��I�������[H�H�T$��H�|$0H�D$0HH�T$PH�t$H�S�l$XH�D$8H�D$@H�D$HH�D$hH�T$`�D$p�D$L�d$L�t$ H�D$(�40H�߉��g�����H�|$H���n����oAEH�GI�E�G����A�}vL���H�|$�G���GA�EA�E�"����H���HgH�ה1�H�5�H�8�P����E1�1����fDH���gA�EI�E����fD��f�I�D$M�D$H��H�H�$���H����fH�ה1�H�5�H�8�׎�}����m���ff.�f���AUATUSH��H�t$dH�%(H��$�1�H�D$H��t'H�HהA��H��H��H�(�#H��H������uB��%H�5V��H��1��gH��$�dH3%(�5H�Ę[]A\A]�f�H���H��H���H�XH����H���H���>�@�UIc�1ҿ�FfD��H��H���'����gH�|$H��L�l$�-H�t$ H�|$@H��`�H���L�l$`H��8H��PH�D$@HH�D$PH�D$HH�D$H�D$XH�D$xD�d$hH�l$pƄ$��D$ H�L$(H�T$0H�D$8�}-�����H�|$tL���H����d����H�`�H���H��t�!H��הH9�����1�H�5W����H�]H���H������E��uDH�|$H���,�S���f.�H�KH���H�ה1�H�81��r��&���DH�KH�ݎ��H���0dH�D$�@H���H���dH�|$tL���H�S1��H�5f��)H�D$�@������fD��AUATUSH��dH�%(H��$�1�H��t*H�הA��H��H��H��L� �L H��L���A���uE�#H�5���H��1��H��$�dH3%(��H�Ę[]A\A]�DH���@H��H���dL�`M���W1�H�T$H�5�D�������t�H�D$H�8��1ҿHc�H��I��H���fcH�T$H�5
�H�D$H�D$H�8�H�H�D$H�T$H�|$@H�t$ H�T$`H)�D�l$hH�D$H�D$pH�`�H�D$@HH��P�D$ H�D$HH�D$PH�D$XH�D$xƄ$�L�d$(H�D$0H�D$8�*H�|$���!b�����H�|$H��������oEH�GH�E�G��vz�}vH�����H�|$�G���G�E�E�d���fDH�`�H���H��t�hH��הH9�6���H�59��1���L�c�e���@�sa뛐H�הI�L$H�U�1�H�81��q�����}�����AVAUATUSH��dH�%(H��$�1�H��t*H�@הA��H��I��H��H�(�H��H��诿��uK� H�5���H��1��H��$�dH3%(� H�Đ[]A\A]A^�f�H���I��H���|H�hH��tsL�t$1�H�L$D��L��H�5B��e����t��E���������H�EL�EH���H�HH�ה1�H�81��;��F���fDH�`�H���H��t�H��הH9����H�5���1��I�n�I���@H�D$H�8��1ҿHc�H��I��H���2`H�T$H�5���H�D$H�D$H�8��H�T$H)�H�T$�E�]H�|$H�����H�uH��H����H�T$����H��H�|$@H�t$ H�\$0H�D$@HH�D$HH�D$PH�D$XL�t$xH�D$`D�d$hH�T$pƄ$��D$ H�l$(L�t$8�H'H�|$����^�����H�<$H������oAEH�GI�E�G����A�}vL����H�<$�G���GA�EA�E���H��� H�U�EH�
o�L�ML�BH�k�HD�H���pH�הH���1�H�81��=�XZ�F���fDH�D$1������]�y���H�EL�EH���H�H���H����]H�EL�EH���H�H���H���]H�ה1�H�5f�H�8辅�����Ty��@��AUATUSH���
��/wSH�BD�I��D�
H�40H�A��/��D�AD�N�$A��/����L��
�WH�u=H��1�[]A\A]�H�BH�HH�JH�H�H�AH�BL�!H�HH�J�WH�t�H����\H��H��I��H���m�L��L���:H��1�[]A\A]�H�B�H�J�f�UH��AWAVI��AUATI��H��SH��(dH�%(H�E�1���g��H��XI��Hc�H��H��H%�H)�H���H��H9�tH��H��$�H9�u����L�|$D��L��I���L����H�M���L��H�ǀ��������H�הL��H�8�R��L����I���[D��H���@�@H�E�H�E�H�x D�k�g^L��H�H�E��@H�E�A�f �I�FI�F0I�D$�PpH���H�M�jE1�A�H��H�5��%�XZH�E�dH3%(u"H�e�[A\A]A^A_]�DH)�H�L������v��ff.�f���UH�5�wH��AVAUH�U�ATSH��H�M�H��0dH�%(H�E�1�������1H����I��H����U�H��BH�H��H��H%�H)�H���H��H9�tH��H��$�H9�u��t	H)�H�L�L�l$H�u�I���L�����E�H�M�L��H�ǀ��P����������ZI��H�E��@�@H�E�L�p L���Ze����A�E����L���\H��I�EH�E��@H�C�PpH���H�M�jE1�A�H��H�5v�臧H�E�A�d$ �I�D$0I�D$XZH�E�dH3%(uNH�e�[A\A]A^]ÐH�הH�M�H�Z�1�H�81�蒂��H�5���1��L�m�A�u�D����u��ff.�UH��SH��H�5)�H��(H�T$H��dH�%(H�D$1��P�H���W����%=�=��=��H�5��H��1����sH�{H�T$H�L$�H�T$H��1�H�5�����1�H�5��H�����H�D$dH3%(��H��([]�fD�����H�5n�H���������tQ��t1��t��[����E���@H�5C�H��1��G����H�53�H��1��/����H�5$�H��1������
H�5�H�����l����H�T$H�5��H��1��������Ps��AWAVAUI��ATUH��SH��H��H�vH�|$I�}H�L$(H�T$ L�d$0dH�%(H�D$81��Y�A�EuH�D$0I��H����f.����V��@�@H�D$��VL�t$(�@�@L��H�D$0�b��H�\$�ƉC����L���uYH�H�D$�@I�E0H�\$0�pH�x�s�QYH��H�H�D$0�@H�8הH�8����H����@H���>VH�L$H��H��AoE@�AoMH�AoU P(I�U0H�P8H�K0�K H�CH�E�PpH�L$H��E1�jA��H��H�5���£XH�EH��Z�PpH��E1�L��jA��H��H�5�萣Y^H�D$8dH3%(��H��H[]A\A]A^A_�H�CI��H��t)H��L�|$(L����`��H���L��L���P����u�H�T$0H���E����%LEt$LD�L�t$�*���f.�H�5���1��m�H�\$�s�S�����p��ff.���AUATUSH�����/w[H�JD�H��D�
H�41H�A��/��D�@D�J�,	A��/����L����u�uCH��1�[]A\A]�fDH�JH�AH�BH�	H�H�HH�JH�(H�AH�B�f�I����3TL��H��I��H������L��H���1H��1�[]A\A]�H�J�H�B�ff.���ATUS�
��/w1H�B�qA�ȉ2J�,��/��H��
�9G,t'[1�]A\�f�H�JH�AH�BH�)H�HH�J�9G,u�H����S�oI��H�CH��I�D$H�� ��w.�S(H�s L��H��A�D$A�D$�'[1�]A\�fDL���p���H�B����AWAVAUATUSH��hH�4$dH�%(H�D$X1�����H���*�H��H����H�XH����H��H�l$(L�d$0�H�<$L�|$@L�t$$L�l$8��H��PH���H�H�D$HH�D$�f�H��PE1�I��L��L��L���������H�|$8H�����D$$H�L$H�T$P�p��x�H�|$PH��t�?*t
H�s��t����uz��RH��H�D$0H��oH�@H��H�AH�� ��vH��H�L$��H�L$H�t$H�A�AH��H�L$H�t$�(]��H�L$H�t$H�<$�P�b%H��PH����H��PH��L�����������H�D$XdH3%(u`H��h[]A\A]A^A_�f.�H�`�H���H��t�(H��הH9t�H�5�z�1���H�]�?��������l��@��AWAVAUATUSH��H�t$dH�%(H��$�1����H����H��H����L�`M����H�|$M�l$x��L���I��$PL��$�HDŽ$�H��$�H����H�D$XH��H�l$PL�d$8H�D$H�D$xL��$�H�D$�8��� I��M���lL��M�oH������~�H��H���H�D$LH�D$ H�D$`H�D$(H�D$pH�D$0H�t$H��H������u�H�L$H�T$ I��E1�H�t$(H����H��H����D$LH�|$`H�T$hH�L$0�p��ѸH�|$hH��t�?*tH�D$8H�p�Dr����u���fOI��H�D$XH��oA$H�@H��I�D$H�� ��vL���u�L�t$pA�D$A�D$L���Z��H�|$L��L���P��"�����H�`�H���H��t��H��הH9t!H�5�x�1��9�L�c�����{
H��$�dH3%(uH�Ĩ[]A\A]A^A_��j�����ATUH��SH��H�5��H�� dH�%(H�D$1�H�L$H�T$H�D$L�D$�zw���t}H���}�I��H����H�hH���|H����T$H�t$H����H����H�D�c�k�oH�@H��H�CH�� ��vH����D�c�kH�D$dH3%(��H�� []A\�H�`�H���H��t�
H��הH9t�H�5Uw�1����I�l$�C����H�D$H��t�oD�c�k�W���f�H�הH�MH��y1�L�D$H�81��mv�P����i����ATH�5�)USH��H�� dH�%(H�D$1�H�L$H�T$L�D$�v�����H����H��H����H�hH����H����T$H�t$H���>�H��H����H�8�D�g�ov���H�;H�D$�oH�@H�GH�;�v��H�;D�gH�@�hH�D$dH3%(uqH�� []A\�H�`�H���H��t�H��הH9t�H�5�u�1��Y�H�k�4���H�הH�MH�vx1�L�D$H�81��
u�����g��AWI��AVAUI��ATI��H��USH��H��8dH�%(H�D$(1�H�l$�YH��H�T$H��I������D$L��M��L��H�5*xL��HE�1�L�����T$��t�{w!H�D$(dH3%(uH��8[]A\A]A^A_�f�H���x�����f��������/w]H�r�HA���
N���/��D�HD�
H�A��/��D�@D�N�A��/wq�� LƉA���9G,tC1���H�BH�HH�JL�H�AH�BH�	H�pH�rL�H�FH�BA���9G,u�SH�H��H�w L������1�[�H�r��H�B�H�J���AWH�5�AVAUATUSH��H��hdH�%(H�D$X1�H�l$(H�L$0H�D$HL�D$H���s����KH����I��H���7H�|$(�G<�n<�F�wH�?H�T$@�����%H�D$@L� �D$H�t$0H�L$HM��$�L���P�<�����+H�D$H����H�t$PH�t$��uSM��M��u.�I�H�D$PH�D$HI�FH����M��L���I�ƋD$H�L$L��H�t$0�P�ñ��u����H��@�@H�D$(��HH�L$H�T$8�@H�D$ �@H�D$H�pH�x��H�D$HL�t$(H�@0�pH�xA�v�bKI�H�D$(�@L�|$PL����S��L�t$ ��A�F���
L���.KH��I�H�D$ �@H�C�PpH��E1�H��j�A�H��H�5}���H�C_H��AX�PpH�L$ H��E1�jA��H��H�5���͕AY�@AZ��GH��H�D$H�oC�oHK�oP S(H�@0H�C8L�#A�M I�]M�e0DH�D$XdH3%(�TH��h[]A\A]A^A_�DH�ה1�H�5XtH�8�o�fD�3I�����H�|$HL�D$0�|H�|$(��mH�GH�@pH���\�t$L�D$D�v��L�D$D��H��L�������-���F��@�@H�D$(�FL�t$(�@�@A�t$I�|$H�D$ A�v�qII��t$L�t$ H�D$(H�|$0�@A�v�NIH��I�H�D$ �@H�C�PpH��E1�A�jH��H�5��H�Ǻ�"�XH�CH��Z�PpH�L$ H��E1�jA��H��H�5ݷ��Y�@^��EH�|$0H���@H�D$ H�H�S�@�C�D$�p�H�C(H�C L�c8����L�D$0H�הI�L$H��r1�H�81���n����M������H�D$(H��x1�H�H�הH�81��n���H�5��1���L�t$ A�v�����a����AUATUSH��(dH�%(H�D$1�H�D$H����H�HהA��H��H��H��L�(��H��L��躣����E����H�D$H�����H��H����H�@H��t{H��H�D$�H�D$L�L$I��H�L$�H�5�H�x01��H�D$dH3%(��H��([]A\A]�fD�H�5|n�H��1����H�`�H���H��t��H��הH9t�1�H�5�m��Q�H�C�E����1�H�T$H�5� D����l��������O����_�����AUATUSH��(dH�%(H�D$1�H�D$H���H�HהA��H��H��H��L�(�EH��L���:�����E���)H�D$H���h�H��H����H�@H����H��H�D$L�d$�-H�D$I��L��L�L$�H�5�H���1��s�H�{(H��t:�D$t3H�GH�@pH��t&��I��L��H��H�5�1��8��H�D$dH3%(��H��([]A\A]Ð�;H�5�l�H��1������H�`�H���H��t�(�H��הH9t�1�H�5�k���H�C����1�H�T$H�5�D���*k���������\�����]�����AUATUSH��(dH�%(H�D$1����/wSH�r�xA���:N�I���/����H��H��8uI1�H�\$dH3%(��H��([]A\A]�fDH�BH�pH�rH�H�H�FH�BH��8t��QH�.H��H��H�$���D$�T$��p�I��H�`�H�I9��x�����@L��H���@I��H���@��L��H���F�B����\��H�r�m�����AUATUSH���
��/w;H�B�qA�ȉ2J�,��/��H��
�9t1H��1�[]A\A]��H�JH�AH�BH�)H�HH�J�9u�L�gH��L�o8L���K���PM��t(D�C@L��L��H��A��0H��1�[]A\A]�L��H���5
H��1�[]A\A]�H�B�f���UH��SH���8H����?H�EH�3H���ǪH�EH�SH�PH�M�S �A ����	ЈA H�UH�C(H�B(H��tH��H�{([]���@H��[]�f���UH���8SH��(dH�%(H�D$1��I?H��` �H��H��H�(H�@H�@H�@(��H�{H��H�uxH��p3[A���H�
���1�H��H�,��H�L$dH3%(uH��(��H�:[I[]��Z��f���SH���G tH�H��t
��>H�CH�{(t	H�{(�\�H��[�#���AVAUATI��UH��S�~H��t%H��ZIL��H��H��[]H�@ A\A]A^����FL�6D�h�!�D��L��H�xx�"���t��C��tN��u�L�+A�}clasu�fA�}su�H����[M��]H�HA\H�Jk1�H�הA]A^H�81��gL�+A�}name�R���A�}�G����f.���H���S�H�LHH�5q1���	�H�kH�5'1����H���V�fDAWAVAUI��ATA��USH��H��dH�%(H��$�1�H�D$0�D$H�D$����H�l$1�H�L$ L�D$H��H�5�p�f����,��D$@�D$E��<1�H���@H���@H�D$������ZH�D$ H��$�L�t$(H��$�H���H�t$pH��$�H��$�H��H�l$D��$�L��$�HDŽ$�HHDŽ$�HDŽ$�HDŽ$�H��$�L��$�L��$�Ƅ$��D$pH�D$xH��$��H�|$(A��tL����H�`�H����
A����k�T$1�H���D$DH��$����D$X��1��D$dH�D$0H�D$H��$�H��H�D$PH� הHDŽ$�H�L��$�DŽ$�H��0L��$�H��$�H�D$PH��$�Ƅ$��������D$���7H�|$(�oAEH�GI�E�G����A�}vL����H�|$(�G���GA�EA�EH����H��$�dH3%(��H��[]A\A]A^A_�f.�H�l$1�H�L$H��H�5��c����}����f.�H����H�ה1�H�5�mH�8�b�x����S:�V���fDH�`�H�����H�����L�����H�ה1�H�5�gH�8�+b�#���fDL���������U��ff.���H�ה�H��H������H�Pה�H��(������H�@ה�H��������H�Hה�H�������H�0ה�H��������H�8ה�H�������H�ה�H����������|UH��SH��H�����H��H��t#H�@H��t�C�8����H�H��[]�H�`�H���H��t�`�H��הH;t�1�H�53b���H�E��������|UH��SH��H���c�H��H��t#H�@H��t�C�8����H�H��[]�H�`�H���H��t���H��הH;t�1�H�5�a��1�H�E��s�������UH��SH��H�����H��H��t#H�@H��t�8tU�CH�H��[]�H�`�H���H��t�@�H��הH;t�1�H�5a���H�E�8u�H���H���B���ƉC��x(H����9�CH�H��[]�f.���H�5���1��E��s�������UH��SH��H�����H��H��t#H�@H��t�8tU�CH�H��[]�H�`�H���H��t�`�H��הH;t�1�H�53`���H�E�8u��C���H�H��[]�@���ff.�������UH��SH��H���C�H��H��t#H�@H��t�8tU�CH�H��[]�H�`�H���H��t��H��הH;t�1�H�5�_���H�E�8u��C���H�H��[]�@�;�ff.�������UH��SH��H����H��H��t#H�@H��t�8tU�CH�H��[]�H�`�H���H��t��H��הH;t�1�H�5�^��a�H�E�8u�H���H��t�����s�7�CH��D�{�ff.�������UH��H��SH�����H��H��t+H�@H��t"H�@H�xH��t]H��H��H��[]�$���@H�`�H���H��t�8�H��הH;tD�1�H�5^��H�CH�@H�xH��u�H��H��H��[]鷸�����H��[]Ð������UH��SH��H����H��H��t+H�@H��t"�CH�@�x����H�H��[]�fDH�`�H���H��t�x�H��הH;t�1�H�5K]����H�E���ff.�������UH��SH��H���s�H��H��t+H�@H��t"�CH�@�x����H�H��[]�fDH�`�H���H��t���H��הH;t�1�H�5�\��9�H�E��{�ff.�������UH��SH��H�����H��H��t+H�@H��t"�CH�@�x����H�H��[]�fDH�`�H���H��t�8�H��הH;t�1�H�5\���H�E����ff.�����xUH��SH��H���7�H��H��tH�@H��t�C�H�H��[]�fDH�`�H���H��t��H��הH;t�1�H�5{[��	�H�E��K�ff.�������UH��SH��H����H��H��t+H�@H��t"�C�P9����H�H��[]�f�H�`�H���H��t��H��הH;t�1�H�5�Z��i�H�E���ff.�������UH��SH��H����H��H���H�@H��tvH�P�:���8;x���JPH�BH��H��H��H)�H�4�H9�r�@H��xH9�vw�Pt�J���w�H9x0u�@u`�xHtZ�CH��XDH�`�H���H��t��H��הH;t/1�H�5�Y��q�H�EH�P�:�O����CH�H��[]�fD��AUI��ATA��UH��H��SH����H��H��t-H�@H��t$A�ED�`����H�EH��[]A\A]�fDH�`�H���H��t�X�H��הH;t�1�H�5+Y���H�C���H��H�ʅ�H�v�H���Q�������ff.���H��H�ʅ�H�v�H���!������ff.���H��H�ʅ�H�v�H������{�ff.���H��H�ʅ�H�v�H�������K�ff.���H��H�ʅ�H�v�H��������ff.���H��H�ʅ�H�v�H���a�������ff.���H��H�ʅ�H�v�H���1������ff.�������UH��SH��H����H��H��tCH�@H��t:�C1�@ tH�M0H���H��t
1�H�@H9A��H�H��[]��H�`�H���H��t�`�H��הH;t�1�H�53W���H�E��������|UH��SH��H���c�H��H��t#H�@H��t�C�@����H�H��[]�H�`�H���H��t���H��הH;t�1�H�5�V��1�H�E��s�����xUH��SH��H�����H��H��tH�@H��t�C�@H�H��[]�DH�`�H���H��t�H�H��הH;t�1�H�5V���H�E����ff.������|UH��SH��H���C�H��H��t#H�@H��t�C�8����H�H��[]�H�`�H���H��t��H��הH;t�1�H�5�U���H�E��S������|UH��SH��H����H��H��t#H�@H��t�C�8����H�H��[]�H�`�H���H��t� �H��הH;t�1�H�5�T���H�E����������UH��SH��H���#�H��H��t#H�@H��t�8tU�CH�H��[]�H�`�H���H��t��H��הH;t�1�H�5cT����H�E�8u�H��pH����5���ƉC��x(H���8-�CH�H��[]�f.���H�5��1����s�������UH��SH��H���C�H��H��t#H�@H��t�8tU�CH�H��[]�H�`�H���H��t��H��הH;t�1�H�5�S���H�E�8u��C��xH�H��[]�@�;�ff.�������UH��SH��H����H��H��t#H�@H��t�8tU�CH�H��[]�H�`�H���H��t��H��הH;t�1�H�5�R��a�H�E�8u��C��|H�H��[]�@��ff.�������UH��SH��H�����H��H��t#H�@H��t�8tU�CH�H��[]�H�`�H���H��t�P�H��הH;t�1�H�5#R���H�E�8u�H���H��t�����s�*�CH��D���ff.�������UH��H��SH���#�H��H��t+H�xH��t"H���H��t]H��H��[]�x����H�`�H���H��t��H��הH;t'H�5]Q�1����H�{H���H��u��EH��[]�fD��������UH��SH��H���s�H��H��t;H�@H��t2�@(�umH����Ct~H����@����H�H��[]�@H�`�H���H��t���H��הH;t�1�H�5�P��)�H�E�@(�t��CH�H��[]�D�S�H���AUI��ATA��UH��H��SH����H��H��t-H�@H��t$A�ED�`(����H�EH��[]A\A]�fDH�`�H���H��t��H��הH;t�1�H�5�O��i�H�C���H��H�ʅ�H�v��H���Q������ff.���H��H�ʅ�H�v�@H���!�����[�ff.���H��H�ʅ�H�v�0H������+�ff.�����xUH��SH��H����H��H��tH�@H��t�C�@(H�H��[]�DH�`�H���H��t��H��הH;t�1�H�5�N��Y�H�E���ff.�������ATH��I��US��H��H��tUH�hH��tLL�������h��t.1�H��`�ڹL���H�ЋPH�p�,;�hr�[]A\��H�`�H���H��t�0�H��הH;t�H�5N�1���H�k�t�������ff.�AUI��ATA��UH��H��SH���%�H��H��t-H�@H��t$A�ED�`����H�EH��[]A\A]�fDH�`�H���H��t��H��הH;t�1�H�5[M����H�C���H��H�ʅ�H�v�H���Q������ff.���H��H�ʅ�H�v�H���!�������ff.���H��H�ʅ�H�v�H�������ff.���H��H�ʅ�H�v�H�������{�ff.���H��H�ʅ�H�v���H�������K�ff.�����xUH��SH��H����H��H��tH�@H��t�C�@H�H��[]�DH�`�H���H��t��H��הH;t�1�H�5�K��y�H�E���ff.�������UH��SH��H����H��H��t+H�@H��t"H�x(H��u]�CH�H��[]��H�`�H���H��t�x�H��הH;tο1�H�5FK��H�EH�x(H��t��p0�s�1$�CH�H��[]���ff.�������UH��SH��H���S�H��H��t;H�@H��t2H�hXH��tmH���a,���ƉC��xpH���#�CH�H��[]�f�H�`�H���H��t��H��הH;t�1�H�5{J��	�H�EH�hXH��u��CH��[]Ð�;�H�51��1����s�u���ff.�f�AVE��AUI��H�5TATA��UH��SH�Ӊ�H��0dH�%(H�D$(1�臩��E9��&H�5�SH��1��m���H�SH����1�H�5pH���O����{���{��H�H����H�5�RH��1�����A�}u	E9����H�5�SH��芨��H�D$(dH3%(�H��0[]A\A]A^�f��{t�1�H�5HSH��蹨���{�j���1�H�5$SH��螨���{�Y����H�5SH������H�H���E���D��H�5�RH��1��`����=���H�5�RH��1��G�������f�A�UPI�]HA��H��H��H)�H��H9�r����@H��xH9�������Ct�P���w�L9c0u�<@����{H�����H�5tRH���c�����Y�oCPH�D$H�S`H��H�PH�� ��v
H���p�H�D$�@H�\$��@I�UH���
�H�|$�G<tS��tk<��L�d$H�T$L���_��T$H�t$H���Φ���D$��t�|$$vL���'�H��������H�?t,�H�5�]H��萦���׺H�5�XH���z����H�5Z]H���d���뫺H�5f�H���N���H�D$�H��xH�0NP�1���H�D$�x�H�5*�H�������V����H�5�H���������8��f���ATUSH�� dH�%(H�D$1�����H��H����I��H��tqH�XH��th��H��H��H�sH�$H�T$H�SD�C��*����D$�E���EH�$H�EH�D$dH3%(u[H�� []A\�H�`�H���H��t� �H��הH;t�H�5�E�1�聼I�\$�W���������7��@��ATUSH��t'H�הH��H��H��L� ��H��L���z��u$��[�]H��H�5�E1�A\�
�DH�����H��H��t0H�@H��t'�E1Ҁ8u1�H��U[H9H@��H�U[]A\�H�`�H���H��t�0�H��הH;t�1�H�5E�葻H�C�ff.���ATUSH��t'H�XהH��H��H��L� ���H��L����y��u$��[�]H��H�5E1�A\�-�DH�����H��H��t(H�@H��t�E�x9����H�E[]A\��H�`�H���H��t�X�H��הH;t�1�H�5+D�蹺H�C���ATUSH��t'H�XהH��H��H��L� ��H��L���y��u$���[�]H��H�5FD1�A\�]�DH��� �H��H��t H�@H��t�E�@(H�E[]A\��H�`�H���H��t��H��הH;t�1�H�5cC���H�C�ff.���ATUSH��t'H�XהH��H��H��L� �;�H��L���0x��u$��[�]H��H�5vC1�A\鍹DH���P�H��H��t H�@H��t�E�@,H�E[]A\��H�`�H���H��t��H��הH;t�1�H�5�B��!�H�C�ff.���ATUSH��t'H�XהH��H��H��L� �k�H��L���`w��u$�7�[�]H��H�5�B1�A\齸DH���H��H��t`H�@H��tW�8u:H�@HH��t1H�X H���#���ƉE��x|H�����EH�E[]A\���EH�E[]A\��H�`�H���H��t��H��הH;t�1�H�5�A���H�C�8�j����f�H�5I��1����u�i���D��ATUSH��t'H�@הH��I��H��H�(�;�H��H���0v��u$��[�]H��H�5vA1�A\鍷DH���P�H��H��t(H�@H��tH�p H��tVH�~[L��]A\馜��fDH�`�H���H��t��H��הH;tL1�H�5�@���H�C�H�S0L�@H�ה[H�J]H�|DH�8A\1���?�[]A\�ff.���AUATUSH��8dH�%(H�D$(1�H��t*H�HהA��H��I��H��H�(��H��H���u��uC���H�5W@�H��1��h�H�D$(dH3%(�nH��8[]A\A]�f�1�H�L$H�T$D��H�5c2��>���t�H����H��H��tPH�xH��tG�D$H�t$H�L$H���P�J~��unH�D$����A�D$I�$�Y����H�`�H���H��t�(�H��הH;�0����H�5�>1�腵H�{�u���@H�C(H��tdH�@H�xPtY����t$H�|$�@H�ʼnp�@H�D$ �H�t$ �H�E�FH�{(H�G�PPH�|$ ��u �k�A�D$I�$�����K������a0�����AUATUSH��dH�%(H�D$1�H��t*H�HהA��H��I��H��H�(�"�H��H���s��uC���H�5g>�H��1��x�H�D$dH3%(��H��[]A\A]�f�1�H��H�5E!D���<���t�H���H��H��t'H�hH��tA�D$H�<$��H9�����I�$�H�`�H���H��t�h�H��הH;�`���H�59=�1��ųH�k��:/��f.���ATUSH��t'H�HהH��H��H��L� ��H��L���r��u$���[�]H��H�5F=1�A\�]�DH��� �H��H��t(H�@H��t�EH��@����H�E[]A\�@H�`�H���H��t��H��הH;t�1�H�5[<���H�C���ATUSH��t'H�HהH��H��H��L� �;�H��L���0q��u$��[�]H��H�5v<1�A\鍲DH���P�H��H��tHH�@H��t?H���H��tzH�X H���W���ƉE��x~H����EH�E[]A\�f�H�`�H���H��t��H��הH;t�1�H�5k;��H�CH���H��u��EH�E[]A\��H�5��1�轱�u�g���D��AWAVAUATUSH��(H�4$dH�%(H�D$1�H��t$H�XהH��H��H�(���H��H����o��uA��H�55;�H��1��F�H�D$dH3%(��H��([]A\A]A^A_�H����H��H���<L�`M���/H�<$I�l$0��A�L$(��t�H�D$E1�H�D$�fD�u�p�5I�H�D$�@H�PהH��H�8�ǐ��H���o��I���"H��H�hH��(D�(A��D�pL�`I�GA�O I�D$I�G0H�C�PpH��E1�A�jH�L$�H��H�5���]XZH��H�<$�)�E;l$(�������E�t$,H���H�D$I���@�@H�}H�������@� ���f�H�`�H���H��t�8�H��הH;�b���H�5	9�1�蕯L�c����+�����ATUSH��t'H�XהH��I��H��H�(���H��H����m��u$��[�]H��H�591�A\�-�DH����H��H��t H�@H��t�8tRA�D$[]A\��H�`�H���H��t�`�H��הH;t�1�H�538��H�C�8u�H�@HH��t�H�p [L��]A\鯱��ff.�@��ATUSH��t'H�HהH��I��H��H�(���H��H����l��u$��[�]H��H�5&81�A\�=�DH����H��H��t(H�@H��tH���H��tZH�p [L��]A\����H�`�H���H��t�h�H��הH;t#1�H�5;7��ɭH�CH���H��u�[]A\�@AWAVAUA��ATI��USH��(dH�%(H�D$1�I���L���H�5x�26�����L���1�H��H����H�$�C<�E<t�{u�C����H���'$H�$�sH�;H�T$�#��������H�D$H���@�@H�D$H��pH�x�s�FL��H�H�D$�@I�D$�PpH�L$H��E1�j�A�H��H�5~�ZH�D$ H�H�EXZ�e �H�D$dH3%(�H��([]A\A]A^A_�f�1�H�5�'�5���������H�`�H���u�H�$H�6?H�����H�H�הH�81���4����@��H�<$�@�@H�D$�]�H�<$L�x�P�H�\$�pL���s�-L��H�H�D$�@I�D$�PpH�L$H��E1�jA��H��H�5�|�XY^H�<$���H�EE������H�$L��H�E(�F����������C��
H�$�oH�SH��H��H�PH�� ��w�{�C�C�������@H���ȜH�$���m&��ff.�f���1�H���"���f����H������ff.�@��AVAUATUSH�� dH�%(H�D$1�H��t+H��HהA��H��I��H��L�u���H��L����h��u@��H�544�H��1��E�H�D$dH3%(��H�� []A\A]A^�@H����H��H����L�pM���1�H�T$H�5ؙD���2���t�H�|$�G<��<���wH�?H�T$��������H�D$H�0A�E1�L9�tL���h������I�E�@���DH�`�H���H��t���H��הH;����H�5�2�1��E�L�s�=���@H�]��H��H���g��u H�הH�
71�H�81���1����H�|$�ưH��H��t
H�pH���7���H�5�6�1��ΨH�s����DH�D$H��;1�H�H�הH�81��~1�T����$��@��AVAUATUSH�� dH�%(H�D$1�H��t+H��HהA��H��I��H��L�u���H��L����f��u@��H�52�H��1��%�H�D$dH3%(��H�� []A\A]A^�@H���ȯH��H����L�pM���1�H�T$H�5��D���0���t�H�|$�G<��<���wH�?H�T$������H�D$H�0�F(���A�EL����e������I�E�=���f�H�`�H���H��t���H��הH;����H�5�0�1��%�L�s�=���@H�]��H��H���e��u H�הH��41�H�81���/����H�|$覮H��H��t
H�pH���7���H�5j4�1�讦H�s����DH�NH�Q:H�ה1�H�81��b/�X���DH�D$H�:H�����!��f���ATUSH�� dH�%(H�D$1�����H��H����I��H��tqH�XH��th��H�sH��H��H�
�tH�T$1�H�$�k����D$�E���EH�$H�EH�D$dH3%(u\H�� []A\�@H�`�H���H��t� �H��הH;t�H�5�.�1�聥I�\$�W�������� ��@��AVAUATUSH��dH�%(H�D$1����8H��I���H��H����H�hH����L��I�����H�](H��twH�+H��toH��H�� ����L��H��PH�`�H��8�0m�������MH�<$H��I�����H�k�H�����H��L��L��P���H�+H��u�H�D$dH3%(�H��[]A\A]A^��H�`�H���H��t��H��הH;t�H�5�-�1��)�H�k����H�S�H�5U2�1��	�����@�K��m����q�����AUATUSH��(dH�%(H�D$1�H��t*H�HהA��H��I��H��H�(�2�H��H���'b��uC��H�5w-�H��1�舣H�D$dH3%(��H��([]A\A]�f�1�H�L$H�T$D��H�5��,���t�H����H��H��t@H�xH��t7�D$H�t$H��X�P�mA�D$��t]I�$�p����H�`�H���H��t�X�H��הH;�@����H�5$,1�赢H�{��I�$�������fD������AUH��ATUSH��H���?�H��H��tGL�`M��t>I��`�H����H�ٺ1�I��HE��$�H��H�5˭��[]A\A]�PdI��`�I���H��t舾H��הH;t$H�5]+�1���L�e��+�H��[]A\A]�ff.�f�������AUH��ATUSH��H���o�H��H��tGL�`M��t>I��`�H���?�H�ٺ1�I���E��$�H��H�5+���[]A\A]�cI��`�I���H��t踽H��הH;t$H�5�*�1���L�e��[�H��[]A\A]�ff.�f�������AUH��ATUSH��H��蟨H��H��tOL�`M��tFI��`�H���o�M��H�ٺI��@H��A�1�[H�5iR]A\A]�b�I��`�I���H��t��H��הH;t$H�5�)�1��A�L�e�郻H��[]A\A]�D������AUH��ATUSH��H���ϧH��H��tGL�`M��t>I��`�H����M��H��E1�I��@H���1�[H�5�Q]A\A]��af�I��`�I���H��t��H��הH;t$H�5�(�1��y�L�e�黺H��[]A\A]�ff.�f���AWAVAUATUSH��(dH�%(H�D$1����fH��I����H��H���H�hH���L���H�]H���2H�;�(H�D$L�-�mH�D$H�-�m�hf�L�KI��M����P1�1�H�� RH�|$H��2襙L�s�A��L���	��ZYE1�H�L$�PE��L��L����H�;���CH�
32<tH�
<7<t<H�
2H�~�HE�H�CH��H���c���L�KL��L��I��M���]���M��M���R���f�H�`�H���H��t�h�H��הH;t!H�5='�1��ɝH�k�����H�D$dH3%(uH��([]A\A]A^A_���������pSH���O�H��H��tH�xH��t[�X��H�`�H���H��t�ȹH��הH;t,�H�5�&1��)�H�{[����c�[�ff.���AWAVAUATUH�-���SH��dH�%(H��$�1�H�\$�g�H��I�[�H�=�0�o)�I�oH)
�I�oP H��I)�I�oX0)�I�o`@)%�I�ohP)-�I�op`)5�I�oxp)=�I�o��)�I�o��)
�I�o��)�IH���H��IH����H�!I�,)���D$ H�D$H��IH��$�HDŽ$�HDŽ$�HDŽ$�HDŽ$`HDŽ$hHDŽ$HHDŽ$XHDŽ$�HDŽ$�HDŽ$�HDŽ$�HDŽ$�HDŽ$�HDŽ$HDŽ$H�D$(DŽ$xHDŽ$pHDŽ$PHDŽ$HDŽ$��"1�H��H���H��הH�=�-H���'��H���D$ 
H�D$H�	GH��$�HDŽ$�HDŽ$�HDŽ$�HDŽ$`HDŽ$hHDŽ$HHDŽ$XHDŽ$�HDŽ$�HDŽ$�HDŽ$�HDŽ$�HDŽ$�HDŽ$HDŽ$H�D$(DŽ$xHDŽ$pHDŽ$PHDŽ$HDŽ$��D�H�� הH�=�-H��&��H���D$ 	H�D$H��GH��$�HDŽ$�HDŽ$�HDŽ$�HDŽ$`HDŽ$hHDŽ$HHDŽ$XHDŽ$�HDŽ$�HDŽ$�HDŽ$�HDŽ$�HDŽ$�HDŽ$HDŽ$H�D$(DŽ$xHDŽ$pHDŽ$PHDŽ$HDŽ$���I��(הH�=t,I�E�%��H��H��$HH�D$H�dG�D$ H��$�HDŽ$�HDŽ$�HDŽ$�HDŽ$`HDŽ$hHDŽ$XHDŽ$�HDŽ$�HDŽ$�HDŽ$�HDŽ$�HDŽ$�HDŽ$HDŽ$H�D$(DŽ$xHDŽ$pHDŽ$PHDŽ$HDŽ$���I��XהI�UD��hH��`I��I�$A�wH�T$��hH�����H�T$A�H�
�eI��`H�5UhJ��I�<$��,H�=�*�#��I�4$1�H��H�D$H��GH��$H�D$ H��$�HDŽ$�HDŽ$�HDŽ$�HDŽ$`HDŽ$hHDŽ$XHDŽ$�HDŽ$�HDŽ$�HDŽ$�HDŽ$�HDŽ$�HDŽ$HDŽ$H�D$(DŽ$xHDŽ$pHDŽ$PHDŽ$HDŽ$��_�A��I��הH�
BdH�5�fH��I���*I�>��
H�5�)�,H�=�)�"��H��H��$HH�D$H��F�D$ H��$�HDŽ$�HDŽ$�HDŽ$�HDŽ$`HDŽ$hHDŽ$XHDŽ$�HDŽ$�HDŽ$�HDŽ$�HDŽ$�HDŽ$�HDŽ$HDŽ$H�D$(DŽ$xHDŽ$pHDŽ$PHDŽ$HDŽ$���M�uI��H�PהA��hI��`L�8�r�T$A��hH������T$A�H�
�bI��`H�5\eL�4�H�Pה�H�8�)H�=3(� ��I�4$1�H��H�D$H��GH��$H�D$ H��$�HDŽ$�HDŽ$�HDŽ$�HDŽ$`HDŽ$hHDŽ$XHDŽ$�HDŽ$�HDŽ$�HDŽ$�HDŽ$�HDŽ$�HDŽ$HDŽ$H�D$(DŽ$xHDŽ$pHDŽ$PHDŽ$HDŽ$��`�A��I��@הH�
CaH�5�cH��I�$��'I�<$A�H�
a�H�5]e�'I�<$��	H�5�&�x)I�<$��	H�5�&�^)I�<$��H�5�&�D)I�<$��
H�5�&�*)I�<$��H�5�&�)I�<$��H�5t&�(H�=q&����H��H��$HH�D$H���F�D$ H��$�HDŽ$�HDŽ$�HDŽ$�HDŽ$`HDŽ$hHDŽ$XHDŽ$�HDŽ$�HDŽ$�HDŽ$�HDŽ$�HDŽ$�HDŽ$HDŽ$H�D$(DŽ$xHDŽ$pHDŽ$PHDŽ$HDŽ$��B�I��HהI�UD��hH��`I��I�$A�wH�T$��hH���j��H�T$A�H�
_I��`H�5�aJ��I�<$��x%I�<$��H�5�$�N'I�<$� �H�5�$�4'I�<$�@�H�5�$�'H�=�$���I�4$1�H��H�D$H�I�FH��$H�D$ H��$�HDŽ$�HDŽ$�HDŽ$�HDŽ$`HDŽ$hHDŽ$XHDŽ$�HDŽ$�HDŽ$�HDŽ$�HDŽ$�HDŽ$�HDŽ$HDŽ$H�D$(DŽ$xHDŽ$pHDŽ$PHDŽ$HDŽ$��p�H��0הH�=�#H�����H��H��$HH�D$H��F�D$ H��$�HDŽ$�HDŽ$�HDŽ$�HDŽ$`HDŽ$hHDŽ$XHDŽ$�HDŽ$�HDŽ$�HDŽ$�HDŽ$�HDŽ$�HDŽ$HDŽ$H�D$(DŽ$xHDŽ$pHDŽ$PHDŽ$HDŽ$��2�I��8הI�UD��hH��`I��I�$A�wH�T$��hH���Z��H�T$A�H�
�[I��`H�5�^J��I�<$��h"I�<$A�H�
�[�H�5`�F"I�<$��	H�5b!�$I�<$��	H�5R!�$I�<$��H�5B!��#I�<$��
H�55!��#H�=�!����H��H��$HH�D$H�;�F�D$ H��$�HDŽ$�HDŽ$�HDŽ$�HDŽ$`HDŽ$hHDŽ$XHDŽ$�HDŽ$�HDŽ$�HDŽ$�HDŽ$�HDŽ$�HDŽ$HDŽ$H�D$(DŽ$xHDŽ$pHDŽ$PHDŽ$HDŽ$���H��הM�mD��hH��`H��H�EA�t$��hH���F��A�H�
�Y�H��`H�5�\N�,�H�}�Y H��$�dH3%(uH�ĸ1�[]A\A]A^A_��m��ff.�f�SH��H��dH�%(H�D$1�H�G�PpH��H�5\H���
S���tUH�$H��oH�@H��H�CH�� ��w#�C�CH�D$dH3%(u%H��[�f�H���(|��fD�CH������ff.���AVAUATUSH��@dH�%(H�D$81�H��t'H�8הA��H��H��H�(�s�H��H���hH��uD�?�H�5��H��1��ɉH�D$8dH3%(��H��@[]A\A]A^��H���h�I��H����H�hH�����E������#L�t$1�D��L��H�9y�M�����I�}0�ˬI�E0H�M L�D$H�uL��P�EL��P�V�����H�D$H�\$H�8H9��-�����|�v��yH�D$H�\$H�8�S�WH��oH�D$�H�����H�D$H�8������lz�����H�`�H���H��t�H��הH9�����H�5��1��U�I�m����@1�H�L$H�T$ D��H�5T�������[���H�\$ D�eL�l$H�mH��芤M��D��H��H��H���V!�(����H�l$ H��H������I�E0L�D$ 1�H�^H�HH�הH�81���|$4���H���x�����1�H�T$L��D��H�5o��G����:������f��S�{�B�Ct��w\�EH�M A�M��H�ujL��PH�D$(P�U>XZ�e���fDI�E0H�M�H�5�H�P1��	����@�S���
H�D$�oH�SH��H�PH�� ��v
H���xH�D$�@�@�Z����1�����AVAUATUSH��0dH�%(H�D$(1�H�$H�D$H��t*H�8הA��H��H��H��L� �ߢH��L����D��u@諥H�5$�H��1��5�H�D$(dH3%(�>H��0[]A\A]A^�@H���؍I��H����L�`M����A�D$���q���I�}0�`�A�D$I�L$ I��I�t$�PI�E0H��P�R�����H�$H��oEH�@H��H�EH�� ��vH���Gw�E�E�2����H�`�H���H��t�ȡH��הH9����H�5��1��%�M�e�-���@1�H�T$H�5�D����
�������H�\$E�l$M�d$H���b�D��L��H��A�H���%H�D$�oMH�PH��H�UH�� ����H��`��E�EH9B �U���H�\$H���muH���՚�;���H�l$H��H�����I�E0L�D$1�H��H�HH�הH�81��
�|$$�����H���&u����H����uH�D$�h���fDI�E0I�L$�H�5�H�P1����A����^���ff.�H��H��H�����f���H��
H��H����D����H��
H��H���D�Ӟ��H��
H��H���D鳞��H��H��H���z���f.�鋞ff.���H��H��H���J���f.��[�ff.���AUATUSH��(dH�%(H�D$1�H��t*H�HהA��H��I��H��H�(�B�H��H���7A��uC��H�5��H��1�蘂H�D$dH3%(�H��([]A\A]�f�1�H�L$H�T$D��H�5������t�H����H��H��t`H�XH��tW�l$L�l$�}��
��L��H���iJH�{0H�ŋD$H��P�LH��td��
A�D$I�$�L���@H�`�H���H��t�H�H��הH;� ���H�5�1�襁H�]�e���@�S�
A�D$I�$������ff.���AUH�5��ATUH��SH��8dH�%(H�D$(1�H�L$H�T$ �	����H���H��H����D�d$L�l$ A�|$��
D��L��H���JIH�L$I�ċD$L��PH�`�H��8�5IL�������
��J�
I��H�D$�@�@H�D$L�hL������A�D$����L�����
H��I�$H�D$�@H�E�PpH�L$H��E1�j�A�H��H�5�Q�-H�D$(�c �H�C0H�CXZH�D$(dH3%(u[H��8[]A\A]�fD���
H�הH�L$ 1�H�H�81����f�H�5)S�1���L�d$A�t$�7����9���f���AUATUSH��(dH�%(H�D$1�H��t*H�HהA��H��I��H��H�(��H��H����=��uC辞H�57	�H��1��HH�D$dH3%(� H��([]A\A]�f�1�H�L$H�T$D��H�5C������t�H���ȆH��H��thH�XH��t_�l$L�d$�}�f�
��L��H���GH�L$H�{0H�ŋD$H��P�G��ujH�t$H��L����c��H���R�
�E���DH�`�H���H��t��H��הH9����H�5��1��M~H�]�]���@H����
H�הH�L$1�H�dH�81���������ff.�@��AW��H��AVAUATU���SH��H��XdH�%(H�D$H1�L�t$L�l$(L�d$M��M��L�������-H���m�H��H��t;H�|$�G<��<tPH�D$0H9���H�ה1�H�5�	H�8�:H�D$HdH3%(�PH��X[]A\A]A^A_���wH�?H�T$�0�����?H�D$H�|$0L�0H9|$u'�|$Dv �m�D�k�H�|$0I��H9|$t�D�l$L�|$(A�}�Y�
D��L��H���EI�~0H�L$ I�ŋD$L��P�EL������O�
���
H�D$I���@�@H�D$ H�@�pH�xA�u���
H��I�EH�D$�@H�C�PpH��E1�A�jL��H��H�5O�)Y�^��
I��H�D$�@�@H�D$ L�hL�������A�D$����L���E�
H��I�$H�D$�@H�C�PpH�L$H��E1�j�A�H��H�5M�)H�D$0�e �L�u0H�EXZ�$���fD1�L��L���H�5���"��������L�t$(H�5L���E�H��H����I��H�D$0L��H��M)�H�D$D��D�l$8A����
D)l$H�D$0H�D$H�l$(�@�O���@�|$D�s�����k�i���H�`�H�|$H���tWH�D$0H9��Z����|$D�O����k�E�����S�
I�NL�D$(1�H�הH�j	H�81��P����H�הH�H�l
1�H�81��.H�|$��H�הL��H��1�H�81������fDH�5aM�1��zL�d$A�t$�����q������AWAVAUATUSH��hdH�%(H�D$X1�H��t*H�HהA��H��I��H��H�(�.�H��H���#8��u?�H�5s�H��1��yH�D$XdH3%(��H��h[]A\A]A^A_Ð1�H�L$H�T$D��H�5������t�H����H��H���L�`M����D$L�t$H�t$I��$�L��P�^A���VH�t$H�\$���H�5�H������H��H���I��H��I)�A��B�
H��D��H����@H�T$ D��H��Ic��H��A�GH�l$)D$荠����H���,�
H�D$ L��H�0��6��H�D$ �gH��D$L��H�t$�PH����@��ueH�t$�uXL��H���E������H�`�H���H��t�x�H��הH9�d���H�5I�1���wL�c���@H�\$H�הH��H�#
1�H�81�������H�{(H�\$H��������D$�hH�G�Pp��H��H���B��u7H�\$���DH�`�H�����H����
���fD�t$H�|$�D$ �t$0��H�|$(��=L�d$PH�t$ H�D$8H�D$@L��L���#���j���fDH�M�L$H��H�����L�D$H�HH�הH�81���/���H�הH��H��	H�����H�81��q��A������AWAVI��AUATI��UH��SH��H��HdH�%(H�D$81��>��H�{H��H��L��H�5�HD�1��)_���;H��H��H�5�HE�1��
_���C���;�WM��t'H�CH��tL9���H�PH�5�H��1���^��H�C H��tH�@H��tH�PH�5�H��1��^���C�� ���@��H�5ɲH��1��~^���C��������SH�{�d�C%=�u=��=�H�5=H��1��^��H�5@H��1��
^���{9��H�S1�H�51H����]���;�u��k�
H�|$ L��H��H�5H�D$ 1�H�L$(�]��L�k0L�d$ M�����C,H�5�[H��E1��D$1��]���K(L��H��H�5�
1��j]���C(��tOL��H�5�
H��1��L]��D�D$D��L��H��H��I��(A���n����H�5�[H���\��D;{(r�L��H�5|H��1��]��L�d$ L����
1�L��H��H�D$ H�5MH�D$(��\��H�D$8dH3%(�wH��H[]A\A]A^A_�f.�H�CHH�������H�P H�5��H��1��~\�����f�H���H������L��H�5	�Q\�����@H�5�H��1��7\���2���f�H�5�H��1��\������f.�1�H�5�DH���[��H�{�����H�5	H��1���[������fDH�5�H��1���[���C�T����H�5�H��1��[���C�,����H�5�H��1��[����f�H�5oH��1��o[���C�����I�|$�����L�cL���H���xI��I�����
L��D��H���|:H�L$D��I��H�CL��H�xH��0�m:��u$H�D$H�@H9CtH�PH�5�H��1���Z��L����
�
����H�5�H��1��Z�����f.�H�5�H��1��Z���|���f.�H�5�H��1��Z���\���f.�H���L��H��1�D���D���H�5��GZ���]�����ff.�f�ATUH��H��SH�� dH�%(H�D$1���xH��H��tuL�`M��tl���
H��L��H��H�S0H�L$H�
{?H�$�F����D$�E���EH�$H�EH�D$dH3%(uPH�� []A\��H�`�H���H��t�H��הH;t�H�5��1��YpL�c�T������ff.���H��H��H�����f.��k�ff.���H��H��H������f.��;�ff.�AWAVI���AUI��ATUSH��H��H�T$H�L$dH�%(H��$�1��/�
H��$�H��H��H�5�H��$�1�H��$��iX��A�}��H�|$�bH�T$H�5�L��1��<X��A�}H��H�5�L��HE�1��X��I���H��tH�P H�5�L��1��W��1�H�52�L����W��I��@tH�5nL��1���W��A�E(�����0���@��H�5PL��1��W��I�UH�5��L��1��W��I�EH��tH�PH�5$L��1��nW��A��h���1�H�5�L���NW��A�}��I��XH�ƀjZ�H���x/H�5�UL��1��W��H���=H�T$H�5�L���ʼn�1��V������H�\$L��1�H�5�I���H����V��H���U=����1�H��H�5�L��1��V���D$(�D$ H�\$L��1�M�}0H�5rH���zV��L���=����1�H��H�5UL��1��TV��H�5�TL��1��CV���D$L�d$H�5L��1�L���"V��H���<+D$ L��L����+\$(H�51����U�����:H�T$L��H�5�1���U��H�|$H����H�GH�@pH�����пH���>�
H�H��$�H��$��H��tH���<�����D$H�T$�L$L��1�H�5��ZU����$���~H��$���L����T��H�T$L��H�51��%U��H��$����
L���;+D$���T�1�L�d$h��
L��H��$�H��H��$�H�D$`H��H��$�H�D$(�;H�L$xL�t$0L�t$(H�L$H�L$\H�L$H�L$pH�L$ �@H�D$h�P��uk�� t:L9ht4H�x�g��H�L$E1�M��H�T$H�t$ L��H�D$(�%<���lH�5�RH��1����(T��H�t$hL��H��H��$���L��L���;L��L��L���<���g���L�t$0H�T$��1�H�5L����S����$�H��$���n�y�
H�\$H�5�L��1�H���S��H��L��1�H�5��S��H��$��?�
H��$�dH3%(�"H�ĸ[]A\A]A^A_�fDH����L����R��H��$��w���DH�57L��1��S���h���f.�H�5
L��1��R��A�E(�@�A����A�E(�H���L��H�T$H�
S�H�5\HD�1���R�����fDH�\$xL��L��$�H����91�H�l$���$DH��$�H��L���@��������9H��L��L����:��tω�H�T$H�l$L���D$��H�5:1��<R���D$������H��L���e9�H��L���9H��L��L���:������H��$��@t�L��H�5GP1���Q��H��$�L��L��H��$��E��H�\$xH��E1�H��L��$���81�L�l$A���f�A��H��H���9H��L��H���:��uH��$���u΃���A����f�D��H�T$D�|$(L��A�lj�1�D�l$ H�5��L�l$�#Q��E�������H��H���O8�DH��H���}8H��L��H���9���P���H��$��%��u�H��$�1�L���An����H�\$xH��L��$�H����7�fDH��H���
8H��L��H���9�������H��$��u�H��$�1�L����m���L�d$hH��H�l$pL��L�|$x�v7H��$�L�l$ H�D$H�D$`I���Hf.�H�L$M��E1�L��L��H����7H�D$pH�t$xL��H�L$H��z��L��H���R7L��H��H���T8��t�L�l$ ����fDH�T$H�5�L��1��O������DI���H���"���H�T$L��H�5�1��jO���H�5�ML����N�����I��`H�5��L��H�H�P1��1O��A��h�����H�-���I��`��H��L����H��H�P1���N��A9�hw�����H�5��L��1���N���)���f.�I��pH�T$L��1�E��|E��xH�5a��N���M���H�D$`H��L�d$hH��H�D$(�5H�L$xH�T$\H�l$@H�t$pL�|$ H�l$(H��$�L�t$0I��I��L�l$8I���D$H�|$H�fDH��H���5H��L��H���6��ukI��A�L��L��L��H����5��uċt$\H�|$p��t�?uN��
�H�D$h�L$(H�|$pH�P�D$\�p��.���n������DL�|$ L�t$0L�l$8�����G+�T$\H�t$pH�|$@H���q3��tH�|$p�H��$�H�T$p1�H�|$H�D$��j����������ATUSH�� dH�%(H�D$1�����H��H����kH��H��tqL�`M��th���
H��H�
�2H��H�U(H�t$L��H�$���D$�C���CH�$H�H�D$dH3%(u\H�� []A\�@H�`�H���H��t��H��הH;t�H�5���1��acL�e�X�����~�����@��AUATUSH�����/w{L�JD�@��D�I�	A��/���p�2K�,��/���H�
I�41��/���� M�$	�H�H���H��tI��H�v H�x �4����t@H��1�[]A\A]�H�BH�HH�JH�H�AH�BH�)L�`L�bH�0I�D$H�B�H��H�5�IM�$$�mK��I�uH��H��1��|�A�$H��1�[]A\A]�L�b�H�B�H�J����AWAVAUATUSH��hdH�%(H�D$X1�����H��I����iH��H����H�hH����I��`��H�\$ �\�
H�q0H�5%�H��H��H�D$ 1�H�L$(�J�����<��<�fH�EXL��H��H�M ���H�5�H��LE�1��YJ��L�eM���LH�5�H��1��;J��I�$L�5�/H���~�
f�<���H�5S�H���I��I�T$H��tH�5~"H��1���I��I�T$H��tH�5c"H��1���I���H�5~�H��I�� �FI��I�$H����L��H�5C�H��1��I��A�D$<�/<�_����H�5d�H���H���b���fDI��`�I���H��t��|H��הH;��H�5���1��%`H�k�A���@H��.H�5��H��1��I���L�t$@聿
I���H�L��.��H�5�I��H�D$@1�H�L$HD���L����!�|$H��H�|$@�Z�
��D$0��
H��I��H��I��H�H�5�s��H�L$PL�.L��H�D$HH�D$8H�D$P1��k!�T$@^_����H�|$@��
L�e(M����I�<$��H�5�H��1��G��I�4$H��tNH��H�4$I�� ����I��8H�4$L��P�+'�����H�t$@H�
*�1�H���,�I�4$H��u�H�H-H�5��H��1��G����D$I��
H�-L��H�5���H�D$@1�L�d$H�JG����н
L�d$8H��I���I��@�H�5���H�D$8H�D$$PL�D$P1�H�L$�2 �T$,XY���<H�|$0誽
H�|$@H�D$0H�D$8莽
H�s,H�52�1�H���F���D$(A�G��A�GH�D$ I�H�D$XdH3%(��H��h[]A\A]A^A_��H�5@�H����E���[�����	H�5)�H����E���;�����x듐I�T$�H�5d��1��]����H�5��H��1��E���T$H��&H��+H�5��H��1���E���5���f�H�t$@��H���PE����fDH�5��H��1��E���T$8��~H�t$0��H���E��H�3+H�5p�H��1��vE���}����H�56�H��1��_E���T$H��~H�t$@��H����D��H��*H�5(�H��1��.E�����f�H�5��H��1��E�����f.�H�5o�H��1���D������U����^��ff.���AWH�5��AVAUATUH��SH��hdH�%(H�D$X1�H�L$0H�T$(�U�����,H���TcI��H���H�L$(�A<�O<�'�YL�1�{I���޺
��L��H���#H�L$8D��H��H�`�H��H��8�#H�߃���\�Ϻ
H�D$8H�pH�t$L�l$0H�p0I�]H�t$�S������t�{u�C����H�����H�D$8D�h(E��t<L�t$0L�|$1�f�I�?H��tI�H�0����������I��(A9�u�H�ה1�H�5�H�8�A��H�D$XdH3%(��H��h[]A\A]A^A_�DH�ה1�H�5@�H�8���fDH�91�H�T$@�&����(H�D$(H�T$H�H�8�&����L�l$@I�]�C<�C<t"�{u�C���eH����H�D$@H��sH�;H�T$P襁�����H�D$PH�H�D$L�l$HI�]�{t"�{u�C����H���V�H�D$HH�D�{H�A�I���˸
H��D��H���}!H�L$8D��H��H�D$H��H�x0�q!H�߃�����
H�D$8���fD�ڿ�T$�p�
H�t$H�D$PI���@�@HcD$H��L�<�I�?H����A�wA�u��
I�EH�D$P�@H�EH��PpH�L$PH��E1�jA��H��H�5�)��X�Z��
H�T$8L�x��J,H�P�HI�D$H�D$A�L$ I�D$0�����A�E�f�H��ʅ�x��9H(����H�ה1�H�5\�H�8��������H�ה1�H�5��H�8���[����s�
H�D$(H���H�H�ה1�H�81��q��,���@H���tH�D$���fD�+�
H�D$HH�t$H�J�H�H�N1�L�H�הH�81������������C谶
I�EH�D$0�oH�H�SH�PH�D$0H�8�v
��HH�D$0H�8�GH��BH��{�������f.�����C�@�
I�EH�D$H�oH�H�SH�PH�D$HH�8�v
�RHH�D$HH�8�GH��BH��{�������f.�����C�е
I�EH�D$@�oH�H�SH�PH�D$@H�8�v
��GH�D$@H�8�GH��BH��{�J����5���f.�H�D$@H���H�H��%����D��@��ATI���UH��SH��dH�%(H�D$1��$�
A�t$I�|$�@H�Ép�@H�$��
H��H�H�$�@H�HהH�8�s5��H���]H��` �L�`L�`0H�E�PpH��H��E1�j�A�H��H�5~&�XZH�D$dH3%(u	H��[]A\��o��ff.�@������UH��H��SH���\H��H��t+H�@H��t"H�@H�xH��t]H��H��[]�����H�`�H���H��t�pH��הH;t$�1�H�5���YTH�CH�@H�xH��u�H��[]Ð�off.���ATUSH�� dH�%(H�D$1����H��I����[H��H����H�XH����L�CI�@H��ty�H�=��H����€������H�=��H����€�����H�CH���H�@H�D$H����H�xH����H��H�D$L�����H�D$dH3%(��H�� []A\�DH�`�H���H��t�oH��הH9t�H�5}��1��	SH�]�����Kn�f�H�CH���H�xH�|$H��tFH�D$H�D$�^����A�pH�T$H���z���t1H�D$H�8�3���DH��H�ה1�H�81��^�����H�CH���1�H�HH�הH�81��7�������ff.�f���ATUSH��t'H�@הH��I��H��H�(�nH��H�����u$�gq[�]H��H�5��1�A\��QDH���YH��H��t H�@H��tH�x[L��]A\����H�`�H���H��t� nH��הH;t,H�5���1��QH�CL��[]A\H�x���D[]A\�������AVH��AUI��ATUS�YH��H��tyH�hH��tpL����s��h��tT1�@�A�ރ�蘰
I��H��`L��J�<��2���H��`L��J��HH�p�QL���"�;�hr�[]A\A]A^ÐH�`�H���H��t�(mH��הH;t�H�5���1��PH�k�P�����kff.�������UH��H��SH���#XH��H��t#H�@H��tH�xH��tUH��H��[]�k���H�`�H���H��t�lH��הH;t,�1�H�5^���OH�CH�xH��u��EH�EH��[]Ð�kff.���AVAUATUSH��0dH�%(H�D$(1����8H��I���]WH��H����H�XH�����sH�{H�L$H�T$ �.���H�t$H��H�t$�D���H�+H��taD�`H��L�l$H�t$�8f�H�T$�u8H9Z0��H�CH����H�t$H��H��H���L��D���?��t�L��H������H�D$(dH3%(��H��0[]A\A]A^��H�`�H���H��t�kH��הH9t�H�5���1��qNH�]����i�f�A�FI��o����H���U������ff.���AUATUSH�����/��H�Z�p���2H�,��/���H�
H�43��/����HˉL�'I��$�H��tLI��H�v H�x �%����u8���tk��1�
I�}H��H������I�EH��HH�p�QH���ɀH��1�[]A\A]�@H�JH�AH�BH�)H�XH�ZH�0H�CH�B�l����A�T$I�t$H���y�H��1�[]A\A]�H�B�H�Z����H�H�GH�GH�GXHLJ�H�G`�GhHLJ���SH��H��`הdH�%(H�D$1�H�$H���H��t�xt:H���1�1��u�
H�$H�L$dH3%(H��uMH��[��H���H��tH��H��H��S1ۃ��u���H�Y��1�1���
����ff.��SH���H��`הdH�%(H��$�1�H���tH����(bHǃ�H�`הH�x`t?H�`�H�|$H��H��H�L$�+������tKH�`�H�t$H��H�`הH�xH��t��
H��$�dH3%(u$H���[��H�`הH�PXH�x`�R����ff.�@AWAVAUATUSH��8H��`הdH�%(H�D$(1����D���tD���E���H�`�1�E1��H�5�H��H��������H�{萵��I��H��M���OA�N1�1��_�
L�cH��L���`���L��H��M�fH�����M9��B�D5=H�sH��H�4$�/���H�4$N�4 M9���J�|%H��豾��B�D5E1�E��D��H��H�=s���\���upH�D$(dH3%(�M	H��8[]A\A]A^A_�f�L���H����5���D1�H�=K�
�
E1�1�E��H�¾H�=��~\���t��`�H�kH���d���H�[I��H���U���D��H��H��A������U���f.�H��I���1���
H��B�0=H���NH�{����H��MH���I�ƸOHF�1�1��ը
H��I��L�{L���ӳ��L��L��H���e���H�����������H� ����tH�kH��萳��1�H����H�kI��H���u���H��1҉��i�1ҾO1�I���H�
L��H��H�Set-CookH�E�Eie: �8���L�xI��M�JH�}H��L��H�D$趼��H�$NH�L$L�I
L;$���D
=L��L�L$���L�L$N�<L;<$��J�|
H��L���f���L���~�
L���v�
H�{8�+H�C@�8tZH���	M�gL;$$�sI�thA�; pafA�WA�G=L�s@L���f���N�< L;<$�hJ�|%H��L�����H�CH�8tVH���/M�w	L;4$��H�; domainI�I�A�G=L�cHL������N�<0L;<$�9J�|5H��L��艻���{Pt,H���M�gL;$$�lJ�D=M��H�; secureH��{QE��t8H����M�w
E��L;4$�\J�D=M��H�; HttpOn�lyH�f�pH��tB�D=1�1�D��H���̀ǃ����DH��I���1��'�
H��I��M���@�H���H��t&A��H��H���1��1���
�f�H����1�1����
�z���1ҾO1�A�貥
H�$NH�����1ҾO1�A�
莥
A�
H������1ҾO1�A��l�
H�$NH��I�ǿthA�; pafA�A�G=H������H�{@�F���I��H��M��H���I���H�$1�1���
L�s@H��L������H�����1ҾO1�A�	��
H�$NH��I��H�; domainA�G=I�H�������H�{H���I��H��M�$H���I���H�$1�1�艤
L�cHH��L��芯��H�����f�H�|$1�����H�S8HT$H�������1ɾH�=��/?��I��H����M�w
L;4$��H�; expireI�I��s=fA�GL������N�<0L;<$�J�|5H��L��蕸��L��譣
�=����1�H���H��H�$軣
L��H�����H�}L��H���Q���H��H�$��1ҾO1�膣
H�$NA�H��I��A�=H������L���m���I��H��M��H���I���H�$1�1��5�
L��H���:���H���a���f�H���H��H���1�L�L$H�$�
L�L$H��I��}����H��I���1�L�L$I���H�$�Ǣ
L��H���̭��L�L$���f�M����u���@H���H�$����OH�$N�@���fDI���I���H��1�H�$�\�
H��I��|����I���H��I���1�H�$�4�
H���p���@H��I���1���
H������I���I���H��1�H�$��
H��I�����I���H��I���1�H�$�ġ
L�s@H��L���Ŭ���h���I���H��I���1�H�$蔡
L�cHH��L��蕬������OH�$N�����OH�$N�E���I���I���H��1�H�$�@�
H��I�H�; expireA�s=I�fE�GH������L���!���I��H��M��H���I���H�$1�1���
L��H�����H�����I���H��I���1�H�$躠
L��H��迫�����1ҾO1�A�
薠
H�$NH��I���I����OH�$N����ff.�@��H�����&H�=���z���MH�=���z�H����H�=���z��AWAVL�5�FAUATE1�U1�SH��(H�|$H�D$�Sf�H�D$H�H9��H�|$H��L��L��[���H�CH�D$H9���L�� I��H���FI9���I�H��t�L�8M��t�L���w���H��M��u�H��M��H���H���1�1�H�L$�9�
H�L$I��I��H��I�L�8L���-���L��L��H��迳��M���[���1ҾO1��N��
H�D$I��H���I����L��H���1��Ǟ
H���I�������L��H���1�蟞
L�l$H���I��I��]����E1�H���F1�E1��H�L�,(M9���I�</H�����I�mL9���K�/� H��H���FH9��H�3H��t�H��H�t$�"���M��H�t$I��u�H��M��L���H���1�1�L�D$�ߝ
L�D$I��H��M��H�3H��H�t$�Ѩ��H�t$H��H���a���M���Y���1ҾO1�A�N蔝
�I��H���F���@L��I���1��o�
M���I������L��I���1��O�
M���I��H��l���D�OA�N�;�����{Y1��H�m�H�5��1^M����H�D$�L��H�5��A�1��^L��蠜
M��tzA�/�L��1�H�5m���]L���x�
�CYH�|$H��([]A\A]A^A_�{T�O�N�2���f�1�H����H�5e��]M��u�H�m�H�5���1��g]�DAWAVAUATUSH��(dH�%(H��$1�H�`ה�xht/H��$dH3%(��H��([]A\A]A^A_�fD�@hH�`�H�|$PH��H��H�$�V������Å�tH�`�H�4$H����H��`הH���H��t�xtH�`הH�x`t�H�PXH�x`�R�@���tH���������H��`הH�{`t>H�|$�c�H�sH��H�CXH�@ H��tKH�{`�L$H���H���踚
����x���H�`ה�1�H�PXL�1�H�
H�n����
�M���H�{`1�H�c	�Љ��L� H�l$ L�l$(H��L�|$8L����
H�D$H�D$��H��L���
H��L��L������tRH�D$(H��xu�H�T$H�t$0I��E1�L��L���A�ƃ�tW��u�H�L$8H���1�1����
됅�����H�`ה��������H�%��1�1����
���H�`��T$H�L$@H�t$0H�������1���H�D$@H���#���H��x�����T$H�t$0H�L$HL����H�L$@H���urH�t$HH��xtd�@�BH��@H��B���t��BH�>�v�;*H�D$@H�H�D$H�oH�H�RH�PH�D$@H�8�Ϙ
D�����肴���BH��B���t���BPE1�A�L��j�T$,H�t$@�P�ZY�ff.����H���s�����1�H�������W������S1҉�H�=����F8H�`ה��H�=�F����@h��y1�[���AWM��AVM��AUI��ATI��U��SH��H���D$P�����ut1���H���u���H�����;H��蟡��H��H��t&H�H�;H��H�L$聡��H�L$H�PH��HE�I���A�xuKI���tH����B��u]H����M��M��D$XL��H��L��P�X1�ZH��[]A\A]A^A_�1�H�ϺH�L$��9H�L$I�����u�@������f���SH��dH�%(H�D$1���u;H�|$H���V�H��t1�T$H��C�SH�D$dH3%(u H��[�D�3R�ސ�CH����N���ff.���AUATUSH��(dH�%(H�D$1���uuH��1�H�t$���P���t\I��`הA�|$ht<L�l$I�m�}t�}u�E����H���L�I��$�H��t�xt9�CH��	@�sQH�D$dH3%(��H��([]A\A]�@H�T$H�8H�L$H�2�VH�6���B���u��CH�뮐����E�P�
I�EH�D$�oEH�H�UH�PH�D$H�8�v
�a'H�D$H�8�GH��BH�(�}�"����������@��ATUSH��dH�%(H�D$1���uoH��1�H���}O���tXL�$$I�,$�}t�}u�E���H����I��`הI��$�H��t�}t>�CH��f��PH�D$dH3%(�H��[]A\�fD�}ur�E��vj����E��
I��$��oMH�UH��H�PH�� ��vH���.&I��$��@I��$��@I��$�H���L���f�H�$H�}E1�H��HH�0�Q1����'���D����E舓
I�$H�$�oEH�H�UH�PH�$H�8�w �GH��BH�(�}���������{%H�$H�8������ff.�f���AUATUSH��dH�%(H�D$1���w5H�`הH��H��L���1��M���t��t6�EL�e�	@�NH�D$dH3%(��H��[]A\A]�@L�,$I�]�{t�{u�C��w<H����H�$H��KH��A�A�H�=���x�w���D����C�8�
I�EH�$�oH�H�SH�PH�$H�8�v�L$H�$H�8�GH��BH��{�u����a����Э����ATUSH��0dH�%(H�D$(1�H�`ה����(�G������:1�H�L$H�T$H��L�L$ L�D$�DL����L�$$I�,$�}t!�}u�E���kH���èH�$H�(�MH�U�A�A�H�=����v����L�d$I�,$�}t"�}u�E����H���f�H�D$H�(�MH�U�A�A�H�=���v���9L�d$I�,$�}t"�}u�E���H����H�D$H�(�MH�U�A�A�H�=:��,v����L�d$I�,$�}t"�}u�E���~H���H�D$H�(�}H�70H�\�A�HD�A���H�=���u��umH�l$ H�]�{t"�{u�C����H��茡H�D$ H��;H��/H���A�HD�A���H�=���MuDH�D$(dH3%(�
H��0[]A\��#K�ِ����E�P�
I�$H�D$�oMH�H�UH�PH�D$H�8�v
�a!H�D$H�8�GH��BH�(�}�������f�����E��
I�$H�$�oEH�H�UH�PH�$H�8�v�� H�$H�8�GH��BH�(�}�E����1���@����E�x�
I�$H�D$�oUH�H�UH�PH�D$H�8�v
� H�D$H�8�GH��BH�(�}�������������C��
H�EH�D$ �o#H� H�SH�PH�D$ H�8�v
�" H�D$ H�8�GH��BH�������E贍
I�$H�D$�o]H�H�UH�PH�D$H�8�v
��H�D$H�8�GH��BH�(�%����R���f���AUATUSH��dH�%(H�D$1���wMH��1�H����G���t9H�`הH�x(詏
I�ă�tIL���y����E����L�e�E�	@�HH�D$dH3%(��H��[]A\A]�@L�,$I�]�{t�{u�C��w\H����H�$H��KH��A�A�H�=���:r�d���DH�5)�1���,�Z��������C�@�
I�EH�$�oH�H�SH�PH�$H�8�v�TH�$H�8�GH��BH��{�U����A����ا�����AVAUATUSH��dH�%(H�D$1���w[H��1�H���lF���tGI��`הI�}H������
I�ă�tVL������E���L�e�E�f��GH�D$dH3%(�H��[]A\A]A^�f.�L�4$I��{t�{u�C��wUH���}�I�}H��t�/�
H�$H��pH�8�͍
I�E�^���@1�H�=�貍
I���?���f.�����C谊
I�H�$�oH�H�SH�PH�$H�8�v��H�$H�8�GH��BH��{�V����I���fDH�5��1��*�����+���ff.���AUATUSH��dH�%(H�D$1���wMH��1�H���D���t9H�`הH�8�z�
I�ă�tJL���J����E����L�e�E�
D�{EH�D$dH3%(��H��[]A\A]�@L�,$I�]�{t�{u�C��w\H����H�$H��KH��A�A�H�=r��
o�c���DH�5���1��)�Y��������C��
I�EH�$�oH�H�SH�PH�$H�8�v�$H�$H�8�GH��BH��{�U����A���訤�����AUATUSH��dH�%(H�D$1���wMH��1�H���>C���t9H�`הH�x�
I�ă�tIL���ɓ���E����L�e�E�	@�CH�D$dH3%(��H��[]A\A]�@L�,$I�]�{t�{u�C��w\H���d�H�$H��KH��
A�A�H�=��m�d���DH�5y��1��(�Z��������C萇
I�EH�$�oH�H�SH�PH�$H�8�v�H�$H�8�GH��BH��{�U����A����(������UH��H�5^�SH��dH�%(H�D$1�H�T$�D$�-����t4H� �H�j�����H��`ה�{ht0�EH�EH�D$dH3%(��H��[]�f�H�{H��t+�|$tH�CXH��H�{`�P(���tEH�{褆
H�CH�CX1�H�{`�P8ǃ�H�C����EH�E�w���H�����1�1���
�EH�E�M������ff.��USH��H��`ה�{hudH�CXH�sH�{`�P(�Ń��t71��@��H�C�ChH�C`Hǃ�H����[]�DH�Q��1�1���
�H�b��1�1����
������ff.�f�H�`הSH���H��t,�P�Ã��t1ۉ�[��7���H���1�1����
��H�!��1�������x�
��fD��ATUSH��H��dH�%(H�D$1�H�`ה�xh����t+�@H�D$dH3%(�H��[]A\�f�1�H���Q?���t�H�,$L�eA�|$tA�|$u
A�D$��wJL���қH�,$�CH�E�pH�8���������H��u����FH��b�������A�D$��
H�EH�$�Ao$H�I�T$H�,$H�PH�}�v
�H�,$H�}�GH�E�@L�eA�|$�Y����H���蝟��ff.�f���H�����qef�1�H���F)��F)�F)�F)�FH���ff.�@��USH��H��`ה�{htGH���H�5��H���r�����uƃ�H��[]�H��
1������H��1�[]�1�H�y��1��M�
������fD����u SH���F���������H�[�fD�c>������UH��SH��H���EH��`הH�ߺ	H�5�H�M8�KH�M@H��A��H�5���fRH�MHH��A��H�5��HR�MPH�ߺH�5~Q�M�MQH��H�ߺ	[H�5jQ]�Mf��=ff.���AWAVAUATI��USH��XI��`הdH�%(H�D$H1�A�}hu-��t`�c=�/�1���H�}����
H�|$豁
�A�D$I�$H�D$HdH3%(�H��X[]A\A]A^A_��H�\$�H����B���t��L�t$H�D�1�L��H�8赍���m���H�|$H���/�
H��u�A�A���H��H�=��fM�}`M��t L��M�w0H��H���7L9�u�L���׀
�0蝀
H��H�{0H��H�H��H��H�	�AH�N�H�	H�J�H9�u�I�E`A�D$I�$����B���f���AVAUATUSH��0H��`הdH�%(H�D$(1��{ht3H���H��t�}t1H�D$(dH3%(�H��0[]A\A]A^��FH����}u�E����H���H�]���u
H���R��H�l$ H��L�t$H��L�l$L�d$�A��#��D$H�|$�p��nH��H���\�E1�I��L��L��L��H������t��fD����E�8
H����oEH�UH��H�PH�� ��vH���MH����@H����@H��������Ӛ����AV1�AUATUSH��dH�%(H��$1�H�|$H�l$ 虦��I��`הH��H�|$H��$�Ƅ$� I��$�H��H��H)�H�T$H��H�D$H�Expires:H��$�蓯��H����HcL$8H�N�DHcT$0L��$�L��H�ȋD$ P�D$,P�D$8P�D$LlPH�U�DD�D$LL��H��1��H�� H�{	L��Lc�L���C���BƄ,�H�ދH����������!�%����t�¹�����D�H�VHD���@�H��H��H)��]XI��$��H��H���H��H��H)�1�H����
H�ދH����������!�%����t�¹�����D�H�VHD���@�H��H��H)���WH� �H�p@H���6H�\$`�H���������H�{XH��H�Last-ModDŽ$ifieH��$�d:L��$f��$Ƅ$ �ϭ��H����HcL$8H���DHcT$0H��$��H��H�ȋD$ P�D$,P�D$8P�D$LlPH���DD�D$LL��H�A�1��
H�� I�|$H��Hcع�H���~���ƄL��H����������!�%����t�¹L������D�H�VHD����H��L)��VH��$dH3%(uH��[]A\A]A^�肗��f���AT�H�޽USH���dH�%(H��$�1�H�`הH��$�H��H���H��H��H)�1�H��I�����
H�ދH����������!�%����t�¹�����D�H�VHD���@�H��H��H)���UH� �H�p@H���1H�\$@�H���ޓ������H��H�{XH�Last-ModDŽ$�ifieH��$��d:H��$�f��$�Ƅ$� 诫��H��t~HcL$H�n�DHcT$L��$��L��H�ȋ$P�D$P�D$P�D$,lPH�v�DD�D$,L��H�&�1���
H�� H�}L��Hcع�H���d���Ƅ�H��H����������!�%����t�¹�����D�H�VHD���@�H��H��H)��TH��$�dH3%(uH���[]A\��k���ff.���H�����&H�=��-TH�����@��AWAVAUATUSH��(H��`הdH�%(H�D$1�H�$H���H��t�xt-H�D$dH3%(�SH��([]A\A]A^A_�f.�D�nH��I��H��H�8H��D����H��������H�<$u���x
H���H�L$H��H�D$�oH�RH�PH���D��H�8�+����SH�T$H�D$H�
�y�A�I�@�HH�:�v�	H�T$H�D$H�:�oH�@H�GH�|$�.x
���f�D��I��`�H��H�L$H�D$I�����L�t$��upI��x��L�<$H;�������M�������M�.A�}u
A�E����H���D��H��L��A��L�1��-|�[����L�<$M��u�M����I��{u�C���~M���D��H��H��A��1���{����f�H�D$�@H�L$H��D���@H���E1�H��jA�H�8��XZ����I���H9������������C�v
I�H�$�oH�H�SH�PH�$H�8�v�H�$H�8�GH��BH��*�����Iv
H���H��H��I���H��A��oH�RH�PH����@1�QL�
�D����zY^������A�E��u
I�H�D$�AoeH� I�UH�PH�D$H�8�v
��H�D$H�8�GH��BL�(����聑���UH��SH��H�dH�%(H�D$1��C<��<t�{u�C����H��躌H�]H��H�=��H�������u!H�D$dH3%(�H��[]�fD�	H�=r�H�������t�HcsH������H�;�Aw�1�H���}�H�EH��@AH�E1�H��H�8����uuH�<$����H�E1�H�8����@����C�t
H�E�oH�SH��H�PH�� ��wA�@H�E�@H�]�{���������H�EH��hA����H���XH�E����ff.�f���AWAVAUI��ATI��UH��SH��(dH�%(H�D$1�H������uEH�`הH���H��t
�x�8H�D$dH3%(�H��([]A\A]A^A_�DI��`�I�΍VH�L$H��I����/����'H�t$H��C<��H�t$H��`הH;��t��KD�{��u
A���(<vH�߈L$�xH�D$�L$H��oEH�EH�CH�D$H�8�v�L$�H�D$�L$H�8�OH�D�yM��tH��H��L���4	H�D$H��`הH�8A�1��L��H���L�
D���Iw����@�JL���A�H��1�H���$w����I���H9��������H��A�L��H��H�`הI����H���RD��L�1���vXZ�I����A�W���S��q
H�t$H�H�D$�oH�H�SH�PH�D$H�8�v
��H�D$H�8�GH��BH��KD�{�C�k����n���ff.���AWAVAUATLc�UI�SH��hdH�%(H�D$X1�L�l$@H�|$(H�D$@H�D$HL9���D�?L�l$@E��A��Ic�H�I9���H�D$8H�D$H�`�H�H�$H�D$(H�D$H�D$0H�D$@H��D���s
H�L$H�<$A�VH��H�CHD$(H���s���u&H�D$8H��x��H��`הH;����E������fp
H���H�t$L��H�|$H�D$0�oH�RH�PL���2	��u2L���j2	�����H�L$XdH3%(��H��h[]A\A]A^A_�f�H�T$0H��H��L�����H�t$L���1	H��H�����H���o
H�|$(L9���D�?E��A��Ic�H�I9������m����H�$H9�����E��x���|o
H���H�t$L��H�|$H�D$0�o
H�RH�PL���2	������H�t$L���W0	�]���f�L���h1	1��������ff.����AWLc�AVN�<AUATUSH��hdH�%(H�D$X1�L�d$@H�D$@H�D$HL9���H�D$(L�t$0H�D$L�l$8H�|$(H���f�H��H�\$(L9����;|u�?!�(H)��މ\$�Rq
�SL��H��`�H��H�D$(H��H����������H�T$8H��z�$H�`הH;��� ��uVHc\$H��H�����H���.n
H�|$(I9��=���L���(0	1�H�L$XdH3%(�XH��h[]A\A]A^A_���m
H�t$L��L��H���H�D$0�oH�RH�PL���H0	����L��L���.	H���m
L���/	������u���H��H)���H�\$�\$�!p
�SL��H��`�H��H�D$(H��H������������Hc\$���H���H9
������������l
H�t$L��L��H���H�D$0�o
H�RH�PL���z/	���2���L��L����-	���Hc\$H�T$0H��L��H�����L��L���-	�i����e���D��ATUH��SH��dH�%(H�D$1�H�`הH��������H��t2�u,D�fH�?H��H��H��D�����H�������t��tH�L$dH3%(uHH��[]A\�fDH�H�1��zu�H�`�H��D��H��H�������uH�$H�1��蚇��f.���AWf�E1�1�AV1�AUATUSH���H�|$L�l$@L�d$4H�t$ �
H�l$8L�t$HdH�%(H��$�1�H�D$p)D$PH��H�D$H�D$`�ڶH�`ה1�H���H�H����H�D$PH�D$���wyH�|$PH���]H�L$XL�yH�L9|$`�EL�|$X�H�D$PH����H�|$X�T$4L�<L9|$`��H�t$8H����H�T$H�t$HL�|$XH�|$�"B1�H���h�E1�E1�L��L��H��H�������������D$4H�|$8L��p��t$4�����T$4���+�����w�H�|$PH����H�L$XL�yH�L9|$`����L�|$X�H�D$PH���H�|$X�T$4L�<L9|$`��H�t$8H���~��L�|$X�7���f�H�L$@H�
�1�1����
�����H�\$ H��tH�D$X�H�D$PH��tH�T$X�H�D$PH�L$H�|$H��E�1�H��$�dH3%(�H���[]A\A]A^A_�f.�H�D$XD�|$4I��M��O�N1�1�H�D$`�Pi
�T$4H�|$XH�D$P�5���DH�D$XD�|$4I��M���O�N1�1�H�D$`�i
�T$4H�|$XH�D$P����DH���H���1�H�L$(H�D$`��h
H�L$(�T$4H�D$PH����H���H���1�H�L$(H�D$`�h
H�L$(�T$4H�D$PH��#���I���I����W���DI���I������DI���H��I���H�T$`1��3h
�T$4H�|$XH�D$P��I���H��I���H�T$`1��h
�T$4H�|$XH�D$P���1ҾOH�D$XA�H�D$`N��g
�T$4H�D$P���fD1ҾOH�D$XA�H�D$`N�g
�T$4H�D$P�&����������AWf�E1�1�AV1�AUATUSH���H�|$ L�t$@L�l$4H�t$(�
L�d$8dH�%(H��$�1�H�D$p)D$PH��H�D$H�D$`�_�H�`ה1�H���H�(H���D�H�D$HH�$H�D$PH�D$��@H�D$PD�|$4H���H�|$XJ�?H9\$`��H�t$8H�L���Q{��D�D$4L�|$8�|H�\$XL��L��L�D$���H���,L�D$�!L��L���ρ��H���H�|$PH���HH�KH�H9L$`�5H�T$H�|$H�L$X�|H�t$H�Y=1�H����E1�E1�L��L��L��H��������?�����D$4H�$H�|$8�p��t$4��������H�|$PH���WH�\$XH�KH�H9L$`�gH�L$X�!H�D$PH��t}H�|$X�T$4H�H9\$`��H�t$8H��z��H�|$PH�\$XH���%H�KH�H9L$`��H�L$X�|����DH�L$@H�-�1�1���&�
����H�D$X�\$4H��M�9H���H���1�1�H�D$`��d
�T$4H�|$XH�D$P�U���f.�H�D$XI��M��I���I���1�1�H�D$`L���d
H�|$XD�|$4H�D$P����f.�H���H���1�H�L$H�D$`�Qd
H�L$H�D$PH�����H���H���1�H�L$H�D$`�d
H�L$H�D$PH��h����H���H���1�H�L$H�D$`��c
H�L$H�D$PH�����H���H��H���H�T$`1��c
D�|$4H�|$XH�D$P����H���H��H���H�T$`1��sc
�T$4H�|$XH�D$P���H�D$X1ҾOH�D$`N�Bc
�H�D$P���H�D$X1ҾOH�D$`N�c
�H�D$P���H�D$X1ҾOH�D$`N��b
�H�D$P����O�N�"�����O�N�����H�L$(H��tH�D$X�H�D$PH��tH�T$X�H�D$PH�L$ H�|$H���1�H��$�dH3%(u>H���[]A\A]A^A_�fDH�|$��H�|$P�����H��t��$�a
�$��}��ff.�f���AWAVI��1�AUATUSH��(	dH�%(H��$	1�H�|$@�i���H�L$0H�`��H�5.H����%���uH�D$0H��x��HL�L$H�YE�H�
B�L�D$@H�|$(H���1���
H��`הH���H���rH��tL1�H����1��G�
H�|$(�`
1�H��$	dH3%(�H��(	[]A\A]A^A_�f�H��$�H���@W	L�d$(L����k��H��L��H��$���NW	H�}0H�$�H���H����H��uH��$�H���X	H���H�F�H����@��L�$$A�1���H�|$(1�L��A��I�A���!@)���D��H��!�Hc�A�
�O����9�~�I9�vD�����H��)�A��D	�����t1����H�D$(M������H)�A�>���@H�\$PH��賫L�d$(L����j��H��L��H��$���H�}0H�$���H�} 1�1�H��$�Iq��A�Ņ�����H�E0A�ą��OH�D$PA�H�D$H��$�H�D$�+H��uH�|$��H��H�D$�U	H�D$A)�E���A��D��H��D��AL�Hc�詂������H���H��u�H�|$��H��H�D$��H�D$�f.�H�t$PH���c��)���fD�H��1�1�HDž�訢
H�������@H�8H�L$8�H�5�����������H�D$8H�H�H�$�CEH�$�Y��L�L$HL�D$@H�������H�
������D��討���X����y��ff.���L�
e�F1�L��H�9D�@tIc�H����
u�����@H�@Mc�I��H�8H�pH�PK�@I��1��ff.���1�H���FH�<�Hc�tH��H��
u�����fDH�<�1��f���AUI��ATUSH�\�FL�cPH��@H�+H��tH�uL���w����tH��L9�u�1�H��H��[]A\A]�ff.�@��USH��H��`ה�{ht_H��H���~���H�������tH��t
H�CX1�H��[]Ã|$ tG�|$ ������t�1�H��H���1�衠
�������1�H����1�腠
�����뫾�����AUATUSH��dH�%(H�D$1�����H��1�H��������I��`הI�D$XH����H�8H�����+^
H��I���g���E���]L�m�E����L�,$I�]�{t!�{u�C����H���rH�$H�H�;�=���H���$I�|$`t
I�D$XI�|$`�PH�$A�I�D$`A��H�=<�H��HH��@�f.��H�D$dH3%(��H��[]A\A]�@�E1�H�=���]
�EH�E����fD����C�Z
I�EH�$�oH�H�SH�PH�$H�8�v��H�$H�8�GH��BH��{�������DH�5���1�����H�$1��H���H�H�1��a�
�}vH���S��EH�E����u��ff.�f���USH��H�5�FH��t:H��H�p�F�fDH��H�3H��tH���dt����u�H��H��[]�fD1�H��H��[]�@��USH��H��`ה�{htbH��H���~���H�������tH��tH���1�H��[]Ã|$ tG�|$ ������t�1�H��H�%�1��^�
�������1�H�n��1��B�
�����뫾��@��AWAVAUATUSH��HH��`הdH�%(H�D$81����u�������Ch��tB����H�5›�1���H�D$8dH3%(�|
H��H[]A\A]A^A_�1ҾH�=l��e@H�{XH��uH��tH������H�CXH����1ҾH�=Ξ�.@H���H��u!H��tH������H���H���@�ChH�H�{H����c��H�{I���iH�C�8tXI����I��$�H��tDH�8H�L$ �
H�5e��+����#H�D$ H�kH��x�uH��u�.fDH�kH�57�H�����H��tH���@W
H�CH�CXH����H�SH�3H�{`�P�����H�D$H�{H��`�L�l$0I����H�D$L�|$(��H�=��&F�H�=��FH���tH����O
��uV
�@H��I���@�L���L��A��$����H�5��H��������H�T$0H���H�
�y���I�HH����@H����@H�:���H����oH�@H�GH�����U
�vD�	H�5"�H����p�����H�T$0H���H�
�y�v�I�HH����@H����@H�:��NH����o 'H�@H�GH����dU
�h������������H��`�L�t$ L��H�5;�H���跽��uH�D$ H��x�����H�C��H���&���L��H�5#TH����l���uH�D$ H��x��H�C���uRH������I����I��$�H���P���H�8L��H�5;�����uH�D$ H��x�H�CH���������f�H����@H����@H��H����	E1�jA�H�5K�H���蹡ZYH�CXH�sL��H�{`ƃ�H�L$�P���Q��������u*�����t ���t
�����ǃ�輨��L�c(�ChA�<$tFH� ����lH�=��FH�-��FH��u��H��H�}H��tL����m����u�UH�{`�����H�{p�����f�f���D$0�����H*Cx�Z��L$�:�YD$�,�H�H;Cp�U���H�CXH�T$0���H�{`�P0�:����H����@H��E1ɺH���H�5˜H���A�H����@j�9�^_L��	H�5��H��������H�T$0H���H�
�y���I�HH����@H����@H�:���H����oH�@H�GH�����Q
��H�{ƃ���Q
H�CH�CX1�H�{`�P8���H�C����ǃ����H����@H����@�[���f�H�|$(�t$����H�|$(�hQ
���H�CXL�H�j�1��H�1�聕
�x���@H��`�L�t$ �H�5c�L��H���豹��umH�D$ H��xu_H�sH�8H�L$A�U芹��uFH�D$H�8�t
�hH�D$H�8�wH�?�pS
ƃ�H�CHǃ���H�C����8���H�������O����H�Y��1�譔
����H�k������H�D$0H�8�,���fD�s�H�D$0H�8���fD�[�H�D$0H�8���fDƃ��a���@D�@E���~���H�sH�8�V��H���i���H����O
���H�Cǃ��w�������j���ƃ��^���fDH��H���1�躓
���H��H���1�蟓
����H�sH�8�U��H�����Mc�B�<(=����J�l(H�5��H����z��H�������H)�H����Q
ǃ�H�C�����H����H����A��H��H�'�1��1��	�
���H�sH�8H�L$A�U�O�����H�D$H�8�t
��eH�D$H��pH�8�1Q
ǃ�H�C���H�sH�8H�L$A�U����P���H�D$H�8�t
�~eH�D$H��pH�8��P
ǃ�H�C����H����1�1��C�
�����i��f���SH��`הH�{XH�C�ChH�C`Hǃ�t{H���t)H�{XtZ���u	1�[�D��1�[��1ҾH�=%��5H��tH���x�H���H�{Xt
H���u��Ch1�[�D1ҾH�=D��=5H���i���H�����H�CX�X�����SH����H�`ה�xh�CtH�[�f�H�[�������AWHc�1�AVAUATI��UH��SH���1M
��H��I�������H��`ה�{h���E�L��M�l��D���H��I9�tzH�;H�/�}u�E��vރ���EL�;�L
I�H��oEH�H�UH�PH�H�8�v��H�H�8�GH�H��H��@H�{��%��I9�u�L����K
A�D$I�$H��[]A\A]A^A_��FH��@��Ch������L���K
A�D$I�$H��[]A\A]A^A_�L���hK
H��[]A\A]A^A_��D��H�`ה���t�xht�DSI��H��H�HH�P�lH�[����AWAVAUATI��USH��H���>���;H��E1�A���T��H��tzL�h�;L���T��I���+L��H��M���6�E1��
H���Ym���}"I�����E1�L���6m���}"A����=���I�_�8��kL
H�������H��L�p D�h0�rU��H��H�E����L
I�,$H�E1�H��[]A\A]A^A_����H�=��H��H���������H����xt1��H���f�
��tH����
������������H�5��1������1�H�5œ����������_����E1��
H���#l���}"I��t�L��A����ff.����UH��SH��H��;���t��y�������H�{H��t�I
H�{�I
H���H
H�E1�H��[]�ff.�AWAVAUATUSH��H�$H��H�$H���t$,H��$�I��dH�%(H��$�!1�H�l$0��m��H���rH�|$8H��L�-y��^_��L���S��L��L�d$0I��H��$�I��L��H��H�D$�{r��K�D7BƄ4�/H�D$H�D$@�D$(H�D$ fDL��H��H���bQ������H�t$0H����L�~�L��L�������u�L���
S��I�H�QH���w�H�|$H��L��H�L$�\��H�L$H�T$ �H�t$Ƅ��s`�����k���HcT$,H�D$8H+�$�H9��P���H�|$�R���D$(�<���@H����n��H��$�!dH3%(�D$(uOH��![]A\A]A^A_���{H������BP��A��L��I��H���1�1��$�
�D$(��b��D��H�H�x t
1���SH�xH�������1�[�DAWAVAUI��ATI��USH��H��H���Q��M�t$ L9���M�|$H��L���Q��J�TuH�1�H����I�T$L��H���[��I�D$HcЍH�/A�T$ ��~,��1�H�DA�L�D�/H���L���H��A9T$ �Hc�D�aH��L��H�Ic��sessH��@_�Z��A�,H��Hc��H��[]A\A]A^A_�fDH��1�[]A\A]A^A_�ff.�@��USH��H�$H��H�dH�%(H��$1�H��H��H��H�����H��t\�;���u'1�H��$dH3%(uGH��[]����u�������H���P�����u�1�H���~n����������뭸������`��fDATUSH��H�$H��dH�%(H��$�1�H���?H��L�c����M���aL��H���.g�����&L���~D
H�C�;����3�E���H��@����߃�A��v�HЀ�	v��,<�XH�����u�H)�H��H���<L��$�H��H��L���f���H����H���UF
�S0�BL��H�C1���U�������\H�����}��H����������r���;1����Q����t2�D���(����L���A��I��H���1�1�觇
�H��$�dH3%(�H�Ġ[]A\�D��s�����������H��ƿ�A]�������D$%�=�tI��=���f�M���a����n���f�1�H����1���
H�`הƀ��X����L����
��u�}t�1��L���/�
��u��;�As������@��C������K��A��L��I��H�͍1�1�茆
����^��f���AUI��ATI��USH��H�dH�%(H��$�1�H���+����3����H���$\������H�D$0A�EH�H�C(H�|$0H��tQ�A
H�T$01�I�$�;H���G`��H9D$0uHH��$�dH3%(����H�Ĩ[]A\A]�f�1�H�=c��"D
I�$�@H���t%H����1�1�荅
I�<$�DA
�������B������oJ��A�ؾ1�H��H�'�1��T�
����\��ff.�f���ATI��USH�/Hc�H�������}��xZ;](|#1�H��L���H��H��H9�u1�[]A\��1��b���}��@H���t#1�H�a��1��̈́
������¸�������A������I��A�ؾ1�H��H�~�1�薄
���f�ATI���U��SH��H��dH�%(H�D$1�H�$��?
1�I��A��H��`��@H���@H��8L��H�$�>���t9��tH���}�
��u	H�{�o�
H�L$dH3%(H�$uH��[]A\�f�H���H�
H�$��Y[��f���AUATUSH��8H�/dH�%(H�D$(1�H�����I��I���&?
L���@H���@H�D$�{J��L��C����A
�H�H�D$�@��>
L���@H���@H�D$�=J��L��C���A
H�T$�H�H�D$�@H�}���H�D$H��t7H���OPH�D$H�|$��N�
H�L$(dH3%(��uH��8[]A\A]��������DZ��@��AVAUATUSH�� H�/dH�%(H�D$1�H�����I��I��I���>
L���@H���@H�D$�fI��L��C����@
H�T$�H�H�D$�@H�}���H�D$H��t`�x�����t-H�|$�{�
H�L$dH3%(��u@H�� []A\A]A^�@�pH�81��[@
I�H�D$�@A�E�f.��������DY��@��AVAUATUSH��0H�/dH�%(H�D$(1�H�����A��I��I���=
L���@H���@H�D$�fH��L��C����?
�H�H�D$�@��<
D��L���@H���@D�`H�D$�?
H�T$�H�H�D$�@H�}�r���H�D$H��t8H���@NH�D$H�|$��?�
H�L$(dH3%(��uH��0[]A\A]A^û�������4X��@��ATUSH�� H�/dH�%(H�D$1�H�����I���<
L���@H���@H�D$�`G��L��C����>
H�T$�H�H�D$�@H�} ���H�D$H��t:H���rMH�D$H�|$��q�
H�L$dH3%(��uH�� []A\�fD��������dW��@��USH��(H�/dH�%(H�D$1�H��t~�Hc��A;
��f�PH�T$�@H�H�}(H�D$���H�D$H��t<H����LH�D$H�|$����
H�L$dH3%(��uH��([]�f.���������V��@��AUATUSH��L�'dH�%(H�D$1�M��t|I��I�|$1�1�L��I�l$0�a���H�$DH��H���<�
H9�u�L���:
H�<$I�EH��t0�	LH�$H����
H�L$dH3%(��uH��[]A\A]û�������V��f���H����1�H��H�=��H��8ؔ�1�H��Ð��SH�H�{�oh��H��[�9
fD��H���s�H�lDH�5Ʌ1���)�H�����UH��H�5��SH��dH�%(H��$�1�H�L$(H�T$H��H�D$(P1�L�L$(L�D$�qbZY������|$��� �!9
f�H�|$H�T$PH��@�x�PH�D$(�<c����<n�R<w�*��Hcs%��t�����^H�������cH�T$0�����M�������S�;1��[��H�CH����pH�D$`H�߉CH�8ؔ�0觶�EH�H�EDH��$�dH3%(�KH�ĸ[]��H�L$(H�[�1�1���|
�EH�E��<auL�ЁKHcs%����DH�I��1�1��;|
H����7
�EH�E�Z���f�H����1�1��|
��f�H�D$ ���SHc�C���f.�H�D$ ���SHc�C���f.�H����1�1��{
�k���fDH�)��1�1��{
�K���fDH����1�1��k{
�+�����R�����SH��H�5�	H�� dH�%(H�D$1�H�T$��_���tC�|$H�t$��H��t{H��8ؔ�
H���9L$uE�81�1��K����u&�CH�H�D$dH3%(u`H�� [�DH�Y�f��1�1��z
�CH��DH�L$H���1��z
�CH���Q��fD��AUATUSH��H�5��H��8dH�%(H�D$(1�H�L$H�T$L�D$ ��^������|$H�t$�
�H����H��8ؔ�
H���9L$��H�T$H����HcpH��H9���H�L$ H��xR����H)�H9�EH�<
H9�|<L�`)�I�H��E�}Lc�Hc��/5
L��L��H���1J���kB�(H��C� H����1�1��ky
�CH�H�D$(dH3%(uEH��8[]A\A]�DH�@���H�L$H����1��y
�CH���P��fD��USH��H�5��H��8dH�%(H�D$(1�H�L$ H�T$L�L$L�D$�]���tm�|$H�t$蠳H����H��8ؔ�
H���9L$u'H�R��@
uH�|$H��x	HcPH9�~AH����1�1��\x
�CH�H�D$(dH3%(ufH��8[]�f.�Hcl$H)�H�t$ H9�HN�HxH���H���CH�+��H�L$H�T��1���w
�CH���VO��fD��SH��H�5kH�� dH�%(H�D$1�H�T$�c\���tB�|$H�t$耲H��t[H�8ؔ�9D$t<H�g�1�1��gw
�CH�H�D$dH3%(uAH�� [�fD�|$臱��DH�L$H����1��w
�CH���N��fD��SH��H�5�H�� dH�%(H�D$1�H�T$�[���t-�|$H�t$谱H��t[H��8ؔ�
9L$u$�CHc@H�H�D$dH3%(uVH�� [�H�s~�1�1��sv
�CH���fDH�L$H���1��Hv
�CH���M��fD��H�GH�xP�������f.���H�GH��PH����H�8��H�1��ff.���UH��SH����H��H����H�SH��tH9P����H����[]��H�x�u�H�S H�@ H�H9��H����[]������SH�PH��tH�P��
H�CPH�{8H��tH�pnE�H�C8H�{@H��tH�VnE�H�C@H�{XtH�{X�l�
H�CX[�f�U�`H���SH����2
H���@LH��H��H�@@H�@8�S�H��H��[]�f�H��H�
�H��H�5'������H��`�H�
�kF�����H��jFHD�H���ff.���H���S���H��H���f.���UH��SH����u?� �/
�EH��H�(H��H��ޒH�C���H�CH��H��[]�f.�H�5�}�1�����ff.���AUI��ATI��USH��H�GH�xP��H��tJH�@H��tAH�(H��t9H�}��W��H�}�É���1
��I�E�A�$H��[]A\A]��H���[]A\A]�AUATI��U��SH���H��H��8H�L$dH�%(H�D$(1��xL�D$��H��H��L��I�������H�D$H��x����s.
�@H���@H�D$ ��H�|$豿H�D$ E1�1�H�T$A��H�8�߁H�D$ E1�1�H�T$A��H�8轁jA�jL�D$0��L��H��L���~�XZH�D$(dH3%(u=H��8[]A\A]ÐH�8H�T$A�1�E1���c��ŐjA�jL�D$��I��f.���SH���s�H�5|�H�P1����H�H�S[���SH�?H��t��
H��[�t-
@��AUI��ATUSH��H��H�?���L�c H��L�` M��t
A�D$H�@ L� �CH�EHH�{8H��t	�Z��H�E8H�{@H��t	�Z��H�E@�CL�ELH�CH��tH�8�L����3��H��1�H��豳��I�mH��[]A\A]�f���SH����H���;���H�{0H��t�K��H�{(H��t�_�H�{(�,
H��[�,
ff.�f���UH��SH��H�5^�H��(dH�%(H�D$1�H��H�T$L�L$L�D$�BU���t2H���E�H�x0H��H��tIH�T$H�t$�:Z���C��u"H�H�D$dH3%(u0H��([]�@H����H�@ H�8��?��H��H�E0��G��fD��AWAVAUATUSH��H�5i}H��XdH�%(H�D$H1�H�8���D$H�L$ H�D$0H�T$(H��H��D$,H�D$@H�D$HH�D$'PH�D$4PH�D$HP1�L�L$XL�D$`�5TH�� ������G��D�(��G����@V��D� �8V��1���3��1�A���G��1�A���H����D$�D���T$8H�|$(1��D$�H��H���mG��D�(��U��D��D� �2��D����F���|$��G���|$��C��H����H�|$@H��������T$$I��1���ugI�D$@�D$H��L��A�D$H�ݱ��H����O��1�L��H�������CL������H�SH�D$HdH3%(uKH��X[]A\A]A^A_��H�|$0��V���@H�8��H�8H�|$@�c���@�CH���E��fD��AWAVAUATUSH��H�5i{H��XdH�%(H�D$H1�H�8���D$H�L$ H�D$0H�T$(H��H��D$,H�D$@H�D$HH�D$'PH�D$4PH�D$HP1�L�L$XL�D$`�5RH�� ����	��E��D�(��E����@T��D� �8T��1���1��1�A���E��1�A���F����D$�B��D�D$8�t$ 1�H�|$(1҉D$�)��H���fE��D�(��S��D��D� �0��D���D���|$��E���|$��A��H����H�|$@H��������T$$I��1���u`I�D$@�D$H��L��A�D$H�֯��H����M��1�L��H�������CL������H�SH�D$HdH3%(uDH��X[]A\A]A^A_�H�|$0��T���@H�8��H�8H�|$@�j���@�CH���C��fD��AWAVAUATU��H��SH��HdH�%(H�D$81����D$H�D$(H��H�D$0�D$�D$�hO�H���;p
H�L$H�T$ H��H�D$H�5
y��PH�D$,PH�D$@P1�L�L$6L�D$P�!PH�� 1�1�����@��o
�C��D�8�C����#R��D�0�R��1����.��1�A����B��1�A���C����D$�?���|$�D$��D�D$0�t$1�1�H�|$ �f'��H���>C��D�8�Q��D��D�0�.��D���B���|$�C���|$�?��H�����T$1���unH�C@�D$H��H�߉CH�ǭ��H����K��1�H��H����H�D$8dH3%(uuH��H[]A\A]A^A_��T$0H�|$ 1���C��H���U����H�|$(��R���@�n
�f�H�C �M1�H�5ZtH����M�{����XA�����AUATUH��H�5MwSH��(I��8��dH�%(H�D$1�H�L$H�T$I�$H�D$1��GN���tXH�|$�H�H�|$I������H��H��t H�x@H��st�@�ƒ��	t@��tSH��v�1�1��.i
�EH�D$dH3%(��H��([]A\A]�H���`J��H��H��t��@��u�H�|$H��tF���I��I�E L��I�D$ H�s@����1�H��L���L����EL����EH�U�z���@I�<$H�|$��@����ATA��U��H�=-vSH��dH�%(H��$�1��Q��H���D$H�D$H��[FH��$�H� rLHDŽ$�HDŽ$�HDŽ$�HDŽ$PHDŽ$XHDŽ$HHDŽ$�HDŽ$�HDŽ$�HDŽ$�HDŽ$�HDŽ$�HDŽ$�HDŽ$�H�D$DŽ$hHDŽ$`HDŽ$@HDŽ$HDŽ$�H��$8��&H��@rL�H��8��H��H��@H�€ޒH�H��H��@�1�H���%��H�@xH�g^F��H���H�d^F�w�H���H�Y^F�d�H���H�N^F�Q�H�@xH�^]F�A�H���H�[]F�.�H���H�P]F��H�=5tH���H�>]FH�_�H��\F��"��t7H��0�LH�;�p���1�H��$�dH3%(uH�Ġ[]A\��D����n���=�����H���C�H�<,H�5�s1����H��sH�5�]1�����H�,H�5�s1�����H���,�ff.��AWE��AVI��AUM��ATI��UH��SH���n�H��I�$H�C �@D�{LM��tL���M��H�C8H�|$@t
H�D$@�8u81�L��H��軧���EH���o�EH�UH��[]A\A]A^A_�f�H���M��H�C@�D$H�CH�ff.��~t
�f�AWL�=s�AVI��AUATI��UH��SH��L�n`�T$M��u�]M�mM��tQI�]H����H���+���PH�}H������u�H���g+��I�MH��H��PA���M�mM��u��|$t*I�\$H��t D�l$H��H��D��L���>���H�[0H��u�H��[]A\A]A^A_�fD�L���t�����ATUH��SH��H�5�QH��dH�%(H�D$1�H�T$�D$�xH���t6H���k�H���s�D�d$H��H�@ H�8��D��H��D��H��H�����H�D$dH3%(u	H��[]A\���:��ff.�@AWAVAUATA��UH��SH��H��L�nHH�|$�T$M��t+M�}M���L���*���PH�;L��蔉����L�}XM��u�a�M�0M��tWM�oHM��t�M�uM��t}L����)���PH�;L���O���u�L���)��I�ML��H�ߍPA��K�M�0M��u�f�E��tH�mH��tD�t$�}t6H�m0H��u�H��[]A\A]A^A_�fD�L�5���f.�H�|$H��D��H�������L��� )��I�ML��H�ߍPA��������L�=�����ff.�@AVAUI��ATUSH��H����I��H����I��1��fDH�[0H��toI9�|j�{u�I�v@H�CHH��toH��t�H�xA�VH��HDx��2����u�A�FL��t��u�I�v8H�{�2����u�I9�tH�[0H��H��u�fDM��tI�mH��[]A\A]A^�H��t�H�xH��u��1���ff.��AWI��AVAUATUSH��H���GLH�o@�T$D�oH���L����E1�H�8A��E1��f.�H�[0H�����C��t�A�Lt	������u�E��tI�w8H�{��1����u�H�CHH����H��t�H�xE��HDxH���1����u��D$����
I�?I�w E1�H���I�GPH��E1��oH�RH�PH��AUU�l���XH��ZH��[]A\A]A^A_��E1�E1�H���.���H��1�[]A\A]A^A_�E���6���H�CHH���G���H���[���H�xH���:����I����E1�H�8A��E1�����H���u���ff.��U��SH��H��H�PtH�P��
H�CPH�CH��t\H�0H��tT�KL��v4��tH����H��[]�����H�vXH����H��[]��@H�vH����H��[]����@1�H��l�1���^
H��1�[]�f.�S�H���B���H�CPH��tH���a�H�@H��tH�H��t[�fD1�H�il�1��c^
1�[�ff.�@��S��H��H�@H��tH�H��t�SL��u)[�f�H�l1��1��^
�SL1���t�H��[�I���f���AWAVAUI��H�56ATUSH��H��8dH�%(H�D$(1�H�L$H�T$ �rB�����H���q��xLH����H�x0�H�EH���$D�ULE����H�0H�E0H�pH�E H�8�HI��H��H���H�8�B�D��H��H�|�u�H�E0H�|$ H�XPH�E0�PXH�u0�7��H��H�$H�/VE�H�E0H�@PH�E0�@XH�<$��H�$L��L�`��M���
E�$E����H�E 1�H�D$�N�I�NHH��tH�IM�NI�V(jA�QH�t$L�����Y^L��L���h�H��A9$��I�D$L�4�A�F����wݿ��
�@I���@A�N��t|H�}���w���jH��L��E1�jH�t$E1��m���XZ�f�A�EI�EH�D$(dH3%(��H��8[]A\A]A^A_�DH�<$������DI�V(jE1�E1�jH�t$H��H�}���_AX�����H������H������H�@ H�8�D+��H�E0����H�E H�8�<��1�H��H���ϝ��H�E���fDH�E0H�|$ H�@PH�E0�@XH�u0�5��H�$����f�1������t2��@��UH��H�5�hSH��H��(dH�%(H�D$1�H�L$H�T$H�D$L�D$�D$�g?���tLH���j��HLH�Ã�t9H�@H��tNH�H��tF��u`�D$H�s E1�H��A�P�t$H�;���XZH�D$dH3%(u9H��([]��H�+h�1�1��#Z
�KL1҅�t�H���b���H����1�����UH��H�5hSH��H��(dH�%(H�D$1�H�L$H�T$H�D$L�D$�D$�w>���tLH���z�H��H�@H��tVH�H��tN�CL��t(��ub�D$H�s E1�H��A�P�t$H�;���XZH�D$dH3%(u;H��([]��H�;g�1�1��3Y
1���H���p���H����0��fD��ATH��USH���ͼI��H�@H��t9H�(H��t1A�D$L��uFH�}�=��H�}�C���9
�CH�[]A\�DH��f�1�1��X
A�T$L��tL�����H��H��u��C1�H�=&���
�CH�[]A\�f���AUATUSH��H��(dH�%(H�D$1�����H���
H���H��H�@H����L� M�����EL����I�D$(H��t
�x	�1����I��H����H�E E1�1�L��L��H�0L�Np�1��L������L���|+��L��H���'��H���H=���w �C��H����
�CH�L����7���-f�����H��1�1���VW
fD�CH�H�D$dH3%(��H��([]A\A]�fD1�H�L$H�T$�H�5A/��;���t�H���ƺH��H�@H����L� M�����ML����I�D$(H�|$H��t
�x	�F1�1��
��I��H���Q���H�E L��E1�E1�1�L��H�0�g0��L����6���CH��*����H�[d�1�1��SV
�UL�������H�����I��H���6���������H�d1�1��V
�uL�������H���P���I��H���%�������H�E H�T$H�t$H�8H�Op����H�|$H��tD�t$�s�(
�CH�|$H�H��NE��Y���fD�CH�������CH���H�E H�0�8���������������,�����ATUH��H�5CSH��H��dH�%(H�D$1�H�T$�D$��9���t<H�����H���ӸH��H�@H��tGH�H��t?�SL��uT�P������tWH�D$dH3%(��H��[]A\�f.�H��b�1�1��T
�KL��t�H������H��u��DH�XHH��t�L�cM��tnL���f���PH�}L����z���x���L���G��H�KL��H��PA�����S���f.��T$H��H��H�����1�����L�%�~��m+��ff.�f���AVAUATUH��H�5�aSH��H��@dH�%(H�D$81�H�D$H�L$H�D$ H�D$(H�T$�D$�D$H�D$0PH�D$0P1�L�L$ L�D$0�!8_AX������t$���9H����H��H�@H����L�(M�����CL���i���AH�|$H�t$0�r��I��H���fH�L$ 1�L��L���T��H�t$(I��H��t(�L$����I�}@H��L�����H���;I�FHjH�s M��E1��t$8H�;H��L����H��KEXL��Z�H�|$0H��t�H�D$8dH3%(�H��@[]A\A]A^�fD1�H�A`�1��;R
�CL�����u[H�]�1�1��R
�@H�%`�1�1��Q
����fDH�@HH�T$0H����0���'���fDH����I��H��������f.�H�q\�1�1��Q
����fDH�|$�6:��I�����fDH�T$0H�t$(L���V0�������(��ff.����UH�5y_SH��H��HdH�%(H�D$81�H�D$H�L$H�D$ H�D$(H�T$�D$�D$H�D$0PH�D$0P1�L�L$ L�D$0�5_AX������t$���bH��芴H��H�@H���
H�H�����UL���S�{t
H�[(H����H�|$H�t$0����H��H���EH�T$(H��H���;��H��tX�xtRH�sIEH��H�|$0H��t�H��^�1�1��P
DH�D$8dH3%(�NH��H[]�DH�t$(H��tH�{@H��H���/��H��H���H�L$ H��H���'��H��HEH��H�|$0H��t���f�H��]�1�1��O
�ML��uDH��Z�1�1��oO
�R���f.�H��]�1�1��KO
�.���fDH����H��H��������f.��D$��~0H�|$0H��t	H�7HE�H�VZ�1�1���N
����H�|$�7��H���q���fDH�t$(H�T$0H���-��H������1&�����H���>�ff.���ATUSH��H��I�1�L�`PH�@PH��H����H��tH�H�p01�H���F�H��u�H�}Pt	H�}P�
L�eP1�[]A\�fDAWAVAUATA��UH��SH��H��8�T$dH�%(H�D$(1��F<�1<�)�oH�VH�|$H�<$)D$H�T$ <�fH�$�|$$H���D@H���p�H��H�@H���XL�0M���L�{�EL�d�����������MM��tpM�~XE�����|$t\�{�I�nH��u�G�L��M��t8�}L�e0t�H�}H�3�j����u�H����3��H��L��裒��M��u�fDH;$��H�D$(dH3%(�*H��8[]A\A]A^A_�H�D$H�$����f.�M��t�E1�E���D����{��E1�M�����|$�4����@H���`����#�H�$�|$$H����������1�1�H�'Z��#L
E1��{�EL�������tN�D$E1������H���E�I�ƋEL�s���f.��|$$�����H���͘����H����I��H������E1�H�}8I���D$A�ŀ{u��DM��M���1���M�g0I�E��tH�u8������u�I�H�3�����u�H�u@I�GHH����H��t�H�x�UH��HDx�����u�L���1��L���Ő������H���X�I��M������������M����H�;��E1��D$E1��<DH��tH�x�MH��HDx�����tLM�0M���T���Lcd$L;#�F���E��tH�u8I�������u�H�u@I�GHH��u�H��t	H�xH��u�L9#�2����D$�H���"���H�xH�����������|$�B���f.��EL��thH�3��u1H��� ���M������L����0��L��蟏������f.�L��1�H�����I����fDH�;�������f�H����I�ƋEL��!��ff.����1��`�����1ɺ�P���AWAVAUATE��UH��SH��H��H�T$�L$dH�%(H�D$81��F<�U<�M�oH�VH�|$ H�|$)D$ H�T$0<��H�D$�|$4H����fDH��踬H��H�@H����L�(M�����{�EL��������������M���M�uXE1�E�����|$���{��M�mM��u��f�I��H����A�}I�m0u�I�}H�3�����uك|$A����I�EH��t�xu|H�x0uuH�xPH��ti�?tdH�5�ZE1��M����A���PDH�D$ H�D$����M��t3E1�E1�E���0����{��E1�M���+�|$�$���E1�H;\$��H�T$8dH3%(D���H��H[]A\A]A^A_�@H���X�c�����H�D$�|$4H���H�����fD1�1�H�U��G
E1�{�EL�L�����tF�D$E1��H���H���=�I�ŋEL�#���f��|$4�K���H���͓�>����H����I��H������E1�H�}8I���D$A�Ā{u�DM�v0M���[I�~E��tH�u8������u�I�~H�3�����u�H�u@I�FHH���4H��t�H�x�UH��HDx�����u��|$��I�FE1�H�������H�xPH���t����?�k���H�5�XE1��H����A���Q���DH��� �I��M���(����'����M����H�;��E1��D$E1��4DH��tH�x�MH��HDx������tDM�v0M��tKLc|$L;;AE��tH�u8I�~�����u�H�u@I�FHH��u�H��t	H�xH��u�L9;������D$�E1�����H������H�xH�����������E1��|$�O�����EL��thH�3��u1H���3���M���*����|$A��������f�L��1�H����I����fDH�;�������f�H����I�ŋEL�����A�������A�1�����ff.�@��E1�����ff.�@AWAVA��AUATUH��SH��XD�D$�T$dH�%(H�D$H1�讧H��H�����E<�N<t+�oEH�UH�l$0)D$0H�T$@<�R�|$D�ZH�EH�$H�CH���8f�1�H�qQ�1��kC
�CLE1��*H�����L�k8I����1�I���@f�pM����E1�M���D$M��A�ƀ}u�EDM�0M���$I�E��tH�s8�I����u�I�H�4$�8����u�H�s@�KHI�GHH���H��t�H�x��HDx�����u��KHH�C@QH�s PH�;E1�E1�L��L�����A[A^�D�T$�{LH�$EиDE�T$H�CH������L�(M��������CL��������������M����M�}XH��uI�E(H��t
�x	�>��I���@1�fA�D$E���w�|$��H�{��H��t
�}��H�D$(�CLM��������H����H�uL��H�L$(H�����I��M���)�CHE1�H�s E1�L��L��P�s@H�;���AYAZfDH�D$0A�D$A�D$H9���A�|$t+H�T$HdH3%(L����H��X[]A\A]A^A_�DL���H�`�L�`�E1��xL�D$H�$�g���H�7L�1�1��@
E1��@�|$D�r���H��荍�e�������1�I���@f�HM������������H�����|$D�����H���5H�EH�$�����CHH�s L��A�L��P�s@L�L$H�;�l��Y^���DH���u���L�EM���h���I�MH�oK�1���?
�L���fDH������H�xH�����1����H�����I��M���l�����
�1�I���@f�P�%���D�}��E1�M���O����n���D�D$������I�UH��tL�EL�L$(M9��}I�uHI�}(1��+���SHE1�H�s E1�L��RH��s@H�;�W��_AX����1�L��H���[�������fD�D$�����p���I�U�f.�H������I�ƋCL��D�{L�����M�������H�}�����E1��D$1��EH��t!H�x�SHH�L$��HDx���H�L$��tZM�0M���N���HcL$H;M�?���E��tH�s8I�H�L$�_��H�L$��u�H�s@I�GHH��u�H��tH�xH��u�H9Mt*�D$��{L�~���H�}�L����n���fD�CHH�s P�s@���H�Ѿ1�1�H�mI�=
�������fD��A�й1��M���ff.�f���A��1ɺ�-���ff.�f���AWAVAUATUSH��8dH�%(H�D$(1��٠H�x(H��H���I�$XL�k(H�CH���cL�8M���W�{L��1�H�{8M�Xt
1�{L@��E1�M��u9�f�H��tH�xD�CHE��HDx��
����tBM�0M������tH�s8I���
����u�H�s@I�GHH��u�H��tH�xH��u�D����H�D$ �@�@H�C I�wH�8�"��H���8H��H�D$��H�T$I��H�5EH��L������H�T$ �B���L�2H�D$ �@I����D�pM���MI�wH�L$ D��L�����M�0M������H�CH���_L�8M���S�KL���HA���M�M���PI�WA�GH�L$ H�L$��f���������I�oH����H���I���L�s@���D$�CH�D$�}��@�@I�H�D$ H��t
��
H�;����I��H�C I�D$ �@M��t
A�>��1�L��L���&}��L�t$ L��A�F����A�I�VH�L$ �T$H��L�����M�0M��t`I�WA�GH������I�8����I�W0H���'������I����f��H�H1�1��:
�sL����H�L$(dH3%(L���H��8[]A\A]A^A_�f.�1�H�=sd�2�I������f.��H�6�H��XZ1�1�I��E1�H����@L�k(���@H�sG�1�1��k9
�f���fD�����@I��H���@��L��L��H�5�G�����w���@H���h��I��H�������KL�������@��t@I�W�������I�����H���(��I��H�������H�{8�����0���@��>���@�@I�wI�@H�D$ �|��H��H���H���H��H��H��1E�H���a���H�T$ �B���#H�*H�D$ H�T$ E1�A��1�L���@�hG�#���H�s@I�GHH����H�������H�x�SH��HDx�S	�������������fDL��� ��I�D$@�D$A�D$H�"���D��������I�wI�@����I��H������H�����L�d$ ��A�D$���)L����L��I�$H�D$ �@H��0E�����H�5�f�1��=�H�T$ �d���H���	���H�xH���������D�����I�GP�8���������L���@�@I�@H�D$ ���I��H����H�����L��H��H��/E�H�����H�T$ �B����H�*H�D$ A�1�H�T$E1��L���@�E���1�H�=	a���H�����H�5�e�1��=�L�d$ A�t$���H�5we�1���H�T$ ���1�H�=�`�s�H���O���H�5De�1���H�T$ �J����Y
��f���AUI��ATU��SH��H��腙I�ă����HL���^H�@H����H�H����H�pH����I�D$ �H�8�V��I��I9���M����L���I���L��C������CH�f�S�����������������H�2.EL��H����[]A\A]�I�D$ H��t&H�8�>��1�L��H���aw��I�D$H���2���I9��1��Cf�C���1�����t3H���������[]A\A]ÐH�����1��`���f�E1�H���M��u�1��L���f�H�����H���o���H�p���fDH��t�xL����A��CfD�CL������H���~_������H�H��1ۉ�[]A\A]�@�{�C�C�a���H��賀�T���fD�{�C�C����H��苀����fDH��1��v�t����H��1����d����H�������Cf�sH���A�����O���D��UH���SH�����H���@H��H���@�+������t�CH��H��[]�DH�5TA�1��͎��ff.�AWAVE��AUATE��USH��H��H�T$L�L$�L$dH�%(H��$�1�H�D$(�G�H��H���3�C<��<tP�oH�S)D$PH�T$`<�1�|$d�H�\$0�t$XH�|$P1�1�A�I�����|$d��D�SE��ukE��H��`H�
R��HD�H�>1�1���1
H�D$0H9����|$D��H���~��f��L$�}LEȸDE�L$H�EH����L� M�����UL��������L�����H����L�xXH��uH�P(H��t
�z	�H�T$I��E1�H���U�B<�wG<��zH��v�o
H�|$pH�|$)L$pH�BH��$���D$t���f��D$<��M����E�����|$�K�D$H����A�|$���ML���+�D$�hH����L�M��M��M��~I�L$H��;1�1���C0
������H�=�1�1��0
M��f�H�D$0H9��RH�D$H��tL� H�D$H��tH�|$pH9��M�D$���H��$�dH3%(��H�ĸ[]A\A]A^A_��H��=�1�1��/
�ULE1��
���H��E1�A����H�T$H�}8�D$I��A��I��H���$����D$�|���@E1��xL�D$�����H��:�1�1��/
�;���@H��耧H��8��H9�H�D$0H9���E��H��+H�A=�HD�H�5;1�躊���DH�T$E1�E1�H���w����N����E��t�}Lt%H�T$H���E1�E1�E1��D���f�H�U8I�t$HL��1�E1���H�T$I��L�xXH�������D$D�{��M��u��@M�0M����I�E��tH�u8�Q�����u�I�H�3�A�����u�H�u@I�GHH���LH��t�H�xD�EHE��HDx������u��|$�M�D$�{�����M�t$M�����l$E1�@A�~tI�~H�3������u��M��M�v0M��u��
���DH�|$P�>zD�SE��������*���@H�|$P����f�H�|$P��z�|$d������f��|$D����H����y�����D$����H�|$��
�����|$D�����H���y����H�������%���H������H�xH����������D�T$��MD�L�l$M��M���5���I�oH��t,@H�����H����q��I�l$H��u�L�l$M����A�E<��H��$�<��I�|$@I�u�u�I��H�����M��t��L��L���8��H��$EL���I9��������$������L���x������$�������}x���D�D$H��1�H��81��[+
E1��@���M���"H�;��D$E1��5H��tH�xD�MHE��HDx�v�����tRM�0M���}Lct$L;3sE��tH�u8I��I�����u�H�u@I�GHH��u�H��tH�xH��u�f.�L93�	����D$�M����H�����{��M���|���@�|$���{�����H�T$H��tH�H�3L�����I���C���H����H�3H�L$(L��H���T��I��H�����D$M��h����f�H��6�1�1��)
���fDH�|$����D$H�D$�@�@�	���f��D$�����|$�R���H�L$H����{�	H��tH�	I�t$HH�L���x��I���`���E1��D$�P���A�}H��$�v5�AoUH��$�)�$�I�EI��H��H��$�H�� ���)���L����
����L�L�L$(I�T$M9�~H�Ѿ1�1�H��4��(
I�T$H�L$H��tH�	I�t$HI�|$(����I�����@�|$u��V���M��M���a���H�*5�1�1��(
���H��tH�	I�T$I�t$HI�|$(�k��I���S���1�H�5SL����
���=����|$���������|$�D$���������|$�D$������������|$�D$�Z����s�����AWAVI��AUATI��USH��(dH�%(H�D$1�蓋H��H�@H���H�H����H�D$A�|$tL���
�ULM�<$L�l$���������ELH������ELH��H��u�f�H�[0H�����{u�H�u@H�CHH���dH��t�H�x�MH��HDx�t�����u�H�{L���d�����u�L�l$M��t_1�H�L$dH3%(��H��([]A\A]A^A_ÐH��T$����T$H�ÉUL���U���L�m8H����@H�D$L�L$E1��1�L��L������H�u E1�E1�H���@�@�EHH��P�u@H�T$ H�}���XH��Z�	�H�XXH��X�C�4����H�u@H�CHH����H��t*H�xD�EHE��HDx�U�����uH�{L���E�����ti�H�[0H���3����{u��H�������H�xH����������DH��3�1�1�H�D$�%
���DL������I��H�[����@H���n���H�xH���L����\����������E1�A�1��l�ff.����E1�E1���L�ff.����H�8��H�Ð��H�GPH���ATUSH��H��L�cP蜈H�@H��t3H�(H��t+L����
H�CPH�u0H�ߺ[]A\���fDH��2�1�1��{$
L���Ӗ
H�CP[]A\�fD�ff.�@��H��S�����H�H�GH�G�@��H�@ؔH��@H�@1��ff.��UH��AUATSH��H��dH�%(H�E�1�����D�fH��Ic�H��H��H%�H)�H���H��H9�tH��H��$�H9�u��t	H)�H�L�L�l$��H��I���L���GH�M�D��L��H�`�H��@�G��t:L��M1�H��H��21���'#
1��H�U��'�
L�R2��u�H�E�H�H�]�dH3%(uH�e�[A\A]]��f���fD��UH��H�5��SH��(dH�%(H�D$1�H�L$H�T$�D$�h���txH�|$�G�P���wR<tv�	�H��H���>�H�[H��tDH��1�1�H���!(H�[H��u�H�D$dH3%(uNH��([]ÐH��1�1�1��+"
�EH�E��D�w�T$H�?����H��H���v������u���D��USH��H�5��H��(dH�%(H�D$1�H�L$H�T$�D$�x���thH�|$�G�P���wB<tf��H��H���N���H��H�ߺ�i(H�D$dH3%(uKH��([]�f�H��0�1�1��K!
�CH���fD�w�T$H�?�8���H��H��u������f���SH��H���H�ǐؔ1�1�E1�H���J(H��ٔ1�1�E1�H���4(H�ǘڔ1�1�E1�H���(H���ڔ1�1�E1�H���(H�� ۔1�1�E1�H����'H�ǀؔ1�1�E1�H����'H�Ǹؔ1�1�E1�H����'H��ڔ1�1�H��E1��'H��۔1�1�E1�H���'H���ؔ1�1�E1�H���'H��ؔ1�1�E1�H���n'H�Ljؔ1�1�E1�H���X'H��۔1�1�E1�H���B'H��xؔ1�1�E1�H���,'H���ڔ1�1�E1�H���'H�ǘؔ1�1�H��E1��'H��ڔ1�1�E1�H����&H�Ǩؔ1�1�E1�H����&H�ǰؔ1�1�E1�H���&H��(۔1�1�E1�H���&H��0۔1�1�E1�H���&H���ڔ1�1�E1�H���|&H��pؔ1�1�E1�H���f&H��۔1�1�H��E1��P&H���ٔ1�1�E1�H���:&H���ؔ1�1�E1�H���$&H�Ǡڔ1�1�E1�H���&H���ؔ1�1�E1�H���%H��Xؔ1�1�E1�H����%H�Ǡؔ1�1�E1�H����%H���ؔ1�1�E1�H���%H��`ؔ1�1�H��E1��%H���ڔ1�1�E1�H���%H��hؔ1�1�E1�H���t%H�ǘ��1�1�E1�H���^%H�Ǩڔ1�1�E1�H���H%H�ǰڔ1�1�E1�H���2%H��ܔ1�1�E1�H���%H��ܔ1�1�E1�H���%H��۔1�1�H��E1���$H�Ǹڔ1�1�H��E1���$H��۔1�1�H��E1���$H���ڔ1�1�H��E1�[�$ff.�f���SH�b�H��H��H�1�dH�%(H�D$1�H�H��L�1��t
H�;��H�$H�H�T$dH3%(uH��1�[��\�ff.����H�t
H����
@����AWH�5�hAVAUATUSH��xdH�%(H�D$h1�H�T$8H�D$@�4����nH�D$8�x�_H��@ؔH�{�r�K�C�hL� �L$,�}I������L��H�l$XH���i@H�{H��I���JHH�D$PH�D$H�D$4H�D$H�D$HH�D$H�D$`H�D$ �DI��`�I��$���H�L$H�T$E1�I��H�t$H�{L�|$@�HH�t$ H�{H���IH�T$`M��H�zH�BH�rH��HE�H��j�t$HjD�D$TH�L$h�X�H�� H�|$@tL��褍
I��$@D��L���A��u!H�{H���GH�{H���uH���4���L������D$,�CH�D$hdH3%(u?H��x[]A\A]A^A_�fDH��E1�A�1�jH�
O*1�1�Pj��H�� ��)�f���AVH�F*AUATUH����S���H��pdH�%(H�D$h1�H�L$L�D$H�D$�D$�P����tI��ugI��@ؔH��`�I�|$H��8H��x��H�5�)�n>�EH�EH�D$hdH3%(�#H��p[]A\A]A^ÐH�|$�u
��L�l$0H�L$�H�T$H��M�EM��H�D$0P��_AX����H�D$�T$�@<t4<������H�|$�*��EH�E�W���f�H�|$(����t�H�|$0H�
�(H��(HD�L��CH��*H��ڔ1�H�81����D�
H�5�(�O=����f.�Hc|$�	����T$H�t$H��I���=H�|$�n�I��@ؔI�|$H��t�D$L���P�?����H�|$(tH�D$0�@�?H�D$8I�|$��H��`�H�L$ �
H�5�'H��8�<H�D$ H9�x�t�D$H��I�|$E1�jA�L��L���P�~!XZL�����������l���H�|$0L�q'H�iUH�L$LD�H��'����H�?��H�S'�<���H�|$���DH�D$0H�����@�8�����H��(f�H��ڔ1�H�81���������D$1�L���pHc�H����I��H�D$(H��HcD$A��D$���D$H�A�H�D$(H�H�D$8�@�t���f.�H��`�����@H��&�d���@H�D$PH�L$PH��E1�I�|$H�5"&H�D$`A�H�D$h�
j��Y^�D�����H���E1�1ҾH�
u���H��I�D$�x�����������L��CH�
�%��D�|$�����H��ڔH�'1�H�81����|������j���L�gCH�
w%����F�fD��SH��@ؔH�;H��t�g�H��CH�{H��t�0H�{�B�H�C1�[�fD��ATUSH��H�5EaH��0dH�%(H�D$(1�H�T$�����tIH�L$H�T$E1�E1�H���H�D$(PH�|$ ��ZY��u<H�|$H��t���CH�H�D$(dH3%(��H��0[]A\�D�t$H�|$�r9H��@ؔH�EH�����T$L�L$��u�H�=K$L����������9E1���1�L��H���n+L�D$����E1�H�|$ tv�D$1�L��E1�pHc�H���+�H�T$ E1�H�D$H��
HcT$��D$1�H�T$���D$H���D$H�}H�t$�P��*L�D$��A��f�L�����CL�#����HDžxL�D$@A���E1�|$L�D$u�L�
)#�
L��L�������u�H��`�H�L$�
L��H��8��7H�D$H9�xt�L�D$�l���@H��A��-H�}���H�`�L�D$H�EHǀx�-��������AVAUATUH��SH�� H��`�dH�%(H�D$1�H��H��xH��8tb�H�5m"�7H�$H��H9�xtq�\�H��x�H��H�p��H�D$dH3%(�nH�� []A\A]A^��H�5G"�6����EH�E�f���L�d$L�t$I��@ؔL��I�}�N>�v@����@H��H���@訐H�T$H�BH�����@H�rH���ƪH�D$H�ߺH�H�p��H��H��袪I�}L���>I�}L����>�������I�}L��L���?H�D$H�H�x�W���H�p�H��辨�@H�BH�ߺH�p裨�h���fDH������
H��H�5� �W��~����}�ff.�f���ATUSH��H�5��H��dH�%(H��$�1�H���|������H�$H�l$1�H�|$H�� H�HD�1��g
H��Ƅ$�A���KH�t$D��H��L�d$p�fH��L��H��$���L��H���H��H����������!�%����t��H������D�H�VHD��H��H)�s�s��CH�|$H���H��$�dH3%(uH�İ[]A\��N�ff.���AWAVAUATUSH��8dH�%(H�D$(1�H�\$L�d$�߇H���1�H�5��蕉H���D$%�D$ � �1�A��H��H�ǐؔ��1�A��H��H��ٔ��1�A��H��H�ǘڔ��l1�A��H��H���ڔ��P1�A��H��H�� ۔��41�A��H��H�ǀؔ��1�A��H��H�Ǹؔ��1�A��H��H��ڔ���1�A��H��H��۔���1�A��H��H���ؔ��1�A��H��H��ؔ��1�A��H��H�Ljؔ��pA��1�H��H��۔��T1�A��H��H��xؔ��81�A��H��H���ڔ��1�A��H��H�ǘؔ��1�A��H��H��ڔ���1�A��H��H�Ǩؔ���1�A��H��H�ǰؔ��1�A��H��H��(۔��1�A��H��H��0۔��t1�A��H��H���ڔ��X1�A��H��H��pؔ��<1�A��H��H��۔�� 1�A��H��H���ٔ��1�A��H��H���ؔ���1�A��H��H�Ǡڔ���1�A��H��H���ؔ��A��1�H��H��Xؔ��1�A��H��H�Ǡؔ��x1�A��H��H���ؔ��\1�A��H��H��`ؔ��@1�A��H��H���ڔ��$1�A��H��H��hؔ��1�A��H��H�ǘ�����1�A��H��H�Ǩڔ���1�A��H��H�ǰڔ��1�A��H��H��ܔ��1�A��H��H��ܔ��|1�A��H��H��۔��`1�A��H��I�Ǹڔ�L���A1�A��H��I��۔�L���"1�A��H��I���ڔ�L���H�=H5��H��@�LH�|$L��H�D$H����'�|$$vH���lWH�D$H�5��H�P1��p�H�|$��H���D$%�D$ ��1�A��H��H�ǐؔ������u1�A��H��H��ٔ������Y1�A��H��H�ǘڔ������=1�A��H��H���ڔ������!1�A��H��H�� ۔������1�A��H��H�ǀؔ�������1�A��H��H�Ǹؔ�������1�A��H��H��ڔ������1�A��H��H��۔������1�A��H��H���ؔ������y1�A��H��H��ؔ������]1�A��H��H�Ljؔ������A1�A��H��H��۔������%A��1�H��H��xؔ������	1�A��H��H���ڔ�������1�A��H��H�ǘؔ�������1�A��H��H��ڔ������1�A��H��H�Ǩؔ������1�A��H��H�ǰؔ������}1�A��H��H��(۔������a1�A��H��H��0۔������E1�A��H��H���ڔ������)1�A��H��H��pؔ������
1�A��H��H��۔�������1�A��H��H���ٔ�������1�A��H��H���ؔ������1�A��H��H�Ǡڔ������1�A��H��H���ؔ������1�A��H��H��Xؔ������eA��1�H��H�Ǡؔ������I1�A��H��H���ؔ������-1�A��H��H��`ؔ������1�A��H��H���ڔ������
1�A��H��H��hؔ�������
1�A��H��H�ǘ��������
1�A��H��H�Ǩڔ������
1�A��H��H�ǰڔ������
1�A��H��H��ܔ������i
1�A��H��H��ܔ������M
1�A��H��H��۔������1
1�A��H�޹����L���
1�A��H�޹����L���
1�A��H�޹����L����H�=.0��H�|$L��H��H�D$�"�|$$vH���YRH�D$H�5���H�P1��]�H�|$���}H�D$(dH3%(uH��8[]A\A]A^A_����f.���U��S��H������������������2&����'����6H��1�[]����USH��H��(dH�%(H�D$1���GH��@ؔH�}H�����u�s����CH�H�D$dH3%(��H��([]�fD1�H�L$H�T$H�5n�������t�H��@ؔH�}H��t�ֿH�|$�t$�x�H��H�E�D$�EH���v����C	�	H�=��I��CH��d����H�����AWAVAUATUH��H�5��SH���H��`�dH�%(H��$�1�H�L$TH�T$`H�@ؔL�L$XL�D$hL��xL�kHH�H�D$hH�@ؔ�@�D$XH�H�D$H��0H�D$1��������gH�|$hH���9�t$X�H�D$HD�d$TH�l$`A�|$臾D��H��H���9'H�$H�D$HH�����8��H�����I��H�D$pL��$�H�D$(H�D$\H�D$0H���H�D$8H�D$xH�D$@�	fDH��$�H���OH��H�t$�b��H��E1�A�jH�L$@�PH�t$H�|$H�ZY����H���L���L��I���HM���H�D$@L��L��0H�H����L����
L��袽H�����H�|$p芽�T$$H��@H�4$���C(���H����I��I�����}��H�����H�D$�,L��L��xL�kHH�H�D$H��0����H��H��t��D$TH�|$(1�M��H�$H����D$\�D$$1�H�D$x�!X
H�|$p��L��A���
���t���H�|$p誼H���?����H�<$藼H�|$H荼H�D$L��xL�kHH�H�D$H��0H�@ؔ�@��u0I�H�L$`H���xtm�H��ڔ1�H�81��T�@H��$�dH3%(��H���[]A\A]A^A_��L���8FH�|$p���?���f�H�|$pD��胾H��H��$����H�;H��� ����Or
����H�<$������	H�=��?�H�D$H���D�EH�E�?����H�<$�_�H�|$H�U�H�D$L��xL�kHH�H�D$H��0�����1�1��c�	�������f����G�
���ATI��UH��H��SH��H��dH�%(H��$�1��=�H���D$H�D$L��$�HDŽ$�HDŽ$�HDŽ$�HDŽ$PHDŽ$XHDŽ$8HDŽ$HHDŽ$�HDŽ$�HDŽ$�HDŽ$�HDŽ$�HDŽ$�HDŽ$�HDŽ$�H�D$DŽ$hHDŽ$`HDŽ$@HDŽ$HDŽ$����H��D$�<�H�EH��$�dH3%(uH�Ġ[]A\��D��@��AUI��ATI��H��UH��SH��H��dH�%(H��$�1���H���D$H�D$L��$�HDŽ$�HDŽ$�HDŽ$�HDŽ$PHDŽ$XHDŽ$8HDŽ$HHDŽ$�HDŽ$�HDŽ$�HDŽ$�HDŽ$�HDŽ$�HDŽ$�HDŽ$�H�D$DŽ$hHDŽ$`HDŽ$@HDŽ$HDŽ$��s��H��D$��I�$H��tH��8H��$�dH3%(uH�Ĩ[]A\A]�������AVM��AUI��H��ATI��UH��SH��H��dH�%(H��$�1��#�H���D$H�D$L��$�HDŽ$�HDŽ$�HDŽ$�HDŽ$PHDŽ$XHDŽ$8HDŽ$HHDŽ$�HDŽ$�HDŽ$�HDŽ$�HDŽ$�HDŽ$�HDŽ$�HDŽ$�H�D$DŽ$hHDŽ$`HDŽ$@HDŽ$HDŽ$�����H��1�L��D$�}�I�EH��t4H��8H��$�dH3%(u$H�Ġ[]A\A]A^�f.�I��$8��������H�w����H�W0���ff.��������AWAVAUI��ATUH��SH��dH�%(H�D$1���t<~2�N(u5H�D$dH3%(��H��[]A\A]A^A_�f.��N(u�L�eI��L������I�}L��L��X������u���6�L�}�@I���@L��H�$�����A�D$��x=L����H����E1�I�$H�D$A�L���@H�ujI�}��XZ�3���H�5�(�1��-UL�$$A�t$����ff.�f�����h��tRAVI��AUA��ATA��UH��S1�@H��`��D��L����H�4�D�����9�hw�[]A\A]A^�f��ff.�@��AVAUATUSH��H��H�7dH�%(H�D$1�H�4$H��t��A��D��H�߉�E������E��u'1�H�T$dH3%(u\H��[]A\A]A^��H�4$D���H������H�$H�@H��t�I��E���D��H��L��H�$�X���H�$H�@H��u���d��@��UH��SH��H����u,H�>H���{H��@H��@H��[]�f���&�H��H���f.�@��H�HcB H��HBH�8H�G�`��L�Ic@ H��I@L�I�@H�@H��t
L����H�GH������ff.����FH����H�1��DUH��SH��Hc_ H�t$��x:H���@H�C�H��t'H��H�EH�<H�G�P��u�H��[]�f.�H�}@t�}0u�E0�����H��[]�H�|$H��H�upE1�jH�U@A�H�
'jj�T�H�� �E0������D��H�wH�?�@���AWAVAUATUSH��HH��`�H�t$dH�%(H�D$81�H�����H�D$0�W I��L�d$H�D$H�$H�D$ H�D$Hc�H��IF�xL�8�b�PHc�H�>��DI�GL���P H���tA�F(�Q���I�GL���P����IcF H��IF�@IcF H��IFH�pH�@L�|$(I�~HH�D$ ��H��I�vpI�VHM��jA�H�
�L��jj��H�� H���tA�F(���-�H�|$(H��tH��p
L��A���3g
E��t3A�N,A�V$���tIcF 9���������������I�~ht0H�|$H��I�vpE1�jI�VhA�H�
Xjj�h�H�� IcF H��IF�@H���tA�F(��@H�D$8dH3%(�-H��H[]A\A]A^A_�DH�pH�@I�~PH�D$ �(H��I�vpI�VPL��jA�H�
�jjL�L$0�̧H�� H����$A�F(�w������H�|$0t
H�|$�e
IcF ���I�~hA�V$��������@�)���A�V D������I�~`tHH��I�vpE1�I�V`jA�H�
<L��jj��H�� H���tA�F(�����A�I�GL���Ic~ H��I~H���Ce
A�F �P�A�V H���������D������H��IF�@A�V ����H�|$H��I�vpE1�jI�VhA�H�
djj�t�IcF A�V$H�� H��IF������@����H��M��A�1�jH�
�jjH�|$(�"�H�� ����f�IcF H��IF�@�O����IcF H��IF�@�/����H��1�A�jH�
(jjL�L$0H�|$(訥H�� H�������H�|$0H���t��`�iI��H���GH�XؔL��H�0�����-IcF 1�H��IFA�~$��҉PA�F I�~�P�pA�V Hc�1�H����1�H�t$0L��I�FA��@IcV H��IVH�IcV H�L$0H��IVH�JIcV H��IVL�zIcV H��IV�BH�PH�R(H��tH���I�~X�����H��I�vpE1�I�VXjA�
H�
�L��jj�u�H�� H��������A�F(� ��������fD������IcF H��IF�@���H�|$0t
H�|$�tb
H��ڔ1�H�5�H�8�������r��f�ATI��USH��H��`�H�t$H�l$@IcD$ I�|$����H��H�<H�G�Ic|$ �W�H��I|$A�T$ H����a
H���u�I�D$`H��tH� ؔH�
H9Ht�H��I�t$pH��E1�jI�T$`A�H�
[jj�A�IcD$ H�� I�|$���m���1Ҿ ��I�D$�@I�D$H�8H�GH�@(H��t��H���t"A�D$0H�t$L�����H��[]A\�fDI�|$8t�A�|$0u�H�|$H��I�t$pE1�jI�T$8A�H�
�jj蒢H�� �ff.����H�wH�?�����H�wH�?�0�����H� ۔1�H�5lH�8�$�@��H� ۔1�H�5tH�8��@��USH��H��H�/HcE ��t<�H��HEH�8H�G�Hc} �W�H��H}�U H���4`
HcE ��u�H�}1Ҿ 謩�E H�{H�E�`
H��H��[]�Z�f.���SH��H���PQH��[H�����@��UH��H��SH��H���(Q�CH��H���Y���������H�H��[]����SH��H��H�� dH�%(H�D$1���PHcP H��HPH�:H�GH�@H��t`H�L$H�T$H�t$�Ѓ�t2�D$�C���CH�D$H�H�D$dH3%(u*H�� [�fDH�D$�CH���f.��C�����D��SH��H���@PH��[H���4���@��SH��H��� P�CHc@ H�[���AUH��ATUSH��H��(dH�%(H�D$1���OHcP H��HPH�BH�rH�D$H��tiH�l$H�|$H��1�jI��A�H�
4�jj�ΟH�D$(H�� H��t0�oD�kH��D�cH�PH�S�@�]
D�kD�c�
f��CH�H�D$dH3%(uH��([]A\A]�����D��AUH��ATUSH��H��(dH�%(H�D$1��OHcP H��HPH�BH�rH�D$H��t9H�l$H�|$H��1�jI��A�H�
d�jj��H�D$(H�� H��u H�D$dH3%(u>H��([]A\A]�D�oD�kH��D�cH�PH�S�@�\
D�kD�c��
��ff.�f���SH��H���@N�x,�t�CHc@,H�[�D�CH�[�ff.���SH��H���N�CH�x8����H�[�ff.����AUH��ATUSH��H��dH�%(H�D$1�H���MH��I��1�H�p jH�xA�jH�
�j軝H�D$ H�� H��tM�oD�kH��D�cH�PH�S�@��[
D�kD�cH�D$dH3%(uH��[]A\A]�fD�CH�������ff.���SH��H���M�C�@xH�[�@��SH��H����L�CH�@pH�[���SH��H���L�Ph�C��tH���H�[�f�H�[����SH��H���L�CH�PpH���tHcp\HPh1�H9�}
1�H�x8��H�[�@��SH��H���@L�CHc@\H�[���SH��H��� L�CH�@hH����H�[�ff.����SH��H����K�CH�x0H��tH�G�P������H�[�1��ff.���SH��H���K�CH�@hH�[���SH��H���K�CH�xx����H�[�ff.����SH��H���`K�CH�x0H�G�P������H�[�@��SH��H��H�� dH�%(H�D$1��KH�x0H�GH�@H��t[H�L$H�T$H�t$�Ѓ�t5�D$�C���CH�D$H�H�D$dH3%(u%H�� [�f�H�D$�CH���f��C���U���D��H��H���JH�x0H�GH�@ H����ff.���AVAUI��ATA���USH��0H��۔dH�%(H�D$(1�H�l$H�D$H�D$H�3���	1�L�L$H��L�D$H�e�D���,���tHH�D$1�1���	H�;1�H�5z����H�D$(dH3%(�fH��0[]A\A]A^�@A��H� �H�|$L�0�I^H��L���>H�|$���!H��t�H�XؔA�H�(�^H��H������e���L���LI� H����C L��H�CH�D$�C,�����C$H�D$�C0�C(�]�H�K8H�5n�H�CpH�x0�	H�ŠؔH�C8H�UH9P�3H�Cp�
H�K@H�5C�H�x0�N	H�C@H�UH9P��H�Cp�H�KHH�5!�H�x0�	H�CHH�UH9P�H�Cp�H�KPH�5�H�x0��H�CPH�UH9P��H�CpH�5v�H�KX�H�x0�H�CXH�uH9p��H�Cp�H�K`H�5L�H�x0�H�C`H�UH9P�XH�CpH�5��H�Kh�H�x0�cH�ChH�uH9p��H�|$�g\L�k1�H�t$H��H���@I�EH�D$E��t�@H�S1�1�H�BH�CH�hH�C�@�:�	���DH�|$ �\H�|$ I���[H�|$ H��I��jI��A�H��jH�
��j�K�H�|$(H�� H������H�XؔL�0�[H��L���
�������H�|$���H���cU
����fDH�Ch���H�C@���H�C8���H�C`���H�CX�\���H�CP����H�CH��������fD��AUATA��UH��SH��H��H�?dH�%(H�D$1��!FD��H��H��I��H�����PxH�$H��t"H�L$dH3%(ufH��[]A\A]��I�E H��t�H��A�T$H�x0H���S���tH�$��I�EH�PH�zxt�H�H�@D��H��H��Px��7������ATH��USH��H��dH�%(H�D$1��YEH��HcP H��HPH�:H�G�PH�$H��t7H�H��t/�oD�c�kH�@H��H�CH�� ��w,D�c�kDH�D$dH3%(u!H��[]A\��H����.D�c�k���z���f.���ATH��USH���DD�c�kHcP H��HPH�B�oH�@H��H�CH�� ��vH���r.D�c�k[]A\�fD��ATH��USH���MDH�@H��tD�oD�c�kH�@H��H�CH�� ��wD�c�k[]A\�DH���.��fD�C[]A\����ATH��USH����CH�@8H��tD�oD�c�kH�@H��H�CH�� ��wD�c�k[]A\�DH���-��fD�C[]A\����ATH��USH���mCH�@xH��tD�oD�c�kH�@H��H�CH�� ��wD�c�k[]A\�DH���(-��fD�C[]A\����ATH��USH��H��dH�%(H�D$1���BH��H�x0H�G�PH�$H��t2H�H��t*�oD�c�kH�@H��H�CH�� ��w'D�c�kH�D$dH3%(u!H��[]A\��H���x,D�c�k������f.���AUATA��H��USH��H��dH�%(H�D$1��4BH��H�5�vD��H��Hc@ H�$1������tPH�$H��xgHcU H9�^H��HED�kH�@D�c�oH�@H��H�CH�� ��w>D�kD�cfDH�D$dH3%(u2H��[]A\A]�D�C��f.�H���+D�kD�c��)���f���US��H��H��dH�%(H�D$1��LAH���H�5�uH��1�H�$���������t
H�$H���|�E,H�D$dH3%(u&H��[]�DH�0۔1�H�5��H�8���葴�����US��H��H��dH�%(H�D$1��@H��H�5�k��H��1�����tH�$H�EpH�D$dH3%(uH��[]��-���ff.�f���U��H��SH��dH�%(H�D$1��L@H��H�5k��H��1��&����tH�$�ChH���H�D$dH3%(uH��[]�賳����US��H��H��dH�%(H�D$1���?H��H�5�j��H��1�����t
H�$H��w�MxH�D$dH3%(u(H��[]�DH�۔H�3�1�H�81�����'������SH��H���`?H�x8t�xXt#�CH�@PH�[�fD�C[�f.��pHH�x@���s辙�CH�[�D��AVAUA��ATI��UH��SH��H�?dH�%(H�D$1���>I��HcX H�@H��tOH��D��L��H��H�\H�����PxH�$H��tZH�L$dH3%(��H��[]A\A]A^�f�H�}�'SH����1�H�H1���	I�F��H���RH��A�UL��H�x0�����tH�$�f.�H�CH�xxt�H�]H�CD��L��H��Px�R���觱�����AVH��I��AUATUH��SH�ĀdH�%(H�D$x1���=H�x8H���eH��@ptL�xX�
�@HH�{@D�`�D���/��D$I�Ń{x���CxH���Hc�H�>��fDH�T$H�t$�;D�L$E����L�l$D�d$��H�{8�K
��ݔ�T$H�C8�@H�C8�@H�C8�PH�C8L� H�C8�@H�Cp�t1�H�}�E��H�E�D$��u&H�D$xdH3%(��H��[]A\A]A^�DL��萔��fDH�HPL�l$PH���1�� L���	
�D$A�ă{x�t����CxH���Hc�H�>��H�C8L�(D�`��L��D���Ֆ�D$I��H�{8�J
��דE1�H�L$0L��H���H�C8�oH�RH�P�{xD��A��H��L�C8H���j����ChP���H�C8H�� H�8�w�E������H�EH�Cp���fD�t$���TH�{8�J
��9�H���I�����L��H�C8�o
H�RH�PD��H�K8H���L����;��H�C8H�8���E������H�EH�Cp�)���DH���E1�E1�D��L��H�pjjH�8�]����E_H�AXH��H��?H�EH�Cp���H�;A��L��H�r���D��E1�L��H���jH��jL�L$�2���ZYI��H�Cp��Q����{Xt
H�{@�b�H�Cp�L$�CXL�c@�Q�SH�h���@�EH�E�q����L��D���͔�D$I������ȭ�����ATI��UH��S��u>� 贑H��H����9�EH�I��$H�kH�CH��[]A\�f.�H�5���1���1�ff.���U��H��SH��dH�%(H�D$1��|9H��H�5Ld��H��1��V������H�$���������щ����щ����ʃ���H�Sh��t�����tx�����upH����J����1���u
H�BH��PpH���>�H�ShH�$f1���H	�H�Chf�H�D$dH3%(��H��[]�DH��u�f1���H	�H�Ch��@H�۔1�H�50�H�8耸�fDH�۔1�H�5@�H�8�`��fDH�:�]���H�۔1�H�5x�H�8�8��c����Ϋ��ff.���UH��H��SH��H���7H�Ph��t,�C1�H�=���w��CH�H��[]�f���t|��t,H�x@H��t��xX���CH�@PH��H�H��[]麦
��trH�@8H��t��oH�@H��H�CH�� ����H���U!�{u}�C�C�o���H����KH�P�1�H�HH� ۔H�8H��1�[]�#�H�@pH�������pH�8�s蘑�CH������pH���s�~��CH�����H���
�v���D��AUA��H��ATI��USH��H��8dH�%(H�D$(1��6�@i�wH��H�L$1�D��H�T$H�5ת�Y�����-�D$H�t$�PH����H���`1���uH�HH�t$H�ljT$�QpH�t$�T$H��D�H��E��A��-u	D�FH�NA�@�<	wx��L�T�A�:uk��vA��0t`L��H)�H��TA��0H�AMc�L9��1�ID�Y�A��	w2f���0O��H��Hc�N�AI9����D�Y�A��	v��H�L$ �������H�D$ D�c�kH��oH�@H��H�CH�� ��vH���:D�c�kH�D$(dH3%(��H��8[]A\A]�@L���IH�i�1�H�HH� ۔H�81����H�8����H�T$H�5���1���,�fDA��-t!M���!���H�T$ L���d�����A��-u�L��H�������I�����"���f���ATA��H��UH��SH��0dH�%(H�D$(1��F4�@i�4H��H�L$1�D��H�T$ H�5����������D$H�t$ �PH����H���1���uH�HH�t$H�ljT$�QpH�t$�T$H��D�I��A��A��-u�NL�F�A�<	w��L�T�A�:ur��v��0thL��L)�H��\��0I�@Hc�I9���E�@E�X�A��	w:f.�A��0H��H��Mc�I�HI9�txD�E�X�A��	v�f.�E1�1��V�H�D$(dH3%(uzH��0[]A\�DH���GH�a�1�H�HH� ۔H�81����H�8�	����A��-tH��x�A�1�1�����A��-u�H��H���q���H�����G������AUA��H��ATI��USH��H��8dH�%(H�D$(1��a2�@i�?H��H�L$1�D��H�T$ H�5���)�������D$H�t$ �C�PH����H���1���uH�HH�t$H�ljT$�QpH�t$�T$H���I��D��<-u	D�FL�^A�HЀ�	w~��L�T�A�:uq��vA��0tfL��L)�H��ZA��0M�KMc�M9���A�KD�Y�A��	w7���0O��I��Hc�N�AM9��}A�	D�Y�A��	v����������H�H�D$(dH3%(uqH��8[]A\A]�DL���EH�q�1�H�HH� ۔H�81����H�8�����<-tM��x�L����<-u�L��H���t���I�����b���f���SH��H��dH�%(H�D$1�H�GH��PH��`��H���u"H�$H��tH�
H��t�AH�2H���e1�H�\$dH3%(uH��[�������ATI��USH��H��0dH�%(H�D$(1�H�GH�t$�PH��`�H���uaH�D$H��tWH�H��tOH�KL�AM����H�L$ H�T$H��H�t$A��H���uH�L$H��B��tF��t)1��
D�H�|$(dH3<%(u^H��0[]A\�f�H�H�t$ L���P`1���@H�	�T$L��H�t$��ZH�|$�*�1��fD�BH�0L���Qd1���Ȣ�����UH��1�SH���H��dH�%(H�D$1�H�FH��H��`H���d�H�<$H��t�G
1�H������E=
H�T$dH3%(��uH��[]��G������SH��H�H��tQHcC ��x<�H��H�<H�G�Hc{ �W�H��H{�S H����<
HcC H�{��y��&�H�CH���6�H��[�
�ff.�f���UH����SH��dH�%(H�D$1�詅H��H�xH��H��H�Hǀ�H��1�H)�������H�H���C`�����f�H�{H��H�uxH��p3[A��i�H��P	]1�H��H��)H�t$dH34%(uH����H�d�G[]����ff.����UH���xSH��dH�%(H�D$1��لH��H�xH��H��H�H��H�@p1�H)���x���H�H����H�{H��H�uxH��p3[A���H��P	]1�H��H�#����>(H�t$dH34%(uH����H�a�G[]��9���f�H���'AH��1�H�HH� ۔H�81�H���e�D��ATH��UH��SH���:,�@itTH���D�c�k�oH�@H��H�CH�� ��wD�c�k[]A\�fDH����D�c�k[]A\�@[H��]A\�T���@H��ؔH���1�H�H�HH� ۔H�8I��1�鵬D��ATH��USH���+�x`�tOH�@hD�c�k�oH�@H��H�CH�� ��wD�c�k[]A\�@H���HD�c�k[]A\�@[]A\�_���ff.�@AVI��AUI��ATA��H��UD��SH��0dH�%(H�D$(1���*�x`�u:I��۔H�ÿI�6��	�k`��	��H�
|���Hc�H�>��@H� ۔I�1�1�H���H�81�衫H�L$(dH3%(H����H��0[]A\A]A^�D1�A��H�T$L����H��H�5R�D��H�D$(�ChH���H�CpHǃ�PH�CpPH�D$8P1�L�L$0L�D$8�H�� ����4H�L$ H����Kx�t$H�|$�y�H����t$H�|$���H���H�����@,蛩�H���n�	H�|$E1�GH�{����L�k �|)H�t$1�H�C(H�C H���@1�1�H�C0�'�	���f�H�Ch1�L��D��H�Cp����H�T$L�KpL�ChH�5��������fH�{h��H�{p������H����	H�|$�GH�{�=H�|$I���J����H�l$1�L�L$L��L�D$ H��H�5��D��蒩�����H�|$�?=I��H�0�L��H�0�*�
���rA��~J�t$H�|$ H�T$�H
�����H�D$L��H�0���
����H�D$L�(I��@��H� �L��H�0��
���L�d$H��I��A�jM��H�
G�L��jH��j�xH�`�H�� H�����H�|$H���z��pH�@�H�(�G<H��H���<�
���NH�|$H�|$�%<I���]��H���0�	H�|$H�{����f�H��ٔL�ch�L��H�}���H��H�uE1�jA�H�
#�L��jH���j�7wH�EH�sh1�H�� H���@1�1�H�Cp��	�M���fD1�H�T$L�D$ L��H�5��D��H�D$ 衧�����H�D$ ���������щ����щ����ʃ��w��H	Ch��'~H����@H����@H����2A�=���D1�H�T$L��D��H�5:������tj���H�����	�e������H����	H�|$�GH�{�W���@I�>H�w�1�1��զ1�1�1���	�$���D1�1�1��u�	����H��ڔ1�H�5��H�8蘥�1�1�1��K�	H�0۔1�H�5K�H�8�s�����1�1�1��#�	H�0۔1�H�5��H�8�K����H��ڔI�MH���1�H�8�N���H�|$�I���L���3
�<���1�1�1����	I�>1�H�5����O���苘��ff.���H��ؔH��E1�H�H�0�H�H�����f���H��ؔH��E1�H�H�XؔH�H���Y���f���H�pؔH��E1�H�H�XؔH�H���)���f���H�`ؔH��A�H�H�0�H�H�����fD��H��ؔH��A�	H�H�XؔH�H������fD��H��ؔH��A�H�H�0�H�H�����fD��H��ؔH��A�H�H�0�H�H���f���fD��H��ؔH��A�H�H�XؔH�H���6���fD��H�xؔH��A�H�H�@�H�H������fD��H��ؔH��A�H�H�0�H�H������fD��H��ؔH��A�H�H�0�H�H�����fD��H��ؔH��A�H�H�0�H�H���v���fD��UH��H��SH��H���x"�@it:�CH����J��t1���t7��H�H�H��[]�fDH�:��H��H��[]���f.�H�BH��PpH��뺐��SH��H���"�x`�tH�xhH��[鍇D[����f���AVH��AUATUH��SH�� H�t$H�\$dH�%(H�D$1��!H��1�I��H�p jH�xA�jH�
&�j�qH�`�H�� H���t-H�|$tH����/
H�D$dH3%(uuH�� []A\A]A^�L�d$M��t�H��L�l$��51�L��H��H���i��H���L�pL���6���H��E1�L��jH���A��H��ATL��j�qH�� �k���胔�����ff.����ff.����ff.����ff.����ff.����ff.����ff.���SH��H���P �CH�x8����H�[�ff.����AWH��AVAUATI��USH��8H�t$H�l$dH�%(H�D$(1��H��1�I��H�p jH�xH��jA�H�
q�j�oH�`�H�� H���t8H�|$tH���8.
H�D$(dH3%(��H��8[]A\A]A^A_�D��6w�@I���@H���H�D$ H��脂����A�E����H����yL��L�d$I�EL�t$ L�|$A�F��31�L��H��H���^��H���L�hL���+���H��L��E1�AVH���A��L��AWH��j�oH�� H�|$ �X-
����H�59��1���L�l$ A�u�Y����J���f.���ATA��H��USH��H��0dH�%(H�D$(1��f�@i�\H�\$ H��H�L$1�H�T$I��H�5�RD���&�����H�D$ H�t$�@�D$�PH����H���41���uH�HH�t$H�ljT$�QpH�t$�T$H��D�H��E��A��-u	D�VH�NA�B�<	w|��L�L�A�9uo��vA��0tdL��H)�H��XA��0H�AMc�I9����ID�Y�A��	w6fD��0O��H��Hc�N�QI9����D�Y�A��	v��H��E1�A�H��j���XZH�D$(dH3%(��H��0[]A\�f.�H���1H�Y�1�H�HH� ۔H�81�����H�8����A��-t-M���q���A�E1�H��L�ֹ���l���A��-u�L��H���@���I�����&���fD��SH��H�0H��tH�GH�@0H��t��H�{8tH�{8��*
H�C8H�{@H��t
�tH�C@�C`������H�{0H��tH�G�H�{t	H�{�*
�C`�����P���v@����w!H���H��t�h,H���H��t�sH����H��[�sfDH���t�H����*
�C`Hǃ��f.�H�{ptH�{p��)
H�CpH�{x�:���H�{x��)
H�Cx�$����H�{pH�G�H�{ht	H�{h�)
�C`�&���ff.���AWH��AVAUATUH��SH��(dH�%(H�D$1���H�x0H��H��tH�GH�@0H��t��H�{8tH�{8�8)
H�C8H�{@H��t
�rH�C@�C`�����CH�{0�C\H�GH�@(H��t��H�{0H�,$L�s8L�l$I��H�l$�H��tH�GH�@0H��t��H�{8tL���(
H�C8H�{@H��t
�qH�C@�C`������H�{0H����H�G�PH�{0��ucH�GL��PH�D$H��tH�H��tH�C8�@H�{0H�GH�@H���KH�KPH�SHH�s@�ЉCXI��`�I�����H�{0H��tH�GH�@0H��t��H�{8tH�{8��'
H�C8H�{@H��t
�'qH�C@�C`�����8H�D$dH3%(�]H��([]A\A]A^A_�DH�{ptH�{p�x'
H�CpH�{x���H�{x�\'
H�Cx�����H��L��I��A�jH�
̬1�jjH�3�hH�|$(H�� H��t�0
H��u�'
I����D���H�{0H�G�P H�{0����HcC\�CXH�CP���@H�{ptH�{p�&
H�CpH�{x�����H�{x�&
H�Cx�����&
����fDH�{ptH�{p�h&
H�CpH�{x�����H�{x�L&
H�Cx����Z���f.���AWH��AVAUATUH��SH��(dH�%(H�D$1��sH�x0H��H��tH�GH�@0H��t��H�{8tH�{8��%
H�C8H�{@H��t
�"oH�C@�C`�����;H�{0L�s8L�l$I��H�G�P �C\H�,$H�l$�H�{0H��tH�GH�@0H��t��H�{8tL���Y%
H�C8H�{@H��t
�nH�C@�C`������H�{0H����H�G�PH�{0��ucH�GL��PH�D$H��tH�H��tH�C8�@H�{0H�GH�@H���OH�KPH�SHH�s@�ЉCXI��`�I�����H�{0H��tH�GH�@0H��t��H�{8tH�{8�$
H�C8H�{@H��t
��mH�C@�C`�����<H�D$dH3%(�aH��([]A\A]A^A_�f�H�{ptH�{p� $
H�CpH�{x���H�{x�$
H�Cx�����H��L��I��A�jH�
t�1�jjH�3�ieH�|$(H�� H��t�f-
H��u�#
I����@���H�{0H�G�P ����@HcC\�CXH�CP���@H�{ptH�{p�`#
H�CpH�{x�����H�{x�D#
H�Cx�����+#
����fDH�{ptH�{p�#
H�CpH�{x�����H�{x��"
H�Cx�������f���SH��H��dH�%(H�D$1��/H�x0H��H��tH�GH�@0H��t��H�{8tH�{8�"
H�C8H�{@H��t
��kH�C@�C`�����'H�{0�C\H�GH�P(H��t��H�{0H��tH�GH�@0H��t��H�{8tH�{8�%"
H�C8H�{@H��t
�okH�C@�C`����v|H�{0H��tXH�G�P��uMH�{0H��H�G�PH�$H��tH�H��tH�C8�@H�{0H�GH�@H����H�KPH�SHH�s@�ЉCXH�D$dH3%(��H��[ÐH�{ptH�{p�p!
H�CpH�{x�a���H�{x�T!
H�Cx�K����H�{ptH�{p�0!
H�CpH�{x�����H�{x�!
H�Cx����HcC\�CXH�CP�Q����������SH��H��dH�%(H�D$1��/H�x0H��H��tH�GH�@0H��t��H�{8tH�{8� 
H�C8H�{@H��t
��iH�C@�C`������H�{0H�G�P H�{0�C\H��tH�GH�@0H��t��H�{8tH�{8�0 
H�C8H�{@H��t
�ziH�C@�C`������H�{0H��tXH�G�P��uMH�{0H��H�G�PH�$H��tH�H��tH�C8�@H�{0H�GH�@H����H�KPH�SHH�s@�ЉCXH�D$dH3%(��H��[��H�{ptH�{p�p
H�CpH�{x�����H�{x�T
H�Cx����H�{ptH�{p�0
H�CpH�{x����H�{x�
H�Cx�����HcC\�CXH�CP�J����������SH��H��dH�%(H�D$1��/H�x0H��H��tH�GH�@0H��t��H�{8tH�{8�
H�C8H�{@H��t
��gH�C@�C`�����GH�{0H�G�P �C\H�Sp���C\H���t)H�HShH9�|H�D$dH3%(�^H��[�@H�{0H��tH�GH�@0H��t��H�{8tH�{8�
H�C8H�{@H��t
�BgH�C@�C`����voH�{0H��t�H�G�P���y���H�{0H��H�G�PH�$H��tH�H��tH�C8�@H�{0H�GH�@H����H�KPH�SHH�s@�ЉCX�'���DH�{ptH�{p�P
H�CpH�{x�n���H�{x�4
H�Cx�X����H�{ptH�{p�
H�CpH�{x�����H�{x��
H�Cx����HcC\�CXH�CP���������AWH��AVAUATUSH��XdH�%(H�D$H1��H�x0H��H��tH�GH�@0H��t��H�{8tH�{8�k
H�C8H�{@H��t
�eH�C@�C`������H�{0H���!H�G�P���H�{0H�l$0H��H�G�PH�D$0H��tH�H��tH�C8�@H�{0H�GH�@H����H�KPH�SHH�s@�ЉCXI��`�H�ChM���M��t0H%����H�ChH�D$HdH3%(�1H��X[]A\A]A^A_�H��H��H�Sh�����{`���Ch	�-H�{0H����H�G�P �C\�H�{ptH�{p�0
H�CpH�{x����H�{x�
H�Cx�����HcC\�CXH�CP����@��d�@�@H�D$0H�S8�oH�RH��H�PH�� ��v
H����
H�D$0�@�@�{X��H����SHH�s@�G<�S<uH�GH�t$�T$�PpH�t$�T$I���I��Ȁ�-u�FL�V�x�@��	wu��L�D>�A�8uh��v<0t_L��L)�H��S��M�J��0Hc�M9���A�BD�P�A��	w.fD��0H�<�I��H�H�<xM9��qA�D�P�A��	v�H��E1�L��A�jH���ư�{`^_�3���L�d$ H��H�s 1�jL�sM��A�jH�
p�L��j�	[H�� I����wH�|$ tL���G
�Ch�������������VbH�Cp�Ch��H�S�o
H�RH�PH�T$(H��H����T$(H�Cp��tqfo\$0H�T$@H�PH�Cp�@H�Cp�@H�{p����|$D�N���H���C�
�A���fDH����1��%�	H�{0�,���@�@H�Cp�@H�{p���������
���H�S8�oH�RH�P�3������
�p���fDL�'�����H�Ch�O����H�sPH���H���M:�w����H�|$ �!
��tZL�|$(H��H�s 1�jM��A�L��jH�
��j�EYH�� I�����H�|$(tL���
�ChtO�X�L���p
I������������-t<H�������H��A�E1�H��L�������L���&
�s�����-u�H��H���O���H��뻹�D$@L�D$(L�Sxf�L$D�ChL�ֺL�D$H�D$0H��ؔL�T$L�0L��肬��I���H�HH��H�L$�Jk��H��E1�L��UL�D$(I���APA��jL�T$0H�L$(L���XH�� L���n
���{��@��SH��H��dH�%(H�D$1��H�x0H��H��tH�GH�@0H��t��H�{8tH�{8�
H�C8H�{@H��t
�^_H�C@�C`������H�{0H�G�P H�{0�C\H��t'H�G�PH�{0����H��tH�GH�@0H��t��H�{8tH�{8�
H�C8H�{@H��t
��^H�C@�C`������H�{0�C\H�GH�@(H��t��H�{0H��tH�G�P��tH�D$dH3%(��H��[�H�{0H��tH�GH�@0H��t��H�{8tH�{8�
H�C8H�{@H��t
�B^H�C@�C`������H�{0H��H�G�PH�$H��tH�H��tH�C8�@H�{0H�GH�@H����H�KPH�SHH�s@�ЉCX�<���f�H�{ptH�{p�`
H�CpH�{x���H�{x�D
H�Cx�����H�{ptH�{p� 
H�CpH�{x�B���H�{x�
H�Cx�,����H�{ptH�{p��
H�CpH�{x���H�{x��
H�Cx�����HcC\�CXH�CP�_����x�����AWH��AVAUATUSH��XdH�%(H�D$H1���H�x0H��H��tH�GH�@0H��t��H�{8tH�{8�;
H�C8H�{@H��t
�\H�C@�C`������H�{0�C\H�GH�@(H��t��H����J���1����蠻H�{0H��tH�GH�@0H��t��H�{8tH�{8�
H�C8H�{@H��t
��[H�C@�C`�����[H�{0H����H�G�P���H�{0H�l$0H��H�G�PH�D$0H��tH�H��tH�C8�@H�{0H�GH�@H���MH�KPH�SHH�s@�ЉCXI��`�H�ChM���M��tMH%����H�ChH�D$HdH3%(��H��X[]A\A]A^A_��H�BH��PpH������fDH��H��H�Sh�����{`��Ch	�}H�{0H���H�G�P �C\�u���H�{ptH�{p�P
H�CpH�{x�/���H�{x�4
H�Cx�����H�{ptH�{p�
H�CpH�{x�����H�{x��
H�Cx�l����H�:�����HcC\�CXH�CP���@���Y�@�@H�D$0H�S8�oH�RH��H�PH�� ��v
H�����
H�D$0�@�@�{X��H����SHH�s@�G<�S<uH�GH�t$�T$�PpH�t$�T$I���I��Ȁ�-u�FL�V�x�@��	wu��L�D>�A�8uh��v<0t_L��L)�H��S��M�J��0Hc�M9���A�BD�P�A��	w.fD��0H�<�I��H�H�<xM9��qA�D�P�A��	v�H��E1�L��A�jH��薦�{`^_���L�d$ H��H�s 1�jL�sM��A�jH�
@�L��j��PH�� I����wH�|$ tL���
�Ch�"�����w�|�����&XH�Cp�Ch��H�S�o
H�RH�PH�T$(H��H���u�
�T$(H�Cp��tqfo\$0H�T$@H�PH�Cp�@H�Cp�@H�{p����|$D�����H����
��fDH����1��	H�{0����@�@H�Cp�@H�{p��������
����H�S8�oH�RH�P�3�����k�
�p���fDL�'�����H�Ch����H�sPH���H���0�'����H�|$ �V
��tZL�|$(H��H�s 1�jM��A�L��jH�
��j�OH�� I�����H�|$(tL���S

�ChtO�(vL���@

I������������-t<H�������H��A�E1�H��L�����m���L���
������-u�H��H���O���H��뻹�D$@L�D$(L�Sxf�L$D�ChL�ֺL�D$H�D$0H��ؔL�T$L�0L���R���I���H�HH��H�L$�a��H��E1�L��UL�D$(I���APA��jL�T$0H�L$(L����MH�� L���>
���Tq��@��AUATI��H�5h(USH��H��(dH�%(H�D$1�H���]~�����H���\�H�,$H�x0H��H��tH�GH�@0H��t��H�{8tH�{8�
H�C8H�{@H��t
�UH�C@�C`����v|L�ChL9���L�KpK�H9�|
I�����HcC\H9���H�{0H��tH�G�P����A�D$HcC\I�$H�D$dH3%(�wH��([]A\A]�fDH�{ptH�{p�
H�CpH�{x�a���H�{x��

L�ChH�CxL9��P���H�(۔H��H�6�1�H�81��:}�j���DH�hؔH�{ H�0轲
���uHcC\H�{0H9�}wH��tH�GH�@0H��t��H�{8tH�{8�d

H�C8H�{@H��t
�SH�C@�C`������H�{0�C\H�GH�@(H���[��H�{0HcC\H9������H�������L�k8�5f�H�{0H�G�P �C\H�{0���C\H�H9��n���H���y���H�G�PH�{0���R���H��tH�GH�@0H��t��H�{8tL���	
H�C8H�{@H��t
��RH�C@�C`�����q���H�{ptH�{p�Q	
H�CpH�{x�N���H�{x�5	
H�Cx�8������FR��@f�PH�(H�{0H�D$H��tH�GH�@0H��t��H�{8tH�{8��
H�C8H�{@H��t
� RH�C@�C`�����H��H�s E1�1�jH�{A�H�
��t$j�JH�� H�|$�p
H�`�H�������H�Cp�k\H���tHc�HChH9���H�{0H�����H�G�P������H�{0H��tH�GH�@0H��t��H�{8tH�{8�
H�C8H�{@H��t
�DQH�C@�C`������H�{ptH�{p�
H�CpH�{x��H�{x�
H�Cx�x�H�{0H��tH�GH�@0H��t��H�{8tH�{8�h
H�C8H�{@H��t
�PH�C@�C`�����#H�{0H�����H�G�P������H�{0H�t$H�G�PH�D$H��tH�H��tH�C8�@H�{0H�GH�@H���H�KPH�SHH�s@�ЉCX����f.�H�(۔H��H�W�1�H�81��#y�S���fDH�{ptH�{p�
H�CpH�{x����H�{x�l
H�Cx����H�{ptH�{p�H
H�CpH�{x�����H�{x�,
H�Cx����H�{ptH�{p�
H�CpH�{x�����H�{x��
H�Cx����HcC\�CXH�CP�y���@H��������X�����j��ff.�f���ATH��USH�� dH�%(H�D$1���H�x0H��H��tH�GH�@0H��t��H�{8tH�{8�Q
H�C8H�{@H��t
�NH�C@�C`������H�{0�C\H�GH�P(H������H�{0H�khH��tH�GH�@0H��t��H�{8tH�{8��
H�C8H�{@H��t
�$NH�C@�C`������L�ChI9��!L�KpK�H9�
I�����HcC\H9�u8H�{0H��tH�G�P����H�D$dH3%(��H�� []A\�H�hؔH�{ H�0�U�
���HcC\H�{0H9�~wH��tH�GH�@0H��t��H�{8tH�{8�
H�C8H�{@H��t
�FMH�C@�C`�����OH�{0�C\H�GH�@(H������H�{0HcC\H9��$���H���/���L�c8�-�H�{0H�G�P �C\H�{0���C\H�H9���H�������H�G�PH�{0������H��tH�GH�@0H��t��H�{8tL���.
H�C8H�{@H��t
�xLH�C@�C`�����q���H�{ptH�{p��
H�CpH�{x�N���H�{x��
H�Cx�8����H�{ptH�{p�
H�CpH�{x��H�{x�
L�ChH�CxI9�����H�(۔H��H�ު1�H�81���t���DH�{ptH�{p�H
H�CpH�{x����H�{x�,
H�Cx����H�kh�����H�(۔H��H���1�H�81��kt�~���fDH�{0H��tH�GH�@0H��t��H�{8tH�{8�
H�C8H�{@H��t
�KH�C@�C`�����KH�{0H������H�G�P������H�{0H�t$H�G�PH�D$H��tH�H��tH�C8�@H�{0H�GH�@H���0H�KPH�SHH�s@�ЉCX���f.���6J��@f�PH�(H�{0H�D$H��tH�GH�@0H��t��H�{8tH�{8��
H�C8H�{@H��t
�JH�C@�C`������H��H�s E1�1�jH�{A�H�
}�t$j�BH�� H�|$�`
H�`�H������H�Cp�k\H���tHc�HChH9�����H�{0H�������H�G�P�������H�{0H��tH�GH�@0H��t��H�{8tH�{8��H�C8H�{@H��t
�4IH�C@�C`�����N���H�{ptH�{p�H�CpH�{x�+���H�{x�H�Cx����@H�{ptH�{p�p�H�CpH�{x�����H�{x�T�H�Cx�x����H�{ptH�{p�0�H�CpH�{x�����H�{x��H�Cx�|����HcC\�CXH�CP���@H���H����c���f.�H�{ptH�{p�H�CpH�{x����H�{x�H�Cx����c��f���USH��H��H�0dH�%(H�D$1�H��tH�GH�@0H��t��H�{8tH�{8�K�H�C8H�{@H��t
�GH�C@�C`�����.H�{t8H�{��H�{0H�CH�C H�C(H��tH�G�H�C0H�{pH�G�P���ZH�{pH��H�G�PH�$H��BH�8H�{��H�C H�$H�8��H�$1�H�C(H�C H�1H���@H�C0H��tH�PH�R0H��tH���H�{8tH�{8�P�H�C8H�{@H��t
�FH�C@�C`����vwH�{0�C\H�GH�@(H��t��H�L$dH3%(����H��[]�H�{ptH�{p��H�CpH�{x�����H�{x��H�Cx����H�{ptH�{p�H�CpH�{x�f���H�{x�H�Cx�P����������Y����a�����SH��H��dH�%(H�D$1��f�H�{pH�G�P H���������H�{0H��t�H�G�P��u�H�{0H��tH�GH�@0H��t��H�{8tH�{8��H�C8H�{@H��t
�3EH�C@�C`����v`H�{0H��H�G�PH�$H��tH�H��tH�C8�@H�{0H�GH�@H��t`H�KPH�SHH�s@�ЉCXH�D$dH3%(uPH��[ÐH�{ptH�{p�P�H�CpH�{xt�H�{x�8�H�Cx�k���HcC\�CXH�CP��2`��f���U��H��SH��dH�%(H�D$1��\��x`���H��H�0�H���H�R��L�1��]l���t(H�{hH�4$�PH�{0H��t2H�G�P��u'�H�D$dH3%(�|H��[]�DH�{pH�G�P��tH�{pH�G�P(fDH�����H�$H9Cu�H�������@H��ؔH�z�1�H�H�HH� ۔H�8I��1��l�p����_��ff.���SH���S�H�xpH��H�G�P(H���=�����t	[��H��[�W������SH��H�0H��tH�G�P��tH��[�+���H�{0H��tH�GH�@0H��t��H�{8tH�{8�`�H�C8H�{@H��t
�BH�C@�C`����vH�{0H�G�P �C\H��[����H�{ptH�{p��H�CpH�{xt�H�{x��H�Cx�fD��H��H���@�H��H������@��AUI��ATI��USH��H����
H��1�H���@H��`�H��H���H������H��ucH����H����[]��A\A]�DH���u>L��H��A�ԃ�H�Ct0H���u&H��P H���H�CuH��P��t�@H�CH��H����fDH�CH�P(H��t�H���H���H�Cu��fD��SH��H�5-sH�� dH�%(H�D$1�H�@�H�T$L�D$�D$H�1���i���tXH�����|$H�|$H��H�5����H�%���HD������uH�D$dH3%(u6H�� [�f��{w�C��@�CH���H����
�C��-\��ff.�f���SH��H�5w�H�� dH�%(H�D$1�H�@�H�T$H�D$H�1��i���tIH�|$H�T$H�5H��������tH�D$dH3%(u,H�� [�f�H�D$�CH���f��CH����~[��ff.���ATI��H�5��USH��dH�%(H��$�1�H��H��H�D$H�CH�kH��PH�@�L�K`I��H�1��PhZY���tFH�t$H��H�D$��lH�<$H��H�5%���������t<A�D$I�$H�{1���lH��$�dH3%(u!H�Đ[]A\�@H�D$A�D$I�$��Z��f.���AWH�5֕AVAUATUSH��I��XؔH���L��葃��I�>1��I��0�I�U�AI�ĠؔH�
��EH�2���H�5��L���ӄ��I�UI�<$1���oA���o)\G�oH)
\G�oP H�\G)\G�oX0)\G�o`@)%\G�ohP)-\G�op`)5\G�oxp)= \G�o��)!\G�o��)
"\G�o��)#\GH���H�%\GH�����H��[G�b�I�<$1ɺ�oH�5��)�ZG�o`)%�ZG�oh H�yZG)-�ZG�op0)5�ZG�ox@)=�ZG�o@P)�ZG�oH`)
�ZG�oPp)�ZG�o��)�ZG�o��)%�ZG�o��)-�ZGH���H��ZGH�����H�UZGH�����H��@H���H���tI�<$��
H�5���sI�<$��H�5ӓ��sI�<$��H�5œ�sI�ǰؔH�@}EH�5��L���1���I�UI�?1���N?H��xؔH�
��EH�	���H�5@�H���z���I�UH�}1���?I�H�}1���?H�uH��ؔL��EH�
����H�L�较��H��ؔH���ؔL�9�EH�
����H��H�0H�߃N( 范��I�H�;1���>H�3H��pؔL���EH�
R���H���V���H�ǸؔH��{EH�5��,���H��hؔH���EH�5ؒH������I�UH�;1���,>H�uH�ǘؔL�J�EH�
��H������H�ÀؔH�uL��EH�
����H��H��迂��H�(�H�;�H�1���=H��ؔH�;�H�1��=H�;��
H�5I���qH�;��H�5‘�qH�;��H�5%��qH�;��H�5��qH�;��H�5��pqH�;��
H�5��WqH�3H���ؔL�v�EH�
ϳ��H���H���Ё��I�H�;1����<H�uH�ǨؔL�<�EH�
����H�ّ虁��H�uH�ǐؔL���EH�
p���H�ő�t���I�I�<$1���<H�uH�LjؔL��EH�
8���H����<���H��ؔH��`ؔL�7�EH�
���H���H�0H������H�;��H�5��UpH�;1ɺH�5���?pH�;��	H�57��&pH�;��H�5(��
pH�;��H�5���oH�;��H�5���oH�;1ɺH�5$��E���H�3H���ؔL��EH�
=���H�֐H���>���I�H�;1���L;H���ؔ1�H�
��EH�5��H���}~��I�UH�;1���;H��1�[]A\A]A^A_�f���SH��H������C�@0H�[���US��H��H��dH�%(H�D$1���H���H�5j
H��1�H�$�n`���t�$f�E0H�D$dH3%(uH��[]��S��D��AUA��ATI��H��USH��H���1�H��E��t�@2u;�0��6H��@��CH�H�PL�`H�@ H�h(H��[]A\A]�@H�5��1���
���SH���C,H���K�H��[�6f���UH��SH��H����H�@XH�hH���A���C�ƅ�xH���9�CH�H��[]�@H�5��1���
�s����SH���S�H�{���H�{ ��H��[�6���US��H��H��dH�%(H�D$1���H��H�5����H��H�0�H�H�$1���^���t#H�$H�EXH�D$dH3%(uH��[]�@1�1��w~	���PQ����H���fD��t(��u#H�x�u�t��P0��t�H�@H��Á�u�H�x�W��t1���u�H�GH�@pH����fDH�H������ATI��UH��SH�_(�S0����H�{�G����<t�xDH�x���Gtx<u\����P0��t܋S0H�x��t[H��L��]A\�2fDH�S(H���L����uH�E[]A\�f.��S0<t	1�밋S0f�H�?�<t�<uH�G�Pp�S0H��댐H��낋S01��|������UH��H��SH��(dH�%(H�D$1���H��H����
�S0��t �K<������P0H���u-H�{���Gu�<��<u}H�G�PpH���	DH�s�U��tS1���uH�EH�t$H��PpH�t$H��H��p3[H�L$A��F�H�D$dH3%(u+H��([]��H�}��f�<t1���H�7���N��fDAVAUATUSH��H�� dH�%(H�D$1��G0H��W��J����t'��fDH�x���G��<�����P0��t�H�S�RH�h����H��(L�t$L�l$L�d$�7f.��D$��tAH�D$�8u7H��H������tVH��H����E1�I��L��L��L��H���<���t�1�H�L$dH3%(��H�� []A\A]A^À�t/�������̐H�S�R<t1��E���H�C�PDH�/�0�����fD<t�<uH�G�PpH��H�C�P�	���H�����H�C1��P���5M��DS�W0H����uaH����Gu)���S��P0��u@H�x���GtX<t�<tHH�1��1�1�[�Ju	f.�H��DH�xH��t�H�s(�f�H��[����DH�?��<t�<u�H�G�PpH����ff.����H��H����H��H���$���@��SH�_(�C2t	[�[1�&H��[���f.���AWAVAUATUSH��(dH�%(H�D$1�H�0�H�D$H�H�D$��u*H�D$dH3%(�H��([]A\A]A^A_��I��۔I�͉��I�4$�x	L�����H�L$H���H��L�D$H�5��1��X�����L�4$M�>A�����~	H�D$H�EXH�d$��I��B<t1��H�}<vH1�1��Ex	I�<$1�H�5Ȑ�sW�,���fDH�BH�� ٔH�}�KH���ٔ�>��H�$H�|$H�
H�M�u0��%����L9*��	��E0�AH��x��H�@H����H�@pH9BptSH�<���H9�tG1�1��w	H�EH�XH�$H�8�j�
I�<$I��1�H�HH�N�1��W�h���f.��U0���FH�}���Gu1�L@�c��P0���$H�x���G� <t�<�]���H�H���Q���H�����1�1���v	���f�������
��fD������H�D$H�$H
H�D$H��H�
H�M����A��
���A�G����������A�G�W-I�H�$�AoH�I�WL�4$H�PI�>�v�k�
L�4$I�>�GI��@����H�$H�8�D��@0�V���H���H�@����<���<�9���H�G�Pp�����H��ff.�@AWAVAUI��ATI��UH���`SH��(�$dH�%(H�D$1��|,H�xH��H�H��H�@XH)�H��1���`���H�I�]�L�l$�>,H���H��H��H�C �oH�RH�P��H�{H�uxL��H��p3[A���I��ٔ�C0I�H�CXM���&L�����S0I�����S0�@0%	ЉC0I�RXH�SX�$����
A�D$I���ٔL�c�C0H��P	]1�H�n���H���F��$H���M�'L9���H��ٔH�H9���H�˜ڔH�
H9��H���L9�t~H9�tvH9��=H�RH��u�H�-��@1�1��oo	M��E1��`�I�BH�CI�D$H�� ٔ�CI���ٔL9��8���I�B�@�+���f�I��H�kMM��H��@M��t�L�}0H�K8�
H�5��L���K�H�C8L9`��H�K@�
H�5��L���%�H�C@L9`�wH�KH�
H�5t�L���H�CHL9`��L��H�KP�A�H�5R��ӒH�CPL9`�EM9��|H������$L��H�t$dH34%(��H��([]A\A]A^A_���)�@H���@H�C���
�c0����I���ٔ���I��H�kME1�H��@H���~M��E���j���H��0L9`t�K0H��L9`t�K0H�� L9`t�K0H��L9`t�K0H��(M��L9`�����K0���fDI��I�� ٔ�:����H�C@�|���H�C8�F���H�CP���H�CH�r����L�$�(�@H���@H�C��
L�$I�z�G<�1�<uH�GL�$�PpL�$H��H�S�J���1���uH�BL�T$H��H�4$�PpL�T$H�4$H��H��p3[A�L��L�$��I�D$L�$����L�u0H��0�L��H�5�蕐H��L���H�5�4�z�H�� L���H�5���_�H��L���H�5��D�H��(�L��H�5N��)���H�7�
���H�e��@1�1��k	E1�E1��7���I��I�� ٔE1��%���H�:�����B��ff.�f���ATH��I��USH��H��dH�%(H�D$1����P0H���uXH�x���Gu(�����P0��u0H�x���Gtx<t�<thH���1�1���j	�0�H�@H��t��CH�}XL��H��1�����C�H�S�CH�D$dH3%(u*H��[]A\��H��<t�<u�H�G�Pp���A��f���H��1�1�dH�%(H�D$1�H���,���H�L$dH3%(uH����A��f���AUATUSH��H��D�/dH�%(H�D$1�跑H��H��H�8I������H�<$L��E��Ɖ�H��蛑H�L$dH3%(uH����H��[]A\A]��6A��fDAWAVE��AUI��ATA��H��UD��SH��H��8dH�%(H�D$(1��K��P0��t �NfD<�p�+��P0��u0H�x���Gu�<�p<�DH�G�PpI���@L�x��D$ H�D$f�D$$L�|$����A����1�H���H�����L�����H��A�GA�t$H�D$ PjL�L$(1�E��L��1�1��H�� H�|$A�oAH��t6�oH�GH�C�G�����{�����G�C�CH�D$(dH3%(��H��8[]A\A]A^A_��H� ۔1�H�5�H�8��K�fDH��A�GAjH�D$ Pj�?���<t$E1�����@H��訵
H�|$�G�h���L�?����{#�Y����1?�����H��E1�A�H�
�����@��H��E1�A�H�
g�����@��H��A�A�H�
<�������H��A�A�H�
#�������H��E1�A�H�

��d���@��H��E1�A�H�
���D���@��ATA��H��UH��SH��0dH�%(H�D$(1�H�L$��H��H���v�
�S0��ukH�{���Gu/�fD�[��P0��uHH�x���G��<t�<���U1���u*DH�}�=f.�H��DH�p�U��t�1���uH�EH�t$H��PpH�t$H��H��p3[H�L$A�覆1�H�T$ D��H�5�)�J���t3H�D$ H�8�G<��<tCH�۔1�H�5�H�8�IH�D$(dH3%(�#H��0[]A\�H�7�L���H�?t�H�kH�����H�L$ �C0H�t$H�%�����C0H�SH�9������H9�t2�K0H�߃B��뉐H�{��H�T$H�D$H�D$ �C0H�S�
�����H�|$���H9�t�H�D$ H�8�G<����H�GH�� ٔH�kt
H���ٔ�I�����H��I����H�D$ I�T$H�t$H�SH�8�C0�B����<����<� ���H�G�PpH���=�����;��ff.��AVAUATU��SH��H�� dH�%(H�D$1��
��P0��t�MD<������P0��u0H�x���Gu�<��<�tH�G�PpI���@L�`H���������C<tow]�P����A<uU�L,+L�t$L��L��L���5�����4H�D$H�L$dH3%(�tH�� []A\A]A^�fD<��L�+�H�3�C�>�PI��@��-u�FL�V�HЀ�	w)��L�D�A�8u��v<0tL��L)�H����L�l$L��L���P�����[������H�H�5ju�1��Ⱦ
H�`�H�� �1����A�|$AH�5ˀ�����1�葾
H�`�H�� ����<t<E1����@H�5�~�1��]�
����v#H�H�5Q~�p���@L�'�\������E1��L��H���A�L��H�D$�o
H�RH�PH�T$�-qL��L��L����H�D$�N���D��VH���H�3H�D$�oH�RI��H�P�C��P�Ȁ�-���x�@��	wx��L�D>�A�8uk<0u��wbL��L)�H��V��M�J��0Hc�M9��"A�BD�P�A��	w1���0H�<�I��H�H�<xM9���A�D�P�A��	v��H�L$H��E1�A�jL���tjXZH�3�CD��PI��D��A��-���HЀ�	w}��L�L�A�9up<0u��wgL��L)�H��[��I�z��0Hc�I9��~A�BD�P�A��	w6fD��0H��H��H�H�HI9���D�P�A��	v�f�L��L��襄�����M�J��0Hc�M9���A�BD�P�A��	�������0H��I��H�H�HM9�t:A�D�P�A��	v�����L�V�F���L�V�F�2���@��-t'H�������L�l$H��L��L���>����@��-u�H��H�������H���Ѐ�-tSH���c���H��H�T$E1��A�L���n�^���A��-t9H����L��H��L���Ӈ�����-u�H��H������H���A��-u�H��H�������H����z6��f.�AUATUS��H��8H�t$H�T$dH�%(H�D$(1�H���H����H��H�D$H�}8�H�\$�{�=�CH�|$L�d$ ��
H�|$H��H�U8jM��A�	H��SH�
Qsj�XH�� H�|$��H�|$ ��H�} ����H�T$ H�E �@H�E �@H�E �oD�h�XH�RH�PH�} �v蹫
L���A�H�E D�hH�E �XH�E fDH�L$(dH3%(�H��8[]A\A]�f�H�t$��H�ǃ��.���H��H���w��xu��xwg�@H�E�DH�`�H�@ ����H�D$�o�SH���@�P�@�������H����
H�\$���f����@�@H�U�oH�RH��H�PH�� ��w�@H�U�jH�E�M���@H��H�D$胪
H�D$���'4�����ATUH��SH��H�5r�H��dH�%(H�D$1�H���/A���t:H�$H��1�1��j���D�c�k�oH�@H��H�CH�� ��w'D�c�kH�D$dH3%(uH��[]A\��H���ة
���3�������H��H������f.���AUA��ATUH��SH��H��蔿I�����@0t�H��H��A�T$P��t#I�D$H��D��H��H��[]A\A]��f�H��D��H��H�޿[]A\A]�s�����ATUH��SH����I�����@0t�H��H��A�T$P��tI�D$8H��H��[]A\��H��H�ߺ[]A\���@ATU��H��SH�� H�t$H�T$H�L$课��H�l$H��tsH�x@tlH�����}���EH�|$L�d$�&�
H�|$H��H�S@ATE1�A�	H��UH�
oj�|H�� H�|$���H�� []A\�DH��tG�}�a�EH�2{Hc�H�>��@H�{�W������<��H�ËC0�t�H�{�A�|H�D$H�T$E1�1�A���@�iH�� []A\�H�{�W��������H�ËC0�t�H�{�A�H�T$�zH�2u
H�4$�H,4$H�T$A�E1���BH�T$�hH�� []A\�f�H�{�W������<�H�ËC0�t�����DH�E�8u3�f.�H�{�W������诼H�ËC0�t�H�{�A�DH�D$�@H�D$H�0�H��QI��<-u�NL�^D�A�A��	wA��N�L�A�9uq��v��0tgM��M)�I��[D��M�CA��0Mc�M9��=A�KD�Y�A��	w4@��0O��I��Hc�N�QM9���A�D�Y�A��	v��H�L$H��E1�A�j�waXZ���H�5t�1��ݳ
H�� []A\�@��VH�D$�oE�UH���@�P�@�����H���c�
H�l$����f�H�5�u�1��m�
H�� []A\�@H�۔1�H�5�uH�8�(;�������H��H�D$H���oH�@MH�E�]���f����H�?�a��������H�?������t��tD��fD����H�?�����t����>D��H�G�PpH�������t����
D��H�G�PpH���u�����t���t��D��f���t�����C��H�G�PpH���u���<-t-M���&���H�T$E1��L��A��[e���<-u�L��H�������I�����C���vC���{C�����SH�5ǾH��H�� dH�%(H�D$1�H�L$H�T$�~:���tH�L$H�T$H��1����H�D$dH3%(uH�� [��
-��f.���H��H��H����i���f���AUI��ATUH��SH��H����I�����@0t�H��H��A�T$P��t#I�D$ H��L��H��H��[]A\A]��f�H��L��H��H�޿[]A\A]���AUA��H��ATA��USH��8H�t$H�T$dH�%(H�D$(1��~�H�l$H��E����H�xH���}���EH�|$L�d$ ��
H�|$H��H�SHjM��A�H��UH�
dij�KH�� H�|$��H�|$ H���"�:����rH�|$ �D$�L���j��D$���E<���<��H�m�C0��E������t)�D���肷H�Ë@0���H�{�W�uҀ�������H�G�PpH��fDH�T$ H���|���tQ�A��tHH�D$ H�8�V��9@�P���w<�J����H,m�C���DH�58o�1��
�
1�H�L$(dH3%(�:H��8[]A\A]�@�EH�mD�h�C0��E���)��t$����'肶H�Ë@0���H�{�W�uҀ��	����H�G�PpH��fD�MI��ʀ�-u�UL�M�B�<	�D��L�D�A�8uq��0uA��wfL��L)�H��Z��I�A��0Hc�L9��!A�QD�J�A��	w5D��0H�4�H��Hc�H�4rI9����D�J�A��	v��H�L$ D��H��� v����Y������f�L����D�������t+�'����7�R�H�Ë@0��H�{�W�uҀ�����H�G�PpH��fDD�EI��D��A��-u�UL�M�B�<	�|D��H�D��8uo��0uA��wdH��L)�H��X��I�I��0Hc�H9��A�QD�J�A��	w3��0H�4�H��Hc�H�4rH9����D�J�A��	v��D��H���%w�����H�D$�oE�UH���@�P�@������H���#�
H�l$����f���t+���������H�Ë@0���H�{�W�uҀ�������H�G�PpH��fDH���y����H�{�W����H�{�G������t1��4���@H�?�(������t1�����@H�?�����H�{�'����H�{�w������t1�����H�?���@��t1��L���H�?�D�����-t1H���F���H�T$ �w�G���A��-t/H���X���������-u�H��H������H����A��-�����H��H���%���H������8&�����UH��SH��H�5��H��dH�%(H�D$1�H���A3���t�CH�$1�1�H�����������H�H�D$dH3%(uH��[]��%�������H��H����J���f.���AUA��ATUH��SH��H���ԱI�����@0t�H��H��A�T$P��t#I�D$PH��D��H��H��[]A\A]��f�H��D��H��H�޿[]A\A]������S�W0H�����}H����Gu)�@�;��P0��u`H�x���Gt`<t�<umH�H�@ H��tH�S(H9�u�!�H9�tH�@ H��u�H���j�������[�1�[�H��f�H�@�f.�<t�<��:��H�G�Pp��~:��fDU��H��SH��(H�t$H�T$膰��H�l$H��tbH�xPt[�}���EH�|$��
H�|$H��H�SPjE1�A�H��UH�
naj�aH�� H�|$賾H��([]�@�E<��v"<t&H�5Nh�1��#�
H��([]�@�P���w�H�m<�T�S0���wH�{���Gu-�諯�P0���TH�x���G��<t�<�H�?�A�1�1�A�H���b����DH������H��([]�D�S0����H�{���Gu1�L@���P0����H�x���G� <t�<���%Af.���H�D$�oE�UH���@�P�@���6���H��蓘
H�l$�$���f�H�l$�H,l$����H�5�h�1�腦
H��([]�H��H�x����H��@H�x�Au�H�D$�pL�H�`�H�H9����VA�1M��@��@��-u	A�IM�A�A�<	wy��M�T�A�:ul��v��0tbL��L)�H��V��0I�@Hc�I9��!E�@E�X�A��	w4@A��0H��H��Mc�I�HI9���D�E�X�A��	v�fDE1�1�L���`�������H�D$H�5\�H�1��o�
���f.�L���h���������fDH�?����H�D$H�5<e�H�1��%�
���<�l���<��6��H�G�PpH���X����<t�<���H�G�PpH�����@��-t#H���6���A�1�1���_�/���@��-u�H��H������H�����W6��D��SH�5{�H��H��dH�%(H�D$1�H���5-���tH�$H��1����H�D$dH3%(uH��[��������H��H����\���ff.����AUATUH��SH��H���׫�@0u!I����I�D$XH��H��H��[]A\A]��I����I��H��H�ߺA�T$P��u�H��H�޿���H��L��[]A\A]����ATUS�W0H������H��G����<t&�DH�x���G��<�|���P0��tԋS0L�`��tH������Ń����H�k(L��H���sH�C�xt!H��L��1��Tt��@��݉�[]A\�@H��[]A\���@�S0E1�<u�L�'댐<tF<u7H�G�Pp�S0I���q���fDH���_���H��f�1�1��F	떋S0E1��A����S0뫐��ATU��H��SH��dH�%(H�D$1����P0H�����H�x���Gu,�#���P0��upH�x���G��<t�<��1�H��H�5�����*���tH��e�1�1���E	H�D$dH3%(��H��[]A\�L�`1�H��H�5:����I*���t�M��t�H�,$H��xFH������@H�������u,H�$H�P�H�$H���H�s(L���r���v���fDH�(۔H��H��c1�H�81���)�N���fDL�'�d���<t�<����H�G�PpI���I����`����ATUH��S蠨�P0H���urH�x���Gu.��D�s��P0��uHH�x���G��<t�<��1�H�od�1��cD	[�����H�E]A\ÐH�xH��t�H�C�xt��o[H�H�E1�]A\�L�c(H�EH���d��H�{(u�H�EH�{(tH���T�����t�L�c(1�[]A\�DH�?�<t�<�T���H�G�PpH���q���ff.�f���SH��H��H��dH�%(H�D$1�H�����H�$�CH�H�D$dH3%(uH��[�������SH���#��P0H���uUH�x���Gu%�c��P0��u0H�x���Gt@<t�<t0H�c�1�1�[��B	f�H�@H��t�H��[�>���fDH���<t�<u�H�G�Pp��ff.�@��ATUH��SH�_(�S0���H�{�G����<t"�DH�x���G��<uh�#��P0��t؋S0L�`��u9H����M��tS�C3tH���~�����H��[]A\�i���f�[H��]A\��@�S0<t1��u�H���)�H��`[�]1�1�A\�A	�S0DL�'�o���<t�<u0H�G�Pp�S0I���U���fDH��`��H���3����S0���AWAVI��AUI��ATI��UH��SH��H�_(�S0���OH�{�G����<t�f�H�x���G��<up�Ӥ�P0��t؋S0L�x����M��tW��tH���0�����H��L�K(L��L��[H��L��]A�A\A]A^A_�~mfD�S0<tY��u)H�B_�1�1��t@	H���[]A\A]A^A_�H��L��L��H��[L��]A\A]A^A_��S0fDL�?�?���<t�<u@H�G�Pp�S0I���%���fDH��_�1�1��?	���fDH�����S0�O�����ATUH��SH�_(�S0���H�{�G����<t"�DH�x���G��<uh�S��P0��t؋S0L�`��uyM��tSH�{(t��tH����Ń����H�s(L��1��l��@��݉�[]A\�@�S0<t9��u!1������H��^1���>	��[]A\�[H��]A\��S0�L�'�g����<t�<u:H�G�Pp�S0I���E���fDH���3���H��^�1�1��>	�c����S0�m���fD��ATH��UH��SH��dH�%(H�D$1��)��P0H���ukH�x���Gu/�fD��P0��u@H�x���G��<t�<��H��]�1�1���=	�wf�L�`M��t�C3tH���)�����H�S(H��L���Ak���t:H�$D�e�]H��oEH�@H��H�EH�� ��vH���I�
D�e�]H�D$dH3%(uYH��[]A\�f�L�'�l����<t�<�4���H�G�PpI���I���DH�q]�1�1��=	����@��ATH��UH��S轠�P0H���ugH�x���Gu3��f.�苠�P0��u8H�x���G��<t�<td[H��\]�1�1�A\�{<	L�`M��t�H�{(t�C3t
H�������t-�EH�s(L���i������H�E[]A\�L�'�H�y\�1�1��<	�EH�E��D<t�<�`���H�G�PpI���q���D��ATH��UH��SH��dH�%(H�D$1�艟�P0H���usH�x���Gu/��fD�[��P0��uHH�x���G��<t�<��H�Y[�1�1��K;	�EH�E�SDL�`M��t�C3t
H�������ttH�S(H��L���h�E���t�H�$H��@��<����H�EH�D$dH3%(u>H��[]A\ÐL�'�<t�<�\���H�G�PpI���y���DH��Z�C���������AVH��AUATUH��SH��0H�t$dH�%(H�D$(1��0��P0H���ujH�x���Gu.��D���P0��u@H�x���G��<t�<��H�Z�1�1���9	��fDL�`M��t�C3tH���1�����xH�S(H�t$L���Gg�����H�D$H��x���L�d$��1�L��H�D$ H���@�f�EH�D$H�EH�L�0H���uA��H���L�hL���B��H��L��E1�UH���A��L��AVH��j��H�� H�|$ �p�H�D$(dH3%(��H��0[]A\A]A^��H���`�
H��H�D$H�8�P�
H��H���ES
���!���H�T$H�D$H��p�H�oH�RH�PH�D$@�p�H�y���f�L�'����<t�<�\���H�G�PpI���q���DH��X�1�1��;8	�&���������AUATI��UH��SH�����P0H���uiH�x���Gu-��@軛�P0��u@H�x���G��<t�<t|H��H��W1�1�[�]A\A]�7	DL�hM��t�H�S�ztM1�L��H���{��H�{(tH��[]A\A]�f�I�E(H�C(H��[]A\A]�DL�/�H��踯
H��W�1�H�HH��1�[]A\A]�7	D<t�<�@���H�G�PpI���Y���D��SH�5˂H��H��dH�%(H�D$1�H������tH�4$H�����H�D$dH3%(uH��[����f���ATUH��SH�� dH�%(H�D$1��<��P0H���unH�x���Gu2�	f����P0��u@H�x���G��<t�<��H�	V�1�1��5	�Tf�L�`M��t�C3tH���9������H�L$H�T$A�L��H�t$L�K(�b��t*��tEH�D$dH3%(��H�� []A\���D$�E���EH�D$H�E���H�D$�EH�E묐L�'�\����<t�<�$���H�G�PpI���9���DH�qU�1�1��5	�a���������H���d���@��AUH�
�NEH�l��ATH�5QUSH��I�ĘڔL���6��H� �I�<$�H�1���
I�<$�1�I��(�I�U�y�
�$�H�� ٔH�
6KEH�����oH�5�P�oHK�oP S �oX0[0�o`@c@�ohPkP�op`s`�oxp{p�o�����o�����o��H����H�CH����H�C(H�_��H�C0H���H�ChH���H�C`H���M��H���H�ٹ��H�CpH����H�CH�3��H�C H��ٔH�!��H�C8H�V�H�CPH��H�H�H�CX�5��H�0�H�}�H�1��5�
I�UH�}1���!�
H�hؔH�}�H�1���
H��ٔ�oL�eIE�oc�ok H�
���H���H�uI��kM�os0`�o{@�oCPh �oK`�oSpH���H��N�o���o��p0�o��H���ٔL��@x@@PH��H`Pp�������)6��H�XؔH�;�H�1��0�
H�I�<$�H�øؔL��@1�H���
H�H�}1����
I�<$��
H�5JN�%I�<$��H�5>N�%H�}��
H�5N��$H�}��H�5
N��$H��1�[]A\A]�@��H�G �xh�������ff.���H��H�>�@��H�G Hc�tH�������FH�����ff.���SH��H����H�x`t�CHc�tH�[�f��CH�[���SH��H��蠔�C�xh����H�[�ff.�f���SH��H���p�HcP0�p@H�x8��t9�|�s���CH�[�@�BH�|)Ɖs����CH�[�ff.�f���US��H��H��dH�%(H�D$1���H��H��ڔH�H�$H��ڔH�0�4	1�H���H�5Q���uH�$H�EP1�1��4	H�D$dH3%(uH��[]��C����US��H��H��dH�%(H�D$1��l��H��H��ڔH�H�$H��ڔH�0�4	1�H���H�5uP�$��uH�$H�EX1�1���3	H�D$dH3%(uH��[]������SH��H�����CH���H�[���S��H���ђ��H�5��[H�PH1��ff.����SH��H��蠒�CH�@HH�[���US��H��H��dH�%(H�D$1��l�H��H�5<���H��1��F���tH�$H��x(H���H�D$dH3%(u-H��[]�f.�H�۔H��S1�H�81�������ff.�@��SH��H�����CH���H�[���UH��H��SH��軑H�XhH�����H�߉E���B��EH�EH��[]���UH��S��H���|���u�PD��t?��t��t�EH�������[]�fD�p@H�x8�u����EH�EH��1�[]�H�XhH���T�H�߉E�����EH�EH��1�[]�fDUH��SH��H���GDH����1�H��C0��
�s0H�C`��t
Hcƀ|�/tNH���V�H�C(ǃtH�{`H��tH�sh趑
H��tH��[]�f.��ChH��[]�D��H��s0��H�C(�ff.����ATI��U���SH�� H���ڔdH�%(H�D$1�H�3��0	1�H�L$��H�T$H�5o�����tH�D$��tdL����H�t$H��H������H��ڔH�;H�0�zF
H�CH��������x1�1��{0	H�D$dH3%(u)H�� []A\�f�1�1��W0	H�;1�1�H�QQ������ff.�f���SH���S�H�x`H��ǀtH��t%1�1��y
H�{`H��tH�sh�B�
H��t[��Ch[�f���SH�_ ǃtH�{`H��t$1�1��[y
H�{`H��tH�sh�
H��t[�f��Ch[�f.����oATD�fUH�A�nSH��H��H�FH�� ��vH���x
D�c�k[]A\�ff.���SH���c�H�x`H��tH��t0H�ph�g�
H��t"H�{8H��t
�$�H�C8[�f.��Ch��f.���SH�_ H�{`��tH��t'H�sh��
H��tH�{8H��t
���H�C8[Ð�Ch��f.���UH��SH��H��諍H�h(H�����C�ƅ�xH���.��CH�H��[]�H�5�X�1�蝅
�s�����ATA��H��USH��H��0dH�%(H�D$(1��6�H�L$H�T$D��H��H�5Ǹ1�H�D$�D$�
���tF�E0Hcu@H�}8��uSH�|$H�t$ HcL$H�T$L�L$ L�D$���H�D$ �C�CH�D$H�H�D$(dH3%(u,H��0[]A\�9�}�HcЃ�)�H�|Hc�H�|$H�t$ ��+��ff.���ATA��H��UH��SH��0dH�%(H�D$(1��F�H�L$H�T$D��H��H�5׷1�H�D$�D$�
���t@H��hH���6�HcL$H�T$H��H��L�L$ L�D$��H�D$ �E�EH�D$H�EH�D$(dH3%(u	H��0[]A\��d���@��ATUH��S��H��H�� dH�%(H�D$1�臋H��H�T$��I��L�L$L�D$1�H�5A��R��u8��tQ��u�|$u]H�D$��@�"�,A��$�A��$�H�D$dH3%(utH�� []A\�D�"�<$u5H�T$��H�(H�1��
'	�EH�E��H�H�1�1���&	�EH�E�|����M���ff.�f���UH��SH��H��dH�%(H�D$1��k�H��hH��tGL�HhH��A�/1�H���1��}	�C�CH�$H�H�D$dH3%(u.H��[]�DH�hhH���<�H��C�����CH���������UH��SH����u?�(��H��H���ʉH���H�+H�kH�C H�؃EH�SH��[]�fDH�5�/�1�轁
�ff.���UH��SH����u?�(�%�H��H���Z�H�€�H�+H�C H�؃EH�SH�CH��[]�f�H�5I/�1��M�
�ff.�SH��H���H��t���Hǃ�H���tH����j�Hǃ�[�ff.�f���ATA��H��USH��H�� dH�%(H�D$1�薈H�L$H�T$D��H��H�5�S1�H�D$�_	���t#H���R����C�T$H�}`H�t$�r
H�H�H�D$dH3%(u	H�� []A\�����f���SH��H�蟖H��藖H��[���ff.���SH�H��t	H��h�H���`�H��[�����SH�G H��H��t
H�H��t��H���JH�{(H��t��H�{8H��t�q��CD��tA��u0H�{`H��t�G\��t\��Z�
H�{xH��t�<�H���4���H��[�+�H�{`H��t
��%�
H��hH��t���H��[����
�ff.��ATI��UH����SH��dH�%(H�D$1���H�xH��H�H��HǀxH��1�H)�������H�H��ڔH�H�CPH��ڔH�H�CXM��tI�$H��H���'IH�{H��H�uxH��p3[A��*CH��P	]1�H��H�w����H���FH�t$dH34%(��u	H��[]A\����ff.���1�����D��SH��H�����CH�x`�cs
������H�[�fD��SH��H��谅�@H�CtH����t'H�[�f�H�x`�s
������H�[�f.�1�H�����H���ff.�AUA�ATU��SH��H��(dH�%(H�D$1�H���H�D$�$H�����H�{`�r
A��XH���H����H�{`H�L$1�1��h
H��H�����CHtH�5>�H�����H�D$�DH���H�t$�x��H���H���L��H�T$dH3%(D����H��([]A\A]�fDH��1Ҿ���H���H�{`H�L$H��H����g
H��txH�D$�DH���K���H�=�J�Y�Hǃ�H����k���f�E1�H���A������@H��H�T$��#Hct$H���$���f�H�����fDA�����������H��ڔH�K8H��@1�H�81���������f.���UH��SH��H���K�1�H��H��������t)H���H����s����CH�H��[]�D�CH�H��[]�ff.���UH��SH��H��dH�%(H�D$1��˂H��H��谝
���H�t$H�ߺ�D$�D$����D$�D$�.�
H�t$�H����
H�D$dH3%(uH��[]�����AWH�ǰAVA��AUATI��USH��H��L�D$dH�%(H��$�1�I��H�|$�D�l1�Ic���H�|$�H��H�D$H�EtH�D$�H�ED��H��6�
M�t$L�����D$(���
L�t$ H�t$@L�t$H�`�H�|$`D��$�H��8L�d$H�D$4H�D$hH�D$ H�D$`HHDŽ$�H�D$pL��$�H��$�Ƅ$�H�D$x�D$@H�D$PH�D$X舡D�{D�kA��H�D$�oH�@H��H�CH�� ��vH����j
L���|�D�{H��D�k���D��H��$�dH3%(u.H�ĸ[]A\A]A^A_�@H�5)L�1���x
�����C���ATI��U��H��SH��dH�%(H�D$1��g�H��H�5�=H��H�`�H��8��@H�4$E1�L���H������H�D$dH3%(u	H��[]A\�����ATI��U��H��SH�� dH�%(H�D$1����H�D$H�����@�@H���H�D$�@t{H���H�H�����H�L$�H���H�`�H�5=H��8�@L�D$L���H�t$H�����H�|$��H�D$dH3%(uH�� []A\�H�����f.���ATI��U��H��SH��dH�%(H�D$1��~H��H������H���H��H�`��H�5o<H��8�R?H�4$E1�L���H���N���H�D$dH3%(u	H��[]A\��@���ATI��U��H��SH��dH�%(H�D$1��g~H��H�5<H��H�`�H��8��>H�4$E1�L���H������H�D$dH3%(u	H��[]A\�����SH��H���~�C1�H�x`��e
������H�[�@��SH��H����}H�x`�'h
H���t�CH�[���CH�[���UH��SH��H��dH�%(H�D$1��{}H��H���`�H�}`�g_
���u"�CH�H�D$dH3%(u<H��[]�
uH���H�|$�C��D$�D$���CH����fD��SH��H����|�CH�x`�k
H�[�ff.���AUA��H��ATUSH��H��(dH�%(H�D$1�L�d$�|H�T$L��D��H��L�D$1�H�D$H�5���e�
���tWHct$A��~ H9t$HNt$�H��H��HHЉT$�օ�tIH����H�D$�zuG�CH�}`Hc�H���\d
H�H�D$dH3%(ueH��([]A\A]�fD�CH���H����L��H��H�D$��H�}`HcT$H�t$�c
H�|$H����Hc��CH�+��O�ff.�@��ATA��H��USH��H��dH�%(H�D$1��f{H��H�56�D��H��1��?�
���t2H�}`1�1Ҿ
�Hh
��u<�CH�4$H�}`�#i
������H�H�D$dH3%(u;H��[]A\��H��ڔH�M8H��81�H�81����CH���x����AWAVAUATUSH��D�7dH�%(H�D$1��v>H��H�8H����H�,$A�ŋCDI��I����������u"H�H�X<�1�H�H1��v	H�,$f�H�CPD��E��H��L��L��H�EPH�CXH�EXH�CHH�EHH�CH�EH�C H�E ��=H�4$H�F H��tH�@H��tH���H�L$dH3%(D��L��u`H��[]A\A]A^A_�@�s0�u0H�{(�Q�H�E(H�,$�s@�u@H�{8�:�H�E8H�,$�M���DH�s(H���|�H�,$�3�����ff.���SH��H���PyH��hH��t��p�s����CH�[�D�C1�H�=�?���CH�[�f.���UH��S���H��(dH�%(H�D$1�H��ڔH�D$H�0�	1�H�L$��H�T$L�D$H�5(��
���tAH���xH�t$H��H����H��ڔH�;H�0�&/
��������xH�D$H�CH1�1��&	H�D$dH3%(uH��([]����f.���USH��H�$H��dH�%(H��$1�H��H���w�H��H��ڔH�0�	�}Dt?H�}8H��u?�CH�1�1��	H��$dH3%(��H��[]ÐH�}8H��tgH��H���H��t�H��H����������!�%����t��H������D�H�VHD��H��H)�s����CH��k���fD�}h�P���H�M(H�}8L�Mh1�A�/H���1��Dj	�E@�������ATU��SH�pH���GD���0aH�{p1ɾ����A��A�H���1���NI��1�L�Ch��H�sx��H�{81Ƀ��΀
�s@H�C`����H����H�CpH��tH�8�M�s@H�{8Hcƀ|�/u���s@������H�{xH�C8���ƃ�H�;H���H�CxH�C`�H�5�3H��0Hc@pǃ�H����,"f����w61�[]A\�I�Ġ�M�D$0M��� ����Vw
I��I�D$0����f�H�`�H���tHH�C8�����H�Cx�H�`�H���u�H�K8H��ڔH�*31�H�81��i��H�
,<��ff.���ATU��H��SH��dH�%(H�D$1��u��D$H��H��ڔH�0��	H�K@H�S8��H�?�L���ǃ�H�CxH�CpL�CxPH�5�2H�D$P1��
ZY���tA�t$H������Ņ�u.L�c8�/L����1�H��tL)�ʼnƉk0L����H�C(1�1��:	H�D$dH3%(u	H��[]A\���ff.����U��H��SH��XdH�%(H�D$H1�H�D$ �t�H��H��ڔH�0��	1�H�T$��H�5{����
���tlH�L$H��������H��1�C@
H�C8H�˔H�Cp1�H��H�Cxǃ������u�C01�H�=[:��H�C(1�1��=	H�D$HdH3%(uLH��X[]�fDH�91�C@H�C8�@H�l$H�)1�01�H���N	H�k8�C@�W�����ff.��AWA��AVA��AUI��ATUSH��H���@L���M��u4�CHt.�H���q��Ņ�t�H����[]A\A]A^A_�f.�H���D��E��E���)�H���I��tH���L�D$�L�D$�L�D$��H�{`L��D��I��H���H��D��L�D$�oH�@I�AA�_�M���[���A�E��t<vL���1[
A�EH���E�uE�e�oAMH�@H��I�EH�� ��wE�uE�e����f�L���[
E�uE�e��ff.���AVI��AUATU��H��SH�� dH�%(H�D$1��sqH��H�T$��H��L�L$L�D$D���D���H�5�1��.�
��u<��t��u�|$uqH�D$D�(�<$u:H�D$D� A��A��L��H�����H�D$dH3%(uWH�� []A\A]A^ÐH�6.�1�1��	A�FI��DH��-�1���	A�FI���B�f�ATUSH��H�� H�|$dH�%(H�D$1�H�D$�FHuH��ڔH���H�H9B�vH�{`��]
�Ņ��{�CH�!H�|$L�d$�ʄ
H�|$H��H���jM��A�H��jH�
.j��H�� H�|$�$H�����H���H����H�D$�xtc��i�H�T$�@�@H����oH�RH��H�PH�� ��vH���oY
H����@H����@�&@�pH�8���H���H�D$Hc@H���L���}H�L$dH3%(��ucH�� []A\�������1�H��������@H�����������D�H���s������������\�ff.��UH��SH��H�����H�SH��u3�]@1�H�������tFH���W�H��H������H�SH��t,��u(H���u�H���H��t��A<t!<t
��t�1�H��[]ËQ1������@��H�9t��5��H���tH�8�5�������o���f�H�H�@ H�@H��xu��@���R����ff.�@��UH��H��SH���mH��H�����CHuH���H��[]�H��H������H���H��[]�ff.���ATH��I��USH���:mH���H��H��tk�EHtEH���H��t9�oD�c�kH�@H��H�CH�� ��vH����V
D�c�k[]A\�f�H����s�q��CH�[]A\�DH���H��u�L��H���	���H���H���n���H���H���p����CH�[]A\�f�UH��1�SH��H��H�~`1���V
���t"H���:�Hǃ��CHu-H��[]�f�H��ڔH�K81�H�L*H�81��"��CHt�H��H��H��[]�[���ff.���SH��H����kH��[H���d���@��AUI��ATA��H��UH��SH��dH�%(H�D$1��kH��H�5q�D��H��1��z�
���t:L�$M��xLH��H��������H��H��������t
H�$H9��|�H�D$dH3%(u8H��[]A\A]�H��ڔH�K8H�F-1�H�81��"�A�EI�E����ff.���AUH��ATUSH����jH�x`I��ǀtH��t
1�1��+U
I�}`M�ehH�`�H�-{DH��tQL���k
H��tD�L��H�������t%�L��H�������tH��[]A\A]�@I�}`H��u�A�Eh����AUH��ATUH�-DSH�ٻH���j��tI��L�hhfDI�|$`H��t^L���k
H��tQ�L��H�������tӹL��H�������t�I�|$8H��t�I�D$8H��[]A\A]�f�A�D$h����AVAUATI��USL�w AdžtI�~`H��t
1�1���S
I�~`M�nhH��H�- CH��tnDL���Xj
H��t\�L��H�������t=�L��H�������t'I�|$tI�|$�wI�D$[]A\A]A^�I�~`H��u�A�Fh���AVAUATI��UH�-�BSL�o H�c�A��tM�uhI�}`H��twL���i
H��tj�L��H�������tԹL��H�������t�I�}8H��t
�@�I�E8I�|$tI�|$��vI�D$[]A\A]A^�@A�Eh�f���SH��H���h�C�H�=��H��hH����€���t�H��H�=�A���1Ʉ���H�[�fD��UH��H��SH���g�H��H��ڔH�0�T	H�{8H��t#�s@H���k�H��1�1�[]�,	@�CD��t0��t��u̾1�H�%1��b	�s@H�{8�f�H�K(H�{81�L�KhA�/H���1��>Z	H�{8�ƉC@�x�����UH��H��SH����f�H��H��ڔH�0�	H�{8H��t#�s@H��1���H��1�1�[]�o	��CD��t0��t��u̾1�H��$1��	�s@H�{8�f�H�K(H�{81�L�KhA�/H���1��~Y	H�{8�ƉC@�x�����UH��H��SH���f�H��H��ڔH�0��	H�{8H��t#�s@H�����H��1�1�[]�	@�CD��t0��t��u̾1�H��#1���	�s@H�{8�f�H�K(H�{81�L�KhA�/H��1��X	H�{8�ƉC@�x�����UH��H��SH���[e�H��H��ڔH�0�	H�{8H��t#�s@H���+�H��1�1�[]��	@�CD��t0��t��u̾1�H�?#1��"	�s@H�{8�f�H�K(H�{81�L�KhA�/H�T�1��W	H�{8�ƉC@�x�����UH��H��SH���d�H��H��ڔH�0�T	H�{8H��t#�s@H���k�H��1�1�[]�,	@�CD��t0��t��u̾1�H�"1��b	�s@H�{8�f�H�K(H�{81�L�KhA�/H���1��>W	H�{8�ƉC@�x�����UH��H��SH����c�H��H��ڔH�0�	H�{8H��t#�s@H����H��1�1�[]�l	@�CD��t0��t��u̾1�H��!1���s@H�{8�f�H�K(H�{81�L�KhA�/H���1��~V	H�{8�ƉC@�x�����UH��H��SH���c�H��H��ڔH�0��	H�{8H��t#�s@H�����H��1�1�[]�	@�CD��t0��t��u̾1�H�� 1����s@H�{8�f�H�K(H�{81�L�KhA�/H��1��U	H�{8�ƉC@�x�����UH��H��SH���[b�H��H��ڔH�0�	H�{8H��t#�s@H���+�H��1�1�[]��	@�CD��t0��t��u̾1�H�? 1��"��s@H�{8�f�H�K(H�{81�L�KhA�/H�T�1��T	H�{8�ƉC@�x�����UH��H��SH���a�H��H��ڔH�0�T	H�{8H��t#�s@H��
�k�H��1�1�[]�,	@�CD��t0��t��u̾1�H�1��b��s@H�{8�f�H�K(H�{81�L�KhA�/H���1��>T	H�{8�ƉC@�x�����UH��H��SH����`�H��H��ڔH�0�	H�{8H��t#�s@H����H��1�1�[]�l	@�CD��t0��t��u̾1�H��1���s@H�{8�f�H�K(H�{81�L�KhA�/H���1��~S	H�{8�ƉC@�x�����UH��H��SH���`�H��H��ڔH�0��	H�{8H��t#�s@H��	���H��1�1�[]�	@�CD��t0��t��u̾1�H��1����s@H�{8�f�H�K(H�{81�L�KhA�/H��1��R	H�{8�ƉC@�x�����UH��H��SH���[_�H��H��ڔH�0�	H�{8H��t#�s@H���+�H��1�1�[]��@�CD��t0��t��u̾1�H�?1��"��s@H�{8�f�H�K(H�{81�L�KhA�/H�T�1��Q	H�{8�ƉC@�x�����UH��H��SH���^�H��H��ڔH�0�T�H�{8H��t#�s@H���k�H��1�1�[]�,�@�CD��t0��t��u̾1�H�1��b��s@H�{8�f�H�K(H�{81�L�KhA�/H���1��>Q	H�{8�ƉC@�x�����UH��H��SH����]�H��H��ڔH�0�H�{8H��t#�s@H����H��1�1�[]�l�@�CD��t0��t��u̾1�H��1���s@H�{8�f�H�K(H�{81�L�KhA�/H��1��~P	H�{8�ƉC@�x�����UH��H��SH���]�H��H��ڔH�0��H�{8H��t#�s@H��
���H��1�1�[]�@�CD��t0��t��u̾1�H��1����s@H�{8�f�H�K(H�{81�L�KhA�/H��1��O	H�{8�ƉC@�x�����ATI��UH��SH�_ H�CH%H=t-H�{8tV�C@��A�$�s@H�{8�ж[H�E�]A\�f�H��hH���D���H�ߍP��A�$裶[H�E�]A\�D�CD��t(��t��u�H��1�1����H�K(H�{8L�Kh1�A�/H�4�1���N	�C@�S���fD��UH��H��SH���{[H��H�@H%H=t'H�{8H��tN�s@�u���EH�EH��[]�@H��hH���d���H�߉E���ǵ�EH�EH��[]���CD��t(��t��u�1�H�<�1���H�{8�@H�K(H�{81�L�KhA�/H�T�1��M	H�{8�ƉC@�U�����AUH��ATUH��SH��8H�t$dH�%(H�D$(1��ZH�P8H��H���
�C@�D$H��L�d$H�T$�D$ f�D$$�n
1�L��H��H�����H���L�hL���T���H��H��E1�jH���A��L��H�L$ QL��j�+�H�� H�|$��YH��H��tXH��hL�chH��t	�9��L����L�牅p���T�H��hH�CXH�EXH�CPH�EPH�CHH�EHH�CH�EH�D$(dH3%(��H��8[]A\A]�fD�@D��t`��t	�����H���1�1��n�H�S8����DH��hM��1�1�A�/H����PL	��p�X���DH�K(H���1�1�H�{8L�KhA�/�L	H�S8�C@�c����}��ff.�f���AUATUSH��H�$H��dH�%(H��$1�H��H���XI���ڔ�I��I�u�@�I�|$8H����H��H��������tM�CHcЉ�H����ٲ�CH�1�1��H��$dH3%(��H��[]A\A]�@�[����8�$���I�L$8I�}1�I��H�/1�����CH��A�D$D��t.��t	���O���1�H���1����I�|$8�0���f�I�L$(I�|$81�1�M�L$hA�/H����J	I�|$8A�D$@���������AUATA��H��UH��SH��dH�%(H�D$1��D$�W�xht!L�hh�H�=��H��L�������u0�EH�EH�D$dH3%(�H��[]A\A]�D�H�=�0L�������t�1�H�T$H�5��D����
���t�H�{8H��t*�s@�|$u�CItJH��
�m��|�����CD��tX��t��už1�H��1��j��s@H�{8몐H���#�H���[n�������s@H�{8�f.�H�K(H�{81�M��A�/H�u�1��I	H�{8�ƉC@�J����|��ff.����UH��SH��H���UH�ŋ@D��t ��tD��t?�CH�H��[]�D�}ht�H�}8H��t9�u@�s���CH���D�u@H�}8�s���CH�H��[]�H�M(H�}81�L�MhA�/H���1��VH	H�}8�ƉE@�ff.�AVA���AUA��ATUH��SH��H��@I���ڔL�D$I�4$dH�%(H�D$81��D$��{D�/A����H����H���Tp
L�d$H�t$ H�����A�$H�D$I�T$�@H�{8�H��ڔH���H�H9B�j����s@H�{8�@I�ĉp�@H�D$(辮H�|$E1�H��I�$H�D$(H��H���A�H�
�#�@jPj��H�� H�|$(�fb� �H���7H���o
L�d$H�t$ H�����A�$H�D$I�T$�@H�{8�xH��ڔH���H�H9B����+���@�@H�D$(���s@H�{8H�\$(�@�@�sH�D$0�ͭ�H�=s|H�H�\$0H�D$(�@�C褭H�|$E1�H��H�H�D$0H��H���A�H�
�"�@P�t$8j�H�� H�|$(�KaH�|$0�Aa1�1��x�1�H�L$8dH3%(�VH��@[]A\A]A^�D�{h����I�<$1�H��1��r�1�1��)����CD������t	������H�v�1�1��R����D�CD���D��t	���o���H�>�1�1����U���D�s@H�{8H�l$ �o�H�E8H�l$ �C@�E@�s0H�{(�T�H�E(H�D$ �S0�P0���H�kX����H�kP����H�l$ H�C8H�E8�C@�E@H�{(�s0��H�|$ H�E(�C0LJ��G0H��zH�GxE��t3H���H�Wx1�L�OpL�D$D��H�5��
�����H�|$ �t$�������A���1�1���H�|$�v
�	:
H�|$�G�#���H�K(H�{8L�Kh1�A�/H�<�1���C	�C@����fDH�K(H�{8L�Kh1�A�/H��1��C	�C@�	���1�1��5�H�D$ H�|$H�@xH�@8��m����^����������AUH��ATI��USH��H���PH��H�@H%�H�� ��H��tI�Ao$D�k�kI�D$H��H�CH�� ��vH����9
D�k�kH��[]A\A]�f�H�}8t!H��I��H��1�[1�]1�A\A]���fD�ED��tP��t��u�H��
�1�1����H�}8H��tW�u@�s���CH�H��[]A\A]�f.�H�M(H�}8L�Mh1�A�/H���1��NB	�E@�]���fD�ED��t(��t��u�1�H�,
�1��
�H�}8�z����H�M(H�}81�L�MhA�/H�D�1���A	H�}8�ƉE@�L�����UH��S��H��H���NH��I���1�[�H��]�o���ff.�@��ATI��US��H��H��dH�%(H�D$1��7N�H��H�@XH�$H��ڔH�0���1�H���H�5F��
��t)1�1����H�D$dH3%(u%H��[]A\��H�$M��1�H����������n���ff.���ATI��USH�o H��H�EH%�H�� t/H��uH�t{H��I�$[]A\�fD[]I�<$A\��H�uֿ��H���H�C�oH�RH�PH�}8H��tl�u@�pH�k轧H�EH�C�@���辤I��H�CH���oH�@AI�@H�}8tQ1�1�H��1������C���fD�UD��t\��t��u�1�1�H��
����H�CH�}8�a���D�ED��tX��t��u�H��
�1�1���L�C�H�M(H�}81�L�MhA�/H�а1��z?	H�}8�ƉE@H�C���H�M(A�/H�}81�L�MhH���1��F?	�E@L�C�!���f.���ATH��A��UH��SH���u8H�E8�/H��D�e@���H��t.H)؉‰ƉU0H���L�[H�E(]A\���H���6��@1�1���f.���UH��S���H��(dH�%(H�D$1�H��ڔH�0��1�H�L$��H�T$H�5��#�
���tH���&K�T$H�t$�H��� ���1�1����H�D$dH3%(uH��([]�蛾��ff.���AVAUATI��U��H��SH��0dH�%(H�D$(1��J�H��H�@XH�D$H��ڔH�0�c�1�H�T$��H�5��n�
��t*1�1��A�H�D$(dH3%(�VH��0[]A\A]A^�L�s(H�l$L�d$D�k0M����E����H��ڔ�H�0���H����H����e
H�\$H�t$H������H�D$H�S�@H��ڔH���H�H9B���聡D��L���@�@D�hH�D$ �B�H�T$ E1�H��H�|$H��A�H�H�D$(H���H�
{�@jPj蔙H�� H�|$ ��W1�1��������A�L�5ϕ����fDH�|$�D��L���#���뻐H�kX���貼��f���ATH�
EH����UH�ŨڔH�5NSH���D��JH��ڔH�uL�m
E�oH�
���H�1H��)1�F�oH)
5�F�oP )9�F�oX0)=�F�o`@)%A�F�ohP)-E�F�op`)5I�F�oxp)=M�F�o��)N�F�o��)
O�F�o��)P�FH���H�R�FH�K��H���FH�m���H�.�F���H�0�H�;�H�1��
H�3H�`�ML�7EH�àڔH�
����H�/H��@H����H�;�1�I��XؔI�$詢
H�;���H�5
���
H�;� �H�5��
H�;1ɺH�5��
H�;��H�5���
H�;��
H�5��o�
H�;1ɺH�5��Y�
H�;��H�5��@�
H�;��H�5��'�
H�;��H�5���
H�H�uL�EH���MH�ðڔH�
����H��@H��H���u�I�$H�;1��股
H�hؔH�;�H�1��i�
H�;��
H�5w��
H�;��
H�5l�w�
H�;��
H�5^�^�
H�;��H�5P�E�
H�3H�ǸڔL�EH�
Ϳ��H�5��[1�]A\�f.���SH��H��H��dH�%(H�D$1�H�AH��H�$���H�$�CH�H�D$dH3%(uH��[�����fD��H��8H��dH�%(H�D$(1��0EH��H�D$H��ڔH�H���P(H�D$(dH3%(uH��8�誸��f.���SH��H����D�CH�xP����H�[�ff.����H��8H��dH�%(H�D$(1��DH��H�D$H��ڔH�H���P H�D$(dH3%(uH��8�����f.���ATH��USH���MDH�@PH��t*�oD�c�kH�@H��H�CH�� ��wD�c�k[]A\�DH���.
��fD��ATH��USH����CH�PPH��t0�xLt*�oD�c�kH�BH��H�CH�� ��wD�c�k[]A\��H���-
��ff.���UH��SH��H���{CH�xPH��t�mCH��t	H�@H��u�CH�H��[]�DH�H�hH�����H��C���̝�CH�H��[]�ff.���SH��H���CH�xPH��tg�xLta��BH�@H��t3H�H��t+H�@H��u�MH�@0H��tD�xu��CH�[�1�H����1����1�����CH�[�1���ff.�@��S�H�5�H��dH�%(H�D$1�H���H��H���������H�$H�Ø��L��EH��H�0H��ڔH��H��8H�0��H�XؔH�;�H�1��
H��ؔH�;�H�1���
1�H�\$dH3%(u)H��[�DH��ڔH�H����H����5���D��USH���a�H��ڔE1�1�H��H��H���S�H�3E1�1�H���ڔH��H���5�H�uE1�1�H�� ۔H����H�3E1�1�H��۔H����H�3E1�1�H��۔H�����H�3E1�1�H���ڔH�����H�3E1�1�H��0۔H�����H���ڔE1�1�H��H��H����H�3E1�1�H��(۔H���o�H�3E1�1�H���ڔH���T�H�3E1�1�H��۔H�P�9�H�3E1�1�H��۔H�|��H�3E1�1�H���ڔH�t��H��1�[]�f.���SH����H�{�
H��[����SH��H���?�CH�@`H�[���SH���?H��H�phH�x�H�C`[�f���SH��H���p?�CH�x�#H�H�[�ff.����SH��H���@?�CH�phH�x�������H�[��ATH��USH��H��dH�%(H�D$1��>H��H�PhH�x����t1H�$D�c�kH��oH�@H��H�CH�� ��w*D�c�kH�D$dH3%(uH��[]A\�f.�H���(
���1������SH���s>H��H�phH�x�H�C`[�ff.����AWH��AVAUATUSH��H�t$L��$�dH�%(H��$�1��>f�E1�1�1Ҿ
L��H�D$)D$`H�D$p�X�
H�D$`H���zH�t$hH�^H9\$p���0x:i:H�D$H�\$hH�XH���iH�߅����YH��$�Ƅ$�H���������Hc�H�n�	fDH��H��I��H��H��H��H��H�I)�L�ȃ�0�EH��	w�H�D$`L�nI)�H����H�|$hN�4/L9t$p��H�L��H���ܩ��H�|$`L�t$hH����I�nJ�7H9l$p��H�l$hH�l$8H��L�l$(�;H��L�t$`�4�f�L�|$hH��H���;�]H��H���2����H��L��H���K�����H�t$(L��L����kH�|$`H��tHH�L$hL�yH�L9|$pw�H���H���1�H�L$H�D$p�U�H�L$H�D$`H��c���1ҾOH�D$hA�H�D$pN��H�D$`�2���f�H�D$`H���EH�T$hH�ZH9\$p���m:H�t$0H�|$`f�H�D$L��H�\$h�D$P�D$UH�@�D$TH�D$@H�D$@H�D$0��jL���,�
H�D$`H���vH�\$H�T$hH��S�CH��$�dH3%(��H��[]A\A]A^A_ÐI���H��I���H�T$p1��3�H�|$hH�D$`���@H�|$`H��t��H�D$`H�D$hL��H�D$p�~�
H�D$�@�f����{H��$�Ƅ$�I����������H�nHc��fDH��H��H��I��H�}�I��H��H��H�I)�L�Ѓ�0�E�H��	w�H���G�-����H�D$hI��M���O�N1�1�H�D$pM���B�H�|$hH�D$`���I���I���1�H�D$p��H�D$`L�����f�H���H��H�ƅH�T$p1���H�t$hH�D$`���@I���I����j���1ҾO1��H�D$hH�D$pN蘑H�T$hH�D$`���f��O1�1��H�D$hH�D$pN�[�H�t$hH�D$`�f���@1ҾOH�D$h�H�D$pN�%�H�D$`����H�D$�@���f.�H���H���H��1�H�L$p��H�T$hH�D$`����_���ff.�@��U��H��SH��8dH�%(H�D$(1��|8H�T$H�5����H��1��T�
���tLH�D$f�H�kE1�)D$H�t$1�H��H�@�T$�H�D$�W�
H�shH���H�C`H�D$(dH3%(uH��8[]�觫�����UH���pSH��dH�%(H�D$1�艏H��H�xH��H��H�H��H�@h1�H)���p���H�H���S�H�{H��H�uxH��p3[A��V�
H��XZ1�1�E1�H�{���
H��`
N1�H��H��P	]��2H��@۔H�t$dH34%(u	H����[]��Ҫ��f���H��8f�H��E1�H�t$H�L$H�t$H��A�dH�%(H�D$01�H�D$)D$�H�@�T$�H�D$ j�o�
H�D$�@XZH�D$(dH3%(uH��8��J���f.���US��H��H��dH�%(H�D$1��l6H��H�5����H��1��F�
���tH�4$H���%���H�D$dH3%(uH��[]��٩��f���H��H��(H��dH�%(H�L$1ɋH�@H���D$�$�H�D$�
H�L$dH3%(uH��(��t���@��ATU��H��SH��H��dH�%(H�D$1��5H��H�5����I��1��q�
���t�CH�4$L���L���������H�H�D$dH3%(u	H��[]A\�����AWAVAUATUS��H��H��hdH�%(H�D$X1��5H�L$H�T$��H��H�5g�1�H�D$8�޵
���td�D$���H�D$@L�|$H�D$HL�|$ A�?xt[H�\$@H���NH��ڔ1�D�D$H�L$ H���H+L$H�81�蕵H�D$XdH3%(�^H��h[]A\A]A^A_�f�I�GH�\$@H�D$ A�:u�I�G�L�t$8H�D$ ��I���1�L��H�D$8I�U�AoMH�PHcT$H�D$ L�H��H�D$�wN��tH�D$8�xt8L���pB� ���H��ڔH���1�H�81��δ�4���f�L��H�l$ L�t$(L� �*B�D��;����H�PH�T$ �@��C</�����H��H����������I�UH��L���AoEH�t$H�D$(H�PHcT$L��M����H�t$(�~��H�������u
H�t$(H������L��I���wAH�D$ �M���F�����;����H�PH�T$ �xm����H�PH�T$ �x:��H���L�d$0H�D$ �O�I�UH��L���AoUH�t$H�D$0H�PHcT$L���L��tOH�D$0H�}A�1�H��p3[H�0��
L����@H���-L����L���@�]���辥��L���@�K������SH��ܔH��EH�5k�����H��۔H��EH�5]����H��ܔH�
�EH����H�5G�H������n3H��@۔H�;��o�oHJ�oP R �oX0Z0�o`@b@�ohPjP�op`r`�oxpzp�o�����o�����o����H���H���H��ؔH�1���
H�0�H�;�H�1���
H�8�H�;�H�1���
1�[��AWAVI��AUATUSH��L�/H�OL��I9�r�"fD�x�9�t@I�H��H�BH9�r�I�u�A�V����H���FI�I�F1�H��[]A\A]A^A_Ð�8]u�H9�s�H�-�EH��L)�H��t;Lc�L�%�Ef.�L��L��H���“����uB�|=t.I��I�,$H��uك�tAA�F���x���A�F�k���A�D$H��[]A\A]A^A_�A�F�C���A�E�I���f�H�H�OH9�r$�O��u�GH�ϦFH�GH�PH���H�PH9�v�8[u�x.u�H��S�.H��H����H�H�KH9�s#H�rH9�v�:.u�z]uH��H�[�fD�S��u�CH�S�FH�H�S[�f.�UHc�SH��H���o���H��h��u+���t���=w�j���H�����H��[]����=w��6���H�������ff.��H�LcHLc@L�PI��M��t"1�fD�N��H�� 
(F	H��I9�u�K�D
�H9�t�H��h�H�H��H�%|H	�H��f.�ATL�gUH��SH�L9�sR舠��1�1��%f����HH���4���H�]�S��Tr�L9�tD�H�0B�DFu΅�~���[��]A\�1�f��E��u�E
H�ۤF[H�EH�E��]A\�ff.��H9w |
�f�UH��H�4�SH��H��H��s���H��tH�CH�k H��[]���C��u�CH�c�FH�H�C��f.�AUATUSH��L�o(H)�t6H��H�w H��I��H��h���H�CH�S(H�4�H�<�J��苙��Lc(H��L��[]A\A]�f�H�G(H�O ATI��UH��SH��H9�}H�KL	�H�PH�S(H�,�[]A\�fDH��H��H��?H�H�H�4I����H�C(���AUATLc�USH��H��dH�%(H�D$1�H�G8H�hX�@(t蝞��H�B�D`uZ�C��uL��H���K���J�T%�:t!H�D$dH3%(uwH��[]A\A]�fDH�K8�AT�p�qT����D��M�������D9�t�H�D$L�#H�kH��H�H�D$�]H�CD�l$f�T$�L�#H�k�y�������DAWAVAUATUH��SH��H�G8D�`A�T$�PL�w8�G0McnA9�����Hc�G0I�~H��H��H��I��H�����!���I�FL�u8I�~ H����H������A�|$�1�I�F E���/f�H�‰�H�u8H���H��H�HNI��HF H�H�BH9�u�L�u8I�~��I�~ H����L)�L��1�H�����L�u8Ic�A�D$H��E��AI��H�L��D����A���)����I^Mn L�+�C�C	H�CH�CH�EL�}H�PI9�v>�H�=�H����€������H�=�H����€�����L9�r8�E�$D�$E���5H��F�EH�EH�EH��[]A\A]A^A_���D$��^�d��]�3��-��H�EL�%��F�L9�s��H�H��]�~��-u	I9��M��-�N��[uI9��vfDH���`���H�UA��H�EA����H9�s	�:-��Hc�)�H�BH��H��H��{H�@9S	H��H9�u�H�EL�}�_�����u��u�EH�۟FE1�1�H�EH�E��F���@H���FH�EH�EH��[]A\A]A^A_�f��M��u1ҾLH�����H�EH��H�EH��[]A\A]A^A_��H��萠��I�FL�u8I�~ H������H���s���I�F �W���f.��U��u�1ҾPH���*���H�E�@H��H�EH��SP-�C	-H�EL�}�G���D�P��:����=�z���H��H�EL9�r�E��u�EL�eL��L�e�<-��<]���=H���|����K��H
C	H�EL�}L9��H�PI9�v	�8=��D�uE��u�Ef.�L�eM��L��L�e���D�x]���E��u��E��fDH�xH�<$H�}L9����E��u�EL�eA�$L�e<-��E1�L�$$<]���L�-�EM��t3L�5�EDH�4$L��L�������uC�|=t-I��M�.M��uًu���6����E�*���f.�I�F�H�H��t���H��H�s@0S	�Q���u�M�nA�}u7�@J�|8�L�����H�SH�C�D�L���ވ��M�lA�}tbL�{L���ƈ��H�{I�tH�sH��t,该��H�CH��u��E��u�EL�eL�e�fDH���Н��H�C��f.�H�EL�}L9�s3H�PI9�������8:����x]���H��H�E���fDD�}E�������E����D�pA��]tEA��-t?�Z���H�$�@H��H�UL9�tD�2H�0A��DNu�H+$I���%���D�E��u�EL�eE1�L�eL�$$���fD�E��u�EL�eL�e����DH�JH9�v_�z]tYH�M�B<-�IH��4$�~�4$��A8�vD�mE��u�EL�eL�e9��?�������	���f.������H�MH��SP-�C	-H�EH�HH;E������}H�M�8]�<$��D�$E������L�E8A�P(Ic@��tjA��A����Mc�M��L�3A��D�cE�$t.���H�B�8��tD���T���D9�t��E$6C	f�A��I��A���u�L�E8Ic@D�L$E��tg��y�ZfD��!�
(C	�����t!��H�K�2@��u�	�
C	�����u�L�E8A�P(��t�CH��� B
�k	
L�E8Ic@H����H�;D�K1�1��f�H����D�H�JE!�A����H9�u�uMD�u!1��@H����D���H�HH9�u�4$H�����H��H�}8H��[]A\A]A^A_��f�McpM�hD�c	I��M�M9���M���fDI�� M9�vsE8c	u�L9�t�H��tGM�L�E�K�{E�
��A�8��8�u�1��@��E�
@��A�<��@8�u�H��H9�u�M9�vH��H�}8��H�E8L��L�h�}�����L)�H��H��H��Hc�[]A\A]A^A_��@�x]�4����&���f�H��H�EH��SP]�C	]H�EL�}���DH�HH�MI9��?����P�D$H���w���H��H�U�-���fD���$�v����L$���������A�P(����ATUH��SH��L�g(���H�}H�EHH���N�$�f.�H�H9�|H��H�H�PPH9�H��H�PPH��H9�u�H��H��H��HU(H�4H��H�|����H�EL�$�[]A\�fDAWAVL�5A�AUI��ATA��U��SH��H���CL�{(��ubB��A��~1�A��������~1���@�ǃ����wIc�L�>��DH��F�CH�H�CH��[]A\A]A^A_�@L��L��H��A���^�I���f���fDL�k(H��[]A\A]A^A_�DM)�L��<H��I�W����I�u��H�����H�S(D�{L)�E���w����@H��H�k�I�H�S(D�sL)�E���R���L��H����D�cE���:���1ҾDH����D�[E������H�C(�H��H�p��\�D�SE���������HH��H��[]A\A]A^A_���L��L��<H��L)�H�����H�S(D�KL)�E��uw�@H��L�c�}�H�S(D�CL)�E��uVL��L������{��uD�D1�H���L�s��u.H�C(�L��H�p����K��u��HH����I�WI�uH�߃���SL�{(I�Ņ������A����f�M)�L��$H��I�W�����C������H�S(�(L)�����DL��L��H�߃��7�A��I���;���ff.�AWI��AVAUA��ATL�%[�FUSH��hdH�%(H�D$X1�H�G(�D$H�D$0H�$H�D$TH�D$@H�D$WH�D$8H�D$H�M�7I�WH�-6�H�$fDI9�sbA�<|��D9���I�NI�A�6�F�<X���HcD�H�>��f�E�_E��uA�GM�'M�gL��L�5��FI9�r�M��H;$uE�^E��uA�FH�h�FI�I�F�|$��u:A�v��u2H�t$0I�~H)�H����A�NI�V(��uH+T$8�HL���/�H�D$XdH3%(��H��h[]A\A]A^A_�@H9�s;@�t$�)���A�V�t$H��DPtA���uA�G
M�'M�gfDL��� �M�7I�WE1�I9��MA��A�<���?���{�,I�vH9��H�T$(H�t$ �L$D�D$藍��A�~D�D$H��L$H�t$ H�T$(�Dx��I�7E��tA�G����M�'M�gDL����I�A�Ɖ�I;Ws	�:,�AD��H��L�����M�7I�WI�_(I9��WA�G��uA�G	�H���FM�'M�gI�����f�H9�rE�GE��uA�GM�gH�
�FH�AI��1���L�����M�7I�WE1�I9������DI�_(�W����I�G8D�@(A���&E�OI��E���x���1ҾL��D�D$��M�7I�WD�D$�S���f�E�WE���D���A�G
�7���fDA�G��u1ҾL�����I�G8A��HHI�G8�@LM�7I�W���H9�rA�G��uA�GM�'M�gI�G8H�@pI�G8L�ppI��		I�G(K�D�@A�G��uL��4L���L�I�I;Gs�8)t
�)L�����I��	I�G(K����A�G����L��8L����I�I;GsL�pM�7�8)�-���A�G��uA�GM�'I�_(M�g�"���f.�E�wE��u1ҾL����I�G8E1��HHI�G8�@PM�7I�W����f�I��M�7E����A�w��uA�G
M�'M�g��+������?��I�G(A�H��H)څ���M�7I�WH�ÐI9�����A��Hր�v;<?t7<{�����I�FH9���H�T$����A�NH�T$H��DH����E�wE�������A�G
���fD��{�����I�_(L��L�5��F���@��*u�A�WI�G(���#H)�H�پ$L��H�P�d���I�G(E�wH��H)�E�����(L���@�I�G(E�_H��H)�H��E����H�پ,L������I�G(E�WH��H)�E�����0L�����M�7I�WI�_(������+t;w��*�E���I�_(������?�v�����{�����I�_(���DE�OI�G(E��u;H)�H�پ$L��H�P�|���I�G(E�GH��H)�E��u�(�f����M�7I�WH���)���f�H���<H��L���,���I�G(A�wH��H)څ�����@L��M�w��I�G(A�OH��H)څ�����H��L���T�A�G����1ҾDL�����A�G������I�G(�L��H�p���A�G���������H���DA�>}�fDI��M�7L9������A�>}u�A�W�������A�G
���f�H;$��D�T$I��A�GM�7E��tWL�4$H��L)�t#H�C�H�$H�D$8H�\$0��D$����H��L��<L�����L�t$0I�_(L�t$8A�GH��H+T$8��u��@L����I�G(E�OH�X�H�$H�\$8E����H�t$0I�H)�H�����I�G(E�GH�D$0E���1ҾDL���Z�I�G(H�$�M���DM��H;$�������fDI�I9G�I����$���fDH�D$@L��H�T$H�L$I�H�D$H�D$T^
]I�G�=�H�L$H�T$E1�I�I��I�W�����H�$H�D$0����f�H�BH�T$I��߅��H�T$�H��R�DP�����L������A9�����A�G��uA�G
M�'M�g�c���@I��M�7�4���蟆��H�D$0H�$�A���I�G(�
���M�����AWI��AVAUATA��USH��HH�_(�T$H�WI��H��dH�%(H�D$81�H�H�\$H9�s	�8^��H�t$41ɿH���FH�t$ H9��gH�pH9���D9��7I�7D�(A��\�A��)����A��.�i��A��[��A��(��I�G8H�@pI�G8H�@pH��		I�W(I�T�@A�O��uH�¾4L��H�D$��H�D$I�I�wH9�s.H�zH9�v	�:\�l�)�\L��H�D$���H�D$H��	I�W(I��ǐA�W���RH�¾8L����I�I�WH9�s
H�pH9���E�wE���(M�w(A�GI�H��H��I�_1�A��$L����1�H9��������t3A�WM�N�M�O(��u1ҾL���9�I�G8�HHI�G8�@PI�o(H9l$�bH�D$8dH3%(��H��H[]A\A]A^A_��A��*u��uE�WE����I�I�_f�A��L���$�I�I�WH9�v �0H�x@��*�OH9�v
@��\��M�w(�����A��{�K��A�������w�D��A�w��x�H�I��H�����H����Hc�H�|$��u!H���L��H�D$(�%�H�D$(H�����H������L��H����E�_E��uH�T$� L�����I�G8�@xI�I�W����@A��}��A�o���/����2���f�I�7D�(A��\�	���E�GE��uA�GI�_H��H�FI����A������f��P;T$���������DE�OM�w(I�?E����L��H��1�1�����DA�w�������A�G
����I�G8�@(��A����2���1ҾL�����I�I�W����L��� �I�I�W����@M��H��$L��I)�I�Q��M�w(E�GL��H)�E���8L���(��M�w(A�L��H)�H������H��,L���X�M�w(A�OL��L$H)���nL���0�1�M�w(I�1�I�W�L$L�������x{�n���H��L��I����I�/��I�G��H9�s
�},�L��L���b�I�I�WH9��^H�HH9��I�8\�@�x}�6M�w(H��1�1�I�L���&�����uA�GI�I�_���I�I�WH9�rdM�w(����I�I�WL���D$4^
]H�D$(H�D$ H�T$H�pI�I�w�w�H�D$(H�T$I�I�W�T����A�G
�*���H�pH9�v��8\�U����x)�K���H��I������I�I�WL��1�����A�G��uA�GH���FI�I�G�{���D�z)����������y�\��I�H��H��H9�u�I�A�O��uA�G	M�w(I�H��H��I�_1�1�L�������D�OH��H�E��u1Ҿ���I�G8�HHI�G8�@LM�w(I�I�WL���
�����9}�q���A�OH9��v������~���A�G
�q���H�u�I�7H9������L$(�T$��}���u�T$H��L$(�Dp�����L������T$��9������A�w��uA�G
I�I�_�z���I�?I�W�����~��fD��AWAVA��AUA��ATUSH��dH�%(H��$�1��Ѓ�����H��I��A��� ��H���m��I�ǿ����H��H����L��H��H�|@H�|$0H���ׂ��H�D$8H�D$(H���aH�\$HK�D=�D$ �D$@L�l$L�l$H�D$I���I�E@@H�H��H�@HH9�u�H���� H�H�CH�CPH��1��H�SX1�H�CH�C D�s(H�C`�ChH�CpH�CH�H��CxL������H�t$8H�F�H�C8A����A������L���v����D$ H�t$8�����1�L�����H�t$8�L$ H�F�H�C@���zL�CX1��D=���L�PL��A�<u�s��N��I�H�S ����~΀<u)HcsH�<I��H�I��1�D��9�~�H�B�<
t�STL�P�JA�ӉKTL��A��P���v�x����H������o���A�<u�{���w��I�H�S ����~@�<
@8<u�LcKI��I)�J�<M��H�I��1��D�*L�M�$G:,4u���9��E��f.�L��I9���I)��P���fDH�Ɓ��H�4�H�H�ʁ�|H��0��H��H��H��Dt�A��D�kH1�1��I��I�T$���|H��$��H��(��H��u�H���]A��H���D�kH�E�L�uH�]�Ee�H�j~F�D$ H�D$H�D$H����>�D$ H��$�dH3%(�H��[]A\A]A^A_�H�D$H;D$���|$ ����H��}F�D$ H�D$H�D$H�F�H�C@H�s0H�|$(H��豆��H�CH����T$ D�kHL�sp���2L�`1�E1�E1�L���"�H����H��LD�H��H��H�H�pH�ʁ�|H��,�@���~�H��8t�H��<�(���H��4t�HcChH9�~�{hM��H���S1���H�PL��H�T$�0�t��H�D$H;D$r��]���H��$u��b���f�H9�HL�H������H������H�t$8����fD�D$ ��u�D$ H��|FD�kHL�spH�D$H�D$H�D$(H�CA���E�Hǃ�L�uH�]�Ee������H�M|FH�D$H�D$���fDA��H����E�L�uH�]�Ee�������D$ ������������L�����D$ �X���f.�����fD�Sh�����M����Hc�T$H�~H�4$��|��H�4$�T$H��H�C`t\��~SH�I��I�W�H�с�|H��u�H���P�H9�u�����f���
���H�O{FH�D$H�D$�U���H�����Ch�S���H���wy��������xw���AWI��AVM��AUATI��USH��H��8H�T$L�L$I9��7I�H�D$L�h�RDH=����H=�*H=��L9d$��I���H��I9���I�l�H��H��%|H=��~�H=@���H=L��H=P��M9g(��vZA�,$@��
���Vu��@��H��Pu9@��_t3M9g s-�8u��A�L$�H�H��H�R�����_�I���f�1�H��8[]A\A]A^A_��H=0����L�SL��H=,����H=$�xH=(�H=u�A��L�T$(A���Ic�D�L$$H��IGH�HH����v���H�H�T$H)�H)�I9��_���IGH��L��H�L$H���e�����@���D�L$$H�L$L�T$(A�� Ic�H9���L���fDH=�(���L9d$�����I�D$A8,$���I���"���f�I�G I�o(L9��?L9���L9��������s��A�L$�H��H�������_�����L9�������s��A�$H�H��H�g������@I�DH���%���H�I�D�H��|H��Hu��|���@M9g ��M9g(�$���A�|$�
����H�D$�@(�I�������@H�D$���H��HhL9d$���A�$H�UI�L$��E����I������M9g(tr�����A�<$
t����A�G�b������A�G���L9��|���A�|$�
�p���H�|$�G(�������@A�G����������A�G�u����0���A�|$�
�^����f�H=8�H=<��H=4��������I�GL��M��H��I+WL�L$L��H�L��L��H�H�H�T$���H�������I�WH�*���DH�D$�@(�f����I���@L��I��K9D�u�H��I��Z������H�\+�L�L$H�T$I��L��L������H���L���I�H�4�H�PH��%|H=H�&���H�D2H�K%���H�\H��%|H=D����H)�뎁��I�GL��M��H��I+WL�L$L��H�L��L��H�XH�PH�T$�~���H�������I�WH�\*���I�G8H�t$H��L9 �����H��L� M��H�\$H)�H�T$L��H��L��L�T$I������H���W���L�T$H��H�\$L���#���H�D$I�W8L��H��L�$�H�D$����L�L$H�T$M��L��L��L������H����������H�\+����H��L��H�t$���H�D$L9���������f�AWI��AVM��AUATI��USH��H��8H�T$L�L$I9��7I�H�D$L�h�RDH=����H=�*H=��L9d$��I���H��I9���I�l�H��H��%|H=��~�H=@���H=L��H=P��M9g(��vZA�,$@��
����n��@��H��Pu9@��_t3M9g s-�n��A�L$�H�H��H�R�����_�I���f�1�H��8[]A\A]A^A_��H=0����L�SL��H=,����H=$�xH=(�H=u�A��L�T$(A���Ic�D�L$$H��IGH�HH����v���H�H�T$H)�H)�I9��_���IGH��L��H�L$H���^�����@���D�L$$H�L$L�T$(A�� Ic�H9���L���fDH=�(���L9d$�����I�D$A8,$���I���"���f�I�G I�o(L9��?L9���L9�������Hm��A�L$�H��H�������_�����L9�������m��A�$H�H��H�g������@I�DH���%���H�I�D�H��|H��Hu��|���@M9g ��M9g(�$���A�|$�
����H�D$�@(�I�������@H�D$���H��HhL9d$���A�$H�UI�L$��E����I������M9g(tr�����A�<$
t����A�G�b������A�G���L9��|���A�|$�
�p���H�|$�G(�������@A�G����������A�G�u����0���A�|$�
�^����f�H=8�H=<��H=4��������I�GL��M��H��I+WL�L$L��H�L��L��H�H�H�T$���H�������I�WH�*���DH�D$�@(�f����I���@L��I��K9D�u�H��I��Z������H�\+�L�L$H�T$I��L��L������H���L���I�H�4�H�PH��%|H=H�&���H�D2H�K%���H�\H��%|H=D����H)�뎁��I�GL��M��H��I+WL�L$L��H�L��L��H�XH�PH�T$�~���H�������I�WH�\*���I�G8H�t$H��L9 �����H��L� M��H�\$H)�H�T$L��H��L��L�T$I������H���W���L�T$H��H�\$L���#���H�D$I�W8L��H��L�$�H�D$����L�L$H�T$M��L��L��L������H����������H�\+����H��L��H�t$���H�D$L9���������f�I��A���AWA��AVAUATUSL9���Ic�E��H�?�D$8H�L$�A��A������f�L�,�H��L���|H��,���8H������H���p~NH���H����H��A���
D��D!��	�E�I9��y���[]A\A]A^A_�fDH����E��H��E9�t�E�I9��B�����H�� ��~yH��$tyH��(uD��D��E��D!Ӂ���A��	É�D!���	�D��uA��tA���A�I�MH)ʉ�A��H���E�I9������F����H��uԉ�H��D!��	���H��@�#~QH��Ht���H��L��H��Pu�H��A������E�I9��O�������f.�H��4t�~EH��8�y���H��<�@�����H��D!��	�D���D!�E���	�I9�������x����H��0�4���H���
���f.�H��D�����A���D!��	�I�LH��H�ρ�|H��H������D��D!�E���	�I9��{������fDA��L�jE!���L��E�I9��Q�������@H��A�������D��D!��	�����H��A��������A���H�L�|$�I��L�H�B�;�Y�c���D��D!��	��T���f�H��A���0���E�I9�������5���fDH��������E�I9����������f.�H�\H�ف�|H��HtX�@���H�H�H��I��A��|I��Hu�A��L��E�D	�I9��'������f��D$8[]A\A]A^A_ù��f.�AWH��I��AVAUATI��U�SH��XH�|$H�PH�T$8L�$�|$4H9p t�n�L�t$H�D��L��A��A�I�A��H�xH�pH�D$ H�|$H�t$APL�l$L���@���D��AYH�D$A��I�F(��\$@H�D$(L9d$(�WDE�,$��
��E1�1ہ���A��
�WA���ZE��~,DAPH�L$A��L��H�t$H�|$���AXA��A��uف��5A����D�D$D��c��D�D$DH�Ic��B��A��_t	f���]Hć�t�J���_��A�H��L��D��APH�L$H�t$ H�|$�!���^_A��H�D$D�D$@IE�H�D$�D$4A9���L;d$8��H��L��A��I��PH�L$H�t$ H�|$����ZYA��L9d$(�������
�����H�D$HE1�1ۋ@A�������H�D$ DpP�����E�����������D�D$D�b��Hc�D�D$DH��J����_tWf��uRA����Ic��B��A��_�����f�������@��t`D�D$D�Fb��D�D$DH�Hc��B����_tf��t:�����A�������Ic�B�o�����Y���D���|����H�D$ �@(�����@H�D$ �@(�ÉD$D������H�D$ �D�pL�]���fDA��_�����f�����A����f.�H�D$H�@� �����H�D$H��X[]A\A]A^A_�@�E�������u���DH�D$ �x(���|$D��uUH�D$HA��@�T���H�D$ A�D�pP�#���@H�D$H�@�u<A�� ����H�D$H�@����D�pLH�D$H��@���f.�E1�1����fDA��_���������AWAVAUATI��USH��(L�D$L9��>H��I��I��H�EL�pO��L�с�|H��,��H��<�YL�|$H��$�oH�D$H�XH��$����H��4�^��L��H��,t�zf.�I�V�I��L��L��H�����L�D$H��L��H��H��I�����I9�u�I��L�D$L��L��L��H���s���H����L�D$L��L��L��H��M������H;\$}6I������H��8u_H�EA���L��H+UI��L�H�PH;\$|�H��(L��[]A\A]A^A_ÐH��tH��t	H��u�I����H��<�{����;f�L��L��f.�%���H�I��H��|H��Hu�H��L���
f�I�S�I��L��L��H��L�T$�f���L�D$H��L��H��H��H�D$�K���L�\$L�T$I9�u�I�GA���H�D$O�|��9DI�GI�wM��H�t$A���M�<K��%|H=D����I)�H�L$L��M��L��H��L�\$����L�\$I9�u�H�L$L��L��M��H��L�\$�<���L�\$M���O����L��%���L�H�D$�|���H�EA���L��H+UI��L�H������L���I�V�I��L��L��H���;���L�D$H��L��H��H��I���"���I9�u�I�GM��H�D$�
�M��I��H�L$L�D$L��L��H�����H����I9����t�H��t5L�D$H�L$L��H��H��M���J����e���DM���X����L��M�����AWAVAUATUSH�D$8H9���Ic�E��E������A��H�\$�A���L�H��M�$�L���|H��,���=H����fH������H���H����H��A���
Mc�C�B\A��H9��r���[]A\A]A^A_��H�� tx~mH��$tmH��(u8Mc�A���J��+BlM)�I�D�+A�+A	�E�+@��u	E����H���A��H9����|���fDH��u�Mc�H��B�B\��@H��u�E��H��E9��"���A��H9�������*���@H��@�+~QH��Ht���H��L��H��P�U���H��A������A��H9��B�������DH��4�L���~IH��8�=���H��<����Mc�A���H��J�M��+BlD�F ���DH��0��H������f�H��D�����Mc�A���J�,M�,H���]B\H�J���|H��H����M��]A��BH9��j�����DIc�D�,(H�l$�H�jH�l$�E����H�T$�A��H9��/������f�H��A�������Mc�C�B\���DH��A����p���A���L�H�l$�I��M�I��+A�[�I���Mc�C�B\�7���fDH��A������A��H9����������DH��A�����A��H9��m������I��L)�A��H��A��H9��M�������I�\H�݁�|H��H�t)@���H�H�\I��I��A��|I��Hu�H�T$�Hl$�A��D,(H9�����q���ff.�AWAVAUI��ATA�USH��H��HH�GhL�$L�GPH�D$ H�G`H�T$(H�L$H�D$0H9w tD�f�H�L��1�H�P0�K��H�T$H��A�I���H�;PH�L$H�wH������AZA[H�D$I��L9k(��A�EH�;�D$A��
�
E1�1�A���8�|$
���|$��E��~VM��M��E��I��D��L�t$�@I�<$H��H�wA��H��APH�L$L���~���_AYI����u�L��E��M��I��H�;����D�t$A����H�|$8��V��H�|$8H�Ic�H���B����_t	f����Ic�A��t�J�CA��_�9A�H��H�wM��H��AWH�L$H�T$(����YH�;^D�d$I��L�4$H�D$H�o0H�t$ L��C�<7IE�H��H�D$�F��L;l$(�����H��H�l$0L��I��H���QP��H�H�t$ L��H�P0�=P��H��H�;E��AWH�T$(I��L��H�wH���9���I��XZL9k(�*���H�;A��
��A�����CE1�1��D$��9�����@��@���DwPE�������A����H�|$8�YU��Ic�H�|$8H��J��A��_tVf��uQ�t$����Hc��Bf���n�����_�e���f�A��teH�|$8�T��H�|$8H�Ic��B��f��uA��_u>�����L$A����X���Hc��B�	�����	���D�d$�2�����G(����"�����o(������D�wL����fD�|$_�����f�������A������C������@H�D$H��H[]A\A]A^A_�@�o(��u@D�s�D$A���������l����C�u1�D$�h���@�C�(���D�wL��C�����E1�1�����fD��_����N���f.�AWAVAUATI��USH��(L�D$L9��IH��I��I��H�EH�pJ��H�D$J��H����|H��,�iH��<��L�|$H��$�JH�|$H�_H��$�t��H��4�A��L��H��,t�zf.�I�V�I��L��L��H���{���L�D$H��L��H��H��I���b���I9�u�I��L�D$L��L��L��H���C���H����L�D$L���DL��D%���H�H��H��|H��Hu�H��L���
f�I�V�I��L��L��H������L�D$H��L��H��H��I������I9�u�I�GH�|$H�D$H�EH�@H�8%���M�|��C�I�GI�WH�D$H�EH�@L��A���M�<J��%|H=D����I)�H�L$M��L��L��H���>���I9�u�H�L$M��L��L��H��M������H;\$}1I������H��8u_%���L��H+UH��HEH�PH;\$|�H��(L��[]A\A]A^A_�fDH��tH��t	H��u�I����H��<�{������fDH���J�<:H�|$���f�%���L��H+UH��HEH��4���@L���I�V�I��L��L��H���3���L�D$H��L��H��H��I������I9�u�I�GM��H�D$�
�M��I��H�L$L�D$L��L��H�����H����I9����t�H��t-L�D$H�L$L��H��H��M���b������DM�����L��M�������AWAVAUATUSH��H�T$H�L$pdH�%(H��$�1��?e��D$P��H�G�8E�H�D$��I��pH�4$���t$P��D��H��L�x@���|$ H�x8�@(H�<$L�w�$��H�~0 �����HD�A��H�D$��H�AH�)L�L�H�D$HH�D$HH9���H�L$L�i`M���H9���E�eH��H�,$L�t$I��H��D��L�L$(I���DI��L9��A8.u�H��IcT$hL)�H9�|�L��L���C?����u�L��H�,$L�t$L�L$(H9\$H���D$ D��H�|$HL�4$L�l$L��$�A���$��E��I���L��$���D��HDŽ$���H��$��D$|H��$�HDŽ$�H��$�HDŽ$�HDŽ$��t$xH�|$XH�D$8I�}I�EH��L��H�|$0A�H�D$8��$�VH�T$A��H���9�ZY�t$ �D$@A��H�D$�������t$T�|$h�L;d$XtA�$H�D$D9D$@ID�H�D$A��
�r	E1�1�A���@	��
�����[E��~6D�\$`H��A��L��APH�T$H�t$@H�|$8��_AXD�\$`A��A��uʁ��D���XD�D$`�L��D�D$`H�Hc��B����_t	f���.Ic�A��t�J��A��_��A�H��L��APH�T$H�t$@H�|$8��Y^A��D�D$|�[L9d$H��H��A��L��I���D$HPH�T$H�t$@H�|$8��A^A��ZA�����H�D$�hx����H��$�H�t$pH��$�H)�I)�H�L�ffDH��t��N��H��$�H��t	�N��@H��$�dH3%(�D$P��H��[]A\A]A^A_����HDD$A��H�D$�H�D$pH�L�H�$H�HL�H�L$0H�$H�D$0H9���
L�d$I�l$`H��tnH9��)D�mL�t$L�L$(E��I����H��I9��SD83u�L��IcT$hH)�H9�|�H��H���;����u�L�t$L�L$(H9\$0��D$ L�d$HDŽ$�HDŽ$���$�H�$L��$�H��$�H�D$0L��$�H��$�I�l$0H�<��7P��H��H��$�H���AH��$�H��1�H�(H�D$ H��$�H�H�<(H�D$@�H��$�DŽ$�H��$��=��H��$�L��I��H�t$(�H�P0L��1���<��H��L��L��B�0H��$�I��A�PH�wH�����H�|$0I��H��$�L��H�P0�C��A[[H�D$@�H�$H9�$�t�H��$�H�t$ L��H�Q0H�L$8��9��H�L$8��H�D$HD$��
H�D$��	E1�E1��
��
��	���6E��~=M��E���	�H��$�H��H�qH�yE��APL��L����AYAZI��A��u�I��A������c�H��Hc�H��Pf��u	��_�EHć�t�H����_��A�H��M��L��L��H��$�ATH�wH����_AXI��K�<�8�bH�,$H9l$0�SH��$�L�l$@L��H��H�P0L���+B��H��$�H�t$ L��H�P0�B��H��L��A��H��$�ATM��L��H�wH����H�l$Y��I��^�2���f.��D$P�����_�	���f������A����A���
���Ic�D�D$lH�L$`�AG��H�L$`D�D$lH��J��A��_t	f��������t�������Hc�Bu��_u���������D�D$|�����f�H�D$H��$�I����9���H�|$uH�D$D�`xE����	H�l$��H��$�H�$H�T$HH��M��H�|$8H��H���h�H��t�H�|$I���l���H��$�I�]p�A�H��tL�H��$�H��H��H��H�D����H��$�H�����H��$�H;BpvƋ�$��D$ �D$ H�t$%Fx�H�D$H���H��~H��$��|H�$H�|$8E1�M��H��$�L���U��H��u_H�,$L�l$8�H��$�L9���I�T$�M��H��H��L���Y�I��H����E1�M��H��H��H��L�����H��t�L�L$H��$�M���k���H��$�H��$�L�D$pH)�I)�I�M�`I���?�����H��$�H������@�oAH��H��I9�����H9Aps�I�4I�t��@D�L$TE�������E]P�����E���~���@A���-���D�D$`�iD��Ic�D�D$`H��Jf���#���A��_��������Hc��Bf���������_���������A�E(����E]P���k����E������j���f.��D$h�������E�]L����fDA�m(��u�
�;������/���D�T$TE���!���E�]P���L�cA�L;�$�tD�3H��$�L��$�H�D$X��$��D$ ���H�<��+I��H��$�H���f���H��$��-F���D$P�p���H�{H����H��H��$�H��������D$P�E���DH�$H�|$8M��L��H��$��D��������$������DYPA���LA�E�������f.����M����oB��Hc�H��Hf��uM��_tH���'���Hc��Pf��������_����@��������B��Hc�H��P��f��u	��_����A����������Hc�Pu	��_�cA��A���q���K�<�8�����H�|$H��$��8��H�<$��wH�|$uH�D$�Px����H�t$��H��$�H�pH��$�H�T$0H�|$(M��L����H��t�H�|$H����H��$�H��$�H�hp�P�H��t@fDH��$�H��H��H��H�D����H��$�H�����H��$�H;BpvƋ�$�H�t$%Fx�H�D$H���H��~H��$���H�|$(E1�M��L��H��$�H�����H��uYH�l$(@H��$�H9���H�S�M��L��H����H��H���iE1�M��L��H��H��$�H���M��H��t�L�L$H��$�M����H��$�H��$�L�D$pH)�H)�I�I�XI������H��$�H�������oAH��H��I9��eH9Fps�I�I�L��@��_�(���f������A������A(�p���DYPA�������A�E���U������f�D�i(A��uD��
��������������$������D�YP�a���f.���$�����D�YLA�����H��$�H��$�H��$�H�F�H�$L��$�H�L$ H�|$@H;�$�t�.H��$����H�D$�@x���5���H��$�H��$�H�t$pH��$�H)�H)�H�H�^fDH��t�>A��H��$�H��t�,A��H��$��f��H�<���C��H��$�H���V���H��$���@��H��$���@������H�}H���C��H��$�H����������H�|$(M��L��H��H��$����
����D$P���L��L�$�.��L�$L�L��H�D$H�N�L��L�$��-��L�$L�H�D$0���D$P��H��$��#@���D$P�f�fDH��$��3�H��$����H�$�(�H���g���=����AVA��AUA����ATI��UH��SH��@D�-�DdH�%(H�D$81������H�ƥDE��x E9�u�rf.�D9�tcH�����y���UL�pL����,��H�XH��tH9�v[L��L���8��H�t$8dH34%(H���WH��@[]A\A]A^�@��t�I��H�p�2L���'��L)�H�X�H�U�L��L���Q.��A�D,��f�E����L�vH��D�f.�H��D�+E��x|H�{L���C����u�I��E��H�
|�1��2�L����/��L��H����������!ʁ ��t����€�D�H�HHD���@�H��L)�H�X����D�L�5xw�����I��2�1�H�
˒L���b/��L��H����������!ʁ ��t��z�����;��f.����?e�t�SH�_H��tV�;E�uN�H�{�H��t�=��H�{H��t�v=��H�{ H��t�h=��H�{`H��t�Z=��H��[�Q=���[�f.�@��AVAUATUS1�H�� L�/L�6dH�%(H�D$1�I��ܔH���L@��tsH�`[I�D$I�^I�L]H��H�RH�IH�H�1��I�$��$��uLH��I�|]t@I�D$���t��u�H���ZI�D$�H� 
[I�D$�f�H� [I�D$�f�H�t$dH34%(u
H�� []A\A]A^��n:��ff.���SH��`H�dH�%(H�D$X1�H��J�����D$4H�H�T$ �P�����D$TH�H�D$@H�ܔH��H�T$@H�t$ H��P1҃��t#�|$u9�$f�f/���1�f/���H�L$XdH3%(��uuH��`[�DH���x/H�<$xQ������f��D$4H�J@�RH�L$ ���T$(�P���O���H�P@�D$T�@H�T$@���D$H�?���������y����A9�����H������H�����ff.����SH�� dH�%(H�D$1�H�H��H�PH�H��H�@H�H�0H�ܔ�P1҃��t�|$u5�$f�f/�wF1�f/���H�L$dH3%(��u2H�� [�DH���h.H�<$x������f��������t8��@��H���C���H�����ff.����SH�� H�H�7dH�%(H�D$1�H��H���F�1҃��t�|$u8�$f�f/�wI1�f/���H�L$dH3%(��u5H�� [��H���-H�<$x������f��������7��@AUATA��USH��HdH�%(H�D$81�H�H�@H�(H��oEH�@H�)$H�EH�D$�o)L$ H�CH�D$0�}t�|$I���L���2�{t�|$4L�l$ �yL���2HcL$(Hct$E��H�T$ H�<$��}A��t�|$wf�{t�|$4wiH�T$8dH3%(D��ubH��H[]A\A]�L�����|$�v����i���L����|$4�|����o����H�����fDH�|$ ���o6��ff.�@��1����D������f���USH��H�dH�%(H�D$x1�H�H�l$H�|$H�D$HH�RH�@H�T$`H�D$hH�`�H��8H�D$H�@ܔH���H���H�H�l$0H�D$(H�T$ H�T$`H�D$H�D$8H�T$@�D$P�E�����H�\$H��tz�{tY�{uF�C��v>����C�oH�D$�oH�SH��H�PH�� ��w_�@H���@H���*H�\$H�H����1������H����H�H�L$xdH3%(u(H�Ĉ[]��1���@H���(�H�D$���4��ff.����USH��dH�%(H�D$x1�H�`�H�|$`H�l$H�t$hH�|$H�D$HH��8H�D$H�@ܔH���H���H�H�l$0H�D$(H�T$ H�T$`H�D$H�D$8H�T$@�D$P�������H�\$H��tz�{tY�{uF�C��v>����C�H�D$�oH�SH��H�PH�� ��w]�@H���@H���)H�\$H�H����1������H����H�H�L$xdH3%(u&H�Ĉ[]�D1���@H��踩H�D$��\3��ff.����AVI��AUATUH���SH��dH�%(H��$�1�L�l$L�d$H�D$�H����H�D$H�S�oH�P���oH�SL�l$pH�mI�L�d$xH�P�uH�D$����H�UH�D$H�H�D$�@�sH�l$���eH�H�EH�D$�@H�`�H�l$H�|$ H�D$ HH��8H�D$(H�@ܔH���H���H�H�l$@H�D$8H�T$0H�T$pH�D$X�D$HH�T$P�D$`������H�\$H�����{t]�{uJ�C��vB����C��H�D$�oH�SH��H�PH�� �����@H���@H���c'H�\$H��H��c�L���[�L���S���H��$�dH3%(��H�Đ[]A\A]A^�f.�L����L����1��@��H�{@�H�E�CH�T$���B�B����L�t$��H�}@��I��EH�T$���B�B�8���DH����H�D$�����0��f�AWI��AVAUATUSH��H���T$dH�%(H��$1�H�`ɔH�D$XH��$�o�oHH�D$XH�D$()�$�)�$�H��$�H���H�H�l$pH��@��
I��`�I��$���I��L�|$0L��$�����D$H�D$hH�D$H�D$LH�D$H�D$`H�D$ H�D$PI�����H�D$XH�T$h�@H�I��$8I��@ܔHDŽ$�HH��$�H��$�H��$�I���H�L��$�HDŽ$�H��$��D$HDŽ$���$�L��$�Ƅ$�������H�|$PtL�����H�|$XtH�|$(���H�D$XH��H����
I��$��mH��L��H���߄
���W�D$��tH��$�L�2A�~tm��H�L$E1�I���@H�T$H���@H�t$ H�D$X�փ
��������D$LL�t$XH�|$`�p�A�v�CI�H�D$X�@���f�A�~H�T$8t4M�6A�FA<����H�t$0�L��A�FA�[���A�nA����A�F��v��A�F�H�T$8H�H��$��AoH�I�VH�PH��$�H�8���GH��BL�0A�F<�\���<��C��I�FL���PpI���E���fDL�|$0M��tL���>�1�H��$dH3%(��H��[]A\A]A^A_�H�l$pH����
I��`�I��$������I���H�T$x1�L�|$0H�8�
H�L$x��u\H�մ�1�1��OUH�|$XtH�|$(��H�D$XH�|$x���:���D��H��$�H�8����H���1�1���T�H�܅�1�1�L�|$0��T����M,��ff.�f�AVAUATI��UH��SH��H�� dH�%(H�D$1��B<t3<��H�D$dH3%(��H�� []A\A]A^�f.��BH�3H�L$�P�x
���t�H�D$�H�(��H�D$�oEH�UH��H�PH�� ��v
H���ݡH�D$H�L$H���@E1��@�CA�H�3I�<$j�P�W]
XZ�E���L�l$H�:L�t$L���
H�;L��L���=�
������H�D$L��H��H�����H�;L����
���+��H��t{�<_t�ƒ�߃�A��v
�P�1����w\���~R�F�H�WH�|@�<_t)�ȍqЃ�	v��߃�A<v�����wf�H��H9�uǸÐ1��ff.�f�AUATUS1�H��8dH�%(H�D$(1�@��t&H�L$(dH3%(����H��8[]A\A]�DH��H�?�A��H�T$�~
H�T$Lc�L��H��u�H�\$ H�}L�l$H���~
H�}H��L����
��uTH�E��@AH�D$H�8�w�F���H��H�I�H�E�hAH�}�~
�H���1��R�2���D���*����s)��ATUSH��dH�%(H�D$1���usH��1�H��I�ԉ������tWH�$H�8�G<��<u`H�G�PpH��H��tQ1Ʌ�tsH�Ɛ�\H����ȃ
���tA�$H�E�	@��H�D$dH3%(uMH��[]A\�f�H�	��1�1��+Q��f�H�?�H�Ɛ�\H�*��U�
���u���y(��f�AWAVAUATUSH��dH�%(H�D$x1��G����H��A��1���H�L$8H�T$0H�t$(�������H�D$0H�8��
���QI�ǰ([H�L�d$HH��L�t$@L���|
H�D$`H�$H�D$PH�D$H�D$$H�D$H�D$XH�D$L��L��H���}
����H�D$@H�<$H�H�D$(H�0A��H�|$`tvE����H�L$H�T$E1�M��H�t$H���|
�����uBH�D$P�EH�E���H�D$xdH3%(��H�Ĉ[]A\A]A^A_�DL��H���|
�E���H�i��1�1��kO�EH�E�D�D$$H�|$X�p��u�
�EH�E�|����L�d$8I�$�{���{tWH���H�D$8H�H�8H�D$0H�8�G��I���*[<�h���1�<�a���H�G�PpH���R���f��C��v�����C�8
I�$H�D$8�oH�H�SH�PH�D$8H�8�v
�J�H�D$8H�8�GH��BH��E���@H�;����I���*[����f��EH�E�t����I�ǰ([�2���@�EH�E�L����%��f�AUATUSH��8dH�%(H�D$(1��D$H�D$����H��1�H�t$���������uH�D$H��x��H�8�#y
���XH�D$1�H�H�8������y
H�D$1�H�t$H�H�8��z
H�D$D�kD�cH��oH�@H��H�CH�� ��vH���H�D$D�kE1�E1�D�cH�T$H�L$ H�H�t$H�8��y
H�T$H�D$H�H�:�T$H��tH�`�H���H9��)E1�H�L$ H��H��A���c
H�T$H�H�8����H�G H���1�1�fD�xH�ʅ�u�NH��H9tH��H�@ H��u�H�D$H�H�H�JH�H�8����1��~x
�	@��H�D$(dH3%(��H��8[]A\A]�@H��~�1�1��K��f��D$��u�H�GH��H;D$ w�H�GH�H�8�D�x
�M���fD�3T
H�D$H�H�8�^����r�H�������H�GH�H�8�8����"���AWHc�AVAUATI��US��1�H��8H�t$�dH�%(H�D$(1��I��A����H��D���Q����������۸H�1�HE�A�T$��H���I�D�H��x��H��H9�u�H�|$��I�H�H�L�x M����A�D$�H�l$ M�d�I�FH�D$DA�W����L�l$�I�EI�7H��H�H�8�s
���tNH��tI�H�t$ �Ӆ�u:I��M9�u�I�GA�E1��H��@H�D$I�WI�7H�8�TY
@M� M���s���L���H�D$(dH3%(�nH��8[]A\A]A^A_��I�G@L�l$H�D$�A�WI�EI�I��H�t$H�H�8�r
���t�H��tI�H�t$ �Ӆ��u���I��M9�u�I�GA�H��@A�WM�GjjH�D$ H�t$I�H�8�j\
XZ�3���L�����3���fD1�H�Pz�1��IH�D$�@����DA��t�A��H�l$ 1�Ic�H��I��H�H�8�

��t.H�|$ �H�@ܔH�H�{�H���ƀ����H�L$ H��y�1��HH�|$ �FL���>�~�������@AWHc�AVAUI��ATUS��1�H��8H�t$�dH�%(H�D$(1��H�D$A����H�t$D���M�����������H�-2��HE�A�U��H��@H�D$H�D�H��x��H��H9�u�H�|$�~�H�L$H�H�H�H�X H����A�E�L�d$ L�l�H�AH�D$@�S����L�t$�I�H�3L��H�H�8�o
��uH��tEH�{H�t$ �Յ�t6I��M9�u�H�CA�E1��H��@H�D$H�SH�3H�8�NV
H�[ H���y���H�|$�H�D$(dH3%(�iH��8[]A\A]A^A_�@L�s@L�|$�D�SI�H�M��L��H�H�8�o
��uH��t�H�{H�t$ �Յ�t�I��M9�u�H�CA�L��H��@�SL�CjjH�D$ H�H�8�vY
XZ�A����H�|$�艽�=���@1�H�Xw�1��FH�D$�@����DA��t�A��H�L$L�d$ 1�Ic�L��H��H�H�8�

��t.H�|$ H�-���H�@ܔH�ƀ�H������H�L$ H��v�1��EH�|$ �IH�|$�?������DAWAVAUATA��1�US��H���|$4H�t$(��L$0D�D$HdH�%(H��$�1�Hc�H��H�D$�n��H��I���A�����7H�@ܔH��@ܔH���H�D$@H�@ܔ����D$OH�@ܔH���H�D$PH�@ܔH���H�D$XH�@ܔH���H�D$`H�`ɔ�oH�oH����)$��A����D$0D$H��H�D$�|$4L�-u�H�D$hH���H�D$8�mH�\$h1ҾH���z1�H�߾H�D$ 1��dH�� 
[H��H�ܔH�P�D$4��H�$I��H��x��L�8A�G�xH��A�@�� ��H���$H�t$ H�D�H��H��I�W H��t�H��H�Q�H�R H��u�H�A�wA���jH��L���r�
H�CH9$�lH��I��H��x�`���1�1��K�H�^tA���%C���NH�@ܔ�\$OH�L$PH�|$`���H�\$XH���H�L$@H���H��H���H����
H�|$ �
L���
��D$H���D$0���|$4���l$4HcD$41�H��$�H�D$hI��H�8�

����H��$�L�-�����
H���H�D$8����fD��
H�������L����
H����
H�|$ ��
H�D$(�@H��GH�L$8H�Ǻ��
H�CH9$�����I�H�t$(H�D�~�^�oH�@H��H�FH�� ��vH��肏H�|$(H�`�D�H��_H9��H�D$hI��H�D$pA��u�D$0tH�@ܔH�Ɓ�H���H�D$�\$4L�t$xI�D��S�L�t$8H�D$hH�\�H�EH�\$H�H���JD����$t�D$H��H�]�@L�;A�����4$���H��uA���pA����1�H��H9\$u�H�UH�ׅ����$�����t���H��H�wH�uH�GH����A��u�A�օ��WH�u�ы|$0��������|$4���l$4HcD$41�H��$�I��H�D$hH�H�8�b
����H��$�L�-;����
H�H��@ܔH���H�>�ƃ�H�D$8����D$0���D$H�j�|$4�L���
��H��$�dH3%(�H�Ĩ[]A\A]A^A_�H��$�H��p�1��?H��$��3�
L���+�
�f�I�?L��u�%DH�H�rH�3H�z�m���H�}A�օ���Z���H�H�8tH��H�H�UH��H�t$(�PH�>��tKH�p@E1�1���U
H�}H�wH�uH�GH���A�����$�������H�t$(�PH�>��u�H�A�1�1��U
�f�I�?u���DI��I�?�����L��H�}A�Յ�u�A�������I�?������|$0uH�D$pH�@ܔH�Ɓ�H���L��H�}A�օ������L$H��������K���H�D$hH�@ܔH�Ɓ�H���������$���f�A�օ���H�EH�����L�t$xD�|$41�L�d$ �1fD<�~+��H�G�PpI�<܀x@t.���H��A9��x���I��H�8�G<u�H�I�<܀x@u��4�
�ЋL$H�L$0��|$4������l$4HcD$4H��$�1�H��H�D$hH�,�I��H�8�Y
�������H��$�I�l.��
H�E1�H��H�8�.
���[���H��$�L�-��
H�EH��@ܔH���H�	��ƃ�H�D$8�z����l$4HcD$41�H��$�I��H�D$hH�H�8�
�����H��$�L�-���4�
H�H��@ܔH���H����ƃ�H�D$8�
���L����
D�D$H�L$01�H�Io�1��%<�\���H�UH����H�D$hH�@ܔH�Ɓ�H�������H�x�
L�|$(H��I�?�hg
E1�1�H��H��XZ���C
H��p3[I�7H��$�A�H���R\
I��
������H��4C��H�=��H���'����[��ff.�AWAVAUA��1�ATUS��H���|$$H�t$��L$hD�D$(dH�%(H��$�1�Hc�H��H�D$0�^�
��H��H���1�����BI��@ܔI��$�H�D$@A��$��D$nI��$�H�D$HI��$�H�D$PI��$�H�D$XH�`ɔ�o�oHA�$�A�$�A���*�D$hD$(��H�D$0�|$$H�D$`H����H�D$8H�t��H�D$��H�\$`1ҾE1�H���
1�H�߾H�$�o�
H�� 
[H��H�ܔH�P�D$$��H�D$J�D�H��x��@L�0A�F�xH��A�~@�����H����H�<$J��H��J��I�V H��tf�H��H�Q�H�R H��u�H�A�vA���rH�L$H�Ǻ�x�
I�GL9|$�rI��J�D�H��x�\���1�1�A�O�H�ajE���(9E�����D$nH��A��$�H�D$HI��$�H�D$PI��$�H�D$XI��$�H�D$@I��$���
H�<$��
H����
��D$(���D$h���|$$���l$$HcD$$1�H��$�H�D$`H�D�H�8�
����H��$��)�
H����H�D$8H�v��H�D$����@���
H���y���H�����
H�<$���
H�����
H�D$�@H��c@H�L$8H�Ǻ��
I�GL9|$�����H�EH�t$H��VD�~�oH�@H��H�FH�� ��vH���T$�|��T$H�|$H�`��WH�D�H9��D����D$oH�D$`H�D�H�D$x�D$hD!����t$$H�D$0E1�L�t$D�l$�V��t$(H�D�H�l$(H�|�H�D$pH�H�|$0D���H�l$8��@�t$`H�E�Չ|$H���D�D$E����"D$`�D$8�D��L�{D�l$o�;D�|$���|H��������H��I��1�I�w�L9|$0��I�7H�E��t�H��u�DI�H�pI�7H�x��H�;�Յ��I�7H��D�L$hE�������|$$���l$$HcD$$1�H��$�H�\�H�D$`H�H�8�H�����H��$����
H�AƄ$�I��$�H�(��H�D$8H����H�D$����D$h���D$(���|$$�:H���n�
�H��$�dH3%(��H�Ĩ[]A\A]A^A_�H��$�H��f�1��e5H��$���
H����
�fDH��u�y�I�H�pI�7H�xtgH�;A�օ��I�7H��H��tL�|$�V����L$h��tAƄ$�H�D$xH�I��$�H�;�Յ���I�7H�>����fDH�l$(H�H�PH�H�H��t8H�|$�PH�?��tH�p@E1�1��K
��H�A�1�1��K
�H�l$(D�t$$E1�L�<$�.<�0"��H�G�PpK�<�x@t/�
��I��E9�����J�D�H�8�G<u�H�K�<�x@u����
��H�;D�|$D�l$�f.�E����H��H�wH�3H�GH���b���A��u�Յ���H�3�ԋ\$(�\$h���|$$������l$$HcD$$H��$�1�H��H�D$`L�4�H�D�H�8��������H��$�N�t5�'�
I�1�H��H�8�������H��$���
I�AƄ$�I��$�H�g��H�D$8H�K��H�D$����A��H���=���DH�H�t$H�H�>�P��tGH�p@E1�1���I
H�H�xH�;H�@H���H����|$t/�T$�������H�t$�PH�>��u�H�A�1�1��I
�I�7�Յ�x�H�H��v����l$$HcD$$1�H��$�H�\�H�D$`H�H�8�������H��$���
H�AƄ$�I��$�H����H�D$8H�G��H�D$����H�����
D�D$(�L$h1�H�e�1���1�9���AƄ$�H�D$pH�I��$����AƄ$�H�D$xH�I��$��I����H�,�
L�t$I��I�>�]
E1�1�L��H��XZ���8
H��p3[I�6H��$�A�L���R
M�>����E1��@����|$8t?AƄ$�H�D$pH�I��$�I�H�8�Q���A�����H�E1�H����I�H�8u��*����m��H��)C��H�=�H��-����
��A�����ff.���H�ܔSf��A��1ҾH�@H�=�a�؛A�ع��
H�=�a躛A�ع��H�=�a蜛A�ع��H�=�a�~�A�ع��H�=�a�`�A�ع��H�=�a�B�A�ع��H�={a�$�A�ع��
H�=la��A�ع��	H�=Xa��A�ع��
H�=T��ʚA�ع1Ҿ
H�=(a诚A�ع��
H�=a葚A�ع��H�=a�s�A�ع��H�=�`�U�A�ع1ҾH�=�`�:�A�ع��H�=�`��A�ع1Ҿ
H�=�`��A�ع��H�=�`��1�[�ff.�@��1��f���SH��H�5
�H�� dH�%(H�D$1�H�L$H�T$H�D$��
�����H�T$�J����1�����H�T$H�ܔ������������H��`[H�PH�Ɛ�\1�H�����`
���t#�CH�H�D$dH3%(uxH�� [�f��CH���H�:�y����H�BH��PpH���_���fDH�� 
[H�P�{����H�°�ZH�P�c���H�� [H�P�S������ff.���SH��H�5��H�� dH�%(H�D$1�H�L$H�T$H�D$�
�����H�T$�J����1�����H�T$H�ܔ������������H��`[H�PH�Ɛ�\1�H�����^
���t#�CH�H�D$dH3%(uxH�� [�f��CH���H�:�y����H�BH��PpH���_���fDH�� 
[H�P�{����H�°�ZH�P�c���H�� [H�P�S����K��ff.���ATUSH��H�5�
H�� dH�%(H�D$1�H��H�L$H�D$H���A
���t#H�<$�G<t8<tT�����CH�H�D$dH3%(�iH�� []A\�@�CH�T$�w�6��H�H����H�GH���t&H��ؔL� �{�H��L���pE��uLH�<$H�GH����r����CH��H�H�G������R����X�����CH��G���L�d$H��H��1�jM��A�1�jH�
2nj�u�
H�l$0H�� H���
����}t�}u�E��w%H���H�l$�CH�EL��H�菜��������E��
H�D$�oEH�UH��H��H�PH�� ��v
H���wH�l$�E�E��W�����H�V1��������H�V����ff.���SH��H�5J�H�� dH�%(H�D$1�H�L$H�T$H�D$�%
�����H�T$�J����1�����H�T$H�ܔ������������H��`[H�PH�Ɛ�\1�H�]���H[
���t#�CH�H�D$dH3%(uxH�� [�f��CH���H�:�y����H�BH��PpH���_���fDH�� 
[H�P�{����H�°�ZH�P�c���H�� [H�P�S������ff.���SH��H�5��H�� dH�%(H�D$1�H�L$H�T$H�D$��
�����H�T$�J����1�����H�T$H�ܔ������������H��`[H�PH�Ɛ�\1�H�����Y
���t#�CH�H�D$dH3%(uxH�� [�f��CH���H�:�y����H�BH��PpH���_���fDH�� 
[H�P�{����H�°�ZH�P�c���H�� [H�P�S�����ff.���SH��H�5��H�� dH�%(H�D$1�H�L$H�T$H�D$�
�����H�T$�J����1�����H�T$H�ܔ������������H��`[H�PH�Ɛ�\�H�����X
���t(�CH�H�D$dH3%(uuH�� [���CH���H�:�q���H�BH��PpH���_���fDH�� 
[H�P�{����H�°�ZH�P�c���H�� [H�P�S����;��ff.���SH��H�5Z�H�� dH�%(H�D$1�H�L$H�T$H�D$�5

�����H�T$�J����1�����H�T$H�ܔ������������H��`[H�PH�Ɛ�\�H����UW
���t(�CH�H�D$dH3%(uuH�� [���CH���H�:�q���H�BH��PpH���_���fDH�� 
[H�P�{����H�°�ZH�P�c���H�� [H�P�S������ff.���AWAVAUATUSH��HI��@ܔH�t$E���M���M���I���dH�%(H�D$81�H�`ɔI����o�oHA��A�����=1�H�t$(�I���������H�D$(L�A�A<��<�OI�AL��L�L$�PpL�L$I��M��L�L$L�T$�%I���1�1�H�8��L�T$L�L$���XI����L��H�Ɛ�\H�{��L�L$H�AƇ�H�D$0H�D$0I���A�AA�A�D$�XU
L�L$����
�D$A;A�H�D$�@H�A�yvA�AE���M���M���I���I����+E���M���M���I���I����ЙH�D$8dH3%(��H��H[]A\A]A^A_�DH�!U�1�1��C"H�D$E���M���M���I���I����@H��fDM��p���H�9T�1��H�D$�@H����1�H�OU�1�L�L$�!H�D$L�L$�@H��������ff.�@��AWAVAUATUSH��HI��@ܔH�t$E���M���M���I���dH�%(H�D$81�H�`ɔI����o�oHA��A�����=1�H�t$(�I����M�����H�D$(L�A�A<��<�OI�AL��L�L$�PpL�L$I��M��L�L$L�T$�%I���1�1�H�8���L�T$L�L$���XI���H�Ɛ�\1�L��H�����L�L$H�AƇ�H�D$0H�D$0I���A�AA�A�D$�R
L�L$����
�D$A;A�H�D$�@H�A�yvA�AE���M���M���I���I����.fDE���M���M���I���I�����H�D$8dH3%(��H��H[]A\A]A^A_�DH�QR�1�1��sH�D$E���M���M���I���I����@H��fDM��p���H�iQ�1��H�D$�@H����1�H�R�1�L�L$��H�D$L�L$�@H������O��ff.�@��AWAVAUATUSH��HI��@ܔH�t$E���M���M���I���dH�%(H�D$81�H�`ɔI����o�oHA��A�����=1�H�t$(�I����}�����H�D$(L�A�A<��<�OI�AL��L�L$�PpL�L$I��M��L�L$L�T$�%I���1�1�H�8��L�T$L�L$���XI���H�Ɛ�\1�L��H����L�L$H�AƇ�H�D$0H�D$0I���A�AA�A�D$�O
L�L$����
�D$A;A�H�D$�@H�A�yvA�AE���M���M���I���I����.fDE���M���M���I���I����0�H�D$8dH3%(��H��H[]A\A]A^A_�DH��O�1�1��H�D$E���M���M���I���I����@H��fDM��p���H��N�1��H�D$�@H����1�H��O�1�L�L$�H�D$L�L$�@H��������ff.�@��ATUSH�� dH�%(H�D$1�����H��1�H�t$�D���������H�D$H�8�G<��<��H�G�PpI��M����1�L����G
��tc1�H�t$L����H
�����H�D$D�c�kH��oH�@H��H�CH�� ��vH����hD�c�k�f.��[�H�D$dH3%(uHH�� []A\�f�H��N�1�1����CH���fDL�'�;����CH���.��ff.���ATUSH�� dH�%(H�D$1�����H��1�H�t$�D��贐�����H�D$H�8�G<��<��H�G�PpI��M����1�L����F
��tc1�H�t$L���G
�����H�D$D�c�kH��oH�@H��H�CH�� ��vH���gD�c�k�f.���H�D$dH3%(uHH�� []A\�f�H�QM�1�1���CH���fDL�'�;����CH������ff.���ATUSH�� dH�%(H�D$1�����H��1�H�t$�D���d������H�D$H�8�G<��<��H�G�PpI��M����1�L���RE
��tc1�H�t$L���OF
�����H�D$D�c�kH��oH�@H��H�CH�� ��vH���SfD�c�k�f.�軏H�D$dH3%(uHH�� []A\�f�H�L�1�1��;�CH���fDL�'�;����CH�����ff.���ATUSH�� dH�%(H�D$1�����H��1�H�t$�D���������H�D$H�8�G<��<��H�G�PpI��M����1�L����C
��tc1�H�t$L���D
�����H�D$D�c�kH��oH�@H��H�CH�� ��vH���eD�c�k�f.��k�H�D$dH3%(uHH�� []A\�f�H��J�1�1����CH���fDL�'�;����CH���>��ff.���ATUSH�� dH�%(H�D$1�����H��1�H�t$��nj����~H�D$H�8�G<��<��H�G�PpH��H��ts1�H�t$��C
�����H�D$D�c�kH��oH�@H��H�CH�� ��vH����cD�c�k�f��;�H�D$dH3%(uHH�� []A\�f�H��I�1�1���CH���fDH�?�X����CH�����ff.���SH��0dH�%(H�D$(1���urH��1�H�t$�螋���tYH�D$H�8�G<��<uaH�G�PpH��H��tRE1�H�L$ H�T$E1�H�t$��A
��tc��uH�D$ �CH���;�H�D$(dH3%(uXH��0[�DH��H�1�1���CH���fDH�?�y����D$H�|$�p��s��
�CH�����ff.���AWAVAUI��ATUSH��8dH�%(H�D$(1����{H�ܔH��`[��H�P����Hc�1ҿ�g�
��H��I���:�����)M�'�L�t$@I��I�$L��H�0�}VH�|$uM�$�H��9��I�$A�mA�]�oAEH�@H��I�EH�� ��vL���gaA�mL��A�]�G�
H�D$(dH3%(��H��8[]A\A]A^A_�@1�H�t$�蟉���tH�D$H��xt臊�DH�81�H�L$H�5����jJ
��uuH�D$A�mA�]H��oAMH�@H��I�EH�� ��w=A�mA�]�T���L����
�fDH��F�1��A�E�$���L���s`�H��F�1�1��A�EI�E�����D��AWAVI��AUATUSH��8dH�%(H�D$(1�����H�ܔH��`[A��H�P����Hc�1ҿ�f�
D��H��H���8�����/L�m�L�|$�H�D�I�UL��H�0�TH�|$uL�l�H��A9��I�EE�fA�^�oAH�@H��I�FH�� ��vL���e_E�fH��A�^�E�
H�D$(dH3%(��H��8[]A\A]A^A_�f�1�H�t$�蟇���tH�D$H��xt臈�DH�8H�L$�H�5|����gH
��uzH�D$A�nA�^H��oAH�@H��I�FH�� ��wCA�nA�^�T���f�H����
�fDH��D�1��A�F����L���k^�H��D�1�1��A�FI��������ff.���AVAUATUH��H�5�BSH�� H��@ܔdH�%(H�D$1�L�d$L�l$H��M��L��H�D$L���������taH�<$�G<��<unH�G�PpH��H��t_H�D$�P���u~H�t$L���H��IE�1�脶��L����EH�EH�D$dH3%(uJH�� []A\A]A^�@H�IB�1�1��k�EH�E�DH�?�l���H��C������f���AVAUATUH��H�5�ASH�� H��@ܔdH�%(H�D$1�L�d$L�l$H��M��L��H�D$L��������tdH�<$�G<��<unH�G�PpH��H��t_H�D$�P���u~H�t$�L���H��IE��a���L����EH�EH�D$dH3%(uGH�� []A\A]A^ÐH�)A�1�1��K�EH�E�DH�?�l���H�aB�����f���1��%���D�������f���AWAVAUATUSH���H�t$0dH�%(H��$�1���tF�������\��H��$�dH3%(�H���[]A\A]A^A_�fD1�H�T$pH�t$h��ƒ���t�H�l$pH�]�{t"�{u�C����H����H�D$pH�L�3D��E��%D�t$�D$8A�F����1A���
H�\$hH�;��+D�\$8E����
L��$�H�?E1�1�H���������L���9
H��$��D$<H�$H��$�H�D$ H��$�H�D$(DH�D$hH�4$L��H�H�8�:
���iH�D$hE1�H�T$dM��H��$�H��$�H�H�8�.9
�����D$�����EH�D$xH�LchH���@M9��'H�0L��H�����M�MM9��dH�D$ B�+_Ƅ$�H��$�L�@�@H��H��H��I��H��H��H��H�H)�H����0A�H��	w�H�L$(L)�H���2M�,	M9���J�<H��L�����A����H�
�DD��Hc�H�>��H�t$h要��������H�\$hH��xH�D$@�f�D$E1�H�D$@�x��	H�D$@�D$8�@H�;����1�H�L$xH�T$p�H�t$h�5����� ���H�l$pH�]�{t"�{u�C����
H����H�D$pH�H�l$xL�3H�]D��E��%D�t$�{�D$8�i����{u�C���
H���f��J�����uCE1�f.��L$dH���yN�)M9���J�<+M��H��$�H�����M��uwD�L$dE���H�D$xH�LchH���$L��M9���H�0H�����I�ML9��B�+_�T$dL�,
M9���H�<H��$��L��M����D��H��tB�+��H����������D�D$8E���VH��$�H�
�yu�A���N�AH��A���9VH�`�D��H��H��$�H����-
����H��$��s{H��$�H�H��$�H��D$<�H�D$hL��H�H�8�]5
�@����H�A=�1�1�����fDM�������L$dL��$���L�ljL$H�
����L$H���=H�D$xH�LchH����L��M9��u���M���I���1�H���8�
H��H�D$xH�HcP�I����T$dL��L�,M9��c���1�H��I���H�L$H��
M����T$dH�L$HH���5����L$dM��I�M9��R	J�<H������I��M�R�OA�N1�1��h���DI��`��T$dH��$�I����B��D$d�.
A���H�5%AD��Hc�H�>���t����T$d����1Ƀ���H������H��M��L���H���I��1�1���
�T$dH��H���W���������H�D$xH�LchH����M9���H�0L��H���|��I�ML9������1�H��I���H�L$H��
M���H�L$HH��H��B�(_����D�l$dI��M��M���I����R����T$d������1��������o���E1�L$dH����H��M�[L���H���1�1�H�L$H��
H�L$HH��H��I�͋L$d�7���f��D$8���4H��tH���
H�\$0HcD$<�CH��*����I��M�NM���I���1�1��
H��H�D$xH��H�HcPH�0�E��M�MM9������H��I���1�L�L$H�r�
M���L�L$HH���r���fDH��M��L���H���1�1�H�L$PL�D$H�-�
H�L$PL�D$HH��H��I��H��L�����A�������H�5�>D��Hc�H�>��T$dL�����DH��I���1���
M���H������H��I���1�H�L$XL�L$PM���L�D$H�
L�L$PL�D$HH��H�L$XJ�<�d���fD�OA�N�����OA�N����H�`�H��E1�D��H��A�H���jH��$��

^_�,���f��覿
H��$��@�@H��$�H��oH�RH��H�PH�� ��vH���QE�UI��`�H��$�H��D��D�T$HI����(
D�T$H��ueH��$�H��$�H�
�ytT�I�@�HH�:�v�qPH��$�H��$�H�:�o 'H�@H�GH��$���
�@���H��$��@D��E1�A�H��$�H���@H��I���j�
ZY���f.�H�L5�1�1�������fDH�|$h�&uH�D$hH�t$@H�0���1�H��H�L$HI���莾
H��B�(_H��H�L$H���M������H��$��H�=�4������i���H�����1�����A��H����L��M9��RL��H�߉L$H���L$HM��� ����p������H�T$P�AH�L$H聽
H�T$PH�L$HH�H��$��oH�H�QH�PH��$�H�:��!�GH��@H�
�F���H��$��H�=.�����uI��PH��t
D�PE���w���H�����1��%�����ؼ
�D$8H�H�\$@H�D$h�oH�)$H�D$h�KH��JH��BH��BH�8�����NH�D$hH�8��H�75�1�1�����OA�N�������C�<�
H�EH�D$p�o+H�(H�SH�PH�D$pH�8�v
�NNH�D$pH�8�GH��BH������C��
H�EH�D$x�o;H�8H�SH�PH�D$xH�8�v
��MH�D$xH�8�GH��BH��{������f.�����C�p�
H�EH�D$p�o3H�0H�SH�PH�D$pH�8�v
�MH�D$pH�8�GH��BH�����_MH��$�H�:����M�����M���I������I�վOA�N�)���I��M��M���I����L$H1�1���
�T$d�L$HH��L��$����H�|$@���I��M��M���I���1�1��ٺ
H��H�D$xH��H�HcPH�0�o�����H��M��L���H���1�1�H�L$H蔺
H�L$HH��H��I�͋L$d�^�H��I���1�L�D$H�g�
M����L$dL�D$HH�����H��I���1��>�
M���H���Y���H��I���1�L�D$HM�����
L�D$H�L$dJ�<(H��M�����OA�N�����OA�N�8����OA�N����L$HM���1�H��I�������OA�A�N����OA�A�N�j����OA�N�I������ff.�f�������AVHc�1�AUATI��UH���S藹
D��H��I���iz���tTH��L����{A�D$�I��`�M�t��H�I��$�H��H��H��6���L9�u�[L��]A\A]A^顸
�L��蘸
[]A\A]A^�tff.���AUATUSH��8dH�%(H�D$(1���ueH��1�H�L$�H�T$H�t$��r���tBH�D$H��H��w�H��FuMH��.�1�1��H��CH���sH�D$(dH3%(�SH��8[]A\A]�@H����zH�l$L�eA�|$tfA�D$��v\���A�D$�k�
H�EH�D$�Ao$H�I�T$H�l$H�PH�}�v�yIH�l$H�}�GH�E�@L�l$M�eA�|$t{A�|$ufA�D$��v\���A�D$��
I�EH�D$�Ao$H�I�T$H�PH�D$H�8�v
�HH�D$H�8�GH��BL� L���Z�H�l$H����GH�D$H�;E1�H�T$A��H�H�0�

L�d$I�,$�}tv�}u`�E��vX����E�:�
I�$H�D$�oUH�H�UH�PH�D$H�8�v
�KHH�D$H�8�GH��BH�(H����H�D$H�(H�mH��H��x]H�T$H��L�d$ H�H�T$ H����fDL��H���GH�;A�1�E1��L���9	
H���u����fDH�;�`
H�;蘵
H�q.�v����G�����AWAVAUI��H�5�EATUSH��HdH�%(H�D$81�H�\$H��H���D������L��H�l$L�t$�)xH�$H��L�d$ H�8�%
DH�$H��L��H�8��&
���vH�D$L�8A�G<�1<t1�Ao)D$ I�WH�T$0<vL����F�|$4M��tL�����H����EI�7A�GI�}D��PH��E��A��-u	D�VH�FA�JЀ�	ws��L�L�A�9uf��vA��0t[L��H)�H��OA��0H�HMc�I9���@D�X�A��	w-D��0O��H��H�N�PI9����D�X�A��	vِH��E1�A�H��j�
XZH�D$L98t�|$4vL���EH�$H��H�8�$
���f.�H����DH�D$E1�H��I�}A��H�H�0�
볐H�D$8dH3%(uZH��H[]A\A]A^A_ÐA��-t2M���Q���A�E1�H��L�ֹ�
�L���A��-u�DL��H������I����������AWAVAUATUSH��H�5�)H��XdH�%(H�D$H1�H�L$8H�T$0H�D$@L�D$@�������L�d$@M����A�D$A�<tq<�E1�A�|$uQA�D$��vG���A�D$�A�
H�D$@�Ao4$0I�T$H��H�PH�� �����@I���@L�����L�d$@�A<$f�f/��|$�H���
uH�l$0�E<�l<�4H����H�|$8��H�D$0�H�D$8�f/���f(��t$�\�f/���f��f/����\�/f/��D$r,@f(�H���L$薌�L$�\L$f/L$s�f�H�D$HdH3%(�H��X[]A\A]A^A_�Df/��~f(��l$�\�f/��Nf��f/��@�XH/f/��D$r�@f(�H���L$��L$�XL$�t$f/�s��a����H�D$8�@<�����E��������L,d$H���G�H�|$8�=�H�D$0�H�D$8� f/��d$vwf��f(��I*��\�f/��T$��M���}D�H,�H���D$�]��D$�\D$f/D$s����@fW=h.�|$���D�t$f/���f���\��I*�f/��\$�+1�1�H��(�����{���CH��9���f�L�D$8A�@<�����U�������E�xE�������L�uE�&A�D$�D�d$<L��vA�� u#B�42H��D� ��)�A�L$���v�A�� t�A�L$�H�ƃ��H���>�OЀ�	����~
A��0��D$
@��0ufDH���>@��0t�E1�E1�I��A)�C�4�t$ �w�@��	���|$���|$
��Hc�HЃ|$ ��|$ ��I9��eE1�1�M�E� A�D$�D�d$<v
A�� �!L��C�<�H��D� ��)�A�t$�@��v�A�� t�A�t$Ճ�@��H��H���>D�W�A��	��A��0u	���i�D$(
@��0uf�H���>@��0t��D$,A�E1�I��A)�C�4�t$ �w�@��	���|$(���|$(
�:Hc�HЃ|$ ���|$ ��I9��x���E1�A���k���E���b���D	��L,d$��������L$8L$�VM���c���L���D)�A�:E�������L��H��蒉A�H��L9�y������/E1��\$����f.�H���>�CH��X����f(�H���ć�?����A�T$����I�$�(�M���v
@�� �r��H���(��)ƍU���v�@�� t�UՃ��H��H���
�y�@��	��@��0u	���YA�
��0uDH���
��0t�A�E1�E1�H��A)ЍQ�E�8��	�mA���TA��
��Hc�H�A����A����H9�����A�����M��������H,�H���D$譄�D$�XD$�\$f/�s�����H���h=H�D$@����fD�H,�H���k�����fD��.������J�y�@��	�~���H��A�A�A�
������.�F��߀�Eu
A����Hc�H�A������H9��/���A������A������H��H�5�(�C������@��-�������������ߍQ��������H����w���@��.����~�OЀ�	����H���A��D$
�h���@��.�����D�^�D$ E�S�A��	�����H���D$(
A��D$,@��.�l�>�D$(
A��D$,D�\$ �����xA�
���@��X������JA�H�����@��.�"���@��Eu
A���yHc�HЃ|$ ��I9�����uT�|$ A����I�z�H�5u'D�L$(�L$ L�D$����L�D$�L$ ��D�L$(�����A��-u�������A�������߉���A@���T���I��A�:������M������L���D�A�:E�[�����L��H���6�A�H��L�H���~��.���I9�����A��������|$ ����I�z�H�5�&D�L$,�L$(L�D$ ����L�D$ �L$(��D�L$,����A��-�=�����������0���@��7�b���H9��u���A���k����S���fD��߉���A@���U���I��A�:�����H�D$
��߀�X�����~�D$H�����E�������OH�WA�A�E�����D�P�D$(
A���A��X������~�D$(H���o���@��.����@��Eu�|$,�\Hc�HЃ|$ �����L9�������&�����L��H��蕃��������D�GH�WA�HՀ����OD�Y�A��	�>H�����A�z�7�I���I9��I���A���B�����A�z�7� ���I9�� ������|���A�����D��D�\$ ���E�����A�zI�rA��D�L$ ����|$,����E�ZL���$������D��L�����A�HЀ�	�5���D��A��r���E�JI�rA�y�@��uEA�zD�_�A��	vkI���]���A�zI�rD�_�A��ueE�ZE�S�A��	�����I���v���A��0A��	�!����>A��:���H�WA��.�s���A����I�rA��.u�A�������0@��	�����i�����AWAVAUATUH��H�5�SH��dH�%(H�D$1�H���������L�,$I�}��
�Å��XLc�1ҾL���z�
M�}I��I�G L��H��t�H�H�@ H��H��u��Lc��U��[4f��f��*��Y
�"�A*��X�&�Y��H,�D9�tHc�K��I��H�K��H�I��E��u�H�H�H�H��t��I���I�G(L��I�4�I�G I�G1�I��#f.�H�JH��tH�H H�JI�G(H��H�A(H�H�@ H�I�G(H9�u�I�G 1�H��t�H�H���@H�@ H��u�M�gL���}�H���H�H��t��L��褣
�EH�EH�D$dH3%(u&H��[]A\A]A^A_�f��EH�E�����ff.�f���AWAVAUATUSH��8H�L$D�D$L�L$dH�%(H�D$(1�H���I��A������
A��D9���A�Ņ���D�D9�DF�H订
H��XZ1�1�E1�H��H���E�M�~ E1�E����M���~H�\$ �7DjI�w@A�I��jI�H��A����AYM� AZE9�~EM��t@I�GH��@A�WH�D$ ��u�A�E1��1�H��H��A���M� E9��H�|$��E9���M����H�\$ �Cf�jI�w@I��A�jH�D$A��I�H�8�;�_M� AXE9�tNM����I�GH��@A�WH�D$ ��u�H�D$A�E1�1��H��A��H�8�
�M� E9�u�H�|$tU�L$��~M�D$L�d$H�\$ ��M�l�I�$A�E1�H�ڹ1�H��I��H��@H�D$ ��M9�u�M��trH�\$ �/�jI�w@A�I��jI�H���T�M� XZM��t<I�GH��@A�WH�D$ ��u�A�E1��1�H��H���6�M� M��u�1�H���#
H�L$(dH3%(H����H��8[]A\A]A^A_�DE���u���AŸDH���i���A��k���E9�|����fDA��M� E9������M��u�H�|$�q����t$E1���������]���f.�1��V���贻�@��AWAVAUATUSH��dH�%(H�D$1������1�Hc�I����A�
��H��I���a�����I�EH�HH��{���E�M�}H��M�d�@I�E1�1�A��H��H��@H�$H�;������tBI��M9�u�L���1�
A�FH�;��
H�I�H�D$dH3%(uVH��[]A\A]A^A_�H�$H�%�h�1�1��#�L���۞
A�FI��DL���
�KZ��t��@������f���1��Ք��D�����5AUHc�1�ATI��UH��SH����
��H��H����_�����H�L�(A�}��I�}D�E�H�KE1�1�1�����I�}H����H�`�I�}H�H9����oE�oMO�oU W �o]0_0H�E@H�G@H���̝
H���ĝ
A�D$I�}�

H�I�$H��[]A\A]�@H��1�1����H��胝
A�D$I�$H��[]A\A]�f.�H���X�
H��[]A\A]��Xf���I�}�3���f����G�����AWHc�1�AVI��AUATUSH��H��荝
D��H��I���_^�����I�H�(�}��I�GL� A�|$tA�|$��L���C�I�GL� M�$$A����I�GL�(A�}t#A�}u
A�E����L����I�GL�(M�mD��A���I�GL�0A�~��A�~utA�F��vk���A�FI�WH�T$��
H�T$H�I�G�Ao6H�0I�VH�PI�GH�8�v�-I�GH�8�GI�GH��@I�GL�0L��践I�GL�0I�>�
1ҾHc��D$�5�
I��I�GH�H�H�@ H��tL��@H�HH��H�J�H�@ H��u�H���k^D�D$I��L��H�}D��D������H�}H����H�`�H�}H�H9��S�o#'�oko�os w �o{00H�C@H�G@H���
L����
�@H�}�

��H�߉T$��]�T$H�}I��E1�1�D���i���H�}H���m�H�`�H�}H�H9��{�o�oKO�oS W �o[0_0H�C@H�G@H���a�
H��L��[]A\A]A^A_�K�
L���@�
H��[]A\A]A^A_�UDH���1�1��S�밐A�D$���G������A�D$M�o輙
I�EI�G�Ao$$H� I�T$H�PI�GH�8�w"�GI�GH��@I�GL� ���@�+I�GH�8��f����A�EI�WH�T$�F�
H�T$H�I�G�AomH�(I�UH�PI�GH�8�v�T+I�GH�8�GI�GH��@I�GL�(�������o;H�EH��8�o{x�os p �o{0x0H�S@H�P@�ݘ
�w���資H�EH�޹H���H��躘
���D��AWAVI��H�5�AUATUS��H��hdH�%(H�D$X1�H�L$8H�T$ �D$L�L$L�D$(�d������H�D$ H�8�
���Lc�L��L���5[H�T$8H9��gH���^M���EJ�"��H)�H9�LG�M���<H�D$ H�\$PE1�1�H��L�l$0H�8�]
H�D$81�H���^DL�H9���H�D$Hc�L�l$0H�$H�D$@L�|$HH�D$�[f.���u+�|$H�T$0I�>��H�t$HA�E1�����H�D$ H��H��H�8�
H�D$8L�H9�~H�D$ H��L��H�8�
��uhH�|$0�N(H�D$ E1�I��H�$H�t$L��H�8�
���f���H��I�>E1�A�jH�L$@�T$,H�t$P��XZ�j���f.�H�D$XdH3%(�hH��h[]A\A]A^A_�DH�D$ H��A�oI��H�8�@
H�D$8L��L9������H�D$ H��L��D��H�8�)
��t�H�D$8Ic�L�H9�������|���@L�d$(I�$�C�����<t�{u�C��wqH��虧H�D$(H�L�#Hc����fDA�E1��1��[��v���fDH)�I����DH�xH�T$8����H�D$81��������C�`�
I�$H�D$(�oH�H�SH�PH�D$(H�8�v
�r'H�D$(H�8�GH��BH��3�����ff.�@��AWAVAUATUSH��H��xH�<$H�l$`H��L�d$@�T$H��L�|$XL�t$<L�l$PdH�%(H�D$h1��_
H�D$HH�D$�8��u%H�T$@H�<$E1�1�A��H��@�&�H��H���[
H��L��H���]
����E1�I��L��L��L��H���
��u��L$�T$<H�t$P��tH�L$H�<$������t<�T$<H�t$PH�L$@H��E1�A�H��@jH�|$���XZ�i����L�D$HI�0�F<��H�D$<��H�T$@�FL�
I9�������A�A��ve���H�T$(A�AL�L$ �r�
H�T$(L�L$ H�H�D$@�Ao	H�I�QH�PH�T$@H�:���GH�L�D$H�@I�L�D$ �A���4�y�ZH���"�H�D$HH�8��lH�T$@H�
H��H�T$ �q@�����y��H����H�D$@H�8�lH�D$@H�L$H�T$HH�����AAH�H��T$H�1H�8���������H�D$�hA����H�\$hdH3%(����H��x[]A\A]A^A_�fD@��t��yu�A���qH���@�H�L$H�D$@H�T$HH���g���H�H��T$H�1H�8�������s����y���@<����yu�A���pH���ޫH�T$@����@�~t������q������L�D$(�FH�t$ ��
L�D$(H�t$ I�H�D$H�oH�H�VL�D$HH�PI�8��1�GH�T$@I��@L�
���fD�A���N������H�L$(�A��
H�T$ H�L$(H�H�D$@�oH�H�QH�PH�D$@H�8�v
�#H�D$@H�8�GH��BH����f��A����������H�L$(�A菐
L�D$ H�L$(I�H�D$H�oH�H�QH�PH�D$HH�8�v
�"H�D$HH�8�GH��BH��0���f.��k"H�T$@H�:���fD�S"L�D$HI�8���fDH�H�D$H�|$tH�D$�xA�	L�D$HI�0�!���@H�F�L$ H���Pp�L$ H�D$뿃��H�L$(�A袏
H�T$ H�L$(H�H�D$@�o)H�(H�QH�PH�D$@H�8����GH��BH��.������H�L$(�A�A�
L�D$ H�L$(I�H�D$H�o!H� H�QH�PH�D$HH�8�w�GH��BH��3����4!H�D$HH�8���%!H�D$@H�8�l���H�3�1�1��$�0��$�M���H�D$�hA�?���蕪�D���AWHc�AVA��1�AUI���ATUSH��H���2�
��H��I���P�����D�{���I�of.�I�D�H��xtH���پ1�1���1�H��H9�uЅ���L��L��O�|��(Q�IfD�{t!�{u�C����H����H�EH�H�3I�}D��H�����L9��}H�EH��C��v�����CH�UH�T$腍
H�T$H�H�E�oH�H�SH�PH�EH�8�v�H�EH�8�GH�EH��@H�EH��@���H��L��[]A\A]A^A_�J�
f.�����CH�UH�T$�
H�T$H�H�E�oH�H�SH�PH�EH�8�v�H�EH�8�GH�EH��@H�EH�����f�L���Ȍ
H��[]A\A]A^A_�EHD��1�����D�������f���AWAVAUATUSH��dH�%(H��$�1��G�H�D$8���{I��1�H�L$H��H�T$8H�t$0��F����WH�D$0H��x������I�ư([L��H�\$h��NH�D$0H��L�l$@L�d$pH�H�8�^�H�D$`H�D$H�D$,H�D$H�D$XH�D$�fDH�D$0H��H�H�8�e�H�D$0H��L��H�H�8�_�����H�D$8H��tH�T$@H�0L��H�A��L������Ņ�t���$�
H�L$H�T$I��H�D$PH�t$A��@�@H�D$0H�H�8�<���tw���V���H�D$PH�T$`�@H�I�?H�T$PA�1�E1���`��#����cFH��$�dH3%(��H�Ę[]A\A]A^A_�f.�H�D$PH�T$X�@H��D$,H�T$P���B�~���H���1�1���뎐H�l$HH�]�{tu�{u_�C��vW����C��
H�EH�D$H�oH�H�SH�PH�D$HH�8�v
�H�D$HH�8�GH��BH�H��贞H�D$HH�H�;�����I���*[���聥���ATUSH�� dH�%(H�D$1�����H��1�H���D�����H�$H��x��H��H�\$L�d$�]LH�$H��H�H�8���@f�H�T$1�A�E1��H��@H�}��H�$H��H�H�8��H�$H��L��H�H�8����t��fD�sDH�D$dH3%(u*H�� []A\�f.�H���1�1�������d��@��AWAVAUATUSH��HdH�%(H�D$81�����I��1�H�t$���B����pH�D$H��x��L��H�l$(L�l$�4KH�D$H��L�5�L�|$ H�H�H���H�D$0H�D$�"fDL��1�1��/�H��H���H��L��H�������H�D$H��A<�<u�H�1�AI�<$D��PI��D��A��-u�FL�^�HЀ�	wy��L�L�A�9ul<0u��wcL��L)�H��WD��I�KA��0Mc�I9��.A�CD�X�A��	w0��0O��H��H�N�PI9����D�X�A��	v�f�L���������H�D$ H�H����fD�sBH�D$8dH3%(�	H��H[]A\A]A^A_�H���1�1������f�H�1I�<$L���q����u���R�
�H�T$I�<$H�D$0A�E1��H�f�p�@H�D$H�H�0���K���f.���
�I�<$H�D$0H��@f�HH�D$H�H�0�PD���I��D��A��-u�FL�^�HЀ�	wu��L�L�A�9uh<0u��w_L��L)�H��SD��I�KA��0Mc�I9���A�CD�X�A��	w,@��0O��H��H�N�PI9�ti�D�X�A��	v�DH��E1�A�jH�L$��XZ�Q���A��-tM���!���L��L��������A��-u�L��H�������I����A��-t+M��x�H�T$E1��L��A��c����A��-u�L��H���k���I����聠���AWAVAUATUSH��XdH�%(H�D$H1��G�����I��1�H�T$ ��H�t$�?����cH�D$H��x���D$��u8H�l$ H�]�{t"�{u�C����H���H�D$ H���D$L��H�\$@H�l$(�
GH�D$H��L�|$8L�t$L�l$0H�H�8���Tf���u3�|$H�T$(I�<$��H�t$8A�E1���/��H�D$H��H�H�8��H�D$H��H��H�H�8�O���upH�D$(E1�I��L��L��L��H��@H�D$H�H�8�p����g���H��E1�A�jH�L$8�T$$H�t$@I�<$���XZ�r���f.��>H�D$HdH3%(��H��X[]A\A]A^A_��A�E1��1��K�����fDH���1�1����랃���C�i�
H�EH�D$ �oH�H�SH�PH�D$ H�8�v
�{H�D$ H�8�GH��BH�����������AVAUATUSH�� dH�%(H�D$1�����H��1�H�L$H��H�T$��<�����L�d$I�,$�}te�}uW�E��vO����E蕁
I�$H�D$�omH�(H�UH�PH�D$H�8����GH��BH�(H����H�$H��x�]H�8�5�D�sD�kA��H�D$H�H�(��1�)�H�$H��oH�@H��H�CH�� ��vH���+D�sD�kA9���D)��#1�Hc���|�
�U�H�L$I��H�T�@H�H��H9�u�H�D$E1�1�H�;A��L��H�H�8�D���T��H��H�;�Y�H�`�H�;H�H9����oM�oUW�o] _ �oe0g0H�E@H�G@H���M�
L���E�
���;H�D$dH3%(��H�� []A\A]A^�f.�H���1�1��;��f��H�D$H�8�G���fD1�1�H�������{vH����CH��j���D1��I��H������knH�;�����>��ff.���AWAVAUATUSH��XdH�%(H�D$H1�����I��1�H�t$��9�����H�D$H�8�G<��<��H�G�PpH��H����L��H�l$@L�l$ ��AH��H��L�|$8�W�H�D$0H�L$(L�d$L�t$H�$I���ef.���uH�D$(H�T$8�@H�H�D$ H�0�F<��<�6H�<$�5H�v�1�1����H��H����H��L��H����������~
I��L��L���@A�L��H���@H�D$(�+����R���H�D$(H�T$0H��D$H�T$(���BH�D$ �BH�0�F<�H���H�D$H�6E1��H�$A�H�8�,��G�����+9H�D$HdH3%(�UH��X[]A\A]A^A_��H�y��1�1��A�D$I�$��FH�6�PD�H�D$I��H�8D��A��-u�FL�^�HЀ�	ww��L�L�A�9uj��v<0taL��L)�H��UD��I�KA��0Mc�I9���A�CD�X�A��	w.fD��0O��H��H�N�PI9�tB�D�X�A��	v�DH��E1�A�jH�L$�G�XZ� ���H��v����A��-t*M��x�H�$A�E1�L�ֹ������A��-u�L��H��x�I�������ff.�f���AWAVAUATUSH��XdH�%(H�D$H1��G�����H��1�H�T$(��H�t$�l6���tH�D$��u9L�d$(I�$�{t"�{u�C����H���0�H�D$(H�H�H�D$H�D$H��xtRH����1�1�譿�EH�E����6H�D$HdH3%(��H��X[]A\A]A^A_�H��H�\$@L�l$ �>H�D$H��L�|$8L�t$H�H�8��H�D$0H�$�?fD��u!H�T$ H�t$8A�E1�H�}��J�H�D$H��H�H�8�w�H�D$H��L��H�H�8�q����F���H�D$ H�4$E1�I��L��L��H��@H�D$H�H�8�����t����D$H�|$0�p��}
H�|$I�ċD$L��p�t>�9^H��E1�A�L��jH�L$0�T$$H�}���XL��Z�z
�<���fD�_�f�����C�y
I�$H�D$(�oH�H�SH�PH�D$(H�8�v
��H�D$(H�8�GH��BH�����O��ff.�@��AVAUATUH��H�5��SH�� dH�%(H�D$1�H�L$H��H�D$�@������H�$H�8�G<�<��H�G�PpI��M����H�D$����������H�ܔ�bH��`[H�PH����;H��p3[H�}H�L$A�L����A�D$���C�xH��A�|$@���[x
H��H���OI�T$ H���Y1����H��H؉p��H�H�R H��u�H��H��HغH��L�kI��H�H�
�Z���qd
H�{u`�{�A�EA9F�BI�6H�}M��V���@H�`�H�F@H���H9��BE1�1�H����I��I�}tL��L���OZ����t�M��I��I�}u�A�|$@t-H�D$dH3%(�sH�� H��[]A\A]A^���DH���`w
H�D$dH3%(�>H�� []A\A]A^��H�A��1�1��c��EH�E�DL�'����苗�H��H���p���H� �B��H�=NYH��o����DI�uH�}�V�������H�A�1�1��������fD�r�H����e���H�� [H�P���H�ܔH�°�ZH�P���f�H�ܔH�� 
[H�P�b���f��EH�E����H��1������ɑ�f����������n��f���A�1ɺ�~��f.���E1�1ɺ�~��ff.�f���E1����z~��f.���1��Un��D����Bn��f���A�1ɺ�:~��f.���A����~������������p��f���A�1ɺ��s��f.���E1�1ɺ�s��ff.�f���E1����s��f.���1��p��D��A�1ɺ�js��f.�����Rp��f���A����7s���������AWLc�1�AVL��M��AUATUH���SH��H�t
D��H��H���5����/�L��A���&v
�L��I���v
I��ܔL���I�$�u
E1�E1�E1�I�D$�1�E1�L�<É�I�7�V��������H�H��x?H����H��/A���1�H��@��E1ɍ|?�H�PI9��H���f���H���1�1��舷I�<$�?s
I�|$�5s
L���-s
H���%s
�EH�EH��H[]A\A]A^A_�f.�A��uzA��E1��{����H����r
H��H[]A\A]A^A_�].DIc�H��t&I�4$H���|�I�t$�D�\�L�<�E1�A��M�|�A�A�������H���1�1��訶����Ic�I�$D�$H�D$H���|�I�T$D�\�I�EH�H�8��D�$A��E����A�@�H�$L��I�D�D�D$I���DH��I9�tWH�H�H�8��A9�t�H����1�1�H�$���~���fD��H�v�1�1�����[���D�D$H�$E����Ic�1ҾD�$H��H�D$�r
D�$H�\$(I��H�l$0A�@L�t$ L��Hc�A�G�H��I��H�D$8I�DH�D$H��fD1ҾL��H���q
H�C�H9�u�D�$H�\$(H�l$0E��tNA�@�1�H�<�I�D5L��H�H�H�@ H��tf�H�
H��H�1H�@ H��u�H��H9�u�H�L$H�t$L��H��f�H�H��H�
H9�u�H���NH�t$�L��D�$�\
H�H�D�$H�H��t��D�$E���
A�@�L�D$8E1�H�l$(H��L��M��H�\$H�$M�M��L�|$L���J�D51�H�H�8I�EJ�0H�G(H�G H�GI�EJ�0L���'fDH�HJ�1H��tH�J H�PJ�2H�W(H��H�Q(H�J�2H�B H�J�2H�W(H9�u�H�G 1�H��t"f��H��u	Hcʃ�H�H�@ H��u�L�I����L94$�@���M��H�\$I��H�l$(H���H�H��t��H�$L�|$H�\$ �H�;H���o
L9�u�L��H�$�o
I�<$�n
I�|$��n
L����n
H����n
�EH�E���ff.�@��AWAVAUATUSH��XdH�%(H�D$H1��G���wFI��1�H�T$(��H�t$ �)���t+H�D$ H��xtMH�^��1�1�蘲�fD��)H�D$HdH3%(�\H��X[]A\A]A^A_��H�8����Ã�uYL�d$(I�,$�}t"�}u�E���XH���xH�D$(H�(H�E�Ņ���9�����tL���0��H�D$ L�d$@L�|$8L��H�H�8��H�D$H�D$H�D$0H�$H�D$ H�T$M��E1�H�4$L��H�H�8�~�A�ƃ������f��f��f��*��*��H*��Y|��^�f/�vJA�}��A��tYH�t$8L���4FH�D$ ��L���H�H�8�����c������fDH�D$ L���H�H�8���=���D�D$H�t$0�L��P��/I�D����E�Xl
I�$H�D$(�o]H�H�UH�PH�D$(H�8�v
�i�H�D$(H�8�GH��BH�(�K���A��t4H�D$8A�EI�E�����H�1��1�1��C�����D$H�|$0�p�A�u�n
A�EI�E���薇�fD��AUATUSH��HdH�%(H�D$81����IH��1�H�t$��%&����,H�D$H��z�:�CH�l$L�l$H�H�H��L�d$ H�8����1H���|L����|��XD$ �H�D$H��H�H�8���H�D$H��L��H�H�8�������H�D$H��P�J���v��o)T$ H�@H�D$0��vL����L���Vy�|$4�k����{�a���H�H�T$ f�f���H*��H*��X�f/���5����]�f/��#���H�H��6������%H�D$8dH3%(u"H��H[]A\A]�H�I��1�1��k������@��AUATUSH��HdH�%(H�D$81����iH��1�H�t$��u$����LH�D$H��z�Z�CH�H�H�8�����!H�D$H�l$L�l$H��L�d$ H�H�8�
��9�H���({L��� {��YD$ �H�D$H��H�H�8��H�D$H��L��H�H�8�	�����H�D$H��P�J���v��o)T$ H�@H�D$0��vL����L���w�|$4�k����{�a���H�H�T$ f�f���H*��H*��Y�f/��5������f/��#���H��H��5�����$H�D$8dH3%(u"H��H[]A\A]�H�y��1�1�蛬�����@��AWAVAUATUSH��dH�%(H��$�1�H�`ɔH�D$@�o�oH�G�)D$`)L$p��wMI��1�H�L$0��H�T$(H�t$ �r"���t-H�D$ H��xtOH�@��1�1���
��;#H��$�dH3%(�!H��[]A\A]A^A_�f�H�D$(1�H�T$PH�8��s����H�|$P�Zg
������g
H��H�D$@H�D$0H��oH�@H��H�GH�� ����xH�D$@�@�@H�D$ H�H�H��������H�D$@H���/����oA�l$A�\$A$H�@H��I�D$H�� ����H�|$@�CA�l$A�\$���@H�L$P1��H���踪H�|$P�nf
���f��+f
1�H�D$@�@f�P�A���@H�l$XH��L�l$@H��L�t$8L�|$H��H��$�H�D$H�D$`H�D$H��$�H�D$���H��$�H�`�L��$�H�t$H��8H�|$HDŽ$�HH��$�H�D$(H�L��$�HDŽ$�H��$�H�D$HDŽ$�DŽ$�H��$�Ƅ$���-��u{H�|$HtsL����H�D$HH�D$@H��H����H��L��H������udH�|$@H�D$8�#���H�L��H�D$@�3����H�|$@�����L����6���H����1�1�������fDH�D$@A�l$A�\$�o A$$H�@H��I�D$H�� ��vL���L���"A�l$A�\$�����.��ff.���AWAVAUATUSH��dH�%(H��$�1�H�`ɔH�D$8H�D$H�o�oH�G�)D$p)�$����I��1�H�T$8��H�t$0�w�����H�D$0H��{�\���H�D$81�H�T$PL� L���p���tH�|$P�c
L���&H�;�Z�����H�l$hH�;L�|$@H��L�l$H���H�D$`H�D$H�D$,H�D$H�D$XH�D$�DH��$�H�`�H�t$pH��$�HDŽ$�HH��8L��$�HDŽ$�H��$�H��$�HDŽ$�L��$�DŽ$�H��$�Ƅ$��)+���aH�|$HH���S��"L�����.H�|$@��H�L$H�;E1�H�T$H�t$I����������u H�T$@I�>E1��H�t$`A�蹵H�;H�����H�;H��L�������u)H�D$@M������H�8�V"���p�����@�H��$�dH3%(��H��[]A\A]A^A_�f.�E1�������K�m���fDH��E1�A�jH�L$P�T$<H�t$hI�>�;�XZ�;���@H����1�1�蛥�c���fDH�)��1�1��{��C���fDH�L$P1��H����X�H�|$P�a
������|�@��AWAVAUATUSH���|$8H�t$(dH�%(H��$�1�H�`ɔ�o�oH)�$�)�$�����H�D$(1Ҿ�@HcD$8H��H��H�D$ �a
��H��H����!�����H�EL� A�|$�GH�\$ 1ҾA�H����`
H��1ҾI���`
H��1ҾI���`
L�d$0M��H�XH�D$�D$8I�߃�H��H�$1����<�K�4�H�>��L��9�C�D�L�J�D�I��I��H�H�8�?�L9$$�J�D�D��H�0�~�f�~u��F��v����H�t$�FJ�L�H�L$�C_
H�L$H�t$H�J�D��oH�H�NH�HJ�D�H�8�w!�GJ�D�H��@J�D�H�0�1�����+�J�D�H�8��1�H�T$xL���rk����H�|$x��^
���H����^
�nH��$�dH3%(�[H��[]A\A]A^A_�L�d$0H��\$<�^
A�|$u�|$8��H�|$(�!H�|$ 1Ҿ�_
�H�D$X�7^
�L$<1�H�D$p�@f�P����H�D$p1�H�D$H�D$XH��H�D$0H��$�H�D$@H�D$dH�D$HH��$�H�D$PA�|$�\L�|$0��D$ �&�H�D$I�A�|$t\H��I��H9$tuA9l�~�H�D$L��L��I��L��L�\$H�8�k��|$8L�\$��I��L��H�8�<�A�|$u�I�?H��I����I�G�H�|$hH�0�:H9$u�A�|$��H�T$h�|$8���|$ ��H��$�H�|$(�6��9l$<�����H�|$�H�|$X��\
L����\
H�|$��\
L����\
���@I�FH�L$@M��E1�H�T$HH�t$PH�8���L�\$�D$ �������f\
�@H���@H�D$h�~�}���f�H�`�H��$�H��$�HDŽ$�HL��$�H��8Ƅ$�HDŽ$�H��$�H�D$hH��$��D$8HDŽ$�����$�H�D$0H��$��Y$��uH�T$hH�������1�H�N��1���L���[
L���[
H�|$�[
H�D$(�x��H�|$�/H�|$X�[
H�D$(�@����H�|$(H���8�J���fDH��H��$��T$dH�|$(��.�&�����H���1�1���b�H���[
L���[
L���
[
H�|$�[
����H�L$xH���1��#�H�|$x��Z
H����Z
���H�����&���I�FH�L$(�o�i�YH�@H��H�AH�� ��vH����H�D$(@�h�X���H�D$pH�D$�e����'v����ATUSH�� dH�%(H�D$1���uH��1�H�T$�H�t$����taH�D$H���H�8�O�A�<w'H�D$H�0�F<�[���#<tOH����1�1����CH��
D�KH�D$dH3%(��H�� []A\�fD�FH�.D�`���5H�G�PpH���EI��<-u�ML�M�QЀ�	w~D��H�t��>uqA��v��0tfH��L)�H��ZD��I�QA��0Mc�H9���A�ID�I�A��	w3��0O��H��Hc�N�AH9����
D�I�A��	v��D��H������������U��tkH�G�PpH�ǺH�5���x��������(fDH�.��t0H�G�PpH��H���n���������CH����fDH�?��H�?�H�?����<-tM���[���L���#��Y���<-u�L��H���=���I������s���AWAVI��H�5�AUATUSH��XdH�%(H�D$H1�H�L$H�T$0�D$H�D$0L�D$�€����H�|$�uL��L�d$@1�1��H�D$0L��L�l$8L�|$(H�8��H�D$H�$H�D$ H�D$�eDH�D$0H�$E1�M��H�t$L��H�8�i���H�D$8��H�H�t$(H���+0H��H��H�H�|$H��tXH�D$0L��H�8���H�D$0L��L��H�8�����uAH��tlH�|$8���|$�o���H�D$8H��H�0�4�DH��L��1���3뙐H��tH��L����3H�D$HdH3%(uoH��X[]A\A]A^A_Ð��FV
�@H��H���@�`�o���H��T$H��H�t$ ��)�����H�i��1�1��c����q�ff.����AWAVAUATI��H�5WyUSH��XdH�%(H�D$H1�H��H�T$��~�����H�D$H�8����H�$H�8��9��[H�D$H�8�n�����L��H�\$H�l$�H�D$H��L�l$ L�t$(L�|$0H�8���H�$H��H�8�����<�@�o)D$0H�RH�T$@<vL���:��|$DtL���[lH�|$(�A��D$8H�t$0L��PH�D$(H��(�|$DvL���&�H�D$H��H�8��H�$H��H�8��H�D$H��L��H�8�����H�$H��L��H�8�j���uiH�D$ H��B<�2���H�|$(��H�D$ L��H��HH�0�QH�L$(H�	��'�l���f�H����1�1��{�A�D$I�$H�D$HdH3%(uhH��X[]A\A]A^A_�fDH�|$(�.�H�D$ H�T$(L��H�H�H�0��,���fDH�q��1���A�D$I�$��po���ATI��US����4HcƉ�H��H=���_�7�VH�������������<��Hc���S
H�ƃ�~uH�=��fD�H����H���������0��?��V��S�A���A����<L�����N��K�A�ȃ�?A��Lƒ���V���V������tW�H�=r�L�F�������0��?�������K�F=A���A����<Lʃ���V��VL��M��t
H��H)�A�$�[]A\�fD1�H��t��[]A\�fD1�����H���1���v�[1�]A\��Hc���V�==f�VL��M��u��ff.���AWA��AVE1�AUE1�ATA��USH���~Hc�H��H�T$�Q
D��H�e�H����kD�BE��A��A����A��E��uC���t>�����E��Mc�A��I�A����A����A������A�A���C��L����L�c����������=�z����C<=t�D�����t;����~�E��t��t$�k�t$H���L�I��A�$H��A�DH u��t�H��1���P
H��H��[]A\A]A^A_����A��A��IcΈD
�G������A��A��IcΈD
�'����A��A����D��H��Df.�H�D$H��tD�0Mc�B�D5�k���D��=u�A��A��tA��t�A��u��<���A�F�f.���1�����D��SH��H�5jlH�� dH�%(H�D$1�H�L$H�T$��x���t&�t$H�|$H�T$����H��t)�T$H��C�SH�D$dH3%(uH�� [�D�CH����6k�fD��SH��H�5p!H�� dH�%(H�D$1�H�L$H�T$�D$L�D$�4x���t+�L$�t$H�T$H�|$����H��t*�T$H��C�SH�D$dH3%(uH�� [�fD�CH����j�fD��H����F�@H��f���H����F�H��f.���H����F��(��H����H����FH��(H��D��ATA��UH��SH��@ܔH��(H��t��k�D��H���Q
H��(1�[]A\��AVH����AUATUSH�� dH�%(H�D$1��D$H�l$�P
I��@ܔI��I��$��2�H��H�5�iL���z�H��tUH��L�l$I���@H����X�H��H��E1�jA�L���L���1�H��H�5Ni1��@z�H��XZH��u�L���NM
1�H�L$dH3%(u
H�� []A\A]A^���h�f.���SH��H�H��tO�zg�HcK�H�sH�=��H��HO�H9������tH�;��L
H�{[��L
fD�sO���H�{�n��D��UH��SH���G��~"1�f.�H�EH�<�H���9]�H�}H��[]�kL
ff.���UH��SH���G��~"1�f.�H�EH�<�H����9]�H�}H��[]�L
ff.���ATA��U��SH��@ܔH�{Pt	H�{P�H�{H�CXH�CP蓪��P���t�x�H�{`t-H�5i���+b�1�H�5���b�H�{`H��t�K
D���H�C`�kD����S1D����i���D����H���H��t�DH����BK
Hǃ�D����MUH�����H��0H��81�[]A\Ð��SH���H����H����H���K�H��[��0ff.�f���ATUSH��dH�%(H�D$1���uH��1�H���-���thL�$$I�$�{t�{u�C��wlH���aH�$H��sH�;H���
��u0H�$H�1��1�H�H�1��|��E�fD�H�D$dH3%(uyH��[]A\�f�����C��I
I�$H�$�oH�H�SH�PH�$H�8�w)�GH��BH��{�Q����=���f���H�$H�8���]e�ff.�f���USH��H�5�eH��HdH�%(H�D$81�H�L$H�T$�]r������D$���������H�l$H�t$�(H����b�H��H�����H����������!�%����t��H������D�H�VHD��H��H)�s�K
�CH�H�D$8dH3%(ugH��H[]�fDH����1�1��ی�CH��fDH����1�赌�CH����
�����d���SH��H�5�dH�� dH�%(H�D$1�H�L$H�T$�q���t�D$��u!�CH�H�D$dH3%(u0H�� [�H�t$H�T$���w�uƋD$�Cȉ�H���c���USH��H�5)dH��HdH�%(H�D$81�H��H�T$�p�����H�|$1�1�H�l$�P�H�t$�(H��ȉD$�a�H��tiH��H����������!�%����t��H������D�H�VHD��H��H)�s�I
�CH�H�D$8dH3%(uH��H[]�fD�CH����b�fD��USH��H�59cH��(dH�%(H�D$1�H�L$H�T$�o���tpHct$H�|$��%H��H��tiH���Q�C����H�+�CH�D$dH3%(��H��([]�@HcT$H�|$H�5a��Re�tNfD�CH��H�|$�Nd�H��H��t�H���>Q�ƉC��xUH���H
�CH��z�����C)�)H�=���xH
�CH��U���@H�5A��1�����2���H�5)��1�����s��Ca���AUATUH��SH��H�� �dH�%(H�D$1�H�������t%��H�D$dH3%(�H��[]A\A]Ð1�H�����u�L�,$M�eA�|$t!A�|$u
A�D$��w[L���#\H�$L� A�D$H���I�4$�P蔯��t�EH�E�o�����EH�E�W�������A�D$�ND
I�EH�$�Ao$H�I�T$H�PH�$H�8�v�_�H�$H�8�GH��BL� A�|$�O����;�����_���AWAVAUATUSH��XdH�%(H�D$H1����}H��1�H�t$��q����tdL�d$I�$�{t"�{u�C����H����ZH�D$H�H�;H��t�?uNH����1�1��ɇ�EH�E���H�D$HdH3%(�AH��X[]A\A]A^A_Ës�E
H�D$ H�D$H��pH�8��E
�=H��H��H�D$0�L�I��H��t�H���HN�H�������D$8�z�qH�@ܔH�D$H�D$�QH��E1�1�H�x��H�=�BH�D$(H�H��t?L�;M��t7Lcd$8L�l$0�L�;M��t#L��L��L���JN�uC�<'=��H��u�H�|$ M������\��v�D$8H�L$ H��E1�jH�t$@A� �PH�D$H�x��HcL$HX�ZH�t$0H�=�H��HO�H9���������EH�E�v���f�����C�A
I�$H�D$�oH�H�SH�PH�D$H�8�w�GH��BH��{����������H�@ܔH��H���H�D$�3�H�L$0H�����uaH�D$H��(H��t	�?���L$8H�\$0�F����3�H�D$H�8�o���fD�C�����L���@
H�L$0H����1�1��$�H�|$ ��@
H�|$0��@
�EH�E�L����L�|$(�9���fD�b��D����B
H�\$H�5t\H�D$H��H��I���Vm�I��H���d���L�%J\��H��L��1��3m�I��H���A���L���K�H�t$0L��H����K�u�L���#@
�����[�f��������SH��H�5�H��dH�%(H�D$1�H����h���tH�<$H��x�b�H�D$dH3%(u,H��[�@H����1�1��Ӄ�CH����A[���SH��H�5�H��@dH�%(H�D$81�H�L$H���Ph��udH�$H���H��x{H�T$H����H�t$ H�|$H�D$H�T$�UG����x@�������t0�CH�DH�D$8dH3%(��H��@[�fDH�a��1�1����CH��fDH�	��1�1��˂��f��CH��H���hH�L$ H�ߺH�5���H�L$(�H��H�5����I�����Y�ff.����ATI��H�5�USH��PdH�%(H�D$H1�H�T$��f��t$H�D$HdH3%(�/H��P[]A\��1�H�|$�|e���f���D$�H*L$�\�f���H*L$�^
��\�f��f/����H,�f���H*�f/���H�D$ �\��Yi�H�l$0H�\$ �H,�H�D$(�!�>�8uVH�D$0H�D$ H�D$8H�D$(H��H���OE�u�A�D$I�$�����H����1�1���A�D$I�$����DH��f��H�D$ �H*��L����dX�@��ATUSH�� dH�%(H�D$1�����H��1�H�t$�����trL�d$I�$�{t"�{u�C����H���ySH�D$H�H�;H�t$�����tWH�\$H���RG�ƉE����H���>
�EH�E��{�H�D$dH3%(��H�� []A\�fD�EH�E��f.�����C�p;
I�$H�D$�oH�H�SH�PH�D$H�8�w'�GH��BH��{�+���������[�H�D$H�8�ʐH�5ɮ�1��m��u� �����V���ATUSH��H��dH�%(H�D$1���t,�CH�H�D$dH3%(��H��[]A\�@1�H���Q����t�L�$$I�,$�}t�}u�E��w0H���hOH�$H�(H�UH����C�PH��fD����E�0:
I�$H�$�oEH�H�UH�PH�$H�8�v�C�H�$H�8�GH��BH�(�v�����U���AVAUATUSH�� dH�%(H�D$1�����1҉�I��Hc���d:
�H��H���4�����H�L�"A�D$��<t(A�D$����L�"L����PH�L� f�1�H�T$L����E���	H�މ��������H��`�H�1�L�KH�L$D�E�H��8jjH��Y^��� ����H�CL� A�D$���zA�|$tA�|$uA�D$����L���P���sH�CH�(�E�����}t!�}u�E���H����OH�CH�(H�CH�t$H��1��H�
߹H��uI��L�1��XZ�@H�t$H�
$}�1��hH�|$�>8
H���68
A�EH�D$dH3%(��H�� []A\A]A^�����f�H�|$H��t;�oAMH�GI�E�G����A�}�����GA�EA�EH�|$�7
H���7
�s���@���A�D$L�3�[7
I�H��Ao$H�I�T$H�PH�H�8�v�o�H�H�8�GH�H��@H�L�"A�|$�����A�|$�����A�D$����������A�D$L�3��6
I�H��Ao$H�I�T$H�PH�H�8�v���H�H�8�GH�H��@H�L� A�|$�2�������DH���6
A�EI�E�]���fD���A�D$L�k�B6
I�EH�C�Ao$H�I�T$H�PH�CH�8����GH�CH��@H�CL� �$���fDL���(�H�|$�G�=�������EL�c��5
I�$H�C�oeH� H�UH�PH�CH�8�v���H�CH�8�GH�CH��@H�CH�(���f���H�CH�8�K����H�t$H�
��1�1��I���|���fDH�CH�t$�1�H�
öH�I��L�1��Y|�y���@�+5
�^���fD���A�D$L�k��4
I�EH�C�Ao,$H�(I�T$H�PH�CH�8�v���H�CH�8�GH�CH��@H�CL� A�|$��������f.�����EL�c�\4
I�$H�C�ouH�0H�UH�PH�CH�8�v�o�H�CH�8�GH�CH��@H�CH�(�}����������O�ff.���AVAUATUSH��0dH�%(H�D$(1�����I��1�H�T$�H�t$�n�����uH�l$H�]�C��� �{td�{uV�C��vN����C�l3
H�EH�D$�oH�H�SH�PH�D$H�8��o�GH��BH�H���FMH�l$H�]�C��<t"�C���&H�]H���jJH�D$H�f�1�H�T$ H���?����H�D$E1�H�H�(H���âA�ƅ���H�`�M��E��1�H�L$H��8jjH�D$H��ZY����H�|$H�����oA$H�GI�D$�G����A�|$�J���GA�D$A�D$����H�D$(dH3%(�iH��0[]A\A]A^�f.�Hc�1ҿ�2
1�H��I��蔢L����1�H��辢H��1�H��H��轣��t����@H�L$ H��1�1���vH�|$ �1
M���X���L���1
�K���fD����C�`1
H�EH�D$�oH�H�SH�l$H�PH�}�v�q�H�l$H�}�GH�E�@H�]���H�L$ H�T��1��huH�|$ �1
A�D$�������C��0
H�EH�D$�oH�H�SH�l$H�PH�}����GH�E�@H�]�{������{�u����C���i�������C�_0
H�EH�D$�o#H� H�SH�PH�D$H�8�v
�q�H�D$H�8�GH��BH��{��������f�L���8�H�|$�G����#�H�l$H�}�3���D��H�D$H�8����fD��/
�j����K�f���AVAUATUSH��dH�%(H�D$1������1�I��Hc���#0
��H��H��������H�CH��@��<��H�L� A�D$���A�|$tL���FH�L� H��H�sL��L�KH�`�D�E�H��8jj��ZY���2H�<$H��tF�oAEH�GI�E�G����A�}vL����H�<$�G���GA�EA�EH���.
H�D$dH3%(��H��[]A\A]A^�f�����f�H����1�1��rH���c.
A�EI�E�@�K.
�~���fD���A�D$L�3�-
I�H��Ao$H�I�T$H�PH�H�8�v��H�H�8�GH�H��@H�L� ���DH�H���1�H�H�1��q����pI���AVAUATUSH��0dH�%(H�D$(1�����I��1�H�L$�H�T$H�t$�������H�D$H��@��<��H�\$H�+�E���-H�l$L�mA�E����L�+A�}t!A�}u
A�E���L���9DH�l$H�]�{�>�{u�C����H���FH�D$H��C<�1�<u
H�CH��PpH��H���m�1ҿHc�I���-
1�H��I���L���f�1�H���&�H��1�H��H���%���t�H�`�H�L$ M��E��H��8jjH�D$H�t$ H���	ZY����H�|$ H��tK�oA$H�GI�D$�G���xA�|$vL����H�|$ �G���GA�D$A�D$L���+
�f��;�H�D$(dH3%(�)H��0[]A\A]A^�f.����A�E�?+
H�EH�D$�AoUH�I�UH�l$H�PH�}�v�N�H�l$H�}�GH�\$H�E�@L�+A�}���������fD����E��*
H�H�D$�oMH�H�UH�\$H�PH�;�v
�ڼH�\$H�;�GH��@�z����H�+���H���1�1���nA�D$I�$�����H�D$H����1�H�H�1��n�������C�*
H�EH�D$�o#H� H�SH�PH�D$H�8�v
��H�D$H�8�GH��BH�����@���A�E�)
H�H�D$�Ao]H�I�UH�PH�D$H�8�v
踻H�D$H�8�GH��BL�(A�}������~�����s)
����)E�f���SH��1�H��0dH�%(H�D$(1�H�H�T$H�D$H�8�5��tmH�|$�)
H��SH�\$H�`�1�D�B�H�L�HH��8H���=��t1�H�L$(dH3%(uAH��0[�|$$v�H�������H�T$H�5D�����H�|$�(
��QD���USH��8dH�%(H�D$(1��|$H�D$����1҉�H��Hc����(
�t$��H��H�D$��������H�D$1�H�T$H�8�4����H��@ܔH�;H�����D$��~-H�T$�H�H�BH����H��H��BH��H9�u�H�T$A�E1�1���3{H�|$H��t�'
H�D$(dH3%(��H��8[]�f�����f�H�L$H�L��1��kH�|$�N'
�EH�E�H�|$�6'
�EH�E���H��&
E1�1�1�H��H�
U��H��}rH�;���B���ATUSH��dH�%(H�D$1�����H��1�H���I����ttL�$$I�$�{t!�{u�C����H����=H�$H��CH�;1ҍp�
H��H��tUH���1�ƉE����H���)
�EH�E�fD���H�D$dH3%(��H��[]A\�fD�EH�E��f.�����C�%
I�$H�$�oH�H�SH�PH�$H�8�w)�GH��BH��{�)�������f�諷H�$H�8��f�H�5��1����u�����0A���ATf�USH��H�5�AH��dH�%(H��$�1�H�L$H�T$)D$@)D$P)D$`)D$pHDŽ$��N�����H�D$H�l$L�d$@�D$@H��Ƅ$�H�D$HH�D$P�Ʈ	L���~�	���ti1��1����L���^�	H���	H���Ε1�1��5�H��$�dH3%(uHH�Đ[]A\�fD�CH���H��訲	�C1�H�=4���&
�CH���?�D��USH��H�5�H��(dH�%(H�D$1�H�L$H�T$H�D$�D$��L������^
H�t$H�����D$H�ǀ�H�L$�P�X����tSH�D$���H����A��H�ٺH�`�H�5�H���1���H�D$dH3%(u@H��([]�f�H�L$H��1�1���gfD�CH��1������>�@��AWAVI��AUATUSH��(dH�%(H�D$1���t6�����x�H�D$dH3%(��H��([]A\A]A^A_�DH�t$�1��?�L�-�������H����1�1���f1�L�d$I�,$�}t"�}u�E����H���9H�D$H�(L�}M���bA�1҄���H�A��>f.�H�  H���}H�H���
I��tTA���tL��C��-w�L��H��H��t�H���H��xH�8�A��L��H�5�'1����I��u�@A�FI����I����A��L��H�5�'I��hH�81��փI����I����fD1�H�T$H�t$�������t]H�l$H�]�{t"�{u�C����H���L8H�D$H�L�+�[���W����i����H���H��p����DA�FI����������E� 
I�$H�D$�oEH�H�UH�PH�D$H�8�w&�GH��BH�(�}�������fD�k�H�D$H�8�˃���C� 
H�EH�D$�oH�H�SH�PH�D$H�8�v
�#�H�D$H�8�GH��BH��{�������1��A����;�ff.����ATUS�2��/��H�BD�FA��D�J�,A��/�b��L��2���t9���A��tH��8��H����;
�@H��I���@�U�H�KHH����D�CPA��
L��H�5ݠ�
�H�K8H����D�C@A��L��H�5�����HcK�H�5��L���g��SH�sL��H���e�[1�]A\�fDH�rH�FH�BH�.H�pH�r����@H�K8H��tGD�C@A��
L��H�54��a�H�K8H���W����H�5#�L���`��\����
H�5��L���D�����H�B�f���ATUSH��dH�%(H�D$1���uoH��1�H�������tXL�$$I�$�{t!�{u�C����H���5H�$H�H�;�)�HcSH9�t@�EH�E�f.��+�H�D$dH3%(�CH��[]A\�fD1Ҿ
H�=���u
H��H����H���(�ƉE����H����
�EH�EH�$A�A��
H�=J�H��HH��
����f����}�?���H���/��2���f.�����C�
I�$H�$�oH�H�SH�PH�$H�8�w)�GH��BH��{�������f�苮H�$H�8��f��EH�E�+���H�5��1�茼�u�����7�ff.�@��AUATUH��SH��dH�%(H�D$1�H���H��*��ts����1�H���y������L�,$M�eA�|$t!A�|$u
A�D$��w~L���2H�$L� A�L$I�$�A�A�H�=\��
�EH�]H�D$dH3%(��H��[]A\A]�f������f��EH�E�f����A�D$�
I�EH�$�Ao$H�I�T$H�PH�$H�8�v��H�$H�8�GH��BL� A�|$�,��������6���USH��dH�%(H�D$1���uY1�H���2����tEH�,$H�]�{t�{u�C��wIH���1H�$H��CH�;��p�
�
D���H�D$dH3%(uqH��[]�@����C�
H�EH�$�oH�H�SH�PH�$H�8�w!�GH��BH��{�t����`������H�$H�8���5�ff.�f���ATUSH�� dH�%(H�D$1�����H��1�H�T$�H�t$�������L�d$I�$�{t�{u�C����H���0L�d$I�$�{t"�{u�C����H���g0H�D$H�H�D$H�3H�H�8�l�H��t?�E�@f����H�E�f��{�H�D$dH3%(�	H�� []A\�fD�EH�E��f.�����C�p
I�$H�D$�oH�H�SH�PH�D$H�8����GH��BH��{�����������C�
I�$H�D$�oH�H�SH�PH�D$H�8�w'�GH��BH��{����������H�D$H�8�ʐ��H�D$H�8�[����3�f���ATUSH�� dH�%(H�D$1�����H��1�H�T$�H�t$�������L�d$I�$�{t�{��H����(L�d$I�$�{t"�{u�C���H���o.H�D$H�H�D$H�3H��8f�����4�H����H�H���9"�ƉE���TH���
�EH�E�f.��[�H�D$dH3%(�:H�� []A\�fD�C���<�������C�\
I�$H�D$�oH�H�SH�PH�D$H�8����GH��BH����f��EH�E�d��������C��
I�$H�D$�oH�H�SH�PH�D$H�8�w'�GH��BH��{����������ӧH�D$H�8��f�軧H�D$H�8�?���fDH�5!��1��ŵ�u����81����ATUSH��dH�%(H�D$1���u_H��1�H��������tHL�$$I�$�{t�{u�C��wlH���T,H�$H�H�;���H��t8�EHc@H�E�f��{�H�D$dH3%(��H��[]A\�fD�EH�E��f.�����C�p
I�$H�$�oH�H�SH�PH�$H�8�w)�GH��BH��{�Q����=���f��[�H�$H�8���/�ff.�f���ATUSH��dH�%(H�D$1���uH��1�H�������thL�$$I�$�{t�{t|H���l%H�$H�H�;��?�H����H�H����ƉE����H���T
�EH�E�f.���H�D$dH3%(��H��[]A\�fD�C���x�������C�
I�$H�$�oH�H�SH�PH�$H�8�w5�GH��BH��+�����EH�E�l�����H�$H�8�f�H�5i��1��
��u�����.���ATUSH�� dH�%(H�D$1��D$�|$����1҉�H��Hc���
�t$��H��H�$������L�$$I�$�C��<u~H��@ܔH������D$��~$H�$�H�H�BH���H��H��BH��H9�u�H���H���n	�EH�EH�D$dH3%(�H�� []A\�D�{u�C��w|H���(�g���D�;��f��8�f
1ɾH�(��H��H����H�=��R�/����H�<$�W
�EH�E�T�������C�
I�$H�$�oH�H�SH�PH�$H�8�w'�GH��BH��{������-������H�$H�8���,�D��H�@ܔH�5H����"f���ATUSH��0dH�%(H�D$(1��G��tH�D$(dH3%(�'H��0[]A\�H�H�`�H��1��WL�d$H�(�GL�HH��8D�B�L��H����
��t1�E<��<t9H����1�1��LT�C�s����|$$v�L���1����H�}1�H���|��u�H�}H�T$��|��u�H�$H�8�u�H�D$H��x����H�(�X�H�ѳ�1�H�HI��1��S�k����H�MH��1�1���S�F����
+�ff.�f���ATUSH��0dH�%(H�D$(1�����1�H�t$�����unH��@ܔH���tbL�d$I�$�C��<uq��
H�T$H�t$H���H�D$H��D$H�H�<�WH�|$�
��#�H�D$(dH3%(��H��0[]A\�fD�{u�C��wH���%�t���D����C�
I�$H�D$�oH�H�SH�PH�D$H�8�v
�"�H�D$H�8�GH��BH��{������)����AVAUATUH��SH�� H�� �dH�%(H�D$1�H�������t+�.�H�D$dH3%(�NH�� []A\A]A^�D1�H�T$H�t$������u�L�l$M�eA�|$tA�|$uA�D$����L���o$L�l$M�eA�|$tA�|$uA�D$����L���@$H�D$L� M�,$L���,�IcT$I��H9�t�EH�E�0���fDH�D$L�0I�>��IcVH9�u�H���A�T$L���kw��t�H�D$H�H�8H����xt1������t�H�D$H�H�8迷���x���H�D$H�H�8���H�D$H�H�D$H�H�2H�8����T�?�Z8��A���P8�H�D$D���H���H�8��"����H�D$H���E1�H��HH�0�Q1��
g��EH�E��������A�D$�n
I�EH�D$�Ao$H�I�T$H�PH�D$H�8�v
�}�H�D$H�8�GH��BL� A�|$�����������A�D$�

I�EH�D$�Ao$H�I�T$H�PH�D$H�8�v
�
�H�D$H�8�GH��BL� A�|$��������H�D$�H�H�D$H�H�1H�8�����uH�D$H�H�8�<����H�D$�1�H�H�D$H�L�H�s�H�1��N1�������8��H���1�H��1��N�P����%����SH��H�� dH�%(H�D$1�H���w'��tZH�����$1�H�����D$�H�����D$�H����H�D$dH3%(uH�� [���CH����V%�fD��AT1�� A��U��E1�1�SH��@ܔ�H�{pH�CX�H�H�����H�
.���H�{H�CPH�ChH�C`Hǃ�Hǃ�H��0H��8H��@H��H�{T���tmD���H��U(D����<D����VD����K1ҾH�=>���H�����BH���H�@0H�@8H�@@1�[]A\�@��ATUSH��H�5�$H��0dH�%(H�D$(1�H�L$H�T$�K1�����H�l$f�:L�d$)D$H���D$ ��H��tXL��H��
�7�������SL���

�CH�H�D$(dH3%(��H��0[]A\���.H����H��t&L��H���7�~:���fDH��H����1��Kf��CH��|���H�L$H�m�1�1���K�CH��R�����"���AUATUSH��H��hdH�%(H�D$X1���t2������H�D$XdH3%(�%H��h[]A\A]�D1�H���Y������L�-�H�,$L�eA�|$t"A�|$uA�D$����L����H�,$f�H��L�d$H�D$P)D$)D$ )D$0)D$@H�EH�H�D$�M�1�H��L��L���
�	����8���H�;��dH�;�$
�CH�����@1�H�T$H������t�L�d$I�,$�}t"�}u�E����H���H�D$H�(�}�����H�@ܔL�-Hǀ����fD���A�D$�V
H�EH�$�Ao$H�I�T$H�,$H�PH�}�w+�GH�E�@L�eA�|$����������;�H�,$H�}�Ɛ����E��
I�$H�D$�oUH�H�UH�PH�D$H�8�v
��H�D$H�8�GH��BH�(����~ �ff.���ATU��S���8I��@ܔI��$��KcI��$(H��t�)"�I��$0H��t�'cI��$0�
"�H�=�X��H�=w��H�=��������މ�趦�މ��:�މ������މ����މ���F�މ��Y��މ���J[1�]A\�f���SH��H�5��H��dH�%(H�D$1�H���,���tEH�<$H��x'�C�.�H�H�D$dH3%(u+H��[�H���1�1��G�CH�����f�����u8USH��H����H��H���o�ƉC��xH����
�CH�H��[]�雾H�5�v�1��5��s��������USH��H����H�����H��H����Hc��H�ߺH�53�#�H���H��A��H�5��r�H���H��H�C��H�5A�H��HD��C�Hc��H��H�ߺ[H�5�p]��f�H��[]�f�髽ff.�����uPU1�H�=0�SH��
H����H��H��tTH���
�ƉC��x#H���{
�CH�H��[]�D�C�H�59u�1��ݡ�s����CH�H��[]�ff.�����u��
H�=����f��ۼff.���SH��H�5E�H�� dH�%(H�D$1�H�L$H�T$�D$�	*���tt�|$uUH�|$1�葬�|$u*�CH�H�D$dH3%(uLH�� [�f�H����q1�1��Oh��D�1�1���f���CH���>�ff.���SH��H�� dH�%(H�D$1�H�H�H�H�0�A<t@<t1�H�T$dH3%(ubH�� [�@�~u�H��H��H���s1�H�<$����~u�H���j��������t��S��t�H����1�1��
D�����AWAVAUI��ATI��UH��SH��8dH�%(H�D$(1����d���3H���*D�wL�?A���iA���0�e�C�<v	�� �L��C�4>DH�����)K���v� t�K�I�ƒ��I��A�
�q�@��	����0u	���A�
��0ufDI��A�
��0t��D$A�1�M��D)�D�Q�B�4A��	��A����A��
�&���B����A�x�7��Hc�H�I9��|A��uvD��L���rI�}H�T$ H��H���.k���up���	�@H���@H�D$�'�I�}E1�H��H�T$A���QH�|$�5�E���I�}H�L$ A�VL���f����	H�D$ H�8H�|$�G<t<v
�H�|$�G�G���l�	H�U�oEH�D$H��H�� H�P��v
H��胏H�D$�@H�|$H���@��fDH�D$(dH3%(�OH��8[]A\A]A^A_�DH��tӿ��	H�U�oMH�D$H��H�� H�P��v
H����H�D$�@�@I�4$A�D$I�}D�I��PD��A��-u�FL�^�HЀ�	�|��L�L�A�9uo<0u��wfL��L)�H��ZD��I�KA��0Mc�I9��A�CD�X�A��	w3��0O��H��H�N�PI9����D�X�A��	v�f�H�L$H��E1�A�j��I^_�����.����A�J�q�@��	�����I��A��D$A�
�������	�@H���@H�D$设I�}I�4$E1�H�L$H��A�D$A�j�P�EIH�|$(XZ�����.����߀�Eu�|$�!���]���Hc�H�I9��N���A���D���������I�x�H�5'�����������-������������
�����߃�A���V���DI��A������pA�
���@��X����A�JA�I������A��-tYM���y���H�T$E1��L��A��N�9����L$��� ����D$A�HM�PA������A��-u�L��H������I���D��L������A�xM�P�O�@�|$��uA�H�y�@��	v6M������|$�OЀ�	������L$�D$���A�����|$.M�Pu��D$�[������AWAVAUATUSH��(dH�%(H�D$1�����I���:I�΃�/��H�B�O���
L�<0��/��Hȃ��:D� A�^E��������B�<#H����	L��L��H��H��H�D$�
�A�VI�6J�|%�
����E<_�,<H����������H�HTTP_GETH9E��H�HTTP_ENVH9E���}_VARuyf�}Surf�H��H��1�1����<��H�GLOBALSH9E���E<_�l���H�_COOKIEH9E��H�_SERVERH9E���H��s���
H��`�H�t$��H�L$H����`����I�E�@I�U�B���t���BH����E1�A�jH�t$L��H����EXZH�|$��	1�H�\$dH3%(��H��([]A\A]A^A_�fDH�JH�AH�BL�9H�HH�JD� A�^E������������M�FH�|$L��1�H��y1�蝒H�l$�X�'���H�T$I�EH�
�y� ����I�HI�E�@I�M�A���t��AH�:��vI�E�oH�@H�GI�}��	����D���_�}_GET�b�}_ENV�u����}�k���H��H�ޛ1�1����:���H�i��1�1��:���fD��ucH�KIE_VARSH3UH�HTTP_COOH3EH	���H�VER_VARSH3UH�HTTP_SERH3EH	������}�����Z���f.���u;H�SION_VARH3UH�HTTP_SESH3EH	������f�}S���������fD����H�_POST_DAH3UH�HTTP_RAWH3EH	��R���f�}TA�F����}�<����������u#�}_POS����f�}T�������fD��	�H�_SESSIONH9E��H�_REQUESTH9E�����}�����`����H�HTTP_POSH9E������}T_VA�����f�}RS������}���������@���w���H�T_FILESH3UH�HTTP_POSH3EH	��R�������D�ÅH�D$H�8�x���fD�}������#�����}����������}_VAR�m���f�}S�b�������}�~��������������}_FIL����f�}ES������}������G���H���1�1��8������H�B�>������ATUSH�� dH�%(H�D$1����;H��1�H�T$�H�t$������L�d$I�,$�}t�}u�E����H���
L�d$I�,$�}t�}u�E����H���g
H�D$H��PH�8�r1���H��H���H���;��ƉC���&H���	�CH�H�D$H����H�D�EH�E����H���u}H�L$�rA�A�H�9���OH�H�������u-��{vH��貃�CH��
D��H�D$dH3%(��H�� []A\�fD�J��	���	H�=�tH������������	H�=�tH�����������E���0����H�5�tH����������F����
H�5�tH����������'����H�5�tH����������������������H�=tH����������j���H�D$H�H�8E��t1���ܓ�������H�D$H�H�8脜�������H�D$D�EH�H�������CH����������H�=�s����fD����E��	I�$H�D$�oEH�H�UH�PH�D$H�8����GH��BH�(�}�'�������f�����E�0�	I�$H�D$�oMH�H�UH�PH�D$H�8�wF�GH��BH�(�}�����fD�������H�=�r���fD�H�D$H�8뫐��H�D$H�8�<���fDH�5Qc�1���s����h������t/H��t"H�@ܔH���H��HD�H����D��ATI��USH����$�	H��@ܔ�@H���@H����3�H�3�CI�<$D��PI��D��A��-���HЀ�	wm��L�L�A�9u`��v<0tWL��L)�H��KD��I�KA��0Mc�I9���A�CD�X�A��	w$���0O��H��H�N�PI9�t?�D�X�A��	v�H��H���E1�A�j�B<XZ[]A\�L�^�F�Y���A��-t,M��x�[H���A�]E1��L��A\�AA��-u�L��H��x�I����ff.���AWE1�AVAUATI��H�5�USH��dH�%(H��$�1�H�L$<H�T$@fD��$�L�D$PH�D$@�D$<H�D$HH�D$P����tWH���H����J��t1�����H�D$H�H�5��H��H�D$�V�����H�D$HH��xtGA�D$I�$H��$�dH3%(�H�Ę[]A\A]A^A_��H�:�H�8L�t$XH�l$`��\1ҿ�p�D$Hc��p�	1�H��H�D$H�D$HI��H�H�8�C]�}�H�D$XL�8A�G<t1�Ao)D$`I�WH�T$p<vH���~�|$tI��tH���I�?���	H�H�D$XL98t�|$tvH���}H�D$H1�H��H�H�8�]H�D$H1�L��H�H�8�]���g���HcD$H�t$H�|$PH��tH����1�1��80L��L�|$`��H�d)B�H�)B�H��$�H�D$ @H�T$@H�t$�|$�
����\��?t�1�t���-H�l$ Dˆ�$���H�	H��H�D$`�@�@H�&(BL�0M����L����ƉC���]L�����	H�H�D$`�@H���a��I�ƃ����]��0���C�<vD��H�� u!H��H�����)��S�D�v� t�S�H�ƃ��H����z�@��	����0u	����A�
��0u@H�����0t��D$(A�1�I��D)�D�R�B�<A��	�rA���X�|$,A��
���|$,��������A�x�7��Hc�H�I9���A�����
1�H����A�T$Hc؀��1���uI�D$L��PpH��H�T$H���V�����H�l$HH�]�{�)�{���C��������C�[�	H�EH�D$H�oH�����9A�T$A�����U1���uI�D$L��PpH��H�L$D��H����Q�����H�l$HH�]�{���{uV�C��vN����C���	H�EH�D$H�oH�H�SH�PH�D$HH�8��	�GH��BH�H���H�D$HH��C<�1�<u
H�CH��PpH��A�E1��1�L����;���@�CH��/����A�T$����1���uI�D$L��PpH��H��L��D��E1�jA�H����5ZY�H����I�<$������.�����V�z�@��	�n���H��A��D$(A�
�;���f�H�BH��PpH������fDI�<$�c����H�;���H�`�H�L$�H�5��H����O�����������fD�D$��~/�D$H�t$��H�\��I�}H��t��	I��I9�u�H�|$��	���f���߃�A��������I��A��o���H�5iZ�1��
�H�\$`�s�����xH�D$HH�8���fD��.����߀�Eu�|$(��|$,������Hc�H�I9�����A����������M���I�x�H�5R�����5�����-�������$��������]����fDA�T$��to1���uI�D$L��PpH��A�E1�L��H�޹�g9�"���f�I�<$�����xA�
���@��X�����VA�H������I�<$렋t$(�������D$(A�PI�pA��|$,���A�PI�pD�R�A��uE�PA�z�@��	v)�|$,I�����D�R�A��	������D$(����.I�pD��u��D$(�ff.�f�������������ATI��@ܔ1�1�UA���1�SI��$���fA��$X
H�`ɔADŽ$P�����o�oPIDŽ$H
ADŽ$P
����A�$�A�$�IDŽ$�IDŽ$H��/1��I��$p
�H�H��EIDŽ$(I��$h
H�����I��$0I��$8���A�ع��H�=gI��$h
H�E�r�
A��1ҹ�H�=�f�W�
A�ع��H�=�f�9�
A�ع��	H�=�f��
A�ع��H�=�f�
A�ع��H�=�f�ߒ
A�ع��H�=�f�
A��1ҹ�H�=�f覒
A�ع��
H�={f舒
A�ع��
H�=jf�j�
A�ع��
H�=Yf�L�
A�ع��
H�=Hf�.�
A�ع��
H�=7f��
A�ع��H�=&f��
A�ع��H�=f�ԑ
�\��ٺ�H�=f��
�D��ٺ�H�=�e�Ĕ
�,��ٺ�	H�=�e褔
���ٺ�H�=�e脔
���ٺ�H�=�e�d�
�܇�ٺ�H�=�e�D�
�ć�ٺ�H�=ne�$�
����ٺ�H�=Ue��
����ٺ�H�=<e��
�|��ٺ�H�=#e�ē
�d��ٺ�	H�=
e褓
�L��ٺ�H�=�d脓
�4��ٺ�H�=�d�d�
���ٺ�H�=�d�D�
���ٺ�H�=�d�$�
���ٺ�
H�=�d��
�Ԇ�ٺ�H�=d��
�����ٺ�H�=Y��ǒ
���ٺ�H�=Md誒
��H�=ѱC��މ�賢�މ��:i�މ��a��މ����މ��r�މ��Fg�މ��m�މ��$&�މ����މ����މ���މ����މ��,�މ���މ����މ����މ��!�މ���'�މ��	�މ��yH��`�H�=`3�%}H����H�=���}H��`��H�=��|H�ƀ_�H�=���|H�Ơ^�H�=W���|�މ���S[1�]A\�f���ATUS��tsH��H��~;������u}H�@�H���H����H����1�[]A\�f.���uKL��H��E1�H��H�5�b��[]��A\�������@1�H��b�1��K"[�����]A\ÐH����[1�]A\Ð��E1�1ɺH�5�H���%�I��H��t"Hc�H��H���nL���Œ[1�]A\ø�����B������AWAVAUATI��USH��HdH�%(H�D$81�H�D$ H�D$(H�D$0�����q���@���'1�H�L$(H�T$ �H�t$L�D$0诗����nE1�E1�L�|$I��{t%�{u�C����I�H���%�
H�D$H�H�l$ L�;�[H��t+L�uA�~tA�~�GH�}�>�
H�l$ H�ED�0H�T$(H��t4H�*H�T$�}t"�}u�E���HH����
H�D$(H�(L�mL�D$0M��t4I�(L�D$�}t"�}u�E����H���r�
H�D$0H�(L�EL���L��D���v���A�D$���tiI�$H�D$8dH3%(��H��H[]A\A]A^A_���H�t$�1��V�H�d`���������1�1���A�D$I�$��1�H�T$ H�t$��
������H�l$ L�uA�~t%A�~u
A�F���mL�����
H�l$ L�uL�|$I��{�bE�6E1������裖����fD1�H�L$(H�T$ �H�t$�}�����<H�l$ H�]�{t"�{u�C���CH���K�
H�D$ H�H�l$(D�3H�]�{t"�{u�C���?H�����
H�D$(H�L�+�g����A�F����������A�F�"�	H�EH�D$ �AoH�I�VH�l$ H�PH�}����GH�E�@�X��������C���	I�H�D$�oH�H�SH�PH�D$H�8���GH��BH��{�������@H�Y^���@����E�X�	L�D$I�H�D$0�o]H�H�UH�PH�D$0H�8����GH��BH�(�}����L�E����f�����E���	H�T$H�H�D$(�oUH�H�UH�PH�D$(H�8�wr�GH��BH�(�}�_���L�m�j���fDL�;E1�[��f.��jH�D$H�8����fD�jH�l$ H�}�b���D�jH�D$(H�8�|���fD�sjH�D$0H�8����fD����C��	H�EH�D$(�o3H�0H�SH�PH�D$(H�8�v
�"jH�D$(H�8�GH��BH��{�p����[���f.����A�F��	H�EH�D$ �Ao&H� I�VH�PH�D$ H�8�v
�iH�D$ H�8�GH��BL�0�5���f�����C�@�	H�EH�D$ �o+H�(H�SH�PH�D$ H�8�v
�RiH�D$ H�8�GH��BH��a�������ff.�@��ATI��UH��1�S��H����uH��H�t$�(��H�t$��H��M��H���[]A\�,���ff.����SH���dH�%(H��$�1�H�@ܔH�8t?H�`�H�|$H��H��H�T$�P������t8H�`�H�L$H��H��$�dH3%(u2H���[�f�H��@ܔH�;��4H�;��	H������ff.���H���dH�%(H��$�1�H�@ܔH�8tDH�`�H�|$H��H��H�T$������t9H�`�H�L$H������H��$�dH3%(u&H����fDH�@ܔH�5���H�8�*6������S1�H���H�=Z�E�1ҾH�=ZH�C�.�1ҾH�=�YH�C��1ҾH�=�YH���1ҾH�=�YH�C ��H�C[�@��USH��H�5ϦH��HdH�%(H�D$81�H�L$H�T$�D$L�D$������H���H�|$�xt1���w����H�|$���u~�|$��H�l$H�����H�|$H���1f	���t�|$uu�CH��K��|$t1H���1E1���uv�C��x1��;�{vH���e��CH�H�D$8dH3%(uSH��H[]�fDH����D1�1��?;��D�1�1��9�:���1��;뤿�;�{v���%��D��AVAUATI��H�5V�USH��@H��`�dH�%(H�D$81�H�L$H�T$�D$D�� �������L�l$I�m�}t�}u�E���H���"�
�|$��ǃ H�l$H���p���H�=�W�T�H��I��H��H�D$H�8�~�	L���t^��	�|$D�� u3A�D$I�$H�D$8dH3%(��H��@[]A\A]A^�@L���xC1�1���9��D�3�	�|$D�� t1���9f�A�D$I�$닺1�1��"8����D����E��	I�EH�D$�oEH�H�UH�PH�D$H�8�v
�cH�D$H�8�GH��BH�(�}���������<��f.�f���SH��H�?�G<t-<t	[���H�H��t�H������H�;[�����H�?��/H�H�8����H�;[����@��AUATUSH��H��X�
dH�%(H�D$H1���/��H�B�q�ω2H�,8��/����H�
L� I�$H��t=H�8H�L$�H�5gw�?9����NH�D$H��H�H�8�3���3H�H�L$�H�5wH�8�8����H�D$L�l$ �L��H�H�0�im������H��E1�1�1�L���������I�<$H���H�8H�L$�H�5�v�8�����H�D$H��H����H��q�1�H�BH���H�����*t��?�����H��H9�u�H�D$H��B��~BH��p�H�BH��H�����*t��?�����H��H9�u�9�~
H�I�$fDL���8���1�H�\$HdH3%(u;H��X[]A\A]�H�JH�AH�BH�)H�HH�J�H���@I�$�1��Z������H�B����AUATUSH��(dH�%(H�D$1�H���JI���Ӄ������3��8��H���L�@��@H�H�D���H���'�@��@H�D$����H����@�H�@H�D$����H��H����A�1�1�H��H�
�����H���DH��E1�H�
��DA�H�=��DH�(H���D�@A�D$jI�4$�P�I�$H�D$H�A�T$H�D$�P�@I�$H�D$ H�L�l$ A�t$A�EA�u_I�}AX�}�	I�EL�d$Ict$I�<$��Ic|$���2�	E1ɺ�^E�T$E��(���A��*��D�I��D��E9L$~CI�$D�R�ZHc�Ic�H�F�	Hc�H�H�A��.��A��?u��.I��D��E9L$��$E1�A�H���H�L$H���I�$H�5gsA�\$j�kXZH�5esH�L$H��E1�H��jA���AY^H�D$dH3%(�BH��([]A\A]��\�.��H��A��Hc���H�8�����.�*���H�=��Dt�H��H��t�����H��H�����uH�}�@�@H�D$���	�UH�H�D$�P�@A�t$I�<$��	A�t$H��H���4H�L$E1�H��H��H�f�DA�T$A�jH�8���NA[]H�D$dH3%(uRH��(H��[]A\A]���f�H�pH�H�q���H��B��H�=��H�����Y������@��AT1Ҿ	H�=�qU1�SH��PdH�%(H�D$H1��H��t�8H��u"H�L$HdH3%(����H��P[]A\�f�E1�1�1�A�H�
8���I��)$H�=z�D)D$)D$ )D$0H�D$@����tdH�5ӛH�������D$@H�D$H�D$H��t)H�
*�D�L��H�\$H�F����$�	�F���H��H�5�p� �Tj������(�������D��H��1Ҿ	H�=�p�H��t�8u1�H���@H�=��D�(1�H���ff.�f���AW1�AVAUATA��H�=ppUSH��	H��XdH�%(H�D$H1�H�D$ �|�H���C�8�:A���H�l$ 1�H�T$0D��H���Ƀ�����L�t$ M��tM�.A�E��uU�H�=���`
H���H���H���BH�8H��H�5�o�{1����"L�t$ M�.A�E<t$A�}u
A�E���
L�����
H�D$ L�(A�uI�}�@�	H��I��H�D$���L��H����A���sL�|$L�d$(L�����L��L��H�=,�D�P��0����H��L�t$@E1��[�H�D$(H��H�L�(H�C�PpH��p3[L��L��A�H�|$H��H����,L�->@H�D$(H��L��H�H�8�m0���H�D$ H�=��DH��HH�0�QL���E0�����H�D$(H�H�0E����H�CH�t$H��PpH�T$H�t$E1�A�L��H���5�n���fD�ۂH�D$HdH3%(��H��X[]A\A]A^A_��H�)n�1�1��K�CH��fDL�l$0M�eA�|$t~A�|$ufA�D$��v\���A�D$��	I�EH�D$0�Ao$H�I�T$H�PH�D$0H�8�v
�XH�D$0H�8�GH��BL� L���A�
H�D$0L� L�t$E�<$L�d$(L�����L��L��H�=%�D�P��.����E����H��L�t$@��H�D$(H��p3[L��A�H�H�|$H��H�;H�0��*���fDH�T$H�;E1�L��A��4���f.�H�|$��	�f����H��l���@���A�E�_�	I�H�D$ �AoEH�I�UH�PH�D$ H�8�v
�pWH�D$ H�8�GH��BL�(A�}���������E1�L�l$8H�L$1��M��H�5�H�=��DH�D$8�m'H�|$8t
L�l$(���L��$H�5TlH�=��D�p-��������H�|$��	�CH��b����h�����SH��H�5
�H�� dH�%(H�D$1�H�L$H�T$�n����tV�D$�P��T$��tbH�L$�����H�=�kf���2��H������H�L$34��T$��u���CH�H�D$dH3%(uH�� [�D1������f.�D��SA����<�H�=`o�[s
A�ع��H�=To�=s
A�ع��H�=Do�s
A�ع��
H�=4o�s
A�ع��H�= o��r
1�[�ff.�@��AU�$$ATI��H�$$$$$$$$USH��xfoXodH�%(H�D$h1�H�l$ �D$\1��D$ H�L$L�L$D$!L�D$H�u1H�5�f�U9H�T$H�D$EE!�E;$�����tiH�t$H��t�|$<�<NT$H��=Hc����|$ t`H�|$H���c��H��H������A�D$����H�����	A�D$I�$H�D$hdH3%(��H��x[]A\A]���D$ $1$H�]L�-�m�QH�M@H��H��H����?A�T�S�H9�u��QH�MH��H��H����?A�T�S�H9�u�$f��/����H�5!5�1���aA�t$�2����6��fD��AWAVAUATUSH��(dH�%(H�D$1����H��1�H�L$H��H�T$��{�����L�$$I�,$�}t�}u�E��� H���8�
L�d$I�,$�}t�}u�E����H����
L�d$I�,$�}t�}u�E���H�����
H�$H��pH�8�D�	I��H�D$H�H�D�0H�D$H�H��(H�$H�D�h�$��H�I��@�ŋ���A���cH�
�lHc�H�>��f.��{H�D$dH3%(��H��([]A\A]A^A_��1�fDA�Ƌ���A���%H��lHc�H�>��@1�fDM��t8E��~3A�E�L��I�tf��H��t�DH��t���H��H9�u�L������C���8L�#�C�A���@H�
�n��H�
�p��H�-�l�D���@H�
�r�d���@H�
�l�T���@H�-qr����@H�-an����@H�-Qp��@@��H�=k1�1��1��
I�����DA��H�5k1�1����1���������E�`�	I�$H�D$�oUH�H�UH�PH�D$H�8��
�GH��BH�(�}��������f�����E��	I�$H�D$�oMH�H�UH�PH�D$H�8����GH��BH�(�}��������f�����E蠽	I�$H�$�oEH�H�UH�PH�$H�8�w(�GH��BH�(�}����������OH�$H�8��f��{OH�D$H�8�\���fD�cOH�D$H�8���fDH�5�0�1��m]���������USH��XH�|$H�t$H�|$dH�%(H�D$H1����QH��赼	H���H��t{HcSH��W�D�D�SL��H�����{�s���D�CHcCufH��@W�H�‰���QAS���AR��W��)�k�d)�H��qV�PH��1���(�EOH�� H�L$HdH3%(H��u,H��X[]�DH��W���lH��ASH��qARWV�����ff.���USH��H�5�H��hdH�%(H�D$X1�H�L$H�T$L�L$L�D$�������)H�t$H�|$f�H�T$ )D$ )D$0)D$@H�D$P�ھ�H��H���H���~HcL$ �H��H�5�0��HcL$$�H��H�5�0�ԃHcL$(�H��H�5�0軃HcL$,�H��H�5�0袃HcL$0�H��H�5�0艃HcL$4�H��H�5�0�p�HcL$8�H��H�5�0�W�HcL$<�H��H�5q0�>�H��	H��A�H�5Rp葊H�D$XdH3%(uH��h[]�f.��CH����.��f.�@��USH��H��(dH�%(H�D$1�����H���H�AH��PpH�L$�H�5y�H���"����^��;H�|$1�A�A��H��o1�������:H�����hp���@�����N8H�Ø��;9���H�D$dH3%(�H��([]�f���u[1�H�t$��
t���tE�P;H�|$1�A�A��H�o1�������9H���o����CH����t�y���fD�:1�1�A�A��H���H��n�01��79H�������@��H�wo�1�1����CH���������t�F7��������H�o�1�1����CH������>��ff.���SH��H�� dH�%(H�D$1�����H���H�AH��PpH�L$�H�5��H��� ����7��9H�|$1�A�A��H��m1�������/8H�������@��1�1�H���MJH�D$dH3%(��H�� [���u[1�H�t$��*r���tE�p9H�|$1�A�A��H�.m1�������7H���~����CH�����r�y���fD�91�1�A�A��H���H��l�01��W7H���(����@�HpH��m�1�1��0��CH�����H�Im�1�1����CH�����v��fD��USH��H�$H��(dH�%(H��$1�H����H����H�AH��PpH�L$�H�5��H����������"8H�|$1�A�A��H��k1�������_6H��t&���@��H�l$H��H���-_H�����CH�H��$dH3%(�GH��([]����uk1�H���<p���tW�7H�<$1ɾ����A��A�H�<k1��5H��t����@�a����HpH��k�1�1���]������p�]���fDH��H����������!�%����t��H������D�H�VHD���H��H)�s諷	�CH��������61�1�A�A��H���H�}j�01��4H�����������H�k�1�1����CH�����F��fDAVAUATA��UH��H�5dSH�� dH�%(H�D$1�H�\$H�L$H�D$H�T$I���7������H�T$H��t)�FA�1�H��A��H��|�����1��>4H��H�|$��\H��H����I�Ƙ�D�hp����A�>���u[A���u=E�.E�����EHcCpH�EH�D$dH3%(��H�� []A\A]A^�@D���3E�.E��t��>fD��1A���t����EH�E�f.��E�f.�H�5Y�DH���A{H�L$D�D$H��A��H�5I�ݜHcKp�H��H�5L��ՙ�;������ff.���H��������1��ff.����SH�=Yh��H��dH�%(H��$�1�����H���D$	H�D$H�lhDH��$�HDŽ$�HDŽ$�HDŽ$�HDŽ$PHDŽ$XHDŽ$8HDŽ$HHDŽ$�HDŽ$�HDŽ$�HDŽ$�HDŽ$�HDŽ$�HDŽ$�HDŽ$�H�D$DŽ$hHDŽ$`HDŽ$@HDŽ$HDŽ$��G�A�عH���DH���D��/H�=�ff�c�D��d
�:A�عf�H�D�H�<�DH�=�f�d
A�ع��H�=�f�`
A�ع��
H�=�f�l`
A�ع��H�=�f�N`
A�ع��
H�=�f�0`
A�ع�@�H�=�f�`
A�ع��	H�=wf��_
A�ع� �
H�=bf��_
�W$A�ع�H�=Qf�_
H��$�dH3%(uH�Ġ1�[����D��1��e���D����R���f���USH��H�5r H��(dH�%(H�D$1�H�L$H�T$�����taH�|$����u*�%�H�=*�����u�CH��<��˰�(��蒸�A��1�H��H��e1��w��CH�H�D$dH3%(uH��([]�������USH��H�5y�H��(dH�%(H�D$1�H�L$H�T$������t0H���H�|$�xt1���ZQ��tH�|$�Z��t(�CH�H�D$dH3%(��H��([]�f�H�|$����ubH��@ܔH��PH��t�?/t�U�	HDžPH��XH��t�?/t�4�	HDžX�CH��|���f��{��(���B��A��1�H��H�7d1��'��:������ff.�f���USH��H�$H��dH�%(H��$1�����H��H��H��茺�H��toH��H����������!�%����t��H������D�H�VHD��H��H)�s��	�CH�H��$dH3%(u'H��[]�fD�CH����h�����ff.����AWAVAUATUSH��H�5f�H��(dH�%(H��$1�H�L$H�T$ H�D$ H�D$(L�D$(�����t<�|$��=H�t$(H�ƨ��tOH�pc�1�1����CH�H��$dH3%(�}H��([]A\A]A^A_�fDH�l$0H�|$ f�1�H��)D$0)D$@)D$P)D$`H�D$p���t���6�CH��f�H�|$0�H�|$8�H���nH�|$0��H��$�E1�E1�I����H�D$�D1����OH���OH�D$8J�< 1��U���7H�D$8J�< �D$) t2H�T$H������u,��$�%�=@uH�D$8J�< H���H��譆I��L9|$0��H�D$8A�}N�$�J�<��R���I���H��t��8�_����r����H����xuH���H��t;�8t6H�t$ H��$���k���������$�%�=@�v���H���Tm�����H��`1�1���n��CH�����fDA�����DH���P��E�������H�;���������{�����H���;���H������l����~��ff.���ATUH��H�5�_SH��0dH�%(H�D$(1�H�\$ H�L$H�D$H�T$I��L�D$H�D$ �\�������D$���H�L$ H��t)�;1�A�H��A��H�r�����1��W)H��H�|$H�|$H�t$tzI�`XX1��4_�Å�xzH����k��t8�C�1�L�$�DH�D$1�H��H�4H���i�I9�u�H�|$誨	H�D$(dH3%(��H��0[]A\�DI�PXX1��^�Å�y��ߩ�8H��襱�H��^1�I���1����EH�E�DH��_�1�1��c��EH�E�h�������f.���AWA��AVI��AUATA��USH��H��(dH�%(H�D$1�����H�����A� H����DD�L�H��t
�}���sL���<�	H�D$H�Ǿ
���H��H����H�|$�d�	H�5�^H���e��H�����f�xH��u
�x�2�D�ChA�����=�*��H�K D�CD�K�C	jH�K_D��1�jh�2P1��/�H�� H���#��A�FI�H�D$dH3%(�aH��([]A\A]A^A_�@H��L�$���A��L�$H���Hc�H�|$�|�/��A�/H��1�1�H���AH�|$����DH�D�Kd�Ce�;����1ҾH�=�]A� �7�H���v����D���謨H���H�߉��臣H��H���pA���!E���A�FI����諳�H�L$D��1�I��H��]1����苳�H�|$葥	A�FI����L�Ͼ/H�D$�N��L�$H�T$H������H�]�1�1���A�FI��_���fDH�5�\H���1��H������H���P��H�D��1�H�]1��:�A�FI�����f�M��H��H���1�1��@H�|$�<���H���[���t8H�C@H���������D��Ѓ�������H�K H��]D��1�1���H��賶�A�FI�������ff.�f���ATUSH��dH�%(H�D$1����H��1�H���^�����L�$$I�$�{t�{u�C���H���(�
H���H�
]�x���x��H�$L�A�x��1H�@��H�='[H�H�������t=�H�=[H�������t#�H�=�)H��������D1�H��L���>���H�`�ƀ��fD�^H�D$dH3%(��H��[]A\�fDH�Y\�1�1��+��EH�E�D����C蘢	I�$H�$�oH�H�SH�PH�$H�8�wQ�GH��BH��{����������H�\1�1�����EH�E�2���D�[4H�$H�8�f�I�1�H�\1���h�H�$L������׽����H���H�5�Y�1��Rcf�AWAVM��AUATI��USH��H��H��hH�T$L�|$PH�ډL$L��D�D$A��dH�%(H��$X1�I�蕭���H�H�L�K
M9����k�C	L�L$ ��	�D��O�,f����M9�����S�t$��	�A�Ӂ��t��9����|$L�T$0L�L$(D�\$�����C��D$<�͠	H���I�H���oH�RH�P��cI�>L���A�H�5��pD�\$fA��&��H� \A��L�L$(L�T$0Hc�H�>��E1�H��$XdH3%(L���H��h[]A\A]A^A_ÐH�CI9�r�I�>A�H�
V[�H�5���&p�K
I�>�H�5?f�����h�KI�>�H�5nZf�����xhH�KL9��[����[I��H�L9��H���I�>A��H�57��qH�KL9��!����I��H�L9�����I�>A��	H�5�Y�eqH�KL9����D�+M��I�M9�����I�>�H�5FA��+qH�|$L��L��A��L���2�������I�>H�A�L���H�5�I��n�I�>A�H�
al�H�5��nD�|$<I�>�H�5$YA�D���@g�.���I�>A�H�
�Y�H�5��nL�KM9�L�L$�����D�C
I�>�H�5�XL��L��L�D$ ��fL�D$ ��L�L$��I�hH��I���*<�p�C�����D$(L����H��1�H�L$H�5��:E1�H��L�KH�L$��I�YL9��U���I�D$�L�l$0I��L)�L�d$@I��H��L�t$HE��I�DL�|$ I��l$(H�D$�Rf�L;l$ vA�E:E1�I��L����H�51��y9H�I�I��I���wI��L;d$����A�T$�L���A�T$���f	�u������l$A�E:I��A���@H�CH�D$ L9��~���I�>H�
�W�H�5n�A���l�K
I�>�H�5Wf�����NeH�\$ H�|$L��L��A��H��谨�����H�H�I��I�>A�L���H�5/:�sl�~���fDI�>A�H�
VW�H�5���GlH�KL9�������[
I��H�L9������I�>A��H�5PV�mH�KL9������D�+M��I�M9��m���I�>A��H�5�&��m����fDI�>A�H�
�V�H�52�L�L$�kL�L$L��L��H�l$A��L��H��葧������L�L$H�I�>A�L���H�5�UI��QkL��H��L��A��H���J�������H�I�>A�L��HúH�5�:�kL�kM9�������I�>�H�5>Uɉ��yc�KI�>�H�5*Uɉ��^c�KI�>�H�5Uɉ��Cc�KI�>�H�5�ɉ��(c�KI�>�H�5�Tɉ��
c����H�CI9����I�>A�H�
U�H�5���Bj�C
H��L���K
H�ZT�PD�C1�D�K�I�>YA�^L��H�5�%��i�����L�kM9��c���1�L�t$M��H�l$ A���9�M9�vA�$:1�I��L����H�5B1��5H�I�I9����UH�����U���f	�u�E���'D�t$A�$:I��D����@I�>D��A�E1�H�
XT�L�T$(H�5��L�L$ �.iA�|$Hc���	L�L$ L�T$(L�l$H��E��L�t$1�H�L$M��M�����DA�A9���HcЍhD��A�)�H�H�4L9�HM�H��t�Ic�I�tH|$H��虭���L�kM9�����I�>A�H�
�S�H�5���rh�K
I�>�H�5�Rf������`�KI�>�H�5�6f������`�KI�>�H�5d�f�����`H�|$L��L��A��L������t���H�I��Z���f.�I�>A�H�
�R�H�5J��g���f.�I�>A�H�
s0�H�5��g����f.�I�>A�H�
TR�H�5���_g���f.���ut�:0I��fA�T$�����E�����:0I��fA�E����@H�L$L�t$Ic�E1�E���L�l$H�5.Q�I�>��h���A���1���L��A��D��L�t$D��t�E:H���EI�>A�H�
�Q�H�5��fI�>L���A�H�5�P�sf�~���D�������D$P:L�K�D$I�OA���D$(H���b����:H���I�>L���A�H�5�PL�L$�fL�L$M9�wiM�������D$P:<v��C��t��L$�D$Q:�L$(I�O����E��L��I��L�l$0L�d$@L�t$HL�|$ D��t��t���E1��D$(L������H�|$L��L��L��A��蜡�����L�L$I�>H�A�L���H�5�wM�,�\e�g����"��f���ATUSH��0dH�%(H�D$(1�����H��1�H�t$��O�����L�d$I�$�{t"�{u�C���H���5�
H�D$H�H�L�d$�
L��H��������L�d$H�޿L���������L����H��tyH�8H��tq�?tl��	H��H��toH��跟�E����H�]�E�f���OH�D$(dH3%(��H��0[]A\�fD�
�L��膵��@H���x�	H���H�QP�1�1��;��EH�E�D����C訓	I�$H�D$�oH�H�SH�PH�D$H�8�w'�GH��BH��{����������%H�D$H�8��f�H�5��1��3��������ATUSH��dH�%(H�D$1�����H��1�H���M�����L�$$I�$�{t!�{u�C����H���(�
H�$H��{@��H�H���<��H��tgH�@H�H��t[�8���H����	H��H�����E����H�]�E�	@�NH�D$dH3%(��H��[]A\�fDH��踔	H����@H��N1�1���v�H�$H��pH�8�u�є	�EH�E������C�Б	I�$H�$�oH�H�SH�PH�$H�8�w)�GH��BH��{��������f��#H�$H�8��f�H�5)�1���1���C����ATUSH��dH�%(H�D$1�����H��1�H����K�����L�$$I�$�{t!�{u�C����H���X�
H�$H��{@��H�;�o��I��H��tH�xtxH����SI�D$H�H��t;fD�8���H��H���ilI�D$H�H��H��u��
D�+LH�D$dH3%(��H��[]A\�fD�EH�E��f.��@H��L1�1�����EH�E������C��	I�$H�$�oH�H�SH�PH�$H�8�w)�GH��BH��{�������f���!H�$H�8���}��ff.�f���AUATUSH��H�$H��H�$H��(dH�%(H��$ 1�I���������1�H�T$H����I�����L�,$I�m�}t�}u�E����H���[�
L�l$I�m�}t�}u�E���JH���2�
H�$H�(�M��� H�D$H��P���
L�(H�=�IL���k���#L��H�=l'�T����L��H�=�I�=���EL��H�=�I�&���8L��H�=Z[����+L��H�=+I���L��H�=5I����L��H�=�H�ʨ��L��H�=!I賨���L��H�=�H蜨���L��H�=�H腨���L��H�=�H�&�i����L��H�RH1�1�����A�D$I�$�f��IH��$ dH3%(�`H��( []A\A]�fD1�H����G���t�H�$H�+�}t!�}u�E���H���U�
H�$H�(�u�H�wG��tBH�}H�L$�ھA� ��A�D$��x1I�$�N���f�H�FG�1�1����A�D$I�$�������f�����E�@�	I�EH�$�oMH�H�UH�PH�$H�8�v�SH�$H�8�GH��BH�(�}�������@����E�؋	H�H�$�oEH�H�UH�PH�$H�8�v��H�$H�8�GH��BH�(�}��������D����E�p�	I�EH�D$�oUH�H�UH�PH�D$H�8�v
�H�D$H�8�GH��BH�(�}�\����O���f���;�����1������'���������������	���迦�����!���#������SA�����H�=�E�[:
A�ع��H�=kE�=:
A�ع��
H�=TE�:
A�ع� �H�=@E�:
A�ع��H�=*E��9
A�ع��
H�=E��9
A�ع�@�H�=E�9
A�ع���H�=�D�9
A�ع��H�=�D�k9
A�ع��
H�=�D�M9
A�ع��	H�=�D�/9
A�ع��H�=�D�9
A�ع��H�=}D��8
A�ع�3��H�=gD��8
1�[��AWAVAUATUSL��$��H��H�$L9�u�H��H�t$dH�%(H��$�1���tE���T��t�bDH��$�dH3%(�*H��[]A\A]A^A_�f�1�H�L$`H�T$P����@���t�H�|$`��
H�D$`�D$4��D$ �UfDH�T$P��@����i���H�|$P�D$4���H�|$�K�D$<�D$ �D$
�|$4H�L$p�D$8L��$��H�$H��$�1҃�H�L$E1�E1���1�M��D$$��t$$9t$|����D$���H�
�CHc�H�>��fD1�H�L$`H�T$P�L�L$HL�D$X��?��������H�|$`��
H�D$`H�|$X���D$ v
�uH�|$X�+JH�|$H�v
�[H�|$H�J�D$4H�|$P�t�9�
�L$ ��%�'��D$�<�������1�H�B�1���H�D$�@H�����fD��
�u���fD�D$8�D$1�����@�l$<��t�H�<$1��GH�$�H�H���.��E1�A���D$p1�H��H�d$x���h�t$ jjH�D$pH��3��H�� ����H�t$H�<$L���A�����H���$�M�fD��$�I���$�f�T$0��$�f����f�T$2D�h���u��DH�A��M�dA�����H��L�����y�1�1�H�)B���H�D$�xvH���H�$H���P��H�޹GH��$��H�H��$�H�kH��H��t�Т�HǃH��H9�u�H�D$�@H��%������D$ @�e����H�����!�D$ �E����(������D$ �%���������
�D$ ����������D$ ����������D$  ���������D$ ���������l$ �����@�l$ �����@�&�D$ �u����X�����#�D$ �U����8����fA��E��E����L9���M����T$8E�k�M��L�|$hE���A�Ճ��D$�M����L9���A����tDH��L��M��E���L���^�H�t$hI��H��t�|$tH�|$H�D$(�k`L�T$(A���u�M��L�<$H��$�L�mL�����H��$��GL���H�H��H��t葠�HDžH��L9�u��T$0D�|$2f��fA����E������DH�|$�E�D$ �����D$<���1�1�H��=���H�D$�xvH���H�$H���W��H�޹GH��$��H�H��$�H�kH��H��t�ן�HǃH��H9�u�����1�1�H�f=��9�H�D$�xvH���&H�$H���ګ�H�޹GH��$��H�H��$�H�kH��H��t�Z��HǃH��H9�u�����D$4M��������j���thI9�scM��t^L��$�L�d$h�M����L9������|���H��L��M��A���L���B��H�t$hI��H��t
H�|$X�[^�����u�A�o�E���4���L9��+���M���"���L��$�L�d$h�M����L9����������H��L��M��A���L������H�t$hI��H��t
H�|$H��]�����u�����L���
���f���AWAVAUATUSH��H�$H��H�$H��HdH�%(H��$8$1�I�����4���[1�H�L$ H�T$�L�D$(��K8����2H�|$(��3��B�D$H�|$�t��
H�|$ �v
�H�|$ �BH�D$A� L��$0L���H�8�t��xW= � ��$4N�f��Hc�L�f������M�|$�fDH�M�|����H��L��蝢�y�A�EI�EH��$8$dH3%(�dH��H$[]A\A]A^A_�H�L$ H�T$�1���%7�D$������@�[:�M�|$@��$6L�t$0f��������tII9�sDH��L������S���H�L�����P��	�f��t3�P��f����L�|
���u�A�EI�E����f��p
L�xL��L��A��L��@�t$�p@�t$H���������H�|$ H��L��I��Y�D$���<����t$�D$H�|$(��	����V������H�|$(����l��f.�f���AWAVAUATUSH��8H�|$�Ĉ��Hc�H��A���}	H�Ņ���H�D$E1�1�H�T$D��Lc�)�N�$2Hc�D$L���@��Ic�H�xd����E�$E�_Mc�D��I���H�=�9��Hc�H�>���H�|$t@H�D$D:��A���\Ic�H�E���A9��f����H��8H��[]A\A]A^A_ÐD�d$H�D$A��H�L$(L�L$ A��J�|0D�\$Mc�D�T$L���
��D�T$D�\$H��H�D$L�L$ H�L$(�u����L��E��I��H���j����H��Hc�L��D$��D�L$E�B�\�Ic�H��<���fDH�D$L��E��I��H������fDH��������AWAVAUATA��USH��H��XH�T$ H�L$dH�%(H�D$H1�H���H�D$8H�D$@�x�+� H���N��H��H���B�H�5>�H��L�h茁�H����/H���f��H����H�J8M���'H���iH�*�H�|$8AUI��RL���1�H��1��@Y^�E H�|$8�@���H�|$8H����z	H�l$8H�5)LH�����H����H�5�CH����l�H���jz	I��A���H�D$H��H�D$@H�D$�H�L$�L��H���H���"H�D$@A�|�
tH��������L9�tI)�Ll$@A���fI��A��u�H�D$@H�D$(A��H�L�t��!�蓔�A�6I��H��Dp tE��E�o�E��u�A�����H�D$(�ƒ�D9�tIc�H�L$@��T$@H�|$ �H��I���+V�&���fD��L���v��L��H���FH�D$@H��u�H���o(L����Uy	H�|$8H��t�Fy	H�T$HdH3%(���>H��X[]A\A]A^A_ÐH�5��H���Q�H�����/H���+��H����H�J8H����L���H�|$8I��APAPH��1�1��XZ����D�t$@H��I����H�`�D���E���"����MW�����H�T$@L��H)�H�I�L��L;t$���H��1�L��H�D$@�{x	L�l$@L�t$H��I�����fDH�L$@H�L$H���
L9���A��u���)A���o���gH�D$A��H�L�t�� fD�{��A�6I��H��Dp tE��E�o�E��u�A������D$��A9�tIc�H�T$@�H�D$@H�D$A���H����xt>�t$H�T$41�H��I��訿H�L$�T$4H��Q�A���H���z����L�t$H�D$H��I��A�F����y	A�FI�����L�t$1�H�=��I��A�F�y	A�FI��y���DH�߉����H�`��������H�D$@H�D$���f�H���H�|$8AUI��PL�Ck���f�A������������T$H�|$ �H���RH�D$@H�D$����H�=�H�|$8I��PL��jP�g���H�D5�1�1��f������������T�Q���H��H��4�1��<���������譑�ff.�f�U��SH��H��8dH�%(H�D$(1���H�L$H�T$H�D$H�D$ ��L�D$H�5}4萞������D$��tH�T$ H�����B<t<��H���Y8H�T$ H�t$H�ٿ�r���Hc�H�|$H��t�v
�jH�|$�GH�H�D$(dH3%(��H��8[]�H�14�1�1��+��CH��fD1�L�L$L�D$ H�5�3�����0����CH��f.�H����H�T$ H���7H�T$ �-����H�t$H�ى����Hc��*����$��@��1��u���D����b���f�����R���f���AWAVAUATUH��SH���V��Hc�I�ĉ��t	I���'E����A�E1��KDA�VA�MHc�L���'u$�'A�FA�VH��\Hc�A�'A�FL�H�L��A��A��D9�~ZMc��I�D)�L��Hc�蔔�Ic�L�H�Dž�x҃�~�Hc�L��L$�A��L$A�F�d!�Ic�A��L�D9��fDA��Mc��'L��C�7H��[]A\A]A^A_��H�xA���ff.����ATUH��H�5h�SH�� dH�%(H�D$1�H�L$H�T$�˛���t=Hc\$��tmL�d$L����}�H9�u;L������H��H����}�E��xaH�]�EH�D$dH3%(u^H�� []A\�H��1�1�1�蛶��f��E1�H�=,���t	�EH�E먐H�5���1��]��֍�fD��UH��H�5z�SH��(dH�%(H�D$1�H�L$H�T$�ݚ���t>H�\$H��t4H���}�HcT$H9�u<H�����H��H����|�E��xBH�]�EH�D$dH3%(u?H��([]�H��0�1�1�諵��f�H�5���1������fD��ATUSH�� dH�%(H�D$1�����H��1�H�t$��+�����H���H�p0�x��L�d$I�$�{t"�{u�C���H���
H�D$H�LccE����H�H����{�H�F0L9���H�5�AH����x�H���%H�5�9H���bH�t$1�H�����H��H����H��I���MM��thH�D$D�e�EH�E�
D�+H�D$dH3%(��H�� []A\�fDH�)/�1�1��#��EH�E�D�E�f.�����C�o	I�$H�D$�oH�H�SH�PH�D$H�8�v
�H�D$H�8�GH��BH��{��������f.�H�D$H�8.�1�H�H�1��p��EH�E�����ڊ�f.���USH��H�5�AH��dH�%(H�D$1�H�������tT�Jp�<$�H���)��E��u"�CH�H�D$dH3%(u)H��[]�H�q.�1�1��˲�CH����9��f���SH�H�{tH�{�$
H�CH��[��AVAUATUSH��H���|I��E1�E1���E��A��H�I)�t"����t�L��H������|&��x2u A��
tJA��
u4H�C�[]A\A]A^���Hc���1�1��ǎ��DH��[]A\A]A^�@H�C�A��
u��@���$D�D��S���H��-1�H�=�����2���H�=�#D��#DH����H�@(H�@ �OA��1ҹ�	H�=F-�
A�ع��	H�=1-�
A�ع��	H�=-�z
A�ع��H�=-�\
A�ع��H�=�,�>
A�ع��H�=�,� 
A�ع��H�=�,�
A�ع��H�=�,��
A�ع��H�=�,��
A�ع�
�H�=�,�
A�ع��H�=�,�
A�ع��H�=�,�l
A�ع��H�=�,�N
A�ع��H�=�,�0
A�ع�	�H�=�,�
A�ع��H�=�,��
A�ع��H�=�,��
A��1ҹ�H�=|,�
A�ع��H�=z,�
A�ع��H�=x,�
A�ع��H�=u,�a
A�ع��H�=j,�C
A�ع��H�=`,�%
A�ع��H�=T,�
A�ع��H�=O,��
A�ع��H�=M,��
A�ع1Ҿ"H�=U/�
A�ع��"H�=_/�
A�ع��#H�=i/�t
A�ع�� H�=s/�V
A�ع��"H�=u/�8
A�ع��"H�=/�
A�ع��#H�=�/�
A�ع�� H�=�/��
A��1ҹ�H�=[+��
A�ع��H�=L+�
A�ع��H�==+�
A�ع��H�=0+�i
A�ع�
�H�=!+�K
A�ع��H�=+�-
A��1ҹ�H�=+�
A�ع��H�=�*��
A�ع��H�=�*��
A�ع��H�=�*�
A�ع���H�=�*�
A�ع��H�=�*�|
A�ع��H�=�*�^
A�ع��H�=�*�@
A�ع��H�=�*�"
A�ع��H�=�*�
A�ع��H�=�*��
A�ع��H�=�*��
A�ع��H�=p*�
A�ع��H�=e*�
A�ع��H�=\*�n
A�ع��H�=T*�P
A�ع��H�=L*�2
A�ع��H�=D*�
A�ع��H�=2*�
A�ع1Ҿ
H�=/*��
A�ع1ҾH�=*�
A�ع��
H�=*�
A�ع��
H�=�)�
A�ع��H�=�)�f
A�ع��
H�=�)�H
1�[�@��1��f���ATUH��H�5*�SH��0dH�%(H�D$(1�H�\$H�L$ H�D$L�D$H��H�D$ �A�������#�A����H��1ɾ����ATA��H���H��A�1��D�ZYH����H�L$ �ʃ��Y�����H�|$H��t+�t%�tH�D$�Sv
H�|$H�D$H��T$ H�
�.Hcۃ�H����1����u+�EH�EH�D$(dH3%(uuH��0[]A\�fDH�|$ t(��e�8uH�D$H��t�xtH���EH�E�f�H�P(�1�1��K��EH�E�{�����D��ATUH��H�51(S��H��@dH�%(H�D$81�L�d$0�D$H�����H�D$ H�L$H�T$M��H�D$(H�D$(H�D$0PH�D$(P1�L�D$��ZY��������H�|$0������A�1�L��A��H�-,�����1��y�I���|$H�|$H�5P,�1Ƀ�
�iH��H���TH�t$ H��~1�H���y����H�T$(H�t$1�H���-��…���H���H�|$�y��UH�}�E�H���H�D$8dH3%(�H��@[]A\��H�à�L�C0M���6����I��H�C0�%���H�|$(���H��(�1�1��w��EH�E�f�t�EH�E�[���D�E1�H�=���d	�EH�E�4���fDH�L$ �1�1�H�k(���H�����EH�E�����H�T$����ϩ�T$H��H�D$����9}�f���AW�wbAVAUATUSH��H�5�%H��xdH�%(H�D$h1�L�l$ f�L$eH�T$�D$gH�L$H��M��H�D$0H�D$8L�d$8ATL�L$8�^_����DH�D$ 1�x�PL�D$0M���R�=�A�1�L��A��H��)�����1����H�T$(I�������D$ea��H�|$H�t$e1Ƀ��D$g��I��H���[�D$(�{�|$ec�L�l$ A�M���%H�5.)��Hc�H�>����A�E��_	H�D$ �AoMI�UI��H��H�PH�� ��v
H����
L�l$ A�}A�EA�E��DIcU�����L��E1����CL�+H�D$hdH3%(��H��x[]A\A]A^A_�f.�H�T$(������I�Ġ�M�D$0M��������H�T$(I��I�D$0���H�D$8L�D$H�E&1��H��H1��a���L���#�CH��V������a����D$ec�W���D1ҹ�H�������u�1ɺ�L��������Q����f�I�}t�L�t$@�L��L��������l���HcT$HH�t$@L�����D�D$HA��A9�t��H�4%�1�1�A�����萢�|$Tv	L����
��L���C
E������Mc��n���f����G���A�}u
A�E������L���;u
L�l$ �!����H�L$@H�����L��H���H�������D�l$@�f�I�}�������H�D$ L�t$@E1�L�|$8L��H�8���TH����t
H�D$8H�(HcU��t,H�uL��A���������H�T$8H�D�BA9��=H�D$ L��H�8��H�D$ L��L��H�8�������H�T$8H�*H�T$�}t��E���r�������E��\	H�T$H�H�D$8�oEH�H�UH�PH�D$8H�8�v
���
H�D$8H�8�GH��BH�(�}����������{����d�H��1ɾ����UA��H��L��A�1���H��XZH���p����8���1�L���N����f�I�uL���t�H�T$ A��D�BA9�������1�H��"�1��8��L���
�����w���AWAVAUATUSH��H�5* H��hdH�%(H�D$X1�L�l$PH�L$0H�D$@H�T$8M��L�D$HH�D$HH�D$P�}������L�d$HI���L�D$PD���M������A�1�L��A��H�$�����1��k�I����H�|$81�H�5C$�����]
H��H����H���1�H�t$@H��H������3�����H�|$@H��t��Z	�H����	H�D$XdH3%(�"H��h[]A\A]A^A_�@A���f���I��M�E0M���R����I��I�E0�A���f��CH��L��H��1�1���x��CH��i����L�D$@Hc�H��I�L��L�D$H�$���L�D$H���B�������E�A��A��
��ɉ΃��
@�t$/A����I���A�E1�L�$L�xM)�M��L�L$M)�A�yL�\$L�T$��L��D���)\	L�T$E1�D��H��H��L���1L�L$L�\$L��D��L��L�L$��t�M��H����Mc�M��A��L�L$�t���D��H�L$4��H�L$ �|$/
@�t$�D$E1�fDH9D$@t�|$��1�H��L�`L)��|$tHc�H9�tFI���A��Mc�A��A)�A�y��H�T$ L��1�D���ڠ�L$4E1�L��H��H����0H�$D��L��L)��t�M��H���o���L�<$M9�����Mc�D�t$/A��E1�M��I������1Ҁx�
���F���f.�D��L��D�T$�Z	D�T$E1�L��H��H��D���G0�m���f�L��H�T$41�D����L�T$E1�H�ߋL$4H��L���0L�\$L�L$�_���DL�<$A�E1�E1�A�
�D$/
I�������Ds�@��ATUSH��0dH�%(H�D$(1�����H��1�H�T$H���������L�$$I�,$�}t�}u�E����H���Sn
L�d$I�,$�}t�}u�E���H���*n
H�$H�(L�eL���b�HcUH9�u^H�D$H�(H�}�a�HcUH9�uDH����xt1��L���8���t$H�$H�L� L�������
f.��CH����H�D$(dH3%(��H��0[]A\�fD����E�U	I�$H�$�oEH�H�UH�PH�$H�8���GH��BH�(�}�������@����E�U	I�$H�D$�oMH�H�UH�PH�D$H�8����GH��BH�(�}��������f.�H�$H��pH�8�X	1�1�L�L$ H��H�D$L�D$H�HcpH�8�Y<H�|$ @H�t$v�F?H�T$�H��薮��yR�CH�H�|$�T	H���T	�����
H�$H�8�������
H�D$H�8�,���fD���y��L�d$L����_�C��x	L�#�C�H�5%��1����
���Bp�f�����u S1�H���CH��t�CHc@pH�[����CH�[���USH��H�5�H��8dH�%(H�D$(1�H�l$ �D$H�L$H�D$ H�T$UH�D$P1�L�L$L�D$(��|ZY�����H�|$ ���;�A�1�H��A��H�������1����I���|$H�t$�H�|$1Ƀ�
��H��tW�CHc@pH�H�D$ H��tH�8�
�H�D$(dH3%(u7H��8[]�H��L�E0M��u���I��H�E0�f��CH����n�ff.���USH��dH�%(H�D$1����}H��1�H���k
���tf������H��1ɾ����UH�|$A��1�A�H�+����Y^H��ts����uR�P\��t;�H����CH����
H�D$dH3%(u@H��[]�@�xp�����fD�HpH�f�1�1��h��CH����m�fD��AUATUSH��(dH�%(H�D$1�H�D$��� I��1�H�T$H���Y����H�,$H�]�{t�{u�C���HH����h
H�l$H�]�{t"�{u�C���H���h
H�D$H��sH�;�T	�bH��H�D$H��H�HcXH����l�H��tH��H�pH��H)�H)�H���y�H�$I����H�A�}H��� H����Z�H��uc�/H���l�H��u[I�M8H�|$I��1�H��1����Yf��KH�D$dH3%(��H��([]A\A]�@H9�t�H���8/u�H9�t�I�M8I��H�|$1�H�,71���H�|$���H��H��I���X�L��H���FP	H����H�|$�3P	H��H���XBH���A�D$Hc@pI�$H���	P	�I���@H��H���UX�H��H��u��XQ�8�!Y�H��1�I��H�$L�jIH�01�H�6茗H���O	A�D$I�$�����Q�8��X�H��1�I��H�$L�IH�01�H�6�?�A�D$I�$�K���@����C�O	H�EH�$�oH�H�SH�PH�$H�8����GH��BH��{�j����]���D����C�N	H�EH�D$�oH�H�SH�PH�D$H�8�w'�GH��BH��{�=����(������
H�D$H�8��f���
H�$H�8�R������O�8�W�H�t$H��1�I��L��G�1���H���4N	H�|$�*N	A�D$I�$�\�����i�f���USH��dH�%(H�D$1���uqH��1�H���o���tZ�������H��1ɾ����UH�|$A��H�7A�1����ZYH��t?�xp�'�H����CHcH��	@�	H�D$dH3%(uH��[]�@�CH����i�ff.���USH��dH�%(H�D$1���uqH��1�H������tZ�������H��1ɾ����UH�|$A��H�g~A�1���ZYH��t?H���g���t3�CH��fD�;H�D$dH3%(uH��[]�@�CH����>h�ff.���AVAUATUSH�� dH�%(H�D$1��G�H�D$���H��1�H�T$H���������	�A�����H��1ɾ����ATH�|$A��H�y}A�1��(�I��XZM�������)L�l$I�]�{t"�{u�C���HH���8]
H�D$H�H������{�Hc��M	H�L$Hc�L��H��I��I���,�H���[H����H�D$�z������EL�m�E9�~H�p1�L���\K	H�E�fD�H�D$dH3%(�%H�� []A\A]A^�f.�H�A�1�1����EH�E�DH�U�L����EH�E�DH�L$1�1�L���W�I��H��t�H����H�D$�z��u��EL�u�E�P�������C�(J	I�EH�D$�oH�H�SH�PH�D$H�8�v
�:�
H�D$H�8�GH��BH��\���@���EH�EM������L����I	�����e�ff.�f���USH��(dH�%(H�D$1���uqH��1�H�t$��-���tX�����l�H��1ɾ����UH�|$A��H��zA�1���ZYH��t
H���e����u0�CH����H�D$dH3%(u3H��([]�@H�|$�C��D$�D$�K	�CH���d���AWAVAUATUSH��H��HdH�%(H�D$81�H�D$ H�D$(��tD�������z�-H�D$8dH3%(��H��H[]A\A]A^A_�f.�1�H�T$ H�t$�������E1�E1��6�����H��1ɾ����UH�|$(A��H��yA�1��W�H��XZH����L�l$ M����M�eA�|$tA�|$�3L���kY
H�D$ L� M�$$M��~zI�L$1ҿH��H�L$�AH	H�L$1�I��H��H���\U�L��H�L$0L��H���I�I��H���e�t$0H�UXE��L��L���L�#�C�C����H���1�1��{��CH����H�t$����������1�H�L$(H�T$ �H�t$����t�L�d$(I�,$�}t"�}u�E����H���^
H�D$(H�(L�uD�}�g���f�A�D$����������A�D$�`F	I�EH�D$ �Ao$H�I�T$H�PH�D$ H�8����GH��BL� �g���f.�H�L$01�1�H�����I��H��������fDL���F	��������E��E	I�$H�D$(�oMH�H�UH�PH�D$(H�8�v
���
H�D$(H�8�GH��BH�(�}����������
H�D$ H�8�.����Ia�f���AVAUATUSH��0H�t$dH�%(H�D$(1�������1�Hc����E	��H��H�������L�eL�u��A����H�L$H��L��AUA��H��W1�A�������,�ZYH����H�L$ 1�1�H����I��H����M�&A�|$t!A�|$uA�D$����L����[
M�&I�4$��L�L$H��A�L���CH����rD	L���jD	���u
D��
H�D$(dH3%(��H��0[]A\A]A^�f.�H���(D	H�D$�@H��fDH���D	�fD���A�D$�C	I��Ao$I�T$H�PI�>�w(�GI��@M�&A�|$��������fD��
I�>���Y_�f���ATUSH��H��0dH�%(H�D$(1�H�D$ ��t3������
H�D$(dH3%(�NH��0[]A\��1�H�T$H�t$��
�����L�d$I�,$�}t"�}u�E����H���(Z
H�D$H�(�U�T$�����CH��l����1�H�L$ H�T$�H�t$�5�
����LL�d$I�,$�}t�}u�E����H���Y
L�d$ I�,$�}t"�}u�E���H����S
H�D$ H�(H�D$H�UH�Hc@H9�HOºH��HH‰‰D$���@����������H��1ɾ����UH�|$ A��H�nsA�1���H��XZH���H�D$�t$H�Hc�H�8H����xu H��H����Hc��CH�+�A���fD�;D	H�t$I��H���zHcT$M��t1H��L����L��Hc��[A	�f��CH����H�D$H�H�8�������E��@	I�$H�D$�oEH�H�UH�PH�D$H�8�v
��
H�D$H�8�GH��BH�(�}�������f�����E�@	I�$H�D$�oMH�H�UH�PH�D$H�8�v
��
H�D$H�8�GH��BH�(�}�������f�����E�@	I�$H�D$ �oUH�H�UH�PH�D$ H�8�v
�!�
H�D$ H�8�GH��BH�(����[�ff.���USH��dH�%(H�D$1���uqH��1�H���?�
���tZ����~�H��1ɾ����UH�|$A��H�qA�1�趿ZYH��t?1�H���u���u1�CH��	@��
H�D$dH3%(uH��[]�@�CH�����Z�ff.���USH��dH�%(H�D$1���uqH��1�H���o�
���tZ�����H��1ɾ����UH�|$A��H�7pA�1���ZYH��t?1�1�H�������t.�CH�����
H�D$dH3%(uH��[]�@�CH����Z�ff.���USH��dH�%(H�D$1���uqH��1�H���
���tZ����޿H��1ɾ����UH�|$A��H�goA�1���ZYH��t?H���7�H���t1�CH��
��;�
H�D$dH3%(uH��[]�@�CH����>Y�ff.���AVAUATUSH�� dH�%(H�D$1��G�����H��1�H�L$H��H�T$���
������
�A���H��1ɾ����ATH�|$A��H�}nA�1��,�I��XZM���L�t$M�&A�|$tA�|$��L���JN
1҃�u3L�d$I�$�{t"�{u�C����H���N
H�D$H��H�D$�EL��H�H�0���H�H�E����
H�D$dH3%(��H�� []A\A]A^�f.�A�D$���`������A�D$��;	I�H�D$�Ao$H�I�T$H�PH�D$H�8�v
���
H�D$H�8�GH��BL� ����f��EH�E�T��������C�h;	I�$H�D$�oH�H�SH�PH�D$H�8�v
�z�
H�D$H�8�GH��BH�����W����H���ATA��UH��S�xH��t1������tbH���j���uVH�߉��|F�Å�x��[]A\��A��t��M<�8�D�H�p4�1�H��1��~��[]A\��������f�����R���f���USH��H�5
�H��8dH�%(H�D$(1�H�L$�D$H�T$ H�D$H��H�D$ �H�l$UL�L$L�D$(�2cZY�����H�|$to���1�A�H��A��H�������1��9�H���|$�t$�C�H�|$ ��	�
�������H�H�D$(dH3%(u<H��8[]��H�Š�H�M0H��u��;�H��H�E0�f��CH���>U�ff.���USH��H�5X�H��(dH�%(H�D$1�H�l$H�L$H�D$H�T$I���,b�����H�|$tc���A�1�H��A��H�������1��5�H���CH�|$���������H�H�D$dH3%(uAH��([]�DH�Š�H�U0H��u��C�H��H�E0�f.��CH���>T�ff.���ATUSH��H�5�H�� dH�%(H�D$1�H�l$H�L$�D$H�T$I��L�D$H�D$� a�����H�|$���v��A�1�H��A��H�������1��%�I���|$H�|$H�5��1Ƀ�
��H��H��t-H�����H��I����Mc��CL�#�f��CH�H�D$dH3%(u2H�� []A\�@H�Š�L�E0M���r������I��H�E0�a����R�ff.���AUATI��U���?SH��dH�%(H�D$1��Cc�Hc�H�@ܔ��P�u��P��tv��Q1�H���b�
���t=L�,$I�m�}t�}tYH���AH
H�$H�(H�}��b�A�D$I�$�
D��
H�D$dH3%(u}H��[]A\A]��b�����E��v�����E�6	I�EH�$�oEH�H�UH�PH�$H�8�v�+�
H�$H�8�GH��BH�(�E����Q�f���USH��dH�%(H�D$1���uiH��1�H���O�
���tR襷��获H��1ɾ����UH�|$A��H�gA�1��ƵZYH��t7H�����CH�H��	@���
H�D$dH3%(uH��[]�@�CH����P�fD��ATUSH��H�5��H��0dH�%(H�D$(1�H�L$H�T$H��H�D$(L�d$(ATL�L$L�D$(��]ZY�����H�|$1�1����H��H����H�H����H�x8��H�|$1�1���H9���H�|$ ������A�1�L��A��H�L������1�蘴I���CH�E1�H��H�T$H�t$�P8������H��&fDH����1�1��Sx�CH�H�D$(dH3%(utH��0[]A\��I�Ġ�M�D$0M���~����n�I��I�D$0�l����H�H(H��`H�N��H��HD�1�1���w���@H�Q��c����?O�ff.�@��ATUSH��H�5��H�� dH�%(H�D$1�H�l$H�L$H�D$H�T$I���*\�����H�|$�����H��A�1�A��H�������1��/�H��H�|$1�1����H����H�H��t}H�z0���CL�H��H�t$H��A�P0������H�H�D$dH3%(��H�� []A\��I�Ġ�I�l$0H���w�����H��I�D$0�e����H���1�1��{v�CH��fDH�J(H����H���H��HD�1�1��Av�CH��U����M�ff.����AUATUSH��(dH�%(H�D$1�����H��1�H�T$�H�t$�0�
�����肳���k�H��1ɾ����UH�|$A��H��bA�1�裱I��XZM����L�l$I�m�}t�}u�E����H���B
1�1Ҿ
L���;���uOH�D$�CL��H�H�0��������H���{�
H�D$dH3%(��H��([]A\A]�@H����1�1���t�CH��fD����E�`0	I�EH�D$�oEH�H�UH�PH�D$H�8�v
�q�
H�D$H�8�GH��BH�(�����K�ff.���AWAVAUATUSH��XdH�%(H��$H1���u{H��1�H�t$@���
���tb�ձ��辱H�������1�UH�|$PA��1�A�H�?a�^_H��tH��$�H������tK�CH��fD��
H��$HdH3%(��H��X[]A\A]A^A_�f.�H�߽A�A��7�
�A�A���.	��H��$�f�pH��@H�D$H��.	H��$��f�x�H��@H�D$P�.	A����$�fD�@H��@H�D$X�r.	A��H��$�fD�HH��@H�D$`�F.	A����$�fD�PH��@H�D$h�.	A����$�fD�XH��@H�D$p��-	H��$���@H�f�hH�D$x��-	H��$���@H�fD�`H��$��-	H��$���@H�fD�hH��$��y-	H��$��@H�fD�pH��$��P-	H��$��@H�fD�xH��$��'-	H��$���@H��f�PH��$��,	H��$��H��$�H��S�@f�H����1����_L�|$HA�E1�1�L����R��S���M1����L�t$PA�E1�1�L�����S����1�����L�l$XA�E1�1�L�����S���;1����xH�D$`A�E1�1�H�¹H�$��S���21����'H�D$hA�E1�1�H�¹H�D$�u�S����1�����H�D$pA�E1�1�H�¹H�D$�;�S���^1�����H�D$xA�E1�1�H�¹H�D$��S���1����1A�E1��1�H��$�H��H�D$ ��~�S���1�����A�E1��1�H��$�H��H�D$(�~�S����1�����A�E1��1�H��$�H��H�D$0�J~�S���-1����2A�E1��1�H��$�H��H�D$8�
~�S����1�����A�E1��1�L��$�L����}�S����1�����A�E1��1�H��$�H���}�S����1����=H��L���E1�jA�H�5���w�SXY���1�����H���E1�L��jA�H�5��ew�SA_X����1�����H��L��E1�jA�H�5���'w�SA]A^����1����;H���E1�A�jH�L$H�5����v�SAZA[���U1�����H��E1�A��jH�L$H�5���v�SAXAY����1�����H���H�5�'E1�jH�L$ A��dv�S^_���u1����2H���E1�A�jH�L$(H�5E��%v�SXY���f1�����H���E1�A�jH�L$0H�5'B��u�SA^A_���1�����H���E1�A�jH�L$8H�5��u�SA[A]����1����)H��E1ɺA�jH�L$@H�5��du�SAYAZ���31�����H��A��E1�jH�L$HH�5���#u�S_AX���#1���t|H��L��E1�jH�5�A���t�SY^����1���t3H���E1�H��jA�H�5��tXZ�f���f�H�CH��PpH��뾐H�CH��PpH���r���fDH�CH��PpH������fDH�CH��PpH������fDH�CH��PpH���l���fDH�CH��PpH������fDH�CH��PpH�����fDH�CH��PpH���e���fDH�CH��PpH������fDH�CH��PpH�����fDH�CH��PpH���\���fDH�CH��PpH������fDH�CH��PpH�����fDH�CH��PpH���a���fDH�CH��PpH������fDH�CH��PpH�����fDH�CH��PpH���g���fDH�CH��PpH������fDH�CH��PpH�����fDH�CH��PpH���k���fDH�CH��PpH������fDH�CH��PpH������fDH�CH��PpH���v���fDH�CH��PpH���)���fDH�CH��PpH������fDH�CH��PpH�����fDH�;���H�;�y����H�;����H�;����H�;�I����H�;����H�;�����H�;����H�;�����H�;�����H�;�N����H�;�����H�;����H�;�]����H�;�#����H�;�����H�;�s����H�;�+����H�;�����H�;�����H�;�%����H�;�����H�;����H�;�?����H�;����H�;����>���AW1�AVAUI��1�ATI��U��SH��8dH�%(H��$(1�H�������to����������D$%�=@�V1�H��$��L���W���u3H�D$H����H��$�H����H9�uH��$�H9$tP���E1�1�L���H�5G��g�H��H��t.E1�1ɺL��H�5#��F�I��H��u>�H����������H��$(dH3%(����H��8[]A\A]A^A_Ð1�H�����H��H���\�H�������L�����fD1�L����H��H��t�1�L����I��H��tLH��H����C�H��A���>!	L���6!	E��������G���H���1�1��Se�2���fDH���!	�����<�fD�������f���ATUSH�� dH�%(H�D$1�����H��1�H�T$�H�t$�2�
�����L�d$I�,$�}t�}u�E����H���7
L�d$I�,$�}t�}u�E���/H���7
H�D$H�H�8H����xt1���������H�D$H�H�81�1���H����tVH�D$H�H�D$H�H�2H�8����uO�CH��f��[�
H�D$dH3%(�H�� []A\�fDH�D$H�H�8����t�@�CH������E�@	I�$H�D$�oEH�H�UH�PH�D$H�8����GH��BH�(�}��������f�����E��	I�$H�D$�oMH�H�UH�PH�D$H�8�w&�GH��BH�(�}������w���fD�˰
H�D$H�8�ː軰
H�D$H�8�\����Y:�f���AUATUSH��(dH�%(H�D$1�����H��1�H�T$�H�t$���
������2�����H��1ɾ����UH�|$A��H��OA�1��S�I��XZM����L�l$I�m�}t"�}u�E����H���l/
H�D$H�(H�m��~d�}Hc��	Hc�L��H�H��耦H��CH��H����xuW�C����
H�D$dH3%(��H��([]A\A]�@H����1�1��a�CH��fD�sH�;H�S��leH�������E��	I�EH�D$�oEH�H�UH�PH�D$H�8�v
��
H�D$H�8�GH��BH�(�����~8�ff.���AWAVAUATUSH��H�t$0H�L$XH�\$PH�5m�H��dH�%(H��$�1�H�D$HH�D$PH�D$XH�D$`H�D$hH�D$pPH�D$xP1�L�L$TL�D$x�%E^_�����H�D$hH���'�T$D������t1�H�*��1��&`H�D$h��D$/H�D$pH�����T$H���c��t1�H���1���_H�D$p��D$.腝���n�H��1ɾ����UA��H��LH��A�1�訛H�D$HZYH���^H�D$X1�E1�E1�H�8���D$H�D$xH�D$H��H�D$XH�8襋H�D$`�D$H�D$H��$�H�D$ �D$/�D$(DH�D$XH�T$H�t$H�8豌���AH�D$`H��o)�$�H�RH��$�H��xt&��$��BH�|$ 訬
��$��*Hc�$�L��$��t$(H��L���6�H���R�t$.H��L����5�H���9H��\L����5�H��� H��
L���5�H���H��
L���5�H����H��	L���5�H����H�� L���u5�H����M����N�t-I9���K�</M��H��L���.��sfDM���>M�eL9���C�/
C�'H����x��H�|$8L��L��觩��M��tL���H	H�t$0Hc��FH�H��$�dH3%(�dH�Ĩ[]A\A]A^A_�L�M����M�uL9����D$.C�/I9���E1�L��E���Ef.�:T$.u	E���1E1�H��t9M�~L9���A�$J�0I��M���L9�vEA�$��\u�A�H��u�1ҾO1�I���	A�T$��NA�H���L9�w�I��M���TM�nI9���O�7�D$.A��D$�D$9D$t%M����I�mH9��^K�/I���t$/@�0H�D$XH�t$H�8襈H�D$`H��x������$�����H�|$ �
���fDI���1�H��I�����	���H���/M�~I9���J�0M���L$.E1�
���@H�|$ �.
�����L��I���1��o	I���I�����I���L��1��O	I���I��I��D$.A�EI9�����M��������1ҾO1��N�
	A�I��I�����@I���1�H��I�����	�1���L��I���1���	I���I������1ҾO1��N�	A�I��I���J���@1ҾO1��N�u	A�H�������1ҾO1��N�M	A�I������H�u{�1�1��:ZH�D$0�@H����H�D$p�D$/,H�������D$."�.���D��L���m	H�t$LD�d$LH��H����NH�|$8HcT$LH����H����	�2���I���L��1��	I��I�A�E
M��������H��z�I���1ҾO1�A��m	I��I����H��MveH���H���1�1�I���E	L��$�Hc�$�I��H���L���L��I���1��	I���Hc�$�L��$�I�������O�N��y0�f���AWM��AVM��AUATA��1�USH��H��hH�L$(L�L$�T$&H�|$@1�dH�%(H�D$X1��v5�H��L������H��H��L)�H)�H�|H�T$0��	L��I���0�
H�D$PL�|$8H�D$H�m�u���N	L��1�E1�H��H��L��H�L$��(�H�L$L��H��裥��1�E8'��I��H�|$L)���L��1��L�
A���I9�s�A�7@����H��L��L)��4�A�ƃ������NA�7L��D��@:t$&�����p_���|_1�1��a4�A�A8����I�L9�wL��E1�H)��#���f�A���t�H��L��L)��4�����t�H���A�7@D8�@�t$�D	�u-��t$L��H�8���fDH���D8�t
��DO u�8D$&�@A�L��D��@:t$&� ���I�_1�D�d$'M��H��I�܉�Ic�I����������1�1�H�L$�T$�T3�T$H�L$I��L��M�L$����&���%L��I���D$&H)�8E��	L��H��H��I���&�L9��D�}��H���E�H��<\�8D$&��L9��Y�}��L��I��1��e������W��������M9�s�A�<$��6���L��L��H�L$L)��n2�H�L$Hc��������������n���Y��L��L�|$H�|$L��I��A��H��D�d$'I)�I��L����%�L|$D��L�|$I�߅�tCM���|M1�1���1��A8���A�L�H9�s5���t�H��H��H)��1�u�M��A��I������t�Lc�L�H9�r�M��E1�I��L)�L��H��H�\$H�\$H���L%�L�D$L����L��L9���;��L��H��H�L$H)��G1�H�L$�������q�����1�1�H�L$H�k�1�H�L$f�I��L9��TL�l$L��H�\$8M��H��I��L�d$8L9�t&L��L��H��H)�H��H�L$�$�H�L$L�t$8I�H�l$0L��L��H��I��x$�H�L$H1�1�H�|$@�E�H��H����H�|$PH|$(1�L��H�D$(I��H���	H��L+|$I��I��G	H�\$PH��H�����I��H)�H)�H�\$0H��L9���L�l$L�d$8L9��6����W���I��M9��af�L��L��L�|$L�|$I��H��D�d$'I)�L��I��L��M�I���#�L�t$E1�D�����@L������}�nI�l$�E�H��<\�&���8D$&�s���L9���I��M���p���@L��H��H)��b/�HcЅ�t��%���lH���E�H��<\��8D$&�8L9����}�Z���L��H��H)��/�HcЅ����1L��1ۃ���AI��I��N���@��H��Hc�L��I�L��H)�H��I��"�M9��XA�<$�L���g��H���K���fDL��H�l$8I��H��I��1�����H9�u�����2I�����I��DL��H)�M�L��H��L�T$L���"�L�T$H�\$8L��M��L��H�l$M��H��I������DA�D$�<\�����:D$&�Z���M9�����:H�D$�xvH���
H�D$L�t$8�@H�f.�L���	H�|$8�	H�D$XdH3%(��H��h[]A\A]A^A_�L��A�H)��Q����M��L��1��
���H��I��H)�M����fDL��H��H�L$H)��%-�H�L$HcЅ�����c1ۃ�������H�\L9��{����;I���2���L��L��H�L$L)���,�H�L$HcЅ�������1ۃ���T�������D��u�H���E�H��<\�,���8D$&�y���L9������}I�������L��H��H�L$H)��e,�H�L$HcЅ��b~��������1�I����L��1�� ���fD���|KI�\$1�1��,��C�H��<\��8D$&�
L9���A�|$��L��I���(���@L��1�I��=���H�|$�f�
������ud@H������A�<$�I��H���_����}I��������1��(���I��L������L�����I�܉�H���p���M��A�L�{���L��L��L)��++���L���|6��H�������L���&�����L�����L��I��M9�����;���L������L��H��H)���*�HcЅ��\��L��1ۃ����I���@���D:d$&�%A�L��D������L��L��H�L$L)��w*�H�L$�����h���1�������1�1�H�L$I�l$�T$�F*�M��T$H�L$���������I��H�������[���1�����L��L�{�L��H��A��H��L��H��L�L$D�d$'I���L�L$L�|$D��L��M������������L��1�I���n���H��L��L��L�|$I��H��L�L$8D�d$'L)�H;D$(�����L�t$8E1�M��D���s���L������L������L��I���W���L��H��H)��M)�HcЅ�t*L��1ۃ��|OI���������:���L��1�I���0���I��L��L��H�\$8M������#�L��A��H)����I�����I�������AWAVAUATUH��H�5��SH��HdH�%(H�D$81�H�D$H�L$ H�D$ H�D$(H�\$�D$H��H�D$0�D$P1�L�d$8ATL�L$ L�D$8�N0_AX����rH�D$(H�����T$������t1�H�R��1��NKH�D$(D�(H�D$0H�����T$������t1�H�=��1��KH�D$0D�0H�T$ H���L�:H�$A�G����<t$A�u
A�G����L���
H�D$ L�8M�?H���M���B���P��$�8�H��1ɾ�����T$A��H��A�1�RH��7�n�Y^H��H����I��L����	L��L��H��H��H�D$H�$躑L�$L�D$H���pH�L$0A��A��I��H��� �H�D$8dH3%(�QH��H[]A\A]A^A_�D蓇A���{�H��H��1�AWA��H�
71�A������贅H��XZH��uZ�EH�E�@H�D$0A�,H���M���A�"�q���f�H��j�1�1��[I�f�L��1�1�H���I��H���
����H�8j�����A�G�	H�$H�H�D$ �AoH�I�WH�PH�D$ H�8�v
譖
H�D$ H�8�GH��BL�8���L���p	�����& �fD��ATUSH��H�$H�� dH�%(H��$1�����H��1�H�t$�訾
�����L�d$I�$�{t"�{u�C����H���&
H�D$H�L�d$H�;L����,H��t,H����xt1��L���M���tL������t=�EH�E����
H��$dH3%(��H�� []A\�L��H����������!�%����t��L������D�H�VHD��H��L)�u��	�EH�E뎐����C��	I�$H�D$�oH�H�SH�PH�D$H�8�w'�GH��BH��{���������軔
H�D$H�8���\�ff.����AWAVAUATUSH��H�$H��H�$H��(� 1�1�L�%j�dH�%(H��$ 1�L�l$H��L�����CH�;��u"�ė���\H�;�$��Ņ��JH�;袗���:�K��t
�C�k�E���5�5Ic�L�>��A�f.�H��$ dH3%(D���)H��( []A\A]A^A_�@A����A���A����C A���8@H�;�X�A�ą�tG9�t-��<t(��>t.HcC �PD�d�S �� t"H�;贖��t�D����<u�CD�c�S$A����)����C �xHc��	�S L��H�CH�ǃ�Hc������fDA����D�C�Lc�A�I��H�B�x�����C @�l$�gH�;耊�Ņ���Lc�I�$O�?F�4xA��u!��H�=;�L�D$�
�L�D$H����HcC �P@�l�S �� ��H�;謕��t�I�$�S F�4xfA��u��-uN��A�Hc���S L��H�CH�ǃ�Hc��������E1�����I�$�S ���u��C�k�DI�$F�4뉋S ����8����AWf�AVAUATUSH��hH�t$H�L$$H�T$(L�D$#H�5N�dH�%(H�D$X1��D$#)D$0)D$@H�D$P�(������|$#H�|$(H�5#��E1�1Ƀ�
�9�H�D$0H���{H�|$1�E1�E1�E1�H�l$0�
�D$H�D$�D$�D$�$f�H�����A�Dž���A����A���)��� E����E����D$���bH�D$H��tH���0�H���H�|$H�x���t$P�	H�D$H�\$HE1�D$�D$H���1H�����!���'�����$��H�\$HH�=3H���`�H�߉$��$H�D$H����H�D$H��tH����M��tL���r�H�|$0��s�H�D$XdH3%(��H��h[]A\A]A^A_�A����A��u`�L$���T�D$���8H�\$HE1�E1�E1��D$TH�D$�D$�D$�D$�$�
�H�\$HH������H�D$HD���!����H�\$HH�=�H���L�H�߅������D$T���fDH�\$H�$E��t�D�$$E1�E1��D$�D$�D$�}������u{A��tuE�����D$��tDH�D$H��tH����H����x�zH�|$HH�U 1�1��/D����f.�H�\$HA��E1������$����@�t$TH�\$H�����H��H�=Om�P���H��H�=a�9��L$��DD�D�DD�L$�u���DH�D$�@H����M��tL���;��t$PH�|$H��I��H�����0H�\$H@��t2I����A�4$@��tH�=����H��tA�$_I��u�D�t$E1��
���DL����L��H���M��T$L��������H�L$H�|$L��PA��~�
L���H�|$H���`����s��V���fDH�U 1�1��B�E���fDM��tL���C��t$PH�|$H��I��H�����0H�\$H@���6���I���A�4$@��� ���H�=����H��tA�$_I��u�����H�|$�^���fD��H�|$A�L��PH�
�h��
����f��D$A�A�����t$PH�|$H�c���H�\$HD�t$E1�����"�f���SH��H�5W�H��0dH�%(H�D$(1�H�L$H�T$H��H�D$(H�D$(P1�L�L$L�D$(�"ZY���tB�|$��H���N�|$�8�T$ H�t$�CH�|$�!�����H�H�D$(dH3%(u-H��0[ùH�d��1�1���<�CH����D�@��USH��H���^QH��H����C�ƅ�xH�����CH�H��[]�@H�5�k�1��m�
�s���AVAUATUSH�� dH�%(H�D$1����H��I��1��H�T$H�t$A���l�
�����L�t$I��{t�{u�C���cH����
L�t$I��C<�'<t"�{u�C����H���		
H�D$H��H�D$H�H�8H����xt1��������H�D$H�H�8蓢����H�D$�ھ����H�H�8E�������tFA�$H�E���{�
H�D$dH3%(�pH�� []A\A]A^�f.��+��8���H�N�H���1�1���:@A�$H�E�f�����k���fDH�;��
�H�����X��������C��I�H�D$�oH�H�SH�PH�D$H�8����GH��BH��{�N����A���@����C�I�H�D$�oH�H�SH�PH�D$H�8�v
�Ç
H�D$H�8�GH��BH�����D蛇
H�D$H�8�j���H�D$H�n�H�H�����"�f�AVAUATUSH�� dH�%(H�D$1����I��I��1��H�T$H�t$��譯
�����L�t$I��{t�{u�C���4H���,
L�t$I��C<��<t"�{u�C���bH���J
H�D$H��H�D$H�H�8H����xt1���,���tXH�D$H�H�8�؟��uDH�D$�������H�H�8��un�	��u9��8��H���H���1�1��p8A�EI�$��諯
H�D$dH3%(�0H�� []A\A]A^�f.��K
��f�H�;�H�H�����X���������C��I�H�D$�oH�H�SH�PH�D$H�8����GH��BH��{�}����p���@����C� �I�H�D$�oH�H�SH�PH�D$H�8�v
�3�
H�D$H�8�GH��BH��C���D��
H�D$H�8�j���H�D$H���H�H������f�AWAVAUATUSH��H�$H��XdH�%(H��$H1���H��H��$�1�I��艒H����I������D�}��E���A�ƃ�����D	�@����	������D�E�A��v����D�$H��$���1�L���
�D�$����A��v-E��H��`M��H�
��H��HD�1�1��6�CH�H��$HdH3%(�!H��X[]A\A]A^A_����1�H��$�L���{����SA��vEA�A�A����rH��Hc�H�>��D�$H��$������D��$��k��A9��
D��$��5�A9���
1�1��3��A��h
A�A�A����H��$��3�����I����A�~�%L��$�����H�5�rL�����H��������/L����L�h_I��H����H��$@I�N8�1�H��H�	a��\H��$�H���C���D��	�L���D�E�����fDA�@A��A��A�������I�������������A�I��$��C1�D��t%�1�=@��H����@1���L���|����������D�}�����A��wZ��
��~7������������C1�H��$��������H��r���f���	�����C���@��u��E���A�ƃ�����D	�@�����fD�CH�� ���H��$��CH�����@��$��CH����D��$��CH�����DH��$��CH�����@H��$�CH����@H��$�CH����@��$���������
��@�7
�u������������`��H�T��1�1��<2�C�H�=J����CH������1�D��$��C��H�����H�߽A�A�藰
�A�A��Q���H��$�f�pH��@H�D$@�'�H��$��f�x�H��@H�D$H��A����$�fD�@H��@H�D$P���A��H��$�fD�HH��@H�D$X��A����$�fD�PH��@H�D$`�{�A����$�fD�XH��@H�D$h�P�H��$���@H�f�hH�D$p�+�H��$���@H�fD�`H�D$x��H��$���@H�fD�hH��$����H��$��@H�fD�pH��$���H��$��@H�fD�xH��$���H��$���@H��f�PH��$��]�H��$��H��$�H��S�@f�H����	1���u
H�CH��PpH��L�|$@A�E1�1�L����>�S����	1���u
H�CH��PpH��L�t$HA�E1�1�L���n>�S���@	1���u
H�CH��PpH��L�l$PA�E1�1�L���0>�S����1���u
H�CH��PpH��H�D$XA�E1�1�H�¹H�$��=�S����1���u
H�CH��PpH��H�D$`A�E1�1�H�¹H�D$�=�S���e1���u
H�CH��PpH��H�D$hA�E1�1�H�¹H�D$�h=�S���1���u
H�CH��PpH��H�D$pA�E1�1�H�¹H�D$�%=�S����1���u
H�CH��PpH��H�D$xA�E1�1�H�¹H�D$ ��<�S����1���u
H�CH��PpH��A�E1��1�H��$�H��H�D$(�<�S���61���u
H�CH��PpH��A�E1��1�H��$�H��H�D$0�V<�S����1���u
H�CH��PpH��A�E1��1�H��$�H��H�D$8�<�S����1���u
H�CH��PpH��A�E1��1�L��$�L����;�S���Q1���u
H�CH��PpH��A�E1��1�H��$�H���;�S���1���u
H�CH��PpH��H��L���E1�jA�H�5���5�SXY����1���u
H�CH��PpH��H���E1�L��jA�H�5�~�D5�SA_X���k1���u
H�CH��PpH��H��L��E1�jA�H�5ȏ�4�SA]A^���1���u
H�CH��PpH��H���E1�A�jH�L$H�5�p�4�SAZA[����1���u
H�CH��PpH��H��E1�A��jH�L$H�5m�i4�SAXAY���w1���u
H�CH��PpH��H���H�5<�E1�jH�L$ A��4�S^_���'1���u
H�CH��PpH��H���E1�A�jH�L$(H�5����3�SXY����1���u
H�CH��PpH��H���E1�A�jH�L$0H�5��3�SA^A_����1���u
H�CH��PpH��H���E1�A�jH�L$8H�5�y�E3�SA[A]���31���u
H�CH��PpH��H��E1ɺA�jH�L$@H�5�y�2�SAYAZ����1���u
H�CH��PpH��H��A��E1�jH�L$HH�5y�2�S_AX����1���u
H�CH��PpH��H��L��E1�jH�5��A��j2�SY^���B1���u
H�CH��PpH��H���E1�H��jA�H�5^��$2XZ��D��$��CH��u�DH��$��CH��\�@��$��C%�=�����H��5�D1�D��$��C��H������$��C%�=�����H����D��$��C%�=@����H����D1�Hc����D��H��H�$���L�$��~4��$�A9��I�P��H���DH��9J���H9�u�A�A�A�L�������A�A�A� ���f�H�R��1�1��'��fD�C��c�f������� ����C�H�=�Y�@��CH���@H��$��0�A�A�A� �5���H�;����H�;�|���H�;�+���H�;����H�;���H�;�5���H�;���H�;���H�;�C���H�;��H�;���H�;�R���H�;����H�;���H�;�r���H�;�$���H�;����H�;���H�;�=���H�;��H�;���H�;�\���H�;����H�;����H�;���H�;�@���M��L�+��
��C�H�=����CH���fD�C�H�=�I����CH��\�@�C�H�=���CH��4��C�H�=F���CH����C�H�=��x��CH�����C�H�=_u�T��CH�����S����H�@ܔHǀPHǀX1��ff.����SH��@ܔH��PH��t�C�HǃPH��XH��t�'�HǃX1�[����SH��H�5z�H��dH�%(H��$�1�H�L$H�T$�����tH�|$�)���t5�CH�H��$�dH3%(�H�Đ[�f.�H�|$H�t$����u6H�D$ H�T$H��xVf��H*�H��tfx~f���H*��Y��C�����8�{��H����1�H��1��c#�Y���fDH����f�H��H	��H*��X�H��u�H�D$H��x0f���H*��DH�Ѓ�f��H��H	��H*��X��m���f�H�ƒ�f��H��H	��H*��X��M����]��ff.�f���SH��H�5��H��dH�%(H��$�1�H�L$H�T$�X���tH�|$詉��t5�CH�H��$�dH3%(�H�Đ[�f.�H�|$H�t$�a��u6H�D$0H�T$H��xVf��H*�H��tfx~f���H*��Y��C���2��8���H�U��1�H��1���!�Y���fDH����f�H��H	��H*��X�H��u�H�D$H��x0f���H*��DH�Ѓ�f��H��H	��H*��X��m���f�H�ƒ�f��H��H	��H*��X��M������ff.�f���H�V1�������H�V����ff.����FH�V1�H��f�fD���FH�V�H��C���AUATUSH��dH�%(H��$�1�����H��1�H�T$H����
�����L�$$I�,$�}t�}u�E����H���k�	L�d$I�,$�}te�}uW�E��vO����E���I�$H�D$�oMH�H�UH�PH�D$H�8����GH��BH�(H���G�	H�$H����H��}H�8t1���4~���H�$H�H�8�݆����H�D$�}H�L�(H�$H�E��H�8ti1�1�H�T$�9����aA��tA���D$)ED�A��tD����D$)DD�A��tD����D$)DD�H�$H�H�8D������tA�CH��	@�[�
H��$�dH3%(��H�ĸ[]A\A]�fD���8����H�.�H���1�1��@�CH������E�(�I�$H�$�oEH�H�UH�PH�$H�8�w8�GH��BH�(�}��������l
H�D$H�8�.���fD�l
H�$H�8�f.�H�$H��H�H��@�����D��AUATUH��SH��HdH�%(H�D$81����~��������1�H�L$H�T$H�t$�
����eL�d$I�$�{t�{u�C���H�����	L�d$I�$�{t�{u�C���SH����	L�d$H�D$L�l$ H�H�H�D$ I�$H�H�D$(L�d$I�$�{t"�{u�C����H����	H�D$H�H���H�;�xt1���@{����H�D$H�H�8������H�D$1�H�H�8���t$H�D$H�5H�H�8���H��tvH�����H�D$L��H�H�8�������EH�E�!@H�t$E1�蛒
�������f�苓
H�D$8dH3%(�{H��H[]A\A]�@�C��8���1�I��H�D$H�1�H�
H�����f��EH�E�f�1�H�T$H�t$��
����v���L�d$I�$�{tu�{u_�C��vW����C��I�$H�D$�oH�H�SH�PH�D$H�8�v
�+i
H�D$H�8�GH��BH�H����	H�D$H�H�L�l$ H�D$ H�D$(�������C��I�$H�D$�oH�H�SH�PH�D$H�8�w'�GH��BH��{���������h
H�D$H�8��f�����8���H�Ҡ�1�H��1��|�EH�E�0�������C���I�$H�D$�oH�H�SH�PH�D$H�8�v
�g
H�D$H�8�GH��BH����@����C��I�$H�D$�oH�H�SH�PH�D$H�8�v
�g
H�D$H�8�GH��BH��Q����'�����SH��@ܔH��PH��t�C�HǃPH��XH��t�'�HǃX[��fD����u���鋐
ff.����Ѕ�u�AH��f.�H�ʉ���fD��ATUSH��dH�%(H�D$1���uWH��1�H����
���t@L�$$I�$�{t�{u�C��wLH����	H�$H��sH�;H��1��]�����ӏ
H�D$dH3%(��H��[]A\�fD����C���I�$H�$�oH�H�SH�PH�$H�8�w9�GH��BH��{�b����sH�;H��1������v���f��e
H�$H�8��]��ff.�f���ATUSH��dH�%(H�D$1���u_H��1�H����
���tHL�$$I�$�{t�{u�C��wLH���t�	H�$H��sH�;H���*����
�蛎
H�D$dH3%(uyH��[]A\�f�����C��I�$H�$�oH�H�SH�PH�$H�8�w)�GH��BH��{�q����]���f��d
H�$H�8���=��ff.�f���ATUSH��dH�%(H�D$1���u_H��1�H���͌
���tHL�$$I�$�{t�{u�C��wLH���T�	H�$H��sH�;H���
����
��{�
H�D$dH3%(uyH��[]A\�f�����C��I�$H�$�oH�H�SH�PH�$H�8�w)�GH��BH��{�q����]���f��{c
H�$H�8�����ff.�f���ATUSH��dH�%(H�D$1���u_H��1�H��譋
���tHL�$$I�$�{t�{u�C��wLH���4�	H�$H��sH�;H������
��[�
H�D$dH3%(uyH��[]A\�f�����C�p�I�$H�$�oH�H�SH�PH�$H�8�w)�GH��BH��{�q����]���f��[b
H�$H�8�����ff.�f���ATUSH��dH�%(H�D$1���u_H��1�H��荊
���tHL�$$I�$�{t�{u�C��wLH����	H�$H��sH�;H�������
��;�
H�D$dH3%(uyH��[]A\�f�����C�P�I�$H�$�oH�H�SH�PH�$H�8�w)�GH��BH��{�q����]���f��;a
H�$H�8������ff.�f���ATUSH��dH�%(H�D$1���u_H��1�H���m�
���tHL�$$I�$�{t�{u�C��wLH�����	H�$H��sH�;H������
���
H�D$dH3%(uyH��[]A\�f�����C�0�I�$H�$�oH�H�SH�PH�$H�8�w)�GH��BH��{�q����]���f��`
H�$H�8�����ff.�f���ATUSH��dH�%(H�D$1���u_H��1�H���M�
���tHL�$$I�$�{t�{u�C��wLH�����	H�$H��sH�;H������
��
H�D$dH3%(uyH��[]A\�f�����C��I�$H�$�oH�H�SH�PH�$H�8�w)�GH��BH��{�q����]���f��^
H�$H�8�����ff.�f���ATUSH��dH�%(H�D$1���u_H��1�H���-�
���tHL�$$I�$�{t�{u�C��wLH����	H�$H��sH�;H���j����
��ۇ
H�D$dH3%(uyH��[]A\�f�����C���I�$H�$�oH�H�SH�PH�$H�8�w)�GH��BH��{�q����]���f���]
H�$H�8���}��ff.�f���ATUSH��dH�%(H�D$1���u_H��1�H���
�
���tHL�$$I�$�{t�{u�C��wLH����	H�$H��sH�;H���J����
�軆
H�D$dH3%(uyH��[]A\�f�����C���I�$H�$�oH�H�SH�PH�$H�8�w)�GH��BH��{�q����]���f��\
H�$H�8���]��ff.�f���ATUSH��dH�%(H�D$1���u_H��1�H����
���tHL�$$I�$�{t�{u�C��wLH���t�	H�$H��sH�;H��	�*����
�蛅
H�D$dH3%(uyH��[]A\�f�����C��I�$H�$�oH�H�SH�PH�$H�8�w)�GH��BH��{�q����]���f��[
H�$H�8���=��ff.�f���ATUSH��dH�%(H�D$1���u_H��1�H���̓
���tHL�$$I�$�{t�{u�C��wLH���T�	H�$H��sH�;H��
�
��
��{�
H�D$dH3%(uyH��[]A\�f�����C��I�$H�$�oH�H�SH�PH�$H�8�w)�GH��BH��{�q����]���f��{Z
H�$H�8�����ff.�f���ATUSH��dH�%(H�D$1���u_H��1�H��譂
���tHL�$$I�$�{t�{u�C��wLH���4�	H�$H��sH�;H������
��[�
H�D$dH3%(uyH��[]A\�f�����C�p�I�$H�$�oH�H�SH�PH�$H�8�w)�GH��BH��{�q����]���f��[Y
H�$H�8�����ff.�f���ATUSH��dH�%(H�D$1���u_H��1�H��荁
���tHL�$$I�$�{t�{u�C��wLH����	H�$H��sH�;H������
��;�
H�D$dH3%(uyH��[]A\�f�����C�P�I�$H�$�oH�H�SH�PH�$H�8�w)�GH��BH��{�q����]���f��;X
H�$H�8������ff.�f���ATUSH��dH�%(H�D$1���u_H��1�H���m�
���tHL�$$I�$�{t�{u�C��wLH�����	H�$H��sH�;H��
���
���
H�D$dH3%(uyH��[]A\�f�����C�0�I�$H�$�oH�H�SH�PH�$H�8�w)�GH��BH��{�q����]���f��W
H�$H�8�����ff.�f���ATUSH��dH�%(H�D$1���u_H��1�H���M
���tHL�$$I�$�{t�{u�C��wLH�����	H�$H��sH�;H�����
��
H�D$dH3%(uyH��[]A\�f�����C��I�$H�$�oH�H�SH�PH�$H�8�w)�GH��BH��{�q����]���f��U
H�$H�8�����ff.�f���ATUSH��dH�%(H�D$1���u_H��1�H���-~
���tHL�$$I�$�{t�{u�C��wLH����	H�$H��sH�;H���j��
���~
H�D$dH3%(uyH��[]A\�f�����C���I�$H�$�oH�H�SH�PH�$H�8�w)�GH��BH��{�q����]���f���T
H�$H�8���}��ff.�f���ATUSH��dH�%(H�D$1���u_H��1�H���
}
���tHL�$$I�$�{t�{u�C��wLH����	H�$H��sH�;H���J��
��}
H�D$dH3%(uyH��[]A\�f�����C��I�$H�$�oH�H�SH�PH�$H�8�w)�GH��BH��{�q����]���f��S
H�$H�8���]��ff.�f���ATUSH��dH�%(H�D$1���u_H��1�H����{
���tHL�$$I�$�{t�{u�C��wLH���t�	H�$H��sH�;H���*��
��|
H�D$dH3%(uyH��[]A\�f�����C�I�$H�$�oH�H�SH�PH�$H�8�w)�GH��BH��{�q����]���f��R
H�$H�8���=��f.���SE1�H��0dH�%(H�D$(1�fD�D$H�D$H�D$@��tf1Ƀ�f�$u;1�H��1��z������H�L$(dH3%(����H��0[�fDH��1��A��Ã��tJ1���fD@��t���f�$u��f.�@��t8���f�$u��l�������Q����k�����`�����������K�������AWAVAUATUSH���|$4H�t$p�L$0dH�%(H��$�1�����Y9���Hc�1Ҿ荿��H��H���`�
�����HcD$0H�\�L�d�L�+A�E���~A�}tA�}u
A�E����L����	L�+I�}�i.1Ҿ��Hc��D$4��1�L� I��H�D$8H�M�gH�8��.�DH�1�H�8�/H�L��1�I��H�8�0��t�H���3�H�D$8�D$0H�D$L�|$I�H��{t%�{u�C����H���6�	H�D$H�H���L�+讽H�$H�D$H�H��x���H��$�E1�1�A��H�D$XH��$��D$ H�D$x�7DE�w��E9��pH�$Mc�E��B�,H�D$H�H�9X��
Hc�A�l@��%u�A�|%�c��Lc�K�l5�U�҈T$x!����H�0I��H�D$H���F���S�D$ �L$0�D$� �D$(����D$L�D$ �D$H�D$�D$@�D$$9L$4�[Hc�M�tA�>lu��Hc�M�tH�D$8�t$Hc�H�ȅ���
H�H�0�F���H��$�A���%<S�u	H�
v���Hc�H�>��H�l$8H���8���w
H�$H��$�dH3<%(H�$�	H�ĸ[]A\A]A^A_�H��$�H���~�	H��$���H�Ƅ$�fDH��H�=tC�J���H��H���47@���uۋ|$(HL$X������D�D$)�A)�A��DHNjD$D9�¸���AL�D)�9���B�T:A9�}XA�����?��E�A9�}�A�����?��E�D9��H�<$Ic�1�H�L$(D�D$�C�H�L$(D�D$H�$H�<$Ic��|$$A�@�A�VL�7�����0������t�1A�1���cE�E����H�<$Icω�H�H�L1H��@�*H��H9�u�E�|�D$����H��$��q	��H��$����	H��$�D�D$$H�0E��u@��0� D�Ƅ$���H���������H��D�q�H��F0L��H��D��E�D)�H��	H��A��E��B��4���A��uĸ��D)�Lt$XA���D$A����E)�AI�D9ȸ���AL�D)�9��%B�T:D9�~YA�����?�E�A9�}�A�����?��E�D9��H�<$Ic�1҉L$HD�D$(D�L$菹�L$HD�D$(H�$D�L$Ic��A�A�QH4$�|$$�I���������tA������E�E���H�<$Icω�H�H�L1H�fD@�*H��H9�u�E�|�C���f�H��$�H��$�H��$�H��I��H�D$@�^
��$�L���uH��$�D�t$(�HL�E��t	�D$H9�OȋD$A�A����A)�EI�9ȸ���L�D)�9���B�T:D9����QIc�E�V�H<$�|$$Hc���L��D�T$(D�D$$�L$����L$D�D$$D�T$(A�E��~)H�<$Ic�D��H�H�T
H�f�@�(H��H9�u�G�|:D��$�E������$���H�|$@��H
��A�����?�E�D9��H�<$Ic�1�D�D$HL�L$(�L$蟷D�D$HL�L$(H�$�L$�����H��$����	H��$���H�Ƅ$�H��H�=^oC�J���H��H���47@���uۋ|$(HL$X���/
��D�D$)�A)�A��DHNjD$D9�¸���AL�D)�9��4B�T:A9�}PA�����?�E�A9�}A�����?�E�D9��H�<$Ic�1�H�L$(D�D$裶H�L$(D�D$H�$H�<$Ic��|$$A�@�A�VL�7�D�������^��t�1A�1����E�E���&H�<$Icω�H�H�L1H��@�*H��H9�u�E�|�[���f.�H��$��c�	H��$���H�Ƅ$�H��H�=�mC�J���H��H���47@���u܋|$(HL$X������D�D$)�A)�A��DHNjD$D9�¸���AL�D)�9���B�T:A9�}QA�����?��E�A9�}�A�����?��E�D9��H�<$Ic�1�H�L$(D�D$�3�H�L$(D�D$H�$H�<$Ic��|$$A�@�A�VL�7�j
����������t�1A�1���cE�E����H�<$Icω�H�H�L1H��@�*H��H9�u�E�|���f.�H��$���	H��$�E�6�DŽ$�DŽ$��D$@�
�|$H(������D)�f.�A����f(�fT
f6f.
���A�N���"��H��H��H����|$H�D�\$@�D$(��EljD$H���A��G�e�EH�Eы|$HH�L$x�D$(�0�� D�\$@DŽ$��8-I���{�T$LE1Ʌ�t
Ƅ$�+L�D$XL��D�\$@D�L$HL�D$(�x��L�D$(D�L$HA�Ɖ�$�D�\$@��f.�A�oA9��RH�$Mc�A��B�%@�D$���a���H�D$��H�H�9X�o���Ic�H$H�|$8輲H�D$p�D�8���@H��$��+�	H��$�H�H�����D$(E1�D�T$$E��u@��0� D�Ƅ$���I����������D��H�ȍq0D�w�I��L��H��D��E�D)�H��	H��A��E��B��4�@��A��u�E���D�w�BƄ4�-L���)�H�D$XA��J�0�D$A�A��A)�EI�9Љ¸���AL�D)�9��&B�T:D9�~fA�����?�E�A9�}f�A�����?��E�D9��H�<$Ic�1�D�L$PH�L$@D�T$HD�\$艱D�L$PH�L$@D�T$HD�\$H�$H�$Ic�A�V�H�|$$��E�BA���A����E��t�1@�0A���BE�E�������H�<$Icω�H�H�L1H�f.�@�(H��H9�u�E�|����f.�H��$�A�o�/�	H��$�L�0A9���	H�$Mc�A��F�4����H��$���	H��$���H�=ohCH�Ƅ$�@H�ƍJ���H��H���47@���u�|$(HL$X�����D�D$)�A)�A��DHNjD$D9�¸���AL�D)�9��SB�T:A9���H�<$Ic��|$$A�@�A�VL�7�����-
������t�1A�1���iE�E�������H�<$Icω�H�H�L1H�@@�*H��H9�u�E�|���f�A�����?��E�D9��H�<$Ic�1�H�L$(D�D$�S�H�L$(D�D$H�$�@���E�H�<$1�Ic��/�H�$�v�fD�H�L$P豮H�L$P�@H�	�@H��$�H�	�oH�IH��H�HH�� �@�@@��vH���@
A���%<S��H�
�{��Hc�H�>����H�t$h�FL�H�L$`L�D$P��H�L$`L�D$PH�t$hI�H��oH�H�vH�pH�H�8�vH�L$P�!@
H�L$PH�H�8�GH�H��@H�H�0�z�f.�A�oD9���H�$Mc׃�A��B�%�J�@���W	H��@H�xH��H���D~u�$���D$ �D$�����D$ L$0E1ɽ ��0@��-t;��+t>��'uA��Hc�A�lD��Lc�C�T5�Ѓ��< uˉ����1���@A���H�‰|$$D�L$L�D$�D$@�DF�1�D$(�D$H��.���I�Lc�O�t
I��DP���H��$��
L���L$(�Y��H��$��L$(H��L)��H��E�H=����
�D$H�L$@�D$(9L$4���H�<$�O�H�|$8�E�H�Fw1�1���p���E�H�<$1�Ic��G�H�$�;���fD�|$09|$4���Hc|$41ҾI���v�D��H��H��H�D$8�Cm
������HcD$0H��H�D$��M�H��$��
�L$(L��L�D$�V��L�D$�L$(H��$�H��L)��H��E�H=������D$Hc�A�T�D$@�i���H�H���^D��$�D��$�E1��|$���D)�I�D9�AL�A�‰�A9��z
B�T?A9�}hA�����?�c
E�A9�}fDA�����?�H
E�D9��H�<$Ic�1�D�T$@�L$HL�D$(D�L$�ڪD�T$@�L$HL�D$(D�L$H�$H�$Ic��|$$E�Z�H�<0��A�VL�ƉL$$E�Hc�D�\$�>��L$$D�\$���]���H�<$Ic�D��H�H�T
H��@�(H��H9�u�G�|;�*����D$H���D�D$E1�����D�D$E1��o�D�D$E1��y�D�L$LE�����D�w�BƄ4�+L������D�D$E1����H���D$(A��$����
H��$�H��L�D$�F��H��$�H��H)��H��E�H=����P
H����L�D$�@
��I�0�D$Lc�C�T5���E��~0A�4>�@�/��H��)����E���DN�E�Ic�H<$L�ΉL$�׽�L$A���E��~-�<1@�.��H��)��ɸN�H�$A�Ic�H�4����I�H�~H��H���I�L�H�L�H��L��H)�H)����H�E�����|$L@
|$(t
@��0��E�BH�<$H�7A�4E��~,�@�*��H��)Ѕ��E���DN�E�Ic�H$A���ZA����E��t��A��tB�T�fB�T�E���E��t&��H�t>H4$A�)I��L9�u�E�|Mc�L$��s�������E���H�I�yE�H��I���H�t�I�t�I)�L)�H��B�
���H��}�E��t���H�t>H4$DA�)I��L9�u�E�|Mc�L$�{���E���r�����H�t>H4$�A�)I��L9�u�E�|Mc�L$�C���E���:�����H�t>H4$�A�)I��L9�u�E�|Mc�L$����E�H�<$1�Ic���H�$�&���E�H�<$1�Ic��ЦH�$���A��������D�fA�D�����H�1I�1��H�|1�I�|1�I�yH��I)�L)�H��B�
���H��$�I�H���I�|�H�|�H�~H��L��H��H)�H)����H���H�1H�0D��H�|1�H�|0�H�xH��H)�H)�H��A����H����H�1I�1��H�|1�I�|1�I�yH��I)�L)�H��B�
���H���H�1I�1��H�|1�I�|1�I�yH��I)�L)�H��B�
���H���H�1I�1��H�|1�I�|1�I�yH��I)�L)�H��B�
���H�������A�E�	�H��Aoe I�UH�PH�;�v�'7
H�;�GH��@L�+A�}�7��Q��������`���A�����Q���A�D�f�D��A����D$LD	�t
@��0�gA�VH�$H�A�4��~/f.�@�(��H��)����E�ҸAO�A�Ic�H<$Hc�L��E��=���h�����f��E1�f/�A��D��$����A�WA9�|(Ic�H$�|$$���INFA�����A�����?�hE�D9��H�<$Ic�1��L$(�D$���L$(�D$H�$�H�H�xE�H��H�D��H�t�H�t�H)�H)�D���H�Ή��H���L$HA�(1�1�H�Ko��D$(���D$H(�D$(�)�����CI�/�
�H�EI��o3H�0H�SH�PI�H�8����GH�|$H�H��@H�H��{�����f�D�\$@�D$(� ��A��f�D$(D�\$@��A���.D�\$(H��1�H��$�PL��$��T$XL��$��
D��$�^I��_D�\$(E������$�Ƅ$�-L�D$XD�pD��$������P4
I�H�8�!���@��0u�|$LD��:��H�5mmA�Ѕ�t1҉у�D�D�D9�r�A���DŽ$�A�L�D$x���A��D�A�D��������A�E�}�H��Aom(I�UH�PH�;�v�3
H�;�GH��@L�+���A��E���A��H��A����Ic���-�H�$H����A��D���A��I��A����Ic���-�H�$H�<0�p���f��E1�f/�A��D��$�����A�WD9�(Ic�H$�|$$�6�NaNA������A�����?4E�D9��H�<$Ic�1��L$(�D$�͠�L$(�D$H�$�H�5�k�1��@
�L$LD��$�����A��Ƅ$�+L�D$XD��$������1A�1�L�A�L��q��1�0B�L�B�L��%�A��A�L��L����1A�1�L�A�L��H�H��F��8����1A�1�L�A�L��J�1A�1�L�A�L���H�$E1����H�<$诟H�|$8襟����1�1�H��j�����S���B�T�B�T����D�L$L�>�A��A�D��D�����H�<$�M�H�|$8�C�����1�1�H��j��i�����L�fA�L���H�<$��H�|$8��H�2j1�1���,���f/ȿH�55j��A���T+�IcǺH$���B�L�fB�L���@��0u�|$LD�����H�5�iA�Ѕ�t1҉׃�D�>D�8D9�r�A��o��L�fA�L����L�fA�L���A�L�f�L�� ��L�fA�L����H�5-i�1��G>
�¹�f/ȹH�5�h��A���T+�IcǺH$�Q���@��S1�H��1�H��dH�%(H�D$1�H�t$�V��H��t)�T$H��C�SH�D$dH3%(uH��[�D�CH����&��fD��S1�H��H��dH�%(H�D$1�H�t$����H��t.�T$H��C�SH�D$dH3%(uH��[�f.��CH���许�ff.���AT1�1�UH��SH��dH�%(H�D$1�H�t$�c��H��t>�t$H��H���H��Lc�蔜�EL�eH�D$dH3%(uH��[]A\��EH�E�����ff.�f���AT1ɺUH��SH��dH�%(H�D$1�H�t$����H��t;�t$H��H���H��Lc����EL�eH�D$dH3%(uH��[]A\��EH�E��荷�ff.�f���ATUSH�� dH�%(H�D$1�������H��1��H�t$�V
������gA���OH��1ɾ����ATH�|$ A��H���A�1��I��XZM��tD��H�t$�1�����H��H��t)HcT$H��L���a+H���	�HcD$�CH���CH�H�D$dH3%(uH�� []A\�@�[V
��脶�@��ATUSH�� dH�%(H�D$1���t'�*V
H�D$dH3%(��H�� []A\�DH��1�H�t$���T
������F���/H��1ɾ����UH�|$ A��H���A�1��gH��XZH��tMH�t$������I��H��t,HcT$H��H���<*L����HcD$�CH��9����CH��&����{��f.��AWAVM��AUI��H���ATUSK�\5H��XH�<$H�|$ H�t$� H�L$L��dH�%(H�D$H1�H�|$��Hc�L�$+I�|$��M��L�\$I��u]H�t$K�</L�����H�t$I�<H����H�$C�'L�8L��H�L$HdH3%(��H��X[]A\A]A^A_�f�A��rRI�I�H��I�D��I�T�I�T�L��H)�I)�D����j�����1҉փ�M�3L�79�r��O���@A��u2E���<���A�A�A���+���D��A�T�fA�T�����@A�A�D��A�T�A�T�������AUf�ATI��UH��S��H��xdH�%(H�D$h1�H���H�L$H�D$����H�D$ H�D$(�H*@H�D$0H�D$8H�D$@H�D$H�D$0�H�T$H�H�5efPH�D$0P1�L�L$0L�D$(�
ZY����hL�L$LcD$H�L$���gM���^H�L$@Ic����YD$0�
 �f/��V�H,�H��H�|$ H��4�ׂ�CH��H��H�T$PHi�@BH)�H�L$XH��t�v
�4(
H�|$ �GH�L�l$(M��t7A�}v
L���(
L�l$(A�E1�H�=��`�I�EH�D$(�@H��H�޹�H�D$PH�D$XPjL�D$XH�|$`L�L$p��H�� H�|$H��~
H�|$@�W�H����H�|$8H��t�?�H�|$HH��t�0�A�$HcCpH�EH�D$hdH3%(�hH��x[]A\A]�@H�|$@1�H�5��=���H�����D�\��H,�H��?���DH�D$HL�D$L�
�|H��dH�L$�H��LE�1�1����H�|$8H��t臕H�|$ H��t�v
�&
H�|$ HcD$�GH�H�\$(L�l$HH���~M��t3�{vH���{&
L�l$HH�\$(L���i��C��xaL�+H�D$(�@A�$H�E���@H�|$8�H�5�c�:���L�L$LcD$H�L$�o���fDM��t�L����H�5J�1���4
H�\$(��b��f���H�V1��a������H�V��N���f.�@��H��H��tH��u�fDH�7�H���o
���Sf�H�5)cH��0dH�%(H�D$(1�H�\$H�L$�D$L�L$ L�D$H��)D$H�D$ ��
���t1��|$H��@���EeH�D$(dH3%(uH��0[��z��f.���H����n1҃��tH� �1ҀxX�‰�H���D��AWf�AVM��AUI��ATI��US��H��X�L$L��$�L�D$��$�dH�%(H�D$H1�)D$0H�D$@H��tH�5b�Ⱦ�H����M���D$�D$��������H�5�aL��蓾�H������
L���/�\$H�D$��$��M��E؋�$��M��E؃�dHc�H���j��|$H�Ņ��{�|$�p1��i��1ɾH�=s�H�����-�H��L��H��I��I��H�1b1���L���:�H�D$H��tH���(�M��t+��$���~ H��H�53aH���V�H��L��H���H�M��t+��$���~ H��H�5aH���&�H��L��H������$�������$����ZH��H�l$0�ݜ�H�t$0�D$8�bH���耑H�L$HdH3%(����H��X[]A\A]A^A_���
��t)�|$t"�t$H�T$,L���y�\$,H�D$�e���M���H���H�D$�K����M��L��L��H��LED$H��_H��1��i�L�l$M�������H��H�5�_H����1�L��H�=����+�H��I�����H������I�D�I9�v���H��I9����8-u�x ��H��H��L��趚L���^�����f�H��H�5�_H��莚���f�H��H�5]_H���n��`���H�5j_�1�������A0
�|���H�5�_�1�������$0
�_���L������ҏH���ʏH�|$�H�5�_�1���/
�(����c����ff.���SH��H�5�^H��PdH�%(H�D$H1�H�L$�D$H�T$ H�D$(H��H�D$8H�D$@H�D$H�D$�D$�D$ �D$$H�D$PH�D$PH�D$4PH�D$XPH�D$@PH�D$`PH�D$xP1�L�L$TL�D$h�޷
H��@���tP�D$Pj�D$P�D$4P�t$X�D$@PL�L$`L�D$p�L$DH�T$X�t$@H�|$P����H��0�C��u$H�H�D$HdH3%(uH��P[��H������f.���SH��H�5�]H��PdH�%(H�D$H1�H�L$�D$H�T$ H�D$(H��H�D$8H�D$@H�D$H�D$�D$�D$ �D$$H�D$PH�D$PH�D$4PH�D$XPH�D$@PH�D$`PH�D$xP1�L�L$TL�D$h螶
H��@���tP�D$Pj�D$P�D$4P�t$X�D$@PL�L$`L�D$p�L$DH�T$X�t$@H�|$P����H��0�C��u$H�H�D$HdH3%(uH��P[��H����ڨ�f.���AVAUATUH��H�5O\S��H�� dH�%(H�D$1�H�L$H�T$�յ
�����I�� �A��$����������H�|$E1�L�-������GL�7H�\$�{v
H���
H�\$M����L��蛗�ƉC����L���H�H�D$�@A��$t/�EH�EH�D$dH3%(��H�� []A\A]A^�f��EH�E��f��Lc��I�Ń��S�����u�H�|$��8����
H�|$�)���@L�-��� ���@�C1�H�=|��;�H�H�D$�@�@���f.�H�5���1��+
H�\$�s�������ff.�����0SH��H���,N
H� �H��[H�5����H����n�	fD�F
AVAUATUSH��0dH�%(H�D$(1�H�D$H����I���
��A���Mc�H�-�?�
E1�H�I��!@H��H�]�A��H����H���Õ�L9�u�H��H��L��萩�u�Mc�H���?I��H�|$B�\ ��H�l$�vfD�D$E1�E1�1��D$$H�l$H�T$H�[ZH��H�D$H���H��jj��g	ZY�����H�D$D�hL�0A��tnM�������H���h@	H�L$(dH3%(���H��0[]A\A]A^�D1�1�L��H��d����H�|$t��)���fDA�>passt�A�>autot�A�>none������w���@��v���fDH� �L���M��tL���]��A�Ņ��S�������I��H��tH���8��A�Ņ��.���1�1��d��.H��I��贒�H��t!L�p�@L��螒�H��tA��E)����L�����A�������Y��f�����@�7���f.�����?���ʀ��������?���Ȁ������A���?A���ɀ����~;A��A��?A��A�Ȁ�����tA���G�D�D�G�O�W�w���fDA���G�D��O�W�W���fD���W����fD�G�����W����A��?�G���A�ɀD�G@�7D�O�O�W���@��AWA��AVAUATU��SH��L��H���H�T$@D�D$8dH�%(H��$�1��.���D��H��A�ĉD$�̉D�|$tI��E��� ���SIc�A�'H�t$tL�t$ H�L$0��"H��$�fD�D$L�-L�?H�L$HH�t$PD�|$(D��t
�D$8��IcEI�m��$�Ƅ$�L�`�I��J�T%;D$(^H�\$0H�|$ H)�H�rL�ED�:D�t$<�$A�F�H�H�D$�f�F:< �&I�~H9�rH�ڋ4$H)�H���ˡ�I��H��u��T$I��f���jA�uA�Ef�t$�F���fDA��I��A)��EH�D$@D�8H��$�dH34%(L����H���[]A\A]A^A_��D��L��$�L�t$H��L�-��?M��H��H��%���<��H�D$h�H�L$(H��$�H�t$XH�t$tH�L$PH�t$`9D$�5I��A�E���u�L�t$D�|$t�'���f.�H�T$H��H���p������D�t$<H��H��I���t$XL�|$0A�L�D$XD��t$8L����L��H��XZ�ȄHcD$t�T$H�\$ �D$(H�D$0f�������L�t$ L�d$0M�L��M9���L�D$xL��L��L�=�_M�����EH��H��L9��d����<&u�L�kM9����C<#�\H�SI9�v<a��E&�CH��L��E���A�EA�UA��9�~F���f.�H�|$X��H�|$h���A�UA��D9��y���A�ED��I�M)�Hc�H��H��t�H��S� L��1��.�Ń�w��|$
�<H�|$(t�D��$�Ƅ$��D$<Hc\$tHc�L�`��\$0K�&9��p���H)�H\$�b����H�|$�l$H�$��$��D$�E�H�H�D$ �H�}H9��+���H�ڋt$H)�H��舞�H��H�������$B:D%u�H�T$ H��L���!��u��l$HH��L��t$hD�L$L��H�l$(L�D$`�t$@H�����YH��^H��脂H�\$A�U���D�E&H��H������H�|$PD������D$<���f�L�t$H��R1�1���f�L��E1����3���fD�{m�����{p�����{;�����E&H��H���|�����CH�$���<XuAH�{�L��耤�H�$H�T$xH��t�:;t3�H���E��CL��E��/���@�
L��L���@��H�$뾋t$��
w$Ic4�L�>����H��H���E�H�T$xH9�s�H�Z����=��EH��H�T$x��~���H���H�$���H�T$xH�$H��=�~�뱍p���v�=����'t��|$8��u��E1����蓜���AWA��AVAUATG�$?USH��h��$�H�|$L��H�T$8�L$D�D$,�D$+dH�%(H�D$X1����A����Ÿ�DL�Ic�H��H�D$ �.�I��E��� �E�E1�E1��D$D�D$D��D)���H�=�[Hc�H���>��f.���H�L$Ic�A�E�������ڃ����� ��������T$@A��A��D$0A�FB�D@D9��:�D$���`��&�m�|$+��D��Ic�H\$�;D)�H��L�\$Hc����L�\$H��H��trH)�H��
i�;#�x�C���<X��H��H�L$H9��?L�\$0�ř�L�\$0H�L$H��fDH9��H���C��DBu��Ic�A��L��&amp�@;E9������Ic�L��H�D$8D�0L��H�L$XdH3%(�6H��h[]A\A]A^A_�@~NH�L$Ic�A�E�������ڃ�}�����D��)ƅ�~$H���p�@��>���p_@��]��@L���@~H����xQ�oH�D$8�H�D$XdH3%(��H��h1�H�=��[]A\A]A^A_餀@~�H�L$Ic�A�E���_����ڃ�]�]D��)ƅ��x���H���p_@��]�e������D$AA�A��	�A�F�T$@�D$0B�D@D9�����A��L��1�L�L$Ic�H��H�D$ �}L�L$I�ËD$�������H�c�?1���fDH���P������x���9�u��9�w��H9�rۉ�Hc�)�H��H��H��?H�D0L��M���>���L��L�\$0L�T$���L�T$L�\$0H��A�DD9���A�^Mc�H�T$ L��C�3&Hc�L�H�L$0L�\$�^�H�L$0L�\$�D�sHc�A�;�����"���H�D$Ic�����n�D$@��A��A��D$0�s����H�5��?1Ҹ"9�uN�F��t�D$,tAHc�H�
��?Ic�L�\$H�RL�H��HcPH�pH���Đ�A�L�\$����H�����f��u�Ic�Lڃ|$0�SA�������D���P���H�L$Ic�A�A���D$0��\$@�������������~���D��)ƒ�����H�L$H���r_@��]����D�p_@��]������A���D$@�A����T$A	ÈD$B����D$0�)���fD<������<��@�������H�L$�T�r�@��?�p����É����?��	��U����D$@A��A��T$A�D$0���H��H9���L�\$0H�L$���L�\$0H�L$H��H9�t[H���C��DBu��G����D��)ƅ�����H�L$H���p�@��>�^����p�@��|������L���f�Ic�A��A�&�����H9�s�L�\$0H�L$�d��L�\$0H�L$H��
DH9�t�H���C��Bu����<��f���?���H�L$�t�~�@��?�(���D�LA�Q���?������D�����?���	�������	��������Ӎ�(���������D�L$BA��A��D$@@�t$A�D$0�3����A��L��1�H�L$0Ic�H��H�D$ �yH�L$0L�T$I���	���H��S�1�1����w���D��)…��Q���H�L$H���P_��>�:����D$A�̎A��A��D$@����D$0���H�t$@D��E��t1�����D�D�
9�r�Dt$0�V���E1��]���������<�����H�L$�t�~�@��?�����D�LA�y�@��?�����D�TA�R���?�������D�����?��	��������	�D�����	������Y���D�L$B��A��A��D$@@�t$AD�T$C�D$0����0����H��j���H���ff.��U��SH��H�5�GH��8dH�%(H�D$(1�H�D$�D$H�L$H�D$H�T$�D$H�D$ PH�D$P1�L�L$(L�D$0��
Y^���t9H�T$H�����D$PL�L$(D�D$0�t$H�|$ ����T$�CH�X�SZH�D$(dH3%(uH��8[]��L��ff.����SA���1ҾH�=�F�%	A�ع��H�=�F��%	A�ع��H�=�F��%	A�ع��H�=�F�%	A�ع1Ҿ
H�=�F[�%	���1����D��AWAVAUATUSH���H�t$H�L$,H�T$0L�D$8H�5.ddH�%(H��$�1�H�D$8��
������t$,H�|$0�xHcT$,�&H��H�D$H�H��H�$���H��H����H�L$@L�%��?A�'1۸�"H�L$�DD��IcD$E�|$��tH�D$8t7E�t$Hc�H�D$��H��I�t$f�T@A�VI��H�|Hc�襉�F�t,LI��fE��u�H�L$Hcú&H��f�T@�DLH�D�;�&ampf�H@D�$$H�D$E1�A)�L�hDE�u
E9�Ic�L��H����t}A��I��D9�}�H�MH�$H9�vH�¾&H��H)���H��H��u�H�L$L�,$I)�Ic��H�D$D�hH��@H��$�dH3%(unH���[]A\A]A^A_�Mc�L�<$H�ME�N�I��H��B�D@L��H)ʈEIc�H�4)H)�I)�艛�L�<$H���Q���H�D$H�L$�XH��@�����/��ff.�@��SH��H�5�OH��0dH�%(H�D$(1�H�L$H�T$H��H�D$ H�D$(H�D$P1�L�L$(L�D$0��
ZY���t5L�L$D�D$ H�T$��t$H�|$�m�H��t(�T$H��C�SH�D$(dH3%(uH��0[�@�CH����^��ff.�����2���f���AWAVAUATUH��H�5�DSH��HdH�%(H�D$81�H�L$H�T$H�D$H�D$�3�
����jH���"5
H�D$�D$H����H���EL�=2�?L�l$ L�5HBL�d$DA�GI��������u�A�A�O��9�x�1�f�I�WH��H�:tCؾL��D$H�
1�L����L����|�L��L��H��PA��hA
A�A�O�Љ�H��)�9�}�A�GI�����x���A�'��"H���?L�d$�f�D��HcCD�k��tH�D$t(L��T$�M|�H�KD�CL��PA�H����B
H��fE��u�A�A�H��H�
�AH�5���B
H�D$8dH3%(uH��H[]A\A]A^A_��\��f.�f�H���dH�%(H�D$1�H�t$�=�1�H��t�T$�D$���H�L$dH3%(��uH�����ff.�H���dH�%(H�D$1�H�t$��1�H��u%�D$�T$�����D$�����T$���H�L$dH3%(��uH���脋�@SH���'�����1�H��~H���H����[�@AUATUSH��H���<Q�����qH��I������H������H������H��A�E������H��A�E��Ņ���H�������A�E=wzE1�t/H����H�߃�9�L�A����H����E9ew։�A�EH��L��[]A\A]�f�1�H�oJ�1���E1�H��[L��]A\A]�f.�L��E1��nH��L��[]A\A]�����ff.���t��f.���ff.�f�AVAUI��1�ATA��1�UH��S���t1�[]A\A]A^��H������t
��f�%���t+H�����y���f������	�%�A��t$H������y��fD��A����A	֨�tH�����y��u����E���e������]���A���P������D����E���8���I�U�I�UD�r�%���DAWAVAUATI��USH��(H�t$dH�%(H�T$1�H��tH�1�1�L����D$����$E1�L�t$L�-2I�H���0oL��L��H��H��H��1��Z~�ul�_H���؇�H�5o�H�xH��H��HD�H����€���u�$D�|$����H�ǹH�59������u�D$�$E��uiH���AlH���9l1�1�1�L����H��H���G���E��t�$��uSH�T$dH3%(�D$uqH��([]A\A]A^A_��D$��fDH����kH����kE��u��f�H�\$�D$H��t����m�$H�D�8�P�{����I��f�AW�E1�AVE1�AUATU1�SH��H��XH�4$dH�%(H�D$H1�H�D$0H�D$H�D$(H�D$f.�D��@H���0�A�Ń��t@A�����A��E��~U��tQA��A���t�H��A��A�����A�Ń��u�H�t$HdH34%(H����H��X[]A\A]A^A_�f�A����{���A��t�E��t��u�A��@�����/v;H�������t�E1�A������A��E�A���E�1�A�������H����t&H���H���m������M���E1�E1�1������5���H���H���r���H�<$H���\�W���f������D�p�A��H��H�T$�iH�T$H��H��I����H���4L�d$H�FA�� ���1��L���
�L��
H����������!�%����t������D�H�JHD�H�L$��@�H�t$H�$H��H)�H�8�����
�����L���%i������1kH��H���v���H��A����H�߉E�`���H�����E�R���H�����E���H�<$�E���fA�����A���H�߃�Hc��$����w��������������^������fDL���ph���H�T$�
H����������!�%����t�H�<$A�E������D�H�JHD�L����@�H�t$H��H)����9
������AV�AUATI��US��H��dH�%(H�D$1�H�l$H����H�����H���Y����L���H���&�������dg�L��H��H���Q�H�����EH��A��fA����E��DD�1�C�DmD�4�Mc�L��I���pgL��L��H�pH����I9�uiE��tdA�E�H�M
E1�E1�H�@L��EL�D�L�
_E��Q��A����8f��f����f��	w��Ic�L�>��f.�H���f�1�H�\$dH3%(�)H��[]A\A]A^�D��H������H���to����������LD�H��L9��S���H���CfM��t�M��t����JhD�hD� H�@�h���fD���u�I����1��f��������E�H���g�����H���v������S������LD��a���f�f��	�N���Ic�L�>��@I���8����������f��������,��ff.����SA�����H�=�A��	A�ع��H�=�A�	A�ع��H�=�A�	A�ع��H�=wA�	A�ع��H�=gA�c	A�ع��H�=WA�E	A�ع��H�=GA�'	A�ع��H�=;A�		A�ع�	�H�=/A��	A�ع�
�H�=A��	A�ع��H�=A�	A�ع��H�=�@�	A�ع�
�H�=�@�s	A�ع��H�=�@�U	A�ع��H�=�@�7	A�ع�	�H�=�@�	A�ع��H�=�@�	1�[������wH��A��Hc�H�>��@H��u��H�|@��H��@��H��@��H�k@��H��@��H��@��H��@��H�]@��H�@��H�@��H�_@����ATUSH��H��dH�%(H�D$1���ul1�H����
���tXL�$$I�,$�}t�}ttH���s	H�$H�(H�}���H��H���Am�ƉC����H���d�CH���CH��`
H�D$dH3%(��H��[]A\��E��v�����E�haI�$H�$�oEH�H�UH�PH�$H�8�w �GH��BH�(�6���f.��[�	H�$H�8��f�H�5���1��m
�s�1�����|���SH��H�5�H�� dH�%(H�D$1�H�L$H�T$�D$��
���t$H�|$wH�D$H��?Hc�H�>��fD�CH�H�D$dH3%(��H�� [��|$H�=�>����|$��H�W��CHE�� c�CH����|$H�=E>����|$����fD�|$H�=*>����|$���fD�|$H�=>����|$���fD�|$H�=�=����|$���c����|$H�=�=����|$���C����|$H�=�=����|$���#����|$H�=�=����|$�������|$H�=�=����|$������|$H�=t=����|$�������|$H�=Y=����|$������|$H�=>=����|$������|$H�=
=����|$���c����z�ff.���AU�ATUH��SH��H��(dH�%(H�D$1�H��H�D$HD�H���c�H����H��'�h�f;�^H���hf;��I���hfA;E��H���hf;�H���hf;��H��#�hf;�H��!�hA��f9
��H���hf;�H�s�H����H����H���h�A�;��H���hA�;txH���hA�;tgH�s�H���f�H����H���hH�8H9;���1�H��A��$���u 1�H����A��DE��H�L$dH3%(D���hH��([]A\A]�fD�JA�8Kt�H���hf;������'�H�;�1�1���E1��fD�JA�8K�W����x�����JA�
8K�i����X����A�M8K�.���H�s�H��E1��>�H���t���I�EH9t[H�T8�1�1�膠������JA�8K��������JA�8K��������A����D�BA�	8C�������@A�
9C�M�������|w�ff.����AWAVAUATUSH��H��dH�%(H��$�1�H�D$0���;���1�H�T$0H�t$(���
�����H�D$0H�8����4
L�d$(I�,$�}tx�}�#�E�������E��ZI�$H�D$(�oMH�H�UH�PH�D$(H�8�v
���	H�D$(H�8�GH��BH�(�}��L�eL����e�HcUH9���H�̪�1�1�连H��$�dH3%(��
H�Ĩ[]A\A]A^A_�fD�CH���
�fD1�H�t$(��
���t�L�d$(I�,$�}�b����}u�E����
DH���0q	H�D$(H�(�6���E1�1ɺL��H�5�"�H��H����1�H�����A�ă�wiH�
�8��Hc�H�>��fD���	H�D$0H�8�E���fD��L�l$H�[1�L��H��H�D$H��L�t$H��uAL���AY��H���C�CH����L�l$HH��L�����L�t$H�H���M��t�L�l$HH����
A�1�H���-
A�V�H���{-
IcԾH���k-
E�FA�1�H��tL��1����H�T$H1�H�߾��/
A�N���!	A�N����D������H��A��H��H�5�6�@(
L���HX����L�l$P�H��L����H�����I�U�H�=P6H�������t�H�=;6H������������M�u��L��H����H�������L���N�L�����D����l�������������DHMB�����L����	L��H���L�H��	�2���D�|$P�T$RfA��f��fE���t���f���k����D$X����f���W������T$E���$L�l$H�8Y�T$�$H��D�8�I���҉H�P�@������A�H�D$8@H�D$H��X��H��I���*����b���L�l$P�@H��L���]�H��@�C���L��H�t$8�@L���~`�L�l$H����1ҾH��������
���L�l$H1�H�����H��L����E1�D�d$���Lc�H�D$@L�|$H�\$A��L��I��H�,$����7D��H�ߍi1���Hc�H�t$@�VH�T$HL��L��H��H����_���t�H�|$HI��H�,$D�d$L�|$H�\$H��t�D$L�$�U�D$L�$����M���	L���vU�H���y�1���@�D$Pjp2cL�l$H�3�A���H�D$H9D$P�!E��~6A�v��H������u!H������L��H��A�����H��t�H�1�1�1��(����1�H�����I������fD��H���6����n���H�t$P�H���l�H���R�����L�l$H�V�T$QI���D$P������T$S��T$R����T$UA�F�D$T������T$W��T$V���A�fD�H���+�%���fD��H���~��������H�t$P� H����H�� ���������U�t$PE1�1�I�ƿf��щ�����)у�����H�I���u�E�PD��G�E9���G�l�E��1�D���D�DPD��у�A�D��D)�A��A��A��Mc�L�E9�u�A����D�OE1��f.�����tP��у��D��)у�����Hc�I�A9�u�L)��tH���������H��D�7H��A�D9��(D�L7�1�fD�������TP���D��)������Hc�H�D9�uՍt?D�7D9���D�L7�1�D�������TP���D��)������Hc�H�D9�u�H)�I�FL�l$HH���������H��H��A�V���H����I��������H���~��������H�t$P�	H����H���������L�l$H��S�T$SI���D$P�����D$Q�����D$R����T$WA��D$T�����D$U�����D$V���A�F�D$XA�F�<���@H�D$0H���jH�0H�����I���7������H����������H�t$P�H�����H��������L�l$H�S�T$TI���D$PA�FA��D$RA�F�Ѓ����ҺI�A�F���f���H�������V���H�t$P�H���T�H���:����D$S�T$P�����D$R�����D$Q��Ѓ��V������@~	��l�������L�l$H�DR�T$VI���D$W������T$T��T$U����T$ZA��D$[������T$X��T$Y����T$^A�F�D$_���A�F���@�H����I�����Hc�H������������C����	H�5�-H����
����H�51!H����
���������E�OI�$H�D$(�oEH��,��H����H���m��I��H��������@1�H���^�I������H�T$8L��L��L�$�c�L�$L���N����PA�1�A�I��1�fD���փ��D��)�������Hc�H���u�D�_A��E�;E9���A�L;�L�4$D��E1�A��f�����A�4���у��D��)�������Hc�I�D9�u�L�4$A����A�z1������A����у����)�������Hc�H�A9�u�H���������I)�L��H��H��A�C�TRA�<9��F�L�1�@�Љ����A����D��)у�����H�H�9�u�C�TE�A9���E�T�1�fD�Љ����A����D��)у�����H�H�A9�u�H���������H)�L��H��H��H��A�V�M����E1�����L�l$H�O�T$TI���D$U����T$VA��D$W���A�F�D$[A�F���1��h���1��	���E1����1��B���1��b���1�����1����E1��a����-h�L���eL�����UE1�1�A�SH��dH�%(H�D$1�H�T$����t$H��H����H�߉��LH�L$dH3%(u	H����[]��g�f.���H�H�@H�p H�H�@H�x �f���H��H�=�+1��w�5	H�=�+1�H���w��SE1�1�A�H��dH�%(H�D$1�H�T$����t$H��H���S�H���[KH�D$dH3%(uH��[��g�AWAVAUATUH��S��H��hdH�%(H�D$X1��(�H�L$ �SH��H�`�H���蚳
���tH�D$ H��xt'H�D$XdH3%(�@H��h[]A\A]A^A_�@H�81�L�d$(L�|$8L�t$L�l$0�"�
H�D$@H�D$��H�=�*��o�H�D$(H�8�G<��<�C�o)D$@H�WH�T$P<v
H�|$�S�	�|$Tt
H�|$�ra	���t$H���`���H�H�=Q*��|$Tv
H�|$�6�	�����X�H�=1*�ǯH�D$ 1�H�H�8腺
H�D$ 1�L��H�H�8耻
�������H��@�D��E���IH����T�H����o��H�=���^�H�D$ E1�E1�L��L��L��H�H�8�o�
������uH�t$8H�=��1��tH�=H)��
���������H�=P����H�D$(H�8�G<�����������H�=)軮H�D$(1�H�=]���H�0��	�H�=�(蔮���������fD�H�=$��o����f.��D$D��H�|$0�p�E��ux���� ���fD�H�=I(�'��H�==(���������w��us��u_�H�=H(������f�1���	���@�˭���fDH�|$@�&�������H�|$@覭����H�?�������H�?舭����Nc�ff.���SH��H��dH�%(H�D$1��R�E1�1�H�T$A���H������H�L$dH3%(uH��[���b�f.�AWI��AVAUA��ATUH��SH��I��@�A��$�������1�E�u��f��ƒ�HU�EH�A��$H�����:��H�ׅ���'���H��H�D$��Q�H�|$���~�H�|$�FA��$��tA9����A9�����u��H�5��H�=�&IE��q�E��/�Z���H�UH�BH�EH�A��$H���Z�����uV�H�=O&�A��$��u�H�=c&1����HqA��$A9��t�������H��[]A\A]A^A_þH�=̴蟫�&���f.�H�T$��P�H�T$��H���w�A9�������H�=���]�A��$������_�����H�=���/�A��$����f�H�=6%�pA��$E���)����7���fDH��H�=W%[]A\A]A^A_�Npff.���U��SH��dH�%(H��$�1�H��H���sG�H�=*���twH��@��stnH�ǂ@��rtaH�{A@��ntWH���@��vtJH��@��mt=H���L�CAH�پH��$�WH��$PH��L���1�踰XH��Z�FH��$�dH3%(u
H�Ĩ[]���_�f���H���^H�=�)�ש�+H�=#*�Ʃ�H�=Q$赩���H�=C$蟩�;H�=*莩�H�=:$�}��H�=2$H���h����H�@�����uH�=*1��nDH�=��1��nf.���H�@�����t�f.�H�=�#1��bnf���S�����H�@���t����t?[�D����uH�=�#1�[�n�H�=Q�1�[�	nf�H�=v#1�[��m���H�@�����t�F���fDH��H�=�"1��mH���%���D��H�@�����uH�=9#1��mDH�=	)1��zmf.���H�@�����uH��1���H�=%)�Hm�SH��H���M�JH��[)�L�
ڰH�=�"��L����1��A���mD��AWAVAUATU��SH��XH��@�H�t$(H�T$0H�L$8L�D$@L�L$H��dH�%(H�D$1�H��$��$H�D$H�D$ H�D$���@����E1�L�%6�D�m��l���HT$��L�:�$M��tm��A�?MD���ul�H�="�ȦL���L�L����趦�H�=�!襦A��D9�~`�$��/v�H�T$L�:H�BH�D$M��u���L�=����t�L���K�L�����[�E9�~F�H�=��A���A�D9������tBH�D$dH3%(uZH��X[]A\A]A^A_��H�=����U���f.�H�=S 1��Rk�1�H�=� �Bk���������[���H�@�SH��H�P��tL��t(�;���H�s �1�����f���H�CPH��[��@H�w H�=�&H����jH�CPH��[����uDH�=j�jH�=� 1��jH�s H�=�81��jH�=�1�[�jf�H�w 1�H�=�8�njH�=��1�[�_jff.�@��H�Pt1��f�H������1�H�����H�PtH�����1�H���D1��ff.�f���H���H�t$(H�T$0H�L$8L�D$@L�L$H��t7)D$P)L$`)T$p)�$�)�$�)�$�)�$�)�$�dH�%(H�D$1�H��$�H��H�53;H�D$H�D$ H�D$�$�D$0����H�D$dH3%(uH�����Y�ff.�@��H���H�T$0H�L$8L�D$@L�L$H��t7)D$P)L$`)T$p)�$�)�$�)�$�)�$�)�$�dH�%(H�D$1�H��$�H���$H�D$H�D$ H�D$�D$0����H�D$dH3%(uH������X�ff.���SA�����
H�=&��A�ع��
H�=�m�A�ع��H�=�O�A�ع��
H�=��1�A�ع��H�=���A�ع� �H�=���A�ع�@�
H�=����A�ع������	H�=���A�ع��H�=���A�ع��H�=��}�A�ع��
H�=��_�A�ع��H�=w�A�A�ع��
H�=i�#�A�ع� �H�=X��A�ع�@�H�=K���A�ع[������H�=7������ATUSH��H��dH�%(H�D$1�������t$��	H�D$dH3%(�NH��[]A\�f�1�H���V�	��u�L�$$I�,$�}t!�}u�E����H����Q	H�$H�(H�}�Zj
H��H��tZH���E�ƉC����H���=�CH��j���f��FH�=�4���<�CH��=���@�CH��)��������E��9I�$H�$�oEH�H�UH�PH�$H�8�v���	H�$H�8�GH��BH�(�}�����
���@H�51��1����	�s� ����HU����UH��H�5S��H��dH�%(H�D$1�H���Rb
���t�<$��t.�!��EH�EH�D$dH3%(uH��[]�fD����������H�$����T���H�=� �P;��AW1ҾAVA��H�=�AUATUSH��XdH�%(H��$H1��H�D$H�@�D��E�����A���"A��t�|$������A���.
A���T	H�@���A�������u
�H�=�����1��H�cEH�5��m���H�~u@H�H��uD�J@�S:�=H��H����A�H��t�H�PH��1��(���H���7H��tH�;H��u��}�H�@���A�� ������	�H�=:�m���H��DH�51��L��$����H��`�L��	H�5H����ԟ
���t!H��$�H�5��H�H�1��n���L��H�5�H���蓟
���t!H��$�H�5��H�H�1��-���L��H�5�H����R�
���t!H��$�H�5��H�H�1����L��H�5�H�����
���t!H��$�H�5`�H�H�1�����H�=�n���H�=Fn����H�=h5����H�=������H�=>����H�=g���H�=n����H�@���A��@������H��$HdH3%(��
H��X[]A\A]A^A_���
H�=��_�A�������`�	�aH�D$ �q�H�D$H�@������gH��/H�5~�1��}�������H�T$H�5h1���[���H�\H�5j1���A���H��1�H�5Y��'���H�@�H�PH��tH�5J�1�����1�H��aH�59����1�H�@H�5�)�H��H�-�a����H��Ɣ�H�5!H�H��HD�1����H��Ɣ�H�5�)H�H��HD�1��z���H��Ɣ�H�5�H�H��HD�H��$>1��N����	�1H��1�H����
�S�H��1��H�5�������2H��1�H�Q��
�"�H��1��H�5����g�
H��1�H� ��
��H��1��H�5H��=��1��H��H�5m��H�N`H�5f1������2H��H�5T��HE�1��_�H�ڿ1�H�5J�I���I��H���
H��1�1�1��J�
H�D$<D�t$L��$�L�l$@I���efD�t$<H��1�ރ�Hc���2Hc�H�t$@H��HNjD$<�P�Hc��UG�D$<1�L���H��D�,�D$<�H��D �D$<�\�	�
E1�E1�L��L��L��L���R�
��t�D�t$H����HcۿH��1��D� H�5o�D�\�H����1�O`H��H����H��1�L�l$@E1��Q�
H�D$<1�1�H�D$L��L��$�E��D�t$,I��A���X�Ic�H�E��~A�E�,A��H�Ic�� HߋD$<H�t$@�P�Hc��JF�D$<1�H��E�l�Ic����
H�T$E1�E1�L��L��H���W�
�����D$<D�PD9��{���D)�0�F��0Ic�H���H��1��%1H���M���D���h�H�=�迖1�����H�=�觖�EH�=�'薖�DH�=�'腖�7H�=�'�t��H�=��c��H�=��R��@H�=�'�A��?H�=5(�0��5H�=d(���H�=M���H�=B��NH�=i(���/H�=*�ە�H�=	�ʕ�E�H�@����������H�=�蟕���f.�H�@����������6�H�=w�
�e�H� �H�xHH��t"���H��H���:�H�߉��;�H���C/�+H�=�%�"��H�=,���
H�='�����H�À�L�l$@H���Ğ
A�1�1҉�L���`z
A��1�H��H��$�L��赓
H�Ɛ�\1�L��H����=�
H�5��L���n�
H�@��������H�=��h���1��H�5���L��H�5f��!�
��L����
�������H�@������v��H�5FP�1��f����H�@��������H�=�˓1�����i�����S�H�5_�1����{��z���fD�+�H�5d�1�����S�����fD�
H�=��W��EH�=&�F��DH�=J&�5��7H�=�$�$��H�=ȴ���@H�=_&���?H�=�&���5H�=%%���H�=���ϒ�>H�=�&辒�?H�=�&譒H�@������H�=�臒���f���H�5��1�����C����fDH��H�5��1����U���f�D�t$,H�����H��H�5�!1��|�H���,�/�H��H���SH��1�L�l$@E1��q�
H�D$<1�1�H�D$L��L��$�E��D�t$,I��A���X�Ic�H�E��~A�E�,A��H�Ic�� HߋD$<H�t$@�P�Hc��j@�D$<1�H��E�l�Ic���0�
H�T$E1�E1�L��L��H���w�
��uB�D$<D�PD9�|�D)�0�E��Ic�H���7H��1��M+H���U���DD�t$,H���r�H��H�5�1��L�H����*��1����D�\$E��tH�@�D��E���g�=H�=!薐H�@�H�=���D��H�#������E��HE��_�H�@�H�\$ D��H��E��tL�5�H�߉��5���H�|$�6*����H�5l�1��x�����3���fD�C5�H�߉��	��H���)H��� ���H���)H���0�������H�@��\$���������n�H�=V�3脏H� �H�xHH��t"��H��H���4�H�߉��Z�H���b)�H�=��A��L�H��H���4�H�߉��'�H���/)�H�=`��H�@��������H�5�#H�=��VT���H�VH�5��1��6�����H��H�5:�1������DH��UH�5u�1�������H�kH�5J�1��������H��H�5*�1����=����H�=9�4�/�H� �H�xHH��t"��H��H���_3�H�߉���H���
(�BH�=)���@����C�f���UH��H�5�S��H��dH�%(H�D$1�H����P
���t2��tI1Ҿ1��ۍ�<$��1���7��EH�EH�D$dH3%(uH��[]�@�����H�$�� C�����u8USH��H���J�H��H���2�C��x H�+�CH��[]�f.���	H�5���1��E�	������u(SH�=�H���F'�'�)�CH�[��[�	ff.�����u(SH�=!H���F'�'�L)�CH�[���	ff.�����u`USH��H�@�H�(H��t3H��H���1�ƉC��x?H���(�CH�H��[]�f��FH�H��[]�fD��	H�5���1��=�	�s����USH��H�5��H��(dH�%(H�D$1�H��XH�L$H�D$H�T$1��N
���t&H�D$�8��H��H����0�C��x#H�+�CH�D$dH3%(u!H��([]�DH�5��1���	���A�ff.���USH��H��ƔH�(H��t/H��H���\0�ƉC��x3H���'�CH�H��[]�D�FH�H��[]�fDH�5i��1��
�	�s����USH��H��ƔH�(H��t/H��H����/�ƉC��x3H���;'�CH�H��[]�D�FH�H��[]�fDH�5��1���	�s��ATA��UH��SH��dH�%(H�D$1��+�Ã��t+E��~H�|$��D$��H��tH�EH�PH�U�H�L$dH3%(��u	H��[]A\��?�ff.�AUI��ATA��UH��SH���h������tSL��D��H����S������t>�����ۍ\���L��D��H����'������t��u�H��1�[]A\A]ÐH����[]A\A]���AWAVAUATI��H�50�USH��dH�%(H��$�1�H�L$(H�T$0H��H�D$HH�D$PH�D$HP1�L�L$<L�D$H��K
ZY���
H���H�|$8�xt1���O�����H�|$8�������|$(����H�|$8H�5���?�H��H����H�t$@H����H�T$HH�D$HH��H��HE�����=���H�D$H�T$HL�l$H�t$@H��H��IE�����=����D$H�l$HL�t$'L�l$H�t$@H��HEl$L�=Y�BH��H��A��������u!��DH��D��H���r��������=�u�f�H���8)�ƒ����=���=�������[H�D$H��H�L$@H�����T$'���H�HH�L$H@�0���������>�����H�l$HH�D$HD�l$@H��HE�H��D��H��������u�H���I9�H�|$@�
H�\$H�D$HA�D$H)�I�$A�D$�H��$�dH3%(��H��[]A\A]A^A_��H���x:�H�T$P����:�u{Hct$(H��$��H���� HcT$(1�H�$�H��H��H��H�D$H�D$H��-�t$@H�T$HH������=����H���f8�H���fDA�D$I�$�%���D�D$'�E��~
�L��蹅H��� ���H�EH�PH�U�T$'������H��1���cA�D$I�$���f.�����TH�T$H�t$@H��H��HET$���H�l$HH�t$@�N����L���T$��H�D$H�t$'�T$����@H���h7�H�D$H������H�������D�|$H�l$HH�t$@���H��HEl$H��H������D$(�t���D$(�P��H�t$@H�-��B���BH�D$H�5��B�F�T$'��~�L���c�H�D$H�T$'H�HH�L$H�H�t$@H�D$H��H��I9����U��H��u��T$'��~�L����H�t$@H�D$H�����1�1�H���D���H�l$HH�D$HD�l$@H��HE�H��D��H�������������DA�D$I�$���D�T$'���n����L���T$苃�T$�T���f�H����5����H�L$8H�1�1���a�i�����T$(���A��H���
@�|$'��~�L���%�H�D$HD�D$'H�PH�T$HD�H�t$@H�D$H�T$(����H�����T$'��~�L���ނH�D$H�L$'H�PH�T$H��D$(H�l$HH�t$@��tE1��Bf��D$'��~�L��蛂H�l$H�D$'H�UH�T$H�EH�l$HH�t$@A��D9l$(v8H�T$0D���H��u��D$'��~ܾL���J�H�l$HH�t$@��fD�D$�Q���@�|$'��<1��D$���_����D����T$'��~�L����D$(H�l$HH�t$@�.����L���܁H�t$@H�D$H�T$(�������7�f���AWAVAUATUSH��hH�t$H�L$$H�T$(H�5!8dH�%(H�D$X1��D
�����|$$L�t$(1��w���u�Y@H�PH9��HH��A�<A��u�A�L�Q���w�9��%�X9��H�D$8E1�L�d$@H�D$H�D$0H�D$��@A�W��A�,	�H���L��1��l��D$$9���D�<+D9���E���L��
H����������!�%����t�L������D�H�JHD�H�L$��@�H�D$H��L)�H�8����
�����H�D$8�މ�L�A��H�8��	�T$$A9��$D��A�GA�<�A�_9��A�A�GE�A�GA��������A�A�WA�_	A����A�GA�,���*A�WA�,�������fDH�|$��	���f���v�@H���@H�D$0��	L��
H����������!�%����t�A�L������D�H�JHDщ�@�H��H��jH�D$L)�L�L$ H�L$(��H�8��f
XZ���E��uH�D$�@H�H�D$XdH3%(uH��h[]A\A]A^A_��4����ATUSH�� dH�%(H�D$1���8C������8C�Ulj�-�8C�������)�i�\.��i�M���i�N����y�ë�����	zO��8C�����)�i��1��i�1��i���y�����؉s8Cf�)Ѕ������N��*��Y�H�D$dH3%(��H�� []A\�DI��1�L���?�tG�N���
8C�<�1�L��ʼn8C�?�uH�D$H��1���7C�"���f�H�L$�UljH��3$�������)�i�\.��i�M���i�N����#3�����7C1��ff.�@��SH���F�O����[�f���ATUSH��H�$H�� dH�%(H��$1����$H��1�H�t$��h�	����L�d$I�$�{t"�{u�C���NH����-	H�D$H�L�#L����!�HcSH9��H����xt"1��L���
�����H�D$H�L� L�������H�D$H�\$��H��H�H�8�j0����H�H���D�H����������!�%����t��H������D�H�VHD��H��H)މu��EH�E��S�	H��$dH3%(��H�� []A\���8���H�.�1�H��1��Y@�EH�E�f.�����C� I�$H�D$�oH�H�SH�PH�D$H�8�w'�GH��BH��{�n����Y������	H�D$H�8���0�ff.����ATUSH��dH�%(H��$�1���uyH��1�H�t$��5�	���t`L�d$I�$�{t�{u�C��wsH���+	H�D$H�H�3H�T$��AC����H�D$�EH�E�f����	H��$�dH3%(��H�İ[]A\������C��I�$H�D$�oH�H�SH�PH�D$H�8�w'�GH��BH��{�I����4����軥	H�D$H�8�ʐ��8���H�.
�1�H��1��W�EH�E�����0����&/�fD��AUATUSH��H�$H��H�$H��H�$H��(dH�%(H��$01����RH��1�H�T$H����	����2L�$$I�$�{t�{u�C���"H���
*	L�d$I�$�{t"�{u�C����H����)	H�D$H�L�d$H�;L���)�H���`H��$ H��$ �L���H�H�ދH����������!�%����t��H��L��$�����D�H�VHD��H��H)��;�H�$L��H��H�:H��H�?��H����1��@L����H��tVH���1�1��V�EH�E��K�	H��$0dH3%(��H��(0[]A\A]�fD1��@L��聱H��u�H�����{�CL���ü��u�L��跼���~���H�$L��H�H�8����I�EH�E�h���H���5���@����C��I�$H�D$�oH�H�SH�PH�D$H�8����GH��BH��{�����
�������C�pI�$H�$�oH�H�SH�PH�$H�8�w)�GH��BH��{��������f��[�	H�$H�8��f��K�	H�D$H�8�[���fD1��L��蹲���@����{�����1��L��蘲������������V�8��H�y	�1�H��1��T���}+�ff.�f���AUATUSH��H�$H��H�$H��(dH�%(H��$ 1�����H��1�H�T$H�����	�����L�$$I�$�{t�{u�C����H���f&	L�d$I�$�{t"�{u�C���=H���=&	H�D$H�L�d$H�;L��腵H���H�$H��$H��H�H�8�b�H����1��@L��誮H��tUH��	�1�1���R�EH�E�f���	H��$ dH3%(��H��( []A\A]�fD1��@H���A�H��u�I����A�}�BH��肹��u�L���v���u�H�D$H�H�$H�H�2H�8�����E�EH�E�c���fDH���.���@����C�
I�$H�D$�oH�H�SH�PH�D$H�8����GH��BH��{�{����f�������C�(
I�$H�$�oH�H�SH�PH�$H�8�w!�GH��BH��{��������	H�$H�8��f���	H�D$H�8�c���fD1��H���y����A���A�}�����1��L���W��������������8���H�8�1�H��1���P���<(�f.�f���USH��H�5�(H��(dH�%(H�D$1�H�L$H�T$H�D$�45
���tm�l$��~���H�t$�}��L�H�VH��
f�H������H�H��A��1�H9�u�Ⱥ��!5���)�����k�5)��CH�H�D$dH3%(uH��([]�����\'�ff.����AWAVAUATUH��SL��H��hH�<$H�=jH�t$�H�T$1�dH�%(H�D$X1��W�
1Ҿ	H�=DH�D$ I���8�
H�l$(H����H��L�=�yI��LE����A����H�|$PH��1�AWL�L$E��H��H��1��&�E1�1�L��A��H�5�=XZ���H�|$(I��t5H�D$PL�%2��
�� L��H���:6�H��u�H�T$PIc��D�
H�|$PM��t H��Ic�L��谚L����c�H�|$P�I
I����A��!��H�=��E1��0�M���M��tA��!��E1�M�����e�I��H���aI��H�|$ L��1�H���1���A�H�|$ H�5bF��H�|$ H���	H����A�?
�~H�$H��H��1����1�H�L$1�H��H����1�M��t!H��L��H��1���1�L���;	M��t!H��L��H��1���m1�L���	H�L$(H��tH�}�H��1��E1�H�L$�H��1�H�W�*1�H����+�H�|$(�����K�H9�t�1�H�\$XdH3%(��H��h[]A\A]A^A_�D�H�5"EL��L�l$ ���H�����fDI�<$H�L$0�H�5�N��p
����E1�E1�M���5����H�|$(�b���fD���H��I���H�L��L�L$P1�L�D$H1�H����L�d$HH����謐H�|$(I��M��H��H��1�1���H�|$H��{�����H9�����$��$����f.�H�D$0H��x�0���I���H�L$8�H�5jH�8��o
��uH�D$8H��xt	H�D$8I���H�L$@�	H�5��H�8�o
������H�D$@H��x�����I���H�L$P�H�5
H�8�yo
�������H�D$PH��x�����I���H�L$H�H�5�H�8�?o
�Dž��W���H�D$HH��x�E���H�T$@H�
�P�A�T H�D$8H��t	H��x��H�D$0�H�xHc��I��H�D$PH��PH�D$0H��@�| Hc���H�5b�L���I��H�D$HI�|$H�H�0�k�
H�D$H�D$@H�L�8L����H���/L��H�1�1���I1�L��H���H��H��I�D�� forH�xf�@ H�D$8H��tH�H�0���f�, �@L�|$0L��I�H�0�1�H�D$PA�FI�~fo�AH�H�0��H�5��H���H�xI�H�2�Q�����@L��H��1�1���@IH���(�1��A����軍H�|$(M��1�H��H��1�� ��
���L��H��1�1����H����f �
L���y�H�������H�|$L�������ff.���AW1�AVAUATUH���S��H�=�H��XdH�%(H�D$H1��D$H�D$ H�D$(H�D$0H�D$8H�D$@�D$�	�
I��H����xt	���PH�D$H�L$��H�T$ PH�5`�H�D$HPH�D$$PH�D$HPH�D$0PH�D$PP1�L�L$HL�D$h�,
H��0�����H�D$ Hc\$H��@� H��1�H��H)���H��u�H�D$8Hc\$H���� H��1�H��H)����H��u�H�D$(Hc\$H��f�� H��1�H��H)���H��u�H�\$0H��tGLcl$I��@� L��H��1�H)��}�H��H��u�t$H�|$0E1�1�A�1����H��H�D$@H��t%Lcl$I��� L��1�H��H)��-�H��u�t$L�t$ �����t$L�l$8����M����L��资��H�D$@I��H�T$(H��L��L������E����H�EH��tH���H�|$@H��t�
L9t$ tL���L9l$8tL����H�D$HdH3%(�|H��X[]A\A]A^A_�f�L�D$@M���e���L���
���I��H�D$@�P���DL���@D�|$I��E��tC��A�W�Ic�H�0H��Hc‰�H)��fDA�D�D$H��H9�t
A�T�DV u�E�}E���������L��1�H�81���� ��Hc�I�T
D�:E�������A���wt�A��
u�A�|

u�A�L
�� t��	u��PHc�A�L
�� t	��	�Y��Hc�DA�L��H���� t�	t��L���HD�l$I��E��tA�&�A�U�Ic�H�0H��Hc‰�H)��fDA��D$H��H9�tA��DV u�E�.E���������L��1�H�81��@� ��Hc�I�D�*E�������A���wt�A��
u�A�|
u�A�L�� t��	u��PHc�A�L�� t��	um��Hc�f.�A�L��H���� t�	t���H�E�m���H����1�1��C�EH�E�~������F������7��������H��1ҾH�=7��E�
H�5��H��H��1��{���f.��f��H���*��D$��6���T$�~C�f(��Y�f(�fT�f.%�C��f.���f/
#�raf(��-ŀf(�fT�f.���f(��\�f/5����f(�fH~��^�f.�fH~�HK�H�D$�D$H����~-�|f(��5\�fW�f(�fT�f.�wz�X�f/
F�v�\<�fW��fDf(�H�����\��n����H,�f���-�fU��H*����fT��X�fV��%�����H,�f��f(��=�fU��H*����fT��X�fV�f(��X�f/
���W����J���fD��ATUSH��dH�%(H�D$1���ugH��1�H��轷	���tPL�$$I�$�C�P���v�{t^H���	L�$$I�$�C<��<���EH�E�	@�c�	H�D$dH3%(��H��[]A\�fD�C��v�����C�h�I�$H�$�oH�H�SH�PH�$H�8�v�|�	H�$H�8�GH��BH��A����H��H9tI�EI�$H�H�
H��?H1�H��H)�H�U�B���D�EI�$�fT\~�E����f�H���EH�E�	��������ATUSH��dH�%(H�D$1���ugH��1�H���-�	���tPL�$$I�$�C�P���v�{t^H���
	L�$$I�$�C<��<���EH�E�	@�Ӷ	H�D$dH3%(�oH��[]A\�fD�C��v�����C��I�$H�$�o+H�(H�SH�PH�$H�8�v��	H�$H�8�GH��BH��A�����EI�$�}��|�f(�fT�f.����M�=����{u\�C��vT����C�2�I�$H�$�o3H�0H�SH�PH�$H�8�v�F�	H�$H�8�GH��BH�H����	H�$�EH���E���D�H,�f�f(��%|fU�f(��H*����fT��X�fV��6����{�ff.���ATUSH��dH�%(H�D$1���ugH��1�H���
�	���tPL�$$I�$�C�P���v�{t^H����	L�$$I�$�C<��<���EH�E�	@賴	H�D$dH3%(�oH��[]A\�fD�C��v�����C�I�$H�$�o+H�(H�SH�PH�$H�8�v�̊	H�$H�8�GH��BH��A�����EI�$��z��z�f(�fT�f.����M�=����{u\�C��vT����C��I�$H�$�o3H�0H�SH�PH�$H�8�v�&�	H�$H�8�GH��BH�H���		H�$�EH���E���D�H,�f��%�yfU��H*�f(����f(�fT��\�fV��6����[�ff.���AUATUSH��(dH�%(H�D$1��G���wzH��1�H�T$��H�t$��	���t_E1���L�d$I�$�C�P���v�{t`H���	L�d$I�$�C<��<���EH�E�
D�{�	H�D$dH3%(�kH��([]A\A]�@�C��v�����C�I�$H�D$�oH�H�SH�PH�D$H�8����GH��BH��E���D�D���L����E�E�c���fDL�d$I�$�{t�{u�C��wcH���	H�D$H�D�+����E��yf��H*��EI�$f��H*�E���D��	H�D$H�8�K���fD����C�I�$H�D$�oH�H�SH�PH�D$H�8�v
蚇	H�D$H�8�GH��BH��A����'����ATUSH��dH�%(H�D$1�����H��1�H��蹯	�����L�$$I�$�{te�{uP�C��vH����C���I�$H�$�oH�H�SH�PH�$H�8�w]�GH��BH�H���d	H�$H�����E�E�f���	H�D$dH3%(uH��[]A\�f��{�	H�$H�8���ff.�f���ATUSH��dH�%(H�D$1�����H��1�H��詮	�����L�$$I�$�{te�{uP�C��vH����C��I�$H�$�oH�H�SH�PH�$H�8�w]�GH��BH�H���T	H�$H���d"��E�E�f���	H�D$dH3%(uH��[]A\�f��k�	H�$H�8��
�ff.�f���ATUSH��dH�%(H�D$1�����H��1�H��虭	�����L�$$I�$�{te�{uP�C��vH����C��I�$H�$�oH�H�SH�PH�$H�8�w]�GH��BH�H���D	H�$H�����E�E�f��	H�D$dH3%(uH��[]A\�f��[�	H�$H�8��
�ff.�f���ATUSH��dH�%(H�D$1�����H��1�H��艬	�����L�$$I�$�{te�{uP�C��vH����C��I�$H�$�oH�H�SH�PH�$H�8�w]�GH��BH�H���4	H�$H���t��E�E�f���	H�D$dH3%(uH��[]A\�f��K�	H�$H�8����ff.�f���ATUSH��dH�%(H�D$1�����H��1�H���y�	�����L�$$I�$�{te�{uP�C��vH����C��I�$H�$�oH�H�SH�PH�$H�8�w]�GH��BH�H���$	H�$H�����E�E�f��۫	H�D$dH3%(uH��[]A\�f��;�	H�$H�8����ff.�f���ATUSH��dH�%(H�D$1�����H��1�H���i�	�����L�$$I�$�{te�{uP�C��vH����C�t�I�$H�$�oH�H�SH�PH�$H�8�w]�GH��BH�H���	H�$H�����E�E�f��˪	H�D$dH3%(uH��[]A\�f��+�	H�$H�8���
�ff.�f���ATUSH�� dH�%(H�D$1�����H��1�H�T$�H�t$�R�	�����L�d$I�$�{t�{��H���H	L�d$I�$�{tl�{uV�C��vN����C�;�I�$H�D$�oH�H�SH�PH�D$H�8����GH��BH�H����H�D$H�H�D$�H���h���E�E�
D胩	H�D$dH3%(��H�� []A\�fD�C���$�������C��I�$H�D$�oH�H�SH�PH�D$H�8�w�GH��BH�����D�{	H�D$H�8�֐�k	H�D$H�8�����		�f���ATUSH��dH�%(H�D$1�����H��1�H��虧	�����L�$$I�$�{te�{uP�C��vH����C��I�$H�$�oH�H�SH�PH�$H�8�w]�GH��BH�H���D�H�$H������E�E�f��	H�D$dH3%(uH��[]A\�f��[~	H�$H�8���ff.�f���ATUSH��dH�%(H�D$1�����H��1�H��艦	�����L�$$I�$�{te�{uP�C��vH����C��I�$H�$�oH�H�SH�PH�$H�8�w]�GH��BH�H���4�H�$H�����E�E�f���	H�D$dH3%(uH��[]A\�f��K}	H�$H�8����ff.�f���ATUSH��dH�%(H�D$1�����H��1�H���y�	�����L�$$I�$�{te�{uP�C��vH����C��I�$H�$�oH�H�SH�PH�$H�8�w]�GH��BH�H���$�H�$H�������E�E�f��ۥ	H�D$dH3%(uH��[]A\�f��;|	H�$H�8����ff.�f���ATUSH��dH�%(H�D$1�����H��1�H���i�	�����L�$$I�$�{te�{uP�C��vH����C�t�I�$H�$�oH�H�SH�PH�$H�8�w]�GH��BH�H����H�$H�����E�E�f��ˤ	H�D$dH3%(uH��[]A\�f��+{	H�$H�8����ff.�f���ATUSH��dH�%(H�D$1�����H��1�H���Y�	�����L�$$I�$�{te�{uP�C��vH����C�d�I�$H�$�oH�H�SH�PH�$H�8�w]�GH��BH�H����H�$H������E�E�f�軣	H�D$dH3%(uH��[]A\�f��z	H�$H�8���ff.�f���ATUSH��dH�%(H�D$1�����H��1�H���I�	�����L�$$I�$�{te�{uP�C��vH����C�T�I�$H�$�oH�H�SH�PH�$H�8�w]�GH��BH�H����H�$H������E�E�f�諢	H�D$dH3%(uH��[]A\�f��y	H�$H�8���ff.�f���H�%��FH��ff.�f���SH��H�5W�H��dH�%(H�D$1�H���
���t%�$�
K+1��CfT�hf.���H�H�D$dH3%(uH��[�����SH��H�5�H��dH�%(H�D$1�H���%
���t!1��$fTqh�Cf.�*��H�H�D$dH3%(uH��[���@��SH��H�5w�H��dH�%(H�D$1�H���
���t�$1��Cf.���H�H�D$dH3%(uH��[��@���USH��H�5KH��HdH�%(H�D$81�H�L$0H�T$(�M
���tXH�|$(���H�|$0���H�|$(�uH�D$0�xtN��H�|$0�H�D$0�C�H�D$(����H�D$8dH3%(�\H��H[]�DH�H��x���H�H���&H�$�,$�f.��t|H��H�,$H��H���,$H�$���,$�����z
�������Df�f���C�H*��<$�H*����,$�\$�L$�Y���@����CH��0�����H��H�H�$�,$�������ztT�����fDf���C�H*��\$�D$��f���H*��Y������fD��H���f���H���������CH�+�����CH�����;��ff.���SH��H�5�H��dH�%(H�D$1�H���E
���t�C�$���H�D$dH3%(uH��[������ATUSH��dH�%(H�D$1�����H��1�H���i�	�����L�$$I�$�{te�{uP�C��vH����C�t�I�$H�$�oH�H�SH�PH�$H�8�w]�GH��BH�H����H�$H�����E�E�f��˝	H�D$dH3%(uH��[]A\�f��+t	H�$H�8����ff.�f���ATUSH��dH�%(H�D$1�����H��1�H���Y�	�����L�$$I�$�{te�{uP�C��vH����C�d�I�$H�$�oH�H�SH�PH�$H�8�w]�GH��BH�H����H�$H���$��E�E�f�軜	H�D$dH3%(uH��[]A\�f��s	H�$H�8���ff.�f���ATUSH��H��0dH�%(H�D$(1���������1�H�T$ H�t$��9�	�����L�d$I�,$�}t�}u�E����H���'�L�d$ I�,$�}t"�}u�E����H����H�D$ H�(f�f/E��H�D$�CH���B��H�D$ �D$H���+���L$�^��H�D$(dH3%(��H��0[]A\��k�	��f�1�H�t$��O�	���t�L�d$I�,$�}t�}u�E��wUH���E�L�d$�CI�$������y���fDH����1�1��#�CH��N�������E��I�$H�D$�oUH�H�UH�PH�D$H�8�v
�q	H�D$H�8�GH��BH�(�N�������E��I�$H�D$�o]H�H�UH�PH�D$H�8�v
�p	H�D$H�8�GH��BH�(��������E�H�I�$H�D$ �oeH� H�UH�PH�D$ H�8�v
�Yp	H�D$ H�8�GH��BH�(�������fD��ATUSH��dH�%(H�D$1�����H��1�H���y�	�����L�$$I�$�{te�{uP�C��vH����C��I�$H�$�oH�H�SH�PH�$H�8�w]�GH��BH�H���$�H�$H�������E�E�f��ۘ	H�D$dH3%(uH��[]A\�f��;o	H�$H�8����ff.�f���ATUSH�� dH�%(H�D$1���u_H��1�H�t$��k�	���tFL�d$I�$�{t�{tQH���i�H�D$H��f��f.��Q����M�E���	H�D$dH3%(uzH�� []A\�f��C��v�����C�(�I�$H�D$�oH�H�SH�PH�D$H�8�w�GH��BH��X���f��n	H�D$H�8�����L$����L$�K���fD��ATUSH�� dH�%(H�D$1�����H��1�H�T$�H�t$�2�	�����L�d$I�$�{t�{��H���(�L�d$I�$�{tl�{uV�C��vN����C��I�$H�D$�oH�H�SH�PH�D$H�8����GH��BH�H����H�D$H�H�D$�H���X���E�E�
D�c�	H�D$dH3%(��H�� []A\�fD�C���$�������C�d�I�$H�D$�oH�H�SH�PH�D$H�8�w�GH��BH�����D�[l	H�D$H�8�֐�Kl	H�D$H�8�������f���ATUSH��dH�%(H�D$1�����H��1�H���y�	�����L�$$I�,$�}tc�}uQ�E��vI����E��I�$H�$�oMH�H�UH�PH�$H�8�wl�GH��BH�(H���#�L�$$�CI�$��^\�Y���
D�Ӕ	H�D$dH3%(u!H��[]A\�f.��+k	H�$H�8�����ff.�f���ATUSH��dH�%(H�D$1�����H��1�H���Y�	�����L�$$I�,$�}tc�}uQ�E��vI����E�d�I�$H�$�oMH�H�UH�PH�$H�8�wl�GH��BH�(H����L�$$�CI�$��^�~�Y�Z��
D賓	H�D$dH3%(u!H��[]A\�f.��j	H�$H�8����ff.�f���1��uT�V���"wL�WH���~B��Hc�L�DH���Q��z�@��	w.��0Hc�H9�~H��H��H�H9�~DH��L9�u�����z�@��w��7Hc�����z�@��w΃�WHc���H��1�H��1���oH��H���������������F���"��AVI��Lc�H��������AUH�I��ATUSD�_L�E���E1�f�1�A�*M�b�MЀ�	v�}�@����M����g�M�M����9�}E��tuA����A��u�A���#A�A1�I�[]A\A]A^��H9�uDI��H��E��H�A��t�M�bA�l$��MЀ�	wz��9��M��E��H9��9�}�f�f����D���H*��*�f(�f��Y��*��X�����A�*M�b�MЀ�	�/��9��<M��A���4@�M����|E��f��M�M����Df���*��Y���f��D���*��X����M�bA�l$��MЀ�	vG�M���v'�M���wBA��A�����M�����DA��A��M�M���s���@��9��A���D�߃���A�,$I���MЀ�	����9�����A��t{A�l$M�T$�MЀ�	���9��)���A�����fD�M����l����M����A���D�߃�t(A�jM�b�MЀ�	�2�����9��������A�A1��A[]A\A]A^�M�������M���wE���y���A�������A�,$I���MЀ�	wE��9������j���D�M���v0�M�������M��A��A��$���1��F����M�����M��A��A�����M��A������M����F���D�߃��)���A�jM�b�MЀ�	wF��9������A������A�jM�b�MЀ�	w���M��9���������������ÍM���������M����������H��XdH�%(H�D$H1��ub�F���"wZ�D$@I��H�Hc�I�y@L����H��1�H��H��L9�A��H9�A�H�����A��u�I�q@H)��L��f.�1�H�=sA�2�H�t$HdH34%(uH��X��(�����ATUSH��pdH�%(H�D$h1��G�P����L�V���"�@<�`��
tT�,Tf(�fT�f.��Jf.x���E„���f.���D„���f�f(��T$L�%���*��D$`H�l$ H�]?f(��t$�c���=�S�T$�^T$�,��|$H�A��D$_�?��L$f(��T$H������T$�^T$�,�H�A��H9�tf(�fT}Sf/D$s�H�u@H��H)����*@H����1�1��+1�H�=�?��H�L$hdH3%(uRH��p[]A\Ð�����f��H,�f��=�RfU��H*�f(����f(�fT��\�fV��~����3����ATUSH��dH�%(H�D$1���ugH��1�H���͊	���tPL�$$I�$�{t�{u�C��w\H���T�H�$H�H��H��������t�EH�E��s�	H�D$dH3%(�}H��[]A\�fD����C��I�$H�$�oH�H�SH�PH�$H�8�w)�GH��BH��{�a����M���f��ka	H�$H�8���
��ff.�f���ATUSH��dH�%(H�D$1���ugH��1�H��蝉	���tPL�$$I�$�{t�{u�C��w\H���$�H�$H�H��H�������t�EH�E��C�	H�D$dH3%(�}H��[]A\�fD����C�P�I�$H�$�oH�H�SH�PH�$H�8�w)�GH��BH��{�a����M���f��;`	H�$H�8������ff.�f���ATUSH��dH�%(H�D$1���ugH��1�H���m�	���tPL�$$I�$�{t�{u�C��w\H�����H�$H�H��H���}�����t�EH�E���	H�D$dH3%(�}H��[]A\�fD����C� �I�$H�$�oH�H�SH�PH�$H�8�w)�GH��BH��{�a����M���f��_	H�$H�8�����ff.�f���ATUSH��dH�%(H�D$1���uoH��1�H���=�	���tXL�$$I�$�{t�{tlH����H�$H�H�߾�h���H��H�����E����H�]�E�
��ۇ	H�D$dH3%(��H��[]A\�fD�C��v�����C���I�$H�$�oH�H�SH�PH�$H�8�w�GH��BH��?�����]	H�$H�8��f�H�5I?�1���k	�F����c����ATUSH��dH�%(H�D$1���uoH��1�H���	���tXL�$$I�$�{t�{tlH�����H�$H�H�߾�(���H��H���m��E����H�]�E�
�蛆	H�D$dH3%(��H��[]A\�fD�C��v�����C��I�$H�$�oH�H�SH�PH�$H�8�w�GH��BH��?����\	H�$H�8��f�H�5	>�1��j	�F����#����ATUSH��dH�%(H�D$1���uoH��1�H��轄	���tXL�$$I�$�{t�{tlH����H�$H�H�߾���H��H���-��E����H�]�E�
��[�	H�D$dH3%(��H��[]A\�fD�C��v�����C�`�I�$H�$�oH�H�SH�PH�$H�8�w�GH��BH��?����[[	H�$H�8��f�H�5�<�1��mi	�F���������ATUSH��@dH�%(H�D$81�����H��1�H�L$�H�T$H�t$�m�	�����L�d$I�,$�}t�}u�E���H�����L�d$I�,$�}t�}�"H����L�d$I�,$�}t�}��H����H�D$H���H�H�0H�F�H��H��"�uH�D$H�H�H�A�H��"�UH�D$H�l$ H��H�8�����CH��苃	H�D$8dH3%(��H��@[]A\�fD�E���[�������E��I�$H�D$�oUH�H�UH�PH�D$H�8��f�GH��BH�(������E����������E�$�I�$H�D$�oMH�H�UH�PH�D$H�8����GH��BH�(�~���H�D$H��H�H�0��H��H���2��C����H�+�C���H����1�1���CH��������E�p�I�$H�D$�oEH�H�UH�PH�D$H�8�w&�GH��BH�(�}��������fD�[X	H�D$H�8�ː�KX	H�D$H�8����fD�3X	H�D$H�8���fDH�5�9�1��=f	���������AWf��A��AVAUA��ATA��USH��8�t$dH�%(H�D$(1�f/�H�D$ �2�$E��AI�����H�|$ ��1�H�O����`L�t$ ��M���x���I�H��DP�aHc�H��H�D$E���zH�5�L������H��L)�H��E�E��t�K��VUUU�����)��D�|�|$A�t	A�GA���Nj$Hcׅ���H��H�t$��Mc�L�L$ H�\$H�t$I�I��L�M�z�A�H���H��H)�Hc�9���)ō}�L��H��L��H���@0H9�u��Hc�I�H�����D$��tA�I��L9�rJ1�A������@L9�r;I��H���CI��A�E��t����A����R9�u�L9�r�I��E�o���L����4$��t�-L�����H�L$(dH3%(L���_H��8[]A\A]A^A_��E�����$�{Hc����{Hc��k�L�L$ H�\$H�<(I��L�L����(���fW�A�$���@A�H�T$Hc�H�t$��L�L$ H�\$H�T$I��H�t$L�E��H�<L�������H���l���1��x���@�K��VUUU�����$)�Ӎ{Hc��>���H����Lc�L�L$ H�\$I�I��M�z�A�L��j������H��I)�H��L�L$H��I�H��r��L�L$�&���E������1�����3����AUATUSH��H��8dH�%(H�D$(1���t:���I������}	H�D$(dH3%(�VH��8[]A\A]�@1�H�T$H�t$��|	�����L�d$I�,$�}t�}u�E���H���x�L�d$I�,$�}t"�}u�E���'H���/�H�D$H�(H�D$H�}�,�.H���XH�t$�{	����5L�d$I�,$�}t"�}u�E����H�����H�D$H�(�E�,�.1��.���H��H���S��C���hH�+�C����@1�H�L$ H�T$�H�t$L�D$�h{	�����L�d$I�,$�}t�}u�E����H���V�L�d$I�,$�}t�}u�E���eH���
�L�d$ I�,$�E��tT<t"�}u�E���&H����H�D$ H�(D�mE��~H�ED�(�!�CH����tfDA�.L�d$I�,$�E��tA<t"�}u�E���KH���#�H�D$H�(�U��~H�E��tfD�,H�D$D��H�H�8H�D$H�����H�5)3�1���_	��������E�@�I�$H�D$�o]H�H�UH�PH�D$H�8�v
�QQ	H�D$H�8�GH��BH�(�|�������E��I�$H�D$�omH�(H�UH�PH�D$H�8�v
��P	H�D$H�8�GH��BH�(�>�������E耾I�$H�D$�oUH�H�UH�PH�D$H�8�v
�P	H�D$H�8�GH��BH�(�������E� �I�$H�D$�oMH�H�UH�PH�D$H�8�v
�1P	H�D$H�8�GH��BH�(�������E�I�$H�D$�oeH� H�UH�PH�D$H�8�v
��O	H�D$H�8�GH��BH�(�������E�`�I�$H�D$�o}H�8H�UH�PH�D$H�8�v
�qO	H�D$H�8�GH��BH�(�}�c����N���f�����E��I�$H�D$ �ouH�0H�UH�PH�D$ H�8�v
�O	H�D$ H�8�GH��BH�(�}������s������@��SH��H�5�	H�� dH�%(H�D$1�H�L$H�T$��	���t�L$�D$�H���C�H�D$dH3%(uH�� [����DS1�E1�f.�D��A��A��H��D�F���|D�A��D�D�	���LH��9�w�[�fDAWAVAUATUSH��hD�OD�WdH�%(H�D$X1��D�_H�T$L�D$P�D$fD�F�NH��H������	��N�	��N���	ȉB�I9�u�D�t$�D$�t$D�|$ A��x�j�D�Ћl$@�\$LD1�D�l$,D�d$HB��V���D!ȋt$D1��D��B���p $��D1�D�!�D1��D���1��!�D1��t$��F���ν����1�!�1�D�E���|���D�|$$��
1��!�1�D�E��*ƇG��D�|$(��1��!�1�D�E��F0���D�|$0��1��!�1�D�E��5�F����1��!�1�D�E��ؘ�i��D�|$4��
1��!�1�D�E����D����1��!�1�D�D�D$8��E���[�����1�!�1�D�D�D$<��E��0��\����1�!�1�D�D��"�k���
1��!�1�D�D�D$D��E���q�����1�!�1�D�E���Cy����1��!�1�D�D��3!�I���1��!�1�D�D�D$��
�E��b%���1�!�1�D�D�D$(���E��@�@���1�!�1�D�D�D$<��	�E��QZ^&��1�!�1�D�E��6�Ƕ����1�!�1�D�D�D$$���E��]/։�1�!�1�D�D�D$8���E��SD��1�!�1�D�D����؉���	�1�!�1�D�D�D$ ���E��0����1�!�1�D�E�����!����1�!�1�D�E���7É��1�!�1�D�D�D$��	�E���
��1�!�1�D�D�D$0���A��0�ZEA��A1�A!�A1�A�t$DA��Aȍ��㩉�D1�!�1��t$��D������D��1�!�A��
�ogD1����	�1�D!�F���L*�1�Ή���1�L$D��D�D$A!�A1�AȋL$$A����B9���L$A�D1���D$0������q���D�D1�1�‹D$<����0"a�mD���1�G��8�1�Ɖ��1��1�D�D�D$��	E��D꾤���1�1�D�D�D$ ��A�����KA���A1�A��5`K��A1�AЉ�A��1�A�D1��t$8����p�����D�D1�1�ƋD$D��	���~�(D���1�G���'��1�����1��1�D�D�D$��A���0��A���A1�A1�AЋT$(A����2���A�1�A��9���D1�։�����	D1�D�1��D�����1�1��B���|�A��A1��A1�A��D$A����0eV�ĉ�A�1�D1��A��D")��D�t$$��	��D�	�D1��A��
��*CD������G���#���	�1����
���	�1�D�E��9�����D�t$�����	�1�D�D���Y[e������	�1�D�E�������D�t$8�����	�1�D�E��6}���D�t$��
���	�1�D�E���]����D�t$0�����	�1�D�E��O~�o��D�t$(�����	�1�D�D����,�������	�1�D�E��6C���D�t$D��
���A���ND�t$ 	�1�D�A��A���~S���A���A	�A1�A���A����A�D	�1�ЋT$<����
5�:���D���	�D1�ʋL$��
��1���*D����G���ӆ�	�1���D$���։�	�A�1�DƉ��A�A�A�D�OD�WD�_H�D$XdH3%(uH��h[]A\A]A^A_��(�������~FD�J�1�L����f�H�������A��G���A��LGH�HL9�u��Hc����������f���H�#Eg����H�GH�H��ܺ�vT2H�G����AWAVA��AUB��ATI��1�US�@H���G�����?ȋO@�ƉGD������)�ȉG��L�lA9�s#H��D��L��L��[]A\A]A^A_�'���I���݃�sv������tA�$A�E����M�oL���T$L�������T$�)�A9�w����I�4,L�������C��@D9�r��A)�I��_���f�I�$I�uM��H��I�EI�D,�I�D-�I)�M)�A�A��A���u���A��1�����I�<H�<D9�r��X����I�F�t2����A�$A�EA�D,�A�D-��-���A�D,�fA�D-�������AT�I��USH��H��H��dH�%(H�D$1�H��H������C����?��7w|�8)�H��H�5[jB����H�ߺH������H��L���f���H�{H�1�H��H�CPH)��KX���H�H�D$dH3%(uH��[]A\���x)���"��f���ATUSH��H�5]�H��dH�%(H��$�1�H�L$H�T$�D$L�D$��	�����H�l$Ƅ$�L�d$pH�������T$H�t$H���'���H��L������|$��H��$�L��H���Y���H��H����������!�%����t��H������D�H�VHD��H��H)�s�$��CH�H��$�dH3%(u/H�İ[]A\�fD�C�L�����CH������fD��AWAVAUATI��H�5�USH���dH�%(H��$�1�H�L$H�T$�D$L�D$���	����H�|$E1�1ɺH�5�x�bH��H���L�l$H��$�L������fD��H��L������H��H���;8A�ƅ��L�|$pL��L���$����H���W^E�����|$��H��$�L���H�����H�ދH����������!�%����t��H������D�H�VHD��H��H)�A�t$脱A�D$I�$H��$�dH3%(uIH���[]A\A]A^A_�DA�D$I�$��A�D$�L���*�A�D$I�$��)��f���AWAVAUATUSH��XH�t$H�L$4H�T$8L�D$@H�5��dH�%(H�D$H1�H�D$@��	�����H�D$@H�l$8H�D$H���H�����H�t$��A���^�I���f��H�D$L�(�y��1�H�I��H���@H����t@�DA��L�LHc4�H��A�Dut܍v�����L�ūIc4�I�>A��fDE���A�L��苸�H�\$�C����H�D$L�0�@H�D$HdH3%(�X
H��X[]A\A]A^A_�@Hct$4��I��聭I������H�D$�@H���E����A�S�fDH�\D�B�4���R�b��Ht9Lc�C�D]��
�����wB�4���AI��[�Hc�A�3�|
E���A�WA����E���'A���A�A��Ic�I�
A��L�LA�H�ϋ�����H�|$ H�uLc�L���H�t$(��L��M�֐L�T$M��t	M9��}L�\$M�Lc�C�DZ�FE���}D�\�Nc�A9�����C�!�tLc�L��C�DJ��E���D��A��wB�<���AI�[�Hc�A�9����t�|�<�Au	��I��E��t�T��<�S��fDD9�����B�(SI�Lc��@�D�<�E��E����	A�A�����t1ۃ<�N�����E���*
A�NA�����f���H���D9��'B�(K��I�Lc�f�A��H�L$ Ic�L�LA�1�4����p���I��D9��TC�.���f.���B��w�Ic4�L�>��fDD9��g��B�(FI�Lc����t�4���H����N�NHc�A�Dz�?���D���A��w�4���AH��[�Hc��7����E��t�T��<�G����D9��}	��B�(JI�Lc�����DD9��wA�����B�(Lc�I�����fD�t�<�G��D9��`��B�(TI�Lc����D�THc4�H��A�Dr����������w����AH��[�Hc��h���D9��w��B�(YI�Lc��L���@�t�4���I����H�����D9��%��B�(XA��I�Lc�����fDD9��D�KB�(KE9��5��Mc�B�SLc�I�������t�4���I����H���D9��u��B�(0A��I�Lc����fD�T�<�H����D9�����B�(PI�Lc��e���D�THc4�H��A�Dr�H��������w����AH��[�Hc�� ���D9����B�(WI�Lc�����@E1��tHc<�H��A�Dz���D���A��w�4���AH��[�Hc��7�����E��t
�T�Hc�M�RA���t$A�����wF��A�S�Hc��|���D9����B�(HI�Lc��`���A��M�V���D9����B�(BI�Lc��:���f.���B���$���H�=��Hc4�H�>��E������T��<�C������IcϺ�H��諧A��L�����L��1ɺ�脧I������@IcϺ�H���c�A��L������L��Hc˺��;�I�����IcϺ�H����A��L�t��{���IcϺ�H����A��L�L��t���E1�1��m���fDIcϺ�H��軦A��L�����E����A�EA���	���f�E���iB��A��A�����Ic�L����L�L$(A��L�T$ �M�L�T$ L�L$(I��I�
����Ic�L����L�T$ A����L�T$ I�����D�T����At	��O�Q���D9�����B�(XI�Lc����fDH�5�1��D	�%���A���N�t�Hc<�H��A�Dzt+D���A���p��AH��[�Hc��7�����A��~�T��<�H�����D9�����B�(FA��I�Lc��b���f��T����O�5�����A������'�����THc4�H��A�Dr�_��������w����AH�[�Hc��7���D9�����B�(JA��I�Lc����IcϺ�H��蛤A��L�����IcϺ�H��D�L$ A���j�L�ǡD�L$ ���f�IcϺ�H��L�L$ A���2�I�L�L$ L����W���fDIcϺ�H����A��L�\������tLc�C�DZ����A��E���A�9t/HT$(H�|$ ��I��L9���I�q@��u�H�|$ H�|$ �?D��������f�IcϺ�H���k�A��L�Ġ����A�2f�������H�΋6����1������IcϺ�H����A��L�t��*���IcϺ�H����A��L�L��f���IcϺ�H���ˢA��L�$�����IcϺ�H��裢A��L����d���Ic�L����L�T$ A���u�L�T$ I���(���IcϺ�H���S�A��L������IcϺ�H���.�A��L�������Ic�L����L�T$ A����L�T$ D�I��I�
�e���Ic�L����L�T$ A���ΡL�T$ I�����Ic�L����L�T$ A��裡L�T$ I�����Ic�L����L�T$ A���x�L�T$ I����IcϺ�H���V�A��L����^���IcϺ�H���1�A��L����Z���H�<�H�|$ �w����~��H�4��6���Uf��SH��H�5��H��dH�%(H��$�1�H�T$�D$)D$�p�	�����1�H�|$������|$�h������H�|$H������H��H���#b	H�L$�H��H�5��g	H�L$�H��H�5>��qg	�u�����H��މ��2�����)�H�5E�Hc��Ag	�MH�ߺH�57��*g	H�����f�H��$�dH3%(��H�Ę[]���CH���H�l$ H�L$�df�H�ޝH���H*D$�^� �
H��H����������!�%����t��H������D�H�VHD��H��H)�s蝠�CH��A����f��f��C�H*L$�H*D$�^ �X�������l��ff.����1����D�������f���SH��H�5zH��dH�%(H��$�1�H�T$H�D$�D�	�����1�H�t$H�|$���H��1��H��ډ�������H���`	H�L$p�H��H�5���ke	H�L$h�H��H�5{��Re	H�L$x�
H��H�5m��9e	H��$��
H��H�5[��e	H�L$0�
H��H�5L��e	H�L$8�	H��H�5=���d	H�L$@�	H��H�5-���d	H�L$P�
H��H�5��d	H�L$X�
H��H�5��d	H��$��H��H�5���d	H��$��	H��H�5��hd	H��$��
H��H�5ٛ�Ld	H�L$`�	H��H�5ʛ�3d	H�L$�H��H�5���d	H�L$�H��H�5���d	H�L$(�H��H�5����c	H�L$ �H��H�5����c	H��$�dH3%(uH�İ[��CH����޶�f.�@AVAUI��ATI��U��SH��{t�{I��u�C��w6H���n�I�1�f�Ic<��<;A�|H��9��[]A\A]A^�f�����C�p�I��oH�SH��H�PH�� ��vH���,	I��@I��@I�H����I��{���fD�����4AWHc�1�AVAUATUSH��H��hH�t$��|$諚��H��H�D$�|[	�����L�|$I�H��{u�{t9�S���bH���C�����{tH���H�D$H�H�L�Hc[1ҾH��L�D$(I���%�1ҾH��H�D$ ����L�L$ I�����A�1�I�RHXRHL�D$(�MH�H����H�H���"���f�E�d)�A��A�D��H��D9���Hc�D�kE�$E9�~Ic�L��<*����0<	�	D��A�L$�E��8���H��L���^�����xjA�D9|$}�H�|$L�T$ L�L$茘L�L$L����L�T$ L���r�D��H����D9|$�����A���$���@�|$��D)�A�������A�L$��������E��8�O���fDH�|$L�T$L�L$ ��L�L$ L����L�T$L���ڗD��H�{�1��1���H�D$�@H�H��h[]A\A]A^A_�H�|$Ic�H��H�L�(A�}�;A�E����A�}t@L��L�T$8L�L$0L�D$(H�T$ 蓮H�T$ L�T$8I�RHXRHL�L$0L�D$(H�L�(A�E����fD1�D��H�q�1��L�T$0L�L$(L�D$ �9��L�D$ I�RHXRHL�L$(L�T$0���fD�
1�H��L�T$8L�L$0L�D$(H�L$ �m��H�L$ L�D$(I�RHXRHL�L$0L�T$8���0��	�1��Hc�f.�A�4�ӍNЀ�	@��A9���H��@��u��z���A�}����A�M����L�(���H�|$��H��h[]A\A]A^A_�Q	D;|$��1�1�1�M��L�-їM��f.�A�4A�����@<8w+��IcD�L�>����'����)��9����9�L�H��A9���}L�t$(1�Hc�L�|$ �N��D$1�H�D$8H��D�d$0A��@H�D$ H�t$(D���D�؃�@<8��H�5���Hc�H�>��@��x����)��9��l���H�|$L�|$ L�t$�L�L$ L����L�T$L�����f�}f.�����9��)�����|+���������)�9�|�������x����)�9�}�H�|$L�t$A��L�|$ �z�L�L$ L���m�L�T$L���`�D��H����������K����)��9��9�����fD���~����)��u���H���X1�1���>�1��Y�������W�������)��9��F����J�,�������L�T$@A�EH�
L�L$8L�D$0H�T$(H�L$ �k�H�L$ H�T$(I�RHXRHL�D$0L�L$8H�H��AoML�T$@H�I�MH�HH�H�8����GH�H��@H�L�(A�}�����A�}���������@����CI�/�ՒH�EI��oH�H�SH�PI�H�8�v��$	I�H�8�GH�|$H�H��@H�H��{������{����������L�T$@A�MH�
L�L$8L�D$0H�T$(H�L$ �C�H�L$ H�T$(I�RHXRHL�D$0L�L$8H�H��Ao]L�T$@H�I�MH�HH�H�8�v=L�T$8L�L$0L�D$(H�T$ �!$	H�T$ L�T$8I�RHXRHL�L$0L�D$(H�H�8�GH�H��@H�L�(A�}������W���fDL�T$8L�L$0L�D$(H�T$ �#	H�T$ L�T$8I�RHXRHL�L$0L�D$(H�H�8�0�����L�|$��SI�/�6�H�EI��o#H� H�SH�PI�H�8��3H�t$�GH�H��@H�H��{�d����L���f��L$H�͑1�1��L�T$(D)�L�L$ �*�L�T$(L�L$ ����Ic�Hc�1��L$@H�臞�L$@A�H��9\$0�R���Ic�L�L$ L�T$(H��A��H\$8H�|$L�T$ L�L$膐L�L$L���y�L�T$ L���l��H�\$��L�|$8D�sL�����CL��H�H��h[]A\A]A^A_�4��A��D$@���e���HcL$�D$@H�\$HD��H�t$D�d$PH�H�D�L�,�I���7f�L��蘡M�<$Hc�f�I�����AZf~DM9��dM�eM�<$A�t�A�u�A�G��v����A�G�b�I�$�Ao/(I�wH�pI�<$����GI�$�@M�<$�h����A��D$@�������HcL$�D$@H�\$HD��H�|$D�d$PH�H�D�L�,�I���,DL���M�<$I�Hc�I����H�TM9��oM�eM�<$A�t�A�u�A�G��v����A�G葎I�$�Ao70I�wH�pI�<$����GI�$�@M�<$�o���A)̸DH����L�-��BA��ntA��vL�-�BH�׮BLD�A��D$@�������HcD$Ic̋T$@H�\$HH�t$L�|
H�L
L�4�H�QL��M��I��H�;L��L��I��H�����M9�u�|$�D$@H�\$H�tE�dD�t$����L�-*�BA��NtA��VL�-	�BH�"�BLE�A��D$@������HcD$IcԋL$@H�\$HH�t$L�|H�TL�4�H��L��M��I��fDH�;L��L��I��H���=�M9�u�H�\$H�|$�D$@�tE�d��t$�i����A��D$@���Z���HcL$�T$@E��H�D$H�L�,�L�t�DIc�I�}�I��H�H�~�BA�����M9�u؋t$�D$@�|E�d��|$���HcD$H�t$E1�A��hA��L��A���x�|$I��zI�����zt7A�FL����H��L�D$PD�\$H�L$@薣L�D$PD�\$H�L$@I�L�2E�|$�9J����l����A�A�H�\$@M�TE��L���$�Ic׉�A�H�
A���A��I9���I��E�F�A�@�<	vA�@�<�PA�@�D����A�OE��t�Hc�A�wE1�A��H��멍A��D$@������HcL$�T$@Mc�H�D$N�|H�L�,�L�t��I�}L���I��H�	�BI���@�M9�uۋD$@�t$�|0F�d �|$�q���D9���A���`���1�Mc�A��aHc�@��I�L$@��L��辘�HcD$�L$@�p�t$H�t$L�4�M�>A�L����A�t"�FI������L���L$@��M�>�L$@A9O��ANWL��I�7�L$@Hc��n��L$@A������|$�D$@D�d$PH�\$H�t�t$E�d����H�\$HD�d$P����D���v�H�|$L�T$L�L$ �3�L�L$ L���&�L�T$L����D��H����:��	I�H�8����	I�<$�M����	I�<$�n���A�G����A����������B���+�z�?����a�����Ic�1��L$@D)�H�Hc��M��L$@A������A�@�<wA�@�D�������H�\$@A�����D��1�H�H�1��D�\$H��1�D�\$H�m���D��1�H���1��L�D$HD�\$@�R�L�D$HD�\$@I��H����H�|$L�|$ L�t$��L�L$ L���܈L�T$L���ψ�d�h�|$�:�L�T$ 1�E1�L�L$�q�L�L$L�T$ H�D$8H�������L�D$X�BD�\$P�L$HH�T$@�7�L�D$XH�T$@�L$HD�\$PI��o:8H�RH�PI�8�v$L�D$PD�\$H�L$@�6	L�D$PD�\$H�L$@I�8�GI��@M�0A�~L�������A�~�����j���fD���A�G蟇�L$@I��Ao?8I�wH�pI�>�v�	I�>�L$@�GI��@I�6�~I�������~��������fD���L�D$PA�FD�\$H�L$@�!�L�D$P�L$@D�\$HI��Ao>8I�VH�PI�8�v�2	L�D$PD�\$H�L$@I�8�GI��@I��z�������������L$H�FH�t$@视H�t$@�L$HI��o>8H�vH�pI�>�v�L$@�	I�>�L$@�GI��@M�>A���������f��L$H�D$(�1�H�1�1�L�L$ ����L�L$ L�T$(���ff.���AWAVAUATUSH��H�t$ dH�%(H��$�1����r1�H�T$pH�t$h��@	����SH�l$hH�]�{t�{u�C����H����H�\$pL�#A�|$t&A�|$uA�D$���DL���ԜH�D$pL� H�D$hH�|$ E1�H��XH�(I�$D�k�H�D$XA�D$�D$�[H	����D�l$0fDH�ED�T$0H�D$�E�D$N�D$4E�����E�PЀ�	�8
�D$<*��	L�l$</���D$0@I����tA�}/u�D$0L��H+D$��=�NЉT$�D$N��@<8��H�X���Hc�H�>����#@	H��$�dH3%(�'H�Ę[]A\A]A^A_�f.��D$L�l$�D$A��t$�����\$�L$���\$H�…���	ˆT$L�D$N1ۺL�l$@L�l$XL��$�<h���<a�\$P�ø D�1�D$O�C��D$M��H�D$(��|$L��L�D$�L$D�ML��H�ڄ�1��"�A�G��v��D)�D9���C�79\$���|$M6wqH�D$(H�=��Hc�H�>��DL��
H����������!�%����t�f������CZD5D�H�JHDщ�@�H��L)��H�|$ L���rQ	��Lc����9l$����L�l$@�L��
H����������!�%����t������D�H�JHDщ�@�K�D5H��L)�H�D$8�D$8���E9�}��T$L�l$@��x�XH�N�1�1����E1��D$0I�m�X����D$0����������f�Ic�L�|$Ns�o�t$N@��n� @��vH�
��BH���BHE�1�H�L$x�0Hc
�@HcR@�tx�DxH�L$xL��2H����������!�%����t������D�H�rHD։�@�H��L)�H�|$ ��L���J	�����L$NIc�M�D���A���L��H����Ѐ9t
A��Mc�C�D5%�H�=��B��H�H��H�����H�H��H�D$x1��f.�A�Hc�H���TxH��u�Ht$x�|$NlL��HcΉ�HE΋2H����������!�%����t������D�H�rHD։�@��
���DIcƀ|$NiI�|�D5�B1�Mc�K�L5H��?H���H�D$xL��B1�f.�Ic��4H��@�txH��u�H�|$xL��2H����������!�%����t������D�H�rHD։�@�H��H	�L)��e�����D$D)�D�E��xC�?D9�DO‹|$HD�Ɖ���)ƅ�DO�A�xD�D$THc��D�D$TH�D$8E��~jH�t$8A�@��L$PE1ɿH��L�T�f�H��A���I9�t7C�H�A�D���D�X0<	�pWD��Oƃ������t�H��1�I9�u�H�|$8Ic�L����
H����������!�%����t�L�t$8H�|$ A������D�H�JHD�L���@�L��H����L)����P	L��Lc���~����K�D5�|$N�H��H��?@��cHE�H�D$xHc]�B�TxH�L$xL��2H����������!�%����t����D�D$�|$9��B�8����l$E1�A����_����L$4H�$1�1���z��A���D�D$D)�E��� D9��Ic�E���L$OI�D�L��f�H��8HuA��D�ƒ�y�L��
H����������!�%����t�A�L������D�H�JHD�K�L5Lc��@�H�|$ H����L)���pO	����D$L�l$�D$A��&����D$L�l$�D$A������D$L�l$�D$A�����L$41�1�H�1~��R�H�D$ �x��H�D$ �@H��[���fDL�D$�L$�1�H�~L���I��"���@�L$4H��}1�1��D��E1���9\$������D$L�l$@������D�L$�L$41�1�E��H� ~�E)��H�D$ �x�I���H���
	H�D$ �@H������D$N��@<8���H�}���Hc�H�>��@�\$A������@�|$NN���|$NV�DH�=C�B1�1����f.�H�����:����A�H�6�BMc�K�L5H��?���@H���H���9tI�TH�1�H��?���D1�1��@�H�/|莿�����L�l$@Lc�����f�H�EH�D$�C��D$0�����D$����H�D$����H���B1����f���H�=G�B%����H�\$�
1�H��艝�H�ڋL$0�D$�@H�����-���0<	v�H�T$�L$0�A�DH�=ٚB%��3���A������/����|$D�D$�D$���D$LE���D$H��A���D$�'���D�L$D�|$E���D$LD�|$H�D$����E1�����L�l$�D$LE1��D$H�D$�D$����L�l$�D$A������D$����D$LL�l$�D$�D$H�D$H�D$D�xA�����L�l$�D$LA��D$�M���H�T$I�ՉL$0�D$���D$����A�D$�yH�H�D$p�Ao$H�I�T$H�PH�D$pH�8����GH��BL� A�|$�n��Y�D����C�xH�EH�D$h�oH�H�SH�PH�D$hH�8�w'�GH��BH��{��������
	H�D$hH�8���
	H�D$pH�8�X���L�l$�D$�D$�����������H���H�H��טBH�ȘB�H�H���BH���BH�~�BH�g�BH�@�B1�H�k�BH�T�BH�
5�BH�2�BH��B�f���S�VH��@ܔH��0�tH��8�t[�f�H��t3�HH��0�p H��8H�PH��@H�@XH��H[��蓃�H��0�e��H��8[�f.���H���c���H�@ܔH��0H�����H���C���H�@ܔH��8H�����SH�����H��x�CH�[�D�CH�[���SH�����H��x�CH�[�D�CH�[���SH��賚�xH��CH�[�@�CH�[���SH�����H�@ܔH��@x�CH��@H�[�f��CH�[���H���S���H�@ܔH��HH�����SH������H��x�CH�[�D�CH�[�S���h��Hc�H��DPu#�C���v�C���w�C�[�fD�C�[��C�[ø����[�ff.����AU�_A��ATA��UH��SH��H����DE���D�E��t>H��A����D�@A��L��E��t%L�HA�R�A��=uH�HH��A�R�L��I�Ƀ�w�H�~��t�I��1Ʉ���A� L�E{�+��L��A��D9�AD�H��I��A�Q�E��th���taA�t$�L�C��=uʅ�tO�{@��tF@��A����wPA�����sA�4�������A��H��H��	�I��A�Q�E��u�A�H�MH��[]A\A]�@��?w[�� u=D���tN�SL�CA����@u�;��t3I��A�A����@t"�� t�A�8I�X@��
t$D�f��"���fDH����sH��1�[]A\A]��k���A�x
D�f���D�f�I�X���H�~H�t$�hsH�t$�������I��1��*������AWAVAUATUSH��8dH�%(H�D$(1�����H��1�H�t$ ���-	�����L�d$ I�$�{t"�{u�C���H���O�H�D$ H��C������H�E1�E1�Hc�E1��rI���O�48��t!<=tcA��A�A��Ic�Mc��O�48��u�A�D�mL�E�E�	@�+.	H�D$(dH3%(�H��8[]A\A]A^A_��Ic��|@�����T����L�D$H�L$@�|$�T$�ڌ�H�t$H�L$H�L�D$H���DptUH�t$@�t$�DptCL�D$A��A���)����|$A������A��L�D$A�Ic�E�>Mc�����fDE�L$Ic�H�<���t/<	t< u@H�Q��f�H�r< t<	u4H�������u�O�48D�mA�L�E�E������<
t<
t#A��A�=E���Mc��c���f��|
��E�dIc���E���@�E1�H�=���s�EH�E�c���fD����C�pI�$H�D$ �oH�H�SH�PH�D$ H�8�w'�GH��BH��{����������	H�D$ H�8��E�dIc������3����H���#w�H�@ܔƀX
H�����H�@ܔ��X
t�|��S1����H���P��Hc�H���4W���Yd��H,�H1����[�|�f���I�@ܔ���A���I���I��<
�	�����H����1�i�e�l׃��8H9�u�A���I���M��@�B���H������މǁ�߰����	���3�01�ƉJ�L9�u�M��<
f��r����H������؉�%߰����	���3�p���1ȉB���L9�u�A������AǀP
p�����AƀY
���%߰�	���A3��	1�A��<
I���I��H
�@��H��@ܔ��P
��tKH��H
����P
H�BH��H
����1‰��%�V,�1‰��%��1Љ��1������H���L��@�B���H�������A����߰�A���D	���3�01�ƉJ�L9�u�L��<
fD�r����H�������A��%߰�A���D	���3�p���1ȉB���L9�uƋ���������؁��%߰�	���3��	1�H�����<
�o���D��SH�5J��H��dH�%(H�D$1�H���F�	���t
H�<$��t!����H�D$dH3%(u=H��[�fD1����H���9��Hc�H���T���YM��H,�H1�H�<$�袈�f���SH�5sI��H��dH�%(H�D$1�H��趕	���t
H�<$��t!���H�D$dH3%(u=H��[�fD1��q��H��詐�Hc�H���S���Y���H,�H1�H�<$����f���UH��SH��(dH�%(H�D$1�����H�L$H�T$��H�5o0��	���tX�����uqH�T$f�f���E�H*D$�H*��\��
��X�f��H*��Y��Y��H,�H�H�EH�D$dH3%(uH��([]���C����EH�E���D��@��AUATUH��S��H��(dH�%(H�D$1�����H�@ܔ��Y
�������uFH�T$f�f���H*D$�H*��\��
8��X�f��H*��YK��Y��H,�H��EH�EH�D$dH3%(uuH��([]A\A]�@1�H�L$H�T$H�5/谓	���t�H�@ܔ��Y
�V���1�老�I��踎�A���Q���Y��E���H,�D1��w����!������ff.�f�����u�FH�����@��%	����u�FH�����@�%	��H�H�HH�H�P������R$9Q$r�����f.�������~
�����fD���I���AW1�1�AVAUA��ATA��A��UD��SH��H���VG��H��ta1ҾH��H���iI��H��t^H��H��H��D���&G��D��1�1�H���G��L��I��H����H��[]A\A]A^A_�%iD1�1�H��D����F��H��H��uH��[]A\A]A^A_�f.�H�x1Ҿ�piI��H��t�H��H��H��D���F��L��1�H�Wb1���L���o����H�|1Ҿ�iI��H���z���L��H��L��1�H��r���I�T-L��H��D���)F��1�L��H��a1�聬L���9h��AWI��H��AVA��AUI��ATUSH��HdH�%(H�D$81��As�H���H�D$I��H����	=�~7�sH��x!H�Ɛ�\1�H�����H���P�	�����H����	�CHA��H�L$L��H��D���1�	�Ņ�uH�D$D9p t@D��L��L������Ņ�tLH�t$8dH34%(����H��H[]A\A]A^A_����B9��H����	�CH롐�CH�
ˇBD�t$0���CHfAofAoO�D$4)D$)L$ ��u	A����BH�L$H��D��E1�jA�(L��H��脴	XZ�Q���DH�T$H�5���H���D$�,�	�����oA)�oXA)_�
����4��@AWAVAUATUSH��hdH�%(H�D$X1��G�H�D$(���MH��I�ԉ�1�H�L$(H�T$ A��H�t$� 	����#�۸E؉؃�A��L�l$D�M�uA�F<��A�V<���u
A�F����M�uL���|H�D$L�0L�l$0I�6��L���s������CL�t$ I��{t"�{u�C����H���|H�D$ H��sH�;�h�I��H�D$8H�p�jgE1�L��L��H��H�D$8H��H�P�/������H�|$(������H���eL���dA�$H�E��{ 	H�D$XdH3%(�>H��h[]A\A]A^A_����u
A�F����L���7vL�l$M�uA�~����A�V���f���L������H���ndA�$H�E�q���@L������A�$H�E�Q���@��L�l$0I�6��L�����{���fDL�{D��+�D$H�D$ H�D�hA��Mc�L���cH�D$H�D$(H�8�����&	E1�1��H��H��H�H�H�HH�D$(H�8H���tH��~H9�H��HM�I9�~	H9���1��59	A�wI��H;t$8v�H�|$�mcH���ecL���]c�D$����A�A�$L�}�R���DH�߉D$�,cL���$c�D$��u�����fD�K�H�D$(H�8�%���fD���A�F�bI�EH�D$�AoH�I�VH�PH�D$H�8�v
���H�D$H�8�GH��BL�0���f.�����C�PbI�H�D$ �oH�H�SH�PH�D$ H�8�v
�c�H�D$ H�8�GH��BH��{����������A�F��aI�EH�D$�AoH�I�VH�PH�D$H�8�v
��H�D$H�8�GH��BL�0A�~��������)�A�L��9	����Lc|$�N����T}�@AWAVAUATUSH��xdH�%(H�D$h1��G�H�D$(����I��A��1���H�L$(H�T$ H�t$��	����f�������u3H�l$(H�]�{t"�{u�C����H���rH�D$(H��A��L�l$E�I�mA��A���}t�}u�E���9H���xL�l$ I�m�}t"�}u�E����H����wH�D$ H�(�EL�l$0D��L�}L��D$H�D$H�H�0�:������
L��L��L�t$P�R#	f����t	���
E1�L��H��L���*�����H�T$PH��uzH�|$X��H�lj�1�1��9�I�<$谾	I�<$��_A�D$I�$���[	H�D$hdH3%(�H��x[]A\A]A^A_��H��L��� <	Hl$X1������)��,���@�H�5X�L����;	Hl$X��DL������A�D$I�$�p���HcT$�H��L��L�H)��;	�M������t�L����Q�������@����E�^I�EH�D$ �oMH�H�UH�PH�D$ H�8����GH��BH�(�}�������f.�����E�P^I�EH�D$�oEH�H�UH�PH�D$H�8��~�GH��BH�(�}�v����i���f�����C��]H�EH�D$(�oH�H�SH�PH�D$(H�8�v
��H�D$(H�8�GH��BH��������H�D$H�8�p������H�D$ H�8����ky�ff.���SH���A�1�H�
��1�H���	�CH1�[���H��H�����	1�H���D��H��gH�5�g�1����f���H�V1�������H�V����ff.���AWAVAUE��ATI��H��U��SH��H�t$8H�T$dH�%(H�D$x1��h��H�|$PL��H�øH�|$ E���E��E���e�A�ą���H�D$X���H�p�^1ҾH�$�D�D$@H�H��H�D$0��\H���Hc�H�D$HH�D$Mc�E1�H�$E��H�|$ J�,(H�D$XA��H��H�P��&��A�ǃ��YH���Ag�I��E��tiH��D$�-g�T$D�4D;t$@��L�t$0L��H��H���fH�<$�[H�t$xdH34%(H���HH�Ĉ[]A\A]A^A_�DH�$H�T$8L��I��H�H�D$(E�<�D$X�D$D���A��H���؄�tz�Z<\u�H�t$H�T$��u���H�T$H�t$H��DHt��Ã�0;D$D�H�$H��H��H�����H�H��xH�yA�?)�H��DI��BH����u��L��I��D;|$@�WL�|$(H��H��Ic�L��L��k�L�t$8H�H��E�>�DD�}I��A��H��E��tlA�^A��\u�H�L$�u�H��H�L$H��DPt��Ã�0;D$X�H�$H��H�����H�H��x
H�RH9���E�~I��E��u�DH�$�EH��H�hH9l$(tJA����f.�A��1ҾMc�L���jZH��H��I���p�H��L���Y���@I�L;l$H���H����d�D�hD9l$@~E�d,H�t$Mc�Ic�B�+�D�B�D+��.����D$@B�Dx�D$@H�H��H�D$0�$YH��H��I���vp�H��L���;YL���sd�I��H�$H�H�D$(�X�����D$@1ҾB�Dh�D$@H�H��H�D$0�YH��H��I���p�H��L����XH�$H�h�8����H�t$ ��H���������H�t$ �����H�<$�XH��H������X����)�H�t$L�H��Hc�H�H��H��Im�H�L$�4����t�f.�AWAVAUATUSH��(dH�%(H�D$1�����H��A��1�H��H�L$H�T$��	����qL�$$I�$�C<��<t�{u�C���GH���_i��WI��H�$H�H�A�D$A�$L�l$I�]�C<�a<t�{u�C���SH���i��AWI��H�D$H�H�A�EA�EL�|$I��{t"�{u�C���BH���rnH�D$H�H�;H��t�s��u	1�H�=���YD��L��L��A�H��I����H��H�����H���b�ƉE���H���yY�EH��H�E�VM��tL���VM��tL���VM��tL���V��	H�D$dH3%(��H��([]A\A]A^A_��H�;H��t�s��u	1�H�=4���XI�����H�;H��t�s��u	1�H�=���XI������EH�E�F��������C�UI�H�D$�oH�H�SH�PH�D$H�8�w �GH��BH��{�{����f�����H�D$H�8�ѐ����C�PUI�$H�$�oH�H�SH�PH�$H�8�v�d�H�$H�8�GH��BH��`��������C��TI�EH�D$�oH�H�SH�PH�D$H�8�v
��H�D$H�8�GH��BH��Q���@H�5Y��1����u����pp���1��U���D����B���f���1���D������f���AWAVAUATUSH��(H�t$dH�%(H�D$1����81�H�t$��	����H�l$H�]�{t"�{u�C���%H���=kH�D$H�Hc{���rTL�l$I��M�}A�G���Z�en�E1�1�H�0�U�[I��H�4$�hW�H�B���E�IX�S�K��H�Hc�Hc�Hc�L�H�4$B��A�A�]M�}E9g~2I��SHc�F�< Hc�L�L�B�D~u�D�8M�}��I��E9gΉ�L�|$�EL��A�_��UA�GL��I��
S��	H�D$dH3%(��H��([]A\A]A^A_Ã���C�RH�EH�D$�oH�H�SH�PH�D$H�8�w'�GH��BH��{�����������H�D$H�8�ʐL��1�1��2����n�f.�D��ATUSH��H�5�nH�� dH�%(H�D$1�H�L$H�T$�{	������l$�����U�L�d$E1�A�����H�8L��\1����Hc�A�T4�����Q�����Hc�A�E����H���L$A�A�эF�9��H�|$Ic�H��A���0H��A��u��C��D$�T�CH�H�D$dH3%(uzH�� []A\ÐE1�D9��P����fDA9�t��t�A�HB�T9�~5��uH�|$�fD�CH��A��Lc�����E1��C�����t�A���6����l�f.��AWA��AVE��A��AUE1�ATI��UH��SH��(Ic�Ic�L�H�I9���L��1�fDH��H��H)�H�L$��D)�L$H9�si@H9�vWH9�vRI���D�I)�L�|$D8t�7H;L$tD�<
H��D:|�u
A��H9L$u�A9�~A��D�t$D��A)�H��H9�u�H��H9��n�����t!E��tE��u`��A�A�D9�}	A�D9�|H��(D��[]A\A]A^A_��D��Hc�Ic�D)�H�)�H�A��D��D)�)�A��Ic�H�I����D��H��D��L��D�T$D�L$D�\$���D�\$D�L$�D�T$�l���f.�AVAUATUSH�� dH�%(H�D$1�����I��I��1��H�T$H�t$A���		�����H�l$H�]�{t�{u�C����H���
fH�\$H�+�}t�}u�E����H����eH�\$H�D$A�EE��H�H�HcJH�HcpH�8��>H�I�$����		H�D$dH3%(��H�� []A\A]A^�f�����C�NH�EH�D$�oH�H�SH�PH�D$H�8����GH��BH��{������������E�MH�H�D$�oMH�H�UH�\$H�PH�;�w'�GH��@H�+�}����������H�\$H�;�ʐ�{�H�D$H�8�[����i�f���SA���1Ҿ
H�=�W��A�ع��H�=�W�A�ع��
H�=�W�A�ع��H�=�W�t�A�ع��H�=�W�V�A�ع��H�=�W�8�A�ع��H�=�W��A�ع��	H�=�W�A�ع1Ҿ	H�=�W��A�ع��H�=tW��A�ع��H�=aW�A�ع��H�=KW�A�ع��H�=8W�i�A�ع��H�=&W�K�A�ع[��H�=W�,�ff.����SH����{��o�oHK�oP S �oX0[0�o`@c@�ohPH��kP[�f.���AUATUSH��dH�%(H�D$1�����H��1�H���	�����L�$$I�,$�}t!�}u�E����H���bH�$H�(Lce��H�mO�,$L���1KM��tt1�H�=S��L�΃�@������47�LP@�4PH��I9�u�B�`D�kH��C�	@��	H�D$dH3%(��H��[]A\A]�@�H��u��CH�������E��II�$H�$�oEH�H�UH�PH�$H�8�w(�GH��BH�(�}�����������H�$H�8���]e�ff.�f���SA�����H�=�T��A�ع��H�=�T��A�ع��H�=�T��A�ع��H�=�T�A�ع��H�=�T�A�ع��H�=�T�u�A�ع��H�=uT�W�A�ع��H�=)T�9�A�ع��H�=T��A�ع�	�H�=�S�A�ع�
�H�=�S��A�ع��H�=�S�A�ع��H�=�S�A�ع�
�H�=�S�A�ع��H�=�S�g�A�ع��H�=wS�I�A�ع��H�=aS�+�A�ع��H�=KS�
�A�ع��H�=5S��A�ع��H�=S��A�ع��H�=	S�A�ع��H�=�R�A�ع��H�=�R�w�A�ع��	H�=�R�Y�A�ع��	H�=�R�;�A�ع��	H�=�R��A�ع��H�='R�A�ع��H�=R��A�ع��H�=�Q��A�ع��H�=�Q�A�ع��H�=�Q�A�ع��H�=�Q�i�A�ع� �H�=�Q�K�A�ع�!�H�=�Q�-�A�ع�"�H�=wQ��A�ع�#�H�=aQ���A�ع�$�H�=LQ���A�ع�%�H�=7Q��A�ع�&�H�= Q��A�ع�'�H�=	Q�y�A�ع�(�H�=Q�[�A�ع�)�H�=�P�=�A�ع�*�H�=�P��A�ع�+�H�=�P��A�ع�,�H�=�P���A�ع�0�H�=kP���A�ع�.�
H�=YP��A�ع�1�
H�=EP��A�ع�/�H�=1P�k�A�ع��	H�=P�M�A�ع��
H�=	P�/�A�ع��H�=�O��A�ع��H�=�O���A�ع��H�=�O���A�ع��H�=�O��1�[���USH��H�5�H��dH�%(H�D$1�H����k	���tIH�$H��,��H��tZKH�����H��vKH�MO�1�1����CH�H�D$dH3%(��H��[]�H����H��w����dZ�H��H��t\H���M�ƉC��x[H����D�CH��f.�H��}�H��t��e���H����H���T������CH��Z���H�5y��1����s��]���ATUSH�� dH�%(H�D$1�����H��1�H�T$�H�t$�"������L�d$I�$�{t�{u�C����H���XH�\$L�#A�|$t#A�|$uA�D$����L���rXH�\$H�D$�EH�H�H�2H�8�3H�H�H�E��H�D$dH3%(��H�� []A\�fD����C�@I�$H�D$�oH�H�SH�PH�D$H�8����GH��BH��{�(����������A�D$�>@H�H�D$�Ao$H�I�T$H�\$H�PH�;�w#�GH��@L�#A�|$����������+�H�\$H�;�ΐ��H�D$H�8�[����[�f���AWI��AVAUA��ATUH��SH��8dH�%(H��$(1�H���L�T$ �ʹ L���H�Hc�M�4M9���L���"��{.�n�D M9���L��H�S�L�cI9�w�<.u�M9�vր{.u�I9��=H�CI9��P�C8C�L�T$H�m�D�L$L�$wH��K�1�1��E�L�$D�L$L�T$�DA��t;E��~6�M1�H�U�| u�#f��MH�U�| �
��H��A9�u�E1�A��tAD���x9Hc��L�| t*Ic͉�H��H)��@�T�H���| tA��H9�u�M����E�hD��H��L�$�@L�$I�H�*�A�@H��$(dH34%(��H��8[]A\A]A^A_À{.tL�c<.�����M9��w�������S8�w���I�<D�L$L�c)�L�D$��L�$Hc��}K�L�$L�D$D�L$�1���f.�L�T$ H�й L�=�KL���H�L��� M�w�'��{.���D M9��h����CL��H�KL�cL9�r�M9�s�<.uՀ{.u�L9��^H�CL9��k�C8C�L�T$H�T�D�L$L�$wH��I1��1�L���)�L�$D�L$�.L�T$�@�{.tjL�cM9��W���<.�O����{���A)�A���;������fDH��$(dH3%(��H��8D��H��[]A\A]A^A_�?D�S8�r���I�<D�L$L�c)�L�D$��H�L$Hc�L�$��I�H�L$L�$L�D$D�L$H�����DL�T$H���D�L$L�$����fDL�T$H���D�L$L�$���L�T$H���D�L$L�$���L�T$H���D�L$L�$����UW�DAVAUATUSH�� dH�%(H�D$1��G�H�D$����I��A��1���H�T$H�t$�������L�t$I�.�}���E�����}��D����H�l$H�]�{t"�{u�C����H���RH�D$H�H�D$�KE��M��H�H��pH�8�����
D�;�H�D$dH3%(��H�� []A\A]A^�f.��}�f����E����I�.H���Q���O���H�D$E��M��1�1�H��pH�8�I���������E��9I�H�D$�oEH�H�UL�t$H�PI�>����GI��@I�.�}�����}�g����S���f�����E�9I�H�D$�oMH�H�UH�PH�D$H�8�w?�GH��BH�(�}�\���������k�L�t$I�>�[���fD�S�H�D$H�8�f�����C��8H�EH�D$�oH�H�SH�PH�D$H�8�v
��H�D$H�8�GH��BH��{���������T�D����"���f��������f��������f���AWI��H�5IEAVAUATUSH��hdH�%(H�D$X1�H����D$7H�L$8H�D$HH�D$7H�T$@�D$<H�D$PKPH�D$DP1�L�L$XL�D$`�a	ZY����M�\$8���4Hct$<H��D����H�L$PH���B�|$7��Hcƃ�u�|$7��gHc�H�����H��Hc�A��H��H�$�)8I��HcD$8I��L��1�H����1�L�|$(1�1�1�I���fDH�D$PL�kA�� �}L9�wX�|$7�%I�4
I�<.A��L9���L��H)�H��H��K�HcT$<H�t$HI�<.��K�HcD$<I�OD�\$8I��H�Ic�L��L9���E���`L�T$@H�t$HI��I)�I�<D�D:�W���Lcl$<Ic�I�TH9��A���L��D�\$$H�L$L�L$D�D$#L�T$�@B�L�T$D�D$#��L�L$H�L$D�\$$�����K�T
I�<.L�L$A��I�4
�#K�HcT$<D�\$8L�L$H��HՃ�L�H�L�lIc�M��L��L��L9��+���@L�|$(I�<.I9�tH�t$@I)�L��L�H���J�I�<.H�u�1�L���5A�oI�A�GH�D$XdH3%(��H��h[]A\A]A^A_�yH�D$P���H������Y����H��1�1���yA�GI��H�|$@���7LcT$8M��M����H�l$@H�\$HE1�E1�L�d$P1��6f�I��M)À� ��M9�tM9�wB�<M�A�H��I9����L�;H�r@8�u�I��I����I��L9�����I�4
I�<.L��L�L$�I�L�L$HcT$<A��H�t$HL�I�<.�pI�HcD$<L��D�\$8H�����H�L$L��H)�H�1�H�t$P1�H���D$<��H�H$H�$H���n41�H�L$I��HcD$8I��H)�H�t$PD�`�C���L9�����I�4
I�<.A������fDH�q��1�1��#xA�GI�����f�A�G1�H�=���j6A�GI����DL��L�L$I���xH�L�L$HcT$<H�t$HL�I�<.�]H�HcD$<H��D�\$8H��x����I��M9��\���@�|0�I���O���E1�@E�oI�A�G�l�����N�u�|$7������Hc�H�H���SHc�D�`Ic�H���3Hc|$<I��HcD$8H��I��H�T8H�$�H���fD��AWAVAUATUSH��HHcFL�>H�T$(HcWH�|$0H�?I�H�j��L$�D$8H�/H�$H�|$9�|[H)�I9�wSH��D�'D�)L����L�|$H�H�D$ �fDD:,(tRI�H9�rH��D��H)�H����M�I��H��u�L�|$�T$8H�|$(H��HL��[�]A\A]A^A_�	fDH�T$ H�|$H���N=�u�L�t$DL��H�|$(�L��L)��X	H�L$0H�$HcAH�)M�4L�h�H��L)�J�L-H�\$8H9�]L�$$I)�M9�wQ���L���D$�E�D$Hc�H�D$ ��D$C:/tEH�{I9�rL��t$H)�H����L�I��H��H��u�M��L94$����H��H[]A\A]A^A_�f�H�T$ L��H���p<�u��|$��!����l$�D$�������ff.�f���AWI���2AVAUATUH���SH��hH�T$X1҉L$T�>1H�uMcwH�D$HcEI�?M�f�H�t$ H��H�H�D$HJ�'H�|$D9�|cH��L)�H��H9�wUL���D�)H����L�|$(H�L�t$0H�D$��F:, tBI�H9�rH���H)�H���K�I��I��H��u�H�|$H��h[]A\A]A^A_�/DH�T$H�|$H���F;�u�H�L$ H�D$L��H�D$ �D$L�|$(H��H�L�t$0�D$P2@�D$H�L$ J�|5H�t$H���D$H�D$H��H)�H�<McwM�'I�^�L��I�I9�fL)�I��H9�w[�	��L�d$@H��L$(A�$H�D$8�L$0�@�D$(A:��H�}I9�rL��t$0H)�H���J�I��H��H��uʋD$D$T������H�\$��L�d$XH��H�\��McwH�UH�u�L��H��L)�H)��E	H9�u����H�T$8H�|$@L���9��e���L��L$9L$P'�D$H�|$1҃�3Hc�D$PH���.McwH�D$�D$H�D$ �D$������AUATUSH��(dH�%(H�D$1��G�H�D$���
I��1�H�L$H��H�t$���������L�,$I�m�}t�}u�E���KH���EL�l$I�m�}t�}u�E����H����D�������u4L�l$I�m�}t"�}u�E����H���>H�D$H�(�mH�D$H��@����L���A�H�$H�0�N��t[���jH�D$��L��H�8���������'����
D��H�D$dH3%(��H��([]A\A]�@��y��uԹ1�H�5��L���I		��H��9�1�1���pA�D$I�$����놐����E�@,I�EH�$�oEH�H�UH�PH�$H�8���GH��BH�(�}�f����Y���@����E��+I�EH�D$�oMH�H�UH�PH�D$H�8����GH��BH�(�}�-���� ���f�H�A�1�L���	��������E�`+I�EH�D$�oUH�H�UH�PH�D$H�8�v
�q�H�D$H�8�GH��BH�(�����K�H�D$H�8�L���fD�3�H�$H�8������F�f���AWAVI��AUI��ATUSH���H�>H�T$(dH�%(H��$�1�襚	�D$����H�D$hI�}1�1�H��H�$E1��-�	H�D$`H�D$H�D$H�D$pH�D$0H�D$\H�D$@H��$�H�D$ f�H�$H�t$I�}�.�	���~H�D$`H��xw�PH�
�8Hc�H�>���oL�|$0)L$pH�@L��H��$�����$�tL���<ALc|$xH���VJ�L=H9L$��H�<+H��H�t$pL���>�$�vH�|$0�fDA��D9d$t/Mc~H����J�L=H9L$�H�<+H��I�6L���V>�H�4$I�}�)�	��@LcxH����J�L=H;L$�cH�<+H��H�0L���>��|���@H�T$@H�t$ H���f�H���5Hc�$�L�<*L9|$��H�<+L��H��$���=�D$\���&�����$�����H�|$ ��	���f�H�8�����H���:L�}L9|$�H�+L���1�����H��`��1��H�|$ H��`H�O5��H���5Lc�I�/H9L$��H�<+H��H��$�L���<�H��$��(�Z���f.�L��$�H��1�H�B�L����H���>Hc�L�)L9D$�,H�<+L��H��L���<����DI��M��I���I���H�D$1�1�L���'Mc~H��H�����H���H��H���1�H�L$8H�D$�~'H�L$8Mc~H�<(H��H�����fDH���('H�\$(1�H�=��C�)�CH�H��$�dH3%(��H���[]A\A]A^A_�fDH���o�+H��t�H�D$(�hH��@�DH�D$N�O����DI��M�~I���I���H�D$1�1�L���&Lc|$xH��H������I��M��I���I���H�D$1�1�L���_&H��H�D$`H��H�Lcx�����Hc�H��M�CH�D$N�O1�1�I���&H��H�����fDHc�$�H��M��H�D$N�O1�1���%Hc�$�H��H�����@Hc�H��M��H�D$N�O1�1��%H��H��H�����fDH���/������f�H���H��H���1�H�L$8H�D$�^%H�L$8Lc|$xH�<(H��H���>���DI���1�H��I���H�D$�#%Hc�$�H�����H���H��H���1�H�L$8H�D$��$H�L$8H��H�D$`H�<+H��H�Lcx�b���fDI���H��I���1�H�L$HL�D$8H�D$�$L�D$8H�L$HH�<(H��L������H���H��H���1�H�L$8H�D$�^$H�L$8H�<(H��H�����f.�H�D$N�O���DH���H���H�D$�c���H���H���H�D$�����H���H���H�D$����H�D$N�O�R���DH���H��H���1�H�D$�#H������1ҾO1���#H�D$NH������>�f.���AVAUATUSH�� dH�%(H�D$1��G�H�D$H�D$����I��1�H�T$��H�t$�l����tL�l$I�m�E����L�t$I��S<�}���4H��<t%�}u�E����H����9H�D$H�8H�L��H��H�h�V���H�H�h�
D���H�D$dH3%(�'H�� []A\A]A^�f�H�߀�t"�{u�C����H���N9H�D$H�8H��뉐<tH��.�1�1��'f�D��!L�l$�@H��H���H���Cf�CI�m�E��wQH�EH��L��H��L�h�{���H�EH��L�h�{!�#���fDH��.�1�1��e����fD����E�!I�EH�D$�oEH�H�UH�PH�D$H�8�v
�!�H�D$H�8�GH��BH�(�R�������E� I�EH�D$�oMH�H�UH�PH�D$H�8�v
�H�D$H�8�GH��BH�8�����H�����fD����C�@ I�H�D$�oH�H�SH�PH�D$H�8�v
�S�H�D$H�8�GH��BH�8�����H��������;���AWAVAUATUSH��(dH�%(H�D$1��G����ZH��H���E�����DL�<$���I�L�d$�{I�����{tA�EL���H����6L��贰H��@ܔH�{Pt	H�{P�
�I�H�CPI�L�0L�sXM��L�shI�Hc@H��pI�M���{M9��rM�<$A�t A�u
A�G���3L���K6M�<$I�McI�L9�s�H���P��DpI9�u�A�E1�I�u�|p�}I9��?�I��)��I��I9��$A�E�2H���|pu��D���H�D$dH3%(�hH��([]A\A]A^A_���|p��I��H��I9�w�H�{hH9��H)�I��)�HcɉuH��� �EH�EL�khI�$H�I9�v�f.�H���P��DpI9�u��f���f��C�����{�6����9���D�EH�E�,����H��@ܔM��L�sXH��pL�kh�C���f.�H�Ch�EH�E�Q����H�{h���������C�I��oH�SH�PI�?�w5�GI��@M�/A�}L���z���A�}�g����R���fD�I�?�fD���A�G�I�$�AoI�WH�PI�<$�v	輮I�<$�GI�$�@M�<$A�������r���D���A�E�?I��AoMI�UH�PI�?�v�]�I�?�GI��@I��{��������f.��EH�EH�Ch����7�f���UH��SH�7H��H9�s!��H��f�D�H�H��B���J�H9�u�H��H��[]�ff.�@��AUATUSH��dH�%(H�D$1���u}H��1�H������ugL�$$I�,$�}t�}u�E��w{H���2H�$H�(�oED�kD�cH�EH��H�CH�� ��w7HcsH�;D�kD�c��������H�D$dH3%(uH��[]A\A]�H����fD����E�I�$H�$�oMH�H�UH�PH�$H�8�v賬H�$H�8�GH��BH�(�}�5����!����76����UH��SH�7H��H9�s!��H��f�D�H�H��B���J�H9�u�H��H��[]�ff.�@��AUATUSH��dH�%(H�D$1���u}H��1�H���{���ugL�$$I�,$�}t�}u�E��w{H���1H�$H�(�oED�kD�cH�EH��H�CH�� ��w7HcsH�;D�kD�c��������H�D$dH3%(uH��[]A\A]�H���h��fD����E�I�$H�$�oMH�H�UH�PH�$H�8�v�#�H�$H�8�GH��BH�(�}�5����!����4����AWAVI��AUATM��USH��H��(H�T$H�L$L�D$H����H��I��E1��f��E��u	L��A�I�I)�tEA�?t�L��L���9�H�H����H��t#H�����1�1��`9�I�I)�u�A��ID�I��I)�H�|$t(D��H;D$vH�T$H�t$H)�H��H)��h#�LD�L�|$M��tI�~�L��H��H���,�B�0I�M��tM�4$H��([]A\A]A^A_ÐA�?/����A������L��E1������E���
������f���SH��H�5�9H��0dH�%(H�D$(1�H��H�T$L�L$L�D$�D$H�D$�E@	���t6HcL$Hc4$L�L$ L�D$H�T$H�|$�>���H�D$ �C�CH�D$H�H�D$(dH3%(uH��0[��2�ff.�@��1�H��tlH�D7�H9�v�Kf�H��H9�w9�8/t���8/t$H��H9�v�.f���@�x�/uH��H�P�H9�v�/�f���BH)�����ATUSH��dH�%(H�D$1���uwH��1�H�������t`L�$$I�$�{t�{u�C��wlH���D-H�$H��sH�;�H��H�$H��H�Hcp���H�]�E�E���S�H�D$dH3%(�}H��[]A\�fD����C�`I�$H�$�oH�H�SH�PH�$H�8�w)�GH��BH��{�Q����=���f��K�H�$H�8����0�ff.�f���ATUSH��H�5�H��@dH�%(H�D$81�H�L$H�T$H�D$H�D$(L�D$(��=	������H�l$(��@H�ǃ��@H�D$���D$(�H����H�D$(����XH�|$H��t�iH�|$(H�D$��H�81�H�t$0��	����H�D$0D�c�kH��oH�@H��H�CH�� ����D�c�kH�|$��H�D$8dH3%(��H��@[]A\�@Hct$H�|$1�1�L�L$ L�D$���D�D$ H�L$E1�H�|$�	H�5:���H�D$(��:L�D$ H�T$M��tPJ�D�H9�v�D�H��H9�w3�8.u�H)�A��H�|$A�Hc�A)�H�5��H�L
�
���D$(tgH�D$H��H���H�D$ H����L�D�I9�s�w�I��I9��cA�8.u�A)�H�|$A��	H�5P��H���E���H�|$(H�D$�T����oD�cH�|$�kH�PH�S�@�'�D�c�k�z����t$H�|$�Hct$H��H�D$�x���H�|$�?un�IH�D$H��������R���f�H���8�����H�D$H��H����Hct$H�|$L�L$ 1�L�D$����H�L$����f.�H��H�|$A��H�5d���H�|$�i�����C1�H�=���K�CH�����A�����Hct$H�|$1�1�L�L$ L�D$��������-��]������ff.����AWAVI��AUI��ATI��H��UD��SH��H�����L��L�����Ic�L�i�K�,H9���H)�L���D�8A�$���D$Hc�H�D$�f�F:<(tBL�uL9�rYH�ڋt$L��L)�H���K,�H��I��H��u�H��L��[]A\A]A^A_�fDH�T$H��L�����t�L�uL9�s�E1�����D�H��H9�I��A��I9�t#E��tI��E8P�u�H��D���f.�H)��ff.����D�H��H��H9�I��A���DE��uI��M�H�L9�vE8u�H)��DH��D���fDAUA��ATA��UH��SH��H�5��H��8dH�%(H�D$(1�H�D$ H��H�T$H�D$H�D$ PH�D$ P1�L�L$L�D$ �\8	ZY�����Hc$A��H�D$ H�|$H����H9���H)�H�T$ H����H9�}H�D$ H��H����H�D$H�t$H��EHcL$H�H�H�E��������H�@H�D$(dH3%(��H��8[]A\A]ÐH��H�xXH��H�T$H��H�T$ H��H���r���H�xH�T$ �c���DH�D$ H���Q����EH��f�H�D$1������EH��`�������H��S�����)�ff.���H�V1��A������H�V��.���ff.���AUATUSH��(dH�%(H�D$1����)I��1�H�T$H���2�����	H�,$H�]�C����L�l$I�]�C��� H�]�{t!�{u�C����H���$H�$H��sH�;��L�l$H��I�m�E<��<t"�}u�E���LH���H�D$H�(H�E�D$H�t$��D$H�$H�HcPH�8���H��teH�$H��rH+)�H�A�t$H�<�^A�D$I�$H����f.���H�D$dH3%(�H��([]A\A]�@A�D$I�$������C�I�EH�D$�oH�H�SH�PH�D$H�8�v
�"�H�D$H�8�GH�H�,$�@�������C�H�EH�$�oH�H�SH�,$H�PH�}�v
�ÝH�,$H�}�GH�E�@�����HcM����H�$H�uH�HcPH�8�-�����������C� H�EH�$�oH�H�SH�PH�$H�8�w)�GH��BH��{�������f���H�$H�8��f�H���1�1��OH����
A�D$I�$�5�������E�
I�EH�D$�o]H�H�UH�PH�D$H�8�v
葜H�D$H�8�GH��BH�(�W����&�ff.���AWAVAUATUSH��XdH�%(H�D$H1����H��1�H�T$@�H�t$8�������L�d$8I�,$�}��}t�E����I�,$H���!H�l$@L�uA�F<�D<t$A�~u
A�F���L���,H�D$@L�0H�D$8I�.H�A��L�(Hc@I�ą�~CM�|�M9�w9@��L���DD:0��H�xI9�rL����H)�H����$�I��H��u��CH��
���H�D$HdH3%(��H��X[]A\A]A^A_���E���$�}��������DH�T$(H�|$ H��H�L$H�L$��H�L$L�D$����f�L��D��L��L)�)Ɖs�:�CH��c���fDA�F����H�T$8I�H�H�L$ HcjL�*Hc�L�z�I��L�9�����H)�L�������	��L��H��L$H�L$ H�D$(D�1�!D�D$B:9�1���H�yH9������H��D��H)�H���#�H��H��u��CH����f.�����E�I�$H�D$8�oEH�H�UL�d$8H�PI�<$����GI�$�@I�,$�}������}������k���D����E�I�$H�D$8�oMH�H�UH�PH�D$8H�8�w>�GH��BH�(�}�)�������fD�L�d$8I�<$�\���D��H�D$8H�8�f�H���1���J�CH����D���A�F�WH�EH�D$@�AoH�I�VH�PH�D$@H�8�v
�h�H�D$@H�8�GH��BL�0����!�D��AWAVAUATUSH��HdH�%(H�D$81��G����rH��1�H�L$0��H�T$(H�t$ �w�����NL�l$ M�eA�|$tA�|$uA�D$���OL�������FL�d$0I�,$�}t"�}u�E����H���
H�D$0H�(H�ELc�����L�d$ I�$HcBD9���H�l$(L�mA�M������t1A�}u
A�E����L���L�d$ H�D$(I�$L�(HcBM�mH�H��L)�E��J�<:H���kH�l�H9��]E���f�H�xH9��HH��D��H)�H���Q �I��H���*D:0u��CI�$L+L����H�D$8dH3%(�cH��H[]A\A]A^A_��E1����A�M���$I�uH�*Hc�L�r�H�t$N�6H��J�|=L)�H9���H)�H�H9���H�D$��E�8D�(Hc�H�D$�	H�yH9�rlH��D��H)�H���u�H��H��tRF:<0u�H�T$H�|$H��H�$H�D$��H�$L�D$��u����f.�H�Y��1�1��G�CH�������A�D$�&I�EH�D$ �Ao$H�I�T$H�PH�D$ H�8����GH��BL� A�|$�Z����M���@����E�I�$H�D$0�oMH�H�UH�PH�D$0H�8�v
�єH�D$0H�8�GH��BH�(����諔H�D$ H�8�h���fD���A�E�GH�EH�D$(�AoUH�I�UH�PH�D$(H�8�v
�W�H�D$(H�8�GH��BL�(�	���f�H�������ff.�@��AWAVAUATUSH��H�5H��XdH�%(H�D$H1�H�L$,H�T$0H�D$8L�L$8L�D$@�*	�����H�D$8H����HcT$,H��H9�����tbH�|$0�,Hct$,H��H����L�d$@A�D$<��<�)<��<��H�*��1�1��lEH���$�CH�H�D$HdH3%(�.H��X[]A\A]A^A_�fDH����1�1��E�CH��fDA�t$��t�;t$,�I�<$�`I��H�D$H�D$@L��Hcp�'�H�D$@Lcd$,H�L$8HcPM��I)�H�|
L�r�H��K�47L9��yI)�I�L9��j���E�/H��L$H�D$���D$C:0t]I�xI9��L��D��H)�H����I��I��H��u�H���H�|$��M������L���CH)�H����fDH�T$H�|$L��L�D$��L�D$��u��fD�S�I�$H�D�4�HcT$,H�D$8H��H�|H)�H���L���L�d�L9��>���E���@D:0t#H�xI9�rJL��D��H)�H�����I��H��u�H���0��:�������A,$H�H��D�4��v���@E1���H���H�|$������H����H�|$u������f���AWAVAUATI��H�5�USH��8dH�%(H�D$(1�H�L$H�T$H�D$L�L$L�D$�'	�����H�\$H�+�E<�<tl�}uV�E��vN����E��H�H�D$�oEH�H�UH�PH�D$H�8����GH��BH�(H���H�D$H�(H�EHc\$�D$'�D$&��t_�L�t$&L�|$M����I9���H�D$Lc�L)�J�,8HÃ�u!��f�L��L��H�������H��H9�v�A�D$I�$H�D$(dH3%(��H��8[]A\A]A^A_���UHc\$��t���t�L�u�Z����H�9��1�1��SA두L��H��H9��Lc�H�l$L9�}hL)�H��A���DH)�M��A�D$LH�L�I�$�U����H9��7���A�:u��D8t�H��H9�v�����fDL�H�����D苎H�D$H�8�X����)�f���AWAVAUATUH��H�5�	SH��8dH�%(H�D$(1�H�L$H�T$H�D$L�L$L�D$�%	����H�\$L�+A�E<�4<tpA�}uYA�E��vP���A�E�H�H�D$�AoEH�I�UH�PH�D$H�8����GH��BL�(L���
H�D$L�(I�EHc\$�D$'L�t$&�D$&��tuL�l$M����I9���H�D$N�$(H�\����H�I����T$&I9�w8H���;�u���H�9���H��I9�v�f.��EH�EH�D$(dH3%(��H��8[]A\A]A^A_ÐMceHc\$E��t…�t�M�uA���;���L��D���E�L��H��I�����t$H�|$�)�Hct$H��I�����L�l$M��xHc\$I9���L)�M�L�I9�v��fDH��L9���L��L��H���}�u�L����L���	�H�|$�HID$L)��EH�H�]����DL��Hc\$H��I���|	H9���L���L���H�ć�1�1���=�EH�E���DL��L�d$H��H9��I���|�L�L��$���@L���X�L���P��[���L)�M���ELH�L�H�]�E���f�L9�}+L)�M��L�����D��H�D$H�8�U���fDL�M��L������ff.�f���ATUSH�� dH�%(H�D$1�����H��1�H�T$�H�t$�"������L�d$I�$�{���{t�C����I�$H���L�d$I�$�C<��<t"�{u�C���
H���	H�D$H�H�D$H�HcPH�H��H��t#H�|�H9�wH���:u�i�8tdH��H9�v��EH�E�
D�[�H�D$dH3%(��H�� []A\�fD�C�����{�2����5���DH��H)�)Ήu�(��EH�E�fDH�D$H�HcPH�H��H���j���H�|�H9��\���H��:u	�:t�H��H9�v��;���fD����C��I�$H�D$�oH�H�SL�d$H�PI�<$����GI�$�@I�$�{�e����{�S����>���fD����C�h�I�$H�D$�oH�H�SH�PH�D$H�8�w?�GH��BH��{����������S�L�d$I�<$�[���D�;�H�D$H�8벐����C��I�$H�D$�oH�H�SH�PH�D$H�8�v
��H�D$H�8�GH��BH������ff.�@��AWAVAUATUSH��XdH�%(H�D$H1��G����BI��1�H�L$@��H�T$8H�t$0�����L�l$0I�]�{�{�C���/�{�D����L�l$8I�]�{t�{��H���H�D$8H�H�A�L�5����]H���dH�D$0H�8HcoH��H9�����������T$$=����(�HE����Ⱥ���A��)�9��L�?�|1ҾHc���H��H�D$(L��H)�H�L(H�L$I9��Ic�H��H�D$H�H�D$DL��H��H��I��	�H�T$H�|L����Hl$L9|$wыD$$���H�D$(�EH)�H���hA�l$I�$A�D$�@�{������C���jI�]H����
���~����LA�L�5$����fDL�l$@I�m�}t"�}u�E����H���
H�D$@H�(L�uLcm�e���f.��ˮH�D$HdH3%(��H��X[]A\A]A^A_������C���I�EH�D$0�oH�H�SL�l$0H�PI�}�v��L�l$0I�}�GI�E�@I�]�{�{����{�������@�����A��9�����A�D$I�$�2���D�C���N�������C��I�EH�D$8�oH�H�SH�PH�D$8H�8�v
�.�H�D$8H�8�GH��BH���A�D$H�=�`��A�D$I�$���@F�|-A�Hc���H�l$0H��H�EH��HcPH�0��H�EIc�L��HcxH��v�Ic�E�|$�I�$A�D$�@���H���1�1��5A�D$I�$��������C��I�EH�D$0�oH�H�SH�PH�D$0H�8�w'�GH��BH��{�����A�����H�D$0H�8�ʐHc\$$H��L��H��H���H��L��L����L����@����E�p�I�EH�D$@�o]H�H�UH�PH�D$@H�8�v
聂H�D$@H�8�GH��BH�(�}��������f�H�l$(�-��������AUATUSH��(dH�%(H�D$1��G�����I��1�H�L$H��H�T$���}������L�,$I�m�}���E����}��@L�l$I�m�}t�}�GH���'����H�l$H�]�{t"�{u�C����H���H�D$H�H�$H�3H��Q����9�O��]��˪H�D$dH3%(�H��([]A\A]�@�}�V����E����I�mH���6�9����H�$H��q��H�D$H�H���9�c����������y�Ǹ�H�9�~?D�>��)�A9�Hc�O�H9A�t$�A�A�D$I�$�G���f����9��,���@A�D$I�$�"���D�E�����������E��I�EH�D$�oUH�H�UH�PH�D$H�8����GH��BH�(�Y����A��A��A9�����1����$�������]�����)�ƸH�����f.�����E�p�I�EH�$�oEH�H�UL�,$H�PI�}����GI�E�@I�m�}������}�N����9����D�A9��������^����Ǹ�H��M���f.�����E���I�EH�$�oMH�H�UH�PH�$H�8����GH��BH�(�}�������@�~L�,$I�}�+���fD����C�X�H�EH�D$�oH�H�SH�PH�D$H�8�v
�j~H�D$H�8�GH��BH�����@�C~H�$H�8�S�����+~H�D$H�8�������f���AWAVAUATUSH��H�t$dH�%(H��$1��G�H�D$pHDŽ$�HDŽ$�HDŽ$�HDŽ$����^1�H�L$hH�T$xA��H�t$`L�D$p������7L�t$`I��C<t%�{��<t�C���}I�H���rH�l$xH�]�C<t&�{��<t�C����H�]H���;H�l$hH�]�C<t&�{�8<t�C���xH�]H���T�A����L�d$pI�,$�E���]�E1�<t~<tw�}u`�E��vX����E�I�I�$H�D$p�oeH� H�UH�PH�D$pH�8�v
�Z|H�D$pH�8�GH��BH�(H���L�d$pI�,$�]L�t$`I��P����	��� �H�|$HDŽ$���H�D$hH��x��A����	H�D$xH��x��H�D$`H��$�H�t$H�H�8�Z	H��$�D�l$,H�D$ H��$�H�D$0H��$�H�D$@H��$�H�D$HH��$�H�D$8�W@H�D$pH��xL���A�^E��y��D)�A��DH�C�89��D)�H�D$xIc�L�H��x�XD�D$(�{Hc���I�6L��H��I����L�L$xK�<,I�L�L$HcPH�0��L�L$A�VD�D$(I�D)�HcxL�L�I�6D)�Hc�H��b��Hc�L�L$E1�H�T$\A�H�D$`H��$�H��$�H�H�8�mY	����H��$�E1���L��H�|$�z�H��$�H��xtA�~vL���JyH�D$`H�t$H�H�8�X	H�D$`H�T$H�t$ H�H�8�Y	A�Dž���H��$�L�0A�F<tA�Ao)�$�I�VH��$�<v
H�|$0�yH�D$0��$�I��tH���H�D$hH��xH�8�.A�N����9�N�Lc�M��|$,�����E�FD���	����転H��$dH3%(��
H��[]A\A]A^A_�f�L�t$`I��P�����X����H�T$hH��z�	H�*�@���'9�O��y��)�ӺH�9��P��y���9��@9É�Lc�O�)�L9�H�D$xO�H��x���HI��L$D�hA)�A�A�}Hc���L�D$`L��I��I�L��L�D$H�0���HcT$L�D$��N�"t2H�D$xH��x��H�0K�<&L�L$L�D$���L�L$L�D$I�Hc�K�<L�PH0)�)�Hc���Ic�A�H�D$D�hL�0�@����S����<����������S���L<�q����t�����S����<�������������E��I�$H�D$p�oUH�H�UL�d$pH�PI�<$��)�GI�$�@I�,$�L����D)�A��D������f�L��$�H�8D�D$H��$�L���V	D�D$���3H��$�L�A�A<tU�Ao	)�$�I�QH��$<vH�|$8�vD�D$H�D$8��$I��tH��D�D$�L�L$8D�D$H�D$xAYL��D�D$(L�L$H�H�8��T	�{Hc����I�6L��H��I�����L�L$K�<,IcQI�1���L�L$A�VD�D$(I�6IcyD)�D)�H�L�Hc�L���H��$�H��x�5���L�L$A�y�%���L����t����f.��T$\H�|$E1�A��H��$�L���Q��B���@��A��DH�Mc�����f�H�D$�@H�����H�T$@H�t$HE1��T	������H��$�H��P�����o0)�$�H�@H��$��v
H�|$8��tH�|$8�e���$�A�F���9�N�A��H�D$hH�t$@Mc�H�H�8�bS	�N���DźH�����f��{D�D$Hc��@�I�6L��H��I���?��A�VK�<,D�D$D)����f.�H��$�H��$�L��H���S	������H��$�H��P��t<�o)�$�H�@H��$��v
H�|$8��sH�|$8�h�H��$�H�D�H�D$pH��H�D�D$H�8�rR	A�^D�D$�u���@����S�`�H�EH�D$h�o+H�(H�SH�l$hH�PH�}����GH�E�@H�]�{������{�o����Z���fD����S���H�EH�D$x�o#H� H�SH�l$xH�PH�}����GH�E�@H�]�{�����{�������fD����S��I�H�D$`�oH�H�SL�t$`H�PI�>����GI��@I��{�7����{�%�������f.�H�T$hH��z�q����@H�T$hI�4$H��J8N�'H��n�1�1��J$H�D$`H�\$H��pH�8�s���CH������qL�d$pI�<$����DH�D$pH��x��H�8H��$��&P	������qH�l$hH�}�+���D�qL�t$`I�>��fD�{qH�l$xH�}�k���DH��$�H�H�0�A���D��k���f�����C���H�EH�D$x�o;H�8H�SH�PH�D$xH�8�v
�qH�D$xH�8�GH��BH��{������f.�����C��I�H�D$`�o;H�8H�SH�PH�D$`H�8�v
�pH�D$`H�8�GH��BH��{�.��!�����C��H�EH�D$h�o3H�0H�SH�PH�D$hH�8�v
�*pH�D$hH�8�GH��BH��0�@���"���H�:�M	��H�D$pH�H�8�M	9��3L�t$`I��P��@H��l���@��A��DH�����DH�8L��$�L���M	H�D$xH��$�L��H�H�8�2O	��u~L��$�M�.A�}t'A�}u
A�E����L���p�H��$�L�(A�ML�t$`����H�8H��$��M	�G�H�8H��$��hM	��H�D$`H�D�hA)�A�}Hc���L�D$`L��I��I�L��L�D$H�0���M��L�D$���H�Sk�v������A�E�M�I�H��$��AomH�(I�UH�PH��$�H�8�v
�XnH��$�H��BH��BL�(A�}��������������ATUSH��dH�%(H�D$1�����H��1�H���i������H�$L�#A�|$t%A�|$uA�D$����L�����H�$L� I�$Ict$L�$3L9��������I���H��D�3L�BI�эN܀�:wH��H��L��tI�QA�\M��I��H��A�1L��I9�u�L��A�A1�H��H)�H�s�=��]H�E�E�苖H�D$dH3%(��H��[]A\�fD�EH�E��f.����A�D$�~�H�H�$�Ao$H�I�T$H�PH�$H�8�w%�GH��BL� A�|$��������klH�$H�8���
��ff.�f���ATUSH��dH�%(H�D$1���u_H��1�H��蝔���tHH�$L�#A�|$tA�|$u
A�D$��wGL����H�$�EH�H��H�E�
��K�H�D$dH3%(uyH��[]A\�f����A�D$�^�H�H�$�Ao$H�I�T$H�$H�PH�;�w%�GH��@L�#A�|$�m����\����KkH�$H�;������ff.�f���ATUSH�� dH�%(H�D$1�����H��1�H�t$��w������L�d$I�$�{th�{uR�C��vJ����C��I�$H�D$�oH�H�SH�PH�D$H�8�wx�GH��BH�H����H�D$H�H��EH�|$��D$�D$���EH�E��ÓH�D$dH3%(u%H�� []A\�f.��jH�D$H�8�v������f���ATUSH��dH�%(H�D$1���uH��1�H���M����thL�$$I�$�{t!�{u�C����H�����H�$H��s��tZH�;�u�'��EH�EH���'���H�����f.��ےH�D$dH3%(��H��[]A\�fD�EH�=F����EH�E�����C���I�$H�$�oH�H�SH�PH�$H�8�w!�GH��BH��{�-���������hH�$H�8���]��ff.�f���ATUSH��dH�%(H�D$1�����H��1�H���������L�$$I�$�{t!�{u�C����H���h�H�$H��s����H�;�u���EH�EH�����L� �A���HcEH�l�H9�s6�|��H�f�H���C��DB t	�A���H9�u����;�H�D$dH3%(��H��[]A\�fD�EH�=fD�%��EH�E�����C�(�I�$H�$�oH�H�SH�PH�$H�8�w!�GH��BH��{����������gH�$H�8�����ff.�f���H��H��dH�<%(H��$1�E��~U��~QE1�I��G�
I��I��u�E1�@B�<
F�	I��D�<E9��1�����H��9��H��$dH34%(uH������D��AWAVAUATUSH��HH�t$ dH�%(H��$81��G����71�H�T$xH�t$p��H��$�茎�������:H�l$pL�eA�|$t&A�|$uA�D$���cL����H�D$pL� A�D$�D$����H�l$xL�mA�E���<tA�}u
A�E����L����H��$�H�]�{t�{u�C����H����H�D$pH�\$ H��pH�8�s���H�L$x�s�CH��$�H�H�9H�D�GH�
D9BDNBH�H������f.��k�H��$8dH3%(�cH��H[]A\A]A^A_�f�H�D$xH��x�����1�H��a�1���H�D$ �@H���<��1�<��I�$H��1�A�L��$�L��$�H�D$@�B	H��$�E1�1�H��H�$��1��	L��H���B	H��$�H�D$H�D$lH�D$H��$�H�D$(H��$�H�D$0����u{H��$�H�|$0Ƅ$�H��$����D��$�H��E1�jH��$�A�H��$�H�|$A�U�4	ZY��$�v
H�|$0�bD9�AL�E9�EO�L��H���B	H�t$L��H���C	��uyH�T$H�t$(E1�M��L��H���6B	���=����T$lD�j�E���\H��E1�A�jH��$�H��$�H�|$�	D9�^_AL�E9�EO��n���fD�{Hc��}�I�ŋD$���H��$�D�|$E1�1�H�D$0H��$�H�D$8H�D$H�D$H��L$�TLc�L���)�9�O�Ld$@L��Lc�L�����9\$�g��L��M��A����I��D9|$�9C�<H�<$A�WL��H�L$0D�|$(�8	��u�H��$�D��M��H��P���8�o)�$�H�@H��$���v
H�|$H�a��$�t
H�|$H���L��$�Lc�$�H�|$��K�4H;L$8��H�D$J�<0I��L��L���+��H��$�l$(H��xt��$�vH�|$H�b`f�;l$�����L����H�<$��-	H�L$D��H��tB�1H�L$ �AH��H�L$�@H�����D��M��I���H�|$�1I�NH;L$8snH�D$L�I��A�$����t���@L�Lc`����@I��M�~H�D$8N�O1�1�L�D$PM����L�D$PH�D$H�����DH�|$I���1�H�L$(I���H�D$8�L�H�L$(H�D$L�I���d����H�\$ 1�H�=�<�C���CH����f.�H�|$H���1�L�D$XH���H�L$PH�D$8���H�L$PL�D$XJ�<0H�D$I���6���@1ҾO1�A���H�D$8NH�D$�������A�D$��H�EH�D$p�Ao$H�I�T$H�PH�D$pH�8��.�GH��BL� A�|$�N����9���@I��$�I��$�H�D$8�v���fD���A�E��H�EH�D$x�AoUH�I�UH�PH�D$xH�8�v
�^H�D$xH�8�GH��BL�(A�}�������fD����C�(�H�EH��$��oH�H�SH�PH��$�H�8�v�4^H��$�H�8�GH��BH��{��������f��]H�D$pH�8���fDI�EL��PpH��H�D$pL� A�D$�D$�W���DI�m�I����H�<$�W*	H�D$ �@H����L���z�H�<$�1*	1�H�D$�n������ff.����ATUSH��dH�%(H�D$1�����H��1�H��詅�����L�$$I�,$�}t!�}u�E����H���(�H�$H�(�}��Hc���L�$I�L�
HcRM�D�M9���I�y�L��H��D�2H��H��@�q�H9�u�M)�J�T�I��RH��C�S���H�D$dH3%(�H��[]A\�fD����E��I�$H�$�oEH�H�UH�PH�$H�8�w �GH��BH�(�}���������[H�$H�8��f�H���L��������AUATUSH��(dH�%(H�D$1��G�����I��1�H�L$H��H�T$���������L�,$I�m�}t�}u�E����H����L�l$I�m�}t�}u�E���H���s�����H�l$H�]�{t�{u�C����H����H�$H�8H�D$H��w�H���uvH�D$H�H�A�D$I�$���K�H�D$dH3%(��H��([]A\A]�@H�$H�8H�D$H��w�H���t�H�H�?�w���3H�H�?�w��f�f��H�T$�*��Y[�*�H��^��H�A�D$I�$�q���@����E���I�EH�D$�o]H�H�UH�PH�D$H�8���GH��BH�(�}��������f.�����E��I�EH�$�oUH�H�UH�PH�$H�8����GH��BH�(�}�
�������@����C� �H�EH�D$�o#H� H�SH�PH�D$H�8�v
�2YH�D$H�8�GH��BH����@�YH�$H�8�k������XH�D$H�8��������UH��SH��H��H����H�����zuxH��E1Ʌ��d@H�J��@�:L��H�ʅ�t?�;H��L�C@��\u�H��t�m��t&�sH��H�J@��0AD��@�2H�ʅ�u�I��f�I9�t�H��[]Ð��~BH������\t;�K�H������~#�
H����'u�z'H�rt7���K�H����H��[]Àz0u��C�H��H��t�m���@H��t�m���JH�r�f.��������fD��ATUSH��dH�%(H�D$1���uoH��1�H�������tXL�$$I�,$�}t�}u�E��w\H���t�H�$H�(�uH�}�s����CH�sH�H���;����f�苀H�D$dH3%(uyH��[]A\�f�����E��I�$H�$�oEH�H�UH�PH�$H�8�w(�GH��BH�(�}�`����L�����VH�$H�8���-��ff.�f���AWH��AVAUATUH��SH��HLc.dH�%(H�D$81�M��I�L9�sZH��L�D$3L�L$4L�=���@�E�L��L9�s5�L�cH��<\u�M9�v��S�B�<����Ic�L�>��DE��t�ED�1H�D$8dH3%(�KH��H[]A\A]A^A_ÐH�sI��L9��L�L$(L�D$ H�t$H�L$�T$���L�S�T$H�8H�L$H�t$L�D$ B�DWL�L$(��H�CD�T$4L9��qH�s�Dw�a@�t$5A��I���D$6�TfD�E�\A��H�������E�A��H��������E�
A��H�������E�
A��H�������E�	A��H�������E�A��H���u�����E�A��H���]�����E�A��H���E�����rи@����I����A�M9���A�$�r�@��wH��H��uջHc�L�Ϻ1�L�D$A)�L��H�L$L�L$�D4���L�L$H�L$�E�L�D$����D$5A��L�Ϻ1�L�D$H�L$I�\$L�L$�W��L�L$H�L$�E�L�D$�v���H�s�U�A��H���c���M���_���� ����ATUSH��dH�%(H�D$1���uoH��1�H���{���tXL�$$I�,$�}t�}u�E��w\H���D�H�$H�(�uH�}�s���CH�sH�H���{����f��[|H�D$dH3%(uyH��[]A\�f�����E�p�I�$H�$�oEH�H�UH�PH�$H�8�w(�GH��BH�(�}�`����L�����[RH�$H�8�����ff.�f���AWAVI��AUM��ATI��USHc�H��H��8�L$dH�%(H��$(1���uD�$�(��D�$��HcغH�޿D�$�Y�Lc$I��E��uL�����Lc�L�T$ � 1�M�L���H�M9���L���"��y.���D M9���L��H�Q�L�YI9�w�<.u�M9�vրy.u�I9��~H�AI9����A8A�L�T$H�mLL�\$L�$wH����1�1��EL�$L�\$L�T$�D�y.�L�Y<.�\���M9��S����~���@M�L��M9���M��L����@H�PH��H�ӈH��I��M9�t@A�UH�XHc�р|4 tݍr��\@��^vǃ����c��Ic�L�>��fDH��L)�����Hc�H9���M��tA�M��t�D$��u1H��$(dH3<%(L���tH��8[]A\A]A^A_�DL������fD�Q8������I�<H�L$)�L�L$��L�$Hc��m��H�L$L�$L�L$L�Y����fD�sL��1�Hc�谽I���B�����@fH�������@rH������@aH������@bH������@vH������@tH���z����@nH���j���H�57�H��1�L�$��XL�$L���H�H��=���fD1�1�����L�T$H��IL�\$L�$���L�T$H��IL�\$L�$����N��ff.���ATUSH�� dH�%(H�D$1�����H��1�H�T$�H�t$��v�����L�d$I�$�{���{t�C���dI�$H���H�L�d$I�$�{t�{u�C����H����H�D$H��p����H�T$H�8H�
D�IE��tXL�H�U1��z����EH�E��+wH�D$dH3%(��H�� []A\�fD�C��w(�{�V����Y�����u���EH�E�fD����C��I�$H�D$�oH�H�SL�d$H�PI�<$���GI�$�@I�$�{����{�������fD�EH�=�)�u��EH�E���������C�p�I�$H�D$�oH�H�SH�PH�D$H�8����GH��BH��{�P����C�������C��I�$H�D$�oH�H�SH�PH�D$H�8�w?�GH��BH��{����������KL�d$I�<$����D��KH�D$H�8�f���KH�D$H�8�;����i��f���AWAVAUI��ATUSH��dH�%(H�D$1�H�D$H��LD�H���vI����E��Hcޅ�u���Hc�H�޺��͹I�4I��H��E����H����x��I9�sJL�����H��H��H9�t)�������'u�''H��H��f�Q�H9�u�A��E)��E�u����H�D$dH3%(��H��A�vL��1�[Hc�]A\A]A^A_鸸�L��E1�I9�r���u*�\0H��f�A�H��H9�t����"t~܀�'t��\t�H����f.��\H������\0H��f�y�����fDL����E�u�<����A�E1�H�\$dH3%(uH��[]A\A]A^A_����f���E1�����@��ATUSH��dH�%(H�D$1���uH��1�H���
r���thL�$$I�$�{t!�{u�C����H����H�$H��s��tZH�;H�U1��t���H��H���i��E����H�]�E�	@�rH�D$dH3%(��H��[]A\�fD�EH�=�%腹�EH�E�����C舶I�$H�$�oH�H�SH�PH�$H�8�w!�GH��BH��{�-���������{HH�$H�8��f�H�5�)�1��V�*��������AWM��AVAUI��ATI��US��I��H�H���D$PD�D$��tp��E1���A��H�xH�ډ�D�$H)����D�$H��u�E���=E�wD��L��D�$�r�A�GD�$I�H��D��[]A\A]A^A_�@�D$D�@�H9���H��D�$�2��D�$1�H�L��4�H�94�u��H��H9�u�D��HcL$A�VHc�H��H��H�$E�E�G�ĵA�GI�I���Թ�H�$E1�M�L
�fDA�>I��I��L9�tXH�I�<$D�*D9�u�H�|$XtH�t$X�M9��E1�A�tA�4H��H9�u�I��I�A�L9�u�A�����Hct$A�VIc��F�H�t$A��D�A�G��A�GI�I��f�I�߉�L��M)�L������I��H��tUM��L��L��L�$M)�L��M��
��L�|$L��L��L��M�����L�$H�|$XM�`t�H�D$X��f.�I9��?���L��L��L��M��$���D�$A�����fDE�qHct$A�V1��<�A�GE1�I��I���f�A��|���D��H����jj�,���H����AWAVAUATUSH��XH�t$�T$dH�%(H�D$H1���t4����nH�D$HdH3%(��H��X[]A\A]A^A_�H�t$8�1��mE1Ƀ����H�l$8H�]�{t,�{u�C����H��L�L$��H�D$8L�L$H��CL�L$ ���h��L�3Hc��Z�H�L$81�I��H�L�d$(HchL�M��H�E��EL�9H�D$A�I�΃� <@��1�E1��fDA�l$���m�E <��@��
��A�G�P�9���)�A�؃�M�LL���
��
tL9�tH���PA��J D)�w�I���f�D9�~3I����A�,$@�� t@��	t�N��H��H��Pt	��@��-u�D�CD9��4Hc�A��L�T$E)�H�p�L)�I)���M�>I��A�H��H9�u�M�>I��Mc�LL$�A�G�P�9������L�L$ ��L�d$(Hc�L�L$��L�L$H��I��H�D$8H��X��@Lc��1�I��K�4,�C�����A������D�M��I��H��I)�H��A��
�A��
����A��M��tI��I9�~���Mc�Hc�M�A�8M9��5@�� �@��	�9���E�A��
A��A��
��A���BHc�9�|6E�4H��A��
t�A��
t�Hc��E�H��D�H��9�}�E��t'�BH�f�D�H��9�|E�H��A��
t�A��
t����Z�����I��A�l$��E <v-@�� t'@��	t!�L��H��H��Pu@��
��DA�G�s��9�|�D9��c��H�l$D)�H��I�H�fDL��I�H)���A�<U��H�=U���Hc�H�>��@�E{@H��M�>H9�u�H�l$Lc�A�G�P�9�����������E}��f��E[��f.��E/�f.��E]�f.��E<�f.��E>�f.��E\�o�����E(�_�����E)�O�����M�@���M��A��M��D��@A�
A�
A�9�������[���A�<$M��1�Ic�L9������@�� t�@��	t�@��
�����@��
������BHc�A�{�H�H�|>�%�@��	t�H��@��
��@��
��A��H9��S���A�4M�@�� u��H���f.�D��A����C�D4�<
t<
�^��F�DHc��f�H��E��A)��<A�t�H�x�@��
t�@��
t�M�A�8����f.�H�D$�@H����1�H�T$@H�t$8��g���t�H�l$@H�]�{t"�{u�C���XH���d�H�D$@H�L����@�L��赬�D$��uH�L$H�D$8L�9H��@�A�A�h���H�D$8L�L$L��A�H�
I��
H��p���L���\��1���Mc��;���E���������@L���Y���Hc‰�E����M��D�����Lc�����s�������L�L$�C輫L�L$H�EH�D$8�oH�H�SH�PH�D$8H�8�w&�GH��BH��{���������fD�=H�D$8L�L$H�8�ƃ���C�D�H�EH�D$@�oH�H�SH�PH�D$@H�8�v
�V=H�D$@H�8�GH��BH��L�������A�<$M���������ff.�@��AWAVAUATUSH��H��$�H�|$�t$PH�D$h��$�H�T$�D$`H��$��L$dH�D$��L�D$HD�L$$9��0Hc�Hc�H�$L�y�H�t$xH�t$XD9��?�L$`����L$$9L$d�H�L$H�t$xH�l$H��H�H�D$8H�$�\��\$0H9���H�D$(H�D$p�D$dH�\$8E1�H��H+$��H�H�D$@fDH9�r=D�m�@�D$0C:>��I�~H9�rH��D��H)�H���f��I��H��u�E����H�D$pH��tH��裩H�D$(H��tH��葩�\$PH�|$���1�I��H�D$hH��tX��T���D$`Hc\$P��t]H�t$H�|$H��諴����D$$H�L$hH�|$H����ܫI��H�D$H��t�H�ĈL��[]A\A]A^A_��D�|$PH�|$D��螫H�|$D��H��莫H��H��I���`���H��L���U���H��H��L�����H��u諨L��裨�[���fD蓨L��苨�D$PH�L$hH�|$�H�Ĉ��[]A\A]A^A_��H�D$(H�D$p�|$P��Hc����T$`H�D$PH�D$x���qD�l$dHD$H�L$L�t$PH�D$8A��H+$L�H��Ic�H�L$@�)H�D$0f�H�|$H9�w;H�D$D� �B8,8��I�}H9�wH��D��H)�H���S��I��H��u�H�L$H9L$8��H�D$pH��tH��艧H�D$(H��tH���w�H�|$PH�D$hA�1�I)�D�0H�ĈA��[Ic�]A\A]A^A_�t�@�\$P�����t$`I��H�D$h�����H�t$H�L$xL�I�D
H�t$(D�&H�4$H�D$0H9�����H)�L��H�ËD$$D�p�Ic�H�D$f�H9������H�D$�(�DI�~H9������H�ډ�H)�H���:��I��H���r���F8$8u�H�T$H�|$H���ֱ�u�HcT$$H�t$HL���@��H�|$tH�D$�H�D$(H�$D� H�D$0I�<H)�H9��^����
���f�H�T$@L��H���p���'���H�$H�D$8A��I�<H)�H9�����T$P�t$$Ic�+t$d��Hc�Hc��^��T$`H�D$PH�D$x�������H�\$pH�$H�t$(L�t$PH�H�D$8H)��t�H�ŋD$d@�t$��H�H�D$0�H9�rFH�D$(H��D� �D�D$C:D=�pI�}H9�rH��D��H)�H�����I��H��u�H9\$8�����f�H�t$H+\$pL��H�H�\$XH��I�����`���H�T$0H�|$H���F������H�t$L��L��H)�H��I�襹�Hcl$$H�t$HL��H��I�荹�H�|$tH�D$�H�L$@H�4$L���)H�L$8H�H�D$H)�H�L$XH9����������t$PH�|$�
��\$dH�|$H�D$(���H�L$(H�t$xH��H�����H�4$H��贉���D$$H�L$(9��H�D$xH�l$(H�L$pH�4H�t$8H�4$�\5��\$0H9������+���H�T$0H�|$(L���.���v���H�D$M��L��I)�H+\$pH�4L��M�脸�Hc\$$H�t$HL��H��I��l��H�|$tH�D$�H�$H�D$8I�\
H)�H�D$XH9����H9\$8������-����t$PH�|$���t$$H�|$H��H�D$�٥H�l$xH��I��H�D$H��衈��L�4$L��L��蒈��H��H��G�d4�H�H�D$0L)�H�ËD$$��H�H�D$(I9�=DH9�r3H�D$�(��F:$8tBI�~H9�rH�ډ�H)�H���@��I��H��u�H�|$莢H�|$脢�c����H�T$(H�|$H���ƭ�u�L��HcT$$H+|$H�t$HL��(��H�|$tH�D$�H�$H�D$0I�<H)�H9��O����DH�\$XL��H��H��I�����b���H�l$(H�L$p���ff.�AWM��AVE��AUATI��UH��SH��H��xL�*dH�%(H�D$h1�H�D$HA�}t&A�}u
A�E���\L��H�T$迸H�T$�CH��p����}tb�M�������oH�@H��H�CH�� �����C�CH�D$hdH3%(�nH��x[]A\A]A^A_��oH�@H��H�CH�� ���!�C1��CH�}�K	A�|$�I�$H�D$A�D$�D$$H�D$PL�l$@H�D$0H�D$XH�D$(H�D$HH�D$8f.�H�}1�L���B	���D���H�L$@H�H�L$�B�����ztH��胷H�D$@H��J����A�|$�H�;���8~-H���sAWAV�t$@D�L$DL�D$8H���H�;H�D$pH�� ��H�D$PH��D$X�C�������H�}1��	�=���D���H�T$�B�s�H�L$H�T$H�H�D$@�oH�H�RH�PH�D$@H�8�v
�|1H�D$@H�8�GH��BH����fDH�}1��	A�|$�����I�<$1���	����H�t$8I�<$1���	��t\H�D$@H�;�D$$H�H��
H�D$�J�������H��s�AWAVL�L$@D�D$4H�L$(��YH�;^����DH�L$HH�H�L$�zt"�zu�B���sH���õH�D$HH�H�I�<$1�H�D$�B�D$$�!	H�D$@H��J�-�����CH�=.
���CH���������H�T$A�E��H�T$H��Ao]I�MH��H�HH�� @��vH���/H�T$H��@H��@L�*A�}�N����7���H����/����H���/�r���H�UE�D$I��I�$�AWAVH�8�A�XZ�T���f.�H��H�SE�L$M�$AWAVRH�UH�8�N�H�� H�����f�I�<$1��
	�D$$H�D$�r�������H�T$�B�ӜH�L$H�T$H�H�D$H�o"H� H�RH�PH�D$HH�8�v
��.H�D$HH�8�GH��BH��z�.��������_��ff.�@AWAVAUATUSH��dH�%(H�D$x1��G��D$<����H��A��1���H�L$@H�T$PH�t$HL�D$`��V�����L�t$HM�.A�E����L�t$PM�.A�E���L�l$@M�uA�F����L�|$HM�7A�F<��<tA�~u
A�F���
L���L�t$PM�.A�}��A�}u	A�E��wGL���ϲL�l$@�D�WH�D$xdH3%(��H�Ĉ[]A\A]A^A_�D���A�E��I�H�D$P�AouH�0I�UH�PH�D$PH�8�v
� -H�D$PH�8�GH��BL�(A�}�U���L�l$@I�E�x���L�L$<��E��LE�H�D$PH��L��H�0H�D$HH�8�������&���H�D$`H�8�w�GHcT$<H�H�������+H�D$`HcT$<H�8�GH�H���������A�F��I�EH�D$@�AoH�I�VL�l$@H�PI�}�v�,L�l$@I�}�GI�E�@����f����A�E诙I�H�D$P�AoUH�I�UH�PH�D$PH�8�v
�+H�D$PH�8�GH��@���D���A�E�O�I�H�D$H�AoMH�I�UH�PH�D$HH�8�v
�`+H�D$HH�8�GH��@����DL�|$PM�7A�F��<�1���A�~u
A�F����L���<������H��L�l$XL�|$p��[H�D$@1�H�H�8�L		H�T$<���HD�H�D$H�D$8H�D$H�D$hH�D$�D�c�H�T$X�@I���@H�
�A���9H�D$PL�L$E��L��H�0H�D$HH�8�q���H�D$@H�T$E1�E1�H�t$L��H�H�8�N		������uH�t$pL��H���qH�D$@1�H�H�8�	H�D$@1�L��H�H�8�		���7���H�D$X�H��@��<�-���萗I��H�D$XH��BH��oAH�RI�VH�8�G����A�~vL���)H�D$XH�8�G���GA�FA�F����D�T$8H�t$hL��H����j�/�������H�T$(�AH�L$ ��H�T$(H�L$ H�H�D$X�o!H� H�QH�PH�T$XH�:�v
�(H�T$XH�:�GH��@�[���@��O���fD���A�F�w�I�H�D$H�Ao.H�(I�VH�PH�D$HH�8�v
�(H�D$HH�8�GH��BL�0A�~�����L�t$PM�.A�}������Q���D���A�F�I�H�D$P�Ao>H�8I�VH�PH�D$PH�8�v
�	(H�D$PH�8�GH��BL�0A�~�������英�ff.���H��jj�t$(��H��(�fD�������f���1����D��1���D�����f���ATUSH��dH�%(H�D$1����KH��1�H���O����0L�$$I�,$�}t!�}u�E����H���8�H�$H�(H�}HcmH��H�H9��JH��E1��f���
��H��H9�v"�H�P��
u�x
��A��H��H9�w�E���C�@D�$FA�|$Hc��O�H�$H��H�H�
H9�w�kH��H�w�H9�vY���
tH����
u�/>�<br H�~f�V���
t~��
u��y
u��VH�~�QH��H��H�w�H9�w�D�D�cH��C��{OH�D$dH3%(��H��[]A\�fD�x
����H�P����D�y
�>����VH�~�QH���D�s�8��CH�������E�8�I�$H�$�oEH�H�UH�PH�$H�8�w �GH��BH�(�}�4���� ����+%H�$H�8���ͮ�ff.�f���AW1�AVAUATA��USH��8H�t$Hc��dH�%(H�D$(1��W�D��H��H���)TA�������H�]H��x�D�0H�E�H��B<��H�L$ L�-z�H�L$f�<��Hc�L�|�L�|$ I��zt"�zu�B���(H���h�H�D$ H�L�:�L��L����������z��L��D���k��H��H���gH�EH��B<����A9��`���H��踑H�D$�@H�H�D$(dH3%(��H��8[]A\A]A^A_�D1�1�H�� ���L�+A�}tA�}u
A�E����L��腨L�+I�]H�=��H���߫��7H��H�=|��ȫ��lH��H�=I�豫�A�ƅ��d���H��H�=i�藫���H��H�=?�耫���H��H�=
��i����H��H�=��A��L������H��H�J 1�1��������E1��r����H�:�(	�������H�EH�t$1�H�H�8�
	L�|$ ���H�:1���	����]���H�EH��B���D���H�T$�B�ÏH�T$I�H�D$ �oH�H�RH�PH�D$ H�8�v
��!H�D$ H�8�GH��BH��z�~����i���f�H��舏�K����fDM��t5H��@ܔH�{`H��tH�D$�Y�H�T$H��H�T$觑H�T$H�C`H��H�T$�1�H�T$H���d��H�L$H�T$���ƉA��H��赑H�L$H��A�L���@A��S���DH��1�1�������fDH�:1�1��4�H�EH��B�*���A��������A�E�X�H��AoMI�UH�PH�;�v�v H�;�GH��@L�+A�}�������f�H�5�1���m.H�D$H�T$�p����A��~���A��s���A��h���赩�D��ATUSH��0dH�%(H�D$(1��G�����1�H�T$H���GH����~L�$$I�,$�}t!�}u�E���H���ƤH�$H�(L�eM��tA�<$��E1�u[H�`�H�T$L��H���H�D$H�@�����	@�HH�D$(dH3%(��H��0[]A\�fDH�\$H���O�H��L��H�@����H�D$H�8�w�T$$�WH�foD$����H�D$H�8��f��uL���E�I���%���D����E�H�I�$H�$�oMH�H�UH�PH�$H�8�w �GH��BH�(�}���������;H�$H�8���ݧ�ff.�f���AWAVAUATUS1�H����~m��H��H�T$E1�Hc�H��讋I��膐�M��L�(H�E�A�\�D��<����>uB�>H�|$L��1�fA�$�ّ�L��H����苋H����[]A\A]A^A_�f.����H��H��DP uMH�EI�D�E��u^��/tiA�$A��I���fDH�EA�$<I��A�\�H���S���A���T���H�EA�\���f�A�$I������A��D��AWA��AVE1�AUATUD��SH��xH�|$(H�T$@H�L$D�L$OH��tD�2H�|$(D��D�T$�7�H�|$E1�D�T$H�D$�H��tHc��o����+�D�T$I��E���jL�\$L�L$(1�L�D$ �D$H�D$8M��M��M���D$0�D$I�|$D�m��l��H�
f���Hc�H�>��I���D$0L�L$ D��E1��D$��D$0���L�\$PD��M��A��E�׉��D��|$OH�I��A��A�\$I�L$E�FH��DB �E���v��D��M��E��L�\$PA��M��A��<�L�d$XL�L$ �D$8>�l$PE1��D$0�D$DH�
9�H�D$L�@M�|$D�mA����A�\$E����I�CA�!E9�����l���Hc�H�>��L�\$PA��E��M��I���D$8<D��A��D$0�T$@H�
e�L�εM�|$D�mA���H�|$��A����L��H+\$ H����
A�)I�AA�E9��A���l����Hc�H�>��I���D$0L�L$ D��E1��D$DH�
y�L��M�|$D�mA���H�|$��A����L��H+\$ H����'	A�(I�AA�E9��A���l����Hc�H�>���D$HI��A�f.�M��A��D��A��tQM�gA�mE����A�I�CA�_A9����l�H�5W���Hc�H�>���D$8(D��fDH�D$A�H��I9�v�I���D�T$`H�5�L�L$XL�\$P�L$h���L�\$PL�L$X��D�T$`�\���A�mA�_�L$hA9��L-M�gA�A��e��H�j���Hc�H�>��DH�|$tPA��uJM��L+t$ I�����A�I�AA�$A9��
��l�lH�=����Hc�H�>��A�_A9����L��M��H+\$(Ic�HD$(I9�sA�H�|$�܅H�|$t
H�|$ �ʅH�D$@H��tD�0H��xH��[]A\A]A^A_�A�\$��I��뎉t$A����M��A��A����	�?D��A���
���H�D$A�H��I9���D�T$hL�L$`L�\$X�T$P���I�O��T$PH�L�\$XL�L$`D�T$h�<�p�����I�O��<�y�����I�O��<�t�����I�O��<�c�����I�O��<�o�y���I�O��<�d�j���A�mA�_A9��g+M�gA�A��l��;H�
Ѡ��Hc�H�>���M��A������DM��A��D��-A������H�|$A��-H�WL9����A�O���-����A��!������A�mA�_A9��eM�gA�A��l�
H�5���Hc�H�>��@A����A�|$�\��:\$8��	�|$8\D��M��D�l$0I��t�\$8A�_A�L9|$�����A��D$0E���u���A9ŸAEʼnD$0�`����D$������L��D��I���D$�Y�8���A�\$D��I���$����L�D$PM9���H�|$��'L��H+\$ H�����A�!I�AA�E9�����l�#H�=x���Hc�H�>����t$8A�\$@��"��@��'�� ����D$HE9�������D$8(��l��H�5ԣ��Hc�H�>����t$8A�\$@��"��@��'�� ��g�l$HE9��7����D$8)��l�NH�50���Hc�H�>���I��DM��A�����D����H�|$�$L��H+\$ H�����%A�E<I�E�E9���*�D$8<��l��L�e���Ic�L�>��I��L�L$ D��L��E1��D$0�D$�A��M��I�����f�H�|$ I��1�D�T$XL�\$P�s�Mc�D�T$XL�\$PH�D$ I����f�H��I��H+\$(����A�E���sI�CA�(E9�~ր�l�(H�=Z���Hc�H�>��f�A�E���#I�CA�)E9�~���l��
H�=Ψ��Hc�H�>��f��L$0����A�\$D��I���h������� A��L�\$PM��E��D��I���C���fDE���8M��D��I��L�؈L�XA�_E1�����I�ËD$0���U����d���@I��A��M�����f.�I�����I���@����M��A��I���X���f�M��A��I���X���f�I������I�WA�mM��I���Z���D�L$���"A�m��M�gA�_A9��C�����l��	H�5/���Hc�H�>��fDA�_M�gA�mI��� ���A��<����A��D$8E9��.�D$8A�<l��H�5��Hc�H�>���E9�������l�}�����Ic�L�>��E9��������l�]�����Ic�L�>��D��M�����DD��M���z���H�|$ H��1�Hc�D�T$XL�\$P�~D�T$XL�\$PL�L�H�D$ L�H�
̓���H�|$ H��1�Hc�D�T$XL�\$P�O~D�T$XL�\$PL�R�H�D$ L�H�
ґ����D$8)I�|$D�mM��A��\����A�\$D��L9d$��&M��A�I��A��\�����D�l$0����I��A��z�I��A����I��A����M��I��A��A�����I��A���I��H�D$H��H�D$P��?A�L;d$P����A�|$�<������A�\$A9��5)I�T$�D$HA�A��I�׀�l��H�5����Hc�H�>��I��A�����M��I��A��A��c���A�_M�gA�mI��A����I�WA�mD�l$0M��I��I��L+t$ I����zL�H�L9|$�� A�_A������L$����A�m�Q�A�_M�gA9�~ ��l�H�5����Hc�H�>��M��H�t$(Ic�L��H�H)�I9�sJA��
���@D��M������DL�D$ L�L$(1������H�L$H��H�L$P�l���H�|$A��{����A���5 ��A��uGA�\$E9��''�D$E1�L�L$ I���D$0��l�
H�d���Hc�H�>��A���(5H�D$H�PH�
q�H�2�H�=�A�\$D�mM�|$L9��s#E9��Q�D$0A�E1���l���Hc4�H�>��A����4I�D$H�|$H�D$X�E�D$P��4A�t$D;T$P�G&�D$E1�D�l$P�D$0L�|$X�D$8>@��l�7H��@��Hc�H�>��L$0����A�mM�gA�_A9��
(��l�WH�
X���Hc�H�>��H�|$ H��1�L�D$hD�T$`L�\$X�)zLc�L�D$hD�T$`H�D$ I�L�\$XH�
������D��M��D�l$0I���D$8����I��A�����|$0I�OA�uH�L$X�t$P���A�_��I��I��A��m�I�A�mA�\$D�t$0L�X�>I���D$0�D$�;�M��D��I���3���M��D�����M��D��I���W�I�������M��D��I���
�M��D��I���_�I��M��D������t$����!D�m�V�A�\$M�|$E9��������l�K-H�=����Hc4�H�>��A�\$��I��I����I����D�l$0��I��A���M��I��D��A��X���I��H�D$M��D��H��H�D$P���M��I��D��A��e�I��A���M��I��D��A����I��A�M��D���
�M��I��D�����I��A�M��D���K�M��I��D��A��)�M��I��D��A����t$����"D�m�V�A�\$M�|$E9��n���A���l��3H�=���Hc4�H�>��t$���#D�m�V�A�\$M�|$E9��$���A���l��HH�=r���Hc4�H�>��A�\$��I��I��A����A�\$��I��I��A����M�����T$I��A��1��T$I��A����T$I��A���M��A��A��*�A���M��A��A���A�_I���iA��V�M��iI��A�H�|$t
A����A�_L9|$�$�A���h����n����D$���J"I�D�A��A�_I��D��E9���E��A���l��9H�5ܵ��Hc�H�>��L$A��M��I���l�M��I��D�����I���=�M��I��D����M��I��D����I�����M��I��D���p���M��I��D������I�����t$���."D�m�V�A�\$M�|$E9�� �����l��-H�=ܶ��Hc4�H�>��A�\$��I��I����M��D�����M��D�����M��D��L���r�M��D����I�|$D�mM�����M��D��I����I���_�M��D���
�M��D���D$8)��M��D��L���D$8)��M��D���D$8)���D$8)���\$8����M��D���D$8)�W�M��D���D$8(�:�M��D��L���D$8(��M��D���D$8(�T��D$8(��M��D���D$8(�j��\$8����t$�D$8)���M��D�����A�\$��I��I�����D$���|"D�m�p�A�\$M�|$E9�����D$8)��l��9H�=����Hc�H�>��I��A��#��D$����!D�m�p�A�\$M�|$E9��K��D$8(��l��+H�=T���Hc�H�>��A�\$��I�����|$���!D�m�W�A�\$M�|$E9������l�&%H�=����Hc4�H�>��|$���b!D�m�W�A�\$M�|$E9�����l�7'H�="���Hc4�H�>��I������t$���b D�m�V�A�\$M�|$E9��B��l��&H�=����Hc4�H�>��I���;���A�\$��I��I����A�\$��I����A�\$��I���D$8)���I�|$D�mM���D$8(��A�\$��I���D$8(����|$���� D�m�W�A�\$M�|$E9������l��#H�=����Hc4�H�>��L�\$PE��I��I��D���D$8<A��D$0�E�E��L�\$PE��I��I��A��D$0���L�\$PE��I��I��D���D$0A��D$8<��L�\$PE��I��I��H�D$D���D$8<�D$0H��H�D$P��t$���7 �V�A�~A�\$I�t$I��A9����D$0�D$8<��l��AH�5@���Hc�H�>��I�I�ň\$8�I��E�����E��L�\$PI��I��E���D$8<A��D$0���L�\$PE��I��I��D���D$8<A��D$0��L�\$PE��I��I��D���D$8<A��D$0��D��E��L�\$PI����I��E1��D$8<�M�D��A�\$E��I��L�\$P��I���D$8<�D$0A���L��M��H+\$(A����L$���� D�A�I�A�_�HI���L$P��A9�~�A�A�̀�l��&H�5����Hc�H�>��A��p�M��A����A���A���M��hI��A����A����A�_I���hA�����D$8)���D$8(�x�M��A��I�ÉL$�]�A���L��A��.�I�A�m����L��l$I��I���/�I�ÉL$��M��A��I�ÉL$���I�ÉL$��I�ÉL$�M�I�WA�mM��L$I����I�ÉL$��A�_M�gA�mI�ÉL$��I�ÉL$���L$��A�_M�gA�mE1�I�����E��L�\$PI��I��E���D$8<A��D$0�b�L�L$ E1��D$0�D$�<��T$A���\$8D���D$8!��M��D��L���D$8!A�����D$���@�P�A�D$M�|$�D$8�EA9��?�|$8A�@��l�U@��H�="�Hc4�H�>��M��D���D$8!A��2�I���D$HA�����L$����D�A��xA�\$I�L$A��I��A9�����A��D$H��l��+H�5S���Hc�H�>��I���D$HA���L�L$ E1��D$0�D$���I��L�L$ D��E1��D$0�D$��L�gA�mL�L$ L���D$0�D$���I��L�L$ D�����A�\$A�mL�gL�L$ E1��D$0�D$����D$HA��W�I���D$HA���I��A���H�zD�hI���D$H��I���D$HA��O�A�\$�hL�bA��D$H�D��D$H�9��\$8A��D$8!���I��L�L$ D��E1��D$0�D$��D�mI�CA�>A�\$M�|$E9���I�|$��E1�L�L$ �D$�D$0��l�qH�
*���Hc�H�>��T$A��D���D$8!�A�M��D���D$8!A����M��D���D$8!A��u�I�����D$8!A���A��W�A�\$��I��A��D$8!�#��\$8�D$8!����D$H��M��I��A��T$A���I���T$A����I��H�D$�T$H��H�D$P��I�wA������L��l$D��I��I��A��V�I���T$A�����I��E1��e�M��A��I��E1��
�I��E1����I��E1��f�I�WA�mM��I����I��E1��;�E1����M��A��I��E1����I��E1��T���T$I�A��I��A�M��D��I����A�_M�gA�mI���T$A����M��I��A��T$A��X�A��D$0�D$�M�M��D��A��D$0�D$��M��D��L��A��D$0�D$���M��D���<�M��D��A��D$0�D$�n��A��D$0�D$��M��D��A��D$0�D$�b��M��D��A��D$0�D$����I�|$D�mM��A��D$0�D$���M��D���D$���M��D��I�ÉT$��M��D��T$��M��D��I�ÉT$���I�ÉT$��I�����T$��I��E1��D$0�D$����I�ÉT$����1�I��E��A��D$���M��D��I�ÉT$���I��E�ʼnD$A��z��D$A��T�H�W�����.8�̓l$H��I��A��i��D$A�����M��D��I�ÉT$���I���D$��A��D$����A��D$�r��H��D�i�D$A��L���A��D$�$��A�_L�g�i�D$A���L�|$XD�l$P��E1��D$8>�D$0�D$�����E1��D$0�D$�u�L�d$X�l$P�D$8>E1��D$0�D$�8�D�mI�CA�>A�\$M�|$E9��rI�|$��E1�@�t$8�D$�D$0��l�W.H�
����Hc�H�>��L�d$X�l$P�D$8>���L�|$XD�l$P�D$8>E1��D$0�D$��L�d$X�l$P�D$8>E1��D$0�D$�k��L�d$X�l$P�D$8>E1��D$0�D$����M��I��D��T$A���I��H�D$M��D��T$H��H�D$P�Z�I�L$�����S�|$0�U!I�OA�}M��D��H�L$X�|$PH��H+\$ H����N�>H�|$ H�XD�T$8f�H�T$H)�L�\$0���$��L�\$0D�T$8���D$�7
A�\$D;T$P���D$0E1�L�|$XD�l$PL�L$ �D$8>��l��H�����Hc�H�>��L�|$XL�L$ �w���L�d$XL�L$ ���L�d$XL�L$ ���L�|$X�l$PL���D$8>L�L$ �D$0M�g���G�A�\$�l$PE1��D$0L�d$XL�L$ �D$8>��I���?��L�|$X�D$8>E1��D$0�D$����L�|$X�l$P��L���D$8>M�g���D$0�D$���L�d$X���A�\$�l$PE1��D$0L�d$X�D$���D$8>I�����M��I��D��T$A�����I���T$A��(��M��I��D��T$A�����M��I��D��A��T$�j��I�|$D�mI��M���T$A��=���M��I��D��T$���A�\$��I��I���T$A����L�L$ D�l$PE1��D$0�D$���L�d$XL�L$ E1��D$8>�l$P�D$0���L�d$XL�L$ L��E1��l$P�D$0�D$8>�8�D�mI�CA�>A�t$M�|$E9��ZI�|$��L�L$ E1��D$0�\$8@��l��H�
�@��Hc�H�>��L�d$XL�L$ �D$8>�l$P�D$�e��A�\$��I��A��D$0�D$���I�|$�������|$0��+A�\$E1�I��I���D$����D�D$A��D$0�e��I�L$�����d�|$0����A�\$I��I���D$A��q��M��I��D��T$A�����M��I��D��T$A��[��A�\$��I��I���T$A��"��I��A��L�؉T$A��M�I���T$A�����T$D��I��M������A�\$��I��I�ÉT$����A��E1���D�D$���D$XE9��:
D�ǀ�l��H��D��Nc�I�>A��D$XM��E��A��L�\$PI��E�ʼnD$����D$XA��L�\$PM��E��I��D�ʼnD$�K���D$XL�\$PM��E��I��D�ʼnD$H�D$H��H�D$P�����D��L�\$PM��E��A��I��������D$X�D$�o��D$XM��E��A��L�\$PI��E�ʼnD$�m���D$XA��L�\$PM��E��I��D�ʼnD$����D$XA��L�\$PM��E��I��D�ʼnD$����D$XD��E��L�\$PM��I����I�ωD$���D$XA��L�\$PM��E��I��D�ʼnD$�/���D$X��D��A�\$L�\$PM��E��A��I�����D$����D$XM��E��A��L�\$PA��I�ωD$����H�|$ I��1�D�T$PL�\$0�^D�T$PL�\$0H��H�D$ Ic�H��L�E9��[�D$8<��l��L�����Ic�L�>��M��E��L�\$PE��I��A��D$0���L�\$PM��E��I��D���D$0A��D$8<�I��L�\$PM��E��I���1�M��E��L�\$PI��E���D$8<A��D$0���L�\$PM��E��I��D���D$8<A��D$0�Q��L�\$PM��E��I��D���D$8<A��D$0����L�\$PM��E��I��D���D$8<A��D$0�w��D��A�\$M��E��L�\$PI�����D$0A��D$8<�Y���t$���I�D$L�\$PM��E��H�D$XA�FI��D�ʼnD$P��D��E��L�\$PM��I����I���D$8<�D$0��M��E��L�\$PI��E���D$8<A��D$0���DH�|$ H��1�Hc�H�L$hD�D$`D�L$XL�T$8��[H�L$hD�D$`H�D$ L�,D�L$XL�T$8���A�\$D��M���o��H�D$D�l$0A��X�V���|$8"���|$HH�
��H��M�|$A�\$D�m��������A��?� E9��4A�E1��D$01���l�$��Hc4�H�>���D$H�D$0�D$����M��D���D$HA��D$0�D$����|$HM��D��A�D�D$���1�M��D���7���M��D���D$HA��D$0�D$����D$HA��D$0�D$����M��D���D$HA��D$0�D$�q��M��D���D$HA��D$0�D$����I�|$D�mM���D$H�D$0�D$����M��D���D$HA��D$0�D$�n��A�\$��I��A��D$0�D$�D$H�S��fDD�l$0L�����L��M��H+\$(A��>��E9��LE1��D$0A���l�c��Hc4�H�>��|$H�D$0�D$�����|$HM��D��A��D$0�D$����D�D$M��D��|$H�+���|$HM��D��A��D$0�D$�����|$HA��D$0�D$����|$HM��D��A��D$0�D$����|$HM��D��A��D$0�D$�-���|$HD�mI�|$M���D$0�D$�*���|$HM��D��A��D$0�D$���A�\$�|$HI����A��D$0�D$����|$HA��D$0�D$�?��A��-�%E9�����D$0A�E1���l�������Hc4�H�>��A�\$��I��A��D$0�D$�"��DI��A����D�|$0E���UA�\$��I��E1�I������L�L$PE������H�t$ H��L��D�T$�k�D�T$I��I�A�\$D;T$P�b�D$E1�D�l$PL�|$XL�L$ �D$8>�D$0��l��H�C���Hc�H�>��L�L$ E1��D$0�D$���L�d$XL�L$ �D$8>E1��l$P�D$0�D$�%��L�d$XL�L$ L��E1��l$P�D$8>�D$0�D$���D�mI�CA�>A�t$M�|$E9���I�|$��E1�L�L$ �D$�D$0�\$8@��l��H�
�@��Hc�H�>��L�d$XL�L$ �D$8>�l$P���L�|$X�l$PL���D$8>L�L$ �D$0M�g���D$���A�\$�l$PE1��D$8>L�d$XL�L$ �D$0���D$I������H�|$ H��1�D�T$0L�\$�#UD�T$0L�\$H��H�D$ Hc�H��x�|$0��t^D�mM�|$A�\$E9�����A���l����H�5̻��Hc�H�>��A�\$��I��I��A��m���I�L$M��H�L$X�MD��L$P���L��M��H+\$(E1��J��D�t$0E��t�D�mM�|$A�\$E9����A���l�X��H�5���Hc�H�>��A�\$��I��I��A������L��M��H+\$(A������\$0������I�D�AA�_I��D��E9��W���E��A���l�FH����Hc�H�>��A�_L�g�iA��Z��DA��-�~E9�����D$0A�E1���l�d���Hc4�H�>��T$0����I�L$�}M��D��H�L$X�|$P��E9�������D$E1�L�L$ �D$0�D$H��l��H�����Hc�H�>��D�mI�CA�C>A�\$M�|$E9�~lE1���l��H�57���Hc�H�>��L�L$PA��E��L��H+\$(�k��H�L$(L�L$PIc�L��H�H)�I9��D��H�|$A��3R�d��H��I��H+\$(E1��$��D�l$0E���tA�\$��I��E1�I�������\$0��t{D�mM�|$A�\$E9�������l�{��H�)���Hc�H�>��D$0���\D�mM�|$A�\$E9������D$8(��l���H�����Hc�H�>��M��D�������t$0����A�\$��I��E1�I���8��D�D$0E���FD�mM�|$A�\$E9�����D$8)��l�2�H�����Hc�H�>��L��M��H+\$(A������T$0���g���D�mM�|$A�\$E9�������l�g��H�1���Hc�H�>��I�|$A�vE��I��L�\$PH�|$XD�ʼnt$P��D�mM�|$A�\$E9��O����l����H�5����Hc�H�>��D$A�~A�\$�P�I�D$I��A9������D$0�D$8<��l��	H�
����Hc�H�>��t$0������A�_I��E1�I���D$����E9��z����D$E1�L�L$ �D$0��l�`�H�B���Hc�H�>��D�mI�CA�C>A�\$M�|$E9��J����|$0E1��|$��l�^H�5����Hc�H�>���M��D���D$8(���D�l$0E���v�|$8"I���D$H����D$0���A�\$��I��A��D$8!������M��D���D$8)��D�t$0E�������HI�A�_I���L$P��A9����A�A�̀�l��H�
����Hc�H�>��D�mI�CA�C>A�\$M�|$E9��<����|$0E1��|$��l�PH�5���Hc�H�>��I�̃l$L��I��A�����I���T$����D�D$0E����A�_D��I��I���D$A�����I��D��T$���M��D��T$����\$8�D$8!A�ʼnT$�i��I�L$�xA�\$I��A��A9���������D$HA���l�e�H�5����Hc�H�>��I���T$���M��I��D��T$���M��A����M��I��D��T$�=���T$�#���l$I��L��I������I��E1��D$���M��D��I��E1��D$����M��D��E1��D$�g��I�|$��M���W��M��D��I��E1��D$����I��E1��D$�1��M��D��I��E1��D$����M��D��I��E1��D$�q��I�����D$�"��D��I��E1��D$�F�M��I��D��T$�(��M��I��D��T$����M��I��D��T$�A��A�D$D�mM�|$�D$8E9�������D$0E1�L�L$ �D$�D$8<l���H���Hc�H�>��M��D��I�ÉT$���M��D��T$���M��D��L�؉T$���M��D��T$���M��D��t$�N��I�ÉT$���I�|$D�mM���T$�w��I�|$D�mI��M��A��,��\$8A�ʼnT$A��D$8!���D�D$�D$H���M��D��\$8���I�|$D�mM���D$8(�
��D�D$A�����L��D�D$A��M���D$���WI�D�BA�_�p�I��D��E9��G�E��A���l�H�
M���Hc�H�>��M��jI�����I��A��t$����1�I��E��A��t$����H�G����t'�l$��H��I��A�����A��t$�:����|$0�.��A�_��I��A��D$����I��A��t$�^��A��t$�!���A��t$���H��D�j�t$A���A��t$�d���A�_L�g�j�t$A��^��I��E�ʼnt$�	���|$0����I�D�BA�_I��D��E9����E��A���lwtH�
����Hc�H�>��A�_I���jA�����M��A��A����I��A����H��D�jA����A�_L�g�jA����I��E��A��O���I��D�D$�B���I�L$����uj�|$0�
���A�\$�D$I���[��I�|$�����*����|$0��A�\$E1�I��I���D$�$��M��D��I�ÉT$�,���I�̃l$L�����I��D�l$PD�D$A����I�|$D�mI��M������I��D�����A�\$��I��I�����A�\$��I��I�ÉT$����D$8(�t$�I���I�|$D�mM���t$�D$8(���A�\$��I���t$�D$8(�Z���E��L�\$PA��M��I��A��D$8<�D$0�T$�޿��I���T$�ۿ��M��D��I��E1��D$邾��A�\$��I��E1��D$I�����L�\$PM��E��I�|$M��E�nM���T$A��D$0�D$8<���L�\$PM��E��M�ĉ��D$8<A��T$�y���D��A�\$M��E��L�\$PI�����T$�D$0A��D$8<�W���M��E��L�\$PA��M���D$8<A��D$0�T$���M��D��陽��I�|$D�mM���C��L����D��L��D�t$0���E��L�\$PA��M��I��A��D$0�T$�o���L�\$PE��M��I�����D$8<A��T$齽��E��L�\$PM��I�|$E�nI�����L�\$PE��M��I�����D$8<A��D$0�T$�M���D��A�\$E��I��L�\$P���T$I���D$0A��D$8<�+���M��D���:���A�\$��I��������M��L�؉T$�D$8!A����I�|$D�m��t7�l$D��I��L���D$8!A����M���ʼnT$A��D$8!���|$0tSA�\$D��I���D$A��D$8!郾��I��E��A�����I��E������H��D�iA��X����M���D$8!�����D$H�:���I���D$HA��e����D$HA�鰿��I���D$HA��l���I��A����H�yD�h�D$HI������I�̉��D$HA�馺��A�\$�hL�a�D$HA�雽��L�|$XD�l$P�D$8>E1��D$0�D$�.���I��A��T$����L�|$XD�l$P��E1��D$8>�D$0�D$��M��D��T$餺��A�\$I��I���D$A������\$8L�L$ ��I��E1��D$0�D$閻���\$8M��L�L$ D���I��E1��D$0����M��L�L$ D��\$8E1��D$0�=���M��L�L$ @�t$8�D$0�#��M��D��\$8I��E1�鶸��M��L�L$ D��\$8I��E1��D$0�D$鼹��M��L�L$ D��\$8I��E1��D$0�D$�2���L�L$ �\$8��A��I��M���D$0�D$����M��L�L$ D��\$8I��E1��D$0�D$鷸��A�T$�\$8I��E1��D$0I��L�L$ ��饻���\$8L�L$ ��I���D$0�D$�<���M���[��M������ʼnT$A��s�A�\$��I���T$A��D$8!�@���M���ʼnT$A��D$8!隸��M���ʼnT$A��D$8!�!���I�|$�\$8D�mM���T$A��D$8!����A�\$��I���T$�Ӻ���D$HD�D$�{���I�̉�A�D�D$�D$H鏷��A�\$�hL�aD�D$A��D$H����A�D�D$����I��A�D�D$�D$H�Ƿ��I��A�D�D$�D$H�L���H�yD�hI��D�D$�D$H�Q����t$�D$8)鯻��M��D��\$8�t$�u���M��D���D$8)�t$���I�|$D�mM���t$�D$8)����M��D��t$�D$8)鿿��M��D��L�؉t$�D$8)�=���I�D$����t)�l$I��L���D$8)�@���M��D��t$�D$8)鰵���|$0�~�A�\$�D$I���D$8)�G���D�mI�CA�>A�\$M�|$E9���I�|$��E1�L�L$ �D$0�D$��lw[H�
B���Hc�H�>��M������M��D��I���D$黵��A�\$I��I��L�L$ E1��D$0�D$駸��L�L$ I��E1��D$0�I���L�L$ E1��D$0�D$����M���!��M���U���I����L�L$ L���D$0�D$����M��L�L$ D������A�\$��I��E1�L�L$ �D$0�D$����M��D��T$����M��I��D��A��[����\$8M��L�L$ D���I��E1��D$0�D$黽��M��L�L$ D��\$8E1��D$0�D$�)���M��L�L$ D��\$8I���D$0鲳��M��D��\$8I��E1��D$�=���A�T$�\$8I��I��L�L$ E1��D$0���D$�#����\$8L�L$ ��I��E1��D$0�D$鷵��I��D�D$A��D$H���E1�I�̉�D�D$�?�D$HA��h���H�Q�hE��t6�l$I��A��D$H�U���I��A�D�D$�D$H龲���|$0uc�|$8"I�̉��D$H����A�\$��I���t$�D$8)�?���I��A����I��A��D$�ٴ��M��A��´��A�\$A�I���D$�D$H���@�t$8I��E1��D$0�D$�~���@�t$8I��E1��D$0�D$�G���M��D��@�t$8I��E1��D$0�D$�
���M���\$8�D$0���M��D��I�ÉT$�۲���\$8L�L$ E1��D$�D$8!���\$8M��L�L$ D��E1��D$�D$8!�#���M��L�L$ D��L��E1��D$�D$8!镹��I�|$��M��L�L$ L���D$8!�x���M��L�L$ D��E1��D$�D$8!����L�L$ E1��D$8!�D$�D���M��L�L$ D��E1��D$�D$8!���M��L�L$ D��E1��D$�D$8!�v����\$8I����L��L�L$ �D$�D$8!����L�L$ D��E1��D$�7��A�\$��I��E1��D$L�L$ �D$8!���A�\$��I���D$8)���I�L$�������|$0�e�A�\$�D$I��鶳���D$8)�t$�b���I��D�l$PA��F���E1�I��D�l$PA��-D�D$�/���H�w��E��t(�l$��H��I��A�����D�D$A�鄯���|$0����A�_��I��A��D$����A�_L�g�hA�����I��鴱��H��D�hA�����A�D�D$�J���A�D�D$�ڰ��H��D�hD�D$A����A�D�D$銯��A�_L�g�hD�D$A�郲��L�L$ �e���M��L�L$ D��I���Q���A�\$I��I��L�L$ E1��D$0�D$�=���M��D��\$8騯��I�|$D�mM���D$8)�M���A�\$��I������A�\$��I��I�ÉT$���M��D��@�t$8I������L�L$ I��E1��D$0�D$�[���M��D��@�t$8I��E1��D$0�D$����M��D��@�t$8I��E1��D$0�D$遯��@�t$8�P���M��D��@�t$8I��E1��D$0�D$�)���A�\$@�t$8I��I��E1��D$0�D$����@�t$8I��E1��D$0�D$鯯��A�\$��I��I���T$�ܰ���D$H�D$0�D$�y���A�\$��I��A��D$0�D$闰��I���D$HA�釶��I�|$D�mI��M���T$�m��I�|$�����8��|$0�A�\$E1�I��I���D$�2���L�L$ I��E1��D$0�D$�î��M��L�L$ D��I��E1��D$0�D$��M��L�L$ D��E1��D$0�D$�d���M��L�L$ �D$0�O���M��L�L$ D��I��E1��D$0�D$�ѫ��M��L�L$ D��I��E1��D$0�D$�۬��M��L�L$ D��I��E1��D$0�D$�U���M���ջ��I�L$����tCI�̃l$L��I���ڱ��A�\$��I��E1��D$I�����I���D$饭���|$0�a��A�\$�D$I��I���Ǯ��L�L$ �D$HE1��D$0�D$�S���M��L�L$ D��E1��D$H�D$0�D$�}���M��D�����D�mI�CA�>A�\$M�|$E9��)�I�|$��E1�L�L$ �D$�D$0�D$H��l�H�
���Hc�H�>��M��L�L$ D��E1��D$H�D$0�D$����L�L$ �D$HE1��D$0�D$�X���M��L�L$ D��E1��D$H�D$0�D$���M��L�L$ D��E1��D$H�D$0�D$�t���I����L�L$ L���D$H�D$0�D$�
���M��L�L$ D��E1��D$H�D$0�D$���A�\$��I��E1�L�L$ �D$0�D$�D$H�ج��L�L$ �D$HE1��D$0�D$�m���L�L$ �D$HI��E1��D$0�D$�<���M��L�L$ D��I���D$HE1��D$0�D$�c���M��D��I���Ҭ��M��L�L$ �D$H�D$0�͸��M��L�L$ D��I���D$HE1��D$0�D$�G���L�L$ �D$HI��E1��D$0�D$�}���M��L�L$ D��I���D$HE1��D$0�D$�!���M��L�L$ D��I���D$HE1��D$0�D$铩��L�L$ �D$H�Z�M��L�L$ D��I���D$HE1��D$0�D$�+���A�\$I��I��L�L$ E1��D$0�D$�D$H����L�L$ �D$HI��E1��D$0�D$顩��M��E��L�\$PA��M��A��D$8<�D$0�T$�k���L�\$PM��E��A��M��D��T$A��D$0�D$8<鐰��L�\$PM��E��A��M��H�D$D��T$�D$0H���D$8<H�D$P����D��L�\$PM��E������I�����l$L���D$0A��D$8<�Ԭ��I���D$8<M��A����D$0�T$�S���M��L�\$PA��E��M���0���L�\$PM��E��M�ĉ��D$8<A��D$0�T$�§��M��E��L�\$PA��M��A��D$0�T$�(���I�D$��M��H�D$XA�F�D$P�ʴ��M��D��t$�D$8(隥���t$�D$8(���M��D��t$�D$8(騦��M��D��\$8�t$�<���A�\$��I���D$8(����M��D��I��E1��D$����M��D��I��E1��̥��A�\$��I��E1��D$I�����E��L�\$PA��M��I���D$8<A��D$0�T$�N����|$0�˳��A�_��I��A��D$�l���I��A���M��I��D��A��d���A�\$��I���T$�4���M��D��T$阥��M��D��T$�0���L�\$PA��E��M��I���W���L�\$PA��E��M��I���q���D��L�\$PE����uI�t$A�NM�ĉ�H�t$X�L$P�W��I�����l$L��I���D$0A��D$8<�T����t$�D$8(鉦��M��D��t$�D$8(�y���M��D��L�؉t$�D$8(���I�D$����t�l$I��L���D$8(����|$0����A�\$�D$I���D$8(������AVAUATUH��SH�� dH�%(H�D$1�H�D$��t/�����q�H�D$dH3%(��H�� []A\A]A^�H�t$�1�E1��<�E1����L�d$I�$�{t"�{u�C����H���CH�D$H��sH�;�/E1�E��L��H��H�D$1�H��H��p�s���H�]�E�E�R���1�H�T$H�t$������tEL�d$I�$�{t"�{u�C����H���,CH�D$H�L�+D�s�8�����EH�E���������C�x+I�$H�D$�oH�H�SH�PH�D$H�8�w'�GH��BH��{����������c�H�D$H�8��f�����C�+I�$H�D$�oH�H�SH�PH�D$H�8�v
��H�D$H�8�GH��BH��{���������F�D��E1���@��AVAUATUSH�� dH�%(H�D$1����?H��1�H�T$�H�t$������L�d$I�$�{�2�{t�C���@I�$H���AL�d$I�$�{t"�{u�C���sH���;H�D$H�H�3H����H�D$H�Hcx���sH����I���L���i*H�\$I��H�HcP���iH�0L��O�t%�>�H�HcHL�L9�s1f�H��L��H��L��H)�L)�H9�HO�Hc�H���lQ�H��H�I9�w�A�D�eL�m�E�����H�D$dH3%(�!H�� []A\A]A^�f��C��w8�{��������f��EH�=��+�EH�E�����C�(I�$H�D$�oH�H�SL�d$H�PI�<$��R�GI�$�@I�$�{�Q����{�?����*���fD�E1�H�=\��+�EH�E����fDH�T$H�L��O�t%H��0H��5�����DH����1�1��[l����fD����C��'I�$H�D$�oH�H�SH�PH�D$H�8����GH��BH��{�t����g�������C�p'I�$H�D$�oH�H�SH�PH�D$H�8�w/�GH��BH��>�����k�L�d$I�<$���D�S�H�D$H�8��f��;�H�D$H�8�K�����B�f���AWAVAUATUSH��8dH�%(H��$(1��G����I��1�H�T$��H�t$�V������L�l$I�m�}t�}u�E����H����=����H�l$H�]�{t"�{u�C���RH����7H�D$H�L�+E��A���
A�E�L�l$ ���D$H�D$L��H��pH�1��H���~�F�H�LfD�H���D� H9�u�A����1�1�L�=��f.�A����D��Ic�L�>��f��K�H��$(dH3%(��H��8[]A\A]A^A_�H�D$L�l$ ���D$����L��E1�H��pH�1��H����A���L���W��]���f�A�T���tHc��� f.�H��H���?����|$�Y���A�l$H��$ ���'A�D$I�$�6����IcT�H��L����fDA�L���u�1�H��L���r��IcT���t���DA�D����s����W�������E�^$I�EH�D$�oEH�H�UH�PH�D$H�8����GH��BH�(�}��������H�1�1�1��khA�D$I�$�]�������C��#H�EH�D$�oH�H�SH�PH�D$H�8�v
��H�D$H�8�GH��BH��R����ǵH�D$H�8�J����e?�D��H�V1��Q�����AUATUSH��dH�%(H�D$x1�����H���*#��@�@H�$�#H���@�@H�D$�)�H�<$� �H�|$��H�|$���L�d$ L���?.�~-D�h�1��L�d$ H��I�H�<$H���H�CI9�u�L�d$HL���.�~0D�h�1��
DL�d$HH��I�H�|$H���F�H�CL9�u�H�L$A��H��H�5�/�^�H�L$H��A��H�5�/�?�H�L$(H��A��H�5�/� �H�L$0H��A��H�5y/��H�L$8H��A��H�5j/���H�L$@H��A��H�5]/���H�L$PH��A��H�5P/��H�L$XH��A��H�5?/��H�L$`�H��H�53/��H�L$a�H��H�5/���H�L$b�H��H�5/���H�L$c�H��H�5/��H�L$d�H��H�5�.��H�L$e�H��H�5�.�y�H�L$f�H��H�5�.�_�H�L$g�H��H�5�.�E�H��H��E1�jH�}A��	H�5�.�^nXZH�5�.H�L$H��E1�A�jH�}�
�3nY^H�D$xdH3%(�H�Ĉ[]A\A]��������;�ff.����H�V�����ff.���AWAVAUATUSH��hH�t$(dH�%(H�D$X1��G�����1�H�L$HH�T$@��H�t$8L�D$P�P������L�d$8I�$�{t�{u�C����H����6L�d$@I�$�{t"�{u�C���5H���6H�D$@H��C����H�T$8H�L�LcbK� H�L$����L�l$HI�]�{t,�{u�C���H��L�D$�0H�D$HL�D$H�H�H���H����H�D$8H���H�Hc@H9���Iȃ��3H�D$@I)�H��CL��L�+���.Lc�C�|%�I�t$�H�t$@�|$L9����H�l$1�H�H�D$ L)�f�I9�wEE�u�!@H�D$�L$A8��M�GI9�wH��D��L��L)�H���9�I��H��u�Hc�H�D$(�@H��
D��H�D$XdH3%(�uH��h[]A\A]A^A_��H��+�1��aH�D$(�@H��H�T$ L��L���(��T���H�D$O�'��L)�L9������]���A�m1�����L�@H�T$��L��L)���8�H��u��'���D����C�I�$H�D$@�oH�H�SH�PH�D$@H�8����GH��BH��{�s����C���������������C�I�$H�D$8�oH�H�SH�PH�D$8H�8�wG�GH��BH��{���L�d$@I�$�{�������@1��F���f��[�H�D$8H�8몐�K�H�D$@H�8�3���H���1��1��R`H�D$(�@H�����D���L�D$�C�L�D$I�EH�D$H�oH�H�SH�PH�D$HH�8�v�H�D$HL�D$H�8�GH��BH��}���DH�l$PH�]�{t,�{u�C����H��L�D$��,H�D$PL�D$H�H�H������H�D$8H�T$HH�H�Hc@H+H9�I�H�D$H�D$@H��C�b���H��D1��1��2_H�D$(�@H�������L�D$�C�L�D$H�EH�D$P�oH�H�SH�PH�D$PH�8�v襬H�D$PL�D$H�8�GH��BH������-6�ff.�f���AWAVAUATUSH��HdH�%(H�D$81��G�����H��1�H�L$(A��H�T$ H�t$L�D$0�������L�d$I�$�{t�{u�C���7H���1L�d$ I�$�{tl�{uV�C��vN����C�I�$H�D$ �oH�H�SH�PH�D$ H�8��E�GH��BH�H���*H�D$ H�H�D$H�H�A�׋HA)�E��~sH��~nA����H�\$(L�#A�|$t&A�|$uA�D$���L���N0H�D$(L� A�\$���YM�$$A���H�D$H��H��oD�e�]EH�@H��H�EH�� ��wDD�e�]H�D$8dH3%(��H��H[]A\A]A^A_�f.�����f�H���x��fD�L�%l�B�|9Hc��L�t$I��I�L��HcPH�0�
-�I�E���xHc�E�F�1�L��	fDH���ș��Hc�A��H�AL9�u�D�Hclj}A�DL�m�E�+����L�t$0M�.A�}t$A�}u
A�E���AL���5)H�D$0L�(I�UA�փ��H�D$H�T$H��xD���Hc��?H�T$I�Ń��]��t)��t3H�\$L��H�HcPH�0�,�H��x�B���D��E���A)�A��E���A�w�1���H���ș��Hc�A�A�D
H�AH9�u�Ic�L�H�L$H�H�L$HcPH�0�+�H�L$H��xD�E����������������C�pI�$H�D$�oH�H�SH�PH�D$H�8�wO�GH��BH��{�u���L�d$ I�$�{�y������@�K�H�D$ H�8���fD�3�H�D$H�8�f����A�D$��H�H�D$(�Ao$H�I�T$H�PH�D$(H�8�v
�ާH�D$(H�8�GH��BL� A�|$��������@H�Ѧ�1�1���Y����H�צ�1�1��Y������A�E�+I�H�D$0�AoeH� I�UH�PH�D$0H�8�v
�<�H�D$0H�8�GH��BL�(�a���L�������0�E��H��E1�������AUATUSH��H�t$������1�Hc���S��H��H���&������H�L� A�|$tA�|$uA�D$����L���+H�CL� A�|$t%A�|$uA�D$����L���+H�CL� H�I�4$��L�L$A�H��H�H�8�;H�߉��!���tH��[]A\A]ÐH�����H��[]A\A]�����A�D$L�+�I�EH��Ao$H�I�T$H�PH�H�8����GH�H��@H�L� A�|$����H�CL� A�|$�����'���@���A�D$L�k�*I�EH�C�Ao$H�I�T$H�PH�CH�8�w0�GH�CH��@H�CL� A�|$��������fD��H�CH�8��f��H�H�8�1�����AUATUSH��dH�%(H�D$1�����H��1�H���7����L�$$I�,$�}t!�}u�E����H���)H�$H�(�oED�kD�cH�EH��H�CH�� ��wK�sH�;D�kA�4D�cH�
�@H�I�@�4=���f���H�D$dH3%(uH��[]A\A]�H�����fD����E�I�$H�$�oMH�H�UH�PH�$H�8�v�ãH�$H�8�GH��BH�(�}�!����
����G-����AUATUSH��dH�%(H�D$1�����H��1�H���������L�$$I�$�{t!�{u�C����H���W(H�$H��oD�mD�eUH�CH��H�EH�� ����Hc]D�mD�e��~kH�mH��fD�s���f��f��H*��Y
���H*��Xɒ�Y��H,�H9�tH��T��L�H��u��f.���H�D$dH3%(u~H��[]A\A]�H���X��\�������C�I�$H�$�oH�H�SH�PH�$H�8�v��H�$H�8�GH��BH��{��������+����AWAVAUATI��H�5��USH��HdH�%(H��$81�H�L$H�T$H��H�D$(H�D$0H�D$P1�L�L$0L�D$8�g8Y^�����H�L$(H�����H����L���6��T$����L�|$ M����H�l$0� 1�H���H�HcL$M�,M9��"L����{.�/�D0M9��EL��H�S�L�sI9�w�<.u�M9�vր{.u�I9���H�CI9��
�C8C���H�ԛ�1�1��R�L�|$Hcl$A�L�<'��<-���}�-� H�t$(L9��eH�t$E1���(�H�t$I��fDI�H�|$ L��D�H��DQuH��t�|0u<'t<-u�H��H9�r�L9�v"H����H����A��f.�L�{I9�r�H��uMc�A�D$M�,$DH��$8dH3%(�
H��H[]A\A]A^A_��H���1�1��QA�D$I�$뫋D$������A�D$I�$��H��L��L)���H�L$��H�L$L��E1�H+t$H��L���H�H�t$(�.���fDH��L��L)���H�T$�H�T$1�L��H���Q�H�t$(����{.��L�sM9������<.���������L�|$Hcl$A�L�<'t <-����H�|$ t�|$]uI������H�|$ t�|$Wt�}�-���|$]���H�����H�|$ u����S8��n�����H�|L�s)���Hc�������H���1�1��#P����E1�����L�|$Hcl$A�L�<'�V���<-�G����U���H����1�1���O���H����1�1��O����7'����AUI��H�5��ATUSH��(dH�%(H�D$1�H�L$H�T$�D$L�D$�,4�����Hcl$H�|$1�I��H��H��%H)��&�H��t#�x%H�xt����H�x���fDA��Mc�L���
�D$H�T$L��H��H�Ÿ�(,�H�Å�xiH��s1�H���DHc��
A�]I�EA�EH�D$dH3%(uLH��([]A\A]�f�H����1�1��NA�EI�E�@H���0
A�EI�E���%�ff.����ATI��H�5��USH�� dH�%(H�D$1�H�L$H�T$H�D$L�D$��2�����H�|$��L����HcL$H�t$H��H9���H��f�H�\$H�H���H*��,��h�����D��H��L�����H�t$��H�u�H�T$HcL$H�H9�tH)ڹH��L����H�D$dH3%(uQH�� []A\�H�ٚ�1�1��;MA�D$I�$��H�t$�L���f��@H������$���USH��H�5��H��(dH�%(H�D$1�H��H�T$L�L$L�D$�1���tU�D$��t8H�l$H�t$H���4�H��t6Hc4$H��H�H)Ɖs�
�CH��#H�A��1�1��kL�CH�H�D$dH3%(uH��([]���#�@��U��SH��H�59H��HdH�%(H�D$81�H�L$�D$H�T$H�D$0H��H�D$PH�D$@PH�D$@P1�L�L$4L�D$@�0H�� �������~H�|$0H���~qHcD$H�|$(H��H����H���H9�OL�D$0H)�L9�|;�L$)�M��u
Hc�A��H9�DL�H|$�|$�CH�T$ un�ypH�H��"f�H����1�1��;K�CH�H�D$8dH3%(u<H��H[]�f�HǺHH�H�|$(�V���f.���pH�H���_"�f.�D��AWAVAUA��ATUSH��H�|$HH�T$@dH�%(H��$�1����
H�D$`�D$H�D$H�ŋ|$H��W�H�T�fD�H��H9�u�H�D$H�D$$L�|$HH�D$(H�D$X�D$�D$�D$ H�D$0A�?�eI�_H�\$H�{�%��M�wL�t$HM�gA��%���F �H��H�A��*��B�Db���T$ ����D$H�E1��H��DJ��ƒ�߀�Lt<huH�\$HH�CH�D$HE��uE��tD9l$����J���4�kH��/��H��H��ua���IH�T$H�:��H�BH�D$H�
��^�J���]�]����H���H���x���H�D$H�x�]u�E��u"�|$9|$�tHcD$H�ƃD����t$L�|$HA�?�����E��u�D$$D�l$��DE�H�D$@H��tD�(E��~G�E����D$$�%H�EA�U��t$$H�������~H��	���H9�u�1�H;l$��f�I�������H�D$HH�t$(�
H�x����H�\$HH�CH�D$H��S���f�H�t$0�
H��H�D$8��H�T$XH�L$8�:$������t$H�ZH��H�T$H����ƃ��t$��E��t	A9���E����=����t$$H��D$�D$ 9�M�E1�D$$���@M���(����H�"��1�1��+G�����H;l$tH����H��$�dH3<%(����H�ĸ[]A\A]A^A_�@I��L��A�L�|$H�!�����zt�H�BH�D$H�J���]��������i���H�HH�L$H�8]������PH���}���Hc�1ҿ��D�l$H��H�D$`H�D$���f��D$�X�D$$��E�Hc�H;l$��H�4�1�H��� H��HcD$9�}@�D�H��9��\$�3���H�E1��D$ �D����ʾ1�1�H�����E���H�
��H�*��1�1��E���H�
���H�
.���1Ҿ��H�L$H��1�fD��TH��H��@u��E����D$ ��u�H���1�1��UE�%���H�i��1�1��;E��������AWAVA��AUATM��USH��H��H�|$H�t$hdH�%(H��$�1��D$t����A9��TD��E���HE��H�|$hH�T$tA)��BD��������E���8D9�}@Hc�H��H��x���EH��f�H��H��H��z�k��A9��H��$�L�\$�l$@H�D$ H��$�L�l$hH�D$(�D$�D$�D$H�D$0�l$DH�\$8L��A�}tCI�mH�l$h�]�I�uI��H��Dp ��@��%�
�����A:E��E���OH��$�dH34%(D���H��[]A\A]A^A_�����fD1�������JI�<$1�E1��#��D$t����fD��9l$t�����1�f�xI�<$H���@� ����u�I�<$A�����K���f.�H�H��DH t���"���H��H�H��DH u�I�����I�UH�T$hA�U��%�y��*�����D$HE1�Dp�g�Ѓ��<Lt��huH�D$hH�PH�T$h��B�<4�-H�
n���Hc�H�>��;������T$���|���I�<$E�����GI�$H�����A��H��^���DH��L�l$h������1�H����1���AI�$A������@I�$H���������DI�U�D$HH�T$hA�M�HH��f%E1�f������H�D$h�
H�t$hL�D$PH�x��N�L�D$PI��H�D$hH�PH�T$h�����H��9>�L$H�D$
H�D$(�D$if�H������I���H��H��������DB u��D$��[<��H�֑��Hc�H�>��DI�C�D�l$H�|$Ƅ$�H��?�?H���
LC�H�D$ A��pH�D$x�J�D��+<M�M��Hc�H�>���I�C��T$HƄ$�H�
�H��?�?LC�H�D$ ��0H�D$x�J�4��+<:�
��Hc�H�>��L$H�;����L�L$hH�\$xf�M��H�����)�$�A�	LD�)�$�M�A��^uDŽ$�I�AA�IM��I��A�QL����]uI�A��]��	��A�Q1��������-��H����̀�]u�L)�1ҿL�\$XH�p�L�D$PE1�L�L$���L�L$L�D$PH��H��$�L�\$Xt=Hc�1ҿL�D$`L�\$PH�D$X�v�L�D$`H�L$XH��$�L�\$PI��L�L$E�A��]��A��-����$�L��D��M���D$1��D$P�8L�H@��-����-��Hc��D$I�����9L��A���]uɀ|$P����$��|$����$�H��$�L��$�L�L$xH�D$h�~��E�D��$�M�DEH�M�f�A���th��~%:�H����H��:�H9�u��~!L���:|	:P��H��I9�u�E��tI��L�L$xM9�u��H���M��tL���{�H�D$xH9�����D$H�RE����D;t$@���D$[f��D$L�l$h�_�����% =u3�������0H�D$xH��H�xH�|$x�{�@�8���t
H9������� t+������H�D$xH�H�H�L$x�H���߀�E�5H�����w���H�D$xH�|$ 1���#L	E��tD;t$@�S���Hct$@H���D$@E����H�D$8H�,�H�}�v�D$H蝉H�}�D$H�GH�E�������
~5H�D$xA��OL�@H��L�D$xD�C�D����tH9��������|$A�� ���H�T$x�B����<Xu
H��H��H�T$xA�������H�D$x�T$1�H�|$ H�L$(�1���E��A��D;t$@��A!�A��D��t���K@���K���Hct$@Hc�H���L$@E����H�D$8L�,�I�}�v	蘈I�}�GI�EH�(����@E1�1�����fDI�<$E1��I�$HcT$H�����A��������I���[�����
H�t$xH��L�D$P���H�T$xL�D$P�:$��A�MI��HH��f%�G���������������������x��������������g����������3����c�����H�D$xD�A��O�!���A���C���A���H�D$x�	���������u	A�̀�E��E��H�D$xA��A��OA��@ED�E������A�ŀ��H�D$0H9D$x���A�������d$HH�����M��LD�H�\$xH��J�4�I��DA uH��H�T$xH9�tH���u�L$H����E��tD;t$@�<���Hct$@H���D$@E����H�D$8H�,�H�}�D�ov	舆H�}H�t$xH)މwH�MH��H�L$H��H�L$HH�H�E�@H�ED�hH�E�@H�\$x���H�G2>�T$�D$H�D$(����D$f����H� 2>�D$
�D$iH�D$(����T$���H��1>�D$�D$iH�D$(����t$H���F���E���?D;t$@�4H����r����|$�+���I�<$�[���f�M�۸LD؀;�+����D$s�h���H�z1>�D$�D$iH�D$(�����t$DH�JH�L$h�J�D��D$@I�H���Hf%���I�<$A��������T�E���"����2���f�A��I���-L������D@��]��Hc�I�TUD8���D��8@�z��H��M���D$P�
���Hct$@H���L$@E����H�L$8H�,�H�}�v��H�D$xH�}H)؉GH��L�mH����I�EH�E�@H�D$xH�����Hc��V�D$��D�9A�8Hc�I��L��@�<�~���@�:D�R�Q���D�A�QI�ADŽ$���]tn�������$��[����
�[���A�̀�h���H��H��H�D$x�����$��<���E�������I�$A������@I�$H��������1�����Hct$@H��H+l$H���D$@E��tFH�D$8L�,�I�}��Ov�L$H�C�I�}�L$H�GI�uH�.I�U�JI�E�@���I�<$H�������1Ҿ�E1�L�D$XL�\$PL�L$�8�L�L$L�\$PH��H��$�L�D$X����H)�I�<$A�H�ډ����H�D$x�X���H�L$xI�<$A�H��H)����A���H�|$ ���@1�H��:�]@�����Hct$@H���D$@E����H�D$8H�,�H�}�v	�6�H�}H�T$ �
H����������!�%����t������D�H�rHD։�@�H��H+T$ �WL�mA�u��xFH�|$ �J�I�EH�E�@�I���I�<$�P��;���H�T$ I�<$�����#�����H�5�c�1�苐L�mA�u띐U�SH��(dH�%(H�D$1�H�l$���H��`�H��
�@H�5��H�H���H�D$�X���)H�T$H�D$H�
�y��H�L$H���@A��@H���E1ɺ
jH�5<��S=_AX��V�H��
H�5%��@H���H�H�D$�W����H�T$H�D$H�
�y�H�L$H���@H�5ֆ�@E1�A��
jH�����<Y^����H��	H�5���@H���H�H�D$�nW���NH�T$H�D$H�
�y��H�L$H���@E1��@�	A�H�5>�jH����8<XZ��<�H��H�5��@H���H�H�D$��V����H�T$H�D$H�
�y��H�L$H���@E1��@A��H�5��jH����;A[X���H��H�5���@H���H�H�D$�SV����H�T$H�D$H�
�y��H�L$H���@E1��@A��H�54�jH����;AYAZ���H��H�5��@H���H�H�D$��U����H�T$H�D$H�
�y��H�L$H���@A��@H���E1ɺjH�5���:_AX���H��	H�5���@H���H�H�D$�6U����H�T$H�D$H�
�y��H�L$H���@H�5C��@E1�A��	jH����:Y^���H��
H�5��@H���H�H�D$�T���YH�T$H�D$H�
�y�H�L$H���@E1��@�
A�H�5��jH����s9XZ��w�H��	H�5���@H���H�H�D$�T����H�T$H�D$H�
�y��H�L$H���@E1��@A��	H�5'�jH�����8A[X����H��	H�5��@H���H�H�D$�S���.H�T$H�D$H�
�y�'H�L$H���@E1��@A��	H�5��jH����X8AYAZ��Z�H��	H�5���@H���H�H�D$�R���OH�T$H�D$H�
�y�H�L$H���@A��@H���E1ɺ	jH�5���7_AX����H��H�5���@H���H�H�D$�qR����H�T$H�D$H�
�y��H�L$H���@H�5���@E1�A��jH����;7Y^��?�H��	H�5y��@H���H� H�D$��Q���TH�T$H�D$H�
�y��
H�L$H���@E1��@�	A�H�5�jH����6XZ���H��H�5���@H���H�(H�D$�WQ����H�T$H�D$H�
�y�H�L$H���@E1��@A��H�5��jH����!6A[X��$�H��H�5r��@H���H�0H�D$��P����H�T$H�D$H�
�y�H�L$H���@E1��@A��H�5�jH����5AYAZ���H��	H�5��@H���H�8H�D$�:P���:H�T$H�D$H�
�y��H�L$H���@A��@H���E1ɺ	jH�5~�5_AX���H��	H�5f�@H���H�@H�D$�O����H�T$H�D$H�
�y��H�L$H���@H�5�@E1�A��	jH����v4Y^��z�H��	H�5�~�@H���H�HH�D$�O����H�T$H�D$H�
�y��
H�L$H���@E1��@�	A�H�5~~jH�����3XZ����H��
H�5^~�@H���H�PH�D$�N����H�T$H�D$H�
�y��	H�L$H���@E1��@A��
H�5�}jH����\3A[X��_�H��H�5�}�@H���H��H�D$�N���DH�T$H�D$H�
�y��
H�L$H���@E1��@A��H�5y}jH�����2AYAZ����H��H�5Y}�@H���H��H�D$�uM����H�T$H�D$H�
�y��	H�L$H���@A��@H���E1ɺjH�5�|�?2_AX��B�H��H�5�|�@H���H��H�D$��L���GH�T$H�D$H�
�y��
H�L$H���@H�5�|�@E1�A��jH����1Y^���H��H�5T|�@H���H��H�D$�ZL���j
H�T$H�D$H�
�y��H�L$H���@E1��@�A�H�5�{jH����$1XZ��(�H��H�5�{�@H���H��H�D$��K����H�T$H�D$H�
�y��H�L$H���@E1��@A��H�5n{jH����0A[X���H��H�5O{�@H���H��H�D$�?K���oH�T$H�D$H�
�y��H�L$H���@E1��@A��H�5�zjH����	0AYAZ���H��H�5�z�@H���H��H�D$�J����H�T$H�D$H�
�y�	H�L$H���@A��@H���E1ɺjH�5^z�z/_AX��}�H��H�5Hz�@H���H��H�D$�"J����H�T$H�D$H�
�y�H�L$H���@H�5�y�@E1�A��jH�����.Y^����H��H�5�y�@H���H�H�D$�I���UH�T$H�D$H�
�y��H�L$H���@E1��@�A�H�5byjH����_.XZ��c�H��	H�5Ay�@H���H�H�D$�I����
H�T$H�D$H�
�y��H�L$H���@E1��@A��	H�5�xjH�����-A[X����H��H�5�x�@H���H�H�D$�zH���Z
H�T$H�D$H�
�y��H�L$H���@E1��@A��H�5XxjH����D-AYAZ��F�H��H�58x�@H���H�H�D$��G���{	H�T$H�D$H�
�y��H�L$H���@A��@H���E1ɺjH�5�w�,_AX���H��H�5�w�@H���H�H�D$�]G����H�T$H�D$H�
�y�&H�L$H���@H�5fw�@E1�A��jH����',Y^��+�H��H�53w�@H���H� H�D$��F���P	H�T$H�D$H�
�yueH�L$H���@E1��@�A�H�5�vjH����+XZH�@ܔǀ\
H�D$dH3%(�^
H��([]ËI�@�HH�:��)
�oH�@H�GH�|$���fD�I�@�HH�:����o8?H�@H�GH�|$�H������I�@�HH�:��y�o07H�@H�GH�|$�������I�@�HH�:��!�o07H�@H�GH�|$��������I�@�HH�:����o07H�@H�GH�|$���9����I�@�HH�:��q�o07H�@H�GH�|$�h��%��I�@�HH�:���oH�@H�GH�|$�0������I�@�HH�:���
�oH�@H�GH�|$������I�@�HH�:��i
�oH�@H�GH�|$���"����I�@�HH�:��
�oH�@H�GH�|$���
��I�@�HH�:���	�o 'H�@H�GH�|$�P��<����I�@�HH�:��a	�o 'H�@H�GH�|$���'��I�@�HH�:��		�o 'H�@H�GH�|$����_����I�@�HH�:����o 'H�@H�GH�|$���J��I�@�HH�:��Y�oH�@H�GH�|$�p��&����I�@�HH�:���oH�@H�GH�|$�8����I�@�HH�:����oH�@H�GH�|$���G��I�@�HH�:��Q�oH�@H�GH�|$����3��I�@�HH�:����o(/H�@H�GH�|$�������I�@�HH�:����o(/H�@H�GH�|$�X����I�@�HH�:��I�o(/H�@H�GH�|$� ��,����I�@�HH�:����o(/H�@H�GH�|$������I�@�HH�:����oH�@H�GH�|$�����I�@�HH�:��A�oH�@H�GH�|$�x�����I�@�HH�:����oH�@H�GH�|$�@����I�@�HH�:����oH�@H�GH�|$�����I�@�HH�:��9�oH�@H�GH�|$����.����I�@�HH�:����oH�@H�GH�|$�����I�@�HH�:����oH�@H�GH�|$�`��Q��I�@�HH�:��1�oH�@H�GH�|$�(��;��I�@�HH�:����o8?H�@H�GH�|$������I�@�HH�:����o8?H�@H�GH�|$�����I�@�HH�:��1�o8?H�@H�GH�|$���:�H�D$��fDH�D$�q�fDH�D$�@�fDH�D$��fDH�D$�=�fDH�D$��fDH�D$���fDH�D$�+�fDH�D$���fDH�D$�(�fDH�D$�0���fDH�D$���fDH�D$���fDH�D$�A�fDH�D$��fDH�D$��fDH�D$���fDH�D$����fDH�D$���fDH�D$�4�fDH�D$�)�fDH�D$��fDH�D$�\�fDH�D$��fDH�D$�V�fDH�D$��fDH�D$���fDH�D$��fDH�D$���fDH�D$��fDH�D$��fDH�D$�\�fDH�D$��fD�eH�T$H�D$H�:�����eH�T$H�D$H�:�h���f��keH�T$H�D$H�:����f��KeH�T$H�D$H�:���f��+eH�T$H�D$H�:�`���f��eH�T$H�D$H�:����f���dH�T$H�D$H�:���f���dH�T$H�D$H�:�X���f��dH�T$H�D$H�:����f��dH�T$H�D$H�:���f��kdH�T$H�D$H�:�P���f��KdH�T$H�D$H�:���f��+dH�T$H�D$H�:���f��dH�T$H�D$H�:�H���f���cH�T$H�D$H�:��f���cH�T$H�D$H�:���f��cH�T$H�D$H�:�@���f��cH�T$H�D$H�:���f��kcH�T$H�D$H�:���f��KcH�T$H�D$H�:�8���f��+cH�T$H�D$H�:���f��cH�T$H�D$H�:���f���bH�T$H�D$H�:�0���f���bH�T$H�D$H�:����f��bH�T$H�D$H�:���f��bH�T$H�D$H�:�(���f��kbH�T$H�D$H�:���f��KbH�T$H�D$H�:�x�f��+bH�T$H�D$H�:� �f��bH�T$H�D$H�:���f���aH�T$H�D$H�:�p�f���aH�T$H�D$H�:��f��aH�T$H�D$H�:�����@��SA���1ҹ�
H�=�g��A�ع��
H�=�g�A�ع��	H�=�g�A�ع��H�=�g�tA�ع��H�=�g�VA�ع��H�=rg�8A�ع��	H�=_g�A�ع��
H�=Jg�~A��1ҹ�	H�=9g��~A�ع��	H�=$g��~A�ع��	H�=g�~A�ع��H�=�f�~A�ع� �	H�=�f�i~A�ع�(�H�=�f�K~A�ع�0�H�=�f�-~A�ع�8�	H�=�f�~A�ع�@�	H�=�f��}A�ع�H�	H�=f��}A�ع�P�
H�=jf�}A�ع���H�=Yf�}A�ع���H�=Ff�y}A�ع���H�=3f�[}A�ع���H�= f�=}A�ع���H�=
f�}A�ع���H�=�e�}A�ع���H�=�e��|A�ع���H�=�e��|A�ع��H�=�e�|A�ع��	H�=�e�|A�ع��H�=�e�k|A�ع��H�=�e�M|A�ع��H�=pe�/|A�ع� �H�=]e�|H�@ܔHǀ`
1�[�ff.���H��1ҾH�=pa��H��u(H�@ܔǀ\
Hǀ`
1�H���D����H�@ܔ��f.���SH��@ܔH��`
H��t���Hǃ`
1�[�@����u H�@ܔ��\
��t�fD�[���#���USH��H�5�H��8dH�%(H�D$(1�H�L$H�T$L�L$ L�D$�S����tHH��@ܔH��`
H��t����t$H�|$���T$ �t$H��H��`
�A���CH�H�D$(dH3%(uH��8[]����f.�����uHUSH��H�����H��@ܔH��`
H��t�b��HDž`
�CH�H��[]�D��ff.���SH��H�5��H�� dH�%(H�D$1�H�L$H�T$L�D$�I����t'H�L$�|$�1�H����8���CH�H�D$dH3%(uH�� [�����f�ATUH��SH��H��dH�%(H�D$1���uM1�H��A���[����t6H�$H�8�GD9�����t]�����EH��'�H�{b�1�1��
�EH�H�D$dH3%(ukH��[]A\��H�GH���t���H�=>bH�p������z���fD�EH��H�?�pNH���S����������SH��dH�%(H�D$1���uBH��1�H���P����t+H�$H��zw>�BH�
�aHc�H�>��f���H�D$dH3%(�{H��[Ð�C�H�=�a���CH�����C�H�=�����CH���H�:�MH��t��C�H�=>���CH��d�����C�H�=���CH��9���@�C�H�=��X��CH�����@�C�H�=W�0��CH����@�C�H�=����CH����@�C�H�=J�����CH����@�C�H�=�V���CH��q���������ATUSH�� dH�%(H�D$1����{H��1�H�T$�H�t$�B�����YL�d$I�$�{t"�{u�C����H����H�D$H�H�H�5�H�������6H�5�H�������H�5�H��������(H�5�UH��������H�5��H�������rH�5�H��������H�5�UH��������H�58UH���u����oH�5�H���^����XH�5�TH���G�����H�5�H���0����NH��^�1��	�EH�E���ۀH�D$dH3%(�EH�� []A\�fDH�D$H�8���EH�E��DH�D$H�8����f�����C��I�$H�D$�oH�H�SH�PH�D$H�8�wG�GH��BH��{�$��������H�D$H�8��c������Y���@�{VH�D$H�8몐H�D$H�8�C��3���H�D$H�8���!���H�D$H�8������H�T]�1�1��U�EH�E���H�D$H�8���������ff.�f���AUATUSH��H��(dH�%(H�D$1���������1�H�T$H�t$��'~�����L�d$I�,$�}t"�}u�E����H����H�D$H�(�mH�D$D�kD�cH��oH�@H��H�CH�� ��vH���6UD�k��H��D�c��H�D$dH3%(��H��([]A\A]�DH�t$�1��
�j}����w�����[~�f�����E��I�$H�D$�oMH�H�UH�PH�D$H�8�v
�TH�D$H�8�GH��BH�(������ff.���ATUSH��dH�%(H�D$1���u_H��1�H���|���tHH�$D�c�kH��oH�@H��H�CH�� ��vH���SD�cH�߉k���
D�[}H�D$dH3%(u	H��[]A\��m��ff.�f���ATUSH��0dH�%(H�D$(1���uwH��1�H�t$��{���t^H�D$H�T$H�t$H�8�g�D$��ugH�D$D�c�kH��oH�@H��H�CH�� ��vH���$SD�c�k��|H�D$(dH3%(u4H��0[]A\�f.��S�CfoD$H�L$ H�K�S�C��z��f.���H�V1�������H�V����ff.���H�V��n���ff.���H�V��N���ff.���H�V��.���ff.���H�V�����ff.���H�V����ff.���H�V�����ff.���SH��dH�%(H�D$1�����H��1�H���z�����H�$H��B����<�<���J����H���r�@������ ������r�H����@��H���1D�F�A��	��@��.uX�q�VЀ�	wLH��A�A�
@E1�H��A)ȍN�E���	��A����A��
��Hc�H�H9�tX�CH���+zH�D$dH3%(�%H��[Ð�4DH�����)ǍJ���v� t��+����CH����~��0tBA�
@��0uf�H���1@��0t�E1��3�����ߍN����Q���@H���2�����PA�
��߀�Xu��qA�H���@��.t���@��EuA��u&Hc�H�����E��u��rH�JA�E�����D�BH�JA�pՁ�u�rD�^�A��	vH���A�p�@��	w�D��A�����H�JA��.u�A��ff.���SH��dH�%(H�D$1���uBH��1�H���w���t+H�$H��H�C��w7�H��Nt+H��f��kxH�D$dH3%(uH��[�DH����r��f���AUATUSH��8dH�%(H�D$(1��G����H��1�H�L$��H�T$H�t$�v���������L�l$M�eA�|$tA�|$��L����H�D$L� H�D$A�4$H�8��udH�T$ ��H�\$A��H�;���L�l$ L���.��H��BH��P����L�(H�D$H��@�f�H�D$1�H�81���A��1�E���E��H�EH�D$(dH3%(��H��8[]A\A]�D�w�Ր�LH�\$�f����A�D$���������A�D$��I�EH�D$�Ao$H�I�T$H�PH�D$H�8�v
�MH�D$H�8�GH��BL� ����1�H�5w.��[H�D$H�������f.����ATUH��H�5/TSH��@dH�%(H�D$81�H�L$H�T$�D$H�p)L�D$�D$H�D$1��k���u|�|$��1�H�|$ ���L�L$(L�d$ L��H��?H��,I���H)À|$uWH�L$H�|$A��E��H��S1�1��WUH�\$H���:��E��xsH�]�EH�D$8dH3%(usH��@[]A\�f����H�L$A��E���Y��H�|$H�0S1����T�fD��~���-���f�H�5	-�1��Y�u����#��AUATI��USH��D�/����H�(L��B�Dmt���H�B���SЃ�	v�S�E�d$���L��B�Det躽�H�B���BЃ�W��	F�H���[]A\A]�f���SH��H�?H��t�˸H�{H��t轸H�{H��t诸H�{H��t衸H�{(H��t蓸H�{0H��t腸H�{8H��t�w�H��[�n�ff.���UH��SHc�H�H��H��t(H9�s#����H���2H��qt�_H��H9�u�H��H��[]�fD��SH���C��H��[��������AWAVAUA���@ATUSH���H��8dH�%(H�D$(1��ٹIcվ:H��I��H�,�B��H����I��H9���s:�&��H�8H��H�H��f�Ou�IӀ�����+�„���H��I9�u�M�wE����A��/��M�GL�$����L�$D��H�8L���DH���H��DOu������/��I)�H��L�$D��蓹D��I�$H���t���L�$L��H)�L��A)�Ic�L�fDI��?H��I)�L���B��L���#H��I���/��I��M����H����I9���L9�t!M��H��I)�D����D��I�D$(H�����I�}H9�tH)�������I�D$8H������H�t$(dH34%(L����H��8[]A\A]A^A_����L�sL�CH�8L��E1���H��I��M)�I��L�0B�Dwu�I�U�H�����</t�����L�L$"L�ƹL��L������
1�B�D,"H���:��fA�D$ f���VI��/H��I)�L�����I��H���qM��I)�M����N�t3�L9�v�I��L9���A�>@u�L��:H��I��H)�H��H�D$���H��H���I��I)�M��~#D��H��H�$職D��I�D$H���a���H�$H�zL��H)�H��~���W���I�D$H���8���I�^�;[��A�}:M��t$L9�v��L9��oI��A�>:u�L9��\fA�|$ �RM�FM��M)�I��VM���9L�L$"L�ƹL��L��L�$�R��
1�B�D<"H�����L�$fA�D$ M9���f����I�<$H��t�ӳI�|$H��t�ijI�|$H��t赳L��E1�誳�|���DL9�t!M��H��I)�D���:�D��I�D$(H������I�~M���=L9�����L��H)�������I�D$0H��������L)�H���D����9���fDI9��g���A�8�]���I�<$H���N����N���H�������D��H��蜵D��I�D$(H���|�������I��L��H)�H�D$H9D$�2�Q��L�I�fA�AL�$u���H�=#��D$�j��D�D$L�$H��u�A��%����H�D$H��H9D$����I�GA�DA�����I�GA�DA�����I���f���f�H9������H)����ʹ��I�D$0H��������A�}�]�s���fDM��I)�M������D��H��莴D��I�D$H���n���I9������L������DM�GI9���M�w����I)�H��D���B�D��I�$H���#����U���M��H��I)�D����D��I�$H�����A�/t:I�4$�H�=���b��I�W����H��D��H)�H��)�Hc�H��e���I�4$�H�=��I�_�$��������A�/�����A�:�.���I�_�%���DL��?H���h��L��#H��I��I���R��M��tH��tI9�LG��S���H������M��t0I)�M���A���L�|$H��D���$�D��I�D$H����������I��H������I��I��I)����������SH���s��H��[���8������ATUH��H�5��SH�� dH�%(H�D$1�H�L$H�T$H�D$����L�D$���������t$H�|$����H��H����H�L$H���|H����H��IHc�H�>��L�c0M��t,�L��踺�ƉE����L�����EH�EH���s���H�D$dH3%(�zH�� []A\�fDH���(rH�H��tA��H�5��H���~H�KH��tA��H�5A�H����~�K f����H�KH��tA��H�5��H���~H�KH��tA��H�5JHH���~H�K(H��tA��H�5��H���]~H�K0H��tA��H�5�7H���:~H�K8H�����H��A��	H�5�G�~H���;�������fD�H�57�H���|v�!����H�t$H�
�G1�1�����EH�E�r���DL�c8M���3����S���fDf�{ �B����E�C H�E�1���@L�cM�����������fDL�cM���������fDL�c(M���������fDL�#M������������L�cM����������fDH��F�1�1��;��EH�E���f.�H�5i �1��
M�u�Z��������AVHc�AUL�47I�պATUH���S�(�I��H��L9���H�
�F�U�PӀ�v</v$�Pƀ�v�P���@��<_��@��u<z���ƒ��%H���������C��S�I9�tH���E�< u��+H��I9�u�H��L)�H�����~����H��E1�1���*��M��tA�m[L��]A\A]A^�f��H����1���ff.����SH��H�5�H�� dH�%(H�D$1�H�L$H�T$�~����t!�t$H�|$H�T$����T$�CH��SH�D$dH3%(uH�� [����ff.�f���AWH��AVAUATUSH��������D�v�I��H���'DA��~A��%tTD�mM��D��H��D�s���t&E�,$M�|$A��+u�D���E M��H��D�s���uډ�)��EH��[]A\A]A^A_ÐH�T$�6��I�L$H�T$H��DHt�I�L$�DHt�L����I����H�T$�E�n����1�H���f���USH��H�5��H��(dH�%(H�D$1�H�L$H�T$�
����t'�t$H�|$説�t$H��H�����H�+�C�CH�D$dH3%(uH��([]����D��ATHc�I���UH��SH�Ӻ�-������U�L��L�
�C1�M�\��L��r�@��v��/v+�r�@��v"�r�@��A�€�_@��A��u��zvVfD�փ�A�%@��A���A�41�T@�tH��H��H��I9�u�H��H��t�[]A\�f�A���H��1��ِ��SH��H�5J�H�� dH�%(H�D$1�H�L$H�T$�����t!�t$H�|$H�T$�����T$�CH��SH�D$dH3%(uH�� [��-��ff.�f���AWAVAUI��ATUSH������A���^�H�oI���@�E�H��C���tcA��H��M���A�$M�t$��~�<%u����I�T$H��DPtOI�T$�DPtBL��A�_�M�t$�q�H��E��C���u�@��D)��H��[]A\A]A^A_�f��E�%�C��q���@1�H����f���USH��H�5��H��(dH�%(H�D$1�H�L$H�T$�M����t'�t$H�|$���t$H��H������H�+�C�CH�D$dH3%(uH��([]�����D��AWAVAUATI��H�5|�USH��xdH�%(H�D$h1�H�L$4H�T$8H�D$HH�D$`L�D$`�����t^H�à�L�C0M����H�|$81ɺH�5�w��XI��H��tH�@PH��t�xtF�L���iUA�D$I�$H�D$hdH3%(�%H��x[]A\A]A^A_��L���iI�UP�J���w1���u
H�BH��PpH��H�\$P�H�5�EH���z���tH�D$PH��x�SI�}P�G<�31�<u
H�G�PpH��H�l$XH��H���H�D$HH�D$H�D$@H�D$@H�t$H��H���8����OH�D$HH���L�8A��H�|$`M��L�Ǿ:L�D$���L�D$H��I�����A�M�~�D$蝿�H���I��A��DB u�H�D$HL��A�L$H�H�0H)������1���u I�D$�T$,L��H�t$ �Pp�T$,H�t$ H��H�L$�-
�����H�D$@H�8�g�H�D$HL��L��H�H+�PH�D$@)ʹH�8�߀�D$A��H��H������A�W�L��L��謀��f.��L���S���fD�MI��H�C0�R����I�<$H�L$�r����E���H�D$HL��L��L��A�H�H�0D�@H)�H)�A)ȃ�L���wu�C���f�H�:����H������H��@��tJI�UP�J��t81���u
H�BH��PpH��H�ٺH�5�B��H�D$PH�H����H�:��L���$-��;�f.�AWI��AVAUI��ATUH��SH���H�t$XdH�%(H��$�1��FH���v<��H�FH����wH���__L��H���T_H��A�MH��;H	�H��tH��$�Ƅ$�H���������H�s�@H��H��I��H��H��H��H��H�I)�L�؃�0�H��	w�L�f�L�s�F�OE)��mH��$�H��Ƅ$�H���������L�c�DH��I��H��I��I�t$�H��H��H��H�I)�L�Ѓ�0A�D$�H��	w��F�-I��L�sE)�H�L$pD��L��H���;
����"H���[E1�D��L��H��$�H��A�H�H��H��$�j��L�l$hAZA[A�E<�cH�H>Hc�H�>��f�L��M������H��$�Ƅ$�H���������L�c�@H��H��H��I��H��H��H��H�H)�H����0A�$H��	w�����DI�I�]H����I�wH�nI;o�~�i:f�0I�oH����H��H��$�Ƅ$�H���������H�k�DH��H��H��H��H��H��H��H�H)�H����0�EH��	w�I�H��H)�H���HI�L�$M;g��H�H��H�����I�?M�gH����I�\$I;_�(J�'I�_�;��f�I�H���dI�wH�^I9_�:A�d:�!fD�40�I�_H����H�{0��H�{0�E�.H��H��H�D$X��M�'M���;H��蓪�I�H�8I9_�!L�H��H�����I�?I�_H����L�cH�M9g��M�gH���;��f�H��$�dH3%(��&H���[]A\A]A^A_��I�H���$I�wH�^I9_���N;f�0I�_�HDŽ$�I�EH�����L���:[H����L��PM���1H��$�H��$�H��H�|$XHDŽ$�A�Ѕ�I��H����%I�WH�ZI9_�M#A�C:fD�H�|$XI�_H��$�H�k�ZH�|$X�ZH��������̋HƄ$��	fDH��H��H��H��H��H��H��H�H)�H����0�EH��	w�I�L�kI)�H���o!I�N�$/M9g��#H�L��H���H��I�M�gH���$I�l$I9o��"A�:"fF� I�?I�o��!H�|$X��Y�@H�I9o�#H�|$X��YH�|$XD�`�YI�I?H�pL���˱�I�I�oH���
$L�eM9g��!H��������̿":f�<(H�k��$�M�gƄ$���H��H��H��H��H��H��H��H�H)�H����0�EH��	w�I�H��H)�H���
!M�,M9o�)"J�< H��H���#��I�M�oH���6#I�mI9o��!�:{fB�4(I�I�oH���. ��$�H�*I9_�"H��$�H�<(�Ű�I�?I�_H����"H�kH�I9o�N!I�o�}H��$�H�������覛����I�H����I�wH�^I9_��b:f�<0H�D$XI�_H�H���tH��$�Ƅ$�H���������H�k�@H��H��H��H��H��H��H��H�H)�H����0�EH��	w�I�H��H)�H���0I�L�$M9g�H�H��H����I�?M�gH����
I�\$I9_����I��$�I��$�1�I�G�֚I�L����I�A�]M�eH����I�wH�nI;o�rA�s:fD�,0I�oHc����
H��$�H��Ƅ$�H���������L�k�DH��H��H��I��H��H��H��H�H)�H����0A�EH��	w�I�H��L)�H���OI�L�4M;w��H�H��L��诮�I�M�wH����M�nM;o��A�:"fF�0I�M�oH���6I�\-I;_�7J�<(H��L���X��I�I�_H����H�kI;o�A�";fD�I�o�F���fDI�H���dI�wH�^I9_��A�a:fD�$0H�|$XI�_�G<��
<�J�D$1�E1�E1�H��$�Ƅ$�L�cH����������DH��H��H��I��H��H��H��H�H)�H����0A�$H��	w�I�H�KL)�H���7I�L�M9G�mH�H��L��L�D$�B��L�D$I�M�GH����M�`M9g��A�:{fF�M�gE���I�?H����I�_H�kH�I9o��I�o�}���f�H��$�H��tH��$�H���sNL�l$XA�}�����I�EH���tL���mTH��@ܔH;�h
�H��$�H��$�L��H���X�D$���D$I�H���&I�wL�vM;w�t�O:f�0H��$���$�H���������M�wL�kƄ$��H��H��H��I��H��H��H��H�H)�H����0A�EH��	w�H�SI�H��L)�H���LM�$M;g��J�<0H��L��蟫�I�M�gH���M�l$M;o��A�:"fF� I�M�oH������$�M�tM;w�WH��$�J�<(�>��I�M�wH����M�nM;o�0A�":�|$fF�0M�o��H�|$XH�G�PpI��H���NH����A�ƅ�~z�|$tsA���D$Ic������I�H���I�wH�^I9_�"
�0i:0;I�_���f�H�G�PpI��M�������L��H��$��]�D$A��E���D��L�cƄ$�H����������Hc��
@H��I��H��I��I�t$�H��H��H��H�I)�L�ȃ�0A�D$�H��	w�I���F�-�~����L��$�L��I���������L���sH��$�H�l$@L��H�D$H�D$lH�D$H�D$xH�D$H��$�H�D$(H�D$XH�D$0H�\$ L��H�L$H�T$E1�I��H�t$L��������|$t!H�t$x�H�=�.��€����]��������H�L��$�H����H�sL�~L;{��A�i:fD�0L�{M���}H�D$ Ƅ$�L�x�
f.�I��L��L��I��I��H��H��H�H)�H��0A�I��	w�H�t$ H�H�NL)�H���H�{L�4L;s�iH�H��L���k��H�;L�sH���;M�~J�7L;{��L�{�;H�t$(H��L���"��u^H��$�H��tQH;D$0tJH�0�~��H�T$@H��� �H��$�H��xuH��hA�H��L����E���H�H����H�sL�vL9s���N;L��f�0H��L�s�z�
���DI�������D$lD�x�H�D$xH�D$8H�H���H�sL�vL;s���s:f�<0L�sMc�E���gH�D$ Ƅ$�L��H�H��H��H��H��H��I��H��H��H�H)�H����0�H��	w�H�t$ H�L�NI)�H����H�{N�<L;{�zH�L��H��輦�H�L�{H����M�OL;K�^
�:"fB�48H�L�KH���TO�<1L;{��H�t$8J�<L���e��H�L�{H���eM�wL;s���";fB�8L�s��@I�GH��M��O�NI�G1�1�H�L$�R�H�L$I�I�I�����fDH��$�H��Ƅ$�I���������H�s�DH��H��H��I��H�~�I��H��H��H�I)�L�؃�0�F�H��	w�H���G�-�w�I���I���H��I�W1�贐M�GI��9����H���H���1�I�G臐I�H��G���@I�G1ҾO�I�GN�W�I��:��H���H��H�ƃH�S1��,�H�sH�����D��H�D$ Ƅ$���Hc�H�H�DH��H��H��I��H�y�I��H��H��H�I)�L�ȃ�0�A�H��	w�H���G�-����H�D$ I��Ƅ$�L�x�f.�I��I��L��L��I�O�I��H��H��H�H)�H��0A�G�I��	w�I���A�-�o���f�H���H������DI���I���H��I�W1��,���$�M�oI��z���f�I��$�I��$�H��H�L$I�W1���M�wH�L$I�����@H���H��H�ƃH�S1�輎H�sH�����H���H��H�ƃH�S1�蔎H�sH��3����H��QA���P������QAH�0����f�H��@ܔH9�h
�,���H�x0�H�5M(��������H�9(H�t$XA�DŽ$�H��$�E1�E1�H���H��$�H��$�DŽ$�fD��$�H��H�L$jj�dkA^ZH��$��������H��`�H��������H���c��W������uH�G�PpH�����������9H��$�H�t$XH��L����H�|$�C���I���I���H��H�L$I�W1�L�D$��I�H�L$I�L�D$�W�@H��Ƅ$�H���������H��H��$�H�k�f�H��H��H��I��H�u�H��H��H��H�I)�L����0�E�H��	w�H���F�-�(���Ƅ$�H���������Hc�H��$�L�k�	H��I��H��I��I�u�H��H��H��H�I)�L�؃�0A�E�H��	w�I���F�-��f.�H��$�H��Ƅ$�H���������H�k�DH��H��H��I��H�u�H��H��H��H�I)�L�Ѓ�0�E�H��	w�H���F�-�x�I�G1ҾO�I�GN藋I��Z��1ҾO1�A�I�GI�GN�d�M�GI�����L�/�r�����O1�1�A�H�CH�CN��H�sH�����I�GH��M��	H���H���I�G1�1�I����I�I���@I�GH��M��	H���H���I�G1�1�I��蠊I�I���@I�GH��M�n	H���H���I�G1�1�H���`�M�oI���@I�GH���P��H��H��M�	H���H���I�G1�1���H��I�I�����I����I�GH��M��H���H���I�G1�1�I���ЉI�I���@H��$�胉�X�fDH���H��H�ƃI�W1�茉I�wI���H���H���1�I�G�g�I�H���@H���H��H�ƃI�W1��<�I�wI��Z�H���H��H�ƃI�W1���I�wI��f��H���H��H�ƃI�W1���I�wI����H���H��H�ƅI�W1�贈I�wI����H���H��H�ƃI�W1�脈I�wI�����H���H���H��I�W1��T�I�_I����I���I���H��I�W1��$�M�wI��7��D��$�I�GI��M�I���I���I�G1�1��ۇ��$�M�oI��)��I�GH��M��H���H���I�G1�1�H�L$莇H�L$M�wI�I���|�f.�H���H��H�ƃI�W1��T�I�wI����I���I���H��I�W1��$�M�wI����H���H��H�ƃI�W1���I�wI��d��I��$�I��$�H��I�W1��†M�gI����fDI��$�H��I��$�I�W1�蒆I�I��@�fDH���H���H��I�W1��d�M�oI����H���H���1�L��I�G����@I���H��I���I�W1���I�I����I��$�H��I��$�I�W1���I�I���fDH�CH��M��H���H���H�C1�1�H�L$8螅H�L$8H�{H�I����f.�H�CI��M��I���I���H�C1�1�M���P�L�KH��~�@H�CI��M�NI���I���H�C1�1�L�L$PH�L$H�	�L�L$PH�{H�H�L$HM�����1�E1����fDI���I���1�H�C�DŽH�L��#�@I���I���H��H�S1�蜄L�{H���I���I���H��L�L$HH�S1��o�L�{L�L$HH��p�fD�O1�1��I�GI�GN�5�I�wI��S�f�1ҾO1�A�I�GI�GN�M�wI����O1�1��I�GI�GN�̓I�wI����1ҾO1��I�GI�GN蝃I�_I�����O1�1��I�GI�GN�m�I�wI����I�G1ҾOA�I�GN�>�I���fD�O1�1��I�GI�GN�
�I�wI��_���O1�1��I�GI�GN�݂I�wI������O1�1��I�GI�GN譂I�wI����I���H��L�L$PI���H�S1�H�L$H�z�H�{L�L$PH�H�L$H�J�@I���H��H�L$8I���H�S1��?�H�{H�L$8H��e�fDI���I���H��H�S1���L�KH��:�O1�1��I�GI�GN�݁I�wI����1ҾO1�A�I�GI�GN謁M�gI����1ҾO1�A�I�GI�GN�|�M�wI����O1�1�A�I�GI�GN�L�I�wI����O�N�A�����O�N�����O�N�a�����O�N�����O�N������O�N�A�����O�N�����O1�1�A�H�CH�CN謀H�sH��K��O1�1�A�H�CH�CN�|�H�sH����H�C1ҾOA�H�CN�N�H���fD1ҾO1�A�H�CH�CN��L�{H��y�H�C1ҾO1�H�CN��L�{A�H�����O�N�����O�N�a�����O�N�����H��$�L��H���y�D$H��$��D$H������H�=SDŽ$���H��$���f�H����I�WH�ZI9_���N;f�I�_�7�A�}�yL�l$XA�}�A�E<����I�H���vI�WL�bM9g�<A�r:H�kH���������fD�H�D$pM�gH�Ƅ$��	fDH��H��H��H��H��H��H��H�H)�H����0�EH��	w�I�H��H)�H����M�,M9o�"J�< H��H����I�?M�oH�����I�]J�/I9_���I���I���1�I�G�~I�L�����DI�H���#I�WL�bM9g��A�R:H�kH���������fD�H�D$pM�gH�Ƅ$��H��H��H��H��H��H��H��H�H)�H����0�EH��	w�����fDI�GH��M��H���H���I�G1�1�I���H}M�gI����@I���I���H��I�W1��}M�gI����H���H���H��1�I�O��|I�WI�������O�N�y���1ҾO1�A�I�GI�GN�|I�WI����H���H���H��1�I�O�|I�WI����1ҾO1�A�I�GI�GN�U|I�WI��l���I�GI��M��I���I���I�G1�1�M���|I�I��g����$�I�GH��M��H���H���I�G1�1���{��$�I�oI����I�GH�|$X�D8�hH��M�9H���H���I�GI�?1��{I��=��I�GH��M�H���H���I�G1�1�I���S{M�gI�����H���H���H��1�I�O�+{I�WI����H���H���H��I�W1��{I�oI����H���H���H��1�I�O��zI�WI����I��$�I��$�H��I�W1��zM�gI��,��H���H���1�I�G�zI�H����I���I���H��I�W1��ezM�oI����I���I���H��I�W1��=zM�gI����H���I�?H���1�I�G�zI�����H���H���H��I�W1���y��$�I�oI����I��$�H��I��$�I�W1��yI�I����1ҾO1��I�GI�GN�yI�WI��P���1ҾO1��I�GI�GN�byM�gI�����I�G1ҾO�I�GN�5yI��:��1ҾO1��I�GI�GN�
yM�oI����1ҾO1�A�I�GI�GN��xI�oI�����1ҾO1��I�GI�GN�xI�WI��[��H��$�E1�1�H��A��HDŽ$���������V����O�N�����O�N����O�N�[����O�N�	���轓�H���1�1��(�M�'M��tRI�H�_I9_vfA�<N;I�_��H�?���x�H���H���1�L��I�G��wI�I�I���1�1ҾO�I�GI�GN�wI�I�I���Ic��r���AWAVAUATI��USH��H��H�t$H�L$8dH�%(H��$�1�H�FH���tH����3H��@ܔH;�h
��H��$�H�|$H��$�H��H�D$H��7�D$��@��I�$H����I�t$L�vM;t$��A�O:fD�,0H��$���$�L��$�H���������M�t$Ƅ$�H�D$�@H��H��H��I��H��H��H��H�H)�H����0A�EH��	w�H�L$I�$H��L)�H����M�<M;|$��J�<0H��L���ۊ�I�$M�|$H���yM�wM;t$��A�:"fF�8I�$M�t$H������$�M�,M;l$�H��$�J�<0�v��I�$M�l$H���LM�uM;t$�A�":fF�(M�t$@����S����1�������|$A��A��E����H�D$Ic�Ƅ$�H���������H�h�
f.�H��H��H��H��H��H��H��H�H)�H����0�EH��	w�H�t$I�$L�~I)�H���
I�|$N�4?M9t$��H�L��H���x��I�$M�t$H����I�nI9l$�gA�:{fF�0I�l$E��~2�SƄ$����51����-H�CH��PpH���I�<$H���#I�\$H�kH�I9l$�[I�l$�}H��$�dH3%(��H��[]A\A]A^A_�f.�I���H��I���I�T$1���sI�|$I�$���DI���I���H��I�T$1��s��$�M�t$I�$����fDI���I���H��H�$I�T$1��wsM�t$H�$I�$�+���DH�CH��PpH������fDH�;H��$�H���������H��H�$�w�H��$��SH�D$(H�D$hH�D$ H�D$xH�D$0����f�1���u
H�CH��PpH��L�$H�L$(E1�1�H�t$ �����[����|$t H�t$h�H�=���������S���'1���u
H�CH��PpH��H�$H�t$0��H�D$xH��x��H�|$�HL�t$pL�(H�GD�y�PpL��D��L��H��������H�D$xH�D�xH�H�D$@I�$H���NI�t$L�nM;l$���s:f�<0M�l$Mc�E����H�D$Ƅ$�L��L�x�
f.�H��H��H��I��H��H��H��H�H)�H��0A�H��	w�H�t$I�$L�FM)�H���ZI�|$N�4M;t$�~	H�L��L����I�$M�t$H����M�FM;D$�7�:"fB�40I�$M�D$H����O�<(M;|$�\	H�t$@J�<L��蛅�I�$M�|$H���aM�oM;l$���";fB�8M�l$H�D$pH�T$8L��H�0�v���S��t51���u
H�CH��PpH��H�4$���S�������H�;���H�;��H�;����H�|$��,I��H�D$xM���uH�0A�EL�|$dH��A�MI�U��D�NPH�|$XL�L�����D$tH��$��PH�t$P�T$`XZH�|$H�G�Pp�T$PH�t$@L��H���:����jH��$�A�E�G�*��H�D$xH��$�H���L��H�A�E��D�JPL�H��c���D$tL��$��P�T$P^_H�|$H�G�Pp�T$@L��L��H�������w
H��$�A�E�T
蟌�H�D$xH�D�xH�H�D$@I�$H���fI�t$L�nM;l$�2A�s:fD�0M�l$Mc�E���V
H�D$Ƅ$�L��L�x��H��H��H��I��H��H��H��H�H)�H��0A�H��	w�H�L$I�$L�AM)�H����I�|$N�4M;t$�H�L��L����I�$M�t$H���M�FM;D$�7A�:"fF�0I�$M�D$H����O�<(M;|$��H�t$@J�<L��蚂�I�$M�|$H���xM�oM;l$��A�";H�T$8H��$�L��fF�8M�l$�t��H�D$xH��	1��H�H�1�蔱�����1�H�'	�1��s�I�$H���NI�t$L�nM9l$��A�N;fD�0M�l$���DH�D$A��Ƅ$�Ic�L�x�
�H��I��H��H��I�w�H��H��H��H�H)�H����0A�G�H��	w�I���F�-�G���f.�D��H�D$Ƅ$�H����������Hc�H�h�	H��H��H��I��H�u�H��H��H��H�I)�L�Ѓ�0�E�H��	w�H���F�-�X���I�D$I��M�	I���I���I�D$1�1�M���&lM�D$I�$�����I�D$I��M��I���I���I�D$1�1�L�D$P��kL�D$PI�|$I�$M���p���fDH�D�xH�H�D$@I�$H����I�t$L�nM;l$��s:f�<0M�l$Mc�E���vH�D$Ƅ$�L��L�x�H��H��H��I��H��H��H��H�H)�H��0A�H��	w�H�t$I�$L�FM)�H���
I�|$N�4M;t$��H�L��L����I�$M�t$H����M�FM;D$��
�:"fB�0I�$M�D$H����O�<(M;|$��H�t$@J�<L���K�I�$M�|$H���	M�oM;l$�"
�";H��$�L��fB�8H�T$8M�l$�&������H���H��H�ƃI�T$1��3jI�t$I�$�;���DI���I���H��I�T$1��jM�|$I�$�+���DI���I���H��L�D$PI�T$1���iM�t$L�D$PI�$���H���H��H�ƃI�T$1��iI�t$I�$�K���DH�;��H��$��Ci���fD�3i���fDH��$�D�|$dH�D$@I�$H����I�T$L�rM;t$�}A�s:fD�M�t$Mc�E���1H�D$Ƅ$�L��H�H�H��H��H��H��H��H��H��H�H)�H����0�H��	w�H�t$I�$L�NI)�H����I�|$N�<M;|$��
H�L��H���9}�I�$M�|$H���GM�OM;L$�hA�:"fF�8I�$M�L$H���[O�<1M;|$�L
H�t$@J�<L����|�I�$M�|$H���!M�wM;t$�BA�";fF�8H��$�M�t$A�E���b���"���DI���H��L�D$PI���I�T$1��gI�|$L�D$PI�$�M���I���I���H��I�T$1��gM�D$I�$�y���DI�D$H��M�=�O�NI�D$1�1�H�$�AgH�$M�t$I�$I�����@D��$�I�D$I��M��O�NI�D$1�1��f��$�M�t$I�$�	�I�D$I��M���O�NI�D$1�1�M���fI�|$I�$���@I���I���H��I�T$1��fM�l$I�$���DI���I���H��I�T$1��SfM�|$I�$�;�DI���I���H��I�T$1��#fM�t$I�$�n�DH���H��H�ƃI�T$1���eI�t$I�$��DH���H���1�I�D$��eI�$H���f.��O1�1�A�I�D$I�D$N�eI�t$I�$��@1ҾO1�A�I�D$I�D$N�ReM�|$I�$�z�@I�D$1ҾO1�I�D$N� eM�t$A�I�$���@�O1�1�A�I�D$I�D$N��dI�t$I�$���@�d���fDH��$�D�|$dH�D$@I�$H���
I�T$L�rM;t$���s:f�M�t$Mc�E���H�D$Ƅ$�L��H�H�DH��H��H��H��H��H��H��H�H)�H����0�H��	w�H�t$I�$L�NI)�H���c
I�|$N�<M;|$��H�L��H���x�I�$M�|$H���9
M�OM;L$��
�:"fB�8I�$M�L$H���T
O�<1M;|$�aH�t$@J�<L���Dx�I�$M�|$H����M�wM;t$��
A�";fF�8H��$�M�t$A�E�i����c��fD�O�N�B�����O�N����H���H������DI���I����2���DI���I�������DD��H�D$Ƅ$���Hc�H�H�DH��H��H��I��H�y�H��H��H��H�I)�L�؃�0�A�H��	w�H���G�-���I���I���H��I�T$1��[bM�D$I�$�R�DI���H��L�D$PI���I�T$1��&bI�|$L�D$PI�$��I���H��L�D$PI���I�T$1���aI�|$L�D$PI�$����I���I���H��I�T$1��aM�D$I�$����DH���H��I�t$H���1��aI�T$I�$�X���DH�D$A��Ƅ$�Ic�L�x�
�H��I��H��H��I�w�H��H��H��H�H)�H����0A�G�H��	w�I���F�-��f.��O1�1�A�I�D$I�D$N��`I�t$I�$��@1ҾO1��I�D$I�D$N�`M�t$I�$��D1ҾO1�A�I�D$I�D$N�z`M�|$I�$�b�@1ҾO1�A�I�D$I�D$N�B`M�l$I�$��@I�D$1ҾO�I�D$N�
`I�$���@H�D$A��Ƅ$�Ic�L�x�
�H��I��H��H��I�w�H��H��H��H�H)�H����0A�G�H��	w�I���F�-�o�f�I�D$I��M��I���I���I�D$1�1�L�D$P�l_L�D$PI�|$I�$M����fDI�D$I��M�}I���I���I�D$1�1�M���_M�D$I�$��I�D$I��M��I���I���I�D$1�1�L�D$P��^L�D$PI�|$I�$M����fDI�D$I��M��I���I���I�D$1�1�M���^M�D$I�$���H��$�H�|$�H��H�D$H�qX�D$H��$�H���V��H�=�DŽ$��`H��$��-�f�I���I���H��I�T$1��^M�|$I�$�,�DI���I���H��L�D$PI�T$1���]M�t$L�D$PI�$��H���H��H�ƃI�T$1��]I�t$I�$��DH���H��H�ƃI�T$1��k]I�t$I�$���DI���I���H��I�T$1��;]M�|$I�$��DI���I���H��L�D$PI�T$1��]M�t$L�D$PI�$��I�D$I��M�,�O�NI�D$1�1�M����\M�L$I�$�x�@I�D$I��M���O�NI�D$1�1�L�L$XH�L$P�{\L�L$XI�|$I�$H�L$PM�����D��H�D$Ƅ$���Hc�H�H�DH��H��H��I��H�y�H��H��H��H�I)�L�؃�0�A�H��	w�H���G�-����I���I���H��L�L$PI�T$1���[M�|$L�L$PI�$�c�I���I���H��I�T$1��[M�|$I�$��D�O1�1�A�I�D$I�D$N�r[I�t$I�$�z�@1ҾO1�A�I�D$I�D$N�:[M�|$I�$�c�@I�D$1ҾO1�I�D$N�[M�t$A�I�$���@I���I���H��I�T$1���ZM�L$I�$��DI���H��L�L$XI���I�T$1�H�L$P�ZI�|$L�L$XI�$H�L$P���1ҾO1�A�I�D$I�D$N�ZZM�|$I�$���@I�D$1ҾO1�I�D$N�(ZM�t$A�I�$�=�@�O1�1�A�I�D$I�D$N��YI�t$I�$�L�@�O�N�J���f��O�N����I�D$I��M�F�O�NI�D$1�1�L�L$XH�L$P�{YL�L$XI�|$I�$H�L$PM���a���I�D$I��M���O�NI�D$1�1�M���2YM�L$I�$����@�O�N�r�����O�N�����I���I���H��L�L$PI�T$1���XM�|$L�L$PI�$��I���I���H��I�T$1��XM�|$I�$�*���DH���H��I�t$H���1��{XI�T$I�$���D1ҾO1�A�I�D$I�D$N�BXI�T$I�$��@I�D$1ҾO1�I�D$N�XM�|$A�I�$��@1ҾO1�A�I�D$I�D$N��WM�|$I�$��I���I�������I���I�������1ҾO1�A�I�D$I�D$N�xWI�T$I�$���I���I�������I���I������I���I���H��I�T$1��'WM�L$I�$�t�I���H��L�L$XI���I�T$1�H�L$P��VI�|$L�L$XI�$H�L$P���1ҾO1�A�I�D$I�D$N�VM�|$I�$�3�I�D$1ҾO1�I�D$N�VM�|$A�I�$���q�ff.�f���ATUH��S��H�� dH�%(H�D$1���~�v�� H�=`��V�H�}����GH��Hc�H�>���H���H�5���WHD�H�=H�1��	�H�E�pH�8芻�H�=5��y�f�H�D$dH3%(�EH�� []A\�H�?���H�MH�B�
H�5�H��H�=�HD€yH�H�
�HD�H��1��|��f.��H���H�5̈HD�H�=h�1��L��g�����H���H�5��H�HD�H�==�1����4���@�H�5s�H�`��H�=�H��`H�q�HD�����f�H�?H�#�H��HD�H�5!��H�4�H�=��HD�1������L�'A�D$A��A�D$A<�W�H�=���A�l$A�{���H�G�PpI��H���}�@A��A�D$A<w�H�}H�GH���H����H�T$H�t$1��L���w�A��H�UH�5g�H�=X��z�
H�q�HD�H�T$1���~H�|$�kSM���2��~�s�� H�=��1��~�H�=o��&������H��H�5�HD�H�=�1��l~����L�����H�}����H�5��H�=�HD�H�=c�1��,~�\����L����H�UH�5{�H�=]��zH���HD��1���}H�5��ٺL��1���A�l$A�	���H�}1�H�GH���H���\���H�T$H�t$1��E1�����H�5	���m�f���AUATI��UH��SH��(dH�%(H�D$1����/we����HJ��A�t$D�k��ufI�L$� D��1�H�=��� }�sH�����1�H�\$dH3%(��H��([]A\A]�@H�JH�AH�B�A�t$D�k��t�I�<$��H�L$H�T$�o�H�|$t��tC� D��H�=u�1��|A�D$I�<$�p���I��@��H�=P�A�$�P���H�L$� D��H�=��W|H�D$I��@��8*t�H�=�A�$�@�
H�=��A�$��yl�f���ATI��UH��S���/wK����HJ��A�D$�s��uLI�L$� H�=z�1���{�sH���/���[1�]A\��H�JH�AH�B�A�D$�s��t�� H�=[�1��{A�D$I�<$�p���H�=B�1��d{�f���ATHc�1ҾUH��S�vPI�ą�tGH�Ɖ��E���t8��~"�E�L��I�l��H�;�H������H9�u�[L��]A\�OfDL���O[]A\����AUATUH��S��H��(dH�%(H�D$1���~�v�� H�=���zH�}����GH�s�Hc�H�>��H��H�5܂�WHD�H�=��1��YzH�E�pH�8�ڴH�EH�=���p1��5zDH�D$dH3%(�OH��([]A\A]ÐH�?��H�MH���
H�=��H��H�5Z�HD€yH�HD�D�AH�=*�H��1���y�fD�H�A�H�5��WHD�H�=��1��y�d���@�H��H�5��OH�HD�H�=x�1��fy�1�����H�5ÁH�`��O�H�=e�H��`H���HD��$y����H�?H�k��OH�\�HD�H�5f��H�y�H�=��HD�1���x���fDL�'A�|$A�A�H�=���@��{���H�G�PpI��H���]�xAw�H�}��	H�}1�H�T$H�t$H�G���H�EL��D�h�̼H�uH�T$�~���E��A��H�5ƻH�=��1��,xH�|$��LH�5[H�EE1��ٺL��xA��1�����~�s�� H�=��1���w�H�=���_����f.��H�A�H�5�HD�H�=?�1��w�g���E��A��H�5��K���DD�oL����H�UH�5�H�=��D��zH��HD��1��GwH�5�� ���H�}�H�}1�H�T$H�t$H�G���H�EE1�H�T$H�5p�xD�H�tH�=w�1���vH�|$�~K����E1�H�5[����(g����AUATI��UH��SH��(dH�%(H�D$1����/we����HJ��A�t$D�k��ufI�L$� D��1�H�=��`v�sH���u���1�H�\$dH3%(��H��([]A\A]�@H�JH�AH�B�A�t$D�k��t�I�<$��H�L$H�T$诳H�|$tWH�L$1�� D��H�=����uH�D$I��@��8*tS�H�=��A�$�H�=��A�$�F���fDI�$� D��1�H�=@��uI��@���D�
H�=)�A�$��e���ATI��UH��S���/w3H�J�Ǎp�2�9�}������/����H��$�H�BH�HH�J�u���tcH�AH�B���t	H�E�8t>�s� H�=��1���t�EH�}�p��W�H�=��1��t�sL������[1�]A\��H�M�s� 1�H�=4��t��H�J�x���ff.���ATHc�1ҾUH��S�II�ą�tGH�Ɖ��U
���t8��~"�E�L��I�l��H�;�H���?���H9�u�[L��]A\�HfDL���H[]A\�'���AWAVAUATUSH��H��XL�dH�%(H�D$H1�A�zw!A�BH�����Hc�H�>��f�H�H���tH�sH�nH9k�:�0NULLH�kH�D$HdH3%(�8H��X[]A\A]A^A_�@I�BI��L��PpI����H�;H����
L�sM�~J�7L9{��L�{H�|$�M�1��
A� H���1����H�;H���dH�SLc�N�<2L9{��H�t$H�L���?\�L�{H�|$�QGI�<$H�T$H�t$1�H�G���H�H���kH�{�T$L�$L9c�-
H�t$H���[�H�L�cH����M�t$L9s�Y	foq�L��@ray(�@
H�|$L�s��FM��tI�؉�L��H�5�1������yH�H����
H�sH�nH9k���))f�0H�k�R���f�A�rI�:H�T$1�A�L������H��A�L��H�D$ H�ǹjjH�T$(R�t$,H�u�����H�;H�� I��H����
H�kL�mH�/L9k��L�k�'H�H����H�{HcT$H�,H9k�	H�L���Z�H�;H�kH����
L�mH�/L9k�xL�kL���'�yEH�|$�oE�S���f.�H��I�
H9���H����L�D$ �D$?H���������I�h�
�H��H��H��H��H��H��H��H�H)�H����0�EH��	w�H�M�`I)�H����H�{N�,'L9k�^
H�L��H���Y�L�k����H�`��AH�|$1�H�c�H��`����H�;�D$H����H�KHc�H�,H9k��H�t$H��3Y�H�kH�|$�ED�)���I�:H��sH����H�sH�nH9k�h�0trueH�k���M�"H�����H����	L�kM�uL9s�~L�L�sH�|$�M�1��
A� H��1���H�;H����H�SLc�N�4*L9s�
H�t$H�L���]X�L�sH�|$�oCH�H����H�sL�nL9k�H�array (
I�غL��H�01���H�5�L�k蔥����H�;H���?H�kL�eH�/L9c��L�c�)����DH���H��H�ƅH�S1��BH�sH����H���
H�{H�oH9k��H��fals�@eH�k�x����H�|$�M�A� 1�H���1���H�;H���VH�SHc�L�$*L9c��H�t$H�H���W�L�cH�|$�+B����fDH�|$�M�A� 1�H�n�1��R�H�;H����H�SHc�L�$*L9c��H�t$H�H���V�L�cH�|$��A�%���fDL�D$ H���D$?H���������I�h�	H��H��H��I��H�u�H��H��H��H�I)�L�؃�0�E�H��	w�H���F�-�h���I���I���H��H�S1��lAH��^���@I���I���1�H�C�GAH�L��W���@H���H���H��H�S1��AH�{H��;���I���1�I���H�C�@H�SH��H��I����H���H��H�ƅH�S1���@H�sH��p����I���1�I���H�C�@H�SH��H������Lc�H�CI��M�#I��$�I��$�H�C1�1�L���K@H�SH��H��+���@Lc�H�CI��M��I��$�I��$�H�C1�1�L���@H�SH��H��{���@�O1�1��H�CH�CN��?H�sH��o����L�D$ �D$?H��������I���������I�pM�H��H��H��H�~�I��H��H��H�H)���0�N�H��L9�u�H�H�n�M�h�D$+-I)�H���kH�{N�$/L9c��H�L��H����S�H�L�cH����I�l$H9k���-1fB� H�k���f�D�d$H�CI��M��I��$�I��$�H�C1�1��>�T$H�{H��g���@Hc�H�CH��M�3H���H���H�C1�1��x>HcT$H�KH��H�����@Hcl$H�CH��M��H���H���H�C1�1��.>HcT$H�{H��8���DH���H���1�H�C�=H�H����@H���H��H�ƃH�S1���=H�sH������I��$�I��$�H��H�S1��=L�cH��}���fDH���H���1�H�C�w=H�H��C���@H���H��H�ƉH�S1��L=H�sH����H���H���1�H�C�'=H�H��d���@I��$�H��I��$�H�S1��<�T$H�{H����f.�H���H��H���H�S1���<HcT$H�{H�����H���H���1�H�C�����H�CI��M��I��$�I��$�H�C1�1�M���^<H�{H��T���f�Lc�H�CI��M�;I���I���H�C1�1�M���<H�SH��H��o�fDLc�H�CI��M�I���I���H�C1�1�M����;H�SH��H��	���fD�O1�1��H�CH�CN�;H�sH����H�C1ҾOA�H�CN�n;H��W���fD1ҾO1�A�H�CH�CN�<;L�cH���H�C1ҾOA�H�CN�;H��N���fDH�C1ҾOA�H�CN��:H����fD�O1�1�A�H�CH�CN�:H�sH�����I���H��I���H�S1��:H�{H��z�����O�N�&�����O�N������O�N�x����1ҾO1�A�H�CH�CN�:H�����@H�C1ҾOA�H�CN��9H���fDH�CI��M��I���I���H�C1�1�M���9H�{H��k���@�O�N�#����I��$�1�I��$�H�C�u9H�SH��H����fDI��$�1�I��$�H�C�E9H�SH��H��%���fDI��$�I��$�H��H�S1��9L�cH����fD�O�N������O�N����1�1ҾO�H�CH�CN�8H�{H�������O1�1��H�CH�CN�8H�sH��9�I��$�H��I��$�H�S1��c8H�{H������O�N�5����O�N����1ҾO1��H�CH�CN�8L�cH�����O�N�;����S�fD��AWAVAUI��ATUSH��h�
H�|$dH�%(H�D$X1���/��H�B�q�ω2�,8��/����H�
H���L�t$(1�L��A� ��1�H�����H�;H���H�SLc�N�$:L9c��H�t$(H�L���K�L�cH�|$(�7A�u����L�t$0I�M�D$OH���������M�n�DH��H��H��I��H��H��H��H�H)�H����0A�EH��	w�H�I��M)�H���'H�{N�<7L9{�5H�L��L���WK�H�L�{H���
H�sL�nL9k���0 => H�|$H�ډ�L�k��H�;H����H�kL�eH�/L9c�aL�c�,H�;H����H�kL�eH�/L9c�L�c�
1�H�t$XdH34%(�UH��h[]A\A]A^A_�@H�JH�AH�B�)H�HH�J�9���DI��$�1�I��$�H�C�5H�SH��H��Q���fDH�CI��M�F�O�NH�C1�1�M���t5H�{H�����I�}L��H�T$ ���,�L�l$(L���O@�L��H�T$1�A�L������t��H�;I��H����L�kM�}J�/L9{��L�{�'H�H����H�{HcT$L�,L9k��H�L���wI�H�;L�kH����M�}J�/L9{��L�{L���'�f4H�H�����O1�1�A�H�CH�CN�f4H�sH�����f.�Lc�H�CI��M���O�NH�C1�1�M���!4H�SH��H����f�H���H���1�H�C�3H�H�����@H���H���1�H�C��3L�cH�H��,H�;H�������H�C1ҾOA�H�CN�3H��l���@H���H��H�ƅH�S1��l3H�sH�����I��$�I��$�����I���I������DI���I���1�H�C�3H�L�����@I���I���1�H�C��2H�L��?���@I���H��I���H�S1���2H�{H�HcT$���H�C1ҾOA�H�CN�2H��=���fDI���H��I���H�S1��d2H�{H�����Lcl$H�CI��Mw|�O�NH�C1�1��&2H�{H�HcT$�C���H�C1ҾOA�H�CN��1H����H�C1ҾOA�H�CN��1H�����I���I����{����9M�H�B�����AWAVAUI��ATI��USH��X�
dH�%(H�D$H1���/�=H�B�q�ω2�,8��/�:��H�D�}�
A�uH����4H�|$A� D��1�H�Y�1��=�H�;H����H�SLc�N�<2L9{�<H�t$H�L��L�t$ �E�L�{H�|$�0I�M�D$?M�nH����������H��H��H��I��H��H��H��H�H)�H����0A�EH��	w�H�I��M)�H����H�{N�<7L9{��H�L��L���E�H�L�{H����M�oL9k��B�8 => L�k�yH�JH�AH�B�)H�HD�}H�JA�uH�������I�}H�T$��1�A�L����o��H��A�L�{�jI�ƹH���jL��H�D$,P�t$0聄��H�� D��1�H�|$I��1�A� H�����H�;H����H�SHc�L�<
L9{�;H�t$H�H���D�L�{H�|$�/H�;H���IL�{I�OJ�?H9K�3H�K�'H�H���pH�{HcT$L�<L9{��H�L���C�H�L�{H���VI�OH9K��L�L���' =>�@ H�K�.L���.L��uH�����H�;H����H�kL�eH�/L9c�L�c�,H�;H����H�kL�eH�/L9cv2L�c�
1�H�t$HdH34%(�$H��X[]A\A]A^A_�fDH���H���1�H�C�.H�H���H���H���1�H�C��-L�cH�H��,H�;H���b���H�C1ҾOA�H�CN�-H��J���@Lc�H�CI��M�3I���I���H�C1�1��x-H�SL��H��H����fDLc�H�CI��M�I���I���H�C1�1�M���--H�SH��H��"���fDH�C1ҾOA�H�CN�,H��g���fDH�CI��M��I���I���H�C1�1�M���,H�{H��?���@Lc|$H�CI��M�QI���I���H�C1�1��v,H�{H�HcT$�d���DI���I���H��H�S1��D,L�{H�����I���I���H��H�L$H�S1��,L�{H�L$H��&���fDI���I���1�H�L$H�C��+H�L$H�L����f.�I���1�I���H�C�+H�SH��H�����I���H��I���H�S1��t+H�{H�����I���H��I���H�S1��D+H�{H�HcT$�2���I���1�H�L$I���H�C�+H�SH�L$H��H����fDH�C1ҾOH�CN��*�H�����1ҾO1�A�H�CH�CN�*L�{H��W����H�C1ҾO1�H�CN�r*L�{�H������O�N������O�N�y�����O�N�����O�N����E�H�B����H��(f�dH�%(H�D$1�H��)$H�D$��H�<$H��t
H�D$�H�<$�t$耏H�<$H��t�)H�D$dH3%(uH��(��(E����Uf�H��H�5a�SH��8dH�%(H�D$(1�H�\$H�L$�D$H��)D$H�D$ �R���tJH��H�T$��l�H�|$H��tH�D$�H�|$�|$H�t$u0�ÎH�|$H��t��(H�D$(dH3%(uH��8[]�D�u�P+�EH�E���QD���SH�6H��者��H�H��tH�S�[�ff.���Uf�SH��dH�%(H�D$x1�)D$H�D$ ��u|H��1�H�t$������tc�CH�l$0E1�1�H�1Ҿ
H���C�hsH�t$H�|$H���F���H��莆H�D$H��t4H�T$H��C�S��;�H�D$xdH3%(uH�Ĉ[]Ð�C���EC�D��USH��XH�t$H�L$H�T$ H�5�CdH�%(H�D$H1��KP���t	HcD$��u-H�D$�@H�H�D$HdH3%(��H��X[]�f�H�T$ H�\$0H�l$H�D$0H�t$(H��H��H�D$8H�T$(H��g���tH������f�H��H����H����H�|$�v�ݷD�D$H�L$(1�1�H+L$ H�����j�7����/B�ff.�@��SH��H�5^XH��dH�%(H�D$1�H�T$�D$�.O���t)�C�|$�{)H�H�D$dH3%(uH��[�f��CH����A�ff.���SH��H�5�WH��dH�%(H�D$1�H�T$�D$�N���t)�C�|$�+)H�H�D$dH3%(uH��[�f��CH����.A�f.�@AV�I��AUATI��USH�"�H��dH�%(H��$�1�H��"H��H�$H�D$H��WI��H�D$ H�C�H�D$0H�o�H�D$@H�K2H�D$PH���H�D$`H�u�H�D$pH��vH��$�H�j��D$�D$�D$(�D$8�D$H�D$X�D$h�D$xDŽ$�H��$�DŽ$�HDŽ$�DŽ$���I��I�]H����H���g/�H��H��L����/��u�E�m�H����H��H�]H��tcH���+/�H��H��L���/��uًEA)�1������E����H�H��$�dH3%(u'H��[]A\A]A^�A��������������D?�@��AWAVAUATUSH��H���.��Hc�H����#I�Ņ���D�3L�c�[H�hD�0�����C�E����t[���_tU�=�H��I��H��P�DHtpA��.t
��u��.up��t%�]H��I��A�$��t,A�މ�D�}��Cը�u�A��.t�I��A�$�E.H����u��EH��L��[]A\A]A^A_�DA��.t���t���.t�H�EA��.t�E.H����f.���H��H��H���d�����������&���u�@AWAVAUATUSH��H����#����H�D$�;#H�����k���I��H�l$M��M��L�-v�H���3�f���'L��H���\������DH�CH��HE�I�FM��LE��U���RA�<$�GH���>M���5�.H���H+�H��H��t��.L���0+�I��H��t���;�H�uH�I�$�Bf%�Dr�P���f��u;L��L������O���1��������fD�S#H�D$���f��
1�H���C�
1�L��H�$�~C�H�$H)�H��x=��������L��H���5�������1�M��t�$;�I�$H��DPtz�����H�|$�$�c L���[ �$H��[]A\A]A^A_�f�H��t��$��:�H�$H���DQu�H�5��H�������fD�c"I������L��H�=������w������UH��H�5,:S��H��8dH�%(H�D$(1�H�D$H�L$H�T$PH�D$(P1�L�L$L�D$(�HZY����xH�t$H�|$�9�������HcT$A�L�D$ H�=�QL��H��L��HN�H9��@��@��@���EA�H��L��L��H�=G�
HN�H9��@��@��@���H��L��H�=��L��HN�H9���������H��L��H�=�DL��HN�H9����������H��L��H�=�L��HN�H9����������H��L��H�=�
L��HN�H9����������H��L��H�=��L��HN�H9����������H��L��H�=�7L��HN�H9���������|A�H��H�=��L��L��HN�H9���������fH���H�=��L��HN�H9���������<H��L��H�=��L��HN�H9���������H��L��H�=3�L��HN�H9���������H��L��H�=�L��HN�H9����������H��L��H�=��
L��HN�H9���€������E�H�D$(dH3%(��H��8[]�D����E����H�E��D���E����H�E�D���E����H�E�DH��EH�E�@����E����H�E�r���f����E����H�E�[������E����H�E�F����8���AUATI��U��SH��H�`�H��`���ltnH�{ tH�{ ��H�C M��t@H�{ u��t5�����L���@I���@�hH�C �I�EH�C �@H��1�[]A\A]�@H�{(H��t�Z9�M��t��uH�C(H��1�[]A\A]�@�}�<�H��t#H��L��H��H�C(�I0��(H��1�[]A\A]�H��X=��H�=��H���K��^9�ff.���H�`�SH�=m�?��H�@ H�@(��A�ع��H�=���x�A�ع��H�=���Z�A�ع��H�=r��<�A�ع��H�=`���A�ع��H�=Q���1�[�ff.����SH��`�H�{(H��t
��7�H�C(1�[�f.���SH��`�H�{ tH�{ ��H�C 1�[���������AWAVAUATUH��SH��XH��`�dH�%(H�D$H1�H�;����t-�0�H�D$HdH3%(��H��X[]A\A]A^A_�D1�H�t$������t�L�l$M�eA�D$<tO<t&A�|$uA�D$����L���-H�D$L� E�$$E1��y@�EH�E�g����E1�H�{M�,$�H�=�L�t$�}�L��L��H��I���,�L���� �H�{��L���x-D�d$E��u�H�{ �K�n����7��I���J��@�@H�D$0�0��@�@H�D$8�H�D$@�@�@M���ML���e#�L�|$0A�G������L��L�5����I�H�D$0�@H�D$8�@H�M��tL��M���#�A��H�D$@D�`H�l$@�u���YL���e�H�EH�D$@H�l$0�@�i�I��1�H���f�PA��@H�S H�H��H��H�D$�H�����H�}���H�}���H�|$���H�{t!M���dL��H�B�1�1���L[H�{�a�����H�=�����K���H�`�D�� ǀ ����H�`�D�� ����D���A�D$�nI�EH�D$�Ao$H�I�T$H�PH�D$H�8�v
�}�H�D$H�8�GH��BL� �����H�{(�	�����L�s(�@H���@L��H�C �U!�ƉE����L���H�EH�C �@H�{ ������Q���@L�|$01�L�5��A�G���DH����1�1���Y���fD�1�1�M��H�
-�H�����YH�{uR�EH�E����H�5�
�1�葵H�l$@�u���H�5͈
�1��q�L�|$0A�w������H�=dz���H�5��
�1��=�H�k �u����0�ff.����AVAUATUSH�� dH�%(H�D$1��G���whI��1�H�T$��H�t$�2����tML�l$I�m�}t�}thH���&H�D$H�(H�MH���JH�K�Hc�H�>��f����H�D$dH3%(�zH�� []A\A]A^�f.��E��v�����E��I�EH�D$�oEH�H�UH�PH�D$H�8����GH��BH�(�<���@H��`�L�m����@Mc�A�D$M�,$�K���fDH��`�L�m��u�L�t$I��{t"�{u�C���uH����$H�D$H�H�H�E��H��`�L�m��u�L�t$I��{t"�{u�C����H���$H�D$H�H�H�E�L���@H��`�H�E H���T�oE�t$E�l$A$H�@H��I�D$H�� ����E�t$E�l$���Q���H�} t	H�} �,�H�|$H�H�E 諣�+���fDH��`�L�m�������L�t$I��{t"�{u�C���H����#H�D$H�H�H�E�x���H�h��1�1��KVA�D$I�$�����H�D$H�8����fDL��������L�t$I��{t"�{u�C���H���0#H�D$H�H�H�E���@L�m(M��t.L�����A�D$����L���A�D$I�$���A�D$�������C�I�H�D$�oH�H�SH�PH�D$H�8�v
��H�D$H�8�GH��BH���������C�I�H�D$�o+H�(H�SH�PH�D$H�8�v
辢H�D$H�8�GH��BH��0�������C�PI�H�D$�o#H� H�SH�PH�D$H�8�v
�c�H�D$H�8�GH��BH��������C�I�H�D$�oH�H�SH�PH�D$H�8�v
��H�D$H�8�GH��BH����H�5c�
�1���A�t$�U����x+����H���GH���>AWL�<7AVL�4
AUATUSH��(D�D$H�|$H�T$�*�D�D$H�|$H�T$L�(�f�������0@��@ ���L�gM9�w�+@��0u*I�D$L9�t I��I�$I�|$�H��A�DEu�I���0��0��@����H�jL9�r�1@��0�?H�EL9��BH��H�EH�U�H��A�DEu�H�վ`�0�
@I��A�$��A�DE�� u�A�T5�� tfDH���UH��A�TU�� u��������0��1���0u��������D�I��H��M9��EA�$H��A�DM�1I9���uH��A�Du�8����u�8ѾL�뫐I9����UA�DU��8�;��I��H��M9�t@A�$H��A�DUu�I9��"�EH��A�DEt0�����H��([]A\A]A^A_�@I9��'�EH��A�DEu�A�$E��t&D�D$�ۈL$����L$D�D$H�����8�w�r2I�|$H�UL9�rL9��H��([]A\A]A^A_�1�L9������D��c���fDI9�tU�UH�Ӊ�A�DUt{M9��9���A�4$H��A�Du������ ������H����D�`����������M9����]������)����H��H����I�����F�����������f�1����f�AWI��AVA�΃�AUHc�I��1�ATH��UD��SH���t$�D�d$PD�L$H�$�oH�$1ҾH��H���YE��D�L$D�T$H����Ic�H��1�H�4$H�L�f��H���H9�u�E��~E�B�A�N�M�D�E�D�E��~LA�71��f.�D��H��D��A:ttEʋD�A�D�D9�AO�D9�AO‰D�H�BH9�u�I�GM9�tI��H��H��H���H��H��H��H�$�,��
H����
H����[]A\A]A^A_�Ic�H�$�B���D��ATUH��SH��PdH�%(H�D$H1���t<�����!�����#�H�D$HdH3%(��H��P[]A\�fDH�D$H�L$�H�T$PH�5�$H�D$0P1�L�L$ L�D$0�=3ZY���t�H�W��1�1��aNI������EDH�L$H�T$�L�L$L�D$ H�5����2����O����t$�D$�������"����=��H��A�A���jH�T$0H�|$(�p���AXAY��H�L$H�T$H���H�D$HH�5a�PH�D$HPH�D$HP1�L�L$0L�D$@�C2H�� ���������t$L�D$0�L$��teH�D$@��tl���p���hH��PD�L$HH�T$0H�|$(����^_Lc�y��tH���1�1��M�EL�e�0�����A�����������I�������V$�fD��UH��SH��dH�%(H�D$1�H���sH�,$�H���+H��XZ1�1�H�EH�$E1�H�x�SH�L$dH3%(uH����H��(@[]���#����H��H�=�dH�%(H��$�1��V5��D$H��H�D$H�?���H��$8H����HDŽ$��o�oHHDŽ$��oP �oX0HDŽ$�)B(@)
K(@)T(@HDŽ$�HDŽ$PHDŽ$XHDŽ$HHDŽ$�HDŽ$�HDŽ$�HDŽ$�HDŽ$�HDŽ$�HDŽ$�HDŽ$�H�D$DŽ$hHDŽ$`HDŽ$@HDŽ$HDŽ$�)�'@�o`@�op`�oxp�o���o���o��)%k'@H���)=�'@)5v'@H��'@H�H�'@H��H�C'@H��H�='@H��H��&@H�pH�'@H�B);'@)
D'@)M'@H�'@�	H��$�dH3%(uH�Ĩ��!���SH��H��dH�%(H�D$1�H�G�Pp�H��H�5ןH���&n1҅�u
H�$H��xt#H�\$dH3%(H��u1H��[�f.��pH�8�H��H��t�H�$H��@���� �f.�U��1�SH���Q���H��t,H��H����1�H�[�1��4IH��H��[]��fDH����H�
4�1�[H�)�1�]�I���H��H�?����1�H���@��H����n���H�`�H��H��@�ff.�����B���f�����2���f���H�������1�H������S�Ӿ�����H�`���vH�@ [�f.�H�@@[�f.���AUI��ATA��UH���SH��dH�%(H�D$1���D��L��f�PH���@H�$�MH��H�H�$D�`H�E�PpH��H��E1�jA��H��H�5���"QY^H�D$dH3%(uH��[]A\A]�����AWH����AVAUATUSH��dH�%(H�D$1���I��@ܔI��I��0H����aI��0A�1�1�1��]NI��H�5�L��L���/�I��H��u!�L��H�5�1��/�I��H��t�=L���r�H��t��I�H�h�����%�L��f�H�H�����J�H���u��D)�H���
�H����E1�I��0jD�@H��L����OXZ�n���fDL���1�H�t$dH34%(u3H��[]A\A]A^A_��1�떿H�r"�H��I��0�����ff.���AWAVI��AUA��ATUSH��H��8I��@ܔH�$I��$�+I��$�
H����I��$�
H����I��$�
L�|=M;�$�
��I��$�
H��H�D����I��$�
M��$�
H����I�4/I;�$�
�-J�<8H��L�����I��$�
H�H�$E�$�
D�(I��$�
IDŽ$�
IDŽ$�
H��t�IDŽ$�
IDŽ$�
IDŽ$�
H��8[]A\A]A^A_��H�H��8[]A\A]A^A_�f.�I��$�
D��H���I��$�
M�|=M;�$�
��H�L��L����M��$�
A��$(M��$�
O�:��A��$(H���Hc�H�>���H���H��H�ƁI��$�
1���M��$�
I��$�
���I���H��I���I��$�
1��I��$�
I��$�
I��$�
����I���H��I���I��$�
1��x�I��$�
I��$�
����H�\$M��M��I��$�
M�rH����I��$�
L�jM;�$�
��A�
M��M��$�
ADŽ$(L��L)�H����A�<@��<:�I��$�
M�rH����I��$�
L�jM;�$�
�]A�
M��M��$�
ADŽ$(M9��A�L�5�A�<� ���H�\$M��M���A�EA�<�@I��M9�w�L��H�\$L)�E1����
M��$�
I��$�
��M��$�
L��H���b�I��$�
����I��$�
H����I��$�
H�,I;�$�
�;
I��$�
H��s�I��$�
I��$�
M�$�
H��t�q�IDŽ$�
IDŽ$�
I��$�
IDŽ$�
IDŽ$�
IDŽ$�
H������H�$I9�IFʼnH��8[]A\A]A^A_�f�A�BH����<�vM�jM9�w����@I��M9������A�E�<x�I��$�
M��M)�H����I��$�
N�<7M;�$�
�H�L��L��L�L$L�T$�W�L�T$L�L$M��$�
I��$�
IDŽ$�
H���PM9�$�
��L��L��L�L$�
�M��$�
L�L$M��ADŽ$(fDL��L)�H�����A�< �<=t��ADŽ$(���A�BH���M�j�<y"I�UI9������A�EI��H�Z��<x�I��$�
M��M)�H����I��$�
M�<>M;�$�
��L��H�L��L�L$�0�M��$�
L�L$M��ADŽ$(@L��L)�H������A�M�r< ��	<����	<��A�BH����<����tI�FI9�����A�vI���<2��u�L��M��$�
I��$�
L)�I��$�
L�L$H�AI��$�
I��$ I��I��$�
H�L$L�T$��L�T$H�L$��I��$�
L�L$��H���L���M9���A�H�5�M��L��2H����2���9����:��M�_M9���A�GM��M��H�����y��9fDIDŽ$�
H��M��H���H���I��$�
1�1�I����I��$�
I��$�
I��$�
�=���IDŽ$�
H��M��H���H���I��$�
1�1��M��$�
I��$�
�1���fDIDŽ$�
I��M�r�O�NI��$�
1�1�M���4�I��$�
I��$�
����I��$�
L��L)�H����I��$�
H�9I;�$�
��H�H��L���
�I��$�
A�EA�<�^���M���I���f�IDŽ$�
1ҾO1�IDŽ$�
N�IDŽ$�
I��$�
H���'����I��$�
IDŽ$�
H��M��H���H���I��$�
1�1��(�I��$�
I��$�
I��$�
�8����O�N�
���f��O�N�M����I���I������ADŽ$(�L��L)�H���l���A�<@v<Z�p�����a<�e���I��$�
M�jH����	I��$�
L�rM;�$�
��
A�
�M��$�
ADŽ$(L��M��L)�H����A�< ��L�5��M��<��<��<��A�BA�<�$
M�jM9�r�$@I��M9��A�EA�<x�I��$�
L��L)�H���hI��$�
L�M;�$�
��H��H�L��L�D$�;�L�D$L��L)�M��$�
H���uA�E< �M���7���f�L�������H���H��L�T$H���I��$�
1�H�L$��L�T$H�L$I��$�
I��$�
�����A�H����������I��M9�w�H����I�$�
I��I;�$�
�LI��$�
I��$�
L�\$E1�I��$�
I�$�
L�L$�0
�L�\$L�L$M��$�
M��$�
M���I��$�
L��L�L$L�\$H�L$�N�H�L$L�\$L�L$L�M;�$�
�%I�|
H��L��L�T$L�L$�	�L�T$L�L$I��$�
M��$�
H���@I��$M�,M;�$�
��I��$J�<L�L$�`	�L�L$M��$�
M��L��L)�M���y���I��$�
M)�H����M�M;�$�
��I��$�
L��L��H�L$I�$�
L�L$��M��$�
M��L�L$H�L$����D< ����<
����M��M�jI��$�
H���aI��$�
L�rM;�$�
��A�
M��M��$�
�,����L��L)��y���DLc�I��$�
L��L���b��d���DH���H��H���I��$�
1��x�I��$�
I��$�
I��$�
���IDŽ$�
H��M�ZH���H���I��$�
1�1�L�T$H�L$��H�L$L�T$I��$�
I��$�
H�������<Zv��a<���A�BH�e��<��M�jM9�w�y�DI��M9��g�A�E�<x�I��$p
M��IDŽ$x
M)�H���E	M9�$�
��	L��L��L�L$L�T$�
�M��L�T$M��$x
L�L$�#��L�T$L�L$1�fDI��$p
H�0H�H���:�4�@�2I��$x
H9�w�I��$p
I��$0L�L$I��$ L�T$�IZL�T$L�L$�������A��$(I��$�
H����I��$�
N�<7M;�$�
��H�L��L��L�L$�/�A��$(L�L$M��$�
������M�����f.�<&�A�zH�̑H���<:<"������@��I�BL��H)�H�� ����H��L��H)�H������8H���:@u�@��!��@��"��
H�p�@H�t$��H�D$M��$�
I��$�
I��$ L�L$L)�H�P�H��I��$�
I��$�
I��$�
�c�I��$�
L�L$A��H���_I��$�
L�xM;�$�
�1I��$�
M��$�
B�D8�"E����I��$�
M��$�
H����M�$�
M;�$�
�>I��$�
I��$�
L�L$I��$�
I�$�
�x�M��$�
L�L$I��$�
H����I��$�
L�pM;�$�
�gI��$�
L�T$L��M��$�
L)�B�D0�"�R�f.��O�N�����IDŽ$�
H��M�UH���H���I��$�
1�1�L�T$H�L$��H�L$L�T$I��$�
I��$�
I���Q�����O�N���f�I���I���H��L�T$I��$�
1�H�L$L�D$��L�T$H�L$I��$�
I��$�
L�D$����<
t< �D�I��$�
H���\I��$�
L�jM;�$�
��A�
M��L��M��$�
L)���<'�r<>����A�BM�j< t<=�����DA�E< u�I��M9�w���H����I��$�
M�|M;�$�
��L��H�L��L�L$�Z�L�L$M��$�
M��L��L)��w�1ҾO1�L�L$L�T$A�IDŽ$�
IDŽ$�
N�Y�L�T$L�L$I��$�
I��$�
����1ҾO1�L�L$L�T$A�IDŽ$�
IDŽ$�
N��L�T$L�L$I��$�
I��$�
�0��O�N���I��$�
M�j�H�������O�NIDŽ$�
�u���H���H���H��1�I��$�
L�L$L�T$�w�L�L$L�T$I��$�
I��$�
���H���H���H��1�I��$�
L�L$L�T$�.�L�L$L�T$I��$�
I��$�
�Z�L��L)���1ҾO1�L�L$L�T$A�IDŽ$�
IDŽ$�
N���L�T$L�L$I��$�
I��$�
�i���A�BH�3�H���@I�BL��H)�H���=��H��L��H)�H���(��8H���:u�@��&��@��'�[H�p�@H�t$���	H�D$M��$�
I��$�
I��$ L�L$L)�H�P�H��I��$�
I��$�
I��$�
��	�I��$�
L�L$A��H���I��$�
L�xM;�$�
�hI��$�
M��$�
B�D8�'E���"I��$�
M��$�
H���
M�$�
M;�$�
��I��$�
I��$�
L�L$I��$�
I�$�
���M��$�
L�L$I��$�
H���:I��$�
L�pM;�$�
��I��$�
L�T$L��M��$�
L)�B�D0�'���IDŽ$�
I��M��I���I���I��$�
1�1�M��L�L$L�T$��L�T$L�L$I��$�
I��$�
���H���H���H��1�I��$�
L�L$L�T$�W�L�L$L�T$I��$�
I��$�
��I���I���I��M�)I��$�
1�1�L�L$L�T$��L�T$L�L$I��$p
I�$x
H���t���I���H��L�L$I���I��$�
1�L�T$��L�L$L�T$I��$�
I��$�
����I���I���1�L�L$I��$�
L�T$�s�L�L$L�T$I��$p
I�$x
H�����M��M��<@�.M�j<>�&�I��$�
H����
I��$�
L�xM;�$�
��A�
I��$�
M��I��$�
�M��$�
M��$�
M���6�I��$x
H����H����L�L$I��$p
�H�5���M��L�L$�����I��$�
H����M�M;�$�
��I��$�
I��$�
L�L$I��$�
I�$�
���M��$�
M��L�L$��fDI��M�NI���HF�1�I��$�
H�p��L�T$L�L$I��$�
I�$�
H���u�IDŽ$�
H��M��H���H���I��$�
1�1�H�L$L�L$��H�L$L�L$H��I��$�
M��$�
I��$�
I��M��$�
���1ҾO1�L�L$L�T$A�IDŽ$�
IDŽ$�
N�5�L�T$L�L$I��$�
I��$�
���IDŽ$�
I���M��I��M��I��$�
1�H�p1�L�L$L�T$���L�T$L�L$I��$�
I��$�
��I���H��L�L$I���I��$�
1�L�T$��L�L$L�T$I��$�
I��$�
��I���I���1�L�L$I��$�
L�T$�H�L�L$L�T$I��$�
I�$�
H����I���I���1�L�L$I��$�
��M��$�
L�L$H��I��$�
M��$�
I��$�
����I��MM���NIDŽ$�
I���L�L$HF�1�1�L�T$I��$�
H�p��L�T$L�L$I��$�
I��$�
���H���H���H��1�I��$�
L�L$L�T$�L�L�L$L�T$I��$�
I��$�
���O�N�`���I��$p
M�jA�IDŽ$x
H���z�O�N����I���H��L�L$I���I��$�
1�L�T$��L�L$L�T$I��$�
I��$�
��1ҾO1�L�L$L�T$A�IDŽ$�
IDŽ$�
N�i�L�T$L�L$I��$�
I��$�
�d�IDŽ$�
A�M���N�5����O�N�a���1���<Z�@���a<�5�M�j���M����I�����H���H���H��1�I��$�
L�L$L�T$��L�L$L�T$I��$�
I��$�
��M��$�NIDŽ$�
I��MvI���L�L$H�p1�1�I��$�
�`�I��$L�L$I��$�
M��$�
�x�1�H��L�ߺNIDŽ$�
�H��H��L�P�I��MvH�PI��$�
H�r1�1�L�T$L�\$L�L$���L�\$H��L�L$I��$�
I��1�L�T$L���H��I��$�
H��H����L�t$��I��$�
M�jH���E���A���H����I�$�
I��I;�$�
��I��$�
I��$�
L�L$I��$�
I�$�
���L�L$M��$�
M��L��L)���I���L�L$I���H��I��$�
1����I���L��I���1�I��$�
L�\$L�L$L�T$���L�\$H��L�L$I��$�
I��1�L�T$L���H��I��$�
H��H���p�M����M9������M��M)�H���-M�$�
M;�$�
�kI��$�
L��L�\$I��$�
I�$�
L�L$H)�����L�L$L�\$M��$�
��I���I��I�uI9����E�EB�<x�A��=�����I�EH�D$��IDŽ$�
�NI��MvI���I��$�
H�p1�1�L�T$H�L$L�L$��L�T$L�L$I��$�
H�L$M���
�I���I��I�uI9�� �E�EB� u�A��=�]���I�EH�D$��IDŽ$�
�NI��MvI���I��$�
H�p1�1�L�\$L�L$��L�L$L�\$I��$�
���I���I���1�L�\$I��$�
L�L$���L�\$L�L$I��$�
�W���I���I���1�L�T$I��$�
H�L$L�L$��L�T$H�L$I��$�
L�L$��H���H���1�L�\$I��$�
L�L$�?�L�\$L�L$I��$�
�v�IDŽ$�
�NH��MvH���I��$�
H�p1�1�L�\$L�L$���L�L$L�\$I��$�
�"�H���H���1�L�L$I��$�
��L�L$I��$�
�>���IDŽ$�
�NH��MvH���I��$�
H�p1�1�L�L$�h�L�L$I��$�
��L�����L���^�1ҾOL�L$A�IDŽ$�
IDŽ$�
NL�T$��L�T$L�L$I��$�
���1ҾOA�IDŽ$�
IDŽ$�
N���L�L$I��$�
��L�5���1ҾOA�IDŽ$�
IDŽ$�
N��L�L$I��$�
��H���M��$�
H���I��$�
J�(H�L$H9��xI��L�=�H�5Ƃ� ��9�@��:��
I��I��L9t$v!A��<y��
A��<y�I��L9t$w�I��$�
H����M�$�
M;�$�
�aI��$�
I��$�
L�L$E1�I��$�
I�$�
�O��M��$�
L�L$M��$�
M����1�H��L��I��$�
�H��H��L�l�M;�$�
�WL�L$1�H��L��L���I��$�
I�$�
H��H��H�P�����I��$�
L�L$M��$�
H����
M��$M�M;�$�
�h
I��$I��$L�L$I��$�
I�$�
�r��M��L�L$M��$�
�y�L�l$I��$�
M)�H����M�M;�$�
�}I��$�
L��L��L�L$I�$�
���M��$�
L�L$��H���H���L�L$I��$�
1��.�L�L$I��$�
�d�H���H���L�L$I��$�
1���L�L$I��$�
���1ҾOL�L$A�IDŽ$�
IDŽ$�
N��L�L$I��$�
��I���I���1�L�L$I��$�
��L�L$I��$�
�	�IDŽ$�
�NI��MvI���I��$�
H�p1�1�L�L$�;�L�L$I��$�
��H���H���L�L$I��$�
1���L�L$I��$�
�e�1ҾOL�L$A�IDŽ$�
IDŽ$�
N���L�L$I��$�
�$�I���I���1�L�L$I��$�
��L�L$I��$�
��IDŽ$�
�NI��MvI���I��$�
H�p1�1�L�L$�H�L�L$I��$�
�D�H���M��$�
H���I��$�
J�(H�L$H9��+I��L�=yH�5�~� ��9����:�I��I��L9t$v!A��<y��
A��<y�I��L9t$w�I��$�
H����M�$�
M;�$�
�:I��$�
I��$�
L�L$E1�I��$�
I�$�
���M��$�
L�L$M��$�
M����1�H��L��I��$�
�H��H��L�l�M;�$�
�0L�L$1�H��L��L���I��$�
I�$�
H��H��H�P����I��$�
L�L$M��$�
H����M��$M�M;�$�
�AI��$I��$L�L$I��$�
I�$�
�1��M��L�L$M��$�
���L�l$I��$�
M)�H����M�M;�$�
�VI��$�
L��L��L�L$I�$�
����M��$�
L�L$�T�H���H���L�L$I��$�
1����L�L$I��$�
��L�=Q����L�=E����I��$�
H����M�$�
M;�$�
��I��$�
I��$�
L�L$I��$�
I�$�
�"��M��$�
L�L$��I��$�
I9���M��I)�H���M�$�
M;�$�
��I��$�
L��L�L$I��$�
I�$�
H)����M��$�
L�L$���I���I���1�L�L$I��$�
���L�L$I��$�
� ���H������IDŽ$�
�NI��MvI���I��$�
H�p1�1�L�L$�{�L�L$I��$�
����I���I���1�L�L$I��$�
�G�L�L$I��$�
����IDŽ$�
�NI��MvI���I��$�
H�p1�1�L�L$��L�L$I��$�
���I���I���1�L�L$I��$�
���L�L$I��$�
�v���IDŽ$�
�NI��MvI���I��$�
H�p1�1�L�L$M���|�L�L$I��$�
�)���I���I���1�L�L$I��$�
�H�L�L$I��$�
���M��$�NIDŽ$�
I��MvI���I��$�
H�p1�1�L�L$��L�L$I��$�
�9���I���I���1�L��I��$�
L�L$��L�L$I��$�
���1�H��L���NIDŽ$�
�H��H��L�h�I��MvH�PI��$�
H�r1�1�L�L$�c�L�L$I��$�
�=���I���I���1�L�L$I��$�
�/�L�L$I��$�
���IDŽ$�
�NI��MvI���I��$�
H�p1�1�L�L$���L�L$I��$�
�H���I���I���1�L�L$I��$�
��L�L$I��$�
�2�IDŽ$�
�NI��MvI���I��$�
H�p1�1�L�L$�g�L�L$I��$�
���1��<��I��$�
H���pM�$�
M;�$�
��I��$�
I��$�
L�L$I��$�
I�$�
���M��$�
L�L$��I��$�
L9��M��I)�H���|M�$�
M;�$�
�2I��$�
L��L�L$I��$�
I�$�
H)��=��M��$�
L�L$���I���I���1�L�L$I��$�
�Y�L�L$I��$�
� ���I��$p
�L�L$H�5�����M��L�L$���v��I��$�
H���y�I��$ H�D$ H���c��8�Z�I��$�
H�H�L$H���?�L�Q��l$L��L�l$I��L���
�x/ttH�xH9�rH�ھ:H)�H�����H��u�I��L��l$L�l$���H���H���L�L$I��$�
1�L�T$�S�L�L$L�T$I��$�
�0�f�8:/u�H�T$�/H��L��H�l$(�l$H)�H�D$L�l$�z��H�L$L�L$(H��HDD$H9��_�H)�L�L$H�t$ H��H���2�H�������IDŽ$�
�NI��MvI���I��$�
H�p1�1�L�L$��L�L$I��$�
�\���I���I���1�L�L$I��$�
�a�L�L$I��$�
���IDŽ$�
�NI��MvI���I��$�
H�p1�1�L�L$��L�L$I��$�
�P���I���I���1�L�L$I��$�
���L�L$I��$�
�O�IDŽ$�
�NI��MvI���I��$�
H�p1�1�L�L$M����L�L$I��$�
��I���I���1�L�L$I��$�
�b�L�L$I��$�
�d�M��$�NIDŽ$�
I��MvI���I��$�
H�p1�1�L�L$��L�L$I��$�
��I���I���1�L��I��$�
L�L$���L�L$I��$�
�r�1�H��L���NIDŽ$�
�H��H��L�h�I��MvH�PI��$�
H�r1�1�L�L$�}�L�L$I��$�
��I���I���1�L�L$I��$�
�I�L�L$I��$�
�k�IDŽ$�
�NI��MvI���I��$�
H�p1�1�L�L$��L�L$I��$�
�!�ff.�f���AWAVI��H��AUI��ATUH��SH��H��(L�D$����I��H��M�H���I���H�$1�1���L��I�����L��L��M�oH��� ��L;,$�C�<=H���i��J�(H�L$H;$��K�<,H��H��M�,����H���L���M9��lA�H�5�qH�
�M��H�$H����:f.�<9� <:��I�I9���A�WL�$H���I����y��f.�A�H�������I��M9�w�H��M��H�D$N�O1�1�E1��p�H��L��H��H�����H�<$�f��L�4L9t$�WH�4$H�|H������H�D$N�0L9D$�
H�T$J�|5L��M)�L�$���M��L�$��K�(H9\$�}J�|L��L�����H��t�DH�D$H��tH�M��tL����H��(H��[]A\A]A^A_���OH�$N���fDH�D$L��1�H����r�H��I���w������f�L��I���1��O�I��B�8=H����H���F��H��MH�D$H����OHF�1�1���H��I�����L������L���5����1�I���H��I���H�D$���H�<$H������H�4$H�|H���f��H���w���H�D$H��M�VH���H���H�\$1�1���L�D$H��H��H�T$L��L�$���L�$L��M���y���M)�H���N���I��M�OI���L��HF�1�1��*�H��H���7����I���H��1�L�$I���H�D$��L�$H��J�<0�p����L�$H��M�
�C���DM9���L��L)�H��M��H�D$N�O1�1���H��L��H��H���7���#���f�I���H�$����H��H���1�L�$�[�L�$H���b����H�D$N�O���DL���P����H���H���H�D$�g����H��MH����OHF�1�1����H��L��H��H��������DH���H���H�D$�4���H�&�H�$������AWA��AVI��AUATI��USHc�H��HI��@ܔD�D$A��dH�%(H�D$81����oM��M��thH���I��H���H���5H��H�L$ L�L$H�t$�&��L�L$H�t$H�L$ I�,I9��vJ�<	H�����I���L$Ic���DI��H���aI��L�<M9���H�H��L���N��I��M��H����I�OJ�?I9��2I���=I��H����I��L�</M9���H�H��L������I���
M��H����I���
H�OI9��
�3H�fo�lH�den" namH�P�e=f�P�@"I���
I���
H����L�<M9��
�"H�<H��L���S��I���
M���
H����M�w	M9��
�sH�" value=L�H��@"I���
M���
H���8I�.I9��
v{J�<0H��L������I���
I���
H����H�kI9��
�|�" />�D$I���
���J1�H�L$8dH3%(��H��H[]A\A]A^A_�DH���H���H��I���
1���M���
I���
�S���fDI���I���H��I���
1��q�I���
I���
���fDI���H��I���I��1��9�I��I�����fDI���H��I���I��1���I��I���B���fDI��p
�H��1��H��H�=����1ADž�X����H�|$(�n����f�L��H�T$4D�����Hcl$4H�D$(I��I��H�������IDžH��M�>�O�NI��1�1�I���1�I��I���r���fDIDž�
H��M���O�NI���
1�1�H����M���
I���
���IDž�
H��M�{�O�NI���
1�1�I���I���
I���
����IDžH��M��O�NI��1�1�I���V�I��I������I���I���1�H�L$I����H�L$I��L����I���I���H��I���
1���M���
I���
�[���fDH���H���H��H�L$I���
1��I���
H�L$I���
���@H���H���H��I���
1��q�I���
I���
�R���fDH���H�������DH���H����|���DH���H�������DH���H������DIDžH�����H��H��M��H���H���I��1�1�躿I��H�D$H���H���H��H�t$���H�t$H�L$M�����DIDž�
1�1ҾOIDž�
N�T�I���
�I���
�9���@1ҾO1��IDž�
IDž�
N��I���
I���
��@1ҾOIDžIDžN�־�I���S���D1ҾO1�A�	IDž�
IDž�
N薾M���
I���
����H���H��H���1�I���a�I��H�D$H���H���H��H�t$�J��H�L$H�t$M���.���@�O�N�G������ff.����H�@ܔHǀ�
Hǀ1��ff.����H��H�@ܔH�=*y?Hǀ0HǀHǀ�
HǀHǀ�
�.�1�H������H������1�H���f.���H�@ܔǀ1�����SH��@ܔ����ujH���
H��t�ټHǃ�
H��Hǃ�
Hǃ�
H��t觼HǃHǃ1�Hǃ[�f�H���
H��t�o�Hǃ�
H���
Hǃ�
Hǃ�
H��t�=�Hǃ�
H��p
Hǃ�
Hǃ�
H��t��Hǃp
H���
Hǃx
Hǃ�
H��t�ٻHǃ�
Hǃ�
Hǃ�
ǃ���f���������fD��UH��SH��H�_H�{H��t��|jH�CH�;��gjH�H���H�H�E1�H��[]����ATUSH�� dH�%(H�D$1�H��t+1�H�t$dH34%(H���xH�� []A\�f�H�GH��H��L� L���kP��u�H��H��L���tFH��t�H�4$1�L�L$L�D$1�H��赡��H�T$H��t�H�D$H����H��H=HG�H�$�����������t�2@�u�����D�H���7�H�$H�P�H�$�T��� ����H�&H������H�D�@��@�� ���H��H��r������H�
H�}H��H�M��H�t
�H�t
�H��H��H)�H)�����H��h���@H��蠹����2�u�t
��t
��E����t
�f�t
��6����5��D��ATE1�USH��H�^HdH�%(H��$1�H����H��H�~`H�50a����H��tvI��1ɺ�L��H����DH��t9���H�$H��DPt�H�T$�DPt�H�T$�DPt��|$ u�@1��
L�����=�t=�uSE1�H�5�`H����H�H���gH�EHH��$dH3%(D��u3H��[]A\�DM��H�X`1��1�A����������f�AUI��ATI��H�5A`UH�պSH��(dH�%(H��$1�H�\$�AH�1ɺ�H��L���CH��t9�t��H�T$H��DPt�H�T$�DPt�H�T$�DPt��|$ u�1��
H���Q��=����D$H�{1҄�uJ�1�H��$dH3%(��H��([]A\A]�f�����tH�����t<|t�H�����u�~�H�t$H���
E1����H�|$t�L�e�D�H�5
_L���,G@1ɺ�H��L���BH��t9�\��H�T$H��DPt�H�T$�DPt�H�T$�DPt��|$ u�1��
H���9��=������L�l$E��������H��H�0��H��L�+E������B�Dnt�H��A�H���
f�H��H��DNu�,������.H�xA��u���oL�l$�
L��A)$A�D$���H��H�D$H���V����8,�M���H�x�
L���蹾������]��ff.�f�AWAVM��AUI��ATUSH��hH��$�H�<$H���T$(H�D$H��$�L�D$H�D$dH�%(H��$X1����H���cH�X(I��H���YH�E1�H��tH���K��H��vE1��{sA��E�D$ fE����I�L$H�|$H1�1�H�]� PH��E1�E1�jHc��jAUH�|$h��H�� H�|$HH��蘴H����L��H����]M��t%I�}tjE1�E1�1�j1ҾL����]A[]H�l$PD1ɺ�H��H���?H��t9����H�T$PH��DPt�H�T$Q�DPt�H�T$R�DPt��|$S u��
1�H������8�����c���D$,H�D$ E���I�T$H���"H��H�T$0���H�T$0��H���>��I�T$Hc�H�H9�H�|$0��H�T$8���H�T$8H�|$0L�H���f�H��H9����A�Ht�t$(H�<$H��1�H��[�9�NfD�A�fA�D$ �(���f�M��t+I�}t$jE1�A��H��j��	L���e\AYAZ�L������H����a1�H��$XdH3%(H����H��h[]A\A]A^A_�DL�������fDH�5/[H��1���C�1ɺ�H��H���>H��t9����H�T$PH��DPt�H�T$Q�DPt�H�T$R�DPt��|$S u��
1�H������������c��-���c����H�D$H��tD�8H�D$H��t�t$,�0H�D$H��tH�t$ H�0M����M�&���@�
H�5�YH����A@1ɺ�H��H���F=H��t9���H�T$PH��DPt�H�T$Q�DPt�H�T$R�DPt��|$S u��
1�H�����H�D$ =����
H�5`YH���aA�1ɺ�H��H���<H��t9���H�T$PH��DPt�H�T$Q�DPt�H�T$R�DPt��|$S u��
1�H���q��H�\$ =N�a1ҾH���������H���=������H�5�XH���@�1ɺ�H��H���<H��t9����H�T$PH��DPt�H�T$Q�DPt�H�T$R�DPt��|$S u��
1�H�����H�5�XH���=@D1ɺ�H��H���;H��t9�l��H�T$PH��DPt�H�T$Q�DPt�H�T$R�DPt��|$S u��
1�H���I��-���c��H�|$ ��	����D$,����M��t&I�}tjE1�L��E1�jH��1Ҿ�X_AXI�T$H���H��H�T$0�Z��H�T$0��H�����I�T$Hc�H�H9�H�|$0��H�T$8���H�T$8H�|$0L�H���fDH��H9����A�Ht�t$(H�<$H��1�H�nW�p4����H�5DWH����>������t$(H�<$H��V1��24H�߾1��c]L���k����}���fD�t$(H�<$H��V1��3�E���DH�5�VH��1��?�1ɺ�H��H���9H��t9���H�T$PH��DPt�H�T$Q�DPt�H�T$R�DPt��|$S u��
1�H���i���8�����cv>M�������I�}�����jH��
E1�jA���L����VY^���@M���c���I�}�X���jA��1�E1�jH��
L���VXZ�5���f�H�t$@H�=l���r��uH�T$@H�5�UH���g>����H�5�UH���.=�������@��AWI��AVA��AUD��I��ATM��UL��SH��XdH�%(H��$H1�H�D$�D$H�D$ H�D$(�D$@PH�D$PL�L$0L�D$(����^_H���!�H��H�l$@H��H�52U�<D1ɺ�H��H����7H��t9���H�T$@H��DPt�H�T$A�DPt�H�T$B�DPt��|$C u��
1�H�����D$-���c��H�|$ H��t���M��t*I�<$t#j�E1�H��jD�D$�	L���UXZ�H���Z1ۀ|$@�WH��$HdH3%(H���H��X[]A\A]A^A_�H�T$(H�t$0H�����f���L$�X���H�D$ H��H�5	TH�P(H���H��HD�1��_<H�|$(�L$H������E1�1ɺ��H�D$H�������D1ɺ�H��H���f6H��t9�<��H�T$@H��DPt�H�T$A�DPt�H�T$B�DPt��|$C u��
1�H�����D$=�tv��}tqH�|$��JY�v���DH�|$ H��������=�1ۀ|$@�����H�L$@D��L��1�H�S��/���f�H�D$ H�xH�|$(����DH�|$L���+S�L$��tC1ҾH�������x�H���c���yH�RD��L��1��[/�=���fDH�|$ ���<�L��1�H�=�e?H��H�D$H�]H��H�E�X0H��H�E����������AT1�E1�I��U��1�SH�� dH�%(H��$1�H�D$jjL�L$�[�ZYH���PH�|$H��H�W(H����H��H�5RL�d$1��%:D1ɺ�L��H���^4H��t9�4��H�T$H��DPt�H�T$�DPt�H�T$�DPt��|$ u��
1�L�����-���cv'��urH�|$H��u]�H���;W1��#�H�|$�6��H���W�H��$dH3%(��H�� []A\Ð��u+���@L��H�g�1�1�����q���L��H��P1�1������Q�����uH�|$H��t��1��q���DL��H��P1�1�����������AT1�E1�I��U��1�SH�� dH�%(H��$1�H�D$jjL�L$�{�ZYH���PH�|$H��H�W(H����H��H�5?PL�d$1��E8D1ɺ�L��H���~2H��t9�T��H�T$H��DPt�H�T$�DPt�H�T$�DPt��|$ u��
1�L���1��-���cv'��urH�|$H��u]�H���[U1��#�H�|$�V��H���9U�H��$dH3%(��H�� []A\Ð��u+���@L��H�NO1�1�����q���L��H��N1�1�����Q�����uH�|$H��t��1��q���DL��H��N1�1�������1����AW1�A��E1�AV1�AUATUH��SH��8dH�%(H��$(1�H�D$jjL�L$(��ZYH����H�|$H��H�W(H����A���jH��H�l$ L�5tN�F�H��I�����H�D$fD�/L�����I��H����A�$L��L��H��1��6f�1ɺ�H��H���N0H��t9�$��H�T$ H��DPt�H�T$!�DPt�H�T$"�DPt��|$# u��
1�H�����-���c�c���A�$/M9��eH�D$H�5�MH��H�P(1��{51ɺ�H��H���/H��t9茾�H�T$ H��DPt�H�T$!�DPt�H�T$"�DPt��|$# u��
1�H���i��D��8���L��蚣�DH��H�5MH�l$ 1���4f.�1ɺ�H��H���/H��t9���H�T$ H��DPt�H�T$!�DPt�H�T$"�DPt��|$# u��
1�H������D��8���H�|$� ��H���R1�A��c��H��$(dH3%(�0H��8[]A\A]A^A_ÐL��H�56LH��1��4@1ɺ�H��H���V.H��t9�,��H�T$ H��DPt�H�T$!�DPt�H�T$"�DPt��|$# u��
1�H���	��D��8�����A��c�����H�D$M��MD�L�H�D$f�I��L9d$�A�<$u�A�|$t�A�$/L��H��1�H�5nK�Y3f�1ɺ�H��H���-H��t9�d��H�T$ H��DPt�H�T$!�DPt�H�T$"�DPt��|$# u��
1�H���A��D��8�����A��c�N���A������H��H���1�1��������A��uzH�|$H��t�K�1��:���@A��u2�5��H���P1������L��D��8��������@1�H��H�J1����H�|$H��t��@H��H��I1�1������i����^��ff.���AWA��AVI��H��AUATI��UH��SH��dH�%(H��$1���H��H���	�H��H���mH���dH�;H���H�0H���������H�{H����H�uH�������A�����C �U f9�t
���ʅ��H�{(��H�}(��j1�L��E1�jE1�1�L����I��XZM���VH�S(H�/�L��I��H�5IH��HD�1���0�1ɺ�L��L���+H��t9���H�$H��DPt�H�T$�DPt�H�T$�DPt��|$ u�@�
1�L����-,��c�SH�U(H���H�5�HL��H��HD�1��@01ɺ�L��L���~*H��t9�T��H�$H��DPt�H�T$�DPt�H�T$�DPt��|$ u�@�
1�L���1��-���c��H��A��u�H���m��L���PM�AfDA��t"H�KH�HG1�1���Y�f�H���(�H��� �E1�H��$dH3%(D����H��[]A\A]A^A_ÐH��uH��u���H�����H��t��DЃ�u�����@A��u*H����H�����L���L�{����L��H�G1�1����������AVAUATI��USH��dH�%(H��$�1�H�$H����jL��1�E1�jL�L$�p�^_H��H����H�$H�5pFH��A�D$�H��$�H�P(H�t�H��HD�1��*.f.�1ɺ�H��H���^(H��tI�4��H��$�H��DPt�H��$��DPt�H��$��DPt���$� u��1��
H�����-���cA�D$��
I@A�D$�H�5�EH���`,1ɺ�H��H���'H��tI蔶�H��$�H��DPt�H��$��DPt�H��$��DPt���$� u���
1�H���a��-���c�#H�$H�5OEH��H�P(H�&�H��HD�1���,@1ɺ�H��H���'H��tI���H��$�H��DPt�H��$��DPt�H��$��DPt���$� u���
1�H��蹽�-���c��A�D$@�oI�D$0H�$H�5�DH��H�P(H�i�H��HD�1��,�1ɺ�H��H���V&H��tI�,��H��$�H��DPt�H��$��DPt�H��$��DPt���$� u��1��
H����=��I�D$X����I�T$0�H��H�����I�D$HI�D$hI�D$(H���H��HI�I�D$I�$I�D$H��I�D$H�I�D$8I�D$@��HH�<$���1�H��$�dH3%(�sH�Ġ[]A\A]A^�f��̀�O����H�<$H��t���H���eH������fDH�<$H��t�Z�������H�}�
1����H�I�D$0�>���@諳�H�}H��f�H��H��H)�H=���H��DBt�H�l$H�L$ H�EH�T$$UPL�ML�E1�H�5���T��ZY���{���1��l$$l�l$ �D$0�����}��H�t$PH�|$H�D$���I��H���?����@ ����L�t$H���i��H��I)�A�E Dt$�D$0�Q��I�D$X�����H=������@����ڳ�f.���AWA��AVI��H��AUATM��UH��H�5azSH��H��L�D$dH�%(H��$x1��D$,H�D$0H�D$8H�D$@H�D$X�D$p�D��H�5�?H��H����,��H��AH��t@D��L��1�E1��0H��$xdH3%(L����H�Ĉ[]A\A]A^A_�@A�M��tMH�L$HH���L��H�5���A��u.A����L�D$M��D��H��H��L���=I���{���H�D$,H��L��D��PL��H�D$0PL�L$@L�D$P�!�A[]H��H���b�H�5T@H����&H�l$pf�1ɺ�H��H���."H��t9���H�T$pH��DPt�H�T$q�DPt�H�T$r�DPt��|$s u��
1�H������8����D$��c��H�|$0H��t���M��t*I�<$t#j�E1�H��jD�D$�	L���R?XZ�H����D�|$p��L�l$XM���J���L��H��@D��L��1�E1��`H�|$X膕�!�����+��I��H�����aH��E1��?��H��A��A���%����H��?����@H�D$0H�5�>H��H�P(1��&fD1ɺ�H��H���� H��t9蜯�H�T$pH��DPt�H�T$q�DPt�H�T$r�DPt��|$s u��
1�H���y��I���D$A����A���.H�T$8H�t$`H���\��A��f���r����EAPPE�EH�D$H�D$0H��H�5��H��H�H(H���H��HD�1��%H�L$8H���CH�|$PE��1�1�H�O<�j/H��E1�E1�jHc��H�D$hPATH�|$p�?�H�� H�|$PI���ޓM����D1ɺ�H��H���~H��t9�T��H�T$pH��DPt�H�T$q�DPt�H�T$r�DPt��|$s u��
1�H���1��D$=��R��}�I�L���\B�9����H�|$0H���o����M���e����H�L$pD��L��1�H�<���J���f���8�����c��� H��L�D$远�H���H�x�
1�膵�H�H�D$M���3I�<$t!jE1�H��1�PL�D$(�L���<AYAZH�T$8H�t$`H���L��A��f���H�L$HH���L��H�5��<��uH�D$HH��x��D$pRETR�D$t���D蓓���
����L��L���e;M��tII�$H��t@H�@ H�L$I�$H�H(I�$�HI�<$tj�L��E1�QE1�1�1��9;^_�L$,��t,1ҾL��������H�L���K����3I�]HH�|$0�������D��8���M���@H�L$HH�F;L��H�5���;���A��c��H�D$HH�D�E���H�D$0H�5q:H��H�P(1��u"D1ɺ�H��H���H��t9脫�H�T$pH��DPt�H�T$q�DPt�H�T$r�DPt��|$s u��
1�H���a��D$-���c�=H�T$8H�t$`H���M��A��f���c����D$pSTOR�D$tH�D$���fDD��L��H��81���L���??�D$p����DA��cw�H��:D��L��1����q������fDH�D$0H�HH�L$8���DH��9D��L��1���_����H�T$8H�t$`H���v��A��f�������H�D$M���I�������H�T$8H�t$`H���A��A��f���&���H�|$0H���S������H�|$0H���@����E���H�H����H�5(9H��1�� f�1ɺ�H��H����H��t6褩�H�T$pH��DPt�H�T$q�DPt�H�T$r�DPt��|$s u��
1�H��脱�D$-,��c�s���H�D$HH�f9D��L��H�H�1��c����I��f�H�H�T��
H9�w&��
t��
ufDH���
H9�w
��
t�
t� ����	���u.H��H��H)��AH���D�B�A�� tA��	u�H��H�J�H9�v�H)��AH�����������fDAWAVI��AUA��ATUSL��H��HH��$�H�|$H�t$L��$�H�D$L��$�L��$�I�/dH�%(H�D$81�M��t:A�<
t2<
t.L��L��������#A�< �/<	�'�H��:H���ب�H���RH�SH9�v<�K��	���� u!���
�� ����	��H��H9�u�L�|+�H�PI9�v �@< u@H��I9�t�< t�<	t�I�׺	H�5�:H��H�D$(輫���tM��t#H�L$(H�a:L��H�5���7���T��$�-3��v��$�-,��vA�D$L���|��H��H=���I�T$ L�pH���I�D$H9��I�L$ A����A���JL�l$0E��tA��A��tD��A�T�f�T��薋��H���@I���@�hH�D$0�V��E1�L��I�$H�D$0A�1��@H�D$H�8��1��+DA�D$H�|$D��1�H�a6�$H���L�1�H�t$8dH34%(H����H��H[]A\A]A^A_�@�
H�59H���,������H�5�8H��������H�5�8H�������N�H�5�8L��A���ѩ�A	��*M��t#H�L$(H��8L��H�5���(5����I�<$H��t�`H�D$1�H�=�8��
^I�$H����H���H�1�����I�:H���������fDI�
M��f�I��H��A�$L)�M�,< t�<	t�M���L9��L�uO�.I�xL�D$證H��H��H��诞�L��L���( J�<0H�D$藞�H�L$L�D$H��B�M�蝉H�L$�I���H�D$(H�8��I�������L�l$0���@I�H�xL��L�l$0H��H�D��I�L�H�L�H)�A�H)���H��h���L�l$0M���Z���I�>�P���jL���E1�jE1�1�L���2Y^�-���L��H�D$�H�L$I�D$����1����A�L�l$0��0<	������
L��L��H�D$0轑�H�T$0H�������:����H��������H9�HG�I�D$M�������I�>�����j1�E1�E1�PH�پL����1XZ�{���A�D$H�|$D��1���H��3�
H����1�����H�D$(H�8�{���A�D$���1�L��H��H�L$��H�L$I�D$����A�D$H�|$D��H�3H�D$1��
H��贇H�L$�`���A�D��L�l$0�A�T��T�����J��f.���AWAVAUATUSH��H�T$��$�H�|$�L$L�D$8dH�%(H��$�1�Ƅ$ HDŽ$�HDŽ$�HDŽ$�HDŽ$�HDŽ$�HDŽ$�HDŽ$�����H��I��L�����I��H����H��H�5�H���ɥ�����H�5�UH��譥��tyH��tLH�D$L��$�H���H��L��H�H�p(�0���t!H��$�H��xu�X����DL���P��H�t$I��1ɺL���i8H����H�|$H�5?4诱�H���FH����L��$�H�4H��E1�L��H�5���i0���9I�A�W H����f�����PfA�G H�D$L��H��H��H�H�p(�0�D$0����H��$�H��x���X����D�t$0E�O M�GE���
�D$0H�
�g��A�W E1�H�߉T$ �L��T$ H�����{s��f���{��fA�G H����#H�D$L��$�H�I�H��L��H�H�p(�R/���V*E�O M�G1�1�H��$�H�
gH��2����E����D$ �D$0�~Df�����PL��$�fA�G H�������M�GA�P�D$0H�
SH��$�H�d21�1��[�D$ ��E����H����L��$�H�D$L��H��eH��H�H�p(�i.����H��$�L�2A�F����A�~t#A�~H�T$(��L���:�H��$�L�2�I,f��H��$��H*�H���\��Y�
�
.�f/��l�H,�H��$����$�Hc�E1��L��$�H����M��D$<jH��$�PU�T$,H��$��;�H�� H��H���k
L��1ҾH����H��$�E��A��H���q�t$H�|$1�H�@|�jH��$�荂H��$�HDŽ$��t�E����'D�l$0E���=HDŽ$f�)�$Ƅ$)�$�H�D$`�D$ �I���H��H�߉���󉃘���L$P�^+H����H�}tjE1�E1�1�j1ҾH���S+AZA[��$�L��$����D$@�ZL��H��H�5љH���9,��uH��$�H��x�`L��H���H��E1�H�5���,A�����y"L��$�I��B�����zt'�z�2H��D�D$(�ՒH��$�D�D$(H��1��D�D$(H��$�H�s��AM����&HcD$(H�D$(D�D$ E��� I�w(H�T$(H��t�>uH�5buL���I�0t&L�t$(H�5H�L��L����I�w0L��L���ъH��$���L�t$(H�5�.L��L��諊H��$�L��L��蘊L��H�5�(L��膊H��$��)�HDŽ$�L���U��L��H��H���WH���H��$�H�(QH��H�5��*A�ƅ���H��$�H��$�HDŽ$�H�L$ H�:�G<�E<�-L��$�M����A�<$���t$4���L��E1��ʁL��$�H�D$HL��蕊�L��H����d��L��$�H�5�-L���s��L��H�5�-H��A���]��D��L��H�5�-��H��DE��A��L��H�5�-D���H��DE��%��L��H�5I-D���H��DE��	��L��L�d$hH�58-D���H��DE����H�|$hD��� H��DE�D����D$XD���A���~~A���d���D$0D�l$ E1�
L���+��H��u�
L�����H���8����t$H�|$H�0*1���L���1��H��$��~1�H��$�dH3%(H���*#H�ĸ[]A\A]A^A_�fDL��$�H���"���E�O M�G������t$H�|$1�1�H�t)�gL������DH��$�H�8��=A�����H�������E�O M�GH��$�H�
�_1�1�H��+���E�����D$ �D$0@H���HDŽ$�H�@H��$�����@H��$�H�D$ �D$XE1�E1�H�D$HI�WH����H��H�T$h��H�T$h��H���{��I�wL�����:f�I�WH��t(H��H�T$h��H�T$h��H���B��I�wL��膨�L��螇�1�L����(��H�t$(H��*L��H��$�H��1�������H��$��|HDŽ$��D$X���d
E��uFD�\$0E�G I�OE���hfA��Pt
fE���oH�t$(1�H��*L���A����yH��t<H��$�H��H��H�5˓�6&��uH��$�H��x�=DH���L�` M��tA��uL��蚆�H�pH���<H�|$HtH�|$@t
A����L�d$HL���f��L��H��H���hH�ߺH�5�#�TL���z�|$@t=H��$�H���H��H�5��w%��uH��$�H��x�fD�H�5=#H����
D�T$4E���6I��`�I��$�H�L$ �H�5����H��$�H��H�H��$��A�ƅ��[H��$ H��$��H��H��H��$�H�D$H��H����H��$�	��D�d$A��H���1H��$�H��(H��H�5��s$�D$@����
H��$�H�8�:A	�E���D$(�D$(��$��D$@=/�A=-}=�t=��XDŽ$�H��$�H��t��
H�B����E1��yH��$�H�|$H�@I�ĉp�@H��$���{H�T$ E1�1�I�$H��$�A�E1��@H��$�H�8�^�H�C\H�D$hH��$�H�D$pH��$�H�D$xH���S����M��tL���xH�L$ 1�1�H���MI��H�����<
��
<
�VE1�M���bD�T$XH��M��M��t$xH��$���$��D$`P�t$H�L$<H��$�H�|$@�?�H��0I��H���T�����$D�T$X��E��u~��$�L���zH��I��H��$�H��$��l
������M��tGH��H�s\E1�M��H��$�H��PH��$P��$��D$`Pj�L$<H�|$@��H��0@��$���tH��$����$����$��|$(��H��$H��t(H��t#H�}tjE1�E1�1�j�H��� A\XH�߾�	&H��$�H��t�'MHDŽ$�H��$H���{HDŽ$�H����H���D�H�5�%H��踕��tL�H�5�%H��蠕��t4�H�5�%H��舕��t�H�5�%H���p�����H��$�HDŽ$L���L���H��$�����I��H���!H��$��H�59%H���������H�5%%H�������j��$�H��I���PL�D$H�L$H�T$(H�|$ �(�_AXH��$�H���uDH��$�H���5I��H���@H��$�H��t0�t$H�|$H��n1���H��$��?uHDŽ$�H��$��&uH��$�f�HDŽ$)�$)�$�Ƅ$H�����D$PH�D$`H��$H������tM����H��������t$4����H��tLH�EH��tCH�@ H��$�H�EH�P(H�E�HH�}tj1�E1�E1�R�1�H����ZY�D$ ���D$P	��H�{`�Hǃ�H�t$��}�����L���0����N���H����1������t$H�|$H�!1��H��$�H��t��sM�����L���s������H�����A���
A�� ���H�5H����H��$�H��H�HcPH�0���&s�@H���@H��$��;6H�L$ I��`��H�5>�I��$�����ujH��$�H��$�H�
�ytY�I�@�HH�:�v�!H��$�H��$�H�:�o 'H�@H�GH��$��r����DH��$�H��$�H���@E1��@I��$�A��jH�5���%�AXAY����@L��H�يH�5w�H���������H��$�L�*A�E����A�}H�T$(t'A�}u
A�E���:L��臃H��$�L�(A�E��$��*�@1ɺ�H����H�H�D$`���L��L���ŝ���H��$�H�=�q�L7�������H��$�H�t$(H�= L��������\���L���|�L��H��H����A���DH��$��3qE��������D�D$@A�L���M|�E�DIc�H��H�D$(��pI���GET �@��fDH�T$(H�56L���{���H��$���H��$�H�CP���f��T$`1ɾH����<����fA���������H�t$(1�H�2L����������f.�L���x{�L��H��H���z�l�D1�1��O�BpI��H�CONNECT I�I�wL�\$@H��H�t$(�,{�H�t$(L�\$@L�pI��I��M��I�{H��L�\$(蠄�L�\$(A�NM�M	M9���M�H���������A�:L��$�A�O M�nƄ$��@H��H��H��I��H��H��H��H�H)�H����0A�EH��	w�M�FM)�M���2
K�I9��}
K�<L��L��L�T$HH�L$@L�\$(���L�\$(H�L$@L�T$HL�i
M9��cL�L��L��H��H� HTTP/1.�A0

H��A
L�\$(��L�\$(I9���L���nA�$f�1ɺ�L��H���N�H��t��$�<
w�I��s�1ҾH��蘦��x�H����������t$H�|$H��1����H���;����fDH�D$H�
1�H�x	�ː�D�d$�D$@A��H����H��$�H��H��H�5	��t�������E��H��$��D$(�D$(��$�H����D�t$@�1�A�~
tq�H����t$H�|$1�H���5�H��$�E1�H��tH��L���JmM��tL���=mL���5mH��$H���Y����Y����M�������A���@< ��<	�xH�t$ L���c�����fD�\��H,�H��$�H��$�?���A�F�������A�F�blH�T$(H�H��$��Ao6H�0I�VH�PH��$�H�8�v�i�H��$�H�8�GH��BL�0���E��H��$��D$(�D$(��$�H����Ƅ$ �D$@H�}���j�E1ɾ	jD�D$PH��H�L$X�JH��$�XY�V�H�8��A��Xn�D$ H��$��D$0�3�L��E1��}k�D$XH�D$H���E���D$(�L$(��$�=/��=-���=����=����H��$�H���sƄ$ ��f��B��������D�D$H�BH�T$(�jH�T$(D�D$HI�H��$��o:H�8H�RH�PH��$�H�8�vD�D$(�H��$�D�D$(H�8�GH��BH��@�f����H�T$(A�E�*jH�T$(H�H��$��AomH�(I�UH�PH��$�H�:�v�0�H��$�H�:�GH��@L�*����L��1�H����jI�wH�D$(H��H�t$@�u�L�\$(H�t$@H��I�{�~�L�\$(M���=	1ҾO1���iA�NA�I��I������H�8���&lH��$�E����
�D$ A��k�f��|$@��"H�}�j��
H��jH�L$XE1�A���H��$�^_��@���H�T$(A�F�hH�T$(H�H��$��AoH�I�VH�PH��$�H�:�v�H��$�H�:�GH��@L�2���H��$�H�T|H��H�5������7�H��$�H��x�"��H����H�t$(L��1�A��H�7���L��H��H�H��H�D$(�k����fDH�xH�t$X��gH�t$XH��L��H��H�D$X1���L�D$XHc�H����A�L��H����L�D$XM���i�L���g�\��L����r�L��H��H����H���X�H�}�M�j1�E1�E1�j1ɾH����XZ�+�@���D�D$H�BH�T$(�gH�T$(D�D$HI�H��$��oH�H�RL��$�H�PI�>�vD�D$(��L��$�D�D$(I�>�GI��@I���fDH��$�H���i�H���� 
�W�H��$��J��H��$�=����X�����w�����H�?A�E1�1�1��`&��I��H��$���A�����L� M��������DD�hE�������$�t#A����	A���u�H��8HEAD�f�L���q�E�DIc�D�D$HH��H�D$(�eI��H��$�L��H��HH�0�QHc��roL����p�A� L��H��}fE�LH�5�}H���D�D$H������
��H���c���fDH�߾1��I�t$H�|$1�H�L����D�DH��$���I��M��M���I���1�1�L�D$@L�T$(�
eL�D$@L�T$(I��H��L��L��L��L�\$HL�T$@H�L$(�y�L�\$HH�L$(L�T$@M�������1ҾO1�A�
�dI��H���A0

L��L��H��H� HTTP/1.�A
H�L�\$(��L�\$(I9��}�t$H�|$1�L�\$ H�~���H���,L�\$ M�����fDL���d���H�q�1�1�L�D$X��L�D$X����@M���L��I���1�L�L$@L�T$(��cL�L$@L�T$(I��I����f�H���L��1�H�L$(�cH�L$(I��H����f.�HDŽ$�H�H��$�E1�H��H��$�H�8��1�1�L�|$HL�l$XI��L��$�D�t$hI��H�\$pH�\$ H�l$x��H��$�L��H�H�8��H��$�L��H��H�H�8����u]H��$�H��xu�Lc@M���OK�,I9��
H�0K�<4L���sw�L�uM9���I�,�
f�9�u���DL��L�|$HL�l$XD�t$hH�\$pH�l$xM��t4A�L���m�L��A�1�E1�1҉��;"��L��H��$��bH��$�H�8�G�b���t$H�|$1�L�\$ H�9���H����L�\$ ����DM������f.�L���L��H���1�L�D$PL�L$HL�T$@H�L$(�aL�L$HL�D$PI��L�T$@H�L$(J�<���@I��M��M���I���1�1�L��$��gaL��$�I��H��L��H��$�H�HcPH�0��u�M���s���1ҾO1�A�N�"aA�I��H���_����M�GA���s��L��H���1���`L���I���*���D�l$ E1��D$0�C�L��H���1��`L���I��J�<0�N���@M�����@L���k�L��I�ƉD$H�bMc�I��L��H����E��H�5�L���if�H��tsK�4H�Ǿ
H�D$HH)��{�H��$�H�L$HH���H�HO�t4�H��I)�H�L$HMc�L)�H�L����H�L$HL��L��H��譇�L���j�D$HH�5(L����e�H��tLLct$HH�Ǿ
H�D$HK�4H)��{�H��$�H�L$HH����H��K�T4�L)�H)�H�t�A��L���I_L��$�L���yj�L��A�1�E1�1҉��2��H��$�I���_L��$�����OA�N����Ƅ$ �D$@��A���D�l$ A��m����A�E�^H�T$(H�H��$��Ao}H�8I�UH�PH��$�H�8�v��H��$�H�8�GH��BL�(�Z��OA�N����I�_H����H���ti�H�߉����I�_Lc�I�L9����x�H��DH��I9��h��Bt�H��$��t$1�1�H�|$H�G
��H��$���]�/�H�ߺ1H�5X
��H��
1�1���֡��H�t$(L��H��1���L��H��Hc������HDŽ$��;/�J�{�M�g(M����/L���_x�H���6�@I�O(H��t	�9/�4L��$H��+H�|$ 1�1��C�H��$�D�\$0E�O E���-fA��P�.H��M�G1�1�SH��$�H�I��AYAZH��$��\�_�I�_H��tfH����g�H�߉��H���I�_Lc�I�L9�sE�w�H���H��I9�t+��Bt��O���H�f�8GE�����xT�����>���I�_(H��tcH���Sg�H�߉��ٰ��I�_(Lc�I�L9�sB�v�H��	H��I9�t/��Bt����H���L)���
���H��L)���g���H��$����fA�������M�GI�I��1�H��$�H��
1�������H�߾�{
�t$H�|$1�H���$����H�L$H�t$H��
1�H�|$����H�|$ H��1�1�H��)�f�H��$�����H��$�HDŽ$����A�<$t0A�$/L������y����L��$H�A����yv�L���ZH�=VO�]I�G(�v���D�t$@��H��$��
1�H���Ƅ$�<���D$@H��t�H�}�l����H��$�H��xtE�O M�G���A�����D$0����H��$�H��u�Ƅ$ H���
���H���D$PE1�1�H�D$`��ff.�@��H��jj�?��H���f.���LJ�1��ff.�@��1��f���H������@��������fD��SH��H�Ӊ��>�H��[�f���H��H��/Y1�H������AUATUSH�����L�g��u\I�� �H��H��I�u H��tnI�$A�m<H)�H9�vNH��H��t4H�H��H���m�I�$H���LJ�fDI�$1�I�$H��H��[]A\A]�LJ�I�$�H�@�H�@pH��t���H���Hc�H��u
ǃ�A�I�$H���AWAVI��H��H�5֡AUA��ATA��USH��dH�%(H�D$1�H��H�����H��tH��M�~�$fDE��uAH��H�5��1�躄�H��H��tRE��t�A�V\1�H���o+H��tZH��L���1E��t�A�V\1�H���L+H��tWI�~(H����0�f�H�D$dH3%(uMH��[]A\A]A^A_ÐH��H��1�1��舛�S���H��H��1�1���h��8�����r�ff.���AWAVAUM��ATA��UH�պSH��H�5�H��H���dH�%(H��$�1���u�H�SH�5���HDںH����u����H�{�H�5XA� �u��tSH�5|�H���$��1�L��H��@���H��H��$�dH3%(H���H���[]A\A]A^A_�@1�H�{�
��x�H���7I���f�H�5V�H���p���YH�5�5H���p���jH�5UH���p��uOA�ĀtH�����ti����WH�� `�H�
�1�H����H���*���f.�H�5p$H���!p���A�Āt+H�����uA���F1������H�@��H�=�H�0�A��A��E��D%�v?��H��<�vv?L�(H�T$ 1��D��H���H���o��u�D$8%�=���M����H��L����EH���@���H�5��H���A��1�H��@���CH������H�ǀ`�H�
�1�1��q�H�����f�H�5L#H����n��tmH�5F#H����n���~H�@��H�=�H�0��������su?�P�ju?����H��<A�L�(���DH�@��H�=JH�0��������!u?�P�u?����H�%�<A�L�(����1��Qy�A��A�������H�T$ 1��D��H���H���um��u�D$8%�=��1�H��D���CH��H�������D���̃�����H�Q�1�1�1��)����@H���1�1���1��d���@��x�A���@���fD�H�5�H���q�A�ƅ���rH���\\�wH��I���L\�M����A�H����H��H���]�H�߉���TH�5)H��I���lX�H����E1�H�x
L��D��H��H�D$�YL�L$H��H����A�L�d$I�E��L��H�5�FA���~�H��H��u9��H�u�1�H���m���L��H�5OF1��|~�H��H��td�H�5�H���p��t4�H�5�H���p��t�D��D��H��H�߃������fDH�u1ɺH������L���(Q������v�A�����1�D��跥H��H������H����H����1�D��蒥H��H�������پ+H��H�D$�Z�H�T$H��tRA��Y����+H���Z�H���C���A��aH���dZ�D���H��DE�����H���m���H��t�A�����H�L�1�1�联L��1��7P������k�f.���US��H��H��@������@�� ui�H�=}�ص��uy������������������@��À������u	�� ��H��[]��������t���H�=�_���t����1��H�5
�
��1��H�5T����
�����W�����������^H�5��1��k
��1�H�5���X�������~��H�5������1��H��H�5��#
��1��H��H�5��	��1��H��H�5������1��H��H�5������1��H��H�5�����1��H��H�5����1��H���H�5�����1��H��H�5���m����
�����.����
��H�5�������1��H��H�5��/��1��H���H�5�����1��H��H�5{����1��H�%H�5{�����1��H�CH�5l�����1��H�IH�5d����1��H�d�H�5j����1��H�]H�5`��y��1��H��H�5T��_��1��H��H�5>��E��1��H�6�H�5?��+��1��H��H�5+����1��H�{H�5��
��1��H�
�H�5���
��H��H�5�1����
��1��H��H�5��
��1��H���H�5��
��1��H��H�5��u
��1��H��H�5��[
���������%����x��H�5����	��1��H��H�5���
��1��H�0�H�5���
��1��H���H�5������1��H���H�5������1��H�iH�5�����1��H���H�5�����1��H���H�5�H���1��H�2�H�5�c�g��1��H�c�H�5k��M��1��H�'H�5c��3��1��H�T�H�5Z����1��H�M�H�5d����1��H��H�5b�����1��H�H�5ec����H��H�59�1�����1��H�%�H�5,����1��H��H�5��}��1��H��H�5�Z�c��1��H��H�5��I��1��H��H�5
��/��1��H��H�5����1��H��H�5��
��1��H�
H�5���
��1��H��H�5���
��1��H��H�5��
��1��H��H�5��
��1��H��H�5�Y�y
��1��H��H�5���_
��1��H�H�5���E
��1��H���H�5?k�+
��H��H�5b�1���
��1��H�S�H�5j��	��1��H���H�5U���	��1��H��H�5@���	��1��H�4�H�5J��	��1��H�{H�5K��	��1��H��H�5F��u	��1��H��H�53��[	��1��H��H�5��A	��1��H��H�5
��'	��1��H���H�5���
	��1��H�GH�5�����1��H�uH�5�����1��H���H�5����1��H��H�5Dl���1��H��H�5����H�H�5�1���q��1��H�#H�5��W��1��H���H�5��=��1��H�/H�5���#��1��H�=H�5���	��1��H���H�5������1��H��H�5������1��H���H�5�����1��H�H�5�y���1��H�SH�5q����1��H�aH�5`��m��1��H�oH�51��S��1��H��H�5E��9��1��H��H�50����1��H��H�5����1��H��H�5�����H��H�5�1������1��H��H�5�����1��H��H�5����1��H�M�H�5����1��H�S�H�5��i��1��H��H�5��O��1��H��H�5��5��1��H��H�5����1��H��H�5����1��H�#�H�5������1��H���H�5������1��H���H�5�����1��H�]H�5����1��H�sH�5|����1��H�yH�5l��e��1��H�]�H�5h��K��H�lH�5Y�1���1����������N��H�58�����1��H�gH�5������1��H��H�5k`����1��H��H�5����1��H�	H�5���������@�������1��H�5����1��H�5	�l�������À�Q����1��H�5��F��H�5�	�1��3�������f�H�5v��1��
�����H���H�=��[]�y�f���H���2H�=t	�W��0H�=�	�F��+H�=�	�5��KH�=�	�$��&H�= 
���#H�=7
���H�=N
���JH�=]
���.H�=�
�ϧ�OH�=�
辧�H�=�譧�H�=�蜧�H�=�苧�CH�=�
�z��CH�=�
�i��0H�=5�X��DH�=\�G��!H�=��6��XH�=�H���!��H�E1���+t��-uA�H�WH���B�<	�w@H��H��H�DB�H��JЀ�	v�H��tH�>H��H��E��HE�ÐSL�H��I9���I�@<+��<-ufI�@I�PD�@�A��	wkA�1�L��H��J�\@�H�D�@�A��	v�E��uHH��H�H��Pu_H�?H���tH��[��I�PD�@�E1�A��	v�1���1�fDH���I�@I�PE1�D�@�A��	�q���1��f�H�QH�5e�1�H������"��H�5�
�1�H��������m������UH��SH��H�_H��t.H�� t�~H�� H��uDH�� H��u� H�t$�=?H�}H�t$Hǀ Hǀ t3H�� H��BH�� H�JH�� H�H��H��[]�H����H�E��f���H����ATI��UH��SH�_H��t?H�� H��H�JH��t�_�H�� H��H��uAH�� H��u� �w>H�}Hǀ Hǀ t+H�� H�� H�JH�� I�$H��[]A\�@�H�E�1���f���H�?H��tG@L�� H��J��M���!H��H9�tH90u�L�H��L�@�H9�u�H�� H��u���ff.����UH��SH��H�?H��tH�� ��=H��H��u�H�mH��tA1�H�� ~@H�|�H���:�H9� �H�� H���=H��H��u�H��[]���AWI��AVI��AUATI��UH��SH��hL�.dH�%(H�D$X1�A�]H������Ru<A�}:�Q�E1�H�t$XdH34%(D���LH��h[]A\A]A^A_��H�H��tCH�� H��H�JH��t �g�H�� H��H����H�� H��uݿ �k<H�}Hǀ Hǀ ��H�E�1��H�� I�H��A�]�C�<:�*���H�c	��Hc�H�>��fDA�};����I��A�M�,$I��@I��@I��@����f.�A�}:����A�MI�u��+���A�<	�����H�����9��H�����/w����fDA�}:�u���A�EI�}<+���0<	�Y���I���@<9��I��A�E</w��6���fDA�}:�%���A�E��0<����A�};�
���I�EI�$I��@I��@I��@I�E<+��
<-��
I�EI�M��PЀ�	�X1�f�H��H��H�TP�H��p�@��	v��-H��I�A�����H��w���@A�}:�e���A�UH�=�I�u�<�V��+�B���A�E�<�3���I�E�H����<H��x��0��
�����x"����H�PI�H���@I��@A�E<+u	A�EI�}�HЀ�	�1�f.���0H��H��H�H�H�D�@�A��	v�L��H)�H9���H���D$��L�,
A�}"uA�}:�I��M�,$�b���f�A�}:�U���A�M��+��A�<	�<���I�E�fD��9��H�����/w�����fDH���1�1��[}���fDA�}:���A�EI�]</��<,��<+����A�UI�E��.����0��	������@��.����:�������/�����H�����:vـ�E����;�/
��E�^����P��,����+�H����P��,�_��+�2����xH���WЀ�	�����
@��9�H�����/w����fDA�}:���A�EI�u<,��<+����A�E��0<	����I�E�fD��9��H���PH�H��/w����f.�A�}:�����A�E<,�H<+�p���A�E��0<	�`���I���f.�<9��I��A�E</w��6���fDA�}:�%���A�EI�u<,��<+����A�E��0<	�����I�E�fD��9��H���PH�H��/w�����f�H�� H�� H�J�q���f�A�EI�}<,��<+�����A�EI����0<	�������<9�RI��A�EI�U</w��c���1�H������f�<-�<�����0<	�=���H���Q���D<-�������0I��<	��������@<-�4�����0<	�����H���I���D<I�`<9�q<I����H�؀xN�����xF�����H���x;�����H���H�51�H��I�$I��@I��@�fA���N�H�5�H���JA����H�5�H���.A�A����C���I�D�$�@�`P��I�D�$fW��������<-�q�����0<	�����I�����H������<-�~<.����H���x�WЀ�	����H���@��/�������9�m	H�����;v�E�������0���fD<N�����A�}A�u���A�}N�j���I�E����A�EI����0<	�L������A�E��0<	�7���I�E����A�E��0<	����I�E�~�����:�����x"������+I�UH�XHE���HЀ�	�1�f���0H�L�H��H�H�,H��HЀ�	v�L��H)�H9��BI�4$E1����<:�����A�}{�����1�I���z�M�,$H��H���z���I��H�@I��@I��@M�.�E3�sE1�1�I�EI�L�k�H��XZH�8��~I�H�H�D$H���iH�D$8H���L�t$@H�$H�D$HH�D$���2H�S�o1�H�<$L��H�D$8H�PL���������H�D$8�@<t<����2H�S�oH��L��L��H�D$@H�PL���5�������H�L$8�A<�%<�hH�1�AD��PH��A��A��-u�FH�N�x�@��	wl��L�D>�A�8u_��v<0tVL��H)�H��J��0H�yH�L9��0�ID�Q�A��	w*L����H����0H�J�PI9��U�D�Q�A��	v�H�L$H�|$�~����WH�D$8H�0�xD��WH��A��A��-u�FH�N�x�@��	wl��L�D>�A�8u_<0u��wVL��H)�H��J��0H�yH�I9����ID�Q�A��	w*L����H����0H�J�PI9���D�Q�A��	v�H��E1�A�L��jH�|$��~XZL��H���Q�H�4$H����I�$M��t �P���}t	��;�oI��I��������H�PE1�I�$�8}A����D��:���x"����+M�EI�UIE�H�x1���HЀ�	w-D��0H��H��H�H�4H��HЀ�	v�I)�I9���H�7�8"�I�$E1��*��;��H��I�$H���
�I�U��+�.��-�I�UI�u��B�<	��1�H��H��H�DB�H��JЀ�	v���H��H������H�UH=���H��u.�w�H-H�� H=��tH���kH�� t�H9� �L�H��I�H;�<�H��tL��H���<�H�A�I��@I��@���;��H��I�$I��@I��@I��@I�EM�<+�!<-�:�P�1���	�1�H��H��H�TP�H��HЀ�	v��%I�A���<:���A�}"�}�H���t�I�L��L��L���@I��@H��ɔH���I��H���?�H��L��L��L���
A���)�<;��I��M�,$H���
�1���L�`�I������H�]H����I���.�DI��H�� I�����H����H�� t�L9� ���I�>tL���L�J��A�I��@I��@�r�H�����A�UI�E��/����.�L��m���H�T$H�1H�|$�5�����H�D$8H�|$E1�L��A��H�0誀�	����PЀ�	w"I�M1��7�I�EI�M1��PЀ�	� �1��F��9�F��I������������/�����9��H�����;v�����e����&�H�t$HH������E���H����-H��L9���H����1�L9�u%����H��H��H9�tcI9����<\u�L�C1�H����q�@��	w���L9�t���q�@��wu���D���1���1��,H��L9��T�/H������;"��H�CA�I�$I��@I��@I��hI�H�8I��@�{��q�@�������D��b���H�t$HH�������M�$E1��D���:�8�H��1�H��I�$I��@I��@I��@I�.�~A��E��H��������1�H���,����B�<	���1���I�UI�u1��B�<	������I�EI�u�PЀ�	��1������uF�I�EI�u��PЀ�	�����1�H�������*E1��g�H��H�5B�H�L$H�$�L5�H�L$H�$H9���H�E1�I�$�.�H���"��v���H��I�$I��@I��@I��pI���,A�H�I��@���H�4$H����������-���0H����	�������)I�$E1���H�4$H����L��H������A��-��H�������H�T$H�|$H���`����H��I�$�N�I��@I��oD��A���3�I��@I��AD��A����A��-��H�����H�|$E1��L��A�H���|�����-����0��	���H�����:����x���1�������H�׉L$H�L$�f+H�L$H�T$0H��H�$�ΉL$H�T$ ���A����u{H�D$0L�M�,$��C�L��L��L��L��D�L$��D�L$H��H����E����H�<$�@(I������H����H���������;������H���H�@(H��t�8uH�@ܔA�L��h
�_�����'H���@H���@H�D$8H���H�P(�D$H���H��H��H���F����H�L$8H�׋qH�L$�5*H�L$�H�H�D$8�@H�D$HH�D$H�D$P�+'H�<$H���@H���@H�D$H1��H��H��H���B���TH�T$HH�<$�rH�T$(�)H�T$(L�T$@1�L��A�H�H�D$H�@H���H��jjH�T$HL�L$`L�T$8�Y^��L�T$(ubH�|$@tL���O�H�T$ �t$H�<$���A������H�D$0L�H�|$8D�L$ L�T$��H�|$��D�L$ L�T$����H�D$8H�u��1�H�1��jH�@ܔH�|$8L��h
L�T$���H�|$��A�L�T$���H�D$8H����1�H�1��,jH�@ܔA�L��h
�I���H�5\��1������H�5D��1�H�T$���H�T$���A��-�p���H��H���H�H���[���H���Q�M���H����A�E<+��<-��I��1�1��
Hk�
I��H�\�I�E�HЀ�	v��tH��I�UL��I�$H)�H����H9���I��XH����D�L$I���L��L����D�L$��uI$H�CI�$�;}��E1�H�<$D�L$�$D�L$���T$H�4$I�>� ���J���H�<$�$E1��e��I���,���1���I�R�D�L$H�5��L�T$��L�T$I�>L���a�D�L$�_���H��H�5���1��a�E1��Y���E��D�L$tB�T$H�4$I�>� ��D�L$�5���A��-�Y���H��H�����H���D���I�$���A�����f�AWAVAUI��ATUL��SH��H��hH�|$H�?H�T$H�GdH�%(H�T$X1�H�D$(�PpH����I��H�D$0I���L�u�H�$H�D$@H�l$8H�D$D��#I�W�Ao1�H�<$L��H�D$0H�PH�T$�����NH�D$0�@<t<�9��"I�WH��L���AoH��H�D$8H�PH�T$�W����H�D$0�P��������H�0�PD���I��D��A��-u�FL�N�HЀ�	w+��H�|��?u<0u��wH��L)�H���6fDH�L$L�������KH�D$0�p�VH�0D�I��A��A��-u�FL�N�HЀ�	w,��H�L��9u <0u��wH��L)�H���g�H��L��E1�A�jH���o^_H��H����H�4$H����M��t(I�U�B�<;t<}��I��I����>���fDH�\$H�;�3�H��@ܔH9�h
t%H�;���	H�5��H�x0������H�|$(t
H�|$(���I�EH�PI�U�8}����H�\$XdH3%(��H��h[]A\A]A^A_�@H�t$@H���#����fDH�T$H�0L��訍��t,H�D$0E1��H��A�L��H�0�#t����fDH�t$@H�������f���0M�QHc�I9���A�AD�H�A��	�z���f.���0H�<�I��H�H�<xL9��>A�D�H�A��	v��C�����M�Q��0Hc�L9��ZA�AD�H�A��	��������0H��I��H�H�HL9���A�D�H�A��	v��s���H�4$H����1����DH�4$H����H��H����1��s���f.�H�L$(H�T$@E1�E1�H����D$HH�D$@�f�D$TH����D$PH��jjH�t$(�ZY����A��-tzH�������H�T$H��L�������@A��-trH���	���H��A�E1�H��L���Mr�����H��1�I�U����A��-u�f.�H��H���C���H���z���A��-u�f�H��H�������H����):�f���ATUSH�� dH�%(H�D$1�����H��1�H�T$�H�t$�������L�d$I�,$�}t�}u�E����H���05L�d$I�,$�}t�}u�E���H���5H�D$H��P����H�T$H��z��H�8H����xuj�������H�D$H�H��0H�D$H�H�8�wD�Hc�����CH�+�f����H�D$dH3%(��H�� []A\�fD1��輿��t-H�D$H�H�8�v����H�-��1�1��+a�CH������fDH����������E�I�$H�D$�oMH�H�UH�PH�D$H�8����GH��BH�(�}��������f.�����E� I�$H�D$�oEH�H�UH�PH�D$H�8�w&�GH��BH�(�}��������fD��H�D$H�8�ː�H�D$H�8�T���fD�C�8�%�H���1�H��1���_�T����j7�f.�AWAVAUATUSH���GH�|$XH�T$`dH�%(H��$�1ۋ�D$T�\$D�_�\$H�_�\$L�_H��$��\$P��F�NH��H������	��N�	��N���	ȉB�H9�uыL$DD�\$`�D$T�\$L�t$P�T$HA���y�Z��D�t$dD�T$h��D�L$lD�d$t���E���y�ZD�l$x1���$�!��1�A���A��6�y�Z��1�!�1ދ\$pƉ���Ɖ��A1�D��A��!���1�A1�D�A��A��D�E���y�ZD��A��!��1�A1�D�A��A��D�D���y�ZD��!�1�D�A��A����D�E��<�y�Z��A��1�!��1�A1�D�A��A��D�E��5�y�ZD��D�|$|!��1�D�A��A��D�E���y�ZA��A1�D��A��!���1�A1�D�A��A��D�D���y�ZD��D��$�!��1�D�A��A��D�E���y�ZA��A1�D��D��$�!��1�D�A��A��D�E��?�y�Z��D��$�1�!��1�D�A��A��D�E��7�y�ZA��A1�D��D��$�!��1�D�A��A��D�E���y�ZA��A1�D��D��$�!���1�D�A��A��D�E���y�ZA��A1�D��D��$�!�1�D�A��A��D��E1�E1�E���y�ZA��A1�D3�$�A1�A��D��D��$�!��1�D�A��A��D�E��?�y�Z��A��1�!��1�A1�D�A��A��D�E��3�y�ZD��!��1�D�A��A��D�D��$�E1�A��D3�$�A1�A�E��E���y�ZD��A��!���A1�D3�$�1�D3�$�A1�E1�D�A��A��D�|$A��D3�$�D�E���y�ZD��E1�!�A����1�A�A1�D�A��A��D�E���y�ZD��A��!��1�D�A��A��D�A��E1�D3�$�E1�A�A1�A1�D��A��8���nA��1�����A1��E����|$|A1��A��D1�3�$�A��D1��Ǎ�7���nA���$�E�A��D1�A1�E��D1�A1�A����������nA�E�D�l$|��$�D3�$�E��D1�A��D1�A1��E1������nA�3�$�A����E�A��A��D1�E1�D��1�E1����A�������nAċD$A심$�3�$�1�D��1�D1��D1�A�������n�D���݋�$�3�$�D1�1��É\$B��;���nE��E1�E1�A߉��Aߋ�$�A��3�$�D1�1��É\$B��3���nE��E1�A1��A�D����Aދ�$�3�$�D1�1��É\$B��+���nE��A1�E1�A��A�D���A݋�$�3�$�1�3\$�É\$ B��#���nA��E1�E1�A��D�E��A��A܋�$�D1�E1�1�3\$A1�D3\$ ��A�É\$��+���nD��D1�D�\$D1�A���D���݋\$3�$�1�3\$��F��;���n�\$D��G��3���nD1�D1�A��D�A��A��D�E��E1�E��A1��E�A��A��E�D�t$E��E1�A1�D3t$E1�A��A��A1�A1�D�t$G��.���nE��D3T$A1�D3T$D3L$A��A1��D3L$E�E��A�D3D$G��"���nA��E�D3D$A1�A��)���nA�E1�A��E�E��A��E�E��A��E1�A�����nE1�A��A�D��E���A�D��E��E1�1�3|$ E��D1�E1�A��1���A�A��3t$��F�����nD��E�D1�D1�1�3L$D1�A��A��1�A��D�E���A���L$$D�G��=���nE�׉\$<E1�F�����nD��A��D1�A��D�A��D�\$D�E��E1�D��A��1�D�D1�3T$��1�A��A	�D3\$��A��D��DщT$A���F��
ܼ�D��A!�A��D!�A��D1�3\$$D	�D�T$A�ۋ\$ A�A��D1�3D$E�D�\$D1�A��A��C��ܼ�A��A	�D��A���A!�!�A��;ܼ�D	�E��A���D��E���A	�A1�D��E��A��A!�!�D	�A��A���E��E��A��E1�D3D$E	�A�A����A��0ܼ�D��D!�E��!�A��D�D$ 	��|$3|$1��D��E��D1��A	���E!ʍ�ܼ�D�ى|$(�|$!�A��A	ʋL$D�A��A��A�1ߋ\$<3L$D1�3L$ 1�3\$��B��ܼ�A��\$,E	�E��A��E!�A!�E	�E��A��D�E��A���A��A���D��E�э�ܼ��t$0A	ыt$�\$$D��E��A!�D!�D	�E��A���D��E��D�T$�A��D1։�1�3\$(��B��ܼ�E��E	�D��E��E!�!�D	�A���A��D��A��΋L$D!�D1�3L$3L$,A1���L$4��ܼ�����D	�D!�	�ʉ��D��A��D1�A	�D1�3T$0�‰T$8B��
ܼ�D��A��A!�D!�A���D	�D�L$A���D��E1�A���A1�E��A��A	�D1�E��A��C��ܼ�D�D$ A!�A!���E	�A��D�A��A��E�>D�t$<A!�E1�E1�D3D$4D�d$A�A��ܼ����D�D$<	�!�D	�E���D��A	��E��E����|$(A!�A!�E	�A��1�3|$8A���l$$�Ǎ�7ܼ��|$@D�E��E��A��A�A��D��1�3t$,E	�E1�D1�D��A���E!�!�A��A��D	�E��A��A��ܼ��D��E��ϋL$0A	�D1�3L$<A��A��A��ܼ�D��E��A��A!�D!�D	�A��щ�A���l$D1�E�
��1�3T$@D!��‰T$B��
ܼ�A��E	�D��E��!�A��	�D���D��E���D���1�3T$4	�A!�D1�D!�A��A��D	�D��A��A��A	�A��l$(A��ܼ�D�d$D�d$ ȉ�A1�E1�D3|$8E1��D��A��E1�A!�!�A��D3L$D	�A��G��ܼ���A��A�A�D��D�L$A��9ܼ�D�L$,D�A��A	�E��A��A!�A!��E	�A��A��D�E��E��D�d$E1�D3D$<A�A1�E1�E1�D3L$A�A�D�D$A��ܼ�A��A	�D�L$D��A����A!�!�D	�E��A���D��A�����l$01�3|$@D1��lj|$��7�bʉ�A��	�b�1�D�L$4D1�A�������E1�A1��Aȉ�Aȉ�D��D1�1�D1�3L$��D���1������b���L$NjD$�݋\$81�1�3D$�B���b�A��A1�D��A��D1�A���D��A��D1�D�E��D1�3L$A��A��E1ċL$<A��A1�A���b�D�T$ Aԉ����A1�Aԉ�D��1�1�E���D1�3T$A��D1��‰T$$��2�bʋt$@�D�D�L$A1�E1�A��A1�A1�A�E��A��C���b�E1�A��D�D$A�A��E�A1�A��D3D$ A�E1�A��8�b�A1�D��A��A��|$D1��D��D3t$D3l$1�3|$$�t$���Ǎ�/�b�D��D1�A��1�D1�D1�A�����E1�͋L$B��&�b�E1�A��A��A�D1�E��A��D1�E1�E��A1�E������b�A��AՋT$E�E��D1�A1�1�E1�A��1���F���b�E�E��A��E�D�T$D3T$�\$ D3|$D1�A��1�E1���E1�A��F���b�E�E��A��E�D�\$$E1�A1�A��E��+�b�D��D1�D1�A��D�E��A��D�D�|$D3|$E1�A1�A�G��1�b�E��E1�E1�E�A��A��E�E��D�T$D3T$E1�A��D1���F��+�b�E��E1�A1��E�E��A��E�D�D$D3D$D1�D�D$A1�A��C��#�b�E��A1�E��E��E1�A��A��|$A��E�1�1�D1�A����E1�D3D$ 3D$$A��7�b�D��D1�1�D1�1�A��E���D���E1��A1ӋD$D�A�Í�
�b�D��D1�B���b�A��D��E��E1��DT$PDl$T�A1���t$LAƉ�L$H��A�H�D$XD�0�H�pD�PD�hH��$�dH3%(uH�ĸ[]A\A]A^A_��W%������"U��f���H�#Eg�����GH�H��ܺ�vT2H�G�����H�G���AWAVA��AUB��ATI��1�US�@H���G�����?ȋO@�ƉGD������)�ȉG��L�lA9�s#H��D��L��L��[]A\A]A^A_���I���݃�sv������tA�$A�E����M�oL���T$L������T$�)�A9�w����I�4,L������C��@D9�r��A)�I��_���f�I�$I�uM��H��I�EI�D,�I�D-�I)�M)�A�A��A���u���A��1�����I�<H�<D9�r��X����I�F�t2����A�$A�EA�D,�A�D-��-���A�D,�fA�D-�������UH��SH��H��dH�%(H�D$1�H�FH�H�$�F����?��7���8)�H�5u�>H������H��H���
���H��H��H�K�H��H�����W��P����W��P��w��P��W�H9�u�H�{H�1�H��H�CTH)��K\���H�H�D$dH3%(uH��[]�f.��x)��X����"�ff.�@��ATUSH��H�5��H���dH�%(H��$�1�H�L$H�T$�D$L�D$�{/�����H�l$Ƅ$�L�d$pH�������T$H�t$H�����H��L���|����|$��H��$�L��H���Q��H��H����������!�%����t��H������D�H�VHD��H��H)�s��CH�H��$�dH3%(u/H���[]A\�fD�C�L���D�CH���F!�fD��AWAVAUATI��H�5y�USH���dH�%(H��$�1�H�L$H�T$�D$L�D$�5.����H�|$E1�1ɺH�5A��a�H��H���L�l$H��$�L���p����fD��H��L������H��H��蛍A�ƅ��L�|$pL��L�����H��跳E�����|$��H��$�L���H���P��H�ދH����������!�%����t��H������D�H�VHD��H��H)�A�t$��A�D$I�$H��$�dH3%(uIH���[]A\A]A^A_�DA�D$I�$��A�D$�L���A�D$I�$���f����ff.����ff.���H�?H��t��������USH��8dH�%(H�D$(1�H�GH�D$H�$H��tW�D$H��E1�1��D$$H�l$E1�H��H���H�T$H��H�D$jj���XZH�|$tH��衹H��虹H�D$(dH3%(uH��8[]���ff.�f���AWAVE��AUM��ATI��UH��SH���H�|$H�~L�|$hdH�%(H��$�1�H�GH�|$8H�D$@�PpL���H�5�3H���k����)H���H�>/��D$xH�D$pƄ$��H�S�oL��H��H�D$XH�P�K&?��H�D$X�H�D$H��$��H�S�oH��H��H�D$`H�P�
&?�ցH�D$`�H�D$H��$��z�oH�SH�D$PH�PM���MI�U�@H�L�|$P�A��L��$�A���4H�S�o1�H�D$HH�t$8A�H�PH�T$p�@L�0H�D$HH�D$ H��$�H�D$@H�D$(H��jjL��$����A��XZE����H�|$@H���K�vH�D$@H�A�։T$M��tH�T$PH�I�UH��t
H�|$(�W�I�<$t9H����1�1���DM�,$M��tf�L�����L�����M�,$M��u�A��t*L�eM��t!�L����L����L�eM��u�H�C�o#H��$�H�|$8H��$�H��1)�$�Ƅ$�DŽ$�H��$�H�G�PXH�|$ 菶L��臶H�|$�}�H�|$�s��D$H��$�dH3%(�OH���[]A\A]A^A_�fDM����H�D$P�D$H�I�EI�<$��������A�����H�D$@�D$E1�M���{��������@������H���H�L$H��H�D$hH�S�o+H�PHcQp(�@H���H�|$8H�L$h�H�5a0���L���p��y���I�<$tKH����1�1���BM�,$�D$M�������!���f�H�A��1�1��B�����D$����$�@��AWAVAUATUSH��XdH�%(H�D$H1�H�D$H�D$(����H��I��L�l$�T	�I��@ܔL��H��D�xH��I��$HD���f�����L�d$I�$H���m1�1�H�=��>�u�H��H���-���H�T$H�D$H��H�2��H�|$A�H��H�5—�G�G��M���H�|$L��H�5�E�>��D$DH�l$(E1�E1�H�T$0L�d$H��1�H����D$8L��H�D$0jj���H�D$8ZYH��t�xH��u
H�8��苳��H���H��H��H�D$ �oH�RH�P�� ?��|H�|$H�L$ �H�5�)H�{��H�|$ �,�H�L$HdH3%(H����H��X[]A\A]A^A_�fDH�|$�H�5�D�z����D�.H���c�H��H�D$���{Hc���Ic�H��H��H�����H�L$H)�H�I��u"�V�A��.H����I��H��t6A�H����.*I��$HL��H�f�2H���B�P�Ed��u�H���L�d$M�������H��H���1�1��1��?���@M�l$L����L��L��������t]H�D$H�H�H��a���fDH�9��1�1��[?���fD諱H�CH��1��9�L��葱�`���L�D$H��1�H���1�I���?�:�����AVAUA����H�5&�ATI��UH��SH��0dH�%(H�D$(1�H�\$H�L$H���#����\H�|$H�G�PpH�L$�H�5�H����b����D�
~?1ɾ����1�A�H���H���dzI��H����D�
I?H�|$1�1�A�H���������1zH��H����H�|$H�G�PpH�L$ �H�5��H���`b��ulH�D$ H��yu^�S(����H�S HcqH�{9�t3�C,������!�H��H����H�D$ H�{H�HcRH�S H�H�1�8��H��L��E��uU���{0u,�C0�#�H����1�1��[=A�$H�EH�D$(dH3%(uMH��0[]A\A]A^Ð����f�H���x�H��H�D$ H��%����1���H���:����l�H��5<��H�=�H��,)���f���UH�=7�S��H����%�H�=?�?H��?H�)�>H��?H�?H�|?H�y?H�?H�?H��?H��?H�j?H�g?H�4?H�1?H�.?H�+?H�8?H�5?H�J?��?H�}?H�R?H�?H��?�7�H���fH��A�H�Ǻ
H�
"fH�5q��,A�H��H�
f�H�5K?�,1�H���1�1���z�1?����1�1�H�t����z1���H�|�H�=$��?�z�=�?���?��A�ع��
H�=r��(�A�ع��
H�=a��
�A�ع1ҾH�=S���A�ع1ҾH�=G��ԥA�ع��H�=:�趥A�ع��H�=0�蘥1�H��[]�����������SH��@ܔH��HH��t�TH��H�HǃH1�[����USH��H�5��H��(dH�%(H�D$1�H�l$H���o����D�
�?1�1������A�H���H���uH�����CH�8H�������H��H��������H���H��H��H�D$�oH�RH�P�!?��tH���	�H�L$�H��H�5����H�|$�V�H�MD�E H�ߺH�5��A��t�H�M �H��H�5����@H�D$dH3%(uH��([]Ð�CH�����ff.���H��H�N��1��l���ff.����H��H�N����I���f���ATUSH��H�5X�H��0dH�%(H�D$(1�H�l$H�L$ L�D$H��������K�uA���uH��1�H��ATA��H�%1�A��������sZYH��H���	�@\Hc|$�������I��H���Lcd$H�t$ L��L���"�D�E\H��L��H���H��H��������H���H��H��H�D$�oH�RH�P�)?�rH����H�L$�H��H�5����H�|$�^�H�MD�E H��A��H�5���|�H�M �H��H�5�����f��K�I��H�������CH�H�D$(dH3%(u	H��0[]A\���H�w/<��H�=��H���"��L�ff.����AVAUATUSH�� dH�%(H�D$1��D$����H��I���մ��H��H��tm1�L�l$L�d$H���4bH�l$�D1�H���^bE1�E1�L��L��H��H���b��t'��uՋD$H�t$�L���P�����f���H�D$dH3%(u
H�� []A\A]A^���f���AUATUSH��H�5
�H��(dH�%(H�D$1�H��H�T$L�L$L�D$���CH�������4$���Hct$���I��@ܔI��$H��H�����HcT$H�t$H�xH��I���h�$H��H��I��$HjE1�E�EH�t$�P� >ZY��t*H���R�H�D$dH3%(��H��([]A\A]�H�|$H�5�>�ϼ��u��CH��fD�H����E1�1�H�
=�H��I��$H�];Hct$�$���H���1�1��3�d���fDH���1�1���3�D����Q���AUf�AT�*�I��U��SH��H����q��q�Y��f(�fT�f.�v3�H,�f��f(��%_qfU�f(��H*����fT��X�fV��
�f/��;�H,���.��Lc�A�-�
J�I�$I��I�H��H�sA�VUUU�`fDI9��Ic�H�I9�s8M��L��I)�D��E��A��D��)RD9�tf��*��Y��,�Hc�H�H�QE����D����?�� �H9���H���D�c��A����� A��D׈��D�������0D��	Ѓ� D	��SD�A��A��<�A�����D	� A	�H��DLjA�Ѓ�?�P ����D�H��H9�H�v�A��{���A��-�����
H��I9������L9���I)�A��-����`�‰���� @���{Dֈ�‰�������0D��	Ѓ� D	�DƈAI�����S����<���D��	��� D	�DƈAI������?�B ��E�@�qH��A��,�
H���`
�Af�H��H�A[L)�]A\A]�f.��`H��H9��~��������\��H,�H��?����A`�`�H��A��-�������D��H��E1���?�� �A�����`�]���f.���AUf�AT�*�I��UH��S��H���~-�n�%bn�Y��f(�fT�f.�v7�H,�f��f(��5?nf(�fU�f(��H*����fT��X�fV��
�f/����H,����_�I�$Lc�I��I�L9���D�]H�}A�� A��?��D9��4�5	��%�mH��1��~-�m@D�A�<A��-tAf�f(��A*��Y�f(�f(�fT�f.�v�H,�f�fU��H*�fV��D,�Mc�I�M9���I9���I��H��DD�A�I��H��A�� �4�����D��A������	��q�A�Q��� �������A	��Q�E�A��� ��?	�A�Q�I9�w�H��H��I�I��I��K�RH�J��A��,~KH�zI9�vED�ZH�zA�� A��?t2D9����L���]�H�������[]A\A]�DH��A��,�H��H��Hc�L)�I�H9�~�W��� ����������	ʈUA�EH��[]A\A]��\��H,�H��?����1������SH��H�5JH�� dH�%(H�D$1�H�L$H�T$����tY�t$��~QH�|$H�T$������x�CH�D$�CH��8D1�����H�j�1���-H�|$�T�@�CH�H�D$dH3%(uH�� [����f.���SH��H�5�H�� dH�%(H�D$1�H�L$H�T$�����tI�t$��~AH�|$H�T$�b�����x�CH�D$�CH��(DH�ٺ�1�1���,�CH�H�D$dH3%(uH�� [��:�f.����ff.���1�H�=�>�ff.���1�H�=�>�޽ff.���1�H�=�>龽ff.���H��tH�H��t���t���������UH��SH��H�_H�H��tH��P�KH�;��tW�R�H�{H��t�S��t"�=�H�}�G��t"H��[]�'���k�H�}�G��u�H��[]�U�D�K��f���AWAVM��AUATI��UH��SH��L�nH�|$I�}�D�L$�|L�}1�M��t!�L���8�L��L��I_ ��L�}M��u�M��tI�I�u�D$uH޸I�uH��[]A\A]A^A_�f�H�|$Iu1�� yI�u��f.��xI�E�v���f���H����H����AWM��L��AVAUATI��USH��H��H�G�o<H�t$ D�w@L�D$8L�L�M�+H�L$0H�T$(�O�D$H���A��DE��u#I�D$ H��tI�t$0H��tM���~fDD9�r	M���
D9��9I�t$ ���E��u��	�0�� �'�D$��A9L$����w]I�D$0H��L9��b�=H�JI�t$ I�T$0H��L�L$L�D$�?��L�L$L�D$L��H��I�D$0H�H��A�L$I�I���
�؃��=I����A�4��A�@�r�BH�BD9�sM��H��E���
������D�C߃�v�Cƒ�@�;�����vM����H�B�I����D9�r�I��I��H��E1�1�����A����������M���VH�B�I����D9��(��H���J���DI�|$ �u���I�D$0H��L9���=H�JI�t$ I�T$0H��L�L$L�D$���L�L$L�D$L���H��I�D$0H�H��A�L$I�����f�I�|$ �U���I�D$0H��L9����=H�JI�t$ I�T$0H��L�L$L�D$���L�D$L�L$L�N�H��I�D$0H�H��A�L$I��g���f�D��A�D�8D9������A�^I��H9���I��I��E���0���I��I��H��E1�1������H�|$ L�H�|$(L�H�|$0H�H�|$8L�/A�L$A�l$<E�t$@H��H[]A\A]A^A_�D1��DE1�1��f�L9�w���t1L�_1���I�D$ H���H�q�
H9�u�I��L�I)�A�L$E1�1��,����UH��H��H��SH��8dH�%(H�D$(1��EH�L$��J���u:H�D$H�8�t$�oH�\$)D$H�GH�D$ w0H����H���1҉EH�\$(dH3%(��uH��8[]�@H����s������AWAVAUATUSH��H�_H���H����M��H�T$(L�"H��H�M�;L�D$8H�-	�D�G4L�(H�L$0��H�t$ �OI��H���w8f.���w�Hc|�H�>��M��� A�I��I��1�1���fDM���LE�MH�T$�L$�t$D�D$D�L$���|$D�D$H��t$I���L$H�T$�Dx�@���A��AD�Pɍx�D��B�I��I��	����c������I���@M����E�MA�� ��A��	�~H�BH������H;z(�C���D88�9�����I��I��������M����A�}@��=�HM����A�>I��I��I��I������M���tH�zH����A��L;J(��B�<A8}�����d����A9���M���ML�JD��I��A��I��A�<9A�~��%���DM����A��A�}L;J(sL�RC8<
��@��	�=���@�� �3���H�лL��I�Ƹ����uSA�}
uI��I��@1�E1�1�1����f�I��I�������f�������������1�E1�1�1��_���f.��������H��H��[]A\A]A^A_�@�����j���fD��@��A��
u@��u'A��
���@������3�������,�����I��I��������H�лL��I�Ƹ@H�|$ L�/H�|$(L�'H�|$0H�H�T$8L�:A�FE�F4A�v8A�N�6���H��1�L��I�Ƹ�H��L��I�Ɖػ�H��1�L��I�Ƹ�H��1�L��I�Ƹ�H��L��I��1��s���H��1�L��I�Ƹ�^���H�лL��I��1��I���H�лL��I�Ƹ�1������AWAVAUATUSH��H�:H�^L�D$H��tmI��I��L�s諯D�CH�L��H�h H�xI�lj�����L��L��I�G ��I�<$H��u�H�D$H��tH�(H���[]A\A]A^A_�fD1���ff.����AWM��AVAUATUSH��H�:H��tsI��I��L�5��>1�@��A�L��H���>H�x�p H���\��L��H��Hk �=�I�<$H��u�M��tI�/H���[]A\A]A^A_��1���ff.����AWM��AVAUATUSH��H�:H��tsI��I��L�56�>1�@�k�A�L��H�;�>H�x�p H�����L��H��Hk 蝭I�<$H��u�M��tI�/H���[]A\A]A^A_��1���ff.����AWM��AVAUATUSH��H�:H��tsI��I��L�5֜>1�@�˭A�4L��H���>H�x�p H�����L��H��Hk �I�<$H��u�M��tI�/H���[]A\A]A^A_��1���ff.����AWAVAUI��ATUSH��8H�GL�H�T$M�8H�L$� L�D$�D$(H����H����H�L$H��H�L�1H����H���#I���L�%"��DI�u(H����I�U8L9��nL�����A�}$I��I�E8I)�I�I�����I��L�RH��I��������?A���C��s���@��	���A��B�C��s���@��	���A��B�C�A��BI���Y���H���L��I���y����D$(H�D$H�]L�0H�D$H�H�D$L�8�D$(A�} H��8[]A\A]A^A_��M������w/I�u(H��t&I�U8L9��lL������A�}$I��I�E8I�I)�I���9A�EI��H����H���I��I������?�A�B�A�EA�M����	����A�B��K�A�E����	����A�B��C��A�B�I�E����f.�I���&��w/I�u(H��t&I�U8L9���L�����A�}$I��I�E8I�I)�I���hA�EI��H����H��I��I������?�A�B��K�A�E����	����A�B��C��K�����	����A�B��C��A�B�I�E�H����D$,H���KH��tH�����D$,H�D$L�H�D$L�8�D$,A�} H��8[]A\A]A^A_��L�������M��t�I�EH�KH�PI�U�q�A�tI���H��H��I�E�S�A�TL��E1��}������w/I�u(H��t&I�U8I9��%L�����A�}$I��I�E8I�I)�I���A�EI����I��H�k�����?�A�B�A�EA�M����	����A�B�A�EA�B�=�����A�B�I�E������w/I�u(H��t&I�U8I9���L�����A�}$I��I�E8I�I)�I��vkA�EI����I��H�ʬ����?�A�B�A�E�����A�B��==fA�B�I�E�C���f��D$(L���5�����O����D$,����H��������AWAVAUATUSH�t$�H�T$�H�L$�L�D$�H����H����D�_D�G�E1�H�\$�H�D$�A���L�=�H�t$�D�WL�#H�\$�H�H�.H�A9�����D��D)���A	���jH����L�h�H��A���Ɓ�A	�����E���������Q�1�E1ۉ����A	�L���uVH����A��E�$H��I��E1�E1�A9��e���D��E��)։�A��JD��D)�E	��D��A!�1҅�t�A���-���DE��t���������GL���E1�����DA��E��A)Љ�D����N
D��A�A	�A!�L��H���M�����D�FA�E1�A��E	�D�_D�GD�WH�|$�H�H�D$�H�H�D$�L� H�D$�H�([D��]A\A]A^A_�D��1�D������@�GE1�u�D�o�[]A\E��DE�D��A]A^A_����E1��A��A��A)�E	��h�����L��A���f.����O0��tH�G(H��t�W@H�Dž�t���D�����ff.����O(��tH�G H��t�W8H�Dž�t�]��D����ff.����O ��tH�GH��t�W0H�Dž�t���D���[�ff.���SH�GH��H�8�HH��t��t����H�C�HH�Dž�t[����@��H�C�HH�Dž�u�[��ff.�@PXH�=^���H��H�
<H��j�����U�H��SH��8dH�%(H�D$(1�H�H�L$H�5���*:���uIH�D$H�8�G<t&�oH�\$)D$H�WH�T$ <w>H�����H��H�?�HI1�H�EH�\$(dH3%(��uH��8[]��H��� c�����f�ATUH��SH��H��0dH�%(H�D$(1�H�H�L$H�5��H���^9���uQH�D$H��xug�x��Hc��i�H�H����H�D$H�HcRH�UH�H�;�p�VH�0Hc��F��1�H�L$(dH3%(����H��0[]A\�D�oL�d$L��)D$H�@H�D$ �a��D$�xHc����H�H��t:HcD$H�t$H��H�EH�;��Hc�����|$$�z���L���a1��m������b��������SH�5Y����]�������uA����H��tU���H��H�=��>H�@H�@����[��f�1Ҿ���f�H�@�fD�H���1��`1�[�ff.����AW�A��AVAUI��ATUSH��HdH�%(H�D$81������f��H��H����M����A�E<�4<tA�}u
A�E����L�����I�]E�eE1�H����Mc�L��E��uu�@�H�EH����L��H��H���5��D�e�ED�}M����H��D��H�=��>�ۣH��H�\$8dH3%(H���H��H[]A\A]A^A_�f����H����H�E�@��H��H��t�M������H�E�ED�}�}���f.�H�����f���M��tH����H��1����_����H�D$(I�}E1�E1�H��H�$1���=H�D$0H�D$�[�B�#<H�D$0H�HcPJ�L9���H�0J�<H�L$���H�L$L�aM9��7H��>H�4$I�}�=H�$H�t$I�}�>���*H�L$0H�H�L$�zt�zu�B����H����H���<M�D$M9��N���I��$�H��1�L�D$��L�D$M��$�H��I�A�$<H������H�D$0H�HcHH��M�L���H���1�1�H�L$�d�H�L$H��H��H�D$0H�L$H�HcPH�0����H��H�L$���1ҾO1�A�N��A�H��H������DH���H��1�H�L$L������H�L$H�����fDH��H���1�L�D$L���H�L$��L�D$H�L$H��J�<�G���1ҾO1�A�N��A�H��I�������OA�N�������H�T$�B���H�L$H�T$H�H�D$0�oH�H�RH�PH�D$0H�8�v
��\H�D$0H�8�GH��BH��z�������@H���&���B�#����D���A�E�_��AoMH��I�EH��H�CH�� ��w�CI���C���@H��I���]\�{�C�C��������H�d<��H�=��H����9������@��AWAVI��AUA��ATI��USH��HdH�%(H�D$81�H��t
�~�6�.L�����H����H�X��E�����i�H��H�5��H��A��1���t=H�5��H��A�����t$H�5u�H��A��������M��tM�$$D�mL��E���W��HDž�H�EA�����kA����A���H�D$(M��tH�T$0H�t$(L�������@E�����L��H��H����L�d$(M����H���H�CL��L�t$0H�H��H�CH�C4����o� ����H����H�
��H�@H�H�
���H�HH�@H�ED��H��H�=o�>�ʝH��uE����H�����1�H�L$8dH3%(�?H��H[]A\A]A^A_���c��H��H���1���H��<��H�=&�H��G������DA���H�D$ M��tBH�t$ L��H�T$(�n���H�t$0L��������IH�|$ E1�H��t�G�H�D$ �HE�������H��H���X���L�t$ M����H�J�D�c L��L�|$(H�H���H�CH�CD�c$�O���6f.��+�HDž�H�EA�������� �x��N���H�5ɞH��E1��>���A��A���?�����C�H�|$ H��H����H���H�CH�H�9�H�CH�C H�C(�C0D�k@H�]�������H�|$(H��H����H�3�H�C4H�H�a�H�CH�C(H�CH�C�C D�k0��L����H����H��E���K��H�EH�EH��tH����H���}�1��t���fDH�EH���J���E��t�H������A���DH�D$ M����H�t$ L��H�T$(�D$�D$��H�t$0L���G���H�t$�L��E1�H�m
�s�H�t$�L��H���Z�H�|$ H��t��H�D$ �D$�T$E1���A�Dž�t3A���-�H��H�.��1��1��q���E1�E1��HE��������H��H�������L�d$ M����A���s���H����H�T$(D�sL��H�H�F�H�CD�sH�T$E���0�[�L�d$ H�T$H�C L��H�S0�C(D�k8D�{H�C<����T���H���h���H�)��H�CH�H���H�CH�C �C(D�k8D�{H�C<H�]H���;���H�E���fD���H�EH�EH������-���f�H�Y�H�CL�t$0H�H���H�CH�C4�a�L�d$(H�CL��L�s(�C D�k0������@H��D�c L�|$(H�H���H�CH�CD�c$�	�L�t$ H�C(L��L�{8�C0D�k@���Z���@H�\$0H�t$�L��H��
����H�t$L��A�޹H����������s���H�|$ ����H�=�j��H�D$(H�D$ �`���f�H�D$0H�|$ A�ă������H�������H�={j�E�H�D$(H�D$ ���f��;��H�T$�����H�EH�E�G����j��f.�AWAVM��AUATUSH��H��H�T$(�@D��$�H�t$ H�L$HL�L$0dH�%(H�D$x1�H�ɸIE�IE�I��H�D$hH��H�T$`E���/���H��H���`H���H�l$PH���)L�<$H�T$hH�D$hL�l$`H�D$H�D$HL�d$PH�D$H����H�;H�|$HM��L��H��!H�T$H�t$�Ѓ�������-����L�d$HM����L�l$hI�����L��H�{L��M��B��L���L�d$HH�D$hH�D$`H�4$H9����$�H����D����H�t$0H�L�H+D$hH�1���f.��˿H��H������������DH�D$pH�D$PH�sL�<$L�l$`L�%^�H�D$H�D$pH�D$H�D$XH�t$8H�t$XH�D$H�M��H�L$H�T$H�t$H��������Ic�L�>��H�KH�=�1�1�����$���t`H����������H�L$xdH3%(��H�Ĉ[]A\A]A^A_�f�H�K1�H�c�1���7��$���u�H����������DH�T$pH���+���H�T$h���t�H�|$H�H�T$h����D1�1��Ѓ����H�$H�H9��`��$�����H��H��H�L$���H�L$H����H�T$PH�H)�H��H�T$PH��H+$H�$HT$`H�T$h�D���fDH�D$HH���:���H�T$hH����H���H���H�pH��H�t$HH�qH����H�T$h�DH�D$8H�t$pH�D$X����H�KH�ݖ1�1�����C���f.�H�$H�H9���D��$�E���nH��H��H�L$@���H�L$@H����H�T$PH�H)�H��H�T$PH��H+$H�$HT$`H�T$p�P���H�|$ H�¹H��D��$�H+T$`莊H�������H�|$(H����D��$�L�|$`L��E���o�Z��H��H���oH��;��H�=�H��>������@H�D$h�5���f�1�H��H��H�L$螼H�L$H���
���H�|$ H�$E1�H��H+T$`��҉H���M���H�|$(H���,������@H�D$pHǃ������1�H��H��H�L$@��H�L$@H��������{���H�|$ H�¹H��D��$�H+T$`�F�H���V���H�|$(H��蠍D��$�L�|$`L��E��uS�V�H��H�������H�l$PH�T$pL�<$�����+�H��H���`���H�l$PH�T$hL�<$�Z���@����H��H��u��h���fDH��D��$�H�|$ H��H)¹萈H�������H�|$(H������������H�KH�ؓ1�1�����f���H�KH�:�1�1�����H����Z����D��AWAVI��AUATUH��SH��(H�L�nL�$D�L$dH�%(H�D$1�H�D$H��tzI��L�|$�H��蘋I�$H��t_H��H���d��E\H��L�C H�KL��M��L��PH���c���_AX��t�H���T�1�H�T$dH3%(utH��([]A\A]A^A_��t$��u H�<$tH�D$H�$H���fD�E\H��1�L��E1�H��L��PL�L$ ���ZY��t���H���y���1��|����)��f���SH�5,|>H�-�;H�&|>�@H��H�H��tH�sH�x�g����u�[�1�[�ff.����SH��{>H���;DH�xH���k�H�H��u�[Ð��ATU1�SH��H�dH�%(H�D$1��S���0fDH��9k~!H�|�H��t��(7H�D�H��9k�L�d$�����8���;1�L���N��Ń��tߋD$���H� ��H������H���H������ua��H��tH�������H�����ta�����H�߅�ta���H�D$dH3%(��H��[]A\�f.��k��H��t�H���^����H�����u�蘷���H�߅�u�膷�@�ĉD$�)���@H����(� ���f�H���N�����u��7����	��f���H����1�H�TH�=F�����:�_�>1�H���@��USH��H�5�H��(dH�%(H�D$1�H�l$H�L$H�D$H��������tLD�
	�>1�1������A�H��SH����6H��t"�t$�8����u�CH��fD�CH�H�D$dH3%(uH��([]����f���USH��H�5��H��dH�%(H�D$1�H��H���!����tLD�
Y�>1�1������A�H��RH���76H��t"H�$H�8�v4H����CHcH���CH�H�D$dH3%(uH��[]��i��f���AWAVAUATUSH��H�5�H��(dH�%(H�D$1�H�l$H���g�����>D�
��>H��1�1�A�H�R������y5H��H���
H���%xH���H��A��H�5����HcM�H��H�5��l}�W��H�t$���}���9E��1Ƀ��I�������E1�1�E1�E1�H�ߺH�5����D��H�ߺ	H�5����D��H�ߺH�5����L��H�ߺ	H�5���|H��H�ߺH�5���|L��H��H�5���|��CH�H�D$dH3%(u|H��([]A\A]A^A_�fD�D$I�������Ń�u��1�I�ԉƒ�����~4Hc�A�1�E1�E1�<�������A�I�����f.�1�E1����D��@��AWAVAUATUSH��XH�t$H�L$lL�l$xL��H�5�dH�%(H��$H1�H��$�HDŽ$�HDŽ$�HDŽ$�HDŽ$�PH��$�PH��$�PH��$�P1�L��$�L��$����H�� ����`H���L�t$x�xL�����	�H�D$xH��H��L��$��ѽ�H��$�f�D$l)�$�H����H�;�8"A�ą��m
�C<��<�yH�CH��PpH��H���cL��$�H��1�L��L��$�L��$��"H��$�D�d$(H��$�H�D$@I��H�L$�ef.�H����H��$�H��B��t6H�L$E1�M��L��L��H�ߍl(��"��u��$��T��E�@L��H���E"L��L��H���G#����	H��$�H�H�L$�zt��z�o����B���c������H�T$ �B�H�L$H�T$ H�H��$��o2H�0H�RH�PH��$�H�8����GH��BH��z�
�����f��H�=-�H���������H���1�����H��$�H��$�H��t�~�H��tH���q�H�|$x�g�H�D$�@H�H��$HdH3%(��H��X[]A\A]A^A_�fD�c��L��I�ĉƉ��IJMc� L��H��H�����I��H��tI���I)�D��Mc�~>J�\%�H9�w4H����x.��H�xH9�rH�ھ.H)�H���I��H��u�M���N�D%�L9�v�@I��L9���A�8/u�L�
ZM�M��L��IE�H����H��1�L��H�s�H�K8P1��J^_H���4�H�|$x�1��H�|$xH����H�\$x�r����8.�A���1�H�n�1��2�H����H�D$�@H��~���DH�D$0L��$�H�D$8H�D$8H��$�H�D$0H��$�H��$1�L��1�(H��H�|$ L��$��H�H��$�L��$�H�8��H��$�H�\$I���[��H��H�=��������R���H��$��C�H��$�H�H�8������H��$�H�H�L$�zt�zu�B���[H����H��$�H��$��H�H�8����_H��$�H�2H�T$�~t%�~u�F����H����H��$�H�0H��$�H�6E1�1ɺ,H�H�8�_H�������H�T$t��@H��� e��������D$t�CH��$�L����H��H�8����}H��$�L��L��H�8�����H��$�E1�1�M��HDŽ$�L��L��H�8��H��$��&H��$��H��$�H��A<�5<��	H�91�H��$��;����	H��$�H�H�L$�zt%�zu�B���{H���c�H��$�H�H��H�=u�H������������H��$�H��$��H�H�8�����	H��$�H�H�L$�zt�zu�B����H������CH��$��������	H��$���$���$�H�H��:w��K��s�C	�C�4���@�+-�D$�-H��1ɾ�����T$A��A�1�RH��$�H����C+ZYH�������H��$���H����b����=�����$����C����	�C���f����H�T$(�B�k�H�L$H�T$(H�H��$��o
H�H�RH�PH��$�H�8�w3�GH��BH��z�0��������s�K���D�;<H��$�H�8�fD���H�T$(�B�өH�L$H�T$(H�H��$��o*H�(H�RH�PH��$�H�8��w�GH��BH��z�
��������H��\����M����K�&I��L�%�����@���H�T$(�B�+�H�L$H�T$(H�H��$��oH�H�RH�PH��$�H�8�v�.;H��$�H�8�GH��BH��z�5����(������H�t$(�F諨H�T$H�t$(H�H��$��o&H� H�VH�PH��$�H�8�v�:H��$�H�8�GH��BH�0�~��������L�d$趯�Å����F����H��$�fo�$�ǀ�I��H�D$xA�EI���A�]A��H������*�j�:���L��$����H�D$0��H�D$8����D�d$(�A�|$�ĩ�}�I��H�D$0H��$�觩L��H��I��H�D$8H��$���L�d$H�l$@H��$�H�D$ H��$�H�D$(H��$�H�D$HL�t$�?@��u+L��D��L����H�D$L�(H��H�D$A�FI�DL��H���L��H��H������?L��$�M�&A�|$t)A�|$uA�D$���L����H��$�L� E�t$E��t�H�L$ H�T$E1�M��H�t$(H��M�$$����?�����$����`���H���H��$��xtIH�@ܔ�Q�H�������xH�@ܔH��(H��t	�?�[��$�H��$���L��L$@�Ժ�L���,��L��A�D=I�|�	��H�D$�L$@L�(H��H�D$A�DI��������A�D$�n�I�H��$��Ao$H�I�T$H�PH��$�H�8�v�x7H��$�H�8�GH��BL� A�|$��������L�d$�~��Å�������tJf.�H�L$ �E�H��H�YH�l��f�H��H9�t�{���;��t������f��;��8���H��~�1�H��1�������L��H��L�t$�����I��H�jL�#�����f�H�q~�1�1�����fD�[6H��$�H�8�t����C6H��$�H�8�1�����H��$�fo�$�ǀ�I��H�D$xA�mI���A�]A��H��t�v
�5H��$��f����E�M�uI�\��!f�I�I��I��L9���A�|$�>��A�D$���u�A�D$H�5���tH�5ͅ��t���H��tHD�E�|$1�D��蓓��D��H��1��|��H���z�������I��I���ʢIct$�H��$�I���@�fA�GHcEpL��I���{I�I�F�L9��2���f.����>H�|$L���"�A��H�}�1�1������fDH�!}�1�1�����H�W}�1�1�����H�e}�1�1��g���1��e�_���H�Ѿ1�1�H��}�>��a�H��|�1�1��$��G��J��8���H��{�1�H��1�������H�T$HH�5��HDŽ$�H��H�D$@�l��H����H�\$PH�\$HH�l$XH��� �H��H�5E�1��7��H��H��tiH��臬�H��$�H��H������u�H�|$@H�\$PH�l$X������肢�8�K��H��$�H�<{1�I���1��+��N�H�|$@L�t$�נH�xB1�1�H��$������H�B�1�1�H��$�L�t$�������I��Hc�L�5`zHk�H\$ �A9�t���(��I��L9�t:A�D$���t!E�,$A�l$D����_���y�L��蓵��A�|$������H��$�H��t�c��L��$�H�L$x1�E1�H��yH�5�yH�=�yM��t�������蓾���USH��H�|$H�l$�+2��A�1�1�A�������H��1���H��H��tH��H��[]�D�c!H��1�H��5��;A��1ɾ����A�1��H��XZH��t�H���H��u���HH��H����fD��H��t'H�t SH��H��UH�C[�f��ff.�@��AWAVAUATUSH��HI����t$H�\$@L��$��T$I��H��$0H�$D�D$L�L$ dH�%(H��$81�H�H�D$8H�@H�D$H�D$pH�D$(I�ƐM�}�Ao$�I��M�.I�D$I��I��AG�I�G���I�E��@�@L9�u�H�D$@Lcd$H�<$�@L� HcD$H�T$H�BH�H����7��H�T$P�BH�l$P�u���/H�<$膠H�EH�D$P�@H�D$XH�L$ H�l$81�A��@HcD$H�T$XH�H�D$`H��$��@H�D$`H�H�D$hH���@H�D$hH�H�`�H��8jjL�L$8H�T$�#{ZY���t|H����SH�{��SH�{��SH�{��SH�{ �SH�{(�SH�|$8tH���SH��$8dH3%(udH��H[]A\A]A^A_�f�H�D$P�@�	���f�H��x�1�1����j���fDH�59�1���<H�l$P�u����K��ff.�AWAVI��1�AUI��ATUSH��H��(H�?dH�%(H�D$1�H�l$L�d$����+A���H��1ɾ����AWH�|$ A��H���A�1��JZYH��tc�L�� H����S��uJHc|$��xA���%�T��|$���������?)ѺH��I	�A;}~A�}f.�H�;1��VH�;1�H���Y
���A���H�L$dH3%(�uH��([]A\A]A^A_�����AWAVAUATL�%��USH���HH��HH�t$H�l$(L�l$$dH�%(H�D$81��ߚH�;I����
E1�1�L��H��XZ���n�H�;1��dH�D$0�D$H�D$�i�A���H��1�L��AWH�|$8A��A������1���ZYH��t&�L�� H���R��u
Hc|$$���vaH�;1��'H�;1�H���*��t�H�;��H�;�F�1�L���
L�3�D$H�L$8dH3%(u}H��H[]A\A]A^A_�fD��T$$������2���?)�H��H�L$H���o���L�D$H�T$(L��1�A���A�H�|$0H��t��*�D$�7����c��AWAVAUATUSH��H��H�|$H�l$@H�;L�|$PH��L�d$pL�t$8dH�%(H�D$x1���	H�D$<H�D$�N@H�;E1�H�t$`I��L��L���O
��uH�D$PH��xt\H�5�u�1��I9H�;H���	H�;H��L���
��t�1�H�L$xdH3%(��H�Ĉ[]A\A]A^A_�@H�8L�l$HL���0	H�D$XH�L$hH�\$L�|$ H��I��H�l$(H�l$�f.�H�D$PL��H�H�8�-	H�D$PL��H��H�H�8�'
��uCH�D$PE1�M��L��H��L��H�H�8�T	��u�H�D$XH�T$hH�t$`H�|$H��CC두H�\$L�|$ H�l$(��跳��AWAVA����H�5�sAUI��ATI��USH��8dH�%(H�D$(1�H�L$H�\$H��H�D$ H��H�D$(H�D$(P1�L�L$(L�D$�Y^���tX�j���SH��1ɾ����UA��H���H��A�1��H��XZH��tH�\$��tI��������A�EI�$H�D$(dH3%(��H��8[]A\A]A^A_��L�}`�rL��迠�H����H���wL��H�\$蠠�H���H��H����H�D$tf�U\H�t$ H�|$�DjH��H���a���H�}H��E����Cm��uf�D$u(A�E�^H��1����b�C@H�I�$�*���@�U\H�t$ H�|$��iH��H�������H�}(H��E������l��t��H���<r������+L���ß�H�������wL��譟�H���
����aL��藟�H��������p���f��+L���s��H�������aL���]��H��������������k���fD��k�A����	��f���ATUSH��H�5�H��0dH�%(H��$(1�H�L$H��L�D$��������T$�t$H�L$�<$�$���u@H����W�|$1��}��|$1�I���o�A�t$pH��H���Oo�upH���Do�Bf����H�t$ �Hc8H�����M�1�I��H��q1����CH�H��$(dH3%(uH��0[]A\���ff.����AUf�ATUSH��H��xI�Š�dH�%(H�D$h1�H�L$H�T$H��H�D$ �I*EH�D$(H�D$0H�D$@�D$8H�D$HH�D$PL�d$0�FH�H�5woATH�D$PPH�D$HP1�L�L$@L�D$8�~�H�� �����H�l$(H������%��A�1�L��A��H�1\�����1��}H��H�D$@����}�YD$0�
��f/��}�H,�H��H�|$H��4�ׂ�CH��H��H�T$PHi�@BH)�H�L$XH��t�v
�$H�|$�GH�L�d$ M��t9A�|$v
L����#L�d$ A�D$1�H�=v�5�I�$H�D$ �@H�D$@Hct$H���H����H�����	�H�D$PH�D$XPUL�D$XH�|$0L�L$p��H�� H��H����H�|$8H��t��H�|$HH��t���CHcEpH�H�D$(H��tH�8�H�D$hdH3%(�}H��x[]A\A]�f�H�D$@��~���I�m0H���q����A;H��I�E0H�D$@�[����\��H,�H��?�u���D�t$H�|$1�1����L�Cx�H�OmH��H�D$HH��H��LE�1�1��x�H���0�H�|$8H��t�!�H�|$H��t�v
�L"H�|$HcD$�GH�H�l$ L�d$HH��tlM��t7�}vH���"H�l$ L�d$HL�����E��xOL�eH�D$ �@�CH����H�L$H�|$81�1�H�nl��+�T����M��t�L���s��H�5��1��0H�l$ ����f���ATUSH��H��@dH�%(H�D$81�H�l$ H��H�T$H�D$H�D$H�D$ �D$H�D$(H�D$0�FH�H�5�kUH�D$0P1�L�L$(L�D$ �ŸZY�����L�d$ M����"��A�1�H��A��H�zX�����1���I��H�|$H��t�v
� H�|$�GH�H�l$H��t5�}v
H��� H�l$�E1�H�=��ܑH�EH�D$�@�L$(Hc4$H��E1�H�D$E1��P��H�D$@PATH�|$(�=�H�� H��H���}H�|$0H��t�Ύ�CHcEpH�H�D$ H��tH�8�QH�D$8dH3%(�H��@[]A\�@�D$(����H�Š�L�e0M������8I��H�E0����H�D$0L�8uH�L$H�Dj�H��LE�1�1��s�H�|$H��t�v
�^H�|$HcD$�GH�H�l$L�d$0H��tNM��t9�}vH���+H�l$L�d$0L�����E��x1L�eH�D$�@D�CH����M��t�L��裍��H�5*�1���-H�l$��B��f���ATf�USH��H�5�iH��PdH�%(H�D$H1�H�l$ H�L$H���L�D$H��H�D$H�D$�H*@1�H�D$(�D$������v��A����H��H��1�ATA�������A�H�]�1��
^_H��H���4��YD$�
��f/����H,�H��4�ׂ�CH��H��H��H�T$0Hi�@BH)�H�T$H�L$81�H��t�z���BH�JH�D$(H�t$E1�E1�PH��H�D$8P�*�ZY��uDH�D$H��t:H�T$H��t�B�CHc@pH��R��\��H,�H��?�V���DH�L$(H��r�H��gH��HD�1�1����CH�H�|$(H��t讋H�D$HdH3%(u0H��P[]A\�D�CH���H���H�T$�
����)��f���ATUSH��H�5yTH�� dH�%(H�D$1�H�l$H�L$H���(����t]�
A���H��1ɾ����ATA��H���H��A�1��/ZYH��t"�C�t$E1�E1�H�KH��H�����t�CH�H�D$dH3%(u	H�� []A\��]��ff.�f���ATUSH��H�5�fH��dH�%(H��$�1�H�D$H�L$ H�D$H�D$(H�l$�D$H���D$PH�D$0P1�L�L$(L�D$��Y^������A����H��H��1�ATA��H�o�1�A�������
H��XZH����Hct$H�|$(����H���CL�D$0HcT$LD�D�L$H�L$H��H�t$ ��H�H�H��$�dH3%(ucH��[]A\�f�H�L$(H��f1�1����fD�CH��H�L$H�T$0�����t�H�|$(�Y����ͤ�ff.�f���ATUSH��H�5+eH��0dH�%(H�D$(1�H�l$H�L$H�D$L�L$L�D$ H��H�D$H�D$ 裱����
�
A���m
H��H��1�ATA��A������H��1��AXAYH��H����H�|$H��t����G�GH�t$H������誈�H��I��H�D$L��H��H�PHD�E1�E1�RPH�L$0H�T$(�E�^_��x?H�T$H��t�J��t�BHc�A�H�����z���CL�#�C� DL��蘇��CH�H�D$(dH3%(uuH��0[]A\�@�H�|$�G�G����fDH��N�1�1��s��CH��fD�C�sH�S�H�;�H��H��{���転�ff.���AVAUA��ATI�����USH��H�5cH��0dH�%(H�D$(1�H�l$H�L$L�d$L�D$H��H�D$H�D$ 莯������pA���XH��H��1�AVA��H��D��A�1��H��XZH����H�t$H��uA��~1�H�����xEH�T$H��H�t$ 1��aH�|$ ��H������t
H����yu`�SH�;�C�/@H�L$H�tL1�1����fD�CH�H�D$(dH3%(uSH��0[]A\A]A^��H�T$�������T$H���fD�C1�H�=L����CH���
��ff.�f���AVAUATUH��H�5naSH�����H��0dH�%(H�D$(1�L�l$I��L�L$L�D$L��L��H�\$H�D$���������A���H��1ɉ�AVA��L��A�H�5�1���Y^I��H�����A���oH����1�AVA��H���L��A�1��H��XZH��taH�t$H��~1�L������x)H�T$H�L$ H��L������u0H�D$ �EH�E�-�H�L$H��J1�1���F�fD�EH�EH�D$(dH3%(u
H��0[]A\A]A^�蒟�f���ATUSH��dH�%(H�D$1�����H��1�H���)>������{���dH��1ɾ����UH�|$A��H��A�1��H��XZH����H���FF1�H�پH���T���|H�}Pth����@I���@H�EP�oA$H�@H��I�D$H�� ��vL����L��
H�5/_H��A�D$A�D$�MVH�E@H��t!H�A��
H��H�5_H�H(�RH�EA��H��H�5�^H�H �aRH�M`H��A��H�5�*�CRH����
H��H+��H�5�^�JH�E1�H�x(t1������	H�5�^H���tMH���H��t%A��H�520H����Q�	@�c=H�D$dH3%(u{H��[]A\�f.�1�H�ߺ
H�5�]�
M��H��H�5�]��LH����H�5��H�߉���L�2���fD�CH��u��������AVAUATUSH�� dH�%(H�D$1�����H���p�H��H����H��L�t$L�l$��C1�H��L�d$�c��$��D$H�t$H���P��W]1�H���}�E1�E1�L��L��L��H�������t�H�D$dH3%(u(H�� []A\A]A^�@�EH�E��f��;���$��@��AVAUATUSH�� dH�%(H�D$1��D$����I���8H��H��tpL��L�l$L�d$�C1�H��H�l$���D1�H����E1�E1�L��L��H��H������t.��uՋD$H�t$�L���P��D\�f�A�FI�H�D$dH3%(uH�� []A\A]A^���;���4��@��AWAVI��H�5�[AUATUSH��dH�%(H��$1�H�L$@H�T$8H�D$P�D$4H��H�D$`H�D$`P1�L�L$`L�D$X�^_������L��$�1�H��L���H�L��$H��L���H�H��$�H��H�|$��H�H�|$8H��t�tuH�|$@H��t
���H�|$HH��t
��H�[�1�1���A�FI�H��$dH3%(��H��[]A\A]A^A_�L�|$4L��L����H�|$@��H��t
��yH�|$HH��t
������q����|$4����.L�|$PM����I��{t"�{u�C���5H���=�H�D$PH�H�3H���	H�L$XH�E[H������H��?B�H��L�|$pH��4�ׂ�CH��H��H��?H��H)�H�Hi�@BH�t$pH)�H�L$xH�\$8H��t
�{���D$4H�L$M��L��L��x诔�Hc؃���H�|$8H��t
��/H�|$@H��t
��+H�|$HH��t
��'A�FI��^���f.����D$4����fD1�L�|$4L��L������u����1�L�|$4H�t$L��������g���DH�t$pL�|$pH�L$x����@�H�|H�;H��H�D$��H��E1�1�H��XZ��H�l$`��H�;1���H�D$hL�d$(�D$H�D$ ��H�;1���H�;1�H���������A���H��1ɾ����ATH�|$pA��H��A�1���ZYH��t�H���H+��H��~�H�|$L�D$ �1�H�T$`A����H�|$hH��t�q�D$�W�����D$L�d$(����H�;���H�;�{L�|$1�L����L�;H�D$@H��tH�8�[�H�D$HH��tH�8�I�HcD$A�FI��k����L���h������L���X������H�t$�F�������H�X����@����C�@zI�H�D$P�oH�H�SH�PH�D$PH�8�w�GH��BH��}���f��;H�D$PH�8�ِH�\$H�����H���z����fD�k{�l$4�8H���-��A��I��H��W1�1���A�FI��c����z��f.���ATUSH��H�5KH��dH�%(H�D$1�H��肢�����H�<$���H��t[H�@D�c�k�oH�@H��H�CH�� ��w$D�c�kH�D$dH3%(uBH��[]A\�@H���(��fDH�!W�1��=�D�CH��覔�fD��ATH��UU��SH��H��@dH�%(H�D$81�L�d$H��H�D$H�D$ L��H�D$(H�D$(PH�D$PH�D$HP1�L�L$(L�D$H觠H�� ���t^H�|$���H����H�t$H�����CH�����������H�H�D$8dH3%(��H��@[]A\�f�1�L�D$L���H����#����u�H�V�1�1��	��CH��@H�L$ H�T$0H��H�t$(��"�CH��k����H��U�1�轻�CH��G����(�����AUATUSH��H�5H��(dH�%(H�D$1�H��H�T$�+�����H�|$�H��H��H����L�$$�CL�l$�
L��H�5�SI�<$����uLH�}H��t
� H�E�� H�
���H�5���H�EH�H�D$H�UH�H�B�@H�EH�pI�<$L��H�5O����t+H�H�D$dH3%(uqH��([]A\A]�f�H�D$H�0�~tBH�ST�1�1��m��H�9T�1�1��S��CH��fDH���X���x���讑�ff.���ATUH��H�5��SH��dH�%(H�D$1�H��H�$語���tUI�Ġ�I�\$0H��tTH�4$H��tH�������EHcCH�E�{��H�D$dH3%(u.H��[]A\�fD�EH�E��f���H��I�D$0����ff.����USH��H�5ڎH��dH�%(H�D$1�H��H�$�����tG�H�4$H��H��tH���.���CHcEH��}�[�H�D$dH3%(uH��[]�@�CH����N��ff.���H��H�N��1��|��ff.����H��H�N����Y��f���USH��H�5�EH��dH�%(H�D$1�H��H�����������1�H��A�A��1ɾ����1��'�H�`RH��H��tO�H���MH�tR���t6H�$H�8�C����t�H����O�CH��$@H�aR�1�1�軷�CH�H�D$dH3%(uH��[]����@��ATUSH��H�5PH��0dH�%(H�D$(1�H�l$H�L$H�D$L�L$L�D$H���D$������H�|$x|u	H�D$ ���A����H��1ɾ����ATA��H�A�H��A�1����ZYH��tNLcD$H�L$H�T$ H��H�t$�H��t-H�T$ H��C�S�'@H�qQ�1�1�蛶�CH�H�D$(dH3%(u	H��0[]A\����ff.�@��AUATUSH��(dH�%(H�D$1�����H��1�H�T$�H�t$�p,������������H��1ɾ����UH�|$A��H�4�A�1����ZYI��H��tyL�l$I�m�}t�}u�E��wlH����H�D$H�(�E1ҾL����1��s���t.�CH�����,H�D$dH3%(uxH��([]A\A]��CH�������E��pI�EH�D$�oEH�H�UH�PH�D$H�8�v
��H�D$H�8�GH��BH�(�7����n��ff.���AVAUATUSH��@dH�%(H�D$81��G�����I��1�H�L$��H�T$H�t$��*������;����$�H��1ɾ����UH�|$A��H���A�1��\�I��XZM��t_L�t$I�.�}t�}��H��肁H�D$H�(H�uH�t$ ����H�D$(1�H�L$ �L��������A�D$I�$��++H�D$8dH3%(�~H��@[]A\A]A^�f.��E���j�������E�$oI�H�D$�oEH�H�UH�PH�D$H�8�v
�6H�D$H�8�GH��BH�(�����A�D$I�$�R���DH�l$H�]�{t{�{u_�C��vW����C�nH�EH�D$�oH�H�SH�PH�D$H�8�v
�H�D$H�8�GH��BH�H���H�l$H�t$ H�]H��4�ׂ�CH�;H��H��H��H��?H��H)�Hi�@BH)�H�|$(H�EH�8H��H��?H��H��H)�H�H�T$ �:����ĉ�@��AUATUSH��(dH�%(H�D$1���t-�h)H�D$dH3%(�aH��([]A\A]�f�H��H�T$H���0(����������k�H��1ɾ����UH�|$A��H��A�1���I��XZM��tiL�l$I�m�}t�}u�E��w|H����~H�D$H�(H�EH�D$H��u>1�1ҾL���-���C����H��H�����fD�CH�����H�L$��L����������E�lI�EH�D$�oEH�H�UH�PH�D$H�8�v
�H�D$H�8�GH��BH�(�'������ff.���AVAUATA��USH��H�5
IH��0dH�%(H�D$(1�L�l$ H�l$H�D$ H�L$M��L�D$H�����������A�����H��H��1�AVA�������A�H�I�1���^_H��H����A��:�t$@����H���T����t�����CH��uf.�H�T$ H��t>�Q�A���9�H��1ɾ����ATA��H�ƜL��A�1��r�H��XYH��t�t$H���L���yH��CH�H�D$(dH3%(uWH��0[]A\A]A^���CH����t$�*���fDH�	J�1�1����CH���Y��f���ATUH��H�5�rSH��dH�%(H�D$1�H���b����t}L�$$I�$�C<��<t�{u�C��wgH���o�H�$H�H�;1�1��
H��t7�E�@������H�EH�D$dH3%(��H��[]A\���EH�E��f�����C�iI�$H�$�oH�H�SH�PH�$H�8�wy�GH��BH��{�V����B���f��[����D�H��1ɾ����SH�|$A��H�͚A�1��|�ZYH���Q���H�@@������+�H�$H�8�v����ʄ�f.���ATUSH��H�5�fH�� dH�%(H�D$1�H�l$H�L$H���ȑ���tH�|$v+�CH�H�D$dH3%(uhH�� []A\���{�A���c�H��1ɾ����ATA��H��H��A�1���ZYH��t��C�t$H��赣������H�������AWAVAUATUSH��H��$@H�T$(�L$hH�D$8H��$PL�D$0H�D$@H��$XD�L$LH�D$ dH�%(H��$�1�HDŽ$�HDŽ$�H�����AH���HH�|$ H��H������r�H�H�D$`L���1�H�����Lct$L�NH�|$`MLF�Lc�$HI��MI���HF�I�L$L��$�H��$�H�JH��$�H��$�HcL$hH��MH���H�L$XHF�I��MH�JH��$�I���HG�H��$�H��$�H��H��$�H��$�H�$H��$�H�D$H��$�H�D$H��$�H�D$H��$�H�D$PH��$�H�D$p�H�L$H�T$E1�E1�H�4$H����A�ă��H��$�A����H��t�8uH�|$@H���nH�t$1�H���������H��$�H����H�H�����@�P����Y���
<�H�{H�H��t5H���d	H�t$`L�<7L9{�	
H�T$`H�t$ H��z�L�{H�H���H�{N�<7L9{��H�t$0H�L���Mz�L�{A���H�|$(t6H�H����H�t$XM�$7L9c�	H�T$XH�t$(J�<8�z�L�cH�|$PH�p�1�1�H��$��TH�;��$�H���QH�KHc�L�$L9c��H��$�H��y�L�cH��$��dH�H���gH�{N�$/L9c�]H�t$8H�L���my�H�L�cH����M�|$L9{�^B� =H��$�L�{H�8�G<�n�<�<��wH�T$pH�?�h���H��$���$�H�;Lc�H���H�CN�< L9{��H��$�H�L����x�L�{H��$���c1�H�����E���D��$����k���Hcʀ|��]�������$��N���@A����H�|$PH���1�1�H��$���T$LT$h��$���$H�H��Hc��L$l�cI��H��H�D$0H��tL��H��L���x�K�4L�|$XH�t$(H��L����w�H��L�L��$�Lc�$�H��L��L��L�D$x�w�L�D$xI�L����bH�D$8H��tL��L��H��M��w�A�%5BH��$��EAH��B<�"<��H�:1�H�B�t$ H��1�RM��1�jPD��$��/����mAL��H�� �Ob1�H�������<���a�@I���@H��$�H��$�H��oA$H�@H��I�D$H�� ����A�|$uA�D$���]L���
yL��$������$�H��$�H�ǍQ�����������$�H�$H��$�H��$��p���H��$��l��$��/���D1�H��$�dH3%(�tH��[]A\A]A^A_�DH�H�|$P1�1�H�p��`�H�;��$�Lc�H����H�CI��M�x�O�NH�C1�1�M���`Lc�$�H��H�H�C����1�1��"����I���H��I���H�S1��`H�{H�����I���I���1�H�C�`Lc�$�H��H�H�C�H���I��$�H��I��$�H�S1��R`H�{H��y���fD1�H��?�1��;����������H�T$p��$�H��$�������$H�$�|$LH��$��G��Hc��D$l�{_I��H��H�D$0H�������L��H��L���it�K�4�~���H��$�1�1�M��H�CH��$�H�C�_H�{H�����@H��$�1�1�M��H�CH��$�H�C�P_H�{H��w���@I��$�I��$�H��H�S1��"_L�cH��x���fDH�`��H��k1�H�|$PH��`�����$����f.�Lc�H�CI��M���O�NH�C1�1��@H�BH��H�T$x�PpH�T$xH������@H��$�H�T$p��$��w���H�;H��$�H���;H�KHc�$�L�$L9c�H�H����r�L�cH��$���]�-����I��$�I��$�1�H�C�]Hc�$�H�KH��H�����fDH��$�H�C1�1�H��$�H�C�]L�{L�d$XH��:���f�I��$�I��$��}���L���`�L��$�A�|$�Q���A�t$H�T$pI�<$�i���H��$�H��$����$�����I��$�I��$��j���Lc�$�H�CI��M���O�NH�C1�1���\Hc�$�H�KH��H�H��$�����1ҾO1�A�H�CH�CN�\L�cH���H��$�H�C1�1�H��$�H�C�k\H�{L�|$`H��y���f.�I��$�I��$�H��H�S1��2\L�{H����fD1ҾH�=l;��CH�D$ H��t�8uNH���A��H�D$`H�D$ �2�fDI���H��I���H�S1��[H�{H�����H�������A�D$�6[H��$��Ao$I�T$I��H��H�PH�� ��vH���E�L��$�A�|$A�D$A�D$�����8���DI��$�I��$��/���I��$�I��$�1�H�C����������u����v�fD��AVf�AUATUSH��H�5I:H��@dH�%(H�D$81�H�L$�D$H�T$H�D$H��H�D$ )D$(H�D$8H�D$P1�L�L$(L�D$�E�ZY����H�l$�E�P�����L�d$D�l$L�t$<��H�}1�H�t$ ATE1�E1�UD��L��jj��H�� ���t3H�D$ H����H�T$(�H�D$(�C�CH�D$ H��!fDH�|$ H��t�Y��CH�H�D$8dH3%(ucH��@[]A\A]A^��H�EH��PpH���U���fDH�!9�1�1�胝롐�C1�H�=���[�CH����t�f.���H���1�H���ff.����H���s��H�lcH�5�81���)��H�������AWAVAUATUSH��H�4$H�L$$H�T$(H�5udH�%(H��$�1�H�D$(�u������t$$H�|$(�t$8�
[�D$DH�D$0H�D$pH��H�D$�.�H�D$0H�5�H��H�D$�����LI�� �H�<$A�A�D$4�H�D$P�D$dH�D$fDH�|$����Ņ�tn��q�t����m��A������A�T$I�t$�H�<$� 4�|$dI�Ǡ���D$dE�����_u�H�|$���|$D�mH��$�dH3%(��H�Ĩ[]A\A]A^A_�@��r�b���E1����V�@H��H���@�Hc�H���0I�Ǡ���t��A���tA���AƇ�D�hE����T$XH�t$PH�߹�13H�|$P�VIc�H���/H�<$H���3E��������|$d���H�|$������DIcD$I�T$I�Ǡ��|�>tA����E1��U�@H��H���@��qH���8/A�T$I�t$�H���2�U���@H�|$�����f�H�$1�H�=���C�gX�CH��V����fq�fD��USH��H�5z(H��dH�%(H�D$1�H���t~���t+�<$�gH��H���`�ƉC��x+H���W�CH�H�D$dH3%(u$H��[]�DH�5���1��U��s���p�f.����SA�����H�=5�{A�ع��
H�=5�]A�ع��H�=���?A�ع��H�=�4�!A�ع��
H�=�4�A�ع��
H�=�4��A�ع��H�=�4��A�ع�	�H�=�4�A�ع�
�H�=�4�A�ع��H�=s4�mA�ع��H�=`4�OA�ع�
�H�=M4�1A�ع��H�=;4�A�ع��H�=(4�A�ع��H�=4��A�ع��H�=4�A�ع��H�=�3�A�ع��H�=�3�}A�ع��H�=�3�_A�ع��
H�=�3�AA�ع��
H�=�3�#A�ع��H�=�3�A�ع��H�=�3��A�ع��H�=�3��A�ع��H�=u3�A�ع��H�=f3�A�ع��H�=S3�oA�ع��H�=K3�QA�ع��H�=C3�3A�ع��H�=*3�A�ع� �
H�=3�A�ع�!�
H�=3��A�ع�"�H�=�2�A�ع�#�H�=�2�A�ع�$�
H�=�2�A�ع�%�H�=�2�aA�ع�&�H�=�2�CA�ع�'�H�=�2�%A�ع�(�H�=�2�A�ع�)�H�=q2��A�ع�*�H�=Y2��A�ع�+�H�=C2�A�ع�,�H�=+2�A�ع�-�H�=2�q�A�ع�.�	H�=�1�S�A�ع�/�H�=�1�5�A�ع�0�H�=�1��A�ع�1�
H�=�1�A�ع�2�
H�=�1��A�ع�3�	H�=���A�ع�4�H�=s1�A�ع�5�H�=f1�A�ع�6�
H�=S1�c�A�ع�7�H�=B1�E�A�ع�8�H�=21�'�A�ع�9�H�= 1�	�A�ع�:�H�=1��A�ع�;�H�=1��A�ع�<�H�=1�A�ع�=�H�=�0�A�ع�>�H�=�0�s�A�ع�?�H�=�0�U�A�ع�@�H�=�0�7�A�ع�A�	H�=�0��A�ع�B�
H�=�0�A�ع�C�
H�=q0��A�ع�D�
H�=`0�A�ع�E�
H�=L0�A�ع�F�H�=;0�A�ع�G�	H�="0�e�A�ع�H�H�=
0�G�A�ع�I�H�=�/�)�A�ع�J�
H�=�/��A�ع�K�H�=�/��A�ع�L�H�=�/��A�ع�M�H�=�/�A�ع�N�H�=�/�A�ع�O�	H�=~/�u�A�ع�P�H�=i/�W�A�ع�Q�H�=Q/�9�A�ع�R�H�=;/��A�ع�S�H�=%/�A�ع�T�	H�=
/��A�ع�U�	H�=�.�A�ع�V�H�=�.�A�ع�W�
H�=�P�A�ع�X�H�=�.�g�A�ع�Y�H�=��I�A�ع�Z�	H�=.�+�A�ع�[�H�=j.�
�A�ع�\�H�=R.��A�ع�]�H�=<.��A�ع�^�H�=&.�A�ع�_�H�=.�A�ع�`�H�=.�w�A�ع�a�H�=�K�Y�A�ع�b�
H�=�-�;�A�ع�c�
H�=�-��A�ع�d�H�=�-�A�ع�e�H�=�-��A�ع�f�H�=�-��A�ع�g�H�=w-�A�ع�h�
H�=a-�A�ع�i�H�=M-�i�A�ع�j�	H�=:-�K�A�ع�k�H�=%-�-�A�ع�l�H�=�F��A�ع�m�
H�=�,��A�ع�n�H�=�,��A�ع�o�H�=�,�A�ع�p�H�=�,�A�ع�q�H�=�,�y�A�ع�r�
H�=�,�[�A�ع�s�H�=�,�=�A�ع�t�H�=,��A�ع�u�H�=o,��A�ع�v�
H�=l,��A�ع�w�H�=[,��A�ع[�w�H�=S,�fD������u��H�F,Hc�H�>��H�'�H�,�H��+�H��+�H��+�H��+�H��+�H�o+�H�R+�H�?+�H�)+�H�+�H��D�H�+�H��*�H��*�H��*�H��*�H��*�H��*�H�z*�H�e*�H�S*�H�H�H�;*�H�#*�H�*�H�*�H��)�H��)�H��)�H��z�H��)�H��K�H��)�H��)�H�~)�H�p)�H�`)�H�P)�H�B)�H�1)�H�!)�H�)�H��(�H��(�H��(�H��(�H��(�H��(�H��(�H��(�H�q(�H�\(�H�J(�H�9(�H�+(�H�(�H�(�H��'�H��'�H��'�H��'�H��'�H�{'�H�e'�H�P'�H�='�H�$'�H����H�
'�H��&�H��&�H��&�H��&�H��&�H��&�H��&�H��&�H��&�H�r&�H�_&�H�I&�H�3&�H�&�H�&�H��%�H��%�H��%�H��%�H��%�H��%�H�t%�H�a%�H�J%�H�3%�H�%�H�%�H��$�H��$�H��$�H��$�H��$�H��$�H�o$�H�[$�H�H$�H�4$�H�!$�H�$�H��#�H��#�H��#�H��#�H��#�H��#�H�,��H�z#�H�|(�@��H�M*H���@������f���?B��ff.���f����?B��ff.���S���H�@
1�H�=��r�A�ع1ҾH�=�)��f>�!�A�ع��H�=�)��A�ع��H�=�)���A�ع��H�=�)���A�ع��H�=�)��A�ع��H�=�)��A�ع��H�=�)�m�A�ع��H�=�)�O�A�ع��H�=})�1�A�ع�	�!H�=�,��A�ع�
�H�=_)��A�ع��H�=\)���A�ع��H�=�,��A�ع�
�H�=;)��A�ع��H�=4)�}�A�ع��H�=-)�_�A�ع��(H�=V,�A�A�ع��H�=
)�#�A�ع��H�=
)��A�ع��H�=)���A�ع��!H�=,���A�ع��#H�=,��A�ع��H�=�(��A�ع��H�=�(�o�A�ع��H�=�(�Q�A�ع��H�=�(�3�H�|A�عH��c>H�VH��	�
H��c>H�=�(H�H��c>��1�[�D��H��t�2?f��ff.�@��1��E?D����>���USH��H�H�{H��t�IH���H��t2�����~#1�DH�<�H���>9��H�����>H�{t	H�{�7�H�{ t	H�{ �'�H�{(t	H�{(��H�{0t	H�{0��H�{8t	H�{8��H�{@t	H�{@���H�{Ht	H�{H���H�{Pt	H�{P���H�{Xt	H�{X��H�{`t	H�{`��H�{ht	H�{h��H��H��t��=H���tH����p�H��H��[]��=f���H���C���H��H�5�&1�����H���H�5�&1������H�7H�5�&1������H���,���ff.��UH���SH���
=���@H�øH�+f�C�H��H��[]�fDATUH��S�DH�I����<D��H���@H�øD�cf�C�?H�H��[]A\�f.���USH��(dH�%(H�D$1�����H��1�H�T$�H�t$�������H�D$H��x��D�
�`>H�|$1�1�A�H��%�����肼H��H����H���tH��������;H�T$H���H��oH�RH�PH����v��H����GH����@�CH���K�H�D$dH3%(u@H��([]�@H�%�1�1����CH���fD�CH���&W�fD��AUATUSH��(dH�%(H�D$1����H��1�H�L$H��H�T$�������D�
]_>H�<$1�1�A�H��$������.�I��H���L�l$I�m�}t"�}u�E����H���ILH�D$H�(H�EH���S��H����H���L�l$I�m�}t"�}u�E���RH����KH�D$H�(H�EA��$�CH�����H�D$dH3%(�WH��([]A\A]�@H����L�l$I�m�}t"�}u�E���rH���mKH�D$H�(H�EA�D$�{����L�l$I�m�}t"�}u�E���OH���'KH�D$H�(H�EA��$��2���fDH�#�1�1��}�CH�� ���L�l$I�m�}t"�}u�E���vH���gPH�D$H�(L�mH�� g�H�uH��u�fDH��H�uH����L���S��u�H�EI�D$���D����E�8I�EH�D$�oEH�H�UH�PH�D$H�8�v
��H�D$H�8�GH��BH�(�������E�38I�EH�D$�oMH�H�UH�PH�D$H�8�v
�D�H�D$H�8�GH��BH�(�1�������E��7I�EH�D$�o]H�H�UH�PH�D$H�8�v
���H�D$H�8�GH��BH�(�Q�������E�y7I�EH�D$�oeH� H�UH�PH�D$H�8�v
��H�D$H�8�GH��BH�(�}�8����#���f�����E�7I�EH�D$�oUH�H�UH�PH�D$H�8�v
�!�H�D$H�8�GH��BH�(�T���L��H�#1�1���{�CH�����R�ATI��UH��SH�?t�K�H�]�C<t%<t�{u�C��w=H����MH�]�C��tH����H�E[]I�$A\�D[]I�$A\�����C�6H�E�oH�SH��H�PH�� ��vH���)�H�E�@H�E�@H�]�{�w����f�����USH��(dH�%(H�D$1�����H��1�H�L$H��H�T$��A����ttD�
�Y>H�<$1�1�A�H�#������ƵH��H��tfH�t$H�x���H�t$H�} ���H�}H�°�VH�ƀ�V�>�CH��fD���H�D$dH3%(uH��([]�@�CH�����P�fD��USH��(dH�%(H�D$1����}H��1�H�T$�H�t$�T����t_D�
Y>H�|$1�1�A�H�5������شH��H��tPH�t$H�x(����H�}H�� �V�B=�CH��
D���H�D$dH3%(uH��([]�@�CH�����O�ff.���USH��(dH�%(H�D$1����}H��1�H�T$�H�t$�t����t_D�
(X>H�|$1�1�A�H�U������H��H��tPH�t$H�x0���H�}H�ƀ�V�r<�CH��
D��H�D$dH3%(uH��([]�@�CH����O�ff.���USH��(dH�%(H�D$1����}H��1�H�T$�H�t$�����t_D�
HW>H�|$1�1�A�H�u�������H��H��tPH�t$H�x8����H�}H��0�V�;�CH��
D�+�H�D$dH3%(uH��([]�@�CH����.N�ff.���USH��(dH�%(H�D$1����}H��1�H�T$�H�t$�����t_D�
hV>H�|$1�1�A�H��������8�H��H��tPH�t$H�x@�"���H�}H��ЍV��:�CH��
D�K�H�D$dH3%(uH��([]�@�CH����NM�ff.���USH��(dH�%(H�D$1����}H��1�H�T$�H�t$������t_D�
�U>H�|$1�1�A�H��������X�H��H��tPH�t$H�xH�B���H�}H���V�:�CH��
D�k�H�D$dH3%(uH��([]�@�CH����nL�ff.���USH��(dH�%(H�D$1����}H��1�H�T$�H�t$������t_D�
�T>H�|$1�1�A�H��������x�H��H��tPH�t$H�xP�b���H�}H��ЏV�B9�CH��
D��H�D$dH3%(uH��([]�@�CH����K�ff.���USH��(dH�%(H�D$1����}H��1�H�T$�H�t$�����t_D�
�S>H�|$1�1�A�H�������蘯H��H��tPH�t$H�x`���H�}H��АV�r8�CH��
D��H�D$dH3%(uH��([]�@�CH����J�ff.���USH��(dH�%(H�D$1����}H��1�H�T$�H�t$�4����t_D�
�R>H�|$1�1�A�H������踮H��H��tPH�t$H�xh���H�}H�ƀ�V�7�CH��
D���H�D$dH3%(uH��([]�@�CH�����I�ff.���AVAUATUSH�� dH�%(H�D$1��G�����H��1�H�L$H��H�T$���K������D�
�Q>H�<$1�1�A�H�)������̭I��H���0L�t$M�.A�}tA�}u
A�E���%L���D1Ƀ�tnH�D$I�|$ADŽ$H��PH�0�6ADŽ$H��EH�E�f���H�D$dH3%(�(H�� []A\A]A^�f.�L�l$I�]�{tu�{u_�C��vW����C�,I�EH�D$�oH�H�SH�PH�D$H�8�v
蕾H�D$H�8�GH��BH�H����=H�D$H������D�EH�E�4�������A�E�+I�H�D$�AoEH�I�UH�PH�D$H�8�v
��H�D$H�8�GH��BL�(A�}�����r����G�f.���AU�ATI��USH��8dH�%(H�D$(1�L�l$H�l$H�D$ H�\$L�D$ L��H��H��������H�D$ H�8��m�P�D�
�O>H�|$1�1�A�H��������i�H��H����L�l$I�m�}t�}u�E���TH���4BH�D$H�8������H�D$H�H���H�D$ H��t
H�H���1Ҿ��ǃ��/+H�{H��0�VH����3H�°�VH�{H�ƀ�V�13H�{H�� �V�13H�D$H�{ǃ�H��PH�0�3ǃH�A�D$I�$H�D$(dH3%(��H��8[]A\A]�fD�;�H�D$H�8����fD�#�H�D$ H�8���fD1�L��H��H�޿�K�����b����=������E�h)I�EH�D$�oEH�H�UH�PH�D$H�8�v
�y�H�D$H�8�GH��BH�(�}�J���H�D$H�8��R����/����A�D$I�$����D���SH��dH�%(H�D$1���uZH��1�H���p����tCD�
$M>H�<$1�1�A�H�R������H��t8�CH�x�32H�H��	@�#�H�D$dH3%(uH��[�D�CH����&D�fD��ATUSH��dH�%(H�D$1���uwH��1�H�������t`L�$$I�$�{t�{ttH���9H�$H�H�;�1H��H��t2H���-3�ƉE����H���*�EH�E�fD�S�H�D$dH3%(��H��[]A\�fD�C��v�����C�X'I�$H�$�oH�H�SH�PH�$H�8�w�GH��BH��7����S�H�$H�8��f.�H�5���1��]��u�5�����B���AUATUSH��(dH�%(H�D$1�����H��1�H�T$�H�t$�`������D�
K>H�|$1�1�A�H�=�������I��H��tVL�l$I�m�}t"�}u�E����H���7H�D$H�(H�EH��t}H��tOH���1�1��j�CH��
D��H�D$dH3%(��H��([]A\A]�@I�l$H���;1�ƉC��xH���(�CH�붐�CIcD$H��f�����E�%I�EH�D$�oEH�H�UH�PH�D$H�8�v
衷H�D$H�8�GH��BH�(���H�5���1����s�f����A���SH��dH�%(H�D$1���uZH��1�H�������tCD�
dI>H�<$1�1�A�H��������5�H��t8�CH�x�.H�H��	@�c�H�D$dH3%(uH��[�D�CH����f@�fD��SH��dH�%(H�D$1���uZH��1�H�������tCD�
�H>H�<$1�1�A�H��
�����腤H��t8�CH�x�.H�H��	@��H�D$dH3%(uH��[�D�CH����?�fD��SH��dH�%(H�D$1���uZH��1�H���P����tCD�
H>H�<$1�1�A�H�2
������գH��t8�CH�x�c-H�H��	@��H�D$dH3%(uH��[�D�CH����?�fD��SH��dH�%(H�D$1���ujH��1�H�������tSD�
TG>H�<$1�1�A�H��������%�H��t]��t?�8�`����tH�CH��fD�C�H�D$dH3%(u-H��[�DH���1�1���f�CH����1>�AWA��AVAUATUSH��H��dH�%(H�D$x1�H��H�|$�I��H����H�`�H���H����Hc�E�w�1��"I��H��L�L$I��H��I�TfDH�H��H��H9�u�H�`�I���H�|$01�D�|$XH��8L�l$@H�D$0HH�D$8H�D$H�D$HL�L$hH�D$PL�d$`�D$p���A�ǃ����O�t4@H�;H����L9�u�L���O!A���t<H�`�H���u+H�l$�$�A�G�H�l��H��H����H9�u�1�H�t$xdH34%(H����H�Ĉ[]A\A]A^A_�@A�}I�}��1�H�T$(襍��uiI�}H�T$ �莍��uRH�D$(H�8�uDH�D$ H��xu6L�L�D$�A�L�D$H��1�H�H�1��d���fDH�
�1�1��d����H��H��	�1�1��fd�����;�ff.��AVAUATUSH�� H�/dH�%(H�D$1�H��t@I��H��I��H���+�L�l$H�}L��PL���d����t7H�D$Hc3H�8���H�D$dH3%(ujH�� []A\A]A^����N�@H���@H�D$�f�L���*�H�L$M��L��H���PI�A�jH�8�lXZ�s�����:�ff.�f�AUATUH��H�5��S��H��(dH�%(H�D$1���H���H��HD�H�T$1��$L�L$L�D$H�D$H�D$�D$�G����L�l$M���$�$����H���L�(���?��E1�� H�T$H��H�5�B>L���f%L�kH��H�CH���CHǃ�ǃ��&�qB>H��H���&�H�E�H�D$dH3%(�(H��([]A\A]ÐH�5�8L���8����H�5
L���z8����H�5�L��L�%��\8��t:L��H�>
1�1����a�EH�E�o����H���L� ��tH�|$tr��M���pH�T$H������L�d$M�������H�"���H�D$�7H�T$H�����f.�L�%�7��H���H�D$�f�L�%�f����8�ff.�@��1����D������f���@������AWA��AVAUATUH��SH��I�� g�I�4$H���dH��I���@I��I�4$H���GL����6��u��EM�l$Mc�M����L����I��A�G�L�tE���jfDHcU�JA��MH��L9�tM�;A���Ѓ�v�LcE�׃�?���ȀL�ƃ�M�ND�NHc�L��wFH��A�8D�M�L9�u�HcEL��1�A�H��H����[]Hc�A\A]A^A_�f.�����McɃ��uA�@�9C��X���f�A�Hc��L��H��H���0�D�}B� H��H��H��[]A\A]A^A_���E1���D��ATUSH�� dH�%(H�D$1���uwH��1�H�t$��K����t^L�d$I�$�{t�{u�C��wyH����1H�D$H��sH�;H�T$H�
5���H��t=�T$H�E�E�U�	@���H�D$dH3%(��H�� []A\�fD�EH�E��f�����C��I�$H�D$�oH�H�SH�PH�D$H�8�w'�GH��BH��{�C����.�����˫H�D$H�8���l5�ff.����AWAVI���~AUHc�I��ATUSH��H���t$�FI�� g�H��I�4$H��u��fDI��I�4$H����L����3��u��M�l$Lcd$M����E1�H��M��u%�f�I��A��Hc3�D5�FH��M9���C�<>I�G@��y�@���vf@�����L��L)�H��vPA��q�@��?w*����I������?	ǁ��~��?���q>@��2vI�W��HH�DI�ǿ?�^���;D$��H�H��H��H��[]A\A]A^A_�@@���vJ@���w�L��L)�H���H��v�A�4�~>@��2v�@��y�I�wH����I���W���DL��L)�H�����b���A��q>@��2�P������H���I���������H��1�Hc���H��HcH��9���f��Lcd$L��L��H���W,�D$B�D%�����fDA��q�@��?��C�D>���<?vI�wC�D>�H>��2�.������&���I���?����DA��q�@��?wqC�D>���<?vzC�D>I�w�H>��2���������C�D>I�w�H>��2�����������I���?����q>@��2�&������U��������q>@��2������x�����C�D>���<?�u�����AUI��ATI���U��SH���H���@�@M��tQ��u!A�<$t�L��D)��,H���8u�H�SL���L���C�W���H�H��H��[]A\A]�fD�@H�H��H��[]A\A]����ATUSH��0dH�%(H�D$(1�H��tmH�0H��tcHc?I��H���7��H�S1�L��H�D$����H�S1�H��H�D$����H�s0H�L$H�ߺH�D$ ���H�D$H��t
H�|$���H�D$(dH3%(u	H��0[]A\���0�@��ATUSH��0dH�%(H�D$(1�H��t[H�8H��tQHc?H��A�����H�SD��H��H�D$�c���H�s8H�L$H�ߺH�D$�8�H�D$H��t
H�|$�4�H�D$(dH3%(u	H��0[]A\��60�fD��AWAVAUATUSH��XdH�%(H�D$H1�H����H�@H����Hc?I��M��L��I��I������H�S1�L��H�D$���H�S1�L��H�D$���H�S1�L��H�D$ ���H�S1�L��H�D$(�t���H�S1�H��H�D$0�a���H�s@H�L$H�ߺH�D$8�6�H�D$H��t
H�|$�2�H�D$HdH3%(uH��X[]A\A]A^A_��./�ff.���AVAUATUSH��@dH�%(H�D$81�H����H�HH����Hc?I��L��I��I������H�S1�L��H�D$���H�S1�L��H�D$���H�S1�L��H�D$ �|���H�S1�H��H�D$(�i���H�sHH�L$H�ߺH�D$0�>�H�D$H��t
H�|$�:�H�D$8dH3%(u
H��@[]A\A]A^��8.����AWI��AVI��AUI��ATM��U1�SH��8dH�%(H�D$(1���H����H�xPH����Hc8����1�L��H�$H�S���1�L��H�D$H�S���1�L��H�D$H�S���1�L��H�D$H�S�q���H�sPH��H��H�D$ �H�H��H��tH���8#H�ߋ+�H�L$(dH3%(��uH��8[]A\A]A^A_��8-����ATUSH��0dH�%(H�D$(1�H��tmH�`H��tcHc?I��H������H�S1�L��H�D$����H�S1�H��H�D$���H�s`H�L$H�ߺH�D$ ��H�D$H��t
H�|$��H�D$(dH3%(u	H��0[]A\��,�@��USH��8dH�%(H�D$(1�H��tWH�hH��tMHc?H���<��H�S1�H��H�D$����H�shH�L$H�ߺH�D$���H�D$H��t
H�|$���H�D$(dH3%(uH��8[]���+�ff.���ATUSH��`dH�%(H�D$X1�H���;H�(H��H��A��tKHc?���H�SD��H��H�D$@�o���H�s(H�L$@H�ߺH�D$H�D�H�D$H��t
H�|$�@�H�����H�KH��H�T$D�������L$H���'��� wH�H���#������H���H�L$8�H�5-H�H�8��w���"H�D$8�t$1�H�sH�;��Hc��+H��H�H�D$8H�HcxH8�&�H�D$8H��T$PH����f.�H�D$XdH3%(��H��`[]A\�H���L�d$8H�D$8L��H�8� H�|$8tH���H�t$ L��H�8�1��������@H���@H�D$�7�Hc��H���H���Hc��H���HT���H�|$Hc��A�H���Hc��H�5�HL�����H�|$E1�H��H�5�+��H�|$A�H�
r��H�5>��H�|$Hc���H�5w
��H�T$E1�1�H���A��H�8��`������������c���D�q�H��H�H9�t��J�� �����I��H��I��I���������H���E1�H��H�5�*H�8�������f�H�D$ H�L$(�H�50=H�H�8�Ou���N���H�D$(�H�=b�H�H�0������(���H�D$ H�L$0�H�5O*H�H�8�u�������H�D$0�t$1�H�sH�;��Hc��iH��H�H�D$0H�HcxH8�O#�H�D$0�9�����'���ATUSH�� dH�%(H�D$1���uwH��1�H�t$��k����t^L�d$I�$�{t�{u�C��wyH����"H�D$H��sH�;H�T$H�
:&���H��t=�T$H�E�E�U�	@��H�D$dH3%(��H�� []A\�fD�EH�E��f�����C�I�$H�D$�oH�H�SH�PH�D$H�8�w'�GH��BH��{�C����.������H�D$H�8���&�ff.����AWAVAUATUSH��XdH�%(H�D$H1�H�������H��H��I��H����H�t$(H�KL��H�4$H������{H�D$����H�{�2Hc;����Hc��H|$H�D$0����H�D$8��	�@H���@H�D$@��H����L�}M����I��L�l$�aM�t$I��L����H�KL��L������L��I�����H�|$@E1�L��D�D$�PL���x�L���	M��tKM�<$M��tBL����H�KH�$L��������sI�Dž��z���Hct$(H���M��h����H�sH�L$0�H����H�D$H��t
H�|$趿H���������@�@H�D$ �H�|$ �@�@H�D$(���H�|$(��L�t$Hc��H���H���L���H�|$ A�Hc���H�5-�L��h�H�|$ A�H�
6��H�5�8�E�H�|$ Hc���H�57��Hc��H���L��L�d��}
I�$ǃH���VL�eM���IL�l$L�t$�bDL�}H��L����H�KL��L�����'�L��I����H�|$(E1�L��D�D$�PL����L���H��tDL�eM��t;L�����H�KL��L�������KI�ą�t�Hct$H���[��n���fDH���E1�A�jH�D$0H�5�YH�L$H�8��TXZH���H�T$ 1�A�L����H�8�yZH�|$��H�D$HdH3%(u=H��X[]A\A]A^A_�Hct$(H�����H�{�p������H�<$�G�����]"�ff.�f���ATUSH��0dH�%(H�D$(1�H����H��H��L�d$H����H�KL��H������SH�Ņ���H�{ tHHc;����Hc��H�D$H����H�s H�L$H�ߺH�D$��H�$H��tH��芼H�������������@H���@H�D$��Hc��H���H���H���H�|$A�Hc���H�5�H��Y�H�|$A�H�
1��H�5�5�6�H�|$Hc���H�5(��A�E1�1�H����L��H�8�XǃH���H���H��tHc��H�|������H�D$(dH3%(u^H��0[]A\��H���A�H�
���H�55H�8�x��|���Hct$H���s�H�{ �6����y���� �ff.����t1�H���USH��H���G�xHc��HckH�3H��H�����(H��[]�f.�f���H�GPH��tM��H�I��1��D�ff.�@��H�GXI��H��tH�1����ff.�@��H�G0H��tH���DH�GHH��u��ff.�ATUH��SH��H��tAI��H���F0�H�I�4$H����H��H��+�H�;H�����H�[]A\�f�H���0�H�[]A\���AWAVE��AUATM��UH��SH��HH�t$H��$�H�T$H�L$dH�%(H�D$81�H�D$(E��~:H�OhH��t1A�P�M��H��M�l�	DH�MhI�WI�7I��H�}��M9�u�H�} �{L�eH�T$H�t$H�L$(L����H������$�1ҾH�D$0�|Hc���I�ŋ�$����q��$�M��D�p�H�D$0I��H�D$I��M��?DH�SH�L$L���w���H�D$0H�{H�s I�I��H��(H)��G&�I�G�M9�t^H�{H�3u�H���.�H�D$0��DH�}1�H�t$(�U H�-�>;H�|$(�UH�D$8dH3%(��H��H[]A\A]A^A_Ë�$�H�}L��H�t$(D�$Ic�I�D��U M����H�-�>;1��I�|�H���UA9��L����w���f�H�}H�r���L�|$M����L���_)�L��H�=:3���&�H�5��H��H�D$(��L�|$H�D$(L���#)�H�|$(L�������H�D$(M����E����A�F�L�=,�H��L�t$0M�l�>f�H��1�L��1�蝛��H�t$0H�|$(I����H�|$0H�D$(�)M9�tTI�$M�D$H��u�L��L��1�L��1��T����L�|$L���s(�L��H�=N2���%�H�D$(�I����H������$�������$�L�t$0��H��L�|�(�qfDH�W�1�L��1��՚��H�t$0H�|$(H��(���L��L��L)�H��H�D$(��H�5�H��H�D$(��H�|$0H�D$(�2�I9�t5H�KL�L�kL�c H��u�H���L��1�L��1��S����y���@H�|$(�H�5��B�H�]HH��H�D$(�Q'�H�}H�t$(���H�-<;H�|$(��.���H�}I�EL��H�t$(�U H�-<;�����I�H�-�;;��ff.�f���SH��H��H��dH�%(H�L$1�H�(tBH��H��H�����H�{H�4$�S(H��;;H�<$�H�D$dH3%(u`H��[�DH�Ht�H��H��t1I��H��1�1�H����3�H�{��H�4$�SHH�<$���H��H���1�1������n�ff.���H�H��AVAUI��H��ATI��US�%�Hc�H��:;�}D�uHc��H��L���<!--H��H�x�-�H�D+�--H��f�D���@>Ic��I�}A�UHH��:;H��[]A\H�A]A^���ff.�@��AVAUATUH��SH��H�� dH�%(H�D$1�H� tKH���)�H�}H��I��H��U H�$:;L��H�D$dH3%(��H�� []A\A]A^�fDH�Ht�H��H�t$��$�H�t$H�=�.���1"�I��H��tTH�H��tLH��L�t$L�-%��L�L��1�L��1�H���z�H�t$L����{�H�|$I����H�K�H��uźH�5�L���Q�L�eHH��H���b$�H�}H�މ�A��H�?9;H����������USH��H��dH�%(H�D$1�H�G8H��t"H���H�D$dH3%(uMH��[]�DH�Ht�I��H��H��1�H�L�誖H�,$H����H�{H���SHH�<$�9�����f���USH��H��dH�%(H�D$1�H�(t<H����'�H�{H��H��S(H�`8;H��H�D$dH3%(uIH��[]�@H�Ht�H��H��H���1���H�,$H�����H�{H���SHH�<$���M�ff.�f���AWAVAUATUSH��H�G��P����H��H��I���^�H��H����H�E���������C\�ƒ��t	����H�}H�����L���z"�Lc�H�7;A�~E�~Hc��L��L���&H�xI����Ic�D��L��C�D5;A�DH�}�UHH�7;L���6@H�EL��H�x�)�H��H���B���H�}H�w���f�1�H��H��[]A\A]A^A_�@��u�H�E`H��t�H�KhH�sH��H�$hL�C`����L�m0M���!���H�{P�!�H�sPH�}��A���L�m0M��u��ff.�f���U�xH��SH���E1�1�H�xH��H�@H��H�@pH��)��Hx1����H��H�=�=H�C��H�CH����ǀ��ǀ��@Hǀ�ǀHǀ4H�{��H�C�@H�C�@H��t/H�C�H��ǀ���$�H�CH��H��[]�DH�CH�ǀ�H��H��[]�DH��1�����@��1�1�������H��dH�%(H�D$1�H�T$@�t$1��D$���H�L$dH3%(uH����(����H�w����H�G����H�w H�W(���H�w0����H�w8����H�w@����H�wH����H�wP����H�wX����H�w`����H�wh����H�wp����SH��H�����tH�C1҃�h�‰�[�f���H�G���Ð��H�Jk��ewHc�H�f�:H��Ð��H�GH�@8�@4���H�GH�@8�@8���H�GH�P8H�B H+BB@������f.���H��2�@��S�H����tH�H��t	H�23;�H�{H�GH��tH����#�H�CH�@H�{���H��[�f.���H����D�E��tD�H��E��tE8�t^H����E8�tSH��D�E��u�D�H��E��t1E��tE8�tHH���E8�t;H��D�E��u�H��D�E��u�H�:�DH��D�E��u�1����H��H�:�H�:�Z���f.���H��H�7�dH�%(H��$�1�H���
���u�D$1�%�=@��H��$�dH3%(��uH�Ĩ���@��H��H�7�dH�%(H��$�1�H���
���u�D$1�%�=���H��$�dH3%(��uH�Ĩ���@��AUATUSH��H�$H���dH�%(H��$1�H��H����H���H��H��� �H���I��H��H����������!�%����t������D�H�SHDډ�@�H��H)�H�Š�D�c�YIc��]��H�EA��sWA����E��uh1�H�}(�H�E�H�H�EH�E xH��$dH3%(uH��[]A\A]ÐE���H��L��K�T%���J�T ��H��A�U�A��t�E��C�T%�fB�T ��w�����$����A�UE��C�T%�B�T ��H�����ff.���H� �HcB��t
H�H�:��f�H��H����/f�H���ff.���ATI��UH��SH��dH�%(H�D$1�H�����H��M��t'H�$H��H9�r9H��H��L����H��L���W�H�L$dH3%(H��u#H��[]A\�H��1��.������"���,
�ff.����AUATUSH��I�Š�I�m(M��( H�}H��t�H�_0���H��H��u�H�EH��L9�u�I�EH��[]A\A]�ff.���H��H���H�8���t���H���H�8H���q���AWAVI��AULc�ATJ�4/M��USH��H9���H���ŝ�Hi�H��H�P�H1�H9�u�H��%�L�$�(H���I�Ġ�H�\�(H��u�~fDL�c0H�[0H��tkH9+u�D9{u�H�sL��L�����u�H�C0H���H��I�$H���HcSH�@H�D$H��:H)�HcS H)�H�AH��[]A\A]A^A_�
�f�H��[]A\A]A^A_ø�A�P�ŝ��D���ff.����AWAVAUATUSH��H�$H��H�$H��hH�T$H��H��I���L$A��dH�%(H��$X 1����D$I��E��tH���H�x�����D$A�D$�A�=�w1A�}/D�d$8���C���NF�t A���~8�H��$X dH3%(D���2H��h []A\A]A^A_�@Lc�H�l$PH�3�L��H�����A�T$L��J�|=Hc�B�D<P/I���W�D�t$8�L$����I�Ġ�I�D$ H�$H����Lct$8K�L5I9���L��ŝ�f�Hi�H��H�P�H1�H9�u�H��%�H��(M�<I�H��t+I�|$ tH�$H;A(��H9)��L�y0I�H��u�1�D�|$E����L��$P�L��L����H�����CD�x�D$<Mc�L����H�+L��H��H�D$0H���T�L��H����������!ʁ ��t��H����€�D�H�HHD����H��L)�C��Hc��g�KL��H�H�ǍQHc�����fD�D$8;A����H�qL��L��H�L$ �?��H�L$ �������D�k�i H�$�D$8E�uMc�L���D
�L�;L��D�uH��Mc�I��L���y�L��L�����H�$L��H�H��H�q�X�H�|$�kD�L$8tD�$H��H�D$��D�$����L��D�$��	�D�$�Y���f�H�A0H��I�I�D$HcQH��:H)�HcQ H)�I�D$�	����A����Lct$8I�~L�t$(�s�H�D$ H��tM����H�D$ H�L$(��CD�`�D$<Mc�L���<�L�;L��L�d$HH��H�D$0L���q�L������H�|$ L��H�5!�H���CH�D$H����I��H��uQ�D��Hc��}�H�Hc{A�VL��1�Hc�H���DsL��H�5��1����I��H����L���9��I�ƃ�tA��uA�?.t�H�;�sD���u���Hc���HcSH��J�K�/H��{���DA�?.H�;u�A�.u����sHcC�?/H��t&�����SH�;�B��C�?/H���H�D����/u���k�/���DH�|$ ���|$��H�L$(�CA�|
�/������|$���T$��t/��t+I�Ġ�HcCHcL$8M�D$I��H�|:I�M;D$�NH�D$H��t
H��Ѕ���H�|$0�g�E1�������D$�H�$���fD1��q�H�$�+�����H�;Hc���HcSH��J�K�/HcCH���C�'���fDH�T$(L��H������[���H�;���H�D$0H��D$<�CA��&���fDH�;��3�HcSH��/HcCH��D�C���1�H�$�����/�S�HcCH�����H�;�K�L�#D�L$D�k���H�L�D$ H�L$H�D$�	�H�L$L�D$ H��I�t
L9���L��ŝ�Hi��H��H�z�H1�H9�u�L�M8D�t$8H�EL��L�ML��A�VL�D$ Hc�H�L$���H�L$D�uA�WH�t$Hc�H�|H�}���H�EL�D$ D�} L�4$Mt$ %�L�u(H��M�D$I�T�I�l�H�U0�����P�ŝ�����ŝ��\����O�ff.�@��H��H��H�Ǡ��H����������H�������ff.���UH��AUI��ATA�SH��H��dH�%(H�E�1��O�������H�I�D��@H���x/��D��A��A��y�A�����Hc�H��H��H��H���H)�H���H��H9�tH��H��$�H9�u�%�t	H)�H�L�H�L$Mc�L��H���L��H���R��B� H���A��H�]�dH3%(D��u?H�e�[A\A]]��E���c���E1�A�}/A��A�T$�M�����������ff.�@��AUATUSH��H�$H��(dH�%(H��$1��I��H����</��I�Š�A�m�l$��Hc�H���-�I�uH��H��H�$�j��1�H��L�����������|$���ND$H�$H�H������H�����H�����H��H��$dH34%(��H��([]A\A]�f�����D$H�$��X���f�H�$1����H�l$�Q�H���D$�H�$���H��LE�����f�H�
H�{H��H��H�H�L�H�L�H��H)�H)�H�H���H�� ���D�
�������L�f�L����@�
��L��L�������f���AVI��AUATI��UH��SH�� I��dH�%(H�D$1�A�]�\$��Hc�H���j�I�uH��H��H�$��L��H��H����H�$I�H�L$dH3%(u
H�� []A\A]A^��K��ff.���H�%��P�����AVAUATE1�USH�� dH�%(H�D$1��?tdI��H��I��A�]�\$��Hc�H����I�uH��H��H�$���1�H��H���`��uH�<$L���p�I��H�<$��H�L$dH3%(L��u
H�� []A\A]A^����ff.�@��AUATA��UH��SH��(I�Š�dH�%(H�D$1�A�]�\$��Hc�H����I�uH��H��H�$�<��1�H��H�����u6H�<$D����H�<$�����H�L$dH3%(��uH��([]A\A]�f�H�<$�����������ff.���AUATI��UH��SH��(I�Š�dH�%(H�D$1�A�]�\$��Hc�H���?�I�uH��H��H�$�|��1�H��H������u6H�<$L�����H�<$�����H�L$dH3%(��uH��([]A\A]�f�H�<$������������ff.���AUATA��UH��SH��(I�Š�dH�%(H�D$1�A�]�\$��Hc�H����I�uH��H��H�$��1�H��H���*��u6H�<$D����H�<$���_��H�L$dH3%(��uH��([]A\A]�f�H�<$������2�����;��ff.���AWAVA��AUA��ATA��UH��SH��(I�Ǡ�dH�%(H�D$1�A�_�\$��Hc�H����I�7H��H��H�$����H��1�H���a�H�<$��uJD��D��E��u6����H�<$��H�L$dH3%(��u)H��([]A\A]A^A_�D�������Z���������^��ff.���AUA��ATI��USH��hH�Š�H�T$@�]dH�%(H�D$(1��\$��Hc�H�����H�uH��H��H�$���1�H��L������uwA��@u<H�<$D������H�<$��H�L$(dH3%(��uXH��h[]A\A]��H��$��T$@H�<$D��H�D$H�D$0H�D$ 1��D$�����H�<$������M����V��fD��AUATA��UH��SH��(I�Š�dH�%(H�D$1�A�]�\$��Hc�H�����I�uH��H��H�$���1�H��H������u6H�<$D���Z��H�<$����H�L$dH3%(��uH��([]A\A]�f�H�<$�����������ff.���AUI��ATI��USH��8H�Š�dH�%(H�D$(1��]�\$��Hc�H��� ��H�uH��H��H�$�]��1�1�H��L����������]L�,$�\$��Hc�H�����H�uH��H��H�D$���1�1�H�|$L������uTH�t$L�����H�<$����H�|$��H�L$(dH3%(��u:H��8[]A\A]�DH�<$���������H�<$������r��H�|$�h����q����AUATI��UH��SH��(I�Š�dH�%(H�D$1�A�]�\$��Hc�H����I�uH��H��H�$�<��1�H��H������u>H�4$�L���%��H�<$�����H�L$dH3%(��u H��([]A\A]�DH�<$�������������AUATI��UH��SH��(I�Š�dH�%(H�D$1�A�]�\$��Hc�H���?��I�uH��H��H�$�|��1�1�H��H�������u9H�4$�L���X
�H�<$�����H�L$dH3%(��uH��([]A\A]�H�<$������������ff.���ATI��USH�� H�Š�dH�%(H�D$1��]�\$��Hc�H����H�uH��H��H�$����H��1�1�L���3�H�<$��u+�f��H�<$���k��H�L$dH3%(��uH�� []A\��K���������O��ff.�@��AUATA��UH��SH��(I�Š�dH�%(H�D$1�A�]�\$��Hc�H�����I�uH��H��H�$���1�H��H���z���u6H�<$D�����H�<$����H�L$dH3%(��uH��([]A\A]�f�H�<$�����������ff.���ATI��USH�� H�Š�dH�%(H�D$1��]�\$��Hc�H�����H�uH��H��H�$�R��H��1�1�L�����H�<$��u+�f��H�<$����H�L$dH3%(��uH�� []A\��������������ff.�@��ATI��USH�� H�Š�dH�%(H�D$1��]�\$��Hc�H���e��H�uH��H��H�$���H��1�L����H�<$��u0���H�<$H���G��H�L$dH3%(H��uH�� []A\��#��1����*��f.���AWAVAUATUH��SH��H�����I��H���HcPL� Ic�I��H�|�����B�1�I��I�tL����8'�JD�H��H9�u�Hc�H��{��I��H��u1�H��H��[]A\A]A^A_���cdA�G I�OK�t4fA�A�G'@A�$H�Ȁ�'u�'\�A'H��f�9A�$I��H�H�I9�u��'H�y� ;�G H��H��f�W�A�UHc��0��L��H�����L��H�������T���D��I��H���<���A�cd�@ H�xfD�E��u�@/�H���@'�f���ATUSH��H�$H�� dH�%(H��$1��H��H���</��L�d$�L�����H����L����L��H�$�
H����������!�%����t������D�H�JHDщ�@�H��L)�T$1�H��H�������$H�$H��t@�|$���NT$Hc�H�������H�����H�����H��H��$dH34%(��H�� []A\ÿ�F���D$H�$��\���f��L�d$�!��L���D$�H�$�u��H��IE��#���f�H�H�{H��H��H�H�L�H�L�H��H)�H)�H�H���H��;���D�����(����L�f�L�����H�<$���1���������L��L�������f.���1��|$ �����ff.�@���:���SI��H���H�t$8H�T$@H�L$HL�D$PL�L$X��t:)D$`)L$p)�$�)�$�)�$�)�$�)�$�)�$�dH�%(H�D$(1�H��$�L��1�H�L$H�D$H�|$H�D$0�D$�D$0H�D$ �nH�|$����9H�|$�������H�T$(dH3%(u	H���[��w������f����颂f���H���f��(H�`�Hc����f.�SH���H�� �dH�%(H��$�1����uPH�`�H�|$H��H��H�$�������tJ�����H��`�H�$H��H�� �Ƃ�H��$�dH34%(uhH���[�f�H�����D$1�f��(ƃ�ƃ�ƃ,�oH��`�Hc����oƃ��D$�e����%��D��H��H���
1��	���xH��`�H�H��`1�H���fD���������H��t'H��H������H����H��H�B@H���2�f�H����@H�@@@�����AWAVI��AUA��ATI��USH��H���l$P�E���uVH��tQ�H�=�f�����t:I����A�u\I���t"H��L�L$L�$�|L�$L�L$��u]@H��D��L��H��UL����X1�ZH��[]A\A]A^A_��1��H��L�L$L�$�sL�$L�L$���{�����������SH����H��t�oH�@H�C1�[ø����[�@��H��H�5ؙ�؋���S�|$H��t1�̺H�ߺ
1��=��H��`�Hc������1�[�@�
H��1����H��`����1�[�H����SH����t^��t)��utH��H�=������u$�[�f.�H��H�=�����t�1��
H������v͸��f�H��H�=�F�q���uи�fD��u�H�5���O��¸��t�H�5��H���5���u���k������f.���H��H������H�x81�H��t�p@���H��@��H�=��L�L����€���t�H�=��L����€���u)��t|��t_�H�=��H����4f.�����wپH�=y�H���4�WT���Y���H�H�pP�[���f��H�=�H���k4�H�=,�H���S4��H��H��������H�����BQ1�H���ff.�f���AUATUSH��(H����dH�%(H�D$1���0uiH�ChH��ƃ0H��t7�H�=	cH����€���tdH�Ǻ��A1����A�ă��upH�@�H���H��tH���ƃ0H�D$dH3%(��H��([]A\A]�f.�H���1�H����e��ƃ0�@H�|$�.��H�T$��H�=���Ch�I��H�|$1�H��L�
�TI��1�H����NhH�t$D��Hc��~��H�|$���L�����D����ƃ0�/��������AWAVA��H��L��AUATI��US��H��XH����dH�%(H�D$H1�H�|$(H�uX�;g�}`H���A����H��tRH�L$(H��H�T$H��I��H�L$����H�T$��A��u!�}aH�L$��D9���}DH�����H���H��t���M��H��@L�l$(���LD�L���N��L��H����?��D���H��������to��tjP��tc��t^��tY����L�����)H���g���H���H���k����k���f.���t���@u�DI��`�A�� ��0�������=�EP���<��@��U�����L�
���t,L�����t��L���H���LE�D���(�}S��}Q�<@����~}��t��tw��@tr�}Pt�
��=���<H�|$(�b�H�D$HdH3%(�7H��X[]A\A]A^A_�������������������t��u����=Aǃ(����u���A��f.����8�����@�m�y������L�����tL�������DL�\$H�|$0H��1�AVM��M��L��H���1�L�T$ �d^_H�|$0�&���H�|$0�L��}QL�\$������
��=L�T$�����}R�����H�`�H�H��X��H�� �W���u
H��PX�Q�������T1ҾL�\$H�=�L�T$�װ1ҾH�=�H�D$述L�T$L�\$���I����H�|$(����H�L$M��L�\$M��H�\7E��L��LD�H��HE�H��H��AUH�=��H��1���A\A]L�\$����I���L�\$���������H�|$(D��H�D$0H��H���oH�@H�CD�{��L�\$H�L$0E1�H�H�D$0H���
A�H�5]��@I���j�gXZ�4���H�`�H�����H���L���1���L�l$(����fD����j����,���fDL�L��������L�0�~W�������L���� �������L�#�H��LE��t���@��L��H�ЭLE��S������G�����L���H���LE��-���DL��������L���~o������L�y��� ������L���H�Y�LE����@L�K�����������L�?�H�%�LE��x�������g�����L��H���LE��M���DA��=x�=����I��`�Aǃ(�H� ��UQ
�u�����o����E���-���H�L$(�dfDH���L��H�L$�D$�(��H�T$���c���D�D$H�L$�������
���W���~'��t)��t!��@tH���:�����D��t��u�I��`��5��=Aǃ(����$�����@H�}@L�\$�2�H�|$(���L�\$I����g��H�=k��fs�_����L������������L���H�}�LE�����H���E��M��L��H�L$(H�=��1�L�\$���L�\$���fD���M���~-������~?������������f������������������_�����@�����Q���f�H�@��H�T$(H�=e{L�L�������t�H�=D{L�������u
�}Q�MH�L$M��L�\$E��H�x2M��H�=�LD�H��HE�H��H��AUL��H��1���AXAYL�\$���H���H�t$01�L�\$D�D$H�D$<�D$DH�D$0�D$8"腔L�\$D�D$�G���fDL����4���L���(���L����L���H�T$0E1�1�A�D���TK��H�L$M��E��H��H��1M��LD�H��H��I��HE�H��H��AUL�T$H�=��1�L�����XL��Z�r����=L�\$�Z���L�R�����L�\$H��I��L��H�x�:AVM��H����H�81��u��AZA[L�\$�w������������8�������'���AWAVA��H��L��AUI��1�ATUSH��H��XdH�%(H�D$H1�H�|$H��0H�D$H�D$ H�D$(�U\H�����D$�����D���=E��uYD���=E���QH�`�H���H��tH�H��t
�xtI�\�׀I��H��t	�8�L�%6�DL�%�L��H�|$01�1�H���E1��F\H�
�/H�L$�����L�=�/H�����;#��H���E�������-�H�=�oH��������L�-l/E1�H�|$8H��I��M��t$ H�3�1�1�SAWH�L$P�[H�� M��tL���A�H�|$0�7�H�|$ H��t�(��}P���
��=����H��`�H�����H��8t	D��0ux�访H�|$H�D$@H��H���oH�@H�E�D$E�E���\�H�L$@H���
H�EH�D$HE1�A�H�5)��@H���j�3
XZ�H�|$�f�H�T$81�D��H�5���_H�|$8�F�H�D$HdH3%(�cH��X[]A\A]A^A_��#H������I��E��tkH�D$(H�|$ �8��H�L$M��1�1�H���0ZA����-H�\$ �_H�����H��u�H��Ic��C���H��H������L�D$H�L$01�1�H�|$8H�����Y�;���@L���A�}tʹH�=�mH���������L�-1-E1�H�|$8�t$1�I��AWM��H�)�1�H�L$@�lY^_����DL�%Է��@L��H��1�1��=YA������DH�|$0H�T$@E1�1�A����TF��H�|$0I��跽L�|$0����DH�|$H�T$@E1�1�A����F��H�|$I�����D$@L�d$�D$��DL���H��蹿H�|$ H��H��t�G��#H��H�\$ �e��I��H��tH��腿H���EA�$I��I��L���M��t
A�8�����H�\$ ������g���@H�xP�����H�@PH���Hc�H�>��H��+L�%Y[H�D$DH�|$0H��M��1�AUL�D$8H�p�1�H�L$A���WAXAY���H�V+L�%!�H�D$�H�A+L�%��H�D$�H�,+L�%�H�D$�H�+L�%E�H�D$�r���f.�H�|$(�&{H�D$�T���H�|$ H��1�1�H����4WH���ܻ����E1�������f.���H���H�L$8L�D$@L�L$H��t7)D$P)L$`)T$p)�$�)�$�)�$�)�$�)�$�dH�%(H�D$1�H��$�H��I��H�D$��H�D$ H�5&*H�D$�$�D$0�1���H�D$dH3%(uH��������@��USH��H�$H��dH�%(H��$�1�H���J��H���H����H�\$H�����H��H�t$���H�t$PH���y��H��H���MH��H��$����H�پH���D�H� �H���L�@@H��M��LD�1��&H�g�:H��H�0�4���Rf�H��uJH���H��H���H��(H��HD��&]H���H��I��H�=��1�����fDH��$�dH3%(��H�Ĩ[]��H����\H���1�H��1������fDH���H��H���H�T(H��HD��\H����@H��I��H�=l�1��|����g����H� �H��$��H�d�H��H�H@H�وH��HD�1��y%������ff.�@��H���L�D$@L�L$H��t7)D$P)L$`)T$p)�$�)�$�)�$�)�$�)�$�dH�%(H�D$1�H��$�I���$ H�D$H�D$ H�D$�D$0�b���H�D$dH3%(uH�������D��ATM��U��SH��H���L�L$X��t:)D$`)L$p)�$�)�$�)�$�)�$�)�$�)�$�dH�%(H�D$(1�I��H��H�|$1�H���RH�t$H��L��H��$L�D$���D$(H�D$H�D$0H��H�D$ H�W9HD��D$0�q���H�|$H��t�R�H�D$(dH3%(uH���[]A\��������G����SH�������H���H���H��t���Hǃ�H���H��t���Hǃ�ǃ�[���ATUH��SH��dH�%(H�D$1�H����x����t+�rH�D$dH3%(�5H��[]A\�f�1�H����p���t�L�$$I�$�{t!�{u�C����H���d�H�$H��KH��A�A�H�=�8芛�E��uBH�E�_���DH�i��1�1������EH�E�4���f.�H�E��������C�`�I�$H�$�oH�H�SH�PH�$H�8�v�tGH�$H�8�GH��BH��{�%�������������UH�NE1�H��SH��H�5A~H���]gH��tHH�CH�+X�H�C H�O�H�k�C@�C8H�C(H�%�H�C01�H��[]���������f������r���f���USH���dH�%(H��$�1�H�`�H�|$H��H��H�L$�<��������H������ƃ0ƃ��D1�ƃ�f��(ƃ,ƃ �!Q��H�{HH���uH�`�Hc���o�H����x��H���H�@H��������H���H�x H��t	�?��H���H�pH�����x�����PH���ƀ�H�`�H�T$H��H� �ƀ���H��$�dH3%(��H���[]��H���H���A����8�)���H�������8������H�=F�腍�����H��1�1����3�����1��������c!�
���fD����������9��f���H��������t�i�d}��1�H���������ݵff.�f���USH��H����dH�%(H��$�1�H�`����H��H�L$t_H�|$ H�L$H�����������H�D$H��`�H��H����������N����H��H�D$H�`�H��$�H���C������u2H����H��hH�ŘfDH�;tH����gH��H9�u�H��`�H�D$H���OH��H��$�H��H�D$����������H�`�H��$�H�����������H�`�H��$`H�����������H�`�H��$0H���\������tTH�`�H�T$H��H��$�dH3%(u}H��[]�@���Q���fD�L�h���fD�[��f�H���1����諳�_���fD�����+���fDH�D$H�D$�S������ff.����USH��XH����H��`�dH�%(H��$H1�Hǃx�EbHǃ0�D$'�o�H�����H�D$t:H�|$0H�D$(H���$�������XH�t$(H�`�H�t$H��H�`�H��$H������������H�`�H�T$H��$�H�T$H����������`H�`�H��$�H����������qH�`�H�t$H��H�������2H�`�H��$pH��H��H�L$�3�������gH����H�`�H�t$H���H��H��t����Hǃ�H����H���H��t���Hǃ��yLH�`�H��$@H��H��H�$���������H�`�H��$H���|�������pH�`�H��$�H���U�������iH�`�H��$�H���.��������H�`�H��$�H����������+H�`�H�$H��H��$HdH3%(�H��X[]��H����H��hH�ŘH�;tH���ZcH��H9�u��e���@H������@�ǀ|$'��1�	�@���1��:���@�sJ�u���fDH� �1��xX@�������D�I�~�����f��k����fD�{���fD��K�O���fD�kH���fD�+�����fD�������������ff.���UHc�SH�,�H��H9�s%H���H�;H��t
�S�H��tH��H9�w�H��1�[]�@H�������[]�ff.����AVAUA��ATI��USH��H�t$dH�%(H��$�1����=�[u=�F|�!w�-��=��t/1�H��$�dH3%(����H�Đ[]A\A]A^�@H��@�L��"H���H��H�����1�H�D$ H���VH�|$ H�D$(H����H�D$0H����H�D$8H�{�H�D$@H���H�D$HH���H�D$PH�g��H�D$XH���WH�D$`H���VH�D$hH�����H�D$pH�=WH�D$xH���WH��$��^AI����1�H�`�H�5�Hǀǀ �H� �IDŽ$��@XHǀ�ǀ�Hǀ�1�AƄ$,fA��$(AƄ$�IDŽ$�IDŽ$�IDŽ$�IDŽ$�ٿ����1�H�У1�1��-H�����a�����1�H�=�s=��8DA�|$��I��$�H��t�8��fD1��EA�ƃ�����HA�ƃ����H���D$H�D$��H�|$�D��E1�A��H���H�=��[E1����H�=��XE1����H�=����WE1����H�=���WE1�1�A�H��H�=��D[E1���)��H�=Ԣ�WE1�1ҹ�H�=Ȣ�kWE1�1ҹ�
H�=���PWE1�A��H����H�=����ZH�H��迲�E1�H�ھ	��A�H�=|��ZE1�A��<H�k��H�=_��zZE1�A��H�Z��H�=l��TZE1�A��$H�_��H�=W��.ZE1�A��$H�9��H�=D��ZE1�A��H�<��H�=?���YE1�A��H�0��H�=;��YE1�A��H�,��H�=9��YE1�A��H�*��H�=7��pYE1�A��H�ڈ�H�=��JYE1�A��H���H�=��$YE1�A��H����H�=���XE1�A��H���H�=����XE1�A��H����H�=���XE1�A��H��,�H�=��XE1��H���������H�=š��TE1����
H�=���T�
�A�����Ã������N�'�Ã����H�|$D�������zh�U�1ҾH�=���Œ�8t1ҾH�=j�誌H�����H��I��$����tR1��@H��HD�H�����t(< t<,u�H��t��H��H��H)����1���u�H��tH)�H���Ω1ҾH�=���+��8�|1ҾH�=���H���g��H��I��$���tO1���H��HD�H�����t(< t<,u�H��t��H��H��H)�迩�1���u�H��tH)�H��覩�a���=�"s1����m=���b����H���H�@�\������@���H�=��1�D������*���H�=�1�D���~������H�=Ÿ1����i�����H�=��1����T�����誾�f.����ff.����:�=�8�=��u��S����e���=1��y@�t�1��=���e�S�H���������H����H���H��t���H���H��t���H���H��t���H��H��t�п���[���=�ff.�@��H���#���1�H���ff.����UH��ATSH��H�$H��f�H��X�dH�%(H�E�1�H�`�)�p�)���)���)���HDž��)���)���)���)���HDž�ǀ(���H��$����H9�tH��H��$�H9�u�H��H�L$H�D$H���H���H��P��H�`�H��H��H��H������1ۅ�tKH�`�H��H�H��H��P��8�~H�u�dH34%(����H�e�[A\]��H���ƀ�H��X�����`<�XH��X�H�xH��t(�?-�H��X�H�xu�8�x�H���H���H��t0�;��HDž��ƅ��ƅp�H��x�H��p�H���L���M��t2A�<$��HDž��ƅ�ƅ��L����L����H���H�xH�tH�=s"1Ҿ�W�H����L��X�H��1�1�M���1��mN�����x���H��X�1��r)���DH���p���u���E1��x���1��,���f�H��X�H�{����H��P����ݫ�H�{H�52�:荷���p�����������r����H����Džl�H���7EH���n���H�ًH����������!�%����t��L����A������D�H�SHDډ�@�H�`�L��H��H��E1�jH)�H���H��l��S���X��ZL���H��X�H�F���輹�ff.����UH��SH��H�����H�����dH�%(H�E�1�H�`�ǀ(H��$�H9�tH��H��$�H9�u�H��H�L$H�D$H�� ���H���H������H�`�H��H��H������+������uhH���ƀ�H������8u/H�����H�{t!H��������
��H�{H�5_�:躵��H�����H������1���KH�`�H�����H��H������8u*H�M�dH3%(H�`���(uH�]����H�����������=��ff.�f���SH�����1�f��(�f��*t[�D�9H�=Ԟ[��Jff.���ATUSH����?H��t!�H�=�H���@��@��@���tVI�� �I�D$xI�D$p�;t!�H�=��H���@��@��@���twIDŽ$�������Z@H���Ȧ�H�{1ҍp��jK��I��H��t��:H���E��H��tH�H�� �H�xL�cp詝Hǃ�H�Cx��[]A\�H�{臝I��$���DL�����%���I�� �I�D$xI�D$p�F���ff.�f���AVUSH���H�|$H�|$dH�%(H��$�1�H�`�H��H��H�$�v������unL�t$��H����L���L��H���%H��tFH���ΞH���V�H�`�H�$H����H��$�dH34%(uH���[]A^���������Ե�@AUATA��UH��SH��dH�%(H�D$1����f.Pk�_Hc�zXuV�)ȉ����
��E��H��H��t	�0f�UH�t$dH34%(H���HH��[]A\A]�f�A�D$H�щ�I��H����9�I��HcE='��H�E��HE�H�{�Թ�H��H����H��L��H���H�$L��L)�H�H�$��H�$H��H)�H�C�H)�t�H�JH�$�0H�$H��u���?������)�f.?jHc��F����@���D)��H���=��H��H�������H�P�0�H�$f�E�|���fD�EA�]L��H�-�c����IH��HE����L���������������tH�I���������I���H��H��I��I��G0H���4��)�A�H��	w�L)�L��A��f�H��H��?�H��H��H��HH�����AWAVAUM��ATA���>U��SL��H��H�t$L��$��L$�D$dH�%(H�D$81���>N��|$���A��FH�t$ �|$I�����D$1�L����=���I�H�I���DJ����L$I�Q������L�k������A�A��t@H��I��A�E����u�A��Ft%�D$ E�e�x��|$ ����+0I��fA�E�I)�L��E�.�l��H��H�\$8dH3%(��H��H[]A\A]A^A_�fDL�k�C.�n����D$�L���]���I�H�I��H��DJ���L$ ��@�ƅ�����?�?M�D������D)�D�Q�D�T$ ���1�D�Y��f�H��A�H�H�D��)‰T$ L9�u�I�	Hف�@E��t#L�D9H��f�H���@�0L9�u�H�L9�|$���r@���i�I�̈́����������fDL��L�L$�à�L�L$H��A���L��Hc��J��L�L$A�EL���������L$f�f.���Eׄ�uL��I��@��t��0�����D$�qL�k�t$ �C��t,��L��H�T@H���@�0H9�u���D$ ��M�lA�L���+���fD1�H�L$8H�T$(Hc�L�D$$L�L$�j����|$(�L$$M�E�L�L$��q���-�ɉt$$A�Utn1ҍy��
f.�H���A�L��)щL$$H�JH9�u�M�,���f.��D$L�i�����D�D$E��u#L�kA�L���p���M���A���L��H�������D$L�kL�ʈCA��E���裯���I��A���A��H�'=L�@=A����XLE�Mc�L���H����H��L!�H��A��H��u�I)�E��fD��H���I��H�L$HL�D$PL�L$X��t:)D$`)L$p)�$�)�$�)�$�)�$�)�$�)�$�dH�%(H�D$(1�H��H��$�H��H�D$H�|$H�D$0L��L�D$H�D$ �D$�D$0���D$H�L$(dH3%(uH�����u��D��AVE1�A��AUA�����ATA��USH��H��dH�%(H�D$1�H�L$H���=�H��Hc$='��T$H�߅����ƒ�yD9�	������H��$���1�D$E1��ED�o��E�����G0H�wA��D�&L�N����-�F��	�	��0�F�NH���_�H��H�\$dH3%(�XH��[]A\A]A^�H�{�-�P���@�����M�
D�H�H��H��N��fDH���
I9�t�H����u�0�
I9�u�>J�|t?H9���D�/�TH�O����H�DH���H��H���W��P���u���&���D��D$A�)��$���A����̉�1�A����Ѓ�A���u�Hc��D$�����A�DH�t��H��������)���0�N�х�u��$���fDH�UH�w�H��H���F����u��I���f��}I��L��H�
�A�vH��H��v1�Hc����H�����4����0��H�wD�oH�LH��H���B�0H9�u��$�U��H�D��tH��f�H��H���P����u������fD�D$H�
g_L��Z��H�q�HD��T������o����0H���-���H���[������ff.�AWI��E1�AVE1�AUATM��USH��H�.H�L$H��$��
H�t$ dH�<%(H��$�1�H�D$@H��$�H�D$8H�D$(�D$`H�D$0�'f.�L9�s�MH��H��A��H��H���K����H�Z��%u��J��xj�L$�1��H�t$H�H��Dr���D$E1�E1�A� �D$A��D$�A�<1wCH�����Hc�H�>��D�D$A� E1�E1��D$A��D$1���x�H�=���Hc�H�>���H�D$ H�(D��H��$�dH3<%(��H�Ę[]A\A]A^A_�@�K�H���f��K�H���z���fD�K��l�&
H����Y���D�K�H���B���fD�K��h�
H���$���f.��K�H���
���fD�KH�C��6��	��3�8H�þ�����H���%�������lH�Ȕ��Hc�H�>��@H�|$���/���ƒ�HW�H�D�L$H���DH��H�T$跗�9D$`H�T$��}D�L$E����
�D$tA� E1���f.�H�|$���/�N�ƒ�HW�L�
H�L$0L�D$t�x�L��L�L$�!���L�L$M����
�@�xH�P�A� E1��@�0�D$t�H�L$t�nfD����H�ܓHc�H�>��fDH�|$���/���ƒ�HW�H�H�SD�8����fD������oH�|$H�GH�D$HH��H���H�PH�W�(�\$h�D$hf.���f(�fT
�
f.
���H�|$8��
�<f��
E�ɺET$`���.D�T$HH��D�\$XH�D$|PH�D$P�t$ L�HL��$����AYAZD�\$xD�T$HE���:D�\$PE���D�D$E����A� ��D$~%�D$t�E1�H�T$~A� D�l$t	D9�����t*�A�H��H�D�I9�v�2H��@�u�H��H9�u�E�|H�SA��D�l$�X���D9t$t�M���C�D>�L9�sD�UH��A��E)�A��D;t$t�����DH�|$���/���ƒ�HW���D$~�/���f.�����	H�БHc�H�>��fD���J��u{H�|$H�GH�D$HH��H���H�PH�W�(�\$h�D$hf.��f(�fT
�f.
����f/�Z���D$t�E1�H�]T�����H�5��1��")��L$A� �E1��D$~%H�T$~�D$t�V���fD1�E1�1�A� A��*��+t3��#t>�� tI��0uTA�0fDH�����-u�E1����A�������f���f��t$H��|$�Dr���D$��*�E1ɀ�.�����H�0H�CH���DF��<*�@	H��A��D$`�w����A��0u+E��t&L9�s�H���E��L$t��A��H��A���L$tC�D7f.�L9�sD�UH��A�NjL$tE)�A��A9������H�|$���/��	�Ѓ�HG���H�D$(��u�aD����H�t�Hc�H�>��H�|$H�WH�BH�G�C���H�|$H�WH�BH�G�U���H�|$H�WH�BH�G���H�|$H�WH�BH�G�!����{2��H������H�|$���/��H�t$H�FH�PH�V�;u��H�H�D$(�H�|$���/���Ѓ�HG�H�8�H�L$0L�D$t�D�T$HD�L$�N�D�L$D�T$HE����H�|$(�v�T$���j��@�0E1��P�H�P��D$t�H�L$t���H�|$���/���Ѓ�HG�H�8�H�L$0L�D$t�D�T$HD�L$���D�L$D�T$HH��E���'�L$����:0��B�0�D$tH��E1��H�L$t���H�|$�G=���H�|$H�WH�BH�G���H�|$�G=��T�ƒ�HW�G�����Ѓ�HG��;u�x���H�|$���/�X�Ѓ�HG�H��H�D$(1�H�|$(��uH�L$0@��H�T$xL�D$tD�T$PD�\$HD�L$�[�D�L$D�\$HD�T$PE�����;u���t$x������A�-D�@�H�P��D$t�H�L$t���H�|$���/v|H�|$H�GH�PH�W�;u�����H�|$H�GH�PH�W�<���H�t$���/��H�|$H�GH�PH�W���H�t$���/�JH�|$H�GH�PH�W�����Ѓ�HG��;u�9���H�|$���/������u���fD�L$tH��E1��)���H�{D�q�H�sH���Dztf�C�<�H��D�ty��H���Dzu�H���D$�=����K�H���/����{4�}����K�H�������K1�H������H�|$���/���у�HO�D�1H����D$E������A��E1�����L$`9L$t�7���f�H���0�|$t�W�T$t9�|�����A�+�#���H�t$H�FH�PH�V���E�����|$`���EljD$`H�|$8���P���҃���e<H��<k��H�D$8H��0H�D$@�|$`D�T$PD�\$HH�H�U�D�\$HD�T$PD�H��A��-��H��D�T$XD�\$PH�D$H���D�\$PH�T$HI����D�T$XE�����|$����A� �t$�L$t����H�׾.�L$PD�D$HD�T$H�T$�R��H�T$D�T$H��D�D$HHcL$P�Q�A�D$tH���
.�����D$t�A� E1�H�7�����L$tH��A� E1����H�|$H�OH�QH�W����H�t$H�FH�PH�V����H�t$H�FH�PH�V�u���H�t$H�VH�BH�F����ƒ�HW�G�i����D$`�:����Ѓ�HF�����Ѓ�HF��!����D$t�E1�H��K���H�|$���/�&�ƒ�HW�Hc�H�D$(�`���H�D$8E�ɺ�FET$`H������H�t$���/�q�Ѓ�HF��8�%���H�t$���/�!�Ѓ�HF��8�w����D$t�D$��tNH�׾.L�D$PD�D$HD�T$H�T$�y��H�T$D�T$H���L$HL�D$PuA�@Mc��D$tB�.�L$tE1������L$`9L$t����fDH���0�D$t���D$t9�|�����L$`9L$t�
����H���0�|$t�W�T$t9�|����H�{��H�S��0H���D~t@��H���DA��
H���D~u�=���H��A�N�t$`�`��K�H����H�|$���/���Ѓ�HG��H�S�K��y�H��A��D$`��D$`A� E1��D$t�����.�����D$t�E1�H����H�|$H�WH�BH�G����A�+�^���H��D�D$PH��D�T$HH�T$�%��H�T$D�T$H��D�D$P�+���H�t$H�FH�PH�V�4���H�|$H�GH�PH�W�8�P���H�|$H�GH�PH�W�I���H�|$H�GH�PH�W�8���D�T$g�D$XD�\$PD�L$H觭�D�T$g�D$XD�\$PD�L$HH�D$8�*�D�T$X�D$PD�\$H�r��D�T$X�D$PH�D$8D�\$H����˜�H�����f.�SH��H��H��H�� dH�%(H�L$1�H��u=H�����H�t$L��H�<$H�|$�`��H�D$dH3%(u9H�� [��H�|�H�t$L��H�t$H�<$�%�H�T$H;$w���� ����UH��SH��H���H�L$HL�D$PL�L$X��t:)D$`)L$p)�$�)�$�)�$�)�$�)�$�)�$�dH�%(H�D$(1�H��$H��H��H�D$H��H�D$0H�|$L�D$H�D$ �D$�D$0���HcT$H��H9�r�C�Hc��DH�L$(dH3%(u
H���[]��:��f.���UH��I��H��SH��H��H��H��dH�%(H�D$1�H�|$�J���HcT$H��H9�r�C�Hc��DH�L$dH3%(uH��[]��Ɩ�fD��H��H��I��dH�%(H�L$1�H�|$H��H��H�������D$H�L$dH3%(uH����q��AWE1�AVI��AUL��ATUSH��H��H�T$H�|$pdH�%(H��$x1��H��$pH�D$8H�D$�D$,H�|$@H�t$ �:DH�;H���TH�kL�eH�/L9c��L�c�H��L���E����L�q<%u��I�����$臔�H�4$H�H��Dr��$E1�E1�E1��D$A� A��A�<1wjH����Hc�H�>��f�H���H���1�H�$H�C�yH�$H�H��F���@�$E1�E1�E1��D$A� A�L��1����x��H�=d���Hc�H�>��H��$xdH3%(��H�Ĉ[]A\A]A^A_��H�C1ҾOA�H�CNH�$��xH�$H����fDI�nA�N��e���DI�nA�N��M���DA�N��h�I�n1��/����I�nA�N�����DA�NI�n��6�����3��A�~2��I�nA�N�����I�nA�N����DA�N��l��I�n����@����H����Hc�H�>��@H�t$���/�N�ƒ�HV�H�
H����
E���cH��H�L$諂�‰D$dE1�A� H�L$H�D�$$��f.�Lc�H����H�{M�9L9C�"H��H�L��L�D$���L�D$H�MA��L�CD�$$����D$dD9�����D��)�H�Hc�H���!	I�4H9s�:
A��J�<H�$�t��D��+D$dH�$H�HC���fDH�|$���/�(�ƒ�HW�L�*H�L$ L�D$d�x�L���~�M�����@�xH�H�E1�A� �@�0�D$d�P�T$d�����/H�d�Hc�H�>��fDH�t$H�K���/���ƒ�HV�H��H�M����H�|$���/�Z�ƒ�HW���D$n�?f.�����
H��Hc�H�>��fD���U���7H�t$H�FH�D$0H��H���H�PH�V�(�\$X�D$Xf.��f(�fT
��
f.
����
f/�F���D$d�E1�H�
i@����������H�|$H�GH�D$0H��H���H�PH�W�(�\$X�D$Xf.���f(�fT
�
f.
o����D$d�E1�H�
}�(��D$n%�D$d�E1�A� H�L$nH�D�$$����D9��
���A��0uBE��t=H����
L�CM�HL9K�HL�L�K�A��H����D$d�P�H��T$dD��)օ������Hc�H���iH�{H�4H9s�@A��H�H�L$膁�T$dD��H�L$)�Lc�H�HCH�H���o���H�CI��M��I���I���H�C1�1�H�L$0L�L$�sL�L$H�{H�H�L$0M��LcL$d�)�����H�5^x�1��r�D$n%�EE1ɺ�D$dA� H�L$n�D$o���DI���I���H��H�L$0H�S1�L�D$�
sLcL$dH�{H�L$0L�D$H�����1�E1�E1�A� A��*f���+t3��#t6�� tA��0uLA�0fDI��A���-u�E1���fDA���A�������f��t$H��Dr��$��*�\E1ɀ�.�d���H�0I�FH���DF��
<*�I��A��D$,�/���@�O�N�I���H�|$���/���Ѓ�HG���MH�D$��u��f.����	H��|Hc�H�>��H�|$H�WH�BH�G���H�|$H�WH�BH�G����H�t$H�VH�BH�F���H�t$H�VH�BH�F�-���H�t$���/��Ѓ�HF��}u��H�H�D$�H�|$���/���Ѓ�HG�H�8H�L$ �UL�D$d�D�L$0D�\$����D�L$0D�\$H��E����E�����90���A�0�D$dH��E1ɍP�T$d�	���H�|$���/�F�Ѓ�HG�H�8H�L$ �UL�D$d�D�L$0D�\$�I��D�L$0D�\$H��E���~H�|$�7E���.�E�A�0E1�H���A�D$d�P�T$d�|���I���I���H��L�L$HH�S1�H�L$0L�D$��oL�D$L�L$HH�H�L$0L��v���H�L$H���H��H�ƁH�S1��oD��+T$dH�{H�Hc�H�L$���H�|$�G=��w�ƒ�HW�G��n���H�t$�F=��9�ƒ�HV�F����H�|$���/�#�Ѓ�HG�H��MH�D$1�H�|$��uH�L$ @��L�D$dH�T$hD�L$HD�T$0�x��D�L$HD�T$0I��E���S�}u�vD�L$hE����A�-E�H��D$dI�H��P�T$d����H�t$���/��H�|$H�GH�PH�W���H�|$���/vWH�|$H�GH�PH�W�}u�&���H�|$H�GH�PH�W����H�t$���/�eH�|$H�GH�PH�W�����Ѓ�HG��}u����H�t$���/w��Ѓ�HF�����H�C��M�}H���H���H�$1�1�H�C�mD��+T$dL�CH�Hc�H�$����L$dE��tAL�Ǿ.H�L$H�L$0L�D$�$w�L�D$�T$0H��H�L$Hu�AHcɉD$dA�.�T$dL��E1����H�|$8�L�E<f��E�ɺET$,���.D�T$0H��D��H�D$lPH�D$PL�HL�D$x����Y^�|$hI�����&���D�T$0E�����T$���t���A� ����H���H�$H�ƁH��H�S1����A�~4�.���I�nA�N���I�nA�N1��
�I�nA�N���I��D�y��C�4�I��D�|q�A�����%A�H��Dru��$�����I��I�vH�N��DJu�A�N�$I�����H�t$���/�C�у�HN�D�9I��A��$E���n���A��E1��c���H�C��M�H���H���H�L$1�1�H�C�����T$,9T$d������I��A�0�D$d���D$d9�|�����O�N���Hct$,H��H�L$�s����A�+�o���H�t$H�FH�PH�V�}u����H�t$H�FH�PH�V�����T$dH��E1�A� �M���E�����D$,H�|$8��E�P���҃���e<H��<k��H�D$8H��0H�D$@�|$,D�T$HD�\$0H�H���D�\$0D�T$HD�I��A��-��H��D�T$PD�\$HH�D$0�Uu�D�T$PL�D$0H����D�\$HE���q�D$�������A� �T$d�T$E���Q���L�Ǿ.D�L$HL�D$0�s�L�D$0D�L$HH��HcT$�!����B�D$dA�.����@�D$d�E1�A� H�
�n����H�|$H�OH�QH�W����O�N���1ҾO1�H�L$H�CH�CN�ViA�H�L$H����H�t$H�FH�PH�V���H�t$H�FH�PH�V����H�t$H�VH�BH�F���H�|$H�WH�BH�G�����|$,���EljD$,�����Ѓ�HF��F����Ѓ�HF�����D$d�E1�H�
�3��H�|$���/���ƒ�HW�Hc�MH�D$�X���H�D$8E�ɺ�FET$,H���4���H�t$���/��Ѓ�HF��8���H�t$���/���Ѓ�HF��8����fD�T$dE1��d�T$,9T$d� ���fDH���0�D$d���D$d9�|�����T$,9T$d�t����H���0�D$d���D$d9�|��R�����I�V��0�f���H���DA�=���0�
H���D~u�=���I��A�N�t$,�d�L��L�rI�F��DFu��JA��D$,��:�H�t$���/���Ѓ�HF��I�VA�N��y�I��A��D$,���.�:���H�|$H�WH�BH�G�:���A�+���I��D�L$HL��L�D$�q�L�D$D�\$0��D�L$H�i���H�t$H�FH�PH�V�m����D$d�E1�H�
����H�|$H�GH�PH�W�Y�H�|$H�GH�PH�W�8�!���H�|$H�GH�PH�W�8����D$d�E1�H�
���[�D�L$TD�T$PD�\$H�D$0���D�L$TD�T$PD�\$H�D$0H�D$8�{���D�T$PD�\$H�D$0轕�D�T$PD�\$HH�D$8�D$0�������ff.���Uf�H��SH��H��H��H��(dH�%(H�D$1�H��)$H�D$�Q�H�D$H��tH9�w2H�$H��t
�H�$H�D$H�UH�L$dH3%(uH��([]ÐH�\$H�����q����H���H�L$8L�D$@L�L$H��t7)D$P)L$`)T$p)�$�)�$�)�$�)�$�)�$�dH�%(H�D$1�H��$�H���$H�D$H�D$ �D$0H�D$����H�T$dH3%(uH��������H���H�T$0H�L$8L�D$@L�L$H��t7)D$P)L$`)T$p)�$�)�$�)�$�)�$�)�$�dH�%(H�D$1��H��$�H��H�D$H�����H�D$ I���$�D$0H�D$覅�������H�H�L$dH3%(uH������~�f.�D��AWAVAUATUSH��H�$H��H�$H���dH�%(H��$� 1�Ƅ$�H����H��$�I��A�Չ�H���H���lH=��cM���RA�<$r�L��$�H��A�L���	H�T$ L��H�T$�O{���G�/L��A�E1��q}�A�H�$H��H�����y�mL9��$��/L���4}�H��H���HE1�E1�A����E��LD$ME�IE�M�̓���H����x�#��I���~�AUH�Um1�AVH��I��1�M���̥��XZ�J�L��$�H��E1�L���
H�T$ L��H�T$�Cz��y?����fD1�H��$� dH3%(����H��� []A\A]A^A_��D$@D�t$<H�$���I9��5H���E1��x���/L���|�H��H������������/H����{�H��H9���H��t
�x��H�L$�E1�E1�L��$��.L��f��$��km�H�D$ H�L$H�$H�D$@H�T$L��H�L$�)y�����D�D$<D�L$@L�D$L�L$���L�D$I9��JH���L�L$H�L$�x��H� �H��H���H��ti�2H����������!�%����t��L�L$�����L�D$D�H�rH�L$HD։�@�H��H��H)���W�H�L$L�D$��L�L$��A���~���H���E�M��L�$�f���fDA���~���L��$�H��L����H�T$ L��H�T$�x�������E�������A��tH�$E1�A��������uH��H�ij1�1��������x���fDL9���������c�M��I��H��H��j1�1�赢���2���H��H��i1�1��蘢������L�L$L�D$H�L$�,�L�L$H�L$L�D$I9��5����_����L�$M���$���@���H9$�����4���@Ƅ$�L������/H�D$ E1�E1�f��$�L��$�H�$H�D$�^����H��E1�E1�L��$�H�$L��螆��H�$H�D$ H�$H�D$�/� ����+y�ff.���1��5���D��USH��H�� �H���H��tH��[]�@�#<H��t>�x�&z�H��H��t.H�8�Fh���H�}���_H���H��[]��H��H���[]�f���H��H��tL�7@��t<H���J@��:t�H����t ���J@��:u�/u�z/tH��������H�]��H�z�R��t�@teH���f.���@tH���VH�N��u��E1�H9�s#A���.H��A��H9�r��V��tDH��H���W����u���H����D��AUATUSH��H�$H��(dH�%(H��$1������I��H��</��H��H���1�H�����H�l$H�Q�H��蹅�H�����H��H�$�
H����������!�%����t�L������D�H�JHDѹ��@�H��H��H)�T$1��|k�����l�t$H�$H���C�����O�Hc�H������PH��t
�
���O�H��H���ox�H��$dH3%(H���5H��([]A\A]��H� �H�l$�H��L�h@�sg�H����M9���1�L���Gl�A���t4L���e��L��H=�HF���\D��H������a���H�l$�D$����H�
H�{H��H��H�H�L�H�L�H��H)�H)�H�H���H�����DH��t��U���fD1������H���h\H�$H�����@H�<$1��Mw�������
��L��L�����L�f�L�����+u�ff.���1�1��c�����AWAVAUATUSL��$���H��H�$L9�u�H��H�dH�%(H��$8@1�I��H��H�=�RL��������nH�D$H�D$H�|$�L���bH���
d�=��L��$H��L���L���H����L��
H����������!�%����t�H��$00L������L��$  D�H�JHDѹ��@�H��H��1�L)�A�Ճ�Hc��}���-�/H���[s�H���jH)؃�D�hH�Ƅ00L��H������H��u>��uº�L��H���*r��x�Lc�L��H��L�����BƄ,00�DH��$  H�|$H���K���H����H�݋UH����������!�%����t��L�������D�H�UHD��H���b�H)�A�|�/A���(D�uHc�Ic�Ƅ,  /Ƅ  L��1H����������!�%����t������D�H�qHDΉ�@�H��A��Mc�L)�B��,00/����L��H���b��u|A9�}A��Mc�B��4/t
D�����H��$8@dH3%(��H��H@[]A\A]A^A_�f.�H�|$�H�|$�lc�H��������z���fD�ED9�u�HcՀ�  /u�L��H���a��t��w�����E�H���  /t[A��Hc�Ic�Ƅ  /Ƅ  ����f.���Hcɀ�/�����HcŃ�Ƅ/Hc�Ƅ����Hc�I���}����nq�ff.���H���H���1�H��t�:uÐAWAVAUA��ATI��H��USH����WI��H��tT�8tOH���&f��L��H��L�p�����tbM��t-�{L��t$�:H���^�H��H��u�L��H�������t0E��u;L���T�fV�������H��[]A\A]A^A_�@L����T1���@H���L��1�H�XaL���1����������f�AVAUATUSH��H�$H��H����dH�%(H��$1�H�CH�����8��I��L�����������H����H�{�VI��H�����8��H���3@�H��L�`�9_�L��H��H���_��t=M��tj�{L��ta�:H���]�H��H��u�H���^�L��H��H���n_��u2L���S1�H��$dH3%(��u)H��[]A\A]A^�L���pS������ɺ�������o�ff.�f���H����xt���f.�1��ff.�f���AWAVAUATUSH��H���H�� �I����dH�%(H��$�1�L�e@I�GxL�mHL�d$H�����8��M��tA�}/��I�pH�����M���WL��H�5��p�I��H���lH���dl�H�T$ ����l���C�D$8%�=��/H�|$1�����H�C�����H�D$H�E@�C@L�c�H�C1�H��$�dH3%(�H���[]A\A]A^A_��I�pH���3���M���*����?/�!����\�L��Lc�H�D$�D$��\�I�|�nQI��H�D$H���MI�wpL��H���^f�C�|4�/t�D$C�4/���D$1�A�}/L����)D$Hc|$L��xh�H�}@H����L�e@���f�H�5��:H�|$��i����f.�A�}~�Q���M�u�/L����Z�H�D$I��H����I�ĸ� L��M)�L��$�A��L��DO�Mc�L����z�BƄ$�H���
e�H����H�H H����I��H�|$M�Ox1�AUH�
]A�/1�j/��H�}@XZH��t
D�KPL�d$�����L�e@M��tL���/PH�E@������
���DL���ph�H�}@H��u���DL�d$�V����k�AUI��ATI��UH��S1�H���6�����u&L��H���Gm�H��H��tM��t1�H���P���I�EH��H��[]A\A]�ff.���AWAVAUATUSH��H�$H���H��I��I��I��dH�%(H��$�1�H��tH�H��ty�E<.t</tsM��tA�?uxH����xt�L��H�����tAL��L��H���	���H��$�dH3%(�`H���[]A\A]A^A_�H�|$��N1���f�H���h�����u��f��
��t@�R
H��H�D$��Y�H�L$�X�Hc���H�C��|/�YH��A�܅�y�L���PH�D$H�|$t�H�D$�8�t���I��H�D$ L��$�H�D$�XDH����xtH�T$L����f����L��L��L������H����H�������;I�������:L���W�H��H��t�H��1�I��L��H��L������=��j���A�I��L��1�H�}Z�1�豑���D���@L�����������L��L���������1�fDH�|$H�D$�)MH�D$�&�����9[������������L��H�L$�:X�A�H�D$A�|$Mc�Hc��LL�D$L��H��I��H�D$Mc�L��L�D$�a�L�D$H�L$H��C�:K�|H���a�C�D'�C���L��L��L������J����=h�f.����t�DH�?�j����ATUH��SH��H��0dH�%(H�D$(1���������H��t�GH�7H�L$H�=%q=�P蝴����lH�D$H�H�D$��K�oH��H�CH��H�EH�� ��vH������EH�|$H���E��(�H�D$(dH3%(�DH��0[]A\�H��t�L�'H�5�L���f��uMH�C�oH�\$H��)L$H�� H�D$ ��vH���B�H��H�=p=�D$ �B�f�H�5(XL���e��u-�sH�;�MH�t$H�=�o=H�D$�LB�?����H���UH��A�jL��H�=�o=��L�L$ �g�H�\$ Y^H�;�s�MH����D��NJH��H�D$�q
H�L$�EE1�H��A�H�=uo=jH�u�P��XZ�Y����e�ff.���H��(1ɾdH�%(H�D$1�H���	���H�D$dH3%(uH��(��e�ff.�@��H�?�D�@H�GXH��t��DH�@�����t.H�G8H��tM�8tH�ҋw@���҅�tXH���Y���f��GT��t�H�GHH��t@�8t;�ҋwP������fD��H�|VH�=�)�������HD�H���!����H�k)H�=MV�������HE���ff.�@��97�H�@�SH������tg�GH��p���H�=�诮H�߾����H�=��葮H�߾�����H�=(��s�1�[���H�=y(�W��H�=m(�F��CH�{�p��7��H�=_(�&�H�߾�Y����H�=A(��H�߾�;����H�=T(��1�[�fD1��ff.�f���SH��H��tHc���W��H�
�T�1�H��TH�5�T���H�`�H��H�5����H�����[�S����AWAVAUATUSH��H�$H��A�H�
��1�1�H�=gl=dH�%(H��$�1�诒�Ã���8H��@�H���H��t	H�=*l=�йH�ŀU[�H�=�k=L�l$pH���#>�H�€3[�H�=�k=�>H��L����=I����L���A�nM���M����A�Ff�E1�Idž�HDŽ$�L�<$)�$�)�$�)�$�)�$�A�?��H��$�H���\E��t	H�<$�FH��$�A�nM�����H�
�j=H������Ƅ$�H��$��
H��$�H���Q�H��ƉD$X�H�D$dE1�H�L$PH�D$PH��H�5SH�=�j=jA���H�H���ƔY^H�}H��t�qE�t$XH�|$P�SHH�EH�=�R�c�I���ƔH��I�$H����H���tP��A���������u���ZI�$H��1�H��tH�
�i=H�������L
H��$�dH3%(���H�Ĩ[]A\A]A^A_ÐD���E���8HDŽ$�f�)�$�)�$�)�$�)�$��]���H�-�@�A�I�,$�1���DH��$L���D�D$�.]�D�D$������$%�=@����H�5uL��D�D$�a�D�D$H��H��$�� 1�L����H���ƔD�D$H��$�H�H��$����f�H�
��:1�H�t$PH����G���������1�L�l$L�4�H��$�D$H�$H��$�H�D$ H�D$HH�D$�fA�/�L��1�H��O��H�$L���#\��u��$%�=���H�D$PH�<(�`�H��L9���L�l$P�.I�I�EH�x�^�H��H�D$HH����H�=[P��I�}����u�I�$Ic�L�OL��$��|�/�9���M��H�K)L��1�������7���H�=�O�`�H���SH��H�D$�M�@H�H��H�D$�BL�D$�A�8H�$�dH�3�H�=���������H��������AH����/H�D$H��H�T$�K�H�T$H���rH�t$H����j��H��tQH�|$��)k��u>H�|$�/��\�H��t
H9D$t�H�$�8��H�T$H�t$H�<$�KH�|$�]AH�$�8��H�<$H�T$H�5�#�K���f�A�FIdž�)�$�)�$�)�$�)�$�HDŽ$����
M���/H��$�A�����H�1�H�|$P1�H� ND�D$���I���ƔH�$H�5H�|$PL����H�|$PH��$��@D�D$H��$�tI�H��$��6���f�H�$L��H�5�H�=�MD�D$��D�D$H��H��$�u����f.�H�|$PL�l$�]�D$���}L���m9����I�}�����H���������DH�T$L��H���JH�3�H�=6�L�D$�M�����������H�<$�?tH�T$H�5M��IH�T$H�<$H�5,9�I�P���fDH�=�B�]�H������H���AH��$�H�5#H��H�D$H�T$ �k�H����H��$�L�|$0L�|$ H��L�d$8L�d$@�l$/H��f.�L����H��1�H��
�C���L��H����g��H��t�L���&h����L��H�5�1��mk�H��H��u��l$/L�|$0L�d$8H�|$�l>�����H�5�L����[�H��$�H���(���H�|$ �H�
�b=H���L��$�Ƅ$���L��H����������!�%����t��L������D�H�VHD��‹D$H��L)�D0�D$�u@H�t$H�|$H�D$H�!5���@H�T$H�51KH����G�?����Hcl$H���^�I��ƔL�t$pH���I�$M���W���L�=�J�I�<$I�vH���GI�>I�<$H��H�5��IE��uGM�6M��u�������@��<H�D$@H�$�����H�|$�l$/L�|$0L�d$8��<�.���H�T$H�5\JH���G�@����uX�A��c���f.���SH�=�a=�O�H���ƔH�;H��t�+Z�H�H��ƔH�;H��t�Z�H�1�[�D��H��H�5a�H�=�`=�7H�5��H�=�`=�7H�=�`=�5H�=�`=H���v5fD��H����H��dH�%(H�D$1�H��H�=�`=�t�H�$��uH�t$dH34%(H��u
H���@1����gW����UH��SH��H��8dH�%(H�D$(1��F�H�L$H��H�=�`=�P�����tZH�D$H�\$�o)D$H�@H��H�D$ H�� ��vH���?�H���LH�D$H�E1�H�t$(dH34%(uH��8[]�H�E���V�fD��UH��SH��H��8dH�%(H�D$(1��F�H�L$H��H�=�_=�P�T����t\H�D$H�\$�o)L$H�@H��H�D$ H�� ��vH����H���'L�D$1��EH�t$(dH34%(uH��8[]�H�E���V�@��UH��SH��H��dH�%(H�D$1��[E�H��H��H�=._=�P覢���t$H�$H�1�H�UH�t$dH34%(uH��[]�1����U�@��H�?��9@USH��H�� �9��t$��H���H��t�9HDž����H��[]���UH��H��SH��H���D�H�}H��H���yX����H����[]�f.����"H��H��E1�HLJH��1�H��@��H�I�� �A��L��H�ȹB�H�I����g��BH���D��f���H��H� �H����u�H���G��ff.����SH�� �H�C`H��t9H�ShH��t0H��H��PH�{H��t
�k8H�CH�{h�Z8H�Ch[���ATUSH�� �H�K0L���L9�����A����7H��@�H�CH��Hc��9fD��H����Hc�H9�cH�{=�~%���A9�~uH����Up���H�{Hc��7���C8[]A\Ð[H�0E]�1�1�A\��{����1�H�JE1��{��H�{Hc��fDD���1�Ic��w7H��H�C�,���ff.���AUATUSH��H� �H���H���H��txH��t�H�5hQH���V��ug�}taH���B�H��I���B�E�dMc�L���6I��H��L��I��H��H�0Q1��%���H��L��[]A\A]��H��PH��u�H��H��[]A\A]��8f���AUI��ATUSH���*���H��I���A�H�ō@A�E�}�
6Hc�L��I�EH��H�Content-H�H�{�: �Ctypef�C�C��J�A�EL���H��[]A\A]��5ff.����AWAVAUATU1�SH��H� �H���H��tBH�I��H��t7�;t2I���H�=PH����€���uH�5�DH���;�H��tH��H��[]A\A]A^A_�DH���@�N�4(I�n	I��
L���5M9�I�4$LF�I��H��L���J�L��L��C�/H�5.D�d?L��H��L���V?I�<$�4M�<$����USH��H�� ��{Z��H��phW�1�H����CZ�+H�s�CY1�ƃ�Hǃ�Hǃ�ǃH�CH�C Hǃ�ǃ�H�C`Hǃ�H��t�H�=���������H�;�CXt(H��@��UxH�C(H�E H��tH��[]��f�H��[]�f���AW1ɾAVAUATUSH��(H�� �H��phWdH�%(H�D$1�H�����*H�Cƃ�Hǃ�Hǃ�ƃǃH�CH�C Hǃ�ǃ��CYH�C`ǃ��Hǃ�H���|�H�=��H���H��€������CXHǃ�H���H�ƹH�=/2�������H�kPH����H���=�H���I��A���_5H��D��H�H9���I���D$A��@DH�L��D��H��H��t-D�l$E��1�A)�A�D��I��H�I9���E�/A��;v���6�I��H����ΐ�CXHǃ�H���&����9fDH�ChI��@�I��$�H��t��A�T$xH�C(I�D$ H��t��H�D$dH3%(�WH��([]A\A]A^A_�f.�H�;�CXHǃ�t�H�ChI��@��f.�H�L$A�T$H��H�������u3H�D$�|$H�C`H�@t	�T$A�W�H�khH���1������*���f�I��@�H�C`I��$�H��t<�|$t]�T$H�khA�W�����I��@�H�C`I��$�H��u/�H�ChH��1�H�5�>A�T$P����DH�kh����H�L$A�UH��H����(���u�H�D$H�C`H�@�,����-L�ff.�f���ATUSH��H�� �dH�%(H��$�1�H����)H�{H�����0H��@�H�{ H��t�0H�{pH��t�/H�{xH��t��/H���H��t��/H�{hH��t��/H���H��t�/H�E(H��t��H���t��H���H��t�/Hǃ�H���H��t�q/Hǃ�ƃ�ƃ�CZHǃ�H��$�dH3%(u[H�İ[]A\�f.�H�;H��@������H�EpI��H��u���fD�H�Ep��L��Ѕ�������J�fD��H� �H�H�@H�@xH�@pHǀ�H�@h�f���AWAVAUA��ATUSH��dH�%(H�D$x1�H� ���t
�xY�_A��vH�����A��t-H�L$xdH3%(���!H�Ĉ[]A\A]A^A_�D��1��G���DH�>H���$D�fE���H�FD��H�D$�0I���nH�H�D$H�0A�D$�H��L��f���H��DN ���A��H����u�D��L�t$@���D$H�D$L�:L���L7�H��H�����H�5u<L���G����H�D$8H�]H��L)�I)Ā} ���H��H��H)�H�L�; t�I�׹H�=(<H���������H���B/H�|$8L��H�D$8��H��H� �H����H����H�|$8�,H� �ƀ�L;t$@���D$����H�@�H�l$@H�@XH��t5H� �H��H����ЉètH� �H����&�������E��uCH�|$@�:�6�H��H��t,D�`�@H���H� �H�t$@H����$D�cH� �H��1�H����F#����D��L�I9�sPM����P�� t	��	��L�xL9�v0H��
L��L)�H���/G�H��u�H�ھ
L���G�H��u�D��L�t$@��D�d$H�D$LA�������H�5��L���cJ�Å������A����	L���P�� t�H���������P�� u� ��H�������L����*H�5�9H��@��1��RP��������fDH�5�VL���aE����H� �������������=����L$��udH� �����~BH�@H��t9�H�=��H����€���tH�ƹH�=.������?�.�[������|$�M�L;t$@t+fD�|$�7��r���H�5-9L���D���G�E:�F���L�{L���)I���H�
�8I��H�CHC�H���6���H��t��8A�$���A�H�t$8L��L���3A�G�L��L�d$@�D$H�W)���A�A���H�A�H�=���:������Z�H� �H���H��t�)H� �L������蚢H��袢H����I�@���H��1�H�57������A�PP�t���H�|$8�+H� �H������������H����x���H�D$H�]�D$4H��H��H��DB u�����H��H�D$ I���3�H�D$�(�L��1�f�PI��H��H�h7�@1��W��H��E1�M��A�D$H�ھH�=K7jj�L�|$LAW�L$8腤�H�D$0H�� �D$;D$4��L�|$1�H�|$81�H�T7L������L�����'H�T$8L���\$HH�T$@�'I�<$�x'L���p'����H��6I�|$H��I�$H�T�I�T�L��H)�H)�H�H��H��H�������H��1�H��L�L�H��H9�r����M������H�x�
1��I������H�5�5�����/���@����6A�$�T�A�T��>���H�|$�&I�<$�&H�L$ 1�L��H�61����H��E1�M��A�D$H�ھH�=�5jj�AWL�|$8D�����H�D$0H�� D;|$4�����H���(H��I��1�L���L��H��H��H�p����H�5�5L���X,�H��t"L���&�H����A��T�fA�T��p���H�|$��%L�D$P1�H�L$ L�Ǿ L�D$(H�e5�b���A���D$D�L$ A��z�T$Hc��s%�T$HcL$H��H��H�D$�T$4H��H�L$�^:�Hc\$ L�D$(H�L$HL$H��L��H���<:���@�����U��SH��H��8dH�%(H�D$(1�H�|$1��ɉt$@��H�t$H�D$�D$$�u���@��t H�T$(dH3%(u"H��8[]�f�H�߉D$��$�D$���@�f���ATUSH��0H�� �dH�%(H��$(1���
SYusH��@����H�E`��ƃH����H����Ѓ���������������H���H��t�D$�'$�D$Hǃ�H��$(dH3%(�H��0[]A\�DH��t+H�|$�q��t$H�|$1�1�����H�E`�S���fDƃH���H����H�|$��.�D$L�d$H�3L��UhH�uhH�H��������u)H�31��Uh1��&���f�ƃ����������L�����L��H�3�UhL���_��D���H�|$ H��21���H�|$襦���D$�a����>����H� ����tH��`���lu,H���OE1�A� jH�7�QH��H����epH��ø�����f.���H�?t*SH���
H�� H�;tH���~������u�[��1�[�1��f���H� ����tH��`���lu�OH�7E1�H����Q1��R}f��ff.�@��H� ����tH�`���luH�@�H���1�ø�����D��H� ����tH�`���luH�@�H���1�ø�����D��H� ����tH�`���luH�@�H���1�ø�����D��H�@�H�@8H��tH��H�� �H�:��1�H��ø�����ff.�@��H�@�H�@@H��t��f.�SH�� �H�s@H��t'H����9�H�����t
H��[�D1�[H����USH��H��@�dH�%(H�D$1�H�CHH��t^H����H��t6H����"H���H�$H��tH���+�H��E1�H�����H�$H�L$dH3%(uH��[]��1�����;�ff.�@��H�@�H���H��t�������H�@�H���H��t�������H�@�H���H��t�������H�@�H���H��t�������SH�� �H���H��u"H�@�H���H��tH�;t��H���[�@1��)6�H���[���SH��H�?H��t�H�{H��t
[�@[�fD��H��H�?�*�1�H���f�ATA��U��SH���~Hc����~mH�x1��D��H��D�G�H��9�~ALc�F�A��\u�B�t@��\t
D8�u�E��tʃ�H��H��Hcу�D�D�G�9���[]A\�DH���[]A\�ff.�f�AVAUI��ATUSL�'A�,$@���,�8�I��H���I��A�,$@���H��DB u�@��'tm@��"tgI�$L��1���u��H��H���t�DB t��D)�1�L������H���tI��
�H��H���t�DQ u�I�][]A\A]A^�I�|$A�D$�$H��D��u,H��@��L)���r���H�@8�u�H�SH���fD�S@8�t<\tH�������
w�H��s��@8�u��t��CH���DM�e[H�=؋]A\A]A^�@AVAUA��ATI��U��SH�?�H���
D��H�ӄ�t'@8���H�S�C��"tW��'u܄�uR���I�$I��H���'�H�I�$L��[]A\A]A^�f�@8�u@��u&fDH����t��r8�t<\u�����BH����fDH�����U���DH��H)��I��D:+u�DH��@8+t�I�$L��[]A\A]A^�ff.�@AUATUSH��H��HcWH�?��~H�sH9�t�C�H�;HcSD�kH�{1�A)�E��~AI��@��)�H�� �A)�C��E��~H�;HcSH�D��A�T$p���H����[]A\A]�AUATUH��SH���< u5H��f�H���; t�H9�t#H���J&�H��H��H�P��B��E��t8<[t4H���f.�H�����t<[t< t<.u��_H�����u�[H���$�H����H��I����L�H�&�P@�]H���[$�L�`H��tjI9�tH��I)��%�H��L��M�H�P�@B�A�<$[uOI��M���`L�A�EL��< w�H��s@f.�H���< w�H��r��DH���@%�L�$�A�$H��[]A\A]�L���Z���f�SH��H��dH�%(H�D$1��D$�{���H����$�H�L$E1�H��H���PH���A�jH����FgXZH�D$dH3%(uH��[��)5�f�AT�
USH�oH��HcWH��I����4�H��t,H��H)�H��~�x�
tC�H��H�CH)�)CH��[]A\�f�HcCA9�|'�DH��H�C�C[]A\��@��f�1���ff.��AWAVAUI��ATI��U��S�ˉ�H����D$D�����D$�>L��A���L��L)�L��A)�A9�AN�Hc���#��uA9�}#�|$uI�A�N��t$Hc��3�I��H��u�H��L��[]A\A]A^A_�ff.�@SH�����H���_#�H�ލPH���H����ւ[�@AWAVAUATUSH��H��HcGH�t$H�$I��H=���D�s(L�c A�D��L�{D��L��L�����H��tkL)�H�<$H��t#E1�D��L��D��L�����H��t
H�$�H�����HF�H����H��[]A\A]A^A_��{���D�k�o���f�Icո�H���HF�H��t�H�t$A��H����r��L�����H�I��1�A��t
A���A��t
A�f�H��A��tA��H�t$�)CHCH��[]A\A]A^A_��H�T$A��H�sH�׃�r�����H�1�A��t	���A��t�f�H��A��t��H�L$H�P�L�$�A�<$
�z���A�$H���m���ff.�AWI��AVAUATI��UH��H��SH��H����D���ƃ��;!�H��I�������uL��D��L��H���DD���H��[]A\A]A^A_�D��H��E1��1ҾH�=p%�=�E1����H�=`%��E1����H�=V%��E1����H�=M%���E1����H�=B%���E1����H�=7%��E1����H�=/%��E1����H�='%H���g����SH�� �H�5����H����quH����UsH���[����AWAVAUATUSH��H�$H��1�H�t$0H���H�=�dH�%(H��$�1�HDŽ$�HDŽ$��1ҾH�=�H����H� ��D$`H���H��~H�� �H�V0H9�������H�55$H����H�����=H����H����x"�XH�hH�5$H���5?�H���m
�A��A)�Ic�H=���H��@�H�5%�1��RPH��$�dH3%(�iH�Ę[]A\A]A^A_�H�����ىL$`�8����I�@�H�5� �1�A�PP�H����H���I���Ic�I��H���R���H�5'#L�����H����
L)�L��H�H�D$�H�D$H������H��@�H�5�#�1��RP� ���@�0�A���uA���I�ƸDL�A�t$Hc��PE�fH��I�~I�H��"1�1��b���H��I�~ 1�H�z"1��K���E1�1�1�A�F(I��A�FI�FH���H����I]�H�E1�1ҾH��U[H��H���#]H� ��H����[I��H��H�D$X�{�A�GH���H��$A�GH�ǾH� �L���1�H�D$(�}H��ǔH�H��t6H� �L��$�H��$@1�H��H�Q0H��$@L��Ѓ����D$`�\$t�D$x�D$pH��$��D$|�D$dH�D$PH�D$8H�D$ H�D$@H�D$HA�F��uL������~|H�|$(HDŽ$�HDŽ$�HDŽ$��1
f�I�^)�$@��H��H����2���-L������H��u�L���P�L�����H��u�H��ǔH�H��t3L��$�H��$@H� �H��Hc�H��$@L���H�D$ H��tH���H�D$8H��tH���H�D$@H��tH���H���H����HnH�|$(��I�~ H��t�pI�~H��t�bI�>H��t�UL���M����H�h�"H����H�������H��@�H�5� ��RP���H��$@1�1�H�D$H�D$H�D$DL���x���I��H��tyM�eE�����])�I��H�B�D` u�:L����I��H���6H��t�L�����L�$L9d$��H�|L��H��L���G#�L����I��H��u�L����L�����I��H���k���H��t.H�D$H��t$H�t$H�|$(�DH��$@H��$H�xH�l$1�fo�$fo�$H��$0fo�$ H��)�$@)�$P)�$`H��$p�FH��H��u$����f�1�H���H��H�����H�;H�5��+(��u�H�[A��H��$�H��������l$pHDŽ$�DŽ$����'�I��H�0H���
DH��$�H�H���DN u�L��$�H��$�H�D$���D�|$I��L�t$hE1��;L�����H��H��$�H����H��$�I�$H�H���DQ t@H��H��$�H��H��DQ u�=H���Y�H��tG�=L����H�5
~H��H���'����M��tL���@L����I��H���-H���%H��$��8�4���L��L�t$D�|$H��$�L�t$h�!H���1�E1�H��$��+N�|-L��1�I�w�L��H��H�<(I��L��� �1�H��L����I��H��u�M���wA�,H��$�L��$�L�|$H�@�1���L��$�L��$�L��L�������H��ǔH�����$�H��tpH� �H��$��L��$HH�t$Hc�L��$PH��$XH��$@H��$�H��$`H��$��Ѓ��tUH��$���$���L�|$H��$�L���~��uH�L$0��H��L����8H�|$H�5�7%���9H�|$�u
H��$��h
���H��t0H�D$H��t&H�t$H�|$(�DH��$H1�H��$@�A�$I�I��I�$�DB u�L���hL��H�D$H�����2�L�,L;l$��H�|L��H��L�������I��$�H��I��$�1�H�D$��	L��H���������f�H�5�FH���1$���D���H��$�H��t�g	L����H��$�����f���H��H��M��H���H���H�D$1�1��R	L��H���W�H���4���H���G�A�����I���H��I���1�H�D$�	L��H�������H������tnD�\$tE��~nH�D$H�$���H�|$��D�T$dE����H�|$�H��$��t�D$d����H�D$N�O�)����D$d��D$du�H��@�H�5��1��RP�D$t�����c���H�=wH��$�HDŽ$��[
H��$��q���L�����X���H�T$���tN1���<]tH���Ȅ�t2�J<[u�H����H����@�ǀ�[��@������H���u�����H�������H���H��$��H�5�[H��$�H�����`�l$t�D$h����
�D$H��ǔH�H��tPH� �H�t$�Hc�H�L$H��$@H��$�H��$PH��$�H��$H�Ѓ���)
H��$��8��DŽ$��|$h���D$E1�H��ǔH��$�H�H��tNH� �H�t$�H��$HHc��L$H��$@H��$���$P��H��$������
H���zH�D$h�|$�P
H���#H�uH��$�H�l$�[H�����H��H���7�I��H��tB�|%�]�JHcl$xI�D$H9�s(H�|$ Ic���
H�D$ A�D$�D$xHc�H�L$H�|$ H��1�H�B�r��H��$��\I��H��H��$�� �L��/H��� �H9�HC�E1�E����H�L$H�|$ H��1�H��E1��q��H��$�H��t	H9���H�T$XH�|$ ���H��$���L$����H��s1�H��$�E����L�D$@H�L$81�H��H�|$ H���8q��E����	L�D$@H�L$8H��1�H�|$ H�j�q��H�T$XH��$�H�|$ �H�H��t�;H�|$��E��uJH��$�H����Ɖ�$H���FH����H�t$1�H�|$H��$@Ƅ$T�%E���L�D$@H�L$8H��1�H�|$ H���np��H�|$ ��H��$�H����Ɖ�$H���o
H���kH�T$XH�t$Ƅ$TH��$@H�|$ H������ƀ��%H����T$Ƅ$T���H�D$hH��$@���BHDŽ$�Ƅ$�E����L�l$ L�D$@1�H��H�L$8H�.L���o��H���L�����ƀ������uH�T$XH�t$H�|$ �o$H���L�D$@H��H��H�L$8H�|$ ���1��2o��E���8L�D$@H�L$8H��1�H�|$ H���	o��L�|$ H���L�����ƀ��7���uH�T$XH��$�L����#H���H�|$����7��D�L$E1�DŽ$�E����H��$�H��$�L��$�H��H��L�����H��$�H����H��ǔH�	H��t[H�� �H��$X�H�D$HL��$HHc�H��$PH��$`H�t$H��$@L��у����H��$�H���H���H��~2I�LH9�v(�D$�|$h�������|$h�1�����H�L$PH��tI�TH9�v�D$��f�H���	����|$hH��H���
�H���t/H9�$�w%I�����|$h�t	�|$h�1��D$�����D$�f���L�l$ H�L$1�H��H��L���m��H���L�����ƀ��K���uH�T$XH�t$H�|$ ��!H���H�L$H��H��H�|$ ���1��l��E����H�L$H�|$ H��1�H�g�l�����L��$�Ƅ$����H�L$H�|$ H��1�H���bl�����H�L$H�|$ 1�H��H���Bl��E����H�L$H�|$ H��1�H���l���
���H����
�I��H�D$@H��tH���|�H�{A�t$��H�|$Hcl$xH�D$@�
�H��H�@H9���H�D$8H��tH���8�H�\$H���k
�H�߉�D)���L�D$@H�|$ H��H��H��H�D$81��{k��H��$��\I��H��H��$���/L��H����H9�HC�E��uaA�H��tH;�$���H��$���	�H�|$ H��$��W���uH��$�H��$�1�H�|$ �,E������L�D$@H�L$8H��1�H�|$ H��A��j�������|$h�t	�|$h��.�H��ǔD��$�H��$�H�E�����D$�X���fo�$H�|$1�fo�$H��$0fo�$ )�$@)�$P)�$`H��$p�4�H�������H��$�H�\$H���f�1�H���f�H��H���IH�}H�5~�
��u�H��H��$�H�{H��$�H���D����;��H��H���?�����7����!A����L$|�!H��FH�D$H��1��Y�fi���\$|�D�H��ǔH�H���/�H�D$8H�D$ H�D$@��H���	�H� ���L��$P�H��$XH�t$Hc�H�L$HDŽ$`H��$@H��$�H��$H����H��$��
1����H�D$P��H�T$XH�|$ H�s�������H��tJH� �H�t$�H��$HDŽ$PHc�H��$@H��$���H��$����tHH����H��H��E1ɍPH� �A�H���jH��$��II^_H�D$h�e���H��$��D$H�D$hH���4���H�����H��$�����H�|$ ���������H�|$ H��$�1�����H��$�H��H��$��?�H�|$ H��$���H��$�H��$����&���H�|$ 1��	)����H��$�H��H��$����H�|$ H��$��j�������H��$�H��$�1�H�|$ �(���H�|$ �7��������H�|$ H��$�1������H��@�H�5
�1��RP�D$���H��$��"���H�sH��H��$��@�H�|$ H��$���������H��$�H��$�1�H�|$ �
(�^���HcD$H�D$h��H��$�H��t*�|$t�|$h�Y*�H��$��,�H��$���H�|$H�_hH��$��f�H��$��Y���H�5�l
�1�聙��$H�r����L$`H�*1�1���\=����H��@�H�5��1��RP���H�5�l
�1��'���$H��HcD$H�D$h�u�����H�|$ Hc����H�D$ �C�D$xHc��R����|$hE1��P)��D$�����AT�H�=��USH�� H�� �dH�%(H�D$1�H�s�������H�{`�H��������H�{H�����k8����I����H�L$�H�5nz�hH��`�L� �@H���H�D$�h`����H�T$H�D$H�
�y���I�@�HH�:����oH�@H�GH�|$�y�f�H�{H��t�s8��H�C �C8�C<H�D$dH3%(��H�� []A\���۾��H�����������H�{`����f.�H�D$H�L$H���@E1��@�A�H�5VyjH����DXZ�M���D��H�T$H�D$H�:�����\�ff.����H��H���W�|��H��`�W���H��@�W����1�H���ff.�f���H��H�=��<���1�H���D��H��H��tTH��tAH���f�I��I��I�I�t"H��D�@�H��D�A�E��u�H)�H���@H���f.�H���x�t�H���x�u���f.���S�?H����H��trL�H����L9�tcH���9u�H��I��H)�H)�I��H��M��tCD�H��H��E��t)@I��tE�I��I��H��D�	E��u�H)�H�A�[�DH���`�H�[�I��I��1�롐AWH��AVH�AUI��ATUSH��H��(H��H�D$�B�H�<$�D$H�t$t{H�T$H9$s`�D$L�|$H��H��M�tf�M�$/L��L��A�Յ�~2L��@�A�7H��I��@�p�A�O�M9�u�M��M��I)�L9$$r�H\$H�l$u�H��([]A\A]A^A_Ð��AWAVAUATUSH���H��$�H�T$H�L$ H���QH��1�H����L�|$H��$�L	�L����H�D$`I�L��$��t�H��H��$�H����
H�@L�H��H��$�H�D$HH�����H�D$L�l$ ��H��$���H��L��I��H)�D$4H��L�dL��L�d$�^���L��$�H��H��H��$�L�I�DL��H��H�A�Յ������D$L9�����L�t$8I���H�H�D$(�C�H��H�D$@H)�H�D$XH�D$(M�<L��L9|$��L�d$PA��\$L�d$L�t$ L�|$hL�|$pI����A��L�H9l$vJ�t%H��A�օ�����9�t�L�d$PH�\$hL�|$pA���lH�D$L�l$@L+l$(H��H�D$PH�D$8L�HI9��GH�l$8M��L��M��L�t$@�I��H\$(H;\$8��I��L+l$H��H�D$ L���M��L$I�������9�t�I��L+�$�L�$�M�aM�M��I���~��D$4��I�|@L��L��f.���2H��H��@�p��J�H9�u�M�I�J�<0M9�r��N���H��H��$�H�L$ H�T$H���e���H�D$HH��$�H�H��$�H��$�H��$�H��$�H9�$��H��$����1�H���[]A\A]A^A_ËD$4L�T$XM��M��L�l$(L�t$8D�H�H��$�D�\$I��M�H��$��M��L9�vYO�$,I�FM��I)�H��I�L�0A��u�H�D$O�$I�L��D��2H��H��@�p��J�L9�u�O�$M��L9�w�L�t$8�t$L9d$�^���H�D$HH��$�H9�MH��$��D$HH��$��D$4��H�D$pH��H�D$xH��$�L��$�H�EH��H��$�L9�$���H��$�M��L��$��H��$�H��$�H��$�H��H��H�H��H)�H�H��H�T$@H;�$���H��M��H��H�H��$�H)�H�H�D$8DH;l$@����H;\$8�����{H��H��H�D$ �Ѕ��FH�D$8H�l$I���D$H�D$(�D$H����H�l$PA�D�t$H�\$XH�l$(L�l$hH�\$ L�l$�DL��H�|$��A9�}A���gM�L9�w�H�l$PH�\$XL�l$hH;l$�ZH�|$`�H��L���I9�w�H��I��1�H�L$p�H���A�TH�PH9�u�H�D$xH�I�����|$M��M��tRH9\$wH��H��H+|$H�D$ �Ѕ���I��L+�$�I��L�$�L�t$8M�7���I��|$M��uϋD$4L�L$PH�|$@��I�I��M�DL+T$(L��L��D��2H��H��@�p��J�L9�u�I�M�I�M9�r��U����EH��I��A�E�I9�w�D$4�D�H��I��A�E�9�u�����H�l$PH�\$XL�l$hD�L$D�|$4O�4L;t$(��H�l$HL��H�\$PL��L�d$ L�l$XM��E��L�|$(��C�,6L��I�D-I��I9��(I��L��H�|$A��9D$|�I��D��H�l$HM��I��L�l$XH�\$P1�L9L$M��I��M����D�t$L�l$PM��H�l$�ՉD$HH�\$(�+���H�|$H�D$ A��K�\=H���A9�LL�LM�L;|$w�H�l$H�\$(L�l$PH;l$�����H�|$`�7H��L��f��I9�w�H��I��1�H�L$p�H���TA�TH�PH9�u�H�D$xH�I����f�H�D$@H�\$I���D$����H�D$(����M��H�l$HH�\$PL�l$XL�|$(L+|$M9�vL��H�|$H�D$ ��9D$|L�|$(M��H�D$L�d$(L�M��M��H�D$(f.�L;t$(vFL��1�H�|$L)�H�t$H���D$4M�<H�D$ L����9D$}+H�L$M��I�H�D$(L;t$(w�M���D$H�c���M����H��I��A�E�I9�w�D$4�(fD�EH��I��A�E�9�u��h���H�t$8M��H9��]H�|$`�'L��H��D�H��H���J�H9�r�H�l$8H�E�H)�H��M�t�H��$�H��$�H�(H�EH��H��$�H9�$������H��$�H��$�H�$�H��$�H9���H��$�H��$�H��$�H��$���H�D$@H��$�H9�H��$�H��H���„��X���H�|$`u|H�|$@L��H��fD�H��H���J�H9�w�H�D$@H��H)�H��M�t�����M������H�L$81�H)�f��A�H��H9�u�I�H�l$8���H��H�l$8�t���H�L$@1�H)��A�H��H9�u�I����H��$�I�����H��$�H��$�H��$�H����H��$�����H��$�H��$�H��$�H��$����D���������9�����������f���AVI���AUATA��US�d�H��H��艫H�����E�EH���tH�����L���H���M��t�EL���!��H��tdH�@��H��H��E1�L��A�jH��`�A�T$H���H����5H����@���Y^u)[1�]A\A]A^�fD�eL�����H��u��@H���E1�A�jH���H���H�5�i�R5H����@X1�Z[]A\A]A^�f.�AWAVAUATI��USH��8H�� �H�t$dH�%(H�D$(1�H������uD���E��uH�|$�&����I���H��H�D$I�V�AoH�P����������1�L�l$ �H��9�������I��H�D$ �@H���L�<�I�?����A�D$I�?���8�E1�1�A�I�$H�D$ �L���@�@H�D$H�8��9����{���H�D$ �x�l���H�8H���0�9���d���@1����I�V�AoH�D$H�PHc������H��@H�T$H�l$H��E1�I��`�A�H��H�5-��B��@I��$�j�e3Y^A�H�\$H��E1ɺjI��$�H��H�5��33_AXL�t$M��taH�D$H��E1�H��A��H�5���@H�D$ �@jI�>��2�E1�H���$I�>A�H�5V���2XZH��蝛H��蕛H�D$(dH3%(�*H��8[]A\A]A^A_�f�M�������A�<$�����L�l$ ��+L�����I��H��t��L�$���W�L���@I��H�D$ ���L��A�G����E1�1�A�I�H�D$ �L���@�@H�D$H�8�7L�$���tYM������A�+I��M���_������f.�H���Hc��@H�(��������H�l$H�\$�c���H�D$ �xu�H�8��L�$��r��f�AWAVAUI��ATUSH��H��xdH�%(H�D$h1�H�l$`L�d$@H���H��L�|$XL�t$<���H�`���H�H9�H����!ˆT$��SH�D$PH�D$H�D$HH�D$H��L��H����T����H�t$E1�L��H��I��L��� TH�|$@H��ztR�B��uy�|$�T$<H�t$Pt	����H��H��E1�A�jL���v0XZH��H���iS�u���@�������H�T$HH�
�y��H�|$@H��@H�t$XH��E1��A�L����5�H�D$hdH3%(�HH��x[]A\A]A^A_�D�>GLOB�L���f�~AL�@����~S�6���H��h�F���f.�H�L$�T$<L��H�t$P�zJ��u>H�T$HH�
�yu0��A��wXH�D$@H�H�H�1H�8�����DH�|$@H��@����H�T$H�t$XL���NN�������������H�T$(�AH�L$ ��H�T$(H�L$ H�H�D$H�oH�H�QH�PH�T$HH�:�v
�sH�T$HH�:�GH��@�<�����ff.�@��AW�AVAUATUSH��(dH�%(H�D$1���H��H�D$解H�D$H�����@�@H���H���}���tv�D$E1�E1�A�I�I�  @��C��-w8L��H��L����L����H�H��t�|$��fDH��t���u�H�L$H��E1�H�`�j�	H�56A�H����-XZ1�H�t$dH34%(��H��([]A\A]A^A_�f�E��u�H��xD�L$A�H�0H�D$H�8����D�L$�^���fDE���O���H��hH�0H�D$H�8���A��-���DH��pD�L$H�0H�D$H�8�l����D$D�L$�������I��I��1�H��v]L�:�H���L�������tEI��v8L���	L��L�������1���u�	H��L����������1��@�H��L�׸�������t����AWAVAUATUSH��H�|$(H�t$HH�T$`dH�%(H��$�1�H����L�*M����H�|$(�z�H��H�D$P�< �a�H���E< t�H��u ��<[�H�����t< t<.u��_H�����u�H)�H�T$X���oH��`�L9��u�|$X�K�\$X��$�����H���H��H�D$p����H�l$xL��I��H�D$0H��$�L�|$pH�D$@H��$�H�D$ H��$�H�D$H�D$hDH�|$0H�rL�rL��H�H��Dq t�BH�ZH�$<]��H�߾]���H�$H��H���	�L�����$M����Hc�$�H�T$(L��I���������A�?L�����}A�SI��@��-u�EL�M�HЀ�	wz��L�D
�A�8um<0u��wdL��L)�H��X��I�I��0Hc�I9���A�AD�H�A��	w3��0H�4�H��H�H�4pI9��&�D�H�A��	v�f�H�L$ H��L��H�L$8�kD���tH��$�H��x�L���yKH�I;���L���bKHc�I;��Z��H��@H���@H��$��]���$��}I��P��@��-u�EL�M�HЀ�	wt��L�D
�A�8ug<0u��w^L��L)�H��R��I�I��0Hc�I9��AA�AD�H�A��	w-D��0H�4�H��H�H�4pI9��X�D�H�A��	vِH��H��A�L��jL�L$0H�L$P�_(Y^L9�tH����H��$��{[H�SH�L�(�$��$����CH�\$M��H�CH�kI9���H�D$�/����H�D$H�x�>f�H�|$P��H��$�dH3%(��H�Ĩ[]A\A]A^A_�D�$E1�M���+�������@H���@H��$�谜L�D$ 1�L��H�T$@A��L�D$8�-����H�T$hD��1�L���!��D��$�H�����fDH������u@H�|$H��#����tj�����H���1�1��S�����fDH�`�L�������A������H�|$H�!j���@�I��H)�H�T$X����������_DŽ$�M���L��L�������$����N�H�\$HH��$�D�[�o�@�@D�X)$Hc�$�H�T$(H��I���:������=���H���H��8H�D$p�~H�D$pH��xH��t	L9(��L����GH�|$pH�H��H9��b��$��I�ٍP�Ȁ�-u�CL�K�p�@��	wy��H�|3��?um<0u��wdH��L)�H��X��M�A��0Hc�L9��NA�AD�H�A��	w3��0H�4�I��H�H�4pL9���A�D�H�A��	v��H��$�H��A�H��jL��L��$���$XZH9����H�������L9�t
H�|$P���H�D$H�x����H���h���fD@��-�kH������H�T$ L��H�T$8�C����H�l$P���H�l$xH�D$`H���y�T$X�uI��H�8����@��-u�EL�U�HЀ�	wo��L�D
�A�8ub��v<0tYL��L)�H��M��M�J��0Hc�M9��+A�BD�P�A��	w(��0H��I��H�H�HM9���A�D�P�A��	v�E1�1�H���$1���L����H�|$HH��$��oD�_�@�@)$D�XM���K���L�D$8A�1�L��H��$���(�V���@��-��H�������L�D$ H�T$@�L��A���(����}GLOB�����f�}AL������}S������'���f�H�D$p�����H�D$H�xvH���+fH�D$p�xQ�����H��H�N��1�1�������@��-�N���H��H�����H���9���H��$�1�D��H������H���e���H�h��1�1�������@��-�����H��H���n���H�������$��I�ٍP�Ȁ�-u�CL�K�p�@��	wn��H�|3��?ub<0u��wYH��L)�H��M��M�A��0Hc�I9��A�AD�H�A��	w(��0H�4�I��H�H�4pL9���A�D�H�A��	v�H��L���u>�������H��$��0��t�����Q�H�\$HH��$��o#�S�@�@ �PH��$�)$$H�D$8���H�`��T$XI���uH�������@��-u�EL�U�HЀ�	������L�D
�A�8����<0u	�������L��L)�H�������M�J��0Hc�M9���A�BD�P�A��	������0H��I��H�H�HM9�tIA�D�P�A��	v������-tYH���?���H��$�A��L��L��$���%�@���@��-tZH���W���A�1�1��y-�6�����-u�H��H�����H��란�-t8H���_���L���?�]������@��-u�H��H�������H��띀�-u�H��H���#���H���ff.���ATI��UH��H����SH�� dH�%(H�D$1�H����T$�8tAH��1�H�S���H�$L��H��H���D$���H�D$dH3%(uH�� []A\����H��H�$�����D��ATI��UH��H��SH���W��L��H��H��[��]A\�C�����AWAVAUATUSH��dH�%(H��$�1�H�����D$H����H�1:L�8M����M�7M����H�\$I����H�$�FfDH��1�H����H��I�7L��H���J��B�3L��H��I�u�&���I��t@M�7M��t8�=L�����I��H��t�L)�I��H9�r�H�h@H;$u�H�����H��뙐H;$tH����H����L$�H��$�dH3%(uH�Ĩ[]A\A]A^A_����f.���AWAVI��AUATA��USH��HH����dH�%(H�D$81�H���H�����SH���T��H���[�D�;�-�H��H���R�H����E�EtH����хH�@�H����H���H��tH���I�� �I�upH��tH��H�=����I�uxH��tH��H�=����I���H��tH��H�=#�����D$4�3���H��H�=�H�D$ H�D$ H��H�D$�"���D�;��H��`�H��E1�L��A�jH���A�T$H����H����@���Y^�g1�H�L$8dH3%(��H��H[]A\A]A^A_�f��sH������H����������H��H����H����E�EtH����d�H����6����E���E���H��`�H�L$�H�5��H����6�������H�L$�H�5��H����5������H�D$H��E1�A��H�5��H��@H�L$(H��@H���jH�8��H���H�L$(E1��$A��H�5/�H�8�_AX�Z���DH���E1�A�jH���H�5!OH����bH����@XZ�Y���H���I�}��H��`�����/��ff.�@��AWAVAUATUSH��8H�t$dH�%(H�D$(1�H� �H�XH����D�`8I�L9���L�t$L�l$ M��&H��I)�L�����H��H����I��I)�L���=H���p��H�D$ H��t|H)�H�߉�� ��H�D$ H��H�xH)�H�|$ �p ��H�|$ ��A���A�1�M��D��H�D$ H�@�L��H����H�|$ ��tH�L$�T$H��H�����H�|$ �J�H�]I9��5���H�D$(dH3%(uH��8[]A\A]A^A_�fDL���0�������ff.���M��tA���ff.���AWAVAUATU��SH��HH�t$dH�%(H�D$81�H�D$0����I�ԃ�tiDH�D$8dH3%(��H��H[]A\A]A^A_�DH��ptH��p�H� �L��pH�xH��t��?t���H�D$H�|$t�H���H����y�I��L�t$0H�|$L��L�����H��H���-H�D$$H�$H�D$(H�D$�#H�|$(���L��L��1���H��H�����=H�����H��H�D$(���_H����H�BH��H�D$(�����H�߉��H��L�|$(L�����L�����1��H�|$(��A����L�$D��H�D$(H�@�H�T$H�މ�����G����T$$H�t$(L��H���S����.���fD����I��H����A�D$H����A�D$���d�����t/H��htH��h�YL��L��h�
����
���DH��xtH��x�*H� �L��xH�x(H�������?������H�D$H�������L�-���1����H�D$����H�T$H�0�@H��H��DN u���;���H9��2���H��u\1�H�=�6��L�$1�H�D$(���DH�����H�߉������@��tL����H�|$�������g��H�BH�D$(�����fD��H��H��0�H��1�H�=���1�H���ff.����H������t,SH��H�� �H�{H��t�?=t1�H��[�f.�1��DH���#�¸��u�H�s�(H�=<�H����€���u�������D$�v���D$���AWAVAUATU1�SH��H����dH�%(H��$1����t1����@��H���H����D$HH�D$@H��HH�D$PH�p�H�D$`H��HH�D$pH��:
H��$�H��HH��$�H��HH��$�H�B�H��$�H�iHH��$�H��HH��$�H�}H�D$X�D$\�D$h�D$x�D$|DŽ$�DŽ$�Ƅ$�H��$�DŽ$�DŽ$�Ƅ$�DŽ$�DŽ$�Ƅ$�DŽ$�H��$�DŽ$�Ƅ$�HǃhHǃpHǃxL���Hǃ�Hǃ�Hǃ�M��t}A�$��ttH�L$ �D$E1�E1�H�L$H���L�56��D$�D$H�$H�L$���C<0w!��Ic�L�>��@��uE����I��t	A�$��uɀ���L�l$@L��hL�����I��I�� M9�����tA�}u�I�$H���_H���@A�UE1�jI��`�L��A�I�uI�������Y^t�H��A�UI�uL��jE1�A�I��I���I�� �uI�D$��@XZM9��j������a1�H��$dH3%(�oH��[]A\A]A^A_�fD�|$����H� �������H�xH�������H�5������������H�@�1�1�1��������D$�����H��hH�0H�`�H����6���a�����|$�U���H�@�1�1���������D$�-���H��pH�0H�`�H������������������|$������H�=������H�=���������D$�����H���H�0H�`�H����t������E�������H�@�1�1��A��������f���H��xH�0H�`�H�������D���@��I�$H��誄I�$�@I�$�@I�$�o���fDH�<$�������D$�9�H��I���^�H���A�EA�Et
H�|$��wH�@�L����H���H��tL���H� �H�ppH��tL��H�=�����H� �H�pxH��tL��H�=���H� �H���H��tL��H�=!����D$4�1���H�t$L��H�=�H�D$ A��"��D$���������H���H�0H�`�H����������@H� �H���H�x��������@�H�=�����H�=o��6���x�������ff.����H��1ҾH�=��_1ҾH�="���_1ҾH�=4
��_H����H�=)��_H�����H�=��_H�����H�=��_1ҾH��H�=B�p_��H�H9�����ff.�@��H��>��D��H���1ҾH���H��0�I�1�H���f���H���H��0鹸f���H���H��0�9�f���H��H���H�|$H�t$H��0��H���fD��H���H��H����H��0��ff.�@��H��H���H�5
����|$H�T$H��0蕺H���ATf�I��UH��SH��H��PdH�%(H�D$H1��
�<)D$)D$ )D$0�D$�t$����1���E�L��H�L$1��D$H�T$���A�ą���H�D$H���FH�@(�H��u�A��D��H�@(D�gH��u��Hc�1Ҿ�H�H�\$H���{H����H�E��SH��H�s���H�[(H��u�H�|$���H�EH�L$HdH3%(D���H��P[]A\�fD��H�������H��1�H��H��1��"X��H�MH�h��1�1�E1�����@1Ҿ�
�����u���<����fD�~�<���/��q�<���@H��tO�ƽ�1�H��H����1��W��H�M�1�H�е1��h�������K��H�L�H���E���H����1�1��7���������ff.�f�UH��SH��H�?H��tH��@�ûH��H�;H��u�H��H��[]驻f���AVI��AUI��ATUH��SH�� dH�%(H�D$1��?[H�D$��H��:���H��H����H�x�
1����A��H)�H��H���۽I�U�
H��H��������fA���
1�fE�efA�UA�H��ueH�L$dH3%(����H�� []A\A]A^�f.�L�D$M��t&1�H��H�)�1������H�|$H��������H��耺�fDI�uH���|����H����H�L$H�T$�H��������t�H�|$H��f��������f��
u+�ofA��1�AEH�PI�U�@fE�eA�EA�����H�������H��H�V��]H���k��H��H��tc�x:u]H�x�
1��m��A���l���DL�D$M��t61�1�H�
��1����H�|$H��t�p�������t���fD������i���fDfA���1�fE�efA�EA��<���fD�ofA��1�AMfE�eA���������f���AWAVAUI��ATI��USH��H��(L�L$dH�%(H��$1�M��t+A��A��L��L��脸L��H��H�EH�����L�L$E�1M��t�f����f��
tzf��t,H��$dH3%(��H��([]A\A]A^A_��{H�k��H�{�y��X��Hc�Hc�I�]��H��H��I�$H��������@H�T$H�s��
���H���k���D�CH��1�L��H�	`1�fA��E���S��H�I�E�<�����{���H��u��"���fDH������H��I�E���2�I�$����4��@��AWA��M��AVI�ιAUI��ATI��U�����SH��dH�%(H��$�1�H�\$H�T$�D$�H��H���H�D�������u�t$M��M��L��L��H�߉����H��$�dH34%(��uH�Ĩ[]A\A]A^A_����f���AWA��M��AVI�ιAUI��ATI��U�����SH��dH�%(H��$�1�H�\$H�T$�D$�H��H���H�D���l���u�t$M��M��L��L��H�߉��>���H��$�dH34%(��uH�Ĩ[]A\A]A^A_�����f���A��H�~H��1�H��H�H)�H�Fx����H�A��t+A��
u<H�6�9�
f��f��of�VF�D�f���Ff�f�V�����1���f��	w
��H�4������UH��SH��H��蛾�H��tH��H��H���h��H��[]ÐH��H��[]钷f���AWA��1�AVA��AUM��ATUS��H��8H�4$�H�l$pL�L$dH�%(H�D$(1��D$�A���߉�A��1����+��H�4$D������������ ���D$H��t�E��s�IE1�E�����\$ �D$$M���PI�MAiu�H��S㥛� H��H��?H��H��H)��L�l$ �L������y���D$nA�����D����1��t���
f�A��E��t�D$H��t�E��tH�|$u{H�L$(dH3%(D����H��8[]A\A]A^A_�f.��D$&��t�~5H�L$M���߾�D$ E1��1���A��A���^���A������P���Hc�1�1�A�������H�|$H��f���fDH�\$A�����H���L���Hc�1�1����H��8����������������f���AWAVAUATUSH��H��$��L$$L�D$L��$�H�D$(��$�f�D$JdH�%(H��$�1�H����A�։�H�T$XL��D��M���l����H�D$H��tR�oH�|$p1�)$)D$`�1��H�T$`H�D$hHT$pHD$xH�T$pH=?B��H-@BH��H�D$xH�T$pH�D$XD�4$f��f�\$HH�h�D$JL�u��D$LH�D$`H�D$0H��$�H�D$8M����DA�>�4$1����Ã���~A�f����f��
�_M�����:L��艻�H���@�D$H�fA�F�\�L��
I��A�I�SL�\$@fA��D$Jf��fA�C�M��L�\$@����A�L��D����L�\$@�h��L�\$@����L���#�M��tI�<$H��t
��I�$H�|$��H��D��L����t$0L�D$@M��L$4���^_A�ǃ����H�|$81����H��$�H�D$pH9���uH�L$xH9�$������LH�L$xH+�$�yH��H��@BH)�H�L$hH�D$`�g������H��L�u�M���X���������fDL�\$@螱�8�g��D�D$LL��1�I��H���1��G�L�\$@����D�D$HA�fA�FM��������:L��貹�H��������華L��I��A�I�sL�\$@fA��D$Jf��fA�C��L�\$@���I�C�1���H��D��M��E1��t$0�L$4L�����)���ZY�������@��D�����H�|$XH��t�O�H��$�dH3%(����H�Ĩ[]A\A]A^A_�@H�l$h@BH����H�D$`������f��D$HA�fA�F��������뒐H�D$x�~���fDL��H�@�1�1��L�\$@A����L�\$@�X���L��H���1���L�\$@�5������ff.���AWAVAUATUSH��HH�L$L�D$dH�%(H�D$81�H���K��H�L$A��H�T$0��������-H�\$0E1�L�3M����H�D$,fA��H�D$�q�f��
uOfE�nA�H�L$��D��A��D$,����D��L��D��輱�������D� D���3��H��L�3M��t7A�>1҉��j��A�ǃ��t�A�f���t���fE�nA��u���@H�D$H��tD� H�\$A�����H��tIc�1�1����H�H�|$0H��t��H�L$8dH3%(D��uH��H[]A\A]A^A_�A������������AWAVA��AUATUSH���H�4$L��$H�T$H��$H�L$L�D$dH�%(H��$�1��|$(�D$,M����I�IAi1�H��S㥛� H��H��?H��H��H)��L�|$(�L�����Å�~�\$.���������L�l$0L��D���D$(�L���ܴ�Ã��teL�L$L�D$L��H�L$H�$�t$(���1�H��t�}M��t
1�1��>���I�$H��$�dH34%(��u?H���[]A\A]A^A_����Hc8�fD�n������@������!��������ATA��USH��H�����(H�����H��H����f�H��H���@$@H���H�
p�@�@H���H�CH�@D�#H�C��1H��t���H��[]A\�H��H�D$�c��H�D$H��[]A\�D�(�f�f�1�H���H��@H�
�@H���@$�@H���H�CH�@D�#H�C�Z1H���q���H��H�D$�4�H�D$�a���H�[�9��H�=��H�����0����UH��H��SH��L��1�D��1�H��dH�%(H�T$1�H��H��Q�E��H��I��I��j�Hc�jjH�|$ ���H�� H�<$H��茩H�T$dH3%(u
H��H��[]��-��ff.�f���U1����S��H��覷�߾�€����E�1�苷�H��1�[]�f���A����1�D��H�7�1�A������1��AUATUSH��H�$H��8dH�%(H��$(1�H���F�?H���:L�l$ I��H��L��蚵�H���	L�����L��H�D$�
H����������!�%����t�H�|$�����D�H�JHDѹ��@�H��H��L)�T$1�葸������HcD$H�L$H�|$M��L��H���|�/H���LE�1�1��@C��H�|$=�t述�Ã��t@H��t;H�D$H�EH�|$�p��H��$(dH34%(��uQH��8[]A\A]�DH�|$莧��@�D$ ���fD�����뱐�k�H�|$������������D��H�=��<H��t H������H���<H�����ff.�@��H�u�<H��t��SH�=��+��H��H��t3�8t.H�����HcЀ|�/t4H�߉�販[H�*�<�f�H�=�����[H��<�H�ߍp��}�[H���<�@��AUH�o�A��ATUH��SH��H��H��HD�H��tH�H��t�?uE�0���I��H��tX�8tSE��tH���Q����uBH��H��H��L��[]A\A]����f.�H��H���������t�H��[]A\A]�D�������f���1��E���D��USH��������t,H�5���lj�蜿�H��H��t$H��H��[]�f.�1�H��H��[]�@���)��H��H��[]�f.�D��ATI��U��SH��H��H��0dH�%(H�D$(1�H�4$�`��H��L�d$�D$�l$�K��H��H��E1�j��A� H��H�=m�<��ZYH�T$(dH3%(u	H��0[]A\������SH�����H��E1�1ɉ�H�="�<[��ff.����H��1�1�1�A�H�=��<������t@��	H��H�5��H�=�����bH�@�H�5��H�=������1�H���fD��H��H�=��<��1�H���D��USH��H��dH�%(H�D$1����H��H��H�=Q�<���j1҃��tvH�$�x�o��Hc��~�H��H�Content-H��: H�{f�CH�$�CTypeHcPH�0�Z��Hc�1ҹ���H���~��H�$�pH�x�B	�H�L$dH3%(��uH��[]����f.�D��H�M�9S��H��H�����[�ff.�ATI���U��S譢��L��H��H���oH�@H�C�k�g��CH�H��[]A\��AWA��AVE��AUE��ATA��UH��SH��H��H��t1�1�H���߮���PA�|$�-�H�=��H�$H��t�;H�=��HE�蚤I�`�I��A�����~R�
H�=I�H����€���������I�pI�xx�PL�L$�/I�`�L�L$A�����E�`A���H�$A�@E�x E�p$A�@(I�h0I�@8I�@@A�@HM�HPE�hXI�@H�JI�1�H��[]A\A]A^A_�fDL�L$�R��u;I�`�L�L$A������9���I�xxL�L$�.L�L$I�`�����������AWA��AVA��AUA��ATE��USH��HdH�%(H�D$81�H��t�BH��<tV<�~<��E��E��1�D��H��D��������H�L$8dH3%(����H��H[]A\A]A^A_�@H��CH�T$ �D$�����:��A��1�D$��H)�H�׉�H������H��H��H�D$�>���D�L$H��E��H��D��D��H�D$�p����Ņ�t!L�T$A�zv
L���61L�T$L����H�|$HcÃ�)\$H��HD$ �̟H�T$ H�׾,H�T$蕩�H�T$H���W�����������t$H�����H�T$ E��D��E��H��D��H�������Ņ������{vH���0H���V�����1�H�T$ H��D�D$謫�L$�����C��w7���CH�T$ D��E��E��H��D���g���H�|$ ����M���fD����C谞�oH��H�CH��H�EH�� ��vH����0�EH���E�~���f�H�|$ �L$L�d$(�����舞H�;L���H�D$0H�D$�D$�D$H�t$H�;L���*�������H�D$0D�D$D��D��D��H��'����Ń�������H�;L�����H�׽������ZH����1�H�H1��9��K���诹�ff.�@��SH��H�@H�6�l��1҅�uH����[�fD��H��H��H�w@�H���Dy1�H���ff.�f���ATI��UH���S�8��@H��H���@�R`�M�H��H�5_>�e�E����H�}(��1ɺH�5��H���e�M8�H��H�5v��xeHcMH�ߺH�5�=�`eH�M@A�H�ߺH�5q�l�MHH�ߺH�5t:�hH��L����y[1�]A\���M�H�5}�H���dHcM�H��H�5���dH�}(�1�����H�5��H���d�@������U1�SH��H��`����u�S�{`��u	H����[]��z��H����[]�f���H� �ATU��S�xXH��t,��t
[1�]A\�fD�����H�=7��JJ�����t��<���u0�Z��uGI��`�H�X��H��I�$[]A\�?�����êI��`�I�D$h�ҪA�D$p����YI��`�I�D$h�ZA�D$p�ff.���H�`�H�� �W�@`H�H�PH�@h�@p���H�`�H��PXH�H��@�ǀ�H�R0H�@h�@pH�P1�f����f���H�`�@������f.���H��E1����H�=���IE1����H�=����IE1����H�=��H���If.���H�`�� ��H�`����u�`f�1��ff.�f���H�`����ulI����t#��t>�vD����L��������f�D�¾(��L���j���f.�D�¾�L�ʹ�E���DH��H�� ���t>�zXu8H��XH��H���H�=	�ǀ�1��H�������H���H��PX��D��AUA��ATI���U��SH��蠘L��H��H���oH�@H�C���L��ƉC�R�@��D��H��H��C����{��vH���)H���t�H����[]A\A]����AWAVAUATUSH��I��`�dH�%(H��$�1��D$TH�D$XA���H�D$`H�D$h������A�w(E1�A����A������M�O8A���D$ M����I�G@H�L$TH�T$XA�wI�H�D$XA�GH�D$TA��H�|$XM�wA���M�O8�oI�OPH�$����M���qI�o@L�d$XL9��oM9��f�ۺHE�����A���E��t��t
�D$TH�T$X��t$TH�|$XA�����H�|$htx�PI�wI�x�%H�D$0I�G�D$(A�G�D$,A�G�D$<A�G �D$@A�G$�D$$A�G(H�D$I�G0H�D$I�G8H�D$HI�G@�D$DA�GHH�D$I�GP�D$;A�GXA���H�|$`t
H�|$`�M�D$ ��������H�)A�O(A�GI�M��tL���<�H��tH���/�H��$�dH3%(��H�Ĩ[]A\A]A^A_�fDM�O8A���D$ M������I�0���D�$螕I���A�wH�D$pH��I��Ao,$(I�D$�uH�E�M��H�EH�D$pH�l$p�@�Q�Lc$I�T$1��Ao4$H�D$xL�d$xH�L$`H�PI�W00�@L�H���A�H��$�L��$�H��AƇ�jjL��$���rZY��uNL�t$`M��tDA�V���<��t!A�~�;A�F���@���%I�H�D$XA�F�D$TAƇ�����H���FKL���>K��f�I�xH�t$h�"#I�GI�xH�D$0A�G�D$(A�G�D$,A�G �D$<A�G$�D$@A�G(�D$$I�G0H�D$I�G8H�D$I�G@H�D$HA�GH�D$DI�GPH�D$A�GX�D$;H�D$h�oAG�oHAO �oP AW0�oX0A_@�o`@AgP�"��uyA���������A���E��������+����H�� ���t`�zXuZH��XI��XfDL��耓�2���H�<$�o�����f.�A���E��� ����<���f.�H��PXI�E1�1�M����������M�wA�WL�t$X�T$T����f.�E1�1����fDE1�����I�0�wI�$���f�I�x�'"A�����A�>��������L����L�t$`�������A�F�V�H�D$`�Ao>8I�VH��H�PH�� ��v
H���m$H�D$`�@�PI���@�j�����ff.����AWI��AVAUA��ATUSH��H��`�D�c�kH�CF�4&A9�v(�S f.��A9�s��u1�H�����kH�CIc�D��L��D�sH�H��H��蚦��(�C$��t;CvH��D��[]A\A]A^A_�����!�����ff.�@��USH��H��`������t@�ߐ1�����������u�H��[]�fD��H�`��@`���H�`��@`���AVI��AUI��ATA��U��SH��`������tH�{8tIA�ԉ�1�������L�s8虐H�{P�kHH�C@H��t贐L����D�cXH�CP[]A\A]A^�H�sP�H�=������t��ff.�����uXUH��SH��H���WSH��`������t&��9H�uPH��H�ߺ[]��kf.�H��[]�f��KH��H�N�H�}x�p �ff.���ATUSH��H��H��`�dH�%(H�D$1�H�<$D���E��tH�}PH���>��¸��tA��%1�H����H�L$dH3%(u3H��[]A\�@H��H�~�H�}x��H�$1�H�������ff.�f���UH��H��SH��H���8�����uH��[]�DI��H��1��H��H�=�}�(��H���[]�ff.����H�`������t#S�pH��H�x�s�X��CH�1�[�D������f���H�`������t�G�@H�1��fD������f���SH��H�5�H�� dH�%(H�D$1�H�L$H�T$H�D$L�D$�D$H�D$�����tUH�t$H��x;�T$H�|$�$���t7�CH�H�D$dH3%(u)H�� [�fDH�D$1���CH����f��fD����uhH�`�SH�󋀈��t#�������CH�[��H����H�==|1�����CH�[�f��Hff.�����u@H�`�SH�󋈈��tc�P(��u�xXt&�1����CH�[�D�cHH�HPH����1�H�=�{�����CH�[�DH���H�=}{1������CH�[�f�����u@H�`�SH�󋈈��tc�P(��u�xXt&1������CH�[�D�GH�HPH���1�H�=�z�B���CH�[�DH�q��H�=�z1�����CH�[�f�����u8H�`�SH�󋈈��t[�P(��u�xXt1�1��-��CH�[��GH�HPH�?��1�H�=Oz����CH�[�DH����H�=%z1��n���CH�[Ð����u@SH��H���<������t_H�`������t&�P(��u�xXtQ1��[�|�@�cF1�H�O��H�=�y����{vH�����CH�[�H�HPH�_�1��H�=oy����{v���f�����u@SH��H��������t_H�`������t&�P(��u�xXtQ1�1�[�����E1�H�o��H�=�x�F���{vH���8�CH�[�H�HPH���1��H�=�x�
���{v���f�����uSH��H���������t[�D�+E�CH�[�ff.�����uH�`��FHc��H��f���Dff.�����uSH��H��������t[�D�D�CH�[�ff.���USH��H�5
�H��dH�%(H�D$1�H�T$�D$�ݱ����H����K�|$H��`�t>������������H�D$dH3%(�H��[]�DHc����~պH�5c�H����PH�}8��1ɺH�5��H���PHcM(H�ߺH�57)�PH�MPH��A��H�5���W�MX�H��H�5�%�bS�M���DH��H�}�\�����3����CH�� ���H��H�6��H�}x�(��������������H�5��H���O�2����-��ff.�f���USH��dH�%(H�D$1���tF��ueH��H����A���tmH�,$H�]�{t�{u�C��waH��虘H�$H����t,����H�D$dH3%(��H��[]�@�cB�ڐ�����f��CH������C�p�H�EH�$�oH�H�SH�PH�$H�8�v�H�$H�8�GH��BH��F������f���H�`�H�@h���H�`��@pÐ��SH���S���C��uH�[�f�H�[����SH��H�5�JH�� dH�%(H�D$1�H��H�T$L�L$L�D$�Ʈ���t �L$H�T$A��4$H�|$�5�����t!�CH�H�D$dH3%(uH�� [��CH����.��f.�@��1�H97���AUATI��UH��SH��H��H�H�x(t	���trE1�H��tXH�E1��2f.�H�I�H)�I�H�y(t���uH��H��tH9��H��L��H��HF������H��L��[]A\A]�@H���H9���z���Hǃ�H���1�H��Hǃ�H����P(�I���AWAVAUATA��UH��SH��HdH�%(H�D$81�H�D$H�D$H�D$H�D$ H�D$(H��tE1�1��QH�|$H���VH�](H��t^H��L�|$ L�t$L�l$�$fDf�A)H�[H��t_L��H�U(M��I��H�H9�A�E��MD�L��L��H��H����t�H�L$8dH3%(H�D$uQH��H[]A\A]A^A_��I�H��t��H�S H�sH������H���UH���TI�H��u�����S�HH��dH�%(H�D$1���H�à�H�=�<H�C8���H�{81�1�A����e�H�{81�H��A�H�5��<��H�D$dH3%(uH��[��o��ff.�@��1�H97t�@1��o���fD����n<9GuASH�H����Cp����H��t%H�`�H�5����H������Hǃ�1�[Ð1��ff.�f�PXH�=�d��H��H�:�9H�蚲�� ��AWAVAUI��ATUSH��XH�t$dH�%(H�D$H1�H��_H���H�l$0M��H�D$ H�D$(H�\$ H�D$0H�D$8�R��D$H�$fDA���	L$��I���I+��H;D$��I�I���L��H�4$�PL�x�H�D$I����oA���E1�M�n��A��A��M��u'�}Df�)M�mM����H��H��H��I�EE1�E��H��H��L��L�����tƅ��6����H�|$�1���H�<$蘀H�D$HdH3%(�XH��X[]A\A]A^A_�D諨�H��H���I���I���I�T$ I�t$H����I�D$ L��I���kRL���QL�eM��tJI���I���I�T$ I���H��H)�H9�s�H�A�V\I������o���1���H���q���H��H��H��I����M��������H�4$E1�1�H��L��E1��)MH��H���QM�nM���������D$I������������f�H���H���H��H)�H;L$�����I���H���H��M���H��H)�H��tvL9�r$I�EH�4L��PH����i���I���]���H��H�4H)��֦�I���I���I+��M���IDž�H��I���I���H��H)�L9�s�A�E\L�I�����t*�̦�H��H��tSI���I���I���H)��N���1��~H����H���9��H�=�`H��ۮ��a�������������*j<�D���j<�D���j<�D��H���H���<H�@8H��HD��f���H���<�@��H��H�`�H�5*���H����n�1�H������UH��SH��H��dH�%(H�D$1�諈�H��H���PH�`�H��������u��H�$�Ji<9Pt%�H�t$dH34%(��u1H��[]��H��t�H�1�H�M�@H�mH�����Ep�記����AWAVAUATUSH��H��H��(H�T$�H�D$H����D�cE����H���H�
j]H�.L�k���HEр��A�D$��I��H�$E1���H�T$E1���Hc��@I��K�|�胇�I�E9�I�/LO�I�FL;4$u�I���{D�cH���E��~PE�l$�L�{E1�M���f�I�FM9�t4I��H���,��K�4�H�|�N��E9�~�H�t$H����I�FM9�u��D$�%f�H�����D$H�-c���L�l$L�����L�cL�s1�H�CL�I��1��CL�D$�L��H�
cuL�$L�{�e��L�$L�{L��L�sL�L�c�*{�D$H��tOH��([]A\A]A^A_�{@H�\$H���+��L�D$1�H��L�
��H�
�t�1����H���f�H��([]A\A]A^A_Ð�+|�8���H������ff.����H��tWUH��SH���G��~1�DH�EH�<�H���oz9]�H�}H��t�\zH�E�EH��[]�fD�ff.�@��U��SH��H���H�L$HL�D$PL�L$X��t:)D$`)L$p)�$�)�$�)�$�)�$�)�$�)�$�dH�%(H�D$(1�1�H�L$H�|$H��$�D$H�D$H�D$0H�D$�D$0H�D$ �@����u;H��t6�CH�{1ҍpHc�H���yH�CH��t9HcS�J�KH�L$H���$H�L$1�H��r1���f���H�|$�yH�D$(dH3%(u
H���[]�轔�ff.�f���AVI��AUI��ATI��UH����SH�� dH�%(H�D$1�H���6�A��H��H���FH�{��H�CHǃ�H��)����1����H�1�M��H�[ ��H�[8�C\H���H�+H�PH�xL�kH�����M�����Bd<L��H�$�D$�D$�Z��H��H��E1ɍPjH�`�L��A�H�����Z��c<Y���trH��1���H�{`�L��Cp蔁��H�t$dH34%(H��uMH�� []A\A]A^�@���M���X�����c<���KwH������H��1��������H���9��H�=�YH��ߧ��e��D��AVAUATUSH���H��I��H��E1��lDH��H���
���H���H���H)�H9���E1�H��H��L��讋�H��H��L��I�I�H���H9C@��H����L���H���I9�~.I)�L��I9�LG�H��L��M�M��L��L��L)�tEH�{�M������uH����6���H�H��L��H��PH��tH)��a���f�H��uM��tL��[L��]A\A]A^�E1���H)�I��H��������H���dH�%(H�D$1�H�t$���H��t$�D$H�L$dH3%(uH���f.���������T��@��I��H�~H��1�H��H�Hdž�H)�������H�I�x@H��tH�H�@H��tH��L���fDI�H�@8H��tL������Ð��AVAUI��ATI��UH��SH����A���L���ts�
H��膐�L��
H��I���s��M��t.I�VH9�t%��H��tL9�r ��L��A���[]A\A]A^�f�H��t
��A���[]A\A]A^�����
u�
[H��]A\A]A^���H���H���L���H�I)��>�����AWAVI��AUATI��UH��SH��8H�L$(H����E1�H����H�l$I���H�D$I���H�D$ fDH)�I��uxA�����u3I���E��uI�D$�H9�HG�L����I���I���H9�u�H�D$H���H�L$(�EH��tH�H�D$H��8[]A\A]A^A_��1�1�L��I���-����D$H��t�D$H)�L�xE��t|H�D$ H�|$1�M)�J�D8H��H�D$ �;sH�l$H�D$H�L��H��H��L��͇�I����T$M��L�L|$I������*���I��������I�D$�M)�L9�w�I��A��D$�A��z���DH�D$���f���AWI��AVAUI��ATM��USH��H��XH�T$H���H��H+��H9�r�CDH��H9�s6H��L��H)�I9��IF��H���I���H��I+��H9�u�M���tM���kI���I���H)�H�|$(H9�H�D$ HF�H�H�T$0I����A�u�B��I��H���	L+D$(L+D$ L9��lH���cH�{�AqH��H��H��L���0���H�L$H�H�D$M��M��H��DH��XH��[]A\A]A^A_�Ic�L�T$ H�t$0D��L�H�K�L
I�,2H9�|yH)�Hl$(H9�rl���E�uL�l$@Hc�L�d$HM��H�L$8A��L�|$H�\$�f.�F:, trI�H9�rH��D��H)�H���?��I��H��u�L�|$H�\$H;\$0vA���1��8���H�{�<pH��L��H��H���+���H�L$H�����fDH�T$8H�|$@H���{���t���M��H�\$L�|$L�d$H���I�xL�D$��oL�D$H��L�����f���SH�(H��t1Ʌ���1�1����^�H�H�@H��t
H��[��@1�[�@��H��tH��tH�H�8tH�(t1���1��D�+�ff.���H���dH�%(H�D$1�@�t$H�t$���H�����H�L$dH3%(uH��������UH��H��SH��H��dH�%(H�D$1��
f�D$�.z��1�H�L$dH3%(u8H��[]ÐHc�H��H������H��t�H�t$�H�����H��������[��ff.���UH��SH���H�T$@H�L$HL�D$PL�L$X��t:)D$`)L$p)�$�)�$�)�$�)�$�)�$�)�$�dH�%(H�D$(1�H��$H��1�H�D$H�L$H�D$01�H�|$�D$�D$0H�D$ ���H�t$H��tH��Hc�����H�|$H���mH��H�\$(dH3%(u
H���[]��]��ff.�f���H����@��AUATI��UH��SH��(���dH�%(H��$1��ȃ�����������H����H���H���H)�L9���H�EH�x(� ����f�H�}(t1�H��T$���H�E�T$��u	L��1�H���L��H��P(����H���DH�i��1�1��˰�������H��$dH3%(�~H��([]A\A]ÐH�EH�x(t	���\�����u�M��x�L��I���~>L�l$��H��I��H���v�L��H�����H��u��p���M��u#Dž�1��\���L��I����fDH�t$H��H����H���,�����DH���L9�}L���H���H�L)�L9�tH�EH�x(����������H�}(���������u
Dž�HDž�HDž����L�L��H���Dž����L��L���Dž�H)�I�L����k���謆�ff.����H�ATLc�U��SH�@@H��H��tD��Ѓ��t
[]A\�D��t#�������u狃�L���[]A\�����E��u
�����1�붃����1����H���H+��1�H��
�����t�@S1�1ҾH���F������t���[�f�ǃ��[�ff.�@��H���H�t$H�L$�
���H���f.���AUATUSH��H�$H��H�$H��(dH�%(H��$ 1�H�I��t]1�L�d$�@��L��Hc��S��Hݺ L��L��� �H�Å��H��$ dH3%(H��uwH��( []A\A]�DH�(u�1�1Ҿ	�+�����u�L���o���1�L�D$L��H��註H���b����t$H������H�t$L���F�H�l$�s����w�����AWAVAUATUSH��dH�%(H��$�1�H���?I��I��H��A��H�����H�z���-���I��H���=M�&1��&DH��L��L��H)���H��tH�I�H9�vL�������t�A�$H��$�dH3%(H����H�Ĩ[]A\A]A^A_�f�H��A� �B��uH�D$0H�� H��LO�L��E�����zgH��I�.1�f�L��H��L��H)��_�H����H�H��L9���I�>I�� E����L��蘏�H����I�H�,�fD1��+���f��fI������談�H��H���h���H�@�9��H�=nIH�菗����DH��8����1�L���f�r����I�>H��t(H�sE��t?���H��tLI�����f�E��t+�6��I��l���f.�1��f����[f���4����ff.�@��AWAVAUATUSH��H�$H��H�$H���H�|$I��dH�%(H��$� 1�H�D$ H��LD�H���CH�|$H���H��H�ոH�t$0HD��1��uH�|$`u�D$H%�=��H�D$H�x�H��$�H�D$H�D$� H��tH��H+T$� H�� HC�L�t$H�|$L����I��H��t1I��@L��L��H���z���H��tEI�I)�u�Ll$H�D$H9�u�H�L$1�I�$H��u.H�D$���������H���fDL|$H�����M�<$H��$� dH3%(��H��� []A\A]A^A_��I�$1���@H�x(��1�1Ҿ	H�����������L�|$L������L�D$(H��L���H����H�������H�T$(H��H���~�L��H��H�D$(螷H�D$(H��I�$����H���4�����ff.�@��SH��H��dH�%(H�D$1�H�������H�$uH��tH���HD�H�\$dH3%(uH��[��X����SH�à�H�{8H��t�6�H�{8�mcH�C8H�{@H��t��H�{@�NcH�C@[�@��S����1�H���H�=7���1���H��H�5P�O<���1�1���H���O<��1�1�1�A�H�=��<��N<�O�������.1�1�1�A�H���.���uz��1�1�1�A�H������u]H�ð�XH�=v1H������uCH��H�=c��Ԑ��u0H��H�=�\���uH��H�=A�讐[���������f������[�f���H��H�=�<���.H����Z�H���1�H���ff.���UH��SH��H�t$�	m�H�Å�~C�]|�S�H�8H�tH���H�H��Ou�IӀ�����+�„�u8H��H9�u�H�L$H���SH��jE1�A�H�=>�<��ZYH��[]�H�������[]�@��SH���sl�H��E1�1ɍPH�=�<[�[�ff.���ATUH��SH��H�t$�7l�H�Å�~A�{�S�H�8H�tH��DH�H��Ou�IӀ�����+�„�uXH��H9�u�I�Ġ�I�|$8H��t.H�L$H���SH��jE1�A��?�ZYH��[]A\�@�;��I�|$8��@H�������[]A\�f���ATI�Ġ�UH��SI�\$8H��t$H���lk�H��H��E1�[�P]1�A\�U�D����I�\$8��@��AWAVAUATI��UH��S��H��hdH�%(H�D$X1�H���H�D$(L�x8H���<M��LD�H��tI�<$A��A�����9z�H��H�0�	�A��H��H�
H��Nu�IӀ�@��<+��@�u�<:t9A������@��H���H�x8��H�l$(H����H�m�aA��~�H�z�H�5�S������A��u��}datau��}:u�H�,$A���D$�@��@t(1�H�\$XdH3%(H����H��h[]A\A]A^A_�H������H�L$(�H�54zL���!�����H�D$(H�(릺H�5gQH���{}��������H�7�1�A�
�z���A�
�
H��L�D$H�$H�<$��`�T$L��I��H�D$(L��H��L�\$H�D$��L�\$����jL����]H�<$L��H�5vy��|��trH�D$(H�(�E������� ����H������t�Àu
�� �������������������H��
�1�1�虡��1����f��H�5h�H���\|��u2J�D-M��u����f�H��H�PI�$�x/t�I�$���B�D-��t</u[J�D-M��u����H�������A�FD��Mc�H�,$�D$���f������H����1�1��������������H��H�"�1�1��輠�����L��L���A��L�\$�T$L��H�L$L��L�\$���L�\$����_����A��H�4$� A��EN�Ic�L�D$0L��H���T��1��H�F�H��1��D,0�7���L�\$H�D$(L����[����w����AUI��ATA�ԺU��1�SH��H�����H��t6H�H��t.L�J@M��t%H��M��D���H��H��[]A\A]A��f.�H��1�[]A\A]���ATI�ԺU��1�SH���D���H��t'H�H��tL�BHM��tL���H��H��[]A\A��@[1�]A\Ð��AWA��AVI��AUA��ATI��UH��SH��(H��@ܔdH�%(H�D$1�H�|$A���9H��XH��t�X}�…��NH�t$�L�����H����H�L�JM����D��M��H��H�t$H��A�щ…���E���dH��XH��t
�D$�GZ�T$L��T$�\�T$H��X�oE���oM��oU ��o]0� �oe@�0�omP�@�ou`�P�o}p�`�o���pH�L$dH3%(����H��([]A\A]A^A_��H��PH�������|�…������o�`m�o�pu�o��} �o��U0�o��]@�o��eP�o��m`�o��up�o�����@���DH��PH��t��XL���?[1�H��P�oM�`�oU�p�o] ���oe0���om@���ouP���o}`���oEp���o�������f��o��U�o�]�o�e �o� m0�o�0u@�o�@}P�o�PU`�o�`]p�o�p���/���@������!����s�f���AVAUATUSH��dH�%(H�D$1�H����1�?H��t`A��I��H��H�<$D�����I��H��t{H�D���H�@ H��tVM��E1�H��(L��H�4$��H��H��tK���BL�`@L�����H�T$dH3%(H��uNH��[]A\A]A^�DH�G���L��1�����1�A��t�H�<�H��L������f�1���r����S�H�����H=�HD�[�ff.�f���H���H����ff.�f���H��tH�H��t� D����S� ��lX�H�H���V�@H���@H�C�!��H��1���� ��CH��[�����0��
Xff.�f���SH�GH��H��t��H��[��U@��SH�H��tH��HH�CH�;H��t���H�H�{tH�{�H�CH��[�kUff.���AUI��H��ATI��UH��SH��H��dH�%(H�D$1��n`�H��L��PI�EH�8蹽���t H���L`�H��H�ލPH�$H�H�8蔽H�\$dH3%(uH��[]A\A]��p�@��AUI��ATI���UH��SH��H��(dH�%(H�D$1��lTI�U�AoEH�D$H��H�� H�P��v
H����H�D$�@H���@�_�H��H��PI�D$H�8��L�,$���tKH���s_�H�L$E1�H��H���PI�EA�jH�8�͡ZYH�\$dH3%(uoH��([]A\A]ÿL�l$�S�@H���@H�D$��H���_�H��H��E1ɍPI�D$jA�L��H�8�\�^_���t�L�,$�Q����Go����ATI��USH��dH�%(H�D$1�H����H�����uYM��tTH�oH��tKH��H���x^�H�}H��H�ލP�ƻ��u*H�$H�I�$H�t$dH34%(uH��[]A\�fD��������n�ff.����USH��H�T$H����H�H��H��tcH����]�H�|$�Pt0H�L$H�CH��E1�jA�H��H�8�E�ZYH��[]�@H�CH��E1�1�H�8褭H��[]�D��RH���H�CH���oH�RH�P�,�l�����������AWAVAUATUSH��8dH�%(H�D$(1�H����H��H��H�GH��tuH��tpH�81�E1�L�d$L�t$ A������D��	f�1��y�H�C1�L��H�8�x���u<H�CH�8H�D$H;(u�E1�E1�1�1�L������t=H�CE��H�8�A�����H�L$(dH3%(D��uXH��8[]A\A]A^A_�fDH�t$ H��H�t$�n\�H�t$E1�1ɍPH�CH�8�U����H�CH�8�E���E���=����l����AUATUSH���Gt��� �������GtE1�xA��P���H����@����H���H��tH�tH���\���@����E�����{x�OH�D��H�߃��P�{xH�CA��uuH���H��ti�h��CxHǃ��Pf.�A�H��D��[]A\A]�@��u�A���GtA�A��A���&��������A�@��t��f���+H�{H��u�H�{(H��t@���+H�{(H��u�H�{@H��tH�H��tH�@H��t
H���H�C@H�{PtH�{P�H�CPH����C\H��t������l�Hǃ��C\��u`H���H�����OHǃ��C\��tiH���l�H��D��[]A\A]�H�D��H�߃��PH�CA��������ukH���H��t��Zl����{p�(����H���NH��D��[]A\A]�f.��kN�4���fD�GtE1��G����H�`�H��H�5���H����ïH���H���#����C\���i��������CtH���H��[]A\A]�Sf���H��H�?����H� ��H���ff.�f�����f.���AWAVI��AUI��ATM��UH��S��H��8dH�%(H�D$(1�H��tH�H���S�}�IH�t$��H��H�l$�M�I����H���p�p���eI�A��A��H�H���/M��D��D�\$M��L��H�t$L����D�\$H��I������%�D$�
I��$�M�|$@H��t��LH���OI��$����I�$H�x(tvA��$�uk�aL���gV�H��tYI��$�uN1�H�L$ �L��H�D$ I�$�P(��u+H�D$ I��$��DH���
��������E1�L�������H�jy�1�1�E1��@���H�L$(dH3%(L����H��8[]A\A]A^A_�f.�A�L$\����I��$�M�|$@H��t�\i�H���y�I��$��������H�t$ L�����N���v�������L�d$ I��$�H�����T$���K�h�L�d$ H���x�I��$��,���@H��xH��L���6��M�����I�}H�������JI�E����fDH��yD��L����������fDH��y���@�D$���k���H���ML�d$ �a���f.��L��������N���H�����L��I��H����M��L��H�
�w1�1��g���L���?J����f.�D��L��H�Cy1������L����������f.��I�J����e���H�6H�?�Q���H��H�7H�8��P�ff.���AWAVAUATUSH��H�$H��(H�4$H��L�D$dH�%(H��$1�H�������I��H����1�1�L�l$E1��;fD�D-9���Hc��H��L��1��aII��L��M�<�H���~KI�L��L��A���=�H��t9�uօ�u��P�
�@�L����H�$H�L$L� H��tHc�L����x�H��$dH3%(D��u,H��([]A\A]A^A_�f.�L���HA�������;d�f.�����Gx��k���ff.���SH��H�6���H�H���H�[�������ff.�f����g������������AWA��AVAUI��ATA��UA�����SH��H��dH�%(H�D$1�H��A��A��t	E����E����H���H���M����I�EH���H+��H��~�{xt�� ��E��uE��tI�EH�����%@�fH�T$dH3%(�PH��[]A\A]A^A_�1��)��H�H�@(H���V�������I���H��H���1�H���Hǃ�Hǃ�E���"���@H�{��H�{(��H�H�@0H��tL��D��H��Ѕ���E���:������:���H��H9��M��tc�5��8H�s`H��5��8�5��8�5��8��n�H�� I�EH���5�CxH�����H�������I�}1�H���`a��~���H���H+��H���w�����%@�����@�H�����1����@H��u�1�1����F���fDH�@0H���+���H�{� ���H�{(����1�L��H��Ѕ�������H���H+��H���������H�Mc�H�u1��H�H H���8N��1��f�������1�H��t�1��K�����������1�H�Dt�1��,������������`�ff.�f���U�� E1�H��SH��dH�%(H�D$1�H�$��H��t[H����H��H�����H�$���tH�L$dH3%(H��u+H��[]þH���c�H��tH�}H��t�@D1����_������H���uH�H�y(tH�>�UH��SH��H����uW� 1��H�H��tRH��1�H�����H������H��uEH�����H�;1�1��9��H���[]�D1��13H�H��u�H���[]�DH�;��H�H���[]�f.���1��f���H�G��t��t>��tjH�@H�������DH�PH��x(H�H�PH9�v*H�PH�����H��@H�PH���I��I��I9�w'H�H�p1�H�1LJ��DH�PH9�s��H�@H�����H��f���������fD��L�GH�~H��1�H��H�Hdž�H)�������H�A�P �����%�$���ҁ���$�VI�P�FH�����H�F(H�F8H�F@1�H�V0H�FXH�FHH�FhH�FH�H�F���ATUS��
us1ۅ�t-�������u#H�o�] ��u^L�!L9erL9evL�eL�e��[]A\�f�H�}1�L����AH�}L��1�H�EH)�H��:O�L�e��@�����빻�����f���SH�_H�;��tH��t�{ u%DH�C(H��tH�H���(A1�[�@�A��f���UI��SH��H��H�oH�EH�UH�H9�rLJ�H)�H��H��uH��H��[]�@H�uH��HuL���U�H]H��H��[]����ATUSH�o�E uFH��H�UI��H�EH�4H;uv$H��ti1�H���@H�UH��t>H�H�EH�MH��tH��u[1�]A\ÐH�<L��H���U�H]H��[]A\�DH�EH�XH�EH)���H����?�ff.���SH�G��tH�8H��t:[����@H�p1�H��tH��H��p3[H�61�H�?A�蘤��[�@�������f���H�GH��tH�8H��t����fD������f.���AUATUSH��H��H�oH�}H��t6I�����H�}A�����I�$H�E������H��D��[]A\A]�I�����L�)����H�GH�8H��t1����f�������f.���U1�SH��H�_H�;H��t�����������H�{t	H�{�6�H���>H����[]�D��UH�����SH��H��H�oH�}H��t�*��H�U������H��[]���S���0�=�����H�enH�
GH�pH�Ǡ��H�ƉX ��H�HD�1�H�@H�@H�@(�������[�D��AUI��ATI��US��H���u���H��H��t
����vM��u0H��H��[]A\A]�f�H�@L�(L�`H��H��[]A\A]��L��L��H�����H��H��[]A\A]�@��H�GH�PH�H��ff.�f���AVAUATUSH��H�_dH�%(H�D$1�H�;H����A��H��H��H9��H��u-1���u'H�L$dH3%(��H��[]A\A]A^�fDH��twH���[���1�I���1,H�$L��H��I������H�;���H�;�I����L�#1�L��L������H�;�H��D���T��p����1��A��]���������S�����W�ff.�f���AVAUATUSH��H�_dH�%(H�D$1�H�����H�;H��tI��H��H����H9t+H��L��� ��H�L$dH3%(u[H��[]A\A]A^�H���X���I��H�$H�H;CsH�;�1��+H�$L��H��I������H�;��z�L�3��� W���ATA���UH��� S�c=A��H�
cH��@��H��H�hD�`H��H�@H�VkHD�1����D�烈�H�����H�H�@H�X(H��[]A\�@��AWAVAUATUSH��hH�|$(H�T$ �L$8dH�%(H�D$X1��>dataH�D$Pt/1�H�L$XdH3%(H����H��h[]A\A]A^A_���~:u�L�nH�4$L���D$<�E�H�4$H��H��v
�~/�kH�ھ,L����U�H�D$H���H�D$I9��wI�ľ;L��M)�L)�L��H�\$0�U�L��/L��H��I���{U�H��I��H	�����9�@H���@H�D$P�H����M����L9���H��H�|$PL��
L)�A�H�5�iA��I)��DL�$$�I��M)�I��N�|M)�L�4$��H��L�D$H�T$��;H�T$L�D$I��H��	uH�mediatypI9��H�|$PI�M��L��A���
L��L���8H9��*E���!H�$H���=H��L�p�L���UT�L��;H��I���BT�H��M��tZH��A��I9�vE��uIL��H)�H���"���L�$M��H�$I��I)������A�~e�E����Z����I��u�;base��H�|$P���H��h�t$8H�|$(1��ݽ���i����M9�uI��uA�};bas�7H�|$P�}�H�5h�@�~/�����H��L�n�~���f�H�<$��H�|$P1ɺH�5h�H�|$H�\$0H��H�����$:��H��I���7����D$D�����1����H��H����HcT$DL��H������1�1�H�L$HH������H�|$ �`B�H��HG�H�U`��������tH�L$ �	�
���D`H�L$ H��H�E�9rH�Eu�y+���ɉL$<�L$<H�T$P�HH�PL���6������H���Z6�@H���@H�D$P�r�H�|$P1ɺH�5�f��I�}�����H�\$ H�}hH��H�H�M`��H�t�H�t
�H)�H)�ƒ�I�ك��1�����1ɉ΃�M�1L�79�r�����fD�t$8H�|$(H�Gf1�豻���?���@H�|$PE��L��
A�H�56f������fA�}e6�����A�}4�����H�$���f�{64�N���H�|$P��H�5�e��H�t$0H�|$H�T$DH��H���5�I��H������H�|$P���H��e����H�|$P��H��e����t$8H�|$(H�@e1��ú���Q���H�t$ ��
���t��t
����H�t$ ���t�f�t
������{P�ff.���AUI��ATI��U��SH��dH�%(H�D$1��%���H��H��tM��u(H�C�hH�T$dH3%(H��u-H��[]A\A]�L��L��H���"���H��1�1�H��������O�f.�f�PXH�=���H��H�:q9H��d�� R���H�%Z<�@��H���H�Z<H�@@H��HD��f���UH��SH��H����>�H��H��H��j�PE1�A�H�=�Y<�G�H��[]���SH���>�H��E1�1ɍPH�=�Y<[雎ff.���AUI��ATUH��SH��I�Ġ�dH�%(H�D$1�I�\$@H��tKH���S>�H��E1�L��j�PA�H��H��賀ZYH�L$dH3%(uhH��[]A\A]�fD�H�2H�=�X<I�D$@腢I�|$@1�1�A����~I�|$@H��1�A�H�5�X<�s�I�\$@�^����4N�@��AWAVA��AUI��ATI��USH���o\��t~�8E����R�H��H����H�@H�E��urL���R�H��tsH�CL��L��H����F�L�c �C(�k,�C0H�CH��H��[]A\A]A^A_��8�1H��H��t�H�@H�L�kL�c D�s(�H��n9��H�=H��!b��O����AUI��ATI��UH��SH��H��D�G,E���)1Ҿ8��2f�H�@0@@ H�E�{,���
1Ҿ8���1f�I�$H�}@@ H�@0���s,L���5�0H�UH�BH�EL��L�h H�EH�sH�x�E�H�E�@0H�E�@(H�E�S,�P,H�C I�$L)�H�B �K,���bI�,$H�} ��P�H����H�EI�$H�sH�P H�xL��E�I�$�@0I�$�@(I�$�S,�P,H��1�[]A\A]��8��2I�$H�UH����H������H�z�C,H��t�����vM�C,H�UH�ׅ����_M�H�������[]A\A]���#P�H������H��l9��H�=�H��
`��M�H��t�H�xH��t�S,������L�C,I�<$��t_��L�H�UH���F����q����8��11���@I�$H�x ��.I�,$���f���.H�������[]A\A]���.럐��.H�U�C,H�ׅ�t�������.�d���fD���o0uS�W(H���G,��uH�߅�t([�+L���H���t�L�C,H�߅�u�[�S.�K.�C,�fD��H�H�FH�H�H��tH�pH�7H�~�f.�H�wH�7H�~�@��H�GH9�tH�FH�H�GH��tH�0H�wH�~�H�7��ff.���H�WH�H��t0H�H�H��t5H�WH�PH�GH�GH��DH�WH��u�H��u���H�GH��u���D��ATUH��S����}0���U,�8��uz�-H��H�E0�oU �oE�oMS H�C0�C,K����L�c L���M�H��H��t>H�{H�uL���A��C0H���C(�+���H��[]A\��KM�H��H��u�H��i9��H�=H��3]��J�f�H�{ �G,L�c H���z����M(������H��H��[]A\�f���AWA��AVI��AUATI��USH��8H�t$�T$dH�%(H�D$(1�H���H�D$ H�h@H�AR<H��HD��57�H�L$ L��D�hH��H��H�L$D���v���uBH�D$ D��L��L��I��M���H�L$(dH3%(L���IH��8[]A\A]A^A_þ.L���F�I��H�����{Hc��<+Ic�L��H��H���;@�M��M)�I�M��uP��H�D$ �T$L��H�t$�H��I��A��A��.H���BF�I��H����E���}A�H���16�.*H��H��H�f�
H�L$�B�P�n���t�A�E1���H���*L�|$ L��M��t3H��[�1�1���n��E1�����fDH���x*���H�M[�1�1��n������F���ATI���HUH��S�Ӆ�t7��J�H��t4f�H�@@@ @@0L� H�h�X []A\�fD��)��H�*g9��H�=XH��yZ��G�ff.�@��SH�H��H�@H��t�ЋC H�߅�t[�JG�f.�[�)f.���H�H�FH�FH�H��tH�p1�H�7H�~(��H�w1�H�7H�~(�f���������ATUH��SH��@H�_dH�%(H�D$81�H�GH�FH�FH�GH��t4H�pH�SH�o1�H�}(H9�t%H�L$8dH3%(�H��@[]A\�H�7��H���H���H)�H��~�E1�1�H��H��H�D$L�d$H�D$H�D$ H�D$(H�D$���L��H���Q���H�EL��E1�H�L$ L�D$H��H�����H�T$H��H9������A������u$H�l$ 1�Hǃ�Hǃ�H��umf�1����f��P�H��H���H���H���H�U H�uH��<�H�E H��H������H�����H�l$ H��t�H���H���H��H�U H���H��H)�H9�s��C\H�H������p���1��i'H���r����H���h���H�����H�\$H��u��@H���H���H���`���H�\$ H��u�1�H�X�1��!k�����������Hǃ�1�Hǃ������nB���f���UH��SH��H���[�����tH9]t!H�CH�@H�CH�EH��[]�fDH�EH�EH��[]�f���AWE1�AVAUATUSH��8L�w(dH�%(H�D$(1���H�$H�D$A��H�D$I��H�D$M����M�nM����I��I��H�l$H���
@H��H��H��I�E1�H��H��L��L����tf����H�E1�H�CM�d$M��u�H�]H��t9H��fDL�x H�M�M��H��u�M��tI�EI9�ttI�E(I9�t?�1�H�L$(dH3%(�JH��8[]A\A]A^A_��������f�I�EH�S L��H�s�H���'���H���?���H�]H��u��I���I���I���H����I���H��H)�L9�sJA�E\M��I�4������L�H����I���H�]H���3���I���I���H�sH�H�S �*9�H�C I��H���w���H�����H�]H��u����H)�H�4�8�I���I���IDž�H)�L9��x���I����@���1��
$�Y����?���ff.���U��SH��H��H�GH�WH��tDH�PH�CH�SH��t#H�P�{@��~����u/H��H��[]�DH�C(H�P��fDH�G(H���H��1������@��ATUH��SH�_��t��tw�������tF[]A\�f�H�;H��tx��<�A�ą�xuH�;H��t�O@�H��tD�e[1�]A\��H��t�H�H��t[H�E1��C����[]A\�f�H�;H��t0�<��xH��t��E[1�]A\�D�cE��y�������_���D�C��H�w`�{�d<�H�H��u���f.���H�GH�8H��u1��D�?���ATA��UH��SH�_H�{ H��tH�s(�0�H�C E��t_H�;H�����Cu}�H:�H�A��H�{H��tF�p-�H�{��!H�C�E\H�߅�u0�!D��[]A\��H�E1��C�����E\H�߅�t��0?�D��[]A\����"��H�;�mD�A����A��DD��l���f.��{E1��t���Q��C����A���C������AVI��AUI��ATUH��SL�gA�|$��x^��D�H��H���t(H����1۸���H��[]A\A]A^�fD�3"���t<�Ѓ��	��1�����!���DI�$L���E�I�<$H����F�롐A�|$L��L���@D�H��t�H���t
H��1��{�����!��f���H�OH��y��xH����)��HcиHI�H���f�H�	�H���P���U��SH��H�5�H��H���2&�H�PH��HE�@��t,H����xt1��H���e����t]H�������uQH���M+���t�CJ��H���[]����t'� �8�(�H��1�I��H�
1��f��H��1�[]�ff.���AWA��AVAUATU��SH��H�5���H��H����T$�L$dH�%(H��$�1��F%�Ic�H�PH��H�t$HE�H�߅�u<�G��É���H��$�dH3%(�$H���[]A\A]A^A_�D��)�H�߉�H���N!�/I��Hc�H��L��H�D$�#:�I��H��������H�t$M9��BL�����Å�uiM��MD�H�l$1�L��I��L9�tNA�>u�A�~A�/t�t$L���)�Å�y�D$t$�x�8�A'�H���1�H��1��)b��L��������D$L��L�d$ @�/H����8�H�����I��L9����x�/���@�@A�~�/uA��E)�I��A�M9�u�L��L����V6��u�A�/E�����A�E�I��I�TL��fDH���/H9�u�Mc�H�t$O�tM9������H���v�L������"�����|$t�/L���8�H���1���H�t$L��M���3��Å��~�������@E1��B���L)���Hc�D$L������^8�ff.���ATI��USH���teH����xu8H���A�H��H��t;L��1�H�=�
<H���\���H��H��tDH��[]A\�@1��H���ɾ����u�1�H��[]A\�H���p����t�1����H���C��fD��H��C���H��H��(�1�H������ATUSH��H�$H��0H�dH�%(H��$(1�H��H�t$H�t$H��t(1�H��$(dH3%(��H��0[]A\�H�T$�$��u�H�l$H��t�L�eL���l&��H=�HGƒ�s �uN��t
�U��uR���H�UH�{L��H��H���I�L�H�L�H��H)��H)���H��U���A�L��L�뮉�A�L�f�L���`6���ATH�=u�
I�̹U��SH��H�S�����H���HDڀxt��1��H������0�����tD1�@��H��@�������u.��L��H�޿t[]A\�H�D[]A\�2��[�����]A\�ff.�SH��H�?H��t4��3��H�S0��3�����S��	ʈS[�D�s��ff.���USH��H��H�oH������oE0�oM@K�oUPS �o]`[0�oepc@�o��kP�o��s`�o��{p�o����H��[]Ð��AWAVI��AUI��ATA��US��H��H�oH�}H��t&��2�A�ǃ�
�eH��JHc�H�>��@D�}��
�CH��JHc�H�>��f�H�}��� M��tI�MA����A��������E���H����[]A\A]A^A_�@A���tB1ҾD��1��&�1۾D�������À���E��D�1��&���u�������뜐E��tIA����I�uH��x�D��1��9������m���f�A��tjA��������E���M���1�A�������=���f�A���t�1�I���)���D��D����F�Å��q���D�e�������������fDH���x���I�MI�UH��uH�E`H��tH9�sH)�I�EH��H�E`H9�sI�EH�E`H9�wI�EI�EA�E�������H�}II�uE��1���H�zIM�M���C�I�EH�����H�E I�E1�H�E(�X���DH�} H�������H�u(1��$�H�E �.���A����H�}H��1�[]A\A]A^A_�z�f.�A���1���@A���1ɺ�I�E��������ATUSH�o�EuI�}I�̅�x�D�H���t0I�$1ۉ�[]A\�@H�}�O1�H�}����I�$��[]A\É���H�9G�1�1��Z��������f���UH��SH��H����xt1��H���7�����tH������Å�t1�H����[]�f.�H���x ��x�?���H����[]Ð��8��H��1�I��H�
�1��I\��H����[]���AVAUATUSH��dH�%(H��$�1�H��tmH��H��teH��H�5�	H����H��H�5{	H�PH��HE���H��H�PH���HE�xuQH��������uH�����A�ą�t^fDE1�H��$�dH3%(D����H�Ġ[]A\A]A^�1��H�������t�1��H���ֶ����u��H��H����#���u@��8I�Ń�tA�L�H��H��I��L��
1�1��[���d���f��{>��A��K����?�@�H��H��A������uqH��H�޿�,�A�ą���T$ �t$H���9$����A�}��1��H��I��L�
1�H���*[��A�}teD���?����A�}�z�H��H��I��L��1�1���Z����A�}E1��N�H��H��I��L��1�1��Z��랋t$H���)��uH��A��p��{���A�}��1��H��I��L�O1�H���tZ��A�}�I�����R.�f�ATI��UH��S����H��tz�3�H��H��twH�~��L��H�FHdž�H��)����1����H��^H���H��H�H�FH�F��H��#H�F[]A\�������H���H�'O9��H�=U�
H��vB��/�ff.�������a<��H��C��SH��Hc�H�>��fD�+�f�H��������1�[�f��+�F�H������A��fD�+�&�H��������A���+��H������A�fD�+���H��������f������[�f�������f.���US1�H����j�����t1�H�5�(�lj�����H��H��tH��H��[]�fD���IA�H��A1�1���T����f���UH�5�d1�S1�H��dH�%(H�D$1�H��H�$�kj�����tH1�H�5.(�lj����H��H��tLH�hH���H�<$H�C@�dH���H�$�EH�EH�L$dH3%(H��u)H��[]�@���@�H�3A1�1����S�����m+�ff.�f���USH������H��H��t=H�h�U�E��x#�tv�EH%�=����E��	ЈE�t���H��H��[]�f��}�1���=�H���H���u���8u�Hǃ�����M�f�H���������z���1��ff.����ATI��UH����S�H�xH��H�@Hǀ�H��)����1����H�H�+H��H�CH�C��H��#H�C�g(�H��L��1҉CH����p���H��H��tGL�`A�T$A�D$��x)�taA�D$H%�=���A�D$��	�A�D$�t���H��[]A\�f�H����H���H��[]A\�f�L������t�1����ATI����UH��S�
H�H�xH��H�@Hǀ�H��)����1����H�L��L�#H�C��H	�H�C�W'�H��H��1�H����CH�C�X������[]A\�ff.����AVA��AUA��I��ATI��UH��L��S��H�� dH�%(H�D$1�H�t$H�D$�%��������H��1��r���H��H�����t$E������H��1���A�ƃ��tzH�T$L��ǁ������H�D$H��tMM����I�mH�|$H��t�aH�D$��tIH�X�C�
�CH%�=���H�D$�!D����<�H��� H�|$H��t�1�H�L$dH3%(�(H�� []A\A]A^�fDH�|$I����1�1�H�^=����H�|$H�t$�/���������u2H���H�|$�H�D$�f����H�D$�����t$����M��tI�}�bI�EH�|$��[���1��5���@H���H�������M���m���I�m�l���fD�������1�L��H��=1���/O��1������H����
�c����&�ff.���AWAVAUATUSH��H�$H���D�D$H��I��I��H��dH�%(H��$�1�H��tH�H�����<.����</tsM��t
A�?��H����xt�L��H���Ǭ�������L$H��L��H������H��$�dH3%(�oH���[]A\A]A^A_�@�D$uH���.�����u,H���r�����t�H����x�v����H�|$ �	1��f.��C�PҀ��-���<.�8�D$�&���H���´�����������K���t@���H��H�D$�u�L�D$D�`�Mc���I�D$�A�|/��I��E��y�L���_H�D$ H�|$ �F���H�D$ �8�8���D�t$I��H�D$0L��$�H�D$A��H�l$�+��H��A�?u5H�����}I������:L���`�H��H��u�A�?����1�I��L���H�;�
L����t��=���E����H����xtyH�T$L���!���t���L��迴����t��L��L���֤�����K���H�l$�L$L��L��H�����H�|$ H�D$��H�D$���fD�L$H�T$L��L���t���H���������f�1�L��������@�������f�A�I��L��1�H�[�1��K������f.�H�C@H�����.t�/�������fDA�8[����E�������L��L�D$(D�d$�3�L$H�D$��y�L$Hc��L�L$L��H��I��H�D$ Mc�L��L�L$��L�L$L�D$(L��C�:K�|L���w�HcT$A�D����B"�f���AUM��ATI��UH��S��H����tH���H���H��uW��t2��t
H����xu`H����L��L��[H��]A\A]���fDH���p�����t�H��1�[]A\A]��H��A��L��L��[H��]A\A]����D�L��H���h�����u��f���SH�H�;�H�{�H��[�ff.���AWAVAUI��ATUHc�SH��H��XL�g�dH�%(H�D$H1��'I�t$H��H�D$(�e�H�|$(�G�GH�������HcS�f�xH�H���@H�D$ 螄H�|$(H�L$ �H�5����H�|$ �y���L���@H���@H�$��ƉC����L��L�|$L�t$(I���C�H�H�$�@L�l$0�I��f�PH�(H�l$�@H�D$H�l$8��H�=J�@H���@�@H�D$��H�T$L��L��H�A�1��BjjL�L$@���Y^�Å�urH�D$H��t
�x��L���v�H�|$tL���f�H�|$�\�L���T�H���L���H�L$HdH3%(��H��X[]A\A]A^A_�����t+1����H�5�������f.�I�L$H��51�1��1��tG���Q������C����H�5�v	�1��M�H�$�s�Y�����ff.����AWAVLc�AUI��ATUHc�SL��H��xL�g�dH�%(H�D$h1��I�t$H��H�D$H���H�|$H�G�GH������OHcSA�fD�@H�H���@H�D$@�H�|$HH�L$@�H�5f��.�H�|$@�Ը��L���@H���@H�D$�O
�ƉC����L��L�l$L�|$H��H�H�D$�@L�l$P���f�PL�0L�t$ �@H�D$ L�t$X�y��f�HH�(H�l$(�@H�D$(H�l$`�M�H�=�G�@H���@�@H�D$0�H�T$0L��1�H�H�D$8A�H�D$H���BjjL�L$`���^_�Å�uxH�D$8H��t
�x��L��蜷H�|$8t
H�|$芷H�|$0耷L���x�L���p�H���h���H�L$hdH3%(��H��x[]A\A]A^A_����t+1����H�5�����F���f.�I�L$H�531�1��1��D���K������=����H�5�s	�1��m�H�\$�s�������ff.���AWAVAUI��ATI��USL��H��XH�o�dH�%(H�D$H1��H�uH��H�D$(���H�|$(�G�GH������s�HcS�f�HH�H���@H�D$ �H�|$(H�L$ �H�5���T�H�|$ ��� �L���@H���@H�$�v
�ƉC����L��I�����H�H�$L�d$0�@��L���@H���@H�D$�)
�ƉC���|L��L�l$L�|$�z�L�t$(H�H�D$�@L�l$8�z��H�=YE�@H���@�@H�D$�/H�T$L��L��H�A�1��BjjL�L$@�'���XZ��uoH�D$H��t
�x��L���ӴH�|$tL���ôH�|$蹴L��豴L��詴��H�L$HdH3%(��H��X[]A\A]A^A_�@���t+1����H�5�����`���f.�H�MH��21�1��1���A���U�����N���f�H�5	q	�1�譝H�$�s�8����H�5�p	�1�荝H�\$�s�d�����ff.���AVAUATI��USH��H��@H�o�dH�%(H�D$81���H�uH��H�D$(��H�|$(�G�GH������HcS�f�HH�H���@H�D$ �D|H�|$(H�L$ �H�5���y�H�|$ ����E�L���@H���@H�D$��ƉC���ML��L�d$L�t$���L�l$(H�H�D$L�d$0�@���H�=���@H���@�@H�D$�H�T$L��L��H�A�1��BjjL�L$@����XZ��uhH�D$H��t
�x��L���D�H�|$tL���4�H�|$�*�L���"���H�L$8dH3%(��H��@[]A\A]A^�����t#1����H�5_��g����f�H�MH�U01�1��1��U?���d�����]���f�H�5�n	�1��-�H�\$�s�����ff.���ATE1�E1�USH��0H�_1�dH�%(H�D$(1�H��-�D$$L�d$H�D$H�T$H�kL���D$H��H�D$jj�9�XZH�|$tL���H����H���G�1�H�L$(dH3%(u	H��0[]A\�������SE1�E1�H��0H�w1�dH�%(H�D$(1�H��,�D$$H�\$H�D$H�T$H��H���D$
H�D$jj��XZH�|$tH���M�1�H�L$(dH3%(uH��0[��P���ATE1�E1�USH��0H�_1�dH�%(H�D$(1�H�k,�D$$L�d$H�D$H�T$H�kL���D$H��H�D$jj��XZH�|$tL��路H��误H����1�H�L$(dH3%(u	H��0[]A\������AUATUSH��HH�odH�%(H�D$81�H�$H�D$�������������H��+I��H�u1�H�D$H�T$E1�E1��D$
L���D$$jj�-�^_��uH�<$H��t
���H�E�1������H�}-H�H1��b<��H�$H��tL��豮H�|$t
H�|$蟮H�L$8dH3%(����H��H[]A\A]�fDA�տ�1�A�����H�D$H���@H�D���f�H������������H�D$�D$$I��1�H�D$0H�T$H�uL��H��*�D$A�H�D$jjL�L$@�
���XZ��t���uxE����H�$1����@H�$�����H��������x���1�H�8������fDH��Z����H��J����H��:����H�$��������f.��_1ۅ�H�$����k���f�H�EH��+�1�H�H1��:��H�$�<�����D��AWAVAUATUH��SHc�H��L�gH�L$L�|$0L�t$@M�l$dH�%(H�D$x1�H�|$H�/)�H�D$(�D$HH�D$@�D$T���L�|$`f�HH�(H�l$(�@H�D$0��H��L��H�H�\$81�A�H�D$8H�\$hf�pL���@jjL�L$p�?��D$_L��AX��H����D$L�T$����H�|$(��t=H��tH���Ы�����H�T$xdH3%(����H�Ĉ[]A\A]A^A_�H��t��f]��trH�|$(��H�(L��E1�E1��D$HH��L��1�H�D$@�D$Tjj����XZ��u;H�D$(H���m����xtW�����H���*��Z���DH�|$(�9���fD���uI�$H�*�1�H�H1��8��H�|$(�����H�H�t$H��A���H�|$(���������H��譪H�D$(����ff.�@��UE1�E1�SH��8H�w1�dH�%(H�D$(1�H�	'�D$$H�l$H�D$H�T$H��H���D$H�D$jj�^�ZY��uHH�|$H��tN��[1ۅ����H�|$tH����H�L$(dH3%(��u%H��8[]���������f�����������@��AWM��AVAUI��ATA��UH��SH��hL�wH�T$dH�%(H�D$X1�H���H�D$(H�p(H��tL���h����H����L�h(�{��L�0H���k�H�CI�vH��諺H�C�@H�C�@M������5�IcW�f�xH�H���@H�D$8��qH�{H�L$8�H�5O���H�|$8轨����L���@I���@H�D$�8���A�F����L��L�l$���I�H�D$L�t$ L�l$@�@����L�t$Hf�PIc�H��@H�D$ �c��H�=�$�@I���@�@H�D$0��H�T$0A�1�I�H�D$(L�{H�$H��L���BjjL�L$P��Y^��uH�|$(H��t
�Y����H�H��$D��H��1�H�H1���v��L��葧H�����H�|$(t	H�<$�x�H�|$0�n�L���f�L���^�H���H�@(H�L$XdH3%(H����H��h[]A\A]A^A_�f�H�{�H�5�����I���fDH�L$H��@��1�H���Zw��H��H�CH�}PH�EP�f��H����H�5�c	�1��]�L�t$A�v�%����H��H�Q#D��1���u���@�����f.���AVAUATI��UH��SH��@L�o�dH�%(H�D$81�H�D#H�$�D$H�D$�D$$�[�L���I���@H���@�hH�D$��H�T$1�I�uH�H�D$H�\$L��H�\$0A��@jjL�L$@��YH��^A���åE��u~H�<$1�H��tP�H�$H�H9�s7I�EH��I��H)�I��H��$�1�H�HU1�H���3��XZH�<$tL���c�H�L$8dH3%(H��u7H��@[]A\A]A^�1�A���u�I�EH�]$�1�H�H1��2����4
�@��AWM��AVAUATI��USH��H���H�oH�|$H�$H�p(�L$L�D$(dH�%(H��$�1�H�D$HH�D$PH��tL�������H���L�`(H���D�M(�� �D$E��u$�D$�tH�����u
ƀ fD��v��H�(H���f�H�CH�uH��覵H�C�@H�C�@H�EH����yH��0L�kL�t$XHDŽ$�HH��$�H�t$`HDŽ$�HDŽ$�L��$�L��$�DŽ$�HDŽ$�Ƅ$��D$`H�EH�t$H���L�l$xH�D$hH�`�H��PH�D$pH��$�H��H�D$ �������H�|$XtL���4�M������Q�IcWA�fD�@H�H���@H�D$P�kH�{H�L$P�H�5i��1�H�|$P�ע���L���@H���@H�D$8�R��ƉE����L�����H�EH�D$8H�l$8�@H��$���H�<$�@I���@H�D$@���A�D$���VH�<$�U��I�$H�D$@L�d$@�@L��$��Q���f�PHcT$�@H�H�D$`H�D$H��$�����L��$�f�H�@H�D$X���H�=��@I���@�@H��$���L��1�A�H��$�I�L�|$HL���BjjL��$���^_��uH�|$HH��t
� S���H��t$H�hH�|$H�H1��Zp��L��E1���H���w�H�|$HtL����H�|$ �L���H�|$��L����H���۠H����L$H�@(H����� H��$�dH3%(L����H��[]A\A]A^A_�fDH�D$`L�kH�D$H��$�L�t$XH�D$ M���4���H�{�H�5ҩ����n���DH�$H�Ǡ��1�H���p��I��H�D$X�xuH�|$(��H�CI�}PI�EP�z���H�5�\	�1�腉L�d$@A�t$���fDH�5�\	�1��]�H�l$8�u�����t$H�|$H�SE1���n�������pH�8��H�L$(H��g����H�E1��H���H�H1�L�BH�T��,��H�{�v	��yH�{��H��E1���H����\$H�@(H����� �E�����f.���AWH�/AVAUATUSH��H��hL�H�|$�L�t$(L�l$0H�t$M�gH�T$dH�%(H�L$X1��D$8H�D$ H�D$0�D$D��A�L��1�H�D$(L��L�t$PfD�@A�H�H�\$ �@H��jjL�L$`�k�AYAZ����H�|$ 1�H��t#��HcoH9l$�#H���W�L���H�|$ tH����H�D$ H�OH��L��E1��D$8
E1�L��1�H�D$0�D$Djj���ZY��tv����
H�|$ tH��荝H�T$XdH3%(H���H��h[]A\A]A^A_��1���U���I�H�k�1�H�H1���*���4���@H�|$ H��t���N��t�H�D$ǀ��l���f��H�|$ HcoH9l$����I�H��I��I��1�H�|H�HH�D$PI)�H��1��U*��^_H�������H�D$ H�|$H��H�0������I�H�6�1�H�H1��*��H�D$ǀ������{�ff.���ATUSH��@dH�%(H�D$81�H�D$H��t"1�H�L$8dH3%(�H��@[]A\�L�gH�MH��1�H�D$ H�l$E1�E1��D$(H�T$ H��I�t$�D$4jj���ZY��t/�����H�|$t�1�H��H�D$藛H�D$�m���DH�|$H���X����W1���tˀ����G��H�7=C�HcЃ�sS�����t
���������I�$H�]�1�H�H1��(���P���fDH�H���H�|�H�|�H�{H��H��H)�H)��������H����[�H�|$�K��������L��L��l������L�f�L��[������AV�AUATI��H�5��USH��H��H�?dH�%(H�D$1�H��H���DL��u*L�4$M�.A�E����L����H�$H�H�I�$H�;H��H�5�z	�K��u+L�4$M�.A�E����L�����H�$H�H�I�D$H�;H��H�5���K��u+L�4$M�.A�E����L����H�$H�H�A�D$H�;H��H�5ml�sK��u+L�4$M�.A�E���L���C�H�$H�H�I�D$H�;H��H�5ci�-K��u+L�4$M�.A�E���mL����H�$H�H�A�D$H�;H��H�5���J��u+L�4$M�.A�E����L����H�$H�H�A�D$ H�;H��H�5��J��u+L�4$M�.A�E���IL���q�H�$H�H�I�D$(H�;H��H�5��
�[J��u+L�4$M�.A�E����L���+�H�$H�H�I�D$0H�;H��H�5�u�J��u+L�4$M�.A�E���
L�����H�$H�H�I�D$HH�;H��H�5vu��I��u+L�4$M�.A�E���'L����H�$H�H�I�D$XH�;H��H�5u�I��u+L�4$M�.A�E����L���Y�H�$H�H�I�D$hH�;H��H�5���CI��u+L�4$M�.A�E����L����H�$H�H�I�D$8H�;H��H�5W�
�H��u+H�,$H�]�C���MH�����H�$H�H�I�D$@1�H�L$dH3%(��H��[]A\A]A^����A�E���I�H�$�AoeH� I�UH�PH�$H�8��C�GH��BL�(�@���D���A�E�o�I�H�$�Ao]H�I�UH�PH�$H�8����GH��BL�(���D���A�E��I�H�$�AoUH�I�UH�PH�$H�8��c�GH��BL�(����D���A�E��I�H�$�AoEH�I�UH�PH�$H�8����GH��BL�(�!���D���A�E�g�I�H�$�AoMH�I�UH�PH�$H�8����GH��BL�(����D���A�E��I�H�$�AoEH�I�UH�PH�$H�8���GH��BL�(���D����C��H�EH�$�o#H� H�SH�PH�$H�8����GH��BH��b�������A�E�_�I�H�$�AouH�0I�UH�PH�$H�8��3�GH��BL�(�d���D���A�E��I�H�$�AoUH�I�UH�PH�$H�8����GH��BL�(�$���D���A�E��I�H�$�Ao}H�8I�UH�PH�$H�8��S�GH��BL�(���D���A�E�W�I�H�$�Ao]H�I�UH�PH�$H�8����GH��BL�(���D���A�E��I�H�$�AomH�(I�UH�PH�$H�8�ww�GH��BL�(��������A�E��I�H�$�AoMH�I�UH�PH�$H�8�w�GH��BL�(�����mH�$H�8��f��mH�$H�8�x�����mH�$H�8������kmH�$H�8�����SmH�$H�8�,�����;mH�$H�8�����#mH�$H�8�J�����mH�$H�8�������lH�$H�8�l������lH�$H�8������lH�$H�8�����lH�$H�8������lH�$H�8����2��f���AWAVLc�AUI��ATUSL��H��hH�o�H�L$dH�%(H�D$X1���H�uH��H�D$8�A�H�|$8�G�GH��������HcS�f�xH�H���@H�D$0�zYH�|$8H�L$0�H�5���H�|$0�U���{�L���@H���@H�D$����ƉC����L��L�l$L�|$ �!��L�d$8H�H�D$L�l$@�@�!���f�PL�0L�t$(�@H�D$(L�t$H���H�=
�@H���@�@H�D$��H�T$L��L��H�A�1��BjjL�L$P袶Y^�Å�uzH�|$ �����H��t
���L���I�H�|$ tL���9�H�|$�/�L���'�L������H�L$XdH3%(��H��h[]A\A]A^A_�f.����t+������@�H�5W��_��u���f.�H�MH�%1�1���G���Q���f�H�t$1��������7����H�5iK	�1��
xH�\$�s�=����{��ff.���AUE1�I��E1�ATUSH��8L�g1�dH�%(H�D$(1�H���D$$H�l$�D$H�T$H��I�t$H�D$H�D$jj��ZY��u@H�|$�����H��t�tkH���ÍH�L$(dH3%(��udH��8[]A\A]�fD�Ã��t�����H�|$t��f.�I�$H�
�1�H�H1�����͐L��1����������h�����S1ɉ�H��
1�H�=����RZ��;����A�ع��H�=�
�A�ع��H�=t
�ׅA�ع��H�=h
蹅A�ع��H�=c
蛅A�ع��H�=Z
�}�A�ع��H�=M
�_�A�ع��H�=D
�A�A�ع��H�=<
�#�A�ع��H�=5
��1�[��AUATUH��H�5S�SH��8dH�%(H�D$(1�H�L$H�T$H��H�D$(H�D$(P1�L�L$L�D$(�
�ZY������8����t$H�|$H�����t$H�|$H��~�H�[ 1�H��H�CH�z�;�<�;H�C�D$ ���C(�TH�{�t$H�SA���ݜ��tQH�L$H�V	1�1�����D���R�EH�EH�D$(dH3%(��H��8[]A\A]�@H�CH�|$H�sH�H�C�s����u�EH�E�D�D$L�l$�X�V����L��H���>��t&H�L$H�:1�1������X����L�D$H�L$1�1�H�3������-����W�����SH��H�5��
H�� dH�%(H�D$1�H�L$H�T$�^����tYH�|$�r�����t*�CH�H�D$dH3%(u<H�� [�f�H�L$H��
1�1���F��fD�CH�����ff.���USH��H�5I�
H��(dH�%(H�D$1�H�L$H�T$H�D$��������T��H���T��H9����D$H�t$H��H�L$�P�;H�|$���t:H�D$H�|$H��t+H�(�q��H�|$H���.q�����ty�CH��'@H��H�N
�1�1��P���CH�H�D$dH3%(uCH��([]�fDH�L$H��	1�1������CH�뼐H�L$H�
��m��f.���H�5�;�@��SH��H��H�t$���H�L$H��E1�H���PA�jH�=��;�H�� [�ff.���SH���s��H��E1�1ɍPH�=��;[�[,ff.���SI��H�˹H��dH�%(H��$�1�I��H��L���H���H�t$L����H�T$�1�L�ψD$��e����t H��$�dH3%(u#H�Ġ[�@H��tH��$�H��D$X���5��D��ATA��I���UL��SH��dH�%(H��$�1�I��A��H�D$I�zH��$�Iǂ��H��H�T$L�у�H�t$L�߾��M��L�D$ �$�����D$��	�1҈D$��d����t#H��$�dH3%(u5H�Ġ[]A\�@H��tH��$�H�EH��t	��$���D$X��>��ff.���SH��I���H��dH�%(H��$�1�H��H��H�D$Hǂ�H�z�H����t$L�Ǎ���$�D$��	�H��1҈D$�d����tH��$�dH3%(uH�Ġ[�H��tH��$�H��D$X���u��D��AWAVI��AUA��ATM��UH��SL��H��H��$��T$L��$�H�D$H��$�H�D$dH�%(H��$�1�H���M��H�D$8H�D$@H�D$HH�@H�D$XH�D$PH�D$PHD�M��tH�t$8L���qP��������I��E1�H��f�A��I��I�H��Qu�RӀ�@��<+��@�u�<:u
A�����H���
�A�H�$H�<$D�D$,�T$ �,��T$ H�L$@H�=�;H��H�D$ �5L�L$ D�D$,�����L��D�D$ �?�I��D�D$ H�,$L�\$@M���}H��Ic�L��M��AWL��H��SAUD�L$(L�T$ A�H�D$XI��H�� H��tA��L���L�$u:A���(@H��$�dH3<%(L����H�Ę[]A\A]A^A_�A��t�H�\$HL��L��H��H���x�������A��L�\$8t�H�ھL���������H�D$H�L$HH���H�H�|$8M������?{��E1��W����H�5�
L��������`���A�@I��H�I)�H�������H�,$D��A�PL���R���H�|$81�1Ҿ��`����tOH�|$8���z��H�D$8���H��D��L��I��t$ ��L��H�ǃ�L�L$X����ZY�����L�\$8���A���H�4$� DO�L�L$Ic�L�D$`H��L����H�|$L�L$�D`H��H�)H��L�$��1�1��cf��L�$L����E1��/���H�D$H�L$HH�������H��H�cH��HD�1��1��	��H�|$HH���t�����H�D$H�a���H�4�1�1�L�$����L�$���H�D$H�L$HH���)���H��H��H�HD�녾1�1����L�$�6�����Ky������H��H��H��HD��E����������AWI��AVM��AUI��ATM��UH�͹SH��H��dH�%(H��$�1�H��L��$�M��H�z@��H�D$Hǂ��H�L���$H��$�H�D$ �D$��M����	��	�M�������	�H��1҈D$�x^����t,H��$�dH3%(ubH�Ĩ[]A\A]A^A_��H�D$PH�M��tH�D$`I��D$hA�$M��tH�D$pI�EH�D$x�EM��tH��$�I��D$X����f.���AUI��M��ATI��UL��SH�˹H��dH�%(H��$�1�H��H�D$Hǂ�H�z�H�1���L������M���$�D$@�ƃ�M����	��	�H��1҈D$�\]����t(H��$�dH3%(uEH�Ĩ[]A\A]��M��tH�D$`I�E�D$h�EM��tH�D$pI�$H�D$x��D$X����ff.���Sf�H��0dH�%(H�D$(1�H��)$)D$�t$�H�T$1��\����u�\$H�L$(dH3%(��u&H��0[�f���H���1�H�=C������
��ff.�f���Sf�1�H��0dH�%(H�D$(1�H��D$H�A�A�t$��$�\����u!�\$H�T$(dH3%(��u)H��0[�D��H�'�1�H�=����
�����m��ff.�f���AUI��I�˹ATM��UL��SH��dH�%(H��$�1�I��H��H�D$I�xH��$�L��$�Iǀ��H�@��H�t$8�H�T$@�D$�$L�\$H��H����	�1�L���	�L���D$�[����uRH��tH�D$`H�E�D$hA�EH��tH�D$pH�H�D$xA�$�D$XH��$�dH3%(uH�Ĩ[]A\A]Ð��������T��@��UI��SH��H��dH�%(H��$�1�M��@�Ń�u@��tH�{(��I��1��H�D$Iǂ�I�z�H�H�t$8L�ѾH�T$@H��1��D$�$L�\$H��L�D$(	�D�L$0�D$�	Z����u%�D$XH��$�dH3%(u1H�Ĩ[]�@�������1�H�8��1������������X�����H��I�����dH�%(H��$�1�H��H�D$Hǂ�H�z�H���H��L��1��$	�t$���	�@�t$��:Y����u&�D$XH��$�dH3%(uH�Ĩ������������@��1��f���H�GH���0����f���H�O��t�����x��1�H��t�	�
�@1�H��u	���SH�w`�9H���i��H��H�[�������f���USH��H��H�o��t�}���u�C\H��t'����H��1�[]������E�����C\H��u���H��1�[]�@��AWAVAUATUSH��H�_dH�%(H��$�1�����H�͉�H�
�I��Hc�H�>��f�Hc�1�������+�����i��H��H��?L�d$H��S㥛� L��l$1�H���D$H��H)������~`f�|$�	�;��L���P��H�������1�8@����%D�;���k�T$������I�T$�SH��$�dH3<%(���3H�ĸ[]A\A]A^A_�D�}	���EH�(�Hc�H�>��f��KH��
H�5Ɲ���KH��H�5���ЌA��$�H��H�5g�1�貌�]���D�oE�CC1��D���@������6���fDH�CH�����H�s�g���f��EH����;�����4����EX1�����MHL�E(H�U@H�u8���;M����D�M0����EX����k������1�1�1�Hc8���H����1�H��H��1����H���`��{����;��|��������؉EX1��X�����E�MH�;H�U@A����H�u8A����L�mhL�u`E���mH�Ex�D$�L�epH�D$H�\$ L�L$I�����H�L$M��M��t$L��H��A�����D�}X1�����D�E���L�EhH�M`���H�UxH�up�;�
���EX1�����E�thL�EhH�M`�tLH�UxH�up�;����EX1��c���H�U1ɾ1��NT���I���f�H���H�@�~���1�1��f.�E1�1��f�E��uu�D$����A������fD1�1��C����E1�1��"����!��EX�������1�������������O���D$�E1�H�D$���E1�E1��o���ff.���AWAVAUATUH��SH��(L�dH�%(H�D$1�A�?����%1�A�H��I����H��L���=��H�Å��2����Dž����!H���H�H����H�H�����B��HB H���E1�1�H�D$�H�L�J j�r(1��g��XZH�D$�fDE1�I��A�GtM�oL�t$��|$�D$M����I�uAi}�H��S㥛� H��H��?H��H)���L������~�D$��u[A�G1�H�L$dH3%(��H��([]A\A]A^A_Ð�K��8tffDDž����H�Hc���y���8uA�?�<���@A�u�A�A�?t6I����@E��X���Dž��@������1������1��2���f.���AW1�AVAUATUSH��8L�wH�|$H�t$A�>H�$dH�%(H�\$(1ۃ���NI�~����D$M�nI��S㥛� H�l$ A�~���|$�@��H�$H�t$�"��…������A�~H��Lc8�I����A�F����Lc;I����A��D$$�D$ M���%I�uAiM�H��H��?I��H��H)�ʾH������~��D$&����~�A�>�3���H�D$H���Hc�H��tJH�H��tB�Bt<HB E1�1ɾH�$H�D$H���H�L�J j�r(1��;d��XZH�$DH�\$(dH3%(uzH��8[]A\A]A^A_ÐA�F1�1�L�����H�$M��1�I��H�þ1�H�*����H���U�1�롐�D$E1��Y���1��y���f��������������AWI��AVAUATUSH��H���dH�%(H��$�1���u%�H�o�������^��tA����H��L������H��$�dH3<%(��	H���[]A\A]A^A_�@�QH�APH���H����L�K ��HD����]L�ChH�K`���<H�SxH�spWP�}�z��A��XZE���<H�CPH�������؉CX1��V���I�H������D$DH�D$H�H��`����D�cH���L�s1�L�kH�D$A��Ic�D��L����D$�I��I��H���RA�}[u
A����E���ZA�V��:L��Hc����I��H���:H�x�
1����L��L��L)�D$��I��M����I���H����H�L$HH�.�H�5��b��A�����rH�D$HH��x��KH�81�D�D$0�ʈL$(��H�|$��HcP���L$<�T$ �^��D�\$ �L$(H��I��D�D$0��H�D$�8[u
A����E����A�S�H�|$�:�L$(Hc�D�D$ ���D�D$ �L$(H���PH�x�
1�H�D$(���L�\$(H�|$H�D$ L��H)��չD�D$ �KI�����LEd$1Ƀ;��H� ��1�I9�t$��H��M��APL�C L����AUH�D$\P���H�� L���EA�ċD$D���A����*襶M��tL��蘶E1�;��@D�cX1����DH�H������H��`����D�aL�i1�L���A��L��D��L�a��IcԉD$����H����A�}[H�D$u
A���E���8A�T$��:L��Hc����H���H�x�
1�H�D$���L�D$L��A��L��L)��f�H�L$I��M����CD��L�D$HL��IE�H� ��1�I9��E1���(��L��E�m��}�A��A������D�1ҿ�W��A�ĉE������C�����虶�8�b��H�
$H���I��H����I9H���HE�H�u�1�1��<P���_�����1ҿ�߻�A�ĉE�����L�d$P�1�H�D$RI�|$A�I�D$f�H�fD�|$PH�SD�jH��k�lH�sI�|$�l���CL�C D��L���L��LD�1Ƀ;��H��H�D$LP�}����A�ċD$TA]A^���E����������f�1�1������E1�1����fD�(足H����oEI�?1�H��@�oMH�M$D� �H$H�
'�
�:��H�CPH���y���I���H����b���fDL�d$P�1�H�D$RI�D$fI�|$�H��f�|$PH�SH��kv
H�Ck�kH�sI�|$�l�n��}L��n�N��A�����fDH�Ck�kA�m�|�����|$Ds�DD��U���DD�����H�CP����L$��tL��H���1�L��1��M��f�A������
���D�KE1�E1��q�����{�M��t�L���n����H�Z�1�L��1��M��A���������H�<�1�H���1��M��A��������D�\$E���{���L��H�	�1�H���1��QM���\���A�T$�I�}�]Hc�H�|$���H��t�x:H�L$t^�t$���%���L��H�������A�V�I�}�]Hc�H�|$�<��I��H��t�x:t[�l$�����L��H����b���H�x�
1�H�L$H�D$���L�D$H�|$A��M)�A�p���H�L$I�����H�x�
1�����L��H�|$L)�D$�q�輳I������D�L$<E���j���D�D$ H�L$H���1�H���1��%L���KD�D$ ���H���1�1�D�D$H���E1��K���KD�D$���A�S�H�x�]�L$(Hc�D�D$ H�|$0���D�D$ �L$(H��t�x:tJD�T$<E������D�D$ H�L$H�k��Y����C�����H���H��1�1��mK�����H�x�
1�H�D$(����L�\$(H�|$0H�D$ L��H+t$��蔲D�D$ �KI�������CuL��A����3����v��H���1�H���1���J����ff.�f���ATA�I��H��UL��H�=j~
SH��H��HN�L��H9���€�����H��L��H�=<�L��HN�H9���€�����I�� ��L�ſ(M�������H��H����f�H��H��L��@H�
[�
@�@$�@H���H�CH�@�����H�C��5��H���
H��[]A\�@H���H�=�
L��HN�H9���€�����H��L��H�=f�L��HN�H9��������I��`��L�ſ(M���'�����f�1�L��H��@H�
��
@H���@$�@H���H�CH�@�����H�C��4��H���*���H��H�D$�ʭH�D$����I�Ā�����@I�������@H��H�D$�C��H�D$����f�1�����H���8��H�=؏
H�������f.�D��SH��0dH�%(H�D$(1�H�4$H�T$�L$H�D$H�� w0H���	L���B����uH��tH�D$H�H�D$�1�H�\$(dH3%(uH��0[��{��ff.���H��1ɺ�	�A������H�����f.���U�SH��H����>��H�߉������t1�����H��[]�f.��>"tH��tnSH�����H)�[��H��1��Q��'t�~0��,tЀ�\uF�y\H�Qu�H��H��t��H�������"uH��t�Ð��H�����H���f.�AWHc�AVAUATE1�USH��dH�%(H��$�1�H�_6�,p���=,�I��H����w�1�H���
������fo��I��H�D$(��؅�H�\$0Iº})D$`)��O�H�
f�H�L$p�
c��L$x9���Hc��L�L${E1�H�H�
Y��H)�L�:�L�-cV8H�AH�D$`H�D$ �H��9����Y9�u�t��nI�t��E1�H�L$�T$H�t�0L�T$L�$�D$�$���L�T$L�$I���L��L��H����A	����T$Hcl$L�p�I��H�L$9��@H�D$ �H����������!ʁ ��t��L�l$ ���€�D�H�HHD���@�H��L)�I�����A	�u^M��t`�D$`�f�I��I����A���tFA�U<%u�su�D9�~�A�^Mc�L��I��J�t�0A���A���I�A�E��I�����H��$�dH3<%(L��ucH�ĸ[]A\A]A^A_ÐH��FHc��H��T8H������f��D${L�d$(����H�D$`L�d$(E1��H�D$ �������ff.���AWAVAUATUSH��H�$H���1�A�O���L�=�3dH�%(H��$�1�H��$@H��$@H�D$H�H�D$@H�D$8H��$��D$$H��I���D$ ����H�D$�f��$�1�H�D$H��A��H�l$H��H��A��O������|$ ����D$ ����=w��A���A��|wrMc�H�5h�B�n9�u_H�XB�h�…��Y���m+�t$$�|$ �����A��fol$Pfot$`������k Dωt$$H�s s0�L$ �Ic�H��9�B���
Lc�H��?��B�"�)�I��Hc�H��H��o�ob)\$p)�$�=�w7H��Hc�H�>��H�|$p��S��L�����u�S�	ЉD$|fDL��foL$pM�fo�$�H��L)�H)�H��@B�`K H�s S0�}-�Hc�H�&0���P�=|wH�H�=�f;G�$H�}7D�$PD��H�L$f�UH�EH�	I�|�H9��
*L)�H�H�XH��'�<H��'�'HF�H��H��H�H�L$H�|���I��H���H�,L��H��H�D$(H��H���Ϻ�H�L$H�t$H��H�	L�@H�D$0I���M�L��覺�I��L;t$tL��H�D$�_��L�D$H�D$0I�l-�I�\�I�D�H9��-)Ic�L�D$L�t$(E�,G�C���fD��f.��T$$���<�|$$uO�D$ ���uAL���mDH�5�D�$FD��E�����I9�t;H��D�eH�� Mc�C�g=O���t߃�=|w�H�H�5\�f�<Ft�I9�u�H��H;\$tH���i��H�D$8H�|$@H9�tH���R��H��$�dH3<%(���U(H���[]A\A]A^A_��1��D$ �f����HcD$ H��A�A��M�����D$ �����5���H�|$P��D�D$ ����D�T$ D��1��Z���I��H�D$HI9�vMH���tGK�t-H�����H�L$@I9�HF�H�D$HH�D$8H9�tH���x��H�|$H�N��H�D$8H����M����L9l$H��L�l$8�T$ D��L������L����Q�}���=�����
��������fDH�
�
D�$AD������A����&fo|$PfoD$`H�s �D$${ C0���DH�=���|QM��������H�=��L���[Q����H�D$H�H�D$@H�D$8�����D$p����H�D$x�����N9���H�D$x����6����H���H���@�����贉�����*2�u���f��D$pD$tHDŽ$�DŽ$��H���H�D$x�:���H�D$x�,������"���H��@���H������+�
���H�K�H��H�L$(�I�H�L$(H�S�H��@���H�� ���L�C��(����H�S�H�s�E1�H��H�{��&���H��@���H�����u+���H�K�H�S�H��@���H�� ���L�C��Q(�|���H�S�H�s�A�H��H�{���%�]���1�H�5T��@�zA�{��@���H�{��g2�2���H�{����$���H���l�����H�{��9�����H�{�1��)���1�1������H�s�3�����1��3�w����H�s�2�d���1��2�S���H�������o;�oC)|$p)�$��v�����AH��H�D$x�+��V����o;�oC)|$p)�$��;����D$pƄ$��&����o+�os)l$p)�$�����H�t$pH�ڿ��!��H��$�L�K�1�L��H��L�L$0H�D$(�<�o�`���H�T$pH���o�p���L�C��@)|$p)�$�H�D$xH��jH�D$8L�L$@H����Y^�~���H��$�L�K�1�L��H��L�L$0H�D$(�;�o�@���L�C�H���o�P���H�T$p�@)l$p)�$�H�D$xH��jH�D$8L�L$@H����_AX�����o+�os)l$p)�$�����1�H���==�����1�H���)=����H�C��CH��H�PH�T$x�z����H�CȾBH��H�PH�T$x�[����H�CȾAH��H�PH�T$x�<��g�����CH��H�D$x���G�����BH��H�D$x���'���H��$�1�H��H��H�D$(�=:�o{�I��1��oC�H�T$pL�C��?)|$p)�$�H�D$xH��jH�D$8H���J�AYAZ���H��$�1�H��H��H�D$(��9�o{�I��1��oC�H�T$pL�C�?)|$p)�$�H�D$xH��jH�D$8H�����A[X�\���H��$�L�K�1�L��H��H�D$(L�L$0�i9�L�C�H���D$pH�T$pH���@HDŽ$�DŽ$�f��$�jH�D$8L�L$@H���d�XZ����H��$�L�K�1�L��H��L�L$0H�D$(��8�H�T$p�D$pf��$�H���@H��HDŽ$�L�C�DŽ$�jH�D$8L�L$@H�����^_�^���H��$�1�H��H��H�D$(�t8A�I��1�fD��$�H�T$pH��L�C��D$x�?HDŽ$�DŽ$�jH�D$8H���p�AYAZ���H��$�1�H��H��H�D$(�7A�I��1��D$pH�T$pH��L�C�DŽ$��?HDŽ$�fD��$�jH�D$8H����XZ�r�H�{�1���b�H�s�H�{��e��P�H�{�1��պ�@�H�{�H���D��/�H�s�H�|$p���D$p���*H�s�H�{�����H�s�H�|$p���D$p����*H�S�H�s�H�{��<����H�{�H���[����o{��oC�)|$p)�$����5�H�s�H�|$p��6�}���H�C�H�s��H��H�D$(�6H�D$(H�|$pH��H���Y�D�H�S�H�s�H�|$p�r6�-��Ȼ�#�辻H�|$p�H���<6��H�|$p�����H�s�H�|$pH���'����1�1��ٻH�s�H�|$pH��������H�|$p�1�H������H�S�H�|$p�H������H�|$p�1�H���k�v�H�S�H�|$p�H���P�[�H�|$p1�1�H���z�E�H�S�H�|$p1�H���b�-�H�|$p1�1�H�����H�S�H�|$p1�H�������ok��os�)l$p)�$����H�|$p1�1�1�����1�����������c��H�����H�D$x��H�S�H�t$p��c�~��o{��oC�)|$p)�$��b��o+�os)l$p)�$��G�H��$�H��H�t$(�H�t$(H�|$pH���0	��H�S�H�s�H�|$p�ɭ��H�S�H�s�H�|$p責���H��$�H��H�t$(�H�t$(H�S�H�|$p����1�1�跹���D$x�������o;�oC)|$p)�$���H�{����|�1���p�H���8�c�H��������R�H��$�H�ڿH��H�D$(�H�D$(H�K�H�s�H�|$pH���{���H���N��	�H������H���*���H�� ����Y����H�S�H�s��H�������{����H�{������H��@�������H������H��`����N"��H���H���Ɲ�C�~!�i�H�{�H���#�X��o{��oC�)|$p)�$��<�H�s�H�|$p1�H���y�$�H�K�H�t$pH�ڿ辥�	�H�{�1�H���9��H��@���H�� �������H�s�H�{�H���n9���H�������%���K�H�{�E1�1�H������H�������C���D$p�}��D$p�p�H�|$p�H���1�Y��ok��os�)l$p)�$��=��o{��oC�)|$p)�$��!��o;�oC)|$p)�$����o+�os)l$p)�$����H�|$p��D$|���H����w���H�{��y��1�1�諶H�|$pH���;��H�|$pH���;��H�|$pH���z;�u�H�S�H�{�A�1�H�t$p���*�Q�1�1��H�H�{��/'�:�H�S�H�t$p�1�A�����)��1�1���H�s�H�{��(��H�S�H�t$p�1�A��?��)���H�s�H�{��H(���D�C�H�S�H�t$p1�H�{����V)��H�{��('�C��H�|$pH���S��~�H�s�H�|$p�
�k��o{��oC�)|$p)�$��O��o+�os)l$p)�$��4�H�{��K �o;�oC)|$p)�$���H�����H�|$pH���F���H�|$p1�H���"���H�|$p�H������H�|$p�H������H�|$p�H������H�|$p�H������H�|$p�H����j�H�|$p�H����S��o+�os)l$p)�$��8�H�K�H��`���H��H�|$p�!��H�s�H�{�H������ok��os�)l$p)�$�Ƅ$�	���H�{H��$�Ƅ$�HDŽ$�����H���Z��o;�oC)|$p)�$����o+�os)l$p)�$����o+�os)l$p)�$��i��D$p�\�H�K�H�t$pH�ڿ��A�H�S�H�t$pH�ٿ�۠�&�H�S�H�t$pH�ٿ���H�S�H�t$pH�ٿ襠���H�S�H�t$pH�ٿ芠���H�S�H�t$pH�ٿ�o���H�S�H�t$pH�ٿ�T���H�t$pH�ڿ�͠��H�t$pH�ڿ
趠�q��C�H�S�H�t$pH��H�C���C��C��C����8��C�H�S�H�t$pH��H�C���C��C��C�负��H�S�H�t$pH�ٿ號���H�S�H�t$pH�ٿ�~����H�S�H�t$pH�ٿ�c���H�S�H�t$pH�ٿ�H���H�S�H�t$pH�ٿ�-��x�H�S�H�t$pH�ٿ���]�H�S�H�t$pH�ٿ��B�H�S�H�t$pH�ٿ�ܞ�'�H�S�H�t$pH�ٿ���H�S�H�t$pH�ٿ
覞���H�S�H�t$pH�ٿ	苞���H�S�H�t$pH�ٿ�p���H�K�H�s�H��H�|$p����H�{�H���5���H�K�H�s�H��H�|$p�k��v�H�{�H�����e�H�K�H�s�H��H�|$p���K�H����D$|����D$x�-�H��`���H��@�������H�{��藭��H�s�H�|$p�%�����H�|$p�"H��踪���H�s�H�|$p�$���H�S�H��H�T$(�1��螯H�T$(H�t$pH�ٿ�W���H�S�H��H�T$(�1���e�H�T$(H�t$pH�ٿ���I�H�S�H��H�T$(舮1���,�H�T$(H�t$pH�ٿ!����H�S�H��H�T$(�O�1����H�T$(H�t$pH�ٿ謝���H�S�H��H�T$(��1��躮H�T$(H�t$pH�ٿ �s���H�S�H��H�T$(�ݭ1��聮H�T$(H�t$pH�ٿ�:��e�H�S�H��H�T$(褭1���H�H�T$(H�t$pH�ٿ���,�H�S�H��H�T$(�k�1����H�T$(H�t$pH�ٿ�Ȝ���H�S�H��H�T$(�2�1���֭H�T$(H�t$pH�ٿ菜��H�S�H��H�T$(�1��蝭H�T$(H�t$pH�ٿ�V���H�S�H��H�T$(�1���d�H�T$(H�t$pH�ٿ���H�H�|$pH�����6�H�s�H�|$pH���E�� ���fH�{�H���j���H�C�H��H�s�H��H�D$(�
� 1���ܬH�D$(H�|$p�C�@H��@���H���|���H�5��1����*H�{�����H�{�H������H�C�H��H�D$(�ī1���h�1���\�H�D$(H�|$pH��H�����B�H�s�H��H�t$(聫H�t$(H�|$pH���O���H�|$pH������C���o+�os)l$p)�$�����o;�oC)|$p)�$����H�{��?����o+�os)l$p)�$����D$pƄ$�H�D$x���o;�oC)|$p)�$��f��o{��oC�)|$p)�$��J�H�s�H�|$p�H�����/�H�D$x�!�H�S�H�t$p���	�H�D$x��H�t$pH�ڿ�����H�{�H��蘵H�H�D$x����o;�oC)|$p)�$���H�����H������H�{�H���{���H�{�H���j��u�H���H�{�H�ދ��|��W�H���1�H�ߋ��`��;�H���H�{�H�ދ��B���H���1�H�ߋ��&���H�������H�t$pH�ڿ�����H��`���H����H���R�H���������K�H�{�L�C��H�����H�{�H��蘦���o;�oC)|$p)�$��h��o+�os)l$pH�D$x)�$����D���H�D$x�7�H�t$pH�ڿ�� �H�������C��H�SH��������H�{��H���T#�����1�H���@#����H�{��H���*#����1�H���#����ok��os�)l$p)�$�����o;�oC)|$p)�$��j��H�{�H�����Y��H�K�H�s�H��H�|$p�4��?��H�{�H���c��.��H�|$p�#H�������o{��oC�)|$p)�$�����o+�os)l$p)�$������{�H�|$p�H���!����H�S�H�s�H�|$p�r����H�S�H�s�H�|$p�[�����o;�oC)|$p)�$��D$|�s��H�s�H�|$pH����$�D$|�U���o+�os)l$p)�$��D$|�2���ͦ�o;�oC)|$p)�$��D$|�
���o+�os)l$p)�$������o;�oCH�s�H�|$p)|$p)�$��;�����H�s�H�|$pH���%$����o+�os)l$p)�$�����@��D$|���H�D$pH�S�A�H��H�{�H�D$(达�	H�D$(H�����D$|�?��H����H����*���C�D$|���H��������D$|����C�D$|����o;�oC)|$p)�$�����H�������H�{������1��趥�o+�osH��)l$p)�$������1��臥�o;�oCH��)|$p)�$�蹤�d��1�1��[��o+�os)l$p)�$��@���o;�oC)|$p)�$��%���o+�os)l$p)�$��
��H�L$pH�|$x�D$pH�L$(DŽ$�Ƅ$���EH�L$(H��1�H���Y�����H�{���F����H�s�H�{�贡���H�s�H��@����O����H�{�H��莛�y��H���H��趉�C��^���o;�oC)|$p)�$��C��H�{��j��5��H��`������$��H�{�蛭H�s�H��@����+�����H�{�H��襜����H�{��g�H���H���$��C����H�S�H�s�H����������H���H�����C���H���H���Ո�C����x���o{��oC�)|$p)�$��\���o{��oC�)|$p)�$��@���o{��oC�)|$p)�$��$��H�{�H���H���H�{�H���7���H���J��o;�oC)|$p)�$��L$| ����H���"��o;�oC)|$p)�$�����o;�oC)|$p)�$����H�D$x����o{��oC�)|$p)�$��r���o+�os)l$p)�$��W���B�L��1��p��H����D$|@����D$x�*��H����D$| ����D$x���H�5���@1��) ����菡H�S�H�s�H�|$p�����H�S�H�s�1�H��`����r����H���H����D$x����o;�oC)|$p)�$�����o;�oC)|$p)�$��k��H�����^��H����D$|�����D$x�@���o+�os)l$p)�$��%���o;�oC)|$p)�$��
���ok��os�)l$p)�$�����H�t$pH�ڿ������H�|$p�H��1�������o;�oC)|$p)�$�����o+�os)l$p)�$�����o;�oC)|$p)�$��m���o+�os)l$p)�$��R���o;�oC)|$p)�$��7���o+�os)l$p)�$�����o;�oC)|$p)�$����H�L$pH�|$x�D$pH�L$(DŽ$�Ƅ$���@H�L$(H�s�H��H���N����H�|$pH��1��:����H�s�H�|$pH���$�����o{��oC�)|$p)�$��s��H�|$x�D$pDŽ$�Ƅ$��>@�I���ok��os�)l$p)�$��-���o{��oC�)|$p)�$�����o+�os)l$p)�$�����o;�oC)|$p)�$������o+�os)l$p)�$����H�|$p�H��1������H�s�H�|$p�H���q�����o;�oC)|$p)�$��q���L�����L��1����H��L�D$H��L�t$(������f.�D���1�:u!��t��t	��H�FH9G����ÐAWAVAUATUSH�� �H�k(LcS\LS�C4I9���L�-`�L�9�H�=�L�%keL�5D�L�
��L�6�fDA����tA��Hc�fA�|ut(�CHL�SP�f�A�q=�~��A��Hc�A�p�Lc�F�<A9�u։�I��A�TI9�u�[]A\A]A^A_�ff.�AWAVI��H����AUATA��USH��(dH�%(H�D$1�A�V�}McnA�FI�H��I�L9���H�L$L�=��'D�UH��H��H��H�����
tF��
t;L9�sO�H�X��\u�I9��Y�p�Vހ�V����Ic�L�>��@�{
t�H� ����L9�r��EH�D$dH3%(�?H��([]A\A]A^A_���EH��H��A�n�Z���f.��E	H��H��A�n�:���f.��E
H��H��A�n����f.��E
H��H��A�n���f.��EH��H��A�n����f.��p�VЀ�	v���߃�A���A�V@�t$1�f�|$�r�A�v�p�~�@��	���@�t$H�XA�V�H��1�H�L$H���Û�H�L$�E�H�C�R���f�H��@�uH��A�n�:���f.�H�PD8����E\�@H���E�H������@�VЀ�w`1�@�t$f�T$A�V�D$�r�A�v�p�~�@��w-@�t$�r�H�XA�v�p�~�@��w��@�t$H�XA�V��*����E\�PH��H���U������E\H��������H�X��߃�A@����������DH�����裓���H��H�5sq�@1��fDSH�� ��C`���C`xH�ShH����D�C4[�H�=�����C`���U��SH��H�� �HcS`�KdH�Ch9�|'���Kd�4�H��t@H��舟�H�ChH��t?HcS`�{4�J�K`�w���������D-�C4H��[]�DH��蘗�H�Ch�f�H�=������H�Ch�ff.���H���Hǀ�ǀHǀǀ H� �H�@`H�@ ���USH��H�à�H���H��t�nvǃH�� �H�}hH��t
��H�EhH��H��t�6vHǃǃ H��[]�f.���H� �SH��H�P H�H�H�W�@4�P�������G�<�H�C H�������C[�fD��S�H��<tQ<uH�G(H��tH���fDH�{H��t
�uH�C�{@tH�{H��t
�nuH�C[�@H�跍��D��SH���H��H��H�� &YH�����m�{@H�CtH�C[���AVAUATU��SH��H�ĀdH�%(H�D$x1��F<�O�oH�V)D$H�T$ <���|$$��H�D$L�d$0���D$p�D$0L��H�D$8H���H�D$@H�D$H�H��H����L�l$H�|$HL����L�t$@�D$M���L����H�L$E1�L��H���PH�`�A�jH�����XZL�����L9�t_H�L$xdH3%(H���H��[]A\A]A^�H�|$�������H�|$���|$$������f�L���X����|$$v�H�|$���DH�L�d$0���D$p�D$0L��H�D$8H���H�D$@H�D$H�H��H��tH�|$HL�l$����L������,����sH�;��uH��H�D$@I���U~�H�L$L��E1�H���PH�`�A�jH����YL��^��r����蔎�@��H� �H�A H�9H�Q(H+PH��tS�Y@)��e)�[�f����ff.�f���H� �H�H �Q�P@H�QH�P(H�PH�	H���P<�f���SH�� �H�C H9�t7H��t H�C(�S<�H�C H�S(H�PH�C �S@�P1�H�{ ����CD[�f���H��tOH� �SH9x t1�G H����uH��[閏�fDH�臏�H��[�~��fDH�@ ��fD����ATUH�� �SH��H�?L�e H��tB�-���L���u���H�CH�E�C�D�E4H����S���H�{ []A\門fDH�E �fD��H��t9H�G�G�H�G�@H�G�G(H�GH� ��G0H9x t�D�c�����UH��SH��H�����H�+�C,�E8�C$H��[]�@��ATI���8U��S�9��H��H��t1�}�k�&��H�CH��t-L��H���C ���H��[]A\�H�=A�����f�H�=1��t�����f���ATUSH���a���tjH�Š�H��H����gI�� ��@H��I�$�M���H�����A�D$4H�{H��tC�^~�����uDž�ƅ�1�[]A\�@���Dž���fDH�{�f.���AWAVAUATI����USH��h�t$L�l$0dH�%(H�L$X1��8oH�Š�L���D$H�øH�D$L��D��pf�D$,�D$(����L���������uW�|$I�t$����H��tH��L����n1�H�T$XdH3%(H����H��h[]A\A]A^A_Ð�@�H���oƅpH�����H�|$1�A���̮�פD��pA��tbH��tUH��L���fmL������r���f���F�S
H�=B���H���4����>����1��@�a
H�=�������AUI��ATI��USH��dH�%(H��$�1�H�\$H�|$HH�l$@H���D$@Ƅ$�H�D$P���H���Q������t;L���$aH���<���H������1�H��$�dH3%(u%H�Ę[]A\A]�L���D$�P
�D$�����D��UH��SH��H�� �H�{ H��tH���+���H��1�[]�~���fDH�;�@�;���H��H�C ��f���AWAVI��AUATUSH��8I�� �E�]0E��t'E�U4A�E0E���^I�} �`1�����I�M(A�EXL�t$H��L�)�H�-�L�
;VL�=ԜI��L�
�A�E\���|A�M<L�t$A�A�U4Ic}\Hc��sfDL�ѻfA�<sA��t-A�UHM�uP�#f.�A�w���~A��Hc��s�Lc�F�DEA9�u׉�I��I�4A�sH��f=#�A��I�EH��H�D$IcEI��H�D��x�;uA��H��E�EI�Ġ�D�D$(A��$D9�}bHc�I��$��L$ H)�H����v�L��L�
U��L��u/D�D$(�L$ H�t$D��)ύW�Hc����
�+��
��A�E<H�|$A�IcEIcU\H��H��A�EH)�L�4H)�M�u(I�}A�A�E<A�M�u(L��I+EA�EXA�E\�l���A�E<A�M�uPIcuHIc}\f�A�s��u
IcEHM�uPA�CH�T$H)�L��H)�I�UA�}A�A�U<A�M�u(=���H�=�
Hc�H�>��A�E4���I�}�@�}���I�E ���I�Ġ�A�E4A��$�A��$�M�u(�.���I�UIcE�D�<%������L�t$<
uH������I�A�EA�FA�F�mA�E4H��8[]A\A]A^A_�A�E4M�u(���I�EL�t$I�IcEA�FA�FI�UH�H9�r�=��
�PH��H9��$�
��
u�H��������I�Ġ�A��$�I��$A��$�H��t&�iL���IDŽ$L�
�RL���ADŽ$ M�u(A�E4���I�Ġ�I�EA��$ruIcU�|�%�����L��L�t$H�|$I�A�EA�F��A�FA�E<�IcUIcM\H��H��A�UH)�H�H)�I�E(I�}�A�U<�I�E(�mA�E4���I�EL�t$I�A�EA�FA�FH���A�E4����m�R���I�UA�uL�t$�:'������)�H�|���jA�FI�A�U)ڃ�A�VHc�H�H9���H���0@�8H��H��H��H���>@��
��@��
��H9����9H�q@��\u��yL�A@��'�g@��\�]�\�IH���H�L���I�MA�UL�t$�9"��L������)�H�t�"�����;�[���H���L��L�t$��r�ZA�E<H�|$�IcU\H��A�EH)�H)�H��I�}I�E(�A�U<�I�E(I�E����I�EL�t$I�A�EA�FA�F�qA�E4����I�EIcUH�H9�r �D��
�"H��H9�����
u�H��������A�uI�}��hI�Ġ�I�UI��$IcEA��$ H�H9�r$�f���
�H��H9����
��
u�A��$���L��I+E���D$A�E<A�I�E D�@0E��u�PA�U@I�UH�I�E �@0H�pIc}@I�U(I�ML�>L9��L�D>H��L9���H)��x,����IcM\H)�H����IcE\IEA�EDI�E(A�E4�P����������1��\���A�E4�`�J���A�E4�"�8���A�E<L��H�|$L�t$�IcUIcM\H��H��A�UH)�H�H)�1�I�E(I�}�L��A�U<�A�UI�uI�E(���:����L�t$A�U�"I�uL���i��:���L�t$L�t$�I�{���A�E<H�L$H�|$�IcU\H��A�EH)�H)�H��I�}I�E(�A�U<�I�E(�v�M���H���L�t$H���I���A�NI�UA�VHǀ�ǀ�tA�UA�E4���A�EI�MD�@�IcЀ|�;uD�@�Ic�A�E<H�|$H��I�Ġ�A�IcE\E�EH)�L�4H)�M�u(I�}A�A�E<A�M�u(E9�$�dA�E4	�`���A�E<A�L�t$IcE\A�EI)�M�u(M�uA�A�E<A�A�EXM�u(A�E4	���A�E4�`�*���I�uIcMI�Ġ��><����A��$�����)�H�T�����|�
����)�A��$�
��	t	�� �#H��H����)��A��$��� t�	t��eA�E4I��$��s���L�t$A�U1�I�uL���'��:�p���A�E<L��H�|$L�t$�IcUIcM\H��H��A�UH)�H�H)Ϲ`I�E(I�}�L��A�U<�A�UI�uI�E(����:����L�t$A�U�`I�uL�����:���A�E<L��H�|$L�t$�IcUIcM\H��H��A�UH)�H�H)Ϲ"I�E(I�}�L��A�U<�A�UI�uI�E(�9��:���A�E4�"�p���A�uI�}L�t$��cI�A�EA�FA�F�3�D���A�E<L��H�|$L�t$�IcE\A�EH)�I�}(I�}�A�U<�I�}(��A�F1�H�=���]cA�FI��:����I�E���������]����A�E<L��H�|$L�t$�IcUIcM\H��H��A�UH)�H�H)�I�E(I�}��	A�U<�I�E(��A�E�p�I�EH�x��bA�FI�A�E��A�F�5�B���A�E<L��H�|$L�t$�IcUIcM\H��H��A�UH)�H�H)�I�E(I�}��A�U<�I�E(�/�A�E�p�I�EH�x�KbA�FI�A�E��A�F�5���A�EL�t$�p�I�EH�x�bA�FI�A�E��A�F�5���I�EL�t$I�IcEA�FA�FI�U�D�<
��<
��A�E4�o�G���H���L�t$I�}��r��I�>A�EA�FA�F�oA�E4����I�}L�t$�G<%��<?��H�����q��I�>A�EA�FA�F�pA�E4��A�uI�}L�t$�aI�IcEA�FA�FI�UH�H9�r"�q	���
�k	H��H9��T	�
��
u�H��������L�t$�`mH��H����H���,i�‰�A�VH���`A�FI��l�
�IcUI�}L�t$H��H�H9���H��I�Ġ����
�!	H��H9������
u�A��$���H���L�t$Hc��A�FI��k��H���L�t$H�PPH��H���WH�JH���/L�HM���"H���L���
H���1�L��1��|A�FA�F�i�'�H���L�t$H��H���xH�XH���kH����g�‰�A�VH���S_A�FI��j���I�}L�t$1���A�F�2�A��A�uI�}L�t$�_I�A�EA�FA�F�6��Z�z�_�p�^�f�]�\�T�R�S�H��>��4��*�� ���!��"��#��$���H�@�A�uI�}�A�EXM�u(L�+�L�
DEL�����%��&��'��[��*��+��w�u�A�E<H�|$A�IcE\A�EH)�I�}(I�}�A�U<�I�}(�;��\���L�t$�,�A�uI�}�]A�FI�A�EA�F�3��d���1��d���c���b���a���`���
��<��L��K��J��I��H�|�G�r�F�h� �^�E�T�D�J�C�@�B�6�A�,�@�"�=��?��>��/���0����.����-����R����Q����P���O���N���M��H�����L�t$H�5�����1��x�A�E<H�L$H�|$�IcMIcE\H��H��A�MH)�H�H)�I�U(I�}�A�E<�m�I�U(A�E4�&��,��I�EH�5>����A�E4������ȉ��A��1��������	���������������
�������������������z���p���f���\���R���H���>���4���*��� �����(���)���g���f����e����\����U����V����W���X���Y��A�uI�}L�t$�ZI�A�EA�FA�F�~�������4�m�I�Ġ�I��$H��t�WIDŽ$E�M`�}ADŽ$ E���*��D$����D$����K���u����7���{���I�E����������������A�mL�t$I�]������uH�5a�H���x������H���XA�FI�A�EA�F�6�p�I�UA�EL�t$H�z�R������0u�H�����)���0t�~��7�������1��x�A�FI��1�
�A�}L�t$�B�"W�1�1��I�}H���\x�I��;"��A�F�1���A�E<H�|$A�IcE\A�EH)�I�}(I�}�A�U<�I�}(����������H���L�t$H�@PH���[H�XH���NH���M`�‰�A�VH���WA�FI��h�.��~
�J�H�Ơ�����7��7���z
��������I�Ġ�A��$qu	����I�>A�EA�FA�F�oA�E4���x
�������A�E4�n��A�E4�m���x
�������r�o���><��L�t$�=��z
�����@�8L��H��A�n�F��z
�������;��H�=������-���1�1�H������IcU@HPI�U(���Ic}\I�uL�7�M�u(L�
L=L�%�H�H�t$Hc����D�b�1���E��
�DH���<@�<H�xH9�u�I�M �y0�iD���A���vL�t$(I�U(I���IA�v��6���N�A�F�p�A{�I�FH��t=HcT$ M�u H�D��I�U(��AF���I�~A�F H)�H�T$ ��u�I�FH�=������I�F�H�=R�H�L$(H�t$ ���I�E I�U(L�$�I�}H�L$(L�
4<L�
�H�t$ ��HcD$H�I�M(�b��L��M�u(L�
<Hc�L�֠fA�<stA�EHM�uP�s�JHc��LM9�tH�I�G�C�JHc��LM9�u�BIc}\I�MA�AH�H�L$=��&�����I��M�u(���L��L�t$(= � I�}Ic�O�HqHc��DL�1�L�
J;����A�E@L����I�E �PA�U@����I�E 1�A�E�e@H�@Mc�B� I�U IcE@H�R�DI�E H�PI�U��������c���HcD$H�I�U(���Ic}\I�uL���M�u(L�
�:L���H�H�t$A�����A�E@�A�S����lSA�FI�A�EA�F�7���A�EA�E4A�FA�FI�EI��q��L��L�t$A�E<H�|$�IcMIcu\H��H��A�MH)�H�H)�I�E(I�}�L��A�M<1��I�uI�E(A��$AƄ$���A�E4
A)E����:�A�L��L�t$���z���H�\$�|�
�j����W��b���fDE;e\tDI�E ��@0A�U@�U���I�}�BL�A�L�
Z9��L�1�u9A�U@����I�}�=�A�U@I�E �L�	�L�
"9L������H�=���j��A�U@L�ߝL�
�8L�Ѣ���@1�衴A�F�2�A�P�L��L�����fDL�ݽM��H�����L�����H����L�HL���L��M��MD���
1�H���kq�A�FI��6���I�}1��?0t.�	��AA�F�2��I�}1�1��(q�I������۴�A��@1�1�H�1���L�%�M���L���H��������H�����r�v�A�u�PA�FI�A�EA�F�7�*�I��$�I�}D�D$H��H�D$�)Y�L�b�D�D$L�
v7��L�M��\�L�t$H�D$E�FI��tIDŽ$�ADŽ$A�E4����H����A�u�	PA�FI�A�EA�F�7��1�1�H� ��G�ff.�@��ATUS��vs�F��<I��ug�F�1ۀ<uKH���8�m�H��H��tWD�cH��H�kH�kH�D�cH�C H�C(�C0�Q��H��[]A\�f�1�H��[]A\�fDH�=٭����f���UH��1�SH��H���GH�?�pHc��LHcSH��DH� �H��CH�;�p����H���ZH���ǀ�ƀ�H��1�[]�ff.����AWI��AVAUATI����USH��hdH�%(H�D$X1��KH�à�H��H��D��pH�D$A�D$���cƃpI�D$�Ao$L�d$H��H�D$ H�� )D$����L���bL�l$0L���M��L��L�����������D����@�H��ǃ��6LH� �A��H��D����@4��������H�D$ƃ�1�H��L���(���|$$vL���	�D��pH�L$XdH3%(H��u~H��h[]A\A]A^A_�L�����|$$�#��������H��1��vJ�@1�1�觊貀H�D$H��H���NI�i���f�H��1��6J�o�����e�ff.����AUI��ATI��USH��h�odH�%(H�D$X1�H�GH�l$)D$H��H�D$ H�� ��vH�����H�\$0H�����L��H���9������t7H� �L���@4�.=H������1��|$$vH��D$���D$H�L$XdH3%(uH��h[]A\A]��e�ff.�f���ATUHc�SH���}I��H����i�H��tN��~�}�1��H����H�JH9�u��D(D��H���(����H��t4�@ H��[]A\�@H�=Y�H�D$����H�D$��H�= �H�D$����H�D$�@ H��[]A\�f.����?t�f���H���|�u�����fD1������USH���uH����H��H���S���Hc��HH���;I��H��A��H�
��H�����1��(W�H������t8H�)�8H�پH���H�81��(p�H��H��[]��Gf.�H�ڿH�5RA1����H��H��[]�G@H�=a���IH���|���@��AVI��AUA��ATUH��1�SH�Ӻ
H�� H�;dH�%(H�D$1��j�H�;1�I����d�M��tI�>�
1���i�I�>����d�A��&����D	�A��A��|tA��A��~A�ED�I��H�
���L��1���U�E�x��Hc��Og�Hc�H�E��sk������tA�$������8�EH�D$dH3%(��H�� []A\A]A^�DE1�E��A��A��!DE��_���@�ڃ�I�L�H�L���r���1҉у�I�4H�49�r��@D!�A��� ���DA�$�ۉA�T��T��\���f���A�T�f�T��H����a�f���SH����Nf��CH���C[�ff.���AUI��ATI��UH��SH���Z^I�}�sHc��m�H�EIc}IcT$I�4$H��;Z�H�UHc���]�EH��[]A\A]�ff.���AVAUATUH��SH��H�� L�&HcV�:dH�%(H�D$1�L��I���`�H��t.�oEH�CH�EH�D$dH3%(uxH�� []A\A]A^ÐI��D��L��L���O���t��|$uD�t$H�<$�GH�E�D$�E�D$�E<wH�;�(b��fDL������fDL���[��`���ATI��USH��H�� H�;dH�%(H�D$1��FH��p�=���tqH�8�HcsH�;�H��H��t9H���iq�H��I�$�-O�A�D$H�D$dH3%(uLH�� []A\��H�;�b�H��H��u�L�������fD�t$H�<$�FI�$�D$A�D$��G_����AWAVAUATUSH��H�$H���1�A��A��1�L�(�M��dH�%(H��$�1�L��$H�D$pf�L$p�D$$I��H���D$ ����L�l$H�D$A������|$ ��+�D$ ����=��A���A��)��Mc�H�5�B�69��zH�C�B�0���������L$$�t$ �����Hc�foT$0������AUD։L$$I�M�T$ H�T$@I�U(K�?H�Ef�]I�t�H9���L)�H�L�hI��'�YH��'A�'LF�K�	M��H�D$L�I��H�|�b�I��H���K�l-L��H��H�D$(H��I��V�H�D$I��H���������H�PH��H��H�t$H��H�RL��M��L���sV�L;d$L�g�I��tL��H�D$�%_�L�T$L�I�H�D$I�l.�O�l*�I�D�H9���Hc�L�T$L�d$(E�4A����:���Hc�H�F���ȅ�t\��H�a�HcɃ��<
�)�H��Hc�H�RI�T��o
H�R)L$PH�T$`<�VH���Hc�H�>���T$$����|$$uG�D$ ����u9L���ZDH�=)�����qDI9�t3H��H�]I��A����t���)w�H�H�
���<t�I9�uͻH;l$tH����]�H��$�dH3<%(����H���[]A\A]A^A_Ð1��D$ �&����HcD$ H����A��
�����D$ �����]���H�|$0�V	L����D$ ���fD�;���L�t��)���L��I�u�H�|$PI��0����I�}0H���]���L�<�@H�t$`foD$PI�MI�u(AE�E�����)wH�H�=��f�<f9�tHHc�H��H�������sfo\$0H�D$@I�M�D$$A]I�E(���fDH�5q���v����c���L���{����Aom)l$PI�EH��I����H�D$`�3����L��I�}�H��H���I��HH���H�H�I�}�
\�I�}H�\���L� �����Aoe)d$P�H����H���H�HL��1�I��H���I�}�[���L�Π���H����H���H�H빺L��I�}�H��H���I��`H���H�H�I�}�O[�I�}`�F[���L�e��(���H�|$PL��H��I���;�����L�:�����Aom)l$PI�EH��I�����H�D$`�����Aoe)d$P��H�t$P1�L��~���I��0H�����L�П���I�U�H�t$PL��&�U���I��HH�����L����_���I�U�H�t$PL��|���Ao}�I�E�H��I��H���)|$PH�D$`�!���I�u�H�|$PI��HH������I�}0�
Z��L�)����H�t$P1�L��!�"����AouI�EH��I�����)t$PH�D$`����Ao})|$P���H�|$P������L����}���H�|$PI��H������L����U����Aou)t$P��L����\���L��1��K����AW�H���H�
?��P�Hc��<Hk�H�H)�I)����I��L�T$H��L�d$(��ff.���ATA��USH��H�� H�Š�dH�%(H�D$1�H��H�$H�L$H��������tD����^���H�߉��1�������H�t$dH34%(u	H�� []A\��mV�ff.�f���U��SH��(H�à�dH�%(H�D$1�H��H�$H�L$H����
���t@���������������H�t$dH34%(uH��([]���U�f.�@AWAVAUATUSH���L�SH�k(�C4I9���L�-�L��H�=�L�%�L�5��L�
1�L�j�f.�A����tA��Hc�fA�|ut&�CHL�SP�f�A�q��>~��A��Hc�A�p�Lc�F�<A9�u؉�I��A�TI9�u�[]A\A]A^A_�ff.�f�PXH��4�H��H�_v8H��H�81��ja��@W���H����@8�ff.�f���H����@8Ð��H��_;�@��������H���H�H �Q�P@H�QH�P(H�PH�	H���P<�f���SH���H�C H9�t7H��t H�C(�S<�H�C H�S(H�PH�C �S@�P1�H�{ ����CD[�f���H��tOH���SH9x t1�G H����uH��[��U�fDH��U�H��[�U�fDH�@ ��fD����H��t9H�G�G�H�G�@H�G�G(H�GH����G0H9x t�D������UH��SH��H�����H�+�C,�C$H��[]���ATI���8U��S��W�H��t1�h�}H����W�H�CH��t�C L��H�����H��[]A\�H�=��������SH���S(���t1����H����@H��H��r���H���:���H�CH��];1�[�ff.���UH��SH��H���H�{ H��tH�����H��1�[]���fDH�;�@����H��H�C ��f���AWAVAUATUSH��8I���H�|$E�^0E��t+E�V4A�F0E��uA�F4I�~ �/1��N���H��L�= �L��H�-�L�+�L�%D�H�
}�M�n(A�v<L�l$A�uA�F4Hc��{fA�<zA�4�t(A�FHM�nP�f�A�|��>~�4�Hc��{�Lc�F�DEA9�uۉ�I��I�<S�{H��f��jtA�u�@A�zM���…�u
IcFHM�FPA�BH�|$L��H)�I�~A�VA�A�V<A�M�F(���gH�=əHc�H�>��A�F8�
H��8[]A\A]A^A_�I�>�@�y���I�F �����ԾH�=���7H�L$H���A�A�1�H�=���7H�L$H���A�A�A�FI�v��~xHc��L�1Ҁ� wH�$H�����]t��tPI�$���A�FH��A�FI�v��~%Hcп�L�L��H�����!C׀�]tƄ�u�H�~�p�A�F8I�~A�v��6H�L$H�A�F�A�A�����I�~ �s���1����A�F<A�IcFHM�FPA�B�B���I�V�<
�����A�F8����I�F��u���A�FI�~�ƒ�xULc�N�A�1@��	t@�� u>Hc��I��H��H)�A�A�FI�~��A�FL9�tN�I��A��� t׀�	t����t.�� t��	u$�48H����)�I�~A�F���t
�� t�	t߅�������5H�L$H�A�F�A�A����DL��I+F���D$$A�F<A�M�n E�M0E����I�UMcN@I�~(I�vJ�
H9���N�L
L9���H)�I��A�},���jA�A��D$ ��~ E�i�1��H���<@�<H�xI9�u�M�n A�}0��A�ED)ȅ��{I�V(L�D$(�PE�MD��C�	��D΅�N�A�E�p�	Z�H�T$H��I�Et<Hc�M�n H‹D$ I�V(��AE���I�}H)�H�T$A�U ��u�I�EH�=`��3���I�nH���H���A�F8H���]�H��t;�8
H�xu�x
u�H�x�ٸ�:���I�FH�L$H�H�I�F�����IcF�D�I�FH�xA�FI�~�p���3H�L$H�A�F�A���A�����I���[I�FA�FDI�F(A�F4�P�����������A�EA�F@I�I�EM�n A�E0����L�D$(= � I�>Hct$ O�IuL�D$Hc���"L���L�D$L�b�����A�F@H�
Ә�I�F �PA�F@����I�v 1�D$ A�F@H�vH��I�v IcF@H�v�DI�v H�FI�F��������tbHcT$$H�I�F(���I�NM�n(L���L�МH�L$H�
D�A�u�����D$ ����I�v ��F0A�F@�a���IcF@HFI�F(�D���I�NM�F(L�u�H�L���H�L$A�BH�
ۗ���A�F@A�E���I�>�"���A�V@L�F�L��L�D$H�
�����I�>L�D$�1���A�F@I�v �L�
�L��L�D$H�
Z����H�=^��i���H�=���]���HcD$$H�I�F(�l�L���M�F(L���Hc�H�
�A�rf��tA�FHM�FP�<sD�OMc�F�LMD9�tI�4t�<s�GH��DE9�u�GI�~A�CH�|$��>�����������M��I��M�n(�[���H�=B�����ATUS��vk�F��<I��u_�F��<uVH���8�QN�H��H��tKD�`H��H�hH�hD�`H�H�@ H�@(�@0���H��[]A\�1�H��[]A\�H�=���"�f���SH���8�H���H�ߍpH��J���1�[H�4T;�ff.���ATUHc�SH���}I���M�H��tJ�}�1҅���H����H�JH9�u��D(D��H���(����H��t�@ []A\�H�=1��l�H�=��`����?t�f���H���|�u��^���fD1��Q������H����L�@�����L�f���H����I�@����I����H��D�	;E1�1����=X�H���HD�H���ff.���H��E1ɺ1�A������"�W�H���HD�H���ff.����SH���=�;�]\�H��[�DI�@��H��H�6�9���H��H���S����=M;�u1��H�����1�H�=��4=�&;��x�H���K�1�H���D��AU�I��1�ATI��UH��SH��H��H�6�':�H��H���tH��H��[]A\A]�I�EL��L��PH��H��t�L9eL��HFUH��H���?�I�EH��L��P(H��H��[]A\A]�f�PXH�
/�H��%�H��H��g8H�81��R��H�ff.��AVA�AUL���ATUH���SH��H�EH��u=H��I9�u�[]A\A]A^�H��H�QH�BH�AH�PH�HH�@ L��M����H�L�`H��)SxH�HH�4����H����WH�H�TH�xuH��H��H���H���DH���H�ʉ�H�@0L��H�@(I���H�����@)Ή�H��H��H;�4���I��I��?M�HJ�L�H��u!�I��I��?M�HJ�|�H���.H��H�H;u���H�E����H��H)�H�8H�HL�@H�H9��;L9��BH�x0A��L����H��H�L�H���|H��H�x A��H;�
H�J��ÀH9x �����L��H��H��H��H!KH��������H�~H�L�FH9��CL9���H�~0A��L�ǃ�H��H�|�H����H�~ H��A��H;7��H�J��ÀH9~ �>���L��H��H��H��H!K�)���I��J��J�D�H�P H�@H�@����H���I���H�P H�@H�@L��H��H	C���H;Au
I;@�����H��H�J�H�T	PH��H�r�H;2�)H�JH�pH�HH�AH�B�^���H�K(H�p�H9�uH�K(�f�H��H�QH9�u�H��H�P�H�H�{0H�@�H)C8H��P(����H;w�w���I;p�m���L�GI�xH�H���$L9�����H��H��H��H��H��3�H9�3������L��H��H��H��H!K���L�AI�HH�8H����L9������H��H��H��H��H��L��;�L9�;������L��H��H��H��H!K�y���L��H��H	{����A��H��L���I��L��H�y0@��I��@��A��H��I��H�<�N�D�M��u�I�H�x H;�S���H�H�x H�y H�x(H�y(H��tL�G I;8�.���L�A(L�G H�x0H�y0H������L�G I;8����H��0H�O ���I��H��J�����A��H��L���I��L��H�0��I����A��H��I��H��N�D�M��u�I�H�N H;1�����H�9H�N H�O H�N(H�O(H��tL�A I;�v���L�G(L�A H�N0H�O0H���.���H�q H;�P���H��0H�y ����H�x H�����������H�N H��������{���H���wAUL�n�ATUSH��H�^�H��H��w0�x��w'H��H��H�H�P`H�L�h`_xH��[]A\A]�@H�H�H��I��H�H��t��I�DI)\$PH����H�E���oI�}I�DuH���H����I�]H�XH����H�ˉ�I�E0I��I�E(L���M����@H��)ȉ�H��I;��H��H��?H�~I�D�H��u#�f�H��H��?H�~H�L�H����H��H�H;u�H�PL�jL�hI�UI�EI�E H���H�H������H��[]A\A]����H�PH�pH9��SH9��.H�x0@��H���H��H�T�H����H�P H�ɉ�H;��H�I���H9P ��H���f�H��I)�I�EI�UI9�u_I9���I�}0��H�Ѓ�H��I�D�H����I�E I�M��L;(�H�I��ԀI9E �nI]����L;huWL;juQH�PH�BI�MH���eH9�u�H��H��H��H��I���I9��u�H�����H�I!D$뛐�K���H��H��L�l�I�U M�mM�m�j���f.�I��ĀL���I�E �M�mH��M�mI	D$�3���I�T$(I�u�H9�u
�DH��H�BH9�u�H��I�E�H�I�|$0I�E�I)D$8H��P(����H��H�K�H�D	PI��H�p�H;0�3H�PI�uI�UL�jL�h���f�H�����H��I!T$����@H�����H�I!D$�~���H;B����H;F����H�rH�VH�H����H9�����H��H��H��H��I���I9�������H�����H��I!T$���@��H��H�<���H��H��H�z0��H���Ƀ�H��H��H��H�t�H��u�H�H�H H;����H�H�H H�J H�H(H�J(H��tH�q H;�����H�r(H�q H�H0H�J0H������H�q H;����H��0H�Q �����H��I�t��f�H��H��H�x0��H���҃�H��H��H��H�L�H��u�H�I�U L;*�o���H�I�U H�P I�U(H�P(H��tH�J H;�J���H�H(H�J I�U0H�P0H������H�J H;�$���H��0H�B ���L�����H��L��I�������H��I	T$���I�T$(�k���H�x ��������I�} �b����G���SH��H�t$H�whH�|$H�T$H�L$ dH�%(H��$1�H��tH�����H�ChH�D$�@p��tDH�D$�@p��H�=|����H��$dH3%(��H��[���-����H�`�H�
��D$<H�L$0��lt>H��0H��xH����H���H�\$0H��t
H��@p�D$<H�|$0��H�D$H�|$@�@pH�`�H��H��H�T$(�IA�������H�`�H�\$(H��H�D$�xpt_H�`�H�T$(H������H��t�H��@p�D$<H���H�D$0�g����[,H�D$0�q,�D$<�C����H�Z8��H�=��H��`M�L�D$ H�;1�H�L$H�T$���D�D�D$<H�;1�H�L$0H�����D��>����88�H�L$ H�T$�H�t$蟼ff.�@AWAVAUI��ATUH��SH��H��v>L�fI��I��w}L��H��H��L9�v%H�U8L��H�5׊H���_���1��/1�A� H�T�H���H��t'H�HH��H���D)exH��[]A\A]A^A_�DH�EH��H���HH�EI��H���H������BH����H���H�D�H���f�H�9H98HB�1�H�x(��H��H�D�H��u�H�YH���9H�H�H�H��t��H�H;L�H�CH��tH��H��H��H;��H�SH�sH9��kH9���H�{0��H�Ѓ�H��H�D�H����H�C H�ɉ�H;��H�H��ՀH9C �H�I���H�E1�I��M)�I��wAH��H��H�H�JHEPH�EPH;EXvH�EXI�H��t��H��H�C[]A\A]A^A_�@L��N�#H��H�I�BM�
L�JE����I����I�ɉ�I�B0H�T�I�B(L���M�����@L��)ȉ�H��M;��H��H��?H�~I�D�H��u%�@H��H��?H�~H�L�H���'H��H�L;u�H�PL�RL�PI�BL��I�RI�B ����H����H�H�D	PH�\������H��ŀL���I�B �H��M�RM�RH	EL�������{�L�}H�EHL)�H9E8rgH���H��pH9�tTH�L9������H�����1��DH�L9��{���H9�sL9�HG�HG�H�[H9�u�H��H���V����I�G�E1�L9�sL��K�T'A�H��H!�I��H�H�H�H��t��M9�rH�E8L�H;EHwrI���H�}0L�D$L��H��PL�D$H���MH�U8L�H�U8H;U@vH�U@L�8H�U(H�XH�PH�E(H�@I�G�H�H��R����H����I���I�H��tL�D$��L�D$H�UHL��H��L�D$H�5����L�D$�M���H�����H�H!EH�����f.�H��H��L�T�L��I�R M�RM�R������@M��E1�E1�)�H������H�����I��H�
L9�u+��H�R(H��LE�H��t[H�
M�L9���L9�rH9�HB�LB�H�J0M��y�H��t.H����fDH9�sL9�HG�MG�1�I�y(��H��M�L�M����I�L9�u�I�Y�A���H;Z�n���H;^�d���H�rH�VH�H=��H9������H��H��H��H��H��H���H9�������H�����H�H!E�{���H�Z������H��H�4��	H��H��H�x0��H���Ƀ�H��H��H��H�T�H��u�H�H�S H;�����H�H�S H�P H�S(H�P(H��tH�J H;�����H�H(H�J H�S0H�P0H�����H�J H;�d���H��0H�B ����I��vI�B H���H�PI�BI�RL�RL�PL�����I��I�I�H�D	PH�D�H�p�H;0t4H�PI�rI�RL�RL�PL�����L���h���H��L��I���|����H��H	U�H���~�L�D$I�H������������M��tI�Z�^���H�{ ����H������H�������H�����H����AWL�~�AVI��AUI��ATUH��SH��H�^�H��H���*L�bI��L9���I9��~I���+I�4H���dH�<H;G�H�VH��tH��H��H��H;��H�I9��<I�}��(H���H���H�H�H�H��t
H�4$��H�4$H�FH�VH9��H9���H�~0��H�Ѓ�H��H�D�H����H�F H���H;0�[H�I��րH9F ��
f�I�NH�A�I9�vI�DH��H!�I9���I�F8H�I+E�I;FH��I�~0M�E�H��H�L$L��L�$H��P L�$H�L$H���kI�V8H�H+I�V8I;V@vI�V@H�L��I9�t;I�v(I9�u�?
f.�H��H�VI9�u�H��H�L�xH�h H�@H�� H��I�L)�H�H���3H��H��I�H�BINPH)�I�NPI;NXvI�NXH���H�H���d���]�H��wb1�A� I��H���H������H�HH�hL��H��H���H�S��&�A�Fx�H��D)�A�FxI�I�F`I�EM�~`�A� H��L)�H����H�H�H�H��t��I�H����L��M�H��I�E�I�/I�GI�l/M�I����I�ȉ�I�G0I��I�G(L���M���M�@L��)ȉ�H��M;��H��H��?H�~I�D�H��u$�H��H��?H�~H�L�H����H��H�L;u�H�PL�zL�xI�WI�GI�G MfPI)�M�fP���H��H�H��L)�H�H��tH�t$H�$��H�t$H�$H�VH�NH9��~H9��]H�~0��H�ʃ�H��H�T�H����H�V H���H;2�*H�I����H9V ��I�H���SH��H��I�M�H�JIFPH)�I�FPI;FXvI�FX�H���H�H��t��L��H��H��[]A\A]A^A_�f�I�}�tyH��L���N�L��H�S�H��H���l$�L��L�������H��� �L����H���H�H��t	���I�V8H��H�5�~L��1����o�����H���z���H�H�H�H������H�4$��H�4$�����k�L��H��H������H;ru�H;qu�H�JH�QH�>H����H9������H��H�O�H��H��I���I9�������H�����H��I!V�r���H�PH�H�pH9���H9��c���H�x0@��H���H��H�T�H���%H�P H�ɉ�H;�/���H�I����H9P �����H�����H�I!F���H��H��L�|�I�W M�M��*���f�I��ƀL���I�G �M�H��M�I	F���@L��M�H��I�E�I�GI�/H�jI�}�uH���H���H����H�͉�I�G0I��I�G(L���M���i�@H��)ȉ�H��I9(�,H��H��?H�~I�D�H��u(��H��H��?H�~H�L�H���FH��H�H;(u�H�PL�zL�xI�GL��I�WI�G �����I��I�H�H�D	PI��H�p�H;0�tH�PI�wI�WL�zL�x����f�H�����H��I!V�\���H�����L���	�H���H�H��t��I�VHH��H�5J{L��1����g���L��H��I�M�I�OI�H�BH=vI�G I���L��H�PI�GI�WL�zL�x���I��ƀL���I�G �H��M�M�I	FL�����H��H��L�|�L��I�W M�M������H��L���	I��H��H�z0��H���Ƀ�H��H��H��H�|�H��u�I�H�N H;1�?���H�H�N H�J H�N(H�J(H��tH�y H;����H�z(H�y H�N0H�J0H����H�q H;��H��0H�Q ����H;B����H;F����H�rH�VH�H����H9��1���H��H��H��H��I���I9������H�����H�I!F���L�����H��L��I���j���H��vI�G I���H�PI�GI�WL�zL�xL���:����H��I	V�{���@��H��H�<��
�H��H��H�z0��H���Ƀ�H��H��H��H�t�H��u�H�H�H H;����H�H�H H�J H�H(H�J(H��tH�q H;�����H�r(H�q H�@0H�B0H������H�H H;�|���H��0H�P ���H����H�ʉ�H�F0M��H�F(I���H�����@H��)ȉ�H��H��H9��I��I��?M�HJ�D�H��u$�I��I��?M�HJ�|�H����H��H�H;u�H�PH�rH�pH�VH�FH�F �Z���H��H��H��H�D	PI��H�p�H;0��H�PI�wI�WL�zL�xL�����H�����H�I!F�+���I�v(����I��J��J�t�H�V H�vH�v���I��ƀI���H�F �H�vH��H�vI	F���H;p����H;r����H�PH�BH�H���|H9����H��H��H��H��I���I9���~�H�����H�I!F�k���H��H�<��H��H��H�x0��H���҃�H��H��H��H�L�H��u�H�H�V H;2�]���H�H�V H�P H�V(H�P(H��tH�J H;�8���H�H(H�J H�V0H�P0H�����H�J H;����H��0H�B ���L������H��L��I���D����H��I	V�B���H�~ ��������H�x �@������H��H�J�H�	I��ƀH�x�H;8t!H�PH�~H�VH�rH�p�%���H������H��I	V��H�~ �%����I��H��J�������AVH��AUATI��UH��S9��I��H��A��L��A�VH��H����L�0���&�@I��H���H�h0H�XH��I��pI���H�@ I��pH�@(H�@H�@�@x1��H�H��f.�H�@H��H�@H��H�B�H9�u�I��pA�I���I���H�@I�F8A�FpI�F@I�FHI�FPI�FXE�ntI�FhM�f`M��uE��u [L��]A\A]A^�L��L����I�FhE��tྐL�����L��H��I���H�H��pH���H���H��H�QH9�u�H�qH���H��H�QH9�u�H�qH�H��H��H��tH�z H��H9�u�I��$pL��M��I��$�I��$��"�[L��]A\A]A^�H�}A8I��H��sH�81��|,���R"�H�SA8�$�H�=�sH��4���("����AVH�=�qAUATUS�"�H����L�5H�7I��1�M��L��H�=�q�@H��0H�;��H����L���5&��u�Hc�H�DmH��I�H�=kq�!�H��tq1�H����Hc�H��H��9��!H���~E1�1ɺ L�����H��H��t!H�=*q�d!�H��t/1�H���H�H�C H��[]A\A]A^���f�H�C  H��[]A\A]A^�@L�-Q�7�J���H��?8��H�=�rH��L3���� �H��?8L��1�H��rH�-ipH�;��*�H���H�=xp�3�H�
)pH�;H��1�I��0�*�I�H��u��c �H�d?8�(�H�=rH��2��Ԑ��AVI��AUATA��USH�htH�GhI�v(E�ntI�n0H��t$H���f�I�~0H��H�^H��P(H��u�E��t5H�EH��PE��t[]A\A]A^�D[L��]A\A]A^�8��I���D��I�F(I���H��I�F)�I�F���1�A�FxIdž���Idžx�H�I��pI��p�H�@H��H�@H��H�B�H9�u�I�v`I��pI�F8I���I���I�F@I�FPI�FXH��u[]A�FpA\A]A^�@L���H�I�Fh��f����7�����������������H��tH�F�H���fD1��D��H�E';��f���H�5';���tH��H�����@� �ff.���H�';���tH��H���4��@��ff.���H��&;���tH��H��H���1����'�ff.���H��H�=�&;���t�'����1��ff.�f���I��H��H��L�H�H��uH��� ���H��H��H���H�5�o1��s���I��H��H��H��L�H�H��uH����H��t H���f�H��H��H�5co1���'�H�<8��H�=F�H��g/����ff.�f���I��H��I��H�H�H��u1�H�����fDI��H��H��L��H�5�n�1�訞���I��H��H��I��H�H�H��uH���|&�H��t#H���f�I��H��L�ɿH�5�n1��T�H�E;8��H�=s�H��.���f.���U1�H��SH��H���Y���H��H��tH��1�H��H���p�H��H��H��[]���UH��SH�����XHc�H���P���H��H��tH��H��H���J�H��H��H��[]�ff.�f���UH��S��{H���	���H��H��tH��H��H�����H��H��H��[]�f���ATI���~US����H��H��t
�݅�u
�)[H��]A\ÐH��L��H����H����ff.�f���H��#;H9xHCxH�xH1��D��H��#;��t	H�B8�@H�BP�RxH)��ff.�f���H�u#;��t	H�@@�@H�@X�����H�=S#;�.���ff.���S�6���H�=DjH�(#;�S�H��tH�#;1�H���m�[�f���H��";H�=�";�ff.�f���H�G0����H��G1����SH���wH��L���H�{ H�CH��t�s(�7���H�C [Ð1��tSu(�(u"�Du�8uH�G0�8thist��������xu�1���ff.���SH��H�����H�{ H��t[����[�ff.�AWH�
�kAVA�ֺ AUI���ATUSH��H��8dH�%(H�D$(1�H� �I��L��L�@P1���	�A��H���H��H���H��tcH�����C�T7H��1�1��ATH�'kI��CM��1�H��� �CX�CZH�D$(dH3%(u!H��8[]A\A]A^A_�@�H�-������ff.�f�H���'AWAVAUATUSH��H�^0H�����G tH�V��B(�t
1��W,9V,tH��[]A\A]A^A_�fD�n(D�g(D9�w�D�n8E��t�G8��t�1��N98O9u�H�|$����L�w0H�sI�~H��A��H����A8�u��E�H��H��M�<��2�CA8Fu<M9�tqI��(I�~H�sH��(H����H����8�uH��t	����u	�A8Ft�1��6����>�����H��[]A\A]A^A_���f.��E�������D9����H�D$H�H0��H���D�������A���EA)�H��L�H��H��H���fDH��(�B��������H9�u����f���AUI��ATI��U�SH��H��H�JH�3dH�%(H�D$1��RI���Be��tH�t$dH34%(��u7H��[]A\A]ÐH�$1�I�4$H90t�I�MH�H�5�i1��@�������H��H��H��H�����/w(A�ȃ�L@�I�H�H��X�:���1�H���L�@I�HH�H��f���H�����SH���wH��<���H�C[�fD��AUATUH��SH��H�����/wm����HJ�L�!�SH�KH�3L���Ef��u8L�mA�}tVjH�KA�I��SH�3jL���7NZY��uH�E�@H��1�[]A\A]�@H�JH�AH�B�f.�A�E��wA�E뚃��A�E�O���H�E�AoEI�UH��H�PH�� ��vH���f�H�E�@H�E�@L�mA�E�?���D��ATUS�u�(�tDI�Ġ�H��1�I��$��@t1�oC@(�oK�@HH8H�@h�{(u��[]A\�@I��$�{��@t1�oS(P(�o[8�@HX8H�@h��[]A\�ff.�@����P���t��������H���SH��H���	��@t1�o@(�oK�@HH8H�@h1�[ÐAWAVAUATUH��SH��H��I��`�dH�%(H�D$1��FI��H�6I��HL��H�$�P�r]�����H�$1�H��t�B��u&H�L$dH3%(�H��[]A\A]A^A_��{���E�oEH�BH��H�EH�� �����E��E�DD�sL�;A�~��D��L��H���\I��HL��I�ƋCL���P�\��u#H�$�@t!HcSH�x H�3�Q���t
DH�$L������
���H�}�ׅ�E��E���f�H����H�$�����Z�f.���H��H��dH�%(H�T$1ҍVH�Ơ�H��H��hH���[���t
H�$�@1�H�L$dH3%(uH��������SH�à�H����H�����H�{�׀H�{ �΀H�{0�ŀH�{@輀H�{X1�1ҾxH�CP���1�1�H�����H���聀H��hH�ƀ�Yƃ�ƃpǃ�ƃ�Hǃx[�CS��SH�à�Hǃ�$����tE1�1ҾH��U[H�� �=H�€,Y1�H����H�X�ƃ�[�ff.�@��SH�à�H���L�H����@�H�{�7�H�{ �.�H�{0�%�H�{@��H�����H�� �dPH���[�����AVAUATUSH��H�� dH�%(H�D$1�L�l$��H�Š�L��H��D�`I��D��H�� ��Y��u,H�D$H�H���H�T$dH3%(uSH�� []A\A]A^�D��H����H�L$D��M��H�D$H��A�H��jH�� �>H�D$ H���ZY���D��H���H����ff.�f���H���H����ff.�f���H�������ff.���H�����p�ff.�f���AVA��AUI�Š�ATI��UH��SI��H�����@D�ptI���zh�O�<����Jh�x�Ao$�o`@(�AoL$H8�oUPH�o]XX#�ohk[]A\A]A^���AUA��ATUH��SH��H��I�Ġ�I��$�E��@D�htI��$�Jh�q�����rh�H�oE�oP@(�oMH8�oX[�@HH��[]A\A]�ff.���AWI��AVI��AUA��ATI��USH��H�à�H���O�H��Hc����~,H��H��H��H�RHH)�H�Lʈ�Qt��W����XtxD�ht�Ao@(�AoOH8�AoPH�Ao^�@�@XXH���Qh�r�����qh�P�o`A$$�ohAl$H��[]A\A]A^A_�D�itH�Ah��@t��Ao6p(�Ao~�@Hx8�@�oqA4$�oyA|$H��[]A\A]A^A_�D�itH�Ah��@t��Ao6p(�Ao~�@Hx8H���Vh�z�����~h�PP�@T�@H�|���f.���AUATUH��SH��H��I�Ġ�dH�%(H��$�1�H�t$L����{�;t]H�D$H����St
�{8��oECX�oM�CdKhH��$�dH3%(��H�Ę[]A\A]�@L�l$L���C�I��$Ƅ$�S�D$�Bh�D$$�D$8�H���D$T�Jh��I��$�D$ �CH�zXH�@H��H�8���I��$�od$L���ol$(�oUH�D$@�CL�BX�o]H�|$H�@I���@#kT$X�D$H\$h�D$d������L�l$L���s�I��$Ƅ$�S�D$T�Bh�D$�D$$�H���D$8�Jh��I��$�D$ �C@H�JXH�@H��H�8���ou�o}I��$H�|$H�D$@�C@H�rXH�@H��L��@t$X�ot$|$h�o|$(�D$d�D$H{Hs8�T��6�����f.���AUI��ATI��UH��SH��dH�%(H��$�1�H�\$H���f��ol$(H�Ǡ�Ƅ$�T�D$H�t$H���D$$�Bh�H�����Jh�AoE�AoM�D$ �od$�Ao$D$8�Ao\$meL$HT$X\$hH�D$x�	yH�|$H�����H��$�dH3%(uH�Ę[]A\A]���fD��������ATI�Ġ�UH��SH��I��$���@I��$�Qh�r�����qh�P�oP�@t)�oE@(�oM�@HH8�oX[[]A\�f.���H���SH��H���E��@t(�o@(�oK�@HH8[����AUATUSH��H�Š�H�FL�EPA�@(�u�uhH�z��H��[]A\A]�f�H��L�-ӹH��I��H�F��uNH�{tpH�EPM�D$L��H�5d[�@H�HH��1�[]A\A]��f�L�-+H��I����t�fDH�EPL�GL��H�5�Z�@H�H1��ֈH�{u�H���C��@t��@(�@HH��[]A\A]�fDH�OI�PH���@[H�5�Z]1�A\A]�{�ff.���AWAVI��AUI��ATUH��SH��I�Ġ�I��$�a�I��$Lc���H��E��~A�}���Ct'�E�u	����H�ChM�����C�CI��$�Bh�H�����Jh�C�ocA&�okAn�AoEC(�AoMK8�oUSH�o][XH��[]A\A]A^A_�f��@����H�H�ChM���o����K�f�I��$L��H��H�RHL)�H�|ˆ��������H�5�W�@1��%�������AUATI��UH��SH��H�à�H����H��A���j��@t+�oE@(�oMH8E�l$�@HH���PxD�`|�P|H�����H��H����D�e�EH���@t���H��[]A\A]�fD��ATI��UH��SH�à�H������@t*�U�@(�P0�@HH���K�A�L$H��H��H��H)�H�OHH�щBPH���M�B|H��HBp�����H���B|H��HBp�HH���o|H��Hop����EH���B|H��HBp�@�B|H���@t���[]A\�ff.�@��AUATI��USH��H��H�Š�H���y�H��A������@t-�o@(�oKH8E�l$�@HH��[]A\A]�ff.���AUI��ATI��USH��H�à�H���i�H���@t*A�E�E0H�����A�L$H��H�H��H��H)�H�OHH��H�Bh�E(�EHH���PxD�`|�P|H����H��H����D�e�EH���@t���H��[]A\A]�ff.���ATI��USH�à�H����H���@t*A�D$���E0H���$�A�L$H��H��H��H)�H�NHH�щBP�E(�EHH��A�T$�A|��H��HAp�����H���A|H��HAp�PH���o|H��Hop���EH���B|H��HBp�@�B|H���@t���[]A\�D��AUI��ATA��UH��SH��H�à�H���F�H����~H�H��H��H)�H��H�WHH�Dˆ�xtXtm�x�D�`t�AoE@(�AoM�@�@H8�@HH���Qh�r�����qh�P�oPU�oX]H��[]A\A]�DA��"�@���@��|�PtH���Qh�r�����qh�P�o`e�ohmH��[]A\A]�ff.�@��AUI��ATA��UH��SH��H�à�H���&�H����~H�H��H��H)�H��H�WHH�Dˆ�xtXte�X�D�`t�AoE@(�AoM�@H8�@HH���Qh�r�����qh�P�oPU�oX]H��[]A\A]�@A��$�@�ƒ�z�PtH���Qh�r�����qh�P�o`e�ohmH��[]A\A]�ff.���AUATI��UH��SH��H�à�H����H��A���j��@t+�oE@(�oMH8E�l$�@HH���@t���H��[]A\A]�f���AVA��AUI��ATUSH��PH�à�dH�%(H�D$H1�L�d$H����H���D$���H���@t*E��uvL��H���nH�|$H�t$�\�A�UH��H��H��H)�H�QH�L$H�Q�PP�E(�EHH�D$HdH3%(u=H��P[]A\A]A^�f.�1�L��1ɾ���8L��H���m�d����%��D��USH��H�à�dH�%(H�D$1�H����H��H�����mH�<$H�H��t2f.�HcJH��H��H��H)�H�NHH���h0H�H��u��S�H���mH���@t���H�D$dH3%(uH��[]��k��ff.���S�_��u��t[�@1�H�5WQ�@�~��u�H�5qQ�@1�[�~ff.����S1�1ҾxH��@dH�%(H�D$81�H��H���c�H�Ǡ��8H���lH�D$8dH3%(uH��@[���@��AWAVAUATA��USH��(I�Ơ��t$H�t$L��dH�%(H�D$1��SlH�|$L�?M����I�oH����I�����/L�-|\�;��oEH���oMH�oU P �o]0X0�oe@`@�omPhP�ou`p`H�EpH�CpA��w!D��IcD�L�>��fDHcD$�Ct	H�ChM�?M��t3I�oI���s����Ct<T�����CtM�?M��u�fDH�|$�6�L���kH�D$dH3%(��H��([]A\A]A^A_��Ct<Ttp���Ct�z���D�Ct�l�����Ct<Tt(���Ct�R���DƇ�I�����D�{Hu�1�H�5M�@�g|�Ct빐�{Hu�1�H�5�L�@�G|�Ct�n���fD�{H�
���1�H�5�L�@�|�Ct�����ff.�f���AWAVI��AUATI��USH��8H�<$dH�%(H�D$(1��:�sI�Ǡ�1�����I�����I���D$��A�<$�L$I����A�Et&�Ao$AM(�AoT$AU8�AoA]H�AofA�EA�EAeXI���Ah�p�����qhA�EH�$�Aom(�Aou)4$pH�D$(dH3%(��H��8[]A\A]A^A_Ð���^���Hc�1�H��H��H)�H�ň�������H��x9��/���I��H�xHH߃u�A�D$9Gu��Gt<U�<T��L$��������H�5�J�@1��cz�L$�DI�Ǡ�H�t$ L���hH�D$ H���r���H�H���f������T�Y����x8�O���A�V9P@�B���I���z��@H���@tP�@I���Bh�H�����Jh�C�C(A�FL�sI��H�@H�AXH�ЋpH�8�s8����CDH�C0�CH�CT���������oAE�oGAE�oG AE �oG0AE0�oG@AE@�oGPAEP�oG`AE`H�Gpf�I�Ep�GtH�G�G$H�G<�GDH�G\�Gd�GH�G(�GGG,GLI���I�L��I���Gt�A�Et��AoAE(�AoFA�EHAE8A�E�oGH�$�oG)$@�c��������oAE�oGAE�oG AE �oG0AE0�oG@AE@�oGPAEP�oG`AE`H�Gpf�I�Ep�GtH�G�G$H�G<�GDH�G\�Gd�GH�G(�GGG,GLI���@�L��I���Gt�A�Et��AoAE(�AoFA�EHAE8I���Ah�p�����qhA�EPA�ETA�EH����������USH��H��H�Š�H�����@�@t5H���Qh�r�����qh�P�o@�oHK�@(�@HH��[]�fD��AUATI��UH��SH��H���z��H�zuyL�/���H����CL�kH���%��@t6�Ao$@(�AoL$H8�oPH�o[HXX�@H@E�o`eH��[]A\A]�@H��[]A\A]����H���H�����@t7����AUATI��UH��SH��H���>t|�oI�Š��oNOI���a��@t8�o@�oSP�oX(�oc`8�Ao,$hH�Aot$pX�ox{H��[]A\A]��I�Š�I�����@�@t5I���Qh�r�����qh�P�oP�oX[�@(�@H�E���}�4���H�}�f�&���I�����@t7�o#`�okh�oH(�oC@8�oupH�o}HxX@����ff.�@��S�������t����[�H���H��L�@H�@P�P�H��H��H)�I���Pt��g@�ƀ�:��@�t@H��x�Pt��:@�ƀ�g��@�u��t�xu/�_9Xu'�H[�D�x(u�_9X0���xtH��xI9��a����Pt��Qt҃xu�_9Xu܀�Dt�[�DH���H��H���:��@tF�o@(�oK�@HH8[�@������H��[�dH�@h[�f.���UH��SH��H��H�GH�V��t��uH��H	у�H��t?H��	�[]�fDH��H1р�t�1�H�5F�@�sH�EH�S��1�H�5'F�@��rH�EH�SH��[]	��ff.����UA��H��AWI��AVAUATSH���������^dH�%(H�E�1�H�FH��(����G��������~I�Ơ�I�@I�VP�B(���I��H�������H��I�@A�ă���uMI�VP�B(�uCM�EDH�RH�
�
H�5�E1��D�� ����rD�� ����f�I�Ơ�E1�I���{D����������I�GL�����_��H��(�����H���:A����@L��Adž�I�ʼn� �����a�H��(����� ���ƅ���D�����D	�����H���������A��������E���HDž���I�FPH����o�I�~PH��L��E������A��M���OjH��0�����L���w_AX�����H��0���H�����H��`���H�� ���I�FP�P(A��t
���P(I�FP�P(D���A��DD���P������yHc�����HH��H��H��H���H)�H���H9�tH��H��$�H9�u����H�T$H���I����HDž�HDž����U��I���E�����L���@t�H�x0I���@(���H��A�D$dA�T$8M�l$PI�t$0L��M��A�D$HA��A�\$XA�D$`I�D$h�I��j�XH��0���ZH�����A���H��`���H�� ����5H������(I�~Dž0���HDžP����
]H�� ����xI�~ Džh���Dž������\I��H��t8I��H���A�� I�����IdžAdž H�E�dH3%(��H�e�[A\A]A^A_]�fDA�ă�L��(������b������DH�__constrI9E��A��uI���H������~L�����@L�����A�������I����������@th�Xp�@(�@H���fDI�~PH���H��(��������H��0���H��0H������-6H��`���H�� �������L���o��I�FP�@H��(���H�5b>H�P1��m����H�RH��(���1�H�5�@�@L�����D�� ����TmL�����D�� ���I�@���D����I��I�FPH�p�����L���j5;����tb���������
���������A�}__ca�l���fA�}ll�_���A�}�T���I�FPI��H����Q����Hc����L��L������u�I�FPH����(���I��H�������DH�__destruI9E�H�__tostriI9E����fA�}ng����A�}
�����I�FPI��H������f�H��0���H�����H��`���H�� ����8�������k���A�}__ge��A�}__se�O���fA�}t�C���I�FPI��H����@���H)�H�L��P���f�A�}uct����I�FPH������H�PH�5E?1���YkI�FP����fA�}ct���A�}
����I�FPI��H�������H�__cloneI9E��I�FPI��H������DI�FPH�����H��(���H�xH��0�/3������H��`���H9�0��������H��I�FPH��(���L��j�����M��A��H�x0�Y^���@H�__unsetI9EuI�FPI��H������H�__issetI9E����I�FPI��H�������DfA�}t�C���I�FPI��H�������x�����H��H���H���U��@t��@(�@HH���ff.���AWI��M��AVI��AUM��ATA��USH��(H���D$`H���D$H�t
�G�(H�T$L�T$���L�T$H�T$H��H���@(D�ct�AoC�AoJK�oS(�oZ[8A��@��H���P(�P,�CHH��1ҋA(H�y0H�L$H�4�H������H�L$H�A0H��A�uI�}�P(H�@0��H��H�,����H�EA�E�E�f�E�D$�EA�?�$�EA����EH�E�EA��@��KH��([]A\A]A^A_�DA�y����A�y����I�A�8this������x�����H�t$�@1�H�5z8H�T$��gH�T$L�T$H���u���DI�GH�EA�G�EA��@�g���A�F����<uI�~H�5�
����tzH�5�;�@1��g�*���f��Ao&cH�AonkX�m����H�E�E��@A�F��t<u+I�~H�56
����u'��E����<�����<	�����H�5Y;�@1���f������ATI��UH�Š�SH��H���?��@tn�Ao$@(�AoL$�@H8�@HH���Qh�r�����qh�P�oP�oX[[]A\�f���ATUH��SH��H��t�oH���oNO�EH�{1�C�pD�`���HcS�::H�Cf�HcCH�SH�uH�|�E�PHc����H�}H��t���D�c[]A\�ff.���AWA��AVI��AUI��ATI��USH������H�����?��H�Š�H����H���Ct=�C(H���BhH����H�����Jh�C�C�oCA�oKAN�CH�SI�EH�ChH��[]A\A]A^A_�f.�H�z��I�L$H�Š�H��H��H��H)�H�JHH���k���H�Š�D�D$H���@�D�D$H��E	��-���A�<$�"����@t<�Ao$P(�Ao\$X8H�������H�5!9�1��ed�[�����AWD��AVA��AUA��ATA��UH��SH��(dH�%(H�D$1�H���H�t$H����vRH�D$H�A��C��H���H�C0H����D9s(��A�V�H���D�<��1Ҩ��A��B��A��A�TA��j�������E��������1�H�5�9�@�T$�vcA��B�T$��A��C�^A��j� A��B���D�C8<�e����E��a�A��B�\����U��u��u@�A��#D1�A��B�.����E���������C�E��t	���A��B��A�CH���H����H���#H�@h<D�ht�oE@(�oMD�pP�@HH8H�D$dH3%(�*H��([]A\A]A^A_��H�����su*H��tH�SH��t	�;�yH�5�7��1��bH������1�H����T$H���d�A��j�T$�:���E1��fDA��B�H���A�AH���%��
���H�5�7�@1��aH���$1�1�A�B�E����H�@h=�����E��.H����T$E1�H�����T$H��tA	�A��L�hhA�j���@D��A�jH�Hh�{���fD1��A�C���:���f�A�1�1��T$��H���H���:��T$�z����A�A���DH�C0H��tWD9s(rQA�v�H�4��D��e���H�5O5��1��k`�k���fDD���A�B�������C8�����E1��R��������p������a������X����{������USH��H������H�Š�H���x9���G�u	���c1�1���H�����H�}�5OH�.���H�} � OH�����@t>�oX(�oc`8�S��u��uqH�@h�@HH��[]�@H�Š�H�z���H�}�NH�����H�} �NH�����@t>H��tn�o@(�oKH8�@HH��[]�1�1���H����H�}�RNH�K���H�} �=NH���!��@t>H������H����@(�@H�oH�RP0H�P@H��[]��1���$�H�����H�}��MH�����H�} �MH�����@t>�o+h(�osp8���@��H���SH��H�����C[���ATI��USH��PH�à�dH�%(H�D$H1�H�l$H�����H���D$��1�1Ҿ�@t*H���@(�@H�v��8H��H���6KH�t$H���KH�|$H�t$�z�H���^�H��IcL$H����D�H�D$HdH3%(u	H��P[]A\����f���ATI��UH��SH�à�H���hP�;���EH�����tl��H�qHH��H��H)�H���@4H�����H���MH��H�H��H)�H�NHH��H�BhH���@t���[]A\�f.�A�T$H�yHH��H��H)�H���@4H���V�H��A�L$����AVAUI��ATUSH�à�H����A��H������U���L��1�Ic�$�I��$�H��賻��Hc�I��$�H��H���D�4�A�mH���@t���[]A\A]A^�D��AVI��AUI��ATI��UH�Š�SH���x�H���Å�~Hc�H��H��H)�H�WHH�Dˆ�xtmtO��@tk�AoE@(�AoMH8�Ao$PH�Ao\$�@4XXA�^[]A\A]A^�f�H�Hh�H���ff.�@��UH��SH��(H�à�dH�%(H�D$1�H���H���D$��H�t$H���@t*�@(�@H�HH�|$H�t$肱H���f��MH��H�H��H��H)�H�NHH��H�BhH�D$dH3%(uH��([]�������H���SH��H���e��@tl�o@(�oK�@HH8[����USH��dH�%(H�D$1��?t!H�D$dH3%(u~H��[]�f.�H�G@H���H���H��tɿH��H��H�����(H���H��XZ1�E1����wH���H��H��p3[A�H�����r������ff.����7����AWAVAUATUSH��H��H�dH�%(H�D$1�H����H��8H��@H��8�nH���HH����"H�����H�����H�����H�����H����dH����>H��P�H��X��H���tHH���H��tVH���H��t
�B��H�D$dH3%(��H��[]A\A]A^A_�H���H���H���H��u�H��H��0L�c0�H��H�5m/������D�kL�sA�}����D��L��H���L��I�ŋCL��P��!����L������H�CH���H����?���DH��XH��X���DH��PH��P����DH���H������DH���H������DH���H����c���DH���H����=���DH���H�������DH���H�����DH���H�������DH��H�����DH��@H��@����DH�JL�H1�H�5G,H�WL�C��U�
����H��L��E1�A��jH�L$�H�5�-�HY^H�<$����t����H�CD�pL�xA�~�+���D��L��H����H�{H��I�ƋGL��H��0�P����u
H�$�A u
L�������
���H���CL��E1�jA��L��P�XZH�<$�k��������@��H��O��u'H��O��u��H��#H���HE��D��AVH��AUATI��UH��SH��H�J�RdH�4%(H�t$1�H�0I��]�!����iH�UH�$�B(�u{�EtuH�H H���(H�qH9�t_�@
t0H��� H�IL�AH�HH�R1��@H�5�*�=TH�$��t-H�UH�HH����H��"�����oD�`��D1��tIH�PL��"A����H��tL�BH�HH�EH�x"H��tH�PH�5�*�@1��SA��tM��uHH�$L�F"H��t
H�PH��tL�BH�HH�EH�%"H��tH�PH�5�*�@1��]SA��A������L�$$A�L$E���I�D$ H�`���!uH��8��H��L��貸��A�ń���H�EL�ML��!H��tL�@I�D$I�L$H�z!H��tH�PH�5�*�1��R�PD��A��%A9���H�EL�
2!��L�5~#ME�M��H��tL�`���E���H�$I��H�rH�JH�� H��tH�VH��M��1��@AVH�5�)�*RL�d$XZE���������A�L$H��I�l$ �C����H��L��螷��A�ń���H�CL�KL�� H��tL�@I�D$I�L$H�f H��tH�PH�5�)�@1��Q�?@H�HH�R1�H�5?(�@�}QH�$��D�`D1��������i���f�E1�H�t$dH34%(D���H��[]A\A]A^�f���A�t�A�L$(�DH�] �E ��H����H�C�@(�tI�\$ ���DH��tL�BH�HH�EH�|H��tH�P1�H�5�'�@�PA���M������DL�$$�Y���E���s���A�L$�K����I�\$ H���g����:���DH��HD��]���@H�p�����H�HL�A�������ff.���AUATUSH��D��hE������hH��I��H��`�}A�DH�4���1����H��`A�}�H��f�I��$`L�:��t!L;t/H�H1��
H��L9A�t��9�uh�J��hL��H��H���t2H��`�f�H��[]A\A]��P��H��`�z���@L�-�'�
�D��9�hv�H��`D�cH��E(�uH��HH��t
H��H��Ѓ��tH9�u�H�UH�5'�1���N�H�KH�UL��1���N����AUATUH��SH��H���F(�G(�t���[�@�+H�kH��H��L���]���H�{xH�uxE1�I��p3[A�1�L���[�H��8EtH����qH��P1�L��H�5�����W�I��H�*���H�s���H����8HD�H���L���E1�A�1�H��XH��XL����H�u0H�{0I��L������H����lH����C(�t�;tH��H��[]A\A]香fD�� �C(H��[]A\A]��H�MH�S�@1�H�5B&�MM����H�NH�W1�H�5�%�@�%M�E(���ff.�f���AWAVI��AUATUS1�H����hH�GH�t$A��H��t��hM��XI��`����1�E1�����D9�vAI��`E��D��H��H�<H�7H����E�GH;t$u�D9������D9�w�����I��`D9��H�QL�����L��A��hH�T$H��L�L$�H��p3[I��X��H�D$I�~0M��L�+�����H���H�p0�H�\$A�F(���L9��-H�t$L�����H��[]A\A]A^A_Ð��H�tA��hD)�H���U��E��A��h����fDH�NI�V�@1�H�5�$D�D$�pKA��hD�D$����H��HH���b���L��H��Ѓ���Q���H�KI�V�1�H�5�#�K�1����A�uH��A�>tr1�H�����A��hI��`���DH�L$L��1�H�5ʲ���H��[]A\A]A^A_�fDI�VH�5=#�1��J���@H�����A��hI��`����D��AUA��ATI��USH��H��(dH�%(H�D$1��t�tH�5�#�@�2J�S8H�s0H�L$L���~H���CXH�sPjH�L$L��E1ɍPA���x�^_�Ń��t?H�D$1�H�@@�H�D$Hǀ�H�|$dH3<%(����H��([]A\A]�A���CXH�sPH�L$E�L��A��PA��@����u!H�D$H�SP�8tH�5~D��1��gI�H�SP��HP��t�H�pHH���D��1�D�FpH�5�"�8I�b������ff.���ATA��UH��SH��H�� �W8H�w0H��dH�%(H�D$1�H�L$�G�����H�D$H�L$E1�H��H��A�H�H�D$�@ �CXH�sPj�P�'�ZY���t@H�\$�C(�t%H�|$dH3<%(H��upH�� []A\�f�H��舔H�\$�̐H�D$1ۃh E��u�H�PH�5h�@1��9H��H�S0H�5�!�@1�1��H�}������ff.�f���AVA��AUI��ATI��UH��SH���W8H�w0L��dH�%(H�D$1�H���"�����H�$H�A�D$(�ujL��H������H���C �EXjH�uPE1�A�H�L$�PL����ZY���t~H��H�\$dH3%(��H��[]A\A]A^�f.�I�L$H�S�@1�H�5)!�$G�u����1�E��u�H�UPH�5)�@1��F��H�SH�51��@��F�k H�{0�LH�{x�CH����7H���+H��X1���*��������AUATUSH��I�Ġ�dH�%(H�D$1�I��$H�PH�@P�H�H��H��H)�H���Ct<it�Q�H��x�Ct<iuDH9�r�H�5e�@1��F@H�D$dH3%(��H��[]A\A]�f���u<w�H��$��Hc�H�>��DH�k�E1��Et<���<�u��u�H�}�H���m���t�H�$I��$�H��H����H���h���I��$H9hHsb�}�mu\�}�v	H�}��]6�E�f�H�E��E�H�E��E��E��E��E�E�E�f.�M��$E��uLH���+��C(�CH�Ct�0�I��$�H���[�����������M��$H�݋U8H�u0E1�1�L����}Dv	H�}0�5�}dv	H�}P�5f��EtE,H�E<�EDELH�E\�Ed�E(�EH�,���@H��A��i���I��$�H�����H���������芿�f.���AUATI��USH��H��H�Š�H���H��A���J��@t/�;taH���Qh�r�����qh�P�@�o@(�oK�@HH8E�l$�oP�oX[H��[]A\A]���o#`�okh�ff.�f���AVI��AUI��ATI��UH�Š�SH��H��蕩�AoE�AoMK�@t4�oP�o[X�Ao$$`(�Aol$�@Hh8H����A�NH��H��H��H)�H�NHH�щBP[]A\A]A^�ff.����AUATI��USH��H��H�Š�H��艩H��A���ڨ�@t.�;taH���Qh�r�����qh�P�@�o@(�oK�@HH8E�l$�oP�oX[H��[]A\A]���o#`�okh�ff.�f���������ATUSH�à�H���PxD�`|�P|H���ĨH��H��襨D�e�EH���@t���[]A\�D��AUI��ATI��UH��SH��H�à�H��趧�@t,�oE@(�oMH8A�U�@H�PPH��A�L$�B|H��HBp�����H���B|H��HBp�HH���o|H��Hop���EH���B|H��HBp�@�B|H���@t���H��[]A\A]�ff.�@��ATA��UH�Š�SH��H���ߦD�`tH���R|�@(�P0H��t�o@H�oKHX[]A\�@�H�@P�@`f�Pd�@H[]A\�@��AT�(USH��0H�à��odH�%(H�D$(1��oOH��H�D$ ����H�{)$)L$�-H���PxD�`|�P|H���ĦH��H��襦D�e�EH���@t���H�D$(dH3%(u	H��0[]A\��̺�ff.����UH��SH��H�à�dH�%(H�D$1�H��H�{�p-H�$�x �t(H���z�H�$�@t*�@(�@H�R �P0�}H��t+���MH��H��H��H)�H�NHH�щB0H���o|H��Hop趥�EH���Q|H��HQp�BH��H�<$�B|H��HBp�@�B|��P���t`��tCH�{��,H���@uH�D$dH3%(uhH��[]�fD�������v�H���/��H���l�H�<$�@t1�o@(�oO�@HH8��m����@����AVI��AUI��ATI��USH��@H�Š�dH�%(H�D$81�H����H�t$H�}H����+H�D$�x$�uH���Qh�r�����qh�P$�Ct0�P$�C�S�oC(�oH�{(K8�AoSH�Ao^[X���oc�okH��)d$)l$ ��H�����b�fot$fo|$ �@t+p(x8�@HA�]A�<$t-H���̣A�L$H��H��H��H)�H�NHH�щB0H�D$8dH3%(u+H��@[]A\A]A^�fD�{D�N���H�{0�%.�@����˷�ff.���AUATI��UH��SH��H�à�H���9�H��A��芢�@t*�@(�@HE�l$�UH��H��H��L�GHH)�I���@t<*t7<+u$���MH��H��H��H)�H�NHH�щBPH��[]A\A]�@賢�MH��H��H�~HH��H)�H�׉B0H��[]A\A]�f���AVAUI��ATI��USH��H�à�dH�%(H�D$1�H���G�H��A��蘡H��H�{H���i)�Et*�E(�EHE�uH����H�$�B A�<$t!A�L$H��H��H��H)�H�NHH�щB0H�D$dH3%(u
H��[]A\A]A^����fD��ATI��UH��SH�]PH����H���H��t�H H����@�H���H��t�H@H����@��H���H��t�H�H����@���A�����|�C(�uSA�<$u
��h��taH���H�{��H���E��@t��o��@(�o��@HH8��h��tHǃ`ǃhH�EP[]A\�fDH�HH�S�@1�H�5��U9�J���H�HH�S�@1�H�5��59����H�HH�S�@1�H�5J�9������h�������,���ff.�f���UH��SH���G��������H�à�H���GP��t*�P�H��H��H)�H�WHH�€xtmuH�@hH���
��@t��o��@(�o�H8�oUPH�o]H�KPXX��h�r��h��H�phH��[]�@H�5��@1��%8H�à�H���DH�5������AWAVA��AUI��ATI��UB�l	S�}D��Hc�H���D$PL�$H�T$��tV���H�t$H��I��tSA�A�VI�Hc��@��Ic΍SH�4$I�|Hc��)��M�}A�,$H��[]A\A]A^A_�f����H�t$I���H�R�7��H�=�yH�����'�����H��?upSH��H���������D�V�L�O1�D�F��DH�pL9�tH��|��u��A9�~)Hc��<;u L�L�
1�H�9H��[�f�H�91��H�L$H�5
1���6H�L$�����H���H�L$H�5���D��AVAUATI��UH��SH��L���H��@H�JH�3dH�%(H�D$81��RA�$�L�D$L��L�m�����H�T$A�<$�
��1ȨtML�H����H�tI��I�MH�5�APLDʃ��@�uHE�1��5H�T$A�<$A[A^�
��t���
H�T$A�<$�
�Ή���%9�������1����1���%�EH�t$H�|$H��D�JL�B�H�^���P�1���Y^H�D$��
I���EA8EtI��P�D$H�t$H�L$�P�S�����H�|$�E���G��1������A�D$I�L$I�}xL�D$0I�t$�P���u`H�D$0H��xE1�1�H��@H�D$�xH�p�WH���t�A�D$I�L$H��I�t$jA�jL�D$@�P�k�_AX��H�\$8dH3%(��H��@[]A\A]A^�f.�L�l$L��M������ulH�D$�1��D��H��L�%�M�mLD����H��H�UM��ATH�I���@1�H�5��3AY1�AZ�[���fD�SH�KjA�8AUH�3M��L����XZ�Et9H�\$�sH�{����H�CH�D$� ����H�D$�1�����H�|$�6�����@�ے��1������D$H�t$H�}xE1�1ɍP���
���H�D$H��H�L$ �xH�p�WH���2�H�L$��H�D$H�uH�t$ H�6�~t�zuJH���B�xE1�H�pjA��WH����XZE1��D$H�t$1�H�ߍP�m��}������pH�xH�L$(H�T$0����I�UH�L$(1�L�EH�5�
�@�-2H�L$H�D$H��n���ff.���AUI��ATA��UH��SH��H�à�dH�%(H�D$1�H�CP�@(��$A����H�uH�{PA�����EH��H��P����uH�$���������M����I�U�AoEH�PL��1�M��t�� Hǃǃ H��H�{P�UE��QH�uH���X�H�}XZ�ݐ��H�D$dH3%(��H��[]A\A]�fDH�WH��@1�H�5
��0H�uH�{P�����H�5��@1��0����H�5q�@1��0�����1��@f�H����fDH�CPH�M�@H�5�H�P1��Y0�����ϫ�ff.�@��UH��SH��H��dH�%(H�D$1��~	���蜏��H�UH��H���oEH�sH�D$E1�H�PH�Š�A��C�PH�EPjH��X�D�ZY���tM�{v	H�{� H��H��t�]���HDžDž H�D$dH3%(uNH��[]ÐH�<$�'���H�EPH�KH�5�@H�P1��H/�fDH�5��@�//����襪�D��AVAUATI��UH��SH��H��I�Š�dH�%(H��$�1�H�t$L���=H�D$H�xuL�0I�~��������L�t$L����I��L��Ƅ$�U�D$�ol$(�BhH�|$�D$$�H�����Jh�Ao$�AoL$�oU�D$ �od$�o]kD$8#L$HT$X\$h�c�H��$�dH3%(��H�Đ[]A\A]A^�@I�~@迍��A�F8�ouA���AvX�o}��PA~h<w$H����Hc�H�>��AƆ�U��Aov3�Ao~({�e����AƆ�a��fDAƆ�^��fDAƆ�[�fDAƆ�X�fDAƆ�R�����SH��@fo�dH�%(H�D$81��D$(H�OFFSET__)D$H�D$ �!���H��H����H�t$H�|$I��H�T$H��A���j���XZ���H�|$E1��HcЋD$�p�<H�|$�d���H�D$8dH3%(uH��@[��	��f����ff.���H���H��� H�x0�$@��USH��dH�%(H�D$1�H��tQH�Š�H��H��H�}0�{H�$�o�oHKH�}0�H�D$dH3%(uH��[]��H�Š����R��f���ATI��UH��SH��H�à�dH�%(H�D$1�H�$H��賒A�D$H����H����@tD�@H���Qh�r�����qhH��P�oE�@(�oM�@HH8�H�D$dH3%(u	H��[]A\�蓦���ATE1��I��USH��1�H��0dH�%(H�D$(1�H��H���	��H���!���H�Š�H���ޑA�L$H��H��H��H)�H�NHH�щBPA�T$H��H��H�qHH��H)�H���o@�oHKH�D$(dH3%(u	H��0[]A\��Х���AUATI��UH��SH��H��������uxH����I�Š�I��菐�@tc�@I���Qh�r�����qh�P�o3p(�o{x8�Ao$�oP@H�AoL$HXU�oX]H��[]A\A]��H��t{1��4���o#e�okm�EH��[]A\A]�@H�r������u�H�à�H���Џ�@tc�@H���Qh�r�����qh�P�@(�F���H�r跓�����\����Ao4$u�Ao|$}�E�>������ATI��UH�Š�SH��H���O��;�ƒ�A�Pt�o@(�oK�@PH�@h<�@HH8H�����
H�=�@t<H��H�ËBh�H�����Jh�C�C�Ȋ���oS�C8
H�C0��C@f�CD�C(H�Ch�CHA$�o[[]A\$A\�ff.�f���AVI��AUI�Š�ATI��UH��SI�����U��@tGI���Nh�Q�����Vh�H�@�o@A$�oHAL$H��t7�oUP(�o]X8M��t'�Ao&`H�AonH�XhhX[]A\A]A^��@(�@HH�Xh[]A\A]A^�D��AUI��ATI��UH��S��H��H���H��蓍�@tH�AoE@�AoMH�Ao$P(�Ao\$X8H��t!�oe`H�omH�XhhXH��[]A\A]��@HH�XhH��[]A\A]�f.���ATI���UH��SH��H��dH�%(H�D$1������oEH�UH�$H�PH�����{	w=�SH�
{Hc�H�>��f�H�sH��I�|$A�E1���Q�H�D$dH3%(��H��[]A\�@�H�H�s�CI�|$D��PI��D��A��-��HЀ�	�}��L�L�A�9up��v<0tgL��L)�H��[D��I�KA��0Mc�I9��8A�CD�X�A��	w4@��0O��H��H�N�PI9����D�X�A��	v�f�H��H��E1�A�j��Y^�{����H�{�����H�5 �
�1��$����H��H��I�|$E1�j�A�H�5y�
�H�XZ����H���H,s���f�L�^�F����I�|$H��A�1�E1������m���fDA��-t-M���)���H��A�E1�L�ֹ���$���A��-u�L��H�������I����讟�ff.���USH��dH�%(H�D$x1�H��tnH��H�������o�oKH�} H�à�)$H���)L$�}H��H�{X�{H����@H�D$xdH3%(uH�Ĉ[]�f�H�à������f���H��dH�%(H�D$1�H���H�t$�D$H����xzH�D$dH3%(uH���讞�ff.���SH�à�H����|H����@[�ff.���SH�à��8H�sXH����H����8H����H�{X1�1Ҿx�yH���1�1Ҿ�y[�
���f.���AWAVAUI��ATI��USH��XI�Ǡ�dH�%(H�D$H1�I�oXH���]L�vH�]0H�����fD�@tQ�@foL$ �@I��foD$0�Qh�r�����qh�PH(�oH@8�o@�@H�@dHcS�@`H�PP�@eH�)L$ )D$0H����I����H9]0�m����Ao$�Ao\$A�$)T$ )\$0��t!3��uA�|$vL��H�D$�)H�D$�@tbH�@h������t��u��@tQ��foL$ foD$0@MhH�}0H�]Ex�;zH�UhH��L�����L���D���H�mH�������I���H�\$�zI�X�y�Ao$$H��I���Ae�Aol$Am�H�D$I����o0A���oxA���o` A��H�@0I����H��I����H�D$I����o(AoX�opAwh�ox AxH�@0I����H�D$HdH3%(uH��X[]A\A]A^A_��y��f���AUATI��UH��SHc�H��I�Š�I���F��@�@tI���Qh�r�����qh�P�Ao$�oP@(�AoL$�@HH8H�XhU�oX]H��[]A\A]�D��ATUSH���p����;tKH���H��H�_H�T�H�H��H��H)�H�Tӈ�Bt<`��<a��<_��[]A\�f�I�Ġ�I��$�l��@tJH���@(�@DI��$�CH�JXH�@H���@�E8I��$�CH�rXH�@H��H�8辀���EHH�E0�ET�E[]A\��BtJ[]A\���BtL[]A\���BtK[]A\����AVAUI��1�ATI��UHc�S���L���G���A�<$tpH���H��H�_H�)�H�H��H��H)�H�\ӈ�Ct<Z��<[��<Y���C�oCH�khAE�oK[]A\AMA]A^�@I�Ơ�I�����@trH���@(�@DI��A�D$H�JXH�@H���@�C8I��A�D$H�rXH�@H��H�8�m���CHH�C0�CTI���Bh�H�����Jh�C�A���D�Ctr�3�����Ct��#�����Cts����ff.�@��AUI��ATI��UH��SH��H�à�H���փ��~)H�H��H��H��H)�H��H�QHH�Dˆ�xtm���}��H�����@�@t�H���Jh�q�����rh�H�oE�o`@(�oMH8�AoUPH�Ao]XXA$$�ohAl$H��[]A\A]�f�H�Hh��}�o���H�5��@1����W���fD��AWAVI��AUI��ATI��UH��SH��H�à�dH�%(H�D$x1�H��E���D�z蟂1���ED������8���A��H����E1�	ՋGP��@���k�^�A�EH��讁�@�@tMH���Qh�r�����qh�P�Ao�oP@(�AoNT$�oXH8�@HH�hh\$E���?H���BP�H�H��H��H)�H�JHH���op(t$(�ox8|$8H��xH�{ �[H��蟁A�D$H�����@�@tNH���Qh�r�����qh�P�od$H�@h`(�ol$�@Hh8H��蛀�@t��@(�@H�@H�D$xdH3%(��H�Ĉ[]A\A]A^A_�@�P�H��H��H)�H�WHH�€xtU�v����x(�l���H�HhA�H���U�����D$(���蛀E1��E1�H���$������f���AWM��AVI��AUI��ATUSH��H��H�Š�H�T$�RH��dH�%(H�D$x1�H��H��H)�H�VHA�8L�$��mI�L$h�9t
�A �@A�G �UI�|$��QI�L$h�S�H��H��H��H)�H�VH1�H�L�h�AoD$)D$0�AoL$)L$@�Y���H�T$0L��1��
���A�>H��t|H�L$H�@HH�\$�Q�rH��H��H)�H���@�@H���Vh�z�����~hL��H�߉P�o`H�T$P)d$P�oh)l$`����H���H���H���PxD�`|�P|H���H��H����~D�c�H���@t���H�D$xdH3%(�6H�Ĉ[]A\A]A^A_�@�sH��H�PHH��H��H)�A�uH��H��H�ChH��H)�L�,�H���L9���f�H�t$PH�} �H�D$PH�\$L��H��H�T$0�@(�AoT$)T$0�Ao\$)\$@���H���A����r���@�{HuH�ֿ@1���H�`�@�ktI9��{���H��x�{tTu����H�5���@1�����I��M�����DH�5���@1��m��������ATI��UH��SH��H�à�dH�%(H�D$1�H���|�@t*�U�@(�P0�@HH���'}A�L$H��H��H��H)�H�NHH�щBPH���|�MH��H��H�~HH��H)�H�׉BPH���B|H��HBp�U�PH���o|H��Hop�|H��H�{ �EH���B|H��HBp�@�B|��H�<$��~��H�{ ��H���@t���H�D$dH3%(u	H��[]A\�衐���H����H��xH�x@����UH���H���SH��H���wH��8�H�}��t8�}w�{wH��[]�D��{v�H��H�{[]�fD��H����oE�xH�UH������UH��SH��H�à�dH�%(H�D$1�H��H�{@�H���T{1�+EH��x��9�tH�$�o�xH�@H���H�D$dH3%(uH��[]��j��f.���UH��SH��H��H���H���=z�@tO�oE@(�oM�@HH8��CH�CH��[]����USH��H��H�Š�H����y�@�@t9H���Qh�r�����qh�P�o@�@(�@H�oHKH��[]�fD��H���SH��H���uy�@t:�o@(�oK�@HH8[����AUATI��UH��SH��H�à�H����yH��A���y�@t+�Ao$@(�AoL$�@HD�hP�oPHH8U�oXX]H���@t���H��[]A\A]�D��AVI��AUI��ATI��UH�Š�SH���xH��H���)yA�T$H����H��H��H)�H�VHH�ʉAP�C�CtH���Bh�H�����Jh�C�AoE�oSC(�AoM�CHK8A$�o[A\$H���xA�FH���w�@t*�@(�@H[]A\A]A^�f.���AWI��AVI��AUI��ATI��USH��H�Š�H���w�@t�AoH��@�AoNH�AoUP(�Ao]�@HX8H���wA�OH��H��H��H)�H�NHH�щB0�ocA$$�okAl$H���@t���H��[]A\A]A^A_�fD��H������u�H��H����v�@te�@(�@HH��Ð��AVAUATUH��SH�� dH�%(H�D$1����1�1���������H�à�H���nH�{PH��tfH���@�m[���H��H�{���H�EH���G�H�{ �>�H�D$dH3%(��H�� []A\A]A^�DH��I��L�hL���rz�L��L����I��F����D$A��
�m���H�__autoloH9$�Y���fA�~ad�L���A�~
�A���H���x(�0���H���
H�5���@1��������i��f���H������u�H��H���8u�@tf�@(�@HH��Ð��AT1�I��1�USH��dH�%(H�D$1�H�$�@����ۏ��H�à�H���xuH����H�H��H��H)�H��H�QHH�,ƒ}H���}tRuG�EtpI�D$;H��H������!���H�D$dH3%(��H��[]A\�@H���Tt�@t;�Ao$@H�AoL$H�@hHX�@(�f.��}d�i����}X�_���H�}P��H���
������=���H�5��@�Y
�'����ψ�ff.�@��UH��SH��H�à�dH�%(H�D$1�H�$H���sH��H����@t;�oE@H�oMH�@h�@(HX����H�D$dH3%(uH��[]��.��ff.���ATUSH��H�� �oL�gdH�%(H�D$1��}�l����L��H����I�Ġ�H�L$H�ŋCI��$H��P�����tkH�{��k��H�T$H�k�<t*<t&�9���1�H�L$dH3%(uNH�� []A\�fDH�T$H�t$�I��$���f.�H�����H���k�����4��@��AUI��ATI��USH��(H�Š�dH�%(H�D$1�H�D$H����q�@tq�AoE@(�AoMH8�Ao$PH�Ao\$�xHXXt=H�t$�H�����B���H�D$dH3%(��H��([]A\A]�D�`XL�hPH��A�|$�{j��D��L��H���-��{XtH���j���DH�__constrH9u�f�xucuڀx
tuԀ{dvH�{PH�D$�H�D$�CH����@��H������u�H��H����p�@tg�@(�@HH��Ð��AUATI��UH��SHc�H���D���I�Š�I���p�@�@tII���Jh�q�����rh�H�Ao$�oP@(�AoL$�@HH8H�XPU�oX]H��[]A\A]�,���ff.����SH�à�H��xu
[��H����o�@ti�o�x@0H����@(H�P@�@H[�f���H�?餆�@��U�VH��SH��H�Ơ�dH�%(H�\$1�H��H��hH���W���t#H�T$dH3%(��u/H��[]�f.�H�,$��}t΋uH�}�U�E��-��ff.�f���AWA��AVAUA��ATI��UH��SH��dH�%(H��$�1��>��I�Ơ�E����I����nH���C�CD�{tI���Ah�p�����qh�C�oE�oSC(�oMK8A$�o[A\$�CH�CT�}��E����H��$�dH3%(��H�ĸ[]A\A]A^A_��H�\$0H����m�J���fD�~�����vH�}�B����������}�I�Ơ�I���BP��t�H�H��H��H)�H�JHH���xt9����A�$D�mM��H�mA�U����E�E��D�����H�t�H���H��H��H��H�H�X�H�H�H�H��H��H�H�H�P�I��I��H�L�L�H�H��H��L�H�H�H�I��I��H�L�L�H�H��H��L�H�H�P�H��H��H�H�H�X�H��H��H�H�H9��a�����A������H�
��Hc�H�>��f��}�<����uH�}�������(����CT����fDH�t$(L���C�H�|$(H���]����H��H��H��H�H�P�H�H��H��H�H�PH�H�H��H��H�H�BH�H�H��H�HH�H��H�H�H��H�QH��H�H�H�H��H��H�H�BH�H�H��H�H��H�H�I�FXE�~`H�D$E����H��1��@��H��D9�ttH9Zu�D;ju�H�:H��L$H�T$�T��H�T$�L$��u�H��L$�d���L$A��@E�|$A�D$���H������H���1���H���>���DA�FdA�WA�V`9�OIc�H�|$H�@H��H�,I�VXD�lI�VXH�\��H�E�8this���x���������H�|$1�A�FdH�H�4@H���d��H�D$I�FX�H������������S�R���f���UH�պSH��H������H��H��H��H��[]�Rx��f���AUATA��UH��SH���H��hdH�%(H�D$X1��c��H�D$H���9H�U�oeH�P H�Š�L��I���H���+H�L$H���CH�sjE1�A��P谰H��XZ�i�@�@�@tSH���Qh�r�����qh�P�o�oP@(�oK)T$0�oXH8�@HD�`T�;)\$@tbL�d$1�H��L�����H�T$01�L���1z��H���BPH�RH�H�H��H��H)ȃL�H�D$XdH3%(��H��h[]A\A]�f��{v�H�{�!���H����o*H�R(H�P���D�H�a��E1�1ҾI���H��H��XZH����3�H��H�������[}�ff.���ATA��USH��H��PH�Š�dH�%(H�D$H1�H���h�@�@�@tSH���Nh�Q�����Vh�H�o�oP@(�oK)T$ �oXH8�@HD�`T�;)\$0t[I��1�H��L���+���H�T$ 1�L���x��H���BPH�RH�H�H��H��H)ȃL�H�D$HdH3%(uH��P[]A\��{v�H�{����J|�f.���AUI��1�ATUH��SH��1�H���p���I�}~;E1�fD�P1�H��H�������oI�D$I��E�oKMI9E��Ɂ��H��H��H�ߺ[]A\A]�?���ff.�@��ATI��UH��S��H��0dH�%(H�D$(1��b���\$H��H��H�D$�SE1�H��H���L�d$A� H��hj�N�ZYH�L$(dH3%(u	H��0[]A\��.{�ff.���AUATUSH��H��H�Š����t���ƅ�L�cL�-���CL���*��������wIcT�L�>��@�<�C�C�H��[]A\A]��H�{�D$��^���D$��DH� �HcPH�H�;�|�>t�ƅ��ff.����AVA��AUATUSH��H��x�;��H���XZ�C$E1�1��C E1�1�E1��C(H��Hǃ�ǃ�讪H�
�b��E1�1�1�E��H���L��芪E1�1�1�L��E��H���u�E1�1�1�H��XE��H���\�H���Z1�1�E1�H�{0E���B��;�LD�L��PE����Hǃ�Hǃ�Hǃ�Hǃ�Hǃ�Hǃ�Hǃ�Hǃ�Hǃ�Hǃ8Hǃ@HǃHǃHH�CǃhHǃ`Hǃ�HǃPHǃXHǃ�Hǃ�Hǃ�[]A\A]A^��H��PbZ�C$E1�1��C A�1�A��C(H��Hǃ�ǃ��ߨH�
�d���,�����AWAVAUATUSH��H��dH�%(H�D$1�H�}Pt8H�5Q��@�O�H�D$dH3%(��H��[]A\A]A^A_�@D�fL�~I��H��I��A�|$�[��D��L��H���O��H�=�
H��I����������H�=�
L������������F[��H�S��H��H�P�SH�$�P����H�$�j��H��pH�$A�V��xA�V	P(M���NA�}�CA�E�������uH���aL��H���@(H�$H�{0�P��_���CH�Cd�C`A�E�Ct�H�ChH�$L�cPH��H���S8H�s0E1�A��@�CXH��j�K�H��H�D$H�EP�Bh�H�����Jh�C�C�oCH�����oK�ZYH���)���HDžH�UPH����� Dž �������L���Y��H�S�@1�H�5F��!��\���@H���`L��H���@(H�$H�{0�P�^���CH�Cd�C`�Ct�����@H�5Q��@1���s����H�5���@1���S����u�����t1���u
�?paret 1��D�?selft(�����f�ntu؀uҸ�@1��t���fD��AVI��AUATI��UH�Š�SH���+`H��Lc��|_�@tmH���@(H�@hL���A�<$tX�Ao$PH�Ao\$XXH���Bh�H�����Jh�CH�Ch�C�C�oCA�oK[]A\ANA]A^�A�t$I�|$����P���v�Ao$$cH�Aol$kX�f�H��CHH�ChA�|$�t���I�|$�-��e��������H�OXH�vH��H�H��t�I�
HGXH��H��fD��1��G�����ff.�@��1��G���f����9G,�������SH���Gu�wH�{ [�u�f���H�{ [��t���S�G(H��H� �p��Z��H�C �Cu�{w	[��H��[�����H��HH��KZA�0dH�%(H�D$81�H���ûH�D$8dH3%(uH��H��yr�f���H��H�`�H�5����|$H�T$H��H��H�����H���H�v�A��H��`�H��JZH��H��H1��ġ�����H�������@��SH��`�H��H�شH��H�s�1�[����H�`����H��HtH�5N���驶f�H�5�����@��AWAVAUA���:ATI��UL��SH��L��H��hH�L$dH�%(H�D$X1�� q�H��t
�x:I����H�`�D�}L�t$ L��L��D��H��H�������H�D$ �oH�@H��H�CH�� ��w@�CA��CH�L$XdH3%(D����H��h[]A\A]A^A_�f�H������fDH�D$ I��M)�H�|$�}L��D���ZW��I��A����A����H�ƹH�=֌
�������H�D$H����H�xH����H��H�D$ �U�H��XH�L$(D)�I�v�ּL�����&T��H�D$ H�|$(�H���H�D$(H��o�����H�=9�
H���A��A��E��E����H�T$ D��L�����uH�D$ H����L��E1��S�������L���FV����H��H�$�x�H�`�H�4$D��H��HL����A�Dž�u4H�D$ �@��H�x L��L���^�H�<$�����5S���!���H�`�fo��D$HH�OFFSET__H�D$@��l)D$0������H�L$8H�T$0I3L$I3$H	���I;D$u�zE1�H��H���]�H�T$0H�t$I��H�|$(H��A���j�׺��XZL��D$H�t$(�PH�`�H��H��H�|$(�����aR���H�<$�WR������f�H�<$�GR��E1��0����H�`���lt8H��PH�D$�b����H�|$H��tdH�D$H�D$ ����H���H�@PH�D$�&���H�8����H�5��������H�5���1�������H�5s��1����L���Q���s����}Q��H�<$�:����/m�ff.�@��1����D��ATE1�USH��H�o �G���H�=�H�������tJH�`��S(H��E1�H��A�0H��H��Hj诞ZY���t1�M��tL����P����[]A\�f�H��H�5���1���H�{ ������\n�Cu��{v�H������fD�G(H��p��2S��I�ċC(L��L��p��^��5���f���UD��S���H��HdH�%(H�D$81�H�$�L$�D$�S��H��\$(H�D$ �l$,����H�D$8dH3%(uH��H[]��k�ff.���SE1����H�=L[H��@dH�%(H�D$81�H���V���E1����H�=���8���E1����
H�=������E1����H�=�����E1����	H�=������E1����	H�=Th
���E1����
H�=Q����E1��� �H�=@����E1���@�H�=1��f���E1�����H�=#��H���E1����
H�=��*���E1����H�=�����E1����H�=�����E1�����H�=�������H�=���D$�D$,�P��H���D$H�D$ �D$(H�$����H�=����P��H���D$H�D$ �D$(H�$�j����H�=��P��H���D$H�D$ �D$(�?����H�=F��D$�fP��H���D$H�D$ �D$(H�$����H�D$8dH3%(uH��@[��h�f���U��S���H��HdH�%(H�D$81��$�T$�D$��O��H��\$(H�D$ �l$,���H�D$8dH3%(uH��H[]��h�ff.���UD��S���H��HdH�%(H�D$81�H�$�L$D�D$�D$�wO��H��\$(H�D$ �l$,�"���H�D$8dH3%(uH��H[]��h�fD��AVE��AUA��ATA��UH��H��SH���mW�E��E��H��D��[H��]A\A]A^�O���f.�D��SH���w�W�G�����K��H��H�[�������SH���wH��;st�V���S[H��@�6�S��H�lj�1���K���s�{H��V���S[H��ff.�����G���G�GH�ff.���9wv�wH�H��@1��D��H�G8H��t���ff.�@��H�G@H��t���ff.�@��1��?�������1��?�����H��8�������ff.����H��8�����ff.�@��H������H�H#BH�H9���������H���SH��`�H����H��t
��Ћ����H��f�[H�
�
H�5�HE�1��L�ff.����UH���SH���I��H�UH���oH�JH��H�KH�� �����K�|tH�����H�U�BH�]�C�C�CH��[]�����Gt�F ��Hc�H�<փ��F 1��ff.���H��hH��P��uC�xwH��`�H9B t5H���0I��SH��H���d�H��`�H�H9B tH��[�I����t�f�[�fD�xt
�@�DH��`����t���fD��USH��H��`�dH�%(H�D$1�H��H�{P�oH�@H�CH�C8H�CH�C H�C(CC(H�C@�C�C�H�C`H��H�H��pH��`H��hH���ƃ�H��H��ƃlHǃpH��8H��@Hǃx�������9��|H��(��H��XZE1��2��H�PH���H��(1�H���H��&���lG��H��E1�H��H�(A�H��H�D$H�5-�
f�P��@j��H����H���Y^H�5����BE1�1�1ҾH���Hǃx蟒H��HǃhHǃ8Hǃ����H��X��H��p���H�����ƃ�Hǃ�HǃPHǃXHǃ0ƃH�D$dH3%(uIH��[]�f��tH�� 1҉�Hc�H���F��Hc�H�� H��H���R�����a�f���AUATUSH���dH�%(H��$�1�H�`�H�|$H��H��H�T$��i�������I��`�L�%>���I����H��舵H��L����۩H���s�9�u�I������H�`�H�L$H��H��$�dH3%(u6H���[]A\A]��H�`�H�L$H���H�������`�f���USH��(dH�%(H��$1�H�`�H�|$H��H��H�L$��h������xH�`�H��$�H���h�������H�`�H��8H��tHǀ8�{�!H���D��H�`�H��@H��t!Hǀ@�{vH����H���UD��H��`�H��H��H��H��H�ŀ3[�H��XH���k��H��H��p�W�H�`�H��$�H����g�������H�`����H��8�=H���Z艤H��`�H���ZH��@�o�H���S����H��8��H�5�����C�H��@H�5�����0�H��`�H��pH��hH9�rBf�H�8�H��`�H��pH�8�"C��H��pH�ShH��H��pH9�s�H�`�H����$�H�`�H��$�H���f�������H�`�H��$PH���f������~H�`�H�t$ƀH��H��$dH3%(�H��([]�H����H�5J�����=H�`�H����¢�]���D�3��a���fDH��`�H����ՠH�{P���H��H�`�H��X��H��p��H�����H��pH���&���臠H��p�A������fDH�5�����ԥH��@H�5�����,���@H��ФZ謥����H���������]�ff.���H�`�H��0H���H��tH����f.���H�`�H��x1�H��tH��@p���H�`���l�ff.�f���SH��������tH�`�H�@HH�P�����vH��t@H���
H�[�@H�BH��tH��H���H�
r�
HD�H�H��t
H�@[�@H�U�
[����H���S�����tOH�`�H�@HH�H���t(1���t	H���@H�AH�Dž
H��HD�H��ÐH�AH����1�H���f���H��hH��B��t��t�D�B�SH��H���|�H�;[�c]���SH��0dH�%(H�D$(1�����GH���H��Hc�H�>��DH�?�8�������H�t$(dH34%(�H��0[�fD�G��tك�tt���D1�H�?���D1�f�f.��E�롐H�GH���t�H���H��tnH�t$��х�u&�D$�m���D1��a����H�1��:0u��Q����H�`�����h���H�CH��PpH���Z�����������DH�@@H��t���H�D$�xt�H���*SH�D$H�|$��D$���D$�����Y����AWAVAUATUSH��XH�dH�%(H�D$H1��C���I��I��H��<t2<	�Z1�H�L$HdH3%(��H��X[]A\A]A^A_�DD�kD�cE��uXA��vRA���D�c�j=��I��oH�SH��H�PH�� �����@I��@I�D�k�CD�c�Ȁ�sH�;H�T$0�CH������u}H�+HcS�:H����X�H��t
�x:��H��H��H�5]�1���A��CE���tD�cD�k����H�H�5���1��
�����DE��t
H�;H��t�<��foL$0H�D$@H�C�f.��{u�C�����CE���1H�;1�L�d$L�t$(L�l$�جH�D$ H�$�H�;1�L�������sH�D$H��B���O��H�4$E1�E1��BH�;L��L���!����(�D$L�|$0H�|$ H��L���p������<�|$Du�T$�B�9D$8����;��H�|$H��oH�RH��H�PH�� ��vH��H�D$��H�|$H�D$�@�@H�H�D$�J���H�T$H�D$H��|$D���D$DH�
��Hc�H�>��fDH�T$0�D$8H�;D�
�HI��D��A��-�u�p�@��	w|��L�T2�A�:uo��v<0tfL��L)�H��ZD��I�sA��0Mc�L9���A�CD�X�A��	w3��0O��H��H�N�@I9��d�D�X�A��	v�f�E1�E1���p��!fD�L,D$0E1�H�;1�1Ҿ�M�H�;1����|$D��L���p����E1�L�D$0�fDH�;E1�E1��H��
����H�t$ H�|$0�E������L�����H�;1�膪�y����H�;H��PjZH���>�H�;1��$�����L�|$ �D$�:�P�L���U�H��t
�x:�L��L��H�5��1����H�;1��
�������H�9��H�;I���E1�1�L��H��XZ��蕄H�3H�L$0L��A�H�����L�#��������C�8��I��oH�SH��H�PH�� ��vH�����I��@I��@I��#����H����I�����L�Z�B�~���H��������L��H�5���1���L�|$ ���H��H�5ݹ�1��z�H�+����A��-t%M�������E1�1�1Ҿ�����A��-u�L��H���z���I�����S���H�����ff.�@��H��1����f���1����D��H�Ѻ�_ff.�@��AWAVAUATUSH���I��`�dH�%(H��$�1�H�G H�A���
I���H�D$(H����H�?HH��I���I���H���$�o)T$P�oXH�D$P)\$`�o` )d$p�oh0)�$��op@)�$��oxPHDŽ$�)�$��oP`HDŽ$�)�$��oXp)�$�M��tA�}��H�E�x�N
H�E8H����H�H�����P���$���XM��0L�M�����H�=un
L��M�|$��€���� M���mI��M��L�d$H��I��XI��X���H��HE�H�E8I��XH��$������H�T$HH�H��0H�EH�
H�$H���lH�E�x�^L�8H�5}uD�`L���;�H����	L)�H�\$HL��H�ډ�A)�H�D$���A��H�L$����H�D$HH�H�D$H�|$�
H�D$H�}8H��0H�EHc�M�|H���b
H�H�@H�xx�gH�D��L��H�@�PxH�D$`H����@ufH�L$H9Ht[A�|$H���4��D��L��H���@�H�L$`��I��H�D$L��H�x0�5�L�����4��H�D$`H����
fDE1�M��t#�8��
I�EH�L$H�U8A�EI�MI�U�P��t@������t/L�@H�@H����H�PH�
tH�5>��1��:��u(E�������cH�E0H�I�FE1�H�$�%f�H�|$@L��A���9](�[H�U0��H��H�D$`E��H�N���8H�p0��A�]H���P;X(�GK���D��H�z�:�B�����}@���L�D$�	3��L�D$H�U0H��L�H�
H�	�oH�IH��H�HH�� @��vH����L�D$H�U0L��CH�H��jH�U0J��H�H�E0J��H��B��A�]�BH�E0J��H��@H�E0J��L�E������A��A��9��I��(��A��A��H�PI��(L�9](�����A��A��E�����D$$D�e(�Q9��nI��(H�P��I��(A��L� I��(L�d$PH�PI��(H�I�FHH�$I�D$I�FHI��PH�D$H�D$I��PI��XH�D$H�E8H����H�|$`�G��IdžXI���M���H��$��?��H�GM���I��PH�EH����I���H�E M�&I��0M��xI��0I�H����H�}��M���I��0M�&M��xI��(H�P�L�`�JA)���~?D�j�M��H�\$HL��H��H�l��I��I�H��H�T$HI��U�I9�u�I��O�$�D$$M��(����H�$I��XI�FHtI��X��H�D$1�I���I��PH�D$I��XH��$�I���t1��NH��$�dH3%(���z
H���[]A\A]A^A_�H�5����?�I���H������H�T$P�H���H��F���f.�I�EI�MI�UH�D$`H�L$H�U8H���wH�
H��$�H�H��t+�zu%I���H���N�H�RH���|�9�P�����u(A��A��������H�U0�H�9���M�� I9���I��(E1�H9��4����1�L��A��E(A��H�H�4��/��Ic�I�� H��H��I��(�U(1�����H�M0��H��H�H9�vI9�w
L)�I� H��U(��9�w҅���E1����H�E8H�$����DE1��&���H�\$H�pL��H������Ã���~
H�E8�j���D�@8������A�]H;$���BH�E0J��L��\���f��@ �i���H���-A�]9X(�K�<��D��Z����z�G�����-��I��H�E0J��H��o A H�@H��I�@H�� A�@A�@������L��L�D$腿L�D$�����tI�� 1�L�D$A��Hc�H���s-��Ic�L�D$I�� H��H�����@���,��I��H�E0J��H��oAH�@I�@A�@A�@�@���fD�@8����;X(�e����Q�����@8��L����zA�]�z��������H�] ��b,��H���H�H�E �o*H�(H�RH�PH�D$`H�PH��tI��PH�M8L�X@H��tH�	H�u �x9A�H�D$(�}(HE�H�6H��A��H�E H��@H�E H��@����@H�I��X�x���@H�|$`�Q���fDH�}8H���IH�$H�D$���D�DI�� 1�A��H�H�4���+��Ic�I�� H��H���\���A��A��DL�d$89���I��(H�P��A��I��(L� A��A��L�d$@9��%I��(���D$$A��H�PI��(L� A��E(A��A�����f�H�|$8�v�H�|$@�l��1����H�\$H�|$`IdžXH���
����G�����%H�OH�SH�5ۮ���%�����1���H�|$`�����E1��y���E����E��tH�|$8���H�|$@�����������I���H��t�H�RH���|t�H�PH����7H����H�U8H�$H��0H�EH�H��$��*�H�]H9H@�e����z���H�|$t�H�D$H���H���l����H�D$`�c)��I����H�D$8I�T$�Ao4$H�PH�U0H�
�R�@�PH��')��I�T$�Ao<$A�H��H�D$@H�P8�2�H�D$`��H�81�H�T$@��������H�EH�\$H�H��H�8�ו��������H�D$HH�\$@H�H�EL�#A�|$uA�D$����H�]8H��@�>�yH�L$�w(��H�L$L��H�lj��%�H�<$H�L$H��tp���p��ub�8pareuZf�xntuRI��0H�xtDI��PH�@H�D$H�L$�@(��H�L$��HDŽ$��P�����������(��L��H�57�1�����8�����H�=6`
L����€�����M����I�GH����I�WH��H�T$H��H�|$D��L����H�<$H�D$`t-H��t(E1�@��H�t$H�<$�.�����H�D$`H����������'��H��I��X�o03H�@H��H�CH�� �C�C����I��XH�|$`�o����DI�� 1�A��H�H�4��'��Ic�I�� H��H������DI�� 1�A��H�H�4���&��Ic�I�� H��H���.���H�<$��A�|$�<$�B&��D��L��H����D�$H�}H�L$`H��H��D���������H���8&��H�D$`H����H�D$E1���H�\$H�pL��H���V��Ã���4M�������I��XH���������L��H��蒄�������H�D$HL��H�0�z����p���I��XH�E8I��XH��$�����H�5�1���H�}8�}�I����+�I����_%���=�H� %��H��XZ1�1�H��E1�I����pH�|$`���H�
�
H���
�H���"�����8self���I��0H������H�@H�D$������A�D$�$��H�H�D$@�Ao<$H�8I�T$H�PH�\$@H�;�v
豶H�\$@H�;�GH��@����H�D$`�8���1�L��1��I���`�I��(H�P�L�h�JA)���~O�J�M��H�\$HH��H�$H��H�l��f�I��I�H��H�D$HI����I9�u�H�$H��M�l�M��(���H�$D��L��H���6�H�\$H�D$`�f���M��H�E8�M�����H�5a�H�H�1�������H�5k��1����M��0M�|$�o��q#��H�D$L��H�5��H�P1���L���J#��H�D$`H��������H�5x���f�I��0L�xI�G�W���1�H�5���?�I��0L�x�'���H�5��1����������A����H�5w��1�������m��f>�A��A��E1��D$$�O�H�HH�@H�5���H�P1���H�D$L�����H�5�H�HH�$L�@1�����f.���H��XdH�%(H�D$H1��D$`H�|$H��H�t$81��D$@H�D$hH�T$H�$HH�L$ D�D$(L�L$0H�D$�F�H�T$HdH3%(uH��X��|=�ff.����ATI��UH��S1�H��0dH�%(H�D$(1�H�D$ E����H�L$ jL��I��j�6���H�|$0A��XZH�����oEH�GH�E�W�����}wA���W�E�EH��tH���!��H�t$(dH34%(D����H��0[]A\�H���H�|$ �W�fDD��L�L$H��H�T$H�t$D�D$� ��D�D$L�L$H��H�T$H�t$A�@�H�<�1�I�H�H��H9�u�����f.�H���oMH�@H�E�4���@�K �������<���UH��AWAVAUATSH��H�����dH�%(H�E�1�ƅ���HDž(���H����A����D�nI��A��Ic������H��H��H��H���H)�H���H9�tH��H��$�H9�u�%�t	H)�H�L�L�t$D��L��D�����I���L����H��`�D��L��H�����H��@��D�������A����E��ucA������s���������D��L��H��I��複H��`�D��L��H�����H��@蔇D�������A���jE���
�t.������H��pH���tH��E1�D��A�jH�����L���[lA��XZA����H��r
�Dž8���
H��0���ƅD����3��D��L���@�@D�`H�� ���H������� ��H�����L��(���H��P���H��p���L������H�H�� ���H�� ���H�U��@H��8L�U�H��x���H��0���H�E�H�E�H�E�H��xH���H��H��X���H�����P���HDžp���HH�E��E�H�E��E�HDž`���HDžh���H����Hǃ����H��������H��X���H��H��x����E1�1�D��H��pL���gxD�����L������A���tzH���H����H������H��(���tL�����H��@H�����D��L���j�A��A���FH�M�dH3%(D����H�e�[A\A]A^A_]�H����H���A����B���fDL��D������i��D������H����H����X���D�H���E1�1�1�H��1�H��p�gH��p�^���f.�A���K���L���H�&p
L�@H�5x�1��!����A��������L������A��������L�����H�����f7�fD��AWI��AVAUATI��UH��SH��hH��`�dH�%(H�D$X1�H��0H�D$H�CHH�D$�&�I��H����A�}
�@	Hc��D$H���Ic�L��I���retuH�D$@�rnI�~fA�FA�F ��/�HcD$HA�D�;H�T$@A�D� �I�Š�L�d$@L���D$TH�@�L��E���Aƅ��I��E���H����A���H�H�L$8L��I���L��xH��t$$H�D$8H�D$H�L$(L��0ƃ�ADž�A��t$$H�|$8A���H����H��H�L$(��oEH�WH�U�W�����}vH����H�|$8�W���W�E�EH�D$L��ƃ�L��xH��0H�D$H�CH�1L�����H�D$H�1ۀ|$TvL����H�L$XdH3%(��u}H��h[]A\A]A^A_����L��D$H���H�D$@�q���H���k���H����o
MH�RH�U�O����3���7���fDH������/���������b�����4�ff.����S���T�����tH��`�H���H��u[��#C�����[�ff.����AUATUSH��H�Š�dH�%(H�D$1�H�$H���Gt�����H�t%H�D$dH3%(��H��[]A\A]�fD�?u��H����@t>�oH�R�@(�@HH�P@@0�hN��H��H���H���Q�WPH��H��H)�H�WHL�$�I9���A��<��u$�S0H��H��H��H)�H�QHH��H�C0@H��H��x�4pI9�v_�{(u�CE�C@�{Hu�Ce�C`�Ct�Hր�w�L��H��6t��SPH��H��H��H)�H�QHH��H�CP�DH��H��`�H���I��D���Dž�L�#H��0�H�<$D���tL�����H���H��t�4AH���hPH���HPH��H��H)�H�HHH��H����<����H�GHH���H��H�������M2�ff.�f���SH��dH�%(H��$�1�H�`����H��th1�H�|$H��H�D$H�\$ H�$H�D$��:�H���WZ��3�H����4�H���<�1�H�޿�!�H��$�dH3%(u	H�İ[��1�fD��H��8dH�%(H�D$(1�H�`������uH�D$(dH3%(u;H��8�f�H��1ҿH�D$H�$H�D$H�D$�9���1������AVA��AUI��ATA��US�Ӏ�H��dH�%(H�D$1�����������tW1�A��H��D����L��������H�$H�(H�L$dH3%(H���H��[]A\A]A^�f�H��`�H��PH��u�H�5^��1�躴H��P뤐D��L�������Å��d������M���H��`�H��PH��t7H�hH���e���1�H�5q���_�H��PH�h�B����H�5���7�H��P�fD1�E������L��tH�5���1�����H�5���1��������`/���AWAVAUATUSH��HdH�%(H�D$81��G(��0��t#H�D$8dH3%(�4H��H[]A\A]A^A_�f�H��H�T$H�D$0H�0H�5���)D$)D$ �t�L$0��t�H�D$ H���{H�|$(H�=�.��L�`H�@L�Ձ
H��tL�XH�t$H�T$H��RH�-�.H����L�nH�vH����L�~H�5�RH����L�5z.L�RH�RL�T$H���-L�JL�eR��H�T�
L��.LN�H��H�SW�ATP1�ASUAUVH�5��AWAV�t$XAR�n�H��`���D��H�=�
H��HM�����H��
I��H��I��H����H�5Ҁ
L�5“I��H��I�����:���I���2���DH�5�QL�=��
H������L���
L�T$M��M��� ���f�H�t$H�T$H���w���H�b�
H�-R�I��H��I�������H�����DL�<QL�
.�
����H�5"�
I��H��I�����,�fD��H�`�H���H��t!f�H�P@H��tH9xhtH�@pH��u����R`��~�1��H�HXH��H�H@H��9Q`���D��AWAVAUA��ATI��U�nSH��8�����~��������I�L�L��DH��H��H��H�H�P�H�H�P�I��I��H�L�L�@�H��H��L�L�@�H�H��L�H��H�H�X�I��I��H�H�P�L�I��H�I��J�H�P�I��I��H�H�X�L�I��H�I��J�H9��a����ލ�����H�
H�Hc�H�>��f�H��H��H��H�H�P�H�H��H��H�H�PH�H�H��H��H�H�BH�H�H��H�HH�H��H�H�H��H�QH��H�H�H�H��H��H�H�BH�H�H��H�H��H�H�I��`�H�ى�L��I����E~���M���M��t)Ic�M���H�D$(f�I�@@H��tM9xht1M�@pM��u�H��8��L��E1�[I���]1�A\A]A^A_��i@�P`��~�H�HXD�R�E1��@I�AH��M9�t�I��H9Yu�D9iu�H�9H�T$(L��L�L$ L�T$L�D$H�L$��H�L$L�D$��L�T$L�L$ u�I�@XJ���N����H�����H�������H�������H�������H��8�����[]A\A]A^A_�D��H��H�@�@�|$��	H�@��5��H���@��Hc�H�>����H�=`�
��H���D�H�=���H���D�H�=q�
��H���D�H�=����H���D�H�=��
��H���D�H�=��
��H���DH�|$���H���ff.�@��ATA��I�USL9�sR�H����H�]< t/���L9�s7�EH��H�]��< u��fD�< u�H��� H�����I9�w�[]A\�fD��AWAVAUATI��USH��8H�/I��0�H�=�dH�%(H�D$(1�L�t$A�UH��H�=�1�A�U�D$$�D$L������A�Dž���A��n�$A��m��A��7��A��;�]A��"�c�D$���G�|$$�|@I�\$H9�t-I�MI9,$t1�H�=q���I9$tI�MH��H�=c�1���H� ��pH�x�~����|$$��A��t��L���D$$H���F���A�Dž��*���I�UI9,$tH�=!�1���I�UH�=�1���1�H�=�A�UH�D$(dH3%(��H��8[]A\A]A^A_��A��q��������A��r���H� ��pH�x����D$$����A���������:���H�|$�v
���+����I�\$����fDI�\$�t$����I�$����I�\$���fDI�\$ �����%���ATE1�USH�� dH�%(H�D$1��D$H��H�������Å�t��n3��m�������H�D$dH3%(��H�� []A\Ð��rth��t��H�� �I��@��sH�{A�$H�<$�z	��H��肜��=rt�sH�{A�$�H�=�A�$�D$A��G���E��uH�@��H�=@x
A���D$����fDH� ��pH�xH�@���|$t�D$E1����D��m��v�H�<$�������$�D��H�H�GH�GH�wH�W �O(�f���UH��SH��H��H�G�{(H�xtB�(�H��tMH�SH�H�PH��t4H�H�CH�SH��H�x��H�CH��[]Ð����f�H���H�LE7��H�=z�H��8��!&���UH��SH��H��H�G�{(H�xtB�](�H��tNH�H�@H�H��t5H�BH�H�SH��H�x�~�H�CH��[]�f��[���f�H�C��H��D7��H�=��H��7��%���AWAVAUATUSH��H�H��tkI��I��I���L��M��tUH�kL�#L��H��A�Յ�t�H�CH�H��tPH�H�H�SH��tPH�PI�G H��tH���A�(H��t�$�I�oH��[]A\A]A^A_�@�����I�H�H�SH��u�I�W�ff.���ATUH��SH�H��u�8�#$�L��M��t(H�E L�#H��tH�{�Ѐ}(H��u��K��L��M��u�[H�E]A\�fD��SH�����H�CH�[�f���ATE1�USH�oH��t@H�EH��tSH�H�EH��L�eH�GH�G H��tL��Ѐ{(H��u���H�kL��[]A\�@�[#���f�H�����UH��SH��H���N(H�V H�v���H�H��t�H�sH������H�H��u�H��[]�D��AVAUATUSH�H����H��I�����"�H�mL��M��tnL�cL�+L��A�օ�t�H�CH�H��tAH�H�H�SH��t"H�PH�E H��tL��Ѐ}(H��u������H�U��f.�H�U�f.�[]A\A]A^����USH��H�H��tH��H�{��H�H��u�H��[]���H�GH��u�f�ATI��UH��H�<�S�	��H�UH��H��tDH��H�P�H�H��u�H�u�L��H���T�H��H�EH�@H�}H��v)fDH��H�D�H�AH��H��H�H9Uw�H�D�H�H��H�H�H�E[]A\�����ATUSH�H��t"I��H��f.�H�{H��A��H�H��u�[]A\�f���AUATA��UH��SH���H�L$8L�D$@L�L$H��t7)D$P)L$`)T$p)�$�)�$�)�$�)�$�)�$�dH�%(H�D$1�H�H��$�$H�D$H�D$ �D$0H�D$H��tI��fDH�{L��D���H�H��u�H�D$dH3%(uH���[]A\A]��A���H�G����H�G0H��HD�H�H�PH��H�HE��ff.�@��H�G0H��HD�H�GH�PH��H�HE��ff.���H��0H��HD�H�H��tH�H�H��tH���f�1��ff.�f���H��0H��HD�H�H��tH�@H�H��t
H����1��f.���H�GpH��tH����fD����H�GxH��tH����fD����H�GPH��tH����fD�����?t1��@H���H��t�H���{`1�H���@���������AUATUSH��H�Ơ�����P���I��� A�D$PI�\$HH��H��H)�H��A�D$��H�,3A�H9�w>����u�S0H��H��H)�I�T$HH��H�C0f�H��H��x��XH9�vW�{(u�CE�C@�{Hu�Ce�C`�Ct�Hր�w�L��H��6t��SPH��H��H)�I�T$HH��H�CP�AƄ$�H��1�[]A\A]�f�A9D$T�9���H��1����H��I�D$HA�D$PH��A�D$TH��H)�H�4�����f�H��H����H�5?����������D�OPH�GHH��H��H)�H��H9�������PtH��x��etH9��|����PtH��x��eu�H9�v�xtet4�Pp�P���@1��D�@����I���L����g�����@��f.���AUATUSH��H��I�Š�@�7LJ�A������<��H��I��H��H)�H����o���D�cT1�H��H�C@1��CPH�CH����H�CXH�CHH�C`�ChH�C�
��H�C(f�H����H���H�5����H�����H�Cx1�f���1�Hǃ�ǃ�H�C0H�CHǃ�H�CpHǃ�ǃ��C9Hǃ�A���������H�������CH��[]A\A]���fD�A� ������S�?�t	��[�DH���1�H��t��\��[Ð��SH��H�?�?t8H��PH��t"��[H�H��P����H�HǀP1�[�fDH���ZH��0�]H�H��PH��t��D\H�HǀP1�[�f���SH��C ���C �����<��<uxH�{x�O[H����C[H���7[H�{�n���H�{0�%[H��X�[��h��tH��`H��t�>���H���H��t�-���H��[�$���@[�fDH�{x��ZH�����ZH���ZH�{��H�{0�ZH��X�Z��h��uH���H��t�n�H��[�e�DH��`�T���f���H��@ �@��AVAUATUH��SH�_HD�wPH���H��t�(ZH����\���H�E@�D�a�D� E��t
[]A\A]A^ÐH�}@�7���H�}XH��t2�E`��t&��L�,@I��@J�</I������H�}XI���u����L��H��L)�L�,�L9�r�W��{Ht*H��xI9�vA�{(u�{Dv�H�{0��{Hu�fD�{dv�H�{PH��x�݋I9�w��H�}H���H�}H��t�y���H���H��t�h���H�}pH��t�Z���H���H��t�I������uhH�E0H������U(��t=@D��H��H�<�H������H�E0H�|H��t	���H�E0A��D9e(w�[H��]A\A]A^�����H����H��H�5W����"�������?t�fD����ff.����������H�H��H�1�H�GhH��H��H)���x���H�H�������B�Bp�f���UH��SH���_P�C�GP�GT9�s+H�GHH��H��H)�H��H���y���H��H��[]���Gt&H��0�H�=�1���4H�=$��o��ET��H�}H1�H�ƉETH��H)�H������H�EH�����GP����S�GxH��1ҍp�wxH�pH������SxH�Cp[��H��H��ff.�f���SH�WH��H�5��1����H��@�ZH�{0��XH�S�1�H�5���1�[�fD����t��
uH���Z�f.�1��DH��Z�����!�#H�`��Hc�H�>��H��Z��H���Z��H���Z��H���Z��H���Z��H���Z��H�p�Z��H���Z��H�`�Z��H��Z��H��*[��H��,[��H��([��H��([��H� )[��H��)[��H�0�Z��1��f.���UH��SHc�H����u��Hc�1�1�H���(�…�~E�L���G��&w8�H��H��H�H��u1H�@@H��uH�H��u
H����[]�@��
��
H����
��[]�ff.���UH��SHc�H����u��Hc�1�1�H�����~B�L���G��&w5�H��H�H��u0H�@@H��uH�H��u
H��[]�H��
H��
H��H��
[]�D����th��H�H9�s^Uf��SH��H�� -�C�<	v�O�H��C�<	w=�YӃ�0f��H���*��X�H9�u�H��f(�[]�fDf��f(�����.t+H�|$�$���$H�|$H��<�Eu�H���{H�oH9�v�H�_��,�C�f(�<	w7���0f�H���*��^��Y��X�H9��c���H�]�C�<	v��$����$H��<�E�;���H�}�
1����f���,�*���
��$�Y�����f���USH��H��(dH�%(H�D$1��wm�GH�
}Hc�H�>���H�?1��c��@�ŀ{vH����H�+��CH�D$dH3%(�H��([]�f�1�H�5�{�蝓�{vH��菄H��fD�?��q����
f/�v~�\��H,�H�H�??�p����H�WH���H��tpH���Ѓ���-�{wGfo$�C�2���fDH�/��1�H���q�H��H����	�����H,�H����H���ȃ�fDH�B@H��tE�ЀxH��t.�{vH��螃�o]H��H�EH�C�F�H�����C<�����H�`����tBH�CH�߽�PpH��tH��1���a��@�ŀ{vH���0��CH�+�P���@H�߽蓮H�5,z�H�P1���f.��覭H��H���[�H��H�5�yH�P1���C�>����3
���AUATUSH��dH�%(H�D$1��w,�GH��zH��Hc�H�>��@�
�&���fDH�D$dH3%(��H��[]A\A]Ð�?�o�C���GH����OL�'����A�$L��P���v< u&B�4!f.�H���E��)�P���v�< t�PՁ���H�,$H���7�VЀ�	��<0u	���A�
@��0uf.�H��H�<$�7@��0t�1ɍF�<	��A����A��
����D��1�H������CH��L��������H��GM���������f.�@��.u:�G��0<	w/H��H���4C��C�f.�H�}H�<$����H��C냃�ߍF�<�W���DH����H�<$����A��
t�H��H����T��EA�
���<X����H�GA�H�$�wH�����@��.�Q������@��Eu-�wH�G�VՁ�uH�$H�G�H�<$��0<	�����������H��H�5|�a�������u
�}-�����1�H���#B�C�������7�����7�-����i����9
��7�4�������u�D�
�V���fD��USH��H��8�WdH�%(H�D$(1�����H�
�wHc�H�>��DH�?��]�(p��uf�{vH���D$�$�D$��CH�D$(dH3%(��H��8[]��?�Alf��H*���f�1�H�5�v��͍�{vH���~H��fDH�WH���H��tpH�t$��Ѓ����{wEfoL$�C�]���H�/1�H���@�H���<���H�����/���f�H���8~�fDH�B@H��tE�ЀxH��t.�{vH���~�oUH��H�EH�C��H���^����C<����H�`����t2H�CH��PpH��tH���K\f���w�����n�j���f�H����H�5	u�H�P1�职�����.�H��H����H��H�5DtH�P1��I��C�V�����ff.���USH��H���G<t<w�CH��[]�@H�GH���u
H����|�ٿ�v��o1�H��H��H�CH��H�EH�C�����u�}v�H��H��[]�|f.�H�E�oMH��H�C�H��C�d���ff.�@��USH��H��(dH�%(H�D$1�����GH��tHc�H�>��@H�B@H��tA�ЀxH��t.�{vH���|�oUH��H�EH�C��H���~����C<tRH�`�����zH�CH��PpH���gH��1��EZ��@�ŀ{vH���{H�+fD�CH�D$dH3%(�pH��([]�f��?�h1�H�;��H����S{H��f.�1�f�f.��HE�H��DH�?�Y��@�ŀ{vH���{@��H�+�`����H�WH���H�������H���Ѓ�����{wKfo$�C����f��CH�?��t&���t4H�H��������K����fD1���@H���pz�fD1��?0��H�������fD��H��H��賥H��H�5qH�P1����C�&�����ff.���USH��H��(dH�%(H�D$1���!�GH�NrHc�H�>��@H�B@H��tG�ЀxH��t4�{vH���y�oUH��H�EH�C�F��{tdH���x����C<tTH����H�59q�H�P1��Q��{vH���Cy�H�=BO
���CH���CH�D$dH3%(��H��([]Ð1�H�=�V
�b��CH���fDH�H��G
1�H��1��J�C�DH�`��H�j�
1�H��`���C�s���H�?t��H�=�����CH��J���f.�1�H�5|t��M��{vH���?x�H�=N���CH�����H�WH���H���D���H���Ѓ��te�{wOfo$�C����fDH�/���eH��H��s�����wH�����H���w�fD��F�H��H���H��H�5\nH�P1��a��C��������ATUSH�� dH�%(H�D$1��G<t}H��<��������H�S�o�HH�$H�P�@�@�w�H��XZ1�1�H�E1�H���1H�;H��E1�A��1���8�CH�D$dH3%(��H�� []A\�f��H��H��XZ1�1�E1�H��H���0H�SH�BpH��txH���H����H��p3[H��H��H��A���I�C<vH���'v�CH�+�l����H��H��XZ1�1�H�E1�H���50�C�=���@H���H����H��H��Ѓ��tF�{vH���ufo$�CH���$CH���\������C�T������6�H��I����L��H�5LlH�P1��Q��C<�����H�B@H��t>H��ЀxI��t0�{vH���u�Ao$L��I�D$H�C��H������C��n��ff.���SH��H��dH�%(H�D$1��G<��<tj������2�H�S�oH��H�$H�P�@�@�l�H�CH��PpH��H���jE1�A�H��H�5�#��0XZH�D$dH3%(u)H��[�@H��ɔH�H�0�Ω��@������ff.����ATU��SH��PH�t$(H�T$0H�L$8L�D$@L�L$HdH�%(H�D$1�H�D$p�$H�D$H�D$ H�D$�����t@�$��/wV�ƒ�HT$�$L�"I�$�{tր{u�C��wFH�߃�����u�H�D$dH3%(utH��P[]A\�DH�T$H�BH�D$������C��I�$�oH�SH�PI�<$�v	��sI�<$�GI�$�@I�$�l����]��ff.�f���ATU��SH��PH�t$(H�T$0H�L$8L�D$@L�L$HdH�%(H�D$1�H�D$p�$H�D$H�D$ H�D$�����t@�$��/wV�ƒ�HT$�$L�"I�$�{tր{u�C��wFH�߃�����u�H�D$dH3%(utH��P[]A\�DH�T$H�BH�D$������C��I�$�oH�SH�PI�<$�v	�rI�<$�GI�$�@I�$�l����-��ff.�f���ATU��SH��PH�t$(H�T$0H�L$8L�D$@L�L$HdH�%(H�D$1�H�D$p�$H�D$H�D$ H�D$fD�����t@�$��/wX�ƒ�HT$�$L�"I�$�{tր{u�C��w@H�߃��������u�H�D$dH3%(uxH��P[]A\��H�T$H�BH�D$륃���C�P��I�$�oH�SH�PI�<$�v	�nqI�<$�GI�$�@I�$�{�5����h��������AUATI��UH��SH��H��XdH�%(H�D$H1��F<��H9���<��H��hHc�H�>��@��.�����@��Eu/�wH�G�VՁ�u	H�D$0H�G���0<	�gH�|$0���0H��H�5�k� ���u	�;-�
H��1�H�\$��1�D$$�D$�EL9�t<wH�<hHc�H�>��f�<t|H�����C<ux�E<��<�11�H�5k��5~�����H�|$HdH3<%(��H��X[]A\A]ÐH��D��H�l$01��~��D$DH�D$0@�C<�l<u��E<��<u�A�D$��XE�A$1����z�fH9��
����<����H�������H�D$H�\$�D$$������C�D$DH�l$0H�D$0<�]�����@H�E�D$DH�l$0H�D$0�C<�5����@�M��t�H�m�E�P���v< u�4)f�H���E��)�P���v�< t�PՁ��)H�}H�|$�7�VЀ�	�a<0u	����A�
H�G@��0u@H��H�D$H���p�@��0t�1ɍF�<	�]A���CA��
�����@�����u��7�1����H�t$H���sA�D$D�D$0�CH�l$0<�3���f��H*�XE�2@�o]H�EL�l$0L��)\$0H�D$@�m�
L�����|$D�d���L�������oH�FL�l$L��)T$H�D$ �qm�
L���T��|$$ID����fDH��D$$H�\$H�D$����f��N������H���P���v< u�4H�����)ٍP���v�< t�PՁ��bH�\$0H���7�VЀ�	�s<0u	���A�
H�G@��0ufDH��H�D$0H���p�@��0t�1ɍF�<	��A����A��
��������H��D��H�\$1�����D$$H�D$����H�H�UH��H�H1�xH��H1���I�$1�A�D$�����H9�u	H9��w���L9�t�o#L��A$$H�CI�D$��kH�uI�<$H�L$0E1�H��p3[A���G1����f.�f��H*E�X�A$1�A�D$����H�{H�|$0���f.�H�l$H������@��.�����G��0<	�����H�t$0H���,�D$H�\$�D$$����D@��.����G��0<	����H�t$H���j,��D��ߍF�<�����f�H����H�|$����A��
���������ߍF�<�1���f.�H����H�|$0���RA��
�:���H�t$0H����=�5����f�f��A�D$�H*�1��H*��X��A$�?���@��.�.������@��Eu/�wH�G�VՁ�u	H�D$H�G���0<	�����H�|$������H��H�5e�t��������u
�}-��1�H���6+�D$D�D$0����CA�
���<X���H�GA�H�D$0�wH�������EA�
���<X����H�GA�H�D$�wH�������������7�������������7����7���f���AUATI��UH��SH��H��XdH�%(H�D$H1��FH9���<��H��`Hc�H�>��@��.�7���@��Eu/�wH�G�VՁ�u	H�D$0H�G���0<	�H�|$0����H��H�5�c�����}u	�;-�rH��1�H�\$��)�D$$�D$��EI9���<��H�T`Hc�H�>��f.�H�D$0H�l$0�D$D�C<��<���E<��<��A�D$�1��\E�A$H�|$HdH3<%(�'H��X[]A\A]���D$$H�\$�EH�D$I9��E���<�s���L������C<�k����E<�(<��1�H�5�b��eu������m���<���H��������H��D$$H�\$H�D$���f��oH�FL�l$L��)T$H�D$ ��f�
L�����|$$ID��v���fD�N���
���H���P���v< u�4H�����)ٍP���v�< t�PՁ��jH�{H�|$0�7�VЀ�	��<0u	���zA�
H�G@��0uDH��H�D$0H���p�@��0t�1ɍF�<	��A����A��
�)������UH��D��H�\$1����D$$H�D$����H�E�D$DH�l$0H�D$0����o]H�EL�l$0L��)\$0H�D$@�e�
L���s���|$D����L���s����M���U���H�m�E�P���v< u!�4)fDH���E��)�P���v�< t�PՁ��1H�}H�|$�7�VЀ�	��<0u	���A�
H�G@��0u@H��H�D$H���p�@��0t�1ɍF�<	��A����A��
�1�����u��7��f�H�t$H����7�D$D�D$0�CH�l$0<�v���f��H*�\E��f����H*M�\��A$1�A�D$�m���H�H�UH��H��H)�H1�x3I�$1�A�D$�D���f�H�\$0H�����H�l$H������H��H1�y�f�f��A�D$�H*�1��H*��\��A$���@��.�����G��0<	�����H�t$0H����$�D$H�\$�D$$�-���D@��.�N����G��0<	�?���H�t$H���$���D��ߍF�<�1���f.�H����H�|$0����A��
�r���H�t$0H���d6�m������ߍF�<�)���f.�H����H�|$���=A��
�!����]���@H��D��H�l$01��F���D$DH�D$0����@��.�'������@��Eu/�wH�G�VՁ�u	H�D$H�G���0<	��H�|$��u�H��H�5^]�����y���u
�}-�m���1�H���{#�D$D�D$0����EA�
���<X��H�GA�H�D$�wH�������CA�
���<X�w���H�GA�H�D$0�wH���\������������7���������.���7����7�V���ff.���AUATI��UH��SH��H��hdH�%(H�D$X1��FH9���<��H�mYHc�H�>��@��.�/���@��Eu/�wH�G�VՁ�u	H�D$@H�G���0<	��H�|$@����H��H�5�[�E����}u	�;-�rH��1�H�\$ �"�D$4�D$ ��EI9���<��H��XHc�H�>��f.�H�D$@H�l$@�D$T�C<��<���E<��<��A�D$�1��YE�A$H�|$XdH3<%(�H��h[]A\A]���D$4H�\$ �EH�D$ I9��E���<�s���L���(���C<�k����E<�(<��1�H�5�Z��m������m���<���H����������H��D$4H�\$ H�D$ ���f��oH�FL�l$ L��)L$ H�D$0�_�
L�������|$4ID��v���fD�N���
���H���P���v< u�4H�����)ٍP���v�< t�PՁ���H�\$@H���7�VЀ�	��<0u	���;A�
H�G@��0ufDH��H�D$@H���p�@��0t�1ɍF�<	�A����A��
�)������EH��D��H�\$ 1������D$4H�D$ ����H�E�D$TH�l$@H�D$@����oUH�EL�l$@L��)T$@H�D$P��]�
L������|$T����L���s����M���U���H�m�E�P���v< u!�4)fDH���E��)�P���v�< t�PՁ��QH�}H�|$�7�VЀ�	����~<0�!A�
H�G@��0u@H��H�D$H���p�@��0t�1ɍF�<	��A���{A��
�!������u��7��f�H�t$H���30�D$T�D$@�CH�l$@<�v���f��H*�YE��f��H*E�Y�A$1�A�D$�q����H�H�UH��H�$H���,$H�$�,$H�$���,$�����z;u9��I�$�A�D$1��$���f�H�{H�|$@�p���f�H�l$H�����A�$���D@��.�����G��0<	�����H�t$@H���:�D$ H�\$ �D$4�5���D@��.�V����G��0<	�G���H�t$H�������D��ߍF�<�����f�H����H�|$����A��
���������ߍF�<����f.�H����H�|$@���MA��
�:���H�t$@H���t.�5����H��D��H�l$@1�����D$TH�D$@����@��.�/������@��Eu/�wH�G�VՁ�u	H�D$H�G���0<	�����H�|$��u�H��H�5�U�	����y���u
�}-�m���1�H�����D$T�D$@����CA�
���<X�����H�GA�H�D$@�wH������EA�
���<X����H�GA�H�D$�wH�������������7��������~���7�n����7���ff.���AUATI��UH��SH��H��XdH�%(H�D$H1��FH9��D<��H��QHc�H�>��@��.�����@��Eu/�wH�G�VՁ�u	H�D$0H�G���0<	�lH�|$0����H��H�5:T������u	�;-��H��1�H�\$�S�D$$�D$��EI9��C<wSH�5hQ��Hc�H�>���o]H�EL�l$0L��)\$0H�D$@�X�
L���k���|$D���E<��<t@1�H�5�S��}f�����H�|$HdH3<%(��H��X[]A\A]�f��Ef.s��b�C<��<u�A�D$1���^E�A$�@H�D$0�D$D1�H�5SS���eA�D$�����I�$�_�����D$$H�\$�EH�D$I9������<u\H�}t��C<��<����f����H*M�^��A$1�A�D$��@<�`���H������S���L�����A�D$���D�N���]���H���P���v< u"�4�H�����)ٍP���v�< t�PՁ���H�\$0H���7�VЀ�	��<0u	����A�
H�G@��0ufDH��H�D$0H���p�@��0t�1ɍF�<	�-A���A��
�������H��D��H�\$1������D$$H�D$�O����H�E�D$DH�l$0H�D$0����M������H�m�E�P���v< u!�4)fDH���E��)�P���v�< t�PՁ���H�l$H���7�VЀ�	�
<0u	����A�
H�G@��0uDH��H�D$H���p�@��0t�1ɍF�<	�uA���SA��
��������u��7�qf�H�t$H���(�D$D�D$0H�l$0���fD�oH�FL�l$L��)T$H�D$ ��T�
L������|$$ID����fDH��D$$H�\$H�D$�����H�MH�H���u3H��H9���A�D$H�H�H�}I�$1�����fDH�H��H��t�A�D$f�f��1��H*�H*M�^��A$���@H�{H�|$0�h���f.�H�}H�|$�Y���f�H���A�D$I�$1�����L���\����@��.�&����G��0<	����H�t$0H����D$H�\$�D$$����D@��.������G��0<	�����H�t$H�����R���Df��H*�^E���D��ߍF�<��f.�H����H�|$0����A��
�Z���H�t$0H���t&�U������ߍF�<�����f.�H����H�|$���PA��
������E���@H��D��H�l$01��V���D$DH�D$0�����@��.�������@��Eu/�wH�G�VՁ�u	H�D$H�G���0<	����H�|$��u�H��H�5nM������y���u
�}-�m���1�H����D$D�D$0�����CA�
���<X�f���H�GA�H�D$0�wH���K����EA�
���<X�?���H�GA�H�D$�wH���$�������������������7�|����H����3���7�����7������ATI��UH��SH��H��@dH�%(H�D$81�H9����F<t=<wH��IHc�H�>��DH�5�G�1��=_H�$H���D$I9��$�C<tB<wH��IHc�H�>���H�5QG�1���^H�D$ H�\$ �D$4H�H���A�D$H���t2H�EH�H�;1�I�$H�L$8dH3%(�H��@[]A\�fDI�$1���@H�;�
1�H�\$ ����H�D$ �DH�;H�\$ ��-������H�D$ �b�����oH�CH�\$ H��)\$ H�D$0��O�
H�������0������
��f/��*�\�H�\$ �H,�H�D$ H�|$ ?��H�H�\$ H�D$ ����fDH�}�
1�H���%��H�$�j���@��
,�f/����\�H���H,�H�$H�<$?�5����H�H��H�$�����H�>H����,������H�$����@�oH�FH��H��)$H�D$��N�
H����������f�L���H������H���8������H,�H��H�$�����H,�H�\$ H�D$ ����H�5J��\A�D$�����I�$�������fD��ATI��UH��SH��H��@dH�%(H�D$81��GH9����F<t6<w"H�GHc�H�>��F����DH�$H���D$I9����C<tB<w+H��FHc�H�>��f.��C����DH�D$ H�\$ �D$4H�EH3I�$1�H�L$8dH3%(��H��@[]A\��oH�CH�\$ H��)T$ H�D$0�AMH�������H�;H�\$ ��*������H�D$ �@1�f�f.H�\$ ��HE�H�D$ �Y���1�H�;H�\$ ��H�D$ �>���1�f�H��f.��HE�H�$����fD1�H�>H����H�$����oH�FH��H��)$H�D$�tLH���,������H�>H���*������H�$�_���@L�������������F���fD��t+H�$H���&�����t#H�D$ H�\$ �^���H��80u���H��80u��3����~��ff.���UH��SH��H��(dH�%(H�D$1�H9���F<t?<w+H��DHc�H�>��f.��F����DH�$H���D$�E1�H�;��H�E1�H�L$dH3%(��H��([]�f��oH�FH��H��)$H�D$�KH������f.�H�>H���(������H�$��1�f�H��f.��HE�H�$�Y���fD1�H�>H����H�$�>���H���H���3�����tH�$H������H��80u�������fD��ATUSH���FH�.<ta<tiH��<uwD�f�GH��D��軺��D�cH�E��~(A�t$�1��fDH�H���L�шH�JH9�u�1�H��[]A\�@H�l$�H,l$H���G1�H�/H��[]A\�1�H�5E���W������ff.�f���AUATI��UH��SH��H��XdH�%(H�D$H1��F<��H9���<t><wH��BHc�H�>��H�5�?�1��UWH�D$H�l$�D$$L9����C<t?<wH��BHc�H�>��@H�5i?�1��WH�D$0H�\$0�D$DA�D$H�EHI�$1�H�t$HdH34%(��H��X[]A\A]Àz��H9��EH�����L9��c���@H�������fD��
�f/��
�\�H�\$0�H,�H�D$0H�|$0?�\���H�;�
1�H�\$0���H�D$0�;���f��oH�CH�\$0H��)\$0H�D$@��G�
H�����������H�;H�\$0�{%������H�D$0���f�H�H�\$0H�D$0����fDH�H�l$H�D$�_���fD��
4�f/��
�\�H�l$�H,�H�D$H�|$?�$���H�}�
1�H�l$����H�D$����f��oH�FH�l$H��)T$H�D$ ��F�
H�����������H�>H�l$�$������H�D$���f�H��J9N��A�D$D�hH�8D���,����S��~ �r�H�;1��H���H�JH9�u�L9�tPI�$E�l$���f��H,�H�l$H�D$�%���@�H,�H�\$0H�D$0�]���@H��H���t���DI�<$H��t�H�D$���H�D$������AVAUATI��UH��SH��H��PdH�%(H�D$H1��F<��H9���<tD<wH�S?Hc�H�>��f�H�5<�1��SH�D$H�l$�D$$L9����C<t?<wH�?Hc�H�>��@H�5�;�1��]SH�D$0H�\$0�D$DA�D$H�EH#I�$1�H�t$HdH34%(��H��P[]A\A]A^�fD�z��H9��EH���E��L9��[���@H���0���fD��
l�f/��
�\�H�\$0�H,�H�D$0H�|$0?�T���H�;�
1�H�\$0���H�D$0�3���f��oH�CH�\$0H��)\$0H�D$@�1D�
H�����������H�;H�\$0��!������H�D$0����f�H�H�\$0H�D$0���fDH�H�l$H�D$�W���fD��
��f/��
�\�H�l$�H,�H�D$H�|$?����H�}�
1�H�l$�#��H�D$���f��oH�FH�l$H��)T$H�D$ �AC�
H���$�������H�>H�l$�� ������H�D$���f�I���B9F��A�D$D�kH�;D���|����S��~ �r�I�>1��H��� H�JH9�u�L9�tPI�$E�l$���f��H,�H�l$H�D$����@�H,�H�\$0H�D$0�U���@I��H���t���DI�<$H��t�H�D$�=���H�D$�������AVAUATI��UH��SH��H��PdH�%(H�D$H1��F<��H9���<tD<wH��;Hc�H�>��f�H�5a8�1��OH�D$H�l$�D$$L9����C<t?<wH��;Hc�H�>��@H�58�1��OH�D$0H�\$0�D$DA�D$H�EH3I�$1�H�t$HdH34%(��H��P[]A\A]A^�fD�z��H9��EH�����L9��[���@H������fD��
��f/��
�\�H�\$0�H,�H�D$0H�|$0?�T���H�;�
1�H�\$0�\��H�D$0�3���f��oH�CH�\$0H��)\$0H�D$@�@�
H���d��������H�;H�\$0�������H�D$0����f�H�H�\$0H�D$0���fDH�H�l$H�D$�W���fD��
��f/��
�\�H�l$�H,�H�D$H�|$?����H�}�
1�H�l$�s��H�D$���f��oH�FH�l$H��)T$H�D$ �?�
H���t�������H�>H�l$�+������H�D$���f�I���B9F��A�D$D�kH�;D���̯���S��~ �r�I�>1��H���0H�JH9�u�L9�tPI�$E�l$���f��H,�H�l$H�D$����@�H,�H�\$0H�D$0�U���@I��H���t���DI�<$H��t�H�D$荬��H�D$��A����ATI��UH��SH��H��@dH�%(H�D$81�H9��r�F<t=<wH�8Hc�H�>��DH�5�4�1��]LH�$H���D$I9���E<tB<wH�Q8Hc�H�>���H�5q4�1��
LH�D$ H�l$ �D$4H�MH�A�D$H��I�$1�H�t$8dH34%(��H��@[]A\��H�}�
1�H�l$ �+��H�D$ �@H�}H�l$ �"������H�D$ ��o]H�EH�l$ H��)\$ H�D$0�0=�
H�������O���fD�E�
��f/��9�\�H�l$ �H,�H�D$ H�|$ ?����f�H�EH�l$ H�D$ ���DH�H��H�$���f�H�>H���e������H�$�r���@��
T�f/����\�H���H,�H�$H�<$?�=�����oH�FH��H��)$H�D$�<<�
H����������f.�H�;�
1�H�����H�$���DL���x����)���H���h��������H,�H��H�$�����H,�H�l$ H�D$ ����_��ff.�@��ATI��UH��SH��H��@dH�%(H�D$81�H9��r�F<t=<wH��5Hc�H�>��DH�5�1�1��mIH�$H���D$I9���E<tB<wH��5Hc�H�>���H�5�1�1��IH�D$ H�l$ �D$4H�MH�A�D$H�I�$1�H�t$8dH34%(��H��@[]A\��H�}�
1�H�l$ �;��H�D$ �@H�}H�l$ �2������H�D$ ��o]H�EH�l$ H��)\$ H�D$0�@:�
H���#����O���fD�E�
�f/��9�\�H�l$ �H,�H�D$ H�|$ ?����f�H�EH�l$ H�D$ ���DH�H��H�$���f�H�>H���u������H�$�r���@��
d�f/����\�H���H,�H�$H�<$?�=�����oH�FH��H��)$H�D$�L9�
H���/�������f.�H�;�
1�H������H�$���DL��舸���)���H���x��������H,�H��H�$�����H,�H�l$ H�D$ ����o��ff.�@��UH��H��SH��H���v�V���WH�81�Hc�褦��HcSH�H�M�L�HcCH��1��CH��[]�ff.�f���AUI��ATI��UH��SH���Z^1�I�}�sHc��B���H�EIc}IcT$I�4$H��ٺ�H�UHc��1��]�EH��[]A\A]�f.���AVI��AUI��ATUSH��H��PdH�%(H�D$H1��~�D$�D$���z��A�EA�n�I9���I�}���\���T�u1�肥��Hc{H�IcVI�6H����H�����k�t$��tA�}vL���Y6�L$��tA�~vL���B61�H�L$HdH3%(�SH��P[]A\A]A^��H�T$H�t$L���KA�~tH�T$H�t$0L���JD�D$E����I9����T$�l$��trl$8L�t$0L�l$�k�}Hc��>���H�MceH��H��I�uL���5��IcVI�6J�|%�$��HcC�C�D����f��D$�l$��tL�t$0�AnL�l$�D�����C1�H�=�
螦���C�H�5nH�1��DH�;�p���@�|$���9���L�t$0�/���f��{�v���H����4�����T��@��ATI��UH��SH��H��PdH�%(H�D$H1��~�D$�D$uE�zuWI�<$H�3�c���EH�H�E1�H�L$HdH3%(��H��P[]A\�f.�H�T$H�t$L���NI�{tH�T$H�t$0H���6I�T$�D$���~D�d$$H�|$��t7H�t$0H�\$0�ة��EH�H�EA��w4�{�e���H����3�X����H�3訩��EH�H�EA���;���H�|$�3�D$��u��$���DI�<$������H�t$0H�\$0�]���EH�H�E����ff.����ATUH��SH��H��@�odH�%(H�D$81�H�FI��)$H��H�D$H�� ��vL����3H�E�o]H�l$ H��)\$ H�� H�D$0��vH���3L���R���H���J����$�\D$ f���Cf.�z)u'1�H�1�H�L$8dH3%(u H��@[]A\��1�f/���H�D��������1��D��AUA��ATI��UH��SH����h��t?1����9�hv-H��`��L��H�<������tܸH��[]A\A]�@1�E��u�L9�t�H�UH��t�I9�t�H�RH��u�H��D��[]A\A]�ff.����AVAUATUH��SH�� dH�%(H�D$1��G<�1���<��<��L�/Hc���bA�E�P���v< ��L��B�/fDH�����)ލP���v�< t�PՁ��RH�\$I��A��QЀ�	��<0�������C�
���<X��I�@�H�D$A�HI���f.������H�|$dH3<%(�
H�� []A\A]A^�f.���!�X1���@H�1��G�f�H��������H�H9�tH��H�1��H���GH�1��p����
I�@��0uf.�I��H�D$H���H���0t�E1ɍA�<	�-���lHc�L�$3��
�|A����M9����������Hc�I�|=���L�H)��"��z���aA�H��H9�����r��у�vԍr������Z�O�AA���@��.u�A�@��0<	�{���Hc�L�$3H�t$H���w�L;d$��Hc}L�m���L���@M��tL���˝���H�=�=�j����EH�E1������L�CL�D$���f�I��A��L�D$A���Hc�L�$3��
�e���H�t$H����L;d$�e����Xq�E�EL���8���1������rЃ�	wM��9uC�0A����D1�H���ƿ�H��������H9�t'H���EH�E�f����1��I���@H����EH�E�|���@�E�xHc��z���HcUL�uH�xI��H��L���p����]Hc�A�DA����A���a�1D�A�EL���Z���L�m1��������߃�A�������Hc�L�$3���D��.������߀�Eu.A�@I�p�HՁ�u
H�t$A�@��0<	���L�D$M9��P���A������I�|$�H�5
)�T$�a��T$�������u	�;-�����1�H��� ��J���A���(���A�x�7�������A�EA������L���l����(��A����ff.�@��ATI��USH�� �WdH�%(H�D$1���t0��tc�������t9H�t$dH34%(�_H�� []A\�@��\1����@H��H�H9�t>H��H�1���GH�?��uFH��t
�D$訚���D$I�$����A�D$�x����H��
A�D$I�$1��_�����H���J���v�� u%�4f.�H�����)؍J���v� t�JՁ���H�\$H���7�NЀ�	����0u	����
H�O@��0uDH��H�L$H���q�@��0t�E1��NЀ�	�����/H�H�,��
�6A����H9�t"@1����f�H�{H�|$�a���H��1��8��I�<$H��H��t�g���H��H9�����H��A�D$1�I�$�&����@��.u��W��0��	w�H�H�,H�t$H����H9l$�h���I�<$H��t�D$���D$�\A�D$1��A$���H��A��H�|$A���H�H�,��
t�H�t$H���!�H9l$t�1��z�����ߍN���v�H�H�,����@��.�S������@��Eu/�wH�G�NՁ�u	H�D$H�G���0<	� ���H�|$H9������A�������H��H�5]%�T$贺�T$�������u	�;-�{���1�H���s�����K�
��߀�X����H�WH�T$�wH�׺���A��������7��������a���7����f���SH���S���1�H�;[������ATI��US��H�H9�s:H�����1�D�L
L�G��E�H��H9�u�L�L���[]A\��H��L���[]A\�f���U��SH�H��H9�s!H��褛�@�H�H�����S�H9�u�H��[]�@��U��S��H�։�H��9�HF�)�����D�H��[]�@��ATD9�H��E��U��S��H��AG�9݉�HF��ס��uD9��AG�)�[]A\���AVA��AUA9�A��ATA��MF�UH��SH��I��+f��ۚ�H��H���K�H��E�����9�uL9�u�D��[]D)�A\A]A^�f.�[)�]A\A]A^�D��AWE��AVA��AUATA��UH��SH��H��D9�AG�A��A9�MF�I��+f��K��H��H���K�H��E�����9�u&L9�u�E9�D��EG�H��[]D)�A\A]A^A_�DH��)�[]A\A]A^A_�����NH��wH�?�[���ff.���ATI��UH��SH��H��PdH�%(H�D$H1��~�D$�D$u]�zuoH��H������T$A�D$H�I�$��t
�}���D$��t�{wp1�H�L$HdH3%(u{H��P[]A\�DH�T$H�t$H����:�{tH�T$H�t$0H���:�L$�T$��tH�l$H�D$0��HE��^���DH���p%�fDH���`%�e����֯�fD���ND�H��wH�?�X�������NH��wH�?�{���ff.����ND�H��wH�?�������AWI��AVAUI��ATI��USH��(D�vdH�%(H�D$1�E����H���P���v< uA�f�H���A��A)ލP���v�< t�PՁ���H��H�\$��QЀ�	��<0�AA���7�C�
���<X�(H�G�H�D$�OH����@��.u:A�@��0<	w.Hc�H�H�t$H��H�L$�6�H�L$H9L$�fDL��L���U���H�H��u.I�EA�EH�D$dH3%(�H��([]A\A]A^A_�f�����H�D���H�{H�|$��QЀ�	������.u��G��0<	w�Mc�I�H�t$H�����$L9t$�e���A�A�O���S���I���P���v< u �4fDH�����)ٍP���v�< t�PՁ���H�\$I��A�0�VЀ�	�������~<0���
I�@@��0ufDI��H�D$H���p�@��0t�E1ɍF�<	�t���KHc�Hك�
��A��~A���rA�x�7�gL9��x���1�H���γ�A���t1�H9�A�E��H��H9�HL�I�U�Z�����
H�G��0uf.�H��H�D$H���H���0t�1��A�<	vB����Mc�Iރ�
�2����L9�����1�H��A��(��H���a���H����H�|$���Mc�Iރ�
����H�t$H����$L9t$��������f.���߃�A��v�Mc�I��p���f.�L�CL�D$�8���f�I��A��L�D$A���vHc�Hك�
��H�t$H��H�L$�(�H�L$H9L$������lf��H*��$�\�f�f.�z��1�f/���H�D�������.�-�����߀�Eu,�GL�G�HՁ�u	L�D$�G��0<	�����H�|$L9��r����������H��H�5>�T$蕱�T$���q���u	�;-�f���1�H���T��$����f.�1��+���f�@��.�������@��Eu.A�@I�x�pՁ�u
H�|$A�@��0<	�����L�D$L9�����A���D���H�y�H�5��T$���T$���$���u	�;-����1�H����A����f���H*��$���f.���߃�A@������Hc�H����D���������7�L��������C�
���<X�$���I�@�H�D$A�pI���	�����$$f.��������f(��7�fT
�f.�����������A�0�������f���1�H��Nff.���SH��1�H���CH��H��� H�H�[�f���H�H�6������AWI��AVAUATUH��SH��H��hD�c�VdH�%(H�D$X1�A��A�ǀ��#E���H�VH�CH���H;���~H�r@H����L�$H���L�$�PH��I�ŀ�A��E!�E��E����A������IH�CH�H@H����L�$H����UL�$H��I��D�cA����A����H�MH�CE1�H���H9��A�Ƅ���1҄��A����E���f�9EA�@�VH�EL�$H��H����"DE1�E1��.���E����A�@I�@H�t$XdH34%(D����H��h[]A\A]A^A_�f.�D�cE1�����A����E1�E���7���I9���H��L�$赟��L�$�I9����C<�><�#H�|Hc�H�>��f�H�MH�CA�H���H9���]���D�cA�E1���A�@�K1�H�=S�H�L�$��L�$H�I�L�l$@M��t)E�]E����A�}v
L���lL�l$@L������L�|$@M��t)E�WE���OA�v
L���9L�|$@L�����E1����@����A������H��H��L������L�l$@M���i����H��80�WH�D$@H�\$@�D$TA�@H�U1�H�H9�tH)�1�H����H�D�I�L�l$M��t(A�m����A�}v
L���L�l$L���5���L�|$M���;���A�_����A�����L���HL�|$�
���fDE1�A��E1�A�����������I9��������D��t�I9���������FH�
Hc�H�>��DE1�E���������u�A�@�u1�H�Z�H�}L�$������@E���7H������L�$����H��I��H��L���o(H�@I�GH�CA/�U���L�$������UL��D�c�����A�@I�����L�l$@M������E�uE����H�|$@�O>�����f.�H�|$�6>���\����H�|$�&>������H�|$@�>���R���H�E�80��@H�D$ H�l$ �D$4�h����I9������8�����M���H�m�E�P���v< u �4)DH���E��)�P���v�< t�PՁ��9H�l$@H���>�WЀ�	�0<0u	����A�
@��0u�H��H�t$@�>@��0t�1��WЀ�	�y	A���^	A��
��	����D��H��1�L�$���H�l$ �D$4L�$H�D$ D�c�%DL��L�$��L�$���E1�����A�}v
L���AL�l$@L���������H�}L�$H�l$ �L�$������H�D$ �n���1�f�f.EH�l$ ��HE�H�D$ �H���f.��o]L�$)\$ H�EH�l$ H��H�D$0�|H���4���L�$�	����o#L�$)d$@H�CH�\$@H��H�D$P�EH�����L�$���@H�;L�$H�\$@���L�$������H�D$@�g���f�1�f�f.H�\$@��HE�H�D$@�9���1�H�}H�l$ ��H�D$ �]�����E���=������#���H�D$ H�l$ �/����1�H�;H�\$@��H�D$@������C��������������H�D$@H�\$@���f���tL��L�$诒��D�cL�$fDI9��wA����H�
�A��Hc�H�>���H�D$@H�\$@�D$T�E<�ID�c<��<��A����A�@I�L�l$M��t,@A�}���,A�}v
L���L�l$L���`���L�|$M������A�w����A�v
L���wL�|$L���*�������H��D$TH�\$@H�D$@�A����K���#���H���P���v< u �4fDH�����)ٍP���v�< t�PՁ��H�\$H���7�VЀ�	��<0u	����A�
H�G@��0ufDH��H�D$H���p�@��0t�1��VЀ�	�(A���
A��
�j���y��u
��7�jH�t$H��L�$��L�$�D$@�D$TD�eA����H�EH�\$@f���H*��\�f��A�@f.�z��1�f/���H�D�I�L�l$M���3����V����o;L�d$@L�$L��)|$@H�CH�D$P��
L��膍���|$TL�$�+D�c�E<�����A����A����A��t
A���A�@I�����L�l$M�����������������H�E�D$4H�l$ D�cH�D$ ���f.���t�����fD�E1�A�H;������7���A���t���<�b�������f�E1�����A�������L��L�$�
���L�$E�`���@H�|$�6���	���f�H�|$��6������I�L�l$@M���������fD�ouL�$)t$ H�EH�D$0H�D$ I��H��H�D$�L��
����|$4D�cL�$����H�l$���A�D$�<�j����E�A�������f�$f���H*$����D$4H�l$ D�cH�D$ �h���A�@�H�3H9u���������H�����1����L���w���A�@I�����L�l$@M��t&E�eE���,A�}vL���RH�|$@���A�GL�|$@����A�vL���(H�|$@��~����@��.����G��0<	���H�t$H��L�$�/�L�$���H�{H�|$����H�uH�t$@���@��.����F��0<	����H�t$@H��L�$���L�$�D$4H�l$ D�c�D$ �2���A�@I�L�l$M��t%A�M���A�}vL���QH�|$�~��L�|$M��t%A�W����A�vL���"H�|$��}��A������}�H�E����H��H��L�����L�l$M��t&E�ME����A�}vL����H�|$�}��L�|$M���(�E�GE������A�vL���H�|$�R}�����߉��A�����H����H�|$����A��
����X�����߉���A�������H����H�t$@����A��
�w���H�t$@H��L�$�W�L�$�r���H��D��1�L�$�}��H�\$@�D$TL�$H�D$@����@��.�*������@��Eu(�~H�V�OՀ�u	H�T$@H�V���0��	�����H�|$@�������H��H�5�	L�$���L�$������u
�}-����H��1�L�$H�l$ ���D$4L�$�D$ D�c��H�|$@�2����H�|$@�2������@��.�������@��Eu(�wH�W�NՀ�u	H�T$H�W���0��	���H�|$������H��H�5�L�$�)��L�$�������u	�;-�����1�H��L�$����D$TL�$�D$@D�eA���=���A����A�������D��A��n���H�|$�1���=���H�|$�1�����H�|$�1���q����EA�
���<X�;�H�FA�H�D$@�~H��� ��CA�
���<X����H�GA�H�D$�wH������R���������~�7�������H�\$@����>���H�MH�q@H�����A�����H���tc�L�$�z���SH��I��H��L���oH�@I�EH�EAU���L�$���t(A�UL��A��E!�E����f�A���E�}A�@I�L�l$@E�����A�}vL����
H�|$@�y�����7�!������SH�������tH���F���H�;uH�1�[�DH�1�[�D��SH���c����tH������1�H�;tH�[�D��SH���3����t#�C<t&<u:f�f/�CwH�1�[�f�H�;�Cy�H�1�[�1�H�5?�������[�ff.���SH�������t#�C<t&<u:f�f/�CsH�1�[�f�H�;�C�H�1�[�1�H�5���u�����[�ff.���H��(H�H�7dH�%(H�D$1�H��H�����$���tH�L$dH3%(��uH��(�����脓�@��S�G�9t9H�NH��H���H��tH��H��H���H�H�[�@H�[��H�[�ff.�@��SH��H���C�B8Fu6<��L�Y��H��Ic�L�>��f�H�FH9G��H�1�[��H�6H�?�H���	���u�H�1�[�f.��1�f.���HE�H�1�[�H�H9����H�1�[�D������H�1�[�f�HcW;V�a���H�6H�?�ȁ���N����v���H������[�f.�H�`����u�9����H�1�[�H��H��H���Q���1�H�;��H�1�[Ð��H��(H�H�7dH�%(H�D$1�H��H���w�������t
1�H�<$��H�L$dH3%(��uH��(��g�����SH���G�/������t1�H�;��H�1�[�f.���H�`��S1�H�S�
H��H��`����C[�f.�@��SH�����t��H�CH�CH�@H�[����U��SH��H��XH�T$0H�L$8L�D$@L�L$H��dH�%(H�D$1��G9��~H�D$p�$H�D$H�D$ H�D$��~?�I��H�|$p�"�Ѓ�L�H�H�C�H�pH�sH���t��/v�H��H����H�D$dH3%(u?H��X[]�f��F1҉GH�H�H�4��Ut��HcH�CH��H�C�S����̏�ff.����H��XH�T$0H�L$8L�D$@L�L$HdH�%(H�D$1�H�D$`�$H�D$H�D$ H�D$��~M�I��L�L$`�,fD�Ѓ�L�H�H�GL�@�L�GH�@�H��/��t��/v�L��I����@H�D$dH3%(uH��X����ff.���H�H��t�.s��fD����Hc�ƒ�xRAUATI��UH��SHcډ�H)�H��L�,��H��fDH�EH�<H��A��L9�u�H��[]A\A]�f��ff.�@��ATUH��S���~�����t8HcE�ƒ�x-Hcډ�H)�H��L�$��H�EH�<H���gr��L9�u�H�E[�EH�E]A\�ff.�����f���SH������q��H�CH��t�C@1�[ø����[�ff.�f���AUATLc�UH��SH��H��Hc�wH�G9�|#��@1҉wHc�H��H����q��H�CH��t;HcL��L�,��lq��H��I�EHcH�CH�<�L���b���P�H��[]A\A]ø������f���Hc��~H�WH�T�1�H��fD1Ҹ������������1��H����H�W�H�H�<��q��1�H��Ð��H��dH�%(H�D$1�H��������tH�$�H�T$dH3%(uH����{��ff.����1������f���UH��SH�����~1�H�EH�<�H���wp��9]�H�}H��t�dp��H��1�[]�ff.���H�G������f���AUATI��UH��SH����tG��u�1ۅ�H��[]A\A]��H��9]~�H�EH�<�A�ԅ�t�H��[]A\A]�DHc�ƒ�x�Hcډ�H)�H��L�,���	H��I9�t�H�EH�<A�ԅ�t�H��[]A\A]�ff.�f���AVAUI��ATI��UH��S��t>��u�1ۅ�[]A\A]A^�H��9]~�H�EL��H�<�A�ԅ�t�[]A\A]A^�@Hc�ƒ�x�Hcډ�H)�H��L�4����H��I9�t�H�EL��H�<A�ԅ�t�[]A\A]A^�f.�f���H��@�@���G$����wH�S�Hc�H�>��DH�?H��u;��H�G�`�H�H��t�H��`�H�ˆH9�t�SH��H����H�;[�Pn��H�?�������O����	�H�ੰu�@u"�f�H�5��1��=DH�?頋���ATUSH��dH�%(H�D$1��G��<w)H�����H��Hc�H�>��f�H�G�f.�H�D$dH3%(��H��[]A\�H�`�H�/H�H9�t˿H�1m��H��I���&�E1�1�L��H��XZ���H��H��L��H��p3[A���L�#�H�?���s����wH�?�o��H��]���踈����1��D��USH��H��H�/��l��H��oEH�UH��H�PH�� ��vH�����H��@H��@H��[]����H���H��tH����1�H���1��ff.�f���USH��H��H��tH���n��H�EH��H��H�5O5[]靉�ff.�f���H��t'H��H���
1�贎�H��`��� 1�H���H�`�ǀ �1��ff.����USH��H��(dH�%(H�D$1��G<t+<to���H�D$dH3%(�lH��([]��H��@��H�=���UH��BA���BA<���H�=e��UH��hA�DH�D$H�GH���H����H�T$H�t$1��H�0�H�t$H�H����H�=�1���H�|$H��t��j��H�CH�@pH��tJH���H��H��t=�@A���CA<v#H�@��H�=����kA��DH���x�kAH�@��H�=7������f.�H�;�H�H�=��UH��hA���DH�0�H�50�H��-����ͅ�H�5������AWAVAUE1�ATUH��SH��XdH�%(H�D$H1�L�d$8L�t$(L��L�|$@�E�H�D$$H�D$H�D$0H�D$�M���uH��0�H�t$@H�=��1���H�=�A���H�D$(H�8���L��H���"�L��L��H���$���uxH��@�H�E��t�H�=
g
��H��H�=i���H�T$H�t$E1�M��L��H���'����V���H�T$0H��H�T$�,t�H�T$��H���O���H�D$HdH3%(uH��X[]A\A]A^A_��t��@��AUATA��USH��H���gl��貣��H�H�P�H�H�SH�0�H�H�@�H�SH�H�CH���WH��X�H�H�SPH��H�H�C H�S(H���9H�H�H�H�S0H���H�H�C8H�S@H�a�9H�(�H�H�SHH���H�H�SXH�`�H�H�S`H�8�H�H���H� 2YH�H�@�H��@VYH�H���H��@�aH�H���H�H�P�H���H�=B����H���9>H���9���H�à��HH��H���χ�HH��辇�E1�1�H��H���ZA��dH��h舳E1�1�A�H��H���Z�
�e�E1�1�A�H�p�[H�ǀ��2�B����1�E1�A�H��H��h�H�@9Zf�P1��@��H���H�@ H�@(H�@0H�H�@H�@XH�@`H�@hH� �H�@0H�@XH�@`H�@ H�@(H�H�@H�@h�u�����H�`�f��r�ƃqƃ�Hǀ8Hǀ@�v�I�ŀɔ�H�=���H���@I�E�vh��I�}�H�E����H��E1�L��H��jA��	H�5���
�^_�S��1ҾH�=���@�����E��u�EH��1�[]A\A]�@�+7��f�H�X�H�
����H����f.���1�H�=�V9�Fff.���USH��H��`�H�����H�ǀ���H�à�H���D�H���8�H��h�,�H��h����[�H�=��9��H�����H�����H��H���H��H�ρ��J�H��[]�o�ff.�@��SH�����oH�;�%o�C[���AWAVAUATI��USH��L�/L���o�M�t$H��L����n�M�|$ H��L�����n�M�d$H�D$L����n�\$Í{���ATM��M��AWH��H�
��H��H������1��tr���9H�=��9�\�s�{��H��H��H�~�9�I��k�9H��(H��[]A\A]A^A_齀�ff.�f���H�E�9�@��H���sp�����H����D��H�� �[H�ǀ���f���H���dH�%(H��$�1�H�`�H�|$H��HǀxH��H�T$�C������t3H�`�H�L$H��H��$�dH3%(u"H����DH�ƀ�[H�ǀ��E����}�ff.���H���dH�%(H��$�1�H�`�H�|$H��H��H�T$螅�����t6H�`�H�L$H��H��$�dH3%(uH������K�����4}�@��SH��dH�%(H��$�1�H�`�H�|$ H��HǀxHǀ�H�T$H��������u�z�H��`�H�D$H������H��H��$�H��H�D$貄�����tzH��`�H�D$H���H����H��H��$�H��H�D$�k������tCH�`�H�L$H��H��$�dH3%(u$H�Đ[�@�Kn���|���fD�kA���{�@��SH�À�H�5��H����H���[H��[�5�D��H�U�9H��t��fD����H�-�9H��t���������AWAVI��AUATUS��H��xH��$�H��$�L��$�L��$���t@)�$�)�$)�$)�$ )�$0)�$@)�$P)�$`dH�%(H��$�1����������	������E1�H�-������I��`�H��$�DŽ$�H��$�H��$�I��8H��$�DŽ$�0t
A��0��H�P�L��D��H��L��$�������H��$�dH3%(��H��x[]A\A]A^A_����t0��t(E1�H�-��8������t~Y��t��@u���m�����{���E1�H�-������������H�����A��H��H���HD�������C�E1�H�-����������Em����t��@�����������@������������ ������1]��I����H�D$`I�W�AoH�P�]��I�W�Ao�H�D$XH�P��\��I�W�Ao�H�D$hH�P��\��I�W�Ao�H�D$pH�P�\���Ao'I�W1�H�D$xL�|$`H��$� H�PH��$�L��L���o�$�H��$�H�`��$��H�T$XH��A�GH�D$`�@Hc�H�H�D$X�@�g�L�|$hH���A�G�^��D��I�H�D$h�@H�D$pH�0H�D$p�@H�D$xI���H�H�|$x�G�!��(��[��I��H�D$XH�D$I�H�D$`H�D$I�GH�D$hH�D$ I�GH�D$pH�D$(I�GH�D$xI�G H�D$0I��8IDž8H��$��@k��I�à��D$���%L�T$PL�\$81�M��I��jL��A�jH��$�L�T$P�(9��ZY��L�\$8��H�D$PH��t!�xL�T$@�8L��L�\$8����L�\$8�|$t	H�D$HI�CPI��8��H��$����L����Z��H�|$���H�|$�w��H�|$ �m��H�|$(�c��H�|$0�Y�����@���ADž(��pg���+����������������������i��H����i��A�����I�CPI�CPH�D$H����f�I����$���H�P�L��D��H��L�\$8L��$���L�\$8����H��$�I��8�	���@H�8�����H�P�L��D��H��L�\$@L��$���L�T$8�L�\$@L�T$8����tu�@��AUATI��USH��dH�%(H�D$1��G<��H��H��<�uH�5����Hc�H�>��H�GH���H�����H��Ѕ�tkH�EH������eH����WH����H�5�H�PH�`�H����1������+����C1�H�=���[��H��CA�$H�D$dH3%(��H��[]A\A]������H�H���1�H��1��:x�C�D�oH�GH��H�C�����H�?�[����C�H�=���Z��H��S���fD�C�H�=hw�Z��H��-����oMH�UH�S<vH������{����H���o�����D�H��H�����������H�EH�������H�@@H���r���H��Ѓ@�xH�$t#H��L��H�����A�$��tH��������H����
���/���H�$D�kH��k�oH�PH�S�@��
��D�k�kA�$�L�����r�ff.���ATI��USH��H��H��@dH�%(H�D$81�H�l$ H�T$H�������T$��tA�D$(H��tf��H�;A�ԋD$��u=�CH�L$8dH3%(u\H��@[]A\�f.��C��t։�H�;A�ԋD$��tÀ{v�H�����f��|$4v�H��D$�}��D$���q�f���H�@���H��H�8�������AUATA��UH��SH��H��(dH�%(H�D$1��F<t1<tm����H�D$dH3%(�XH��([]A\A]�f��H�=���H��BA���BA<���H�=����H��hA�fDH�D$H�FH���H����H�T$H�t$1�H���L�l$M����L���l`�L����H�=�����H�|$H��t�U��H�CH�@pH������H���H��H�������@A���CA<vP�H�=���ՀkA����H�31�D��H���pH��hA����@�
H�=�����h���D�D��H��H���5�kA����'p����H�@���H��H�8�8����AWAVAUA��ATL�%F�U1�SH��H��H�4$�L$/dH�%(H��$�1���~����L���A9�u�H�=m�L�|$P��H�<$L��L�%���H�H�D$@H�D$H�D$XH�D$H�D$<H�D$H�D$HH�D$ H�t$H�<$L���_�A�ƅ���A�mA���|f.�A���L���A9�u�H�=����H�L$H�T$E1�H�t$ H�<$M���Q�������uiH�l$pL�L$X1��L�f���H���yb�H��H����������!�%����t��H������D�H�VHD��H��H)�ӾH�=����H�D$@A�UH��H�0����H�=,���H�<$L���>�����f��D$<�|$/H�|$H�p�t�H�L$`H�T$h�^���L�t$`��L���]�L�����H�D$hH���p������h����8*tr�H�=9�
���P���f.�1�L�%�E��~f����L���A9�u�H�=	4
��H��$�dH3%(u%H�Ĩ[]A\A]A^A_þ
H�=��
�������Sm���H��H�5#K�1���fD���ff.���H��H�`�L��M��t5H� ������L��ƀlHǀ�Ƃ�Ƃp�QV���H��H�5D�1�����������o�ff.���AWAVAUATUSH��H��`�H��$�L��$�L��$�dH�%(H�D$x1�H��0H�D$H�D$`H�D$0H�H�D$8H��$�H�D$hH��$�H�D$p����H�D$HA��I��A��H�D$ H�D$X1�H�D$H�D$PH�D$H���H�D$(��ƒ�HT$p�D$`L�:M���tH���D��L���H��0I�wH��t?H���D$XH�t$�
[�H��E1�H���jH�L$�PA�H�t$ �b�^_L���H��H��0H���0H���H�M���EL�#��H���H����H��@����O��H��@A�1�I��H���Hǃ�M��H�D$XH�D$I�H���H��jjH�L$(��,��ZY����H�|$Pt
H�|$�|��L����N��H�|$�j��H���tH�|$(�V��Hǃ�M����H��0�S��H��0�N����A9����D$`��/�Y���H�T$hH�BH�D$h�T���fDA��u�H�D$0H��0H�D$8H�������@H�L$ H���H���H�������H�;H�?�g������H�D$H�T���fDH���H��td�/x���f.��x����fDH�D$0H��0H�D$8H�1�H�L$xdH3%(u(H�ĸ[]A\A]A^A_��H�|$XH�����-i�ff.�f���UH��SH��dH�%(H�D$1���\����tJ�\��H���\��A��H���1�1�H��I��H����lH�$H�T$dH3%(u2H��[]�fD����H��E1���t����H�����A����h�fD��H�?�L��@��H���C��H�5,��H��H��1����f���AUATI��UL��SH��dH�%(H�D$1�H����L�,$�HH�Ӊ��L��H��XZ1�1�I�EH�$E1�H�x袗A��$���t#H�$H�RH�@H��fD�@H��H9�u�I�T$1��H�5p�����H��H�L$dH3%(uH��[]A\A]��vg�fD��AWAVI��AUL�,�ATUSH��L9���fDI�I��H�D$H�@�������L�`M����DI�,$H��tI�� A�D$���<u�M9��}L���	H��I9�v�L�;H��I�GH�p ��e��u�H�D$M�~�H�I�F�H�D$H�@������a���L�`M���T���I�,$H��u�M9��?���H��[]A\A]A^A_�I�,$H���\�����f���AVAUATUSH��dH�%(H�D$1��A��u)1�H�\$dH3%(��H��[]A\A]A^�fDH�ˋ
I����/wsH�B�q�ω2L�$8��/w}��H�
�L�0��I���sH�;�@H�Ń��@�pH�$�L��H�4$L��H�E�FI�UA�V H���x���Z���H�JH�AH�BL�!H�HH�J��re�H�B��ff.����AWAVAUATUSH��(D���dH�%(H�D$1�E���>H�_I��LJ�H����H�+H����H�D$H�D$�@H�� H�+H��t|�{u�H���^T�xI��I����H��H��D��H��蒱��H�ǀ�H�L$D��H��H��舱H�����H�D$���������H��H�� H�+H��u��I�|$`tI�D$pH��tI�|$h��I�|$0t_H��`�L���A��$�A��$�A�T$0�Ń��tpHǃ�H�L$dH3%(D��u}H��([]A\A]A^A_��E1����#H��I�T$ H�1�H�5��� A������B�ADŽ$��I�T$ �1�A��H�5u���Hǃ��p����c�@��AVAUATUSH��PH�T$0H�L$8L�D$@L�L$HdH�%(H�D$1�H�`�H��(H�B�9��H��$��$H�|$H�|$ H�|$����H�H��H��H)ύN�H)�H�_�L�t��/�ƒ�HT$�$H�+L�"�}u�}w)H��I�,$L9�t|�$��/v�H�T$H�BH�D$��@��F���oEI��H�EH��I�EH�� ��vL�����A�EL��H��A�EH�C��hL�k�I�,$L9�u�fD1�H�t$dH34%(uH��P[]A\A]A^ø�������b�D��H�`�AVAUATUSH��H��(H�B�9�������H�H��H)F�L�b�L�t���H��H�k�I��L9�t_I�,$�}u�}v߿�E���oEI��H�EH��I�EH�� ��vL�����A�EL��A�EI�$�hM�,$�1�[]A\A]A^ø������ff.���H��XH�t$(H�T$0H�L$8L�D$@L�L$HdH�%(H�D$1�H�`�H��(H�A�9���H�t$`�$H�t$H�t$ H�t$��~hHc�H��L�D$H��H)�H��w�H)�H��H�|�H�t$`�f��ʃ�L�H�H�H��H9�t��/v�H��H��H�H�H��H9�u�1�H�|$dH3<%(uH��Xø�������;`�ff.���SH��dH�%(H�D$1�H���o��H������H�$H��H�5A�I���1��j�H�D$dH3%(uH��[���_�ff.�@������H�,���Hc�H�>��H�����H��P
��H����H����H�׏��H�����H�����H�����H��

������C�����H�GH���H��t��f.�H��1��H�5>��I�1�H���f�AWAVI��AUI��ATUL��SH��H�|$L��$�H�t$H�5ĂL�D$dH�%(H�D$81�I�I�L�!L����H�L�D$H����L)�H��A��{�D$�PB��L���H������I�ă����u�8pare�I�}H�T$0���
����uH�D$0H�H�EL���.B��H�uH����L�f0M��tL���Р�������T$I�E)�Hc�D�r��z�H�\D�t$�A��H��D��A�^H���c���I�ʼn�H�L$(L��L���^�1ۅ���t}H�D$H�8tH�EH��tH���H��tI��L���A��H�L$8dH3%(���wH��H[]A\A]A^A_Á8self�����H�`�H��PH�E����DH�D$(I�L�eM��t�H�L$H�9��D$�{���H�|$(�G���t���a���H�`�H�H��P�<����B���H�D$H�8tH�EH��tH���H������1�����f�E�(A�}D�l$H���\@��D��L��H������I��M����M�f0L�u���D1�����f�f�xnt���H�`�H��0H�z����H��PH�����H�@����f��@����D$�K���H��`�H��XH��t!���L��H��蘞������H�D$(L�eH�HI�T$H�5�1���������fDH�`�L��8���DH�D$H�H��t+H�8�3���H�|$(H�ƋL$L���߽�������~���f�H�`�H��P��H�L$H��XH�H��X���H�T$(�H�5|�L�@1�H�JH�UH�R�=������Z���ATI��UH��SH�GH��H���H��t1�Ѕ�u[]A\�f�H���x���[H�PH�U�@]A�$�A\�ff.�@��AWAVAUATUSH��8I��`�dH�%(H�D$(1�I��$(H�B�9��=��~VH�H��H��H)G�L�|�H�D$H�$H�D$ H�j�H�D$@A��$�tH�}f�t:H��H�k�H��L9�u�1�H�L$(dH3%(��H��8[]A\A]A^A_�@H�$H�t$�����A���=��H�T$ �H�5t�I��H�E�oAEH�@I�E1�A�EA�E���H�EH�@H�xt9E��t$H�}H�G�PH��A�EI�U���L�m�6���H�|$ �6=����@H�T$ H�5D��1��X��뭸����������X����SH���H�<��H��XZ1�1�H�E1�H���U��C1�[�ff.�f���AWAVAUA��ATI��UH��SH��H��`�L�L��P�N���M��H��H��PH�5��L��1��۞L��PE��uH��[]A\A]A^A_�L����H��L��[]A\A]A^A_�2<��f���AWAVAUATUSH��H��xdH�%(H�D$h1��$t5H��Pt+H�D$hdH3%(��H��x[]A\A]A^A_��H�`���luxH���H�pPL�pPH�t$I�H�ƀjZ�H��X�!�H�ƀjZH�{x���H��PH��t@H�ƀjZ���H�D$I��C$�S���fDH��PL��PH�t$�H�{H��t���HL�d$8L�l$@��:��H��L�|$HH��PH���êH��PH��XZ1�E1����Y�L��H���N�H�t$4H�D$PL�t$(H�t$H�t$`I��H�t$���H�T$E1�M��L��L��H��觫H�D$@H��xtIH�{H��t@�T$4H�t$HH�L$XH��H�L$ ����uH�D$XH�T$@H�H9�����9��H�T$@H�D$`H��oH�RH��H�PH�� �@�@��vH�����H��H��PE1�A�jH�L$ �T$DH�t$X肇XZL��H���u�L��L��H���w��������L�t$(H��P����fDH�CH�L$ �T$4H�t$HH��P�
����2���H�L$XH��E1�A�H��@H��@H��Pj�T$DH�t$X��Y^�d�����T�ff.�@��ATI��UH��SH��H�� dH�%(H�D$1��F(��t+��H�mtH�NH���HD�H�5���1����H������EH��8H��t1H��ЉEH�U1�H�L$dH3%(��H�� []A\�fDH�|$H�����EH�UM��tH�D$L�`�@H�l$�HH��x�8��H��H�E�H�T$H��XZE1���H�z1�荃H�D$H�L$H��p3[A�H��H�x�ڜ�P����S���1�����D��H��ɔH�0����ff.�f���H��1��H�5�����������H���ff.���AUI��ATI���U��SH��H��dH�%(H�D$1��7����I��H�$I�<$�@D��f�pL�(��-u	D�SL�CA�B�<	w��H�t��>tFH��H����E1�jA�H��誄ZYH�t$dH34%(��H��[]A\A]�f���vA��0t�H��L)�H���A��0I�HMc�H9�tuA�@D�@�A��	w�f.���0O��H��H�N�@H9�t�D�@�A��	v��R������-t3M���<���H��A�E1�L�ֹ詉�<�����-u��L��H������I�����Q���ATI���U��SH��H��dH�%(H�D$1��5���1�I�<$H�$I���@D��f�p��-u	D�SL�CA�B�<	w��H�t��>tAH��H����E1�jA�H���5�ZYH�t$dH34%(��H��[]A\�fD��vA��0t�H��L)�H���A��0I�HMc�H9�tuA�@D�@�A��	w�f.���0O��H��H�N�@H9�t�D�@�A��	v��W������-t3M���A���H��A�E1�L�ֹ�9��A�����-u��L��H���
���I�����QP���AUA��ATI���U��SH��H��dH�%(H�D$1��-4��1�E����H�$I�<$I��H���@f�pD�Ҁ�-u	D�SL�CA�B�<	w��H�t��>t>H��H����E1�jA�H��貁ZYH�t$dH34%(��H��[]A\A]Ð��vA��0t�H��L)�H���A��0I�HMc�H9�tuA�@D�@�A��	w�f.���0O��H��H�N�@H9�t�D�@�A��	v��Z������-t3M���D���H��A�E1�L�ֹ蹆�D�����-u��L��H���
���I������N���AUI���ATA��UHc�SH��H��dH�%(H�D$1��2����I��H�$I�}�@D��f�pH�(��-u	D�SL�CA�B�<	w
D��H�t��>tDH��H��D��E1�jA�H���7�ZYH�t$dH34%(��H��[]A\A]�fDA��vA��0t�H��L)�H���A��0I�HMc�H9�ttA�@D�@�A��	w�f���0O��H��H�N�@H9�t�D�@�A��	v��T������-t3M���>���H��A�E1�L�ֹ�9��?�����-u��L��H������I�����QM���ATI���U��SH��H�� �D$dH�%(H�D$1��,1����I���D$I�<$H�D$�@D��f�p���-u	D�SL�CA�B�<	w��H�t��>t=H�L$H����E1�jA�H���~ZYH�t$dH34%(��H�� []A\Ã�vA��0t�H��L)�H���A��0I�HMc�H9�twA�@D�@�A��	w�f.���0O��H��H�N�@H9�t�D�@�A��	v��[������-t3M���E���H�T$E1��L��A�跃�E�����-u�DL��H������I������K���AWE��AVI���AUI��ATI��U��SH��dH�%(H�D$1��/��L���@H���@H�$�:�C���!E����L�+H�$M���@A�$I�>��-uA�t$M�L$�F�<	w
��M�D�A�8tKH��H����E1�jA�L���}ZYH�T$dH3%(�H��[]A\A]A^A_�f.���v@��0t�L��L)�H�����0I�QHc�L9���A�AD�H�A��	�x�����0H�4�H��H�H�4pI9�tZ�D�H�A��	v��M�����sL���U1��H�$I����f�H�5��1����H�$����@��-t+H�������H��A�E1���́�����-u�f�H��H������H������I�f���AWE��AVI���AUE��ATI��UH��S��H��dH�%(H�D$1��-��H�$�@�@D�hE����L� H�$I���@�MI�>��-u�uL�M�F�<	w
��L�D�A�8tFH��H����E1�jA�H���2{ZYH�\$dH3%(��H��[]A\A]A^A_�D��v@��0t�L��L)�H�����0I�QHc�I9���A�AD�H�A��	w����0H�4�H��H�H�4pI9�t2�D�H�A��	v��R���L��D���/��I��H�$����f���-t+H���$���H��A�E1�����'�����-u�f�H��H�������H�����9H�f���H��D�H�?I��H�L$E��A��-u	D�VL�^A�B�<	w
��L�L�A�9t!H�L$H��E1�A�j��yZYH����vA��0t�L��L)�H���A��0I�KMc�I9�txA�CD�X�A��	w�f.���0O��H��H�N�PI9�t�D�X�A��	v��w����A��-t2M���`���H�T$E1��L��A��~�[���A��-u�L��H���*���I����fD��ATI��UH��SH���H��dH�%(H�D$1���*���H�;E1�f�P�H��H���@A�L� H�$�n~H�L$dH3%(u	H��[]A\��F���UH��SH���H��dH�%(H�D$1��v*��1�H�;E1�f�P�H��H���@A�H�$�}H�L$dH3%(uH��[]��F�ff.�f���ATA��UH��SH���H��dH�%(H�D$1���)���H�;H��f�P1�E�����@E1�A�H�H��H�$�f}H�L$dH3%(u	H��[]A\��E����ATI��UH���SHc�H��dH�%(H�D$1��a)���E1�L��f�PH�}�H���@A�H�H�$��|H�L$dH3%(u	H��[]A\��D�ff.�@��UH��SH���H��(�D$dH�%(H�D$1���(���H�;E1�f�P�D$�H��H�T$A�H�D$�@��C|H�L$dH3%(uH��([]��gD����AVA��AUI��ATI���UH��SH��dH�%(H�D$1��:(��H���@H���@H�$�3�C��xiE��uLH�+H�$E1��H��A�L���@I�<$�{H�L$dH3%(uHH��[]A\A]A^���sH���*��H�$H���@H�5i��1��
��H�$�{����C�ff.�@��AVE��AUI��ATI���U��SH��H��dH�%(H�D$1��H'��H�$�@�@�hE��uIH�H�$E1��H��A�L���@I�<$�zH�L$dH3%(u$H��[]A\A]A^�@H�߉��)��H��H�$��B���H��H�?E1��H�T$A�H�T$�XzH�����UH��SH���H��dH�%(H�D$1��v&���H�;E1�H�(�1�A�f�PH���@H�$��yH�L$dH3%(uH��[]��B����SH���H��dH�%(H�D$1��%��1�H�;E1�f�P�1�H���@A�H�$�~yH�L$dH3%(uH��[��A���U��SH���H��dH�%(H�D$1��%���H�;�f�P1҅�A����@E1�1�H�H��H�$�xH�L$dH3%(uH��[]��"A�f���UH���SHc�H��dH�%(H�D$1��%���H�}1�f�PE1��H���@A�H�H�$�xH�L$dH3%(uH��[]��@����SH���H�� �D$dH�%(H�D$1��$���H�;E1�f�P�D$�1�H�T$A�H�D$�@��wH�L$dH3%(uH�� [��@�ff.�f���AUA��ATI���UH��SH��dH�%(H�D$1���#��H���@H���@H�$�E/�C��xfE��uIH�+H�$E1��1�H��A��@I�<$�RwH�L$dH3%(uCH��[]A\A]���sH���U&��H�$H���@H�5!��1�����H�$��:?�f.���AUA��ATI���U��SH��H��dH�%(H�D$1��
#��H�$�@�@�hE��uFH�H�$E1��1�H��A��@I�<$�vH�L$dH3%(u"H��[]A\A]�@H�߉��%��H��H�$��>����H��H�?E1��H�t$H�T$A�1��vH��Ð��H�`�H��(H�B�9�|Y��~RH�ATH��UH��H��H)΍O�SH)�H�^�L�d�@H��H���l���H�s�H���p���L9�u�[1�]A\�@1�ø��������AWI���AVI��AUI��ATA��UL��SH��(D�L$dH�%(H�D$1��!��L���@H���@H�D$�,�D�L$���C�%E����L�3H�D$M���@A�MI�?��-u	A�uM�M�F�<	wD��M�D�A�8tGH�L$H��D��I��jA�L���oZYH�T$dH3%(�H��([]A\A]A^A_�A��v@��0t�L��L)�H�����0I�QHc�L9���A�AD�H�A��	�{���f.���0H�4�H��H�H�4pI9�tb�D�H�A��	v��I�����sL���E#��H�\$I������H�5	��1����H�\$D�L$���fD��-t3H�����H�T$A�I���s�����-u��H��H�������H������;�f���AWE��AVI���AUI��ATI��U��SL��H��dH�%(H�D$1�����t$PH�$�@�@D�x����L�(H�$M���@A�$I�>��-uA�t$M�L$�F�<	w
��M�D�A�8tGH��H����I��jA�L���mZYH�\$dH3%(��H��[]A\A]A^A_�fD��v@��0t�L��L)�H�����0I�QHc�I9���A�AD�H�A��	w����0H�4�H��H�H�4pI9�t:�D�H�A��	v��Q����L��D���U!��I��H�$���f���-t+H������H��A�I�ع��q������-u�f�H��H�����H�����	:�f���AUI��ATI��UH��SH���H��dH�%(H�D$1������H�;M��f�P�H��H���@A�L�(H�$�YqH�L$dH3%(uH��[]A\A]��y9�f���ATI��UH��SH���H�� �D$dH�%(H�D$1��K���H�;M��f�P�D$�H��H�T$A�H�D$�@��pH�L$dH3%(u	H�� []A\���8���AWE��AVI��AUI��ATI���UH��SH��dH�%(H�D$1����H���@H���@H�$�(�C��xlE��uOH�+H�$�H��A�M��L���@I�<$�pH�L$dH3%(uKH��[]A\A]A^A_���sH�����H�$H���@H�5��1�腼��H�$�x����7����AWE��AVM��AUI��ATI���U��SH��H��dH�%(H�D$1�����H�$�@�@�hE��uLH�H�$�H��A�M��L���@I�<$�4oH�L$dH3%(u'H��[]A\A]A^A_�DH�߉��6��H��H�$��87����AUI��ATI���U��SH��H��(dH�%(H�D$1��
����f�PH��@H�D$�����u�L��pH���@�@H�D$���H�t$H�T$L��H��FI�D$�P H�|$�t��H�|$�j��H�L$dH3%(u
H��(1�[]A\A]��h6����AUI��ATI���U��S��H��(dH�%(H�D$1��>����f�P1҅����@H�H�D$����u�L��pH���@�@H�D$����H�t$H�T$L��H��FI�D$�P H�|$���H�|$���H�L$dH3%(u
H��(1�[]A\A]��5�f���AUI��ATI���U��SH��(dH�%(H�D$1��p��1ҿf�P�@H�D$�T���u�L��pH���@�@H�D$���H�t$H�T$L��H��FI�D$�P H�|$����H�|$����H�L$dH3%(u
H��(1�[]A\A]���4���AUI��ATI���U��SH��H��(dH�%(H�D$1������f�PH��@H�D$����u�L��pH���@�@H�D$�J��H�t$H�T$L��H��FI�D$�P H�|$���H�|$�
��H�L$dH3%(u
H��(1�[]A\A]��4����AUI��ATI���U��SH��8�D$dH�%(H�D$(1�������D$�f�P�@�H�D$����u�L��pH���@�@H�D$ �p��H�t$ H�T$L��H��FI�D$�P H�|$�:��H�|$ �0��H�L$(dH3%(u
H��81�[]A\A]��.3�ff.���AWE��AVI��AUI��ATI���U��SH��(dH�%(H�D$1����L���@H���@H�D$�K"�C����E����L�3H�D$��@����u�L��pH���@�@H�D$�p��H�t$H�T$L��H��FI�D$�P H�|$�:��H�|$�0��1�H�L$dH3%(uKH��([]A\A]A^A_���sL���
��H�\$I���Y���H�5ى�1��}���H�\$�3�����1�ff.���AWE��AVE��AUI��ATI���U��SH��H��(dH�%(H�D$1����H�D$�@�@D�pE����H�H�D$��@����u�L��pH���@�@H�D$�?��H�t$H�T$L��H��FI�D$�P H�|$�	��H�|$���1�H�L$dH3%(u-H��([]A\A]A^A_�fDH��D������H��H�D$�Z�����0�ff.���AVI��AUI��ATI���U��SH��dH�%(H�D$1�����u�L���pH���@�@H�$�k��H�4$L��L��H��FI�D$�P H���:��H�L$dH3%(uH��1�[]A\A]A^��60�fD��SH�À�1�1�H�5���H����H�ƠX[H���u1�[�ff.���AWI��AVAUA��ATI��USH��(H�ndH�%(H�D$1�I��H���6�H��L����H��F��m|���D$��
����tR����A�>__ge���<$__se��H�D$dH3%(��H��([]A\A]A^A_�DH�__cloneH9$��A�G(����H�__issetH9$u�A�(�%I�G0H���0�@����t�I�T$H�
��D��1�H�5��H����c���H�__destruH9$�L���fA�~ct�?���A�~
�4���A�W(���(���I�T$H�
�D��1�H�50��������fDH�__unsetH9$�4���A�(�CI�G0H�����@��������I�T$H�
2�D��1�H�5]�舲������������A�>__ca�����fA�~ll�}���A�~�r���A�(��I�T$H�
*�D��1�H�57��*����E���DfA�~t� ���A�(��I�T$H�
�D��1�H�5����������f�|$t��A�(��I�T$H�
��D��1�H�5��謱�������I�T$H�
�ID��1�H�5��胱�����I�T$H�
�D��1�H�5��a����|���@I�T$H�
�D��1�H�5��;����V���fDA�G8���v���I�G0H�����@�����$���I�T$H�
�D��1�H�5���������f�I�G0H�����@u
�@F���I�T$H�
��D��1�H�5{�覰�����I�G0H��th�@u
�@F�����I�T$H�
k�D��1�H�5@��k������fDA�G8���G���A�G8u��d���@A�G8������A�G8u��D����+�ff.�@��AWAVI��AUATI��U��SH��H��tiI�H��tN���A�Ņ�E��u>E1�fDH��I�� A����H��E1�1ɍPL���jI�H��t
D9��E��t�H��[]A\A]A^A_�@H���L������AWAVAUATUSH��H��H�t$8H��H�T$� dH�%(H��$x1����D‰D$H����	H�`�Ƅ$�H���H��$�H���TL�kL�����xH�ʼnD$�i����L��H���w��H�D$(H�D$8L�M����H�D$xL�d$81�H�D$pH�D$PH�D$HH�D$hH�D$`H�D$@H�D$XH�D$ �f�����=�\H����H�SH�
�M�|$1�H�5S�����A�D$�€���$����H���4�S(�щЃ���0��E��C(M�,$A�D$������H�SH�
kM�|$H�5E�M��1�裭��I�4$H��H�4$��xI��A��I���
��H�4$D��H����u��H��$�H��D��jH�|$A��H��I��L��$���ZAYAZ����H��tRD;t$��A����A��
��A���iA����A�}__ca�!�HDŽ$�@I�� L������M�$M���|I�D$L��$�H��$�H��$�I�D$HDŽ$�H���}H�P(H��$�A�T$��$��H ���Eщ�$��P��$��@��$�A�D$����DŽ$�H��t
�C(��nH��$��	I�4$�q���HDŽ$�E1�HDŽ$�fD��$��f.�L�����xH�D$0A�Ɖ<$�U��H�T$0L��H���t��H��$�H��A��jD�\$H��I��H�|$D��L��$��Y^_����D���L���.��H�|$(�$��M�,$M���{L�=�yH��L�5�J�l$ MD�L�|$L�4$L�t$�9fDH�SH�$�|$H�5E�1�����L��I�� ��
��M�,$M���5L�����xI��H���o
��L��D��H���!s����L��H��I���Qu��t�M�$H��u�H�T$�D��$����@�D$H�t$(L��PHc���H�|$ �N������F���H��$�H�D$ H��H���t����T$H�������c���H�__constrI9E�<���A�}uct�.����@H�__destruI9E��H�__tostriI9E����fA�}ng��A�}
���H��$�H�D$xH���f���M�,$���H�
YxH�����DH�__cloneI9E�4H�__unsetI9EuH��$�H�D$HH���
����H�__issetI9E�\���H��$�H�D$PH�������A���6���A�}__ge��A�}__se����fA�}t����H��$�H�D$hH�����f�H����������f�L�����xH�D$0�<$�H��H�T$0L��H���p��H��$�H��A��jD�T$H��I��H�|$D��L��$���UZY��������L���!�����@H��$�H�D$@H�����H�
�vH���	����fA�}ct����A�}
����H��$�D��$�H�D$XH��E�������H�SI�$H�5(�1��|$�ݧ��H��$��s���fA�}ll����A�}����H��$�H�D$pH���F���H�D$8�D$H�D$(L�M������1���fA�}t�L���H��$�H�D$`H�����H��t�H�t$XH�L$pH�D$ H���H�t$@H���H�L$`H���H�t$xH���H�L$HH���H�t$hH���H��H���H�t$PH���H���H��t!�P�Ѐ� ���A�kH�L$ %�����AH�L$XH��t!�Q�Ѐ�@���A��H�t$X%�����FH�L$@H��t!�Q�Ѐ̀���A��H�L$@%�����AH�D$pH��t�@���H�t$p%�����FH�D$xH��t�@��
H�L$x%�����AH�D$`H��t�@���H�t$`%�����FH�D$hH��t�@��yH�L$h%�����AH�D$HH��t�@��/H�t$H%�����FH�D$PH��t�@���H�\$P%�����CH�|$(�B��1�H��$xdH3%(��H�Ĉ[]A\A]A^A_��H���H��H�D$�����L������H����������f.�H����H�|$(���M�$H�SH�
�D�|$H�5�1��ܤ��H�T$H�|$8���������A�����l$ ��H�|$(�p��H�SI�$1��|$H�5c�薤�����������L�|$HH�S1�H�5��|$I�O�m���A�G���L�|$hH�S1�H�5���|$I�O�E���A�G�_���L�|$`H�S1�H�5���|$I�O����A�G����L�|$xH�S1�H�5j��|$I�O���A�G����L�|$PH�S1�H�5B��|$I�O�ͣ��A�G�+���I��H�SH�I1��|$H�5~解��A�G����L�|$pH�S1�H�5��|$I�O����A�G�3���I��H�SH�I1��|$H�5�}�Y���A�G���I��H�SH�I1��|$H�5h}�3���A�G�o���H�
�qM�$H���)���H�D$ H�D$PH�D$pH�D$xH�D$XH�D$@H�D$`H�D$hH�D$H�~����<�ff.����AWAVAUATUSH��dH�%(H�D$1�H����H�_I��H���EH�+I�ǀ�H��u�l@H�� H�+H��t\�{u�H���F
�xI��I������H��D��H���zj��L��D��H��H���lH��������H�� H�+H��u�DI�^ H�����xI��H���n��H��D��H��� j��H��L���jA��H��L��H��L�L$�,OZY�����H���Y��H�$H��`�H���H�s(H��t���1�1�������HDž�H�L$dH3%(H����H��[]A\A]A^A_�@I�ǀ��,���@����H�I�V 1�H�5��� 1�����1��I�V H�5��� 1����H��1�����y���H�5��� 1�HDž�H�S 1�诠���P����%�DAUA��ATUH����SH��dH�%(H�D$1��� �H��H�$�E�x� �SH��H���H��1�H��I���v���H�<$H�`�D�o(H���H���H���H��tH�W0���H�<$�WH�uL���Lh��H�$H��H��E1�A�L��PH���H��j���JML���2�XZH�\$dH3%(H�$uH��[]A\A]���ff.����SH��H��dH�%(H�D$1��o
�H�ǀ�H��H�ލP�g��u.H�$�����������H�t$dH34%(uH��[�@���������ff.����S���H��tw�����tH�C8H��t��������H�{`tH�CxH��tH�{h��ǃ�H�{(H��t1Ҿ������H���H��t[��fD[�fD����=����肧���n���ff.�f���H�G@H��t#SH���������Ѓ��t1�[��1��H�S �H�55�1��������ff.����H�GHH��t#H����������1�H���f�1��ff.�f���1���������ff.������$9����$9�ff.����SH������ƃ�H�߉��[���ff.�f���H������H��tH���V�����������H�����������f���USH��XH�T$0H�L$8L�D$@L�L$HdH�%(H�D$1�H�D$p�$H�D$H�D$ H�D$��tCH���^��#�ƒ�HT$�$H�2H����O�����t�$��/v�H�T$H�BH�D$��H�D$dH3%(uH��X[]����@��1����D��ATI��USH��H��dH�%(H�D$1�H��u:H��H��t2H����H��H��1�PH���H���[d���t"H�$H�L�����H��H��tH��H���M��H�L$dH3%(H��u	H��[]A\��3���������f���AUATUSH��hH�|$L�L$XdH�%(H�D$(1�E����I��OE�h��jH��$��D$(H�\$H�D$H�D$0H�D$ �E@�ǃ�H|$ �D$H��E1�A�H��jH�?��L��A���HXH��Z���A���t�D$��/v�H�|$H�GH�D$�fD1�H�t$(dH34%(uH��h[]A\A]ø�������/�ff.�@��UH���VE1�S1�H��H��H�à�H���uU���t0H�-I�8H��H��1�[�H�5/�8]���f�H��[]�f���UH��S��H��dH�%(H��$�1��b��E1�1ɍSH���H��H����T����%H���'�H��\$H�D$H�!9H��$�H�����HDŽ$�HDŽ$�HDŽ$�HDŽ$PHDŽ$XHDŽ$HHDŽ$�HDŽ$�HDŽ$�HDŽ$�HDŽ$�HDŽ$�HDŽ$�HDŽ$�H�D$DŽ$hHDŽ$`HDŽ$@HDŽ$HDŽ$�H��$8�\���1�H��$�dH3%(u
H�Ĩ[]������AWA��I��AVI��AUI��ATM��USL��H��hdH�%(H�D$X1�H��$�H��tH�H�D$M��LD�H�D$H��HD�H�D$(M��LD�H�D$0H��HD�H�I�$H�EA�F<th<��M��t!A�vI�>D�T$�J���D�T$I�A�FA�E�A����H�L$XdH3%(�JH��h[]A\A]A^A_�DI�>D�T$�g����M��t�H�=�����I�A�EE1�1�L�3��1�M��t�H�\$@H�T$8L��H���<����t$HH�|$@����|$TI��D$HA�EvH������1��E���DH��D��H��I��AT��M�FL��1�蘳��^_�����I�>1�H�T$@�ac���?���I�>H�T$8��Gc���%���H�D$@H�8�G�P����
���H�T$8D�T$H��z�����D�у��L$<�cM��tp�BGD�T$�P��A�UHc�����L�l$@H��I�I�EH��HcPH�0�
�H��I�EHc@H�H�D$8f�::H�yH��PH�0��Hc��
�D�T$�|$D�T$�uH�D$@H�D�hL�0A�}�Q���D��L��H���^��D�T$I��H�D$@L�8E�wA���A���C�H�5�-L��D�T$��D�T$���H�`�H��0H���H�@H����L�pL��D�T$���D�T$M������H�D$8L��I��H��D��H�PATL�A�±��ZY���D�T$�q���M��D�T$I��H�D$@H�E��H�D$8H�A�FB�P��A�UHc��F�I�A�VH��I�v�C	�H��A�FH�H�D$8f�::H�yH��PH�0��Hc��	�|$D�T$�E���L�3�������|$������I�?D��H�T$ D�T$E1��@���D�T$�����H�D$ L�0�����H�5,L��D�T$���D�T$��u�H�`�H��0H��t�L�p������H��E1�E1�1�j�)���H���@��UH��1�1�SH��H��0dH�%(H�D$ 1�H�D$PL�L$L�D$���ZY�Ä�uH�L$dH3%(��u\H��([]�fD�}�u�H�<$t�H���6���H�����H�$H��H�p���H�D$�H��H�p�s����|�ff.����AV1�AUI��ATUH��1�SH��H��(dH�%(H�D$ 1�H�D$PL�L$L�D$����ZY����L�$$H�HI�D$0M����L�t$H�CL�kL�s8H�C �C(H�C0�C@H�CH�\$L�kL���A��H��t3�E1�H�]L�eL�uH�L$dH3%(upH�� []A\A]A^�@A�}__cau�fA�}llu�A�}u�1��EH�EH�EH�E�fDH�`�H��8�/���D�������$
�@AW��I��AVAUATI��USH��X�|$dH�%(H�D$H1���L$ ���
H��1۾����H�
u���!<[����Hc�H�>��D��H�����uփ��D�D$9��9���H�`��l$H��(H�B�9���H�A��H��H)�H�Z�E����
A�$I�l$A�D$��|uI�T$��A�D$I��H�Ջt$D�~E)�D�|$E1�</u(�.fD<!uH��x�DD�H���E</t<!��</u�L�+A�}u�A�E��vՃ��L�T$A�E�L$����L$L�T$H��AoMI�UH��H�PH�� @��vH���ԁ��L�T$�L$H��@H��@�h���@H��������y������f�D�d$ E����H�`�H�@HH�@H�@H����H�X���H�
9/I���;H�%^HD�1�H�ڿH�5���_���������mM��L�d$E��I�EM��t	E���H�|$@�
���H��H�H�����H���H��SD�L$(I��H�5[�H�L$P1����^_D�����H�t$HdH34%(�H��X[]A\A]A^A_���A�<7�[H�=>���Hc�H�>��A���/�,	�ƒ�IRA�H�H��xu
A���
H�I��@A��H���{���A���/���ƒ�IRA�H�
H��B<�^��u
A��� L�-:�@A���/���ƒ�IRA�H�
H��B<���u
A����L�-W}�@A���/�	�ƒ�IRA�L�#L�*A�D$<�\<t+A�|$uA�D$���L��L�T$����L�#L�T$I�$I��I�E���DA���/��ƒ�IRA�H�
H��B<�^��u
A��� L�-��D$ ������H�|$@���H�;H���h���H���P���SH��H�5��AUD�L$(I���H�L$P1��ʌ��ZY����A���/�d�ƒ�IRA�H�H��xu
A���*H�I�������A���/�T�ƒ�IRA�H�
H��B<�(���H�I��H�����A���/�DI�B�J��A�
L�$0��/���H�A�L�(H�;L��L�T$L������L�T$���bE����L�-����f.�A���/�<I�B�r��A�2H���/�s��H�A�H�;L�(�G<�@��u	E����M�������M�mM��������A���/���ƒ�IRA�L�"L�+I�$H�D$A�EE��t���D<t)A�}u
A�E���7
L��L�T$���L�+L�T$A�uI�}H�T$8L�T$��L�T$����}���H�D$8H�t$H�8I�<$H��t)L�T$H���%�,I��L�T$��u	E���f	I�<$H���V���I������DA���/��I�B�r��A�2L�,8��/����H�A�L�L� A�SL�߀���H�5����Hc�H�>���A���/�D�ƒ�IRA�L�#L�*A�D$<�$<t+A�|$uA�D$����L��L�T$�=���L�#L�T$�A$I���AE�I����A���/���ƒ�IRA�L�+A�M��w�H��O�WL�-Z&�V����H�I����f�M���L�T$H�L$踥��L��H���G��H�L$L�T$����H��x�����E�������DH�I�������K���H��WI��H���d���f�<��E�L$E����M�$$A�$�P���v< u C�!�I��A�$A��E)�P���v�< t�PՁ��L�d$@L���1�VЀ�	�A��~<0��
�
H�A@��0uf�H��H�D$@H�@�p�@��0t�A�1�E1��~�@��	�W
���>
��
� 
A����Ic�L�H9�t0H�5�|�1��T$L�T$D�\$�ʇ��L�T$�T$D�\$A����A����	H�D$@H�5+�L�T$�T$H�x���	�T$L�T$����	uA�<$-�u	M������1�L��L�T$�:L�T$�AE���<�E�L$E���`M�$$A�$�P���v< u C�!�I��A�$A��E)�P���v�< t�PՁ���L�d$@L���7�VЀ�	�<0u
A���{A�
H�O@��0u�H��H�L$@H���q�@��0t�1ҍF�<	�\A���BA��
�n
����Ic�L�H9�t%H�56{�1��T$L�T$�I����T$L�T$����H�D$@H�5�L�T$H�x��}�L�T$���[uA�<$-�N1�L��L�T$�49L�T$�H,�I��I�E�v���fD1�����H�I���]���DI�RH�BI�B�o����I�BH��H��I�BL�*H�PI�R�7���f�I�RH�BI�B�w����I�RH�BI�B�����I�RH�BI�B����I�RH�BI�B����I�RH�BI�B����I�RH�BI�B�_����I�BH��H��I�BL�"H�PI�R����I�RH�BI�B����I�RH�BI�B����I�RH�BI�B�G����I�BH��H��I�BH�
H�PI�R����f�1�1��2��I�$I��A�E������uSH�I�EH��@A�$��p�����L�#L�T$I�<$���IcT$L�T$H9��k���L�-�3����E����A�{uA�C���S��t��L$L�T$���H�;�L$L�T$�t���I�CA�SH���H������u
A�S�����L$�H��L�T$��L�T$�L$����L�I�CH�������H���tA��L�-ܧA��s�1�������L�"��t)A�}u
A�E���EL��L�T$���L�+L�T$I�EA�$I���{�I�$�I���L�-%r���L�-��
���A�S��u
A�C���F�L��L�߈L$L�T$�WL�T$�L$���H�;L�T$H�GH����&���H�@@H�������L$���L$H�D$@�@�x�	
H�;L�T$�v �L$L�T$�s��H�;H�D$@�L$L�T$�GH�3H�T$8H�LjL$L�T$���D�T$8�L$E��L�T$uuH�T$@H��o�xD�xH�R@�|$H�PH�;�v�L$'L�T$�ns���L$'L�T$H�|$@�L$'L�T$���H��|$�L$'L�T$@�xH�D�xH��@A�$H�H�I�E��p�+������H�;H�9I�����M��L�d$H�|$@����H��H�I�\$L�0�o���H��H�5vAVI��1�SD�L$(H�L$P���I�EAXAY�����L�T$A�E�R�L�T$H��AoUI�UH��H�PH�� @��v
H���dr��L�T$H��@H��@L�+A�}�v����\���I�L$H�L$@���I�|$H�|$@�l���@��.�j����A��0<	�[���E1�M���H�t$@L��L�T$D�L$�N3LcL$L�T$�D$(M�L9d$@t&H�5�t�1�L�T$����L�T$M���A����l$(�Am�0���@��.����G��0<	����H�t$@L��L�T$D�L$��2H�T$@D�L$L�T$Ic�I�L9������H�5@t�1�L�T$�D$�Q���D$L�T$�R������߃�A<�����H����H�|$@����A��
�n���H�t$@L��L�T$D�L$�;DH�T$@D�L$L�T$�i���I�EA�$I���g��u���7�Ic�L�H9��P���M����D��1�L��L�T$��L�T$I�E��M��E��L�d$�<�����L$'A�CL�T$L�\$����L�\$L�T$H��L$'�Ao;8I�SH��H�PH�� @��vH�LjL$L�T$��o���L$L�T$H��@H��@H�;�W�'���L��1�L�T$I���d�f�L�T$�H*��AE�c���߃�A@�������H��A��H�L$@A����M������
�m���H�t$@L��L�T$D�L$�BLcL$L�T$�D$(�h������L�T$A�D$����L�T$H��Ao$$ I�T$H��H�PH�� ��v
H����n��L�T$H��@H��@L�#�����L�T$A�D$�|��L�T$H��Ao4$0I�T$H��H�PH�� ��v
H���n��L�T$H��@H��@L�#������L$'A�SL�T$L�\$���L�\$L�T$H��L$'�Ao# I�SH��H�PH�� @��vH�LjL$L�T$�n���L$L�T$H��@H��@H�;H�GH�������1���@��.�]������@��E������wH�G�NՀ�u	H�D$@H�G���0<	�)���H�|$@�S������L�T$A�E�=��L�T$H��Aou0I�UH��H�PH�� ��v
H���Pm��L�T$H��@H��@L�+�Z�������L$'A�CL�T$L�\$����L�\$L�T$H��L$'�Ao+(I�SH��H�PH�� @��vH�LjL$L�T$��l���L$L�T$H��@H��@L��8���@��.�����@��Eu	����H�L$@A�����M�������H�L$@Mc�M�L9���H�5io�1�L�T$�z��L�T$���A�D$�
���<X��H�A�H�D$@�qH����A�D$A�
���<X�t�H�GA�H�D$@�wH���Y�l$ ����H�`�L�5�HH�@HH�@H�@H��tL�p;t$�6��L�%}HH��
LE�9��G��L�-�p����A�>M��L��I��H�
O�ASH�:HH�5�mHDȋD$P1�ATS�ty��H�� ���}�A��u
�y�7�b�M����������襘��H�5�m�H��1��/y�����<����[���M����H�L$@H�y�
H�|$@�9.�qtB�A�H������yH�A�w�@��u	H�D$@H�A���0<	�������8��A�H�����H���
L�%@GLE�L�-Mo9�H�LoLD�����L�-<o����7���I�B���L�-t��|$ �X�A�}�0��H�I�B��H�|$@A��肎�����L�-�v
�L�-cg�I�B�$�f���H���A����H��H�L$8L�D$@L�L$H��t7)D$P)L$`)T$p)�$�)�$�)�$�)�$�)�$�dH�%(H�D$1�H��$�D��H��H�D$H�D$ �$�D$0H�D$���H�L$dH3%(uH��������D��H���H�T$0H�L$8L�D$@L�L$H��t7)D$P)L$`)T$p)�$�)�$�)�$�)�$�)�$�dH�%(H�D$1�H��$�1�H��H�D$H�D$ �$�D$0H�D$��H�L$dH3%(uH�����	��f���AVAUATA��UH��H��SH���H�L$8L�D$@L�L$H��t7)D$P)L$`)T$p)�$�)�$�)�$�)�$�)�$�dH�%(H�D$1�H����H��$�D$0H�^H�D$H�D$ H�D$H�P�$(L�h H�*M��tH���?���L��H���44����tpH��1�H��D����H�\$dH3%(��H���[]A\A]A^�@H��$H��1�D��H�D$H�D$ �$�D$0H�D$���蛔��H��I��谑��H�h臔��I�UM��H�5�jH��I��1��u���R����}��ff.�f���AVAUA��H��ATA��UH��SH���L�D$@L�L$H��t7)D$P)L$`)T$p)�$�)�$�)�$�)�$�)�$�dH�%(H�D$1�H����H��$�D$0H�^H�D$H�D$ H�D$H�P �$0L�p(H�*M��tH��豐��L��H���2����tzH��H��D��D���q���H�L$dH3%(����H���[]A\A]A^�f�H��D��D���$ H��$�D$0H�D$H�D$ H�D$�����A�������u����H��I���
���H�h���I�VM��H�5NiH��I��1��ds���P�������f.���USH��H��H�W0H��t0�G(����u
�!�H�S0���C(H�<��u����C(��u��u�C(H��[]�@H�{0���H�C0�C(H��[]�f����G(�H�G0H��G(H�G0���ATA��UH��SH���E���D�c(H�k0[]A\����AUATI��UH��SH��(dH�%(H�D$1�H��@��@�����H��tz�}��H�}L�l$�A1ҿA�D$(���l��I�D$0L�d$H�}H��L���CB�!�H�D$H��L��H�C�H��@H�}�`BH�}L��L���aC��t�1�H�L$dH3%(uH��([]A\A]ø�������$��@��AUATI��UH��SH��H��(dH�%(H�D$1��D$H�D$H��tsH�W H��tZH�T$H�t$�{���H��H�����L��H���e�����H�T$�t$H���r���H�L$dH3%(����H��([]A\A]ÐL��H���%������ϐL�l$L�o H��tBH�T$H�t$����H��H���H���L��H�����H�|$��t�L�������s���fD�˘��H�|$���k���L������^������ff.���ATUH��SH��dH�%(H�D$1��L��xI��H������H��D��H���8��H�ǀ�H���H��H���y8H���t)����H�$H�@XH�T$dH3%(uH��[]A\����1����Z��f.���AWA��E��AVE��AUATI��USH��H��xH�L$L�L$dH�%(H�D$h1�A��u
A�A��H��H�kxA��HE�tH�D$�H��	��E�kA���,A����A�����D$@H�|$8L�t$0�pD�|$0��5H�\$`E1�D��H�D$HH�D$L��L��H��H���A�8H�D$X��$��D$`j�LXZ1�H�T$hdH3%(��H��x[]A\A]A^A_�D�H�ੰ�8���H�5&\�1�D�\$�un��D�\$����H�{L�t$0th�H�t$(H��E��M��H�b�
L����PD�\$$�-6��_AX1ɋD$(H�t$0E1�H��P�)�D�\$�3H�|$0�i��D�\$D�\$H�L$E1�L��H��A�D��H��j�MY^D�\$�D����L��D�\$���D�\$H��H�|$8D��D�\$@�z����H�t$$H�|$(�KH��H�SE��M���P�i5��AYAZH��D$$H�L$H��E1�jH�t$8A��P��t$4H�|$8�t$P��H�|$HA[]L�t$0�����H�t$$H�|$(E��H��M����H��
P��L�����D�\$H���.���H�|$0D�\$���D�\$�����2��f���H��E1�j����H���f���AUA��ATA��UH��SH��H����t<���H���E��H��H��H�W�oH��H�PD��H��[]A\A]��������f���AVI��AUE��ATA��UH��S�H���tC�F��E��H��H��f�P1�M��H�����@H�D��[]A\A]A^������C��뻐��AVI��AUE��ATA��UH��S�H���t;����L�0E��H��f�PH��D��H���@[]A\A]A^����������f���AUA��ATA��UH��SH��H�����D$tF�a���D$��E��H��f�PH��D��H���@H��[]A\A]�)���f��[���D$���AWE��AVA��AUI��ATUH��SH��H��H�����I��tR����D��H��H�D$�%��H�L$D�aH��A�AE��D��L���AH��H��[]A\A]A^A_�������D��H��D�`H�D$���H�L$H��A묐��AWE��AVA��AUI��ATE��UH��SH����H�L$tP�+��H�L$D��H��H���x��D�cH��C�CE��H��D���CH��L��H��[]A\A]A^A_������H�L$D��D�`H��H�������CH��ff.���H����E1�A�H�L$H�L$H��H��Xj�H��(�ff.���ATI��UH��S�H���t-�P��1��@H��H��f�PH��[L��]A\�~���fD�c���ѐ��AUI��ATI��UH��SH��H����t<���L�(H��H��f�PH��L���@H��[]A\A]����f������f���AUA��ATI��UH��SH��H����t<���1�E���@H����H��H��H��f�PH��L��[]A\A]���������f���ATI��UH��SH��H�����D$t;����D$��H��H��f�PH��L���@H��[]A\�3�������D$����AWI��AVI��AUI��ATM��UH��SH����tM���D��L��H������D�cH��C�CH��L��L���CH��H��[]A\A]A^A_���D���D��L��D�`H���a���CH�����AUI��ATI��UH��H��SH��H�����H��H��L��[L��H��I��]A\A]� �����AWAVI��AUA��ATUH��SH��8I��`�dH�%(H�D$(1�H�L$ M��$PI��$PH�FH�$H�x ���L�D$����D��L���@H���@D�hH�D$ ���H�t$ L�D$H��H��FH�EL��P H�<$�N|��M��$PH�D$(dH3%(uPH��8[]A\A]A^A_��H��H�T$H��L�D$�{���H�L$ L��1�H�5�[��e��L�D$�@��������AUA��ATI��UH��SH���H������D��L��H���@I��1�H��fA�@H��[]A\A]�����AVM��AUA��ATI��UH��SH������1�M��D���@I����H��I�H��L��fA�@[]A\A]A^�3�����AVM��AUA��ATI��UH��SH����;��D��L��H���@I���H��fA�@M�0[]A\A]A^����ff.���AUA��ATI��UH��SH���H���D$����D��L��H���@I���D$H�߸fA�@�AH��[]A\A]�l���ff.����AWA��AVI��AUI��ATI���UL��SH���e��H���@H���@���C�ƅ�x6H������CI��D��H�H��L��L��[L��]A\A]A^A_���DH�5�6�1��mc���s����AWA��AVI��AUI��ATI���UD��SH��L�D$���L�D$��hH���@L���@����CI��D��H�H��L��L��[L��]A\A]A^A_�G������AUATUSH��1�H��I��`�dH�%(H�D$1�M��$PI��$P��aM��$PH����H�8H��H9�tu�u/�S�{H�<$�B�Ct��wwH�]H���x��1��I��v	�ES��H�}�C�GH�E�o�C��tH�}�v��S��f�1�H�L$dH3%(ugH��[]A\A]��S��s����oI��H�CH��I�D$H�� ��wA�D$L��A�D$�F���DL���pS���ڸ��������f���ATA��UH��SH�������1�H��H��f�PH��D���@[]A\�s�����AUI��ATA��UH��SH���H������H��H��f�P1�M��H�����@H�H��D��[]A\A]����fD��AUI��ATA��UH��SH���H���\����H��H��f�PH��D���@L�(H��[]A\A]���ff.���ATA��UH��SH���H���D$����H��H���D$f�PH��D���@�H��[]A\�X������AVA��AUI��ATI���UH��S螿��H���@H���@���C�ƅ�x/H���W���CH��D��H�L��[L��]A\A]A^����H�5	3�1��_���s����AWI��AVA��AUI��ATI���UD��SH��������L���hH���@�@�����CH��D��H�H��L��L��[]A\A]A^A_�T���@��AWI��AVAUA��ATUH��SH��8I��`�dH�%(H�D$(1�H�L$ M��$PI��$PH�FH�$H�x���D�D$�W���D��L���@H���@D�hH�D$ ����D�D$H�t$ H��H�A���FH�E�҃��PH�<$H����t��M��$PH��H�L$(dH3%(uRH��8[]A\A]A^A_�f�H��H�T$H��D�D$�~��H�L$ L��1�H�5JT��^��D�D$�0��������U��SH��H��`�H��PH��P�]H��PH��tH�H��[]���H�G0H��t���ff.�@��H���H��t�������H�W(1�H��t9SH��H���҅��D$tH���[�@H���(Y���D$H��[�fD����H�Ht5��u0�
��/w1H�B�qA�ȉ2F���/w?H��
H�WHD��H�0����H�JH�AH�BD�H�HH�JH�WHD��H�0��H�B��ff.�@��H��H����[H�������苳��1����8H���f.���H��H����H�5����ն��1�H���ff.���SH����H�5m���H���U���H��[�L���ff.������H����I��1��H�5����M���ff.�f���SH����og@�odH�%(H��$�1��oO�oW H���o_0)d$@�ooP�ow`�o��)$�op�o��)L$)T$ �o���o��)\$0�o���)�$�H��$�H��)l$P)t$`)|$p)�$�)�$�)�$�)�$����H����H���,���H��$�dH3%(uH���1�[��Y��f���AU�
I��ATUSH�����H����H�5bTH��H���j��H��H���H�5\TH���O��I��H���sD�EA��g�
t~I��$�H�����g�
�Ѕ�tbD�EA��g�
��tcI�$H��H� �5A�g�
H��T�QA�t$A�t$H�81����H�� H������������}�b�}�H��H��L��[]A\A]�����A��g�
�t���H���5I�$A�g�
H��S�H�81����H���|�������iDH�5%SH���1��H�5/SH��H�����I��H��tGH��t	M������H�*�5L��H�#SH�81��)��H���������H��[]A\A]ÐH�5�RH�����I������L��H�|RI��H��5H�81����������I�$L�
�RL�6$H�TH���5�H�81����H����������p���L�
_RL��(I�$H��S뽐�����8���P������8Ð������f.���USH��H���H�H��t#H���
f�H�H��tH�{H���\���u�H��H��H��[]�f.�UH��SH��H��H�H�H�H��t��H�C8H�S0H����H�P0H�C0H��tH�S8H�P8H�C(H�S H����H�P H�C H�S(H����H�P(H9]��H����mH�H��t��H�E8H�{H��t��H�{H�C�U@H9�t
��t(����U@H�k H�߄�t(���H��H��[]�D�ö���U@H��H�k ��u�诶��H��H��[]�DH�C H�E�j���H�M0H�#EH������DH�U(�<����H�U ����ff.�@PXH�=��
��H��H�j�5H������P�������{�F���H�L��H��L�GH��H��H�H�W�H�H��L�L�G�H��H�H��L�L�G�H��H�H��L�L�G�H��H�H��L�H��H�H�W�I��I��H�L�L�G�H��H��L�H�H�G�I��I��H�J�H9��b���������H�
;Q��Hc�H�>��H��H��H��H�H�W�H�H��H��H��H�H�W�H�H��H�OH��H�H�H�H��H�yH��H�H�H�H��H�OH��H�H�H�H��H�yH��H�H�H�H��H��H�H�H��fDH���H������/���ff.���SI��H������������f.�������9�r��P��lj��S�L�K8H�C0H�C H�C(�CH�CH�CD�C@f�CAE��t����H��tSH�C01�[����H��1�H��t�H�S0[����������m�������T��������[�ff.�f���UE��D��SH��H�����@�kBH��[]�ff.����@�wB����S�H��1�H�0H�����H�C H��t:fDH�K0H�#SH��H�@8H�H0H��tH�A8H�K0H��H�@ H��u�1�[Ë7�u
1���U��SH��H��H���{@H�0tW����H��H��tcH�H�H�H��t�ЋH�k0H�������C�A���H���H�H��t��1�H��[]���膲��H��H��u����������f���AWAVAUATUSH��(���������B�A���H�\�H��f�M��L�H�hH��I��M�M�M��I�I��M�L�X�L��H��M�L�P�I�L��M�H��M�*L�P�L��H��M�I�H�h�M��I��I�H�h�M�M��I�I��M�L�P�L��H��M�N�dH9��a���A��A��A����H�UMNc�I�>A��M��H��I��O�#L�X�O�$M��I��O�#L�XH�N�$L��H��N� I�CM�O�$M��H�XH�I��O�#N�$L��L�[H��N� H�N�$L��H��N� I�CM�O�$M��H�I��O�#N�$D��#GH�L$A��H��H�$H�G0L��L�L$H��I��L�4�D�D$M��u��fDM�v0M����M9&u�A9nu�I�~@L��H��虻��uՋ\$`����H�H�H�H��t��I�G8I�~H��t��I�~�|$M�n��A�G@�l$L9������uH�����H����I�FH�t$H��H�����H�T$H��tI�FH�H���H�H���*���%A�@I�}G�)�D���I��H���I�~@L��H���9��|$A�n���l$A�@H���8����H��H����I�FH�t$H�����I�FI�G0H�4$M�&H��I�F8I�F0H��tL�p8H�L$H��tI�FH�H�H�H�H��t��I�G(I�F M�w(I�F(H��tL�p I� ��I���I�G0H�4$L�4�H���H�H��t��A�G��A�GA;wX1�H��(��[]A\A]A^A_�D����I��H������H�p�5��H�=��
H�����E��DL���(����fD�˭��H��I�FH������A�@L������������h���fDM�w�*����M�w ����H������I������I������H�D$H�I�FI�FI�F�i���A��H��A�����1�H��茭������R�����������L9�tA�@t@����H�D$H�M�nI�F�l���H��t&���H������I�FI�F�6���������������f���H��E1�A�dH�%(H�D$1�H��H�$H��j�i���ZYH�L$dH3%(uH����M��ff.�f���AWI��AVM��AUATI��UH��SH��A��tL�gH�E0E��D#mJ��H��t@�C��u	L9#��H�[0H��u�}@�L$�G�4�߫���L$H��H���A�CL�#�����ʀ}@H��H�T$�(�c��H�T$H��H����H�CL����H�CM��tH�CI�H�E0J��H�C8H�C0H��tH�X8H�H�H�H��t��H�E0J��H�E(H�C H�C(H�](H��tH�X H�} ��H�}��H���H�H��t��L9eH��������I�D$I9�H�RHG�H�E�E���E;EwV1�H��[]A\A]A^A_�D�k��L$H��H������H���5��H�=*�
H��K������H������fDA����H�H�H�H��t
�L$�ЋL$H�E8H�{H��t�L$��H�{�L$H�C����U@A��H9��3����L���e��H��H���eH�{L��L�����H���H�H��t��L9eH��������I�D$I9�H�RHG�H�EM������H�CI�H��1�[]A\A]A^A_�@�{���H�T$H��H��H�C�����}@H�����4���������f.�H�]�.����H�] ����1�L���}���H���,���DI�H�CH�CH�C�~���H9�t�}@H�D$tC����H�D$I�H�CH�S���L���t.���H��H������H�{H�C�����Ԩ��H�D$�蘨��H����辨�����������_�ff.�@��AWAVAUM��ATUH��D��SH��(H�D$`H�D$�D$h�D$����H�G0A��D#wA��D�L$L��I��N�,�L�D$H�4$M��u��M�m0M����I9mu�A9]u�H�4$I�}@L���o���uӋl$���H�H�H�H��t��I�G8I�}H��t��I�}�|$M�e��A�G@�\$I9������jH������H����I�EH�t$H��H���l��H�t$H��tI�EH�H���H�H���#����A�@I�|$G� ����I��H���XH�4$I�}@L�����|$A�]���\$A�@H���.���H��H����I�EH�t$H���̻�I�EI�G0I�mJ��I�E8I�E0H��tL�h8H�L$H��tI�EH�H�H�H�H��t��I�G0N�,�I�G(I�E I�E(M�o(H��tL�h I� ��I���H���H�H��t��A�G��A�GA;wU1�H��(��[]A\A]A^A_�f����I��H�����H�P�5��H�=~�
H�����%��DL�����fD諥��H��I�EH������A�@L�����h�������k���fDM�o�9����M�o �����L�D$H��(L��H��[A�]A\A]A^A_���@H�D$H�I�EI�EI�E�c���1�H���m������I9�tA�@tO����H�D$H�M�eI�E���H�߄�t5���H������I�EI�E�P���������������ؤ���衤�����z�f.���AWA��AVAUI��ATUH��SH��H��(E��������B�A���H�t�H��@L��H�xH��H��J�*H�P�H�H��H�H��H�H�H�H��H��H�H�H�x�H��H��H�H�H�P�H��H��H�H�H�x�H��H��H�H�x�H�H��H�H��H�H�H�H��H��H�L�,H9��a���D��������H�5�?Hc�H�>��L��H��H��J�*H�P�L�,
L��H��H��J�*H�P�L�,
L��H��J�*H�PH�L�,L��H��J�(H�BH�L�,
L��H��J�*H�PH�L�,L��H��J�(H�BH�L�,
L��H�H��J�*L�,E��D#eJ��H�D$HE0L�0H�D$M���1D��M��H�D$�@M�d$0M���M9,$u�E9|$u�E��tH�T$I�|$@H������u�H�H�H�H��t��H�D$HE0H�D$L�0I�D$0M9��	I�T$8H�B0I�D$0H��t	I�T$8H�P8I�D$(I�T$ H����H�P I�D$ I�T$(H����H�P(L9e��H�E8I�|$H��t��I�|$I�T$�E@H9�t
��tz調��E@L��tc蚿�H���H�H��t�ЃmH��(1�[]A\A]A^A_�@H��(�����[]A\A]A^A_�H���2���H���X�����H��A����臡���耡���E@�H�U �*���H�\$H���I�D$ H�E�0���H�U(����ff.�f���ATUH��SH�_ H��u�\f.��˾�L��M��tEH�E8L�c H�{H��t��H�{H�S�E@H9�t
��t3薾��E@H�߄�u��֠��L��M��u��}@H�}0t[]A\�k��賠���E@��D[]A\韠��ff.�@��ATUH��SH�_ H��u�\f.����L��M��tEH�E8L�c H�{H��t��H�{H�S�E@H9�t
��t[����E@H�߄�u��&���L��M��u��UH�}01�H���̭�[H�E H�E(�EH�EH�E]A\��۟���E@�D��SH�G H��H��t�H��H���
�H��u�{@H�{0t[�H���[銟��f.���SH�w(H��H��t�H����H�s(H��u�{@H�{0t
[���[�:���f.���AUI��ATI��USH���Btv�GA�P�WA<wxH�_ H��tNH�{A�ԉŨuf���H�[ u'H��t"H�{A�ԉŨt�H��L���*���H��t�f�A�}BtA�EA��A�EAH��[]A\A]�f�H�_ H��u���DH�5Y;�1��>��I�] ����AVI��AUI��ATI��US�B���GA�P�WA<��H�_ H��t]H�{L��A�ԉŨu$fD��H�[ u/H��t*H�{L��A�ԉŨt�H��L���W���H��t��A�~BtA�FA��A�FA[]A\A]A^�@H�_ H��u���DH�5�:�1���=��I�^ �ff.�@��AWI��AVAUATA��UH��SH��H�L$hL�D$pL�L$x��t@)�$�)�$�)�$�)�$�)�$�)�$�)�$�)�$�dH�%(H�D$H1�A�B��A�GA�PA�WA<��I�_ H����L�t$L�l$0����H�[ uwH��trH��$@L��L��D��H�D$8H�D$PH�D$@H�C@H�D$�C�D$0�D$40�D$H�H�D$ H�{�Չ¨t�H��L���D$���T$H�Ã�t�A�BtA�GA��A�GAH�D$HdH3%(uOH��[]A\A]A^A_�I�_ H���(�����f�H�5�8�1��-<��I�_ H��������虷�f���AVI��AUI��ATUS�Bt �GA�P�WA<wzH�_(H��u9�\�H�_(H��u'[]A\A]A^�fDH��L�������uL��M��tH�{A��L�c(�Ũu׃�t�A�~Bt�A�FA��[]A�FAA\A]A^�fDH�5�7�1��];��I�^(H��u��f���AWAVAUATUH��SH��(L�~ L�gH�t$dH�%(H�D$1�M����H��E��L�t$�:�jI��H����AVI�w@E��H����XZH��tH�|$��M� M��tFM��t)A�GI�WI�?��u�H��A�M��D��H�����뾐H�D$L9xu�H�E��L�eM��t/H�D$H�@H�EH�D$dH3%(uH��([]A\A]A^A_�H�E H�E������AWAVAUATUSH��H��XL�~ H�T$�L$dH�%(H�D$H1�M����H�D$(L��L�l$0M��H�D$�fDM� M��toA�GM�w@I�wL��L�t$0L��H�߉D$8I�H�D$@�Մ�t�A�WM�GjL���t$ D�L$$H��I���ZYH�L$H��t���u�H�|$(��M� M��u�f�H�C H�CH�D$HdH3%(uH��X[]A\A]A^A_��Ĵ�@�����{�F���H�L��H��L�GH��H��H�H�W�H�H��L�L�G�H��H�H��L�L�G�H��H�H��L�L�G�H��H�H��L�H��H�H�W�I��I��H�L�L�G�H��H��L�H�H�G�I��I��H�J�H9��b���������H�
{4��Hc�H�>��H��H��H��H�H�W�H�H��H��H��H�H�W�H�H��H�OH��H�H�H�H��H�yH��H�H�H�H��H�OH��H�H�H�H��H�yH��H�H�H�H��H��H�H�H��fDH���H������/���ff.���AWAVAUATUSH������B����L�T�H��f�I��L�XH��I��I�H�X�I�H�X�M��I��L�L�L�@�I��I��L�L�L�H�I��I��I�M�M��M�I��M�L�@�L��H��M�L�H�I�L��M�H��I�H�X�M��I��I�K�L9��b���A��A��A����L�
�2Oc�M�>A��I��H��I��L�L�@�L�I��I��L�L�@H�H�H��H��H�I�@M�L�I��L�HH�I��L�H�H��M�AH��H�I�H�H��H��H�I�@M�L�I��H�I��L�H�H�G0A��D#GJ�,������H��tFA��I��I��M����H�m0H��t7H9]u�D9eu�H�}@L��L������u�H�UI�UH��[]A\A]A^A_ÐH�������[]A\A]A^A_�I������I���G���I���*���A��H�����@��AVAUATUS�����B����L�L�H���H��L�@H��H��H�H�X�H�H��I�H��L�L�@�I��I��I�K�L�@�I��I��I�M�L�P�L��H��M�I�H�H�L��H��L�L�@�H�H��L�H��H�H�X�I��I��H�J�L9��a����у�����L��0Ic�L�>��H��H��H��H�H�H�H�H��H��H�H�HH�H�H��H��H�H�AH�	H�H��L�@H�H��H�H�H��I�HH��H�I�H�H��H��H�H�AH�	H�H��H�H��H�H�H�G0��#OH�,�H��t@A��I��M���DH�m0H��t'H9]u�D9eu�H�}@L��L���̞��uظ��1�[]A\A]A^�H���6���H���m���I���P�����H������ff.���H�G0��#OH�ȸ����H��u�(H�I0H��tH91u�A��u�H�AH�1�Ð������f.�������AWAVAUATA�ԉ�USH��H�G0#WH�и����H��tCM��H��I��E���fDH�[0H��t?H9+u�D9cu�H�{@L��L���ŝ��u�H�SI�UH��[]A\A]A^A_�f.�H�������[]A\A]A^A_�@L��H�����ff.�f���H�G0��#WH��H��u�)�H�@0H��tH90u�P��u��D�1��ff.����AWE��AVAUI��ATE1�UH��SH��H�^ dH�%(H�D$1�E��I��A��A��H��uQ�fDA��tH���R�����u+H�3H�SA�M��D��H�����M��t��uH�<$A��H�[ H��t:�SH�3��t�L�CATH�C@H��AVE��H��H���c�ZYM��u�H�[ H��u�H�E H�EH�D$dH3%(uH��[]A\A]A^A_�脬�@����txAVA��AUATUSH�G0D#GJ��H��tLA��H��I��M���fDH�[0H��t/H9+u�D9cu�H�{@L��L���ś��uٸ�f.�1�[]A\A]A^�DH���(�������G����H�GH�H��tH��H�V�1�1�H�V����H�H��tD�H;Wt3H�O0�GH#FH��H��u�H�@0H��t'H9�u�H�G��1��DH�G��f��ff.�@��H�G H��tH���H�G���H�G(H��tH���H�G���H��H��HD�H�H��t
H�@ H�1�ø�����f���H��H��HD�H�H��t
H�@(H�1�ø�����f���ATUSM��t;I�H��t<�C��tDH��I��H�{@E��uEH�>�H��t�S�U[]A\�DH�_H��u�[�]A\�DH�[]A\H��Íp�����I�$�f���H��tH�H��t�@���������H�GH��u�Ð��H��tH�H��tH�@H�1��DH�G������@��AWM��AVI��AUA��ATI��USL��H���t$M���bI�)H����|$��|$�D9muD��H�}@L�������E1�1�D��L��L����H�H�H�H��t��H�E0H�U8H��tH�P8H�U8H�E0H���H�B0D9m��D��H��GA�~@��踭�H���yD�hH�UH�uH�HH9�HD�H�PH�UH�PH�M H�H H�U(H�P(H����H�U H�B(H�P(H����H�U(H�B I9n��M��tI�A�~@H�D$H���Q�L��H�D$H�Ń|$��H�}@D��L���Z��A����A�E����I�L��H��I��H��H�I�\$�H�I�\$�H��H��H�H�I�D$�H��H��H�H�I�T$�H��H��H�H�2I�T$�H��H��H�H�I�t$�H��H��H�H�I�D$�H��H��H�H�I�\$�H��H��H�H�I9��Z���A��A����H�I(Jc�H�>��H��I��H��H�I�D$�H�H��I�T$H��H�I�$H�H��L�bH��H�H�H�H��I�L$H��H�I�$H�H��H�QH��H�H�H�H��L�bH��H�H�H�H��H��H�I�$H�H�]I�F0��A#VH��H�E8H�E0H��tH�h8H�]I�F0A#^H�,�H���H�H��t��1�H��[]A\A]A^A_Ð�E��uH9]t�A�H��1�1�L��E1������fDH�o�����+����7���fD�K���H�D$H�����fDI�N0A�VH#UH������I�F�[����I�F �A����I�F(� ����L�������L���v����L�����������fD��������H���5��H�=l
H��&��謧�ff.�����G����AWAVI��AUI��ATA��UH����SH��H���}@�~����H��H���9L�E M����A�f�N�D�M�@ E��I��M��u�Ic�L��H��I��H��A��H�H�N�,�����H�H��t��H�H�E(H�E H�EH�@(A����H�H�SH�P A����A�G�H��H�t�DH�BH�
H��H�H(H�H�JH�H H9�u�A�G�H��H�L�H�H�	H�H�J(H�H�@ J�+�}@H��H�E(���ҥ�H���H�H��t��E��t=H�E H���1�DH��JH���@H�@ H��u�Hc�H�MH�����1�H��[]A\A]A^A_�fD�C��H��H�������H���5��H�=j
H��'��譥�D��t�����1��f��[����4���fDL��1�H��A��H�H�E1�I�����H�H���V���H�H�E H�EH�@(H�H�@ ����H�ٸ���1��������������f���AWAVI��AUATI��UH��S��H��(dH�%(H�D$1��Bt�GA�P�WA<��}Bt�EA�P�UA<��A�F+E�D$��M�~ ����M����E1�1�H�D$H�$�A�WE�����C�����u|I�+�H�sI�H�t$A�ԅ��BM� H�[ M��tRH��u�A�~BtA�nA�}Bt�mA�D$H�L$dH3%(�D$�IH��([]A\A]A^A_�f��؉D$A�~BtA�nA�}Bt��mA�f�H�] M��t�H��t�A������I���uyH�$H��H���:����Z���I�H�t$A�ԅ�uzM� M������f���)����v���H�s@I�@�w������A�~BtA�nA�}B�D$�����X���L�$I�w@H���������I�H�t$A�ԅ�t�A�~B�D$��������H�5y!�1���$�������H�5Y!�1��$�������3����AVI��AUATUSH�� dH�%(H�D$1��G����H�G H���L�l$L�d$H�D$f.�H�@ H�D$H��t(L��L���tP�Ӆ�H�D$y�H�D$H�@ H�D$H��u�H�D$H�@I�1�H�T$dH3%(u4H�� []A\A]A^���Ӆ�H�D$~�H�D$�H��������S����H�G�����9G�������SH��H��HcwH�=�8dH�%(H�D$1�H���!��uMH�$�B0<t1<tH�D$dH3%(uEH��[��H�BH��t�H�����H�H��t�H�;���Đ�SH�5��1��#���蓞���SH��H��HcwH�=y�8dH�%(H�D$1�H������uMH�$�B0<t1<tH�D$dH3%(uEH��[��H�BH��t�H�����H�BH��t�H�;���ËSH�5~�1��z"���������9O(t1��f�H��H�`�H�W,H�5����H������H���@��USH��(H��`�dH�%(H�D$1�H�<$H����t$�D$�#���E1��H��Hc�A�H���H�����H�L$dH3%(u	H��(��[]��2��f���USHc�H��H��H��`�dH�%(H�D$1�H��H�������uNH�$�q�V��Q��~H�\$dH3%(u4H��[]�fDA�H��1�1�H����/����D������蜜�ff.����SH��Hc�H��dH�%(H�D$1�H�`�H��H����{���u'H�$�P�H�H�L$dH3%(uH��[�D�����1����!����H��Hc�dH�%(H�D$1�H�`�H��H�������u#H�$�BH�L$dH3%(uH���fD�������輛�ff.����SH��H�������H��t
Hc��CH�[�ff.�f���AVAUE��ATUH��SH��H��`L�L$XdH�%(H�D$(1������H����H��x�D�0H�t$D�����I��H���7H��$��D$(H�D$H�D$0H�D$ E��~kI���T$�(1�L��$�1��"f������L�9t��A9�t'��/v�L��I��9u�H��tU�U�PDA���`�����t�|$H��t3H�|$��=��H���Q>��H�L$I��H��I��H�5��1�����E1�H�\$(dH3%(L����H��`[]A\A]A^�f�H��t�H�|$E1��n=��H����=��H�L$I��H��I��H�5��1��e���H��t�H�|$�1=��H���=��H��H��E��SH�L$I��H�5�1���#��XZ�O���H���C���H�|$E1���<��H���^=��H�L$I��H��I��H�5!�1����������S����SH��`�E1�1�H��\1�H���������uHǃ�[�f������[�f���H�`�E1�1�1�H�p\A�H������D��������H��H�5�����|$H�T$H�=��8�l��H������H��HE1�A��8dH�%(H�D$81�H�s�8H�<$H�=X�8H�t$1��T$(H��H�D$H�D$�D$,�D$0H�D$ �������t	�&�8��H�L$8dH3%(uH��H���f���H��HE1�A�dH�%(H�D$81�H�أ8H�|$H�=��8H�t$1��L$(�8H�T$ H��H�$H�D$�D$,�D$0�E�����t	���8��H�L$8dH3%(uH��H��]��ff.�f���AVAUI��H�=>�8ATUH�-4�8SH�� dH�%(H�D$1�H�\$L�d$H������(L�t$I�v H��tL���ҝ��t>H��H�����H��L��H�������t�1�H�L$dH3%(uH�� []A\A]A^�f�A�F,��襖�D��H��A�1�1Ҿ2H�=��8�=��H���8H���ff.�f���H�=U�8�P����H��(dH�%(H�D$1�H�t$���H��t9Hct$H�T$H�=�8�3���uH�D$H�@ H�L$dH3%(u
H��(Ð1�������AU1�ATUH��SH��dH�%(H�D$1�L�l$�D$�D���D$��xM���ȋL���~�T���~�I��@�1�fD�L���A�$�T$H��9\���D$��y�1���H���H�H�D$dH3%(uH��[]A\A]��+��ff.���AW��AVAUL�-��ATE1�USH��HdH�%(H��$81�H�|$0�D$$L�t$H�<$�D$�H�L������Å����7����r����"�H�|$$�M��{�4��}���T$XA��H��@����TE��~E1�@A���L��UE9�u�E���D$X����E1�f��H�=A���UD9|$X�H�<$��1�E1��H�E��~A���L��UE9�u�H� ��pH�x�U�|$$��L���D$$����Å�����H��$8dH3%(��H��H[]A\A]A^A_�H��@���,�?����H�=��
�U�D$X���0���H�<$�|����k�����t$�|$$��H�<$�W���H� �H��@��pH�x�U�|$$�D�����������w�H��
�)���H�|$�/w������f.�H� �H��@��pH�x�U�|$$���H�|$��v������fDH�� ��D$$�B������H�R�H�H�BH���H����D�0H��H9�u�����H��@�����@H��@��L$XA��H�E��~AH�=L
���H�<$��1��H��P�����H�=��U���@�H�=�������������H��H��H�w �H���Q��1�H���ff.�f���H��H��H�7�H���Q��1�H���ff.�AVAUI��ATUSH�H�B�A��H�H��H)�H�j�H�/��au���@H��I���@�{8��A��xLH��H�]�H�����{�Ct�{u�����CH�]��C��L��CH�u��oR��A��y�I�MH��`�H�A�H9� s(H�y�u��H�8tI�EH��H;� w�[L��]A\A]A^�DL���N���P�������C�t��H�E��oH�SH�PH�}��w�GH�E��@H�]��7������H�}���D��ATI��UH���S�(t���oEH��H�EH��H�CH�� ��vH���A���U(H�u H��L���C�C�G��[1�]A\�ff.�f���AWAVAUATUSH��H��XH�t$H�T$/H�5�dH�%(H�D$H1��D$/�������NH���6���|$/�H�\$0�L�l$@I��L���V���xHc��u��L��H�$�:��xHc�H���+s��H��L��I��H�8�I�����#�H�D$@H��L���H�P Hc��I�����H��L��L��������u�I��`�Hc�H��L�|$8H��I��$HH�L$H�
ĨI���T���9���H��H�$L�,I�}����kr��H�L$8�@�@�oH�QH��H�PH�� @��vH��H�D$�r��H�L$8H�D$�@I�}�@�Q(H�q H����E��I��$HH�����I��$HH��L����������H�D$8Hc@,=����2���H�T$H�$L�,I�}�=����H�T$�q��I�EH���@�@�4��H�T$I�4H��H�t$��|�I�MH�t$H�|$�P� E�����H�`�H�T$H�5���H��H���H�D$HdH3%(u,H��X[]A\A]A^A_�f.�L���8q��H�<$�/q����������ATUSH��dH�%(H�D$1���u_H��1�H���}+�����tHH�$L�#A�|$tA�|$u
A�D$��wOL�����H�$�EH�Hc@H�E�f.��+,��H�D$dH3%(��H��[]A\�fD���A�D$�6p��H�H�$�Ao$H�I�T$H�$H�PH�;�w5�GH��@L�#A�|$�Y����EH�Hc@H�E�q���@���H�$H�;�赋�D��SH��H�5�H��dH�%(H�D$1�H�T$�D$辘�����t%H���2���|$H��t/H����H�5������k��H�D$dH3%(u!H��[�fDH�ǀ�H�5J�����������ff.���USH��dH�%(H�D$1���uaH��1�H���)�����tJH�$H��xu]H�8�u�H��H��tmH���5z�ƉC����H���q���CH����[*��H�D$dH3%(unH��[]�@H�5�1������CH����C�H�=r��(q���CH���H�5���1�����s�e���������SH��H�� dH�%(H�D$1�H�	��D$H�D$��uLH�`�H��PH�����pH�x�s�p���CH�H�D$dH3%(��H�� [�D��u;1�H�t$��:(�����t%H�D$H�8�tO�CH��f.��)���f�H�5��1��
���CH��n���DH�t$H�T$�I.���t$H�|$�s��uH�;�C�>���D��o��H�����Ɉ�f���SH�=+H���F��o���CH�[����AWAVAUATUSH��dH�%(H��$1�����I��1�H�T$�H�t$�'������mH�l$H�]�{t�{u�C���<H��蔃��H�l$H�]�{t"�{u�C����H���k���H�D$H�H�D$L�1�H��H��
H�H�1��‹H�=8
���H�<$1�H��H���EP��H�<$����k��H����k�����H��`�H�L$�H�5
H��8�F�������H�D$L�t$ L���o)D$ �oH)L$0�oP )T$@�oX0)\$P�o`@)d$`�ohP)l$p�op`)�$��oxp)�$��o��)�$��o��)�$��o��)�$��o��)�$��o��)�$��o��)�$�H���H��$�G�����j��H��L�xfD���E1�H��H�
	H������D�H1�D����y�L���u�H��L��E1�H��8j�PH��A��A������ZY���t�H��8E1�1�A���H�5��h��E�eI�mA�E�f��%��H��$dH3%(�VH��[]A\A]A^A_�f�H�5��1��
��A�EI�E�fDH�`�E1�1ɺH�5�H��8����A�EI�E�w���f�����C�@i��H�EH�D$�o;H�8H�SH�PH�D$H�8����GH��BH��{����������C��h��H�EH�D$�o3H�0H�SH�PH�D$H�8�w'�GH��BH��{�x����k��������H�D$H�8�ʐ���H�D$H�8�[����Y��f���SH��H��H��dH�%(H�D$1��l+��H�`�H�;H��H��p3[A�H����6��H�D$dH3%(uH��[����ff.������/wML�B�pA���2O���/����I��Q��tCH�1�>t;H���<t:<tN1�H����H�BL�@L�BL�I�@H�B�Q��u�1������L��� D���fDI�8����D���L�B����2��/weH�BD�FA��D�N�A��/��D�ND�
F�A��/����Lȉ2��Q��AE���tH��:tH�D#A(A9�t11��fDH�BH�pH�rL�H�FH�BD�H�pH�r�@H���QH�qL�׹�PC��1�H���H�r��H�B��ff.�f���USH��(dH�%(H�D$1�����H��H�l$�<f����@�@H�D$�"f��H�|$�@�@H�D$�8)��H�|$�.)��H���&)��L�D$H�L$�H�`�H�5��H��81��k��H��E1�H��jH�;A�H�5̛�	蕳��^_�����H�l$H��E1ɺjH�;H��A�H�5���_���ZY���t(H�D$dH3%(�~H��([]�D�!���ِH������{wRH�5��1�����CH��f�H������H�|$�����{vH���`���H�51��H���H��������UH��SH��H��`�H��@tH��@�v��H��p���u&Hǃ@�EH�EH��[]��H�����pH�P�H���H�@�H��@�f.���UH��SH��H��`�dH�%(H�D$1�H��8H��tH��H�$Hǃ8����H��X����u1Hǃ8�EH�EH�D$dH3%(uNH��[]�H��H���H��H��0��H��h��XH�P�H��hH�@�H��8��_�ff.�@��ATUH��H�5ֆSH�� dH�%(H�D$1�H�L$H��H�D$H�D$��K������tOH�<$1�H�T$�o����ubH�\$H��-H��HD��"���H�5�H��H��1��A��H�|$�b��H�D$dH3%(��H�� []A\�f.�H�|$E1���b��H��`�H��8H�����oMH�@H��H�EH�� �����E�H��0H��H�E�y��X��\L��89���H��h����XH�PH��hL� A����a��H�<$H��8�`"������H�D$H�$��0H��8�oH�RH�PH��8�w&�GH��8�@E�������E���f���H��8��f�H���������tH��`1҉�\Hc�H���a��Hc�XH��`H��H�������H��8�Da��Hǃ8�EH�E�1�����|���AUATUH��SH��(dH�%(H�D$1���������1�H�T$H�t$��g�������L�d$I�$�{t"�{u�C���mH���5r��H�D$H�H�A��=��=��=tzH�5��1�����EH�EH�D$dH3%(�`H��([]A\A]�f�H�t$�1�A�������u@����f�L�l$I�]�{t�{u�C��w;H���w��H�D$H�H�H�5jY
D��1�����EH�E�V���fD����C�h_��I�EH�D$�oH�H�SH�PH�D$H�8�w�GH��BH��{t��p����[�H�D$H�8�Ґ����C�_��I�$H�D$�oH�H�SH�PH�D$H�8�v
��H�D$H�8�GH��BH��7����z�ff.�@��AUATUSH��H��dH�%(H�D$1���t*�CH�H�D$dH3%(��H��[]A\A]�1�H��������t�L�$$I�,$�}t!�}u�E���H����o��H�$H�(H�mH�5H����I��`�I��(�A�H�H��H)�L�a�I�<$tH�5�1��.���I�T$�I9� wPIcD$�H9�~fH)�H��H)�H��oH�@H��H�CH�� ��vH�����C�C���fDH�5��1���������H��H�5�1�����CH����f.�����E�]��I�$H�$�oMH�H�UH�PH�$H�8�v��H�$H�8�GH��BH�(����x���AUATUSH��8dH�%(H�D$(1���uMH��1�H�T$�H�t$�4�����t/H�D$H�8�G<�K<t?�CH��f.����H�D$(dH3%(��H��8[]A\A]�@�wH�?H�T$ �$�����t�H�D$ L� L�l$I�m�}t"�}u�E����H���Bs��H�D$H�(D�mH�mA�}�[��H��D��H���k��I�|$0H��H�D$H��H��P���������H�D$H��x����H�@H�xx�
���H���[��H�|$H�D$H�H�H�I�PH�0�QxH�������8uH�]H9H@���CH��������I����������E��Z��I�EH�D$�oEH�H�UH�PH�D$H�8�v
��H�D$H�8�GH��BH�(�}�������f�H���Z���CH��=���H�xH�D$�Z��H�D$H���Z�������Cv���AWAVAUATUSH��dH�%(H�D$x1���u>I��1�H�t$@��������t%H�D$@H�8�G<��<t=A�D$�
D���H�D$xdH3%(�!H�Ĉ[]A\A]A^A_�D�wH�?H�T$P�("����u�H�D$PH�H�D$H�\$H��t�L��H�[0H�l$X���H��H��L�l$`���H�D$pH�D$H�D$<H�D$ H�D$hH�D$(H�D$HH�D$�=f�I��`�I��PH��t�����tI�GI9�Pt1f�H��H�����H��L��H�����������L�|$`A�G��t�I��Hd�I��A�G t1H�D$I9Gt&H�L$H�T$ E1�I��H�t$(H�����������X��D��I��H�D$H�@�@H�D$`H�xE�w�K[��H�T$E1�1�I�H�D$HA���@I�<$���,���@H�GH���t:���H�D$���I���L�|$`���!���A�G����f�A�D$I�$���DH�D$`H�|$hD��H�P�D$<�p��������������s�f���AUATUH��SH��H��`�dH�%(H�D$1�H��(�B�H�H��H)�L�b�I�<$tH�5X��1����I�D$�H9� ��M�l$�H���U��E����Ic�H��H��I��A�E�H)�M�,�I�䐿�V��H�$H��oH�RH��H�PH�� ��vH����H�$�@E1�L��1��@H�}A�H����M���L9�u�H�D$dH3%(u1H��[]A\A]�DH�5���1������EH�E��Br�f���AWAVAUATUSH��dH�%(H�D$x1����ZI��1�H�t$@���������=H�D$@H�8��SH�GH�@pH���B��H��H���4H�D$@H�l$PL�l$HL�|$pL�t$<H�8��L��H�D$����H��H���K��H�D$XH�D$H�D$`H�D$�DH��H���e��H��L��H���g������H�t$E1�I��L��L��H�������u��D$<H�t$XH�|$�P�����u��D$<H�L$H�T$hH�|$X�p��L���H�L$HH�t$`H�H��H�L$(H�t$ �@�Y`�H�L$(H�t$ L��PH�	�(���L���@���H�D$xdH3%(u#H�Ĉ[]A\A]A^A_ÐA�D$I�$���{p�ff.���AUATUSH��8dH�%(H�D$(1�����H��1�H�T$H��������tmL�d$I�$�{t"�{u�C���|H���k��H�D$H��C����H�$H�8�G<tJ<t~H�5o��1��K��E�
D���H�D$(dH3%(��H��8[]A\A]�@H�GH�@PH��t�H��Ѕ���f��EH�E�f��w��t�H�\$H�?H��������u�H�D$L� M���i���H�D$�L��H�0��H��t�I��`�I���H9�t����pH�xH�L$H�T$ �5���H�D$ �8*��H�$H��H��pH�8�R�����J���H�D$H��EI9�P����H�E���������C�R��I�$H�D$�oH�H�SH�PH�D$H�8�w'�GH��BH��{�@����+�����{�H�D$H�8��I��PL��������u.I��XH����������L��H��������v���fD�EH�E������m�f.���UH��AUATH�M�H�U�SL�E�H��H�5�#
H��(dH�%(H�E�1��E��z��������}��u����~Hc�����	H��H��H��H���H���H)�H9�tH��H��$���f.�%�t	H)�H�L�L�d$��H�u�I���L���ɹ���E�L��H�MЍPH�`�H��@蹹��A���C1�E��uH�E�H��P(����H�H�E�dH3%(��H�e�[A\A]]�f.�H�}�H�U�����C��uH�E�H��@(����H��fDH����[P���U�H�u�H��I���	����E�H�M�L��PH�`�H��@���L��A���NP���3����l�@��UH��AUATH�M�H�U�SL�E�H��H�5,"
H��(dH�%(H�E�1��E��y��������}��u����~Hc�����	H��H��H��H���H���H)�H9�tH��H��$���f.�%�t	H)�H�L�L�d$��H�u�I���L���	����E�L��H�MЍPH�`�H��@���A���C1�E��uH�E�H��P(������H�H�E�dH3%(��H�e�[A\A]]��H�}�H�U��S���C��uH�E�H��@(������H��H����N���U�H�u�H��I���I����E�H�M�L��PH�`�H��@�9���L��A���N���3����Dj�@��ATUSH��0dH�%(H�D$(1���uH��1�H�t$��������tfL�d$I�$�{t"�{u�C����H���]e��H�D$H�L�d$�sH�;L�������tF�|$$vL���/���EH�E���k	��H�D$(dH3%(��H��0[]A\�fD�EH�E��f.�����C�`M��I�$H�D$�oH�H�SH�PH�D$H�8�w'�GH��BH��{�7����"�����K��H�D$H�8����h�ff.����AUATUH��SH��dH�%(H�D$1�H�`�Hc� ��ts����1�H���j�������L�,$M�eA�|$t!A�|$u
A�D$��wL����c��H�$L� A�L$I�$�A�A�H�=��
2�EH�]H�D$dH3%(��H��[]A\A]�������f��EH�E�f����A�D$��K��I�EH�$�Ao$H�I�T$H�PH�$H�8�v���H�$H�8�GH��BL� A�|$�+��������g���ATUSH��@dH�%(H�D$81����kH��1�H�t$��������NH�D$H�8�G<�z<�ZH�G�PpH��H���G1�H�t$H����������WH���/��H�D$H��xH�D$�pL�d$H�;E1��A�L���u���H�D$E1�L��H��A���@H�5�h
jH�;膘��H�D$ E1�H��A��@Y^H�L$(H�T$H�t$ 軻��������uH�T$(H�L$01�H���9,��H��E1�A��jH�L$@H�51
H�;����H�D$@1�H��H��@XZ��������H�D$8dH3%(��H��@[]A\�fDH�5���1��5���H�/�����CH���D$H�T$ E1�1�L�D$0H�ߍH��-���4���D��nI��I��H�D$�oA$H�@H��I�D$H�� ��vL�����A�D$A�D$L�d$�?����e�f���ATUSH�� dH�%(H�D$1�����H��1�H�L$H��H�T$���������L�$$I�$�{t�{u�C���6H���`��L�d$I�$�{t�{u�C���mH���_��L�d$I�$�{t�{thH���(Z��L�d$I�$H�;��H�D$�EI�$H�0H�$H�8虴��H�H�E������H�D$dH3%(��H�� []A\�fD�C��v�����C��G��I�$H�D$�oH�H�SH�PH�D$H�8��+�GH��BH��=���DH�5���1����EH�E�Y���@����C�pG��I�$H�$�oH�H�SH�PH�$H�8����GH��BH��{�|����o���D����C�G��I�$H�D$�oH�H�SH�PH�D$H�8�w'�GH��BH��{�G����:�������H�D$H�8�ʐ����H�$H�8�Z��������H�D$H�8�����qb���ATUSH�� dH�%(H�D$1�����H��1�H�T$�H�t$������t}L�d$I�$�{t�{u�C����H���]��H�\$L�#A�|$t#A�|$uA�D$����L���V]��H�\$H�D$�EH�3H�8�
���H�H�E�
D�{��H�D$dH3%(��H�� []A\�fD����C�E��I�$H�D$�oH�H�SH�PH�D$H�8����GH��BH��{�,����������A�D$�&E��H�H�D$�Ao$H�I�T$H�\$H�PH�;�w+�GH��@L�#A�|$��������f����H�\$H�;�Ɛ���H�D$H�8�S����`�f���ATUSH�� dH�%(H�D$1�����H��1�H�L$H��H�T$����������L�$$I�$�{t�{u�C���6H���[��L�d$I�$�{t�{u�C���mH���u[��L�d$I�$�{t�{thH���U��L�d$I�$H�;��H�D$�EI�$H�0H�$H�8�ٯ��H�H�E���k���H�D$dH3%(��H�� []A\�fD�C��v�����C�pC��I�$H�D$�oH�H�SH�PH�D$H�8��+�GH��BH��=���DH�51��1����EH�E�Y���@����C��B��I�$H�$�oH�H�SH�PH�$H�8����GH��BH��{�|����o���D����C�B��I�$H�D$�oH�H�SH�PH�D$H�8�w'�GH��BH��{�G����:�����{��H�D$H�8�ʐ�k��H�$H�8�Z�����S��H�D$H�8������]���ATUSH�� dH�%(H�D$1�����H��1�H�T$�H�t$������t}L�d$I�$�{t�{u�C����H���Y��H�\$L�#A�|$t#A�|$uA�D$����L����X��H�\$H�D$�EH�3H�8�=���H�H�E�
D���H�D$dH3%(��H�� []A\�fD����C�A��I�$H�D$�oH�H�SH�PH�D$H�8����GH��BH��{�,����������A�D$�@��H�H�D$�Ao$H�I�T$H�\$H�PH�;�w+�GH��@L�#A�|$��������f����H�\$H�;�Ɛ�{��H�D$H�8�S����\�f���ATI��`�UH��SI��$(�B�H�H��H)�H�Z�H�;tH�5&��1��J�H�C�I9�$ w�EH�C�[H�E]A\�H�5)��1���[�EH�E����]A\�@����u@SH��H�����H�`�H��A�A���H�5��[H��@1������������u@SH��H���\��H��H�`�[E1�A���H��@H�5���1�鞡��fD�����SH��H�� dH�%(H�D$1���uPH�`�H��PH��tlH�@H��tc�pH�x�s�A���CH�H�D$dH3%(��H�� [�@��u;1�H�t$��*������t%H�D$H�8�G<t%<tY�CH��@����f�H�GH���H��tH�T$H�t$��Ѕ�t;H�D$H�8���� @�wH�?H�T$�h����u�H�D$H�H������뀐�D$�C�CH�D$H������Y���ATUSH��dH�%(H�D$1����|H��H��I�����H��`�1�H���H��������H�4$H��1��2��1�H���8���E1�1�1�A�L��H��耮����t�H�D$dH3%(uH��[]A\�f���������X�@AWI��AVAUATUSH��H��H��H�T$(H�l$8L�d$@H��L�t$`dH�%(H��$�1��g���H�D$4H�D$H�D$HH�D$H�D$XH�D$ f�H��L��H��肮�����2H�T$H�t$E1�I��L��H��语��H��H���D����D$4H�L$ H�T$PH�|$H�p��y���L�l$XL���G�H�t$p�L���D$xL�l$pƄ$��Y�H���p���H��`�H���H9��Y������;��H��H�D$hH�D$@H��oH�PH��H�QH�� <vH������H�L$h�A���A�A<v2H�t$XH�L$H��H�4$��F�H�L$H�4$H�|$(�P�&�������H�|$h1�����H�L$h�DH��$�dH3%(uH�Ę[]A\A]A^A_��W�ff.�AWAVAUATUSH��(dH�%(H�D$1�����H���1�H��H�T$���������H�$H��P@��t	��������E1�H�@H�����L�|$L�t$M�&A�|$t&A�|$uA�D$����L����Q��H�D$L� A�t$I�<$1�L���2�����t}@���,M���;I�}H��tRH�D$H�0�����������CH��	@���H�D$dH3%(�/H��([]A\A]A^A_���CH���1��@L�|$�pH�8L���%�������H�D$L�(H�$H��x���������fD���A�D$�f9��I�H�D$�Ao$H�I�T$H�PH�D$H�8�v
�v��H�D$H�8�GH��BL� A�|$��������@H�$H�8���H������@H�$H�8����H�x���H�5���1��8���CH�����T�������f���U1�H��H�5w�S���H������H��H���1�[]�\���ff.����ATUSH��H�5�H��`dH�%(H�D$X1�H�L$H�T$H�D$L�L$L�D$�D$�Ca�������HcT$�l$H�|$��~BL�d�L9�v�6f.��x:��H�xI9�rL��:H)�H���S�H��u�H�D$�H��w[A�L��H������� tAH�|$u9H�HH�Q@H����H����HH�D$H�D$��wI��A�����1�H�5b�����H�|$t
H�|$���CH�H�D$XdH3%(�"H��`[]A\�fD�8:����H�58��1��L���f.�H����w�����6��H���H�|$H�D$H���o
H�RH�PH�O�������3���H�D$H�D$�oL�d$ )D$ H�@H��H�D$0H�� ��vL�����H�|$t
H�|$��1�H�|$@��t$���D$8�=9��L���D$L���H�D$@�D$���D$H����������CH�������Q���ATUSH��H�5wR
H�� dH�%(H�D$1�H�L$H�T$��^�����tn�t$H�|$H�T$�������tvH�����H�D$H�8�y���H�D$H�(L�exL���e�����~H��L��H���S���H�D$H�(L��PL���<�����0H�D$dH3%(u0H�� []A\���CH���H��L��H��������P���ATUSH�� dH�%(H�D$1�����H��1�H�t$��w������L�d$I�$�{t"�{u�C����H���K��H�D$H�D�cH�A�|$�l4��D��H��H������H�L$H��H�D$H��H��PH�`�H��8������H��A���W4��1�E��u H�D$��8u1�H��U[H9H@��EH�U�fD��H�D$dH3%(uzH�� []A\�f�����C�3��I�$H�D$�oH�H�SH�PH�D$H�8�w'�GH��BH��{������������H�D$H�8���LO�ff.����ATUSH��dH�%(H�D$1�����H��1�H���������L�$$I�$�{t!�{u�C����H���YJ��H�$H�D�cH�A�|$��2��H��D��H��胛��H�ǀ�H��H�$H��H��P��褝���E��u<H�EH���2���f.��;�H�D$dH3%(u~H��[]A\�f�H�E��fD����C�@2��I�$H�$�oH�H�SH�PH�$H�8�v�T��H�$H�8�GH��BH��{���������M����ATUSH�� dH�%(H�D$1�����H��1�H�t$��g�����L�d$I�$�{t"�{u�C���H����H��H�D$H�L�#�H�5!�L���P��ucH�|(8H���t�H�3H��t)@�H��H�� �
��H�3H��u��
D���H�D$dH3%(�H�� []A\�fD�[�{��0����L��H��蘙��H�ǀ�H�L$H��H�D$H��H��P��胙��H�߃������0��H�D$H�X(H���D����EH�E�l��������C�h0��I�$H�D$�oH�H�SH�PH�D$H�8�v
�z��H�D$H�8�GH��BH��{��������f��;0���EH�E�����K�D��ATUSH�� dH�%(H�D$1�H�D$����H��1�H�t$��n������H�D$H�8��SH��`�E1�H��@H��t_�oMH�@H��H�EH�� ������p��tL��@9���H�������pH�PH���L� A���/��H�T$H��@H��J���	�oH�RH�P��w=E��u�E�f.���H�D$dH3%(��H�� []A\�fDH�����E��u��f�H�������&����tH��x1҉�tHc�H���.��Hc�pH��xH��H�������1�H�T$��:����uhH�\$H���H��HD����H�5���H��H��1��o��H�|$�%.���%���H���.��Hǃ@�EH�E����@H�|$��-���&����I�@���1�H�5�$81�������AVL�5�I
AUATUH��S1�H�� H�?dH�%(H�D$1�L�d$L�l$L������6D��tH�@��L���H�D$��H�8���H�}L������H�}L��L��������t�H�D$dH3%(u
H�� []A\A]A^���H�f���AWAVAUATUSH��XI�`�dH�%(H�D$H1�H�D$0H�D$8M��(L�D$@����I�� L��1�I�P����H9���H�x�H�P���H�@��H��H)�H���
H�x�t�H��H�P�H9�w�u�I����|$L�ppI�@�H�D$@I�@�H9�sI�x�u	��H�8tH�D$@H��H9�r��D$E1�E1�L��M���E�8DH�EH����@p�D$H�AL�hM����L�aHL�pM����M����I�FE1�L�5T�H�D$0H�H���|�@t��<<�mH�0�D��H�=&�1��H�T$0H��t6H��H�T$�6�H�T$��H�@�H��L���6�L����H�@��H�0�H�=��L��1��H�|$8H��t�d���H�|$8��H���aH�0��T$H��1�H�=���H�MpA��M��tL��H�L$��*��H�L$I��H����H�D$0H�Y@H��H�D$8H�������H�ipH���JH�EH��t�@t�P�v<I��H�AH���D$L�hM�������DL�1M���A�~tI�KE1�E1�L�-�������T$��������D$���{���H�|$@�N����l$H�D$8�b����M���I�FL�5�i
H�D$0�"����e�H�D$HdH3%(��H��X[]A\A]A^A_�f�H�EpH��u�f�H�@pH����H�PH��t	�:��H�H@H��t�H�H���H�=�H�0��Pp1���\���H���D$H���K���E1�L�-�����H�T$,H�t$0L��H�L$�+�H�L$��uL�t$0M��L�5���F���I�~P�����I�FPH�58�Hc�H�>��M������I���I���D$L�D$@L�pp�F��D$���H�]@H��������D$���H�@��H�=�
����E1�E1�L�-�����M��L�-"
����tl�E1��(���@H���@H�D$8�2�H�|$8L��E1������{���M��L�-@"
���M��L�-�!
���M��L�-"
���E1�E1��C����C�ff.���AWAVAUATUSH��HI�`�H�|$1��T$M��(I�� I�P�dH�%(H�D$81�L�D$0L��f�A��H9���H�x�H�P���H�@��A��H��H)�H����H�x�t�H��H�P�H9�w�u�M����D$M������t[M����Ic@�t$D�o�M�pH��I)�I�P�H�T$0��t.I�@�H9�s%I�x�u��H�8tH�D$0H��H9�r�H�|$��M��udDH�D$8dH3%(��H��H[]A\A]A^A_�M����D$M���R������J���I�H��t
�xtD�]H�|$�I�1�D�l$I���f.�H��A��	H�5h�����I�GI�HH�@H��t
��KH��t?H�HA��H��H�5�����A�H��H�
�e
�H�52V
���I�H�����@t��<<��H�|$H��I������M�~pM��������E%���@H��H���@�_�I�o@H����I�M��H���D�`p�H�5�@
H��A�H������Ic̺H��H�5͓��I�GH�HH������I�L�%S�H��t
�xtI��A�L��	H��H�5����%����D�|$E�������D$���
���H�|$0A���خ���H�5�H��H������D�|$�����M�gpM��M���S���I�$H��t�Pt�JĀ�v	��I�M���DM�d$pM����I�D$H��t���t�������@ �����I�D$@H��t�H���H��A��H�5�?
���I�$�H��H�5���Hp�?����f.�H����H�HA��H��H�5�y�T$��u~A��H��H�
�H�5�S
�P����H�xP�KH�@PH�5��Hc�H�>��1��$���I�T$@H��tM��H������I�D$pM��H�������I������I�OH�H�5��H���{���I�GH�@�]���H�T$$H�t$(���H�L$(�H��A��H�5����%���L�%N����M��L�%V
�����������S"���@I��H���@�m�L��L����
���L���H��H�5�������^���M��L�%X
���M��L�%Z
���M��L�%�
���|���H�|$���Z���L�%\�����M�pH�|$���M��������2����=�D��SH��H�5�SH��dH�%(H�D$1�H�T$�D$�J�����t�T$�H�����H�D$dH3%(uH��[��,=�f.�f����9����ÐSH���H�|$�t$dH�4%(H��$�1��wT����H�D$�H�xtSH�`�H�|$ �D$����H��H��H�t$��D�������H�T$H�`��|$�H���ƒ|$u	���uGH�\$H�{8H�CHH9�t	� ��H�CHH�L$H�A8�APH�AH�A@�AH�AP��c1�H��$�dH3%(uSH���[�f.�H�D$H���\$H�H �PPH��H�pHSL�H0L�@(�PZY�D$�6���fD���A��;�ff.���H��H�?�����H��Ð��H�?H��w�J��u1��������f����u�fDH��@H��@�3�����H���H�@�E1�1�A�H��`��dH��H�eG8H���Hǂ�1���k�������H�������@��SH��`�H�����}��H����<�1�[����H��H�=�F8�}��H�=�F8�<�1�H���f���SH��`�H���H��t/H�5�����|��H����`}��H������Hǃ�1�[�D��H�`�H�Ɛ�\1�H�����H������f���H��H�5���|$H�=>F8H�T$���H������AVAUATU��SH��H��@H�wL�-F8dH�%(H�D$81�L�d$L�t$ H��u\��@H�|$�T$(H�t$ H�GH��t(H��H�O L�O0L�G(j��Y^��u`H�|$H�t$ �T$(H�w8�W@H��`H�sH��tvH���+�SA�`jL��M��H���&k��_AX���tn�sH�{L���o������o���H�|$H�GH��t�H��H��`�W@H�w8L�O0L�G(H�O j��H�sXZH��u�1�H�L$8dH3%(uH��@[]A\A]A^É�D$����D$���8�f.���AWAVA��AUI��ATE��U��SH��(H��`�H�$L�|$��L��D�D$H���L��dH�%(H�D$1�����D�D$�����H�D$D�HD�PTA��uA��uD�ʃ�8���PD�\$`E����H����kE����H�<$������H�|$H��H�GH��tvH��H�O L�O0��L�G(H��AT��ZYH�|$��tRH������1�H�t$dH34%(�BH��([]A\A]A^A_�DH�D$D�@�h����������f.�H�G8H9GHt
H���~��H�|$H�_81��o@�fDH�D$A��H��L��A��A�L��H�P8D	HE1�H�PH�P@�PPH�D$D���@TH���j��h��AXAY��H�<$���H�|$H��H�GH���y���H��L�O0L�G(H��H�O ��AT��^_���Q������f.��HD�T$D�L$�|��E1�1�1ҾH��H����f��D�T$D�L$�W����=6�ff.�f���H��j���H���ff.����AVA��AUI��ATA�ԉ�L��USH��H��`�dH�%(H�D$1�H��H���謂�����toA��tY1�H���t)H�<$D������Ņ�uKH���E1�1�D��L���u��H�T$dH3%(��u)H��[]A\A]A^�DH�$�@u�fD��������L5�ff.����SH�Ӊ�H��H��H�=pA8dH�%(H�D$1�H�������t
H�$H�XX1�H�\$dH3%(uH��[���4�fD��S��H��H��H��`�dH�%(H�L$1�H��H�����H��臁��1҅�uH�$��t�HT��u*H�x81�H��u(H�\$dH3%(H��u!H��[�fDH�xHH��t�1��X;�H�����N4�ff.���S��H��H��H��`�dH�%(H�L$1�H��H�����H�����f��uH�$��t�PT��u(H�x8f�H��u$H�D$dH3%(uH��[�DH�xHH��t�1��xk���3���S��H��H��H��`�dH�%(H�L$1�H��H�����H���W���H�����uH�$��t4�PT��t-H�PHf�H�\$dH3%(H��uH��[��H�P8���%3�D��S��tfH�_8H��tp�G@����������uH�5]�H����1��t1��
H����9��t0H�@��H�=�
[H���@�GT��t�H�_H�GPH��u�H�@��H�=�
[H���@H�5rV
H���a1��u��H�5VV
H���I1��t��p�����S��tVH�_8H��t]H����xt H�0�H��H��[H�=C�H�1���@H���!�H��@�H��[��H���fD�GT��t�H�_HH��u�H����H�@��zH�t�H�=B�[��f.��H�=#
[����S��t6H�_8H��t=1��
H���~8���t1H�0�H��[H�=H
H�1���GT��t�H�_HH��u�[�fDH�@��	H�=M�[H���ff.�@��UJ�,SH��H����tZ��t5��uH�=�T
��/��t0H�ߺ
1���7�EH��1�[]�DH�=�T
�/��u��EH��1�[]�H�=��/��u��E��f.���SH����J��-��H�H�1�[�@��UH����L��SH��H�����H�H��xH�D1�H��[]ø������f.���SH��1�J���g1��[�D��J�41��D��H��t�>tI�41�ø�����DH��vb��H�ȋD�H��H��D�G��N�H�HH9�s�H��H��H��H�H�H9�w�D�D��H��H9�s��fD��Ő��AWL�~�AVL��I��AUI��ATI��I��UH��SH��(dH�%(H��$1�J�?H�|$H�$H��$�D$H9,$��f.�L�<$1�H��J�\5L��H)�H���H��I��H)�L��H�t
����H��H��A�ԅ���L�L9�r���M��M�L��L��H�����H�$L��K�)H��H)�L)�H9���L9�vHcT$H����JL�|��L$H�$H;,$�I����l$HcD$���t|H�l�H���H�$����@L9��w���M��H��L��A��O�/���L9��Q���L��L��H������M���-���H9�sHcT$H����BH�l��D$L���k���H��$dH3%(uH��([]A\A]A^A_��-�@��E���C]����E��E���/^��ff.�@���Wp������GH��p�����7_�������h�������d������gd������gq������q������r�����H���H�L$8L�D$@L�L$H��t7)D$P)L$`)T$p)�$�)�$�)�$�)�$�)�$�dH�%(H�D$1�H��$�H���$H�D$H�D$ H�D$1��D$0��r��H�D$dH3%(uH�����,�ff.����wt������wk�����H�����"w��f����x������7}�������|������z�������}������t������}������u������'��������餈��@����������7������\����������H�L5H98t�'�����H��H����4�ff.����H��H�H��t��UH��SH��H�vH��H�X��F�H��H�kH��H�C���C@H����[]���fD��S�H��<t!��tu<��<[���������H�5��	�a(��H�CH��H��tXH�+���H�C H����H�C(H���H�C0�(���e9�C81�[�fDH�H���������t
�;u�f�H�{룸����[���H��H���H�dH�%(H�L$1�H�t$�P H��t�D$H�T$dH3%(uH���D��������T)�@��AUI��ATUSH���G8��uI�E H�H��[]A\A]��@I��H��1�H��u�%�H�TH����
t*�D�I9�t
L���A������u�H��H��[]A\A]�fD�
H��H��[]A\A]����1��f���H��H��`0f���H�G� fD��H��H�=˳�,:�H��H���`*���UH���SH���i��H��1�1��@H��H�5�����f�C���H�*	8H�CH��H��[]�ff.�����W��t;1���u,H��H�GH��8H9�t0�PpH�������H���D��1�H�?���fDH�t$�H�t$H����f.�D��1��f���H��PH��t	H����\u7H��XH�Ф\H9�tH��uH� �\H��X1�H��P��������f.���SH��@H����1��>��H�� �\H9�ta��h����L��`H��0�I�	L�L9�teH��@�D�P������L�1��fDH��I��L9�t;I9�D�I9�u��tHdž1�H��@[�DH�� �\���H�OH�V1�H�5��M�@��ɪ�������[ø����[�ff.���H� tSH��H� ���H�C [�fD����SH��H��dH�%(H�D$1�H�H�$���H�����H���
��H�D$dH3%(uH��[��%�ff.�f���ATI��UH��S��u>�(�	���EH��H�(H��I��$H�C�f��H�C H�CH��[]A\�f�H�5�W�1�轩���ff.���SH��@H�}���H��tH9�t�>un1ۉ�[��H��H��@HdžHdžHdž Hdž(Hdž0u�H�`��H����H�� �\�����u�H� �H�O�H�VH�5ׯH�L�@1�����X���@��1�H��@t��H�VH��t
H��@u�H� ���hH�8����H��`H�H9�tvI�0�M�L9�tgH����H���f�H�H9�tPH��L9�tGH9�u�H��H�@�H�VH�5d�L�OM�@�H�H�H1��)��������H����1��H�0�L��f���AWAVAUI��ATI��USL��H���H��$(H�D$H��$0H�D$dH�%(H��$�1�H�D$M��H�D$pHH��$�H�D$H��$�H�D$0H��$�H�D$(IE�H��$�Ƅ$�H��$���$ HDŽ$���$�H��$�H��$�H��H	�uoD�D$8H�L$0�D$DH����H�D$x1�H�|$p�2�������H����H�H��$�dH3%(�[H���[]A\A]A^A_�@H��I���D$PH����H�}0M���_I�H����H�D$XL�|$PH�|$pL��H�l$`L�d$h�������p���H���H�`�H����R���H�UH�
�E
M��H�5���1��*����,���DI��`�1�H�|$pI��8H�D$x�1����������I�����H�
�tH���fDH��tH�?D�D$�F��D�D$H���hI��`�I�I��8H������L�|$PA�PL��I�O��m�������H�D$XI����I�<$���H��H�`�H����V���H��������W����L�t$PA�PL��I�N�m�������H�|$pL��H�l$`L�d$h�;������	������DH�D$(H�������H�|$(�@���1����f�H��t+H�UM��H�
pD
1�H�54��誤���%���DH�
EsM��1�H��H�5�耤�������H�UM��H�
D
1�H�5߫��U����.���H�����M������I��`��;�����USH��8dH�%(H�D$(1�H���]H�H�wH��H�l$H��I��A�H�D$H��H�
Njjj����H�\$(H�� H����{w+�CH�`�Hc�H�>��fDH��80ul�H����������H�L$(dH3%(�>H��8[]��H�;1���r������H��詹��1��������fD�C��t���t�H��脹��1��H�;������@1�f�f.���D��f�H�CH���t�H���H��tnH�t$�H��х�u#�\$�i���f.�������#���fDH�`�����`���H�CH��1�PpH���r����������fDH�@@H��t�H���H�D$�xt�H������H�D$H�|$�薸�������ff.����UH��SH�_ H��dH�%(H�D$1�H�H� H�$t!H�]H�D$dH3%(u@H��[]�fDH�wH��H��I��jA�H�
IZjH��j���H�� ������AVI��A�AUI��ATI��UH��H�
�	SH�� H�wdH�%(H�D$1�H�H�\$H�|$H��H�� I��H�D$jjj�(���H�D$0H�� H�����xw�PH�
թHc�H�>��I�FH�5���H�P1��ݠ��H�EH�߻�(���H�L$dH3%(����H�� []A\A]A^�D�pH�8���H�߻I�EH�D$�@��A�$�ն���H�H�߻H�E輶���f.��H,H�߻H�E蚶���m���DH�`�H�E�H����F���I�FH�5���H�P1����&����i�f���SH��H��dH�%(H�D$1�H�H�$����H��H��H�sjE1�A�H�
�jH��(j���H�� H�D$dH3%(uH��[����ff.����SH��H��dH�%(H�D$1�H�H�$��H��H��H�sjE1�A�H�
��	jH��0j����H�� H�D$dH3%(uH��[��l�ff.����AUI��ATI��USH��(H�|$H�l$dH�%(H�D$1��-���H�|$H��I��jH���H��H��jA�	H�
jj�|���H�D$0H�� H��tH��`�H���t=H�KH�J�1�1�1��''�����H�t$dH34%(utH��([]A\A]���P��tH��tH���k����f��pH�8�e��H��I�EH�D$�@A�$�=���1��f�H���(���������|����9�f���AVI��AUA��ATI��UH��SH��H�?dH�%(H�D$1��\�������D��L���@H���@D�hH�$���H��E1�H��H�H�D$L��H�
�hH���A��@jPj����H�� H���n���H�`�H���������H�L$dH3%(u
H��[]A\A]A^��U�D��H��(H��H��A�H�t$H�|$H��H��dH�%(H�L$ 1�jH�
�RjjL�L$0��H�� H�L$dH3%(uH��(����f���ATA��UH��SH��H��dH�%(H�D$1��f���H�$H�����xucH��蛸��H��t~H��@H��trH�� �\H�4$t]H��D���H��H���J���H�T$dH3%(H����H��[]A\�f.�H�`�H���tOH������1��H9�u�H�`�H���t'H�<$u�1��@H�`�H���u��H��tH�KH�x�1�1�1��%$�H��踷��H�H����ff.�f���UH�=!PSH��dH�%(H��$�1�H���!(�H���D$H�D$H�PʔHDŽ$�HDŽ$�H�HDŽ$�H��$�HDŽ$PHDŽ$XHDŽ$8HDŽ$HHDŽ$�HDŽ$�HDŽ$�HDŽ$�HDŽ$�HDŽ$�HDŽ$�HDŽ$�H�D$DŽ$hHDŽ$`HDŽ$@HDŽ$HDŽ$��"���H�
��H��@�H�=?�H��HH�E��&�H���D$H�D$H� ��HDŽ$�H��$�HDŽ$�HDŽ$�HDŽ$PHDŽ$XHDŽ$8HDŽ$HHDŽ$�HDŽ$�HDŽ$�HDŽ$�HDŽ$�HDŽ$�HDŽ$�HDŽ$�H�D$DŽ$hHDŽ$`HDŽ$@HDŽ$HDŽ$����H�
���H�� �H��HH��H�H�U1��V���H�=�b�%�H���D$H�D$H�`��HDŽ$�H��$�HDŽ$�HDŽ$�HDŽ$PHDŽ$XHDŽ$8HDŽ$HHDŽ$�HDŽ$�HDŽ$�HDŽ$�HDŽ$�HDŽ$�HDŽ$�HDŽ$�H�D$DŽ$hHDŽ$`HDŽ$@HDŽ$HDŽ$����H��0�H�5��H��HH�ǾH�H�U1�����H�=���7$�H���D$H�D$H����HDŽ$�H��$�HDŽ$�HDŽ$�HDŽ$PHDŽ$XHDŽ$8HDŽ$HHDŽ$�HDŽ$�HDŽ$�HDŽ$�HDŽ$�HDŽ$�HDŽ$�HDŽ$�H�D$DŽ$hHDŽ$`HDŽ$@HDŽ$HDŽ$��;���H�
��H��(�H�=v�H��HH��"�H���D$H�D$H����HDŽ$�H��$�HDŽ$�HDŽ$�HDŽ$PHDŽ$XHDŽ$8HDŽ$HHDŽ$�HDŽ$�HDŽ$�HDŽ$�HDŽ$�HDŽ$�HDŽ$�HDŽ$�H�D$DŽ$hHDŽ$`HDŽ$@HDŽ$HDŽ$����H��8�H�5��H��HH�H��$�dH3%(u
H�Ĩ[]������S��H��H�O��H�� dH�%(H�D$1�H�L$L�L$H�D$H�D$L�D$� �����t{L�D$M��t#H�H�D�L$�H��H�6xH�8�0��L�D$M��uH�D$dH3%(uLH�� [�fDH�H��H�{�H��H�8��.�����H�5a��1�荓���m�������AT��A��H�b�UH�ͿSH��@dH�%(H�D$81�H�D$0H�L$H�D$H�D$H�D$ H�D$(PH�D$PH�D$(PH�D$@P1�L�L$@L�D$(���H�� �����H��H�L�D$H�;M��t�H�wH����.��H�;L�D$ M��u<L�D$(�H���H����-��A��=H�D$8dH3%(��H��@[]A\ùH�:�H���-��H�;��L�D$H�;�H��H��
�D.��A��t>L�D$0H�;�H��`H���R-���H�5)��1��
��������H�D$0E1���m
�ff.�f�H�H�SH�ˉ�H��H��E1�H�8�2���oH�@H��H�CH�� ��vH���o����C�C[�f���ATUSH�� dH�%(H�D$1��D$�D$��pH�=`H��H���n�A��H��H�D$H�H�H�#�H�8�1���xt?�CH�H�D$dH3%(��H�� []A\���;�����f�H�8L�L$H�L$1�L�D$�H�5���R����A�D�D$�H�
��H��H�����H��1��l��H����t$H�|$1�I��ƃ�Hc��Y�Hc|$Ic�H��H�D$H����H��Dd$��HcD$H�T$��D$�C�CH�D$H��
�����f���AWAVAUATUSH��(�
dH�%(H�D$1�H�L� ��/�eH�B�y�Ή:H�,0��/���q�2H�8��/����H�
L�0��.�H�
���H�����E�I��L��A�@A�1��T��L���l��3H�}1�I��ƃ�Hc��D�Ic�L��H�EHc;H����D3L�����H�L$�L��H�5�

�{W������L�l$�L��E1�L��H�5t]�TW������H�D$H��x��Hc��f�M���H�
ۗI��H�D$H�����L��H�L�1���L����3H�}1�I��ƃ�Hc��x�Ic�L��H�EHc;H���D;L���(�L��H�5OaL���V�����)L��H�5p
L���V������L��	H�5(�L���sV�����K�3H�}��1�Hc����L��H�5�H�EHc�J�L���(��1V��D�#����A�t$H�}1�Hc����)
H�EHcf�1��H�\$dH3%(��H��([]A\A]A^A_�H�BH�HH�JH�(H�AH�BH�H�HH�J����H�D$H�L�8�T����H�}1�L�l$�pHc���fo��H�EHcH��@on]:�@ ����H�D$I��H��H�5)H�H�81��O���D9�����D�`�D�#���DH�D$�31�H�}H�D�pD���Hc���Ic�H�EHc;H�H�D$H�H�0�!�3D��3�l���DH�D$�31�H�}H�D�pD���Hc��>�Ic�H�EHc;H�H�D$H�H�0���D3���f�H�D$�31�H�}H�D�pD���Hc����Ic�H�EHc;H�H�D$H�H�0��D3����T�H�B�m���H�J�Y���f���AUI��ATUSH��H�
dH�%(H�D$81���/�tH�B�q�ω2H�,8��/����H�
I�UH��z��BH�
��Hc�H�>��fD�H�}1ҍpHc��%�H�ResourceH�EHcH�H�8�@ id �@#�
I�UL�L�l$ �1�H�
K�L�����3H�}1�A��ƃ�Hc���H�EHcH��H�A����H�T$ H�pH��H�D��I�L�H�L�H)�I)�D���r��1҉у�I�|
H�<9�r�3A�D�#A��Ic�H�}1��K��, H�EHcf�<�1�H�|$8dH3<%(�VH��H[]A\A]��H�JH�AH�BH�)H�HH�J���@A����E���z���A�U�A���g���D��A�L�f�L��3�T����I��`��I��`�D$H�x!�/��D$E��`H�
G�H��H������I�ĸ�O��3H�}1�A��ƃ�Hc��G�H�EHcH�A����A����E����A�$�A����D��A�L�f�L���@�H�}1ҍpHc�����ctH�t$H�EHcH�H�T$f�H�Obje�@(�I�}蒩��D�d$�31�H�}A��D��Hc���Ic�H�EHc;H�t$H��-��3D�3E���]��H�}1�Hc��\�H�EHcHк),f��@ �����fDH�:�H�}����1�Hc���A�, H�EHcH��truefD�H������H�}1ҍpHc�����y,H�EHcH��Arraf�p�@ ������H�}1ҍpHc���H�EHc�, H��NULLf�h��D���@�H�}1ҍpHc��e�H�EHc�J��'I�ED�`A���3�H�}1ҍpHc��0�H�EHcH�I�UH�H�
H��J�H�Jf�H�R�P��P���H�}1�Hc����A�, H�EHcHк�...'fD�X�f��������)�H�HE�8��?��u��c�����1�Hc���A�e,H�EHcH��falsfD�@�@ ��,���@I�$H�xL��H��H�D��I�L�H�L�H)�H)�D�����H�D+L������pHc�������3H�}1�D��Hc���H�EHcI�MH��H�Ic�H�	H����H�1H�0H�t�H�t�H�pH��H)�H�H)�H��H��rH��1�H�<H�<H��H9�r�3D�1҉3��H�}Hc���A�',H�EHcH�A�T$fD��@ ����f.���ulH��t��1@�0��t��L�f�L��3�A�$�D��A�L��L����fDH�|$����3����A�U�D��A�L��L��3�|����1�0�L��L��3�7����W�H�B���ff.�H���L�D$@L�L$H��t7)D$P)L$`)T$p)�$�)�$�)�$�)�$�)�$�dH�%(H�D$1�H��$�I���$ H�D$H�D$ H�D$H�P��D$0�H�D$dH3%(uH������DATU��SH��H��H��PdH�%(H�D$H1�H�|$�6OL�d$�H�D$0H��8H�D$8�W�H��XZ1�1�I�D$H�D$E1�L�d$0H�x��.��H�D$H�L$H��p3[A�H�sxH�x�-H�����1҉��@H��H���@�I����ġ��H��H��L��I��H���	H�}�2���͡��H�}�L��A��H��Q�B��H�}I��L��H���W��H�D$0H�T$8H�L$HdH3%(u	H��P[]A\��O��ff.�@������f���1����D��H�ȅ�H��H��H�5�	��fD�Ý����H�ȅ�H��H��H�5�P�n�fD铝����H�ȅ�H��H��H�5cf�>�fD�c�����H�ȅ�H��H��H�5����fD�3�����H�ȅ�H��H��H�5�����fD������H�ȅ�H��H��H�5����fD�Ӝ����USH��H��`�H��t!H���tH��[]�f�H���H���H��t\H�P�H�H��tH���H���H�H��t�����t�H��0H����APH�IH�p�H��H��H)�H��H�H��[]�H�5q��1��̀���ff.���SH��`�H���t(H������H���H���Hǃ�H�[���H���H�L$8L�D$@L�L$H��t7)D$P)L$`)T$p)�$�)�$�)�$�)�$�)�$�dH�%(H�D$1�H��$�H��Hc�H�D$H�D$ H�D$H�`��$�D$0�H�T$dH3%(uH�����I��f���AWAVAUATUSH��H�L$dH�%(H��$�1����cH�|$L�d$0�H��L��L�l$PH�l$pH�5�c��H�|$L��H�5��	�g�H�|$H��H�5�M�N��|$D���|$d��H��L�t$ �[�H�|$H�(�DŽ$�H��$�Ƅ$�HDŽ$�H�S���1�H��$�HDŽ$�H��0L��$�H��$�H��$�H��$�H�D$H��$�DŽ$�HDŽ$�Ƅ$�蘦��H�D$ �x��H�D$ D�L$8E���"L�=Y�L�L$pL�D$PH�|$L�L$L�$螚��H�|$(H��H��H�HAWL�L$L�D$1�1��u���Y^�A��H�H�L�D$(H���H�t$H�8����H�|$ tL�������|$DvL���n���|$dvL���n����$�vH���n��H�D$(D�{�CH�H��$�dH3%(��H��[]A\A]A^A_�f�L���H��+���L���8�|$d�������s���릐H�57�L�L$PL�D$0H�t$H�|$L�|$pL�L$L�$�r���H�t$H�|$(H���H�HVAWL�L$L�D$�����T$8���x���s���L�8�r���DD�@E���{���H�0�z������ff.���UH�=�FSH��dH�%(H��$�1�H���	�H���D$	H�D$H���7H��$�HDŽ$�HDŽ$�HDŽ$�HDŽ$PHDŽ$XHDŽ$8HDŽ$HHDŽ$�HDŽ$�HDŽ$�HDŽ$�HDŽ$�HDŽ$�HDŽ$�HDŽ$�H�D$DŽ$hHDŽ$`HDŽ$@HDŽ$HDŽ$�����H�
~���H��H�H��8H�踄H�;A�H�
�I�o�H�58_)�8�oH)
�8�oP H��8)�8�oX0)�8�o`@)%�8�ohP)-�8�op`)5�8�oxp)=�8�o��)�8�o��)
�8�o��)�8H���H��8���H�;A�H�
�H�H�5ߞ�q��H�;A�1ɺH�5��e��H�;��H�5l�	�l
��H�;��H�5cH�S
��H�;��H�5�z�:
��H�=�����H�31�H��H�D$H���7�D$H��$�HDŽ$�HDŽ$�HDŽ$�HDŽ$PHDŽ$XHDŽ$8HDŽ$HHDŽ$�HDŽ$�HDŽ$�HDŽ$�HDŽ$�HDŽ$�HDŽ$�HDŽ$�H�D$DŽ$hHDŽ$`HDŽ$@HDŽ$HDŽ$��M��A��H�5���H��X�H��8H��H�5n�H�����H��$�dH3%(u
H�Ĩ[]�����@��H�H�H�Ð��H�X�H�Ð��AVI��AUI��ATUH���S���I��H�H���@�@H��tWI�4$H���[6����twH��H��謟��M��tI�<$M��H��H��[���M��u'H������H��[]A\A]A^�I�,$�f.�I�<$M��H��H�0�����H�5����Ow��I�,$�o���fD��1�H�51�����ff.����UH��SH��H���H�L$HL�D$PL�L$X��t:)D$`)L$p)�$�)�$�)�$�)�$�)�$�)�$�dH�%(H�D$(1�H�L$1�H�|$H��$�D$H�D$H�D$0H�D$ H�`��D$0�H�t$H��H���D���H�|$H�����H��H�t$(dH34%(u
H���[]����D��U��SH�����LcŹH�H��H��H�H�H�8�+��H��H��[]Ð��AVAUATUSH�� H�|$dH�%(H�D$1��F���H��H�H��H��H�3�14�����9L�l$H�|$H��1�I��`�M��A�
H��H�
OIDŽ$�jjj�h��H�� I��$��%L��譋��I��$�tFH�3H���3�����/I��$�H�mE1�蛑��1�L�@I��H�
��L��1���<�H�t$H�;A��H������H�t$H�;A��H�.�	H�D$���H�t$H�;A��H�CH���g��H�u�H�
�}H�H�D$L�1����H�UH�5�}�1��Yt��H�D$dH3%(��H�� []A\A]A^��H�D$�x��H�UH�5��1��
t�����DI��$�H�;A��H�N�	���I��$�H�;A��H�<BI�����I��$�H�mI���%���L�@M��t=A�M���{���M�m�r����L�H�t$�H��H�;�d���
���1�������fD��SH��H��t�tH�5�1��*s��H��袏��H��tH��H�H��H�2�1����uH�5�1���r��H��[�k�f.��1�����u������u�������u�������u������x��� ��@D��ff.��1���t��uS��t]����f��u�����u������u������u������u����u� �fD��D�����DH��(dH�%(H�D$1��D$�L$�����@��~*�L$�D$�D$H�D$dH3%(uRH��(���������D$�D$��f����D$��������D$�����f�H��L�WdH�%(H�D$1�HcGM��E�A�M�Y�D���@���� ��)‰��
~h��M9�s@A�q�����A���?D�D$�4$�$H�D$dH3%(��H����1���tƉ�1�A��A���?D�D$�D�D��)�����?�T$1�M9�sA�Q���HA��A	�D�$�fD)����ʉ�A�����I�A�A	���A���?D�D$I9��Q���A�A����	��B������ff.�f��ND�WA9���AWL�N1�AVAUATD�a�Mc�UH�oI��SO�,1I�A�EE�D�@D��A��D$�E9���L��I��E1�E1�H���S�I���������D�A����A��A)�D�E�B�A����A��A��D�A)�A����fA�J���D�A��fA�R�A��I9�s�E�E���0I�V�H9�s$E�V�E��t�@D�E��u
H��A��H9�r�D�g�NE��A9���Hc�H��H�LL���H9�sH��H���9t�����I��1��D$�I��A�I�A�I�����)�����)ȉ�fA�P���ȉ�fA�@���M9�s�Ic�H�T��2��u-H�B�H9�v �J���t�@���u
H��A��H9�r�D�g�D$�[]A\A]A^A_�f.��[����D$�[]A\A]A^A_�1��DD�W�NA9�������ff.�ATU��S��-H���7Hc�H��H��t2H�H�CH��H��[]A\�H�5Qz�1��m�����A�A��A�D$�H�H�<� ����H��H��t�kH��D�cH�C[]A\�f�H�5)z�1��]m����ff.�UH���SH��H��(dH�%(H�D$1��D$�$���I���D$�T$���%���T$�L$���D$��E�A�ɉD$�D$�D$����H�|$�S�����u_�T$A�P�T$1���A�P@�ƃ�A�pE����A������U�5)‰H�\$dH3%(L����H��([]�D�T$� )�����L$	�A�H����T$�DH�|$����T$�A�@�� A�PE���v���-2�EHc�A�|��(�����)Ɖ3�i����w���UH��SH��1�H��������;H��H��@�z@��t4H�KH��DH���y�H��@�:@��u�H��tH�UH��[]�@H����ff.�AWH��AVAUI��ATUSH��Hc_Lc~D9�|D��I��Lc�H��Hc�A�,1�A9mH�T$@��A}�4���H�T$L�`H�$Hc�M�4�L��M9�s��H��I9�w�I��H�zK�t�L�<�L9�r$�fD��A��u{H��I��I9����A��A��t�M��M��E1�A�A�I��I�������A���A���D�Љ�fA�H����A��fA�@�A��L9�w�E����A��t�A�$1�L��M��A��A��A�A��I��f�H��A��A�C�f�Y�A�P���D�	A��A����A��A��L9�w�H���I��I9��)�����~#A�N�I�F���t�fDH�����u��u�H�$�hH��[]A\A]A^A_�AVI��AUI��ATUH�nSHcFH�_D�gA)��)H��H�H��
@H9��?H��H���9
t��A�}�O���E1�D�`IcUH�pI��L��IcVL�\��	fDH����}H��H�����D�D���D)�)���f����H�~A��f�VA��I9�w�I9���I��H��fD�H��I�����D�A��fA�s�A��D�A��fA�S�A��I9�w�I��I)�I��J�T�J�4��J���uf�H���A����t�D�@[]A\A]A^�DA������H��H��A�H��L��M��I�������1��)���H�@[]A\A]A^��H���ff.�AVA��AUA��A��ATUH��D�e�ES�E�A�\$9�~D���9������H�xE��~&A�v�H��H�L�DH���B�H9�u�H�|�HcUH�uL��A��tiA� E1�E)�D�D��H��H����D��D	‰W�D�F�A��I9�w�E��D�DE�D�`HcMH���7H�4�H�,�[H�u]A\A]A^�fD�I9�vХI9�w���f.�AUATUSH��H���o1�fD�D��������щ�����A����A���D�H��D��9��E��t9k~HcŃ�D�d��kH��H��[]A\A]��C�x�}���H�sI��H�xHcCH�����HcSH��7H��H��HcŃ�H�L��D�d��k��AU��I��ATUS��H��������M��t]H�-��7H����M��L�-��7�f��t;H�EH��tCH���t�H��L���P���M��tKIcT$�I�L�M�d�I�$I��u�H��L��[]A\A]�H��H������H�EH���I�����H�nrH��4�1��b���I���D���f.���F���H��H�qH�EH�-��7H�E�#��������fD��ATUSH���7L���f.�H�;H��t�H�/H�+�E��H��H��u�H�H��L9�u�[�]A\���HcO��H����O�GH��tH�K�7H�4�H�w�H���ff.���AWAVAUATUSH���|$�t$0H�T$ L�D$(dH�%(H��$�1��D$p�D$t���$�D$t�%�=��1�D$pf��f.����D$pH�t$hH�|$l���I�ċD$t��%��|�D$p-�1��D$x�T$|���T$|�T$|���?�T$|�T$hf���D$xf��\�q�*��Y
�q�Y�q�X�q�X�f/��,���
)�D�z�����Hc�H�5�p�D$p��f/������D$P�D$8E���������L$<A��D$�D$��	��1��L$���L$�H�D$HH���|$<H�D$�D$l���-A������D$@D�t$X�D$�D$03��u	�6+D$h�|$8A�D�D$����D$8��d���H�D$ H�t$(�H�=��I���H�D$H��$�dH3%(H�D$��H�Ę[]A\A]A^A_�fD�D$t�%����D$t�D$t%�=�����H�D$ �'�D$p��u�D$t�����H�t$(�H�=j����H�D$�c�����D$P�D$8E���l���A�A)�D�|$8E1����[����f��T$h�D$lЍ�2�� �'�t$p� )����f����H*��D$x�L$|����L$|�e���fDA���~
��E1�D$�|$����D$���������D$@�D$0D$<D�p�D$X�E��AO�A��Hc���1�A!Ճ�~��҃�Hc�H��H9�v�߉L$T�\�L$T�H�D$HH��E��H�D$�b�D$p�\$<�D$x������H��m���Љغ���t�L$p���^
on��L$pH�5Em��t��t�Y��H���u��L$p�^��L$p�D$P��t�D$p�
�Af/��]f��L$p�*��Y��Xn��$���$�-@��$�E�����D$<D��D$T�B�H�5�lD�l$@H���H�t$HH�~H��E�����A��$��^�f���\���$��D$p�,��D$p�*ȃ�0�F�\��D$p�D$p��$�f/��U��@�D$p��$�f(��\�f/��L
��
7�	)�����$�f��H���Y���$��D$p�Y��D$p�D$p�,��D$p�*Ѓ�0�C��\��D$p�D$p��$�f/����D$pf(���$��\�f/����9��i����D$x�D$p�D$l����\$<���HcË\$0H�Vk�…��<
E���3
u�Yl�D$pf/��V	�D$0H�\$�ЉD$T�H�=	�7H��t@H�/H�-��7���H��H��u�M��tIcT$H���7H��I�$L�$�H;\$��D�t$TA��H�D$ �D�0H�D$(H������H�������|$���D$@�D$0�����D$XA���-���DD�\$@E����D�D$�\$81��~E��~D9�D��N�)D$8)�A)�D�T$E��t$D�L$@E����E����	�t$D)�����L$T�P��L$TH��H�D$H�H�G����E1�|$� 	�����D������ )ƒ���)�T$8�A׋D$8��~
L������I��E��~H�|$D����H�D$D�D$PE���5H�t$HcFA9D$�H��I�L$H�H�T�
�H9���H��H���290t���1�L��
�l$<�O�t$X�|$@I�ą����|$��!�A�ƅ�����D�t$X��H�\$A�L�|$�1Ҿ
A����I��L��L��H�����D�H0D�K�E9�|�E1�L��D�L$���H�L$I��A�T$HcA)…��TH��I�t$D�L$H�H�T�
@H9��]H��H���:98t��S��^�f���)L$8�؉L$<1ɉD$�U���f��D$P�D$8E���$������f��D$@�6����t$t�@D�D$p)��捈A��D��	������|$�O����\$A�F�9��d)�A�؋D$8��D)�E��x��D�E��D$8�D�D$\�L$T���L$TD�D$\H��H�H�E����@���D$<H�g�D$p�؉ƃ����Y��D$p��H�5�f�f.��t�D$p�Y���D$pH���u��O���@H�t$(�H�=�e��H�D$�����D$XA�1��D$0�\����D$@�������fDf���*�f.�z�7������/�������fDE�����|$��E��ugH�|$1Ҿ�N�A�T$H��H�D$Hc@)…��RH��I�L$H�H�T�H9�sH��H���9t��$��D$0H�\$E1��ЉD$TH�|$tH�L$L�-��7HcAI�T�H�I�L�H���H���L�-q�7M��tI9�tIcFI�T�I�M�t�HcEI�T�H�UI�l������H�D$HA�H�X�@0�H����D$8�A��f���D����|$�L$TH�D$��E1�H�t$�F�D$T��H��|��0�� )‰����f��L$p�*��Y��Xhe��$���$�-@��$�@�D$p�\Be�D$p�L$p��$�f/��k�L$p��$�fW�4f/���������D�L$@���G������iI��E����H�\$HA�F�L�-�7H�\H�D$H�\$@L��H�D$0f�H�t$H�����D�sA��D�`0HcEA)�u9H��H�sH�H�T�
�H9�sH��H���
9t�E�A��H�|$L��D�D$8��D�D$8�P���$HcP�{)��EH�4�L�SI�2H�t0�fDI9���H��H���9
t�HcPI�t���H�0�����I�D�DE����Dt$u�D$p���H�D$0L�p���E�f�L9t$@�#H��1Ҿ
��1Ҿ
H��H��L9�����L��1Ҿ
H�����I��L�t$0���HcPI�t�H�0I�D��D$���[����D$p��	1��H����HcPI�t�H�0�I�D��%���D�[�H��I���HcPI�t�H�0I�D����f.�H�D$H�@1H�X�D$<���D$T�����$�H�t$H�Y�f����$��D$p�,��D$p�*ȃ�0�F�\��D$p��tfH�D$HD�J��_�	H��J�t��D$pf��H���Y��D$p�D$p�,��D$p�*ȃ�0�B��\��D$pH9�u�J�\�T$p�
6��$��X�f/����D$p��$��\�f/��7����	fDH�À{�0H�C�t����fD�D$p�������D$t��������D$tE1��������D$8A��A����D��H��L$\D�D$T�{�L��H��H����M��D�D$T�L$\��IcT$L�-?�7I�t�I�4$M�d�I�������+T$E1��D$�����S�~FH�L$��H9����P�H��H�C���9t����D$<�D$T�/���D�S�H��H�C���0t�D$<�D$T����H������H��������H�D$HE1�H�X�@1�D$<���D$T�����C�H�L$�H9��M�B�H��H�S�<9t�H�L$���}��H�uH�xH��HcEH�����H���X�I������H�L$�f�E���5����\$X���B��D$p���	���D$<�Y�f��*ƒ��ډD$T�T$p�L$p�Y��Xi_��$���$�-@��$��u���t$L��L$T���L$TI���F�D$p���k����D$t���������W���HcD$<H�^A��������D$pf��H�L$H�^�H�Y�,��D$p�*ȍP0�Q�Y��\��D$pA�����D$p���	f��Y�f.��D$p��H�L$HA�F�H�LfD�D$pf��H���^��,��D$p�*ȍP0�S��Y��\��D$pH9��E�D$pf��Y�f.��D$pz�u��D$<�D$T��L��L$�N��L$I����D$<���D$TH�D$�1�t���H�ʸ1�0H�L$�D$T����H�D$0E��E��I��H�X��~wL��D�L$��H�|$D�L$I��A�T$HcG)…���H��I�L$H�H�T�fDH9���H��H���:98t�rA��9��E�N1H�D$0D��D$<I��L���D$T���1�H��
��E��D�t$XH�������
���H���L$p�D$p�X��D$p�D$pf/����D$pf.�z
u����D$<H�ˉD$T��A���S���������E��I��A��9t@H�D$0A��L��I��L��D��D$<�D$T���E��I��I��L��H�\$@��I���X�L��H�D$0I��9L��H�L$�9�s������A�H�ˋL$<�L$TH�L$���D��E��E��I��A��H�D$0H�XA��9t�A��1E��EO������������DA����������D$<�D$T����"������1��L$TA�����D�t$X�L$T�H�D$HH��H�D$�D$@�D$0�����<)‰��q���ff.����AWAVAUI��ATUSH��H�|$H�t$dH�%(H��$�1�H�D$x����H���I��A�EH��DB u�<-�u�D$<+�U@����E1�@��0ts@������/�I
M��9��1�E1�E1��3fDC��D�tG�A�xA��I�@����/�'��9��I��A��~�A��Ѝ��TG���fDI��A�u@��0t�@���A��j����W�؉ƒ�tHc�H�5$Y�D$x�^��D$x����*���������$�H�=aX�t�D$x�Y��D$x�Hc�H����u�H�?X���D$xf����$��D$x�Y��D$x�D$xf.�������$��X��D$x�D$x�Y��D$x�D$xf.��h�bH�D$x�ʫ��"@H�D$H��tH�L$H��T$��uf�\$x�\$H�=�7H��tfDH�H���7���H��H��u�H��$�dH3%(�D$�=H�Ĩ[]A\A]A^A_�f��D$xfW"(�D$�f.�A�uI�����f�A�u�D$I�����f.���.�����@��E�H�D$E��1��D$��+D$E��D$0E���G
D��f�A����H*�AN��D$xA��	�9	�p�H�=�V�D$xf��Hc��H*��Y��X��D$xA���	D��)ËD$0؅��t����ƒ�tHc�H�5�V�D$x�Y��D$x�����=4���������v
�H�=V�t�D$x�Y��D$x�Hc�H����u�H��U��D$|-P�D$|�D$x�Y��D$x�D$|%�=�|�=�|���D$|����D$x����f�A�W�9��81������A��	~�@���9�����H��D�p�@A��	��	M�u	A�D$�L�t$(M�l
H�D$ H���I��A�V��
H�ǃ�0��M9�u�H��H�L$ H�D$(L�lE9�}4E�G�H��E)�O�t@I��A�U��
H�ǃ�0�w�M9�u�H�ËL$0D�d$1�L�=�7A)��DI�I��D$(H�CH�D$8H�D$TH�D$HH�D$PD�d$ H�D$@�{�#��H�t$8H�xI��HcCH��覻��D$xH�t$HH�|$@����I������H��H�H�E�D$P���G�L$ �T$(D�4�t$T�<03�����|�6)�E��A9Љ�AN�A9�ANƅ�~A)�)�A)Ƌt$ ����E��~L��D�ƉT$�^���T$I��D�T$0E��~�t$(L��T$�
��T$I��~
L����(��I��E��~H��D�����H��L��L���W��I�Ƌ@A�FHcU�D$A9V�WH��I�vH�H�L
�	H9���	H��H���9t��)D�L$E��u�D$x����M��tIcD$I��I�$M�$�M��tIcEI��I�UM�,�HcEI��H�UI�,�HcCI��H�I��IcFI��I�M�4��������@��E���D$E��1��x@��+��@��-��H�XH�\$1�D�G�A��	����0uH�L$H���9��0t�H�L$D�G�1�A��wiH�L$�o�D�AH�yE�X�A��	w@��L�H��A�lH�D�A�HЃ�	v�I��L+D$I������N��H�|$��݅�D�E�������A	�HED$H�D$���fD�D$E��1��D$0E��H�D$E������@I��E��1��D$�xЃ�	�o��D�^�����	D\$A����D��D��fDG�4���E�9��@��~��������L�l$��������H�t$XL���-��H�t$\H����$����A�V+U��$���T$X+T$\�����$���ʉ�$���$���$��^��
�Qf/��D$`��D�D$E���E��$�D$h�D$`�T$|�������+��@wS�D$`f/�$rC�D$`�Xe%�t$�,�f��*��D$h��u�D$hfW� �D$h��D$x�T$4�a���L$h�T$4�Y��D$p�L$p�D$x�X��D$x�L$|���9��M��tIcT$I��I�$M�$�M��tIcUI��I�MM�,�HcUI��H�MI�,�IcVI��I�M�4����fDH��T$4D�D$���L��H��H���1��M��D�D$�T$4��Ict$I�<�I�<$M�$�I������fD�T$(D�t$ )�����D$`�Y"$�|$���D$`�D$`ufWf�D$h�Z�����$���)щ�$�����D$`�L$`�L$�,�f��*��\��L$`��u�T$x�����D$`�
�Of/��5����D$`f/tO���������f��T$x��uX�T$|��uL�D$`�
v"f/��6�D$`�Y6#�D$`�D$`fW��D$h�v�����T$x���Z�#"�D$`�#�D$h�A���f��L$0�������������D���%)�D)��؋\$0�9������H�|M�D$xD)�Hc�)��Y�Hc��D$x�D$x�Y��D$x����f.��D$x�T$4��$��L$|��P�L$|�D$x�t���L$h�T$4�Y��D$p�L$p�D$x�X��D$x�L$|��������|���$������u-��$����u!�D����D�"�D$x�^����D$|����D$x�������I���i�����.�GA�EM�E�1�D)ƒ�0uf.�B�4I��A���0t�Pσ����D$E1�1�E1�E1��߃�E�|D��	�D	����L���@���fD�H�H�xH�L$�F���H�D$1�����I��
A�	�~����L$|��P�L$|����1�뼋T$|�������D$`�
�Lf/������E���f��D$|����4���L�������I��HcEA�V)…��QH��I�vH�H�T�	H9���H��H���
9t������D$|%�-
���D$|�D$x�������肞��2C�"�D$x��Hc�H��J�D$x�Y��D$x��|$0����D$H��J�D$x)�H��^��D$x�Y�T$|�������H�D$x���"�'���@�^��0M��1҉\$E1�A�E1�C�4�D�4pL��1�I���@���M��E1�1�E1�1��D$E1����D�f��~�A���}��1��GL�����D$`����H�D$������D$��tT�D$|%��=�����D$x��k����D$x����L$x�X��L$x�K����N�v���L��1��<����D$|���u�D$x���B����D$x������D$x����L$x�\��L$x�D$xf.�l��������������D$|P�D$|����������
�I���D$|�D$x����
�I�
�D$x��������D$|%��D$|�D$x�[���H�D$1�L�D$����b��D��A���l���L��D���3���ff.����I����0��I�H��tof��E1��VI�2@�B���f�I��A��Y��*�H�A�P��XȄ�t%H���B�<	v΍B�<včB�<wm�B���H��uf(��H��teH��f��f.�H�f(����G���<XuL�G�W�K����H�O�B����H��t�E��IE�H��H��f���fD���GH�O<7`��t\f��hH�hH�
fD��t&H���Y�f��H�Q�*���X��\�f(�<7~�H��t	H��D��H��f�H��u�f��f.�D��AWAVAUATUSH��8dH�%(H�D$(1�H��tyH�H��H���H�D$H��tb�HA��H��`���txH��P����H9�tc��lH�R��H���AH�NL�R�H�5�G1��8��H�D$(dH3%(�LH��8[]A\A]A^A_�D�L�l$ ����f�PH����H��D� H�P�@H�D$ �)��H�T$E1�L��H��L���Hǃ�A�
jH�
�jjH�u��H�� M����H�����葿��A��L��I��H�$�	H������L��L��A�H�I���a��L��I����M��H�����M��L���M�L��M�7L�L$��S��L�L$M��H�5�FH�HH�E�H�P1��97��L���L���M�����DH�x�7�������H�U��lH��PH�RuOH����H�HL��E�H�5F1���6���;���H��t3H�NL��E��
���fDH��t_H�HL�D�볐H�
5L�ZE������H�
�I�����H�
L�&E��f���H�
��I���R���諱�ff.���ATUSH�/f�}u^H�EH��H�xt`�膕��H��H��oEI��H�EI�D$I�D$A�D$A�D$�P[]A�$I�T$A\��[]A\�&���H���R��[�]H�PH�5^E1�A\�}5��ff.�f���UH��SH���HH�����H��XZ1�1�H�CE1�H���|�H�+H�CH��[]�f.���SH��H�H��t��H�{���H�{H��t�s�H�{[驔��f�[�ff.���SH�����H��[�z���f.���UH��SH���H���&���H�°
]H��P	]1�H�H��H�(��7H���H�BH����H��[]�ff.�f����<���ATA�I��UH��SH��H��H�q1�H�dH�%(H�D$1�H�`������H�������H�H���th��d����f�PH���@H�(L�`H�$�%��H�3H��H��jH��E1�A�jH���H�
��
j肋��H�� H����I��H�D$dH3%(uH��[]A\�DH��p3[����\����®�f���AVAUATUSH��D�/dH�%(H�D$1�����H��H�0I���Z���L�4$�HH�Ӊ�臒��H��XZ1�1�I�FH�$E1�H�x���H�<$L��E���H�����H�L$dH3%(uH����H��[]A\A]A^����f.���H���3���H�H���ff.���H������H�@H���f.�USH��(H�|$H�4$dH�%(H�D$1�H�D$�N��H�$H�ŀ{uf�CH�|$H��H���A�jH�
�H��SjL�L$0���H�� H���7H��H�D$H��t�hH�L$dH3%(uMH��([]�f���6���H�$�o�SH���@�P�@���k���H���E#��H�$�Z���������ATUSH�� H�|$H�4$dH�%(H�D$1��M���H��H�(�H��H�0�����$H�$H�����{���CH�|$L�d$H��1�jM��A�	H��SH�
��
j�̈��H�� H��� G��H�\$H�`�H����H���u)�kH�L$dH3%(H����H�� []A\�DL��1���F����@����H�$�o�SH���@�P�@���<���H���!��H�$�+���@�規��H��H�$H���oH�@H�C���@H�UH�5e@1�1ۿ��/���5���f�H����%���H�UH�5�?�1��/���	����!����USH��H�|$H�4$�L���H��H�(�H��H�0������H�$�{uD�CH�|$H��H��E1�jA�H�
�
1�Sj�0���H�� H���E��H��[]�D�螎��H�$�o�SH���@�P�@��v�H��� ��H�$�H�UH�5M?�1��.��H��[]�f.���ATI��USH��H�|$H�4$�K���H��H�(�H��H�0�	���tUH�$H�����{ub�CH�|$H��H��E1�ATA�	H�
�
1�Sj�6���H�� H���D��H��[]A\ÐH�UH�5�>�1��	.��H��[]A\ÿ膍��H�$�o�SH���@�P�@���o���H�����H�$�^���@��>���H��H�$H���oH�@H�C�.���ff.����AVAUATU��H��SH��H��0H�L$dH�%(H�D$(1�H�`�H�D$ H�@HL�`�I���I��蹌���@H���@H�D$��O��H�t$���5j�������肌���@H���@M�t$H�D$L���җ�E���7L�uH�D$L��H�l$ H�|$H��I��A��@I���H�
��
�t$ Pj膄��H�D$@H�� H��tL�xD�sD�ku
�x���oH�@H��H�CH�� ��vH�����H���B��D�sD�kH�|$�B��H�|$�xB��L���Ћ��H�D$(dH3%(��H��0[]A\A]A^��H�|$�w%H�5~<�1���+���CH��D����Ԑ�oH�PH�S�@�\����H�5��1��}+��H�l$������ff.���ATI��UH��S�����H���t	H�@H��t�pA�4$H�x蛍��H�E1�[]A\ø������f���AUATUSH��H��(H�|$dH�%(H�D$1��������������YH�|$�?G��H���H���KL�d$H�|$H��H��jH���M��A�
jH�
R�
j�{���H�� H���H��`�H�D$H����	�x���C�E1��CH9\$�<�oH�@H��H�CH�� ��vH������L���a@��1��{D�k�kt[H�߉D$����D$�I��ukH�|$�QF��H�5��H�P1��)���C�CH9\$���C1�H�H�L$dH3%(��H��([]A\A]��1��Cf�C�������@H�|$��E��H�5��H�P1��7)���C�CH9\$t5H��CH�1��y�����F1�f�VH��[���f��{v�H������뻀{�2���H�������%���f�L���?���C�CH9\$���C1�H�=>�
����C�H�5}9H�H�U1��o(��1������H�`�H������H�|$tL���>��H�U1��H�5�8�$(����������f.��{�d���H������W���f��{vH������D�k�kH�D$����E1�����>��ff.���UH��SH���N�H��H���C�H�H9tH���[]��H�{H�pH��[]���DATM��UH��SH��H��PdH�%(H�D$H1�H����H�}H��tm�CH�KM��H�s�P���t0H�K�C�D$A�H�sH�}jAT�PL�D$���ZYH�|$HdH3<%(u`H��P[]A\�f.��H�F���E1�1�1�H�E1�H���������1H�:H�\$�t$ ��H�|$�=�H�D$(�=������ff.���AWAVA��AUATUSH��HH�|$H�4$dH�%(H�D$81��B���H��H�(�H��H�0�����H�$�{���CL�d$L�l$H��1�jM��A�H��SH�
��
L��E1�j��}��H�\$8H�� H��t@�{���CH�9Hc�H�>��H�}E1�������A��L����;���H����;��H�L$8dH3%(D���!H��H[]A\A]A^A_�f.���Ƅ��H�$�o�SH���@�P�@������H������H�$����@H�UH�5m51�E1����$���i���f�H�;�X����E��A��D��A!�L���
;��E���,���H��`�H�������H��H��M��A�	jH�
/�
1�L��t$j�f|��H�l$8H�� H�������}���EH��7Hc�H�>��Df�f.���E�E��A��D��A!��U���f.�H�;�1�����C��t)��tE��A�A������f�H��80u��L��E1��:���8���H�CE��A�A��H�������H���H���H�t$ �H��х���H�D$ ��A����A!����E1�f�f.EA��DE����E1�H�}A�����D�}E�������A��tJA����H�EH���t�H���H����H�t$ �H��х���D�|$ �B���H�E�80u�E1��1���H�`�A�������H�CH��PpH�������D��A!�����H�@@H��t�H���H�D$ �xt�H�����H�D$ H�|$ H��8����A����A!����賝�������H�EH��E1��PpH�����A������H�@@H��t�H���H�D$ �xt�H���u���H�D$ H�|$ D�8�38���G���ff.���SH��dH�%(H�D$1�H�<$H��t<I��H;w��H�FH��t&H��`�H��PH9�u
�3H9�t+H�@H��u�1�H�\$dH3%(ukH��[�f.�H��QH��0L��H������u�H�$�Bt��H��PH9Ju��f�H�`�H;�P�[������`����H��tH9�t2H���
DH9�t#H�@H��u�H��u
1��f�H9�tH�vH��u����f.���H��t��t'1������H�`�H�9H��P�r���f�H�`�H��PH9�t
1�H;1t�D1�H��������AWAVAUI��ATA��USH��H��(H�>dH�%(H�D$1�H�D$�?���F�p��I�uL�D$H���H��A�EH��P������I��`�E1�I��PH9���H�SH��u�NfDH�RH��t?H9�u�A�EI�uL�D$H��H���P�C���uH�D$���fDH�D$H����E����E�����8I�mH�[����I��H�5�0H��H��1�����H�D$�|fDH�t$�>����H�D$I��`�I��PH9�tH�SE1�H���*����Adž�I�EI���A�EI���I��A���I���H�L$dH3%(�JH��([]A\A]A^A_����u�F����H�54.�1����1��f.�H��0H���t�������H�D$��с�����E���n������e���H�SI�M1��H�5!/���H�D$�@���f.�H�D$H���(������D1�H�5�.��u��1�����fDI��`�A�I��PH9������H�D$H���������I��`�I��PH9������H�SE1�H����������臘����AUA��ATUSH��H��HH�|$dH�%(H�D$81�H�D$H�D$(�p��{I����I�<$1�H��H������z���H��H��t2H�H�@L�D$ H�uI�|$�P�e����tH�D$ �fDI�$H�����H�KI�|$H��H��L�D$0������H�D$0�8��H�l$�M�}�Q�Ut	���z�H�|$H����H�D$(H�D$0�H�l$(H����H�D$(�}H�D$ uGA�E���vA��u8�E�����}t'I�$H��H�5T-H�P1����f�H�|$��1�������A��uZH�`�H�� H�D$ H�|$H�t�@H�|$�1��H�D$ H��jH�H�t$8dH34%(�NH��H[]A\A]�I�$H��H�5$+H�P1�����놿�vz��H�S�oH�D$H��H�PH�� �@�@��vH�����H�\$�{��H�ؐH��蘑��H�\$����fD�M��z��H�D$�oMH�UH��H�PH�� ��v
H���"��H�D$�@�@H�D$0�6����H�`�H�� H�D$ �����y��H�D$(�oUH�UH��H�PH�� ��v
H�����H�D$(�@H���@�#����K��ff.���ATUSH��H��@H�|$dH�%(H�D$81�H�D$�>��{H���IH�}1�H��H������H���I��H��tP�@I�t$E1�1�H�}�P�G�����t2H�|$t
H�|$�/��H�D$8dH3%(��H��@[]A\�H�EH���t�H�KH�}H��L��L�D$ ���u�H�D$ �xu�H�l$�M�}�Q�Ut	�����@H�|$H�\$0H�|$(�&5��H�\$0H�ŀ{�$�CH�|$(H��E1�H��jH���A�H�
Sj�cp��H�� H�|$0�.��H�D$ H�|$�@�.�����D��w��H�S�oH�D$H��H�PH�� �@�@��v#H����	��H�\$�{�k���H��f�H���؎��H�\$�M���fD�M��Kw��H�D$�oUH�UH��H�PH�� ��v
H���b	��H�D$�@�@H�D$ ������v��H�D$0�o�SH���@�P�@�������H���	��H�\$0���襒�D��AWAVAUA��ATUSH��H��hH�|$dH�%(H�D$X1�H�D$ ���{I����I�<$�H�����H��H��tOH�H�@L�D$H�uI�|$�P�����t-E���\�A��t[H�D$H�8�6�����J�A��t:I�$H���t,H�KI�|$H��H��L�D$(���A�Dž����1�H�|$ t
H�|$ �|,��H�t$XdH34%(���WH��h[]A\A]A^A_����vu��H�S�oH�D$ H��H�PH�� �@�@��vH�����H�\$ �{����H�ؐH��蘌��H�\$ ���fDH�D$(�x�I���H�l$�M�}�Q�UtP��vK�M���t��H�D$�o]H�UH��H�PH�� ��v
H�����H�D$�@�@H�D$(�@H�|$H�\$8H�|$0H�D$@�t1��H�l$8I�ƀ}���EH�D$@H�|$0H��L��H�D$I���I��A�jH�
PUj�l��H�� L�t$8L���*��H�|$@H�|$8H�����4��L������*��H�D$(E��t��tI��`�I�������@H�|$�*������DH�D$1�H��x@�������s��H�D$8�oU�UH���@�P�@���
���H�����H�l$8���f�H�D$(1��t���I�$H����b����8�Y����H�|$H���I�H�D$8H�D$(�H�\$8H�����C�C��<w%H�$'��Hc�H�>��H�;E1������A��L��D���)��H�D$(���E1�f�f.A��AD�A����E1�H�;A���C��������A��H�CH���t�H���H��tU�H�4$H��х�uD�|$@�o���H�D$(�_����*��A���t�H�CH��E1��PpH������A���6���H�@@H��t�H���H�D$@�xt�H�����H�D$@H�<$D�8�(�����H��80�F������E1������AUATUSH��H��HdH�%(H�D$81�L�l$ ���I���C<t2�oH�SL�l$ )D$ H�T$0<���|$4L����DI�<$1�H��H�������H��H��tOH�H�@L�D$H�uI�|$�P�z�����t-L9�tpH�L$8dH3%(H�D$��H��H[]A\A]�@I�$H���tzH�KI�|$H��H��L�D$�����u]H��t
H�D$�8uNH�D$L9�u��|$4v�H������|���@L�����#���L��L������|$4�
�����H�`�A�H�P�@�EH�MH�uH�T$I�|$j�PH�D$PL�D$ ���XZ�������D��ATUSH��H��pH�|$H�$dH�%(H�D$h1�H�D$����{I���MI�<$1�H��H�������H��H����H�H�@L�D$ H�uI�|$�P������uwH�T$ H�$H�H9����x��o)L$PH�@H�D$`H��K�HH��oH�$�H��tH�D$ H�8�v�d���|$dvhH�|$P����\�I�$H����H�$�S�{�B�Ct	���:�EH�MA�H�uI�|$j�PH�D$XPL�D$�G��XZH�|$t
H�|$�s%��H�D$hdH3%(��H��p[]A\�fD��vn��H�S�oH�D$H��H�PH�� �@�@��vH�����H�\$�{�g���H�ؐH��蘅��H�\$�Q���fDI�$H����Q���1�H�KI�|$H��L�D$(�����1���H�D$(�x�"���H�l$�M�}�Q�Ut	�����@H�|$H�$H�\$8H�|$0H�D$@H�D$H�*��H�\$8H�ŀ{���CH�D$@H�|$0H��L�d$HH��H���M��A��@H�
��
PSj�e��H�� H�|$8�$��H�|$@�#��H�\$HH��t �C<��<t<��L����#��H�D$(H�|$�@�#���1���fDH�KI�|$H��H��L�D$(����������H�D$(�x��������S��l��H�$�oH�SH��H�PH�� ��wD�@�@���@H�D$P�K�{�A�Ct��wH�H�|$P�#�����DH���p���H�$�f.��M��l��H�D$�om(H�UH��H�PH�� ��v
H���*���H�D$�@�@H�D$(�����K���k��H�$�o30H�SH��H�PH�� ��vH������H�$�@H�T$ H���@�1�����vk��H�D$8�o# �SH���@�P�@������H�����H�\$8���f.�H�;�(������H�CH�������H���H��tBH�t$P�H��х����H�`��������H�CH��PpH���������H�@@H��t�H���H�D$P�xt�H�����H�|$P�e!������{��ff.���AUATI��UH����SH��H��8dH�%(H�D$(1�H�L$H�����H�\$H���u�D$����I�<$H�t$�H�\$�D$$�d�H��H�����}D�(u$�}*tA��tpH�@H�}H�p诌��u[I�$H�s0D������������H�L$(dH3%(u8H��8[]A\A]�fDH�5Y��1��	���W�����������d��@��USH�����H�H���H��t�C��t
H��H��[]��uk��t�H��`�H�C H�{H��PH��tH�x����u�H�SH��PH�KH�RH����L�@H�5��1��K	���f�H�`�H�SH��PH9��k���H�KH�RH��t L�@H�5�1��	���B���@H�5)�1������&���H�5q�1������������UH��AWAVI��AUATD�bS��H��8L�/Ic�dH�%(H�E�1������H��H��H��H���H)�H���H9�tH��H��$�H9�u�%��H�D$��L��H���H��H�E��z��L������H�u�H�M�H�I��H�z0D���h������UH�U��J����I�EL���H�U�H�U�H��tGH;B�;H�@H��t4I��`�I��PH9�u�zf.�H9��gH�@H��u�M�/I����m�P�g��I���I���I�D$0I�D$HH�]A�D$(I�D$@M�l$A�D$ ��L���i��I�D$1�fA�D$8L�e�f.������L�e���f����L��H��H�E�H�E��.��L�����H�u�H�M�H�I��H�z0D�������������H�}��jf��M�/M���M��t_�P�!f����L��I���I���I�D$0I�D$HH�]A�D$(I�D$@M�l$A�D$ �h��1�I�D$fA�T$8H�u�dH34%(L���;H�e�[A\A]A^A_]��I��`�I��PH��tH�B��H9���H�@H��u������H�B I��PH�zH��tH�x����������M�?I����/�P�%e��I���I���I�D$0I�D$HH�]A�D$(I�D$@M�|$����H�}��e���F���f.�H)�H�L����f�H�u�H��0H�M�D���|���������H�U��B�x���I��PH9B�g���H�U�����@������H�u�H��0H�M�D���+����u'H�U��J��tI��PH9B��f.�H�U��J���@H�`�H;�P������f.�I��PL�%�
H��tL�`H�E�L�-��
H��t
H�PH��tL�j�x����M��M��L��H��H�5��1��������H�`�L�%��
H��PH��u��H�U��
����f�fD��AVI���zAUA��ATI��UH��SH�� dH�%(H�D$1��<c��D��L��H������H�L$I�~0��H��H�����������H���7c��H�\$�{��t'H�L$dH3%(H���|H�� []A\A]A^������t�I��`�H�C H�{I��PH��tH�x�(���u\I��PH���
H��tH�XH�D$H�-��
H��t
H�PH��tH�j�x觭��I��M��H��H��H�5|�1����H�\$�7���fDH���Pb��I���t9H�`�H��XH��t&H�GH���t����L��H���������
I�VL��H���
H�50�H��HD�1��%�����I��`�H�\$I��PH���$H;S�����H�BH��u�Y�H�@H��tIH9�u�H�L$H�x0��L���'����usH�\$I��P�Ct
H9S�@���H�\$�{H����H�jH�CH�3�
H��tH�X�Y���H��I��M��H��H�5.�1��Z��1����I��P���P��`��D��L��H���I���H�C0H�CHH�]�C(H�C@L�s�C �ec��H�C1�f�C8����fDH�-��
�B����O|�ff.�@��AVA��AUD�jATD��A��UH��SH��H��H��PdH�%(H�D$H1�H�L$H�$�������tH�t$�>��upH��0H����������H����#��H�D$H��PI��PH�HH�p�����H�$H���}H�\$HdH3%(��H��P[]A\A]A^�@D��H��H�l$�D$D�t$ ���H�t$�|$H��H�t$H��0H�D$(H�\$@������[���E��t21��fDE��u�H�SH��H�5��{���H�$�]���f�H�D$H�[�8�@���I��H�ٿH��H�5�1��D���1��(����z����H��H�WH��1�H�5h�����1�H�������H��`�H�@H��H���@(�ff.�@��SH���#��H�{���H��[�q^�����UH���SH��H���&^��H�H�UH�xH�H�UH�P�k�H�;H��[]�]�ff.�f���U��SH��H�<@H��H��H����]��f�k@@ H��C�C����H��[]����SH��H�?�]��H�[�����vvATI��U�Sf.���H�@I�$H��H؀xt1�8u,H�P�H��t H�xH��t�@(���I$�k(���A9l$w�[]A\�f��ff.�@��H�H��t5�v/��
�H���H�@H��HЀxt���9Ow��ff.����vVUH��S�H�����H�@H��HE�xtH�P�@H��tH�x�҃�9]w�H��[]�f.��ff.�@��AUI��ATI��UH��SH��H��`����H������tP��H�RH��H׋w����H����D�G(L�oH��tKH�oL�gH�O H��[]A\A]�@���;��t2�P�����H�RH��H��f.�H��P	]���1�H�L$H�4@���H���[��H�L$H��H�������ff.�f���AUATUH��SH��I��`�dH�%(H�D$1��M���H�@H��I�H��I�D$ H��tOH��I�|$��I���H�<$H�H�H H�PH�p���H�UH�L$dH3%(��u3H��[]A\A]�D���H�5��
�H�P1����I�D$ ��`v����H��`�H�@H��H���@(�����H��`�H�H��H���@(�ff.�@��H���H�`��|$dH�%(H��$�1�H���H��t!��H�RH��H�H�T$�x�P(u(���P(H��$�dH3%(��H������u�H�p�8H�t$��H�x��CH���D$H�|$ H�|$0H���n}������BH�D$�t$H�8�PH�`�H�t$ H��H�t$H��H��H�v�P(H�t$��t8H�t$�B��F �D$���/�����H�=5
��������D$H�xtQH�`�H��$H��H��H�t$(�|�������H�D$H�8�PH�`�H�t$(H��H�`�H�t$���H����L2�L$���H����D0H�D$�P �0���H�D$H���P(���X���H�p�D$H�t$�:���f��D$����D$�`�����s�ff.���SH���?�C����k[�����H��`�H�@H��H��H�@�ff.�@��SH�?H�����H�8H�WH��tH�J H��tH��H�p[��H�5��1�[���ff.����H���s���H�8H�WH��tH�JH��tH�p1�H����f�1�H�5���m���1�H���fD����H��`�H�H��H��H�@�ff.�@���H��`�H�@H��H��H�p�ff.�@���H��`�H�@H��H������ATI���USH���XV��L� H��H�xH�X��H������3V��H��C]H�°C]1�H���@�H��f�C�����H�o[7H�CH��[]A\���H�����@��H���#[���y��H���%I��D����F���H�L���H��L�GH��H��H�H�G�H�H��L�L�G�H��H�H��L�H��H�H�G�I��I��H�L�L�G�H��H��L�L�G�H�H��L�L�G�H��H�H��L�H��H�H�G�I��I��H�I�H9��b���������H�
�	��Hc�H�>��H��H��H��H�H�W�H�H��H��H��H�H�W�H�H��H�OH��H�H�H�H��H�yH��H�H�H�H��H�OH��H�H�H�H��H�yH��H�H�H�H��H��H�H�H��fDH���H������/���ff.���H�GXH��tH����fD����H�G`H��tH����fD����H�GhH��tH����fD����H�H�@0H�1��ff.�@��H�x1��D��H��`�SH��H���h����hH�H;A0|H�(�ǂhH�H��tH�y0��H�x1�[���H�H�GP�Q�I0�oH�LH�L1�H�x�D��SH��`�H��H�H�wPHc� �HH�<�HH�sP�DH�{xtY�� ��uH�x1�[��H����A�jH�ߩ
A�H�=`�
��5��XH�x1�Z[���@HCPH�Cx���SH�H���x0H{P�v���H�H��xH�1�[�D��ATUSH��H�� H��`�H�/dH�%(H�D$1��� �E0HGP��uH�8u@H9Cxt*H��x1�H�+H�L$dH3%(��H�� []A\�@H�Cx��fD�D$I��H�L��H�$�i��H��A�A�j�L$�H�=Q�
H�T$��4��XZ�|$vL������E0H�+HCP�]����Hm��SD�H��E��A��-u	D�FH�^A�@�<	w
��L�\�A�;t[���f.���vA��0t�L��H)�H���A��0L�KMc�M9�tP�C�XЀ�	w�D��0O��I��H�N�@M9�tA��XЀ�	v��@A��-tM��x�H��L��[驽��A��-u�L��H���c���I����ff.���SH�H��H�OP�P�o@0H�p@H�t�xH{P�v�z�H�x1�[�f���UH��SH��H��XH_P��P��H���f�C1��C�CH�ExH��[]�@��PXH�5�
H��H�G@�H�HH�`�H��PH�P1���f�ATUSH�� dH�%(H�D$1�H����I��H����H��`�H�/H�H�B@H�l$H9�t7H9�t2H9�tN�{u�k���C�CI�$H�|$�C����H�D$dH3%(�6H�� []A\�@�}uًEH9���H;j t��v]���H�t$�E��N��H�T$H�t$I�$�o
H�RH��H�PH�� ��vH�����I�$H�t$H��@I�,$�E�\���D�H�t$�iN��H�t$H��oH�SH��H��H�PH�� ������H���w���f���v�����E�N��I�$�oUH�UH��H�PH�� ��vH���3�I�$�@I�$�@I�,$�Q�����i�H�5�1��/�ff.�@��PXH�5�H��H���H(�PtD�@H1���D��AVAUATUH��SH�� H��`�L�'dH�%(H�D$1�H��0�x9�JE�d$0LeP����tA�|$���M���Ao$A�T$�@�PH��@H�H�E@�xh�wJ�E`��lH�EpHǃxH����H�L$dH3%(��H�� []A\A]A^�@H�}P��L���D�L���Ao$H�T$L��I��H�t$A�D$A�EA�EA�E�
��H�T$A��I�D$H�xtgH�5;�
�1���I�D$L��PA�EH�I�UL�(E������H�|$�3L������fDH�5��1��U������g�H�5�
�1��8����AWAVAUATI��USH��(H��`�H�/dH�%(H�D$1�H��0L�m0�x9�����t
�}D���}EukH�L�(�E@I�D$@�xh���A�D$`��lI�D$pHǃxH����H�L$dH3%(�_H��([]A\A]A^A_�@�E@��t����J���oE0I���EDA�EA�EA�E<w+H�L�(I�D$@�xh��d���I�|$P��J���U���@L������H�L�(�����vJ���oM0H�T$L��I��H�t$�EDA�FA�FA�F���H�T$A��H�E8H�x��H�5&�
�1���H�E8L��PA�H�I�VL�0E�������H�|$� J�����1�H�5o��E����t
�}D�B���H��0�x9������C����e�H�5�
�1���@AVAUATUSH��H���#I��`�H��H�I9\$@���CI��A�̈́�tU<tA<��<uNH�SH�B8H����L��H���H���H��tIH�EH��f�H�;uf.�A�E���v7H��tA��I�T$@I�D$ HE�H�EH��@H��[]A\A]A^���{H�t$u�C����H������C�O����H�5��1����DH��t�I�D$@H�EI�D$@�@H��[]A\A]A^�@�C���E����I���H�BH��t�H���Y���D��L��H���H�UH�EH�U�DH�CH�@H���D��L��H���H��toH��u�����D����C��G��H�t$H��oH�SH��H�PH�� ��vH������H�t$H��@H��@H������1�H�5o
����H�������H�EH���H�5!
�1���D��SH�H���xH{P�Y
��H�x1�[����f.�����f.����f.����f.���USH��H��H�dH�%(H�D$1�H�GP��j�R0H�H�H�$�F��H�$E1�1��A��oH�$�R�@�PH���@H�}����H�xH�L$dH3%(u	H��1�[]��3b���SH�H���xH{P�Y	��H��[�@�����USH��H��dH�%(H�D$1�H��hH�P0HoP�xEH�$uC�@@H�}E1��1�H��A��{���H�x1�H�L$dH3%(uGH��[]�fD��E��H�$�oH�$�R�@�P�@��v�H�������Ya�f���SH�H���xH{P�y��H��[� �����SH�H��H�WP�@0H�<�1��H�x1�[�ff.�f���SH�H��H�GP�J0�RPH�4H�<�F(�t
�H���H�x1�[�H�NH�W1�H�5G��5�D��H�`�SH��1�H�?H��8蠚��H�x1�[����U1�SH��H��H�?H�CP�oH�WhH�H�H�`�H��@�ɜ��H�E1�H�xH��[]����U1�SH��H��H�`�H�?H��@�oHkP�d���H�E1�H�xH��[]���AU1�ATUSH��H��L�'H�WPA�l$0HՀ}t8A�L$�D
A�T$H�KPH��}vH���#��H�xH��1�[]A\A]�f�H�MH���t�A�D$PH��L�,�q��H��L���f���H�SP����������AWAVAUATUSH��L�'A�\$0H_P���{��H��H�����I��H�CL�pM����M��tnI���H�����PI��`�������trI��PH�x�f����u^I��PH�
�
H��tH�HI�UH�5�	�1���@I�UH�5��
�1���f�M��tsI��`�A�D$HEPH�PH�I���tjH�ExH��1�[]A\A]A^A_�@I��PI9�t�H�
I�
H��tH�HI�UH�5	�1��}�DH�5��1��e�D�E�l$LmP��A��H��I�EA�D$H�UPL�lA��A�EI�UH�UPA�D$H�D�@H�UPA�D$H�D�@A�D$H�UPH�D�@A�D$uI�������A�|$H}PH���,������H�5��1���@��AWAVAUATUSH��H�I��I��0���{D��H��L�����I��H�C8L�pM����M��tpI��$�H�����PI��`�������tsI��PH�x�G�����u_I��PH�
��
H��tH�HI�T$H�5��1����@I�T$H�5��
�1�����M��tsI��`��CHEPH�PH�I���tlH�ExH��1�[]A\A]A^A_�fDI��PI9�t�H�
)�
H��tH�HI�T$H�5��1��\�@H�5��1��E�D�D�cLeP�?��L��I�D$�CH�UPL�dA��A�$I�T$H�UP�CH�D�@H�UP�CH�D�@�CH�UPH�D�@�CuI��������{H}PH����������H�5��1����ff.�@��U1�SH��H��H�H�Ph�hHoP1���)��H�E1�H�xH��[]�ff.���ATUH��`�SH��L�'H���H�������A�T$0H�KPH�4H9�tDH��茝����u8A�L$4����I�T$hH�K@H��H��H)�H�QHH��H�[1�]A\�fDH��A�D$XI�t$PE1�H���jA�H����P�!���HDž�XH�xZ[1�]A\�f�I�L$hH�s@1�H��H��H)�H�NHH��H�[]A\�1���\��H�x�ff.���H�`�SH�����tH�x1�[�H�W@H����H�5���):��H�x1�[Ð��H�`�SH�����tH�x1�[�H�W@H����H�5^���9��H�x1�[Ð��H�`�SH�����tH�x1�[�H�W@H����H�5���9��H�x1�[Ð��USH��H��H�/�U�uXHWPH�}P����tH�xH��1�[]�@H�UP�H�5H�
H���0���EH�SP�oEPH�M`H�L�}H{P�v�����H�xH��1�[]����AVAUATUSH��H��H�/H�WPdH�%(H�D$1�H��E0H�uPL�,�EXI��X�P��������I��`�H�<$�M��$PM��$P�y��H�$M��$PH�SPH��E�oH�IH�L�}H{P�v���H�x1�H�t$dH34%(u$H��[]A\A]A^�H�UPH�5i�
�1�����W���S�;H��H�=��G�H�x1�[�ff.�@��UH��SH��H��X0H_P�{uCH�H�`���(�{vH�������H�=y���H�ExH��1�[]�fDH���8����fD��SH��H�?�Du/H�W0H�`���(�z	H�="��H�x1�[�DH��0������D��AWAVAUATUSH��H��HH�/dH�%(H�D$81��Eh��E1�E1��^:��H���H�D$ �oH�RH�P���P�UH�KPH�D�EHCPH�PH�M���I�D$I�D$H�P(H��tsL���I��`�I���utI�D$L��PI���u_I�D$������A��E����H�x1�H�L$8dH3%(��H��H[]A\A]A^A_��I��`�L��PI���t�H�D$ H�|$ �h�6�H�x뤋E0HGP�H�D$ �J9��H�T$ �o
H�D$ �R�@�P�@����E1�E1�����fDH�|$ �G<tC<��H�5��1��P��H�`�H����KH�H��xH�����@L�'M��t�1�L���V���M��tsH�|$ L�|$0L�t$L�l$(訤��H�D$�D�E1�E1�L��L��L��L��蹩��<t<t3�D$H�t$(H�|$�P�������t1�L���-���1�L��������u�1�L�����uL��A��HsPH�������<���DH�����I��H�D$ M����I��@�P���J��HI��@H�����UhH��L�����I��H����I��`�I���te1��~V��H�x����D�UPH�K@H��H��H)�H�QHH�����f�H�G�PpI��������E1�����D�pE1�V��f�H���*���pH�D$ �V����H�`�H����n���I�MH���
1�1�1��=`���S�����R�E1����ff.���AWAVAUATUSH��H��HH�/dH�%(H�D$81��Eh��H�}0�}DH�|$ ���6��I��H�D$ �oA$�P�A�D$A�T$A�D$��vL�����A�D$��L�d$ E1�E1�A�D$�EH�SPL�d�EHCPH�PH�M���[I�EI�EH�P(H���rL���I��`�I��$���I�EL��PI��$���I�E������A��E���H�x1�H�L$8dH3%(��H��H[]A\A]A^A_�fD�c�I��H����H��@L�d$ H����UhL��L������I��H���HI��`�I��$��1��T��H�x�o���f�H�D$ H�|$ �h���H�x�Q���@�E1�E1���4��I��H�D$ H���oH�@A$I�D$������H�|$ �G<tC<�KH�5\�
�1����H�`�H����H�H��xH����@L�'M��t�1�L�����M��t{H�|$ L�|$0L�t$L�l$(�P���H�D$�Lf�E1�E1�L��L��L��L���Y���<t<t3�D$H�t$(H�|$�P��k����t1�L���ͤ��1�L��裥����u�1�L��蔥���uL��A��HsPH��躣�����DL�d$ E1�A�D$�P��A�T$�P���I��`����@�UPH�K@H��H��H)�H�QHH�����f�H�G�PpI������A�D$�PA�T$I��@H��������E1�����H���&��I��H�D$ �@������DH�`�H��������I�NH�h�
1�1�1��\������N�ff.�D�I��A��A��-u�NL�^�A�<	w
��L�T�A�:tE1�1����f���v��0t�L��L)�H��׃�0M�CHc�M9�tUA�CD�X�A��	w�@��0H��I��H�H�HM9�tA�D�X�A��	v��f�A��-tH��x�A�1�1��f���A��-u�H��H���`���H����ff.���AWAVAUATI��USH��H��`�L�?dH�%(H��$�1�H�A�o0HoPH�D$�E<���oEL�l$ )D$ H�UH�T$0<wk�|$4u,A�GI�P���D$H����H�l�
Hc�H�>��f�L���H��A�GI�P���D$H���oH�|�
Hc�H�>��fDL���0���|$4t���A�GI�PH�,$���D$H���H�t�
Hc�H�>��f�L�,$H�$H�8H�D$@H�D$�?/��H�t$�!�����@L�t$PM���RL����;�L��H����P訃������I�P��H�|$E�H����H�|$I������1��L9,$�BA�GID$PH�HH�M���=A�GI�L$PL��H�L��0I�L$PH�A�GH�DH���I�T$M�l$HM�t$I�D$HH�$�H�$M�l$HI�T$�T$���RA�I|$PH�t	H���I�L��xI�D$@L��H��0I�D$H�CH�3��L���}/��H���t1��,N���}vH�����H�D$H�1�I�$xH��$�dH34%(�H�Ę[]A\A]A^A_�fDL�,$H�4$����1�I��L9,$������|$4�����L��@�4$�-����4$���@L�,$H�=��
�p�H�<$H��H�D$H�@��H�L$I��H���.��1��T���@L�l$ ���fDL�l$ �j���fDL�l$ �f�A�GID$PH�xI���������.��I�EI�L$PA�GH�D�@I�L$PA�GH�D�@I�L$PA�GH�DH�A�GI�L$PH�D�@�O�����D$���x���A�G�ID$P@�4$I���-���4$I�EI�T$PA�GH�DH����o
H�RH�PI�T$PA�GH�DH�0A�GI�T$PH�D�@�
���fDH�$I�PH�0���E1��Q��1����f.���D$H�M�H�|$1ҹH�D$@�H�$H�0�n=����tzH�|$@�J�H�$H�8�2���@1�E1�L�l$ ����1�E1�����fD1�E1�����fD�E1����1��\���@H�|$E1��۶����A�����D$HH�t$@H����P�H������f���H�|$@E1��J��	���f�H�$�pH�8��.��I��H�D$P�����G�ff.�@��AWI��AVAUATUSH��H��`�L�7dH�%(H��$�1�H�H�D$A�FD<���AoF0I�V@L�d$ )D$ H�T$0<wq�|$4u2A�FI�~P���D$H���YH�^�
Hc�H�>���L���B��A�FI�~P���D$H���/H�h�
Hc�H�>��fDL���P����|$4t���A�FI�~PM�n0���D$H����H�`�
Hc�H�>��f�M��I�}H�D$@H�D$�?/�NH�t$�������H�l$PH���H���5�H��H����P��}������I�~P��H�|$E�H����H�|$H���'���1�DM9�� A�FIGPH�HH�H���A�FI�OPH��H�H��0I�OPH�A�FH�DH���M�gHM�oI�GHI�o��T$M�oM�gH���DA�~IPH�t	H���|�L��xI�G@H��H��0I�GH�CH�*.��H���)��H���t1��aH��H�D$H�1�I�xH��$�dH34%(��H�Ę[]A\A]A^A_�f.�M��L���E���1�H��M9�����|$4����L��@�t$�o����t$���DM��H�=�
���L��H��H�D$H�@��H�T$H��H����(��1��v���fDL�d$ ����fDL�d$ �i���fDL�d$ �f�A�FIGPH�xI���������`(��I�D$I�OPA�FH�D�@I�OPA�FH�D�@I�OPA�FH�DH�A�FI�OPH�D�@�`���@�D$��������A�n@�t$IoP��'��H�EI�WPA�FH�DH����o
H�RH�PI�WPA�FH�D�T$H�A�FI�WPH�D�@�"���I�~PI�u���1����1��.���fD��D$H�H�H�|$1ҹ�H�D$@I�u��7����tuH�|$@�E�I�}�l���f�1�1�L�d$ ����f�1�1�����1�1������1����1����DH�|$1��<�������f��D$HH�t$@H����P訑�����k���H�|$@1��tD��J���f.�A�uI�}�S)��H��H�D$P�����QB���AUATUH��SH��8L�/dH�%(H�D$(1�H�GP�D$A�]PHÀ{I��upA�u0A�}L��H�H�����D$��tA�|$w:�{vH���\���H�Ex1�H�L$(dH3%(uRH��8[]A\A]�f.�L���(����fDL�d$H�T$H��L������T$H�EP���k���I���c����nA�ff.���SH�H��H�P�p0H�PP�@H�H��<��H�x1�[�@��SH�H��H�P�p0H�PP�@H�H��~��H�x1�[�@��UH��SH��H�H�GP�ZP�r0�zH�H�H�H��肫���{vH���D���H�ExH��1�[]�fD��SH�H��H�P�p0H�PP�@H�H��<���H�x1�[�@��ATI��USH�H�GP�ZP�j0�zH�H�H�H��H�������}vH���õ���{vH��赵��[I�$x1�]A\�f���UH��SH��H�H�P�X0H�PP�@H�H�H��褪���{vH���f���H�ExH��1�[]����UH��SH��H�H�P�XPH�p0�@H�H�H���T����{vH������H�ExH��1�[]�����f.���SH�H��H�PP�xH�p0H{P����H�x1�[�f�����f.���ATUH��SH�� dH�%(H�D$1�H��X0H_P�{u"H�CH�xxtI��H��L���S�����t?H���'����{vH���I���H�Ex1�H�L$dH3%(u+H�� []A\�f�L������|$v�L���	�����>�f���H�H�OP�PH��@H�WP�D�)���f���ATUSH��H�� dH�%(H�D$1�H��xDH�h0u"H�@8H�xxtI��H��L���v�����t*H���J���H�x1�H�L$dH3%(u%H�� []A\�L��� ����|$v�L���A������=�f.���H�H�OP�PH��@H�WP�D�9���f���ATI��USH�H�GP�ZP�j0�zH�H�H�H��H���aq���}vH���ò���{vH��赲��[I�$x1�]A\�f���UH��SH��H�H�P�X0H�PP�@H�H�H���q���{vH���f���H�ExH��1�[]����UH��SH��H�H�P�XPH�p0�@H�H�H���p���{vH������H�ExH��1�[]����SH�H��H�PP�xH�p0H{P�qp��H�x1�[�f���ATI��USH�H�GP�ZP�j0�zH�H�H�H��H���l���}vH��蓱���{vH��腱��[I�$x1�]A\�f���UH��SH��H�H�P�X0H�PP�@H�H�H���$l���{vH���6���H�ExH��1�[]����UH��SH��H�H�P�XPH�p0�@H�H�H����k���{vH�����H�ExH��1�[]����SH�H��H�PP�xH�p0H{P�k��H�x1�[�f���ATI��USH�H�GP�ZP�j0�zH�H�H�H��H���g���}vH���c����{vH���U���[I�$x1�]A\�f���UH��SH��H�H�P�X0H�PP�@H�H�H���Tg���{vH������H�ExH��1�[]����UH��SH��H�H�P�XPH�p0�@H�H�H���g���{vH��趯��H�ExH��1�[]����SH�H��H�PP�xH�p0H{P�f��H�x1�[�f���ATI��USH�H�GP�ZP�j0�zH�H�H�H��H���1x���}vH���3����{vH���%���[I�$x1�]A\�f���UH��SH��H�H�P�X0H�PP�@H�H�H����w���{vH���֮��H�ExH��1�[]����UH��SH��H�H�P�XPH�p0�@H�H�H���w���{vH��膮��H�ExH��1�[]����SH�H��H�PP�xH�p0H{P�Aw��H�x1�[�f���ATI��USH�H�GP�ZP�j0�zH�H�H�H��H���As���}vH�������{vH�����[I�$x1�]A\�f���UH��SH��H�H�P�X0H�PP�@H�H�H����r���{vH��覭��H�ExH��1�[]����UH��SH��H�H�P�XPH�p0�@H�H�H���r���{vH���V���H�ExH��1�[]����SH�H��H�PP�xH�p0H{P�Qr��H�x1�[�f���ATI��USH�H�GP�ZP�j0�zH�H�H�H��H���!o���}vH���Ӭ���{vH���Ŭ��[I�$x1�]A\�f���UH��SH��H�H�P�X0H�PP�@H�H�H����n���{vH���v���H�ExH��1�[]����UH��SH��H�H�P�XPH�p0�@H�H�H���tn���{vH���&���H�ExH��1�[]����SH�H��H�PP�xH�p0H{P�1n��H�x1�[�f���ATI��USH�H�GP�ZP�j0�zH�H�H�H��H���[���}vH��裫���{vH��蕫��[I�$x1�]A\�f���UH��SH��H�H�P�X0H�PP�@H�H�H���Z���{vH���F���H�ExH��1�[]����UH��SH��H�H�P�XPH�p0�@H�H�H���dZ���{vH�����H�ExH��1�[]����SH�H��H�PP�xH�p0H{P�!Z��H�x1�[�f���ATI��USH�H�GP�ZP�j0�zH�H�H�H��H���Q���}vH���s����{vH���e���[I�$x1�]A\�f���UH��SH��H�H�P�X0H�PP�@H�H�H���DQ���{vH������H�ExH��1�[]����UH��SH��H�H�P�XPH�p0�@H�H�H����P���{vH���Ʃ��H�ExH��1�[]����SH�H��H�PP�xH�p0H{P�P��H�x1�[�f���ATI��USH�H�GP�ZP�j0�zH�H�H�H��H���H���}vH���C����{vH���5���[I�$x1�]A\�f���UH��SH��H�H�P�X0H�PP�@H�H�H���dH���{vH�����H�ExH��1�[]����UH��SH��H�H�P�XPH�p0�@H�H�H���H���{vH��薨��H�ExH��1�[]����SH�H��H�PP�xH�p0H{P��G��H�x1�[�f���ATI��USH�H�GP�ZP�j0�zH�H�H�H��H����?���}vH�������{vH������[I�$x1�]A\�f���UH��SH��H�H�P�X0H�PP�@H�H�H���t?���{vH��趧��H�ExH��1�[]����UH��SH��H�H�P�XPH�p0�@H�H�H���$?���{vH���f���H�ExH��1�[]����SH�H��H�PP�xH�p0H{P��>��H�x1�[�f���ATI��USH�H�GP�ZP�j0�zH�H�H�H��H���6���}vH������{vH���զ��[I�$x1�]A\�f���UH��SH��H�H�P�X0H�PP�@H�H�H���$6���{vH��膦��H�ExH��1�[]����UH��SH��H�H�P�XPH�p0�@H�H�H����5���{vH���6���H�ExH��1�[]����SH�H��H�PP�xH�p0H{P�5��H�x1�[�f���ATI��USH��0H�_PdH�%(H�D$(1�H��h0�PH�H�H�xh���oEH�UH�SH�xhw,H�@hH���
Hc�H�>���H���0���I�$x1�H�L$(dH3%(��H��0[]A\�@H���(����fDH���%���fDH���%���fDH���(���fDH���-���fDH�T$H�t$H������D$��t.foL$H�D$ H�C�}�R���H��躤���E���D�oUH�EH�C�+����/�fD��ATI��USH��0H�dH�%(H�D$(1��kHoPH�{ht@�oC0EH�C@H��H�EH�� ���H�{hwPH�ChH���
Hc�H�>��H�T$H�t$H�{0�����D$����foL$MH�D$ H�EfDI�$x1�H�L$(dH3%(��H��0[]A\�@H��舤���t���H����.���fDH���h&���fDH����#���fDH����#���fDH���&���{���H���,���k����oS0UH�C@H��H�EH�� ���G���H������:����-�ff.�f���ATI��USH�H�GP�ZP�j0�zH�H�H�H��H�������}vH���Ӣ���{vH���Ţ��[I�$x1�]A\�f���UH��SH��H�H�P�X0H�PP�@H�H�H��褘���{vH���v���H�ExH��1�[]����UH��SH��H�H�P�XPH�p0�@H�H�H���T����{vH���&���H�ExH��1�[]����SH�H��H�PP�xH�p0H{P����H�x1�[�f���ATI��USH�H�GP�ZP�j0�zH�H�H�H��H���Q����}vH��裡���{vH��蕡��[I�$x1�]A\�f���UH��SH��H�H�P�X0H�PP�@H�H�H�����{vH���F���H�ExH��1�[]����UH��SH��H�H�P�XPH�p0�@H�H�H��褖���{vH�����H�ExH��1�[]����SH�H��H�PP�xH�p0H{P�a���H�x1�[�f���ATI��USH�H�GP�ZP�j0�zH�H�H�H��H�����}vH���s����{vH���e���[I�$x1�]A\�f���UH��SH��H�H�P�X0H�PP�@H�H�H��蔕���{vH������H�ExH��1�[]����UH��SH��H�H�P�XPH�p0�@H�H�H���D����{vH���Ɵ��H�ExH��1�[]����SH�H��H�PP�xH�p0H{P����H�x1�[�f���ATI��USH�H�GP�ZP�j0�zH�H�H�H��H���q����}vH���C����{vH���5���[I�$x1�]A\�f���UH��SH��H�H�P�X0H�PP�@H�H�H�������{vH�����H�ExH��1�[]����UH��SH��H�H�P�XPH�p0�@H�H�H���ė���{vH��薞��H�ExH��1�[]����SH�H��H�PP�xH�p0H{P聗��H�x1�[�f���ATI��USH�H�GP�ZP�j0�zH�H�H�H��H��聕���}vH�������{vH������[I�$x1�]A\�f���UH��SH��H�H�P�X0H�PP�@H�H�H���$����{vH��趝��H�ExH��1�[]����UH��SH��H�H�P�XPH�p0�@H�H�H���Ԕ���{vH���f���H�ExH��1�[]����SH�H��H�PP�xH�p0H{P葔��H�x1�[�f���ATI��USH�H�GP�ZP�j0�zH�H�H�H��H���qO���}vH������{vH���՜��[I�$x1�]A\�f���UH��SH��H�H�P�X0H�PP�@H�H�H���O���{vH��膜��H�ExH��1�[]����UH��SH��H�H�P�XPH�p0�@H�H�H����N���{vH���6���H�ExH��1�[]����SH�H��H�PP�xH�p0H{P�N��H�x1�[�f���UH��SH��H�H�P�X0�@H�H�H����P���{vH��躛��H�ExH��1�[]�ff.����SH�H��H�p0�xH{P�P��H�x1�[�ff.�f���UH��SH��H�H�P�X0�@H�H�H����Q���{vH���:���H�ExH��1�[]�ff.����SH�H��H�p0�xH{P�Q��H�x1�[�ff.�f���SH�H���PtH�37�Ѓ�tJ��tM��tAH�3H�
�
��H�ߍ�[HcV(�������HcFH�H�`�Hc�H�H���@[�fDH�H�
��
H��[HcB(�rtHcRH���4��4�����H��`�H�H�H���H��H�`�H���H�@pH����H�vL��H	H��tQL�P@M��tHH��@pP1�A����t$ AQI���APM��QH��H�5Z�
�ը��H��01�H���f.��t$1�AQI���APM��QH��H�5��
蛨��H�� 1�H���H�55w
I���k����AU��ATUSH��H��`�dH�%(H�D$1�H���H�@XH�,�H�EH��t%H�H�L$dH3%(��H��[]A\A]�H��0H�A��I��H���H�@XL�,�A�EI�MI�u�P��t�����tH�E뜐A��w�H�c�
Jc�H�>��f�I�UH�5��
�1�詧��H�C�CI�MA�H�$H���A�EjUI�u�PL�D$�^��ZH�EY�$���f�H�C�����I�U1��H�5	�
�9���H�C����"�ff.���AW1�AVAUATUSH��H��L�7H��`�dH�%(H��$�1�A�~0H�EH�D$�W���I���@<���AoL�l$ )D$ I�WH�T$0<wl�|$4u-A�FI�~P���D$H���LH�1�
Hc�H�>��L���p��A�FI�~P���D$H���'H�@�
Hc�H�>��fDL�������|$4t���A�FI�~P���D$H����H�<�
Hc�H�>��fDM��I�?H�D$@H�D$�?/�GH�t$������
L�d$PM���L����L��H����P�X������I�~P��H�|$E�H����H�|$I�����1�fDM9��A�FHCPH�HH�M���A�FH�KPL��H�L��0H�KPH�EA�FH�DH���L�kHL�{H�CHL�c��T$L�{L�kH���;A�~H{PH�t	H���3���H��xH�C@L��H��0H�CH�EH����L���i��H���t1��#��H�D$H�E1�H�xH��$�dH34%(��H�Ę[]A\A]A^A_�M��L������1�I��M9�����|$4����L��@�t$�/����t$����DM��H�=��
�q���L��H��H�D$H�@��H�T$I��H�����1��~���fDL�l$ ���fDL�l$ �i���fDL�l$ �f�A�FHCPH�xI�������� ��I�EH�KPA�FH�D�@H�KPA�FH�D�@H�KPA�FH�DH�A�FH�KPH�D�@�j���D�D$��������E�f@�t$LcP���D�|$I�D$H�SPA�FH�DH����o
H�RH�PH�SPA�FH�DL�8A�FH�SPH�D�@�)����I�~PI�7���E1��e���1��6���fD��D$H��"�H�|$1ҹ�H�D$@I�7�����tvH�|$@���I�?�u���@1�E1�L�l$ �����1�E1����fD1�E1�����fD�E1��ӡ��1����@H�|$E1����������D$HH�t$@H����P�hl�����j���H�|$@E1��3��Q���f�A�wI�?���I��H�D$P������f�AWAVI��AUI��ATU��SH��L�>��A�_HH�CH�A�0����I��`�I;D$@t`�x�����}I�D$ H�CA�GtMA�GIH�H��tQH�H�PA�GIH�PH�I�ExH��1�[]A\A]A^A_�A�Gu�H�CD�@A�GIH�H��u�H�@�1�H�5��
�譠��I�D$ H�CA�G�l�����H�PH�JH���9���I�wP��H���H�CA�Gt��P���1����xvH���P���H�CH������6���ff.�@��H��H�WP����ff.���H��H�WP1��n���ff.�SH��0dH�%(H�D$(1�����GH�>�
H��Hc�H�>��f�H�?�8o��������H�t$(dH34%(�H��0[�fD�G��tك�tt���D1�H�?���D1�f�f.��E�롐H�GH���t�H���H��tvH�t$��х�u.�D$�m���D1��a����H�1��:0�~����M���DH�`�����`���H�CH��PpH���Rn������������DH�@@H��t���H�D$�xt�H���"��H�D$H�|$��D$�ݴ���D$�������ff.�@��ATUSL�'H��A�l$0HoPH���Q���A�T$H�KPH�H�A�D$H�SP�D�}vH������H�x1�[]A\�ff.���USH��H��H�/H�}0����UH�KPH�H��EH�SP�D1�H�xH��[]Ð��AUATUSH��H��L�'A�l$0HoPH������}A��vH��芎��A�D$H�SPIc�H�A�D$H�SP�DE��uH�xH��1�[]A\A]�fDH�`�H���tH�H��xH�H��1�[]A\A]��I�D$P��f���USH��H��H�/H�}0�����UH�KPHc�H�4�UH�KP�D��uH�xH��1�[]�@H�`�H���tH�H��xH�H��1�[]�@H�EP��f.���AUATUSH��H��L�'A�l$0HoPH���{����}A��vH���Z���A�D$H�SPIc�H�A�D$H�SP�DE��tH�xH��1�[]A\A]�fDH�`�H���tH�H��xH�H��1�[]A\A]��I�D$P��f���USH��H��H�/H�}0�����UH�KPHc�H�4�UH�KP�D��tH�xH��1�[]�@H�`�H���tH�H��xH�H��1�[]�@H�EP��f.���AUATUH��SH��L�'A�\$0H_PH���K����{A��vH���*���H�`�H���E��t'H��tJH�EH��xH�EH��1�[]A\A]�f�H��u�H�M@A�T$PH��H��H)�H�QHH����fDH�M@I�T$h��ff.�f���USH��H��H�/H�}0�����H�`�t$H���tRH�H��xH�H��1�[]��H���u�H�K@�UPH��H��H)�H�QHH��H�H��1�[]�f�H�K@H�Uh��fD��AUATUH��SH��L�'A�\$0H_PH�������{A��vH�����E��uH�ExH��1�[]A\A]�H�`�H���tH�EH��xH�EH��1�[]A\A]�fDI�D$P��f���USH��H��H�/H�}0�����uH�xH��1�[]�fDH�`�H���tH�H��xH�H��1�[]�@H�EP��f���AUATUH��SH��L�'A�\$0H_PH�������{A��vH�����E��tH�ExH��1�[]A\A]�H�`�H���tH�EH��xH�EH��1�[]A\A]�fDI�D$P��f���USH��H��H�/H�}0�����tH�xH��1�[]�fDH�`�H���tH�H��xH�H��1�[]�@H�EP��f�AW��I��AVAUATI��USH��(L�.H���dH�%(H�D$1��L$A�EE�uPI�H�H�CL�t$H�A�}0�k�H��`��L$H��H;B@���x������H�B H�CA�EtiA�EIH�H��tmH�H�PA�EIH�PH�A�~w.I�$x1�H�t$dH34%(�mH��([]A\A]A^A_�@L���P�����fD�@A�EIH�H��u�H�@�1�H�57�
�����H��`�H�B H�CA�E�J����f�H�@H�x������L$�c���H�T$�L$H��H���oH�D$�R�@�P���@L�EA�PH�CA�Eua�@A�EIH�H��tvH�H�PA�EIH�PH�H�|$迬������f.�A�E�����H�C�@�����P��u��xvH������H�CH�������DH�@��y�f���H��H�WP����ff.���H��H�WP1��~���ff.�PXH�5�
�1�H��藕�����USH��H��`�dH�%(H�D$1�H�H��XH����H���xPH{P�zH�<$t8�w"H��xH�1�H�L$dH3%(ugH��[]�f�����H���fD���H�$H��XH���oH�$�R�@�P�@H�W�RXH���,���H�������=�ff.�f���H�`�SH��H�7H��XH��t�uH�GH��P�PXH�3H��x1�H�3[����ff.���USH��H��H�/dH�%(H�D$1��EPHGP�H�$��H�$H��`��oH��XH�$�R�@�P�@tR1��EtA�H��H��X�ݩ��H���5���H�x1�H�L$dH3%(uH��[]���}H{P�����ff.�f���H��`�SH�H��Xt8H��H�PP1��@t �H��X�W���H�x1�[���xH{P�����f.���USH��H��H�/H�WPdH�%(H�D$1��EPH�H�}hH�$u�E0H�H��@�E0HGPH�H�H�P��b�H�$H��`��oH��XH�$�R�@�P�@tQ1��Et@�H��H��X脨��H���ܨ��H�x1�H�L$dH3%(uH��[]���}H{P������
�D��SH�H��H�xhH�PPu#H�wP�H0H�H�	�A�H0HOPH�1H�6H�qH��`�H��Xt/1��@t�H��X�ݧ��H�x1�[�D�xH{P������f���AWAVAUATUSH��8H��`�dH�%(H�D$(1�H�H��XH�����Q�XPI��H_PH�\$ �������G��tj�{wQ@H��xI�$1�H�t$(dH34%(�-H��8[]A\A]A^A_��H,A�1�1�L���	L���{vH�����I�$�D�{L�)���CH�p�
Hc�H�>��fDH�AH�xh����?�H�T$ H��XH���oH�D$ �R�@�P�@H�W�RhH�|$ �Ѧ��I�$������CH�3L��P�/������>���L���M9��.���H�D$ M��pH�8����H���@M�mpM������I�E@H��t�M9}hu�P`��~�L�L$ H�hXD�B�E1��I�FH��M9�t�I��H9Mu�A�A9Eu�I�1H�}Hc�H�L$L�D$L�L$���L�L$L�D$��H�L$u�I�EXJ���g����E1�1ɺL��H�5^
�_J���Q���f.�H�A�1�1�L���;J���-���fDH�5�
�1���������H�5+�
�1������
��K���H�5�
�1�������AWAVAUATUH��SH��I��`�H�I��$XH�����G<t(<��<t<H��x1�H�]H��[]A\A]A^A_�H�GH�@hH����H�sP��H�]���{dL�/�;�CdH��
Hc�H�>��fD�CXH�sPL��P������u�M��$�M9�u��CXH�{PI��p�ӗ��H���fDM�mpM��t�I�E@H��t�M9}hu�P`��~�L�`XD�B�E1��@I�FI��M9�t�I��I9L$u�CXA9D$u�H�sPI�<$Hc�L�D$H�$��H�$L�D$��u�I�EXJ���x����H,KPA�1�1�L���XH�����H�KP��f.�E1�1ɺL��H�5�[
�'H��H�]���fDH�5�
�1��������H�5�
�1�����8���H�5�
��׌���AWAVAUATUSH��8I��`�H�.dH�%(H�D$(1�I��XH���bI�֋]PH�I���HLc�H�$H�H��H�\$��������A��D�Cu	���E1�A��vH���;}��I�6�E�DH�EhH��tvH��u1ɋEI�E����H�I�Ex1�H�|$(dH3<%(��H��8[]A\A]A^A_�@D�CE��u�H�8A���)H���
Jc�H�>����EI�L�$�@��&�I��X1�H��H�D$�oH�t$�@�F�F�FH�}h��H�GE��t~�PPLc�H�|$覡��I�6����fDA�����oL�d$)L$H�CH�D$ A��wAL���Y����|$$L�d$D�C�E1�A�������I�H�����@�P`Lc��L���|���fD�CH�3H��P�����u#H�EhH����H�$E1�H��xA���{�C����6���f��H,3H���W����t���DH�3H����V����t���H��H�5�X
�R����u�H�EhH���}���H��u�H�$E1�H�8����A���r���f.�H�EhH����H�����I�$E1�H������I��XHcJH9�����H�E1�<0A������H�5�
�1�草�������H�EhI��H��tH��t�E1����DI�$E1�H���_���I��XE1�HcRH9�A���E�������ff.����H��H�WP��;���ff.���H��H�WP1�����ff.�AVAUATUHc�SH��0I��`�H�dH�%(H�D$(1�I��XH�����GI��I��H�D$<��H�sP<tl��u<��1�CI��DH�ChH����H��u1ɋCI�����H�I�$x1�H�L$(dH3%(�FH��0[]A\A]A^�D1�H�{hH�G�…�tV�PPHc��fD���y����{dH�?���CdH�П
Hc�H�>��fD�CI�H�,�t���f��P`Hc��0���D�Cd<t8�oCPH�S`H�l$)D$H�T$ <�8H������|$$���H��f�H�ChH���BH������H�1�H������I��XHcJH9������H�1�<0@�����@�CXH�sPH�L$�P�<������}���H�ChH����H�D$1�H��x@���Z�����H,sPH�T$�XS����t��8����H�sPH�T$�:S����t������H�L$�H�5+U
��N���������H�ChH���~���H�����H�D$1�H�8�[���@������H���x�����H�5��
�1���������H�1�H�������I��X1�HcRH9�@���t����4��_�ff.�@��H��H�WP�����ff.���H��H�WP1����ff.���AWAVAUATUSH��I��`�L�/I��$XH�����{��H��H�����I��H�CL�xM����M��tuI���H��t1�P������t I��$PH�x�'d�����i�A�EHEPH�PH�I��$���H�ExH��1�[]A\A]A^A_�@I�VH�5��
�1�詄��f�M��u�H�5�
�1�舄���I��$PI9��w���H�
S
H��tH�HI�VH�5ܪ
�1��H�����E�uLuP��H��I�FA�EH�UPL�tA��A�I�VH�UPA�EH�D�@H�UPA�EH�D�@A�EH�UPH�D�@A�EuI��$����A�}H}PH����������H�5ߩ
�1�蛃�����I��$PH�
3R
H��tH�HI�VH�5+�
�1��g����AWAVAUATUSH��(L�.H�dH�%(H�D$1�I��`�A�EE�uPI�H�H�CL�t$H�I��$XH����I��H��I;l$@���}A����A����I�D$ H�CA�EtjA�EHH�H��tnH�H�PA�EHH�PH�A�~w/I�x1�H�t$dH34%(�tH��([]A\A]A^A_�fDL���ps����fD�@A�EHH�H��u�H�@�1�H�5W�
�H�$�1���I�D$ H�$H�CA�E�G�����H�EH�x�����<$�H�T$��H�T$D�$H��H���oH�D$�R�@�PD���@L�MA�QH�L$H�CA�EuW�@A�EHH�H��tlH�H�PA�EHH�PH�H�|$�՗������A�E�����H�k�E�����P��u��xvH���;r��H�CH������DH�@��i���@��H��H�WP����ff.���H��H�WP1��~���ff.���USH��H��H�/dH�%(H�D$1�H�G8H��t$H�P0H��tH�Mh�p(H9����@8����u3H�SPH��1�����H�L$dH3%(��H��[]�f.��EP�HCPH�$����H�$H��`��oH��XH�$�R�@�P�@tO1��Eu�}H{PH�¹H��X���H���>���H�x1��^���H���D����8����:����DAVAUATUH��`�SL�&A�\$HH�CH�H��XH���6I��I��H;E@tc�x������H�E H�CA�D$tPA�D$IH�H��tTH�H�PA�D$IH�PH�I�Ex1�[]A\A]A^�f.�A�D$u�H�C@�@A�D$IH�H��u�H�@1�I�Ex[]A\A]A^�@1�H�5ߦ
��~��H�E H�CA�D$�Y�����H�PH�JH���&�����I�t$PH���H�CA�D$�s����P�������xvH���Zo��H�CH�����������@��H��H�WP��{���ff.���H��H�WP1��^���ff.���H�G8H�H��tpH�P0H��t
H�qhD�@(L9�vJ�@8����tOH�`�SH�QPH��H��XtO1��At>H��X�蝓��H�x1�[�DH���D�����u�H�WPH��1�����f��yH{P���f�H��B��t<ty<t�@�B��u�U1�H��H�5å
S�H���$}��H�]�{u�C��wB�{wH��H��[]���fDH����m��H�]H��H��[]�Τ��fDH�:t�Ð����C�P��H�E�oH�SH��H�PH�� ��vH���in��H�E�@H�E�@H�]�{�l����{���AWAVAUATUSH��8I��`�dH�%(H�D$(1�H�I��$X�H��hPI��I���@I��$XH�H�l$H����M��$XA�~tc1�H�5��
���{���}vH����l��I�D$ �oH�@H�CI�Ex1�H�L$(dH3%(��H��8[]A\A]A^A_�@��&��H�T$�o
H�D$�R�@�P�@I�VH�J8H����H��L����H��H����L� A�|$uSA�D$��vI���A�D$���H�E�Ao4$0I�T$H�PH�}����GH�E�@L�e�Ao$I�D$H��H�CH�� ����H�}A��H�|$����I�Ex���I�VH�BH����H�z ��1�H�t$L���ЀxH�D$���oH�@H��H�CH�� ��vH���&l�������H��H�D$ H�D$�o 'H�@H��H�GH�� ��v
��k��H�|$ �G�GA��H�D$H�T$ L��H�t$�@I�F�P H�|$ �E���H�|$�;�������fDH���k�����1�H�5w�
��y��I�D$ �o(+H�@H�C����@H�PH�R@H������H���H�|$�W��u)�vH�D$�^j��H�|$H�D$H�D$�
��H�D$H�D$�����k��H�}�'�������p���H��H�WPH���[���f���H��H�WPH�ǰ[�y���f�AWAVAUATUSH��8H��`�L�.dH�%(H�D$(1�H��X��I��H��XA�]I��H�1���L��XA�|$��I�D$I��PH�P8H����L��L���H��H����H�(�}uS�E��vK���H�T$�E���H�T$H��om(H�MH�HH�:��!�GH��@H�*�oMH�EH��H�CH�� ���HH�:A��I�x1�H�L$(dH3%(��H��8[]A\A]A^A_�f�I�D$H�HH���H�x �1�L��L��рxH�D$�*�oH�@H��H�CH�� ��vH���i�������H��H�D$ H�D$�oH�@H��H�GH�� ��v
��h��H�|$ �G�GA��H�D$H�T$ L��L��@I�D$�P H�|$ �7���H�|$�-�������1�H�5w�
��v��H�E �oH�@H�CI�x�����H��H�T$�Sh��H�T$���f�1�H�5'�
��]v��H�E �o #H�@H�C�s���DH�PH�R@H������H���H�|$�W��u)�vH�D$�g��H�|$H�D$H�D$���H�D$H�D$����g��H�T$H�:�����Q����ff.����H��H�WPH���[����f���H��H�WPH�ǰ[���f�AWAVAUATUSH��8I��`�L�6H�|$dH�%(H�D$(1�I��$X��H�*A�^PI��I��$XA�FH�H�\$H����M��$XA�t_1�H�5Ɲ
��t���{vH����e��A�Fu
I�D$ H�E�@I�Ex1�H�L$(dH3%(�eH��8[]A\A]A^A_ÿ�6��H�T$�oH�D$�R�@�P�@I�WL�B8M����H��L��A��H��H����L� A�|$uOA�D$��vE���A�D$����H��Ao$I�T$H�PH�;��\�GH��@L�#L��H�D$��A�FuH�H�E�@H�|$�=�������I�WH�BH����H�z ��1�H�t$L���ЀxH��H�D$ ���S�{�B�Cu	����H��H�D$��H�T$ H�t$L��H�UI�G�P A�FuH�E�@H�|$ 裉��H�|$虉���Z���@1�H�5�
��s��A�F�+���I�D$ H�E�@����H�@H�@@H���Y���H���H�|$ H�ËG��u�v
��c��H�|$ ���H�\$ �&���@�d��H�;����S��+��H�D$ �oH�SH��H�PH�� @��v
H���Bd��H�D$ �@H���@�������������H��H�WPH���[���f���H��H�WPH�ǰ[���f�AWAVAUATUSH��(H��`�L�.dH�%(H�D$1�H��X��I��H��XE�eH��L"�a�L��XA�~�_I�FI�uPH�t$H�P8H����L����H��H����H��{uR�C��vJ���H�T$�C����H�T$H��oH�KH�HH�:����GH��@H�H�T$H��A��A�E��H�Ex1�H�L$dH3%(��H��([]A\A]A^A_�fDI�FL�@M���H�x tx1�H�t$L��A�ЀxH��H�D$���S�{�B�Cu	����H��A��H�T$H�t$L��I�T$I�F�P A�Eu	I�D$�@H�|$踆���C���1�H�5�
��=p��A�E�"���H�C I�D$�@����H�T$H�I�D$�@���f.�H�@H�@@H���F���H���H�|$H�ËG��u�v
��`��H�|$���H�\$����@�a��H�T$H�:�l���fD�S��#��H�D$�oH�SH��H�PH�� @��v
H���:a��H�D$�@H���@�������������H��H�WPH���[����f���H��H�WPH�ǰ[���f�PXH�5�
�1�H����n���PXH�5��
�1�H����n�����ATI��USH�H�GP�ZPH��K��t?��uN�j�sH�RhH�;H�����H�E�{vH���s_��[I�$x1�]A\���jH��H��Ҋ��H�E���g������USH��H��H�?�Gd<t0<uM�oH�Wh�wXH�PHkP荸��H�E1�H�xH��[]�@�oH��PHkP�h���H�E1�H�xH��[]���f�PXH�5��
�1�H���m�����USH��H��X0H_P�{u<H�������oH���S�@�P�@����H�ExH��1�[]����D��ATUSL�'A�|$DuNH�������AoD$0H��A�D$D�C�C�C<vH����^��H�����H�Ex1�[]A\�����f.���AWAVAUATUSH��L�'H�WPdH�%(H�D$1�A�D$0H��P(�°��H����%��A�T$0H�KPH�$H��H�4�\���H�<$H�G�G�G���I��H����A�D$uH�$�@A�D$HCPH�PH��`�H�A�D$H�SPH�$H�L�UP�ETL�sH�JL�{89�}iH�E`���UPH�PH�U`L�8H�E`H�PH�U`L�0H�E`H�PH�U`L� H�$H�xH�CHL�k81�H�t$dH34%(��H��[]A\A]A^A_Ð�tH�}X1҉uTHc�H���w��HcMPH�EXH��H���n���A�D$uHA�D$HCPH�PH�A�D$H�SPH�$H�LH�`�H���t%H�H��xH��`���fDH���x�����fDA�T$PH�K@H��H��H)�H�QHH�����n���H�
Ua
�H�*
H�5Qa
HD�H�H1���j��f�UI��H��SH���D�р�-u	D�VH�nA�B�<	w
��L�L�A�9t"H��M��L��A�j����H��[]�@��vA��0t�L��H)�H���A��0H�]Mc�I9�tc�E�h�@��	w�@��0O��H��H�N�PI9�t��h�@��	v��@��-t3M���p���H��A�L��L��[�]�����-u�f�L��H���9���I����ff.���ATUH��SH��H�dH�%(H�D$1��CHGPI�Ā{EH�C0H�$���C@�{d���CdH�q�
Hc�H�>����CXH�sPH��E1�I�<$�P�o���H�Ex1�H�L$dH3%(��H��[]A\��H,sPH��I�<$A�E1���(���fDH��H�sP���H��H��E1ɺjI�<$A�H�5Z7
�)��XZ�s���f�H�5�(
�1��h��H����~���Q�������H�$�oH�$�R�@�P�@������H���Z���������f.���SH�H���xH{P�ي��H��[�`�����ATUH��SH��H�_PdH�%(H�D$1�H��PPD�`I�H�H�P0�xEH�$u/�@@H��tf�{�L�CH��
Hc�H�>�����&��H�$�oH�$�R�@�P�@��v�H���8Y��H��u�I�<$H��A�E1��1�����(f��CH�3H��E1�I�<$�P�h����{vH���X��H�Ex1�H�t$dH34%(��H��[]A\�fDH��H��E1ɺjI�<$A�H�5z5
�I��XZ�DH�3I�<$H��A�E1�������v���fD�H,3I�<$H��E1�A������L���@H�5�&
�1��]f��H���|���(�������ff.���SH�H���xH{P���H��[������ATUH��SH��H�dH�%(H�D$1�H�GP��S0D�cI�H�H�$�o��H�$�oH�$�R�@�P�@�{d���CdH��}
Hc�H�>����CXH�sPH��E1�I�<$�P���H�Ex1�H�L$dH3%(��H��[]A\��H,sPH��I�<$A�E1���x���fDH��H�sP���H��H��E1ɺjI�<$A�H�5�3
�y��XZ�s���f�H�5%
�1���d��H���5{���Q����K��ff.���SH�H���xH{P�i���H��[�����ATUH��SH��H�dH�%(H�D$1�H�GP�D�b�ZP�R0I�H�H�H�$����H�$�oH�$�R�@�P�@H����{���CH��|
Hc�H�>��CH�3H��E1�I�<$�P�8����{vH����T��H�Ex1�H�t$dH34%(��H��[]A\�fDH��H��E1ɺjI�<$A�H�5J2
���XZ�DH�3I�<$H��A�E1������v���fD�H,3I�<$H��E1�A������L���@H�5X#
�1��-c��H���y���(���I�<$H��A�E1��1��D�������z��f.���SH�H���xH{P虅��H��[�0���AWAVAUATUSH��HH�T$dH�%(H�D$81�H���

H�`�H��I��E��H�H9X@���CA�̄��(E�p�A���z�{u�S����<��H�������C<�E�N<��<��H�D$H����	�H��tR���&�H���M��oL�d$ )D$ H�@H��H�D$0H�� ��vL���S��L�����L�d$�D��H��I�RH���xH�L$E����A��H�@��	�H��x
HcsH9��W���I�EH�E�@H�H�E�E �'<��<��<�8<��E�p���tHE�w�A��tA����H�5U�
�1��a��H�`�H�� H�D$�@���qH����H�`�H�� H�EH�`�H�@ �@A���sH�58�
�1��`��H���W�efD�s���W���E�p�A���I�������f.�H���XQ��H�������C<�����H�H�CH�H(H����L�l$E���YL��D��H���I��H�D$ H���E�xuGA�G���vA��u8A�M����A�}t%H���M|��H�5Ή
�H�P1��_��fDH�|$ H�|$H����H��P����E��taH�|$��u���UfDE���n���H�`�H��@H�D$H����H�D$H�EH��@A����E����A����H�D$8dH3%(�vH��H[]A\A]A^A_�fDA�@���wg�{va�{u[I�]�C��vO����C�_���I�E�o+(H�SH��H�PH�� ��vH���xP��I�E�@I�E�@I�]�L�l$M���RA�MH�����H�5�v
��Hc�H�>��DM�eA�|$�����A�D$����������A�D$踽��I�E�Ao$I�T$H��H�PH�� ��vH����O��I�E�@I�E�@�<���fD1�H�5�
���]��H�D$����H�������H��@H�H�`�H�@@�@E���e����H�EH��tiH�H�EH�EH�E�J���H�;�>���E�p�A���4������1�H�5'�
��=]��I�EH�E�@H�D$H�H�E�E H�E����H�}H�H�UH�UH�E�@�e���@H����H�`�H�� H�EH�`�H�@ �@���@��F���H�T$�o
H�D$�R�@�P�@A�EH�SI��H�J(�e���fD����S���I�E�oH�SH��H�PH�� ��vH���N��I�E�@I�E�@I�]�C�����I�UH�U�BH�H�E�U ���������f�I�UH�55�
�1�H����[��A�MM�u��u
L�4$�L,4$L�l$L��H��L���K(������*H�D$H�D$H���f���H�D$H�EH��@�>���f.�A�L�%*
L�l$D��L��H��L���i�����u�A��w�H��s
D��Hc�H�>��fDE�uM�eA���f.�A�������R�����@�Tq���`����1�H�5�
���Z��D���H��H��H�`�H�H@H�� ��IHD�����L��H�58
�1��Z��H�`�H�� ���L��H�5
�1��pZ��H�`�M��D��L��H�L$ H��H��H�D$ H�`��@��H�D$���DH�`�1�H�T$ A�L�D$�H��H�D$ H�`��@H�;�6
������U���1�H�5�2
���Y��H�`�H��@H�D$H�D$ �h�$���@H�`�H�x@H�|$���A���m���H�5�
�1��Y�����fDA������H�+r
D��Hc�H�>��L��H�5X
�1��DY��H�`�M��L��H��H�T$ A��H��H�D$ H�`��@�K���d���L��H�5
�1���X���U�����q���H�D$ �Aoe I�UH��H�PH�� ��v
H���J��H�D$ �@I���@�������H�5��
��X��H�5:�
��xX��H�5p|
�1��eX��D��H�x1��D��AUATUSH��I��`�H�/dH�%(H�D$1�I��X��H��H�UP1��E���I��X�m��H�SP�EH�H��B���Bt}�zH�$t	���.�EH�SPI�M H�L�"A�D$H9�t
A�|$u��we��H�<$A�D$tH����m��H�x1�H�t$dH34%(��H��[]A\A]Ð�B�BH�$���}H{P�5���@���A�D$H�SP�EL�,諶��I�EH�SP�E�Ao$H�H�I�T$H�P�EH�SPH�H�8�v�H���EH�SPH�H�8�GH�SP�EH�H��@�EH�SPH�L� A�D$������B�����������D��H�H�H��t3H��itH��yt�yt'�fD�A�AH�
ÐH�N��f.��A�ff.�AWAVAUI��ATLc�UH��SH��8H�I�udH�%(H�D$(1�I��{0L���d���H�D$H��t6�{PI��1��I���I�?�W��������A��u
�����E1�CI�U�DH�ChH��t_H��tAH�<$tL����k��H�Ex1�H�L$(dH3%(�AH��8[]A\A]A^A_��1ɋCI�UE����H���CI�UL�$�E���o����xH�?���PH�
�m
Hc�H�>��D1�H�{hH�OH����E��t�QPLc��*�����Q`Lc�����D�P��t?�oL�d$)D$H�@H�D$ ��vL���SF��L�������|$$����L��DH�ShH���"H�������H�H�������I�HcJH9������H�E1�<0A�������pH�L$�VH�0�Mb�����e���H�ChH����H���P���H�D$E1�H�8�����A���5���f��H,0H�T$�a ����t������H�0H�T$�C ����t����f.�H�L$�H�5+"
�������m�������DH�5�{
�1��US�����H�D$E1�H��xA�����H�H�������I�E1�HcRH9�A���y��������H��H�WP�����ff.���H��H�WP1����ff.�AVAUI��ATI��UHc�SH��@H�I�udH�%(H�D$81�L�t$�{0L������H�D$H����H�8�W���JH�sP���u���������Sd��tR�oCPH�K`H�l$ )D$ H�L$0��vH��H�D$��C��H�D$H��H�D$�^���|$4H�D$ubH���H�ShH����H��uDH�1�H��x<H�HcHH9�}0H�1�<0@���!�H�5z
�1��Q��D1�CI�U�DH�ChH����H��t>H�|$tL����g��I�$x1�H�L$8dH3%(�}H��@[]A\A]A^�fD1ɋCI�U����H��@��u��{dH�?�_����CdH�j
Hc�H�>��f��CI�UH�,�r���1�H�{hH�G�…�t�PPHc��5����P`Hc��'���DH�sPH�T$�R�����
���H�ChH����H����H�D$1�H�8蓰����@�������H�L$�H�5
�����t������CXH�sPH�L$�P�|^����t�����H,sPH�T$������n����s���H�D$1�H��x@���[���H�1�H���M���H�1�Hc@H9�@���8����Q����H��H�WP����ff.���H��H�WP1�����ff.�AWAVLc�AUI��ATUH��SH��XH�H�udH�%(H�D$H1�L�|$�{0L������H�D$ H���`H�MD�cPH��I�H��L�d$(H�:�w@����@����A��E�D$u
@���)E1�A�����S�DH�ChH����H��u1ɋCH�UE����H�H�|$tL���
e��I�Ex1�H�L$HdH3%(�&H��X[]A\A]A^A_�E�D$E���x���H�?A����H�}g
Jc�H�>��A�D$I�4$H�L$ �P�z\����u&H�ChH����H�D$ E1�H��xA��DA�|$vL���?��H�E������CH�UL�4�#���H�EE1����@A����Ao$L�t$0)L$0I�D$H�D$@A����L��H�T$����|$DL�t$(E�D$H�T$�bE1�A���e���H�MH���u�����H�T$���H�L$(H�T$E���oH�D$(�I�@�H�@H�:t1H�O1�H�{hH����QPLc�H�|$(�`c��H�E�����H�O1�H�{hH����Q`Lc����L��H�T$�>��H�T$����f�I�4$H�T$ �B�����d������DH�L$ �H�5+
�������b���H�ChH���<���H���J���H�D$ E1�H�8�Z�����A���/�����I,4$H�T$ �������������H�ChH��t}H�������I�E1�H���~���H�HcJH9��n���H�E1��<0A���[���f�H�51t
�1��K������H�ChH��tE1�H���0���M���M��I�E1�H������H�E1�HcRH9�A������������H��H�WP����ff.���H��H�WP1����ff.�AWI��AVI��AUATI��USH��HL�I�1dH�%(H�D$81�L�l$A�x0L���b�I�A�hPI��A�@H�H�l$ H�M���L���X��M�?A�t~1�H�5es
��J���}vH���;��H�`�H�@ �oH�@H�|$H�CtL����`��I�$x1�H�L$8dH3%(��H��H[]A\A]A^A_�f��趩��H�T$ �o
H�D$ �R�@�P�@I�WH�J8H����H��L����H��H����L�8A�uOA�G��vF���A�G�J���H�E�Ao70I�WH�PH�}����GH�E�@L�}�AoI�GH��H�CH�� ���H�}A��H�|$ �_��H�|$�������I�WH�BH����H�z ��1�H�t$ L���ЀxH�D$(���oH�@H��H�CH�� ��vH���:����l���H��H�D$0H�D$(�o 'H�@H��H�GH�� ��v
�:��H�|$0�G�GA��H�D$(H�T$0L��H�t$ �@I�G�P H�|$0��^��H�|$(��^������fDH���(:�����1�H�5q
��=H��H�`�H�@ �o(+H�@H�C���fDH�PH�R@H�������H���H�|$(�W��u)�vH�D$��8��H�|$(H�D$H�D$蒧��H�D$H�D$(����9��H�}�����-��H�5Fr
�1��G��f.���H��H�WPH���[�Y���f���H��H�WPH�ǰ[�9���f�AWI��AVI��AUATI��USH��8L�>I�0dH�%(H�D$(1�L�l$A�0L����A�_IH����H��H�����H�m�}��H�EI��PH�P8H����L��H���H��H����H�(�}uS�E��vK���H�T$�E�*���H�T$H��om(H�MH�HH�:��E�GH��@H�*�oMH�EH��H�CH�� ���dH�:A��H�|$tL���\��I�$x1�H�L$(dH3%(��H��8[]A\A]A^A_�@H�EH�HH���/H�x �$1�L��H��рxH�D$�C�oH�@H��H�CH�� ��vH���x7����.���H��H�D$ H�D$�oH�@H��H�GH�� ��v
�A7��H�|$ �G�GA��H�D$H�T$ L��H��@H�E�P H�|$ �[��H�|$�[�����f.�1�H�5�m
��
E��H�`�H�@ �oH�@H�|$H�C��������f�H��H�T$�6��H�T$���f�1�H�5wm
��D��H�`�H�@ �o #H�@H�C�P���fDH�PH�R@H�������H���H�|$�W��u)�vH�D$�V5��H�|$H�D$H�D$����H�D$H�D$�h����5��H�T$H�:���虿�H�5�n
�1��D��fD��H��H�WPH���[���f���H��H�WPH�ǰ[�y���f�AWI��AVAUI��ATUSH��8H�I�0H�|$L�t$�{0L��dH�%(H�D$(1����kP�SM� L�I�H�l$H���I��H�����M�?A�t1�H�5l
��<C���}vH���.4���CuH�`�H�@ I�D$�@H�|$tL���dY��I�Ex1�H�L$(dH3%(��H��8[]A\A]A^A_�f.���V���H�T$�oH�D$�R�@�P�@I�WL�B8M����H��L��A��H��H����L�8A�uOA�G��vF���A�G���H�E�AoI�WH�PH�}��o�GH�E�@L�}L��H�D$��Cu
H�EI�D$�@H�|$�]X������I�WH�BH����H�z ��1�H�t$L���ЀxH��H�D$ ���U�}�B�Eu	����H��H�D$��H�T$ H�t$L��I�T$I�G�P �Cu	I�D$�@H�|$ ��W��H�|$�W���?���1�H�5j
��=A���C�,���H�`�H�@ I�D$�@����f.�H�@H�@@H���I���H���H�|$ H�ŋG��u�v
��1��H�|$ 薠��H�l$ ����@�2��H�}���f.��U��3���H�D$ �oUH�UH��H�PH�� @��v
H���I2��H�D$ �@H���@�����ܻ�H�5�j
�1��I@��f���H��H�WPH���[�i���f���H��H�WPH�ǰ[�I���f�AWI��I��AVAUATI��USH��8H�I�0dH�%(H�D$(1�L�t$�{0L���C�D�kM(H����H��H���H��H�m�}�bH�EH�sPH�4$H�P8H����H���H��H����H�(�}uQ�E��vI���H�$�E�۞��H�$H��oEH�MH�HH�:����GH��@H�*H�$H��A��C�f�H�|$tL���PU��I�$x1�H�L$(dH3%(��H��8[]A\A]A^A_�fDH�EL�@M��t{H�x tt1�H�4$H��A�ЀxH��H�D$ ���r�z�F�Bu	����H��A��H�T$ H�4$H��I�UH�E�P �CuI�E�@H�|$ �T���<���@1�H�5�f
��%>���C����H�`�H�@ I�E�@����H�$H�I�E�@���@H�@H�@@H���I���H���H�|$ H�‹G��u)�vH�T$�.��H�|$ H�T$H�T$�_���H�T$H�T$ �����[/��H�$H�:�X�����r�H�T$���H�T$H�D$ �o
H�RH��H�PH�� @��v
H���/��H�D$ �@H���@���蛸�H�5�g
�1��=�����H��H�WPH���[���f���H��H�WPH�ǰ[����f���AUATUSH��(I��`�H�/dH�%(H�D$1�I��$X���EPH��HGP�H�D$����H�T$1��oH�D$�R�@�P�@�E��H�¹I��$X�,R��H�|$�R��H�SP�EH�H��B���B��H�D$�zt	���-�EH�SPI�L$ H�L�*A�EH9�tA�}u��wm��H�|$A�Et
H�|$�R��H�x1�H�t$dH34%(��H��([]A\A]���B�BH�T$�fD�}H{P����@���A�EH�SP�EL�$�̚��I�$H�SP�E�AoMH�H�I�UH�P�EH�SPH�H�8�v��,���EH�SPH�H�8�GH�SP�EH�H��@�EH�SPH�L�(A�E���f��B���������-��ff.�f���AVAUATUSH��H�� H�/H�wPdH�%(H�D$1�L�d$�}0L�����H�UP1��Eu�}H{P�H���FP��H�|$H��t��BL���P��H�SP�EH�H��B���B���B�BH�T$�EH�SPH�`�H�H�� L�"A�D$H9�tA�|$tB��H�|$A�D$t
H�|$�P��H�x1�H�t$dH34%(��H�� []A\A]A^Ð��v����A�D$H�SP�EL�,���I�EH�SP�E�Ao$H�H�I�T$H�P�EH�SPH�H�8�v�+���EH�SPH�H�8�GH�SP�EH�H��@�EH�SPH�L� A�D$� ���f�����E������EHCPH�H���H�H�P�EHCPH�PH��EH�SPH�L�(A�}u	A�E��wVH�|$�`����S���DH�D$�z�p������g����B�^����s=����u��Eu��g������A�EH�SP�EL�4贗��I�H�SP�E�AoMH�H�I�UH�P�EH�SPH�H�8�v�)���EH�SPH�H�8�G�EH�SPH�H��@�'���DH�@����&��fD��AVAUATUSH��H�� H�/H�wPdH�%(H�D$1�L�l$�}0L�����H�UP1��Eu�}H{PA�1�H���s��H�|$H��t���L���M���EH�SPH�H����L� A�D$��A�D$��H�D$A�|$t	�����EH�SPH�`�H�H�� L�"A�D$H9�tA�|$u	������H�|$A�D$t
H�|$�L��H�x1�H�t$dH34%(�3H�� []A\A]A^�fDA�D$A�D$L�d$�l�������E�����EHCPH�H����H�H�P�EHCPH�PH��EH�SPH�L� A�|$uA�D$����H�|$�����������A�D$H�SP�EL�,�C���I�EH�SP�E�Ao$H�H�I�T$H�P�EH�SPH�H�8�v�F'���EH�SPH�H�8�GH�SP�EH�H��@�EH�SPH�L� A�D$����A�D$�B���D�;:������H�|$������������A�D$H�SP�EL�4�s���I�H�SP�E�Ao$H�H�I�T$H�P�EH�SPH�H�8�v�w&���EH�SPH�H�8�G�EH�SPH�H��@�i���H�@�_����E�L����%���H�5lX
��H4�����AVAUATUSH��H�� H�/H�wPdH�%(H�D$1�L�l$�}0L�����H�SPD�eP1�I�Eu�}H�A��L��H�����A�|$vL����$��H�|$H��t���L���J���EH�SPH�H����L� A�D$��A�D$��H�D$A�|$t	�����EH�SPH�`�H�H�� L�"A�D$H9�tA�|$u	������H�|$A�D$t
H�|$�yI��H�x1�H�t$dH34%(�7H�� []A\A]A^�f�A�D$A�D$L�d$�p�������E�	����EHCPH�H����H�H�P�EHCPH�PH��EH�SPH�L� A�|$uA�D$����H�|$�����������A�D$H�SP�EL�,�ˑ��I�EH�SP�E�Ao$H�H�I�T$H�P�EH�SPH�H�8�v��#���EH�SPH�H�8�GH�SP�EH�H��@�EH�SPH�L� A�D$����A�D$�F���D��6������H�|$�������f����A�D$H�SP�EL�4��I�H�SP�E�Ao$H�H�I�T$H�P�EH�SPH�H�8�v�"���EH�SPH�H�8�G�EH�SPH�H��@�a���H�@�W����E�D�������H�5�T
���0���C����AVAUATUSH��H�� H�/H�wPdH�%(H�D$1�I��}0L������I�ŋEPHCPH�D$���H�T$1��oH�D$�R�@�P�@�Eu�}H{P�H��L���-F��H�|$�F��H�<$H��t��PL���hF��H�SP�EH�H��B���B���B�BH�T$�EH�SPH�`�H�H�� L�"A�D$H9�tA�|$tH��H�|$A�D$t
H�|$�E��H�x1�H�t$dH34%(�H�� []A\A]A^����v����A�D$H�SP�EL�,�֎��I�EH�SP�E�Ao$H�H�I�T$H�P�EH�SPH�H�8�v�� ���EH�SPH�H�8�GH�SP�EH�H��@�EH�SPH�L� A�D$����f.�����E������EHCPH�H���H�H�P�EHCPH�PH��EH�SPH�L�(A�}u	A�E��wVH�<$�S����F���fDH�D$�z�b������Y����B�P����C3����u��Eu��g������A�EH�SP�EL�4脍��I�H�SP�E�AoUH�H�I�UH�P�EH�SPH�H�8�v����EH�SPH�H�8�G�EH�SPH�H��@�'���DH�@�����fDAWI��AVAUI��ATM��USHc�H��8dH�%(H�D$(1��G<�j�oH�WH�l$)D$H�T$ <��H���c����D$�D$����=�D$�h��Kf�HcSH��H��H)�I�H���Ct<1tk<Fu4�{0L�v���Ic^�������H���EI]I�ރ��Ic^���H�t$(dH34%(L����H��8[]A\A]A^A_�D�C(��t���u��{0L�H�?t?H�t�H���B���Ch�w����C0I�|�B���e���H���������H�_�k�D����{vH������H�`�H;X �%���H��蛋������fD��D$����T$H��H�
_�	�H�5�V
��HE�1��+�����@��ATUSH�H��L�GPH�W@�hP�p0H�JpH��HL�H�����}I��vH���P��H��`�H���tH�H��xH�[1�]A\�fDIcT$H�K@H��H��H)�H�QHH��H�[1�]A\���SH��H�?H�S@L�CP�w0H��PH�JpH��H�i���H��`�H���tH�H��xH�1�[�f.�HcPH�K@H��H��H)�H�QHH��H�1�[�ff.�@��ATUSH�H��L�GPH�W@�hP�p0H�JpH��HL�H������}I��vH���@��H��`�H���tH�H��xH�[1�]A\�fDIcT$H�K@H��H��H)�H�QHH��H�[1�]A\���SH��H�?H�S@L�CP�w0H��PH�JpH��H�Y���H��`�H���tH�H��xH�1�[�f.�HcPH�K@H��H��H)�H�QHH��H�1�[�ff.�@��ATUH��SH�L�gP�C(��tN��u3�{0L�H�?teH�t H���?���Cht8�C0I�|�?��H�]H��x1�H�][]A\���{0L�v����H�]1�H��xH�][]A\�@H�_�ku߀{vH������H�`�H;X t�H���s���H�]�ff.�f����'������H���������AWAVI��AUATUSH��HH��`�dH�%(H�D$81�H��0L���L+hHI��L��H��(H�z�E��t0L�b�L��I���|>��H��(��I�<$u�H��0������AH���D;*�1��E1�1�H���
H��D9<w!D9|vI�v@A�H����lH9�u�I�~8M�nHtuf.��CPH�K`��H�Q��CPH�S`I�vHH��t"H�A�H��t
�@u�nL���=��H�S`�CPH�J�H�r��H�K`H�J�H�s`H�R�CPI�NHI�V8H��u�I�N@D��E1��yx��tk�L��H��HAp���xOD9�wTHc@D9�vA��u9�w9H��H��H)�H��H�QHH���Bt<1��<Fu�z0I~P���I��D9ixw��� ��uI�FxH��t
H�8�II�FxE������H�QHH��H��H)�H��I�1�H�|$8dH3<%(�H��H[]A\A]A^A_�@�z0Lǀ�x����t$I�����I�N@�t$D9ix������^���@�B(M�FP��t����;����B0L�H�8�3H�xH�T$L�D$����H�x�t$�<��H�T$�t$L�D$�Bh�JI�N@I��D9ix�������f.��yh���A�F`��lI�FpHǃxH���������D$4L�l$ H�L��H�D$ �&���H��A�A�j�L$8�H�=^
H�T$0��g��XZ�|$4vL������I�N@I�FxE���\����O����I�~P�����G���f.�E1�����H�P�j������zvH�׉t$H�T$����t$H�T$H;S ����H�׉t$�$���I�N@�t$����B0�t$I�|�:��I�N@�t$���负�@AT��UH�,>SH�� H�]dH�%(H�D$1�H��tY�ku3�C�CH�H�L$dH3%(H����H�� []A\�DH��{t΃{u��C����H�T$L�e�-���H�T$H�EH��H�H�E�xu�U ��x;P|h1�H�=�	�څ���CH�A�l$uA�|$w0H�`�L;` tL�������Cf�C�1���fDL�������fDI�$H�|$���D$�e����CH���d��@AWAVAULc�ATI��UH��SH��XH�H�udH�%(H�D$H1�L�t$�{0L���"��H�D$ H��H�D$���{PL�|$(H�uL���G���H�L$H�9�W��������A��u	���E1�H�|$(tL���8���CH�U�DH�ChH��taH��u1ɋCH�UE����H�H�|$tL���X8��I�$x1�H�t$HdH34%(�GH��X[]A\A]A^A_�fDE1���CH�UL�,�E���]����xH�?���PH�
�:
Hc�H�>��D1�H�{hH�OH����E��t�QPLc�������Q`Lc�����D�P��tO�oL�l$0)D$0H�@H�D$@��vL��H�L$����H�L$L��H�L$�T����|$DH�L$�����L��H�ShH���*H�������H�H�������H�HcJH9��r���H�E1�<0A���b���f��pH�L$ �VH�0��.�����>���H�ChH����H���&���H�D$ E1�H�8�m�����A������f��H,0H�T$ �����t����H�0H�T$ �����t�����f.�H�L$ �H�5��	�Z����m������DH�5IH
�1��������H�D$ E1�H��xA���q���H�H���b���H�E1�HcRH9�A���O��������H��H�WP����ff.���H��H�WP1��~���ff.��?w{D�H��8
Nc�I�>A��fDH�����v���H�H�G�@�GH�H��H��H�>������H�1��fD1��ff.�f�AWI��AVI��H��1�AUATUL��SL��H��hH�4$L�d$0L��L�l$8L��dH�%(H�D$X1��(���1�L��H��H��H�D$@����H�D$HA�H�H�D$M���H�`�H�@@I9��L�����M�A�x���$����H�`�H�L$H���t
�y�X�E���d�����A����$���A�I�@H�@0H���|�D$0��H�t$@H��L���H�$�uH�`�H����JH�D$0���H��tL���3��H�|$H�3��H�D$8H��t���H�D$XdH3%(��H��h[]A\A]A^A_ÐI�@H�x ������H�5H
1����H�|$0H��t@���AH��v��
��H�$���H�|$8H���{���@��tiH���g����
���]����H�|$0H��t@����H��v�}
��H�$�u�H�`�H�\$H�@ H�C�@�f.�L���2�����H�`�H�T$H�@ H�B�@�V����L�D$�{��L�D$H�L$HH��H�D$@�oH�t$@�@�F�F�FI�@H�@0�4���@L���(2���F����D$0�
H�t$@I�@H��L��P ����fDH�|$@��1���)���f��H�L$L�D$�z��H�L$L�D$H�D$H�o	H�QH��H�P�@�@��a���fDA�H�D$HH�DA�H�H�SH��@���D�H�L$L�D$�z��H�L$L�D$H�D$H�oH�QH��H�PH�� �@���@��H�������fDL���1������L�D$H�L$�z��H�L$H�t$PH�D$H�o!H�� H�QH�PH�T$,�@�@�;��H�L$L�D$A��H�D$HH�@H�x�
H�T$P1��H�5�

D�L$L�D$H�L$���H�L$H�l$HH�AH��PD�L$L�D$�EE��H�Ut|H�L$H�A�����@H�����H�L$HL�D$�A�������L�D$�)y��H�L$HL�D$H��H�D$@�oH�t$@�@�F�F�F���@H�|$P�y��L�D$�p����ǔ�H�58B
�1��4��H�5,=
��#��H�T$PH�5�(
�1����ff.���USH��H��`�H�H��XtfH��H�HHH�pH��h�L�KPH�xL���H��X��H���XH�ZtH��xH�H��1�[]�@H��xH��xH�H��1�[]��ǂ������g�������W�������G����AWAVAUATUSH��HH��`�H�H�|$dH�%(H�D$81�H��X�D�cPI��H�2L�|$ 1�I��H���L��I�L�d$(���H��XH�D$�CIEH�I���X���H��X�y��1�H�5�B
����A�|$w|H�|$ H��t@���hH�����CtD@I�H���H�Bx��I�1�H�\$8dH3%(�+H��H[]A\A]A^A_�H�E I�E�@�f�L�����H�|$ H���x������H�L$�qv��H�T$(H�L$�oH�D$(�R�@�P�@H�ShH�����H�D$0H����:H����EH�AH�@(H���4H��H�L$1�H�t$(��H�L$I��H�D$0H���
�x�#A�T$A�|$�BA�D$u	����H�L$H�T$L��L��H�D$��H�ChH�L$H=��IH=�uH�AH�T$0H��H�t$(�P0�Cu
H�D$0I�E�@H�|$0� ,��H�|$(�,��H�|$ H���H���@����H���0�������&���fDH����)���@�k���C�����<���@H�QH�BH�������1�H�5G@
��-���C�c���H�E I�E�@�R���f�L���h+���C���������f�H�QL�B8M����H��H��A��H�L$H��I����L� A�|$ubA�D$��vX���L�D$A�D$�)t��L�D$I��Ao$I�T$H�PI�8�v
�A��L�D$I�8�GI��@M� L�D$H�T$L��L��H�D$��C�w���L�D$I�I�E�@�b���f�H�@H�@@H������L��H�L$��H�|$0H�L$I�ċG��u$�v����H�|$0H�L$H�L$�s��H�L$L�d$0���L���*���S���H�AH�T$0H��H�t$(�P ����A�T$�H�L$�s��H�L$H�D$0�Ao$I�T$H��H�PH�� @��vH�����H�D$0H�L$�@I���@�	���fDH�D$0����f.�H�Sh�_���肎��M}��ff.�f�H�H�@hH=�tAH��H=�uCH��`�H��XH��t+�@H��X�xu2H�VPH���d���@H�VP�W�����|��H�5�=
�1�����z���f.���H��H���Z�m���ff.�f���H��H��`�Z�M���ff.�f���H��H���Z�-���ff.�f���H��H��p�Z�
���ff.�f���H��H�ǰ�Z���ff.�f���H��H���Z����ff.�f���H��H����Z���ff.�f���H��H�Ǡ�Z���ff.�f���H��H����Z�m���ff.�f���H��H��0�Z�M���ff.�f���H��H���Z�-���ff.�f�AWAVAUATI��UH��SH��HH�H�uH�|$L�t$ L�|$(�{0L��dH�%(H�D$81��K����{P1�I���>h��H�u1�L��H���H�$�U�H�D$�CHEM���AH�L��H������I�M�y� H�ChH=��H�D$0H=���H=���H�AH�@(H����H��H�L$1�H�4$��H�L$I��H�D$0H�����x��A�UA�}�BA�Eu	���H�L$H�T$L��L��H�D$��H�ChH�L$H=���H=�uH�AH�T$0H��H�4$�P0�Cu
H�D$0H�E�@H�|$0��%��H��`�H�|$(H��tl@���\H��vX�U���Q�H�5T:
1��=��H�|$(H��t@���IH�����CH��`�uH�C H�E�@H�|$ tL���R%��I�$H���H�Bxt0I�$1�H�t$8dH34%(��H��H[]A\A]A^A_��H������H�AH�@H���a����1�H�5�9
��u���CH��`����H�C H�E�@����H�AH�P8H����H��H�L$H�4$��H�L$H��I����L�(A�}u\A�E��vS���L�$A�E�m��L�$I��AoMI�UH�PI�8�v���L�$I�8�GI��@M�(L�$H�T$L��L��H�D$��CL�$����I�H��`�H�E�@������s����S���fDH�@H�@@H���Y���L��H�L$��H�|$0H�L$I�ŋG��u$�v�.���H�|$0H�L$H�L$��l��H�L$L�l$0�
���L���`#�����H�AH�T$0H��H�4$�P �D���L���8#�����A�U�H�L$�Ml��H�L$H�D$0�AoEI�UH��H�PH�� @��w%�@I���@���f�H�D$0����f�H���8���H�D$0H�L$��@H�Ch���H�5�1
�1��<��跇��AWAVAUATI��UH��SH��HH�H�uH�|$L�t$ L�|$(�{0L��dH�%(H�D$81��k���H�u1�L��H���I����H�D$�CHEM���?H�L��H���L���I�M�y�H�ChH=��H�D$0H=���H=���H�AH�@(H����H��H�L$1�1���H�L$I��H�D$0H�����x��A�UA�}�BA�Eu	���H�L$H�T$L��L��H�D$��H�ChH�L$H=���H=�uH�AH�T$01�H��P0�Cu
H�D$0H�E�@H�|$0�!��H��`�H�|$(H��tn@���^H��vZ����SD�H�5�5
1��m
��H�|$(H��t@���IH�����CH��`�uH�C H�E�@H�|$ tL��� ��I�$H���H�Bxt0I�$1�H�t$8dH34%(��H��H[]A\A]A^A_��H������H�AH�@H���c����1�H�5�4
��	���CH��`����H�C H�E�@����H�AH�P8H����1�H��H�L$��H�L$H��I����L�(A�}u_A�E��vV���L�D$A�E�h��L�D$I��AoMI�UH�PI�8�v
����L�D$I�8�GI��@M�(L�D$H�T$L��L��H�D$��CL�D$����I�H��`�H�E�@����@����S���fDH�@H�@@H���Y���L��H�L$��H�|$0H�L$I�ŋG��u$�v�^���H�|$0H�L$H�L$�
h��H�L$L�l$0�
���L��������H�AH�T$01�H��P �D���f�L���h�����A�U�H�L$�}g��H�L$H�D$0�AoEI�UH��H�PH�� @��w%�@I���@���f�H�D$0����f�H���h���H�D$0H�L$��@H�Ch��H�5�,
�1��l������AWAVAUI��ATI��USH��XH�I�4$H�|$L�|$(�{0L��dH�%(H�D$H1�蠰��I�4$�kP1�I��H�D$0H���H�H��H�D$H�l$8��H�$�CI$M����H�L��I���m���M�6A�~��1�H�5�1
�����}��H�|$0H��t@���nH�����CH��`�tSH�|$(tL�����I�UH���H�Bx��I�E1�H�L$HdH3%(��H��X[]A\A]A^A_ÐH�C I�D$�@롐H������H�|$0H���b����u���D��ve��H�T$8�oH�D$8�R�@�P�@H�ShH�����H�D$@H����,H����7I�FH�@(H���&1�H�t$8L����H��H�D$@H���	�x�'�U�}�B�Eu	����H�$H��H��H�D$��H�ChH=��NH=�uI�FH�T$@L��H�t$8�P0�CuH�D$@I�D$�@H�|$@�D��H��`�H�|$8�3��H�|$0H���U���@����H���=�������3���H����J���@����CH��`��Z�������DI�VH�BH������1�H�5_/
��E���CH��`��W���H�C I�D$�@�E���f�H�|$�v���CH��`�������I�VH�J8H����H��L����H��H����H�(�}u\�E��vT���H�L$�E�Ec��H�L$H��oUH�UH�PH�9�v
�_���H�L$H�9�GH��@H�)H�L$H�$H��H��H�D$��CH�L$�m���H�H��`�I�D$�@�\���f�H�@H�@@H������H���H�|$@H�ŋG��u�v
��H�|$@�b��H�l$@���@H�|$�>���i���f�I�FH�T$@L��H�t$8�P �����U��3b��H�D$@�oMH�UH��H�PH�� ��v
H���J�H�D$@�@H���@�#���f�H�D$@���f�H�Sh�����}�H�5�'
�1��/��ff.�@AWAVAUATI��UH��SH��HH�H�uH�|$L�t$ L�|$(�{0L��dH�%(H�D$81��[���H�u1�L��H���I���s�H�D$�CHEM���'H�L��H���<���M�mA�}�H�CPH�D$H�ChH=���H�D$0H=���H=���I�EH�@(H����1�H�sPL���H��H�D$0H���v�x���Q�y�B�Au	���H�T$H��H��H�D$��H�ChH=���H=�uI�EH�T$0H�sPL��P0�Cu
H�D$0H�E�@H�|$0�
��H��`�H�|$(H��to@���OH��v[���TfD�H�5|+
1��e��H�|$(H��t@���AH�����CH��`�uH�C H�E�@H�|$ tL���z��I�$H���H�Bxt0I�$1�H�t$8dH34%(�zH��H[]A\A]A^A_��H������I�EH�@H���u����1�H�5�*
�����CH��`����H�C H�E�@����I�EH�P8H����H�sPL���H��H����L�(A�}u_A�E��vV���H�L$A�E�^��H�L$H��AoMI�UH�PH�9�v
���H�L$H�9�GH��@L�)H�L$H�T$L��L��H�D$��CH�L$����H�H��`�H�E�@�	���@���[���fDH�@H�@@H���k���H���H�|$0H���G��u)�vH�L$�c�H�|$0H�L$H�L$�^��H�L$H�L$0�$���L������	���I�EH�T$0H�sPL��P �Q����L���h������Q�H�L$�~]��H�L$H�D$0�oH�QH��H�PH�� ��w)�@H���@���fDH�D$0����f�H���h�H�D$0�ȐH�Ch����H�5�"
�1��t�����x�ff.�@AWAVAUA��ATI��UH��SH��(H�H�udH�%(H�D$1�L�t$�{PL�������KHMD��H�D$H�AI��H��{0�T��H��`�H;B@���x��A����H�B I�G�Ctn�CHEH�H��trH�H�P�CHEH�PH�H�|$tL�����I�$x1�H�t$dH34%(��H��([]A\A]A^A_�Cu�I�GfD�@�CHEH�H��u�H�@�1�H�5O$
��-���H��`�H�B I�G�C�F����f�H�pL�FM������D��H�t$H��A��I�G�Ct��P�������xvH�����I�GH���[�������8w����H��H�WP��;���ff.���H��H�WP1�����ff.�AWI��AVAUATUH��SH��8H�I�7�|$L�l$ L�d$�{PL��dH�%(H�D$(1�����KIL��H�D$H�AI��H��{0I�7����H��`�H;B@���x���|$��H�B I�F�C���CIH�H����H�H�P�CIH�PH�H�|$ tL�����H�|$tL������H�Ex1�H�t$(dH34%(��H��8[]A\A]A^A_�f��Cu�I�FfD�@�CIH�H���z���H�@�1�H�5?"
�����H��`�H�B I�F�C�2����f�H�pL�NM�������T$H�t$H��A��I�F�C������P��������xvH����I�FH���mY������#u���H��H�WP�����ff.���H��H�WP1����ff.�AWAVI��AUATI��USH��8L�>H��|$A�OPdH�%(H�D$(1�A�GL�,L�l$ H�H�CH�H�D$A�0I�6H��H�D$����H��`�H��H;B@���x���|$��H�B H�CA�Gt~A�GIH�H����H�H�PA�GIH�PH�A�}w?H�|$t
H�|$����I�$x1�H�L$(dH3%(�\H��8[]A\A]A^A_�L���P��fD�@A�GIH�H���~���H�@��1�H�5/ 
��
���H��`�H�B H�CA�G�-���멐H�@H�x������gW��H�T$ H��H���oH�D$ �R�@�P�T$�@H�M�QH�CA�GuX�@A�GIH�H��tmH�H�PA�GIH�PH�H�|$ ��
�������A�G�����H�C�@�����P��u��xvH���+�H�CH����V���DH�@��r�f���H��H�WP����ff.���H��H�WP1��n���ff.���AVAUATUSH��H�� H�/dH�%(H�D$1�H�G8H��t H�P0H��tH�Mh�p(H9�v<�@8����uAH�SPH��1�����H�L$dH3%(��H�� []A\A]A^�f�H���D�����t��EP�HCPL�d$H�D$�U��H�sPL��I��H�D$�oL�D$A�@A�@A�@A�@�}0�\���1��EtD�L��H������H�|$���H�|$H��t�t*L�����H�x1��4�����}H{P���tZ�EuʋEHCPH�H��t]H�H�P�EHCPH�PH��EH�SPH�L�(A�}u	A�E��w4H�|$t��{���D�;�����u�Eu��fDH�@뮃��A�EH�SP�EL�4�rT��I�H�SP�E�AoMH�H�I�UH�P�EH�SPH�H�8�v�w��EH�SPH�H�8�G�EH�SPH�H��@�I����o�fDAWA��AVAUI��ATI��USH��H�.dH�%(H�D$1�I��]HL��H�CH��}0I�4$���H��`�H;B@���x��A����H�B H�C�Ett�EI$H�H��txH�H�P�EI$H�PH�H�<$tL���!
��I�Ex1�H�L$dH3%(��H��[]A\A]A^A_���Eu�H�CfD�@�EI$H�H��u�H�@�1�H�5o
��M�H��`�H�B H�C�E�@����f�H�HH�IH������H�uPD��H���H�C�Et��P���
����xvH�����H�CH���R�������Zn�f.���H��H�WP��K���ff.���H��H�WP1��.���ff.���AVAUATUSH��H��H�/dH�%(H�D$1�H�G8H��t H�P0H��tH�Mh�p(H9�v<�@8����uAH�SPH��1�����H�L$dH3%(��H��[]A\A]A^�f�H���D�����t��}0I��H�sPL�EPL���j���1��Et2�L��H������H�<$H��t�t#L�����H�x1���}H{P����tZ�EuыEHCPH�H��t]H�H�P�EHCPH�PH��EH�SPH�L�(A�}u	A�E��w4H�<$t��f��[�����u�Eu��fDH�@뮃��A�EH�SP�EL�4�P��I�H�SP�E�AoEH�H�I�UH�P�EH�SPH�H�8�v���EH�SPH�H�8�G�EH�SPH�H��@�I����l�fD��ATUSH��H��H�/H�wPdH�%(H�D$1�I��}0L���,��H���dP���UH�KPH�H��EH�SPH�<$�DtL�����H�x1�H�L$dH3%(u	H��[]A\��k����AUATUSH��H��H�/H�wPdH�%(H�D$1�I��}0L�����H����O��H�<$A��tL������EH�SPIc�H��EH�SP�DE��u!H�x1�H�L$dH3%(u1H��[]A\A]�H�`�H���tH�H��xH���H�EP����j�D��AUATUSH��H��H�/H�wPdH�%(H�D$1�I��}0L������H���O��H�<$A��tL���P���EH�SPIc�H��EH�SP�DE��t!H�x1�H�L$dH3%(u1H��[]A\A]�H�`�H���tH�H��xH���H�EP���j�D��AUATUSH��H��L�'H�wPdH�%(H�D$1�H��A�|$0H�����H���PN��H�<$A��tH�����H�`�H���E��t3H��tVH�H��xH�1�H�L$dH3%(uEH��[]A\A]��H��u�H�K@A�T$PH��H��H)�H�QHH���fDH�K@I�T$h���0i���AUATUSH��H��L�'H�wPdH�%(H�D$1�H��A�|$0H���H��H���M��H�<$A��tH�����E��u)H�x1�H�L$dH3%(u:H��[]A\A]��H�`�H���tH�H��xH��I�D$P���h�@��AUATUSH��H��L�'H�wPdH�%(H�D$1�H��A�|$0H�����H����L��H�<$A��tH�����E��t)H�x1�H�L$dH3%(u:H��[]A\A]��H�`�H���tH�H��xH��I�D$P����g�@��ATUSH��H��H�/H�wPdH�%(H�D$1�I��}0L�������UH�KP�oH�@H�D�}H{P�v����H�<$tL���C��H�x1�H�L$dH3%(u	H��[]A\��?g�ff.�@AWAVAUATUSH��8I��`�H�dH�%(H�D$(1�I��X��I��Hc�I��{PL�|$I�uH�$L���%��I��X�W������t|��u	����1�H�|$tL���|���CI�U�DH�ChH����H��u1ɋCI�U����H�I�$x1�H�L$(dH3%(�9H��8[]A\A]A^A_�1�H�{hH�OH���…�tK�QPHc��t������j����xH�?���PH�
$
Hc�H�>��fD�CI�UH�,�v����Q`Hc��)���D�P��t7�oH�l$)D$H�@H�D$ ���H���o[���|$$���H��H�ShH���BH������H�H�������I��XHcJH9������H�1�<0@�����fD�pH��VH�0������{���H�ChH����H���c���H�$1�H�8�I����@���J���fD�H,0H��������t��.���f.�H�0H�������t�����@H��H�5շ	脱�����u�������H����������H�5a
�1��������H�$1�H��x@�����f.�H�H�������I��X1�HcRH9�@���o�����R���d���H��H�WP�����ff.���H��H�WP1����ff.���ATUSH��H��`�dH�%(H�D$1�H�H��XtZH�wPH��I��xPL������H��X�u
H�WH��RXH�<$tL���E���H�x1�H�L$dH3%(uH��[]A\��R���<c�ff.��AWI��AVA��AUATI��USH��H�.I�7dH�%(H�D$1�I��}PL���E���]IH�SH�H��`�H��XH���MH;z@�'���A����H�B H�C�Ete�EIH�H��tiH�H�P�EIH�PH�H�<$tL���T���I�$x1�H�L$dH3%(��H��[]A\A]A^A_�f.��@�EIH�H��u�H�@�@1�H�5�
���H��`�H�B H�C�E�O����f�H�OH�IH���"���D��H���H�C�Et��P�������xvH���4��H�CH����E��� ����E����H�{�G����a��OP��ff.�@��H��H�WP��+���ff.���H��H�WP1�����ff.���AVAUATUSH��H��L�gPH�o@dH�%(H�D$1�H�I��L��L��xPD�h0�=���H�MpH�UHM��D��H�����H�<$H��tL�����H��`�H���t,H�H��xH�1�H�t$dH34%(u,H��[]A\A]A^�HcUH�K@H��H��H)�H�QHH����g`����AVAUATUSH��H��L�gPH�o@dH�%(H�D$1�H�I��L��L��xPD�h0�m���H�MpH�UHM��D��H������H�<$H��tL������H��`�H���t,H�H��xH�1�H�t$dH34%(u,H��[]A\A]A^�HcUH�K@H��H��H)�H�QHH����_����AWAVAUATUH��SH��(H��`�L�'dH�%(H�D$1�H�wPL�l$H��0A�|$0�x9�L��芿�����I��t
�x�tH��0�x9t/A�|$t	A�D$��uH�CI9��1H�L� A�D$�>���B���Ao$I��A�D$A�FA�FA�F<��H�L�0H�|$tL���}���H�E@�xh����E`��lH�EpHǃxH����H�L$dH3%(�H��([]A\A]A^A_�@L���8���I��H����L�0A�~u7A�D$0HEPI�|$h�uH�PH9��A�F����A�FM�7A�FH�I�H��+����H�}P�B���6���f�L�����������A���Ao$H�T$L��I��H�t$A�D$A�FA�FA�F���H�T$A��I�D$H�x�1H�5b��1����I�D$L��PA�H�I�VL�0E���x���H�|$�[A���i���fD���A�F�A��I��AoI�VH�PI�?�wc�GI��@M�7����D���@��H����oH�RH�PH�H���D�x������|���f�����I�?�fDH�|$t!H�5
�1����H�uPA�|$0����A�F���;\�H�5D
�1���H�5y��1���DAWAVAUATUSH��8H��`�L�>H�<$dH�%(H�D$(1�H��X�H��A�PI��L�l$H�3L������H��XI��A�GHH����b��L��XA���I�GH�P8H����L��L����H��H����H�(�}uS�E��vK���H�T$�E�V?��H�T$H��om(H�MH�HH�:��I�GH��@H�*�oMH�EH��H�CH�� ���pH�:H�$��H�|$tL�����I�$x1�H�L$(dH3%(��H��8[]A\A]A^A_�DI�GL�@M���7H�x �,1�L��L��A�ЀxH�D$�B�oH�@H��H�CH�� ��vH�������U>��H��H�D$ H�D$�oH�@H��H�GH�� ��v
�h��H�|$ �GH�$�G��H�D$H�T$ L��L���@I�G�P H�|$ ��H�|$�����fD1�H�5�
��5��H�|$tL����H�E �oH�@H�CI�$x����H��H�T$����H�T$�y���f�1�H�5�
�����H�E �o #H�@H�C�N���DH�PH�R@H�������H���H�|$�W��u)�vH�D$�~��H�|$H�D$H�D$�*=��H�D$H�D$�i����#��H�T$H�:����X��G��ff.����H��H�WPH���[���f���H��H�WPH�ǰ[�i���f�AWAVAUATI��USH��H��XL�>H�3H�|$L�l$(L�t$0A�0L��dH�%(H�D$H1��+���A�PH�3L��H���i���H�D$A�GHH���H��H���_��H�m�}��H�EH�P8H����H�t$H���H��H����H�(�}uS�E��vK���H�T$�E�;��H�T$H��om(H�MH�HH�:��i�GH��@H�*�oMH�EH��H�CH�� ����H�:H�D$��H�|$0tL����H�|$(tL����I�$x1�H�L$HdH3%(�H��X[]A\A]A^A_�@H�EH�HH���?H�x �41�H�t$H��рxH�D$8�Q�oH�@H��H�CH�� ��vH��������:��H��H�D$@H�D$8�oH�@H��H�GH�� ��v
���H�|$@�GH�D$�G��H�D$8H�T$@H��H�t$�@H�E�P H�|$@��H�|$8������f�1�H�5G
��}��H�|$0tL�����H�`�H�@ �oH�@H�|$(H�C��������f�H��H�T$���H�T$�a���f�1�H�5�
��
��H�`�H�@ �o #H�@H�C�0���fDH�PH�R@H�������H���H�|$8�W��u)�vH�D$���H�|$8H�D$H�D$�b9��H�D$H�D$8�Z����[��H�T$H�:����T�H�5
�1��f��fD��H��H�WPH���[�Y���f���H��H�WPH�ǰ[�9���f�AWAVAUATUSH��HH��`�L�&H�|$dH�%(H�D$81�H��X�I��A�|$PH��L�t$(I�uL��虴��H��XI��A�D$IEH�D$�L[��L��XA�}�rI�EH�P8H����L��L���H��H����H��{uR�C��vJ���H�T$�C��7��H�T$H��oH�KH�HH�:����GH��@H�H�T$H��H�D$��A�D$�H�|$(tL���O�H�Ex1�H�L$8dH3%(��H��H[]A\A]A^A_�DI�EL�@M����H�x ��1�L��L��A�ЀxH��H�D$0���S�{�B�Cu	���GH��H�D$��H�T$0H�\$L��L��H�SI�E�P A�D$uH�C�@H�|$0���,���1�H�5�����H�|$(tL���e�A�D$�
���H�C H�L$H�A�@��H�T$H�L$H�H�A�@����fD1�H�5w�����A�D$�����H�C H�L$H�A�@���H�@H�@@H����H���H�|$0H�ËG��u�v
�X��H�|$0�6��H�\$0���@���H�T$H�:����fD�S��5��H�D$0�oH�SH��H�PH�� @��v
H������H�D$0�@H���@�k����UQ�� @����H��H�WPH���[���f���H��H�WPH�ǰ[�y���f�AWI��AVAUATI��USH��HH�I�7H�|$L�l$ L�t$(�{0L��dH�%(H�D$81���~���{PI�7L��H������H�D$�CIH���H��I���W��H�m�}��H�EH�P8H����H�t$H���H��H����H�(�}uS�E��vK���H�T$�E�Q4��H�T$H��oEH�MH�HH�:���GH��@H�*H�T$H��H�D$��C�2H�|$(tL�����H�|$ tL����I�$x1�H�L$8dH3%(�H��H[]A\A]A^A_��H�EH�HH����H�x ��1�H�t$H��рxH��H�D$0���J�z�A�Bu	���VH��H�D$��H�T$0H�t$H��I�WH�E�P �CuI�G�@H�|$0��������1�H�5?���u��H�|$(tL������C�����H�`�H�@ I�G�@���H�T$H�I�G�@���1�H�5������C�����H�`�H�@ I�G�@���H�@H�@@H�������H���H�|$0H�‹G��u)�vH�T$���H�|$0H�T$H�T$�g2��H�T$H�T$0�����[��H�T$H�:���fD�J�H�T$�1��H�T$H�D$0�o
H�RH��H�PH�� ��v
H���	��H�D$0�@H���@�S����M�H�5���1��	��f���H��H�WPH���[�Y���f���H��H�WPH�ǰ[�9���f�AWAVAUATUSH��XH��`�H�H�|$dH�%(H�D$H1�H��X��I�ԋ{PI��L�t$0I�4$L��L�|$8�6���I�4$1�L��H���H�D$���H��XH�D$�CI$H�I����S��L��XA�x�(H�ChH=��H�D$@H=���H=���I�@H�@(H����L��L�D$ 1�H�t$��L�D$ H��H�D$@H����x���Q�y�B�Au	���5L�D$ H�T$H��H��H�D$��H�ChL�D$ H=���H=�uI�@H�T$@L��H�t$�P0�CuH�D$@I�D$�@H�|$@��H�|$0tL���w�H�|$8H��tu@���kH��va���Zf�1�H�5�������H�|$0tL���-�H�|$8H��t@���QH�����Cu
H�E I�D$�@I�UH���H�Bxt.I�E1�H�t$HdH34%(��H��X[]A\A]A^A_�DH������I�@H�@H���a����1�H�57������C���H�E I�D$�@�����I�@H�P8H����L��L�D$ H�t$��L�D$ H��I����H��yuj�A��vb���L�L$ �AH�L$�4.��L�L$ H�L$I��o	H�QH�PI�9�vL�L$�E���L�L$I�9�GI��@I�	L�L$H�T$H��H��H�D$��C����L�L$I�I�D$�@���D�����k���fDH�@H�@@H���Z���H��L�D$ ��H�|$@L�D$ H���G��u8�vH�L$(�Ѿ��H�|$@H�L$(L�D$ H�L$(L�D$ �s-��H�L$(L�D$ H�L$@����L�������I�@H�T$@L��H�t$�P �*����L��������Q�L�D$(H�L$ ��,��H�L$ L�D$(H�D$@�oH�QH��H�PH�� ��w'�@H���@�w���@H�D$@���f�H��L�D$ 賾��H�D$@L�D$ ��H�Ch����7���=H�ff.�f�AWAVAUATI��UH��SH��hH�H�uH�|$L�|$8L�t$@�{0L��dH�%(H�D$X1���u���{PH�uL��I���)���H�uH���1�H�D$H�D$HH��H�D$ ���H�D$�CHEM���qH�L��H���N��I�M�y�0H�ChH=��0H�D$PH=���H=���H�AH�@(H����H��H�L$(1�H�t$��H�L$(I��H�D$PH�����x��A�UA�}�BA�Eu	���BH�L$(H�T$L��L��H�D$��H�ChH�L$(H=���H=�uH�AH�T$PH��H�t$�P0�Cu
H�D$PH�E�@H�|$P�m�H��`�H�|$@tL���V�H�|$HH��tz@���rH��vf�ӻ���_�1�H�5�����H�|$@tL���
�H�|$HH��t@���YH�����CH��`�uH�C H�E�@H�|$8tL�����I�$H���H�Bxt0I�$1�H�t$XdH34%(��H��h[]A\A]A^A_��H������H�AH�@H���A����1�H�5��������CH��`�����H�C H�E�@���H�AH�P8H����H��H�L$(H�t$��H�L$(H��I����L�(A�}u_A�E��vV���L�D$A�E�(��L�D$I��AoMI�UH�PI�8�v
����L�D$I�8�GI��@M�(L�D$H�T$L��L��H�D$��CL�D$��I�H��`�H�E�@���f��۹���K���fDH�@H�@@H���2���L��H�L$(��H�|$PH�L$(I�ŋG��u$�v薹��H�|$PH�L$(H�L$(�B(��H�L$(L�l$P���H�|$ ��������H�AH�T$PH��H�t$�P �����H�|$ �������A�U�H�L$(�'��H�L$(H�D$P�AoEI�UH��H�PH�� @��w%�@I���@�p���f�H�D$P����f�H��蘹��H�D$PH�L$(��@H�Ch���H�5��1�����C����AUATUSH��(I��`�H�/dH�%(H�D$1�I��$X��H�wPH��L�l$�}PL������1��E���H��I��$X�!��H�|$tL���q��H�SP�EH�H��B���B��H�D$�zt	���,�EH�SPI�L$ H�L�*A�EH9�tA�}u��wl��H�|$A�Et
H�|$���H�x1�H�L$dH3%(��H��([]A\A]�fD�B�BH�T$�����}H{P����@���A�EH�SP�EL�$�%��I�$H�SP�E�AoEH�H�I�UH�P�EH�SPH�H�8�v����EH�SPH�H�8�GH�SP�EH�H��@�EH�SPH�L�(A�E���f��B������/���A�ff.�f���ATUSH��H��H�/dH�%(H�D$1�H�G8H��t$H�P0H��tH�Mh�p(H9����@8����u1H�SPH��1����H�L$dH3%(��H��[]A\�fDH�sPI��}PL���Π��H��`�H��XtS1��Eu�}H{PH��X�H������H�<$tL�����H�x1��H���D����Z����@���.��D��ATUSH��H��H�/H�wPdH�%(H�D$1�I��}PL���,���H��`�H��XtT1��EtCH��X�H���/��H�<$tL�����H�x1�H�L$dH3%(uH��[]A\Ð�}H{P��B.���m?�ff.�f���ATUSH��H��H�/H�wPdH�%(H�D$1�I��}PL���|���H�}hu#H�KP�U0H�H��B�U0HSPH�
H�	H�JH��`�H��XtZ1��EtIH��X�H���U��H�<$tL�����H�x1�H�L$dH3%(uH��[]A\���}H{P��b-���>�ff.�f���AVAUATUSH��H�� H�/H�wPdH�%(H�D$1�L�l$D�e�}0L��I�H�}h���4l��I��H�H�D$H�}h��I�.�}�Etb��H�l$�EI�<$E1�1�H�T$A���u��H�|$tL�����H�x1�H�L$dH3%(��H�� []A\A]A^�f���wC�EI�.�E��H�D$�xu}�@�}���@�˝��E1�H�D$�E���fD����E�h!��I��oMH�UH�PI�>�v至��I�>�GI��@I�.�EI�.�E����@��!��H�T$�oH�D$�R�@�P�@������H���"���������<����SH�H���xH{P���H��[� �����AWAVAUATUSH��H��8H�/H�wPdH�%(H�D$(1�L�|$L�t$D�m�}PL��I�訜��H�}h�}0L��I��H�sP���;j��H��H�H�D$ H�}htaH�*�}�Et=��H�l$ �EM��t]A�|$��A�D$H�8�Hc�H�>��f.����G�EH�*�E�H�D$ �x���@M��u�I�}H�T$ E1�1�A���Rs���E�ۛ��1�H�D$ �O����I�4$I�}H�L$ E1�A�D$�P�U��H�|$tL���+��H�|$tL�����H�x1�H�L$(dH3%(�dH��8[]A\A]A^A_�f��I,4$I�}H�T$ A�E1���r���@I�4$I�}H�T$ E1�A���r���h���H�L$ H��E1ɺjI�}A�H�5ȍ	�l��XZ�5������H�T$�E���H�T$H��oMH�MH�HH�:�v
襰��H�T$H�:�GH��@H�*�EH�*�E����DH�5�~	�1�蕾��H�|$ �������fD����H�T$ �oH�D$ �R�@�P�@�������H����������9����SH�H���xH{P���H��[����AWAVAUATI��USH��(H�/H�wPdH�%(H�D$1�L�t$D�m�]PL��}0I�H�H�}h���<g��I��H�H�D$H�}htZI�/�}�Et6��H�l$�EH��tV�{���CH�Y�Hc�H�>������O�EI�/�E�H�D$�x���@H��u�I�}H�T$E1�1�A���Zp���H��ۘ��E1�H�D$�M���fD�CH�3H�L$E1�I�}�P�R���{vH���Э��H�|$tL��� ��I�$x1�H�L$dH3%(�XH��([]A\A]A^A_�fD�H,3I�}H�T$A�E1���o���DH�3I�}H�T$E1�A���o���f���@H�L$H��E1ɺjI�}A�H�5Ȋ	�i��XZ�2�������E���I��oMH�UH�PI�?�v语��I�?�GI��@I�/�EI�/�E����@H�5�{	�1�襻��H�|$������fD����H�T$�oH�D$�R�@�P�@������H���"��������6����SH�H���xH{P����H��[������AWAVAUATUH��SH��(H�H�wPdH�%(H�D$1�L�t$D�c�{0L��I�H�{h�w�Rd��I��H�H�D$H�{h�DM�/A�}A�Et.��L�l$A�E�{d���CdH���Hc�H�>�����/A�EM�/A�E�f��CXH�sPH�L$E1�I�<$�P�O��H�|$tL�����H�Ex1�H�L$dH3%(�mH��([]A\A]A^A_��H,sPH�T$I�<$A�E1���&m���@H�T$H�sP��DH�L$H��E1ɺjI�<$A�H�5X�	�'g��XZ�[���H�5�y	�1�荹��H�|$�����9���fDH�D$�xu}�@����@�+���E1�H�D$���fD���A�E����I��AoMI�UH�PI�?�v���I�?�GI��@M�/A�EM�/A�E�B�����v��H�T$�oH�D$�R�@�P�@������H��肪�������(4����SH�H���xH{P�I��H��[�`�����AVAUATUSH��H�� L�7H�wPdH�%(H�D$1�L�l$E�fA�~PL��I������H��A�F0HCPH�D$���H�T$�oH�D$�R�@�P�@H���0�}���EH���Hc�H�>��f��EH�uH�L$E1�I�<$�P�L��H�|$tL�����H�x1�H�L$dH3%(��H�� []A\A]A^�fDH�L$H��E1ɺjI�<$A�H�5�	��d��XZ�H�uI�<$H�T$E1�A���hj���n����H,uI�<$H�T$A�E1���>j���D���f�H�5w	�1��ݶ��H�|$�3������fDI�<$H�T$E1�1�A����i������� 2���SH�H���xH{P�I��H��[������AVAUATUH��SH�� H�H�wPdH�%(H�D$1�L�t$D�k�{PL��I������{EI��H�C0H�D$u-�C@M��tdA�|$�XA�D$H�?�Hc�H�>�����H�T$�oH�D$�R�@�P�@��v�H��薧��M��u��I�}H�T$E1�1�A����h���-I�4$I�}H�L$E1�A�D$�P��J��H�|$tL������H�Ex1�H�L$dH3%(��H�� []A\A]A^�H�L$H��E1ɺjI�}A�H�5Ѓ	�b��XZ�I�4$I�}H�T$E1�A���8h���p����I,4$I�}H�T$A�E1���h���F���f�H�5�t	�1�譴��H�|$��������0�f���SH�H���xH{P�9��H��[��H��H�dH�%(H�D$1�H�AhH=�t,H=�uiH��`�H��XH��tQ�@H��X�xuH�VP�X�H�L$dH3%(uNH���H�vP�yPH���ď��H�5���1�����,��H�vP�yPH��蝏��H�5��1�躳���5/�D��H��H���Z�-���ff.�f���H��H��`�Z�
���ff.�f���H��H���Z���ff.�f���H��H��p�Z����ff.�f���H��H�ǰ�Z���ff.�f���H��H���Z���ff.�f���H��H����Z�m���ff.�f���H��H�Ǡ�Z�M���ff.�f���H��H����Z�-���ff.�f���H��H��0�Z�
���ff.�f���H��H���Z���ff.�f���AUATUSH��H��H�/H�wPdH�%(H�D$1�I��}0L�����1�H�SP�xtF�E�D�EH�SPH�H�<$tL���L��H�x1�H�L$dH3%(uEH��[]A\A]�H�p1�H���t��MPH��L�,
�)��H��L���p��1�H�SP������-�ff.����AWAVAUATUSH��H��(L�'H�wPdH�%(H�D$1�L�l$A�|$0L������H���+�xH���H�����I��H�EL�xM����M��t{I���H�����PH�`��������H��PH�xH�L$���H�L$��uaH��PH�
_	H��tH�HI�VH�5W��1�蓰��I�VH�5]��1��y���f�M����H�`�A�D$HCPH�PH�H�����H�|$tL�����H�x1�H�L$dH3%(�H��([]A\A]A^A_�f�H��PI9�t�H�
�~	H��tH�HI�VH�5a��1��ͯ��DH�5!��1�赯��D�H�L$E�t$LsP�(��H��I�FA�D$H�SPL�tA��A�I�VH�SPA�D$H�D�@H�SPA�D$H�D�@A�D$H�SPH�D�@A�D$uH�L$H������A�|$H{PH���s������H�5?��1�����v*�fD��AUATUSH��H��H�/H�wPdH�%(H�D$1�I��}PL��芊���P��tQ��uaH�Uh�pH�8D�mLkP����I�EH�<$tL������H�x1�H�L$dH3%(u4H��[]A\A]ÐH�NjmHkP����H�E�H�5d��1��8����)���AUATUH��SH��H�wPdH�%(H�D$1�H�I��L��x0�ʉ���xurI�Ŀ�w
���Ao$H��A�D$�C�C�C<vH��苟��H���c:��H�<$tL�����H�Ex1�H�L$dH3%(uH��[]A\A]��?���(��AWAVA��AUI��ATUH��SH��hL�>I�udH�%(H�D$X1�H�D$(L�d$@A�0H��H�D$���H���@<t4�oL�d$@)D$@H�SH�T$P<�m�|$TL���O�A�GT�������B���z����E1ۃ��e�CH�3H�L$0L��L�\$�PH�L$�t��L�\$����A�GT���J�����3L9���A�Gu5H�D$0A�WI�MH�H��@A����A����E����H�Ex1�H�t$XdH34%(��H��h[]A\A]A^A_�@I�MA�GP�SH�3H�<1�����H�D$0H�|$(�c���H�|$�$��L9��Y����|$T�N���H��訜���A���L���"�����L��L���U����|$T��������A������H�
��D��Hc�H�>��f�H�`�L������DH�|$(�����A�G0I�UH�H��@���@H�`�H��0L���M���=����HH�T$�s
��H�T$E1�H��XZ�H���H�`�1�H��0H�����U��H�`�H��0L�������f�H�`�L�������DA�GIEH�H���H�H�PA�GIEH�PH��#���f�H�H�5��1��*���H�`�H�� H�D$0���DH��1�L�\$H�5�����L�\$H�`�H�L$8H��A�L��H�P�@H�T$@�CjL�L$(H�3�P�5W��XZ�'���fDI�UA�GH�H��B���Buv�B�BH�T$8A�GI�UH�`�H�H�� H��CH9�t�{u��wa���CH�|$8����H�|$8蕿���
���H�|$0��!�����@H�D$8�zt���������B�y��������CI�UA�GL�$�d��I�$I�UA�G�oH�H�H�SH�PA�GI�UH�H�8�v�h���A�GI�UH�H�8�GI�UA�GH�H��@A�GI�UH�H��C�����H�@�����#�ff.���H��H�WP����ff.���H�G8H��1�H��t'H�P0H��t-H��x(H�IhH9�wH��1��D�@��H�VP�^���fD1��@8H�VP@���E���D��H��H�WP��+���ff.���H��H�WP�����ff.���H��H�WP����ff.���H��H�WP1�����ff.���AVAUATUSH��H�� H�/H�wPdH�%(H�D$1�I��L�l$�}0L���sP���}PH�sPL��I��豂��1��Eu�}H{P�H��L���¼��H�|$tL������H�<$H��t��OL�����H�SP�EH�H��B���B���B�BH�T$�EH�SPH�`�H�H�� L�"A�D$H9�tA�|$tG��H�|$A�D$t
H�|$腼��H�x1�H�L$dH3%(�H�� []A\A]A^�fD��v����A�D$H�SP�EL�,�f��I�EH�SP�E�Ao$H�H�I�T$H�P�EH�SPH�H�8�v�i����EH�SPH�H�8�GH�SP�EH�H��@�EH�SPH�L� A�D$����f.�����E������EHCPH�H���H�H�P�EHCPH�PH��EH�SPH�L�(A�}u	A�E��wVH�<$�T����G���fDH�D$�z�c������Z����B�Q����ө����u��Eu��g������A�EH�SP�EL�4���I�H�SP�E�AoMH�H�I�UH�P�EH�SPH�H�8�v�����EH�SPH�H�8�G�EH�SPH�H��@�'���DH�@�����fD��AVAUATUSH��H�� H�/H�wPdH�%(H�D$1�I��L�d$�}0L���CM���}PH�sPL��I�����1��Eu�}H{P1�A�H��L���@��H�|$tL���߹��H�<$H��t���L���Ĺ���EH�SPH�H����L� A�D$��A�D$��H�D$A�|$t	�����EH�SPH�`�H�H�� L�"A�D$H9�tA�|$u	������H�|$A�D$t
H�|$�2���H�x1�H�L$dH3%(�0H�� []A\A]A^�A�D$A�D$L�d$�o�������E�����EHCPH�H����H�H�P�EHCPH�PH��EH�SPH�L� A�|$uA�D$����H�<$�����������A�D$H�SP�EL�,���I�EH�SP�E�Ao$H�H�I�T$H�P�EH�SPH�H�8�v膓���EH�SPH�H�8�GH�SP�EH�H��@�EH�SPH�L� A�D$����A�D$�E���D�{�������H�<$�������f����A�D$H�SP�EL�4���I�H�SP�E�Ao$H�H�I�T$H�P�EH�SPH�H�8�v跒���EH�SPH�H�8�G�EH�SPH�H��@�i���H�@�_����E�L����%���H�5���舠������AVAUATUSH��H�� H�/dH�%(H�D$1�H�G8H��t H�P0H��tH�Mh�p(H9�v<�@8����uAH�SPH��1�賤��H�L$dH3%(��H�� []A\A]A^�f�H���D�����t�H�sP�}PL�l$L�d$L���{���}0H�sPL��I���EI��1��Eu�}H{P�L��H��覵��H�|$tL�����H�|$H��t�tL���޵��H�x1��P����tZ�EuދEHCPH�H��t]H�H�P�EHCPH�PH��EH�SPH�L�(A�}u	A�E��w4H�|$t����+�����u�Eu��fDH�@뮃��A�EH�SP�EL�4�b���I�H�SP�E�AoEH�H�I�UH�P�EH�SPH�H�8�v�g����EH�SPH�H�8�G�EH�SPH�H��@�I������fD��USH��H��H�wPdH�%(H�D$1�H�H��H��x0�y���xuPH�H�`���(H�<$tH���i����� H�=���X���H�x1�H�L$dH3%(uH��[]�H��蠐����I�f���AWAVAUATI��USH��xL�/H�wPdH�%(H�D$h1�H�T$(A�}0�Vy��A�MhH�t$PH�D$P�@H�ǃ�H�D$0�L$����tn���e���D1�H�5����1���H�`�H�����I�$H��xI�$1�H�L$hdH3%(�MH��x[]A\A]A^A_�H�|$0�h��H�|$0H�D$�G<�x1�<u
H�G�PpH��A�u0It$PH��L�t$8H��L�|$H�il��H�D$$H�$H�D$@H�D$�3@H�t$H�$E1�E1�H��L���Fm��1�H�߉���l�����Y1�L��H����m�����u�H�`�H�������A�UPI�L$@H��H��H)�H�QHH�����f.�H�|$0�G<��1�<u
H�G�PpH��A�u0It$PH��H���k��1�H�t$8H���Km������s���1�|$��1�H���l��A�u0It$PH��H���&k��L�t$8H��`�A�Eh�M�>A�u
A�G����A�GA�EI�T$PL�4H�D$8H��@�|$t#A���ID$P���6����@�I�$H���H�Bx���H�������fDH�|$PH����H�G��H��`�H�GH�t$8�PH�����L�t$8M����|$�)H�|$PH�GH�@H����H�L$HH�T$$H�t$@��H�����uGL�t$8�����H�����H��Y����H��`�H�����H�D$0H�|$0�h�h���I�$x���fD���T����D$$H�t$@H�|$�P�����������A�u0It$PH��H���\i���|$�+����D$$H�|$@H�L$`H�T$X�p��fb��H�\$`H����H�߉ƉD$$����D$$H�D$@���@A�EI�T$PL�4I�T$PA�EH�H��@A�EID$PH�H���eH�H�PA�EID$PH�PH�����fDH�G�P H��`�H�������H�|$PH��tZH�����H�G�P��������H�|$P���DH�L$HH�T$$E1�H��H�t$@A��i������f�A�UPI�L$@H��H��H)�H�QHH��I�$�\���1�������A�G���I�H�D$8�AoH�I�WL�t$8H�PI�>�v
���L�t$8I�>�GI��@M�>����H�T$H�@H������H�T$@�@H��L$$�Q��P���H�@���H�G�H�D$H�3����(����AWAVAUATUSH��H��HH�/H�wPdH�%(H�D$81�L�d$�}0L��Eh�G��@��I��`�I��I�G I9�t7M��t2M�.A�E<�2<�zL�l$ A�E�P1Ƀ�E1�A�U�2�E1����1�I��H�D$ H���oH�@AEI�E��A�E�EH�SPL�l�EHCPH�PH�M���OI�FI�FH�P(H���^L����I��`�I�����I�FL���PI�����I�F������A��H�|$tL��讬��E���H�x1�H�L$8dH3%(��H��H[]A\A]A^A_�@��q���xI��H�D$ ��A�}�@������������p���I��H�D$ �oAM�P�A�EA�UA�E����L�l$ 1�E1����DH�D$ H�|$ �h���H�|$�4���L���ѫ���'���@H�|$ �G<�7<�1�H�5����<���H�|$tL��茫��H�`�H����GH�H��xH������I�EH�����L���f���H��H����H��@��M�.L�l$ H���kH��@H���[�UhH��H�$L�����I��`�H�$H��I����I�����H�|$t4L��H�$���H�$I���uH�IH�o�1�1�1����@1����H�x����L�/H�$M�������1�L���Fd��H�$H���|H�|$ L�|$0L�t$�_��H�D$H�D$(H�$�IDH�4$E1�E1�L��L��L���d��<t<t3�D$H�t$(H�|$�P�誈����t1�L���d��1�L����d����u�1�L����d���uL��A��HsPH���b�����@A�EE1����c����I��`����@H��訯��L�l$ H��H��tH��@L�l$ H���[���A�E�8���@1�H�5������I����������UPH�K@H��H��H)�H�QHH�����f�A�}uPA�E��vG���A�E��I��AoUI�UH�PI�>�v�=���I�>�GI��@M�.�Eh�%���A�EM�.����f�H�GH�$�PpH�$I������f�L�����A�E���`���@M�.A�}A�Eu��wF��A�E����f�H�����H�$I��H�D$ �@������H�|$�H����S������H�$A�E�*�H�$I��Ao]I�UH�PI�>�v�D���I�>H�$�GI��@M�.A�E�^������ff.���AWAVAUATUSH��HH��`�dH�%(H�D$81�H�H��X�FH�wPH��L�d$(�xPL���l��H��XH�D$0�W��tJ������t\H�|$(tL������H�x1�H�L$8dH3%(��H��H[]A\A]A^A_�H�WH�RhH����H���H�|$(u�봀xL�/���PH�
ĪHc�H�>��fD�@�HL��H�0�Q������uOL���M9�uCH�D$0I�݋HH�8�q�ݙ��H��f.�I�E@H��t
M9}h��M�mpM��u�@H�|$0�6���������H,A�1�1�L���J�����@E1�1ɺL��H�5H^	�J������f�H�A�1�1�L���{J�����fDH�5K��1��]�������P`���`���L�L$0H�hXD�B�E1��I�FH��M9��:���I��H9Mu�A�A9Eu�I�1H�}Hc�L�D$H�L$L�L$���L�L$H�L$��L�D$u�I�EXJ�����H�5��1���������6
�H�5���1�裎����AWAVAUI��ATUSH��L�7H�wPdH�%(H��$�1�H��`�A�~0H�H�$H�D$(H��H�D$�j��H���@<���oEL�d$0)D$0H�UH�T$@<wo�|$Du0A�FI�~P���D$H���_H���Hc�H�>��fDL������A�FI�~P���D$H���7H���Hc�H�>��fDL���x���|$Dt���A�FI�~P���D$H����H���Hc�H�>��fDL��H�}H�D$PH�D$�?/�VH�t$������L�|$`M���L���&��L��H����P��?������I�~P��H�|$E�H����H�|$I���Ow��1�DL9��(A�FIEPH�HH�M���A�FI�MPL��H�L��0I�MPH�A�FH�DH���M�eHI�mI�EHM�}��T$I�mM�eH���LA�~I}PH�t	H��褢��L��xI�E@L��H��0I�EH�CH�R�L�����H���t1��
��H�|$(t
H�|$�W���H�$H�1�I�ExH��$�dH3%(��H�Ĩ[]A\A]A^A_�L��H���ev��1�I��L9������|$D����L��@�t$�|���t$���DL��H�=3��ѝ��H��H��H�D$H�@��H�T$I��H���
�1��n���fDL�d$0����fDL�d$0�i���fDL�d$0�f�A�nImPH�}��������H�EI�MPA�FH�D�@I�MPA�FH�D�@I�MPA�FH�DH�A�FI�MPH�D�@�\����D$��������A�n@�t$ImP�
�D�|$H�EI�UPA�FH�DH����o
H�RH�PI�UPA�FH�DL�8A�FI�UPH�D�@�!���f.�I�~PH�u���E1��ĉ��1��%���D��D$X�6
�H�|$1ҹ�H�D$PH�u�����tuH�|$P�+�H�}�d���f�1�E1�L�d$0�����1�E1����fD1�E1�����fD�E1��3���1����@H�|$E1��[s����y�����D$XH�t$PH����P��S�����k���H�|$PE1����A���f��uH�}�t�I��H�D$`�����r�f���AVAUATUSH��H��0L�/H�wPdH�%(H�D$(1�L�d$A�}PL���d���D$�xH��tL�t$H�T$H��L��蟎���T$��IE�H�{PA�u0H��A�EH�H���A���D$��t�}w=H�|$tL��譞��H�x1�H�L$(dH3%(u!H��0[]A\A]A^�f.�H���y�������AWAVAUATUSH��H��(H�/dH�%(H�D$1��E0HGPH�8��H�@E1�@H�sP�}PL�|$L�d$L���c��H�sP�}0L��I���qc���}L��H{PH���m��H�|$tL���ߝ��E��tCH�|$tL���ʝ���E0H�SPH��E0HCPH�H��tTH�H�P�E0HCPH�PH�H�x1�H�L$dH3%(u3H��([]A\A]A^A_�f�H�@A��@�1���DH�@��i�f���AVAUATUSH��H��H�/dH�%(H�D$1��E0HGPH�8��H�@E1��@H�sPD�ePI��}0L��I��Ub���}L��H{PH���l��A�|$vL���cw��E��tBH�<$tL��诜���E0H�SPH��E0HCPH�H��tYH�H�P�E0HCPH�PH�H�x1�H�L$dH3%(u8H��[]A\A]A^�f�H�@A��@�?���DH�@��I�f���AUATUSH��H��H�/dH�%(H�D$1��E0HGPL�ePH�8tSH�@H��@H�wP�}0�Da���}L��H{PH���k��H�x1�H�L$dH3%(��H��[]A\A]�DH�@I��L��@H�wP�}0��`���}L��H{PH���<k��H�<$tL���]����E0H�SPH��E0HCPH�H��tH�H�P�E0HCPH�PH��c���DH�@�Q����.�ff.���ATUSH��H��H�/H�wPdH�%(H�D$1�I��}PL���<`��H�{P�U�u0H�H�H���j��H�<$tL��襚��H�x1�H�L$dH3%(u	H��[]A\�����AVAUATUSH��H�� H�/H�wPdH�%(H�D$1�L�d$L�t$�}PL���_��H�sP�}0L��I���_���}L��H{PH����i��H�|$tL���
���H�|$tL�����H�x1�H�L$dH3%(u
H�� []A\A]A^���D��AUATUSH��H��L�'H�wPdH�%(H�D$1�I��A�l$PA�|$0L��H��_��A�|$H��H{PH���Li��H�<$tL���m����}vH���s��H�x1�H�L$dH3%(uH��[]A\A]��Y��f���ATUSH��H��H�/H�wPdH�%(H�D$1�I��}0L���l^���}H�UPH{PH���h��H�<$tL���ژ��H�x1�H�L$dH3%(u	H��[]A\����fD��AUATUSH��H��L�/H�wPdH�%(H�D$1�I��A�}PL����]��H�{PA�m0A�UH�H��H�H���,h���}vH����r��H�<$tL���?���H�x1�H�L$dH3%(uH��[]A\A]��9��f���ATUSH��H��H�/H�wPdH�%(H�D$1�I��}PL���L]���}H�u0H{PH���g��H�<$tL��躗��H�x1�H�L$dH3%(u	H��[]A\���fD���w������AUATUSH��H��8H�wPdH�%(H�D$(1�H�L�d$L��x0�\���xH��u$H�@H�xxtL�l$�H��L���U����t;H���s��H�|$tL������H�x1�H�L$(dH3%(u&H��8[]A\A]�f�L���Hs���|$$v�L���iq������f���H�H�OP�PH��@H�WP�D����f���AVAUATUSH��H�� H�/H�wPdH�%(H�D$1�L�d$L�t$�}PL���[��H�sP�}0L��I���[���}L��H{PH���]/��H�|$tL������H�|$tL���
���H�x1�H�L$dH3%(u
H�� []A\A]A^����D��AUATUSH��H��L�'H�wPdH�%(H�D$1�I��A�l$PA�|$0L��H��[��A�|$H��H{PH���.��H�<$tL���}����}vH���p��H�x1�H�L$dH3%(uH��[]A\A]��i��f���ATUSH��H��H�/H�wPdH�%(H�D$1�I��}0L���|Z���}H�UPH{PH���).��H�<$tL�����H�x1�H�L$dH3%(u	H��[]A\����fD��AUATUSH��H��L�/H�wPdH�%(H�D$1�I��A�}PL���Y��H�{PA�m0A�UH�H��H�H���-���}vH���n��H�<$tL���O���H�x1�H�L$dH3%(uH��[]A\A]��I��f���ATUSH��H��H�/H�wPdH�%(H�D$1�I��}PL���\Y���}H�u0H{PH���	-��H�<$tL���ʓ��H�x1�H�L$dH3%(u	H��[]A\����fD��AVAUATUSH��H�� H�/H�wPdH�%(H�D$1�L�d$L�t$�}PL����X��H�sP�}0L��I���X���}L��H{PH���(��H�|$tL���-���H�|$tL������H�x1�H�L$dH3%(u
H�� []A\A]A^����D��AUATUSH��H��L�'H�wPdH�%(H�D$1�I��A�l$PA�|$0L��H�� X��A�|$H��H{PH���(��H�<$tL��荒���}vH���m��H�x1�H�L$dH3%(uH��[]A\A]��y��f���ATUSH��H��H�/H�wPdH�%(H�D$1�I��}0L���W���}H�UPH{PH���'��H�<$tL�����H�x1�H�L$dH3%(u	H��[]A\���fD��AUATUSH��H��L�/H�wPdH�%(H�D$1�I��A�}PL���	W��H�{PA�m0A�UH�H��H�H���&���}vH���l��H�<$tL���_���H�x1�H�L$dH3%(uH��[]A\A]��Y��f���ATUSH��H��H�/H�wPdH�%(H�D$1�I��}PL���lV���}H�u0H{PH���i&��H�<$tL���ڐ��H�x1�H�L$dH3%(u	H��[]A\����fD��AVAUATUSH��H�� H�/H�wPdH�%(H�D$1�L�d$L�t$�}PL����U��H�sP�}0L��I����U���}L��H{PH���-"��H�|$tL���=���H�|$tL���-���H�x1�H�L$dH3%(u
H�� []A\A]A^��%��D��AUATUSH��H��L�'H�wPdH�%(H�D$1�I��A�l$PA�|$0L��H��0U��A�|$H��H{PH���!��H�<$tL��蝏���}vH���/j��H�x1�H�L$dH3%(uH��[]A\A]����f���ATUSH��H��H�/H�wPdH�%(H�D$1�I��}0L���T���}H�UPH{PH��� ��H�<$tL���
���H�x1�H�L$dH3%(u	H��[]A\����fD��AUATUSH��H��L�/H�wPdH�%(H�D$1�I��A�}PL���T��H�{PA�m0A�UH�H��H�H���l ���}vH���i��H�<$tL���o���H�x1�H�L$dH3%(uH��[]A\A]��i��f���ATUSH��H��H�/H�wPdH�%(H�D$1�I��}PL���|S���}H�u0H{PH������H�<$tL�����H�x1�H�L$dH3%(u	H��[]A\�����fD��AVAUATUSH��H�� H�/H�wPdH�%(H�D$1�L�d$L�t$�}PL����R��H�sP�}0L��I����R���}L��H{PH����0��H�|$tL���M���H�|$tL���=���H�x1�H�L$dH3%(u
H�� []A\A]A^��5��D��AUATUSH��H��L�'H�wPdH�%(H�D$1�I��A�l$PA�|$0L��H��@R��A�|$H��H{PH���L0��H�<$tL��譌���}vH���?g��H�x1�H�L$dH3%(uH��[]A\A]����f���ATUSH��H��H�/H�wPdH�%(H�D$1�I��}0L���Q���}H�UPH{PH���/��H�<$tL������H�x1�H�L$dH3%(u	H��[]A\����fD��AUATUSH��H��L�/H�wPdH�%(H�D$1�I��A�}PL���)Q��H�{PA�m0A�UH�H��H�H���,/���}vH���.f��H�<$tL������H�x1�H�L$dH3%(uH��[]A\A]��y��f���ATUSH��H��H�/H�wPdH�%(H�D$1�I��}PL���P���}H�u0H{PH���.��H�<$tL�����H�x1�H�L$dH3%(u	H��[]A\����fD��AVAUATUSH��H�� H�/H�wPdH�%(H�D$1�L�d$L�t$�}PL���P��H�sP�}0L��I����O���}L��H{PH���=*��H�|$tL���]���H�|$tL���M���H�x1�H�L$dH3%(u
H�� []A\A]A^��E��D��AUATUSH��H��L�'H�wPdH�%(H�D$1�I��A�l$PA�|$0L��H��PO��A�|$H��H{PH���)��H�<$tL��轉���}vH���Od��H�x1�H�L$dH3%(uH��[]A\A]����f���ATUSH��H��H�/H�wPdH�%(H�D$1�I��}0L���N���}H�UPH{PH���	)��H�<$tL���*���H�x1�H�L$dH3%(u	H��[]A\��&��fD��AUATUSH��H��L�/H�wPdH�%(H�D$1�I��A�}PL���9N��H�{PA�m0A�UH�H��H�H���|(���}vH���>c��H�<$tL��菈��H�x1�H�L$dH3%(uH��[]A\A]����f���ATUSH��H��H�/H�wPdH�%(H�D$1�I��}PL���M���}H�u0H{PH����'��H�<$tL���
���H�x1�H�L$dH3%(u	H��[]A\����fD��AVAUATUSH��H�� H�/H�wPdH�%(H�D$1�L�d$L�t$�}PL���M��H�sP�}0L��I���L���}L��H{PH���]$��H�|$tL���m���H�|$tL���]���H�x1�H�L$dH3%(u
H�� []A\A]A^��U��D��AUATUSH��H��L�'H�wPdH�%(H�D$1�I��A�l$PA�|$0L��H��`L��A�|$H��H{PH���#��H�<$tL���͆���}vH���_a��H�x1�H�L$dH3%(uH��[]A\A]����f���ATUSH��H��H�/H�wPdH�%(H�D$1�I��}0L����K���}H�UPH{PH���)#��H�<$tL���:���H�x1�H�L$dH3%(u	H��[]A\��6��fD��AUATUSH��H��L�/H�wPdH�%(H�D$1�I��A�}PL���IK��H�{PA�m0A�UH�H��H�H���"���}vH���N`��H�<$tL��蟅��H�x1�H�L$dH3%(uH��[]A\A]����f���ATUSH��H��H�/H�wPdH�%(H�D$1�I��}PL���J���}H�u0H{PH���	"��H�<$tL������H�x1�H�L$dH3%(u	H��[]A\����fD��AVAUATUSH��H�� H�/H�wPdH�%(H�D$1�L�d$L�t$�}PL���!J��H�sP�}0L��I���J���}L��H{PH�����H�|$tL���}���H�|$tL���m���H�x1�H�L$dH3%(u
H�� []A\A]A^��e��D��AUATUSH��H��L�'H�wPdH�%(H�D$1�I��A�l$PA�|$0L��H��pI��A�|$H��H{PH����
��H�<$tL���݃���}vH���o^��H�x1�H�L$dH3%(uH��[]A\A]�����f���ATUSH��H��H�/H�wPdH�%(H�D$1�I��}0L����H���}H�UPH{PH���Y
��H�<$tL���J���H�x1�H�L$dH3%(u	H��[]A\��F��fD��AUATUSH��H��L�/H�wPdH�%(H�D$1�I��A�}PL���YH��H�{PA�m0A�UH�H��H�H�������}vH���^]��H�<$tL��诂��H�x1�H�L$dH3%(uH��[]A\A]����f���ATUSH��H��H�/H�wPdH�%(H�D$1�I��}PL���G���}H�u0H{PH���9��H�<$tL���*���H�x1�H�L$dH3%(u	H��[]A\��&��fD��AVAUATUSH��H�� H�/H�wPdH�%(H�D$1�L�d$L�t$�}PL���1G��H�sP�}0L��I���G���}L��H{PH���]��H�|$tL��荁��H�|$tL���}���H�x1�H�L$dH3%(u
H�� []A\A]A^��u��D��AUATUSH��H��L�'H�wPdH�%(H�D$1�I��A�l$PA�|$0L��H��F��A�|$H��H{PH�����H�<$tL������}vH���[��H�x1�H�L$dH3%(uH��[]A\A]�����f���ATUSH��H��H�/H�wPdH�%(H�D$1�I��}0L����E���}H�UPH{PH���)��H�<$tL���Z���H�x1�H�L$dH3%(u	H��[]A\��V��fD��AUATUSH��H��L�/H�wPdH�%(H�D$1�I��A�}PL���iE��H�{PA�m0A�UH�H��H�H������}vH���nZ��H�<$tL�����H�x1�H�L$dH3%(uH��[]A\A]����f���ATUSH��H��H�/H�wPdH�%(H�D$1�I��}PL����D���}H�u0H{PH���	��H�<$tL���:��H�x1�H�L$dH3%(u	H��[]A\��6��fD��AVAUATUSH��H�� H�/H�wPdH�%(H�D$1�L�d$L�t$�}PL���AD��H�sP�}0L��I���/D���}L��H{PH�����H�|$tL���~��H�|$tL���~��H�x1�H�L$dH3%(u
H�� []A\A]A^����D��AUATUSH��H��L�'H�wPdH�%(H�D$1�I��A�l$PA�|$0L��H��C��A�|$H��H{PH������H�<$tL���}���}vH���X��H�x1�H�L$dH3%(uH��[]A\A]�����f���ATUSH��H��H�/H�wPdH�%(H�D$1�I��}0L���B���}H�UPH{PH�����H�<$tL���j}��H�x1�H�L$dH3%(u	H��[]A\��f��fD��AUATUSH��H��L�/H�wPdH�%(H�D$1�I��A�}PL���yB��H�{PA�m0A�UH�H��H�H������}vH���~W��H�<$tL����|��H�x1�H�L$dH3%(uH��[]A\A]�����f���ATUSH��H��H�/H�wPdH�%(H�D$1�I��}PL����A���}H�u0H{PH���i���H�<$tL���J|��H�x1�H�L$dH3%(u	H��[]A\��F��fD��AVAUATUSH��H�� H�/H�wPdH�%(H�D$1�L�d$L�t$�}PL���QA��H�sP�}0L��I���?A���}L��H{PH���
�H�|$tL���{��H�|$tL���{��H�x1�H�L$dH3%(u
H�� []A\A]A^����D��AUATUSH��H��L�'H�wPdH�%(H�D$1�I��A�l$PA�|$0L��H��@��A�|$H��H{PH���l�H�<$tL���
{���}vH���U��H�x1�H�L$dH3%(uH��[]A\A]����f���ATUSH��H��H�/H�wPdH�%(H�D$1�I��}0L���@���}H�UPH{PH�����H�<$tL���zz��H�x1�H�L$dH3%(u	H��[]A\��v��fD��AUATUSH��H��L�/H�wPdH�%(H�D$1�I��A�}PL���?��H�{PA�m0A�UH�H��H�H���L��}vH���T��H�<$tL����y��H�x1�H�L$dH3%(uH��[]A\A]�����f���ATUSH��H��H�/H�wPdH�%(H�D$1�I��}PL����>���}H�u0H{PH����H�<$tL���Zy��H�x1�H�L$dH3%(u	H��[]A\��V��fD��AVAUATUSH��H�� H�/H�wPdH�%(H�D$1�L�d$L�t$�}PL���a>��H�sP�}0L��I���O>���}L��H{PH����H�|$tL���x��H�|$tL���x��H�x1�H�L$dH3%(u
H�� []A\A]A^����D��AUATUSH��H��L�'H�wPdH�%(H�D$1�I��A�l$PA�|$0L��H��=��A�|$H��H{PH���\�H�<$tL���x���}vH���R��H�x1�H�L$dH3%(uH��[]A\A]��	��f���ATUSH��H��H�/H�wPdH�%(H�D$1�I��}0L���=���}H�UPH{PH�����H�<$tL���w��H�x1�H�L$dH3%(u	H��[]A\����fD��AUATUSH��H��L�/H�wPdH�%(H�D$1�I��A�}PL���<��H�{PA�m0A�UH�H��H�H���<��}vH���Q��H�<$tL����v��H�x1�H�L$dH3%(uH��[]A\A]�����f���ATUSH��H��H�/H�wPdH�%(H�D$1�I��}PL���;���}H�u0H{PH����H�<$tL���jv��H�x1�H�L$dH3%(u	H��[]A\��f��fD��AVAUATUSH��H��0L�'H�wPdH�%(H�D$(1�L�l$A�|$0L���t;��A�l$HkPI�|$hI��t@�oEH�@H��H�EH�� ����I�|$hwPI�D$hH�
�zHc�H�>��f�H�T$H�t$L���Ne���D$����foL$MH�D$ H�E�H�|$tL���hu��H�x1�H�L$(dH3%(��H��0[]A\A]A^ÐH���P���c���H�������fDH������fDH������fDH������{���H������k���H���(���[����AoUI�FH��H�EH�� ���7���H���P���*������ff.�f���AVAUATUSH��H�� H�/H�wPdH�%(H�D$1�L�d$L�t$�}PL���9��H�sP�}0L��I���9���}L��H{PH����D��H�|$tL���t��H�|$tL���
t��H�x1�H�L$dH3%(u
H�� []A\A]A^����D��AUATUSH��H��L�'H�wPdH�%(H�D$1�I��A�l$PA�|$0L��H��9��A�|$H��H{PH���LD��H�<$tL���}s���}vH���N��H�x1�H�L$dH3%(uH��[]A\A]��i��f���ATUSH��H��H�/H�wPdH�%(H�D$1�I��}0L���|8���}H�UPH{PH���C��H�<$tL����r��H�x1�H�L$dH3%(u	H��[]A\�����fD��AUATUSH��H��L�/H�wPdH�%(H�D$1�I��A�}PL���7��H�{PA�m0A�UH�H��H�H���,C���}vH���L��H�<$tL���Or��H�x1�H�L$dH3%(uH��[]A\A]��I��f���ATUSH��H��H�/H�wPdH�%(H�D$1�I��}PL���\7���}H�u0H{PH���B��H�<$tL����q��H�x1�H�L$dH3%(u	H��[]A\�����fD��AVAUATUSH��H�� H�/H�wPdH�%(H�D$1�L�d$L�t$�}PL����6��H�sP�}0L��I���6���}L��H{PH���}A��H�|$tL���-q��H�|$tL���q��H�x1�H�L$dH3%(u
H�� []A\A]A^����D��AUATUSH��H��L�'H�wPdH�%(H�D$1�I��A�l$PA�|$0L��H�� 6��A�|$H��H{PH����@��H�<$tL���p���}vH���K��H�x1�H�L$dH3%(uH��[]A\A]��y��f���ATUSH��H��H�/H�wPdH�%(H�D$1�I��}0L���5���}H�UPH{PH���I@��H�<$tL���o��H�x1�H�L$dH3%(u	H��[]A\����fD��AUATUSH��H��L�/H�wPdH�%(H�D$1�I��A�}PL���	5��H�{PA�m0A�UH�H��H�H���?���}vH���J��H�<$tL���_o��H�x1�H�L$dH3%(uH��[]A\A]��Y��f���ATUSH��H��H�/H�wPdH�%(H�D$1�I��}PL���l4���}H�u0H{PH���)?��H�<$tL����n��H�x1�H�L$dH3%(u	H��[]A\�����fD��AVAUATUSH��H�� H�/H�wPdH�%(H�D$1�L�d$L�t$�}PL����3��H�sP�}0L��I����3���}L��H{PH���]>��H�|$tL���=n��H�|$tL���-n��H�x1�H�L$dH3%(u
H�� []A\A]A^��%��D��AUATUSH��H��L�'H�wPdH�%(H�D$1�I��A�l$PA�|$0L��H��03��A�|$H��H{PH���=��H�<$tL���m���}vH���/H��H�x1�H�L$dH3%(uH��[]A\A]����f���ATUSH��H��H�/H�wPdH�%(H�D$1�I��}0L���2���}H�UPH{PH���)=��H�<$tL���
m��H�x1�H�L$dH3%(u	H��[]A\����fD��AUATUSH��H��L�/H�wPdH�%(H�D$1�I��A�}PL���2��H�{PA�m0A�UH�H��H�H���<���}vH���G��H�<$tL���ol��H�x1�H�L$dH3%(uH��[]A\A]��i��f���ATUSH��H��H�/H�wPdH�%(H�D$1�I��}PL���|1���}H�u0H{PH���	<��H�<$tL����k��H�x1�H�L$dH3%(u	H��[]A\�����fD��AVAUATUSH��H�� H�/H�wPdH�%(H�D$1�L�d$L�t$�}PL����0��H�sP�}0L��I����0���}L��H{PH���?��H�|$tL���Mk��H�|$tL���=k��H�x1�H�L$dH3%(u
H�� []A\A]A^��5��D��AUATUSH��H��L�'H�wPdH�%(H�D$1�I��A�l$PA�|$0L��H��@0��A�|$H��H{PH���|>��H�<$tL���j���}vH���?E��H�x1�H�L$dH3%(uH��[]A\A]����f���ATUSH��H��H�/H�wPdH�%(H�D$1�I��}0L���/���}H�UPH{PH����=��H�<$tL���j��H�x1�H�L$dH3%(u	H��[]A\����fD��AUATUSH��H��L�/H�wPdH�%(H�D$1�I��A�}PL���)/��H�{PA�m0A�UH�H��H�H���\=���}vH���.D��H�<$tL���i��H�x1�H�L$dH3%(uH��[]A\A]��y��f���ATUSH��H��H�/H�wPdH�%(H�D$1�I��}PL���.���}H�u0H{PH����<��H�<$tL���h��H�x1�H�L$dH3%(u	H��[]A\����fD��AVAUATUSH��H�� H�/H�wPdH�%(H�D$1�L�d$L�t$�}PL���.��H�sP�}0L��I����-���}L��H{PH���m:��H�|$tL���]h��H�|$tL���Mh��H�x1�H�L$dH3%(u
H�� []A\A]A^��E��D��AUATUSH��H��L�'H�wPdH�%(H�D$1�I��A�l$PA�|$0L��H��P-��A�|$H��H{PH����9��H�<$tL���g���}vH���OB��H�x1�H�L$dH3%(uH��[]A\A]����f���ATUSH��H��H�/H�wPdH�%(H�D$1�I��}0L���,���}H�UPH{PH���99��H�<$tL���*g��H�x1�H�L$dH3%(u	H��[]A\��&��fD��AUATUSH��H��L�/H�wPdH�%(H�D$1�I��A�}PL���9,��H�{PA�m0A�UH�H��H�H���8���}vH���>A��H�<$tL���f��H�x1�H�L$dH3%(uH��[]A\A]����f���ATUSH��H��H�/H�wPdH�%(H�D$1�I��}PL���+���}H�u0H{PH���8��H�<$tL���
f��H�x1�H�L$dH3%(u	H��[]A\����fD��AVAUATUSH��H�� H�/H�wPdH�%(H�D$1�L�d$L�t$�}PL���+��H�sP�}0L��I���*���}L��H{PH����H�|$tL���me��H�|$tL���]e��H�x1�H�L$dH3%(u
H�� []A\A]A^��U��D��AUATUSH��H��L�'H�wPdH�%(H�D$1�I��A�l$PA�|$0L��H��`*��A�|$H��H{PH����H�<$tL����d���}vH���_?��H�x1�H�L$dH3%(uH��[]A\A]����f���ATUSH��H��H�/H�wPdH�%(H�D$1�I��}0L����)���}H�UPH{PH���i�H�<$tL���:d��H�x1�H�L$dH3%(u	H��[]A\��6��fD��AUATUSH��H��L�/H�wPdH�%(H�D$1�I��A�}PL���I)��H�{PA�m0A�UH�H��H�H�����}vH���N>��H�<$tL���c��H�x1�H�L$dH3%(uH��[]A\A]����f���ATUSH��H��H�/H�wPdH�%(H�D$1�I��}PL���(���}H�u0H{PH���I�H�<$tL���c��H�x1�H�L$dH3%(u	H��[]A\����fD��ATUSH��H��H�/H�wPdH�%(H�D$1�I��}0L���,(���}H{PH���]�H�<$tL���b��H�x1�H�L$dH3%(u	H��[]A\����f.���ATUSH��H��H�/H�wPdH�%(H�D$1�I��}0L���'���}H{PH���M�H�<$tL���b��H�x1�H�L$dH3%(u	H��[]A\����f.�AU��ATUSH��H��`�dH�%(H�D$1�H���H�@XH�,�H�EH��t%H�L$dH3%(�H��[]A\A]�fDH��0H�A��I��H���H�@XL�,�A�EI�MI�u�P�������tH�E뜐A��w�H�WfJc�H�>��f�I�UH�5�n�1��J��H�C�CI�MA�H�$H���A�EjUI�u�PL�D$���ZH�EY�$���f�H�C �����I�U1��H�5n�IJ��H�C ������ff.�AWAVAUI��ATUH��SH��XL�>dH�%(H�D$H1�I�GhH=���H=��H�\$ H�vPA�0H���X�H��tH�|$ H���z��I�uPA�PL�d$(L���u%��I�uPA�0H��I����A���A�1�L��H��I}P��I�uPH�T$81�I����
*��H�D$A����������OH�D$0H�5ot�1��#I��I�UPL��H���a|��H�\$HdH3%(�dH��X[]A\A]A^A_�fDH�vPA�PL�d$(H�\$ L���$��I�uPA�0H��H�D$�9��D$I��M���r���H�`�I�H;H@���yu�A�����y�0H�T$H��H���A�Gu=A�GI�UPL�4I��@A�GIEPH�H���uH�H�PA�GIEPH�PH�H�|$(tL���w^���|$tJH�`�H����CH�|$8H��t@����H��v��8��H�|$0t
H�|$0�&^��H�|$ tH���^��I�Ex1����f.����H�L$�A����H�L$I��oH�QH�PI�>�v�69��I�>�GI��@I��y����H�AH�P@H�������H�xH�����H���H�T$H�D$@H��H�ǃ@��I�L��H�t$@H�@�PHH�|$@�U]�����I�uPA���H�T$0�[��D$I������fDH�@���I�Ex���fD�BH�����@A�GuTH�`�A�GI�UPH�� H�I�UPA�GH�H��@A�GIEPH�H����H�H�PA�GIEPH�PH�H�|$(tL���\��H�|$ tH���}\��I�U�|$H�BxtH��`�H���tI�E1����f�H�|$8�F\���	����H������H�@�fDA����H�D$0�����D$I��������@��H��H���Z�M���ff.�f���H��H��`�Z�-���ff.�f���H��H���Z�
���ff.�f���H��H��p�Z���ff.�f���H��H�ǰ�Z����ff.�f���H��H���Z���ff.�f���H��H����Z���ff.�f���H��H�Ǡ�Z�m���ff.�f���H��H����Z�M���ff.�f���H��H��0�Z�-���ff.�f���H��H���Z�
���ff.�f���AVAUATUH��SH�� H��`�dH�%(H�D$1�H��x0H��0�x9���1��d������I��t
�x�VH��0�x9tIA�|$t	A�D$��u8H�CI9��H�L� A�D$H�E@�xh�vZH�}P�A����O������Ao$I��A�D$A�EA�EA�E<��H�L�(H�E@�xh�w��E`��lH�EpHǃxH����H�L$dH3%(��H�� []A\A]A^�f.���F���I��H����L� A�|$A�D$u����A�D$M�eA�D$��A�D$H�I�UH��N���L���P4���8��������Ao$H�T$L��I��H�t$A�D$A�EA�EA�E�	c��H�T$A��I�D$H�x��H�5�2�1��B��I�D$L��PA�EH�I�UL�(E�������H�|$袡�����D���A�D$�V���I�E�Ao$I�T$H�PI�}�wN�GI�E�@M�e����fD�����H����oH�RH�PH�H�� ���D�#3��I�}��ȼ�H�5�l�1��5A��H�5Q�1��"A��f�AWAVAUATUH��SH��H��8L�>�H�<$L�l$A�0dH�%(H�D$(1��R���H�3A�PL��I�����L��I��A�GHH���[��M�$$A�|$��I�D$H�P8H����L��L���H��H����L� A�|$uYA�D$��vO���H�T$A�D$���H�T$H��Ao,$(I�L$H�HH�:��R�GH��@L�"�Ao$I�D$H��H�CH�� ���oH�:H�$��H�|$tL���FV��H�Ex1�H�L$(dH3%(��H��8[]A\A]A^A_�@I�D$H�HH���6H�x �+1�L��L��рxH�D$�J�oH�@H��H�CH�� ��vH���/1������H��H�D$ H�D$�oH�@H��H�GH�� ��v
�0��H�|$ �GH�$�G��H�D$H�T$ L��L��@I�D$�P H�|$ �LU��H�|$�BU�����D1�H�5�g���>��H�|$tL���U��H�`�H�@ �oH�@H�CH�Ex����H��H�T$�S0��H�T$�z���f�1�H�5'g��]>��H�`�H�@ �o #H�@H�C�H���fDH�PH�R@H�������H���H�|$�W��u)�vH�D$�/��H�|$H�D$H�D$貝��H�D$H�D$�a����/��H�T$H�:����I��f���H��H�WPH���[���f���H��H�WPH�ǰ[�i���f�AWAVI��AUATI��USH��H��8L�.�dH�%(H�D$(1�A�}0��H�A�mPI��A�EH�L��H�H�l$�ǿ��M�/A�}tm1�H�5�e��
=���}wDH�`�H�@ �oH�@H�CI�$x1�H�L$(dH3%(��H��8[]A\A]A^A_�H���-���fD��6���H�T$�o
H�D$�R�@�P�@I�UH�J8H����H��L���H��H����L�(A�}uPA�E��vG���A�E�ʛ��H�E�Aou0I�UH�PH�}����GH�E�@L�m�AoUI�EH��H�CH�� ���H�}A��H�|$�2R��I�$x����I�UH�BH����H�z ��1�H�t$L��ЀxH�D$���oH�@H��H�CH�� ��vH���6-������H��H�D$ H�D$�o 'H�@H��H�GH�� ��v
�,��H�|$ �G�GA��H�D$H�T$ L��H�t$�@I�E�P H�|$ �UQ��H�|$�KQ���
���fDH���,����1�H�5�c��:��H�`�H�@ �o(+H�@H�C����fDH�PH�R@H�������H���H�|$�W��u)�vH�D$�f+��H�|$H�D$H�D$����H�D$H�D$����,��H�}����譵�ff.�f���H��H�WPH���[���f���H��H�WPH�ǰ[�i���f�AWI��AVI��AUI��ATUSH��8L�&�dH�%(H�D$(1�A�|$0��A�\$IH��H���4���H�m�}��H�EI��PH�P8H����L��H���I��H����H�(�}uI�E��vA����E�̘��I��om(H�UH�PI�?���GI��@I�/�oMH�EH��H�CH�� ���KI�?A��I�Ex1�H�L$(dH3%(��H��8[]A\A]A^A_�H�EH�HH���H�x �1�L��H��рxH�D$�+�oH�@H��H�CH�� ��vH���0*������H��H�D$ H�D$�oH�@H��H�GH�� ��v
�)��H�|$ �G�GA��H�D$H�T$ L��H��@H�E�P H�|$ �QN��H�|$�GN�����f�1�H�5�`���7��H�`�H�@ �oH�@H�CI�Ex����f�H���h)�����1�H�5G`��}7��H�`�H�@ �o #H�@H�C�y���fDH�PH�R@H������H���H�|$�W��u)�vH�D$�&(��H�|$H�D$H�D$�Җ��H�D$H�D$�����(��I�?�����n��ff.���H��H�WPH���[���f���H��H�WPH�ǰ[����f�AWAVAUATI��UH��SH��8H��H�<$L�t$�{0dH�%(H�D$(1����I�4$�{PL��I���!��L��I�NjCI$I���ܸ��M�mA�}�mI�EH�P8H����L��L���H��H����L�(A�}uVA�E��vM���H�T$A�E�o���H�T$H��AoEI�MH�HH�:��	�GH��@L�*H�T$L��H�$��C� H�|$tL����K��H�Ex1�H�L$(dH3%(�$H��8[]A\A]A^A_�fDI�EH�HH����H�x ��1�L��L��рxH��H�D$ ��J�z�A�Bu	���hH��H�$��H�T$ L��L��I�T$I�E�P �Cu	I�D$�@H�|$ �'K���2���f�1�H�5w]��4��H�|$tL���J���C����H�`�H�@ I�D$�@���f.�H�T$H�I�D$�@����f.�1�H�5]��=4���C�����H�`�H�@ I�D$�@���f.�H�@H�@@H�����H���H�|$ H�‹G��u)�vH�T$��$��H�|$ H�T$H�T$臓��H�T$H�T$ �����{%��H�T$H�:���fD�J�H�T$����H�T$H�D$ �o
H�RH��H�PH�� ��v
H���)%��H�D$ �@H���@�A���輮�ff.����H��H�WPH���[�y���f���H��H�WPH�ǰ[�Y���f�AWI��AVAUI��ATUH��SH��(H��dH�%(H�D$1��{0�)�L�e�kPI�ƋCL�L��I�H�l$�9���M�6A�~to1�H�5F[��|2���}wF�CuH�`�H�@ I�D$�@I�Ex1�H�L$dH3%(�H��([]A\A]A^A_�f�H���(#���fD�覑��H�T$�oH�D$�R�@�P�@I�VH�J8H����H��L����H��H����L�0A�~uOA�F��vF���A�F�:���H�E�AoI�VH�PH�}��`�GH�E�@L�uL��A��Cu
H�EI�D$�@H�|$�G����DI�VH�BH����H�z ��1�H�t$L���ЀxH��H�D$���U�}�B�Eu	����H��A��H�T$H�t$L��I�T$I�F�P �Cu	I�D$�@H�|$�G��H�|$�G���S����1�H�5_Y��0���C�/���H�`�H�@ I�D$�@����f�H�@H�@@H���Q���H���H�|$H�ŋG��u�v
�@!��H�|$���H�l$����@��!��H�}���f.��U�蓏��H�D$�oUH�UH��H�PH�� ��v
H���!��H�D$�@H���@�����=��ff.�f���H��H�WPH���[���f���H��H�WPH�ǰ[���f�AWI��AVI��AUATUH��SH��(H��dH�%(H�D$1��{0��D�kM/I��H���DZ��M�$$A�|$�_I�D$L�{PH�P8H����L��L���H��H����L� A�|$uYA�D$��vO���H�T$A�D$�Q���H�T$H��Ao$I�L$H�HH�:����GH��@L�"H�T$L��A��C��@H�Ex1�H�L$dH3%(��H��([]A\A]A^A_�fDI�D$H�HH��tzH�x ts1�L��L��рxH��H�D$���J�z�A�Bu	����H��A��H�T$L��L��I�UI�D$�P �CuI�E�@H�|$�"D���M���D1�H�5oV��-���C�+���H�`�H�@ I�E�@����H�T$H�I�E�@���H�@H�@@H���H���H���H�|$H�‹G��u)�vH�T$�3��H�|$H�T$H�T$�ߌ��H�T$H�T$��������H�T$H�:�d���fD�J�H�T$�v���H�T$H�D$�o
H�RH��H�PH�� ��v
H�����H�D$�@H���@������ff.����H��H�WPH���[�	���f���H��H�WPH�ǰ[���f�AWAVAUATI��UH��SH��HH��H�|$L�t$ L�|$(�{0dH�%(H�D$81��}�H�u�{PL��I������H�u1�L��H���H�$���L��H�D$�CHEH�H���d���I�M�y�6H�ChH=��&H�D$0H=���H=���H�AH�@(H����H��H�L$1�H�4$��H�L$I��H�D$0H�����x��A�UA�}�BA�Eu	���)H�L$H�T$L��L��H�D$��H�ChH�L$H=���H=�uH�AH�T$0H��H�4$�P0�Cu
H�D$0H�E�@H�|$0�%A��H��`�H�|$ tL���A��H�|$(H���~@���^H��vj����cD1�H�5�U��m*��H�|$ tL���@��H�|$(H��t@���9H�����CH��`�uH�C H�E�@I�$H���H�Bxt0I�$1�H�t$8dH34%(�wH��H[]A\A]A^A_��H������H�AH�@H���K����1�H�5�T��)���CH��`�����H�C H�E�@����H�AH�P8H����H��H�L$H�4$��H�L$H��I����L�(A�}u\A�E��vS���L�$A�E踈��L�$I��AoMI�UH�PI�8�v����L�$I�8�GI��@M�(L�$H�T$L��L��H�D$��CL�$����I�H��`�H�E�@�������c���fDH�@H�@@H���C���L��H�L$��H�|$0H�L$I�ŋG��u$�v�^��H�|$0H�L$H�L$�
���H�L$L�l$0���L���>���	���H�AH�T$0H��H�4$�P �.���L���h>������A�U�H�L$�}���H�L$H�D$0�AoEI�UH��H�PH�� @��w%�@I���@���f�H�D$0����f�H���h��H�D$0H�L$��@H�Ch������f.�AWAVAUI��ATI��USH��HH��H�|$L�|$ �{0dH�%(H�D$81����I�4$�kP1�H���L��I��H�H�l$(���L��H�D$�CI$H�I��葩��M�6A�~��1�H�5�Q���&���}��H�|$ H��t@���bH�����CH��`�tG�I�UH���H�Bx��I�E1�H�L$8dH3%(��H��H[]A\A]A^A_ÐH�C I�D$�@뱐H���8��H�|$ H���n������D�覅��H�T$(�oH�D$(�R�@�P�@H�ShH�����H�D$0H����,H����7I�FH�@(H���&1�H�t$(L����H��H�D$0H���	�x�'�U�}�B�Eu	����H�T$H��H��H�D$��H�ChH=��EH=�uI�FH�T$0L��H�t$(�P0�CuH�D$0I�D$�@H�|$0�s;��H��`�H�|$(�b;��H�|$ H���d���@����H���L��������B���f�H����J���@����CH��`��Z�������DI�VH�BH������1�H�5�O��u$���CH��`��X���H�C I�D$�@�F���f�L���:���CH��`�������f�I�VH�J8H����H��L����H��H����H�(�}u\�E��vT���H�L$�E�u���H�L$H��oUH�UH�PH�9�v
���H�L$H�9�GH��@H�)H�L$H�T$H��H��H�D$��CH�L$�m���H�H��`�I�D$�@�\����H�@H�@@H������H���H�|$0H�ŋG��u�v
�0��H�|$0���H�l$0���@L���p9���{���I�FH�T$0L��H�t$(�P �����U��k���H�D$0�oMH�UH��H�PH�� ��v
H�����H�D$0�@H���@�+���f.�H�D$0���f�H�Sh������f���AUATUSH��H��H�/dH�%(H�D$1�H�G8H��t H�P0H��tH�Mh�p(H9�v>�@8����uCH�SPH��1��$��H�L$dH3%(�|H��[]A\A]�fDH���D�����t�H�sP�}PI��L������}0�I���.��1��Eu�}H{P�L��H���7��H�<$tL����7��H�x1��p��������ATUSH��H��H�/dH�%(H�D$1�H�G8H��t H�P0H��tH�Mh�p(H9�v@�@8����uEH�SPH��1����H�L$dH3%(��H��[]A\�f.�H���D�����t��EP�HCPH�$�k����I��H�$�oL�$$A$�@A�D$A�D$A�D$�}0���1��Eu�}H{PH�ƹL���6��H����6��H�x1��I������ff.���ATUSH�G8H�/H��t H�P0H��tH�Mh�p(H9�v'�@8����u,[H�WPH��]1�A\�~��f.�H���D�����t�H���}0�L�eP�\��1��Eu�}H{PL��H�ƹ��5��H�x1�[]A\�f���AWAVAUATUH��SH��(H�H�wPdH�%(H�D$1�L�t$D�k�{PL��I��M���H�{h�{0I���������I��H�H�D$H�{htXI��{�Ct4��H�\$�CM��tTA�|$��A�D$H��:Hc�H�>����7�CI��C�H�D$�x���@M��u�I�}H�T$E1�1�A������E1�E1��6v��H�D$�U���@I�4$I�}H�L$E1�A�D$�P�˳��H�|$tL����4��H�Ex1�H�L$dH3%(�SH��([]A\A]A^A_Ð�I,4$I�}H�T$A�E1���n���@I�4$I�}H�T$E1�A���H���x���H�L$H��E1ɺjI�}A�H�5���W��XZ�E�������C�P}��I��oH�SH�PI�?�v�p��I�?�GI��@I��CI��C�9���DH�5���1��e��H�|$�3������fD���|��H�T$�oH�D$�R�@�P�@�����H����������舘����SH�H���xH{P�?��H��[� �����AVAUATI��USH��H�/H�_PdH�%(H�D$1�D�m�EP�}0I�H�H�}h������I��H�H�$H�}htXI�.�}�Et4��H�,$�EH��tT�{���CH��7Hc�H�>��fD���7�EI�.�E�H�$�x���@H��u�I�}H��A�E1��1��5���A1�E1��fs��H�$�V���D�CH�3H��E1�I�}�P�����{vH�����I�$x1�H�L$dH3%(�XH��[]A\A]A^�f.��H,3I�}H��E1�A�������H�3I�}H��A�E1���{���v���fDH��H��E1ɺjI�}A�H�5�����XZ�B���f�����E�z��I��oMH�UH�PI�>�v���I�>�GI��@I�.�EI�.�E�8���@H�5���1����H����0���������z��H�$�oH�$�R�@�P�@�����H���������躕�f.���SH�H���xH{P��<��H��[�0�����AVAUATUH��SH��H�dH�%(H�D$1�D�cLgPH�{h�{0�d��:��I��H�H�$H�{h�%M�.A�}A�Et/��L�,$A�E�{d���CdH�O5Hc�H�>��D���A�EM�.A�E뺐�CXH�sPH��E1�I�<$�P臮��H�Ex1�H�L$dH3%(�mH��[]A\A]A^���H,sPH��I�<$A�E1���8���fDH��H�sP���H��H��E1ɺjI�<$A�H�5j��9��XZ�k���f�H�5���1����H���.���I���H�$�x���@����f�1�E1���o��H�$���D���A�E��w��I��AoMI�UH�PI�>�v�	��I�>�GI��@M�.A�EM�.A�E�Y�����w��H�$�oH�$�R�@�P�@���0���H���	���#����:��f.���SH�H���xH{P�Y:��H��[�����AVAUATE1�USH��H��H�/dH�%(H�D$1�H�G8H��t-H�P0H����H�Mh�p(H9���H��E1�D�A��H�sP�}PI��L�����}0D��I�����1��Eu�}H{P1�E��L��H���"���H�<$tL���C-��H�x1�H�L$dH3%(uH��[]A\A]A^�E1�@8A�������+��ff.���AUE1�ATUSH��H��H�G8L�'H��t&H�P0H��tI�L$h�p(H9�wrH��E1�D�A��A�|$0D��A�l$PHkP���1�A�D$u	A�|$H{PE��H��H���N����}vH�����H�xH��1�[]A\A]��E1�@8A���ff.���AUATE1�USH��H��H�G8H�/H��t%H�P0H��t_H�Mh�p(H9�wSH��E1�D�A�ċ}0D��L�mP���1��Eu�}H{PE��L��H��1�蝲��H�xH��1�[]A\A]�@E1�@8A���ff.���AU�ATUH��SH��L�/dH�%(H�D$1�A�}0�~��H����I��H�H�`�H;X@�F�{u�C�����{��H�CH�P@H����H�xH��H��҃@H��H�$���I�$L��H�4$H�@�PHH����*��A�Eu>A�EH�UPL�$I�$�@A�EHEPH�H����H�H�PA�EHEPH�PH�H�Ex1�H�L$dH3%(��H��[]A\A]�@H�����A�Eu�������C�s��I�$�oH�SH�PI�<$�v	���I�<$�GI�$�@I�$�{�����A�E�[���A�UH�MPH�� H�A�EH�UPH�H��	���f�H�@�!���H�5�=�1��P���ˎ�ff.���AU�ATUH��SH��L�/dH�%(H�D$1�A�}0�~��H����I��H�H�`�H;X@�F�{u�C�����{��H�CH�P@H����H�xH��H��҃@H��H�$����I�$L��H�4$H�@�PHH����(��A�Eu>A�EH�UPL�$I�$�@A�EHEPH�H����H�H�PA�EHEPH�PH�H�Ex1�H�L$dH3%(��H��[]A\A]�@H���@��A�Eu�������C�q��I�$�oH�SH�PI�<$�v	���I�<$�GI�$�@I�$�{�����A�E�[���A�UH�MPH�� H�A�EH�UPH�H��	���f�H�@�!���H�5�;�1��P���ˌ�ff.���AW1�AVAUATUSH��H��HH�/dH�%(H�D$81��}0�Eh�I�t��I��`�I��I�F I9�tAM��t<M�eA�D$<�
<�L�d$ A�D$�PE1���E1�A�T$�9D�E1�E1��0p��I��H�D$ H���oH�@A$I�D$��A�D$�EH�SPL�d�EHCPH�PH�M���4I�EI�EH�P(H����L���I��`�I�����I�EL��PI�����I�E������A��E����H�x1�H�L$8dH3%(��H��H[]A\A]A^A_�f��;g���xI��H�D$ �YA�|$�@������������o��I��H�D$ �oA$�P�A�D$A�T$A�D$���L�d$ E1�E1�����H�D$ H�|$ �h�%��H�x�6���@H�|$ �G<��<��H�5X6�1�����H�`�H�����H�H��xH����I�D$H�����L���5+��I��H����H��@�sM�eL�d$ M���I��@H���	�UhL��L������I��H���I��`�I����J1����H�x�L���f.�L�'M������1�L���Z��M��twH�|$ L�|$0L�t$L�l$(���H�D$�HDE1�E1�L��L��L��L�����<t<t3�D$H�t$(H�|$�P�������t1�L���-��1�L�������u�1�L�������uL��A��HsPH������z���DA�D$E1����I��`��7���@H����)��L�d$ I��H��tH��@L�d$ H�������A�D$���1�H�5�8��
��I���������UPH�K@H��H��H)�H�QHH�����f�A�|$uXA�D$��vN���A�D$�<l��I�E�Ao$I�T$H�PI�}�v	�W���I�}�GI�E�@M�e�Eh�����A�D$M�e����H�G�PpI�������L������A�D$������M�eA�|$A�D$u��wb��A�D$�j���DH���_��I��H�D$ �@���i���DH�`�H��������I�OH��21�1�1�蕔���f������A�D$�.k��I�E�Ao$I�T$H�PI�}�v	�I���I�}�GI�E�@M�eA�D$�F����ӆ���ATI��USH�H�xh=u-H�W8H��t$H�J0H��t�pP;r(���z8�„����X0�I\$P�j���oH���CH��`��E�E�����E9�}1H��(����H�PH��(H�(1�[I�$x]A\���tH�� 1҉�Hc�H���ij��Hc�H�� H��H���f��V�H���|����6����PPH�5B6�1��6
��fD��ATI��USH�H�{h=u-H�G8H��t$H�P0H��t�KP;H(���x8��������ti���oC0H���CD�E�E�E<vH�����H��`�����9�}4H��(����H�PH��(H�(1�[I�$x]A\�f.��tH�� 1҉�Hc�H���Ai��Hc�H�� H��H���f.��A�H���|����&����SPH�55�1��	��fDAVAUATI��USH��dH�%(H�D$1�H�I��L��x0��H��`�H��H�CH9���}���E�P�U����9�}VH��(����H�PH��(H�(H�<$tL������I�$x1�H�L$dH3%(��H��[]A\A]A^Ð�tH�� 1҉�Hc�H���h��Hc�H�� H��H���x������g���oEI��H�EH��I�FH�� A�FA�F��wL�������DL��L���}���A�F�P������&g���H��H���oH�@MH�E�E�������fD��AUATI��USH��dH�%(H�D$1�H�H�xh=u-H�W8H��t$H�J0H��t�pP;r(��z8�„��I�t$P�x0I��L������H���xf���oH���C�E�E�E<vH�����H��`�����9�}YH��(����H�PH��(H�(H�<$tL������I�$x1�H�L$dH3%(uH��[]A\A]�f.��tH�� 1҉�Hc�H���!f��Hc�H�� H��H���u�����V�H���|�������PPH�5�1�1������a����AVAUATI��`�USH�/H��I��$��E0L�uPH�RXL�,�I�uH��t71��Eu�}H{PL��A�1�踢��H�x1�[]A\A]A^�f�I��$0H�@I��$�M��H�AXH�ЋpH�H�VH�0�/��I�t$ ���t�I�u�ff.�@��AWAVAUATUSH��HH�H�|$�CDdH�%(H�L$81�<���oC0H�S@H�|$ H�|$)D$ H�T$0<��H�D$�|$4I���"�CT���*���%���u�������cH�D$A�FI�6E1�1�H�|$�P�a�������A�FI�>�p���L�l$I���M�mpM��toH�D$I9EhudI�E@H��t�P`��~�H�XXD�z�1��H�EH��I9�t�H��L9cu�IcV9Su�I�6H�;�o��u�I�EXH��M�mpM��u�DL;t$thH�D$H�x1�H�L$8dH3%(�BH��H[]A\A]A^A_�H���z���CT������H�L$�CPA�VI�6H�IPH�<�0��L;t$u��|$4v�L���J�������H�D$�|$4I���v����fDH�`�H�H�D$���f�H�D$ L�s0H�D$�;���DH��`�H��0H���H�D$H���K����H�Kb��E1�1ҾH���H��0H��XZH����Э��H��0H���H�D$���H�`�H���H�D$�����}�ff.���AWAVAUATUH��SH��8H�dH�%(H�D$(1�L�l$�CDL�c0<t.�oC0H�S@L�l$)D$H�T$ <�7�|$$M�����CT�������D���T����1����@A�D$I�4$H�L$�P���������CH�UP�DH�ChH���H���@H�D$H�8�xa������CH�UPH��@L���@x���CT���W���H�MP�CPA�T$I�4$H�<��V��H�D$H�����SH�MP�DH�ShH���{H���t���M9����|$$��L������L��M����|$$������]���D�CH�UP�DH�ChH��u@�S1�HUPH��G@H�`�H������D�CH�UP�DH�ChH��t�H��u�CH�UPH�M9��T���H�Ex1�H�t$(dH34%(��H��8[]A\A]A^A_�f�I��`�M��0I���H���*����H�h_��E1�1ҾI���I��0H��XZH������I��0H������f.�H�`�H�������DH�D$H��SHUP�xuH��"����������z���AWAVAUI��ATUSH��HH�dH�%(H�D$81�D�c0LgPA�D$<��Ao$H�|$ H�|$)D$ I�T$H�T$0<��H�D$�|$4I���8�CT���@���;�����������yH�D$A�GI�7E1�1�H�|$�P�w�����tKL;|$�A�|$vL���X�I�Ex1�H�t$8dH34%(��H��H[]A\A]A^A_�fDA�GI�?M��p����I����M�vpM��t�H�D$I9Fhu�I�F@H��t�P`��~�H�XX�J�1���H�EH��H9�t�H��L9Cu�IcW9Su�I�7H�;L�D$H�$��h�H�$L�D$��u�I�FXH���f�H���t���CT��������CPI�MPA�WI�7H�<�5���L;|$���|$4���L���G�����f���H�D$�|$4I���`����fDH�`�H�H�D$�y���f�H�D$ M��H�D$�&���fDH��`�H��0H���H�D$H���5����H�K\��E1�1ҾH���H��0H��XZH����Ч��H��0H���H�D$���H�`�H���H�D$������w�ff.���AWAVAUATUH��SH��HL�'dH�%(H�D$81�A�\$0H_P�C<�+�oL�t$ )D$ H�SH�T$0<�$�|$4M����A�D$T�������o���W����1����CA�EI�uH�L$�P��������A�D$H�UP�DI�D$hH���0H���FH�D$H�8�q[����� A�D$H�UPH��L���8r��A�D$T���R���H�MPA�D$PA�UI�uH�<��K���H�D$H����A�T$H�MP�DI�T$hH����H���m�����L��M�����|$4�����u���DA�D$H�UP�DI�D$hH��uXA�T$1�HUPH�M9�ua�|$4vZL���u��PH�`�H������DA�D$H�UP�DI�D$hH��t�H��uA�D$H�UPH�M9�t��{vH����H�Ex1�H�t$8dH34%(��H��H[]A\A]A^A_�I��L�t$ ���I��`�I��0H���H�������HH�T$�;Y��H�T$E1�H��XZ�H���I��01�H���軤��I��0H�������H�`�H������DH�D$H�A�T$HUP�xuH����D�����t���AVAUI��`�ATUSL�'H��I���A�D$0A�l$PH�RXHoPL�4�I�6H��tR1�A�D$t8A��H������}vH����H�x1�[]A\A]A^��A�|$H{P�DI��0H�@I���M��H�AXH�ЋpH�H�VH�0�A��I�u ����r���I�6�j���ff.����AWAVAUATUH��SH��HL�'H�wPdH�%(H�D$81�L�t$L�l$ A�|$0L�����H���@<t-�oL�l$ )D$ H�SH�T$0<�#�|$4L����A�D$T�������^���V����1����B�CH�3H�L$�P�Ͽ�������A�D$H�UP�DI�D$hH���!H���GH�D$H�8�BW�����!A�D$H�UPH��@L���n��A�D$T���S���H�MPA�D$P�SH�3H�<�����H�D$H����A�T$H�MP�DI�T$hH����H���n����L��L���e��|$4�����u���DA�D$H�UP�DI�D$hH��uXA�T$1�HUPH�L9�ua�|$4vZH���E��PH�`�H������DA�D$H�UP�DI�D$hH��t�H��uA�D$H�UPH�L9�t�H�|$tL���C��H�Ex1�H�L$8dH3%(��H��H[]A\A]A^A_�f�I��`�I��0H���H�������HH�T$�U��H�T$E1�H��XZ�H���I��01�H���蓠��I��0H������H�`�H������DH�D$H�A�T$HUP�xuH��
���D�����qp���AVAUATUH��SH��H��`�L�'dH�%(H�D$1�L�oHL�w8�SP�CT�J9���H�C`���SPH�PH�S`L�0H�C`H�PH�S`L�(H�C`H�PH�S`H�M�t$PE�d$XA�|$I����S��D��L��H��螼��H��8H��D��H��I��薼��L���tp��S��H�$H�ExH�EHH�E81�H�t$dH34%(u?H��[]A\A]A^�D�tH�{X1҉sTHc�H����S��HcKPH�CXH��H�������>o��yS��L��1�H�5���AWE��AVM��AUI��ATI��USH��H��X�~H�L$dH�%(H�D$H1���������WH�D$ I�>H�k�}���S ���L�|$�ML��9�rmH�}����H��t��R���S H�k�z�R��H�EH�K�S �A9�sH�	�ƒ�� �S H�K9�r�BH���C H�S���BH�D$�P���8�oA�})T$0H�@H�D$@t��v
H�|$0�P��|$D�H�D$0H�S�H��C ��|$DvH�|$0�O��A�D$�@H�|$ t
H�|$ ���H�D$HdH3%(��H��X[]A\A]A^A_�H�T$ L���s���H��H����I��`�H�]I;]@�r�C<�FA���tH�|$����{��H�D$H9�tQ�o�S)D$0H�KH�L$@�oH�@H�C�S�CA��t
�{�6�|$DvH�|$0�M�DM������A�D$�����A�D$I�,H�E�@A�D$L�H�H���~H�H�PE�L$M�I�FI�����kt:A���(�A���A���H�E�@�q���f�A���&� A��tA��u�H�D$H9����x��o0)t$0H�@H��H�D$@H�� ��v
H�|$0�$��D$@�{vH���>�fo|$0;H�D$@H�CH�E�a���A�D$�L�H�PH�A�l$L��O���H�EA�D$I�D�@A�D$I�D�@H�C�{ H8A�D$I�D�@A�D$I�\�R��H�A�D$I�D�@�_����H�@�K���H�SH�RHH�������H�t$H�������M��tOA�D$uGA�D$I�U I�A�D$I�H��@A�D$L�H�H����H�H�PE�L$M�I�FI�A������H�|$�������������f�H�D$ ��=���H������DA����H�D$�xt�P����H�EH�D$�@H�E����f.�A������������I�H�S�H��C �H�D$0I9����A�}�����I�?H������M�����fDH���������H�T$H�t$(����A��H�D$H�PH�z���{��H9�tk�o3�S�H�5`�)t$0H�KH�L$@�o8;H�@H�C1��SH�T$(�C��H�|$H�G�P�H�S�|$DvH�|$0�}��DE���'���H�|$(�%M������H�|$0�Vd��������r1��6M��H�E�D���D�{���1�H�5t���A�D$����H��`�A�D$H�� I�A�D$I�H��@A�D$L�H�H���I���H�H�PA�D$I�I�FI����fD��>L��H�EH�D$�@�o H�U"H�@H�B���fD<vH���t��H�D$�o�@H�@H�CH�E���H9������@�k���{v
H���+��H�D$�o(H�5���+H�@H�T$(H�C1��C�C���H�|$H�G�PH�|$�H�S�8���[�����YK��H�EH��H�D$�o(+H�@H��H�CH�� ��vH���j��f.��CH�E���H�@�g����@�{vH���^��I;] tH���K��H�D$H�E������J��H��H�EH�D$�����f�H�T$(H�5��1��
�f.���ATUH��SH��H�H�wPdH�%(H�D$1�I��{PL�����L�MPH�SHH�s(H�{A�H������H�<$tL�����H�Ex1�H�L$dH3%(u	H��[]A\��e�f.����g������SH��H�?A�L�KP�OPH�WHH�w(H��L����H�x1�[�ff.�����f.���SH��H�?A�L�KPH�OPH�WHH�w(H���F���H�x1�[�ff.����f.���AWAVAUATI��USH��XH�H�wPdH�%(H�D$H1�H�D$(�{0H��H�D$�O���PH�D$ �����o)D$0H�@H�D$@H�D$0H�D$�����|$D�eH�D$H�D$ �CT�������^���n�������\H�D$H�D$ H�|$E1�1ɋp�VH�0�ޣ��L�|$ ��tUL;|$�:H�|$ � ���H�|$(t
H�|$����I�$x1�H�t$HdH34%(��H��X[]A\A]A^A_�@A�GI�?M��p�>�I���!f�M�vpM��t�H�D$I9Fh�s���I�F@H��tߋP`��~�H�XX�J�1��DH�EH��H9�t�H��L9ku�IcW9Su�I�7H�;H�$�S�H�$��u�I�FXH��L�|$ �|���@H�|$��^�����f�H������|$D�p�����H�`�H�H�D$�����|$D����L���}�������@H�D$0H�D$�CT���/���H�D$ I�t$P�KP�PH�<H�0�
�L�|$ �[���H��`�H��0H���H�D$H�������H�F��E1�1ҾH���H��0H��XZH�������H��0H���H�D$����H�`�H���H�D$����#b���AWAVAUATUSH��H��H�/H�wPdH�%(H�D$1�I��}PL���6��I��`�I�ƋE0I���H�RXL�<�I�7H��tb1��EtJ1�A�L���Z���H�<$tL���{���H�x1�H�L$dH3%(uiH��[]A\A]A^A_�fD�}H{P��I��0H�@I���M��H�AXH�ЋPH�0H�H��衲��I�u ����b���I�7�Z����a����AVAUATI��`�USH�/H��I��$��U0H�@XL�,�I�EH��t#H�0�}H{P�̌��H�x1�[]A\A]A^�DI��$0H�RI��$�M��H�@XL�4�A�FI�NI�6�P������t	I�E�I�H�5��1����I�t$�ff.���AVAUATI��`�USH�/H��I��$��U0H�@XL�,�I�EH��t#H�0�}H{P蜊��H�x1�[]A\A]A^�DI��$0H�RI��$�M��H�@XL�4�A�FI�NI�6�P�6������t	I�E�I�H�5��1��"�I�t$�ff.���AWAVAUATUSH��H��I��`�H�/I��$��U0L�uPH�@XL�,�I�EH��t1H�0�}L��H{P�Od��H�xH��1�[]A\A]A^A_�f.�I��$0H�RI��$�M��H�@XL�<�A�GI�OI�7�P�^������t	I�E�I�H�5!�1��J�I�t$�r�����AWAVAUATUSH��H��I��`�H�/I��$��U0L�uPH�@XL�,�I�EH��t1H�0�}L��H{P�ώ��H�xH��1�[]A\A]A^A_�f.�I��$0H�RI��$�M��H�@XL�<�A�GI�OI�7�P莯�����t	I�E�I�H�5Q�1��z�I�t$�r�����AWAVAUATUSH��H��I��`�H�/I��$��U0L�uPH�@XL�,�I�EH��t1H�0�}L��H{P译��H�xH��1�[]A\A]A^A_�f.�I��$0H�RI��$�M��H�@XL�<�A�GI�OI�7�P辮�����t	I�E�I�H�5��1���I�t$�r�����AWAVAUATUSH��H��I��`�H�/I��$��U0L�uPH�@XL�,�I�EH��t1H�0�}L��H{P�τ��H�xH��1�[]A\A]A^A_�f.�I��$0H�RI��$�M��H�@XL�<�A�GI�OI�7�P������t	I�E�I�H�5��1����I�t$�r�����AWAVAUATUSH��H��I��`�H�/I��$��U0L�uPH�@XL�,�I�EH��t1H�0�}L��H{P�o���H�xH��1�[]A\A]A^A_�f.�I��$0H�RI��$�M��H�@XL�<�A�GI�OI�7�P�������t	I�E�I�H�5��1��
�I�t$�r�����AWAVAUATUSH��H��I��`�H�/I��$��U0L�uPH�@XL�,�I�EH��t1H�0�}L��H{P���H�xH��1�[]A\A]A^A_�f.�I��$0H�RI��$�M��H�@XL�<�A�GI�OI�7�P�N������t	I�E�I�H�5�1��:��I�t$�r�����AWAVAUATUSH��H��I��`�H�/I��$��U0L�uPH�@XL�,�I�EH��t1H�0�}L��H{P���H�xH��1�[]A\A]A^A_�f.�I��$0H�RI��$�M��H�@XL�<�A�GI�OI�7�P�~������t	I�E�I�H�5A�1��j��I�t$�r�����AWAVAUATUSH��H��I��`�H�/I��$��U0L�uPH�@XL�,�I�EH��t1H�0�}L��H{P�?��H�xH��1�[]A\A]A^A_�f.�I��$0H�RI��$�M��H�@XL�<�A�GI�OI�7�P讪�����t	I�E�I�H�5q�1����I�t$�r������'������AWAVAUATUSH��H��I��`�H�/I��$��U0L�uPH�@XL�,�I�EH��t1H�0�}L��H{P���H�xH��1�[]A\A]A^A_�f.�I��$0H�RI��$�M��H�@XL�<�A�GI�OI�7�P�Ω�����t	I�E�I�H�5��1����I�t$�r�����AWAVAUATUSH��H��I��`�H�/I��$��U0L�uPH�@XL�,�I�EH��t1H�0�}L��H{P���H�xH��1�[]A\A]A^A_�f.�I��$0H�RI��$�M��H�@XL�<�A�GI�OI�7�P������t	I�E�I�H�5���1�����I�t$�r�����AWAVAUATUSH��H��I��`�H�/I��$��U0L�uPH�@XL�,�I�EH��t1H�0�}L��H{P���H�xH��1�[]A\A]A^A_�f.�I��$0H�RI��$�M��H�@XL�<�A�GI�OI�7�P�.������t	I�E�I�H�5��1����I�t$�r�����AWAVAUATUSH��H��I��`�H�/I��$��U0L�uPH�@XL�,�I�EH��t1H�0�}L��H{P���H�xH��1�[]A\A]A^A_�f.�I��$0H�RI��$�M��H�@XL�<�A�GI�OI�7�P�^������t	I�E�I�H�5!��1��J��I�t$�r�����AWAVAUATUSH��H��I��`�H�/I��$��U0L�uPH�@XL�,�I�EH��t1H�0�}L��H{P�r��H�xH��1�[]A\A]A^A_�f.�I��$0H�RI��$�M��H�@XL�<�A�GI�OI�7�P莦�����t	I�E�I�H�5Q��1��z��I�t$�r�����AWAVAUATUSH��H��I��`�H�/I��$��U0L�uPH�@XL�,�I�EH��t1H�0�}L��H{P�y��H�xH��1�[]A\A]A^A_�f.�I��$0H�RI��$�M��H�@XL�<�A�GI�OI�7�P辥�����t	I�E�I�H�5���1����I�t$�r�����AWAVAUATUSH��H��I��`�H�/I��$��U0L�uPH�@XL�,�I�EH��t1H�0�}L��H{P菋��H�xH��1�[]A\A]A^A_�f.�I��$0H�RI��$�M��H�@XL�<�A�GI�OI�7�P������t	I�E�I�H�5���1�����I�t$�r�����AWAVAUATUSH��H��I��`�H�/I��$��U0L�uPH�@XL�,�I�EH��t1H�0�}L��H{P词��H�xH��1�[]A\A]A^A_�f.�I��$0H�RI��$�M��H�@XL�<�A�GI�OI�7�P�������t	I�E�I�H�5��1��
��I�t$�r�����AWAVAUATUSH��H��I��`�H�/I��$��U0L�uPH�@XL�,�I�EH��t1H�0�}L��H{P�__��H�xH��1�[]A\A]A^A_�f.�I��$0H�RI��$�M��H�@XL�<�A�GI�OI�7�P�N������t	I�E�I�H�5��1��:��I�t$�r�����AWAVAUATUSH��H��I��`�H�/I��$��U0L�uPH�@XL�,�I�EH��t1H�0�}L��H{P�Of��H�xH��1�[]A\A]A^A_�f.�I��$0H�RI��$�M��H�@XL�<�A�GI�OI�7�P�~������t	I�E�I�H�5A��1��j��I�t$�r�����AVAUATI��`�USH�/H��I��$��UPH�@XL�,�I�EH��t+H��}H�u0H{P�U��H�x1�[]A\A]A^�f�I��$0H�RI��$�M��H�@XL�4�A�FI�NI�6�P辡�����t	I�E�I�H�5���1����I�T$�x�����AVAUATI��`�USH�/H��I��$��UPH�@XL�,�I�EH��t+H��}H�u0H{P�]��H�x1�[]A\A]A^�f�I��$0H�RI��$�M��H�@XL�4�A�FI�NI�6�P������t	I�E�I�H�5���1�����I�T$�x�����AVAUATI��`�USH�/H��I��$��UPH�@XL�,�I�EH��t+H��}H�u0H{P�d��H�x1�[]A\A]A^�f�I��$0H�RI��$�M��H�@XL�4�A�FI�NI�6�P�>������t	I�E�I�H�5��1��*��I�T$�x�����AVAUATI��`�USH�/H��I��$��UPH�@XL�,�I�EH��t+H��}H�u0H{P�j��H�x1�[]A\A]A^�f�I��$0H�RI��$�M��H�@XL�4�A�FI�NI�6�P�~������t	I�E�I�H�5A��1��j��I�T$�x�����AVAUATI��`�USH�/H��I��$��UPH�@XL�,�I�EH��t+H��}H�u0H{P�xr��H�x1�[]A\A]A^�f�I��$0H�RI��$�M��H�@XL�4�A�FI�NI�6�P辞�����t	I�E�I�H�5���1����I�T$�x�����AVAUATI��`�USH�/H��I��$��UPH�@XL�,�I�EH��t+H��}H�u0H{P蘄��H�x1�[]A\A]A^�f�I��$0H�RI��$�M��H�@XL�4�A�FI�NI�6�P������t	I�E�I�H�5���1�����I�T$�x�����AVAUATI��`�USH�/H��I��$��UPH�@XL�,�I�EH��t+H��}H�u0H{P�Ȇ��H�x1�[]A\A]A^�f�I��$0H�RI��$�M��H�@XL�4�A�FI�NI�6�P�>������t	I�E�I�H�5��1��*��I�T$�x�����AVAUATI��`�USH�/H��I��$��UPH�@XL�,�I�EH��t+H��}H�u0H{P�ȉ��H�x1�[]A\A]A^�f�I��$0H�RI��$�M��H�@XL�4�A�FI�NI�6�P�~������t	I�E�I�H�5A��1��j��I�T$�x�����AVAUATI��`�USH�/H��I��$��UPH�@XL�,�I�EH��t+H��}H�u0H{P�x���H�x1�[]A\A]A^�f�I��$0H�RI��$�M��H�@XL�4�A�FI�NI�6�P辛�����t	I�E�I�H�5���1����I�T$�x�����AVAUATI��`�USH�/H��I��$��UPH�@XL�,�I�EH��t+H��}H�u0H{P�x���H�x1�[]A\A]A^�f�I��$0H�RI��$�M��H�@XL�4�A�FI�NI�6�P������t	I�E�I�H�5���1�����I�T$�x�����AVAUATI��`�USH�/H��I��$��UPH�@XL�,�I�EH��t+H��}H�u0H{P�ȳ��H�x1�[]A\A]A^�f�I��$0H�RI��$�M��H�@XL�4�A�FI�NI�6�P�>������t	I�E�I�H�5��1��*��I�T$�x������7������AVAUATI��`�USH�/H��I��$��UPH�@XL�,�I�EH��t+H��}H�u0H{P�8���H�x1�[]A\A]A^�f�I��$0H�RI��$�M��H�@XL�4�A�FI�NI�6�P�n������t	I�E�I�H�51��1��Z��I�T$�x�����AVAUATI��`�USH�/H��I��$��UPH�@XL�,�I�EH��t+H��}H�u0H{P訲��H�x1�[]A\A]A^�f�I��$0H�RI��$�M��H�@XL�4�A�FI�NI�6�P讘�����t	I�E�I�H�5q��1����I�T$�x�����AVAUATI��`�USH�/H��I��$��UPH�@XL�,�I�EH��t+H��}H�u0H{P�h���H�x1�[]A\A]A^�f�I��$0H�RI��$�M��H�@XL�4�A�FI�NI�6�P������t	I�E�I�H�5���1�����I�T$�x�����AVAUATI��`�USH�/H��I��$��UPH�@XL�,�I�EH��t+H��}H�u0H{P��r��H�x1�[]A\A]A^�f�I��$0H�RI��$�M��H�@XL�4�A�FI�NI�6�P�.������t	I�E�I�H�5���1����I�T$�x�����AVAUATI��`�USH�/H��I��$��UPH�@XL�,�I�EH��t+H��}H�u0H{P�u��H�x1�[]A\A]A^�f�I��$0H�RI��$�M��H�@XL�4�A�FI�NI�6�P�n������t	I�E�I�H�51��1��Z��I�T$�x�����AVAUATI��`�USH�/H��I��$��UPH�@XL�,�I�EH��t+H��}H�u0H{P�x��H�x1�[]A\A]A^�f�I��$0H�RI��$�M��H�@XL�4�A�FI�NI�6�P讕�����t	I�E�I�H�5q��1����I�T$�x�����AVAUATI��`�USH�/H��I��$��UPH�@XL�,�I�EH��t+H��}H�u0H{P��k��H�x1�[]A\A]A^�f�I��$0H�RI��$�M��H�@XL�4�A�FI�NI�6�P������t	I�E�I�H�5���1�����I�T$�x�����AWAVAUATUSH��H��I��`�H�/I��$��E0L�uPH�RXL�,�I�uH��t11��Eu�}H{PL��E1�1��d��H�xH��1�[]A\A]A^A_�I��$0H�@I��$�M��H�AXL�<�A�GI�OI�7�P�������t	I�u�I�H�5���1��
��I�t$ �o�����AVAUATI��`�UH��SH�I��$��SPH�@XL�,�I�EH��t3H�L�MPH�SHH�s(A�H�{�
��[H�Ex1�]A\A]A^�DI��$0H�RI��$�M��H�@XL�4�A�FI�NI�6�P�V������t	I�E�I�H�5��1��B��I�L$�p�������'������AVAUATI��`�USH�/H��I��$��UPH�@XL�,�I�EH��t+H�H�{P�u0�EH�H�����H�x1�[]A\A]A^�@I��$0H�RI��$�M��H�@XL�4�A�FI�NI�6�P�~������t	I�E�I�H�5A��1��j��I�T$�x�����AUATUSH��H��H�H��`��P0H���H�@XL�$�I�$H��tJH�8�u1H���(��PH�=���g��H�xH��1�[]A\A]�fD軷����f�H��0H�RH���M��H�@XL�,�A�EI�MI�u�P蟑�����t
I�$�w����I�U�H�5[�1����H�}�Y�����AWAVAUATUH��SH��H��`�L�'dH�%(H�D$1�L�oHL�w8�SP�CT�J9���H�C`���SPH�PH�S`L�0H�C`H�PH�S`L�(H�C`H�PH�S`H�E�d$PLePA�|$��E�l$M�<$A�}I���g#��D��L��H������H��8H��D��H��I������L���t~�d#��A�|$vL��蔴��H�$H�ExH�EHH�E81�H�t$dH34%(upH��[]A\A]A^A_�fD�tH�{X1҉sTHc�H���/#��HcKPH�CXH��H�������"��L���1�H�5=����H�5Q��1�����x>����AVAUATI��`�USH�/H��I��$��U0H�@XL�,�I�EH��t3H�8��"���UH�KPH�H��EH�SP�D1�H�x[]A\A]A^�I��$0H�RI��$�M��H�@XL�4�A�FI�NI�6�P�F������t	I�E�I��H�5�1��2��I�|$�p������AVAUATUH��SH��`�L�'L�oH�SP�CTL�w8�J9���H�C`���SPH�PH�S`L�0H�C`H�PH�S`L�(H�C`H�PH�S`H�H�UPA�D$0L�$I��$�H����H��XH��t���I��$�H;Bt
�B��H�U8�Bu&H��XH�EHH��t�@[H�Ex1�]A\A]A^�f�[H�EH1�H�Ex]A\A]A^���tH�{X1҉sTHc�H��� ��HcKPH�CXH��H���	���I�T$H�5L��@1�����I��$�H�U8�B�\����H�5!��1����ff.�f���AWAVAUATUSH��H��I��`�H�/I��$��MPH�@XL�,�I�UH��t=L�*�U0L�4�I�H��t{H�0�}L��H{P���H�xH��1�[]A\A]A^A_�@I��$0H�II��$�M��H�@XL�4�A�FI�NI�6�P������taI��$�I�UH�@X�w���@I��$0H�RI��$�M��H�@XL�<�A�GI�OI�7�P薌�����tAI��F���f�I�1��M�l$H�5E��u���I��$�H�@X����@I�H�5!��1��J���I�t$����AWAVAUATUSH��H��I��`�H�/I��$��MPH�@XL�,�I�UH��t=L�*�U0L�4�I�H��t{H�0�}L��H{P����H�xH��1�[]A\A]A^A_�@I��$0H�II��$�M��H�@XL�4�A�FI�NI�6�P膋�����taI��$�I�UH�@X�w���@I��$0H�RI��$�M��H�@XL�<�A�GI�OI�7�P�6������tAI��F���f�I�1��M�l$H�5������I��$�H�@X����@I�H�5���1����I�t$����AWAVAUATUSH��H��I��`�H�/I��$��MPH�@XL�,�I�UH��t=L�*�U0L�4�I�H��t{H�0�}L��H{P��]��H�xH��1�[]A\A]A^A_�@I��$0H�II��$�M��H�@XL�4�A�FI�NI�6�P�&������taI��$�I�UH�@X�w���@I��$0H�RI��$�M��H�@XL�<�A�GI�OI�7�P�։�����tAI��F���f�I�1��M�l$H�5��赼��I��$�H�@X����@I�H�5a��1�芼��I�t$����AWAVAUATUSH��H��I��`�H�/I��$��MPH�@XL�,�I�UH��t=L�*�U0L�4�I�H��t{H�0�}L��H{P聤��H�xH��1�[]A\A]A^A_�@I��$0H�II��$�M��H�@XL�4�A�FI�NI�6�P�ƈ�����taI��$�I�UH�@X�w���@I��$0H�RI��$�M��H�@XL�<�A�GI�OI�7�P�v������tAI��F���f�I�1��M�l$H�5%��U���I��$�H�@X����@I�H�5��1��*���I�t$����AWAVAUATUSH��H��I��`�H�/I��$��MPH�@XL�,�I�UH��t=L�*�U0L�4�I�H��t{H�0�}L��H{P���H�xH��1�[]A\A]A^A_�@I��$0H�II��$�M��H�@XL�4�A�FI�NI�6�P�f������taI��$�I�UH�@X�w���@I��$0H�RI��$�M��H�@XL�<�A�GI�OI�7�P�������tAI��F���f�I�1��M�l$H�5�����I��$�H�@X����@I�H�5���1��ʹ��I�t$����AWAVAUATUSH��H��I��`�H�/I��$��MPH�@XL�,�I�UH��t=L�*�U0L�4�I�H��t{H�0�}L��H{P�Qs��H�xH��1�[]A\A]A^A_�@I��$0H�II��$�M��H�@XL�4�A�FI�NI�6�P�������taI��$�I�UH�@X�w���@I��$0H�RI��$�M��H�@XL�<�A�GI�OI�7�P超�����tAI��F���f�I�1��M�l$H�5e�蕸��I��$�H�@X����@I�H�5A��1��j���I�t$����AWAVAUATUSH��H��I��`�H�/I��$��MPH�@XL�,�I�UH��t=L�*�U0L�4�I�H��t{H�0�}L��H{P��c��H�xH��1�[]A\A]A^A_�@I��$0H�II��$�M��H�@XL�4�A�FI�NI�6�P覄�����taI��$�I�UH�@X�w���@I��$0H�RI��$�M��H�@XL�<�A�GI�OI�7�P�V������tAI��F���f�I�1��M�l$H�5��5���I��$�H�@X����@I�H�5���1��
���I�t$����AWAVAUATUSH��H��I��`�H�/I��$��MPH�@XL�,�I�UH��t=L�*�U0L�4�I�H��t{H�0�}L��H{P�!Z��H�xH��1�[]A\A]A^A_�@I��$0H�II��$�M��H�@XL�4�A�FI�NI�6�P�F������taI��$�I�UH�@X�w���@I��$0H�RI��$�M��H�@XL�<�A�GI�OI�7�P������tAI��F���f�I�1��M�l$H�5���յ��I��$�H�@X����@I�H�5���1�誵��I�t$����AWAVAUATUSH��H��I��`�H�/I��$��MPH�@XL�,�I�UH��t=L�*�U0L�4�I�H��t{H�0�}L��H{P��d��H�xH��1�[]A\A]A^A_�@I��$0H�II��$�M��H�@XL�4�A�FI�NI�6�P������taI��$�I�UH�@X�w���@I��$0H�RI��$�M��H�@XL�<�A�GI�OI�7�P薁�����tAI��F���f�I�1��M�l$H�5E��u���I��$�H�@X����@I�H�5!��1��J���I�t$����AWAVAUATUSH��H��I��`�H�/I��$��MPH�@XL�,�I�UH��t=L�*�U0L�4�I�H��t{H�0�}L��H{P����H�xH��1�[]A\A]A^A_�@I��$0H�II��$�M��H�@XL�4�A�FI�NI�6�P膀�����taI��$�I�UH�@X�w���@I��$0H�RI��$�M��H�@XL�<�A�GI�OI�7�P�6������tAI��F���f�I�1��M�l$H�5������I��$�H�@X����@I�H�5���1����I�t$����������AWAVAUATUSH��H��I��`�H�/I��$��MPH�@XL�,�I�UH��t=L�*�U0L�4�I�H��t{H�0�}L��H{P�Z��H�xH��1�[]A\A]A^A_�@I��$0H�II��$�M��H�@XL�4�A�FI�NI�6�P������taI��$�I�UH�@X�w���@I��$0H�RI��$�M��H�@XL�<�A�GI�OI�7�P��~�����tAI��F���f�I�1��M�l$H�5u�襱��I��$�H�@X����@I�H�5Q��1��z���I�t$����AWAVAUATUSH��H��I��`�H�/I��$��MPH�@XL�,�I�UH��t=L�*�U0L�4�I�H��t{H�0�}L��H{P聗��H�xH��1�[]A\A]A^A_�@I��$0H�II��$�M��H�@XL�4�A�FI�NI�6�P�}�����taI��$�I�UH�@X�w���@I��$0H�RI��$�M��H�@XL�<�A�GI�OI�7�P�f}�����tAI��F���f�I�1��M�l$H�5��E���I��$�H�@X����@I�H�5���1�����I�t$����AWAVAUATUSH��H��I��`�H�/I��$��MPH�@XL�,�I�UH��t=L�*�U0L�4�I�H��t{H�0�}L��H{P�A0��H�xH��1�[]A\A]A^A_�@I��$0H�II��$�M��H�@XL�4�A�FI�NI�6�P�V|�����taI��$�I�UH�@X�w���@I��$0H�RI��$�M��H�@XL�<�A�GI�OI�7�P�|�����tAI��F���f�I�1��M�l$H�5�����I��$�H�@X����@I�H�5���1�躮��I�t$����AWAVAUATUSH��H��I��`�H�/I��$��MPH�@XL�,�I�UH��t=L�*�U0L�4�I�H��t{H�0�}L��H{P�>��H�xH��1�[]A\A]A^A_�@I��$0H�II��$�M��H�@XL�4�A�FI�NI�6�P�z�����taI��$�I�UH�@X�w���@I��$0H�RI��$�M��H�@XL�<�A�GI�OI�7�P�z�����tAI��F���f�I�1��M�l$H�5U�腭��I��$�H�@X����@I�H�51��1��Z���I�t$����AWAVAUATUSH��H��I��`�H�/I��$��MPH�@XL�,�I�UH��t=L�*�U0L�4�I�H��t{H�0�}L��H{P�1`��H�xH��1�[]A\A]A^A_�@I��$0H�II��$�M��H�@XL�4�A�FI�NI�6�P�y�����taI��$�I�UH�@X�w���@I��$0H�RI��$�M��H�@XL�<�A�GI�OI�7�P�Fy�����tAI��F���f�I�1��M�l$H�5���%���I��$�H�@X����@I�H�5���1����I�t$����AWAVAUATUSH��H��I��`�H�/I��$��MPH�@XL�,�I�UH��t=L�*�U0L�4�I�H��t{H�0�}L��H{P�A4��H�xH��1�[]A\A]A^A_�@I��$0H�II��$�M��H�@XL�4�A�FI�NI�6�P�6x�����taI��$�I�UH�@X�w���@I��$0H�RI��$�M��H�@XL�<�A�GI�OI�7�P��w�����tAI��F���f�I�1��M�l$H�5���Ū��I��$�H�@X����@I�H�5q��1�蚪��I�t$����AWAVAUATUSH��H��I��`�H�/I��$��MPH�@XL�,�I�UH��t=L�*�U0L�4�I�H��t{H�0�}L��H{P�a`��H�xH��1�[]A\A]A^A_�@I��$0H�II��$�M��H�@XL�4�A�FI�NI�6�P��v�����taI��$�I�UH�@X�w���@I��$0H�RI��$�M��H�@XL�<�A�GI�OI�7�P�v�����tAI��F���f�I�1��M�l$H�55��e���I��$�H�@X����@I�H�5��1��:���I�t$����AWAVAUATUSH��H��I��`�H�/I��$��MPH�@XL�,�I�UH��t=L�*�U0L�4�I�H��t{H�0�}L��H{P��@��H�xH��1�[]A\A]A^A_�@I��$0H�II��$�M��H�@XL�4�A�FI�NI�6�P�vu�����taI��$�I�UH�@X�w���@I��$0H�RI��$�M��H�@XL�<�A�GI�OI�7�P�&u�����tAI��F���f�I�1��M�l$H�5������I��$�H�@X����@I�H�5���1��ڧ��I�t$����AVAUATUH��`�SL�/H��H���A�U0H�@XL�$�I�$H��t;H�8�����tH�x1�[]A\A]A^�H���tVH�H��xH�[1�]A\A]A^ÐH��0H�RH���M��H�@XL�4�A�FI�NI�6�P� t�����tI�$�DI�EP�f.�I��H�5��1����H�}�Y������AVAUATUH��`�SL�/H��H���A�U0H�@XL�$�I�$H��t;H�8������uH�x1�[]A\A]A^�H���tVH�H��xH�[1�]A\A]A^ÐH��0H�RH���M��H�@XL�4�A�FI�NI�6�P�@s�����tI�$�DI�EP�f.�I��H�5��1�����H�}�Y������AWAVAUATUH��SH��(H��`�L�'dH�%(H�D$1�L�oHL�w8�SP�CT�J9���H�C`���SPH�PH�S`L�0H�C`H�PH�S`L�(H�C`L�l$H�PH�S`L��H�H�uPA�|$P�K����x��D�`L�0A�|$I������D��L��H���m��H��8H�L$D��H��I���m��L���t����H�|$tL���x���H�D$H�ExH�EHH�E81�H�L$dH3%(u=H��([]A\A]A^A_Ð�tH�{X1҉sTHc�H�����HcKPH�CXH��H������. ��i��L��1�H�5��蓤��H�5���1�耤����AVAUATUH��SH��`�L�'H���A�T$PH�@XL�,�I�EH��tBH�H�}PA�\$0A�D$H�H��H��$���{vH������[H�Ex1�]A\A]A^�DH��0H�RH���M��H�@XL�4�A�FI�NI�6�P��p�����tI�E�DI�H�5���1�貣��H�S�b���f���AVAUATUH��SH��`�L�'H���A�T$PH�@XL�,�I�EH��tBH�H�}PA�\$0A�D$H�H��H��+���{vH���=���[H�Ex1�]A\A]A^�DH��0H�RH���M��H�@XL�4�A�FI�NI�6�P��o�����tI�E�DI�H�5���1��Ң��H�S�b���f���AVAUATUH��SH��`�L�'H���A�T$PH�@XL�,�I�EH��tBH�H�}PA�\$0A�D$H�H��H���2���{vH���]���[H�Ex1�]A\A]A^�DH��0H�RH���M��H�@XL�4�A�FI�NI�6�P�o�����tI�E�DI�H�5���1���H�S�b���f���AVAUATUH��SH��`�L�'H���A�T$PH�@XL�,�I�EH��tBH�H�}PA�\$0A�D$H�H��H��9���{vH���}���[H�Ex1�]A\A]A^�DH��0H�RH���M��H�@XL�4�A�FI�NI�6�P�(n�����tI�E�DI�H�5���1�����H�S�b���f���AVAUATUH��SH��`�L�'H���A�T$PH�@XL�,�I�EH��tBH�H�}PA�\$0A�D$H�H��H��A���{vH��蝑��[H�Ex1�]A\A]A^�DH��0H�RH���M��H�@XL�4�A�FI�NI�6�P�Hm�����tI�E�DI�H�5	��1��2���H�S�b���f���AVAUATUH��SH��`�L�'H���A�T$PH�@XL�,�I�EH��tBH�H�}PA�\$0A�D$H�H��H��S���{vH��轐��[H�Ex1�]A\A]A^�DH��0H�RH���M��H�@XL�4�A�FI�NI�6�P�hl�����tI�E�DI�H�5)��1��R���H�S�b���f���AVAUATUH��SH��`�L�'H���A�T$PH�@XL�,�I�EH��tBH�H�}PA�\$0A�D$H�H��H��U���{vH���ݏ��[H�Ex1�]A\A]A^�DH��0H�RH���M��H�@XL�4�A�FI�NI�6�P�k�����tI�E�DI�H�5I��1��r���H�S�b���f���AVAUATUH��SH��`�L�'H���A�T$PH�@XL�,�I�EH��tBH�H�}PA�\$0A�D$H�H��H��W���{vH�����[H�Ex1�]A\A]A^�DH��0H�RH���M��H�@XL�4�A�FI�NI�6�P�j�����tI�E�DI�H�5i��1�蒝��H�S�b���f���AVAUATUH��SH��`�L�'H���A�T$PH�@XL�,�I�EH��tBH�H�}PA�\$0A�D$H�H��H�苅���{vH������[H�Ex1�]A\A]A^�DH��0H�RH���M��H�@XL�4�A�FI�NI�6�P��i�����tI�E�DI�H�5���1�貜��H�S�b���f���AVAUATUH��SH��`�L�'H���A�T$PH�@XL�,�I�EH��tBH�H�}PA�\$0A�D$H�H��H��k����{vH���=���[H�Ex1�]A\A]A^�DH��0H�RH���M��H�@XL�4�A�FI�NI�6�P��h�����tI�E�DI�H�5���1��қ��H�S�b���f���AVAUATUH��SH��`�L�'H���A�T$PH�@XL�,�I�EH��tBH�H�}PA�\$0A�D$H�H��H�蛁���{vH���]���[H�Ex1�]A\A]A^�DH��0H�RH���M��H�@XL�4�A�FI�NI�6�P�h�����tI�E�DI�H�5ɾ�1���H�S�b���f���AVAUATUH��SH��`�L�'H���A�T$PH�@XL�,�I�EH��tBH�H�}PA�\$0A�D$H�H��H�����{vH���}���[H�Ex1�]A\A]A^�DH��0H�RH���M��H�@XL�4�A�FI�NI�6�P�(g�����tI�E�DI�H�5��1�����H�S�b���f���AVAUATUH��SH��`�L�'H���A�T$PH�@XL�,�I�EH��tBH�H�}PA�\$0A�D$H�H��H��K����{vH��蝊��[H�Ex1�]A\A]A^�DH��0H�RH���M��H�@XL�4�A�FI�NI�6�P�Hf�����tI�E�DI�H�5	��1��2���H�S�b���f���AVAUATUH��SH��`�L�'H���A�T$PH�@XL�,�I�EH��tBH�H�}PA�\$0A�D$H�H��H������{vH��轉��[H�Ex1�]A\A]A^�DH��0H�RH���M��H�@XL�4�A�FI�NI�6�P�he�����tI�E�DI�H�5)��1��R���H�S�b���f���AVAUATUH��SH��`�L�'H���A�T$PH�@XL�,�I�EH��tBH�H�}PA�\$0A�D$H�H��H��+@���{vH���݈��[H�Ex1�]A\A]A^�DH��0H�RH���M��H�@XL�4�A�FI�NI�6�P�d�����tI�E�DI�H�5I��1��r���H�S�b���f���AVAUATUH��SH��`�L�'H���A�T$PH�@XL�,�I�EH��tBH�H�}PA�\$0A�D$H�H��H���B���{vH�����[H�Ex1�]A\A]A^�DH��0H�RH���M��H�@XL�4�A�FI�NI�6�P�c�����tI�E�DI�H�5i��1�蒖��H�S�b���f���AVAUATUH��SH��`�L�'H���A�T$PH�@XL�,�I�EH��tBH�H�}PA�\$0A�D$H�H��H��E���{vH������[H�Ex1�]A\A]A^�DH��0H�RH���M��H�@XL�4�A�FI�NI�6�P��b�����tI�E�DI�H�5���1�貕��H�S�b���f���AVAUATUH��SH��`�L�'H���A�T$PH�@XL�,�I�EH��tBH�H�}PA�\$0A�D$H�H��H���8���{vH���=���[H�Ex1�]A\A]A^�DH��0H�RH���M��H�@XL�4�A�FI�NI�6�P��a�����tI�E�DI�H�5���1��Ҕ��H�S�b���f���AWAVAUATUSH��H��I��`�L�'I���A�D$0A�l$PHoPH�RXL�4�I�6H��tT1�A�D$t:E1��H���1���}vH���T���H�xH��1�[]A\A]A^A_��A�|$H{P�DI��0H�@I���M��H�AXL�<�A�GI�OI�7�P��`�����tI�6�o���I�H�5���1��ғ��I�u �M���f���AWAVAUATUH��SH��I��`�L�'H�PI���A�T$0A�\$PH�@XH�L�4�I�H��t9H�0A�D$H��H��;���{vH���X���H�ExH��1�[]A\A]A^A_�f�I��0H�RI���M��H�@XL�<�A�GI�OI�7�P�`�����tI�H�}P�f�I�H�5���1����H�}PI�u�g���ff.�f���AWAVAUATUH��SH��I��`�L�'H�PI���A�T$0A�\$PH�@XH�L�4�I�H��t9H�0A�D$H��H��V>���{vH���h���H�ExH��1�[]A\A]A^A_�f�I��0H�RI���M��H�@XL�<�A�GI�OI�7�P�_�����tI�H�}P�f�I�H�5ѵ�1����H�}PI�u�g���ff.�f���AWAVAUATUH��SH��I��`�L�'H�PI���A�T$0A�\$PH�@XH�L�4�I�H��t9H�0A�D$H��H��A���{vH���x���H�ExH��1�[]A\A]A^A_�f�I��0H�RI���M��H�@XL�<�A�GI�OI�7�P� ^�����tI�H�}P�f�I�H�5��1��
���H�}PI�u�g���ff.�f���AWAVAUATUH��SH��I��`�L�'H�PI���A�T$0A�\$PH�@XH�L�4�I�H��t9H�0A�D$H��H��4���{vH��舁��H�ExH��1�[]A\A]A^A_�f�I��0H�RI���M��H�@XL�<�A�GI�OI�7�P�0]�����tI�H�}P�f�I�H�5��1�����H�}PI�u�g���ff.�f���AWAVAUATUH��SH��I��`�L�'H�PI���A�T$0A�\$PH�@XH�L�4�I�H��t9H�0A�D$H��H��6���{vH��蘀��H�ExH��1�[]A\A]A^A_�f�I��0H�RI���M��H�@XL�<�A�GI�OI�7�P�@\�����tI�H�}P�f�I�H�5��1��*���H�}PI�u�g���ff.�f���AWAVAUATUH��SH��I��`�L�'H�PI���A�T$0A�\$PH�@XH�L�4�I�H��t9H�0A�D$H��H��f���{vH�����H�ExH��1�[]A\A]A^A_�f�I��0H�RI���M��H�@XL�<�A�GI�OI�7�P�P[�����tI�H�}P�f�I�H�5��1��:���H�}PI�u�g���ff.�f���AWAVAUATUH��SH��I��`�L�'H�PI���A�T$0A�\$PH�@XH�L�4�I�H��t9H�0A�D$H��H��6���{vH���~��H�ExH��1�[]A\A]A^A_�f�I��0H�RI���M��H�@XL�<�A�GI�OI�7�P�`Z�����tI�H�}P�f�I�H�5!��1��J���H�}PI�u�g���ff.�f���AWAVAUATUH��SH��I��`�L�'H�PI���A�T$0A�\$PH�@XH�L�4�I�H��t9H�0A�D$H��H��$���{vH����}��H�ExH��1�[]A\A]A^A_�f�I��0H�RI���M��H�@XL�<�A�GI�OI�7�P�pY�����tI�H�}P�f�I�H�51��1��Z���H�}PI�u�g���ff.�f���AWAVAUATUH��SH��I��`�L�'H�PI���A�T$0A�\$PH�@XH�L�4�I�H��t9H�0A�D$H��H��F,���{vH����|��H�ExH��1�[]A\A]A^A_�f�I��0H�RI���M��H�@XL�<�A�GI�OI�7�P�X�����tI�H�}P�f�I�H�5A��1��j���H�}PI�u�g���ff.�f���AWAVAUATUH��SH��I��`�L�'H�PI���A�T$0A�\$PH�@XH�L�4�I�H��t9H�0A�D$H��H��6>���{vH����{��H�ExH��1�[]A\A]A^A_�f�I��0H�RI���M��H�@XL�<�A�GI�OI�7�P�W�����tI�H�}P�f�I�H�5Q��1��z���H�}PI�u�g���ff.�f���AWAVAUATUH��SH��I��`�L�'H�PI���A�T$0A�\$PH�@XH�L�4�I�H��t9H�0A�D$H��H��6@���{vH���z��H�ExH��1�[]A\A]A^A_�f�I��0H�RI���M��H�@XL�<�A�GI�OI�7�P�V�����tI�H�}P�f�I�H�5a��1�芉��H�}PI�u�g���ff.�f���AWAVAUATUH��SH��I��`�L�'H�PI���A�T$0A�\$PH�@XH�L�4�I�H��t9H�0A�D$H��H��C���{vH���z��H�ExH��1�[]A\A]A^A_�f�I��0H�RI���M��H�@XL�<�A�GI�OI�7�P�U�����tI�H�}P�f�I�H�5q��1�蚈��H�}PI�u�g���ff.�f���AWAVAUATUH��SH��I��`�L�'H�PI���A�T$0A�\$PH�@XH�L�4�I�H��t9H�0A�D$H��H��p���{vH���y��H�ExH��1�[]A\A]A^A_�f�I��0H�RI���M��H�@XL�<�A�GI�OI�7�P�T�����tI�H�}P�f�I�H�5���1�誇��H�}PI�u�g���ff.�f���AWAVAUATUH��SH��I��`�L�'H�PI���A�T$0A�\$PH�@XH�L�4�I�H��t9H�0A�D$H��H��Vq���{vH���(x��H�ExH��1�[]A\A]A^A_�f�I��0H�RI���M��H�@XL�<�A�GI�OI�7�P��S�����tI�H�}P�f�I�H�5���1�躆��H�}PI�u�g���ff.�f���AWAVAUATUH��SH��I��`�L�'H�PI���A�T$0A�\$PH�@XH�L�4�I�H��t9H�0A�D$H��H��vl���{vH���8w��H�ExH��1�[]A\A]A^A_�f�I��0H�RI���M��H�@XL�<�A�GI�OI�7�P��R�����tI�H�}P�f�I�H�5���1��ʅ��H�}PI�u�g���ff.�f����������AWAVAUATUH��SH��I��`�L�'H�PI���A�T$0A�\$PH�@XH�L�4�I�H��t9H�0A�D$H��H��k���{vH���8v��H�ExH��1�[]A\A]A^A_�f�I��0H�RI���M��H�@XL�<�A�GI�OI�7�P��Q�����tI�H�}P�f�I�H�5���1��ʄ��H�}PI�u�g���ff.�f���AWAVAUATUH��SH��I��`�L�'H�PI���A�T$0A�\$PH�@XH�L�4�I�H��t9H�0A�D$H��H��j���{vH���Hu��H�ExH��1�[]A\A]A^A_�f�I��0H�RI���M��H�@XL�<�A�GI�OI�7�P��P�����tI�H�}P�f�I�H�5���1��ڃ��H�}PI�u�g���ff.�f���AWAVAUATUH��SH��I��`�L�'H�PI���A�T$0A�\$PH�@XH�L�4�I�H��t9H�0A�D$H��H��j���{vH���Xt��H�ExH��1�[]A\A]A^A_�f�I��0H�RI���M��H�@XL�<�A�GI�OI�7�P�P�����tI�H�}P�f�I�H�5���1����H�}PI�u�g���ff.�f���AVAUATI��`�USH�/H��I��$��U0H�@XL�,�I�EH��tCH��o�EH�SPH�IH�L�}H{P�v�>t��H�x1�[]A\A]A^��I��$0H�RI��$�M��H�@XL�4�A�FI�NI�6�P�O�����t	I�E�I�H�5٥�1�����I�L$�`������AUATUSH��H��H��`�H�H��XH�����PPH���H�@XL�$�I�$H��t*H�0�uH�G�PXH�xH��1�[]A\A]�f�H��0H�RH���M��H�@XL�,�A�EI�MI�u�P�?N�����tI�$H��X�DI�UH�5���1��!���H��XH�u�j����\�ff.����AVAUATUH��`�SL�'H��H���A�T$PH�@XL�,�I�EH��tRH�H��X��1�A�D$t'H��X�螖��H�x1�[]A\A]A^��A�|$H{P��DH��0H�RH���M��H�@XL�4�A�FI�NI�6�P�8M�����tI�E�p���f.�I�H�5��1�����H�U�J����\�ff.����AVAUATI��`�USH�/H��I��$��MPH�@XL�,�I�UH����L�*�U0L�4�I�6H��t51��Eu�}H{PL��A�1�����H�x1�[]A\A]A^��I��$0H�RI��$�M��H�@XH�ЋpH�H�VH�0�?L��I�t$ ���t�I�6�I��$0H�II��$�M��H�@XL�4�A�FI�NI�6�P�K�����tI��$�I�UH�@X�-���@I�1��M�l$H�5����~��I��$�H�@X����@��AWAVAUATUSH��H��H�I��`�L�wPH�o@�PPD�h0I��$�H�@XL�<�I�H��tbH�8H�MpH�UHM��D����P��I��$�t!H�H��xH�H��1�[]A\A]A^A_�fDHcPH�K@H��H��H)�H�QHH����@I��$0H�RI��$�M��H�@XL��A�AI�IL�L$I�1�P��J��L�L$���tI��U����I��H�5��1��}��I�|$�1������AWAVAUATUSH��H��H�I��`�L�wPH�o@�PPD�h0I��$�H�@XL�<�I�H��tbH�8H�MpH�UHM��D����O��I��$�t!H�H��xH�H��1�[]A\A]A^A_�fDHcPH�K@H��H��H)�H�QHH����@I��$0H�RI��$�M��H�@XL��A�AI�IL�L$I�1�P�I��L�L$���tI��U����I��H�5d�1��|��I�|$�1������AWAVAUATUSH��H��I��`�H�/I��$��MPH�@XL�,�I�UH����L�*�U0L�4�I�6H��t71��Eu�}H{PL��E1�1��C��H�xH��1�[]A\A]A^A_�fDI��$0H�RI��$�M��H�@XL�<�A�GI�OI�7�P�H�����tYI�6�@I��$0H�II��$�M��H�@XL�4�A�FI�NI�6�P�vH�����tAI��$�I�UH�@X�+���@I�H�5)��1��R{��I�t$ �����I�1��M�l$H�5���%{��I��$�H�@X����@��AWAVAUATUSH��H��(H�/H�wPdH�%(H�D$1�L�d$�}PL���V��I��`�I�ƋE0I���H�RXL�<�I�7H��t`1��EtHE1�1�L������H�|$tL�����H�x1�H�L$dH3%(��H��([]A\A]A^A_�f��}H{P��I��0H�@I���M��H�AXL��A�AI�IL�L$I�1�P�G��L�L$���tI�7�Y���f�I�H�5���1���y��I�u �1����\��ff.����AUATUH��SH��H�H��`��P0H���H�@XL�$�I�$H��tbL� A�|$�������Ao$H��A�D$�C�C�C<vH���%k��H�����H�ExH��1�[]A\A]�H��0H�RH���M��H�@XL�,�A�EI�MI�u�P�E�����tI�$�_���f�I�U�1�L�cH�5����x���9����
��ff.���AWAVAUATUSH��H��(H�/H�wPdH�%(H�D$1�L�d$�}PL���TT��I��`��U0I��I���H�@XL�<�I�H��tPH�0�}L��H{P�.$��H�|$tL��螎��H�x1�H�L$dH3%(��H��([]A\A]A^A_�DI��0H�RI���M��H�@XL��A�AI�IL�L$I�1�P��D��L�L$���tI��i���f�I�H�5���1��w��I�u�D������ff.����AWAVAUATUSH��H��(H�/H�wPdH�%(H�D$1�L�d$�}PL���$S��I��`��U0I��I���H�@XL�<�I�H��tPH�0�}L��H{P�&��H�|$tL���n���H�x1�H�L$dH3%(��H��([]A\A]A^A_�DI��0H�RI���M��H�@XL��A�AI�IL�L$I�1�P�C��L�L$���tI��i���f�I�H�5Q��1��zv��I�u�D�������ff.����AWAVAUATUSH��H��(H�/H�wPdH�%(H�D$1�L�d$�}PL����Q��I��`��U0I��I���H�@XL�<�I�H��tPH�0�}L��H{P�n��H�|$tL���>���H�x1�H�L$dH3%(��H��([]A\A]A^A_�DI��0H�RI���M��H�@XL��A�AI�IL�L$I�1�P�kB��L�L$���tI��i���f�I�H�5!��1��Ju��I�u�D������ff.����AWAVAUATUSH��H��(H�/H�wPdH�%(H�D$1�L�d$�}PL����P��I��`��U0I��I���H�@XL�<�I�H��tPH�0�}L��H{P�.��H�|$tL������H�x1�H�L$dH3%(��H��([]A\A]A^A_�DI��0H�RI���M��H�@XL��A�AI�IL�L$I�1�P�;A��L�L$���tI��i���f�I�H�5��1��t��I�u�D������ff.����AWAVAUATUSH��H��(H�/H�wPdH�%(H�D$1�L�d$�}PL���O��I��`��U0I��I���H�@XL�<�I�H��tPH�0�}L��H{P��[��H�|$tL���މ��H�x1�H�L$dH3%(��H��([]A\A]A^A_�DI��0H�RI���M��H�@XL��A�AI�IL�L$I�1�P�@��L�L$���tI��i���f�I�H�5���1���r��I�u�D����\��ff.����AWAVAUATUSH��H��(H�/H�wPdH�%(H�D$1�L�d$�}PL���dN��I��`��U0I��I���H�@XL�<�I�H��tPH�0�}L��H{P�~\��H�|$tL��讈��H�x1�H�L$dH3%(��H��([]A\A]A^A_�DI��0H�RI���M��H�@XL��A�AI�IL�L$I�1�P��>��L�L$���tI��i���f�I�H�5���1��q��I�u�D����,��ff.����AWAVAUATUSH��H��(H�/H�wPdH�%(H�D$1�L�d$�}PL���4M��I��`��U0I��I���H�@XL�<�I�H��tPH�0�}L��H{P�^W��H�|$tL���~���H�x1�H�L$dH3%(��H��([]A\A]A^A_�DI��0H�RI���M��H�@XL��A�AI�IL�L$I�1�P�=��L�L$���tI��i���f�I�H�5a��1��p��I�u�D������ff.�����������AWAVAUATUSH��H��(H�/H�wPdH�%(H�D$1�L�d$�}PL����K��I��`��U0I��I���H�@XL�<�I�H��tPH�0�}L��H{P�^V��H�|$tL���>���H�x1�H�L$dH3%(��H��([]A\A]A^A_�DI��0H�RI���M��H�@XL��A�AI�IL�L$I�1�P�k<��L�L$���tI��i���f�I�H�5!��1��Jo��I�u�D������ff.����AWAVAUATUSH��H��(H�/H�wPdH�%(H�D$1�L�d$�}PL����J��I��`��U0I��I���H�@XL�<�I�H��tPH�0�}L��H{P�^U��H�|$tL������H�x1�H�L$dH3%(��H��([]A\A]A^A_�DI��0H�RI���M��H�@XL��A�AI�IL�L$I�1�P�;;��L�L$���tI��i���f�I�H�5��1��n��I�u�D������ff.����AWAVAUATUSH��H��(H�/H�wPdH�%(H�D$1�L�d$�}PL���I��I��`��U0I��I���H�@XL�<�I�H��tPH�0�}L��H{P�T��H�|$tL���ރ��H�x1�H�L$dH3%(��H��([]A\A]A^A_�DI��0H�RI���M��H�@XL��A�AI�IL�L$I�1�P�:��L�L$���tI��i���f�I�H�5���1���l��I�u�D����\��ff.����AWAVAUATUSH��H��(H�/H�wPdH�%(H�D$1�L�d$�}PL���dH��I��`��U0I��I���H�@XL�<�I�H��tPH�0�}L��H{P���H�|$tL��讂��H�x1�H�L$dH3%(��H��([]A\A]A^A_�DI��0H�RI���M��H�@XL��A�AI�IL�L$I�1�P��8��L�L$���tI��i���f�I�H�5���1��k��I�u�D����,��ff.����AWAVAUATUSH��H��(H�/H�wPdH�%(H�D$1�L�d$�}PL���4G��I��`��U0I��I���H�@XL�<�I�H��tPH�0�}L��H{P��H�|$tL���~���H�x1�H�L$dH3%(��H��([]A\A]A^A_�DI��0H�RI���M��H�@XL��A�AI�IL�L$I�1�P�7��L�L$���tI��i���f�I�H�5a��1��j��I�u�D������ff.����AWAVAUATUSH��H��(H�/H�wPdH�%(H�D$1�L�d$�}PL���F��I��`��U0I��I���H�@XL�<�I�H��tPH�0�}L��H{P��H�|$tL���N���H�x1�H�L$dH3%(��H��([]A\A]A^A_�DI��0H�RI���M��H�@XL��A�AI�IL�L$I�1�P�{6��L�L$���tI��i���f�I�H�51��1��Zi��I�u�D�������ff.����AWAVAUATUSH��H��(H�/H�wPdH�%(H�D$1�L�d$�}PL����D��I��`��U0I��I���H�@XL�<�I�H��tPH�0�}L��H{P�>���H�|$tL�����H�x1�H�L$dH3%(��H��([]A\A]A^A_�DI��0H�RI���M��H�@XL��A�AI�IL�L$I�1�P�K5��L�L$���tI��i���f�I�H�5��1��*h��I�u�D������ff.����AWAVAUATUSH��H��(H�/H�wPdH�%(H�D$1�L�d$�}PL���C��I��`��U0I��I���H�@XL�<�I�H��tPH�0�}L��H{P���H�|$tL����}��H�x1�H�L$dH3%(��H��([]A\A]A^A_�DI��0H�RI���M��H�@XL��A�AI�IL�L$I�1�P�4��L�L$���tI��i���f�I�H�5ъ�1��f��I�u�D����l��ff.����AWAVAUATUSH��H��(H�/H�wPdH�%(H�D$1�L�d$�}PL���tB��I��`��U0I��I���H�@XL�<�I�H��tPH�0�}L��H{P����H�|$tL���|��H�x1�H�L$dH3%(��H��([]A\A]A^A_�DI��0H�RI���M��H�@XL��A�AI�IL�L$I�1�P��2��L�L$���tI��i���f�I�H�5���1���e��I�u�D����<��ff.����AWAVAUATUSH��H��(H�/H�wPdH�%(H�D$1�L�d$�}PL���DA��I��`��U0I��I���H�@XL�<�I�H��tPH�0�}L��H{P�~��H�|$tL���{��H�x1�H�L$dH3%(��H��([]A\A]A^A_�DI��0H�RI���M��H�@XL��A�AI�IL�L$I�1�P�1��L�L$���tI��i���f�I�H�5q��1��d��I�u�D������ff.����AWAVAUATUSH��H��(H�/H�wPdH�%(H�D$1�L�d$�}PL���@��I��`��U0I��I���H�@XL�<�I�H��tPH�0�}L��H{P�>��H�|$tL���^z��H�x1�H�L$dH3%(��H��([]A\A]A^A_�DI��0H�RI���M��H�@XL��A�AI�IL�L$I�1�P�0��L�L$���tI��i���f�I�H�5A��1��jc��I�u�D�������ff.����AVAUATUSH��H��I��`�H�/dH�%(H�D$1�I��$��UPH�@XL�,�I�EH��t_L�(H�sP�}0I��L����>���}L��H{PH���p�H�<$tL���1y��H�x1�H�L$dH3%(u{H��[]A\A]A^�fDI��$0H�RI��$�M��H�@XL�4�A�FI�NI�6�P�f/�����tI�E�a����I��1�M�l$H�5��Eb���<������ff.���AVAUATUSH��H��I��`�H�/dH�%(H�D$1�I��$��UPH�@XL�,�I�EH��t_L�(H�sP�}0I��L���=���}L��H{PH���p�H�<$tL���x��H�x1�H�L$dH3%(u{H��[]A\A]A^�fDI��$0H�RI��$�M��H�@XL�4�A�FI�NI�6�P�F.�����tI�E�a����I��1�M�l$H�5���%a���<������ff.���AVAUATUSH��H��I��`�H�/dH�%(H�D$1�I��$��UPH�@XL�,�I�EH��t_L�(H�sP�}0I��L���<���}L��H{PH����H�<$tL����v��H�x1�H�L$dH3%(u{H��[]A\A]A^�fDI��$0H�RI��$�M��H�@XL�4�A�FI�NI�6�P�&-�����tI�E�a����I��1�M�l$H�5Ճ�`���<����{��ff.���AVAUATUSH��H��I��`�H�/dH�%(H�D$1�I��$��UPH�@XL�,�I�EH��t_L�(H�sP�}0I��L���b;���}L��H{PH�����H�<$tL����u��H�x1�H�L$dH3%(u{H��[]A\A]A^�fDI��$0H�RI��$�M��H�@XL�4�A�FI�NI�6�P�,�����tI�E�a����I��1�M�l$H�5����^���<����[��ff.���AVAUATUSH��H��I��`�H�/dH�%(H�D$1�I��$��UPH�@XL�,�I�EH��t_L�(H�sP�}0I��L���B:���}L��H{PH�����H�<$tL���t��H�x1�H�L$dH3%(u{H��[]A\A]A^�fDI��$0H�RI��$�M��H�@XL�4�A�FI�NI�6�P��*�����tI�E�a����I��1�M�l$H�5����]���<����;��ff.���AVAUATUSH��H��I��`�H�/dH�%(H�D$1�I��$��UPH�@XL�,�I�EH��t_L�(H�sP�}0I��L���"9���}L��H{PH�����H�<$tL���s��H�x1�H�L$dH3%(u{H��[]A\A]A^�fDI��$0H�RI��$�M��H�@XL�4�A�FI�NI�6�P��)�����tI�E�a����I��1�M�l$H�5u��\���<������ff.���AVAUATUSH��H��I��`�H�/dH�%(H�D$1�I��$��UPH�@XL�,�I�EH��t_L�(H�sP�}0I��L���8���}L��H{PH���P��H�<$tL���qr��H�x1�H�L$dH3%(u{H��[]A\A]A^�fDI��$0H�RI��$�M��H�@XL�4�A�FI�NI�6�P�(�����tI�E�a����I��1�M�l$H�5U�[���<������ff.���AVAUATUSH��H��I��`�H�/dH�%(H�D$1�I��$��UPH�@XL�,�I�EH��t_L�(H�sP�}0I��L����6���}L��H{PH������H�<$tL���Qq��H�x1�H�L$dH3%(u{H��[]A\A]A^�fDI��$0H�RI��$�M��H�@XL�4�A�FI�NI�6�P�'�����tI�E�a����I��1�M�l$H�55~�eZ���<�������ff.���AVAUATUSH��H��I��`�H�/dH�%(H�D$1�I��$��UPH�@XL�,�I�EH��t_L�(H�sP�}0I��L����5���}L��H{PH���@B��H�<$tL���1p��H�x1�H�L$dH3%(u{H��[]A\A]A^�fDI��$0H�RI��$�M��H�@XL�4�A�FI�NI�6�P�f&�����tI�E�a����I��1�M�l$H�5}�EY���<������ff.���AVAUATUSH��H��I��`�H�/dH�%(H�D$1�I��$��UPH�@XL�,�I�EH��t_L�(H�sP�}0I��L���4���}L��H{PH����B��H�<$tL���o��H�x1�H�L$dH3%(u{H��[]A\A]A^�fDI��$0H�RI��$�M��H�@XL�4�A�FI�NI�6�P�F%�����tI�E�a����I��1�M�l$H�5�{�%X���<������ff.���AVAUATUSH��H��I��`�H�/dH�%(H�D$1�I��$��UPH�@XL�,�I�EH��t_L�(H�sP�}0I��L���3���}L��H{PH����=��H�<$tL����m��H�x1�H�L$dH3%(u{H��[]A\A]A^�fDI��$0H�RI��$�M��H�@XL�4�A�FI�NI�6�P�&$�����tI�E�a����I��1�M�l$H�5�z�W���<����{��ff.���AVAUATUSH��H��I��`�H�/dH�%(H�D$1�I��$��UPH�@XL�,�I�EH��t_L�(H�sP�}0I��L���b2���}L��H{PH����<��H�<$tL����l��H�x1�H�L$dH3%(u{H��[]A\A]A^�fDI��$0H�RI��$�M��H�@XL�4�A�FI�NI�6�P�#�����tI�E�a����I��1�M�l$H�5�y��U���<����[��ff.���AVAUATUSH��H��I��`�H�/dH�%(H�D$1�I��$��UPH�@XL�,�I�EH��t_L�(H�sP�}0I��L���B1���}L��H{PH���<��H�<$tL���k��H�x1�H�L$dH3%(u{H��[]A\A]A^�fDI��$0H�RI��$�M��H�@XL�4�A�FI�NI�6�P��!�����tI�E�a����I��1�M�l$H�5�x��T���<����;��ff.���AVAUATUSH��H��I��`�H�/dH�%(H�D$1�I��$��UPH�@XL�,�I�EH��t_L�(H�sP�}0I��L���"0���}L��H{PH���`;��H�<$tL���j��H�x1�H�L$dH3%(u{H��[]A\A]A^�fDI��$0H�RI��$�M��H�@XL�4�A�FI�NI�6�P�� �����tI�E�a����I��1�M�l$H�5uw�S���<������ff.���AVAUATUSH��H��I��`�H�/dH�%(H�D$1�I��$��UPH�@XL�,�I�EH��t_L�(H�sP�}0I��L���/���}L��H{PH���`���H�<$tL���qi��H�x1�H�L$dH3%(u{H��[]A\A]A^�fDI��$0H�RI��$�M��H�@XL�4�A�FI�NI�6�P������tI�E�a����I��1�M�l$H�5Uv�R���<������ff.���AVAUATUSH��H��I��`�H�/dH�%(H�D$1�I��$��UPH�@XL�,�I�EH��t_L�(H�sP�}0I��L����-���}L��H{PH�����H�<$tL���Qh��H�x1�H�L$dH3%(u{H��[]A\A]A^�fDI��$0H�RI��$�M��H�@XL�4�A�FI�NI�6�P������tI�E�a����I��1�M�l$H�55u�eQ���<�������ff.���AVAUATUSH��H��I��`�H�/dH�%(H�D$1�I��$��UPH�@XL�,�I�EH��t_L�(H�sP�}0I��L����,���}L��H{PH���p��H�<$tL���1g��H�x1�H�L$dH3%(u{H��[]A\A]A^�fDI��$0H�RI��$�M��H�@XL�4�A�FI�NI�6�P�f�����tI�E�a����I��1�M�l$H�5t�EP���<������ff.���AVAUATUSH��H��I��`�H�/dH�%(H�D$1�I��$��UPH�@XL�,�I�EH��t_L�(H�sP�}0I��L���+���}L��H{PH���@�H�<$tL���f��H�x1�H�L$dH3%(u{H��[]A\A]A^�fDI��$0H�RI��$�M��H�@XL�4�A�FI�NI�6�P�F�����tI�E�a����I��1�M�l$H�5�r�%O���<������ff.���AVAUATI��`�USH�/H��I��$��U0H�@XL�,�I�EH��t[H�8����UH�KPHc�H�4�UH�KP�D��tH�x1�[]A\A]A^�fDI��$�tUH�H��xH�[1�]A\A]A^�I��$0H�RI��$�M��H�@XL�4�A�FI�NI�6�P�>�����tI�E�e���H�EP�f.�I��H�5�q1��N��I�|$�8�����AVAUATI��`�USH�/H��I��$��U0H�@XL�,�I�EH��t[H�8����UH�KPHc�H�4�UH�KP�D��uH�x1�[]A\A]A^�fDI��$�tUH�H��xH�[1�]A\A]A^�I��$0H�RI��$�M��H�@XL�4�A�FI�NI�6�P�>�����tI�E�e���H�EP�f.�I��H�5�p1��M��I�|$�8�����AVAUATUH��SH��`�L�'L�oH�SP�CTL�w8�J9��>H�C`���SPH�PH�S`L�0H�C`H�PH�S`L�(H�C`H�PH�S`H�A�D$0H�UPI�t$PL�,H����A�T$XL���H��H�E8�@��H��XH����H�GH�������h��L��H���
����uIH�U8H�
�pL��pH�5�x�B%LD���H�BH�J������H�P1�����K��H��XH�}HH��t"�G1�[H�Ex]A\A]A^�fDH�EH[H�Ex1�]A\A]A^�H�E8�,�����tH�{X1҉sTHc�H���w���HcKPH�CXH��H�����H�}H�f.���AUATUSH��H��(H��`�dH�%(H�D$1�H��P0H���H�@XL�$�I�$H��tzH�(�}u"H�EH�xxtI��H��L��������t/H���=��H�x1�H�t$dH34%(��H��([]A\A]�f�L���=���|$v�L���;����H��0H�RH���M��H�@XL�,�A�EI�MI�u�P�_�����t
I�$�G����I�U�1�H��H�5n�EJ���)������ff.���H�H�OP�PH��@H�WP�D���f���AVAUATUH��`�SL�'H��H���A�T$0H�@XL�,�I�EH��tjH�8�ҩ����u&H�����H�H��xH�[1�]A\A]A^�H���u�H�K@I�T$hH��H��H)�H�QHH��H�[1�]A\A]A^�DH��0H�RH���M��H�@XL�4�A�FI�NI�6�P� �����tI�E�X���f�H�K@A�T$P�DI��H�5�l1��H��H�}�*������AVAUATI��`�USH�/H��I��$��U0H�@XL�,�I�EH��tsH�81ҀH�CPt,�M�D�EH�KPH�1�H�x[]A\A]A^�f.�H�OH���tƋUPL�$��d��H��L������1҄�H�CP���fDI��$0H�RI��$�M��H�@XL�4�A�FI�NI�6�P������tI�E�M����I��H�5�k1���G��I�|$�(�����AVAUATI��`�USH�/H��I��$��UPH�@XL�,�I�EH��tkH�8�G<t8<��H�Uh�wH�?D�eLcP����I�$1�H�x[]A\A]A^�fD�mHkP��c��H�E1�H�x[]A\A]A^�f�I��$0H�RI��$�M��H�@XL�4�A�FI�NI�6�P������t	I�E�U���I��H�5�j1���F��I�|$�8������ff.���AVAUATUH��SH��0H��`�L�'dH�%(H�D$(1�H���A�T$PH�@XL�,�I�EH����H��{�D$tL�l$H�T$H��L���lL���T$��IE�H�}PA�t$0H��A�D$H�H�����D$��t�{vH��� 7��H�Ex1�H�L$(dH3%(uxH��0[]A\A]A^�@H��0H�RH���M��H�@XL�4�A�FI�NI�6�P������tI�E�8���f.�I�H�5qi1�H����E���������ff.����AVAUATUH��SH��`�L�/L�gH�SP�CTL�w8�J9��^H�C`���SPH�PH�S`L�0H�C`H�PH�S`L� H�C`H�PH�S`H�L�ePA�E0M�4A�EPI�A�|$�>I�4$H����A�T$L���@��H�E8A�|$���@tH�EH[H�Ex1�]A\A]A^�H��XH��t�H�GH������
a��L��H�������uIH�U8H�
�hL��hH�5�p�B%LD���H�BH�J������H�P1����5D��H��XH�}HH���a����G1�[H�Ex]A\A]A^�DL���5��H�E8�)�����tH�{X1҉sTHc�H���ǣ��HcKPH�CXH��H���y���H�}H�H�5�o�1��C�����AVAUATUH��SH�� L�'dH�%(H�D$1�A�\$H_PA�|$D��A�D$tMH�H��txH�H�CA�D$HEPH�PH�H�Ex1�H�t$dH34%(��H�� []A\A]A^�fDH�`�H�� H�A�D$H�UPH�H��@A�\$H]PH�H��u�H�C�A�L$dM�l$0����H�5�^��Hc�H�>���I�T$PH�5�k�1�H���B��A�L$dM�t$P��uL�t$�L,t$H�T$L��L����������H�D$H�A�D$�:����I�����L�5�H�L$L��L���TP�����u�L��H�5��1���A��H�`�H�� �@A�D$XM�t$P�P�f�1�H�5���A��H�`�H�� �b���DL��H�5������AWAVAUI��ATUSH��H��8L�6dH�%(H�D$(1�I�FhH=���H=���A�~0����H��t
H��x��A�~0�A�nPHkP���A����H��H��H{PA��&��H�sPH�T$1�I����!��I��A������<���#H�D$H�5�k�1��@���H�SPH��L���!��H�t$(dH34%(�H��8[]A\A]A^A_�fDA�~0E�fPLfP�����D$L��I��M��t�H�`�I�H;H@���yu�A�����y�L��H��H��A��A�Fu=A�FH�SPL�<I��@A�FHCPH�H���pH�H�PA�FHCPH�PH��}vH���0���|$tJH�`�H���� H�|$H��t@����H��v�u0��H�|$t
H�|$��U��H�x1���������H�L$�A�˞��H�L$I��oH�QH�PI�?�v��0��I�?�GI��@I��y���H�AH�P@H������H�xH����H���L��H�D$ H��H�ǃ@A��I�L��H�t$ H�@�PHH�|$ �U������H�sPA���H�T$���D$I���7���fDH�x�����H�@���A�FuPH�`�A�FH�SPH�� H�H�SPA�FH�H��@A�FHCPH�H��twH�H�PA�FHCPH�PH��}vH����.��H��|$H�BxtH�`�H���t$H�1��9���f.�H�|$�T���<����H������H�@�fDA����H�D$����D$I���"������@��H��H���Z���ff.�f���H��H��`�Z���ff.�f���H��H���Z�}���ff.�f���H��H��p�Z�]���ff.�f���H��H�ǰ�Z�=���ff.�f���H��H���Z����ff.�f���H��H����Z���ff.�f���H��H�Ǡ�Z����ff.�f���H��H����Z���ff.�f���H��H��0�Z���ff.�f���H��H���Z�}���ff.�f���AVAUATUH��SH�� L�'H�_PdH�%(H�D$1�A�D$0A�T$H�HӀx��A�D$tLH�H��twH�H�CA�D$HEPH�PH�H�Ex1�H�t$dH34%(�~H�� []A\A]A^�DH�`�H�� H�A�D$H�UPH�H��@A�\$H]PH�H��u�H�C�A�L$dL�(����H�5W��Hc�H�>��f�I�T$PH�5Dd�1�H����:��A�L$dM�t$P��uL�t$�L,t$H�T$L��L���Y�������H�D$H�A�D$�B����Q�����L�50	H�L$L��L���H�����u�L��H�5��1���Y:��H�`�H�� �@A�D$XM�t$P�P�f�1�H�5F���:��H�`�H�� �b���DL��H�5���w�����SH��H��H�7dH�%(H�D$1��F0HGPH�H���~H��B���Bu@�B�BH�$H�9�tDH����O��H�x1�H�t$dH34%(��H��[ÀzH�$t��teH�9�u�H�GH��P�PXH�<$u��H�P�B���Bt!�zH�$t���u��B���B�BH�$�d���@�B��m��ff.�f���SH��H��dH�%(H�D$1�H��H0HOPH�PPH�1H��tnH�>�O���OtoH�$�t��tm1��@u�xH{P1�A����H�<$tH����N��H�x1�H�T$dH3%(u2H��[�fDH�y�O���Ou��G�GH�<$��G�蕳�DAWAVI��AUA��ATUH��SH��HH�dH�%(H�D$81�L�d$ �CDL�{0<t.�oC0H�S@L�d$ )D$ H�T$0<�=�|$4M�����CT�����������J���YE1ۃ��5A�GI�7H�L$L��L�$�PH�L$���L�$������{T��M9����Cu3H�D$�SI�H�H��@A���A���=E���lH�Ex1�H�t$8dH34%(��H��H[]A\A]A^A_�f�L���ȭ���CT���!���I��CPA�WI�7H�<1���5��H�D$M9��a����|$4�V���L���'���I���fDL��M���=(���|$4������A������H�
sRD��Hc�H�>��f�H�`�L������DH�`�H��0L���M��������HH�$茕��H�$E1�H��XZ�H���H�`�1�H��0H�����H�`�H��0L����7���@H�`�L���� ���D�CIH�H���H�H�P�CIH�PH��i���DI�H�5!Y�1��J5��H�`�H�� H�D$���DI�H�5�X1�L�$��5��L�$H�`�H�L$H��A�L��H�P�@H�T$ A�GjL�L$I�7�P�V�XZ����I��CH�H��B���B���B�BH�T$�CI�H�`�H�H�� L�"A�D$H9�t
A�|$u��wm��A�D$H�|$�]���H�|$�J���N���f.�H�|$��1\�����@H�D$�z�y������p����B�g������A�D$I��CL�,�t���I�EI��C�Ao$H�H�I�T$H�P�CI�H�H�8�v�y%���CI�H�H�8�GI��CH�H��@�CI�H�L� A�D$����DH�@�_����֮�fD��H��H�WP��+���ff.���H�G8H��1�H��t'H�P0H��t-H��x(H�IhH9�wH��1��D�@��H�VP����fD1��@8H�VP@������D��H��H�WP����ff.���H��H�WP����ff.���H��H�WP��k���ff.���H��H�WP1��N���ff.�AWAVAUATUH��SH��H��HL�&dH�%(H�D$81�I�D$hH=���H=���A�|$0��m�H��t
H��x��H�sPA�|$PL�l$L���
��A�|$0�I���3�A�1�L��H��A��$�H{P����H�sPH�T$(1�I��$��<��H�$A��$����G���.H�D$ H�5�\�1��R1��f�H�SPH��H������H�L$8dH3%(�&H��H[]A\A]A^A_�fDH�vPA�|$PL�l$E1�L������A�|$0�H�$�\�I��M���{���H�`�I�H;H@���yu�A�����y�H�$H��H���A�D$u@A�D$H�SPL�4I��@A�D$HCPH�H���kH�H�PA�D$HCPH�PH�H�|$tL���F��E��tJH�`�H����H�|$(H��t@����H��v�!��H�|$ t
H�|$ �]F��H�x1����f����H�L$�A�k���H�L$I��oH�QH�PI�>�v�!��I�>�GI��@I��y���H�AH�P@H������H�xH����H���H�$H�D$0H��H�ǃ@��I�L��H�t$0H�@�PHH�|$0�E������H�sPA��$�H�T$ A����I���3���@H�x�����H�@���A�D$uTH�`�A�D$H�SPH�� H�H�SPA�D$H�H��@A�D$HCPH�H��tsH�H�PA�D$HCPH�PH�H�|$tL����D��H�H�BxE��tH�`�H���tH�1��$���DH�|$(�D���B����H������H�@�fDA��$��H�D$ A���I������肩�f���H��H���Z���ff.�f���H��H��`�Z�}���ff.�f���H��H���Z�]���ff.�f���H��H��p�Z�=���ff.�f���H��H�ǰ�Z����ff.�f���H��H���Z���ff.�f���H��H����Z����ff.�f���H��H�Ǡ�Z���ff.�f���H��H����Z���ff.�f���H��H��0�Z�}���ff.�f���H��H���Z�]���ff.�f���AVAUATUH��SH��H��`�L�7dH�%(H�D$1�L�gHL�o8�SP�CT�J9��ZH�C`���SPH�PH�S`L�(H�C`H�PH�S`L� H�C`I��H�PH�S`L��H�H�uPA�F0A�~PL�,�����x�9H�0H��t�PL���(��H�E8H�<$tL���8B��H�E8�@t6H�EHH�Ex1�H�L$dH3%(��H��[]A\A]A^�fDH��XH��t�H�GH������G��L��H�������uIH�U8H�
�OL��OH�5�W�B%LD���H�BH�J������H�P1����+��H��XH�}HH���C����G�:����tH�{X1҉sTHc�H���׊��HcKPH�CXH��H���}���H�}H��E��H�5W�1��*��f�AWAVAUATI��USH��H��HL�.dH�%(H�D$81�I�EhH=���H=���H�l$H�vPA�}0H������H��tH�|$H����zt~H�sPA�}0H�����I�UPA���1�H��H{PA��?��H�sPH�T$(1�I����
��I��A������E���H�D$ H�5U�1��)��H�SPH��L���'��H�L$8dH3%(�$H��H[]A\A]A^A_�fDH�l$H�vPA�}0M�uPH�������D$I��M��t�H�`�I�H;H@���yu�A�����y�L��H��H��A��A�Eu=A�EH�SPL�<I��@A�EHCPH�H���`H�H�PA�EHCPH�PH��|$tJH�`�H����>H�|$(H��t@����H��v���H�|$ t
H�|$ ��>��H�|$tH����>��H�x1�����fD���H�L$�A���H�L$I��oH�QH�PI�?�v���I�?�GI��@I��y���H�AH�P@H������H�xH����H���L��H�D$0H��H�ǃ@A��I�L��H�t$0H�@�PHH�|$0�&>������H�sPA���H�T$ �+���D$I���7���fDH�@���H�x�����BH��(���@A�EuPH�`�A�EH�SPH�� H�H�SPA�EH�H��@A�EHCPH�H��twH�H�PA�EHCPH�PH�H�|$tH���a=��H��|$H�BxtH�`�H���t"H�1��'����H�|$(�&=�������H������H�@�fDA����H�D$ ����D$I���������@��H��H���Z���ff.�f���H��H��`�Z���ff.�f���H��H���Z�m���ff.�f���H��H��p�Z�M���ff.�f���H��H�ǰ�Z�-���ff.�f���H��H���Z�
���ff.�f���H��H����Z���ff.�f���H��H�Ǡ�Z����ff.�f���H��H����Z���ff.�f���H��H��0�Z���ff.�f���H��H���Z�m���ff.�f�AWAVAUI��ATUSH��H��HH�.dH�%(H�D$81�H�EhH=���H=���L�d$H�vP�}0L���9��H��tH�|$H����ztH�sP�}0L��������1�1�H��H{PA����H�sPH�T$(1�H����
��I��������[���2H�D$ H�5rO�1��&$��fDH�SPH��L������H�L$8dH3%(�<H��H[]A\A]A^A_�fDL�d$H�vP�}0E1�L���Q��E1�I��M��t�H�`�I�H;H@��yu�A�����y�L��H��H��A��Eu:�EH�SPL�4I��@�EHCPH�H���H�H�P�EHCPH�PH�E��tJH�`�H����`H�|$(H��t@����H��v�
��H�|$ t
H�|$ �[9��H�|$tL���K9��H�x1��������L�L$�AH�$�W���H�$L�L$I��oH�QH�PI�>�vL�$�j��I�>L�$�GI��@I��y���H�AH�P@H������H�xH����H��L�$��L�$H�D$0H��H��L�ʃ@A��I�L��H�t$0H�@�PHH�|$0�~8�����f�H�sP���H�T$ L�$A��r��L�$I������fDH�@���H�x�����BH�����@�EuLH�`��EH�SPH�� H�H�SP�EH�H��@�EHCPH�H��tsH�H�P�EHCPH�PH�H�|$tL���7��H�H�BxE��tH�`�H���t!H�1������H�|$(�v7�������H������H�@�fD����L�$A�H�D$ �=��L�$I������<��ff.����H��H���Z���ff.�f���H��H��`�Z�m���ff.�f���H��H���Z�M���ff.�f���H��H��p�Z�-���ff.�f���H��H�ǰ�Z�
���ff.�f���H��H���Z���ff.�f���H��H����Z����ff.�f���H��H�Ǡ�Z���ff.�f���H��H����Z���ff.�f���H��H��0�Z�m���ff.�f���H��H���Z�M���ff.�f���SH��H��dH�%(H�D$1�H��H0HOPH�H����H�2�~�O��N����H�$�~t	����H��H�HHH�ph�L�KPH�xL������XZH�<$tH���5��H�`�H�H���H�BxtMH�1�H�\$dH3%(uQH��[�f.��F�FH�4$�y���@H�q�D����H������F�L���躙�f.�����������������������AVAUATI��`�UH��SH�I��$��SPH�@XL�,�I�EH��t{H�H�{hu#H�MP�C0H�H��@�C0HEPH�H�	H�HI��$X��1��Ct'I��$X��u3��[H�Ex1�]A\A]A^�D�{H}P���I��$0H�RI��$�M��H�@XL�4�A�FI�NI�6�P�����t	I�E�E���I�H�5�@�1����I�T$�(����;���ff.�AUATI��USH��H�H��`��P0H���H�@XH�,�H�EH���
H�(H�CH9��J�}���E�P�U����9�}7H��(����H�PH��(H�(1�I�$xH��[]A\A]���tH�� 1҉�Hc�H���|��Hc�H�� H��H���f.���{���oEI��H�EH��I�EH�� A�EA�E��wL���3���DL��L���}
��A�E�P�����H��0H�RH���I��H�@XL�,�A�EI�MI�u�P�_����tRH�EH�(H�CH9������fD���z���H��H���oH�@MH�E�E���I�UH�5�>�1�����ff.�@AWAVI��AUA��ATUH��SH��HL�>1�dH�%(H�D$81�L�d$ A�0�6r��H���@<t-�oL�d$ )D$ H�SH�T$0<�D�|$4L����A�GT�����������P���_E1ۃ��;�CH�3H�L$L��L�$�PH�L$��L�$�����A�T��L9���A�Gu4H�D$A�WI�H�H��@A����A���9E���pH�Ex1�H�t$8dH34%(�zH��H[]A\A]A^A_�fDL��蘐��A�GT������I�A�GP�SH�3H�<1����H�D$L9��Z����|$4�O���H���R
���B���DL��L���
���|$4������A������H�
_5D��Hc�H�>��f�H�`�L������DH�`�H��0L���M��������HH�$�\x��H�$E1�H��XZ�H���H�`�1�H��0H�������H�`�H��0L����1���@H�`�L�������DA�GIH�H���H�H�PA�GIH�PH��c���H�H�5�;�1����H�`�H�� H�D$���DH�H�5�;1�L�$�����L�$H�`�H�L$H��A�L��H�P�@H�T$ �CjL�L$H�3�P�'��XZ���I�A�GH�H��B���Bu�B�BH�T$A�GI�H�`�H�H�� H��CH9�t�{u��wk���CH�|$�i���H�|$�-���Z���f.�H�|$��?�����@H�D$�zt����y����B�p��������CI�A�GL�$�Uv��I�$I�A�G�oH�H�H�SH�PA�GI�H�H�8�v�[��A�GI�H�H�8�GI�A�GH�H��@A�GI�H�H��C����fDH�@�k���趑�fD��H��H�WP��+���ff.���H�G8H��1�H��t'H�P0H��t-H��x(H�IhH9�wH��1��D�@��H�VP����fD1��@8H�VP@������D��H��H�WP����ff.���H��H�WP����ff.���H��H�WP��k���ff.���H��H�WP1��N���ff.���AVAUATI��`�UH��SL�7I��$�A�F0H�RXL�,�I�]H����I�D$ L�+H9�tA�}u	A�E��w9A�}t[H�Ex1�]A\A]A^�f�I�EI�vPL��PX[H�Ex1�]A\A]A^�f����A�E�t��H��AoEI�UH�PH�;�v�=��H�;�GH��@L�+A�}�|����@I��$0H�@I��$�M��H�AXH�ЋCH�KH�3�P�����t"I�]H������[H�Ex1�]A\A]A^�DH�H�5�7�1�����M�l$ ���AWAVAUATI��USH��H��HL�.dH�%(H�D$81�I�EhH=���H=���H�l$H�vPA�}0H�����H��tH�|$H����z��A�}P1���j��H�sPA�}0H��I��輼��A���A�1�L��H��H{P�N���H�sPH�T$(1�I�����I��A������T���+H�D$ H�5>�1������H�SPH��L�����H�L$8dH3%(�,H��H[]A\A]A^A_�fDA�}P1�H�l$�j��H�sPA�}0H��I������D$I��M���z���H�`�I�H;H@���yu�A�����y�L��H��H��A��A�Eu=A�EH�SPL�<I��@A�EHCPH�H���ZH�H�PA�EHCPH�PH��|$tJH�`�H����8H�|$(H��t@����H��v���H�|$ t
H�|$ ��'��H�|$tH����'��H�x1�������H�L$�A��p��H�L$I��oH�QH�PI�?�v���I�?�GI��@I��y���H�AH�P@H������H�xH����H���L��H�D$0H��H�ǃ@A��I�L��H�t$0H�@�PHH�|$0�&'������H�sPA���H�T$ �+����D$I���9���fDH�@���H�x�����BH�����@A�EuPH�`�A�EH�SPH�� H�H�SPA�EH�H��@A�EHCPH�H��twH�H�PA�EHCPH�PH�H�|$tH���a&��H��|$H�BxtH�`�H���t"H�1������H�|$(�&&���$����H������H�@�fDA����H�D$ ����D$I���������@��H��H���Z���ff.�f���H��H��`�Z�m���ff.�f���H��H���Z�M���ff.�f���H��H��p�Z�-���ff.�f���H��H�ǰ�Z�
���ff.�f���H��H���Z���ff.�f���H��H����Z����ff.�f���H��H�Ǡ�Z���ff.�f���H��H����Z���ff.�f���H��H��0�Z�m���ff.�f���H��H���Z�M���ff.�f�AWAVI��AUI��ATUSH��XL�>dH�%(H�D$H1�I�GhH=���H=���L�d$(H�vPA�0L���8���H��tH�|$(H���z��I�vPA�_PL��A�0H�����A����H��H��I~PA�蒪��I�vPH�T$81�I�����H�D$A����������MH�D$0H�5]8�1��
���I�VPL��L�����H�\$HdH3%(�dH��X[]A\A]A^A_�fDA�oPH�vPL�d$(A�0L��H�.H�\$�6����D$H��H�������H�`�H�MH;H@��yu�A�����y�1H�T$H��H��A��A�Gu>A�GI�VPH�,H�E�@A�GIFPH�H���H�H�PA�GIFPH�PH��{vH�������|$tJH�`�H����OH�|$8H��t@���H��v����H�|$0t
H�|$0�""��H�|$(tL���"��I�x1��������H�L$�A�k��H�L$H�E�oH�QH�PH�}�v	�4���H�}�GH�E�@H�M�y����H�AH�P@H�������H�xH�����H���H�T$H�D$@H��H�ǃ@A��H�EH��H�t$@H�@�PHH�|$@�N!�����f�I�vPA���H�T$0�K����D$H������fDH�@���I�x�����BH����@A�GuTH�`�A�GI�VPH�� H�I�VPA�GH�H��@A�GIFPH�H����H�H�PA�GIFPH�PH��{vH������H�|$(tL���o ��I��|$H�BxtH��`�H���t I�1����fDH�|$8�6 ������H������H�@�fDA����H�D$0�����D$H���������@��H��H���Z�]���ff.�f���H��H��`�Z�=���ff.�f���H��H���Z����ff.�f���H��H��p�Z���ff.�f���H��H�ǰ�Z����ff.�f���H��H���Z���ff.�f���H��H����Z���ff.�f���H��H�Ǡ�Z�}���ff.�f���H��H����Z�]���ff.�f���H��H��0�Z�=���ff.�f���H��H���Z����ff.�f���AVAUATUSH��H��I��`�H�/dH�%(H�D$1�I��$��UPH�@XL�,�I�EH����H��E0HCPH�0H���}H��A���A�~H�$�yt	����1��Eu�}H{P1�A�訤��H�<$tH������H�x1�H�\$dH3%(��H��[]A\A]A^�f�H�H�A���A������A�AH�$�@I��$0H�RI��$�M��H�@XL�4�A�FI�NI�6�P�������t!I�E������A�3����I�H�5�*�1����I�T$�������ff.���AVAUATUSH��H��H�dH�%(H�D$1��A0HGPH�(H����H�U�B���B��H�$�zt	����I��`��QPI��$�H�@XL�,�I�EH��tzH�0H��tH�}�uH�G�PXH�<$tH���B��H�x1�H�t$dH34%(��H��[]A\A]A^�H�P�B���B�a����B�BH�$�d����I��$0H�RI��$�M��H�@XL�4�A�FI�NI�6�P�N�����tI�E�F����B�����I�H�5)�1��*��I�t$����蛀�ff.�AWAVI��AUATI��USH��XH�.�|$�]0HdH�%(H�D$H1��C<���oL�l$0)D$0H�SH�T$@<�d�|$DM����ET������A���y����E1ۃ��dA�GI�7H�L$ L��L�\$�PH�L$���L�\$�����ET���A��tlM9�t{�Eu4H�D$ �UI�H�H��@�D$������������I�$x1�H�t$HdH34%(��H��X[]A\A]A^A_�H�|$ ��+��M9�u��|$D�z���L�����m���@L���z���ET�����I��EPA�WI�7H�<1�����{H�D$ �)���H���U�����L��M�������|$D��������D$������H�
x��Hc�H�>��H�`�L������D�{�����H���������I��L�l$0�-���H�`�H��0L���M���>����HH�T$�3b��H�T$E1�H��XZ�H���H�`�1�H��0H���謭��H�`�H��0L�������f�H�`�L�������D�EIH�H����H�H�P�EIH�PH�����DI�H�5�%�1�����H�`�H�� H�D$ ���DI��1�L�\$H�5�%���L�\$H�`�H�L$(H��A�L��H�P�@H�T$0A�GjL�L$(I�7�P���XZ�0���DI��EH�H��B���Bu`�B�BH�T$(�EI�H�`�H�H�� H��CH9�t�{u��wE���CH�|$(����H�|$(�a������@H�D$(�zt���u��B�fD����CI��EL�,�N`��I�EI��E�oH�H�H�SH�P�EI�H�H�8�v�V�EI�H�H�8�GI��EH�H��@�EI�H�H��C�/���@H�@�F����{�fD��H��H�WP�����ff.���H�G8H��1�H��t'H�P0H��t-H��x(H�IhH9�wH��1��D�@��H�VP���fD1��@8H�VP@�����D��H��H�WP����ff.���H��H�WP��k���ff.���H��H�WP��K���ff.���H��H�WP1��.���ff.���AWAVAUATE1�USH��H��H�G8H�/H��t)H�P0H���H�Mh�p(H9�wsH��E1�D�A��I��`��UPI���H�@XL�4�I�H��tRL�(�}0D���$���1��Eu�}H{PE��L��H��1��ś��H�xH��1�[]A\A]A^A_�E1�@8A���I��0H�RI���M��H�@XL�<�A�GI�OI�7�P�0�����tI��q���I�H�5�!1�I��������R������USH��H��H�dH�%(H�D$1�H�GP�jP�J0H�H�H�0H����H��A���A��H�$�yt	����1��Bu�zH{PA��H��蹚���}vH���{�H�<$tH������H�x1�H�\$dH3%(u?H��[]��H�H�A���A�s����A�AH�$�v�����A�l����x�f���AVAUATUH��SH��H��`�L�'dH�%(H�D$1�L�oHL�w8�SP�CT�J9���H�C`���SPH�PH�S`L�0H�C`H�PH�S`L�(H�C`H�PH�S`H�H���A�T$PH�@XL�$�I�$H����H��x�0D�`L�0A�|$I����[��D��L��H�����H��8H��D��H��I�����L�������[��H�$H�ExH�EHH�E81�H�t$dH34%(��H��[]A\A]A^�f��tH�{X1҉sTHc�H���[��HcKPH�CXH��H�����H��0H�RH���M��H�@XL�,�A�EI�MI�u�P�o�����t
I�$����I�U1��H�5)�Y���H�C����[��L��1�H�5b'�5���H�5v'�1��"����v�ff.�f���AWAVAUATUSH��H��I��`�H�/dH�%(H�D$1�I��$��E0L�uPH�RXL�,�I�uH��tI1��Eu�}H{P�L�����H�x1�H�L$dH3%(��H��[]A\A]A^A_�@I��$0H�@I��$�M��H�AXL�<�A�GI�OI�7�P�6�����tI�u�w����I�D$A�D$I�OA�H�$I��$�A�GjAUI�7�PL�D$����XI�uZ�+����gu����AUATI��USH��H�H�xh=u-H�W8H��t$H�J0H��t�pP;r(���z8�„��hH��`��P0H���H�@XH�,�H�EH����L�(��X���AoEH��A�E�E�E�E<vH���
�����9�}:H��(����H�PH��(H�(1�I�$xH��[]A\A]�f.��tH�� 1҉�Hc�H���X��Hc�H�� H��H���f.��V�H���|������@H��0H�RH���I��H�@XL�,�A�EI�MI�u�P�W�����tH�E���f�I�UH�5�1�L�k�5�������PPH�5&$�1�����f.���AVAUATUSH��H��I��`�H�/dH�%(H�D$1�I��$��E0H�RXL�,�I�uH��tG1��Eu�}H{P1�1�A��ٔ��H�x1�H�L$dH3%(��H��[]A\A]A^�f�I��$0H�@I��$�M��H�AXL�4�A�FI�NI�6�P�>�����t	I�u�y���I�D$A�D$I�NA�H�$I��$�A�FjAUI�6�PL�D$�'���XI�uZ�5����wr����AWAVAUATUSH��H��I��`�H�/dH�%(H�D$1�I��$��E0L�uPH�RXL�,�I�uH��tQ1��Eu�}H{P1�A�L��貓��H�x1�H�L$dH3%(��H��[]A\A]A^A_�f�I��$0H�@I��$�M��H�AXL�<�A�GI�OI�7�P������t	I�u�o���I�D$A�D$I�OA�H�$I��$�A�GjAUI�7�PL�D$���XI�uZ�+����Gq����ATUSH��H�� H�/H�wPdH�%(H�D$1�L�d$�}PL���Z���M0HKPH�1H����H�>�W�J��O��uw�G�GH�|$1��Eu�}H{P1�A�H���h���H�|$tL�����H�|$t
H�|$�v��H�x1�H�T$dH3%(u}H�� []A\��H�D$�t���u��G�|���H�I�Q���Qt)H�D$�y�W������N����A�E���@�A�AH�L$�,����o�ff.���SH��H��dH�%(H�D$1�H��H0HOPH�PPH�xhH�1��H����H�>�O���Oua�G�GH�<$1��@u�xH{PE1�1��)���H�<$tH���J
��H�x1�H�T$dH3%(��H��[�f.��H�$t���u��G��H��tH��A�H0HOPH�1H���R����H�q�~�O��N��t�~H�$t��t,1��C���D�F�FH�4$1��(���f.��F1������n���AVAUATUH��SH��`�L�'L�oH�SP�CTL�w8�J9���H�C`���SPH�PH�S`L�0H�C`H�PH�S`L�(H�C`H�PH�S`H�A�|$d�H��XM�l$PA�T$XH����H�EH�x�BH�@H�@xH��� H�}HL���H�E8H����H�UHH��t�@t[H�EH1�H�Ex]A\A]A^�D�zuJ�B1�[H�Ex]A\A]A^�fD�tH�{X1҉sTHc�H����Q��HcKPH�CXH��H�������fQ��H��H�EH�o�@�C�C�C<vH���z�H�]H1�[H�Ex]A\A]A^���[��H�5�1��~�H�}HH��t�tDH��L��H�5V�1��R�H�5s�
��A�L��H�5'�1��+�H�GH���H��t���H��t�H�}HH�G���H�P���AVAUATUH��SH��I��`�H�dH�%(H�D$1�I��$��C0H�RXL�,�I�UH��twH��L�MPH�KHH�sh�H�{L�������XH�EI��$�Zt1H��xH�E1�H�t$dH34%(��H��[]A\A]A^�fDH��x��f.�I��$0H�@I��$�M��H�AXL�4�A�FI�NI�6�P������t	I�U�I���I�D$A�D$I�NA�H�$I��$�A�FjAUI�6�PL�D$���YI�U^�����7k����������������������AVAUATI��`�UH��SL�/I��$�A�U0H�@XL�4�I�H����A�UPL�,�I�EH���
L�0H��t$I�D$ L�+H9�tA�}u	A�E��w=A�}t[H�Ex1�]A\A]A^�fDI�EL��L��PX[H�Ex1�]A\A]A^����A�E�ON��H��AoEI�UH�PH�;�v�m�H�;�GH��@L�+A�}�x����@I��$0H�RI��$�M��H�@XH�ЋCH�KH�3�P�7������tbI��$�I�H�@X���fDI��$0H�RI��$�M��H�@XL�4�A�FI�NI�6�P������tAI�E����H�1��H�5�I�\$ ���I��$�H�@X�m���@I�H�5q�1�M�t$���a�����AVAUATUH��`�SH��L�'�UP�ETL�oHL�w8�J9���H�E`���UPH�PH�U`L�0H�E`H�PH�U`L�(H�E`H�PH�U`H�A�|$d�WA�D$0HCPI�l$PA�T$XH�CH���x��H�@H�@xH���2H�{HH���H�C8H����H�SHH��t�@tH�CH1�H�x[]A\A]A^���zuJ�B1�H�x[]A\A]A^���tH�}X1҉uTHc�H���WL��HcMPH�EXH��H��������K��H��H�CH�oE�@�E�E�E<vH������H�kH1�H�x[]A\A]A^�H��H�5��1����H�{HH��t�tAH���H��H�5�
�1����H�5P�1���H�5��
���H�GH���H��t���H��t�H�{HH�G���H�P�D��AUATUSH��H��H�/H�wPdH�%(H�D$1�H�Eh��|����}0�t=��H�xt2L�`M��t)A�l$�UA�D$A�D$L�$$��H�����I��H�Eh���H��`�H�UI9�tA�|$A�T$��������'��-J���Ao$I��A�D$A�EA�EA�E<������9���H��(����H�PH��(L�(H�<$tH�����H�x1�H�L$dH3%(��H��[]A\A]�@�U0H�KP�|����H��`���@����eDL���������9��f����bf�H�W8H��t$H�J0H��t�}P;z(���B8�„��_���H�����[���fDH�5��1��m������tH�� 1҉�Hc�H���1I��Hc�H�� H��H��������W�H���D����q���@H�<$�N�����A�D$A�T$����9�}7H��(����H�PH��(L� �|���@H�$�����DH�� 1҉�H�H�4��vH��Hc�H�� H��H�����c�f.���AWAVAUATUSH��H��I��`�H�/dH�%(H�D$1�I��$��MPH�@XL�,�I�UH����L�*�U0L�4�I�6H��tO1��Et7�L�����H�x1�H�\$dH3%(�$H��[]A\A]A^A_Ð�}H{P��I��$0H�RI��$�M��H�@XL�<�A�GI�OI�7�P�n������tYI�6�r����I��$0H�II��$�M��H�@XL�4�A�FI�NI�6�P�.������taI��$�I�UH�@X����@I�D$A�D$I�OA�H�$I��$�A�GjAVI�7�PL�D$����XI�6Z����DI�1��M�l$H�5�
��I��$�H�@X����'b����AWAVAUATUSH��H��I��`�H�/dH�%(H�D$1�I��$��MPH�@XL�,�I�UH����L�*�U0L�4�I�6H��tW1��Et?1�A�L���W���H�x1�H�\$dH3%(�1H��[]A\A]A^A_�fD�}H{P��I��$0H�RI��$�M��H�@XL�<�A�GI�OI�7�P覲�����taI�6�j���f�I��$0H�II��$�M��H�@XL�4�A�FI�NI�6�P�^������taI��$�I�UH�@X����@I�D$A�D$I�OA�H�$I��$�A�GjAVI�7�PL�D$�7���XI�6Z����DI�1��M�l$H�5����I��$�H�@X����W`����AVAUATUSH��H��I��`�H�/dH�%(H�D$1�I��$��UPH�@XL�,�I�EH���#H��E0HCPH�}hH�0��H����H��A���Aud�A�AH�$1��Eu�}H{PE1�1��\���H�<$tH���}���H�x1�H�\$dH3%(�H��[]A\A]A^�fD�yH�$t���u��A��H��tH��@�E0HCPH�0H���O����H�H�A���At!�yH�$t	����1��>����A1��AH�$�%���f.�I��$0H�RI��$�M��H�@XL�4�A�FI�NI�6�P�������t	I�E���I�H�5��1��
�I�T$����A1�����p^���AVAUATUH��SH��`�L�'L�oH�SP�CTL�w8�J9���H�C`���SPH�PH�S`L�0H�C`H�PH�S`L�(H�C`H�PH�S`H�E�d$PLePA�|$�H��XM�,$A�T$H����H�EH�x�7H�@H�@xH���H�}HL���H�E8H����H�UHH��t�@t-H�EHA�|$vL�����[H�Ex1�]A\A]A^�D�zu:�B��@�tH�{X1҉sTHc�H���A��HcKPH�CXH��H������.A��H��H�EH�o�@�C�C�C<vH���B��H�]H�\����K��H�5��1��Q�H�}HH��t�tDH��L��H�5)�
�1��%�H�5F�
���L��H�5�
�1���H�GH���H��t���H��t�H�}HH�G���H�P���AVAUATUH��`�SH��L�/�UP�ETL�gHL�w8�J9���H�E`���UPH�PH�U`L�0H�E`H�PH�U`L� H�E`H�PH�U`H�H�CPA�mPHŀ}�KA�M0L�e�UH�H�CH���x��H�@H�@xH���+H�{HL���H�C8H����H�SHH��t�@t*H�CH�}vH������H�x1�[]A\A]A^�D�zu:�B��@�tH�}X1҉uTHc�H���?��HcMPH�EXH��H�������?��I��H�CH�oA$�@A�D$A�D$A�D$<vL���"��L�cH�W���L��H�5/�1��3��H�{HH��t�tAH�ɭL��H�5�
�1����H�5��1�����H�5�
�����H�GH���H��t���H��t�H�{HH�G���H�P����AWAVAUATUSH��H��H�/dH�%(H�D$1��E0HGPH�8��H�@E1�@I��`��UPI���H�@XL�4�I�H����L�(H�sP�}0I��L�������}L��H{PH���P��E��tFH�<$tL���l�E0H�SPH��E0HCPH�H����H�H�P�E0HCPH�PH�H�x1�H�L$dH3%(��H��[]A\A]A^A_�@H�@A��@�)���DI��0H�RI���M��H�@XL�<�A�GI�OI�7�P�P������tI�����H�@�n���I�H�51�I����&�������X�ff.����AVAUATUSH��H��H��`�L�'dH�%(H�D$1�L�oHL�w8�UP�ET�J9��H�E`���UPH�PH�U`L�0H�E`H�PH�U`L�(H�E`H�PH�U`H�A�|$d�LH��H�sPA�|$0H��M�l$PE�t$X�9���H�CHH����x�H�@H�@xH���JH�{HD��L���H�C8H���H�SHH��t�@tAH�CHH�<$tH���b�H�x1�H�L$dH3%(��H��[]A\A]A^��zu:�B�@�tH�}X1҉uTHc�H���;��HcMPH�EXH��H��������;��I��H�CH�oA$�@A�D$A�D$A�D$<vL���*��L�cH�@���L��H�57�1��;��H�5�
�1��(��H�{HH��t�t3H���L��H�5�
�1�����wV�H�5�
�����H�GH���H��t���H��t�H�{HH�G���H�P�ff.���AWAVAUATUSH��H��I��`�L�/dH�%(H�D$1�I��$�A�E0H�RXL�4�I�.H����H�wPI��A�}PL������I��I�D$ L�mH9�tA�}u	A�E��w]A�}t>H�<$tL���w�H�x1�H�L$dH3%(�$H��[]A\A]A^A_�fDI�EL��L��PX�f����A�E�O9��H�E�AoEI�UH�PH�}�v	�k��H�}�GH�E�@L�mA�}�S�����I��$0H�@I��$�M��H�AXH�,ЋEH�MH�u�P�.������t)I�.H�sPI��A�}PL����I��H��������f�H�UH�5�
1�I�����A�}PH�sPL��趴��M�l$ I������TT�@��USH��H��H�dH�%(H�D$1�H�GP�iP�Q0H�H�H�yhH�0��H����H��B���Bus�B�BH�$1��Au�yH{PE1��H���}u���}vH���?��H�<$tH����H�x1�H�\$dH3%(��H��[]���zH�$t���u��B��H��t#H��@�A0HGPH�0H���@���f�H�P�B���Bt!�zH�$t��t.1��+�����B1��BH�$����f.��B1������R���AVAUATUH��SH��H��`�L�/dH�%(H�D$1�L�gHL�w8�SP�CT�J9��H�C`���SPH�PH�S`L�0H�C`H�PH�S`L� H�C`I��H�PH�S`L��H�H�uPA�}P蠲���x�L�(�PH��XH���rH�EH�x�H�@H�@xH����H�}HL���H�E8H���H�UHH��t�@tDH�EHH�<$tL����H�Ex1�H�L$dH3%(��H��[]A\A]A^�D�zu:�B�@�tH�{X1҉sTHc�H����5��HcKPH�CXH��H��������n5��H��H�EH�o�@�C�C�C<vH�����H�]H�E���H�55�
�1����H�5��
����L��H�5k�1��o��H�}HH��t�t'H��L��H�5G�
�1��C���P��?��H�GH���H��t��H��t�H�}HH�G���H�P�ff.���AWAVAUATUSH��H��I��`�L�'dH�%(H�D$1�I���A�D$0A�l$PHoPH�RXL�4�I�6H��td1�A�D$u	A�|$H{PA��H���q���}vH���x��H�x1�H�L$dH3%(��H��[]A\A]A^A_��I��0H�@I���M��H�AXL�<�A�GI�OI�7�P�������tI�6�_���I�EA�EI�OA�H�$I���A�GjAVI�7�PL�D$��XI�6Z�����CO���AVAUATUSH��H��H��`�L�/dH�%(H�D$1�L�gHL�w8�UP�ET�J9���H�E`���UPH�PH�U`L�0H�E`H�PH�U`L� H�E`H�PH�U`H��H�H�sPH��A�}P�����x�3L� �PA�E0HCPH�CH��x��H�@H�@xH���DH�{HL���H�C8H����H�SHH��t�@t>H�CHH�<$tH����H�x1�H�L$dH3%(��H��[]A\A]A^Àzu:�B�@�tH�}X1҉uTHc�H���W2��HcMPH�EXH��H���������1��I��H�CH�oA$�@A�D$A�D$A�D$<vL������L�cH�C���L��H�5�
�1�����H�5�
�1�����H�{HH��t�t3H�v�L��H�5��
�1�����/M�H�5д
����H�GH���H��t���H��t�H�{HH�G���H�P���ATUSH��H�� H�dH�%(H�D$1��A0HGPH�(H����H�U�B���B���B�BH�T$�yPL�d$H�sPL���Ԭ��H�}�u
H�WH��RXH�|$tL���@�H�|$t
H�|$�.�H�x1�H�L$dH3%(��H�� []A\�H�D$�z�}������t����B�k���H�P�B���BtAH�D$�zt��tEL�d$H�sP�yPL������H�|$�U����X�����B�BH�T$�fD�B��K�ff.�f���AWAVAUATUSH��H��H��`�L�?dH�%(H�D$1�L�gHL�o8�UP�ET�J9��H�E`���UPH�PH�U`L�(H�E`H�PH�U`L� H�E`H�PH�U`H�H�sPA�oPH��}��I��A�0L�mL��D�u�%���H�CHH����x�H�@H�@xH���H�{HD��L���H�C8H���H�SHH��t�@tUH�CH�}vH�����H�<$tL���@�H�x1�H�L$dH3%(�H��[]A\A]A^A_���zu:�B�@�tH�}X1҉uTHc�H���w.��HcMPH�EXH��H�������-��I��H�CH�oAE�@A�EA�EA�E<vL������L�kH�/���L��H�5�
�1����H�57�
����H�{HH��t�t5H���L��H�5��
�1�����H�5e�
�1������AI�H�GH���H��t���H��t�H�{HH�G���H�P�fD��AWAVAUATUSH��H��8H�/H�wPdH�%(H�D$(1�L�d$�}PL���$���I��`�I�ƋE0I���H�RXL�<�I�7H��tX1��Eu�}H{P�L����H�|$tL���d�H�x1�H�L$(dH3%(��H��8[]A\A]A^A_�I��0H�@I���M��H�AXL��A�BI�JL�T$I�2�P蓙��L�T$���t	I�7�a����I�EA�EI�JA�H�D$ I���A�BjAWI�2�PL�D$0�y���XI�7Z������G�f.���AVAUATUH��SH��I��`�H�dH�%(H�D$1�I����C0H�RXL�4�M�&M���%�[PH_PH�$I�E M�4$I9�tA�~u	A�F��wMA�~���{w,H�Ex1�H�t$dH34%(�XH��[]A\A]A^�@H��舼����fD���A�F�*��I�$�AoI�VH�PI�<$�v	����I�<$�GI�$�@M�4$A�~�h���f.���*��H�$H���oH�$�R�@�P�@I�<$H�W�RXH���?�����f.�I��0H�@I���M��H�AXL�$�A�D$I�L$I�4$�P荗�����t M�&�[PH]PH�$M����������@I�$H�58�
�1�M�e �]���[PH]PH�$M�u �|�����E�@��ATUSH��H�� H�/H�wPdH�%(H�D$1�L�d$�}PL���ڥ��H�}h�M0��HKPH�1H����H�>�W�J��O��ut�G�GH�|$1��Eu�}H{PE1�1�H����f��H�|$tL����H�|$t
H�|$����H�x1�H�\$dH3%(��H�� []A\�H�D$�t���u��G�fDHKPH�H��tH��B�M0HKPH�1H���6���f�H�I�Q���Qt!H�D$�yt��t-1��*���fD�A1��AH�L$�
���f��A1�����@D���AWAVAUATUSH��H��8H�/H�wPdH�%(H�D$(1�L�d$�}PL���T���I��`�I�ƋE0I���H�RXL�<�I�7H��t`1��Eu�}H{P1�A�L���qe��H�|$tL�����H�x1�H�L$(dH3%(��H��8[]A\A]A^A_��I��0H�@I���M��H�AXL��A�BI�JL�T$I�2�P軔��L�T$���tI�7�Y���f�I�EA�EI�JA�H�D$ I���A�BjAWI�2�PL�D$0�~��XI�7Z������B�f.���AWAVAUATUSH��H��I��`�H�/dH�%(H�D$1�I��$��E0L�uPH�RXL�,�I�uH��tI1��Eu�}H{P�L�����H�x1�H�L$dH3%(��H��[]A\A]A^A_�@I��$0H�@I��$�M��H�AXL�<�A�GI�OI�7�P膓�����tI�u�w����I�H�5A�
�1��j��I�D$A�D$I�OH�$A�GA�I��$�jAUI�7�PL�D$�Q}��XI�uZ�����A���AWAVAUATUSH��H��(H��`�L�?dH�%(H�D$1�L�gHL�o8�UP�ET�J9��(H�E`���UPH�PH�U`L�(H�E`H�PH�U`L� H�E`H�PH�U`H�l$H�H�sPH��A�P�\����x�_L�l$H�sPA�0L��L� D�p�6���H�CHH��� �x�H�@H�@xH���_H�{HD��L���H�C8H���H�SHH��t�@tVH�CHH�|$tH���^��H�|$tL���N��H�x1�H�L$dH3%(��H��([]A\A]A^A_�D�zu:�B�@�tH�}X1҉uTHc�H���$��HcMPH�EXH��H�������$��I��H�CH�oA$�@A�D$A�D$A�D$<vL������L�cH�+���L��H�5�
�1��#��H�5��
�1����H�{HH��t�t3H���L��H�5��
�1������_?�H�5�
�����H�GH���H��t���H��t�H�{HH�G���H�P���AWAVAUATUSH��H��I��`�H�/dH�%(H�D$1�I��$��E0L�uPH�RXL�,�I�uH��tQ1��Eu�}H{P1�A�L���b`��H�x1�H�L$dH3%(��H��[]A\A]A^A_�f�I��$0H�@I��$�M��H�AXL�<�A�GI�OI�7�P辏�����t	I�u�o���I�H�5��
�1����I�D$A�D$I�OH�$A�GA�I��$�jAUI�7�PL�D$�y��XI�uZ������=���AVAUATUSH��H��I��`�H�/dH�%(H�D$1�I��$��E0H�RXL�,�I�uH��tG1��Eu�}H{P1�1�A��)_��H�x1�H�L$dH3%(��H��[]A\A]A^�f�I��$0H�@I��$�M��H�AXL�4�A�FI�NI�6�P莎�����t	I�u�y���I�H�5Q�
�1��z���I�D$A�D$I�NH�$A�FA�I��$�jAUI�6�PL�D$�ax��XI�uZ�����<���USH��H��(H�dH�%(H�D$1��A0HGPH�(H����H�U�B���Bun�B�BH�T$�yPH{PH�|$H�E�x���v蹱��H�|$t
H�|$���H�x1�H�t$dH34%(��H��([]�fDH�D$�zt���u��B�fDH�P�B���Bt)H�D$�zt��t}�yPH{PH�|$�h���@�B�BH�T$��fD����H�T$H���oH�D$�R�@�P�@H�}H�W�RXH�|$�+���
���fD�B�z����2;�f���AVAUATI��USH��0H��`�H�/dH�%(H�D$(1�H����U0H�@XL�,�I�EH���$L�(�]I\$PH�}htB�AoEI�EH��H�CH�� ����H�}hwJH�EhH���
Hc�H�>��DH�T$H�t$L������D$����foL$H�D$ H�CI�$x1�H�L$(dH3%(�H��0[]A\A]A^��H���x����r���H���:���fDH���X2���fDH����/���fDH����/���fDH����2���s���H���7���c���H��0H�RH���M��H�@XL�4�A�FI�NI�6�P�������t;I�E���f��AoUI�EH��H�CH�� �������H��觯����f�I�H�5��
1�L�k�趽���P����,9�ff.����AWAVAUATUH��SH��(L�'dH�%(H�D$1�A�D$PHGP�H�D$����I��`�H��H�D$I����oH�\$�@�C�C�CA�D$0H�RXL�4�I�6H���[1�A�D$u	A�|$H}P�H������H�|$�I��H�Ex1�H�L$dH3%(��H��([]A\A]A^A_��I��0H�@I���M��H�AXL�<�A�GI�OI�7�P�x������tI�6�h���I�EA�EI�OA�H�D$I���A�GjAVI�7�PL�D$ �as��XI�6Z�$����7�f���AWAVAUATUSH��H��I��`�H�/dH�%(H�D$1�I��$��MPH�@XL�,�I�UH����L�*�U0L�4�I�6H��tO1��Et7�L�����H�x1�H�\$dH3%(�<H��[]A\A]A^A_Ð�}H{P��I��$0H�RI��$�M��H�@XL�<�A�GI�OI�7�P�>������tYI�6�r����I��$0H�II��$�M��H�@XL�4�A�FI�NI�6�P������tyI��$�I�UH�@X����@I�H�5��
�1��ں��I�D$A�D$I�OH�$A�GA�I��$�jAVI�7�PL�D$�q��XI�6Z�����I�1��M�l$H�5E�
�u���I��$�H�@X�����5�ff.�@��AWAVAUATI��USH��8I��`�H�/dH�%(H�D$(1�I����U0H�@XL�4�I�H����H��CL�t$<t-�oL�t$)D$H�SH�T$ <��|$$L�����ET���������������x��I����HE��CH�3H�L$�P�ځ��������EI�T$P�DH�EhH����H����H�D$H�8�O�������EI�T$PH��f�L���0���ET���R���I�L$P�EP�SH�3H�<��0���H�D$H��tF�UI�L$P�DH�UhH���8H���z����P�L��L���}����|$$����뀋EI�T$P�DH�EhH����H��u�EI�T$PH�L9�t*I�$x1�H�t$(dH34%(�AH��8[]A\A]A^A_À|$$v�H���1������M��0I���H��������H���E1�1ҾI���I��0H��XZH����c��I��0H����<���f�I����'���@�U1�IT$PH��/���fDH�D$H��UIT$P�xujH�����fDI��0H�RM��I�]I���H�@XH�ЋpH�H�VH�0�-�������4���I��)���@I������@��h����2�f���AWAVAUATUSH��H��I��`�H�/dH�%(H�D$1�I��$��MPH�@XL�,�I�UH����L�*�U0L�4�I�6H��tW1��Et?1�A�L���S��H�x1�H�\$dH3%(�IH��[]A\A]A^A_�fD�}H{P��I��$0H�RI��$�M��H�@XL�<�A�GI�OI�7�P�������taI�6�j���f�I��$0H�II��$�M��H�@XL�4�A�FI�NI�6�P辂�����tyI��$�I�UH�@X����@I�H�5q�
�1�蚵��I�D$A�D$I�OH�$A�GA�I��$�jAVI�7�PL�D$�l��XI�6Z����I�1��M�l$H�5�
�5���I��$�H�@X�v����0�ff.�@��AVAUATUH��SH��`�L�'L�oH�SP�CTL�w8�J9��fH�C`���SPH�PH�S`L�0H�C`H�PH�S`L�(H�C`H�PH�S`H�A�D$0H�UPL�,H���A�T$PH�@XL�$�I�$H���9H��x��H�0H�����PL���u���H�E8�@tH�EH[H�Ex1�]A\A]A^�H��XH��t�H�GH��������L��H���r����uIH�U8H�
�
L�m�
H�5u�
�B%LD���H�BH�J������H�P1���赳��H��XH�}HH���^����G1�[H�Ex]A\A]A^�DH�E8�.�����tH�{X1҉sTHc�H���O��HcKPH�CXH��H���q���H�}H�f�H��0H�RH���M��H�@XL�4�A�FI�NI�6�P�������tI�$���f�I�1��H�5��
���H�C�k���H�5"�
�1���ff.���AWAVAUATUSH��H��I��`�H�/dH�%(H�D$1�I����UPH�@XL�$�M�4$M�����U0L�<�M�'M����L��L���D���Eu7�EH�SPL�$I�$�@�EHCPH�H��tDH�H�P�EHCPH�PH�H�x1�H�L$dH3%(�PH��[]A\A]A^A_�fDH�@��fDI��0H�RI���M��H�@XL�4�A�FI�NI�6�P�~�����tcI����U0M�4$H�@XL�<�M�'M���"����I��0H�RI���M��H�@XL�$�A�D$I�L$I�4$�P�=~�����tXM�'���I�EA�EI���A�H�$I�NA�FjATI�6�PL�D$�*h��I���YM�4$^H�@X���@I�EA�EI���A�H�$A�D$I�L$jAWI�4$�PL�D$��g��XM�'Z�N����(,����AWAVAUATUSH��H��I��`�L�'dH�%(H�D$1�I���A�D$0A�l$PHoPH�RXL�4�I�6H��td1�A�D$u	A�|$H{PA��H���VM���}vH������H�x1�H�L$dH3%(��H��[]A\A]A^A_��I��0H�@I���M��H�AXL�<�A�GI�OI�7�P�|�����tI�6�_���I�H�5i�
�1�蒯��I�EA�EI���H�$I�OA�A�GjAVI�7�PL�D$�|f��XI�6Z������*�ff.�f���AVAUATUSH��H�/dH�%(H�D$1�H�G8H���DH�P0H��H��tH�Mh�p(H9����@8�������I��`��E0I��$�H�RXL�,�I�uH��tg1��Et71�1�A���K��H�x1�H�L$dH3%(��H��[]A\A]A^Ð�}H{P��H���D������r���@I��$0H�@I��$�M��H�AXL�4�A�FI�NI�6�P�{�����tI�u�Y����I�D$A�D$I�NA�H�$I��$�A�FjAUI�6�PL�D$�d��XI�uZ�
���H�5Y~
�1�蹭���4)�@��AWAVAUATUSH��H��8H�/H�wPdH�%(H�D$(1�L�d$�}PL���D���I��`�I�ƋE0I���H�RXL�<�I�7H��tX1��Eu�}H{P�L���4��H�|$tL�����H�x1�H�L$(dH3%(��H��8[]A\A]A^A_�I��0H�@I���M��H�AXL��A�BI�JL�T$I�2�P�y��L�T$���t	I�7�a����I��1�L�T$H�5e�
蕬��L�T$I�EA�EH�D$ I���A�A�BI�JjAWI�2�PL�D$0�yc��XI�7Z�����'�f.���AWAVAUATUSH��H��8H�/H�wPdH�%(H�D$(1�L�d$�}PL���ԇ��I��`�I�ƋE0I���H�RXL�<�I�7H��t`1��Eu�}H{P1�A�L����H��H�|$tL�����H�x1�H�L$(dH3%(��H��8[]A\A]A^A_��I��0H�@I���M��H�AXL��A�BI�JL�T$I�2�P�;x��L�T$���tI�7�Y���f�I��1�L�T$H�5��
����L�T$I�EA�EH�D$ I���A�A�BI�JjAWI�2�PL�D$0�a��XI�7Z����J&�f.���AWAVAUATUSH��H��H��`�L�/dH�%(H�D$1�H�GPH���A�MPE�eH�RXI�L�4�I�H���WH�*A�U0�H�H�$��	��H�$�oH�$�R�@�P�@H���]�}���EH���
Hc�H�>��fD�EH�uH��E1�I�<$�P�'?���H�x1�H�t$dH34%(�|H��[]A\A]A^A_��H��H��E1ɺjI�<$A�H�5:x�	W��XZ�DH�uI�<$H��E1�A���\����H,uI�<$H��E1�A���\���[���H�5Pi�1��%���H���}����8����H��0H�IH���M��H�@XL�<�A�GI�OI�7�P��u�����t;H�CPI��h����I�<$H��A�E1��1���[�������I�H�5a�
1�H���膨��A�E0�HCPH�$���H�$�o
H�$�R�@�P�@�%�����#�D��SH�H���xH{P����H��[�`�����AWAVAUATUH��SH��(L�'dH�%(H�D$1�A�D$PHGP�H�D$�p��I��`�H��H�D$I����oH�\$�@�C�C�CA�D$0H�RXL�4�I�6H���[1�A�D$u	A�|$H}P�H���s���H�|$�ɽ��H�Ex1�H�L$dH3%(��H��([]A\A]A^A_��I��0H�@I���M��H�AXL�<�A�GI�OI�7�P�s�����tI�6�h���I�H�5��
�1����I�EA�EI���H�D$I�OA�A�GjAVI�7�PL�D$ ��]��XI�6Z�����"�ff.����AVAUATUSH��H��H��`�L�'dH�%(H�D$1�H���A�D$PH�RXL�4�M�.M���+A�D$0HCPH�(H�PH9���H����H�U�B���B��H�$�zt	���7L��H���ܵ��A�D$uAA�D$H�SPH�,H�E�@A�D$HCPH�H����H�H�PA�D$HCPH�PH�H�<$tH����H�x1�H�L$dH3%(�
H��[]A\A]A^�DH�P�B���B�G����B�BH�$�J����1�H�5��
��-���A�D$0HCPH�(��@H��0H�@H���M��H�AXL�,�A�EI�MI�u�P��q�����t2M�.���f.�H�@� ����B����H�E�EH���A�H�$A�EI�MjAVI�u�PL�D$�[��XM�.Z�-������ff.���AWAVAUATUH��SH��I��`�H�dH�%(H�D$1�I��$��SPD�kLoPH�@XL�4�I�H����L� H�C0�{EH�$u1�C@M��thA�|$�LA�D$H���
Hc�H�>��D��N��H�$�oH�$�R�@�P�@��v�H���`���M��u�I�}H��A�E1��1��V���*f.�A�D$I�4$H��E1�I�}�P�8��DH�Ex1�H�t$dH34%(�H��[]A\A]A^A_�fDH��H��E1ɺjI�}A�H�5�q�iP��XZ�DI�4$I�}H��E1�A���V����I,4$I�}H��E1�A����U���[���H�5�b�1�腢��H���ݸ���8����I��$0H�RI��$�M��H�@XL�<�A�GI�OI�7�P�.o�����t	I��'����I�H�5��
1�I��������
�����ff.����SH�H���xH{P���H��[�����AWAVAUATUH��SH��H��`�L�'L�oHL�w8�SP�CT�J9���H�C`���SPH�PH�S`L�0H�C`H�PH�S`L�(H�C`H�PH�S`H�A�|$d��H���A�T$0M�l$PE�t$XH�@XL�$�I�$H����H�H�EHH���M�x�CH�@H�@xH���tH�}HD��L���H�E8H���/H�UHH��t�@t'H�EHH�ExH��1�[]A\A]A^A_�f��zuz�B��@�tH�{X1҉sTHc�H�����HcKPH�CXH��H������H��0H�RH���M��H�@XL�<�A�GI�OI�7�P�@m�����tKI�$����f������H��H�EH�o�@�C�C�C<vH���ڑ��H�]H�"����I�1��H�5��
���H�CH�EH���L��H�5��
�1��ǟ��H�}HH��t�tAH�]nL��H�5��
�1�蛟��H�5��
�芟��H�5�
�1��w���H�GH���H��t���H��t�H�}HH�G���H�P�ff.����AVAUATUSH��I��`�H�/dH�%(H�D$1�I��$X�'I��$��UPH��H�@XL�,�I�EH����H�1��E���I��$X�ô��H�SP�EH�H��B���B���zH�$t	����EH�SPI�L$ H�L�*A�EH9�tA�}u	������H�<$A�EtH��譴��H�x1�H�t$dH34%(�XH��[]A\A]A^�fD�B�BH�$�}���@�}H{P�'���@I��$0H�RI��$�M��H�@XL�4�A�FI�NI�6�P�j�������I�E����@���A�EH�SP�EL�$�$���I�$H�SP�E�AoEH�H�I�UH�P�EH�SPH�H�8�v�(����EH�SPH�H�8�GH�SP�EH�H��@�EH�SPH�L�(A�E���f.��B�x����I�H�5��
�1����I�T$����+���V�fD��AVAUATUH��SH��I��`�H�dH�%(H�D$1�I��$��C0H�RXL�,�I�uH����L�OPL���H��x����A�H�SP1�L��9��D���L�MPA���,H�
�
D��Hc�H�>���H�$���1���L�MPH��H�$��A�H��u
D���H���H�{L���5���H�$H��t���I��$�H�UH�Bx��H�E1�H�L$dH3%(�mH��[]A\A]A^�fDH�$H��������L��H���'w��L�MPH��H�$���G���@H�$1��I�������L�H��H��H�$�/����H�$1Ƀ�����f�H����G���@H���H�������I��$0H�@I��$�M��H�AXL�4�A�FI�NI�6�P�g�����u;I�D$A�D$I��$�A�H�$I�NA�FjAUI�6�PL�D$�Q��Y^I�uL�MPL���H����������H��H�CH��M��h�H��H�KHH�{�m{��XZ�b�������AVAUATUH��SH��I��`�H�dH�%(H�D$1�I��$��C0H�RXL�,�I�uH����L�OPL���H��x����A�1�1�L���6��D���L�MPA���.H�
��
D��Hc�H�>��f.�H�$���1����L�MPH��H�$��A�H��u
D���H���H�{L��腥��H�$H��t���I��$�H�UH�Bx��H�E1�H�\$dH3%(�mH��[]A\A]A^�fDH�$H��������L��H���wt��L�MPH��H�$���G���@H�$1��I�������L�H��H��H�$�/����H�$1Ƀ�����f�H����G���@H��蘮������I��$0H�@I��$�M��H�AXL�4�A�FI�NI�6�P��d�����u;I�D$A�D$I��$�A�H�$I�NA�FjAUI�6�PL�D$��N��Y^I�uL�MPL���H����������H��H�CH��M��h�H��H�KHH�{�x��XZ�b��������AVAUATUH��SH��`�L�'L�oH�SP�CTL�w8�J9���H�C`���SPH�PH�S`L�0H�C`H�PH�S`L�(H�C`H�PH�S`H�H���A�T$PH�@XL�$�I�$H����H��x�yL� �PH��XH����H�EH�x��H�@H�@xH����H�}HL���H�E8H���AH�UHH��t�@t[H�EH1�H�Ex]A\A]A^���z���B1�[H�Ex]A\A]A^�f��tH�{X1҉sTHc�H������HcKPH�CXH��H������H��0H�RH���M��H�@XL�,�A�EI�MI�u�P��b�����tZI�$������V���H��H�EH�o�@�C�C�C<vH���j���H�]H1�[H�Ex]A\A]A^�fDI�U1��H�59�
�i���H�C�}���H�5�
�1��M���H�}HH��t�tIH��cL��H�5%�
�1��!���L��H�5�
�1������V���H�5'x
����H�GH���H��t���H��t�H�}HH�G���H�P�f.���AVAUATUH��SH��`�L�'L�oH�SP�CTL�w8�J9���H�C`���SPH�PH�S`L�0H�C`H�PH�S`L�(H�C`H�PH�S`H�H���A�T$PH�@XL�,�I�EH����H��x��H��PA�D$0HEPH�EH�_�x�UH�@H�@xH����H�}HH���H�E8H���DH�UHH��t�@t [H�EH1�H�Ex]A\A]A^���z���B1�[H�Ex]A\A]A^�f��tH�{X1҉sTHc�H���g�HcKPH�CXH��H������H��0H�RH���M��H�@XL�4�A�FI�NI�6�P� `�����t[I�E���f����H��H�EH�o�@�C�C�C<vH��躄��H�]H1�[H�Ex]A\A]A^�fDI�1��H�5��
躒��H�C�~���H��H�5��
�1�蛒��H�}HH��t�tAH�1aH��H�5s�
�1��o���H�5�u
��^���H�5�
�1��K���H�GH���H��t���H��t�H�}HH�G���H�P���AWAVAUATUSH��XH��`�H�/H�|$H����U0dH�%(H�L$H1�H�@XL�$�I�$H����H��PH�D$(�����o)D$0H�@H�D$@H�D$0H�D$���v�|$D�[H�D$H�D$(�ET�������-���t������L����ID�H�D$H�D$(H�|$E1��HH�0�Q1��&L��L�t$(����A�FI�>�p�ښ��L�d$I���M�d$pM��t~H�D$I9D$hurI�D$@H��t�P`��~�H�XXD�z�1��DH�EH��I9�t�H��L9ku�IcV9Su�I�6H�;���u�I�D$XH��M�d$pL�t$(M��u�fDL;t$tiH�|$(�Ǧ��H�D$H�x1�H�L$HdH3%(��H��X[]A\A]A^A_�f�H�|$�&������H������|$D��������|$Dv�L�������H�t$H�D$(�MPH�vP�PH�<H�0蠐��L�t$(�N���fD�@H�D$0H�D$�,���DH��0H���H�D$H���I����H��E1�1ҾH���H��0H��XZH����:��H��0H���H�D$���H���H�D$���H��0H�RH���M��H�@XL�4�A�FI�NI�6�P��[�����tI�$� ���H���H�D$���I�1��H�5��
�Ɏ��H�C���;
�ff.���AWAVAUATUH��SH��H��`�L�/L�gHL�w8�SP�CT�J9��H�C`���SPH�PH�S`L�0H�C`H�PH�S`L� H�C`H�PH�S`H�H���A�UPH�@XL�$�I�$H����H��x�JL� D�pH���A�U0H�@XL�,�I�EH���H�H�EHH�����x��H�@H�@xH����H�}HD��L���H�E8H����H�UHH��t�@t"H�EHH�ExH��1�[]A\A]A^A_�@�z���B����tH�{X1҉sTHc�H���7�HcKPH�CXH��H�����H��0H�RH���M��H�@XL�4�A�FI�NI�6�P��Y�������I�$����fDH��0H�RH���M��H�@XL�<�A�GI�OI�7�P�Y�����tsI�E���f.���&�H��H�EH�o�@�C�C�C<vH���:~��H�]H�����I�1��H�5�
�J���H�C�#����I�1��H�5��
�*���H�CH�EH�@���L��H�5�
�1�����H�5(o
����H�}HH��t�t0H��ZL��H�5Ξ
�1��ʋ��H�5V�
�1�跋��H�GH���H��t���H��t�H�}HH�G���H�P�ff.����AWAVAUATUH��SH��(I��`�H�dH�%(H�D$1�I��$��C0L���H�RXL�<�M�/M����I�E�x�MI��$��SPH�@XL�<�I�H���^H����A�H}P1�L���(��D���L�MPA���<H�
�
D��Hc�H�>���H�D$���1���L�MPH��H�D$��A�H��uD���f�H���H�{L��轖��H�D$H��t���I��$�H�UH�Bx��H�E1�H�t$dH34%(��H��([]A\A]A^A_�H�D$H����fD���L��H�T$�e��L�MPH��H�D$���>���f�H�D$1��@������L�H��H��H�D$�&���fDH�D$1Ƀ�����H����@���@H�|$�Ɵ�������I��$0H�@I��$�M��H�AXL�,�A�EI�MI�u�P�V�����u=I�D$A�D$I��$�A�H�D$I�MA�EjAWI�u�PL�D$ �
@��Y^M�/L���M����������H��L�MPL��H�KHh�H�sH�{M����i��XZ�Z���DI��$0H�RI��$�M��H�@XL��A�AI�IL�L$I�1�P�YU��L�L$���tI��Y����I�H�5�
�1��:���I�T$�5�����ff.�AWA��AVI��AUI��ATUSH��I��`�H�.I��$��UPH�@XH��H�H���@H�0�]IH�CH�I��$XH����I;|$@�����A��ulI�D$ H�C�Et=�EIH�H��tAH�H�P�EIH�PH�I�ExH��1�[]A\A]A^A_�D�@�EIH�H��u�H�@��@1�H�5G�
��%���I�D$ H�C�E�}����H�GH�@H���U���D����H�C�Et��P���P����xvH����w��H�CH�����S���fD�E�C���H�{�G����f�I��$0H�RI��$�I��H�@XL��A�AI�IL�L$I�1�P�YS��L�L$���tH��w����I�H�5�
�1��:���I�t$�S����{�ff.���H��H�WP����ff.���H��H�WP1�����ff.���AWAVAUATUH��SH��H��`�L�7L�gHL�o8�SP�CT�J9��H�C`���SPH�PH�S`L�(H�C`H�PH�S`L� H�C`H�PH�S`H�E�fPLePA�|$��H���A�V0M�,$E�|$H�@XL�4�I�H����H�H�EHH���h�x�^H�@H�@xH����H�}HD��L���H�E8H���JH�UHH��t�@t2H�EHA�|$vL����u��H�ExH��1�[]A\A]A^A_�@�z���B�ƍtH�{X1҉sTHc�H���w�HcKPH�CXH��H������H��0H�RH���M��H�@XL��A�AI�IL�L$I�1�P�+Q��L�L$���tQI���f����H��H�EH�o�@�C�C�C<vH���u��H�]H�����I�1��H�5��
�ʃ��H�CH�EH���L��H�5��
�1�觃��H�}HH��t�tAH�=RL��H�5�
�1��{���H�5�f
��j���H�5��
�1��W���H�GH���H��t���H��t�H�}HH�G���H�P�ff.����AWAVAUATUSH��H��(I��`�H�/dH�%(H�D$1�I����E0L�uPH�RXL�$�I�4$H���nI�E H9�tL�&A�|$uA�D$����1��Eu�}H{PL��萘��H�SP�EH�H��B���B��H�D$�zt	�����EH�SPI�M H�L�"A�D$H9�tA�|$u	�����H�|$A�D$t
H�|$�t���H�x1�H�L$dH3%(��H��([]A\A]A^A_��B�BH�T$�x������H�t$A�D$�I�H�t$H��Ao$I�T$H�PH�>�v
�as��H�t$H�>�GH�1��@�E��������f.�I��0H�@I���M��H�AXL�<�A�GI�OI�7�P� N�������I�4$�P���fD���A�D$H�SP�EL�,��I�EH�SP�E�Ao$H�H�I�T$H�P�EH�SPH�H�8�v�r���EH�SPH�H�8�GH�SP�EH�H��@�EH�SPH�L� A�D$�Q�����B�����I�H�5)�
�1��R���I�u ������@AWA��AVI��AUI��ATUSH��I��`�H�I��$��SPH�@XH�,�H�EH���7H�H�D$�kI.D��H�EH�E�{0�^��I;D$@tW�x��A��uwI�D$ H�E�CtH�CIH�H��tLH�H�P�CIH�PH�I�ExH��1�[]A\A]A^A_�Cu�H�EfD�@�CIH�H��u�H�@�@1�H�5_�
��=��I�D$ H�E�C�r�����H�PH�JH���B���D��H�t$H���H�E�Ct��P���5����xvH����o��H�EH������8���fDI��$0H�RI��$�I��H�@XL��A�AI�IL�L$I�1�P�K��L�L$���tH�E����fDI�1��H�52�
�b~��I�D$H�D$�\�����H��H�WP����ff.���H��H�WP1�����ff.���ATUSH�G8H�/H��t H�P0H��tH�Mh�p(H9�v'�@8����u,[H�WPH��]1�A\���f.�H���D�����t�H���}P1��#���}0�I���2��1��Eu�}H{PL��H�ƹ�t���H�x1�[]A\�f���AVAUATUH��SH��I��`�H�dH�%(H�D$1�I����C0H�RXL�$�I�4$H����L�OPL���H��x�<D�cP���A��M�L�L���	��A�|$w1D���L�MPA���<H�
M�
D��Hc�H�>���L���m����fDH�$���1����L�MPH��H�$��A�H��u
D���H���H�{L��襈��H�$H��t���H�UI���H�Bx��H�E1�H�L$dH3%(�nH��[]A\A]A^��H�$H��������L��H���W��L�MPH��H�$���G���@H�$1��I�������L�H��H��H�$�/����H�$1Ƀ�����f�H����F���@H��踑������I��0H�@I���M��H�AXL�4�A�FI�NI�6�P�H�����u8I�EA�EI���A�H�$I�NA�FjATI�6�PL�D$�2��Y^I�4$L���L�MPH���������fDH��H�CH��M��h�H��H�KHH�{��[��XZ�b��������AVAUATUH��SH��H��`�L�'dH�%(H�D$1�L�oHL�w8�SP�CT�J9��*H�C`���SPH�PH�S`L�0H�C`H�PH�S`L�(H�C`H�PH�S`H�H���A�T$PH�@XL�,�I�EH���H��x��I��H�uPA�|$0L��H�D�p�U��H�EHH���l�x�bH�@H�@xH���gH�}HD��H���H�E8H���_H�UHH��t�@tBH�EHH�<$tL���Ï��H�Ex1�H�L$dH3%(�]H��[]A\A]A^��z�~�B���tH�{X1҉sTHc�H�����HcKPH�CXH��H�����H��0H�RH���M��H�@XL�4�A�FI�NI�6�P�E�����tKI�E���f���6��H��H�EH�o�@�C�C�C<vH���Jj��H�]H����I�1��H�5*�
�Zx��H�C�b���H��H�57�
�1��;x��H�5\[
��*x��H�}HH��t�t5H��FH��H�5�
�1��w��H�5��
�1���w���f��H�GH���H��t���H��t�H�}HH�G���H�P�ff.���AWAVAUATUH��SH��(H��`�L�7dH�%(H�D$1�L�gHL�o8�SP�CT�J9��(H�C`���SPH�PH�S`L�(H�C`H�PH�S`L� H�C`L�d$H�PH�S`L��H�H�uPA�~P��R���x�L�(D�xH���A�V0H�@XL�4�I�H����H�H�EHH����x�uH�@H�@xH���zH�}HD��L���H�E8H���rH�UHH��t�@tIH�EHH�|$tL�����H�Ex1�H�L$dH3%(�oH��([]A\A]A^A_���z���B믍tH�{X1҉sTHc�H�����HcKPH�CXH��H�����H��0H�RH���M��H�@XL��A�AI�IL�L$I�1�P��B��L�L$���tQI�����f���F��H��H�EH�o�@�C�C�C<vH���Zg��H�]H���I�1��H�5:�
�ju��H�CH�EH���L��H�5C�
�1��Gu��H�5hX
��6u��H�}HH��t�t5H��CL��H�5�
�1��
u��H�5��
�1��t���r��H�GH���H��t���H��t�H�}HH�G���H�P����AWAVAUATUH��SH��(I��`�H�dH�%(H�D$1�I����C0L�sPH�RXL�$�I�4$H���~I�E H9�tL�&A�|$uA�D$����1��C��L��A�1��`���CH�UPH�H���HH��B���B��H�D$�zt	�����CH�UPI�M H�L�"A�D$H9�tA�|$u	�����H�|$A�D$t
H�|$����H�Ex1�H�L$dH3%(��H��([]A\A]A^A_�{H}P�4���@�B�BH�T$�i������H�t$A�D$����H�t$H��Ao$I�T$H�PH�>�v
��d��H�t$H�>�GH�1��@�C������r���f�I��0H�@I���M��H�AXL�<�A�GI�OI�7�P�?�������I�4$�@���fD���A�D$H�UP�CL�,���I�EH�UP�C�Ao$H�H�I�T$H�P�CH�UPH�H�8�v�d���CH�UPH�H�8�GH�UP�CH�H��@�CH�UPH�L� A�D$�J�����B�
����I�H�5��
�1���q��I�u ����T��H�5�
���q����AVAUATI��USH��H��`�L�7dH�%(H�D$1�H���A�F0H�RXH�,�L�mM����I�D$�8��I�m�}�Eth���E����9���H��(����H�PH��(H�(1�I�$xH�L$dH3%(��H��[]A\A]A^�������EI�m�E�f.�I�D$8H��t!H�P0H��t	A�NP;H(v\�@8�����@���L���S����tH�� 1҉�Hc�H���i��Hc�H�� H��H���(�����A�H���D���������E���I�E�oEH�UH�PI�}�v	��a��I�}�GI�E�@I�m�
����H��0H�@H���I��H�AXL�,�A�EI�MI�u�P�<�����u7H�C�CI�MA�H�$H���A�EjUI�u�PL�D$�&��XZL�mM������H�5wE
�1��co������ff.���H�H�xh=u%H�W8H��tH�J0H��t�@P;B(v�B8����u%�8R�����H���D�������3�����AUATUSH��L�'dH�%(H�D$1�A�D$0HGPL�(M���JI�UH���B���B���B�BH�$H��`�I�EH;C@�H�E�8��M�eA�|$A�D$u����A�D$M�eA�D$��A�D$����9���H��(����H�PH��(L� H�<$tH���a���H�Ex1�H�L$dH3%(��H��[]A\A]��zH�$�1������(����B����@H�E8H��t&H�P0H��tA�L$P;H(���@8��������H�uPH���ud���v���H�P�B���Btq�zH�$t	���H�5KC
�1��7m����tH�� 1҉�Hc�H�����Hc�H�� H��H��������B�BH�$���A�H���D����;���@���A�D$�>��I�E�Ao$I�T$H�PI�}�v	�Y^��I�}�GI�E�@M�e����D�h�����H���I�E�o
H�RH�PI�E�@����B�������f���H�H�xh=u%H�W8H��tH�J0H��t�@P;B(v�B8����u%H�wP��b��@��H���D����������AWAVI��AUATLc�UH��SH��8I�`�H�dH�%(H�D$(1�I����C0H�RXL�<�M�/M����H�D$I�}�G<��H�sP<�4<��A�����Cd<t:�oCPH�S`L�d$)D$H�T$ <vL����\��L���V���|$$uOL��@H�ChH���bH��u4H�E1�H��x,I�UHcJH9�}H�E1�<0A���@E��tsE1�CI��DH�ChH��tHH��u1ɋCI�E����H�H�Ex1�H�L$(dH3%(�H��8[]A\A]A^A_�fD�CI�L�$��@�{dH�?�s�CdH��
Hc�H�>��fD1�H�{hH�G��E��tm�PPLc��M���f.�I��0H�@I���M��H�AXH�ЋpH�H�VH�0�6��I�`����t-M�/H�D$M�����3����P`Lc����DH�D$M�i ����fDH�sPH�T$�6���������H�ChH����H�������H�D$E1�H�8�B����A���z����H�L$�H�5�7�j1����t��Q�����CXH�sPH�L$�P�,w����t��3����H,sPH�T$�p5�����n�������H�5!�
�1��h������H�D$E1�H��xA������H�E1�H������I�UE1�HcRH9�A���������ff.�f���H��H�WP��{���ff.���H��H�WP1��^���ff.���AWAVAUATUH��SH��(I��`�H�dH�%(H�D$1�I����C0H�RXL�4�M�&M����H�wPL���I�$�x�J�{PL�|$L���jC�����1�L��H}PA�H�����H�|$tL����}��D���L�MPA���8H�
M�
D��Hc�H�>��@H�D$���1�誾��L�MPH��H�D$��A�H��uD���f�H���H�{L���Ms��H�D$H��t���H�UI���H�Bx��H�E1�H�t$dH34%(�xH��([]A\A]A^A_�@H�D$H����fD���L��H�T$�=B��L�MPH��H�D$���>���f�H�D$1��@������L�H��H��H�D$�&���fDH�D$1Ƀ�����H����?���@H�|$�V|�������I��0H�@I���M��H�AXL�$�A�D$I�L$I�4$�P�2�����u<I�EA�EI���A�H�D$I�L$A�D$jAVI�4$�PL�D$ ���Y^M�&H�uPL���M����������H��H�CI��L��h�H��H�KHH�{M���zF��XZ�X������ff.���AWAVAUATUH��SH��I��`�L�'I���A�T$0H�@XH��H�H���!H�H����{�
H���C���I��H�CL�xM����M��trI���H��t.�P������tI��PH�x�C������DA�D$HEPH�PH�I�����H�ExH��1�[]A\A]A^A_�@I�VH�5t
�1��!d���M��u�H�5t�
�1��d���I��PI9������H�
�2H��tH�HI�VH�5]�
�1���c��f�I��0H�RI���I��H�@XL�4�A�FI�NI�6�P�0�������H������E�t$LuP���H��I�FA�D$H�UPL�tA��A�I�VH�UPA�D$H�D�@H�UPA�D$H�D�@A�D$H�UPH�D�@A�D$uI��������A�|$H}PH���Ey�����I�H�5��
1�I�]���b�����H�5�
�1��b��I��PH�
L1H��tH�HI�VH�5D�
�1��b��AWAVI��AUATLc�UH��SH��8I�`�H�dH�%(H�D$(1�I����C0H�RXL�<�M�/M����H�D$�{P1�螹��I�}�W���������uA���MDE1�CI��DH�ChH��tHH��u1ɋCI�E����H�H�Ex1�H�t$(dH34%(��H��8[]A\A]A^A_�fD�CI�L�$��@E��u��xH�?��PH�
�
Hc�H�>��f�I��0H�@I���M��H�AXH�ЋpH�H�VH�0�.��I�`����tUM�/H�D$M����������1�H�{hH�OH����E��t�QPLc������Q`Lc�����DH�D$M�i ���fD�P��t?�oL�d$)D$H�@H�D$ ��vL���KR��L�������|$$�x���L��DH�ShH���*H���X���H�H���L���I�UHcJH9��;���H�E1�<0A���+�����pH�L$�VH�0�=n��������H�ChH����H����H�D$E1�H�8�ݿ����A������f��H,0H�T$�Q,����t�����H�0H�T$�3,����t����f.�H�L$�H�5.��'�����m����m���DH�5��
�1��E_���P���H�D$E1�H��xA���;���H�H���,���I�UE1�HcRH9�A�����������H��H�WP��k���ff.���H��H�WP1��N���ff.���AWAVAUATUSH��H��8I��`�H�/dH�%(H�D$(1�I����E0H�RXL�4�M�&M����L�t$H�sP�}PL���/:��H��I�E I9�tM�<$A�u
A�G����1��E���L���"t��H�|$tL���rt��H�SP�EH�H��B���B��H�D$ �zt	�����EH�SPI�M H�L�"A�D$H9�tA�|$u	��� ��H�|$ A�D$t
H�|$ �s��H�x1�H�L$(dH3%(��H��8[]A\A]A^A_�D�B�BH�T$ �v����}H{P����@���H�T$A�G躼��H�T$I�$�AoI�OH�HI�<$�v��N��I�<$H�T$�GI�$1��@�E������@I��0H�@I���M��H�AXL�$�A�D$I�L$I�4$�P�)�������M�&�!���@���A�D$H�SP�EL�,����I�EH�SP�E�Ao$H�H�I�T$H�P�EH�SPH�H�8�v�N���EH�SPH�H�8�GH�SP�EH�H��@�EH�SPH�L� A�D$�G�����B�
����I�$�1�L�t$H�5�
M�e �[��H�sP�}PL���7��H���n����$��@H�G0H��to9w(rjAWAVAUATA��UH�ՍV�SH��H��L�,�H��I�}H��tGH���>�E<�r����A�}��H��[]A\A]A^A_���f�A�}t�H���]�E<tɄ�uA�}u�H���ew��H��H�sD��L��)H�{H�
��I��AP莱��ZY�f.�A�u���2���H���q�@(�L�pL�-J
H�X
LD�H���v��H��`�H�KL�KH���H�RpH���H�IL��H�5�(H��t=H�z@H��t4H��RpR���VPAVAU1�D��H�5��
�Z��H��01�����VPAVAU1�D��H�5ف
��Y��H�� 1����f�A�u���R���I��H��t:�@(�L�xH��H�}~
L�-a~
LD��(v��L��H��������V����M�}L�-J~
H���u��H��H�sM��H�{�pL�
/~
L��D������^_����f�H�
�'H��I�����fDM�uL�-�}
����A�u��蒣��H��tM�@(�L�@H�
�}
H��}
HD�H��H�sH�{D��H��'L�
�P萯��AXAY����M�EH�
z}
�H�`�H�SL�KH���H�@pH��t[H�JL�<�H�5.'H��t-H�P@H��t$H��@pPH�y����VPH�&�VP����H�\�VPH��VP�/���H�
�&H��I���f.���AWAVAUATI��USH��(H��`�H�/dH�%(H�D$1�H��(L�m0H�Q�A9���Ic�Hc�H)�L�t��E���G����H�D$E1�I�.H��0D��H������}t?L��L���tg��I�$x1�H�t$dH34%(��H��([]A\A]A^A_�f.����M�/t�}t.A�mI�/�E�H�wP�}H�T$���I���m����H�T$H�t$H����w��A��H�EH�x�(A�m��m���H�5fG
�I��oEH��H�T$H�EH�C1��C�C�V��H�EH��P�H�SE������H�|$�A������@�}�H�D$��
��I�����f.��EdL�uP��<v2H��0L��D�����M�L$PH�u1�A�L��1��tb������蕵��H�|$1�H�D$�oMPH�U`H�P�@��}��L�t$A�FA�F��D��H�T$H�5�e
�1��U��ff.����AWAVAUATUSH��H��8H��`�L�'dH�%(H�D$(1�H��(I�t$0H�A�9���Hc�H�H��0H)�L�l��I�U���A�D$���>��tyH�D$E1�M�eA�|$t9L��L���d��H�x1�H�L$(dH3%(�H��8[]A\A]A^A_�D���M�.tA�|$t4A�mM�&A�D$�@H�sPA�|$H�T$����I���x���DH�T$H�t$ L���Nu��A��I�D$H�x��A�m����H�5�D
�I��Ao$H��H�T$ I�D$H�E1��E�E�!T��I�D$L��P�EH�UE������H�|$ 輳�����A�|$�H�D$�H��I�����H�|$ H�t$�r��L�kpH�t$1�H��0I������M����I�E@H����I�UL���D�zp��r��I�T$0L��H�5�
AWI���1�AUL�D$0�VS��XZA�|$�B���A�D$H�SPH�L� A�l$�&���A�|$vL���D��L;e ����L���ʲ������`r��I�T$0L��L�D$ I��H�5��
�1���R����V��H�T$ H�5�b
�1��R��ff.�AWAVAUI��ATUSH��HH�H�WdH�%(H�D$81��k��Ճ����D$(�B�l$�t�����I��`�L�chA��A���J9��zI��(��A��H�PI��(L� I��(H�PI��(H��CIEPH�PH�I�E�8t
L�`M���6I��XM��PH�D$I�EHI��XI�U�:��1�H����I��P�D$�CI�UP�DI�MH�AH��tI��X�m�1�CIEP@����@����H�@I��pI�VhH9��H�P�I��pH�I�EI���I�UP�CI�.I�}H�I��0I�H����I��0I�UP�H9�C�L�L$(�����{I}PH�t	H���g��M��xI�E@I�.I��0I��hI�}I9�p�_�
��I�}�A���I�EhI������H�D$ ��H�T$ H�BI�UP�CH�DH����oH�RH�PM�EHM�����CIEPH�HH�PI�E8D�L$�shH�xI�@���I�E�8�I�}8誯���T$(����I�UP�CH�D�@�CI�UPH�D�@I�E@I�EI�EI�N`I�FHA�FPI��XH�Q���I�V`A�FPH���I���H�A�tH��t�W�@�������|$�I�V`A�FPH�J�H�r��I�N`H�J�I�v`H�R�A�FPI�MHI�U8I��(H�J�L�b�qA)���~O�i�M��H��H��H�D��H�D$H�D$0H�D$@I��I�H�|$H�T$0I��#e��L;|$u�H��M�$�I���M��(t,1�����D$(��u�{I}PH�tH����d��fDI�Ex1�H�\$8dH3%(��H��H[]A\A]A^A_�fDH�BL�BH���GH�PH�
��H�52
�1��N�����@H�J�g�����Q���������H�5sr
L�ar
H�ILDƃ�H�PH�5�{
�1���������M��I�M�CIEP�1@���D���DH�D$ �A9��D$/����H�T$ H�BI�UP�CH�DH����o
H�RH�PI�}H�0tGI��(H�B�H��t7H��H��1�H)�H�B�L�~�H�D$ �I�}I���I�����k�L9|$ u�H���H�H�����t$L��Ћt$(M��������CI�UP�t$/@�t������tI�� 1�A��Hc�H��般��Ic�I�� H��H���S���fD�|$�%���H�t$M��PI��X�
���DI��X�b��I�V`A�FP��f.��[��I��pH�PI��pI�UH�P���@�SIUPH�z�:���I����,����H�T$�i���H�T$H�BI�UP�CH�DH����oH�RH�P���f�H�D$�D$���D���WI��X�W����I�u�C1�IEPI�MH�~9L�N@tH�PH�pD�D$�{hA���U���D�{I}PH���a���h����H親��H��XZ1�1�I�EE1�H���<���I�E����H�
�H������H�x藪������f���S���k����A��H�BH�J�H�5}.
H�P1��J��H�5�x
�1��J��ff.�@��H�G8H�G���ff.�@��AVAUATUH��SH��`�L�'L�oH�SP�CTL�w8�J9�}rH�C`��H�M�SPH�PH�S`L�0H�C`H�PH�S`L�(H�C`H�PH�S`H�A�D$8I�t$0H��8�P�>�����tFH�EH[H��]A\A]A^������tH�{X1҉sTHc�H��藩��HcKPH�CXH��H���e���I�T$0H�5�u
�1��{I��ff.�AWI��AVAUATI��USH��(I��`�H��|$�SPdH�%(H�D$1�I���H�@XH�,�H�EH���gH�H�D$�kI/L�l$H�EL��H�E�{0I�7��$��I;F@���x���|$��I�F H�E�Ctq�CIH�H��tuH�H�P�CIH�PH�H�|$tL���^��I�$x1�H�L$dH3%(�1H��([]A\A]A^A_�D�Cu�H�EfD�@�CIH�H��u�H�@�@1�H�5Gp
��%H��I�F H�E�C�J���빐H�PH�JH�������T$H�t$H���H�E�Ct��P�������xvH����8��H�EH��肧������DI��0H�RI���I��H�@XL�,�A�EI�MI�u�P�w�����tH�E�Z���f�I�U1��H�5)k
�YG��I�FH�D$�4�������fD��H��H�WP����ff.���H��H�WP1����ff.���AVAUATUSH��H��H�/dH�%(H�D$1�H�G8H��t H�P0H��tH�Mh�p(H9�v<�@8����uAH�SPH��1��3���H�L$dH3%(��H��[]A\A]A^�f�H���D�����t��}P1�I������}0H�sPL��I�����1��Et9�L��H���9\��H�<$H��t�t*L���\��H�x1��t�����}H{P���tZ�EuʋEHCPH�H��t]H�H�P�EHCPH�PH��EH�SPH�L�(A�}u	A�E��w4H�<$t��|���fD�J����u�Eu��fDH�@뮃��A�EH�SP�EL�4��I�H�SP�E�AoEH�H�I�UH�P�EH�SPH�H�8�v�6���EH�SPH�H�8�G�EH�SPH�H��@�I����v��fD��AVAUATUSH��H�� I��`�H�/dH�%(H�D$1�I����E0H�RXL�$�I�4$H����I�E D�ePLcPH9�tL�6A�~u
A�F���1��E��A��L����A�|$vL���M5���EH�SPH�H���MH��B���B��H�D$�zt	�����EH�SPI�M H�L�"A�D$H9�tA�|$u	�����H�|$A�D$t
H�|$�(Z��H�x1�H�L$dH3%(��H�� []A\A]A^�}H{P�$���@�B�BH�T$�l������H�t$A�F��H�t$H��AoI�VH�PH�>�v
�5��H�t$H�>�GH�1��@�E������u���DI��0H�@I���M��H�AXL�4�A�FI�NI�6�P���������I�4$�*���fD���A�D$H�SP�EL�,�;���I�EH�SP�E�Ao$H�H�I�T$H�P�EH�SPH�H�8�v�>4���EH�SPH�H�8�GH�SP�EH�H��@�EH�SPH�L� A�D$�M�����B�����I�H�5�e
�1��B��D�ePI�u LcP�u����l��H�5�e
���A��ff.���AUATUSH��H��H�/dH�%(H�D$1��E0HGPH�UPH�0H����H��A���A��H�$�yt	����1��Eu�}H{P��SW��H�<$H��t�t\H���W��H�x1�H�T$dH3%(�_H��[]A\A]��H�H�A���A�z����A�AH�$�@�tr�Eu��EHCPH�H����H�H�P�EHCPH�PH��EH�SPH�L� A�|$u
A�D$��w<H�<$�M����@���@�A������E����u�Eu��fD���A�D$H�SP�EL�,�˟��I�EH�SP�E�Ao$H�H�I�T$H�P�EH�SPH�H�8�v��1���EH�SPH�H�8�G�EH�SPH�H��@�>���f�H�@�����>��ff.���AVAUATUSH��H�� I��`�H�/dH�%(H�D$1�I����E0H�RXL�4�M�&M�����EPHCPH�D$I�E I9�tM�4$A�~u
A�F����辞��H�T$1��oH�D$�R�@�P�@�Eu�}H{PH�¹L����T��H�|$�BU��H�SP�EH�H��B���B��H�D$�zt	�����EH�SPI�M H�L�"A�D$H9�tA�|$u	������H�|$A�D$t
H�|$��T��H�x1�H�t$dH34%(��H�� []A\A]A^���B�BH�T$�v������A�F蟝��I�$�AoI�VH�PI�<$�v	�/��I�<$�GI�$�@���@I��0H�@I���M��H�AXL�$�A�D$I�L$I�4$�P�
�������M�&�'���@���A�D$H�SP�EL�,���I�EH�SP�E�Ao$H�H�I�T$H�P�EH�SPH�H�8�v�.���EH�SPH�H�8�GH�SP�EH�H��@�EH�SPH�L� A�D$�o�����B�2����I�$1��M�e H�5�`
�<���EPHCPH�D$�t����'�����AUATUSH��H��H�/dH�%(H�D$1��E0HGPH�0H����H��B���B��H�$�zt	����1��Eu�}H{PA�1�1��R��H�<$H��t�tcH���kR��H�x1�H�L$dH3%(�nH��[]A\A]�fDH�P�B���B�v����B�BH�$�y���f��tr�Eu��EHCPH�H���H�H�P�EHCPH�PH��EH�SPH�L� A�|$u
A�D$��w<H�<$�F����9���@�B�����S@����u�Eu��fD���A�D$H�SP�EL�,蓚��I�EH�SP�E�Ao$H�H�I�T$H�P�EH�SPH�H�8�v�,���EH�SPH�H�8�G�EH�SPH�H��@�>���f.�H�@������ff.���AUATUSH��H��H�/dH�%(H�D$1��E0HGPH�0H����H��B���B��H�$�zt	����1��Eu�}H{PA�1�1��"��H�<$H��t�tcH���;P��H�x1�H�L$dH3%(�nH��[]A\A]�fDH�P�B���B�v����B�BH�$�y���f��tr�Eu��EHCPH�H���H�H�P�EHCPH�PH��EH�SPH�L� A�|$u
A�D$��w<H�<$�F����9���@�B�����#>����u�Eu��fD���A�D$H�SP�EL�,�c���I�EH�SP�E�Ao$H�H�I�T$H�P�EH�SPH�H�8�v�f*���EH�SPH�H�8�G�EH�SPH�H��@�>���f.�H�@�����γ�ff.���AUATUSH��H��H�/dH�%(H�D$1��E0HGPH�UPH�0H����H��A���A��H�$�yt	����1��Eu�}H{PA�1�����H�<$H��t�tYH���	N��H�x1�H�T$dH3%(�\H��[]A\A]�@H�H�A���A�z����A�AH�$�@�tr�Eu��EHCPH�H����H�H�P�EHCPH�PH��EH�SPH�L� A�|$u
A�D$��w<H�<$�P����C���@�A������;����u�Eu��fD���A�D$H�SP�EL�,�;���I�EH�SP�E�Ao$H�H�I�T$H�P�EH�SPH�H�8�v�>(���EH�SPH�H�8�G�EH�SPH�H��@�>���f�H�@����讱�ff.���AUATUSH��H��H�/dH�%(H�D$1��E0HGPH�UPH�0H����H��A���A��H�$�yt	����1��Eu�}H{PA�1�����H�<$H��t�tYH����K��H�x1�H�T$dH3%(�\H��[]A\A]�@H�H�A���A�z����A�AH�$�@�tr�Eu��EHCPH�H����H�H�P�EHCPH�PH��EH�SPH�L� A�|$u
A�D$��w<H�<$�P����C���@�A�������9����u�Eu��fD���A�D$H�SP�EL�,����I�EH�SP�E�Ao$H�H�I�T$H�P�EH�SPH�H�8�v�&���EH�SPH�H�8�G�EH�SPH�H��@�>���f�H�@����莯�ff.���AWAVAUATUSH��H��8I��`�H�/dH�%(H�D$(1�I����E0H�RXL�4�M�&M����L�t$H�sP�}PL���o��H��I�E I9�tM�<$A�u
A�G���1��E��1�A�L�����H�|$tL���I���EH�SPH�H���_H��B���B��H�D$ �zt	�����EH�SPI�M H�L�"A�D$H9�tA�|$u	�����H�|$ A�D$t
H�|$ �*I��H�x1�H�L$(dH3%(��H��8[]A\A]A^A_�}H{P�%���@�B�BH�T$ �j������H�T$A�G��H�T$I�$�AoI�OH�HI�<$�v�
$��I�<$H�T$�GI�$1��@�E������q����I��0H�@I���M��H�AXL�$�A�D$I�L$I�4$�P���������M�&����@���A�D$H�SP�EL�,�;���I�EH�SP�E�Ao$H�H�I�T$H�P�EH�SPH�H�8�v�>#���EH�SPH�H�8�GH�SP�EH�H��@�EH�SPH�L� A�D$�K�����B�����I�$�1�L�t$H�5�T
M�e �0��H�sP�}PL�����H���f����\��H�5�T
���0��ff.���AVAUATUSH��H��I��`�H�/dH�%(H�D$1�I��$��UPH�@XL�,�I�EH���3H��E0HCPH�0H����H��A���A��H�$�yt	���41��Eu�}H{P��F��H�<$H��t�t\H���dF��H�x1�H�\$dH3%(��H��[]A\A]A^�DH�H�A���A�z����A�AH�$�}��������Eu��EHCPH�H���mH�H�P�EHCPH�PH��EH�SPH�L� A�|$uA�D$����H�<$�E����8���@I��$0H�RI��$�M��H�@XL�4�A�FI�NI�6�P������tI�E����A�����I�H�5�R
�1���.��I�T$�`�����3�����n����E�d����������A�D$H�SP�EL�,�#���I�EH�SP�E�Ao$H�H�I�T$H�P�EH�SPH�H�8�v�& ���EH�SPH�H�8�G�EH�SPH�H��@����f.�H�@���莩�ff.���AWAVAUATUSH��H��(I��`�H�/dH�%(H�D$1�I����U0H�@XL�4�M�&M�����UPL�4�I�H����H�I�E I9�tM�4$A�~u
A�F����1��Eu�}H{P�L���`C��H�SP�EH�H��B���B��H�D$�zt	���C�EH�SPI�M H�L�"A�D$H9�tA�|$u	���v��H�|$A�D$t
H�|$�DC��H�x1�H�t$dH34%(�EH��([]A\A]A^A_��B�BH�T$�x������H�T$A�F����H�T$I�$�AoI�NH�HI�<$�v�2��I�<$H�T$�GI�$1��@�E��������f�I��0H�RI���M��H�@XL�$�A�D$I�L$I�4$�P�������DI����UPM�&H�@XL�4�I�H���3���I��0H�RI���M��H�@XL�<�A�GI�OI�7�P��������I��������A�D$H�SP�EL�,���I�EH�SP�E�Ao$H�H�I�T$H�P�EH�SPH�H�8�v����EH�SPH�H�8�GH�SP�EH�H��@�EH�SPH�L� A�D$����B����I�H�5�N
�1���*��I�U����f�I�$1��M�e H�5eN
�*��I���H�@X���������AWAVAUATUSH��H��(H��`�dH�%(H�D$1�H�H��XH�����PPH���H�@XL�$�I�$H����H�0�GH�t$<t:<�\<tFH�x1�H�L$dH3%(�QH��([]A\A]A^A_�DH�GH�@hH���6����~L�'���FH�H
Hc�H�>��fD�F�FL��H�6�P�cV����uOL���M9�uCH�D$I�܋HH�8�q�-3��I��f.�I�D$@H��tM9t$h�M�d$pM��u�H�|$�?��������H,A�1�1�L���	����@H�A�1�1�L��������fDE1�1ɺL��H�5x�������f�H�5�L
�1��(������H��0H�RH���M��H�@XL�,�A�EI�MI�u�P�_������tI�$H��X�8���f.�I�UH�5L
�1��9(��H��XH�u�
����P`�����L�D$H�hX�J�E1��DI�EH��L9������I��L9}u�A�@9Eu�I�0H�}Hc�H�L$L�$���L�$H�L$��u�I�D$XJ���s���H�5�K
�1��'��������H�5�K
��'����AWAVAUATUH��SH��I��`�L�'I���A�D$0H�RXL�,�I�]H���I�F L�+H9�tA�}u
A�E����A�E<tW<��<tH�ExH��1�[]A\A]A^A_�DA�|$dI�]��A�D$dH�SE
Hc�H�>��f�I�EH�@hH���=I�t$PL�������A�E����H��AoEI�UH�PH�;�v�=��H�;�GH��@L�+A�E<�5����f.�I��0H�@I���M��H�AXH�ЋCH�KH�3�P����tI�]H�������f.�H�H�5�I
�1���%��M�n ����A�D$XI�t$PH�ߍP�R���������M���L9������A�D$XI�|$PI��p�^/��H��I�E@H��t
M9}h�}M�mpM��u��\����E1�1ɺH��H�5���G��7���f�I�L$PA�1�1�H���)�����@�I,L$P���H�5�H
�1��$������P`���x���H�XXD�B�E1��I�FH��M9��Z���I��H9Ku�A�D$X9Cu�I�t$PH�;Hc�L�D$H�$��H�$L�D$��u�I�EXJ������H�5�H
�1��r$��H�5jH
��a$�����AVAUATUSH��H��I��`�H�/dH�%(H�D$1�I��$��UPH�@XL�,�I�EH���CH��E0HCPH�0H����H��A���A��H�$�yt	���D1��Eu�}H{PA�1����H�<$H��t�tiH���:��H�x1�H�\$dH3%(��H��[]A\A]A^�f.�H�H�A���A�r����A�AH�$�u���f�����Eu��EHCPH�H���mH�H�P�EHCPH�PH��EH�SPH�L� A�|$uA�D$����H�<$�8����+���@I��$0H�RI��$�M��H�@XL�4�A�FI�NI�6�P�����tI�E�}����A����I�H�5AF
�1��j"��I�T$�P����{'�����n����E�d����������A�D$H�SP�EL�,賁��I�EH�SP�E�Ao$H�H�I�T$H�P�EH�SPH�H�8�v����EH�SPH�H�8�G�EH�SPH�H��@����f.�H�@������ff.���AVAUATUSH��H��I��`�H�/dH�%(H�D$1�I��$��UPH�@XL�,�I�EH���CH��E0HCPH�0H����H��A���A��H�$�yt	���D1��Eu�}H{PA�1�����H�<$H��t�tiH���17��H�x1�H�\$dH3%(��H��[]A\A]A^�f.�H�H�A���A�r����A�AH�$�u���f�����Eu��EHCPH�H���mH�H�P�EHCPH�PH��EH�SPH�L� A�|$uA�D$����H�<$�8����+���@I��$0H�RI��$�M��H�@XL�4�A�FI�NI�6�P�����tI�E�}����A����I�H�5qC
�1����I�T$�P����$�����n����E�d����������A�D$H�SP�EL�,��~��I�EH�SP�E�Ao$H�H�I�T$H�P�EH�SPH�H�8�v�����EH�SPH�H�8�G�EH�SPH�H��@����f.�H�@����N��ff.���AVAUATUSL�/I�Eh��-��OH��`�A�M0I��H���H�RXH�,�H�UH���H�*���H�SH9����}�U����������}���oEI���EA�EA�EA�E<vL����������9��SH��(����H�PH��(L�(1�I�$x[]A\A]A^�DA�U0I�L$P�|�g���H�SH9��D���H�k��V���H�5�J
�1�����>���H�W8H��t!H�J0H��t	A�uP;r(vm�B8�„������[]A\A]A^�a������E�U����9�}NH��(����H�PH��(H�(1�I�$x[]A\A]A^���V�H���D������tH�� 1҉�Hc�H���|��Hc�H�� H��H���f��tH�� 1҉�Hc�H���q|��Hc�H�� H��H���{����H��0H�IH���I��H�@XL�4�A�FI�NI�6�P� ����tI�EhH�U���fDI�1�H�5�?
H�k����I�Eh������A�U0I�L$P�|�?������f���AUATUSH��H��L�'dH�%(H�D$1�H�GPA�l$PA�T$0H�H�H�0H����H��B���B��H�$�zt	���1�A�D$u	A�|$H{PA��H���m����}vH���/��H�<$H��t�t`H���x1��H�x1�H�L$dH3%(�{H��[]A\A]�H�P�B���B�c����B�BH�$�f���f��tzA�D$u�A�D$HCPH�H���
H�H�PA�D$HCPH�PH�A�D$H�SPH�H�(�}u�E��wHH�<$�E����8�����B�����[����u�A�D$u��w���f�����EH�SPA�D$L�,�y��I�EH�SPA�D$�oEH�H�H�UH�PA�D$H�SPH�H�8�v���A�D$H�SPH�H�8�GA�D$H�SPH�H��@�,���@H�@�����ff.���AUATUSH��H��L�'dH�%(H�D$1�H�GPA�l$PA�T$0H�H�H�0H����H��B���B��H�$�zt	���1�A�D$u	A�|$H{PA��H���
����}vH����	��H�<$H��t�t`H���/��H�x1�H�L$dH3%(�{H��[]A\A]�H�P�B���B�c����B�BH�$�f���f��tzA�D$u�A�D$HCPH�H���
H�H�PA�D$HCPH�PH�A�D$H�SPH�H�(�}u�E��wHH�<$�E����8�����B���������u�A�D$u��w���f�����EH�SPA�D$L�,�3w��I�EH�SPA�D$�oEH�H�H�UH�PA�D$H�SPH�H�8�v�4	��A�D$H�SPH�H�8�GA�D$H�SPH�H��@�,���@H�@���螒�ff.�AWAVI��AUATLc�UH��SH��8I�`�H�dH�%(H�D$(1�I����C0H�RXL�<�M�/M����H�$�{PL�|$I�6L���v�I�}�W���������u
A���]E1�H�|$tL����,���CI��DH�ChH��tEH��u1ɋCI�E����H�H�Ex1�H�t$(dH34%(��H��8[]A\A]A^A_��CI�L�$��@E���z����xH�?�
�PH�
4
Hc�H�>��DI��0H�@I���M��H�AXH�ЋpH�H�VH�0��I�`����t]M�/H�$M������E1�����f�1�H�{hH�OH����E��t�QPLc�������Q`Lc�����DH�$M�i �n�����P��t?�oL�d$)D$H�@H�D$ ��vL������L���;����|$$�c���L��DH�ShH���!H���C���H�H���7���I�UHcJH9��&���H�E1�<0A�������pH��VH�0�"���������H�ChH����H�����H�$E1�H�8�`t����A������D�H,0H�������t����f.�H�0H������t����@H��H�5���T�����u����m����H�5A<
�1������N����H�$E1�H��xA���/���H�H��� ���I�UE1�HcRH9�A�����������H��H�WP��[���ff.���H��H�WP1��>���ff.���AWAVAUATUH��SH��(I��`�H�dH�%(H�D$1�I����S0H�@XL�4�M�&M�����SPL�4�I�H����H�I�E I9�tM�4$A�~u
A�F����1��C��A�1�L������CH�UPH�H����H��B���B��H�D$�zt	���J�CH�UPI�M H�L�"A�D$H9�tA�|$u	���}��H�|$A�D$t
H�|$�{(��H�Ex1�H�t$dH34%(�XH��([]A\A]A^A_�{H}P�4���@�B�BH�T$�i������H�T$A�F�Bq��H�T$I�$�AoI�NH�HI�<$�v�Z��I�<$H�T$�GI�$1��@�C������q����I��0H�RI���M��H�@XL�$�A�D$I�L$I�4$�P�������I����SPM�&H�@XL�4�I�H���#���I��0H�RI���M��H�@XL�<�A�GI�OI�7�P��������I���������A�D$H�UP�CL�,�+p��I�EH�UP�C�Ao$H�H�I�T$H�P�CH�UPH�H�8�v�.���CH�UPH�H�8�GH�UP�CH�H��@�CH�UPH�L� A�D$�����B����I�$1��M�e H�5�3
����I���H�@X���DI�H�5�3
�1�����I�U����H�5�3
�����#����ATUSH�� H�dH�%(H�D$1��B0HGPH�(H���NH�MH���A���A��A�AH�L$H�`�H�EH;A@�k�o�JH�sPH�@H�D�zH{P�v����L�eA�|$uA�D$���WA�|$��I�D$H�P@H����H�xH��L��҃@H��H�D$� ��H�EH��H�t$H�@�PHH�|$��$��H�|$t
H�|$��$��H�x1�H�t$dH34%(�0H�� []A\�fDH�D$�y����������A���L������fDH�P�B���Bt1H�D$�zt	����H�5�8
�1���
��fD�B�BH�T$��fD�B�+���H�I �BH�SP�oH�IH�L�
���D���A�D$�m��H�E�Ao$I�T$H�PH�}�v	�1���H�}�GH�E�@L�e�V���D�B�>���貈�f���ATUSH�� H�dH�%(H�D$1��B0HGPH�(H���NH�MH���A���A��A�AH�L$H�`�H�EH;A@�k�o�JH�sPH�@H�D�zH{P�v�i���L�eA�|$uA�D$���WA�|$��I�D$H�P@H����H�xH��L��҃@H��H�D$�p��H�EH��H�t$H�@�PHH�|$�"��H�|$t
H�|$�q"��H�x1�H�t$dH34%(�0H�� []A\�fDH�D$�y����������A���L�������fDH�P�B���Bt1H�D$�zt	����H�5"6
�1��v��fD�B�BH�T$��fD�B�+���H�I �BH�SP�oH�IH�L�
���D���A�D$�j��H�E�Ao$I�T$H�PH�}�v	���H�}�GH�E�@L�e�V���D�B�>����B��f���AUATUSH��H��(H�/H�wPdH�%(H�D$1�L�d$�}PL���X��M0HKPH�1H����H�>�W�J��O�����G�GH�|$1��Eu�}H{P�H���5 ��H�|$tL��� ��H�|$H��t���H�|$�g ��H�x1�H�T$dH3%(��H��([]A\A]�f�H�D$��|������s����G�j���H�I�Q���Q��H�D$�y�A������8����A�/�����~�E�[����EHCPH�H���	H�H�P�EHCPH�PH��EH�SPH�L� A�|$u
A�D$��wDH�|$���������A�AH�L$��������u�Eu��w������A�D$H�SP�EL�,�Sh��I�EH�SP�E�Ao$H�H�I�T$H�P�EH�SPH�H�8�v�V����EH�SPH�H�8�G�EH�SPH�H��@�6���f.�H�@���较�ff.���AUATUSH��H��(H�/H�wPdH�%(H�D$1�L�d$�}PL������M0HKPH�1H����H�>�W�J��O�����G�GH�|$1��Eu�}H{P1�A�H���Ҥ��H�|$tL������H�|$H��t���H�|$����H�x1�H�T$dH3%(��H��([]A\A]��H�D$��t������k����G�b���H�I�Q���Q��H�D$�y�9������0����A�'������~�E�N����EHCPH�H���	H�H�P�EHCPH�PH��EH�SPH�L� A�|$u
A�D$��wDH�|$��������A�AH�L$����s����u�Eu��w������A�D$H�SP�EL�,�e��I�EH�SP�E�Ao$H�H�I�T$H�P�EH�SPH�H�8�v����EH�SPH�H�8�G�EH�SPH�H��@�6���f.�H�@������ff.���AUATUSH��H��(H�/H�wPdH�%(H�D$1�L�d$�}PL���(��M0HKPH�1H����H�>�W�J��O�����G�GH�|$1��Eu�}H{P1�A�H���2���H�|$tL���R��H�|$H��t���H�|$�4��H�x1�H�T$dH3%(��H��([]A\A]��H�D$��t������k����G�b���H�I�Q���Q��H�D$�y�9������0����A�'������~�E�N����EHCPH�H���	H�H�P�EHCPH�PH��EH�SPH�L� A�|$u
A�D$��wDH�|$��������A�AH�L$���������u�Eu��w������A�D$H�SP�EL�,�c��I�EH�SP�E�Ao$H�H�I�T$H�P�EH�SPH�H�8�v�����EH�SPH�H�8�G�EH�SPH�H��@�6���f.�H�@����~~�ff.���ATUH��SH�� H�L�OPdH�%(H�D$1��C0L���I�4H��t/H��B���Bui�B�BH�T$H�L�MP�x�����A�H�SP1�L�螟��D���L�MPA����H�
!
D��Hc�H�>��DH�D$�zt���u��B�fD���1�H�D$�Y��L�MPH��H�D$��A�H��uD���f�H���H�{L���-��H�D$H��t��H�|$t
H�|$�	��H�`�H�UH���H�Bx��H�E1�H�t$dH34%(��H�� []A\�f�H�D$H����k������L��H�T$���L�MPH��H�D$���&����H�D$1��0������L�H��H��H�D$����fDH��H�CH��M��h�H��H�KHH�{�
�XZ����fDH�D$1Ƀ�����H�������@H�|$��������|�ff.����ATUH��SH�� H�L�OPdH�%(H�D$1��C0L���I�4H��t/H��B���Bui�B�BH�T$H�L�MP�x�����A�1�1�L��0���D���L�MPA����H�
�
D��Hc�H�>���H�D$�zt���u��B�fD���1�H�D$�W��L�MPH��H�D$��A�H��uD���f�H���H�{L�����H�D$H��t��H�|$t
H�|$���H�`�H�UH���H�Bx��H�E1�H�\$dH3%(��H�� []A\�f�H�D$H����k������L��H�T$���L�MPH��H�D$���&����H�D$1��0������L�H��H��H�D$����fDH��H�CH��M��h�H��H�KHH�{���XZ����fDH�D$1Ƀ�����H�������@H�|$��������y�ff.����AUATUSH��H��(H�/dH�%(H�D$1��EPHGPL�(M����I�U�B���B�&�B�BH�T$I�UH�Eh�zu
H����H��uI�E�@H�CP�U0H�L� H�PI9���M����I�$�B���B���B�BH�T$L��L���/
��H�}huI�$�h�Eu;�EH�SPL�$I�$�@�EHCPH�H���<H�H�P�EHCPH�PH�H�|$t
H�|$�=��H�|$t
H�|$�+��H�x1�H�L$dH3%(�nH��([]A\A]�fDH�D$�z�����������B����H�P�B���B����H�D$�z������������B���H�P�B���Bt!H�D$�zt	����H�Eh�r����B�BH�EhH�T$�Y����1�H�57)
������E0HCPL� �X���fDH�@����H�CP�MP�|����H�|$t>1�H�5�)
����H�`�H��������H���n�����f��B�f.��BH�Eh����v�ff.�AWI��AVAULc�ATI��USH��8I�`�H�dH�%(H�D$(1�I����C0H�RXH�,�L�uM����H�$I��kPH��H�H�l$I�>�O���������u��u
A���E1�@�����S�DH�ChH����H��u1ɋCI�E����H�I�$x1�H�t$(dH34%(�EH��8[]A\A]A^A_�fD�uE��u�H�?@����H�[
Hc�H�>��f��EH�uH��P�.����u*H�ChH����H��uH�$E1�H�8��Y����A�Ő�}vH����I�����f.��CI�L�,�1����@���&�oML�l$)L$H�EH�D$ @���$L���j���|$$L�l$�u��E1�@��w�I�H�����@I��0H�@I���I��H�AXH�ЋpH�H�VH�0����I�`������L�uI�H�$H��M������E1��@���fD��NX��H�T$H���oH�D$�R�@�P1��@I�>H�{h��H�OE��t:�QPLc�H�|$����I�����f.�H�$M�q I��w���@�Q`Lc���L��������H�uH���������2����W����H��H�5���\������
����/�����H,uH���z��������
���DH�ChH����H���h���I�EE1�H���[���I�HcJH9��K���H�E1�<0A���8���DH�5�
�1��e������H�ChH��t-E1�H���
���I���@H�$E1�H��xA���i���I��I�EE1�H������I�E1�HcRH9�A������{r�ff.���H��H�WP����ff.���H��H�WP1����ff.���AWAVAUATUH��SH��I��`�H�dH�%(H�D$1�I��$��SPD�kLoPH�@XL�4�I�H���
L� H�{h�{0um1�E1���M��H�{hH�$tsI��{�Cu���c�CI��C��H�$�CM��t\A�|$��A�D$H�Y
Hc�H�>�����F���H�{hI��H�H�$u�H�$�x���@M��u�I�}H��A�E1��1��Ҩ��� A�D$I�4$H��E1�I�}�P赊��DH�Ex1�H�L$dH3%(��H��[]A\A]A^A_�fD�I,4$I�}H��E1�A���`����fDI�4$I�}H��E1�A���:�����H��H��E1ɺjI�}A�H�5z��I���XZ�R���f�����C�@T��I��oH�SH�PI�>�v�`�I�>�GI��@I��T����H�5���1��]�H���
�����I��$0H�RI��$�M��H�@XL�<�A�GI�OI�7�P�������tQI�������S��H�$�oH�$�R�@�P�@������H��������I�H�5�
1�I������R����$o�@��SH�H���xH{P�I��H��[������AUATUH��SH��H�dH�%(H�D$1��C0HGPH�SPH�{hH�0u"H��@�C0HGPH�H�	H�H�C0HGPH�0H����H��A���A��H�$�yt	����1��Cu�{H}P�����H�<$H��t�t[H���#	��H�Ex1�H�T$dH3%(�eH��[]A\A]�DH�H�A���A�{����A�AH�$�~�����tr�Cu��CHEPH�H���H�H�P�CHEPH�PH��CH�UPH�L� A�|$u
A�D$��w<H�<$�N����A���@�A�����������u�Cu��fD���A�D$H�UP�CL�,�SQ��I�EH�UP�C�Ao$H�H�I�T$H�P�CH�UPH�H�8�v�V��CH�UPH�H�8�G�CH�UPH�H��@�>���f.�H�@�����l�ff.���AUATUSH��H��(H�/dH�%(H�D$1��EPHGP�H�D$�P��H�T$�oH�D$�R�@�P�@�U0HSPH�2H����H��y�W��Q����H�D$�yt	����1��Eu�}H{P�H���x��H�|$����H�|$H��t�t^H�|$���H�x1�H�t$dH34%(�gH��([]A\A]��H�J�Q���Q�i����A�AH�L$�l����tr�Eu��EHCPH�H���H�H�P�EHCPH�PH��EH�SPH�L� A�|$u
A�D$��w<H�|$�L����=����A�������u�Eu��fD���A�D$H�SP�EL�,��N��I�EH�SP�E�Ao$H�H�I�T$H�P�EH�SPH�H�8�v����EH�SPH�H�8�G�EH�SPH�H��@�>���f.�H�@�����Nj�ff.���AVAUATUSH�G8H�/H��t$H�P0H��tH�Mh�p(H9����@8����u[H�WP]H��A\1�A]A^�Nf��fDI��`��UPH��I��$�H�@XL�,�I�EH��tZH�I��$X��1��Eu�}H{PI��$X����H�x1�[]A\A]A^�H���D����g����I��$0H�RI��$�M��H�@XL�4�A�FI�NI�6�P覺�����tI�E�f����I�H�5a
�1���I�T$�A�����W��ff.���AWAVAUATUH��SH��8H�H�WPdH�%(H�D$(1��C0L���L�$M��t1I�$�B���B���B�BH�T$I�$�x��I��`��SPI���H�@XL�<�I�H���H����A�H}P1�L�����D���L�MPA����H�
&
D��Hc�H�>��DH�D$�z�o������f����B�]������L�H��H��H�D$ H���H�{L�����H�D$ H��t��KH�|$t
H�|$�y��H�UI���H�Bx�H�E1�H�t$(dH34%(��H��8[]A\A]A^A_�f.����L��H�T$ ���L�MPH��H�D$ ��A�H���O���D����C���H�D$ 1��0���H�D$ H����������1�H�D$ ��B��L�MPH��H�D$ ��듐H��L�MPL��H�KHh�H�sH�{M���\��XI��`�Z���fDH�D$ 1Ƀ��K���f�H������@H�|$ �6������I��0H�RI���M��H�@XL��A�AI�IL�L$I�1�P苷��L�L$���tI����f�I�H�5A
�1��j�I�U�����e�ff.����AUATE1�USH��H��H�/dH�%(H�D$1�H�G8H��t-H�P0H����H�Mh�p(H9���H��E1�D�A�ċE0HCPH�UPH�0H���|H��A���A�}H�$�yt	����1��Eu�}H{P1�E���ʆ��A��ttH�<$tH�����H�x1�H�T$dH3%(��H��[]A\A]�H�H�A���A������A�AH�$�@E1�@8A���5����H�<$H��t�����������E�l����EHCPH�H����H�H�P�EHCPH�PH��EH�SPH�L� A�|$�#���A�D$���������A�D$H�SP�EL�,�H��I�EH�SP�E�Ao$H�H�I�T$H�P�EH�SPH�H�8�v����EH�SPH�H�8�G�EH�SPH�H��@����A�d�����+����n����E������_���H�@�����^c�ff.���AVAUATUH��SH��I��`�H�dH�%(H�D$1�I��$��SPH�@XL�,�I�EH���cH��C0HEPH�{hH�0u"H��@�C0HEPH�H�	H�H�C0HEPH�0H����H��A���A��H�$�yt	���;1��Cu�{H}P�����H�<$H��t�tcH���K���H�Ex1�H�t$dH34%(��H��[]A\A]A^�H�H�A���A�{����A�AH�$�~���f�����Cu��CHEPH�H���mH�H�P�CHEPH�PH��CH�UPH�L� A�|$uA�D$����H�<$�>����1���@I��$0H�RI��$�M��H�@XL�4�A�FI�NI�6�P�޲�����tI�E�]����A����I�H�5�	
�1���I�T$�0���������n����C�d����������A�D$H�UP�CL�,�E��I�EH�UP�C�Ao$H�H�I�T$H�P�CH�UPH�H�8�v����CH�UPH�H�8�G�CH�UPH�H��@����f.�H�@����n`�ff.���AUATUH��SH��(H�L�OPdH�%(H�D$1��C0L���I�4H��t3H��B���B���B�BH�T$H�L�MP�x��D�kP���A��M�L�L������A�}w0D���L�MPA����H�
�
D��Hc�H�>���L�������fDH�D$�z�r������i����B�`������1�H�D$�J;��L�MPH��H�D$��A�H��uD���f�H���H�{L�����H�D$H��t��H�|$t
H�|$����H�`�H�UH���H�Bx��H�E1�H�t$dH34%(��H��([]A\A]��H�D$H����k������L��H�T$�ž��L�MPH��H�D$���&����H�D$1��0������L�H��H��H�D$����fDH��H�CH��M��h�H��H�KHH�{����XZ����fDH�D$1Ƀ�����H�������@H�|$���������]�ff.����AUATUSH��H�/dH�%(H�D$1�H�G8H���/H�P0H��H��tH�Mh�p(H9����@8��������E0HCPH�0H����H��B���B��H�$�zt	���1��Eu�}H{PA�1�1��~��H�<$H��t�tsH������H�x1�H�L$dH3%(��H��[]A\A]�fDH�P�B���B�v����B�BH�$�y����H���D������ ���@�tr�E�}����EHCPH�H����H�H�P�EHCPH�PH��EH�SPH�L� A�|$u
A�D$��w8H�<$�2����%����B��������u�Eu��fD���A�D$H�SP�EL�,��?��I�EH�SP�E�Ao$H�H�I�T$H�P�EH�SPH�H�8�v�����EH�SPH�H�8�G�EH�SPH�H��@�B���f�H�@����H�5p�	�1������K[�ff.���AWAVAUATE1�USH��H��H�/dH�%(H�D$1�H�G8H��t-H�P0H���H�Mh�p(H9���H��E1�D�A��I��`��UPI���H�@XL�4�I�H����H��E0HCPH�0H����H��A���A��H�$�yt	����1��Eu�}H{P1�E���|��A��t|H�<$tH���-���H�x1�H�\$dH3%(��H��[]A\A]A^A_�@H�H�A���A�{����A�AH�$�~���f�E1�@8A������H�<$H��t���x�����S�E�d����EHCPH�H���VH�H�P�EHCPH�PH��EH�SPH�L� A�|$����A�D$���
������A�D$H�SP�EL�,�\=��I�EH�SP�E�Ao$H�H�I�T$H�P�EH�SPH�H�8�v�_���EH�SPH�H�8�G�EH�SPH�H��@���I��0H�RI���M��H�@XL�<�A�GI�OI�7�P� ������tI�����A�����I�H�5�
�1����I�U�������������E��������H�@����>X�ff.���AWAVAUATUSH��H��(H�/dH�%(H�D$1��E0HGPH�H����H��B���Bug�B�BH�T$H�9�G<��<�m<tkH�|$��H�x1�H�t$dH34%(�@H��([]A\A]A^A_�f�H�D$�zt	����H�9�G<tm<�<u��}dL�'���EdH��	Hc�H�>���H�P�B���BtYH�D$�z�T������K����B�B���@H�GH�@hH����H�uP��H�|$����������B�BH�T$����B�7�����EXH�uPL��P������u�H�`�L���M9�u��EXH�}PI�ݍp��H����M�mpM���j���I�E@H��t�M9}hu�P`��~�L�`XD�B�E1��I�FI��M9�t�I��I9L$u�EXA9D$u�H�uPI�<$Hc�L�D$H�$�E�H�$L�D$��u�I�EXJ���x����E1�1ɺL��H�5ب�'�������f�H�MPA�1�1�L���
������D�H,MP���H�5�	�1����������SU�H�5�	�1����H�5��	����ff.�@��AUATUSH��H��(H�/H�wPdH�%(H�D$1�L�d$�}PL���8���H�}hu#H�KP�U0H�H��B�U0HSPH�
H�	H�J�M0HKPH�1H����H�>�W�J��O�����G�GH�|$1��Eu�}H{P�H�����H�|$tL���;�H�|$H��t���H�|$��H�x1�H�\$dH3%(��H��([]A\A]��H�D$��v������m����G�d���H�I�Q���Q��H�D$�y�;������2����A�)�����~�E�U����EHCPH�H���	H�H�P�EHCPH�PH��EH�SPH�L� A�|$u
A�D$��wDH�|$��������A�AH�L$���������u�Eu��w������A�D$H�SP�EL�,�7��I�EH�SP�E�Ao$H�H�I�T$H�P�EH�SPH�H�8�v����EH�SPH�H�8�G�EH�SPH�H��@�6���f.�H�@����nR�ff.���AUE1�ATUSH��H��L�'dH�%(H�D$1�H�G8H��t.H�P0H���I�L$h�p(H9���H��E1�D�A��H�CPA�l$PA�T$0H�H�H�0H����H��B���B��H�$�zt	���1�A�D$u	A�|$H{PE��H���Fs���}vH�����H�<$A��tnH��tH���Q�H�x1�H�L$dH3%(�uH��[]A\A]�@H�P�B���B�e����B�BH�$�h����E1�@8A������H��t��u��toA�D$�z���A�D$HCPH�H��tjH�H�PA�D$HCPH�PH�A�D$H�SPH�H�(�}u�E��w?H�<$�&���@�B������+����u�A�D$t���@H�@룃���EH�SPA�D$L�,�a4��I�EH�SPA�D$�oEH�H�H�UH�PA�D$H�SPH�H�8�v�b��A�D$H�SPH�H�8�GA�D$H�SPH�H��@�5�����O�ff.�f���AWAVAUATUH��SH��(H�dH�%(H�D$1��CPHGPL� M���-I�$�B���B���B�BH�T$I�$H�Ch�zu
H����H��uI�$�@I��`��C0I���H�RXL�<�M�/M���L��L����H�{huI�E�h�Cu;�CH�UPL�,I�E�@�CHEPH�H���H�H�P�CHEPH�PH�H�|$t
H�|$��H�Ex1�H�t$dH34%(��H��([]A\A]A^A_�H�D$�z�����������B���H�P�B���Bt)H�D$�zt	���)H�Ch������B�BH�ChH�T$����I��0H�@I���M��H�AXL�,�A�EI�MI�u�P�O������tjM�/���f�H�@����CPH�MP�|�b���H�|$t~1�H�5u
����H�`�H��������H��������I�FA�FI�MA�H�D$I���A�EjAWI�u�PL�D$ �؈��XM�/Z����fD�B�y�����BH�Ch����M�fD��AVAUATUH��SH�� H�H�wPdH�%(H�D$1��C0L���L�$M��t4I�$�B���B���B�BH�$I�$H�uP�x���{PL�t$L���Ϭ�����1�L��H}PA�H���n��H�|$tL���2�D���L�MPA����H�
��	D��Hc�H�>��f��zH�$�m������d����B�[���@���1�H�D$��'��L�MPH��H�D$��A�H��uD����H���H�{L�����H�D$H��t��H�<$tH���l�H�`�H�UH���H�Bx��H�E1�H�\$dH3%(��H�� []A\A]A^��H�D$H����k������L��H�T$�e���L�MPH��H�D$���.����H�D$1��0������L�H��H��H�D$����fDH��H�CI��L��h�H��H�KHH�{M���j���XZ����H�D$1Ƀ�����H�������@H�|$�V������lJ�ff.����AWAVAUATUH��SH��(I��`�H�dH�%(H�D$1�H�wPI��$��SPD�kH�@XI�L�4�I�H���/L� L�t$H�{h�{0L��uj�=���E1�H�{hH�D$tmI��{�Cu���y�CI��C��H�\$�CM��tVA�|$��A�D$H���	Hc�H�>��@�w��H�{hI��H�H�D$u�H�D$�x���@M��u�I�}H�T$E1�1�A������)f�I�4$I�}H�L$E1�A�D$�P��b��H�|$tL�����H�Ex1�H�L$dH3%(��H��([]A\A]A^A_�fD�I,4$I�}H�T$A�E1���n����@I�4$I�}H�T$E1�A���H����s���H�L$H��E1ɺjI�}A�H�5���Wz��XZ�@�������C�P,��I��oH�SH�PI�?�v�p���I�?�GI��@I��>����H�5���1��m��H�|$�������fDI��$0H�RI��$�M��H�@XL�<�A�GI�OI�7�P�������tYI�H�uP���D��+��H�T$�oH�D$�R�@�P�@�������H��袽�����DI�H�5��	1�I������H�uP�!���� G���SH�H���xH{P�I�H��[�����AUATUSH��H��(H�/H�WPdH�%(H�D$1��EPH�H�}hH�D$u�E0H�H��@�E0HGPH�H�H�P��*��H�T$�oH�D$�R�@�P�@�U0HSPH�2H����H��y�W��Q����H�D$�yt	����1��Eu�}H{P�H����H�|$��H�|$H��t�t]H�|$���H�x1�H�t$dH34%(�^H��([]A\A]�fD�A�AH�L$���H�J�K�����tr�Eu��EHCPH�H����H�H�P�EHCPH�PH��EH�SPH�L� A�|$u
A�D$��w<H�|$�M����>����A����������u�Eu��fD���A�D$H�SP�EL�,�)��I�EH�SP�E�Ao$H�H�I�T$H�P�EH�SPH�H�8�v�����EH�SPH�H�8�G�EH�SPH�H��@�>���f�H�@�����~D�ff.���AUATE1�USH��H��(H�/dH�%(H�D$1�H�G8H��t-H�P0H����H�Mh�p(H9���H��E1�D�A��H�sPL�l$�}PL���O����M0HKPH�1H���LH�>�W�J��O��u|�G�GH�|$1��Eu�}H{P1�E��H���`e��H�|$tL�����H�|$A��tuH��t
H�|$�f��H�x1�H�T$dH3%(��H��([]A\A]ÐH�D$���������x����G�o���E1�@8A�������H��t�����������E�m����EHCPH�H����H�H�P�EHCPH�PH��EH�SPH�L� A�|$uA�D$����H�|$�����H�I�Q���Qt)H�D$�y�������������A���@�A�AH�L$���������u��E�?����f.�H�@�N������A�D$H�SP�EL�,�&��I�EH�SP�E�Ao$H�H�I�T$H�P�EH�SPH�H�8�v�����EH�SPH�H�8�G�EH�SPH�H��@����A����AWAVAUATUH��SH��(I��`�L�/dH�%(H�D$1�I��$�A�U0H�@XL�4�I�H���1A�UPL�,�I�EH���lH�H�D$H��t6I�D$ L�+H9�tA�}u
A�E����A�E<te<�'<t1H�Ex1�H�t$dH34%(�H��([]A\A]A^A_��H�D$I�]�x��PH�
��	Hc�H�>��I�EH�@hH����H�t$L�������A�E�o$��H��AoEI�UH�PH�;�v荶��H�;�GH��@L�+A�E<�'����f.�I��$0H�RI��$�M��H�@XH�ЋCH�KH�3�P�O������tZI��$�I�H�@X���fDI��$0H�RI��$�M��H�@XL�4�A�FI�NI�6�P������t9I�E�T���H�1��H�5��	I�\$ ����I��$�H�@X����@I�1��H�5��	���I�D$�����p�@H�ߍVH�0�{��uM��$�L9���H�|$���������E1�1ɺH��H�5��W~�����f�H�A�1�1�H���;~������fD�H,A�1�1�H���~�����@H�5��	�1�������H�D$I��HH�8�q���I���DM�d$pM���D���I�D$@H��t�M9t$hu�P`��~�L�D$H�XX�J�E1���I�EH��L9�t�I��L9{u�A�@9Cu�I�0H�;Hc�H�L$L�$�-�L�$H�L$��u�I�D$XJ���s�����=�H�5Y�	�1��3��H�5+�	��"��f���AWAVAUATUSH��H��HI��`�L�'dH�%(H�D$81�I���A�D$0H�RXL�4�I�.H���YH�wPL�t$(A�|$PL��苝��H�D$0I�E L�eH9�tA�|$uA�D$����A�D$<ty<�(<t=H�|$(tL������H�x1�H�L$8dH3%(��H��H[]A\A]A^A_�@H�D$0I�,$�x���PH�
��	Hc�H�>���I�D$H�@hH����H�t$0L���H�|$(�s����v������A�D$�^ ��H�E�Ao$I�T$H�PH�}�v	�y���H�}�GH�E�@L�eA�D$<������o����I��0H�@I���M��H�AXH�,ЋEH�MH�u�P�8������t;I�.H�sPL�t$(A�|$PL�����H�D$0H���f���H�|$(��������H�U�1�L�t$(H�5��	���A�|$PH�sPL��諛��M�e H�D$0�:���D�@�HH��H�0�Q����uM���L9���H�|$0�������E1�1ɺH��H�5(��wz�����f�H�A�1�1�H���[z������fD�H,A�1�1�H���9z�����@H�5�	�1��������H�D$0I�܋HH�8�q����H���DM�d$pM���K���I�D$@H��t�M9|$hu�P`��~�L�L$0H�hXD�B�E1��I�EH��M9�t�I��H9Mu�A�A9Eu�I�1H�}Hc�L�D$H�L$L�L$�)�L�L$H�L$��L�D$u�I�D$XJ���f�����9�H�5l�	�1��F���H�5>�	��5���D��AWAVAUATUH��SH��8I��`�H�dH�%(H�D$(1�I����C0H�RXL�4�M�&M���s�[PH_PH�\$ I�E M�4$I9�tA�~u
A�F����A�F<t}<�:<tA�{w+H�Ex1�H�t$(dH34%(�H��8[]A\A]A^A_ÐH���h�����fDH�D$ M�&�x�>�PH�
�	Hc�H�>��f�I�FH�xh������H�T$ H���oH�D$ �R�@�P�@I�<$H�W�RhH�|$ �<���<�������A�F�O��I�$�AoI�VH�PI�<$�v	�l���I�<$�GI�$�@M�4$A�F<�����C���I��0H�@I���M��H�AXL�$�A�D$I�L$I�4$�P�-������t(M�&�[PH]PH�\$ M���I����{�{�������I�$H�5��	�1�M�e ����[PH]PH�\$ M�u �*����pL��VH�0�����&���M���M9�����H�D$ I��pH�8���q��H��fDI�E@H��t
M9}h��M�mpM��u������E1�1ɺL��H�5��Wv�����f�H�A�1�1�L���;v�����fD�H,A�1�1�L���v���s���@H�5��	�1�����W����P`���h���L�L$ L�`XD�B�E1��I�FI��M9��B���I��I9L$u�A�AA9D$u�I�1I�<$Hc�L�D$H�L$L�L$�%�L�L$H�L$��L�D$u�I�EXJ�������5�H�5~�	�1��X���H�5P�	�1��E���D��AUATUSH��(L�/dH�%(H�D$1�A�E0HGPL� M���cI�$H���B���B��B�BH�T$H�`�I�,$H;h@���}u�E�����}��H�EH�P@H����H�xH��H��҃@H��H�D$�x��I�$L��H�t$H�@�PHH�|$����A�Eu>A�EH�SPL�$I�$�@A�EHCPH�H���fH�H�PA�EHCPH�PH�H�|$t
H�|$�n��H�x1�H�L$dH3%(�=H��([]A\A]�f�H�D$�z����������B����H����w���F���H�P�B���Bt1H�D$�zt	����H�5�	�1��n���fD�B�BH�T$��fDA�E�%���A�UH�KPH�� H�A�EH�SPH�H����������E���I�$�oEH�UH�PI�<$�v	轩��I�<$�GI�$�@I�,$�����H�@����B�6����23�f���AUATUSH��(L�/dH�%(H�D$1�A�E0HGPL� M���cI�$H���B���B��B�BH�T$H�`�I�,$H;h@���}u�E�����}��H�EH�P@H����H�xH��H��҃@H��H�D$�b{��I�$L��H�t$H�@�PHH�|$�5��A�Eu>A�EH�SPL�$I�$�@A�EHCPH�H���fH�H�PA�EHCPH�PH�H�|$t
H�|$����H�x1�H�L$dH3%(�=H��([]A\A]�f�H�D$�z����������B����H���z���F���H�P�B���Bt1H�D$�zt	����H�5��	�1��޵��fD�B�BH�T$��fDA�E�%���A�UH�KPH�� H�A�EH�SPH�H����������E���I�$�oEH�UH�PI�<$�v	�-���I�<$�GI�$�@I�,$�����H�@����B�6����0�f���AWAVAUATUSH��H��8H�dH�%(H�D$(1��A0HGPH�(H����H�U�B���B��H�D$�zt	���zI��`��QPI��$�H�@XL�,�I�EH���H�0H�t$ H����H�}�G<��<��<���~H�/���FH�6�	Hc�H�>��H�P�B���B�[����B�BH�T$�^�����F�FH��H�6�P�����uM��$�L9��NH�|$ �<��@H�|$t
H�|$�&��H�x1�H�t$(dH34%(��H��8[]A\A]A^A_�DH�GH�@hH�������I��$0H�RI��$�M��H�@XL�4�A�FI�NI�6�P�>������tI�E����B�}����I�H�5��	�1�����I�t$���E1�1ɺH��H�5���m������f�H�A�1�1�H����m�����fD�H,A�1�1�H���m������@H�5��	�1�蝲�����H�D$ I�܋HH�8�q�R���I���DM�d$pM�������I�D$@H��t�M9t$hu�P`��~�L�D$ H�hX�J�E1���I�EH��L9�t�I��L9}u�A�@9Eu�I�0H�}Hc�H�L$L�$�)�L�$H�L$��u�I�D$XJ���r����e-�H�5��	�1��ұ��H�5��	�����AWAVAUATUSH��8H��`�H�.dH�%(H�D$(1�H��X�dH���I�ыUPI��I��H�@XL�,�I�EH���RL�8H��X�mI)��3��L��XA�}��I�EH�P8H����L��L���H��H����H��{uR�C��vJ���H�T$�C���H�T$H��o+(H�KH�HH�:����GH��@H��oMH�CH��H�EH�� ���CH�:A��I�$x1�H�L$(dH3%(�YH��8[]A\A]A^A_�I�EH�HH���H�x �1�L��L��рxH�D$�s�oUH�@H��H�EH�� ��vH���ߡ������H��H�D$ H�D$�oH�@H��H�GH�� ��v
訡��H�|$ �G�GA��H�D$H�T$ L��L��@I�E�P H�|$ ���H�|$�������1�H�5G�	��}���H�C �oEH�@H�EI�$x�����H��H�T$����H�T$����1�H�5��	��-���H�C �o eH�@H�E����@H��0H�RM��L�L$H���H�@XL�<�A�GI�OI�7�P��{��L�L$���tiI�E�f����H�PH�R@H���|���H���H�|$�W��u)�vH�D$莟��H�|$H�D$H�D$�:��H�D$H�D$�8���I�H�5)�	1�L�{�L�L$�I���L�L$��������H�T$H�:�Z����q���)�ff.����H��H�WPH���[�9���f���H��H�WPH�ǰ[����f�AWI��AVAUATUH��SH��8H��H�<$�{0dH�%(H�D$(1��b��I��`��SPI��I��$�H�@XL�,�I�EH���^L�(L���[I�/��M�>A���I�GH�P8H����L��L����H��H����L� A�|$uYA�D$��vO���H�T$A�D$���H�T$H��Ao,$(I�L$H�HH�:����GH��@L�"�Ao$I�D$H��H�CH�� ���LH�:H�$��H�Ex1�H�L$(dH3%(�RH��8[]A\A]A^A_ÐI�GH�HH���H�x �1�L��L���рxH�D$�{�oH�@H��H�CH�� ��vH���������H��H�D$ H�D$�oH�@H��H�GH�� ��v
豝��H�|$ �GH�$�G��H�D$H�T$ L��L���@I�G�P H�|$ ���H�|$�������1�H�5G�	��}���I�D$ �oH�@H�CH�Ex�����H��H�T$����H�T$����1�H�5��	��-���I�D$ �o #H�@H�C�y���@I��$0H�RI��$�M��H�@XL��A�BI�JL�T$I�2�P��w��L�T$���tgI�E�X���fDH�PH�R@H���t���H���H�|$�W��u)�vH�D$莛��H�|$H�D$H�D$�:
��H�D$H�D$�0���I��1�M�l$H�5�	�M������������H�T$H�:�W����%�f���H��H�WPH���[�9���f���H��H�WPH�ǰ[����f�AWAVAUATUHc�SH��HI��`�H�dH�%(H�D$81�I��XH���ZI���I�֋SPI��H�D$H�@XL�<�I�H����H�0�G<��<tm<u	����1�CI��DH�ChH����H��u1ɋCI�����H�I�$x1�H�L$8dH3%(��H��H[]A\A]A^A_�@1�H�{hH�G�…�tV�PPHc��fD���x����~H�?��FH���	Hc�H�>��fD�CI�H�,�s���f��P`Hc��/���D�F<t8�oH�l$ )D$ H�VH�T$0<��H������|$4���H��H�ChH����H������H�H������I��XHcJH9������H�1�<0@�����fDI��0H�RI���M��H�@XL��A�AI�IL�L$I�1�P�t��L�L$���tI�I��X�*���f�I�H�5a�	�1�芧��I��XI�u����f.��FH�6H�L$�P蝵���������H�ChH����H�����H�D$1�H�8�>����@�������H,6H�T$�s����t�����H�6H�T$�s����t����f.�H�L$�H�5{u�*o�����m����e���DH��耘���R���H�5	�	�1�蕦���8���H�D$1�H��x@���#���f�H�H������I��X1�HcRH9�@���������!���H��H�WP��K���ff.���H��H�WP1��.���ff.�AWAVAUATUSH��(H��`�L�&H�<$dH�%(H�D$1�H��X�H���I��A�T$PH��H�@XL�,�I�EH����L�0H��XE�l$M/�((��L��XA��VI�GH�P8H����L��L����H��H����H��{uR�C��vJ���H�T$�C���H�T$H��oH�KH�HH�:����GH��@H�H�T$H��H�$��A�D$��@H�Ex1�H�L$dH3%(�H��([]A\A]A^A_�fDI�GL�@M��t{H�x tt1�L��L��A�ЀxH��H�D$���S�{�B�Cu	���WH��H�$��H�T$L��L��I�UI�G�P A�D$uI�E�@H�|$膺���I����1�H�5��	��
���A�D$�)���H�C I�E�@����H�T$H�I�E�@����H��0H�RH���M��H�@XL�4�A�FI�NI�6�P�p�����t[I�E���f.�H�@H�@@H������H���H�|$H�ËG��u�v
�`���H�|$���H�\$����@I�H�5	�	�1�L�s�.������f����H�T$H�:����fD�S����H�D$�oH�SH��H�PH�� @��v
H��袔��H�D$�@H���@�[����
���0���H��H�WPH���[���f���H��H�WPH�ǰ[�y���f�AWAVAUATI��UH��SH��(H��H�<$�{0dH�%(H�D$1��V��I��`��SPI��I���H�@XL�4�I�H����L�0�CL��I$I���$��M�?A��]I�GH�P8H����L��L����H��H����L�(A�}uVA�E��vM���H�T$A�E�/��H�T$H��AoEI�MH�HH�:����GH��@L�*H�T$L��H�$��C��H�Ex1�H�L$dH3%(�H��([]A\A]A^A_�fDI�GL�@M���H�x tx1�L��L��A�ЀxI��H�D$��A�UA�}�BA�Eu	���hL��H�$��H�T$L��L��I�T$I�G�P �Cu	I�D$�@H�|$����B���f�1�H�5G�	��}����C�#���I�E I�D$�@�����H�T$H�I�D$�@���f.�I��0H�RI���M��H�@XL��A�BI�JL�T$I�2�P�l��L�T$���tYI����f�H�@H�@@H����L���H�|$I�ŋG��u�v
���H�|$�v���L�l$���@I�H�5i�	1�M�u�莟���|���f��K���H�T$H�:���fDA�U����H�D$�AoMI�UH��H�PH�� @��v
H�����H�D$�@I���@�G�����f���H��H�WPH���[���f���H��H�WPH�ǰ[�i���f�AWAVAUATI��UH��SH��8H�I�4$H�<$L�l$�{0L��dH�%(H�D$(1��H���SPI��H�`�H���H�@XL�4�I�H����L�0�[I$M���hL���� ��M�?A���I�GH�P8H����L��L����H��H����L� A�|$uYA�D$��vO���H�T$A�D$����H�T$H��Ao,$(I�L$H�HH�:����GH��@L�"�Ao$I�D$H��H�CH�� ���eH�:H�$��H�|$tL���ܳ��H�Ex1�H�L$(dH3%(��H��8[]A\A]A^A_�f�I�GL�@M���/H�x �$1�L��L��A�ЀxH�D$���oH�@H��H�CH�� ��vH���ǎ����}���H��H�D$ H�D$�oH�@H��H�GH�� ��v
萎��H�|$ �GH�$�G��H�D$H�T$ L��L���@I�G�P H�|$ ���H�|$�۲�����fD1�H�5'�	��]���H�`�H�@ �oH�@H�|$H�C��������f�H��H�T$��H�T$���f�1�H�5��	����H�`�H�@ �o #H�@H�C�R���fDH�`�H�RM��H��0H�@XL��A�CI�KL�\$I�3�PH�`�H����h��L�\$���tcI�����H�PH�R@H���U���H���H�|$�W��u)�vH�D$�N���H�|$H�D$H�D$���H�D$H�D$����I�1��H�5�	����H�`�L�p���f��ˌ��H�T$H�:�&���H�5��	�1��ۚ���V�fD��H��H�WPH���[���f���H��H�WPH�ǰ[����f���AVAUATUSH��H��I��`�L�'dH�%(H�D$1�I���A�D$0H�RXL�4�I�.H����H�EI;E@�E�oA�T$H�KPH�@H�DA�|$H{P���L�eA�|$uA�D$����A�|$uFI�D$H�P@H��t8H�xHt1L���H�$H�ǃ@�,^��H�EH��H�4$H�@�PHH�������L���^��H�x1�H�t$dH34%(�aH��[]A\A]A^Ð�;���L�eA�|$�m����Z���fD���A�D$����H�E�Ao$I�T$H�PH�}�v	���H�}�GH�E�@L�eA�|$�����Q����A�D$�L���I�M A�D$H�SP�oH�IH�L�)����I��0H�@I���M��H�AXH�,ЋEH�MH�u�P�e�����uOH�UH�5K�	�1��t���I�EA�EI���H�$�EA�H�MjAVH�u�PL�D$�^O��XZI�.H�����H�5��	�1����������AVAUATUSH��H��I��`�L�'dH�%(H�D$1�I���A�D$0H�RXL�4�I�.H����H�EI;E@�E�oA�T$H�KPH�@H�DA�|$H{P���L�eA�|$uA�D$����A�|$uFI�D$H�P@H��t8H�xHt1L���H�$H�ǃ@�lV��H�EH��H�4$H�@�PHH��肭���L���HV��H�x1�H�t$dH34%(�aH��[]A\A]A^Ð軈��L�eA�|$�m����Z���fD���A�D$�N���H�E�Ao$I�T$H�PH�}�v	�i���H�}�GH�E�@L�eA�|$�����Q����A�D$�L���I�M A�D$H�SP�oH�IH�L�)����I��0H�@I���M��H�AXH�,ЋEH�MH�u�P�c�����uOH�UH�5˹	�1���I�EA�EI���H�$�EA�H�MjAVH�u�PL�D$��L��XZI�.H�����H�5I�	�1�蝕�������AWAVAUATUSH��H��8H�/H�wPdH�%(H�D$(1�L�l$�}0L����>��I��`��UPI��I��$�H�@XL�<�I�H���{H�1��E���L������H�|$H��t���L���S���H�SP�EH�H��B���B��H�D$ �zt	�����EH�SPI�L$ H�L�*A�EH9�tA�}u	���2��H�|$ A�Et
H�|$ �٪��H�x1�H�L$(dH3%(��H��8[]A\A]A^A_��B�BH�T$ �}����}H{P����@����E�����EHCPH�H���H�H�P�EHCPH�PH��EH�SPH�L�0A�~u
A�F���ZH�|$�������f�I��$0H�RI��$�M��H�@XL��A�AI�IL�L$I�1�P�i`��L�L$�����I��8������A�EH�SP�EL�$���I�$H�SP�E�AoEH�H�I�UH�P�EH�SPH�H�8�v�؄���EH�SPH�H�8�GH�SP�EH�H��@�EH�SPH�L�(A�E�8���f.��B����I�H�5q�	�1�蚒��I�T$�h���諗����������E������_������A�FH�SP�EL�<���I�H�SP�E�AoH�H�I�VH�P�EH�SPH�H�8�v����EH�SPH�H�8�G�EH�SPH�H��@�$���fDH�@����V
�fD��AWAVAUATUSH��H��HH�dH�%(H�D$81��A0HGPH�(H���5H�U�B���Buv�B�BH�T$ �yPL�d$(H�sPL���2m��H�D$0H�}�W���D���������xH�/���PH�
N�	Hc�H�>���H�D$ �zt���u��B�fD�@�HH��H�0�Q軽����uH�`�L���L9���H�|$0����fDH�|$(tL������H�|$ t
H�|$ ���H�x1�H�t$8dH34%(��H��H[]A\A]A^A_�DH�P�B���BtqH�D$ �zt	����L�d$(H�sP�yPL���k��H�|$(H�D$0�l����o����H�WH�RhH����H���H�|$(�>����A�����B�BH�T$ �fDE1�1ɺH��H�5`^�J�����f.�H�A�1�1�H���J������fD�H,A�1�1�H���iJ�����@H�5;�	�1��M��������B���H�D$0I�݋HH�8�q��H���@M�mpM���K���I�E@H��t�M9}hu�P`��~�L�L$0H�hXD�B�E1��I�FH��M9�t�I��H9Mu�A�A9Eu�I�1H�}Hc�L�D$H�L$L�L$���L�L$H�L$��L�D$u�I�EXJ���g����	�H�5��	�1��g���H�5_�	�1��T���@��AWAVAUATUSH��H��8H�/H�wPdH�%(H�D$(1�L�t$�}0L���7��I��`��UPI��I���H�@XL�<�I�H����H�1��E��A�1�L���*��H�|$H��t���L�������EH�SPH�H���9L� A�D$��A�D$��H�D$ A�|$t	���
�EH�SPI�M H�L�"A�D$H9�tA�|$u	���@��H�|$ A�D$t
H�|$ 膣��H�x1�H�L$(dH3%(��H��8[]A\A]A^A_�D�}H{P����@A�D$A�D$L�d$ �b��������E������EHCPH�H���H�H�P�EHCPH�PH��EH�SPH�L� A�|$uA�D$���XH�|$��������I��0H�RI���M��H�@XL��A�AI�IL�L$I�1�P�Y��L�L$�����I�����D���A�D$H�SP�EL�,�s�I�EH�SP�E�Ao$H�H�I�T$H�P�EH�SPH�H�8�v�v}���EH�SPH�H�8�GH�SP�EH�H��@�EH�SPH�L� A�D$�'����A�D$���DI�H�5�	�1��:���I�U�H�����K�������H�|$�e����X�������A�D$H�SP�EL�<��I�H�SP�E�Ao$H�H�I�T$H�P�EH�SPH�H�8�v�|���EH�SPH�H�8�G�EH�SPH�H��@�i���H�@����E�L���������H�5w�	��S�����AWAVAUATUSH��H��HH�dH�%(H�D$81��A0HGPL� M����I�$�B���BuV�B�BH�T$(�iPHkPH�l$0I�$�B<��<��<uV�}L�"w5�EH��	Hc�H�>��H�D$(�zt���u��B�fDH�5k�	�1��}���D�}vH���jz��H�|$(t
H�|$(踟��H�x1�H�t$8dH34%(�FH��H[]A\A]A^A_��H�P�B���B��H�D$(�zt	���m�yPH{P�H�|$0v���y���w����H�BH�xh����W�H�T$0H���oH�D$0�R�@�P�@I�<$H�W�RhH�|$0���������B�BH�T$(�n����EH�uL��P�6���������H�`�L���M9������H�D$0I�݋pH�8����H��fDI�E@H��t
M9}h�~M�mpM��u������E1�1ɺL��H�5�V��B���Z���f�H�MA�1�1�L���B���=���D�H,MA�1�1�L���B�������B����P`���w���L�L$0L�`XD�B�E1��f.�I�FI��M9��J���I��I9L$u�A�AA9D$u�I�1I�<$Hc�L�D$H�L$L�L$�<��L�L$H�L$��L�D$u�I�EXJ�����s�H�5�	�1����H�5ت	�1��͆��ff.�f�AWAVAUATI��UH��SH��HH�I�4$H�|$L�t$(�{0L��dH�%(H�D$81��0���SPI��H�`�H���H�@XL�<�I�H���L�8�CI$H�D$M���)L������M�eA�|$��I�D$H�P8H����L��L���H��H����L�(A�}uVA�E��vM���H�T$A�E�i�H�T$H��AoEI�MH�HH�:��3�GH��@L�*H�T$L��H�D$��C�!f�H�|$(tL���Л��H�Ex1�H�L$8dH3%(�QH��H[]A\A]A^A_�fDI�D$L�@M����H�x t1�L��L��A�ЀxI��H�D$0�A�UA�}�BA�Eu	����L��H�D$��H�T$0L�l$L��L��I�UI�D$�P �CuI�E�@H�|$0�����,���@1�H�5_�	�蕄���C����H�`�H�L$H�@ H�A�@���fDH�T$H�L$H�H�A�@����fDH�`�H�RM��H��0H�@XL��A�BI�JL�T$I�2�PH�`�H����P��L�T$���tSI����H�@H�@@H������L���H�|$0I�ŋG��u�v
�t��H�|$0�v�L�l$0���@I�1��H�5b�	蒃��H�`�L�x�-���f��Ku��H�T$H�:���fDA�U����H�D$0�AoMI�UH��H�PH�� @��v
H���t��H�D$0�@I���@�(���H�5��	�1��������ff.�@��H��H�WPH���[����f���H��H�WPH�ǰ[���f���AWAVAUATUSH��H��(H�/dH�%(H�D$1�D�eLgPH�}h�}0�����6��I��H�H�D$H�EhH����I�m�}�Eu�����EI�m�E��H�l$�EI�<$E1��1�H�T$A��F5��H�x1�H�L$dH3%(�lH��([]A\A]A^A_�DI��`�I���H�@XL�<�M�/M����I�EH�D$H�D$�xub�@�u���f�����E��I�E�oMH�UH�PI�}�v	�-s��I�}�GI�E�@I�m���������H�T$�oH�D$�R�@�P�@�����H����r������DI��0H�M��I���H�@XL��A�AI�IL�L$I�1�P�M��L�L$���tI�H�EhH�H�T$�L���DI�1��H�5Z�	芀��H�EhI�V����ff.���SH�H���xH{P����H��[���AWAVAUATUSH��8H��`�L�>dH�%(H�D$(1�H��X�A���I��I��H��H�2��A���H�^�	Hc�H�>���A���1�H�D$�I��H�uH�$�A�oH��XH�H�E�E��L��XA�}�#�H�5��	1����H�|$H��t@����H��v�]p��A�GuH�C H�E�@I�$H���H�Bx�TI�$1�H�L$(dH3%(�H��8[]A\A]A^A_�H�D$I���H�$�/����A���H�T$�Z��H�uH�$�
���f.�H�D$H�$���f.�E���J�.H�$H��H�D$����H�$���I�GPH�D$I�GhH=���H�D$ H=���H=��.1�H�5=�	��#~��A�G���H�|$H�������@����H���������n�����H������@I�EH�P8H���oI�wPL���I��H����L�(A�}u_A�E��vV���L�D$A�E���L�D$I��AoMI�UH�PI�8�v
�*o��L�D$I�8�GI��@M�(L�D$H�$L��L��A��A�G����L�D$I�H�E�@����I�EH�@(H�������1�I�wPL���I��H�D$ H��������xt}A�PA�x�BA�@u	���H�$L��L��A��I�GhH=���H=�uI�EH�T$ I�wPL��P0A�Gu
H�D$ H�E�@H�|$ �Ē���O����H�@H�@@H���r���L���H�|$ I���G��u)�vL�D$�#m��H�|$ L�D$L�D$����L�D$L�D$ �+���H�|$�V�������I�EH�T$ I�wPL��P �V����H�|$�&����d����I�EH�@H��������t���f.�A�P�L�D$���L�D$H�D$ �AoI�PH��H�PH�� @��w>�@I���@���H�D$ �DH�C H�E�@�����H����l��H�D$ �f�I�Gh������M�ff.�f�H�H�@hH=�tAH��H=�uCH��`�H��XH��t+�@H��X�xu2H�VPH���T���@H�VP�G������H�5˥	�1��z���z��f.���H��H���Z�m���ff.�f���H��H��`�Z�M���ff.�f���H��H���Z�-���ff.�f���H��H��p�Z�
���ff.�f���H��H�ǰ�Z���ff.�f���H��H���Z����ff.�f���H��H����Z���ff.�f���H��H�Ǡ�Z���ff.�f���H��H����Z�m���ff.�f���H��H��0�Z�M���ff.�f���H��H���Z�-���ff.�f�AWAVAUATUSH��8H��`�H�dH�%(H�D$(1�H��X�����I��I��I��H�2�q���H�d�	Hc�H�>��f.����1�H�D$�
��I�4$H�$f�D�cH��XI�I�$����L��XA���H�5W�	1��@x��H�|$H��t@���lH��v�i���Cu
H�E I�D$�@I�UH���H�Bx�4I�E1�H�L$(dH3%(��H��8[]A\A]A^A_�H�D$H���H�$�/�������H�T$�hS��I�4$H�$����H�D$H�$��f�D���J�>H�$H��H�D$����H�$����H�ChH=���H�D$ H=��kH=��1�H�5�	��v���C��f�H�|$H������@����H���������g�����H������@I�GH�P8H���_1�L����I��H����L�8A�u^A�G��vU���L�L$A�G����L�L$I��AoI�WH�PI�9�v
�
h��L�L$I�9�GI��@M�9L�L$H�$L��L��A��C����L�L$I�I�D$�@����f�I�GH�@(H������1�1�L����H��H�D$ H��������xtw�Q�y�B�Au	���H�$H��H��A��H�ChH=���H=�uI�GH�T$ 1�L���P0�CuH�D$ I�D$�@H�|$ 賋���^���fDH�@H�@@H���x���H���H�|$ H���G��u)�vH�L$�f��H�|$ H�L$H�L$���H�L$H�L$ �1���H�|$�F��������I�GH�T$ 1�L���P �Y���f.�H�|$��������I�GH�@H����������f.��Q�H�L$���H�L$H�D$ �oH�QH��H�PH�� ��wA�@H���@���fDH�D$ �DH�E I�D$�@�.���fDH����e��H�D$ �f�H�Ch�����r���=��ff.�f�H�H�@hH=�tAH��H=�uCH��`�H��XH��t+�@H��X�xu2H�VPH�����@H�VP�w�������H�5��	�1��os���j��f.���H��H���Z�m���ff.�f���H��H��`�Z�M���ff.�f���H��H���Z�-���ff.�f���H��H��p�Z�
���ff.�f���H��H�ǰ�Z���ff.�f���H��H���Z����ff.�f���H��H����Z���ff.�f���H��H�Ǡ�Z���ff.�f���H��H����Z�m���ff.�f���H��H��0�Z�M���ff.�f���H��H���Z�-���ff.�f�AWAVI��AUATI��USH��8H��H�<$�{0dH�%(H�D$(1��8&�����I�6I���e���H���	Hc�H�>��fD���1�H�D$���I�6I��@�kL��H�H�E��M�uA�~��H�5W�	1��@q��H�|$H��t@����H��v�b���CH��`�uH�C H�E�@I�$H���H�Bx�>I�$1�H�L$(dH3%(�
H��8[]A\A]A^A_�DH�D$L����3������H�T$�hL��I�6I������DH�D$E1�����D���I�L��H��H�D$����DE1������H�ChL�kPH=���H�D$ H=���H=��;1�H�5�	��o���CH��`����H�|$H������@���H��������`�����H������@I�FH�P8H���L��L����H��H����L�0A�~u^A�F��vU���H�L$A�F����H�L$H��AoI�VH�PH�9�v
�`��H�L$H�9�GH��@L�1H�L$L��L��L��H�$��CH�L$��H�H��`�H�E�@���f�I�FH�@(H�������1�L��L����H��H�D$ H��������xt~�Q�y�B�Au	���&L��H��H��H�$��H�ChH=���H=�uI�FH�T$ L��L���P0�Cu
H�D$ H�E�@H�|$ 萄��H��`��D���@H�@H�@@H���q���H���H�|$ H���G��u)�vH�L$��^��H�|$ H�L$H�L$���H�L$H�L$ �*����H�|$��������I�FH�T$ L��L���P �L���f�H�|$����d����I�FH�@H��������_���f.��Q�H�L$����H�L$H�D$ �oH�QH��H�PH�� ��wA�@H���@���fDH�D$ �DH�C H�E�@�����H���^��H�D$ �f�H�Ch����B��f�AWAVAUATI��UH��SH��8H�dH�%(H�D$(1�H�ChH=���H=����{0��� ��H��t
H��x�~�{0�� ��H�SP���1�H��H}PA��c	��H�uPH�T$1�H�����L��I�Ƌ�����
���	H�D$H�51�	�1���k��DH�UPH��L������H�t$(dH34%(��H��8[]A\A]A^A_�fD�{0�L�sPE1�� ��I��M��t�H�`�I�MH;H@���yu�A�����y�L��H��H��A��Cu;�CH�UPL�,I�E�@�CHEPH�H���cH�H�P�CHEPH�PH�E��tJH�`�H����$H�|$H��t@����H��v��[��H�|$t
H�|$����H�Ex1�������H�L$�A�+��H�L$I�E�oH�QH�PI�}�v	�D\��I�}�GI�E�@I�M�y�����H�AH�P@H�����H�xH����H���L��H�D$ H��H�ǃ@A��I�EL��H�t$ H�@�PHH�|$ �`������H�uP���H�T$A��^��I���E���fDH�Ex����fDH�@����CuLH�`��CH�UPH�� H�H�UP�CH�H��@�CHEPH�H��tcH�H�P�CHEPH�PH�H�UH�BxE��tH�`�H���t H�E1��d���DH�|$����P����H������H�@�fD����H�D$A��Q��I���H����T��@��H��H���Z���ff.�f���H��H��`�Z����ff.�f���H��H���Z���ff.�f���H��H��p�Z���ff.�f���H��H�ǰ�Z�}���ff.�f���H��H���Z�]���ff.�f���H��H����Z�=���ff.�f���H��H�Ǡ�Z����ff.�f���H��H����Z���ff.�f���H��H��0�Z����ff.�f���H��H���Z���ff.�f�AWAVI��AUI��ATI��USH��8H��dH�%(H�D$(1��{0������I�6I���v���H�Q�	Hc�H�>������1�H�D$�r���I�6H�$�kL��H�H�E�r�M�?A��$�H�5ȑ	1��f��H�|$H��t@����H��v�W���CH��`�uH�C H�E�@I�$H���H�Bx�OI�$1�H�L$(dH3%(��H��8[]A\A]A^A_�fDH�D$H���H�$�/�������H�T$��A��I�6H�$����@H�D$H�$��f.����H�H�$H��H�D$����DH�$���H�ChH=���H�D$ H=��{H=��71�H�5v�	��\e���CH��`���H�|$H������@����H��������V������H������@I�GH�P8H���W1�L����I��H���|L�0A�~u^A�F��vU���L�D$A�F�C��L�D$I��AoI�VH�PI�8�v
�]V��L�D$I�8�GI��@M�0L�D$H�$L��L��A��CL�D$��I�H��`�H�E�@��@I�GH�@(H�������1�1�L����I��H�D$ H��������xtA�VA�~�BA�Fu	���H�$L��L��A��H�ChH=���H=�uI�GH�T$ 1�L���P0�Cu
H�D$ H�E�@H�|$ �y��H��`��E���DH�@H�@@H���p���L����H�|$ I�ƋG��u�v
�XT��H�|$ ���L�t$ �=���@H�|$�y������I�GH�T$ 1�L���P �d���f.�H�|$�fy���s����I�GH�@H�������{���f.�A�V��b��H�D$ �AoI�VH��H�PH�� @��w@�@I���@���DH�D$ �DH�C H�E�@�/����H���8T��H�D$ 뱐H�Ch��������f�AWAVAUI��ATUSH��H��8H�.dH�%(H�D$(1�H�EhH=���H=����}0��p��H��t	H��xtz�}0��U��A�1�1�H�Ƌ��H{P���H�sPH�T$1�H����bB��I��������0���'H�D$H�5nj	�1��{a��H�SPH��L�����H�L$(dH3%(�H��8[]A\A]A^A_�fD�}0�E1����E1�I��M��t�H�`�M�&L;`@��A�|$uA�D$����A�|$�L��L��L��A��Eu:�EH�SPL�4I��@�EHCPH�H����H�H�P�EHCPH�PH�E��tJH�`�H����IH�|$H��t@����H��v�fQ��H�|$t
H�|$�v��H�x1����f����L�D$A�D$蹿��L�D$I��Ao$I�T$H�PI�>�v
��Q��I�>L�D$�GI��@M�&A�|$���I�D$H�P@H������H�xH����L�D$L���L�D$H�D$ H��H��L�ƒ@A��I�L��H�t$ H�@�PHH�|$ ��u�����f.�H�sP���H�T$L�D$A�����L�D$I������@H�x����H�@����EuLH�`��EH�SPH�� H�H�SP�EH�H��@�EHCPH�H��tcH�H�P�EHCPH�PH�H�H�BxE��tH�`�H���t!H�1��>����H�|$�t���+����H������H�@�fD����L�D$A�H�D$���L�D$I���������f.���H��H���Z����ff.�f���H��H��`�Z���ff.�f���H��H���Z���ff.�f���H��H��p�Z�m���ff.�f���H��H�ǰ�Z�M���ff.�f���H��H���Z�-���ff.�f���H��H����Z�
���ff.�f���H��H�Ǡ�Z���ff.�f���H��H����Z����ff.�f���H��H��0�Z���ff.�f���H��H���Z���ff.�f�AWAVAUATUSH��HH��`�L�>H�|$dH�%(H�D$81�H��X�A�PI��1�H������A���H�uI���A���H��~	Hc�H�>���A���1�H�D$(蹳��H�uH�D$A�oH��XH�H�E���L��XA�}�#�H�5�	1���[��H�|$(H��t@����H��v��L��A�GuH�C H�E�@I�$H���H�Bx�DI�$1�H�L$8dH3%(�H��H[]A\A]A^A_�H�D$(I���H�D$�.���fDA���H�T$(�7��H�uH�D$�	���f�H�D$(H�D$���f�E���J�.H�D$H��H�D$(����f�H�D$���f�I�GhH=���H�D$0H=��{H=��'1�H�5��	��Z��A�G���H�|$(H������@����H��������eK�����H������@I�EH�P8H���oL��L���I��H����L�0A�~u^A�F��vU���L�D$A�F蒹��L�D$I��AoI�VH�PI�8�v
�K��L�D$I�8�GI��@M�0L�D$H�T$L��L��H�D$��A�G����L�D$I�H�E�@���@I�EH�@(H������1�L��L���I��H�D$0H��������xt~A�PA�x�BA�@u	���H�T$L��L��H�D$��I�GhH=���H=�uI�EH�T$0L��L��P0A�Gu
H�D$0H�E�@H�|$0�Ao���L���@H�@H�@@H���q���L���H�|$0I���G��u)�vL�D$�I��H�|$0L�D$L�D$�O���L�D$L�D$0�*���H�|$(��n������I�EH�T$0L��L��P �Z���f�H�|$(�n���t����I�EH�@H��������{���f.�A�P�L�D$蝷��L�D$H�D$0�AoI�PH��H�PH�� @��w>�@I���@���H�D$0�DH�C H�E�@�����H���pI��H�D$0�f�I�Gh����������ff.�f�H�H�BhH=�tAH��H=�uCH�`�H��XH��t+�@H��X�xu<H�VPH���T���@H�VP�G����b����zP1�舮��H�5A�	�1��V���zP1��k���H�5�	�1���V�����H��H���Z�M���ff.�f���H��H��`�Z�-���ff.�f���H��H���Z�
���ff.�f���H��H��p�Z���ff.�f���H��H�ǰ�Z����ff.�f���H��H���Z���ff.�f���H��H����Z���ff.�f���H��H�Ǡ�Z�m���ff.�f���H��H����Z�M���ff.�f���H��H��0�Z�-���ff.�f���H��H���Z�
���ff.�f�AWAVAUATUH��SH��H��HL�>�H�|$A�0dH�%(H�D$81��	��A�P1�I��訬��A���H�3I����A���H��w	Hc�H�>��@A���1�H�D$(�a���H�3H�D$f�A�_L��H�H��Z��M�,$A�}�+�H�5�	1��T��H�|$(H��t@����H��v�uE��A�GI��`�u
I�D$ H�C�@I��$�H�UH�Bx�SH�E1�H�L$8dH3%(�"H��H[]A\A]A^A_�f.�H�D$(I���H�D$�&���fDA���H�T$(�/��H�3H�D$����f�H�D$(H�D$���f�E���J�.H�D$H��H�D$(����f�H�D$���f�I�GhH=���H�D$0H=���H=��?1�H�5V~	��<S��A�GI��`���f.�H�|$(H�������@���H��������C�����H������@I�EH�P8H���L��L���I��H����L� A�|$ubA�D$��vX���L�L$A�D$����L�L$I��Ao$I�T$H�PI�9�v
�7D��L�L$I�9�GI��@M�!L�L$H�T$L��L��H�D$��A�GL�L$��I�I��`�H�C�@��I�EH�@(H�������1�L��L���I��H�D$0H��������x��A�T$A�|$�BA�D$u	���H�T$L��L��H�D$��I�GhH=���H=�uI�EH�T$0L��L��P0A�Gu
H�D$0H�C�@H�|$0��g��I��`��6���fDH�@H�@@H���e���L���H�|$0I�ċG��u�v
� B��H�|$0�ְ��L�d$0�2���@H�|$(�^g�����f�I�EH�T$0L��L��P �Y���f�H�|$(�&g���L����I�EH�@H��������[���f.�A�T$��!���H�D$0�Ao$I�T$H��H�PH�� @��wE�@I���@���f.�H�D$0�DI�D$ H�C�@����fDH����A��H�D$0�f�I�Gh������f�AWAVAUATI��UH��SH��8H�dH�%(H�D$(1�H�ChH=���H=����{0�� ��H��t
H��x���{P1������{0�I���������1�L��H��H}PA���H�uPH�T$1�H����0��I�Ƌ��������H�D$H�5ez	�1��O��f�H�UPH��L�����H�L$(dH3%(��H��8[]A\A]A^A_�fD�{P1�E1��K����{0�I���+��I��M��t�H�`�I�MH;H@���yu�A�����y�L��H��H��A��Cu;�CH�UPL�,I�E�@�CHEPH�H���jH�H�P�CHEPH�PH�E��tJH�`�H����+H�|$H��t@����H��v�>��H�|$t
H�|$�Fd��H�Ex1�����f.����H�L$�A�K���H�L$I�E�oH�QH�PI�}�v	�d?��I�}�GI�E�@I�M�y��H�AH�P@H�����H�xH����H���L��H�D$ H��H�ǃ@A��I�EL��H�t$ H�@�PHH�|$ �c�����H�uP���H�T$A��~���I���>���fDH�Ex����fDH�@����CuLH��`��CH�UPH�N H�H�UP�CH�H��@�CHEPH�H��tcH�H�P�CHEPH�PH�H�UH�BxE��tH��`�H���t H�E1��T���DH�|$�b���I����H������H�@�fD����H�D$A��q��I���A����t��@��H��H���Z����ff.�f���H��H��`�Z���ff.�f���H��H���Z���ff.�f���H��H��p�Z�}���ff.�f���H��H�ǰ�Z�]���ff.�f���H��H���Z�=���ff.�f���H��H����Z����ff.�f���H��H�Ǡ�Z���ff.�f���H��H����Z����ff.�f���H��H��0�Z���ff.�f���H��H���Z���ff.�f���H�GX��H��Ð��L�WL�1�A��H�OHA�AHGPA�z9M�Z@tH�PH�pI�yhA��f.���UH��AUATSH��I��`�dH�%(H�E�1�I��$�t#H�E�dH3%(�H�e�[A\A]]�D�whI��H�E�H�E�H�E������H��H��H��H��H��H��H���H)�H��H9�tH��H��$���%���H�D$H���H�E�IcU`H��H��H�BH��H%�H)�H���H��H9�tH��H��$�H9�u��� H�|$1�H��P���H���H�}�腶�L�m�A��$lAƄ$l�E�I��$�H�E�I��$�I��$�H�E�I���H��uI�EHA���H��P���t[I��$XH��tN�BH���E1�I��$�jI��$XA�H�5�	���ZY���uI��$X�hH��P���H�SI��$xL��`���I�T$H�
fDH��P���H����~�����1ҿ(�\���H�E����H)�H�L�����f�H)�H�L��m����]��ff.�f���H�`�H��]/H��f.����GtH�a�2HcO(�H��j	���������HcOH�H��`�H�H�H��H��f��������@���t&@��H���2�8�H�p�2H�4�1��f�������f.���@��H�A�2H���ff.�����?wwD�H��i	Nc�I�>A��f�H�����?����H�H�G�@�GH�H��H��H�>���X"���H�1��fD1��ff.�f������te��tH�1��fD�GH�H�H��t"H��it#H��ytՃyu��AÐH�N�iu��A�AH�
��H�����O���f.�D��1��f�����fD���ff.���H��H�w 1�H�=Ġ���1�H���ff.�@��H��H�71�H�=���w��1�H�����H���/SH�8�\��H�� �H���H��t���Hǃ�1�[�D��H�H�pH�H�x�Y��f���H��H�?蠤��1�H���f���AUATI���USH��dH�%(H�D$1�I���2���H��M��L���@H��H�S�A�jH�ٺH�5W�H���Cf�C���H�l$ZY�uH�}���H��M��H��H�EA��L��jH��CH�5��CH��C��H�l$^_�uH�}裦��H��H�E解��H�D$dH3%(uH��[]A\A]��G�����H���/H���H�ߞH�81����ff.����H�@��SH���H�5p�2H��H�=����H�5Z�2H��H�=�q	����H�5<�2H��H�=+�����H�5&�2H��H�=�q	���H��[H�5�H�=�q	�����H��1�1��_�����H�������ff.�@��H�H�@H�p H�H�@H�x �1��AW�AVAUATUSH��dH�%(H��$�1��"�����@I���@�
�����@H���@��E1�1�1��@H�5;kH��H�=�p	�@�JT��E1�1�1�H�5kH�=�p	I���-T��E1�1�1�H�5�jH�=�p	I���T��I��M����M����H���9A�D$IcEp�H�=�p	�EI�$IcFp�C�Ao$H�EIcGp)$H�I�D$L�-��2H�D$�D$�9���H��H�D$(H�D$ ��O���oMH�E�H�=ޙ�D$H)L$0H�D$@���H�|$0H�D$XH�D$P�O���oH�C�H�=l��D$x)T$`H�D$p责��H�|$`HDŽ$�H��$��VO��L��螠��H��薠��H��莠��H��$�dH3%(u|H�Ĩ[]A\A]A^A_�L���a���H���Y���H���Q����L���TO��M��t
�L���BO��M��t��L���0O���L������H������H������M��t��躻�f.���H��H�y�/H�8�9����tH�����3��8	t�H���E��DAUI��H��ATI��UH��SH��H�5�hH������H�H����I�mH���=���#u8�H�;�(���
t;��
t6���u�A�$1�H��[]A\A]�@H�;���H��1�[]A\A]���
u�H�;�����
t�H�;辟�H�;1�H�p��@���H��H�=�p	�?�������H��(A�dH�%(H��$1�H�T$L��H���H�H��$�L��H����H�H���I��H��H�L$H�D$H�@H�$�������H��$dH3%(u��H��(����������AU�F�ATI��UH��S��H������2DA����c��8u>������t5L��H���e��H��~�H�)�u�H����[D)�]A\A]�f��;��H����[D)�]A\A]�1��DAWI��AVAUATU��SH��H��8H�L$dH�%(H�D$(1����2��L�l$ L�d$Lc��Ff�E1�E1�1�L��L��H���J����t^H�|$L��L���֨��tJ1�H����
�����t1�H�������u����21�H�L$(dH3%(uQH��8[]A\A]A^A_�@H�D$H��t
1�H��H�����1�H���g
��H�D$�1�H���
���'�2�2����E��D��AWAVA��AUATUSH��H��8dH�%(H�D$(1�蓧�I��A��E��u
���2�;$�EH�5!�H��H�D$�]��I��H����I��I)�A�|$D�d$�̛��D��H��H���~��H�T$D��I��Ic�A�L���#d������"A�U�D)�z�$舛���$I�vH���9���
;�2I������H��菛��L��臛��L�d$M����H��t{H��
H����������!�%����t������D�H�JHDщ�@ƋD$H��H)�\Hc�H��趻�I��H�\x	H��I��I�$L��H�H1����H��L��詸�H�t$(dH34%(H����H��8[]A\A]A^A_�A��D��D)�A�ĸH��0��L�l$ ��H�D$H���8H�H��XL��D��H��L�$���L�$H����H��/H�������L�$H��H����L���B���M����������@A�}���D��H��H������
��2I�����D���H������s���f.�H�`�A�u�H�{1�H����C���H��H������H����H�x�F��H���$H�xH��H���Ѱ�H�:�/�������6���H�D$H����H�H��0L�l$ L��D��L�$L������L�$H�������H���/�(H�D$ H�x���L�$H��H�������q����L�l$ H�`�L��L��D��L�$H��@�[���L�$H��H�������H�t�/L�$�H�D$ H�H�x�)��L�$H���c���DL��1�螘�����f�H�`�H��8����D1�H�|$� ����Z���DH�`�H��H���������AWI��AVAUATUSH��(���3H���I����1��D$E1�L�-�u	D��rD��q�Hc�A�<�W���t����IcT�L�>��E��t	1�A������fD9���T$����E��H�=�t	�ƒ�I�?��	ƒ���H��([]A\A]A^A_ÍS9�~*@Hc�L��1�Z@��\�B@��"t�H����9��H�=�t	�z��9�~���Hc�A�|�
���n���H���J�9���b����SE���!��S9�~0fDHc�L��1�Z@��\��@��'� ���H����9��H�= t	E��I�?�ƒ�H��(��[]	�A\A]��A^A_��Ã��D$9���1�����D$���������D$9���1�����C9��A�|<�A�|<���C9�~�H�L����
������
���� ����H�D$E1��f�E��HET$H�T$A��9��v���HcӃ�L��<
t.� <
t$< u�H��9��L���@���<
u�fD9��pA�FHc�L�d$Mc�H�D�T$H)�D�L$L�D�D$A��H���f�A���{�
��D9��)H���;
u�H�t$H�{L������u�B�|3
u�D��D�T$D�L$��D�D$L�d$9������N���f.��SA�|>��9��y�����1������A��9��a���1�����A�T��/����*uf�S9����SHc�A�|�*��t9��{H��A�|�*��u�A�|�/u�����D$D	�������9��_���������9�����1��@���fD9��Z�����9��%����J���9�������9�����������H�=�c	I�?�Z���9��K���1�E����H�q	I�1��6�����9��{������1������<	�����H��9�����'����H�t$L��H���0�������B�<3;����B�|3
�����D��D�T$D�L$�D�D$L�d$9��=����z���fDH��p	I�H��(1�[]A\A]A^A_�H�mp	I�H��(1�[]A\A]A^A_ÍS9���HcʍZM�\�E��t&��L��H�=p	������������E��t�L��H�=�o	�������������~ I�s��H�=�o	��€��������9�~��I���ZE��t��H�=�o	�����	�1�����9�����E1��N�����E1�������&������H�5����鰡�AV1�A��AUI��ATL�%#�/UHc�SHc�I�<$��D�CH�%q	���A��t2A��t\I�$[��]H�=q	A\A]A^�:��f.�I�D�H�q	�I�<$[�1�]A\A]A^鸹��I�D�H��p	���ff.���AWAVAUATUSH��8E�(A9��FD�L$H��I��Ic�M�4�D���2H�L$H�4��|$(H�t$E�&E��tzA��-�0Hcu�2A�<H��D�{@��:u�f�H��@8����H�ŀ�-u�A�|�L�L$D�=-�2���V�?H��8[]A\A]A^A_�DA��-��A�V���}��-������2A�<D�{��2@��:�l����t$A�E����2A����t�����H��L�t$ ���2L�|$ D�d$/�q�2���L�D$L�L$ D�xfD�U�����C�2Mc�K�>�9��A�EA�;D$(��H�D$E�UH�t$E�I�DH��EH��8[]A\A]A^A_�fD�L$A�E��2A�����������D��L���!���H��8�?[]A\A]A^A_�DH�D$H�A��f.�A����A��-��Hcq�2A�|H�����\�2E�UE��G���A�~-����DA�~��H��I�FL�t$ M��D�d$/I��I��L�D$�%@I�\$H��tH��L������[���I��A�<$-L��u�L�D$�|$A�EM��A�����������2�D��L���������A�~-�(���E�UE���������2����D$���U���벸�����N���E�U�����E��=�������H�=�2����f.����AWI��AVI��AUA��ATL�%�-UH�-�-SL)�H���\�H��t1��L��L��D��A��H��H9�u�H��[]A\A]A^A_�ff.������H��H���minutesecondfractionwarning_countwarningserror_countis_localtimezone_typeis_dsttz_abbrtz_idrelativeOOOsOll|lOlllString size overflow%c%02d:%02dTimezone ID '%s' is invalidtimezone_idY-m-d\TH:i:sPl, d-M-y H:i:s TY-m-d\TH:i:sOD, d M y H:i:s OD, d M Y H:i:s ODateTimeZoneDATE_ATOMDATE_COOKIEDATE_ISO8601DATE_RFC822DATE_RFC850DATE_RFC1036DATE_RFC1123DATE_RFC2822DATE_RFC3339DATE_RSSDATE_W3CSUNFUNCS_RET_TIMESTAMPSUNFUNCS_RET_STRINGSUNFUNCS_RET_DOUBLEUnknownno DSTTZdate.timezoneexternaldate/time supportTimezone DatabaseDefault timezoneUnknown or bad timezone (%s)@%ld UTCtm_sectm_mintm_hourtm_mdaytm_montm_yeartm_wdaytm_ydaytm_isdstnow|sO!l|ldddddate.default_latitudedate.default_longitudedate.sunset_zenithdate.sunrise_zenithinvalid formatlddtransitcivil_twilight_begincivil_twilight_endnautical_twilight_beginnautical_twilight_endastronomical_twilight_beginastronomical_twilight_endminuteshourspmGMT%c%02d%02d%s%04lld%06d%c%02d%s%02d%lldidate format is one char|lllllllSunMonTueWedThuFriSatSundayMondayTuesdayWednesdayThursdayFridaySaturdayJanFebMarAprJunJulAugSepOctNovDecJanuaryFebruaryMarchAprilJuneJulyAugustSeptemberOctoberNovemberDecember31.766735.233390.583333__constructgetNamegetOffsetgetTransitionslistAbbreviationslistIdentifiersgetTimezonesetTimezonesetTimesetDatesetISODatestrtotimeidategmdategmmktimecheckdategmstrftimegetdatedate_createdate_parsedate_formatdate_modifydate_timezone_getdate_timezone_setdate_offset_getdate_time_setdate_date_setdate_isodate_settimezone_opentimezone_name_gettimezone_name_from_abbrtimezone_offset_gettimezone_transitions_gettimezone_identifiers_listtimezone_abbreviations_listdate_default_timezone_setdate_default_timezone_getdate_sunrisedate_sunsetdate_sun_infogmt_offsettimezone_identifierassociative_arrayThe DateTime object has not been correctly initialized by its constructorThe DateTimeZone object has not been correctly initialized by its constructorFailed to parse time string (%s) at position %d (%c): %sCan only do this for zones with ID for nowTrying to compare an incomplete DateTimeZone objectTrying to compare different kinds of DateTimeZone objectsIt is not safe to rely on the system's timezone settings. Please use the date.timezone setting, the TZ environment variable or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected '%s' for '%s/%.1f/%s' instead"Olson" Timezone Database VersionTimezone database is corrupt - this should *never* happen!Wrong return format given, pick one of SUNFUNCS_RET_TIMESTAMP, SUNFUNCS_RET_STRING or SUNFUNCS_RET_DOUBLE%04d-%02d-%02dT%02d:%02d:%02d%c%02d:%02d%3s, %02d %3s %04d %02d:%02d:%02d %c%02d%02dUnrecognized date format token.You should be using the time() function insteadThe is_dst parameter is deprecated��l�u���������������������H�(��X������������@� ���������X�@���(������X�H��8�������x��X��(��"�#�#�#�#��!��!�x#�#�#�!�#�#�#�#�#�#�#�#�!�#�!�#�s!�"�#�#�#�#�#�#�#�#�#�c!�#�#�!�!�� �c!�#�#�� �� �#�#�#�#� � �#�#�� �#�S � �!�"�"�"�"�!�!�"�"�"� �"�"�"�"�"�"�"�"� �"� �"� �!�"�"�"�"�"�"�"�"�"�| �"�"� � � �| �"�"���"�"�"�"����"�"���"�l�� &�3%�*%�!%�%�%��$��$��i���V@8@0C�?N@��������(�2���.A��������@�ŞBA�+�BA�v@�S�Pl��?���1旉@l�l�f?�f@���	��?�n��@v@FɽVȰ?�����q@�[��&�>h	2*�?9�R�Fߑ?��cܥL@���/�>�!��up7@�?.@(@9EGr��? �@�<[y����1O;Zx����0N��������febAaPpacstutcgmtEmpty stringDouble timezone specificationUnexpected characterDouble date specificationDouble time specificationmaraprmayjunaugseptnovviviiviiixixiijanuaryfebruarymarchapriljunejulyaugustseptemberoctobernovemberdecembernextthirdfourthfifthsixthseventheighthninthtentheleventhtwelfthprevioussecsminsweeksfortnightfortnightsforthnightforthnightsyearsmondaytuesdaytuewednesdaythursdaythufridayfrisaturdaysundaysunweekdaysPacific/ApiaPacific/HonoluluAmerica/AnchorageakdtpstAmerica/Los_AngelespdtAmerica/DenverAmerica/ChicagocdtAmerica/New_YorkedtAmerica/HalifaxbrtAmerica/Sao_PaulobrstazostAtlantic/AzoresazodtEurope/LondonbstcetEurope/PariscesteetEurope/HelsinkieestEurope/MoscowAsia/DubaipktAsia/KarachiAsia/KolkatanptAsia/KatmanduyektAsia/YekaterinburgnovstAsia/NovosibirskkratAsia/KrasnoyarskkrastAsia/TokyoAustralia/MelbourneAustralia/AdelaidenzstPacific/AucklandnzdtAmerica/Porto_AcreAmerica/EirunepeAmerica/Rio_BrancoBrazil/AcreaddtAmerica/Goose_BayAmerica/PangnirtungAfrica/Addis_AbabaAfrica/AsmaraAfrica/AsmeraAmerica/BarbadosAmerica/Blanc-SablonAmerica/Glace_BayAmerica/MartiniqueAmerica/MonctonAmerica/ThuleAtlantic/BermudaCanada/AtlanticAsia/BaghdadaftAsia/KabulahdtUS/AlaskaahstAmerica/AdakAmerica/AtkaUS/AleutianAmerica/JuneauAmerica/NomeAmerica/YakutataktstAsia/AqtobeakttalmstAsia/AlmatyalmtAsia/YerevanAmerica/Boa_VistaAmerica/Campo_GrandeAmerica/CuiabaAmerica/ManausAmerica/Porto_VelhoAmerica/SantaremBrazil/WestAmerica/AsuncionEurope/AmsterdamEurope/AthensanastAsia/AnadyranatAmerica/CuracaoAmerica/ArubaaotAfrica/LuandaAmerica/Puerto_RicoaqtstAsia/AqtauaqttAmerica/Buenos_AiresAmerica/Argentina/CatamarcaAmerica/Argentina/CordobaAmerica/Argentina/JujuyAmerica/Argentina/La_RiojaAmerica/Argentina/MendozaAmerica/Argentina/SaltaAmerica/Argentina/San_JuanAmerica/Argentina/San_LuisAmerica/Argentina/TucumanAmerica/Argentina/UshuaiaAmerica/CatamarcaAmerica/CordobaAmerica/JujuyAmerica/MendozaAmerica/RosarioAntarctica/PalmerashstAsia/AshkhabadAsia/AshgabatashtAsia/RiyadhAmerica/AnguillaAmerica/AntiguaAmerica/DominicaAmerica/GrenadaAmerica/GuadeloupeAmerica/MarigotAmerica/MiquelonAmerica/MontserratAmerica/Port_of_SpainAmerica/Santo_DomingoAmerica/St_BarthelemyAmerica/St_KittsAmerica/St_LuciaAmerica/St_ThomasAmerica/St_VincentAmerica/TortolaAmerica/VirginAsia/AdenAsia/BahrainAsia/KuwaitAsia/QatarazomtazotazstAsia/BakuaztbakstbaktbdstAsia/DaccaAsia/DhakaEurope/BelfastEurope/GibraltarEurope/GuernseyEurope/Isle_of_ManEurope/JerseyGBGB-EirebdtbeatAfrica/MogadishuAfrica/KampalaAfrica/NairobibeautAfrica/Dar_es_SalaamAmerica/BogotaAfrica/BanjulAsia/BangkokEurope/TiraspolEurope/BucharestEurope/ChisinaubntAsia/BruneibortstAsia/KuchingbostAmerica/La_PazbotAmerica/AraguainaAmerica/BahiaAmerica/BelemAmerica/FortalezaAmerica/MaceioAmerica/RecifeBrazil/EastPacific/MidwayPacific/Pago_PagoPacific/SamoaUS/SamoaEurope/DublinbttAsia/ThimbuAsia/ThimphuburtAsia/CalcuttaAsia/RangooncantAtlantic/CanarycaptcastAfrica/GaboroneAfrica/KhartoumAntarctica/CaseyAfrica/BlantyreAfrica/BujumburaAfrica/HarareAfrica/KigaliAfrica/LubumbashiAfrica/LusakaAfrica/MaputoAfrica/WindhoekcawtcctIndian/CocoscddtAmerica/Rankin_InletAmerica/ResoluteAmerica/HavanaCubaAmerica/AtikokanAmerica/BelizeAmerica/Cambridge_BayAmerica/CancunAmerica/ChihuahuaAmerica/Coral_HarbourAmerica/Costa_RicaAmerica/El_SalvadorAmerica/Fort_WayneAmerica/GuatemalaAmerica/Indiana/IndianapolisAmerica/Indiana/KnoxAmerica/Indiana/MarengoAmerica/Indiana/PetersburgAmerica/Indiana/Tell_CityAmerica/Indiana/VevayAmerica/Indiana/VincennesAmerica/Indiana/WinamacAmerica/IndianapolisAmerica/IqaluitAmerica/Kentucky/LouisvilleAmerica/Kentucky/MonticelloAmerica/Knox_INAmerica/LouisvilleAmerica/ManaguaAmerica/MatamorosAmerica/MenomineeAmerica/MeridaAmerica/Mexico_CityAmerica/MonterreyAmerica/North_Dakota/CenterAmerica/OjinagaAmerica/Rainy_RiverAmerica/TegucigalpaAmerica/WinnipegCanada/CentralCST6CDTMexico/GeneralUS/CentralUS/East-IndianaUS/Indiana-StarkeAsia/ShanghaiAsia/ChongqingAsia/ChungkingAsia/HarbinAsia/KashgarAsia/TaipeiAsia/UrumqiROCcemtEurope/BerlinCETEurope/KaliningradAfrica/AlgiersAfrica/CeutaAfrica/TripoliAfrica/TunisArctic/LongyearbyenAtlantic/Jan_MayenEurope/AndorraEurope/BelgradeEurope/BratislavaEurope/BrusselsEurope/BudapestEurope/CopenhagenEurope/KievEurope/LisbonEurope/LjubljanaEurope/LuxembourgEurope/MadridEurope/MaltaEurope/MinskEurope/MonacoEurope/OsloEurope/PodgoricaEurope/PragueEurope/RigaEurope/RomeEurope/San_MarinoEurope/SarajevoEurope/SimferopolEurope/SkopjeEurope/SofiaEurope/StockholmEurope/TallinnEurope/TiraneEurope/UzhgorodEurope/VaduzEurope/VaticanEurope/ViennaEurope/VilniusEurope/WarsawEurope/ZagrebEurope/ZaporozhyeEurope/ZurichLibyaPolandPortugalWETAfrica/CasablancacgstAmerica/ScoresbysundcgtchadtPacific/ChathamNZ-CHATchastchatchdtchostAsia/ChoibalsanchotcitAsia/DiliAsia/MakassarAsia/PontianakAsia/Ujung_PandangcjtAsia/SakhalinJapanckhstPacific/RarotongacktclstAmerica/SantiagoChile/ContinentalcltcmtAmerica/CaracasAmerica/PanamacostcotcptAmerica/DetroitAmerica/HermosilloAmerica/MazatlanAmerica/ReginaAmerica/Swift_CurrentAmerica/Thunder_BayCanada/East-SaskatchewanCanada/SaskatchewanMexico/BajaSurUS/MichiganAsia/MacaoAsia/MacauAsia/JayapuraAustralia/Broken_HillAustralia/DarwinAustralia/NorthAustralia/SouthAustralia/YancowinnacutcvstAtlantic/Cape_VerdecvtcwstAustralia/EuclacwtcxtIndian/ChristmaschstPacific/GuamPacific/SaipandactdavtAntarctica/DavisddutAntarctica/DumontDUrvilledusstAsia/DushanbedusteasstChile/EasterIslandPacific/EasterIndian/AntananarivoAfrica/DjiboutiIndian/ComoroIndian/MayotteAmerica/GuayaquilPacific/GalapagoseddtAmerica/Grand_TurkAmerica/JamaicaAmerica/MontrealAmerica/NassauAmerica/NipigonAmerica/Port-au-PrinceAmerica/TorontoCanada/EasternEST5EDTUS/EasternAfrica/CairoAsia/AmmanAsia/BeirutAsia/DamascusAsia/GazaAsia/IstanbulAsia/NicosiaEETEgyptEurope/IstanbulEurope/MariehamnEurope/NicosiaTurkeyW-SUegstehdteitAmerica/CaymanAustralia/ACTAustralia/BrisbaneAustralia/CanberraAustralia/CurrieAustralia/HobartAustralia/LHIAustralia/LindemanAustralia/Lord_HoweAustralia/NSWAustralia/QueenslandAustralia/SydneyAustralia/TasmaniaAustralia/VictoriaewtffmtfjstPacific/FijifjtfkstAtlantic/StanleyfktAfrica/FreetownAtlantic/MadeirafnstAmerica/NoronhaBrazil/DeNoronhafntfortfrustAsia/BishkekfrutgaltgamtPacific/GambiergbgtAmerica/GuyanaAsia/TbilisigftAmerica/CayenneghstAfrica/AccragiltPacific/Tarawagmt+10Etc/GMT+10gmt+11Etc/GMT+11gmt+12Etc/GMT+12gmt+1Etc/GMT+1gmt+2Etc/GMT+2gmt+3Etc/GMT+3gmt+4Etc/GMT+4gmt+5Etc/GMT+5gmt+6Etc/GMT+6gmt+7Etc/GMT+7gmt+8Etc/GMT+8gmt+9Etc/GMT+9gmt-10Etc/GMT-10gmt-11Etc/GMT-11gmt-12Etc/GMT-12gmt-13Etc/GMT-13gmt-14Etc/GMT-14gmt-1Etc/GMT-1gmt-2Etc/GMT-2gmt-3Etc/GMT-3gmt-4Etc/GMT-4gmt-5Etc/GMT-5gmt-6Etc/GMT-6gmt-7Etc/GMT-7gmt-8Etc/GMT-8gmt-9Etc/GMT-9Africa/AbidjanAfrica/BamakoAfrica/BissauAfrica/ConakryAfrica/DakarAfrica/LomeAfrica/MalaboAfrica/MonroviaAfrica/NiameyAfrica/NouakchottAfrica/OuagadougouAfrica/Porto-NovoAfrica/Sao_TomeAfrica/TimbuktuAmerica/DanmarkshavnAtlantic/ReykjavikAtlantic/St_HelenaEtc/GMTEtc/GMT+0Etc/GMT-0Etc/GMT0Etc/GreenwichIcelandAtlantic/South_GeorgiaAsia/MuscatgytHSTUS/HawaiihkstAsia/Hong_KongHongkonghkthmthovstAsia/HovdhovthptPacific/JohnstonhwtAsia/Ho_Chi_MinhAsia/Phnom_PenhAsia/SaigonAsia/VientianeiddtAsia/JerusalemAsia/Tel_AvivIsraelidtihstAsia/ColomboimtAsia/IrkutskiotIndian/ChagosirdtAsia/TehranIranirkstirktisstAsia/KathmandujavtAsia/JakartajdtAsia/Kuala_LumpurAsia/ManilaAsia/SingaporePacific/NaurukartkastAsia/SeoulROKkgstkgtkizstAsia/QyzylordakiztkmtkostPacific/KosraeAsia/NovokuznetskAsia/PyongyangkuystEurope/SamarakuytkwatPacific/KwajaleinlhstlintPacific/KiritimatilktAmerica/GodthabAmerica/ParamariboAtlantic/FaeroeAtlantic/FaroeAmerica/LimaAmerica/EdmontonCanada/MountainAmerica/Santa_IsabelAmerica/EnsenadaAmerica/TijuanaMexico/BajaNorteAfrica/El_AaiunPacific/MarquesasPacific/TahitiEurope/VolgogradAsia/OralIndian/MaheIndian/ReunionIndian/MauritiusAsia/SamarkandAsia/TashkentAsia/OmskAfrica/LibrevilleAfrica/DoualaAsia/UlaanbaatarAsia/Ulan_BatorAsia/YakutskAsia/VladivostokAfrica/NdjamenaAsia/MagadanAfrica/BrazzavilleAsia/KamchatkaPacific/GuadalcanalPacific/NoumeaPacific/EfateAfrica/BanguiAfrica/MaseruAfrica/MbabaneAfrica/LagoslontlrtFactorymadmtmadstmadtmagstmagtmalstmaltmartmawtAntarctica/MawsonmddtAmerica/YellowknifemdstAmerica/BoiseAmerica/InuvikAmerica/PhoenixAmerica/ShiprockMSTMST7MDTNavajoUS/ArizonaUS/MountainmestMETmetmhtPacific/MajurommtAmerica/MontevideoIndian/MaldivesmotAmerica/Dawson_CreekmustmutmvtmwtmytncstnddtAmerica/St_JohnsCanada/NewfoundlandndtnegtnestnetnftPacific/NorfolknmtnovtnrtnutPacific/NiuenwtAntarctica/McMurdoAntarctica/South_PoleNZnzmtomsstomstorastoratpddtAmerica/DawsonAmerica/VancouverAmerica/WhitehorseCanada/PacificCanada/YukonPST8PDTUS/PacificUS/Pacific-NewpetstpettpetpgtPacific/Port_MoresbyphotPacific/EnderburyphstphtpkstpmdtpmstpntPacific/PitcairnpontPacific/PonapeppmtpptpwtPacific/PalaupystpytqmtqyzstqyztretrmtrottAntarctica/RotherasakstsaktsamstsamtsastAfrica/JohannesburgsbtsctsdmtsgtshestshetsjmtslstsmtsrtsvestsvetswatsyotAntarctica/SyowatahttassttasttbisttbmttftIndian/KerguelentjttktPacific/FakaofotlttmttostPacific/TongataputottrsttrttrutPacific/TrukPacific/YaptsattvtPacific/FunafutiEtc/UCTulastulaturasturaturutEtc/UniversalEtc/UTCEtc/ZuluuyhstuzstuztvlasstvlastvlatvolstvoltvostAntarctica/VostokvustvutwaktPacific/WakewarstwartAfrica/KinshasawemtwetwftPacific/WalliswgstwgtwitwmtwsdtAustralia/PerthAustralia/Westyakstyaktyddtydtyekstyerstyertywtzzz��x�x�������8�P�h���(��'�l1�l1�l1�l1�l1�l1�l1�l1�D'�'�l1�l1�l1�l1�l1�l1�l1�l1�l1�l1�l1�l1�l1�l1�l1�l1�l1�l1�l1�l1�l1�D'�l1�l1�l1�l1�l1�l1�l1�'�l1�l1��&��&��&��&�l1�&�d&�4&�&��%��%��%��%��%��%�l1�l1�l1�l1�l1�l1�%�4%��#��#�#�L*�*��#��#��)�t)��#��(�(�4(�'�\+��#��#�$+��*��#�*�.�,�t#��#�l1�l1�l1�l1�l1�l1�4#��"��"�T"�4!� ��"��"��"����"����T�$�t��"��"�d�4��"��"���"�l��"�8!�������E�E��s�@s�@s�@s�@s�@s�@s�@s��������!�!�!�!�r�!�!��q�!�!�!�!�!�!�t�!�!�!�!�!�q�!��p�!�!�!�������!�!�!�!�r�!�!��q�!�!�!�!�!�!�t�!�!�!�!�!�q�!��p�!�!�!�?�$�$�$�$�$�$�$�$�$�$�$�$�$�$�$�$�$�$�$�$�$�$�p;�$�$�$�$�$�$�$�$�$�$�$�$��<�=�<�u�u�u�u�u�u�u�u�u�u�=�$�$�$�$�$�$�p;�$�$�p;�$�p;�$�p;�p;�p;�$�$�p;�p;�p;�p;�$�$�p;�p;�$�p;�p;�p;�p;�$�$�$�$�$�$�$�p;�$�$�p;�$�p;�$�p;�$�p;�$�$�p;�`9�p;�p;�$�p:�;�:�$�$�p;�$�p;�T=�C"�C"�C"�C"�C"�C"�C"�C"�C"�C"�C"�C"�C"�C"�C"�C"�C"�C"�C"�C"�C"�C"�9�C"�C"�C"�C"�C"�C"�C"�C"�C"�C"�C"�C"�,;�W;�:��t��t��s��s��s��s��s��s��s��s�;�C"�C"�C"�C"�C"�C"�9�C"�C"�9�C"�9�C"�9�9�9�C"�C"�9�9�9�9�C"�C"�9�9�C"�9�9�9�9�C"�C"�C"�C"�C"�C"�C"�9�C"�C"�9�C"�9�C"�9�C"�9�C"�C"�9�7�9�9�C"�8��9��8�C"�C"�9�C"�9�;� � � � � � � � � � � � � � � � � � � � � � ��7� � � � � � � � � � � � �h9�9�89�s�s�s�s�%s�%s�%s�%s�%s�%s�8:� � � � � � ��7� � ��7� ��7� ��7��7��7� � ��7��7��7��7� � ��7��7� ��7��7��7��7� � � � � � � ��7� � ��7� ��7� ��7� ��7� � ��7��5��7��7� ��6�8� 7� � ��7� ��7��9�����������������������$6�������������7��7�t7��5��5��5�q�q�q�q�q�q�q�t8�������$6���$6��$6��$6�$6�$6���$6�$6�$6�$6���$6�$6��$6�$6�$6�$6��������$6���$6��$6��$6��$6���$6�4�$6�$6��$5�L6�\5���$6��$6��o�����������������������{o��������������5�qp�5� q�(4�(4�(4�(4�(4�(4�(4�(4�(4�dp�������{o���{o��{o��{o�{o�{o���{o�{o�{o����{o�{o��{o�{o�{o�{o��������{o���{o��{o��{o��{o���{o�P2�{o���`3�4�3���{o��{o�%0�m�%0�m�m�lb�lb��a�
a�
a�
a�
a�
a�
a�
a���`�`�`�`�`�`�?;�?;�si��h��h��h��h��h��h��h�`�`�`�`�`�`�`�����Zh���g�������Pj������Xg��xf����`�`�`�`�`�`�o�o�o�o�Hp�o�o�p�o�o�o�o�o�o��o�o�o�o�o�o�o�o�`o�o�o�o�K|�(0�(0�(0�(0�(0�(0�(0�(0�(0�(0�(0�(0�(0�(0�(0�(0�(0�(0�(0�(0�(0�(0�K|�(0�(0�(0�(0�(0�(0�(0�(0�(0�(0�(0�(0�K|�K|�(0�(0�(0�(0�(0�(0�(0�(0�(0�(0�(0�(0�(0�(0�(0�(0�(0�(0��{�(0�(0�l|�(0�.}�(0�(0�Kz��y�(0�(0��|��{�k{�(0�(0�(0�|�(0�(0��z�(0�z�(0�(0�(0�(0�(0�(0�(0�(0��{�(0�(0�l|�(0�.}�(0�(0�(0��y�(0�(0��|��{�k{�(0�(0�(0�|��}�|.�|.�|.�|.�|.�|.�|.�|.�|.�|.�|.�|.�|.�|.�|.�|.�|.�|.�|.�|.�|.�|.��}�|.�|.�|.�|.�|.�|.�|.�|.�|.�|.�|.�|.�z�z�|.�|.�|.�|.�|.�|.�|.�|.�|.�|.�|.�|.�|.�|.�|.�|.�|.�|.�}�|.�|.��|�|.�|�|.�|�x�,x�|.�|.�}�$z�y��|.�|.�|��{�|.�Dy�,}��x�<|�|.�|.�|.�|.�|.�|.�|.�}�|.�|.��|�|.�|�|.�|�|.�,x�|.�|.�}�$z�y��|.�|.�|��{�|.�|.�,}�|.�<|�>v�>v�>v�o��o��o��o��o��o��o�?�?�?�?�?�?�?�qo�?�?�q�?�Ho�?�?�?�o�?�?�n�n�.m�?�?�?�q�?�?�?�?�?�?�?�?�?�?�?�?�?�qo�?�?�q�?�Ho�?�?�?�o�?�?�n�n�.m�?�?�?�q�u��t�+k�+k�+k�+k�+k�+k�+k�+k�@,�@,�@,�@,�@,�@,�@,�kr�@,�@,�q�@,��o�@,�@,�@,�oo�@,�@,�|t�3t�s�@,�@,�@,�s�@,�@,�@,�@,�@,�@,�@,�@,�@,�@,�@,�@,�@,�kr�@,�@,�q�@,��o�@,�@,�@,�oo�@,�@,�|t�3t�s�@,�@,�@,�s�Qm�*�*��o�*�(m�*�*�*��l�*�*�l�xl�k�*�*�*�o�*�*�*�*�*�*�*�*�*�*�*�*�*�Qm�*�*��o�*�(m�*�*�*��l�*�*�l�xl�k�*�*�*�o�z��)��)��)��)��)��)��)��)��)��)��)��)��)��)��)��)��)��)��)��)��)��)�z��)��)��)��)��)��)��)��)��)��)��)��)��u��u��)��)��)��)��)��)��)��)��)��)��)��)��)��)��)��)��)��)�u��)��)�,x��)�x��)��w��s�|s��)��)�Tx�tu�u��)��)��)�dw�$w��)�t�|x�4t�w��)��)��)��)��)��)��)�u��)��)�,x��)�x��)��w��)�|s��)��)�Tx�tu�u��)��)��)�dw�$w��)��)�|x��)�w�pz�z�g�g�g�g�g�g�g�g�(�(�(�(�(�(�(��n�(�(�qm�(�Hl�(�(�(��k�(�(��p�p�o�(�(�(�]o�(�(�(�(�(�(�(�(�(�(�(�(�(��n�(�(�qm�(�Hl�(�(�(��k�(�(��p�p�o�(�(�(�]o�6y�.V�.V�.V�.V�.V�.V�.V�.V�.V�.V�.V�.V�.V�.V�.V�.V�.V�.V�.V�.V�.V�.V�6y�.V�.V�.V�.V�.V�.V�.V�.V�.V�.V�.V�.V�,y�y�y��|�|�>z�y�%��%��y�y�y�y�|y�.V�.V�.V�.V�.V�.V�6y�.V�.V�6y�.V�6y�.V�6y�6y�6y�.V�.V�6y�6y�6y�.V�.V�.V�6y�6y�.V�6y�g)�6y�6y�.V�.V�.V�.V�.V�.V�.V�6y�.V�.V�6y�.V�6y�.V�6y�.V�6y�.V�.V�6y�6y�6y�.V�.V�.V�6y�6y�.V�.V�6y�.V�6y�N��զ�e��e��e��e��e��e��e��e�������������V���������������������k�������������������V���������������������k��%�u��u��u��u��u��u��u��u��u��u��u��u��u��u��u��u��u��u��u��u��u��u��%�u��u��u��u��u��u��u��u��u��u��u��u���$���C�g;�9�bC��C�C�C�C�C�C�c#�u��u��u��u��u��u��%�u��u��%�u��%�u��%�%�%�u��u��%�%�%�u��u��u��%�%�u��%�7}�%�%�u��u��u��u��u��u��u��%�u��u��%�u��%�u��%�u��%�u��u��%�%�%�u��u��u��%�%�u��u��%�u��%�z��ja�����������������`"�`"�`"�`"�`"�`"�`"�Ԧ�`"�`"���`"���`"�`"�`"�A��`"�`"�������`"�`"�`"���`"�`"�`"�`"�`"�`"�`"�`"�`"�`"�`"�`"�`"�Ԧ�`"�`"���`"���`"�`"�`"�A��`"�`"�������`"�`"�`"����j��j��j�=d�dd�dd�dd�dd�dd�dd�P!�P!�P!�P!�P!�P!�P!�	d�P!�P!�f�P!��c�P!�P!�P!�c�P!�P!�Yc�0c��a�P!�P!�P!�@f�P!�P!�P!�P!�P!�P!�P!�P!�P!�P!�P!�P!�P!�	d�P!�P!�f�P!��c�P!�P!�P!�c�P!�P!�Yc�0c��a�P!�P!�P!�@f���,�+�+�+�+�+�+�+�+�t5�t5�t5�t5�t5�t5�t5�3+�t5�t5�+�t5�/�t5�t5�t5�-/�t5�t5�j0�*�]*�t5�t5�t5��)�t5�t5�t5�\!�t5�t5�t5�t5�t5�t5�t5�t5�t5�3+�t5�t5�+�t5�/�t5�t5�t5�-/�t5�t5�j0�*�]*�t5�t5�t5��)�E(���������������������������������������������E(�������������������������(�(�������������������������������������'������&���%���=m�p!��#�����#�"�&"�������^J�l���!��m�d��l���������������'������&���%���=m����#�����#�"�&"�������^J�l������m���l�D&��U��U��U��U��U��U��U��U��U��U��U��U��U��U��U��U��U��U��U��U��U��U�D&��U��U��U��U��U��U��U��U��U��U��U��U�D&�D&��U��U��U��U��U��U��U��U��U��U��U��U��U��U��U��U��U��U�Q%��U��U�&��U��&��U��U��
"��U��U��&�� �b ��U��U��U�&��U��U�7 ��U����U��U��U��U��U��U��U��U�Q%��U��U�&��U��&��U��U��U�
"��U��U��&�� �b ��U��U��U�&�dd�@�`XXXXXXThe timezone could not be found in the databaseAmerica/Argentina/Buenos_AiresAmerica/Argentina/ComodRivadaviaAmerica/Argentina/Rio_GallegosAmerica/North_Dakota/New_Salemlocal time zone must be set--see zic manual pageUTC/Local count:   %lu
Std/Wall count:    %lu
Leap.sec. count:   %lu
Trans. count:      %lu
Local types count: %lu
Zone Abbr. count:  %lu
%08X (%12ld) = %d
2010.9Antarctica/Macquarie%8s (%12s) = %3d [%5ld %1d %3d '%s' (%d,%d)]
%08X (%12d) = %3d [%5ld %1d %3d '%s' (%d,%d)]
PHP1CI��H���8LMTGMT�q��PHP1GH
�0f��L����zP�.-�ͭ��`�Ů�P��ǐ����r��ʴL��S�P̕��5������	LMTGHSTGMT��8S�PHP1ET	���$h*0ADMTEAT��M��PHP1DZ!�`PO�Gx��,p���p��H�p��*�`���.�zL�5��p�p�X����	�ϒ4Њ�r�N$p�Kp����\��x��C��
���D�xZhYvCpfB�_|O_1		 
PMTWESTWETCESTCET�t�O�PHP1ER	���$h*0ADMTEAT���M�MPHP1??	���$h*0ADMTEAT�T@��PHP1ML����������������LMTGMTWAT���s�PHP1CF��}lLMTWAT���/�PHP1GM���*'��6���d���d����LMTBMTWATGMT���@�PHP1GW�ē	ga���d����LMTWATGMT�i(��BPHP1MW�Fð � LMTCATq>�H`PHP1CG��,TLMTWAT�ѕ)��PHP1BI CAT�*�?w�PHP1EG�	ȓ���{���������ˮ`��)�ͬ������Ϗf�Щy�ф`�Ҋ�P�6c`��-P��`��`�����m�����ﰳp�y%�����ZY�sp�;���U�p���6��E�p�����9����۾�����p����%�g�YpIa�p+�C�Հ$Ep�	
x�
�<������
�1p���d�t(���pU\np7�OP������Hp���{��<����pp�4����g� ��p!a�"z\p#D $b'p%%S�&<�p'�(��(纀*{�*�?�+�p,�s-���.���/��0k�1��2J��3_��4*��5?��6
��7(�`7��P9�`9ӱP:�`;��P<�|`=�uP>�^`?sWP@�z�A\s�Bq\�C<U�DQ>�E�PF1 �F�jPH�H��I���J��PK�`L��PM��`N��PO��`Pd�PQy�`RD�PSY�`T$�PU9k`VdPW"��W��Yi�Y�b�Z�K�[�D�\�-�]�&�^��_m�`�,`aV%Pbk`c6PdJ�`e�Pf*�`f��Ph
�`hխPi�`j��PkӲ�l���m���n~��o�v�p^o�qsX�r>Q�sS:�t3�u<W`vPPw9`w�2Px�`y�Pz�`{��P|��`}��P~��`f�P*0 *0 EESTEET�.�BW�PHP1MA�Q�����X�p���ҡ2��5���'�%r@���pk���m��aG�
�?���p�Q�'�p��o�HA�H�"pJ#J��pK��L]�p����	
LMTWESTWETCET���BPHP1ES~��up��n`��p��_�ɧ�#�Op���k�p"p�ᑀ�%r@���pk���m��aG�
�?���p�Q�'�p����|� lr!\c"LT#<E$,6%'&'C�'�4�(�%�)��*��+���,��-�ڐ.�ː/t��0d��1]�2r�3=�4R�5�62x6�8��8�a9�v�:�C;�X�<�_�=�:�>�A�?��@f#�A�9BF�CdD%�EC�FɐG#�G��I�I��J�K��L̿�M��N���OnnP���QW��Rle�S7l�TLG�UN�V,)�V�0�XFX��Y�(Z��[�
\�]��^�_��`_�a}�b?�c]̐d�e=��f��g��g藐h�r�i�y�j�T�k�[�l�qm�=�n�Soh�p�5qQ<rfs1tE�uv/�v��x��x��y�ِz��{λ�|�}���~y����	 
	WETWESTCETCEST�-
��Ceuta & MelillaPHP1GN��\�����0����$����LMTGMTWAT�ٲ��mPHP1SN����;��������LMTWATGMT��j��PHP1TZ��Ӭ֝��f�$�*0&�LMTEATBEAUT~�N��PHP1DJ���(t*0LMTEAT��T�PHP1CM��h	LMTWAT��H!u�PHP1EH�H��Ѱ��������LMTWATWET�����@PHP1SL��2l��8���0�ӽ��t�0´��U��Ė$��6�0�wX�%��Y�����;����0�D̽��|�S���̼p�4�������#p�l��q�p�٠�R���Ӏ�4p������P����	
	FMTSLSTWATGMT�L��p�PHP1BW	Ύn��~Qp *0CATCASTc�W:42PHP1ZW�F�d LMTCATnB	hPHP1ZA�F�ḫ��͞opΎn��~Qp*0 SASTaFX=bPHP1UG����š�֝���Gcd*0#(&�
LMTEATBEATBEAUT���DBPHP1SD"�����z4P}��[g�`~�=��@`� P B�	S�
$�
�P���P
����?��`�sP��`g��h�`J+�H�`+_P(�`��o`��P���KP�m��~�8�E �*0 	*0
LMTCASTCATEAT�"DL�PHP1RW��P0 LMTCAT�Z�@�JPHP1CDWAT�Đ*west Dem. Rep. of CongoPHP1NG�Q�P0LMTWAT�+�ؠPHP1GA�慤�LMTWAT��!�PHP1TGGMT����PHP1AO��xL4AOTWAT{�&��PHP1CD CATw��<��east Dem. Rep. of CongoPHP1ZM�F�� LMTCATq�=ЭPHP1GQ��D�<LMTGMTWAT�
 }PHP1MZ�F��� LMTCATa�D`]PHP1LS	�FʸΎn��~Qp� *0LMTSAST\]�<��PHP1SZ	�F�X( LMTSASTa2�B�PHP1SO	���P�J�*0#(EATBEAT�{�W��PHP1LR�_l�a����������MMTLRTGMT��04BPHP1KE����š�ǑG��/��"�*0#(&�
LMTEATBEATBEAUT�^�J�PHP1TD
��dfqp&�` LMTWATWAST��R)�hPHP1NE�挄��Ɛ�0������LMTWATGMT��2�RPHP1MR��t������Ȑ�������LMTGMTWAT���RPHP1BF�������LMTGMT�2�X
PHP1BJ������tLMTGMTWAT�8���PHP1ST�����pLMTGMT��u�PHP1??����������������LMTGMTWAT�T@��PHP1LY��$ݻ��#�`�x���e��/?p����N���B`�p�+��*��_`̯���`�z����p��` pJp!a~�"R�p#D�$4�%%7`&@��2N�`3D6p45j�\ 	 
LMTCESTCETEET���&�=PHP1TN!
�`PO�:���X�`��"���T�˭i���Kͩ����̰΢5ϒ4Љ���r�N`
�����p�d�tp"�:�#<(�$,�%
�&<�p''pBt
�C<�D%�EC�FɐG#�G��I�1 		 PMTCESTCET�{@"2]PHP1NA\�F�ḫ��͞op&��-���.i/}�0H�1g�2(�3F�4��5&ɀ5�ސ7��7��8捀9���:�o�;���<��=qf�>�n?Z�@oPA:eBO2CGD/D�)F�F�G��H�'�I��J�	�K�րL��M���Nb͐Ow��PB��Q`�R"��S@�T�U {U�W]W�rX�?Y�TZ�![�6\�=�]k^��_T4�`i�a4�bH�c��d(ŀd�ڐf�fӼ�g��h��iѦj��k��l|�m�jn\oqLp<aqZh�rCs:J�t_�u,�u�A�v��w�#�x��y��z�Ҁ{��|��}n~��M� *0 
 SWATSASTCATWASTf�%,�0PHP1US�#ˉD��#�p�aP@��U���qP��T@�SP�6@x5PqR�aQ�Q4�A3�1��m�	��	��P
������@
�����@��P��@��Py�@i�PY@I~P9a@)`P"}�	BP_�+" �P��3��2�������� vG@!�ٰ"V)@#j�0$6@%J�0&�@'*�0'�	�)
�0)��*�~0+��,Ӛ�-���.�|�/~��0�^�1g�@2s@�3G�@4S"�5'r@63�7T@8!08�6@9�0:�@;��0<�4�=��0>��?��0@o��A�ŰBO�Cd��D/��ED��E��@G-�0G��@I
�0I��@J�j0K��Lֆ�M|��N�h�O\��P�J�Q<u�Rv,�SW�TV�T�9�V5�V�V@X
0X�8@Y��0Z�@[��0\��@]��0^d�@_��0`M��a���b-�cg��d
��eGu�e�g'W�g͂�i9�i�d�j��k��@l�80mvc@n�0oVE@p��0q6'@ro�0s	@tO�0t�%�v8ܰv��x��x��y���z��{؂�|~��}�d�~^���F���eP��s`��s`��eP��s`��s`���p��s`NSTNWTNPTBSTBDTAHSTHADTHAST�}�rAleutian IslandsPHP1US�&ˉ6��#�p�aB0��G���c@��F0�E@�(0x'@qD�aC�Q&�A%�1��_�	�	��@
�̰����0
�����0��@��0��@y�0i�@Yq0Ip@9S0)R@"o�	4@Q�+�B��%��$������� v90!�ˠ"V0#j� $5�0%J� &�0'*� '���)
� )�ݰ*�p +���,ӌ�-���.�n�/~��0�P�1g�02s2�3G�04S�5'd062��7F08 8�(09�� :�
0;�� <�&�=�� >��?�� @o�A���BO̰Cd��D/��ED{�E��0G-� G��0I
z I��0J�\ K���L�x�M|��N�Z�O\��P�<�Q<g�Rv�SI�TV�T�+�V5�V�H0X� X�*0Y�� Z�0[�� \��0]�� ^d�0_�� `M�a���b-ΰcg��d
��eGg�e풰g'I�g�t�i+�i�V�j�
�k�s0l�* mvU0n� oV70p�� q60ro� s�0tO� t��v8Πv��x��x�۰y���z���{�t�|~��}�V�~^���8���s`���p���p	��s`���p���p�������p!CATCAWTCAPTAHSTAHDTYSTAKDTAKST潍-�Alaska TimePHP1AI�75 �������LMTAST���mPHP1AG�73��B�P����������LMTESTAST�Xh�[�PHP1BR1
��t0�I�@���40��t �8�0��0��ܹY �0ޛ� �ݚ0�T3 ��^ ��d0���Q,0��� �
Ұ������0��}�Ɏ0xנ�5� 3Ϡ!�i0"Ƞ#X�#�p %7�%�� 0�y01M�2W �3j 48T04�� 6 06�h�7�ư8�� 9��0:�,�;��<o�=đ0>N�������������	LMTBRSTBRT~W��`	TocantinsPHP1AR<
���0�{R@�ɰ��@��p0�}��������@���0���x
���@�Z�����@�;�0�~�����`@�*0�A7���0ȁ�@�M�����M�0ΰ��)5��Cd��=0��l0�2@�柰�C����0��w@��6���5���S0��R@��50��4@�J�$o�#���$��%7�%�v�'!0'�X�)�0)�:�*��0+�W 7�ư8�*�Gw	�G� H���I�a �������������������CMTARTARSTT���xxBuenos Aires (BA, CF)PHP1AR<���0�{R@�ɰ��@��p0�}��������@���0���x
���@�Z�����@�;�0�~�����`@�*0�A7���0ȁ�@�M�����M�0ΰ��)5��Cd��=0��l0�2@�柰�C����0��w@��6���5���S0��R@��50��4@�J�$o�#���$��%7�%�v�'!0'�X�)�@)�:�*��0+�W 7�ư8�*�@��0@��Gw	�G� ����������������������
CMTARTARSTWART]�u�G�Catamarca (CT), Chubut (CH)PHP1??<���0�{R@�ɰ��@��p0�}��������@���0���x
���@�Z�����@�;�0�~�����`@�*0�A7���0ȁ�@�M�����M�0ΰ��)5��Cd��=0��l0�2@�柰�C����0��w@��6���5���S0��R@��50��4@�J�$o�#���$��%7�%�v�'!0'�X�)�@)�:�*��0+�W 7�ư8�*�@��0@��Gw	�G� ����������������������
CMTARTARSTWART�T@��PHP1AR<���0�{R@�ɰ��@��p0�}��������@���0���x
���@�Z�����@�;�0�~�����`@�*0�A7���0ȁ�@�M�����M�0ΰ��)5��Cd��=0��l0�2@�柰�C����0��w@��6���5���S0��R@��50��4@�J�$o�#���$��%7�%�v�'!0'�X�)�@)�:�*��0+�W 7�ư8�*�Gw	�G� H���I�a ����������������������
CMTARTARSTWARTYj����/most locations (CB, CC, CN, ER, FM, MN, SE, SF)PHP1AR:���0�{R@�ɰ��@��p0�}��������@���0���x
���@�Z�����@�;�0�~�����`@�*0�A7���0ȁ�@�M�����M�0ΰ��)5��Cd��=0��l0�2@�柰�C����0��w@��6���5���S0��R@��50��4@�J�$o�#���$��%7�%�v�'*W�'�۰(�@)�:�*��0+�W 7�ư8�*�Gw	�G� ����������������������
����CMTARTARSTWARTWARSTdm���
Jujuy (JY)PHP1AR=���0�{R@�ɰ��@��p0�}��������@���0���x
���@�Z�����@�;�0�~�����`@�*0�A7���0ȁ�@�M�����M�0ΰ��)5��Cd��=0��l0�2@�柰�C����0��w@��6���5���S0��R@��50��4@�J�$o�#���$��%7�%�v�'!0'͵�(&&@)�0)�:�*��0+�W 7�ư8�*�@��0@��Gw	�G� ����������������������
CMTARTARSTWART\j���8
La Rioja (LR)PHP1AR<���0�{R@�ɰ��@��p0�}��������@���0���x
���@�Z�����@�;�0�~�����`@�*0�A7���0ȁ�@�M�����M�0ΰ��)5��Cd��=0��l0�2@�柰�C����0��w@��6���5���S0��R@��50��4@�J�$o�#���$��%7�%�v�'4@'�ð(�g�)�H�*��@+�W 7�ư8�*�@��AV>�Gw	�G� ����������������������
����CMTARTARSTWARTWARSTW'2���Mendoza (MZ)PHP1AR<���0�{R@�ɰ��@��p0�}��������@���0���x
���@�Z�����@�;�0�~�����`@�*0�A7���0ȁ�@�M�����M�0ΰ��)5��Cd��=0��l0�2@�柰�C����0��w@��6���5���S0��R@��50��4@�J�$o�#���$��%7�%�v�'!0'�X�)�0)�:�*��0+�W 7�ư8�*�@��0@��Gw	�G� ����������������������
CMTARTARSTWART:���
�Santa Cruz (SC)PHP1AR:���0�{R@�ɰ��@��p0�}��������@���0���x
���@�Z�����@�;�0�~�����`@�*0�A7���0ȁ�@�M�����M�0ΰ��)5��Cd��=0��l0�2@�柰�C����0��w@��6���5���S0��R@��50��4@�J�$o�#���$��%7�%�v�'!0'�X�)�@)�:�*��0+�W 7�ư8�*�Gw	�G� ����������������������
CMTARTARSTWARTc�B��(SA, LP, NQ, RN)PHP1AR=���0�{R@�ɰ��@��p0�}��������@���0���x
���@�Z�����@�;�0�~�����`@�*0�A7���0ȁ�@�M�����M�0ΰ��)5��Cd��=0��l0�2@�柰�C����0��w@��6���5���S0��R@��50��4@�J�$o�#���$��%7�%�v�'!0'͵�(&&@)�0)�:�*��0+�W 7�ư8�*�@���A0@Gw	�G� ����������������������
CMTARTARSTWARTY6��-
San Juan (SJ)PHP1AR=���0�{R@�ɰ��@��p0�}��������@���0���x
���@�Z�����@�;�0�~�����`@�*0�A7���0ȁ�@�M�����M�0ΰ��)5��Cd��=0��l0�2@�柰�C����0��w@��6���5���S0��R@��50��4@�J�$o�#���$��%7�%���'4@'�ð(G�7�ư8�*�@���A0@Gw	�G���G�R�H�v@I�4�J�X@����������������������
����CMTARTARSTWARTWARSTV}��j�
San Luis (SL)PHP1AR>���0�{R@�ɰ��@��p0�}��������@���0���x
���@�Z�����@�;�0�~�����`@�*0�A7���0ȁ�@�M�����M�0ΰ��)5��Cd��=0��l0�2@�柰�C����0��w@��6���5���S0��R@��50��4@�J�$o�#���$��%7�%�v�'!0'�X�)�@)�:�*��0+�W 7�ư8�*�@��0@��@Gw	�G� H���I�a ����������������������
CMTARTARSTWART`h��%=Tucuman (TM)PHP1AR<���0�{R@�ɰ��@��p0�}��������@���0���x
���@�Z�����@�;�0�~�����`@�*0�A7���0ȁ�@�M�����M�0ΰ��)5��Cd��=0��l0�2@�柰�C����0��w@��6���5���S0��R@��50��4@�J�$o�#���$��%7�%�v�'!0'�X�)�0)�:�*��0+�W 7�ư8�*�@�N0@��Gw	�G� ����������������������
CMTARTARSTWART5��p�Tierra del Fuego (TF)PHP1AW�/8���H���H�������LMTANTAST�g���PHP1PY�
���+�@��
�t��ʰ���
x�0�-@Z1�t`�dC�U�@FȰ8@'�0L�	/���@�c0۳���0�8����l@�O0��� p��!a�@"S�#DX@$4;0%A;@&n�'�@'��0(�@)�H�*Ͻ�+�	0,��@-p�.��/O�0n@16h02W.�3��47�4��06�6��7��8�Ͱ9ֶ�:���;��@<��0=q��>��0?Z�@@oz0Aq�@B3��CQ�@D��E1�@E�p�G�G�R�H���I�4�Jڒ�K�;0L���M�0N��O��0Pp�@Qj�RP�@SI��T0�@U)߰V�@W	��W�@X飰Y�h@ZɅ�[���\��0]�f�^��0_yH�`rf0aY*�bRH0c9�d2*0e�fF�g@g�(�h��@i�
�j��@k��l��@m�ΰn��@oz��pj��qc�0rJ��sC�0t*s�u#�0v
U�ws0w�7�x�U0y��z�70{�6@|�S�}�@~�5�r�@���������������AMTPYTPYSTb�u��uPHP1CA������?p�W`ˈ���#�p�a	���������������������CDTCSTCWTCPTESTӺ����DEastern Standard Time - Atikokan, Ontario and Southampton I, NunavutPHP1??�#ˉD��#�p�aP@��U���qP��T@�SP�6@x5PqR�aQ�Q4�A3�1��m�	��	��P
������@
�����@��P��@��Py�@i�PY@I~P9a@)`P"}�	BP_�+" �P��3��2�������� vG@!�ٰ"V)@#j�0$6@%J�0&�@'*�0'�	�)
�0)��*�~0+��,Ӛ�-���.�|�/~��0�^�1g�@2s@�3G�@4S"�5'r@63�7T@8!08�6@9�0:�@;��0<�4�=��0>��?��0@o��A�ŰBO�Cd��D/��ED��E��@G-�0G��@I
�0I��@J�j0K��Lֆ�M|��N�h�O\��P�J�Q<u�Rv,�SW�TV�T�9�V5�V�V@X
0X�8@Y��0Z�@[��0\��@]��0^d�@_��0`M��a���b-�cg��d
��eGu�e�g'W�g͂�i9�i�d�j��k��@l�80mvc@n�0oVE@p��0q6'@ro�0s	@tO�0t�%�v8ܰv��x��x��y���z��{؂�|~��}�d�~^���F���eP��s`��s`��eP��s`��s`���p��s`NSTNWTNPTBSTBDTAHSTHADTHAST�T@��PHP1BR;
��k�I�@���40��t �8�0��0��ܹY �0ޛ� �ݚ0�T3 ��^ ��d0���Q,0��� �
Ұ������0��}�Ɏ0xנ�5� 3Ϡ!�i0"Ƞ#X�#�p %7�%�� '!0'��)�0)�� *�
�+k2�,��0-f� .��0/F� 0�y01M�2W �3j 48T04�� 6 06�h�7�ư8�� 9��0:�,�;��<o�=đ0>N�������������	LMTBRSTBRTu�����BahiaPHP1BB
�y$丅c��������tn�v��TP�_�`0>P�������������LMTBMTADTAST�Qp���PHP1BR
��tt�I�@���40��t �8�0��0��ܹY �0ޛ� �ݚ0�T3 ��^ ��d0���Q,0��� �
Ұ������0��}�Ɏ0xנ�5� 3Ϡ!�i0"Ƞ��Ҍ��������	LMTBRSTBRT��ȭ�
Amapa, E ParaPHP1BZ7�^ٰ��;�EQء�.nX�^��PX�>���2X�'�`��X��`���X���`��جǤ`�v�خ��`�V�ذ�h`�6�زp���شPf�|ض0H�ߙX�*฿{X��ຟ]X��)`�?X��`�_!X���`�?X�x�`�(��X�`���8�`�����!���������ɧ����s�ː�X�U��p�Xb�`��Paq`�7P���P��������	����
LMTCHDTCSTCDT�0�`PHP1CA���`��#Pˈ�`�#�p�`�����������������ADTASTAWTAPT�����M3Atlantic Standard Time - Quebec - Lower North ShorePHP1BR!
���W�N���B@�ނ0�8�@��@��ܹg0�#@ޛ�0�ݨ@�TA0�
��l0��r@�,��Q:@���0�
�����@����ɜ@x��C� 3ݰ!�w@"ְ7��8��09��@9����� �������	LMTAMSTAMT�����RoraimaPHP1CO
�XUt*sP+�]@�����������	BMTCOSTCOT�Y ���PHP1US���H������*������FL ˉ��#�p�a��u��X��W��:��9�����w�q�a�P��@��0ހ��	��	��
�ࡐٿ
�����������yeidYGIF9))("E�	
'��&��	��������̀ v!���"U�#j�$5�%J�&�'*�'�ߐ)
r)��*�T+���,�p�-���.�R�/~g�0�4�1g�2s�3Gf4R��5'H62ڀ7*8�8�9��:��;ۻ<�
�=��>��?�@oΐA���BO��Cd}�D/��ED_�E��G-|GӧI
^I��J�@K���L�\�M|��N�>�O\i�P� �Q<K�Rv�S-�TU�T��V5ƀV�,X�X�Y��Z��[ާ\��]��^d�_�k`MАa���b-��cgi�d
��eGK�e�v�g'-�g�X�i�i�:�j��k�Wl�mv9n��oVp��q5�ro�s�tO�t���v8��v�ݐx��x���y�v�z���{�X�|~��}�:�~^e���������������������������PDTPSTMWTMPTMSTMDT���aX�)Mountain Time - south Idaho & east OregonPHP1??<
���0�{R@�ɰ��@��p0�}��������@���0���x
���@�Z�����@�;�0�~�����`@�*0�A7���0ȁ�@�M�����M�0ΰ��)5��Cd��=0��l0�2@�柰�C����0��w@��6���5���S0��R@��50��4@�J�$o�#���$��%7�%�v�'!0'�X�)�0)�:�*��0+�W 7�ư8�*�Gw	�G� H���I�a �������������������CMTARTARST�T@��PHP1CA		{	%��̀ˉ��#�p�a�/Zp�(��idYGIF9))("E�	
'��&��	��������̀ v!���"U�#j�$5�%J�&�'*�'�ߐ)
r)��*�T+���,�p�-���.�R�/~g�0�4�1g�2s�3Gf4R��5'H62ڀ7*8�8�9���:�P:��;ۻ<�
�=��>��?�@oΐA���BO��Cd}�D/��ED_�E��G-|GӧI
^I��J�@K���L�\�M|��N�>�O\i�P� �Q<K�Rv�S-�TU�T��V5ƀV�,X�X�Y��Z��[ާ\��]��^d�_�k`MАa���b-��cgi�d
��eGK�e�v�g'-�g�X�i�i�:�j��k�Wl�mv9n��oVp��q5�ro�s�tO�t���v8��v�ݐx��x���y�v�z���{�X�|~��}�:�~^e�����������������������������������!zzzMWTMPTMSTMDDTMDTCDTCSTEST���r\BMountain Time - west NunavutPHP1BR�
��z4�W�N���B@�ނ0�8�@��@��ܹg0�#@ޛ�0�ݨ@�TA0�
��l0��r@�,��Q:@���0�
�����@����ɜ@x��C� 3ݰ!�w@"ְ#X�#�~0%8�%��0'!@'��)�@)��0*��+k@�,��@-f�0.��@/F�00��@1[�2W.�3x048b@4��06 -@6�v�7��8��09��@:�:�;�
�<o�=ğ@>N��?�@@.�A�@B�0CQ�@C��0EMa�E�G�@G��0H���I��0Jڒ�K���L�t�M`��N�V�OI�0P�s@Q G�RcU@S)�TC7@T�F0V#@V�(0X�@X�
0Y��@Z��0[��\h�0]��^H�0_���`1̰ak��b��cK��c��0e+c�e�r�g�@g�T�h�b@i�q0j�D@kzS0l�&@mZ50n�@o:0p}$�q�0r]�r��0t<�tٽ0v�v�ٰw���x��0y܎�z���{ū@|b�}��@~K�0�o@�����������	LMTAMSTAMTj��Q�Mato Grosso do SulPHP1MXW���`��`1gg�2r�`3GI�4R�`5'+�5�`62�p78��8�9���:��;���<���=���>�ހ?�p�@o��A��pBO��CdopD/��EDQpFf�G$3pG��IpI�eJ�pK�GL��M�)N���OxP���Qa'�Rl��SA	�TL��U �V,}�ẀX�pXீY�|pZ���[�^p\��]�@p^��_�"p`ira~>�bITc^ �d)6e>�fR�g��g�4�h���i��jݨ�k���l��pm�ڀn��poq��p��pqZ�rfkps:�tFMpu�v/i�v�xK�x�ay�-�z�C{��|�_�}���~�A�����������������������LMTCSTEDTESTCDT���CECentral Time - Quintana RooPHP1VE�,<���HG[�p���D�������CMTVET�Y����PHP1??<���0�{R@�ɰ��@��p0�}��������@���0���x
���@�Z�����@�;�0�~�����`@�*0�A7���0ȁ�@�M�����M�0ΰ��)5��Cd��=0��l0�2@�柰�C����0��w@��6���5���S0��R@��50��4@�J�$o�#���$��%7�%�v�'!0'�X�)�@)�:�*��0+�W 7�ư8�*�@��0@��Gw	�G� ����������������������
CMTARTARSTWART�T@��PHP1GF��+���5������������LMTGFT��U���PHP1KY���������KMTEST��P�z"PHP1US���,����p������p��t����EҀ�c��S���p�3�������ޕ����w��a��Y�C�~;�_��gXp�|A��G:p�\#��'p�<���p�瀹��p����p�������������Z���<p„��O���dn�/f��M���H��-l��ep�
N���Gpˈ���#�p�a	��u��@���U�� ���5�������������s��ޗ�ݩ�p޾y�߉rp�[��iTp�~=��I6p�^��W<��G<�7��'������������������p����p�€��p�o���_�p�O���?ip�/h��(��J��g�g��I��I��+�+��
��
���w�qpa�P�p@�0�p�'�	�p	��
�p�ٰ�
�u�������t��tyV�iVY8�I89�)"7p�p���p����p�܀��p v!��p"U�#j��$5�%J��&�'*��'�р)
c�)޳�*�E�+���,�bp-�w�.�Dp/~Y�0�&p1gv2sp3GX4R�p5':62�p78��8�9���:��;۬�<���=���>�ހ?�p�@o��A��pBO��CdopD/��EDQpE�G-m�GәI
O�I�{J�1�K���L�NpM|y�N�0pO\[�P�pQ<=�Ru�pS�TU�pT��V5�pV�X��X�Y���Z��[ޘ�\��]�z�^d�_�\�`M€a�ypb-��cg[pd
��eG=pe�h�g'pg�J�ipi�,�j��pk�Il��mv+n���oV
p���q5�ro��s�tO��t��v8�pv�πx�px���y�hpz���{�Jp|~u�}�,p~^W��p��������������������CDTCSTESTCWTCPT�/���8Central TimePHP1MXZ���p��n�fV`�C�`�6`����1gv2sp3GX4R�p5'H62ڀ7*8�8�9��:��;��<�
�=��>��?�@oΐA���BO��Cd}�D/��ED_�Ft�G$A�G��I#�I�sJ��K�UL�"M�7N�OxP��Qa5�Rl�SA�TL�U ��V,�WېX��XཐY���Z���[�l�\��]�N�^��_�0�`i�a~MbIbc^/d)De>f`�g�g�B�h��i�$�jݷk��l�Ӏm��n���oqʐp���qZ�rfy�s:�tF[�u�v/xv��xZx�oy�<z�Q{�|�m�}�~�O�����������������������LMTMSTCSTCDTMDT�%pɲ5Mexican Mountain Time - Chihuahua away from US borderPHP1??������?p�W`ˈ���#�p�a	���������������������CDTCSTCWTCPTEST�T@��PHP1??<���0�{R@�ɰ��@��p0�}��������@���0���x
���@�Z�����@�;�0�~�����`@�*0�A7���0ȁ�@�M�����M�0ΰ��)5��Cd��=0��l0�2@�柰�C����0��w@��6���5���S0��R@��50��4@�J�$o�#���$��%7�%�v�'!0'�X�)�@)�:�*��0+�W 7�ư8�*�Gw	�G� H���I�a ����������������������
CMTARTARSTWART�T@��PHP1CR	
��T6I`�nP+`�PP'��`(n��)w�`)������,��������	SJMTCDTCST�|u�[rPHP1BR~
��{��W�N���B@�ނ0�8�@��@��ܹg0�#@ޛ�0�ݨ@�TA0�
��l0��r@�,��Q:@���0�
�����@����ɜ@x��C� 3ݰ!�w@"ְ#X�#�~0%8�%��0'!@'��)�@)��0*��+k@�,��@-f�0.��@/F�00��@1[�2W.�3x048b@4��06 -@6�v�7��8��09��@:�:�;�
�<o�=ğ@>N��A�@B�0CQ�@C��0EMa�E�G�@G��0H���I��0Jڒ�K���L�t�M`��N�V�OI�0P�s@Q G�RcU@S)�TC7@T�F0V#@V�(0X�@X�
0Y��@Z��0[��\h�0]��^H�0_���`1̰ak��b��cK��c��0e+c�e�r�g�@g�T�h�b@i�q0j�D@kzS0l�&@mZ50n�@o:0p}$�q�0r]�r��0t<�tٽ0v�v�ٰw���x��0y܎�z���{ū@|b�}��@~K�0�o@���l�������	LMTAMSTAMTq���Mato GrossoPHP1AN�. ���H���`�������LMTANTAST��]�_`PHP1GL"��IM|P3��#�ܐ͐�㯐Ӡ�Ñ���������|� lr!\c"LT#<E$,6%'&'C�'�4�(�%�)��*��+���,��-�ڐ.�ː/t��0d��0�N0�������������������
LMTWGTWGSTGMT�w:�,�!east coast, north of ScoresbysundPHP1CA~��˰��#������Ҁˉ(��#�p�a4 �/v��(�0�ir YUIT 97)6 "S�	 5��4������������ې v+ !���"V
 #j�$5� %J�&� '*�'��)
�)�Ϡ*�b+���,�~�-���.�`�/~u�0�B�1g� 2s$�3Gt 4S�5'V 62�78 88� 9��:� ;��<��=��>���?��@oܠA���BO��Cd��D/��EDm�E�� G-�Gӵ I
lI�� J�NK���L�j�M|��N�L�O\w�P�.�Q<Y�Rv�S;�TU�T��V5ԐV�: X�X� Y��Z�� [޵\�� ]��^d� _�y`Mޠa���b-��cgw�d
��eGY�e턠g';�g�f�i�i�H�j�k�e l�mvG n��oV) p��q6 ro�s� tO�t�	�v8��v��x��x�͠y���z���{�f�|~��}�H�~^s��*��������p��������������������YDTYSTYWTYPTYDDTPSTPDT�J=��Pacific Time - north YukonPHP1CA9������[�ˉ��#�p�a&�U� � ��5� ���� ���Ѡ���޳�ݩ��޾��߉���w��ip��~Y��IR��^;��)4��GX �Q�': ��3� ���� ���� �����q��ޠ����o���_���O���?���/���(��f������ ��f��e ��H��G ��*�) �x q(�a'����������������������PDTPSTPWTPPTMST䆚[2ZIMountain Standard Time - Dawson Creek & Fort Saint John, British ColumbiaPHP1US���:���������逢e�����E����ˉ��#�p�a�/v��(��X��v��u��X��W��:��9�����w�q�a�P��@��0ހ�5�	��	��
�ࡐٿ
�����������yeidYGIF9))("E�	
'��&��	��������̀ v!���"U�#j�$5�%J�&�'*�'�ߐ)
r)��*�T+���,�p�-���.�R�/~g�0�4�1g�2s�3Gf4R��5'H62ڀ7*8�8�9��:��;ۻ<�
�=��>��?�@oΐA���BO��Cd}�D/��ED_�E��G-|GӧI
^I��J�@K���L�\�M|��N�>�O\i�P� �Q<K�Rv�S-�TU�T��V5ƀV�,X�X�Y��Z��[ާ\��]��^d�_�k`MАa���b-��cgi�d
��eGK�e�v�g'-�g�X�i�i�:�j��k�Wl�mv9n��oVp��q5�ro�s�tO�t���v8��v�ݐx��x���y�v�z���{�X�|~��}�:�~^e�������������������MDTMSTMWTMPT�\rw
Mountain TimePHP1US���"[�<�ˈ�p�#�p�`���5�����3�p��;�@�p0�`�p	�`
�p
�`�p٢�
�gp�������f��e�yH�iG�Y*�I)�9�)�")`��`�
p��`��p��`��p��` v�!��`"U��#j��$5��%J��&��'*s�'��p)
U�)ޥp*�7�+��p,�T`-�ip.�6`/~Kp0�`1gg�2r�`3GI�4R�`5'+�62�`7
�8��8���9���:���;۞�<��p=���>��p?�b�@o�pA�`BO�pCda`D/vpEDC`E��G-_�Gӊ�I
A�I�l�J�#�K��pL�@`M|kpN�"`O\MpP�`Q</pRu�`SpTU�`T��pV5�`V��X��X���Y���Z���[ފ�\���]�l�^d��_�N�`M�pa�k`b-�pcgM`d
xpeG/`e�Zpg'`g�<pi�`i�pj��`k�:�l���mv�n���oU��p���q5��ro��s��tOy�t��pv8�`v�pxx`x��py�Z`z��p{�<`|~gp}�`~^Ip�`���%�����������������LMTCSTESTEWTEPTEDT�����(Eastern Time - Michigan - most locationsPHP1DM��4L���p���LMTAST����� PHP1CA���������M������҅���萣��jʐ�5À�S�����3����ˉ��#�p�a�U�� ���u��X��9��a�P��@��0ހ ݐ	��
��
�ࡐٿ
�����������yeidYGIF9))("E�	
'��&��	��������̀ v!���"U�#j�$5�%J�&�'*�'�ߐ)
r)��*�T+���,�p�-���.�R�/~g�0�4�1g�2s�3Gf4R��5'H62ڀ7*8�8�9��:��;ۻ<�
�=��>��?�@oΐA���BO��Cd}�D/��ED_�E��G-|GӧI
^I��J�@K���L�\�M|��N�>�O\i�P� �Q<K�Rv�S-�TU�T��V5ƀV�,X�X�Y��Z��[ާ\��]��^d�_�k`MАa���b-��cgi�d
��eGK�e�v�g'-�g�X�i�i�:�j��k�Wl�mv9n��oVp��q5�ro�s�tO�t���v8��v�ݐx��x���y�v�z���{�X�|~��}�:�~^e�����������������������LMTMDTMSTMWTMPT�
8e��BMountain Time - Alberta, east British Columbia & west SaskatchewanPHP1BR �����f��\���PP�ސ@�8�P��P���ܹu@�1Pޛ�@�ݶP�TO@��z@���P�:��QHP���@�
������"P����ɪPx��Q� 3�!��P"�,��P-f�@H`P�����������	���
LMTACSTACTAMT(��
W AmazonasPHP1SV�զ  ���!\�P"z��#<}P���`��������LMTCDTCST�;����PHP1??������yOp��|�fdp��
���ꍀ�#�pҙ�p�Yؑ���~Y��IR��^;��)4��GX �Q�': ��3� ���� ���� ��௠��
������� ���� ysir YUIT 97)6 "S�	 5��4������������ې v+ !���"V
 #j�$5� %J�&� '*�'��)
�)�Ϡ*�b+���,�~�-���.�`�/~u�0�B�1g� 2s$�3Gt 4S�5'V 62�78 88� 9��:� ;��<��=��>���?��@oܠA���BO��Cd��D/��EDm�F��G$O�G�� I1�I؁ J��K���L�j�M|��N�L�O\w�P�.�Q<Y�Rv�S;�TU�T��V5ԐV�: X�X� Y��Z�� [޵\�� ]��^d� _�y`Mޠa���b-��cgw�d
��eGY�e턠g';�g�f�i�i�H�j�k�e l�mvG n��oV) p��q6 ro�s� tO�t�	�v8��v��x��x�͠y���z���{�f�|~��}�H�~^s��*����L��������������������LMTMSTPSTPDTPWTPPT�T@��PHP1BR'
��k�I�@���40��t �8�0��0��ܹY �0ޛ� �ݚ0�T3 ��^ ��d0���Q,0��� �
Ұ������0��}�Ɏ0xנ�5� 3Ϡ!�i0"Ƞ#X�#�p %7�%�� 7�ư8�� 9��09�J ;��<o�������������	LMTBRSTBRT��m��pNE Brazil (MA, PI, CE, RN, PB)PHP1??b��,����p������p�W"���Gpˈ���#�p�a	��u��@���U�� ���5�������������s��ޗ�ݩ�p޾y�߉rp�[��iTp�~=��I6p�^���������������D/vpEDC`E��G-_�Gӊ�I
A�I�l�J�#�K��pL�@`M|kpN�"`O\MpP�`Q</pRu�`SpTU�`T��pV5�`V��X��X���Y���Z���[ފ�\���]�l�^d��_�N�`M�pa�k`b-�pcgM`d
xpeG/`e�Zpg'`g�<pi�`i�pj��`k�:�l���mv�n���oU��p���q5��ro��s��tOy�t��pv8�`v�pxx`x��py�Z`z��p{�<`|~gp}�`~^Ip�`�����������������������CDTCSTCWTCPTESTEDT�T@��PHP1CA���4���`��#Pˈ�`�#�p�`���?`�i8P`�`P�P@�`0�P �`	�P
�`
�xP�w`ٔ�
�Y`�v��u��X��W�y:�i9�Y�I�8��(��"P���P�`��P��`��P��`��P u��!��P"U��#j��$5��%J��&��'*e�'��`)
G�)ޗ`*�)�+�y`,�FP-�[`.�(P/~=`0�
P1gY�2r�P3G;�4R�P5'�62�P7��8��8���9���:���;ې�<��`=�r�>��`?�T�@o�`A�qPBO�`CdSPD/h`ED5PE��G-Q�G�|�I
3�I�^�J��K�{`L�2PM|]`N�PO\?`P��PQ<!`Ru�PS`TU�PT��`V5�PV��X��X���Y���Z���[�|�\���]�^�^d��_�@�`M�`a�]Pb-�`cg?Pd
j`eG!Pe�L`g'Pg�.`i�Pi�`j��Pk�,�l���mv�n���oU��p���q5��ro��s��tOk�t��`v8�Pv޳`xjPx��`y�LPz�w`{�.P|~Y`}�P~^;`��P�������������������LMTADTASTAWTAPT���.�GAtlantic Time - Nova Scotia - places that did not observe DST 1966-1971PHP1GLu
��hM|P3��#�ܐ͐�㯐Ӡ�Ñ���������|� lr!\c"LT#<E$,6%'&'C�'�4�(�%�)��*��+���,��-�ڐ.�ː/t��0d��1]�2r�3=�4R�5�62x6�8��8�a9�v�:�C;�X�<�_�=�:�>�A�?��@f#�A�9BF�CdD%�EC�FɐG#�G��I�I��J�K��L̿�M��N���OnnP���QW��Rle�S7l�TLG�UN�V,)�V�0�XFX��Y�(Z��[�
\�]��^�_��`_�a}�b?�c]̐d�e=��f��g��g藐h�r�i�y�j�T�k�[�l�qm�=�n�Soh�p�5qQ<rfs1tE�uv/�v��x��x��y�ِz��{λ�|�}���~y������π����������������LMTWGTWGST�C�ø*most locationsPHP1CA		�	��~���|��Ml��18�y�˜8�YѨ�w�8�9���a�����@���(� ո��(����#�p�`��ӈD��JH�h&��)�H�H��	�H�'����H�X������tXݩmH޾VX߉OH�8X�i1H�~X�IH�]�X�(�H�G����&����������������챷��Ơ�HﯽX�H�X��H�o�X�_dH�OcX�?FH�/EX�(b��kX�.`�K��J��-��,�������������w��p�P`�`P�P@�`0�P �`	�P
�`
�xP�w`ٔ�
�Y`�v��u��X��W�y:�i9�Y�I�8��(��"P���P�`��P��`��P��`��P u�!�il"U��#jw�$5��%Jg�&|�'*I�'��|)
+�)�{|*�
�+�]|,�*l-�?|.�l/~!|0��l1g=�2r�l3G�4R�l5'�62�l7�8��8��9���:Ƨ�;�t�<��|=�V�>��|?�8�@o�|A�UlBOj|Cd7lD/L|EDlE�~�G-5�G�`�I
�I�B�J��K�_|L�lM|A|N��lO\#|P��lQ<|Ru�lS�|TU�lT��|V5�lV��X��X��Y�~�Z���[�`�\���]�B�^dm�_�$�`M�|a�Alb-l|cg#ld
N|eGle�0|g&�lg�|i�li��|j�lk��l���mu�n���oU�p���q5��rom�s��tOO�t��|v8llvޗ|xNlx�y|y�0lz�[|{�l|~=|}��l~^|��l��Δ��ܤ���������������������������NSTNDTNPTNWTADTASTADDTڵ��x=)Atlantic Time - Labrador - most locationsPHP1TCw���e�yH�iG�Y*�I)�9�)�")`��`�
p��`��p��`��p��` v�!��`"U��#j��$5��%J��&��'*s�'��p)
U�)ޥp*�7�+��p,�T`-�ip.�6`/~Kp0�`1gg�2r�`3GI�4R�`5'+�62�`7
�8��8���9���:���;۞�<��p=���>��p?�b�@o�pA�`BO�pCda`D/vpEDC`E��G-_�Gӊ�I
A�I�l�J�#�K��pL�@`M|kpN�"`O\MpP�`Q</pRu�`SpTU�`T��pV5�`V��X��X���Y���Z���[ފ�\���]�l�^d��_�N�`M�pa�k`b-�pcgM`d
xpeG/`e�Zpg'`g�<pi�`i�pj��`k�:�l���mv�n���oU��p���q5��ro��s��tOy�t��pv8�`v�pxx`x��py�Z`z��p{�<`|~gp}�`~^Ip�`����������KMTEDTEST���
PHP1GD��4d������LMTAST��H�ohPHP1GP������P���LMTAST�e��
PHP1GT	����U�`͖�,x`��P'���(�\�DTR`EKP���$��������LMTCDTCST��e��mPHP1EC��B���h����QMTECT���ךmainlandPHP1GY
��y��9>�
}�<'�0���x���D���D	����	���	LMTGBGTGYT�����%PHP1CA��񫠚����0���`��#P��@�0�0�zV@�0�S����R��<�@��4���@��:0���@���0���@���0��E@�U0���@�Kp���~@�$�0�n`@����NB@���$������0�]@��1���@���0���^G0�@�P�0�mp@�0�0�r<@�b0�6n��~��P���`�ˈ�`�#�p�`���u���@���U��� ���5������|���u���{`ݩtP޾]`߉VP�?`�i8P�~!`�IP�G����'���������������챾��`��P�o�`�_kP�Oj`�?MP�/L`�(i�.`�K��J��-��,�������������w��p�P`�`P�P@�`0�P �`	�P
�`
�xP�w`ٔ�
�Y`�v��u��X��W�y:�i9�Y�I�8��(��"P���P�`��P��`��P��`��P u��!��P"U��#j��$5��%J��&��'*e�'��`)
G�)ޗ`*�)�+�y`,�FP-�[`.�(P/~=`0�
P1gY�2r�P3G;�4R�P5'�62�P7��8��8���9���:���;ې�<��`=�r�>��`?�T�@o�`A�qPBO�`CdSPD/h`ED5PE��G-Q�G�|�I
3�I�^�J��K�{`L�2PM|]`N�PO\?`P��PQ<!`Ru�PS`TU�PT��`V5�PV��X��X���Y���Z���[�|�\���]�^�^d��_�@�`M�`a�]Pb-�`cg?Pd
j`eG!Pe�L`g'Pg�.`i�Pi�`j��Pk�,�l���mv�n���oU��p���q5��ro��s��tOk�t��`v8�Pv޳`xjPx��`y�LPz�w`{�.P|~Y`}�P~^;`��P���`���������������LMTADTASTAWTAPT�u����.Atlantic Time - Nova Scotia (most places), PEIPHP1CU��b€�ӔP�t]@�[f���Q@�;H�ʼm��$eP̜O���P�;��ӣ�P���`��}@�=D��S���;���@�ũ��h@����������w��p�@`�P5�@�PH@ �P�{�
�P
�j@�iPن�
�KP�h���P}�@Q��f��1��F��[��&{�;d�]�F��?��(��\@�
��>@zSP� @ Z5P!o@"CQ�#N�@$#3�%.�@&��'�'��P(���)މP*״�+�kP,���-�MP.�x�/~/P0wZ�1gK�2W<�3G-�4@YP5�P62�P6��P8��8���9���:Ƶ�;ې�<��P=�r�>��P?�T�@o�PED5PE��G$PGܩPI�PI�P�J��PK�mPL��M|OPN���O\1PP���Q<PRl��S�PTL�T��PV,a�V���X~PX���Y�`PZ���[�BP\���]�$P^d{�_�P`M�Pa~"�b-zPc^�d
\Pe=��e�>Pg��g� Ph���i�Pj݌�k��lƩPmv�n��PoU��p�mPq5��rfOPs��tF1Pt��Pv/M�vޥPx/�x��Py��z�iP{���|~KP}���~^-P���������������������HMTCDTCST�����PHP1MX���p��n�fV`�C�`�6`������q`ؑ��p�1g�2s�3Gf4R��5'H62ڀ��������������������LMTMSTCSTPSTMDT��jiV%Mountain Standard Time - SonoraPHP1USb��,����p������p�W"���Gpˈ���#�p�a	��u��@���U�� ���5�������������s��ޗ�ݩ�p޾y�߉rp�[��iTp�~=��I6p�^���������������D/vpEDC`E��G-_�Gӊ�I
A�I�l�J�#�K��pL�@`M|kpN�"`O\MpP�`Q</pRu�`SpTU�`T��pV5�`V��X��X���Y���Z���[ފ�\���]�l�^d��_�N�`M�pa�k`b-�pcgM`d
xpeG/`e�Zpg'`g�<pi�`i�pj��`k�:�l���mv�n���oU��p���q5��ro��s��tOy�t��pv8�`v�pxx`x��py�Z`z��p{�<`|~gp}�`~^Ip�`�����������������������CDTCSTCWTCPTESTEDT���1'Eastern Time - Indiana - most locationsPHP1US���,����p������pˈ���#�p�a	��U�� ���5�������������s��ޗ�ݩ�p޾y�߉rp�[��iTp�~=��I6p�^��W<��G<�7��'�������������������p����p�€�_�p��g��I��I��+�+��
��
���w�qpa�P�p@�0�p�'�	�p	��
�p�ٰ�
�u�������t��tyV�iVY8�I89�)"7p�p���p����p�܀��p v!��p"U�#j��$5�%J��&�'*��'�р)
c�D/vpEDQpE�G-m�GәI
O�I�{J�1�K���L�NpM|y�N�0pO\[�P�pQ<=�Ru�pS�TU�pT��V5�pV�X��X�Y���Z��[ޘ�\��]�z�^d�_�\�`M€a�ypb-��cg[pd
��eG=pe�h�g'pg�J�ipi�,�j��pk�Il��mv+n���oV
p���q5�ro��s�tO��t��v8�pv�πx�px���y�hpz���{�Jp|~u�}�,p~^W��p��������������������CDTCSTCWTCPTEST�Wo�z�&Central Time - Indiana - Starke CountyPHP1USf��,����p������pˈ���#�p�a	��ޗ�ݩ�p�~=��I6p�^��)p�G<�4��'����������������������������w��p�``�pP�`@�p0�`�p	�p	���
�`D/vpEDC`E��G-_�Gӊ�I
A�I�l�J�#�K��pL�@`M|kpN�"`O\MpP�`Q</pRu�`SpTU�`T��pV5�`V��X��X���Y���Z���[ފ�\���]�l�^d��_�N�`M�pa�k`b-�pcgM`d
xpeG/`e�Zpg'`g�<pi�`i�pj��`k�:�l���mv�n���oU��p���q5��ro��s��tOy�t��pv8�`v�pxx`x��py�Z`z��p{�<`|~gp}�`~^Ip�`�����������������������CDTCSTCWTCPTESTEDT����(Eastern Time - Indiana - Crawford CountyPHP1USs��,����p������pˈ���#�p�a	��g=��)p�G<�4��'���������������������p�€��p�o���_�p�O���?ip�/h��g�g��I��I��+�+��
��
���w�qpa�P�p@�0�p�'�	�p	��
�p�ٰ�
�u����D/vpEDQpE�G-m�Gӊ�I
A�I�l�J�#�K��pL�@`M|kpN�"`O\MpP�`Q</pRu�`SpTU�`T��pV5�`V��X��X���Y���Z���[ފ�\���]�l�^d��_�N�`M�pa�k`b-�pcgM`d
xpeG/`e�Zpg'`g�<pi�`i�pj��`k�:�l���mv�n���oU��p���q5��ro��s��tOy�t��pv8�`v�pxx`x��py�Z`z��p{�<`|~gp}�`~^Ip�`�����������������������CDTCSTCWTCPTESTEDT�*�{J$Eastern Time - Indiana - Pike CountyPHP1??b��,����p������p�W"���Gpˈ���#�p�a	��u��@���U�� ���5�������������s��ޗ�ݩ�p޾y�߉rp�[��iTp�~=��I6p�^���������������D/vpEDC`E��G-_�Gӊ�I
A�I�l�J�#�K��pL�@`M|kpN�"`O\MpP�`Q</pRu�`SpTU�`T��pV5�`V��X��X���Y���Z���[ފ�\���]�l�^d��_�N�`M�pa�k`b-�pcgM`d
xpeG/`e�Zpg'`g�<pi�`i�pj��`k�:�l���mv�n���oU��p���q5��ro��s��tOy�t��pv8�`v�pxx`x��py�Z`z��p{�<`|~gp}�`~^Ip�`�����������������������CDTCSTCWTCPTESTEDT�T@��PHP1USd��,����p������pˈ���#�p�a	��u��@���[��iTp�~=��I6p�g=��)p�G<�4��'������������������p���q���€��p�o���_�p�O������������D/vpEDQpE�G-m�GәI
O�I�{J�1�K���L�NpM|y�N�0pO\[�P�pQ<=�Ru�pS�TU�pT��V5�pV�X��X�Y���Z��[ޘ�\��]�z�^d�_�\�`M€a�ypb-��cg[pd
��eG=pe�h�g'pg�J�ipi�,�j��pk�Il��mv+n���oV
p���q5�ro��s�tO��t��v8�pv�πx�px���y�hpz���{�Jp|~u�}�,p~^W��p�����������������������CDTCSTCWTCPTESTEDT�=��EU%Central Time - Indiana - Perry CountyPHP1USP��,����p������pˈ���#�p�a	��~=�����������w��p�``�pP�`D/vpEDC`E��G-_�Gӊ�I
A�I�l�J�#�K��pL�@`M|kpN�"`O\MpP�`Q</pRu�`SpTU�`T��pV5�`V��X��X���Y���Z���[ފ�\���]�l�^d��_�N�`M�pa�k`b-�pcgM`d
xpeG/`e�Zpg'`g�<pi�`i�pj��`k�:�l���mv�n���oU��p���q5��ro��s��tOy�t��pv8�`v�pxx`x��py�Z`z��p{�<`|~gp}�`~^Ip�`�����������������������CDTCSTCWTCPTESTEDT�t��+Eastern Time - Indiana - Switzerland CountyPHP1USd��,����p������pˈ���#�p�a	��u��@���[��iTp�~=��I6p�g=��)p�G<�4��'������������������p���q���€��p�o���_�p�O������������D/vpEDQpE�G-m�Gӊ�I
A�I�l�J�#�K��pL�@`M|kpN�"`O\MpP�`Q</pRu�`SpTU�`T��pV5�`V��X��X���Y���Z���[ފ�\���]�l�^d��_�N�`M�pa�k`b-�pcgM`d
xpeG/`e�Zpg'`g�<pi�`i�pj��`k�:�l���mv�n���oU��p���q5��ro��s��tOy�t��pv8�`v�pxx`x��py�Z`z��p{�<`|~gp}�`~^Ip�`�����������������������CDTCSTCWTCPTESTEDT�X���@Eastern Time - Indiana - Daviess, Dubois, Knox & Martin CountiesPHP1USj��,����p������pˈ���#�p�a	��u��@���U�� ���5�������������s��ޗ�ݩ�p޾y�߉rp�[��iTp�~=��I6p�^��W<��G<�7��'����������������������������D/vpEDQpE�G-_�Gӊ�I
A�I�l�J�#�K��pL�@`M|kpN�"`O\MpP�`Q</pRu�`SpTU�`T��pV5�`V��X��X���Y���Z���[ފ�\���]�l�^d��_�N�`M�pa�k`b-�pcgM`d
xpeG/`e�Zpg'`g�<pi�`i�pj��`k�:�l���mv�n���oU��p���q5��ro��s��tOy�t��pv8�`v�pxx`x��py�Z`z��p{�<`|~gp}�`~^Ip�`�����������������������CDTCSTCWTCPTESTEDT����.'Eastern Time - Indiana - Pulaski CountyPHP1CAx�N��/h��(��� idYGIF9))("E�	
'��&��	��������̀ v!���"U�#j�$5�%J�&�'*�'�ߐ)
r)��*�T+���,�p�-���.�R�/~g�0�4�1g�2s�3Gf4R��5'H62ڀ7*8�8�9��:��;ۻ<�
�=��>��?�@oΐA���BO��Cd}�D/��ED_�E��G-|GӧI
^I��J�@K���L�\�M|��N�>�O\i�P� �Q<K�Rv�S-�TU�T��V5ƀV�,X�X�Y��Z��[ާ\��]��^d�_�k`MАa���b-��cgi�d
��eGK�e�v�g'-�g�X�i�i�:�j��k�Wl�mv9n��oVp��q5�ro�s�tO�t���v8��v�ݐx��x���y�v�z���{�X�|~��}�:�~^e�����������	����
����zzzPDDTPSTMSTMDT�\F�m*Mountain Time - west Northwest TerritoriesPHP1CAy!�l���#�p�`��/>P�(i�iG�Y*�I)�9�)�")`��`�
p��`��p��`��p��` v�!��`"U��#j��$5��%J��&��'*s�'��p)
U�)ޥp*�7�+��p,�T`-�ip.�6`/~Kp0�`1gg�2r�`3GI�4R�`5'+�62�`7
�8��8�9���:���;۞�<��p=���>��p?�b�@o�pA�`BO�pCda`D/vpEDC`E��G-_�Gӊ�I
A�I�l�J�#�K��pL�@`M|kpN�"`O\MpP�`Q</pRu�`SpTU�`T��pV5�`V��X��X���Y���Z���[ފ�\���]�l�^d��_�N�`M�pa�k`b-�pcgM`d
xpeG/`e�Zpg'`g�<pi�`i�pj��`k�:�l���mv�n���oU��p���q5��ro��s��tOy�t��pv8�`v�pxx`x��py�Z`z��p{�<`|~gp}�`~^Ip�`�������������������������zzzEPTESTEDDTEDTEWTCSTCDT��/�,Eastern Time - east Nunavut - most locationsPHP1JM�� �p	�`	���
�`�p٢�
�gp�������f��e�yH�iG�Y*�I)�9�)�")`��`����������KMTESTEDT�ˀ�x�PHP1??:���0�{R@�ɰ��@��p0�}��������@���0���x
���@�Z�����@�;�0�~�����`@�*0�A7���0ȁ�@�M�����M�0ΰ��)5��Cd��=0��l0�2@�柰�C����0��w@��6���5���S0��R@��50��4@�J�$o�#���$��%7�%�v�'*W�'�۰(�@)�:�*��0+�W 7�ư8�*�Gw	�G� ����������������������
����CMTARTARSTWARTWARST�T@��PHP1US�"ˉ��#�p�a&��G ��*�) �x q(�a'�Q
�A	�0��C�	ΐ	�� 
�௠��
������� ���� ysir YUIT 97)6 "S�	 5�+�B��%��$������� v90!�ˠ"V0#j� $5�0%J� &�0'*� '���)
� )�ݰ*�p +���,ӌ�-���.�n�/~��0�P�1g�02s2�3G�04S�5'd062��7F08 8�(09�� :�
0;�� <�&�=�� >��?�� @o�A���BO̰Cd��D/��ED{�E��0G-� G��0I
z I��0J�\ K���L�x�M|��N�Z�O\��P�<�Q<g�Rv�SI�TV�T�+�V5�V�H0X� X�*0Y�� Z�0[�� \��0]�� ^d�0_�� `M�a���b-ΰcg��d
��eGg�e풰g'I�g�t�i+�i�V�j�
�k�s0l�* mvU0n� oV70p�� q60ro� s�0tO� t��v8Πv��x��x�۰y���z���{�t�|~��}�V�~^���8��������������������p�����������pPSTPWTPPTPDTYSTYDTAKDTAKST�JrE��Alaska Time - Alaska panhandlePHP1US���,����p������p�s��p�
N���Gpˈ���#�p�a	��ۗ`Ӥ	p�U��s��ޗ�ݩ�p޾y�߉rp�[��iTp�~=��I6p�^��)p�G<�7��'������������������p����p��:�����������w��p�``�pP�`@�p0�`�p	�p	���
�`�p٢�
�gp�������f��e�yH�iG�Y*�I)�9�)�")`��`�
p��`��p��`��p��` v�!��`"U��#j��$5��%J��&��'*s�'��p)
U�)ޥp*�7�+��p,�T`-�ip.�6`/~Kp0�`1gg�2r�`3GI�4R�`5'+�62�`7
�8��8���9���:���;۞�<��p=���>��p?�b�@o�pA�`BO�pCda`D/vpEDC`E��G-_�Gӊ�I
A�I�l�J�#�K��pL�@`M|kpN�"`O\MpP�`Q</pRu�`SpTU�`T��pV5�`V��X��X���Y���Z���[ފ�\���]�l�^d��_�N�`M�pa�k`b-�pcgM`d
xpeG/`e�Zpg'`g�<pi�`i�pj��`k�:�l���mv�n���oU��p���q5��ro��s��tOy�t��pv8�`v�pxx`x��py�Z`z��p{�<`|~gp}�`~^Ip�`�����������������������CDTCSTCWTCPTESTEDTóH�̷)Eastern Time - Kentucky - Louisville areaPHP1US���,����p������pˈ���#�p�a	��I��+�+��
��
���w�qpa�P�p@�0�p�'�	�p	��
�p�ٰ�
�u�������t��tyV�iVY8�I89�)"7p�p���p����p�܀��p v!��p"U�#j��$5�%J��&�'*��'�р)
c�)޳�*�E�+���,�bp-�w�.�Dp/~Y�0�&p1gv2sp3GX4R�p5':62�p78��8�9���:���;۞�<��p=���>��p?�b�@o�pA�`BO�pCda`D/vpEDC`E��G-_�Gӊ�I
A�I�l�J�#�K��pL�@`M|kpN�"`O\MpP�`Q</pRu�`SpTU�`T��pV5�`V��X��X���Y���Z���[ފ�\���]�l�^d��_�N�`M�pa�k`b-�pcgM`d
xpeG/`e�Zpg'`g�<pi�`i�pj��`k�:�l���mv�n���oU��p���q5��ro��s��tOy�t��pv8�`v�pxx`x��py�Z`z��p{�<`|~gp}�`~^Ip�`�����������������������CDTCSTCWTCPTEDTEST����0K&Eastern Time - Kentucky - Wayne CountyPHP1??���,����p������pˈ���#�p�a	��U�� ���5�������������s��ޗ�ݩ�p޾y�߉rp�[��iTp�~=��I6p�^��W<��G<�7��'�������������������p����p�€�_�p��g��I��I��+�+��
��
���w�qpa�P�p@�0�p�'�	�p	��
�p�ٰ�
�u�������t��tyV�iVY8�I89�)"7p�p���p����p�܀��p v!��p"U�#j��$5�%J��&�'*��'�р)
c�D/vpEDQpE�G-m�GәI
O�I�{J�1�K���L�NpM|y�N�0pO\[�P�pQ<=�Ru�pS�TU�pT��V5�pV�X��X�Y���Z��[ޘ�\��]�z�^d�_�\�`M€a�ypb-��cg[pd
��eG=pe�h�g'pg�J�ipi�,�j��pk�Il��mv+n���oV
p���q5�ro��s�tO��t��v8�pv�πx�px���y�hpz���{�Jp|~u�}�,p~^W��p��������������������CDTCSTCWTCPTEST�T@��PHP1BO
������������,���	CMTBOSTBOTp&���hPHP1PE
�t@���JP�E�@�/J��-��,����P�]@��� p��%���&|�-%P-��@�����������	LMTPESTPETv�8��PHP1US���H������*�����ˉ��#�p�a&�t ؀���Ѡ���޳�ݩ��޾��߉���w��ip��~Y��IR��^;��)4��GX �Q�': ��3� ���� ���� �����q��ޠ����o���_���O���?���/���(��f������ ��f��e ��H��G ��*�) �x q(�a'�Q
�A	�0��C�	ΐ	�� 
�௠��
������� ���� ysir YUIT 97)6 "S�	 5��4������������ې v+ !���"V
 #j�$5� %J�&� '*�'��)
�)�Ϡ*�b+���,�~�-���.�`�/~u�0�B�1g� 2s$�3Gt 4S�5'V 62�78 88� 9��:� ;��<��=��>���?��@oܠA���BO��Cd��D/��EDm�E�� G-�Gӵ I
lI�� J�NK���L�j�M|��N�L�O\w�P�.�Q<Y�Rv�S;�TU�T��V5ԐV�: X�X� Y��Z�� [޵\�� ]��^d� _�y`Mޠa���b-��cgw�d
��eGY�e턠g';�g�f�i�i�H�j�k�e l�mvG n��oV) p��q6 ro�s� tO�t�	�v8��v��x��x�͠y���z���{�f�|~��}�H�~^s��*�����������������PDTPSTPWTPPT�I�^;�Pacific TimePHP1??���,����p������p�s��p�
N���Gpˈ���#�p�a	��ۗ`Ӥ	p�U��s��ޗ�ݩ�p޾y�߉rp�[��iTp�~=��I6p�^��)p�G<�7��'������������������p����p��:�����������w��p�``�pP�`@�p0�`�p	�p	���
�`�p٢�
�gp�������f��e�yH�iG�Y*�I)�9�)�")`��`�
p��`��p��`��p��` v�!��`"U��#j��$5��%J��&��'*s�'��p)
U�)ޥp*�7�+��p,�T`-�ip.�6`/~Kp0�`1gg�2r�`3GI�4R�`5'+�62�`7
�8��8���9���:���;۞�<��p=���>��p?�b�@o�pA�`BO�pCda`D/vpEDC`E��G-_�Gӊ�I
A�I�l�J�#�K��pL�@`M|kpN�"`O\MpP�`Q</pRu�`SpTU�`T��pV5�`V��X��X���Y���Z���[ފ�\���]�l�^d��_�N�`M�pa�k`b-�pcgM`d
xpeG/`e�Zpg'`g�<pi�`i�pj��`k�:�l���mv�n���oU��p���q5��ro��s��tOy�t��pv8�`v�pxx`x��py�Z`z��p{�<`|~gp}�`~^Ip�`�����������������������CDTCSTCWTCPTESTEDT�T@��PHP1BR)
��h|�I�@���40��t �8�0��0��ܹY �0ޛ� �ݚ0�T3 ��^ ��d0���Q,0��� �
Ұ������0��}�Ɏ0xנ�5� 3Ϡ!�i0"Ƞ#X�#�p %7�%�� 0�y01M�7�ư8�� 9��09�J ;��<o���ބ��������	LMTBRSTBRTz�5�(�Alagoas, SergipePHP1NI�-H�Ct`	�>PQ���oP1���QP)a� *�KP+C��2��PBX��C?iPDTn�EY`���������������MMTCSTESTCDT��X�PHP1BR
��D�W�N���B@�ނ0�8�@��@��ܹg0�#@ޛ�0�ݨ@�TA0�
��l0��r@�,��Q:@���0�
�����@����ɜ@x��C� 3ݰ!�w@"ְ,��@-f�0��Ǽ�������	LMTAMSTAMT��J�}
E AmazonasPHP1MF������P���LMTAST���f�PHP1MQ
���DMn@4���Ƽ�������	FFMTASTADT��`�s�PHP1MXW���`"U�#j��1gv2sp3GX4R�p5':62�p78��8�9���:��;���<���=���>�ހ?�p�@o��A��pBO��CdopD/��EDQpFf�G$3pG��IpI�eJ�pK���L�NpM|y�N�0pO\[�P�pQ<=�Ru�pS�TU�pT��V5�pV�X��X�Y���Z��[ޘ�\��]�z�^d�_�\�`M€a�ypb-��cg[pd
��eG=pe�h�g'pg�J�ipi�,�j��pk�Il��mv+n���oV
p���q5�ro��s�tO��t��v8�pv�πx�px���y�hpz���{�Jp|~u�}�,p~^W��p���@��������LMTCSTCDT��e}�JUS Central Time - Coahuila, Durango, Nuevo Leon, Tamaulipas near US borderPHP1MX]���p��n�fV`�C�`�6`������q`ؑ��p�1g�2s�3Gf4R��5'H62ڀ7*8�8�9��:��;��<�
�=��>��?�@oΐA���BO��Cd}�D/��ED_�Ft�G$A�G��I#�I�sJ��K�UL�"M�7N�OxP��Qa5�Rl�SA�TL�U ��V,�WېX��XཐY���Z���[�l�\��]�N�^��_�0�`i�a~MbIbc^/d)De>f`�g�g�B�h��i�$�jݷk��l�Ӏm��n���oqʐp���qZ�rfy�s:�tF[�u�v/xv��xZx�oy�<z�Q{�|�m�}�~�O������<����������������LMTMSTCSTPSTMDT��BpG}(Mountain Time - S Baja, Nayarit, SinaloaPHP1??<���0�{R@�ɰ��@��p0�}��������@���0���x
���@�Z�����@�;�0�~�����`@�*0�A7���0ȁ�@�M�����M�0ΰ��)5��Cd��=0��l0�2@�柰�C����0��w@��6���5���S0��R@��50��4@�J�$o�#���$��%7�%�v�'4@'�ð(�g�)�H�*��@+�W 7�ư8�*�@��AV>�Gw	�G� ����������������������
����CMTARTARSTWARTWARST�T@��PHP1US���,����p������pˈ���#�p�a	��u��@��J��g�+@�p0�p�'�	�p	��
�p�ٰ�
�u�������t��tyV�iVY8�I89�)"7p�p���p����p�܀��p v!��p"U�#j��$5�%J��&�'*��'�р)
c�)޳�*�E�+���,�bp-�w�.�Dp/~Y�0�&p1gv2sp3GX4R�p5':62�p78��8�9���:��;۬�<���=���>�ހ?�p�@o��A��pBO��CdopD/��EDQpE�G-m�GәI
O�I�{J�1�K���L�NpM|y�N�0pO\[�P�pQ<=�Ru�pS�TU�pT��V5�pV�X��X�Y���Z��[ޘ�\��]�z�^d�_�\�`M€a�ypb-��cg[pd
��eG=pe�h�g'pg�J�ipi�,�j��pk�Il��mv+n���oV
p���q5�ro��s�tO��t��v8�pv�πx�px���y�hpz���{�Jp|~u�}�,p~^W��p��������������������CDTCSTCWTCPTEST�(y��7GCentral Time - Michigan - Dickinson, Gogebic, Iron & Menominee CountiesPHP1MXW���`��`LKP1gv2sp3GX4R�p5':62�p78��8�9���:��;���<���=���>�ހ?�p�@o��A��pBO��CdopD/��EDQpFf�G$3pG��IpI�eJ�pK�GL��M�)N���OxP���Qa'�Rl��SA	�TL��U �V,}�ẀX�pXீY�|pZ���[�^p\��]�@p^��_�"p`ira~>�bITc^ �d)6e>�fR�g��g�4�h���i��jݨ�k���l��pm�ڀn��poq��p��pqZ�rfkps:�tFMpu�v/i�v�xK�x�ay�-�z�C{��|�_�}���~�A��������������������LMTCSTESTCDT�RZ�� Central Time - Campeche, YucatanPHP1MXb���p��n�fV`�C�`�6`�����ް`Ɨ4P�U�����P���ϷVPڙ��v��1gv2sp3GX4R�p5':62�p78��8�9���:��;���<���=���>�ހ?�p�@o��A��pBO��CdopD/��EDQpFf�G$3pG��IpI�eJ�pK�GL��M�)N���OxP���Qa'�Rl��SA	�TL��U �V,}�ẀX�pXீY�|pZ���[�^p\��]�@p^��_�"p`ira~>�bITc^ �d)6e>�fR�g��g�4�h���i��jݨ�k���l��pm�ڀn��poq��p��pqZ�rfkps:�tFMpu�v/i�v�xK�x�ay�-�z�C{��|�_�}���~�A�����������������������LMTMSTCSTCDTCWT��`{^Central Time - most locationsPHP1PMh��8�nc� u��!�w@"U��#j��$5��%Ju�&��'*W�'��P)
9�)މP*��+�kP,�8@-�MP.�@/~/P0��@1gK�2r�@3G-�4R�@5'�62�@7��8��8���9���:Ƶ�;ۂ�<��P=�d�>��P?�F�@o�PA�c@BOxPCdE@D/ZPED'@E��G-C�G�n�I
%�I�P�J��K�mPL�$@M|OPN�@O\1PP��@Q<PRu�@S�PTU�@T��PV5�@V���X��X���Y���Z���[�n�\���]�P�^d{�_�2�`M�Pa�O@b-zPcg1@d
\PeG@e�>Pg&�@g� Pi�@i�Pj�@k��l��mv�n���oU��p���q5��ro{�s��tO]�t��Pv8z@vޥPx\@x��Py�>@z�iP{� @|~KP}�@~^-P��@���X�����������
LMTASTPMSTPMDT�(��JPHP1CA���P���`��#P�<8л�#@�н�@���пs�@����S�@»���3�@ě����@�p���
�@�H����@�^����ˈ�`�#�p�`���u���@���U��� ���5������|���u���`�W���{`ݩtP޾]`߉VP�?`�i8P�~!`�IP�^`�(�P�G����'���������������֨��Ƨ���P��`�P�`��P�o�`�_kP�Oj`�?MP�/L`�(i�.`�K��J��-��,�������������w��p�P`�`P�P �`	�P
�`
�xP�w`ٔ�
�Y`�v��u��X��W�y:�i9�Y�I�8��(��"P���P�`��P��`��P��`��P u��!��P"U��#j��$5��%J��&��'*e�'��`)
G�)ޗ`*�)�+�]|,�*l-�?|.�l/~!|0��l1g=�2r�l3G�4R�l5'�62�l7�8��8��9���:Ƨ�;�t�<��|=�V�>��|?�8�@o�|A�UlBOj|Cd7lD/L|EDlE��G-Q�G�|�I
3�I�^�J��K�{`L�2PM|]`N�PO\?`P��PQ<!`Ru�PS`TU�PT��`V5�PV��X��X���Y���Z���[�|�\���]�^�^d��_�@�`M�`a�]Pb-�`cg?Pd
j`eG!Pe�L`g'Pg�.`i�Pi�`j��Pk�,�l���mv�n���oU��p���q5��ro��s��tOk�t��`v8�Pv޳`xjPx��`y�LPz�w`{�.P|~Y`}�P~^;`��P�������������������ESTADTASTAWTAPTϬ�΂Atlantic Time - New BrunswickPHP1MXW���`"U�#j��1gv2sp3GX4R�p5':62�p78��8�9���:��;���<���=���>�ހ?�p�@o��A��pBO��CdopD/��EDQpFf�G$3pG��IpI�eJ�pK�GL��M�)N���OxP���Qa'�Rl��SA	�TL��U �V,}�ẀX�pXீY�|pZ���[�^p\��]�@p^��_�"p`ira~>�bITc^ �d)6e>�fR�g��g�4�h���i��jݨ�k���l��pm�ڀn��poq��p��pqZ�rfkps:�tFMpu�v/i�v�xK�x�ay�-�z�C{��|�_�}���~�A����������������LMTCSTCDT�~Jy�MTMexican Central Time - Coahuila, Durango, Nuevo Leon, Tamaulipas away from US borderPHP1UY������%������Y8��C0�Ì���v�������ԗ�������y��y����8�_[��}x8�?=��]Z8���=<8�<0�8��0ʋ�8�UM���8͕_ �����. �EJ��� �r��� ��T��	s ��6��ꦠ��>0��b���q��ؖ(��0�ɨX�0�Ǡ��	ZG(�ݠ�0� U�0nG�!�T0";>�#��$� %Jg�%�v�'!0'�X�)
+�)�:�*��0+��AL�0BF/�CH��D��EKPE�~�Gg�G�`�H�I�I�B�J�+�K�_@L�
�M|A@N���O\#@PqPQ<@RP�PS�@T0�PT��@V�PV��W�PX��Y�vPZ���[���\���]�t�^dm�_yV�`M�@aY8�b-l@c9�d
N@e��e�0@gPg�@h�Pi��@j��Pk��l��Pmu�n��PoU�pj��q5��rJ��s��t*��t��@v
c�vޗ@w�E�x�y@y�'�z�[@{�DP|~=@}�&P~^@sP���T��������
����
����
��������MMTUYHSTUYTUYSTT����PHP1CA�����d����p��1`��X����袔
��_�s��>��S����-��ގ��p��p�܍p��R诼SP�~���5P�g.@�|P�G@�[�P�&�@�;�P��@�$�й�@��л����н����ĝп������ox�„a��OZ��dC��/<��M`P���-BPˈ�p�#�p�`���u���@���U��� ���5����������`��p��`�މpݩ�`޾kp߉d`�Mp�iF`�~/p�I(`�^p�)
`�G-��&��'���������������ֶ��Ƶ���`��p�`�p��`�o�p�_y`�Oxp�?[`�/Zp�(w�<p�Y�X��;��:�����������w��p�``�pP�`@�p0�` �p	�`
�p
�`�p٢�
�gp�������f��e�yH�iG�Y*�I)�9�)�")`��`�
p��`��p��`��p��` v�!��`"U��#j��$5��%J��&��'*s�'��p)
U�)ޥp*�7�+��p,�T`-�ip.�6`/~Kp0�`1gg�2r�`3GI�4R�`5'+�62�`7
�8��8���9���:���;۞�<��p=���>��p?�b�@o�pA�`BO�pCda`D/vpEDC`E��G-_�Gӊ�I
A�I�l�J�#�K��pL�@`M|kpN�"`O\MpP�`Q</pRu�`SpTU�`T��pV5�`V��X��X���Y���Z���[ފ�\���]�l�^d��_�N�`M�pa�k`b-�pcgM`d
xpeG/`e�Zpg'`g�<pi�`i�pj��`k�:�l���mv�n���oU��p���q5��ro��s��tOy�t��pv8�`v�pxx`x��py�Z`z��p{�<`|~gp}�`~^Ip�`�������������EDTESTEWTEPT��2�g�&Eastern Time - Quebec - most locationsPHP1MS��5��Ŭ���LMTAST��2��PHP1BS��7B��Oxp�?[`�/Zp�(w�<p�Y�X��;��:�����������w��p�``�pP�`@�p0�` �p	�`
�p
�`�p٢�
�gp�������f��e�yH�iG�Y*�I)�9�)�")`��`�
p��`��p��`��p��` v�!��`"U��#j��$5��%J��&��'*s�'��p)
U�)ޥp*�7�+��p,�T`-�ip.�6`/~Kp0�`1gg�2r�`3GI�4R�`5'+�62�`7
�8��8���9���:���;۞�<��p=���>��p?�b�@o�pA�`BO�pCda`D/vpEDC`E��G-_�Gӊ�I
A�I�l�J�#�K��pL�@`M|kpN�"`O\MpP�`Q</pRu�`SpTU�`T��pV5�`V��X��X���Y���Z���[ފ�\���]�l�^d��_�N�`M�pa�k`b-�pcgM`d
xpeG/`e�Zpg'`g�<pi�`i�pj��`k�:�l���mv�n���oU��p���q5��ro��s��tOy�t��pv8�`v�pxx`x��py�Z`z��p{�<`|~gp}�`~^Ip�`���|�������LMTEDTEST��m���PHP1US���p���`��p���`�e�p����j�p�5�`�S���`�3�����އ��p�i��R�K௳4�~-౜Qp�gJ`�|3p�G,`�\p�'`�;�p��`��p���`���ƴ`������Ĺ𿏲���o��„}��Ov��d_��/X��M|p�:��-^p�W`�
@p��9`ˈ�p�#�p�`���u���@���U��� ���5�������������p�e��މpݩ�`޾kp߉d`�Mp�iF`�~/p�I(`�^p�W.��G-��7��'���������������ֶ��Ƶ���`��p�`�p��`�o�p�_y`�Oxp�?[`�/Zp�(w�<p�Y�X��;��:�����������w��p�``�pP�`@�p0�`�p	�`	���
�`�p٢�
�gp�������f��e�yH�iG�Y*�I)�9�)�")`��`�
p��`��p��`��p��` v�!��`"U��#j��$5��%J��&��'*s�'��p)
U�)ޥp*�7�+��p,�T`-�ip.�6`/~Kp0�`1gg�2r�`3GI�4R�`5'+�62�`7
�8��8���9���:���;۞�<��p=���>��p?�b�@o�pA�`BO�pCda`D/vpEDC`E��G-_�Gӊ�I
A�I�l�J�#�K��pL�@`M|kpN�"`O\MpP�`Q</pRu�`SpTU�`T��pV5�`V��X��X���Y���Z���[ފ�\���]�l�^d��_�N�`M�pa�k`b-�pcgM`d
xpeG/`e�Zpg'`g�<pi�`i�pj��`k�:�l���mv�n���oU��p���q5��ro��s��tOy�t��pv8�`v�pxx`x��py�Z`z��p{�<`|~gp}�`~^Ip�`�������������EDTESTEWTEPT�t8���Eastern TimePHP1CA����p��1`�IPˈ�p�#�p�`�� �p	�`
�p
�`�p٢�
�gp�������f��e�yH�iG�Y*�I)�9�)�")`��`�
p��`��p��`��p��` v�!��`"U��#j��$5��%J��&��'*s�'��p)
U�)ޥp*�7�+��p,�T`-�ip.�6`/~Kp0�`1gg�2r�`3GI�4R�`5'+�62�`7
�8��8���9���:���;۞�<��p=���>��p?�b�@o�pA�`BO�pCda`D/vpEDC`E��G-_�Gӊ�I
A�I�l�J�#�K��pL�@`M|kpN�"`O\MpP�`Q</pRu�`SpTU�`T��pV5�`V��X��X���Y���Z���[ފ�\���]�l�^d��_�N�`M�pa�k`b-�pcgM`d
xpeG/`e�Zpg'`g�<pi�`i�pj��`k�:�l���mv�n���oU��p���q5��ro��s��tOy�t��pv8�`v�pxx`x��py�Z`z��p{�<`|~gp}�`~^Ip�`�������������EDTESTEWTEPT�b��UKEastern Time - Ontario & Quebec - places that did not observe DST 1967-1973PHP1US�"ˉD��#�p�aP@��U���qP��T@�SP�6@x5PqR�aQ�Q4�A3�1��m�	��	��P
������@
�����@��P��@��Py�@i�PY@I~P9a@)`P"}�	BP_�+�B��%��$������� v90!�ˠ"V0#j� $5�0%J� &�0'*� '���)
� )�ݰ*�p +���,ӌ�-���.�n�/~��0�P�1g�02s2�3G�04S�5'd062��7F08 8�(09�� :�
0;�� <�&�=�� >��?�� @o�A���BO̰Cd��D/��ED{�E��0G-� G��0I
z I��0J�\ K���L�x�M|��N�Z�O\��P�<�Q<g�Rv�SI�TV�T�+�V5�V�H0X� X�*0Y�� Z�0[�� \��0]�� ^d�0_�� `M�a���b-ΰcg��d
��eGg�e풰g'I�g�t�i+�i�V�j�
�k�s0l�* mvU0n� oV70p�� q60ro� s�0tO� t��v8Πv��x��x�۰y���z���{�t�|~��}�V�~^���8���eP��s`��s`��eP��s`���p�������pNSTNWTNPTBSTBDTYSTAKDTAKST�D�Alaska Time - west AlaskaPHP1BR'
��ed�;и�2���& ��f�8� ��� �ӠܹK� ޛ��݌ �T%��P��V ���Q �Ƿ�
Ġ���� ��o�ɀ xɐ�'� 3��!�[ "��#X�#�b%7�%Թ7���8�w9�� 9��;��<o������������	LMTFNSTFNT�tX�1�Atlantic islandsPHP1US���:����������ˉ��#�p�a��u��X��W��:��9�����w�q�a�P��@��0ހ�5�	��	��
�ࡐٿ
�����������yeidYGIF9))("E�	
'��&��	��������̀ v!���"U�#j�$5�%J�&�'*�'�ߐ)
r)��*�T+���,�bp-�w�.�Dp/~Y�0�&p1gv2sp3GX4R�p5':62�p78��8�9���:��;۬�<���=���>�ހ?�p�@o��A��pBO��CdopD/��EDQpE�G-m�GәI
O�I�{J�1�K���L�NpM|y�N�0pO\[�P�pQ<=�Ru�pS�TU�pT��V5�pV�X��X�Y���Z��[ޘ�\��]�z�^d�_�\�`M€a�ypb-��cg[pd
��eG=pe�h�g'pg�J�ipi�,�j��pk�Il��mv+n���oV
p���q5�ro��s�tO��t��v8�pv�πx�px���y�hpz���{�Jp|~u�}�,p~^W��p������������������������MDTMSTMWTMPTCDTCST�9x�+Central Time - North Dakota - Oliver CountyPHP1US���:����������ˉ��#�p�a��u��X��W��:��9�����w�q�a�P��@��0ހ�5�	��	��
�ࡐٿ
�����������yeidYGIF9))("E�	
'��&��	��������̀ v!���"U�#j�$5�%J�&�'*�'�ߐ)
r)��*�T+���,�p�-���.�R�/~g�0�4�1g�2s�3Gf4R��5'H62ڀ7*8�8�9��:��;ۻ<�
�=��>��?�@o��A��pBO��CdopD/��EDQpE�G-m�GәI
O�I�{J�1�K���L�NpM|y�N�0pO\[�P�pQ<=�Ru�pS�TU�pT��V5�pV�X��X�Y���Z��[ޘ�\��]�z�^d�_�\�`M€a�ypb-��cg[pd
��eG=pe�h�g'pg�J�ipi�,�j��pk�Il��mv+n���oV
p���q5�ro��s�tO��t��v8�pv�πx�px���y�hpz���{�Jp|~u�}�,p~^W��p������������������������MDTMSTMWTMPTCDTCST��w��@Central Time - North Dakota - Morton County (except Mandan area)PHP1MXZ���p��n�fV`�C�`�6`����1gv2sp3GX4R�p5'H62ڀ7*8�8�9��:��;��<�
�=��>��?�@oΐA���BO��Cd}�D/��ED_�Ft�G$A�G��I#�I�sJ��K���L�\�M|��N�>�O\i�P� �Q<K�Rv�S-�TU�T��V5ƀV�,X�X�Y��Z��[ާ\��]��^d�_�k`MАa���b-��cgi�d
��eGK�e�v�g'-�g�X�i�i�:�j��k�Wl�mv9n��oVp��q5�ro�s�tO�t���v8��v�ݐx��x���y�v�z���{�X�|~��}�:�~^e����������������������LMTMSTCSTCDTMDT�q�sT�+US Mountain Time - Chihuahua near US borderPHP1PA��a��������CMTEST���L�PHP1CA

z
)��R�ˈ�`�#�p�`��/0@�([�i9�Y�I�8��(��"P���P�`��P��`��P��`��P u��!��P"U��#j��$5��%J��&��'*e�'��`)
G�)ޗ`*�)�+�y`,�FP-�[`.�(P/~=`0�`1gg�2r�`3GI�4R�`5'+�62�`7
�8��8�9���:���;۞�<��p=���>��p?�b�@o�pA�`BO�pCda`D/vpEDC`E��G-_�Gӊ�I
A�I�l�J�#�K��pL�@`M|kpN�"`O\MpP�`Q</pRu�`SpTU�`T��pV5�`V��X��X���Y���Z���[ފ�\���]�l�^d��_�N�`M�pa�k`b-�pcgM`d
xpeG/`e�Zpg'`g�<pi�`i�pj��`k�:�l���mv�n���oU��p���q5��ro��s��tOy�t��pv8�`v�pxx`x��py�Z`z��p{�<`|~gp}�`~^Ip�`	������������������������������!����%zzzAWTAPTASTADDTADTEDTESTCSTCDT�=��[j#Eastern Time - Pangnirtung, NunavutPHP1SR����*K��b,�X��1����H���<���L��������
����
LMTPMTNEGTSRT�:��{PHP1US
��:����������ˉ���Ϗ�Ё��u��X������������MDTMSTMWT�^g�� Mountain Standard Time - ArizonaPHP1HT#
�nq�F��@��P��@��P��@��P��@ ��P!�w@"U��#j��$5��%J��&��'*s�'��`)
U�)ޗ`*�7�+�y`,�T`-�[`.�6`/~=`0�`1gY�2r�`3G;�4R�`BOxPCdE@D/ZPED'@���D�������	�������	PPMTEDTEST����IJPHP1??�����f��\���PP�ސ@�8�P��P���ܹu@�1Pޛ�@�ݶP�TO@��z@���P�:��QHP���@�
������"P����ɪPx��Q� 3�!��P"�H`P���p�������	���
LMTACSTACTAMT�T@��PHP1TT�73����T���LMTAST��h�ʍPHP1BR
����W�N���B@�ނ0�8�@��@��ܹg0�#@ޛ�0�ݨ@�TA0�
��l0��r@�,��Q:@���0�
�����@����ɜ@x��C� 3ݰ!�w@"ְ����������	LMTAMSTAMT{���'�RondoniaPHP1PR�2��#�p�`�������������ASTAPTAWT��q���PHP1CA�������?p�W`ˈ���#�p�a	� π	�p
��
�p�ٰ�
�u�������t��tyV�iVY8�I89�)"7p�p���p����p�܀��p v!��p"U�#j��$5�%J��&�'*��'�р)
c�)޳�*�E�+���,�bp-�w�.�Dp/~Y�0�&p1gv2sp3GX4R�p5':62�p78��8�9���:��;۬�<���=���>�ހ?�p�@o��A��pBO��CdopD/��EDQpE�G-m�GәI
O�I�{J�1�K���L�NpM|y�N�0pO\[�P�pQ<=�Ru�pS�TU�pT��V5�pV�X��X�Y���Z��[ޘ�\��]�z�^d�_�\�`M€a�ypb-��cg[pd
��eG=pe�h�g'pg�J�ipi�,�j��pk�Il��mv+n���oV
p���q5�ro��s�tO��t��v8�pv�πx�px���y�hpz���{�Jp|~u�}�,p~^W��p����������������CDTCSTCWTCPTӪ2�\e2Central Time - Rainy River & Fort Frances, OntarioPHP1CAw�n�/L`�(w�iVY8�I89�)"7p�p���p����p�܀��p v!��p"U�#j��$5�%J��&�'*��'�р)
c�)޳�*�E�+���,�bp-�w�.�Dp/~Y�0�&p1gv2sp3GX4R�p5':62�p78��8�9���:��;۬�<���=���>�ހ?�p�@o��A��pBO��CdopD/��EDQpE�G-m�GәI
O�I�{J�1�K���L�NpM|y�N�0pO\[�P�pQ<=�Ru�pS�TU�pT��V5�pV�X��X�Y���Z��[ޘ�\��]�z�^d�_�\�`M€a�ypb-��cg[pd
��eG=pe�h�g'pg�J�ipi�,�j��pk�Il��mv+n���oV
p���q5�ro��s�tO��t��v8�pv�πx�px���y�hpz���{�Jp|~u�}�,p~^W��p�������	����
����zzzCDDTCSTCDTEST�.�&�Central Time - central NunavutPHP1BR'
��g��I�@���40��t �8�0��0��ܹY �0ޛ� �ݚ0�T3 ��^ ��d0���Q,0��� �
Ұ������0��}�Ɏ0xנ�5� 3Ϡ!�i0"Ƞ#X�#�p %7�%�� 7�ư8�� 9��09��;��<o����H��������	LMTBRSTBRT}��g�
PernambucoPHP1CA5���������M��eO�0H�E1�*�%���0p�����p��`�r��a���Q���8�`�1���!����p�
�`��p��`ˉ��#�p�a�c��So�U�� ��5��������Ð���ޥ�ݩ��޾��߉���i��ib��~K��ID��^-��)&��GJ�C�',��%���������������������������������LMTMDTMSTMWTMPTCST�;�r��5Central Standard Time - Saskatchewan - most locationsPHP1CAw����/L`�(w�iVY8�I89�)"7p�p���p����p�܀��p v!��p"U�#j��$5�%J��&�'*��'�р)
c�)޳�*�E�+���,�bp-�w�.�Dp/~Y�0�&p1gv2sp3GX4R�p5':62�p78��8�9���:��;۬�<���=���>�ހ?�p�@o��A��pBO��CdopD/��EDQpE��G-m�Gӊ�I
O�I�l�J�1�K��pL�NpM|kpN�0pO\MpP�pQ</pRu�pSpTU�pT��pV5�pV��X��X���Y���Z���[ޘ�\���]�z�^d��_�\�`M�pa�ypb-�pcg[pd
xpeG=pe�Zpg'pg�<pipi�pj��pk�:�l��mv�n���oU��p���q5��ro��s��tO��t��pv8�pv�px�px��py�hpz��p{�Jp|~gp}�,p~^Ip�p�������	����
��������
zzzCDDTCSTCDTEST�N3���)Eastern Standard Time - Resolute, NunavutPHP1BR�����f��\���PP�ސ@�8�P��P���ܹu@�1Pޛ�@�ݶP�TO@��z@���P�:��QHP���@�
������"P����ɪPx��Q� 3�!��P"�H`P���p�������	���
LMTACSTACTAMTz�4 AcrePHP1??<���0�{R@�ɰ��@��p0�}��������@���0���x
���@�Z�����@�;�0�~�����`@�*0�A7���0ȁ�@�M�����M�0ΰ��)5��Cd��=0��l0�2@�柰�C����0��w@��6���5���S0��R@��50��4@�J�$o�#���$��%7�%�v�'!0'�X�)�@)�:�*��0+�W 7�ư8�*�Gw	�G� H���I�a ����������������������
CMTARTARSTWART�T@��PHP1MX������yOp��|�fdp��
���ꍀ�#�pҙ�p�Yؑ���~Y��IR��^;��)4��GX �Q�': ��3� ���� ���� ��௠��
������� ���� ysir YUIT 97)6 "S�	 5��4������������ې v+ !���"V
 #j�$5� %J�&� '*�'��)
�)�Ϡ*�b+���,�~�-���.�`�/~u�0�B�1g� 2s$�3Gt 4S�5'V 62�78 88� 9��:� ;��<��=��>���?��@oܠA���BO��Cd��D/��EDm�F��G$O�G�� I1�I؁ J��K�c L�0M�E N�Ox' P��QaC�Rl�SA%�TL�U!�V,�W�X��X�ˠY���Z���[�z�\�� ]�\�^�� _�>�`i� a~[bIp c^=d)R e>fn�gg�P�h��i�2�j��k��l��m���n�Ðoqؠp���qZ� rf��s:� tFi�u� v/�v�� xhx�} y�Jz�_ {�,|�{�}�~�]������P��������������������LMTMSTPSTPDTPWTPPT��0cb�:Mexican Pacific Time - Baja California away from US borderPHP1BR��zH�W�N���B@�ނ0�8�@��@��ܹg0�#@ޛ�0�ݨ@�TA0�
��l0��r@�,��Q:@���0�
�����@����ɜ@x��C� 3ݰ!�w@"ְH`q@��̸�������	����
LMTAMSTAMTBRT�����5W ParaPHP1CL�
�$iƛ\�P�qF�q��^wƱw=@�AгXp��"4P�9�@�gз���P��\��� P�n@�l���ɰ�v�P��<@�������rܰuP�@I�U2� +�>O@
��@���@	�Ѱ
�@��0��@
��0��@h�0��H�0f��(v0F����&{��t�]��V��?��8��\@���>@p��� @ 0!o@"9�0#E��$�0%8�&��&�'١0(��)½�*צ�+���,���-���.�j�/bc�0��@1BE�2`i@3=�04@K@5D06
�@7հ8@8�09�+�:��0;�
�<��0=��>j�0?��@SʰAh��B3��CH��D��E1�@E�p�G�@G�0H�v@I�o0J�X@K��L�:@M|30N�@O\0Pz8�Q;�0RZ�S�0T9��U��V�V�װW���XĹ�Y��@Z���[¿@\�}�]��@^m�0_��@`M|0abe@b-^0cBG@d
@0e+c�e�"0gE�g�0h�'�i� �j�	�k��l��mu�n�@oUưps�@q5��rS�@s��t3�@t��0v�@vމ0w�r@x�k0y܎�z�M0{�p�|~/0}�R�~gK�|4�����������������������������SMTCLTCLSTVI���Umost locationsPHP1DO��B`�K���@����C{�����Hp�P�HP�P��H0�P���	�P9���:)�`���`�������	����
���SDMTEDTESTEHDTAST������PHP1BR�
��r��I�@���40��t �8�0��0��ܹY �0ޛ� �ݚ0�T3 �Z	0�^ ��d0���Q,0��� �
Ұ������0��}�Ɏ0xנ�5� 3Ϡ!�i0"Ƞ#X�#�p %7�%�� '!0'��)�0)�� *�
�+k2�,��0-f� .��0/F� 0�y01M�2W �3j 48T04�� 6 06�h�7�ư8�� 9��0:�,�;��<o�=đ0>N�?��0@.ҠA��0B� CQ�0C�� EMS�E��G�0G�� H���I�w Jڄ�K���L�f�M`u�N�H�OI� P�e0Q 9�RcG0S�TC)0T�8 V#0V� X�0X�� Y��0Z�� [��\h� ]�Ͱ^H� _���`1��ak��b��cKs�c�� e+U�e�d�gr0g�F�h�T0i�c j�60kzE l�0mZ' n��0o:	 p}�q� r\��r�� t<ڰtٯ v��v�ˠw���x�� y܀�z���{ŝ0|bq�}�0~K� �a0���L��������	LMTBRSTBRTek�ˆ�2S & SE Brazil (GO, DF, MG, ES, RJ, SP, PR, SC, RS)PHP1GLu��LMn@4$�#��ܐ͐�㯐Ӡ�Ñ���������|� lr!\c"LT#<E$,6%'&'C�'�4�(�%�)��*��+���,��-�ڐ.�ː/t��0d��1]�2r�3=�4R�5�62x6�8��8�a9�v�:�C;�X�<�_�=�:�>�A�?��@f#�A�9BF�CdD%�EC�FɐG#�G��I�I��J�K��L̿�M��N���OnnP���QW��Rle�S7l�TLG�UN�V,)�V�0�XFX��Y�(Z��[�
\�]��^�_��`_�a}�b?�c]̐d�e=��f��g��g藐h�r�i�y�j�T�k�[�l�qm�=�n�Soh�p�5qQ<rfs1tE�uv/�v��x��x��y�ِz��{λ�|�}���~y�������h����������������
LMTCGTCGSTEGTEGST����#�Scoresbysund / IttoqqortoormiitPHP1US���:���������逢e�����E����ˉ��#�p�a�/v��(��X��v��u��X��W��:��9�����w�q�a�P��@��0ހ�5�	��	��
�ࡐٿ
�����������yeidYGIF9))("E�	
'��&��	��������̀ v!���"U�#j�$5�%J�&�'*�'�ߐ)
r)��*�T+���,�p�-���.�R�/~g�0�4�1g�2s�3Gf4R��5'H62ڀ7*8�8�9��:��;ۻ<�
�=��>��?�@oΐA���BO��Cd}�D/��ED_�E��G-|GӧI
^I��J�@K���L�\�M|��N�>�O\i�P� �Q<K�Rv�S-�TU�T��V5ƀV�,X�X�Y��Z��[ާ\��]��^d�_�k`MАa���b-��cgi�d
��eGK�e�v�g'-�g�X�i�i�:�j��k�Wl�mv9n��oVp��q5�ro�s�tO�t���v8��v�ݐx��x���y�v�z���{�X�|~��}�:�~^e�������������������MDTMSTMWTMPT�u�l��Mountain Time - NavajoPHP1BL������P���LMTAST������PHP1CA���b����~���|���ܡ8�L��\���L�t�\�d�L�^ܧD�L�=�ܩ$�L��ܫ�L���ܬ�fL�ݟܮ̯͂��ܰ�ḏ��\��F̳��\�m(̵fb\�M
̷FD\�,�̹&&\�	L�Bܻ��L��$ܽ��L��Ml��������18�y�˜8�YѨ�w�8�9���a�����@���(� ո��(����#�p�`��ӈD��JH�h&��)�H�H��	�H�'����H�X������tXݩmH޾VX߉OH�8X�i1H�~X�IH�]�X�(�H�G����&����������������챷��Ơ�HﯽX�H�X��H�o�X�_dH�OcX�?FH�/EX�(b�'X�D��C��&��%��������������w��p�H`�XP�H@�X0�H �X	�H
�X
�qH�pXٍ�
�RX�o��n��Q��P�y3�i2�Y�I�8��(��"H���H�X��H��X��H��X��H u��!�bd"U��#jp�$5��%J`�&u�'*B�'��t)
$�)�tt*��+�Vt,�#d-�8t.�d/~t0��d1g6�2r�d3G�4R�d5&��62�d7��8��8��9���:Ơ�;�m�<��t=�O�>��t?�1�@o�tA�NdBOctCd0dD/EtEDdE�w�G-.�G�Y�I
�I�;�J���K�XtL�dM|:tN��dO\tP��dQ;�tRu�dS�tTU�dT��tV5ydV���X��X��Y�w�Z���[�Y�\���]�;�^df�_��`M�ta�:db-etcgdd
GteF�de�)tg&�dg�ti�di��tj�dk�	�l��mu��n���oU��p���q5��rof�s��tOH�t��tv8edvސtxGdx�rty�)dz�Tt{�d|~6t}��d~^t��d��ܤ��Δ��������������������NDTNSTNPTNWTNDDT���8
(Newfoundland Time, including SE LabradorPHP1KN�74����4���LMTAST�����PHP1LC��ǰ�������CMTAST�����`PHP1VI��7`��� ���LMTAST�T8���PHP1VC������Ƙ���KMTAST�d��9:PHP1CA���������M�ˉ��#�p�a�v�So�U�� ��5��������',���������������q�a�������������������������LMTMDTMSTMWTMPTCST�-n.Central Standard Time - Saskatchewan - midwestPHP1HN�LKD ���!\�P"z��#<}PD]��D������<��������LMTCDTCST����}PHP1GL_��w�'�z�(�]�)�\�*�?�+�y`,�FP-�[`.�(P/~=`0�
P1gY�2r�P3G;�4R�P5'�62�P7��8��8���9���:���;ې�<��`=�r�>��`?�T�@o�`A�qPBO�`CdSPD/h`ED5PE��G-Q�G�|�I
3�I�^�J��K�{`L�2PM|]`N�PO\?`P��PQ<!`Ru�PS`TU�PT��`V5�PV��X��X���Y���Z���[�|�\���]�^�^d��_�@�`M�`a�]Pb-�`cg?Pd
j`eG!Pe�L`g'Pg�.`i�Pi�`j��Pk�,�l���mv�n���oU��p���q5��ro��s��tOk�t��`v8�Pv޳`xjPx��`y�LPz�w`{�.P|~Y`}�P~^;`��P�����������LMTADTAST�)��Thule / PituffikPHP1CA��${�ˈ�p�#�p�`��������w��p�``�pP�` �p	�`
�p
�`�p٢�
�gp�������f��e�yH�iG�Y*�I)�9�)�")`��`�
p��`��p��`��p��` v�!��`"U��#j��$5��%J��&��'*s�'��p)
U�)ޥp*�7�+��p,�T`-�ip.�6`/~Kp0�`1gg�2r�`3GI�4R�`5'+�62�`7
�8��8���9���:���;۞�<��p=���>��p?�b�@o�pA�`BO�pCda`D/vpEDC`E��G-_�Gӊ�I
A�I�l�J�#�K��pL�@`M|kpN�"`O\MpP�`Q</pRu�`SpTU�`T��pV5�`V��X��X���Y���Z���[ފ�\���]�l�^d��_�N�`M�pa�k`b-�pcgM`d
xpeG/`e�Zpg'`g�<pi�`i�pj��`k�:�l���mv�n���oU��p���q5��ro��s��tOy�t��pv8�`v�pxx`x��py�Z`z��p{�<`|~gp}�`~^Ip�`�����������������CSTESTEWTEPTEDT�'��y8#Eastern Time - Thunder Bay, OntarioPHP1MX������yOp��|�fdp��
���ꍀ�#�pҙ�p�Yؑ���~Y��IR��^;��)4��GX �Q�': ��3� ���� ���� ��௠��
������� ���� ysir YUIT 97)6 "S�	 5��4������������ې v+ !���"V
 #j�$5� %J�&� '*�'��)
�)�Ϡ*�b+���,�~�-���.�`�/~u�0�B�1g� 2s$�3Gt 4S�5'V 62�78 88� 9��:� ;��<��=��>���?��@oܠA���BO��Cd��D/��EDm�F��G$O�G�� I1�I؁ J��K���L�j�M|��N�L�O\w�P�.�Q<Y�Rv�S;�TU�T��V5ԐV�: X�X� Y��Z�� [޵\�� ]��^d� _�y`Mޠa���b-��cgw�d
��eGY�e턠g';�g�f�i�i�H�j�k�e l�mvG n��oV) p��q6 ro�s� tO�t�	�v8��v��x��x�͠y���z���{�f�|~��}�H�~^s��*����L��������������������LMTMSTPSTPDTPWTPPT���`�0US Pacific Time - Baja California near US borderPHP1CA����p��1`��.ȡ��@���U�@��]�(x`�f?�N�F!��0��p��M`���p��/`�܍p��`��op�~-౜Qp�gJ`�|3p�G,`�\p�'`�;�p��`�%���`�����������Ĺ𿏲���o��„}��Ov��d_��/X��M|p�:��-^pˈ�p�#�p�`���u���@���U��� ���5������n��3v@��p�t`�މpݩ�`޾kp߉d`�Mp�iF`�~/p�I(`�^p�)
`�G-��&��'���������������ֶ��Ƶ���`��p�`�p��`�o�p�_y`�Oxp�?[`�/Zp�(w�<p�Y�X��;��:�����������w��p�``�pP�`@�p0�` �p	�`
�p
�`�p٢�
�gp�������f��e�yH�iG�Y*�I)�9�)�")`��`�
p��`��p��`��p��` v�!��`"U��#j��$5��%J��&��'*s�'��p)
U�)ޥp*�7�+��p,�T`-�ip.�6`/~Kp0�`1gg�2r�`3GI�4R�`5'+�62�`7
�8��8���9���:���;۞�<��p=���>��p?�b�@o�pA�`BO�pCda`D/vpEDC`E��G-_�Gӊ�I
A�I�l�J�#�K��pL�@`M|kpN�"`O\MpP�`Q</pRu�`SpTU�`T��pV5�`V��X��X���Y���Z���[ފ�\���]�l�^d��_�N�`M�pa�k`b-�pcgM`d
xpeG/`e�Zpg'`g�<pi�`i�pj��`k�:�l���mv�n���oU��p���q5��ro��s��tOy�t��pv8�`v�pxx`x��py�Z`z��p{�<`|~gp}�`~^Ip�`�������������EDTESTEWTEPT����b'Eastern Time - Ontario - most locationsPHP1VG��7���l���LMTAST�{H��PHP1CA�������[�ˉ��#�p�a&�v �S}�U� � ��5� ���� ���Ѡ���޳�ݩ��޾��߉���w��ip��~Y��IR��^;��)4��GX �Q�': ��3� ���� ���� �����q��ޠ����o���_���O���?���/���(��f������ ��f��e ��H��G ��*�) �x q(�a'�Q
�A	�0� �	ΐ
͠
�௠��
������� ���� ysir YUIT 97)6 "S�	 5��4������������ې v+ !���"V
 #j�$5� %J�&� '*�'��)
�)�Ϡ*�b+���,�~�-���.�`�/~u�0�B�1g� 2s$�3Gt 4S�5'V 62�78 88� 9��:� ;��<��=��>���?��@oܠA���BO��Cd��D/��EDm�E�� G-�Gӵ I
lI�� J�NK���L�j�M|��N�L�O\w�P�.�Q<Y�Rv�S;�TU�T��V5ԐV�: X�X� Y��Z�� [޵\�� ]��^d� _�y`Mޠa���b-��cgw�d
��eGY�e턠g';�g�f�i�i�H�j�k�e l�mvG n��oV) p��q6 ro�s� tO�t�	�v8��v��x��x�͠y���z���{�f�|~��}�H�~^s��*�����������������PDTPSTPWTPPTԁ
V�
$Pacific Time - west British ColumbiaPHP1??��7`��� ���LMTAST�T@��PHP1CA~��˰��#������Ҁˉ(��#�p�a4 �/v��(��i�ir YUIT 97)6 "S�	 5��4������������ې v+ !���"V
 #j�$5� %J�&� '*�'��)
�)�Ϡ*�b+���,�~�-���.�`�/~u�0�B�1g� 2s$�3Gt 4S�5'V 62�78 88� 9��:� ;��<��=��>���?��@oܠA���BO��Cd��D/��EDm�E�� G-�Gӵ I
lI�� J�NK���L�j�M|��N�L�O\w�P�.�Q<Y�Rv�S;�TU�T��V5ԐV�: X�X� Y��Z�� [޵\�� ]��^d� _�y`Mޠa���b-��cgw�d
��eGY�e턠g';�g�f�i�i�H�j�k�e l�mvG n��oV) p��q6 ro�s� tO�t�	�v8��v��x��x�͠y���z���{�f�|~��}�H�~^s��*��������p��������������������YDTYSTYWTYPTYDDTPSTPDT�D��Pacific Time - south YukonPHP1CA����úP������?p ;��O��ˈ���#�p�a	�ӈh�S`��U�� ���5������������\��ޗ�ݩ�p޾y�߉rp�[��iTp�~=��I6p�^��)p�G<�4��'�������������������o���1b�J��v��g��X��I��:��+���
��w�q�a�P��@�0ހ π	��
��
��ٿ
�u��������tyeiVYGI89))"E��'����	������܀�̀ v!���"U�#j�$5�%J�&�'*�'�р)
r)޳�*�T+���,�p�-�w�.�R�/~Y�0�4�1gv2s�3GX4R��5':62ڀ78�8�9��:��;ۻ<���=��>�ހ?�@o��A���BO��Cd}�C�o�D/��EDQpE�G-m�GәI
O�I�{J�1�K���L�NpM|y�N�0pO\[�P�pQ<=�Ru�pS�TU�pT��V5�pV�X��X�Y���Z��[ޘ�\��]�z�^d�_�\�`M€a�ypb-��cg[pd
��eG=pe�h�g'pg�J�ipi�,�j��pk�Il��mv+n���oV
p���q5�ro��s�tO��t��v8�pv�πx�px���y�hpz���{�Jp|~u�}�,p~^W��p������������������������CDTCSTCWTCPT�q�~kG&Central Time - Manitoba & west OntarioPHP1US�ˉ(��#�p�a4 ��U0��8 �70� x0q6�a5�Q�A�0���Q�	ܠ	��0
�཰�� 
����� ��0�� ��0y� i�0Yc Ib09E )D0"a�	&0C�+�B��%��$������� v90!�ˠ"V0#j� $5�0%J� &�0'*� '���)
� )�ݰ*�p +���,ӌ�-���.�n�/~��0�P�1g�02s2�3G�04S�5'd062��7F08 8�(09�� :�
0;�� <�&�=�� >��?�� @o�A���BO̰Cd��D/��ED{�E��0G-� G��0I
z I��0J�\ K���L�x�M|��N�Z�O\��P�<�Q<g�Rv�SI�TV�T�+�V5�V�H0X� X�*0Y�� Z�0[�� \��0]�� ^d�0_�� `M�a���b-ΰcg��d
��eGg�e풰g'I�g�t�i+�i�V�j�
�k�s0l�* mvU0n� oV70p�� q60ro� s�0tO� t��v8Πv��x��x�۰y���z���{�t�|~��}�V�~^���8����p�������������������pYSTYWTYPTYDTAKDTAKST�0�=s�#Alaska Time - Alaska panhandle neckPHP1CAz�*ˉ��#�p�a�/Zp�(��idYGIF9))("E�	
'��&��	��������̀ v!���"U�#j�$5�%J�&�'*�'�ߐ)
r)��*�T+���,�p�-���.�R�/~g�0�4�1g�2s�3Gf4R��5'H62ڀ7*8�8�9��:��;ۻ<�
�=��>��?�@oΐA���BO��Cd}�D/��ED_�E��G-|GӧI
^I��J�@K���L�\�M|��N�>�O\i�P� �Q<K�Rv�S-�TU�T��V5ƀV�,X�X�Y��Z��[ާ\��]��^d�_�k`MАa���b-��cgi�d
��eGK�e�v�g'-�g�X�i�i�:�j��k�Wl�mv9n��oVp��q5�ro�s�tO�t���v8��v�ݐx��x���y�v�z���{�X�|~��}�:�~^e�����������������������zzzMWTMPTMSTMDDTMDT��d,�-Mountain Time - central Northwest TerritoriesPHP1AQ
�̀J� K���p���zzzWSTCAST$0R�KCasey Station, Bailey PeninsulaPHP1AQ	�@�G��G�J�0K��@bpFPbpzzzDAVT ����:Davis Station, Vestfold HillsPHP1AQ
Լv��4``�<�����zzzPMTDDUT#���N�&Dumont-d'Urville Station, Terre AdeliePHP1AQ_
�[��x��� ��T���Wp̷V�ͧ9pΠsχp���~��Y�v����;V���?�p9�
P��8�/����	߀	���
����
~���^���>�x��Xf��8HO!d��1F��c��(��E��
�g'��� Y~�!�΀"B�#i�$"}%I�&_')�'�(��)Ԙ*�À+�z,���-�\.���/t>0mi�1]Z�2V�3=<�46h5�6J6��7�,8��9��:�Ā;�*�<��=��>��?~�@e�A^ЀBE�C>��D.��E��FKG�G��H�IׄJ�uK�f����������zzzESTMIST6+02X*Macquarie Island Station, Macquarie IslandPHP1AQ	� 2�J�"@T`FPzzzMAWT".r�MMawson Station, Holme BayPHP1AQ���	��	���
�`�����
~�����^�����>��xg���XI��f�8+��`!H`�e`*`�G`�`�)`��`g`��` F�`!��`"0	�#i��$��%.`&B�'
�`'�$�(��`)��*ͧ`+�#`,��`-�`.�k`/j�`0mM`1J�`2Vi�3*�`46K�5
�`6-�6��7��8Ӌ�9���:�m�;�`<�O�=��`>s1�?~�`@\N`A^�`B<0`C>�`D`Ex`E��`F�Z`G���H�<`I�g�J�`K�I�L�`M�+�N}�`Ow
�Pf��Q`*`RF��S@`T&��U�`V��V��`W��X߲`Y�h�Z��`[��`\���]�g`^���_oI``ht�aO+`bHV�c/
`d(8�e�`fU`f��g�7`h���i�`j���k��`l���m��`nw��op�`p`�`qY��r@�`s9��t t`u��vV`v���w�8`x�c�y�`z�E�{�6�|�b`}��~�D`h������	��	zzzNZDTNZST��ޠMcMurdo Station, Ross IslandPHP1AQ}����柰�C����0��w@��6���5���S0��R@��50��4@�J�$o�0��]��V��?��8��\@���>@p��� @ 0!o@"9�0#E��$�0%8�&��&�'١0(��)½�*צ�+���,���-���.�j�/bc�0��@1BE�2`i@3=�04@K@5D06
�@7հ8@8�09�+�:��0;�
�<��0=��>j�0?��@SʰAh��B3��CH��D��E1�@E�p�G�@G�R�H�v@I�o0J�X@K�Q0L�:@M|30N�@O\0Pz8�Q;�0RZ�S�0T9��U��V�V�װW���XĹ�Y��@Z���[¿@\�}�]��@^m�0_��@`M|0abe@b-^0cBG@d
@0e+c�e�"0gE�g�0h�'�i� �j�	�k��l��mu�n�@oUưps�@q5��rS�@s��t3�@t��0v�@vމ0w�r@x�k0y܎�z�M0{�p�|~/0}�R�~gK�|4��������������������
������zzzARTARSTCLSTCLT&s���pPalmer Station, Anvers IslandPHP1AQ	
-����zzzROTT";��� Rothera Station, Adelaide IslandPHP1AQ���	��	���
�`�����
~�����^�����>��xg���XI��f�8+��`!H`�e`*`�G`�`�)`��`g`��` F�`!��`"0	�#i��$��%.`&B�'
�`'�$�(��`)��*ͧ`+�#`,��`-�`.�k`/j�`0mM`1J�`2Vi�3*�`46K�5
�`6-�6��7��8Ӌ�9���:�m�;�`<�O�=��`>s1�?~�`@\N`A^�`B<0`C>�`D`Ex`E��`F�Z`G���H�<`I�g�J�`K�I�L�`M�+�N}�`Ow
�Pf��Q`*`RF��S@`T&��U�`V��V��`W��X߲`Y�h�Z��`[��`\���]�g`^���_oI``ht�aO+`bHV�c/
`d(8�e�`fU`f��g�7`h���i�`j���k��`l���m��`nw��op�`p`�`qY��r@�`s9��t t`u��vV`v���w�8`x�c�y�`z�E�{�6�|�b`}��~�D`h������	��	zzzNZDTNZST��"Amundsen-Scott Station, South PolePHP1AQ	�X*0zzzSYOT �OXSyowa Station, E Ongul IPHP1AQ	�X��T`zzzVOST�?��OVostok Station, S Magnetic PolePHP1SJ�	�'���{`ȷM`��Kͩ�΢Cϒ4Ђ%�r�b� ��L�=�.�x�h�X�G��7��'�����/��ҐΗ�MD3��#�ܐ͐�㯐Ӡ�Ñ���������|� lr!\c"LT#<E$,6%'&'C�'�4�(�%�)��*��+���,��-�ڐ.�ː/t��0d��1]�2r�3=�4R�5�62x6�8��8�a9�v�:�C;�X�<�_�=�:�>�A�?��@f#�A�9BF�CdD%�EC�FɐG#�G��I�I��J�K��L̿�M��N���OnnP���QW��Rle�S7l�TLG�UN�V,)�V�0�XFX��Y�(Z��[�
\�]��^�_��`_�a}�b?�c]̐d�e=��f��g��g藐h�r�i�y�j�T�k�[�l�qm�=�n�Soh�p�5qQ<rfs1tE�uv/�v��x��x��y�ِz��{λ�|�}���~y����   CESTCETY+�PHP1YE�a8 *`*0LMTAST�ȸW��PHP1KZ2�{ܵ��0'}��� ������i��v��g��X��I�|:� l+�!\�"L
�#;��$+�%�&�'�@'|�)Ԧ*ĉ+��@,��@-��@.��@/tv@0dg@1]��2rm�3=t�4RO�5V�621�6�8�8N@8��9�0@:���;�@<�@=��@>��@?��@@e�@A��B5� H$FPbp	T`T`bp	LMTALMTALMST�R��most locationsPHP1JOw
����ry��P$7`���
j�
�P����u�
�#`����`r����`�	���`��P r�`!b�P"R�`#K��$d�`%+��&7o`'��(s�(�JP)�`*�f�+�e�,�H�-�G�.x��/�d`0X��1dF`2A�`3D(`4!�`5$
`6�`7z�`7��8�|�9ӿ`:�^�;��`<��`=��`>�t`?�O`@cV`An��BLr�C<c�D,T�EA/�F6�G!�G��I
.`I��J�`K���L��`M��`N��`Ot�`P��`QT�`Ri�`S4�`TR��U�`V2��V���Xx�X��Y�Z�Z�a�[�<�\�C�]��^}%�_�;``]�a{`bF$`cZ�`d&`e:�`f�`g�`g��`i��iŬ`j��k��`lã�m���n���on��p�g�qNn�rcI�s.P�tLf`u2�v,H`v�O`x*`x�1`y�`z�`{��`|��`}�
�~v�`���!�*0 	 	*0LMTEESTEET��I|�PHP1RU		u	������'0O�N���0�@�İ�@�"`�`�`��`{�` k�`![�`"K�`#;�`$+�`%�`&}`'��'��(��)x@�)�Q�*�4�+�]�,�N�-�?�.�0�/t!�0d�1]>`2r`3= `4Q�`5`61�`6��`8��8��`9���:��`;ڽ�<���=���>���?���@e��A��`BEj�Cc�`D%L�ECb`F.�G#D`G�K`I&`I�-`J�`K�`L�2�M��pN��Om�pP���QV��Rk��S6��TK��U��V+��V���X�pXօ�Y�pZ�g�[�}p\��p]�_p^fp_�Ap`_Hpa}]�b?*pc]?�dpe=!�f(�g�g�
�h���i���j���k���l��pm���n��pog��p��pqP�pre�ps0�ptElpuspv.��v�Upxj�x�7py�L�z�p{�.�|�5�}��~y�����d����	����	����	��	��LMTANATANAST�!8!y�Moscow+08 - Bering SeaPHP1KZ3��ൣ�@�Ԯ0�0� �����' �w�����u��f��W�|H� l9�!\*�"L�#<�$+��%��&��'P'��)K�0)Դ *ė+��P,��P-��P.��P/t�P0d�`1]��2r��3=��4Rk�5r�62M�6�T�8j`8�6�9�L`:��;�.`<�5`=�`>�`?��`@e�`A��B5�@		











	/ 8@FPFP	T`	T`FP	T`T`FPT`FPFP8@8@LMTFORTSHETSHESTAQTSTAQTT�A�_[�1Atyrau (Atirau, Gur'yev), Mangghystau (Mankistau)PHP1KZ3��h���@'��� � �����' �w�����u��f��W�|H� l9�!\*�"L�#<�$+��%��&��'P'��)K�0)Դ *ė+��P,��P-��P.��P/t�P0duP1]��2r{�3=��4R]�5d�62?�6�F�8\P8�(�9�>P:�
�;� P<�'P=�P>�	P?��P@e�PA��B5�0	
	
	
	
	
	
	
	
	
	
	
	
5�8@FPT`	T`FPT`	T`FPT`FPLMTAKTTAKTSTAQTSTAQTT�-i�:Aqtobe (Aktobe)PHP1TM


��D���@'��� �0�����' �w�����u��f��W�|H� l9�!\*�"L�#<�$+��%��&��'P'�P(�`)	�@)x�`	6�8@T`	FPFPT`	FP	8@8@FPLMTASHTASHSTTMT�<xk�}PHP1??


��D���@'��� �0�����' �w�����u��f��W�|H� l9�!\*�"L�#<�$+��%��&��'P'�P(�`)	�@)x�`	6�8@T`	FPFPT`	FP	8@8@FPLMTASHTASHSTTMT�T@��PHP1IQ5�0<�0hP���P�C@̓���@��P�t��e�|V� lG�!\8�"L)�#<�$,�%��&��'`'�x(纀)�*�?�+�0�,�s-�d.���/|��0m�1_�2P_3@P41��5!��6�7�7�8�<9�~�:�o�;��<��=��>�ր?z@k[�A\�BL�C=рD-€EF�G8�)�*08@*08@BMTASTADT�7�Vn�PHP1BH�����/l8@*0LMTGSTAST��=_םPHP1AZ

p
��D��P'���0�@�����50̅��������t��e�|V� lG�!\8�"L)�#<�$,�%��&��'`'�
`(�R@(�	p)��@*ij01]�2r�2�p�3=�4R�5�62j6�q8��8�S9�h�:�5;�J�<�Q�=�,�>�3�?��@f�A�+BE��Cd
D%ـEC�F��G#�G��I�IκJ�K��Ḻ�M�~N���On`P�u�QW|�RlW�S7^�TL9�U@�V,�V�"�X8X��Y�Z��[�\�]��^�_��`_�a}܀b?�c]��d�e=��f��g��g艀h�d�i�k�j�F�k�M�l�cm�/�n�Eoh�p�'qQ.rf	s1tE�u�v/�v��x�xжy�ˀz��{έ�|���}���~y���q�	
																																										.�*0FP	8@8@FP	8@	*08@8@FP8@FPLMTBAKTBAKSTAZTAZST��^�(PHP1TH�jg�^<bpBMTICT�OX��PHP1LB�	�ec�{�P�N�`�?�Ц%'�'Ш)���P�*����-P��`��`�����추P��q��Pﰥ`�zL��^`+w�C��P$7`���
j�
�P�����P
�#`����`r���.�ќ��b`��P����� ��`!u7P"�,�#W�P$g_`%8��&<�`'#P(��(�V�*m�*�	�+��`,��P-��`.��P/t�`0duP1]��2M��3=��4-s�5r�6
U�6�T�8\P8�6�9�>P:��;� P<�5`=�P>�`?��P@e�`A��BE�`Cc��D%�`EC��F�`G#��G��I��IΝ�J�j�K��L̇PM�a�N�iPOnC�P�KPQW``Rl-PS7B`TLPU$`V+�PV�`X
�X��`Y���Z��`[���\���]���^��_���`_��a}�Pb?��c]�Pdn�e=vPf�`gXPg�m`h�:Pi�O`j�Pk�1`l�8�m�`n��og�`p���qQ�re��s0��tE��u��v.�Pv��x�PxЙ�y�Pz�{�{΃P|��`}�eP~yz`�GP*0 EESTEET��HӰPHP1KG4�~���0'}��� ������i��v��g��X��I�|:� l+�!\�"L
�#;��$+�%�&�'�@'��@(���)�70*ĥ +�0,�� -��0.�i /��00dK 1f�02Mg�3=��4RV�5k�628�6�M�8UH8�/�9�7H:��;�H<�.X=��H>�X?��H@e�XA���BE�XB�� 									
E�FPbp	T`T`bp	T`	T`FPT`T`LMTFRUTFRUSTKGSTKGT���} PHP1BN��D�gG�k�ixp�LMTBNT��U��PHP1??
�ۆ��q̕2��t�R�[hMX	[h	HMTBURTIST�T@��PHP1MN/���(ܐ�Ȁ����?p�"`�!p�`�p{�` k�p![�`"K�p#;�`$+�p%�`&�p'��'��(��)ԉ�*�l�+�k�,�N�-�M�.�0�/t/�0d�1]Lp2M/`3=.p4-`5p6�`:饐;���<���=���>��?tb�@da�ATD�BDC�C4&�D$%�ECG��kXbpp�~�	��p�	LMTULATCHOTCHOSTҬJ�_Dornod, SukhbaatarPHP1CN����m��6ip ~h�!Iap"^J�#)Cp$Gg%_�&'I&�A�(+(�#�c�bp~�	p�
LMTLONTCDTCST�q��J�@central China - Sichuan, Yunnan, Guangxi, Shaanxi, Guizhou, etc.PHP1??����m��6ip ~h�!Iap"^J�#)Cp$Gg%_�&'I&�A�(+(�#�c�bp~�	p�
LMTLONTCDTCST�T@��PHP1LK����Z(̕+��u�81�(2q D?�(J�MXT`[h[h
T`
MMTISTIHSTLKT����PHP1??�ۆ��q̕2�ݨҘO� J;�K<�TR�[hMX	T`
T`bpHMTBURTISTDACTBDTBDST�T@��PHP1SY�
��x��/��^�p�a��>p�@�ap� Հ�}��R�[�p�s(��;~p�U���T�6���6�����H���p�����tp��������4g�pg�I�a�+��C �p$S���
�
�.p���p
�?�kY��sL�p���mp�J��pU#��p Gz!��"<t#k��$2��%%Ep&D�''p'�[�(�P)�`*�P+�+`,�_�-�G�.�|P/|{`0m��1_`2P4�3>�`41hP5�`6��7��7��P8��9�TP:�S`;���<���=��P>��`?y��@k?`A\s�BLr�C=�PD-�`E�PF6�G*>PG�S`Iq�I��J�PK�`L��PM��`N��PO~�P��PQ]��Ri�PS=��TR��U��V2��V���Xj�X�`Y�L�ZƜ`[�.�\�~`]��^�``_�-P`fB`a{PbF$`cZ�Pd/@�e:�Pf"�g�Pg��i��i���j��k���lÕ�m��`n�w�ow�`p�Y�qW�`rc;�s7�`tLXPum`v,:Pv�O`xPx�k�y�Pz�M�{��P|�/�}���~�����"*0 	LMTEESTEET�r0J0PHP1BD�ۆ��q̕2�ݨҘO� J;�K<�TR�[hMX	T`
T`bpHMTBURTISTDACTBDTBDST������PHP1TL���˙2��V�p�0p9Ùu�p�~�~�p�LMTTLTJSTCIT|Hh�H}PHP1AE��3�8@LMTGST��g
PHP1TJ������0'}��� ������i��v��g��X��I�|:� l+�!\�"L
�#;��$+�%�&�'�@'��@(ʏP@�FPbp	T`T`bp	T`	FPLMTDUSTDUSSTTJT�3�{��PHP1PS��Y����Pͬ�����Ϗf�Щy�ф`�Ҋ�p�e���k���6c`��-P��`��`�����m�����ﰳp�y%�����ZY�sp�;���U�p���6��E�p�����9�'BP|�����	��`
�3��������``�P ��`!I��"]M`#�$Z0`%?P&��&���'���(�P)��`*��+�e�,��-�G�._�P/{)�0H��0��1dF`2A�`3D(`4!�`5$
`6�`6���7a`8DP8�}�9�`�:�_�;�B�<�A�=�$�>�#�?��@�A\��B^��CA��D-�`E�PF��F�opG�^�H�-�I��J�JpK�.�L�,pM��N`pOv-PI*�QVR)�S5�T��U�U���V��WȲ�X՗Y���Z���[��p\���]q�p^~w�_Qup`^Y�a1Wpb>;�c9pd�d�pf:f�7�g�h��i�j���k��ly��m��nY��ooޜpB�pqO��r"�ps/��t�pu��u�pv�f�w�dpx�H�y�Fpz�e{�b�|�G}kD�~x)K&�*0 *0*0	 
 EETEESTIDTIST�d�G@
PHP1CN�������xǐ�����m���6ip ~h�!Iap"^J�#)Cp$Gg%_�&'I&�A�(+(�#�v�w�p�	~�~�
LMTCHATCSTCDT�#X�-!Heilongjiang (except Mohe), JilinPHP1VN�oB��_�Г����A�dc�bpp�LMTSMTICT��x�k*PHP1HKG�iZ���W���:��Kx��Lbp�j�8ԓJ��B�8֚���>A��.$��9���������ܸ����ʨޢ8߬[(�8��(�Oi8�v�(�/K8�_Ǩ�-8�?���I������+��m��
���O�����l(�wѸ�N(�W���0(�@�8�h(� �8�G�(�%~8�a(�`8��C(��B8��_���^���A���@���#��"�~�n�]�M�G(78&�(�=8	�(	��8
�(֩8ƌ(
��8�n(�98ol�k~�p�	~�
LMTHKSTHKTJST�T���WPHP1MN.�����֐��[��>��=�� ���|� l�![�"K�#;ƀ$+Ő%��&��'�'��(�)Ԧ*ĉ+��,�k-�j.�M/tL0d/1]h�2MK�3=J�4--�5,�6
�:�;���<���=���>���?t~�@d}�AT`�BD_�C4B�D$A�E_ U�T`p�	bpLMTHOVTHOVSTҘ���G+Bayan-Olgiy, Govi-Altai, Hovd, Uvs, ZavkhanPHP1RUu�����'a������p�Ȁ���M��Z��K��<��-�|� l�!\�"K�#;�$+Ӡ%Ġ&��'� '�� (��0)xy0)ԉ�*�l�+�� ,�� -�x .�i /tZ 0dK 1]v�2rQ�3=X�4R3�5:�62�6��82 8��9� :��;� <�� =�� >�� ?�� @e� A�֠BE� Cc��D%� EC��Fg G#|�GI^�I�e�J�@�K�G�L�] M�)�N�? On�P�! QW( Rl S7
 TK� U� V+� V�� X�Xְ Y�ŠZ�� [ԧ�\���]���^��_�k�`_r�a}� b?T�c]j d6�e=L fS g. g�5 h� i� j�� k�� l��m�� n��og� p�ҠqP٠re��s0��tE��u��v.� v��x� x�a�y�w z�C�{�Y |�` }�; ~yB � a�bp~�	p�p�~�	p�	bpIMTIRKTIRKST���۵Moscow+05 - Lake BaikalPHP1??		�	�����`�վТec�{�P�N�`�?�Ц%'�'Ъ((`��Ы����1P��`����J�`�΀P�ˮ`��P�q���k	PӢ9`�CP�L
��){��+���	]���`��?���`��\P���`ݳ����`�d��h`�8����k�����K��i�`4�Pn�p9���u	��	�:�
���`�$P
�9`��P�`�sPg��M6Gz�#݀'\���>���Pܔ�����P��|s ld!\U"LF#<7$,(%&
'5�'�p(�	p)�p*��p+��p,��p-��p.��p/t�p0d�p1]��2r��3=��4Ry�5��62[�6�b�8xp8�D�9�Zp:�&�;�<p<�Cp=�p>�%p?�p@fpA��BE�pCc��D%�pEC��E�2�FɐG#�G��I�I��J�K��L̿�M��N���OnnP���QW��Rle�S7l�TLG�UN�V,)�V�0�XFX��Y�(Z��[�
\�]��^�_��`_�a}�b?�c]̐d�e=��f��g��g藐h�r�i�y�j�T�k�[�l�qm�=�n�Soh�p�5qQ<rfs1tE�uv/�v��x��x��y�ِz��{λ�|�}���~y����h*0 	8@
*0*0 	*0 	IMTEESTEETTRSTTRT�T@��PHP1ID�x���`˿���V�p�<��&�d g ix	~�
p�	bp	JMTJAVTWITJST�e��@Java & SumatraPHP1ID����X���h��~���LMTEITCST�v��YpIrian Jaya & the MoluccasPHP1IL��0E��Y����Pͬ�����Ϗf�Щy�ф`�Ҋ�p�e���k���Z`����/�p�F�������۴4ܹ ���޴΀ߤ���v�V}�J`�64�����t���Ҁ�'���O�|�����	��`
�3��������``�P ��`!I��"]M`#�$Z0`%?P&��&���'���(�P)��`*��+�e�,��-�G�._�P/{)�0H��1H��2<nP31�`4��5�`5�P7�7�p8�_�9��:��p;�[`<��p=��`>��p?|��@s6pAP�`BL�CHOpD,qE��FSF�c�G�5H�pI�J���K��L�	�M��N��pOt��P^B�QTـR+��S4��T'ApU��U���V��W�zpXݜY��pZ�~[���\�`]� p^}B_o��`]$a=4�bF@�c8�pd&"�em�f�g��g��h�lpi�Ȁj��k���l��pm��nxpon�pN��qN�rJKps.mt�puOu�_�v�k�w��px�M�y�^pz�/�{���|��}��p~v�Wp �*0 8@JMTIDTISTIDDT��Hk�PHP1AF��@8@?HAFT��R|?�PHP1RUu�R�ĵ���')@]�\���0�@�İ�@�"`�`�`��`{�` k�`![�`"K�`#;�`$+�`%�`&}`'��'��(��)x@�)�Q�*�4�+�]�,�N�-�?�.�0�/t!�0d�1]>`2r`3= `4Q�`5`61�`6��`8��8��`9���:��`;ڽ�<���=���>���?���@e��A��`BEj�Cc�`D%L�ECb`F.�G#D`G�K`I&`I�-`J�`K�`L�2�M��pN��Om�pP���QV��Rk��S6��TK��U��V+��V���X�pXօ�Y�pZ�g�[�}p\��p]�_p^fp_�Ap`_Hpa}]�b?*pc]?�dpe=!�f(�g�g�
�h���i���j���k���l��pm���n��pog��p��pqP�pre�ps0�ptElpuspv.��v�Upxj�x�7py�L�z�p{�.�|�5�}��~y����������	������	��	��LMTPETTPETST�9��(Moscow+08 - KamchatkaPHP1PK�~��̕2��t�ݨ�O�0<�E�=�(�HA�0IG�I��0J�{ >�MX[hFPT`
FPLMTISTKARTPKSTPKT�E�x��PHP1CN���DǑ�m�0�6ip ~h�!Iap"^J�#)Cp$Gg%_�&'I&�A�(+(�#�G<MXFP~�	p�
LMTKASTCDTCSTœm��}west Tibet & XinjiangPHP1NP��}�0�O�MXP�LMTISTNPT����RPHP1??��}�0�O�MXP�LMTISTNPT�T@��PHP1IN
�ۆ��q̕2��t�R�[hMX	[h	HMTBURTIST��U�~�PHP1RUu��
���� 'o����׀�֐��[��h��Y��J��;�|,� l�!\�"K��#;�$+�%Ұ&ð'�0'��0(��@)x�@)Ԙ*�z�+��0,��0-��0.�w0/th00dY01]��2r_�3=f�4RA�5H�62#�6�*�8@08��9�"0:��;�0<�0=��0>��0?��0@e�0A��BE�0CcưD%�0EC��Fu0G#��GIl�I�s�J�N�K�U�L�k0M�7�N�M0On�P�/0QW60Rl0S70TK�0U�0V+�0V��0X�X־0Y�ӰZ��0[Ե�\���]���^��_�y�`_��a}�0b?b�c]x0dD�e=Z0fa0g<0g�C0h�0i�%0j�0k�0l��m��0n���og�0p��qP�re°s0ɰtE��u��v.�0v�x�0x�o�y�0z�Q�{�g0|�n0}�I0~yP0�+0WT`p�	bpbpp�	bp	T`LMTKRATKRAST����O�Moscow+04 - Yenisei RiverPHP1MY�����gN��
�`ʳ�`ˑ_�Hm���a]bpg 	g ix~�p�SMTMALTMALSTJSTMYT�):��peninsular MalaysiaPHP1MY����gG��{'���P�]���ՠP�>�ö��� �ŘP�G�y:�����[������<�PˑX�Hm���gpixu0	p�~�p�LMTBORTBORTSTJSTMYT����uSabah & SarawakPHP1KW�a5�,�*0LMTAST��[�PHP1??*��$�wѸ�N(�W���0(�7d��h(� �8�G�(�c�'��`8��C(��B8��_���^���A���@���#��"�~�n�]�M��=�p-��&���	�(	��8
�(֩8ƌ(
��8�n(�<��vo;p_:�Op8]j|~�p�	p�
LMTMOSTMOTCST�T@��PHP1MO*��$�wѸ�N(�W���0(�7d��h(� �8�G�(�c�'��`8��C(��B8��_���^���A���@���#��"�~�n�]�M��=�p-��&���	�(	��8
�(֩8ƌ(
��8�n(�<��vo;p_:�Op8]j|~�p�	p�
LMTMOSTMOTCST�A%���PHP1RUu�6�����'7Pk�j���@�P���#P�0p�!p�p�p{�p k�p![�p"K�p#;�p$+�p%�p&�p'��'��(�)xO)�_�*�B�+�k�,�\�-�M�.�>�/t/�0d �1]Lp2r'p3=.p4R	p5p61�p6��p8�8��p9���:��p;���<���=���>���?���@e��A��pBEx�Cc�pD%Z�ECppF<�G#RpG�YpI4pI�;pJ�pK�pL�2�M��pN��Om�pP���QV��Rk��S6��TK��U��V+��V���X�pXօ�Y�pZ�g�[�}p\��p]�_p^fp_�Ap`_Hpa}]�b?*pc]?�dpe=!�f(�g�g�
�h���i���j���k���l��pm���n��pog��p��pqP�pre�ps0�ptElpuspv.��v�Upxj�x�7py�L�z�p{�.�|�5�}��~y�����`����	������	��	��LMTMAGTMAGST�8z��Moscow+08 - MagadanPHP1ID��]��Րˈ��V�po�o�p�~�LMTMMTCITJST�����=east & south Borneo, Celebes, Bali, Nusa Tengarra, west TimorPHP1PH
����0p���Щ%p�l9�բ�uF�fz�~�p�~�	PHSTPHTJST����J PHP1OM��6�8@LMTGST�Wl�PHP1CY
�w�	��
ݒ��d���P
�9`����`uO�c�`S�PM�3�P#�`�P�`�P�`�hP�g`�������f��e�|H� lG�!\*�"L)�#<�$,�%��&��'P'�
`(��P)��`*��P+��`,��P-��`.��P/t�`0duP1]��2M��3=��4-s�5r�62x6�8��8�a9�v�:�C;�X�<�_�=�:�>�A�?��@f#�A�9BF�CdD%�EC�FɐG#�G��I�I��J�K��L̿�M��N���OnnP���QW��Rle�S7l�TLG�UN�V,)�V�0�XFX��Y�(Z��[�
\�]��^�_��`_�a}�b?�c]̐d�e=��f��g��g藐h�r�i�y�j�T�k�[�l�qm�=�n�Soh�p�5qQ<rfs1tE�uv/�v��x��x��y�ِz��{λ�|�}���~y����H*0 	 	*0LMTEESTEET��:E�ZPHP1RU

u
��@��� 'o����׀�֐��[��h��Y��J��;�|,� l�!\�"K��#;�$+�%Ұ&ð'�0'��0(��@)x�@)Ԙ*�z�+��0,��0-��0.�w0/th00dY01]��2r_�3=f�4RA�5H�62#�6�*�8@08��9�"0:��;�0<�0=��0>��0?��0@e�0A��BE�0CcưD%�0EC��Fu0G#��GIl�I�s�J�N�K�U�L�y@M�E�N�[@On'�P�=@QWD@Rl@S7&@TL@U@V+�@V��@X��X��@Y��Z��@[��\��]���^��_���`_��a}�@b?p�c]�@dR�e=h@fo@gJ@g�Q@h�,@i�3@j�@k�@l�*�m��@n��og�@p��qP��re�s0�tE��u��v.�@v�x�@x�}�y�@z�_�{�u@|�|@}�W@~y^@�9@																												Q�T`p�	bpbpp�	bp	T`bpT`NMTKRATKRASTNOVSTNOVT�XX��rMoscow+03 - NovokuznetskPHP1RU		v	��$��� 'o����׀�֐��[��h��Y��J��;�|,� l�!\�"K��#;�$+�%Ұ&ð'�0'��0(��@)x�@)Ԙ*�z�+��0+�N,��@-��@.��@/tv@0dg@1]��2rm�3=t�4RO�5V�621�6�8�8N@8��9�0@:���;�@<�@=��@>��@?��@@e�@A��BE�@Cc�D%�@EC��F�@G#��G�Iz�I΁�J�\�K�c�L�y@M�E�N�[@On'�P�=@QWD@Rl@S7&@TL@U@V+�@V��@X��X��@Y��Z��@[��\��]���^��_���`_��a}�@b?p�c]�@dR�e=h@fo@gJ@g�Q@h�,@i�3@j�@k�@l�*�m��@n��og�@p��qP��re�s0�tE��u��v.�@v�x�@x�}�y�@z�_�{�u@|�|@}�W@~y^@�9@M�T`p�	bpbpp�	bp	T`bp	LMTNOVTNOVST�M��-�Moscow+03 - NovosibirskPHP1RUu��@����0'}��� ������i��v��g��X��I�|:� l+�!\�"L
�#;��$+�%�&�'�@'��@(��P)x�P)Ԧ*ĉ+��@,��@-��@.��@/tv@0dg@1]��2rm�3=t�4RO�5V�621�6�8�8N@8��9�0@:���;�@<�@=��@>��@?��@@e�@A��BE�@Cc�D%�@EC��F�@G#��G�Iz�I΁�J�\�K�c�L�y@M�E�N�[@On'�P�=@QWD@Rl@S7&@TL@U@V+�@V��@X��X��@Y��Z��@[��\��]���^��_���`_��a}�@b?p�c]�@dR�e=h@fo@gJ@g�Q@h�,@i�3@j�@k�@l�*�m��@n��og�@p��qP��re�s0�tE��u��v.�@v�x�@x�}�y�@z�_�{�u@|�|@}�W@~y^@�9@D�FPbp	T`T`bp	T`	FPLMTOMSTOMSST�@���`Moscow+03 - west SiberiaPHP1KZ3��ܵ��@'��� � �����' �w�����u��f��W�|H� l9�!\*�"L�#<�$+��%��&��'`'��)K�@)��0*ĥ +��`,��`-��`.��`/t�`0d�`1]��2r��3=��4Rk�5r�62M�6�T�8j`8�6�9�L`:��;�.`<�5`=�`>�`?��`@e�`A��B5�@
	

0$8@FPT`	T`FPT`	FP	8@FP8@FP8@FPLMTURATURASTORASTORAT�z�aWest KazakhstanPHP1KH�oD$�_�Г����A�b\c�bpp�LMTSMTICT�����PHP1ID������y��V�p�<��&�!�t�f�f�ix~�p�p�bpLMTPMTWITJSTCIT�G:�|�west & central BorneoPHP1KP��~x���𸄴x�O)��5x�w�~�p�KST��"҉�PHP1QA��0���0P8@*0LMTGSTAST��aJ�PHP1KZ4������@'��� � �����' �w�����u��f��W�|H� l9�!\*�"L�#<�$+��%��&��'P'��)K�0)x�P)Ԧ*ĉ+��@,��@-��@.��@/tv@0dg@1]��2rm�3=t�4RO�5V�621�6�8�8N@8��9�0@:���;�@<�@=��@>��@?��@@e�@A��B5� 		











	=`8@FPT`	T`FPT`	FPbpT`bpT`LMTKIZTKIZSTQYZTQYZSTͰ@v�j Qyzylorda (Kyzylorda, Kzyl-Orda)PHP1MM��s\��њg�Z$[h~�	[h
RMTBURTJSTMMT��=�e�PHP1SA�a6�+�*0LMTAST��Y�2PHP1??�oB��_�Г����A�dc�bpp�LMTSMTICT�T@��PHP1RU		v	��͸�΅p�0��'7Pk�j���@�P���#P�0p�!p�p�p{�p k�p![�p"K�p#;�p$+�p%�p&�p'��'��(�)xO)�_�*�B�+�k�,�\�-�M�.�>�/t/�0d �1]Lp2r'p3=.p4R�5�61��6��88��9��:�Ā;��<��=��>��?��@e�A���BE�Cc��D%iEC~�FKG#`�G�g�IB�I�I�J�$�K�+�L�AM�
�N�#Om�P�QWRk�S6�TK�U�V+�V��XǀX֔Y�Z�v[ԋ�\���]�m�^t�_�O�`_V�a}lb?8�c]Nd�e=0f7gg�h��i�j��k��l��m��n�Ԁog�p���qP��re��s0��tEz�u��v.�v�c�xyx�E�y�[z�'�{�=|�D}�~y&���~�~�������������LMTCJTJSTSAKSTSAKT���f�Moscow+07 - Sakhalin IslandPHP1UZ


��`���@'��� � �����' �w�����u��f��W�|H� l9�!\*�"L�#<�$+��%��&��'P'�P(�� (��P)`�0	>�8@FPT`	T`FPT`	FPT`FPLMTSAMTSAMSTTASTUZTUZST��
x�@west UzbekistanPHP1KR��~x���𸄴x�O)��ᒀ�	��5x���
� �Dp!n=`"�&p#N`w�~�~�p���KSTKDT 8�d�PHP1CN�����\��'p�����Z��6ip ~h�!Iap"^J�#)Cp$Gg%_�&'I&�A�(+(�#�q�~�p�LMTCDTCST����j/east China - Beijing, Guangdong, Shanghai, etc.PHP1SG�����gN��
�`ʳ�`ˑ_�Hm�M���a]bpg 	g ix~�ixp�SMTMALTMALSTJSTSGT�I���PHP1TW(ї��azp�y��B���Z:�#�p�<��fp������&���p��Y�ݪ��rsߵdp�|�ᖗ��]���w�p�>��0 p�!q��p������������p����?�������/��y�p�V�p	݉�
�PS��~�p�CDTCST��h�
pPHP1UZ


�����0'}��� ������i��v��g��X��I�|:� l+�!\�"L
�#;��$+�%�&�'�@'��@(�� (��P)`�0	@�FPbp	T`T`bp	T`	FPT`FPLMTTASTTASSTUZTUZST�f|f�east UzbekistanPHP1GE5�����P'���0�@�����50̅��������t��e�|V� lG�!\8�"L)�#<�$,�%��&��'`'�
`(�(�	p)`�P)��P*�@+��P,��@-��P.��@/tv@0dY01]��3=f�4RA�5V�62#�6�8�8@08��9�"0:���;�0<�@=��0>��@?��0@e�@@�ǰA��BE�p			









**0FP
8@8@FP
8@
*08@*0FP8@TBMTTBITTBISTGETGEST��WPHP1IRd�l}������Ht-@�@0�:@Ug�EJ�7��-�( v�(۝�)˜�*�"�+��H,�V8-��.���/o7H0a�81Pj�2B�32��4%u�5#H6�86�V�7�ܸ8֊H9�8:�H;��8<�B�=�ȸ>{vH?m�8@\��AO/�B?.�C1��G��HH�O8I�NHJ��8K���L��M��HNz;8Oh��P[n�QKm�R=�S,�HT'8U
��VZ�V�HW�8XэHY�8Z���[�F�\��H]�z8^u'�_g��`W��aJ2�b8�Hc+f8d�e��e�GHf��8g��Hh�R8i���j���k�3Hl��8m�f�ns�ob�HpU 8qEHr7�8s&R�tظu�Hu�8v��w�?�x�>�y�ĸz�rH{��8|���}�+�~n�Ha_8080818FP
8@?H
LMTTMTIRSTIRDT���a#�PHP1??��0E��Y����Pͬ�����Ϗf�Щy�ф`�Ҋ�p�e���k���Z`����/�p�F�������۴4ܹ ���޴΀ߤ���v�V}�J`�64�����t���Ҁ�'���O�|�����	��`
�3��������``�P ��`!I��"]M`#�$Z0`%?P&��&���'���(�P)��`*��+�e�,��-�G�._�P/{)�0H��1H��2<nP31�`4��5�`5�P7�7�p8�_�9��:��p;�[`<��p=��`>��p?|��@s6pAP�`BL�CHOpD,qE��FSF�c�G�5H�pI�J���K��L�	�M��N��pOt��P^B�QTـR+��S4��T'ApU��U���V��W�zpXݜY��pZ�~[���\�`]� p^}B_o��`]$a=4�bF@�c8�pd&"�em�f�g��g��h�lpi�Ȁj��k���l��pm��nxpon�pN��qN�rJKps.mt�puOu�_�v�k�w��px�M�y�^pz�/�{���|��}��p~v�Wp �*0 8@JMTIDTISTIDDT�T@��PHP1??��t!aM�TMXT`LMTISTBTT�T@��PHP1BT��t!aM�TMXT`LMTISTBTT�=j�tPHP1JP	�΅p�>����������۫ڀ��݋��~���~�CJTJDTJST�����HPHP1??��]��Րˈ��V�po�o�p�~�LMTMMTCITJST�T@��PHP1MN.���Lܐ�Ȁ���M��0p�/��p��{�p k�![�p"KՀ#;�p$+��%�p&��'��'�(��)Ԙ*�z�+�z,�\�-�\.�>�/t>0d �1]Z�2M=p3=<�4-p5�6
p:鳠;���<���=���>���?tp�@do�ATR�BDQ�C44�D$3�EQd4bp~�	p�LMTULATULAST�q����most locationsPHP1??.���Lܐ�Ȁ���M��0p�/��p��{�p k�![�p"KՀ#;�p$+��%�p&��'��'�(��)Ԙ*�z�+�z,�\�-�\.�>�/t>0d �1]Z�2M=p3=<�4-p5�6
p:鳠;���<���=���>���?tp�@do�ATR�BDQ�C44�D$3�EQd4bp~�	p�LMTULATULAST�T@��PHP1CN���dm� �6ip ~h�!Iap"^J�#)Cp$Gg%_�&'I&�A�(+(�#�RT`~�	p�
LMTURUTCDTCST�)��L�most of Tibet & XinjiangPHP1LA�oFP�_�Г����A�`0c�bpp�LMTSMTICT��z�6�PHP1RUu�YGP����'E`y�x���P�`����1`�>��/�� ���|� k�![�"KՀ#;ƀ$+��%��&��'�'�(�)x])�m�*�P�+�z,�k-�\.�M/t>0d/1]Z�2r5�3=<�4R�5�61��6��88��9��:�Ā;��<��=��>��?��@e�A���BE�Cc��D%iEC~�FKG#`�G�g�IB�I�I�J�$�K�+�L�AM�
�N�#Om�P�QWRk�S6�TK�U�V+�V��XǀX֔Y�Z�v[ԋ�\���]�m�^t�_�O�`_V�a}lb?8�c]Nd�e=0f7gg�h��i�j��k��l��m��n�Ԁog�p���qP��re��s0��tEz�u��v.�v�c�xyx�E�y�[z�'�{�=|�D}�~y&�{�~���	������	��~�	LMTVLATVLASTVLASST�2:��Moscow+07 - Amur RiverPHP1RUu���p���'Sp������`�p����?p�L��=��.���|� l�![�"K�#;Ԑ$+Ő%��&��'�'��(�� )xk )�{�*�^�+��,�y-�j.�[/tL0d=1]h�2rC�3=J�4R%�5,�62�6��8$8��9�:�Ґ;��<��=��>��?��@e�A�ȐBE�Cc��D%wEC��FYG#n�G�u�IP�I�W�J�2�K�9�L�OM��N�1Om��P�QWRk�S6�TK�U�V+�V��XՐX֢Y�Z��[ԙ�\���]�{�^��_�]�`_d�a}zb?F�c]\d(�e=>fEg g�'h�i�	j��k��l��m��n��og�p�ĐqPːre��s0��tE��u��v.�v�q�x�x�S�y�iz�5�{�K|�R}�-~y4�y�p���	~�~���	~�	p�LMTYAKTYAKST��؃�Moscow+06 - Lena RiverPHP1RUu���@'��� �0�����' �w�����u��f��W�|H� l9�!\*�"L�#<�$+��%��&��'P'�P(�`)x�`)Դ *ė+��P,��P-��P.��P/t�P0duP1]��2r{�3=��4R]�5d�62?�6�F�8\P8�(�9�>P:�
�;� P<�'P=�P>�	P?��P@e�PA��BE�PCc��D%�PEC��F�PG#��G��I��IΏ�J�j�K�q�L̇PM�S�N�iPOn5�P�KPQWRPRl-PS74PTLPUPV+�PV��PX
�X��PY���Z��P[���\���]���^��_���`_��a}�Pb?~�c]�Pd`�e=vPf}PgXPg�_Ph�:Pi�APj�Pk�#Pl�8�m�Pn��og�Pp���qQ�re��s0��tE��u��v.�Pv��x�PxЋ�y�Pz�m�{΃P|��P}�eP~ylP�GP	












































8�8@T`	FPFPT`	FP	8@T`FPT`FPLMTSVETSVESTYEKSTYEKT�Ho `Moscow+02 - UralsPHP1AMt��H��P'���0�@�����50̅��������t��e�|V� lG�!\8�"L)�#<�$,�%��&��'`'�
`(�@(�	p)��@*ij0+��p,��p-��p.��p/t�p0d�p2�p�3=��4Rk�5r�62M�6�T�8j`8�6�9�L`:��;�.`<�5`=�`>�`?��`@e�`A��BE�`Cc��D%�`EC��F�`G#��G��I��IΝ�J�x�K��L̕`M�a�N�w`OnC�P�Y`QW``Rl;`S7B`TL`U$`V+�`V�`X�X��`Y��Z��`[���\���]���^��_���`_��a}�`b?��c]�`dn�e=�`f�`gf`g�m`h�H`i�O`j�*`k�1`l�F�m�`n�(�og�`p�
�qQ�re��s0��tE��u��v.�`v��x�`xЙ�y�`z�{�{Α`|��`}�s`~yz`�U`	



)�*0FP	8@8@FP	8@	*08@*08@8@FP8@LMTYERTYERSTAMTAMSTƤ�V�PPHP1PT����X�K����㠜�	��ɟ��������_p�����A���n���#)�O����������@��k���"����p>��r���P ��2h��䐸�Ր��Ɛ��������{������
�x��hz�Xk�?!��8M�:��XȐ����K���<���˵o��̀h�͕ܿQ��g��r���ې�u3Ϭ��R�Х���Uьf�2�҅���Y��I��9�@�)�@��@�	�@��@��@ܹu@ݲ��ޢ��ߒ���s��rd��bU��RF��B7��2(��"��E@�6@�'@��@��	@��@��@��@��@@�z�@�j�@�c��S���C���3���#������q���b�
�)��E�t6�d'�T&�D	�4�#���۠�̠�˰Ӯ�ß��� �� �� �� |�  l� !\q "Lb #<S $,D %5 && 'Q�'�B�(�3�)�$�*��+���,��-�ڐ.�ː/t��0d��1]�2r�3=�4R�5�62x6�8��8�a9�v�:�C;�X�<�_�=�:�>�A�?��@f#�A�9BF�CdD%�EC�FɐG#�G��I�I��J�K��L̿�M��N���OnnP���QW��Rle�S7l�TLG�UN�V,)�V�0�XFX��Y�(Z��[�
\�]��^�_��`_�a}�b?�c]̐d�e=��f��g��g藐h�r�i�y�j�T�k�[�l�qm�=�n�Soh�p�5qQ<rfs1tE�uv/�v��x��x��y�ِz��{λ�|�}���~y����	












































���(��������
��������
����
����
����
HMTAZOSTAZOTAZOMTWET����~uAzoresPHP1BM���� �`	�P
�`
�xP�w`ٔ�
�Y`�v��u��X��W�y:�i9�Y�I�8��(��"P���P�`��P��`��P��`��P u��!��P"U��#j��$5��%J��&��'*e�'��`)
G�)ޗ`*�)�+�y`,�FP-�[`.�(P/~=`0�
P1gY�2r�P3G;�4R�P5'�62�P7��8��8���9���:���;ې�<��`=�r�>��`?�T�@o�`A�qPBO�`CdSPD/h`ED5PE��G-Q�G�|�I
3�I�^�J��K�{`L�2PM|]`N�PO\?`P��PQ<!`Ru�PS`TU�PT��`V5�PV��X��X���Y���Z���[�|�\���]�^�^d��_�@�`M�`a�]Pb-�`cg?Pd
j`eG!Pe�L`g'Pg�.`i�Pi�`j��Pk�,�l���mv�n���oU��p���q5��ro��s��tOk�t��`v8�Pv޳`xjPx��`y�LPz�w`{�.P|~Y`}�P~^;`��P���H�������LMTASTADT�����PHP1ESv�\��A� M63��#�ܐ͐�㯐Ӡ�Ñ���������|� lr!\c"LT#<E$,6%'&'C�'�4�(�%�)��*��+���,��-�ڐ.�ː/t��0d��1]�2r�3=�4R�5�62x6�8��8�a9�v�:�C;�X�<�_�=�:�>�A�?��@f#�A�9BF�CdD%�EC�FɐG#�G��I�I��J�K��L̿�M��N���OnnP���QW��Rle�S7l�TLG�UN�V,)�V�0�XFX��Y�(Z��[�
\�]��^�_��`_�a}�b?�c]̐d�e=��f��g��g藐h�r�i�y�j�T�k�[�l�qm�=�n�Soh�p�5qQ<rfs1tE�uv/�v��x��x��y�ِz��{λ�|�}���~y�����������	
	
LMTCANTWETWEST�4��(�Canary IslandsPHP1CV
�Q�̕� �t|�@����������������LMTCVTCVST���MPHP1??s
�m�X#�ܐ͐�㯐Ӡ�Ñ���������|� lr!\c"LT#<E$,6%'&'C�'�4�(�%�)��*��+���,��-�ڐ.�ː/t��0d��1]�2r�3=�4R�5�62x6�8��8�a9�v�:�C;�X�<�_�=�:�>�A�?��@f#�A�9BF�CdD%�EC�FɐG#�G��I�I��J�K��L̿�M��N���OnnP���QW��Rle�S7l�TLG�UN�V,)�V�0�XFX��Y�(Z��[�
\�]��^�_��`_�a}�b?�c]̐d�e=��f��g��g藐h�r�i�y�j�T�k�[�l�qm�=�n�Soh�p�5qQ<rfs1tE�uv/�v��x��x��y�ِz��{λ�|�}���~y��������LMTWETWEST�T@��PHP1FOs
�m�X#�ܐ͐�㯐Ӡ�Ñ���������|� lr!\c"LT#<E$,6%'&'C�'�4�(�%�)��*��+���,��-�ڐ.�ː/t��0d��1]�2r�3=�4R�5�62x6�8��8�a9�v�:�C;�X�<�_�=�:�>�A�?��@f#�A�9BF�CdD%�EC�FɐG#�G��I�I��J�K��L̿�M��N���OnnP���QW��Rle�S7l�TLG�UN�V,)�V�0�XFX��Y�(Z��[�
\�]��^�_��`_�a}�b?�c]̐d�e=��f��g��g藐h�r�i�y�j�T�k�[�l�qm�=�n�Soh�p�5qQ<rfs1tE�uv/�v��x��x��y�ِz��{λ�|�}���~y��������LMTWETWEST�UEPHP1??�	�'���{`ȷM`��Kͩ�΢Cϒ4Ђ%�r�b� ��L�=�.�x�h�X�G��7��'�����/��ҐΗ�MD3��#�ܐ͐�㯐Ӡ�Ñ���������|� lr!\c"LT#<E$,6%'&'C�'�4�(�%�)��*��+���,��-�ڐ.�ː/t��0d��1]�2r�3=�4R�5�62x6�8��8�a9�v�:�C;�X�<�_�=�:�>�A�?��@f#�A�9BF�CdD%�EC�FɐG#�G��I�I��J�K��L̿�M��N���OnnP���QW��Rle�S7l�TLG�UN�V,)�V�0�XFX��Y�(Z��[�
\�]��^�_��`_�a}�b?�c]̐d�e=��f��g��g藐h�r�i�y�j�T�k�[�l�qm�=�n�Soh�p�5qQ<rfs1tE�uv/�v��x��x��y�ِz��{λ�|�}���~y����   CESTCET�T@��PHP1PT����X�K{���Ր�����ɑ��������_b������A瀣n}��#�O�������ɶ��2��]�����z�p0��r���P��2Z��ր��ǀ�︀��������m��������x{�hl�X]�?��8?�:��X������=���.���q˵a���̀Y��ܱ͕C��Yp�r����̀�u%Ϭu��R��Х���UьW��2t�҅���Y��I��9�0�)�0��0�	�0��0��0ܹg0ݲ��ޢ��ߒt��e��rV��bG��R8��B)��2��"��70�(0�0��
0��0���0��0��000�z�0�j�0�c���S���C���3���#���r��c���T�
���7�t(�d�T�C��3��#�ܐ͐�㽠Ӡ�Ñ���������|� lr!\c"LT#<E$,6%'&'C�'�4�(�%�)��*��+���,��-�ڐ.�ː/t��0d��1]�2r�3=�4R�5�62x6�8��8�a9�v�:�C;�X�<�_�=�:�>�A�?��@f#�A�9BF�CdD%�EC�FɐG#�G��I�I��J�K��L̿�M��N���OnnP���QW��Rle�S7l�TLG�UN�V,)�V�0�XFX��Y�(Z��[�
\�]��^�_��`_�a}�b?�c]̐d�e=��f��g��g藐h�r�i�y�j�T�k�[�l�qm�=�n�Soh�p�5qQ<rfs1tE�uv/�v��x��x��y�ِz��{λ�|�}���~y����	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	���(����
����
FMTMADSTMADTMADMTWESTWET�����Madeira IslandsPHP1IS@�`�����ш��rQ����M�f�����&C���& �%�ˬB���� ͌$�μ� �l�М� �K�҅���+ʠ�e���9� �Eq��� �%S��� �p ��w ���ܹY ��4 ޢu�߮ �W�� �b9��m� �B��M� �!���6ؠ� ����� ����� ��~�� �`� �B��j� �_ �S���_A �3���?# �d�� ��F���� ��(������E ���l����	����	
RMTISSTISTGMT�6��QXPHP1GS����GST6�U��PHP1FK{
�D_<�OZ��60�/<���0�Y@���;@�����@˾Ű̷�@�6�0�@Ӽ��� �d0Ѧ �F0�[�j6@ �=�!J@"h�#)�@$H�%	�@&10&�@(0(��)��0*���+��0,���-��0.r��/��00Rb�1y��2;@3Y��4a@59h�5�C@7J�7�%@8�,�9�@:�*�;���<�GP=q��>�)P?Z�`@�PA:�`Ba�PC�`DA�PD�o`F!�PF�Q`H
��H�m�I��J�O�Kʑ�L�1�M�s�Nc�O�U�PB��QsrPR"��SSTPT�`U36PU��`WPW˸`X�PY��`Z��P[�|`\���]k^`^���_Tz�`{��a4\�b[��c>�d;��d� �f$�Pf��hPh�`i�aPj�`k�CPl|�`m�%Pn\�`o�Pp<�`qm#�r�`sM�t��u,��u��w��w�i�x��y�K�z̍�{�-�|��P}nJ`~��PN,`�����������	��������	SMTFKSTFKT:p��b�PHP1SH�B�X����JMTGMTq
�	��PHP1??��N���� ��T���Wp̷V�ͧ9pΠsχpp9�
P��8�/����	߀	���
����
~���^���>�x��Xf��8H��!d�ǁ�F��c��(��E��
�y���� Y~�!�΀"B�#i�$"}%I�%��')�'��)	�)��*�s+�ʀ,ҏ�-x��.�q�/X��0�S�1]Z�2r5�3=<�4R�5�61��6��88��9��:�Ā;��<��=��>��?��@e�A���BE�Cc��D.��EC~�FKG#`�G��H�IׄJ�uK�fL�WM�HN�9Ow*PpU�Q`F�RP7�S@(�T0�U 
�V��V��W�݀X�΀YϿ�Z���[��\��]��^��_x�`h�aX�bHsc8dd(UeFfq�gb�g�S�h�D�i�5�j�&�k��l��m���n��opۀpjqY�rI�s9�t)�u�v	�v��w�xـy�qz�b{���|�~�}�o�~�`�rQ���������EST�T@��PHP1AU��N����'��T���^x̷]�ͧ@xΠzχ"xp@�
#P"��?�0��!�	�	��
�Ȉ� ��
��^���>�x��Xm��8O禈!k�Lj�M��j��/��L���y���� Y��!�Ո"B�#i�$"�%I�&f')�'��)	�)�d�*�z+�ш,Җ�-�(�.�x�/tE0�Z�1]a�2r<�3=C�4R�5%�62�6��88��9��:�ˈ;��<��=��>��?��@e�A���BE�Cc��D.��EC��FRG#g�G��H�I׋J�|K�mL�^M�ON�@Ow1Pp\�Q`M�RP>�S@/�T0 �U �V�V��W��X�ՈY�ƈZ���[��\��]��^��_x�`h�aX�bHzc8kd(\eMfx�gi�g�Z�h�K�i�<�j�-�k��l��m��n��op�pjqY�rI�s9�t)�u�v	�v��w�xهy�xz�i{���|���}�v�~�g�rX���������CSTT���South AustraliaPHP1AU�N���� ��T���Wp̷V�ͧ9pΠsχpp9�
%I�%��')�'��)	�)����������EST_k�+%Queensland - most locationsPHP1AU��N����'��T���^x̷]�ͧ@xΠzχ"xp@�
#P"��?�0��!�	�	��
�Ȉ� ��
��^���>�x��Xm��8O��!k�Lj�M��j��/��L���y���� Y��!�Ո"B�#i�$"�%I�%��')�'��)	�)��*�z+�ш,Җ�-x��.�x�/X��0�Z�1]a�2r<�3=C�4R�5%�62�6��88l��8��9��:�ˈ;��<��=��>��?��@e�A���BE�Cc��D.��EC��FRG#g�G��H�I׋J�|K�mL�^M�ON�@Ow1Pp\�Q`M�RP>�S@/�T0 �U �V�V��W��X�ՈY�ƈZ���[��\��]��^��_x�`h�aX�bHzc8kd(\eMfx�gi�g�Z�h�K�i�<�j�-�k��l��m��n��op�pjqY�rI�s9�t)�u�v	�v��w�xهy�xz�i{���|���}�v�~�g�rX���������CSTX���~hNew South Wales - YancowinnaPHP1??��N���� ��T���Wp̷V�ͧ9pΠsχpp9�
P��8�/����	߀	���
����
~���^���>�x��Xf��8H��!d�ǁ�F��c��(��E��
�y���� Y~�!�΀"B�#i�$"}%I�%��')�'��)	�)��*�s+�ʀ,ҏ�-x��.�q�/X��0�S�1]Z�2r5�3=<�4R�5�61��6��88��9��:�Ā;��<��=��>��?��@e�A���BE�Cc��D.��EC~�FKG#`�G��H�IׄJ�uK�fL�WM�HN�9Ow*PpU�Q`F�RP7�S@(�T0�U 
�V��V��W�݀X�΀YϿ�Z���[��\��]��^��_x�`h�aX�bHsc8dd(UeFfq�gb�g�S�h�D�i�5�j�&�k��l��m���n��opۀpjqY�rI�s9�t)�u�v	�v��w�xـy�qz�b{���|�~�}�o�~�`�rQ���������EST�T@��PHP1AU���x��� ��T���Wp̷V�ͧ9pΠsχpp9�
P��8�/����	߀	���
����
~���^���>�x��Xf��8HO!d��1F��c��(��E��
�g'��� Y~�!�΀"B�#i�$"}%I�&_')�'�(��)Ԙ*�À+�z,���-�\.���/t>0mi�1]Z�2V�3=<�46h5�6J6��7�,8��9��:�Ā;�*�<��=��>��?~�@e�A^ЀBE�C>��D.��E��FKG�G��H�IׄJ�uK�fL�WM�HN�9Ow*PpU�Q`F�RP7�S@(�T0�U 
�V��V��W�݀X�΀YϿ�Z���[��\��]��^��_x�`h�aX�bHsc8dd(UeFfq�gb�g�S�h�D�i�5�j�&�k��l��m���n��opۀpjqY�rI�s9�t)�u�v	�v��w�xـy�qz�b{���|�~�}�o�~�`�rQ���������ESTLeJ�.jTasmania - King IslandPHP1AU�N����'��T���^x̷]�ͧ@xΠzχ"x����CSTvNu�KENorthern TerritoryPHP1AU�N�0��2��TĔ��i̷hͧK	�	�X�u)%R)���Eq��F\�G#rG�yITI�[�{�{CWSTX���K
Western Australia - Eucla areaPHP1AU���x��� ��T���Wp̷V�ͧ9pΠsχp���~��Y�v����;V���?�p9�
P��8�/����	߀	���
����
~���^���>�x��Xf��8HO!d��1F��c��(��E��
�g'��� Y~�!�΀"B�#i�$"}%I�&_')�'�(��)Ԙ*�À+�z,���-�\.���/t>0mi�1]Z�2V�3=<�46h5�6J6��7�,8��9��:�Ā;�*�<��=��>��?~�@e�A^ЀBE�C>��D.��E��FKG�G��H�IׄJ�uK�fL�WM�HN�9Ow*PpU�Q`F�RP7�S@(�T0�U 
�V��V��W�݀X�΀YϿ�Z���[��\��]��^��_x�`h�aX�bHsc8dd(UeFfq�gb�g�S�h�D�i�5�j�&�k��l��m���n��opۀpjqY�rI�s9�t)�u�v	�v��w�xـy�qz�b{���|�~�}�o�~�`�rQ���������ESTG���rTasmania - most locationsPHP1??r	�f�8@��h!]x�lh?x�Nh�!x�0h�xy�p��� Ypp!��x"B��#i�$"n�%I�%���')��'Ͻ�)	��)���*�k�+��p,҈x-x�p.�jx/X�p0�Lx1]Lp2r.x3=.p4Rx5p61�x6��p8�8��p9��x:��p;��<���=���>���?���@e��A��xBEx�Cc�xD.�pECwxF<�G#YxG���H�I�u�J�m�K�W�L�O�M�9�N�1�Ow�PpNxQ`8pRP0xS@pT0xU�pV�xV��pW��xX�pYϸxZ��p[��\���]���^���_x��`h��aXz�bHd�c8\�d(F�e>�fcpg[xg�Eph�=xi�'pj�xk�	pl�xm��pn��xop�ppi��qY��rI�s9��t)�u��v	��v���w�x�q�y�i�z�S�{��x|�pp}�hx~�RprJx��������ESTLHST�T@��PHP1AU�N���� ��T���Wp̷V�ͧ9pΠsχpp9�
%I�%��')�'��)	�)��*Ph�*�s+�ʀ,ҏ�-x����������ESTjg���Queensland - Holiday IslandsPHP1AUr	�f�8@��h!]x�lh?x�Nh�!x�0h�xy�p��� Ypp!��x"B��#i�$"n�%I�%���')��'Ͻ�)	��)���*�k�+��p,҈x-x�p.�jx/X�p0�Lx1]Lp2r.x3=.p4Rx5p61�x6��p8�8��p9��x:��p;��<���=���>���?���@e��A��xBEx�Cc�xD.�pECwxF<�G#YxG���H�I�u�J�m�K�W�L�O�M�9�N�1�Ow�PpNxQ`8pRP0xS@pT0xU�pV�xV��pW��xX�pYϸxZ��p[��\���]���^���_x��`h��aXz�bHd�c8\�d(F�e>�fcpg[xg�Eph�=xi�'pj�xk�	pl�xm��pn��xop�ppi��qY��rI�s9��t)�u��v	��v���w�x�q�y�i�z�S�{��x|�pp}�hx~�RprJx��������ESTLHSTY0fmLord Howe IslandPHP1AU��N���� ��T���Wp̷V�ͧ9pΠsχpp9�
P��8�/����	߀	���
����
~���^���>�x��Xf��8H矀!d�ǁ�F��c��(��E��
�y���� Y~�!w�"B�#i�$"}%I�&_')�'��)	�)��*�s+�ʀ,ҏ�-x��.�q�/t>0�S�1]Z�2r5�3=<�4R�5�61��6��88��9��:�Ā;��<��=��>��?��@e�A���BE�Cc��D.��EC~�FKG#`�G��H�IׄJ�uK�fL�WM�HN�9Ow*PpU�Q`F�RP7�S@(�T0�U 
�V��V��W�݀X�΀YϿ�Z���[��\��]��^��_x�`h�aX�bHsc8dd(UeFfq�gb�g�S�h�D�i�5�j�&�k��l��m���n��opۀpjqY�rI�s9�t)�u�v	�v��w�xـy�qz�b{���|�~�}�o�~�`�rQ���������ESTO���VictoriaPHP1??�N����'��T���^x̷]�ͧ@xΠzχ"x����CST�T@��PHP1??��N���� ��T���Wp̷V�ͧ9pΠsχpp9�
P��8�/����	߀	���
����
~���^���>�x��Xf��8H��!d�ǁ�F��c��(��E��
�y���� Y~�!�΀"B�#i�$"}%I�%��')�'��)	�)��*�s+�ʀ,ҏ�-x��.�q�/X��0�S�1]Z�2r5�3=<�4R�5�61��6��88��9��:�Ā;��<��=��>��?��@e�A���BE�Cc��D.��EC~�FKG#`�G��H�IׄJ�uK�fL�WM�HN�9Ow*PpU�Q`F�RP7�S@(�T0�U 
�V��V��W�݀X�΀YϿ�Z���[��\��]��^��_x�`h�aX�bHsc8dd(UeFfq�gb�g�S�h�D�i�5�j�&�k��l��m���n��opۀpjqY�rI�s9�t)�u�v	�v��w�xـy�qz�b{���|�~�}�o�~�`�rQ���������EST�T@��PHP1AU�N¼��=�T� ��s�̷r�ͧU�	��	��b���)%\�)�� Eq� Fg G#|�GI^�I�e�~�p�~�p�WSTX���nh"Western Australia - most locationsPHP1??�N���� ��T���Wp̷V�ͧ9pΠsχpp9�
%I�%��')�'��)	�)����������EST�T@��PHP1??��N����'��T���^x̷]�ͧ@xΠzχ"xp@�
#P"��?�0��!�	�	��
�Ȉ� ��
��^���>�x��Xm��8O禈!k�Lj�M��j��/��L���y���� Y��!�Ո"B�#i�$"�%I�&f')�'��)	�)�d�*�z+�ш,Җ�-�(�.�x�/tE0�Z�1]a�2r<�3=C�4R�5%�62�6��88��9��:�ˈ;��<��=��>��?��@e�A���BE�Cc��D.��EC��FRG#g�G��H�I׋J�|K�mL�^M�ON�@Ow1Pp\�Q`M�RP>�S@/�T0 �U �V�V��W��X�ՈY�ƈZ���[��\��]��^��_x�`h�aX�bHzc8kd(\eMfx�gi�g�Z�h�K�i�<�j�-�k��l��m��n��op�pjqY�rI�s9�t)�u�v	�v��w�xهy�xz�i{���|���}�v�~�g�rX���������CST�T@��PHP1AU��N���� ��T���Wp̷V�ͧ9pΠsχpp9�
P��8�/����	߀	���
����
~���^���>�x��Xf��8H��!d�ǁ�F��c��(��E��
�y���� Y~�!�΀"B�#i�$"}%I�%��')�'��)	�)��*�s+�ʀ,ҏ�-x��.�q�/X��0�S�1]Z�2r5�3=<�4R�5�61��6��88��9��:�Ā;��<��=��>��?��@e�A���BE�Cc��D.��EC~�FKG#`�G��H�IׄJ�uK�fL�WM�HN�9Ow*PpU�Q`F�RP7�S@(�T0�U 
�V��V��W�݀X�΀YϿ�Z���[��\��]��^��_x�`h�aX�bHsc8dd(UeFfq�gb�g�S�h�D�i�5�j�&�k��l��m���n��opۀpjqY�rI�s9�t)�u�v	�v��w�xـy�qz�b{���|�~�}�o�~�`�rQ���������ESTU��e� New South Wales - most locationsPHP1??���x��� ��T���Wp̷V�ͧ9pΠsχp���~��Y�v����;V���?�p9�
P��8�/����	߀	���
����
~���^���>�x��Xf��8HO!d��1F��c��(��E��
�g'��� Y~�!�΀"B�#i�$"}%I�&_')�'�(��)Ԙ*�À+�z,���-�\.���/t>0mi�1]Z�2V�3=<�46h5�6J6��7�,8��9��:�Ā;�*�<��=��>��?~�@e�A^ЀBE�C>��D.��E��FKG�G��H�IׄJ�uK�fL�WM�HN�9Ow*PpU�Q`F�RP7�S@(�T0�U 
�V��V��W�݀X�΀YϿ�Z���[��\��]��^��_x�`h�aX�bHsc8dd(UeFfq�gb�g�S�h�D�i�5�j�&�k��l��m���n��opۀpjqY�rI�s9�t)�u�v	�v��w�xـy�qz�b{���|�~�}�o�~�`�rQ���������EST�T@��PHP1??��N���� ��T���Wp̷V�ͧ9pΠsχpp9�
P��8�/����	߀	���
����
~���^���>�x��Xf��8H矀!d�ǁ�F��c��(��E��
�y���� Y~�!w�"B�#i�$"}%I�&_')�'��)	�)��*�s+�ʀ,ҏ�-x��.�q�/t>0�S�1]Z�2r5�3=<�4R�5�61��6��88��9��:�Ā;��<��=��>��?��@e�A���BE�Cc��D.��EC~�FKG#`�G��H�IׄJ�uK�fL�WM�HN�9Ow*PpU�Q`F�RP7�S@(�T0�U 
�V��V��W�݀X�΀YϿ�Z���[��\��]��^��_x�`h�aX�bHsc8dd(UeFfq�gb�g�S�h�D�i�5�j�&�k��l��m���n��opۀpjqY�rI�s9�t)�u�v	�v��w�xـy�qz�b{���|�~�}�o�~�`�rQ���������EST�T@��PHP1??�N¼��=�T� ��s�̷r�ͧU�	��	��b���)%\�)�� Eq� Fg G#|�GI^�I�e�~�p�~�p�WST�T@��PHP1??��N����'��T���^x̷]�ͧ@xΠzχ"xp@�
#P"��?�0��!�	�	��
�Ȉ� ��
��^���>�x��Xm��8O��!k�Lj�M��j��/��L���y���� Y��!�Ո"B�#i�$"�%I�%��')�'��)	�)��*�z+�ш,Җ�-x��.�x�/X��0�Z�1]a�2r<�3=C�4R�5%�62�6��88l��8��9��:�ˈ;��<��=��>��?��@e�A���BE�Cc��D.��EC��FRG#g�G��H�I׋J�|K�mL�^M�ON�@Ow1Pp\�Q`M�RP>�S@/�T0 �U �V�V��W��X�ՈY�ƈZ���[��\��]��^��_x�`h�aX�bHzc8kd(\eMfx�gi�g�Z�h�K�i�<�j�-�k��l��m��n��op�pjqY�rI�s9�t)�u�v	�v��w�xهy�xz�i{���|���}�v�~�g�rX���������CST�T@��PHP1??�����f��\���PP�ސ@�8�P��P���ܹu@�1Pޛ�@�ݶP�TO@��z@���P�:��QHP���@�
������"P����ɪPx��Q� 3�!��P"�H`P���p�������	���
LMTACSTACTAMT�T@��PHP1??'
��ed�;и�2���& ��f�8� ��� �ӠܹK� ޛ��݌ �T%��P��V ���Q �Ƿ�
Ġ���� ��o�ɀ xɐ�'� 3��!�[ "��#X�#�b%7�%Թ7���8�w9�� 9��;��<o������������	LMTFNSTFNT�T@��PHP1??�
��r��I�@���40��t �8�0��0��ܹY �0ޛ� �ݚ0�T3 �Z	0�^ ��d0���Q,0��� �
Ұ������0��}�Ɏ0xנ�5� 3Ϡ!�i0"Ƞ#X�#�p %7�%�� '!0'��)�0)�� *�
�+k2�,��0-f� .��0/F� 0�y01M�2W �3j 48T04�� 6 06�h�7�ư8�� 9��0:�,�;��<o�=đ0>N�?��0@.ҠA��0B� CQ�0C�� EMS�E��G�0G�� H���I�w Jڄ�K���L�f�M`u�N�H�OI� P�e0Q 9�RcG0S�TC)0T�8 V#0V� X�0X�� Y��0Z�� [��\h� ]�Ͱ^H� _���`1��ak��b��cKs�c�� e+U�e�d�gr0g�F�h�T0i�c j�60kzE l�0mZ' n��0o:	 p}�q� r\��r�� t<ڰtٯ v��v�ˠw���x�� y܀�z���{ŝ0|bq�}�0~K� �a0���L��������	LMTBRSTBRT�T@��PHP1??
��D�W�N���B@�ނ0�8�@��@��ܹg0�#@ޛ�0�ݨ@�TA0�
��l0��r@�,��Q:@���0�
�����@����ɜ@x��C� 3ݰ!�w@"ְ,��@-f�0��Ǽ�������	LMTAMSTAMT�T@��PHP1??��񫠚����0���`��#P��@�0�0�zV@�0�S����R��<�@��4���@��:0���@���0���@���0��E@�U0���@�Kp���~@�$�0�n`@����NB@���$������0�]@��1���@���0���^G0�@�P�0�mp@�0�0�r<@�b0�6n��~��P���`�ˈ�`�#�p�`���u���@���U��� ���5������|���u���{`ݩtP޾]`߉VP�?`�i8P�~!`�IP�G����'���������������챾��`��P�o�`�_kP�Oj`�?MP�/L`�(i�.`�K��J��-��,�������������w��p�P`�`P�P@�`0�P �`	�P
�`
�xP�w`ٔ�
�Y`�v��u��X��W�y:�i9�Y�I�8��(��"P���P�`��P��`��P��`��P u��!��P"U��#j��$5��%J��&��'*e�'��`)
G�)ޗ`*�)�+�y`,�FP-�[`.�(P/~=`0�
P1gY�2r�P3G;�4R�P5'�62�P7��8��8���9���:���;ې�<��`=�r�>��`?�T�@o�`A�qPBO�`CdSPD/h`ED5PE��G-Q�G�|�I
3�I�^�J��K�{`L�2PM|]`N�PO\?`P��PQ<!`Ru�PS`TU�PT��`V5�PV��X��X���Y���Z���[�|�\���]�^�^d��_�@�`M�`a�]Pb-�`cg?Pd
j`eG!Pe�L`g'Pg�.`i�Pi�`j��Pk�,�l���mv�n���oU��p���q5��ro��s��tOk�t��`v8�Pv޳`xjPx��`y�LPz�w`{�.P|~Y`}�P~^;`��P���`���������������LMTADTASTAWTAPT�T@��PHP1??����úP������?p ;��O��ˈ���#�p�a	�ӈh�S`��U�� ���5������������\��ޗ�ݩ�p޾y�߉rp�[��iTp�~=��I6p�^��)p�G<�4��'�������������������o���1b�J��v��g��X��I��:��+���
��w�q�a�P��@�0ހ π	��
��
��ٿ
�u��������tyeiVYGI89))"E��'����	������܀�̀ v!���"U�#j�$5�%J�&�'*�'�р)
r)޳�*�T+���,�p�-�w�.�R�/~Y�0�4�1gv2s�3GX4R��5':62ڀ78�8�9��:��;ۻ<���=��>�ހ?�@o��A���BO��Cd}�C�o�D/��EDQpE�G-m�GәI
O�I�{J�1�K���L�NpM|y�N�0pO\[�P�pQ<=�Ru�pS�TU�pT��V5�pV�X��X�Y���Z��[ޘ�\��]�z�^d�_�\�`M€a�ypb-��cg[pd
��eG=pe�h�g'pg�J�ipi�,�j��pk�Il��mv+n���oV
p���q5�ro��s�tO��t��v8�pv�πx�px���y�hpz���{�Jp|~u�}�,p~^W��p������������������������CDTCSTCWTCPT�T@��PHP1??����p��1`��.ȡ��@���U�@��]�(x`�f?�N�F!��0��p��M`���p��/`�܍p��`��op�~-౜Qp�gJ`�|3p�G,`�\p�'`�;�p��`�%���`�����������Ĺ𿏲���o��„}��Ov��d_��/X��M|p�:��-^pˈ�p�#�p�`���u���@���U��� ���5������n��3v@��p�t`�މpݩ�`޾kp߉d`�Mp�iF`�~/p�I(`�^p�)
`�G-��&��'���������������ֶ��Ƶ���`��p�`�p��`�o�p�_y`�Oxp�?[`�/Zp�(w�<p�Y�X��;��:�����������w��p�``�pP�`@�p0�` �p	�`
�p
�`�p٢�
�gp�������f��e�yH�iG�Y*�I)�9�)�")`��`�
p��`��p��`��p��` v�!��`"U��#j��$5��%J��&��'*s�'��p)
U�)ޥp*�7�+��p,�T`-�ip.�6`/~Kp0�`1gg�2r�`3GI�4R�`5'+�62�`7
�8��8���9���:���;۞�<��p=���>��p?�b�@o�pA�`BO�pCda`D/vpEDC`E��G-_�Gӊ�I
A�I�l�J�#�K��pL�@`M|kpN�"`O\MpP�`Q</pRu�`SpTU�`T��pV5�`V��X��X���Y���Z���[ފ�\���]�l�^d��_�N�`M�pa�k`b-�pcgM`d
xpeG/`e�Zpg'`g�<pi�`i�pj��`k�:�l���mv�n���oU��p���q5��ro��s��tOy�t��pv8�`v�pxx`x��py�Z`z��p{�<`|~gp}�`~^Ip�`�������������EDTESTEWTEPT�T@��PHP1??5���������M��eO�0H�E1�*�%���0p�����p��`�r��a���Q���8�`�1���!����p�
�`��p��`ˉ��#�p�a�c��So�U�� ��5��������Ð���ޥ�ݩ��޾��߉���i��ib��~K��ID��^-��)&��GJ�C�',��%���������������������������������LMTMDTMSTMWTMPTCST�T@��PHP1??���������M������҅���萣��jʐ�5À�S�����3����ˉ��#�p�a�U�� ���u��X��9��a�P��@��0ހ ݐ	��
��
�ࡐٿ
�����������yeidYGIF9))("E�	
'��&��	��������̀ v!���"U�#j�$5�%J�&�'*�'�ߐ)
r)��*�T+���,�p�-���.�R�/~g�0�4�1g�2s�3Gf4R��5'H62ڀ7*8�8�9��:��;ۻ<�
�=��>��?�@oΐA���BO��Cd}�D/��ED_�E��G-|GӧI
^I��J�@K���L�\�M|��N�>�O\i�P� �Q<K�Rv�S-�TU�T��V5ƀV�,X�X�Y��Z��[ާ\��]��^d�_�k`MАa���b-��cgi�d
��eGK�e�v�g'-�g�X�i�i�:�j��k�Wl�mv9n��oVp��q5�ro�s�tO�t���v8��v�ݐx��x���y�v�z���{�X�|~��}�:�~^e�����������������������LMTMDTMSTMWTMPT�T@��PHP1??���b����~���|���ܡ8�L��\���L�t�\�d�L�^ܧD�L�=�ܩ$�L��ܫ�L���ܬ�fL�ݟܮ̯͂��ܰ�ḏ��\��F̳��\�m(̵fb\�M
̷FD\�,�̹&&\�	L�Bܻ��L��$ܽ��L��Ml��������18�y�˜8�YѨ�w�8�9���a�����@���(� ո��(����#�p�`��ӈD��JH�h&��)�H�H��	�H�'����H�X������tXݩmH޾VX߉OH�8X�i1H�~X�IH�]�X�(�H�G����&����������������챷��Ơ�HﯽX�H�X��H�o�X�_dH�OcX�?FH�/EX�(b�'X�D��C��&��%��������������w��p�H`�XP�H@�X0�H �X	�H
�X
�qH�pXٍ�
�RX�o��n��Q��P�y3�i2�Y�I�8��(��"H���H�X��H��X��H��X��H u��!�bd"U��#jp�$5��%J`�&u�'*B�'��t)
$�)�tt*��+�Vt,�#d-�8t.�d/~t0��d1g6�2r�d3G�4R�d5&��62�d7��8��8��9���:Ơ�;�m�<��t=�O�>��t?�1�@o�tA�NdBOctCd0dD/EtEDdE�w�G-.�G�Y�I
�I�;�J���K�XtL�dM|:tN��dO\tP��dQ;�tRu�dS�tTU�dT��tV5ydV���X��X��Y�w�Z���[�Y�\���]�;�^df�_��`M�ta�:db-etcgdd
GteF�de�)tg&�dg�ti�di��tj�dk�	�l��mu��n���oU��p���q5��rof�s��tOH�t��tv8edvސtxGdx�rty�)dz�Tt{�d|~6t}��d~^t��d��ܤ��Δ��������������������NDTNSTNPTNWTNDDT�T@��PHP1??�������[�ˉ��#�p�a&�v �S}�U� � ��5� ���� ���Ѡ���޳�ݩ��޾��߉���w��ip��~Y��IR��^;��)4��GX �Q�': ��3� ���� ���� �����q��ޠ����o���_���O���?���/���(��f������ ��f��e ��H��G ��*�) �x q(�a'�Q
�A	�0� �	ΐ
͠
�௠��
������� ���� ysir YUIT 97)6 "S�	 5��4������������ې v+ !���"V
 #j�$5� %J�&� '*�'��)
�)�Ϡ*�b+���,�~�-���.�`�/~u�0�B�1g� 2s$�3Gt 4S�5'V 62�78 88� 9��:� ;��<��=��>���?��@oܠA���BO��Cd��D/��EDm�E�� G-�Gӵ I
lI�� J�NK���L�j�M|��N�L�O\w�P�.�Q<Y�Rv�S;�TU�T��V5ԐV�: X�X� Y��Z�� [޵\�� ]��^d� _�y`Mޠa���b-��cgw�d
��eGY�e턠g';�g�f�i�i�H�j�k�e l�mvG n��oV) p��q6 ro�s� tO�t�	�v8��v��x��x�͠y���z���{�f�|~��}�H�~^s��*�����������������PDTPSTPWTPPT�T@��PHP1??5���������M��eO�0H�E1�*�%���0p�����p��`�r��a���Q���8�`�1���!����p�
�`��p��`ˉ��#�p�a�c��So�U�� ��5��������Ð���ޥ�ݩ��޾��߉���i��ib��~K��ID��^-��)&��GJ�C�',��%���������������������������������LMTMDTMSTMWTMPTCST�T@��PHP1??~��˰��#������Ҁˉ(��#�p�a4 �/v��(��i�ir YUIT 97)6 "S�	 5��4������������ې v+ !���"V
 #j�$5� %J�&� '*�'��)
�)�Ϡ*�b+���,�~�-���.�`�/~u�0�B�1g� 2s$�3Gt 4S�5'V 62�78 88� 9��:� ;��<��=��>���?��@oܠA���BO��Cd��D/��EDm�E�� G-�Gӵ I
lI�� J�NK���L�j�M|��N�L�O\w�P�.�Q<Y�Rv�S;�TU�T��V5ԐV�: X�X� Y��Z�� [޵\�� ]��^d� _�y`Mޠa���b-��cgw�d
��eGY�e턠g';�g�f�i�i�H�j�k�e l�mvG n��oV) p��q6 ro�s� tO�t�	�v8��v��x��x�͠y���z���{�f�|~��}�H�~^s��*��������p��������������������YDTYSTYWTYPTYDDTPSTPDT�T@��PHP1??�	�`����ٮ��������������	q���Kͩ�΢Cϒ4Ђ%�r�N@�
�c���E�t6�d'�T�MD3��#�ܐ͐�㯐Ӡ�Ñ���������|� lr!\c"LT#<E$,6%'&'C�'�4�(�%�)��*��+���,��-�ڐ.�ː/t��0d��1]�2r�3=�4R�5�62x6�8��8�a9�v�:�C;�X�<�_�=�:�>�A�?��@f#�A�9BF�CdD%�EC�FɐG#�G��I�I��J�K��L̿�M��N���OnnP���QW��Rle�S7l�TLG�UN�V,)�V�0�XFX��Y�(Z��[�
\�]��^�_��`_�a}�b?�c]̐d�e=��f��g��g藐h�r�i�y�j�T�k�[�l�qm�=�n�Soh�p�5qQ<rfs1tE�uv/�v��x��x��y�ِz��{λ�|�}���~y����  CESTCET�T@��PHP1??�
�$iƛ\�P�qF�q��^wƱw=@�AгXp��"4P�9�@�gз���P��\��� P�n@�l���ɰ�v�P��<@�������rܰuP�@I�U2� +�>O@
��@���@	�Ѱ
�@��0��@
��0��@h�0��H�0f��(v0F����&{��t�]��V��?��8��\@���>@p��� @ 0!o@"9�0#E��$�0%8�&��&�'١0(��)½�*צ�+���,���-���.�j�/bc�0��@1BE�2`i@3=�04@K@5D06
�@7հ8@8�09�+�:��0;�
�<��0=��>j�0?��@SʰAh��B3��CH��D��E1�@E�p�G�@G�0H�v@I�o0J�X@K��L�:@M|30N�@O\0Pz8�Q;�0RZ�S�0T9��U��V�V�װW���XĹ�Y��@Z���[¿@\�}�]��@^m�0_��@`M|0abe@b-^0cBG@d
@0e+c�e�"0gE�g�0h�'�i� �j�	�k��l��mu�n�@oUưps�@q5��rS�@s��t3�@t��0v�@vމ0w�r@x�k0y܎�z�M0{�p�|~/0}�R�~gK�|4�����������������������������SMTCLTCLST�T@��PHP1??���@��n@�l���ɰ��<@�������rܰuP�@I�U2� +�>O@
��@���@	�Ѱ
�@��0��@
��0��@h�0��H�0f��(v0F����&{��t�]��V��?��8��\@���>@p��� @ 0!o@"9�0#E��$�0%8�&��&�'١0(��)½�*צ�+���,���-���.�j�/bc�0��@1BE�2`i@3=�04@K@5D06
�@7հ8@8�09�+�:��0;�
�<��0=��>j�0?��@SʰAh��B3��CH��D��E1�@E�p�G�@G�0H�v@I�o0J�X@K��L�:@M|30N�@O\0Pz8�Q;�0RZ�S�0T9��U��V�V�װW���XĹ�Y��@Z���[¿@\�}�]��@^m�0_��@`M|0abe@b-^0cBG@d
@0e+c�e�"0gE�g�0h�'�i� �j�	�k��l��mu�n�@oUưps�@q5��rS�@s��t3�@t��0v�@vމ0w�r@x�k0y܎�z�M0{�p�|~/0}�R�~gK�|4����x��������	����	��������	EMTEASTEASST�T@��PHP1??���,����p������pˈ���#�p�a	�g��I��I��+�+��
��
���w�qpa�P�p@�0�p�'�	�p	��
�p�ٰ�
�u�������t��tyV�iVY8�I89�)"7p�p���p����p�܀��p v!��p"U�#j��$5�%J��&�'*��'�р)
c�)޳�*�E�+���,�bp-�w�.�Dp/~Y�0�&p1gv2sp3GX4R�p5':62�p78��8�9���:��;۬�<���=���>�ހ?�p�@o��A��pBO��CdopD/��EDQpE�G-m�GәI
O�I�{J�1�K���L�NpM|y�N�0pO\[�P�pQ<=�Ru�pS�TU�pT��V5�pV�X��X�Y���Z��[ޘ�\��]�z�^d�_�\�`M€a�ypb-��cg[pd
��eG=pe�h�g'pg�J�ipi�,�j��pk�Il��mv+n���oV
p���q5�ro��s�tO��t��v8�pv�πx�px���y�hpz���{�Jp|~u�}�,p~^W��p����������������CDTCSTCWTCPT�T@��PHP1??��b€�ӔP�t]@�[f���Q@�;H�ʼm��$eP̜O���P�;��ӣ�P���`��}@�=D��S���;���@�ũ��h@����������w��p�@`�P5�@�PH@ �P�{�
�P
�j@�iPن�
�KP�h���P}�@Q��f��1��F��[��&{�;d�]�F��?��(��\@�
��>@zSP� @ Z5P!o@"CQ�#N�@$#3�%.�@&��'�'��P(���)މP*״�+�kP,���-�MP.�x�/~/P0wZ�1gK�2W<�3G-�4@YP5�P62�P6��P8��8���9���:Ƶ�;ې�<��P=�r�>��P?�T�@o�PED5PE��G$PGܩPI�PI�P�J��PK�mPL��M|OPN���O\1PP���Q<PRl��S�PTL�T��PV,a�V���X~PX���Y�`PZ���[�BP\���]�$P^d{�_�P`M�Pa~"�b-zPc^�d
\Pe=��e�>Pg��g� Ph���i�Pj݌�k��lƩPmv�n��PoU��p�mPq5��rfOPs��tF1Pt��Pv/M�vޥPx/�x��Py��z�iP{���|~KP}���~^-P���������������������HMTCDTCST�T@��PHP1??z	
�c���E�t6�d'�T�MD3��#�ܐ͐�㯐Ӡ�Ñ���������|� lr!\c"LT#<E$,6%'&'C�'�4�(�%�)��*��+���,��-�ڐ.�ː/t��0d��1]�2r�3=�4R�5�62x6�8��8�a9�v�:�C;�X�<�_�=�:�>�A�?��@f#�A�9BF�CdD%�EC�FɐG#�G��I�I��J�K��L̿�M��N���OnnP���QW��Rle�S7l�TLG�UN�V,)�V�0�XFX��Y�(Z��[�
\�]��^�_��`_�a}�b?�c]̐d�e=��f��g��g藐h�r�i�y�j�T�k�[�l�qm�=�n�Soh�p�5qQ<rfs1tE�uv/�v��x��x��y�ِz��{λ�|�}���~y����*0 EESTEET�T@��PHP1??�	ȓ���{���������ˮ`��)�ͬ������Ϗf�Щy�ф`�Ҋ�P�6c`��-P��`��`�����m�����ﰳp�y%�����ZY�sp�;���U�p���6��E�p�����9����۾�����p����%�g�YpIa�p+�C�Հ$Ep�	
x�
�<������
�1p���d�t(���pU\np7�OP������Hp���{��<����pp�4����g� ��p!a�"z\p#D $b'p%%S�&<�p'�(��(纀*{�*�?�+�p,�s-���.���/��0k�1��2J��3_��4*��5?��6
��7(�`7��P9�`9ӱP:�`;��P<�|`=�uP>�^`?sWP@�z�A\s�Bq\�C<U�DQ>�E�PF1 �F�jPH�H��I���J��PK�`L��PM��`N��PO��`Pd�PQy�`RD�PSY�`T$�PU9k`VdPW"��W��Yi�Y�b�Z�K�[�D�\�-�]�&�^��_m�`�,`aV%Pbk`c6PdJ�`e�Pf*�`f��Ph
�`hխPi�`j��PkӲ�l���m���n~��o�v�p^o�qsX�r>Q�sS:�t3�u<W`vPPw9`w�2Px�`y�Pz�`{��P|��`}��P~��`f�P*0 *0 EESTEET�T@��PHP1??

�
�&������0���à���������� �v���e� �{Ƞ�N���?� ��?�%` �'� �*, ���Ӡ�� ��� ��l ��� ��N ��y���0 ��Р�pL��r���P.��IZ �0��2v���X���Ԡ�� ��� ��W ��� ������� �� �x� �z� �Xy �Q���8[ �:� �X֠��	��I��!��N��,( �.� �� �p ��� ������ ���޴�߮ �̠�rH��kt �R*��T���2��=� �) �T�� �q ��� ��S �� �� �g��} �aI��_ �Jf �_A �!
��?# �� ��Ѡ��� ��������{���ǻpp� )X P� 	: 0� � 	l 	� 
�N ���0 
���� qޠ�.�Q��y�1��X�#�8Ɛ͐��㯐���Ñ���������k lr!�M"LT#a/$,6%JK�&'*-�'�4�)
�)��*��+���,�Ӑ-�ڐ.���/t��0���0�$1]�2r�3=�4R�5�62x6�8��8�a9�v�:�C;�X�<�_�=�:�>�A�?��@f#�A�9BF�CdD%�EC�FɐG#�G��I�I��J�K��L̿�M��N���OnnP���QW��Rle�S7l�TLG�UN�V,)�V�0�XFX��Y�(Z��[�
\�]��^�_��`_�a}�b?�c]̐d�e=��f��g��g藐h�r�i�y�j�T�k�[�l�qm�=�n�Soh�p�5qQ<rfs1tE�uv/�v��x��x��y�ِz��{λ�|�}���~y����																																																										���DMTISTBSTGMT�T@��PHP1??����EST�T@��PHP1??���p���`��p���`ˈ�p�#�p�`��X��;��:�����������w��p�``�pP�`@�p0�`�p	�`	���
�`�p٢�
�gp�������f��e�yH�iG�Y*�I)�9�)�")`��`�
p��`��p��`��p��` v�!��`"U��#j��$5��%J��&��'*s�'��p)
U�)ޥp*�7�+��p,�T`-�ip.�6`/~Kp0�`1gg�2r�`3GI�4R�`5'+�62�`7
�8��8���9���:���;۞�<��p=���>��p?�b�@o�pA�`BO�pCda`D/vpEDC`E��G-_�Gӊ�I
A�I�l�J�#�K��pL�@`M|kpN�"`O\MpP�`Q</pRu�`SpTU�`T��pV5�`V��X��X���Y���Z���[ފ�\���]�l�^d��_�N�`M�pa�k`b-�pcgM`d
xpeG/`e�Zpg'`g�<pi�`i�pj��`k�:�l���mv�n���oU��p���q5��ro��s��tOy�t��pv8�`v�pxx`x��py�Z`z��p{�<`|~gp}�`~^Ip�`�������������EDTESTEWTEPT�T@��PHP1??GMT�T@��PHP1??GMT�T@��PHP1??GMT�T@��PHP1??GMT�T@��PHP1??GMT-1�T@��PHP1??����GMT+1�T@��PHP1??��GMT-10�T@��PHP1??��s`GMT+10�T@��PHP1??��GMT-11�T@��PHP1??��ePGMT+11�T@��PHP1??��GMT-12�T@��PHP1??��W@GMT+12�T@��PHP1??��GMT-13�T@��PHP1??��GMT-14�T@��PHP1?? GMT-2�T@��PHP1??����GMT+2�T@��PHP1??*0GMT-3�T@��PHP1??����GMT+3�T@��PHP1??8@GMT-4�T@��PHP1??���GMT+4�T@��PHP1??FPGMT-5�T@��PHP1??����GMT+5�T@��PHP1??T`GMT-6�T@��PHP1??����GMT+6�T@��PHP1??bpGMT-7�T@��PHP1??����GMT+7�T@��PHP1??p�GMT-8�T@��PHP1??����GMT+8�T@��PHP1??~�GMT-9�T@��PHP1??���pGMT+9�T@��PHP1??GMT�T@��PHP1??UCT�T@��PHP1??UTC�T@��PHP1??UTC�T@��PHP1??UTC�T@��PHP1NL

�
�.���\�ٸ�����%����A��v��p#��V��P��6��%[��'���^㌩����Z�煌�'���g���f��I��Ι���+�����pH��R�P*�s���0�T����@x�����q���쌼����Ό��،������]��x��§ˌ��]\�Xtp��p�8Vp�`���!r��D�P��Kͩ�΢Cϒ4Ђ%�r�N@�
*�p
�c���E�t6�d'�T�MD3��#�ܐ͐�㯐Ӡ�Ñ���������|� lr!\c"LT#<E$,6%'&'C�'�4�(�%�)��*��+���,��-�ڐ.�ː/t��0d��1]�2r�3=�4R�5�62x6�8��8�a9�v�:�C;�X�<�_�=�:�>�A�?��@f#�A�9BF�CdD%�EC�FɐG#�G��I�I��J�K��L̿�M��N���OnnP���QW��Rle�S7l�TLG�UN�V,)�V�0�XFX��Y�(Z��[�
\�]��^�_��`_�a}�b?�c]̐d�e=��f��g��g藐h�r�i�y�j�T�k�[�l�qm�=�n�Soh�p�5qQ<rfs1tE�uv/�v��x��x��y�ِz��{λ�|�}���~y����	




























































�������   NSTAMTNETNESTCETCEST�;�"�PHP1ADk
�A�������|� lr!\c"LT#<E$,6%'&'C�'�4�(�%�)��*��+���,��-�ڐ.�ː/t��0d��1]�2r�3=�4R�5�62x6�8��8�a9�v�:�C;�X�<�_�=�:�>�A�?��@f#�A�9BF�CdD%�EC�FɐG#�G��I�I��J�K��L̿�M��N���OnnP���QW��Rle�S7l�TLG�UN�V,)�V�0�XFX��Y�(Z��[�
\�]��^�_��`_�a}�b?�c]̐d�e=��f��g��g藐h�r�i�y�j�T�k�[�l�qm�=�n�Soh�p�5qQ<rfs1tE�uv/�v��x��x��y�ِz��{λ�|�}���~y���� WETCETCEST�-���PHP1GR		�	��!��|��Ư���c���P��KͪL�΢�ϓip��`߷
P	�^`�`ͮ��
�U��]��7�j�d{�R��F�`3�P#�ܐ͐�㯐Ӡ�Ñ���������|� lr!\c"LT#<E$,6%'&'C�'�4�(�%�)��*��+���,��-�ڐ.�ː/t��0d��1]�2r�3=�4R�5�62x6�8��8�a9�v�:�C;�X�<�_�=�:�>�A�?��@f#�A�9BF�CdD%�EC�FɐG#�G��I�I��J�K��L̿�M��N���OnnP���QW��Rle�S7l�TLG�UN�V,)�V�0�XFX��Y�(Z��[�
\�]��^�_��`_�a}�b?�c]̐d�e=��f��g��g藐h�r�i�y�j�T�k�[�l�qm�=�n�Soh�p�5qQ<rfs1tE�uv/�v��x��x��y�ِz��{λ�|�}���~y����<*0 	
 *0 	*0 	AMTEESTEETCETCEST�B�6��PHP1??�
�&���� ��0���à���������� �v���e� �{Ƞ�N���?� �%` �'� �*, ���Ӡ�� ��� ��l ��� ��N ��y���0 ��Р�pL��r���P.��IZ �0��2v���X���Ԡ�� ��� ��W ��� ������� �� �x� �z� �Xy �Q���8[ �:� �X֠��	��&�ʗY�����w;�ͱ��`Xϐ��n^��r�2�i� �c)��I� �!��B������N� ���.� �� �p ��� ������ ���޴�߮ �̠�rH��kt �R*��T���2��=� �) �T�� �q ��� ��S �� �� �g��} �aI��_ �Jf �_A �!
��?# �� ��Ѡ��� ��������{���ǻpp� )X P� 	: 0� � 	l 	� 
�N ���0 
���� qޠ�.�Q��y�1��X�#�8Ɛ͐��㯐���Ñ���������k lr!�M"LT#a/$,6%JK�&'*-�'�4�)
�)��*��+���,�Ӑ-�ڐ.���/t��0���0�$1]�2r�3=�4R�5�62x6�8��8�a9�v�:�C;�X�<�_�=�:�>�A�?��@f#�A�9BF�CdD%�EC�FɐG#�G��I�I��J�K��L̿�M��N���OnnP���QW��Rle�S7l�TLG�UN�V,)�V�0�XFX��Y�(Z��[�
\�]��^�_��`_�a}�b?�c]̐d�e=��f��g��g藐h�r�i�y�j�T�k�[�l�qm�=�n�Soh�p�5qQ<rfs1tE�uv/�v��x��x��y�ِz��{λ�|�}���~y���� BSTGMTBDST�T@��PHP1RSx	�5���Kͩ�΢Cϒ4Ђ%�pѡ��N@�E_p㯐Ӡ�Ñ���������|� lr!\c"LT#<E$,6%'&'C�'�4�(�%�)��*��+���,��-�ڐ.�ː/t��0d��1]�2r�3=�4R�5�62x6�8��8�a9�v�:�C;�X�<�_�=�:�>�A�?��@f#�A�9BF�CdD%�EC�FɐG#�G��I�I��J�K��L̿�M��N���OnnP���QW��Rle�S7l�TLG�UN�V,)�V�0�XFX��Y�(Z��[�
\�]��^�_��`_�a}�b?�c]̐d�e=��f��g��g藐h�r�i�y�j�T�k�[�l�qm�=�n�Soh�p�5qQ<rfs1tE�uv/�v��x��x��y�ِz��{λ�|�}���~y����   CETCESTͽE1�PPHP1DE��`����ٮ��������������	q���Kͩ�΢Cϒ4Ђ%�rѶ��X��ҡO��4��c��K#��9� �g�ըs�)��,�	������xΗ�MD3��#�ܐ͐�㯐Ӡ�Ñ���������|� lr!\c"LT#<E$,6%'&'C�'�4�(�%�)��*��+���,��-�ڐ.�ː/t��0d��1]�2r�3=�4R�5�62x6�8��8�a9�v�:�C;�X�<�_�=�:�>�A�?��@f#�A�9BF�CdD%�EC�FɐG#�G��I�I��J�K��L̿�M��N���OnnP���QW��Rle�S7l�TLG�UN�V,)�V�0�XFX��Y�(Z��[�
\�]��^�_��`_�a}�b?�c]̐d�e=��f��g��g藐h�r�i�y�j�T�k�[�l�qm�=�n�Soh�p�5qQ<rfs1tE�uv/�v��x��x��y�ِz��{λ�|�}���~y����  *0	*0	 CESTCETCEMT�p'
�PHP1SK�	�`����ٮ��������������	q���Kͩ�΢Cϒ4�n^��y�ҡOӀ��I��L8�)��,�	��p��x�dpd'�T�MD3��#�ܐ͐�㯐Ӡ�Ñ���������|� lr!\c"LT#<E$,6%'&'C�'�4�(�%�)��*��+���,��-�ڐ.�ː/t��0d��1]�2r�3=�4R�5�62x6�8��8�a9�v�:�C;�X�<�_�=�:�>�A�?��@f#�A�9BF�CdD%�EC�FɐG#�G��I�I��J�K��L̿�M��N���OnnP���QW��Rle�S7l�TLG�UN�V,)�V�0�XFX��Y�(Z��[�
\�]��^�_��`_�a}�b?�c]̐d�e=��f��g��g藐h�r�i�y�j�T�k�[�l�qm�=�n�Soh�p�5qQ<rfs1tE�uv/�v��x��x��y�ِz��{λ�|�}���~y����   CESTCET���,ƲPHP1BE

�
�DI��%p����ٮ���������������0�`��~�p�.�zL�5��^#p�%5�'��*�}��4p��_��P��A�ɧ�#�Op���k�pL��r���P.��IZ �0��2v���㠹�Ԡ�֋ ��� ��� ��� ������� �� �x� �h� �Xy �?/��8[ �:� �X֠��	��J ��Kͩ�΢Cϒ4�[�`�n^��r�N@�ӑ@�K#�
*�p
�c���E�t6�d'�T�MD3��#�ܐ͐�㯐Ӡ�Ñ���������|� lr!\c"LT#<E$,6%'&'C�'�4�(�%�)��*��+���,��-�ڐ.�ː/t��0d��1]�2r�3=�4R�5�62x6�8��8�a9�v�:�C;�X�<�_�=�:�>�A�?��@f#�A�9BF�CdD%�EC�FɐG#�G��I�I��J�K��L̿�M��N���OnnP���QW��Rle�S7l�TLG�UN�V,)�V�0�XFX��Y�(Z��[�
\�]��^�_��`_�a}�b?�c]̐d�e=��f��g��g藐h�r�i�y�j�T�k�[�l�qm�=�n�Soh�p�5qQ<rfs1tE�uv/�v��x��x��y�ِz��{λ�|�}���~y����																																																													  
 WETCETCESTWEST��E5PHP1RO�
����>�`��`�ߍ`��~`�ȩླྀ�ྨ�࿘|�m�x^��hO��X@��H1��8"��(�����`S�PM�3�`#݀΀���㡀Ӓ�Ã���������|s ld!\U"LF#<7$,(%&
'5�'��'�
`(�`)��`*��`+��`,��`-$��-��`.��P/t�`0duP1]��2r{�3=�4R�5�62x6�8��8�a9�v�:�C;�X�<�_�=�:�>�A�?��@f#�A�9BF�CdD%�EC�FɐG#�G��I�I��J�K��L̿�M��N���OnnP���QW��Rle�S7l�TLG�UN�V,)�V�0�XFX��Y�(Z��[�
\�]��^�_��`_�a}�b?�c]̐d�e=��f��g��g藐h�r�i�y�j�T�k�[�l�qm�=�n�Soh�p�5qQ<rfs1tE�uv/�v��x��x��y�ِz��{λ�|�}���~y����x*0 	*0 	*0 	BMTEESTEET�!:{�PHP1HU�	�`����ٮ������0Xp��)������� �dy��p( �Z���<���Kͩ�΢Cϒ4Ђ%�pљx�ҍ^`�P���I��9��)����	������x��/���[⢨��Q�`��p�3%��t����`�T���M63��#�ܐ͐�㯐Ӡ�Ñ���������|� lr!\c"LT#<E$,6%'&'C�'�4�(�%�)��*��+���,��-�ڐ.�ː/t��0d��1]�2r�3=�4R�5�62x6�8��8�a9�v�:�C;�X�<�_�=�:�>�A�?��@f#�A�9BF�CdD%�EC�FɐG#�G��I�I��J�K��L̿�M��N���OnnP���QW��Rle�S7l�TLG�UN�V,)�V�0�XFX��Y�(Z��[�
\�]��^�_��`_�a}�b?�c]̐d�e=��f��g��g藐h�r�i�y�j�T�k�[�l�qm�=�n�Soh�p�5qQ<rfs1tE�uv/�v��x��x��y�ِz��{λ�|�}���~y����   CESTCET���/��PHP1MD�"�k�����>�`��`�ߍ`��~`�ȩླྀ�ྨ�࿘|�m�x^��hO��X@��H1��8"��(���ȼ�`�w}P��Kͩ�΢Cϒ4�N�`'���@�P�����C@̓�����������s�|d� lU�!\F�"L7�#<(�$,�%
�%�sP&C>�'�&�(��)`�`)��`*��P+��`,��P-��`.��P/t�`0duP1]��2r{�3=�4R�5�62x6�8��8�a9�v�:�C;�X�<�_�=�:�>�A�?��@f#�A�9BF�CdD%�EC�FɐG#�G��I�I��J�K��L̿�M��N���OnnP���QW��Rle�S7l�TLG�UN�V,)�V�0�XFX��Y�(Z��[�
\�]��^�_��`_�a}�b?�c]̐d�e=��f��g��g藐h�r�i�y�j�T�k�[�l�qm�=�n�Soh�p�5qQ<rfs1tE�uv/�v��x��x��y�ِz��{λ�|�}���~y����
	
	
	
	









































�x*0 
 
*0  8@*0*08@*0 
CMTBMTEESTEETCETCESTMSDMSK��>��PHP1DK�	��`�վ��CWp��Kͩ�΢Cϒ4Ђ%�r�$��y�����^�����Gɐ׿�Η�MD3��#�ܐ͐�㯐Ӡ�Ñ���������|� lr!\c"LT#<E$,6%'&'C�'�4�(�%�)��*��+���,��-�ڐ.�ː/t��0d��1]�2r�3=�4R�5�62x6�8��8�a9�v�:�C;�X�<�_�=�:�>�A�?��@f#�A�9BF�CdD%�EC�FɐG#�G��I�I��J�K��L̿�M��N���OnnP���QW��Rle�S7l�TLG�UN�V,)�V�0�XFX��Y�(Z��[�
\�]��^�_��`_�a}�b?�c]̐d�e=��f��g��g藐h�r�i�y�j�T�k�[�l�qm�=�n�Soh�p�5qQ<rfs1tE�uv/�v��x��x��y�ِz��{λ�|�}���~y����   CESTCET�E
%��PHP1IE

�
�&������0���à���������� �v���e� �{Ƞ�N���?� ��?�%` �'� �*, ���Ӡ�� ��� ��l ��� ��N ��y���0 ��Р�pL��r���P.��IZ �0��2v���X���Ԡ�� ��� ��W ��� ������� �� �x� �z� �Xy �Q���8[ �:� �X֠��	��I��!��N��,( �.� �� �p ��� ������ ���޴�߮ �̠�rH��kt �R*��T���2��=� �) �T�� �q ��� ��S �� �� �g��} �aI��_ �Jf �_A �!
��?# �� ��Ѡ��� ��������{���ǻpp� )X P� 	: 0� � 	l 	� 
�N ���0 
���� qޠ�.�Q��y�1��X�#�8Ɛ͐��㯐���Ñ���������k lr!�M"LT#a/$,6%JK�&'*-�'�4�)
�)��*��+���,�Ӑ-�ڐ.���/t��0���0�$1]�2r�3=�4R�5�62x6�8��8�a9�v�:�C;�X�<�_�=�:�>�A�?��@f#�A�9BF�CdD%�EC�FɐG#�G��I�I��J�K��L̿�M��N���OnnP���QW��Rle�S7l�TLG�UN�V,)�V�0�XFX��Y�(Z��[�
\�]��^�_��`_�a}�b?�c]̐d�e=��f��g��g藐h�r�i�y�j�T�k�[�l�qm�=�n�Soh�p�5qQ<rfs1tE�uv/�v��x��x��y�ِz��{λ�|�}���~y����																																																										���DMTISTBSTGMTڵ�	PHP1GI��&���� ��0���à���������� �v���e� �{Ƞ�N���?� �%` �'� �*, ���Ӡ�� ��� ��l ��� ��N ��y���0 ��Р�pL��r���P.��IZ �0��2v���X���Ԡ�� ��� ��W ��� ������� �� �x� �z� �Xy �Q���8[ �:� �X֠��	��&�ʗY�����w;�ͱ��`Xϐ��n^��r�2�i� �c)��I� �!��B������N� ���.� �� �p ��� ������ ���޴�߮ �̠�rH��kt �R*��T���2��=� �) �T�͐�㯐Ӡ�Ñ���������|� lr!\c"LT#<E$,6%'&'C�'�4�(�%�)��*��+���,��-�ڐ.�ː/t��0d��1]�2r�3=�4R�5�62x6�8��8�a9�v�:�C;�X�<�_�=�:�>�A�?��@f#�A�9BF�CdD%�EC�FɐG#�G��I�I��J�K��L̿�M��N���OnnP���QW��Rle�S7l�TLG�UN�V,)�V�0�XFX��Y�(Z��[�
\�]��^�_��`_�a}�b?�c]̐d�e=��f��g��g藐h�r�i�y�j�T�k�[�l�qm�=�n�Soh�p�5qQ<rfs1tE�uv/�v��x��x��y�ِz��{λ�|�}���~y���� 
 
BSTGMTBDSTCETCEST�v�
~�PHP1GG�
�&���� ��0���à���������� �v���e� �{Ƞ�N���?� �%` �'� �*, ���Ӡ�� ��� ��l ��� ��N ��y���0 ��Р�pL��r���P.��IZ �0��2v���X���Ԡ�� ��� ��W ��� ������� �� �x� �z� �Xy �Q���8[ �:� �X֠��	��&�ʗY�����w;�ͱ��`Xϐ��n^��r�2�i� �c)��I� �!��B������N� ���.� �� �p ��� ������ ���޴�߮ �̠�rH��kt �R*��T���2��=� �) �T�� �q ��� ��S �� �� �g��} �aI��_ �Jf �_A �!
��?# �� ��Ѡ��� ��������{���ǻpp� )X P� 	: 0� � 	l 	� 
�N ���0 
���� qޠ�.�Q��y�1��X�#�8Ɛ͐��㯐���Ñ���������k lr!�M"LT#a/$,6%JK�&'*-�'�4�)
�)��*��+���,�Ӑ-�ڐ.���/t��0���0�$1]�2r�3=�4R�5�62x6�8��8�a9�v�:�C;�X�<�_�=�:�>�A�?��@f#�A�9BF�CdD%�EC�FɐG#�G��I�I��J�K��L̿�M��N���OnnP���QW��Rle�S7l�TLG�UN�V,)�V�0�XFX��Y�(Z��[�
\�]��^�_��`_�a}�b?�c]̐d�e=��f��g��g藐h�r�i�y�j�T�k�[�l�qm�=�n�Soh�p�5qQ<rfs1tE�uv/�v��x��x��y�ِz��{λ�|�}���~y���� BSTGMTBDST�ȧ��PHP1FIu
�so��Q`̿��#�ܐ͐�㯐Ӡ�Ñ���������|� lr!\c"LT#<E$,6%'&'C�'�4�(�%�)��*��+���,��-�ڐ.�ː/t��0d��1]�2r�3=�4R�5�62x6�8��8�a9�v�:�C;�X�<�_�=�:�>�A�?��@f#�A�9BF�CdD%�EC�FɐG#�G��I�I��J�K��L̿�M��N���OnnP���QW��Rle�S7l�TLG�UN�V,)�V�0�XFX��Y�(Z��[�
\�]��^�_��`_�a}�b?�c]̐d�e=��f��g��g藐h�r�i�y�j�T�k�[�l�qm�=�n�Soh�p�5qQ<rfs1tE�uv/�v��x��x��y�ِz��{λ�|�}���~y����h*0 	*0 	HMTEESTEET�"�8�PHP1IM�
�&���� ��0���à���������� �v���e� �{Ƞ�N���?� �%` �'� �*, ���Ӡ�� ��� ��l ��� ��N ��y���0 ��Р�pL��r���P.��IZ �0��2v���X���Ԡ�� ��� ��W ��� ������� �� �x� �z� �Xy �Q���8[ �:� �X֠��	��&�ʗY�����w;�ͱ��`Xϐ��n^��r�2�i� �c)��I� �!��B������N� ���.� �� �p ��� ������ ���޴�߮ �̠�rH��kt �R*��T���2��=� �) �T�� �q ��� ��S �� �� �g��} �aI��_ �Jf �_A �!
��?# �� ��Ѡ��� ��������{���ǻpp� )X P� 	: 0� � 	l 	� 
�N ���0 
���� qޠ�.�Q��y�1��X�#�8Ɛ͐��㯐���Ñ���������k lr!�M"LT#a/$,6%JK�&'*-�'�4�)
�)��*��+���,�Ӑ-�ڐ.���/t��0���0�$1]�2r�3=�4R�5�62x6�8��8�a9�v�:�C;�X�<�_�=�:�>�A�?��@f#�A�9BF�CdD%�EC�FɐG#�G��I�I��J�K��L̿�M��N���OnnP���QW��Rle�S7l�TLG�UN�V,)�V�0�XFX��Y�(Z��[�
\�]��^�_��`_�a}�b?�c]̐d�e=��f��g��g藐h�r�i�y�j�T�k�[�l�qm�=�n�Soh�p�5qQ<rfs1tE�uv/�v��x��x��y�ِz��{λ�|�}���~y���� BSTGMTBDST��׵PHP1TR		�	�����`�վТec�{�P�N�`�?�Ц%'�'Ъ((`��Ы����1P��`����J�`�΀P�ˮ`��P�q���k	PӢ9`�CP�L
��){��+���	]���`��?���`��\P���`ݳ����`�d��h`�8����k�����K��i�`4�Pn�p9���u	��	�:�
���`�$P
�9`��P�`�sPg��M6Gz�#݀'\���>���Pܔ�����P��|s ld!\U"LF#<7$,(%&
'5�'�p(�	p)�p*��p+��p,��p-��p.��p/t�p0d�p1]��2r��3=��4Ry�5��62[�6�b�8xp8�D�9�Zp:�&�;�<p<�Cp=�p>�%p?�p@fpA��BE�pCc��D%�pEC��E�2�FɐG#�G��I�I��J�K��L̿�M��N���OnnP���QW��Rle�S7l�TLG�UN�V,)�V�0�XFX��Y�(Z��[�
\�]��^�_��`_�a}�b?�c]̐d�e=��f��g��g藐h�r�i�y�j�T�k�[�l�qm�=�n�Soh�p�5qQ<rfs1tE�uv/�v��x��x��y�ِz��{λ�|�}���~y����h*0 	8@
*0*0 	*0 	IMTEESTEETTRSTTRT��b>ۚPHP1JE�
�&���� ��0���à���������� �v���e� �{Ƞ�N���?� �%` �'� �*, ���Ӡ�� ��� ��l ��� ��N ��y���0 ��Р�pL��r���P.��IZ �0��2v���X���Ԡ�� ��� ��W ��� ������� �� �x� �z� �Xy �Q���8[ �:� �X֠��	��&�ʗY�����w;�ͱ��`Xϐ��n^��r�2�i� �c)��I� �!��B������N� ���.� �� �p ��� ������ ���޴�߮ �̠�rH��kt �R*��T���2��=� �) �T�� �q ��� ��S �� �� �g��} �aI��_ �Jf �_A �!
��?# �� ��Ѡ��� ��������{���ǻpp� )X P� 	: 0� � 	l 	� 
�N ���0 
���� qޠ�.�Q��y�1��X�#�8Ɛ͐��㯐���Ñ���������k lr!�M"LT#a/$,6%JK�&'*-�'�4�)
�)��*��+���,�Ӑ-�ڐ.���/t��0���0�$1]�2r�3=�4R�5�62x6�8��8�a9�v�:�C;�X�<�_�=�:�>�A�?��@f#�A�9BF�CdD%�EC�FɐG#�G��I�I��J�K��L̿�M��N���OnnP���QW��Rle�S7l�TLG�UN�V,)�V�0�XFX��Y�(Z��[�
\�]��^�_��`_�a}�b?�c]̐d�e=��f��g��g藐h�r�i�y�j�T�k�[�l�qm�=�n�Soh�p�5qQ<rfs1tE�uv/�v��x��x��y�ِz��{λ�|�}���~y���� BSTGMTBDST�f�m�PHP1RU��`����ٮ��������������	q���Kͩ�΢Cϒ4Ђ%�pѕ�`Ҋ�P��&�'���@�P�����C@̓�����������s�|d� lU�!\F�"L7�#<(�$,�%
�&��''p'�p(��)��P*�@+��,�ۀ-�̀.���/t��0d��1]�2r�3=�4R�5�62j6�q8��8�S9�h�:�5;�J�<�Q�=�,�>�3�?��@f�A�+BE��Cd
D%ـEC�F��G#�G��I�IκJ�K��Ḻ�M�~N���On`P�u�QW|�RlW�S7^�TL9�U@�V,�V�"�X8X��Y�Z��[�\�]��^�_��`_�a}܀b?�c]��d�e=��f��g��g艀h�d�i�k�j�F�k�M�l�cm�/�n�Eoh�p�'qQ.rf	s1tE�u�v/�v��x�xжy�ˀz��{έ�|���}���~y���q�						













































  *0 8@	*0
*0
8@	*0 *0 CESTCETMSDMSKEESTEET���1�PMoscow-01 - KaliningradPHP1UAw��d��`��.���Kͩ�΢C�ͨp'���@�P�����C@̓�����������s�|d� lU�!\F�"L7�#<(�$,�%
�%�sP&�.�)��`*��P+��`,��P-��`.��P/t��0d��1]�2r�3=�4R�5�62x6�8��8�a9�v�:�C;�X�<�_�=�:�>�A�?��@f#�A�9BF�CdD%�EC�FɐG#�G��I�I��J�K��L̿�M��N���OnnP���QW��Rle�S7l�TLG�UN�V,)�V�0�XFX��Y�(Z��[�
\�]��^�_��`_�a}�b?�c]̐d�e=��f��g��g藐h�r�i�y�j�T�k�[�l�qm�=�n�Soh�p�5qQ<rfs1tE�uv/�v��x��x��y�ِz��{λ�|�}���~y����			










































� *0  8@*08@*0*0 KMTEETMSKCETCESTMSDEEST�H�A9most locationsPHP1PT����Kmp��ǀ���p�Ƀp�rp����_Tp���p�A�p�nop�#�O���p���ɧ�#�Op���k�p"p�r�p�Pp�2Lp��p���p��p�ȷ𽸨�_p������xl��h]��XN��?p�80��:���X�p���p�/p�� p��b�˵R����̀K��ܢ�͕4���K`�r���ſp�u�Ϭg��R��Х�p�T��ьI��2f�҅�p�Y���I���9� �)� �� �	� �� �� ܹY ݲ��ޢu�ߒf��W��rH��b9��R*��B��2��!���) � � �� ��� ��� �� �   �z� �j� �c���S���C���3���#s��d��U���F��*
���7�t(�d�T�C��3��#�ܐ͐�㽠Ӡ�Ñ���������|� lr!\c"LT#<E$,6%'&'C�'�4�(�%�)��*��+���,��-�ڐ.�ː/t��0d��1]�2r�3=�4R�5�62x6�8��8�a9�v�:�C;�X�<�_�=�:�>�A�?��@f#�A�9BF�CdD%�EC�FɐG#�G��I�I��J�K��L̿�M��N���OnnP���QW��Rle�S7l�TLG�UN�V,)�V�0�XFX��Y�(Z��[�
\�]��^�_��`_�a}�b?�c]̐d�e=��f��g��g藐h�r�i�y�j�T�k�[�l�qm�=�n�Soh�p�5qQ<rfs1tE�uv/�v��x��x��y�ِz��{λ�|�}���~y����	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
���p		 
 	LMTWESTWETWEMTCETCEST�g���mainlandPHP1SIx	�5���Kͩ�΢Cϒ4Ђ%�pѡ��N@�E_p㯐Ӡ�Ñ���������|� lr!\c"LT#<E$,6%'&'C�'�4�(�%�)��*��+���,��-�ڐ.�ː/t��0d��1]�2r�3=�4R�5�62x6�8��8�a9�v�:�C;�X�<�_�=�:�>�A�?��@f#�A�9BF�CdD%�EC�FɐG#�G��I�I��J�K��L̿�M��N���OnnP���QW��Rle�S7l�TLG�UN�V,)�V�0�XFX��Y�(Z��[�
\�]��^�_��`_�a}�b?�c]̐d�e=��f��g��g藐h�r�i�y�j�T�k�[�l�qm�=�n�Soh�p�5qQ<rfs1tE�uv/�v��x��x��y�ِz��{λ�|�}���~y����   CETCESTϘ�(�PHP1GB�
�&���� ��0���à���������� �v���e� �{Ƞ�N���?� �%` �'� �*, ���Ӡ�� ��� ��l ��� ��N ��y���0 ��Р�pL��r���P.��IZ �0��2v���X���Ԡ�� ��� ��W ��� ������� �� �x� �z� �Xy �Q���8[ �:� �X֠��	��&�ʗY�����w;�ͱ��`Xϐ��n^��r�2�i� �c)��I� �!��B������N� ���.� �� �p ��� ������ ���޴�߮ �̠�rH��kt �R*��T���2��=� �) �T�� �q ��� ��S �� �� �g��} �aI��_ �Jf �_A �!
��?# �� ��Ѡ��� ��������{���ǻpp� )X P� 	: 0� � 	l 	� 
�N ���0 
���� qޠ�.�Q��y�1��X�#�8Ɛ͐��㯐���Ñ���������k lr!�M"LT#a/$,6%JK�&'*-�'�4�)
�)��*��+���,�Ӑ-�ڐ.���/t��0���0�$1]�2r�3=�4R�5�62x6�8��8�a9�v�:�C;�X�<�_�=�:�>�A�?��@f#�A�9BF�CdD%�EC�FɐG#�G��I�I��J�K��L̿�M��N���OnnP���QW��Rle�S7l�TLG�UN�V,)�V�0�XFX��Y�(Z��[�
\�]��^�_��`_�a}�b?�c]̐d�e=��f��g��g藐h�r�i�y�j�T�k�[�l�qm�=�n�Soh�p�5qQ<rfs1tE�uv/�v��x��x��y�ِz��{λ�|�}���~y���� BSTGMTBDST��w�PHP1LU�������`�������p�����������p�`��~堢.�zi�5��^?��%5�'��*����4p��n�آp��P�ɧ�2��Op����k�p0��r�p�P.��IZ �0��2v���㠹�Ԡ�֋ ��� ��� ��� ������� �� �x� �h� �Xy �?/��8[ �:� �X֠��	��B0 ��Kͩ�΢Cϒ4�o��r�N@�ӑ@�K#�
*�p
�c���E�t6�d'�T�MD3��#�ܐ͐�㯐Ӡ�Ñ���������|� lr!\c"LT#<E$,6%'&'C�'�4�(�%�)��*��+���,��-�ڐ.�ː/t��0d��1]�2r�3=�4R�5�62x6�8��8�a9�v�:�C;�X�<�_�=�:�>�A�?��@f#�A�9BF�CdD%�EC�FɐG#�G��I�I��J�K��L̿�M��N���OnnP���QW��Rle�S7l�TLG�UN�V,)�V�0�XFX��Y�(Z��[�
\�]��^�_��`_�a}�b?�c]̐d�e=��f��g��g藐h�r�i�y�j�T�k�[�l�qm�=�n�Soh�p�5qQ<rfs1tE�uv/�v��x��x��y�ِz��{λ�|�}���~y����	
	





























































� 	 	

 
 
 	LMTCESTCETWESTWET�@
�PHP1ES����p���p����*��p��^p��p��_�ɧ�#�Op���k�p"p�r�p�Pp¨�p�XN��9�p�80��:���!Mp�����`̖�`��K`΢�ϣ-`Ѝ�`у`�`�p�b�`�A���F����
���p	��`
�tp����
�9`����l�tpd'�T�MD3��#�ܐ͐�㯐Ӡ�Ñ���������|� lr!\c"LT#<E$,6%'&'C�'�4�(�%�)��*��+���,��-�ڐ.�ː/t��0d��1]�2r�3=�4R�5�62x6�8��8�a9�v�:�C;�X�<�_�=�:�>�A�?��@f#�A�9BF�CdD%�EC�FɐG#�G��I�I��J�K��L̿�M��N���OnnP���QW��Rle�S7l�TLG�UN�V,)�V�0�XFX��Y�(Z��[�
\�]��^�_��`_�a}�b?�c]̐d�e=��f��g��g藐h�r�i�y�j�T�k�[�l�qm�=�n�Soh�p�5qQ<rfs1tE�uv/�v��x��x��y�ِz��{λ�|�}���~y���� 	  WESTWETWEMTCESTCET��
	�mainlandPHP1MT�	�7�������𝵼�p���p�`��~�p�\7p�L(p�l5���Kͩ�΢Cϒ4Ђ%�r�L���>1��I���p�)���뀐�	��3������p�����p�������`Ų�b�`�ZpBwp�v�+��3p
$pp�4p	��
�
�����
�ؐ�р���a��v��A��E[*�#�ܐ͐�㯐Ӡ�Ñ���������|� lr!\c"LT#<E$,6%'&'C�'�4�(�%�)��*��+���,��-�ڐ.�ː/t��0d��1]�2r�3=�4R�5�62x6�8��8�a9�v�:�C;�X�<�_�=�:�>�A�?��@f#�A�9BF�CdD%�EC�FɐG#�G��I�I��J�K��L̿�M��N���OnnP���QW��Rle�S7l�TLG�UN�V,)�V�0�XFX��Y�(Z��[�
\�]��^�_��`_�a}�b?�c]̐d�e=��f��g��g藐h�r�i�y�j�T�k�[�l�qm�=�n�Soh�p�5qQ<rfs1tE�uv/�v��x��x��y�ِz��{λ�|�}���~y����   CESTCET��(�PHP1AXu
�so��Q`̿��#�ܐ͐�㯐Ӡ�Ñ���������|� lr!\c"LT#<E$,6%'&'C�'�4�(�%�)��*��+���,��-�ڐ.�ː/t��0d��1]�2r�3=�4R�5�62x6�8��8�a9�v�:�C;�X�<�_�=�:�>�A�?��@f#�A�9BF�CdD%�EC�FɐG#�G��I�I��J�K��L̿�M��N���OnnP���QW��Rle�S7l�TLG�UN�V,)�V�0�XFX��Y�(Z��[�
\�]��^�_��`_�a}�b?�c]̐d�e=��f��g��g藐h�r�i�y�j�T�k�[�l�qm�=�n�Soh�p�5qQ<rfs1tE�uv/�v��x��x��y�ِz��{λ�|�}���~y����h*0 	*0 	HMTEESTEET��1xPHP1BYy��8��`�^p���Kͩ�΢Cϒ4�
`'���@�P�����C@̓�����������s�|d� lU�!\F�"L7�#<(�$,�%
�%�sP'�p(��)��`*��`+��,�ۀ-�̀.���/t��0d��1]�2r�3=�4R�5�62j6�q8��8�S9�h�:�5;�J�<�Q�=�,�>�3�?��@f�A�+BE��Cd
D%ـEC�F��G#�G��I�IκJ�K��Ḻ�M�~N���On`P�u�QW|�RlW�S7^�TL9�U@�V,�V�"�X8X��Y�Z��[�\�]��^�_��`_�a}܀b?�c]��d�e=��f��g��g艀h�d�i�k�j�F�k�M�l�cm�/�n�Eoh�p�'qQ.rf	s1tE�u�v/�v��x�xжy�ˀz��{έ�|���}���~y���q�	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
� *0  8@*08@*0 MMTEETMSKCETCESTMSDEESTے�<��PHP1MC

�
�`PO�Gx��,p���p��H�p��*�`���.�zL�5��^#p�%5�'��X&p�}��4p��_��P��A�ɧ�#�Op���k�p"p�r�p�Pp�I/�/�p�2Lp��p���p��p��`����ȷ𽸨�_p������xl��h]��XN��?p�80��:���X�p��	��[���T�˭i���Kͩ�΢Cϒ4Љ���r�N@��9��
�c���E�t6�d'�T�MD3��#�ܐ͐�㯐Ӡ�Ñ���������|� lr!\c"LT#<E$,6%'&'C�'�4�(�%�)��*��+���,��-�ڐ.�ː/t��0d��1]�2r�3=�4R�5�62x6�8��8�a9�v�:�C;�X�<�_�=�:�>�A�?��@f#�A�9BF�CdD%�EC�FɐG#�G��I�I��J�K��L̿�M��N���OnnP���QW��Rle�S7l�TLG�UN�V,)�V�0�XFX��Y�(Z��[�
\�]��^�_��`_�a}�b?�c]̐d�e=��f��g��g藐h�r�i�y�j�T�k�[�l�qm�=�n�Soh�p�5qQ<rfs1tE�uv/�v��x��x��y�ِz��{λ�|�}���~y����																																																													1	 
	  PMTWESTWETWEMTCESTCET���PHP1RU��_؝>�*���9���X��m�(�<�@�m��=2��h��=��EP��`'���@�P�����C@̓�����������s�|d� lU�!\F�"L7�#<(�$,�%
�&��''p'�p(��)x��)��@*ij0+��p,��p-��p.��p/t�p0d�p1]��2r��3=��4Ry�5��62[�6�b�8xp8�D�9�Zp:�&�;�<p<�Cp=�p>�%p?�p@fpA��BE�pCc��D%�pEC��F�pG#��G���I��IΫ�J��K���ḶpM�o�N��pOnQ�P�gpQWnpRlIpS7PpTL+pU2pV,
pV�pX)�X�pY��Z��p[���\���]���^��_���`_��a}�pb?��c]�pd|�e=�pf�pgtpg�{ph�Vpi�]pj�8pk�?pl�T�m�!pn�6�ohpp��qQ�re��s1�tE��u��v.�pv���x�pxЧ�y�pz���{Οp|��p}��p~y�p�cp						
																																													#(1h#X?x*0
8@FP *0
8@*0 MMTMSTMDSTMSKMSDEETEEST�e�L}Moscow+00 - west RussiaPHP1??
�w�	��
ݒ��d���P
�9`����`uO�c�`S�PM�3�P#�`�P�`�P�`�hP�g`�������f��e�|H� lG�!\*�"L)�#<�$,�%��&��'P'�
`(��P)��`*��P+��`,��P-��`.��P/t�`0duP1]��2M��3=��4-s�5r�62x6�8��8�a9�v�:�C;�X�<�_�=�:�>�A�?��@f#�A�9BF�CdD%�EC�FɐG#�G��I�I��J�K��L̿�M��N���OnnP���QW��Rle�S7l�TLG�UN�V,)�V�0�XFX��Y�(Z��[�
\�]��^�_��`_�a}�b?�c]̐d�e=��f��g��g藐h�r�i�y�j�T�k�[�l�qm�=�n�Soh�p�5qQ<rfs1tE�uv/�v��x��x��y�ِz��{λ�|�}���~y����H*0 	 	*0LMTEESTEET�T@��PHP1NO�	�'���{`ȷM`��Kͩ�΢Cϒ4Ђ%�r�b� ��L�=�.�x�h�X�G��7��'�����/��ҐΗ�MD3��#�ܐ͐�㯐Ӡ�Ñ���������|� lr!\c"LT#<E$,6%'&'C�'�4�(�%�)��*��+���,��-�ڐ.�ː/t��0d��1]�2r�3=�4R�5�62x6�8��8�a9�v�:�C;�X�<�_�=�:�>�A�?��@f#�A�9BF�CdD%�EC�FɐG#�G��I�I��J�K��L̿�M��N���OnnP���QW��Rle�S7l�TLG�UN�V,)�V�0�XFX��Y�(Z��[�
\�]��^�_��`_�a}�b?�c]̐d�e=��f��g��g藐h�r�i�y�j�T�k�[�l�qm�=�n�Soh�p�5qQ<rfs1tE�uv/�v��x��x��y�ِz��{λ�|�}���~y����   CESTCET�2#�PHP1FR��`P��Gx��,p���p��H�p��*�`���.�zL�5��^#p�%5�'��X&p�}��4p��_��P��A�ɧ�#�Op���k�p"p�r�p�Pp�I/�/�p�2Lp��p���p��p��`����ȷ𽸨�_p������xl��h]��XN��?p�80��:���X�p��	��l'���Kͩ�΢Cϒ4�O��Љ���r�N@��9��
�c���E�t6�d'�T�MD3��#�ܐ͐�㯐Ӡ�Ñ���������|� lr!\c"LT#<E$,6%'&'C�'�4�(�%�)��*��+���,��-�ڐ.�ː/t��0d��1]�2r�3=�4R�5�62x6�8��8�a9�v�:�C;�X�<�_�=�:�>�A�?��@f#�A�9BF�CdD%�EC�FɐG#�G��I�I��J�K��L̿�M��N���OnnP���QW��Rle�S7l�TLG�UN�V,)�V�0�XFX��Y�(Z��[�
\�]��^�_��`_�a}�b?�c]̐d�e=��f��g��g藐h�r�i�y�j�T�k�[�l�qm�=�n�Soh�p�5qQ<rfs1tE�uv/�v��x��x��y�ِz��{λ�|�}���~y����		




























































1		
   
 
PMTWESTWETCETCESTWEMT���7�PHP1MEx	�5���Kͩ�΢Cϒ4Ђ%�pѡ��N@�E_p㯐Ӡ�Ñ���������|� lr!\c"LT#<E$,6%'&'C�'�4�(�%�)��*��+���,��-�ڐ.�ː/t��0d��1]�2r�3=�4R�5�62x6�8��8�a9�v�:�C;�X�<�_�=�:�>�A�?��@f#�A�9BF�CdD%�EC�FɐG#�G��I�I��J�K��L̿�M��N���OnnP���QW��Rle�S7l�TLG�UN�V,)�V�0�XFX��Y�(Z��[�
\�]��^�_��`_�a}�b?�c]̐d�e=��f��g��g藐h�r�i�y�j�T�k�[�l�qm�=�n�Soh�p�5qQ<rfs1tE�uv/�v��x��x��y�ِz��{λ�|�}���~y����   CETCEST��0�PHP1CZ�	�`����ٮ��������������	q���Kͩ�΢Cϒ4�n^��y�ҡOӀ��I��L8�)��,�	��p��x�dpd'�T�MD3��#�ܐ͐�㯐Ӡ�Ñ���������|� lr!\c"LT#<E$,6%'&'C�'�4�(�%�)��*��+���,��-�ڐ.�ː/t��0d��1]�2r�3=�4R�5�62x6�8��8�a9�v�:�C;�X�<�_�=�:�>�A�?��@f#�A�9BF�CdD%�EC�FɐG#�G��I�I��J�K��L̿�M��N���OnnP���QW��Rle�S7l�TLG�UN�V,)�V�0�XFX��Y�(Z��[�
\�]��^�_��`_�a}�b?�c]̐d�e=��f��g��g藐h�r�i�y�j�T�k�[�l�qm�=�n�Soh�p�5qQ<rfs1tE�uv/�v��x��x��y�ِz��{λ�|�}���~y����   CESTCET�
(��PHP1LV"��������F��˃����ȯd`�beP��Kͩ�΢Cϒ4Ђ%А�p'���@�P�����C@̓�����������s�|d� lU�!\F�"L7�#<(�$,�%&
'5�'�&�(��)��*��+��,�ۀ-�̀.���/t��0d��1]�2M�2���3=�4R�5�62x6�8��8���:�C;�X�<�_�=�:�>�A�?��@f#�A�9BF�CdD%�EC�FɐG#�G��I�I��J�K��L̿�M��N���OnnP���QW��Rle�S7l�TLG�UN�V,)�V�0�XFX��Y�(Z��[�
\�]��^�_��`_�a}�b?�c]̐d�e=��f��g��g藐h�r�i�y�j�T�k�[�l�qm�=�n�Soh�p�5qQ<rfs1tE�uv/�v��x��x��y�ِz��{λ�|�}���~y����				















































�$� *0  8@*08@*0 *0 RMTLSTEETMSKCETCESTMSDEEST�:W7n�PHP1IT�	�7�������𝵼�p���p�`��~�p�\7p�L(p�l5���Kͩ�΢Cϒ4�_`�nBp�r�L���>1��I���p�)���뀐�	��3������p�����p�������`Ų�b�`�ZpBwp�v�+��n�pg�E:��I�
.Wp
�9�9p��
�������ptp��pS�pΗ�MD3��#�ܐ͐�㯐Ӡ�Ñ���������|� lr!\c"LT#<E$,6%'&'C�'�4�(�%�)��*��+���,��-�ڐ.�ː/t��0d��1]�2r�3=�4R�5�62x6�8��8�a9�v�:�C;�X�<�_�=�:�>�A�?��@f#�A�9BF�CdD%�EC�FɐG#�G��I�I��J�K��L̿�M��N���OnnP���QW��Rle�S7l�TLG�UN�V,)�V�0�XFX��Y�(Z��[�
\�]��^�_��`_�a}�b?�c]̐d�e=��f��g��g藐h�r�i�y�j�T�k�[�l�qm�=�n�Soh�p�5qQ<rfs1tE�uv/�v��x��x��y�ِz��{λ�|�}���~y����   CESTCET�Cp%��PHP1RUv�&���P�L&�'���0�@�����50̅��������t��e�|V� lG�!\8�"L)�#<�$,�%
�&��''p'�p(��)�)��0*ĥ +��`,��`-��`.��`/t�`0d�`1]��2r��3=��4Rk�5r�62M�6�T�8j`8�6�9�L`:��;�.`<�5`=�`>�`?��`@e�`A��BE�`Cc��D%�`EC��F�`G#��G��I��IΝ�J�x�K��ḶpM�o�N��pOnQ�P�gpQWnpRlIpS7PpTL+pU2pV,
pV�pX)�X�pY��Z��p[���\���]���^��_���`_��a}�pb?��c]�pd|�e=�pf�pgtpg�{ph�Vpi�]pj�8pk�?pl�T�m�!pn�6�ohpp��qQ�re��s1�tE��u��v.�pv���x�pxЧ�y�pz���{Οp|��p}��p~y�p�cp	
















/*08@FP	8@8@FP	8@	*0*0	 FPFP8@8@*0LMTSAMTKUYSTKUYTSAMSTځ_.XMoscow - Samara, UdmurtiaPHP1SM�	�7�������𝵼�p���p�`��~�p�\7p�L(p�l5���Kͩ�΢Cϒ4�_`�nBp�r�L���>1��I���p�)���뀐�	��3������p�����p�������`Ų�b�`�ZpBwp�v�+��n�pg�E:��I�
.Wp
�9�9p��
�������ptp��pS�pΗ�MD3��#�ܐ͐�㯐Ӡ�Ñ���������|� lr!\c"LT#<E$,6%'&'C�'�4�(�%�)��*��+���,��-�ڐ.�ː/t��0d��1]�2r�3=�4R�5�62x6�8��8�a9�v�:�C;�X�<�_�=�:�>�A�?��@f#�A�9BF�CdD%�EC�FɐG#�G��I�I��J�K��L̿�M��N���OnnP���QW��Rle�S7l�TLG�UN�V,)�V�0�XFX��Y�(Z��[�
\�]��^�_��`_�a}�b?�c]̐d�e=��f��g��g藐h�r�i�y�j�T�k�[�l�qm�=�n�Soh�p�5qQ<rfs1tE�uv/�v��x��x��y�ِz��{λ�|�}���~y����   CESTCET�W2%�JPHP1BAx	�5���Kͩ�΢Cϒ4Ђ%�pѡ��N@�E_p㯐Ӡ�Ñ���������|� lr!\c"LT#<E$,6%'&'C�'�4�(�%�)��*��+���,��-�ڐ.�ː/t��0d��1]�2r�3=�4R�5�62x6�8��8�a9�v�:�C;�X�<�_�=�:�>�A�?��@f#�A�9BF�CdD%�EC�FɐG#�G��I�I��J�K��L̿�M��N���OnnP���QW��Rle�S7l�TLG�UN�V,)�V�0�XFX��Y�(Z��[�
\�]��^�_��`_�a}�b?�c]̐d�e=��f��g��g藐h�r�i�y�j�T�k�[�l�qm�=�n�Soh�p�5qQ<rfs1tE�uv/�v��x��x��y�ِz��{λ�|�}���~y����   CETCEST�C�.‚PHP1UA{�� ��`�����Kͩ�΢Cϒ4ϟ8�'���@�P�����C@̓�����������s�|d� lU�!\F�"L7�#<(�$,�%
�%�sP&�.�)��`*��P+��`,��P-��`-���.��@/t�P0dg@1]��1]�2r�2�~�3=�4R�5�62x6�8��8�a9�v�:�C;�X�<�_�=�:�>�A�?��@f#�A�9BF�CdD%�EC�FɐG#�G��I�I��J�K��L̿�M��N���OnnP���QW��Rle�S7l�TLG�UN�V,)�V�0�XFX��Y�(Z��[�
\�]��^�_��`_�a}�b?�c]̐d�e=��f��g��g藐h�r�i�y�j�T�k�[�l�qm�=�n�Soh�p�5qQ<rfs1tE�uv/�v��x��x��y�ِz��{λ�|�}���~y����			








































� *0  8@*08@*0*0 SMTEETMSKCETCESTMSDEEST���F��central CrimeaPHP1MKx	�5���Kͩ�΢Cϒ4Ђ%�pѡ��N@�E_p㯐Ӡ�Ñ���������|� lr!\c"LT#<E$,6%'&'C�'�4�(�%�)��*��+���,��-�ڐ.�ː/t��0d��1]�2r�3=�4R�5�62x6�8��8�a9�v�:�C;�X�<�_�=�:�>�A�?��@f#�A�9BF�CdD%�EC�FɐG#�G��I�I��J�K��L̿�M��N���OnnP���QW��Rle�S7l�TLG�UN�V,)�V�0�XFX��Y�(Z��[�
\�]��^�_��`_�a}�b?�c]̐d�e=��f��g��g藐h�r�i�y�j�T�k�[�l�qm�=�n�Soh�p�5qQ<rfs1tE�uv/�v��x��x��y�ِz��{λ�|�}���~y����   CETCEST�c�3\�PHP1BG		~	��Kͩ�΢Cϒ4Ђ%�p�r$ c�PU?�M�5!�,���p���㡀Ӓ�Ã���������|s ld!\U"LF#<7$,(%&
'5�'��'�
`(��P)��`*��P+��`,��P-��`.��P/t�`0duP1]��2r{�3=�4R�5�62x6�8��8�a9�v�:�C;�X�<�_�=�:�>�A�?��@f#�A�9BF�CdD%�EC�FɐG#�G��I�I��J�K��L̿�M��N���OnnP���QW��Rle�S7l�TLG�UN�V,)�V�0�XFX��Y�(Z��[�
\�]��^�_��`_�a}�b?�c]̐d�e=��f��g��g藐h�r�i�y�j�T�k�[�l�qm�=�n�Soh�p�5qQ<rfs1tE�uv/�v��x��x��y�ِz��{λ�|�}���~y����  *0
 *0
*0
 EETCETCESTEEST�um6<�PHP1SEv	��`����MD3��#�ܐ͐�㯐Ӡ�Ñ���������|� lr!\c"LT#<E$,6%'&'C�'�4�(�%�)��*��+���,��-�ڐ.�ː/t��0d��1]�2r�3=�4R�5�62x6�8��8�a9�v�:�C;�X�<�_�=�:�>�A�?��@f#�A�9BF�CdD%�EC�FɐG#�G��I�I��J�K��L̿�M��N���OnnP���QW��Rle�S7l�TLG�UN�V,)�V�0�XFX��Y�(Z��[�
\�]��^�_��`_�a}�b?�c]̐d�e=��f��g��g藐h�r�i�y�j�T�k�[�l�qm�=�n�Soh�p�5qQ<rfs1tE�uv/�v��x��x��y�ِz��{λ�|�}���~y����  CETCEST��U.3HPHP1EE|�Y-̞��������+p�soLȰ���ƗP��Kͩ�΢Cϒ4�t��'���@�P�����C@̓�����������s�|d� lU�!\F�"L7�#<(�$,�%&
'5�'�&�(��)��*��+��,�ۀ-�̀.���/t��0d��1]�2r�3=�4R�5�6�P62x6�8��8��<�_�=�:�>�A�?��@f#�A�9BF�CdD%�EC�FɐG#�G��I�I��J�K��L̿�M��N���OnnP���QW��Rle�S7l�TLG�UN�V,)�V�0�XFX��Y�(Z��[�
\�]��^�_��`_�a}�b?�c]̐d�e=��f��g��g藐h�r�i�y�j�T�k�[�l�qm�=�n�Soh�p�5qQ<rfs1tE�uv/�v��x��x��y�ِz��{λ�|�}���~y����				














































4 		 
*0 8@*08@*0 
 
*0*0TMTCESTCETEETMSKMSDEEST��8lxPHP1AL�
��4h�m�p��Kͩ�͸�(9��>`
x�
�q��Op�H`
�k��*`��pt`��pS�`p�p;�`H�p�`1������p�_`̯���������|� lr!\c"LT#<E$,6%'&'C�'�4�(�%�)��*��+���,��-�ڐ.�ː/t��0d��1]�2r�3=�4R�5�62x6�8��8�a9�v�:�C;�X�<�_�=�:�>�A�?��@f#�A�9BF�CdD%�EC�FɐG#�G��I�I��J�K��L̿�M��N���OnnP���QW��Rle�S7l�TLG�UN�V,)�V�0�XFX��Y�(Z��[�
\�]��^�_��`_�a}�b?�c]̐d�e=��f��g��g藐h�r�i�y�j�T�k�[�l�qm�=�n�Soh�p�5qQ<rfs1tE�uv/�v��x��x��y�ِz��{λ�|�}���~y�����  LMTCETCEST�f0��PHP1??�"�k�����>�`��`�ߍ`��~`�ȩླྀ�ྨ�࿘|�m�x^��hO��X@��H1��8"��(���ȼ�`�w}P��Kͩ�΢Cϒ4�N�`'���@�P�����C@̓�����������s�|d� lU�!\F�"L7�#<(�$,�%
�%�sP&C>�'�&�(��)`�`)��`*��P+��`,��P-��`.��P/t�`0duP1]��2r{�3=�4R�5�62x6�8��8�a9�v�:�C;�X�<�_�=�:�>�A�?��@f#�A�9BF�CdD%�EC�FɐG#�G��I�I��J�K��L̿�M��N���OnnP���QW��Rle�S7l�TLG�UN�V,)�V�0�XFX��Y�(Z��[�
\�]��^�_��`_�a}�b?�c]̐d�e=��f��g��g藐h�r�i�y�j�T�k�[�l�qm�=�n�Soh�p�5qQ<rfs1tE�uv/�v��x��x��y�ِz��{λ�|�}���~y����
	
	
	
	









































�x*0 
 
*0  8@*0*08@*0 
CMTBMTEESTEETCETCESTMSDMSK�T@��PHP1UAy�	q���Kͩ�΢Cϒ4Ѐ�`С�����'���@�P�����C@̓�����������s�|d� lU�!\F�"L7�#<(�$,�%
�%�sP&�.�'�B�)��`*��P+��`,��P-��`.��P/t��0d��1]�2r�3=�4R�5�62x6�8��8�a9�v�:�C;�X�<�_�=�:�>�A�?��@f#�A�9BF�CdD%�EC�FɐG#�G��I�I��J�K��L̿�M��N���OnnP���QW��Rle�S7l�TLG�UN�V,)�V�0�XFX��Y�(Z��[�
\�]��^�_��`_�a}�b?�c]̐d�e=��f��g��g藐h�r�i�y�j�T�k�[�l�qm�=�n�Soh�p�5qQ<rfs1tE�uv/�v��x��x��y�ِz��{λ�|�}���~y����			










































  8@	*0
*0
8@	 *0*0 CETCESTMSDMSKEETEESTӃ"4�pRutheniaPHP1LIr	#�ܐ͐�㯐Ӡ�Ñ���������|� lr!\c"LT#<E$,6%'&'C�'�4�(�%�)��*��+���,��-�ڐ.�ː/t��0d��1]�2r�3=�4R�5�62x6�8��8�a9�v�:�C;�X�<�_�=�:�>�A�?��@f#�A�9BF�CdD%�EC�FɐG#�G��I�I��J�K��L̿�M��N���OnnP���QW��Rle�S7l�TLG�UN�V,)�V�0�XFX��Y�(Z��[�
\�]��^�_��`_�a}�b?�c]̐d�e=��f��g��g藐h�r�i�y�j�T�k�[�l�qm�=�n�Soh�p�5qQ<rfs1tE�uv/�v��x��x��y�ِz��{λ�|�}���~y���� CETCEST�F8!-�PHP1VA�	�7�������𝵼�p���p�`��~�p�\7p�L(p�l5���Kͩ�΢Cϒ4�_`�nBp�r�L���>1��I���p�)���뀐�	��3������p�����p�������`Ų�b�`�ZpBwp�v�+��n�pg�E:��I�
.Wp
�9�9p��
�������ptp��pS�pΗ�MD3��#�ܐ͐�㯐Ӡ�Ñ���������|� lr!\c"LT#<E$,6%'&'C�'�4�(�%�)��*��+���,��-�ڐ.�ː/t��0d��1]�2r�3=�4R�5�62x6�8��8�a9�v�:�C;�X�<�_�=�:�>�A�?��@f#�A�9BF�CdD%�EC�FɐG#�G��I�I��J�K��L̿�M��N���OnnP���QW��Rle�S7l�TLG�UN�V,)�V�0�XFX��Y�(Z��[�
\�]��^�_��`_�a}�b?�c]̐d�e=��f��g��g藐h�r�i�y�j�T�k�[�l�qm�=�n�Soh�p�5qQ<rfs1tE�uv/�v��x��x��y�ِz��{λ�|�}���~y����   CESTCET�DN%��PHP1AT�	�`����ٮ���������������p�p�D[��	q���Kͩ�΢Cϒ4Ђ%�r�E��4��c��I��9��)��,�	�M'�3�`#�ܐ͐�㯐Ӡ�Ñ���������|� lr!\c"LT#<E$,6%'&'C�'�4�(�%�)��*��+���,��-�ڐ.�ː/t��0d��1]�2r�3=�4R�5�62x6�8��8�a9�v�:�C;�X�<�_�=�:�>�A�?��@f#�A�9BF�CdD%�EC�FɐG#�G��I�I��J�K��L̿�M��N���OnnP���QW��Rle�S7l�TLG�UN�V,)�V�0�XFX��Y�(Z��[�
\�]��^�_��`_�a}�b?�c]̐d�e=��f��g��g藐h�r�i�y�j�T�k�[�l�qm�=�n�Soh�p�5qQ<rfs1tE�uv/�v��x��x��y�ِz��{λ�|�}���~y����   CESTCET���+��PHP1LTy"�OP��J���0�fx`Ȭ�p�Y*���Kͩ�΢Cϒ4�0=�'���@�P�����C@̓�����������s�|d� lU�!\F�"L7�#<(�$,�%
�&��''p'�p(��)��*��+��,�ۀ-�̀.���/t��0d��1]�2r�3=�4R�4��`5�62x6�8��>`>�A�?��@f#�A�9BF�CdD%�EC�FɐG#�G��I�I��J�K��L̿�M��N���OnnP���QW��Rle�S7l�TLG�UN�V,)�V�0�XFX��Y�(Z��[�
\�]��^�_��`_�a}�b?�c]̐d�e=��f��g��g藐h�r�i�y�j�T�k�[�l�qm�=�n�Soh�p�5qQ<rfs1tE�uv/�v��x��x��y�ِz��{λ�|�}���~y����	
	
	
	
	
	
	

�h *0  8@*08@*0   *0WMTKMTCETEETMSKCESTMSDEEST���9I�PHP1RUu��Fܫ؆P��P�L@'���0�@�����50̅��������t��e�|V� lG�!\8�"L)�#<�$,�%
�&��''p'�p)��`*ij0+��p,��p-��p.��p/t�p0d�p1]��2r��3=��4Ry�5��62[�6�b�8xp8�D�9�Zp:�&�;�<p<�Cp=�p>�%p?�p@fpA��BE�pCc��D%�pEC��F�pG#��G���I��IΫ�J��K���ḶpM�o�N��pOnQ�P�gpQWnpRlIpS7PpTL+pU2pV,
pV�pX)�X�pY��Z��p[���\���]���^��_���`_��a}�pb?��c]�pd|�e=�pf�pgtpg�{ph�Vpi�]pj�8pk�?pl�T�m�!pn�6�ohpp��qQ�re��s1�tE��u��v.�pv���x�pxЧ�y�pz���{Οp|��p}��p~y�p�cp		
																																													)�*0*0	8@	FP8@8@FP8@*0*0LMTTSATSTATVOLSTVOLTӰ�Vn�Moscow+00 - Caspian SeaPHP1PL

�
��*Л`����ٮ�����������������e��}|`�v���Kͩ�΢Cϒ4Ѐ�`Є�ѕ�pҊ�`�b�p�K#��^��)��,�	������x�T����᥀�і���캳���Z�zw�<�ZY��:;�}:��
*�p
�U���7�t(�d�T
�M63�#݀΀���㡀Ӓ�Ã���������|s ld!\U!���"LT#<E$,6%'&'C�'�4�(�%�)��*��+���,��-�ڐ.�ː/t��0d��1]�2r�3=�4R�5�62x6�8��8�a9�v�:�C;�X�<�_�=�:�>�A�?��@f#�A�9BF�CdD%�EC�FɐG#�G��I�I��J�K��L̿�M��N���OnnP���QW��Rle�S7l�TLG�UN�V,)�V�0�XFX��Y�(Z��[�
\�]��^�_��`_�a}�b?�c]̐d�e=��f��g��g藐h�r�i�y�j�T�k�[�l�qm�=�n�Soh�p�5qQ<rfs1tE�uv/�v��x��x��y�ِz��{λ�|�}���~y����																																																		� 	 	*0
   	WMTCESTCETEESTEET�h2��PHP1HRx	�5���Kͩ�΢Cϒ4Ђ%�pѡ��N@�E_p㯐Ӡ�Ñ���������|� lr!\c"LT#<E$,6%'&'C�'�4�(�%�)��*��+���,��-�ڐ.�ː/t��0d��1]�2r�3=�4R�5�62x6�8��8�a9�v�:�C;�X�<�_�=�:�>�A�?��@f#�A�9BF�CdD%�EC�FɐG#�G��I�I��J�K��L̿�M��N���OnnP���QW��Rle�S7l�TLG�UN�V,)�V�0�XFX��Y�(Z��[�
\�]��^�_��`_�a}�b?�c]̐d�e=��f��g��g藐h�r�i�y�j�T�k�[�l�qm�=�n�Soh�p�5qQ<rfs1tE�uv/�v��x��x��y�ِz��{λ�|�}���~y����   CETCEST�6�+zPHP1UAy��0��`ʪ����Kͩ�΢Cν�p'���@�P�����C@̓�����������s�|d� lU�!\F�"L7�#<(�$,�%
�&��''p'�p(��P)��`*��P+��`,��P-��`.��P/t��0d��1]�2r�3=�4R�5�62x6�8��8�a9�v�:�C;�X�<�_�=�:�>�A�?��@f#�A�9BF�CdD%�EC�FɐG#�G��I�I��J�K��L̿�M��N���OnnP���QW��Rle�S7l�TLG�UN�V,)�V�0�XFX��Y�(Z��[�
\�]��^�_��`_�a}�b?�c]̐d�e=��f��g��g藐h�r�i�y�j�T�k�[�l�qm�=�n�Soh�p�5qQ<rfs1tE�uv/�v��x��x��y�ِz��{λ�|�}���~y����				










































 � *0  8@*08@*0*0 CUTEETMSKCETCESTMSDEEST�Q%HQz.Zaporozh'ye, E Lugansk / Zaporizhia, E LuhanskPHP1CHv	�j��q�L��S#�ܐ͐�㯐Ӡ�Ñ���������|� lr!\c"LT#<E$,6%'&'C�'�4�(�%�)��*��+���,��-�ڐ.�ː/t��0d��1]�2r�3=�4R�5�62x6�8��8�a9�v�:�C;�X�<�_�=�:�>�A�?��@f#�A�9BF�CdD%�EC�FɐG#�G��I�I��J�K��L̿�M��N���OnnP���QW��Rle�S7l�TLG�UN�V,)�V�0�XFX��Y�(Z��[�
\�]��^�_��`_�a}�b?�c]̐d�e=��f��g��g藐h�r�i�y�j�T�k�[�l�qm�=�n�Soh�p�5qQ<rfs1tE�uv/�v��x��x��y�ِz��{λ�|�}���~y����  CESTCETѡ]��PHP1??1Local time zone must be set--see zic manual page�T@��PHP1??�
�&���� ��0���à���������� �v���e� �{Ƞ�N���?� �%` �'� �*, ���Ӡ�� ��� ��l ��� ��N ��y���0 ��Р�pL��r���P.��IZ �0��2v���X���Ԡ�� ��� ��W ��� ������� �� �x� �z� �Xy �Q���8[ �:� �X֠��	��&�ʗY�����w;�ͱ��`Xϐ��n^��r�2�i� �c)��I� �!��B������N� ���.� �� �p ��� ������ ���޴�߮ �̠�rH��kt �R*��T���2��=� �) �T�� �q ��� ��S �� �� �g��} �aI��_ �Jf �_A �!
��?# �� ��Ѡ��� ��������{���ǻpp� )X P� 	: 0� � 	l 	� 
�N ���0 
���� qޠ�.�Q��y�1��X�#�8Ɛ͐��㯐���Ñ���������k lr!�M"LT#a/$,6%JK�&'*-�'�4�)
�)��*��+���,�Ӑ-�ڐ.���/t��0���0�$1]�2r�3=�4R�5�62x6�8��8�a9�v�:�C;�X�<�_�=�:�>�A�?��@f#�A�9BF�CdD%�EC�FɐG#�G��I�I��J�K��L̿�M��N���OnnP���QW��Rle�S7l�TLG�UN�V,)�V�0�XFX��Y�(Z��[�
\�]��^�_��`_�a}�b?�c]̐d�e=��f��g��g藐h�r�i�y�j�T�k�[�l�qm�=�n�Soh�p�5qQ<rfs1tE�uv/�v��x��x��y�ِz��{λ�|�}���~y���� BSTGMTBDST�T@��PHP1??�
�&���� ��0���à���������� �v���e� �{Ƞ�N���?� �%` �'� �*, ���Ӡ�� ��� ��l ��� ��N ��y���0 ��Р�pL��r���P.��IZ �0��2v���X���Ԡ�� ��� ��W ��� ������� �� �x� �z� �Xy �Q���8[ �:� �X֠��	��&�ʗY�����w;�ͱ��`Xϐ��n^��r�2�i� �c)��I� �!��B������N� ���.� �� �p ��� ������ ���޴�߮ �̠�rH��kt �R*��T���2��=� �) �T�� �q ��� ��S �� �� �g��} �aI��_ �Jf �_A �!
��?# �� ��Ѡ��� ��������{���ǻpp� )X P� 	: 0� � 	l 	� 
�N ���0 
���� qޠ�.�Q��y�1��X�#�8Ɛ͐��㯐���Ñ���������k lr!�M"LT#a/$,6%JK�&'*-�'�4�)
�)��*��+���,�Ӑ-�ڐ.���/t��0���0�$1]�2r�3=�4R�5�62x6�8��8�a9�v�:�C;�X�<�_�=�:�>�A�?��@f#�A�9BF�CdD%�EC�FɐG#�G��I�I��J�K��L̿�M��N���OnnP���QW��Rle�S7l�TLG�UN�V,)�V�0�XFX��Y�(Z��[�
\�]��^�_��`_�a}�b?�c]̐d�e=��f��g��g藐h�r�i�y�j�T�k�[�l�qm�=�n�Soh�p�5qQ<rfs1tE�uv/�v��x��x��y�ِz��{λ�|�}���~y���� BSTGMTBDST�T@��PHP1??GMT�T@��PHP1??GMT�T@��PHP1??GMT�T@��PHP1??GMT�T@��PHP1??GMT�T@��PHP1??G�iZ���W���:��Kx��Lbp�j�8ԓJ��B�8֚���>A��.$��9���������ܸ����ʨޢ8߬[(�8��(�Oi8�v�(�/K8�_Ǩ�-8�?���I������+��m��
���O�����l(�wѸ�N(�W���0(�@�8�h(� �8�G�(�%~8�a(�`8��C(��B8��_���^���A���@���#��"�~�n�]�M�G(78&�(�=8	�(	��8
�(֩8ƌ(
��8�n(�98ol�k~�p�	~�
LMTHKSTHKTJST�T@��PHP1??��s`HST�T@��PHP1??@�`�����ш��rQ����M�f�����&C���& �%�ˬB���� ͌$�μ� �l�М� �K�҅���+ʠ�e���9� �Eq��� �%S��� �p ��w ���ܹY ��4 ޢu�߮ �W�� �b9��m� �B��M� �!���6ؠ� ����� ����� ��~�� �`� �B��j� �_ �S���_A �3���?# �d�� ��F���� ��(������E ���l����	����	
RMTISSTISTGMT�T@��PHP1MG
�����3��⫹@,�*08@*0LMTEATEASTlv�[)�PHP1IO�~��0�ݰC�FPT`LMTIOT~#��(BPHP1CXbpCXTyo=��PHP1CC[hCCTvå���PHP1KM����(�*0LMTEATw�rT��PHP1TF�ab�FPzzzTFT>�}�6PHP1SC�d�3�8@LMTSCT�5UgK*PHP1MV�/ØD�FPMMTMVT�����pPHP1MU
���@�r0I��IΏ�5�FP8@	LMTMUSTMUTj��jepPHP1YT���*h*0LMTEATu��W��PHP1RE��9�48@LMTRETi}5gK*PHP1??d�l}������Ht-@�@0�:@Ug�EJ�7��-�( v�(۝�)˜�*�"�+��H,�V8-��.���/o7H0a�81Pj�2B�32��4%u�5#H6�86�V�7�ܸ8֊H9�8:�H;��8<�B�=�ȸ>{vH?m�8@\��AO/�B?.�C1��G��HH�O8I�NHJ��8K���L��M��HNz;8Oh��P[n�QKm�R=�S,�HT'8U
��VZ�V�HW�8XэHY�8Z���[�F�\��H]�z8^u'�_g��`W��aJ2�b8�Hc+f8d�e��e�GHf��8g��Hh�R8i���j���k�3Hl��8m�f�ns�ob�HpU 8qEHr7�8s&R�tظu�Hu�8v��w�?�x�>�y�ĸz�rH{��8|���}�+�~n�Ha_8080818FP
8@?H
LMTTMTIRSTIRDT�T@��PHP1??��0E��Y����Pͬ�����Ϗf�Щy�ф`�Ҋ�p�e���k���Z`����/�p�F�������۴4ܹ ���޴΀ߤ���v�V}�J`�64�����t���Ҁ�'���O�|�����	��`
�3��������``�P ��`!I��"]M`#�$Z0`%?P&��&���'���(�P)��`*��+�e�,��-�G�._�P/{)�0H��1H��2<nP31�`4��5�`5�P7�7�p8�_�9��:��p;�[`<��p=��`>��p?|��@s6pAP�`BL�CHOpD,qE��FSF�c�G�5H�pI�J���K��L�	�M��N��pOt��P^B�QTـR+��S4��T'ApU��U���V��W�zpXݜY��pZ�~[���\�`]� p^}B_o��`]$a=4�bF@�c8�pd&"�em�f�g��g��h�lpi�Ȁj��k���l��pm��nxpon�pN��qN�rJKps.mt�puOu�_�v�k�w��px�M�y�^pz�/�{���|��}��p~v�Wp �*0 8@JMTIDTISTIDDT�T@��PHP1??�� �p	�`	���
�`�p٢�
�gp�������f��e�yH�iG�Y*�I)�9�)�")`��`����������KMTESTEDT�T@��PHP1??	�΅p�>����������۫ڀ��݋��~���~�CJTJDTJST�T@��PHP1??	��P,t������W@��MHTKWAT�T@��PHP1??��$ݻ��#�`�x���e��/?p����N���B`�p�+��*��_`̯���`�z����p��` pJp!a~�"R�p#D�$4�%%7`&@��2N�`3D6p45j�\ 	 
LMTCESTCETEET�T@��PHP1??�	�`����ٮ��������������	q���Kͩ�΢Cϒ4Ђ%�r�N@�
�c���E�t6�d'�T�MD3��#�ܐ͐�㯐Ӡ�Ñ���������|� lr!\c"LT#<E$,6%'&'C�'�4�(�%�)��*��+���,��-�ڐ.�ː/t��0d��1]�2r�3=�4R�5�62x6�8��8�a9�v�:�C;�X�<�_�=�:�>�A�?��@f#�A�9BF�CdD%�EC�FɐG#�G��I�I��J�K��L̿�M��N���OnnP���QW��Rle�S7l�TLG�UN�V,)�V�0�XFX��Y�(Z��[�
\�]��^�_��`_�a}�b?�c]̐d�e=��f��g��g藐h�r�i�y�j�T�k�[�l�qm�=�n�Soh�p�5qQ<rfs1tE�uv/�v��x��x��y�ِz��{λ�|�}���~y����  MESTMET�T@��PHP1??������yOp��|�fdp��
���ꍀ�#�pҙ�p�Yؑ���~Y��IR��^;��)4��GX �Q�': ��3� ���� ���� ��௠��
������� ���� ysir YUIT 97)6 "S�	 5��4������������ې v+ !���"V
 #j�$5� %J�&� '*�'��)
�)�Ϡ*�b+���,�~�-���.�`�/~u�0�B�1g� 2s$�3Gt 4S�5'V 62�78 88� 9��:� ;��<��=��>���?��@oܠA���BO��Cd��D/��EDm�F��G$O�G�� I1�I؁ J��K���L�j�M|��N�L�O\w�P�.�Q<Y�Rv�S;�TU�T��V5ԐV�: X�X� Y��Z�� [޵\�� ]��^d� _�y`Mޠa���b-��cgw�d
��eGY�e턠g';�g�f�i�i�H�j�k�e l�mvG n��oV) p��q6 ro�s� tO�t�	�v8��v��x��x�͠y���z���{�f�|~��}�H�~^s��*����L��������������������LMTMSTPSTPDTPWTPPT�T@��PHP1??]���p��n�fV`�C�`�6`������q`ؑ��p�1g�2s�3Gf4R��5'H62ڀ7*8�8�9��:��;��<�
�=��>��?�@oΐA���BO��Cd}�D/��ED_�Ft�G$A�G��I#�I�sJ��K�UL�"M�7N�OxP��Qa5�Rl�SA�TL�U ��V,�WېX��XཐY���Z���[�l�\��]�N�^��_�0�`i�a~MbIbc^/d)De>f`�g�g�B�h��i�$�jݷk��l�Ӏm��n���oqʐp���qZ�rfy�s:�tF[�u�v/xv��xZx�oy�<z�Q{�|�m�}�~�O������<����������������LMTMSTCSTPSTMDT�T@��PHP1??b���p��n�fV`�C�`�6`�����ް`Ɨ4P�U�����P���ϷVPڙ��v��1gv2sp3GX4R�p5':62�p78��8�9���:��;���<���=���>�ހ?�p�@o��A��pBO��CdopD/��EDQpFf�G$3pG��IpI�eJ�pK�GL��M�)N���OxP���Qa'�Rl��SA	�TL��U �V,}�ẀX�pXீY�|pZ���[�^p\��]�@p^��_�"p`ira~>�bITc^ �d)6e>�fR�g��g�4�h���i��jݨ�k���l��pm�ڀn��poq��p��pqZ�rfkps:�tFMpu�v/i�v�xK�x�ay�-�z�C{��|�_�}���~�A�����������������������LMTMSTCSTCDTCWT�T@��PHP1??����MST�T@��PHP1??���:����������ˉ��#�p�a��u��X��W��:��9�����w�q�a�P��@��0ހ�5�	��	��
�ࡐٿ
�����������yeidYGIF9))("E�	
'��&��	��������̀ v!���"U�#j�$5�%J�&�'*�'�ߐ)
r)��*�T+���,�p�-���.�R�/~g�0�4�1g�2s�3Gf4R��5'H62ڀ7*8�8�9��:��;ۻ<�
�=��>��?�@oΐA���BO��Cd}�D/��ED_�E��G-|GӧI
^I��J�@K���L�\�M|��N�>�O\i�P� �Q<K�Rv�S-�TU�T��V5ƀV�,X�X�Y��Z��[ާ\��]��^d�_�k`MАa���b-��cgi�d
��eGK�e�v�g'-�g�X�i�i�:�j��k�Wl�mv9n��oVp��q5�ro�s�tO�t���v8��v�ݐx��x���y�v�z���{�X�|~��}�:�~^e�������������������MDTMSTMWTMPT�T@��PHP1??���:���������逢e�����E����ˉ��#�p�a�/v��(��X��v��u��X��W��:��9�����w�q�a�P��@��0ހ�5�	��	��
�ࡐٿ
�����������yeidYGIF9))("E�	
'��&��	��������̀ v!���"U�#j�$5�%J�&�'*�'�ߐ)
r)��*�T+���,�p�-���.�R�/~g�0�4�1g�2s�3Gf4R��5'H62ڀ7*8�8�9��:��;ۻ<�
�=��>��?�@oΐA���BO��Cd}�D/��ED_�E��G-|GӧI
^I��J�@K���L�\�M|��N�>�O\i�P� �Q<K�Rv�S-�TU�T��V5ƀV�,X�X�Y��Z��[ާ\��]��^d�_�k`MАa���b-��cgi�d
��eGK�e�v�g'-�g�X�i�i�:�j��k�Wl�mv9n��oVp��q5�ro�s�tO�t���v8��v�ݐx��x���y�v�z���{�X�|~��}�:�~^e�������������������MDTMSTMWTMPT�T@��PHP1??�����Q�X�x�h�C�`�X�h�#�`�8�h��`��h����mh�̧��Oh���཮����࿎����n��ƒ���N���cp��.~��L�`�`��,o`�}h�ښ@	��	���
�`�����
~�����^�����>��xg���XI��f�8+��`!H`�e`*`�G`�`�)`��`g`��` F�`!��`"0	�#i��$��%.`&B�'
�`'�$�(��`)��*ͧ`+�#`,��`-�`.�k`/j�`0mM`1J�`2Vi�3*�`46K�5
�`6-�6��7��8Ӌ�9���:�m�;�`<�O�=��`>s1�?~�`@\N`A^�`B<0`C>�`D`Ex`E��`F�Z`G���H�<`I�g�J�`K�I�L�`M�+�N}�`Ow
�Pf��Q`*`RF��S@`T&��U�`V��V��`W��X߲`Y�h�Z��`[��`\���]�g`^���_oI``ht�aO+`bHV�c/
`d(8�e�`fU`f��g�7`h���i�`j���k��`l���m��`nw��op�`p`�`qY��r@�`s9��t t`u��vV`v���w�8`x�c�y�`z�E�{�6�|�b`}��~�D`h����������
����NZSTNZMTNZDT�T@��PHP1??���	��	���
�`�����
~�����^�����>��xg���XI��f�8+��`!H`�e`*`�G`�`�)`��`g`��` F�`!��`"0	�#i��$��%.`&B�'
�`'�$�(��`)��*ͧ`+�#`,��`-�`.�k`/j�`0mM`1J�`2Vi�3*�`46K�5
�`6-�6��7��8Ӌ�9���:�m�;�`<�O�=��`>s1�?~�`@\N`A^�`B<0`C>�`D`Ex`E��`F�Z`G���H�<`I�g�J�`K�I�L�`M�+�N}�`Ow
�Pf��Q`*`RF��S@`T&��U�`V��V��`W��X߲`Y�h�Z��`[��`\���]�g`^���_oI``ht�aO+`bHV�c/
`d(8�e�`fU`f��g�7`h���i�`j���k��`l���m��`nw��op�`p`�`qY��r@�`s9��t t`u��vV`v���w�8`x�c�y�`z�E�{�6�|�b`}��~�D`h�����\�L
�L
LMTCHADTCHAST�T@��PHP1WS���b8L�'�M�E ��_��^H��eP	��s`
LMTSAMTWSTWSDTt8��*PHP1NZ�����Q�X�x�h�C�`�X�h�#�`�8�h��`��h����mh�̧��Oh���཮����࿎����n��ƒ���N���cp��.~��L�`�`��,o`�}h�ښ@	��	���
�`�����
~�����^�����>��xg���XI��f�8+��`!H`�e`*`�G`�`�)`��`g`��` F�`!��`"0	�#i��$��%.`&B�'
�`'�$�(��`)��*ͧ`+�#`,��`-�`.�k`/j�`0mM`1J�`2Vi�3*�`46K�5
�`6-�6��7��8Ӌ�9���:�m�;�`<�O�=��`>s1�?~�`@\N`A^�`B<0`C>�`D`Ex`E��`F�Z`G���H�<`I�g�J�`K�I�L�`M�+�N}�`Ow
�Pf��Q`*`RF��S@`T&��U�`V��V��`W��X߲`Y�h�Z��`[��`\���]�g`^���_oI``ht�aO+`bHV�c/
`d(8�e�`fU`f��g�7`h���i�`j���k��`l���m��`nw��op�`p`�`qY��r@�`s9��t t`u��vV`v���w�8`x�c�y�`z�E�{�6�|�b`}��~�D`h����������
����NZSTNZMTNZDTQ5T�most locationsPHP1NZ���	��	���
�`�����
~�����^�����>��xg���XI��f�8+��`!H`�e`*`�G`�`�)`��`g`��` F�`!��`"0	�#i��$��%.`&B�'
�`'�$�(��`)��*ͧ`+�#`,��`-�`.�k`/j�`0mM`1J�`2Vi�3*�`46K�5
�`6-�6��7��8Ӌ�9���:�m�;�`<�O�=��`>s1�?~�`@\N`A^�`B<0`C>�`D`Ex`E��`F�Z`G���H�<`I�g�J�`K�I�L�`M�+�N}�`Ow
�Pf��Q`*`RF��S@`T&��U�`V��V��`W��X߲`Y�h�Z��`[��`\���]�g`^���_oI``ht�aO+`bHV�c/
`d(8�e�`fU`f��g�7`h���i�`j���k��`l���m��`nw��op�`p`�`qY��r@�`s9��t t`u��vV`v���w�8`x�c�y�`z�E�{�6�|�b`}��~�D`h�����\�L
�L
LMTCHADTCHASTFDHC�Chatham IslandsPHP1CL���@��n@�l���ɰ��<@�������rܰuP�@I�U2� +�>O@
��@���@	�Ѱ
�@��0��@
��0��@h�0��H�0f��(v0F����&{��t�]��V��?��8��\@���>@p��� @ 0!o@"9�0#E��$�0%8�&��&�'١0(��)½�*צ�+���,���-���.�j�/bc�0��@1BE�2`i@3=�04@K@5D06
�@7հ8@8�09�+�:��0;�
�<��0=��>j�0?��@SʰAh��B3��CH��D��E1�@E�p�G�@G�0H�v@I�o0J�X@K��L�:@M|30N�@O\0Pz8�Q;�0RZ�S�0T9��U��V�V�װW���XĹ�Y��@Z���[¿@\�}�]��@^m�0_��@`M|0abe@b-^0cBG@d
@0e+c�e�"0gE�g�0h�'�i� �j�	�k��l��mu�n�@oUưps�@q5��rS�@s��t3�@t��0v�@vމ0w�r@x�k0y܎�z�M0{�p�|~/0}�R�~gK�|4����x��������	����	��������	EMTEASTEASST_��k�Easter Island & Sala y GomezPHP1VU
��´�����f������P���{�P k�@![�P"K�@#;�P$+@%~P&a@&�`P'�C@(�|�)�Q@*�H�+a3@������	LMTVUSTVUTn_5�BPHP1KIV�/�0��W@��eP��PHOT��J
�Phoenix IslandsPHP1TK��s`TKT{	e
`zPHP1FJ	
��<6;�6�`8$4`8��`K,�K�`L��`M��`�D����	LMTFJSTFJTm��"�PHP1TV��TVT|Um$PHP1EC
��L��P�����������LMTECTGALT����Galapagos IslandsPHP1PF	�PH���|���pLMTGAMTf�D��Gambier IslandsPHP1SB�O3�����LMTSBTz�J�PHP1GU	:C^`����GSTChST���xPHP1US�CH� �ˉ=��#�p�aI8ՍsH��lX��zh��zh��zh��s`HSTHDTHWTHPT��F!�HawaiiPHP1UM��s`HST��8�
Johnston AtollPHP1KIU�/} ��j��s`��LINT�-j"�*Line IslandsPHP1FM��P6�g@����KOST�qY�KosraePHP1MH	��P,t������W@��MHTKWAT�0m�	KwajaleinPHP1MH��P����MHT�=8�most locationsPHP1PF	�PLH��}8��zhLMTMART{��=�PMarquesas IslandsPHP1UM�u����u ��U�+00��eP��s`��eP��ePNSTNDTBSTSST�bb�Midway IslandsPHP1NR��+˴�H�BPp���|��~���LMTNRTJST��mZRPHP1NU�C5`t�8��`���^H��ePNUTlO�b�PHP1NF�A������NMTNFT]��zPHP1NC
���t�PV��ƜP7�@2�K�3Dp�����	����	LMTNCSTNCTgZU�PHP1AS���b8��U�+00��_���^H��eP	��eP
��ePLMTSAMTNSTBSTSSTs�U0�PHP1PW~�PWT�����
PHP1PN5DB���x����PNTPSTc�L*�PHP1FM��PONT����Ponape (Pohnpei)PHP1PG��PGTz�P�7zPHP1CK
�(?�y� �Yc �y9E 蕘"a��w�C��Y��%��;���h��� G��!�ˠ"1#j� $�%J� %��'*� '����lX��s`��zhCKTCKHSTh�ߥPHP1MP	��7p:C^`~�����MPTChST����PHP1??���b8��U�+00��_���^H��eP	��eP
��ePLMTSAMTNSTBSTSST�T@��PHP1PF	�PU���s���s`LMTTAHTn�J.pSociety IslandsPHP1KI��GILT�}���Gilbert IslandsPHP1TO	�sB�7�G�8�}�:P:r�@;��P<R�@�p��������TOTTOSTi`PHP1FM��TRUT��b�B�Truk (Chuuk) and YapPHP1UM��WAKT����"Wake IslandPHP1WF��WFTu��ePHP1??��TRUT�T@��PHP1??

�
��*Л`����ٮ�����������������e��}|`�v���Kͩ�΢Cϒ4Ѐ�`Є�ѕ�pҊ�`�b�p�K#��^��)��,�	������x�T����᥀�і���캳���Z�zw�<�ZY��:;�}:��
*�p
�U���7�t(�d�T
�M63�#݀΀���㡀Ӓ�Ã���������|s ld!\U!���"LT#<E$,6%'&'C�'�4�(�%�)��*��+���,��-�ڐ.�ː/t��0d��1]�2r�3=�4R�5�62x6�8��8�a9�v�:�C;�X�<�_�=�:�>�A�?��@f#�A�9BF�CdD%�EC�FɐG#�G��I�I��J�K��L̿�M��N���OnnP���QW��Rle�S7l�TLG�UN�V,)�V�0�XFX��Y�(Z��[�
\�]��^�_��`_�a}�b?�c]̐d�e=��f��g��g藐h�r�i�y�j�T�k�[�l�qm�=�n�Soh�p�5qQ<rfs1tE�uv/�v��x��x��y�ِz��{λ�|�}���~y����																																																		� 	 	*0
   	WMTCESTCETEESTEET�T@��PHP1??����Kmp��ǀ���p�Ƀp�rp����_Tp���p�A�p�nop�#�O���p���ɧ�#�Op���k�p"p�r�p�Pp�2Lp��p���p��p�ȷ𽸨�_p������xl��h]��XN��?p�80��:���X�p���p�/p�� p��b�˵R����̀K��ܢ�͕4���K`�r���ſp�u�Ϭg��R��Х�p�T��ьI��2f�҅�p�Y���I���9� �)� �� �	� �� �� ܹY ݲ��ޢu�ߒf��W��rH��b9��R*��B��2��!���) � � �� ��� ��� �� �   �z� �j� �c���S���C���3���#s��d��U���F��*
���7�t(�d�T�C��3��#�ܐ͐�㽠Ӡ�Ñ���������|� lr!\c"LT#<E$,6%'&'C�'�4�(�%�)��*��+���,��-�ڐ.�ː/t��0d��1]�2r�3=�4R�5�62x6�8��8�a9�v�:�C;�X�<�_�=�:�>�A�?��@f#�A�9BF�CdD%�EC�FɐG#�G��I�I��J�K��L̿�M��N���OnnP���QW��Rle�S7l�TLG�UN�V,)�V�0�XFX��Y�(Z��[�
\�]��^�_��`_�a}�b?�c]̐d�e=��f��g��g藐h�r�i�y�j�T�k�[�l�qm�=�n�Soh�p�5qQ<rfs1tE�uv/�v��x��x��y�ِz��{λ�|�}���~y����	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
���p		 
 	LMTWESTWETWEMTCETCEST�T@��PHP1??�����\��'p�����Z��6ip ~h�!Iap"^J�#)Cp$Gg%_�&'I&�A�(+(�#�q�~�p�LMTCDTCST�T@��PHP1??���H������*�����ˉ��#�p�a&��� ��f��e ��H��G ��*�) �x q(�a'�Q
�A	�0��C�	ΐ	�� 
�௠��
������� ���� ysir YUIT 97)6 "S�	 5��4������������ې v+ !���"V
 #j�$5� %J�&� '*�'��)
�)�Ϡ*�b+���,�~�-���.�`�/~u�0�B�1g� 2s$�3Gt 4S�5'V 62�78 88� 9��:� ;��<��=��>���?��@oܠA���BO��Cd��D/��EDm�E�� G-�Gӵ I
lI�� J�NK���L�j�M|��N�L�O\w�P�.�Q<Y�Rv�S;�TU�T��V5ԐV�: X�X� Y��Z�� [޵\�� ]��^d� _�y`Mޠa���b-��cgw�d
��eGY�e턠g';�g�f�i�i�H�j�k�e l�mvG n��oV) p��q6 ro�s� tO�t�	�v8��v��x��x�͠y���z���{�f�|~��}�H�~^s��*�����������������PDTPSTPWTPPT�T@��PHP1??(ї��azp�y��B���Z:�#�p�<��fp������&���p��Y�ݪ��rsߵdp�|�ᖗ��]���w�p�>��0 p�!q��p������������p����?�������/��y�p�V�p	݉�
ν��PS��~�p�CDTCST�T@��PHP1??��~x���𸄴x�O)��ᒀ�	��5x���
� �Dp!n=`"�&p#N`w�~�~�p���KSTKDT�T@��PHP1??�����gN��
�`ʳ�`ˑ_�Hm�M���a]bpg 	g ix~�ixp�SMTMALTMALSTJSTSGT�T@��PHP1??		�	�����`�վТec�{�P�N�`�?�Ц%'�'Ъ((`��Ы����1P��`����J�`�΀P�ˮ`��P�q���k	PӢ9`�CP�L
��){��+���	]���`��?���`��\P���`ݳ����`�d��h`�8����k�����K��i�`4�Pn�p9���u	��	�:�
���`�$P
�9`��P�`�sPg��M6Gz�#݀'\���>���Pܔ�����P��|s ld!\U"LF#<7$,(%&
'5�'�p(�	p)�p*��p+��p,��p-��p.��p/t�p0d�p1]��2r��3=��4Ry�5��62[�6�b�8xp8�D�9�Zp:�&�;�<p<�Cp=�p>�%p?�p@fpA��BE�pCc��D%�pEC��E�2�FɐG#�G��I�I��J�K��L̿�M��N���OnnP���QW��Rle�S7l�TLG�UN�V,)�V�0�XFX��Y�(Z��[�
\�]��^�_��`_�a}�b?�c]̐d�e=��f��g��g藐h�r�i�y�j�T�k�[�l�qm�=�n�Soh�p�5qQ<rfs1tE�uv/�v��x��x��y�ِz��{λ�|�}���~y����h*0 	8@
*0*0 	*0 	IMTEESTEETTRSTTRT�T@��PHP1??UCT�T@��PHP1??UTC�T@��PHP1??�&ˉ6��#�p�aB0��G���c@��F0�E@�(0x'@qD�aC�Q&�A%�1��_�	�	��@
�̰����0
�����0��@��0��@y�0i�@Yq0Ip@9S0)R@"o�	4@Q�+�B��%��$������� v90!�ˠ"V0#j� $5�0%J� &�0'*� '���)
� )�ݰ*�p +���,ӌ�-���.�n�/~��0�P�1g�02s2�3G�04S�5'd062��7F08 8�(09�� :�
0;�� <�&�=�� >��?�� @o�A���BO̰Cd��D/��ED{�E��0G-� G��0I
z I��0J�\ K���L�x�M|��N�Z�O\��P�<�Q<g�Rv�SI�TV�T�+�V5�V�H0X� X�*0Y�� Z�0[�� \��0]�� ^d�0_�� `M�a���b-ΰcg��d
��eGg�e풰g'I�g�t�i+�i�V�j�
�k�s0l�* mvU0n� oV70p�� q60ro� s�0tO� t��v8Πv��x��x�۰y���z���{�t�|~��}�V�~^���8���s`���p���p	��s`���p���p�������p!CATCAWTCAPTAHSTAHDTYSTAKDTAKST�T@��PHP1??�#ˉD��#�p�aP@��U���qP��T@�SP�6@x5PqR�aQ�Q4�A3�1��m�	��	��P
������@
�����@��P��@��Py�@i�PY@I~P9a@)`P"}�	BP_�+" �P��3��2�������� vG@!�ٰ"V)@#j�0$6@%J�0&�@'*�0'�	�)
�0)��*�~0+��,Ӛ�-���.�|�/~��0�^�1g�@2s@�3G�@4S"�5'r@63�7T@8!08�6@9�0:�@;��0<�4�=��0>��?��0@o��A�ŰBO�Cd��D/��ED��E��@G-�0G��@I
�0I��@J�j0K��Lֆ�M|��N�h�O\��P�J�Q<u�Rv,�SW�TV�T�9�V5�V�V@X
0X�8@Y��0Z�@[��0\��@]��0^d�@_��0`M��a���b-�cg��d
��eGu�e�g'W�g͂�i9�i�d�j��k��@l�80mvc@n�0oVE@p��0q6'@ro�0s	@tO�0t�%�v8ܰv��x��x��y���z��{؂�|~��}�d�~^���F���eP��s`��s`��eP��s`��s`���p��s`NSTNWTNPTBSTBDTAHSTHADTHAST�T@��PHP1??
��:����������ˉ���Ϗ�Ё��u��X������������MDTMSTMWT�T@��PHP1??���,����p������p��t����EҀ�c��S���p�3�������ޕ����w��a��Y�C�~;�_��gXp�|A��G:p�\#��'p�<���p�瀹��p����p�������������Z���<p„��O���dn�/f��M���H��-l��ep�
N���Gpˈ���#�p�a	��u��@���U�� ���5�������������s��ޗ�ݩ�p޾y�߉rp�[��iTp�~=��I6p�^��W<��G<�7��'������������������p����p�€��p�o���_�p�O���?ip�/h��(��J��g�g��I��I��+�+��
��
���w�qpa�P�p@�0�p�'�	�p	��
�p�ٰ�
�u�������t��tyV�iVY8�I89�)"7p�p���p����p�܀��p v!��p"U�#j��$5�%J��&�'*��'�р)
c�)޳�*�E�+���,�bp-�w�.�Dp/~Y�0�&p1gv2sp3GX4R�p5':62�p78��8�9���:��;۬�<���=���>�ހ?�p�@o��A��pBO��CdopD/��EDQpE�G-m�GәI
O�I�{J�1�K���L�NpM|y�N�0pO\[�P�pQ<=�Ru�pS�TU�pT��V5�pV�X��X�Y���Z��[ޘ�\��]�z�^d�_�\�`M€a�ypb-��cg[pd
��eG=pe�h�g'pg�J�ipi�,�j��pk�Il��mv+n���oV
p���q5�ro��s�tO��t��v8�pv�πx�px���y�hpz���{�Jp|~u�}�,p~^W��p��������������������CDTCSTESTCWTCPT�T@��PHP1??���p���`��p���`�e�p����j�p�5�`�S���`�3�����އ��p�i��R�K௳4�~-౜Qp�gJ`�|3p�G,`�\p�'`�;�p��`��p���`���ƴ`������Ĺ𿏲���o��„}��Ov��d_��/X��M|p�:��-^p�W`�
@p��9`ˈ�p�#�p�`���u���@���U��� ���5�������������p�e��މpݩ�`޾kp߉d`�Mp�iF`�~/p�I(`�^p�W.��G-��7��'���������������ֶ��Ƶ���`��p�`�p��`�o�p�_y`�Oxp�?[`�/Zp�(w�<p�Y�X��;��:�����������w��p�``�pP�`@�p0�`�p	�`	���
�`�p٢�
�gp�������f��e�yH�iG�Y*�I)�9�)�")`��`�
p��`��p��`��p��` v�!��`"U��#j��$5��%J��&��'*s�'��p)
U�)ޥp*�7�+��p,�T`-�ip.�6`/~Kp0�`1gg�2r�`3GI�4R�`5'+�62�`7
�8��8���9���:���;۞�<��p=���>��p?�b�@o�pA�`BO�pCda`D/vpEDC`E��G-_�Gӊ�I
A�I�l�J�#�K��pL�@`M|kpN�"`O\MpP�`Q</pRu�`SpTU�`T��pV5�`V��X��X���Y���Z���[ފ�\���]�l�^d��_�N�`M�pa�k`b-�pcgM`d
xpeG/`e�Zpg'`g�<pi�`i�pj��`k�:�l���mv�n���oU��p���q5��ro��s��tOy�t��pv8�`v�pxx`x��py�Z`z��p{�<`|~gp}�`~^Ip�`�������������EDTESTEWTEPT�T@��PHP1??b��,����p������p�W"���Gpˈ���#�p�a	��u��@���U�� ���5�������������s��ޗ�ݩ�p޾y�߉rp�[��iTp�~=��I6p�^���������������D/vpEDC`E��G-_�Gӊ�I
A�I�l�J�#�K��pL�@`M|kpN�"`O\MpP�`Q</pRu�`SpTU�`T��pV5�`V��X��X���Y���Z���[ފ�\���]�l�^d��_�N�`M�pa�k`b-�pcgM`d
xpeG/`e�Zpg'`g�<pi�`i�pj��`k�:�l���mv�n���oU��p���q5��ro��s��tOy�t��pv8�`v�pxx`x��py�Z`z��p{�<`|~gp}�`~^Ip�`�����������������������CDTCSTCWTCPTESTEDT�T@��PHP1??�CH� �ˉ=��#�p�aI8ՍsH��lX��zh��zh��zh��s`HSTHDTHWTHPT�T@��PHP1??���,����p������pˈ���#�p�a	��U�� ���5�������������s��ޗ�ݩ�p޾y�߉rp�[��iTp�~=��I6p�^��W<��G<�7��'�������������������p����p�€�_�p��g��I��I��+�+��
��
���w�qpa�P�p@�0�p�'�	�p	��
�p�ٰ�
�u�������t��tyV�iVY8�I89�)"7p�p���p����p�܀��p v!��p"U�#j��$5�%J��&�'*��'�р)
c�D/vpEDQpE�G-m�GәI
O�I�{J�1�K���L�NpM|y�N�0pO\[�P�pQ<=�Ru�pS�TU�pT��V5�pV�X��X�Y���Z��[ޘ�\��]�z�^d�_�\�`M€a�ypb-��cg[pd
��eG=pe�h�g'pg�J�ipi�,�j��pk�Il��mv+n���oV
p���q5�ro��s�tO��t��v8�pv�πx�px���y�hpz���{�Jp|~u�}�,p~^W��p��������������������CDTCSTCWTCPTEST�T@��PHP1??���"[�<�ˈ�p�#�p�`���5�����3�p��;�@�p0�`�p	�`
�p
�`�p٢�
�gp�������f��e�yH�iG�Y*�I)�9�)�")`��`�
p��`��p��`��p��` v�!��`"U��#j��$5��%J��&��'*s�'��p)
U�)ޥp*�7�+��p,�T`-�ip.�6`/~Kp0�`1gg�2r�`3GI�4R�`5'+�62�`7
�8��8���9���:���;۞�<��p=���>��p?�b�@o�pA�`BO�pCda`D/vpEDC`E��G-_�Gӊ�I
A�I�l�J�#�K��pL�@`M|kpN�"`O\MpP�`Q</pRu�`SpTU�`T��pV5�`V��X��X���Y���Z���[ފ�\���]�l�^d��_�N�`M�pa�k`b-�pcgM`d
xpeG/`e�Zpg'`g�<pi�`i�pj��`k�:�l���mv�n���oU��p���q5��ro��s��tOy�t��pv8�`v�pxx`x��py�Z`z��p{�<`|~gp}�`~^Ip�`���%�����������������LMTCSTESTEWTEPTEDT�T@��PHP1??���:���������逢e�����E����ˉ��#�p�a�/v��(��X��v��u��X��W��:��9�����w�q�a�P��@��0ހ�5�	��	��
�ࡐٿ
�����������yeidYGIF9))("E�	
'��&��	��������̀ v!���"U�#j�$5�%J�&�'*�'�ߐ)
r)��*�T+���,�p�-���.�R�/~g�0�4�1g�2s�3Gf4R��5'H62ڀ7*8�8�9��:��;ۻ<�
�=��>��?�@oΐA���BO��Cd}�D/��ED_�E��G-|GӧI
^I��J�@K���L�\�M|��N�>�O\i�P� �Q<K�Rv�S-�TU�T��V5ƀV�,X�X�Y��Z��[ާ\��]��^d�_�k`MАa���b-��cgi�d
��eGK�e�v�g'-�g�X�i�i�:�j��k�Wl�mv9n��oVp��q5�ro�s�tO�t���v8��v�ݐx��x���y�v�z���{�X�|~��}�:�~^e�������������������MDTMSTMWTMPT�T@��PHP1??���H������*�����ˉ��#�p�a&�t ؀���Ѡ���޳�ݩ��޾��߉���w��ip��~Y��IR��^;��)4��GX �Q�': ��3� ���� ���� �����q��ޠ����o���_���O���?���/���(��f������ ��f��e ��H��G ��*�) �x q(�a'�Q
�A	�0��C�	ΐ	�� 
�௠��
������� ���� ysir YUIT 97)6 "S�	 5��4������������ې v+ !���"V
 #j�$5� %J�&� '*�'��)
�)�Ϡ*�b+���,�~�-���.�`�/~u�0�B�1g� 2s$�3Gt 4S�5'V 62�78 88� 9��:� ;��<��=��>���?��@oܠA���BO��Cd��D/��EDm�E�� G-�Gӵ I
lI�� J�NK���L�j�M|��N�L�O\w�P�.�Q<Y�Rv�S;�TU�T��V5ԐV�: X�X� Y��Z�� [޵\�� ]��^d� _�y`Mޠa���b-��cgw�d
��eGY�e턠g';�g�f�i�i�H�j�k�e l�mvG n��oV) p��q6 ro�s� tO�t�	�v8��v��x��x�͠y���z���{�f�|~��}�H�~^s��*�����������������PDTPSTPWTPPT�T@��PHP1??���H������*�����ˉ��#�p�a&�t ؀���Ѡ���޳�ݩ��޾��߉���w��ip��~Y��IR��^;��)4��GX �Q�': ��3� ���� ���� �����q��ޠ����o���_���O���?���/���(��f������ ��f��e ��H��G ��*�) �x q(�a'�Q
�A	�0��C�	ΐ	�� 
�௠��
������� ���� ysir YUIT 97)6 "S�	 5��4������������ې v+ !���"V
 #j�$5� %J�&� '*�'��)
�)�Ϡ*�b+���,�~�-���.�`�/~u�0�B�1g� 2s$�3Gt 4S�5'V 62�78 88� 9��:� ;��<��=��>���?��@oܠA���BO��Cd��D/��EDm�E�� G-�Gӵ I
lI�� J�NK���L�j�M|��N�L�O\w�P�.�Q<Y�Rv�S;�TU�T��V5ԐV�: X�X� Y��Z�� [޵\�� ]��^d� _�y`Mޠa���b-��cgw�d
��eGY�e턠g';�g�f�i�i�H�j�k�e l�mvG n��oV) p��q6 ro�s� tO�t�	�v8��v��x��x�͠y���z���{�f�|~��}�H�~^s��*�����������������PDTPSTPWTPPT�T@��PHP1??���b8��U�+00��_���^H��eP	��eP
��ePLMTSAMTNSTBSTSST�T@��PHP1??UTC�T@��PHP1??z	
�c���E�t6�d'�T�MD3��#�ܐ͐�㯐Ӡ�Ñ���������|� lr!\c"LT#<E$,6%'&'C�'�4�(�%�)��*��+���,��-�ڐ.�ː/t��0d��1]�2r�3=�4R�5�62x6�8��8�a9�v�:�C;�X�<�_�=�:�>�A�?��@f#�A�9BF�CdD%�EC�FɐG#�G��I�I��J�K��L̿�M��N���OnnP���QW��Rle�S7l�TLG�UN�V,)�V�0�XFX��Y�(Z��[�
\�]��^�_��`_�a}�b?�c]̐d�e=��f��g��g藐h�r�i�y�j�T�k�[�l�qm�=�n�Soh�p�5qQ<rfs1tE�uv/�v��x��x��y�ِz��{λ�|�}���~y����WESTWET�T@��PHP1??��_؝>�*���9���X��m�(�<�@�m��=2��h��=��EP��`'���@�P�����C@̓�����������s�|d� lU�!\F�"L7�#<(�$,�%
�&��''p'�p(��)x��)��@*ij0+��p,��p-��p.��p/t�p0d�p1]��2r��3=��4Ry�5��62[�6�b�8xp8�D�9�Zp:�&�;�<p<�Cp=�p>�%p?�p@fpA��BE�pCc��D%�pEC��F�pG#��G���I��IΫ�J��K���ḶpM�o�N��pOnQ�P�gpQWnpRlIpS7PpTL+pU2pV,
pV�pX)�X�pY��Z��p[���\���]���^��_���`_��a}�pb?��c]�pd|�e=�pf�pgtpg�{ph�Vpi�]pj�8pk�?pl�T�m�!pn�6�ohpp��qQ�re��s1�tE��u��v.�pv���x�pxЧ�y�pz���{Οp|��p}��p~y�p�cp						
																																													#(1h#X?x*0
8@FP *0
8@*0 MMTMSTMDSTMSKMSDEETEEST�T@��PHP1??UTC�T@�� (DST)TYPE: %d  %.5f GMT %05d%s GMT 00000 / %d.%d / %lld weekdayTS: %lld | %s%04lld-%02lld-%02lld %02lld:%02lld:%02lld%3lldY %3lldM %3lldD / %3lldH %3lldM %3lldSpB;Zx����0N����;Zx����0NlibXML support2.10.2libXML VersionlibXML streams%00Stream-Contextcolumn%s in %s, line: %d%s in Entity, line: %dwbrbLIBXML_VERSIONLIBXML_DOTTED_VERSIONLIBXML_NOENTLIBXML_DTDLOADLIBXML_DTDATTRLIBXML_DTDVALIDLIBXML_NOERRORLIBXML_NOWARNINGLIBXML_NOBLANKSLIBXML_XINCLUDELIBXML_NSCLEANLIBXML_NOCDATALIBXML_NONETLIBXML_COMPACTLIBXML_NOXMLDECLLIBXML_PARSEHUGELIBXML_NOEMPTYTAGLIBXML_ERR_NONELIBXML_ERR_WARNINGLIBXML_ERR_ERRORLIBXML_ERR_FATALLibXMLErrorlibxmllibxml_set_streams_contextlibxml_use_internal_errorslibxml_get_last_errorlibxml_clear_errorslibxml_get_errorslibxml_disable_entity_loaderdisableuse_errors����p��������������������(���������������̽�̽���,��̽�ս�̽�̽�̽�̽�,��̽�޽�̽�,��̽�,��޽�,��OpenSSL keyOpenSSL X.509OpenSSL X.509 CSRPHP stream indexOpenSSL 1.1.1w  11 Sep 2023OPENSSL_VERSION_TEXTOPENSSL_VERSION_NUMBERX509_PURPOSE_SSL_CLIENTX509_PURPOSE_SSL_SERVERX509_PURPOSE_NS_SSL_SERVERX509_PURPOSE_SMIME_SIGNX509_PURPOSE_SMIME_ENCRYPTX509_PURPOSE_CRL_SIGNX509_PURPOSE_ANYOPENSSL_ALGO_SHA1OPENSSL_ALGO_MD5OPENSSL_ALGO_MD4PKCS7_DETACHEDPKCS7_TEXTPKCS7_NOINTERNPKCS7_NOVERIFYPKCS7_NOCHAINPKCS7_NOCERTSPKCS7_NOATTRPKCS7_BINARYPKCS7_NOSIGSOPENSSL_PKCS1_PADDINGOPENSSL_SSLV23_PADDINGOPENSSL_NO_PADDINGOPENSSL_PKCS1_OAEP_PADDINGOPENSSL_CIPHER_RC2_40OPENSSL_CIPHER_RC2_128OPENSSL_CIPHER_RC2_64OPENSSL_CIPHER_DESOPENSSL_CIPHER_3DESOPENSSL_KEYTYPE_RSAOPENSSL_KEYTYPE_DSAOPENSSL_KEYTYPE_DHOPENSSL_KEYTYPE_ECOPENSSL_CONFSSLEAY_CONFopenssl.cnf%s/%ssslv3sslv2tlstcphttpsftpsOpenSSL supportOpenSSL Versionunable to stat %serror loading file %serror loading directory %sszspkeyextracertsunable to write random stateRANDFILEUnsupported private key typedmp1dmq1iqmprsapriv_keypub_keydsacurve_namecurve_oidpassphraseallow_self_signedverify_depthUnknown signature algorithmsss|bUnknown cipher algorithmsrillegal length in timestampmemory allocation failureerror opening the file, %serror reading the file, %sno certificates in file, %sconfigconfig_section_nameoid_fileoid_sectionproblem creating object %s=%sdigest_algx509_extensionsreq_extensionsprivate_key_bitsprivate_key_typeencrypt_keyencrypt_rsa_keydefault_mdstring_maskrequest_extensions_sectiondefault_bitsfile://rs|berror opening file %srz|bZ|bZs|bZz|b%08lxissuerserialNumbervalidFromvalidTovalidFrom_time_tvalidTo_time_taliaspurposesemail:DNS:URI:Zl|a!sssZa!|llFailed to get cipher%s: %s
OpenSSL X.509/keyZZZszs|afriendly_namezzzs|aZZ!Zl|a!lerror unpacking public keyNo memoryfailed to sign itaz|a!a!distinguished_nameError signing requestZs|s!a!Zz|s!a!ssZ|Zunable to get private keyszZ|lszZ|zUnknown signature algorithm.ssZ|zszza/|sszsZ|sssZZa!|lserror getting private keyerror getting certerror opening input file %s!error opening output file %s!sl|sassverify_peerCN_matchcafilecapathcipherslocal_certopensslopenssl_pkey_freeopenssl_pkey_newopenssl_pkey_exportopenssl_pkey_export_to_fileopenssl_pkey_get_privateopenssl_pkey_get_publicopenssl_pkey_get_detailsopenssl_free_keyopenssl_get_privatekeyopenssl_get_publickeyopenssl_x509_readopenssl_x509_freeopenssl_x509_parseopenssl_x509_checkpurposeopenssl_x509_exportopenssl_x509_export_to_fileopenssl_pkcs12_exportopenssl_pkcs12_export_to_fileopenssl_pkcs12_readopenssl_csr_newopenssl_csr_exportopenssl_csr_export_to_fileopenssl_csr_signopenssl_csr_get_subjectopenssl_csr_get_public_keyopenssl_digestopenssl_encryptopenssl_decryptopenssl_signopenssl_verifyopenssl_sealopenssl_openopenssl_pkcs7_verifyopenssl_pkcs7_decryptopenssl_pkcs7_signopenssl_pkcs7_encryptopenssl_private_encryptopenssl_private_decryptopenssl_public_encryptopenssl_public_decryptopenssl_get_md_methodsopenssl_get_cipher_methodsopenssl_dh_compute_keyopenssl_error_stringunable to load random state; not enough random data!private key length is too short; it needs to be at least %d bits, not %dFailed to create cipher contextillegal ASN1 data type for timestampextension author too lazy to parse %s correctlyproblem loading oid section %sError loading %s section %s of %sInvalid global string mask setting %scannot get CSR from parameter 1supplied parameter cannot be coerced into an X509 certificate!cannot get cert from parameter 1/builddir/build/BUILD/php-5.2.17/ext/openssl/openssl.ckey array must be of the form array(0 => key, 1 => phrase)key type not supported in this PHP build!supplied key param is a public keyDon't know how to get public key from this private keycannot get private key from parameter 3private key does not correspond to certcannot get cert from parameter 2private key does not correspond to signing certSignature verification problemsSignature did not match the certificate requestUnable to generate a private keydn: add_entry_by_NID %d -> %s (failed)dn: %s is not a recognized nameadd_entry_by_txt %s -> %s (failed)no objects specified in config fileattribs: add_entry_by_NID %d -> %s (failed)add1_attr_by_txt %s -> %s (failed)Error loading extension section %scannot get key from parameter 1unable to coerce parameter 3 to x509 certkey param is not a valid private keykey parameter is not a valid private keykey parameter is not a valid public keysupplied key param cannot be coerced into a private keysupplied key param cannot be coerced into a public keyFourth argument to openssl_seal() must be a non-empty arraynot a public key (%dth member of pubkeys)unable to coerce parameter 4 into a private keyerror creating PKCS7 structure!signature OK, but cannot open %s for writingCould not get peer certificateCould not verify peer: code:%d %sUnable to locate peer certificate CNPeer certificate CN=`%.*s' is malformedPeer certificate CN=`%.*s' did not match expected CN=`%s'Unable to set verify locations `%s' `%s'Unable to set local cert chain file `%s'; Check that your cafile/capath settings include details of your certificate and its issuerUnable to set private key file `%s'Private key does not match certificate!openssl_x509_check_private_key��������������Server: Microsoft-IISServer: GFE/SSL: fatal protocol errorSSL: %sOpenSSL Error messages:
SSL: connection timeoutcapture_peer_certpeer_certificatecapture_peer_cert_chainpeer_certificate_chainFailed to enable cryptor+Out of memory
tcp_socket/sslSSL_R_NO_SHARED_CIPHER: no suitable shared cipher could be used.  This could be because the server is missing an SSL certificate (local_cert context option)SSL operation failed with code %d. %s%sSSL/TLS already set-up for this streamSSLv2 support is not compiled into the openSSL library PHP is linked againstSSLv3 support is not compiled into the openSSL library PHP is linked againstfailed to create an SSL contextfailed to create an SSL handlesupplied session stream must be an SSL enabled stream�d�d�d�c�d�d��d�d�$tIPCRE Library VersionPREG_PATTERN_ORDERPREG_SET_ORDERPREG_OFFSET_CAPTUREPREG_SPLIT_NO_EMPTYPREG_SPLIT_DELIM_CAPTUREPREG_SPLIT_OFFSET_CAPTUREPREG_GREP_INVERTPREG_NO_ERRORPREG_INTERNAL_ERRORPREG_BACKTRACK_LIMIT_ERRORPREG_RECURSION_LIMIT_ERRORPREG_BAD_UTF8_ERRORPREG_BAD_UTF8_OFFSET_ERRORPCRE_VERSIONEmpty regular expression([{< )]}> )]}>Unknown modifier '%c'Error while studying patternInvalid flags specifiedGet subpatterns list failedssz|llss|zllregexp codeFailed evaluating code: %s%sResult is too big, max is %d/./usUnknown errorss|llsa|lpcrepreg_matchpreg_match_allpreg_replacepreg_replace_callbackpreg_splitpreg_quotepreg_greppreg_last_errorpcre.backtrack_limit100000pcre.recursion_limit�k��k��k��k��k��k��k��k��k��k��k��k��k��k��k��k��k��k��k��k��k��k��k��k��k��k��k��k��k��k��k��k��k�k��k��k�k��k��k��k�k�k�k�k��k��k�k��k��k��k��k��k��k��k��k��k��k��k�k��k�k�k�k�k��k��k��k��k��k��k��k��k��k��k��k��k��k��k��k��k��k��k��k��k��k��k��k��k��k��k��k�k�k�k�k��k��k��k��k��k��k��k��k��k��k��k��k��k��k��k��k��k��k��k��k��k��k��k��k��k��k��k��k�k�k�k�r�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�r�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�8t�t�t�(t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�s�t�t�t�t�t�t�t�t�t�t�t�t��r�t�t�t�t�t�t�t�xt�t�t�t�t�t�ht�t�Xt�t�t�Ht�PCRE (Perl Compatible Regular Expressions) SupportInternal pcre_fullinfo() error %dNumeric named subpatterns are not allowedDelimiter must not be alphanumeric or backslashCompilation failed: %s at offset %dNo ending delimiter '%c' foundNo ending matching delimiter '%c' foundMatched, but too many substringsModifier /e cannot be used with replacement callbackUnable to call custom replacement functionParameter mismatch, pattern is a string while replacement is an arrayRequires argument 2, '%s', to be a valid callbackZLib Supportcompress.zlib://Stream Wrapper supportzlib.inflate, zlib.deflateStream Filter support1.2.11Compiled VersionLinked Versionzlib.*compress.zlibFORCE_GZIPFORCE_DEFLATEps|lp|lContent-Encoding: gzipContent-Encoding: deflateVary: Accept-EncodingCompression failedref.outcontrolHTTP_ACCEPT_ENCODINGzlib output compressionoffob_gzhandlermb_output_handlerURL-Rewriterzlib.output_compressionzlib.output_compression_levelzlib.output_handler1.1readgzfilegzrewindgzclosegzeofgzgetcgzgetsgzgetssgzreadgzopengzpassthrugzseekgztellgzwritegzputsgzcompressgzuncompressgzdeflategzinflategzencodezlib_get_coding_typecompression level(%ld) must be within -1..9encoding mode must be FORCE_GZIP or FORCE_DEFLATEcompression level (%ld) must be within -1..9length (%ld) must be greater or equal zeroCannot change zlib.output_handler - headers already sentCannot use both zlib.output_compression and output_handler together!!Cannot change zlib.output_compression - headers already sentoutput handler 'ob_gzhandler' cannot be used twiceoutput handler 'ob_gzhandler' cannot be used after 'mb_output_handler'output handler 'ob_gzhandler' cannot be used after 'URL-Rewriter'cannot open a zlib stream for reading and writing at the same time!zlib:gzopen failedSEEK_END is not supportedZLIBFailed allocating %zd bytes.zlib.inflatewindowInvalid parameter give for window size. (%ld)Invalid parameter give for memory level. (%ld)Invalid compression level specified. (%ld)Invalid filter parameter, ignored.EnabledBZip2 Supportcompress.bz2://BZip2 Versioncompress.bzip2bzip2.*String too long, max is %dlength may not be negativecompress.bzip2://filename cannot be emptyBZip2bz2bzopenbzreadbzwritebzflushbzclosebzerrnobzerrstrbzerrorbzcompressbzdecompresssmallblocksizeworkfactorbzbzip2.decompress, bzip2.compressDecompressed size too big, max is %dcould not read valid bz2 data from stream'%s' is not a valid mode for bzopen(). Only 'w' and 'r' are supported.cannot use stream opened in mode '%s'cannot read from a stream opened in write only modecannot write to a stream opened in read only mode{�G�z�?��@Failed allocating %zu bytes.bzip2.decompressbzip2.compressblocksworkInvalid parameter given for number of blocks to allocate. (%ld)Invalid parameter given for work factor. (%ld)CAL_GREGORIANCAL_JULIANCAL_JEWISHCAL_FRENCHCAL_NUM_CALSCAL_DOW_DAYNOCAL_DOW_SHORTCAL_DOW_LONGCAL_MONTH_GREGORIAN_SHORTCAL_MONTH_GREGORIAN_LONGCAL_MONTH_JULIAN_SHORTCAL_MONTH_JULIAN_LONGCAL_MONTH_JEWISHCAL_MONTH_FRENCHCAL_EASTER_DEFAULTCAL_EASTER_ROMANCAL_EASTER_ALWAYS_GREGORIANCAL_EASTER_ALWAYS_JULIANCAL_JEWISH_ADD_ALAFIM_GERESHCAL_JEWISH_ADD_ALAFIMCAL_JEWISH_ADD_GERESHAYIMCalendar supportinvalid calendar ID %ld.invalid date.abbrevmonthsmaxdaysinmonthcalnamecalsymbolinvalid calendar ID %ld%i/%i/%iabbrevdaynameabbrevmonthl|blYear out of range (0-9999).GregorianJulianJewishFrenchcalendarjdtogregoriangregoriantojdjdtojulianjuliantojdjdtojewishjewishtojdjdtofrenchfrenchtojdjddayofweekjdmonthnameeaster_dateeaster_daysunixtojdjdtounixcal_to_jdcal_from_jdcal_days_in_monthcal_infojuliandaycounthebrewfljdayP����(������`��0�������������������VendemiaireBrumaireFrimaireNivosePluvioseVentoseGerminalFlorealPrairialMessidorThermidorFructidorExtra@���8��������������%1=JVco{��������






������������������'�� ����������������������TishriHeshvanKislevTevetShevatAdarIAdarIINisanIyyarSivanTammuzAvElulThis function is only valid for years between 1970 and 2037 inclusivectype functionsctypectype_alnumctype_alphactype_cntrlctype_digitctype_lowerctype_graphctype_printctype_punctctype_spacectype_upperctype_xdigitcURL supportcURL Informationcurlcurl_multiCURLOPT_DNS_USE_GLOBAL_CACHECURLOPT_DNS_CACHE_TIMEOUTCURLOPT_PORTCURLOPT_FILECURLOPT_READDATACURLOPT_INFILECURLOPT_INFILESIZECURLOPT_URLCURLOPT_PROXYCURLOPT_VERBOSECURLOPT_HEADERCURLOPT_HTTPHEADERCURLOPT_NOPROGRESSCURLOPT_NOBODYCURLOPT_FAILONERRORCURLOPT_UPLOADCURLOPT_POSTCURLOPT_FTPLISTONLYCURLOPT_FTPAPPENDCURLOPT_NETRCCURLOPT_FOLLOWLOCATIONCURLOPT_PUTCURLOPT_USERPWDCURLOPT_PROXYUSERPWDCURLOPT_RANGECURLOPT_TIMEOUTCURLOPT_TIMEOUT_MSCURLOPT_POSTFIELDSCURLOPT_REFERERCURLOPT_USERAGENTCURLOPT_FTPPORTCURLOPT_FTP_USE_EPSVCURLOPT_LOW_SPEED_LIMITCURLOPT_LOW_SPEED_TIMECURLOPT_RESUME_FROMCURLOPT_COOKIECURLOPT_COOKIESESSIONCURLOPT_AUTOREFERERCURLOPT_SSLCERTCURLOPT_SSLCERTPASSWDCURLOPT_WRITEHEADERCURLOPT_SSL_VERIFYHOSTCURLOPT_COOKIEFILECURLOPT_SSLVERSIONCURLOPT_TIMECONDITIONCURLOPT_TIMEVALUECURLOPT_CUSTOMREQUESTCURLOPT_STDERRCURLOPT_TRANSFERTEXTCURLOPT_RETURNTRANSFERCURLOPT_QUOTECURLOPT_POSTQUOTECURLOPT_INTERFACECURLOPT_KRB4LEVELCURLOPT_HTTPPROXYTUNNELCURLOPT_FILETIMECURLOPT_WRITEFUNCTIONCURLOPT_READFUNCTIONCURLOPT_HEADERFUNCTIONCURLOPT_MAXREDIRSCURLOPT_MAXCONNECTSCURLOPT_CLOSEPOLICYCURLOPT_FRESH_CONNECTCURLOPT_FORBID_REUSECURLOPT_RANDOM_FILECURLOPT_EGDSOCKETCURLOPT_CONNECTTIMEOUTCURLOPT_CONNECTTIMEOUT_MSCURLOPT_SSL_VERIFYPEERCURLOPT_CAINFOCURLOPT_CAPATHCURLOPT_COOKIEJARCURLOPT_SSL_CIPHER_LISTCURLOPT_BINARYTRANSFERCURLOPT_NOSIGNALCURLOPT_PROXYTYPECURLOPT_BUFFERSIZECURLOPT_HTTPGETCURLOPT_HTTP_VERSIONCURLOPT_SSLKEYCURLOPT_SSLKEYTYPECURLOPT_SSLKEYPASSWDCURLOPT_SSLENGINECURLOPT_SSLENGINE_DEFAULTCURLOPT_SSLCERTTYPECURLOPT_CRLFCURLOPT_ENCODINGCURLOPT_PROXYPORTCURLOPT_UNRESTRICTED_AUTHCURLOPT_FTP_USE_EPRTCURLOPT_TCP_NODELAYCURLOPT_HTTP200ALIASESCURL_TIMECOND_IFMODSINCECURL_TIMECOND_IFUNMODSINCECURL_TIMECOND_LASTMODCURLOPT_HTTPAUTHCURLAUTH_BASICCURLAUTH_DIGESTCURLAUTH_GSSNEGOTIATECURLAUTH_NTLMCURLAUTH_ANYCURLAUTH_ANYSAFECURLOPT_PROXYAUTHCURLOPT_PRIVATECURLCLOSEPOLICY_LEAST_TRAFFICCURLCLOSEPOLICY_SLOWESTCURLCLOSEPOLICY_CALLBACKCURLCLOSEPOLICY_OLDESTCURLINFO_EFFECTIVE_URLCURLINFO_HTTP_CODECURLINFO_HEADER_SIZECURLINFO_REQUEST_SIZECURLINFO_TOTAL_TIMECURLINFO_NAMELOOKUP_TIMECURLINFO_CONNECT_TIMECURLINFO_PRETRANSFER_TIMECURLINFO_SIZE_UPLOADCURLINFO_SIZE_DOWNLOADCURLINFO_SPEED_DOWNLOADCURLINFO_SPEED_UPLOADCURLINFO_FILETIMECURLINFO_SSL_VERIFYRESULTCURLINFO_STARTTRANSFER_TIMECURLINFO_CONTENT_TYPECURLINFO_REDIRECT_TIMECURLINFO_REDIRECT_COUNTCURLINFO_HEADER_OUTCURLINFO_PRIVATECURL_VERSION_IPV6CURL_VERSION_KERBEROS4CURL_VERSION_SSLCURL_VERSION_LIBZCURL_VERSION_HTTP2CURLVERSION_NOWCURLE_OKCURLE_UNSUPPORTED_PROTOCOLCURLE_FAILED_INITCURLE_URL_MALFORMATCURLE_URL_MALFORMAT_USERCURLE_COULDNT_RESOLVE_PROXYCURLE_COULDNT_RESOLVE_HOSTCURLE_COULDNT_CONNECTCURLE_FTP_WEIRD_SERVER_REPLYCURLE_FTP_ACCESS_DENIEDCURLE_FTP_WEIRD_PASS_REPLYCURLE_FTP_WEIRD_USER_REPLYCURLE_FTP_WEIRD_PASV_REPLYCURLE_FTP_WEIRD_227_FORMATCURLE_FTP_CANT_GET_HOSTCURLE_FTP_CANT_RECONNECTCURLE_FTP_COULDNT_SET_BINARYCURLE_PARTIAL_FILECURLE_FTP_COULDNT_RETR_FILECURLE_FTP_WRITE_ERRORCURLE_FTP_QUOTE_ERRORCURLE_HTTP_NOT_FOUNDCURLE_WRITE_ERRORCURLE_MALFORMAT_USERCURLE_FTP_COULDNT_STOR_FILECURLE_READ_ERRORCURLE_OUT_OF_MEMORYCURLE_OPERATION_TIMEOUTEDCURLE_FTP_COULDNT_SET_ASCIICURLE_FTP_PORT_FAILEDCURLE_FTP_COULDNT_USE_RESTCURLE_FTP_COULDNT_GET_SIZECURLE_HTTP_RANGE_ERRORCURLE_HTTP_POST_ERRORCURLE_SSL_CONNECT_ERRORCURLE_FTP_BAD_DOWNLOAD_RESUMECURLE_FILE_COULDNT_READ_FILECURLE_LDAP_CANNOT_BINDCURLE_LDAP_SEARCH_FAILEDCURLE_LIBRARY_NOT_FOUNDCURLE_FUNCTION_NOT_FOUNDCURLE_ABORTED_BY_CALLBACKCURLE_BAD_FUNCTION_ARGUMENTCURLE_BAD_CALLING_ORDERCURLE_HTTP_PORT_FAILEDCURLE_BAD_PASSWORD_ENTEREDCURLE_TOO_MANY_REDIRECTSCURLE_UNKNOWN_TELNET_OPTIONCURLE_TELNET_OPTION_SYNTAXCURLE_OBSOLETECURLE_SSL_PEER_CERTIFICATECURLE_GOT_NOTHINGCURLE_SSL_ENGINE_NOTFOUNDCURLE_SSL_ENGINE_SETFAILEDCURLE_SEND_ERRORCURLE_RECV_ERRORCURLE_SHARE_IN_USECURLE_SSL_CERTPROBLEMCURLE_SSL_CIPHERCURLE_SSL_CACERTCURLE_BAD_CONTENT_ENCODINGCURLE_LDAP_INVALID_URLCURLE_FILESIZE_EXCEEDEDCURLE_FTP_SSL_FAILEDCURLPROXY_HTTPCURLPROXY_SOCKS4CURLPROXY_SOCKS5CURL_NETRC_OPTIONALCURL_NETRC_IGNOREDCURL_NETRC_REQUIREDCURL_HTTP_VERSION_NONECURL_HTTP_VERSION_1_0CURL_HTTP_VERSION_1_1CURLM_CALL_MULTI_PERFORMCURLM_OKCURLM_BAD_HANDLECURLM_BAD_EASY_HANDLECURLM_OUT_OF_MEMORYCURLM_INTERNAL_ERRORCURLMSG_DONECURLOPT_FTPSSLAUTHCURLFTPAUTH_DEFAULTCURLFTPAUTH_SSLCURLFTPAUTH_TLSCURLOPT_FTP_SSLCURLFTPSSL_NONECURLFTPSSL_TRYCURLFTPSSL_CONTROLCURLFTPSSL_ALLCURLOPT_REDIR_PROTOCOLSCURLOPT_PROTOCOLSCURLPROTO_HTTPCURLPROTO_HTTPSCURLPROTO_FTPCURLPROTO_FTPSCURLPROTO_SCPCURLPROTO_SFTPCURLPROTO_TELNETCURLPROTO_LDAPCURLPROTO_LDAPSCURLPROTO_DICTCURLPROTO_FILECURLPROTO_TFTPCURLPROTO_ALLfeaturesssl_version_numberssl_versionlibz_versionprotocolsCannot duplicate cURL handlecontent_typehttp_codeheader_sizerequest_sizefiletimessl_verify_resultredirect_counttotal_timenamelookup_timeconnect_timepretransfer_timesize_uploadsize_downloadspeed_downloadspeed_uploaddownload_content_lengthupload_content_lengthstarttransfer_timeredirect_timerequest_headerFile-Handle;type=;filename=rb+Could not build curl_slistapplication/octet-streamcurl_initcurl_copy_handlecurl_versioncurl_setoptcurl_setopt_arraycurl_execcurl_getinfocurl_errorcurl_errnocurl_closecurl_multi_initcurl_multi_add_handlecurl_multi_remove_handlecurl_multi_selectcurl_multi_execcurl_multi_getcontentcurl_multi_info_readcurl_multi_closemhmsgs_in_queuestill_runningCURLOPT_FTP_CREATE_MISSING_DIRSCURLCLOSEPOLICY_LEAST_RECENTLY_USEDCURLINFO_CONTENT_LENGTH_DOWNLOADCURLINFO_CONTENT_LENGTH_UPLOADCURLE_FTP_USER_PASSWORD_INCORRECTCannot call the CURLOPT_READFUNCTIONCould not call the CURLOPT_HEADERFUNCTIONCould not call the CURLOPT_WRITEFUNCTIONAttempt to close cURL handle from a callbackCould not initialize a new cURL handleCURLPROTO_FILE cannot be activated when in safe_mode or an open_basedir is setCURLOPT_FOLLOWLOCATION cannot be activated when safe_mode is enabled or an open_basedir is setthe provided file handle is not writableCouldn't get HashTable in CURLOPT_POSTFIELDSYou must pass either an object or an array with the CURLOPT_HTTPHEADER, CURLOPT_QUOTE, CURLOPT_HTTP200ALIASES and CURLOPT_POSTQUOTE argumentsInvalid curl configuration optionArray keys must be CURLOPT constants or equivalent integer valuescURL Multi Handler|drzr|z�C@�@Location: Content-Type: Context-Length: http_response_headerhttpprotocol_versioncurl_verify_ssl_hostcurl_verify_ssl_peeruser_agentheadpostproxymax_redirectsftpreadbufcURL9223372036854775808�������?COMPUTEDANY_TAGIFD0THUMBNAILAPP0EXIFFPIXGPSINTEROPAPP12WINXPMAKERNOTEEXIF Support0220Supported EXIF VersionJPEG,TIFFSupported filetypesEXIF_USE_MBSTRINGUndefinedTag:0x%04X��Thumbnail is not a JPEG imagelength > value_len: %d > %zuexif_iif_add_valueValue too shortIllegal IFD sizeexif_read_data#error_ifdIllegal IFD offsetMultiple possible thumbnailsIllegal thumbnail size/offsetCanon%s, %sUNDEFINEDSkip SUB IFDIFD data too short: 0x%04XIllegal IFD PointerUnable to open fileNot a fileFile structure corruptedexif_read_data#error_mcomNo image in jpeg!Missing TIFF alignment markerInvalid TIFF alignment markerInvalid TIFF start (1)Invalid IFD startCompanyInvalid JPEG fileInvalid TIFF fileFile not supportedFile too small (%d)s|z/z/z/,%s,%s, FileDateTimeFileSizewidth="%d" height="%d"IsColorByteOrderMotorola%4.1Fmm%dmm35mmFocalLengthCCDWidth%0.3F s (1/%d)ExposureTime%0.3F sf/%.1FApertureFNumberInfinite%0.2FmUserCommentUserCommentEncodingCopyrightCopyright.PhotographerCopyright.EditorThumbnail.FileTypeThumbnail.MimeTypeThumbnail.HeightThumbnail.WidthSectionsFoundCASIOFUJIFILMNIKONOLYMPUS OPTICAL CO.,LTDSpecialModeJPEGQualityMacroDigitalZoomSoftwareReleasePictureInfoCameraIdDataDumpNo tag valueComputed valueISOSettingColorModeWhiteBalanceImageSharpeningFocusModeFlashSettingISOSelectionImageAdjustmentAuxiliaryLensManualFocusDistanceAFFocusPositionCCDSensitivityFocusConverterSharpnessToneFlashModeFlashStrengthSlowSyncPictureModeContTakeBlurWarningFocusWarningAEWarning RecordingModeFocusingModeFlashIntensityObjectDistanceContrastSaturationModeArrayImageInfoImageTypeFirmwareVersionImageNumberOwnerNameCameraCustomFunctionsInterOperabilityIndexInterOperabilityVersionRelatedFileFormatRelatedImageWidthRelatedImageHeightGPSVersionGPSLatitudeRefGPSLatitudeGPSLongitudeRefGPSLongitudeGPSAltitudeRefGPSAltitudeGPSTimeStampGPSSatellitesGPSStatusGPSMeasureModeGPSDOPGPSSpeedRefGPSSpeedGPSTrackRefGPSTrackGPSImgDirectionRefGPSImgDirectionGPSMapDatumGPSDestLatitudeRefGPSDestLatitudeGPSDestLongitudeRefGPSDestLongitudeGPSDestBearingRefGPSDestBearingGPSDestDistanceRefGPSDestDistanceGPSProcessingModeGPSAreaInformationGPSDateStampGPSDifferentialACDCommentNewSubFilePhotometricInterpretationFillOrderDocumentNameStripByteCountsPlanarConfigurationPageNameXPositionYPositionFreeOffsetsFreeByteCountsGrayResponseUnitGrayResponseCurveT4OptionsT6OptionsPageNumberSoftwareHostComputerPredictorPrimaryChromaticitiesColorMapHalfToneHintsTileWidthTileLengthTileOffsetsTileByteCountsSubIFDInkSetInkNamesNumberOfInksDotRangeTargetPrinterExtraSampleSampleFormatSMinSampleValueSMaxSampleValueTransferRangeClipPathXClipPathUnitsYClipPathUnitsIndexedJPEGTablesOPIProxyJPEGProcJPEGInterchangeFormatJPEGInterchangeFormatLengthJPEGRestartIntervalJPEGLosslessPredictorsJPEGPointTransformsJPEGQTablesJPEGDCTablesJPEGACTablesYCbCrSubSamplingReferenceBlackWhiteExtensibleMetadataPlatformGammaICCProfileDescriptorSRGBRenderingIntentImageTitleResolutionXUnitResolutionYUnitResolutionXLengthUnitResolutionYLengthUnitPrintFlagsPrintFlagsVersionPrintFlagsCropPrintFlagsBleedWidthPrintFlagsBleedWidthScaleHalftoneLPIHalftoneLPIUnitHalftoneDegreeHalftoneShapeHalftoneMiscHalftoneScreenGridSizeThumbnailFormatThumbnailWidthThumbnailHeightThumbnailColorDepthThumbnailPlanesThumbnailRawBytesThumbnailSizeThumbnailCompressedSizeColorTransferFunctionThumbnailDataThumbnailImageWidthThumbnailImageHeightThumbnailBitsPerSampleThumbnailCompressionThumbnailPhotometricInterpThumbnailImageDescriptionThumbnailEquipMakeThumbnailEquipModelThumbnailStripOffsetsThumbnailOrientationThumbnailSamplesPerPixelThumbnailRowsPerStripThumbnailStripBytesCountThumbnailResolutionXThumbnailResolutionYThumbnailPlanarConfigThumbnailResolutionUnitThumbnailTransferFunctionThumbnailSoftwareUsedThumbnailDateTimeThumbnailArtistThumbnailWhitePointThumbnailYCbCrCoefficientsThumbnailYCbCrSubsamplingThumbnailYCbCrPositioningThumbnailRefBlackWhiteThumbnailCopyRightLuminanceTableChrominanceTableFrameDelayLoopCountPixelUnitPixelPerUnitXPixelPerUnitYPaletteHistogramRelatedImageFileFormatImageIDMatteingDataTypeImageDepthTileDepthCFARepeatPatternDimCFAPatternBatteryLevelIPTC/NAAIT8RasterPaddingIT8ColorTableImageResourceInformationExif_IFD_PointerICC_ProfileExposureProgramSpectralSensityOECFGPS_IFD_PointerISOSpeedRatingsExifVersionDateTimeOriginalDateTimeDigitizedComponentsConfigurationCompressedBitsPerPixelShutterSpeedValueBrightnessValueExposureBiasValueMaxApertureValueSubjectDistanceMeteringModeLightSourceFlashFlashEnergySpatialFrequencyResponseNoiseFocalPlaneXResolutionFocalPlaneYResolutionFocalPlaneResolutionUnitSecurityClassificationImageHistorySubjectLocationExposureIndexTIFF/EPStandardIDSensingMethodStoNitsMakerNoteSubSecTimeSubSecTimeOriginalSubSecTimeDigitizedImageSourceDataCommentsAuthorKeywordsFlashPixVersionColorSpaceExifImageWidthExifImageLengthRelatedSoundFileInteroperabilityOffsetFileSourceSceneTypeCustomRenderedExposureModeDigitalZoomRatioFocalLengthIn35mmFilmSceneCaptureTypeGainControlDeviceSettingDescriptionSubjectDistanceRangeImageUniqueIDexifstandardexif.encode_unicodeISO-8859-15exif.decode_unicode_motorolaUCS-2BEexif.decode_unicode_intelUCS-2LEexif.encode_jisexif.decode_jis_motorolaexif.decode_jis_intelexif_read_dataread_exif_dataexif_tagnameexif_thumbnailexif_imagetypeimagefilewidthheightsections_neededsub_arraysread_thumbnail�k�l�l�l� l�0l�@l�Pl�`l�pl�l�l�l�l�F}�H�F}�(}�(}�}��}�F}�(}�(}�h~�(~�~��}�}��}�}�}�L}�}��}�}�}�d��}��}�(��0��(��@��`��x����(����Ȃ�����(��̄���̄�\��T��l����̄�\��|����܃���������(��(��(������(��(��(��(��(������,��Q��Q��ć���,������MM*II*8����h��R��R��8��x��H��8������������ݚ�͚���������`��������`��������`��������`��`��`��`��`��`��`��`��`��{��p��`��`��`��`��`��`��h��`��`��`��`��`��`��`��`��`��`��ڳ�`��`��`��`��`��`��`��`��`��`��`��`��`��`��`��`��`��'��ExifFUJIFILMNikonOLYMP1.4 $Id: exif.c 293036 2010-01-03 09:23:27Z sebastian $Could not compute size of thumbnailIllegal reallocating of undefined file sectionIllegal IFD size: x%04X + 2 + x%04X*12 = x%04X > x%04Xexif_read_data#error_mult_thumbThumbnail goes IFD boundary or end of file reachedcorrupt EXIF header: maximum directory nesting level reachedProcess tag(x%04X=%s): Illegal format code 0x%04X, suppose BYTEProcess tag(x%04X=%s): Illegal byte_count(%ld)Process tag(x%04X=%s): Illegal pointer offset(x%04X < x%04X)Process tag(x%04X=%s): Illegal pointer offset(x%04X + x%04X = x%04X > x%04X)Wrong file pointer: 0x%08X != 0x%08XUnexpected end of file reachedIFD data too short: 0x%04X offset 0x%04XIFD data bad offset: 0x%04X length 0x%04XIllegal IFD size: 2 + 0x%04X*12 = 0x%04X > 0x%04XIllegal IFD size: 0x%04X > 0x%04XRead from TIFF: tag(0x%04X,%12s): Illegal format code 0x%04X, switching to BYTEError in TIFF: filesize(x%04X) less than size of IFD(x%04X + x%04X)Error in TIFF: filesize(x%04X) less than size of IFD(x%04X)Error in TIFF: filesize(x%04X) less than size of IFD dir(x%04X)Error in TIFF: filesize(x%04X) less than start of IFD dir(x%04X)Image has corrupt COM section: some software set wrong length informationError reading from file: got=x%04X(=%d) != itemlen-2=x%04X(=%d)Incorrect APP1 Exif Identifier CodeThumbnailPrimaryChromaticities�9��B.�?ffffff9@$@����MbP?_B?�?INPUT_POSTINPUT_GETINPUT_COOKIEINPUT_ENVINPUT_SERVERINPUT_SESSIONINPUT_REQUESTFILTER_FLAG_NONEFILTER_REQUIRE_SCALARFILTER_REQUIRE_ARRAYFILTER_FORCE_ARRAYFILTER_NULL_ON_FAILUREFILTER_VALIDATE_INTFILTER_VALIDATE_BOOLEANFILTER_VALIDATE_FLOATFILTER_VALIDATE_REGEXPFILTER_VALIDATE_URLFILTER_VALIDATE_EMAILFILTER_VALIDATE_IPFILTER_DEFAULTFILTER_UNSAFE_RAWFILTER_SANITIZE_STRINGFILTER_SANITIZE_STRIPPEDFILTER_SANITIZE_ENCODEDFILTER_SANITIZE_SPECIAL_CHARSFILTER_SANITIZE_EMAILFILTER_SANITIZE_URLFILTER_SANITIZE_NUMBER_INTFILTER_SANITIZE_NUMBER_FLOATFILTER_SANITIZE_MAGIC_QUOTESFILTER_CALLBACKFILTER_FLAG_ALLOW_OCTALFILTER_FLAG_ALLOW_HEXFILTER_FLAG_STRIP_LOWFILTER_FLAG_STRIP_HIGHFILTER_FLAG_ENCODE_LOWFILTER_FLAG_ENCODE_HIGHFILTER_FLAG_ENCODE_AMPFILTER_FLAG_NO_ENCODE_QUOTESFILTER_FLAG_EMPTY_STRING_NULLFILTER_FLAG_ALLOW_FRACTIONFILTER_FLAG_ALLOW_THOUSANDFILTER_FLAG_ALLOW_SCIENTIFICFILTER_FLAG_SCHEME_REQUIREDFILTER_FLAG_HOST_REQUIREDFILTER_FLAG_PATH_REQUIREDFILTER_FLAG_QUERY_REQUIREDFILTER_FLAG_IPV4FILTER_FLAG_IPV6FILTER_FLAG_NO_RES_RANGEFILTER_FLAG_NO_PRIV_RANGE$Revision: 298196 $Revisionls|lZz/|lZl|Za|Zfilter.defaultunsafe_rawfilter.default_flags0.11.0filter_inputfilter_varfilter_input_arrayfilter_var_arrayfilter_listfilter_has_varfilter_idbooleanvalidate_regexpvalidate_urlvalidate_emailvalidate_ipstrippedencodedspecial_charsnumber_intnumber_floatmagic_quotesInput Validation and FilteringINPUT_SESSION is not yet implementedINPUT_REQUEST is not yet implementedNumeric keys are not allowed in the definition arrayEmpty keys are not allowed in the definition array$��T����D��d����abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-._0123456789ABCDEFabcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789!#$%&'*+-=?^_`{|}~WXYZ0123456789$-_.+!*'(),{}|\^~[-._~!$&'()*+,;=:min_rangemax_rangeyestruefalsedecimal'regexp' option missingmailtonewsFC::::15f:fe8fe9fea2001:0db83ff32001:001�����v��K��)�����9223372036854775808decimal separator must be one char/^(?!(?:(?:\x22?\x5C[\x00-\x7E]\x22?)|(?:\x22?[^\x5C\x22]\x22?)){255,})(?!(?:(?:\x22?\x5C[\x00-\x7E]\x22?)|(?:\x22?[^\x5C\x22]\x22?)){65,}@)(?:(?:[\x21\x23-\x27\x2A\x2B\x2D\x2F-\x39\x3D\x3F\x5E-\x7E]+)|(?:\x22(?:[\x01-\x08\x0B\x0C\x0E-\x1F\x21\x23-\x5B\x5D-\x7F]|(?:\x5C[\x00-\x7F]))*\x22))(?:\.(?:(?:[\x21\x23-\x27\x2A\x2B\x2D\x2F-\x39\x3D\x3F\x5E-\x7E]+)|(?:\x22(?:[\x01-\x08\x0B\x0C\x0E-\x1F\x21\x23-\x5B\x5D-\x7F]|(?:\x5C[\x00-\x7F]))*\x22)))*@(?:(?:(?!.*[^.]{64,})(?:(?:(?:xn--)?[a-z0-9]+(?:-+[a-z0-9]+)*\.){1,126}){1,}(?:(?:[a-z][a-z0-9]*)|(?:(?:xn--)[a-z0-9]+))(?:-+[a-z0-9]+)*)|(?:\[(?:(?:IPv6:(?:(?:[a-f0-9]{1,4}(?::[a-f0-9]{1,4}){7})|(?:(?!(?:.*[a-f0-9][:\]]){7,})(?:[a-f0-9]{1,4}(?::[a-f0-9]{1,4}){0,5})?::(?:[a-f0-9]{1,4}(?::[a-f0-9]{1,4}){0,5})?)))|(?:(?:IPv6:(?:(?:[a-f0-9]{1,4}(?::[a-f0-9]{1,4}){5}:)|(?:(?!(?:.*[a-f0-9]:){5,})(?:[a-f0-9]{1,4}(?::[a-f0-9]{1,4}){0,3})?::(?:[a-f0-9]{1,4}(?::[a-f0-9]{1,4}){0,3}:)?)))?(?:(?:25[0-5])|(?:2[0-4][0-9])|(?:1[0-9]{2})|(?:[1-9]?[0-9]))(?:\.(?:(?:25[0-5])|(?:2[0-4][0-9])|(?:1[0-9]{2})|(?:[1-9]?[0-9]))){3}))\]))$/iD�������First argument is expected to be a valid callbackFTP BufferFTP_ASCIIFTP_TEXTFTP_BINARYFTP_IMAGEFTP_AUTORESUMEFTP_TIMEOUT_SECFTP_AUTOSEEKFTP_FAILEDFTP_FINISHEDFTP_MOREDATAFTP supportUnknown option '%ld'rlsrl|zrrsl|lrt+rssl|lError opening %srsrl|lrlzftp_connectftp_ssl_connectftp_loginftp_pwdftp_cdupftp_chdirftp_execftp_rawftp_mkdirftp_rmdirftp_chmodftp_allocftp_nlistftp_rawlistftp_systypeftp_pasvftp_getftp_fgetftp_putftp_fputftp_sizeftp_mdtmftp_renameftp_deleteftp_siteftp_closeftp_set_optionftp_get_optionftp_nb_fgetftp_nb_getftp_nb_continueftp_nb_putftp_nb_fputftp_quitsrcdestremote_filelocal_filestartposfpresume_posresumeposresponsecommandusernamepasswordTimeout has to be greater than 0Mode must be FTP_ASCII or FTP_BINARYno nbronous transfer to continue.Option TIMEOUT_SEC expects value of type long, %s givenOption AUTOSEEK expects value of type boolean, %s given%s %s
getsockname failed: %s (%d)SSL/TLS handshake failedPBSZPROTREINSYSTSITE EXECCWDCDUPMKDRMDCHMOD %o %sSITEALLOPASV%lu,%lu,%lu,%lu,%lu,%lusocket() failed: %s (%d)bind() failed: %s (%d)getsockname() failed: %s (%d)listen() failed: %s (%d)|2|%s|%hu|%u,%u,%u,%u,%u,%uNLSTLIST -RRETRSTORMDTM%4u%2u%2u%2u%2u%2uDELERNFRRNTOdata_accept: failed to create the SSL contextdata_accept: failed to create the SSL handledata_accept: SSL/TLS handshake failedfailed to create the SSL contextfailed to create the SSL handlephp_connect_nonb() failed: %s (%d)Unable to create temporary file.  Check permissions in temporary files directory.GetText Supportdomain passed too longmsgid%s passed too longmsgid1msgid2ssslssslldgettextdcgettextbindtextdomaindngettextdcngettextbind_textdomain_codesetcategorydomain_nameThe first parameter of bindtextdomain must not be emptyGMP integerGMP_ROUND_ZEROGMP_ROUND_PLUSINFGMP_ROUND_MINUSINFGMP_VERSIONgmp supportGMP versionBad base for conversion: %dZero operand not allowedgmpgmp_initgmp_intvalgmp_strvalgmp_addgmp_subgmp_mulgmp_div_qrgmp_div_qgmp_div_rgmp_divgmp_modgmp_divexactgmp_neggmp_absgmp_factgmp_sqrtgmp_sqrtremgmp_powgmp_powmgmp_perfect_squaregmp_prob_primegmp_gcdgmp_gcdextgmp_invertgmp_jacobigmp_legendregmp_cmpgmp_signgmp_randomgmp_andgmp_orgmp_comgmp_xorgmp_setbitgmp_clrbitgmp_scan0gmp_scan1gmp_popcountgmp_hamdistgmp_nextprimeset_clearrepsroundgmpnumberUnable to convert variable to GMP - wrong typeBad base for conversion: %d (should be between 2 and 36)Negative exponent not supportedSecond parameter cannot be less than 0Number has to be greater than or equal to 0Index must be greater than or equal to zeroStarting index must be greater than or equal to zeroHash Contextrr|lrp|rr|b%s hash supportHashing EnginesUnknown hashing algorithm: %sInvalid pathHMAC requested without a keymd2md4md5sha1sha256sha384sha512ripemd128ripemd160ripemd256ripemd320whirlpooltiger128,3tiger160,3tiger192,3tiger128,4tiger160,4tiger192,4snefrugostadler32crc32crc32bhaval128,3haval160,3haval192,3haval224,3haval256,3haval128,4haval160,4haval192,4haval224,4haval256,4haval128,5haval160,5haval192,5haval224,5haval256,5HASH_HMAChash_filehash_hmachash_hmac_filehash_inithash_updatehash_update_streamhash_update_filehash_finalhash_algosraw_outputalgo0123456789abcdef).Cɢ�|=6T���b���s���+ټL���W<���gBo���N��ڞ�I�����/�z�hy��?���"_!�]�Z�2'5>����0�H����^�*�V��O�8Җ�}�v�k�t�E�pYdq� �[�e�-�`%�����Fai4@~UG�#�Q�:�\�κ��&,S
n�(�	����A�MRj�7�l���$�{��Jx����c�m���;9��fX��wr��uK
1DP���ۙ�3���"�(ט/�B�e�#�D7q/;M�����ۉ��۵�8�H�[�V9����Y�O���?��m��^�B���ؾopE[����N��1$���}Uo�{�t]�r��;��ހ5�%�ܛ�&i�t��J�i���%O8�G��Ռ�Ɲ�e��w̡$u+Yo,�-��n��tJ�A�ܩ�\�S�ڈ�v��f�RQ>�2�-m�1�?!���'����Y��=���%�
�G���o��Qc�pn
g))�/�F�
�'&�&\8!.�*�Z�m,M߳��
8S�c��Ts
e��w<�
jv��G.�;5��,r�d�L�迢0B�Kf�����p�K�0�T�Ql�R�����eU$��* qW�5�ѻ2p�j��Ҹ��S�AQl7���LwH'�H�ᵼ�4cZ�ų9ˊA�J��Ns�cwOʜ[�����o.h���]t`/Coc�xr��xȄ�9dnj(c#����齂��lP�yƲ����+Sr��xqƜa&��>'��!Ǹ������}��x�n�O}��or�g���Ȣ�}c
�
���?G5q�}#�w�(�$�@{��2���
��<L
��gC�B>˾��L*~e��)Y��:�o�_XGJ�Dl�/�B�D7q����۵�[�V9��Y��?��^����[���1$�}Ut]�r��ހ�ܛt�i��G��Ɲ�̡$o,�-��tJܩ�\ڈ�vRQ>�m�1��'��Y����G���Qc�g))�
�'8!.�m,M
8STs
e�
jv.��,r��迢Kf�p�K£Ql���$�օ5�p�j��l7LwH'���4�9J��NOʜ[�o.htoc�xxȄnj�����lP������xqƀ�		
	
	
	


			

	
	
		

	

			

	



		


	


		



	
	
	

	



		

	


	
P�;��*�~e�v�9>Y�f�C���oEå�}�^�;�uo�s ���D@�j�Vb��Nw?6r�=�B$��7H
���ۛ��I�rS{���y�%���P��;Ly���l����O���`�@�S2zw��(�H�;��Kk�ē!(f�	�a��!�`�|H2��]]]��u��#&܈e�>�#Ŭ���om9B�D. ��J��i^��Bh�!�l�a�g�ӫҠQjh/T�(���3Q�l�n�;z9�0�`�*#����`(yA��8۸��y�:`��l>���w�'K1��/�x`\`U�%U攫U�b�HW@�cj9�U��*4\̴��A��T���r|�*�oc]ũ+�1t>\����3�֯\�$l�!(Ew�8�fT�l�4�)���P|ɵՄ?	G�����y��1Ѭ�ߘ�r�/����Ḗ~&jE�|��,�G��$�l�������� iciNWq��X�~=��t�
X��rX͋q�J��T{�YZ�^�|���C�KB���
�[�r:����m���x���)�pɡsuÃ*�k2d�pX��>�F��q��\S��iA�|�ލ�T�L�
���
��M�o�j��Z#����/W!ar��o�H����K�AR��&�GY��y������ŅOK�o�v��}��R�B6��c07'h�inŴ�=���vv�}B��Ɯ\d�B3$x�8�}.�<4k_�`���Tr_�l�Oۤ�"Yq���i�g�Ee���R�`����y�N��H����-;S��v�l�S��{5���m�W7zz�f��P�q5JBt�
�j�$%�/�����9w*�윴��s/8Q?�V�(��CX�E��\=�i�_׶������3Dɱ��&<�"��+�;�1�T��Y�e����@��ϣ�&�N��5�#�

�+�Nu�c5՝F@��@L:��z��.j>j����?�k�`(F��n�=�e�*�"b��G�U]*���逸
Ć�QÄ|��mXS(�����v�^,&��Ґ�˔�u�*�d��>߯��X�#(�ѧ�0Q��o�,FN�*��q|�3�{�>9enmty)3q]8�[du�H��|g��{|�1=K�#l�M��IXq&8cMG�b�s��FE�`�U�4Ώ�ٔ�ʺHhow0$�cd���n+�}3%(�pKBk�,m	ˁ�7=�o�f�C�U�Q�ǀ1+����/��ߺ�2���h\V=��U�k�_夿��κ�
��A2]D�s�4���Z�𖦼l�(�e�$JR�.Q�Z�U�םNy����%3�>[) �T�s�G���~A4��$)�mS}5�9�����8�`}��G��gvݪ�닓b��z�y������
�)����'���a��1��bM��\�E���΄��^��!b���3�䓂��,��,�, Z�����G�ϣY��DRv�$��ը&�]�>��9�j�U�K�c�Gl�:zݞf�ƞQ#�IѢW��qE}"LA2_���.n:�\^a�u{�)�6��ë��/@�L��]
�ߥ�Hً>~�?�WӠ�E�t%.Ѣ���^R��fIzhΐ.�;������_t	�ֳ��w7B�n�~f��ϪM5x���+J(-��gO���
��]��sQ&��"a���V�����/8�Z0UN��b��'�6��%�1F��p{�eO�9޲���C��T�0?#�<���u����4�OUpT�VOJt�j��䲪L�pM)od����1@h�*�Wk�aZZ����i��/��pӛZ��?�l�@I����M,T	�\ͅ�!ŴA�bDܷ5�?�ӎ��4@[![)Y	�r��;�ڜ�]������:ͬ-s��qԄ������� r
C!�9
	~��^�<���^D�W~�O���ԃ�`�G���Ç����>�����<������o��WL�F�27e��|��~Y��hD�Y�a[Դ�/vw�Ю[��P=L^uhߴ�"N!��.S��*	��	9�2P4��7�M��r B�� ��#���i���Ĉ�F[xi�$�L{��5�!��{@�ξ�Xf+.'ް�%A&6����w�K������{�d91X�$�6��-܋�h��V�<`Q��6��ҊY�'��_
g���˩�	C�Jˡ6pKV����x����R��?�����JywPP��8c���:xgzbP?�w��I�DJ��y����;�������k �D�-��T���,C<\�f�g�7+a�#�'��y'�V�%��ჾ�I~!�e|���Hm���k��E���4�Sݚj�"
 "Vn��P��]�7�X����<±Oj����u�}����n�s��%l����:��E����0�ir�-JC�8�1��g�x��;2r;�t�'�6c�R�N�
�3_P��̢�ͥ�0-�tIS�m��W-����(AHf���ַ2wI:lt��ac�~�����ؕ�=�d�;+� H�0�z�x�`���8!�Z���|���"���i�`<V�]9.�FL4���ۭ2�� �p��G>g�eי�'�~u�Ēn-���;
����e��.o�����JQ��=���7�*
O�)��\�>�������
�S�^PE��������Ϡ4�ʇ�Q~�6Qij84�̉��W�Y�?��ŕ�"�=T3*���fv{�A�6�S�A%w"��.F_��l��H�n�Tܯ���ƿ������1ٷ*�'����ק�@ż�
mV�m���x�ty*x%5ӛ��	]�����8A�p��q��
�\b�O�Х���k�T�+��b�Y�}��E575��r�^��� �2`+��/g��,�y,d$ѭ�	�&��j��P�K�jxZ�CLc6"�f�JG{�ª���sjX��zf&���ʑvV�g��uH\��?�[��m�t��n(Q�D�G4�^.�a箠,������@�e�Q���d�3�Knrb�);p�0��1F������lK�~Ód�}�w�!{sk�.1cw��o�H�R��������Sc�L�����R��\�j�d]��hj�,Q�:�`V8�b~6ױ�w��Y�n��tslRKs���Zs��U���?IE�A0S����Y
G�X2��F_�-��6�+� ���e}O`n$�,x⊚���ȶ*��{r���'GM�!
�~G�pVCouIhZaBԭ�z�����NU�Pߡ�*V�/�:&��֏�M���:Ju=ʙ�<����{G�-���qS�ph^(\���7
��ŀe�7����C(PMo��@���v;���0
�,7�i�C�fε�N�!fs��ۋaMW�ֺ)}[��%>a��?����-�	y��W��;5����a��x������ԫ���&}r�>k��c�0��J��J��	շj?��&W���B��-��=r�`y�I3AB�r�Ɯ6|���
%45�I�N��)�N$P�����F̊�c��c��/xEz]��|�5FcNd��[�-�szB&%!���P�Q�lH�9��ע�˴��], �u|al[�ؕ��+�i�`2A��_hB�V�ݹ���H�Ҥ�oI�/� 1�X#�,������Ҧ����۪jWk���]��'Ky+��[;D1���9Y2-�K� ��k��t�ǁ���0u�Ô�	���{�Ìg9)�/B��|�v�K$�g=fW���
��Xg
���z��ɢWl{�կ��O�k���b�����Lߔ�:H��[�7<�B�lc@o��nR��Nm
o��1��#���|�$(�Eɂ#�Y�[W����
@��hrE�>��/�;���˨�#)}��u�D͟&�ѽ(����9�f��J�!|z���)<be����Dh#����񛫎X���#��@��X�=_�h�p��#�}0��O�d�e�pRt3�	^(?�=�S	ȹT�Ym�0�@��;�iS?�U���˩��^���+5'!)�zN�7�v("O'P�9��^�:����qȿ#."h�gҰ���ԣq�����ӵU�����:i_3խ�H\ʡI;t�Ę�4�w%��T<�y��3��(�j"��'`_mu_Iqw�`�S蛿=D���ǭ���saE	^�2�fz�X��:g�U�*wɶ�9�A�5ڟ��m!�{�d'U\V�6ē9xwFb��i$>Z�����vt�R�΃�DR�?�[ZZC�3������� �<�$�F��n�/a7Z�e�LkJ����Ckyb�o�M��T�̺l>%����O�����%.�8�ދ�ֆT�v�J��]�E+��0���M�p��<�1��m�>G��ߟÍ�~��R�8B��@���K���D�~<C H�x:O���v�$r����86ti�LN�|��+�2���M/�L�&C�3˼X~�L��4ٓ2Q_DT�Ud�]
�}1�A�PY��i��8�
�U4��-�q���q�I���Myq���.*�\�����"����/̟��o��H?��g��c���K�,»��K�?�f�p��e�/ԓ�y��q^�w�;��9r��P�^�
��@8�	#�y��5���ū���Ɩr�Z7cA�f�'q�ܫt!A�rJ��<��f03IJ�(��
��^��1�薏G]�v"���ݐa�{�����������P��M�X�HuIaS��O5���ҁ����}$��閅u0��r'�5-
�k�s�&Cc��TX�;�Z2R\�#F\2�S��gН4QM�$�����Q O~.�
"dH��99η��p�,�����#�Zh��/���d�y��p]��TH�ݹ[�	�u��Q������:�g�����RP|��N�]ɢl��L��]}gS���4*I�x�넧�f�t�Т;d�Q"|�V�R���č�h���&w8�E;ʹ8w��
�i�.F��1��8�m���@؏���O�<���ɘ/ګ�J��>�Zds�;_��uU��%��~Nt/S��qX�0Nvb��n=oY�&Y���Ũ=)e�L���M��n��3�_'�G�?3��@�
�k9�,4�%CR��b~�ZaUf��o�	,Ӓ-ZE��tGI���򺞣3���cbT�n�@���&���T�;����j�V�+�
��--n	k	���R�:����˜�BY��E�����1��b6s���Hk
z�W�� �jDgFu�����x)hO��"��>q";��.��W0/?|ìF�������ϟ`.�3�:�Ha����j�nBب�\s�t���JRs���Ig�����ӛ�����$�~�D6���	e�����l��y�C}ɹ�(t���oV�aG��{�_���[zo�x�0c�jz�
��Л��J�K+N���>�Vj�4�Y�7(���L�0�5q�9zh�z��i5B����-(vy��zݥ7]���	<CSO١|�S��w�l����? G�|�@����B�}X{8O�v�e1���#9s��D"*K��Pץ�\.��6�L+<�X��{���m�[��p2vݵ)�r�+6wN�jW�����'����iCq2�c$�2�0�6B1��,�18q�v�
�\��6�m�0�����?����Mf�xuF�{?�mX�;��4��+��4_	��%E�z$�wt����M����.J�
��浽�Cy�p~*�@'�-��"L����c��Q��
3��R:�~5d}�Wxiw2L��N�x� ��� �j�A��A�l�((kO����҃�nDl_�&�AM�VG��=濭�D`_m >��9�X��F:r���T��ǜ&=�2�|,��#dv�B�G$U��8�VvG��-�g^�(M1����+�De��|��Ǒ+6,����UF�N{����_�\�ECa�����S[^���Ԩ�!b*WAӼ���C�%��Ƥ��D�b�ee�3
��!�H��T!�cm�^>į
wr:�r��� {N���>�U���!�ʦ�`��P�ö�~�h^�DZ����l7���<�=��*�.ծ�x���`.�b㣆=��Q9��&5����*n}3Wؗb�Y簍�!�)~���)UE���:p�l+��B�%�kY̔VT"�s
�����`<=�����Ė��[����Ŝ4U�!8�xj$P�h�)������#���ly|S�ܰ(᪮)K�=I:וhA,kߵ7-%�����]X�p�*��7��\?�Q��MR[%Q����<�4���)@��<]o[�t�>�B���Y/�y�P��'�7`}��
Z��^�#�Ӑ�m�H�V{��2Pn!5�η6�JK�$z*'��i����U�L��7%��K]ەK�/�i��Ӓ�f��J����Fish�I���_����fd��D�}��'�u��\ak̕�뼹 Og�Yeu�#1o�E>q��ZW�T��a���@`ĺ�����oLEidI��Ap[&�;�Ӟ�W�`mU<2&�`[�Y���F��L|�E��U)�YQ�e¯5�v
�E=�~��
�����R��{YS���V�H���
Co�\�z���^�����N�5��o�>�֜��"i �t
F�@����l��n:�$��Ip�X=$a�c�����2�D}Š�٫�[��K��ZIm����-O������5��ԓ�@e�K�ڿ�* |$|2�šn	�f6�fi�}!å}'��:���Ք�"����dۉa�ļ3=�j�L��꛹�\��B��T���K�qjj�{���"̨�1��+���G8$�_����FX�H�y��(As����w��!E��\�p��kz����8�P��d��o`v��
�������b��]0Z�T_"2�[G���h�O- �+�ٹy��C-�
�S��H�~;�/�Gxs	�
���B����a� 9.*+��e9"�`���%n&�0��qv>�e&�p�6��1��ɱ���tP�\���Y�p�B��Jyl����%Y
Nth�lqg0s��w�
�a/�Zۻajg��>Q��郞Kr��d	\���7u�ӱ4]%
�3�5��4B��Я~��P*5��D�ė�Й I{��ADŷ�;&�lj��/u��,@r��ٕ�T��*=�r/U�B�xN31,�b��|��O	�]f/��U�S]�'?A@�l�FY�ߒ7�?�^�.7��Ἥ�)���1��\�D�>��Ax���ҠxLɥ(�w(.A9,�ɯ�^&��%jw¼����m�:7[gJЙT�ҿ�4R�}���do�[�a��t>'��ܬ��@�a��W��7�ZwibR��V=F:���dn�C?�Ȟ��~0��w�'L�H3�,/C�o����ݧG�f`Dz�d�7���%r���v��pN�-�=�����C����CO��#��"m9�<
6i"���6^�Lxк8F�R8z�38�NJtH�J��g����ͭ�lǟ�4�3	N�_�#Y)��_&J��4n���*:����8����E���W�,�k/x�uo�y�b���Z�S����)���{��Bt�#�tv+`St£�vK���c�j��<ɼ��Em>!��GM'�}�Q)?P�s��kk��h����c;�=ۡUVK��\�n5��QN�h>h�K��O����R?�6����Fn�^PqЙq<�N�eZ.h����V��^�]��zy#���q�{�᝹.#E�3��!��RפYr|�V�8�u��=�c���髍59��r���޷�-Ib�AUk[M.����m~�īW?5ΐV��iWs�9B�J#
�
�(�P���z��M4Q��1X�{�"<w3��V�E6��$���hL�x�-e��4�;�'L�k� bv}͚�Cw��g���[��y�6u�@�m��9����z1���o!8�J��%0��b4�f�;��$| r����Ӷ�J��ǾM��ċ����I���fG��u*|�s�X�a�,���	�Uu��}�ݯ�mƭ;�)���Tq��$���M�XO'b[Q�:&��.����	��F��I2c����π��l�S�W$�k��Q��G���Ϝ~������(A\�D�N�^%�G�0���+�]*!�)��	����굏Z�W!�{g������X�J��LgӉ;��Kߤ-�)H��2�R,X�����]����ʃ��`�B����ڥk�_�?�q7g.��R1I�XS�T���H*�fi��-ܢ�+�<��,�{��
���#�7O��|�TM��p�W�~쭐T::�'<+��0����~� �m2Ɔ@�i}(���z�0�_z�y��y�Dh����s��W�nxנ��ͺ��/�d���j���f�^�!�<���c���iHD����>��d��;�1���ջ_ܠEc�e��&�(��Q�?`]�IP�@�M��v��pl��+U��A�6Zp�D`�OuM�(�C�V�eP_Sב%���
r�#2��cso9�� PHh@p0X`8x(���������������� PHh@p0X`8x( PHh@p0X`8x( PHh@p0X`8x(�������������������������������� PHh@p0X`8x( PHh@p0X`8x(���������������� PHh@p0X`8x(���������������� PHh@p0X`8x(��������������������������������������������������������������������������������(@hP px`80HX����������������(@hP px`80HX(@hP px`80HX��������������������������������(@hP px`80HX(@hP px`80HX(@hP px`80HX(@hP px`80HX����������������(@hP px`80HX��������������������������������0`8(xh@ PHpX����������������0`8(xh@ PHpX0`8(xh@ PHpX����������������0`8(xh@ PHpX������������������������������������������������0`8(xh@ PHpX0`8(xh@ PHpX��������������������������������0`8(xh@ PHpX����������������0`8(xh@ PHpX������������������������������������������������hX x(HPp80@`��������������������������������hX x(HPp80@`hX x(HPp80@`����������������hX x(HPp80@`����������������hX x(HPp80@`hX x(HPp80@`����������������hX x(HPp80@`hX x(HPp80@`�d�����|�������VP�n��ΈY�I�o�iO��>�@I&<X~U!�?K�\.���H*	6)��j{�7%��H��Zɯ}?����#�X�p˰�%P��M$_Y��c��Yw�5�}N5Swoy�R�f���w'��2֮̀��+N(�[7=��B+qL���TMz�}�D�m�kqZP�"�$���	��f9��`����ӊ�1�qٜE�\����eA���������K�z�NЉW5����k#�3A&$b;��V^�!0�r�Мi������E�
���O���v��l=��=s���0:�i�VD����㍵����.փ��t����<y/0W��e6H1��O�L��;��*?,�_��-G�[̗"�'_�b�wSϻ����a�`\��
����&���Rk�^�x��yHP��4�<�6tS��G��@
�!�E1p�'ڣs߉�<���s��X��4�T.$>�9I̙�-{���8�)�1�'��J`h��좊���n���9{� aho������K�R�����:͎/g����K��lN���f�F�~�d��ǽ��u�c5d�B
�G��l��g����a�de�{#�pJ��%�ɡڥ�A�pv�Z�Q2�=��Y�
Vx��_��2?�۾�m2�9�X��c�
�r����(�� C��7:�ŕ�*�����jaj�R���^[C�+�u>3+�;�Q��W᡽��x�|��g"`�M��*G	QJ:��
y�z��
4"���^���Jb��٩L�,�k ���nt¶�B[�i����z!r��-�󴾔��]W)|��U��;�}�(e�t�bj�F(x@�0m,�����7�4��m�-~.Z~ Aח��>]�3��%TSu��q�8ơ��Q�D�c�@8CD/EUMF]Lv�8ָ�/��ҳ���f���	�&��h�ۦ�lu��v�hF��s��I���6#B�U,�T�\�O�Cn�r]�o�g��)�|3���	JZ�R��u�lP�K~�7ųxLڱ��~&r�E0��j��@��'��҇�V���E��56����;H�sH������U9|�pAڕ��Ù!�ڤ��_{�
�w�be#�kUƬ۹@�y�7��Us�`��8��3rV�hl�6i��w�>�εP-��y��<�B+�3��$(�����.A�uD����/���_�19�{*].�{FI��S5΄&\^e~�q'�g���|	�R�=�&��W&!��X,e21��� I�檬J�L�9=��2�ӭ@���Q԰����չ��\��I��S"���-�d�$j�>���)�����F�#�4�}ۚa��/�v�,��v�������;�ć��ѭ�����P�Լ��ٌ��r�/K�tY����5�*Xo[�S�t�Oʨ$�_���fb��?��k�f�t��4��F�%�i��H�r�s��4��B��Gu@�g�P}�T�-�K��Q���*�c	�nJ�+GXb���9��8e��Bp��zM2H�#vDd㻌kn�cmӄL$?q�B5��"+�%����k�'�d�>�1��}a���y���DQa1]��X)(7
�V8[�D�:����
K�<��^�<��`|���"'�]�{�6EO�}�)�Z䛐Y���,A����0���J�#�\�N�xNq.�GM��x[�:Yl4z���˛c�C=�m�(`Ը��/lVRgb��
��� ��p�n��c���d�h��7`�i)��C�
���А�T�sj? O��mNq�GM_fgpa 첂!��+�"�(S�v��yAI�w�]ሚT��%o�W��!�2��h�
͒ZԨzux�
��Q�葔��Z�M�3|i3��N[F�w�Y���0����,��Co�\;�W���j��*҅-�	�m����O^�n0z���o��:���?6h�W�>U�R�L��;��<���%�=ؘč.
�f��Et8�TCľ~^ٸ���:���J͙}��@JД�_�Z'h6�H�L9����kL�8�N��B����8/���U�d�{J�
'����`��޻�a�V!��"O٨v?3K�UY)�8�~��������sx��X`H��2��;��Zx�[JzG]�4c.%m-�t���b�\��u���s�kpݽ>ly���T܁߯�s?c#�Q'gk��"nuP�R�+�F�v2�S��jY/����Cx�x�>�d���@�:���F�g�ކ൦l�tG���������>z��_�����90�fl�C�ԟ���S�������PC�D�O솎�S���%��E��|�ׇ�I@��WHv��rX����Xw�6�M�9����;�a�`�L��Шr�
2=�E0����f�]�:����-5W̹D�󋒐 r�$��^Ι��B�;�T�((����w���3�%�%!څ\���Ƿu����h�A4D�yQ�b����G�
p"��Ӡ"��i�5\�+�R�
��[V��<�_?�e0�G#�~ I�	R�̳4T��gN��,��bfa��^���k�W]�\F���:~�|�����o
/�
�,�i(=OUN�Ӏ�h�ϭe��:1�&�	�V�j��K+m�i��Ƕ.w<4A�B�Poj�|	�����X�9HD��5�-���eZ���m2 (�Y᭐Iq<u��ݝڑ����
0���l��in���$�O$^�}�j{�@�P}7|�ER�?=^��y5Ϳ���~$#���n��)�[����f*�٫cB��s�
h*6�dVU�31���*�)F�����ѠԷ���{gҳ6˕��3���ƷKA��mQWް,����N����,y�>�oꎓ�[d���z�ڄ7ێ�1�MAa�&��r�+���z��'7���/t*�};�q�eq)L�`QS� !�Z��KE_������p-o��t	cb��M�n��!<�pYCM#�{����v�1T&]��=Iw��.q�78�&�.+9yZ�2��
r�A�a:������ļT܈^��ڀ��M�,@�z�g�%�#�T��՛k�m�/��u��7�oF�~�8R�Y��Ɋ�)75�ח���KZ�uz�{����o^���,ڱN��ȸ�	Q�#b�!"��凳!
C� �?*Ҝ���`�zP*�岴LH�>Y<%�6��+ki�
��)y��>��f/,�E=���>�ãb\�bˑ	0WL�j�{�1(�K���P�a�<Rϧ����!
(�Bj~�M��1�O�+��gK�4Tg��y*�H��5� �v_n��[�c�h��%A?o@�eep"������5���'܎�\������
y�'w�C��8�&�&@� �{�R'����$�٩���B_��l��,�;s�:�NskJA6|f_�wc�`|X��ѱ���U�)�r#�Fi�n��vH�l��V��m���]I;.6�V<�DOQ�|trxӉ3�]����I%GoSU�7�S����}��-�X�a�4}�}ؒ���q��E�-����^��`�.�B�-��6�p8��mL���=48~ROl9Y��Z��.�)�hWB�q4����⡕��M2���$�9~�t=��?�z�hJ�xM�Q���q���[O\�����tDD�3��� 0.	�5j�{������?iU��v�Fe��#��w�3��(�Di;9����	��/���wu�I���Z���-��]��N��ަ�j�f:�"p
�_X�3�ߩxS���[�YI���Fn��f�ݴ��e��&d@�K �S2PVc�����P�t�1°1�
�l�$V�UՌ�G���!m����*T������L�}�ՠ7�Cs�0pǰ�q�vEWAE��H�a��W`���ˤ����nu�/|C+��:��(���d��0>���<����'ܭxb�h$^Է�\�ԓ";2ݞs�kJgX][��rG��cJ���&d=Q�G�������N
����d�˗"�D�H�K�l�l껷��Z����n#�惏ɸe��J-%h�-�ץE(”�ȡ�..|ⴢ�n��ÂԌI�j�
)Xp��m�|q)�:��<��/�U	�s�7z(
�^�*q�m|��V�rߍ���	�����5�ƶ�/��M�/'����l�F��=Ï�Wo@��Z8fOD����y:�uu��>&Rn�����8��G��aN�T���_�z-�Qw)���!	;ӆ�I���@��2B��3B�	9�1?z�I��J�Z���L,��$w`\hɕ��P�ͯ���{�%�H�����3U��^��L屁�fw@;�0�6�����Sl��̭f'�}���Tm����oRyx��+�4�a����Ө�������P��A�]$ICe� �A�F��z;���d*
:K������?�_D���8��]�6O�ho5��nmb⩍R�P��[�,G7WPi��~*���$���(���y�C�� .S��O<�eV�9' a��u��Bpx��~ѫ�>Qc�3!�&����`�vx~����X�W鞹1A��(���fJ�h��O�w"3���Y[�ߦ���?o��R�jݞe9�MT8%�!�0|%U4²�kCJ�{���2s��1$\Z�>���k`��\�ALgr�������vN�1�7�#}�\=�2�����p��~Ht�s��Ƶ_dY6��
Gb �����k9�x�����}�]TY[F�{�{?�����5Y���Us�t��y����̘�"��baF���6S�u�҃�jj��G=����#
���X+���b5��2�գ�V�M[v_�
E7�D������
�+�`q�=�]�q@SE�/t��QW^����gt�k����}�;�����H#B,&gK�'�+rd&r0E��C�*
�����ڴ^4�!�,Q-�)�p�.iL�KX4�Nc��c�쪄i<�V�Nvi��Ԁ>��纵�ʵ0d:�c޻䩘"��<gM!OK�0��Ǭ}�g"=6�7��5�����,�:<m�F2����sG��q[U�]ӑ�?ql��%��n�Hc�`�jr��g;�NN!��\L��ᙳ�G$����C;�i����2�C�4���"�&���À^^�>�RvaDuDr���;���?�}N�-�Q+�*\_‰8{��
�)���Xf���%�4�9�o5Q��|�R�<-7����/�]n9r�8Wh_�AE�e@�wae.��������6@
�b�^��IT(�
�s�f!c�
V�P�0u�z?e-���<O�ɀ�X=�S���~=<zddh�v�.bf4��L�|`id=nV��y��,%�W�8�wC�F��}7�Re& �u�Dk)�H�6�\�bs������D8��-|p��3�(��+ZJ���^+d�~�~�ol]��N$���S�4:�g`MhX���Mߛa�ItP��p�3��?�ބ�*��wx�C~Y;��1#��P�BS����A��k�(P��ҳ>�M�n�Ҿ�[�K�x�W[�!����Y1��v���Z�9����I��U���.�	��r'�>]Z�yJ�����B��٬��RӇE�`ח_�,��{����K�g�@�'
����).XA+�J���j�ʼ�z#	�����Ċ�K(��� �kQֲs����	Ϊp�A"��%�T�w�
3���B�������/��:�	6�m��O���&io��UU��o�#mל�*E��L��2Gk���
@"�El�ˇubht�޽\xBy�M��1/�*��0�a2��#0φ/�J�����7Hv�tc��>|�}Ŝ��&ݰ��áy�ȹ{��5����,��Vؿ�:�֐��_��
�j zxlj��tO�)�΋�T�Z���ъI�'� �S�Qϐm���Gʐ�����[ܩ��19�F��i�c�F���$q��YHL�5�3�����f�Vp$�������'��Y�{W�����qT�'��Q�7�Ч@#t0��E";�'��d~;��.`�	,��G�ԫ�BE�&�����R�\�D�b�����v��u��L��d��P�0	K��/��3B��t�f-���CE�c�0������fչc���RC�?�_M�J^����q��Ŵ����M14��^���.?�$�j7��#��"��_���R-�†VV��
��!G�׫�녡$�s�(����c+�eb��L>N��x����)=h����
˯zĤ�=�����~Drm� �������-���'G���4���&��
�=��� ���#�rga�I���AY(��Ook
<��ld�+��l9o�`]Ȃwm�Pe	�ok�(�V�W����Z3#��&;j{��2���T7�Ў|�g�F� �dB85�����yݽv�,t���N�5ȹ�
iSL��f{�S[��骕}{F/0��t�j��-ӳ��W1��QҬ�]�qڣ�G��X��M9��^�%�<yP�v�m}uϼ�rY�Y��A����*6*���`	���ipX���'���K�s�O�|��J�]��o��臹z�l�)��q��a��[a׋Y:����T�6!w��D�~��nևg�y=,h��>+�T�h�5ۖ8⵷)�H˥�O��w�b�$|!�RA�
�I�>�Sim�H����I��xn��l5�e&:�KBp%����~?�uu�9 ��μW�w2\@E��Vs��`��̛b*��\��e[+2XS:N�U
y�1}�k�q�J3U�4F�xKi�s\:_Jv<j�̰�Lh%�/8�O�c�z�Z��8���"�..Cr�Q�2N·4��z���pZ9;
�C@[6��!��k�}��ҬF��X�<"���1�>Mͭ�(���$HŪ����pԛ�I�/fH@*�n�?g�{�U6W��n_��%D����Qش��U���ك�֌��,�|x^�3�7�P��]����)a��A�TZ�%g~����o�,+��tO�U�9SG��c����7L&!r�i��g_���#��ы�up7�N�3��9(g::��2Ÿ��]?�E�Of�+ �-�DŽsT�����`U��/h�5x�Z�b�}��nn;�ŗ��g����$x���Kw�C�%��+oS�2�6��ϰċ7�κ��5EÔ
�q��XZi�}C�9����;�!�ߩ
�]���b��@�hXW���&h���(�ae�F����M�טk���ҥ	_贐RȲIw�i~+A�o̍�V�F�n�uК�{�1��F��`p	W� ٟ?-����:�
��~�O��.k�������~�݄�����rk�PK�n
"�Z�#D^ξ�|V'�c\��sUG�'[�"�!�S�f���-��G��^���|*.��?�/T#P��A��9�
�*�����$�zfm쩿^�MYj8	`y�u;�y,�����^�d=��'��v/��H�=�"/�\�H)y,x�2�Po�r�x���Z���ćsv�d*��{a1q�V���y�H�E�e�C@)�t�0�Kth}��Lc���)X�0�ͰK�� ͒@i��>(?��}X��pܱj����B��1-�˯�Il�[:)��� ��A*\<�z�7%@������G��D�U�3օ慄DP�jʦ�2=�6�J�O��m�3{�����̮Tb��w��3�j5���<Q����.��$8���RW�Bl	�>J����(��>�Y,���d�8�]0ڷY�����Ӧ��.wNver[N������c���0�Q����Y�J&_l��4�l|�����N��4;��vBeq��R
t#���aў$�6��>�I����]6����q��I"Fp�H[J����BC�Q�%
L��f�dA����s�{���E�֦4z�
=�Sm��W�z�<��b�'��\��Q�8��a<D��1�M`��4k&_����5��R���!���Mm�LT�|u��Vl��&���8���Jy<���Fx���F|��/���)��R���� ���JXO���;�|;���TC�w�F�:�x�GR!�߼t08@>��1%�d_��W�����{��մ�u}AҦB����?(���
���ŋb�D�g��g�a�\xU�V�q-JI��C+ޕ��t\n� �J�
�I0���h	�^?�s��xm�w���&�^��4��X
"$N8i\=�G��9��&bL]�@��pKר%fE�)6�P(v�7eM'�$�=���~k��؉!u0:��nN�k~M�dP��]�Kr��|p����)���9�$Q���ܫ݉vM�#RF��Q2��9�$E��n^�8�zH#>�暻�ߴ?1Ũy?�#�6S�"��P�ѕ	�+V)@���ʹd ���n�����v��{+u¼�{^��k2L���5h`d�לz�&,�
:���sO7EB��f�W���VO�k]5=�Hp����DQQ�*�j��Y���y�Z�����y�356�M�`�ݟi��6�j�G*�f򅶽<�����;_4���(͞�[��.��A�|2��o�ゆ�C��f�Ч�H���R
ihgE�.#�5sZ���,�[�'eY�3�m�b��>��L�!�o]
��cXm1�갳G��0}���a=�.[�{PK�����}���U�c-Z��_��7N/Xs��z�"Sɻ2�����,YT@��ַWIۑ��>-�7� �4�"bZ4�-����Y��9w�%q
��L�r_��j��S��i��U�B*�����~ؓ�w:��`uޛ���	zìv۸�r�ma�l�󷽂����/��;����Η�/���o�p�jȏ��*A��D���r��T�c�t
��U+�aէ��(���}���KB�N[tgS��!`�Ol������H<c<��q�eo�T����'h�,Iq���3�D1.A�%CWl�~�����	��'�\�3�e�V�t꛲�]ã\0������ow4�c�E�h��)��ì���Sx��N��Gڥ�%�e�ud�e<J�Iy`��Ӕ�[ၟ?��pD�`A�^��"��qB:������f��}Ak#
�u1�^q�S5r�P����Nj;ͺ��h)�\c~l������ۛ>�.��ej�g�ůT���s	��O•ʭ�m�tUē�����0������`z��ek��I�	m�'�/��7h��5�2�Ň����7���\ ��8VzM%HXuyb�϶41��s#�ua���9�갯T���{��9{úx�դ�&�U\.v#>x��*�n�QC�p�
*�37�
=Ѐnѕb�o�)�H�ԍ=F˄?��������6U|�Y�j�^���[3(%Y�!ER��8r��=�g�Nk��
Z��䐌�#&E��8�͑_Ο+�,�&O�}����<7}���(Ї8 _�İ�Q��z��g�=/��J"�Uw)�����Q���L'�m����S�?��̆I�,�	C�*�W�K�;JVi�2~[3��kŭ	���4��R�q�!(0Y&�R�v�a�D,ˍ��W$PvKAZ��i��-�l�M��M��f��;vd�d�_����?q�2w��@��J"�LHW�'�w�-[>���hsb���:C��t��<X���T�/�iG��a��_:�4�C�R�5"ٴ.�y͵Oґ��i��t�a�Z ̩�{�+��r-���F+
���@���c���M����$�B�d��x]��noǾ ƹ$���ؐ!�Z0'�-�fX:��X�D�]��K�p�(��y�;�fS+��9�V�1,|@^E��Dlp�LB��j��ȒnOb|@�������
Ǣ�A�ʺ��NF6�K���!%���5��}zPΜ�����s~l�c�6�<V�H9I��و��Q$�ֶ>GT�oP���2L/3r�*W���{
|�~��`�B�����g�]��
��FY1G��6�.mm�
۠�tc~!HDjO#=%�e�oヲ�/�3�l
�6�:]�Zܳ_&Mω���U���ktZ�rx��@��w���\Vi���U`/\Xbo��g���w�jœ=�>��7׫���0��8��p&lX���+���M���h����D� �A����K��d��!�L����
��_�
�BE�V���g��I�N'�6�7;`�̬�iQ�;QO�
M�Ĥ�n9)����)<��'}�hH���TZsm���EQ�0���߀IU�<��Y�e{�:�z��>n�y���۪��P�=e�gn@s�?19�fn�_���Ӝ��i������rTĻX��	~hɥ���5����k�鶩^��U��2���N�y5fd���ys�2��ю�ZD?�r�2M���s��|��E�j{�z�.�W�G�TC�^i&J#Yc�G����,v@���VhF3p�
�a)�J��Hu;�Oռ*��0�<l��r"�_:#��P�w��v+V6{��LҘ��"oY�b�(�B�CB��^���-J����Û�0�7�.u��m�1�ԃׅ�3��,��G��v+�mKyF���q�S�	�aW���w�1�5F��|W�^�R��*�%��H�Y���I�d�������8O���+8�(��d��ʡA��-�\k�]���`%�[Ϳv��1���2q �z�fS��4>e�ˆ��},�ڣ�4	g�����z#ջ"[=�f�(��X��Nx[��9t6L�c����.:a�3/-�7$����!�C�\�
�t�(`�L�<��)K�]��bl�.*K� ���Хb"'ƴ����~A�@���%�x-��u	���̻$�c���,PA����*N����у�j�RS��>����k�o��P���|�CEQ�S�]�W�I$�$
څG��'��“;����q�aJx{��p�/�[�q�8�45�?R�?���B�D�uF�T��4��R&��9 }�~ߡ�p��}!�|.?������f����ǃk1�r�jRu��A	�Vq�}�S�h�
}
>��<�=�a'�wP��J�Vq����7����e�C��B�ګX�N���IW��:,l��\�����,g��{W!*o��Ɩ~��i�1i|lNQ&y�����gYv��-H7y��
�8����t0X�ָ0��mbv���� �#�j䆪�Iڴb�)f����=�[ԛaO��9	�)4|Hn����_�e;as�iƳ��.�x�o(��Wu]���A�Ϻt�G�CcF�d�Ȕ�Lc&^�@<1R���x���.�}խ}T�cz4��
^��b�<,k�uқ�ԑ~��$9� s~�\I���jë������9���[g��Ϯ�v#ӉE�VT�y�`������M� �B�
�;�{�'�D�ć��!�;�6��#n�?ޓo�[?wn"�T�A��o$��W��gq�"�iŧKs@r'\]� 0M|
��ĭA45v�"�Z�eQ�N�Iڥr�O_��M0�K�\z��/=�U��6!R��sX�[�_��(�l��pQ2�SG`{V���*F:-�U_�Z<�E����4���6����U5|�^�Pw�K`�d����:#3�^��+$����
���33�xrҦ�ӵ�(�x5�����&	�L7��m�tJt"��m?���z�:�=�	9�S�q>/N*�Z�X8��Ő�J>���b��H+%��kw-��C2Ր�$��E��D�/P���>8�)C��Z%{&���Qh%�p�1aH�+���@Y�/��hK3`⻐ژp����G�7-!��L�d��͵]���5R�k��+uF�YOfd.�E����B���*����6�TJ̮SBh�)%��mj���P���~,��@����p��y��������z�L�Ʌ���2�٪�8G����2�F�Y���U���;��'�l
ʌ������瞩O�]���ɰ�De����(nc���f֎���D�M���{�]��X�I?���]Ǭ�}����ot��Ho��A�jj��s�U����R�&�wc$�v���#��8����N�Yu�zj���ڸ�x��ⳜZb@M���E���z�[Ȇ�� %3Ym���l��2J�"�7�C�q2�*WB*��_�-R?�Y�k�15�@z
,)G|��M�J�/6xX֌�L�,	�(�m^ h���W0�d%��(�C+���3'�r�:,�� �oKS9Q7�����G�fn�B!��0�I%�N�m\�i�J�'+g��kx�c��6�N�?��ʳVa�����	a���$�/�[�#�p��Z�d>O$�wCFS��c�v^	R�Z{�r�5n��ĩ�zH���}�q�v�R��	���=������5��@u74r�8���~T3Vh�>���K��{!�Q"�E�h�h����]
�<�D*�t%��#/��&��˒-X�ڶ���̍N�D���mC�
;`'D�ӽ&_P��+}��s2��bs98�a���`�wF.!���(ql٤�6U��Te�)4�g�e�~�x�����MV*wDŽ��!\�.��Њy���jH�)��g�JT�T���yW1��I��4��S���fݕ�s:�1B�0�
��S�f�~F�U��;���}|ny������K�9�+��/4�-�O�=]@����G�E�
L�,��ϩU.�-iʲ���"^�a������9H�&䧯��n�ep�L�V"�vtly�A;$|�
kAX�<��#���u2D?����{�
'�>���)�=�f��.�t����\��т|����b���B�QqEb��p�I�0e_[Һ(~�� ͯ��o���\3u����i`�
���O���5���A7��M�^�Z�;8_����P��kе<� �c��r�Od�KLF�ˏW�ɐ���ۚd��<6���=Yg`�>P:�����p��Q[��:��l�1̪PО�����G�����i�ˑ.G��DTaX�b����c�q��#���9�$�Qo�1��h��q�;��"b}��W��4=%Œ�����uV����C���2M���w���7�Q�7�#���3iP���:�?��`�ݖ	_�5Z�ML�H�9�N����<�o<���v)���X�y�b��dZ�	�BD��	�'1?5e�9;I���7�@�Mx�!zӎ��͝R�]j���������+��p�~6��2bڤ%s�����O���iP��w���Wo�`�q����)8e�L0��k��7����S��yx36��I��E��c��'~�8S1�J*?�!^�F&�}rfT���ݨ��G4�?�*8�95�JQ�Q
�����5��s@(�#��Y�˒�']V���~��$�'�{���_��>E���R��L�yX���m�u^�U�(sl��%.��)F�����g-��^�*�d=+:Al|
op{��Uk6NPV�, W $��ɵ,F�>r\nu�HY2w�����cvWd�A����U�`T�:/&��G��]�#��j������p�Ռ���SV��&��A-�ϸL�[߁�R��{��a��¼K�U�4��f�"h��I`m��"�Z��;��R(+�B����,Ŕ0f��X��C]3�fH�r�ʠ�K�.�0�-�E�I�OC��[|��y�4Ÿ��ۣ\ܡ��|=v�/m�n��J��O�ֳ��
��_�0i��̱mt�}�Ntu�l��C�������-��ڇe!�Kg�z
�
���6E[h����;&���<ˤ�O䂼!�����c�j.>J��1��>�\%H�e�x�$�������P�	�}<kB��zA{��@�F��č��|��/j�[nڕ��,�
i�dĞr�=@8��a�3�\�_x���ՙַ�Y�ZvS�K�����pN*��z� �n������tނ� T�tMk�q��)���aw��g�Y^B�D(/���
�:~s�lG�+֭"g�2�D�h
��ū�wAoLي�߃�?d�.)�VCtŴ�эgvNL�J���t�j�p�"�vЍ��ŗz�H�j�>$���34z/zu_�3w��YȌ�x���"�Y%f�	�Biy.T���s#B����~�ۿ��}�,D�Gd��~�j8�f^���������3�
�5��m
�ֶh|���N}�n�X����K&)�M��W8����P$���Q�o#ު�u��჎�}Oc�#�(	�6q+6�-��!+���RcgD1��N�.�l�N]�}q���O��1k���VV����f'b5!����RKgm�xI�Q�=԰�F��_�c4��+g��
�&FZz��H�b"�����^���b�[�;�i\�G�aɌHل�d�'��—�K, �`��B5��`�>]<=�Ώ
�c��.�t{�ӱr�;r�6�77�I�$
�
k%�wx�XT���j%@l�/�nL�9�o��>2IE�_��'���s��7�qx��0�p;����i'(>�����p��SL�&�(��������]@�Z{!�P��Q9�,0 ��m5��C�J{2M���)�yG�Cp���[Ea(=�e��k�9�n�=����`˳Չ�6ʛu`0Va��:�;��M|�{�M�-��?eh���r�׀���&,k[Y�������0��1��ޤ��T�2�[u�q�<ڸ��	���-���W�m���l�e@��S#?yǻ�U�����~�J��D�Fl���A�Uh�WO�F��s��"�w��TK^�\��|���U)A�r3O9����<���7$��E�1�a8v���R��@~v��� |��B��Q*�2t�?����4Xh%P�;Di�JC�X�	�*
�d!�P�Ό\��/�����I��*�4S/-� EG��U���Yy]��n�:W��
s�<��Z�8Hf�S�ƿ���_��Aʯ:껑�b�ԕ\��խ���ä�^�e�+:�*��R��Zo����Q�=0�+����.�k.#��	m�7�.��Z�9��?���P�7���Q��/ĉ"�@�A9oX~~�

@�yK�	���F�q)��hH�?:ૄ���^���r%�Ԓg7��u�5����gZ��8��hb%�����a�w}&s���;�EVpG�uw�zF	J�ƧB�vy�k�aDJd�q?��)�돰A0>�р��e�o=V��m��L��kB4I���|��j�z�W:
�^�B�4a�;d���2���LmRR3c,���J��.vP�'���߄{z�(\1�����j��3���%��`�>�-_8`�E(�o֖\�$s (�3q���D��C�G��t��l]�>y2'{OqK6w�Ѳ��Ŧ��LWv0j8֔h���V������G�
�H�&��)S�ޥ�g���NY�Vl�&�&4ye����"�c�*ݯڃ����Э;�I��U�pד����D�BO�ﴕ�Á�=�ټ�[�I�|f?w��K�!�n*k��'�������u��I�FO›�,�t6��Z�l���ܬ_���ܪ_��Z���D��T����_��YN�ɤx�3��<Q�~��c����N�P�N�]u[X-7X��]�
Xn*TT���cHW���Y��FP�+��� t)J�6��L�H�������:/��]R�WR�M+9�����۱�[��a�:�p�<Cd�#[2E{E�US
��1-ix=i!
hf��Y������*�ln�����,��(��2'�<��Р	r�x�{K�p�}@���!vٿ�!��fo�
e0��}��S�}9������t�e$�C�b$�ƣ�z�8U65M���^AsGj#�Μ��~�^i�f�x����gs��>Q\�"M1���U�����ηb��#-��,����\�1��칵�b�˹T�S��5��+|`��5�d|�@�"��i�n� ���$;�`�C�rm��r�4AO� /�/<%�M�0x�`#&F�#�#Ƹ��~�?���o����L�&��mb��ڸ	O
�nBO!O6�l�6�6��QY��������o�����y���y�yo0��_o�o�m?�~�R���RUR`G��'`�`�5ev��ʼ�7+ͬ�V��������[q���l<`0{����{�{5�j�5�5�:i�t��GS���!����{�œ��^�/�.C\�m.�.K)�zbK1K�]�!���Wծ�WAW�*A�Tw�w�w7�n�7�7��V{��#ٌ�F��#�����J �jJ5J�D����O�X��%�X}X�Ϗ���)|R�U)�)
Z"P
(
�PO����]i���k��k�k���\�.��<gs��ν]��4�]i]� P�@������݋���>�|��>�>-
(gx��g�g��Ss��'N�%'�'As�X2AA���,����SQ���}����}�}�I7�ܕn��V����G�p�0�����q#��|����|�|fq��f�f�{����S��.K�\GE�FGG�!܄�B��ԉ���-XZ�u-�-�.cy��ƿ?8��G#���Z��/�ZuZ���l�6�3�f��3�3c\��?c�c
��I89���q�⨯q�q�ƍ����2}�dI;�prI9I�_����C��1�������HK��[��*�[q[��
�4���>)Ȥ�R�&L�-&�&2�d��2�2�Y}J�����j��w3x<�3����sՀ��t�:��'a|��¾���&��4�h�4�4H2�uzH=H�T�$���z��z�z�d=��z�_��>�_a_ =@� � h��gh�h�4r�h��A,����}u^ɴ�TΨ�TMT�;��v�"/D�
"�"dc��d�d�*�����s�梿s�s�$Z�H@z�]:@@H(@ Õ��V�+����{3���M����Kۡ�_a��������=�z�=�=�[3�̗f����6��+nV�E+�+v�쳗v�v���d�2��(������6w�l�tw[���C)���j��wj�jP�
�P]PEW�LE	E�8�����0�`�0�0���t+��?�~��?�?UǪ�UIU��Yy������e��ej��e�e�ih��Һ/J^�e/�/����N�'��`����_��8l�p�F�.���M�dRM)M�v9��r�u�꼏u�u60��	�$���Ky@�����Yc��~6p8�>c�|bU�7b�b�:����wԨ�M2)����R1�Ėb��b�:���ţ��f�3�%J�5%�%Y�� �YyY���T�*�r�䧷r�r9�r��9�9L�aZL-L^��;�^e^x���x�x8�p��8�8����
������cѥ�WA�����MC��aN�/a�a�B{E�!4B�!�!�%֔�J��<f�xCa�R"CCDZ��v�;�O�+���$ Q��QYQ�%/Ǽ�^�m"��Om�m
e9h
4
�y�5����i����[�~����~�~$H�=$�$;�v��;�;��K=1������>���"U�D�����N�kJN%N�fsQѷ����`��<�x�<�<���|�>��@5�Ԕj������og��޹�&_�L,QX�},�,�����k���\k��n9��Wn�nĪ��n�7�Vܬ�VEVD^�ID
D�������O7!���*gT�M*�*�
km��ֻ����F�#�S��SQS�r����W�S'X,�'Ӝ�N�l+�Gl�l1�b��1�1t�蹇t�t��	��FL�C
FF��E&	������<���(D�P��B[���,N�X:�t��:�:i��oi�i	A-H	$	p�୧p�p�oqTٶ������g����~;�����.��Bh�W*BB�,-´�Z���UI���(uP�](�(\��1�\m\�k�?������D�"��0x�`##&F�#��Ƹ��~�?���o臇���L�&��mb���	OO
�nBO!66�l�6ئ��QY��������o������yy���y�oo0��_o���m?�~RR���RU``G��'`���5ev��ʛ�7+ͬ�V��������[q��l<`0{{����{�55�j�5��:i�t���GS���!����{�œ��^�/..C\�m.�KK)�zbK1��]�!���WWծ�WA�*A�Tww�w�77�n�7����V{峟�#ٌ�F��#����JJ �jJ5��D����OXX��%�X}��Ϗ��))|R�U)�

Z"P
(��PO����]i��kk��k�����\�.��<gs���]]��4�]i� P�@�������݋��>>�|��>�-
(ggx��g����Ss�''N�%'�AAs�X2A����,����SQ��}}����}镕I7�ܕn��V����G��p�0������q#�||����|�ffq��f���{����S�.K�\GGE�FG��!܄�B��ԉ��--XZ�u-���.cy���?8���G#��ZZ��/�Zu����l�633�f��3�cc\��?c�
���I89��qq�⨯q���ƍ���2}�dII;�prI9��_����C��1�������HK�[[��*�[q���
�4���>)Ȥ�R&&L�-&�22�d��2Ȱ�Y}J�����j�w3x<��3����s����t�:��'a|�������&�44�h�4�HH2�uzH=��T�$���zz��z���d=��z__��>�_a  =@� �hh��gh��4r�h���A,����}u^ɴ�TTΨ�TM��;��v""/D�
"�ddc��d���*����ss�梿s��$Z�H@@z�]:@H(@ �Õ��V�+����{3���M����K���_a�������==�z�=�[3�̗f����6�++nV�E+�vv�쳗vł���d�2��(�����6w�l��tw[���C)��jj��wj�PP�
�P]EEW�LE	��8����00�`�0�����t+�??�~��?�UUǪ�UI���Yy������e�eej��e���ih���//J^�e/������N�'��`����_�8l�p��F�.���MM�dRM)��v9��ruu�꼏u�60���	�$���Ky@������Yc�~6p8�>c�|bbU�7b���:����w���M2)����R1�Ėb��b�:����ţ��f�3%%J�5%�YY�� �Yy����T�*rr�䧷r�99�r��9�LL�aZL-^^��;�^exx���x�88�p��8����
������c���WA�����MC�aaN�/a���B{E�!!4B�!���%֔�J�<f�xCCa�R"C�DZ��v�;��O�+���$ QQ��QY��%/Ǽ�^mm"��Om�

e9h
4��y�5�����i����[~~����~�$$H�=$�;;�v��;쫫�K=1������>��"U�D�����NN�kJN%��fsQѷ�����`�<<�x�<��|�>��@5�Ԕj������og����&_�L,,QX�},�������k���\k�nn9��Wn��Ī��n�7VVܬ�VEDD^�ID
����ᩩ�O7!��**gT�M*���
km�������F�#SS��SQ��r����WS'X,��'Ӝ�Nll+�Gl�11�b��1�tt�蹇t���	�FFL�C
F���E&	������<��(D�P���B[��,N�X::�t��:�ii��oi�		A-H	$pp�୧pݶ�oqTٶ�������g����~;�����.�BBh�W*B��,-´�Z���UI��((uP�](�\\��1�\m��k�?��dž���D�"`�0x��##&F�#?�Ƹ��~Ƈ���o�&����L�ڸ�mb��	!OO
�nBO�66�l�6����QY�o�����������yy���y�oo0��_o~��m?�URR���R�``G��'`ʼ�5ev��V��7+ͬ����������[q�0l<`�{{����{�55�j�5t�:i�����GS�{��!����/�œ��^¸..C\�m.1KK)�zbK��]�!��AWWծ�WT�*A��ww�w�77�n�7����V{�F��#ٌ����#���5JJ �jJO��D����}XX��%�X��Ϗ�ɤ))|R�U)(

Z"P
���POᱺ���]i��kk��k.����\�ν�<gs��i]]��4�]@� P���������݋��>>�|��>-
(�ggx��g����Ss�''N�%'AAs�X2A����,�����SQ��}}����}n��I7�ܕG��V������p�0������q#��||����|�ffq��fS��{����\�.K�GGE�FGB��!܄���ԉ�ʴ--XZ�u-ƿ�.cy��?8����G#�uZZ��/�Z6����l��33�f��3�cc\��?c
����I89��qq�⨯q��ƍ��d�2}�9II;�prIC��_�������1������HK�q[[��*�[���
�4�R��>)Ȥ��&&L�-&�22�d��2���Y}J鰃����j�<w3xs��3����:����t�¾�'a|������&��44�h�4=HH2�uzH��T�$���zz��zz��d=��a__��>�_�  =@� �hh��ghh�4r�����A,�괴}u^ɴMTTΨ�Tv��;�쓈""/D�
"�ddc��d���*����ss�梿sH�$Z�@@z�]:@ H(@+�Õ��V×����{3�K��M���۾���_a�������==�z�=f��[3�̗����6Ϭ++nV�E+�vv�쳗v2����d���(����l�6w�tw[������C)��jj��wj]PP�
�P	EEW�LE���8���00�`�0�����t+�??�~��?IUUǪ�U����Yy������e�eej��eҺ�ih���//J^�e/'�����N�_��`����p�8l���F�.��)MM�dRMr��v9���uu�꼏u60���	�$��Ky@������Yc�8~6p|�>c��bbU�7bw��:���Ԛ���M2)�b��R1�Ė��b�:��3�ţ��fŔ%%J�5%yYY�� �Y*����T��rr�䧷r�99�r��9-LL�aZLe^^��;�^�xx���x�88�p��8
�����c�����Ѯ���WA�����MC�aaN�/a���B{E�!!4B�!J��%֔�x�<f�CCa�R"C;�DZ��v���O�+��$ YQQ��Q^��%/Ǽ��mm"��Om4

e9h
��y�5��[��i�����~~����~�$$H�=$�;;�v��;����K=1�����>�D�"U������%NN�kJN混fsQѷ�����`��<<�x�<>����|�j��@5�Ԕ�����޹�og��L�&_��,,QX�},k�����ӻ���\k�nn9��Wn7�Ī��n�EVVܬ�V
DD^�ID���������O7!��**gT�M*ֻ�
km��#�����F�QSS��SW��r����,S'XN��'Ӝ��ll+�Gl�11�b��1�tt�蹇t����	�FFL�C
F����E&	�����<�P�(D�����B[�X�,N��::�t��:�ii��oi$		A-H	�pp�୧pⶶoqTٶg�����Г����~;�����.�BBh�W*BZ��,-´�����UI��((uP�](m\\��1�\��k�?��"����D�`�0x�#�##&F��?�Ƹ��~����o�&����L�ڸ�mb�	O!OO
�nB6�66�l����QY�o��������y�yy���o�oo0��_�~��m?�RURR���`�``G��'�ʼ�5ev��V��7+ͬ����������[q0l<`{�{{����5�55�j�t�:i�����GS�{��!����/�œ��^.�..C\�mK1KK)�zb���]�!�WAWWծ�T�*A�w�ww�7�77�n�����V{�F��#ٌ����#��J5JJ �j�O��D���X}XX��%����Ϗ�)�))|R�U
(

Z"P����POᠺ���]ik�kk���.����\�ν�<gs�]i]]��4�@� P���������݋�>�>>�|��-
(g�ggx������Ss'�''N�%AAAs�X2�����,�����SQ}�}}���ϕn��I7���G��V������p�0�����q#|�||����f�ffq���S��{���\�.K�GGGE�F�B��!܄���ԉ�-�--XZ�u�ƿ�.cy�?8�����G#ZuZZ��/�6����l3�33�f��c�cc\��?
�����I89q�qq�⨯���ƍ�d�2}�I9II;�pr�C��_�������1������HK[q[[��*����
�4�R��>)Ȥ&�&&L�-2�22�d������Y}J������j<w3x�s��3���:����t�¾�'a|������&4�44�h�H=HH2�uz���T�$�z�zz��z��d=��_a__��>� �  =@�h�hh��gh�4rЮ����A,�괴}u^�TMTTΨ��v��;��"�""/D�
d�ddc������*��s�ss�梿H�$Z�@@@z�]: H(@�+�Õ��V�����{3�K��M��������_a�����=�==�z��f��[3�������6+�++nV�Ev�vv�쳗�2����d���(���l�6wصtw[������C)j�jj��wP]PP�
�E	EEW�L����8��0�00�`������t+?�??�~��UIUUǪ������Yy�����ee�eej���Һ�ih�/�//J^�e�'�����N�_��`���p�8l���F�.�M)MM�dR�r��v9��u�uu�꼏60����	�$��Ky@�����Yc8~6p|�>c�b�bbU�7�w��:�����M2)�b��R1����b�:��3�ţ��f%�%%J�5YyYY�� �*����Tr�rr�䧷9�99�r��L-LL�aZ^e^^��;�x�xx���8�88�p�݌
�����c����ƥ����WA����MCa�aaN�/����B{E�!�!!4B��J��%֔x�<f�CCCa�R"�;�DZ��v���O�+�$ QYQQ���^��%/Ǽm�mm"��O
4

e9h���y�5��[��i���~�~~����$�$$H�=;�;;�v�ū����K=1�����>D�"U������N%NN�kJ�混fsQ������`<�<<�x��>����|�j��@5�������޹�og�L�&_�,�,,QX�}�k���������\kn�nn9��W�7�Ī��nVEVVܬ�D
DD^�I����ߩ����O7!*�**gT�M�ֻ�
km��#�����FSQSS���W��r���,S'X�N��'Ӝl�ll+�G1�11�b��t�tt�蹇�����	�FFFL�C
�����E&	�����<P�(D�����B[X�,N�:�::�t��i�ii��o	$		A-Hp�pp�୧�ⶶoqT��g����������~;�����.BBBh�W*�Z��,-´�����UI(�((uP�]\m\\��1���k�?��"����D�`�0x#�##&F�~�?�Ƹ������oL�&������ڸ�mb	BO!OO
�n�6�66�l�Y�����Q��o���������y�yy��_o�oo0���~��m?�RURR��'`�``G����ʼ�5ev��V��7+������q�����[`0l<�{�{{����5�55�j��t�:iS����G��{��!��^�/�œ��m.�..C\�bK1KK)�z����]�!�WAWWծ�T�*A�w�ww�7�77�n�{����V��F��#������#�jJ5JJ ���O��D���X}XX��%���Ϗ�U)�))|R�P
(

Z"���POi�����]k�kk��\�.������ν�<gs�]i]]��4�@� P��������݋��>�>>�|�(-
g�ggx��s����S%'�''N�2AAAs�X,�����Q�����S�}�}}���ܕn��I7���G��V������p�0#����q�|�||���f�ffq���S��{���\�.KGGGE�F��B��!����ԉ�u-�--XZ���ƿ�.cy8?�����G#�ZuZZ��/l�6�����3�33�f�?c�cc\��
9�����I8�q�qq�����ƍ��d�2}rI9II;�p��C��_�������1�K����H�[q[[��*4����
���R��>)�-&�&&L��2�22�d����Y}J�����jx<w3��s��3��t�:������¾�'a|&����޽4�44�h�zH=HH2�u����T�$�z�zz���z��d=��_a__��> �  =@�gh�hh���h�4r�����A,ɴ괴}u^�TMTTΨ�v��;�
"�""/D�d�ddc�������*��s�ss�梐H�$Z:@@@z�]@ H(V�+�Õ��3�����{��K��M��a�����_������=�==�z�̗f��[3�6�����E+�++nV��v�vv��d�2��������(���l�6w��tw[�����C)wj�jj�ߺP]PP�
E	EEW�L�����8��0�00�`�+�����t�?�??�~ÒUIUUǪy�����Y�����ee�eej�칺Һ�ihe/�//J^�N�'������_��`���p�8l����F�.RM)MM�d�r��v9�u�uu��06$����	����Ky@c����Yp8~6�|�>c7b�bbU���w��:��)�����M2Ėb��R1���b�:f�3�ţ��5%�%%J��YyYY�� T�*�����r�rr���9�99�r�ZL-LL�a�^e^^��;�x�xx���8�88�p��
������c����A�����WC����M/a�aaN���B{E!�!!4B���J��%��x�<f"CCCa�Rv�;�DZ������O�+ $�QYQQ���^��%/�Om�mm"��h
4

e9����y�5��[��i���~�~~���=$�$$H��;�;;�v�1�����K=>����шD�"U�����JN%NN�kѷ混fsQ�����`�<�<<�x�|�>����Ԕj��@5�������޹�og�L�&_},�,,QX���k����k����\Wn�nn9��n�7�Ī���VEVVܬD
DD^�I�����!�����O7M*�**gT���ֻ�
kmF�#�����SQSS���W��r��X,S'��N��'�Gl�ll+��1�11�b��t�tt������	
FFFL�C	�����E&<������P�(D[����B�X�,N�:�::�t�oi�ii��H	$		A-�p�pp��ٶⶶoqT��g����;�����~.�����*BBBh�W��Z��,-�I�����U](�((uP��\m\\��1����k�?D�"����x�`�0�#�##&F�~�?�Ƹ�o���͡L�&���b��ڸ�m	nBO!OO
��6�66�lY�����Q���o���������y�yy���_o�oo0��~��m?�RURR���'`�``G�v��ʼ�5eͬ�V��7+�����q�����[<`0l��{�{{���5�55�ji�t�:GS���ݬ��{��!��^�/�œ��m.�..C\zbK1KK)�!����]��WAWWծA�T�*��w�ww���7�77�nV{����ٌ�F��#�����#�jJ5JJ ����O��D�%�X}XX������Ϗ�U)�))|R"P
(

ZO���Pi�����]�k�kk֫\�.���s��ν�<g4�]i]]��P�@� ���������݋��>�>>�|(-
�g�ggx�Ss���ջ%'�''NX2AAAs��,����Q�����S��}�}}���ܕn��I7���G��V�0����p�q#������|�||���f�ffq̎��S��{�K�\�.FGGGE�܄�B��!����ԉ�u-�--XZy��ƿ�.c8?#�����G/�ZuZZ���l�6�����3�33�f�?c�cc\�
89�����I��q�qq������ƍ}�d�2prI9II;����C��_������1�HK����*�[q[[���4����
Ȥ�R��>)�-&�&&L��2�22�dJ���Y}j�����3x<w���s��3��t�:���|��¾�'a�&�����4�44�huzH=HH2�$����T�z�zz����z��d=>�_a__��� �  =@�gh�hh�r�h�4,�����A^ɴ괴}u�TMTTΨ��v��;�
"�""/D�d�ddc������*���s�ss��Z�H�$]:@@@z�(@ H�V�+�Õ�{3����Ő��K��M�a�����_������=�==�z�̗f��[3�6�����E+�++nV��v�vv��d�2��������(�w�l�6[��tw)�����C�wj�jj�
�P]PP�LE	EEW������8��0�00�`t+�������?�??�~�UIUUǪy�����Ye������e�eej�h��Һ�i�e/�//J^�N�'�������_��`�l�p�8.����F�dRM)MM���r��v9��u�uu��06�$����	@���KyYc����6p8~c�|�>�7b�bbUģ��w��:�2)�����M�Ėb��R1:����b�f�3�ţ��5%�%%J �YyYY���T�*�����r�rr����9�99�raZL-LL�;�^e^^����x�xx����8�88�p��
������c���A�����WMC����/a�aaN�E��B{�!�!!4B֔�J��%f�x�<R"CCCa��v�;�DZ�+����O� $�QYQQ�Ǽ�^��%/�Om�mm"�9h
4

e5����y鄶�[��i���~�~~���=$�$$H��;�;;�v=1�����K�>����U�D�"�����kJN%NN�Qѷ混fs`������<�<<�x�|�>����Ԕj��@5����g��޹�o_�L�&�},�,,QX���k���\k�����Wn�nn9��n�7�Ī��VEVVܬID
DD^������7!�����O�M*�**gTm��ֻ�
k�F�#�����SQSS񦋮�W��r�'X,SӜ�N��'�Gl�ll+��1�11�b��t�tt��	����C
FFFL�&	�����E�<����D�P�(B[����N�X�,��:�::�t�oi�ii�-H	$		A��p�pp��Tٶⶶoq���g���~;������.����W*BBBh�´�Z��,-I�����U�](�((uP1�\m\\��?����k�D�"���0x�`�F�#�##&��~�?�Ƹ�o����L�&���mb��ڸ�	�nBO!OO
l�6�66�QY���������o��������y�yy���_o�oo0?�~��m��RURR���'`�``Gev��ʼ�5+ͬ�V��7�����[q�����<`0l���{�{{�j�5�55�:i�t��GS��ೳ���{��!��^�/�œ\�m.�..C�zbK1KK)�!����]��WAWW�*A�T�w�ww�n�7�77��V{���#ٌ�F��������#�jJ5JJ ����O��D�%�X}XX�������R�U)�))|"P
(

ZO���P]i�������k�kk�\�.���gs��ν�<�4�]i]]� P�@������������|��>�>>�
(-��g�ggx�Ss���N�%'�''�X2AAAs�,����SQ��������}�}}�7�ܕn��I����G��V�0����p�q#������|�||���f�ffq����S��{.K�\��FGGGE!܄�B��������Z�u-�--Xcy��ƿ�.8?G#������/�ZuZZ��l�6���f��3�33���?c�cc\
I89�����⨯q�qqލ�����2}�dђprI9II;����C��_������1�HK��㨶*�[q[[�
�4����)Ȥ�R��>L�-&�&&d��2�22�}J���Y�j����3x<w����s��3�t�:���a|��¾�'��&����h�4�44��uzH=HH2�$����T�z�zz�=��z��d�>�_a__�@� �  =��gh�hh4r�h�A,�����u^ɴ괴}��TMTT�;��v��D�
"�""/��d�ddc������*梿s�ss�$Z�H��]:@@@z(@ H��V�+�Õ�{3���߫���K��M_a����������z�=�==�3�̗f��[��6���V�E+�++n쳗v�vv��d�2��汩����(6w�l�w[��tC)�������wj�jj�
�P]PP�LE	EEW������8`�0�00��t+����~��?�??ڪ�UIUU�Yy������e������e�eejih��Һ�^�e/�//J��N�'�������_��`8l�p��.����F�dRM)MM9��r��v꼏u�uu�06	�$����y@���K�Yc���6p8~>c�|��7b�bbU����w��:M2)�����1�Ėb��R�:����b��f�3�ţJ�5%�%%� �YyYY��T�*���䧷r�rr�r��9�99�aZL-LL�;�^e^^���x�xx�p��8�88���
�������c��WA������MC����/a�aaN{E��BB�!�!!4%֔�J��<f�x�R"CCCa��v�;�DZ�+����O $��QYQQ�/Ǽ�^��%��Om�mm"9h
4

e�5����y����[��i���~�~~�H�=$�$$v��;�;;�K=1�������>����"U�D�������kJN%NNsQѷ混f�`����x�<�<<��|�>���5�Ԕj��@����og��޹�&_�L�X�},�,,Q����k���\k�����Wn�nn9��n�7�Ī��VEVV܈ID
DD^�����O7!�����T�M*�**gkm��ֻ�
��F�#�����SQSS񥋮�W��r'X,S'Ӝ�N���Gl�ll+b��1�11�蹇t�tt��	����C
FFFLE&	������<����(D�P��B[���,N�X�t��:�::���oi�ii-H	$		A୧p�pp�qTٶⶶo����g���~;���օ�.����W*BBBh-´�Z��,UI�����P�](�((u�1�\m\\��?����k�D�"����0x�`&F�#�##���~�?���o�����L�&��mb��ڸ�	
�nBO!OO�l�6�66�QY��������o��������y�yy0��_o�oom?�~�����RURRG��'`�``5ev��ʼ�7+ͬ�V��������[q����l<`0����{�{{�j�5�55�:i�t��GS���!����{�ל��^�/��C\�m.�..)�zbK1KK]�!����ծ�WAWW�*A�T�w�ww�n�7�77��V{���#ٌ�F��#������ �jJ5JJD����O�ڢ�%�X}XXϏ����|R�U)�))Z"P
(

PO����]i������k�kk��\�.��<gs��ν���4�]i]]� P�@�����݋�����|��>�>>-
(x��g�gg��Ss���N�%'�''s�X2AAA��,����SQ��������}�}}I7�ܕn��V����G��p�0�����q#�����|�||q��f�ff{����S�ݯ.K�\E�FGGG!܄�B��ԉ����XZ�u-�--.cy��ƿ�?8�G#������/�ZuZZ��l�6���f��3�33\��?c�cc
�I89�����⨯q�qqƍ�����2}�d;�prI9II_����C��1�������HK��㹶*�[q[[�
�4���>)Ȥ�R��L�-&�&&�d��2�22Y}J�����j���w3x<3����s����t�:��'a|��¾���&��͉h�4�442�uzH=HHT�$������z�zzd=��z����>�_a__=@� �  ��gh�hh�4r�h�A,����}u^ɴ괴Ψ�TMTT;��v��/D�
"�""c��d�dd*�������梿s�ss�$Z�Hz�]:@@@H(@ ���V�+����{3���M����K��_a����������z�=�==[3�̗f�����6���nV�E+�++�쳗v�vv��d�2��(�������6w�ltw[���C)������wj�jj�
�P]PPW�LE	EE8������`�0�00��t+����~��?�??Ǫ�UIUU�Yy������e���j��e�eeih��Һ�J^�e/�//���N�'��`����_��8l�pF�.�����dRM)MMv9��r���꼏u�uu60�	�$���Ky@��򲲅�Yc���~6p8�>c�|U�7b�bb:����w�ԁM2)����R1�Ėb��b�:�������f�3��J�5%�%%�� �YyYY��T�*���䧷r�rr�r��9�99�aZL-LL��;�^e^^���x�xx�p��8�88���
������c���WA������MC���N�/a�aaB{E��4B�!�!!%֔�J���<f�xa�R"CCC���v�;��O�+����$ ��QYQQ%/Ǽ�^��"��Om�mme9h
4

y�5����i����[�ߩ���~�~~H�=$�$$�v��;�;;�K=1������>��Ι"U�D������kJN%NNfsQѷ混��`���x�<�<<��|�>��@5�Ԕj������og��޹��&_�LQX�},�,,����k�ӌ�\k���9��Wn�nn���n�7��ܬ�VEVV^�ID
DD������O7!����gT�M*�**
km��ֻ����F�#����SQSSr����W��S'X,'Ӝ�N��+�Gl�ll�b��1�11�蹇t�tt�	���L�C
FFF�E&	������<����(D�P��B[���,N�X�t��:�::��oi�iiA-H	$		�୧p�ppoqTٶⶶ����g����~;�����.���h�W*BBB,-´�Z���UI����uP�](�((��1�\m\\k�?������D�"��O����#R�oy�Ҧ65{����`W�K.����J��7w�k��
)�Xg>��]�ؕ}��A'�G�f|�3�Z��-��0w,a�Q	��m��jp5�c飕d�2�����y����җ+L�	�|�~-����d�� �jHq���A��}�����mQ���DžӃV�l��kdz�b���e�O\�lcc=��
�� n;^iL�A`�rqg���<G�K��
�k�
����5l��B�ɻ�@����l�2u\�E�
��Y=ѫ�0�&:�Q�Q��aп��!#ijV���������(�_���$���|o/LhX�a�=-f��A�vq�� Ҙ*��q���俟3Ը��x4���	���
j-=m�ld�\c��Qkkbal�0e�Nb��l{����W���ٰeP�긾�|�����bI-��|ӌeL�Xa�M�Q�:t���0��A��Jו�=m�Ѥ����j�iC��n4F�g�и`�s-D�3_L
��|
�<qP�A'�� �%�hW��o 	�f���a���^���)"����=�Y�
�.;\���l�� �������ұt9G��wҝ&���sc�;d�>jm
�Zjz��	�'�
��}D��ң�h���i]Wb��ge�q6l�knv��+ӉZz��J�go߹��ホC��Վ�`���~�ѡ���8R��O�g��gW����?K6�H�+
�L
��J6`zA��`�U�g��n1y�iF��a��f���o%6�hR�w�G��"/&U�;��(���Z�+j�\����1�е���,��[��d�&�c윣ju
�m�	�?6�grW�J��z��+�{8���Ғ
�����|!����ӆB����hn�����[&���w�owG��Z�pj��;f\��e�i�b��kaE�lx�
���
�T�N³9a&g��`�MGiI�wn>JjѮ�Z��f�@�;�7S���Ş��ϲG�0򽽊º�0��S���$6к���)W�T�g�#.zf��Ja�h]�+o*7������Z��-��n;�	�&C
�vkk��M�PG��&��"�֊/a�K+d�5ӆ�1
��<��O8p�L���H�E��RA��_��[–�Vu�VR�6j+�n�
�cZg@y�]�}z{�p�f^t�#�W�✎���9�`�<�'����R�����d�X[+��F�6`���}h��-/�30����]l��m2�'p��V��IKq�L6���" �Ε=u�(�:��F����y��>�C��ͼ�-�}�wp�4�mG0K=�V�9��'C#�=.r �*ϝ�x�O�������K}������x��V|i�qލ�u�ݓkl�Ro��b��f�F�^[^Z�}Wf`�Sc0�M�-ZI
D��@�ƥ� �d���'�N��K�����`�%�#����/+���6l�A/��
��]��D@h��f+�*{����Pu�&6�>;��;k��vq�UP2��M�_����}�1�>φ�˃���4�y��:�Z�����iY��m�ێ`7�Od2�z���~\��s�KwV
O��K86�F�+GB�{\=f�X�@�US]CQ�;%)&�!��,G^(BM6�P�2,v�?�kZ;&����H�
��V��M�����#�RV/�K�`m���pl�� +�e=����hﶻ'����؀��o�d�j�#������ͳ�`�~�>�ɐ�������}���:�����{�y��`6�q}���[��Fu�2���t-���0q����].�KY��T@��PE�N�OJ+�G���C!}�{�`COFr�[�v��hJGl�0a$-�e�K�^VZ�p0m�5=�� ^[��Q��7�R3?�>���:�З$:�V ��-T��)y&���;h�+̠�ȥP��Ml��k/�|v��ˡ�v�`��#�������d�s�'�ě�	�����y�g�:����Ջ��b�}���>�������
q��+2�h6�mf���{u�]6��@��glibcICONV_IMPLICONV_VERSIONICONV_MIME_DECODE_STRICTCannot open converterBuffer length exceededMalformed stringUnknown error (%d)iconv supporticonv implementationiconv library versionsl|lsss|aschemeinput-charsetoutput-charsetline-lengthline-break-chars???iconv.input_encodingiconv.output_encodingiconv.internal_encodingss|lsss|sssstext/htmlzltext/Content-Type:%s; charset=%sconvert.iconv.*ISO-8859-1iconvob_iconv_handlericonv_get_encodingiconv_set_encodingiconv_strleniconv_substriconv_strposiconv_strrposiconv_mime_encodeiconv_mime_decodeiconv_mime_decode_headersin_charsetout_charsetencoded_stringfield_namefield_valuepreferencehaystackneedleICONV_MIME_DECODE_CONTINUE_ON_ERRORWrong charset, conversion from `%s' to `%s' is not allowedDetected an incomplete multibyte character in input stringDetected an illegal character in input stringCharset parameter exceeds the maximum allowed length of %d charactersiconv stream filter ("%s"=>"%s"): invalid multibyte sequenceiconv stream filter ("%s"=>"%s"): insufficient buffericonv stream filter ("%s"=>"%s"): unknown erroriconv stream filter ("%s"=>"%s"): unexpected octet valuesOffset not contained in string.����(��H��`��x�������0123456789ABCDEFMHASH_%sMHASH supportMHASH API Versionls|smhash initialization failedlsslmhashmhash_get_block_sizemhash_get_hash_namemhash_keygen_s2kmhash_countthe byte parameter must be greater than 0The specified salt [%d] is more bytes than the required by the algorithm [%d]
pcntl supportError %dlz|lp|aalz|bError assigning signalUnknown error %d has occuredl|llWNOHANGWUNTRACEDSIG_IGNSIG_DFLSIG_ERRSIGHUPSIGINTSIGQUITSIGILLSIGTRAPSIGABRTSIGIOTSIGBUSSIGFPESIGKILLSIGUSR1SIGSEGVSIGUSR2SIGPIPESIGALRMSIGTERMSIGSTKFLTSIGCLDSIGCHLDSIGCONTSIGSTOPSIGTSTPSIGTTINSIGTTOUSIGURGSIGXCPUSIGXFSZSIGVTALRMSIGPROFSIGWINCHSIGPOLLSIGIOSIGPWRSIGSYSSIGBABYPRIO_PGRPPRIO_USERPRIO_PROCESSpcntlpcntl_forkpcntl_waitpidpcntl_waitpcntl_signalpcntl_wifexitedpcntl_wifstoppedpcntl_wifsignaledpcntl_wexitstatuspcntl_wtermsigpcntl_wstopsigpcntl_execpcntl_alarmpcntl_getprioritypcntl_setpriorityError has occured: (errno %d) %sInvalid value for handle argument specified%s is not a callable function name errorError %d: No process was located using the given parametersError %d: Invalid identifier flagError %d: A process was located, but neither its effective nor real user ID matched the effective user ID of the callerError %d: Only a super user may attempt to increase the process priorityline_bufferdonepending_inputpromptterminal_namelibrary_versionreadline_name%s is not callablereadlinereadline_inforeadline_add_historyreadline_clear_historyreadline_list_historyreadline_read_historyreadline_write_historyreadline_completion_functionreadline_callback_read_charreadline_redisplayreadline_on_new_linereadline_callback_handler_installreadline_callback_handler_removeCannot clone object using __clone()Invocation of method __toString() failed%s::__toString() did not return anythingInternal error: Failed to retrieve the reflection objectCannot determine default value for internal functions%s() cannot be called staticallyAccess to non-public constructor of class %sInvocation of %s's constructor failedClass %s does not have a constructor, so you cannot pass any constructor argumentsInvocation of function %s() failedInvoke() expects at least one parameter, none givenTrying to invoke abstract method %s::%s()Trying to invoke %s method %s::%s() from scope %sGiven object is not an instance of the class this method was declared inInvocation of method %s::%s() failedTrying to invoke non static method %s::%s() without an objectClass %s does not have a property named %s%s    Constant [ %s %s ] { %s }
The parameter class is expected to be either a string or an objectProperty %s::$%s does not existCannot set read-only property %s::$%s$Id: php_reflection.c 300129 2010-06-03 00:43:37Z felipe $Could not execute reflection::export()Method %s::%s does not have a prototypeInternal error: Failed to retrieve the argument's reflection objectParameter one must either be a string or a ReflectionClass objectInternal error: Cannot find extension function %s in global function tableCannot access non-public member %s::%sInternal error: Could not find the property %s::%sMethod %s::%s() does not existFully qualified property name %s::%s does not specify a base class of %s
%s  - Static properties [%d] {

%s  - Dynamic properties [%d] {
 extension #%d %s version %s ] {
Expected array($object, $method) or array($classname, $method)The parameter class is expected to be either a string or an array(class, method)The parameter specified by its offset could not be foundThe parameter specified by its name could not be foundParameter uses 'self' as type hint but function is not a class member!Parameter uses 'parent' as type hint but function is not a class member!Parameter uses 'parent' as type hint although class does not have a parent!O|b__tostringabstractstaticParameter is not optionalInternal error    %sEntry [ %s <%sPERDIR%sSYSTEM> ]
    %s  Current = '%s'
    %s  Default = '%s'
    %s}
|hNon-object passed to Invoke()o!aExtension %s does not exist%sProperty [ <dynamic> public $%s<implicit> <default> public private protected s|zClass %s does not existReflectionzz|bCould not create reflectorParameter #%d [ <optional> <required> or NULL array &$param%d =  ]Interface %s does not existInterface %s is a ClassRequiredConflicts%s%s%s%s%sReflectionExceptionReflectorReflectionFunctionAbstractReflectionFunctionIS_DEPRECATEDReflectionParameterReflectionMethodIS_STATICIS_PUBLICIS_PROTECTEDIS_PRIVATEIS_ABSTRACTIS_FINALReflectionClassIS_IMPLICIT_ABSTRACTIS_EXPLICIT_ABSTRACTReflectionObjectReflectionPropertyReflectionExtensionFunction %s() does not existMethod %s does not existInvalid method name %sProperty %s does not exist%sMethod [ %sFunction [ <user<internal%s%s
, deprecated, inherits %s, overwrites %s, prototype %s, ctor, dtorabstract final <visibility error> method function %s ] {
%s  @@ %s %d - %d
%s  %s- Parameters [%d] {
%s    %sObject of class [ %s%s [ <iterateable> class  extends %s implements %s%s  @@ %s %d-%d
%s  - Constants [%d] {
%s  }

%s  - Static methods [%d] {
%s  - Properties [%d] {

%s  - Methods [%d] {
%s  - Methods [0] {
<no_version>%sExtension [ <persistent><temporary>
  - Dependencies {
%s    Dependency [ %s () ]

  - INI {

  - Constants [%d] {

  - Functions {

  - Classes [%d] {zZselfparent0.1__clone__toStringgetVersiongetFunctionsgetConstantsgetINIEntriesgetClassesgetClassNamesgetDependenciesisPassedByReferencegetDeclaringFunctiongetDeclaringClassgetClassisArrayallowsNullgetPositionisOptionalisDefaultValueAvailablegetDefaultValuegetValuesetValueisPublicisPrivateisProtectedisStaticisDefaultgetModifiersgetDocCommentisInternalisUserDefinedisInstantiablegetFileNamegetStartLinegetEndLinegetConstructorhasMethodgetMethodgetMethodshasPropertygetPropertygetPropertieshasConstantgetConstantgetInterfacesgetInterfaceNamesisInterfaceisAbstractisFinalisInstancenewInstancenewInstanceArgsgetParentClassisSubclassOfgetStaticPropertiesgetStaticPropertyValuesetStaticPropertyValuegetDefaultPropertiesisIterateableimplementsInterfacegetExtensiongetExtensionNameinterfaceisConstructorisDestructorinvokeinvokeArgsgetPrototypeclass_or_methodisDisabledgetStaticVariablesreturnsReferencegetParametersgetNumberOfParametersgetNumberOfRequiredParametersisDeprecatedgetModifierNamesUnknown session.serialize_handler. Failed to encode session objectCannot encode non-existent sessionCannot send session cookie - headers already sent by (output started at %s:%d)Cannot send session cookie - headers already sentExpires: Thu, 19 Nov 1981 08:52:00 GMTCache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0Registered serializer handlersThe session bug compatibility code will not try to locate the global variable $%lu due to its numeric natureYour script possibly relies on a session side-effect which existed until PHP 4.2.3. Please be advised that the session extension does not consider global variables as a source of data, unless register_globals is enabled. You can disable this functionality and this warning by setting session.bug_compat_42 or session.bug_compat_warn to off, respectivelyFailed to write session data (%s). Please verify that the current setting of session.save_path is correct (%s)Cannot regenerate session id - headers already sentSession object destruction failedTrying to destroy uninitialized sessionUnknown session.serialize_handler. Failed to decode session objectFailed to decode session object. Session has been destroyedA session is active. You cannot change the session module's ini settings at this timeArgument %d is not a valid callback%s, %02d %s %d %02d:%02d:%02d GMTCache-Control: public, max-age=%ldCache-Control: private, max-age=%ld, pre-check=%ldThe ini setting hash_bits_per_character is out of range (should be 4, 5, or 6) - using 4 for nowCannot find named PHP session module (%s)Cannot find serialization handler '%s'A session had already been started - ignoring session_start()Cannot find save handler '%s' - session startup failedCannot find serialization handler '%s' - session startup failedNo storage module chosen - failed to initialize sessionFailed to initialize storage module: %s (path: %s)Cannot send session cache limiter - headers already sent (output started at %s:%d)Cannot send session cache limiter - headers already sentsession.hash_bits_per_characterD, d-M-Y H:i:s TPragma: no-cacheSession SupportRegistered save handlersnonesession.cache_expiresession.cookie_lifetimesession.cookie_pathsession.cookie_domainsession.cookie_securesession.cookie_httponlysession.cache_limitersession.save_pathsession.namesession.save_handlerHTTP_SESSION_VARSSkipping numeric key %ldREMOTE_ADDR%.15s%ld%ld%0.8FInvalid session hash functionCannot find save handler '%s'session.serialize_handlerREQUEST_URI/?\HTTP_REFERER
	 <>'"\sessionsession_namesession_module_namesession_save_pathsession_idsession_regenerate_idsession_decodesession_registersession_unregistersession_is_registeredsession_encodesession_startsession_destroysession_unsetsession_set_save_handlersession_cache_limitersession_cache_expiresession_set_cookie_paramssession_get_cookie_paramssession_write_closesession_commitprivate_no_expirenocachephp_binarysession.bug_compat_42session.bug_compat_warnPHPSESSIDsession.auto_startsession.gc_probabilitysession.gc_divisorsession.gc_maxlifetime1440session.use_cookiessession.use_only_cookiessession.referer_checksession.entropy_filesession.entropy_length180session.use_trans_sidsession.hash_function0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ,-/tmpsess_read failed: %s (%d)write failed: %s (%d)The first parameter in session.save_path is invalidThe second parameter in session.save_path is invalidps_files_cleanup_dir: opendir(%s) failed: %s (%d)The session id is too long or contains illegal characters, valid characters are a-z, A-Z, 0-9 and '-,'fcntl(%d, F_SETFD, FD_CLOEXEC) failed: %s (%d)open(%s, O_RDWR) failed: %s (%d)read returned less bytes than requestedwrite wrote less bytes than requestedshmopshmop supportlsll%s is not a valid flaginvalid access modenot a shmop resourcestart is out of rangecount is out of rangeoffset out of rangeshmop_openshmop_readshmop_closeshmop_sizeshmop_writeshmop_deleteShared memory segment size must be greater then zero.unable to attach or create shared memory segmentunable to get shared memory segment informationunable to attach to shared memory segmentno shared memory segment with an id of [%lu]can't mark segment for deletion (are you the owner?)trying to write to a read only segmentAn iterator cannot be used with foreach by referenceCannot clone object of class %s due to 'zend.ze1_compatibility_mode'String could not be parsed as XMLImported Node must have associated DocumentCannot add element to attributesCannot add child. Parent is not a permanent member of the XML treeUnable to locate parent ElementAttribute requires prefix for namespaceCannot create unnamed attributeCannot add element %s number %ld when only 0 such elements existCannot add element %s number %ld when only %ld such elements existCannot write or create unnamed %sIt is not yet possible to assign complex types to %sCannot create duplicate attributeIt is not possible to assign complex types to nodesCannot assign to an array of nodes (duplicate subnodes or attr detected)Cannot change attribute number %ld when only %d attributes exists|C!lsbs|lbsbo|C!Invalid Nodetype to importSimpleXMLElementsplSimplexml support$Revision: 299016 $Schema supportNode no longer exists|s!bs|s!s!Element name is requiredss|s!Attribute name is requiredAttribute already exists@attributesUnable to cast node to stringasXMLsaveXMLxpathregisterXPathNamespacegetNamespacesgetDocNamespacesaddChildaddAttributeSimpleXMLsimplexml_load_filesimplexml_load_stringsimplexml_import_dom and could not be loadedClass %s does not exist%sobject or string expectedspl_autoloada callablean existing|zbspl_autoload_callFunction '%s' not %sIllegal value passed__autoload%p:%dSPL support.inc,.phpClass %s could not be loadedSPLsimplexmlspl_classesspl_autoload_extensionsspl_autoload_registerspl_autoload_unregisterspl_autoload_functionsclass_parentsclass_implementsspl_object_hashiterator_to_arrayiterator_countiterator_applyTraversableuse_keysFunction spl_autoload_call() cannot be registeredPassed array specifies a non static method but no objectPassed array does not specify %s %smethodendIterationcallHasChildrennextelementcallGetChildrenbeginchildrenendchildrenbeginIterationo|llgetiteratorbeginiterationenditerationcallhaschildrencallgetchildrenIllegal mode %ldreplacementUndefined index:  %sO|llParameter offset must be >= 0O|lO|sOs|lllOf|a!RecursiveIteratorRecursiveIteratorIteratorLEAVES_ONLYSELF_FIRSTCHILD_FIRSTCATCH_GET_CHILDOuterIteratorRecursiveFilterIteratorParentIteratorCountableSeekableIteratorLimitIteratorCALL_TOSTRINGTOSTRING_USE_KEYTOSTRING_USE_CURRENTTOSTRING_USE_INNERFULL_CACHERecursiveCachingIteratorNoRewindIteratorAppendIteratorInfiniteIteratorGET_MATCHALL_MATCHESSPLITREPLACERecursiveRegexIteratorEmptyIteratorgetInnerIteratorcurrentgetIteratorIndexgetArrayIteratorhasChildrengetChildrenhasNextgetFlagssetFlagsoffsetGetoffsetSetoffsetUnsetoffsetExistsgetCachenewvalpreg_flagsgetModesetModegetPregFlagssetPregFlagsgetDepthgetSubIteratorbeginChildrenendChildrennextElementsetMaxDepthgetMaxDepthmax_depthObjects returned by RecursiveIterator::getChildren() must implement RecursiveIteratorAccessing the key of an EmptyIteratorAccessing the value of an EmptyIteratorAn instance of RecursiveIterator or IteratorAggregate creating it is requiredParameter max_depth must be >= -1The %s instance wasn't initialized properlyFlags must contain only one of CALL_TOSTRING, TOSTRING_USE_KEY, TOSTRING_USE_CURRENT, TOSTRING_USE_INNERUnsetting flag CALL_TO_STRING is not possibleUnsetting flag TOSTRING_USE_INNER is not possible%s does not fetch string value (see CachingIterator::__construct)%s does not use a full cache (see CachingIterator::__construct)%v does not use a full cache (see CachingIterator::__construct)Classes derived from %s must call %s::__construct()%s::getIterator() must be called exactly once per instanceParameter count must either be -1 or a value greater than or equal 0Flags must contain only one of CALL_TOSTRING, TOSTRING_USE_KEY, TOSTRING_USE_CURRENT, TOSTRING_USE_CURRENTClass to downcast to not found or not base class or does not implement Traversable%s::getIterator() must return an object that implements TraversableThe inner constructor wasn't initialized with an iterator instanceCannot seek to %ld which is below the offset %ldCannot seek to %ld which is behind offset %ld plus count %ld��f��0����4��d
�J�J���
�d
�L
�����
�L
�"���l!�l!�|�"�"�� �����Z|lCoffsetgetoffsetsetoffsetexistsoffsetunsetuasortuksortnatsortnatcasesortUndefined offset:  %ldIllegal offset typeArrayObjectRecursiveArrayIteratorSTD_PROP_LISTARRAY_AS_PROPSgetArrayCopygetIteratorexchangeArraysetIteratorClassgetIteratorClasscmp_functioniteratorClassArrayIterator::rewind(): Array was modified outside object and is no longer an arrayPassed variable is not an array or object, using empty array insteadOverloaded object of type %s is not compatible with %sInternal compiler error, Class is not child of ArrayObject or ArrayIteratorFunction expects exactly one argumentModification of ArrayObject during sorting is prohibitedAn offset must not begin with \0 or be emptySeek position %ld is out of rangeArrayIterator::current(): Array was modified outside object and is no longer an arrayArrayIterator::next(): Array was modified outside object and internal position is no longer validArrayIterator::current(): Array was modified outside object and internal position is no longer validArrayIterator::valid(): Array was modified outside object and is no longer an arrayArrayIterator::valid(): Array was modified outside object and internal position is no longer validCannot append properties to objects, use %s::offsetSet() instead��h��h��h��$��$����h��|Cenclosure must be a characterdelimiter must be a characterCannot read from file %sflockfgetssfscanffstatCan't truncate file %sCannot open file '%s'getcurrentlines|sbrphp://memoryphp://temp/maxmemory:%ldphp://tempgetCurrentLineCannot rewind file %sObject not initializedCould not open fileSplFileInfoRecursiveDirectoryIteratorCURRENT_MODE_MASKCURRENT_AS_PATHNAMECURRENT_AS_FILEINFOCURRENT_AS_SELFKEY_MODE_MASKKEY_AS_PATHNAMEFOLLOW_SYMLINKSKEY_AS_FILENAMENEW_CURRENT_AND_KEYSplFileObjectDROP_NEW_LINEREAD_AHEADSKIP_EMPTYREAD_CSVSplTempFileObjectmax_memoryfgetsfgetcsvsetCsvControlgetCsvControlfflushftellfseekfgetcfpassthrufwriteftruncatesetMaxLineLengetMaxLineLenline_posallowable_tagswhenceoperationwouldblockenclosureopen_modeuse_include_pathgetSubPathgetSubPathnameallow_linksgetFilenamegetBasenameisDotgetPathgetPathnamegetPermsgetInodegetSizegetOwnergetGroupgetATimegetMTimegetCTimegetTypeisWritableisReadableisExecutableisFileisDirisLinkgetLinkTargetgetRealPathgetFileInfogetPathInfoopenFilesetFileClasssetInfoClasssuffixMaximum line length must be greater than or equal zeroDirectory name must not be empty.An object of class %s cannot be clonedCan't seek file %s to negative line %ldUnable to read link %s, error: %ssimplexmlelementSimpleXMLIteratorLogicExceptionBadFunctionCallExceptionBadMethodCallExceptionDomainExceptionInvalidArgumentExceptionLengthExceptionOutOfRangeExceptionRuntimeExceptionOutOfBoundsExceptionOverflowExceptionUnderflowExceptionUnexpectedValueExceptionSplObserverSplSubjectSplObjectStorageattachdetachcontainsunserializeserializednotifyEmpty serialized string cannot be emptyError at offset %ld of %d bytes[:<:]][:>:]]NULSOHSTXETXEOTENQBELalertBSbackspacenewlineVTvertical-tabform-feedCRcarriage-returnSOSIDC1DC2DC3DC4NAKSYNETBCANSUBIS4IS3IS2IS1exclamation-markquotation-marknumber-signdollar-signpercent-signampersandapostropheleft-parenthesisright-parenthesisasteriskplus-signhyphenhyphen-minusperiodfull-stoptwothreefourfivesevenninesemicolonless-than-signequals-signgreater-than-signquestion-markcommercial-atleft-square-bracketbackslashreverse-solidusright-square-bracketcircumflexcircumflex-accentunderscorelow-linegrave-accentleft-braceleft-curly-bracketvertical-lineright-braceright-curly-bracketDELblank 	0123456789abcdefghijklmnopqrstuvwxyz	

 ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789ABCDEFabcdeft����,�,�,�,�,�A�l�D�,�,�,�,�,�,�|�T� ����4������������������������������������������������������T�$�����������������������������������ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz	

ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789!"#$%&'()*+,-./:;<=>?@[\]^_`{|}~ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789!"#$%&'()*+,-./:;<=>?@[\]^_`{|}~ !"#$%&'()*+,-./:;<=>?@[\]^_`{|}~REG_0x%xREG_OKAYno errors detectedREG_NOMATCHregexec() failed to matchREG_BADPATinvalid regular expressionREG_ECOLLATEinvalid collating elementREG_ECTYPEinvalid character classREG_EESCAPEtrailing backslash (\)REG_ESUBREGinvalid backreference numberREG_EBRACKbrackets ([ ]) not balancedREG_EPARENparentheses not balancedREG_EBRACEbraces not balancedREG_BADBRinvalid repetition count(s)REG_ERANGEinvalid character rangeREG_ESPACEout of memoryREG_BADRPTREG_EMPTYempty (sub)expressionREG_ASSERTREG_INVARGrepetition-operator operand invalid"can't happen" -- you found a buginvalid argument to regex routine*** unknown regexp error code ***recursion detectedUnable to call %s()Not a valid callback %sArgument #%d is not an arrayEXTR_OVERWRITEEXTR_SKIPEXTR_PREFIX_SAMEEXTR_PREFIX_ALLEXTR_PREFIX_INVALIDEXTR_PREFIX_IF_EXISTSEXTR_IF_EXISTSEXTR_REFSSORT_ASCSORT_REGULARSORT_NUMERICSORT_STRINGSORT_LOCALE_STRINGCASE_LOWERCASE_UPPERCOUNT_NORMALCOUNT_RECURSIVEInvalid comparison functionzz/|z/Unknown extract typeGLOBALSWrong data type for start keyz/z/|z/al|ZbArray sizes are inconsistental|bThe argument should be an arrayWrong datatype for second argumentdata_compare_type is %d. key_compare_type is %d. This should never happen. Please report as a bugArray was modified by the user comparison functionPassed variable is not an array or objectAt least one value should be passedArray must contain at least one elementWrong syntax for function namePrefix expected to be specifiedFirst argument should be an arrayNumber of elements must be positivestep exceeds the specified rangeCannot add element to the array as the next element is already occupiedThe first argument should be an arrayCan only count STRING and INTEGER values!You may only pad up to 1048576 elements at a timeCan only flip STRING and INTEGER values!Argument #%d is expected to be an array or sorting flag that has not already been specifiedArgument #%d is an unknown sort flagArgument #%d is expected to be an array or a sort flagFirst argument has to be an arraySecond argument has to be between 1 and the number of elements in the arrayThe second argument, '%s', should be a valid callbackAn error occurred while invoking the reduction callbackAn error occurred while invoking the filter callbackThe first argument, '%s', should be either NULL or a valid callbackArgument #%d should be an arrayAn error occurred while invoking the map callbackThe second argument should be either an array or an objectThe first argument should be either a string or an integerSize parameter expected to be greater than 0Both parameters should have an equal number of elementsBoth parameters should have at least 1 element<��~�� ��Q����ļ�ļ�ڿ�����:����D����7��ܿ�����������9223372036854775808V瞯�<>���String too long, maximum is %d��������������������������������������������������������������������������������������>������?456789:;<=��������������	

������������ !"#$%&'()*+,-./0123��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/Couldn't find constant %sInvalid in_addr valueAn unknown error occuredWP_UPDATE_PHP_URLInvalid parameter syntaxnanosecondsUnable to call %s(%s,%s)Unable to call %s(%s)Unable to find extension '%s'global_valuelocal_valueaccessignore_user_abortUnable to call tick functionUnable to move '%s' to '%s'Unrecognized address %s%s%ldHTTP_POST_VARSHTTP_GET_VARSHTTP_COOKIE_VARSHTTP_ENV_VARSHTTP_SERVER_VARSHTTP_RAW_POST_DATAHTTP_POST_FILESerror_logjava.class.pathjava.homejava.library.pathvpopmail.directorymax_execution_timememory_limitchild_terminateCONNECTION_ABORTEDCONNECTION_NORMALCONNECTION_TIMEOUTINI_USERINI_PERDIRINI_SYSTEMINI_ALLPHP_URL_SCHEMEPHP_URL_HOSTPHP_URL_PORTPHP_URL_USERPHP_URL_PASSPHP_URL_PATHPHP_URL_QUERYPHP_URL_FRAGMENTM_EM_LOG2EM_LOG10EM_LN2M_LN10M_PIM_PI_2M_PI_4M_1_PIM_2_PIM_SQRTPIM_2_SQRTPIM_LNPIM_EULERM_SQRT2M_SQRT1_2M_SQRT3NANPHP error_log messageTCP/IP option not available!Argument 1 invalidInvalid argumentshighlight.commenthighlight.defaulthighlight.htmlhighlight.keywordhighlight.stringhighlighted codesafe_mode_protected_env_varsLD_LIBRARY_PATHsafe_mode_allowed_env_varsPHP_bin2hexusleeptime_nanosleeptime_sleep_untilstrptimewordwraphtmlspecialcharshtmlentitieshtml_entity_decodehtmlspecialchars_decodeget_html_translation_tablesha1_filemd5_fileiptcparseiptcembedgetimagesizeimage_type_to_mime_typeimage_type_to_extensionphpinfophpversionphpcreditsphp_logo_guidphp_real_logo_guidzend_logo_guidphp_sapi_namephp_unamephp_ini_scanned_filesphp_ini_loaded_filestrnatcmpstrnatcasecmpsubstr_countstrspnstrcspnstrtokstrtoupperstrtolowerstriposstrriposstrrevhebrevhebrevcnl2brbasenamedirnamepathinfostripslashesstripcslashesstrstrstristrstrrchrstr_shufflestr_word_countstr_splitstrpbrksubstr_comparestrcollmoney_formatsubstr_replacequotemetaucfirstucwordsstrtraddslashesaddcslashesrtrimstr_ireplacestr_repeatcount_charschunk_splitltrimsimilar_textexplodeimplodesetlocalelocaleconvnl_langinfosoundexlevenshteinparse_strstr_padchopstrchrvprintfvsprintfvfprintfsscanfparse_urlrawurlencoderawurldecodehttp_build_queryreadlinklinkinfosymlinkunlinksystemescapeshellcmdescapeshellargshell_execproc_openproc_closeproc_terminateproc_get_statusproc_nicemt_randmt_srandmt_getrandmaxgetservbynamegetservbyportgetprotobynamegetprotobynumbergetmyuidgetmygidgetmypidgetmyinodegetlastmodbase64_decodebase64_encodeconvert_uuencodeconvert_uudecodeasinacosatanatan2asinhacoshatanhexpm1log1ppiis_finiteis_nanis_infinitelog10hypotdeg2radrad2degbindechexdecoctdecdecbindecoctdechexbase_convertnumber_formatfmodinet_ntopinet_ptonip2longlong2ipgetenvputenvgetoptsys_getloadavgmicrotimegettimeofdaygetrusageuniqidquoted_printable_decodeconvert_cyr_stringget_current_userset_time_limitget_cfg_varset_magic_quotes_runtimeget_magic_quotes_gpcget_magic_quotes_runtimeimport_request_variableserror_get_lastcall_user_funccall_user_func_arraycall_user_methodcall_user_method_arrayvar_dumpvar_exportdebug_zval_dumpprint_rmemory_get_usagememory_get_peak_usageregister_shutdown_functionunregister_tick_functionhighlight_fileshow_sourcehighlight_stringphp_strip_whitespaceini_getini_get_allini_setini_alterini_restoreget_include_pathset_include_pathrestore_include_pathsetcookiesetrawcookieheaders_sentheaders_listconnection_abortedconnection_statusparse_ini_fileis_uploaded_filemove_uploaded_filegethostbyaddrgethostbynamegethostbynameldns_check_recordcheckdnsrrdns_get_mxgetmxrrdns_get_recordfloatvaldoublevalgettypesettypeis_nullis_resourceis_boolis_longis_floatis_intis_integeris_doubleis_realis_numericis_stringis_arrayis_objectis_scalaris_callableeregereg_replaceeregieregi_replacesplitijoinsql_regcasepclosepopenreadfileumaskfclosefeoffreadfputscopytempnamtmpfilefile_get_contentsfile_put_contentsstream_selectstream_context_createstream_context_set_paramsstream_context_set_optionstream_context_get_optionsstream_context_get_defaultstream_filter_prependstream_filter_appendstream_filter_removestream_socket_clientstream_socket_serverstream_socket_acceptstream_socket_get_namestream_socket_recvfromstream_socket_sendtostream_socket_enable_cryptostream_socket_shutdownstream_socket_pairstream_copy_to_streamstream_get_contentsfputcsvget_meta_tagsstream_set_write_bufferset_file_bufferset_socket_blockingstream_set_blockingsocket_set_blockingstream_get_meta_datastream_get_linestream_wrapper_registerstream_register_wrapperstream_wrapper_unregisterstream_wrapper_restorestream_get_wrappersstream_get_transportsstream_is_localget_headersstream_set_timeoutsocket_set_timeoutsocket_get_statusrealpathfnmatchpfsockopenunpackget_browserchrootgetcwdscandirglobfileatimefilectimefilegroupfileinodefilemtimefileownerfilepermsfiletypefile_existsis_writableis_writeableis_readableis_executableis_fileis_diris_linklstatlchownlchgrptouchclearstatcachedisk_total_spacedisk_free_spacediskfreespaceezmlm_hashopenlogsyslogcloselogdefine_syslog_variableslcg_valuemetaphoneob_startob_flushob_cleanob_end_flushob_end_cleanob_get_flushob_get_cleanob_get_lengthob_get_levelob_get_statusob_get_contentsob_implicit_flushob_list_handlerskrsortarsortusortarray_walkarray_walk_recursiveprevresetin_arrayarray_searchextractcompactarray_fillarray_fill_keysarray_multisortarray_pusharray_poparray_shiftarray_unshiftarray_splicearray_slicearray_mergearray_merge_recursivearray_keysarray_valuesarray_count_valuesarray_reversearray_reducearray_padarray_fliparray_change_key_casearray_randarray_uniquearray_intersectarray_intersect_keyarray_intersect_ukeyarray_uintersectarray_intersect_assocarray_uintersect_assocarray_intersect_uassocarray_uintersect_uassocarray_diffarray_diff_keyarray_diff_ukeyarray_udiffarray_diff_assocarray_udiff_assocarray_diff_uassocarray_udiff_uassocarray_sumarray_productarray_filterarray_maparray_chunkarray_combinearray_key_existssizeofassertassert_optionsversion_compareftokstr_rot13stream_get_filtersstream_filter_registerstream_bucket_make_writeablestream_bucket_prependstream_bucket_appendstream_bucket_newoutput_add_rewrite_varoutput_reset_rewrite_varssys_get_temp_dirver1ver2operreal_usagevariable_representationfilternameclassnamecomponentprefixmore_entropysyntax_onlycallable_nameidentfacilitymain_strcase_sensitivitychar_listsplit_lengthcharlistpad_lengthpad_stringpad_types1s2multmax_chars_per_linereplace_countstr1str2percentcodepointchunklenendingtokengluepiecesbreakcharacter_maskitemhowenablecryptokindsessionstreammicrosecondsmaxlenstream_filterread_writefilterparamsstream_or_contextwrappernameoptionnameread_streamswrite_streamsexcept_streamsamountremote_addrtarget_addrwant_peerserverstreampeernamelocaladdresserrcodeerrstringremoteaddressprotocolregistersseeddescriptorspecpipesother_optionsprocessarg1whoget_as_floatphonesnum_decimal_placesdec_seperatorthousands_seperatorfrombasetobaseoctal_numberhexadecimal_numberbinary_numbernum1num2exponentadditional_headersadditional_parameterstargetcost_inscost_repcost_deliptcdatajpeg_file_namespoolwhatinclude_dotformdataarg_separatorquote_styledouble_encodeexpireshttp_response_codepathnameprojhostnamefieldssource_filedestination_fileold_namenew_namereturn_valuemxhostsweightauthnsaddtlip_addressextension_filenamesorting_orderdir_handlesaltbrowser_namereturn_arraystrictassertionprocess_sectionsnew_pathfunction_nameprotoservicenew_include_pathvarnamenewvaluemethod_nameparmetermessage_typedestinationextra_headersoption_namemicro_secondsoptsproper_addressin_addrconst_namepreserve_keysinitialnum_reqarr1SORT_ASC_or_SORT_DESCarr2callback_data_comp_funccallback_key_comp_funccallback_data_compare_funccallback_key_compare_funcpad_sizepad_valuesearch_valuehighstepstart_keyvar_namesextract_typefuncnameuserdataarg2sort_flagsfull_statususer_functionchunk_sizehttps://www.cloudlinux.com/hardenedphp-wpSafe Mode warning: Cannot override protected environment variable '%s'Safe Mode warning: Cannot set environment variable '%s' - it's not in the allowed listNumber of microseconds must be greater than or equal to 0The seconds value must be greater than 0The nanoseconds value must be greater than 0nanoseconds was not in the range 0 to 999 999 999 or seconds was negativeSleep until to time is less than current timeFirst argument is expected to be a valid callback, '%s' was givenSecond argument is not an object or class name(Registered shutdown functions) Unable to call %s() - function does not existInvalid shutdown callback '%s' passedNo prefix specified - possible security hazardUnable to call %s::%s() - function does not existNumber of seconds must be greater than or equal to 0Unable to delete tick function executed at the momentNumeric key detected - possible security hazardAttempted GLOBALS variable overwriteAttempted super-global (%s) variable overwriteAttempted long input array (%s) overwriteNo support for long options in this buildSORT_REGULAR_or_SORT_NUMERIC_or_SORT_STRING9223372036854775808e��A��iW�
�@��+eG�?�&{��?U���k@-DT�!	@-DT�!�?-DT�!�?���m0_�?���m0_�?kﴑ�[�?m�BP�
�?���H�P�?�o��x�?�;f���?�;f���?�LX�z��?browser_name_regexbrowser_name_patternbrowscapCannot open '%s' for readingHTTP_USER_AGENTbrowscap ini directive not setHTTP_USER_AGENT variable is not set, cannot determine user agent nameDefault Browser Capability Settings�0w,a�Q	��m��jp5�c飕d�2�����y����җ+L�	�|�~-����d�� �jHq���A��}�����mQ���DžӃV�l��kdz�b���e�O\�lcc=��
�� n;^iL�A`�rqg���<G�K��
�k�
����5l��B�ɻ�@����l�2u\�E�
��Y=ѫ�0�&:�Q�Q��aп��!#ijV���������(�_���$���|o/LhX�a�=-f��A�vq�� Ҙ*��q���俟3Ը��x4���	���
j-=m�ld�\c��Qkkbal�0e�Nb��l{����W���ٰeP�긾�|�����bI-��|ӌeL�Xa�M�Q�:t���0��A��Jו�=m�Ѥ����j�iC��n4F�g�и`�s-D�3_L
��|
�<qP�A'�� �%�hW��o 	�f���a���^���)"����=�Y�
�.;\���l�� �������ұt9G��wҝ&���sc�;d�>jm
�Zjz��	�'�
��}D��ң�h���i]Wb��ge�q6l�knv��+ӉZz��J�go߹��ホC��Վ�`���~�ѡ���8R��O�g��gW����?K6�H�+
�L
��J6`zA��`�U�g��n1y�iF��a��f���o%6�hR�w�G��"/&U�;��(���Z�+j�\����1�е���,��[��d�&�c윣ju
�m�	�?6�grW�J��z��+�{8���Ғ
�����|!����ӆB����hn�����[&���w�owG��Z�pj��;f\��e�i�b��kaE�lx�
���
�T�N³9a&g��`�MGiI�wn>JjѮ�Z��f�@�;�7S���Ş��ϲG�0򽽊º�0��S���$6к���)W�T�g�#.zf��Ja�h]�+o*7������Z��-CRYPT_SALT_LENGTHCRYPT_STD_DESCRYPT_EXT_DESCRYPT_MD5CRYPT_BLOWFISH./0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz$$$$$$$$$$$$$$$$Unknown source charset: %cUnknown destination charset: %ch��x��x��h��x��x��x��x��X��x��`��x����x��x��x��x��x��x��x��x��x��H����D��D����D��D��D��D����D��4��D��ܓ�D��D��D��D��D��D��D��D��D��̓�	

 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~�������������������������񠡢�������������������������������������������������������������������������������������������	

 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~�������������������������������ߠ��ޤ��������������ݴ���������������������������������������������������������������������	

 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~                                 �              �������������������������������������������������������� �              	

 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~                                   �               �            ��������������������������������ΰ�ƴ�ijŸ����������ö��˷�����	

 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~�����������������������������������������###||||++||++++++--|-+||++--|-+----++++++++##||#��������������ѳ������� �� ����	

 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~                                ͺ���� ����Ⱦ ���̵�� ������ � 椥�娩����������㦢������Ꞁ������������������������������	

 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~................................���.��..����..��..���..�����...���������������������������������������������������������	

 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~                                   �� ��     ��    �� ��     �����������������������������������������������������������%s, %02d %s %04d %02d:%02d:%02d GMT%s, %02d-%s-%02d %02d:%02d:%02d GMTunparsedDirectoryDIRECTORY_SEPARATORPATH_SEPARATORGLOB_BRACEGLOB_MARKGLOB_NOSORTGLOB_NOCHECKGLOB_NOESCAPEGLOB_ERRGLOB_ONLYDIRGLOB_AVAILABLE_FLAGS%s (errno %d)s|lr(errno %d): %sUnable to find my handle property%d is not a valid Directory resourcePattern exceeds the maximum allowed length of %d charactersAt least one of the passed flags is invalid or not supported on this platformDirectory name cannot be emptyextension_dir_get_modulecgicliDynamic Library SupportTemporary module name should contain only filenameUnable to load dynamic library '%s' - %sInvalid library (maybe not a PHP library) '%s' %s: Unable to initialize module
Module compiled with module API=%d, debug=%d, thread-safety=%d
PHP    compiled with module API=%d, debug=%d, thread-safety=%d
These options need to match
Unable to initialize module '%s'Dynamically loaded extensions aren't enabledDynamically loaded extensions aren't allowed when running in Safe ModeFile name exceeds the maximum allowed length of %d charactersdl() is deprecated - use extension=%s in your php.ini%d.%d.%d.%dpricputxtmnameserialrefreshretryminimum-ttlipv6masklenprefservicesHost cannot be emptyHost and type cannot be emptyType '%s' not supportedDNS_ADNS_NSDNS_CNAMEDNS_SOADNS_PTRDNS_HINFODNS_MXDNS_TXTDNS_SRVDNS_NAPTRDNS_AAAADNS_A6DNS_ANYDNS_ALLType '%d' not supportedres_nmkquery() failedres_nsend() failed�����Ȭ�������������������������h������������������������������������ث���(������Х�ܿ�̿�����|��\����l��<��������T��Address is not a valid IPv4 or IPv6 addressHost name is too long, the limit is %d charactersUnable to parse DNS data receivedZ��������������������������������Z�����������������������������������������������������������������������D��Z��Z�����Z��D��Z��Z��Z��������������������������������������������������Z��Z�����Z��Z�����������������������������������������������������������������������������������Z��Z��Z��Z�����Z��������������������������������������������������������������������������������Z��Z��Z��Z��Unable to fork [%s]s|z/s|z/z/Unable to execute '%s'No '..' components allowed in pathCannot execute a blank commandInput string contains NULL bytesCannot execute using backquotes in Safe ModeNULL byte detected. Possible attackOnly a super user may attempt to increase the priority of a processstream-contextSEEK_SETSEEK_CURSEEK_ENDLOCK_SHLOCK_EXLOCK_UNLOCK_NBSTREAM_NOTIFY_CONNECTSTREAM_NOTIFY_AUTH_REQUIREDSTREAM_NOTIFY_AUTH_RESULTSTREAM_NOTIFY_MIME_TYPE_ISSTREAM_NOTIFY_FILE_SIZE_ISSTREAM_NOTIFY_REDIRECTEDSTREAM_NOTIFY_PROGRESSSTREAM_NOTIFY_FAILURESTREAM_NOTIFY_COMPLETEDSTREAM_NOTIFY_RESOLVESTREAM_NOTIFY_SEVERITY_INFOSTREAM_NOTIFY_SEVERITY_WARNSTREAM_NOTIFY_SEVERITY_ERRSTREAM_FILTER_READSTREAM_FILTER_WRITESTREAM_FILTER_ALLSTREAM_CLIENT_PERSISTENTSTREAM_CLIENT_ASYNC_CONNECTSTREAM_CLIENT_CONNECTSTREAM_SHUT_RDSTREAM_SHUT_WRSTREAM_SHUT_RDWRSTREAM_PF_INETSTREAM_PF_INET6STREAM_PF_UNIXSTREAM_IPPROTO_IPSTREAM_IPPROTO_TCPSTREAM_IPPROTO_UDPSTREAM_IPPROTO_ICMPSTREAM_IPPROTO_RAWSTREAM_SOCK_STREAMSTREAM_SOCK_DGRAMSTREAM_SOCK_RAWSTREAM_SOCK_SEQPACKETSTREAM_SOCK_RDMSTREAM_PEEKSTREAM_OOBSTREAM_SERVER_BINDSTREAM_SERVER_LISTENFILE_USE_INCLUDE_PATHFILE_IGNORE_NEW_LINESFILE_SKIP_EMPTY_LINESFILE_APPENDFILE_NO_DEFAULT_CONTEXTFILE_TEXTFILE_BINARYFNM_NOESCAPEFNM_PATHNAMEFNM_PERIODFNM_CASEFOLDIllegal operation arguments|br!llsz/|lr!s|lr!'%ld' flag is not supportedss|brs|lbrs|br!ss|rWrapper%s does not allow unlinkingCan't truncate this stream!rdevblksizera|ssr|Zss-_.:.\+*?[^]$() ss|ldefault_socket_timeoutauto_detect_line_endingsSTREAM_CRYPTO_METHOD_SSLv2_CLIENTSTREAM_CRYPTO_METHOD_SSLv3_CLIENTSTREAM_CRYPTO_METHOD_SSLv23_CLIENTSTREAM_CRYPTO_METHOD_TLS_CLIENTSTREAM_CRYPTO_METHOD_SSLv2_SERVERSTREAM_CRYPTO_METHOD_SSLv3_SERVERSTREAM_CRYPTO_METHOD_SSLv23_SERVERSTREAM_CRYPTO_METHOD_TLS_SERVERlength must be greater than or equal to zeroFailed to seek to position %ld in the streamOnly %d of %d bytes written, possibly out of free disk spaceFailed to write %d bytes to %s%d is not a valid stream resourceLength parameter must be greater than 0Unable to locate stream wrapper%s wrapper does not support renamingCannot rename a file across wrapper typesThe first argument to copy() function cannot be a directorydelimiter must be a single characterenclosure must be a single characterLength parameter may not be negativeFilename exceeds the maximum allowed length of %d characters������������P��`��@�� �����4�4�D6�D6�4�D6�D6�D6�D6�D6�D6�D6�D6�D6�D6�D6�D6�D6�D6�D6�D6�D6�D6�|5�D6�5�D6�D6�D6�D6�5�D6�D6�D6�D6�D6�D6�D6�46�D6�D6�D6�D6�D6�D6�D6�D6�D6�D6�D6�D6�5�\5�l5�Unable to find gid for %sUnable to find uid for %s%sstat failed for %sfifoUnknown file type (%d)unknownDidn't understand stat callUtime failed: %sQ�(Q�xF�F�F�F��F��F�G�G�hQ�E�Q�Q�@Q�hF�G�G�Unable to create file %s because %sNaNToo few argumentsField width %d is too longArgument number must be greater than zeroWidth must be greater than zero and less than %dPrecision must be greater than zero and less than %dRequested precision of %d digits was truncated to PHP maximum of %d digits̀���������������������������������������������������������������l�l�l���������������������������������l��������������������}�,��4��l�l�l���������������|�������{���ly������w�|�	x�	x�	x�	x�	x�	x�	x�	x�	x�	x�	x�	x�	x�	x�	x�	x�	x�	x�	x�	x�	x�	x�	x�	x�	x�	x�	x�	x�	x�	x�	x�~�~�~�	x�	x�	x�	x�	x�	x�	x�	x�	x�	x�	x�	x�	x�	x�	x�	x���	x�	x�	x�	x�	x�	x�	x�	x�	x�|�܁���~�~�~�	x�	x�	x�	x�	x�	x�	x�<{�	x�	x�	x�y�	x�x�	x�	x�v�s|lzzdpfsockopen__unable to connect to %s:%ld (%s)s|bl=,; 	
Set-Cookie: %s=%s; expires=; path=; domain=; secure; httponlys|slssbb|zzCookie names can not contain any of the following '=,; \t\r\n\013\014'Cookie values can not contain any of the following ',; \t\r\n\013\014'Set-Cookie: %s=deleted; expires=%sExpiry date cannot have a year greater then 9999mb_internal_encoding&%s;cannot yet handle MBCS!s|ls!bHTML_SPECIALCHARSHTML_ENTITIESENT_COMPATENT_QUOTESENT_NOQUOTES&amp;&quot;&#039;&#39;&lt;&gt;ISO8859-1ISO8859-15utf-8cp1252Windows-1252BIG5950GB2312936BIG5-HKSCSShift_JISSJIS932EUCJPEUC-JPKOI8-Rkoi8-rukoi8rcp1251Windows-1251win-1251iso8859-5iso-8859-5cp866ibm866MacRomanquotAumlAringCcedilEacuteNtildeOumlUumlaacuteagraveacircaumlatildeccedileacuteegraveecirceumliacuteigraveicirciumlntildeoacuteograveocircoumlotildeuacuteugraveucircuumldaggerpoundbullparaszligtradeAEligOslashinfinplusmnmicropartordfordmOmegaaeligoslashiquestiexclradicfnofasymp#8710laquoraquohellipnbspAgraveAtildeOtildeOEligoeligndashmdashldquordquolsquorsquodividelozyumlYumlfrasleurolsaquorsaquo#xFB01#xFB02DaggermiddotsbquobdquopermilAcircEcircAacuteEumlEgraveIacuteIcircIumlIgraveOacuteOcirc#xF8FFOgraveUacuteUcircUgrave#305macr#728#729#730#733#731#711#9492#9524#9516#9500#9472#9532#9566#9567#9562#9556#9577#9574#9568#9552#9580#9575#9576#9572#9573#9561#9560#9554#9555#9579#9578#9496#9484#9608#9604#9612#9616#9600#1088#1089#1090#1091#1092#1093#1094#1095#1096#1097#1098#1099#1100#1101#1102#1103#1025#1105#1028#1108#1031#1111#1038#1118#176#8729#183#8730#8470#164#9632#160#1056#1057#1058#1059#1060#1061#1062#1063#1064#1065#1066#1067#1068#1069#1070#1071#1072#1073#1074#1075#1076#1077#1078#1079#1080#1081#1082#1083#1084#1085#1086#1087#1104#1106#1107#1109#1110#1112#1113#1114#1115#1116#1117#1119#1026#1027#8218#8222#1033#8249#1034#1036#1035#1039#8216#8217#8219#8220#8250#1032curren#1168brvbarshy#1030#1169#1029#1040#1041#1042#1043#1044#1045#1046#1047#1048#1049#1050#1051#1052#1053#1054#1055spadesclubsheartsdiamslarruarrdarrharrcrarrlArruArrrArrdArrhArrvArrlAarrrAarrrarrwforallcompnexistnablaisinnotinepsisnotnibepsicoprodmnplusplusdosetmnlowastcompfnpropang90angmsdangsphnmidnparcupconintthere4becausbsimwreathnsimnsimencongnapbcongbumpbumpeequivlEgElnEgnELtGttwixtnltngtnlesngeslsimgsimglcupresscueprsimscsimnprnscnsubnsupsubesupeoplusotimesperpsdotlceilrceillfloorrfloorlangrangweierpalefsymenspemspthinspzwnjzwjlrmrlmPrimeolineAlphaBetaDeltaEpsilonZetaEtaThetaIotaKappaLambdaMuNuXiOmicronPiRhoSigmaTauUpsilonPhiChiPsibetagammadeltaepsilonzetathetaiotakappalambdamunuomicronrhosigmafsigmaupsilonphiomegathetasymupsihpivScaronscaronsup2sup3sup1ETHYacuteTHORNethyacutethornfrac14frac12frac34charset `%s' not supported, assuming iso-8859-1Invalid multibyte sequence in argumentK��������u��n��Y��n��n��n��K����������ȥ�ȥ�ȥ�P��p��JPEG2000 codestream corrupt(Expected SIZ marker not found after SOC)PNG file corrupted by ASCII conversionJP2 file has no codestreams at root level#define %s %dAPP%dIMAGETYPE_GIFIMAGETYPE_JPEGIMAGETYPE_PNGIMAGETYPE_SWFIMAGETYPE_PSDIMAGETYPE_BMPIMAGETYPE_TIFF_IIIMAGETYPE_TIFF_MMIMAGETYPE_JPCIMAGETYPE_JP2IMAGETYPE_JPXIMAGETYPE_JB2IMAGETYPE_SWCIMAGETYPE_IFFIMAGETYPE_WBMPIMAGETYPE_JPEG2000IMAGETYPE_XBMimage/gifimage/jpegimage/pngapplication/x-shockwave-flashimage/psdimage/bmpimage/tiffimage/iffimage/vnd.wap.wbmpimage/jp2image/xbm.gif.jpeg.png.swf.psd.bmp.tiff.iff.jpc.jp2.jpx.jb2.xbmRead error!ILBMPBM channelsmimeH����H�� ����H����H������ ��h�� ������ ��h�� ��x���� ��0������`��@��P������ ���� �� ��`��p����о�L����������,��L��l��l��������������L��t������h�����������������h�����������P����FORMjP  
�
�O�MM*II*�PNG

��CWSFWSBM8BPSGIF<style type="text/css">
</style>
<tr><td class="e">"]</td><td class="v"><pre></pre><i>no value</i></td></tr>
<td class="%s"> </td>%s %s %s %s %s<head>
<title>phpinfo()</title></head>
<body><div class="center">
</table><br />
<tr class="h"><td>
<tr class="v"><td>
<hr />
%*s%s%*s
<tr class="h"><th></th><td>INFO_GENERALINFO_CREDITSINFO_CONFIGURATIONINFO_MODULESINFO_ENVIRONMENTINFO_VARIABLESINFO_LICENSEINFO_ALLCREDITS_GROUPCREDITS_GENERALCREDITS_SAPICREDITS_MODULESCREDITS_DOCSCREDITS_FULLPAGECREDITS_QACREDITS_ALL(none)<br />expose_phpphpinfo()
?=" alt="PHP Logo" /></a>PHP VersionSystemMar  9 2026 13:47:50Build DateConfigure CommandServer APIVirtual Directory Support/opt/alt/php52/etcLoaded Configuration Fileadditional .ini files parsedPHP APIPHP ExtensionZend ExtensionDebug BuildThread SafetyZend Memory ManagerIPv6 SupportRegistered PHP Streamsno streams registeredno transports registeredStream Socket TransportsRegistered Stream Filtersno filters registered<h1><a href="PHP Credits</a></h1>
<h1>Configuration</h1>
<h2>PHP Core</h2>
PHP Core<h2>Additional Modules</h2>
Additional ModulesModule Name<h2>Environment</h2>
EnvironmentVariable<h2>PHP Variables</h2>
PHP VariablesPHP_SELFPHP_AUTH_TYPEPHP_AUTH_USERPHP_AUTH_PW<h2>PHP License</h2>
<p>
</p>
<p>
PHP License
</div></body></html>Linux buildfarm01-new.corp.cloudlinux.com 4.18.0-553.8.1.el8_10.x86_64 #1 SMP Tue Jul 2 07:26:33 EDT 2024 x86_64 x86_64 x86_64 GNU/Linux<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"><meta name="ROBOTS" content="NOINDEX,NOFOLLOW,NOARCHIVE" /><table border="0" cellpadding="3" width="600">


 _______________________________________________________________________

<tr class="h"><th colspan="%d">%s</th></tr>
<h2><a name="module_%s">%s</a></h2>
PHPE9568F34-D428-11d2-A769-00AA001ACF42<a href="http://www.php.net/"><img border="0" src="<h1 class="p">PHP Version %s</h1>
 './configure'  '--build=x86_64-redhat-linux-gnu' '--host=x86_64-redhat-linux-gnu' '--program-prefix=' '--disable-dependency-tracking' '--prefix=/usr' '--exec-prefix=/usr' '--bindir=/usr/bin' '--sbindir=/usr/sbin' '--sysconfdir=/etc' '--datadir=/usr/share' '--includedir=/usr/include' '--libdir=/usr/lib64' '--libexecdir=/usr/libexec' '--localstatedir=/var' '--sharedstatedir=/var/lib' '--mandir=/usr/share/man' '--infodir=/usr/share/info' '--build=x86_64-redhat-linux-gnu' '--host=x86_64-redhat-linux-gnu' '--target=x86_64-redhat-linux-gnu' '--program-prefix=' '--prefix=/opt/alt/php52' '--exec-prefix=/opt/alt/php52' '--bindir=/opt/alt/php52/usr/bin' '--sbindir=/opt/alt/php52/usr/sbin' '--sysconfdir=/opt/alt/php52/etc' '--datadir=/opt/alt/php52/usr/share' '--includedir=/opt/alt/php52/usr/include' '--libdir=/opt/alt/php52/usr/lib64' '--libexecdir=/opt/alt/php52/usr/libexec' '--localstatedir=/var' '--sharedstatedir=/usr/com' '--mandir=/opt/alt/php52/usr/share/man' '--infodir=/opt/alt/php52/usr/share/info' '--cache-file=../config.cache' '--with-libdir=lib64' '--with-config-file-path=/opt/alt/php52/etc' '--with-config-file-scan-dir=/opt/alt/php52/link/conf' '--with-exec-dir=/usr/bin' '--with-layout=GNU' '--disable-debug' '--without-pear' '--without-gdbm' '--with-pic' '--with-bz2' '--with-zlib' '--with-gettext' '--with-gmp' '--with-iconv' '--with-kerberos=/opt/alt/krb5/usr' '--with-mhash' '--with-readline' '--with-webp=/opt/alt/libwebp' '--with-pcre-regex=/opt/alt/pcre802/usr' '--with-libxml-dir=/opt/alt/libxml2/usr' '--with-curl=/opt/alt/curlssl11/usr' '--with-openssl=/opt/alt/openssl11' '--with-openssl-dir=/opt/alt/openssl11' '--enable-exif' '--enable-ftp' '--enable-magic-quotes' '--enable-shmop' '--enable-calendar' '--enable-xml' '--enable-force-cgi-redirect' '--enable-bcmath=shared' '--enable-dba=shared' '--enable-dbase=shared' '--enable-dbx=shared,/usr' '--enable-dom=shared' '--enable-fastcgi' '--enable-intl=shared' '--enable-json=shared' '--enable-mbstring=shared' '--enable-mbregex' '--enable-pcntl' '--enable-pdo=shared' '--enable-phar=shared' '--enable-posix=shared' '--enable-soap=shared' '--enable-sockets=shared' '--enable-sysvsem=shared' '--enable-sysvshm=shared' '--enable-sysvmsg=shared' '--enable-ucd-snmp-hack' '--enable-wddx=shared' '--enable-xmlreader=shared' '--enable-xmlwriter=shared' '--enable-zip=shared' '--with-enchant=shared,/usr' '--with-fileinfo=shared' '--with-freetype-dir=/usr' '--with-gd=shared' '--enable-gd-native-ttf' '--with-icu-dir=/opt/alt/libicu57/usr' '--with-imap=shared,/opt/alt/libc-client11' '--with-imap-ssl=/opt/alt/openssl11' '--with-jpeg-dir=/usr' '--with-ldap=shared,/opt/alt/openldap11' '--with-ldap-sasl' '--with-mcrypt=shared,/usr' '--with-ncurses=shared' '--with-pdo-odbc=shared,unixODBC,/usr' '--with-pdo-sqlite=shared,/usr' '--with-png-dir=/usr' '--with-pspell=shared' '--with-snmp=shared,/opt/alt/net-snmp11/usr' '--with-sqlite=shared' '--enable-sqlite-utf8' '--with-tidy=shared,/usr' '--with-unixODBC=shared,/usr' '--with-xmlrpc=shared' '--with-xpm-dir=/usr' '--with-pdo-pgsql=shared,/usr' '--with-pgsql=shared,/usr' '--with-mssql=shared,/opt/alt/freetds11/usr' '--with-pdo-dblib=shared,/opt/alt/freetds11/usr' '--with-sybase-ct=shared,/opt/alt/freetds11/usr' '--with-t1lib=/opt/alt/t1lib/usr' '--with-interbase=shared,/usr' '--with-pdo-firebird=shared,/usr' '--with-recode=shared,/usr' '--with-unixODBC=shared,/usr' '--with-xsl=shared,/usr'Configuration File (php.ini) PathScan this dir for additional .ini filesRegistered Stream Socket Transports<a href="http://www.zend.com/"><img border="0" src="?=PHPE9568F35-D428-11d2-A769-00AA001ACF42" alt="Zend logo" /></a>
This program makes use of the Zend Scripting Language Engine:?=PHPB8B5F2A0-3C92-11d3-A3A9-4C7B08C10000">This program is free software; you can redistribute it and/or modify it under the terms of the PHP License as published by the PHP Group and included in the distribution in the file:  LICENSE
This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
If you did not receive a copy of the PHP license, or have any questions about This program is free software; you can redistribute it and/or modify
it under the terms of the PHP License as published by the PHP Group
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
If you did not receive a copy of the PHP license, or have any
questions about PHP licensing, please contact license@php.net.
PHPE9568F35-D428-11d2-A769-00AA001ACF42IPTC data too largeUnable to open %s%d#%03dQ>No such file or directoryUnable to symlink to a URLUnable to link to a URLsendmail_pathmail.logHTTP_X_FORWARDED_FORSCRIPT_FILENAMESERVER_NAMEX-PHP-Script:  REMOTE_ADDR: To: %s
Subject: %s

%s
mail.force_extra_parameterssss|ssPath to sendmailmail() on [%s:%d]: To: %s -- Headers: %s
X-PHP-Originating-Script: %ld:%s
%sX-PHP-Originating-Script: %ld:%s
Newline found in PHP_SELF variable which might cause possible injection '%s'Permission denied: unable to execute shell to run mail delivery binary '%s'Could not execute mail delivery program '%s'SAFE MODE Restriction in effect.  The fifth parameter is disabled in SAFE MODEX-PHP-Filename: base must be greater than 0Number too largeInvalid `from base' (%ld)Invalid `to base' (%ld)%.*F.,Number '%s' is too big to fit in long0123456789abcdefghijklmnopqrstuvwxyz�_�?�0123456789abcdef�V�\�\�\�\U�\��V�\�\U�\��V�\�\�\�\U��V�\�\�\�\�\U�\��T��T�vZ�U��W��V��W�DW��Y��V��W�V��W��W��W��V�<Y�V��W�X�X��V�$W�lY��X�$X�$V�Z�GU�W�hV�hW��V�kY�hV�hW�XZ�hW�hW�hW�hV��X�HV�hW� X�X�hV�V�Y�`X�W�U�minuteswestdsttime%.8F %ldru_oublockru_inblockru_msgsndru_msgrcvru_maxrssru_ixrssru_idrssru_minfltru_majfltru_nsignalsru_nvcswru_nivcswru_nswapru_utime.tv_usecru_utime.tv_secru_stime.tv_usecru_stime.tv_secType %c: '*' ignoredType %c: not enough argumentsType %c: too few argumentsType %c: unknown format code%d arguments unusedType %c: outside of stringType %c: illegal hex digit %cInvalid format type %c%.*s%d%.*sType %c: integer overflowType %c: integer overflow in format stringType %c: not enough characters in stringType %c: not enough input, need %d, have %d�i�|i�yh�|i�yh�yh�yh�yh�Li�\h�yh�yh�\h�yh�\h�yh�yh�yh�yh�,j�yh�yh�\h�yh�i�yh�yh�yh�yh�yh�yh�yh�yh�|i�yh�|i��i�yh��h�yh�Li�\h�yh�yh�\h�yh�,j�yh�yh�yh�yh�,j�yh�yh�,j�yh�|i�r�r�xl�q�xl�xl�xl�xl�p�p�xl�xl�go�xl�go�xl�xl�xl�xl��n�xl�xl�go�xl�n�xl�xl�xl�xl�xl�xl�xl�xl�r�xl�q��m�xl�m�xl�p�p�xl�xl�go�xl��n�xl�xl�xl�xl��n�xl�xl��n�xl�]l�5����)��~�)�)�)�)���	x�)�)�	x�)�	x�)�)�)�)�~�)�)�	x�)�Ձ�)�)�)�)�)�)�)�)���)��~��)�	x�)���	x�)�)�	x�)�~�)�)�)�)�~�)�)�~�)��~��|�@}�nx�|�nx�nx�nx�nx�`{�z�nx�nx��y�nx��y�nx�nx�nx�nx�0y�nx�nx��y�nx��x�nx�nx�nx�nx�nx�nx�nx�nx�@}�nx�|�x�nx�x�nx�`{�z�nx�nx��y�nx�0y�nx�nx�nx�nx�0y�nx�nx�0y�}����i}�	}�i}�i}�i}�i}�ǀ�4v�i}�i}�4v�i}�4v�i}�i}�i}�i}�)}�i}�i}�4v�i}���i}�i}�i}�i}�i}�i}�i}�i}���i}�	}�I}�i}�4v�i}�ǀ�4v�i}�i}�4v�i}�)}�i}�i}�i}�i}�)}�i}�i}�)}�i}�	}�@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@	@@@@@@@

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@%s: Invalid Regular ExpressionBundled library enabledRegex Library123122245512623122STR_PAD_LEFTSTR_PAD_RIGHTSTR_PAD_BOTHPATHINFO_DIRNAMEPATHINFO_BASENAMEPATHINFO_EXTENSIONPATHINFO_FILENAMECHAR_MAXLC_CTYPELC_NUMERICLC_TIMELC_COLLATELC_MONETARYLC_ALLLC_MESSAGESABDAY_1ABDAY_2ABDAY_3ABDAY_4ABDAY_5ABDAY_6ABDAY_7ABMON_1ABMON_2ABMON_3ABMON_4ABMON_5ABMON_6ABMON_7ABMON_8ABMON_9ABMON_10ABMON_11ABMON_12AM_STRPM_STRT_FMT_AMPMERAERA_D_T_FMTERA_D_FMTERA_T_FMTALT_DIGITSCRNCYSTRRADIXCHARTHOUSEPYESEXPRNOEXPRCODESETItem '%ld' is not validInvalid '..'-ranges|lsbBreak string cannot be emptyEmpty delimiter%.*GArgument must be an arrayInvalid arguments passedsz|lsZ|l%03oxmUnknown modeint_curr_symbolcurrency_symbolmon_decimal_pointmon_thousands_seppositive_signnegative_signint_frac_digitsp_cs_precedesp_sep_by_spacen_cs_precedesn_sep_by_spacep_sign_posnn_sign_posnmon_groupingEmpty substringInvalid format value %ldssl|lb 

	����� �����h��p��8��t.�4/�4/�4/�4/�.�/�4/�4/�4/�/�4/�4/�4/�4/�4/�4/�4/�.�4/�4/�4/�.�4/��.�4/��.�4/��-�3��3��3�3��3�3�3�lB�\B�|B�|B�|B�|B�|B�LB�|B�|B�|B�|B�|B�|B�|B�|B�|B�|B�|B�|B�<B�|B�,B�|B�|B�|B�|B�|B�|B�|B�|B�|B�|B�|B�|B�|B�|B�|B�|B�|B�|B�|B�|B�|B�|B�|B�|B�|B�|B�|B�|B�B�B�A�|B�|B�|B�|B�|B�|B�|B�|B�|B�|B�|B�|B�|B�|B�|B�|B�|B�|B�|B�|B�|B�|B�|B�|B�|B�|B�|B�|B�|B��A�|B�A�Tl�m�m�m�m�m�m�m�m�m�m�m�m�m�m�m�m�m�m�m�m�m�m�m�m�m�m�m�m�m�m�m�m�tf�k�m�m�m�m�k�g�f�m�m�m�$k�m�m�m�m�m�m�m�m�m�m�m�m�m�m��e�m�,l�j�m�m�m�m�m�k�m�m�m�m�m�m�4h�m�m�m�m�m�m�m�m�m�m�m�m�m�m�m�m�m�m�m�m�m�m�m�m�k�m�m�m�m�m�m�4h�;u�x�x�x�x�x�x�x�x�x�x�x�x�x�x�x�x�x�x�x�x�x�x�x�x�x�x�x�x�x�x�x�x��t�t�x�x�x�x�t��t��t�x�x�x�n�x�x�x�x�x�x�x�x�x�x�x�x�x�x�t�x�t�t�x�x�x�x�x�t�x�x�x�x�x�x�&n�x�x�x�x�x�x�x�x�x�x�x�x�x�x�x�x�x�x�x�x�x�x�x�x�t�x�x�x�x�x�x�&n�.u�x�x�x�x�x�x�x�x�x�x�x�x�x�x�x�x�x�x�x�x�x�x�x�x�x�x�x�x�x�x�x�x�5t�s�x�x�x�x�s�kt�Ct�x�x�x�s�x�x�x�x�x�x�x�x�x�x�x�x�x�x��s�x�t��s�x�x�x�x�x�s�x�x�x�x�x�x�s�x�x�x�x�x�x�x�x�x�x�x�x�x�x�x�x�x�x�x�x�x�x�x�x�s�x�x�x�x�x�x�s�_s�u�u�u�u�u�u�u�u�u�u�u�u�u�u�u�u�u�u�u�u�u�u�u�u�u�u�u�u�u�u�u�u�Yr��q�u�u�u�u��q�mr�r�u�u�u�Kr�u�u�u�u�u�u�u�u�u�u�u�u�u�u�7r�u�s�r�u�u�u�u�u�r�u�u�u�u�u�u�q�u�u�u�u�u�u�u�u�u�u�u�u�u�u�u�u�u�u�u�u�u�u�u�u�r�u�u�u�u�u�u�q�i�f�f�f�f�f�f�f�f�f�f�f�f�f�f�f�f�f�f�f�f�f�f�f�f�f�f�f�f�f�f�f�f�i�$i�f�f�f�f�$i��h��h�f�f�f��h�f�f�f�f�f�f�f�f�f�f�f�f�f�f�h�f�<i�Tg�f�f�f�f�f�h�f�f�f�f�f�f�i�f�f�f�f�f�f�f�f�f�f�f�f�f�f�f�f�f�f�f�f�f�f�f�f�h�f�f�f�f�f�f�i�p�-p�-p�-p�-p�-p�-p�-p�-p�-p�-p�-p�-p�-p�-p�-p�-p�-p�-p�-p�-p�-p�-p�-p�-p�-p�-p�-p�-p�-p�-p�-p�-p�`p�p�-p�-p�-p�-p�p�Np�<p�-p�-p�-p�kp�-p�-p�-p�-p�-p�-p�-p�-p�-p�-p�-p�-p�-p�-p�i�-p��p�|p�-p�-p�-p�-p�-p�p�-p�-p�-p�-p�-p�-p�-p�-p�-p�-p�-p�-p�-p�-p�-p�-p�-p�-p�-p�-p�-p�-p�-p�-p�-p�-p�-p�-p�-p�-p�-p�p�h�k�k�k�k�k�k�k�k�k�k�k�k�k�k�k�k�k�k�k�k�k�k�k�k�k�k�k�k�k�k�k�k��g��h�k�k�k�k��h��g��g�k�k�k�g�k�k�k�k�k�k�k�k�k�k�k�k�k�k�h�k�i�h�k�k�k�k�k�h�k�k�k�k�k�k�h�k�k�k�k�k�k�k�k�k�k�k�k�k�k�k�k�k�k�k�k�k�k�k�k�h�k�k�k�k�k�k�h���ʚ�ʚ�ʚ�ʚ�ʚ�ʚ�ʚ�ʚ�ʚ�ʚ�ʚ�ʚ�ʚ�ʚ�ʚ�ʚ�ʚ�ʚ�ʚ�ʚ�ʚ�ʚ�ʚ�ʚ�ʚ�ʚ�ʚ�ʚ�ʚ�ʚ�ʚ�ʚ�Z�X��ʚ�ʚ�ʚ�ʚ�X��m��l�ʚ�ʚ�ʚ�m�ʚ�ʚ�ʚ�ʚ�ʚ�ʚ�ʚ�ʚ�ʚ�ʚ�ʚ�ʚ�ʚ�ʚ�]f�ʚ���0m�ʚ�ʚ�ʚ�ʚ�ʚ���ʚ�ʚ�ʚ�ʚ�ʚ�ʚ���ʚ�ʚ�ʚ�ʚ�ʚ�ʚ�ʚ�ʚ�ʚ�ʚ�ʚ�ʚ�ʚ�ʚ�ʚ�ʚ�ʚ�ʚ�ʚ�ʚ�ʚ�ʚ�ʚ�ʚ���ʚ�ʚ�ʚ�ʚ�ʚ�ʚ���s�-k�-k�-k�-k�-k�-k�-k�-k�-k�-k�-k�-k�-k�-k�-k�-k�-k�-k�-k�-k�-k�-k�-k�-k�-k�-k�-k�-k�-k�-k�-k�-k�s�r�-k�-k�-k�-k�r��r��r�-k�-k�-k�-k�-k�-k�-k�-k�-k�-k�-k�-k�-k�-k�-k�-k�-k�-k��r�-k�}r�ds�-k�-k�-k�-k�-k�Ys�-k�-k�-k�-k�-k�-k��r�-k�-k�-k�-k�-k�-k�-k�-k�-k�-k�-k�-k�-k�-k�-k�-k�-k�-k�-k�-k�-k�-k�-k�-k�Ys�-k�-k�-k�-k�-k�-k��r�Ak�k�k�k�k�k�k�k�k�k�k�k�k�k�k�k�k�k�k�k�k�k�k�k�k�k�k�k�k�k�k�k�k��j��g�k�k�k�k��g��j�j�k�k�k�j�k�k�k�k�k�k�k�k�k�k�k�k�k�k�j�k�j��j�k�k�k�k�k��j�k�k�k�k�k�k�j�k�k�k�k�k�k�k�k�k�k�k�k�k�k�k�k�k�k�k�k�k�k�k�k��j�k�k�k�k�k�k�j�l��o��o��o��o��o��o��o��o��o��o��o��o��o��o��o��o��o��o��o��o��o��o��o��o��o��o��o��o��o��o��o��o�i�l��o��o��o��o�l�j�j��o��o��o�j��o��o��o��o��o��o��o��o��o��o��o��o��o��o�|j��o�4k�ij��o��o��o��o��o�Yj��o��o��o��o��o��o�W��o��o��o��o��o��o��o��o��o��o��o��o��o��o��o��o��o��o��o��o��o��o��o��o�Yj��o��o��o��o��o��o�W��j�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��g�^�n�n�n�n�^�h�h�n�n�n�h�n�n�n�n�n�n�n�n�n�n�n�n�n�n�rh�n�)i�_h�n�n�n�n�n�Oh�n�n�n�n�n�n�h�n�n�n�n�n�n�n�n�n�n�n�n�n�n�n�n�n�n�n�n�n�n�n�n�Oh�n�n�n�n�n�n�h�dk�dm�dm�dm�dm�dm�dm�dm�dm�dm�dm�dm�dm�dm�dm�dm�dm�dm�dm�dm�dm�dm�dm�dm�dm�dm�dm�dm�dm�dm�dm�dm�dm�i�Bk�dm�dm�dm�dm�Bk�k��j�dm�dm�dm��j�dm�dm�dm�dm�dm�dm�dm�dm�dm�dm�dm�dm�dm�dm�j�dm�Yj�(j�dm�dm�dm�dm�dm�i�dm�dm�dm�dm�dm�dm��i�dm�dm�dm�dm�dm�dm�dm�dm�dm�dm�dm�dm�dm�dm�dm�dm�dm�dm�dm�dm�dm�dm�dm�dm�i�dm�dm�dm�dm�dm�dm��i�Og��c��c��c��c��c��c��c��c��c��c��c��c��c��c��c��c��c��c��c��c��c��c��c��c��c��c��c��c��c��c��c��c��d�m`��c��c��c��c�m`�Gg�`��c��c��c��Y��c��c��c��c��c��c��c��c��c��c��c��c��c��c�_`��c�g�T`��c��c��c��c��c�F`��c��c��c��c��c��c��Y��c��c��c��c��c��c��c��c��c��c��c��c��c��c��c��c��c��c��c��c��c��c��c��c�F`��c��c��c��c��c��c��Y�c�b�b�b�b�b�b�b�b�b�b�b�b�b�b�b�b�b�b�b�b�b�b�b�b�b�b�b�b�b�b�b�b�c�^�b�b�b�b�^��^�Ge�b�b�b�X�b�b�b�b�b�b�b�b�b�b�b�b�b�b�^�b�e�^�b�b�b�b�b�^�b�b�b�b�b�b�X�b�b�b�b�b�b�b�b�b�b�b�b�b�b�b�b�b�b�b�b�b�b�b�b�^�b�b�b�b�b�b�X�h�U`�U`�U`�U`�U`�U`�U`�U`�U`�U`�U`�U`�U`�U`�U`�U`�U`�U`�U`�U`�U`�U`�U`�U`�U`�U`�U`�U`�U`�U`�U`�U`�g��g�U`�U`�U`�U`��g��g��g�U`�U`�U`�g�U`�U`�U`�U`�U`�U`�U`�U`�U`�U`�U`�U`�U`�U`�g�U`�g�'h�U`�U`�U`�U`�U`�h�U`�U`�U`�U`�U`�U`�[g�U`�U`�U`�U`�U`�U`�U`�U`�U`�U`�U`�U`�U`�U`�U`�U`�U`�U`�U`�U`�U`�U`�U`�U`�h�U`�U`�U`�U`�U`�U`�[g�%j�Bj�Bj�Bj�Bj�Bj�Bj�Bj�Bj�Bj�Bj�Bj�Bj�Bj�Bj�Bj�Bj�Bj�Bj�Bj�Bj�Bj�Bj�Bj�Bj�Bj�Bj�Bj�Bj�Bj�Bj�Bj�Bj�j�j�Bj�Bj�Bj�Bj�j��i��i�Bj�Bj�Bj��i�Bj�Bj�Bj�Bj�Bj�Bj�Bj�Bj�Bj�Bj�Bj�Bj�Bj�Bj�`g�Bj�g��f�Bj�Bj�Bj�Bj�Bj��f�Bj�Bj�Bj�Bj�Bj�Bj�.i�Bj�Bj�Bj�Bj�Bj�Bj�Bj�Bj�Bj�Bj�Bj�Bj�Bj�Bj�Bj�Bj�Bj�Bj�Bj�Bj�Bj�Bj�Bj�Bj��f�Bj�Bj�Bj�Bj�Bj�Bj�.i�_�kK�kK�kK�kK�kK�kK�kK�kK�kK�kK�kK�kK�kK�kK�kK�kK�kK�kK�kK�kK�kK�kK�kK�kK�kK�kK�kK�kK�kK�kK�kK�kK�]��]�kK�kK�kK�kK��]��^��Z�kK�kK�kK�RN�kK�kK�kK�kK�kK�kK�kK�kK�kK�kK�kK�kK�kK�kK��]�kK�_��]�kK�kK�kK�kK�kK�]�kK�kK�kK�kK�kK�kK�K�kK�kK�kK�kK�kK�kK�kK�kK�kK�kK�kK�kK�kK�kK�kK�kK�kK�kK�kK�kK�kK�kK�kK�kK�]�kK�kK�kK�kK�kK�kK�K��^�I�I�I�I�I�I�I�I�I�I�I�I�I�I�I�I�I�I�I�I�I�I�I�I�I�I�I�I�I�I�I�I�\�1\�I�I�I�I�1\�Y�X\�I�I�I�L�I�I�I�I�I�I�I�I�I�I�I�I�I�I�&\�I�6_�\�I�I�I�I�I�
\�I�I�I�I�I�I�I�I�I�I�I�I�I�I�I�I�I�I�I�I�I�I�I�I�I�I�I�I�I�I�I�
\�I�I�I�I�I�I�I��c�5e�5e�5e�5e�5e�5e�5e�5e�5e�5e�5e�5e�5e�5e�5e�5e�5e�5e�5e�5e�5e�5e�5e�5e�5e�5e�5e�5e�5e�5e�5e�5e��c�c�5e�5e�5e�5e�c�c�c�5e�5e�5e�c�5e�5e�5e�5e�5e�5e�5e�5e�5e�5e�5e�5e�5e�5e��b�5e�pb�Zb�5e�5e�5e�5e�5e��G�5e�5e�5e�5e�5e�5e�d�5e�5e�5e�5e�5e�5e�5e�5e�5e�5e�5e�5e�5e�5e�5e�5e�5e�5e�5e�5e�5e�5e�5e�5e��G�5e�5e�5e�5e�5e�5e�d�d�sm�sm�sm�sm�sm�sm�sm�sm�sm�sm�sm�sm�sm�sm�sm�sm�sm�sm�sm�sm�sm�sm�sm�sm�sm�sm�sm�sm�sm�sm�sm�sm��V�d�sm�sm�sm�sm�d��V��V�sm�sm�sm��d�sm�sm�sm�sm�sm�sm�sm�sm�sm�sm�sm�sm�sm�sm�c�sm��c�c�sm�sm�sm�sm�sm�c�sm�sm�sm�sm�sm�sm�c�sm�sm�sm�sm�sm�sm�sm�sm�sm�sm�sm�sm�sm�sm�sm�sm�sm�sm�sm�sm�sm�sm�sm�sm�c�sm�sm�sm�sm�sm�sm�c��_�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d��_�_�d�d�d�d�_��C�_�d�d�d�x_�d�d�d�d�d�d�d�d�d�d�d�d�d�d�A�d��`�TJ�d�d�d�d�d�`�d�d�d�d�d�d�9^�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�`�d�d�d�d�d�d�9^�i�ji�ji�ji�ji�ji�ji�ji�ji�ji�ji�ji�ji�ji�ji�ji�ji�ji�ji�ji�ji�ji�ji�ji�ji�ji�ji�ji�ji�ji�ji�ji�ji�b�_b�ji�ji�ji�ji�_b�>b�b�ji�ji�ji�b�ji�ji�ji�ji�ji�ji�ji�ji�ji�ji�ji�ji�ji�ji��a�ji��a�a�ji�ji�ji�ji�ji�a�ji�ji�ji�ji�ji�ji�va�ji�ji�ji�ji�ji�ji�ji�ji�ji�ji�ji�ji�ji�ji�ji�ji�ji�ji�ji�ji�ji�ji�ji�ji�a�ji�ji�ji�ji�ji�ji�va�e�����������������������������������������������������������������e�\e���������\e�c�[c�������4c�����������������������������!c����b�b�����������b�������������[b�������������������������������������������������b�������������[b��X�f�f�f�f�f�f�f�f�f�f�f�f�f�f�f�f�f�f�f�f�f�f�f�f�f�f�f�f�f�f�f�f�@]�r]�f�f�f�f�r]�g]�\]�f�f�f�K]�f�f�f�f�f�f�f�f�f�f�f�f�f�f�]�f��X�]�f�f�f�f�f�]�f�f�f�f�f�f�]�f�f�f�f�f�f�f�f�f�f�f�f�f�f�f�f�f�f�f�f�f�f�f�f�]�f�f�f�f�f�f�]�+e�y�y�y�y�y�y�y�y�y�y�y�y�y�y�y�y�y�y�y�y�y�y�y�y�y�y�y�y�y�y�y�y�e�]�y�y�y�y�]�
^�v^�y�y�y�]�y�y�y�y�y�y�y�y�y�y�y�y�y�y�]�y�d�]�y�y�y�y�y�}]�y�y�y�y�y�y��]�y�y�y�y�y�y�y�y�y�y�y�y�y�y�y�y�y�y�y�y�y�y�y�y�}]�y�y�y�y�y�y��]�6a�����������������������������������������������������������������$a�a���������a��`��`��������`�����������������������������`����^�^�����������^�������������Sc�������������������������������������������������^�������������Sc�ha�=��=��=��=��=��=��=��=��=��=��=��=��=��=��=��=��=��=��=��=��=��=��=��=��=��=��=��=��=��=��=��=��p_�R_�=��=��=��=��R_�Pa�8a�=��=��=��_�=��=��=��=��=��=��=��=��=��=��=��=��=��=��^�=��`��\�=��=��=��=��=���\�=��=��=��=��=��=��a�=��=��=��=��=��=��=��=��=��=��=��=��=��=��=��=��=��=��=��=��=��=��=��=���\�=��=��=��=��=��=��a�Y�ă�ă�ă�ă�ă�ă�ă�ă�ă�ă�ă�ă�ă�ă�ă�ă�ă�ă�ă�ă�ă�ă�ă�ă�ă�ă�ă�ă�ă�ă�ă�ă�Y�Y�ă�ă�ă�ă�Y�Y�xY�ă�ă�ă�lY�ă�ă�ă�ă�ă�ă�ă�ă�ă�ă�ă�ă�ă�ă�KY�ă�$Y�Y�ă�ă�ă�ă�ă�Y�ă�ă�ă�ă�ă�ă��X�ă�ă�ă�ă�ă�ă�ă�ă�ă�ă�ă�ă�ă�ă�ă�ă�ă�ă�ă�ă�ă�ă�ă�ă�Y�ă�ă�ă�ă�ă�ă��X�L��w�w�w�w�w�w�w�w�w�w�w�w�w�w�w�w�w�w�w�w�w�w�w�w�w�w�w�w�w�w�w�w�^p���w�w�w�w���q��p�w�w�w��p�w�w�w�w�w�w�w�w�w�w�w�w�w�w�1r�w���r�w�w�w�w�w�
r�w�w�w�w�w�w�#p�w�w�w�w�w�w�w�w�w�w�w�w�w�w�w�w�w�w�w�w�w�w�w�w�
r�w�w�w�w�w�w�#p�3��ׂ�ׂ�ׂ�ׂ�ׂ�ׂ�ׂ�ׂ�ׂ�ׂ�ׂ�ׂ�ׂ�ׂ�ׂ�ׂ�ׂ�ׂ�ׂ�ׂ�ׂ�ׂ�ׂ�ׂ�ׂ�ׂ�ׂ�ׂ�ׂ�ׂ�ׂ�ׂ�q�|�ׂ�ׂ�ׂ�ׂ�|�|�|�ׂ�ׂ�ׂ�q|�ׂ�ׂ�ׂ�ׂ�ׂ�ׂ�ׂ�ׂ�ׂ�ׂ�ׂ�ׂ�ׂ�ׂ�}�ׂ��|��|�ׂ�ׂ�ׂ�ׂ�ׂ�|�ׂ�ׂ�ׂ�ׂ�ׂ�ׂ�H�ׂ�ׂ�ׂ�ׂ�ׂ�ׂ�ׂ�ׂ�ׂ�ׂ�ׂ�ׂ�ׂ�ׂ�ׂ�ׂ�ׂ�ׂ�ׂ�ׂ�ׂ�ׂ�ׂ�ׂ�|�ׂ�ׂ�ׂ�ׂ�ׂ�ׂ�H�ds�<s�<s�<s�<s�<s�<s�<s�<s�<s�<s�<s�<s�<s�<s�<s�<s�<s�<s�<s�<s�<s�<s�<s�<s�<s�<s�<s�<s�<s�<s�<s�<s�go�Js�<s�<s�<s�<s�Js�����<s�<s�<s���<s�<s�<s�<s�<s�<s�<s�<s�<s�<s�<s�<s�<s�<s�n��<s�}��f��<s�<s�<s�<s�<s�R��<s�<s�<s�<s�<s�<s�D��<s�<s�<s�<s�<s�<s�<s�<s�<s�<s�<s�<s�<s�<s�<s�<s�<s�<s�<s�<s�<s�<s�<s�<s�R��<s�<s�<s�<s�<s�<s�D��<x�mk�mk�mk�mk�mk�mk�mk�mk�mk�mk�mk�mk�mk�mk�mk�mk�mk�mk�mk�mk�mk�mk�mk�mk�mk�mk�mk�mk�mk�mk�mk�mk�Qk��m�mk�mk�mk�mk��m�!{��u�mk�mk�mk��Q�mk�mk�mk�mk�mk�mk�mk�mk�mk�mk�mk�mk�mk�mk�m�mk�>�m�mk�mk�mk�mk�mk�m�mk�mk�mk�mk�mk�mk�k�mk�mk�mk�mk�mk�mk�mk�mk�mk�mk�mk�mk�mk�mk�mk�mk�mk�mk�mk�mk�mk�mk�mk�mk�m�mk�mk�mk�mk�mk�mk�k�k�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�k�P�l�l�l�l�P�jP�{�l�l�l�P�l�l�l�l�l�l�l�l�l�l�l�l�l�l�O�l����O�l�l�l�l�l��O�l�l�l�l�l�l�GP�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l��O�l�l�l�l�l�l�GP�n�Zj�Zj�Zj�Zj�Zj�Zj�Zj�Zj�Zj�Zj�Zj�Zj�Zj�Zj�Zj�Zj�Zj�Zj�Zj�Zj�Zj�Zj�Zj�Zj�Zj�Zj�Zj�Zj�Zj�Zj�Zj�Zj�	j�hN�Zj�Zj�Zj�Zj�hN�m�"O�Zj�Zj�Zj�\N�Zj�Zj�Zj�Zj�Zj�Zj�Zj�Zj�Zj�Zj�Zj�Zj�Zj�Zj�JN�Zj�bm�;N�Zj�Zj�Zj�Zj�Zj�)N�Zj�Zj�Zj�Zj�Zj�Zj�N�Zj�Zj�Zj�Zj�Zj�Zj�Zj�Zj�Zj�Zj�Zj�Zj�Zj�Zj�Zj�Zj�Zj�Zj�Zj�Zj�Zj�Zj�Zj�Zj�)N�Zj�Zj�Zj�Zj�Zj�Zj�N���Qf�Qf�Qf�Qf�Qf�Qf�Qf�Qf�Qf�Qf�Qf�Qf�Qf�Qf�Qf�Qf�Qf�Qf�Qf�Qf�Qf�Qf�Qf�Qf�Qf�Qf�Qf�Qf�Qf�Qf�Qf�Qf�5f�h�Qf�Qf�Qf�Qf�h���Յ�Qf�Qf�Qf�L�Qf�Qf�Qf�Qf�Qf�Qf�Qf�Qf�Qf�Qf�Qf�Qf�Qf�Qf�h�Qf�k�vh�Qf�Qf�Qf�Qf�Qf�gh�Qf�Qf�Qf�Qf�Qf�Qf��f�Qf�Qf�Qf�Qf�Qf�Qf�Qf�Qf�Qf�Qf�Qf�Qf�Qf�Qf�Qf�Qf�Qf�Qf�Qf�Qf�Qf�Qf�Qf�Qf�gh�Qf�Qf�Qf�Qf�Qf�Qf��f��l������������������������������������������������������������������l�l���������l�l�)�������_l�����������������������������@����k��U������������?��������������j�������������������������������������������������?��������������j�x�h�h�h�h�h�h�h�h�h�h�h�h�h�h�h�h�h�h�h�h�h�h�h�h�h�h�h�h�h�h�h�h��w��w�h�h�h�h��w��w�w�h�h�h�w�h�h�h�h�h�h�h�h�h�h�h�h�h�h�Pw�h�,w��e�h�h�h�h�h��e�h�h�h�h�h�h�h�h�h�h�h�h�h�h�h�h�h�h�h�h�h�h�h�h�h�h�h�h�h�h�h��e�h�h�h�h�h�h�h�m�(a�(a�(a�(a�(a�(a�(a�(a�(a�(a�(a�(a�(a�(a�(a�(a�(a�(a�(a�(a�(a�(a�(a�(a�(a�(a�(a�(a�(a�(a�(a�(a�{m��m�(a�(a�(a�(a��m��m�m�(a�(a�(a�KD�(a�(a�(a�(a�(a�(a�(a�(a�(a�(a�(a�(a�(a�(a�&j�(a�i��i�(a�(a�(a�(a�(a�bA�(a�(a�(a�(a�(a�(a��c�(a�(a�(a�(a�(a�(a�(a�(a�(a�(a�(a�(a�(a�(a�(a�(a�(a�(a�(a�(a�(a�(a�(a�(a�bA�(a�(a�(a�(a�(a�(a��c�l�fl�fl�fl�fl�fl�fl�fl�fl�fl�fl�fl�fl�fl�fl�fl�fl�fl�fl�fl�fl�fl�fl�fl�fl�fl�fl�fl�fl�fl�fl�fl�fl�xl�m�fl�fl�fl�fl�m��l��l�fl�fl�fl�l�fl�fl�fl�fl�fl�fl�fl�fl�fl�fl�fl�fl�fl�fl�p�fl�|p�Zp�fl�fl�fl�fl�fl�<p�fl�fl�fl�fl�fl�fl�-b�fl�fl�fl�fl�fl�fl�fl�fl�fl�fl�fl�fl�fl�fl�fl�fl�fl�fl�fl�fl�fl�fl�fl�fl�<p�fl�fl�fl�fl�fl�fl�-b�s�@D�@D�@D�@D�@D�@D�@D�@D�@D�@D�@D�@D�@D�@D�@D�@D�@D�@D�@D�@D�@D�@D�@D�@D�@D�@D�@D�@D�@D�@D�@D�@D�s�s�@D�@D�@D�@D�s�v�u�@D�@D�@D�s�@D�@D�@D�@D�@D�@D�@D�@D�@D�@D�@D�@D�@D�@D��u�@D�u�u�@D�@D�@D�@D�@D�su�@D�@D�@D�@D�@D�@D�Su�@D�@D�@D�@D�@D�@D�@D�@D�@D�@D�@D�@D�@D�@D�@D�@D�@D�@D�@D�@D�@D�@D�@D�@D�su�@D�@D�@D�@D�@D�@D�Su�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�mr�cr�r�r�r�r�cr�=r�r�r�r�r�q�r�r�r�r�r�r�r�r�r�r�r�r�r�r��q�r�Jn�$n�r�r�r�r�r�n�r�r�r�r�r�r��m�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�n�r�r�r�r�r�r��m�D��D��D��D��D��D��D��D��D��D��D��D��D��D��D��D��D��D��D��D��D��D��D��D��D��D��D��D��D��D��D��D��D���D��D��D��D��D�D�uD�fD��D��D��D�WD��D��D��D��D��D��D��D��D��D��D��D��D��D��D��F��D�F�ZF��D��D��D��D��D�7F��D��D��D��D��D��D�F��D��D��D��D��D��D��D��D��D��D��D��D��D��D��D��D��D��D��D��D��D��D��D��D�7F��D��D��D��D��D��D�F�d��d��d��d��d��d��d��d��d��d��d��d��d��d��d��d��d��d��d��d��d��d��d��d��d��d��d��d��d��d��d��d��d�sd�Jd��d��d��d��d�Jd� d�c��d��d��d�n��d��d��d��d��d��d��d��d��d��d��d��d��d��d��c��d��c�c��d��d��d��d��d�c��d��d��d��d��d��d�^c��d��d��d��d��d��d��d��d��d��d��d��d��d��d��d��d��d��d��d��d��d��d��d��d�c��d��d��d��d��d��d�^c�qF�F�F�F�F�F�F�F�F�F�F�F�F�F�F�F�F�F�F�F�F�F�F�F�F�F�F�F�F�F�F�F�F�PF�+F�F�F�F�F�+F�
F��E�F�F�F��E�F�F�F�F�F�F�F�F�F�F�F�F�F�F�E�F�E�pE�F�F�F�F�F�OE�F�F�F�F�F�F�.E�F�F�F�F�F�F�F�F�F�F�F�F�F�F�F�F�F�F�F�F�F�F�F�F�OE�F�F�F�F�F�F�.E�uF�G�G�G�G�G�G�G�G�G�G�G�G�G�G�G�G�G�G�G�G�G�G�G�G�G�G�G�G�G�G�G�G�LF��F�G�G�G�G��F�#F�E�G�G�G��E�G�G�G�G�G�G�G�G�G�G�G�G�G�G�2�G�F�E�G�G�G�G�G�E�G�G�G�G�G�G�qE�G�G�G�G�G�G�G�G�G�G�G�G�G�G�G�G�G�G�G�G�G�G�G�G�E�G�G�G�G�G�G�qE��G�qj�qj�qj�qj�qj�qj�qj�qj�qj�qj�qj�qj�qj�qj�qj�qj�qj�qj�qj�qj�qj�qj�qj�qj�qj�qj�qj�qj�qj�qj�qj�qj�G�xG�qj�qj�qj�qj�xG�OG�&G�qj�qj�qj�G�qj�qj�qj�qj�qj�qj�qj�qj�qj�qj�qj�qj�qj�qj��F�qj��F�F�qj�qj�qj�qj�qj�F�qj�qj�qj�qj�qj�qj�mF�qj�qj�qj�qj�qj�qj�qj�qj�qj�qj�qj�qj�qj�qj�qj�qj�qj�qj�qj�qj�qj�qj�qj�qj�F�qj�qj�qj�qj�qj�qj�mF��G�G�G�G�G�G�G�G�G�G�G�G�G�G�G�G�G�G�G�G�G�G�G�G�G�G�G�G�G�G�G�G�G�G�G�G�G�G�G�G�ZG�5G�G�G�G�G�G�G�G�G�G�G�G�G�G�G�G�G�G�G��F�G�E��F�G�G�G�G�G�F�G�G�G�G�G�G�F�G�G�G�G�G�G�G�G�G�G�G�G�G�G�G�G�G�G�G�G�G�G�G�G�F�G�G�G�G�G�G�F�F�"=�"=�"=�"=�"=�"=�"=�"=�"=�"=�"=�"=�"=�"=�"=�"=�"=�"=�"=�"=�"=�"=�"=�"=�"=�"=�"=�"=�"=�"=�"=�"=�>6�6�"=�"=�"=�"=�6�5��5�"=�"=�"=�5�"=�"=�"=�"=�"=�"=�"=�"=�"=�"=�"=�"=�"=�"=�5�"=�5�j5�"=�"=�"=�"=�"=�I5�"=�"=�"=�"=�"=�"=�.5�"=�"=�"=�"=�"=�"=�"=�"=�"=�"=�"=�"=�"=�"=�"=�"=�"=�"=�"=�"=�"=�"=�"=�"=�I5�"=�"=�"=�"=�"=�"=�.5��F�X�X�X�X�X�X�X�X�X�X�X�X�X�X�X�X�X�X�X�X�X�X�X�X�X�X�X�X�X�X�X�X���F�X�X�X�X�F�8�z8�X�X�X�k8�X�X�X�X�X�X�X�X�X�X�X�X�X�X�F�X�@F�F�X�X�X�X�X��E�X�X�X�X�X�X��E�X�X�X�X�X�X�X�X�X�X�X�X�X�X�X�X�X�X�X�X�X�X�X�X��E�X�X�X�X�X�X��E�+]�Z]�Z]�Z]�Z]�Z]�Z]�Z]�Z]�Z]�Z]�Z]�Z]�Z]�Z]�Z]�Z]�Z]�Z]�Z]�Z]�Z]�Z]�Z]�Z]�Z]�Z]�Z]�Z]�Z]�Z]�Z]�Z]�]�^X�Z]�Z]�Z]�Z]�^X�4X�
X�Z]�Z]�Z]�b�Z]�Z]�Z]�Z]�Z]�Z]�Z]�Z]�Z]�Z]�Z]�Z]�Z]�Z]��\�Z]��W��\�Z]�Z]�Z]�Z]�Z]�\�Z]�Z]�Z]�Z]�Z]�Z]�rW�Z]�Z]�Z]�Z]�Z]�Z]�Z]�Z]�Z]�Z]�Z]�Z]�Z]�Z]�Z]�Z]�Z]�Z]�Z]�Z]�Z]�Z]�Z]�Z]�\�Z]�Z]�Z]�Z]�Z]�Z]�rW�AD�$�$�$�$�$�$�$�$�$�$�$�$�$�$�$�$�$�$�$�$�$�$�$�$�$�$�$�$�$�$�$�$� �M�$�$�$�$�M�!��Z�$�$�$� �$�$�$�$�$�$�$�$�$�$�$�$�$�$� �$�AD�w �$�$�$�$�$�c �$�$�$�$�$�$�U �$�$�$�$�$�$�$�$�$�$�$�$�$�$�$�$�$�$�$�$�$�$�$�$�c �$�$�$�$�$�$�U �$C�h"�h"�h"�h"�h"�h"�h"�h"�h"�h"�h"�h"�h"�h"�h"�h"�h"�h"�h"�h"�h"�h"�h"�h"�h"�h"�h"�h"�h"�h"�h"�h"���K�h"�h"�h"�h"��K�h�K�h"�h"�h"���h"�h"�h"�h"�h"�h"�h"�h"�h"�h"�h"�h"�h"�h"���h"�$C���h"�h"�h"�h"�h"��h"�h"�h"�h"�h"�h"��h"�h"�h"�h"�h"�h"�h"�h"�h"�h"�h"�h"�h"�h"�h"�h"�h"�h"�h"�h"�h"�h"�h"�h"��h"�h"�h"�h"�h"�h"���A�"Y�"Y�"Y�"Y�"Y�"Y�"Y�"Y�"Y�"Y�"Y�"Y�"Y�"Y�"Y�"Y�"Y�"Y�"Y�"Y�"Y�"Y�"Y�"Y�"Y�"Y�"Y�"Y�"Y�"Y�"Y�"Y��P�"Y�"Y�"Y�"Y�P���"Y�"Y�"Y��P�"Y�"Y�"Y�"Y�"Y�"Y�"Y�"Y�"Y�"Y�"Y�"Y�"Y�"Y��"Y��A���"Y�"Y�"Y�"Y�"Y��P�"Y�"Y�"Y�"Y�"Y�"Y�C.�"Y�"Y�"Y�"Y�"Y�"Y�"Y�"Y�"Y�"Y�"Y�"Y�"Y�"Y�"Y�"Y�"Y�"Y�"Y�"Y�"Y�"Y�"Y�"Y��P�"Y�"Y�"Y�"Y�"Y�"Y�C.��\��2��2��2��2��2��2��2��2��2��2��2��2��2��2��2��2��2��2��2��2��2��2��2��2��2��2��2��2��2��2��2��2�,��+��2��2��2��2��+�+�+��2��2��2�+��2��2��2��2��2��2��2��2��2��2��2��2��2��2�a+��2�V+�2+��2��2��2��2��2�+��2��2��2��2��2��2�*��2��2��2��2��2��2��2��2��2��2��2��2��2��2��2��2��2��2��2��2��2��2��2��2�+��2��2��2��2��2��2�*��^�!_�!_�!_�!_�!_�!_�!_�!_�!_�!_�!_�!_�!_�!_�!_�!_�!_�!_�!_�!_�!_�!_�!_�!_�!_�!_�!_�!_�!_�!_�!_�!_��^�^�!_�!_�!_�!_�^�m^�B^�!_�!_�!_�^�!_�!_�!_�!_�!_�!_�!_�!_�!_�!_�!_�!_�!_�!_��]�!_�]�]�!_�!_�!_�!_�!_�W]�!_�!_�!_�!_�!_�!_�2]�!_�!_�!_�!_�!_�!_�!_�!_�!_�!_�!_�!_�!_�!_�!_�!_�!_�!_�!_�!_�!_�!_�!_�!_�W]�!_�!_�!_�!_�!_�!_�2]�*[�J[�J[�J[�J[�J[�J[�J[�J[�J[�J[�J[�J[�J[�J[�J[�J[�J[�J[�J[�J[�J[�J[�J[�J[�J[�J[�J[�J[�J[�J[�J[�J[�C��C�J[�J[�J[�J[��C��C�C�J[�J[�J[�C�J[�J[�J[�J[�J[�J[�J[�J[�J[�J[�J[�J[�J[�J[�C�J[�yC�cC�J[�J[�J[�J[�J[�JC�J[�J[�J[�J[�J[�J[�7C�J[�J[�J[�J[�J[�J[�J[�J[�J[�J[�J[�J[�J[�J[�J[�J[�J[�J[�J[�J[�J[�J[�J[�J[�JC�J[�J[�J[�J[�J[�J[�7C�yV�K�K�K�K�K�K�K�K�K�K�K�K�K�K�K�K�K�K�K�K�K�K�K�K�K�K�K�K�K�K�K�K��rH�K�K�K�K�rH��gH�K�K�K�2
�K�K�K�K�K�K�K�K�K�K�K�K�K�K��K�yV��K�K�K�K�K��K�K�K�K�K�K��K�K�K�K�K�K�K�K�K�K�K�K�K�K�K�K�K�K�K�K�K�K�K�K��K�K�K�K�K�K��]������������������������������������A������A��A������������������������]�������������������������������������������������+Q�W�W�W�W�W�W�W�W�W�W�W�W�W�W�W�W�W�W�W�W�W�W�W�W�W�W�W�W�W�W�W�W�.�R�W�W�W�W�R����R�W�W�W���W�W�W�W�W�W�W�W�W�W�W�W�W�W��W�+Q��W�W�W�W�W��W�W�W�W�W�W�?�W�W�W�W�W�W�W�W�W�W�W�W�W�W�W�W�W�W�W�W�W�W�W�W��W�W�W�W�W�W�?�UD�/�/�/�/�/�/�/�/�/�/�/�/�/�/�/�/�/�/�/�/�/�/�/�/�/�/�/�/�/�/�/�/�z�VC�/�/�/�/�VC�JD���/�/�/��/�/�/�/�/�/�/�/�/�/�/�/�/�/��/�UD��/�/�/�/�/��/�/�/�/�/�/�w�/�/�/�/�/�/�/�/�/�/�/�/�/�/�/�/�/�/�/�/�/�/�/�/��/�/�/�/�/�/�w�?����������������������������������?��?������?�3�%���������������������?�W������I�������e�������������������������I�������e�?�?�?�?�?�?�?�?�?�?�?�?�?�?�?�?�?�?�?�?�?�?�?�?�?�?�?�?�?�?�?�?�?�[?�%?�?�?�?�?�%?�2V�V�?�?�?�^V�?�?�?�?�?�?�?�?�?�?�?�?�?�?�U�?�U�U�?�?�?�?�?�SU�?�?�?�?�?�?�&U�?�?�?�?�?�?�?�?�?�?�?�?�?�?�?�?�?�?�?�?�?�?�?�?�SU�?�?�?�?�?�?�&U�+F���������������������������������F�E�����E��E��E�����E���������������kE��E��B�������B��������-��������������������������B��������-��S�M�M�M�M�M�M�M�M�M�M�M�M�M�M�M�M�M�M�M�M�M�M�M�M�M�M�M�M�M�M�M�M�S�G6�M�M�M�M�G6�S�6�M�M�M�6�M�M�M�M�M�M�M�M�M�M�M�M�M�M��5�M��5��5�M�M�M�M�M�5�M�M�M�M�M�M�5�M�M�M�M�M�M�M�M�M�M�M�M�M�M�M�M�M�M�M�M�M�M�M�M�5�M�M�M�M�M�M�5��G��G��G��G��G��G��G��G��G��G��G��G��G��G��G��G��G��G��G��G��G��G��G��G��G��G��G��G��G��G��G��G��G��G��G��G��G��G�G������G��G��G�\G��G��G��G��G��G��G��G��G��G��G��G��G��G��G���G��G�P��G��G��G��G��G�E��G��G��G��G��G��G�IG��G��G��G��G��G��G��G��G��G��G��G��G��G��G��G��G��G��G��G��G��G��G��G��G�E��G��G��G��G��G��G�IG�58�BJ�BJ�BJ�BJ�BJ�BJ�BJ�BJ�BJ�BJ�BJ�BJ�BJ�BJ�BJ�BJ�BJ�BJ�BJ�BJ�BJ�BJ�BJ�BJ�BJ�BJ�BJ�BJ�BJ�BJ�BJ�BJ�KP��2�BJ�BJ�BJ�BJ��2��2�8�BJ�BJ�BJ�2�BJ�BJ�BJ�BJ�BJ�BJ�BJ�BJ�BJ�BJ�BJ�BJ�BJ�BJ�2�BJ�q2�[2�BJ�BJ�BJ�BJ�BJ�B2�BJ�BJ�BJ�BJ�BJ�BJ�/2�BJ�BJ�BJ�BJ�BJ�BJ�BJ�BJ�BJ�BJ�BJ�BJ�BJ�BJ�BJ�BJ�BJ�BJ�BJ�BJ�BJ�BJ�BJ�BJ�B2�BJ�BJ�BJ�BJ�BJ�BJ�/2��9�u�u�u�u�u�u�u�u�u�u�u�u�u�u�u�u�u�u�u�u�u�u�u�u�u�u�u�u�u�u�u�u�9�9�u�u�u�u�9�9�z9�u�u�u�g9�u�u�u�u�u�u�u�u�u�u�u�u�u�u�Q9�u��9�@�u�u�u�u�u��F�u�u�u�u�u�u�D9�u�u�u�u�u�u�u�u�u�u�u�u�u�u�u�u�u�u�u�u�u�u�u�u��F�u�u�u�u�u�u�D9�A���������������������������������A�rA�����rA�RA�2A����A���������������@���@�@������@�������t@�������������������������@�������t@�0��0��0��0��0��0��0��0��0��0��0��0��0��0��0��0��0��0��0��0��0��0��0��0��0��0��0��0��0��0��0��0��0�0�0��0��0��0��0�0�s0�d0��0��0��0�R0��0��0��0��0��0��0��0��0��0��0��0��0��0��0�0��0�/����0��0��0��0��0��/��0��0��0��0��0��0��/��0��0��0��0��0��0��0��0��0��0��0��0��0��0��0��0��0��0��0��0��0��0��0��0��/��0��0��0��0��0��0��/�/��/��/��/��/��/��/��/��/��/��/��/��/��/��/��/��/��/��/��/��/��/��/��/��/��/��/��/��/��/��/��/��/���/��/��/��/��/�/����/��/��/�3��/��/��/��/��/��/��/��/��/��/��/��/��/��/����/�/����/��/��/��/��/�-.��/��/��/��/��/��/�/��/��/��/��/��/��/��/��/��/��/��/��/��/��/��/��/��/��/��/��/��/��/��/��/�-.��/��/��/��/��/��/�/��7�8�8�8�8�8�8�8�8�8�8�8�8�8�8�8�8�8�8�8�8�8�8�8�8�8�8�8�8�8�8�8�8��7�6>�8�8�8�8�6>�QA�+A�8�8�8��>�8�8�8�8�8�8�8�8�8�8�8�8�8�8�A�8��@��@�8�8�8�8�8�@�8�8�8�8�8�8�@�8�8�8�8�8�8�8�8�8�8�8�8�8�8�8�8�8�8�8�8�8�8�8�8�@�8�8�8�8�8�8�@��C�C�C�C�C�C�C�C�C�C�C�C�C�C�C�C�C�C�C�C�C�C�C�C�C�C�C�C�C�C�C�C�C�C�C�C�C�C�C�C�WC�)C�C�C�C�C�C�C�C�C�C�C�C�C�C�C�C�C�C�C��B�C�B�B�C�C�C�C�C�zB�C�C�C�C�C�C�RB�C�C�C�C�C�C�C�C�C�C�C�C�C�C�C�C�C�C�C�C�C�C�C�C�zB�C�C�C�C�C�C�RB�lN�N�N�N�N�0123456789abcdefInvalid '..'-range, no character to the left of '..'Invalid '..'-range, no character to the right of '..'Invalid '..'-range, '..'-range needs to be incrementingCan't force cut when width is zeroLength should be between 0 and %dOffset not contained in stringneedle is not a string or an integerOffset is greater than the length of haystack stringChunk length should be greater than zero'from' and 'len' should be of same type - numerical or array 'from' and 'len' should have the same number of elementsFunctionality of 'from' and 'len' as arrays is not implementedThe second argument is not an arrayPassing locale category name as string is deprecated. Use the LC_* -constants insteadInvalid locale category name %s, must be one of LC_ALL, LC_COLLATE, LC_CTYPE, LC_MONETARY, LC_NUMERIC, or LC_TIMESpecified locale name is too longSecond argument has to be greater than or equal to 0Offset should be greater than or equal to 0Offset value %ld exceeds string lengthLength should be greater than 0Length value %ld exceeds string lengthPadding string cannot be emptyPadding type has to be STR_PAD_LEFT, STR_PAD_RIGHT, or STR_PAD_BOTHOnly a single %%i or %%n token can be usedThe length of each segment must be greater than zeroThe character list cannot be emptyThe length must be greater than zeroThe start position cannot exceed initial string lengthThe length cannot exceed initial string lengthi@cannot mix "%" and "%n$" conversion specifiersBad scan conversion character "%c"Variable is assigned by multiple "%n$" conversion specifiersVariable is not assigned by any conversion specifiers"%n$" argument index out of rangeDifferent numbers of variable names and field specifiersParameter %d must be passed by referenceUnmatched [ in format string�v��v�n�n�n�n�n�n�n�n�n�n�n�n�n�n�n�n�n�n�w�n�n��o�n�n�n�n�n�n�n�hw��v��v��v��v�n�v�n�n�n�n�&w�w�n�n�n�v�n�n�n�n�w�o�q�q�q�q�q�q�q�u�q�q�n�q�q�<n�q�q�q�q�q�q�q�q�q�u�+t�xr�+t�xr�xr�Ct�t�t�t�t�t�t�t�s�s�xr�xr�xr�xr�xr�xr�xr�>r�>r�>r�>r�>r�>r�xr�xr�xr�xr�xr�xr�xr�xr�xr�xr�xr�xr�xr�xr�xr�xr�xr�|t�xr�xr�xr�xr�xr�xr�xr�xr�>r�>r�>r�>r�>r�>r�xr�xr�xr�xr�xr�xr�xr�xr�xr�xr�xr�xr�xr�xr�xr�xr�xr�|t�r�Xp�r�r�Xp�r�r�r�r�r�r�r�r�r�r�Xp�Xp�Xp�Xp�Xp�Xp�Xp�Xp�Xp�Xp�Xp�p�Xp�Xp�Xp�Xp�Xp�Xp�Xp�Xp�Xp�Xp�Xp�Xp�Xp�Xp�Xp�Xp�Xp�Xp�Xp�Xp�Xp�Xp�Xp�Xp�Xp�Xp�Xp�Xp�Xp�Xp�Xp�p�LOG_EMERGLOG_ALERTLOG_CRITLOG_ERRLOG_WARNINGLOG_NOTICELOG_INFOLOG_DEBUGLOG_KERNLOG_USERLOG_MAILLOG_DAEMONLOG_AUTHLOG_SYSLOGLOG_LPRLOG_NEWSLOG_UUCPLOG_CRONLOG_AUTHPRIVLOG_LOCAL0LOG_LOCAL1LOG_LOCAL2LOG_LOCAL3LOG_LOCAL4LOG_LOCAL5LOG_LOCAL6LOG_LOCAL7LOG_PIDLOG_CONSLOG_ODELAYLOG_NDELAYLOG_NOWAITLOG_PERROROnly one argument expected__PHP_Incomplete_Classunknown typeInvalid type؞���(��P��x����x����Cannot convert to resource type|sb%s%08x%05x%.8F%s%08x%05xUnable to parse URLpassfragmentInvalid URL component identifier %ldString overflow, max length is %d���ȸ�H��h������`��0��0123456789ABCDEF__sleep__PHP_Incomplete_Class_Name%*c%sbool(%s)
%sNULL
%sint(%ld)
%sfloat(%.*G)
%sstring(%d) ""
*RECURSION*
%sarray(%d) {
%sobject(%s)#%d (%d) {
%sresource(%ld) of type (%s)
%sUNKNOWN:0
%*c[%ld]=>
%*c["%s:protected:private%*c[""]=>
%sbool(%s) refcount(%u)
%sNULL refcount(%u)
%slong(%ld) refcount(%u)
%sdouble(%.*G) refcount(%u)
" refcount(%u)
%sarray(%d) refcount(%u){
%.*H'\' . "\0" . '__sleep should return an array only containing the names of instance-variables to serialize"%s" returned as member variable from __sleep() but does not exist%sobject(unknown class)#%d (%d) {
%sresource(%ld) of type (%s) refcount(%u)
%sobject(%s)#%d (%d) refcount(%u){
$��,��$��T����T��\���
�
�(�h����
�x
�X����H�p���T�4���T���4�::__set_state(ar#N#<=>===!=<>ASSERT_ACTIVEASSERT_CALLBACKASSERT_BAILASSERT_WARNINGASSERT_QUIET_EVALassert codeFailure evaluating code: %s%sAssertion "%s" failedAssertion failedUnknown value %ldassert.activeassert.bailassert.warningassert.callbackassert.quiet_eval/builddir/build/BUILD/php-5.2.17/ext/standard/assert.c�N�N�(N��M�M�XM�sslllArgument string(s) too longThe general Levenshtein support is not there yetThe script tried to execute a method or access a property of an incomplete object. Please ensure that the class definition "%s" of the object you are trying to operate on was loaded _before_ unserialize() gets called or provide a __autoload() function to load the class definition fieldseturl_rewriter.tags�`�`�@i��g�Xc�0d�����������������������������������8�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������a=href,area=href,frame=src,form=,fieldset=<input type="hidwa+FTP server error %d:%sQUIT
EPSV
PASV
tcp://%s:%dAUTH TLS
AUTH SSL
Server doesn't support FTPS.Unable to activate SSL modePBSZ 0
PROT P
Invalid login %sUSER %s
USER anonymous
Invalid password %sPASS %s
PASS anonymous
TYPE A
NLST %s
FTP server reports %sUnable to connect to %sInvalid path provided in %sRMD %s
DELE %s
Error Deleting file: %sMKD %s
CWD %s
RNFR %s
Error Renaming file: %sRNTO %s
TYPE I
SIZE %s
MDTM %s
Unknown file open modeoverwriteREST %ld
ftpdirFTP does not support simultaneous read/write connectionsFTP proxy may only be used in read modeRemote file already exists and overwrite context option not specifiedUnable to resume from offset %dFailed to set up data channel: %sHTTP invalid response format (space in header name)!HTTP invalid response format (no colon in header line)!HTTP Location header size is over the limit of %d bytesRedirection limit reached, abortingHTTP wrapper does not support writeable connectionsHTTP wrapper full URI path does not allow CR or LF charactersCannot connect to HTTPS server through proxyCannot construct User-agent headerContent-Type: application/x-www-form-urlencoded
Content-type not specified assuming application/x-www-form-urlencodedHTTP request failed, unexpected end of socket!HTTP invalid header name (cannot start with CR character)!HTTP invalid response format (folding header at the start)!Location:follow_locationContent-Type:Content-Length:Transfer-Encoding:Chunkedauto_decodedechunkawx+request_fulluri%s://%s:%d HTTP/ HTTP/1.0
content-length:content-type:user-agent:host:from:authorization:Authorization: Basic %s
From: %s
Host: %s:%i
Host: %s
User-Agent: %s
Content-Length: %d
ignore_errorsHTTP request failed!http://https://ftp://ftps://%s://%s:%d%s%s://%s%sInvalid redirect URL! %sHTTP request failed! %sUnable to create filter (%s)php:///maxmemory:Max memory must be >= 0filter//resource=No URL resource specifiedread=write=Invalid php:// URL specifiedPHPInputOutputURL file-access is disabled in the server configuration<h1>PHP Credits</h1>
PHP Credits
PHP GroupLanguage Design &amp; ConceptLanguage Design & ConceptPHP 5 AuthorsContributionAndi Gutmans, Zeev SuraskiExtension Module APIUNIX Build and ModularizationWin32 PortWez Furlong, Sara GolemonStreams Abstraction LayerPHP Data Objects LayerSAPI ModulesSascha SchumannAOLserverApache 1.3 (apache_hooks)Apache 1.3Apache 2.0 FilterApache 2.0 HandlerDavid HedborCaudium / RoxenCGI / FastCGICLIContinuityEdin KadribasicEmbedISAPINSAPIThies C. ArntzenphttpdHolger Zimmermannpi3webHarald RadiSendmail MilterthttpdtuxAlex WaughWebJamesModule AuthorsModuleAssertAndi GutmansBC MathSterling HughesBzip2CalendarWez FurlongCOM and .NetHartmut HolzgraefeDerick RethansDate/Time SupportDBAJim WinsteaddBaseWez Furlong, Frank M. KromannDB-LIB (MS SQL, Sybase)DOMFBSQLUwe SteinmannFDFArd BiesheuvelStefan Esser, Andrew SkalskiGD imagingAlex PlotnickGetTextStanislav MalyshevGNU GMP supportIconvIMAPInput FilterInterBaseOmar KilaniJSONLIBXMLmcryptmime_magicDave Hayden, Frank M. KromannMINGmSQLMS SQLTsukada Takuya, Rui HirokawaMultibyte String FunctionsmySQL driver for PDOMySQLiMySQLncursesOCI8ODBC driver for PDOODBCOpenSSLOracle (OCI) driver for PDOJason GreeneAndrei ZmievskiPerl Compatible RegexpsPHP Data ObjectsPHP hashKristian KoehntoppPosixPostgreSQL driver for PDOPostgreSQLVlad KrupinPspellReadlineKristian K�hntoppRecodeSessionsShared Memory OperationsSNMPSOAPSocketsMarcus BoergerSQLite 3.x driver for PDOSQLiteSybase-CTSybase-DBSystem V Message based IPCTom MaySystem V SemaphoresChristian CartusSystem V Shared MemorytidytokenizerWDDXRob RichardsXMLReaderDan LibbyxmlrpcXMLWriterXSLPierre-Alain JoyeZipZlibPHP DocumentationPhilip OlsonUser Note MaintainersOther ContributorsPHP Quality Assurance TeamPHP Website Team</div></body></html>
Thies C. Arntzen, Stig Bakken, Shane Caraveo, Andi Gutmans, Rasmus Lerdorf, Sam Ruby, Sascha Schumann, Zeev Suraski, Jim Winstead, Andrei ZmievskiAndi Gutmans, Rasmus Lerdorf, Zeev SuraskiZend Scripting Language EngineAndi Gutmans, Zeev Suraski, Andrei ZmievskiStig Bakken, Sascha Schumann, Jani TaskinenShane Caraveo, Zeev Suraski, Wez FurlongAndi Gutmans, Shane Caraveo, Zeev SuraskiServer API (SAPI) Abstraction LayerWez Furlong, Marcus Boerger, Sterling Hughes, George Schlossnagle, Ilia AlshanetskyRasmus Lerdorf, Zeev Suraski, Stig Bakken, David Sklar, George Schlossnagle, Lukas SchroederRasmus Lerdorf, Zeev Suraski, Stig Bakken, David SklarSascha Schumann, Aaron BannertIan Holsman, Justin Erenkrantz (based on Apache 2.0 Filter code)Rasmus Lerdorf, Stig Bakken, Shane Caraveo, Dmitry StogovEdin Kadribasic, Marcus Boerger, Johannes SchlueterAlex Leigh (based on nsapi code)Jayakumar Muthukumarasamy, Uwe SchindlerShane Caraveo, Colin Viebrock, Hartmut Holzgraefe, Wez FurlongSascha Schumann, Marcus BoergerChristian Stocker, Rob Richards, Marcus BoergerRasmus Lerdorf, Marcus BoergerFirebird/InterBase driver for PDORasmus Lerdorf, Stig Bakken, Jim Winstead, Jouni Ahto, Ilia Alshanetsky, Pierre-Alain Joye, Marcus BoergerRui Hirokawa, Stig Bakken, Moriyoshi Koizumi Rex Logan, Mark Musone, Brian Wang, Kaj-Michael Lang, Antoni Pamies Olive, Rasmus Lerdorf, Andrew Skalski, Chuck Hagenbuch, Daniel R KalowskyRasmus Lerdorf, Derick Rethans, Pierre-Alain Joye, Ilia AlshanetskyJouni Ahto, Andrew Avdeev, Ard BiesheuvelAmitay Isaacs, Eric Warnke, Rasmus Lerdorf, Gerrit Thomson, Stig VenaasChristian Stocker, Rob Richards, Marcus Boerger, Wez Furlong, Shane CaraveoSascha Schumann, Derick RethansGeorge Schlossnagle, Wez Furlong, Ilia AlshanetskyZak Greant, Georg Richter, Andrey Hristov, Ulf WendelZeev Suraski, Zak Greant, Georg RichterIlia Alshanetsky, Wez Furlong, Hartmut Holzgraefe, Georg RichterStig Bakken, Thies C. Arntzen, Andy Sautins, David Benson, Maxim Maletsky, Harald Radi, Antony Dovgal, Andi Gutmans, Wez FurlongStig Bakken, Andreas Karajannis, Frank M. Kromann, Daniel R. KalowskyStig Venaas, Wez Furlong, Sascha KettlerSara Golemon, Rasmus Lerdorf, Stefan Esser, Michael WallnerEdin Kadribasic, Ilia AlshanetskyJouni Ahto, Zeev Suraski, Yasuo Ohgaki, Chris Kings-LynneMarcus Boerger, Timm Friebe, George Schlossnagle, Andrei Zmievski, Johannes SchlueterSascha Schumann, Andrei ZmievskiSlava Poliakov, Ilia AlshanetskySterling Hughes, Marcus Boerger, Rob RichardsRasmus Lerdorf, Harrie Hazewinkel, Mike Jackson, Steven Lawrance, Johann HanneBrad Lafountain, Shane Caraveo, Dmitry StogovChris Vandomelen, Sterling Hughes, Daniel Beulshausen, Jason GreeneWez Furlong, Tal Peer, Marcus Boerger, Ilia AlshanetskyZeev Suraski, Tom May, Timm FriebeJohn Coggeshall, Ilia AlshanetskyAndrei Zmievski, Johannes SchlueterStig Bakken, Thies C. Arntzen, Sterling HughesRob Richards, Pierre-Alain JoyeChristian Stocker, Rob RichardsRasmus Lerdorf, Stefan Roehrich, Zeev Suraski, Jade NicolettiMehdi Achour, Friedhelm Betz, Antony Dovgal, Nuno Lopes, Hannes Magnusson, Georg Richter, Damien Seguy, Jakub VranaFriedhelm Betz, Etienne Kneuss, Nuno Lopes, Hannes Magnusson, Felipe Pena, Maciek Sokolewicz, Daniel P. BrownPreviously active authors, editors and other contributors are listed in the manual.Ilia Alshanetsky, Joerg Behrens, Antony Dovgal, Stefan Esser, Moriyoshi Koizumi, Magnus Maatta, Sebastian Nohn, Derick Rethans, Melvyn Sopacua, Jani Taskinen, Pierre-Alain Joye, Dmitry Stogov, Felipe PenaRasmus Lerdorf, Hannes Magnusson, Philip Olsonbody {background-color: #ffffff; color: #000000;}
body, td, th, h1, h2 {font-family: sans-serif;}
pre {margin: 0px; font-family: monospace;}
a:link {color: #000099; text-decoration: none; background-color: #ffffff;}
a:hover {text-decoration: underline;}
table {border-collapse: collapse;}
.center {text-align: center;}
.center table { margin-left: auto; margin-right: auto; text-align: left;}
.center th { text-align: center !important; }
td, th { border: 1px solid #000000; font-size: 75%; vertical-align: baseline;}
.e {background-color: #ccccff; font-weight: bold; color: #000000;}
.h {background-color: #9999cc; font-weight: bold; color: #000000;}
.v {background-color: #cccccc; color: #000000;}
.vr {background-color: #cccccc; text-align: right; color: #000000;}
img {float: right; border: 0px;}
hr {width: 600px; background-color: #cccccc; border: 0px; height: 1px; color: #000000;}
h1 {font-size: 150%;}
h2 {font-size: 125%;}
.p {text-align: left;}
Bad unserialize datadefined (%s) but not foundClass %s has no unserializer-INF__wakeupErroneous data format for unserializing '%s'Unexpected end of serialized data0123456789_abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ�����������������������������������������������������������������������������������������������������������������������������Function %s() hasn't defined the class it was called forInsufficient data for unserializing - %ld required, %ld presentP������������������������P������������������������������������@����������������������������0��������`��������������������������������Pathname is invalidProject identifier is invalidftok() failed - %soncloseoncreatezoObject has no bucket propertyuserfilter.bucket brigadeuserfilter.bucketphp_user_filteruserfilter.filterPSFS_PASS_ONPSFS_FEED_MEPSFS_ERR_FATALPSFS_FLAG_NORMALPSFS_FLAG_FLUSH_INCPSFS_FLAG_FLUSH_CLOSEdatalenFilter name cannot be emptyClass name cannot be emptyuser-filteronCreateonCloseconsumedclosingfailed to call filter functionUnprocessed filter buckets remaining on input brigadecannot use a user-space filter with a persistent streamErr, filter "%s" is not in the user-filter map, but somehow the user-filter-factory was invoked for it!?user-filter "%s" requires class "%s", but that class is not definedString too long, max length is %dThe given parameter is not a valid uuencoded string�G�z�?@�?H�z�G�?@M��L�PL�0L�N�M��M�n�Tn��o��m�o�n�Do�0123456789ABCDEF@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@>@@@?456789:;<=@@@�@@@	

@@@@@@ !"#$%&'()*+,-./0123@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/Failed allocating %zd bytesbase64-encodebase64-decodequoted-printable-encodequoted-printable-decodeforce-encode-firstconvert.*string.strip_tagsstring.tolowerstring.toupperstring.rot13stream filter (%s): invalid filter parameterstream filter (%s): invalid byte sequencestream filter (%s): insufficient bufferstream filter (%s): unexpected end of streamstream filter (%s): unknown errorstream filter (%s): unexpected octet valuesexitcodesaz|s!a!a!unable to create pipe %sdup2-c/bin/shfork failed - %sdescriptor spec must be an integer indexed arrayunable to dup File-Handle for descriptor %ld - %sDescriptor item must be either an array or a File-HandleMissing handle qualifier in arrayMissing mode parameter for 'pipe'Missing file name parameter for 'file'Missing mode parameter for 'file'pty pseudo terminal not supported on this system%s is not a valid descriptor spec/modefailed to call user notifierrs|lzs|zzd!lrstream_socket_client__%sunable to connect to %s (%s)s|zzlrr|dzaccept failed: %srs|lsrl|lzrr|lltimed_outblockedwrapper_datawrapper_typestream_typeunread_bytesseekablea!a!a!Z!|lNo stream arrays were passedrssznotificationrl|srb|lroptions should have the form ["wrappername"]["optionname"] = $valuefailed to create sockets: [%d]: %sFailed to parse `%s' into a valid network addressThe seconds parameter must be greater than 0The microseconds parameter must be greater than 0unable to select [%d]: %s (max_fd=%d)Invalid stream/context parametercalled with wrong number or type of parameters; please RTMInvalid resource given, not a stream filterUnable to flush filter, not removingCould not invalidate filter, not removingThe maximum allowed length must be greater than or equal to zeroWhen enabling encryption you must specify the crypto typearg_separator.output%5Dz|ssError traversing form data arrayParameter 1 expected to be Array or Object.  Incorrect value givenTokenizer Supporttoken_get_alltoken_nameT_REQUIRE_ONCET_REQUIRET_INCLUDE_ONCET_INCLUDET_LOGICAL_ORT_LOGICAL_XORT_LOGICAL_ANDT_PRINTT_SR_EQUALT_SL_EQUALT_XOR_EQUALT_OR_EQUALT_AND_EQUALT_MOD_EQUALT_CONCAT_EQUALT_DIV_EQUALT_MUL_EQUALT_MINUS_EQUALT_PLUS_EQUALT_BOOLEAN_ORT_BOOLEAN_ANDT_IS_NOT_IDENTICALT_IS_IDENTICALT_IS_NOT_EQUALT_IS_EQUALT_IS_GREATER_OR_EQUALT_IS_SMALLER_OR_EQUALT_SRT_SLT_INSTANCEOFT_UNSET_CASTT_BOOL_CASTT_OBJECT_CASTT_ARRAY_CASTT_STRING_CASTT_DOUBLE_CASTT_INT_CASTT_DECT_INCT_CLONET_NEWT_EXITT_IFT_ELSEIFT_ELSET_ENDIFT_LNUMBERT_DNUMBERT_STRING_VARNAMET_VARIABLET_NUM_STRINGT_INLINE_HTMLT_CHARACTERT_BAD_CHARACTERT_ENCAPSED_AND_WHITESPACET_CONSTANT_ENCAPSED_STRINGT_ECHOT_DOT_WHILET_ENDWHILET_FORT_ENDFORT_FOREACHT_ENDFOREACHT_DECLARET_ENDDECLARET_AST_SWITCHT_ENDSWITCHT_CASET_DEFAULTT_BREAKT_CONTINUET_FUNCTIONT_CONSTT_RETURNT_TRYT_CATCHT_THROWT_USET_GLOBALT_PUBLICT_PROTECTEDT_FINALT_STATICT_VART_UNSETT_ISSETT_EMPTYT_HALT_COMPILERT_CLASST_EXTENDST_IMPLEMENTST_OBJECT_OPERATORT_DOUBLE_ARROWT_LISTT_ARRAYT_CLASS_CT_METHOD_CT_FUNC_CT_LINET_COMMENTT_DOC_COMMENTT_OPEN_TAGT_OPEN_TAG_WITH_ECHOT_CLOSE_TAGT_WHITESPACET_START_HEREDOCT_END_HEREDOCT_DOLLAR_OPEN_CURLY_BRACEST_CURLY_OPENT_PAAMAYIM_NEKUDOTAYIMT_DOUBLE_COLONUNKNOWN���l��d��\��T��L��D��<��4��,��$�������������������������������������������������|��t��l��d��\��T��L��D��<��4��,��$�������������������������������������������������|��t��l��d��\��T��L��D��<��4��,��$�������������������������������������������������|��t��l��d��\��T��L��D��<��4��,��$������������������������������UTF-8XML_ERROR_NONEXML_ERROR_NO_MEMORYXML_ERROR_SYNTAXXML_ERROR_NO_ELEMENTSXML_ERROR_INVALID_TOKENXML_ERROR_UNCLOSED_TOKENXML_ERROR_PARTIAL_CHARXML_ERROR_TAG_MISMATCHXML_ERROR_DUPLICATE_ATTRIBUTEXML_ERROR_PARAM_ENTITY_REFXML_ERROR_UNDEFINED_ENTITYXML_ERROR_ASYNC_ENTITYXML_ERROR_BAD_CHAR_REFXML_ERROR_BINARY_ENTITY_REFXML_ERROR_MISPLACED_XML_PIXML_ERROR_UNKNOWN_ENCODINGXML_ERROR_INCORRECT_ENCODINGXML_OPTION_CASE_FOLDINGXML_OPTION_TARGET_ENCODINGXML_OPTION_SKIP_TAGSTARTXML_OPTION_SKIP_WHITEXML_SAX_IMPLXML SupportXML Namespace Supportlibxml2 VersionArgument 2 has wrong typeXML ParserUnknown optionUnable to call handler %s()Unable to call handlerUS-ASCIIcompletexml_parser_createxml_parser_create_nsxml_set_objectxml_set_element_handlerxml_set_default_handlerxml_set_notation_decl_handlerxml_parsexml_parse_into_structxml_get_error_codexml_error_stringxml_get_current_line_numberxml_get_current_column_numberxml_get_current_byte_indexxml_parser_freexml_parser_set_optionxml_parser_get_optionutf8_encodeutf8_decodeXML_ERROR_JUNK_AFTER_DOC_ELEMENTXML_ERROR_RECURSIVE_ENTITY_REFXML_ERROR_ATTRIBUTE_EXTERNAL_ENTITY_REFXML_ERROR_UNCLOSED_CDATA_SECTIONXML_ERROR_EXTERNAL_ENTITY_HANDLINGUnsupported target encoding "%s"Parser cannot be freed while it is parsing.Unable to call handler %s::%s()unsupported source encoding "%s"xml_set_character_data_handlerxml_set_processing_instruction_handlerxml_set_unparsed_entity_decl_handlerxml_set_external_entity_ref_handlerxml_set_start_namespace_decl_handlerxml_set_end_namespace_decl_handler xmlns:%s="%s" xmlns="%s" %s:%s=" %s="</%s:%s></%s> %s="%s"<?%s %s?>No errorInvalid document startEmpty documentInvalid document endInvalid character referenceInvalid characterXML_ERR_CHARREF_AT_EOFXML_ERR_CHARREF_IN_PROLOGXML_ERR_CHARREF_IN_EPILOGXML_ERR_CHARREF_IN_DTDXML_ERR_ENTITYREF_AT_EOFXML_ERR_ENTITYREF_IN_PROLOGXML_ERR_ENTITYREF_IN_EPILOGXML_ERR_ENTITYREF_IN_DTDPEReference in prologPEReference in epilogXML_ERR_ENTITYREF_NO_NAMEEntityRef: expecting ';'PEReference: no namePEReference: expecting ';'Undeclared entity errorUndeclared entity warningUnparsed EntityXML_ERR_ENTITY_IS_EXTERNALXML_ERR_ENTITY_IS_PARAMETERUnknown encodingUnsupported encodingNamespace declaration errorEntityValue: " or ' expected< in attributeAttribute not startedAttribute not finishedAttribute without valueAttribute redefinedSystemLiteral " or ' expectedComment not finishedNOTATION: Name expected hereXML_ERR_MIXED_NOT_FINISHEDELEMENT in DTD not startedELEMENT in DTD not finishedXML declaration not startedXML declaration not finishedXML_ERR_CONDSEC_NOT_STARTEDDOCTYPE not finishedCDATA not finishedReserved XML NameSpace requiredXML_ERR_SEPARATOR_REQUIREDXML_ERR_NAME_REQUIRED< required> required</ required= requiredMismatched tagTag not finishedInvalid XML encoding nameInvalid encodingEntity value requiredchunk is not well balancedXML_ERR_ENTITY_CHAR_ERRORXML_ERR_ENTITY_BOUNDARYInvalid URIFragment not allowedXML_WAR_CATALOG_PIXML_ERR_NO_DTDXML_WAR_UNKNOWN_VERSIONXML_WAR_LANG_VALUEXML_WAR_NS_URIXML_WAR_NS_URI_RELATIVENot well-formed (invalid token)Invalid hexadecimal character referenceInvalid decimal character referencePEReference at end of documentPEReference: forbidden within markup decl in internal subsetString not started expecting ' or "String not closed expecting " or 'Processing Instruction not startedProcessing Instruction not finished'>' required to close NOTATION declaration'(' required to start ATTLIST enumerationMixedContentDecl : '|' or ')*' expectedXML conditional section not closedContent error in the external subsetSequence ']]>' not allowed in contentNmToken expected in ATTLIST enumerationMixedContentDecl : '#PCDATA' expectedSYSTEM or PUBLIC, the URI is missingPUBLIC, the Public Identifier is missingstandalone accepts only 'yes' or 'no'Comment must not contain '--' (double-hyphen)external parsed entities cannot be standaloneXML conditional section '[' expectedextra content at the end of well balanced chunkPEReferences forbidden in internal subsetDetected an entity reference loopconditional section INCLUDE or IGNORE keyword expectedVersion in XML Declaration missingMissing encoding in text declarationOnSTDOUTOffd-M-Y H:i:s[%s] %s%sCatchable fatal errorFatal errorParse errorNoticeStrict StandardsPHP %s:  %s in %s on line %derror_prepend_stringerror_append_string%s: %s in %s on line %d
%s
%s: %s in %s on line %d
%sphp_errormsginclude_oncerequire_oncePHP ShutdownPHP Startup%s%s%s(%s)function.%s%s.%s%s [%s%s%s]: %s%s: %sfunction.includefunction.require[%s]  Script:  '%s'
[null]  Script:  '%s'
%s,%sX-Powered-By: PHP/5.2.17index pointerPHP_VERSIONPHP_MAJOR_VERSIONPHP_MINOR_VERSIONPHP_RELEASE_VERSIONPHP_EXTRA_VERSIONPHP_VERSION_IDPHP_ZTSPHP_DEBUGLinuxPHP_OSPHP_SAPIDEFAULT_INCLUDE_PATH/opt/alt/php52/usr/share/pearPEAR_INSTALL_DIRPEAR_EXTENSION_DIRPHP_EXTENSION_DIR/opt/alt/php52PHP_PREFIX/opt/alt/php52/usr/binPHP_BINDIR/opt/alt/php52/usr/lib64PHP_LIBDIR/opt/alt/php52/usr/sharePHP_DATADIRPHP_SYSCONFDIR/varPHP_LOCALSTATEDIRPHP_CONFIG_FILE_PATH/opt/alt/php52/link/confPHP_CONFIG_FILE_SCAN_DIRsoPHP_SHLIB_SUFFIXPHP_EOLPHP_INT_MAXPHP_INT_SIZEUnable to start PHP ticks
disable_functionsdisable_classesBasic Digest highlight.bg#FFFFFF#FF8000#0000BB#000000#007700#DD0000asp_tagsdisplay_errorsdisplay_startup_errorsenable_dldocref_rootdocref_exthtml_errorsxmlrpc_errorsxmlrpc_error_numbermax_input_timelog_errorslog_errors_max_len1024ignore_repeated_errorsignore_repeated_sourcereport_memleaksreport_zend_debugmagic_quotes_sybaseoutput_bufferingregister_argc_argvregister_globalsregister_long_arraysauto_globals_jitsafe_mode_include_dirsafe_mode_gidshort_open_tagsql.safe_modetrack_errorsy2k_complianceunserialize_callback_funcserialize_precisionarg_separator.inputauto_append_fileauto_prepend_filedoc_rootdefault_charsetdefault_mimetypeopen_basedirsafe_mode_exec_dirupload_max_filesize2Mpost_max_sizeupload_tmp_dirmax_input_nesting_leveluser_dirvariables_orderEGPCSSMTPlocalhostsmtp_portmail.add_x_header128Msendmail_from/usr/sbin/sendmail -t -i max_file_uploadsmax_multipart_body_partsallow_url_fopenallow_url_includemax_input_vars1000always_populate_raw_post_datarealpath_cache_size16Krealpath_cache_ttl120<?xml version="1.0"?><methodResponse><fault><value><struct><member><name>faultCode</name><value><int>%ld</int></value></member><member><name>faultString</name><value><string>%s:%s in %s on line %d</string></value></member></struct></value></fault></methodResponse>%s<br />
<b>%s</b>:  %s in <b>%s</b> on line <b>%d</b><br />
%sHTTP/1.0 500 Internal Server Error/builddir/build/BUILD/php-5.2.17/main/main.c%s [<a href='%s%s%s'>%s</a>]: %sFailed opening '%s' for inclusion (include_path='%s')Failed opening required '%s' (include_path='%s')Failed opening '%s' for highlightingCannot set time limit in safe modePHP:  Unable to initialize stream url wrappers.
PHP:  Unable to initialize info phpinfo logos.
.:/opt/alt/php52/usr/share/pear:/opt/alt/php52/usr/share/php/opt/alt/php52/usr/lib64/php/modulesUnable to start builtin modules
allow_call_time_pass_reference
:�p>�>�
:��>�
:�
:�
:��>�
:�
:�
:�
:�
:�
:�
:�>�(null)Illegal length modifier specified '%c' in s[np]printf call�m�l�l�m�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�dm�l�Lm�l�,m�l�l�l�l�l�l�l�m�l�l�l�l�l�l�l�p�p�p�p�p�p�p�p�p�p�p�p�p�p�p�p�p�p�p�p�p�p�p�p�p�p�p�p�p�p�p�p�p�p�p�p�\o�p�p�p�p�p�p�p�p�p�p�p�p�p�p�p�p�p�p�p�p�p�p�p�p�p�p�p�p�p�p�p�dn�dn�\p�\p�p�p�p�p�p�p�p�p�p�p�p�p�p�p�p�<p�p�p�p�p�p�p�p�p�p�p�p�r�dn�dn�\p�p�r�p�\p�p�p�4n�n�m�p�p�,m�p�m�,m�p�<p�p�s�Tq�Tq�s�Tq�o��w��s�q�q��s�q��n��w�s�Sq�Sq�s�Sq��n�Mw��s�r�r��s�r�n�infD�H~�H~�,�H~�H~�H~�H~�H~�H~�H~�H~�H~�H~�H~�H~�H~�H~�H~�H~�H~�H~�H~�H~�H~�H~�H~�H~�H~�H~�H~��H~��~�H~��H~�H~�H~�H~�H~�H~�H~��H~�H~�H~�H~�H~��~�}�������������������������������������������������������������������������<��������������������������������������������������������������������,��,������������������������������������������������������܀�,������,����,����,����������$����������~��������������������Č���Ѓ�Ѓ���Ѓ�t����4��7��7��4��7��X������y��y����y��<��Unable to access %sSAFE MODE Restriction in effect.  The script whose uid/gid is %ld/%ld is not allowed to access %s owned by uid/gid %ld/%ldSAFE MODE Restriction in effect.  The script whose uid is %ld is not allowed to access %s owned by uid %ld%s%c%s%c%sopen_basedir restriction in effect. File(%s) is not within the allowed path(s): (%s)%s/%s path was truncated to %dzend_extensionno valueMaster ValueLocal ValueDirective,
PHPRCphp-%s.inicfg_file_pathPHP_INI_SCAN_DIRphp.ini:POST Content-Length of %ld bytes exceeds the limit of %ld bytesActual POST length does not match Content-Length, and exceeds %ld bytesUnsupported content type:  '%s'Cannot modify header information - headers already sent by (output started at %s:%d)Cannot modify header information - headers already sentHeader may not contain more than a single header, new line detected.;charset=Content-Typeimage/Content-type: WWW-Authenticaterealm="\1-%ld"/realm="(.*?)"/irealm=\1-%ld\2/realm=([^\s]+)(.*)/irealm realm="%ld"WWW-Authenticate: %sHTTP/1.0 %d XUPLOAD_ERR_OKUPLOAD_ERR_INI_SIZEUPLOAD_ERR_FORM_SIZEUPLOAD_ERR_PARTIALUPLOAD_ERR_NO_FILEUPLOAD_ERR_NO_TMP_DIRUPLOAD_ERR_CANT_WRITEUPLOAD_ERR_EXTENSIONboundary,;
--%sContent-DispositionMAX_FILE_SIZE%s_name[%s]%s_name%s[name][%s]%s[name]%s_type[%s]%s[type][%s]%s_type%s[type]%s[tmp_name][%s]%s[tmp_name]%s[error][%s]%s[error]%s_size[%s]%s[size][%s]%s_size%s[size]Missing boundary in multipart/form-data POST dataInvalid boundary in multipart/form-data POST dataBoundary too large in multipart/form-data POST dataMultipart body parts limit exceeded %d. To increase the limit change max_multipart_body_parts in php.ini.Maximum number of allowable file uploads has been exceededFile Upload Mime headers garbledFile upload error - unable to create a temporary filemultipart/form-dataapplication/x-www-form-urlencodedargc__Host-__Secure-PHP_AUTH_DIGESTREQUEST_TIMEInput variable nesting level exceeded %ld. To increase the limit change max_input_nesting_level in php.ini.Input variables exceeded %ld. To increase the limit change max_input_vars in php.ini.PHPB8B5F2A0-3C92-11d3-A3A9-4C7B08C10000;t)�'�)�'�(�'�'�'�'�'�'�'�'�$(�'�'�&�'�'�'�'�'�'�'�'�'�'�'�'�'�'�'�t)�'�)�'�(�'�'�'�'�'�'�'�'�$(�'�'�&�php_network_getaddresses: getaddrinfo failed: %sphp_network_getaddresses: getaddrinfo failed (null result pointer) errno=%dphp_network_getaddresses: getaddrinfo failed (null result pointer)failed to bind to '%s:%d', system said: %sYou MUST recompile PHP with a larger value of FD_SETSIZE.
It is set to %d, but you have descriptors numbered at least as high as %d.
 --enable-fd-setsize=%d is recommended, but you may want to set it
to equal the maximum number of open files supported by your system,
in order to avoid seeing this error again at a later date.Failed to resolve `%s': %sInvalid IP Address: %sn%s%s%sXXXXXXTMPDIRtmp.r+bGIF89axC�j��97G(%*��⡤���粴�CBX������RRr�����ު��LKc[\����;8<nq�jm�ac�uy�{~����ƌ�����kk�NNkqt�zz����rt�ts����Z[~���{}����mp�rv���Ȼ��tx���������꒒�df�kn���Δ��.+/SQh���lj�\[v���fh�hj����1.9��Ӝ��UVx��ʖ�Ł��gi�?=P���^`���Ȍ�����WX|������" lo�����w{�vx�_^}���no�sw�"������YVW����������������trs��񞜝���KHI���gde����GF_��훜�ik�os������ٸ�ך�̧����뚜�fd�hg����np����������il����!�j,xC��j�����������������������m?ms����?yy6>qLL>>
2A<B-I"99"/)�¡
}MPP}|QQ*r��t��B3-�W(%	���&q|.llu.��2�"�,@��7�᤬@�F�	?;�L���E5Al`C�G$�5�@�ɓ(S�\yr\	v�A�+CD\��	�/�0B�ˣH����&�#G�XrăΝ�~ht�##X(K6�:,�@��)3��.2��@u
HR��_�`,Q���<	��e�|�r�˘1|���
֬Q�A��<F���d��p�M�K��J�,Ys�;�Ea���+1p�¼���ȓv�]�Ț��~��cD�W� Ӽ���^yp @p@�0�D�WS�9�)���p&s��2�J]��\�R1��C�Q�24�@I�@b��f%&�@'I��`�')7�_ਔE�@��3����5�$�G�Ƅb\�$�,1�����4P�#H`�G}�El���YtQ@]�T�g�`�I�)(�]ЀR@ ��� b)E�r)Vj\| J]lQi�4l�E]�h���N�^tq(R#���l#čI���[xA�'�)c` �x
�j$5�N�H
"��fR�l�a@`^l�"�]੸���E�H�-v����de}!!��y�������6GC�,`H?�[��m��3���V���Ձ�c��9֤;�9��N��N�ścp�F�Zd�j�p�qƹ��%K
@�!��:�����-J4�yj�����
|A�YhQ5���E���a�R4�:� �dY�湩�Y|�t���J�\΂3w��*}0�w��
�!�&�e�����:S�tJ1�wF4m�J���E�,u�
���P_O8Ƶ'm�Y���*tҐ�Q��:KE��F8s��r������J����^p����N� H�1]��T{��7w�J���E�c����S
�%�P�n�[�I����9�ӏ��,�c	�֟�	��)������T�%�cN:����$�X�L�xmB�"�� �/�� �E��j�by��tO?,O��
�(!YtD�'���B�C�1|�'LI�&��qb�P�*w+�a!Z\Z�C.�Q���0F�
�~�� J��3�e�d��H�Qq%�S��:p���G�UZe(�p���x�
�h�	b���(�@�a��,ͣ��Ё�DHch��N�C��\�a!vʡI�u�H���C�(�_�<�+��Db���0��8'D�y��X��/�a�R@f�𪭩�9mX�pg��y�x�	$�I�0R\f �P�vП����e2��I)��F�!��
c���f9K2pa�BS�HJV�D\`��.(��Ҥ(e��2C��'P'R`ȅЃ�#�i@�����J�C.�9^�0�Q��G�t,K�!���)�L$S}$�4�<Y�(r��x"e-hr�B���
�X��SNi)�ye�A�hL�J��l��r�j�5���ǪDwR�$e4zYF�`1�@�@�zz�$ys��Ӂ@���Hj%�Ŵbak���F���=��a#��'L@�R���K]޽֞ԥ.��J2��@���*=w])�W�p-e�p0'D���H�P��նׯ'��rA�)�����_Q�Y9�������W�%:�܃�>�Ί����@`��`npC�Yb����b�"	% �`<�8) P�$&��x)H�t@!�!�������
-�xx���)���g�GI|�A�цp��/@���>��~��P�3"<4�q��q;ߙ"ž)@�JS�}�p��iNK�ӟ*P�pi���7�Npl 1�F
>PX*Py��w=�%�lia
c�М�7EPn801�Z1)P<�
l -�v��Bl�p�
#��P�f?�܋Apt����w�;GIF89aqH�

	.D^'
+:	*&i�Cm
$;
-	)#`� W�O�Fr6WM|
*"X�
&)7Pi-?Q159	*U�!\�Iu
- Y�T�Hs*C>c 3!	)#%3:?122�f��������ǿ��������sssUUU<<<777&&&,qH���pH,�Ȥry�1�Ш���:�ҫЪ�z�Fm�����yfݺ�۫S.n�봾|����pylv�{�Mvx�smuU~���c��ck�����}�����y�T�\��o���S������������C68:85��X79<?+8��J�:?##/��C5��"��%?6��<�����L�7�?'�#(:Kr(��>L<�7��9���c����0�0�&0XQ�3��54�1���:.<��J�s+[�pSf?�&z�C'�/D�\��aQ�Xl�0P��U�D�J����`�>պ��װhG4�G6	ҳiæc���:"0|�&��߿2�؋����%F�ƍǐ�r�
a�~d;�
�Ғ0�XH�9&o�����:tDd<��P��0^_R�P�׀'_%Q��i��>����ѱT�Ga�rm!L0���o���6�=�o�'7�˯�J�>I�<�/���_���Y�(t�:H�D|��&��I������%�`t��	� �
J#߄�KL��BX~��Bz|�p�}6A_W�	~�}��]ϸ�b�J�v`����HH!�z���i<4���`�NJ��
��Z���S�2p��^"؟�e�%q2���H����uB��U5�H��*� �o*
(�e�`C_=(:
7p�e�@�6@*�2�_���q�i�g��Z�
;���8���
֡���!}����L��&�	�	]~�i�"^Ё�p�(TP���ÅD�"|wf�mq���o�q:n�&���H �����y Be��*5ث�jI� X����Ⱦ�'�p$�����i	�X�)S�A� 8�k$�@
)���JT��U-����_���R(	'�8\w=�`�݀@�/;X45ㄶ�Ҁ�L�.���\6�	��0@H��4���o����fh-`�	�-��a3�
�P8��&ǵ���o`��Hr�E�
&@��xG��C�,�B�	�8p����w��8�_�X�x�%��D���@��:\Fe�}�<ڦ���)�@��u�Yʗ�p�	��6��XԀ��#��}AN����E"�_
�D�eGaM�F��n:P
?0%7/���V
���$p�S�(4�t[���D42� _����A�
�t�M
&4�/`[S�>Űk ����m�[�?%�?@Dl���%�QD��H�؀U�B͛n�=%�?��ׇ�,N�=V�A$�4��eda�ū4��u3l����6v��E0K���-��3��iFRZ�[���%�PI��V]	_�e�.
�~�F�DE&�*"h"�Jj	c�3�~7�IJ#��4�R7�Tk<���n+{d8���-e�v,6�d��Io:B
x��<�t���4~j�x28�.�~V��O��=C�u�U�Z&膰Yƥ#�F\ ?���u�i�,�Ј�H"v��E��؅�'P�f*��4�%m�0�1zZt��d@V(J��0��@zӻ�T����)���%b�]����1��$}�$DG/Pժ� O\�P gM��S�3�I5
g�GC~`��E���H�U��찯�i]�t�)�5+�A^P��@]K���<�n9c��J�x�c�a�:�x*�j	%9���'���P,�  OP�@@"PA^P&��f�i���"�)�u��	�ְ@8��K����RZ�&�O��,a��:j�:栜DYlYs��0!�2Y_!��@�[o�9#�#5�td��
��;"�x��$�1?�	$���r�,/ٌ�	rL�	����2z�xĮ�.��`��x�H�J;default output handlerbuffer_sizePHP_OUTPUT_HANDLER_STARTPHP_OUTPUT_HANDLER_CONTPHP_OUTPUT_HANDLER_END|zlbfailed to delete buffer %s.No method name given: use ob_start(array($object,'method')) to specify instance $object and the name of a method of class %s to use as output handler/builddir/build/BUILD/php-5.2.17/main/output.cCannot use output buffering in output buffering display handlersoutput handler '%s' conflicts with '%s'failed to flush buffer. No buffer to flush.failed to delete buffer. No buffer to delete.failed to delete and flush buffer. No buffer to delete or flush.operation failedpersistent streamstream filterudpudgdata:Plainfiles wrapper disabledfile://localhost/not implementedfailed to open dirFilename cannot be emptycould not make seekable - %sfailed to open streamno suitable wrapper could be foundstream does not support seekingUse of "zlib:" wrapper is deprecated; please use "compress.zlib://" instead.Unable to find the wrapper "%s" - did you forget to enable it when you configured PHP?remote host file access not supported, %sThis function may only be used against URLs.wrapper does not support stream openwrapper does not support persistent streamsfopencookie failedSTDIO FILE*File DescriptorSocket Descriptorselect()able descriptorcannot cast a filtered stream on this systemcannot represent a stream of type %s as a %s%ld bytes of buffered data lost during stream conversion!w+brfc2397: no comma in URLrfc2397: illegal media typemediatype;base64rfc2397: illegal parameterrfc2397: illegal URLrfc2397: unable to decodeRFC2397TEMPunable to locate filter "%s"unable to create or locate filter "%s"Filter failed to process pre-buffered datacannot seek on a pipeunable to allocate streamstreams_stdio_%d_%splainfileSTDIOж���ж���ж�ж���ж�ж�p��@����ĵ���������t������D������������������������������������������������ȼ�h��`%s' is not a valid mode for fopen%s::rmdir is not implemented!%s::mkdir is not implemented!stream_closedir_rewinddirdir_closedirstream_eofstream_lockstream_seekstream_tellstream_flushinfinite recursion preventeddir_opendir"%s::dir_opendir" call failedstream_writeCould not execute %s::%s()stream_open"%s::stream_open" call failedstream_readdir_readdirurl_statstream_statstream factorySTREAM_USE_PATHSTREAM_IGNORE_URLSTREAM_ENFORCE_SAFE_MODESTREAM_REPORT_ERRORSSTREAM_MUST_SEEKSTREAM_URL_STAT_LINKSTREAM_URL_STAT_QUIETSTREAM_MKDIR_RECURSIVESTREAM_IS_URLclass '%s' is undefineduser-space-diruser-space%s::rename is not implemented!%s::unlink is not implemented!%s::stream_eof is not implemented! Assuming EOF%s::stream_lock is not implemented!%s::stream_tell is not implemented!%s::stream_write is not implemented!%s::stream_write wrote %ld bytes more data than requested (%ld written, %ld max)%s::stream_read - read %ld bytes more data than requested (%ld read, %ld max) - excess data will be lost%s::stream_read is not implemented!%s::dir_readdir is not implemented!%s::url_stat is not implemented!%s::stream_stat is not implemented!Protocol %s:// is already defined.Invalid protocol scheme specified. Unable to register wrapper class %s to %s://Unable to unregister protocol %s://%s:// was never changed, nothing to restore%s:// never existed, nothing to restoreUnable to restore original %s:// wrapperUnspecified errorCould not find a factory !?connect() failed: %sbind() failed: %slisten() failed: %sstreams.cryptoUnable to find the socket transport "%s" - did you forget to enable it when you configured PHP?this stream does not support SSL/cryptocannot write OOB data, or data to a targeted address on a filtered streamdatagramFailed to create unix socketFailed to parse address "%s"bindtoudg_socketunix_socketudp_sockettcp_socketgeneric_socket�����p���������T�T��4�T����D���send of %ld bytes failed with errno=%ld %sThe hostname must not contain null bytesFailed to parse IPv6 address "%s"local_addr context option is not a string.Failed to create unix%s socket %s$undefinedsyntax errormemory exhausted$end',''=''?'':''|''^''&''<''>''+''-''.''*''/''%''!''~''@''[''('')''{''}''$''`''"'']'$accepttop_statement_list@1top_statementinner_statement_list@2inner_statementunticked_statement@3@4@5@6@7@8@9@10@11@12@13@14@15@16@17@18@19@20@21@22@23@24non_empty_additional_catchesadditional_catch@25@26unset_variablesunset_variableuse_filenameclass_declaration_statementis_reference@27@28@29@30class_entry_typeextends_frominterface_entryinterface_extends_listimplements_listinterface_listforeach_optional_argforeach_variablefor_statementforeach_statementdeclare_statementdeclare_listswitch_case_list@31@32case_separatorwhile_statement@33new_elseif_list@34new_else_singlenon_empty_parameter_listoptional_class_typefunction_call_parameter_listglobal_var_listglobal_varstatic_var_listclass_statement_listclass_statement@35@36@37method_bodyvariable_modifiersmethod_modifiersnon_empty_member_modifiersmember_modifierclass_variable_declarationclass_constant_declarationecho_expr_listnon_empty_for_expr@38expr_without_variable@39@40@41@42@43@44@45@46@47@48function_call@49@50@51@52fully_qualified_class_namedynamic_class_name_reference@53@54exit_exprctor_argumentscommon_scalarstatic_scalarstatic_class_constantstatic_array_pair_listpossible_commar_variablerw_variable@55@56variable_propertiesvariable_property@57method_or_not@58variable_without_objectsstatic_memberbase_variablereference_variablecompound_variabledim_offsetobject_property@59object_dim_listvariable_namesimple_indirect_referenceassignment_listassignment_list_element@60non_empty_array_pair_listencaps_listencaps_var@61encaps_var_offsetinternal_functions_in_yaccisset_variables@62__HALT_COMPILER() can only be used from the outermost scopeuse: Not yet supported. Please use include_once() or require_once()Assigning the return value of new by reference is deprecatedfunction_declaration_statementunticked_function_declaration_statementunticked_class_declaration_statementnon_empty_function_call_parameter_listdynamic_class_name_variable_propertiesdynamic_class_name_variable_propertynon_empty_static_array_pair_listbase_variable_with_function_calls���0�0����:���0�0�0�0�$;�m�0�3�-��8�l8��8�8�8�9�}9�d9�@9�*9�9�8��8���n�]�J�<�,��0�0�0�����0���x�\�&��$�$�0�$�x$�j$�L$�;$�'$�#�#�~#�;�;�s;�X;��#�0�0�#�&��%�m�m�%�%�%�x%�g%�R%�:%�'%�-��,�;��:�R���;�0�0�0�0��;�$�R�y:�V:�.:�0�0�0�0�0�0�:�:��9��9�9�z �R�N �3 � � �0�0�0�0�0�����0����0�0�0�0�0�0�I���S���o�	��<�R�
����_��������l�X�D�)�4�4�{4�e4�Q4�;4�0�0�%4�0�0�4�3�X3���_�3�w�w��3�d2�L2�w�'2�:����2�3�2��2�2�2�2�2�2�1�v1�h1�M1�21�(1�1��0�0�y0�+0�0�/��/�/�v/�=/�/��.�.�Y.� .��-�-�u-�]-�F-�.-�5��4��4��4��,�,�,�,�u,�Z,�?,�$,�	,��+��+�+�+�+�g+�L+�1+�*�*�*�*�v*�[*�@*�%*�
*��)��)�%��$��$��$�)�(��(��(�(�(�(�j(�S(�?(�-(� (�'��'��'�'�'�'�m'�['�6'�'�&��&�&�&�&�|&�n&�\&�E&�*&�0�0�/3����1�_�&<�<��;�=�<��<��<�<�<�r<�Y<�)�N)�*)�>�>�p>�U>�:>�>�>��=�=�=�0�0�=�w=�/=�&8�8��7��7�7�n7�`7�S7�
�87�,7�7�7�7��6�6�6�6�j6�A6�&6�5��5�5�5�5�l5�P5�55�5��)�)�1�p#�C#�,#�#��"��"�"��"�0�0�"�x"�n"�b"�M"�1"�"�"��!��!�!�!�!�m!�N!�8!�)!�
!�!�� � � �<;�:�:��8�%��%�"�52�3�2�B<�A3�%�i ��#��1� or %ssyntax error, unexpected %s, expecting %s�\�==�_R	

ZI=N.O$?��GI+,G.I0G�Ix
D�==ItGbI�GIBCDGGI��;<z����G�I�;<g�G�I���o�I��BCD���I�������{������{����I����S������t�\����a��I�������G�I�G�I�������������������������������������������=����	�I�-�/N���BC��[�]^G�IJ$IG��GN�\]^\]^W]^BC� *�-./1x��E1�����a�+�-./0ijklmn�_.�xS����HIR�\��\]^Z#st\]^R{�O
��Z�v��R
S�ZG�GI\��G���*+,-./�1v�������;<���
�����
[G�=������������st�w����������G����eG
�����y�
������y��������x�����Y�����G����axS���I
�y�
�I��G'����+
�


�DI�7�9�
=I�	
IG�W
�
D�� !"#$%&'()*+,-./1U[�e�WIq���{�E������W��'� R� an+ZPi_���7�9��[���
��{������������*+���������������������������������������;<EFG����b������O�ijklmno��������������������������������������������������������{|}~������������������������������������������������������	
������������ !"#$%&'()*+,-./��1����*+��'����0��23456789:;<��>?@A��=��EFGHI��K������OPQR��T��V��X����[��W��_`a��cd��fgh������lmn��pqrstu��������z{|}~����������b�������ijklmno��
*+��������0��23456789:;<�>?@A������EFGHI��K;<��OPQR��T��V��X����[������_`a��cd��fgh����Zlmn��pqrstu��������z{|}~����������������������������������
*+��������0��23456789:;<��>?@A������EFGHI��K;<��OPQR��T��V��X����[������_`����cd��fgh����������n��pqr��������������z{|}~����������������������������$%&'()*+,-./��1��*+��������0��23456789:;<��>?@A������EFGHI��K������OPQR��T��V��X����[������_`����cd��fgh����������n��pqr��������������z{|}~����������������������������������������������������������*+��������0��23456789:;<��>?@A������EFGHI��K������OPQR��T��V��X����[������_`����cd��fgh����������n��pqr��������������z{|}~����������������������������������������������������������*+��������0��23456789:;<��>?@A������EFGHI��K������OPQR��T��V��X����[������_`����cd��fgh����������n��pqr��������������z{|}~�������������������� !"#$%&'()*+,-./��1*+��������0��23456789:;<��>?@A������EFGHI��K������OPQR��T��V��X����[������_`����cd��fgh����������n��pqr��������������z{|}~�������������������� !"#$%&'()*+,-./��1��*+��������0��23456789:;<��>?@	
��EFGHI����������O���� !"#$%&'()*+,-./��1��������������qr��������������z{|}~��������������������� !"#$%&'()*+,-./��1����*+��������0��23456789:;<��>?@	
��EFGHI���������O���� !"#$%&'()*+,-./��1��������������qr��������������z{|}~��������������������� !"#$%&'()*+,-./��1����*+��������0��23456789:;<��>?@	
��EFGHI���������O���� !"#$%&'()*+,-./��1��������������qr��������������z{|}~�������������������������������������������������������������*+��������0��23456789:;<��>?@��������EFGHI�������O !"#$%&'()*+,-./��1��������qr��������������z{|}~����������������������*+�����0��23456789:;<��>?@��������EFGHI����������O !"#$%&'()*+,-./��1��������qr��������������z{|}~�����������������������*+�����0��23456789:;<��>?@��������EFGHI����������O !"#$%&'()*+,-./��1����������qr��������������z{|}~�����������������������*+�����0��23456789:;<��>?@��������EFGHI����������O !"#$%&'()*+,-./��1������������qr��������������z{|}~�����������������������*+�����0��23456789:;<��>?@��������EFGHI����������O������������������������������������������������������qr��������������z{|}~�����������������������*+�����0��23456789:;<��>?@��������EFGHI����������O������������������������������������������������������qr��������������z{|}~�����������������������*+�����0��23456789:;<��>?@��������EFGHI����������O������������������������������������������������������qr��������������z{|}~�����������������������*+�����0��23456789:;<��>?@��������EFGHI����������O������������������������������������������������������qr��������������z{|}~�������������������������*+�����0��23456789:;<��>?@��������EFGHI����������O������������������������������������������������������qr��������������z{|}~�������������������������*+�����0��23456789:;<��>?@	
��EFGHI����������O���� !"#$%&'()*+,-./��1��������������qr��������������z{|}~�������	
����������������������� !"#$%&'()*+,-./��1������������������������	
������������������������� !"#$%&'()*+,-./��1	
���������������������������� !"#$%&'()*+,-./��1�	
���������������������������� !"#$%&'()*+,-./��1	
��������������������������� !"#$%&'()*+,-./��1	
��������������������������� !"#$%&'()*+,-./��1	
��������������������������� !"#$%&'()*+,-./��1	
��������������������������� !"#$%&'()*+,-./��1	
��������������������������� !"#$%&'()*+,-./��1	
��������������������������� !"#$%&'()*+,-./��1	
��������������������������� !"#$%&'()*+,-./��1	
��������������������������� !"#$%&'()*+,-./��1	
��������������������������� !"#$%&'()*+,-./��1	
��������������������������� !"#$%&'()*+,-./��1	
��������������������������� !"#$%&'()*+,-./��1	
��������������������������� !"#$%&'()*+,-./��1	
��������������������������� !"#$%&'()*+,-./��1�����������������������������	
������������������������y !"#$%&'()*+,-./��1	
������������������������y�� !"#$%&'()*+,-./��1
���������������������������� !"#$%&'()*+,-./1�������������������������� !"#$%&'()*+,-./��1xx�~(�K�{���D���
|��ef�hijklmn�pqrstuv�|}h����e������(Ywo!��w�!�wg!����������������������w�!�1!o���w1!������}#!����������!���	!G�|�|�|�GxpG�|�xxx2���}2�!������G��������v��)G~h�����e��~t�G'�!!X�!G�0,��G�123456789:;<=>?@ABC*))�FGHIJKLMNOPQubTV�w��g�k�xx�d��f��xGijG
��**�q�������������~ij��������������x�,�zzy{L�l������EFGHIJ�x����)�����b�)�"hijb`ww�ij��x�	�g�$Ze������������*ghik�nz�*p���~�����������������������xx�w���������ww�x�x�x�x��������������������x&'-+x/bb6�789?�ASTY[��xc$g�fdT�mnx��C"vz��������c����x����w�<��>������w�w��xU��������������x�����������������������������)���b�����������*��b��c��B��erc:{)��V�rwswwd�*�;������������wstww*w�@����uDw�#wEFGHIJK������������Lv>?@ABcc����d�)����	��
�������������������������
� !"#$%&'()*c+,-./0123456789:;<=>?@AB	�C
DDEFGHIEFGHIJK������������
w !"����#$%&'()*+,-./012j345678�:;<=>?@AB	C
DEFGHI�������������
 !"����#$%&'()*+,./0125678<=>?@AB	C
DEFGHI#�����������������
 !"#$%&'()*+,./0125678<=>?@AB	C
DEFGHI�
 !"#$%&'()*+,./0125678<=>?@AB	C
DEFGHI�
 !"#$%&'()*+,./0125678<=>?@AB	C
DEFGHI�������������������
 !"#$%&'()*+,./0125678<=>?@AB	C
DEFGHI������������������
��� !#�����������������������78<=>?@AB	C
D�GHI�����������������
��� !�#�����������������������78<=>?@AB	C
D�GHI���������������������
��� !�#�����������������������78<=>?@AB	C
D�GHI
 !��#����������������������	
78<=>?@ABCD�GHI
 !#����������������������	
78<=>?@ABECDGHI
 !#���������������������	
78<=>?@AB_CDGHI
 !#��������������������	
78<=>?@AB�CDGHI
 !#	
78<=>?@AB�CDGHI
 !#	
78<=>?@AB�CDGHI
 !#	
78<=>?@AB=CDGHI
 !#	
78<=>?@ABCDGHI
 !#	
78<=>?@ABCDGHI
����!#�����������������������78<=>?@AB���CDGHI����������������������������������������������������������������������������Z���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������W��������������������������]��������������������������^��������������������������m�����������������������������������������������������_����������������������������������������������������������������������������������
������������������������������������������������������������������������O�O�O�O�O�9�O�O�O�O�O�O�O�O�O�O�O�O�O�O�O�O�O�O�O�O�O�O�O�O�O�O�O�g�O�O�O��O�LO�O�O�O�O�O�O�O�O�O�O�O��sCO��O�O�O��O�O��O�O�O�O�O�O�O���O��O�O�mO�^O�O�O�O�O�O�O�O�'O�O�O�P�O�O�O�O�O�O�O�O�O�O�O�O�O�O�O�O�O��>�O�O�O�O�O�O�c�HO�O�O�tO���� O�O�O�O�O��O�P�O�O���O����O�O�O�*��O�O�O�	O�O�O�O�O�O�O�O�FSO�!!��!!!!!!!O�!!!!!!!!)��O�O��O�O�O�O�!O���-O�1�O��O�!��6k>fhjO�O�owO�O�O�O�O�O�!O�O�5O�O�O�O�O�O�O�O�O���O�O��O�O�^O�."�O��O�O�O�O���!��6O�O��O�!O�O�O�O�O�O�O���O�O�O�O���O�O���O�!O��	O�!!�!O��O��DO���:��O��O���O�O�O�Z	�O�e�
�!���O�uO�!O�O�O�O�!!!!!!!!!!!!!!!!!!!)O�O�O��!!!!!!!!!!!O�O�!!5,
O�y8�O��O�U
~
-	!O�!�w�&�:�
O�O�O�<O�O�O�O��O�!O�O�O�t;O�O�O�O�"��t�}�O�O��O�O�O��O�O�BO�
�!K!!!!~�yyyy����cc������O���666666666666-	2��O�
O�-	O�2O���#d��
O�O�O�O��%O�O�O�=O�ttO�O�O��#O�O�O�O�!O�&O�O�O��	O��	O�O�eq�)1O�O�O�O�O�O�O�GB6O�O��&6��`	)O�9O�!O�O��O�O�O�=O�O�	O�O�Y
O�O�!!t��?iO�O�O��ttO�O�O������O�!O�O�EBF�O�O�-	-	O�O�O��O�J!!O�O�O�O�(|!�I�__O�O��O�O�O�KNO�SO�hU�O�O��O�!O�O��
O�O�O�Q!Y�O�B\[\!�O�O�O�VsO�O��
O�O�O�O�bO�ft�O��O��O�O�j�AO�tO�tO�+6�O�nO�@O��O�O�O�O�O�O�O�O�O�O���O�
O�O��O�-	�O�O�2O�O��l�!O�O�O�O�tv!�O�x��BO��O�O�O�O���O�O��O��2O�O���	O�O���

O��O�5O�O�O�O�O�U	tO�ttDO�O���!O�O�O�O�O�O�O�O�O�O���tO��O�O�t�O��tJ!O��"��O��O�&tO��O�(O�O�O�K�O�O�O�O�O���tO�O�t�7	�O�O��O�O�O��O��O�O���BO�O�O�O����O��O�O�BO�O��O��O��O���J� ��L� �]�����a��������q��������
�MN�O��P�&Q%R���(����l�.���%^�����345`a���My���NOPQ�R����S�/0+-.oT���RU�\�\�[VxyW�XY�Z[S�X��W\]^_`aU����b����c�d(-.<=e//9S<Z_23401�;q��OPK^?JLaR]_d>��������

	�N��� $_��%'Q)KLM��\[��y
]X����0��Ogr`+!`)�.��KL&(R*+B1�L,-JL�x~D��A�@V`�\Z�������������������������������h�\��*�KL��63#T
N�65�:����	ut�MEz�=
f^b[�����ojPinbc"���78BK2vx}|���ad����kYg,&KL�ffhpn:vv$�;ID��xs�����c��+pWT#
�} i
vv���=9EC�{��e�������Y������Qlm%��
�g74qr��HGw�W���S'�ot{|ys�>�QXU�~!l85uw
��F��Y

U������V
�j"
�?
m�����k

@��D
ACE�FGH
I		



������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������	



!  ""#$$%%%&&&''(()*)+++,,--../0//112222222233345444446667777777898:0��/��-*+,.�$
%3=����2	
 !"#&'()1456789:;<>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~������������P��x��0��x��x��x��x��x��x��x��x��x��x��x��x��x��x��x��x��x��x��x��x��x��x��x��x��x��x��x��x��x��x��x��x��x��x��x��x��x��x��x��x��x��x��x��x��x��x��x��x��x��x��x����x��x��x��0��x��x��x��P��x��x��x��x��x����x��x��x��x��x��x��x��p��x��x��x��P��x��0��x����x����������]�S�I�?�5�+�!��
��������������������w�m�c�Y�O�E�;�1�'��	������~�t�j�`�V�L�L���������������������U�K�A�7�-�#����������������������y�o�e�[�Q�G�=�3�)��7	�-	�#	�	�	����_�C
�	�	�A	�W�3�
���p�K��R����|�F���D��5��)������'��������|������������:��������r������������
������U��1�� ������v���������������������������������g�g���9223372036854775808$$%+�&++%�*,,&-D,1D-*�111-22�																																																														!.!../�//33F89FH:9�H.;!8/;:88:9;=GMkk<=.O@G=T<<<@@aa!'@<9<llOx�{�T}}}Mak��qqx��xq���''{'�'O�'��Tqq'��''x'QQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQSXS��������������=���XS��X���=������������

�22XSUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\]��00033JJ}}`������]`]]]]]]]]]]]]]]]]]]]]]]]]]]]]^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^_����������������
_����11������n�n�p����1����_p����n����������������������������������������sQQQ������Q�sQs�����������������������������������������	
!!rrtvv��v�	
 "!44rtzzt$�zv&444444���	
#&(!zIrt*#&�,�I.�0�����������������������������������������������������������������������������������������~~��K~N�HHHOPnpK2N468:OPnp~�"~"""""""""""""""""""""""""""ww����q�<>@BDFHJrq������mmmr�wLwwwwwwwwwwwwwwwwwwwwwwwwwww||t|NPRTVmXZ|t||||||||||||||||||||||||||������������\�^`�������b���d�����fhj��l����vvvnp����rt�v�xz|�~�v���������������������������������������G�l�����������GlG�l���������������������G�l����������������������������������������������������������������������������������������������������������������������������������������������������������������	��
���	�	���

�	
!#%!'!#)#+%-%
/'')+)1+-!3-/#/5%7113'93;)5+=57-?7A/9C;9;=1E=?3A?GAC5IC7 EK"E$9G;MGI=OIQ?KASK&CUMW(MOEQOYQSG[SUIWU]W*K_Y,.Y[M0[aO]Qc]_Se_gU2Wia46acYkce[gemgi]oi8_:kq<k>sma@mocuoweqgyqsi{s}BDukwuwym�y{o}{�}Fq�Hs��J�Lu�w���y���{�}��NP��R�������������T��VX���Z\�����������������^����`���������������b�d��f�h���������������j����l�����������������n���pr���t�������������v���xz���������������|�~������������������������������������������������������������������������������������������������������������������������	��
���	�	���

��	
!�#���%!'!#)#+�-%��%'/')+)1+-!3-�#�/5�/�71%�13'93;)5+=57-?7A��9/;9C;=1E=?3A?GA�5IC�7CEK�E�9G;MGI=OIQ?KASK��UMC�MOEQOWQSGYSUI�U[��K]W��WYM_YaO[Qc[]Se]gU�_ia_�acWkceYgemgi[oi�]�kq�k�_masmocuoweqgyq�i{s}�sukwuwym�y{o}{�}�q����s���u�w���y���{�}�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������~�|���z�������������xv������	�t�
r�	p	n��

ljh	
fdb!`^#%'!)!+\#-%#Z%'/')+)1+-3-X!V/5T/R#1%713'93;)5+=5P-?7AN79/;9C;=1E=?3A?GAL5ICJHCE7FEK9G;MGI=OIQ?DASKB@KMCUMOEQOWQSGYS>I<U[:U8]WK6WYM_YaO[Qc[]Se]g42_Ua_iacWkceYgemg0[oi.]ikq,k*_masmocuoweqgyq(&{si$sukwu}wymy{o"{� q�}}s��u�w���y���{������}����������������������������������
��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������												























            !!!!!!!!!!!!""""""""""""############$$$$$$$$$$$$%%%%%%%%%%%%&&&&&&&&&&&&''''''''''''(((((((((((())))))))))))************++++++++++++,,,,,,,,,,,,------------............////////////000000000000111111111111222222222222333333333333444444444444555555555555666666666666777777777777888888888888999999999999::::::::::::;;;;;;;;;;;;<<<<<<<<<<<<============>>>>>>>>>>>>????????????@@@@@@@@@@@@AAAAAAAAAAAABBBBBBBBBBBBCCCCCCCCCCCCDDDDDDDDDDDDEEEEEEEEEEEEFFFFFFFFFFFFGGGGGGGGGGGGHHHHHHHHHHHHIIIIIIIIIIIIJJJJJJJJJJJJKKKKKKKKKKKKLLLLLLLLLLLLMMMMMMMMMMMMNNNNNNNNNNNNOOOOOOOOOOOOPPPPPPPPPPPPQQQQQQQQQQQQRRRRRRRRRRRRSSSSSSSSSSSSTTTTTTTTTTTTUUUUUUUUUUUUVVVVVVVVVVVVWWWWWWWWWWWWXXXXXXXXXXXXYYYYYYYYYYYYZZZZZZZZZZZZ[[[[[[[[[[[[\\\\\\\\\\\\]]]]]]]]]]]]^^^^^^^^^^^^____________````````````aaaaaaaaaaaabbbbbbbbbbbbccccccccccccddddddddddddeeeeeeeeeeeeffffffffffffgggggggggggghhhhhhhhhhhhiiiiiiiiiiiijjjjjjjjjjjjkkkkkkkkkkkkllllllllllllmmmmmmmmmmmmnnnnnnnnnnnnooooooooooooppppppppppppqqqqqqqqqqqqrrrrrrrrrrrrssssssssssssttttttttttttuuuuuuuuuuuuvvvvvvvvvvvvwwwwwwwwwwwwxxxxxxxxxxxxyyyyyyyyyyyyzzzzzzzzzzzz{{{{{{{{{{{{||||||||||||}}}}}}}}}}}}~~~~~~~~~~~~������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������												























            !!!!!!!!!!!!""""""""""""############$$$$$$$$$$$$%%%%%%%%%%%%&&&&&&&&&&&&''''''''''''(((((((((((())))))))))))************++++++++++++,,,,,,,,,,,,------------............////////////000000000000111111111111222222222222333333333333444444444444555555555555666666666666777777777777888888888888999999999999::::::::::::;;;;;;;;;;;;<<<<<<<<<<<<============>>>>>>>>>>>>????????????@@@@@@@@@@@@AAAAAAAAAAAABBBBBBBBBBBBCCCCCCCCCCCCDDDDDDDDDDDDEEEEEEEEEEEEFFFFFFFFFFFFGGGGGGGGGGGGHHHHHHHHHHHHIIIIIIIIIIIIJJJJJJJJJJJJKKKKKKKKKKKKLLLLLLLLLLLLMMMMMMMMMMMMNNNNNNNNNNNNOOOOOOOOOOOOPPPPPPPPPPPPQQQQQQQQQQQQRRRRRRRRRRRRSSSSSSSSSSSSTTTTTTTTTTTTUUUUUUUUUUUUVVVVVVVVVVVVWWWWWWWWWWWWXXXXXXXXXXXXYYYYYYYYYYYYZZZZZZZZZZZZ[[[[[[[[[[[[\\\\\\\\\\\\]]]]]]]]]]]]^^^^^^^^^^^^____________````````````aaaaaaaaaaaabbbbbbbbbbbbccccccccccccddddddddddddeeeeeeeeeeeeffffffffffffgggggggggggghhhhhhhhhhhhiiiiiiiiiiiijjjjjjjjjjjjkkkkkkkkkkkkllllllllllllmmmmmmmmmmmmnnnnnnnnnnnnooooooooooooppppppppppppqqqqqqqqqqqqrrrrrrrrrrrrssssssssssssttttttttttttuuuuuuuuuuuuvvvvvvvvvvvvwwwwwwwwwwwwxxxxxxxxxxxxyyyyyyyyyyyyzzzzzzzzzzzz{{{{{{{{{{{{||||||||||||}}}}}}}}}}}}~~~~~~~~~~~~��������������������������|zywkjigfedc`_^]ZYXWVUTSRMLFB@?>=<;987654310/.-,+*)('%"! 

	��������������������������������������������������������������������������������������oligfedcba^]\[ZYXWVUTSRPONLKIHGFEDCA@?><;65/.-,+*)('&%���������������������������������������������~|zywvtspod[VRKJIECBA>6540) ��������������������������������������������������������������� !"#$%&'()*(+,-./0(1234((56789:;<=>?@??A?BCD?EFGHIJK??LMNPPQQUU��rsrs��t�t}}}���RRVV��WWuvuv�������������������SSXXYYZ[YYY\YYYYYYYYYYYYYYYYYYYY]YY^Y^^^^^^^^^^^^^^^^^^^^^^^^^^_YY```````````````````````````````a`aaaaaaaaaaaaaaaaaaaaaaaaaa```ccccccccccccccccdcccccccccccccceceeeeeeeeeeeeeeeeeeeeeeeeeecccfffffffffffffffffffffffffffffffgfggggggggggggggggggggggggggfffhhhiihjiihiiiiiiiikliiiiiiihmi?i??????????????????????????iiiz�����������������{����������������������|�����������������H�}}}�
$%�'I�67(���K��L�:;��FG�����������������������������������������������������������������������S���11�`��Tc�ad���Z��"�2�2�<33=o>[\?@q33���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������44���33�����444444��
�	������������������������������������������������������	�����������������ns��
�����11��������n�o�������#
q������$����������������������������������r�����vs����������I������w��J����������������t���������������������������������!��������������#%�44������'�w�)444444
�	��#P+��Irt�-$Q�/�J1�3���������������������������xxyyxxxzxxxxxxxxxxx{{x|xxxxx}xx{x{{{{{{{{{{{{{{{{{{{{{{{{{{~xx������n�r�mmmtPno5s79;=uQo}!�!!!!!!!!!!!!!!!!!!!!!!!!!!!��������?ACEGIKMr�������mmms�uOuuuuuuuuuuuuuuuuuuuuuuuuuuuxxtxQSUWY�[]xuxxxxxxxxxxxxxxxxxxxxxxxxxx����������_�ac������e���g�w��ik��m��o�}����qs������uw���y�{}�������������}����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������	����������������
���������������������������������������������������������!�#��%�'���������������)����+�����������������-���/1���3�������������5���79���������������;�=��?�A���C����������������EG����������������I���K����M�O���������������QS���U�������������W��Y[���]_�����������������a����c���������������e�g��i�k���������������m����o�����������������q���su���w�������������y���{}�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������}����������������{y����������������w���u����s�q���������������om���k�������������i��ge���ca�����������������_����]���������������[�Y��W�U���������������S����Q�����������������O���MK���I�������������G���EC���������������A�?��=�;���9����������������75����������������3���1����/�-���������������+)���'�������������%��#!��������������������������������������������������������������
��������������������	�������������������������������������������������������������������������������������������������������������������������������������OOOOOOOOOOOOTTTTTTTTTTTTbbbbbbbbbbbbnnnnnnnnnnnnqqqqqqqqqqqqwwwwwwwwwwwwyyyyyyyy�yyy�������������������������������������������������!!!!!!!!!�!#��#�����������pp��p������������uuuuuuuuu�u����������������������������������������������������������������FFFFFFFFFFFFkkkkkkkkkkkk������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������











            """"""""""""$$$$$$$$$$$$&&&&&&&&&&&&((((((((((((************,,,,,,,,,,,,............000000000000222222222222444444444444666666666666888888888888::::::::::::<<<<<<<<<<<<>>>>>>>>>>>>@@@@@@@@@@@@BBBBBBBBBBBBDDDDDDDDDDDDFFFFFFFFFFFFHHHHHHHHHHHHJJJJJJJJJJJJLLLLLLLLLLLLNNNNNNNNNNNNPPPPPPPPPPPPRRRRRRRRRRRRTTTTTTTTTTTTVVVVVVVVVVVVXXXXXXXXXXXXZZZZZZZZZZZZ\\\\\\\\\\\\^^^^^^^^^^^^````````````bbbbbbbbbbbbddddddddddddffffffffffffhhhhhhhhhhhhjjjjjjjjjjjjllllllllllllnnnnnnnnnnnnpppppppppppprrrrrrrrrrrrttttttttttttvvvvvvvvvvvvxxxxxxxxxxxxzzzzzzzzzzzz||||||||||||~~~~~~~~~~~~������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������











            """"""""""""$$$$$$$$$$$$&&&&&&&&&&&&((((((((((((************,,,,,,,,,,,,............000000000000222222222222444444444444666666666666888888888888::::::::::::<<<<<<<<<<<<>>>>>>>>>>>>@@@@@@@@@@@@BBBBBBBBBBBBDDDDDDDDDDDDFFFFFFFFFFFFHHHHHHHHHHHHJJJJJJJJJJJJLLLLLLLLLLLLNNNNNNNNNNNNPPPPPPPPPPPPRRRRRRRRRRRRTTTTTTTTTTTTVVVVVVVVVVVVXXXXXXXXXXXXZZZZZZZZZZZZ\\\\\\\\\\\\^^^^^^^^^^^^````````````bbbbbbbbbbbbddddddddddddffffffffffffhhhhhhhhhhhhjjjjjjjjjjjjllllllllllllnnnnnnnnnnnnpppppppppppprrrrrrrrrrrrttttttttttttvvvvvvvvvvvvxxxxxxxxxxxxzzzzzzzzzzzz||||||||||||~~~~~~~~~~~~������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������











            """"""""""""$$$$$$$$$$$$&&&&&&&&&&&&((((((((((((************,,,,,,,,,,,,............000000000000222222222222444444444444666666666666888888888888::::::::::::<<<<<<<<<<<<>>>>>>>>>>>>@@@@@@@@@@@@BBBBBBBBBBBBDDDDDDDDDDDDFFFFFFFFFFFFHHHHHHHHHHHHJJJJJJJJJJJJLLLLLLLLLLLLNNNNNNNNNNNNPPPPPPPPPPPPRRRRRRRRRRRRTTTTTTTTTTTTVVVVVVVVVVVVXXXXXXXXXXXXZZZZZZZZZZZZ\\\\\\\\\\\\^^^^^^^^^^^^````````````bbbbbbbbbbbbddddddddddddffffffffffffhhhhhhhhhhhhjjjjjjjjjjjjllllllllllllnnnnnnnnnnnnpppppppppppprrrrrrrrrrrrttttttttttttvvvvvvvvvvvvxxxxxxxxxxxxzzzzzzzzzzzz||||||||||||~~~~~~~~~~~~������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������~}|{zyxwvqpljihgfedcba`_^]\[ZYXWVUTSRONM�LKHGEDCBA@?>=<;:9876543210/.-,+*)(�'&%"!� 

	������������������������������������������������������������������������6������:������������$�����mlkjihgfeb_^]YXWVURQPONMJEDCBA9850/.-,+*)& x���������������~x�ppoo����������������������������������������������������������������������	����������������������������������������������������������������������������Z�Y�]��������������������������������������������'�������������������������������������������������������������������������������������������������������YZZ�]^]Y�Z��ZY���^Y]^]]����������������������������������������������������������������������������������������������������������Y��Y���������]]����������������������������������������������������������������������Y��Y���]������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������	
	


 ! "!#"$#%$&%'&(')(*)+*,+-,.-/.0/102132435465768798:9;:<;=<>=?>@?A@BACBDCEDFEGFHGIHJIKJLKMLNMONPOQPRQSRTSUTVUWVXWYXZY[Z\[]\^]_^`_a`bacbdcedfegfhgihjikjlkmlnmonpoqprqsrtsutvuwvxwyxzy{z|{}|~}~����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������	
	


 ! "!#"$#%$&%'&(')(*)+*,+-,.-/.0/102132435465768798:9;:<;=<>=?>@?A@BACBDCEDFEGFHGIHJIKJLKMLNMONPOQPRQSRTSUTVUWVXWYXZY[Z\[]\^]_^`_a`bacbdcedfegfhgihjikjlkmlnmonpoqprqsrtsutvuwvxwyxzy{z|{}|~}~���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������"�"9:;<x��2p�"�"�"�"DF�"�"�#N�"�#,AH�#�"S;OX���"VY��"�"�"#�������"��"�"�"4�"����"�"�"#�#�#�"T���"#S��"J���#�##�"###��#�"�"�#�"�"#�"�"��"�"��"��"�#X�#�##P#�"��"�"�"�"�"�"�"######M#�"##PThv#�"�##�"##�"
#W�"�"�"�R�"�"���"��"�"�"�"�"�"5�"�"�"�"�"N�"�"�"=�"9�"�"�"�"�"�"�"�"�"##���"�#n##!R�"STq#V�"�\��^Sd���#��#taw##�###�"�#�""#�p#�"}"�"~"w"|"v""�"u"s"�y}��"�"####�"v"B�"w"z"j"|"�"z"u"v"e"i"_j"t"e"n"^"De"\"j"m"h"i"i"^"]"T"b"a"Q"hP"W"M"L"L"K"O"X"P"b"#�]���#���U�W���c"I"O"V"U"I"R"R"M"E"G"J"*<"l"|K"?"<"=":"3"4","9";"/"<","6"="("3"""5"*"2" "."'"("2""0"+""-"""")"$"""""!""""A%)"�"""""(#""-
""
"#3"�"""�!""
"�!�!�!""�!�!�!""�!�!�!�!�!�!�!�!�!�!�!�!�!#/C�!u#"�!p�!�#�!�!�!�!�#�!��!�!�!�!�!�!�!�!�!�!�!�!�!�!�!�!�!�!�!�!�!�!�!�!�!�!w^�#Z�!�!\ab#�!�!�!�!�!�!�!�!�!�!�!�!�!�!�!�!�!�!�!�!�!y�c#d��#�#;�!�!�!�!�!�!�! ''{�������������������~|��jpr�c^O��
�
�
��
�
���
����
���
�
�
�
��
�
�
�
��
�
��
��
�
�#�
��
��
��
��
��
��
�
�
�
�
�
�
�
"�
(�
,�
5|
9n
=j
?i
Ce
JS
PN
T>
Z<
^9
e7
g'
k"
o
q
x
|

�
������������������������������������������m�h�X�V�S�QA<*)%$#!%)06�:�@�D�K�M�Q�U�W�^�b�h�l�r�y�}���������r�p�m�k�[�V�D�C�?�>�;�-�)�(����
��
��
��
��
��
	�
	�
		�
	�
	�
	�
	�
 	�
&	�
*	�
1	�
3	�
7	�
;	�
=	�
D	u
H	p
N	^
R	]
X	Y
_	X
c	U
e	G
i	C
m	B
v	6z	\�	��	��	��	��	K�	i�	��	��	��	��	��	�	�	 �	K�	R�	U�	j�	��	��	��	��	��	��	��	��	��	�
P
R
S
T
U
�
�!
�#
�*
�.
�4
�8
�>
�E
�I
�K
�O
�S
�\
�`
�f
j
q
s
w
{
}
�
�
 �
(�
)�
0�
1�
5�
7�
8�
9�
;�
<�
>�
?�
@�
B�
C�
D�
E�
F�
G�
J�
i�
k�
s�
t�
v��	�����$�+�/�1�5�9�B�F�L�P�W�Y�]�a�c�g�n�t�x�~�������	�
����� �$�)�2�6�7�G�I�L�N�R�c�d�u�y�~������
������(�,�2�6�=�?�C�GIMT
Z^dk-o/q2u4y8{I�J�[�_�d�f�v�w�{�������������������������������������	
	
	
	
	
	
	#
/	%
0	)
A	-
E	/
J	3
L	:
\	@
]	D
a	J
o	Q
r	U
s	W
w	[
x	_
�	a
�	h
�	l
�	r
�	v
�	
�	�
�	�
�	�
�	�
�	�
�	�
�	�
�	�
�	�
�	�
�	�
�	�

�

�

�

�
'
�
+
�
#�
#
".:FR^j>
v|��������������'2>H@
R^jv�����������*6BNZfr~����������&2>JVbnz�����������
".:FR^jv�����������*6BNZfr~����������&2>JVbnz�����������
".:FR^jv�����������*6BNZfr~����������&2>JVbnz�����������
".:FR^jv�����������*6BNZfr~����������&2>JVbnz�����������
".:FR^jv�����������*6BNZfr~����������&2>JVbnz�����������
".:FR^jv�����������*6BNZfr~����������   & 2 > J V b n z � � � � � � � � � � � 
!!"!.!:!F!R!^!j!v!�!�!�!�!�!�!�!	


























	

"#$%&'()*+,-./0123456789:; !"#$%&'()*+,-./0123456789:;<=>;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;���rr�~b�bbb�bbbbbbbhhbbbbbb}�}}}}}}}}}}}}}}}}}}}}cbe��������������������''&gf|{{jjz���������rrusr~M�wU�\X�RHPIQ$lT�Slh(`NMLEOa�Z}}}}}�}}}}}}}}}}}}}}}}	}}}}}]}}}}}}}}}}}}Y[����wd���������������������%&fkj�������rtKw��lliVJW��}}}}}}^}}}}}}}}}}}}}}}}}}}}}}}}})}}}}}}}}}9+}_�wy��������������kr�}}}}}}}}}}}}}}}}}}}}}}4}}}}}}}}}}F}}}}}}}}}}}��������r,��}}}}}}}G *}}}}<}}}}}@}}}}}}};}}}}}}}D
x��rvv2-}}}}}}}}}}
}}}}}}:}}}}}}C}>r03}}}}}}}}}}}}"}}5}}A}7r/1.}q}}p}?}}}}}}}}}rm}}}}}}}}!B}r}}o#}}r}}}}rn}68r}r}r=rrrrrrsrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrinput in flex scanner failedbad buffer in yy_scan_bytes()start-condition stack underflowout of memory expanding start-condition stackout of dynamic memory in yy_create_buffer()/builddir/build/BUILD/php-5.2.17/Zend/zend_language_scanner.cUnterminated comment starting line %dUnexpected character in input:  '%c' (ASCII=%d) state=%dfatal flex scanner internal error--end of buffer missedfatal error - scanner input buffer overflowfatal flex scanner internal error--no action foundout of dynamic memory in yy_scan_buffer()out of dynamic memory in yy_scan_bytes()Error parsing %s on line %d
PHP:  %sInvalid configuration directive
u_�0`�`��_�b��_�J_�Sb�+b�b�a��`�`�q^�q^�q^�a��a�Ia�a��`�a�\a�`�
	 !
	
		
�� !
	#"$%
 !

��������������
���������������


	

	�g�pf�wf�f��f��i�j�j��g��g�g�Af�Af�ce�ce�ce�h�g�?%!!(%.///000.=:(;;;<<<@@@AAABB87654321-,+*)'&$#
>>>>>>>>>>>>>>>>>>>>>>>>>>	

	"#(%())&.*+%*&+"#30.9:;9:<&6949:;9:<!!!$$+73663=1+876521/"-,'-,' >>>>>>>>>>>>>>>>>>>>>>>>>>>>?>>>?>@>A>B?????>?>>?????@>>A>>BB>???????>>>>???????>>>>?>>>>ijjej`NjXQUjj#U
NRXjj.j[Q(WK.JJSAB036P@NDAKJ@j;=@/j!EHK	


	

	
																						/dev/zerozend_mm_heap corrupted
Fatal error: mallocZEND_MM_MEM_TYPE    '%s'
ZEND_MM_SEG_SIZEZEND_MM_COMPACT  supported types:
USE_ZEND_ALLOCmmap_anonmmap_zero/builddir/build/BUILD/php-5.2.17/Zend/zend_alloc.cAllowed memory size of %ld bytes exhausted (tried to allocate %lu bytes)Out of memory (allocated %ld) (tried to allocate %lu bytes)Allowed memory size of %ld bytes exhausted (tried to allocate %ld bytes)Out of memory (allocated %ld) (tried to allocate %ld bytes)'block_size' must be a power of two
Cannot initialize zend_mm storage [%s]
ZEND_MM_SEG_SIZE must be a power of two
ZEND_MM_SEG_SIZE is too small
Wrong or unsupported zend_mm storage type '%s'
Possible integer overflow in memory allocation (%zu * %zu + %zu)%p%c%s%s%sCannot re-assign $thisCannot use [] for readingCannot use [] for unsettingCannot redeclare %s::%s()__destruct__call__get__set or weakerCannot redeclare %s()Cannot redeclare class %sInvalid binding typeIllegal member variable nameCorrupt member variable namenon static Cannot redeclare %s::$%sticksCannot inherit previously-inherited or override constant %s from interface %s%s function %s::%s() cannot be declared private%s function %s::%s() cannot contain bodyNon-abstract method %s::%s() must contain bodyCan't use method return value in write contextCan't use function return value in write contextMultiple access type modifiers are not allowedCannot use the final modifier on an abstract class memberAccess type for interface method %s::%s() must be omittedStatic function %s%s%s() should not be abstractRedefining already defined constructor for class %sDefault value for parameters with a class type hint can only be NULLDefault value for parameters with array type hint can only be an array or NULLClone method does not require argumentsCall-time pass-by-reference has been deprecated; If you would like to pass it by reference, modify the declaration of %s().  If you would like to enable call-time pass-by-reference, you can set allow_call_time_pass_reference to true in your INI fileCall-time pass-by-reference has been deprecatedOnly variables can be passed by referenceCannot override final %s::%s() with %s::%s()Can't inherit abstract function %s::%s() (previously declared abstract in %s)Cannot override final method %s::%s()Cannot make non static method %s::%s() static in class %sCannot make static method %s::%s() non static in class %sCannot make non abstract method %s::%s() abstract in class %sAccess level to %s::%s() must be %s (as in class %s)%sDeclaration of %s::%s() must be compatible with that of %s::%s()Declaration of %s::%s() should be compatible with that of %s::%s()Class %s could not implement interface %sInterface %s cannot implement itselfInterface %s may not inherit from class (%s)Class %s may not inherit from final class (%s)Class %s cannot implement previously implemented interface %sInternal compiler error.  Please report!Cannot redeclare %s() (previously declared in %s:%d)Internal Zend error - Missing class information for %sClass %s cannot extend from interface %sConstructor %s::%s() cannot be staticDestructor %s::%s() cannot be staticClone method %s::%s() cannot be staticCannot use 'self' as interface name as it is reservedCannot use 'parent' as interface name as it is reservedCannot redeclare %s%s::$%s as %s%s::$%sAccess level to %s::$%s must be %s (as in class %s)%sCannot change initial value of property static protected %s::$%s in class %sInterfaces may not include member variablesProperties cannot be declared abstractCannot declare property %s::$%s final, the final modifier is allowed only for methods and classesArrays are not allowed in class constantsCannot redefine class constant %s::%sinstanceof expects an object instance, constant givenKey element cannot be a referenceCannot create references to elements of a temporary array expression%s() must take exactly 1 argumentCannot call __clone() method on objects - use 'clone $obj' insteadClass declarations may not be nestedCannot use '%s' as class name as it is reservedCannot use 'self' as class name as it is reservedCannot use 'parent' as class name as it is reserved�������l��������������H����������X����X��X��H��X��X����X��X����X��X����X��X��x����������������������_�N������������!�!�!�@!�!�!�E!�h!�__COMPILER_HALT___COMPILER_HALT_OFFSET__Constant %s already definedE_RECOVERABLE_ERRORE_PARSEE_NOTICEE_CORE_ERRORE_CORE_WARNINGE_COMPILE_ERRORE_COMPILE_WARNINGE_USER_ERRORE_USER_WARNINGE_USER_NOTICEE_ALLTRUEFALSEZEND_THREAD_SAFECannot access self:: when no class scope is activeCannot access parent:: when no class scope is activeCannot access parent:: when current class scope has no parent[no active file]Undefined class constant '%s'Class '%s' not foundInterface '%s' not found, ...Maximum execution time of %d second%s exceededCannot declare self-referencing constant '%s'Use of undefined constant %s - assumed '%s'Corrupted fcall_info provided to zend_call_function()Cannot use call_user_function on objects without a class entryNon-callable array passed to zend_call_function()Cannot call method %s() or method does not existObject does not support method callsCannot call method %s::%s() or method does not existCannot call method %s() of class %s which is not a derived from %sCannot call abstract method %s::%s()Function %s%s%s() is deprecatedNon-static method %s::%s() cannot be called staticallyFunction %s(%s) threw an exception of type '%s'Class %s contains %d abstract method%s and must therefore be declared abstract or implement the remaining methods (%s%s%s%s%s%s%s%s%s%s%s%s)�;�;�;�;�@;�;�p;�;�x@�h@�(@�h@�C@�C@�h?�Tk�Ck�dl�tl�k�\l��j��j�&nbsp;&nbsp;&nbsp;&nbsp;<code><span style="color: %s">
</span><span style="color: %s"></span>
</code>pl�l��l��l��l��l��l��l��l��l��l��l��l��l��l��l��l��l��l��l��l��l��l�l��l��l��l��l��l�l��l��l��l��l��l��l��l��l��l��l��l��l��l��l��l��l��l��l��l��l��l��l��l�Xl�Ran out of opcode space!
You should probably consider writing this huge script into a file!
/builddir/build/BUILD/php-5.2.17/Zend/zend_opcode.cClass %s:
End of class %s.

���������̀�܀���������,��<��������L��\��l��|����������������̀�܀���������,��<��Object of class %s could not be converted to %sObject of class %s could not be converted to intCannot convert to ordinal valueObject of class %s could not be converted to doubleCannot convert to real value (type=%d)Object of class %s to string conversionq��(����(��������������������p��������ψ���ψ�p����P��Ȉ�M��7��`����������0���������� ��h��`������З�З���З���������ܗ�ܗ���ܗ�@��0����X������������@������h��h����h�� ��`����ا�0��0��`��0������`��@����������������Я���������x��h����p������8������P��8��#����ȷ�����0������S��@��8��p��������p����H�� ������`����H��0������0����p�� ����P������P������@����k��X�� ��������X����������о���p��P��о�������x��(��������x��������@��������@��C��0���������`��8�����s��`��������P��0��������@���� ��x����������������@��`�� �����S��@����������(��`������p��H������������������P���� ������������X��`����8����x��X�� �����������J��������H��0����0������`��0��9223372036854775808Resource id #%ldArray to string conversionUnsupported operand typesDivision by zero�����������,��,��Internal zval's can't be arrays, objects or resourcesUnknown ClassArray ( *RECURSION*%s Object ([] => stdClassstdclass    with %s v%s, %s, by %s
Array
 Object
(
%s(%d) : %serror_reportingzend.ze1_compatibility_modeZend Engine v2.2.0, Copyright (c) 1998-2010 Zend Technologies
Object of class %s could not be converted to string%s(%d) : Bailed out without a bailout address!��� �@�p�0���%s() has been disabled for security reasonsCannot load module '%s' because required module '%s' is not loadedWrong parameter count for %s%s%s()Class entry requested for an object without PHP classNon-static method %s::%s() cannot be called statically, assuming $this from compatible context %sImplicit cloning object of class '%s' because of 'zend.ze1_compatibility_mode'Trying to clone uncloneable object of class %sadd_assoc_function() is no longer supportedDestructor %s::%s() cannot take argumentsMethod %s::%s() cannot accept any argumentsMethod %s::%s() must take exactly 1 argumentMethod %s::%s() cannot take arguments by referenceMethod %s::%s() must take exactly 2 argumentsInvalid access level for %s%s%s() - access must be exactly one of public, protected or privateStatic function %s%s%s() cannot be abstractInterface %s cannot contain non abstract method %s()Method %s%s%s() cannot be a NULL functionFunction registration failed - duplicate name - %s%s%sMethod %s::%s() cannot be staticCannot load module '%s' because conflicting module '%s' is already loaded%s:  Unable to register functions, unable to loadrequest_startup() for %s module failed%s%s%s(): bad type specifier while parsing parameters%s%s%s() expects %s %d parameter%s, %d given%s(): could not obtain parameters for parsingA non well formed numeric value encountered%s%s%s() expects parameter %d to be a class name derived from %s, '%s' given%s%s%s() expects parameter %d to be a valid class name, '%s' given%s%s%s() expects parameter %d to be %s, %s given%s::%s() must be derived from %s::%sProperty %s of class %s cannot be updatedProperty %s of class %s cannot be readUnable to start %s moduleabstract classCannot instantiate %s %s__unset__issetModule '%s' already loadedat mostexactlyat leastdisplay_disabled_function0%�@%�P%��$��$�%�%� %�w� y� y� y� y� y� y� y� y� y� y� y� y� y�w� y� y� y� y� y� y� y� y� y� y� y� y� y� y� y� y� y� y� y�y� y� y� y� y� y� y� y� y� y� y� y�y� y� y� y� y� y� y� y� y� y� y�y� y� y� y� y� y� y�y�y� y�y� y�y� y�y� y� y� y�y� y� y�y�y� y�y�y� y� y� y� y� y� y�y� y�w�|�����������������������{���������������������z�������������z�}���P}���0{����z�������y�����`y��|���y��|��������������x��U��U��U��S����U��9223372036854775808Failed loading %s:  %s
_extension_version_info_zend_extension_entryisn'tdoes not%s doesn't appear to be a valid Zend extension
%s requires Zend Engine API version %d.
The Zend Engine API version %d which is installed, is outdated.

%s requires Zend Engine API version %d.
The Zend Engine API version %d which is installed, is newer.
Contact %s at %s for a later version of %s.

Cannot load %s - it %s thread safe, whereas Zend %s
Cannot load %s - it %s debug information, whereas Zend %s
e��T��t��*��l������Ԯ�T��A��M��E���U��β����0��y��(��K��3����%����4�����,������������@��H��e��8��;��%�������'��/��r����H��2��Z��H��d������t��������Nesting level too deep - recursive dependency?Unknown list entry type in request shutdown (%d)Unknown persistent list entry type in module shutdown (%d)%s%s%s(): no %s resource supplied%s%s%s(): supplied argument is not a valid %s resource%s%s%s(): %d is not a valid %s resource%s%s%s(): supplied resource is not a valid %s resource2.2.0runtime-created function__lambda_func%clambda_%dInvalid error type specifiedsz|bzend->#%-2d ) called at [%s:%d]
%s(zend_versionfunc_num_argsfunc_get_argfunc_get_argsstrcmpstrncmpstrcasecmpstrncasecmpeachdefineget_classget_parent_classmethod_existsproperty_existsclass_existsinterface_existsfunction_existsget_included_filesget_required_filesis_subclass_ofis_aget_class_varsget_object_varsget_class_methodstrigger_erroruser_errorset_error_handlerrestore_error_handlerset_exception_handlerrestore_exception_handlerget_declared_classesget_declared_interfacesget_defined_functionsget_defined_varscreate_functionget_resource_typeget_loaded_extensionsextension_loadedget_extension_funcsget_defined_constantsdebug_backtracedebug_print_backtraceSupplied argument is not a valid resource handleget_class() called without object from outside a classfunction __lambda_func(%s){%s}Unexpected inconsistency in create_function()Cannot add internal functions to return value from get_defined_functions()Cannot add user functions to return value from get_defined_functions()%s() expects the argument (%s) to be a valid callbackfunc_get_arg():  The argument number should be >= 0func_get_arg(): Can't be used as a function parameterfunc_get_arg():  Called from the global scope - no function contextfunc_get_arg():  Argument %ld not passed to functionfunc_get_args(): Can't be used as a function parameterfunc_get_args():  Called from the global scope - no function contextFirst parameter must either be an object or the name of an existing classVariable passed to each() is not an array or objectLength must be greater than or equal to 0func_num_args(): Can't be used as a function parameterfunc_num_args():  Called from the global scope - no function contextUnknown class passed as parameteris_a(): Deprecated. Please use the instanceof operatorConstants may only evaluate to scalar valuesClass constants cannot be defined or redefinedg/�61�1�g/�1�g/�g/�g/�1�g/�g/�g/�g/�g/�g/�g/�H1�j7�6�+7�j7�I7�j7�j7�j7�:7�j7�j7�j7�j7�j7�j7�j7��6�Unlimited<font style="color: %s">%s</font>__iterator_wrapperClass %s cannot implement both %s and %s at the same timeClass %s must implement interface %s as part of either %s or %sCouldn't execute method %s%s%sCouldn't find implementation for method %s%s%sNothing returned from %s::key()Illegal type returned from %s::key()%s::serialize() must return a string or NULLObjects returned by %s::getIterator() must be traversable or implement interface IteratorIteratorAggregateArrayAccessSerializable�S�0T�@T�0T��S�`T�T�0T�SV�V��V�V�8V�8V�V�V�|sl|sllslseverity#%d {main}#%d %s(%ld): #0 {main}
gettraceasstringErrorExceptionUncaught %s
  thrownUncaught exception '%s'getSeveritylinenogetMessagegetCodegetFilegetLinegetTracegetTraceAsStringWrong parameters for Exception([string $exception [, long $code ]])Wrong parameters for ErrorException([string $exception [, long $code, [ long $severity, [ string $filename, [ long $lineno ]]]]])Exception thrown without a stack frameexception '%s' with message '%s' in %s:%ld
Stack trace:
%sexception '%s' in %s:%ld
Stack trace:
%sExceptions must be derived from the Exception base class%s::__toString() must return a stringUncaught %s in exception handling during call to %s::__tostring()Need to supply an object when throwing an exceptionExceptions must be valid objects derived from the Exception base class�k�h��i�Xk�k�j�l�Xh�[internal functiBalloc() allocation exceeds list boundaryBalloc() failed to allocate memoryInfinity}��ؗ�Ҝ<3���#�I9=��D��2�����[%Co�d(�
��7y�ACn����F��?�O8M20�Hw�Z<�s�Ou�?$@Y@@�@��@j�@��.A�cA�חAe��A _�B�vH7B��mB@�0�B�ļ�B4&�kC��7y�AC�؅W4vC�Ngm��C=�`�X�C@��x�DP����KD��M��D�?aCoc���?��`�(��?�y�PD�?<�s�Ou@@��7y�AC��ؗ�Ҝ<@�5�����?5�5�?�5�����?0@ @H@ during shutdown ignoredCall to private %s::__destruct() from context '%s'%sCall to protected %s::__destruct() from context '%s'%sIgnoring exception from %s::__destruct() while an exception is already active (Uncaught %s in %s on line %ld)Trying to clone an uncloneable object of class %sCannot access empty propertyUndefined property: %s::$%sUndefined offset for object of type %s used as arrayCannot use object of type %s as arrayCannot get arguments for __callMethod %s::__toString() must not throw an exceptionMethod %s::__toString() must return a string valueCannot access property started with '\0'Accessing static property %s::$%s as non staticCannot access %s property %s::$%sIndirect modification of overloaded property %s::$%s has no effectCall to private %s::%s() from context '%s'Call to private %s::%s() from invalid contextCall to protected %s::%s() from context '%s'Call to protected %s::%s() from invalid contextCall to %s method %s::%s() from context '%s'Call to undefined method %s::%s()Access to undeclared static property: %s::$%sAttempt to unset static property %s::$%s�����T���������������-����-�����\��>��-��,����,�����U��9��,��/builddir/build/BUILD/php-5.2.17/Zend/zend_objects_API.cCannot write property of object - no write handler definedCannot read property of object - no read handler defined�����f���<��&���� � ��� � � � � ��� � � � � � � � �������������������������������������������������������"�!�� ��"�4��"��"��"�� ��"��"��"��"��"��"��"�4�"�� � �"���"�"�"� �"�"�"�"�"�"�"���\"�� �� �\"�� �\"�\"�\"�� �\"�\"�\"�\"�\"�\"�\"�� �`5�p5�5�5�5�(5�5��6�6�7�7�,7��6�l6� B��A�A�B�A�A� B�G�4E��D�G�\C�G�G�G��D�G�G�G�G�G�G�G�\C��F��D�D��F�C��F��F��F�D��F��F��F��F��F��F��F�C�|F�E�D�|F��D�|F�|F�|F�D�|F�|F�|F�|F�|F�|F�|F��D�I� I�0I� I��H�HI�I� I��X�Y�HW�Y�8Y�8Y�X�Y�[�Z��Z�Z�0[�0[�Z�Z��]��]�]��]�^�^�h]��]�xa�`a�@a�`a��a��a�`�`a����~��H�H�~�܀���4����\��\�����X�������ԃ���,����T��T����������P������Ҍ�Œ���Œ�6����������p��P��p������p���@��Ж�@��H��H���@��P��0���0�������0������p���������� ������������������������������������������������p��$��������\��\�����&��&�&��&�'�'�D&��)�)�)�)�h*�h*�()�4,�$,�+�$,�d,�d,�+�p.�.��.�.�.�.�.�0�0��0�0�1�1�,0�p;�;�;�;�)9�)9�p;��U�V��U�V�$V�$V�LU�V��[��Y�Y��[�X��[��[��[�Y��[��[��[��[��[��[��[�X�[�Y�pY�[��W�[�[�[�pY�[�[�[�[�[�[�[��W�<[��Y�Y�<[�Y�<[�<[�<[�Y�<[�<[�<[�<[�<[�<[�<[�Y��������(��؅�X��,��ә������,��p��H�� ��H���������$�������������|��X��H�� ��H��������������L��L��4��|��l��������̩�̩���|��ʮ�����|���������������������������_��_����$��%��%��(%��8%���$��x$���9���9��:���9��4:��4:��l9��@@��p@���@��p@���@���@���?��$H���G��H��$H���G��$H��$H��$H���G��$H��$H��$H��$H��$H��$H��$H��G���J�� J��pJ���J��8J���J���J���J��`J���J���J���J���J���J���J���J���I��Y���X���X��Y���X��Y��Y��Y���X��Y��Y��Y��Y��Y��Y��Y���W���f��xf���f���f���f���f���f���f���f���f���f���f���f���f���f���f���e��y���x��Dy���x��dy��dy��$y���x���{��l{���{���{���{���{���{���{���{���{���{���{���{���{���{���{���z��@��� ������ ���h���h������� ������������������������������ ���@���`���@���p���p�������@���X��@�� ��@�����������@�������0������������ ��������������� �����\���$�������L���������������L���������@�@���������X���(�(��t������t�����t���t���t�����t���t���t���t���t���t���t�������������h�������0���������������X�������������������������������X������������������������������d�����,�����������T�����������������������\�����h��@��h�����������$��D��$��d��d�����$�������� �����$ ��$ ���������#���#��$���#��$$��$$��T#���#��,��$,��D,��$,��d,��d,��+��$,��8���7���7���7��L8��L8���7���7��O��4O��TO��4O��tO��tO���M��4O���V���V��W���V��$U��$U��LV���V��`���_���_��`���_��`��`��`���_��`��`��`��`��`��`��`���^��g���f���f��g���f��g��g��g���f��g��g��g��g��g��g��g���e���m��Lm���m���m��dm���m���m���m���m���m���m���m���m���m���m���m��tl��x���w���w��x���w��x��x��x���w��x��x��x��x��x��x��x���v���������t�������,���������������T�������������������������������4�������0�����������P���������������p�������������������������������H�������D���T�������l���������������|�������������������������������,���Invalid opcode %d/%d/%d.eval()'d codeUndefined variable: %sIllegal offset type in unsetCannot use object as arrayCannot unset string offsetsCan only throw objectsIllegal string offset:  %dCan not call constructorshould notcannotMethod name must be a stringimplement interface be an instance of Cannot create references to/from string offsets nor overloaded objectsOnly variable references should be returned by referenceCannot use string offset as an objectCannot access undefined property for object with overloaded property accessThis object doesn't support property references%s cannot implement %s - it is not an interface__clone method called on non-objectTrying to clone an uncloneable objectCall to private %s::__clone() from context '%s'Call to protected %s::__clone() from context '%s'/builddir/build/BUILD/php-5.2.17/Zend/zend_vm_execute.hObject of type %s did not create an IteratorInvalid argument supplied for foreach()Argument %d passed to %s%s%s() must %s%s, %s%s given, called in %s on line %d and definedArgument %d passed to %s%s%s() must %s%s, %s%s givenTrying to get property of non-objectUsing $this when not in object contextIllegal offset type in isset or emptyCreating default object from empty valueAttempt to increment/decrement property of non-objectCannot use string offset as an arrayClass name must be a valid object or a stringResource ID#%ld used as offset, casting to integer (%ld)Cannot use a NULL value as an array[] operator not supported for stringsUninitialized string offset: %ldIndirect modification of overloaded element of %s has no effectCannot unset offset in a non-array variableCannot use a scalar value as an arrayCannot increment/decrement overloaded objects nor string offsetsCannot break/continue %d level%sAttempt to assign property of non-objectCannot use assign-op operators with overloaded objects nor string offsetsCannot return string offsets by referenceforeach() can not iterate over objects without PHP classCannot pass parameter %d by referenceCall to undefined function %s()Function name must be a stringCannot call private %s::__construct()Non-static method %s::%s() %s be called statically, assuming $this from incompatible contextCall to a member function %s() on a non-objectOnly variables should be passed by referenceCannot assign by reference to overloaded objectMissing argument %ld for %s%s%s(), called in %s on line %d and definedMissing argument %ld for %s%s%s()Non-static method %s::%s() %s be called staticallyCannot call overloaded function for non-objectOnly variables should be assigned by referenceSCRIPT_NAMEPATH_TRANSLATEDDOCUMENT_ROOTphp://stdinphp://stdoutphp://stderrSTDINYou can use -E only once.
You can use -B only once.
You can use -r only once.
You can use -f only once.
[PHP Modules]

[Zend Modules]
13:48:14Mar  9 2026Interactive shell
--Could not startup.
php > ~/.php_historyexitphp shell codeErrors parsing %s
Command line codeCommand line begin codeargiargnCommand line run codeCommand line end codeException: %s
Extension '%s' not present.
Command Line Interfaceinteractiveprocess-beginno-chdirprocess-endprofile-infoprocess-filehelpsyntax-checkmodulesno-php-inino-headerprocess-codehide-argsrunsyntax-highlightsyntax-highlightingstripzend-extensionrfrfunctionrclassrextensionrextinfoCould not open input file: %s
Either execute direct code, process stdin or use a file.
Source stripping only works for files.
Source highlighting only works for files.
You can use -R or -F only once.
html_errors=0
register_argc_argv=1
implicit_flush=1
output_buffering=0
max_execution_time=0
max_input_time=-1
Usage: %s [options] [-f] <file> [--] [args...]
       %s [options] -r <code> [--] [args...]
       %s [options] [-B <begin_code>] -R <code> [-E <end_code>] [--] [args...]
       %s [options] [-B <begin_code>] -F <file> [-E <end_code>] [--] [args...]
       %s [options] -- [args...]
       %s [options] -a

  -a               Run as interactive shell
  -c <path>|<file> Look for php.ini file in this directory
  -n               No php.ini file will be used
  -d foo[=bar]     Define INI entry foo with value 'bar'
  -e               Generate extended information for debugger/profiler
  -f <file>        Parse and execute <file>.
  -h               This help
  -i               PHP information
  -l               Syntax check only (lint)
  -m               Show compiled in modules
  -r <code>        Run PHP <code> without using script tags <?..?>
  -B <begin_code>  Run PHP <begin_code> before processing input lines
  -R <code>        Run PHP <code> for every input line
  -F <file>        Parse and execute <file> for every input line
  -E <end_code>    Run PHP <end_code> after processing all input lines
  -H               Hide any passed arguments from external tools.
  -s               Output HTML syntax highlighted source.
  -v               Version number
  -w               Output source with stripped comments and whitespace.
  -z <file>        Load Zend extension <file>.

  args...          Arguments passed to script. Use -- args when first argument
                   starts with - or script is read from stdin

  --ini            Show configuration file names

  --rf <name>      Show information about function <name>.
  --rc <name>      Show information about class <name>.
  --re <name>      Show information about extension <name>.
  --ri <name>      Show configuration for extension <name>.

PHP %s (%s) (built: %s %s) %s
Copyright (c) 1997-2010 The PHP Group
%sNo syntax errors detected in %s
Configuration File (php.ini) Path: %s
Loaded Configuration File:         %s
Scan for additional .ini files in: %s
Additional .ini files parsed:      %s
"

=1
U`�>`�'`�`�`��^��^��^��^��^��^��^��^��^��^��^��^��^��^��^��^��^��^��^��^��^��^��^��^��^��^��^��^��^��^��^��^��^��^��^��^��^��^��^��^��^��^��^��^��^��^��^��^��^��^��^��_��^��^��`��`��^��`��^��^��^��^��^��^��^��^��^��`��^��^��^��^��^��^��^��^��^��^��^��^��^��^�a��^��^��^��_��_��^��^��^��^��^��_��^��^��^��^��^�;_�%_��^��^��^�l`��^��^�q_�Lf�f��X��e��e��k�Ri�ac�ac�ac��b�Ib�%s::%s<?<%<?phpphp ( php { php ' php " /*  > <<< >     > Ê��Ê��<���<���Ê��<���<���<���<���<���<���<���<���<���<���<���<���<���<���<���<���<���<���Ê��<���	���C���<���n���<������������<���<���<���<���<�����<���<���<���<���<���<���<���<���<���<���<������#���<���<�������<���<���<���<���<���<���<���<���<���<���<���<���<���<���<���<���<���<���<���<���<���<���<���<���<���<���<���<���<���<���<���<���<���<���<���<���<���<���<���<���<���<���<���<���<���<���<���<���<���<���<���<���<���<���<���<���<���<���<�������<�������Error in argument %d, char %d: : in flags
option not found %c
no argument for option %c
; �����d�� ���R�H�4R���>R���HR�(�RR���\R�0�fR��pR�8�|R�<oli�<��i�P�\j���|j����j�ԝ�j��,k��Ll�H��m���,n���Ln���ln�Ԟ|n��,o��|o�8��v�t��w���y�ğlz���L|�H�<}���,~���,��l��(�<��\���������|���L��0���X�܍�t������܏��̑� ����L������\�������̕��|��<���h���������|���,��p��������L�����t�������������,����D����x�����l��4�l��l�����̼��ܼ�������T�,������ĩL����������d����x������\��تl���|���������l�\����l����|������ī���ث��X�l���������������(����<����|�,����<�����$�L��t������l��̮\������8�������i�ԯ�k���l��l�$��l�8�n����o�ܰ�o���o��p� ��u�l��u���<w����w���w���Lx�0�lx�L��x�`��x�|��x����y�ܲ|z����z��<{�@�\{�T�\|�h����|�ȳL���|��L�L��|��������\��4����T�̎�h�<����|����,����<��ĵ\��ܵ<��$�\��<�̒�X������̔������,�� �L��8����L������<����������l��\�,��x���̸<���������������0���X�,��p�L����l������������Թ����,�� ����D���p�ܧ�ĺL�������l��@���p�<����̪���L������,�� �<��4�L��H����`���x����ؼ̸�$�l��P���|�<����<������$�\��L���l��������������L��8���|��������Ŀ<��ؿ���(������L������,����d������L����l�������L��$����l�L�������������L��<���p��������������,��@�,���������\��0�����|����	�(�
�L��
�p��
���|�\�����,"�@�|$����&���)�l�\+���L-��,/�h�1���3���4�\��9����;�(��B���LF��\F���I�`�<L���,O����Q�$�lU�h��\����\����\���\]��^�8�<b���\c���<d�(��n����q���q� �lr�4��r�P�\t���lt����t����t���u����v��,w�(��z�t����������|��8�̋���܌� ���4����H���������������<���L���\��,������|����̳�<�|��d�����,����<�������<�� ����<�ܹ�X�����̾���l��H������\�����������$�\���������<�������@�l���������\��,����x����������,����|�������|��d�����������l��������|��<�L����|������������<��,�|��D�\���������<��$�L��8����T����t���������������������������4����������������������T������,����\����l�4���P��h�L�����������8�<�\�����\	����	������
�(��T�����������������<�<�T���h���|����������������,��, �T�\#���l$���%����)���)�(��)�<��*�h�L+���|+���,-����.���0�X�L2����3����5��l7�H�9����:���|<���,>�<�<>�P�L>�d�\>�x�l>���|>����>����>����>����>����>���>���>�,��>�@�?�T�?�h�,?�|�<?���L?���\?���l?���|?����?����?���?���?�0��?�D��?�X��?�l��?���@���@���,@���<@���L@���\@���l@��|@� ��@�4��@�H��@�\��@�p��@����@���,A���,^���l`���|`���`�,��b�`��d���lh����k�4��k�H��k�\��l����m����q���|r���z�D��{�h��{����������������H�<������������������$�,��P�|���������ܡ���<��(�,��T�L�������,����<���L��$�\��8�l��L����`�̧�|�����ܩ��l�����|�ܮ������<��0�L��D�̼�\�ܼ�p�����<�������l���,��(����T�<�����������������������X�,����l����L���L��P�<��|��������l���<���l��X�\����\��@�,���|����L�0�L	�x�<������,�DL�\��x���� ���!�,�!�D�"�X<#�t�#���%���'�,<-�x�0��2��,5�7�@�7�d�<���=��L>�4�A���C���D���E�0,G�lH��,I���I���J��<K�L� �L��lR��,T��[�d�]���_�(�`�d�f���h���i�	�i�	,j�4	k�X	l�|	�l��	�m��	�n�
�o�@
�p�l
lq��
r��
,s��
t�$�t�P\v��Lw��Lx��Ly�(|{���}��\~�
��T
,���
|���
<��l��d��������d܏��̐��������� L��L���|�������ܗ����Lܙ��������̝�L<��������������,��8���X|���,�������<�����H<��h����\������ܩ�,���t|���\��D|��X���lL���̸�L��4���|�������������,��4̾��L�����0\��|���������������$���T����<���������0���\���p\���l���|������������������\������|������$���`��������������� \��T����|���������,���`�����������<�� ��L ��� ��� ,��� l��!���$!���H!���t!���!����!���!\�$"L�X"<��",	��"<��"
� #<�T#��#,��#�!��#L"�$$#�P$�$��$,&��$|(�4%<)��%\)��%l*��%�*�&\-�h&l-�|&|-��&1��&,1�'<1�'<3�l'�3��'�6��',7��'�7��'L9�T(|9�h(,:��(�?��(LA� )B�T)lB�h)�B�|)|C��)D��)�F��)LH�@*I�l*|J��*LK��*�M�4+,O��+,P��+\P��+�P��+�P��+<Q��+�Q�,�Q�,,W�|,�X��,\Y��,�^�D-,`��-�`��-,d�.�e�X.|f��.�i��.Lk� /l�L/\l�h/�l�|/<m��/�m��/n��/�n��/�n��/lo��/�o�0Lp�0�p�00,q�D0�q�X0r�l0|r��0�r��0\t��0v�1�w�H1y�|1\z��1L{��1�{��1<��H2����2܋��2,��3|��3|��\3\���3\���3|���3\��D4���X4\���4����4��45<��H5���5���5��46|��6���6���6���6L�7|�7��07��D7�X7<�l7l��7���7���7|��7���7��8��48���8< ��8\ ��8L!� 9L"�L9,(��9�@�:�M�X:�N��:lR�;�S�4;�U�h;�U��;�X��;,`� <\a��<�c��<lg� =�h�h=�i��=k��=�m�$>Ln�h>�n��><o��>�o��>\q�?<s�|?ls��?|s��?�s��?�s��?Lt��?�u�8@�u�T@v�l@|v��@�v��@�w��@,y�A�y�@A,z�dA�z��A,{��A�{��A�� B̂�\B���Bl���B|���B����B����B\��4C|��LCL��xC����C\���C|��$D���@Dܗ�tD���D\���D���DL��,E���pE���E,���E<���EL���E����E��F���4F���HF���tF���F���F̤��Fܥ�@Gl���G���G���H���<H����H\���Hl���Hl��0I���dI���I����I|��4J��pJ����J���K,��HK��tK����K<��L,��`L����L���L���<M��pMl���M���M���N����N|���N<��O\��PO,���O����O\��P���,P|��|P����Pl���P����P���Q��� Q���4Q��HQ,��\QL��pQ����Ql���QL��R���HR����Rl���R,���R���(Sl��XS���S����S<���SL��T���PT��dT<��xTl���T����T����T����T,���T���Ul��@U���pU����U���U���V���HV\���V���V���V���,W,��hW\��|W����W����WL���W��X���DX��XX��lX<���Xl���X����X,���X��Y��PY,�Y,��Y�Z��8Z��pZ|�Z���Z�	�@[��|[��[�
��[��8\�\���\��]��|]��]��]���],�,^,�`^��^���^��D_��_l �`<!�h`�"�`�#��`�5�<a\6�`a�9�a�<�a�<�b�<� b=�4b,=�Hb\=�\b�=�pb?�b�@��b�B�0c�F�cJ��c\O�<dLP�pd|P�d�P�dL\��dL]�e\^�le�d��e�j�<f�k�|f\l�fLn��f,o�<gp�g�p�glr�h|s�Th�s�hh�t�h|u�h��h|��iL��`i̇�i���i����i<��jL��`j̉�j,��j����j<��0k���dk<��k���kl�� l��\l��l���l���l|��m̜�mL��Tm|��pm<��m̟��m<��,n���n����nܦ�o���ho��o����o��@p���p|���p���ql��dq|��q����q���q|��r��<r\��xr���r\���r\��Hs<��ts|��s���(t<��Dt��tl��t|��u���,u���ul��u��uL��4v���dv���v����v���w���\w���w\��w��w<��x\��0x���Hx,��x��x����x���y���8y\��\y|��py���y���y���y����y���z,��(zL��@z���lz<��z���{���${���@{|��x{���{���{���$|���|����|���(}���`}���x}����}��~<�D~��~���~,�@��<�����	�@��
�x�|��,��<�$���X�<��������l�0���|�����< ��\ ��| ��'��<'�Ѓ\'���.�0�\1���1���<��L?�h�l?�|��?���?��<@��L@��l@���@���A�D��B�p�|C��LG���G�܆�G���I�h��N��O���Q�<��S���T���_���_�(��`�T�<e��Le�ȉ�f��\h�@�j��j��<j��Lj�Ċ|k���k�\��l��m�ԋ,m��lm��|m���m�$��m�8�Ln��\n���t��v�܍v��,v��Lv��lv�,��v�T�w�p�\w��x��,x�؎Lx��,y�@�z��Lz��|z�ȏL{��l{�0��{�L��{�l�|��,|��\|���|�ܐ�|���|��}�0��}�T��}�l���đ܂�����4����`�l���܄�ВL������<���x�|�����Г\�����(�L��P�l���L������<�L��h��������̕�����X�,��|�L���̙�ܖL�����$�ܛ�P���h���������<������|�����������L��̘|�������ܤ�����<��0�l��D����X�̥�l�L���|��ę���$����8����L����`�̧�t�ܧ���������,��̩̚�<���|�\���������\�������,��Ȝ���h�\������,�L��x�\��������������<�<��\����,�����ԟ�����������`�|������Ƞ������0����L���x�<�������<���,�� �<��L������������̢����l��8�������\��ԣ�������������<���\��Ф|�������,�,������̥������,	�`��	����\���,�������0�L�\�l�p����������L�ĩl�ة��$��`����� �ܪ,!���!�$�#�l��$��&�0��'�d��(���)�Ԭ\,�(��-���-���/���/���2�D�3�X�,3�l�L3��\3��l3���3�Ȯ�3��<4���4�0�\5�\�|5�x��5���5��l6�ܯ�6���6� �\7�`�8���8�̰L9���9���9�8�L:�X��:�t��:���;�Ա�<���=�<�l>�h��>��L?���?�ܲ<@��l@�,��@�H�lA�l�\B��lB���B�гC���D�0�lE�d��E���G��LH��<I�H��I�|�LJ��|J�̵�J��\K���K�4��L�p��M���N��\O��,P�<�lQ�l�S��T�ܷ\U���V�T��W���Y�ܸ�Z��[�<��[��l\���\�йl]��^�H��^���_�ĺL`���`� �la�L�,b�x��b���c�лld��,e�(��e�T��f��lg��,h�ؼ�h���i�0�lj�\�,k���k���l���m�$��o�p�q���r��\s�$�,x���y���y���z�H�l|���|��|}��\�,����\����l�����������\���̄�0�L��d����܆��l������������܈�0���L�<��h�܉���������l��4�<��`�̑��<�����������\��P����l������l����ܙ��,��0�L��D���|�\�������������H�����L��(�<��������|��D������������,�����l���L��T�����\��0���|���T�<�����������,���D���h����\�������������L�8���h�\����<���������������`������T�,)����3�D�6�`�,6�t�|7���8���:���:���:�(�<<�L��=�p��>��,@���B���E�X��H���I���<K���L�D��M�x�O��P���R��,T�h�LU��lV���|V���V��g���g����j��<m�|��z����|��\�������������������p��������L�|����������0����D�������������(����ܠ���,��,�̦��L����\���|������$����8�̪�L�ܪ�`����t����,���L���l������������������̫����(�����|����,��(����d����L������`�<���<�������4�L��|�<����L��������|��$����8����L����`����t�<���,�����������8�<��`�<���|���������������,�|��X�����,���<�� �L��4����X�,��|�����,����<���,��x�|����������p�����\���������(�,��T�|�������|�@���l�����
������
�<�|�p������l����0���T����������l����@�\�t�<����������$�� �H��&���,���0�@�,2��L;���\;��l;���A�<��B��<I����I��LJ�<��J�X�|K�t��L���N���<O��\Q�L�,U���LV���V� ��[�t�l\��]���^��,c�D�<d���e���g���i���k�D�|m���m��\p��lp��|p��<q��|r�D�\s�t��v��Lx���{�P�<~��\~��������0�̎�d�����l������̟�p�����|���l����������������L��T�<������<���ܱ����0�����̲����������\���ܾ�D�l���������8��\<��<���<����@���x|���\�����\���l���<��(��`��������� ���4���l������\����@���l����l��,\��|l���������||����L	��	� ��	�&�(
�'�X
,(�
�*��
|-��?�0�?�D<@�`�A�<C�LC�lC���C���C��F�8
�J�t
<K�
\K�
�K�
�L��
�M� �N�TP�<Q�\R��|S�$�T�X�U��V��W��Y�(<Z�\\[�|\���]��^�,�_�d�`�|�����l��4���h������������h��������܋�������,̌�D�������,<�����L������<ܘ�P|��ܨ�(���D̩�l��|�������8̭�L�������������ܱ�L��`��t��̴�L��H�����ܽ�,���|�����P���\���|�������� ���l,��l���L��0���H��\L��p������<�������|��4\��`|��x���|��<���,������L��D\��X\�����L�� ���$ ��@ \�� �� ���� ��!���P!��!|�!l�\"��"	�",	��"l�#��4#��#���#��#��X$� ��$<!��$�"�%|$�4%�&�h%�(�%�*��%�+�&-�@&.�t&,/�&<0��&L1�'3�D'4�x',5�'<6��'L7�(\8�H(l9�|(�9�(�9�(l:��(�:�(�<�()<=�L)L>�)\?�),B��)<C�*lD�P*,F�*LG�*lH��*,I�+<M�l+�M�+�O�+Q��+<R�(,lS�\,�T�,�U��,,W�,\Z�,-�]�x-�c�-�c��-Ld�-�k�H.Ll�\.\l�p.�l�.n��.�n�/,p�8/�q�/����/���0��� 0̂�40<��\0���0��81���1���1���1<���1\���1���2���42��T2,��t2L��2|��2̪��2̬�(3ܯ�t3���3\��3���3ܲ��3l���3���4̴�D4���4��4<��4l��4����4����4��L5ܹ�5���5���L6���h6���6��6,��6L��6���7���X7���l7���7���7���7����7���,8��x8���8����8���8���09<��L9|��x9\��9���:���X:���l:���:���:|���:l��\;��;<���;��4<<�x<L��<���<��(=,�P=l�=���=l	�=�	�>,�D>�x>���><��>���><�4?L�H?l�\?��?��?L�8@|!�@�#��@|'�A�*�PA0�AL4��A<D�,BF�`B,G�B\H��B�I�B\K�0C�K�LC�T�C|V��C|Y�,D�Z�dD�[�D�^��D`�E�c�hE�f�E�h�F�h�Fj�HF�l�F�l�FLu�Gl~�G���H���lH���H���H̊�H܊��H���HL��I\��\I<��I|���I,��,J|��pJ���J<���J���K���,K�K<�K���K\�@Ll
�L���L|�M��hM<�M���ML�N��DN\�N0��N�O�P�S��P\T��P�T�Q�T�$QlU�PQ�U�|QLV�Q\W��Q\Y�Ql\�0R�]�lR�^�R�_��R�_��R�_�R�_�S`�$S,`�8SL`�LSl`�`S�`�tSc�S�c�S�e�S�f�4Tlg�lT�g�T<h�T\h��Tp�U,p�4U�s�hU�t�Uu��Uv�V�v�DVlw�tV�w�V�x��VLy�WL}�\W����W��@X,��tX���XL���X���Y���TYL��Y<��Y���Y���\Z���Zl��[��,[���X[��t[��[���[l���[��\��\\��\l�]��L],�]���],��]\�^l�^l�`^��^,�$_|�p_���_<�`��0`,�T`��`��`��`���`���`�`\�a�da��a�T�<b�Y�b|b��b�b��bc�c,c�cLc�0c�d�Tc�d�hce�c�f��ch�c�j�4d|s��dw�Xe�x�e�z��e��Hf���f<��g̑�g\���gl���g̘�Th|��i���i����i����i����i���j�� j,��8j��tj<��j,��k���Dk��dk|��xk���k<���k���k\��l���8l���l��m��Tm��m��m���m��n��Dn��xn���n���n���n��o|�@o�!�o�%�p�'�Dpl*�pp�*�p,�p,,��pL,��p<.�$q/�hq�0�q�3��ql6�@r,7�dr�7�r�7�r8�r,8��rL8��r|8��r9�(s�9�ts�=��s|>�tC�Tt�C�tLD��t�D�8u�E�u�J��u<M�Hv|M�\v�M�pv�M�v\N�v�N�vLO��v�P� w<Q�DwLV�w�^��w�e�0x�f�x<g�xlg��xi�y<i� y�i�Ly�j�xy�l��y|��Lz��z\��z̃�{���X{���{\��|��l|��|���}̒�\}��}����}L��D~\��~���~|��@�����ܠ�����|�l������l��0�,��d�̫������������,��$����l�L����������d�L���������H�<���\��Ą���܄���,�L��\�L��x�,���<���L���l��ȅ���܅���,���<�� �L��4����`����x�<������̆�������4�\��p�L���,��ȇ������ ����L����x�����l��ЈL������@�<��|����<��ԉ�������4�\��X���|����<��,�@���|����������\����P��	���
��<����P�����
����,���`�,��<�Ď�����X����L��|�ȏ��܏���<�(��!�x��"��L#�ܐ�$� �%�L��%�x�\'�đ�(���(���(�,��(�@�)�T�)�h�,)�|�<)��L)��\)��l)�̒|)���)���)���)���)�8��)�L�*�`�*�t�,*��L*��\*��l*�ē�*���+���+��l,�4��-�t�L.���.��\/���/���0�t��8�ȕ9��L:��,<�L��<���<���=��\>�$�?�`��?���@���A�$�|B�`��C��\D�ؘE���E�H��F��<G���G��\I�8�|K�t��K���K���L���L�Ԛ�L���L���M� �,N�<�|N�T�\O���O�̛�O��P���P�$��Q�P�R�h��S��L^�X�\^�l��d��Le� �lg�T�h�p�i��,i���i�Ԟk���k�4��k�H��m�x�n��,n���p�ԟ|t���t���t�L�l}��|}��L~��l~�ؠ\���܃�(�,��H�l��x�<������|���l��L�̌�`����|�����\�� ���D�ܤ�p�L�������������H�L��d�,�����������|��D�\��X����������������T����h�����,��Ħ\��$����\������������l��(�|��<�L��P�l��t�������������L��(����D�\��p����|��̩����������0�|��H����`����|��������l��<�\���\�������|��@����T����̬����\��,����H����l�L�������������L��ԭ����L� �l�4���H���\���p���L��l�̮��l�T�|���ܯl�L���|�|����L��
���
�ȱ�������'�d��)���)��*�Բ�*��<+���+�\��7���8���<��l?��LA�<��A�P��N��O��LO� ��P�p��S��LU�<�lU�P��X���X��|Y�ܷL`�L��`�d�a�x�a��La��la���a�̸�a���a��b��ld�H��d�p�Lg���h���i�L�<j���j���j��k��<m�@��q���s���t�P�Lv���v�м,w��\w���x�P�<y�h��y��|z���z���z�4��{�t��{��,|��L|��,}��\}���}�4�<��l��̿����̂����0�\��d�,���\�������̅��<���L���|���\��8���p����܎����D�,��X�<��l�܏��l������ �|��T����p��������,����ܓ�����$�,��P�ܕ�x�����̖��������<�����(����T���h���|�L������������ܛ����`�����̝��,���\����,�� �<��4�L��H�\��\�|��p���������l�������,���X�\�������\������4�,��H����ܭ��\��H����h�ܰ�|�,�������������̲��l��D���|�\�������������D�\�����������,���l�����T�<��p�����L����|��8�����<���|���|��L����h����|�����L���l������������|��4�����l���,���\��L�\�������������\��8�l��L����`����������,����<���L���|��h����������������������\��$����P�<��l�����\������������L��P�|��d��������|�������,���@�,��������l�������@�,��|�\���l�������������������T�����������,�L��@����T����h����������������8���L���`���������������D��������,������� �<�8���l����\���l���� ���X�\�����,���
�H��
��,���
����4�|�X�������l���|���D����������<���X�\��< ��#�x�|%���,&���&�<�l'�|��)���\,�D�,-�|�l0����1�<��7���:��l<�\��E���H���I�H��J�d��L��lM����N���N��O�8�<O�T��O�x��P���Q���<V�D�|W��|X���Y����Y���Z�P��[�|�l\��|\���\����\���\]���a�d�d��,f���p��s����s���s��t�<��t�X�lw��,���\���<����l��(����<�̨�X�l�������<������������<���|����������<�����������$�\��8����`���������L�����D�\��p�,�������L�� �,��p�����������������<�|������������������L��������,�����H�<��d�\��x�l���|��������������l������ ����H�L��t���������\������D�,��`�����������������������\������$����@����T����h�,��������������,������������x�\��<�������������� �� ��L ��| ��� � �� �4�!�H��!�d��!�x�l"���"���"��<#���#�8��#�L��#�`��#�t�$��\$��|$���$���$���$��%��L%�0�<&���'��(�<�(�X�(�l)�*���*�,+�$�,�p-��-�L.���.���/�0�/�D�/�X�/�l0��0�,1���2�X5�6��,6���6��6�,8�l9��:� ;�L|;�L<�<=��\>�4l?��?��@��A�(�A�H\B�l�D�,I��I�,lJ�|�K�M���M�(	�V�X	�V�p	�Y�	,Z��	�Z�
,\�`
�`�
�b��
�b��c�Dld�te��e���f��f�8�g�d�g�xlk���k��lp�H
�q�
|s��
v�<lw��x���y��|�PL}��}���~��~�,�D��|���L���̂�L��X,������������D\����|��PL��l���L����D��X<��l���|���<�����P���|L�����l��`��l������������0,��h<���������@,��,���l�����(��`�����|������L��0<��l��L��������(L��\��ܴ���L����HL��h\��|���������̼�0���̿�\�����,���h������\��l��X���l������������L������ ��� ��4 L��P ���d ���� ���� ���!\��<!��`!���!���!L���!|��"���0"���D"��\"<��p"\��"l��"|��"���"����"����"L��#���,#���@#|��d#��#���#���$,�� $L��4$l��H$���p$\��$���$���$\��(%|��<%���P%���d%���x%���%����%�$&��T&L�&���&�	�'�
�$'�@'��',�(��(|�|(l�(���(,�0)��d)��x)\�)���)��*�H*<�d*��*�*��*�� +��P+��|+��+���+��+<��+|�,��,��0,��D,�X,L�p,\!�,�"�,#�-�#�<-�$�h-�$�|-�&��-�&��-�&��-'�.�'�4.�'�H.�'�d.L(�.|(�.�)�.\*��.�*�/L,�H/�.�t/�1�/�1��/\4��/5�(0�7�T0<:�0�<�0�=��0�>�1�?�L1A�1<I�1�P�2�X�@2�`�2d�2�f��2h�3�h�X3ll�3p��3�s�4�v�P4�y�4z�4|z��4�|�(5,~�\5�5�5���5���46���h6܈�6<��6|���6���7��87l��7���7,��7<��,8\��@8|��T8���h8��8,���8\���8l��8���H9���h9,��9���9,���9����9��:L��\:���x:ܪ�:��:L���:L��:��;,��,;���h;��;��;\���;��<��<L��4<���P<���d<���<��<��<̰�=|��t=���=��=\��=\���=l��>̳�,>���D><��l>���>L��>���?l��H?���\?L��?l��?L���?\��@|��@���0@L��L@ܾ�h@��@L��@l��@����@���4AL��pA��A<��A����A��B���XB���lB���Bl��B���C���0C���DC���\C���C����C���(D���tD���D���D���EL��<E���PE��dEL��|E\���E���FL��PF���lF���F<��<Gl��pG|��G���G���GL��G���8H<��H����H<��I,��`I���I����I|��J���@J���tJ��J����J���KL��\K|��tK���Kl���K���Kl��L���@L��|L���L����L<��ML�XM�M���M,� N�lN��N���N|�0O<�lO�O���O,
�0P<�|P��P��P|�(Q�tQ��Q��PR� �R|!�R,"��R�"�S�"�S�"�,S#�@S<#�\S|#�xS,$�S<$�S�$��S�$�T�%�PT\&�T�'�T�,�$U�,�@U�-�tU�.�U�H�XVLI�tVJ�V�K��V<M�W�M�LW�M�`WN�W�N��WP�X�P�8X�S��X�S�YlT�<Y�T�xYLU�Y�U��Y|V�<Z,W�ZlW�Z�W��Z,X�[�X�L[Y�[�Y��[�Y�\[�P\\[�\�[��\\�]�\�8],]�]�]��]�^�^<_�4^�_�l^�_�^\`��^�`�_\a�X_�b�_�b��_�b��_c��_\c� `�c�4`d�L`Ld�d`|d�`�d�`�e�`,h�a\h�,a�h�Ta�i�a,j�a�k�a�l��a�l�bm� blm�<bn�hbls�b�s��b�w�Dc�{�c�d��Hd|��xd̀�d��d܁��d���4e|��e<���eL��,fL��f��f��g,��@g|��Tg<��g����g���(h��hh,��|h\��h̐�h��h���h<���hl���h��8i��LiL��`iܖ�il��jܛ�`j���j̜�jܜ��j|���j��k\��0kܞ�\k|��k��k\���k����k���<l��\l<��plL��l|��l��l����ll��m���0m���Dm,��dm��m,���m\��n���$nܫ�dnL��n,���n\��o���8o��doL��o|��o���p,��(pܸ�Hp���`pL��pܻ��p���p,��0q|��lql��q����q|��0r���lr���rL��r��$s���Ps,��s���s���t���@t|��tt��t����t���u���0u,��Lul��pu��u���ul��@v|��Tv���|v<��v,���v���w<��Pw,��wl��w����w<��x|��`x|��x���x����x\�y|�4y��Hy�`yL�|y|�y��y���y,��y|�Hz��z���z��{,�@{��d{\�{��{�	��{l
�{�
�$||�\|��x|��|��|��|,��|��}|�T}��h}��|}��}��}��}���}���}��}�~,�~<�0~��L~�`~�t~,�~<�~L�~\��~l��~|��~������(��<��P��d��x���,�L�����\����4�L�\�l�|�Ѐ������|�,���@���T���|��l����������\�l�l����� �8�,!�l��!��"���#�@�,$�l�l%�,�Ԅ-��.�<��.�X�|0��4�؅�;��|<�0��=�d��=�x��=�>�L>�|>�Ȇ�>�܆�>��?���?�<�@�X��@�t�D��LH��\H�$�lH�8�LI�x�lI�\J��J��<M�4��M�T�N�h��N�|�<O�lP��R�$�<S�`��T�U��V���X�X��Y�\Z�ԋl[��|[�$��[�P�\�d��s�̅��̆��\��,�l����Ѝl������܋�4�<��\�L��p�L��������<��,�,��h���ܑ����D�,��|��Đܘ��,��D�,��̞���� ����4�l��H����̦�Вl���\��x���ē��� ����\�̷����̿�\��@����\����p���,��|��ܕ���,��(�|��<����h����������������<��$�\��@����T����t�,��\��������З,��<���\��,����@���T�<��h�\��|�|����������Ԙ������� ����`�������<��ș|���l������4�\��x����Ě��� ����<���P���d�,��x�<��������ԛ����������8�\��T����p������������H����<��L������0����P���p������������,��0�|��L�L��l���L��,��L�������ؠ������\��8����T���<�����С�������������H����\�\�������Т<����� ����<��h�l�����ԣL����(���P��l�|�����L����0���X�L�|���ȥ,��|����4��`�\�����̦<��� ���H��d�l���	��<	��	�(��	�P�<
�x�l
��
���l����,���`�|���,��|����,��X�\�����Ī<�������@��\�l����ث<���� ���H�<�p�l�����l����$���L��h�l���L�ԭ��l�`���\ �| ��� �$�,"�H��"�t��"�|#���#�$��$�t�,%��%��l&� ��&�l�\'��'��L(�(��*�t��*��*��*��+��,,���,�,�\-�H�L.�t��.��1���3�,�l7�x��7��7��:���:��:��,=�X�|?��?��?�̵�@�LB�H�lB�\��B�p�,C�D�жlG���G�0��G�D��J��J�K�<N��\N��|N�,�LQ�x�lQ��Q��Q��Q�ظLR���R�@��R�\�<S��S��U���V�D�\X�|X�LZ��lZ��[�<��[�X��]��]�,h��<h��j�T�lj�h�|m��m�ȼ�m�ܼ�p� ��p�4��p�H�,u�Lu�lu��x��y��<y�0��|�|��|��|�L���l����������d����x�̃���ȿ���L��P�̏�������$����\���|�������������$�\��������������<��,�̡�@���������,����<���L������`���|�<���\���|�������������ܮ����������<��0�\��D�|��X�\���,���l��H�,������������������X���l�,��������������������8���������������������$�L��`�������������<��P��������������<������,����x��������������|��(����t�\���|���������,��8�L��L�l��`������������������(����<����P�������������,����`����������L���l��(�\��|��L��l����p����	���
����H��d�������
��<
��\
���|
����
���
���
� ��
�4��H�<�\�������\� ��\�\��|������������<� �\�4���x� ��,"���"�,��(�x�L/����1���7�d�|8���9����:�8��;�t�l<��=����=�(�<>�\��>��\?���l?���,@��\@�0�A�t��A��,B����B� �LC�T��C���D���E���E�D�<F�x��F���G��H�,��H�h�,I���I���|J���J�P��K��L���L��lM�@��M�t��N��O����O�(�\P�d��P��|Q����Q���R�L�LS���S��lT���T�,��U�p�<V���V���\W���W�P��X��,Y����Y��LZ�@��Z�t�|[��\����\�(�<]�d��]��l^���_���_�L�,`���`��\b��c�D��c��,d���d���Le�$��e�h��f��g����g��<h�H��h���i���j���j�8�,k�l��k��|l����l� ��m�\�n���n���lo���o�D��p��q���q��\r�4��r�h�|s���s���|t���t�@�\v���z���{���<{��\{��|{�(��{�<��{�P��{�d��{�x�|��<|��\|��l��̂�D���X���l�l����������������,�̉�@���T�\���|��������ܐ�����(���<��������<��������P����,���̠�����T����p�\����|����ܨ�0����L�������L���L��D�L��<���\������0�,��t����l���<��@�L��<���|��(�\��h����������L���,��l��|��������������D��������|���L��T����������8����\���,������h���|���������|��`�L�������D�������\��(,��t�������l��(,��d�������l��,��T�������l��|��<��X�������|��<��H���������\��Hl��\,��������$l��d��L���L�l����0	,�|	�	��	�
�
L�`
�
�
�
�
�|�X��<����<��\���� 
��p
|�
���L�������l �LL!�,"��#��#�L�$��%���&�l'�LL(�,)��*��*�L�+��,���-�$�.�p�/��0�|1�Tl2�\3��L4�8<5�,6��7�8�h�8��9��:�L�:�`�;��<��=�D�>��?��@��A�@�B�D��|E�$�F�p�G��H�,J�D\K��L���M�(�N�tP�,P��\Q� �R�l�S��T�V�PLW�|X���Y�4�Z�\��<]� \^�\ |_� �`�� �a�(!�b�l!�c�!e��!<f�8"\g�|"|h�"�i�#�j�H#�k�#�l��#n�$<o�X$\p�$|q��$|r�0%|s�%,u��%\v�&�v� &�w�p&�x�&�y�'{�D'�|�'�~��',��$(L��8(l��L(���`(���t(̃�(��(��(,���(L���(l���(���)���D)���h)|��)<���)\��*���*܍�(*���<*��P*<��d*���*����*̒��*���*��+,��+L��,+l��@+���T+���h+̓�|+��+ܕ��+��$,<��8,\��L,|��`,���t,���,ܚ�,���,���,<���,\���,|��-ܟ�P-���d-��x-<��-\��-|��-����-����-ܠ��-���.��.<��,.\��\.l��p.|��.���.����.���/\��t/|��/ܪ�/���/���/<���/\���/���P0��0<��0\���0|���0����0���1ܱ�1���,1��@1<��T1\��h1|��|1���1,���1L���1l��2���2���02̷�D2��X2��l2,��2L��2l��2����2|��03\��3|��3��3����3���3<���3\��4|��T4|��4|���4���5|��X5���5���6��46l��X6���6���7���,7���@7��T7���7��8,��D8���8����8���89���x9���9|��:���H:���:,��:���;���\;��;����;��� <L��|<L��<���<,��P=l��=���=,��L>\��>����>���?\��d?<���?�	��@|��`@�
���@���AL��lA����AL��B���tBL���Bl���B���@C,���C����C���DL!��TD�#���Dl&���D)��XE�+���El.�� F�1��pF5���Fl8��$Gl:��pG�:���G�:���Gl=���GL@��0H<B��|H\B���H|B���H,C���H�E��<I�H���I�K���I�N��J<Q��lJ�Q���JlT���J�T���J<X��K\X��0K|X��DKl[���K^���K�a��DL�a��XL�a��lL�d���Llh���M�j���M�m��0Nv���N,v���Nw���NLy�� Oly��4O�y��HO�{���O�~���O܀��P��PP����PL����Pl���Q����@Q̏���Q�����Q���R���hR,����R�����R̡��<S�����S����S|���T���dT,���xTL����T���T\���U̵��@U\���|U�����U�����U���8V|��|V\���V���W���W���,W����W���W\���W���X��lX<���X���Y���HYL���Y���Y��Z��hZ���Z<��Z�<[��[���[���\����D\|����\l����\\��]L��d]����]l���]���(^|��t^����^����^l���^����^���_L��\_l��p_����_����_����_���_|!��D`�!��X`�!��l`�%���`�%���`�%���`|(��4a�*���a�.���a<2��$b<6��pb�9���b�=��c�=��$c�=��8c@���c<@���c�E���cF��d<F��d\F��0d|F��Dd�F��Xd�F��ld�F���d�F���dG���d<G���d\G���d|G���d�L��0e,M��LeLM��`elM��te�M���e�M���e�M���e�M���eN���e,N���eLN��flN��f�N��(f�S��tf�W���f�W���f�W���fX���f<X��g\X��$g|X��8g�X��Lg�X��`g�X��tg�X���gY���g<^���g\b��4h|b��Hh�b��\h�b��ph�b���h�b���hc���h<c���h\c���h|c���h�c���h�c��ii��`i�i��|i�i���i�i���ij���i<j���i\j���i|j���i�j��j�j��j�j��0j�j��Djk��Xj�p���j�t���j�t��k�t��k�t��0ku��Dk<u��Xk\u��lk|u���k�u���k�u���k�u���k�u���kv���kLv���k�x�� l�x��4l,y��Hl<y��\l|y��pl�y���l,z���l�z���l�z���l�z���l�z���l{��m<{��m|{��4m�{��Hm�{��`m�|���m�|���m|}���m�}���m�}��n\���`n�����n|����n����n�����õ��0p���|p<���qL���,q���|q�����q����r���\rzRx�(��/D0D��$DPR�01FJw�?:*3$"lX�� 1��������.E�h����EE����+E�U
F8���F�B�D �A(�D@�
(A ABBD8(����F�E�A �A(�D@�
(A ABBAdp��'E�]����HM����E�R���� �����E�N0e
AG(���GA�D�G f
AAD8<��F�B�A �K(�DP]
(A ABBE(T ��=E�H�J0o
AAH �4��2E�Q l
AE4�P��AE�H�J@`HBPWHA@�
AABH�h���F�N�A �DPYXO`WXAP�
 AABEHXV`PXDP4(����E�N�DPdXF`WXAPf
AAG4`����E�N�DP[XF`WXAPe
AAI4�l���E�H�J@`HBPWHA@^
AAG4�4��6E�N�DPdXF`WXAP�
AAF0<���F�H�A �J0n
 AABE(<����E�A�NP�
AAG(h����E�A�N@�
AAC,�P��gM�A�D �H
ABCH�����F�B�B �B(�D0�A8�D`�
8A0A(B BBBA$���A�N�
�
AA8����E��8T`�� X�B�A �D(�G0h
(A ABBD8�D���X�B�A �D(�G0h
(A ABBD0�����B�D�A �Dp$
 AABE(����E�D�D �
DAOD,H��B�E�A �A(�GPd
(A ABBFlXP`KXAP(t���A�M�G0y
AAH �����E�N0_
AE(� ���E�F�K@Y
AAG(�����E�I�D0�
JAA(8���E�I�D0w
JAA(H����E�D p
DCXDHt ��JF�B�B �E(�A0�A8�Fp�
8A0A(B BBBF0�$��nF�A�D �H@4
 AABEX�`���B�E�B �E(�D0�C8�GP�
8A0A(B BBBBxXY`KXAP8P����F�B�A �A(�NP�
(A ABBE8�X���F�D�A �D(�KPy
(A ABBG(����XE�A�G l
AAE\�0���B�B�D �K(�I�i�F�R�A���N�g�A��
(A ABBFT	p��h	l���|	h��vF�B�B �B(�A0�A8�N���]�S�B���H�h�B�v�J�e�A�v�K�d�A��
8A0A(B BBBH
X�,Hc0$
p��F�A�D �H0�
 AABHX
<�,Hc�p
T�x
B�B�B �B(�A0�A8�G��
8A0A(B BBBC��V�B�G�E�J�E�J�S���H�A�J�E�E�[���J�Q�B�40��E�H�J@YHFPWHA@Y
AAG<L��}F�E�E �D(�C0�F
(D BBBI0�8��B�D�C �G@�
 AABD������H���F�I�B �H(�A0�A8�DPm
8A0A(B BBBJ@4��F�B�E �D(�C0�DP�
0A(A BBBE(x���E�C�N@�
AAA�@�5E�o(�d��E�D�D0�
AAFT����F�B�E �K(�C0�F�^�O�F�F�U�
0A(A BBBJD
@�X
<�Hl
8��F�B�B �E(�A0�A8�K�s
8A0A(B BBBG�
| ��
x ��
p �&P�
� �jF�G�B �B(�A0�A8�G�
8D0A(B BBBAL�'�7J�,h�(�|�(���(���@)�t|��)��F�B�E �E(�D0�D8�D`[
8A0A(B BBBE�
8A0A(B BBBC�
8A0A(B BBBF(8�,�ME�I�L fAK(d�,��B�A�D ��AB8�T-��B�A�A ��
ABAN
ABG8��-��B�B�A �A(�D0�
(D ABBK|.�?<�.��B�I�E �D(�A0�X
(A FBBH(\/��A�D�D {
AAJ@�|/�B�A�A �D0J
 AABJ�
 AABA4�H0��B�A�A ��
ABEKABL�0�2A�A�G �
AAM_
QAoS
DAHD
CAA$T�1�2A�D�S WAA,|�1��B�D�C ��
ABKD��3��B�E�B �B(�G0�K8�K@�8D0A(B BBB �@4��N�zH�H�H�4��B�E�B �E(�D0�A8�GPv
8D0A(B BBBCLd7��F�B�E �E(�A0�I8�G�s
8A0A(B BBBH ����BE�G �
AF���HR������H���B�B�B �G(�A0�A8�D`�
8C0A(B BBBETd����F�J�A ��(Y0D8G@AHNPN Z(l0D8G@CHGPK FAB������������CH u
AH��uF�E�B �B(�A0�D8�IP
8A0A(B BBBKL(��\H }
K0hl��1F�D�A �G0�
 AABJ$�x��hE�s
HF
JW����4����tF�E�D �A(�D0Y(A ABB��E�U,��@$��E�U$\(��4E�N�D WDA4�@���F�B�A �A(�G0�(D ABB����E���|��-K�L
IL$�����E�A�G mDA ���4���HH����E�C�G S(H0T8G@n �
FAM~(E0Z(A �`��\<�����B�E�B �A(�E0��
(A BBBI@�<��"F�B�B �A(�D0��
(A BBBH,,(���S�G�E �l
HFw8\����F�B�A �A(�G0c
(A ABBFL�L���F�B�A �A(�D0�
(A ABBCX
(A ABBB(����hF�D�A �YAB ��JH]
KR
A4P�� H\��dHW`���5Hlx����H��t���p��HLD�x���B�E�L �A(�D0�G�`
0A(A BBBI��HL��kH ]
A88l���F�E�D �A(�D0�(A ABBt��-HU
KD4���JE�A�G �
IHMgAA0�(��F�K�A �F0�
 AABF��HN��PP,H��O�B�A �K(�G0�
(A ABBGF
(A ABBDP����<����E�A�D U
DADF
DAEQDA �T���A�LpA
AA����@����mB�B�B �A(�F0�F@�
0A(A BBBE<���K��
APX����J�A�D u
AAJa
D�A�J|
D�A�GDA�A��8��-�T���K��
A�����K��
A����@Tk$����E�I��
CA8���9TdP���HKh���|��� ����kE�N Q
AA� ���4����oE�D�G0`8B@`8A0T
AAA ���E�D l
AJ($p��WE�A�D A
CAAPP����X�D�D �x
ABEA
DBIE
ABHfABG���(���cf�D�L _FAA��(�T���E�A�D �
CAG ����fF�n
DbF�, $���K�H�A ��ABD���P���d����y�N�H�$��qK�A�A �j
�A�B�FA
ABDP���H ����X���E�}
F�������(���JH}@4��jHa\X����B�B�B �B(�A0�A8�G���K�K�A�T
8A0A(B BBBAH����B�B�B �B(�A0�A8�J��
8A0A(B BBBJ( ����E�K�D0j
AAH(0 ���E�K�D0j
AAH\ ���.A�hlx ����F�B�B �B(�K0�A8�D�^�s�R�A�{
8A0A(B BBBK��F�W�A�� ,�FA�D$!`��A�G� I� _
AG,!��G� I� E
K0L!���B�A�A �D@
 AABID�!T��
F�B�B �A(�A0�Q�E
0A(A BBBF�!�
�-8�!�<F�B�D �A(�D@Z
(A ABBG@"��F�B�H �A(�A0�G@�
0A(A BBBH \"��~E�N d
AA �"��~E�N d
AA�"P�L�"\��F�B�B �A(�K0�D`chFpRhA`�
0A(A BBBA`#���F�B�B �B(�K0�A8�D�c�F�F�F�U�q
8A0A(B BBBG`l#��F�B�B �B(�K0�A8�D�c�F�F�F�U�~
8A0A(B BBBB8�#T�;F�B�A �K(�DP�
(A ABBH4$X�BB�E�D �G(�G0I(M GEB(D$p��A�A�G`\
AAI(p$��A�A�J�B
AAH�$���$��!<�$���B�E�B �A(�A0��
(D BBBGD% ��B�B�B �A(�D0�G�4
0A(A BBBB0L%�"�CB�K�A �D0x
 AABB0�%�#��F�A�A �NP�
 AABF8�%%��F�B�A �K(�D`�
(A ABBD(�%�&��E�A�N@v
AAD0&'��F�A�A �N@�
 AABH8P&�'�vB�L�D �D(�D@�
(A ABBG �&�)��E�N K
AA0�&D*��F�A�A �NP�
 AABG8�&�+�|F�B�A �A(�N`�
(A ABBEL '�,��F�B�B �B(�A0�A8�G��
8A0A(B BBBAXp'�3��F�B�B �B(�A0�K8�K�l�O�R�A��
8A0A(B BBBF@�'5�ZB�B�B �A(�A0�GPt
0A(A BBBE`($6�^F�B�B �B(�A0�A8�J�k�F�F�F�X�i
8A0A(B BBBH\t( <��B�B�E �E(�D0�D8�D��
8A0A(B BBBCz�Z�K�A�0�(�B�F�A�A �GP�
 AABH )\C��E�N R
AJ ,)�C��E�N0m
AGtP)DD��F�B�B �B(�A0�A8�N�u�R�F�F�P���K�H�B�N�z
8A0A(B BBBAp�)�F��F�B�B �B(�A0�K8�D�F�F�M�A���K�H�B�N��
8A0A(B BBBH\<*I�F�B�B �B(�K0�A8�G�G�F�R�A�6
8A0A(B BBBA��*�N��F�B�B �B(�K0�A8�G���V�T�B��
8A0A(B BBBF��N�R�B�z�V�S�A�d +�Y�JF�B�B �A(�A0�Q�V�F�R�B��
0A(A BBBBd�H�V�A�`�+�[�_F�B�B �A(�K0�G�s�W�R�B��
0A(A BBBCx�H�V�A�\�+�]��F�B�B �B(�A0�A8�N�r�F�R�A��
8A0A(B BBBFLL,`��F�B�B �A(�A0�Np^xX�RxAp�
0A(A BBBJX�,�a��F�B�B �B(�A0�A8�N�^�X�R�A��
8A0A(B BBBFL�,,c��F�B�B �A(�A0�Np^xX�RxAp�
0A(A BBBDXH-�d��F�B�B �B(�A0�A8�N�^�X�R�A��
8A0A(B BBBHL�-Pf��F�B�B �A(�A0�Np^xX�RxAp}
0A(A BBBHD�-�g�F�B�A �A(�NprxF�RxApT
(A ABBCp<.(i�F�B�B �B(�A0�A8�G�S�i�I�F�U�Z
8A0A(B BBBG~�Q�P�A�T�.�m�ZF�B�B �A(�A0�N�r�F�F�F�U��
0A(A BBBCh/�o��F�B�B �B(�A0�K8�G�U�I�I�I�I�I�[��
8A0A(B BBBHht/ v��F�B�B �B(�A0�D8�D�h�F�F�F�F�F�U�c
8A0A(B BBBC�/Dy�H�/@y�zF�B�E �E(�K0�A8�L`�
8A0A(B BBBC@@0t|�^F�G�E �D(�K0�DP�
0A(A BBBGH�0�~��F�G�L �B(�A0�D8�F`�
8A0A(B BBBG0�04���F�A�K �D��
 AABH@1����F�B�E �A(�A0�G�o
0A(A BBBCPH1���NF�B�B �B(�A0�A8�G� I� $
8A0A(B BBBD�1����1���1��u`�UK�4�1T���E�D�D `
CAGI
CAKH2̎�&B�B�B �E(�D0�A8�J�t
8A0A(B BBBHTd2���F�E�B �B(�D0�A8�DPs
8A0A(B BBBKaXC`HXAPH�2x���F�E�B �A(�D0�D@~HCPHHA@l0A(A BBB\3���
F�B�E �B(�A0�A8�G�S
8A0A(B BBBK��A�I�A��h3\���F�B�E �B(�D0�I8�DP
8A0A(B BBBJT
8A0A(B BBBB$
8A0A(B BBBB�3���4Ġ��40��/E�i804D���F�B�A �A(�NP
(A ABBKl4Ȣ�	�4Ģ�7E�q�4��PE�F�4��HM�4$���E���4Ȥ�AJ�l�H5���pB�E�B �B(�D0�A8�Lp`
8A0A(B BBBJ\T5 ���F�D�B �B(�A0�F8�G���i�K�A��
8A0A(B BBBH(�5���SF�D�D �AAB4�5��uF�E�D �D(�G0T(A ABB�6<��L
F�B�B �B(�A0�A8�G�I�A�\�B�
8A0A(B BBBGd�H�V�A���H�V�B���H�]�A�P�6���B�D�C �N`thXpFxF�U`\hPpJxA�W`e
 AABA7���7���p(7����F�B�B �B(�A0�A8�G�Y�B�]�D���E�V�A�u
8A0A(B BBBD\�78���F�B�B �E(�D0�C8�GPw
8I0A(B BBBJD8C0A(B BBBt�7h��%B�E�E �E(�D0�D8�G��M�E�E�V���N�L�B�L�a
8A0A(B BBBIlt8 ��tB�B�B �B(�A0�A8�G�D�H�V�A�Y
8A0A(B BBBIT�J�[�A��80���8,��l9(��WF�E�E �B(�A0�A8�J�9�A�X�D�X�A�W�A�G
8A0A(B BBBJ,|9���E�N@pHFPRHA@[
AAl�9���FF�B�B �B(�D0�A8�J���B�O�A�O�K�[�A�X
8A0A(B BBBA$:����E�N@s
AID:���E��`:���t:���X�:����B�B�B �E(�D0�D8�Gpv
8A0A(B BBBF�xF�XxAp�:��*E�d;��{E�u;x��HE KL8;|��	F�B�A �A(�Q��
(A ABBFq�G�Z�A�L�;<���F�B�A �A(�Q���V�M�A�V
(A ABBBL�;����F�B�B �B(�A0�A8�G��
8A0A(B BBBJ@(<���F�B�L �A(�A0�Dp�
0A(A BBBG0l<h��ZF�A�A �NP)
 AABE,�<����E�N@^HOPRHA@N
AF0�<$���F�A�A �N@�
 AABGx=���aC�E�E �E(�D0�C8�G@f8A0A(B BBBH������H@������d8O�0A�(B� B�B�B�$�=���`H^A FCD
D$�=���yL�[
I`
H`L�=D��tF�B�B �A(�A0�G� L�@I�@/
0A(A BBBAH >t���B�E�B �B(�A0�A8�D`Z
8A0A(B BBBKl>���+Hb��>����F�B�B �B(�A0�A8�DP�XJ`SXAPM
8A0A(B BBBKw
8F0A(B BBBEc
8A0A(B BBBAH?(���F�B�B �B(�A0�A8�Np�
8A0A(B BBBJX?l���dQ
A(t?��gE�A�D J
CAH�?D��(�?P��DF�D�A �uAB�?t��%HZH�?����F�H�B �E(�D0�I8�DP)
8A0A(B BBBGD@��>E�\
A[d@0��$x@<���J�}
�IA
Ga�H�@���mF�B�B �B(�A0�A8�Dp
8A0A(B BBBF,�@���N�}
�EA
GA
�Gp�HA8���F�B�B �B(�A0�A8�Dpv
8A0A(B BBBFhA���%\|A��F�B�B �E(�D0�D8�D�b
8A0A(B BBBI��H�Q�H��A��Hr�A��'H^B�5Hl@$B0��F�B�B �K(�A0�G��
0A(A BBBAXhB���F�B�B �B(�A0�A8�DpAxJ�LxApW
8A0A(B BBBE<�B
�FF�A�A �N@EHGP`HA@�
 AABHC�C�HE�i
B4C@�CE�b
IRTCp�HP<lCx�rB�A�A �D@AHIP]HA@}
 AABG�C���C���C��(�C��:F�D�I �_ABHD���F�I�B �E(�D0�I8�G`�
8A0A(B BBBDH`Dt��F�B�A �A(�DP/
(A ABBE�XH``XAP�D�$�D��J�z
�LA
G^�H�D|�UF�B�B �B(�A0�A8�Dp
8A0A(B BBBF,4E���N�w
�KA
GA
�Gp�HdE��F�B�B �B(�A0�A8�Dp9
8A0A(B BBBK�ET�%L�Ep�
F�B�B �B(�D0�C8�D��
8A0A(B BBBHF0�uE�o0F��0Hc0HF��*F�A�A �N@�
 AABF |F� ��E�N@u
AGH�FD!��B�B�B �I(�A0�A8�F`I8A0G(G IBB(�F�"�E�A�DPk
AAI Gl#��E�N0R
AJ <G�#��E�N0R
AJ `GD$��E�N0R
AJ �G�$��E�N0R
AJ0�G%�F�A�A �N`�
 AABE(�G'��E�A�N`�
AAE(H�'��E�A�N`�
AAE(4H�(��E�A�N`�
AAE(`H�)��E�A�N@�
AAA(�HH*��E�A�NPw
AAC �H�+�LA�G0C
AD<�H.��F�B�A �A(�N��
(A ABBAI�/�:4I�/�sHIL0�6\Ix0��pId1���I2��0�I�2�TI�R�D �A(�$ EEE�I(4�L��H�I5��F�E�E �B(�D0�A8�D�C
8A0A(B BBBH44J�8�!F�A�A �DP^
 AABB lJ�;�m�qR�X��J�<��L�J@=��B�B�E �E(�D0�A8�F�3
8A0A(B BBBJ�J�A�K�A�(K�A��E�A�Dp�
AAE HK,B��E�D I
AElK�B�0Hc8�K�B��F�B�K �A(�D`�
(A ABBB8�KDD��F�B�K �A(�D`�
(A ABBB8�K�E��F�B�K �A(�D`�
(A ABBB88L<G��F�B�K �A(�D`�
(A ABBC8tL�H��F�B�K �A(�D`�
(A ABBB8�L$J��F�B�K �A(�D`�
(A ABBB8�L�K��F�B�K �A(�D`�
(A ABBB8(MM��F�B�K �A(�D`�
(A ABBB8dM�N��F�B�K �A(�D`�
(A ABBC8�MP��F�B�K �A(�D`�
(A ABBB<�MxQ��F�B�K �A(�D`�
(A ABBCN�R�0N�R�DN�R�XN�R�lN�R��N�R��N�R��N�R��N�R��N�R��N�R��N�R�O�R� O�R�4O�R�HO�R�\O�R�pO�R��O�R��O�R��O�R��O�R��O�R��O�R��O�R�P�R�$P�R�8P|R�LPxR�`PtR�tPpR��PlR��PhR��PdR��P`R��P\R��PXR�QTR�QPR�(QLR�<QHR�PQDR�dQ@R�xQ<R�KH~�QtR��E��
E(�QTo�1A�A�G �
DAF�Qhq��Qdq�0E�j0Rxq��F�A�K �D0�
 AABHH@R4s�WF�B�E �E(�D0�A8�G�c
8A0A(B BBBE@�RHu�jF�B�E �D(�A0�N�`
0A(A BBBH@�Rtx�AF�B�E �A(�D0�K��
0A(A BBBGS�{�(S|{�$<Sx{�
A�A�L �CM dS`|��E�D �
AF8�S�|�F�B�A �A(�DP�
(A ABBA(�S����E�A�D0�
AAE0�Sd��F�A�A �DP
 AABG $TP���E�D �
AF(HT��hA�D�G L
DAC8tT`���F�B�A �A(�DP�
(A ABBE4�Tԍ�hZ�D�D �K
CBFlAB�T���B�B�B �B(�D0�D8�G�
8A0A(B BBBF��B�T�D�A�B�Q��H�F�B�A�G�A�D�N�C�T�A�B�A�G�A�D�I��H�F�B�A�D�A�B�N��T�A�B�A�D�A�B�I�8�U���F�B�A �A(�DP�
(A ABBEL(Vl��xF�B�B �B(�A0�K8�D�(
8A0A(B BBBB(xV����E�A�G }
AAD,�V ���E�A�D0�
AAA�V��-�V���H m
K(W���eI�F�L {A�A�80Wԩ�OF�B�K �A(�D`
(A ABBK8lW��F�B�K �A(�DP�
(A ABBF(�W̫�?E�K�D@�
AAB0�W��WF�A�K �D@
 AABJ(X���E�K�D0q
AAIL4X�F�B�B �B(�A0�A8�D��
8A0A(B BBBF(�X����E�K�D0m
AAE(�X��=E�A�D pAA�X(���X$��Y ��Y��
,Y��@Y$��;E�uH\YH���F�B�B �B(�A0�D8�D�\
8A0A(B BBBE�Y��$�Y����_�G
kG�H�t�Y`���F�F�B �A(�A0�G@�HMPNHB@`
0A(A BBBElHMPMHB@�HDPOHA@YHJPMHA@L\Z����F�B�E �D(�D0�DPf
0A(A BBBI�Xb`MXAPL�Z��F�G�B �E(�D0�D8�DpR
8A0A(B BBBD�Z���4[��$[��~Hq<[h��	P[d��2E�ll[���HM0�[����B�A�D �FPi
 AABF0�[���F�A�A �D0�
 AABG�[X���G��
A(\���pA�K
DS
Ee
AD4\@���B�G�B �E(�I0�A8�Q@g8A0A(B BBB0|\���cF�A�A �D0�
 AABG�\���9�\���\���H�\����B�B�B �B(�D0�A8�D@v8F0A(B BBB,8]L��~B�A�D �I
ABE(h]���=B�D�I �jABH�]����B�J�G �B(�D0�A8�Q@�
8A0A(B BBBHL�]D���B�D�B �B(�A0�A8�J��
8A0A(B BBBD(0^����A�G�J��
AAAD\^����B�J�E �G(�A0�D8�DP�8D0A(B BBB�^0��	�^,��Q�^x���Yq
FxH�^(��&B�G�B �E(�D0�D8�N`
8A0A(B BBBIL8_���r�B�B �B(�A0�A8�D�=
8A0A(B BBBK��_����B�F�B �B(�A0�D8�H`�hKpShA`J
8A0A(B BBBE0
8F0A(B BBBIKhapHhB`F
8A0A(B BBBA� `���B�E�B �B(�A0�A8�G�6�Q�[�D�S�G�^�G�L
8A0A(B BBBA��I�E�G�R�
�O�LD�I�N�N�L���N�R�A���O�W�B���`��N	B�B�B �E(�A0�A8�J�E
8A0A(B BBBJ��H�n�B�?�H�S�A���P�Q�B��pa���	B�J�B �B(�I0�K8�J��
8A0A(B BBBF��R�H�A�N���Y�B�A�P�m�Q�B�B�I��K�V�A�Db��F�I�C �G�X�O�R�A�i
 AABH`Xb�	��
F�I�B �B(�A0�A8�G�^	
8A0A(B BBBDl�b�B�G�I��bX�UE�OH�b���F�B�D �A(�F0|
(C ABBI[(C ABB$c��HM<c��OE�E@Xc�&A�R
E`
HP
HH
HX
Hm
KH
H(�c�E�A�NPo
AAK@�c���F�B�B �K(�A0�DPt
0A(A BBBJdx �BMb$d� ��8d<!��E��,Td�!�UJ�D�D �pABK���8�d�!�^B�H�D �D(�D`�
(A ABBEH�d$��B�E�B �B(�D0�D8�G�~
8A0A(B BBBFHeh%��B�E�E �E(�D0�A8�G��
8A0A(B BBBF0Xe�*��E�D�S�r�R�A�Z
AD�e8.�H@�
GH�e</�B�B�B �B(�G0�A8�D�W
8A0A(B BBBK(�e2��E�K�D`�
AAK  f�3��E�N0j
ABLDf`4�&F�E�B �B(�A0�D8�D�J
8A0A(B BBBD<�f@9��B�J�E �D(�A0��
(A BBBJ<�f�9��B�B�J �D(�D0�g
(A BBBDHg:��B�B�B �B(�A0�A8�D��
8A0A(B BBBB8`gT=��F�G�A �D(�N��
(A ABBD4�g�>�JF�A�A �J�'
 AABC8�g�?��F�G�D �D(�K��
(A ABBC8h�@�OF�B�A �A(�G��
(A ABBFLh�A��K��
Ahh�B�K��
A�h�C��K��
A�hD��K��
F,�h�D�`E�C�G0I
AAA�h(E��\i�E��B�B�B �B(�D0�A8�GP�
8F0A(B BBBDD8C0A(B BBBL`iTF��F�B�B �B(�D0�D8�D�[
8A0A(B BBBCD�i�K��F�D�A ��
APAA
AHAA
GBAH�iM�\F�B�E �B(�A0�D8�DpI
8A0A(B BBBE\Dj T�
F�B�E �B(�A0�D8�D�!�T�J�A�\
8A0A(B BBBB`�j�U��F�B�B �A(�D0�q
(A BBBIX
(A BBBA�
(D BBBK8klW��E�P�J�
s
AADy�
T�
I�
A�
DDk0X�,F�B�B �A(�I0�GP�
0A(A BBBJ<�k^��F�A�A �D@p
 AABHCHBPFHA@�k�_�PE�J�k�`��k�`�0Hc l�`��E�N@�
AE 8l�a��E�N@�
AE(\l�b��E�K�D@�
AAD4�lLc��E�K�DP^XI`RXAPh
AAH0�ld��F�A�A �N0�
 AABE(�l�d��E�K�D0y
AAA( mde��E�K�D@�
AAH(Lmf��E�K�D@�
AAH(xm�f��E�K�D@z
AAH0�mPg�F�A�A �N@�
 AABF(�m,h��E�K�D@�
AAH(n�h��E�A�NP�
AAA80n�i�ZF�B�A �A(�N`�
(A ABBK0ln�j��F�A�K �D@�
 AABG0�n�k��F�A�K �D@�
 AABG0�nPl��F�A�A �N0�
 AABETom�+F�B�K �A(�DpixL�RxApKxG�`xAp{
(A ABBDT`o�n�F�B�K �A(�DpixL�RxApKxG�`xAp�
(A ABBC(�o�p��E�K�D@�
AABL�oPq��F�B�A �K(�Dp^xR�F�F�Up�
(A ABBFL4p�s�F�B�A �K(�Dp^xR�F�F�Up
(A ABBD0�p�v�HF�K�A �D0�
 AABE(�p�w��E�K�D@�
AAI\�p0x�/F�B�K �A(�D�n�L�M�A�K�G�]�A�v
(A ABBDLDqz�5F�B�A �K(�Dp^xR�F�F�Up�
(A ABBH\�q�{�?F�B�K �A(�D�n�L�M�A�K�G�]�A�
(A ABBKL�q�}�!F�B�A �K(�Dp^xR�F�F�Up
(A ABBE(Dr���E�K�D@
AAK4prD���E�K�DP^XI`RXAPh
AAH(�r����E�K�D@�
AAH(�r����E�K�D@�
AAH(sd���E�K�D0�
AAH,,s���kE�K�D@�
AAE8\s8��(B�E�D �C(�G@e
(A ABBH8�s,��B�C�D ��
FBEj
ABA �s���J��
JCE�0�s����J�D�G I
CAF@��H,t8��MB�E�B �B(�A0�A8�DPw
8A0A(B BBBFHxt<��B�B�E �D(�C0�X
(C BBBG�(G BBB(�t���A�A�D0�
AAB8�t���B�B�A �D(�J�L
(A ABBKH,ux��fF�J�D �H(�D`@hDpExB�N`�
(A ABBJxu���QJ�|J��u��cJ�}
IP�$�u0��{J�P O
AFH�8�u����F�B�B �A(�A0�
(C BBBDv��cJ�j
Dh�88v<���b�J�A �y
ABGH���H ���,tv���a�J�G e
AAGH���v`��SJ�Y
Eh�(�v����F�A�D ��AB4�v$��{J�D�G v
CAAaAAE��(wl��sJ�w
Gh�HHw̒��N�N�G c
AAHDCAH��H ��DD�A��w@��SJ�Y
Eh� �w����E�D0�
AI0�w���F�A�A �Dp�
 AABADx����F�A�A �D��H�[�A�j
 AABFhTx@���B�B�B �A(�A0�J���h�K�A�u
0A(A BBBB��J�H�E�U�`�x����B�B�E �B(�A0�D8�IPo
8D0A(B BBBA$8K0A(B BBB$y��8y��#HLy8���F�B�B �B(�A0�A8�D�]
8A0A(B BBBGH�y���F�B�B �B(�A0�A8�Dp]
8A0A(B BBBG,�y���{J�I�G N
AAFG��Dz��fF�A�A �G���E�T�A��
 AABD\z8��SJ�Y
Eh�,|zx���J�N�G O
AAHP���zأ�SJ�Y
Eh� �z���E�I f
AK �z����E�I f
AKH{���F�B�B �B(�A0�A8�G@�
8C0A(B BBBEH`{D��xF�B�B �B(�A0�A8�D`Z
8A0A(B BBBJ`�{x���F�B�B �A(�A0��
(A BBBFx
(C BBBG_
(F BBBEH|���xF�B�B �B(�A0�A8�D`Z
8A0A(B BBBJ\|ة�0Hc(t|��E�A�N@y
AAA(�|�(E�A�N@�
AAD4�|ȫ�8E�A�NP^XF`RXAPo
AAD,}��E�A�G� I� �
AAG44}P��E�A�NP^XF`RXAPx
AAK8l}8��hE�A�N`^hFpFxF�U`�
AAD8�}l��pE�A�G`rhFpFxF�U`�
AAD(�}����E�A�N@�
AAJ(~t���E�A�N@v
AAD<~(��P~$���E��l~ȳ�	�~ij��~���	�~���E�O�~���MH@\�~����B�E�D �I(�D0o
(A ABBCg
(F ABBFj
(C ABBF0<(��yF�A�A �D@�
 AABG pt���E�D0�
AF0�P��eF�A�A �D0�
 AABG8����F�B�A �A(�DP�
(A ABBE8�p��AF�B�A �A(�DP/
(A ABBE0@�����F�A�A �D`�
 AABG(t���BE�A�D@�
AAE8��4���F�B�A �A(�D`+
(A ABBA ܀���
E�D0�
AF0�����F�A�A �D@�
 AABG@4���RF�B�B �A(�A0�Dp�
0A(A BBBC(x����E�A�DP
AAA ������E�D@�
AB@ȁ,���F�B�E �A(�A0�D@z
0A(A BBBK0�����F�A�A �DPa
 AABG8@�t��7F�B�A �A(�DP�
(A ABBE0|�x��qF�A�A �D@�
 AABG �����E�D0�
AF Ԃ����E�D@�
AJ0�����F�A�A �D@�
 AABG0,�����F�A�A �D@�
 AABG`�T��(E�O
DO(��d��E�A�D@�
AAE0��X��6F�A�A �D0�
 AABG �d���E�D@�
AB �����E�D@�
AB((�<��E�A�D@�
AAE(T�0��.E�A�D@�
AAE(��4��E�A�D@�
AAE(��(���E�A�DP
AAA(؄����E�A�DP
AAA0�0���F�A�A �DP
 AABG08�����F�A�A �DP
 AABG0l�����F�A�A �DP
 AABG0��d��
F�A�A �DP
 AABG(ԅ@���E�A�DP
AAI0����-F�A�A �DP!
 AABG04�����F�A�A �DP�
 AABG0h�|��F�A�A �DP�
 AABG<��h���F�B�A �A(�D��
(A ABBE$܆��oE�A�D [DA(� ���E�K�D@�
AAA\0�����F�B�B �B(�A0�A8�N�	��	F�	]�	A�	�
8A0A(B BBBK<�����F�L�A �A(�G�,
(A ABBC@Ї4�HF�B�B �K(�A0�DP�
0A(A BBBFH�@��F�H�B �B(�A0�A8�Dp�
8A0A(B BBBA`���HRHx���F�B�B �B(�A0�A8�G��
8A0A(B BBBA(Ĉ��wE�A�F0c
AAAT���fB�B�B �D(�K0�G�f�F�R�A�#
0A(A BBBJH���\���`p����B�B�E �B(�K0�A8�G�	f�	F�	F�	F�	U�	�
8A0A(B BBBGԉ 
��
�L��
��F�B�L �A(�A0�D`ohOpRhA`�
0A(A BBBH4L���_F�D�D �c(H0Y(D AAB����3E�-���JA�H��D��\Ԋ��sF�G�E �A(�G0�
(A ABBDZ
(A ABBHS
(A ABBG4���-H���H�
ELd����B�B�B �B(�A0�A8�D�i
8A0A(B BBBAH�����F�B�E �J(�F0�A8�IPz
8J0A(B BBBL0�$��F�I�A �K0�
 AABI4���DH���\�h��p����L��`��B�B�B �B(�A0�A8�G��
8A0A(B BBBAHԌ��\F�G�J �E(�D0�A8�DPv
8G0A(B BBBE( ���E�D�G@�
AACHL���\F�G�J �E(�D0�A8�DPv
8G0A(B BBBE(�����E�D�G@�
AACLč` �FB�B�B �B(�A0�A8�G�%
8A0A(B BBBAH�`"��F�B�E �J(�F0�A8�IPz
8J0A(B BBBL(`��#��E�D�G0�
AAK��x$�(���$�D���$�0Ȏ�$�R܎8%�LA�J��l%�8L��%�<B�E�B �B(�A0�A8�D�
8A0A(B BBBAH\��*��F�B�E �J(�F0�A8�IPz
8J0A(B BBBL(���+��E�D�G0�
AAILԏ`,�8B�E�E �B(�A0�A8�D�
8A0A(B BBBAH$�P1��F�B�E �J(�F0�A8�IPz
8J0A(B BBBL(p��2��E�D�G0�
AAIL��(3�;B�K�H �B(�A0�A8�D�
8A0A(B BBBAH�6��F�B�E �J(�F0�A8�IPz
8J0A(B BBBL(8�\7��E�D�G0�
AAILd��7�@B�H�H �E(�D0�A8�D�
8A0A(B BBBAH���:��F�B�E �J(�F0�A8�IPz
8J0A(B BBBL(�$<��E�D�G0�
AAI,��<�JA�HH��<�e\�H=�ep��=�e��>�e��\>�e���>�e��?�eԒp?�e��?�e��(@�e��@�e$��@�e8�<A�eL��A�e`��A�eHt�PB�lF�E�J �G(�A0�A8�IPz
8J0A(B BBBL0��tC��F�A�D �K@�
 AABA0��D��F�A�D �K@n
 AABA0(�LF�vF�A�D �K@V
 AABA0\��G�5F�A�D �K@
 AABA0���H��F�A�D �K@�
 AABAĔ`I�;Lؔ�I��F�B�B �B(�A0�A8�J��
8A0A(B BBBAL(��O�sF�B�B �B(�A0�A8�J�K
8A0A(B BBBAPx�U�F�B�B �B(�A0�A8�J��
8A0A(B BBBA̕�X�F�$Y�JD�`Y��&B�B�B �B(�A0�A8��%
0A(B BBBA$<����E�G�G �AA$d�Ѐ��E�G�G �AA(�����E�G�G AAh������)F�B�B �B(�A0�A8�D�
8A0A(B BBBA�
8A0A(B BBBA$���-L8�,���B�E�B �B(�D0�A8�G�b
8A0A(B BBBEL�����2F�B�E �B(�A0�D8�R��
8A0A(B BBBD8ؗ���dF�F�E �D(�G��
(A ABBF���-L(���g
F�B�B �E(�A0�A8�J��
8A0A(B BBBHHx����F�B�B �B(�A0�A8�DHq
8A0A(B BBBCL���.B�F�B �B(�A0�A8�G�	
8A0A(B BBBAH�����F�K�M �F(�A0�A8�D`X
8A0A(B BBBA`����3<t� ���F�K�E �D(�G0�
(A ABBJ�����ș����U�YJ��@��$��X���T��6$����38����(L����(d����x����&ME K$�����E�H�F �DA�����FA�g
HQܚ���.E�X
KA�������[H�����B�B�B �B(�D0�A8�G��
8A0A(B BBBKL`�$���B�E�B �B(�D0�A8�J�3
8A0A(B BBBI��d��E�X0̛h���F�P�A �D`�
 AABA(�$���E�A�NP�
AAJ\,�����F�F�B �B(�A0�K8�I�O�F�X�A�q
8A0A(B BBBB\��x��fF�F�B �L(�A0�A8�G�B�q�Y�B��
8A0A(B BBBAH����B�E�B �E(�A0�D8�J�s
8A0A(B BBBF48�<�[E�E�N`hhipRhA`�
AAElp�d�aF�B�B �B(�K0�A8�G�v�O�R�A�
8A0A(B BBBK��H�f�A�0�d��F�A�A �N@�
 AABH0����F�A�H �N@�
 AABEH�L�0AAUHd�`��F�G�B �E(�A0�A8�DPt
8A0A(B BBBHL����eB�B�B �B(�A0�A8�J�X
8A0A(B BBBJ`�$�'F�B�E �B(�A0�D8�D`[hRpIhB`b
8A0A(B BBBDohOpKhA`Ld��$�gF�B�B �B(�A0�A8�G��
8A0A(B BBBEH���&��B�H�B �E(�A0�N8�G�n
8A0A(B BBBAD�D*�gE�A�N`vhOpFxF�U`vhDpYhA`q
AAG@H�l+�E�A�NPuXF`RXAPcXJ`YXAPo
AAF,��H,�E�NPpXF`RXAPL
AGD��8-�eF�B�B �A(�K0�D`�
0A(A BBBA@�`/��F�E�B �A(�A0�G��
0A(A BBBA H��/��E�U@i
AA l�H0�\E�N B
AA(���0��E�A�N0i
AAA<��1�jF�A�A �NPoXF`RXAP�
 AABA\��82��F�B�A �A(�N�`�F�R�A���I�J�D�_�d
(A ABBI\��3�%I�RE�|��3����3�N��4�-��4�AE�{@ԢP4�9F�B�B �A(�A0�DP
0A(A BBBA�L5�YE�S4��5�0Hc0L��5�[E�D�D Y
AAHhAA ���5�\E�N B
AA(��6�E�K�DP�
AAE(У7�%E�K�D@�
AAH ��8�~E�D `
AF  �d8�~E�D `
AF D��8��E�D p
AF h�,9�pE�D `
AA ��x9�pE�D `
AAL���9�DF�B�E �B(�A0�A8�G�8
8A0A(B BBBF8��>��F�B�K �A(�D`�
(A ABBG(<�h@�E�C�G@�
AAG(h�\A�tE�C�G@�
AAC���B�	���B�E�ĥ�G� HW4ܥ�G��F�D�A �I�{
 AABE� H�HK(,�(H��E�A�N@{
AAG0X��H�^A�I�D x
DAEHDA@���H��F�B�B �A(�A0�DP�
0A(A BBBC0ЦdQ�F�A�A �D0�
 AABC�PR�%I�TC�0 �dR�)F�A�A �D0i
 AABG0T�`S�)F�A�A �D0i
 AABG ��\T�NE�N0
AF(���U��E�A�DPz
AAA0ا�U�XF�D�D �G@�
 AABE@�W�TF�B�E �A(�A0�D@
0A(A BBBB P�4X�VE�N@�
AJt�pY���|Y�	��xY�	��tY�^HC
�Y�fa�q
F(�Z�eI�D�D HAAE���PZ�((�\Z�GA�D�G f
AADT��Z�Hh��Z��F�B�A �A(�NpyxE�HxApo
(A ABBD ��\��E�N �
AGDة�]�B�B�I �D(�D@�HEP[HA@T
(A ABBAX ��^��B�B�B �I(�D0�GP�XE`[XHPLXE`[XAPT
0A(A BBBC@|��_��E�A�D0�
AACa
AAE^
AAH,��4a�jB�D�D �A
ABB(�ta�.A�A�J��
AAFL�xb��F�B�A �A(�D0F
(C ABBD�
(C ABBH8l�d��F�B�A �A(�DPr
(A ABBJ0���e�F�A�A �D0\
 AABD0ܫhf��F�A�A �D0�
 AABI0�4g�F�A�A �G��
 AABH8D� j�`F�B�A �A(�G�u
(A ABBDT��Dl��F�B�B �A(�A0�D�3
0A(A BBBEZ�C�[�A�8ج�o��F�B�A �A(�G��
(A ABBC8�@r��F�B�A �A(�G�{
(A ABBFTP��t��F�B�B �A(�A0�G�{
0A(A BBBJf�C�[�A�L���w��F�B�A �A(�D0N
(C ABBDZ
(C ABBA,��|x��A�C
D��G��K�P
F((��y��E�J
K����t
B(T��{��A�D�N@�
AAGl��}�uB�B�B �E(�A0�D8�G�X�E�[�H�G�H�[�A�X
8A0A(B BBBDL�$��F�B�A �A(�D0S
(C ABBG]
(C ABBA8@����F�A�A �p
CBCl
CBGL|�X��F�B�B �B(�A0�A8�D��
8A0A(B BBBKL̯(��oF�B�B �B(�A0�A8�G�J
8A0A(B BBBA0�H��}F�A�D �N@�
 AABD0P����]F�H�A �G@�
 AABAH������B�E�B �E(�G0�A8�Gpv
8A0A(B BBBCа$�����XAÌ�؇�
F�I�B �B(�A0�A8�G���H�_�E�L�E�\�G�\
8A0A(B BBBF�K�X�H�L�E�[�F�8|�X��yF�B�A �A(�DP�
(A ABBG8������F�B�A �A(�DP
(A ABBB8� ��F�B�A �A(�DP]
(A ABBG\0����F�B�A �A(�D0r
(C ABBHT
(C ABBDO
(C ABBA0��t��wE�D�L L
EAIDAA(IJ����E�I�D@�
JAA�D��=E�sL�h���F�B�B �D(�D0�Z
(A FBBIM
(D FRBM\����JH}Lt�0���B�B�B �E(�D0�A8�J��
8A0A(B BBBKij���س���������������(����<�ȕ�,P�ԕ��M�D�G j
AAD@��,��4���M�D�G j
AAD@��<������M�D�G j
AADkAAK��H ��4�4���M�D�G j
AADQAAE��4(�����M�D�G j
AADQAAE��,`�$���M�D�G j
AADh��D������M�G�D g
G�A�ILG�A�T ��DAA,ص,���M�D�G o
AAG@��,�����M�D�G o
AAG@��,8����M�D�G o
AAG@��,h�|���I�D�G c
AAG@��,��ܚ��M�D�G l
AAJ@��(ȶL��
M�D�G �AAG��8�0���B�E�D �G(�D0m
(A ABBG0����%D����%X����%l�؜�%����%����%��,��%0��H���M�D�G F
AAH@��,�ĝ��M�D�G j
AAD@��, �$���I�D�G d
AAF@��,P�����M�D�G j
AAD@��,�����M�D�G j
AAD@��<��D���M�D�G j
AADkAAK��H ��4����M�D�G j
AADQAAE��4(�\���M�D�G j
AADQAAE��,`�Ԡ��M�D�G j
AADh��8��d���M�G�D f
D�A�MOAAG��<̹ء��M�D�G A
AAEPAAF��H ��8�h���B�E�D �G(�D0m
(A ABBGH����%\�آ�%p���%,�����I�D�G d
AAF@��0��p���N�G�A �W
ABHH���8����B�E�D �G(�D0m
(A ABBG$�`��%8�|��%L����%`����%t��%,�����I�D�G d
AAF@��4��L���M�D�G n
AAHZAAD��<�ԥ��M�D�G C
AACLAAB��H ��@0�t��^B�E�L �D(�D0�I`�
0A(A BBBJ0t�����F�A�A �D@�
 AABD4��\���F�A�A �r
FNJy
ABD4����F�A�A �r
FNJl
ABI4�����F�A�A �r
FNJe
ABH4P�4���F�A�A �r
FNJe
ABHD��̬�+F�A�A �r
FNJM
ABHM
ABHL��F�A�A �r
FNJg
DBKP
ELOAAB8 �t���F�B�A �A(�D`r
(A ABBJ8\�(��&F�B�A �A(�D@r
(A ABBJ4�����F�A�A �r
FNJp
ABED��+F�A�A �r
FNJK
ABJT
ABIT����)F�B�B �B(�A0�A8�D`p
8A0A(B BBBD�hKpZhA`@p�t���F�A�A �r
FNJe
ABHNDB@�� ���F�A�A �r
FNJj
DBHHAB`������B�B�B �E(�D0�A8�D`�hEpghA`\
8A0A(B BBBC�hEp[hA`\�(��p�$��@��0��F�B�B �A(�A0�DPs
0A(A BBBE@���.F�B�B �A(�A0�DPs
0A(A BBBE0�����F�A�A �D@�
 AABE@@�ļ�oF�B�B �A(�A0�D@�
0A(A BBBI8����ZF�B�A �A(�DPr
(A ABBJ`�����N�E�A �A(�G0B
(H� A�B�B�E@����H0����D(A ABB`$�����N�E�A �A(�G0B
(H� A�B�B�E@����H0����D(A ABB\�����N�E�A �A(�G0{
(I� H�B�B�L@����H0����D(A ABB\��\���N�E�A �A(�G0y
(H� H�B�B�G@����H0����D(A ABBTH����F�B�B �B(�A0�A8�D`�hIpahA`�
8A0A(B BBBA(��4���I�Z
�M|�T�AL�����F�B�B �B(�A0�H8�G��
8C0A(B BBBA �h���A�G t
ACP@����F�B�B �A(�A0�Dpo
0A(A BBBIZxL�FxAp@�� ���F�B�B �A(�A0�D`�
0A(A BBBE������������������(����%<����%8P����F�B�A �A(�DPr
(A ABBJD��h���F�I�A �D(�D`�hEpphA`T
(A ABBG8������F�B�A �A(�DPr
(A ABBJl�T��F�K�B �B(�A0�H8�G��
8A0A(B BBBH��K�X�F�`�E�l�A�H�����iF�B�B �B(�A0�A8�D�r
8A0A(B BBBBL����CB�B�E �B(�D0�D8�G��
8A0A(B BBBK0����B�A�G �D@�
 AABHP����%d����%Lx����B�B�J �E(�A0�A8�J�`
8A0A(B BBBG0��\���F�A�A �D@�
 AABEL��(��F�B�A �A(�D0v
(C ABBD]
(C ABBAlL���RF�B�B �B(�A0�A8�D���B�L�A���d�V�A�v
8A0A(B BBBD\����F�I�B �B(�A0�D8�D�l
8A0A(B BBBF��E�[�F�<����F�I�D �D0{8E@[8A0T
 AABA8\�(��M�G�D g
D�A�LLAAB��0�����F�A�A �D@�
 AABFL��X��F�A�A �r
FNJ^
DBL
ABNAABD����N�E�E �A(�A0�}
(A BBBB@�����8d����M�G�D c
D�A�HTAAB��@��	��F�B�B �A(�A0�D`�
0A(A BBBHL��`
�F�B�A �A(�D0�
(C ABBEC
(C ABBA4� �I H�\��A�D a
AI l����A�G��
AHH�����
B�B�B �B(�A0�A8�Dp5
8A0A(B BBBC���]HH��`��F�B�I �B(�D0�C8�D`H
8A0A(B BBBH\@���tB�B�B �B(�A0�A8�G�~
8A0A(B BBBG��N�O�A����HP���	���@E�zT��,�F�E�E �E(�D0�C8�GP�XV`FXCPD
8A0A(B BBBD @���rE�D H
AF8d�@�\F�B�A �A(�DP�
(A ABBE0��d ��F�A�A �D0�
 AABG8��"�@F�B�A �A(�D@g
(A ABBE0�#�~F�A�A �DPd
 AABD8D�P'�xF�B�A �A(�D@
(A ABBE@���(��F�B�B �A(�A0�D@�
0A(A BBBK8��*�xF�B�A �A(�D@
(A ABBE8�D+�xF�B�A �A(�D@
(A ABBE(<��,�$E�K�D0p
AAJ(h��-��A�A�D P
CAF��.�ZH�[
A0��D.�SF�A�A �G0C
 AABJ��p/�AHx4���/�zE�A�D s
AAAY
CAA4��/�-I�XG�(P�0��M�D�G �I�H�H|��0��F�B�B �B(�D0�A8�D�q
8A0A(B BBBH@���1�mF�B�B �A(�A0�D`G
0A(A BBBAl�3�NF�D�B �A(�A0�G���E�E�J�b���E�E�J�b��
0A(A BBBAH|��5�F�M�A �G�4�E�E�J�b��
 AABA���7�,H_d���7��F�B�B �B(�A0�A8�D`I
8A0A(B BBBK�hYpOhA`�hspQhA`(H�;��A�D�D0v
AAGXt��<��F�B�B �E(�D0�D8�D`U
8A0A(B BBBFThgpNhA`L���>�TF�B�B �B(�D0�D8�D�K
8A0A(B BBBCL ��@��F�E�F �B(�A0�A8�D�)
8A0A(B BBBD0p�C��F�A�D �D0n
 AABGL���C�F�K�D �B(�A0�A8�G�K
8A0A(B BBBKL���G�cF�K�D �B(�A0�A8�G�
8A0A(B BBBGHD�M�F�B�G �B(�A0�A8�G��
8A0A(B BBBC���P�U��Q�74��<Q�QF�E�A �A(�O0k(D ABB(��dQ��E�A�D w
AAA8��Q�3F�B�A �A(�D@/
(A ABBE0X��S�\E�A�D z
DAGFDA(��T��E�A�D z
AAAl��|T��
F�B�B �B(�A0�A8�D�h
8A0A(B BBBDE�Q�Z�A�F�s�F�A�((�_��E�M
FH
HB
FT��_�9E�a
JH�t��_�{N�G�B �B(�I0�D8�D@�8A0A(B BBBD������P@������j
8A0A(B BBBDL8A�0A�(B� B�B�B���`�9a�WH$��`��F�B�B �B(�D0�A8�G@�
8A0A(B BBBD$p�tb�RE�D�D BAAT���b�B�B�B �B(�A0�A8�G� L�@L�D�
8A0A(B BBBH��dd�+Y�Q\�xd�B�B�B �E(�D0�A8�J@�
8A0A(B BBBGD8C0A(B BBB,l�(e��E�A�G� I� O
AAI8���e��B�A�A �G� L�!�
 AABF8��h�3F�E�D �A(�G��
(A ABBJ,�i��F�D�A �r
ABH0D��i��B�I�C �G0�
 AABC8x�j�F�B�A �A(�D`�
(A ABBB@���j��F�B�B �A(�A0�DP�
0A(A BBBE@���k�F�B�B �A(�A0�D`�
0A(A BBBA0<�xl��F�A�A �D@�
 AABG(p�m��E�A�D@�
AAK<���m��F�B�A �A(�D@�
(A ABBA��n�/Hf�� n�E�P�$n�0Hc<(�<n��E�K�G�a�F�R�A�
AAH h��p��E�N0v
AF8��hq�jF�B�A �A(�N`
(A ABBF(���r�*E�A�NP�
AAK ���s��E�N0u
AG �Lt��E�N0`
AD<��t�P�u�d�u�0x�u�iE�D�D g
CAHaDA��Hu�nE�h$���u�GA�N�D nDA���u�ED@��u�HI( �v�eE�D�D s
DAKHL�Hv��F�E�D �A(�D0M
(A ABBID(F ABBL��|v�FB�B�D �C(�L`�hHpVhA`T
(A ABBBb
hHpG��|w�-E�g��w�E�R4 ��w��F�E�A �A(�G0�(A ABBX��w�CE�y(t�0x��E�D�N@r
AAE`���x��F�B�B �B(�A0�A8�N�s�_�F�F�U�
8A0A(B BBBH`�`z��F�B�B �B(�A0�A8�N�s�_�F�F�U�&
8A0A(B BBBA`h��{�(F�B�B �B(�A0�F8�D�\�O�F�F�U�
8A0A(B BBBD8���}�@F�B�A �K(�DP�
(A ABBD4��~��F�D�J �G�Q
 AABH@�$��dHWHX�|���B�E�E �E(�D0�D8�D@_
8A0A(B BBBJH�����R�I�E �B(�D0�D8�DP�
8A0A(B BBBG0������F�A�D �N0n
 AABAH$���aB�B�B �B(�D0�D8�GP�
8A0A(B BBBG<p����B�B�E �A(�A0��
(A BBBDl������B�E�B �B(�A0�A8�GP�XA`FXDPD
8A0A(B BBBIS
8C0A(B BBBAH ����A�C�G z
FALH
FAIH
FAIYCAl�H��QA�p
GX�����WE�a
Jbp��Ȇ��F�B�B �L(�A0�A8�GpHxG�NxAp^xK�NxAps
8A0A(B BBBFVxH�RxBp4 �T���E�K�G@uHDPIHA@T
AAH4X����E�K�G@uHDPIHA@T
AAH4��Ċ��F�D�A �D
ABFKAB8��<��F�B�A �A(�GP"
(A ABBG0���cF�A�K �G0x
 AABK\8�L���F�B�B �A(�K0�GpKxF�RxBp�xN�VxDpf
0A(A BBBG4��|���E�H�G`KhFpRhB`�
AAF����(����jF�A�A �^ABH�4���B�B�B �B(�D0�D8�GpC
8A0A(B BBBD\�x��p�t��L��p�� B�B�B �B(�D0�D8�G��
8A0A(B BBBE��@����L�����X���B�B�E �B(�A0�D8�D�]�E�V�B�-�C�J�B�F
8A0A(B BBBF��C�N�A��F�I�B�D
�C�E��X����d��H��p��WF�B�B �B(�A0�A8�Dp9
8A0A(B BBBK`�����F�E�A �C(�G0�
(C ABBAa
(H ABBB�
(E ABBE(t����eE�I�D s
DAFL�����
B�B�E �B(�D0�A8�J��
8A0A(B BBBIT������F�B�E �B(�D0�A8�D`�
8A0A(B BBBB|hCpOhD`H�ܹ�\���p���8�����S�A�A �}
�A�B�KfABG�����T��
��P����\��$$��x��
A�C
E����
A($�`���E�K�D@�
AAB(P�$���E�A�N@w
AAC|�ؼ��E�� �����dE�N H
CA����t����F�I�B �B(�A0�A8�D�(�B�D�B�S�k
8A0A(B BBBGD�M�L�B�I�tH�|���F�I�B �A(�F0�K��
0A(A BBBBm�M�F�B���J�U�A�Z�n�F�A������JE�D<����hF�A�A �NPsXK`KXAPv
 AABF@�H��F�B�B �A(�D0�DP�
0A(A BBBD0`���"F�A�A �Q��
 AABAH�����
F�B�B �B(�A0�A8�Dp�

8A0A(B BBBA$�����IE�C�F vCA(�����E�A�G@R
AAG\4�p��gF�B�B �B(�A0�K8�G�C�K�X�A��
8A0A(B BBBH�����	4��|��|F�D�G �J�W
 AABA<������F�E�G �D(�J�c
(A ABBAD ����F�E�H �D(�D0�J�h
0A(A BBBKh�|��	|�x�������	T�����#F�B�B �E(�A0�D8�DPs
8A0A(B BBBKoXa`JXAP<��X��aP�E�E �D(�D0�m(A BBBJ�����D<�����F�B�B �A(�A0�G@L
0A(A BBBI,����RE�D�G d
AAJ��0����<��=��h����d���`��D�\���A�D�D0z
AAKZ
AADI8I@SHBPI0`�����t����>B�B�B �B(�A0�A8�D���M�R�B�I�|�I�S�B�I�D
8A0A(B BBBF\�M�O�B�N���M�R�B�I���I�S�B�Q�d�M�I�B�N�R�J�I�B�S�	�M�R�B�I�Ph���dB�D�A �D0|8M@THBPN0]
 AABGY8J@THBPI0��(����$���� ����,��$�8���E�A�G oDA4����E�O$P����9E�G�G cAA x�����E�J0q
AG��H��E�O��L��E�WH��P���F�E�A �A(�GPAXD`RhBpNPT
(A ABBAH �����F�E�A �A(�GPAXD`RhBpNPY
(A ABBFl�x��5E�]
FL�����$E�^H������F�E�A �A(�G@\HKPLXI`N@E
(A ABBG��0��E�V�4��E�W,�8��9E�a
JHL�X��<E�vh�|��E�W�����$E�^�����5E�k
A�����E�W�����$E�^�����,E�f �����E�J0f
AJ4�`��"HXTL�x��F�B�E �I(�A0�D`�
0A(A BBBEphIpNxI�N`8��@���F�B�D �D(�G@K
(A ABBH0������F�D�A �G0�
 AABH(�`��ZF�D�A �KAB4@����iF�D�A �|
ABFUAB4x����iF�D�A �|
ABFUAB4����iF�D�A �|
ABFUAB0�<���F�D�A �G0r
 AABH8�����F�B�G �A(�G@�
(A ABBF(X�l���E�A�I0Y
AAF(�����cE�A�I0L
AAA(����mE�F�D0V
AAA(�X���E�A�I0Q
AAF$����[E�d
GE
KZ@0����F�B�E �D(�D0�D@e
0A(A BBBJxt����F�H�B �A(�D0�D�!
0A(A BBBF��M�F�D�M���B�M�D�C�E�K�A�(�4��eF�D�D �t
ABK(�x���E�F�D0�
AAF@H���KE�G�G q
AAJo
AAEn
CAE8����NF�H�D �A(�G`�
(A ABBE0�����F�G�D �DPI
 AABF8������F�H�D �A(�G`R
(A ABBF 8�L�yE�G f
AA0\���F�D�A �GP�
 AABC(����yE�F�M0Y
AAA����sE�i(�L��E�I�D0�
JAA(���E�I�D0�
JAA0���+Db@H���|F�D�D �@
ABGP
ABEADB����+@����qF�D�A �}
ABEP
ABEAABt�0�EB�E�E �G(�D0�D`�
0A(A BBBFUhqpExF�U`hOpOxE�P`�hIpRxI�S`\��'p�$�'��@�'��\�*��x�*����*���*���*����*��*$� �*8�<�*4L�X�E�G�G t
AAGL
DAO����.E�Y
JA\����
F�E�B �A(�D0�DPcXK`LhIpPPn
0A(A BBBA~XH`OhEpIP�`
��\
�,�X
�@�T
�T�P
�h�L
�|�H
���D
�$E�^l��X
�F�E�B �B(�D0�A8�DpcxK�I�O�Ppr
8A0A(B BBBF�xH�O�E�Ip<���F�G�A �GP?XN`FXAPX
 AABK\�h�bE��
K\|���VF�E�B �B(�A0�D8�D`�
8A0A(B BBBFDhNpKxB�Q`\���NF�E�B �B(�A0�D8�D`�
8A0A(B BBBJDhNpKxB�Q` <���E�G Q
AB `���E�G J
AI ��`�E�G �
AE���\�\F�E�B �B(�A0�A8�D�
8A0A(B BBBD��N�M�A�O�H�O�L�I���H�N�I�I���G�N�E�V� H#��E�G /
AD�l�%�\F�E�B �B(�A0�A8�D��
8A0A(B BBBI4�N�M�A�O�H�O�L�I���H�N�I�I���G�N�E�V�H�,�F�B�K �A(�GP�
(A ABBGsXK`UhBpIPDX�2�F�D�A �D@A
 AABD�HKPUXB`I@(��9�/E�A�G0�
AAA ��;�NE�G �
AB(��<�E�F�D0�
AAF�=�9E�c
HD <�=��E�[
Hd
L`�>�HL8x�>��F�E�D �A(�G0@
(D ADBF �@?��E�N0y
AC ��?�E�N0b
AJ@�x@��F�K�A �G�Z�U�Y�A�e
 AABEH@$A��F�I�B �B(�A0�A8�D@�8C0A(B BBB��G�E�W(��G�kE�A�I0T
AAA8�H�}F�E�G �A(�G0C
(A ABBETH�E�T(,XH�`E�D�G q
AAEX�H�(E�^(t�H�E�A�I0Z
AAE ��H�xHw
Ah
HG8�PI��F�D�D �f
GBKZ
ABK(J�
E�G�D@�
AAH@,�J�B�B�B �A(�A0�GP
0A(A BBBA pDL�A�`
O^
J��L�HL��L�&E�K
HIH��L�qF�B�B �B(�A0�A8�D`D
8A0A(B BBBHH,P�B�B�B �E(�D0�I8�D`�
8A0A(B BBBD0d�U�F�G�A �G0�
 AABI�\V�>H p
A8��V�zF�B�A �A(�G@X
(F ABBAl��V�B�B�E �E(�G0�D8�Gp�xI�F�B�Zp]
8A0A(B BBBHd
xG�F�B�E`TX�t`X��lX��xX���X���X�0��X�F�G�D �DPK
 AABDP�Z�fB�B�B �A(�C0�GP�
0A(A BBBGYXK`IXAPH``�IB�B�A �A(�F`khFpMxI�I`�
(A ABBJ0�b�F�A�D �N0k
 AABH��b�H��b�}F�E�A �D(�G0o
(J ABBKD(O ABB4@	�b�\F�A�D �u
ABELAB�x	�b�B�A�F �D@VHFPMXI`I@N
 AABF�
 AABAy
 AABCIHKPFHA@\
 AABEg
 AABEzRx�@���$���( <
8g�fE�N0L
AA`
�g�Ht
�g�}F�E�A �D(�G0o
(J ABBKD(O ABBL�
�g�(B�H�D �A(�D`ahFpMxI�I`T
(A ABBE(�m�oE�D�N0P
AAA<�m�HP�m�}F�E�A �D(�G0o
(J ABBKD(O ABB �(n��E��
DC
AzRx�� 0��
\��n�+A�F�D@CHFPMXI`I@N
AAEi
AAE�
AAF�
AAAzRx�@�� ���
 �Dr�YE�N 
AA��r�H��r�F�B�A �D(�G0[
(G ABBEr(D ABB8
�r�/B�A�A ��
ABED
ABI0@
�s�F�A�F �D0�
 AABDDt
u�#F�A�D �s
NBBY
IBD
ABF �
�u�ME�J w
AA �
$v�E�d
GM
KD�v�=F�A�D ��
ABNA
DBI_
FFExL�w�F�B�E �E(�D0�D8�D@�
8K0G(H BBBKh
8F0A(B BBBAD
8J0D(B BBBED��x�ZF�A�D ��
ABEl
ABAA
DBE0�y�|F�D�D �D0
 AABJ8D {�F�D�D �_
HKHA
ABD0�|�IF�D�D �D0�
 AABBP� }�_F�E�B �A(�D0�D`<hGpOxE�I`b
0A(A BBBHp,�;F�B�D �D(�D0\
(L FBBJp
(A ABBJL
(A ABBFf
(C ABBJ |��WE�N }
AA0�4��F�A�D �D@�
 AABI����8����\F�P�H �A(�D00(C ABB$���8���L���`Ą�t�������=E�a
JL�܄�#E�]���SE�n
EZ(�0��E�A�I0v
AAA(���E�A�I0v
AAA<��� E�ZX���$E�Tt��E�W(���E�A�I0T
AAK���� E�Z$����=E�G�D jAA<���E�D�F c
FAG[
CAAeCA4@��A�D�G g
AAKH
AAF0xl���F�D�H �D@�
 AABC�(��NE�
DE�X��FE�x
CE(����BJ�F�K �cAB���VE�@
K8��FE�y
B(T ��XE�D�G m
AAA0�T���F�G�A �GP�
 AABD0���F�G�D �DP�
 AABA0����F�A�D �I@�
 AABF(���E�D�G0`
AAF(H���eE�D�D z
AAG(t@��eE�D�D ~
AAC����CA�A0����F�G�A �G@x
 AABA�$��"E�X8��)E�_ (L���E�{
Hh
H0L����B�D�I �D0�
 AABA��������*E�d ��bE�h
CU
K8����B�H�A �C(�GP�
(A ABBG0�bE�D�G x
AAFOAA(D��E�D�G0x
AAALpd���B�I�E �B(�I0�A8�J�{
8A0A(B BBBE0���F�D�F �D0b
 AABA0�0���F�D�F �D@�
 AABD0(��F�D�F �D0r
 AABA0\H��F�D�F �D0b
 AABA����,E�f����=E�b
IL(�Ȕ�E�D�G0M
AAA�<��"E�\8P��1F�H�A �A(�GP�
(A ABBG0PT���F�G�A �G0w
 AABHH���RF�B�B �B(�A0�A8�DP�
8A0A(B BBBE���VE�m
F](�D���E�D�K@�
AAA,��9E�A�G� I� v
AAB,L���B�A�C �
ABA<|x���F�A�F �D0`8M@H8A0c
 AABA(�8��4E�F�Dp�
AAGH�L��UB�E�E �E(�A0�A8�GPo
8C0A(B BBBK@4`��F�E�B �A(�F0�DP�
0A(A BBBB@x,���B�A�A �G@tHIPNXI`I@�
 AABD(�ؠ��A�D�G q
AAA0����RE�G�D b
AADWAA@ȡ��F�G�A �\
ABCW
ABFCAB0`d��uA�F�G m
AAChGA����E�O8�����F�E�G �D(�D@
(A ABBA8�X��F�E�A �A(�D0|
(A ABBE8(̣�F�E�A �H(�K0x
(A ABBC<d@��F�B�B �D(�A0��
(A BBBD<����F�B�B �D(�H0��
(A BBBE�@��ZE�T(���E�G�D y
EAI(,��E�G�D v
EAL(X���E�G�D y
EAI(�@��E�G�D y
EAI(�ԧ�E�G�D y
EAI(�h��E�G�D y
EAI(���E�G�D y
EAI(4���E�G�D y
EAI(`$��E�G�D y
EAI(����E�G�D y
EAI(�L��E�G�D y
EAI(���E�G�D y
EAI( t��E�G�D y
EAI(< ��E�G�D y
EAI(h ���E�G�D y
EAI4� 0���F�D�D �s
JBC^
JBF4� خ��E�G�D y
AAEe
AAIH!����F�E�A �D(�D`|hHpSxE�I`�
(A ABBG<P!$��iF�B�A �A(�G� I� �
(A ABBE8�!T��F�B�G �D(�D@e
(A ABBF4�!���E�D�G h
AAFB
AADd"0���B�J�E �A(�D0�Gp�xZ�A�B�Ip�xY�D�B�Ipw
0A(A BBBF\l"���F�E�D �A(�G0Y
(A ABBJK
(I CDBKG
(A ABBK$�"ȹ�1E�D�I IHI0�"��F�D�A �I0h
 AABH4(#\��F�D�A �k
ABGA
AFH(`#��fF�G�D �t
EBD(�#(��E�D�K@y
AAAP�#����F�B�B �D(�F0�D`o
0A(A BBBA�hbpAxB�I`,$(��FF�O�O �CB <$H��ZE�J D
AA`$���VH@H
A|$��$E�^�$��VH@H
A(�$ ��ZF�D�A �|
ABF,�$T��bF�D�A �B
ABH0%���rE�D�G p
AAFgAA D%���E�W
Dl
A h%\���E�P �
AF,�%(��E�A�D wCA�%���E�U�%���E�W�%���'E�a&���$E�^,&���/E�i0H&���F�D�A �G0o
 AABK|&8��$E�^L�&L��F�E�B �B(�A0�A8�G��
8A0A(B BBBB(�&���E�F�DP�
AAA('0���E�I�D0�
CAA$@'���H@^HvPOHA@T
A(h'<��gE�A�I0P
AAA�'���\K0K
A0�'���}F�A�F �G0_
 AABAH�'��?F�B�B �B(�A0�A8�I��
8A0A(B BBBC0(��9E�3`L((��B�B�E �B(�A0�A8�D@S
8A0A(B BBBB�
8A0A(B BBBD�(���I�x
G](�(t��dA�D�G v
AAD�(���P)���4$)��B�E�D �T
CBAaKB(\)h��fQ�L�G Z
AAH4�)���WB�B�A �A(�D0C(D ABB(�)���XJ�D�D �\
ABG8�)���B�B�D �A(�G@c
(A ABBG�(*���
B�B�B �B(�A0�D8�DP�
8A0A(B BBBA#
8A0A(B BBBCf
8A0A(B BBBH�
8H0A(B BBBG�
8P0A(B BBBI(�*���B�A�D �ABx+���B�B�I �E(�D0�C8�G@q
8A0A(B BBBEh
8A0A(B BBBF�
8D0A(B BBBLL�+���P
B�E�B �E(�H0�A8�D�N
8A0A(B BBBEL�+����B�E�B �B(�D0�A8�D�
8A0A(B BBBHL$,0��F�B�E �F(�A0�A8�G��
8A0A(B BBBDHt,��wB�E�E �B(�D0�A8�Gp,
8A0A(B BBBHH�,4�wB�E�E �B(�D0�A8�Gp,
8A0A(B BBBHX-h�6M�E�B �B(�A0�A8��
0A(B BBBGM
0A(B BBBA|h-L�B�H�B �B(�D0�F8�D�W�R�m�\�u�H�U�A�r�K�U�A��
8A0A(B BBBEH�-\��B�B�B �B(�D0�A8�D`P
8D0A(B BBBBD4.��UB�B�B �B(�A0�A8��
0A(B BBBH�|.�B�B�B �E(�G0�A8�G�I�Q�T�B�~�M�N�B���M�P�D�u�H�\�A��
8A0A(B BBBEH/$�B�B�B �B(�D0�A8�D`[
8D0A(B BBBG�\/��F�B�B �B(�A0�A8�G��[�Q�A���H�U�B�z�E�U�A�]�O�V�D��
8A0A(B BBBD��]�k�A���M�M�B�k�S�N�B�\�P�Y�F�D40�0�F�E�I �D(�D0�Dp�
0A(A BBBE$|0�2�rQ�Y
�FA@�0�2��F�B�B �A(�A0�FP�
0A(A BBBA �0�3�E�Dp�
AF1�4�HI $1�4�E�D0p
AFH1,5�HI `145�E�D0]
AI8�1�5�AB�B�D �A(�Dp�
(A ABBD�1�6��1�6�,�1�6�tE�A�G�A
AAH,28�dE�A�G�3
AAFDH2L9�F�E�B �A(�I0�G��
0A(A BBBKL�2�;�cB�E�B �B(�A0�A8�J�[
8A0A(B BBBD$zRx��������,��
L3�?�@B�B�B �D(�D0�GPx
0A(A BBBKaX``IXAPl3x@�8�3�@�B�B�A �A(�F`p
(A ABBF0�3�A�B�A�A �D0�
 AABCL�3�B��B�B�B �B(�A0�A8�G�?
8A0A(B BBBF8@4$E�B�B�A �A(�D`�
(A ABBEX|4xG�B�E�B �B(�D0�A8�Hpu
8A0A(B BBBIoxB�VxApX�4J�B�E�B �E(�A0�A8�Hpy
8A0A(B BBBEhxB�QxApL45�L�
B�B�B �B(�F0�A8�I��
8A0A(B BBBA$zRx��������,~�
L�5DV�
B�B�B �G(�A0�A8�I��
8A0A(B BBBA�$�
$6�`�1L�$@6�b� T6�b�EE�N0�
AC x6�c�EE�N0�
AC@�6e��F�A�A �N@i
 AABE�HGPMXI`N@�6�f��6�f� 7�f�EE�N0�
AC ,7�g�EE�N0�
AC P7i�EE�N0�
AH t7@j�EE�N0�
AHL�7lk�F�B�B �B(�A0�A8�D��
8A0A(B BBBFL�7�m�F�B�B �B(�A0�A8�D��
8A0A(B BBBFL88lp�F�B�B �B(�A0�A8�D��
8A0A(B BBBF0�8�r�BF�A�A �D@�
 AABC0�8t�BF�A�A �D@�
 AABC0�8$u�BF�A�A �D@�
 AABC0$9@v�BF�A�A �D@�
 AABC0X9\w�"F�A�A �D@�
 AABC �9Xx�E�D@�
AFH�9Dy�F�B�B �E(�A0�A8�Dp�
8A0A(B BBBEH�9�z�F�B�E �B(�A0�A8�Dp�
8A0A(B BBBC@H:�|�F�B�B �A(�K0�DP�
0A(A BBBE@�:�}�F�B�B �A(�K0�DP�
0A(A BBBB�:t~��:p~�l�:l~�F�B�B �B(�A0�A8�G�R
8A0A(B BBBG<	�O�N�A��S�F�A�Th;���N�G�B �D(�I0�\
�(D� B�B�B�FI�(A� B�B�B�8�;��F�B�A �A(�D`�
(A ABBE\�;���oF�B�B �L(�A0�A8�D�h�N�F�A�{
8A0A(B BBBBL\<���
F�B�B �B(�A0�A8�N��
8A0A(B BBBFH�<(���F�B�B �B(�A0�K8�DP�
8A0A(B BBBJt�<ܢ�\F�B�B �B(�A0�A8�Dp�xO�QxFpzxO�UxFp�xO�PxApf
8A0A(B BBBFHp=ĥ�<F�B�B �B(�A0�A8�DP�
8A0A(B BBBA�=����=���h�=���^O�G�I �D(�D0�
(A ABBEo
(A ABBKL(A� A�B�B�N0����xP>���{R�G�E �B(�A0�A8�LP�
8D�0A�(B� B�B�B�HL8A�0A�(B� B�B�B�JP������\�>���qF�B�L �B(�A0�A8�F���N�T�A�g
8A0A(B BBBF\,?Ȯ�[F�B�B �B(�A0�A8�G���R�K�A��
8A0A(B BBBGl�?ȴ�J�E�G �J(�A0�A8�GPK
8D�0A�(B� B�B�B�O|8A�0A�(B� B�B�B��?x��@t��L$@p���F�B�B �B(�A0�A8�G��
8A0A(B BBBK0t@��F�A�A �D@�
 AABK\�@ܹ��F�B�B �B(�A0�A8�D��
8A0A(B BBBAd�K�K�A�\A\��xF�B�B �B(�A0�A8�D�k�K�X�A�l
8A0A(B BBBI@hA|���F�B�B �A(�A0�DP

0A(A BBBK\�A��CF�B�B �B(�A0�A8�D��
8A0A(B BBBI��K�K�A�\B���F�B�B �B(�A0�A8�D��
8A0A(B BBBA��N�S�D�XlB8��wF�B�B �A(�K0�DP�
0D(A BBBJ`
0A(A BBBH�B\���BX���Bd��Cp��C|��,Cx��@Ct��TC���hC���|C����C����C����C����C����C����C���tD���N�G�H �B(�A0�I8�D�
8A0A(B BBBKd8A�0A�(B� B�B�B�J�������H�D����F�B�B �B(�A0�A8�D�{
8A0A(B BBBI8�D���F�B�A �A(�Dp{
(A ABBA8E����F�B�A �A(�Dp�
(A ABBAHDE����F�B�B �B(�A0�A8�G��
8A0A(B BBBC\�E4��\F�B�B �B(�A0�A8�G�v
8A0A(B BBBKd�K�W�A�L�E4��F�B�B �B(�A0�A8�G�+
8A0A(B BBBA0@F���MF�A�A �D@�
 AABGLtF����F�B�L �B(�A0�A8�D�h
8A0A(B BBBBL�FP��`F�B�B �B(�K0�A8�D��
8A0A(B BBBGDG`��F�D�A �3
ABGN
ABG[
CBHH\G����F�E�E �E(�D0�A8�MP
8D0A(B BBBI�Gl�� �Gh��E�N0^
AF �G���E�N0m
AGHP��H\��,Hh��@Ht��(TH���?F�D�D �mABL�H����F�G�B �A(�A0�DPoXH`hXAPc
0A(A BBBA�H4��kE�H
K$�H���EE�D�D qAA$I���EE�D�D qAA(@I���F�D�C ��ABlI���3E�i0�I���3F�A�A �D0�
 AABC(�I���?E�A�N`�
AAG �I���E�N0K
AA(JX���E�A�N`�
AAG(8J��ME�A�N@m
AAE8dJ@��_F�B�A �D(�D@G
(A ABBB\�Jd��F�B�B �B(�A0�A8�D��
8A0A(B BBBA�E�b�F�K��	 K��E�N 
AE 8Kl��TE�NP�
AG0\K���|F�K�A �Dpv
 AABH0�K��F�A�A �D@�
 AABG0�K@��F�A�A �G0x
 AABE\�K���F�B�B �A(�A0�DP�XB`IXAP�XT`NXAPP
0A(A BBBAPXL��GF�B�B �A(�A0�D`EhBpNhA`w
0A(A BBBKL�L�� F�B�B �A(�A0�D@�HBPFHA@w
0A(A BBBCP�Lx�GF�B�B �A(�A0�D`jhBpShA`�
0A(A BBBK PMt��E�I@
AB(tM 
�E�A�DP�
AAJ0�M��F�A�A �D0�
 AABG0�M��;F�E�A �Q��
 AABG(N��E�A�N@�
AACH4N��DF�B�E �B(�A0�A8�D`{
8A0A(B BBBF,�N��F�A�A ��
CBG0�ND��F�A�A �D0�
 AABG8�N�_F�B�A �D(�D@�
(A ABBC( O4�E�A�D0�
AAE0LO�F�A�A �D@�
 AABG0�O��HF�A�A �D@
 AABG0�O�3F�A�A �D0�
 AABG0�O�pF�A�A �D0�
 AABG0PH ��F�A�A �D@�
 AABFPP"�0dP"�cF�A�A �DPo
 AABA0�PL#�XF�A�A �DP�
 AABG@�Px$�F�B�B �A(�D0�DPG
0A(A BBBF Q�'�E�L0n
AH(4Q`(�F�K�H ��AB0`QD)�OF�A�A �NP�
 AABH8�Q`*�rF�B�A �A(�G�{
(A ABBF(�Q�,��F�A�C ��CB �QH-�E�N H
AD0 R�-�`I�A�G lAAA��H ��8TR�-��M�A�D �
I�H�GDAAJ��8�R�.�I�J�L qAAF��H ��oAA�R�.�% �R/��E�N0b
AJ S�/�E�G0~
AEh(S<0�F�B�B �E(�D0�D8�Dpm
8A0A(B BBBFxK�FxAp{xM�NxApT�S�5�F�B�B �B(�A0�A8�D`�hMpUhA`d
8A0A(B BBBG0�Sx;�F�A�A �D@q
 AABGD Td?�uz�D�A ��(R0F(A A
ABDY
�N�M�E\hT�@�	F�E�B �B(�K0�A8�G��
8A0A(B BBBI��K�O�A��T\I�
�TXI�
(�TTI�7F�L�K �CBXUhO�F�A�A �z
ABK^
ADMV
FBBI
CBB
CBALxUP�F�B�B �B(�D0�A8�D��
8A0A(B BBBA,�ULV�DF�D�F �F0] IAB �UlV�E�G�y
AJVW�K�~
G8V�W�|E�v(TVX�kE�A�N`
AAG@�VDY��F�B�B �K(�A0�Dp�
0A(A BBBE$�V�Z�\E�S
HT
LW<�V([� F�B�A �A(�G��
(A ABBD|,W]��F�B�A �A(�DP�Xl`IXFP�XW`FXAPPXH`QXAPX
(A ABBA�XT`MXAPT
(D ABBN0�WX`�F�O�C �Dp|
 AABD�WDa�CHc
ERPXta�F�D�B �B(�K0�A8�L�W
8A0A(B BBBI$TX0f�E�N0�
AF|X�f�E��8�X\g�F�G�N �A(�D��
(A ABBIL�X�h�MF�B�B �B(�A0�A8�D`K
8A0A(B BBBIL$Y�l�E�A�Dp�xF�D�R�WpW
AAFS
xI�A�A�B,tY�m�E�A�N�o
AAK(�Y o��E�A�G@�
AAC �Y�p�E�G0�
AD,�Y�r�*E�A�G� I� �
AAI@$Z�t�B�B�B �D(�K0�DP�
0A(A BBBEhZ�u�$|Z�u�E�P��
CA�Z�x��Z�x�(�Z�x�E�A�N@�
AAA(�Zy�3E�A�N@w
AAC,$[0z��E�A�G� I� �
AAGHT[�z�2F�B�B �B(�A0�A8�Q��
8A0A(B BBBG0�[�}�F�A�K �DP
 AABFX�[P�F�E�E �B(�D0�A8�G`�hNpExA�K`l
8A0A(B BBBE00\���9F�A�A �D09
 AABGd\���\|\���B�B�E �B(�D0�A8�M�	g
8A0A(B BBBB�	T�	U�	G�	0�\��
F�A�A �DP
 AABG0]��F�A�A �D0�
 AABG0D]`���F�A�A �D0�
 AABGDx]����F�B�A �A(�G� L�@I�@-
(A ABBG�]���E��p�]��F�B�B �B(�A0�A8�H��Q
G��N
8A0A(B BBBJhȊDЊB؊B�Q��XP^T���F�B�B �B(�A0�A8�G� L�@L�IE
8A0A(B BBBDH�^ئ��F�B�B �B(�A0�A8�Dp�
8D0A(B BBBB��^\���F�B�B �B(�D0�A8�G���D�X�A��
8A0A(B BBBBJ�B�Q�A� 
�D�NH
�H�E(�_ĭ�|A�C�GP�
AAD�_���_���_��H�_��$F�B�B �B(�A0�D8�DP�
8A0A(B BBBH04`���F�A�K �D@u
 AABA(h`����E�K�D@v
AAD0�`P��&F�A�A �D@1
 AABG(�`L��E�A�N0Y
AAA�`���)E�_LaԳ�B�B�B �A(�A0�Y
(A BBBHd
(A BBBE`a4��ta0���E���a��<�a��F�A�K �DPSXI`[XAP�
 AABG<�aP��wF�A�K �F`GhFpMhA`�
 AABIl$b���F�G�B �B(�A0�A8�N�m�\�K�A�e
8A0A(B BBBK�H�^�A�L�b���\F�B�B �B(�A0�A8�N�
8A0A(B BBBE0�b���F�A�A �DP1
 AABG c���=I�[D�H�L4<c���"E�A�NPnXF`RXAP�
AAD4tc���E�A�D0@8H@]8A0I
AAE8�ch��F�B�A �A(�DP_
(A ABBE4�c,���E�A�D0|8H@]8A0}
AAE4 d����E�A�D0|8H@]8A0}
AAELXd\��F�B�B �A(�A0�DPSXI``XAP�
0A(A BBBK4�d����E�A�D@~HHP]HA@{
AAEX�dT��gF�B�B �B(�A0�A8�G�V
8A0A(B BBBKu�H�`�A�L<eh���F�B�B �A(�A0�D`chEp]hA`�
0A(A BBBK@�e��F�A�A �GPD
 AABI/XH``XAP4�et���E�A�D0|8H@]8A0}
AAE4f���E�A�D0|8H@]8A0}
AAE4@f����E�A�D0|8H@]8A0}
AAELxf<��)F�B�B �A(�A0�DPOXI``XAP�
0A(A BBBK4�f��M�D�D �x
ABHm
ABHg���4g���E�A�NPlXO`PXAPu
AAI(Lgh���E�A�N@�
AAF0xg<��2F�A�A �N@�
 AABE8�gH��7F�B�D �H(�D@�
(A ABBA4�gL��E�A�D0|8H@]8A0u
AAE< h���F�A�A �NP^XP`PXAP�
 AABH0`hT��F�A�A �N@�
 AABHD�h���F�B�A �A(�DPKXH``XAP�
(A ABBE,�h��M
F�B�B �B(�A0�A8�G�A�H�]�A�O
8A0A(B BBBKO�M�W�A�X�M�X�A�X�M�X�B�X�P�W�B�X�P�W�B�X�Q�U�A�X�P�V�A�X�P�W�B�X�P�W�B�X�P�W�B�X�P�V�B�T�M�W�A�T�M�S�A�Lj8���F�D�B �G(�D0�C8�G�
8A0A(B BBBB\j��0pj��GF�A�A �D@!
 AABGD�j���F�B�A �A(�DPKXH``XAP�
(A ABBEl�j���F�B�B �B(�A0�A8�G�_�F�R�A���H�`�A�F
8A0A(B BBBAL\k��F�E�E �B(�F0�A8�G�
8A0A(B BBBD|�k��jF�B�B �B(�A0�K8�D�N�I�P�B���Z�M�A�t
8A0A(B BBBFQ�G�`�A�4,l���F�A�A �G� I� �
 AABAPdl0�F�B�B �B(�A0�A8�G� L�@I�@�
8A0A(B BBBEL�l��F�F�B �B(�A0�A8�D�
8A0A(B BBBA,m���E�N@^HOPRHA@[
AA(8ml�XE�A�G l
AAE@dm��B�B�B �A(�A0�DPA
0A(A BBBK@�m �B�B�B �A(�A0�DPQ
0A(A BBBK �mh"�=B�B�B �B(�A0�A8�G� L�#
8A0A(B BBBH�	�#M�#W�#A�#a�#M�#X�#A�#a�#M�#X�#B�#a�#P�#W�#B�#a�#P�#W�#B�#a�#Q�#U�#A�#a�#P�#V�#A�#a�#P�#W�#B�#a�#P�#W�#B�#a�#P�#W�#B�#a�#P�#V�#B�#a�#M�#W�#A�#a�#M�#S�#A�#o�3�$$o�3�HE�B @o�3�sE�Q�^
AK do05�sE�Q�^
AK�o�6��o�6��o�6��o�6�<�o�6��F�B�A �A(�G��
(A ABBG8pL9�YF�B�A �D(�Dp�
(A ABBETpp=�JE�@pp�=��p�=�*0�p�=�#F�A�A �D0�
 AABG0�p�>�F�A�A �D0�
 AABC0q�?�F�A�A �D0�
 AABC04q�@�F�A�A �D0�
 AABC0hq�A�F�A�A �D0�
 AABC0�qxB�F�A�A �D0�
 AABC0�qdC�F�A�A �D0�
 AABC0rPD�F�A�A �D0�
 AABC08r<E�F�A�A �D0�
 AABC0lr(F�F�A�A �D0�
 AABC0�rG�F�A�A �D0�
 AABC0�rH�F�A�A �D0�
 AABC0s�H�F�A�A �D0�
 AABC0<s�I�F�A�A �D0�
 AABC0ps�J�F�A�A �D0�
 AABC0�s�K�F�A�A �D0�
 AABC0�s�L�F�A�A �D0�
 AABC4t�M�F�A�A �D0�
 AABC$DtpN�E�G@l
AG\lthO�|!B�B�B �B(�A0�A8�G�6
8A0A(B BBBAU�K�b�D� �t�p�jE�K A
AF �t�p�rE�N A
AK0u0q�F�E�D �D0U
 AABD0Hu�q�F�H�D �D0U
 AABA<|u�q�F�A�A �D@IHIP`HA@h
 AABE<�u�r�F�A�A �D@r
 AABFmHHP`HA@H�uxs�}B�B�E �L(�A0�A8�I��
8A0A(B BBBJ`Hv�t�B�F�D �D(�F�z�F�R�A���S�F�B�X�a
(A ABBE�v�w��v�w��v�w�( �v�w�E�O@k
AAwhx�+HbL$w�x��F�F�E �E(�D0�A8�F��
8A0A(B BBBD$zRx��������,�=�
X�w�{�6E�N`lh~pFxF�F�F�F�F�U`KhBpFxE�D�E�e`c
AHXx�|�6E�N`lh~pFxF�F�F�F�F�U`KhBpFxE�D�E�e`c
AH@hx�}��F�B�B �A(�K0�FP�
0A(A BBBC�x8�=I�V�L�xX�gB�B�B �A(�A0�D`�hBpFhA`K
0A(A BBBFyx��l0y���F�E�B �B(�A0�C8�M��
8A0A(B BBBH��K�f�A��G�^�D�d�y���`	F�E�B �B(�E0�A8�D�
8A0A(B BBBE�
8J0A(B BBBIz���HB I@$z����A�C�NPXF`RXAPNXH`dXDPT
AAAhz<��E���z���L�z���aF�B�B �B(�A0�A8�G��
8A0A(B BBBA,�zܔ��E�N@^HXPRHA@N
AE{|��L,{x���F�B�B �B(�A0�K8�D��
8A0A(B BBBA|{��UD K
A�{\��lD b
A�{���,A�jX�{ė�B�B�A �A(�G0�
(D ABBC\
(A DBBKO(D ABB,|���@|���8T|���B�B�G �F(�D0�L
(A BBBHH�|T��B�B�B �B(�D0�A8�D`4
8A0A(B BBBAH�|Ț�}B�J�E �B(�A0�C8�G��
8A0A(B BBBC@(}���B�G�B �D(�A0�F@T
0A(A BBBFl}X��	E��}L���0�}��PF�A�A �G0�
 AABD �}4��BE�N0p
AD8�}`��F�G�A �D(�GP�
(A ABBGP0~D��PF�B�B �B(�A0�A8�J�7
8A0A(B BBBG(�~@��fE�L�D0G
CAA�~����~���-H` �~���`E�O E
AAH��B�B�B �B(�A0�D8�F�^
8A0A(B BBBE LX��VE�G C
AA`p���2B�E�B �E(�A0�D8�DP>
8A0A(B BBBA�8H0A(B BBB8�p���E�C�G���H�R�D�b
AAA���H{(����6<����.(P�Կ�oE�]
FT
LJ
NJ|���;dR��@��6��l��kq�T�L����F�B�B �B(�A0�C8�D�^
8A0A(B BBBD(�@���L�v
F[
Ez
N\@���� TKX����#OKp���K��
A�����K��
A��l���E��0ā@��F�A�A �G0z
 AABC(�����}E�K�F0I
AAG$���L8����F�I�L �B(�A0�A8�G�8
8A0A(B BBBH(�����E�K�F0c
AAE0����]I�A�G bAAK��H ���<��5I�cD��`��5I�cD�< ����I�A�D v
AAJOAAG��H ��(`����E�A�N@l
AAF4��X��xE�A�D v
AAFO
AAG4��xE�A�D v
AAFO
AAG0�����uB�D�D �D0]
 AABAH0�4��B�E�D �D(�D0S
(C ABBBD(F ABB\|�h��nF�B�B �B(�K0�A8�G�a�X�R�A�3
8A0A(B BBBH\܄x���F�B�B �B(�A0�A8�D�u�B�^�A�q
8A0A(B BBBA0<���}F�A�A �D@�
 AABFp�T����`��E�Q8��`��4F�A�A �G� I� c
 AABA0�d��zF�A�A �G��
 AABIH����F�B�A �A(�G� L�@L�`I�`�
(A ABBGH`���4F�B�A �A(�G� L�@I�@-
(A ABBG(�����E�A�N@�
AAD\؆���F�B�B �B(�A0�D8�G���D�l�A�*
8A0A(B BBBFh8�|��F�D�B �B(�A0�I8�M�}�M�F�F�F�F�U��
8A0A(B BBBJ��0��5Hc ��X��H �
DP
H0���F�A�A �D0�
 AABG0�@��F�A�A �D0�
 AABG0H�,�F�A�A �D0�
 AABG8|��)F�B�A �A(�DP�
(A ABBE0���F�A�A �D0�
 AABC0���F�A�A �D0�
 AABC0 ���F�A�A �D0�
 AABC0T���F�A�A �D0�
 AABC0��|�F�A�A �D0�
 AABC0��X	�F�A�A �D0�
 AABC0�4
�F�A�A �D@
 AABG0$���F�A�A �D0�
 AABC0X���F�A�A �D0�
 AABC0��x
�F�A�A �D0�
 AABC0��T�F�A�A �D0�
 AABC0�0�F�A�A �D0�
 AABC0(��F�A�A �D0�
 AABC\��� p���pE�N V
AA ��@�lE�N R
AA ����`E�N F
AA(܋��E�A�N`�
AAF ���]E�N C
AA0,���F�A�A �D0�
 AABC0`���F�A�A �D0�
 AABC0�����F�A�A �GP�
 AABA0Ȍ<�F�A�A �D0�
 AABC0���*F�A�A �D@�
 AABC00��F�A�A �D@
 AABG0d���F�A�A �D0�
 AABK0����F�A�A �D0�
 AABK̍x��Yd� �\�R�G �A(�A0�y
(A BBBI
(A BBBD�����F0�����L��!�H`�
A4h�\"��F�A�A �D��
 AABB0��$�#F�A�A �D0�
 AABG0Ԏ%�#F�A�A �D0�
 AABG0�&�#F�A�A �D0�
 AABG0<�'�=F�A�A �D0�
 AABG0p�(�=F�A�A �D0�
 AABG0�� )�=F�A�A �D0�
 AABG0؏,*�-F�A�A �D`1
 AABGH�(-�}F�I�B �E(�D0�A8�Dp�
8A0A(B BBBI8X�\0�F�B�A �A(�G`D
(A ABBE$���5�kE�N0Q
AA��6�JA�HLؐL6�B�B�B �B(�A0�A8�D�z
8A0A(B BBBA(��=�X<��=�P��=�(Hd�>�F�B�E �J(�F0�A8�IPz
8J0A(B BBBL0��D?��F�I�A �K0�
 AABI0��?�:F�A�A �Q��
 AABGP��@�F�B�B �B(�K0�A8�G�
Q
8A0A(B BBBFLl�XB�F�B�B �B(�A0�A8�D�7
8A0A(B BBBE,���P�A�G�Q�
AAH��R���R�$��R�bE�Q�5
AD<<��T�B�B�E �D(�C0�F
(A BBBC�|�XU�N�G�B �B(�A0�A8�G��
8A0A(B BBBD�8A�0A�(B� B�B�B�H��������
8A�0A�(B� B�B�B�EL��h��
F�B�B �B(�A0�A8�G��
8A0A(B BBBKh�lv�$|��v�E�a
Jp
H]��Pw� HW��Xw� HWԔ`w�-E�U
FL�pw�-E�U
FL��w�-E�V
EL4��w�=E�h
CLT��w� HWl��w�-E�U
FL(���w�DA�h
GD
DD
AFL���w�F�J�D �D(�G@
(A ABBEl
(C ABBAH��y�
F�B�B �B(�A0�A8�Dp�
8A0A(B BBBIT�`|� HWl�h|�Wa�q����|�<���}�; ���E�M ~
AG Ԗp�E�M ~
AG(�����E�D�D@�
AAH8$����#F�B�A �D(�FP�
(A ABBE`�t��t���������&����������	`ȗ���yB�F�B �E(�K0�D8�G@W
8A0A(B BBBJ[
8A0A(B BBBK\,�Ȃ�B�H�E �E(�A0�A8�D��
8A0A(B BBBHc�H�R�A�L��(���B�B�B �B(�A0�A8�D��
8A0A(B BBBILܘ����B�B�B �B(�A0�A8�D��
8A0A(B BBBI,�X��0E�jH�l��HR`�t��t������|��L�����F�B�B �E(�G0�C8�G�@
8A0A(B BBBFH���B�B�B �B(�A0�A8�D`�
8A0A(B BBBI8�<��L�8��`�4��t�0��H��,��F�B�B �B(�A0�A8�D`s
8A0A(B BBBA4Ԛ��F�A�A �N@�
 AABBH�X��vB�E�H �E(�D0�D8�D`�
8D0A(B BBBH@X�����B�B�B �A(�A0�DP�
0A(A BBBC��8���E������FE�@8ԛ ��F�B�A �A(�D@�
(A ABBE����}E�w(,���=E�A�N0~
AAD0X�����F�A�A �D@�
 AABGd�����[F�E�B �E(�A0�D8�G��
8A0A(B BBBA�
8G0A(B BBBJ@�����B�B�B �A(�A0�DP�
0A(A BBBK8�,��L�(��`�$��\t� ��F�L�B �B(�A0�A8�D�B�F�R�A�n
8A0A(B BBBAdԝ����F�B�B �B(�A0�A8�D��
8D0F(B BBBK�
8A0A(B BBBCH<���F�J�B �B(�A0�I8�D��
8A0A(B BBBJ8��\��.F�B�A �A(�DPO
(A ABBELĞP���F�B�E �E(�A0�A8�G�
8A0A(B BBBG@���F�B�B �A(�A0�DP�
0A(A BBBCHX����F�B�B �B(�A0�A8�D`�
8A0A(B BBBA$�����AE�D�H jDA8̟���9F�B�A �A(�D@�
(A ABBA$����AE�D�H jDA80����9F�B�A �A(�D@�
(A ABBAHl����NF�B�E �B(�D0�A8�G`�
8A0A(B BBBB �����E�N@�
AAܠh��x0����3F�A�A �D0�
 AABG0$�����F�A�A �N`!
 AABEHX�����F�B�E �E(�G0�D8�GP�
8D0A(B BBBG�� ��D��\��JD̡���B�E�D �D(�N`phFpRhA`�
(A ABBB���(����8<���F�B�A �A(�DP_
(A ABBELx�\��F�B�B �B(�A0�A8�D�;
8A0A(B BBBILȢ,��!F�B�B �B(�A0�A8�D��
8A0A(B BBBIH���.F�B�B �B(�A0�A8�N��
8A0A(B BBBGHd����gF�B�B �B(�K0�A8�DpZ
8A0A(B BBBHH����F�B�B �B(�A0�K8�Dpx
8A0A(B BBBB0��X��F�A�A �D@
 AABGL0�D��F�B�B �B(�A0�A8�D�{
8A0A(B BBBI8��t��'F�B�A �A(�DP�
(A ABBEL��h���F�B�B �B(�A0�A8�G��
8A0A(B BBBC0���F�A�A �D0!
 AABG0@���F�A�A �D0�
 AABC0t���'F�A�A �D@�
 AABK0����SF�A�A �D0�
 AABG0ܥ��F�A�A �D0�
 AABG�$�K��
Al,����F�B�B �B(�A0�A8�G�~
8A0A(B BBBC�E�e�A�z�K�^�A�0��8�}F�A�A �D0�
 AABG8��F�B�A �A(�DP
(A ABBE4�H�:E�D�G �
AABM
AAA0D�P�#F�A�A �D0�
 AABCHx�L�F�E�B �B(�A0�D8�D��
8A0A(B BBBB0ħ�#F�A�A �D0�
 AABCL����F�B�E �E(�D0�A8�M�
8A0A(B BBBF0H�\��F�A�A �D@�
 AABG`|�!��F�B�B �E(�A0�A8�DP�
8J0D(B BBBM�
8A0A(B BBBA��"�0��"�mF�A�A �D0�
 AABGH(��#�F�E�B �E(�D0�A8�LPk
8D0A(B BBBEt�0&�HEB IH��0&�QB�B�B �B(�A0�A8�D�D
8A0A(B BBBD|�D.�	F�B�B �B(�A0�A8�G��
8D0A(B BBBH�
8C0A(B BBBH
8E0D(B BBBI�`��6�AB�E�E �B(�D0�D8�G��
8A0A(B BBBD��E�B�D�^��B�U�D�/�B�I�A�S�O�B�A�P�L���;��B�B�B �B(�A0�A8�G�
8A0A(B BBBFL�B�HB B(D0Il�B���B���B���B�0��B�SF�A�A �D0�
 AABGH�4D�F�D�B �B(�D0�A8�DpY
8A0A(B BBBF0<��H��F�A�A �DP�
 AABGHp��J�;F�B�B �B(�A0�A8�FPu
8C0A(B BBBKL���K�]F�E�E �B(�A0�D8�D��
8D0A(B BBBD@����KF�B�B �A(�D0�DPD
0A(A BBBAP���@d���F�B�B �A(�A0�DPu
0A(A BBBCL��l��kF�B�B �B(�A0�A8�G�
^
8A0A(B BBBA�����\����TF�B�A �A(�G���E�\�A�P�K�O�A�[
(A ABBHl����L�����F�B�B �B(�A0�A8�D�
8A0A(B BBBIL��mF�B�B �B(�A0�A8�D��
8A0A(B BBBKL ���F�B�A �A(�D@�
(A ABBBQ
(A ABBI8p���YF�B�A �A(�D@�
(A ABBA8�����F�B�A �A(�D@
(A ABBA\�l��YF�B�B �B(�K0�A8�G�a�X�R�A��
8A0A(B BBBH8H�l��TF�L�A �A(�DP�
(A ABBC0�����MF�K�A �D@�
 AABA(�����E�A�N@�
AAA<�@��aE�C�N`lhFpFxF�U`�
AAJL$�p��F�B�B �E(�A0�A8�G��
8A0A(B BBBELt����F�B�E �B(�D0�A8�J�t
8A0A(B BBBD�ı ���A�F�D@tHbPMHB@]HbPMHA@]HbPMHA@]HbPNHA@]HbPNHB@]HbPMHB@]HbPMHA@]HbPMHA@]HbPNHA@]HbPNHB@]HbPMHB@]HbPMHA@]HbPMHA@]HbPNHA@]HbPNHB@]HbPMHB@]HbPMHA@]HbPMHA@]HbPNHA@]HbPNHB@]HbPMHB@]HbPMHA@]HbPMHA@]HbPNHA@]HbPNHB@]HbPMHB@]HbPMHA@]HbPMHA@]HbPNHA@]HbPNHB@]HbPMHB@]HbPMHA@YHbPMHA@i
AAA��8��E�����VHz
FԳ`�,E�f�t�-(���E�A�NP�
AAA(0��UI�A�G wAAF��$\�H�~E�N0d
AA0����B�A�D �G0�
 AABH ��|�E�D t
AB0ܴX�F�A�A �D@�
 AABG8�4
�F�B�A �A(�GP�
(A ABBF0L���F�A�A �D0�
 AABA0����F�A�A �DP�
 AABK����ȵ��ܵ�����������,���@�
� T�
�uE�D 4
AB x�l�E�D p
AF<�����F�B�A �A(�D`
(A ABBF4ܶ��]F�A�K �D`�
 AABC4���wB�B�D �A(�D0`(D ABBL���rE�h$h�\�JE�D�J qDA����E�LH����F�B�B �J(�A0�A8�Lp�
8A0A(B BBBD����E�L0���`F�A�K �D@�
 AABG<H��F�E�N �A(�I0��
(D BBBC ����sE�N0Y
AAH��H��F�E�B �B(�A0�A8�DPo
8A0A(B BBBB(����{E�A�N@_
AAA,$�@ ��F�L�D ��
ABJ T�� �sE�N0Y
AAHx�L!��F�B�B �E(�A0�A8�D@�
8A0A(B BBBJ(�!�{E�A�N@_
AAAH�4"��F�B�B �B(�K0�A8�D��
8A0A(B BBBIp<��%�+B�E�B �E(�A0�D8�G�s�U�L�B�n
8A0A(B BBBH5�B�G�A�l��$Q�!B�B�B �B(�D0�A8�J�T
8A0A(B BBBK��P�i�A�Q�X�c�A�0 ��q�F�A�D �F@�
 AABD8T��u�gF�B�D �D(�DPq
(A ABBE,���v�F�D�D �D
CBI4��dw�yF�K�D �B
DBKIAB8���w�F�B�A �D(�FP�
(A ABBB84��{�_F�B�D �D(�DPq
(A ABBE,p��|��F�D�D ��
CBH4��t}�yF�K�D �B
DBKIAB`ؼ�}��F�B�B �B(�A0�A8�G�|
8A0A(B BBBE��\�B�F�W�L<�(��PF�B�B �E(�A0�A8�D��
8A0A(B BBBE`��(��F�B�B �E(�D0�A8�D���O�Q�I�M�l
8A0A(B BBBG�T��xH0j
A(�����E�O�DP�
AAF8�\��"E�\(T�p���E�E�G��
AAB(��$��E�A�Dpa
AAC ����rE�N I
AC оt��rE�N I
ACD���B�J�B �D(�A0�N��
0A(A BBBAH<�h��8F�B�B �B(�A0�A8�G@�
8D0A(B BBBFd��\��Yb�B�B �B(�A0�A8�GP������PP�������
8A0A(B BBBJ8�T��E�K�FP`XF`RXAP�
AAF\,����"F�B�D �C(�D0x
(C ABBEc
(C ABBEg
(C ABBA��x���L����,��&E�`�@��(E�b�T��	H�P���F�B�B �B(�A0�D8�D�C
8A0A(B BBBF@@���(F�B�B �A(�A0�DP�
0A(A BBBK|����X�F�F �B(�A0�A8�D`
8A0A(B BBBEe
8A0A(B BBBA�������E`������H���KB�E�H �J(�D0�D8�DP

8C0A(B BBBApP���:F�A�D �DpF
 AABGUxM�RxAp�xP�QxBpZxR�F�F�UpwxA�UxAp(��з�yE�D�D0[
JAA��$��OK�>
A �T��E�G X
AK04�к�_A�E�D f
DAKDLJh����HS����"HU������������HP����6E�`
KEH��<��F�E�D �I(�D@SHEP[HA@T
(A ABBATD����rF�G�B �B(�A0�A8�DP�XN`PXAPi
8A0A(B BBBH|��ȼ�6F�B�E �E(�A0�A8�Gp
8A0A(B BBBHK
8A0A(B BBBKL
8A0A(B BBBJH�X��@F�B�H �E(�A0�D8�G`

8D0A(B BBBHLh�L��F�E�E �B(�D0�A8�G��
8A0A(B BBBF�����$�����YHP���HM��� ��WE�x
C4�P�
$H�L�YE�D�D IAA0p���F�A�A �D@v
 AABJ0���7F�D�A �G��
 AABF8���B�E�K �I(�G��
(A ABBJ����B�B�E �E(�A0�A8�G���H�O�B�N�o�J�Q�A�X�K�T�B�y
8A0A(B BBBFF�K�P�B���M�Q�A�_�J�Q�A�h����F�E�E �H(�D0�D8�G�x�F�P�A���M�S�A�{
8A0A(B BBBDD8����F�I�E �G�^�B�K�A�
 AABBD��T��F�I�E �G�^�B�K�A�
 AABB\�����F�J�D �B(�A0�D8�G�^�B�K�A�V
8A0A(B BBBB\(�l�?F�E�H �B(�D0�D8�G���J�Q�A��
8A0A(B BBBBd��L�6F�B�B �D(�A0�G�f�J�K�A�s
0A(A BBBC��A�W�A����$!�	F�E�H �B(�D0�K8�J��
8A0A(B BBBEg�I�Q�A���M�S�A���H�S�B�N�>�I�T�B���L�M�A���*����*�
l���*�VB�B�E �E(�A0�A8�G��
8A0A(B BBBE�M�N�A���I�Q�A�<4�p0�-F�B�B �B(�A0�A8�G�Y�L�I�A�U���J�Q�B��
8A0A(B BBBGw�J�J�G�E�D�Z�`�V�I�G�E�B�R�\�J�O�A�5�Q�Y�B�4�I�P�A���c�N�B�v�O�[�A���O�\�A���J�P�A��
�I�Y�B�t��\�HBB I���\����\����\����\�
���\�E�Q��\�HO8��\��F�B�A �A(�D0x
(D ABBAHT��]�"B�B�O �E(�D0�A8�DP�
8A0A(B BBBBH��t^��F�B�B �E(�D0�I8�T��
8A0A(B BBBE4��e�
E�A�F ~
AAD�MA$��r�OHBD��s�_X��s�A�
H(x��t�E�D�D0�
AAA4��pu�O�D�D ��ABE���A ������u�T$��Dv�}E�D�D mAAl��v�F�E�E �B(�D0�D8�D�P
8A0A(B BBBH��N�K�A�<
�B�U�A�p��܏�WB�B�B �E(�A0�D8�G���N�I�A��
8A0A(B BBBE��B�K�A�4��Ȕ�F�A�A �D@!
 AABGL4�P��	B�B�B �B(�A0�A8�G��
8A0A(B BBBA��������0H��(��F�B�E �J(�F0�A8�IPz
8J0A(B BBBL(��l���E�D�G0�
AAK0$�@��:F�A�A �Q��
 AABGPX�L��F�B�B �B(�K0�A8�G�
Q
8A0A(B BBBF���������������4�����E�A�DP\XB`FXAPl
AAA\ �4��lF�B�E �E(�D0�D8�G���B�Q�A�Q
8A0A(B BBBG\��D��F�B�B �B(�A0�A8�D�8�B�K�A��
8A0A(B BBBG@�����>B�B�N �D(�D0�D`�
0A(A BBBB($����E�H�F {
AAHP���8E�r(l���RE�A�N@(
AAB��L����X��@��d���F�A�A �NPAXG`]XAP4
 AABA@����F�B�B �A(�A0�DP�
0A(A BBBAHH����F�B�A �A(�NP�XM`UXAPd
(A ABBD8����F�F�H �C(�G0z
(E DBBKL����F�F�H �D(�F0�
(F ABBFB
(A ABBA  �$��E�N0�
AA$D����E�N0�
AAl�H����D����P����\����h��-4�����E�D�D E
AALT
AAJH����F�B�E �B(�D0�D8�DPh
8A0A(B BBBC`T�P��	X�L�B �B(�D0�A8�G�d8A0A(B BBBF������H�������(�����A�J�DPz
AAEL��p��F�B�B �B(�A0�A8�D�
8C0A(B BBBEH4����F�B�B �B(�A0�A8�DPh
8F0A(B BBBGH����F�E�B �B(�A0�A8�D@c
8F0A(B BBBIH��X��F�E�B �B(�A0�A8�D@c
8F0A(B BBBIH����F�E�B �B(�A0�A8�D@c
8F0A(B BBBIdd���?F�B�B �E(�A0�A8�Dph
8A0A(B BBBI�
8A0A(B BBBIX�����fF�B�B �B(�A0�A8��
0D(B BBBFd
0A(B LBBI(����5<���5P�D��5d�p��QE�j
IT�����0AAU(�����A�I�DP�
AAH0��X��?B�A�D �GP�
 AABF �d��E�M
NCH$����F�J�B �E(�A0�A8�D��
8A0A(B BBBCLp����VF�B�E �E(�D0�A8�D��
8A0A(B BBBHL�����B�B�E �B(�A0�A8�J�e
8A0A(B BBBJ`����'F�B�E �B(�A0�D8�D`[hRpIhB`b
8A0A(B BBBDohOpKhA`t�P��DE�z
AC�����/E�i0�����F�A�C �D0
 AABK�����,Hc(���E�A�N@�
AAA(,����E�A�N0�
AAAHX�,��F�B�B �B(�A0�A8�N`�
8A0A(B BBBG�����F�B�B �B(�A0�A8�G�e�I�I�I�[��
8A0A(B BBBG��Q�H�A��W�U�A�4,�(�A�A�D0w
DAFI8K@[8A0d���1Q�UJ�\����eF�B�B �B(�A0�A8�G�w�B�P�A�d
8A0A(B BBBCT����(B�B�G �E(�A0�A8�G`xhIp]hA`�
8A0A(B BBBA\8��	�B�B�B �B(�H0�A8�L�t�G�[�A�{
8A0A(B BBBGH���
�B�B�B �B(�A0�A8�J��
8A0A(B BBBEd��P�B�B�N �E(�D0�A8�Dp^x[�RxApUxH�^xApF
8A0A(B BBBH0L���F�A�A �Q��
 AABAd��t��F�F�A �A(�G�e�[�F�F�U��\�F�A�X�_
(A ABBJP�����F�A�A �G`ehFpRhA`�hQpIxB�N`P
 AABEL<�h�F�E�A �NpqxG�]xAp�xI�FxAp�
 AABF<��8��F�A�A �N@xHIP[HA@F
 AABAT����F�A�A �Q�H�F�R�A�Z�G�`�A�f
 AABJL$��F�A�A �NPaXG`^XBPmXA`PXAPr
 AABELt���F�B�E �H(�A0�N`XhGp^hA`�
0A(A BBBIX�� �nF�B�B �A(�K0�K`UhFp[hA`]hFp^hA`�
0A(A BBBA@ �4�F�A�A �D0D8H@`8A0�
 AABK@d����F�B�B �A(�A0�DP�
0A(A BBBE@�� ��F�B�B �A(�A0�DP�
0A(A BBBHl��� �F�B�L �B(�A0�A8�G�r�O�R�A��
8A0A(B BBBD��I�]�A�0\�&��F�A�A �N0q
 AABE@���&�xF�H�C �N`YhdpFxF�U`U
 AABJ8���'�rF�B�A �A(�NP�
(A ABBJ0�4)�F�A�K �D0o
 AABG(D��)�E�A�N0e
AAEp�4*���@*�(��L*��E�A�N0�
AAA<��+�!F�A�A �NPjXI`[XAPr
 AABAD�,�rF�B�A �A(�DPKXH`]XAPz
(A ABBAPL�8-�F�B�B �A(�A0�DpPxH�`xAp�
0A(A BBBKD���/�F�B�A �A(�DPr
(A ABBJiXH``XAPX���0�F�B�B �D(�A0�N`RhGp]hA`ghIp^hA`|
0A(A BBBI<D�P2�F�A�K �D0�
 AABH�8H@]8A0<���3��F�A�A �N@N
 AABHQHIP[HA@`��04�j
F�B�B �B(�A0�A8�G���F�G�A�X�
8A0A(B BBBF`(�<A�F�F�B �A(�A0�Npox]�RxApAxG�H�B�Ipg
0A(A BBBI���B�HK���B�0HcL���B�F�B�B �B(�A0�A8�G�t
8A0A(B BBBE,�xE�E�A�N0\
AAF<��E�
E��
X��S��l��W����W�	���W����W����W�{E�u��[���[��[�	(�[�>E�A�D *DA@�$\�dHW$X�|\�:A�I�D fDA(���\�FB�A�D �{AB(���\�ZE�A�D@
AAE8���]�F�B�A �A(�DP7
(A ABBE8�Pb��B�D�D �I
AFFA
AJD(P��b��E�A�D@�
AAE(|��c��E�A�D@�
AAE(��\d��E�A�D@�
AAE(��e��E�A�D@�
AAE(��e��E�A�D@�
AAE(,�xf��E�A�D@�
AAE(X�,g��E�A�D@�
AAE(���g��E�A�D@�
AAE(���h��E�A�D@�
AAE@��Hi�6F�B�B �A(�A0�DP�
0A(A BBBK8 �Dk�F�G�D �A(�D`�
(A ABBG \��m�E�D �
AF0��Dn�PF�A�A �D0�
 AABG8��`o�F�B�A �A(�DP�
(A ABBE ���p�E�D �
AF �pq�E�D �
AF 8��q�E�D �
AF \��r��E�D �
AFL��4s�TB�E�B �B(�A0�A8�J�j
8A0A(B BBBEL��Du��B�B�B �A(�A0�DPl
0A(A BBBHyXN`IXAP8 ��u�QB�B�A �K(�FP
(A ABBB\�x�p�x���x�	`���w�F�E�B �B(�A0�D8�D@�
8D0A(E BBBOJ
8D0A(B BBBI0��8y�DF�A�A �D@�
 AABGH0�Tz�8F�B�H �H(�A0�A8�GP-
8D0A(B BBBEH|�H}�B�E�I �C(�D0Y
(D ABBGO(D ABB0���}�F�A�A �DP�
 AABA0��~�F�A�A �DP�
 AABAH0��~�F�B�B �B(�A0�A8�D��
8A0A(B BBBA@|�H��F�B�B �A(�A0�Dp�
0A(A BBBAH����F�E�E �E(�D0�C8�Dp�
8A0A(B BBBA0����F�A�A �DP�
 AABA(@�$��E�A�DP�
AAA4l����F�A�A �D�l
 AABD0��p��DF�A�A �D@�
 AABG\�����#F�B�B �B(�A0�A8�D�b�P�Z�A�F
8A0A(B BBBA08�\��2F�A�A �DP�
 AABI$l�h��DQ�A�G hAA�����!�����!��Ȍ�"4����`B�A�D �C
ABCLABL���F�B�E �B(�D0�D8�D��
8A0A(B BBBA X�\���E�J R
AF<|���Q�B�H �D(�A0�d�(A� B�E�B�@��h��@F�B�B �A(�D0�GPS
0A(A BBBG(�d��E�A�G0s
AAF(,�ȓ�E�A�G0L
AAEHX�L��F�B�B �B(�A0�A8�D@
8D0A(B BBBE4�����,E�I�D �
DAFU
DAF�����
�����HH z
A����	 ����	4����
H����	\����	p����	�����	�����	�����	�����	����	����	�����.E�h����,����@����T����h����|��������������SE�I�������lK�[
A��ܗ�lK�[
A<�0��F�B�A �A(�G� I� �
(A ABBBT����Bd]0l����F�D�D �D0^
 AABD4��$��eF�B�A �A(�D0P(A ABB�\��/Hb`�t��F�B�E �E(�H0�A8�DP�
8A0A(B BBBGD
8A0A(B BBBAPT�0��F�B�B �B(�A0�A8�G� L�@I�A�
8A0A(B BBBE�����2Hd(��$��1E�C
B�E�G��
I<�8���F�B�A �A(�G� I� �
(A ABBJ@,�إ�F�E�B �D(�D0�DPn
0A(A BBBAp�4��@��0��F�B�B �D(�A0�DP�
0A(A BBBA8����F�B�D �D(�DP�
(A ABBC8�0��F�B�D �D(�DP�
(A ABBC8@����F�B�D �D(�DP�
(A ABBCH|�8���F�B�E �E(�D0�D8�D`�
8A0A(B BBBF8�̨�F�E�D �A(�D��
(A ABBI8����F�B�D �D(�DP�
(A ABBC8@���F�E�D �A(�D`�
(A ABBF8|����F�B�D �D(�DP�
(A ABBF8��|��F�B�D �D(�DP�
(A ABBA0���F�D�A �D@|
 AABA8(�|��F�B�D �D(�DP�
(A ABBC0d���F�D�A �D@|
 AABA0��|��F�D�A �D@�
 AABDH����gF�B�B �B(�A0�D8�G@k
8D0A(B BBBH8���F�A�A �G� I� 
 AABAT���h���	 |����E�J��
AA��Ա�	��б��̱�& ���A�G��
AJ�IJ�?Hi
G���IPYT4� ���F�B�E �E(�D0�A8�GPfXJ`IXCPD
8A0A(B BBBH�����,E�_
AF�������ij�`E�v
E_ ����J�k
K��(����Hy
OX
Hp
HP0����#HZ8H����mF�B�A �A(�DP�
(A ABBK�����
F�B�K �B(�D0�A8�F�V
8A0A(B BBBH��D�]�A��E�S�B�v�_�F�A�2�E�O�B���E�W�D�j�O�[�B�8��	�L��&F�B�K �G(�A0�A8�G�Y�J�L�B�N���k�F�A�C
8A0A(B BBBD��G�W�A�{�G�`�B�����K��
A0$��E�A�G� L�!5
AAH4��K��
A0P���F�D�C �J��
 AABA�p��	�l��]E�W0����F�A�D �D0C
 AABJ(���wE�K�N G
AAI`��,(\��'E�A�G�h
AAIX\��(H_pt��,����TE�A�G�
�
AAE,�����E�A�G��
AAI�p��0�l��TE�D�H n
CAEDFA@,���vF�B�E �D(�A0�G�b
0A(A BBBEp�������a������HK$�����E�C
V��9
I$�T��sE�C
H�G
I���BE�e
FM,(���3F�A�A ��
ABD0X����F�A�A �G��
 AABD8�����B�B�D �D(�D@w
(A ABBC���hL�x���F�B�B �E(�I0�C8�G�

8A0A(B BBBG,��Z@d���K��
A@\��UF�H�L �D(�A0�G@�
0A(A BBBD\�4��VB�H�E �B(�D0�A8�G�|
8A0A(B BBBE��K�\�B� 4�A�M0H
AI($���E�D�J��
AAA(Pd�jE�J�M0F
AAA|��OH A
A\���bB�E�E �E(�A0�A8�J��
8A0A(B BBBH�I�T�A�(���E�H�M@b
AAB(L�K��
AD���K��
Add��F�B�B �B(�A0�A8�G� L�@L�BG�BK�BV�BA�Bl
8A0A(B BBBD���@���~E�A�D W
AAE~
AAHDHA$0��@8��F�B�A �A(�G� I� 8
(A ABBH|H!�
T�D!�F�B�B �B(�A0�A8�H��Q
D���
8A0A(B BBBKH��$�b�B�B �E(�G0�A8�D@�
8A0A(B BBBE4	P%�DH	L%�3B�B�B �A(�A0�G� I� �
0A(A BBBD�	D&�#\�	`&�/F�B�B �B(�A0�A8�J�
8A0A(B BBBHj�Q�J�A�4
0)�RB�E�D �D(�F0s(D ABBL<
X)�F�B�B �B(�A0�A8�G� L�"�
8A0A(B BBBA�
(,�H�
4,�F�A�D �GP�
 AABD�XN`]XAP~XO`MXAP�
.�AH0s
A<.�8.� 0�.�T�l
H�G�T�/�]E�S`p40��
F�B�B �B(�A0�A8�G� L�#��#P�#X�#A�#�
8A0A(B BBBB��:�KE�E��:�JH};�YH C
E($`;�E�D�GP�
AAA(P�;�E�D�GP�
AAA,|h<�lE�D�G0P
AAA��<�$��<�@A�A�D wAA$��<�6E�G�G ]DA
�<�gMU(
,=�$HW@
D=�PE�J8\
x=�F�A�A ��
ABBA
HKLH�
\>�F�B�A �A(�D0�
(D ABBHP(D ABB4�
�>�F�E�A �A(�D0h(A ABBH(?��F�B�B �B(�A0�C8�D@Y
8D0A(B BBBF0h�?�E�A�D �
AAKDAAH��@�F�I�B �B(�A0�A8�D`
8A0A(B BBBK4��C�F�A�A �G�"
 AABK 4E�>t4`E�=	F�B�B �E(�A0�A8�G�X
8A0A(B BBBF
�\�B�G�R�<�\�B�B�V�(�(N�E�C�GPU
AAJ0��N��F�A�A �G��
 AABF(P�VhN Y (lP�7K�]
HCA�L�P�A`�P�;t�P�;�Q�;�HQ�1XR�pQ�_a�q
FC(��Q�E�A�D0t
AAH$R�0R�(<R�<HR� PTR�PE�v
EOt�R�*E�Z
IA��R�HN4��R�B�D�C �v
ABFGABL�S�`B�B�E �A(�A0��
(A BBBA�(H BBBL4T�B�B�E �D(�C0�_
(A BBBJy(A BBB4��T�B�B�A �A(�G0w(C ABB8�(U�^B�B�A �D(�D0B
(A ABBAzRx�0����$0��
,,V�wA�G t(R0M(A T
AA8\hV�B�F�A �A
ABCa
ABDD��V�B�B�B �E(�D0�C8�HPi8D0A(B BBB�W�,A�j`�(W��B�B�B �B(�A0�A8�GP�
8A0A(B BBBD�
8A0A(B BBBID`�X�kB�E�B �B(�D0�G8�D@F8A0A(B BBB��X�H���Y�8E�nd��Y�F�B�B �B(�A0�A8�G� L�+1
8A0A(B BBBDk�+_�+N�+A�+<D`u��F�M�A �D@+
 AABI~HbPMHA@�w�3Hj�8w�HR�@w�v$��w�E�}
FL
AD� x�B�E�E �E(�A0�A8�G`�8A0A(B BBBL<�x�F�B�B �B(�A0�A8�G�
8A0A(B BBBA`���6F�J�B �D(�A0�m8N@r8A0C
(C BBBG\8P@f8C0A(A BBBp�Ą�B�B�B �B(�D0�A8�Dp�xq�FxApOxJ�XxBpSxg�pxAph
8A0A(B BBBC\d��B�B�B �E(�A0�A8�G���N�I�A�|
8A0A(B BBBFT�����F�G�B �B(�A0�A8�D`�hLp_hA`Z
8A0A(B BBBJ��l0���F�B�B �B(�A0�A8�G���N�P�A��
8A0A(B BBBF��K�Q�A�0��F�D�I �D@Y
 AABD(� ��-F�D�G �RCBL$��6F�B�B �B(�A0�A8�G�
8A0A(B BBBA|P��QF�B�E �B(�D0�A8�D�1�N�k�A�`
8A0A(B BBBC��q�y�B�N�P�f�A�H���UF�B�B �B(�A0�A8�Dp%
8A0A(B BBBG��H0��JF�B�B �B(�A0�C8�D�L
8A0A(B BBBF|��$H[$�0��U�D [AK�H �l�����F�B�B �B(�A0�C8�G���M�h�A�F�M�g�A�q
8A0A(B BBBG,���H�D���X���l���.He������������*H a��!���0H g0���CB�H�D �Gp
 AABG$(��7A�D�D dDA@P4��F�E�E �A(�D0�DP�
0A(A BBBKH����F�B�B �E(�D0�A8�J��
8A0A(B BBBDH�Ԯ�F�H�J �E(�D0�F8�G�p
8A0A(B BBBAH,8��F�H�J �E(�D0�F8�G�p
8A0A(B BBBAx���x��� 0���>E�D�G \
AABDDAH� ��F�G�E �E(�A0�A8�Fp<
8A0A(B BBBKl ��F�B�B �B(�A0�A8�G��L�R�A�e�M�O�A�H
8A0A(B BBBEL�D��F�B�B �B(�A0�A8�D�`
8A0A(B BBBDL����oF�B�E �B(�A0�A8�G�
8A0A(B BBBD@0���PF�D�A �D0|
 AABAV
 AABF8t���E�G�R0c8H@OHBPN0`
DAA$���>E�J�F dCA�,��/@�H��B�B�A �A(�G� I� 6
(A ABBF0 ���1TT$H ̻�Y�v
QM
KLLp 4��F�L�A �D(�G0D
(J ABBOT
(A ABBF� ���<� ���aE�A�D f
DAKF
DAEKDA<!���F�D�C �JPuXE`XXAPT
 AABAT!��$E�Zp!$��jHa�!|��HR(�!����E�A�G0�
AAA�!8��"L�U(�!L��HB�I�C �vABH"p��B�E�E �E(�D0�D8�GP
8A0A(B BBBGH`"���!B�E�E �E(�D0�A8�D�g
8A0A(B BBBE�"���*E�d�"���#HZ,�"���HF�D�I ��
CBI0#���>E�C�D _
CAAICA8D#����M�A�C �S
CBGI
ABL�#���-�#���G�#����#���fHY�#@��
�#<��#�#X����M
A4$��F�E�I �C(�D0e(C ABB\P$t��$F�B�B �B(�A0�A8�G�:
8A0A(B BBBG��B�N�A�H�$D��F�E�B �E(�A0�A8�D@r
8D0A(B BBBI$�$���:E�A�D mAA$%���8%���<L%���F�E�E �D(�C0�V
(A BBBD<�%(��I�D�G c
I�A�ODAAJ��H ��0�%x��F�A�A �G0`
 AABE0&���TE�G�G M
AAFdFA4& ��>V�\F�P&D��. d&`��E�N0}
AG �&���uP�h
HfJ�(�&X��P�rF�H�j
Ff(�&���P�rF�H�j
Ff('`��P�oA�H�j
Ff$0'���I�v�Q�t
D$X'\��I�s�T�t
D �'���5I�QF�H�L�'��% �'��5I�QF�H�L(�'8��E�A�N0t
AAF((���E�A�D0w
AAE4(���H(���\(���)E�X
CH$|(���E�N0k
AA�( ��
8�(���B�B�D �D(�G0w
(D ABBEH�(���?B�B�B �B(�D0�D8�D��
8A0A(B BBBI @)���A�I p
AAd) ��x),��SP�~B��)p��0AAUL�)����B�B�B �E(�A0�A8�D�_
8A0A(B BBBF*��*��(*���<*���P*��d*��)H`(|*��E�D�G0f
AAH`�*���4F�B�B �B(�A0�A8�J`�
8A0A(B BBBI|
8A0A(B BBBB(+x��aJ�D�D EAAG��,8+���3E�C�J�
AAALh+���F�E�E �D(�I0�DP�XH`]XGPz
0A(A BBBE<�+<��@F�B�B �A(�A0�
(D BBBA�+<��\H }
K,���o`(,����F�B�E �D(�D0�a
(A BBBCP
(A BBBIP
(D BBBFH�,X���F�B�E �B(�D0�D8�Dp�
8A0A(B BBBHL�,���wF�E�B �E(�D0�A8�G�
8D0A(B BBBD(-��<E�m
FCH-,��5\-X��OH A
A(x-���E�G�G0y
AAB(�-����E�D�G��
AAA�-���<�-���F�B�D �D(�G�
(A ABBB4$. ��}I�D�C �W
ABF]
ABH\.h��ai�]
JP|.���&H ]@�.���	F�B�A �A(�G� L�@I�@n
(A ABBFH�.���aF�B�B �B(�A0�A8�G��
8A0A(B BBBCT$/���AF�B�B �B(�A0�A8�G� L�@L�Ba
8A0A(B BBBH |/���XE�G E
AA�/���LE�F�/(��E��
MF�/(��5Hl<�/P��E�D�D0]8H@V8A0D
AAADFA40���%E�[HP0���F�A�D �D0l8H@O8A0D
 AABET FAB(�08��LF�H�D �\
DDJL�0\��)F�B�B �B(�D0�D8�F�8
8A0A(B BBBAH1<��mF�E�I �E(�G0_
(O ABBMD(C ABB4d1`��OF�I�E �j
ABGACBH�1x��7F�E�E �E(�D0�D8�D`L
8A0A(B BBBI@�1l��F�B�B �A(�A0�D@�
0A(A BBBF,2(��#E�]H2<��\2H��p2T��XE�R�2����2���E�R�2���UE�K8�2��F�H�D �D(�G@c
(A ABBAP3@��IF�E�I �D(�GP�XO`IXAPT
(A ABBAsXP`RXAP0h3<��F�D�A �D0n
 AABG@�3���E�A�D0{8E@R8A0D
AAEX
AAFH�3$��(F�B�B �B(�A0�A8�Dp�
8A0A(B BBBGp,4��F�B�A �A(�D0�
(D ABBE
(D ABBD\
(D ABBKr(A ABB�4��#HZ�4��H�4��F�B�E �E(�D0�D8�Fp�
8A0A(B BBBK5�,5�P@5$�EF�B�B �B(�A0�A8�G� I� �
8A0A(B BBBK�5 ��5,�#E�U�5@�	�5<�	X�58�#F�E�B �E(�D0�J8�GP�
8A0A(B BBBD�XM`FhFpIP(H6�E�J�D0Z
AAA<t6���a�D�G O
FAFS
FAFSFA�6	��6	��6�	�
�6�	�(70
�F�A�A �{
ABJ07�
�GE�v
E0L7�
�iE�D�G n
DAE[DA8�7�F�A�A �Q
CBBW
ABF �7x�WE�R
Ik
E�7��&8�7��`F�B�A �A(�G0y
(D ABBA08��&$D8�KE�C�D zCA$l88�=E�H�G fAA�8P�kE�eX�8��|F�E�D �A(�F0^
(D ABBCO
(D ABBHR(D ABB9��@ 9��F�B�B �A(�A0�D@Y
0A(A BBBG@d9�
�F�B�B �A(�A0�D@T
0A(A BBBD(�9�|F�I�I �`ABH�9p�%F�B�B �B(�A0�A8�D�L
8A0A(B BBBH8 :T�F�E�D �C(�D@@
(A ABBD\:��0AAUx:���:��,�:��@E�D�G I(H0\AA�:��%E�[D�:���F�E�A �D(�D@mHHPUHA@T
(A ABBGH4;��F�B�E �E(�D0�A8�D@t
8D0A(B BBBD`�;4��F�E�D �D(�G0B
(C ABBD]
(F ABBH�
(F ABBD$�;��ZK�U�P�X
�H<��< <�54<0�[4H<|�F�A�D ��
ABDjABH�<T�F�E�E �B(�D0�A8�Dp�
8A0A(B BBBA(�<�F�I�D �s
ABG�<l�6E�\
OA=��>,=��	0@=��F�A�D �D`\
 AABA0t=�WE�D�G g
AAGTAAH�=<�rF�E�B �B(�A0�A8�Dp

8A0A(B BBBD,�=p!�|E�C�G v
DAFL$>�!��F�A�D �X
ABJk
CBH[
ABJZ
CBAt>`"�8�>l"�F�D�D �v
ABId
ABI8�>@#��F�E�E �A(�D0�u
(A BBBG?�#�@VW0?�#�E�C�Q X
FAHpCAHL?�$�F�E�B �B(�A0�C8�W�f
8A0A(B BBBF8�?�&�F�D�A �E
ABEY
ABD�?`'�
�?\'�HO4@d'� F�A�A �G� L�"M
 AABD@8@L(�F�P�C �b
ABJA
ABLAFB|@�(�EA�y
F$�@�(�E�A�G oAAd�@D)��F�B�E �E(�D0�A8�F@�
8C0A(B BBBE�
8C0A(B BBBO4(A�+�wF�A�A �h
ABE[
ABA<`A,�E�D�D t
CAKZ
CABkCA@�Ad,�F�B�B �A(�A0�G��
0A(A BBBD,�A�.��B�D�D �v
ABM BP/��]�p
C�J�(8B0�^E�A�F h
DAG(dBP0��E�J�F0�
AAE(�B�0�E�A�D N
DAC8�B�1�F�D�I ��
ABJS
ABJ(�B\2�F�I�D �}AB@$C�2�bF�E�L �D(�G0�FP
0A(A BBBGLhC�4�>F�B�B �B(�A0�A8�G� L�"�
8A0A(B BBBE`�C�8�F�E�D �D(�F0s
(I DBBKP
(C ABBHD
(J DBBJDH9�"E�X\8D\9�F�B�B �E(�A0�D8�G�o�B�K�A�f
8A0A(B BBBH\�D�;��F�B�E �E(�A0�D8�G���B�K�A�p
8A0A(B BBBD\�D>��F�B�B �E(�D0�A8�G���B�M�A�d
8A0A(B BBBEPXE�@�UF�B�B �D(�A0�GpFxB�MxAp\
0A(A BBBH<�E�B�F�G�A �DPNXB`FXAPv
 AABA,�EC�E�J@KHBPFHA@f
AA<FxC�F�G�A �DPNXB`FXAPv
 AABAT\F�C�F�B�A �A(�DpnxB�FxApv
(A ABBG�xB�MxApl�F F�QF�B�B �B(�A0�D8�J���B�O�E�W
8A0A(B BBBDF�B�H�A�4$GH��E�G�DPKXB`FXAPB
AAH\\G�H�6F�E�B �E(�D0�D8�D���B�K�A��
8A0A(B BBBJ\�G�K�lF�B�B �D(�D0�Dp�xB�KxDpqx\�KxApf
0A(A BBBD\H�L�F�E�B �B(�D0�A8�G���B�N�A��
8A0A(B BBBG||HXR�F�I�B �B(�A0�A8�G���B�L�B���B�F�A�x
8A0A(B BBBH��^�N�A�<�HxT��F�A�A �D`|
 AABD|hBpFhA`@<IV�n	B�G�B �K(�A0�G@�
0A(A BBBD\�I4_�F�B�E �E(�A0�A8�G�w�B�K�A�k
8A0A(B BBBKD�I�a�F�K�A �A(�D`LhBpFhA`w
(A ABBG(J\b�?E�9DDJ�c��F�B�A �K(�D`^hOpRhA`�
(A ABBE �Je�E�N0R
AJ(�J�e�3E�A�N@�
AAG�J�f�$�J�f�BE�G Y(K0PAK�f�%E�[ 4K�f�E�R�c
AE0XK\g��F�L�D �G��
 AABE �K(h�E�R��
AAp�K�h�F�B�E �E(�D0�D8�J�k�K�G�B�Y�E
8A0A(B BBBA��M�W�A�H$L�l�6F�E�E �E(�D0�I8�J��
8A0A(B BBBH8pL�m�F�H�D �D(�O��
(A ABBH �L�n�E�H@O
AC �Lo�E�J@Z
AF8�L�o�F�M�D �D(�G��
(A ABBB(0Mdp�E�D�J��
AAE\M8q�K��
H|M�q��M�q��M�q�Wy�U0�Mr�\E�A�G c
CAD_CAL�M@r�F�B�B �B(�A0�A8�G�
8A0A(B BBBFTDN�v�F�B�B �B(�A0�D8�D`�hCpHhA`�
8A0A(B BBBBX�NHx�F�D�B �B(�A0�A8�DpgxC�HxAp]
8A0A(B BBBB��Nz�
F�E�B �B(�A0�A8�J�f
8A0A(B BBBEM�A�L�A�N�E�L�F�I���F�Q�B�0�O��AF�M�K �D0�
 AABE �O0��E�D@u
AA�O���&HZ(�O���3E�F�G ^AAPȆ�K�LI�L8P<���B�E�B �B(�D0�A8�G�M
8A0A(B BBBB��P���,F�B�B �B(�A0�A8�G� L�8=
8A0A(B BBBH��8B�8S�8A�8`�8B�8S�8B�83�8B�8O�8B�8S�8B�8O�8A�8E�8f�8S�8A�8F�8e�8S�8A�8|�8j�8O�8B�8{�8k�8N�8A�8dQ���/@xQ����B�B�B �B(�A0�A8��0A(B BBBH�QX��-B�B�J �B(�D0�A8�D`�
8A0A(B BBBIR<��RH��9A�c
D(8Rl��A�C�D `
AAFdR��M$xR��vE�A�D iAA�Rt��JL�}�R���kE�V
E�R���=E�wd�R��<F�B�B �A(�C0�G���R�M�A�h
0A(A BBBD��R�M�D�`S��3`�MC�|S��.�S4��NE�H$�Sh��YQ�T
�KM
�KP�,�S���jF�A�H �C
ABKT��M$T��,E�D�G YAA(@T$��nF�I�C �w
ABD,lTh��F�A�A �x
ABEH�T��F�B�B �B(�I0�A8�D��
8A0A(B BBBB8�T<��F�E�D �A(�G��
(A ABBA($U���NE�D�D \
CAKHPU��F�B�E �B(�A0�A8�Dp"
8A0A(B BBBA8�Uh��F�A�A �k
ABJF
ABG$�U���tE�F�G ]CALV$���F�E�B �B(�I0�A8�D�8
8A0A(B BBBA8PV����F�E�D �A(�D��
(A ABBA<�VH��F�A�D �M0O
 AABEA AAB�V���/4�V����A�A�D �
DAOZ
DAI@W���F�E�E �A(�F0�LP�
0A(A BBBF`W���%E�_4|W��bF�E�D �D(�D0D(A ABB@�W@���F�B�B �A(�D0�GPP
0A(A BBBB0�W����F�D�A �G@j
 AABHP,Xx��BF�B�B �B(�A0�A8�G� L�*S
8A0A(B BBBB0�Xt��F�D�A �G@g
 AABA,�X���rE�C�D@^
AAA@�X ���B�B�B �B(�A0�A8��0A(B BBB(Y���0AAPDY���XY���lY����Y���	�Y���.�Y���NE�H$�Y ��YQ�T
�KM
�KP��YX��M$Z���-E�D�G ZAA((Z���YF�I�C �w
ABATZ���EE�(pZ��NE�D�D \
CAKH�Z(��mF�B�B �B(�A0�A8�Dp]
8A0A(B BBBA8�ZL��F�A�A �i
ABDF
ABA$[���5E�d,@[��F�A�D �Y
ABAp[��/�[0���[,���[(���[$��	�[ ��5Hl�[H��4Hk\p��E�R \t��4\p��H\l��KTk
EFHh\���F�L�D �D(�G0U
(D ABBA}(D ABB�\��4AAW8�\��B�H�I �A(�H0�V
(A BBBAX]h�
K�F�A �A(�D0v
(A ABBE(A� A�B�B�K0���� h]�AA�G��
AHd�]H	��B�B�B �E(�A0�D8�DPt
8A0A(B BBBFe
8E0A(B BBBE`�]��0K�F�E �E(�A0�D8�DP�
8D0A(B BBBCx������HP������PX^|�XF�F�B �D(�E0�#
(D BBBA�
(D BBBAL�^� ��F�I�B �A(�A0��
(A BBBD\
(A BBBE`�^"�~F�E�B �D(�A0�Y
(A BBBFA
(D BBBM�
(A JBBE`_4#�	t_0#�	�_,#�	�_(#��_4#��_0#�%�_L#�%�_h#�%`�#�#`�#�=j(`�#�sN_
CD`0$�HrX`l$�vN_
C$t`�$�=E�F�G eDA$�`�$�CE�D�D pDA$�`%�>E�D�I fDA(�`(%�CF�G�A �Z
DBBaL%�,aX%�#@at%�Ta�%�ha�%�7E�q�a�%��a�%�	�a�%��a�%�/E�i�a�%�B�a&�"E�V
EATb&��B�I�J �J(�A0�A8�GpVxH�_xHpT
8A0A(B BBBEthb�&�K�B�B �B(�A0�A8�DPp
8A0A(B BBBG�8A0A(B BBBD������PP������8�b�'�F�E�D �F(�G@|
(A ABBBcH(�NKq
D8c|(�
Lcx(�E�TDhc|(�F�B�A �D(�G0x8U@I8A0P
(C ABBE4�cD)�F�A�A �X
ABEuAB�c�)�_h�vHd*�B�B�B �B(�A0�D8�GPn
8A0A(B BBBDPdD+�`H R
Ald�+�E���d,,�aE�[�d�,�iE�_L�d�,��F�B�B �A(�A0�GPd
0A(A BBBA_XK`YXAPeT-�$e`-�8el-�Lex-�8`e�-�F�E�I �D(�D0�l(A BBB4�e�-�F�E�A �D(�G0g(A ABB`�e0.�F�E�E �E(�D0�A8�D@�
8A0A(B BBBDJ
8A0A(B BBBD88fl/�FF�B�A �D(�J�~
(A ABBE8tf�1�F�E�D �D(�G��
(A ABBA�fD2�	(�f@2�vF�H�D �`AB�f�2�9L�llg�2�%F�B�A �A(�D0i
(A ABBCA
(C ABBGc
(A ABBGL(F HDBH|gx3�PF�B�E �E(�A0�D8�D@�
8A0A(B BBBJ4�g|4�F�B�D �D(�D0�(A ABB(h�4��F�D�D ��AB4,h�5�bF�B�D �A(�G0G(A ABB4dh�5��F�E�D �A(�D0�(A ABB(�h�6��F�D�A ��ABH�hL7�F�E�D �D(�D0�
(A ABBFJ(A ABBHi 8�F�E�D �D(�D0�
(A ABBEC(A ABB4`i�8�wF�B�D �D(�D0\(A ABB@�i,9�F�E�E �A(�A0�D��
0A(A BBBK(�i�9�E�A�D0�
AAAj|:�DE�N
Eg (j�:�\E�MPC
AAHLj�:�#F�B�B �B(�D0�A8�D`5
8A0A(B BBBDH�j�<�F�B�E �B(�D0�A8�Dp�
8A0A(B BBBB$�j A�jE�A�G ZAALkhA��F�B�D �D(�G0~
(A ABBED
(A ABBF8\k�A�aF�B�D �D(�G0s
(A ABBH8�kC�6E�Z
Ar
FB
Fs
EO
EI0�k D�E�D�G e
CAGOAA,l�D��E�F
B�Q����
G8l<M�2HiHPldM��F�H�E �E(�D0�A8�D`?
8A0A(B BBBF(�l�O�wF�D�H �aAB(�l<P�F�A�D �vABH�l�P�pF�E�E �E(�D0�A8�DP�
8A0A(B BBBKH@m�Q�XF�F�E �E(�D0�D8�D`�
8A0A(B BBBHD�m�U�E�A�G �
AAEb
AADu
AAI�m�W� L�S0�m�W��F�D�A �Dp�
 AABA,$n@X��F�D�D ��
ABK8Tn�X�F�B�E �A(�A0��(A BBB<�nTY�F�E�E �D(�H0�s
(A BBBJ(�n�Y�E�D�D@�
AAA�nhZ�9L�l(o�Z�E�A�D0i
AAKDo [�	dXo[��B�B�B �B(�A0�A8�GP	
8A0A(B BBBD�XN`WXAPtXK`RXAP�o�^�;P�o�^�F�E�B �D(�D0�D@�HLPRHA@�
0A(A BBBJ8(pc�`F�B�A �A(�D0�
(A ABBALdp@d�F�B�A �D(�G0
(D ABBKJ
(A ABBHd�p�e�F�B�E �B(�A0�A8�FP-
8A0A(B BBBB�
8A0A(B BBBGDq�g�BF�E�D �A(�GPXI`ZXAP
(A ABBA<dq�h�F�D�D �G@AH[PIHA@g
 AABJL�q�i�mF�E�E �D(�D0�D@IHIP^HA@`
0A(A BBBK8�q�j�F�B�A �A(�D@�
(A ABBJ80r4m�F�B�D �A(�G0}
(A ABBI8lr�m�F�E�E �D(�H0��(A BBB8�r,n�F�B�D �A(�G0}
(A ABBI�r�n�	(�r�n�[F�A�A �OAB4$s�n��F�E�D �D(�D0�(A ABB4\s�o�|F�D�H �~
ABE`AB0�s�o�F�F�A �DP�
 AABA(�s\p�E�D�D0

AAG@�s�q�uF�E�E �D(�A0�Dp0
0A(A BBBGH8t�r��F�B�D �D(�D0�
(A ABBEh(A ABB@�t�s��F�B�E �D(�A0�D@�
0A(A BBBA,�tt�F�D�H �
ABG(�t|u��E�D�D �
AAEH$u@v��F�B�E �E(�D0�F8�MPZ
8A0A(B BBBC$pu�v�Q�G ]AJ�F ���u\w�UF�B�B �D(�D0�NpxxO�VxBpcxX�FxAp�xH�NxBpe
0A(A BBBKMxI�[xDpTxH�OxAp�xP�RxApD0v${�F�E�D �D(�D@�HKPQHA@]
(A ABBG4xv�|�E�D�G0o8q@M8A0N
AAB@�v�}��F�B�B �D(�D0�J��
0A(A BBBE,�v0�E�DPWXJ`FXAP
AA$w��8w��(Lw��~E�A�D0\
AAH0xw��F�D�D �D0�
 AABA0�w���F�L�A �IP�
 AABAL�w4��_F�B�D �D(�G0�
(A ABBIe
(A ABBE(0xD���F�D�H ��AHH\x��F�E�I �D(�D0�|
(A BBBAS(A BBBH�x|��F�E�D �D(�G0_
(A ABBAO(A ABBH�xЃ�rF�I�D �G0�
 AABE�8K@F8A0~8J@X8A0(@y��E�A�G�w
AAJlyx��RH D
A�y���%E�_�yІ�fE�\L�y$��F�B�B �E(�D0�A8�D�_
8A0A(B BBBA4zd��F�B�D �D(�G0m(A ABBXHz���	F�A�A �R
ABC|
ABAE
ABHE
ABHEAB<�zp��aF�B�G �D(�I0�s
(A BGBE8�z���
F�E�D �D(�D0�
(A ABBJL {t��nF�B�E �E(�D0�D8�G��
8A0A(B BBBELp{���F�E�E �E(�A0�A8�J��
8A0A(B BBBE0�{D��?F�D�D �D0#
 AABA�{P�� 4|\��E�P�G d
AAFO
EAK(@|���E�D�D0q
AAA$l|��YE�D�G FAA$�|P��jE�A�G ZAA�|���9L�l4�|���F�B�D �D(�D0p(A ABB8}���F�E�E �D(�H0��(A BBBDL}Ȕ��F�E�E �E(�D0�A8�D@�8A0A(B BBB�}P��?\b@�}x��WF�B�B �A(�D0�DP�
0A(A BBBF�}���?\b0~���QF�H�A �D0�
 AABE(<~��E�D�D0}
AAA0h~\���F�A�A �G@�
 AABG8�~��,F�E�D �A(�DP�
(A ABBD�~��?\b4�~4��F�B�D �D(�G0r(A ABB(���WE�R
IvHܚ�(\ؚ�E�G�D0C
AAKH�<��F�E�B �E(�D0�D8�G��
8A0A(B BBBI����$����.E�I�G IJAL�����F�B�D �D(�L�Z�I�Y�A��
(A ABBC0`�4��F�D�A �Gp�
 AABD4����F�G�A �D(�I0P(L ABB<̀h��F�D�D �FP`Xi`FXAPT
 AABA8�����F�B�A �A(�G@i
(A ABBH<H�L��=F�E�B �A(�A0��
(A BBBHX��L��F�B�B �B(�A0�A8�DPG
8A0A(B BBBE9X_`NXAP���Z<��<��F�E�B �D(�H0��
(A BGBA8���*L�(��`�4��t�0����,��/E�T
GJ��<��9E�c
HDȂ\��GHPy
A����0H g�����LH~���(E�b0���<\D� ��QF�B�B �J(�D0�D8�J��
8A0A(B BBBJ:�J�F�A��� ��4�����F�D�A �(R0F(A W
ABC(�Ԯ�eE�D�I`K
AAA ���E�]P�
AA(@����eE�C�I`L
AAA(l����jE�D�I`P
AAA8��<��AF�E�E �D(�G0�U(F BBBԄP��-E�a�d��TE�[
Hh����$����<����P�IJ�d�в�x�̲�
��Ȳ���Բ�����)ȅ���TL�o$�@��iE�I�D TAA����"  ����q�_�P�AG�8D���E�A�D098j@T8A0�
AAJ8��t��F�B�A �A(�G��
(A ABBH,��8���E�A�G��
AAD���&��� ���$(���yE�v
Ek
EH(P�t��gHk
EV
BH
HF|����=i�O� ��ܻ�yE�D@_
AGH��8��@F�B�B �B(�A0�A8�D�N
8A0A(B BBBF�,���8��0�4��D�0��LX�<��VF�B�B �B(�A0�A8�G�]
8A0A(B BBBD��L��tH`f
A<Ĉ���oF�D�D �FPiXH`NXAPd
 AABD,����E�C
P������
AL4�P��F�E�B �B(�D0�D8�D��
8A0A(B BBBH�����4E�_
DK8�����3F�B�A �A(�D@U
(A ABBG ����E�G��
AA�`��yH@u
C@ ����J�E�E �D(�A0�I@l
0A(A BBBJ|d� ��zF�B�B �B(�A0�A8�D�s
8A0A(B BBBA��E�G�A�D�A�B�A�I�B�D�B�I�� ��k`��|���F�B�B �E(�D0�D8�Dp�
8I0H(D BBBI�8F0A(B BBB8\�����H J
FR
FR
FR
FR
FR
FP(�����jF�G�A �XABHċ���OF�B�B �B(�D0�A8�Dpy
8A0A(B BBBH0����[F�D�A �D@[
 AABBD� ��'(X�<��E�D�G L
AAB(�����E�D�G K
AACH��$��F�B�B �B(�A0�A8�D@w
8A0A(B BBBE(�����ZF�A�D �CIB(����E�X,D����yF�D�A �M
ABE$t� ��KE�D�G xAA8��H��F�B�B �A(�A0��(A BBB$؍���-E�A�D `AA,����R�D�L ���A�B�(0�T��7F�A�A �kAB8\�h���F�B�D �D(�G��
(A ABBA����	����!��$��"Ԏ@��3�l��3���������$����8����,`KLP����T�B�A �A(�D0�
(C ABBC�����H0����8�����F�B�A �A(�G0N
(A ABBK܏��/E�M
FV����~E�|
Gu(�H��E��
IA
G^
JH�<��L\�8���F�B�B �A(�D0�x
(A BBBBR
(D BBBL���������	Ԑ���G(����E�D�D n
DAH�p��(�l��3E�cD����JE�D`���0t���30����E�D�G g
CAEJFA0��t��E�D�G b
AADLEA0���WS�E�D0GEAG��P0��((����E�A�G@w
AAJ8T�`��F�B�A �A(�D@Z
(A ABBB��$�(��0�UE�A�GP�
AAD4Вd�E�A�G T
AAET
DAO(���eE�A�G@�
AAJ(4�0�E�A�G@�
AAB0`��	�bF�A�A �D@�
 AABC,�����E�G i(G0Y(A T
AE0ē��#F�A�C �Dp�
 AABF0���
�#F�A�C �Dp�
 AABF0,���-F�A�C �Dp�
 AABH<`���F�B�D �D(�G�A
(A ABBB<��t�F�B�D �D(�G�c
(A ABBH<���F�B�D �D(�G�c
(A ABBH< �d&�=F�B�D �D(�G�i
(A ABBJ0`�d.�F�D�D �G`�
 AABG0��P1�F�D�D �G`�
 AABD(ȕ�3�jE�D�G@�
AAC@��4�F�A�A �D0c
 AABE\
 AABA88�l5�F�B�D �D(�G��
(A ABBA@t��8�F�B�B �D(�D0�G��
0A(A BBBG@��<<�F�B�B �D(�D0�G��
0A(A BBBG0���?��F�D�D �G`�
 AABH00�dB��F�D�D �G`�
 AABH$d� E�SE�G�G }AA4��XE�fF�E�D �D(�D0H(A ABB@ė�E�<F�E�E �A(�A0�G��
0A(A BBBH0��G�dF�D�D �Gp\
 AABK0<��H��F�A�D �G`�
 AABHp�tI�H��pI�F�E�D �D(�D0~
(A ABBEj(D ABB@И�I�1F�B�B �A(�D0�DP

0A(A BBBK0��N�F�D�A �D@@
 AABEH�LR�E�O4d�PR�^F�D�A �y
ABIJAB$��xR�<E�C�G jAA$ę�R�,E�C�K VAA(��R�=F�J�C �fABH��R�{F�E�H �H(�D0�|
(A EBBKA(C BBB\d��R�F�E�E �B(�D0�D8�G@T
8A0A(E BBBFD8C0A(B BBBĚ S�0ؚ,S�
F�D�D �Gpy
 AABF�T� �T�4� T�HH�,T�nF�E�B �E(�D0�A8�D`(
8A0A(B BBBC��PZ���\Z�'E�aěpZ�L؛lZ�OF�E�B �B(�A0�D8�G��
8A0A(B BBBK(�lm�;E�e
FJH��m�+E�e$d��m�rE�q
JT
DY$���m�rE�q
JT
DY��Pn�\H0
I$М�n�QE�n
EH
HH@���n�_E�S
He
K\
DR
FN
Ju
K`
A]<��o�YH0K
AX�,p�&E�`t�@p�2P�a��`p�)E�c(��tp��E�C�Gp�
AAJܝHq�H`�
A���q�8��q�aP�B�D �D(�X0^(A ABBJ����(H�,r�bF�A�D �HLBt�pr���hr�3E�f
AF8���r�F�B�D �D(�G0b
(A ABBA��r�)���r�/TZ�s�EH w
A0�Ds�$D�@s�EE�D�D sCAl�hs�	��ds�X��`s�F�B�D �D(�D0V
(A ABBH\
(A ABBF|(A ABB`��s�F�B�E �D(�D0�S
(A BBBA\
(A BBBED(A BBBT�t�h��s�x\�O���`t�P0���t�F�A�A �D0\
 AABD̠hu�(�du�YE�A�G IAA��u�#TH$$��u�3E�A�G UKAL��u�DMb(d�v�E�A�G@y
AAHL���w�LB�B�B �E(�A0�D8�D�(
8A0A(B BBBAD��x��F�B�D �A(�G0,8O@X8A0k
(C ABBE(�|�$<�(|�E�A�D �AAd��|� E�ZL���|��F�B�B �B(�D0�A8�DPOXH`U8D0A(B BBBТT}��P}�HN��X}��d}�K�w
F,��}�K�l
I$H�l~�<E�G�
AEp���+E�a��������\����F�B�E �B(�A0�A8�I�T
8A0A(B BBBH��K�S�A�8�`��F�B�D �A(�D@�
(A ABBI0P�ԇ��F�D�A �J`\
 AABK��p��8��|��F�B�D �D(�GPy
(A ABBJԤ��L����B�B�B �E(�H0�C8�J�j
8A0A(B BBBA8�\��L�h��`�d��rHlt�Ќ�sF�B�B �B(�A0�A8�G��L�Y�A���B�K�A�c
8A0A(B BBBI(���E�D�D0Z
AAG�T��$�P��'HU8<�h���F�B�D �D(�D@�
(A ABBAHx����F�B�E �F(�A0�A8�DP�
8A0A(B BBBA@Ħ����F�B�B �A(�A0�D@q
0A(A BBBGH�|���F�B�B �B(�A0�A8�D`L
8A0A(B BBBHDT���kF�B�B �A(�A0�D�F
0A(A BBBA<��8���M�B�B �A(�A0��
(A BBBAܧؕ�H`�
A �����aE�D Q
AA���0����
D����>dYL\�ȗ�
B�B�E �E(�A0�D8�D�~
8A0A(B BBBA4�����QF�D�D �\
ABCILKH����F�B�B �B(�A0�A8�Dp�
8A0A(B BBBE0���3E�m\L���F�B�B �E(�D0�D8�D@J
8A0A(B BBBAL8D0A(B BBBl��H��F�B�B �B(�A0�A8�G�x
8A0A(B BBBI��R�T�A�g�`�O�A�0����0F�D�D �G@�
 AABGP���d���x����%H\D����F�E�I �C(�G@cHGPOHA@X
(A ABBJ<تL��oF�I�C �G0]8G@O8A0X
 AABGD�|��F�E�I �C(�G@kHGPOHA@X
(A ABBBD`����F�J�D �D(�G@dHHPOHA@X
(A ABBG<����F�I�C �G@sHGPOHA@X
 AABAT�,���F�E�J �E(�D0�C8�DP�XG`OXAPX
8A0A(B BBBKT@�Ĩ�F�E�J �E(�D0�D8�FPqXG`OXAPX
8A0A(B BBBF$����H @(K0F(A D
B0����F�D�D �L0\
 AABA(�`��sE�D�L0V
AAA0 ����F�D�D �L0d
 AABA0T���F�D�I �G0]
 AABA(��l��E�D�L@l
AAA@����F�E�E �I(�D0�D@w
0A(A BBBH@��|��F�E�E �I(�C0�G@h
0A(A BBBE<���-H d(T���xE�D�L0[
AAA ��T��mE�L U
AA(�����~E�C�L0b
AAA(��yE�I�G0\
AAA ��H��E�L0k
AA8 �����F�E�I �D(�D@v
(A ABBH8\�X��F�E�I �C(�G@g
(A ABBE��̰�/H f,����yb�I�M �nCBE���T�4��F�J�E �E(�D0�D8�D`�hHpOhA`X
8A0A(B BBBDT8���F�E�J �E(�D0�C8�GPxXG`OXAPX
8A0A(B BBBG8��T��F�E�D �D(�L@\
(A ABBA0̰���F�D�D �L@l
 AABAH����F�E�E �E(�I0�D8�DPw
8A0A(B BBBIHL����F�E�E �E(�I0�C8�GPh
8A0A(B BBBF8�����F�E�I �C(�GP�
(C ABBA8Ա����F�E�I �C(�FP�
(C ABBA8�D��F�E�I �C(�DP�
(C ABBA8L�ȷ��F�E�I �C(�GP�
(C ABBA8��\���F�E�I �C(�D`�
(C ABBAHIJ��2F�E�E �E(�I0�C8�D`�
8A0A(B BBBHH���F�E�E �E(�I0�C8�G`�
8A0A(B BBBG@\����F�E�E �I(�C0�D@j
0C(A BBBA����2E�lH��8��QF�E�B �E(�D0�A8�D`�
8A0A(B BBBFH�L��F�B�E �B(�D0�C8�D@_
8A0A(B BBBE�T����F�B�B �B(�A0�A8�J���E�`�B���H�a�A���H�a�A�
8A0A(B BBBHTش���F�B�B �B(�A0�A8�DP�XG`ZXAPk
8A0A(B BBBED0����B�E�A �I(�D@�H_PQHA@X
(A ABBA x�\��tE�G V
AE �����E�p
KA
G��D��TN�ZH�C�����3QU��������� ����#E�Y<����7H`
H(X����E�A�Dp�
AAA�����0��|��F�D�A �G0�
 AABA̶���L�����F�B�A �A(�D�l�N�R�D�@
(A ABBA00����gE�J�I j
CMNDAA,d����E�D�I�~
AAAl��@��F�H�E �E(�D0�A8�G��
8A0A(B BBBF��K�R�A���B�J�A�����HJ I0 ����E�H�GHVPPHA@\
AAGHT� ��LF�D�E �A(�F0�LXV`PXAP�
0A(A BBBE���$��B�H�B �B(�D0�A8�D�n�I�\�A�b
8A0A(B BBBI��L�Z�A���F�Y�B�H�W�D�A�I�8�,��K��
AT����K��
A@p�t��F�B�B �D(�G0�G��
0A(A BBBE@�����F�B�H �D(�D0�G��
0A(A BBBJ0����wE�A�G D
AAE\AA,�h�� (@�t��(F�I�D �QAB8l�x���F�B�D �D(�DP�
(A ABBA8����%F�B�D �D(�GP�
(A ABBB0���F�A�D �D0q
 AABD��|��F�H�E �B(�D0�A8�G���_�F�A�Z
8A0A(B BBBFP�Y�K�B�J�N�F�A�O�N�G�B�P�E�j�A�a
�S�I��HE I8���gF�E�D �D(�G0x
(A ABBH8�(��oF�E�E �D(�D0�}
(A BBBL8X�\��gF�E�E �D(�D0�u
(A BBBL8�����}F�E�D �D(�G@B
(A ABBNH�F�E�E �E(�A0�D8�JPO
8D0A(B BBBHH�8��F�E�E �E(�D0�D8�DPJ
8G0A(B BBBEh����5H Z(I0I(�����OF�D�D �i
DBK8����gF�E�D �D(�G0r
(A ABBN8���gF�E�D �D(�G0w
(D ABBF0,�H��mF�D�D �G0
 AABHH`����F�E�E �E(�D0�D8�D@@
8D0A(B BBBJ4����@F�E�D �G(�G0I(G JBBH���F�B�E �E(�A0�D8�Dp�
8A0A(B BBBH40����PF�E�D �D(�L0f(A ABB8h���]F�E�E �D(�D0�y(A BBB8����UF�E�E �D(�D0�q(A BBB4���dF�E�D �D(�L@z(A ABBH�L��F�E�E �E(�I0�D8�D@}
8G0D(B BBBJDd����yF�E�E �E(�I0�D8�DP{8G0D(B BBB8����NF�B�A �A(�I@�
(A ABBD(���=F�D�D �gAB4��ZF�E�D �D(�L0m(D ABB4L�(�RF�E�D �D(�L0h(A ABB,��P�XF�D�D �L0u AAB8����F�E�E �I(�D0�}
(D BBBLD���lF�E�E �E(�I0�D8�D@q8G0A(B BBBH8���/F�E�B �E(�A0�D8�Dp�
8A0A(B BBBJ$����=E�D�D mAA�������(���IP�G N
FEPAG��4�q���6Hm,���"HYD���$E�Z`���# t��E�G��
CA\����oF�J�A �A(�D0�8Z@EHEPN0m
(G ABBL�
(A ABBB���&$�(�FE�A�D vDA44�P�AA�D�G �
DAF]
DAFl�h�0AAU��|�$��
��E��
HT
Dr$���
�$E�H�G MAA���
�	��
�`E�Z(�(�Q�C�K W
AAHHH���WF�B�B �B(�A0�A8�D`�
8C0A(B BBBF$����SH h(B0F(A T
Ad�����F�E�E �B(�D0�D8�DPr
8A0A(B BBBF
8C0A(B BBBEd$�`��F�B�B �E(�A0�G8�D`F
8C0A(B BBBC�
8G0G(B BBBI`����sF�E�B �E(�A0�D8�G`�
8C0A(B BBBED
8F0A(B BBBA4����F�A�D �r
ABHQAB,(�l�F�A�D �z
hBAX���FE�n
MAx�,�FE�o
LA8��\�F�E�D �A(�D0s
(A ABBC<�����F�E�E �D(�A0��
(A BBBEL���F�E�B �B(�D0�D8�G�L
8A0A(B BBBDLd���F�E�E �A(�A0�p
(A BBBG~
(A FBBGT��`�F�B�B �B(�A0�D8�D`}hJpPhA`�
8A0A(B BBBDX� �F�B�B �B(�A0�A8�G���G�Q�A�|
8A0A(B BBBAh�� �`|�H"�,F�B�B �B(�A0�A8�D@�
8A0A(B BBBBD
8F0A(B BBBA<��$�F�B�B �A(�A0��
(A BBBA ��%�Fd4� &�N�B�B �B(�F0�A8�D@\
8A0A(B BBBKD8F0A(B BBBE��������x&�DT���&�F�E�B �E(�D0�D8�DP�XI`OXAPm
8A0A(B BBBA<�\'�J�E�B �A(�A0�`(A BBBF�����H��'�\��'�)p��'�a�� (���,(���8(�'��T(�'@��p(�~F�A�A �w
ABFJ
FBFD
ABI��(�/,��(�,H@��(�F�E�E �E(�D0�A8�GP3
8A0A(B BBBBd��(-�R�B�E �E(�D0�F8�H@w
8A0A(B BBBG@������X@������H��P/�mF�B�E �B(�D0�D8�F`
8A0A(B BBBC@@�t1��F�E�B �A(�A0�DP�
0A(A BBBH��2�	��2� ��2�E�G K
AH ���2�E�G K
AH���2�<Tg(�$3�~E�A�D@j
CAA(<�x3�E�A�J0O
AAG h��3�oE�J J
AF��84�dH I
G���4�#E�]T���4�-F�B�E �A(�D0�G�5
0A(A BBBJ[�G�\�A��x6�GE�q
JF<��6�+P��6�	d��6�)H `|��6�HP�
A��\7�HP�
A@���7�F�B�L �A(�H0�DPt
0A(A BBBC��L8�3Hj�t8�$�p8�iH0V
B8D��8�B�D�A �D(�D@�
(A ABBAP��D9�@F�G�B �I(�D0�A8�G�	a
8A0A(B BBBA��0<�#HZ��H<�"HY<�`<�KB�B�E �A(�A0��
(D BBBF(D�p=�cF�D�I �JCBLp��=��F�B�B �B(�A0�A8�G��
8A0A(B BBBK0��D@�+F�A�A �D0�
 AABG ��@A�E�N ]
AG(��A�E�A�D0�
AAE D��B�7E�G0m
AFh��C�)E�c\���C�7F�B�B �B(�A0�A8�G�H�O�U�A�a
8A0A(B BBBC ���G�eE�J O
AA��G�Qpj(��H���Z@@�DI�E�A�D@�HHP[HA@RHJPYHA@]
AAF(���J�E�D�D H
AAI(��K��E�D�D0u
AAD0���K�mF�A�K �D@�
 AABK8��M�AF�B�A �D(�DP�
(A ABBJ8L�P��F�B�A �A(�G@x
(A ABBA8���Q�]F�B�A �A(�D`
(A ABBEH���S�F�B�B �B(�A0�A8�G�s
8A0A(B BBBF8�DV�NF�B�A �D(�D@
(A ABBFLL�XW��F�B�B �B(�A0�A8�G��
8A0A(B BBBB8���X�F�B�A �A(�D`�
(A ABBE(��L[�E�C
Q���
K(��\�E�C
Q���
H00�t^�TF�A�A �DP�
 AABG8d��_�_F�B�A �D(�D@�
(A ABBDH���`�nF�A�A �D`�hXp^hA`zhPpfhA`k
 AABG0���b�F�A�A �D@
 AABG0 �Te��F�A�A �D@�
 AABG0T�g�F�A�A �D@
 AABG0��li��F�A�A �D@�
 AABG4��k�F�H�D �K
EBDTMB��pk�MI�n���k�MI�V� ,��k�=E�G0^
AE0P��l�F�A�A �D0�
 AABCL��pm��B�E�B �B(�A0�A8�M��
8A0A(B BBBAH��o�]B�B�B �B(�A0�A8�D`
8A0A(B BBBI �$q�$4� q�4E�M�K IHA4\�8q�F�A�A �N�G
 AABG0���s��F�A�A �N@�
 AABH0��<t�F�A�A �D@

 AABC0���u�hF�A�A �D0�
 AABC00��v��F�A�A �D@�
 AABG0d��x�<F�A�A �D@1
 AABG���z�@���z�F�I�B �A(�D0�FP�
0A(A BBBAL��${�5F�B�B �B(�A0�A8�D�A
8A0A(B BBBCL@���F�B�B �B(�A0�A8�D�.
8A0A(B BBBA ��ą�dE�N J
AA����0����UA�G��
AKI�S�L�A���8��HV�@��=(�l��\HN@����(E�b\�ȇ�'H^t���KE�E����'��0��)H `h��H��FF�B�B �A(�C0�GpNxN�CxApjxM�OxBpnxY�GxAp[
0A(A BBBAp(�,��SF�B�E �E(�D0�C8�D`�hSpChA`k
8A0A(B BBBFUh@pGhB`dhSpChA`����HB I@�����F�E�E �I(�A0�D@|
0A(A BBBF �����ZE�L B
AA  ���E�I b
AG D�`��E�I c
AF h�̌�E�I i
AH ��8���E�b
Ig
I(����E�i
RS
Mt
LM$��h��qE�m
NQ
GT4����E�E�G u
CAFX
CAD<���E�V(X���6E�I�G W
AAA��0��E�U��4����0����8��oP������F�F�I �E(�G0�D8�G��
8A0A(B BBBA4� ��
H���\�(��	p�$���� ��	����	����	����	����	����	����	���K��
A,����	@����	T����h����	|����	�����	�����	�����	�����	�����	�����	�|��	�x��0�t��	D�p��	X�l��	l�h��	��d����p��$��|��ZY�D�K jDA$�����E�Y
RQ
Gd��<��\H B
FX����F�E�A �A(�D0S
(A ABBFx
(D ABBGG(D ABBp��������������
����� HP$�����TE�I�D |DA����qX b^ �H�� �D��V$4�����E��
Fu
AF\�X��)L�UG� x�l��SE�G @
AA(�����eF�D�D �|
ABC�����E�b
I�������vL��h���F�B�B �E(�D0�A8�J�
8A0A(B BBBE8L���E�A�DPlX^`BhBpNP_
AAI8�����E�D�H0v
AAGK8E@OHIPI0P����F�K�E �D(�K0�DPeXQ`BhBpNPq
0A(A BBBF0�l��tE�G c(F0R8I@I T
AA0L����tE�G c(F0R8I@I T
AAH����'F�E�D �A(�DPhXE`OhOpNPE
(A ABBHP�����F�E�E �D(�D0�D@GHkPAXB`I@s
0A(A BBBA( �t��nH0^8U@IHBPN0T
A0L����3F�D�D �G0|
 AABK0��Ġ�E�H�G��
AAA ��@���E�U0�
AG@����F�M�I �D`hFpFxF�U`u
 AABA�h��NH�E08����wF�A�A �D@�
 AABHHl���NF�B�B �B(�A0�A8�D`x
8A0A(B BBBD8�����F�E�A �A(�Dp�
(A ABBH�����G��
A0�D��AB�A�C �Jp'
 AABAD�`��X�\��l�X��-��t��-�����-�����-��ȷ�-����-4����E�A�D Z
AAJm
AAA����@E�z8����K��
AhT�P��2F�B�B �B(�A0�A8�G���M�T�A��
8A0A(B BBBCt
�B�R,��$��<E�H�G� 
AAA��4���0��<�,���F�E�E �A(�I0�k
(A BBBDX���(l����E�D�J��
AAA$�����?E�C�D mDAP�����F�B�B �A(�A0�DPEXj`BhBpIP#
0A(A BBBI���eE�[4�P��RH����{\���D0P
Dx����#D |
Hl�����R�H�B �B(�H0�I8��
0A(B BBBKK0A(B BBBD������H8������8�`��B�A�C �k
ABDR
ABC(@����YA�I�G@�
AAF(l���eA�D�I K
AAEH��L���B�E�B �E(�A0�A8�DP�8A0A(B BBBP�����B�E�E �A(�E0�1
(A BBBF@
(A BBBI<8�,��B�E�I �A(�K0��
(E BBBG8x�����B�B�A �A(�G0^
(D ABBD8�����B�G�A �A(�F0r
(D ABBD��T��
(�P��]F�A�A �LFB0����2LD����F�B�B �B(�A0�A8�G�J
8A0A(B BBBGL����F�B�B �E(�A0�A8�G��
8A0A(B BBBC����������\�(��F�B�B �B(�A0�A8�Dp�
8A0A(B BBBFIxZ�I�B�Mp@l���F�A�A �T
AKHA
ABLIFO$��D��FE�D�L nAA��l��BE�m
NA�����E�L$����SE�D�L {AA<���	@P���F�J�D �G0~8B@NHPPI0\
 AABFD�����F�B�B �A(�A0�D@�
0F(A BBBA�����HL����HM8����A�A�D@AHOPKXB`N@j
AAC@H����F�A�A �D@iHDPMXI`I@F
 AABF@��8��E�A�D0G8H@PHBPI0L
AAF[AAP����$F�D�A �D0L8H@PHBPI0L
 AABB[
 AABAP$���F�B�B �A(�F0�G`�h_pAxB�N`�
0A(A BBBH(x���GF�D�D �n
ABAH����RF�B�A �A(�GPbXB`RhIpIP�
(A ABBI0����KE�D�D \
FAHLAA<$����B�D�D �Gp[xB�NxApT
 AABKtd���F�B�E �B(�A0�A8�D�`�D�M�O�N�h
8A0A(B BBBK��N�P�B�N� �����E�D k
AK��
�F��
�iH(��F�B�B �E(�D0�A8�G`�
8A0A(B BBBH8t���5F�E�A �A(�Gp�
(A ABBD@����F�A�A �G`�
 AABD�hHpUxB�I``�P��F�B�B �E(�A0�A8�G�
8A0A(B BBBH �Z�H�B�I�HX���F�B�A �A(�Gp�
(A ABBE�xI�KxApX��@�F�A�A �G�7�I�K�A�j
 AABG�\�A�B�I�8�t!�F�B�D �F(�G`�
(A ABBG(<�H"�E�A�D `
DAA,h�<#��E�C
D��G��E��
H@���'�F�H�E �D(�D0�DPu
0A(A BBBD@��*�F�E�F �G(�D0�N��
0A(A BBBE �,�)H`<�(,�!P�D,�E�U$l�H,�CE�I�G gAA$��p,�IE�C�R lAA���,�E�S,��,�L�D�F �]ABJ�����,�B(�8-�aK�D�I {AAK��8H�|-��F�E�D �D(�D@^
(A ABBE8��@.�F�B�A �D(�D@{
(A ABBF���.� ��.�!��.�2K�i
D�1�E�S �1�!4�01�DE�h
COT�`1�JHd
DYt��1�!���1�!���1� (���1�}F�I�A �iAB�(2�� 2�HN�(2� ��3�4��3�H��3�\��3�p��3����3�PL�C��4�+,��04�E�C
HDR ZGA
H��4�+E�e<��4��F�A�A �G@X
 AABEkHNP[HA@ @�d5��A�p
Or
Ed� 6�>E�x$��D6�LE�D�D |AA��l6�7EAK0��6��B�A�A �D@�
 AABE��L8�+EAK@�`8�F�B�B �A(�D0�DP�
0A(A BBBEHX��9�,F�B�B �B(�D0�A8�D`�
8A0A(B BBBEX���;�KB�B�B �A(�A0�D@�
0A(A BBBIc
0A(A BBBE��=�E�Y��=�0��=�D��=�X��=�(l��=�E�A�G0�
CAA��>� E�V(�� >�E�A�G0b
AAG��>� E�V���>�#E�]��>�KE�j
A4�?�(L�[$P�?�HE�C�G vAA$x�<?�=E�C�G kAA8��T?�F�D�A �A(�G0B
(C ABBCH��?�F�B�B �B(�A0�A8�D@�
8C0A(B BBBEH(�A�F�B�B �B(�A0�A8�D@�
8C0A(B BBBG$t`C�5E�C�G cAAP�xC�F�A�H �e
CBGD(V0a(E A
CBJa
ABD�4D�?L�S
A^TD�?L�S
A^0tD�?L�S
A^0P�D�E�A�G b
CAEKCA@��D��F�B�B �A(�A0�G@�
0A(A BBBA��E�!E�[(��E�jE�D�D H
CAG�E�KE�u
FH,(F��F�B�B �B(�A0�A8�G��
8A0A(B BBBHLx�I�F�B�B �B(�A0�A8�G�2
8A0A(B BBBG�|M��L�HN��F�B�B �B(�D0�A8�G��
8A0A(B BBBGL,�S�F�E�B �B(�A0�A8�G��
8A0A(B BBBK8|Y��F�B�A �D(�D`~
(A ABBK��Y�,E�f��Y�,E�f$��Y�JE�D�D xCAZ�,E�f(40Z�WF�D�A �AHB$`dZ�HE�D�D vCA$��Z�HE�D�D vCA��Z���Z�'E�a��Z�0��Z�F�A�D �D@s
 AABJ(<[�'0<X[�F�A�A �G@a
 AABDp�[�'(��[�WF�D�A �AHB$�\�HE�D�D vCA$�<\�HE�D�D vCAd\�'E�a(x\�WF�D�A �AHB$H�\�HE�D�D vCA$p�\�HE�D�D vCA��\�'E�a(�]�WF�D�A �AHB$�D]�HE�D�D vCA$l]�HE�D�D vCA0�]�'E�a(L�]�WF�D�A �AHB$x�]�HE�D�D vCA$�^�HE�D�D vCA�,^�'E�a(�@^�WF�D�A �AHB$t^�HE�D�D vCA$8�^�HE�D�D vCA`�^�'E�a(|�^�WF�D�A �AHB$�_�HE�D�D vCA$�4_�HE�D�D vCA�\_�'E�a(	p_�WF�D�A �AHB$@	�_�HE�D�D vCA$h	�_�HE�D�D vCA�	�_�'E�a(�	`�WF�D�A �AHB$�	<`�HE�D�D vCA$
d`�HE�D�D vCA(
�`�'E�a(D
�`�WF�D�A �AHB$p
�`�HE�D�D vCA$�
�`�HE�D�D vCA�
$a�'E�a(�
8a�WF�D�A �AHB$la�HE�D�D vCA$0�a�HE�D�D vCAX�a�'E�a(t�a�WF�D�A �AHB$�b�HE�D�D vCA$�,b�HE�D�D vCA�Tb�'E�a0hb�ZF�D�A �DP�
 AABE0@�c�sF�D�A �DP�
 AABE(t�d�WF�D�A �AHB$�e�HE�D�D vCA$�<e�HE�D�D vCA�de�'E�a(
xe�WF�D�A �AHB$8
�e�HE�D�D vCA$`
�e�HE�D�D vCA�
�e�'E�a(�
f�WF�D�A �AHB$�
Df�HE�D�D vCA$�
lf�HE�D�D vCA �f�'E�a(<�f�WF�D�A �AHB$h�f�HE�D�D vCA$�g�HE�D�D vCA�,g�'E�a(�@g�WF�D�A �AHB$tg�HE�D�D vCA$(�g�HE�D�D vCAP�g�'E�a(l�g�WF�D�A �AHB$�h�HE�D�D vCA$�4h�HE�D�D vCA�\h�'E�a$ph�DE�D�D rCA,�h�#E�]$H�h�DE�D�D rCAp�h�#E�]$��h�E�v
mA
GN@�pi�D{I D(B0J8D@SF
KDD J(D0SF
AD��i�UB�D�A �A(�D@J
(A ABBD�HAPRHE@L@k�F�D�B �B(�A0�A8�J��
8A0A(B BBBAH�Dp�QB�B�E �E(�A0�C8�D@z
8C0A(B BBBD�Xq��dq� pq�A�D@c
AG((�r�UF�A�A �IAB$Ts�?E�A�G oAAL|(s�F�B�A �A(�G0P
(C ABBG_
(C ABBI4��s�vE�A�G r
CAE_
CAEL�s�F�B�A �A(�G0P
(C ABBG_
(C ABBI4T0t�vE�A�G r
CAE_
CAE8�xt�F�B�A �D(�D0M
(C ABBJ4��t�E�A�G o
CAHj
CAJHDu�F�B�A �D(�D0s
(C ABBDa
(C ABBG4L�u�^E�A�G X
CAG_
CAEH��u�F�B�A �D(�D0s
(C ABBDa
(C ABBG4��u�^E�A�G X
CAG_
CAEHv�GB�G�B �B(�D0�A8�D`�
8A0A(B BBBET x�h,x�|8x�AAR(�<x��E�A�D0a
AAC��x�BL�p
A(�$y��E�A�G0�
AAI�y�VL�t
H((z��E�A�G0�
AAHT�z�~E�e
FHt0{��F�B�B �B(�A0�A8�Dp�
8A0A(B BBBDH��}�	F�B�B �B(�A0�D8�DP}
8A0A(B BBBDH��B�B�B �B(�A0�A8�Dp�
8A0A(B BBBEX��l���@���B�B�B �A(�D0�D`�
0A(A BBBF�Ѕ��܅�H���)F�B�B �B(�A0�A8�D@�
8C0A(B BBBEH8̇�LB�B�B �B(�A0�A8�D`�
8A0A(B BBBG�Љ��܉�(���E�A�G0f
AAKL�܊�lB�B�B �A(�H0�
(A BBBKt
(A BBBE(���<��P��y�qF�`�<p����a�M�I a
D�A�KPD�A�S ��H�D��PB�B�B �B(�A0�A8�Dp�
8A0A(B BBBE�H��T��H$`��B�B�B �B(�A0�A8�Dp
8A0A(B BBBJp4���@��H�L��0B�B�B �B(�A0�A8�Dp�
8A0A(B BBBA�0���<��HH���B�B�B �B(�A0�A8�D`
8A0A(B BBBGX̘�lؘ����AAR���AAR,���yF�D�A �C
HBH4�<��nE�A�G t
AAE^
AAA t��AAR(<x��[E�A�D G
CAA,h���fF�A�A �U
ABAH���F�B�B �B(�A0�A8�DP"
8A0A(B BBBB<����A�G�D n(N0IAAE r
MFE<$���vF�A�D �D0�
 AABD8J@W8A0dН� E�V<�ԝ��F�A�D �D0
 AABGG8J@W8A0�d�� E�V<�h��UF�A�D �D0�
 AABD8J@W8A0��� E�V<8���F�A�D �D0�
 AABGG8J@W8A0x��� E�VL���k
B�B�B �B(�A0�A8�D��
8A0A(B BBBG� ��8����F�B�A �A(�D@�
(A ABBB4���UHH���B�B�B �E(�D0�D8�Dp�
8A0A(B BBBI�����̰�@�ذ�B�B�E �D(�D0�Dpl
0A(A BBBG ��� ���H( ���)B�B�E �E(�A0�D8�D��
8A0A(B BBBDt ���� ���H� ���B�E�E �B(�D0�A8�D��
8A0A(B BBBJ� ��� ���H!��JB�E�E �B(�D0�A8�Dp*
8A0A(B BBBE\!��p!��H�! ��wB�E�B �E(�A0�A8�Dp�
8A0A(B BBBK�!T���!`��H�!l��B�H�B �B(�D0�A8�Dp
8A0A(B BBBGD" ��X",��8l"8��F�B�A �A(�DP$
(A ABBH@�"��F�B�B �A(�A0�GP�
0A(A BBBB@�"���]F�B�B �A(�A0�GP
0A(A BBBG@0#���}F�B�B �A(�A0�GP2
0A(A BBBC@t#0��JF�B�B �A(�A0�GP5
0A(A BBBHH�#<���B�E�B �E(�D0�A8�Gp�
8A0A(B BBBF4$���F�A�A �T
CBG_CB<$(��qE�@
K`4\$���F�A�A �T
CBG_CB�$���qE�@
K`8�$@���F�A�D �R
ABH`
ABE�$���	\%���\P�B�E �B(�A0�A8�D�*
8A0A(B BBBE�N�[�A�0d%���LB�C�E �D@H
 AABFH�%���OB�B�B �E(�D0�D8�D��
8A0A(B BBBG�%����%���&��L &���B�E�J �B(�A0�D8�G�u
8A0A(B BBBB@p&���E�A�D X(P0d(D M
CAEO
CAA�&@��	�&<��	�&8��	L�&4��CB�B�B �B(�A0�A8�D�
8A0A(B BBBD@'4��vStR\'���p'����'����'����'����'����'����'����'���(��$(��L8(���B�B�B �B(�D0�D8�D�:
8A0A(B BBBHL�(����B�B�B �B(�D0�D8�D�*
8A0A(B BBBHL�(,��1B�B�B �E(�D0�A8�D� 
8A0A(B BBBBL()��B�B�B �B(�D0�D8�D�"
8A0A(B BBBHHx)���B�B�B �E(�D0�D8�D`�
8A0A(B BBBA�)���)���H�)���B�E�B �B(�A0�D8�Dp�
8A0A(B BBBC8*���L*���H`*���WB�B�E �B(�D0�A8�Dp�
8A0A(B BBBD�*���*��@�*��JF�B�B �A(�A0�GPb
0A(A BBBCH+��B�E�B �E(�D0�A8�DP�
8A0A(B BBBHd+0�x+<�@�+H�F�B�B �A(�A0�G@b
0A(A BBBC0�+�F�A�A �G0o
 AABA8,`�F�B�A �A(�G@x
(A ABBA8@,��F�B�A �A(�G@x
(A ABBA8|,h��F�B�A �A(�G@y
(A ABBH8�,��F�B�A �A(�G@`
(A ABBI8�,p	�F�B�A �A(�G@`
(A ABBI00-�	�F�A�A �G0x
 AABAHd-P
�B�B�B �B(�A0�A8�Dp�
8A0A(B BBBA�-$
��-0
�0�-<
�F�A�A �D0y
 AABAH.�
�B�E�E �B(�D0�A8�DP�
8A0A(B BBBKX.�l.(�@�.4��F�B�B �A(�A0�G@�
0A(A BBBD@�.���F�B�B �A(�A0�G@�
0A(A BBBDH/L�{F�B�B �B(�A0�D8�D`,
8A0A(B BBBEHT/��TB�B�B �B(�A0�A8�DpJ
8A0A(B BBBF�/���/��L�/��B�B�B �B(�D0�A8�G�]
8A0A(B BBBE0��,0��L@0�PB�B�B �B(�A0�A8�D�B
8A0A(B BBBF�0��0�L�0�B�E�B �B(�D0�A8�D�I
8A0A(B BBBI1\ �1h �L01t �B�B�B �B(�A0�A8�D�J
8A0A(B BBBFL�14%�B�B�B �B(�D0�D8�D�j
8A0A(B BBBH8�1*��F�B�A �A(�DP
(A ABBG02�+�F�A�A �G0f
 AABG0@2�,�F�A�A �G0{
 AABB0t2-��F�A�A �G0�
 AABH@�2�-�F�B�B �A(�A0�GP�
0A(A BBBC�28/� E�VX3</��F�B�B �B(�A0�A8�Gpn
8A0A(B BBBCYxJ�WxApd3�1� E�VX�3�1��F�B�B �B(�D0�A8�D`Z
8A0A(B BBBGYhJpWhA`�3H4� E�VT�3L4�xF�B�B �B(�A0�D8�D`�
8A0A(B BBBDAhJpWhA`P4t6� E�VLl4x6��F�B�B �A(�A0�GP�
0A(A BBBGIXJ`WXAP�48� E�VL�48��F�B�B �A(�D0�DP
0A(A BBBDIXJ`WXAP(5�9� E�VD5�9�D h
A`5T:�t5`:��5l:��5x:��5�:��5�:��5�:��5�:�6�:�6�:�(6�:�8<6�:��F�B�A �A(�G@m
(A ABBDHx6l;�F�B�B �B(�A0�A8�G`W
8A0A(B BBBJ8�6�=�F�B�A �A(�G@w
(A ABBB874>�F�B�A �D(�D@�
(A ABBA\<7�>�2B�B�E �E(�A0�D8�D�R
8A0A(B BBBE�[�Q�A��7�C��7�C�[�7�C��7�C��7D�8D�@8 D�*F�B�B �A(�A0�GP
0A(A BBBG@X8G�}F�B�B �A(�A0�GP9
0A(A BBBD@�8HJ�F�B�B �A(�A0�GPb
0A(A BBBC(�8$L�E�A�G0u
AADH9�L�F�B�B �B(�D0�A8�D��
8A0A(B BBBDLX9lR�RF�B�B �B(�A0�A8�G�d
8A0A(B BBBEH�9|X�F�B�B �B(�A0�A8�D��
8A0A(B BBBDL�9�Z�F�B�B �E(�A0�A8�G��
8A0A(B BBBA@D:0`��F�B�B �A(�A0�G`�
0A(A BBBKH�:�`�'F�B�B �B(�A0�A8�G`�
8A0A(B BBBC@�:�a�F�B�B �A(�A0�G@�
0A(A BBBJ8;�b�F�B�A �A(�G@k
(A ABBF0T;pc�F�A�A �G0f
 AABA@�;�c�F�B�B �A(�A0�GP�
0A(A BBBA8�;(d�F�B�A �A(�G@z
(A ABBA0<�d�zF�A�A �G0a
 AABA8<<�d�F�B�A �A(�G@z
(A ABBA0x<<e�zF�A�A �G0a
 AABA�<�e�	8�<�e�F�B�A �A(�G`�
(A ABBC�<f�'@=$f�F�B�B �A(�A0�GP�
0A(A BBBA8T=�f�F�B�A �A(�G@z
(A ABBA0�=�f�zF�A�A �G0a
 AABA8�=@g�F�B�A �A(�G@z
(A ABBA0>�g�zF�A�A �G0a
 AABA@4>�g�F�B�B �A(�A0�GP�
0A(A BBBA8x>\h�F�B�A �A(�G@z
(A ABBA0�>�h�zF�A�A �G0a
 AABA8�>i�F�B�A �A(�G@z
(A ABBA0$?pi�zF�A�A �G0a
 AABA@X?�i�F�B�B �A(�A0�GP�
0A(A BBBA8�?(j�F�B�A �A(�G@z
(A ABBA0�?�j�zF�A�A �G0a
 AABA8@�j�F�B�A �A(�G@z
(A ABBA0H@<k�zF�A�A �G0a
 AABA@|@�k�F�B�B �A(�A0�GP�
0A(A BBBA8�@�k�F�B�A �A(�G@z
(A ABBA0�@Xl�zF�A�A �G0a
 AABA80A�l�F�B�A �A(�G@z
(A ABBA0lAm�zF�A�A �G0a
 AABA@�ATm�F�B�B �A(�A0�GP�
0A(A BBBA8�A�m�F�B�A �A(�G@z
(A ABBA0 B$n�zF�A�A �G0a
 AABA8TBpn�F�B�A �A(�G@z
(A ABBA0�B�n�zF�A�A �G0a
 AABA@�B o�F�B�B �A(�A0�GP�
0A(A BBBA8C�o�F�B�A �A(�G@z
(A ABBA0DC�o�zF�A�A �G0a
 AABA8xC<p�F�B�A �A(�G@z
(A ABBA0�C�p�zF�A�A �G0a
 AABA@�C�p�F�B�B �A(�A0�GP�
0A(A BBBA8,DXq�F�B�A �A(�G@z
(A ABBA0hD�q�zF�A�A �G0a
 AABA8�Dr�F�B�A �A(�G@z
(A ABBA0�Dlr�zF�A�A �G0a
 AABA@E�r�F�B�B �A(�A0�GP�
0A(A BBBA8PE$s�F�B�A �A(�G@z
(A ABBA0�E�s�zF�A�A �G0a
 AABA8�E�s�F�B�A �A(�G@z
(A ABBA0�E8t�zF�A�A �G0a
 AABA@0F�t�F�B�B �A(�A0�GP�
0A(A BBBA8tF�t�F�B�A �A(�G@z
(A ABBA0�FTu�zF�A�A �G0a
 AABA8�F�u�F�B�A �A(�G@z
(A ABBA0 Gv�zF�A�A �G0a
 AABA@TGPv�F�B�B �A(�A0�GP�
0A(A BBBA8�G�v�F�B�A �A(�G@z
(A ABBA0�G w�zF�A�A �G0a
 AABA8Hlw�F�B�A �A(�G@z
(A ABBA0DH�w�zF�A�A �G0a
 AABA@xHx�F�B�B �A(�A0�GP�
0A(A BBBA8�H�x�F�B�A �A(�G@z
(A ABBA0�H�x�zF�A�A �G0a
 AABA8,I8y�F�B�A �A(�G@z
(A ABBA0hI�y�zF�A�A �G0a
 AABA@�I�y�F�B�B �A(�A0�G`�
0A(A BBBB@�IT{�F�B�B �A(�A0�GP�
0A(A BBBA8$J�{�F�B�A �A(�G@z
(A ABBA0`J$|�zF�A�A �G0a
 AABA8�Jp|�F�B�A �A(�G@z
(A ABBA0�J�|�zF�A�A �G0a
 AABA@K }�F�B�B �A(�A0�GP�
0A(A BBBA8HK�}�F�B�A �A(�G@z
(A ABBA0�K�}�zF�A�A �G0a
 AABA8�K<~�F�B�A �A(�G@z
(A ABBA0�K�~�zF�A�A �G0a
 AABA@(L�~�F�B�B �A(�A0�GP�
0A(A BBBA8lLX�F�B�A �A(�G@z
(A ABBA0�L��zF�A�A �G0a
 AABA8�L��F�B�A �A(�G@z
(A ABBA0Ml��zF�A�A �G0a
 AABA@LM���F�B�B �A(�A0�GP�
0A(A BBBA8�M$��F�B�A �A(�G@z
(A ABBA0�M���zF�A�A �G0a
 AABA8Nԁ�F�B�A �A(�G@z
(A ABBA0<N8��zF�A�A �G0a
 AABA@pN���F�B�B �A(�A0�GP�
0A(A BBBA8�N��F�B�A �A(�G@z
(A ABBA0�NT��zF�A�A �G0a
 AABA8$O���F�B�A �A(�G@z
(A ABBA0`O��zF�A�A �G0a
 AABA@�OP��F�B�B �A(�A0�GP�
0A(A BBBA8�O���F�B�A �A(�G@z
(A ABBA0P ��zF�A�A �G0a
 AABA8HPl��F�B�A �A(�G@z
(A ABBA0�PЅ�zF�A�A �G0a
 AABA0�P��vF�A�A �G0]
 AABA0�Ph��vF�A�A �G0]
 AABAD Q���UB�D�A �A(�D@G
(A ABBG�HAPRHE@LhQ̇�B�B�B �E(�A0�D8�D�#
8A0A(B BBBG�Q���Q(���Q4���Q@��RL��RX��0Rd��DRp��XR|��lR����R���@�R���F�B�B �A(�D0�DP*
0A(A BBBKH�Rl��WB�B�B �B(�A0�D8�GpE
8A0A(B BBBE$S���8S���HLS���SB�B�E �B(�D0�A8�Gp�
8A0A(B BBBA�S����S���H�Sĕ��B�E�E �E(�A0�A8�Dp
8A0A(B BBBDTx�� T���H4T���dB�B�B �B(�D0�D8�Dp+
8A0A(B BBBG�T����T���H�T̛�3B�E�B �E(�A0�D8�D`�
8A0A(B BBBC�T���U̞�HU؞��B�E�E �B(�A0�D8�D`
8A0A(B BBBGhUl��|Ux��L�U����B�B�B �B(�D0�D8�D�J
8A0A(B BBBHL�U��B�B�B �E(�D0�A8�D�
8A0A(B BBBB80V��F�B�A �A(�G@b
(A ABBG0lVx��F�A�A �G0b
 AABK4�Vd��F�A�A �m
HDOJABX�V̬�F�B�B �B(�A0�D8�D`O
8A0A(B BBBBYhJpWhA`4W0�� E�VPPW4��F�B�B �D(�A0�D@:
0A(A BBBKWHJPWHA@�W��� E�VL�W���VF�B�B �A(�D0�D@�
0A(A BBBHHJPWHA@X��� E�V@,X����F�B�B �D(�A0�G@�
0A(A BBBA8pXT��F�E�A �A(�G0�
(C ABBH8�Xش�F�B�D �A(�G0g
(C ABBE8�X<��F�G�A �D(�D@
(A ABBE8$Y��F�G�A �D(�D@
(A ABBEL`Yĸ��F�D�B �B(�A0�A8�G�U
8A0A(B BBBJ,�Yd��F�D�A ��
FBH,�YT��*F�D�A ��
FBK@ZT��B�B�B �D(�A0�D@�
0A(A BBBB8TZ���F�B�D �A(�D@�
(A ABBK<�Z���F�B�B �H(�A0�L
(A BBBJL�Zt���F�B�B �B(�A0�A8�D�p
8A0A(B BBBDH [���F�B�B �B(�A0�D8�Dp.
8A0A(B BBBCHl[����F�B�B �E(�A0�A8�D��
8A0A(B BBBGL�[\��?F�B�B �B(�A0�D8�D�E
8A0A(B BBBD<\L���F�B�I �A(�A0�]
(A BBBILH\���?F�B�B �B(�A0�D8�D�W
8A0A(B BBBJ@�\���MF�B�B �A(�D0�D@�
0A(A BBBFL�\���B�E�E �E(�D0�A8�G�u
8A0A(B BBBD0,]8��F�A�D �D0m
 AABA`]���	t]���4E�n�]����]���2E�l�]���L�]���F�B�B �B(�D0�A8�D�
8A0A(B BBBEH$^���	F�B�B �B(�A0�A8�GP�
8A0A(B BBBG8p^d��F�B�B �H(�A0�x
(A BBBF8�^���F�B�B �H(�A0�x
(A BBBFH�^l���F�B�B �B(�A0�A8�G@D
8C0A(B BBBKH4_����F�B�B �B(�A0�A8�G@D
8C0A(B BBBKH�_t���F�B�B �B(�A0�A8�G@D
8C0A(B BBBKH�_����F�B�B �B(�A0�A8�G@D
8C0A(B BBBKH`|���F�B�B �B(�A0�A8�G@D
8C0A(B BBBKHd`���F�B�B �B(�A0�A8�G@D
8C0A(B BBBKH�`����F�B�B �B(�A0�A8�G@D
8C0A(B BBBKH�`���F�B�B �B(�A0�A8�G@D
8C0A(B BBBKHa���	H\a����F�B�B �B(�A0�A8�G@D
8C0A(B BBBKH�a���F�B�B �B(�A0�A8�G@D
8C0A(B BBBKH�a����F�B�B �B(�A0�A8�G@D
8C0A(B BBBKH@b���F�B�B �B(�A0�A8�G@D
8C0A(B BBBKH�b����F�B�B �B(�A0�A8�G@D
8C0A(B BBBKH�b���F�B�B �B(�A0�A8�G@D
8C0A(B BBBKH$c����F�B�B �B(�A0�A8�G@D
8C0A(B BBBKHpc$���F�B�B �B(�A0�A8�G@D
8C0A(B BBBKH�c����F�B�B �B(�A0�A8�G@D
8C0A(B BBBKHd,���F�B�B �B(�A0�A8�G@D
8C0A(B BBBK8Td���F�B�B �H(�A0�|
(A BBBJ8�d4��F�B�B �H(�A0�|
(A BBBJ8�d���F�B�B �H(�A0�|
(A BBBJ8e<��F�B�B �H(�A0�|
(A BBBJ8De���F�B�B �H(�A0�|
(A BBBJ8�eD��F�B�B �H(�A0�|
(A BBBJ8�e���F�B�B �H(�A0�|
(A BBBJ8�eL��F�B�B �H(�A0�|
(A BBBJ84f���F�B�B �H(�A0�|
(A BBBJ8pfT��F�B�B �H(�A0�|
(A BBBJ8�f���F�B�B �H(�A0�|
(A BBBJ�f\��	8�fX��F�B�B �H(�A0�|
(A BBBJ88g���F�B�B �H(�A0�|
(A BBBJ8tg`��F�B�B �H(�A0�|
(A BBBJ8�g���F�B�B �H(�A0�|
(A BBBJ8�gh��F�B�B �H(�A0�|
(A BBBJ8(h���F�B�B �H(�A0�|
(A BBBJ8dhp��F�B�B �H(�A0�|
(A BBBJH�h����F�B�B �B(�A0�A8�G@N
8C0A(B BBBA8�hx���F�B�B �H(�D0�~
(H BBBF(i��	<<i��F�B�B �H(�A0�A
(A BBBE8|i����F�B�A �A(�G0P
(C ABBGH�i,��F�B�B �B(�A0�D8�DP
8A0A(B BBBG<jp���F�B�B �H(�A0�J
(A BBBDLDj��sF�B�B �A(�D0��
(H BBBCA
(P BBBIH�j0��`F�B�B �B(�A0�A8�G@R
8C0A(B BBBEH�jD��`F�B�B �B(�A0�A8�G@R
8C0A(B BBBEH,kX��`F�B�B �B(�A0�A8�G@R
8C0A(B BBBEHxkl��`F�B�B �B(�A0�A8�G@R
8C0A(B BBBEH�k���`F�B�B �B(�A0�A8�G@R
8C0A(B BBBEHl���`F�B�B �B(�A0�A8�G@R
8C0A(B BBBEH\l���`F�B�B �B(�A0�A8�G@R
8C0A(B BBBEH�l���`F�B�B �B(�A0�A8�G@R
8C0A(B BBBEH�l��`F�B�B �B(�A0�A8�G@R
8C0A(B BBBEH@m��`F�B�B �B(�A0�A8�G@R
8C0A(B BBBE�m��	H�m��`F�B�B �B(�A0�A8�G@R
8C0A(B BBBEH�m�`F�B�B �B(�A0�A8�G@R
8C0A(B BBBEH8n�`F�B�B �B(�A0�A8�G@R
8C0A(B BBBEH�n0�`F�B�B �B(�A0�A8�G@R
8C0A(B BBBEH�nD�`F�B�B �B(�A0�A8�G@R
8C0A(B BBBEHoX�`F�B�B �B(�A0�A8�G@R
8C0A(B BBBEHhol	�`F�B�B �B(�A0�A8�G@R
8C0A(B BBBEH�o�
�`F�B�B �B(�A0�A8�G@R
8C0A(B BBBELp���F�B�B �A(�H0�u
(A BBBAU
(C BBBBLPp$��F�B�B �A(�H0�u
(A BBBAU
(C BBBBH�p��F�B�B �B(�A0�D8�D`
8A0A(B BBBB<�p�
��F�B�B �A(�D0�U
(H BBBF<,q���F�B�B �A(�D0�U
(H BBBF<lq8��F�B�B �A(�D0�U
(H BBBF<�q���F�B�B �A(�D0�U
(H BBBF<�qx��F�B�B �A(�D0�U
(H BBBF<,r��F�B�B �A(�D0�U
(H BBBF<lr���F�B�B �A(�D0�U
(H BBBF<�rX��F�B�B �A(�D0�U
(H BBBF<�r���F�B�B �A(�D0�U
(H BBBF<,s���F�B�B �A(�D0�U
(H BBBF<ls8��F�B�B �A(�D0�U
(H BBBF<�s���F�B�B �A(�D0�U
(H BBBF<�sx��F�B�B �A(�D0�U
(H BBBF<,t��F�B�B �A(�D0�U
(H BBBF<lt���F�B�B �A(�D0�U
(H BBBF<�tX��F�B�B �A(�D0�U
(H BBBF<�t���F�B�B �A(�D0�U
(H BBBF<,u���F�B�B �A(�D0�U
(H BBBFHlu8�F�B�B �B(�A0�A8�G@_
8C0A(B BBBHH�u���F�B�B �B(�A0�D8�D@\
8C0A(B BBBCHv���F�B�B �B(�A0�D8�D@\
8C0A(B BBBCHPv4��F�B�B �B(�A0�D8�D@\
8C0A(B BBBCH�v���F�B�B �B(�A0�D8�D@\
8C0A(B BBBCH�v|��F�B�B �B(�A0�D8�D@\
8C0A(B BBBCH4w ��F�B�B �B(�A0�D8�D@\
8C0A(B BBBCH�w���F�B�B �B(�A0�D8�D@\
8C0A(B BBBCH�wh��F�B�B �B(�A0�D8�D@\
8C0A(B BBBCHx��F�B�B �B(�A0�D8�D@\
8C0A(B BBBCHdx���F�B�B �B(�A0�D8�D@\
8C0A(B BBBCH�xT ��F�B�B �B(�A0�D8�D@\
8C0A(B BBBCH�x� ��F�B�B �B(�A0�D8�D@\
8C0A(B BBBCHHy�!��F�B�B �B(�A0�D8�D@\
8C0A(B BBBCH�y@"��F�B�B �B(�A0�D8�D@\
8C0A(B BBBCH�y�"��F�B�B �B(�A0�D8�D@\
8C0A(B BBBC,z�#�	H@z�#��F�B�B �B(�A0�D8�D@\
8C0A(B BBBCH�z($��F�B�B �B(�A0�D8�D@\
8C0A(B BBBCH�z�$��F�B�B �B(�A0�D8�D@\
8C0A(B BBBC<${p%��F�B�B �H(�A0�V
(A BBBH8d{&��F�B�A �A(�G0M
(C ABBJ<�{�&��F�B�B �A(�H0�V
(A BBBH<�{�'�<F�B�B �H(�A0�^
(A BBBHH |�(�F�B�B �B(�A0�A8�GP`
8C0A(B BBBGHl|X)�F�B�B �B(�A0�A8�GP`
8C0A(B BBBGH�|,*�lF�B�B �B(�A0�A8�G@`
8C0A(B BBBGH}P+�4F�B�B �B(�A0�A8�G`�
8A0A(B BBBC8P}D,�F�B�A �D(�D0{
(C ABBDH�}-�$F�B�B �B(�A0�A8�G`�
8A0A(B BBBFH�}�-�$F�B�B �B(�A0�A8�G`�
8A0A(B BBBFH$~�.�$F�B�B �B(�A0�A8�G`�
8A0A(B BBBFHp~�/�$F�B�B �B(�A0�A8�G`�
8A0A(B BBBFH�~�0�$F�B�B �B(�A0�A8�G`�
8A0A(B BBBFH�1�$F�B�B �B(�A0�A8�G`�
8A0A(B BBBFHTp2�$F�B�B �B(�A0�A8�G`�
8A0A(B BBBF�T3�	H�P3�$F�B�B �B(�A0�A8�G`�
8A0A(B BBBFH�44�$F�B�B �B(�A0�A8�G`�
8A0A(B BBBFHL�5�$F�B�B �B(�A0�A8�G`�
8A0A(B BBBFH���5�$F�B�B �B(�A0�A8�G`�
8A0A(B BBBFH��6�$F�B�B �B(�A0�A8�G`�
8A0A(B BBBFH0��7�$F�B�B �B(�A0�A8�G`�
8A0A(B BBBFH|��8�$F�B�B �B(�A0�A8�G`�
8A0A(B BBBFHȁ�9�$F�B�B �B(�A0�A8�G`�
8A0A(B BBBFH�p:�$F�B�B �B(�A0�A8�G`�
8A0A(B BBBFH`�T;�$F�B�B �B(�A0�A8�G`�
8A0A(B BBBFH��8<�$F�B�B �B(�A0�A8�G`�
8A0A(B BBBF@��=�F�B�B �A(�A0�G@�
0A(A BBBG@<��=�F�B�B �A(�A0�G@�
0A(A BBBG@���>�F�B�B �A(�A0�G@�
0A(A BBBG@��F�B�B �A(�A0�G@�
0A(A BBBG@��@�F�B�B �A(�A0�G@�
0A(A BBBG@L�hA�F�B�B �A(�A0�G@�
0A(A BBBG@��DB�F�B�B �A(�A0�G@�
0A(A BBBG@Ԅ C�F�B�B �A(�A0�G@�
0A(A BBBG@��C�F�B�B �A(�A0�G@�
0A(A BBBG@\��D�F�B�B �A(�A0�G@�
0A(A BBBG@���E�F�B�B �A(�A0�G@�
0A(A BBBG@��F�F�B�B �A(�A0�G@�
0A(A BBBG@(�lG�F�B�B �A(�A0�G@�
0A(A BBBG@l�HH�F�B�B �A(�A0�G@�
0A(A BBBG@��$I�F�B�B �A(�A0�G@�
0A(A BBBG@�J�F�B�B �A(�A0�G@�
0A(A BBBG@8��J�F�B�B �A(�A0�G@�
0A(A BBBG@|��K�F�B�B �A(�A0�G@�
0A(A BBBGL���L�F�B�B �H(�A0�O
(A BBBGV
(C BBBAL�DM�F�B�B �H(�A0�O
(A BBBGV
(C BBBAL`��M�F�B�B �A(�D0�&
(F BBBGI
(H BBBA8��TO�%F�B�A �A(�GP�
(A ABBC�HP�'L�dP�F�B�B �A(�H0�H
(C BBBDi
(C BBBF<P�$Q�F�B�B �H(�A0�K
(A BBBKL���Q�F�B�B �H(�A0�W
(A BBBGW
(A BBBJ@��R�DF�B�B �A(�D0�D`�
0A(A BBBEL$��S��F�B�B �A(�D0��
(H BBBA�
(F BBBF@t�PU�	F�B�B �A(�D0�DPn
0A(A BBBGH��W�,B�B�B �E(�A0�A8�Gp
8A0A(B BBBG�[��[�,�[�@�$[�T�0[�h�<[�|�H[���T[���`[���l[�̋x[�@��[�	F�B�B �A(�D0�DPw
0A(A BBBF $�P]�E�G r
AA H�<^��E�G �
AG\l��^�B�B�E �E(�A0�D8�D�
8A0A(B BBBC��\�Q�A�̌Hc��Tc�[��c���c���c�0��c�LD��c�NB�B�B �B(�A0�D8�G�
8A0A(B BBBG���g����g����g�Ѝ�g��h���h��h� �$h�4�0h�H�<h�\�Hh�@p�Th��F�B�B �A(�D0�D@�
0A(A BBBGL��j�<B�B�B �B(�D0�A8�G�
8A0A(B BBBG��m���m�,�n�@�n�T� n�h�,n�|�8n���Dn���Pn���\n�̏hn�L�tn�TB�B�B �E(�A0�A8�G�
8A0A(B BBBG0��r�D��r�X��r�l��r����r����r����r����r�А�r���r����r�,�s�E�G U(M0U(A @
AK<��s�	P��s�	d��s�	<x��s�F�B�B �H(�D0�v
(H BBBF8���t��B�B�D �A(�D0�
(A ABBH\��v�B�B�E �E(�A0�D8�D�(
8A0A(B BBBG��[�Q�A�T��z�h��z�[|�8{���D{���P{���\{�`̒h{�`F�B�B �H(�D0�I
(H BBBCO
(H BBBC�
(H BBBFL0�d|�\B�B�B �B(�D0�A8�G�
8A0A(B BBBG��t�����������������Г�������������Ȁ� �Ԁ�4���H���L\����B�B�E �E(�A0�A8�D�
8A0A(B BBBG��8����D��ԔP���\����h���t��$����8����L����`����t����@�����F�B�B �A(�A0�G@�
0A(A BBBC@̕��uF�B�B �A(�A0�G@�
0A(A BBBD\�D���B�B�E �B(�D0�A8�D�&
8A0A(B BBBD �\�Q�A�p�Č���Ќ�[������(����4��Ԗ@��H�L��F�B�B �B(�D0�A8�G@�
8C0A(B BBBA(4� ��E�A�G0�
AAH@`����F�B�B �A(�D0�D@
0A(A BBBCT�����)F�B�B �B(�A0�A8�GPt
8A0A(B BBBEoXB`QXEP8������F�B�D �A(�D0�
(A ABBKL8���F�B�B �A(�A0�G@r
0A(A BBBCgHBPQHE@T����)F�B�B �B(�A0�A8�GPw
8A0A(B BBBJgXB`QXEP0�Ĕ�BF�A�A �G@�
 AABH ���PE�G �
AK`8��� F�B�B �A(�D0��
(P BBBFM
(F BBBGm
(F BBBAX��Ș�IF�B�B �A(�D0�D@zHQPQHN@d
0A(A BBBGwHBPQHE@�����	����	 ����	L4�����F�B�B �H(�D0�e
(H BBBGN
(H BBBD`��P��F�B�B �A(�H0��
(A BBBHQ
(A BBBHr
(A BBBA8���F�B�A �A(�G@L
(A ABBET$���F�B�B �B(�A0�A8�GP
8A0A(B BBBB�XB`QXDPT|�H���F�B�B �B(�A0�A8�GP�
8A0A(B BBBG�XB`QXDP@ԛ����F�B�B �A(�A0�G@�
0A(A BBBG<�\��F�B�B �A(�D0��
(H BBBF<X�<��F�B�B �A(�H0��
(A BBBFH����F�B�B �B(�A0�A8�GP�
8A0A(B BBBE@�p��UF�B�B �A(�A0�G@
0A(A BBBDH(�����F�B�B �B(�A0�A8�GP�
8A0A(B BBBG(t� ��pE�A�G0�
AAH@��d��RF�B�B �A(�D0�D@
0A(A BBBFT����=F�B�B �B(�A0�A8�GP�
8A0A(B BBBHdXB`QXDP@<�h��MF�B�B �A(�A0�G@
0A(A BBBA0��t��cF�A�A �G@�
 AABDH�����jF�B�B �B(�A0�A8�GP)
8A0A(B BBBHX�Զ�FF�B�B �B(�A0�A8�Gp�
8A0A(B BBBDmxB�QxDp@\�ȷ�F�B�B �A(�D0�D@�
0A(A BBBE0�����F�A�A �G@�
 AABDXԟк�VF�B�B �B(�A0�A8�Gp�
8A0A(B BBBIuxB�QxDpT0�Ի�?F�B�B �B(�A0�A8�GPt
8A0A(B BBBE�XB`QXEPH�����}F�B�B �B(�A0�A8�G`;
8A0A(B BBBFTԠ��?F�B�B �B(�A0�A8�GPw
8A0A(B BBBJ}XB`QXEPL,�ؿ�/F�B�B �A(�A0�G@r
0A(A BBBC}HBPQHE@(|����~E�A�G@�
AAG@����F�B�B �D(�A0�D`�
0A(A BBBIT����nF�B�B �B(�A0�D8�D`�
8A0A(B BBBHehBpQhD`TD�����F�B�B �B(�A0�A8�GP
8A0A(B BBBB�XB`QXDPH��x��GF�B�B �B(�D0�A8�Dp�
8A0A(B BBBAT�|���F�B�B �B(�A0�A8�GP�
8A0A(B BBBG�XB`QXDPL@���BF�B�B �A(�D0��
(H BBBD�
(F BBBF`����F�B�B �B(�A0�A8�GP�
8A0A(B BBBG�XB`XXEPsXB`RXDPT����SF�B�B �B(�A0�A8�GP�
8A0A(B BBBHzXB`QXDPLL����F�B�B �A(�A0�D@�
0A(A BBBB�HBPQHE@X����fF�B�B �B(�A0�A8�Gp�
8A0A(B BBBD�xB�QxDpX��,��vF�B�B �B(�A0�A8�Gp�
8A0A(B BBBI�xB�QxDpTT�P��{F�B�B �B(�A0�A8�GP�
8A0A(B BBBHGXJ`WXAP��x�� E�VTȥ|��F�B�B �B(�A0�D8�D`�
8A0A(B BBBH{hBpQhD`P ����%F�B�B �A(�A0�G@
0A(A BBBF�HBPRHD@Tt����TF�B�B �B(�A0�D8�DP*
8A0A(B BBBGGXJ`WXAP̦��� E�VH����F�B�B �B(�A0�D8�D@�
8C0A(B BBBJ@4����jF�B�B �A(�A0�D@
0A(A BBBG\x���F�B�B �A(�D0�D@.
0A(A BBBG�HBPQHA@bHOPQHA@\اl��F�B�B �A(�D0�D@.
0A(A BBBG�HBPQHA@bHOPQHA@`8����F�B�B �A(�D0��
(P BBBHQ
(F BBBC�
(F BBBG`����F�B�B �A(�D0��
(P BBBIQ
(F BBBC�
(F BBBGL�D��eF�B�B �B(�A0�A8�D��
8A0A(B BBBJHP�d��$F�B�B �B(�A0�D8�D@
8C0A(B BBBEd��H��UF�B�B �B(�A0�D8�D`U
8A0A(B BBBDhBpRhA`_hPpQhA`H�@��B�E�E �E(�A0�A8�DP�
8C0A(B BBBFP����d���Hx���F�B�B �B(�A0�D8�DP

8C0A(B BBBEH����F�B�B �B(�A0�A8�G`
8A0A(B BBBDH����B�E�E �E(�A0�A8�DP�
8C0A(B BBBA\����p���4����F�A�A �m
HDOSAB\��H���F�B�B �A(�D0�D@M
0A(A BBBH�HBPQHA@gHOPQHA@@�����F�B�B �A(�D0�D@9
0A(A BBBDH`�T���F�B�B �B(�A0�D8�D`9
8A0A(B BBBHH����F�B�B �B(�A0�D8�D`
8A0A(B BBBBP����bF�B�B �D(�A0�D@�
0A(A BBBIYHAPRHA@L���]8`���F�B�A �A(�D@
(A ABBD���	�]H���	�cB�B�E �B(�D0�D8�DpH
8A0A(B BBBG��
��$
�d$�0
��F�B�B �B(�A0�D8�D`T
8A0A(B BBBEhBpRhA``hOpThA`H����F�B�B �B(�A0�D8�D@�
8C0A(B BBBEHخ�B�B�E �B(�D0�D8�Dp�
8A0A(B BBBG$�@�8�L�HL�X�F�B�B �B(�A0�A8�Gp3
8A0A(B BBBF���,�vP�B�B �B(�D0�G8�O@z8A0A(B BBBD������H@������oH^PFHA@�HFPAXA`BhBpZ@HHAPBXB`Z@wHNPSHA@hHZPGHB@_
HMPAXA`HhApEH
HAPHXA`EHh���tF�B�B �B(�D0�A8�D`�
8A0A(B BBBKX����F�B�B �B(�A0�A8�Gp�
8A0A(B BBBFlxL�KxApL���!B�B�B �E(�A0�A8�D�F
8A0A(B BBBG`��'�<t��'��F�B�B �A(�D0��
(D BBBFH��@(�*B�E�B �B(�D0�A8�D`�
8A0A(B BBBF�$*��0*�@(�<*�
F�B�B �A(�A0�G@b
0A(A BBBC@l�,�F�B�B �A(�A0�GP3
0A(A BBBB8���.�F�B�A �A(�G@�
(A ABBH@��0�	F�B�B �A(�A0�GPU
0A(A BBBH80��3�"F�B�A �A(�G@�
(A ABBG8l��5�"F�B�A �A(�G@�
(A ABBG8��|7�F�B�A �A(�G@�
(A ABBE8�`9�F�B�A �A(�G@�
(A ABBEH �D;�5F�B�B �B(�A0�A8�Gp?
8A0A(B BBBB@l�8>�F�B�B �A(�A0�G@�
0A(A BBBFH���@�F�B�B �B(�A0�A8�G`%
8A0A(B BBBDH���C�F�B�B �B(�A0�A8�G`�
8A0A(B BBBFHH��F�F�B�B �B(�A0�D8�DPi
8C0A(B BBBF@��pI��F�B�B �A(�A0�G@�
0A(A BBBK@ص�K��F�B�B �A(�A0�G@�
0A(A BBBK`��N��F�B�B �A(�A0��
(A BBBFs
(A BBBF@
(A BBBI8��Q�RF�B�A �A(�G@�
(A ABBD8��8S�RF�B�A �A(�G@�
(A ABBDH��\U�B�B�E �B(�D0�D8�Dp�
8A0A(B BBBDD��X�X��X�Hl��X�F�B�B �B(�A0�D8�D`/
8A0A(B BBBB0��\�nF�A�A �D@1
 AABG0�H^�nF�A�A �D@1
 AABG8 ��`�F�B�A �A(�GP�
(A ABBC8\��b�F�B�A �A(�GP�
(A ABBH8��<e�F�B�A �A(�GP�
(A ABBH@Ը�g�dF�A�D �D@s
 AABJtHOPQHA@@��i�dF�A�D �D@s
 AABJtHOPQHA@8\��k��F�B�A �A(�GPR
(A ABBGH���n�5B�E�B �E(�D0�A8�Dp�
8A0A(B BBBG��r����r�X��r�F�B�B �B(�A0�D8�DPJ
8A0A(B BBBGWXJ`WXAPh�\u� E�V8��`u�BF�B�A �D(�D@�
(A ABBF8��tw�bF�B�A �A(�GP�
(A ABBHL���y�EF�B�B �A(�A0�q
(E EDBK`
(A BBBAXL��z�F�B�B �B(�A0�D8�Dpv
8A0A(B BBBK�xP�QxHp8��l}�rF�B�D �A(�G@�
(A ABBA@����F�B�B �A(�D0�D@�
0A(A BBBDH(�\��F�B�A �D(�DP�
(A ABBHtXO`QXAP8t����uF�B�A �A(�D@�
(A ABBGH����F�B�B �B(�D0�A8�GP�
8A0A(B BBBEH�����F�B�B �B(�A0�A8�G`�
8A0A(B BBBJ8H�|��F�B�A �A(�GP�
(A ABBI8����F�E�A �A(�G@�
(A ABBEX��T���F�B�B �B(�A0�D8�D` 
8A0A(B BBBAEhBpRhD`P�ȓ�F�B�B �A(�D0�DP�
0A(A BBBItXO`TXAPXp���@F�B�B �B(�A0�D8�D`j
8A0A(B BBBGYhJpWhA`̾��� E�V8����F�B�A �A(�GP
(A ABBG8$�P���F�B�D �A(�GP�
(A ABBBH`����F�B�B �B(�A0�D8�D`�
8A0A(B BBBHH������F�B�B �B(�A0�A8�G��
8A0A(B BBBEH��<���F�B�B �B(�A0�D8�Dp�
8A0A(B BBBB8D���F�B�A �A(�DPB
(A ABBJ8��4��F�B�A �A(�DPB
(A ABBJH�����_F�B�B �B(�A0�A8�Gpc
8A0A(B BBBFH����B�B�B �B(�A0�A8�Dp<
8A0A(B BBBDT���h���H|���B�E�B �B(�A0�D8�Dp@
8A0A(B BBBB�|������H����B�B�B �B(�A0�D8�D��
8A0A(B BBBE<���P���Hd���PB�B�B �B(�A0�A8�D`9
8A0A(B BBBG��������H����^B�B�B �B(�D0�D8�D`+
8A0A(B BBBG$�0��8�<��HL�H��B�B�B �B(�D0�D8�Dp_
8A0A(B BBBC���������P����xF�B�B �A(�A0�G@
0A(A BBBBHBPRHA@P�@��xF�B�B �A(�A0�G@
0A(A BBBBHBPRHA@Hh�l��F�B�B �B(�A0�A8�Gp 
8A0A(B BBBAL�����|F�B�B �B(�A0�A8�G�K
8A0A(B BBBFH���F�B�B �B(�A0�A8�Gp3
8A0A(B BBBFLP����F�B�B �B(�A0�A8�G�
8A0A(B BBBHL����B�B�B �B(�D0�D8�D�[
8A0A(B BBBG���������H����5F�B�B �B(�A0�A8�G`�
8A0A(B BBBFd���� E�VH�����SB�B�B �B(�A0�A8�Dp,
8A0A(B BBBD�����vStR���������$��$�0��8�<��L�H��`�T��t�`����l����x�������H�����#B�B�B �B(�A0�A8�Dp,
8A0A(B BBBD�t��vStR,����@����T����h����|��������� ����,����8����D����P��H�\��>B�B�E �B(�D0�A8�Dp
8A0A(B BBBFHT�P���B�B�B �B(�D0�D8�Dp�
8A0A(B BBBG�������������������$���0���<��,�H��@�T��T�`��h�l��H|�x��B�B�E �E(�D0�A8�Dp
8A0A(B BBBGH��L��B�B�B �E(�A0�A8�Gp�
8A0A(B BBBG� ��(�,��<�8��P�D��d�P��x�\����h����t�����������������L�����SB�B�B �B(�A0�A8�D�<
8A0A(B BBBD@����StR\�8�p�D���P���\���h���t����������������$���L8���nB�B�B �B(�A0�D8�G�7
8A0A(B BBBKH����B�B�B �B(�D0�D8�Dp
8A0A(B BBBG���	����	����	���	�$��	�8��	�L��	�`��	�t�
���
���
���$
��� 
�6$��L
�cE�C
L���~
F������G(���	<���6P�
�d�
�x��
�������
������
�!HX��� HW���;L�n�@�(�L�HNP@�T�	F�B�I �A(�D@\H_PmHA@PHZPgHA@l
(A ABBA���$��,�L�a����!HS����L����B�G�B �B(�A0�A8�G��
8A0A(B BBBA@���;HX
HNL`���B�H�D �D(�N0U
(A ABBEL
(C ABBD����G��
AL��(�N�E�D �D(�F0J
(C DBBJI(C DBBD������8���F�I�B �I(�H0�A8�L�L�O�	g�G�a�M�	P�G�	
�I�	G�	B�	P���N�	V�	B�	L���E�	N�B���I�	F�B�H����B�E�B �B(�A0�C8�Gp�
8A0A(B BBBEH���8F�B�E �B(�A0�A8�Gp�
8A0A(B BBBD�\���/F�E�B �B(�A0�A8�D`�
8A0A(B BBBA�
8D0A(D BEBD�
8C0A(B BBBAN
8C0A(B BBBA�� �L��B�G�E �H(�I0�j
(K IBBOU
(H BBBM|\���F�B�B �B(�A0�A8�Dp�
8A0A(B BBBF
8A0A(B BBBGs
8F0A(B BBBF��� �D��� �eF�E�E �E(�H0�H8�G@n8A0A(B BBB<�� �@�C�Clbpbtbxb|b�b�b�b�b�b�b�b�b�b�b�b�b�bYi�b�b�b�b�b�b�b�b�b�bbYi
bbbb%b-b6b�Cb�&b~'b�'b�'b�'b�1b�'bӯh	�'b	�-h
�'b�-hɛf
Eb�'bx�fT�f�'b�'b�'b�<h	�h
�'b�'b�'b�'b�'b�'b�'b�'b�'b�'b�'b	�'b
�'b�'b�zi(bWb(b(b(b(b(be�f&(b-(b	3(b
9(bB(b�.h����J(b����k�bS(bWbBh�bX(bPbb�bb'.h��f��f](bc(bm(bx(b�(b�f��f�b�(b�(b�b�(b�(b�(b�f�(b�(b�(b�(b�(bNb�(b�(b�if�(b'b�b�=b�����(b,,b�����(b1b����)b)b����)b)b���� )b4)b���� )bMb����8)byLb����8)b�&b����G)bW)b����G)b5Ob����[)bl)b����[)b�2b����p)b�:b����p)b�)b�����)b�)b�����)b�)b�����)b�)b�)b'b�)b�)b�)b�)b�)b�)b�)b�)b�)b�)b�)b�Hb�)b�zh�)b�Ib*b*b*b�Mb"*b/*b3*bA*bF*bY*b_*bp*bu*b�*bu*b�@b	�*b5Ob
�*b�&b
�*b5Ob�*b�*b�*b�*b
�*b�&b����*b�&b����*b�&b����*b�&b���+b�=b�����*b�=b�����*b�=b�����*b�=b����+b+b��!+b+b��3+b�Ibh$G+b�Ibh$Z+b�Ibh$h+b�:b���p)b�:b���v+b�:b����+b�:b����+b�:b���!+b�:b����+b�:b����+b�:b���3+b�:b����+b�:b����+b�:b����+b�:b@8,b
,b@8,b
,bH?,b,bp���)b,bp���!,b+,b`s��)b+,b`s��0,b+,b`s��=,b+,b`s��!,b+,b`s��J,b)b����)b)b����V,b)b����e,b)b����r,b)b����!,b1bp���)b1bp���V,b1bp���e,b1bp���r,b1bp���!,b�,b`T�,b�,b@8�,b�,bPF�,b�,b`T�,b�,bpb�,b�,bPF�,b�,b`T�,b
Mb@8�,b
MbPF�,b
Mb����,b
Mb����,b
Mb����,b
Mb����,b
Mb���-b
Mb���-b
Mb���'-bmAb0*�,bmAb@8�,bmAb���3-bmAb����,bmAb����,bmAb����,bmAb����*bmAb����,bmAb����*bmAb���-bmAb����*bmAb���-bmAb���+bmAb���'-bmAb�D-bmAb<U-bc-b��i-bc-bжi-bc-b��i-bu-b��i-bu-b��i-bu-bжi-b[3b����z-b[3b�����-b�-b4�-bp3b���p)bp3b����+bp3b����+bp3b����+bp3b���3+bp3b����-bp3b����+b�-bPF�-b�-b`T�-b�-b`T�,b�-b@8�-b�-bPF�-b�-bPF�,b�Nb����-b�Nb���-b�Nb����rb�Nb����-b�Nb���sb�Nb���.b�Nb���.b�Nb���7.b�Nb���R.b�Nb���8sb�Nb���l.b�Nb����.b�Nb����.b�Nb����.b�Nb����.b�Nb����.b�Nb���/b�Nb���/b�Nb���/b�Nb���./b�Nb���>/b�Nb���rb�Nb���-b�Nb��sb�Nb��.b�Nb��.b�Nb��7.b�Nb��R.b�Nb��8sb�Nb��l.b�Nb���.b�Nb���.b�Nb���.b�Nb���.b�Nb���.b�Nb��/b�Nb��/b�Nb��/b�Nb��./b�Nb��>/b3@b����-b3@b����-b3@b����rb3@b����-b3@b���sb3@b���.b3@b���.b3@b���7.b3@b���R.b3@b���8sb3@b���l.b3@b����.b3@b����.b3@b����.b3@b����.b3@b����.b3@b���/b3@b���/b3@b���/b3@b���./b3@b���>/b3@b����rb3@b����-b3@b���sb3@b���.b3@b���.b3@b���7.b3@b���R.b3@b���8sb3@b���l.b3@b����.b3@b����.b3@b����.b3@b����.b3@b����.b3@b���/b3@b���/b3@b���/b3@b���./b3@b���>/bP/bPFV/bP/b`TV/bP/bPFe/bP/b`Te/bs/b@8V/bs/bPFV/bs/b@8e/bs/bPFe/b�2b0*x/b�2b����/b�2b����/b�2b����-b�2b���v+b�2b����+b�2b���z-b�2b����/b�2b����+b�2b���!+b�2b����/b�2b����/b�2b���p)b�2b����/b�2b����+b�2b����/b�2b����+b�2b����/b�2b���3+b�2b���
0b�2b����-b�2b���#0b�2b���90b�2b���O0b�2b���`0b�2b���q0b�2b����0b�2b����+b�2b����0b�2b����0b�2b����+b�2b����+b�2b0*�0b�2b0*,b�2b0*�0b�2b0*�0b�2b0*�0b&4b���p)b&4b����+b&4b����+b&4b����+b&4b���3+b&4b����-b&4b����+b�0b�)b�)b��)b�)b�)b�0b��)b�0b���)b�0b@8�0b�0bPF�0b�0b0*�0b�0b@8�0b1b@8�0b1bPF�0b1b0*�0b1b@8�0b1b �)b1bpb1b1bpb1b1b '1b1b 61b1b G1b1b W1b1b j1b1b x1b1b {1b�1b`s��0,b�1b`s��=,b�1b`s��e,b�1b`s��J,b�1b`T1b�1b`T1b�1b(#�1b�1b(#�1b�1b(#�1b�1b�&�1b�1b�&�1b�1b�&�1b�Mb��v+b�Mb�����1b�Mbd��1b�Mb�),b�Mb<^�1b�Mbx2b�Mbx2b�Mbx!2b12bxi52b12b�p52bA2b0uH2b$hxiH2b$h�pH2bU2b,��Z2bi2b���Z2b�)b���)b�)b��m2b�)b��2b�)b���2b�)b���2b�)b���2b�)b���2b�)b���2b�)b����)b�)b���m2b�)b���2b�)b����2b�)b����2b�)b����2b�)b����2b�)b���-b�)b����2b�)b�)b�)b�)b�)bPe��0,b�)bPe��=,b�)bPe��e,b�)bPe���2b�)bPe���2b�)bPe���2b�)bPe��J,b�)bPe��3b�)b'1b�)bG1b�)bW1b�)bj1b�)bx1b�)b{1b�)b~1b�)b'1b�)b3b�)b61b�)bG1b�)bW1b�)bj1b�)bx1b�)b{1b3b`T!3b3b`T-3b:3bh["*b:3bh[?3b:3bh[1b:3bh[1b:3bh[M3bZ3b��_3bo3bp���)bo3bp���!,bt3b���*bt3b0*y3bt3b0*�3bt3b���3b�Db`s��)b�Db`s��!,b�Db �3b�Db �3b�Db �3b�Db y3b�Db �3b�Db �3b�Db �3b�Db �3b�Db 4b�Db 4b%4bp���)b%4bp���!,b*4bh[.4b;4b���@4b;4b���U4bW)b����G)bW)b���f4bW)b���u4bW)b����U4bW)b����z4bW)b�����4bW)b�����4bW)b�����4bW)b�����4bW)b�����4bW)b�����4bW)b�����4bW)b����5bW)b����!5bW)b����35bW)b����P5bW)b����e5bW)b����}5bW)b�����5bW)b�����5bW)b�����5bW)b�����5bW)b�����5bW)b����6bW)b����6bW)b����;6bW)b����W6bW)b����g6bW)b����z6bW)b�����6bW)b�����6bW)b�����6bW)b�����6bW)b�����6bW)b�����6bW)b����XsbW)b�����6bW)b����3+bW)b����7bW)b����@4bW)b����U4bW)b����#7bW)b����77bW)b����H7bW)b����W7bW)b����_7bW)b����n7bW)b����y7bW)b�����7bW)b�~�7bW)b�~�7bW)b�~�7bW)b�~�7bW)b�~�7bW)b�~�7bW)b�~�7bW)b�~��iW)b�~�7b�7b0*8b�7b0*8b�)b 8b�)b0*8b�)b &8b�)b 58b�)b B8b�)b Q8b�)b ^8b�)b r8b�)b 8b�)b D-b�)b �8b�)b U-b�)b �8b�)b �8b�)b �8b�)b �8b�)b !2b�)b �8b�)b 61b�)b 8b�)b �8b�)b �8b�)b 9b�)b 9b�)b %9b�)b 39b�)b @9b�)b M9b�)b [9b�)b �)b�)b g9b�)b x9b�)b �9b�)b �9b�)b �9b�)b �9b�)b �9b�)b �9b�)b �9b�)b �9b�)b �9b�)b 
:b�)b 2b�)b :b�)b +:b�)b 8:b�)b G:b�)b U:b�)b d:b�)b r:b�)b �:b�)b �:b�)b �:b�)b �:b�)b �:b�)b �:b�)b8b�)b&8b�)b�:b�)b58b�)bB8b�)bQ8b�)b^8b�)br8b�)b8b�)bD-b�)b�8b�)bU-b�)b�8b�)b�8b�)b�8b�)b�8b�)b!2b�)b�8b�)b61b�)b8b�)b�8b�)b�8b�)b9b�)b9b�)b%9b�)b39b�)b@9b�)bM9b�)b[9b�)b�)b�)bg9b�)bx9b�)b�9b�)b�9b�)b�9b�)b�9b�)b�9b�)b�9b�)b�9b�)b�9b�)b�9b�)b
:b�)b2b�)b:b�)b+:b�)b8:b�)bG:b�)bU:b�)bd:b�)br:b�)b�:b�)b�:b�)b�:b�)b�:b�)b�:b�)b�:b�)b 8b�:b���:b�:b���:b�:b\��:b�:b\�;b;bL��:b;bL�;b;b�w�7b;b�~�7b;b�����4b;b��;b.;b�p;b.;b�~;b3;b�p7;b3;b�pA;b3;b�pO;b3;b�p^;bq;b�~u;bq;b�~�*bq;b�~�;b�;bhz���;b�;b`s���;b�;bXl���;b�;b����;b�;b����;b�;b���>/b�;b����;b�;b����;b�;b����;b�;b�����;b�;b���>/b�;b����;b�;b�����;b�;b���`0b�;b����rb�;b����-b�;b���sb�;b���.b�;b���.b�;b���7.b�;b���R.b�;b���8sb�;b���l.b�;b����.b�;b����.b�;b����.b�;b����.b�;b����-b�;b����.b�;b���/b�;b���/b�;b���/b�;b���./b�;bD����;b�;b���Z2b�;b����;b�;b�!2b�;b�2b�;b����1b�;b�����1b�;b����G)b�;b����z4b�;b�����4b�;b����5b�;b����35b�;b����P5b�;b����e5b�;b����}5b�;b�����5b�;b�����5b�;b�����5b�;b�����5b�;b�����5b�;b����6b�;b����;6b�;b����W6b�;b����g6b�;b�����6b�;b����7b�;b����77b�;b����H7b�;b����W7b�;b����n7b�;b����y7b�;b�����7b�&b����G)b�&b����f4b�&b����u4b�&b����z4b�&b�����4b�&b�����4b�&b�����4b�&b�����4b�&b�����4b�&b�����4b�&b����<b�&b�����4b�&b����5b�&b����!5b�&b����<b�&b����35b�&b����P5b�&b����e5b�&b����}5b�&b�����5b�&b�����5b�&b�����5b�&b�����5b�&b�����5b�&b����6b�&b����6b�&b����;6b�&b����W6b�&b����g6b�&b����z6b�&b�����6b�&b����$<b�&b�����6b�&b�����6b�&b�����6b�&b�����6b�&b�����6b�&b����Xsb�&b�����6b�&b����3+b�&b����7b�&b����@4b�&b����5<b�&b����U4b�&b����D<b�&b����#7b�&b����Z<b�&b����77b�&b����H7b�&b����n<b�&b�����<b�&b����W7b�&b�����<b�&b����_7b�&b����n7b�&b����y7b�&b�����7b�&b�����<b�&b�p�7b�&b�p�7b�&b�p�7b�&b�p�7b�&b�p�<b�&b�p�<b�&b�p�7b�&b�p�7b�&b�p�7b�&b�p��i�&b�p�7b�&b���<b�&b���*b�&b���<b�&b���<b�&b��=b�&b��=b�&b��!=b�&b���*b�&b���<b�&b���<b�&b��=b�&b��=b�&b��!=b6=b� �:b:=b��?=bS=b��?=bS=b��?=bW=b{\=bW=b�\=bl=b����G)bl=b����z4bl=b�����4bl=b����5bl=b����35bl=b����P5bl=b����e5bl=b����}5bl=b�����5bl=b�����5bl=b�����5bl=b�����5bl=b�����5bl=b����6bl=b����;6bl=b����W6bl=b����g6bl=b�����6bl=b�����6bl=b����7bl=b����77bl=b����H7bl=b����W7bl=b����_7bl=b����n7bl=b����y7bl=b�����7bp=bpbt=b�=b���=b�=b���=b�=b`T1b�=b`T1b�=bPF�=b�=bpb�=b�=b���=b�Ib���~1b�Ib���3b�=b`T�=b�=bpb�=b�=bPF�=b�=b`T�=b�=b�����=b�=b�����=b�=b����>b�=b����>bX9k�����=bX9k�����=bX9k����>bX9k����>bX9k@8!>b�1b0*�3b�1b0*G+b�1b0*Z+b�1b0*h+b�1b0*�1b�1b0*5>b�1b0*�1b�1b0*�1b�1b0*�1b�1b0*!>b�1b0*E>b�1b0*S>b�	h����b>b�	h����t>b�>b���6bl)b���[)bl)b����4bl)b���<bl)b���5bl)b����>bl)b���35bl)b���e5bl)b���}5bl)b����5bl)b����5bl)b����5bl)b����5bl)b����5bl)b���6bl)b����>bl)b���6bl)b���;6bl)b���g6bl)b����>bl)b����>bl)b����>bl)b���3+bl)b����>bl)b���#0bl)b���Z<bl)b����>bl)b���?bl)b�����fl)b���?bl)b����>bl)b���y7bl)b���?bl)b����<b�)b0*�)b�)b0*'?b�)b0*4?b�)b0*??b�)b0*K?b�)b0*Y?b�)b0*c?b�)b0*q?b�)b0*~?b�)b0*�?b�)b0*U-b�)b0*2b�)b0*!2b�)b0*�?b�)b0*8b�)b0*�8b�)b0*�?b�)b0*@9b�)b0*�)b�)b0*�?b�)b0*�9b�)b0*�9b�)b0*�9b�)b0*�9b�)b0*2b�)b0*:b�)b0*U:b�)b0*d:b�)b0*�:b�)b0*�:b�)b0*�?b�)b0*�?b�)b �)b�)b0*Y?b�)b '?b�)b B8b�)b 4?b�)b ??b�)b K?b�)b Y?b�)b c?b�)b q?b�)b ~?b�)b �?b�)b U-b�)b 2b�)b !2b�)b �?b�)b 8b�)b �8b�)b �?b�)b @9b�)b �)b�)b �?b�)b �9b�)b �9b�)b �9b�)b �9b�)b 2b�)b :b�)b U:b�)b d:b�)b �:b�)b �:b�)b �:b�)b �?b�)b �?b�?b�:b*Kb���:b�?b����#0b�?b�~�<b�7bx����=b�7bx���>b��i���[)b��i���<b��i���6b��i����>b��i����>b��i���Z<b��i����>b��i���?b��i�����f��i���?b��i���?b��i����<b5Ob����[)b5Ob�����/b5Ob����z4b5Ob�����4b5Ob�����4b5Ob�����?b5Ob����G)b5Ob�����4b5Ob����<b5Ob����5b5Ob�����>b5Ob����35b5Ob����P5b5Ob����e5b5Ob����}5b5Ob�����5b5Ob�����5b5Ob�����5b5Ob�����5b5Ob�����5b5Ob����6b5Ob�����>b5Ob����6b5Ob����;6b5Ob����W6b5Ob����g6b5Ob����z6b5Ob�����6b5Ob�����6b5Ob�����+b5Ob�����>b5Ob�����>b5Ob�����>b5Ob�����;b5Ob����3+b5Ob�����>b5Ob����@4b5Ob����U4b5Ob����#0b5Ob����Z<b5Ob�����>b5Ob����?b5Ob������f5Ob����?b5Ob�����>b5Ob����n7b5Ob����y7b5Ob����?b5Ob�����7b5Ob�����<b5Ob���?b5Ob���?b5Ob��@b5Ob��@b5Ob��&@b5Ob��7@b5Ob��E@b5Ob��X@b5Ob���*b5Ob��l@b5Ob��z@b5Ob���@b5Ob���@b5Ob���@b5Ob���*b5Ob���?b5Ob���?b5Ob��@b5Ob��@b5Ob��&@b5Ob��E@b5Ob��l@b5Ob��z@b5Ob���@b5Ob���@b5Ob���@b�@b���[)b�@b���<b�@b���6b�@b����>b�@b����>b�@b���Z<b�@b����>b�@b���?b�@b�����f�@b���?b�@b���?b�@b����<b�@b����+b�@bж�@b�@b���@b�@b����@b�@b���@b�@b����@b�@b����@b�@b��@b�@b(�Ab Ab��%Ab Ab��5AbFAb��%AbFAb��5AbJAb@8�-bJAbPF�-bOAb`TUAbOAbpbUAbbAbPFUAbbAb`TUAbgAb����t>blAbp���qAb�AbD���Ab�xf@8�Ab�xfPF�Abxk0*�Abxk@8�Ab�Ab����Ab�Ab����Ab�Ab��Ab�Ab���Ab�Ab`s���Ab�AbPe���AbBb@W��BbBb��Bb"Bb��(Bb2Bb���8BbBBb���HBbRBb����XBbbBb����hBbrBb����xBb�Bb�����Bb�Bbp����Bb�Bb���Bb�Bb���Bb�Bb���Bb�Bbж�Bb�Bb���Bb�BbCbCb CbCb0*"Cb,Cb@82Cb<CbPFBCbLCb`TRCb\CbpbbCblCb�prCb|Cb�~�Cb'b�Cb'b�Ab'b�Cb'b�1b'b�Cb'b�Cb'b�Cb'b�@b'b�Cb'b�Cb'b�Cb'b�Cb'bDb'bDb'b0Db'bBDb'bRDb'bbDb'bwDb'b�Db'b~1b'b�Db'b�Db'b�Db'b�Db'b�Db'b'1b'b3b'b61b'bG1b'bW1b'bj1b'b�)b'bx1b'b{1b'b�Db'b�Db'b�Db'b�Db'b�Db�Ib@8*b�Ib���Db�Ib@8�0b�Ib@8�Db�Ib@8�0b�Ib���=b�Db����Ab�DbD���Ab�Db����Ab�:bp���0,b�:bp���=,b�:bp���J,b	;b`s��0,b	;b`s��=,b	;b`s��J,b,bhz���(b,bhz���Db,bhz��Eb
Eb�~Eb
Eb�~!Eb*Eb�pEb*Eb�p!Eb.Eb����f4b.Eb����u4b.Eb(��)b.Eb�R?3b.Eb�R1b.Eb�R1b.Eb�R"*b.Ebh~?b.Ebh�)b.Ebh�?b2Eb�p8EbBEb`T8EbBEbpb8EbGEbhz���(bGEbhz���DbGEbhz��Eb,,b`s���(b,,bXl���(b,,b`s���Db,,b`s��KEb,,b`s��Eb,,bXl���Db,,bXl��Eb\Ebhz���(b\Ebhz���Db\Ebhz��EbSAhpb�1bSAhpb`EbSAhpbqEbSAhpb�EbSAhpb�EbSAh�p`EbSAh�pqEbSAh�p�EbSAh�p�Eb�Eb@8�Eb�Eb@8�Eb�Eb@8�Eb�Eb0*�Eb�Eb0*Y?b�Eb0*�Eb�Eb0*�Eb�Eb`T�Eb�Eb�a�Eb�Ebhc?b�Ebh�?b�Ebh�?b�EbPF�Eb�Eb`T�Eb�EbH?Fb�EbPFFb�EbH?Fb�EbPFFbFb�p�EbFb�~�EbFbpb�EbFb�p�Eb�zi81Fb�zi@8Fb�zi81Fb�zi@8FbFbwDbFb�Db�Mb �Eb�Mb��wDb�Mb���Db�MbXM?3b�MbXM�Eb�MbXM1b�MbXM1b�MbXM*b�MbXM$Fb�MbXM3*b�MbXM"*b�MbXM!3b�MbXM-3b�Mb~1b�Mb3b�Mbh[?3b�Mbh[�Eb�Mbh[*b�Mbh["*b�Mb~1b�Mb3b�Mb~1b�Mb3b�Mb Y?b�Mb �Eb�Mb �Eb3Fb g8FbEFb���*bEFb���;bJMb�����DbJMb d8FbJMb� �EbJMb� �EbJMb� �Eb�@b�~�*b�@b�~7;b�@b�~Eb�@b�~8Fb�@b�~IFb�@b�~H2b�@b�~A;b�@b�~[Fb�@b�~O;b�@b�~M3b�@b�~u;b�@b�~gFb�@b�~^;b�@b�~!Eb�@b�~�;b�@b�~vFb�@b�~lFb�FbPF*b�FbPF�7b�FbXM�7b)b�~�Fb)b���Fb)b�~�Fb)b���Fb�Fb`TUAb�FbPFUAb�Fb`TUAb�Fb`T�Fb�Fb@8�Fb�FbPF�Fb�Fb`T�Fb�FbhU:b�Fb����0b�Fb����?b�Fb����>b�Fb����>b�Fb����>b�Fb��8b�Fb���Fb�Fb���Fb�*bpbu*b�*b�pu*b�*bpb�Fb�*b�p�Fbp*b`Tu*bp*bpbu*bp*b`T�Fbp*bpb�Fb1b�p�Fb1b�w�Fb1b�~�Fb1b�p�Fb1b�p�Fb1b�w�Fb1b�w�Fb1b�~�Fb1b�~�Fb�Fb0*�Fb�Fb@8�Fb�FbPF�Fb
Gb0*�Fb
Gb@8�FbGb@W��GbGb@W��Gb)Gb��X@b)Gb��X@b)Gb��X@b)Gb��7@b)Gb��7@b)Gb��7@b.Gb`s��3Gb.Gbj��3Gb.Gb��3GbFGb`T�EbFGbh[�Eb�,bL���)b�,bL���2b�,b���m2b�,b����2b�,b���JGb�,b����Ab�,b����,b�,b���-b�,bH��ZGb�,bl���,b�,bX���/b�,bx���Ab�,b��v+b�,b����+b�,b����,b�,b���'-b�,b ���,b�,bp���/b�,bT��
0b�,bP���/b�,bP���/b�,bP��90b�,b���/b�,b���/b�,b����/b�,b4��O0b�,b����/b�,b`��p)b�,b`���+b�,b��-b�,bl���0b�,bH���+b�,b ��q0b�,b ���0b�,b����mGb�,b����}Gb�,bp����*b�,bp����*b�,bp���+b�,b�����+b�,b`���z-b�,b�����*b�,bH����-b�,b���:b�,b�����Gb�,b|����>b�,b�����Cb�,b����RDb�,b%���<b�,b%����<b�,b�����4b�,b<���#7b�,bP����4b�,b`����4b�,b���t>b�,b�����6b�,b$���!5b�,bp���BDb�,bp����8b�,bp����:b�,b����6b�,b���_7b�,b@����6b�,b��6b�,b����6b�,b��5<b�,b��n<b�,b���<b�,b�����4b�,b<���$<b�,b<����<b�,b��D<b�,b����<b�,b�����Gb�,b�����Gb�,bP����Gb�,bL����Gb�,bL����Gb�,bL����Gb�,b��Hb�,b|���qAb�,b$�Cb�,b8}��Hb�,b�s��#Hb�,b����Db�,b��_3b�,bd�Cb�,b�Db�,bd��1b�,b�_���2b�,b�_���2b�,b�_��3b�,b_���(b�,b���Cb�,b��bDb�,bh��:b�,b����Ab�,b��?=b�,b��%Ab�,b��5Ab�,bH���2b�,b����2b�,b����2b�,b���2b�,b8����Cb�,bt(5>b�,b�(E>b�,b�)2Hb�,b�)�,b�,b`*�0b�,bh*S>b�,b�+x/b�,b�,!>b�,b�,�0b�,b�.�0b�,b/�Fb�,b /�-b�,bl/�0b�,b$0CHb�,b80Fb�,b80Fb�,bP0�0b�,b�3*b�,b�3MHb�,b4YHb�,b�5�,b�,b�5hHb�,b�6e/b�,b�6V/b�,b�6�Db�,b�8F*b�,b�9b�,b`=�Fb�,b�>yHb�,b�>*b�,b�@�=b�,b�@�Hb�,b�C�Eb�,b�D�Hb�,b�EUAb�,b<G�7b�,b$H�,b�,b�M_*b�,b�O$Fb�,b�O3*b�,bR�7b�,b<�Cb�,bT!3b�,bT-3b�,b�U8Eb�,bWu*b�,b��Hb�,b	�Hb�,b0`�Eb�,b\bqEb�,b�c�7b�,b�c�7b�,bd`Eb�,bd�Eb�,b4d�Hb�,b4d�Hb�,b�fO;b�,bpgH2b�,b|j�<b�,b|j�<b�,bkEb�,bk!Eb�,bXk;b�,b�k52b�,b�oA;b�,b�o^;b�,b�q�7b�,b�q��i�,b�u7;b�,b�v�7b�,b�y�Hb�,b\B8b�,b\�:b�,b�{�Hb�,b��<b�,bȅu;b�,b�Hb�,b`�Ib�,bTIb�,b��/Ib�,b�>Ib�,b�RIb�,b|�vFb�,b̝aIb�,bd�i-b�,bD��@b�,b��;b�,b���:b�,bloIb�,b�
:b�,b��Cb�,bt0Db�,b�}Ib�,b��3b�,b0�3b�,b�3b�,b(�Ib�,bd�1b�,b��3b�,b�4b�,bHq?b�,bH�?b�,b0�Ib�,b� �3b�,b�!4?b�,b"K?b�,b�"�1b�,b�$�1b�Ibpb�7b�Ibpb�7b�Ib�����Cb�Ib�$�9bxsb�Ib�IbAb�IbAb�Ib��Ab�Ib��Ib�Ib��Ib�Ib��Ib�Ib��Ib�Ib ggFb�Ib gIFb�Ib glFb�IbpbgFb�Ib ggFb�IbxigFb�IbpbIFb�IbpblFb�Ib gIFb�Ib glFb�IbxiIFb�IbxilFb�Ibhz��Hb�IbPF�Ib�Ib`T�Ib�Ib�����4b�Ib����JbJbx?�)bJbx?�?byLb����8)byLb����JbyLb�����4byLb�����4byLb�����GbyLb����<byLb����'JbyLb����$<byLb�����6byLb����XsbyLb�����6byLb����6JbyLb����5<byLb����FJbyLb����D<byLb����JbyLb����n<byLb�����GbyLb�����<byLb�����<byLb����WJbyLb����[JbyLb����cJbyLb����jJbyLb����uJb�Jb �Jb�Jb�Jb�Jb��Gb�Jb��Gb�Jb��Gb�Jb���Jb�Jb��Gb�Jb���Jb�Jb(#�)b�JbX#�)b�JbT���Jb�Jb���z6b�Jb���Cb�Jb�D�Jb�Jb�J�Eb�Jbh[M3b�Jb�oA;b�Jb�o^;b�Jb�@9b�Jb(#�?b�JbX#�?bG9k�~�<bG9k�~�<b�Jb�p�<b�Jb�p�<b��g����8)b��g����Jb��g�����4b��g�����Gb��g�����6b��g����Xsb��g����5<b��g����FJb��g����D<b��g����Jb��g����n<b��g�����Gb��g�����<b��g����WJb��g����[Jb��g����cJb��g����uJb��g�~�=b��g���=b�zh@8�)b�zhPF�)b�zh@8!2b�zh@88b�zh@8�8b�zh@8@9b�zh@8�9b�zh@8�9b�zh@8�9b�zh@82b�zh@8:b�zh@8U:b�zh@8�:b�zh@8�?b�zhPF�?b�Hb0*�)b�Hb0*!2b�Hb0*8b�Hb0*�8b�Hb0*@9b�Hb0*�9b�Hb0*�9b�Hb0*�9b�Hb0*2b�Hb0*:b�Hb0*U:b�Hb0*�:b�Hb0*�?bMb����8)bMb����JbMb�����4bMb�����4bMb�����JbMb�����GbMb�����GbMb����<bMb����'JbMb����$<bMb�����6bMb�����6bMb����XsbMb�����6bMb����6JbMb����5<bMb�����GbMb����FJbMb����D<bMb�����GbMb����JbMb����n<bMb�����GbMb�����<bMb�����GbMb�����<bMb����_7bMb����WJbMb����[JbMb����cJbMb����jJbMb����uJbMbh1�)bMbh1�?b�JbPFhHb�Jb@8hHb�JbPF�Jb�Jb����8)b�Jb����Jb�Jb�����4b�Jb�����Gb�Jb�����6b�Jb����Xsb�Jb����6Jb�Jb����5<b�Jb����FJb�Jb����D<b�Jb����Jb�Jb����n<b�Jb�����Gb�Jb�����<b�Jb����WJb�Jb����[Jb�Jb����cJb�Jb����jJb�Jb����uJb�Jb�pIFb�Jb�pH2b�Jb��RIb�f��RIb�Jb��Kb�Jb��Kb%Kb���Kb%Kb���Kb%Kb`s���2b%Kb���!+b%Kb���Kb%Kb���!+b%Kb���Kb)Kb���ZGb.Kb�D-b3Kb�D-b7Kb��;KbKKb�Q�FbKKb��;KbY*bpb_*bY*b�p_*bY*bpb�FbOKb`T_*bOKbpb_*bOKb`T�Fb/*b���Kb/*b`s��0,b/*b`s��=,b/*b`s��e,b/*b`s��J,b/*b���!+b/*b���Kb/*b�P3*b/*b�P$FbTKb��vFbTKb��vFb!Ab���Kb!Ab���Kb!Ab���!+b!Ab���Kb!Ab���!+b!Ab���Kb!AbPe��0,b!AbPe��=,b!AbPe��e,b!AbPe���2b!AbPe���2b!AbPe���2b!AbPe��J,b!AbPe��3b!Ab�D-bXKbPe��\KbXKb�`��\KbXKbH^��\KbiKb���KbiKb`s��0,biKb`s��=,biKb`s��e,biKb`s��J,biKb���!+biKb���Kb�*bж�*b�*bжmKb�*bж�Kb�*bж�Kb�Kb���*b�Kb���Kb�*b���*b�*b���*b�*bȯ�*b�*b��mKb�*b���Kb�*b���Kb�*b���Kb�*bȯ�Kb�Kb`T�Hb�Kbpb�Hb�KbPF�Hb�Kb`T�Hb�KbPFCHb�Kb@8CHb�KbPFCHb�Kb����'Jb4)b���� )b4)b����Jb4)b�����Kb4)b�����Jb4)b�����Gb4)b����V,b4)b�����Gb4)b�����Gb4)b�����Kb4)b�����Kb4)b�����Kb4)b�����Kb4)b�����Gb4)b����	Lb4)b����Lb4)b����Lb�8b����Gb+Lb��/Ib+Lbж/Ib1Lb��/Ib1Lb��/Ib6Lb�����Gb:Lb��>LbSLbPe��XLbSLb@W��XLbSLbжXLbjLb�~[FboLb�p[FbsLb`T*b*bPF*bxLb���/b}Lb����/b�LbL��ZGb�Lb<��ZGb�Lb�fO;b�Lb���=b�Lb1&8b�Lb1Q8b�Lb1M9b�Lb1�)b�Lb1�:b�Lbx����Lb�Lb���Lb�LbD����>b�Lb���� )b�Lb�����Jb�Lb�����Gb�Lb����V,b�Lb�����Gb�Lb�����Gb�Lb�����Kb�Lb�����Kb�Lb�����Gb�Lb����	Lb�Lb����Lb�Lb����Lb)b���� )b)b����Jb)b�����Kb)b�����Jb)b�����Gb)b����<b)b����'Jb)b����V,b)b����$<b)b�����Gb)b�����Gb)b�����Kb)b�����Kb)b�����Kb)b�����Kb)b�����Gb)b�����<b)b�����Lb)b����	Lb)b����Lb)b����Lb�Lb���� )b�Lb�����Jb�Lb�����Gb�Lb����V,b�Lb�����Gb�Lb�����Gb�Lb�����Kb�Lb�����Kb�Lb�����Gb�Lb����	Lb�Lb����Lb�Lb����Lb�Lb�~�Lb�Lb���3-b�Lb���3-b�Lb���3-b�Lbh���b>b�Lbpb�Fb�LbPF�Fb�Lb`T�Fb�Lb@8YHb�Lb��9b�Lbl�wDb�Lbl��Db�Lb$ZM3b�Lb����Lb�Lb��u;b�Lb��u;bMb��u;bMb��u;b	Mb`TyHb	MbPF�FbMb@8yHbMbPFyHbMbH^���(bMbH^���2bMbH^���2bMbH^��3bMb0*�FbMb@8�FbMb0*MbMbMbMb MbMb0*}IbMb0*4bMb }IbMb �IbMb 4b-Mb��>Ib1Mb@8MHb5Mb`���#0b:MbxigFb:Mb�pgFb:MbxilFb:Mb�plFb>Mb`T�-bDMbPF�-bDMb`T�-bIMb,����4bNMbP����@bNMb�@bSMb�c�EbSMb����@bSMb�����;bSMb�����;bSMb]aIFbSMb]agFbSMb]alFbSMb�c`EbSMb�cqEbSMb�c�EbSMb��9bWMb���ZGbWMb���ZGb�=bPe���2b�=bPe���2b�=bPe���2b�=bPe��3bH�i0*2HbH�i@82Hb[MbPFF*b[Mb`TF*baMb@8F*baMbPFF*bfMb4bkMb0*pMb�Mb`s��#Hb�MbpbyHb�Mb`T�Hb�Mbpb�Hb�Mb`TyHb�MbPF�Hb�Mb`T�Hb�Mb@8�Ab�MbPF�Abh�f0*�Abh�f@8�Ab�Mb*�Ab�MbPF�Mb�MbPF�=b�Mb`s���Mb�Mb�p7;b�Mb�~7;b�Mb80Fb�Mb80Fb�Mb@8e/b�Mb@8V/b�MbPFe/b�MbPFV/b�Mb4�9b�Mb���Mb�Mbp��Mb�Mbж�Mb�Mb@8�?b�Mb@8c?b�Mb@8�?b�Mb0*�?b�Mb0*c?b�Mb0*�?b�Mb���Mb�Mb��NbNb0*2HbNb��Nb;h-Nb;h1Nb5Nb�~�Hb5Nb�~�Hb;Nbpb�Hb;Nb�p�Hb;Nbpb;b;Nbpb�Hb;Nb�p;b;Nb�p�Hb@NbPFCHb@Nb`TCHbFNb@8CHbFNbPFCHbFNb`TCHbKNb`T�7b'bPNb'b^Nb'bfNb'b�Db'bTNb'b�b'bjNb'b�boNb����JboNb����Jb�Fb���JbGb����JbGb����JbuNb`TyHbuNb`T�HbzNbPFyHbzNbPF�Hb"�f����;b"�f�����;b~Nb���Hb�Nb�~�Hb�Nb���Hb�Nb�~�Hb�Nb���Hb�Nb@82Hb�NbPF2Hb�Nb0*2Hb�Nb@82Hb�Nb`T�Nb�Nb��aIb�Nb��aIb�Nb���Nb�Nb���/b�Nb���.b�Nb���R.b�Nb����.b�Nb���/b�Nb���/b�Nb����-b�Nb���sb�Nb���.b�Nb���.b�Nb���7.b�Nb���R.b�Nb���8sb�Nb���l.b�Nb����.b�Nb����.b�Nb����.b�Nb����.b�Nb����.b�Nb���/b�Nb���/b�Nb���./b�zh 4b�zh �HbGb���CbGb��CbGb���1bGb��CbGb��CbGb��HbGb��@bGb��CbGb��DbGb��RDbGb�@bGbIbGboIbGb�HbGb�NbGb�IbGb�HbGb�-bGb�CbGb�HbGb�CbGb0DbGb4b�Nb �8b�Nb %9b�Nb M9b�Nb �)b�Nb �:b�Nb �:báh�)báh&8báh�:báh58báh_3báhmGbáh}GbáhAbáh�8báh�8báh9báh%9báhM9báh�:báh�:báh 9b�Nb�)b�Nb&8b�Nb�:b�Nb58b�NbHb�Nb�)b�Nb_3b�NbmGb�Nb}Gb�NbAb�Nb�8b�Nb�8b�Nb�8b�Nb9b�Nb%9b�NbM9b�Nb�:b�Nb�:b�Nb9b�Nb���NbOb��JGbOb��bDb	Ob���JGb	Ob���bDb
Obpb8Fb
Obxi8Fb
Ob�p8Fb
ObpbO;b
ObxiO;b
Ob�pO;bOb�U:bOb�d:bOb��:bOb`s���(bX=b�pObX=b�~ObX=bPe���(bX=b�p�3bX=b�p*ObX=b�~*Ob9Ob�~�Hb9Ob���Hb?Ob�p�Hb?Ob�~�HbDOb�����KbDOb�����KbDOb�����KbIOb�����KbIOb�����KbIOb����r,bIOb�����KbMOb`TF*bA*bPFF*bSOb@8�,bSObPF�,bYOb0*�,bYOb@8�,b�?b�����Kb�?b�����Kb�?b����r,b�?b�����Kb�Lbp���)b�Lbp����Kb�Lbp���V,b�Lbp���e,b�Lbp����Kb�Lbp���r,b�Lbp����Kb�Lbp���!,b^Ob�����Kb^Ob�����Kb^Ob����r,b^Ob�����Kb�g�rh �Nh0*�fk@8�FbPFcif`T\�gpbYAk�pɛf�~��g��*uf���f����i����h���k���g�f����sh������f����n<k������f����T�fp�����f`s���hPe���+b@W��bOb�=bbOb�4bbOb'JbbOb6bbOb3+bbOb@4bbObU4bbObJbbOb�3bbOb�=bbOb�IbbObmKbbOb>/bbOb�LbbOb�KbbObpMbbOb�NbbOb�Mbg2b�Cb�AbUG+b�&8bSZ+b~h+b��Cb*oIb��1b��Cba�3b�Ib�3bq'?b��:b|	58bb
�Cbi
�Cb�
�1b:5>b��Hb�HbQ�@b�y3b��3b!Mbv�1b��3bc�3bv�Nb��Ib&�Hb{�Cb��-b�3bi�3b��Cb4b}Ib��Ib<�1b��Cb��1bS�Hb��Cb>Db�Db0DbqBDb�RDb,B8b�Q8b�4b�0,b�)b`#�/b�&�/b)'m2b�'�rb�(�-b�*sbY,.b�-.b�/7.b�1R.b@38sb5l.b�6�.ba8�.b:�.b�;�.b�=�-bV?3-b�?z4b�B=,bwC2b�Fv+bfH�2bI�4b�I�+bwK�,b+L�1b4MJb�M�-b7Q�4b�R�,b�U�4b�X�;b)[�.b�[�Ab6]�?b�]G)b�]�4bc�4boe/bf�4b�g�,b1hz-bkbDbuk�Kb�l�Jb�o8)b�q<b6u�/b�x�Gb�x�*b�|�4b�}�Gb*~5bт�2b���+b;�JGb��!+bv��>b3��/b��/b7�!5b��b>b��Abr�p)b�f4b	�<b|�35bZ�P5b�e5b��}5b(��5bu��5b��5bI��5b���5b�'Jb��6b���>bϼ/b��V,b>�6b��;6b��W6b_�Z2b���Gb7� )b��g6b���2b��z6b��,b���/b���+b)��6b��$<b��/b[��6b��6b���6b���/bF��+b���6bO��Jb���>b��/b��>b/�[)bt��>be,b�%AbN
�6b~Xsb�6b��;b3+bqZGb�6Jb9�>b�
0b�*b-bW�-bM7b�@4b� �2b�#5<b%U4b�&�*b�)./b�*�Gb`,-b0�;b1#0b�4�)bw5�:b�8FJbt;90b?KbX?O0b�D`0bEq0bUE�0b�ED<b�E#7b G�+b�GZ<b�I�Gb/M�>b�P�0b�U�Kb4V�0bqZ�Kb�Z77b�]r,b#bJb�e�3b�h�=b)i�=b�ibtbRj�Ib�lmKbHm>/bJp�Lbfs�Kb�spMb�v�NbRw^8b�w�0b�z�,bN{4?b�|i-b��-b{��,bz�e/b2�V/bO�,bl��0b��0bG��1b/�??b��UAb��52b=�?3b��;b��7b���7b���Eb/�1b˖K?bq�1b��7;bg�*b��=bE�Y?bH��7b��`Ebx�Eb�8Eb���Eb4�c?b�8Fb��<b���Eb6�,be�/Ib��*b���7bP�$Fb!�3*b��"*b�u*bf�IFbO�H2b��0b���<bO��<b��IbŽA;b��[Fba��Db�q?b;��Fb#�_*b&��Hb�CHb�qEb��O;bJ��Fb��0bx��Fb��M3b��x/b,��Eb��u;b��yHb���Fb/��7b��gFb���7bj��Hb���Ab��Fbm��Eb��!3b
�-3bp��*b��^;b_��Hb���Hb6��7b���EbJ��Hb���Hb��F*b���,b���)b���+b��_3b��?=b_mGb�}Gb|r8b AbR
wDb[�Db�Db,�@bX�?b��*b��?b��<b�@b�@b�!�<b%\=b�%&@bz&7@b�)E@bs,X@bT-�*b�/=b$3l@b�3Ob�6z@b�7=b98�@bV;�@b�>�@b�A*Ob�D!=b�E+b�H5Ab�I�2b�J'-b�M�+b�NH7b�Sn<b�\?b�W�Gb<^Kb�a�Kb�f�<b�j�Kbl8b�o�;b�r�=b&vW7bhyu4b�|~?b,��?b߂~1b����f��?b���DbL��Db�Bb���Ab/��Ab��BbK�(Bbf�8Bb�HBb~�XBb
�hBb��xBb"��Bb���Bb:��DbԏCb\��Bb��Bbv��Bb��Bb���BbْCb �"Cb��2Cb8�BCbĔRCbP�bCbܕrCbh��Cb��Db���Db��-NbėPNb�^NbL�fNb��D-bԘ�8b�U-b��'1bѢ�8b�8bѪ�8b'��8bY�2b���8b��!2b-��8b��3b��61b��G1b-��)bd�W1b��?bQ�j1b>�8bu��8b���8b��9b���)b��9b�%9bI�39b��?b�@9b~M9b��)b��?b[9b��)b0g9bvx9b?�9bq�9b�"�Fby&�9b�)�9bu-�9b>0�9bi3�9b26�9b:9�9b�;
:b#?2b)B:b�E+:b�H8:baKG:b$OU:bQR2Hb�Ud:b�Xr:bz\�:bC_�:b�b�Ib3ex1b�e{1b�j�Dbp�Db�p�Db�p�DbVp�Db"q!Ebfq�Db2s�Dbvs!>b/u�Eb�ut=bv.4bIvE>b�v�Mb�vMHb7w�Jb�whHb�wS>bWxYHb�xFby�Ebo{�>b�~�;bcGb��:bO��JbI��GbR��<b��_7b�WJb^�[Jb��cJb��Kbl�;b��(bҙ�*bP��:bܝ>bӠaIb1�XLb���Mbe��@b��Nb3�t>bw�qAb�>IbT��=b���(b��KEb��3Gb��FbP�Gb���Jb�Hbx��2bߪvFbi�\Kb�;Kb?�RIb���2b$��Lb���Lb��LbF�>Lb���;b߮�=b���2b�#Hb���Ab��Mb`��Mb��NbE��Nb��Nbٲ�:b��:b����i��	Lb���7b���Fb�lFb���?bp�1Nb]�TNb��!,b��J,bN�jJb��n7bB�y7bL�?bM�Eb���7bD��<b��uJb��Lbe�Lbj�3bo��b���?b���:b<�jNb*�@���f@���f���f�f@���f'�f ����f`����f0�f��f¿fοfԿf�f�f	��f�f���f���f��,h��i*�f5�fƿf?�fL�f\�ff�fs�f���f���f���f�Կf���f�f���f���f��,hƿf5�f��f�f?�f�f
Կf�f���f���f��,h��iƿf�f?�fY�f�f�f��f οf!\�f0�f1�f�f&�f2�f?�f���f���f��,hJ�fƿfX�f�fe�ft�f?�f
Կf�f��f
��f�f���f���f��,h��f��f��f��f�f	�f�f�f���f���f��,h�f�f �f2�fD�f���f���f��,hW�fb�fq�f}�f��f��f��f��f��f	��f
��f��f��f
��f�f�f�f-�f=�fI�f\�fl�f��f��f��f��f��f��f��f��f�f���f���f��,h�f�"�f�%�f9�f'�f>�fU�f-�f
G�f
Q�f��f��f��f��f��f��f
�f^�f��f��f��f�fn�f��f��f��f ��f!��f"��f#��f$��f%��f(�f)��f-��f1��f2.�f;��f<�f=�f>��f?�f@2�fA;�fBI�fCS�fD^�fEj�fJy�fL��fM��fN��fP��fQ��fR��fS��fT��fU��fV��fW��fX�fY�fZ"�f[*�f_5�f>�fG�f]�fy�f��f��f��f��f	��f��f��f,�f��f��f�f$�f9�f M�fPX�fPh�fPx�fP��fP��fP��fP��fP��f	P��f
P��fP�fP�f
P*�fP8�fPE�fP¿fPT�fP]�fPm�fP|�fP��fP��fP��fP��fP��fP��fP��f P�f!P �f"P5�f#PL�f$Pa�f%P|�f&P��f'P��f(P��f)P��f*P��f+P�f,P�f-P0�f.PE�f/PZ�f0Pp�f1P��f2P��f3P��f4P��f5P��f6P��f7P��f8P	�f9P#�f:P=�f;PT�f�Pg�f�Pv�fQ��fQ��fQ��fQ��fQ��fQ��f��f
���f���f���f��f��f���f��-�f��8�f���f����f��ʾf��E�f�N�f�_�fI�m�fi���fs���f"���f$���f(���f%���f'���f(���f���f���f��f��f�/�f�F�f�}�f�X�f�h�f�z�f���f���f���f	���f
���f���f���f
���f���f���f��f��f�*�f�A�f�N�f�^�f�l�f�~�f?���f|���f���f����f����f����f\���f��R�f����f����f����f���
h���f�	�f��f�#�f�3�f�D�f���f���f
���f���f���f��f��f�*�f�A�f�N�f�^�f�l�f�~�f�[�f�f�f�-�f�p�f��f�?�f���f���f���f���f���f	���f
��f���f���f ���f���f���f��,hlbpbtbxb|b�b�blb�b�b�b�bYi�b�b�b�b�b�b�b"sh'
sh'sh<sh>sh�g!sh.�f+sh6sh<shCshKshPshUshYsh`shdshoshysh~sh�sh	�sh	�sh
�sh
�sh
�sh�sh�sh�sh�sh�sh
�sh
�sh
�sh��`I���`F���`F���`C���`F�R�@A����@���@>� D  <�� � <�!5!�:��!*#.��%�%�-�`&f&�-���`F���`F���`F���`F�	��`F�
���*����&����$�
���"���Ruh�sh��fiAb�Ib�sh�sh�shth
thththth"th)th/th4th��f;thBthIthPthVth[thbthithothtth{th�th�th�th�th�th�th�th�th�th~-h�h�th�9h�th�th�th$2h�2h�thvh�sh�Ib�th�th�th�th��f�f�8b�th�th�:h�zhF-h��f�thuhuhuhuhuh uhgk&uh,uh1uh7uh=uhCuhIuhPuhUuh\uhcuhjuhpuhvuh|uh�uh�uh�uh�uh�uh�uh�uh�uh�uh�uh�uh�uh�uh�uh�uh�uh�uh�uh�uh�uh�uhvh
vhvhvhvh#vh(vh/vh6vh<vhCvhJvhQvhWvh^vh�uh]uhcvhhvhmvhrvh�shwvh|vh�vh�vh�vh�vh�vh�vh�vh�vh�vh�vh�vh�vh�vh�vh�vh�vh�vh�vh�vh�vh�vh�vhwh
whwhwhwh"wh(wh.wh4wh:wh@whFwhLwhRwhXwh^whdwhjwhpwhvwh|wh�wh�wh�wh�wh�wh�wh�wh�wh�wh�wh�wh�wh�wh�wh�wh�wh�wh�wh�wh�wh�wh�whxhxhxhxhxh xh&xh,xh2xh8xh>xhDxhJxhPxhVxh\xhbxhhxhnxhtxhzxh�xh�xh�xh�xh�xh�xh�xh�xh�xh�xh�xhFwhLwhRwhXwh^whdwhjwhpwhvwh|wh�wh�wh�wh�wh�wh�wh�xh�wh�xh�xh�wh�xh�xh�wh�xh�xh�xh�xh�xh�xh�whyh
yhyhyh�xhyhIuh�th�uh�uh�uh"yh(yh.yh4yh:yh@yh�xhFyhLyhRyhXyh�thvuh|uh�th�xh^yh�xh�xh�xhyhPuh�wh�whdyhjyhqyhwyh�9h�wh�2h�wh=uhgk~yh$2h�wh~-h�th�yh�xh�yh�th�th�uh�wh�wh�whCuh�xh�yh�xh�wh�yh�yh�yh�yh�yh�yh�yh�yh�yh�yh�yh�yh�yh�yh�yh�yhxhxhxhxhxh xh&xh,xh2xh8xh>xhDxhJxhPxhVxh\xhbxhhxhnxhtxhzxh�xh�xh�xh�xh�xh�xh�xh�xh�xh�xh�xhFwhLwhRwhXwh^whdwhjwhpwhvwh|wh�wh�wh�wh�wh�wh�wh�wh�wh�whbxhhxhjwhzxh�xh^whtxhdwh�xh�xh�xh�xh�xh�xh�xh�xh�whFwhLwhRwhXwh�xhnxh�wh�wh�xhvwh�wh|whpwh�whVxh�yh�yh&xh�yh�yhxh�yh xh�yh�yh�yh�yh�yh�yh�yh�yh\xhxhxhxhxh�yh�yhJxhDxh�yh2xhPxh8xh,xh>xh�yh�yhzhzh�uhzhzh#zhzhzh"zh(zh-zh2zh7zh<zhAzhFzhLzhRzhXzh_zh�th��gdzh�rikzhqzhvzh|zh�Vi�zh�zh�zh�zh�:h�h�zh�zh�zh�zh�zh&uh�zh�th�zhm;b�zh�zh�zh�zh�zh�zhG�fO�fIh�zh��f�zh�zh�zh�zh�zh�zh�zh{h{h{h
{h1uh{h4�f{h1uh{h{h�Ib%{h��f�f+{h.{h1{h5{h9{h<{h?{hE{hI{hM{hR{hW{h\{h�sfa{h�bB�fd{hj{hp{hv{h|{h�{hH�f�{h�{h�{h�{h�{h�{h�{h�{h�{h�{h�{h�{h�{h�{h�{h�f�{h�1h�th�{h�uh�{h�{h�{h�{h�{h�{h|hvuh|uh�uh�uh�uh�uh�uh�uh�th�uh�thIuh�uh��f|h�uh�uh
|h�uh|h|h�f|h!|h)|h.|h2|h8|h=|hC|hJ|hM|hP|hS|h[|h^|hb|hh|hl|ht|hx|h||huhΟf�|h�|h�|h�|h�|h|h�|h�|h�|h�|h�|h�|h�'b�|hF-h�|h�|h�|h�-b�|h�|h*b�zh�|h�|h�|h�|h�uh]uhjuhpuh�|h}h�uh,uhPuh uh�h�th�uh�8b�|h�9h}h�2h�th=uhgk~yh$2hcvh~-h�th}h
}h�th�th�uh}huhCuhjuhpuh�uhuhUuhvh�uh\uh�sh�sh�th�shvhth�uh
vh(vhvhvh#vh}h
thCvh/vh6vhcuhth�{h�thWvhJvhQvhth}h"}h�th"thth)th4th/th��fuh;thIthBthPthVthbth[thithoth(}htth�th{th�th�th�th�uhuh�th�th�th�th,}h3}h�uhPuh uh�h�thjyh�8bwyh�9h�sh�2h�th=uhgk~yh$2hcvh~-h�th}h
}hvh�th�th�uh�sh}huhCuh9}h@}hG}huhUuhvh�uh\uh�sh�sh�th�shvhth�uh
vh(vhvhvh#vh}h
thCvh/vh6vhcuhth�{h�thWvhJvhQvhth}h"}h�th"thth)th4th/th��fuh;thIthBthPthVthbth[thithoth(}htth�th{th�th�th�th�uhuh�th�th�th�th,}h3}h�uh�uh�uh,uh�uhIuh�th�uh�uh�uh�|h�uhjuh�uh�uh�uh�uh�thvuh|uh]uh�th}h�uhpuh�uh7�iGuf@�iW�i(�if�iH�ip�i{�i��i��i��iڐi�i�i$�i@�i\�i��iu�i��i��i��i��iԑi�i�i�i6�iF�ia�i}�i��i��i �i��i��i��iܒi�i�i�i0�iD�iD�ib�iH�ip�iw�i��iȗiȗi��i��i��iʓi�i�i�i �iH�i;�ip�iP�ic�iu�i��i��i��i��i�i�i��i��i˔iהi�i�i@�i�ih�i�i��iși-�iC�i�i^�i �iP�ix�i��i��i��iĕix�i��iӕi�i��i
�iؚi��i��i��i��i0ZX ZX�YX�YX�i��i��i~�i��i7@i��i��i�i��i��i˂iقi�i�i�i��i�i�i�i&�i5�iA�iM�i[�i�i�ih�iu�i �i$�i(�i��i��i��i��i,�i0�i��iՃi�i�i4�i8�i<�i@�iD�iH�iL�i��iP�iT�i�i�i�i)�i6�iD�iR�i]�ic�iX�ii�iq�iw�i~�i��i��i��i��i��ib��i��i˄i؄i�i�i�i�i7�i>�iC�iK�iV�i\�ie�io�i|�i��i��i��i��i��i��i��iƅiхi܅i�i�i�i��i�i	�i�i�i�f'�iL�g/�i8�i>�iF�iN�iV�if�i*�fn�ix�i��i��i��i��i��i��iʆiӆi��fچi�i�i��i�i�i+�i;�iI�id�iq�i\�i`�i�id�ih�il�ip�it�ix�i|�i��f��i��i��i��i��i��i��i��i��i��i��i��i��i��i��i��i��i�i�i�i�i�i�i�i�i �i$�i(�i,�i0�i>�i4�iQ�ib�if�ij�iz�i��i��i��i��i��i��i��i �i��i��i��i��i��i��i�i$�i3�iH�iY�ig�iy�i��i��i��i��i��i��i��i��i��i��i��i��i��i3�i��i�i%�iH�iB�iR�i]�im�i��i��i��i��i��i��i��i��i��i��i�i/�iH�i>�iQ�iU�ik�io�is�iw�i{�i�i��i��i��i��i��i��i��i��i��i��i��i��i��i��ip�i��i��i��i
�i�i&�i�i<�iS�i��iL�ib�in�im�i�iy�i}�i��i��i��i��i��i��i��i��i��i��i�i�i"�i2�i6�iF�iT�in�i~�i��iC�i��i��i��i��i��i��i��i�i-�ik�uYvY�uY�vY�uYtk�uYvYPvY wY�vY~k�vY�vYvY wY�vY �] �] �] �] �] �] �] �] �] �] �] �] �] �] �] �] �] �] �] �] �] �] �] �] �]`�]�] �^`T] m_��]`�]��^`T]�_�^`�^��^`T]0�_`T]`T]`T]`T]`T]p^_��_��_`T]p�_0�]�]0�^`T]�m_��]0�]��^`T]�_�^p�^��^`T]P�_`T]`T]`T]`T]`T]�k_p�_�_`T]��_�]��]@�^`T]�n_`�]�]��^`T]��_ �^��^��^`T]p�_`T]`T]`T]`T]`T]Pl_`�_@�_`T]Г_Љ]��]P�^`T]`o_0�]Ј]��^`T]��_0�^��^��^`T]��_`T]`T]`T]`T]`T]@h_P�_p�_`T]P�_��]P�]`�^`T] p_�]��]��^`T]��_@�^��^��^`T]��_`T]`T]`T]`T]`T]i_@�_��_`T]��_p�] �]p�^`T]�p_І]p�]��^`T]`�_P�^��^�^`T]��_`T]`T]`T]`T]`T]�i_0�_��_`T]0�_@�]�]��^`T]�q_��]@�]��^`T]@�_`�^��^�^`T]��_`T]`T]`T]`T]`T]�j_ �_�_`T]�_�]��]��^`T]`r_p�]�]��^`T] �_p�^��^ �^`T]�_`T]`T]`T]`T]`T]�a_�_P�_`T]��_�]��]��^`T]�w_@�]�]�^`T]@�_��^��^0�^`T]��_`T]`T]`T]`T]`T]pg_��_��_`T]��_��]`�]��^`T]px_�]��]�^`T] �_��^��^@�^`T]�_`T]`T]`T]`T]`T]@__��_��_`T] �_��]0�]��^`T]0y_�]��] �^`T]�_��^�^P�^`T]0�_`T]`T]`T]`T]`T]`_��_��_`T]�_`�]`�]`�]`�]`�]�]�]�]�]�]p�^p�^p�^p�^p�^`T]`T]`T]`T]`T]�\_�\_�\_�\_�\_�]�]�]�]�]��]��]��]��]��]�^�^�^�^�^`T]`T]`T]`T]`T]�]_�]_�]_�]_�]_`�]�]p�^`T]�y_��]`�]��^`T]�_P�^��^�^`T]P�_`T]`T]`T]`T]`T]�`_��_ �_`T]��_0�]�]��^`T] s_��]0�]��^`T]�_`�^��^�^`T]0�_`T]`T]`T]`T]`T]�b_�_��_`T]�_�]��]��^`T]�s_`�]�]��^`T]�_p�^��^ �^`T]P�_`T]`T]`T]`T]`T]Pc_�_��_`T]`�_�~]0~]�^`T]�t_�}]�}]0�^`T]��_��^�^`�^`T]p�_`T]`T]`T]`T]`T] d_�_��_`T]@�_Г]��]��^`T]pu_0�]В]�^`T]��_��^��^0�^`T]��_`T]`T]`T]`T]`T]e_�_ �_`T]�_��]P�]��^`T]0v_�]��]�^`T]��_��^��^@�^`T]��_`T]`T]`T]`T]`T]�e_н_P�_`T]�_p�] �]��^`T]�v_А]p�] �^`T]`�_��^�^P�^`T]��_`T]`T]`T]`T]`T]�f_��_��_`T]@�_�]�]�]�]�]��]��]��]��]��]��^��^��^��^��^`T]`T]`T]`T]`T]Ђ`Ђ`Ђ`Ђ`Ђ`�Q]�Q]�Q]�Q]�Q]�N]�N]�N]�N]�N]0V^0V^0V^0V^0V^`T]`T]`T]`T]`T]��_��_��_��_��_`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]P`@:`0�^#`P4`P�aP1^�^`�a��a��a``�`��a�a`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]0` :`�^�"`04`0�a01^�^@�a��a��a@`�`p�a��a`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`:`�^�"`4`�a1^Џ^ �a��a��a `�`P�a��a`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]�`�9`�^�"`�3`��a�0^��^�a��a��a```0�ap�a`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]�`�9`��^�"`�3`��a�0^��^��ap�ap�a�`@`�aP�a`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]�`�9`��^p"`�3`��a�0^p�^��aP�aP�a�` `��a0�a`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]�`�9`p�^P"`�3`��a�0^P�^��a0�a0�a�``��a�a`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]p``9`P�^0"`p3`p�ap0^0�^��a�a�a�`�`��a�a`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]P`@9`0�^"`P3`P�aP0^�^`�a��a��a``�`��a�a`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]0` 9`�^�!`03`0�a00^�^@�a��a��a@`�`p�a��a`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`9`�^�!`3`�a0^Ў^ �a��a��a `�`P�a��a`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]@�a@�a@�a@�a@�a`T]`T]`T]`T]`T]@/_@/_@/_@/_@/_`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]ЊaЊaЊaЊaЊa`T]`T]`T]`T]`T]@-_@-_@-_@-_@-_`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]P5aP5aP5aP5aP5a`T]`T]`T]`T]`T]p�ap�ap�ap�ap�a`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]�2a�2a�2a�2a�2a`T]`T]`T]`T]`T]�a�a�a�a�a`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]pX_ X_�W_`T]�{_`T]`T]`T]`T]`T]�X_`X_X_`T]P|_`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]pDa`T]�``T]`T]`T]`T]`T]`T]`T]0na`T]��`�]�]�]�]�]�~]�~]�~]�~]�~]`�^`�^`�^`�^`�^`T]`T]`T]`T]`T] �_ �_ �_ �_ �_P�]P�]P�]P�]P�]�]�]�]�]�] �^ �^ �^ �^ �^`T]`T]`T]`T]`T]P�_P�_P�_P�_P�_PN]PN]PN]PN]PN]PN]PN]PN]PN]PN]PN]PN]PN]PN]PN]PN]PN]PN]PN]PN]PN]PN]PN]PN]PN]�]�]�]�]�]P�]P�]P�]P�]P�]�U^�U^�U^�U^�U^`T]`T]`T]`T]`T]��_��_��_��_��_�]�]�]�]�]`�]`�]`�]`�]`�]�T^�T^�T^�T^�T^`T]`T]`T]`T]`T]��_��_��_��_��_Ч]Ч]Ч]Ч]Ч] �] �] �] �] �]T^T^T^T^T^`T]`T]`T]`T]`T]��_��_��_��_��_��]��]��]��]��]�]�]�]�]�]@S^@S^@S^@S^@S^`T]`T]`T]`T]`T]p�_p�_p�_p�_p�_p�]p�]p�]p�]p�]��]��]��]��]��]�R^�R^�R^�R^�R^`T]`T]`T]`T]`T]p�_p�_p�_p�_p�_�~]�~]P�^`T]`u_P}]}]�^`T]`|_��^��^p�^`T]�c``T]`T]`T]`T]`T]�d_м_�_`T]��_`T]`T]`T]`T]`T]^^^^^�^�^�^�^�^`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]�^^�]^`T]��_�^^�]^`T]��_�^^�]^`T]��_�^^�]^`T]��_�^^�]^`T]��_�^�^�\^`T]��_�^�^�\^`T]��_�^�^�\^`T]��_�^�^�\^`T]��_�^�^�\^`T]��_��]��]��]��]��] �] �] �] �] �]�Q^�Q^�Q^�Q^�Q^`T]`T]`T]`T]`T]�_�_�_�_�_�Q]�Q]�Q]�Q]�Q]�Q]�Q]�Q]�Q]�Q]�Q]�Q]�Q]�Q]�Q]�Q]�Q]�Q]�Q]�Q]�Q]�Q]�Q]�Q]�Q]`T]`T]`T]`T]`T]�|]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]�|]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]�{]��^`T]��_`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]O]O]O]O]O]O]O]O]O]O]O]O]O]O]O]O]O]O]O]O]O]O]O]O]O]`T]`T]`T]`T]`T]�O]�O]�O]�O]�O]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]�M_~_p�_`T]pE`�M_~_p�_`T]pE`�M_~_p�_`T]pE`�M_~_p�_`T]pE`�M_~_p�_`T]pE` �` �` �` �` �``T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]�`�`�`�`�`�`�`�`�`�`�`�`�`�`�`�`�`�`�`�`�`�`�`�`�`PV]PV]PV]PV]PV]�T]�T]�T]�T]�T]p^^p^^p^^p^^p^^`T]`T]`T]`T]`T]P�^P�^P�^P�^P�^��`��`��`��`��`��`��`��`��`��`��`��`��`��`��`��`��`��`��`��`��`��`��`��`��``�``T]`T]`T]`T]`�``T]`T]`T]`T]`�``T]`T]`T]`T]`�``T]`T]`T]`T]`�``T]`T]`T]`T]P8_P8_P8_P8_P8_07_07_07_07_07_ ;_ ;_ ;_ ;_ ;_`T]`T]`T]`T]`T]�H`�H`�H`�H`�H``T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`�``�``�``�``�``T]`T]`T]`T]`T]0�`0�`0�`0�`0�``T]`T]`T]`T]`T]`T]`T]`T]`T]`T]��`��`��`��`��``T]`T]`T]`T]`T]��`��`��`��`��`��]��]��]��]��]��]��]��]��]��]��]��]��]��]��]��]��]��]��]��]��]��]��]��]��]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]�O]�O]�O]�O]�O]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]P�]@�]�^�\]��`��]��]�^�[]@�`�^@�^P�^@�^�va�Z]�Z][][] []�*_P(_�%_�a�Na��]p�]�^�[] �``�]��]�^0[]��``�^p�^`�^�^�sa`T]`T]`T]`T]`T]p(_�%_�"_пa�Ka v] v] v] v] v]@p]@p]@p]@p]@p]�^�^�^�^�^`T]`T]`T]`T]`T]`�]`�]`�]`�]`�]`=_`=_`=_`=_`=_@C_@C_@C_@C_@C_�X_�X_�X_�X_�X_`T]`T]`T]`T]`T]`�``�``�``�``�``T]`T]`T]`T]`T]`T]`T]`T]`T]`T]�ea0�a��a`T]`�a��]��]@�^`T]aaP�a`�a`T]p|a`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]�`P�`q``T]�;`Э]�]0Z^`T]��_P-`@v`�g``T]S`@k]@k]@k]@k]@k]pg]pg]pg]pg]pg]�^�^�^�^�^`T]`T]`T]`T]`T]@1_@1_@1_@1_@1_`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]��^��^��^��^��^`T]`T]`T]`T]`T]`T]`T]`T]`T]`T] g] g] g] g] g]�f]�f]�f]�f]�f] �^ �^ �^ �^ �^�f]�f]�f]�f]�f] }_ }_ }_ }_ }_`````0C`0C`0C`0C`0C`0�^0�^0�^0�^0�^`T]`T]`T]`T]`T]0-`0-`0-`0-`0-``T]`T]`T]`T]`T]`T]`T]`T]`T]`T]N`�i`@x``T]�]``T]`T]`T]`T]`T]�z_��_p�_`T]�_`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]�O^�K^I^`T]`�``�]��]�\^`T]��`p�]��]�F^`T]P�`�`�`�`�`�`C`C`C`C`C`�^�^�^�^�^`T]`T]`T]`T]`T]-`-`-`-`-``T]`T]`T]`T]`T]`T]`T]`T]`T]`T]@
a)aP:aa� a`T]`T]`T]`T]`T]�K`�m`�y`pJ`�[``T]`T]`T]`T]`T]`T]`T]`T]`T]`T]Oawa�ha`T]�Za@�]P�]�~^`T]�$`pG`�`�t``T] Z`�`�`�`�`�`�B`�B`�B`�B`�B`�^�^�^�^�^`T]`T]`T]`T]`T]�,`�,`�,`�,`�,``T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`a�&a�<a�a a`T]`T]`T]`T]`T]�~`�`@�` �`��``T]`T]`T]`T]`T]`T]`T]`T]`T]`T]�aPQa�7a`T]�a�] �]�}^`T]��_ {``�`Д``T]P�`�`�`�`�`�`�B`�B`�B`�B`�B`К^К^К^К^К^`T]`T]`T]`T]`T]�,`�,`�,`�,`�,``T]`T]`T]`T]`T]`T]`T]`T]`T]`T]�	`pD`�L``T]`:``T]`T]`T]`T]`T]�<_pI_�[_`T]��_`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]�O^�K^�H^`T]@�`@�]p�]�\^`T]`�`P�]��]�F^`T]0�`P`P`P`P`P`pB`pB`pB`pB`pB`p�^p�^p�^p�^p�^`T]`T]`T]`T]`T]p,`p,`p,`p,`p,``T]`T]`T]`T]`T]`T]`T]`T]`T]`T]0Xa�ka�ya@`a�ba`T]`T]`T]`T]`T]�,_�+_�*_@�`PC``T]`T]`T]`T]`T]`T]`T]`T]`T]`T]�O^�K^�^`T]��`��]��]�|^`T]�Sa "_!_ _`T]p�`0`0`0`0`0`PB`PB`PB`PB`PB`P�^P�^P�^P�^P�^`T]`T]`T]`T]`T]P,`P,`P,`P,`P,``T]`T]`T]`T]`T]`T]`T]`T]`T]`T]�
^@^��^`T]0�a`T]`T]`T]`T]`T]��`��`�a`T]@/a`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]�^�^P�^`T]�a0�]�^�z^`T]@�``�`�a��``T]�a�_`T]`T]`T]`T]�``T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]�e]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]e]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]�d]�d]�d]�d]�d]�d]�d]�d]�d]�d]�d]�d]�d]�d]�d]�d]�d]�d]�d]�d]�d]�d]�d]�d]�d]�d]�d]�d]�d]�d]�d]�d]�d]�d]�d]�d]�d]�d]�d]�d]�d]�d]�d]�d]�d]�d]�d]�d]�d]�d]@d]@d]@d]@d]@d]@d]@d]@d]@d]@d]@d]@d]@d]@d]@d]@d]@d]@d]@d]@d]@d]@d]@d]@d]@d]pN]pN]pN]pN]pN]pN]pN]pN]pN]pN]pN]pN]pN]pN]pN]pN]pN]pN]pN]pN]pN]pN]pN]pN]pN]�N]�N]�N]�N]�N]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]W`W`W`W`W``T]`T]`T]`T]`T]�#a�#a�#a�#a�#a0c]0c]0c]0c]0c]0c]0c]0c]0c]0c]0c]0c]0c]0c]0c]0c]0c]0c]0c]0c]0c]0c]0c]0c]0c]0�]0�]0�]0�]0�]��]��]��]��]��]P�^P�^P�^P�^P�^`T]`T]`T]`T]`T]��_��_��_��_��_@�]��]��^�b]��_@�]��]��^�b]��_@�]��]��^�b]��_@�]��]��^�b]��_@�]��]��^�b]��_�`]�`]�`]�`]�`]�^]�^]�^]�^]�^]�^�^�^�^�^�]�]�]�]�]`�``�``�``�``�``T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]�T`�a`�n``T]��`pe`�r``|``T]��``O`�_` k``T]�`��`��`��``T]г`p�_�_�``�_p�`p�_�_�``�_p�`p�_�_�``�_p�`p�_�_�``�_p�`p�_�_�``�_p�`0@_0@_0@_0@_0@_0F_0F_0F_0F_0F_PJ_PJ_PJ_PJ_PJ_`T]`T]`T]`T]`T]0�`0�`0�`0�`0�``T]`T]`T]`T]`T]`T]`T]`T]`T]`T]��]@�]#^`T]��]м]��]Z^`T]`�aP�`�Ka /a`T]��``T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]�^`^�p^`T]��a`�]P�]�l^`T]�a_�_p_`T]��a`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]�^@^�p^`T]��a@�]0�]�l^`T]Пa�_�_P_`T]p�a`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]��]�]@i^`T]Чa��]��]pe^`T]��a�_�_�_`T]��a`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]��]�] i^`T]��a��]`�]Pe^`T]p�a�_`_�_`T]`�a`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]0#`P$``$``T]p$`�)^*^ *^`T]0*^�Q`�R`�R``T]�R``T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]^]^]^]^]^]0�^0�^0�^0�^0�^`T]`T]`T]`T]`T]��_��_��_��_��_�]]�]]�]]�]]�]]�]]�]]�]]�]]�]]�]]�]]�]]�]]�]]�]]�]]�]]�]]�]]�]]�]]�]]�]]�]]�]]�]]�]]�]]�]]�]]�]]�]]�]]�]]�]]�]]�]]�]]�]]�]]�]]�]]�]]�]]�]]�]]�]]�]]�]]P]]P]]P]]P]]P]]P]]P]]P]]P]]P]]P]]P]]P]]P]]P]]P]]P]]P]]P]]P]]P]]P]]P]]P]]P]]0R]0R]0R]0R]0R]0R]0R]0R]0R]0R]0R]0R]0R]0R]0R]0R]0R]0R]0R]0R]0R]0R]0R]0R]0R]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]�\]�\]�\]�\]�\]�\]�\]�\]�\]�\]�\]�\]�\]�\]�\]�\]�\]�\]�\]�\]�\]�\]�\]�\]�\]`T]`T]`T]`T]`T]`T]`T]`T]`T]`T]�?a�]aqaBaUa`T]`T]`T]`T]`T]��` �`p�``�`�``T]`T]`T]`T]`T]`T]`T]`T]`T]`T]��] �]�"^`T]p�]��]`�]�Y^`T]@�a0�`�Ka/a`T]��`�^�^�^�^�^�^�^�^�^�^�^�^�^�^�^�^�^�^�^�^�^�^�^�^�^��]��]��]��]��]��]��]��]��]��]��]��]��]��]��]��]��]��]��]��]��]��]��]��]��]`T]askBskC"skcnskd[AkE+ske7skFDskf�fhQski?sklVskmcsknkskqvskR�skH�skr�sks�sks�skw�sk?�/hv��fz�sk
�sk
�sk�uh�sk?�i�sk
�b
�skrsk-[tb5�ِ�tb�f��f�G�G@5��4��fřf`�GP�G@5��4��fЙf �G �G
@6�@6��fۙf��G0�G
@4�@4�@�I��Ip�IQP�Q��I@�I@XP�Q��Q�Q@Xp�I�Ip�I@����I��I@�I0���I��I �I @h��U�U��U@\��I�I��I(@pP�I �I��I @h��I��I �I@\ �I��I@�I@Xp�I��IP�I ���I��I�I����I��I��I�� �I��I�I����I��IP�I��@�I��IP�I ����I��I�I��`�I��I��I����I��I�I����I��IP�I���I��IP�I ����I��I�I��0�I��I��I����I��I�I��P�I��IP�I�� Jp8JP7J@h Jp8JP6J@h Jp8Jp5J@h�
Jp8JP7J@h�
Jp8JP6J@h�
Jp8Jp5J@hPbJPsJ�wJ  lyJ0yJ��J  lp�J��J��J@@���J��J@�Jp�J��J0�Jp�J��J�J e�e�e��d��d��d��d��d��d��d�pd�`d�T������		tj�Q\���$*$>$K$\$l$�,�qC
b�������o0@��Ad@
2.��I�'C`$Cx	���o�"C���o�o�C�ۑ�qC�qC�qC�qCrCrC rC0rC@rCPrC`rCprC�rC�rC�rC�rC�rC�rC�rC�rCsCsC sC0sC@sCPsC`sCpsC�sC�sC�sC�sC�sC�sC�sC�sCtCtC tC0tC@tCPtC`tCptC�tC�tC�tC�tC�tC�tC�tC�tCuCuC uC0uC@uCPuC`uCpuC�uC�uC�uC�uC�uC�uC�uC�uCvCvC vC0vC@vCPvC`vCpvC�vC�vC�vC�vC�vC�vC�vC�vCwCwC wC0wC@wCPwC`wCpwC�wC�wC�wC�wC�wC�wC�wC�wCxCxC xC0xC@xCPxC`xCpxC�xC�xC�xC�xC�xC�xC�xC�xCyCyC yC0yC@yCPyC`yCpyC�yC�yC�yC�yC�yC�yC�yC�yCzCzC zC0zC@zCPzC`zCpzC�zC�zC�zC�zC�zC�zC�zC�zC{C{C {C0{C@{CP{C`{Cp{C�{C�{C�{C�{C�{C�{C�{C�{C|C|C |C0|C@|CP|C`|Cp|C�|C�|C�|C�|C�|C�|C�|C�|C}C}C }C0}C@}CP}C`}Cp}C�}C�}C�}C�}C�}C�}C�}C�}C~C~C ~C0~C@~CP~C`~Cp~C�~C�~C�~C�~C�~C�~C�~C�~CCC C0C@CPC`CpC�C�C�C�C�C�C�C�C�C�C �C0�C@�CP�C`�Cp�C��C��C��C��C��CЀC�C�C�C�C �C0�C@�CP�C`�Cp�C��C��C��C��C��CЁC�C�C�C�C �C0�C@�CP�C`�Cp�C��C��C��C��C��CЂC�C�C�C�C �C0�C@�CP�C`�Cp�C��C��C��C��C��CЃC�C�C�C�C �C0�C@�CP�C`�Cp�C��C��C��C��C��CЄC�C�C�C�C �C0�C@�CP�C`�Cp�C��C��C��C��C��CЅC�C�C�C�C �C0�C@�CP�C`�Cp�C��C��C��C��C��CІC�C�C�C�C �C0�C@�CP�C`�Cp�C��C��C��C��C��CЇC�C�C�C�C �C0�C@�CP�C`�Cp�C��C��C��C��C��CЈC�C�C�C�C �C0�C@�CP�C`�Cp�C��C��C��C��C��CЉC�C�C�C�C �C0�C@�CP�C`�Cp�C��C��C��C��C��CЊC�C�C�C�C �C0�C@�CP�C`�Cp�C��C��C��C��C��CЋC�C�C�C�C �C0�C@�CP�C`�Cp�C��C��C��C��C��CЌC�C�C�C�C �C0�C@�CP�C`�Cp�C��C��C��C��C��CЍC�C�C�C�C �C0�C@�CP�C`�Cp�C��C��C��C��C��CЎC�C�C�C�C �C0�C@�CP�C`�Cp�C��C��C��C��C��CЏC�C�C�C�C �C0�C@�CP�C`�Cp�C��C��C��C��C��CАC�C�C�C�C �C0�C@�CP�C`�Cp�C��C��C��C��C��CБC�C�C�C�C �C0�C@�CP�C`�Cp�C��C��C��C��C��CВC�C�C�C�C �C0�C@�CP�C`�Cp�C��C��C��C��C��CГC�C�C�C�C �C0�C@�CP�C`�Cp�C��C��C��C��C��CДC�C�C�C�C �C0�C@�CP�C`�Cp�C��C��C��C��C��CЕC�C�C�C�C �C0�C@�CP�C`�Cp�C��C��C��C��C��CЖC�C�C�C�C �C0�C@�CP�C`�Cp�C��C��C��C��C��CЗC�C�C�C�C �C0�C@�CP�C`�Cp�C��C��C��C��C��CИC�C�C�C�C �C0�C@�CP�C`�Cp�C��C��C��C��C��CЙC�C�C�C�C �C0�C@�CP�C`�Cp�C��C��C��C��C��CКC�C�C�C�C �C0�C@�CP�C`�Cp�C��C��C��C��C��CЛC�C�C�C�C �C0�C@�CP�C`�Cp�C��C��C��C��C��CМC�C�C�C�C �C0�C@�CP�C`�Cp�C��C��C��C��C��CНC�C�C�C�C �C0�C@�CP�C`�Cp�C��C��C��C��C��CОC�C�C�C�C �C0�C@�CP�C`�Cp�C��C��C��C��C��CПC�C�C�C�C �C0�C@�CP�C`�Cp�C��C��C��C��C��CРC�C�C�C�C �C0�C@�CP�C`�Cp�C��C��C��C��C��CСC�C�C�C�C �C0�C@�CP�C`�Cp�C��C��C��C��C��CТC����������2��f`���
D �Cp�C��C�D��iԔP�CGb�\Ԕ,hb?b&bGb=bOb	PbOb	YbD����!eb`D����mb�C����wb�>D�����bpD�����bD����Yb"D����!lb`<D����@b`�C�����b��C�����b D����mb�C�����b@�C�����b0�C�����b D�����b�D�
���f�>D@��b FD@��b�>D���b�JD�	��b�JD���bp�C��bPMD`�b`MD��	�f@�C ���bD`�b�,D�b !D����$bp�C����/b`<D����;b`�C����Gb��C����Yb D����kb�C����{b@�C�����b0�C�����b D�����bPD�����b`D�����b0D�����b�C�����b�>D����
bD����'bpD����CbD��]b�"D�wb�&D���b�&D`��b'D������	�fb3b		�flbb3b	]b�b
	�flbb3b	]b�b
�����b�rf	�rf	�blb�rf	lb�rf	�����f'.h�b�b�b�b�b'.h�b�b�b�b�b'.h�b	�f�blb�rf	lb�rf	lb�rf	;Zx����0N����;Zx����0N��������������2�lf���!F &F0FpF�F0 ���F�lfPF@��lfF��
mf�F�
� mf�F@
�4mf�F�
�Fmf�&F��cmfkmf
����cbh������2�vf��@-F�3F@3F�vf`;F�����vf �F�����vfp�F`���vf �F����
wf�F����&wf��F����>wf�CF����Wwf`;F����hwf�F����wf��F�����wf�oF�����wf�:F�����wf sF�����wf zF������fp�F�����wf�qF`���wfpF����xf��F`��,xf��F����Jxf0<F`��^xf��F`��nxf�iF`���xf@hF�����xfp�F�����xf�kF�����xf@lF�����xf0SF�����xf�TF�����xf�WF����yf�F`��yf�F����+yf��F��8yf��F`��Eyf��F����ZyfШF����pyf�F�����yfP}F�����yf��F`���yfP�F`���yf@�F`���yf �F`���yfRF����zf�RF����)zf@ZF����@zf@^F����P�F0�FP�F��FƄf��F��F0�F��2=�f���F�F��F`@Ԕ`�FP�FB�f�G���M�f�G���\�f@+G�i�f0+G��f�1G������f��F������f�5G������f`�F������fp�\H@Ԕĉfˉfp�\P@Ԕĉf��f�NG��ԔL�g�\��f�;G��Ԕ�gґfPIG��Ԕ,h��2��f�0;G;G`NGp6G�f��Ԕ�fGG������f0cP������f0OP�����fUP�����fpXP�����f�UP�����fPYP����"�f��P����)�fPFG����0�fPlP����;�f�dP����B�fdP����I�f�^P����Q�f�^P�����f0JG����X�f�DG����c�f`CG����p�f�>G����z�f�@G������f�;G����p�fPPG������f�IG����` �pUG UG�TGUGr�fpWG�UGr�fp^G`XG�WGU�fp[G�ZG��f`%��mG�mG@mG0mG�f��2
�f�%�0fGfG�eGP�ih�fP�in�f	x�f
������f������f������f�����f�Ji��f6�g�oG�f�f�qG`$��f�kG�$��f�^P����'�f`bP����/�f0OP����7�f�oG$�?�f�oG�#�H�f�oG@#�P�fPhG�"�[�fpfG "�P|G�vG�uG&�f�yG�xG�f��2%�f (�`�G�G.�f�G@0�<�f��G�/�J�f�G@/�U�f0�G�.�`�f�G.�k�f��G`-�v�f�G-���fP�G`,���f�G�+���f�G`+���f��G+���f��G�*���f��G`3�Ŝf��G3�Μf@�G 1�؜f�G�0��f�G2���f��G�2��b0/h�b������f�Ji��f�Ji�����f'.h�b������f�����f'.h�b��f�f�f�����f'.h�b������f�����f'.h�b������f�����f%�f����%�f�f'.h�b����%�f�f�b%�f�����f�rf	�b�b�b�b�b�b�blbpbtbxb|b�b�b,hY�fe�fn�fw�f~�f��f��f��f��f��f��f��fƝf,h�b�b�bbYi
bbbb%b-b6b,h�b�b�b�bYi�b�b�b�b�b�b�b,h̞fўf֞f۞fߞf�f�f�f�f��f��f�f�f,h
�f�f�f �f&�f-�f3�f:�f@�fF�fL�fS�fV�f��2��f`7�@�G��fp�G�<�ȟf��G@<�ԟf�G�;��f`�G�;��f��G ;���f�G�:��f@�G`:��f��G:��f�G�9�(�f �G@9�4�fp�G�8������*h�����*h�����*h�����*h�����*h�����*h�����*h�����*h�����*h�����*h�����*h������2_�f�=� �Gp�G��G&�f�GG�0�f��G�F�A�f��G`G�N�fHF�Z�f�H�E�l�f�H E�v�fp�G�D���f��G@D���f��G�C���f��G�C���f�H=���f  HC�ʵfp!H�B��f�"HB���f�#H�A��f0%H A��f &H�@�0�f@(H@@�����A�fA�fD�f
����XAkA�fR�f
A�fB�f����A�fXAk����A�fXAk����XAk����XAk����XAkXAk�i����XAk����XAk?h����XAk�i$�f����XAk�+h��f@H��+H�)H�)H@)H�f`)HP)H�0H�f��2�L��f�K��>H?H@>Hx�f0`Ք�<H�f�>H`Ք.�f:�f�SH`ՔW�f_�f�SH`Քy�f��f�>H`Ք,h��f�SH `Քzsh��f�SH(`Քzsh��f@�H N���f@�H N���f�AHO���f@�H@M���f0FH�L��f����	�f	��i�f�f��f	��i �f0�f
;�f����Gnf��f��H0�Ք��f
��f��H��23�i Q�0�H �H��H@�H��f�f0�H�����f�H�����f �H����0�f�H����A�f0�H����M�f��H����\�f�H������f��Hf�f`�H��f �Hn�f��H~�f��H��f��H��f��H)gk��H��f��H��f��H��f��H��f��H��f �H�+h�H��f �H��f��H��f	��H�@i��H��2ٺf�T���H��H�f �H m�*�f�H�l�:�f��H�k�D�f��H�k�L�f��H k�U�f��H�j�_�f��H j�h�f`�H�i�p�f�H i�z�f �H�h���f�Hh���f�H`g���fP�H�f���f@�H@f���f@�H�e���f��H`c���fPI`b���f@�H�d���f`
I^���f0I`���fpI�\���fI\���f�I`[��f�I�Z�
�f�I`Z��f�IZ� �f@I`Y�/�f�H�X�>�fp�H�c�J�fI`a�U�f Ia�e�f�I]�p�f�I_�|�f�IZ�����ٺf�i����ٺf�i$�f����ٺf����ٺf�+h����ٺf�f����ٺf��f��f����ٺf��i����ٺf��iٺf��f��f
�Ji��fٺf��f��f
�Ji��fٺf��f��f�Ji��fٺf��f��f�Ji��f����ٺfٺf��f
��f�Ji��f
ٺf��f
��f�Ji��f
����ٺf��fٺf��f��f�Ji��f	ٺf��f��f�Ji��f	����ٺfٺf�h	=9h	����ٺf�h	ٺf<�f��f����ٺf�Ji��i����ٺf�h	����ٺf�h	����ٺf��f����ٺf��f����ٺf�h	����ٺf����ٺf����ٺf��f��f��fs�iB�f��fs�iB�f��2��f`n�PEI��f�EI�t���f�OI`t��'h�OI`t���f�FI�s���f�GI@s���f�HI�r��f�JI r��f�KI@q��f0MI@p��f�NI�o�������g*�f������g��f��f6*h2�f������g��f��f6*h������f��f6*h����;�f��i����;�f��f2�f����;�f��f������f������g��2�f�u��PI�wI�QI(�Ք�PI�f�SI��&�fVI���1�fpWI ��<�f@�I���D�f0�I ��L�fP�I���T�f �I��_�f0�I���i�f�I`��s�f0�I���{�f�I@����f0�I�����f�~I`����f�I����f yI�����f�^I ����f�_I�����f�YI ����f�[I�����f�aI`����f�bI���f �I`����fPdI��f�fI`���f�|I��f`{I`��'�fphI�/�fUI���8�fjI ��C�f��I��K�f�I �R�fЀI�~�Z�f�kI@~�b�f�mI�}�m�fpI }�x�f0tI�{���fvI@{���f�qI�|���f�rI@|���fxI�z������g�����g��f�����g��f�����g�rh�����g�����gGnf�gGnf��f	�����g�rh�����g�����g�rh�����g�rh+�g�����g�����g�rh�����g�rh�����g�rh�����g�rh�����g�rh�����g�rh�g��f�����g�����g�����g����}bz�f�f����}bz�f�����g�����g�����g�����g�rh�����g�rh�g�rh��f�g�rh��f�g�rh��f�����g�rh�����g�rh�����g�rh��f	}b������f	�h}b������2
Xi`����I0�IP�I�f
XiP�I���f`�I`���f�I���'�f �I���6�f0�I��@�f@�I���L�f�I�_�f��I@��p�f �I���{�fp�I���cbh��f
cbh��icbhcbh��f6�g����cbh_mi��f?hnf��f��inf��f
��f_minf��f
��f��i��f
��f_mi��f
UCS-4LE��J �J��JӼg��i������i�g����!8hJCh������g
��gL+h�Ah�Ji�g��g�Ji�gĽg
Ͻg۽g
�g�g�g�g�gf�f�gL+hf�f6�g�gL+h�gR�g��Jp֔�g
g�g��Jp֔�g
}�g��Jp֔�g
��2�g���J0�JP�Jp֔`�J�g��J`���g�J��g��J���g`�J`��+�g@�J@��8�g@�J`��E�g`�J���R�g��J�`�g �J@��r�g��J�����g��J����2��g����J@�J��g��J������g0�J������gP�J������g0�J������g��J������2:�g`���K`�J�J��J�Jh�֔��J@�g�J����K�g�J`��Y�g�J�d�g�K����q�g �J������g��J������g �J������g��J������g �J������g`K������g��J������gp�J������g�K������g�K������2&�gऒP
K@!K&�gp
K����/�g�K����=�gPK����R�gpK����i�g"K�����g�K������g�K������gK�����g�K������g!K����8�g�!K������g !K������g0!K������2��g ����KpdK��g��g�"K����%xf iK���Yb GK@����gP�K����eb �K������g�K������g �K������g�K������g��K������g��K������g`�K������g0�K����?sk�K������g�"K����%xf�hK���Yb��K ����g �K����eb��K�����g`oK���� �g`mK����5�g��K����G�gP�K����P�g nK����X�g�nK����c�gpK����o�g�pK����z�g0qK������g`)K������g�"K����%xfiK���Yb�WK ����g �K����eb�K������gлK�����gP�K@����g�~K������g�~K������gK������g0K������g`K������g�K����5�g��K������g �K����%xf�hK���Yb��K@����g�"K����%xf�hK`ÒYb��KÒ��g@�K����eb�K�����g�uK�����g�vK�����g�zK����)�gwK����5�g�wK����B�g�xK������gPyK����M�gzK����\�g��K���f�g��K@��p�g�\K�{�g��K�����g��K ����gp^K�����g��K`����g`1K������g�.K����g �K������g@}K������g |K������g�|K������gP|K������g�|K������g��K����g�;K@���g`2Kདྷ�g�K����.�gЗK���;�g�NK����O�g�SK�’f�gUK’}�gQK������gЎK������g�K ����g�K������g��K����%xf�hK`ŒYb��K�Ē��g@�K������g0sK������g`sK������g�sK������gsK������g�rK������g�sK������g tK������g�tK������g`uK������g�7K`Ē��gAK�Ò5�g@�K����	�g��K����Yb�K�ƒ��gp�K����%xf`hK ǒ&�g �K������g�5K`ƒ��gp>Kƒ��g�"K������g�����g@iK�����g�iK����ebP�K����)�g`jK����5�g@kK����B�g�kK������g�lK����1�gP0K����D�g�K����U�gАK����c�gЇK����y�g��K������g�K������gp�K������g�sK������g�$K�Ȓ%xf#KȒ�����k�k�h�����@k��i	�@k��i	�h2h$�f2h����vh�fhvh�fh�h�����fh�fh�h������g	����vh�sk�����sk����2h�����k�����k3�i�����k�����k3�i�����k�����k�����k$�f�k��f�����fh�fh�h����2h�sk����2h�sk�g�kvh�k�h�����sk�����sk�����k�k�h%xf������g������g	��g	�h������i	��2�Ԓ,�gՒ�	LpLPTL�	LpL�`הp�Kؒ@ؒ��g�:L3L��gp6L�0L��g�\�`ה Bb�\��g�\�`ה Bb�\3�g0
L`ה,hE�g
�\`ה��g	R�gpEL�Ak�g�\�`הL�g�\�gp�\p`ה Bb.�gp�\x`ה�whA�gp�\�`הX�g��g�HL��g��gp�\8`הL�g��g�\@`ה�f��g�\H`ה,h��g�\P`ה,h�\�g�\Q`ה,h�\]�g�\�`ה Bb�\q�g�\�`הL�g�\��g�\`ה,h��g�\ `ה,h��gp�\0`הL�g�g�\(`ה��g��gp�\�`ה��g��g�LL�g��gp�\�`הL�g(�g p�\�`הPBb
Xi4�g`L����A�gFL����U�g�L����g�g0L����r�g�L������gL������gpUL������g 
L������g�L������g@L������g0UL������g@L������g�!L�����g0 L����%�g�L����;�g�L����P�g0L����j�gpL������g�	L������g�	L����7wf0#Li=i�(L��g�&L��gL�Ak0WLYL`L@aL�\Lp[L`@L'�g�bLPgL�cL�dL�eL�fL`@L��2.�g ْhLPhL��g�hL������glL������g�nL������g�oL������g�mL�����g kL����Yb�zL�����g �L�����g �L����'�g��L����-�g�uL������g��L������g��L����D�g0�L����R�g��L����ebp�L����c�g��L����l�g0�L������2@ޒy�g@ܒ�}L�pL��L��g��g�vL������g�xL������g�|L�����C]0J]�F]0�L`�L�L@�L��LP�LP�L�L0�L�LP�L�pL��L�L�C]0J]�F]0�L`�L�L@�L��LP�LP�L�L0�L�LP�L�pL��L�L�lf�tLPpLppL�rL0�LЗL��2 ���g`ߒ��L`�L��L��Lkf@ؔ@�L�gp�L�����g��L�����g��L�����g��L������g�L�����g��L����7�g��L����.�g��L����<�g��L����M�g��L����]�gaM��o�g�aM �~�g�bM���lf��g��g��g�@k�sk������g��g��g��g��g6*h�����g����������g�h������g�h������g��g��g�h��g����Gnf��g����Gnf������g��g�h��g����ɲi��g�hf�f6*hu�i �����ɲi��gc�g�Hh�Ji��g��g
��g
��g�Ji��g�h�Hh�Ji��g��g
������gc�g������g�h:�g	:�i��g��g�Ji��g`�L@�L�L �L�L�L@�g����L�g����Yb�'M�����3h�]M����f�^M�����h�)M����nf�
M�����g`M����(b`M�����g�M�����g@(M����/�g�M������f�)M�����hp�L����nf �L�����g@�L����(b�)M����Yb`'M��(b�BM����Yb0'M����f�)M�����h�L����nf�L�����g@M����(b��L�����g�M����Yb'M@���f6M�����h@�L����nf�
M�����g`M����(b8M�����g�M����Yb�&M��@�g��L����L�g�M����Yb�&M`���fPEM�����h �L����nf�
M�����g`M����(b <M����X�gP�L������g@M�����g�M����`�g��L����i�g�M�r�g�M��|�g�+M ���g�M����g�M����gM����6*h�'M����Ybp&M@���f@SM�����h��L����nf�
M�����g`M����(b:M����u�i�LM��c�g�L�����g�M����Yb@&M��@�gp�L����L�g *M����Yb&M��}�i`M������g@�L�����gP
M@�`�g`�L����i�gp	M���g��L�����g�	M��Yb�%M��}�ip�L����Yb�%M��@�gp�L����L�gp(M����Yb�%M���fP/M�����h@�L����nf�
M�����g`M����(b�2M�����g�M����}�i����Yb�L ���f�L�����h�L����nfP�L�����g�M����(b�L�����g �L�����g�M���g�M������g`�L����J�g�)M����W�g@�L����s�g �L������g�)M����
�g�)M�����g�)M����"�g�M`�.�g�L����@�g��M����L�g�M����Yb�qM����gЗM��r�g�M��|�g��M���g�M���3h��M���h nM����6*hТM����`�gpjM����i�g�jM��gh�~M����nh�~M����fhM��mh0M��thPM����|hpM������f�qM�����g�M����nf��M����(b �M�����h��M����u�i�M@�Yb�qM����gЗM��r�g�M��|�g��M���g�M���3h��M���h nM����6*hТM����`�gpjM����i�g�jM��gh�~M����nh�~M����fhM��mh0M��thPM����|hpM����h{M����h�M��h0lM �+h�kM��������<h����Ih
������g����U�h����ɲi����$�fGnf��gGnf����U�h�kM��M0mM�MУM�qMYb�M�Yb�M����f`�M����^�i`�M�����h��M�����	h��M�����	h��M`��	h��M`��	h`�M�����h��M��
h@�M����
hp�M����
h��M`�
h��M����
hP�M�����h@�M��h0�M��)
h��M ��h��M����0
h��M���g�M����nfP�M����(b��M����i�gp�M@�`�g��M����:
h��M��H
h`�M����@�g@�M����L�gP�M����u�i��M`�qh��M������g��M����YbP�M����f`�M����(b�M����nf��M�����g �M����@�g�M��L�g��M�����
h��M�����
h��M����Yb�M`��
h��M�����
h�M���
h@�M������f�M�����h��M����nf`�M�����g��M����(b�M������g��M����Yb�M ��
h��M�����
hеM�����
h�M���
h��M����h`�M����h �M����h��M����!h��M����*h �M����3h��M����<h`�M����Eh��M����Nh`�M����Vh �M����ah��M����lh��M����yh`�M�����h �M�����h��M�����h��M�����h �M�����h�M ��hp�M ��h��M���h0�M ��h��M ���g��M�����	h
V
h<�fL+h6�glb_
h��fn
hu
h	
h
2�h	�
h	�����i������g@h	�
h	�
hcbh�
h��f��g������f�h��i
�
h	�
hcbh����@h	`�M�M��M��M��M��M0�M�M�M �M@�M@�M��fN�����h`N�����g�N����nf�N����(b�N����@�g@N����L�gPN����6*h�N�����
h�N�h�N�h�N�6*h�
N������f�
N�����hN����nf�
N�����g0N����(b�N����hN��hN�������� h
����2h�
h��h��+h���������
h�
hE�f�������
h
�
h
�h�h�h�h�h�h��f�h�h�h�h"�h	�h	$�h
�h
�h�h@vh�h�h
�h
�h�hw�f�h�hhhhhhh�fhkBhhHh h�Xh$h�rh(h@�gE�i ,h!=h"Lh#Xh$dh%qh&{h'�h(�h)�h*�h+\�i,�h-�h-�h.�h.�th/yh/�/k0�f1�h2�h3�h4�h5'Xi6�h7e�f8�h9h:h;
h<h=%h>7h?Eh@Sh[gh\qh\�h]�h^�h^�h_�h_�h`�h{�h{�h|h}h}]uh~ hŸf@h,hΟf�h,h$h*h,hڟf�h,h�f-h,h��f�h,h�f8h,h
�f@h,h�f�h,hE�iSh,h.�fZh,h:�fuh,h,h�h�h�h�hhh2h?hYhdh|h�h�h�h�h�h�h�h	hh
2h<hXhch{h�h
�h�h�h�h�hh�h(h����,hPh��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������2t��f�3�`�O��O��O0VO0WO��i3�ipWO�*��'hWR����<i`�O�'��'h@bO '��'h�bO�&��'h dO@&��'h0�O���7h0bO 0��'h�iR����'h`,Q��(h�/Q�ߓ(h�.Q`�0(hp,Q�H(h�/Qߓ��f��U���c(h��U@����f��Q Ɠm(h �Q�œW�f��O��v(hp�Q�ړ�(hQ@ۓ�(h�FQݓ�(h�?Qޓ�(h AQ�ݓ�(hPzQ�ܓ�(h gQ@ܓ�(h�hQ�ۓ�(h�zQ -��(h@{Q�,�)h�{Q�,�)h�{Q`,�#)hP|Q ,�-)h}Q�+�C)h�}Q�+�W)h�~S���a)h�S��o)h0�S ��|)h0�Rও�)h@�R���)h0�R ���)h��R����)h �R`��K�g�R`���)h@�R���X�gp�R ���)h�R����)h��R���)h�S����)h�S���)h�S����)h��R��)h�R����)h �R���)h��R����)h��R ��
*h�R��*h`�R���*hp�R��!*h��S�-*hp�S@��<*h0�S@��F*h��S���N*h@�S���]*hp`R ��e*hЖS���>�g�R���r*h@�R��*h0�R����*hP�R`���*h��R���*h��R`���*h��R����*h��R��*h�iR ��u*h�S��*h�S���*h�wS����*h0{S���*h��R`���*h�iR����*h�iR����zi uS ���*hp�R`��+htR ��	+hR���+h@S���+h�~S�(�&+h0_R���2+h�ORณ:+hp�T�ٓ*h �R���@1h�R ��F+hPS��P+h�S@��X+h�iR ��]+h�R��m+hpQ`�w+h`Q@�d+h�Q��l+h�Q��v+h�Q��u+h�Q@�~+hP�S����h�\P���+h �S ~��+h��S�}��+h�S`}��+h`�S}��+h��S�|��+h�GV`ޓ�+h �Q�ٓ�+h`�Q ٓ�+h�Q�ؓ�6h��Q ؓ�+h�nP@���f�-P���+h�-P@��+h@/P`��+h00P� 
h.P��,h1P�
�,h��U���,h��U“ ,h0�U`“/,h��U���?,h03P@
�L,h�5RྒྷT,h�4R���],h�7R�)�I,h�6R`��Q,h`5R`��Z,h8R`)�h,h��O@�v,h��O���,hЌO`��,h�O��,hP+R�*��,h�+R�*��,h�+R`*��,h�+R *��,h@,R�)��,h�RO`��,h@RO���,h`�U`y�-h �Uy���f�Q`֓�{hp�Q֓�{h��Q�Փ��f��Q Փ-h�Q�ԓ-h�Q`ԓ-h�Qԓ-h�Q�ӓ-h �Q@ӓ-h0�Q�ғ"-h@�Q`ғ)-h�Qғ/-h�Q�ѓ5-h �Q@ѓ(-h0�Q�Г.-h@�Q�Г4-hP�Q Г:-h0�Q�͓@-h@�Q`͓F-h`�Q +�I-h��Q�ϓS-h`�QϓZ-h�Q`ϓ��f��Q�Γz�fоQ ΓP�hP�Q�̓f-h �Q�̓��f0�Q ̓l-h`�Q�˓r-h �Q@˓z-h@�Q�ʓ�-h��Q�ʓ�-h�Q ʓ�-h0�Q�ɓ�-h`�Q`ɓ�-h��Qɓ�-h��Q�ȓ�-h �Qȓ�-h��Q Ǔ�-h��Q�Ɠ�-h�XO@*��-h��O�)��-h�YO�)��-h�ZO )��-hp[O�(��-h ^O`(��-h �O�'�.h�O�.�.h�R�ē.h�R`ē+.h�Rē5.h��S�~�<.h�.R ��T.h��O`�g.h�O�/�x.h��V�V��.h�eO�%��.h gO�����.h gO�����.h�SO�����.hpSO�����.h O ��$h��O%��.hP�O���/h0hO`$�/h nO�#�&/hprO#�7/h�tO`"�h�yT w�h�zT�v�N/h@RT�x�W/h�xT�w�b/h0YTx�r/h�O �z/h�{T`v��/h`|Tv��/h�yO"��/h��O`��/h�O��/hp�O�!��/hp�O�!��/h��O� �0h�|O !�0hP{O@ �0h~O��*0h��O`�20h��O`�<0hp�O�H0h0�O�/�Y0h�O��j0hРO`/�0h�Q��0h�Q��yskQ ��0h0Q`��0hQ`-��0h�SO /��0h�SO�.�$h�O���0h�O���0h�\O���0h`�O �1h�P �1h�P��$1h�P`�31h�P��D1h�P��O1h�!P`
�Z1h�!P`
�b1hP�*�f`�S@��q1h��S�z1h��S�5�f��S����1hP�S@���1hP�S����1h��S ���1h��S����1h��S`���1h��S���1h�S����1h��S���1h��S���1h�S����1h�S����1h��S ���1h �S@���1h@�S�2h`�S���
2h�S��2h��S �#2hER���(2h�MR���52h ER ��;2h�MR໓��f�MR@��I2h�MR���P2hR���U2h�MR@����i�O��a2h0TP�h2h0PP`�n2h�iP ����f0cP �~�f�hP���w2hkP���}2h0OP���2hUP��
hpXP���	h�UP ��hPYP ��2h��P`���iNP@�
hPlP`��0
h`pP����hrP`��
h�dP ��
hdP���
h`bP��)
h�^P���2h�^P��t�f�gP@����fmP����2h`�P��2h�JP ��2h�MP .��f`FP���2hP>P ��2h�@P@��2h�"V`���2h -V୓�2h�*V���3h`)V ��&3h�(V��A3h`,V@��\3h�-V��r3h�-V ���3h.V����3hV ���3h�V ���3h�V����3h�V���3h@V@��	4h�V ��4h�5V���:4h@9V ��Q4h
V@��d4hV���z4hPV����	hp�P����4h��P����h�<P�	��4hТP 	��4h@4V����4h@4V����4h 0V����4h 0V����4h 0V���5hpV`��5h�.V ��-5h��X T�E5h��X T�]5h��X�S�w5h`�X`S��5h�!V�(��5h!V )��5h�7VS��5h@�S |��5h�1V���5h�1V���5hpV`��6h�P@��6h�P���6h�
Q@�6h�
Q@�*6h�R`Ó(6hR�“/6h��O��jyf�O���iP�O`�N�i��O��%sk0�O��;6hp�O �B6hp�O`.�@�i��O`�<�i��O���i`�O��I6h��O��Q6hP�O��V6h0�P��`6hp�P��j6h�P��t6h��P�~6hP�P ��6h��P@��6h��P`���i��P���6h��P`��6hp�P���6h��P��6h��P��6h��P���6h��P@��6h�P���6h0�P���6hP�P �H�i��P��6h��P`�7h`�P��	7h0�P`��7h��P��7h@�P`���f��P`�7h��P��7h0�P�-�$7h0�P@��57h��P�E7h��P��hНQ�֓S7hЕQ�ד^7h��S ��f7h��S���m7h`�S (�v7h��S`(��7h�Q`+��7h��Q œ�7h�XV��7h�X�2��7h X�2��7h�X`2��7h�X 2��7h X�1��7h�X�1��7h�X�0��7h�X 1�8h0X�U�8h�X`1�*8h�X@U�<8h�X�0�nhp�NR�M8h �N�R�th��N Q�|h��N�P�gh�N@P�T8h0�N�O�hh��N@O�U8h�N�N�[8h �N@N�fh��N�M�mh��N@M�%*h�ND�a8h �N I�l8h@�N�H�6*h��N�Q�w�i��N�L��8h��N�L�(b0�N L��8h��N�K��g��N`K�nf�NK��b�N`J�d,h�N�I��8h`�N�G��8hp�N@G��8h��N�F��8h�N F��8h��N�E��8h��NE���g0�N`D��8h�-O�/��8hPO`C��8h�OC��8h�O�B��8h�OB�9hO A�9h�	O@@�%9h�O�?�19h�O?�G9h�O`>�R9h�O>�_9h�O�=�r9h�O =��9h�9O�-��9h O�<��9h�"O <��9h &O�;��9h�3O /��9h�(O@;��9hp,O`9��9h@,O�:��9hP,O:�	:h�,O�8�:h�,O 8�0:h�,O�7�G:h�,O�6�^:h�,O6�v:h@-O 4��:h-O`5��:h -O�4��:h`-O�3��:h�-O�2��:h�-O�1��:h�-O@2��:h�-O�0��:hp6O�.��:h 8O`.�;h�=O@-�;h@AO�,�#;h0JO�+�/;h0LO+�=;h�GO ,���f��N`K�N;h��N�Q�C;h�GO ,�U;h`�T��\;h`�T@�k;h`�T`u�{;h�U���;h`�S@���;h0�U�'��;h�U�y��;h��U�{��;h�U@{��;h �U�z��;h@�U@z�<h@X�T�%<hX`0�?<h��P�-�,�gq'h0TO�'h�'h�SO�'hP<hU<hZ<h_<h
_<h
����j<h����^�i^�i�h^�i%$k^�i%$k����_mi����_mi�����<h
�<h	������i�4h�����qi�qi�����qi�qi�����qi�+hlb����L+h����L+h����L+h����L+h�+h�<h	�<h�<h^�i�<h�<h
����$�f����$�f����^�i����^�i����^�i����^�i����^�i����^�i����^�i����^�i����^�i����^�i^�i}b����^�i��i����^�i������g�&h�����<h�i�<h�<hL+hf�f6�g�<h�g�<h	L+h=h����lb$�fL+hlb=h����L+h����L+hL+hlb%$k��i=h
#=h
.=h�g�gf�f6�g����7=h:=h����7=h:=h��i�Ji������i==h��g�f2�f+h%$kL+h_
h����L+hL+hB=hL+hB=h�8h-2h�xfU=h
�8h-2h�xfU=h
����L+h����L+h����L+h����L+h=hc=hh=hm=h����L+hL+h��i4h����L+h����L+h����u=h	�����h	����L+hL+h-2h��f6�gL+h��f6�gL+h=h�=h�����g�g�g�gf�f�g�gf�f�g�gf�f�g�gf�f�����g�g�����g�g��f?h������f��f�h����L+h����L+h����L+h�=h�����=h�=h��i	L+h�.hL+h�f�=h6=bL+h�=hL+h�=hL+h�=h����c=hh=h�����=hL+h�sf��f �iL+h�sf��f �i����_mi������i�=h��i�=h�=h
�=h
������f�4h������iBh�=h����1�i�Ji��i�=h�=h�����=h
��i�<h
>h
>h��i�<h
>h
>h?h?h����>h?h����>h+>h7>h
$�f����>hB>hO>h
]>h��h��h������fP�i��f�=h��fP�i�=hf�f��il>h��gs>h��i_mi��g>h������i�>h	�>hB�f�>h�>h�>h�>h	��gcbh�>h
�>h�>h	B�f��gcbh������g��i�>h����L+h��i��f
L+h��f
����)gk��f)gk�.h��f)gk�.h������f
�g)gk������f
�g)gk��f)gk�>h	��f)gk�>h	�bd,h�bd,h�>h�>h����L+h��f�>h�>hE6h�-h?h
����?h����?h?h��g����lb��ilb?h%$k ?h$?h$?h�*h1?h��i��f
L+h��f
�����h�+b�h8?hK?h
Y?h�����hm?hv?h�����?h�����?h�����?h����}?h�����?h�����?h
�����h�����h�����?h�?h�����h�����h�h}b�����h�����h�����h����}b�?h�����@i�����@i�����@i�����h�����h�����h�����h�����h�����h�����+b�h�����h�����h�����h�����h�����h�����h�hi�i	�����h�����h�����h4h�xf�&h�?h�?h����z>h�����?h�6h�����?h�6h������i������i����c=hh=h�?h�?h@h����	@h	@h@h!@hY�g�sk	'@h	�f	?sk��f	,@h������f	8@h�<hA@h
](hO@h)gkO@h�g[@h
)gkO@h�g)gkO@h)gkO@h�g[@h
�f�h�k$�fi@h��f��gyqh�k$�fi@h��f��gyqhysk-2hq@h�����@h�@h�@hs�i��fA�fB�f�@hs�i��fA�fB�f������ilb�sk��ilb?h%$k����lb�sklb?h%$k����lb�sklb?h%$k������i������i������i������i������i������i������i������i������i������i������i������i������i������i������i������i������i������i��i	�fZ6h������i�Ji������i'�g������in6h������i'�g������in6h������f������f��f��i��g������f��f6�g2�h	�
h	��f�@h2�h	�
h	������f6�g�����@h�@h������f������f<�f��icbh�@h�@hcbh������f�sf��i��gcbh�)hcbh�@h�Ji=9h	cbh��ff�fn
h������f������f������f��fL+h6�g��ilb%$k��f6�g_
h������f��f6�g������f������f������f�Ji������f��i�Ji�
hcbh������i�<h��i��gcbh��i_mi��gcbh��i��gcbhf�f�=h��i�
h��fu
h	
h
������g�����+h����D�i������f��f�@h��f�@h��f؁i�@h�@h�@h�@h�@h��i�@h�@h��f��i�����@h�����@h�����@h
����Ah��iAh
cbh��f��g&Ah
&Ah
�����h	�����h	&Ah
�h	cbh��fcbh�����rf	lb����L+h��i4hL+h1Ah����L+h6AhCAhL+hPAh����L+h'@h$�f����WAh	�/k�<h��iaAh������frAh������f����{Ah
{Ah
D�i%$k�����Ah�����k����s�i�>h�����Ah�>h$�f^�i�h�����Ah�����Ah�����Ah�Ah�sk	�����Ah)gk�h����@h	@h	�h����{Ah
�����Ah2h}�g�Ah2h��i	%$k����{Ah
Νh
{Ah
�Ah%$k�&h�Ah�Ah�Ah
�����Ah�����rf	����Bh�#h����Bh
����Bh?hBh����Bk�����Ah����Bh�����@h
�����@h
����#Bh����+Bh
������gk9hD�i<�f6Bh
����nf�8h�@iD�i%$kD�i�@iD�i�@iDBh����D�i����D�iD�iLBhTBhYBhHh+oBhYBhHh+����TBhoBhtBh�Bh����TBhoBh�Bh����TBhoBhtBhTBhoBh%$k����TBhoBhtBhTBhoBh%$k����TBhoBh�BhTBhoBh%$k����TBhoBh�Bh�Bh����TBhoBh�Bh����TBhoBh�BhTBhoBh%$k����TBhoBh�BhTBhoBh%$k����TBhoBh�BhTBhoBh%$k����D�i��i�9h����D�i����D�i�Bh�Bh	��i6Bh
����D�i����D�iD�i�BhPAhTBhoBh%$kTBhoBh%$kD�if�f6�g6Bh
D�if�f6�g
�g�g^�i%$k�����g�����g�g^�i%$k����D�i�b�Bh�Bh������g�@i����Ch	ğf�@iCh	%$kD�iCh�<h�g�gPAh�g�gPAh��i#Ch,Ch��i#Ch,Ch?h5Ch%$k?h5Ch%$k����D�i����D�i����D�i����D�i����D�i����D�i����D�i<h����D�i<h����D�i<hD�i:Ch
D�i:Ch
D�i:Ch
D�i:Ch
����D�i����D�i^�i�JiD�i:Ch
D�i:Ch
������i�����>h�����>h�>h�<h	��g�����k$�fY�gEChQCh
_Ch
��g����Bhlbpbtbxb|b�b�b�b�b�b�b�b�b�b�b�b�b�bYi�b�b�b�b�b�b�b�b�b�bbYi
bbbb%b-b6b,h��O������f��O����Yxf��O����������f�\ ��Kghp�\��xhbghp�\��L�g0123456789ABCDEF0123456789abcdef��Photoshop 3.08BIM�		nopqrstuvwxyzabcdefghijklmNOPQRSTUVWXYZABCDEFGHIJKLMabcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ�@ip�\`� Bb�@ip�\`�L�g�@ip�\`� Bb�@i�T�@ip�\`�L�g�Bi�Tp
@ܔJi* _��T��TGLi0
U��T��T�Up�Tٺf�T�U�T�T�_�pHUPUp�f�`��HU IUIU�HU�Ri�HU�HU�HU�Ri0KU�Ri����������U������f�~i�ri�rip�U��U�ri3�i��U b��ri��U�a��ri��U�a�ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyznopqrstuvwxyzabcdefghijklmNOPQRSTUVWXYZABCDEFGHIJKLMabcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ��U�U@�U�ri@�U��Up�U�zi0�U�U��U�zi�U�U��U�zi@�U�zi �U��U�zi��2aYi�e�0IVPIV��ge�i�IV����s�i�LV���������g@_V0_V �i`_V��Vx�i�lf��2�g��lf`h��_V�dV�� _V2�i��V����D�i��V����Y�i�eV`��h�iPlV�����i@mV����(�i nV������ioV����P�i�oV������i�pV����x�i�qV������i�rV����ȏi`sV������i@tV������i�vV@f�֌i0yV�����i�yV������i�|V�����i�}V����4�iP~V����O�iV����_�i�fV����u�i0{V������iP�V������i0�V������Vp�V@�V@�V�V��V��V��V��V����0�VУVv7hL�g�\<�i
I�i��\
'hQ�i��\'hY�i��\.'ha�i��\='hi�i��\O'hq�i��\�i�\s�� Bb�\y�i	�\r��L�g�\��i��VQ�� Bb��V��i�\R��L�g�\��i
�\�� Bb�\d�h�\��� Bb�\��i�\���,h��i�\���,hɟi�\��� Bb�\՟i�\���L�g�\�ip�\���L�g��ip�\H���g$h�\*��L�g�\-8h�\��L�g�\�i�\S��L�g�\�ip�\X��$�i)�i�\`��L�g�\@�i�\a��L�g�\W�i�\b�� Bb�\g�i�\��� Bb�\�.h�\�� Bb�\�.h�\��L�g�\y�i�\��L�g�\��ip�\��L�gבf�\ ����i�\��� Bb�\��i�\���L�g�\ i�\��� Bb�\נi�\��� Bb�\�i
�\��L�g�\�i�\����i�\��L�g�\�i�\q�� Bb�\�i�\��L�g�\)�i
�\P��L�g�\6�i�\��� Bb�\E�i�\(��_�i��\0���whʁi�\����gs�i�\����g��i�\�����i�\�����i	�\p����i�\� �,hái�\� ���g	�$h
p�Vh���Yh�\�����i$r0h
�\���`�i<0%h��V�yhԡi
�\����i�\8���i��i
�\��� Bb�\�ip�\����i�ip�\� ���i�i�\���(�i��\��5xh@�i	�\x��I�i�\���Y�i��i�\�����i�\���_�id�i	n�i
�whx�i�\!��L�g�\K�h	�\(��Ih	C%h
 �V��ii�i
��V�Bb��i=�h��i��hp�V�i,h�i,h��ia�iȢi�g�i�\��� Bb�\�i�\��L�g�\�i��\���i�i�\���L�g�\5�ip�\��I�iM�ip�\ ��`�i0123456789abcdef0123456789ABCDEFh�i!�iW��WN�i��W@�W�������������������`gX�i fX�cXpcX@cX�i�bXeX�bXPbX fX�cXpcX@cX�i�bXeX�bXPbX�aX0aX�`X�^X"�f�^X�_X�_XP`X ����X��X��X��i0�X �X�X��X��XP�X��i`�X�X �X�X�X��i�XX��X �X��X��X1�i �X`�X�Xp�XP�X@�i�X��X`�XгX��X �X@�i�X0�XP�X��X�X��X��X`�X\�i��Xp�X �X�X��X��X`�Xg�i��Xp�X �X�X��X��X`�Xs�i��Xp�X �X�X��X��X`�X~�i��Xp�X �X�X��X��X`�X��i��Xp�XP�X�����0k06[�0k�\�`�L�g�\]9k�U[�����������������������������@k@5\����Ak�a\����AkpC\����"AkpJ\����1�g 1\����0Ak`\����7Akp]\����?Ak�[\����JAk�X\����VAk�V\��0k U\����[Ak�i\����]"k�S\����bAk4\����lAk c\����}Ak`E\�����Ak�M\�����AkR\�����Ak@P\�����Ak m\�����Ak`d\�����Ak`d\�����Ak`i\�����Akpi\����Bk0l\����Bk�K\����"Bk�G\����4Bk A\����BBk A\����MBk�>\����_Bk�=\����uBk r\�����Bk@=\�����Bk�b\�����Bk�b\�����Bk�;\�����Bk�9\�����Bkp5\����	Ck�2\����CkP2\����1Ck�n\����BCk0p\����VCk@.\����lCkp�\����|Ck0u\�����C]0J]�F]h����h ��!���� h
��g��r�g���|�g ����g��f�f$�ff�ff�f�g����(b����nf�����h������f����h�����\P�\`�\�\��\ �\З\Yb�\@���Kk�\������g@�\����Yb�\@��	Lk@�\����Lkp�\����Lk�\����$Lk�\����,Lk��\����5Lk�\������g��\�����&hFfk{Kk��iLk�&hFfk�C]0J]@]�%]2] ]�]P0]`+]�(] ]�]]�9]�8]�] ]�]p]�C]0J]�F]�J]�J]	

 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~������������������������������������������������������������������������������������������������������������������������������Yh�rkp�a@W0�abPb�B[��a��a�a��a�a��a,h,h`���@��`��!��'��6�@=��H��P��S��m� u����@��`�����@������Ȓ�ؒ�ޒ�ے 3�@e��g�GA$3a1�qC%bGA$3p1113�C�bGA*GA$annobin gcc 8.5.0 20210514GA$plugin name: gcc-annobinGA$running gcc 8.5.0 20210514GA*GA*GA!
GA*FORTIFYGA+GLIBCXX_ASSERTIONSGA*GOW*�GA*cf_protectionGA+omit_frame_pointerGA+stack_clashGA!stack_realignGA$3p1113pMDbGA*GA$annobin gcc 8.5.0 20210514GA$plugin name: gcc-annobinGA$running gcc 8.5.0 20210514GA*GA*GA!
GA*FORTIFYGA+GLIBCXX_ASSERTIONSGA*cf_protectionGA+omit_frame_pointerGA+stack_clashGA!stack_realignGA*GOW*�pMDbGA*GOW*�bbGA+GLIBCXX_ASSERTIONS��Cb
GA*FORTIFY���C��C
GA*FORTIFYP�Cb
GA*FORTIFYpMD�bGA+GLIBCXX_ASSERTIONSphp-5.2.17-216.el8.x86_64.debug�Y��7zXZ�ִF!t/���
]?�E�h=��ڊ̓�N��уe��ט�KF�%����`�."�͟"/YfLavh�X�
��ܲ���KY�Lm��d�[���U:¶s��+R�*���H;Qr&�9��p�����{��A�B�ߑHr�y��m5�I�m�.�0�ȚD��B?�mMT�b��Dq�f�7��.O�2IH	I�꯰>)-t}���\FqDRuzſX�c��sە2��e�^��40za=x��g�S�YOuڨ��G�Y:E-<�f�5�X��[��`;��i�~��ǣ�$z,
X�8|;�-Q"��a
ӎߞRvt*�(���$1p43�=�k.�pe�>���(R�����zw�ؑW7k2��Ư�|��.f��9�X��(-yqt�ɚ8���n���,u����8��G*��篵��bˆ�Q�B�>=�z(]����n���Ks��0���a�Z����X�}w n(���qN�d��^#]x�J�>AM'��E�&SQ�K
���ְ�W�
<��j}��Ai�F!�<9dFc�h)}>IZ��ۺ4�t�gteL}�Q�Y��˕�j	K+��^��
�Ib�
�y�9}j���Wn��g(�g�4�^���O���RK�	[o��z0ob�	�qR!U4h��M�=����L�})��$��ƺ�y��P ��k�2�2�[�q�2sk��%@��1�>
;ɮ��\&$/��T�����lܬ��'���D�_�҉E�:~x��,m�P	 ��Č�^-sqC���?	��S�T�G!��/ˀ�T	Xl�j��p"DY
]�7fQ�>ݨst
�1�o�c�����w26,p���
gj�C<�/�m��`Q�����E��������gb�R4��������R��͖����`��4�i��Cp�����q�E��@�L�GpM�k����$@�S���Eo��O4~I�׬��?�`%�T���Ӽ'�G*U���Z��ɒ�b�ȷ:��wZ�����<�H��7+z��>���n�]t_����qP�شBsm	S,��[E��8X�a<jC �m��r'K���/��L����l��VV@n��i&.�C�! �"
�r���+��>�����qf�3����:���D�2y�TDdMd`wq�c�|�S�b��Y�QjAp���;s�)�Irt�|���@���z���"ݼ�i����꯽��Dr|-/�����9"�G�]�i��*a��$w�$�%�0�O�0>K���c�+�;G��%���.F8Kj'��;��Ohc�x>e[���\�����e�����r1-������:x=��4D-l�k6,�n����{�,��C�؁��L��6~Ω9
�VƑ�m���˜K��s8�2������@xá��/Mo�t�/R��n�'*@�) �~꒩�j��ףp���5�8`_��$[�Q.-U������.�o��C�}l8��Qͼ���"�)
�"��ʀ<�z��e��d:��dpDh���k��ɢ��pq�U*��Oֿ�����p|?��q�|�`���������Ŗ�RJE� i�\�l�a����,dp��ιooy%���uK�\�\�� 0Lx�[H;��*Lb�FuR�,���g�5^�b��݀C���^���oX�H�hZyW�e��˸O�v�ѥ�_�\��wM���Ug��<�oX�@OD���B١�
�E����PVׅضS��g�b��n`�§���7؜�gB
h�wӉ������F�܌�(��ove�L7}^�㞰�sUU`�Uu����&n4�O��<d�U|������5y���7�WQa����c�y�#�9��ҍB邫��:?
/J��(��DE}O��O�3����_ûX���]��נ׍�F�*P$�hJB]�j���o���0$8����nf�zs|~���]߬K$�c�}�В� ��n�Z��9��T�b�Kղ�܆k&%/Mb���/��LɦFY(9��d?SF�?.M4�r���niLy�-QLy�sE�N lW4�U�\�п�9ib���p8��͖�XWa���xW�ގ�3�y���*[�P��ҥC�?Ǘ�`G��Zo���Bb޳�Ŏ��h�<$9�n���������h�X�P�+"��l
9Oy<�`�$b�{�*H�n�-�):|�3�]h#�;شխ��CH೫���b�b��d���O6�,OЁ�rt�Y���g���M�i��"���g�_���I6����S��-��i��U5�F����b��-ڛ(PK%�V�� ���}8uF�+vmW���@Y=�����.r۪���y���,�w�F�&"Ng�]<hT����a
#�0��
c���0`Sl�-�9�����_"%��IJU2�x��K�%�����\8�*"�,�q�0o'p�O�)���I]?�*a+A��Xywؚt��ܧ�1u��*�}��9*z[�d����Pz�׻������D��kT>a$A�~WJ��d��V/'H�tm�m���N�?�Ϟ�e`#�s���5PD�sP� 3oF^(r#C9Z\�\,�$
z�3�רw?�}�Y��
�-n2,I�nv���(4ڭ_\�ڮ'�	�%���z�s�D���qrA���rU���,�\�r$ѽL��U�\�ز��`�:�FdBrAQ?�A�}YgY��e�JT�2�B���-]��C���"
<o�?���&{:��6��%8���N���y�S�umޔ�#@�I�X��*o�y��S���8���������R���'!�6.o;K6������S���-�l��B�īT��͒~өl��g�-+��$u��9��pb�\^%��X���]1�7k}�����üD��	��u�Q&f�g����Y�@�>��W�+i��h#����p`���yc�<�sDJ�/�B�p���߇s'��;!�b��aP氊�HA���/X��[%*���2��;AWc>�y^
�☮���Z�w���u�D�~
��T^amA�
4G��PJ�����Y��g+��w�
��+��6�J��^湗���8�q.[�(���~��R���[a����ZM$��Ǟ�P-3�.��r�I7I)�Y���ʞp,#Su�R�� �i��M�Po���$pK��+q��S8�t�����ત���Y��/G=!J���*��މ�H���ԙ�����_p9)�͝����ey>���Jyԓ��^��wq++?!��Yģ��]ɢ#���q�35@��39Ђik���@�4�+�F���IMm�0S���UU��<��e���K�ڻZ���G��i��kV�$l8�@k��8	��X	an$�T*�LN$�ݝ��V��+�B�
#��|�-8}
$�L�eX���L������v��0���S��a��yC{B��^L����f
ǚ+������f7�Ѵ�*���Q,���d�^�q.��m�t�R)�{<G�]�ه:a�9	��O�b�0F
e�eW��_���X���)�f�:k0�I>�d$��&��6�'Pׅ�5쁡*�7c��n���F���d8��6�l�@n�WB�U���C
Hj�C1�p:�|~�|��-���+�c��&��V����h��Ԗ�l�g��s���í�ۛr2��G0r)���F��m<նs���Sd�”��L����y7�\��1�@�Jz:k
�-T�Z��Y��Û��"�!J!�����s�����bƖ��3yh࡟tW���"~�;[(Ad�k�V�\3u<��e�
G��hp�ec����,/�д� )$�݃���BY��{L@aETk��lȉ�U��gc]UZV��4�&��<�C�so��v_55Z�'
Y#$�L^���/��L��^:�aA���	�^ǟ�.ab�]�TUрਬGw|�
��=�i�rG9l��f
�����9M�ma/^�[��.N�q-Ɨ�<z_�� ���U�Q!��D)�	ה���ݒ�c����0�\�gp��k����d�SV� �P>�s��|�K��g�꼿_q@]�̳=N9q��?�G��st���ӵ)Bog��ڝ�}U�GxҫB΁�Y��47�V��ϊ�aɃ�P�+A|2���a����l���xM&�`�J	�rۋ�F��-�=����V�O�>��FdI��.lD񊅅�g��0���+tR�����	�j�4����dVu��h60?�����!��<��E��`�П`Y\�/�U�.�{8N!��ſF}dE>�\c��o��<}��:�
�-��@3P<o�
�|�1���}'�t�/(*�%׃��9&b��ݴB[���ˌ�a�ѐ�h���<��Α*$�u_x���l3��oC��"����}j��3�<yq�.�����v���$�hq��f���x�O&0r
��l��ڂ�<O4���z���"��>Z|�$0�R6?E^n ��)�A��-��<^i�NJl
�F��)�m���Zi�������X��ez�C-�gOVo8��P�[�����݅����t6TE���kx��D�,�}r����rt��,���h�&��� ����{a3�/�M������3a7���x����.��M72h���D�ϴ@���=^�D�i�'�e[�u�p�2��&���˿����mQ:�{��m+hkF2įMx���5�W����͒�^�9��A����o��ȯ�6`�+�'=��iU���
���i�c�R�������m���`��rmS	�V�t�J_ݖ���f�dO٨�
�,�\C�uao�jԼ���?EAF�V���r�<�-)•��u�Gcه�K�ܮUs4��2�#�8�5��Ϛ�pɫ`U��Q%�穕0��T�\�9Ѯ���ЬO�]ꦥDE���i���`۰l��q�<ߕ2P�hG�SB݅�HS��_��7"*R湃U-��W��ţʿF�gʪ�@�l��<{�����ö=���X��՟�F[��G_��������1����.�<�<���4�5�Ǿ^��a��g����c�1�E'���~�	�a��T33/~(�a!(8C�Ԍ�@=7-�	�v/����Óp���ZL���B�u
���K���
4������|����}�F�$��2Z:Z<�~�I������-�ݛ	����
����;��V��m����G��� �x��9��i�u_�_Z�O.�ze���*�����N��8T|U<-�>r/��0٭f����BZ咎��a6�Q���f�g<#�,��P�.�g %IPV*Ak��Z�@���{�K��Y�^�D���Q��V*HB�=x��%]x�w,�%1E``��n��'q�>�Ď�ք��I8�2D��'����l�J,RC�5�P�:4�9Z�}kp�? ]���|̹)�nuY(~ʡ�*;��:��}_+!�2�݊,9�̈́�_��Y����cl�����q^4�z*�l�'d��8W)PsGi�k�Ɲ�2p}�+I���K燕�ɣN�w�\3��2�.�;sv�D�"4>�ل���������me�co�8��mP���wPa�*SZjE�C�"{����x���y��g2X K~�L�W�y���S�
�iX��26v��φ�x�Q�O$���({P�i��2΅��eX\Kx2�#~�Y$���T#�ƽ;�h+��-x�C�Ս�\����h��z "ƪ�k��&����X[(���jH=`OW]f�f�TRƄ�����f��6��]s%��ڢ�gGZ�F�b�����6�$|3N�(hV+rD`a�s�')!8��J�앩RL��%8��yX���&rP�cwU�捘�P��Dy�D"68���U#�WV��6�`�4,*���7�B۪b������ldw������������hm%�{K�M" ����\����!3���tE�n>0�O�zi����E������6jR��-��"7�LT?
������kg�3s���OV���|r�NAB	O9�f��������0�W\
��
f�D��W	^���3��~<��/C�vA��U�[�Fo��P����s]w�@�ۡRL����/a�]i0ͽ����u��eJ��H�-fI��ki�k~؉Ipz�p�O�c؜;��Ϯ�����&q���̆f�ۗ��4�-a�ԩ$�����ejU�Vd�������Qp�m�Gi���G��CjO
�^M5O8eB��O��T�c$������F��Y�{ҕ��K�t�1�y������۬�ਐ/^߽S�k�7z$/Բ�z8�?>�Xf�Qq���MĔs�g�M���A)j��S�X���3�Z�{#m7#��,|
:�����&mV�����oP�Яѐ܃�H$z%$Z�T^V��t�v�e���׵\�)� ��F���u9ك�;�b��*�24�dR�d��|� ���it�p�yCq�
H�u�'U�ymRH���0As�g?��[g�'�d���ۏs�pc�X�roZ�p���_?��X�I��7-�.:��c[N�./�`'�ͥqS*��>��H
��Z�u^4��!�w�1#���Qo���1x�a�K��= 
[!�
��S}���h�KrH{.���>�VI�@��ă�6O�G��44�卖_=��\�T��h/f���/|��P�q�z�.^�}!r���:�R��
�_��y~*$��<j!����INL�P�d�t���x�u	zLG�J�[Έ�u��e7
�7p����`"�.���B+��)+^ՒЎl�z��~}�.���,���c���;m���$]��k۸*��-2�;›�� ��A ����O:���_��sS]
��&S�h�W;o$�}_�X��Z�<y���b���X���/}0��=�kD=�O�B�i�Z���M'L"�������al����{z�:���k}�M��VA�t�ƣsȈ >~�
��O���)&)@����@Q�C�Q৽XYN��5�X��)��DD_�h2%
�5�B�F�/=����Ov6�;�:�h:0���6@�C��q9��S�Bw�"H��gZ8]+�}7v�W�{��d��!^�ɼ���Q��U{Z�V{�����9�'U�"�xmN�ZS�H��:�HU<�!‡���9C�~�3装C԰IH.V!�2I��yUV=���!8ʨ5��쏔��U�e����&��~�>z��.�.�a|,�C��n�����E/n��2��N Q(�{}�|�?!�����)�a˧v����e���g�����7̆}�?�`e�A)��G�����sf�6F�����]q0�ٵ�$��V��o���R���]��;�Fe�~S�I޴f��-L�5J���[+��˯z�h�
�]�eR�-���γTU��wH#�,n���7s.M�.�����T:���Q-�Hߊ�M�R͵�w���uv��ϣ��u�]���v�8�ֆ��;��i<�J��9���`���1	qO6���U��XBA� `�K,��p���+qJ��]p{��^NY�FkJi�Iԗ�?(FRW�<�`����$�k�ca�
��ғ@o8#�{�f�Lּ�
��I�n-l�"ѝ�}�4�i��]�Oc��Q��{IOD�ފo��i��H�s��U�ٞ!+���3�LL'ar7�'�
�<.�\�@4\��‡��}�Ҭ���9������c�_�a�R.5@dx���_\,ܿr.��7���5��1���;	��ABk3��fkPr9�ȼx~j�E.y��ᕎ����m���<��O��$Er@��2��^�v��Z����&,3�P���ι��/Ш�2`@�7��V�ZNEU��S(�(Ja��pV���i5w����u��̮��
ٔ���>�F˼���(z��۳k4�ޕ���f��1փ�8O�!~�B�>�sv�y���&����M�vr"���t��O&�9��ݔ(E�T���/�4}�uwO,�~P��v@��$����8[�…n�F���Y�C:��h�E^�n�B<p�'`�}}x�*�2AZ}>*�5*��oG���Wb`x'��	�;Ԥ��T�B1�*�,h2hv�'�N&���qxj�[��^�~o$i��߳�PJ��*��I�����5;#	󆮻������)Դ��ςuUZܺ��^�H:B�13	zs�
�_uO�?	��G*;:Z��.=x\U9�}�.�Qͯ�,������6��76����%,�5�n���"k`���|0���^��J}m�<<;k��r�Fl����O��0��~=�ڑ��!J+���/�RQ� n��)lj�-�_�?CT�Tߟ�]���l�b��.�s�de�I�&ʜ��|��9Bא��V�S7%�f3�׉�V��݄?qL?g.�
1�yj�x�	�����C��������fd}�P�ͩ&w5CޖE~�#$Dd�"W]\O�v���Դ>z�0�$�tB�|�`^��NP�?H���50U��o��
�x���,�����H
����
����S�"�:��]21��P`P6��X��ɡ��uA�m	M�Y&��)B����J�<�R�j_	�;�bmx1G��ʪ��hk��*�l�]$>&8����m����÷b��rYZa�f�l��̝Q��~�5v�<x����x��fD�Tv�������4T
��cGIdĵY�Nh���Ai��dC1[u�#����e��~(����'at\���k8E_6y3��3+Ze�R>����ޯ7�(��
�wI}�+���t�7�)i�ŵ7ԃt�h%F�A��l��CP(t~���j�N�#�:෨R��|��Bg��Lr�S%SR�Z��~ld����ES/������E���
2��oqƲJ�p�*���5��֎�Z�a����g=�O���rzm��P���SE��G�g�#�f
�}@���m5� dڣ�6I͖��u��.a���I�@���e�k����o�0�VPLުg@����n� v�9�a0�#29��$� �p�[ZB�6�"���ܜ;���u['�}9S���z�x����M��>��2�Y[ٙVQ��^(;��^��W!����w��*�v��;��}��1�c
���
�_�u�� ��4���<�|��P
�j�H�,�e}4�O%�ٳ�������"P��9��P�ə�}-���N���7"��(>�������*#�eݒuB�5�)�X`�N
����Ϊ��ۯB�|~���@g���z��7'���C��4���ɧ�li�
4�o;�l$�f:�;��[:	��L�Wlj�ԟ�^}!��e
c�/<	��!yʼn$��=B�%
(�P��[:��_��O=c-W�Z¸�
����ܯ�,]q�����j���<jZ�?�;&N=��1$^d��l�m��A�t������:J�cݬq��!�ܪ�}W��؜6L�|�����>���
�(b5��r�ɟqە窙���
0󸮲d��=��<�q��Fy��5�^���ͬuq����P��`�bG��^��%nHB4�ܲ��b��� �W��/�It'��뉳S	�x�aaB��c�t�+��rk:��(�8�#�_V�Cv9u:�Yp^B
��QB���0e@S0�L(ϝjU�TS�Xi��+5+}���Uʺ.p�ۈc��*"۫��go�����>t��Vz�^R�9XdM-�(�6ȁ��j�*̍6,���k;��lP<c͖�"��5��H�T���]�� rR=:-�pA��-���0+C��jc��ܞ-��"^��7�@��uL�F����.s‡x���0����.4fA�-��q�z�-�O�E0/۰l��$k����S1��?�x>k �sZ��|Ku���w��� J�J���P�8-x�D��z�7H�d/	��"2���������-D�˜�E�ͺ.r׹�ԛ�D�e�Bᏺ ��hWGpI�ʠf��zM��6�အV�~V�m��pa�$<��Boy�4��oA�m��\=�zvQ0����7��x�o�d説za'lL9!����d/�+2xԜN��������<G$��Xܓ�i�-���Ï<���«a9�?��v$tƖ�be�M�)��tq�Xx�J��_@�5H�E8���t��L��ѽ��$�&��n���翩R�ٶ��ڋם��^8l2�q�pO�,e5��$`�0��?��CE��u��i*,�0�v�����3I�G[�T��/V�����QZ=�]Bw��A��s(4�;�У���Jp�p��ۙ�����k�,�#㫛-��Z�4~��{Ɉ�����}=.Ӛ�~]�X1�����'��:�:�,�~\�M����7 "�=:�HA���9�TzTk����"V��5��X���¡y���r��p`%$61���fΐ��߮NE����h�F�k%Ե��O'�~E$i�&��
��w�.]m�8#P�� �`Rֶ/��
�'g:sL��NR�3��i�$n�?�Rۊ'��>6%�K��R:��A2<)�~_U2(�
��"��`v����JHo�nM���N�.���L�Sr���sI�k@�zj��V��R�>h������h�d����8�, ��M*�1֟���e^�
�LI�'A���qx�L ����l*[�1�����S
u��&���*�4K�n��q��O<V�==F�Yd�+i0>Yϙ��"�k��X�?J�]*�_��_������ѫ��>��nܲu)؜�#x0F��t�@gO}6*[��89�N=�KV�`�=&?a�m�7je�O�!-q*��~u?���"�ג�zl��c�X�
Tt	�	��x*R@4�"�a��iy��(m:����7�$�y�B���v+�́��N��U1s>���9"����xj_}4)�P��=�	�N�G�aR'�0i>�������h���j����H��M��j;��?��跈��L�Y��:HU����y	CH�D�����(��ť>
'g��&p��}P��x����i�/Bb���E?���7`g���pҫ���B�/��0�}տ����܆��T��7��3�CN������.34U[R/qAJz[B�J���ʺ�2B��_����3Kc��3��3O�oQ���rF?�X�M?|R�E��ߔV91�Pk0C�]�.�c�yfIgR+Jj^��/���1�Ch��V�~�:�|���7Q��F�$�m�M�˹���I�`����:�@ķ�F!����k=�oJ@|�=�2�3�U
�<�?ɂ�!�:bf��e�m9���`]�0�Ei����tT5.□ S�5y��ݗ�UO�����:
�V:)u5_��;$�M���z���p����,z������dXskbMx��RUHy�o���L"�fcP �" 7��f��b)GP����Z"��"�\ލ��M/x�dTh���1bSJ� "��C�
���㕋db��‡�~�Tf�B8^���u������u~_�Xo�s�(�Nd���
��k��
��!ML���{	�iz.���i0WxXfM���xS�0�s�,�'}���f�EQ�
_-��A/QQj�����th*N��F�}��n��u���P���2>����܅�h���l��W'>Sxm怀�	D�R:1#5
t^on����/�_S�ǐ��Ex*�b���wX�+�ʍѱ/W��v��
��J�W���_�ۢ�˜����hy��#<Q ���ن�Ih����dڠ��1��Fy:]�1y
/�����L�����rLuV��@���Ɲ�۾��<Ci����)R��-�KO
3�oqf����������>�s&���I+EJ�.�V�c��K����2y�~D��x̠N�4=��&�:�EBIJ�%�W�Ԗ�$�=G��_,����UHGis���ؑ��L=�Z�(�F��+��5�x�qk����	�8ߧv��;i�ȉT�BVR&��vy����
W�7�]�]l�l���������R�$)�N�fEV"I��~��}'�m�*�G������b�
&��=&w���M�"�@ݮx�e�����ҙ�a�`BV�V�rS
���""]������n
�>�%���P��6+�%�-J�E�����$:9�]�Wy@yϱ|�y�y���|����qz��}n��X��=S����U�R*���M٨>��C���})�M����o�^���` ŮN&w-�X���%v�AWw2�c#��LіLK'#:}�y2̥�Hi�Xi�N�&�vw
x�}v�|]�&P����dV��/�#if�
Cy��Q_>���;zl���x ~�ܣe��g� �x�7�ǥ^Ɉ$�d���M��i�^����T�5.�v���O�؍y���J�ZG��vL7@3�]��aR���ɜbBɱ~|�O�J=���z���R�>t���瘨�7�n�.�C$kF�rP�߻Է�O{{.s�x��/��كJn�
�!OQ�+s%Ȣ{�F�P
ޮE�X>ϝ�C�F����"��M����
���G��d���5�Y�� $��R�]=�ڱ�xb�H_�h�^��1��A�Ϸ��F>6��W�	u����R~14Ku-n�%�q�4��k�Ӕ��
\*�>��g_��u�� �?�1z��4���7h�Y�~�f�?�ut,�f�V[�P�nI�O��p��(�a� ��qB&�g��`�e��ɗ�N�0,�'�^����(`���(�G
ۣ��+��Նt�qwġ%l%�B/�OaF�)��uӹ��9���rl;n�|�ẚ"��2�x*�{�R9�v��j��G�ݤ���>�%ʂ�X=(
�'���%(k�p�R�+a��Y����Fʺ�6���C,�D ӧRU���A�ͥ�u,X�r/ ҍv-��.��D�CQ�ze���3 �o6c��&˵w>��d��
������x],ЫVeAG�~?w�y�����V���+x�a�����nd�}�R'^�	v�!��C�R��Ѝ[m�w����*e��&��� aquq����xJ(m]��YyP�J
GP{��C^�"��
Hh]��hϲ�30�lv�����[�| �O�6L#G��VX�����d{��b;�6��S���:��Y�)�ZN���rY��)e�&c+�Q
~5�QB�&��4�>�J���^G��`ȧ	�������Adw�[7��t|6�'Z��FoA�p�����&E��O�$�y�{�0^���I9U��m�� ��Er�-�F����	{�פ�_ԫz5Zc��qU0��ǽ}�1K����a�h�OV0P��̒��,Bjx��%ˆ�_�9���nA�t��b	s3m-
��pN ҫN1�Ee�_')آ�:�{�P�l@@Y|�
�m
�԰rH�R�Mŭ6츑}+9�+�&��Ф�7�m��ɳ�	y�멾���ۓ�5���d�ɜB�[qrM�t�:/n�k����֖��y��F�:ܘs����@��UD����ĥ]�ī��_��W|�;��R�B���r�G�W�Y*��OjA�"9��G�^}���%<֟|/�|�JM)
ȿ����v]E<������c��u��dy'!o�u?�!D���4$^����ԄԺ��[�u|�Fw{��Vs����/����q��(4���H��k��^
*X�\{�qJV'xf3�.3�m��]���r�†�%�`��L�d-�;}�{D�J� ���.����H��u{eeB��E�)��0=��eI��e�j�5m;�>��kq"e����p��%�c�
�
f/x��-G�í�7���+�f'w�u׃D��;�'��Zb����yJcaΉs������QK��
p����k������v�
[��VV�9�P��drT��5t�z˴GQ}@�P�b�isl
�͟�X�Y"�<��K������Kf��T��f��EcoM$��=��ng8�5�!1h5�<cۜJ�R�P������	�ė=9��_=w�=%�R�m��ö램4�K�:d8�[+�q�mT�_��T����;I��&�ZV&S�7�\>"_���(!2`��i���3ѻa�,j��ʷ��S|9��Z"�n�f�^���w��}��K5{��	�!^�崖)-��s.]wɇ
κY
�kE5lZ
�`�?0�t�,�]i��WiQ�0��,H��-&B�)}��P%"��JVmh9�D��о�����?c�?���;�q��>��l���i�b�Ν~_O4i���:�������ԓvJ%��%P5�7,�{�����\#�q�Fc���9,�M�c�X)�����{w9a�c��E���B�^�5�O��j|�����V�%ܥ���,��������SXÉ�
sL������|�3�Qpߏ,�Gxdxv��c�+�(�i����69���sٴ�Ш�ZL��ҞR�����ߥ֟U2�Z���qyBlo7L�%�w��vڮ��0��d?�a�6)�ܴ�3�
g�L�7I8�Y��=|�^/�WXj�z'/���B��'p�]�ϋ�:�����Ķ�n�s�auԉl4�1JƔ�ſ���J��#�g'D��V�q�:c����:��P�3��-VC�-���d1d's�Va�n��l���aV��2iA��b�<!��r�c��)��aLz��-h��t�~V=Ň��[H�*Ya7���,�U;E��rݝp�(}�@QdmÞ e�������:�b%J�����0Ϝ�}sJ�mу��&5j�@5�SᎦE��P񇃲���eGB�WR���`�YL�@Ր�!2Ca5�����ǔ�~T
<�7\��ދ��s�Jn�	l��B�a)`���Y��	}5�h��ڪ$>m���+���L_����sI0N���[ɕ�e5LX��8ѻMN�֜����L��`�-�h���o�ks�F6/�47Eǭ�-ڈ�b��:������
}��0��*b�꤬#F��&ʠ��hlGY~r�F:��eC��%���̛
�t�b�|{��Û ���F�;�j�����y�U�Q�Q�{{��22��v��ZV�VBl@��3���1cW�����K�,��3
����h�� ^4�A�1�"ЫD��G7ڔ7I3�����)��8�\�U;����9ѽ6�㖜��o�á�^���
 �o��v��mβ*|����'�?�/RTЇ�T��7-�I�ӌA��y��R�y��`��v��2GI�
����%�3�6�!�8Yz@N2����I����j x������ń <��^�U�Z�k����䏎��)��`B7��eoC� @&H��d��$6����u�L~61��^@���R[��G���y��:��D��dl���?�̺�Q����–!��õ�Aw��\Hi�f�-
r۟mW�߈̀뼒�����W�ҭR����X��X`)gz��`dQ�坱������Q���FƮ'��P���j�����:9~�=�-9Qb��s{SPKD*���_;rv�

xֳo�a/�?������K>CVa���ԝO�wD��Ӭ�#���|�1��2��Q�;�=��앏�I�Q���RCXLb�+���3��"l��D���1R���w��
-�(1�X'�ǥOwog�DQZ��~�憒�b@���Xh���/Ut�^9W�
�յ7[jP�	-��<6��I��L�h�ևȚ��5�嗚�{DI3f�&����w Fޏ��>��Wb��4�4����;'�q_���$��ޥᙼk�Ԡ_�g:��@f��Ti�&	��݀u�U�+\�^���8�_G�!��`��ٿ������o9�;TF
�C�U��\{���=�<Z���9턩�#�n̝�:�:^��5U[bi'Y?:�q�]|�f}y�5d�<�%&�s�_�kW����!���WSHAB��2n�.F/�p�Zɪ����A �)r�oT�����%��(�{e*.D,c4s�7�4��2r�h��JVt�5���[
#���ڷ�.�_-�#(�ġ�!K1Z�=���c���(E��A��Ht@�(�W��ۑ���X2:ٿʫ�ծN����B�j7F\�T�A;'D��9�� ;Y��*п#*��nIY�8��{�=��d��>�ϛ+Y��GA�i<c�=�Ը	/�@xc�1�dz?�qʊ7
;\�E�^��>&s�]���E�Mm�<��L
 t�J�mt(�}���Z�9Q��)���U�
8c��N!2�At��LH������Vr�ݛd����u�H�6�X;pFC�5�i�u�*1i�:ۅ�[�@F�FZ��ʉ�~��j`Ň�w�G���K�kw���`����sXi0A���F�/6)�>����Y�0
a�,�7ҙ������XX��F~��18�]
�c�d�[`����V�J���w�����r�6�u��fێ�ݒV�ȯ��c�1��5;����䁧���a��1�LT�чi]&��|c>��?��)h_u��>�(�S�O|5S�d��'l!�)���4
-�1���˒S�~����a�r�d˘�*�&*��ٹ����C���3� �S�T��MPR���(�(e*Bv�s�>;�05��]B��_~֊�؟ZVJ�rٿx�*����1�L��'��Q9Ҙ\��[F���(e(��X"�����.-�W2'.!)���ށ��� Z�R��e%8S�.~��O�m=����v���3���_����&�#�wJ��
�#R�pO�dT�LKQ]��j�8�[�'�.�6׸��� �W����g��+�#�wY���Z)�P�a��Ƕ���������RkU������r��Zz%r���~}D����F�$�_	2�ӄk���nu�7�]g�f� �	��u�kPa�*tq�q�5��J达�{	x�B1�L�~�D�۵ ��˫��ꢍ���x���1��:s�P�zJJ�0wKNNX��9?V���F�bn�J����k+�@U�qR/�d�V��-�I�m�M
��\m���j�!2)z��"���������h�������2�
��0��>k�D�Z	7ʿL�e�G�A�
?:��l'�2su�t�#{BТ�l|�!�׿ �6R�U��<:��0T*�?'Ѐ��=J���Nv�C�����E
9��T���!�S�����wj�8k{�׸��w�Q��;9)*s�Q���St�q.<i����Q�o�����̾Z!����9�w���`�}\f$�z�,$6G�x\��x
�rS�L��8#��N>)_��
�9�$|��$�d�v���:_�|킣�J��9��ݙ�o�jote�A�Y�_St��BL�h�K�
z�a�~��X�~�51�t%�v(�q��8�6r��(��nw�=�_�2�!�o�h�)h?
�j8��sDw6����h�|���f�uSXU�-<������6�bh4?�ďP�N�0�=:d�"�4���qxyʁ�G����&Jz�}�ҝ.�8о�u�Ow�vAJ��^��ǝ�
{��iM�&�y_e�ɖ���S8P_��CK2xq8�Y��m]�L��U�^�
�TOŠ3q�DU��AM��ڦ��8Y��5��d�{ ���ʎQ�i�bঔ�=�j2�~��7�9��{+���W�Q���%Fҏ�Nq��&�a�ܕ��ǧ�»��@�f_2j�}��|�)��L�b{��cVT���&|R��,��j'mG�_���J�r�ܟ�q�n����B)!I���x(�V0��#j3o�5�l;��̮�N�7��Կ9�q!K��!,�J�|��K[�8z0�V���.E���a+�/_	��c]�"��؝W��o��1�!��K'�/P6Ģ^RMbY72ocZ7n|��z\]F�.�B<���7kR ��ȋtZ,��˾�}�r����p_g��K�ڻʐ�1̞��`�@>
è��X;�N謷��0�Z�G�MJd,� �FR���I:b��pP��pJA)%#RA��X燉c��U���35������w��
*���-w͡��i�g.*.0\[W�o�&��7RYR�)0�&#�RM�3#8�ou�n��Å��l��Hdz�K�҉�:�@�A��Ʒ=���BH�$��yh����"��B⨔��W;X��}�z?�-��M�E�I���AE5���#�ܥ6f�F���Z=>s=/��|�P����L�{���*������:P����u���qL�y�=g��8�쬢�J�H�1�gr;�4�7��A��>W��=[�<7Lno� �m������$��.B�%py����z��.k���6�'�� �-����B-R�R�E��c�GV��h�q��@���$�bٹ�
j�V%���wh4A*,��e�7.b �(���7���"�%_c���/���$�ÚR�����9
������g�w����h����nt�u�����W.��A�?�ȁia�$(�5�Y���$5�ou��~ `��Z|vy`a۷Dc|�˕aPH���&V� ŮI��O��#׾��ɯ��O2�
��Y݅��M�D�ԗ�z��Oo=�A��1��f��*ԛ6��}w��}|I�O�Ri�W���Z��>�`�U�3iGk.F�y,B�ұŚ����c���h����֭�*c��(���S�j��
����y�v^l��l�8��1m���B�
lc�t�xz����P�J)�V%��d��q�i��c"�96"G�\"�ZR�U��3$O-�add�஻��>�F��ӓ^�n(��
�d$��.L��<&3|�eeH\+���j�5C�����v��\��1�
�i�f���	*9�J�kI=z�
L5K bP4z	�r�
@�я�t��6���q ��N��d,�[��ו�,��l�m/���"v��������Bw��i��v�~��/��vl���*�4�=f��?��
�H�Ӗ��#J��;�L��qd�GnvsJj�d�]B��Ɇ�6q����:���V Hiϱ�r�v����)޺��ߚ�ƽ~O	��9�9�^Ž3�v
�a�B�����'���w�Wڬ2�.E� �+�	ZH����W�4����v6?G�(�F{8�
JuԡP�$�4�J��0�z���� -jI5J���G�~D�qz�wi���0����h`�l&m�:B�F�����%;���5_����o�1��:
1rsª5��f֖�`��Y���z!�X4���+�w-�?bF_��H�����I������V�.�J�'��۠Ǭ�$���̢���v�)O�?G�_�a9���v5��I���߸hr�K��S
{9�_ɁL�[9o�Yt�ʷǹ!�OG�s�xu��Ŝ�u�Kͫ��j��ե���l�V2������S�@�F�~I	͇�~�]�1��]9.��h���|>�"�QU��b��~;��|��%O��q�.���D��s&��N�7�̲`P�|��Ɲ��{Э$B�;!Xq��U�Wj��v�h�ئ�ڽ#K�Qΐ�B
g�Ӌ�6��Q�`
Y�gQ�	�	ˠ����m*.E#7�_��Q�� @�ŎF[���X1/�ր���&N
ګ	�� [R�I�IC�>)`\��؊�rZ+�y�ͬ2!��b����՚C��|�O�L]�n�Y��z�9�mp�&	*��ҁ��k�������I�LO�>���oO`�zn��Ԍ��T��9���9�!��
���Eai�7��.v�z9���(�fst�j�[�?�[�^dO�3ͪ��G�D��o������Ubh�R��9C,b��xz�Դb�Q��Q�?&�Lы�w)�;�Qr�`��Z��Wy2��@���4�.�g���$��r�M��5j�aI�~�y�l�#8,�+��$�pйe�-U�q�+�N�s��V&R&� u��@�8�N���^ӸE6�
�Q��e	7��?�4A��\�6r#�\vі��a|6#�_(7ݾ���sX\΃��o_��Z`Cp�;>�Ks¸���1mI���qv
���&�'_�, �i����==Y�dcȗ��pWu8�Y7~/X$R)%ɞӯ<�X>V�%���|!]����7b��fμ�u��۽Gz?Of���44H%�J2�r���L[#	��K�rY�q�'Q��'�!h�����)?-�
�5�%�x�3���+c��x�=��_��حB���bD�7���ĩ�u��2�}�5�>i��쉣rG�#��_�f*������a=�'$��kc��#䄤�L䌷ce���4�����,�\i��?�IUN+�+q��r<.��L�
�����m)��c����]R�&؁������	�1���K�ZΓ`fvρ.jE,W���d|2�мsqw�`�T6�Q���|�0Y�i���a�\�[�a�t�+P�|46*�w���x�k�j�(�W��(�ڋ�MH�����Q{se+�t���%�Ï�?�O�U4�y
��l�f,K�/!�\���lЅ�i�ڋȊj	�U�,jWQ�{��A�IMD�����fV:��r�:tG]�n�d��.�o�'p�ЈS�8Tg�V�����ð�O��U?~[P�K��9u�4U­��m���ن����:��<������	ei�u@&3����9gs�{@��m%H�>OHB6���������wu�~��1Nz\��7�]�C��R�����.Q�M�#���l�*u:*�s�ky����fz<KoR�$@�R�y�n�~���-(�tf�i������.=&�/�s�����n�Ͷ�xǹY�e����H���EJ�1%�(<�B�:�>7wG�����E�f��0Ʋ˅b����s
1aɡ��Yd�b�uU�Z��u��d#θ�8[�(���{p
�iPL��C��4Dd��>����\�v�K�Tv�[�7m�J�ӱ�@��Ơs�l�(�Qk�np���*��.6}5�gĤ���uiM�[!CJf-�:�ڐ+ReLf�����`�J~E���qZ�(�r~T�B��ru1�=�E�0b���WQ	6�S�&��]�Ǡ�&�OFI�A֯%��a��\݁�'<b�}�۹��B�D?��g
[� ����n6��t�#�T�*��Cy�����v�OwF�ƾۜ��9��K�~_oc��WR�J!��?��R��Z�ro����$4~<��t���	Y�"W�
�S�qS���W��wR^.�d�����2��?������� ���X��nf�*"��G6()�(�nS�(<����Hn1WrS �c�>
��L)�Cp�X���R�G+܏�_b= ���j
X���p]��d#{���Q���r��vH X�X��8f%9^�P/`(mn���f�Vbi#�`1���`6.��=��J�n�()Xuz*c�y���p�`;2:�|���<���M�$��D�b���s��-�ksS	��ى���\�P)�����kĮ�8ID�c0�+<�o�|�rA�	3m$�]&l�j�Fκ�HM�#6&>@;I��C�ޕޠ� ɹ�c��z�!~��[����<��K��QC��b���i9Om&0��n�7�{Q΍���bt�?l���k $<ۺPgܫ��y@��+�A?�(��=�ױ�b�}C���t�ew�i��@��J���ٰ�MW4��KQ������҅Q]��E��S��.XS��������_���1
)�Y82I��Υ�q�g�����$�y��\���&6��UPr�@�Uܕ�H{[�	�,��=�>�;�7˥�qe�m9�"�N�d��d3��(+%��D�R�z�Ŷ�t�ByN%W����؄�';[@����##�+�2L� �����Fd;$�5�8�B����4*$l�U+1��'}��6�����z�����Q�/�s_��ܵ���L[�4�v?	��/!��%�V�
P8:��;�@���.�D�����۞�v}y��1�-�i��Ҭ� Q?��,l�� #��(�dn8�`-���ʀ�i�ޡS!� ����v?�k�c%�ӧ�on�Y�ԔppZiw������:`.�s,z�.
pC�����GL̫tD�r���"�/
eM
-rx[gY�aF����M���)�o����r�J���~FnZ@O��o�{i�� ���ᡈ�y�}W!��5|P]ٗ��j��8�;���v�G6/���r���*�������e��bBgi�’.Y��%�l�ǕQ�����z��˴TZ	M��U�m��ZIp�M�f�i��x�꧎\��)�Efx�b��Zd�R�����SY։���p

��ނ\��\�7�=�/�x_G��6">�K\Mg�x.7��	v�I2N�m����5d���a��͉cQ�����^<&�CI����F%�H���|M��=�7N�?|ޝ�]$�UA*�t^8��t��ڱ���P>_x�`��<�sȍ��e�F��S�\��ʝx��c���*J��D�����\����Q"�2X�=ͪH ��Y��!���F���F����=R3
͏��/hr+��ͳ���@��y�<�g�1Di�fH��{�
���H-;Y{�%'�6�bg�F�~t��գq��q`�$�C�2
�%N��^�������p���H8�n�{�<8�ۺ*���{�U��A���x �;�ݤ7��y����oR��_l;C�paQq��[��G�Q�N�/2�t�T&}�����P�C�b���}K����uJ���Do��<������'���0�&V�h#���Q�8��NA����g�h�7��d�y�q��mcs���]�{��L�4���ʨq���r<>�4��z7�m�]�#�T��>��`�0�J1*�f�c�_e(����}�LR��6�D�fF���0�mU�ʇ���������U�.��ϕ弭مܹx_��j���}�}
�O0��4��r�chQ�����%+.p��ƭ�2���.��������F�}�,&�6#6��ͣ�����Q�H�⒬m<��D�Q�9ůhĿ��V�@?4��=�+�f��Ɗ`������p��<�2�X8�s{�u��0<K}���j�+@":��|.p0�K�|M� ��V��0�G��F(BO�v���ڣ��hۖq)�K�Jq���`r;`%��'	�w�
�|���v��Y�@d|��6狮��m�z��$_D���.!|sov��ڎ+
Lo�����Ȭ�&0O�޶Z��A��L[5���9(�ʫ�_5���
L��-Τ"��������@���Hҧ�%5��_|�	���H�xm�';z�5V~�P�b`81�4I_�<�U��r�io�8v�k�I�uG��
'㼌�r��3�p� 
+�/,� "��|PLd<WȽ��?V���9/uӨUY����XҦe�\<q�%L~��L�ąl����5C�"d����+G��mh��o����@s�8l�O�u�;z�<tCֈSX�<��Ԉ��'�3:��R=���h���b$$ũ}��z�v���f��5��5��مM�t(.������F׶^�%���0�#��/s>�{�QT�\V��
�B���bc�u�`�{�O��m[`��wg�)"���Nǎ#Ƴw_bv��F!�z�nO���a��A�!�ʛ����L��`F*�EW�z�/o����g�u���12�=��z=��7)h�ګ��
��D�a����@9�����y��t���F�)�6]�I�e+������6iܻY�|9p�V��3��b״���Vo�k{j�x'ؠ��8��Zks�de���Є�y<�V�>���:�#����/i��/&�|�PEې�*�h���E�����%�B��H�K�LF�V9dg}9b�vֳu���R*P7Kq��k�:�W�E��i��O�Ӽ����9ќ�H�5*�j�(�3��K��ā*�^&'�٩Ǎ�Pn�?�ЭS�U��;���%�1THH��=��.�-���G4o^�O�f�GNe\HO��>O�H�*�Pl֣�'�Ϋg��`����=����P�����xC�n�'�a�̩��Ct.B�/j�y�a�i���!U��GwA�.�X�� ���[w*���X�~Ėo�n ������=W3�֠f�_��N7Z(��F�e,#ׯ��֙��ߝB7T<�(`b�4ƃw��R"!��w6�A�0QԘ���0Ƌ#)�-��z5:��M���F��b��Pc�ƃ=øNK����g���V�pJ�
0�r5F�M`z�'�+\/ݡ�>��k?Sk�4T��H�(a��4�<X�/���Ca@��5\7w��t�hX%��\���`@X��t0����[3V�gc�&���?a.��Z���!�z��0�t@q�o]LS����m��m��g���eq��D��̱aL F
̗d��	ඌO��_�א��\jO���+d��
��U�����tҵ�`Jv��r�8�7���k��`����S���A��x�����;كD���_#�\�6�k��ۥ$d�@$�0��{IY7{���<�%KN��b��X�a.������ѹ�&\��$67��IT��s�j����\B�HT�;�li��	Tl�S�~F�S��ʒL�\�?SU]m��a�c�Q.�˅4ϔ��g�˂g�jΒ:�ˣ2#Zj���x8뎸*D�PPI�0��(��P�ڜ�y,`��
&�C�
~]�6�|QY�����f�f��xB'w�ޙo<��@z���8i�K��F� �?N�Z�ʜ}4L<��mlk�@���K1,{��Wj��3���O�p'-N��ݐ�Y��)�1���
�ɬD�<���q�)Sx�ג�	��	餡k9��w5�b��I-�cHFٚ�mhe�V���s�j;9迲 �SZf��΀|cF+U��P<B~�f���W8���D�2j�<�3�,+����#Q�PɔntV�|R��v���N
	!�л�չ��9�?;�Y��Op �Y)�MH�:㼀;埬f�?�z���[����M\)Pj���9�%m�w�T�">�ЌqVT���[��+H�8Z	HXVװ7ܰ������~D����ʻ&�1�M�m��j�K�2i�{r6��­c���/�'�B���]"<p��@>��F7����Yϐu�#����V�	̝�kuKU�
S�z.��E1�@��۾c*huz��ci�b��Č��W͢
��}��8�ш�(LG�No'!����BoTG�v�����PϮu�QZ����>�e+�P��Z��k�^��{h�"�hQq/��*q�=e�� ٚ�$�!z�’�aP$�)����̉ܦ=�S��Ԩ��n�2k�b�%��yŸ�32��‒0zeg��>�0B'd`0�Mr�:���m��P�叺=a�1��:�p	Nw�2��M�m�O4� \(b�~8T���b���hNA�[B"�����:y����`��x:�l�^�
*����a���6y��TqW�F�ai���\�VS�F�)��޵a�0��4�ZT$�'Y���S���_Ņ���vY
%�������{9�~Y�`#�$:]��rw�	n7�"�K��yĠ��W$���j�H�#	��s+Ĉ��91�ņl\��8��Yk"��^��q���2�)�w0J}b�G{S�����ӷaNxLu%�Q[����'�>�ï'�p�{/�s��i"β�z��L��WN�^
��➃��qp%�s����Nɇ�f,r�V.L0����u�4��q^w����#<p�7���X�����2�(V���8}�m\Px�TZU�ZP	�c�K�Uq��g����H�]$;m�gG�/�ۊ�Ց�3�5�7�c�J�t`��k[0b�mFҭV�]�)��MF�O�0i��|��k0aF,jJ�J���v�5�de�7�?^�iq����+�Q�ܖ.�c�t�o��@G��`z�s�g@��i���mL�k_��B��Ʀ��C�Ө
-S�*��wO�׉���q]B�V��mI��Mf�g�9kC'U�LG�����V�A�c�t����2n0��uf-C���Q{2k�)��e��.0�c���x�ҫx�3j
\�>Gf���Tquz�[���Q���{�s_�
�/Mu��Z5Ɛ�!���h-+C�������Q�B@wI汫{��L|[�ب��Ҁ$/���;��=h���$r!kt�3s-�D�+
��r��z�d�Z7�o�Ʊ�\��,��d�������f��G�����gt�7C1ޫ-?��*���9-�vymt릮W�c�nBEQ1ì���\V�B�,����bzࡗ��~Ġ=���u�����!�`���\�f��]�G��2qkc��`��%ΐ��?}}37p�`)I�F!8�\[��!�']���������-�7Zo-l���!f�Y��XӦ��aH7�PS^CB(��u�P��Ġ`�f*�.;{���O����X��� �[+�c�z�N�bSŃ���<��W��}W(���:���ٿ����3��fBD2�UQ��M�{�J�#�!y�*c�g&�P벮��őB�ʸ? �ÛڥSN��#V25�#��ʔ�h�X o�b�,��g.3V�	�
�>�`�bY^���y���%2����,h:��5.������p���"(�!�ͤ�dҬ>S���X>i]Q(�B�]�F�Qή==�x���)��T�-)����Lev�B�
���3��n�
���w�a���Z�s*���C�߆��r��h�κ�4��J����GzB��kxtB�gVD�sӂdh9e�4Y�v�&Ir? �'ѐ���i=;�����
YƂ��YH|�!��|*)([k�)�Ï/�$5R�dm���8a��Re+���a��s�%�=���}op�g/�W�_>�̀��.,���\��΍���
vΪ���h ������}|,��u��v��nP�/Hg��lIua� i�U��:�����9���Fĥb�<颫 F��#���o%Tgr8���T��ZT��@�H&6ƦT?�V��]eLY����{��!���-r�N��k���s���e�	���<�C��KF^j�����}Bq2�����d��p{��j���08Չ��
N�M����iq�'�ꪎ����{5A���l���Ŝ�ޤ��-!����m�#HM�	�;L�H�H����S��ǒ��p�h0;*��/��2=P�#�C��vEg`'��K�`�P/��i6?��uY����ݒ	dY�H��T;��pswD��$��ih�s�>��Z�T�
�w髒�M}ƱM)T	�1���6ұ���5UK'�;Q�;�J�?M����EPH����!A3�h��y�:	�<�U��1`J-����79^�����O�)�y�H1%��<d�!��
��/�#�r�-��y,RR����Ƒ��=eKR��d�̵P���2��E��l�CH)w�#H��E�l!���M�X��NѰ��2Qp:@��r���Ji-�QQ��8s�1m�?���cɭV�UZ�=L���dS����	|��y%ӢnǨ]ˡ�V�8�vZe�ͭ@G�k�%����K�.Y/V<+����C[������3JASc�!�mEn�z2�r~{��D��gf��Y�=��O�B(O�7��*��KW�{�дA4;g�g���N3��@{{��j~@v��LB����*�V�ߕ��.m��<�	����'^o�����=l?�Z���K��[8�O0�/��b�����u�g�e�G�ͅ��������A��Ɣ�H��6��W��[�=�Z�_��#n��i�JnDA“;��;������F��ڝB\H	]\�F���M]/�=�&D�M��uWx�)�~�M�.�t�~J�����1j*�p��Y9�32�awL���c^o�Ŏa$
M��8����
=��c#{�!�� ���|�x\s˥�㋯J�6"j�)s���G/[o;ɶ�0��X:��^2�U�"�V��� "J�m
�t��&�;O5�*;O����یP۸�E���ݘ�0	V �L�W"�5��s���,Ǵ���:�� �[��w��/+�	@r�A��+�`ΐc��d���F�1�n��eU��Zp�wc�;���7��u��0$�du@.ܙc��H�:�ޏ4�(�+�ߢ7��u�C$6���9�����i��J��knSpoElv��g�a&{��^zT��<�|��{h�=H��&��� �٘�Hl���4U��J���.Т0���-7����p�� p_.�?
U�McJ�ha������DLP㱾� 8Hj9d&=F� =�Gf��85ɒ��E�o��~���Ge�f��Vo�b>v��_1�%.�-�v!GAm��k�+p(#�5?k��q��%�p���C�7zq����
S���� �q*��UqK�?�Cg�S��0EY-�@�d��)��M��a���unp��+��o����?���S��{jΜ�=��K�\��k.� ܦ�r 8$�p�����Sxj%�D8퓁ʛ�}����Xؽp:�qc��Ĺ�ќ�wf*�5d���'eb���ʼnd.i�����4x4r��'"�s{'0i`'if$��eN�H�ٗ,E�[?z�]�ްȎ�8�L �h���^S�D�B�-��\�><�F����{�'�ԢY�*EfJO��)A5+k�%oJX)���A��B����X�4"�w���x�v��0*3�R��I
�L��9m�	�i�r�]�C���+�t3M*b�����H$]��QFZ��N��<@����gS�nJ:�=~��˟�E�5�SE
ќh�x�4L�R��Օ�MVv��$�l$������K��{7L��7�S��Tk��7Dd!��Dw�}��{�%�HƋ�lG"�}ȗSx�P�@<���V~�1Za�4.���(|�x��V,n�)$`�*�z��#C1�Ū@����Z5����P} ���nd:�M�N���x��=��:^�
b���$:���}l�64�j8���[�GB2�XC3�fw�Xm��zO"ۮҮ����h����7���&v���V�;rx��3?��!.�Y���M���O	�uy��!B���b�EJc݂�|���j�Z�q�%�<���c��#]	^�42G��OD�&W(E���~�Q����'/
,�[��	R������;kj'DH���
n������*f���_2�b�z��<�:�a
��u[�BS,%Dp��>l(�IE,�i�p���g��<W��އr<
87���l���x^��8J~K����8���b�mz'o�-ʲ�fg9�x�
��.YN�=��2G?��y�u[��nj�������k
e���/����E樂�i�d�����!m��eM�
aul�.[�aG��� �j��E��>��'�>�sZ�OQ	zb�-�&��)L�kТ����W:İk,�U�����>�*�a���U�ȕTm<���U��|^f�W��ղ�4y���ϡL4#8�ǧ�)ܶk�DT�e���y�t�l���
&G)y����ň*�mk�N��Cơ��+[��%o��?6�Nao`��O����aC���`s�0X1��f9G+�6>~�����o��+��j�,�����˭�fQv��Y�����m�{���8Й��
)C:���=�
]����
���t"Ӳ`�M���]������L�l.[ש鬥��~��L��;j���&i��
q#��+m-n�����s�I�x�
��*qI�9Ș#Ɓ�i/۶�6�Dp�*0�ː	��Y��������7#��<Ӷ֏:va�n{�X��Avf�L�*�� y\�	�h�'%�[R�ƌ�_~"��Y��`O[�E����g�za�m�g����NZ�˨�R#�it�y��A":rr"s�ծ�*k����,3'uF͞G��aX�]�]�͚�V"�t�䂣�2��H�Ù�u�Tz��]A���N߀Fں��͂��?��p�Y��-Y3�8�Q�;*���!RhvY,h����sŞaOv�<x�֮B�`$�S
�֕n�O���~X����o}-4�k~�ޭV�ƥR�x�dQ�d��5�<�78,���;9m�Cd��.���4����s�q��~���-Hc�{c��E!���l���K�L��̍
_{`�JT�IM��1^�Y�U��3m�Z����Ǟs��L��zzY�{ь�+xu�l�����s����j8�g�T"~h�s�G�&Y��u��n,����H������^��4��#�e�
���z.�G_a_�@ND���L�[1r�C.�`�Q�Σt��bW򤂥�`D�E2�L����?��:Y�����үd�:f�r�&��9T��kf���>%mJyHb��R^�
5�CM�Pޢ�_�^$��{k���R#�!�qݴ�n�^�F~���W7؟�K,S������YK�"]�l��)S~��,�+�}7��"�Ȗ��0!�����Q�gE;Qޑ�A�זU[�mcϙr4%
��=MH�n�p&K݉u~PYMr%����/ޖlnxg���@��x=���x>^Dwڨ|ө�?���A��U
*
�°N�q��x�A�-���W�mW&v��( ���ҚD�T�#"]54���(]�X���ÄYj2$^��<�T{�=��ߟ�A_8�-��Q-�F�Cx��+]�;��+��/N��*a�A�X[;8Mi8r�a��܎�aU�@x�݅��;�-֟��Y�~}��*.sT/n�R�R��'����ۍ�Mf���5G�Π_�Х����@(Yu��_�4O�^�Wm���u:#���V�{Gw�W����f9r�A!�JO�=>����y�(�]�OS���g��6hk9��5N#�>Ӓ+/v�Ȼ2W��T�A�.$C%�u�M�b*৭�Gx�8���4�;��#���_ǯ���N������aʮ���$���7OK�U�B�>S�>�h�s9��F%���!8�Aѧ��<�z�j3��򶭑J;+�X�U�W
b�
���J%3��j��+SI?C����i+ü$��sr�S�2F�E������V$|1S��O
?�"^�䠧��I�l~�}��5��|P��&�d�4Z���7i���.��."j¾�m�O�f�,��uޙQ\��A�A3��Rg>��B����C[>��)�dJz�ێ��КG�)3�]�I��%w�y�HV{h{�.���q�#����I�E"uS"�:M��w�燱��4�ֵ� I\�	
f�֔��L�D0h!'�Jޘ��5�Ga�J=R�P�c�DC*t�4;�^�䏹<%>.���6*�ҽP�/��
�A�f9~���
�2���g�B�j���z0�g5��e���]��E�	��;��$��F=Eh��2dz�r7@=/�^���J
dx�N���uc��t/����s�,���#\��D��GÚ}F��Ze{��	�Ք�v�0�]���q�BJ�*WT�A�M��Dl��]��F�T��cmI�M���{U��yF��qQ�X��'|�[͚�z��H�~�<��G�~:����{e��$��R�^��D�Rg��Bw8u[�7�bnc���3��fŞ��Mm�VNq�7Μ;�l��+u�}�tO@x_@Z�}>�
��_	��:��f��s�f����C��h��\'��4Ϙ�4���5
�Q6@���Ӱ��Є�x��m�t�P(�,L��6!�9��?���'G��S�t;�t�_��}*�ې�s�j�+�`�]��`2�G��o��S�<5Q�e��FG�E��.����]��Ŭ�m����M�<���vv7���O@`TV�Pϰk�-�E�Ĺ����9��{���f�?��![#)T��G:	���o�⿰�ڨ�[�f�����Q~"��)m��L'A�\u>A�o�A�9{�be��Y�k?#}T��D>	鎠�]�^��H��ĚC�Q�=c�3M4�R�V�A:���]{?�|h���.'��S|��Ne�u5�B�H(ƕMO%�ɤWI��S�L77���6�n$��Z?����&"�y�q�:�)'�� �^4��E|��5���U��c~~+oL^;�*��bt��KB�c���w��_9�ɗ�ʹ�E;�̅�F[��1��e�t�m�H��*�)�����F��R����h��*�XK�,�
���i����.�w�UQ��Tڸ0k?��S隂��VS�P�zPQ�R�i=n)�g)mcl�/�?U�+=u=��ʼni@qJG�
�QuTt㗀>�$yrW&{-Z-�džD�U�쫝֦;���.z~H�xq�j�7���?�O��Wuum��H��8�ah�{e�]`pU�d��a�[��8Q֒\�6!Ub/)�up��Wι��ئu�y��3�Ah#�A�|w��+���,F,Q��vޙ�8�¥��5tL/����~���$5X4�ź�N-��}$!D��G���ϸ+��&�m��*�Z�FJ�V묫zEt�q�\H�g��z��mlG��_)�fxE�-t\8�h�)ba�����4���ӷ��NӾ�&��*\¬2k�"k0��r����J��G OS����l�$�B}�(L�2���L\+;#��4ѓ�o�ޘ�b���*;6\���Ԗ�"�ᏽى���D>L�d�=���-�m8=T�K�����] a>ݧ��h\ܰim�����R�3{�����j�m�l
qNlz�`y�c��@�A��y+��-��n��e��y@G��7�äB�Jf���~�m[U��ͺ; ���0��7}�hi!x��Ŷۣq�ѱl����b\M�_x�J���~�f��n����eN�3|Y�H�t�����r�d�2��%Sk�<�`v5��T0��(�	����p�Z��-�(��r�̦
hE�|z�����Ie�����tvr��O��v'������#�dTj`�M�2ѷ@~��}.QžS��<`�M�8n�N�DzU4W#�t��;?f��'�ZV��!�Q0�
k�8;E�^b�9�M��B���1��χh��Af��QS�γlq�|b����K׌f���\�l4��1>N���Gj�lxH�x�Ց��$���[����g�JQV�u�?����~�СS�?�/�N��w�)O:������n������f�l,d�$c
��&����>l?H�9�Xl��}���_��>�Q���{���a��gL�'�0�̜0��Q�-��5{�{VbO�����^�p7�hB��O��r���e��q�>(�F�X�{T�A��ϊ��e�3�.������Z��_�t��e�V�w1�k,�>��[���$��5Ox�k!��J�����k/'�S�5#e08�͓��g
u+:��u���Π�A����զs�]�~�<e�nKuMb��#ƩM�Z��[g���ٶ;'/>xG�Y)
o��tA��p6��������A�e>�}�{���b|sL�K�P���~+{��e3P��+���~%�y��9�!t|ei=ewD�?�&P�x�qEZ�h!��,Z����� 5�E�q(�
mU���r+��U���0%�5w��䝶��GgzC�h�70�j�F�B���π'�L����CX ��y@�Y̪É��1-
�$N���VGN�7�p����V
�dg���y@�z�v-�����p����6�=<ȴF|:<@߇ef�X'�Zr�*|u����-�%#]~�Wi��-9����C��-&�;���(�b��7�_�����gnX�ml��̈��0d���z1K�e.e�WHA��tݞ�ӳ;Pɒ�����L�z���kdN����7��~�ݺ�b�ԥ�)��`v�S����q�b?=�~�����U-0G��1�i�o3��;l.�����IrӾ�V��؄�1u�E7�hg|�)��B�QΡ�g]#�P�E��hQa���F���� 4߸�]����5
����a伏�&Ԅ�PrK]	�,��`�;�x��(�!�ܥN�zt|���)�Dҿ��*�6i�"�n��̫�^�R��<@8t!�J�^3�C;{BWrt[U���H^\~�Қ<TAT]���A}n�%b&�Y_�`w�B������hgeֶ��<��s��$�
J�f(y��U����2�v���c���h�&@/��g,�q�V��R��U���p�T�<ʹ~A�LP�]c��W%����(��i�A��M�@��1���>�@H������(��cڷ^�����F�[���0���&cB_�:�O7q2pn{j2yÅ%�/h�Bץ�{�Q�X���O9������Bv�6�׎UF�h���f��\oӏW^�g�y�
ě���e�8$�ʪ^�HQ�Ȉ�z���Bӟ�t�F�n+	'L��U_�u
a)���a+Ӭr��!�l{Y����l��!�.��fig�迗hC����dN�����B-�����5
����	F�PN���R%D$K�W|�B�w4�M~�kn��O�7ة[�m��,=��WY?$~4���))ֺwgg4��se�n��`?�h)��l[�$:*�Ch�Տ�
X?��+p�$f`�WQ���;��>�HIX4֭M�8��T�5}i��6��=�"���m]�船��6ct���k��H�^�C�M�R_[<t�lޔ�s���5}d�M��+��S�cT��**��{�w�}�dL�k��ί��M�1���X�"��!����l%�ǢI
�<��0ruU`Dz	<<�VP���O�+%Q�ٶ.�U�zX�D1��:KF�����~�is��
�j����45|�	Ry��jw���!��Hڦ(
�uC*韏��.�?C�A{��u����������g�YZ.shstrtab.interp.note.gnu.property.note.ABI-tag.note.gnu.build-id.gnu.hash.dynsym.dynstr.gnu.version.gnu.version_r.rela.dyn.rela.plt.init.plt.sec.text.fini.rodata.eh_frame_hdr.eh_frame.init_array.fini_array.data.rel.ro.dynamic.got.got.plt.data.bss.gnu.build.attributes.gnu_debuglink.gnu_debugdata�@��@� &�@� 4@$G���o0@0�`Qd@dxqY��A��2.a���o�C��n���o�"C�"�}`$C`$x�B�'C�'�I��qC�q��qC�q01��C� 1��C�A�b"
�@b@"�l	 ��k�+$��l,P�����0����0����0�� ��ۑ��1@��ޑ��1(���1������1�� `��X�4p h�X�4�)8�4$8\�4P��<5G8.3/lib64/php/modules/clos_ssa.so000075500000067160151734570520012432 0ustar00ELF>�@�f@8	@�4�4 �:�: �: �� �<�< �< ��888$$�4�4�4  S�td�4�4�4  P�td�0�0�0��Q�tdR�td�:�: �: 00GNUku�V#�):Y�]'�	0d!,��$��$		�3,-014689:<>?`�n�� �p�qX��||\��a[�U��BE�지B2)*��F�U�h駿g�`r����� �[k[(�)��e!͚���'� g����>�|�U�O ����xX%�kS���	��, =�F"9�)u�'��@$��@ ��A ��v' *+s����@ \P*'$@!�U@[,�F��@ ��P$rp�*2��*60 	�@ ��@< @__gmon_start___ITM_deregisterTMCloneTable_ITM_registerTMCloneTable__cxa_finalizezif_clos_ssa_test_emalloc_56zm_startup_clos_ssazend_register_ini_entries_exclos_ssa_globalsfopensetbuffwrite__errno_locationstrerrorzend_errorstrlen_emallocmemcpyexecutor_globalszend_hash_find_efreezm_info_clos_ssaphp_info_print_table_startphp_info_print_table_colspan_headerphp_info_print_table_rowphp_info_print_table_enddisplay_ini_entries__fprintf_chkssa_process_requestzm_shutdown_clos_ssafclosezm_deactivate_clos_ssagettimeofdayzm_activate_clos_ssassa_xp_get_current_delayszend_is_auto_global_strcore_globalszend_hash_str_find__zend_strdupget_moduleclos_ssa_module_entryOnUpdateBoolzend_ini_boolean_displayer_cbOnUpdateStringssa_functionssocketconnectfdopenssa_agent_dumpssa_xp_get_delays_diff__stack_chk_failfputcfscanfssa_xp_is_throttledssa_xp_print_delays__printf_chkssa_xp_snprint_delays__snprintf_chklibc.so.6_edata__bss_startclos_ssa.soGLIBC_2.14GLIBC_2.4GLIBC_2.2.5GLIBC_2.3.4�����ii
�ui	�ti	�: ��: ��: �: ; �,(; �,@; �,h; �,�; �,�; �,�; �,@< -P< �- @ �,X@ �,p@ x@ ��@ ��@ �,; 	H; 	�; 	; 9X; 9�; 9�; 9�? 9h@ 90; p; �; �; H< 7�? �? �? �? >�? %�? &�? )(@ ?0@ 38@ 1@@ 6H@ =P@ 8�> �> �> -�> :�> �> �> �> �> 
�> �> �> 
�> �> �> ? ,? ? ?  ? (? 0? 8? @? H? P? X? `? h? 2p?  x? !�? "�? #�? $�? '�? (�? )�? *�? +��H��H��) H��t��H����5r( �%s( ��h�������h��������h�������h�������h�������h�������h�������h��q������h��a������h	��Q������h
��A������h��1������h��!������h
��������h��������h������h�������h��������h�������h�������h�������h�������h�������h��q������h��a������h��Q������h��A������h��1������h��!������h��������h��������h������h �������h!��������h"�������h#�������h$�������h%�������h&��������%�% D���%�% D���%�% D���%�% D���%�% D���%�% D���%�% D���%�% D���%�% D���%�% D���%�% D���%�% D���%�% D���%�% D���%�% D���%�% D���%}% D���%u% D���%m% D���%e% D���%]% D���%U% D���%M% D���%E% D���%=% D���%5% D���%-% D���%%% D���%% D���%% D���%
% D���%% D���%�$ D���%�$ D���%�$ D���%�$ D���%�$ D���%�$ D���%�$ D��SH�����H�5L������H�41�H�53�����s���H��[���f.�H�=a% H�Z% H9�tH�f$ H��t	�����H�=1% H�5*% H)�H��H��H��?H�H�tH�U$ H��t��fD�����=% u+UH�=2$ H��tH�= ����d�����$ ]������w������1��f�GH�G H�G(H�G0H�GH�G�G�fD��SH�����fo�H�H�a extensH�H�@H�@@H�x(�@0ion!�@4H��C[�D��SH��H� H��t
����H�C H�{(H��t
����H�C(H�{0H��t
���H�C0�C[���S��H�= ���H��" �{trH�{H��t%H�5����H�CH��tX1�H������{tDH�KH��t;��H�=�
�#����{tH�KH��t��H�=�
���1�[��5����8����H�S�H�5~H��1�����f�ATI��USH���@���H�x H��H�����H��L��H��H�H�{H�H�CH�k���H��! H���D+H�������KH��tJ���@u�+u���D$H��t�O����D$H��[]A\�f�����D$H��[]A\�fD1���@t���ff.�@��SH�T! �{tH�KH��t��H�=������;��H�C(H�{ H����H����H�sHH�SPL�K8H�C@H��I��L)�I)����{t'H�{H��tH��RH�gV�P1��q���H�� 1����H�{ H��t
�X���H�C H�C(H��u'H�{0H��t
�9���H�C0�C1�[�f�H������H�C(��fDH��u�뺐H��I��@B�{t��V���f.���SH�$  �{t`H�KH��tW��H�=�����{t;H�KH��t2��H�=��z����{tH�{H��t
����H�C1�[�f.���USH��H�� �{t9H�KH��t0��H�=O�����;u�C��u;H��1�[]�@�;t�1�H�{H���H�=3������u@�C1�@�k��t�H�KH��t���H�= ���H��1�[]�f.�H�=�
������t��k@��u�C�q���fDH�KH��t��H�=�
�Y����C�v����C�u������USH��H�� �{taH�KH������H�=�
�����;���{tH�KH��t��H�=�
����H��1�[]���;t��C�{��H�{(��H�{ ���{t)H�KH��t �!�H�=��z���f.�1�H�{8�%���H�{X�L���������Q���fD�;�g����C�f��{�C�c���H�KH���V�����H�=�	����;���f.��H�=�	�C�{���H�-$ �H�5�	H�C H�������H��t
�x�EH����	H�5[	H�C(����H��t
�x��H����H�56	H�C0���H��t
�x���{��H�{H��tH�K H�-��H��H��HD�1������{tTH�{H��tKH�K(H���H��HD�1����{t'H�{H��tH�K0H���H��HD�1�����H�{(tH�{ �3����C�*���f.�H�8H�����H�C0�4���H�8H�����H�C(���H�8H�����H�C ���ff.���H�� �@��AUATUSH��H�x dH�%(H�D$x1��{tH�KH��t��H�=x	���H�C H��t:���u�1�� H�����t"��v�'��"��H�����u�f��{�I��1ҾI�l$fo*
�f�$D$fo$
H�E`�EhEf�E E0E@EP���A�Ņ��=�nL����������H�5�D���w�I��H���K�����Hǃ�Hǃ�L�����L���(�1���H�t$xdH34%(��H�Ĉ[]A\A]ù/��\���������H�5�H�=#�%�I��H���n����{�H�KH���
�!�H�=	�<���r���@H��������ƃ�Hǃ�Hǃ��"���f.��{��H�kH������H���H��1�����Bf.��{t*L�cM��t!���H��L��D�H��1���D���X�{t*H�{H��t!H�
!H���1��_��������|���fDH���H�{X���H���H���H���H����/�����{�v���L�cM���i����$�H��L��D�H��1�����C����N�f.�@��ATI��USH�� �{txH�KH�����H�=[�u�H�KHL�CPH+K8�CL+C@�Ci�@BDń��H�{H����A��H�#�1��7���f�H�K8H�CHH�kPH)�H+k@��i�@B�H��L����{H��H���I��L�K(L��LE�H�H�5oHE�H�C H��HD�M��LD�H�s0ARAPL�}H��WL��RLE�H���UP1���H��0�{uG[]A\�f�H�KHL�CPH+K8L+C@x^i�@BB�,�f�H��i�@B��(@BH�K8�7���fD[L��]�
A\���H��I��@B����H��I��@Bi�@BD�������UH�5SH��H�=wH���p�H��tIH��H��H�C H��PH�KL�KH��L�C1�H�5\1��]�ZH��Y��������H����[]û������ff.���H�H)H�GH)FH�GH)FH�GH)FH�G H)F �D���H�WH9Vt�@H�G H9F �����f���H��H�O�w H�5�L�O1�L�GH���c�H���ff.���H���r L��1��rH������r�rL�
���H��(���H��H���a+Enter MINIT_FUNCTION
Exit MINIT_FUNCTION
EnabledSSA SupportEnter PRSHUTDOWN_FUNCTION
Enter MSHUTDOWN_FUNCTION
Exit MSHUTDOWN_FUNCTION
Enter RSHUTDOWN_FUNCTION
wpwpdbIt is wordpress site
Exit RSHUTDOWN_FUNCTION
nullEnter RINIT_FUNCTION
Extracting Request-data
_SERVERREQUEST_URIHTTP_HOSTREQUEST_SCHEMEREQUEST_URI: %s
HTTP_HOST: %s
REQUEST_SCHEME: %s
Exit RINIT_FUNCTION
clos_ssa.enabled1clos_ssa.to_fileclos_ssa.debugclos_ssa.debug_fileclos_ssa1.0API20230831,NTSclos_ssa_testCan't open clos_ssa.debug_file: "%s", %sCloudlinux PHP slow site analyzerRequest executed for %ld.%06ld from %ld.%06ld until %ld.%06ld
Request-data already initialized
It works clos_ssPROCESS REQUEST STARTED
/tmp/ssa_to_agent.logagentFailed to open to_agent.log file
ssa_demon_open: socket(PF_UNIX, SOCK_STREAM, 0) failed: %d
ssa_demon_open: connect(%s) failed: %d
ssa_demon_open: fdopen(socket=%s) failed: %d
Failed to open stream to %s processor
/opt/alt/clos_ssa/run/ssa.socktruefalsehttp?DUMP_AGENT
Request_duration: %ld.%06ld, micro: %u
{ "timestamp": "%ld", "url": "%s://%s%s", "duration": %u, "hitting_limits": %s, "throttled_time": %lu, "io_throttled_time": %lu, "wordpress": %s }ro/proc/lve/task_sched_stat%lu %lu %lu %lu %luDelays: total: %lu ms, sleep (U + S): %lu ms, iowait: %lu ms, throttle(CPU): %lu ms, throttle(IO): %lu ms
;�0����� ��0�p���8 �T��t�����`� p�Xp����������(P���`����t�������zRx�$`��FJw�?:*3$"D��p\ �:pL�[E�U���PE�J����E��
A@�d��B�D�A �D0�
 AABCM
 AABG`�FE�|,(��&E��A H(F0KC
JX��vE�p4t8�	E�A�D }
CAEQ
CAK(���E�A�D b
CAH���<���rF�B�A �A(�G�x
(A ABBAL, ��F�D�A ��(B0K8D@QHAPK G
ABCA
DGL4|����uE�H�N N(K0`(D Q
CAA���+����'� ���2HG b �D���6HCL J(C0QGNU����: �,�,�,�,�,�,�,-�-���
�*�: �: ���o`	
p> �0�
8	���o���o�
���o�o$
���o�<  0@P`p�������� 0@P`p�������� 0@P`p���4�,�,����,GCC: (GNU) 8.5.0 20210514 (Red Hat 8.5.0-28)GA$3a1�+GA$3p1113��)GA*GA$annobin gcc 8.5.0 20210514GA$plugin name: gcc-annobinGA$running gcc 8.5.0 20210514GA*GA*GA!
GA*FORTIFYGA+GLIBCXX_ASSERTIONSGA*GOW*�GA*cf_protectionGA+omit_frame_pointerGA+stack_clashGA!stack_realignGA$3p1113P$�*GA*GA$annobin gcc 8.5.0 20210514GA$plugin name: gcc-annobinGA$running gcc 8.5.0 20210514GA*GA*GA!
GA*FORTIFYGA+GLIBCXX_ASSERTIONSGA*GOW*�GA*cf_protectionGA+omit_frame_pointerGA+stack_clashGA!stack_realign
GA*FORTIFY�)GA+GLIBCXX_ASSERTIONS
GA*FORTIFY�)�*GA+GLIBCXX_ASSERTIONSL$#666M�e6�6�6�6�6�:-:F:g�������P���o; @1�Mqg��t��6�q����&�:& \& �9!�9!�5$�5$L$�- 4P$J�'d6~6�6�6�6�6696XP${�'��'��)�6�6�66"6:6V6k6��'��)��)��*�666;6\6x6�6�6��)�**DK*hK*�w*�w*��*��*	�*8	@:	pM	�c	�@ r	�: �	��	�: �	�4�	
�*�	�: �	�< �	�0
�@ 
p> #
	�8`	$
�
�
0	�
��
�* +�0�1�4�: �: �: �< p> @ �@ �A`)
G
�v\
x
�
�'��
P$r�
�
 �
�
�@ �
)=Ym����
��)u���F@< @ ;Tg{�*2��A �@$���*6���@ 

(
5
@ �K
c
0 	z
�
�@ ��
 *+�
�
P*'�
@!��
�
6G a|�"������@[.annobin_ssa.c.annobin_ssa.c_end.annobin_ssa.c.hot.annobin_ssa.c_end.hot.annobin_ssa.c.unlikely.annobin_ssa.c_end.unlikely.annobin_ssa.c.startup.annobin_ssa.c_end.startup.annobin_ssa.c.exit.annobin_ssa.c_end.exit.annobin_zm_globals_ctor_clos_ssa.start.annobin_zm_globals_ctor_clos_ssa.endzm_globals_ctor_clos_ssa.annobin_zif_clos_ssa_test.start.annobin_zif_clos_ssa_test.end.annobin_zm_globals_dtor_clos_ssa.start.annobin_zm_globals_dtor_clos_ssa.endzm_globals_dtor_clos_ssa.annobin_zm_startup_clos_ssa.start.annobin_zm_startup_clos_ssa.end.annobin_class_exists.start.annobin_class_exists.endclass_exists.annobin_zm_info_clos_ssa.start.annobin_zm_info_clos_ssa.end.annobin_php_ssa_post_deactivate.start.annobin_php_ssa_post_deactivate.endphp_ssa_post_deactivate.annobin_zm_shutdown_clos_ssa.start.annobin_zm_shutdown_clos_ssa.end.annobin_zm_deactivate_clos_ssa.start.annobin_zm_deactivate_clos_ssa.end.annobin_zm_activate_clos_ssa.start.annobin_zm_activate_clos_ssa.end.annobin_get_module.start.annobin_get_module.endarginfo_clos_ssa_test.annobin_processors.c.annobin_processors.c_end.annobin_processors.c.hot.annobin_processors.c_end.hot.annobin_processors.c.unlikely.annobin_processors.c_end.unlikely.annobin_processors.c.startup.annobin_processors.c_end.startup.annobin_processors.c.exit.annobin_processors.c_end.exit.annobin_ssa_process_request.start.annobin_ssa_process_request.end.annobin_dump.c.annobin_dump.c_end.annobin_dump.c.hot.annobin_dump.c_end.hot.annobin_dump.c.unlikely.annobin_dump.c_end.unlikely.annobin_dump.c.startup.annobin_dump.c_end.startup.annobin_dump.c.exit.annobin_dump.c_end.exit.annobin_ssa_agent_dump.start.annobin_ssa_agent_dump.end.annobin_ssa_perf.c.annobin_ssa_perf.c_end.annobin_ssa_perf.c.hot.annobin_ssa_perf.c_end.hot.annobin_ssa_perf.c.unlikely.annobin_ssa_perf.c_end.unlikely.annobin_ssa_perf.c.startup.annobin_ssa_perf.c_end.startup.annobin_ssa_perf.c.exit.annobin_ssa_perf.c_end.exit.annobin_ssa_xp_get_current_delays.start.annobin_ssa_xp_get_current_delays.end.annobin_ssa_xp_get_delays_diff.start.annobin_ssa_xp_get_delays_diff.end.annobin_ssa_xp_is_throttled.start.annobin_ssa_xp_is_throttled.end.annobin_ssa_xp_print_delays.start.annobin_ssa_xp_print_delays.end.annobin_ssa_xp_snprint_delays.start.annobin_ssa_xp_snprint_delays.endderegister_tm_clones__do_global_dtors_auxcompleted.7303__do_global_dtors_aux_fini_array_entryframe_dummy__frame_dummy_init_array_entry__FRAME_END___fini__dso_handle_DYNAMIC__GNU_EH_FRAME_HDR__TMC_END___GLOBAL_OFFSET_TABLE__initzend_ini_boolean_displayer_cbzm_shutdown_clos_ssa__snprintf_chk@@GLIBC_2.3.4free@@GLIBC_2.2.5ssa_agent_dumpssa_process_request__errno_location@@GLIBC_2.2.5_ITM_deregisterTMCloneTable_emalloc_56_edatafclose@@GLIBC_2.2.5__zend_strdupOnUpdateBoolstrlen@@GLIBC_2.2.5__stack_chk_fail@@GLIBC_2.4setbuf@@GLIBC_2.2.5php_info_print_table_rowgettimeofday@@GLIBC_2.2.5OnUpdateStringfscanf@@GLIBC_2.2.5ssa_xp_get_current_delaysfputc@@GLIBC_2.2.5zm_info_clos_ssassa_functions__gmon_start__zend_register_ini_entries_exphp_info_print_table_endmemcpy@@GLIBC_2.14display_ini_entriesssa_xp_print_delayszend_hash_str_findget_modulephp_info_print_table_colspan_headerssa_xp_snprint_delaysfdopen@@GLIBC_2.2.5__bss_start_efree__printf_chk@@GLIBC_2.3.4core_globalsclos_ssa_module_entryzend_is_auto_global_strzm_deactivate_clos_ssafopen@@GLIBC_2.2.5clos_ssa_globalsssa_xp_get_delays_diffzend_errorssa_xp_is_throttledzm_activate_clos_ssa_emallocconnect@@GLIBC_2.2.5fwrite@@GLIBC_2.2.5__fprintf_chk@@GLIBC_2.3.4executor_globals_ITM_registerTMCloneTablephp_info_print_table_startstrerror@@GLIBC_2.2.5__cxa_finalize@@GLIBC_2.2.5zm_startup_clos_ssazend_hash_findsocket@@GLIBC_2.2.5zif_clos_ssa_test.symtab.strtab.shstrtab.note.gnu.build-id.gnu.hash.dynsym.dynstr.gnu.version.gnu.version_r.rela.dyn.rela.plt.init.plt.sec.text.fini.rodata.eh_frame_hdr.eh_frame.note.gnu.property.init_array.fini_array.data.rel.ro.dynamic.got.data.bss.comment.gnu.build.attributes88$.���o``�8@		H���o$
$
�U���o�
�
Pd�
�
8nB00�x��s�~��p�����*�*
� + +� ��0�0���1�1��4�4 ��: �:��: �:��: �:� ��< �<��p> p>��@ @� ��@ �@� 0�@-
�A`�@lHE�|	�V��e#5.4/lib64/php/modules/clos_ssa.so000075500000066610151734570520012427 0ustar00ELF>p@f@8	@�2�2 :: : �� �<�< �< ��888$$�2�2�2  S�td�2�2�2  P�td�.�.�.��Q�tdR�td:: : ��GNU}��kd���pA^L���q'�B4(��$��$		�3(),-024568:;`�n�� �p�qX��||\��a[�U��BE�지B2)*��F�U�h駿g�`r����� �[k[(�)��e!͚��{q� � ���M�v�� ��R�Xa��g����, 7n�F"�3�'u�&�up"��@ ��A ��v0(+v����@ 0`(' FUp)&F��@ ���"rD�(2e�(6�
�@ ��`< @__gmon_start___ITM_deregisterTMCloneTable_ITM_registerTMCloneTable__cxa_finalizezif_clos_ssa_test_estrndupfreezm_startup_clos_ssazend_register_ini_entriesclos_ssa_globalsfopensetbuffwrite__errno_locationstrerrorzend_errorstrlenexecutor_globalszend_hash_find__stack_chk_failzm_info_clos_ssaphp_info_print_table_startphp_info_print_table_colspan_headerphp_info_print_table_rowphp_info_print_table_enddisplay_ini_entries__fprintf_chkssa_process_requestzm_shutdown_clos_ssafclosezm_deactivate_clos_ssagettimeofdayzm_activate_clos_ssassa_xp_get_current_delayszend_is_auto_globalcore_globalsstrdupget_moduleclos_ssa_module_entryOnUpdateBoolzend_ini_boolean_displayer_cbOnUpdateStringssa_functionssocketconnectfdopenssa_agent_dumpssa_xp_get_delays_difffputc__isoc99_fscanfssa_xp_is_throttledssa_xp_print_delays__printf_chkssa_xp_snprint_delays__snprintf_chklibc.so.6_edata__bss_startclos_ssa.soGLIBC_2.4GLIBC_2.7GLIBC_2.2.5GLIBC_2.3.4�ii
�ii
�ui	�ti	�:  : � :  : H: �*x: �*�: �*�: +; �*H; +�; �*`< ,+p< , @ +X@ +p@ 0x@ ��@ `�@ +X: 	�: 	(; 	h: 5�: 58; 5�; 5�? 5h@ 5�: ; p; �; h< 3�? �? �? �? :�?  �? !�? %(@ ;0@ /8@ -@@ 2H@ 9P@ 4�> �> �> )�> 6�> �> �> �> �> 
�> �> ? 
? ? ?  ? ((? 0? 8? @? H? P? X? `? .h? p? x? �? �? �? "�? #�? $�? %�? &�? '��H��H��* H��t��H����5�) �%�) ��h�������h��������h�������h�������h�������h�������h�������h��q������h��a������h	��Q������h
��A������h��1������h��!������h
��������h��������h������h�������h��������h�������h�������h�������h�������h�������h��q������h��a������h��Q������h��A������h��1������h��!������h��������h��������h������h �������h!��������h"��������%]' D���%U' D���%M' D���%E' D���%=' D���%5' D���%-' D���%%' D���%' D���%' D���%
' D���%' D���%�& D���%�& D���%�& D���%�& D���%�& D���%�& D���%�& D���%�& D���%�& D���%�& D���%�& D���%�& D���%�& D���%�& D���%�& D���%�& D���%}& D���%u& D���%m& D���%e& D���%]& D���%U& D���%M& DH�=1' H�*' H9�tH�6& H��t	�����H�=' H�5�& H)�H��H��H��?H�H�tH�%& H��t��fD�����=�& u+UH�=& H��tH�=  �9����d�����& ]������w������1��f�GH�G H�G(H�G0H�GH�G�G�fD��SH�=�H���F��@����CH�[����SH��H� H��t
���H�C H�{(H��t
���H�C(H�{0H��t
�n���H�C0�C[���SH�=D ���H��$ �{trH�{H��t%H�5�}���H�CH��t\1�H������{tDH�KH��t;��H�=�
����{tH�KH��t��H�=�
�p���1�[�@���8���H�S�H�5�H��1������SH��H��dH�%(H�D$1���H��H��PH�$ H��@�g�������H�t$dH34%(u	H����[�����@��SH����H�5L��B����H�1
1�H�50
�������H��[�
���f.���SH�t# �{tH�KH��t��H�=��_����;��H�C(H�{ H����H����H�sHH�SPL�K8H�C@H��I��L)�I)����{t'H�{H��tH��RH��V�P1�����H�� �h���H�{ H��t
�:���H�C H�C(H��u!H�{0H��t
����H�C0�C1�[�H������H�C(��fDH��u��f�H��I��@B�{t��V���f.���SH�D" �{t`H�KH��tW��H�=��/����{t;H�KH��t2��H�=��
����{tH�{H��t
���H�C1�[�f.���USH��H��! �{t9H�KH��t0��H�=�����;u�C��u;H��1�[]�@�;t�1�H�{H���H�=p�4�����u@�C1�@�k��t�H�KH��t���H�=]�C���H��1�[]�f.�H�=#������Cu1�����u�C�f���H�K�H��t���H�=�
�����C�i�����ATUSH��H��  dH�%(H�D$1��{twH�KH������H�=�
����;���{tH�KH��t��H�=�V���1�H�T$dH3%(��H��[]A\���;t��CH�$�{��H�{(��H�{ ���{t)H�KH��t �!�H�=�����f.�1�H�{8���H�{X���������3���fD�;�I����CH�$���{�CH�$�[���H�KH���N�����H�=�	�W����3���f��H�=�	�C����H� H��xH����I��H�}�H�5{	L��H�C �a�����uH�$H��x�LH�}L��
H�5O	H�C(�,�����uH�$H��x��H�}L��H�5$	H�C0�����uH�$H��x���{��H�{H��tH�K H�-��H��H��HD�1��Z����{tTH�{H��tKH�K(H���H��HD�1��-����{t'H�{H��tH�K0H���H��HD�1�����H�{(tH�{ �����C����DH�8���H�C0�=����H�8���H�C(���H�8����H�C ����z���f.���H�] �@��AUATUSH��H�H dH�%(H�D$x1��{tH�KH��t��H�=X	�#���H�C H��t:���u�1�� H�����t"��v�'��"��H�����u�f��{�I��1ҾI�l$fo

�f�$D$fo
H�E`�EhEf�E E0E@EP���A�Ņ��=�nL����N������H�5�D�����I��H���K�����Hǃ�Hǃ�L����L�����1���H�t$xdH34%(��H�Ĉ[]A\A]ù/��\���������H�5�H�=�e�I��H���n����{�H�KH���
�!�H�=��|���r���@H��������ƃ�Hǃ�Hǃ��"���f.��{��H�kH������H���H��1����Bf.��{t*L�cM��t!�l�H��L��D�H��1����D�����{t*H�{H��t!H�
H���1����������|���fDH���H�{X�(�H���H���H���H����/�����{�v���L�cM���i�����H��L��D�H��1����C������f.�@��ATI��USH�� �C��tvH�KH�����H�=9��H�KHL�CPH+K8�CL+C@�)i�@BDń��	H�{H����A��H��1��u���H�K8H�CHH�kPH)�H+k@��i�@B�H��L����{H��H���I��L�K(L��LE�H�H�5OHE�H�C H��HD�M��LD�H�s0ARAPL�]H��WL��RLE�H���UP1����H��0�{uW[]A\�f�H�KHL�CPH+K8L+C@x.i�@BB�,�f�H��i�@B��(@BH�K8�7���fDH��I��@B����[L��]�
A\��f.�D��UH�5SH��H�=wH�����H��tIH��H��H�C H��PH�KL�KH��L�C1�H�5\1���ZH��Y�������H����[]û������ff.���H�H)H�GH)FH�GH)FH�GH)FH�G H)F �D���H�WH9Vt�@H�G H9F �����f���H��H�O�w H�5�L�O1�L�GH�����H���ff.���H���r L��1��rH������r�rL�
��?�H��(���H��H���It works clos_ssa extension!a+Enter MINIT_FUNCTION
Exit MINIT_FUNCTION
EnabledSSA SupportEnter PRSHUTDOWN_FUNCTION
Enter MSHUTDOWN_FUNCTION
Exit MSHUTDOWN_FUNCTION
Enter RSHUTDOWN_FUNCTION
wpwpdbIt is wordpress site
Exit RSHUTDOWN_FUNCTION
nullEnter RINIT_FUNCTION
Extracting Request-data
_SERVERREQUEST_URIHTTP_HOSTREQUEST_SCHEMEREQUEST_URI: %s
HTTP_HOST: %s
REQUEST_SCHEME: %s
Exit RINIT_FUNCTION
clos_ssa.enabled1clos_ssa.to_fileclos_ssa.debugclos_ssa.debug_fileclos_ssa1.0API20100525,NTSclos_ssa_testCan't open clos_ssa.debug_file: "%s", %sCloudlinux PHP slow site analyzerRequest executed for %ld.%06ld from %ld.%06ld until %ld.%06ld
Request-data already initialized
PROCESS REQUEST STARTED
/tmp/ssa_to_agent.logagentFailed to open to_agent.log file
ssa_demon_open: socket(PF_UNIX, SOCK_STREAM, 0) failed: %d
ssa_demon_open: connect(%s) failed: %d
ssa_demon_open: fdopen(socket=%s) failed: %d
Failed to open stream to %s processor
/opt/alt/clos_ssa/run/ssa.socktruefalsehttp?DUMP_AGENT
Request_duration: %ld.%06ld, micro: %u
{ "timestamp": "%ld", "url": "%s://%s%s", "duration": %u, "hitting_limits": %s, "throttled_time": %lu, "io_throttled_time": %lu, "wordpress": %s }ro/proc/lve/task_sched_stat%lu %lu %lu %lu %luDelays: total: %lu ms, sleep (U + S): %lu ms, iowait: %lu ms, throttle(CPU): %lu ms, throttle(IO): %lu ms
;� ��`��P�����8�T��t0��������0�@�8��l�� �������P���H����\����p��zRx�$P�@FJw�?:*3$"Dh�0\@�:pl�)E�c���PE�J����E��
E �T�\A�G J
DA���FE�|,��&E��A H(F0KA
D8��vE�p4T(�
E�A�D }
CAEQ
CAK0��FF�A�A �D0�
 AABH��<��rF�B�A �A(�G�x
(A ABBALX�F�D�A ��(B0K8D@QHAPK G
ABCQDG4d����uE�H�N N(K0`(D Q
CAA����+����'�8���2HG b �\���6HCL J(C0QGNU� � : �*�*�*+�*+�*,+,���
): : ���o`�
��> H�`
8	���o���o
���o�o����o�<  0@P`p�������� 0@P`p�������� 0���2++�0�`+GCC: (GNU) 8.5.0 20210514 (Red Hat 8.5.0-28)GA$3a1�)GA$3p11130�'GA*GA$annobin gcc 8.5.0 20210514GA$plugin name: gcc-annobinGA$running gcc 8.5.0 20210514GA*GA*GA!
GA*FORTIFYGA+GLIBCXX_ASSERTIONSGA*GOW*�GA*cf_protectionGA+omit_frame_pointerGA+stack_clashGA!stack_realignGA$3p1113�")GA*GA$annobin gcc 8.5.0 20210514GA$plugin name: gcc-annobinGA$running gcc 8.5.0 20210514GA*GA*GA!
GA*FORTIFYGA+GLIBCXX_ASSERTIONSGA*GOW*�GA*cf_protectionGA+omit_frame_pointerGA+stack_clashGA!stack_realign
GA*FORTIFY0%(GA+GLIBCXX_ASSERTIONS0|"#p6pMpep�p�p�p�p�0j-0:Fjg�������P����
@: 1�Mg�\t�V�V���`&�:\���f"�f"|", 4�"J�%dp~p�p�p�p�pp9pX�"{�%�&��'�p�p�pp"p:pVpkp�&��'��'�)�ppp;p\pxp�p�p��'�%(%(D[(h[(��(��(��(��(	)8	p:	�M	�c	�@ r	: �	 �	: �	�2�	
)�	 : �	�< �	�.
�@ 
�> #
	�8`��
`
�	�
@p
) )�.�/�2: :  : �< �> @ �@ �A`)
G
�v\
x
�
&��
�"r�
�
 �
�@ #7DXl����$��'u�F`< @* 9Rf�(2�A zp"���(6���@ ��
@ �

3
F
�@ �W
0(+n
y
`('�
�
 F�
�
�
�
 6J`"|�����p).annobin_ssa.c.annobin_ssa.c_end.annobin_ssa.c.hot.annobin_ssa.c_end.hot.annobin_ssa.c.unlikely.annobin_ssa.c_end.unlikely.annobin_ssa.c.startup.annobin_ssa.c_end.startup.annobin_ssa.c.exit.annobin_ssa.c_end.exit.annobin_zm_globals_ctor_clos_ssa.start.annobin_zm_globals_ctor_clos_ssa.endzm_globals_ctor_clos_ssa.annobin_zif_clos_ssa_test.start.annobin_zif_clos_ssa_test.end.annobin_zm_globals_dtor_clos_ssa.start.annobin_zm_globals_dtor_clos_ssa.endzm_globals_dtor_clos_ssa.annobin_zm_startup_clos_ssa.start.annobin_zm_startup_clos_ssa.end.annobin_class_exists.start.annobin_class_exists.endclass_exists.annobin_zm_info_clos_ssa.start.annobin_zm_info_clos_ssa.end.annobin_php_ssa_post_deactivate.start.annobin_php_ssa_post_deactivate.endphp_ssa_post_deactivate.annobin_zm_shutdown_clos_ssa.start.annobin_zm_shutdown_clos_ssa.end.annobin_zm_deactivate_clos_ssa.start.annobin_zm_deactivate_clos_ssa.end.annobin_zm_activate_clos_ssa.start.annobin_zm_activate_clos_ssa.end.annobin_get_module.start.annobin_get_module.endarginfo_clos_ssa_test.annobin_processors.c.annobin_processors.c_end.annobin_processors.c.hot.annobin_processors.c_end.hot.annobin_processors.c.unlikely.annobin_processors.c_end.unlikely.annobin_processors.c.startup.annobin_processors.c_end.startup.annobin_processors.c.exit.annobin_processors.c_end.exit.annobin_ssa_process_request.start.annobin_ssa_process_request.end.annobin_dump.c.annobin_dump.c_end.annobin_dump.c.hot.annobin_dump.c_end.hot.annobin_dump.c.unlikely.annobin_dump.c_end.unlikely.annobin_dump.c.startup.annobin_dump.c_end.startup.annobin_dump.c.exit.annobin_dump.c_end.exit.annobin_ssa_agent_dump.start.annobin_ssa_agent_dump.end.annobin_ssa_perf.c.annobin_ssa_perf.c_end.annobin_ssa_perf.c.hot.annobin_ssa_perf.c_end.hot.annobin_ssa_perf.c.unlikely.annobin_ssa_perf.c_end.unlikely.annobin_ssa_perf.c.startup.annobin_ssa_perf.c_end.startup.annobin_ssa_perf.c.exit.annobin_ssa_perf.c_end.exit.annobin_ssa_xp_get_current_delays.start.annobin_ssa_xp_get_current_delays.end.annobin_ssa_xp_get_delays_diff.start.annobin_ssa_xp_get_delays_diff.end.annobin_ssa_xp_is_throttled.start.annobin_ssa_xp_is_throttled.end.annobin_ssa_xp_print_delays.start.annobin_ssa_xp_print_delays.end.annobin_ssa_xp_snprint_delays.start.annobin_ssa_xp_snprint_delays.endderegister_tm_clones__do_global_dtors_auxcompleted.7303__do_global_dtors_aux_fini_array_entryframe_dummy__frame_dummy_init_array_entry__FRAME_END___fini__dso_handle_DYNAMIC__GNU_EH_FRAME_HDR__TMC_END___GLOBAL_OFFSET_TABLE__initzend_ini_boolean_displayer_cbzm_shutdown_clos_ssa__snprintf_chk@@GLIBC_2.3.4free@@GLIBC_2.2.5ssa_agent_dumpssa_process_request__errno_location@@GLIBC_2.2.5_ITM_deregisterTMCloneTablezend_register_ini_entries__isoc99_fscanf@@GLIBC_2.7_edatafclose@@GLIBC_2.2.5OnUpdateBoolstrlen@@GLIBC_2.2.5zend_is_auto_global__stack_chk_fail@@GLIBC_2.4setbuf@@GLIBC_2.2.5php_info_print_table_rowgettimeofday@@GLIBC_2.2.5OnUpdateStringssa_xp_get_current_delaysfputc@@GLIBC_2.2.5zm_info_clos_ssassa_functions__gmon_start__php_info_print_table_enddisplay_ini_entriesssa_xp_print_delaysget_modulephp_info_print_table_colspan_headerssa_xp_snprint_delaysfdopen@@GLIBC_2.2.5__bss_start__printf_chk@@GLIBC_2.3.4core_globalsclos_ssa_module_entryzm_deactivate_clos_ssafopen@@GLIBC_2.2.5clos_ssa_globalsssa_xp_get_delays_diffzend_errorssa_xp_is_throttled_estrndupzm_activate_clos_ssaconnect@@GLIBC_2.2.5fwrite@@GLIBC_2.2.5__fprintf_chk@@GLIBC_2.3.4executor_globals_ITM_registerTMCloneTablephp_info_print_table_startstrdup@@GLIBC_2.2.5strerror@@GLIBC_2.2.5__cxa_finalize@@GLIBC_2.2.5zm_startup_clos_ssazend_hash_findsocket@@GLIBC_2.2.5zif_clos_ssa_test.symtab.strtab.shstrtab.note.gnu.build-id.gnu.hash.dynsym.dynstr.gnu.version.gnu.version_r.rela.dyn.rela.plt.init.plt.sec.text.fini.rodata.eh_frame_hdr.eh_frame.note.gnu.property.init_array.fini_array.data.rel.ro.dynamic.got.data.bss.comment.gnu.build.attributes88$.���o``�8�@���H���o��xU���o

Pd`
`
8nB��Hx��s@~@@0�pp��))
� ) )� ��.�.���/�/��2�2 �: :�: :� :  :� ��< �<���> �>p�@ @� ��@ �@� 0�@-
�A`�@�D(|	 V��d#7.0/lib64/php/modules/clos_ssa.so000075500000067050151734570520012424 0ustar00ELF>@�f@8	@�4�4 �:�: �:  �<�< �< ��888$$�4�4�4  S�td�4�4�4  P�td�0�0�0��Q�tdR�td�:�: �: ppGNU�DO)�J�SWiNK� �r,��$��$		�3,-014689:<>?`�n�� �p�qX��||\��a[�U��BE�지B2)*��F�U�h駿g�`r����� �[k[(�)��e!͚���$� �Kg���4�y��E ���uU"�hP������, :��F"�6�)u�'��P$��@ ��A ��v*+s����@ [@*'!P!�U[)@F��@ ��`$rop*2��*6�@ 
�@ ��@< @__gmon_start___ITM_deregisterTMCloneTable_ITM_registerTMCloneTable__cxa_finalizezif_clos_ssa_test_emalloc_56zm_startup_clos_ssazend_register_ini_entriesclos_ssa_globalsfopensetbuffwrite__errno_locationstrerrorzend_errorstrlen_emallocmemcpyexecutor_globalszend_hash_find_efreezm_info_clos_ssaphp_info_print_table_startphp_info_print_table_colspan_headerphp_info_print_table_rowphp_info_print_table_enddisplay_ini_entries__fprintf_chkssa_process_requestzm_shutdown_clos_ssafclosezm_deactivate_clos_ssagettimeofdayzm_activate_clos_ssassa_xp_get_current_delayszend_is_auto_global_strcore_globalszend_hash_str_findstrdupget_moduleclos_ssa_module_entryOnUpdateBoolzend_ini_boolean_displayer_cbOnUpdateStringssa_functionssocketconnectfdopenssa_agent_dumpssa_xp_get_delays_diff__stack_chk_failfputc__isoc99_fscanfssa_xp_is_throttledssa_xp_print_delays__printf_chkssa_xp_snprint_delays__snprintf_chklibc.so.6_edata__bss_startclos_ssa.soGLIBC_2.14GLIBC_2.4GLIBC_2.7GLIBC_2.2.5GLIBC_2.3.4�����ii
�ii
�ui	�ti		�: ��: p�: �: �: �,�: �,; �,0; �,P; �,x; �,�; �,@< �,P< �- @ �,X@ �,p@ �x@ `�@ ��@ �,�: 
; 
X; 
�: 9 ; 9h; 9�; 9�? 9h@ 9�: 8; �; �; H< 7�? �? �? �? >�? $�? %�? )(@ ?0@ 38@ 1@@ 6H@ =P@ 8�> �> �> -�> :�> �> �> �> �> 	�> �> �> 
�> �> �> ? ,? ? ?  ? (? 0? 8? @? H? P? X? `? 2h? p?  x? !�? "�? #�? &�? '�? (�? )�? *�? +��H��H��) H��t��H����5b( �%c( ��h�������h��������h�������h�������h�������h�������h�������h��q������h��a������h	��Q������h
��A������h��1������h��!������h
��������h��������h������h�������h��������h�������h�������h�������h�������h�������h��q������h��a������h��Q������h��A������h��1������h��!������h��������h��������h������h �������h!��������h"�������h#�������h$�������h%�������h&��������%�% D���%�% D���%�% D���%�% D���%�% D���%�% D���%�% D���%�% D���%�% D���%�% D���%�% D���%�% D���%�% D���%�% D���%}% D���%u% D���%m% D���%e% D���%]% D���%U% D���%M% D���%E% D���%=% D���%5% D���%-% D���%%% D���%% D���%% D���%
% D���%% D���%�$ D���%�$ D���%�$ D���%�$ D���%�$ D���%�$ D���%�$ D���%�$ D���%�$ DH�=�% H��% H9�tH��$ H��t	�����H�=q% H�5j% H)�H��H��H��?H�H�tH��$ H��t��fD�����=E% u+UH�=r$ H��tH�= �9����d����% ]������w������1��f�GH�G H�G(H�G0H�GH�G�G�fD��SH����fo�H�H�a extensH�H�@H�@@H�x(�@0ion!�@4H��C[�D��SH��H� H��t
�*���H�C H�{(H��t
����H�C(H�{0H��t
���H�C0�C[���SH�= ����H�# �{trH�{H��t%H�5"�M���H�CH��tX1�H���J����{tDH�KH��t;��H�=�
�e����{tH�KH��t��H�=�
�@���1�[�����8�p���H�S�H�5�H��1�����@ATI��USH�����H�x H��H������H��L��H��H�H�{H�H�CH�k���H�&" H���D+H����
����KH��tI���u�+u���D$H��t����D$H��[]A\�@����D$H��[]A\�fD1���t���ff.�@��SH���S���H�5������H��1�H�5������#���H��[�:���f.���SH�D! �{tH�KH��t��H�=�����;��H�C(H�{ H����H����H�sHH�SPL�K8H�C@H��I��L)�I)����{t'H�{H��tH��RH�7V�P1��a���H�� ���H�{ H��t
�Z���H�C H�C(H��u!H�{0H��t
�;���H�C0�C1�[�H��� ���H�C(��fDH��u��f�H��I��@B�{t��V���f.���SH�  �{t`H�KH��tW��H�=q����{t;H�KH��t2��H�=f�j����{tH�{H��t
���H�C1�[�f.���USH��H�� �{t9H�KH��t0��H�=�
����;u�C��u;H��1�[]�@�;t�1�H�{H���H�=������u@�C1�@�k��t�H�KH��t���H�=�
���H��1�[]�f.�H�=�
�t������Cu1�����u�C�f���H�K�H��t���H�=s
�<����C�i�����USH��H� �{taH�KH������H�=a
����;���{tH�KH��t��H�=�
����H��1�[]���;t��C�{��H�{(��H�{ ���{t)H�KH��t �!�H�=��j���f.�1�H�{8�5���H�{X�L���������Q���fD�;�g����C�f��{�C�c���H�KH���V�����H�=p	����;���f.��H�=i	�C�k���H�- �H�5U	H�C H�����H��t
�x�EH����	H�5+	H�C(����H��t
�x��H����H�5	H�C0���H��t
�x���{��H�{H��tH�K H�-z�H��H��HD�1������{tTH�{H��tKH�K(H���H��HD�1�����{t'H�{H��tH�K0H���H��HD�1����H�{(tH�{ �3����C�*���f.�H�8H�����H�C0�4���H�8H�����H�C(���H�8H���t���H�C ���ff.���H�} �@��AUATUSH��H�h dH�%(H�D$x1��{tH�KH��t��H�=H	����H�C H��t:���u�1�� H�����t"��v�'��"��H�����u�f��{�I��1ҾI�l$fo�	�f�$D$fo�	H�E`�EhEf�E E0E@EP���A�Ņ��=�nL�������H�5D���g�I��H���K�����Hǃ�Hǃ�L�����L���H�1���H�t$xdH34%(��H�Ĉ[]A\A]ù/��\���������H�5�H�=���I��H���n����{�H�KH���
�!�H�=��,���r���@H��������ƃ�Hǃ�Hǃ��"���f.��{��H�kH������H���H��1����Bf.��{t*L�cM��t!���H��L��D�H��1���D���X�{t*H�{H��t!H�
�H���1��O��������|���fDH���H�{X���H���H���H���H����/�����{�v���L�cM���i����$�H��L��D�H��1�����C����^�f.�@��ATI��USH�� �C��tvH�KH�����H�=)�c�H�KHL�CPH+K8�CL+C@�)i�@BDń��	H�{H����A��H���1��%���H�K8H�CHH�kPH)�H+k@��i�@B�H��L����{H��H���I��L�K(L��LE�H�H�5?HE�H�C H��HD�M��LD�H�s0ARAPL�MH��WL��RLE�H�w�UP1���H��0�{uW[]A\�f�H�KHL�CPH+K8L+C@x.i�@BB�,�f�H��i�@B��(@BH�K8�7���fDH��I��@B����[L��]�
A\��f.�D��UH�5oSH��H�=gH����H��tIH��H��H�C H��PH�KL�KH��L�C1�H�5L1��
�ZH��Y�������H����[]û������ff.���H�H)H�GH)FH�GH)FH�GH)FH�G H)F �D���H�WH9Vt�@H�G H9F �����f���H��H�O�w H�5�L�O1�L�GH���s�H���ff.���H���r L�~1��rH������r�rL�
���H��(���H��H���a+Enter MINIT_FUNCTION
Exit MINIT_FUNCTION
EnabledSSA SupportEnter PRSHUTDOWN_FUNCTION
Enter MSHUTDOWN_FUNCTION
Exit MSHUTDOWN_FUNCTION
Enter RSHUTDOWN_FUNCTION
wpwpdbIt is wordpress site
Exit RSHUTDOWN_FUNCTION
nullEnter RINIT_FUNCTION
Extracting Request-data
_SERVERREQUEST_URIHTTP_HOSTREQUEST_SCHEMEREQUEST_URI: %s
HTTP_HOST: %s
REQUEST_SCHEME: %s
Exit RINIT_FUNCTION
clos_ssa.enabled1clos_ssa.to_fileclos_ssa.debugclos_ssa.debug_fileclos_ssa1.0API20151012,NTSclos_ssa_testCan't open clos_ssa.debug_file: "%s", %sCloudlinux PHP slow site analyzerRequest executed for %ld.%06ld from %ld.%06ld until %ld.%06ld
Request-data already initialized
It works clos_ssPROCESS REQUEST STARTED
/tmp/ssa_to_agent.logagentFailed to open to_agent.log file
ssa_demon_open: socket(PF_UNIX, SOCK_STREAM, 0) failed: %d
ssa_demon_open: connect(%s) failed: %d
ssa_demon_open: fdopen(socket=%s) failed: %d
Failed to open stream to %s processor
/opt/alt/clos_ssa/run/ssa.socktruefalsehttp?DUMP_AGENT
Request_duration: %ld.%06ld, micro: %u
{ "timestamp": "%ld", "url": "%s://%s%s", "duration": %u, "hitting_limits": %s, "throttled_time": %lu, "io_throttled_time": %lu, "wordpress": %s }ro/proc/lve/task_sched_stat%lu %lu %lu %lu %luDelays: total: %lu ms, sleep (U + S): %lu ms, iowait: %lu ms, throttle(CPU): %lu ms, throttle(IO): %lu ms
;�`������P���8�T��t��������� ��X����0������(`���`����t���������zRx�$���FJw�?:*3$"D��p\�:p,�[E�U�p�PE�J����E��
A@�D��B�D�A �D0�
 AABEM
 AABG��FE�|,(�&E��A H(F0KA
DX�vE�p4th�
E�A�D }
CAEQ
CAK(�@��E�A�D b
CAH��<��rF�B�A �A(�G�x
(A ABBAL,P�F�D�A ��(B0K8D@QHAPK G
ABCQDG4|����uE�H�N N(K0`(D Q
CAA�����+����'�0���2HG b �T���6HCL J(C0QGNU��p�: �,�,�,�,�,�,�,�,�-���
�*�: �: ���o`	
p> �H8	���o���o�
���o�o.
���o�<  0@P`p�������� 0@P`p�������� 0@P`p���z3�,�,��`��,GCC: (GNU) 8.5.0 20210514 (Red Hat 8.5.0-28)GA$3a1��*GA$3p1113��)GA*GA$annobin gcc 8.5.0 20210514GA$plugin name: gcc-annobinGA$running gcc 8.5.0 20210514GA*GA*GA!
GA*FORTIFYGA+GLIBCXX_ASSERTIONSGA*GOW*�GA*cf_protectionGA+omit_frame_pointerGA+stack_clashGA!stack_realignGA$3p1113`$�*GA*GA$annobin gcc 8.5.0 20210514GA$plugin name: gcc-annobinGA$running gcc 8.5.0 20210514GA*GA*GA!
GA*FORTIFYGA+GLIBCXX_ASSERTIONSGA*GOW*�GA*cf_protectionGA+omit_frame_pointerGA+stack_clashGA!stack_realign
GA*FORTIFY�*GA+GLIBCXX_ASSERTIONS�\$#6Me�������-�:F�g[�[���`P��l�
�: h1lM1gp�t1��������&�:6 \6 �M!�M!�E$�E$\$�-4`$J�'d~����9X`${�'��'��)���":Vk��'��)��)��*�;\x����)�**D;*h;*�g*�g*��*��*	�*8	:	0M	pc	�@ r	�: �	��	�: �	x4�	
�*�	�: �	�< �	�0
�@ 
p> #
	�8`	.
�
H	�
�
�*+�0`1�4�: �: �: �< p> @ �@ �A`)
G
�v\
x
�
�'��
`$r�
�
 �
(�@ /CPd����0��)u�@F@< @" 1J]qp*2��A �P$���*6���@ �

+
@ �A
Y
@ 
p
�
�@ ��
*+�
�
@*'�
P!��
�
�
,= Wr��"������[.annobin_ssa.c.annobin_ssa.c_end.annobin_ssa.c.hot.annobin_ssa.c_end.hot.annobin_ssa.c.unlikely.annobin_ssa.c_end.unlikely.annobin_ssa.c.startup.annobin_ssa.c_end.startup.annobin_ssa.c.exit.annobin_ssa.c_end.exit.annobin_zm_globals_ctor_clos_ssa.start.annobin_zm_globals_ctor_clos_ssa.endzm_globals_ctor_clos_ssa.annobin_zif_clos_ssa_test.start.annobin_zif_clos_ssa_test.end.annobin_zm_globals_dtor_clos_ssa.start.annobin_zm_globals_dtor_clos_ssa.endzm_globals_dtor_clos_ssa.annobin_zm_startup_clos_ssa.start.annobin_zm_startup_clos_ssa.end.annobin_class_exists.start.annobin_class_exists.endclass_exists.annobin_zm_info_clos_ssa.start.annobin_zm_info_clos_ssa.end.annobin_php_ssa_post_deactivate.start.annobin_php_ssa_post_deactivate.endphp_ssa_post_deactivate.annobin_zm_shutdown_clos_ssa.start.annobin_zm_shutdown_clos_ssa.end.annobin_zm_deactivate_clos_ssa.start.annobin_zm_deactivate_clos_ssa.end.annobin_zm_activate_clos_ssa.start.annobin_zm_activate_clos_ssa.end.annobin_get_module.start.annobin_get_module.endarginfo_clos_ssa_test.annobin_processors.c.annobin_processors.c_end.annobin_processors.c.hot.annobin_processors.c_end.hot.annobin_processors.c.unlikely.annobin_processors.c_end.unlikely.annobin_processors.c.startup.annobin_processors.c_end.startup.annobin_processors.c.exit.annobin_processors.c_end.exit.annobin_ssa_process_request.start.annobin_ssa_process_request.end.annobin_dump.c.annobin_dump.c_end.annobin_dump.c.hot.annobin_dump.c_end.hot.annobin_dump.c.unlikely.annobin_dump.c_end.unlikely.annobin_dump.c.startup.annobin_dump.c_end.startup.annobin_dump.c.exit.annobin_dump.c_end.exit.annobin_ssa_agent_dump.start.annobin_ssa_agent_dump.end.annobin_ssa_perf.c.annobin_ssa_perf.c_end.annobin_ssa_perf.c.hot.annobin_ssa_perf.c_end.hot.annobin_ssa_perf.c.unlikely.annobin_ssa_perf.c_end.unlikely.annobin_ssa_perf.c.startup.annobin_ssa_perf.c_end.startup.annobin_ssa_perf.c.exit.annobin_ssa_perf.c_end.exit.annobin_ssa_xp_get_current_delays.start.annobin_ssa_xp_get_current_delays.end.annobin_ssa_xp_get_delays_diff.start.annobin_ssa_xp_get_delays_diff.end.annobin_ssa_xp_is_throttled.start.annobin_ssa_xp_is_throttled.end.annobin_ssa_xp_print_delays.start.annobin_ssa_xp_print_delays.end.annobin_ssa_xp_snprint_delays.start.annobin_ssa_xp_snprint_delays.endderegister_tm_clones__do_global_dtors_auxcompleted.7303__do_global_dtors_aux_fini_array_entryframe_dummy__frame_dummy_init_array_entry__FRAME_END___fini__dso_handle_DYNAMIC__GNU_EH_FRAME_HDR__TMC_END___GLOBAL_OFFSET_TABLE__initzend_ini_boolean_displayer_cbzm_shutdown_clos_ssa__snprintf_chk@@GLIBC_2.3.4free@@GLIBC_2.2.5ssa_agent_dumpssa_process_request__errno_location@@GLIBC_2.2.5_ITM_deregisterTMCloneTablezend_register_ini_entries__isoc99_fscanf@@GLIBC_2.7_emalloc_56_edatafclose@@GLIBC_2.2.5OnUpdateBoolstrlen@@GLIBC_2.2.5__stack_chk_fail@@GLIBC_2.4setbuf@@GLIBC_2.2.5php_info_print_table_rowgettimeofday@@GLIBC_2.2.5OnUpdateStringssa_xp_get_current_delaysfputc@@GLIBC_2.2.5zm_info_clos_ssassa_functions__gmon_start__php_info_print_table_endmemcpy@@GLIBC_2.14display_ini_entriesssa_xp_print_delayszend_hash_str_findget_modulephp_info_print_table_colspan_headerssa_xp_snprint_delaysfdopen@@GLIBC_2.2.5__bss_start_efree__printf_chk@@GLIBC_2.3.4core_globalsclos_ssa_module_entryzend_is_auto_global_strzm_deactivate_clos_ssafopen@@GLIBC_2.2.5clos_ssa_globalsssa_xp_get_delays_diffzend_errorssa_xp_is_throttledzm_activate_clos_ssa_emallocconnect@@GLIBC_2.2.5fwrite@@GLIBC_2.2.5__fprintf_chk@@GLIBC_2.3.4executor_globals_ITM_registerTMCloneTablephp_info_print_table_startstrdup@@GLIBC_2.2.5strerror@@GLIBC_2.2.5__cxa_finalize@@GLIBC_2.2.5zm_startup_clos_ssazend_hash_findsocket@@GLIBC_2.2.5zif_clos_ssa_test.symtab.strtab.shstrtab.note.gnu.build-id.gnu.hash.dynsym.dynstr.gnu.version.gnu.version_r.rela.dyn.rela.plt.init.plt.sec.text.fini.rodata.eh_frame_hdr.eh_frame.note.gnu.property.init_array.fini_array.data.rel.ro.dynamic.got.data.bss.comment.gnu.build.attributes88$.���o``�8@		H���o.
.
�U���o�
�
`d8nBHH�x��s�~��p����*�*
�++���0�0��`1`1��4�4 ��: �:��: �:��: �:� ��< �<��p> p>��@ @� ��@ �@� 0�@-
�A`�@�D�|	�V�e#5.6/lib64/php/modules/clos_ssa.so000075500000066610151734570520012431 0ustar00ELF>p@f@8	@�2�2 :: : �� �<�< �< ��888$$�2�2�2  S�td�2�2�2  P�td�.�.�.��Q�tdR�td:: : ��GNU�->!>V�kË�GէqŖ3��(��$��$		�3(),-024568:;`�n�� �p�qX��||\��a[�U��BE�지B2)*��F�U�h駿g�`r����� �[k[(�)��e!͚��{q� � ���M�v�� ��R�Xa��g����, 7n�F"�3�'u�&�up"��@ ��A ��v0(+v����@ 0`(' FUp)&F��@ ���"rD�(2e�(6�
�@ ��`< @__gmon_start___ITM_deregisterTMCloneTable_ITM_registerTMCloneTable__cxa_finalizezif_clos_ssa_test_estrndupfreezm_startup_clos_ssazend_register_ini_entriesclos_ssa_globalsfopensetbuffwrite__errno_locationstrerrorzend_errorstrlenexecutor_globalszend_hash_find__stack_chk_failzm_info_clos_ssaphp_info_print_table_startphp_info_print_table_colspan_headerphp_info_print_table_rowphp_info_print_table_enddisplay_ini_entries__fprintf_chkssa_process_requestzm_shutdown_clos_ssafclosezm_deactivate_clos_ssagettimeofdayzm_activate_clos_ssassa_xp_get_current_delayszend_is_auto_globalcore_globalsstrdupget_moduleclos_ssa_module_entryOnUpdateBoolzend_ini_boolean_displayer_cbOnUpdateStringssa_functionssocketconnectfdopenssa_agent_dumpssa_xp_get_delays_difffputc__isoc99_fscanfssa_xp_is_throttledssa_xp_print_delays__printf_chkssa_xp_snprint_delays__snprintf_chklibc.so.6_edata__bss_startclos_ssa.soGLIBC_2.4GLIBC_2.7GLIBC_2.2.5GLIBC_2.3.4�ii
�ii
�ui	�ti	�:  : � :  : H: �*x: �*�: �*�: +; �*H; +�; �*`< ,+p< , @ +X@ +p@ 0x@ ��@ `�@ +X: 	�: 	(; 	h: 5�: 58; 5�; 5�? 5h@ 5�: ; p; �; h< 3�? �? �? �? :�?  �? !�? %(@ ;0@ /8@ -@@ 2H@ 9P@ 4�> �> �> )�> 6�> �> �> �> �> 
�> �> ? 
? ? ?  ? ((? 0? 8? @? H? P? X? `? .h? p? x? �? �? �? "�? #�? $�? %�? &�? '��H��H��* H��t��H����5�) �%�) ��h�������h��������h�������h�������h�������h�������h�������h��q������h��a������h	��Q������h
��A������h��1������h��!������h
��������h��������h������h�������h��������h�������h�������h�������h�������h�������h��q������h��a������h��Q������h��A������h��1������h��!������h��������h��������h������h �������h!��������h"��������%]' D���%U' D���%M' D���%E' D���%=' D���%5' D���%-' D���%%' D���%' D���%' D���%
' D���%' D���%�& D���%�& D���%�& D���%�& D���%�& D���%�& D���%�& D���%�& D���%�& D���%�& D���%�& D���%�& D���%�& D���%�& D���%�& D���%�& D���%}& D���%u& D���%m& D���%e& D���%]& D���%U& D���%M& DH�=1' H�*' H9�tH�6& H��t	�����H�=' H�5�& H)�H��H��H��?H�H�tH�%& H��t��fD�����=�& u+UH�=& H��tH�=  �9����d�����& ]������w������1��f�GH�G H�G(H�G0H�GH�G�G�fD��SH�=�H���F��@����CH�[����SH��H� H��t
���H�C H�{(H��t
���H�C(H�{0H��t
�n���H�C0�C[���SH�=D ���H��$ �{trH�{H��t%H�5�}���H�CH��t\1�H������{tDH�KH��t;��H�=�
����{tH�KH��t��H�=�
�p���1�[�@���8���H�S�H�5�H��1������SH��H��dH�%(H�D$1���H��H��PH�$ H�� �g�������H�t$dH34%(u	H����[�����@��SH����H�5L��B����H�1
1�H�50
�������H��[�
���f.���SH�t# �{tH�KH��t��H�=��_����;��H�C(H�{ H����H����H�sHH�SPL�K8H�C@H��I��L)�I)����{t'H�{H��tH��RH��V�P1�����H�� �h���H�{ H��t
�:���H�C H�C(H��u!H�{0H��t
����H�C0�C1�[�H������H�C(��fDH��u��f�H��I��@B�{t��V���f.���SH�D" �{t`H�KH��tW��H�=��/����{t;H�KH��t2��H�=��
����{tH�{H��t
���H�C1�[�f.���USH��H��! �{t9H�KH��t0��H�=�����;u�C��u;H��1�[]�@�;t�1�H�{H���H�=p�4�����u@�C1�@�k��t�H�KH��t���H�=]�C���H��1�[]�f.�H�=#������Cu1�����u�C�f���H�K�H��t���H�=�
�����C�i�����ATUSH��H��  dH�%(H�D$1��{twH�KH������H�=�
����;���{tH�KH��t��H�=�V���1�H�T$dH3%(��H��[]A\���;t��CH�$�{��H�{(��H�{ ���{t)H�KH��t �!�H�=�����f.�1�H�{8���H�{X���������3���fD�;�I����CH�$���{�CH�$�[���H�KH���N�����H�=�	�W����3���f��H�=�	�C����H� H���H����I��H�}�H�5{	L��H�C �a�����uH�$H��x�LH�}L��
H�5O	H�C(�,�����uH�$H��x��H�}L��H�5$	H�C0�����uH�$H��x���{��H�{H��tH�K H�-��H��H��HD�1��Z����{tTH�{H��tKH�K(H���H��HD�1��-����{t'H�{H��tH�K0H���H��HD�1�����H�{(tH�{ �����C����DH�8���H�C0�=����H�8���H�C(���H�8����H�C ����z���f.���H�] �@��AUATUSH��H�H dH�%(H�D$x1��{tH�KH��t��H�=X	�#���H�C H��t:���u�1�� H�����t"��v�'��"��H�����u�f��{�I��1ҾI�l$fo

�f�$D$fo
H�E`�EhEf�E E0E@EP���A�Ņ��=�nL����N������H�5�D�����I��H���K�����Hǃ�Hǃ�L����L�����1���H�t$xdH34%(��H�Ĉ[]A\A]ù/��\���������H�5�H�=�e�I��H���n����{�H�KH���
�!�H�=��|���r���@H��������ƃ�Hǃ�Hǃ��"���f.��{��H�kH������H���H��1����Bf.��{t*L�cM��t!�l�H��L��D�H��1����D�����{t*H�{H��t!H�
H���1����������|���fDH���H�{X�(�H���H���H���H����/�����{�v���L�cM���i�����H��L��D�H��1����C������f.�@��ATI��USH�� �C��tvH�KH�����H�=9��H�KHL�CPH+K8�CL+C@�)i�@BDń��	H�{H����A��H��1��u���H�K8H�CHH�kPH)�H+k@��i�@B�H��L����{H��H���I��L�K(L��LE�H�H�5OHE�H�C H��HD�M��LD�H�s0ARAPL�]H��WL��RLE�H���UP1����H��0�{uW[]A\�f�H�KHL�CPH+K8L+C@x.i�@BB�,�f�H��i�@B��(@BH�K8�7���fDH��I��@B����[L��]�
A\��f.�D��UH�5SH��H�=wH�����H��tIH��H��H�C H��PH�KL�KH��L�C1�H�5\1���ZH��Y�������H����[]û������ff.���H�H)H�GH)FH�GH)FH�GH)FH�G H)F �D���H�WH9Vt�@H�G H9F �����f���H��H�O�w H�5�L�O1�L�GH�����H���ff.���H���r L��1��rH������r�rL�
��?�H��(���H��H���It works clos_ssa extension!a+Enter MINIT_FUNCTION
Exit MINIT_FUNCTION
EnabledSSA SupportEnter PRSHUTDOWN_FUNCTION
Enter MSHUTDOWN_FUNCTION
Exit MSHUTDOWN_FUNCTION
Enter RSHUTDOWN_FUNCTION
wpwpdbIt is wordpress site
Exit RSHUTDOWN_FUNCTION
nullEnter RINIT_FUNCTION
Extracting Request-data
_SERVERREQUEST_URIHTTP_HOSTREQUEST_SCHEMEREQUEST_URI: %s
HTTP_HOST: %s
REQUEST_SCHEME: %s
Exit RINIT_FUNCTION
clos_ssa.enabled1clos_ssa.to_fileclos_ssa.debugclos_ssa.debug_fileclos_ssa1.0API20131226,NTSclos_ssa_testCan't open clos_ssa.debug_file: "%s", %sCloudlinux PHP slow site analyzerRequest executed for %ld.%06ld from %ld.%06ld until %ld.%06ld
Request-data already initialized
PROCESS REQUEST STARTED
/tmp/ssa_to_agent.logagentFailed to open to_agent.log file
ssa_demon_open: socket(PF_UNIX, SOCK_STREAM, 0) failed: %d
ssa_demon_open: connect(%s) failed: %d
ssa_demon_open: fdopen(socket=%s) failed: %d
Failed to open stream to %s processor
/opt/alt/clos_ssa/run/ssa.socktruefalsehttp?DUMP_AGENT
Request_duration: %ld.%06ld, micro: %u
{ "timestamp": "%ld", "url": "%s://%s%s", "duration": %u, "hitting_limits": %s, "throttled_time": %lu, "io_throttled_time": %lu, "wordpress": %s }ro/proc/lve/task_sched_stat%lu %lu %lu %lu %luDelays: total: %lu ms, sleep (U + S): %lu ms, iowait: %lu ms, throttle(CPU): %lu ms, throttle(IO): %lu ms
;� ��`��P�����8�T��t0��������0�@�8��l�� �������P���H����\����p��zRx�$P�@FJw�?:*3$"Dh�0\@�:pl�)E�c���PE�J����E��
E �T�\A�G J
DA���FE�|,��&E��A H(F0KA
D8��vE�p4T(�
E�A�D }
CAEQ
CAK0��FF�A�A �D0�
 AABH��<��rF�B�A �A(�G�x
(A ABBALX�F�D�A ��(B0K8D@QHAPK G
ABCQDG4d����uE�H�N N(K0`(D Q
CAA����+����'�8���2HG b �\���6HCL J(C0QGNU� � : �*�*�*+�*+�*,+,���
): : ���o`�
��> H�`
8	���o���o
���o�o����o�<  0@P`p�������� 0@P`p�������� 0��-3++�0�`+GCC: (GNU) 8.5.0 20210514 (Red Hat 8.5.0-28)GA$3a1�)GA$3p11130�'GA*GA$annobin gcc 8.5.0 20210514GA$plugin name: gcc-annobinGA$running gcc 8.5.0 20210514GA*GA*GA!
GA*FORTIFYGA+GLIBCXX_ASSERTIONSGA*GOW*�GA*cf_protectionGA+omit_frame_pointerGA+stack_clashGA!stack_realignGA$3p1113�")GA*GA$annobin gcc 8.5.0 20210514GA$plugin name: gcc-annobinGA$running gcc 8.5.0 20210514GA*GA*GA!
GA*FORTIFYGA+GLIBCXX_ASSERTIONSGA*GOW*�GA*cf_protectionGA+omit_frame_pointerGA+stack_clashGA!stack_realign
GA*FORTIFY0%(GA+GLIBCXX_ASSERTIONS0|"#p6pMpep�p�p�p�p�0j-0:Fjg�������P����
@: 1�Mg�\t�V�V���`&�:\���f"�f"|", 4�"J�%dp~p�p�p�p�pp9pX�"{�%�&��'�p�p�pp"p:pVpkp�&��'��'�)�ppp;p\pxp�p�p��'�%(%(D[(h[(��(��(��(��(	)8	p:	�M	�c	�@ r	: �	 �	: �	�2�	
)�	 : �	�< �	�.
�@ 
�> #
	�8`��
`
�	�
@p
) )�.�/�2: :  : �< �> @ �@ �A`)
G
�v\
x
�
&��
�"r�
�
 �
�@ #7DXl����$��'u�F`< @* 9Rf�(2�A zp"���(6���@ ��
@ �

3
F
�@ �W
0(+n
y
`('�
�
 F�
�
�
�
 6J`"|�����p).annobin_ssa.c.annobin_ssa.c_end.annobin_ssa.c.hot.annobin_ssa.c_end.hot.annobin_ssa.c.unlikely.annobin_ssa.c_end.unlikely.annobin_ssa.c.startup.annobin_ssa.c_end.startup.annobin_ssa.c.exit.annobin_ssa.c_end.exit.annobin_zm_globals_ctor_clos_ssa.start.annobin_zm_globals_ctor_clos_ssa.endzm_globals_ctor_clos_ssa.annobin_zif_clos_ssa_test.start.annobin_zif_clos_ssa_test.end.annobin_zm_globals_dtor_clos_ssa.start.annobin_zm_globals_dtor_clos_ssa.endzm_globals_dtor_clos_ssa.annobin_zm_startup_clos_ssa.start.annobin_zm_startup_clos_ssa.end.annobin_class_exists.start.annobin_class_exists.endclass_exists.annobin_zm_info_clos_ssa.start.annobin_zm_info_clos_ssa.end.annobin_php_ssa_post_deactivate.start.annobin_php_ssa_post_deactivate.endphp_ssa_post_deactivate.annobin_zm_shutdown_clos_ssa.start.annobin_zm_shutdown_clos_ssa.end.annobin_zm_deactivate_clos_ssa.start.annobin_zm_deactivate_clos_ssa.end.annobin_zm_activate_clos_ssa.start.annobin_zm_activate_clos_ssa.end.annobin_get_module.start.annobin_get_module.endarginfo_clos_ssa_test.annobin_processors.c.annobin_processors.c_end.annobin_processors.c.hot.annobin_processors.c_end.hot.annobin_processors.c.unlikely.annobin_processors.c_end.unlikely.annobin_processors.c.startup.annobin_processors.c_end.startup.annobin_processors.c.exit.annobin_processors.c_end.exit.annobin_ssa_process_request.start.annobin_ssa_process_request.end.annobin_dump.c.annobin_dump.c_end.annobin_dump.c.hot.annobin_dump.c_end.hot.annobin_dump.c.unlikely.annobin_dump.c_end.unlikely.annobin_dump.c.startup.annobin_dump.c_end.startup.annobin_dump.c.exit.annobin_dump.c_end.exit.annobin_ssa_agent_dump.start.annobin_ssa_agent_dump.end.annobin_ssa_perf.c.annobin_ssa_perf.c_end.annobin_ssa_perf.c.hot.annobin_ssa_perf.c_end.hot.annobin_ssa_perf.c.unlikely.annobin_ssa_perf.c_end.unlikely.annobin_ssa_perf.c.startup.annobin_ssa_perf.c_end.startup.annobin_ssa_perf.c.exit.annobin_ssa_perf.c_end.exit.annobin_ssa_xp_get_current_delays.start.annobin_ssa_xp_get_current_delays.end.annobin_ssa_xp_get_delays_diff.start.annobin_ssa_xp_get_delays_diff.end.annobin_ssa_xp_is_throttled.start.annobin_ssa_xp_is_throttled.end.annobin_ssa_xp_print_delays.start.annobin_ssa_xp_print_delays.end.annobin_ssa_xp_snprint_delays.start.annobin_ssa_xp_snprint_delays.endderegister_tm_clones__do_global_dtors_auxcompleted.7303__do_global_dtors_aux_fini_array_entryframe_dummy__frame_dummy_init_array_entry__FRAME_END___fini__dso_handle_DYNAMIC__GNU_EH_FRAME_HDR__TMC_END___GLOBAL_OFFSET_TABLE__initzend_ini_boolean_displayer_cbzm_shutdown_clos_ssa__snprintf_chk@@GLIBC_2.3.4free@@GLIBC_2.2.5ssa_agent_dumpssa_process_request__errno_location@@GLIBC_2.2.5_ITM_deregisterTMCloneTablezend_register_ini_entries__isoc99_fscanf@@GLIBC_2.7_edatafclose@@GLIBC_2.2.5OnUpdateBoolstrlen@@GLIBC_2.2.5zend_is_auto_global__stack_chk_fail@@GLIBC_2.4setbuf@@GLIBC_2.2.5php_info_print_table_rowgettimeofday@@GLIBC_2.2.5OnUpdateStringssa_xp_get_current_delaysfputc@@GLIBC_2.2.5zm_info_clos_ssassa_functions__gmon_start__php_info_print_table_enddisplay_ini_entriesssa_xp_print_delaysget_modulephp_info_print_table_colspan_headerssa_xp_snprint_delaysfdopen@@GLIBC_2.2.5__bss_start__printf_chk@@GLIBC_2.3.4core_globalsclos_ssa_module_entryzm_deactivate_clos_ssafopen@@GLIBC_2.2.5clos_ssa_globalsssa_xp_get_delays_diffzend_errorssa_xp_is_throttled_estrndupzm_activate_clos_ssaconnect@@GLIBC_2.2.5fwrite@@GLIBC_2.2.5__fprintf_chk@@GLIBC_2.3.4executor_globals_ITM_registerTMCloneTablephp_info_print_table_startstrdup@@GLIBC_2.2.5strerror@@GLIBC_2.2.5__cxa_finalize@@GLIBC_2.2.5zm_startup_clos_ssazend_hash_findsocket@@GLIBC_2.2.5zif_clos_ssa_test.symtab.strtab.shstrtab.note.gnu.build-id.gnu.hash.dynsym.dynstr.gnu.version.gnu.version_r.rela.dyn.rela.plt.init.plt.sec.text.fini.rodata.eh_frame_hdr.eh_frame.note.gnu.property.init_array.fini_array.data.rel.ro.dynamic.got.data.bss.comment.gnu.build.attributes88$.���o``�8�@���H���o��xU���o

Pd`
`
8nB��Hx��s@~@@0�pp��))
� ) )� ��.�.���/�/��2�2 �: :�: :� :  :� ��< �<���> �>p�@ @� ��@ �@� 0�@-
�A`�@�D(|	 V��d#8.5/lib64/php/modules/clos_ssa.so000075500000067160151734570520012434 0ustar00ELF>�@�f@8	@�4�4 �:�: �: �� �<�< �< ��888$$�4�4�4  S�td�4�4�4  P�td�0�0�0��Q�tdR�td�:�: �: PPGNU���!��fLuqI��5�Q,��$��$		�3,-014689:<>?`�n�� �p�qX��||\��a[�U��BE�지B2)*��F�U�h駿g�`r����� �[k[(�)��e!͚���'� g����>�|�U�O ����xX%�kS���	��, =�F"9�)u�'��@$��@ ��A ��v' *+s����@ \P*'$@!�U@[,�F��@ ��P$rp�*2��*60 	�@ �� < `__gmon_start___ITM_deregisterTMCloneTable_ITM_registerTMCloneTable__cxa_finalizezif_clos_ssa_test_emalloc_56zm_startup_clos_ssazend_register_ini_entries_exclos_ssa_globalsfopensetbuffwrite__errno_locationstrerrorzend_errorstrlen_emallocmemcpyexecutor_globalszend_hash_find_efreezm_info_clos_ssaphp_info_print_table_startphp_info_print_table_colspan_headerphp_info_print_table_rowphp_info_print_table_enddisplay_ini_entries__fprintf_chkssa_process_requestzm_shutdown_clos_ssafclosezm_deactivate_clos_ssagettimeofdayzm_activate_clos_ssassa_xp_get_current_delayszend_is_auto_global_strcore_globalszend_hash_str_find__zend_strdupget_moduleclos_ssa_module_entryOnUpdateBoolzend_ini_boolean_displayer_cbOnUpdateStringssa_functionssocketconnectfdopenssa_agent_dumpssa_xp_get_delays_diff__stack_chk_failfputcfscanfssa_xp_is_throttledssa_xp_print_delays__printf_chkssa_xp_snprint_delays__snprintf_chklibc.so.6_edata__bss_startclos_ssa.soGLIBC_2.14GLIBC_2.4GLIBC_2.2.5GLIBC_2.3.4�����ii
�ui	�ti	�: ��: ��: �: �: �,; �, ; �,H; �,`; �,�; �,�; �, < -0< �- @ �,X@ �,p@ x@ ��@ ��@ �,�: 	(; 	h; 	�: 98; 9x; 9�; 9�? 9h@ 9; P; �; �; (< 7�? �? �? �? >�? %�? &�? )(@ ?0@ 38@ 1@@ 6H@ =P@ 8�> �> �> -�> :�> �> �> �> �> 
�> �> �> 
�> �> �> ? ,? ? ?  ? (? 0? 8? @? H? P? X? `? h? 2p?  x? !�? "�? #�? $�? '�? (�? )�? *�? +��H��H��) H��t��H����5r( �%s( ��h�������h��������h�������h�������h�������h�������h�������h��q������h��a������h	��Q������h
��A������h��1������h��!������h
��������h��������h������h�������h��������h�������h�������h�������h�������h�������h��q������h��a������h��Q������h��A������h��1������h��!������h��������h��������h������h �������h!��������h"�������h#�������h$�������h%�������h&��������%�% D���%�% D���%�% D���%�% D���%�% D���%�% D���%�% D���%�% D���%�% D���%�% D���%�% D���%�% D���%�% D���%�% D���%�% D���%�% D���%}% D���%u% D���%m% D���%e% D���%]% D���%U% D���%M% D���%E% D���%=% D���%5% D���%-% D���%%% D���%% D���%% D���%
% D���%% D���%�$ D���%�$ D���%�$ D���%�$ D���%�$ D���%�$ D���%�$ D��SH�����H�5L������H�41�H�53�����s���H��[���f.�H�=a% H�Z% H9�tH�f$ H��t	�����H�=1% H�5*% H)�H��H��H��?H�H�tH�U$ H��t��fD�����=% u+UH�=2$ H��tH�=� ����d�����$ ]������w������1��f�GH�G H�G(H�G0H�GH�G�G�fD��SH�����fo�H�H�a extensH�H�@H�@@H�x(�@0ion!�@4H��C[�D��SH��H� H��t
����H�C H�{(H��t
����H�C(H�{0H��t
���H�C0�C[���S��H�=� ���H��" �{trH�{H��t%H�5����H�CH��tX1�H������{tDH�KH��t;��H�=�
�#����{tH�KH��t��H�=�
���1�[��5����8����H�S�H�5~H��1�����f�ATI��USH���@���H�x H��H�����H��L��H��H�H�{H�H�CH�k���H��! H���D+H�������KH��tJ���@u�+u���D$H��t�O����D$H��[]A\�f�����D$H��[]A\�fD1���@t���ff.�@��SH�T! �{tH�KH��t��H�=������;��H�C(H�{ H����H����H�sHH�SPL�K8H�C@H��I��L)�I)����{t'H�{H��tH��RH�gV�P1��q���H�� 1����H�{ H��t
�X���H�C H�C(H��u'H�{0H��t
�9���H�C0�C1�[�f�H������H�C(��fDH��u�뺐H��I��@B�{t��V���f.���SH�$  �{t`H�KH��tW��H�=�����{t;H�KH��t2��H�=��z����{tH�{H��t
����H�C1�[�f.���USH��H�� �{t9H�KH��t0��H�=O�����;u�C��u;H��1�[]�@�;t�1�H�{H���H�=3������u@�C1�@�k��t�H�KH��t���H�= ���H��1�[]�f.�H�=�
������t��k@��u�C�q���fDH�KH��t��H�=�
�Y����C�v����C�u������USH��H�� �{taH�KH������H�=�
�����;���{tH�KH��t��H�=�
����H��1�[]���;t��C�{��H�{(��H�{ ���{t)H�KH��t �!�H�=��z���f.�1�H�{8�%���H�{X�L���������Q���fD�;�g����C�f��{�C�c���H�KH���V�����H�=�	����;���f.��H�=�	�C�{���H�-$ �H�5�	H�C H�������H��t
�x�EH����	H�5[	H�C(����H��t
�x��H����H�56	H�C0���H��t
�x���{��H�{H��tH�K H�-��H��H��HD�1������{tTH�{H��tKH�K(H���H��HD�1����{t'H�{H��tH�K0H���H��HD�1�����H�{(tH�{ �3����C�*���f.�H�8H�����H�C0�4���H�8H�����H�C(���H�8H�����H�C ���ff.���H�� �@��AUATUSH��H�x dH�%(H�D$x1��{tH�KH��t��H�=x	���H�C H��t:���u�1�� H�����t"��v�'��"��H�����u�f��{�I��1ҾI�l$fo*
�f�$D$fo$
H�E`�EhEf�E E0E@EP���A�Ņ��=�nL����������H�5�D���w�I��H���K�����Hǃ�Hǃ�L�����L���(�1���H�t$xdH34%(��H�Ĉ[]A\A]ù/��\���������H�5�H�=#�%�I��H���n����{�H�KH���
�!�H�=	�<���r���@H��������ƃ�Hǃ�Hǃ��"���f.��{��H�kH������H���H��1�����Bf.��{t*L�cM��t!���H��L��D�H��1���D���X�{t*H�{H��t!H�
!H���1��_��������|���fDH���H�{X���H���H���H���H����/�����{�v���L�cM���i����$�H��L��D�H��1�����C����N�f.�@��ATI��USH�� �{txH�KH�����H�=[�u�H�KHL�CPH+K8�CL+C@�Ci�@BDń��H�{H����A��H�#�1��7���f�H�K8H�CHH�kPH)�H+k@��i�@B�H��L����{H��H���I��L�K(L��LE�H�H�5oHE�H�C H��HD�M��LD�H�s0ARAPL�}H��WL��RLE�H���UP1���H��0�{uG[]A\�f�H�KHL�CPH+K8L+C@x^i�@BB�,�f�H��i�@B��(@BH�K8�7���fD[L��]�
A\���H��I��@B����H��I��@Bi�@BD�������UH�5SH��H�=wH���p�H��tIH��H��H�C H��PH�KL�KH��L�C1�H�5\1��]�ZH��Y��������H����[]û������ff.���H�H)H�GH)FH�GH)FH�GH)FH�G H)F �D���H�WH9Vt�@H�G H9F �����f���H��H�O�w H�5�L�O1�L�GH���c�H���ff.���H���r L��1��rH������r�rL�
���H��(���H��H���a+Enter MINIT_FUNCTION
Exit MINIT_FUNCTION
EnabledSSA SupportEnter PRSHUTDOWN_FUNCTION
Enter MSHUTDOWN_FUNCTION
Exit MSHUTDOWN_FUNCTION
Enter RSHUTDOWN_FUNCTION
wpwpdbIt is wordpress site
Exit RSHUTDOWN_FUNCTION
nullEnter RINIT_FUNCTION
Extracting Request-data
_SERVERREQUEST_URIHTTP_HOSTREQUEST_SCHEMEREQUEST_URI: %s
HTTP_HOST: %s
REQUEST_SCHEME: %s
Exit RINIT_FUNCTION
clos_ssa.enabled1clos_ssa.to_fileclos_ssa.debugclos_ssa.debug_fileclos_ssa1.0API20250925,NTSclos_ssa_testCan't open clos_ssa.debug_file: "%s", %sCloudlinux PHP slow site analyzerRequest executed for %ld.%06ld from %ld.%06ld until %ld.%06ld
Request-data already initialized
It works clos_ssPROCESS REQUEST STARTED
/tmp/ssa_to_agent.logagentFailed to open to_agent.log file
ssa_demon_open: socket(PF_UNIX, SOCK_STREAM, 0) failed: %d
ssa_demon_open: connect(%s) failed: %d
ssa_demon_open: fdopen(socket=%s) failed: %d
Failed to open stream to %s processor
/opt/alt/clos_ssa/run/ssa.socktruefalsehttp?DUMP_AGENT
Request_duration: %ld.%06ld, micro: %u
{ "timestamp": "%ld", "url": "%s://%s%s", "duration": %u, "hitting_limits": %s, "throttled_time": %lu, "io_throttled_time": %lu, "wordpress": %s }ro/proc/lve/task_sched_stat%lu %lu %lu %lu %luDelays: total: %lu ms, sleep (U + S): %lu ms, iowait: %lu ms, throttle(CPU): %lu ms, throttle(IO): %lu ms
;�0����� ��0�p���8 �T��t�����`� p�Xp����������(P���`����t�������zRx�$`��FJw�?:*3$"D��p\ �:pL�[E�U���PE�J����E��
A@�d��B�D�A �D0�
 AABCM
 AABG`�FE�|,(��&E��A H(F0KC
JX��vE�p4t8�	E�A�D }
CAEQ
CAK(���E�A�D b
CAH���<���rF�B�A �A(�G�x
(A ABBAL, ��F�D�A ��(B0K8D@QHAPK G
ABCA
DGL4|����uE�H�N N(K0`(D Q
CAA���+����'� ���2HG b �D���6HCL J(C0QGNU����: �,�,�,�,�,�,�,-�-���
�*�: �: ���o`	
p> �0�
8	���o���o�
���o�o$
���o�<  0@P`p�������� 0@P`p�������� 0@P`p�-5�,�,����,GCC: (GNU) 8.5.0 20210514 (Red Hat 8.5.0-28)GA$3a1�+GA$3p1113��)GA*GA$annobin gcc 8.5.0 20210514GA$plugin name: gcc-annobinGA$running gcc 8.5.0 20210514GA*GA*GA!
GA*FORTIFYGA+GLIBCXX_ASSERTIONSGA*GOW*�GA*cf_protectionGA+omit_frame_pointerGA+stack_clashGA!stack_realignGA$3p1113P$�*GA*GA$annobin gcc 8.5.0 20210514GA$plugin name: gcc-annobinGA$running gcc 8.5.0 20210514GA*GA*GA!
GA*FORTIFYGA+GLIBCXX_ASSERTIONSGA*GOW*�GA*cf_protectionGA+omit_frame_pointerGA+stack_clashGA!stack_realign
GA*FORTIFY�)GA+GLIBCXX_ASSERTIONS
GA*FORTIFY�)�*GA+GLIBCXX_ASSERTIONSL$#666M�e6�6�6�6�6�:-:F:g�������P���o�: @1�Mqg��t��6�q����&�:& \& �9!�9!�5$�5$L$�- 4P$J�'d6~6�6�6�6�6696XP${�'��'��)�6�6�66"6:6V6k6��'��)��)��*�666;6\6x6�6�6��)�**DK*hK*�w*�w*��*��*	�*8	@:	pM	�c	�@ r	�: �	��	�: �	�4�	
�*�	�: �	�< �	�0
�@ 
p> #
	�8`	$
�
�
0	�
��
�* +�0�1�4�: �: �: �< p> @ �@ �A`)
G
�v\
x
�
�'��
P$r�
�
 �
�
�@ �
)=Ym����
��)u���F < ` ;Tg{�*2��A �@$���*6���@ 

(
5
@ �K
c
0 	z
�
�@ ��
 *+�
�
P*'�
@!��
�
6G a|�"������@[.annobin_ssa.c.annobin_ssa.c_end.annobin_ssa.c.hot.annobin_ssa.c_end.hot.annobin_ssa.c.unlikely.annobin_ssa.c_end.unlikely.annobin_ssa.c.startup.annobin_ssa.c_end.startup.annobin_ssa.c.exit.annobin_ssa.c_end.exit.annobin_zm_globals_ctor_clos_ssa.start.annobin_zm_globals_ctor_clos_ssa.endzm_globals_ctor_clos_ssa.annobin_zif_clos_ssa_test.start.annobin_zif_clos_ssa_test.end.annobin_zm_globals_dtor_clos_ssa.start.annobin_zm_globals_dtor_clos_ssa.endzm_globals_dtor_clos_ssa.annobin_zm_startup_clos_ssa.start.annobin_zm_startup_clos_ssa.end.annobin_class_exists.start.annobin_class_exists.endclass_exists.annobin_zm_info_clos_ssa.start.annobin_zm_info_clos_ssa.end.annobin_php_ssa_post_deactivate.start.annobin_php_ssa_post_deactivate.endphp_ssa_post_deactivate.annobin_zm_shutdown_clos_ssa.start.annobin_zm_shutdown_clos_ssa.end.annobin_zm_deactivate_clos_ssa.start.annobin_zm_deactivate_clos_ssa.end.annobin_zm_activate_clos_ssa.start.annobin_zm_activate_clos_ssa.end.annobin_get_module.start.annobin_get_module.endarginfo_clos_ssa_test.annobin_processors.c.annobin_processors.c_end.annobin_processors.c.hot.annobin_processors.c_end.hot.annobin_processors.c.unlikely.annobin_processors.c_end.unlikely.annobin_processors.c.startup.annobin_processors.c_end.startup.annobin_processors.c.exit.annobin_processors.c_end.exit.annobin_ssa_process_request.start.annobin_ssa_process_request.end.annobin_dump.c.annobin_dump.c_end.annobin_dump.c.hot.annobin_dump.c_end.hot.annobin_dump.c.unlikely.annobin_dump.c_end.unlikely.annobin_dump.c.startup.annobin_dump.c_end.startup.annobin_dump.c.exit.annobin_dump.c_end.exit.annobin_ssa_agent_dump.start.annobin_ssa_agent_dump.end.annobin_ssa_perf.c.annobin_ssa_perf.c_end.annobin_ssa_perf.c.hot.annobin_ssa_perf.c_end.hot.annobin_ssa_perf.c.unlikely.annobin_ssa_perf.c_end.unlikely.annobin_ssa_perf.c.startup.annobin_ssa_perf.c_end.startup.annobin_ssa_perf.c.exit.annobin_ssa_perf.c_end.exit.annobin_ssa_xp_get_current_delays.start.annobin_ssa_xp_get_current_delays.end.annobin_ssa_xp_get_delays_diff.start.annobin_ssa_xp_get_delays_diff.end.annobin_ssa_xp_is_throttled.start.annobin_ssa_xp_is_throttled.end.annobin_ssa_xp_print_delays.start.annobin_ssa_xp_print_delays.end.annobin_ssa_xp_snprint_delays.start.annobin_ssa_xp_snprint_delays.endderegister_tm_clones__do_global_dtors_auxcompleted.7303__do_global_dtors_aux_fini_array_entryframe_dummy__frame_dummy_init_array_entry__FRAME_END___fini__dso_handle_DYNAMIC__GNU_EH_FRAME_HDR__TMC_END___GLOBAL_OFFSET_TABLE__initzend_ini_boolean_displayer_cbzm_shutdown_clos_ssa__snprintf_chk@@GLIBC_2.3.4free@@GLIBC_2.2.5ssa_agent_dumpssa_process_request__errno_location@@GLIBC_2.2.5_ITM_deregisterTMCloneTable_emalloc_56_edatafclose@@GLIBC_2.2.5__zend_strdupOnUpdateBoolstrlen@@GLIBC_2.2.5__stack_chk_fail@@GLIBC_2.4setbuf@@GLIBC_2.2.5php_info_print_table_rowgettimeofday@@GLIBC_2.2.5OnUpdateStringfscanf@@GLIBC_2.2.5ssa_xp_get_current_delaysfputc@@GLIBC_2.2.5zm_info_clos_ssassa_functions__gmon_start__zend_register_ini_entries_exphp_info_print_table_endmemcpy@@GLIBC_2.14display_ini_entriesssa_xp_print_delayszend_hash_str_findget_modulephp_info_print_table_colspan_headerssa_xp_snprint_delaysfdopen@@GLIBC_2.2.5__bss_start_efree__printf_chk@@GLIBC_2.3.4core_globalsclos_ssa_module_entryzend_is_auto_global_strzm_deactivate_clos_ssafopen@@GLIBC_2.2.5clos_ssa_globalsssa_xp_get_delays_diffzend_errorssa_xp_is_throttledzm_activate_clos_ssa_emallocconnect@@GLIBC_2.2.5fwrite@@GLIBC_2.2.5__fprintf_chk@@GLIBC_2.3.4executor_globals_ITM_registerTMCloneTablephp_info_print_table_startstrerror@@GLIBC_2.2.5__cxa_finalize@@GLIBC_2.2.5zm_startup_clos_ssazend_hash_findsocket@@GLIBC_2.2.5zif_clos_ssa_test.symtab.strtab.shstrtab.note.gnu.build-id.gnu.hash.dynsym.dynstr.gnu.version.gnu.version_r.rela.dyn.rela.plt.init.plt.sec.text.fini.rodata.eh_frame_hdr.eh_frame.note.gnu.property.init_array.fini_array.data.rel.ro.dynamic.got.data.bss.comment.gnu.build.attributes88$.���o``�8@		H���o$
$
�U���o�
�
Pd�
�
8nB00�x��s�~��p�����*�*
� + +� ��0�0���1�1��4�4 ��: �:��: �:��: �:� ��< �<��p> p>��@ @� ��@ �@� 0�@-
�A`�@lHE�|	�V��e#7.3/lib64/php/modules/clos_ssa.so000075500000067050151734570520012427 0ustar00ELF>@�f@8	@�4�4 �:�: �: �� �<�< �< ��888$$�4�4�4  S�td�4�4�4  P�td�0�0�0��Q�tdR�td�:�: �: 00GNU�=����,�gю~jo��,��$��$		�3,-014689:<>?`�n�� �p�qX��||\��a[�U��BE�지B2)*��F�U�h駿g�`r����� �[k[(�)��e!͚���$� �Kg���4�y��E ���uU"�hP������, :��F"�6�)u�'��P$��@ ��A ��v*+s����@ [@*'!P!�U[)@F��@ ��`$rop*2��*6�@ 
�@ ��@< @__gmon_start___ITM_deregisterTMCloneTable_ITM_registerTMCloneTable__cxa_finalizezif_clos_ssa_test_emalloc_56zm_startup_clos_ssazend_register_ini_entriesclos_ssa_globalsfopensetbuffwrite__errno_locationstrerrorzend_errorstrlen_emallocmemcpyexecutor_globalszend_hash_find_efreezm_info_clos_ssaphp_info_print_table_startphp_info_print_table_colspan_headerphp_info_print_table_rowphp_info_print_table_enddisplay_ini_entries__fprintf_chkssa_process_requestzm_shutdown_clos_ssafclosezm_deactivate_clos_ssagettimeofdayzm_activate_clos_ssassa_xp_get_current_delayszend_is_auto_global_strcore_globalszend_hash_str_findstrdupget_moduleclos_ssa_module_entryOnUpdateBoolzend_ini_boolean_displayer_cbOnUpdateStringssa_functionssocketconnectfdopenssa_agent_dumpssa_xp_get_delays_diff__stack_chk_failfputc__isoc99_fscanfssa_xp_is_throttledssa_xp_print_delays__printf_chkssa_xp_snprint_delays__snprintf_chklibc.so.6_edata__bss_startclos_ssa.soGLIBC_2.14GLIBC_2.4GLIBC_2.7GLIBC_2.2.5GLIBC_2.3.4�����ii
�ii
�ui	�ti		�: ��: p�: �: ; �,(; �,@; �,h; �,�; �,�; �,�; �,@< �,P< �- @ �,X@ �,p@ �x@ `�@ ��@ �,; 
H; 
�; 
; 9X; 9�; 9�; 9�? 9h@ 90; p; �; �; H< 7�? �? �? �? >�? $�? %�? )(@ ?0@ 38@ 1@@ 6H@ =P@ 8�> �> �> -�> :�> �> �> �> �> 	�> �> �> 
�> �> �> ? ,? ? ?  ? (? 0? 8? @? H? P? X? `? 2h? p?  x? !�? "�? #�? &�? '�? (�? )�? *�? +��H��H��) H��t��H����5b( �%c( ��h�������h��������h�������h�������h�������h�������h�������h��q������h��a������h	��Q������h
��A������h��1������h��!������h
��������h��������h������h�������h��������h�������h�������h�������h�������h�������h��q������h��a������h��Q������h��A������h��1������h��!������h��������h��������h������h �������h!��������h"�������h#�������h$�������h%�������h&��������%�% D���%�% D���%�% D���%�% D���%�% D���%�% D���%�% D���%�% D���%�% D���%�% D���%�% D���%�% D���%�% D���%�% D���%}% D���%u% D���%m% D���%e% D���%]% D���%U% D���%M% D���%E% D���%=% D���%5% D���%-% D���%%% D���%% D���%% D���%
% D���%% D���%�$ D���%�$ D���%�$ D���%�$ D���%�$ D���%�$ D���%�$ D���%�$ D���%�$ DH�=�% H��% H9�tH��$ H��t	�����H�=q% H�5j% H)�H��H��H��?H�H�tH��$ H��t��fD�����=E% u+UH�=r$ H��tH�=N �9����d����% ]������w������1��f�GH�G H�G(H�G0H�GH�G�G�fD��SH����fo�H�H�a extensH�H�@H�@@H�x(�@0ion!�@4H��C[�D��SH��H� H��t
�*���H�C H�{(H��t
����H�C(H�{0H��t
���H�C0�C[���SH�=D ����H�# �{trH�{H��t%H�5"�M���H�CH��tX1�H���J����{tDH�KH��t;��H�=�
�e����{tH�KH��t��H�=�
�@���1�[�����8�p���H�S�H�5�H��1�����@ATI��USH�����H�x H��H������H��L��H��H�H�{H�H�CH�k���H�&" H���D+H����
����KH��tJ���@u�+u���D$H��t����D$H��[]A\�f�����D$H��[]A\�fD1���@t���ff.�@��SH���S���H�5������H��1�H�5������#���H��[�:���f.���SH�D! �{tH�KH��t��H�=�����;��H�C(H�{ H����H����H�sHH�SPL�K8H�C@H��I��L)�I)����{t'H�{H��tH��RH�7V�P1��a���H�� ���H�{ H��t
�Z���H�C H�C(H��u!H�{0H��t
�;���H�C0�C1�[�H��� ���H�C(��fDH��u��f�H��I��@B�{t��V���f.���SH�  �{t`H�KH��tW��H�=q����{t;H�KH��t2��H�=f�j����{tH�{H��t
���H�C1�[�f.���USH��H�� �{t9H�KH��t0��H�=�
����;u�C��u;H��1�[]�@�;t�1�H�{H���H�=������u@�C1�@�k��t�H�KH��t���H�=�
���H��1�[]�f.�H�=�
�t������Cu1�����u�C�f���H�K�H��t���H�=s
�<����C�i�����USH��H� �{taH�KH������H�=a
����;���{tH�KH��t��H�=�
����H��1�[]���;t��C�{��H�{(��H�{ ���{t)H�KH��t �!�H�=��j���f.�1�H�{8�5���H�{X�L���������Q���fD�;�g����C�f��{�C�c���H�KH���V�����H�=p	����;���f.��H�=i	�C�k���H�- �H�5U	H�C H�����H��t
�x�EH����	H�5+	H�C(����H��t
�x��H����H�5	H�C0���H��t
�x���{��H�{H��tH�K H�-z�H��H��HD�1������{tTH�{H��tKH�K(H���H��HD�1�����{t'H�{H��tH�K0H���H��HD�1����H�{(tH�{ �3����C�*���f.�H�8H�����H�C0�4���H�8H�����H�C(���H�8H���t���H�C ���ff.���H�} �@��AUATUSH��H�h dH�%(H�D$x1��{tH�KH��t��H�=H	����H�C H��t:���u�1�� H�����t"��v�'��"��H�����u�f��{�I��1ҾI�l$fo�	�f�$D$fo�	H�E`�EhEf�E E0E@EP���A�Ņ��=�nL�������H�5D���g�I��H���K�����Hǃ�Hǃ�L�����L���H�1���H�t$xdH34%(��H�Ĉ[]A\A]ù/��\���������H�5�H�=���I��H���n����{�H�KH���
�!�H�=��,���r���@H��������ƃ�Hǃ�Hǃ��"���f.��{��H�kH������H���H��1����Bf.��{t*L�cM��t!���H��L��D�H��1���D���X�{t*H�{H��t!H�
�H���1��O��������|���fDH���H�{X���H���H���H���H����/�����{�v���L�cM���i����$�H��L��D�H��1�����C����^�f.�@��ATI��USH�� �C��tvH�KH�����H�=)�c�H�KHL�CPH+K8�CL+C@�)i�@BDń��	H�{H����A��H���1��%���H�K8H�CHH�kPH)�H+k@��i�@B�H��L����{H��H���I��L�K(L��LE�H�H�5?HE�H�C H��HD�M��LD�H�s0ARAPL�MH��WL��RLE�H�w�UP1���H��0�{uW[]A\�f�H�KHL�CPH+K8L+C@x.i�@BB�,�f�H��i�@B��(@BH�K8�7���fDH��I��@B����[L��]�
A\��f.�D��UH�5oSH��H�=gH����H��tIH��H��H�C H��PH�KL�KH��L�C1�H�5L1��
�ZH��Y�������H����[]û������ff.���H�H)H�GH)FH�GH)FH�GH)FH�G H)F �D���H�WH9Vt�@H�G H9F �����f���H��H�O�w H�5�L�O1�L�GH���s�H���ff.���H���r L�~1��rH������r�rL�
���H��(���H��H���a+Enter MINIT_FUNCTION
Exit MINIT_FUNCTION
EnabledSSA SupportEnter PRSHUTDOWN_FUNCTION
Enter MSHUTDOWN_FUNCTION
Exit MSHUTDOWN_FUNCTION
Enter RSHUTDOWN_FUNCTION
wpwpdbIt is wordpress site
Exit RSHUTDOWN_FUNCTION
nullEnter RINIT_FUNCTION
Extracting Request-data
_SERVERREQUEST_URIHTTP_HOSTREQUEST_SCHEMEREQUEST_URI: %s
HTTP_HOST: %s
REQUEST_SCHEME: %s
Exit RINIT_FUNCTION
clos_ssa.enabled1clos_ssa.to_fileclos_ssa.debugclos_ssa.debug_fileclos_ssa1.0API20180731,NTSclos_ssa_testCan't open clos_ssa.debug_file: "%s", %sCloudlinux PHP slow site analyzerRequest executed for %ld.%06ld from %ld.%06ld until %ld.%06ld
Request-data already initialized
It works clos_ssPROCESS REQUEST STARTED
/tmp/ssa_to_agent.logagentFailed to open to_agent.log file
ssa_demon_open: socket(PF_UNIX, SOCK_STREAM, 0) failed: %d
ssa_demon_open: connect(%s) failed: %d
ssa_demon_open: fdopen(socket=%s) failed: %d
Failed to open stream to %s processor
/opt/alt/clos_ssa/run/ssa.socktruefalsehttp?DUMP_AGENT
Request_duration: %ld.%06ld, micro: %u
{ "timestamp": "%ld", "url": "%s://%s%s", "duration": %u, "hitting_limits": %s, "throttled_time": %lu, "io_throttled_time": %lu, "wordpress": %s }ro/proc/lve/task_sched_stat%lu %lu %lu %lu %luDelays: total: %lu ms, sleep (U + S): %lu ms, iowait: %lu ms, throttle(CPU): %lu ms, throttle(IO): %lu ms
;�`������P���8�T��t��������� ��X����0������(`���`����t���������zRx�$���FJw�?:*3$"D��p\�:p,�[E�U�p�PE�J����E��
A@�D��B�D�A �D0�
 AABCM
 AABG��FE�|,(�&E��A H(F0KA
DX�vE�p4th�
E�A�D }
CAEQ
CAK(�@��E�A�D b
CAH��<��rF�B�A �A(�G�x
(A ABBAL,P�F�D�A ��(B0K8D@QHAPK G
ABCQDG4|����uE�H�N N(K0`(D Q
CAA�����+����'�0���2HG b �T���6HCL J(C0QGNU��p�: �,�,�,�,�,�,�,�,�-���
�*�: �: ���o`	
p> �H8	���o���o�
���o�o.
���o�<  0@P`p�������� 0@P`p�������� 0@P`p����3�,�,��`��,GCC: (GNU) 8.5.0 20210514 (Red Hat 8.5.0-28)GA$3a1��*GA$3p1113��)GA*GA$annobin gcc 8.5.0 20210514GA$plugin name: gcc-annobinGA$running gcc 8.5.0 20210514GA*GA*GA!
GA*FORTIFYGA+GLIBCXX_ASSERTIONSGA*GOW*�GA*cf_protectionGA+omit_frame_pointerGA+stack_clashGA!stack_realignGA$3p1113`$�*GA*GA$annobin gcc 8.5.0 20210514GA$plugin name: gcc-annobinGA$running gcc 8.5.0 20210514GA*GA*GA!
GA*FORTIFYGA+GLIBCXX_ASSERTIONSGA*GOW*�GA*cf_protectionGA+omit_frame_pointerGA+stack_clashGA!stack_realign
GA*FORTIFY�*GA+GLIBCXX_ASSERTIONS�\$#6Me�������-�:F�g[�[���`P��l�
; @1lM1gp�t1��������&�:6 \6 �M!�M!�E$�E$\$�-4`$J�'d~����9X`${�'��'��)���":Vk��'��)��)��*�;\x����)�**D;*h;*�g*�g*��*��*	�*8	:	0M	pc	�@ r	�: �	��	�: �	x4�	
�*�	�: �	�< �	�0
�@ 
p> #
	�8`	.
�
H	�
�
�*+�0`1�4�: �: �: �< p> @ �@ �A`)
G
�v\
x
�
�'��
`$r�
�
 �
(�@ /CPd����0��)u�@F@< @" 1J]qp*2��A �P$���*6���@ �

+
@ �A
Y
@ 
p
�
�@ ��
*+�
�
@*'�
P!��
�
�
,= Wr��"������[.annobin_ssa.c.annobin_ssa.c_end.annobin_ssa.c.hot.annobin_ssa.c_end.hot.annobin_ssa.c.unlikely.annobin_ssa.c_end.unlikely.annobin_ssa.c.startup.annobin_ssa.c_end.startup.annobin_ssa.c.exit.annobin_ssa.c_end.exit.annobin_zm_globals_ctor_clos_ssa.start.annobin_zm_globals_ctor_clos_ssa.endzm_globals_ctor_clos_ssa.annobin_zif_clos_ssa_test.start.annobin_zif_clos_ssa_test.end.annobin_zm_globals_dtor_clos_ssa.start.annobin_zm_globals_dtor_clos_ssa.endzm_globals_dtor_clos_ssa.annobin_zm_startup_clos_ssa.start.annobin_zm_startup_clos_ssa.end.annobin_class_exists.start.annobin_class_exists.endclass_exists.annobin_zm_info_clos_ssa.start.annobin_zm_info_clos_ssa.end.annobin_php_ssa_post_deactivate.start.annobin_php_ssa_post_deactivate.endphp_ssa_post_deactivate.annobin_zm_shutdown_clos_ssa.start.annobin_zm_shutdown_clos_ssa.end.annobin_zm_deactivate_clos_ssa.start.annobin_zm_deactivate_clos_ssa.end.annobin_zm_activate_clos_ssa.start.annobin_zm_activate_clos_ssa.end.annobin_get_module.start.annobin_get_module.endarginfo_clos_ssa_test.annobin_processors.c.annobin_processors.c_end.annobin_processors.c.hot.annobin_processors.c_end.hot.annobin_processors.c.unlikely.annobin_processors.c_end.unlikely.annobin_processors.c.startup.annobin_processors.c_end.startup.annobin_processors.c.exit.annobin_processors.c_end.exit.annobin_ssa_process_request.start.annobin_ssa_process_request.end.annobin_dump.c.annobin_dump.c_end.annobin_dump.c.hot.annobin_dump.c_end.hot.annobin_dump.c.unlikely.annobin_dump.c_end.unlikely.annobin_dump.c.startup.annobin_dump.c_end.startup.annobin_dump.c.exit.annobin_dump.c_end.exit.annobin_ssa_agent_dump.start.annobin_ssa_agent_dump.end.annobin_ssa_perf.c.annobin_ssa_perf.c_end.annobin_ssa_perf.c.hot.annobin_ssa_perf.c_end.hot.annobin_ssa_perf.c.unlikely.annobin_ssa_perf.c_end.unlikely.annobin_ssa_perf.c.startup.annobin_ssa_perf.c_end.startup.annobin_ssa_perf.c.exit.annobin_ssa_perf.c_end.exit.annobin_ssa_xp_get_current_delays.start.annobin_ssa_xp_get_current_delays.end.annobin_ssa_xp_get_delays_diff.start.annobin_ssa_xp_get_delays_diff.end.annobin_ssa_xp_is_throttled.start.annobin_ssa_xp_is_throttled.end.annobin_ssa_xp_print_delays.start.annobin_ssa_xp_print_delays.end.annobin_ssa_xp_snprint_delays.start.annobin_ssa_xp_snprint_delays.endderegister_tm_clones__do_global_dtors_auxcompleted.7303__do_global_dtors_aux_fini_array_entryframe_dummy__frame_dummy_init_array_entry__FRAME_END___fini__dso_handle_DYNAMIC__GNU_EH_FRAME_HDR__TMC_END___GLOBAL_OFFSET_TABLE__initzend_ini_boolean_displayer_cbzm_shutdown_clos_ssa__snprintf_chk@@GLIBC_2.3.4free@@GLIBC_2.2.5ssa_agent_dumpssa_process_request__errno_location@@GLIBC_2.2.5_ITM_deregisterTMCloneTablezend_register_ini_entries__isoc99_fscanf@@GLIBC_2.7_emalloc_56_edatafclose@@GLIBC_2.2.5OnUpdateBoolstrlen@@GLIBC_2.2.5__stack_chk_fail@@GLIBC_2.4setbuf@@GLIBC_2.2.5php_info_print_table_rowgettimeofday@@GLIBC_2.2.5OnUpdateStringssa_xp_get_current_delaysfputc@@GLIBC_2.2.5zm_info_clos_ssassa_functions__gmon_start__php_info_print_table_endmemcpy@@GLIBC_2.14display_ini_entriesssa_xp_print_delayszend_hash_str_findget_modulephp_info_print_table_colspan_headerssa_xp_snprint_delaysfdopen@@GLIBC_2.2.5__bss_start_efree__printf_chk@@GLIBC_2.3.4core_globalsclos_ssa_module_entryzend_is_auto_global_strzm_deactivate_clos_ssafopen@@GLIBC_2.2.5clos_ssa_globalsssa_xp_get_delays_diffzend_errorssa_xp_is_throttledzm_activate_clos_ssa_emallocconnect@@GLIBC_2.2.5fwrite@@GLIBC_2.2.5__fprintf_chk@@GLIBC_2.3.4executor_globals_ITM_registerTMCloneTablephp_info_print_table_startstrdup@@GLIBC_2.2.5strerror@@GLIBC_2.2.5__cxa_finalize@@GLIBC_2.2.5zm_startup_clos_ssazend_hash_findsocket@@GLIBC_2.2.5zif_clos_ssa_test.symtab.strtab.shstrtab.note.gnu.build-id.gnu.hash.dynsym.dynstr.gnu.version.gnu.version_r.rela.dyn.rela.plt.init.plt.sec.text.fini.rodata.eh_frame_hdr.eh_frame.note.gnu.property.init_array.fini_array.data.rel.ro.dynamic.got.data.bss.comment.gnu.build.attributes88$.���o``�8@		H���o.
.
�U���o�
�
`d8nBHH�x��s�~��p����*�*
�++���0�0��`1`1��4�4 ��: �:��: �:��: �:� ��< �<��p> p>��@ @� ��@ �@� 0�@-
�A`�@�D�|	�V�e#8.2/lib64/php/modules/clos_ssa.so000075500000067160151734570520012431 0ustar00ELF>�@�f@8	@�4�4 �:�: �: �� �<�< �< ��888$$�4�4�4  S�td�4�4�4  P�td�0�0�0��Q�tdR�td�:�: �: 00GNU_d��Ĉ�[щ��֌�:
�r,��$��$		�3,-014689:<>?`�n�� �p�qX��||\��a[�U��BE�지B2)*��F�U�h駿g�`r����� �[k[(�)��e!͚���'� g����>�|�U�O ����xX%�kS���	��, =�F"9�)u�'��@$��@ ��A ��v' *+s����@ \P*'$@!�U@[,�F��@ ��P$rp�*2��*60 	�@ ��@< @__gmon_start___ITM_deregisterTMCloneTable_ITM_registerTMCloneTable__cxa_finalizezif_clos_ssa_test_emalloc_56zm_startup_clos_ssazend_register_ini_entries_exclos_ssa_globalsfopensetbuffwrite__errno_locationstrerrorzend_errorstrlen_emallocmemcpyexecutor_globalszend_hash_find_efreezm_info_clos_ssaphp_info_print_table_startphp_info_print_table_colspan_headerphp_info_print_table_rowphp_info_print_table_enddisplay_ini_entries__fprintf_chkssa_process_requestzm_shutdown_clos_ssafclosezm_deactivate_clos_ssagettimeofdayzm_activate_clos_ssassa_xp_get_current_delayszend_is_auto_global_strcore_globalszend_hash_str_find__zend_strdupget_moduleclos_ssa_module_entryOnUpdateBoolzend_ini_boolean_displayer_cbOnUpdateStringssa_functionssocketconnectfdopenssa_agent_dumpssa_xp_get_delays_diff__stack_chk_failfputcfscanfssa_xp_is_throttledssa_xp_print_delays__printf_chkssa_xp_snprint_delays__snprintf_chklibc.so.6_edata__bss_startclos_ssa.soGLIBC_2.14GLIBC_2.4GLIBC_2.2.5GLIBC_2.3.4�����ii
�ui	�ti	�: ��: ��: �: ; �,(; �,@; �,h; �,�; �,�; �,�; �,@< -P< �- @ �,X@ �,p@ x@ ��@ ��@ �,; 	H; 	�; 	; 9X; 9�; 9�; 9�? 9h@ 90; p; �; �; H< 7�? �? �? �? >�? %�? &�? )(@ ?0@ 38@ 1@@ 6H@ =P@ 8�> �> �> -�> :�> �> �> �> �> 
�> �> �> 
�> �> �> ? ,? ? ?  ? (? 0? 8? @? H? P? X? `? h? 2p?  x? !�? "�? #�? $�? '�? (�? )�? *�? +��H��H��) H��t��H����5r( �%s( ��h�������h��������h�������h�������h�������h�������h�������h��q������h��a������h	��Q������h
��A������h��1������h��!������h
��������h��������h������h�������h��������h�������h�������h�������h�������h�������h��q������h��a������h��Q������h��A������h��1������h��!������h��������h��������h������h �������h!��������h"�������h#�������h$�������h%�������h&��������%�% D���%�% D���%�% D���%�% D���%�% D���%�% D���%�% D���%�% D���%�% D���%�% D���%�% D���%�% D���%�% D���%�% D���%�% D���%�% D���%}% D���%u% D���%m% D���%e% D���%]% D���%U% D���%M% D���%E% D���%=% D���%5% D���%-% D���%%% D���%% D���%% D���%
% D���%% D���%�$ D���%�$ D���%�$ D���%�$ D���%�$ D���%�$ D���%�$ D��SH�����H�5L������H�41�H�53�����s���H��[���f.�H�=a% H�Z% H9�tH�f$ H��t	�����H�=1% H�5*% H)�H��H��H��?H�H�tH�U$ H��t��fD�����=% u+UH�=2$ H��tH�= ����d�����$ ]������w������1��f�GH�G H�G(H�G0H�GH�G�G�fD��SH�����fo�H�H�a extensH�H�@H�@@H�x(�@0ion!�@4H��C[�D��SH��H� H��t
����H�C H�{(H��t
����H�C(H�{0H��t
���H�C0�C[���S��H�= ���H��" �{trH�{H��t%H�5����H�CH��tX1�H������{tDH�KH��t;��H�=�
�#����{tH�KH��t��H�=�
���1�[��5����8����H�S�H�5~H��1�����f�ATI��USH���@���H�x H��H�����H��L��H��H�H�{H�H�CH�k���H��! H���D+H�������KH��tJ���@u�+u���D$H��t�O����D$H��[]A\�f�����D$H��[]A\�fD1���@t���ff.�@��SH�T! �{tH�KH��t��H�=������;��H�C(H�{ H����H����H�sHH�SPL�K8H�C@H��I��L)�I)����{t'H�{H��tH��RH�gV�P1��q���H�� 1����H�{ H��t
�X���H�C H�C(H��u'H�{0H��t
�9���H�C0�C1�[�f�H������H�C(��fDH��u�뺐H��I��@B�{t��V���f.���SH�$  �{t`H�KH��tW��H�=�����{t;H�KH��t2��H�=��z����{tH�{H��t
����H�C1�[�f.���USH��H�� �{t9H�KH��t0��H�=O�����;u�C��u;H��1�[]�@�;t�1�H�{H���H�=3������u@�C1�@�k��t�H�KH��t���H�= ���H��1�[]�f.�H�=�
������t��k@��u�C�q���fDH�KH��t��H�=�
�Y����C�v����C�u������USH��H�� �{taH�KH������H�=�
�����;���{tH�KH��t��H�=�
����H��1�[]���;t��C�{��H�{(��H�{ ���{t)H�KH��t �!�H�=��z���f.�1�H�{8�%���H�{X�L���������Q���fD�;�g����C�f��{�C�c���H�KH���V�����H�=�	����;���f.��H�=�	�C�{���H�-$ �H�5�	H�C H�������H��t
�x�EH����	H�5[	H�C(����H��t
�x��H����H�56	H�C0���H��t
�x���{��H�{H��tH�K H�-��H��H��HD�1������{tTH�{H��tKH�K(H���H��HD�1����{t'H�{H��tH�K0H���H��HD�1�����H�{(tH�{ �3����C�*���f.�H�8H�����H�C0�4���H�8H�����H�C(���H�8H�����H�C ���ff.���H�� �@��AUATUSH��H�x dH�%(H�D$x1��{tH�KH��t��H�=x	���H�C H��t:���u�1�� H�����t"��v�'��"��H�����u�f��{�I��1ҾI�l$fo*
�f�$D$fo$
H�E`�EhEf�E E0E@EP���A�Ņ��=�nL����������H�5�D���w�I��H���K�����Hǃ�Hǃ�L�����L���(�1���H�t$xdH34%(��H�Ĉ[]A\A]ù/��\���������H�5�H�=#�%�I��H���n����{�H�KH���
�!�H�=	�<���r���@H��������ƃ�Hǃ�Hǃ��"���f.��{��H�kH������H���H��1�����Bf.��{t*L�cM��t!���H��L��D�H��1���D���X�{t*H�{H��t!H�
!H���1��_��������|���fDH���H�{X���H���H���H���H����/�����{�v���L�cM���i����$�H��L��D�H��1�����C����N�f.�@��ATI��USH�� �{txH�KH�����H�=[�u�H�KHL�CPH+K8�CL+C@�Ci�@BDń��H�{H����A��H�#�1��7���f�H�K8H�CHH�kPH)�H+k@��i�@B�H��L����{H��H���I��L�K(L��LE�H�H�5oHE�H�C H��HD�M��LD�H�s0ARAPL�}H��WL��RLE�H���UP1���H��0�{uG[]A\�f�H�KHL�CPH+K8L+C@x^i�@BB�,�f�H��i�@B��(@BH�K8�7���fD[L��]�
A\���H��I��@B����H��I��@Bi�@BD�������UH�5SH��H�=wH���p�H��tIH��H��H�C H��PH�KL�KH��L�C1�H�5\1��]�ZH��Y��������H����[]û������ff.���H�H)H�GH)FH�GH)FH�GH)FH�G H)F �D���H�WH9Vt�@H�G H9F �����f���H��H�O�w H�5�L�O1�L�GH���c�H���ff.���H���r L��1��rH������r�rL�
���H��(���H��H���a+Enter MINIT_FUNCTION
Exit MINIT_FUNCTION
EnabledSSA SupportEnter PRSHUTDOWN_FUNCTION
Enter MSHUTDOWN_FUNCTION
Exit MSHUTDOWN_FUNCTION
Enter RSHUTDOWN_FUNCTION
wpwpdbIt is wordpress site
Exit RSHUTDOWN_FUNCTION
nullEnter RINIT_FUNCTION
Extracting Request-data
_SERVERREQUEST_URIHTTP_HOSTREQUEST_SCHEMEREQUEST_URI: %s
HTTP_HOST: %s
REQUEST_SCHEME: %s
Exit RINIT_FUNCTION
clos_ssa.enabled1clos_ssa.to_fileclos_ssa.debugclos_ssa.debug_fileclos_ssa1.0API20220829,NTSclos_ssa_testCan't open clos_ssa.debug_file: "%s", %sCloudlinux PHP slow site analyzerRequest executed for %ld.%06ld from %ld.%06ld until %ld.%06ld
Request-data already initialized
It works clos_ssPROCESS REQUEST STARTED
/tmp/ssa_to_agent.logagentFailed to open to_agent.log file
ssa_demon_open: socket(PF_UNIX, SOCK_STREAM, 0) failed: %d
ssa_demon_open: connect(%s) failed: %d
ssa_demon_open: fdopen(socket=%s) failed: %d
Failed to open stream to %s processor
/opt/alt/clos_ssa/run/ssa.socktruefalsehttp?DUMP_AGENT
Request_duration: %ld.%06ld, micro: %u
{ "timestamp": "%ld", "url": "%s://%s%s", "duration": %u, "hitting_limits": %s, "throttled_time": %lu, "io_throttled_time": %lu, "wordpress": %s }ro/proc/lve/task_sched_stat%lu %lu %lu %lu %luDelays: total: %lu ms, sleep (U + S): %lu ms, iowait: %lu ms, throttle(CPU): %lu ms, throttle(IO): %lu ms
;�0����� ��0�p���8 �T��t�����`� p�Xp����������(P���`����t�������zRx�$`��FJw�?:*3$"D��p\ �:pL�[E�U���PE�J����E��
A@�d��B�D�A �D0�
 AABCM
 AABG`�FE�|,(��&E��A H(F0KC
JX��vE�p4t8�	E�A�D }
CAEQ
CAK(���E�A�D b
CAH���<���rF�B�A �A(�G�x
(A ABBAL, ��F�D�A ��(B0K8D@QHAPK G
ABCA
DGL4|����uE�H�N N(K0`(D Q
CAA���+����'� ���2HG b �D���6HCL J(C0QGNU����: �,�,�,�,�,�,�,-�-���
�*�: �: ���o`	
p> �0�
8	���o���o�
���o�o$
���o�<  0@P`p�������� 0@P`p�������� 0@P`p���4�,�,����,GCC: (GNU) 8.5.0 20210514 (Red Hat 8.5.0-28)GA$3a1�+GA$3p1113��)GA*GA$annobin gcc 8.5.0 20210514GA$plugin name: gcc-annobinGA$running gcc 8.5.0 20210514GA*GA*GA!
GA*FORTIFYGA+GLIBCXX_ASSERTIONSGA*GOW*�GA*cf_protectionGA+omit_frame_pointerGA+stack_clashGA!stack_realignGA$3p1113P$�*GA*GA$annobin gcc 8.5.0 20210514GA$plugin name: gcc-annobinGA$running gcc 8.5.0 20210514GA*GA*GA!
GA*FORTIFYGA+GLIBCXX_ASSERTIONSGA*GOW*�GA*cf_protectionGA+omit_frame_pointerGA+stack_clashGA!stack_realign
GA*FORTIFY�)GA+GLIBCXX_ASSERTIONS
GA*FORTIFY�)�*GA+GLIBCXX_ASSERTIONSL$#666M�e6�6�6�6�6�:-:F:g�������P���o; @1�Mqg��t��6�q����&�:& \& �9!�9!�5$�5$L$�- 4P$J�'d6~6�6�6�6�6696XP${�'��'��)�6�6�66"6:6V6k6��'��)��)��*�666;6\6x6�6�6��)�**DK*hK*�w*�w*��*��*	�*8	@:	pM	�c	�@ r	�: �	��	�: �	�4�	
�*�	�: �	�< �	�0
�@ 
p> #
	�8`	$
�
�
0	�
��
�* +�0�1�4�: �: �: �< p> @ �@ �A`)
G
�v\
x
�
�'��
P$r�
�
 �
�
�@ �
)=Ym����
��)u���F@< @ ;Tg{�*2��A �@$���*6���@ 

(
5
@ �K
c
0 	z
�
�@ ��
 *+�
�
P*'�
@!��
�
6G a|�"������@[.annobin_ssa.c.annobin_ssa.c_end.annobin_ssa.c.hot.annobin_ssa.c_end.hot.annobin_ssa.c.unlikely.annobin_ssa.c_end.unlikely.annobin_ssa.c.startup.annobin_ssa.c_end.startup.annobin_ssa.c.exit.annobin_ssa.c_end.exit.annobin_zm_globals_ctor_clos_ssa.start.annobin_zm_globals_ctor_clos_ssa.endzm_globals_ctor_clos_ssa.annobin_zif_clos_ssa_test.start.annobin_zif_clos_ssa_test.end.annobin_zm_globals_dtor_clos_ssa.start.annobin_zm_globals_dtor_clos_ssa.endzm_globals_dtor_clos_ssa.annobin_zm_startup_clos_ssa.start.annobin_zm_startup_clos_ssa.end.annobin_class_exists.start.annobin_class_exists.endclass_exists.annobin_zm_info_clos_ssa.start.annobin_zm_info_clos_ssa.end.annobin_php_ssa_post_deactivate.start.annobin_php_ssa_post_deactivate.endphp_ssa_post_deactivate.annobin_zm_shutdown_clos_ssa.start.annobin_zm_shutdown_clos_ssa.end.annobin_zm_deactivate_clos_ssa.start.annobin_zm_deactivate_clos_ssa.end.annobin_zm_activate_clos_ssa.start.annobin_zm_activate_clos_ssa.end.annobin_get_module.start.annobin_get_module.endarginfo_clos_ssa_test.annobin_processors.c.annobin_processors.c_end.annobin_processors.c.hot.annobin_processors.c_end.hot.annobin_processors.c.unlikely.annobin_processors.c_end.unlikely.annobin_processors.c.startup.annobin_processors.c_end.startup.annobin_processors.c.exit.annobin_processors.c_end.exit.annobin_ssa_process_request.start.annobin_ssa_process_request.end.annobin_dump.c.annobin_dump.c_end.annobin_dump.c.hot.annobin_dump.c_end.hot.annobin_dump.c.unlikely.annobin_dump.c_end.unlikely.annobin_dump.c.startup.annobin_dump.c_end.startup.annobin_dump.c.exit.annobin_dump.c_end.exit.annobin_ssa_agent_dump.start.annobin_ssa_agent_dump.end.annobin_ssa_perf.c.annobin_ssa_perf.c_end.annobin_ssa_perf.c.hot.annobin_ssa_perf.c_end.hot.annobin_ssa_perf.c.unlikely.annobin_ssa_perf.c_end.unlikely.annobin_ssa_perf.c.startup.annobin_ssa_perf.c_end.startup.annobin_ssa_perf.c.exit.annobin_ssa_perf.c_end.exit.annobin_ssa_xp_get_current_delays.start.annobin_ssa_xp_get_current_delays.end.annobin_ssa_xp_get_delays_diff.start.annobin_ssa_xp_get_delays_diff.end.annobin_ssa_xp_is_throttled.start.annobin_ssa_xp_is_throttled.end.annobin_ssa_xp_print_delays.start.annobin_ssa_xp_print_delays.end.annobin_ssa_xp_snprint_delays.start.annobin_ssa_xp_snprint_delays.endderegister_tm_clones__do_global_dtors_auxcompleted.7303__do_global_dtors_aux_fini_array_entryframe_dummy__frame_dummy_init_array_entry__FRAME_END___fini__dso_handle_DYNAMIC__GNU_EH_FRAME_HDR__TMC_END___GLOBAL_OFFSET_TABLE__initzend_ini_boolean_displayer_cbzm_shutdown_clos_ssa__snprintf_chk@@GLIBC_2.3.4free@@GLIBC_2.2.5ssa_agent_dumpssa_process_request__errno_location@@GLIBC_2.2.5_ITM_deregisterTMCloneTable_emalloc_56_edatafclose@@GLIBC_2.2.5__zend_strdupOnUpdateBoolstrlen@@GLIBC_2.2.5__stack_chk_fail@@GLIBC_2.4setbuf@@GLIBC_2.2.5php_info_print_table_rowgettimeofday@@GLIBC_2.2.5OnUpdateStringfscanf@@GLIBC_2.2.5ssa_xp_get_current_delaysfputc@@GLIBC_2.2.5zm_info_clos_ssassa_functions__gmon_start__zend_register_ini_entries_exphp_info_print_table_endmemcpy@@GLIBC_2.14display_ini_entriesssa_xp_print_delayszend_hash_str_findget_modulephp_info_print_table_colspan_headerssa_xp_snprint_delaysfdopen@@GLIBC_2.2.5__bss_start_efree__printf_chk@@GLIBC_2.3.4core_globalsclos_ssa_module_entryzend_is_auto_global_strzm_deactivate_clos_ssafopen@@GLIBC_2.2.5clos_ssa_globalsssa_xp_get_delays_diffzend_errorssa_xp_is_throttledzm_activate_clos_ssa_emallocconnect@@GLIBC_2.2.5fwrite@@GLIBC_2.2.5__fprintf_chk@@GLIBC_2.3.4executor_globals_ITM_registerTMCloneTablephp_info_print_table_startstrerror@@GLIBC_2.2.5__cxa_finalize@@GLIBC_2.2.5zm_startup_clos_ssazend_hash_findsocket@@GLIBC_2.2.5zif_clos_ssa_test.symtab.strtab.shstrtab.note.gnu.build-id.gnu.hash.dynsym.dynstr.gnu.version.gnu.version_r.rela.dyn.rela.plt.init.plt.sec.text.fini.rodata.eh_frame_hdr.eh_frame.note.gnu.property.init_array.fini_array.data.rel.ro.dynamic.got.data.bss.comment.gnu.build.attributes88$.���o``�8@		H���o$
$
�U���o�
�
Pd�
�
8nB00�x��s�~��p�����*�*
� + +� ��0�0���1�1��4�4 ��: �:��: �:��: �:� ��< �<��p> p>��@ @� ��@ �@� 0�@-
�A`�@lHE�|	�V��e#7.2/lib64/php/modules/clos_ssa.so000075500000067050151734570520012426 0ustar00ELF>@�f@8	@�4�4 �:�: �:  �<�< �< ��888$$�4�4�4  S�td�4�4�4  P�td�0�0�0��Q�tdR�td�:�: �: ppGNU�]��8����a�QI��,��$��$		�3,-014689:<>?`�n�� �p�qX��||\��a[�U��BE�지B2)*��F�U�h駿g�`r����� �[k[(�)��e!͚���$� �Kg���4�y��E ���uU"�hP������, :��F"�6�)u�'��P$��@ ��A ��v*+s����@ [@*'!P!�U[)@F��@ ��`$rop*2��*6�@ 
�@ ��@< @__gmon_start___ITM_deregisterTMCloneTable_ITM_registerTMCloneTable__cxa_finalizezif_clos_ssa_test_emalloc_56zm_startup_clos_ssazend_register_ini_entriesclos_ssa_globalsfopensetbuffwrite__errno_locationstrerrorzend_errorstrlen_emallocmemcpyexecutor_globalszend_hash_find_efreezm_info_clos_ssaphp_info_print_table_startphp_info_print_table_colspan_headerphp_info_print_table_rowphp_info_print_table_enddisplay_ini_entries__fprintf_chkssa_process_requestzm_shutdown_clos_ssafclosezm_deactivate_clos_ssagettimeofdayzm_activate_clos_ssassa_xp_get_current_delayszend_is_auto_global_strcore_globalszend_hash_str_findstrdupget_moduleclos_ssa_module_entryOnUpdateBoolzend_ini_boolean_displayer_cbOnUpdateStringssa_functionssocketconnectfdopenssa_agent_dumpssa_xp_get_delays_diff__stack_chk_failfputc__isoc99_fscanfssa_xp_is_throttledssa_xp_print_delays__printf_chkssa_xp_snprint_delays__snprintf_chklibc.so.6_edata__bss_startclos_ssa.soGLIBC_2.14GLIBC_2.4GLIBC_2.7GLIBC_2.2.5GLIBC_2.3.4�����ii
�ii
�ui	�ti		�: ��: p�: �: �: �,�: �,; �,0; �,P; �,x; �,�; �,@< �,P< �- @ �,X@ �,p@ �x@ `�@ ��@ �,�: 
; 
X; 
�: 9 ; 9h; 9�; 9�? 9h@ 9�: 8; �; �; H< 7�? �? �? �? >�? $�? %�? )(@ ?0@ 38@ 1@@ 6H@ =P@ 8�> �> �> -�> :�> �> �> �> �> 	�> �> �> 
�> �> �> ? ,? ? ?  ? (? 0? 8? @? H? P? X? `? 2h? p?  x? !�? "�? #�? &�? '�? (�? )�? *�? +��H��H��) H��t��H����5b( �%c( ��h�������h��������h�������h�������h�������h�������h�������h��q������h��a������h	��Q������h
��A������h��1������h��!������h
��������h��������h������h�������h��������h�������h�������h�������h�������h�������h��q������h��a������h��Q������h��A������h��1������h��!������h��������h��������h������h �������h!��������h"�������h#�������h$�������h%�������h&��������%�% D���%�% D���%�% D���%�% D���%�% D���%�% D���%�% D���%�% D���%�% D���%�% D���%�% D���%�% D���%�% D���%�% D���%}% D���%u% D���%m% D���%e% D���%]% D���%U% D���%M% D���%E% D���%=% D���%5% D���%-% D���%%% D���%% D���%% D���%
% D���%% D���%�$ D���%�$ D���%�$ D���%�$ D���%�$ D���%�$ D���%�$ D���%�$ D���%�$ DH�=�% H��% H9�tH��$ H��t	�����H�=q% H�5j% H)�H��H��H��?H�H�tH��$ H��t��fD�����=E% u+UH�=r$ H��tH�= �9����d����% ]������w������1��f�GH�G H�G(H�G0H�GH�G�G�fD��SH����fo�H�H�a extensH�H�@H�@@H�x(�@0ion!�@4H��C[�D��SH��H� H��t
�*���H�C H�{(H��t
����H�C(H�{0H��t
���H�C0�C[���SH�= ����H�# �{trH�{H��t%H�5"�M���H�CH��tX1�H���J����{tDH�KH��t;��H�=�
�e����{tH�KH��t��H�=�
�@���1�[�����8�p���H�S�H�5�H��1�����@ATI��USH�����H�x H��H������H��L��H��H�H�{H�H�CH�k���H�&" H���D+H����
����KH��tI���u�+u���D$H��t����D$H��[]A\�@����D$H��[]A\�fD1���t���ff.�@��SH���S���H�5������H��1�H�5������#���H��[�:���f.���SH�D! �{tH�KH��t��H�=�����;��H�C(H�{ H����H����H�sHH�SPL�K8H�C@H��I��L)�I)����{t'H�{H��tH��RH�7V�P1��a���H�� ���H�{ H��t
�Z���H�C H�C(H��u!H�{0H��t
�;���H�C0�C1�[�H��� ���H�C(��fDH��u��f�H��I��@B�{t��V���f.���SH�  �{t`H�KH��tW��H�=q����{t;H�KH��t2��H�=f�j����{tH�{H��t
���H�C1�[�f.���USH��H�� �{t9H�KH��t0��H�=�
����;u�C��u;H��1�[]�@�;t�1�H�{H���H�=������u@�C1�@�k��t�H�KH��t���H�=�
���H��1�[]�f.�H�=�
�t������Cu1�����u�C�f���H�K�H��t���H�=s
�<����C�i�����USH��H� �{taH�KH������H�=a
����;���{tH�KH��t��H�=�
����H��1�[]���;t��C�{��H�{(��H�{ ���{t)H�KH��t �!�H�=��j���f.�1�H�{8�5���H�{X�L���������Q���fD�;�g����C�f��{�C�c���H�KH���V�����H�=p	����;���f.��H�=i	�C�k���H�- �H�5U	H�C H�����H��t
�x�EH����	H�5+	H�C(����H��t
�x��H����H�5	H�C0���H��t
�x���{��H�{H��tH�K H�-z�H��H��HD�1������{tTH�{H��tKH�K(H���H��HD�1�����{t'H�{H��tH�K0H���H��HD�1����H�{(tH�{ �3����C�*���f.�H�8H�����H�C0�4���H�8H�����H�C(���H�8H���t���H�C ���ff.���H�} �@��AUATUSH��H�h dH�%(H�D$x1��{tH�KH��t��H�=H	����H�C H��t:���u�1�� H�����t"��v�'��"��H�����u�f��{�I��1ҾI�l$fo�	�f�$D$fo�	H�E`�EhEf�E E0E@EP���A�Ņ��=�nL�������H�5D���g�I��H���K�����Hǃ�Hǃ�L�����L���H�1���H�t$xdH34%(��H�Ĉ[]A\A]ù/��\���������H�5�H�=���I��H���n����{�H�KH���
�!�H�=��,���r���@H��������ƃ�Hǃ�Hǃ��"���f.��{��H�kH������H���H��1����Bf.��{t*L�cM��t!���H��L��D�H��1���D���X�{t*H�{H��t!H�
�H���1��O��������|���fDH���H�{X���H���H���H���H����/�����{�v���L�cM���i����$�H��L��D�H��1�����C����^�f.�@��ATI��USH�� �C��tvH�KH�����H�=)�c�H�KHL�CPH+K8�CL+C@�)i�@BDń��	H�{H����A��H���1��%���H�K8H�CHH�kPH)�H+k@��i�@B�H��L����{H��H���I��L�K(L��LE�H�H�5?HE�H�C H��HD�M��LD�H�s0ARAPL�MH��WL��RLE�H�w�UP1���H��0�{uW[]A\�f�H�KHL�CPH+K8L+C@x.i�@BB�,�f�H��i�@B��(@BH�K8�7���fDH��I��@B����[L��]�
A\��f.�D��UH�5oSH��H�=gH����H��tIH��H��H�C H��PH�KL�KH��L�C1�H�5L1��
�ZH��Y�������H����[]û������ff.���H�H)H�GH)FH�GH)FH�GH)FH�G H)F �D���H�WH9Vt�@H�G H9F �����f���H��H�O�w H�5�L�O1�L�GH���s�H���ff.���H���r L�~1��rH������r�rL�
���H��(���H��H���a+Enter MINIT_FUNCTION
Exit MINIT_FUNCTION
EnabledSSA SupportEnter PRSHUTDOWN_FUNCTION
Enter MSHUTDOWN_FUNCTION
Exit MSHUTDOWN_FUNCTION
Enter RSHUTDOWN_FUNCTION
wpwpdbIt is wordpress site
Exit RSHUTDOWN_FUNCTION
nullEnter RINIT_FUNCTION
Extracting Request-data
_SERVERREQUEST_URIHTTP_HOSTREQUEST_SCHEMEREQUEST_URI: %s
HTTP_HOST: %s
REQUEST_SCHEME: %s
Exit RINIT_FUNCTION
clos_ssa.enabled1clos_ssa.to_fileclos_ssa.debugclos_ssa.debug_fileclos_ssa1.0API20170718,NTSclos_ssa_testCan't open clos_ssa.debug_file: "%s", %sCloudlinux PHP slow site analyzerRequest executed for %ld.%06ld from %ld.%06ld until %ld.%06ld
Request-data already initialized
It works clos_ssPROCESS REQUEST STARTED
/tmp/ssa_to_agent.logagentFailed to open to_agent.log file
ssa_demon_open: socket(PF_UNIX, SOCK_STREAM, 0) failed: %d
ssa_demon_open: connect(%s) failed: %d
ssa_demon_open: fdopen(socket=%s) failed: %d
Failed to open stream to %s processor
/opt/alt/clos_ssa/run/ssa.socktruefalsehttp?DUMP_AGENT
Request_duration: %ld.%06ld, micro: %u
{ "timestamp": "%ld", "url": "%s://%s%s", "duration": %u, "hitting_limits": %s, "throttled_time": %lu, "io_throttled_time": %lu, "wordpress": %s }ro/proc/lve/task_sched_stat%lu %lu %lu %lu %luDelays: total: %lu ms, sleep (U + S): %lu ms, iowait: %lu ms, throttle(CPU): %lu ms, throttle(IO): %lu ms
;�`������P���8�T��t��������� ��X����0������(`���`����t���������zRx�$���FJw�?:*3$"D��p\�:p,�[E�U�p�PE�J����E��
A@�D��B�D�A �D0�
 AABEM
 AABG��FE�|,(�&E��A H(F0KA
DX�vE�p4th�
E�A�D }
CAEQ
CAK(�@��E�A�D b
CAH��<��rF�B�A �A(�G�x
(A ABBAL,P�F�D�A ��(B0K8D@QHAPK G
ABCQDG4|����uE�H�N N(K0`(D Q
CAA�����+����'�0���2HG b �T���6HCL J(C0QGNU��p�: �,�,�,�,�,�,�,�,�-���
�*�: �: ���o`	
p> �H8	���o���o�
���o�o.
���o�<  0@P`p�������� 0@P`p�������� 0@P`p����3�,�,��`��,GCC: (GNU) 8.5.0 20210514 (Red Hat 8.5.0-28)GA$3a1��*GA$3p1113��)GA*GA$annobin gcc 8.5.0 20210514GA$plugin name: gcc-annobinGA$running gcc 8.5.0 20210514GA*GA*GA!
GA*FORTIFYGA+GLIBCXX_ASSERTIONSGA*GOW*�GA*cf_protectionGA+omit_frame_pointerGA+stack_clashGA!stack_realignGA$3p1113`$�*GA*GA$annobin gcc 8.5.0 20210514GA$plugin name: gcc-annobinGA$running gcc 8.5.0 20210514GA*GA*GA!
GA*FORTIFYGA+GLIBCXX_ASSERTIONSGA*GOW*�GA*cf_protectionGA+omit_frame_pointerGA+stack_clashGA!stack_realign
GA*FORTIFY�*GA+GLIBCXX_ASSERTIONS�\$#6Me�������-�:F�g[�[���`P��l�
�: h1lM1gp�t1��������&�:6 \6 �M!�M!�E$�E$\$�-4`$J�'d~����9X`${�'��'��)���":Vk��'��)��)��*�;\x����)�**D;*h;*�g*�g*��*��*	�*8	:	0M	pc	�@ r	�: �	��	�: �	x4�	
�*�	�: �	�< �	�0
�@ 
p> #
	�8`	.
�
H	�
�
�*+�0`1�4�: �: �: �< p> @ �@ �A`)
G
�v\
x
�
�'��
`$r�
�
 �
(�@ /CPd����0��)u�@F@< @" 1J]qp*2��A �P$���*6���@ �

+
@ �A
Y
@ 
p
�
�@ ��
*+�
�
@*'�
P!��
�
�
,= Wr��"������[.annobin_ssa.c.annobin_ssa.c_end.annobin_ssa.c.hot.annobin_ssa.c_end.hot.annobin_ssa.c.unlikely.annobin_ssa.c_end.unlikely.annobin_ssa.c.startup.annobin_ssa.c_end.startup.annobin_ssa.c.exit.annobin_ssa.c_end.exit.annobin_zm_globals_ctor_clos_ssa.start.annobin_zm_globals_ctor_clos_ssa.endzm_globals_ctor_clos_ssa.annobin_zif_clos_ssa_test.start.annobin_zif_clos_ssa_test.end.annobin_zm_globals_dtor_clos_ssa.start.annobin_zm_globals_dtor_clos_ssa.endzm_globals_dtor_clos_ssa.annobin_zm_startup_clos_ssa.start.annobin_zm_startup_clos_ssa.end.annobin_class_exists.start.annobin_class_exists.endclass_exists.annobin_zm_info_clos_ssa.start.annobin_zm_info_clos_ssa.end.annobin_php_ssa_post_deactivate.start.annobin_php_ssa_post_deactivate.endphp_ssa_post_deactivate.annobin_zm_shutdown_clos_ssa.start.annobin_zm_shutdown_clos_ssa.end.annobin_zm_deactivate_clos_ssa.start.annobin_zm_deactivate_clos_ssa.end.annobin_zm_activate_clos_ssa.start.annobin_zm_activate_clos_ssa.end.annobin_get_module.start.annobin_get_module.endarginfo_clos_ssa_test.annobin_processors.c.annobin_processors.c_end.annobin_processors.c.hot.annobin_processors.c_end.hot.annobin_processors.c.unlikely.annobin_processors.c_end.unlikely.annobin_processors.c.startup.annobin_processors.c_end.startup.annobin_processors.c.exit.annobin_processors.c_end.exit.annobin_ssa_process_request.start.annobin_ssa_process_request.end.annobin_dump.c.annobin_dump.c_end.annobin_dump.c.hot.annobin_dump.c_end.hot.annobin_dump.c.unlikely.annobin_dump.c_end.unlikely.annobin_dump.c.startup.annobin_dump.c_end.startup.annobin_dump.c.exit.annobin_dump.c_end.exit.annobin_ssa_agent_dump.start.annobin_ssa_agent_dump.end.annobin_ssa_perf.c.annobin_ssa_perf.c_end.annobin_ssa_perf.c.hot.annobin_ssa_perf.c_end.hot.annobin_ssa_perf.c.unlikely.annobin_ssa_perf.c_end.unlikely.annobin_ssa_perf.c.startup.annobin_ssa_perf.c_end.startup.annobin_ssa_perf.c.exit.annobin_ssa_perf.c_end.exit.annobin_ssa_xp_get_current_delays.start.annobin_ssa_xp_get_current_delays.end.annobin_ssa_xp_get_delays_diff.start.annobin_ssa_xp_get_delays_diff.end.annobin_ssa_xp_is_throttled.start.annobin_ssa_xp_is_throttled.end.annobin_ssa_xp_print_delays.start.annobin_ssa_xp_print_delays.end.annobin_ssa_xp_snprint_delays.start.annobin_ssa_xp_snprint_delays.endderegister_tm_clones__do_global_dtors_auxcompleted.7303__do_global_dtors_aux_fini_array_entryframe_dummy__frame_dummy_init_array_entry__FRAME_END___fini__dso_handle_DYNAMIC__GNU_EH_FRAME_HDR__TMC_END___GLOBAL_OFFSET_TABLE__initzend_ini_boolean_displayer_cbzm_shutdown_clos_ssa__snprintf_chk@@GLIBC_2.3.4free@@GLIBC_2.2.5ssa_agent_dumpssa_process_request__errno_location@@GLIBC_2.2.5_ITM_deregisterTMCloneTablezend_register_ini_entries__isoc99_fscanf@@GLIBC_2.7_emalloc_56_edatafclose@@GLIBC_2.2.5OnUpdateBoolstrlen@@GLIBC_2.2.5__stack_chk_fail@@GLIBC_2.4setbuf@@GLIBC_2.2.5php_info_print_table_rowgettimeofday@@GLIBC_2.2.5OnUpdateStringssa_xp_get_current_delaysfputc@@GLIBC_2.2.5zm_info_clos_ssassa_functions__gmon_start__php_info_print_table_endmemcpy@@GLIBC_2.14display_ini_entriesssa_xp_print_delayszend_hash_str_findget_modulephp_info_print_table_colspan_headerssa_xp_snprint_delaysfdopen@@GLIBC_2.2.5__bss_start_efree__printf_chk@@GLIBC_2.3.4core_globalsclos_ssa_module_entryzend_is_auto_global_strzm_deactivate_clos_ssafopen@@GLIBC_2.2.5clos_ssa_globalsssa_xp_get_delays_diffzend_errorssa_xp_is_throttledzm_activate_clos_ssa_emallocconnect@@GLIBC_2.2.5fwrite@@GLIBC_2.2.5__fprintf_chk@@GLIBC_2.3.4executor_globals_ITM_registerTMCloneTablephp_info_print_table_startstrdup@@GLIBC_2.2.5strerror@@GLIBC_2.2.5__cxa_finalize@@GLIBC_2.2.5zm_startup_clos_ssazend_hash_findsocket@@GLIBC_2.2.5zif_clos_ssa_test.symtab.strtab.shstrtab.note.gnu.build-id.gnu.hash.dynsym.dynstr.gnu.version.gnu.version_r.rela.dyn.rela.plt.init.plt.sec.text.fini.rodata.eh_frame_hdr.eh_frame.note.gnu.property.init_array.fini_array.data.rel.ro.dynamic.got.data.bss.comment.gnu.build.attributes88$.���o``�8@		H���o.
.
�U���o�
�
`d8nBHH�x��s�~��p����*�*
�++���0�0��`1`1��4�4 ��: �:��: �:��: �:� ��< �<��p> p>��@ @� ��@ �@� 0�@-
�A`�@�D�|	�V�e#8.1/lib64/php/modules/clos_ssa.so000075500000067170151734570520012431 0ustar00ELF>@�f@8	@�4�4 �:�: �: �� �<�< �< ��888$$�4�4�4  S�td�4�4�4  P�td�0�0�0��Q�tdR�td�:�: �: 00GNU�B8��kb��\M�rr|�N,��$��$		�3,-014689:<>?`�n�� �p�qX��||\��a[�U��BE�지B2)*��F�U�h駿g�`r����� �[k[(�)��e!͚���$� �Kg���4�y��E ���uU"�hP������, :��F"�6�)u�'��P$��@ ��A ��v0*+s���@ [`*'!P!�UP[)F��@ ��`$ro�*2��*6�@ 	�@ ��@< @__gmon_start___ITM_deregisterTMCloneTable_ITM_registerTMCloneTable__cxa_finalizezif_clos_ssa_test_emalloc_56zm_startup_clos_ssazend_register_ini_entriesclos_ssa_globalsfopensetbuffwrite__errno_locationstrerrorzend_errorstrlen_emallocmemcpyexecutor_globalszend_hash_find_efreezm_info_clos_ssaphp_info_print_table_startphp_info_print_table_colspan_headerphp_info_print_table_rowphp_info_print_table_enddisplay_ini_entries__fprintf_chkssa_process_requestzm_shutdown_clos_ssafclosezm_deactivate_clos_ssagettimeofdayzm_activate_clos_ssassa_xp_get_current_delayszend_is_auto_global_strcore_globalszend_hash_str_findstrdupget_moduleclos_ssa_module_entryOnUpdateBoolzend_ini_boolean_displayer_cbOnUpdateStringssa_functionssocketconnectfdopenssa_agent_dumpssa_xp_get_delays_diff__stack_chk_failfputc__isoc99_fscanfssa_xp_is_throttledssa_xp_print_delays__printf_chkssa_xp_snprint_delays__snprintf_chklibc.so.6_edata__bss_startclos_ssa.soGLIBC_2.14GLIBC_2.4GLIBC_2.7GLIBC_2.2.5GLIBC_2.3.4�����ii
�ii
�ui	�ti		�: �: ��: �: ; �,(; �,@; �,h; �,�; �,�; �,�; �,@< -P< �- @ �,X@ �,p@ x@ ��@ ��@ �,; 
H; 
�; 
; 9X; 9�; 9�; 9�? 9h@ 90; p; �; �; H< 7�? �? �? �? >�? $�? %�? )(@ ?0@ 38@ 1@@ 6H@ =P@ 8�> �> �> -�> :�> �> �> �> �> 	�> �> �> 
�> �> �> ? ,? ? ?  ? (? 0? 8? @? H? P? X? `? 2h? p?  x? !�? "�? #�? &�? '�? (�? )�? *�? +��H��H��) H��t��H����5b( �%c( ��h�������h��������h�������h�������h�������h�������h�������h��q������h��a������h	��Q������h
��A������h��1������h��!������h
��������h��������h������h�������h��������h�������h�������h�������h�������h�������h��q������h��a������h��Q������h��A������h��1������h��!������h��������h��������h������h �������h!��������h"�������h#�������h$�������h%�������h&��������%�% D���%�% D���%�% D���%�% D���%�% D���%�% D���%�% D���%�% D���%�% D���%�% D���%�% D���%�% D���%�% D���%�% D���%}% D���%u% D���%m% D���%e% D���%]% D���%U% D���%M% D���%E% D���%=% D���%5% D���%-% D���%%% D���%% D���%% D���%
% D���%% D���%�$ D���%�$ D���%�$ D���%�$ D���%�$ D���%�$ D���%�$ D���%�$ D���%�$ D��SH�����H�5<������H�$1�H�5#�����c���H��[�z���f.�H�=Q% H�J% H9�tH�V$ H��t	�����H�=!% H�5% H)�H��H��H��?H�H�tH�E$ H��t��fD�����=�$ u+UH�="$ H��tH�=� ����d�����$ ]������w������1��f�GH�G H�G(H�G0H�GH�G�G�fD��SH�����fo�H�H�a extensH�H�@H�@@H�x(�@0ion!�@4H��C[�D��SH��H� H��t
����H�C H�{(H��t
����H�C(H�{0H��t
���H�C0�C[���SH�=� ����H��" �{trH�{H��t%H�5�
���H�CH��tX1�H������{tDH�KH��t;��H�=�
�����{tH�KH��t��H�=�
��1�[��7����8� ���H�S�H�5pH��1�����@ATI��USH���P���H�x H��H�����H��L��H��H�H�{H�H�CH�k���H��! H���D+H�������KH��tJ���@u�+u���D$H��t�O����D$H��[]A\�f�����D$H��[]A\�fD1���@t���ff.�@��SH�D! �{tH�KH��t��H�=�����;��H�C(H�{ H����H����H�sHH�SPL�K8H�C@H��I��L)�I)����{t'H�{H��tH��RH�WV�P1��a���H�� 1����H�{ H��t
�X���H�C H�C(H��u'H�{0H��t
�9���H�C0�C1�[�f�H������H�C(��fDH��u�뺐H��I��@B�{t��V���f.���SH�  �{t`H�KH��tW��H�=�����{t;H�KH��t2��H�=��j����{tH�{H��t
���H�C1�[�f.���USH��H�� �{t9H�KH��t0��H�=?�
����;u�C��u;H��1�[]�@�;t�1�H�{H���H�=#������u@�C1�@�k��t�H�KH��t���H�=���H��1�[]�f.�H�=�
������t��k@��u�C�q���fDH�KH��t��H�=�
�I����C�v����C�u������USH��H� �{taH�KH������H�=�
����;���{tH�KH��t��H�=�
����H��1�[]���;t��C�{��H�{(��H�{ ���{t)H�KH��t �!�H�=��j���f.�1�H�{8�5���H�{X�L���������Q���fD�;�g����C�f��{�C�c���H�KH���V�����H�=�	����;���f.��H�=�	�C�k���H�- �H�5u	H�C H�����H��t
�x�EH����	H�5K	H�C(����H��t
�x��H����H�5&	H�C0���H��t
�x���{��H�{H��tH�K H�-��H��H��HD�1������{tTH�{H��tKH�K(H���H��HD�1�����{t'H�{H��tH�K0H���H��HD�1����H�{(tH�{ �3����C�*���f.�H�8H�����H�C0�4���H�8H�����H�C(���H�8H���t���H�C ���ff.���H�} �@��AUATUSH��H�h dH�%(H�D$x1��{tH�KH��t��H�=h	����H�C H��t:���u�1�� H�����t"��v�'��"��H�����u�f��{�I��1ҾI�l$fo
�f�$D$fo
H�E`�EhEf�E E0E@EP���A�Ņ��=�nL�������H�5�D���g�I��H���K�����Hǃ�Hǃ�L�����L���H�1���H�t$xdH34%(��H�Ĉ[]A\A]ù/��\���������H�5�H�=��I��H���n����{�H�KH���
�!�H�=��,���r���@H��������ƃ�Hǃ�Hǃ��"���f.��{��H�kH������H���H��1����Bf.��{t*L�cM��t!���H��L��D�H��1���D���X�{t*H�{H��t!H�
H���1��O��������|���fDH���H�{X���H���H���H���H����/�����{�v���L�cM���i����$�H��L��D�H��1�����C����^�f.�@��ATI��USH�� �{txH�KH�����H�=K�e�H�KHL�CPH+K8�CL+C@�Ci�@BDń��H�{H����A��H��1��'���f�H�K8H�CHH�kPH)�H+k@��i�@B�H��L����{H��H���I��L�K(L��LE�H�H�5_HE�H�C H��HD�M��LD�H�s0ARAPL�mH��WL��RLE�H���UP1���H��0�{uG[]A\�f�H�KHL�CPH+K8L+C@x^i�@BB�,�f�H��i�@B��(@BH�K8�7���fD[L��]�
A\���H��I��@B����H��I��@Bi�@BD�������UH�5oSH��H�=gH���`�H��tIH��H��H�C H��PH�KL�KH��L�C1�H�5L1����ZH��Y�������H����[]û������ff.���H�H)H�GH)FH�GH)FH�GH)FH�G H)F �D���H�WH9Vt�@H�G H9F �����f���H��H�O�w H�5�L�O1�L�GH���S�H���ff.���H���r L�~1��rH������r�rL�
���H��(���H��H���a+Enter MINIT_FUNCTION
Exit MINIT_FUNCTION
EnabledSSA SupportEnter PRSHUTDOWN_FUNCTION
Enter MSHUTDOWN_FUNCTION
Exit MSHUTDOWN_FUNCTION
Enter RSHUTDOWN_FUNCTION
wpwpdbIt is wordpress site
Exit RSHUTDOWN_FUNCTION
nullEnter RINIT_FUNCTION
Extracting Request-data
_SERVERREQUEST_URIHTTP_HOSTREQUEST_SCHEMEREQUEST_URI: %s
HTTP_HOST: %s
REQUEST_SCHEME: %s
Exit RINIT_FUNCTION
clos_ssa.enabled1clos_ssa.to_fileclos_ssa.debugclos_ssa.debug_fileclos_ssa1.0API20210902,NTSclos_ssa_testCan't open clos_ssa.debug_file: "%s", %sCloudlinux PHP slow site analyzerRequest executed for %ld.%06ld from %ld.%06ld until %ld.%06ld
Request-data already initialized
It works clos_ssPROCESS REQUEST STARTED
/tmp/ssa_to_agent.logagentFailed to open to_agent.log file
ssa_demon_open: socket(PF_UNIX, SOCK_STREAM, 0) failed: %d
ssa_demon_open: connect(%s) failed: %d
ssa_demon_open: fdopen(socket=%s) failed: %d
Failed to open stream to %s processor
/opt/alt/clos_ssa/run/ssa.socktruefalsehttp?DUMP_AGENT
Request_duration: %ld.%06ld, micro: %u
{ "timestamp": "%ld", "url": "%s://%s%s", "duration": %u, "hitting_limits": %s, "throttled_time": %lu, "io_throttled_time": %lu, "wordpress": %s }ro/proc/lve/task_sched_stat%lu %lu %lu %lu %luDelays: total: %lu ms, sleep (U + S): %lu ms, iowait: %lu ms, throttle(CPU): %lu ms, throttle(IO): %lu ms
;�@�����0��@�����80�T��t�����p� ��X����������(`���`����t���������zRx�$p��FJw�?:*3$"D��p\0�:p\�[E�U���PE�J����E��
A@�t��B�D�A �D0�
 AABCM
 AABGp�FE�|,(��&E��A H(F0KC
JX��vE�p4tH�	E�A�D }
CAEQ
CAK(� ��E�A�D b
CAH���<���rF�B�A �A(�G�x
(A ABBAL,0��F�D�A ��(B0K8D@QHAPK G
ABCA
DGL4|����uE�H�N N(K0`(D Q
CAA�����+����'�0���2HG b �T���6HCL J(C0QGNU���: �,�,�,�,�,�,�,-�-���
+�: �: ���o`	
p> �H8	���o���o�
���o�o.
���o�<  0@P`p�������� 0@P`p�������� 0@P`p���d4�,�,����,GCC: (GNU) 8.5.0 20210514 (Red Hat 8.5.0-28)GA$3a1�+GA$3p1113�)GA*GA$annobin gcc 8.5.0 20210514GA$plugin name: gcc-annobinGA$running gcc 8.5.0 20210514GA*GA*GA!
GA*FORTIFYGA+GLIBCXX_ASSERTIONSGA*GOW*�GA*cf_protectionGA+omit_frame_pointerGA+stack_clashGA!stack_realignGA$3p1113`$+GA*GA$annobin gcc 8.5.0 20210514GA$plugin name: gcc-annobinGA$running gcc 8.5.0 20210514GA*GA*GA!
GA*FORTIFYGA+GLIBCXX_ASSERTIONSGA*GOW*�GA*cf_protectionGA+omit_frame_pointerGA+stack_clashGA!stack_realign
GA*FORTIFY�)GA+GLIBCXX_ASSERTIONS
GA*FORTIFY�)+GA+GLIBCXX_ASSERTIONS\$#F6FMeF�F�F�F�F�J-:FJg������P���
; @1�M�g��t�F������&�:6 \6 �I!�I!�E$�E$\$�- 4`$J�'dF~F�F�F�F�FF9FX`${�'��'��)�F�F�FF"F:FVFkF��'��)��)�+�FFF;F\FxF�F�F��)�%*%*D[*h[*��*��*��*��*	+8	P:	�M	�c	�@ r	�: �	�	�: �	�4�	
+�	�: �	�< �	�0
�@ 
p> #
	�8`	.
�
H	�
�
+ +�0�1�4�: �: �: �< p> @ �@ �A`)
G
�v\
x
�
�'��
`$r�
�
 �
(�@ /CPd����0��)u�F@< @" 1J]q�*2��A �P$���*6���@ �

+
@ �A
Y
@ 	p
�
�@ ��
0*+�
�
`*'�
P!��
�
�
,= Wr��"�����P[.annobin_ssa.c.annobin_ssa.c_end.annobin_ssa.c.hot.annobin_ssa.c_end.hot.annobin_ssa.c.unlikely.annobin_ssa.c_end.unlikely.annobin_ssa.c.startup.annobin_ssa.c_end.startup.annobin_ssa.c.exit.annobin_ssa.c_end.exit.annobin_zm_globals_ctor_clos_ssa.start.annobin_zm_globals_ctor_clos_ssa.endzm_globals_ctor_clos_ssa.annobin_zif_clos_ssa_test.start.annobin_zif_clos_ssa_test.end.annobin_zm_globals_dtor_clos_ssa.start.annobin_zm_globals_dtor_clos_ssa.endzm_globals_dtor_clos_ssa.annobin_zm_startup_clos_ssa.start.annobin_zm_startup_clos_ssa.end.annobin_class_exists.start.annobin_class_exists.endclass_exists.annobin_zm_info_clos_ssa.start.annobin_zm_info_clos_ssa.end.annobin_php_ssa_post_deactivate.start.annobin_php_ssa_post_deactivate.endphp_ssa_post_deactivate.annobin_zm_shutdown_clos_ssa.start.annobin_zm_shutdown_clos_ssa.end.annobin_zm_deactivate_clos_ssa.start.annobin_zm_deactivate_clos_ssa.end.annobin_zm_activate_clos_ssa.start.annobin_zm_activate_clos_ssa.end.annobin_get_module.start.annobin_get_module.endarginfo_clos_ssa_test.annobin_processors.c.annobin_processors.c_end.annobin_processors.c.hot.annobin_processors.c_end.hot.annobin_processors.c.unlikely.annobin_processors.c_end.unlikely.annobin_processors.c.startup.annobin_processors.c_end.startup.annobin_processors.c.exit.annobin_processors.c_end.exit.annobin_ssa_process_request.start.annobin_ssa_process_request.end.annobin_dump.c.annobin_dump.c_end.annobin_dump.c.hot.annobin_dump.c_end.hot.annobin_dump.c.unlikely.annobin_dump.c_end.unlikely.annobin_dump.c.startup.annobin_dump.c_end.startup.annobin_dump.c.exit.annobin_dump.c_end.exit.annobin_ssa_agent_dump.start.annobin_ssa_agent_dump.end.annobin_ssa_perf.c.annobin_ssa_perf.c_end.annobin_ssa_perf.c.hot.annobin_ssa_perf.c_end.hot.annobin_ssa_perf.c.unlikely.annobin_ssa_perf.c_end.unlikely.annobin_ssa_perf.c.startup.annobin_ssa_perf.c_end.startup.annobin_ssa_perf.c.exit.annobin_ssa_perf.c_end.exit.annobin_ssa_xp_get_current_delays.start.annobin_ssa_xp_get_current_delays.end.annobin_ssa_xp_get_delays_diff.start.annobin_ssa_xp_get_delays_diff.end.annobin_ssa_xp_is_throttled.start.annobin_ssa_xp_is_throttled.end.annobin_ssa_xp_print_delays.start.annobin_ssa_xp_print_delays.end.annobin_ssa_xp_snprint_delays.start.annobin_ssa_xp_snprint_delays.endderegister_tm_clones__do_global_dtors_auxcompleted.7303__do_global_dtors_aux_fini_array_entryframe_dummy__frame_dummy_init_array_entry__FRAME_END___fini__dso_handle_DYNAMIC__GNU_EH_FRAME_HDR__TMC_END___GLOBAL_OFFSET_TABLE__initzend_ini_boolean_displayer_cbzm_shutdown_clos_ssa__snprintf_chk@@GLIBC_2.3.4free@@GLIBC_2.2.5ssa_agent_dumpssa_process_request__errno_location@@GLIBC_2.2.5_ITM_deregisterTMCloneTablezend_register_ini_entries__isoc99_fscanf@@GLIBC_2.7_emalloc_56_edatafclose@@GLIBC_2.2.5OnUpdateBoolstrlen@@GLIBC_2.2.5__stack_chk_fail@@GLIBC_2.4setbuf@@GLIBC_2.2.5php_info_print_table_rowgettimeofday@@GLIBC_2.2.5OnUpdateStringssa_xp_get_current_delaysfputc@@GLIBC_2.2.5zm_info_clos_ssassa_functions__gmon_start__php_info_print_table_endmemcpy@@GLIBC_2.14display_ini_entriesssa_xp_print_delayszend_hash_str_findget_modulephp_info_print_table_colspan_headerssa_xp_snprint_delaysfdopen@@GLIBC_2.2.5__bss_start_efree__printf_chk@@GLIBC_2.3.4core_globalsclos_ssa_module_entryzend_is_auto_global_strzm_deactivate_clos_ssafopen@@GLIBC_2.2.5clos_ssa_globalsssa_xp_get_delays_diffzend_errorssa_xp_is_throttledzm_activate_clos_ssa_emallocconnect@@GLIBC_2.2.5fwrite@@GLIBC_2.2.5__fprintf_chk@@GLIBC_2.3.4executor_globals_ITM_registerTMCloneTablephp_info_print_table_startstrdup@@GLIBC_2.2.5strerror@@GLIBC_2.2.5__cxa_finalize@@GLIBC_2.2.5zm_startup_clos_ssazend_hash_findsocket@@GLIBC_2.2.5zif_clos_ssa_test.symtab.strtab.shstrtab.note.gnu.build-id.gnu.hash.dynsym.dynstr.gnu.version.gnu.version_r.rela.dyn.rela.plt.init.plt.sec.text.fini.rodata.eh_frame_hdr.eh_frame.note.gnu.property.init_array.fini_array.data.rel.ro.dynamic.got.data.bss.comment.gnu.build.attributes88$.���o``�8@		H���o.
.
�U���o�
�
`d8nBHH�x��s�~��p��++
� + +� ��0�0���1�1��4�4 ��: �:��: �:��: �:� ��< �<��p> p>��@ @� ��@ �@� 0�@-
�A`�@lHE�|	�V�e#7.4/lib64/php/modules/clos_ssa.so000075500000067170151734570530012434 0ustar00ELF>@�f@8	@�4�4 �:�: �: �� �<�< �< ��888$$�4�4�4  S�td�4�4�4  P�td�0�0�0��Q�tdR�td�:�: �: 00GNUsD�e�|�wZ9āL�Q��,��$��$		�3,-014689:<>?`�n�� �p�qX��||\��a[�U��BE�지B2)*��F�U�h駿g�`r����� �[k[(�)��e!͚���$� �Kg���4�y��E ���uU"�hP������, :��F"�6�)u�'��P$��@ ��A ��v*+s���@ [@*'!P!�UP[)F��@ ��`$rop*2��*6�@ 
�@ ��@< @__gmon_start___ITM_deregisterTMCloneTable_ITM_registerTMCloneTable__cxa_finalizezif_clos_ssa_test_emalloc_56zm_startup_clos_ssazend_register_ini_entriesclos_ssa_globalsfopensetbuffwrite__errno_locationstrerrorzend_errorstrlen_emallocmemcpyexecutor_globalszend_hash_find_efreezm_info_clos_ssaphp_info_print_table_startphp_info_print_table_colspan_headerphp_info_print_table_rowphp_info_print_table_enddisplay_ini_entries__fprintf_chkssa_process_requestzm_shutdown_clos_ssafclosezm_deactivate_clos_ssagettimeofdayzm_activate_clos_ssassa_xp_get_current_delayszend_is_auto_global_strcore_globalszend_hash_str_findstrdupget_moduleclos_ssa_module_entryOnUpdateBoolzend_ini_boolean_displayer_cbOnUpdateStringssa_functionssocketconnectfdopenssa_agent_dumpssa_xp_get_delays_diff__stack_chk_failfputc__isoc99_fscanfssa_xp_is_throttledssa_xp_print_delays__printf_chkssa_xp_snprint_delays__snprintf_chklibc.so.6_edata__bss_startclos_ssa.soGLIBC_2.14GLIBC_2.4GLIBC_2.7GLIBC_2.2.5GLIBC_2.3.4�����ii
�ii
�ui	�ti		�: �: ��: �: ; �,(; �,@; �,h; �,�; �,�; �,�; �,@< �,P< �- @ �,X@ �,p@ x@ ��@ ��@ �,; 
H; 
�; 
; 9X; 9�; 9�; 9�? 9h@ 90; p; �; �; H< 7�? �? �? �? >�? $�? %�? )(@ ?0@ 38@ 1@@ 6H@ =P@ 8�> �> �> -�> :�> �> �> �> �> 	�> �> �> 
�> �> �> ? ,? ? ?  ? (? 0? 8? @? H? P? X? `? 2h? p?  x? !�? "�? #�? &�? '�? (�? )�? *�? +��H��H��) H��t��H����5b( �%c( ��h�������h��������h�������h�������h�������h�������h�������h��q������h��a������h	��Q������h
��A������h��1������h��!������h
��������h��������h������h�������h��������h�������h�������h�������h�������h�������h��q������h��a������h��Q������h��A������h��1������h��!������h��������h��������h������h �������h!��������h"�������h#�������h$�������h%�������h&��������%�% D���%�% D���%�% D���%�% D���%�% D���%�% D���%�% D���%�% D���%�% D���%�% D���%�% D���%�% D���%�% D���%�% D���%}% D���%u% D���%m% D���%e% D���%]% D���%U% D���%M% D���%E% D���%=% D���%5% D���%-% D���%%% D���%% D���%% D���%
% D���%% D���%�$ D���%�$ D���%�$ D���%�$ D���%�$ D���%�$ D���%�$ D���%�$ D���%�$ D��SH�����H�5������H�1�H�5�����c���H��[�z���f.�H�=Q% H�J% H9�tH�V$ H��t	�����H�=!% H�5% H)�H��H��H��?H�H�tH�E$ H��t��fD�����=�$ u+UH�="$ H��tH�=� ����d�����$ ]������w������1��f�GH�G H�G(H�G0H�GH�G�G�fD��SH�����fo{H�H�a extensH�H�@H�@@H�x(�@0ion!�@4H��C[�D��SH��H� H��t
����H�C H�{(H��t
����H�C(H�{0H��t
���H�C0�C[���SH�=� ����H��" �{trH�{H��t%H�5�
���H�CH��tX1�H������{tDH�KH��t;��H�=�
�����{tH�KH��t��H�=�
��1�[��7����8� ���H�S�H�5PH��1�����@ATI��USH���P���H�x H��H�����H��L��H��H�H�{H�H�CH�k���H��! H���D+H�������KH��tJ���@u�+u���D$H��t�O����D$H��[]A\�f�����D$H��[]A\�fD1���@t���ff.�@��SH�D! �{tH�KH��t��H�=�����;��H�C(H�{ H����H����H�sHH�SPL�K8H�C@H��I��L)�I)����{t'H�{H��tH��RH�7V�P1��a���H�� ���H�{ H��t
�Z���H�C H�C(H��u!H�{0H��t
�;���H�C0�C1�[�H��� ���H�C(��fDH��u��f�H��I��@B�{t��V���f.���SH�  �{t`H�KH��tW��H�=q����{t;H�KH��t2��H�=f�j����{tH�{H��t
���H�C1�[�f.���USH��H�� �{t9H�KH��t0��H�=�
����;u�C��u;H��1�[]�@�;t�1�H�{H���H�=������u@�C1�@�k��t�H�KH��t���H�=�
���H��1�[]�f.�H�=�
�������Cu1�����u�C�f���H�K�H��t���H�=s
�<����C�i�����USH��H� �{taH�KH������H�=a
����;���{tH�KH��t��H�=�
����H��1�[]���;t��C�{��H�{(��H�{ ���{t)H�KH��t �!�H�=��j���f.�1�H�{8�5���H�{X�L���������Q���fD�;�g����C�f��{�C�c���H�KH���V�����H�=p	����;���f.��H�=i	�C�k���H�- �H�5U	H�C H�����H��t
�x�EH����	H�5+	H�C(����H��t
�x��H����H�5	H�C0���H��t
�x���{��H�{H��tH�K H�-z�H��H��HD�1������{tTH�{H��tKH�K(H���H��HD�1�����{t'H�{H��tH�K0H���H��HD�1����H�{(tH�{ �3����C�*���f.�H�8H�����H�C0�4���H�8H�����H�C(���H�8H���t���H�C ���ff.���H�} �@��AUATUSH��H�h dH�%(H�D$x1��{tH�KH��t��H�=H	����H�C H��t:���u�1�� H�����t"��v�'��"��H�����u�f��{�I��1ҾI�l$fo�	�f�$D$fo�	H�E`�EhEf�E E0E@EP���A�Ņ��=�nL�������H�5D���g�I��H���K�����Hǃ�Hǃ�L�����L���H�1���H�t$xdH34%(��H�Ĉ[]A\A]ù/��\���������H�5�H�=���I��H���n����{�H�KH���
�!�H�=��,���r���@H��������ƃ�Hǃ�Hǃ��"���f.��{��H�kH������H���H��1����Bf.��{t*L�cM��t!���H��L��D�H��1���D���X�{t*H�{H��t!H�
�H���1��O��������|���fDH���H�{X���H���H���H���H����/�����{�v���L�cM���i����$�H��L��D�H��1�����C����^�f.�@��ATI��USH�� �C��tvH�KH�����H�=)�c�H�KHL�CPH+K8�CL+C@�)i�@BDń��	H�{H����A��H���1��%���H�K8H�CHH�kPH)�H+k@��i�@B�H��L����{H��H���I��L�K(L��LE�H�H�5?HE�H�C H��HD�M��LD�H�s0ARAPL�MH��WL��RLE�H�w�UP1���H��0�{uW[]A\�f�H�KHL�CPH+K8L+C@x.i�@BB�,�f�H��i�@B��(@BH�K8�7���fDH��I��@B����[L��]�
A\��f.�D��UH�5oSH��H�=gH����H��tIH��H��H�C H��PH�KL�KH��L�C1�H�5L1��
�ZH��Y�������H����[]û������ff.���H�H)H�GH)FH�GH)FH�GH)FH�G H)F �D���H�WH9Vt�@H�G H9F �����f���H��H�O�w H�5�L�O1�L�GH���s�H���ff.���H���r L�~1��rH������r�rL�
���H��(���H��H���a+Enter MINIT_FUNCTION
Exit MINIT_FUNCTION
EnabledSSA SupportEnter PRSHUTDOWN_FUNCTION
Enter MSHUTDOWN_FUNCTION
Exit MSHUTDOWN_FUNCTION
Enter RSHUTDOWN_FUNCTION
wpwpdbIt is wordpress site
Exit RSHUTDOWN_FUNCTION
nullEnter RINIT_FUNCTION
Extracting Request-data
_SERVERREQUEST_URIHTTP_HOSTREQUEST_SCHEMEREQUEST_URI: %s
HTTP_HOST: %s
REQUEST_SCHEME: %s
Exit RINIT_FUNCTION
clos_ssa.enabled1clos_ssa.to_fileclos_ssa.debugclos_ssa.debug_fileclos_ssa1.0API20190902,NTSclos_ssa_testCan't open clos_ssa.debug_file: "%s", %sCloudlinux PHP slow site analyzerRequest executed for %ld.%06ld from %ld.%06ld until %ld.%06ld
Request-data already initialized
It works clos_ssPROCESS REQUEST STARTED
/tmp/ssa_to_agent.logagentFailed to open to_agent.log file
ssa_demon_open: socket(PF_UNIX, SOCK_STREAM, 0) failed: %d
ssa_demon_open: connect(%s) failed: %d
ssa_demon_open: fdopen(socket=%s) failed: %d
Failed to open stream to %s processor
/opt/alt/clos_ssa/run/ssa.socktruefalsehttp?DUMP_AGENT
Request_duration: %ld.%06ld, micro: %u
{ "timestamp": "%ld", "url": "%s://%s%s", "duration": %u, "hitting_limits": %s, "throttled_time": %lu, "io_throttled_time": %lu, "wordpress": %s }ro/proc/lve/task_sched_stat%lu %lu %lu %lu %luDelays: total: %lu ms, sleep (U + S): %lu ms, iowait: %lu ms, throttle(CPU): %lu ms, throttle(IO): %lu ms
;�`�����P��`����8P�T�t������ ��X����0������(`���`����t���������zRx�$���FJw�?:*3$"D��p\P�:p|�[E�U���PE�J����E��
A@����B�D�A �D0�
 AABCM
 AABG��FE�|,(�&E��A H(F0KA
DX�vE�p4th�
E�A�D }
CAEQ
CAK(�@��E�A�D b
CAH��<��rF�B�A �A(�G�x
(A ABBAL,P�F�D�A ��(B0K8D@QHAPK G
ABCQDG4|����uE�H�N N(K0`(D Q
CAA�����+����'�0���2HG b �T���6HCL J(C0QGNU���: �,�,�,�,�,�,�,�,�-���
�*�: �: ���o`	
p> �H8	���o���o�
���o�o.
���o�<  0@P`p�������� 0@P`p�������� 0@P`p���4�,�,����,GCC: (GNU) 8.5.0 20210514 (Red Hat 8.5.0-28)GA$3a1��*GA$3p1113�)GA*GA$annobin gcc 8.5.0 20210514GA$plugin name: gcc-annobinGA$running gcc 8.5.0 20210514GA*GA*GA!
GA*FORTIFYGA+GLIBCXX_ASSERTIONSGA*GOW*�GA*cf_protectionGA+omit_frame_pointerGA+stack_clashGA!stack_realignGA$3p1113`$�*GA*GA$annobin gcc 8.5.0 20210514GA$plugin name: gcc-annobinGA$running gcc 8.5.0 20210514GA*GA*GA!
GA*FORTIFYGA+GLIBCXX_ASSERTIONSGA*GOW*�GA*cf_protectionGA+omit_frame_pointerGA+stack_clashGA!stack_realign
GA*FORTIFY�)GA+GLIBCXX_ASSERTIONS
GA*FORTIFY�)�*GA+GLIBCXX_ASSERTIONS\$#F6FMeF�F�F�F�F�J-:FJg������P���
; @1�M�g��t�F������&�:6 \6 �M!�M!�E$�E$\$�-4`$J�'dF~F�F�F�F�FF9FX`${�'��'��)�F�F�FF"F:FVFkF��'��)��)��*�FFF;F\FxF�F�F��)�**D;*h;*�g*�g*��*��*	�*8	P:	�M	�c	�@ r	�: �	�	�: �	x4�	
�*�	�: �	�< �	�0
�@ 
p> #
	�8`	.
�
H	�
�
�*+�0`1�4�: �: �: �< p> @ �@ �A`)
G
�v\
x
�
�'��
`$r�
�
 �
(�@ /CPd����0��)u�F@< @" 1J]qp*2��A �P$���*6���@ �

+
@ �A
Y
@ 
p
�
�@ ��
*+�
�
@*'�
P!��
�
�
,= Wr��"�����P[.annobin_ssa.c.annobin_ssa.c_end.annobin_ssa.c.hot.annobin_ssa.c_end.hot.annobin_ssa.c.unlikely.annobin_ssa.c_end.unlikely.annobin_ssa.c.startup.annobin_ssa.c_end.startup.annobin_ssa.c.exit.annobin_ssa.c_end.exit.annobin_zm_globals_ctor_clos_ssa.start.annobin_zm_globals_ctor_clos_ssa.endzm_globals_ctor_clos_ssa.annobin_zif_clos_ssa_test.start.annobin_zif_clos_ssa_test.end.annobin_zm_globals_dtor_clos_ssa.start.annobin_zm_globals_dtor_clos_ssa.endzm_globals_dtor_clos_ssa.annobin_zm_startup_clos_ssa.start.annobin_zm_startup_clos_ssa.end.annobin_class_exists.start.annobin_class_exists.endclass_exists.annobin_zm_info_clos_ssa.start.annobin_zm_info_clos_ssa.end.annobin_php_ssa_post_deactivate.start.annobin_php_ssa_post_deactivate.endphp_ssa_post_deactivate.annobin_zm_shutdown_clos_ssa.start.annobin_zm_shutdown_clos_ssa.end.annobin_zm_deactivate_clos_ssa.start.annobin_zm_deactivate_clos_ssa.end.annobin_zm_activate_clos_ssa.start.annobin_zm_activate_clos_ssa.end.annobin_get_module.start.annobin_get_module.endarginfo_clos_ssa_test.annobin_processors.c.annobin_processors.c_end.annobin_processors.c.hot.annobin_processors.c_end.hot.annobin_processors.c.unlikely.annobin_processors.c_end.unlikely.annobin_processors.c.startup.annobin_processors.c_end.startup.annobin_processors.c.exit.annobin_processors.c_end.exit.annobin_ssa_process_request.start.annobin_ssa_process_request.end.annobin_dump.c.annobin_dump.c_end.annobin_dump.c.hot.annobin_dump.c_end.hot.annobin_dump.c.unlikely.annobin_dump.c_end.unlikely.annobin_dump.c.startup.annobin_dump.c_end.startup.annobin_dump.c.exit.annobin_dump.c_end.exit.annobin_ssa_agent_dump.start.annobin_ssa_agent_dump.end.annobin_ssa_perf.c.annobin_ssa_perf.c_end.annobin_ssa_perf.c.hot.annobin_ssa_perf.c_end.hot.annobin_ssa_perf.c.unlikely.annobin_ssa_perf.c_end.unlikely.annobin_ssa_perf.c.startup.annobin_ssa_perf.c_end.startup.annobin_ssa_perf.c.exit.annobin_ssa_perf.c_end.exit.annobin_ssa_xp_get_current_delays.start.annobin_ssa_xp_get_current_delays.end.annobin_ssa_xp_get_delays_diff.start.annobin_ssa_xp_get_delays_diff.end.annobin_ssa_xp_is_throttled.start.annobin_ssa_xp_is_throttled.end.annobin_ssa_xp_print_delays.start.annobin_ssa_xp_print_delays.end.annobin_ssa_xp_snprint_delays.start.annobin_ssa_xp_snprint_delays.endderegister_tm_clones__do_global_dtors_auxcompleted.7303__do_global_dtors_aux_fini_array_entryframe_dummy__frame_dummy_init_array_entry__FRAME_END___fini__dso_handle_DYNAMIC__GNU_EH_FRAME_HDR__TMC_END___GLOBAL_OFFSET_TABLE__initzend_ini_boolean_displayer_cbzm_shutdown_clos_ssa__snprintf_chk@@GLIBC_2.3.4free@@GLIBC_2.2.5ssa_agent_dumpssa_process_request__errno_location@@GLIBC_2.2.5_ITM_deregisterTMCloneTablezend_register_ini_entries__isoc99_fscanf@@GLIBC_2.7_emalloc_56_edatafclose@@GLIBC_2.2.5OnUpdateBoolstrlen@@GLIBC_2.2.5__stack_chk_fail@@GLIBC_2.4setbuf@@GLIBC_2.2.5php_info_print_table_rowgettimeofday@@GLIBC_2.2.5OnUpdateStringssa_xp_get_current_delaysfputc@@GLIBC_2.2.5zm_info_clos_ssassa_functions__gmon_start__php_info_print_table_endmemcpy@@GLIBC_2.14display_ini_entriesssa_xp_print_delayszend_hash_str_findget_modulephp_info_print_table_colspan_headerssa_xp_snprint_delaysfdopen@@GLIBC_2.2.5__bss_start_efree__printf_chk@@GLIBC_2.3.4core_globalsclos_ssa_module_entryzend_is_auto_global_strzm_deactivate_clos_ssafopen@@GLIBC_2.2.5clos_ssa_globalsssa_xp_get_delays_diffzend_errorssa_xp_is_throttledzm_activate_clos_ssa_emallocconnect@@GLIBC_2.2.5fwrite@@GLIBC_2.2.5__fprintf_chk@@GLIBC_2.3.4executor_globals_ITM_registerTMCloneTablephp_info_print_table_startstrdup@@GLIBC_2.2.5strerror@@GLIBC_2.2.5__cxa_finalize@@GLIBC_2.2.5zm_startup_clos_ssazend_hash_findsocket@@GLIBC_2.2.5zif_clos_ssa_test.symtab.strtab.shstrtab.note.gnu.build-id.gnu.hash.dynsym.dynstr.gnu.version.gnu.version_r.rela.dyn.rela.plt.init.plt.sec.text.fini.rodata.eh_frame_hdr.eh_frame.note.gnu.property.init_array.fini_array.data.rel.ro.dynamic.got.data.bss.comment.gnu.build.attributes88$.���o``�8@		H���o.
.
�U���o�
�
`d8nBHH�x��s�~��p����*�*
�++���0�0��`1`1��4�4 ��: �:��: �:��: �:� ��< �<��p> p>��@ @� ��@ �@� 0�@-
�A`�@lHE�|	�V�e#7.1/lib64/php/modules/clos_ssa.so000075500000067050151734570530012426 0ustar00ELF>@�f@8	@�4�4 �:�: �:  �<�< �< ��888$$�4�4�4  S�td�4�4�4  P�td�0�0�0��Q�tdR�td�:�: �: ppGNU,�$��8������&?���,��$��$		�3,-014689:<>?`�n�� �p�qX��||\��a[�U��BE�지B2)*��F�U�h駿g�`r����� �[k[(�)��e!͚���$� �Kg���4�y��E ���uU"�hP������, :��F"�6�)u�'��P$��@ ��A ��v*+s����@ [@*'!P!�U[)@F��@ ��`$rop*2��*6�@ 
�@ ��@< @__gmon_start___ITM_deregisterTMCloneTable_ITM_registerTMCloneTable__cxa_finalizezif_clos_ssa_test_emalloc_56zm_startup_clos_ssazend_register_ini_entriesclos_ssa_globalsfopensetbuffwrite__errno_locationstrerrorzend_errorstrlen_emallocmemcpyexecutor_globalszend_hash_find_efreezm_info_clos_ssaphp_info_print_table_startphp_info_print_table_colspan_headerphp_info_print_table_rowphp_info_print_table_enddisplay_ini_entries__fprintf_chkssa_process_requestzm_shutdown_clos_ssafclosezm_deactivate_clos_ssagettimeofdayzm_activate_clos_ssassa_xp_get_current_delayszend_is_auto_global_strcore_globalszend_hash_str_findstrdupget_moduleclos_ssa_module_entryOnUpdateBoolzend_ini_boolean_displayer_cbOnUpdateStringssa_functionssocketconnectfdopenssa_agent_dumpssa_xp_get_delays_diff__stack_chk_failfputc__isoc99_fscanfssa_xp_is_throttledssa_xp_print_delays__printf_chkssa_xp_snprint_delays__snprintf_chklibc.so.6_edata__bss_startclos_ssa.soGLIBC_2.14GLIBC_2.4GLIBC_2.7GLIBC_2.2.5GLIBC_2.3.4�����ii
�ii
�ui	�ti		�: ��: p�: �: �: �,�: �,; �,0; �,P; �,x; �,�; �,@< �,P< �- @ �,X@ �,p@ �x@ `�@ ��@ �,�: 
; 
X; 
�: 9 ; 9h; 9�; 9�? 9h@ 9�: 8; �; �; H< 7�? �? �? �? >�? $�? %�? )(@ ?0@ 38@ 1@@ 6H@ =P@ 8�> �> �> -�> :�> �> �> �> �> 	�> �> �> 
�> �> �> ? ,? ? ?  ? (? 0? 8? @? H? P? X? `? 2h? p?  x? !�? "�? #�? &�? '�? (�? )�? *�? +��H��H��) H��t��H����5b( �%c( ��h�������h��������h�������h�������h�������h�������h�������h��q������h��a������h	��Q������h
��A������h��1������h��!������h
��������h��������h������h�������h��������h�������h�������h�������h�������h�������h��q������h��a������h��Q������h��A������h��1������h��!������h��������h��������h������h �������h!��������h"�������h#�������h$�������h%�������h&��������%�% D���%�% D���%�% D���%�% D���%�% D���%�% D���%�% D���%�% D���%�% D���%�% D���%�% D���%�% D���%�% D���%�% D���%}% D���%u% D���%m% D���%e% D���%]% D���%U% D���%M% D���%E% D���%=% D���%5% D���%-% D���%%% D���%% D���%% D���%
% D���%% D���%�$ D���%�$ D���%�$ D���%�$ D���%�$ D���%�$ D���%�$ D���%�$ D���%�$ DH�=�% H��% H9�tH��$ H��t	�����H�=q% H�5j% H)�H��H��H��?H�H�tH��$ H��t��fD�����=E% u+UH�=r$ H��tH�= �9����d����% ]������w������1��f�GH�G H�G(H�G0H�GH�G�G�fD��SH����fo�H�H�a extensH�H�@H�@@H�x(�@0ion!�@4H��C[�D��SH��H� H��t
�*���H�C H�{(H��t
����H�C(H�{0H��t
���H�C0�C[���SH�= ����H�# �{trH�{H��t%H�5"�M���H�CH��tX1�H���J����{tDH�KH��t;��H�=�
�e����{tH�KH��t��H�=�
�@���1�[�����8�p���H�S�H�5�H��1�����@ATI��USH�����H�x H��H������H��L��H��H�H�{H�H�CH�k���H�&" H���D+H����
����KH��tI���u�+u���D$H��t����D$H��[]A\�@����D$H��[]A\�fD1���t���ff.�@��SH���S���H�5������H��1�H�5������#���H��[�:���f.���SH�D! �{tH�KH��t��H�=�����;��H�C(H�{ H����H����H�sHH�SPL�K8H�C@H��I��L)�I)����{t'H�{H��tH��RH�7V�P1��a���H�� ���H�{ H��t
�Z���H�C H�C(H��u!H�{0H��t
�;���H�C0�C1�[�H��� ���H�C(��fDH��u��f�H��I��@B�{t��V���f.���SH�  �{t`H�KH��tW��H�=q����{t;H�KH��t2��H�=f�j����{tH�{H��t
���H�C1�[�f.���USH��H�� �{t9H�KH��t0��H�=�
����;u�C��u;H��1�[]�@�;t�1�H�{H���H�=������u@�C1�@�k��t�H�KH��t���H�=�
���H��1�[]�f.�H�=�
�t������Cu1�����u�C�f���H�K�H��t���H�=s
�<����C�i�����USH��H� �{taH�KH������H�=a
����;���{tH�KH��t��H�=�
����H��1�[]���;t��C�{��H�{(��H�{ ���{t)H�KH��t �!�H�=��j���f.�1�H�{8�5���H�{X�L���������Q���fD�;�g����C�f��{�C�c���H�KH���V�����H�=p	����;���f.��H�=i	�C�k���H�- �H�5U	H�C H�����H��t
�x�EH����	H�5+	H�C(����H��t
�x��H����H�5	H�C0���H��t
�x���{��H�{H��tH�K H�-z�H��H��HD�1������{tTH�{H��tKH�K(H���H��HD�1�����{t'H�{H��tH�K0H���H��HD�1����H�{(tH�{ �3����C�*���f.�H�8H�����H�C0�4���H�8H�����H�C(���H�8H���t���H�C ���ff.���H�} �@��AUATUSH��H�h dH�%(H�D$x1��{tH�KH��t��H�=H	����H�C H��t:���u�1�� H�����t"��v�'��"��H�����u�f��{�I��1ҾI�l$fo�	�f�$D$fo�	H�E`�EhEf�E E0E@EP���A�Ņ��=�nL�������H�5D���g�I��H���K�����Hǃ�Hǃ�L�����L���H�1���H�t$xdH34%(��H�Ĉ[]A\A]ù/��\���������H�5�H�=���I��H���n����{�H�KH���
�!�H�=��,���r���@H��������ƃ�Hǃ�Hǃ��"���f.��{��H�kH������H���H��1����Bf.��{t*L�cM��t!���H��L��D�H��1���D���X�{t*H�{H��t!H�
�H���1��O��������|���fDH���H�{X���H���H���H���H����/�����{�v���L�cM���i����$�H��L��D�H��1�����C����^�f.�@��ATI��USH�� �C��tvH�KH�����H�=)�c�H�KHL�CPH+K8�CL+C@�)i�@BDń��	H�{H����A��H���1��%���H�K8H�CHH�kPH)�H+k@��i�@B�H��L����{H��H���I��L�K(L��LE�H�H�5?HE�H�C H��HD�M��LD�H�s0ARAPL�MH��WL��RLE�H�w�UP1���H��0�{uW[]A\�f�H�KHL�CPH+K8L+C@x.i�@BB�,�f�H��i�@B��(@BH�K8�7���fDH��I��@B����[L��]�
A\��f.�D��UH�5oSH��H�=gH����H��tIH��H��H�C H��PH�KL�KH��L�C1�H�5L1��
�ZH��Y�������H����[]û������ff.���H�H)H�GH)FH�GH)FH�GH)FH�G H)F �D���H�WH9Vt�@H�G H9F �����f���H��H�O�w H�5�L�O1�L�GH���s�H���ff.���H���r L�~1��rH������r�rL�
���H��(���H��H���a+Enter MINIT_FUNCTION
Exit MINIT_FUNCTION
EnabledSSA SupportEnter PRSHUTDOWN_FUNCTION
Enter MSHUTDOWN_FUNCTION
Exit MSHUTDOWN_FUNCTION
Enter RSHUTDOWN_FUNCTION
wpwpdbIt is wordpress site
Exit RSHUTDOWN_FUNCTION
nullEnter RINIT_FUNCTION
Extracting Request-data
_SERVERREQUEST_URIHTTP_HOSTREQUEST_SCHEMEREQUEST_URI: %s
HTTP_HOST: %s
REQUEST_SCHEME: %s
Exit RINIT_FUNCTION
clos_ssa.enabled1clos_ssa.to_fileclos_ssa.debugclos_ssa.debug_fileclos_ssa1.0API20160303,NTSclos_ssa_testCan't open clos_ssa.debug_file: "%s", %sCloudlinux PHP slow site analyzerRequest executed for %ld.%06ld from %ld.%06ld until %ld.%06ld
Request-data already initialized
It works clos_ssPROCESS REQUEST STARTED
/tmp/ssa_to_agent.logagentFailed to open to_agent.log file
ssa_demon_open: socket(PF_UNIX, SOCK_STREAM, 0) failed: %d
ssa_demon_open: connect(%s) failed: %d
ssa_demon_open: fdopen(socket=%s) failed: %d
Failed to open stream to %s processor
/opt/alt/clos_ssa/run/ssa.socktruefalsehttp?DUMP_AGENT
Request_duration: %ld.%06ld, micro: %u
{ "timestamp": "%ld", "url": "%s://%s%s", "duration": %u, "hitting_limits": %s, "throttled_time": %lu, "io_throttled_time": %lu, "wordpress": %s }ro/proc/lve/task_sched_stat%lu %lu %lu %lu %luDelays: total: %lu ms, sleep (U + S): %lu ms, iowait: %lu ms, throttle(CPU): %lu ms, throttle(IO): %lu ms
;�`������P���8�T��t��������� ��X����0������(`���`����t���������zRx�$���FJw�?:*3$"D��p\�:p,�[E�U�p�PE�J����E��
A@�D��B�D�A �D0�
 AABEM
 AABG��FE�|,(�&E��A H(F0KA
DX�vE�p4th�
E�A�D }
CAEQ
CAK(�@��E�A�D b
CAH��<��rF�B�A �A(�G�x
(A ABBAL,P�F�D�A ��(B0K8D@QHAPK G
ABCQDG4|����uE�H�N N(K0`(D Q
CAA�����+����'�0���2HG b �T���6HCL J(C0QGNU��p�: �,�,�,�,�,�,�,�,�-���
�*�: �: ���o`	
p> �H8	���o���o�
���o�o.
���o�<  0@P`p�������� 0@P`p�������� 0@P`p��/�3�,�,��`��,GCC: (GNU) 8.5.0 20210514 (Red Hat 8.5.0-28)GA$3a1��*GA$3p1113��)GA*GA$annobin gcc 8.5.0 20210514GA$plugin name: gcc-annobinGA$running gcc 8.5.0 20210514GA*GA*GA!
GA*FORTIFYGA+GLIBCXX_ASSERTIONSGA*GOW*�GA*cf_protectionGA+omit_frame_pointerGA+stack_clashGA!stack_realignGA$3p1113`$�*GA*GA$annobin gcc 8.5.0 20210514GA$plugin name: gcc-annobinGA$running gcc 8.5.0 20210514GA*GA*GA!
GA*FORTIFYGA+GLIBCXX_ASSERTIONSGA*GOW*�GA*cf_protectionGA+omit_frame_pointerGA+stack_clashGA!stack_realign
GA*FORTIFY�*GA+GLIBCXX_ASSERTIONS�\$#6Me�������-�:F�g[�[���`P��l�
�: h1lM1gp�t1��������&�:6 \6 �M!�M!�E$�E$\$�-4`$J�'d~����9X`${�'��'��)���":Vk��'��)��)��*�;\x����)�**D;*h;*�g*�g*��*��*	�*8	:	0M	pc	�@ r	�: �	��	�: �	x4�	
�*�	�: �	�< �	�0
�@ 
p> #
	�8`	.
�
H	�
�
�*+�0`1�4�: �: �: �< p> @ �@ �A`)
G
�v\
x
�
�'��
`$r�
�
 �
(�@ /CPd����0��)u�@F@< @" 1J]qp*2��A �P$���*6���@ �

+
@ �A
Y
@ 
p
�
�@ ��
*+�
�
@*'�
P!��
�
�
,= Wr��"������[.annobin_ssa.c.annobin_ssa.c_end.annobin_ssa.c.hot.annobin_ssa.c_end.hot.annobin_ssa.c.unlikely.annobin_ssa.c_end.unlikely.annobin_ssa.c.startup.annobin_ssa.c_end.startup.annobin_ssa.c.exit.annobin_ssa.c_end.exit.annobin_zm_globals_ctor_clos_ssa.start.annobin_zm_globals_ctor_clos_ssa.endzm_globals_ctor_clos_ssa.annobin_zif_clos_ssa_test.start.annobin_zif_clos_ssa_test.end.annobin_zm_globals_dtor_clos_ssa.start.annobin_zm_globals_dtor_clos_ssa.endzm_globals_dtor_clos_ssa.annobin_zm_startup_clos_ssa.start.annobin_zm_startup_clos_ssa.end.annobin_class_exists.start.annobin_class_exists.endclass_exists.annobin_zm_info_clos_ssa.start.annobin_zm_info_clos_ssa.end.annobin_php_ssa_post_deactivate.start.annobin_php_ssa_post_deactivate.endphp_ssa_post_deactivate.annobin_zm_shutdown_clos_ssa.start.annobin_zm_shutdown_clos_ssa.end.annobin_zm_deactivate_clos_ssa.start.annobin_zm_deactivate_clos_ssa.end.annobin_zm_activate_clos_ssa.start.annobin_zm_activate_clos_ssa.end.annobin_get_module.start.annobin_get_module.endarginfo_clos_ssa_test.annobin_processors.c.annobin_processors.c_end.annobin_processors.c.hot.annobin_processors.c_end.hot.annobin_processors.c.unlikely.annobin_processors.c_end.unlikely.annobin_processors.c.startup.annobin_processors.c_end.startup.annobin_processors.c.exit.annobin_processors.c_end.exit.annobin_ssa_process_request.start.annobin_ssa_process_request.end.annobin_dump.c.annobin_dump.c_end.annobin_dump.c.hot.annobin_dump.c_end.hot.annobin_dump.c.unlikely.annobin_dump.c_end.unlikely.annobin_dump.c.startup.annobin_dump.c_end.startup.annobin_dump.c.exit.annobin_dump.c_end.exit.annobin_ssa_agent_dump.start.annobin_ssa_agent_dump.end.annobin_ssa_perf.c.annobin_ssa_perf.c_end.annobin_ssa_perf.c.hot.annobin_ssa_perf.c_end.hot.annobin_ssa_perf.c.unlikely.annobin_ssa_perf.c_end.unlikely.annobin_ssa_perf.c.startup.annobin_ssa_perf.c_end.startup.annobin_ssa_perf.c.exit.annobin_ssa_perf.c_end.exit.annobin_ssa_xp_get_current_delays.start.annobin_ssa_xp_get_current_delays.end.annobin_ssa_xp_get_delays_diff.start.annobin_ssa_xp_get_delays_diff.end.annobin_ssa_xp_is_throttled.start.annobin_ssa_xp_is_throttled.end.annobin_ssa_xp_print_delays.start.annobin_ssa_xp_print_delays.end.annobin_ssa_xp_snprint_delays.start.annobin_ssa_xp_snprint_delays.endderegister_tm_clones__do_global_dtors_auxcompleted.7303__do_global_dtors_aux_fini_array_entryframe_dummy__frame_dummy_init_array_entry__FRAME_END___fini__dso_handle_DYNAMIC__GNU_EH_FRAME_HDR__TMC_END___GLOBAL_OFFSET_TABLE__initzend_ini_boolean_displayer_cbzm_shutdown_clos_ssa__snprintf_chk@@GLIBC_2.3.4free@@GLIBC_2.2.5ssa_agent_dumpssa_process_request__errno_location@@GLIBC_2.2.5_ITM_deregisterTMCloneTablezend_register_ini_entries__isoc99_fscanf@@GLIBC_2.7_emalloc_56_edatafclose@@GLIBC_2.2.5OnUpdateBoolstrlen@@GLIBC_2.2.5__stack_chk_fail@@GLIBC_2.4setbuf@@GLIBC_2.2.5php_info_print_table_rowgettimeofday@@GLIBC_2.2.5OnUpdateStringssa_xp_get_current_delaysfputc@@GLIBC_2.2.5zm_info_clos_ssassa_functions__gmon_start__php_info_print_table_endmemcpy@@GLIBC_2.14display_ini_entriesssa_xp_print_delayszend_hash_str_findget_modulephp_info_print_table_colspan_headerssa_xp_snprint_delaysfdopen@@GLIBC_2.2.5__bss_start_efree__printf_chk@@GLIBC_2.3.4core_globalsclos_ssa_module_entryzend_is_auto_global_strzm_deactivate_clos_ssafopen@@GLIBC_2.2.5clos_ssa_globalsssa_xp_get_delays_diffzend_errorssa_xp_is_throttledzm_activate_clos_ssa_emallocconnect@@GLIBC_2.2.5fwrite@@GLIBC_2.2.5__fprintf_chk@@GLIBC_2.3.4executor_globals_ITM_registerTMCloneTablephp_info_print_table_startstrdup@@GLIBC_2.2.5strerror@@GLIBC_2.2.5__cxa_finalize@@GLIBC_2.2.5zm_startup_clos_ssazend_hash_findsocket@@GLIBC_2.2.5zif_clos_ssa_test.symtab.strtab.shstrtab.note.gnu.build-id.gnu.hash.dynsym.dynstr.gnu.version.gnu.version_r.rela.dyn.rela.plt.init.plt.sec.text.fini.rodata.eh_frame_hdr.eh_frame.note.gnu.property.init_array.fini_array.data.rel.ro.dynamic.got.data.bss.comment.gnu.build.attributes88$.���o``�8@		H���o.
.
�U���o�
�
`d8nBHH�x��s�~��p����*�*
�++���0�0��`1`1��4�4 ��: �:��: �:��: �:� ��< �<��p> p>��@ @� ��@ �@� 0�@-
�A`�@�D�|	�V�e#8.0/lib64/php/modules/clos_ssa.so000075500000067170151734570530012431 0ustar00ELF>@�f@8	@�4�4 �:�: �: �� �<�< �< ��888$$�4�4�4  S�td�4�4�4  P�td�0�0�0��Q�tdR�td�:�: �: 00GNU��%��d�#��R��z,��$��$		�3,-014689:<>?`�n�� �p�qX��||\��a[�U��BE�지B2)*��F�U�h駿g�`r����� �[k[(�)��e!͚���$� �Kg���4�y��E ���uU"�hP������, :��F"�6�)u�'��P$��@ ��A ��v0*+s���@ [`*'!P!�UP[)F��@ ��`$ro�*2��*6�@ 	�@ ��@< @__gmon_start___ITM_deregisterTMCloneTable_ITM_registerTMCloneTable__cxa_finalizezif_clos_ssa_test_emalloc_56zm_startup_clos_ssazend_register_ini_entriesclos_ssa_globalsfopensetbuffwrite__errno_locationstrerrorzend_errorstrlen_emallocmemcpyexecutor_globalszend_hash_find_efreezm_info_clos_ssaphp_info_print_table_startphp_info_print_table_colspan_headerphp_info_print_table_rowphp_info_print_table_enddisplay_ini_entries__fprintf_chkssa_process_requestzm_shutdown_clos_ssafclosezm_deactivate_clos_ssagettimeofdayzm_activate_clos_ssassa_xp_get_current_delayszend_is_auto_global_strcore_globalszend_hash_str_findstrdupget_moduleclos_ssa_module_entryOnUpdateBoolzend_ini_boolean_displayer_cbOnUpdateStringssa_functionssocketconnectfdopenssa_agent_dumpssa_xp_get_delays_diff__stack_chk_failfputc__isoc99_fscanfssa_xp_is_throttledssa_xp_print_delays__printf_chkssa_xp_snprint_delays__snprintf_chklibc.so.6_edata__bss_startclos_ssa.soGLIBC_2.14GLIBC_2.4GLIBC_2.7GLIBC_2.2.5GLIBC_2.3.4�����ii
�ii
�ui	�ti		�: �: ��: �: ; �,(; �,@; �,h; �,�; �,�; �,�; �,@< -P< �- @ �,X@ �,p@ x@ ��@ ��@ �,; 
H; 
�; 
; 9X; 9�; 9�; 9�? 9h@ 90; p; �; �; H< 7�? �? �? �? >�? $�? %�? )(@ ?0@ 38@ 1@@ 6H@ =P@ 8�> �> �> -�> :�> �> �> �> �> 	�> �> �> 
�> �> �> ? ,? ? ?  ? (? 0? 8? @? H? P? X? `? 2h? p?  x? !�? "�? #�? &�? '�? (�? )�? *�? +��H��H��) H��t��H����5b( �%c( ��h�������h��������h�������h�������h�������h�������h�������h��q������h��a������h	��Q������h
��A������h��1������h��!������h
��������h��������h������h�������h��������h�������h�������h�������h�������h�������h��q������h��a������h��Q������h��A������h��1������h��!������h��������h��������h������h �������h!��������h"�������h#�������h$�������h%�������h&��������%�% D���%�% D���%�% D���%�% D���%�% D���%�% D���%�% D���%�% D���%�% D���%�% D���%�% D���%�% D���%�% D���%�% D���%}% D���%u% D���%m% D���%e% D���%]% D���%U% D���%M% D���%E% D���%=% D���%5% D���%-% D���%%% D���%% D���%% D���%
% D���%% D���%�$ D���%�$ D���%�$ D���%�$ D���%�$ D���%�$ D���%�$ D���%�$ D���%�$ D��SH�����H�5<������H�$1�H�5#�����c���H��[�z���f.�H�=Q% H�J% H9�tH�V$ H��t	�����H�=!% H�5% H)�H��H��H��?H�H�tH�E$ H��t��fD�����=�$ u+UH�="$ H��tH�=� ����d�����$ ]������w������1��f�GH�G H�G(H�G0H�GH�G�G�fD��SH�����fo�H�H�a extensH�H�@H�@@H�x(�@0ion!�@4H��C[�D��SH��H� H��t
����H�C H�{(H��t
����H�C(H�{0H��t
���H�C0�C[���SH�=� ����H��" �{trH�{H��t%H�5�
���H�CH��tX1�H������{tDH�KH��t;��H�=�
�����{tH�KH��t��H�=�
��1�[��7����8� ���H�S�H�5pH��1�����@ATI��USH���P���H�x H��H�����H��L��H��H�H�{H�H�CH�k���H��! H���D+H�������KH��tJ���@u�+u���D$H��t�O����D$H��[]A\�f�����D$H��[]A\�fD1���@t���ff.�@��SH�D! �{tH�KH��t��H�=�����;��H�C(H�{ H����H����H�sHH�SPL�K8H�C@H��I��L)�I)����{t'H�{H��tH��RH�WV�P1��a���H�� 1����H�{ H��t
�X���H�C H�C(H��u'H�{0H��t
�9���H�C0�C1�[�f�H������H�C(��fDH��u�뺐H��I��@B�{t��V���f.���SH�  �{t`H�KH��tW��H�=�����{t;H�KH��t2��H�=��j����{tH�{H��t
���H�C1�[�f.���USH��H�� �{t9H�KH��t0��H�=?�
����;u�C��u;H��1�[]�@�;t�1�H�{H���H�=#������u@�C1�@�k��t�H�KH��t���H�=���H��1�[]�f.�H�=�
������t��k@��u�C�q���fDH�KH��t��H�=�
�I����C�v����C�u������USH��H� �{taH�KH������H�=�
����;���{tH�KH��t��H�=�
����H��1�[]���;t��C�{��H�{(��H�{ ���{t)H�KH��t �!�H�=��j���f.�1�H�{8�5���H�{X�L���������Q���fD�;�g����C�f��{�C�c���H�KH���V�����H�=�	����;���f.��H�=�	�C�k���H�- �H�5u	H�C H�����H��t
�x�EH����	H�5K	H�C(����H��t
�x��H����H�5&	H�C0���H��t
�x���{��H�{H��tH�K H�-��H��H��HD�1������{tTH�{H��tKH�K(H���H��HD�1�����{t'H�{H��tH�K0H���H��HD�1����H�{(tH�{ �3����C�*���f.�H�8H�����H�C0�4���H�8H�����H�C(���H�8H���t���H�C ���ff.���H�} �@��AUATUSH��H�h dH�%(H�D$x1��{tH�KH��t��H�=h	����H�C H��t:���u�1�� H�����t"��v�'��"��H�����u�f��{�I��1ҾI�l$fo
�f�$D$fo
H�E`�EhEf�E E0E@EP���A�Ņ��=�nL�������H�5�D���g�I��H���K�����Hǃ�Hǃ�L�����L���H�1���H�t$xdH34%(��H�Ĉ[]A\A]ù/��\���������H�5�H�=��I��H���n����{�H�KH���
�!�H�=��,���r���@H��������ƃ�Hǃ�Hǃ��"���f.��{��H�kH������H���H��1����Bf.��{t*L�cM��t!���H��L��D�H��1���D���X�{t*H�{H��t!H�
H���1��O��������|���fDH���H�{X���H���H���H���H����/�����{�v���L�cM���i����$�H��L��D�H��1�����C����^�f.�@��ATI��USH�� �{txH�KH�����H�=K�e�H�KHL�CPH+K8�CL+C@�Ci�@BDń��H�{H����A��H��1��'���f�H�K8H�CHH�kPH)�H+k@��i�@B�H��L����{H��H���I��L�K(L��LE�H�H�5_HE�H�C H��HD�M��LD�H�s0ARAPL�mH��WL��RLE�H���UP1���H��0�{uG[]A\�f�H�KHL�CPH+K8L+C@x^i�@BB�,�f�H��i�@B��(@BH�K8�7���fD[L��]�
A\���H��I��@B����H��I��@Bi�@BD�������UH�5oSH��H�=gH���`�H��tIH��H��H�C H��PH�KL�KH��L�C1�H�5L1����ZH��Y�������H����[]û������ff.���H�H)H�GH)FH�GH)FH�GH)FH�G H)F �D���H�WH9Vt�@H�G H9F �����f���H��H�O�w H�5�L�O1�L�GH���S�H���ff.���H���r L�~1��rH������r�rL�
���H��(���H��H���a+Enter MINIT_FUNCTION
Exit MINIT_FUNCTION
EnabledSSA SupportEnter PRSHUTDOWN_FUNCTION
Enter MSHUTDOWN_FUNCTION
Exit MSHUTDOWN_FUNCTION
Enter RSHUTDOWN_FUNCTION
wpwpdbIt is wordpress site
Exit RSHUTDOWN_FUNCTION
nullEnter RINIT_FUNCTION
Extracting Request-data
_SERVERREQUEST_URIHTTP_HOSTREQUEST_SCHEMEREQUEST_URI: %s
HTTP_HOST: %s
REQUEST_SCHEME: %s
Exit RINIT_FUNCTION
clos_ssa.enabled1clos_ssa.to_fileclos_ssa.debugclos_ssa.debug_fileclos_ssa1.0API20200930,NTSclos_ssa_testCan't open clos_ssa.debug_file: "%s", %sCloudlinux PHP slow site analyzerRequest executed for %ld.%06ld from %ld.%06ld until %ld.%06ld
Request-data already initialized
It works clos_ssPROCESS REQUEST STARTED
/tmp/ssa_to_agent.logagentFailed to open to_agent.log file
ssa_demon_open: socket(PF_UNIX, SOCK_STREAM, 0) failed: %d
ssa_demon_open: connect(%s) failed: %d
ssa_demon_open: fdopen(socket=%s) failed: %d
Failed to open stream to %s processor
/opt/alt/clos_ssa/run/ssa.socktruefalsehttp?DUMP_AGENT
Request_duration: %ld.%06ld, micro: %u
{ "timestamp": "%ld", "url": "%s://%s%s", "duration": %u, "hitting_limits": %s, "throttled_time": %lu, "io_throttled_time": %lu, "wordpress": %s }ro/proc/lve/task_sched_stat%lu %lu %lu %lu %luDelays: total: %lu ms, sleep (U + S): %lu ms, iowait: %lu ms, throttle(CPU): %lu ms, throttle(IO): %lu ms
;�@�����0��@�����80�T��t�����p� ��X����������(`���`����t���������zRx�$p��FJw�?:*3$"D��p\0�:p\�[E�U���PE�J����E��
A@�t��B�D�A �D0�
 AABCM
 AABGp�FE�|,(��&E��A H(F0KC
JX��vE�p4tH�	E�A�D }
CAEQ
CAK(� ��E�A�D b
CAH���<���rF�B�A �A(�G�x
(A ABBAL,0��F�D�A ��(B0K8D@QHAPK G
ABCA
DGL4|����uE�H�N N(K0`(D Q
CAA�����+����'�0���2HG b �T���6HCL J(C0QGNU���: �,�,�,�,�,�,�,-�-���
+�: �: ���o`	
p> �H8	���o���o�
���o�o.
���o�<  0@P`p�������� 0@P`p�������� 0@P`p���=4�,�,����,GCC: (GNU) 8.5.0 20210514 (Red Hat 8.5.0-28)GA$3a1�+GA$3p1113�)GA*GA$annobin gcc 8.5.0 20210514GA$plugin name: gcc-annobinGA$running gcc 8.5.0 20210514GA*GA*GA!
GA*FORTIFYGA+GLIBCXX_ASSERTIONSGA*GOW*�GA*cf_protectionGA+omit_frame_pointerGA+stack_clashGA!stack_realignGA$3p1113`$+GA*GA$annobin gcc 8.5.0 20210514GA$plugin name: gcc-annobinGA$running gcc 8.5.0 20210514GA*GA*GA!
GA*FORTIFYGA+GLIBCXX_ASSERTIONSGA*GOW*�GA*cf_protectionGA+omit_frame_pointerGA+stack_clashGA!stack_realign
GA*FORTIFY�)GA+GLIBCXX_ASSERTIONS
GA*FORTIFY�)+GA+GLIBCXX_ASSERTIONS\$#F6FMeF�F�F�F�F�J-:FJg������P���
; @1�M�g��t�F������&�:6 \6 �I!�I!�E$�E$\$�- 4`$J�'dF~F�F�F�F�FF9FX`${�'��'��)�F�F�FF"F:FVFkF��'��)��)�+�FFF;F\FxF�F�F��)�%*%*D[*h[*��*��*��*��*	+8	P:	�M	�c	�@ r	�: �	�	�: �	�4�	
+�	�: �	�< �	�0
�@ 
p> #
	�8`	.
�
H	�
�
+ +�0�1�4�: �: �: �< p> @ �@ �A`)
G
�v\
x
�
�'��
`$r�
�
 �
(�@ /CPd����0��)u�F@< @" 1J]q�*2��A �P$���*6���@ �

+
@ �A
Y
@ 	p
�
�@ ��
0*+�
�
`*'�
P!��
�
�
,= Wr��"�����P[.annobin_ssa.c.annobin_ssa.c_end.annobin_ssa.c.hot.annobin_ssa.c_end.hot.annobin_ssa.c.unlikely.annobin_ssa.c_end.unlikely.annobin_ssa.c.startup.annobin_ssa.c_end.startup.annobin_ssa.c.exit.annobin_ssa.c_end.exit.annobin_zm_globals_ctor_clos_ssa.start.annobin_zm_globals_ctor_clos_ssa.endzm_globals_ctor_clos_ssa.annobin_zif_clos_ssa_test.start.annobin_zif_clos_ssa_test.end.annobin_zm_globals_dtor_clos_ssa.start.annobin_zm_globals_dtor_clos_ssa.endzm_globals_dtor_clos_ssa.annobin_zm_startup_clos_ssa.start.annobin_zm_startup_clos_ssa.end.annobin_class_exists.start.annobin_class_exists.endclass_exists.annobin_zm_info_clos_ssa.start.annobin_zm_info_clos_ssa.end.annobin_php_ssa_post_deactivate.start.annobin_php_ssa_post_deactivate.endphp_ssa_post_deactivate.annobin_zm_shutdown_clos_ssa.start.annobin_zm_shutdown_clos_ssa.end.annobin_zm_deactivate_clos_ssa.start.annobin_zm_deactivate_clos_ssa.end.annobin_zm_activate_clos_ssa.start.annobin_zm_activate_clos_ssa.end.annobin_get_module.start.annobin_get_module.endarginfo_clos_ssa_test.annobin_processors.c.annobin_processors.c_end.annobin_processors.c.hot.annobin_processors.c_end.hot.annobin_processors.c.unlikely.annobin_processors.c_end.unlikely.annobin_processors.c.startup.annobin_processors.c_end.startup.annobin_processors.c.exit.annobin_processors.c_end.exit.annobin_ssa_process_request.start.annobin_ssa_process_request.end.annobin_dump.c.annobin_dump.c_end.annobin_dump.c.hot.annobin_dump.c_end.hot.annobin_dump.c.unlikely.annobin_dump.c_end.unlikely.annobin_dump.c.startup.annobin_dump.c_end.startup.annobin_dump.c.exit.annobin_dump.c_end.exit.annobin_ssa_agent_dump.start.annobin_ssa_agent_dump.end.annobin_ssa_perf.c.annobin_ssa_perf.c_end.annobin_ssa_perf.c.hot.annobin_ssa_perf.c_end.hot.annobin_ssa_perf.c.unlikely.annobin_ssa_perf.c_end.unlikely.annobin_ssa_perf.c.startup.annobin_ssa_perf.c_end.startup.annobin_ssa_perf.c.exit.annobin_ssa_perf.c_end.exit.annobin_ssa_xp_get_current_delays.start.annobin_ssa_xp_get_current_delays.end.annobin_ssa_xp_get_delays_diff.start.annobin_ssa_xp_get_delays_diff.end.annobin_ssa_xp_is_throttled.start.annobin_ssa_xp_is_throttled.end.annobin_ssa_xp_print_delays.start.annobin_ssa_xp_print_delays.end.annobin_ssa_xp_snprint_delays.start.annobin_ssa_xp_snprint_delays.endderegister_tm_clones__do_global_dtors_auxcompleted.7303__do_global_dtors_aux_fini_array_entryframe_dummy__frame_dummy_init_array_entry__FRAME_END___fini__dso_handle_DYNAMIC__GNU_EH_FRAME_HDR__TMC_END___GLOBAL_OFFSET_TABLE__initzend_ini_boolean_displayer_cbzm_shutdown_clos_ssa__snprintf_chk@@GLIBC_2.3.4free@@GLIBC_2.2.5ssa_agent_dumpssa_process_request__errno_location@@GLIBC_2.2.5_ITM_deregisterTMCloneTablezend_register_ini_entries__isoc99_fscanf@@GLIBC_2.7_emalloc_56_edatafclose@@GLIBC_2.2.5OnUpdateBoolstrlen@@GLIBC_2.2.5__stack_chk_fail@@GLIBC_2.4setbuf@@GLIBC_2.2.5php_info_print_table_rowgettimeofday@@GLIBC_2.2.5OnUpdateStringssa_xp_get_current_delaysfputc@@GLIBC_2.2.5zm_info_clos_ssassa_functions__gmon_start__php_info_print_table_endmemcpy@@GLIBC_2.14display_ini_entriesssa_xp_print_delayszend_hash_str_findget_modulephp_info_print_table_colspan_headerssa_xp_snprint_delaysfdopen@@GLIBC_2.2.5__bss_start_efree__printf_chk@@GLIBC_2.3.4core_globalsclos_ssa_module_entryzend_is_auto_global_strzm_deactivate_clos_ssafopen@@GLIBC_2.2.5clos_ssa_globalsssa_xp_get_delays_diffzend_errorssa_xp_is_throttledzm_activate_clos_ssa_emallocconnect@@GLIBC_2.2.5fwrite@@GLIBC_2.2.5__fprintf_chk@@GLIBC_2.3.4executor_globals_ITM_registerTMCloneTablephp_info_print_table_startstrdup@@GLIBC_2.2.5strerror@@GLIBC_2.2.5__cxa_finalize@@GLIBC_2.2.5zm_startup_clos_ssazend_hash_findsocket@@GLIBC_2.2.5zif_clos_ssa_test.symtab.strtab.shstrtab.note.gnu.build-id.gnu.hash.dynsym.dynstr.gnu.version.gnu.version_r.rela.dyn.rela.plt.init.plt.sec.text.fini.rodata.eh_frame_hdr.eh_frame.note.gnu.property.init_array.fini_array.data.rel.ro.dynamic.got.data.bss.comment.gnu.build.attributes88$.���o``�8@		H���o.
.
�U���o�
�
`d8nBHH�x��s�~��p��++
� + +� ��0�0���1�1��4�4 ��: �:��: �:��: �:� ��< �<��p> p>��@ @� ��@ �@� 0�@-
�A`�@lHE�|	�V�e#8.4/lib64/php/modules/clos_ssa.so000075500000067160151734570530012434 0ustar00ELF>�@�f@8	@�4�4 �:�: �: �� �<�< �< ��888$$�4�4�4  S�td�4�4�4  P�td�0�0�0��Q�tdR�td�:�: �: PPGNU~�%C�ڀ�2,�{�
Qp��d,��$��$		�3,-014689:<>?`�n�� �p�qX��||\��a[�U��BE�지B2)*��F�U�h駿g�`r����� �[k[(�)��e!͚���'� g����>�|�U�O ����xX%�kS���	��, =�F"9�)u�'��@$��@ ��A ��v' *+s����@ \P*'$@!�U@[,�F��@ ��P$rp�*2��*60 	�@ �� < `__gmon_start___ITM_deregisterTMCloneTable_ITM_registerTMCloneTable__cxa_finalizezif_clos_ssa_test_emalloc_56zm_startup_clos_ssazend_register_ini_entries_exclos_ssa_globalsfopensetbuffwrite__errno_locationstrerrorzend_errorstrlen_emallocmemcpyexecutor_globalszend_hash_find_efreezm_info_clos_ssaphp_info_print_table_startphp_info_print_table_colspan_headerphp_info_print_table_rowphp_info_print_table_enddisplay_ini_entries__fprintf_chkssa_process_requestzm_shutdown_clos_ssafclosezm_deactivate_clos_ssagettimeofdayzm_activate_clos_ssassa_xp_get_current_delayszend_is_auto_global_strcore_globalszend_hash_str_find__zend_strdupget_moduleclos_ssa_module_entryOnUpdateBoolzend_ini_boolean_displayer_cbOnUpdateStringssa_functionssocketconnectfdopenssa_agent_dumpssa_xp_get_delays_diff__stack_chk_failfputcfscanfssa_xp_is_throttledssa_xp_print_delays__printf_chkssa_xp_snprint_delays__snprintf_chklibc.so.6_edata__bss_startclos_ssa.soGLIBC_2.14GLIBC_2.4GLIBC_2.2.5GLIBC_2.3.4�����ii
�ui	�ti	�: ��: ��: �: �: �,; �, ; �,H; �,`; �,�; �,�; �, < -0< �- @ �,X@ �,p@ x@ ��@ ��@ �,�: 	(; 	h; 	�: 98; 9x; 9�; 9�? 9h@ 9; P; �; �; (< 7�? �? �? �? >�? %�? &�? )(@ ?0@ 38@ 1@@ 6H@ =P@ 8�> �> �> -�> :�> �> �> �> �> 
�> �> �> 
�> �> �> ? ,? ? ?  ? (? 0? 8? @? H? P? X? `? h? 2p?  x? !�? "�? #�? $�? '�? (�? )�? *�? +��H��H��) H��t��H����5r( �%s( ��h�������h��������h�������h�������h�������h�������h�������h��q������h��a������h	��Q������h
��A������h��1������h��!������h
��������h��������h������h�������h��������h�������h�������h�������h�������h�������h��q������h��a������h��Q������h��A������h��1������h��!������h��������h��������h������h �������h!��������h"�������h#�������h$�������h%�������h&��������%�% D���%�% D���%�% D���%�% D���%�% D���%�% D���%�% D���%�% D���%�% D���%�% D���%�% D���%�% D���%�% D���%�% D���%�% D���%�% D���%}% D���%u% D���%m% D���%e% D���%]% D���%U% D���%M% D���%E% D���%=% D���%5% D���%-% D���%%% D���%% D���%% D���%
% D���%% D���%�$ D���%�$ D���%�$ D���%�$ D���%�$ D���%�$ D���%�$ D��SH�����H�5L������H�41�H�53�����s���H��[���f.�H�=a% H�Z% H9�tH�f$ H��t	�����H�=1% H�5*% H)�H��H��H��?H�H�tH�U$ H��t��fD�����=% u+UH�=2$ H��tH�=� ����d�����$ ]������w������1��f�GH�G H�G(H�G0H�GH�G�G�fD��SH�����fo�H�H�a extensH�H�@H�@@H�x(�@0ion!�@4H��C[�D��SH��H� H��t
����H�C H�{(H��t
����H�C(H�{0H��t
���H�C0�C[���S��H�=� ���H��" �{trH�{H��t%H�5����H�CH��tX1�H������{tDH�KH��t;��H�=�
�#����{tH�KH��t��H�=�
���1�[��5����8����H�S�H�5~H��1�����f�ATI��USH���@���H�x H��H�����H��L��H��H�H�{H�H�CH�k���H��! H���D+H�������KH��tJ���@u�+u���D$H��t�O����D$H��[]A\�f�����D$H��[]A\�fD1���@t���ff.�@��SH�T! �{tH�KH��t��H�=������;��H�C(H�{ H����H����H�sHH�SPL�K8H�C@H��I��L)�I)����{t'H�{H��tH��RH�gV�P1��q���H�� 1����H�{ H��t
�X���H�C H�C(H��u'H�{0H��t
�9���H�C0�C1�[�f�H������H�C(��fDH��u�뺐H��I��@B�{t��V���f.���SH�$  �{t`H�KH��tW��H�=�����{t;H�KH��t2��H�=��z����{tH�{H��t
����H�C1�[�f.���USH��H�� �{t9H�KH��t0��H�=O�����;u�C��u;H��1�[]�@�;t�1�H�{H���H�=3������u@�C1�@�k��t�H�KH��t���H�= ���H��1�[]�f.�H�=�
������t��k@��u�C�q���fDH�KH��t��H�=�
�Y����C�v����C�u������USH��H�� �{taH�KH������H�=�
�����;���{tH�KH��t��H�=�
����H��1�[]���;t��C�{��H�{(��H�{ ���{t)H�KH��t �!�H�=��z���f.�1�H�{8�%���H�{X�L���������Q���fD�;�g����C�f��{�C�c���H�KH���V�����H�=�	����;���f.��H�=�	�C�{���H�-$ �H�5�	H�C H�������H��t
�x�EH����	H�5[	H�C(����H��t
�x��H����H�56	H�C0���H��t
�x���{��H�{H��tH�K H�-��H��H��HD�1������{tTH�{H��tKH�K(H���H��HD�1����{t'H�{H��tH�K0H���H��HD�1�����H�{(tH�{ �3����C�*���f.�H�8H�����H�C0�4���H�8H�����H�C(���H�8H�����H�C ���ff.���H�� �@��AUATUSH��H�x dH�%(H�D$x1��{tH�KH��t��H�=x	���H�C H��t:���u�1�� H�����t"��v�'��"��H�����u�f��{�I��1ҾI�l$fo*
�f�$D$fo$
H�E`�EhEf�E E0E@EP���A�Ņ��=�nL����������H�5�D���w�I��H���K�����Hǃ�Hǃ�L�����L���(�1���H�t$xdH34%(��H�Ĉ[]A\A]ù/��\���������H�5�H�=#�%�I��H���n����{�H�KH���
�!�H�=	�<���r���@H��������ƃ�Hǃ�Hǃ��"���f.��{��H�kH������H���H��1�����Bf.��{t*L�cM��t!���H��L��D�H��1���D���X�{t*H�{H��t!H�
!H���1��_��������|���fDH���H�{X���H���H���H���H����/�����{�v���L�cM���i����$�H��L��D�H��1�����C����N�f.�@��ATI��USH�� �{txH�KH�����H�=[�u�H�KHL�CPH+K8�CL+C@�Ci�@BDń��H�{H����A��H�#�1��7���f�H�K8H�CHH�kPH)�H+k@��i�@B�H��L����{H��H���I��L�K(L��LE�H�H�5oHE�H�C H��HD�M��LD�H�s0ARAPL�}H��WL��RLE�H���UP1���H��0�{uG[]A\�f�H�KHL�CPH+K8L+C@x^i�@BB�,�f�H��i�@B��(@BH�K8�7���fD[L��]�
A\���H��I��@B����H��I��@Bi�@BD�������UH�5SH��H�=wH���p�H��tIH��H��H�C H��PH�KL�KH��L�C1�H�5\1��]�ZH��Y��������H����[]û������ff.���H�H)H�GH)FH�GH)FH�GH)FH�G H)F �D���H�WH9Vt�@H�G H9F �����f���H��H�O�w H�5�L�O1�L�GH���c�H���ff.���H���r L��1��rH������r�rL�
���H��(���H��H���a+Enter MINIT_FUNCTION
Exit MINIT_FUNCTION
EnabledSSA SupportEnter PRSHUTDOWN_FUNCTION
Enter MSHUTDOWN_FUNCTION
Exit MSHUTDOWN_FUNCTION
Enter RSHUTDOWN_FUNCTION
wpwpdbIt is wordpress site
Exit RSHUTDOWN_FUNCTION
nullEnter RINIT_FUNCTION
Extracting Request-data
_SERVERREQUEST_URIHTTP_HOSTREQUEST_SCHEMEREQUEST_URI: %s
HTTP_HOST: %s
REQUEST_SCHEME: %s
Exit RINIT_FUNCTION
clos_ssa.enabled1clos_ssa.to_fileclos_ssa.debugclos_ssa.debug_fileclos_ssa1.0API20240924,NTSclos_ssa_testCan't open clos_ssa.debug_file: "%s", %sCloudlinux PHP slow site analyzerRequest executed for %ld.%06ld from %ld.%06ld until %ld.%06ld
Request-data already initialized
It works clos_ssPROCESS REQUEST STARTED
/tmp/ssa_to_agent.logagentFailed to open to_agent.log file
ssa_demon_open: socket(PF_UNIX, SOCK_STREAM, 0) failed: %d
ssa_demon_open: connect(%s) failed: %d
ssa_demon_open: fdopen(socket=%s) failed: %d
Failed to open stream to %s processor
/opt/alt/clos_ssa/run/ssa.socktruefalsehttp?DUMP_AGENT
Request_duration: %ld.%06ld, micro: %u
{ "timestamp": "%ld", "url": "%s://%s%s", "duration": %u, "hitting_limits": %s, "throttled_time": %lu, "io_throttled_time": %lu, "wordpress": %s }ro/proc/lve/task_sched_stat%lu %lu %lu %lu %luDelays: total: %lu ms, sleep (U + S): %lu ms, iowait: %lu ms, throttle(CPU): %lu ms, throttle(IO): %lu ms
;�0����� ��0�p���8 �T��t�����`� p�Xp����������(P���`����t�������zRx�$`��FJw�?:*3$"D��p\ �:pL�[E�U���PE�J����E��
A@�d��B�D�A �D0�
 AABCM
 AABG`�FE�|,(��&E��A H(F0KC
JX��vE�p4t8�	E�A�D }
CAEQ
CAK(���E�A�D b
CAH���<���rF�B�A �A(�G�x
(A ABBAL, ��F�D�A ��(B0K8D@QHAPK G
ABCA
DGL4|����uE�H�N N(K0`(D Q
CAA���+����'� ���2HG b �D���6HCL J(C0QGNU����: �,�,�,�,�,�,�,-�-���
�*�: �: ���o`	
p> �0�
8	���o���o�
���o�o$
���o�<  0@P`p�������� 0@P`p�������� 0@P`p��4�,�,����,GCC: (GNU) 8.5.0 20210514 (Red Hat 8.5.0-28)GA$3a1�+GA$3p1113��)GA*GA$annobin gcc 8.5.0 20210514GA$plugin name: gcc-annobinGA$running gcc 8.5.0 20210514GA*GA*GA!
GA*FORTIFYGA+GLIBCXX_ASSERTIONSGA*GOW*�GA*cf_protectionGA+omit_frame_pointerGA+stack_clashGA!stack_realignGA$3p1113P$�*GA*GA$annobin gcc 8.5.0 20210514GA$plugin name: gcc-annobinGA$running gcc 8.5.0 20210514GA*GA*GA!
GA*FORTIFYGA+GLIBCXX_ASSERTIONSGA*GOW*�GA*cf_protectionGA+omit_frame_pointerGA+stack_clashGA!stack_realign
GA*FORTIFY�)GA+GLIBCXX_ASSERTIONS
GA*FORTIFY�)�*GA+GLIBCXX_ASSERTIONSL$#666M�e6�6�6�6�6�:-:F:g�������P���o�: @1�Mqg��t��6�q����&�:& \& �9!�9!�5$�5$L$�- 4P$J�'d6~6�6�6�6�6696XP${�'��'��)�6�6�66"6:6V6k6��'��)��)��*�666;6\6x6�6�6��)�**DK*hK*�w*�w*��*��*	�*8	@:	pM	�c	�@ r	�: �	��	�: �	�4�	
�*�	�: �	�< �	�0
�@ 
p> #
	�8`	$
�
�
0	�
��
�* +�0�1�4�: �: �: �< p> @ �@ �A`)
G
�v\
x
�
�'��
P$r�
�
 �
�
�@ �
)=Ym����
��)u���F < ` ;Tg{�*2��A �@$���*6���@ 

(
5
@ �K
c
0 	z
�
�@ ��
 *+�
�
P*'�
@!��
�
6G a|�"������@[.annobin_ssa.c.annobin_ssa.c_end.annobin_ssa.c.hot.annobin_ssa.c_end.hot.annobin_ssa.c.unlikely.annobin_ssa.c_end.unlikely.annobin_ssa.c.startup.annobin_ssa.c_end.startup.annobin_ssa.c.exit.annobin_ssa.c_end.exit.annobin_zm_globals_ctor_clos_ssa.start.annobin_zm_globals_ctor_clos_ssa.endzm_globals_ctor_clos_ssa.annobin_zif_clos_ssa_test.start.annobin_zif_clos_ssa_test.end.annobin_zm_globals_dtor_clos_ssa.start.annobin_zm_globals_dtor_clos_ssa.endzm_globals_dtor_clos_ssa.annobin_zm_startup_clos_ssa.start.annobin_zm_startup_clos_ssa.end.annobin_class_exists.start.annobin_class_exists.endclass_exists.annobin_zm_info_clos_ssa.start.annobin_zm_info_clos_ssa.end.annobin_php_ssa_post_deactivate.start.annobin_php_ssa_post_deactivate.endphp_ssa_post_deactivate.annobin_zm_shutdown_clos_ssa.start.annobin_zm_shutdown_clos_ssa.end.annobin_zm_deactivate_clos_ssa.start.annobin_zm_deactivate_clos_ssa.end.annobin_zm_activate_clos_ssa.start.annobin_zm_activate_clos_ssa.end.annobin_get_module.start.annobin_get_module.endarginfo_clos_ssa_test.annobin_processors.c.annobin_processors.c_end.annobin_processors.c.hot.annobin_processors.c_end.hot.annobin_processors.c.unlikely.annobin_processors.c_end.unlikely.annobin_processors.c.startup.annobin_processors.c_end.startup.annobin_processors.c.exit.annobin_processors.c_end.exit.annobin_ssa_process_request.start.annobin_ssa_process_request.end.annobin_dump.c.annobin_dump.c_end.annobin_dump.c.hot.annobin_dump.c_end.hot.annobin_dump.c.unlikely.annobin_dump.c_end.unlikely.annobin_dump.c.startup.annobin_dump.c_end.startup.annobin_dump.c.exit.annobin_dump.c_end.exit.annobin_ssa_agent_dump.start.annobin_ssa_agent_dump.end.annobin_ssa_perf.c.annobin_ssa_perf.c_end.annobin_ssa_perf.c.hot.annobin_ssa_perf.c_end.hot.annobin_ssa_perf.c.unlikely.annobin_ssa_perf.c_end.unlikely.annobin_ssa_perf.c.startup.annobin_ssa_perf.c_end.startup.annobin_ssa_perf.c.exit.annobin_ssa_perf.c_end.exit.annobin_ssa_xp_get_current_delays.start.annobin_ssa_xp_get_current_delays.end.annobin_ssa_xp_get_delays_diff.start.annobin_ssa_xp_get_delays_diff.end.annobin_ssa_xp_is_throttled.start.annobin_ssa_xp_is_throttled.end.annobin_ssa_xp_print_delays.start.annobin_ssa_xp_print_delays.end.annobin_ssa_xp_snprint_delays.start.annobin_ssa_xp_snprint_delays.endderegister_tm_clones__do_global_dtors_auxcompleted.7303__do_global_dtors_aux_fini_array_entryframe_dummy__frame_dummy_init_array_entry__FRAME_END___fini__dso_handle_DYNAMIC__GNU_EH_FRAME_HDR__TMC_END___GLOBAL_OFFSET_TABLE__initzend_ini_boolean_displayer_cbzm_shutdown_clos_ssa__snprintf_chk@@GLIBC_2.3.4free@@GLIBC_2.2.5ssa_agent_dumpssa_process_request__errno_location@@GLIBC_2.2.5_ITM_deregisterTMCloneTable_emalloc_56_edatafclose@@GLIBC_2.2.5__zend_strdupOnUpdateBoolstrlen@@GLIBC_2.2.5__stack_chk_fail@@GLIBC_2.4setbuf@@GLIBC_2.2.5php_info_print_table_rowgettimeofday@@GLIBC_2.2.5OnUpdateStringfscanf@@GLIBC_2.2.5ssa_xp_get_current_delaysfputc@@GLIBC_2.2.5zm_info_clos_ssassa_functions__gmon_start__zend_register_ini_entries_exphp_info_print_table_endmemcpy@@GLIBC_2.14display_ini_entriesssa_xp_print_delayszend_hash_str_findget_modulephp_info_print_table_colspan_headerssa_xp_snprint_delaysfdopen@@GLIBC_2.2.5__bss_start_efree__printf_chk@@GLIBC_2.3.4core_globalsclos_ssa_module_entryzend_is_auto_global_strzm_deactivate_clos_ssafopen@@GLIBC_2.2.5clos_ssa_globalsssa_xp_get_delays_diffzend_errorssa_xp_is_throttledzm_activate_clos_ssa_emallocconnect@@GLIBC_2.2.5fwrite@@GLIBC_2.2.5__fprintf_chk@@GLIBC_2.3.4executor_globals_ITM_registerTMCloneTablephp_info_print_table_startstrerror@@GLIBC_2.2.5__cxa_finalize@@GLIBC_2.2.5zm_startup_clos_ssazend_hash_findsocket@@GLIBC_2.2.5zif_clos_ssa_test.symtab.strtab.shstrtab.note.gnu.build-id.gnu.hash.dynsym.dynstr.gnu.version.gnu.version_r.rela.dyn.rela.plt.init.plt.sec.text.fini.rodata.eh_frame_hdr.eh_frame.note.gnu.property.init_array.fini_array.data.rel.ro.dynamic.got.data.bss.comment.gnu.build.attributes88$.���o``�8@		H���o$
$
�U���o�
�
Pd�
�
8nB00�x��s�~��p�����*�*
� + +� ��0�0���1�1��4�4 ��: �:��: �:��: �:� ��< �<��p> p>��@ @� ��@ �@� 0�@-
�A`�@lHE�|	�V��e#5.5/lib64/php/modules/clos_ssa.so000075500000066610151734570530012431 0ustar00ELF>p@f@8	@�2�2 :: : �� �<�< �< ��888$$�2�2�2  S�td�2�2�2  P�td�.�.�.��Q�tdR�td:: : ��GNUW���odaXh�^� ��{(��$��$		�3(),-024568:;`�n�� �p�qX��||\��a[�U��BE�지B2)*��F�U�h駿g�`r����� �[k[(�)��e!͚��{q� � ���M�v�� ��R�Xa��g����, 7n�F"�3�'u�&�up"��@ ��A ��v0(+v����@ 0`(' FUp)&F��@ ���"rD�(2e�(6�
�@ ��`< @__gmon_start___ITM_deregisterTMCloneTable_ITM_registerTMCloneTable__cxa_finalizezif_clos_ssa_test_estrndupfreezm_startup_clos_ssazend_register_ini_entriesclos_ssa_globalsfopensetbuffwrite__errno_locationstrerrorzend_errorstrlenexecutor_globalszend_hash_find__stack_chk_failzm_info_clos_ssaphp_info_print_table_startphp_info_print_table_colspan_headerphp_info_print_table_rowphp_info_print_table_enddisplay_ini_entries__fprintf_chkssa_process_requestzm_shutdown_clos_ssafclosezm_deactivate_clos_ssagettimeofdayzm_activate_clos_ssassa_xp_get_current_delayszend_is_auto_globalcore_globalsstrdupget_moduleclos_ssa_module_entryOnUpdateBoolzend_ini_boolean_displayer_cbOnUpdateStringssa_functionssocketconnectfdopenssa_agent_dumpssa_xp_get_delays_difffputc__isoc99_fscanfssa_xp_is_throttledssa_xp_print_delays__printf_chkssa_xp_snprint_delays__snprintf_chklibc.so.6_edata__bss_startclos_ssa.soGLIBC_2.4GLIBC_2.7GLIBC_2.2.5GLIBC_2.3.4�ii
�ii
�ui	�ti	�:  : � :  : H: �*x: �*�: �*�: +; �*H; +�; �*`< ,+p< , @ +X@ +p@ 0x@ ��@ `�@ +X: 	�: 	(; 	h: 5�: 58; 5�; 5�? 5h@ 5�: ; p; �; h< 3�? �? �? �? :�?  �? !�? %(@ ;0@ /8@ -@@ 2H@ 9P@ 4�> �> �> )�> 6�> �> �> �> �> 
�> �> ? 
? ? ?  ? ((? 0? 8? @? H? P? X? `? .h? p? x? �? �? �? "�? #�? $�? %�? &�? '��H��H��* H��t��H����5�) �%�) ��h�������h��������h�������h�������h�������h�������h�������h��q������h��a������h	��Q������h
��A������h��1������h��!������h
��������h��������h������h�������h��������h�������h�������h�������h�������h�������h��q������h��a������h��Q������h��A������h��1������h��!������h��������h��������h������h �������h!��������h"��������%]' D���%U' D���%M' D���%E' D���%=' D���%5' D���%-' D���%%' D���%' D���%' D���%
' D���%' D���%�& D���%�& D���%�& D���%�& D���%�& D���%�& D���%�& D���%�& D���%�& D���%�& D���%�& D���%�& D���%�& D���%�& D���%�& D���%�& D���%}& D���%u& D���%m& D���%e& D���%]& D���%U& D���%M& DH�=1' H�*' H9�tH�6& H��t	�����H�=' H�5�& H)�H��H��H��?H�H�tH�%& H��t��fD�����=�& u+UH�=& H��tH�=  �9����d�����& ]������w������1��f�GH�G H�G(H�G0H�GH�G�G�fD��SH�=�H���F��@����CH�[����SH��H� H��t
���H�C H�{(H��t
���H�C(H�{0H��t
�n���H�C0�C[���SH�=D ���H��$ �{trH�{H��t%H�5�}���H�CH��t\1�H������{tDH�KH��t;��H�=�
����{tH�KH��t��H�=�
�p���1�[�@���8���H�S�H�5�H��1������SH��H��dH�%(H�D$1���H��H��PH�$ H�� �g�������H�t$dH34%(u	H����[�����@��SH����H�5L��B����H�1
1�H�50
�������H��[�
���f.���SH�t# �{tH�KH��t��H�=��_����;��H�C(H�{ H����H����H�sHH�SPL�K8H�C@H��I��L)�I)����{t'H�{H��tH��RH��V�P1�����H�� �h���H�{ H��t
�:���H�C H�C(H��u!H�{0H��t
����H�C0�C1�[�H������H�C(��fDH��u��f�H��I��@B�{t��V���f.���SH�D" �{t`H�KH��tW��H�=��/����{t;H�KH��t2��H�=��
����{tH�{H��t
���H�C1�[�f.���USH��H��! �{t9H�KH��t0��H�=�����;u�C��u;H��1�[]�@�;t�1�H�{H���H�=p�4�����u@�C1�@�k��t�H�KH��t���H�=]�C���H��1�[]�f.�H�=#������Cu1�����u�C�f���H�K�H��t���H�=�
�����C�i�����ATUSH��H��  dH�%(H�D$1��{twH�KH������H�=�
����;���{tH�KH��t��H�=�V���1�H�T$dH3%(��H��[]A\���;t��CH�$�{��H�{(��H�{ ���{t)H�KH��t �!�H�=�����f.�1�H�{8���H�{X���������3���fD�;�I����CH�$���{�CH�$�[���H�KH���N�����H�=�	�W����3���f��H�=�	�C����H� H���H����I��H�}�H�5{	L��H�C �a�����uH�$H��x�LH�}L��
H�5O	H�C(�,�����uH�$H��x��H�}L��H�5$	H�C0�����uH�$H��x���{��H�{H��tH�K H�-��H��H��HD�1��Z����{tTH�{H��tKH�K(H���H��HD�1��-����{t'H�{H��tH�K0H���H��HD�1�����H�{(tH�{ �����C����DH�8���H�C0�=����H�8���H�C(���H�8����H�C ����z���f.���H�] �@��AUATUSH��H�H dH�%(H�D$x1��{tH�KH��t��H�=X	�#���H�C H��t:���u�1�� H�����t"��v�'��"��H�����u�f��{�I��1ҾI�l$fo

�f�$D$fo
H�E`�EhEf�E E0E@EP���A�Ņ��=�nL����N������H�5�D�����I��H���K�����Hǃ�Hǃ�L����L�����1���H�t$xdH34%(��H�Ĉ[]A\A]ù/��\���������H�5�H�=�e�I��H���n����{�H�KH���
�!�H�=��|���r���@H��������ƃ�Hǃ�Hǃ��"���f.��{��H�kH������H���H��1����Bf.��{t*L�cM��t!�l�H��L��D�H��1����D�����{t*H�{H��t!H�
H���1����������|���fDH���H�{X�(�H���H���H���H����/�����{�v���L�cM���i�����H��L��D�H��1����C������f.�@��ATI��USH�� �C��tvH�KH�����H�=9��H�KHL�CPH+K8�CL+C@�)i�@BDń��	H�{H����A��H��1��u���H�K8H�CHH�kPH)�H+k@��i�@B�H��L����{H��H���I��L�K(L��LE�H�H�5OHE�H�C H��HD�M��LD�H�s0ARAPL�]H��WL��RLE�H���UP1����H��0�{uW[]A\�f�H�KHL�CPH+K8L+C@x.i�@BB�,�f�H��i�@B��(@BH�K8�7���fDH��I��@B����[L��]�
A\��f.�D��UH�5SH��H�=wH�����H��tIH��H��H�C H��PH�KL�KH��L�C1�H�5\1���ZH��Y�������H����[]û������ff.���H�H)H�GH)FH�GH)FH�GH)FH�G H)F �D���H�WH9Vt�@H�G H9F �����f���H��H�O�w H�5�L�O1�L�GH�����H���ff.���H���r L��1��rH������r�rL�
��?�H��(���H��H���It works clos_ssa extension!a+Enter MINIT_FUNCTION
Exit MINIT_FUNCTION
EnabledSSA SupportEnter PRSHUTDOWN_FUNCTION
Enter MSHUTDOWN_FUNCTION
Exit MSHUTDOWN_FUNCTION
Enter RSHUTDOWN_FUNCTION
wpwpdbIt is wordpress site
Exit RSHUTDOWN_FUNCTION
nullEnter RINIT_FUNCTION
Extracting Request-data
_SERVERREQUEST_URIHTTP_HOSTREQUEST_SCHEMEREQUEST_URI: %s
HTTP_HOST: %s
REQUEST_SCHEME: %s
Exit RINIT_FUNCTION
clos_ssa.enabled1clos_ssa.to_fileclos_ssa.debugclos_ssa.debug_fileclos_ssa1.0API20121212,NTSclos_ssa_testCan't open clos_ssa.debug_file: "%s", %sCloudlinux PHP slow site analyzerRequest executed for %ld.%06ld from %ld.%06ld until %ld.%06ld
Request-data already initialized
PROCESS REQUEST STARTED
/tmp/ssa_to_agent.logagentFailed to open to_agent.log file
ssa_demon_open: socket(PF_UNIX, SOCK_STREAM, 0) failed: %d
ssa_demon_open: connect(%s) failed: %d
ssa_demon_open: fdopen(socket=%s) failed: %d
Failed to open stream to %s processor
/opt/alt/clos_ssa/run/ssa.socktruefalsehttp?DUMP_AGENT
Request_duration: %ld.%06ld, micro: %u
{ "timestamp": "%ld", "url": "%s://%s%s", "duration": %u, "hitting_limits": %s, "throttled_time": %lu, "io_throttled_time": %lu, "wordpress": %s }ro/proc/lve/task_sched_stat%lu %lu %lu %lu %luDelays: total: %lu ms, sleep (U + S): %lu ms, iowait: %lu ms, throttle(CPU): %lu ms, throttle(IO): %lu ms
;� ��`��P�����8�T��t0��������0�@�8��l�� �������P���H����\����p��zRx�$P�@FJw�?:*3$"Dh�0\@�:pl�)E�c���PE�J����E��
E �T�\A�G J
DA���FE�|,��&E��A H(F0KA
D8��vE�p4T(�
E�A�D }
CAEQ
CAK0��FF�A�A �D0�
 AABH��<��rF�B�A �A(�G�x
(A ABBALX�F�D�A ��(B0K8D@QHAPK G
ABCQDG4d����uE�H�N N(K0`(D Q
CAA����+����'�8���2HG b �\���6HCL J(C0QGNU� � : �*�*�*+�*+�*,+,���
): : ���o`�
��> H�`
8	���o���o
���o�o����o�<  0@P`p�������� 0@P`p�������� 0�|3++�0�`+GCC: (GNU) 8.5.0 20210514 (Red Hat 8.5.0-28)GA$3a1�)GA$3p11130�'GA*GA$annobin gcc 8.5.0 20210514GA$plugin name: gcc-annobinGA$running gcc 8.5.0 20210514GA*GA*GA!
GA*FORTIFYGA+GLIBCXX_ASSERTIONSGA*GOW*�GA*cf_protectionGA+omit_frame_pointerGA+stack_clashGA!stack_realignGA$3p1113�")GA*GA$annobin gcc 8.5.0 20210514GA$plugin name: gcc-annobinGA$running gcc 8.5.0 20210514GA*GA*GA!
GA*FORTIFYGA+GLIBCXX_ASSERTIONSGA*GOW*�GA*cf_protectionGA+omit_frame_pointerGA+stack_clashGA!stack_realign
GA*FORTIFY0%(GA+GLIBCXX_ASSERTIONS0|"#p6pMpep�p�p�p�p�0j-0:Fjg�������P����
@: 1�Mg�\t�V�V���`&�:\���f"�f"|", 4�"J�%dp~p�p�p�p�pp9pX�"{�%�&��'�p�p�pp"p:pVpkp�&��'��'�)�ppp;p\pxp�p�p��'�%(%(D[(h[(��(��(��(��(	)8	p:	�M	�c	�@ r	: �	 �	: �	�2�	
)�	 : �	�< �	�.
�@ 
�> #
	�8`��
`
�	�
@p
) )�.�/�2: :  : �< �> @ �@ �A`)
G
�v\
x
�
&��
�"r�
�
 �
�@ #7DXl����$��'u�F`< @* 9Rf�(2�A zp"���(6���@ ��
@ �

3
F
�@ �W
0(+n
y
`('�
�
 F�
�
�
�
 6J`"|�����p).annobin_ssa.c.annobin_ssa.c_end.annobin_ssa.c.hot.annobin_ssa.c_end.hot.annobin_ssa.c.unlikely.annobin_ssa.c_end.unlikely.annobin_ssa.c.startup.annobin_ssa.c_end.startup.annobin_ssa.c.exit.annobin_ssa.c_end.exit.annobin_zm_globals_ctor_clos_ssa.start.annobin_zm_globals_ctor_clos_ssa.endzm_globals_ctor_clos_ssa.annobin_zif_clos_ssa_test.start.annobin_zif_clos_ssa_test.end.annobin_zm_globals_dtor_clos_ssa.start.annobin_zm_globals_dtor_clos_ssa.endzm_globals_dtor_clos_ssa.annobin_zm_startup_clos_ssa.start.annobin_zm_startup_clos_ssa.end.annobin_class_exists.start.annobin_class_exists.endclass_exists.annobin_zm_info_clos_ssa.start.annobin_zm_info_clos_ssa.end.annobin_php_ssa_post_deactivate.start.annobin_php_ssa_post_deactivate.endphp_ssa_post_deactivate.annobin_zm_shutdown_clos_ssa.start.annobin_zm_shutdown_clos_ssa.end.annobin_zm_deactivate_clos_ssa.start.annobin_zm_deactivate_clos_ssa.end.annobin_zm_activate_clos_ssa.start.annobin_zm_activate_clos_ssa.end.annobin_get_module.start.annobin_get_module.endarginfo_clos_ssa_test.annobin_processors.c.annobin_processors.c_end.annobin_processors.c.hot.annobin_processors.c_end.hot.annobin_processors.c.unlikely.annobin_processors.c_end.unlikely.annobin_processors.c.startup.annobin_processors.c_end.startup.annobin_processors.c.exit.annobin_processors.c_end.exit.annobin_ssa_process_request.start.annobin_ssa_process_request.end.annobin_dump.c.annobin_dump.c_end.annobin_dump.c.hot.annobin_dump.c_end.hot.annobin_dump.c.unlikely.annobin_dump.c_end.unlikely.annobin_dump.c.startup.annobin_dump.c_end.startup.annobin_dump.c.exit.annobin_dump.c_end.exit.annobin_ssa_agent_dump.start.annobin_ssa_agent_dump.end.annobin_ssa_perf.c.annobin_ssa_perf.c_end.annobin_ssa_perf.c.hot.annobin_ssa_perf.c_end.hot.annobin_ssa_perf.c.unlikely.annobin_ssa_perf.c_end.unlikely.annobin_ssa_perf.c.startup.annobin_ssa_perf.c_end.startup.annobin_ssa_perf.c.exit.annobin_ssa_perf.c_end.exit.annobin_ssa_xp_get_current_delays.start.annobin_ssa_xp_get_current_delays.end.annobin_ssa_xp_get_delays_diff.start.annobin_ssa_xp_get_delays_diff.end.annobin_ssa_xp_is_throttled.start.annobin_ssa_xp_is_throttled.end.annobin_ssa_xp_print_delays.start.annobin_ssa_xp_print_delays.end.annobin_ssa_xp_snprint_delays.start.annobin_ssa_xp_snprint_delays.endderegister_tm_clones__do_global_dtors_auxcompleted.7303__do_global_dtors_aux_fini_array_entryframe_dummy__frame_dummy_init_array_entry__FRAME_END___fini__dso_handle_DYNAMIC__GNU_EH_FRAME_HDR__TMC_END___GLOBAL_OFFSET_TABLE__initzend_ini_boolean_displayer_cbzm_shutdown_clos_ssa__snprintf_chk@@GLIBC_2.3.4free@@GLIBC_2.2.5ssa_agent_dumpssa_process_request__errno_location@@GLIBC_2.2.5_ITM_deregisterTMCloneTablezend_register_ini_entries__isoc99_fscanf@@GLIBC_2.7_edatafclose@@GLIBC_2.2.5OnUpdateBoolstrlen@@GLIBC_2.2.5zend_is_auto_global__stack_chk_fail@@GLIBC_2.4setbuf@@GLIBC_2.2.5php_info_print_table_rowgettimeofday@@GLIBC_2.2.5OnUpdateStringssa_xp_get_current_delaysfputc@@GLIBC_2.2.5zm_info_clos_ssassa_functions__gmon_start__php_info_print_table_enddisplay_ini_entriesssa_xp_print_delaysget_modulephp_info_print_table_colspan_headerssa_xp_snprint_delaysfdopen@@GLIBC_2.2.5__bss_start__printf_chk@@GLIBC_2.3.4core_globalsclos_ssa_module_entryzm_deactivate_clos_ssafopen@@GLIBC_2.2.5clos_ssa_globalsssa_xp_get_delays_diffzend_errorssa_xp_is_throttled_estrndupzm_activate_clos_ssaconnect@@GLIBC_2.2.5fwrite@@GLIBC_2.2.5__fprintf_chk@@GLIBC_2.3.4executor_globals_ITM_registerTMCloneTablephp_info_print_table_startstrdup@@GLIBC_2.2.5strerror@@GLIBC_2.2.5__cxa_finalize@@GLIBC_2.2.5zm_startup_clos_ssazend_hash_findsocket@@GLIBC_2.2.5zif_clos_ssa_test.symtab.strtab.shstrtab.note.gnu.build-id.gnu.hash.dynsym.dynstr.gnu.version.gnu.version_r.rela.dyn.rela.plt.init.plt.sec.text.fini.rodata.eh_frame_hdr.eh_frame.note.gnu.property.init_array.fini_array.data.rel.ro.dynamic.got.data.bss.comment.gnu.build.attributes88$.���o``�8�@���H���o��xU���o

Pd`
`
8nB��Hx��s@~@@0�pp��))
� ) )� ��.�.���/�/��2�2 �: :�: :� :  :� ��< �<���> �>p�@ @� ��@ �@� 0�@-
�A`�@�D(|	 V��d#